diff options
| author | Conrad Meyer <cem@FreeBSD.org> | 2018-07-18 00:56:25 +0000 |
|---|---|---|
| committer | Conrad Meyer <cem@FreeBSD.org> | 2018-07-18 00:56:25 +0000 |
| commit | 1b0909d51a8aa8b5ec5a61c2dc1a69642976a732 (patch) | |
| tree | b9c915e7d2ca9312b6f83308f05040a78875b6d7 /sys/dev/cesa | |
| parent | 38b42191fb8cbdf348508c72b504e0dc3da1b53c (diff) | |
Notes
Diffstat (limited to 'sys/dev/cesa')
| -rw-r--r-- | sys/dev/cesa/cesa.c | 81 | ||||
| -rw-r--r-- | sys/dev/cesa/cesa.h | 6 |
2 files changed, 8 insertions, 79 deletions
diff --git a/sys/dev/cesa/cesa.c b/sys/dev/cesa/cesa.c index 21508d70c7f7..6cbac049bb42 100644 --- a/sys/dev/cesa/cesa.c +++ b/sys/dev/cesa/cesa.c @@ -80,8 +80,7 @@ static int cesa_attach(device_t); static int cesa_attach_late(device_t); static int cesa_detach(device_t); static void cesa_intr(void *); -static int cesa_newsession(device_t, u_int32_t *, struct cryptoini *); -static int cesa_freesession(device_t, u_int64_t); +static int cesa_newsession(device_t, crypto_session_t, struct cryptoini *); static int cesa_process(device_t, struct cryptop *, int); static struct resource_spec cesa_res_spec[] = { @@ -99,7 +98,6 @@ static device_method_t cesa_methods[] = { /* Crypto device methods */ DEVMETHOD(cryptodev_newsession, cesa_newsession), - DEVMETHOD(cryptodev_freesession,cesa_freesession), DEVMETHOD(cryptodev_process, cesa_process), DEVMETHOD_END @@ -233,33 +231,6 @@ cesa_sync_desc(struct cesa_softc *sc, bus_dmasync_op_t op) cesa_sync_dma_mem(&sc->sc_requests_cdm, op); } -static struct cesa_session * -cesa_alloc_session(struct cesa_softc *sc) -{ - struct cesa_session *cs; - - CESA_GENERIC_ALLOC_LOCKED(sc, cs, sessions); - - return (cs); -} - -static struct cesa_session * -cesa_get_session(struct cesa_softc *sc, uint32_t sid) -{ - - if (sid >= CESA_SESSIONS) - return (NULL); - - return (&sc->sc_sessions[sid]); -} - -static void -cesa_free_session(struct cesa_softc *sc, struct cesa_session *cs) -{ - - CESA_GENERIC_FREE_LOCKED(sc, cs, sessions); -} - static struct cesa_request * cesa_alloc_request(struct cesa_softc *sc) { @@ -1372,14 +1343,6 @@ cesa_attach_late(device_t dev) cr_stq); } - /* Initialize data structures: Sessions Pool */ - STAILQ_INIT(&sc->sc_free_sessions); - for (i = 0; i < CESA_SESSIONS; i++) { - sc->sc_sessions[i].cs_sid = i; - STAILQ_INSERT_TAIL(&sc->sc_free_sessions, &sc->sc_sessions[i], - cs_stq); - } - /* * Initialize TDMA: * - Burst limit: 128 bytes, @@ -1415,7 +1378,8 @@ cesa_attach_late(device_t dev) CESA_TDMA_EMR_DATA_ERROR); /* Register in OCF */ - sc->sc_cid = crypto_get_driverid(dev, CRYPTOCAP_F_HARDWARE); + sc->sc_cid = crypto_get_driverid(dev, sizeof(struct cesa_session), + CRYPTOCAP_F_HARDWARE); if (sc->sc_cid < 0) { device_printf(dev, "could not get crypto driver id\n"); goto err8; @@ -1608,7 +1572,7 @@ cesa_intr(void *arg) } static int -cesa_newsession(device_t dev, uint32_t *sidp, struct cryptoini *cri) +cesa_newsession(device_t dev, crypto_session_t cses, struct cryptoini *cri) { struct cesa_session *cs; struct cesa_softc *sc; @@ -1645,9 +1609,7 @@ cesa_newsession(device_t dev, uint32_t *sidp, struct cryptoini *cri) return (E2BIG); /* Allocate session */ - cs = cesa_alloc_session(sc); - if (!cs) - return (ENOMEM); + cs = crypto_get_driver_session(cses); /* Prepare CESA configuration */ cs->cs_config = 0; @@ -1730,29 +1692,8 @@ cesa_newsession(device_t dev, uint32_t *sidp, struct cryptoini *cri) error = cesa_set_mkey(cs, mac->cri_alg, mac->cri_key, mac->cri_klen / 8); - if (error) { - cesa_free_session(sc, cs); - return (EINVAL); - } - - *sidp = cs->cs_sid; - - return (0); -} - -static int -cesa_freesession(device_t dev, uint64_t tid) -{ - struct cesa_session *cs; - struct cesa_softc *sc; - - sc = device_get_softc(dev); - cs = cesa_get_session(sc, CRYPTO_SESID2LID(tid)); - if (!cs) - return (EINVAL); - - /* Free session */ - cesa_free_session(sc, cs); + if (error) + return (error); return (0); } @@ -1774,13 +1715,7 @@ cesa_process(device_t dev, struct cryptop *crp, int hint) mac = NULL; error = 0; - /* Check session ID */ - cs = cesa_get_session(sc, CRYPTO_SESID2LID(crp->crp_sid)); - if (!cs) { - crp->crp_etype = EINVAL; - crypto_done(crp); - return (0); - } + cs = crypto_get_driver_session(crp->crp_session); /* Check and parse input */ if (crp->crp_ilen > CESA_MAX_REQUEST_SIZE) { diff --git a/sys/dev/cesa/cesa.h b/sys/dev/cesa/cesa.h index 15048897a862..9fa35b89b18f 100644 --- a/sys/dev/cesa/cesa.h +++ b/sys/dev/cesa/cesa.h @@ -193,7 +193,6 @@ struct cesa_sa_desc { }; struct cesa_session { - uint32_t cs_sid; uint32_t cs_config; unsigned int cs_klen; unsigned int cs_ivlen; @@ -203,8 +202,6 @@ struct cesa_session { uint8_t cs_aes_dkey[CESA_MAX_KEY_LEN]; uint8_t cs_hiv_in[CESA_MAX_HASH_LEN]; uint8_t cs_hiv_out[CESA_MAX_HASH_LEN]; - - STAILQ_ENTRY(cesa_session) cs_stq; }; struct cesa_request { @@ -264,10 +261,7 @@ struct cesa_softc { STAILQ_HEAD(, cesa_request) sc_ready_requests; STAILQ_HEAD(, cesa_request) sc_queued_requests; - /* Sessions pool */ struct mtx sc_sessions_lock; - struct cesa_session sc_sessions[CESA_SESSIONS]; - STAILQ_HEAD(, cesa_session) sc_free_sessions; /* CESA SRAM Address */ bus_addr_t sc_sram_base_pa; |
