Home | History | Annotate | Download | only in marvell

Lines Matching defs:mv_p

568 	struct mvxpsec_packet *mv_p;
591 while ( (mv_p = SIMPLEQ_FIRST(&sc->sc_run_queue)) != NULL) {
594 mv_p->crp->crp_etype = EINVAL;
595 mvxpsec_done_packet(mv_p);
868 mvxpsec_dma_copy_packet(struct mvxpsec_softc *sc, struct mvxpsec_packet *mv_p)
870 struct mvxpsec_session *mv_s = mv_p->mv_s;
895 if (mv_p->mac_off > 0)
896 pkt_off = mv_p->mac_off;
897 if ((mv_p->flags & CRP_EXT_IV) == 0 && pkt_off > mv_p->enc_ivoff)
898 pkt_off = mv_p->enc_ivoff;
899 if (mv_p->enc_off > 0 && pkt_off > mv_p->enc_off)
900 pkt_off = mv_p->enc_off;
905 src = (uint32_t)mv_p->pkt_header_map->dm_segs[0].ds_addr;
906 len = sizeof(mv_p->pkt_header);
907 err = mvxpsec_dma_copy(sc, &mv_p->dma_ring, dst, src, len);
919 err = mvxpsec_dma_copy(sc, &mv_p->dma_ring, dst, src, len);
927 for (i = 0; i < mv_p->data_map->dm_nsegs; i++) {
928 src = mv_p->data_map->dm_segs[i].ds_addr;
929 len = mv_p->data_map->dm_segs[i].ds_len;
943 err = mvxpsec_dma_copy(sc, &mv_p->dma_ring, dst, src, len);
950 err = mvxpsec_dma_acc_activate(sc, &mv_p->dma_ring);
956 for (i = 0; i < mv_p->data_map->dm_nsegs; i++) {
957 dst = (uint32_t)mv_p->data_map->dm_segs[i].ds_addr;
958 len = (uint32_t)mv_p->data_map->dm_segs[i].ds_len;
972 err = mvxpsec_dma_copy(sc, &mv_p->dma_ring, dst, src, len);
984 if (mv_p->flags & CRP_EXT_IV) {
985 dst = (uint32_t)mv_p->pkt_header_map->dm_segs[0].ds_addr;
987 len = sizeof(mv_p->pkt_header);
988 err = mvxpsec_dma_copy(sc, &mv_p->dma_ring, dst, src, len);
997 mvxpsec_dma_sync_packet(struct mvxpsec_softc *sc, struct mvxpsec_packet *mv_p)
1001 mv_p->pkt_header_map, 0, sizeof(mv_p->pkt_header),
1007 struct mvxpsec_session *mv_s = mv_p->mv_s;
1019 mv_p->data_map, 0, mv_p->data_len,
1200 struct mvxpsec_packet *mv_p;
1209 SIMPLEQ_FOREACH(mv_p, &sc->sc_run_queue, queue)
1210 mvxpsec_dma_free(sc, &mv_p->dma_ring);
1321 mvxpsec_header_finalize(struct mvxpsec_packet *mv_p)
1323 struct mvxpsec_acc_descriptor *desc = &mv_p->pkt_header.desc;
1328 enc_start = MVXPSEC_SRAM_PAYLOAD_DA(mv_p->enc_off);
1329 enc_len = mv_p->enc_len;
1330 if (mv_p->flags & CRP_EXT_IV)
1331 iv_offset = mv_p->enc_ivoff;
1333 iv_offset = MVXPSEC_SRAM_PAYLOAD_DA(mv_p->enc_ivoff);
1334 mac_start = MVXPSEC_SRAM_PAYLOAD_DA(mv_p->mac_off);
1335 mac_len = mv_p->mac_len;
1336 mac_offset = MVXPSEC_SRAM_PAYLOAD_DA(mv_p->mac_dst);
1432 struct mvxpsec_packet *mv_p = obj;
1434 mv_p->dma_ring.dma_head = NULL;
1435 mv_p->dma_ring.dma_last = NULL;
1436 mv_p->dma_ring.dma_size = 0;
1439 mv_p->pkt_header_map = 0;
1441 sizeof(mv_p->pkt_header), 1, sizeof(mv_p->pkt_header), 0,
1443 &mv_p->pkt_header_map)) {
1447 if (bus_dmamap_load(sc->sc_dmat, mv_p->pkt_header_map,
1448 &mv_p->pkt_header, sizeof(mv_p->pkt_header),
1455 mv_p->data_map = 0;
1458 0, BUS_DMA_NOWAIT | BUS_DMA_ALLOCNOW, &mv_p->data_map)) {
1465 if (mv_p->pkt_header_map)
1466 bus_dmamap_destroy(sc->sc_dmat, mv_p->pkt_header_map);
1467 if (mv_p->data_map)
1468 bus_dmamap_destroy(sc->sc_dmat, mv_p->data_map);
1479 struct mvxpsec_packet *mv_p = obj;
1482 mvxpsec_dma_free(sc, &mv_p->dma_ring);
1484 bus_dmamap_destroy(sc->sc_dmat, mv_p->pkt_header_map);
1485 bus_dmamap_destroy(sc->sc_dmat, mv_p->data_map);
1598 struct mvxpsec_packet *mv_p;
1610 if ( (mv_p = SLIST_FIRST(&sc->sc_free_list)) != NULL) {
1615 mv_p = pool_cache_get(sc->sc_packet_pool, PR_NOWAIT);
1616 if (mv_p == NULL) {
1623 mv_p->mv_s = mv_s;
1624 mv_p->flags = 0;
1625 mv_p->data_ptr = NULL;
1627 return mv_p;
1634 mvxpsec_packet_dealloc(struct mvxpsec_packet *mv_p)
1636 struct mvxpsec_session *mv_s = mv_p->mv_s;
1642 if (mv_p->dma_ring.dma_size != 0) {
1643 sc->sc_desc_ring_cons += mv_p->dma_ring.dma_size;
1645 mv_p->dma_ring.dma_head = NULL;
1646 mv_p->dma_ring.dma_last = NULL;
1647 mv_p->dma_ring.dma_size = 0;
1649 if (mv_p->data_map) {
1650 if (mv_p->flags & RDY_DATA) {
1651 bus_dmamap_unload(sc->sc_dmat, mv_p->data_map);
1652 mv_p->flags &= ~RDY_DATA;
1657 pool_cache_put(sc->sc_packet_pool, mv_p);
1659 SLIST_INSERT_HEAD(&sc->sc_free_list, mv_p, free_list);
1666 mvxpsec_packet_enqueue(struct mvxpsec_packet *mv_p)
1668 struct mvxpsec_softc *sc = mv_p->mv_s->sc;
1676 SIMPLEQ_INSERT_TAIL(&sc->sc_wait_queue, mv_p, queue);
1678 mv_p->flags |= SETUP_DONE;
1683 SIMPLEQ_INSERT_TAIL(&sc->sc_wait_queue, mv_p, queue);
1687 cur_dma = mv_p->dma_ring.dma_head;
1690 mv_p->flags |= SETUP_DONE;
1697 mvxpsec_done_packet(struct mvxpsec_packet *mv_p)
1699 struct mvxpsec_session *mv_s = mv_p->mv_s;
1702 KASSERT((mv_p->flags & RDY_DATA));
1703 KASSERT((mv_p->flags & SETUP_DONE));
1706 bus_dmamap_sync(sc->sc_dmat, mv_p->data_map,
1707 0, mv_p->data_len,
1709 bus_dmamap_unload(sc->sc_dmat, mv_p->data_map);
1710 mv_p->flags &= ~RDY_DATA;
1716 bus_dmamap_sync(sc->sc_dmat, mv_p->pkt_header_map,
1717 0, sizeof(mv_p->pkt_header),
1729 switch (mv_p->data_type) {
1731 m = mv_p->data_mbuf;
1738 uio = mv_p->data_uio;
1754 mvxpsec_dump_packet_desc(__func__, mv_p);
1757 mvxpsec_dump_packet_data(__func__, mv_p);
1775 if (mv_p->flags & CRP_EXT_IV) {
1776 memcpy(mv_p->ext_iv,
1777 &mv_p->pkt_header.crp_iv_ext, mv_p->ext_ivlen);
1778 mv_p->ext_iv = NULL;
1779 mv_p->ext_ivlen = 0;
1783 mv_p->crp->crp_etype = 0;
1784 crypto_done(mv_p->crp);
1785 mv_p->crp = NULL;
1788 mvxpsec_packet_dealloc(mv_p);
2069 struct mvxpsec_packet *mv_p;
2083 mv_p = NULL;
2087 mv_p = mvxpsec_packet_alloc(mv_s);
2088 if (__predict_false(mv_p == NULL)) {
2109 mvxpsec_packet_dealloc(mv_p);
2117 err = mvxpsec_packet_setcrp(mv_p, crp);
2125 err = mvxpsec_dma_copy_packet(sc, mv_p);
2131 mvxpsec_dump_packet(__func__, mv_p);
2137 err = mvxpsec_dma_sync_packet(sc, mv_p);
2146 mvxpsec_packet_enqueue(mv_p);
2150 SIMPLEQ_INSERT_TAIL(&sc->sc_wait_queue, mv_p, queue);
2152 mv_p->flags |= SETUP_DONE;
2161 mvxpsec_drop(sc, crp, mv_p, err);
2173 struct mvxpsec_packet *mv_p;
2190 while ( (mv_p = SIMPLEQ_FIRST(&ret_queue)) != NULL) {
2192 mvxpsec_dma_free(sc, &mv_p->dma_ring);
2193 mvxpsec_done_packet(mv_p);
2206 struct mvxpsec_packet *mv_p, int err)
2211 if (mv_p)
2212 mvxpsec_packet_dealloc(mv_p);
2232 struct mvxpsec_packet *mv_p;
2260 mv_p = SIMPLEQ_FIRST(&sc->sc_run_queue);
2261 head = mv_p->dma_ring.dma_head->phys_addr;
2264 mv_p = SIMPLEQ_LAST(&sc->sc_run_queue, mvxpsec_packet, queue);
2265 mvxpsec_dma_finalize(sc, &mv_p->dma_ring);
2293 mvxpsec_parse_crd(struct mvxpsec_packet *mv_p, struct cryptodesc *crd)
2297 KASSERT(mv_p->flags & RDY_DATA);
2302 mv_p->pkt_header.desc.acc_config |= MV_ACC_CRYPTO_MAC_96;
2305 mv_p->mac_dst = crd->crd_inject;
2306 mv_p->mac_off = crd->crd_skip;
2307 mv_p->mac_len = crd->crd_len;
2308 MV_ACC_CRYPTO_MAC_SET(mv_p->pkt_header.desc.acc_config,
2310 mvxpsec_packet_update_op_order(mv_p, MV_ACC_CRYPTO_OP_MAC);
2314 mv_p->pkt_header.desc.acc_config |= MV_ACC_CRYPTO_MAC_96;
2317 mv_p->mac_dst = crd->crd_inject;
2318 mv_p->mac_off = crd->crd_skip;
2319 mv_p->mac_len = crd->crd_len;
2320 MV_ACC_CRYPTO_MAC_SET(mv_p->pkt_header.desc.acc_config,
2322 mvxpsec_packet_update_op_order(mv_p, MV_ACC_CRYPTO_OP_MAC);
2326 mv_p->enc_ivoff = crd->crd_inject;
2327 mv_p->enc_off = crd->crd_skip;
2328 mv_p->enc_len = crd->crd_len;
2330 MV_ACC_CRYPTO_ENC_SET(mv_p->pkt_header.desc.acc_config,
2332 mv_p->pkt_header.desc.acc_config |= MV_ACC_CRYPTO_CBC;
2333 mvxpsec_packet_update_op_order(mv_p, MV_ACC_CRYPTO_OP_ENC);
2336 mv_p->enc_ivoff = crd->crd_inject;
2337 mv_p->enc_off = crd->crd_skip;
2338 mv_p->enc_len = crd->crd_len;
2340 MV_ACC_CRYPTO_ENC_SET(mv_p->pkt_header.desc.acc_config,
2342 mv_p->pkt_header.desc.acc_config |= MV_ACC_CRYPTO_CBC;
2343 mv_p->pkt_header.desc.acc_config |= MV_ACC_CRYPTO_3DES_EDE;
2344 mvxpsec_packet_update_op_order(mv_p, MV_ACC_CRYPTO_OP_ENC);
2347 mv_p->enc_ivoff = crd->crd_inject;
2348 mv_p->enc_off = crd->crd_skip;
2349 mv_p->enc_len = crd->crd_len;
2351 MV_ACC_CRYPTO_ENC_SET(mv_p->pkt_header.desc.acc_config,
2354 mv_p->pkt_header.desc.acc_config,
2355 mvxpsec_aesklen(mv_p->mv_s->enc_klen));
2356 mv_p->pkt_header.desc.acc_config |= MV_ACC_CRYPTO_CBC;
2357 mvxpsec_packet_update_op_order(mv_p, MV_ACC_CRYPTO_OP_ENC);
2368 mv_p->pkt_header.desc.acc_config &= ~MV_ACC_CRYPTO_DECRYPT;
2369 mv_p->flags |= DIR_ENCRYPT;
2373 mv_p->flags |= CRP_EXT_IV;
2374 mvxpsec_packet_write_iv(mv_p, crd->crd_iv, ivlen);
2375 mv_p->enc_ivoff = MVXPSEC_SRAM_IV_EXT_OFF;
2379 mvxpsec_packet_copy_iv(mv_p, crd->crd_inject, ivlen);
2383 mvxpsec_packet_write_iv(mv_p, NULL, ivlen);
2388 mv_p->pkt_header.desc.acc_config |= MV_ACC_CRYPTO_DECRYPT;
2389 mv_p->flags |= DIR_DECRYPT;
2399 mv_p->flags |= CRP_EXT_IV;
2400 mvxpsec_packet_write_iv(mv_p, crd->crd_iv, ivlen);
2401 mv_p->enc_ivoff = MVXPSEC_SRAM_IV_EXT_OFF;
2405 KASSERT(!((mv_p->flags & DIR_ENCRYPT) && (mv_p->flags & DIR_DECRYPT)));
2411 mvxpsec_parse_crp(struct mvxpsec_packet *mv_p)
2413 struct cryptop *crp = mv_p->crp;
2419 mvxpsec_packet_reset_op(mv_p);
2422 err = mvxpsec_parse_crd(mv_p, crd);
2431 mvxpsec_packet_setcrp(struct mvxpsec_packet *mv_p, struct cryptop *crp)
2437 err = mvxpsec_packet_setmbuf(mv_p,
2439 mv_p->crp = crp;
2442 err = mvxpsec_packet_setuio(mv_p,
2444 mv_p->crp = crp;
2447 err = mvxpsec_packet_setdata(mv_p,
2449 mv_p->crp = crp;
2455 err = mvxpsec_parse_crp(mv_p);
2460 err = mvxpsec_header_finalize(mv_p);
2473 mvxpsec_packet_setdata(struct mvxpsec_packet *mv_p,
2476 struct mvxpsec_session *mv_s = mv_p->mv_s;
2479 if (bus_dmamap_load(sc->sc_dmat, mv_p->data_map, data, data_len,
2484 mv_p->data_type = MVXPSEC_DATA_RAW;
2485 mv_p->data_raw = data;
2486 mv_p->data_len = data_len;
2487 mv_p->flags |= RDY_DATA;
2498 mvxpsec_packet_setmbuf(struct mvxpsec_packet *mv_p
2500 struct mvxpsec_session *mv_s = mv_p->mv_s;
2528 mv_p->data_type = MVXPSEC_DATA_NONE;
2529 mv_p->data_mbuf = NULL;
2533 if (bus_dmamap_load_mbuf(sc->sc_dmat, mv_p->data_map, m,
2535 mv_p->data_type = MVXPSEC_DATA_NONE;
2536 mv_p->data_mbuf = NULL;
2542 mv_p->data_type = MVXPSEC_DATA_MBUF;
2543 mv_p->data_mbuf = m;
2545 mv_p->data_len = m->m_pkthdr.len;
2548 mv_p->data_len = 0;
2550 mv_p->data_len += m->m_len;
2554 mv_p->flags |= RDY_DATA;
2560 mvxpsec_packet_setuio(struct mvxpsec_packet *mv_p, struct uio *uio)
2562 struct mvxpsec_session *mv_s = mv_p->mv_s;
2579 mv_p->data_type = MVXPSEC_DATA_NONE;
2580 mv_p->data_mbuf = NULL;
2584 if (bus_dmamap_load_uio(sc->sc_dmat, mv_p->data_map, uio,
2586 mv_p->data_type = MVXPSEC_DATA_NONE;
2587 mv_p->data_mbuf = NULL;
2593 mv_p->data_type = MVXPSEC_DATA_UIO;
2594 mv_p->data_uio = uio;
2595 mv_p->data_len = uio->uio_resid;
2596 mv_p->flags |= RDY_DATA;
2602 mvxpsec_packet_rdata(struct mvxpsec_packet *mv_p,
2607 if (mv_p->data_type == MVXPSEC_DATA_RAW) {
2608 p = (uint8_t *)mv_p->data_raw + off;
2611 else if (mv_p->data_type == MVXPSEC_DATA_MBUF) {
2612 m_copydata(mv_p->data_mbuf, off, len, cp);
2614 else if (mv_p->data_type == MVXPSEC_DATA_UIO) {
2615 cuio_copydata(mv_p->data_uio, off, len, cp);
2624 mvxpsec_packet_wdata(struct mvxpsec_packet *mv_p,
2629 if (mv_p->data_type == MVXPSEC_DATA_RAW) {
2630 p = (uint8_t *)mv_p->data_raw + off;
2633 else if (mv_p->data_type == MVXPSEC_DATA_MBUF) {
2634 m_copyback(mv_p->data_mbuf, off, len, cp);
2636 else if (mv_p->data_type == MVXPSEC_DATA_UIO) {
2637 cuio_copyback(mv_p->data_uio, off, len, cp);
2649 mvxpsec_packet_write_iv(struct mvxpsec_packet *mv_p, void *iv, int ivlen)
2656 if (mv_p->mv_s->sflags & RDY_CRP_IV) {
2658 mv_p->pkt_header.crp_iv_work = mv_p->mv_s->session_iv;
2659 mv_p->flags |= RDY_CRP_IV;
2665 memcpy(&mv_p->pkt_header.crp_iv_work, iv, ivlen);
2666 if (mv_p->flags & CRP_EXT_IV) {
2667 memcpy(&mv_p->pkt_header.crp_iv_ext, iv, ivlen);
2668 mv_p->ext_iv = iv;
2669 mv_p->ext_ivlen = ivlen;
2671 mv_p->flags |= RDY_CRP_IV;
2677 mvxpsec_packet_copy_iv(struct mvxpsec_packet *mv_p, int off, int ivlen)
2679 mvxpsec_packet_rdata(mv_p, off, ivlen,
2680 &mv_p->pkt_header.crp_iv_work);
2681 mv_p->flags |= RDY_CRP_IV;
3054 mvxpsec_packet_reset_op(struct mvxpsec_packet *mv_p)
3056 mv_p->pkt_header.desc.acc_config = 0;
3057 mv_p->enc_off = mv_p->enc_ivoff = mv_p->enc_len = 0;
3058 mv_p->mac_off = mv_p->mac_dst = mv_p->mac_len = 0;
3065 mvxpsec_packet_update_op_order(struct mvxpsec_packet *mv_p, int op)
3067 struct mvxpsec_acc_descriptor *acc_desc = &mv_p->pkt_header.desc;
3504 mvxpsec_dump_packet(const char *name, struct mvxpsec_packet *mv_p)
3506 struct mvxpsec_softc *sc = mv_p->mv_s->sc;
3509 mvxpsec_dump_packet_data(name, mv_p);
3515 mvxpsec_dump_packet_desc(name, mv_p);
3519 mvxpsec_dump_packet_data(const char *name, struct mvxpsec_packet *mv_p)
3524 if (mv_p->data_type == MVXPSEC_DATA_MBUF) {
3527 m = mv_p->data.mbuf;
3533 else if (mv_p->data_type == MVXPSEC_DATA_UIO) {
3536 uio = mv_p->data.uio;
3542 else if (mv_p->data_type == MVXPSEC_DATA_RAW) {
3543 len = mv_p->data_len;
3546 memcpy(buf, mv_p->data.raw, len);
3556 mvxpsec_dump_packet_desc(const char *name, struct mvxpsec_packet *mv_p)
3560 if (mv_p == NULL)
3563 words = &mv_p->pkt_header.desc.acc_desc_dword0;