chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
/**
|
|
|
|
* This file is part of the Chelsio T4/T5/T6 Ethernet driver for Linux.
|
|
|
|
*
|
|
|
|
* Copyright (C) 2011-2016 Chelsio Communications. All rights reserved.
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation.
|
|
|
|
*
|
|
|
|
* Written and Maintained by:
|
|
|
|
* Manoj Malviya (manojmalviya@chelsio.com)
|
|
|
|
* Atul Gupta (atul.gupta@chelsio.com)
|
|
|
|
* Jitendra Lulla (jlulla@chelsio.com)
|
|
|
|
* Yeshaswi M R Gowda (yeshaswi@chelsio.com)
|
|
|
|
* Harsh Jain (harsh@chelsio.com)
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <linux/kernel.h>
|
|
|
|
#include <linux/module.h>
|
|
|
|
#include <linux/skbuff.h>
|
|
|
|
|
|
|
|
#include <crypto/aes.h>
|
|
|
|
#include <crypto/hash.h>
|
|
|
|
|
|
|
|
#include "t4_msg.h"
|
|
|
|
#include "chcr_core.h"
|
|
|
|
#include "cxgb4_uld.h"
|
|
|
|
|
2018-12-11 18:51:40 +08:00
|
|
|
static struct chcr_driver_data drv_data;
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
|
2020-03-07 22:36:04 +08:00
|
|
|
typedef int (*chcr_handler_func)(struct adapter *adap, unsigned char *input);
|
|
|
|
static int cpl_fw6_pld_handler(struct adapter *adap, unsigned char *input);
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
static void *chcr_uld_add(const struct cxgb4_lld_info *lld);
|
|
|
|
static int chcr_uld_state_change(void *handle, enum cxgb4_state state);
|
|
|
|
|
2020-03-30 23:18:53 +08:00
|
|
|
#ifdef CONFIG_CHELSIO_IPSEC_INLINE
|
|
|
|
static void update_netdev_features(void);
|
|
|
|
#endif /* CONFIG_CHELSIO_IPSEC_INLINE */
|
|
|
|
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
static chcr_handler_func work_handlers[NUM_CPL_CMDS] = {
|
|
|
|
[CPL_FW6_PLD] = cpl_fw6_pld_handler,
|
2020-03-07 22:36:04 +08:00
|
|
|
#ifdef CONFIG_CHELSIO_TLS_DEVICE
|
|
|
|
[CPL_ACT_OPEN_RPL] = chcr_ktls_cpl_act_open_rpl,
|
|
|
|
[CPL_SET_TCB_RPL] = chcr_ktls_cpl_set_tcb_rpl,
|
|
|
|
#endif
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
};
|
|
|
|
|
2016-09-17 10:42:39 +08:00
|
|
|
static struct cxgb4_uld_info chcr_uld_info = {
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
.name = DRV_MODULE_NAME,
|
2016-09-17 10:42:39 +08:00
|
|
|
.nrxq = MAX_ULD_QSETS,
|
2018-10-13 16:16:56 +08:00
|
|
|
/* Max ntxq will be derived from fw config file*/
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
.rxq_size = 1024,
|
|
|
|
.add = chcr_uld_add,
|
|
|
|
.state_change = chcr_uld_state_change,
|
|
|
|
.rx_handler = chcr_uld_rx_handler,
|
2020-03-07 22:36:05 +08:00
|
|
|
#if defined(CONFIG_CHELSIO_IPSEC_INLINE) || defined(CONFIG_CHELSIO_TLS_DEVICE)
|
2017-11-16 19:27:08 +08:00
|
|
|
.tx_handler = chcr_uld_tx_handler,
|
2020-03-07 22:36:05 +08:00
|
|
|
#endif /* CONFIG_CHELSIO_IPSEC_INLINE || CONFIG_CHELSIO_TLS_DEVICE */
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
};
|
|
|
|
|
2018-12-11 18:51:40 +08:00
|
|
|
static void detach_work_fn(struct work_struct *work)
|
|
|
|
{
|
|
|
|
struct chcr_dev *dev;
|
|
|
|
|
|
|
|
dev = container_of(work, struct chcr_dev, detach_work.work);
|
|
|
|
|
|
|
|
if (atomic_read(&dev->inflight)) {
|
|
|
|
dev->wqretry--;
|
|
|
|
if (dev->wqretry) {
|
|
|
|
pr_debug("Request Inflight Count %d\n",
|
|
|
|
atomic_read(&dev->inflight));
|
|
|
|
|
|
|
|
schedule_delayed_work(&dev->detach_work, WQ_DETACH_TM);
|
|
|
|
} else {
|
|
|
|
WARN(1, "CHCR:%d request Still Pending\n",
|
|
|
|
atomic_read(&dev->inflight));
|
|
|
|
complete(&dev->detach_comp);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
complete(&dev->detach_comp);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-06-15 15:13:47 +08:00
|
|
|
struct uld_ctx *assign_chcr_device(void)
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
{
|
2017-06-15 15:13:47 +08:00
|
|
|
struct uld_ctx *u_ctx = NULL;
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
|
|
|
|
/*
|
2017-06-15 15:13:47 +08:00
|
|
|
* When multiple devices are present in system select
|
|
|
|
* device in round-robin fashion for crypto operations
|
|
|
|
* Although One session must use the same device to
|
|
|
|
* maintain request-response ordering.
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
*/
|
2018-12-11 18:51:40 +08:00
|
|
|
mutex_lock(&drv_data.drv_mutex);
|
|
|
|
if (!list_empty(&drv_data.act_dev)) {
|
|
|
|
u_ctx = drv_data.last_dev;
|
|
|
|
if (list_is_last(&drv_data.last_dev->entry, &drv_data.act_dev))
|
|
|
|
drv_data.last_dev = list_first_entry(&drv_data.act_dev,
|
|
|
|
struct uld_ctx, entry);
|
2017-06-15 15:13:47 +08:00
|
|
|
else
|
2018-12-11 18:51:40 +08:00
|
|
|
drv_data.last_dev =
|
|
|
|
list_next_entry(drv_data.last_dev, entry);
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
}
|
2018-12-11 18:51:40 +08:00
|
|
|
mutex_unlock(&drv_data.drv_mutex);
|
2017-06-15 15:13:47 +08:00
|
|
|
return u_ctx;
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
}
|
|
|
|
|
2018-12-11 18:51:40 +08:00
|
|
|
static void chcr_dev_add(struct uld_ctx *u_ctx)
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
{
|
|
|
|
struct chcr_dev *dev;
|
|
|
|
|
2018-12-11 18:51:40 +08:00
|
|
|
dev = &u_ctx->dev;
|
|
|
|
dev->state = CHCR_ATTACH;
|
|
|
|
atomic_set(&dev->inflight, 0);
|
|
|
|
mutex_lock(&drv_data.drv_mutex);
|
|
|
|
list_move(&u_ctx->entry, &drv_data.act_dev);
|
|
|
|
if (!drv_data.last_dev)
|
|
|
|
drv_data.last_dev = u_ctx;
|
|
|
|
mutex_unlock(&drv_data.drv_mutex);
|
|
|
|
}
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
|
2018-12-11 18:51:40 +08:00
|
|
|
static void chcr_dev_init(struct uld_ctx *u_ctx)
|
|
|
|
{
|
|
|
|
struct chcr_dev *dev;
|
|
|
|
|
|
|
|
dev = &u_ctx->dev;
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
spin_lock_init(&dev->lock_chcr_dev);
|
2018-12-11 18:51:40 +08:00
|
|
|
INIT_DELAYED_WORK(&dev->detach_work, detach_work_fn);
|
|
|
|
init_completion(&dev->detach_comp);
|
|
|
|
dev->state = CHCR_INIT;
|
|
|
|
dev->wqretry = WQ_RETRY;
|
|
|
|
atomic_inc(&drv_data.dev_count);
|
|
|
|
atomic_set(&dev->inflight, 0);
|
|
|
|
mutex_lock(&drv_data.drv_mutex);
|
|
|
|
list_add_tail(&u_ctx->entry, &drv_data.inact_dev);
|
|
|
|
mutex_unlock(&drv_data.drv_mutex);
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
}
|
|
|
|
|
2018-12-11 18:51:40 +08:00
|
|
|
static int chcr_dev_move(struct uld_ctx *u_ctx)
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
{
|
2018-12-11 18:51:40 +08:00
|
|
|
mutex_lock(&drv_data.drv_mutex);
|
|
|
|
if (drv_data.last_dev == u_ctx) {
|
|
|
|
if (list_is_last(&drv_data.last_dev->entry, &drv_data.act_dev))
|
|
|
|
drv_data.last_dev = list_first_entry(&drv_data.act_dev,
|
|
|
|
struct uld_ctx, entry);
|
2017-06-15 15:13:47 +08:00
|
|
|
else
|
2018-12-11 18:51:40 +08:00
|
|
|
drv_data.last_dev =
|
|
|
|
list_next_entry(drv_data.last_dev, entry);
|
2017-06-15 15:13:47 +08:00
|
|
|
}
|
2018-12-11 18:51:40 +08:00
|
|
|
list_move(&u_ctx->entry, &drv_data.inact_dev);
|
|
|
|
if (list_empty(&drv_data.act_dev))
|
|
|
|
drv_data.last_dev = NULL;
|
|
|
|
atomic_dec(&drv_data.dev_count);
|
|
|
|
mutex_unlock(&drv_data.drv_mutex);
|
|
|
|
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2020-03-07 22:36:04 +08:00
|
|
|
static int cpl_fw6_pld_handler(struct adapter *adap,
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
unsigned char *input)
|
|
|
|
{
|
|
|
|
struct crypto_async_request *req;
|
|
|
|
struct cpl_fw6_pld *fw6_pld;
|
|
|
|
u32 ack_err_status = 0;
|
|
|
|
int error_status = 0;
|
|
|
|
|
|
|
|
fw6_pld = (struct cpl_fw6_pld *)input;
|
|
|
|
req = (struct crypto_async_request *)(uintptr_t)be64_to_cpu(
|
|
|
|
fw6_pld->data[1]);
|
|
|
|
|
|
|
|
ack_err_status =
|
|
|
|
ntohl(*(__be32 *)((unsigned char *)&fw6_pld->data[0] + 4));
|
2018-12-11 18:51:42 +08:00
|
|
|
if (CHK_MAC_ERR_BIT(ack_err_status) || CHK_PAD_ERR_BIT(ack_err_status))
|
|
|
|
error_status = -EBADMSG;
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
/* call completion callback with failure status */
|
|
|
|
if (req) {
|
2016-11-29 21:30:43 +08:00
|
|
|
error_status = chcr_handle_resp(req, input, error_status);
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
} else {
|
|
|
|
pr_err("Incorrect request address from the firmware\n");
|
|
|
|
return -EFAULT;
|
|
|
|
}
|
2018-12-11 18:51:42 +08:00
|
|
|
if (error_status)
|
|
|
|
atomic_inc(&adap->chcr_stats.error);
|
|
|
|
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int chcr_send_wr(struct sk_buff *skb)
|
|
|
|
{
|
2016-11-18 19:07:40 +08:00
|
|
|
return cxgb4_crypto_send(skb->dev, skb);
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void *chcr_uld_add(const struct cxgb4_lld_info *lld)
|
|
|
|
{
|
|
|
|
struct uld_ctx *u_ctx;
|
|
|
|
|
2017-10-08 16:07:24 +08:00
|
|
|
/* Create the device and add it in the device list */
|
2020-02-05 18:34:33 +08:00
|
|
|
pr_info_once("%s - version %s\n", DRV_DESC, DRV_VERSION);
|
2017-10-08 16:07:24 +08:00
|
|
|
if (!(lld->ulp_crypto & ULP_CRYPTO_LOOKASIDE))
|
|
|
|
return ERR_PTR(-EOPNOTSUPP);
|
|
|
|
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
/* Create the device and add it in the device list */
|
|
|
|
u_ctx = kzalloc(sizeof(*u_ctx), GFP_KERNEL);
|
|
|
|
if (!u_ctx) {
|
|
|
|
u_ctx = ERR_PTR(-ENOMEM);
|
|
|
|
goto out;
|
|
|
|
}
|
|
|
|
u_ctx->lldi = *lld;
|
2018-12-11 18:51:40 +08:00
|
|
|
chcr_dev_init(u_ctx);
|
2020-03-07 22:36:03 +08:00
|
|
|
|
|
|
|
#ifdef CONFIG_CHELSIO_TLS_DEVICE
|
|
|
|
if (lld->ulp_crypto & ULP_CRYPTO_KTLS_INLINE)
|
|
|
|
chcr_enable_ktls(padap(&u_ctx->dev));
|
|
|
|
#endif
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
out:
|
|
|
|
return u_ctx;
|
|
|
|
}
|
|
|
|
|
|
|
|
int chcr_uld_rx_handler(void *handle, const __be64 *rsp,
|
|
|
|
const struct pkt_gl *pgl)
|
|
|
|
{
|
|
|
|
struct uld_ctx *u_ctx = (struct uld_ctx *)handle;
|
2018-12-11 18:51:40 +08:00
|
|
|
struct chcr_dev *dev = &u_ctx->dev;
|
2020-03-07 22:36:04 +08:00
|
|
|
struct adapter *adap = padap(dev);
|
2017-01-27 18:39:11 +08:00
|
|
|
const struct cpl_fw6_pld *rpl = (struct cpl_fw6_pld *)rsp;
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
|
2020-03-07 22:36:04 +08:00
|
|
|
if (!work_handlers[rpl->opcode]) {
|
|
|
|
pr_err("Unsupported opcode %d received\n", rpl->opcode);
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!pgl)
|
2020-03-07 22:36:04 +08:00
|
|
|
work_handlers[rpl->opcode](adap, (unsigned char *)&rsp[1]);
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
else
|
2020-03-07 22:36:04 +08:00
|
|
|
work_handlers[rpl->opcode](adap, pgl->va);
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2020-03-07 22:36:05 +08:00
|
|
|
#if defined(CONFIG_CHELSIO_IPSEC_INLINE) || defined(CONFIG_CHELSIO_TLS_DEVICE)
|
2017-11-16 19:27:08 +08:00
|
|
|
int chcr_uld_tx_handler(struct sk_buff *skb, struct net_device *dev)
|
|
|
|
{
|
2020-03-07 22:36:05 +08:00
|
|
|
/* In case if skb's decrypted bit is set, it's nic tls packet, else it's
|
|
|
|
* ipsec packet.
|
|
|
|
*/
|
|
|
|
#ifdef CONFIG_CHELSIO_TLS_DEVICE
|
|
|
|
if (skb->decrypted)
|
|
|
|
return chcr_ktls_xmit(skb, dev);
|
|
|
|
#endif
|
|
|
|
#ifdef CONFIG_CHELSIO_IPSEC_INLINE
|
2017-11-16 19:27:08 +08:00
|
|
|
return chcr_ipsec_xmit(skb, dev);
|
2020-03-07 22:36:05 +08:00
|
|
|
#endif
|
|
|
|
return 0;
|
2017-11-16 19:27:08 +08:00
|
|
|
}
|
2020-03-07 22:36:05 +08:00
|
|
|
#endif /* CONFIG_CHELSIO_IPSEC_INLINE || CONFIG_CHELSIO_TLS_DEVICE */
|
2017-11-16 19:27:08 +08:00
|
|
|
|
2018-12-11 18:51:40 +08:00
|
|
|
static void chcr_detach_device(struct uld_ctx *u_ctx)
|
|
|
|
{
|
|
|
|
struct chcr_dev *dev = &u_ctx->dev;
|
|
|
|
|
|
|
|
if (dev->state == CHCR_DETACH) {
|
|
|
|
pr_debug("Detached Event received for already detach device\n");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
dev->state = CHCR_DETACH;
|
|
|
|
if (atomic_read(&dev->inflight) != 0) {
|
|
|
|
schedule_delayed_work(&dev->detach_work, WQ_DETACH_TM);
|
|
|
|
wait_for_completion(&dev->detach_comp);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Move u_ctx to inactive_dev list
|
|
|
|
chcr_dev_move(u_ctx);
|
|
|
|
}
|
|
|
|
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
static int chcr_uld_state_change(void *handle, enum cxgb4_state state)
|
|
|
|
{
|
|
|
|
struct uld_ctx *u_ctx = handle;
|
|
|
|
int ret = 0;
|
|
|
|
|
|
|
|
switch (state) {
|
|
|
|
case CXGB4_STATE_UP:
|
2018-12-11 18:51:40 +08:00
|
|
|
if (u_ctx->dev.state != CHCR_INIT) {
|
|
|
|
// ALready Initialised.
|
|
|
|
return 0;
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
}
|
2018-12-11 18:51:40 +08:00
|
|
|
chcr_dev_add(u_ctx);
|
|
|
|
ret = start_crypto();
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
break;
|
|
|
|
|
|
|
|
case CXGB4_STATE_DETACH:
|
2018-12-11 18:51:40 +08:00
|
|
|
chcr_detach_device(u_ctx);
|
2020-02-19 21:13:57 +08:00
|
|
|
if (!atomic_read(&drv_data.dev_count))
|
|
|
|
stop_crypto();
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
break;
|
|
|
|
|
|
|
|
case CXGB4_STATE_START_RECOVERY:
|
|
|
|
case CXGB4_STATE_DOWN:
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
2020-03-30 23:18:53 +08:00
|
|
|
#ifdef CONFIG_CHELSIO_IPSEC_INLINE
|
|
|
|
static void update_netdev_features(void)
|
|
|
|
{
|
|
|
|
struct uld_ctx *u_ctx, *tmp;
|
|
|
|
|
|
|
|
mutex_lock(&drv_data.drv_mutex);
|
|
|
|
list_for_each_entry_safe(u_ctx, tmp, &drv_data.inact_dev, entry) {
|
|
|
|
if (u_ctx->lldi.crypto & ULP_CRYPTO_IPSEC_INLINE)
|
|
|
|
chcr_add_xfrmops(&u_ctx->lldi);
|
|
|
|
}
|
|
|
|
list_for_each_entry_safe(u_ctx, tmp, &drv_data.act_dev, entry) {
|
|
|
|
if (u_ctx->lldi.crypto & ULP_CRYPTO_IPSEC_INLINE)
|
|
|
|
chcr_add_xfrmops(&u_ctx->lldi);
|
|
|
|
}
|
|
|
|
mutex_unlock(&drv_data.drv_mutex);
|
|
|
|
}
|
|
|
|
#endif /* CONFIG_CHELSIO_IPSEC_INLINE */
|
|
|
|
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
static int __init chcr_crypto_init(void)
|
|
|
|
{
|
2018-12-11 18:51:40 +08:00
|
|
|
INIT_LIST_HEAD(&drv_data.act_dev);
|
|
|
|
INIT_LIST_HEAD(&drv_data.inact_dev);
|
|
|
|
atomic_set(&drv_data.dev_count, 0);
|
|
|
|
mutex_init(&drv_data.drv_mutex);
|
|
|
|
drv_data.last_dev = NULL;
|
2018-10-18 22:04:19 +08:00
|
|
|
cxgb4_register_uld(CXGB4_ULD_CRYPTO, &chcr_uld_info);
|
2018-12-11 18:51:40 +08:00
|
|
|
|
2020-03-30 23:18:53 +08:00
|
|
|
#ifdef CONFIG_CHELSIO_IPSEC_INLINE
|
|
|
|
rtnl_lock();
|
|
|
|
update_netdev_features();
|
|
|
|
rtnl_unlock();
|
|
|
|
#endif /* CONFIG_CHELSIO_IPSEC_INLINE */
|
|
|
|
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void __exit chcr_crypto_exit(void)
|
|
|
|
{
|
|
|
|
struct uld_ctx *u_ctx, *tmp;
|
2020-01-03 12:56:51 +08:00
|
|
|
struct adapter *adap;
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
|
2018-12-11 18:51:40 +08:00
|
|
|
stop_crypto();
|
|
|
|
cxgb4_unregister_uld(CXGB4_ULD_CRYPTO);
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
/* Remove all devices from list */
|
2018-12-11 18:51:40 +08:00
|
|
|
mutex_lock(&drv_data.drv_mutex);
|
|
|
|
list_for_each_entry_safe(u_ctx, tmp, &drv_data.act_dev, entry) {
|
2020-01-03 12:56:51 +08:00
|
|
|
adap = padap(&u_ctx->dev);
|
|
|
|
memset(&adap->chcr_stats, 0, sizeof(adap->chcr_stats));
|
2020-03-07 22:36:03 +08:00
|
|
|
#ifdef CONFIG_CHELSIO_TLS_DEVICE
|
|
|
|
if (u_ctx->lldi.ulp_crypto & ULP_CRYPTO_KTLS_INLINE)
|
|
|
|
chcr_disable_ktls(adap);
|
|
|
|
#endif
|
2018-12-11 18:51:40 +08:00
|
|
|
list_del(&u_ctx->entry);
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
kfree(u_ctx);
|
|
|
|
}
|
2018-12-11 18:51:40 +08:00
|
|
|
list_for_each_entry_safe(u_ctx, tmp, &drv_data.inact_dev, entry) {
|
2020-01-03 12:56:51 +08:00
|
|
|
adap = padap(&u_ctx->dev);
|
|
|
|
memset(&adap->chcr_stats, 0, sizeof(adap->chcr_stats));
|
2020-03-07 22:36:03 +08:00
|
|
|
#ifdef CONFIG_CHELSIO_TLS_DEVICE
|
|
|
|
if (u_ctx->lldi.ulp_crypto & ULP_CRYPTO_KTLS_INLINE)
|
|
|
|
chcr_disable_ktls(adap);
|
|
|
|
#endif
|
2018-12-11 18:51:40 +08:00
|
|
|
list_del(&u_ctx->entry);
|
|
|
|
kfree(u_ctx);
|
|
|
|
}
|
|
|
|
mutex_unlock(&drv_data.drv_mutex);
|
chcr: Support for Chelsio's Crypto Hardware
The Chelsio's Crypto Hardware can perform the following operations:
SHA1, SHA224, SHA256, SHA384 and SHA512, HMAC(SHA1), HMAC(SHA224),
HMAC(SHA256), HMAC(SHA384), HAMC(SHA512), AES-128-CBC, AES-192-CBC,
AES-256-CBC, AES-128-XTS, AES-256-XTS
This patch implements the driver for above mentioned features. This
driver is an Upper Layer Driver which is attached to Chelsio's LLD
(cxgb4) and uses the queue allocated by the LLD for sending the crypto
requests to the Hardware and receiving the responses from it.
The crypto operations can be performed by Chelsio's hardware from the
userspace applications and/or from within the kernel space using the
kernel's crypto API.
The above mentioned crypto features have been tested using kernel's
tests mentioned in testmgr.h. They also have been tested from user
space using libkcapi and Openssl.
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-08-17 15:03:05 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
module_init(chcr_crypto_init);
|
|
|
|
module_exit(chcr_crypto_exit);
|
|
|
|
|
|
|
|
MODULE_DESCRIPTION("Crypto Co-processor for Chelsio Terminator cards.");
|
|
|
|
MODULE_LICENSE("GPL");
|
|
|
|
MODULE_AUTHOR("Chelsio Communications");
|
|
|
|
MODULE_VERSION(DRV_VERSION);
|