Lines Matching refs:edesc
947 struct talitos_edesc *edesc, in talitos_sg_unmap() argument
954 unsigned int src_nents = edesc->src_nents ? : 1; in talitos_sg_unmap()
955 unsigned int dst_nents = edesc->dst_nents ? : 1; in talitos_sg_unmap()
958 dma_sync_single_for_device(dev, edesc->dma_link_tbl + offset, in talitos_sg_unmap()
960 sg_pcopy_from_buffer(dst, dst_nents, edesc->buf + offset, len, in talitos_sg_unmap()
975 struct talitos_edesc *edesc, in ipsec_esp_unmap() argument
981 bool is_ipsec_esp = edesc->desc.hdr & DESC_HDR_TYPE_IPSEC_ESP; in ipsec_esp_unmap()
982 struct talitos_ptr *civ_ptr = &edesc->desc.ptr[is_ipsec_esp ? 2 : 3]; in ipsec_esp_unmap()
985 unmap_single_talitos_ptr(dev, &edesc->desc.ptr[6], in ipsec_esp_unmap()
989 talitos_sg_unmap(dev, edesc, areq->src, areq->dst, areq->cryptlen, in ipsec_esp_unmap()
992 if (edesc->dma_len) in ipsec_esp_unmap()
993 dma_unmap_single(dev, edesc->dma_link_tbl, edesc->dma_len, in ipsec_esp_unmap()
997 unsigned int dst_nents = edesc->dst_nents ? : 1; in ipsec_esp_unmap()
1017 struct talitos_edesc *edesc; in ipsec_esp_encrypt_done() local
1021 edesc = container_of(desc, struct talitos_edesc, desc); in ipsec_esp_encrypt_done()
1023 ipsec_esp_unmap(dev, edesc, areq); in ipsec_esp_encrypt_done()
1026 if (edesc->icv_ool) { in ipsec_esp_encrypt_done()
1028 icvdata = edesc->buf + areq->assoclen + areq->cryptlen; in ipsec_esp_encrypt_done()
1030 icvdata = &edesc->link_tbl[edesc->src_nents + in ipsec_esp_encrypt_done()
1031 edesc->dst_nents + 2]; in ipsec_esp_encrypt_done()
1032 sg = sg_last(areq->dst, edesc->dst_nents); in ipsec_esp_encrypt_done()
1037 dma_unmap_single(dev, edesc->iv_dma, ivsize, DMA_TO_DEVICE); in ipsec_esp_encrypt_done()
1039 kfree(edesc); in ipsec_esp_encrypt_done()
1051 struct talitos_edesc *edesc; in ipsec_esp_decrypt_swauth_done() local
1057 edesc = container_of(desc, struct talitos_edesc, desc); in ipsec_esp_decrypt_swauth_done()
1059 ipsec_esp_unmap(dev, edesc, req); in ipsec_esp_decrypt_swauth_done()
1063 sg = sg_last(req->dst, edesc->dst_nents ? : 1); in ipsec_esp_decrypt_swauth_done()
1066 if (edesc->dma_len) { in ipsec_esp_decrypt_swauth_done()
1068 oicv = (char *)&edesc->dma_link_tbl + in ipsec_esp_decrypt_swauth_done()
1072 &edesc->link_tbl[edesc->src_nents + in ipsec_esp_decrypt_swauth_done()
1073 edesc->dst_nents + 2]; in ipsec_esp_decrypt_swauth_done()
1074 if (edesc->icv_ool) in ipsec_esp_decrypt_swauth_done()
1077 oicv = (char *)&edesc->link_tbl[0]; in ipsec_esp_decrypt_swauth_done()
1082 kfree(edesc); in ipsec_esp_decrypt_swauth_done()
1092 struct talitos_edesc *edesc; in ipsec_esp_decrypt_hwauth_done() local
1094 edesc = container_of(desc, struct talitos_edesc, desc); in ipsec_esp_decrypt_hwauth_done()
1096 ipsec_esp_unmap(dev, edesc, req); in ipsec_esp_decrypt_hwauth_done()
1103 kfree(edesc); in ipsec_esp_decrypt_hwauth_done()
1152 unsigned int len, struct talitos_edesc *edesc, in talitos_sg_map_ext() argument
1169 to_talitos_ptr(ptr, edesc->dma_link_tbl + offset, len, is_sec1); in talitos_sg_map_ext()
1173 &edesc->link_tbl[tbl_off]); in talitos_sg_map_ext()
1176 copy_talitos_ptr(ptr, &edesc->link_tbl[tbl_off], is_sec1); in talitos_sg_map_ext()
1179 to_talitos_ptr(ptr, edesc->dma_link_tbl + in talitos_sg_map_ext()
1187 unsigned int len, struct talitos_edesc *edesc, in talitos_sg_map() argument
1191 return talitos_sg_map_ext(dev, src, len, edesc, ptr, sg_count, offset, in talitos_sg_map()
1198 static int ipsec_esp(struct talitos_edesc *edesc, struct aead_request *areq, in ipsec_esp() argument
1207 struct talitos_desc *desc = &edesc->desc; in ipsec_esp()
1223 sg_count = edesc->src_nents ?: 1; in ipsec_esp()
1225 sg_copy_to_buffer(areq->src, sg_count, edesc->buf, in ipsec_esp()
1233 ret = talitos_sg_map(dev, areq->src, areq->assoclen, edesc, in ipsec_esp()
1242 to_talitos_ptr(civ_ptr, edesc->iv_dma, ivsize, is_sec1); in ipsec_esp()
1257 ret = talitos_sg_map_ext(dev, areq->src, cryptlen, edesc, &desc->ptr[4], in ipsec_esp()
1267 sg_count = edesc->dst_nents ? : 1; in ipsec_esp()
1272 ret = talitos_sg_map(dev, areq->dst, cryptlen, edesc, &desc->ptr[5], in ipsec_esp()
1281 edesc->icv_ool = true; in ipsec_esp()
1285 struct talitos_ptr *tbl_ptr = &edesc->link_tbl[tbl_off]; in ipsec_esp()
1286 int offset = (edesc->src_nents + edesc->dst_nents + 2) * in ipsec_esp()
1295 to_talitos_ptr(tbl_ptr, edesc->dma_link_tbl + offset, in ipsec_esp()
1298 dma_addr_t addr = edesc->dma_link_tbl; in ipsec_esp()
1308 ret = talitos_sg_map(dev, areq->dst, authsize, edesc, in ipsec_esp()
1314 edesc->icv_ool = true; in ipsec_esp()
1317 edesc->icv_ool = false; in ipsec_esp()
1320 edesc->icv_ool = false; in ipsec_esp()
1329 dma_sync_single_for_device(dev, edesc->dma_link_tbl, in ipsec_esp()
1330 edesc->dma_len, in ipsec_esp()
1335 ipsec_esp_unmap(dev, edesc, areq); in ipsec_esp()
1336 kfree(edesc); in ipsec_esp()
1356 struct talitos_edesc *edesc; in talitos_edesc_alloc() local
1427 edesc = kmalloc(alloc_len, GFP_DMA | flags); in talitos_edesc_alloc()
1428 if (!edesc) { in talitos_edesc_alloc()
1432 memset(&edesc->desc, 0, sizeof(edesc->desc)); in talitos_edesc_alloc()
1434 edesc->src_nents = src_nents; in talitos_edesc_alloc()
1435 edesc->dst_nents = dst_nents; in talitos_edesc_alloc()
1436 edesc->iv_dma = iv_dma; in talitos_edesc_alloc()
1437 edesc->dma_len = dma_len; in talitos_edesc_alloc()
1439 void *addr = &edesc->link_tbl[0]; in talitos_edesc_alloc()
1443 edesc->dma_link_tbl = dma_map_single(dev, addr, in talitos_edesc_alloc()
1444 edesc->dma_len, in talitos_edesc_alloc()
1447 return edesc; in talitos_edesc_alloc()
1472 struct talitos_edesc *edesc; in aead_encrypt() local
1475 edesc = aead_edesc_alloc(req, req->iv, 0, true); in aead_encrypt()
1476 if (IS_ERR(edesc)) in aead_encrypt()
1477 return PTR_ERR(edesc); in aead_encrypt()
1480 edesc->desc.hdr = ctx->desc_hdr_template | DESC_HDR_MODE0_ENCRYPT; in aead_encrypt()
1482 return ipsec_esp(edesc, req, ipsec_esp_encrypt_done); in aead_encrypt()
1491 struct talitos_edesc *edesc; in aead_decrypt() local
1498 edesc = aead_edesc_alloc(req, req->iv, 1, false); in aead_decrypt()
1499 if (IS_ERR(edesc)) in aead_decrypt()
1500 return PTR_ERR(edesc); in aead_decrypt()
1503 ((!edesc->src_nents && !edesc->dst_nents) || in aead_decrypt()
1507 edesc->desc.hdr = ctx->desc_hdr_template | in aead_decrypt()
1513 return ipsec_esp(edesc, req, ipsec_esp_decrypt_hwauth_done); in aead_decrypt()
1517 edesc->desc.hdr = ctx->desc_hdr_template | DESC_HDR_DIR_INBOUND; in aead_decrypt()
1520 if (edesc->dma_len) in aead_decrypt()
1521 icvdata = (char *)&edesc->link_tbl[edesc->src_nents + in aead_decrypt()
1522 edesc->dst_nents + 2]; in aead_decrypt()
1524 icvdata = &edesc->link_tbl[0]; in aead_decrypt()
1526 sg = sg_last(req->src, edesc->src_nents ? : 1); in aead_decrypt()
1530 return ipsec_esp(edesc, req, ipsec_esp_decrypt_swauth_done); in aead_decrypt()
1564 struct talitos_edesc *edesc, in common_nonsnoop_unmap() argument
1567 unmap_single_talitos_ptr(dev, &edesc->desc.ptr[5], DMA_FROM_DEVICE); in common_nonsnoop_unmap()
1569 talitos_sg_unmap(dev, edesc, areq->src, areq->dst, areq->nbytes, 0); in common_nonsnoop_unmap()
1570 unmap_single_talitos_ptr(dev, &edesc->desc.ptr[1], DMA_TO_DEVICE); in common_nonsnoop_unmap()
1572 if (edesc->dma_len) in common_nonsnoop_unmap()
1573 dma_unmap_single(dev, edesc->dma_link_tbl, edesc->dma_len, in common_nonsnoop_unmap()
1582 struct talitos_edesc *edesc; in ablkcipher_done() local
1584 edesc = container_of(desc, struct talitos_edesc, desc); in ablkcipher_done()
1586 common_nonsnoop_unmap(dev, edesc, areq); in ablkcipher_done()
1588 kfree(edesc); in ablkcipher_done()
1593 static int common_nonsnoop(struct talitos_edesc *edesc, in common_nonsnoop() argument
1602 struct talitos_desc *desc = &edesc->desc; in common_nonsnoop()
1613 to_talitos_ptr(&desc->ptr[1], edesc->iv_dma, ivsize, is_sec1); in common_nonsnoop()
1618 sg_count = edesc->src_nents ?: 1; in common_nonsnoop()
1620 sg_copy_to_buffer(areq->src, sg_count, edesc->buf, in common_nonsnoop()
1629 sg_count = talitos_sg_map(dev, areq->src, cryptlen, edesc, in common_nonsnoop()
1636 sg_count = edesc->dst_nents ? : 1; in common_nonsnoop()
1641 ret = talitos_sg_map(dev, areq->dst, cryptlen, edesc, &desc->ptr[4], in common_nonsnoop()
1642 sg_count, 0, (edesc->src_nents + 1)); in common_nonsnoop()
1653 dma_sync_single_for_device(dev, edesc->dma_link_tbl, in common_nonsnoop()
1654 edesc->dma_len, DMA_BIDIRECTIONAL); in common_nonsnoop()
1658 common_nonsnoop_unmap(dev, edesc, areq); in common_nonsnoop()
1659 kfree(edesc); in common_nonsnoop()
1680 struct talitos_edesc *edesc; in ablkcipher_encrypt() local
1683 edesc = ablkcipher_edesc_alloc(areq, true); in ablkcipher_encrypt()
1684 if (IS_ERR(edesc)) in ablkcipher_encrypt()
1685 return PTR_ERR(edesc); in ablkcipher_encrypt()
1688 edesc->desc.hdr = ctx->desc_hdr_template | DESC_HDR_MODE0_ENCRYPT; in ablkcipher_encrypt()
1690 return common_nonsnoop(edesc, areq, ablkcipher_done); in ablkcipher_encrypt()
1697 struct talitos_edesc *edesc; in ablkcipher_decrypt() local
1700 edesc = ablkcipher_edesc_alloc(areq, false); in ablkcipher_decrypt()
1701 if (IS_ERR(edesc)) in ablkcipher_decrypt()
1702 return PTR_ERR(edesc); in ablkcipher_decrypt()
1704 edesc->desc.hdr = ctx->desc_hdr_template | DESC_HDR_DIR_INBOUND; in ablkcipher_decrypt()
1706 return common_nonsnoop(edesc, areq, ablkcipher_done); in ablkcipher_decrypt()
1710 struct talitos_edesc *edesc, in common_nonsnoop_hash_unmap() argument
1716 struct talitos_desc *desc = &edesc->desc; in common_nonsnoop_hash_unmap()
1719 unmap_single_talitos_ptr(dev, &edesc->desc.ptr[5], DMA_FROM_DEVICE); in common_nonsnoop_hash_unmap()
1724 talitos_sg_unmap(dev, edesc, req_ctx->psrc, NULL, 0, 0); in common_nonsnoop_hash_unmap()
1727 if (from_talitos_ptr_len(&edesc->desc.ptr[1], is_sec1)) in common_nonsnoop_hash_unmap()
1728 unmap_single_talitos_ptr(dev, &edesc->desc.ptr[1], in common_nonsnoop_hash_unmap()
1738 if (edesc->dma_len) in common_nonsnoop_hash_unmap()
1739 dma_unmap_single(dev, edesc->dma_link_tbl, edesc->dma_len, in common_nonsnoop_hash_unmap()
1742 if (edesc->desc.next_desc) in common_nonsnoop_hash_unmap()
1743 dma_unmap_single(dev, be32_to_cpu(edesc->desc.next_desc), in common_nonsnoop_hash_unmap()
1752 struct talitos_edesc *edesc = in ahash_done() local
1761 common_nonsnoop_hash_unmap(dev, edesc, areq); in ahash_done()
1763 kfree(edesc); in ahash_done()
1773 struct talitos_edesc *edesc, in talitos_handle_buggy_hash() argument
1784 edesc->desc.hdr &= ~DESC_HDR_MODE0_MDEU_PAD; in talitos_handle_buggy_hash()
1789 static int common_nonsnoop_hash(struct talitos_edesc *edesc, in common_nonsnoop_hash() argument
1800 struct talitos_desc *desc = &edesc->desc; in common_nonsnoop_hash()
1828 sg_count = edesc->src_nents ?: 1; in common_nonsnoop_hash()
1831 edesc->buf + sizeof(struct talitos_desc), in common_nonsnoop_hash()
1844 sg_count = talitos_sg_map(dev, req_ctx->psrc, length, edesc, in common_nonsnoop_hash()
1866 talitos_handle_buggy_hash(ctx, edesc, &desc->ptr[3]); in common_nonsnoop_hash()
1889 sg_count = talitos_sg_map(dev, req_ctx->psrc, length, edesc, in common_nonsnoop_hash()
1906 dma_sync_single_for_device(dev, edesc->dma_link_tbl, in common_nonsnoop_hash()
1907 edesc->dma_len, DMA_BIDIRECTIONAL); in common_nonsnoop_hash()
1911 common_nonsnoop_hash_unmap(dev, edesc, areq); in common_nonsnoop_hash()
1912 kfree(edesc); in common_nonsnoop_hash()
1991 struct talitos_edesc *edesc; in ahash_process_req() local
2071 edesc = ahash_edesc_alloc(areq, nbytes_to_hash); in ahash_process_req()
2072 if (IS_ERR(edesc)) in ahash_process_req()
2073 return PTR_ERR(edesc); in ahash_process_req()
2075 edesc->desc.hdr = ctx->desc_hdr_template; in ahash_process_req()
2079 edesc->desc.hdr |= DESC_HDR_MODE0_MDEU_PAD; in ahash_process_req()
2081 edesc->desc.hdr |= DESC_HDR_MODE0_MDEU_CONT; in ahash_process_req()
2085 edesc->desc.hdr |= DESC_HDR_MODE0_MDEU_INIT; in ahash_process_req()
2091 edesc->desc.hdr |= DESC_HDR_MODE0_MDEU_HMAC; in ahash_process_req()
2093 return common_nonsnoop_hash(edesc, areq, nbytes_to_hash, offset, in ahash_process_req()