Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F153160584
D25126.id72651.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
5 KB
Referenced Files
None
Subscribers
None
D25126.id72651.diff
View Options
Index: sys/crypto/aesni/aesni.c
===================================================================
--- sys/crypto/aesni/aesni.c
+++ sys/crypto/aesni/aesni.c
@@ -167,7 +167,8 @@
sc = device_get_softc(dev);
sc->cid = crypto_get_driverid(dev, sizeof(struct aesni_session),
- CRYPTOCAP_F_SOFTWARE | CRYPTOCAP_F_SYNC);
+ CRYPTOCAP_F_SOFTWARE | CRYPTOCAP_F_SYNC |
+ CRYPTOCAP_F_ACCEL_SOFTWARE);
if (sc->cid < 0) {
device_printf(dev, "Could not get crypto driver id.\n");
return (ENOMEM);
Index: sys/crypto/armv8/armv8_crypto.c
===================================================================
--- sys/crypto/armv8/armv8_crypto.c
+++ sys/crypto/armv8/armv8_crypto.c
@@ -131,7 +131,7 @@
sc->dieing = 0;
sc->cid = crypto_get_driverid(dev, sizeof(struct armv8_crypto_session),
- CRYPTOCAP_F_SOFTWARE | CRYPTOCAP_F_SYNC);
+ CRYPTOCAP_F_SOFTWARE | CRYPTOCAP_F_SYNC | CRYPTOCAP_F_ACCEL_SOFTWARE);
if (sc->cid < 0) {
device_printf(dev, "Could not get crypto driver id.\n");
return (ENOMEM);
Index: sys/crypto/blake2/blake2_cryptodev.c
===================================================================
--- sys/crypto/blake2/blake2_cryptodev.c
+++ sys/crypto/blake2/blake2_cryptodev.c
@@ -129,7 +129,8 @@
sc->dying = false;
sc->cid = crypto_get_driverid(dev, sizeof(struct blake2_session),
- CRYPTOCAP_F_SOFTWARE | CRYPTOCAP_F_SYNC);
+ CRYPTOCAP_F_SOFTWARE | CRYPTOCAP_F_SYNC |
+ CRYPTOCAP_F_ACCEL_SOFTWARE);
if (sc->cid < 0) {
device_printf(dev, "Could not get crypto driver id.\n");
return (ENOMEM);
Index: sys/crypto/via/padlock.c
===================================================================
--- sys/crypto/via/padlock.c
+++ sys/crypto/via/padlock.c
@@ -119,7 +119,8 @@
struct padlock_softc *sc = device_get_softc(dev);
sc->sc_cid = crypto_get_driverid(dev, sizeof(struct padlock_session),
- CRYPTOCAP_F_SOFTWARE | CRYPTOCAP_F_SYNC);
+ CRYPTOCAP_F_SOFTWARE | CRYPTOCAP_F_SYNC |
+ CRYPTOCAP_F_ACCEL_SOFTWARE);
if (sc->sc_cid < 0) {
device_printf(dev, "Could not get crypto driver id.\n");
return (ENOMEM);
Index: sys/geom/eli/g_eli.h
===================================================================
--- sys/geom/eli/g_eli.h
+++ sys/geom/eli/g_eli.h
@@ -145,6 +145,7 @@
#define G_ELI_CRYPTO_UNKNOWN 0
#define G_ELI_CRYPTO_HW 1
#define G_ELI_CRYPTO_SW 2
+#define G_ELI_CRYPTO_SW_ACCEL 3
#ifdef _KERNEL
#if (MAX_KEY_BYTES < G_ELI_DATAIVKEYLEN)
Index: sys/geom/eli/g_eli.c
===================================================================
--- sys/geom/eli/g_eli.c
+++ sys/geom/eli/g_eli.c
@@ -489,7 +489,8 @@
{
struct g_eli_softc *sc;
struct crypto_session_params csp;
- int error;
+ uint32_t caps;
+ int error, new_crypto;
void *key;
sc = wr->w_softc;
@@ -516,6 +517,7 @@
}
switch (sc->sc_crypto) {
+ case G_ELI_CRYPTO_SW_ACCEL:
case G_ELI_CRYPTO_SW:
error = crypto_newsession(&wr->w_sid, &csp,
CRYPTOCAP_F_SOFTWARE);
@@ -526,18 +528,18 @@
break;
case G_ELI_CRYPTO_UNKNOWN:
error = crypto_newsession(&wr->w_sid, &csp,
- CRYPTOCAP_F_HARDWARE);
+ CRYPTOCAP_F_HARDWARE | CRYPTOCAP_F_SOFTWARE);
if (error == 0) {
+ caps = crypto_ses2caps(wr->w_sid);
+ if (caps & CRYPTOCAP_F_HARDWARE)
+ new_crypto = G_ELI_CRYPTO_HW;
+ else if (caps & CRYPTOCAP_F_ACCEL_SOFTWARE)
+ new_crypto = G_ELI_CRYPTO_SW_ACCEL;
+ else
+ new_crypto = G_ELI_CRYPTO_SW;
mtx_lock(&sc->sc_queue_mtx);
if (sc->sc_crypto == G_ELI_CRYPTO_UNKNOWN)
- sc->sc_crypto = G_ELI_CRYPTO_HW;
- mtx_unlock(&sc->sc_queue_mtx);
- } else {
- error = crypto_newsession(&wr->w_sid, &csp,
- CRYPTOCAP_F_SOFTWARE);
- mtx_lock(&sc->sc_queue_mtx);
- if (sc->sc_crypto == G_ELI_CRYPTO_UNKNOWN)
- sc->sc_crypto = G_ELI_CRYPTO_SW;
+ sc->sc_crypto = new_crypto;
mtx_unlock(&sc->sc_queue_mtx);
}
break;
@@ -983,6 +985,7 @@
if (sc->sc_flags & G_ELI_FLAG_AUTH)
G_ELI_DEBUG(0, " Integrity: %s", g_eli_algo2str(sc->sc_aalgo));
G_ELI_DEBUG(0, " Crypto: %s",
+ sc->sc_crypto == G_ELI_CRYPTO_SW_ACCEL ? "accelerated software" :
sc->sc_crypto == G_ELI_CRYPTO_SW ? "software" : "hardware");
return (gp);
failed:
@@ -1381,6 +1384,9 @@
case G_ELI_CRYPTO_SW:
sbuf_cat(sb, "software");
break;
+ case G_ELI_CRYPTO_SW_ACCEL:
+ sbuf_cat(sb, "accelerated software");
+ break;
default:
sbuf_cat(sb, "UNKNOWN");
break;
Index: sys/mips/cavium/cryptocteon/cryptocteon.c
===================================================================
--- sys/mips/cavium/cryptocteon/cryptocteon.c
+++ sys/mips/cavium/cryptocteon/cryptocteon.c
@@ -86,7 +86,8 @@
sc = device_get_softc(dev);
sc->sc_cid = crypto_get_driverid(dev, sizeof(struct octo_sess),
- CRYPTOCAP_F_SOFTWARE | CRYPTOCAP_F_SYNC);
+ CRYPTOCAP_F_SOFTWARE | CRYPTOCAP_F_SYNC |
+ CRYPTOCAP_F_ACCEL_SOFTWARE);
if (sc->sc_cid < 0) {
device_printf(dev, "crypto_get_driverid ret %d\n", sc->sc_cid);
return (ENXIO);
Index: sys/opencrypto/cryptodev.h
===================================================================
--- sys/opencrypto/cryptodev.h
+++ sys/opencrypto/cryptodev.h
@@ -620,6 +620,7 @@
#define CRYPTOCAP_F_HARDWARE CRYPTO_FLAG_HARDWARE
#define CRYPTOCAP_F_SOFTWARE CRYPTO_FLAG_SOFTWARE
#define CRYPTOCAP_F_SYNC 0x04000000 /* operates synchronously */
+#define CRYPTOCAP_F_ACCEL_SOFTWARE 0x08000000
extern int32_t crypto_get_driverid(device_t dev, size_t session_size,
int flags);
extern int crypto_find_driver(const char *);
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Apr 20, 1:16 PM (14 h, 33 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
31841757
Default Alt Text
D25126.id72651.diff (5 KB)
Attached To
Mode
D25126: Add a crypto capability flag for accelerated software drivers.
Attached
Detach File
Event Timeline
Log In to Comment