Lines Matching defs:edesc
326 struct talitos_edesc *edesc;
334 edesc = container_of(request->desc, struct talitos_edesc, desc);
336 return ((struct talitos_desc *)(edesc->buf + edesc->dma_len))->hdr1;
491 struct talitos_edesc *edesc;
493 edesc = container_of(priv->chan[ch].fifo[iter].desc,
496 (edesc->buf + edesc->dma_len))->hdr;
960 struct talitos_edesc *edesc,
967 unsigned int src_nents = edesc->src_nents ? : 1;
968 unsigned int dst_nents = edesc->dst_nents ? : 1;
971 dma_sync_single_for_device(dev, edesc->dma_link_tbl + offset,
973 sg_pcopy_from_buffer(dst, dst_nents, edesc->buf + offset, len,
988 struct talitos_edesc *edesc,
996 bool is_ipsec_esp = edesc->desc.hdr & DESC_HDR_TYPE_IPSEC_ESP;
997 struct talitos_ptr *civ_ptr = &edesc->desc.ptr[is_ipsec_esp ? 2 : 3];
1000 unmap_single_talitos_ptr(dev, &edesc->desc.ptr[6],
1004 talitos_sg_unmap(dev, edesc, areq->src, areq->dst,
1007 if (edesc->dma_len)
1008 dma_unmap_single(dev, edesc->dma_link_tbl, edesc->dma_len,
1012 unsigned int dst_nents = edesc->dst_nents ? : 1;
1029 struct talitos_edesc *edesc;
1031 edesc = container_of(desc, struct talitos_edesc, desc);
1033 ipsec_esp_unmap(dev, edesc, areq, true);
1035 dma_unmap_single(dev, edesc->iv_dma, ivsize, DMA_TO_DEVICE);
1037 kfree(edesc);
1049 struct talitos_edesc *edesc;
1052 edesc = container_of(desc, struct talitos_edesc, desc);
1054 ipsec_esp_unmap(dev, edesc, req, false);
1058 oicv = edesc->buf + edesc->dma_len;
1064 kfree(edesc);
1074 struct talitos_edesc *edesc;
1076 edesc = container_of(desc, struct talitos_edesc, desc);
1078 ipsec_esp_unmap(dev, edesc, req, false);
1085 kfree(edesc);
1145 unsigned int len, struct talitos_edesc *edesc,
1164 to_talitos_ptr(ptr, edesc->dma_link_tbl + offset, aligned_len, is_sec1);
1168 &edesc->link_tbl[tbl_off], align);
1171 copy_talitos_ptr(ptr, &edesc->link_tbl[tbl_off], is_sec1);
1174 to_talitos_ptr(ptr, edesc->dma_link_tbl +
1182 unsigned int len, struct talitos_edesc *edesc,
1186 return talitos_sg_map_ext(dev, src, len, edesc, ptr, sg_count, offset,
1193 static int ipsec_esp(struct talitos_edesc *edesc, struct aead_request *areq,
1203 struct talitos_desc *desc = &edesc->desc;
1215 dma_addr_t dma_icv = edesc->dma_link_tbl + edesc->dma_len - authsize;
1220 sg_count = edesc->src_nents ?: 1;
1222 sg_copy_to_buffer(areq->src, sg_count, edesc->buf,
1230 ret = talitos_sg_map(dev, areq->src, areq->assoclen, edesc,
1239 to_talitos_ptr(civ_ptr, edesc->iv_dma, ivsize, is_sec1);
1254 ret = talitos_sg_map_ext(dev, areq->src, cryptlen, edesc, &desc->ptr[4],
1265 sg_count = edesc->dst_nents ? : 1;
1274 ret = talitos_sg_map_ext(dev, areq->dst, cryptlen, edesc, &desc->ptr[5],
1280 struct talitos_ptr *tbl_ptr = &edesc->link_tbl[tbl_off];
1294 talitos_sg_map(dev, areq->dst, authsize, edesc, &desc->ptr[6],
1304 dma_sync_single_for_device(dev, edesc->dma_link_tbl,
1305 edesc->dma_len,
1310 ipsec_esp_unmap(dev, edesc, areq, encrypt);
1311 kfree(edesc);
1331 struct talitos_edesc *edesc;
1373 * allocate space for base edesc plus the link tables,
1396 edesc = kmalloc(ALIGN(alloc_len, dma_get_cache_alignment()), flags);
1397 if (!edesc)
1400 iv = memcpy(((u8 *)edesc) + alloc_len - ivsize, iv, ivsize);
1403 memset(&edesc->desc, 0, sizeof(edesc->desc));
1405 edesc->src_nents = src_nents;
1406 edesc->dst_nents = dst_nents;
1407 edesc->iv_dma = iv_dma;
1408 edesc->dma_len = dma_len;
1410 edesc->dma_link_tbl = dma_map_single(dev, &edesc->link_tbl[0],
1411 edesc->dma_len,
1414 return edesc;
1436 struct talitos_edesc *edesc;
1439 edesc = aead_edesc_alloc(req, req->iv, 0, true);
1440 if (IS_ERR(edesc))
1441 return PTR_ERR(edesc);
1444 edesc->desc.hdr = ctx->desc_hdr_template | DESC_HDR_MODE0_ENCRYPT;
1446 return ipsec_esp(edesc, req, true, ipsec_esp_encrypt_done);
1455 struct talitos_edesc *edesc;
1459 edesc = aead_edesc_alloc(req, req->iv, 1, false);
1460 if (IS_ERR(edesc))
1461 return PTR_ERR(edesc);
1463 if ((edesc->desc.hdr & DESC_HDR_TYPE_IPSEC_ESP) &&
1465 ((!edesc->src_nents && !edesc->dst_nents) ||
1469 edesc->desc.hdr = ctx->desc_hdr_template |
1475 return ipsec_esp(edesc, req, false,
1480 edesc->desc.hdr = ctx->desc_hdr_template | DESC_HDR_DIR_INBOUND;
1483 icvdata = edesc->buf + edesc->dma_len;
1485 sg_pcopy_to_buffer(req->src, edesc->src_nents ? : 1, icvdata, authsize,
1488 return ipsec_esp(edesc, req, false, ipsec_esp_decrypt_swauth_done);
1533 struct talitos_edesc *edesc,
1536 unmap_single_talitos_ptr(dev, &edesc->desc.ptr[5], DMA_FROM_DEVICE);
1538 talitos_sg_unmap(dev, edesc, areq->src, areq->dst, areq->cryptlen, 0);
1539 unmap_single_talitos_ptr(dev, &edesc->desc.ptr[1], DMA_TO_DEVICE);
1541 if (edesc->dma_len)
1542 dma_unmap_single(dev, edesc->dma_link_tbl, edesc->dma_len,
1554 struct talitos_edesc *edesc;
1556 edesc = container_of(desc, struct talitos_edesc, desc);
1558 common_nonsnoop_unmap(dev, edesc, areq);
1561 kfree(edesc);
1566 static int common_nonsnoop(struct talitos_edesc *edesc,
1575 struct talitos_desc *desc = &edesc->desc;
1588 to_talitos_ptr(&desc->ptr[1], edesc->iv_dma, ivsize, is_sec1);
1593 sg_count = edesc->src_nents ?: 1;
1595 sg_copy_to_buffer(areq->src, sg_count, edesc->buf,
1604 sg_count = talitos_sg_map_ext(dev, areq->src, cryptlen, edesc, &desc->ptr[3],
1611 sg_count = edesc->dst_nents ? : 1;
1616 ret = talitos_sg_map(dev, areq->dst, cryptlen, edesc, &desc->ptr[4],
1617 sg_count, 0, (edesc->src_nents + 1));
1628 dma_sync_single_for_device(dev, edesc->dma_link_tbl,
1629 edesc->dma_len, DMA_BIDIRECTIONAL);
1633 common_nonsnoop_unmap(dev, edesc, areq);
1634 kfree(edesc);
1655 struct talitos_edesc *edesc;
1666 edesc = skcipher_edesc_alloc(areq, true);
1667 if (IS_ERR(edesc))
1668 return PTR_ERR(edesc);
1671 edesc->desc.hdr = ctx->desc_hdr_template | DESC_HDR_MODE0_ENCRYPT;
1673 return common_nonsnoop(edesc, areq, skcipher_done);
1680 struct talitos_edesc *edesc;
1691 edesc = skcipher_edesc_alloc(areq, false);
1692 if (IS_ERR(edesc))
1693 return PTR_ERR(edesc);
1695 edesc->desc.hdr = ctx->desc_hdr_template | DESC_HDR_DIR_INBOUND;
1697 return common_nonsnoop(edesc, areq, skcipher_done);
1701 struct talitos_edesc *edesc,
1708 struct talitos_desc *desc = &edesc->desc;
1710 (edesc->buf + edesc->dma_len);
1721 talitos_sg_unmap(dev, edesc, req_ctx->psrc, NULL, 0, 0);
1735 if (edesc->dma_len)
1736 dma_unmap_single(dev, edesc->dma_link_tbl, edesc->dma_len,
1749 struct talitos_edesc *edesc =
1758 common_nonsnoop_hash_unmap(dev, edesc, areq);
1760 kfree(edesc);
1770 struct talitos_edesc *edesc,
1781 edesc->desc.hdr &= ~DESC_HDR_MODE0_MDEU_PAD;
1786 static int common_nonsnoop_hash(struct talitos_edesc *edesc,
1796 struct talitos_desc *desc = &edesc->desc;
1824 sg_count = edesc->src_nents ?: 1;
1826 sg_copy_to_buffer(req_ctx->psrc, sg_count, edesc->buf, length);
1838 sg_count = talitos_sg_map(dev, req_ctx->psrc, length, edesc,
1860 talitos_handle_buggy_hash(ctx, edesc, &desc->ptr[3]);
1864 (edesc->buf + edesc->dma_len);
1884 sg_count = talitos_sg_map(dev, req_ctx->psrc, length, edesc,
1901 dma_sync_single_for_device(dev, edesc->dma_link_tbl,
1902 edesc->dma_len, DMA_BIDIRECTIONAL);
1906 common_nonsnoop_hash_unmap(dev, edesc, areq);
1907 kfree(edesc);
1986 struct talitos_edesc *edesc;
2068 edesc = ahash_edesc_alloc(areq, nbytes_to_hash);
2069 if (IS_ERR(edesc))
2070 return PTR_ERR(edesc);
2072 edesc->desc.hdr = ctx->desc_hdr_template;
2076 edesc->desc.hdr |= DESC_HDR_MODE0_MDEU_PAD;
2078 edesc->desc.hdr |= DESC_HDR_MODE0_MDEU_CONT;
2082 edesc->desc.hdr |= DESC_HDR_MODE0_MDEU_INIT;
2088 edesc->desc.hdr |= DESC_HDR_MODE0_MDEU_HMAC;
2090 return common_nonsnoop_hash(edesc, areq, nbytes_to_hash, ahash_done);