Lines Matching refs:areq

23 static bool sun8i_ss_need_fallback(struct skcipher_request *areq)  in sun8i_ss_need_fallback()  argument
25 struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(areq); in sun8i_ss_need_fallback()
28 struct scatterlist *in_sg = areq->src; in sun8i_ss_need_fallback()
29 struct scatterlist *out_sg = areq->dst; in sun8i_ss_need_fallback()
33 if (areq->cryptlen == 0 || areq->cryptlen % 16) { in sun8i_ss_need_fallback()
38 if (sg_nents_for_len(areq->src, areq->cryptlen) > 8 || in sun8i_ss_need_fallback()
39 sg_nents_for_len(areq->dst, areq->cryptlen) > 8) { in sun8i_ss_need_fallback()
44 len = areq->cryptlen; in sun8i_ss_need_fallback()
45 sg = areq->src; in sun8i_ss_need_fallback()
59 len = areq->cryptlen; in sun8i_ss_need_fallback()
60 sg = areq->dst; in sun8i_ss_need_fallback()
76 in_sg = areq->src; in sun8i_ss_need_fallback()
77 out_sg = areq->dst; in sun8i_ss_need_fallback()
89 static int sun8i_ss_cipher_fallback(struct skcipher_request *areq) in sun8i_ss_cipher_fallback() argument
91 struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(areq); in sun8i_ss_cipher_fallback()
93 struct sun8i_cipher_req_ctx *rctx = skcipher_request_ctx(areq); in sun8i_ss_cipher_fallback()
104 skcipher_request_set_callback(&rctx->fallback_req, areq->base.flags, in sun8i_ss_cipher_fallback()
105 areq->base.complete, areq->base.data); in sun8i_ss_cipher_fallback()
106 skcipher_request_set_crypt(&rctx->fallback_req, areq->src, areq->dst, in sun8i_ss_cipher_fallback()
107 areq->cryptlen, areq->iv); in sun8i_ss_cipher_fallback()
115 static int sun8i_ss_setup_ivs(struct skcipher_request *areq) in sun8i_ss_setup_ivs() argument
117 struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(areq); in sun8i_ss_setup_ivs()
120 struct sun8i_cipher_req_ctx *rctx = skcipher_request_ctx(areq); in sun8i_ss_setup_ivs()
121 struct scatterlist *sg = areq->src; in sun8i_ss_setup_ivs()
123 unsigned int len = areq->cryptlen; in sun8i_ss_setup_ivs()
132 offset = areq->cryptlen - ivsize; in sun8i_ss_setup_ivs()
133 scatterwalk_map_and_copy(sf->biv, areq->src, offset, in sun8i_ss_setup_ivs()
144 memcpy(sf->iv[0], areq->iv, ivsize); in sun8i_ss_setup_ivs()
178 static int sun8i_ss_cipher(struct skcipher_request *areq) in sun8i_ss_cipher() argument
180 struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(areq); in sun8i_ss_cipher()
183 struct sun8i_cipher_req_ctx *rctx = skcipher_request_ctx(areq); in sun8i_ss_cipher()
192 int nsgs = sg_nents_for_len(areq->src, areq->cryptlen); in sun8i_ss_cipher()
193 int nsgd = sg_nents_for_len(areq->dst, areq->cryptlen); in sun8i_ss_cipher()
199 crypto_tfm_alg_name(areq->base.tfm), in sun8i_ss_cipher()
200 areq->cryptlen, in sun8i_ss_cipher()
201 rctx->op_dir, areq->iv, crypto_skcipher_ivsize(tfm), in sun8i_ss_cipher()
220 if (areq->iv && crypto_skcipher_ivsize(tfm) > 0) { in sun8i_ss_cipher()
221 err = sun8i_ss_setup_ivs(areq); in sun8i_ss_cipher()
225 if (areq->src == areq->dst) { in sun8i_ss_cipher()
226 nr_sgs = dma_map_sg(ss->dev, areq->src, nsgs, DMA_BIDIRECTIONAL); in sun8i_ss_cipher()
234 nr_sgs = dma_map_sg(ss->dev, areq->src, nsgs, DMA_TO_DEVICE); in sun8i_ss_cipher()
240 nr_sgd = dma_map_sg(ss->dev, areq->dst, nsgd, DMA_FROM_DEVICE); in sun8i_ss_cipher()
248 len = areq->cryptlen; in sun8i_ss_cipher()
250 sg = areq->src; in sun8i_ss_cipher()
258 areq->cryptlen, i, rctx->t_src[i].len, sg->offset, todo); in sun8i_ss_cipher()
270 len = areq->cryptlen; in sun8i_ss_cipher()
272 sg = areq->dst; in sun8i_ss_cipher()
280 areq->cryptlen, i, rctx->t_dst[i].len, sg->offset, todo); in sun8i_ss_cipher()
292 err = sun8i_ss_run_task(ss, rctx, crypto_tfm_alg_name(areq->base.tfm)); in sun8i_ss_cipher()
295 if (areq->src == areq->dst) { in sun8i_ss_cipher()
296 dma_unmap_sg(ss->dev, areq->src, nsgs, DMA_BIDIRECTIONAL); in sun8i_ss_cipher()
298 dma_unmap_sg(ss->dev, areq->src, nsgs, DMA_TO_DEVICE); in sun8i_ss_cipher()
299 dma_unmap_sg(ss->dev, areq->dst, nsgd, DMA_FROM_DEVICE); in sun8i_ss_cipher()
303 if (areq->iv && ivsize > 0) { in sun8i_ss_cipher()
309 offset = areq->cryptlen - ivsize; in sun8i_ss_cipher()
311 memcpy(areq->iv, sf->biv, ivsize); in sun8i_ss_cipher()
314 scatterwalk_map_and_copy(areq->iv, areq->dst, offset, in sun8i_ss_cipher()
327 static int sun8i_ss_handle_cipher_request(struct crypto_engine *engine, void *areq) in sun8i_ss_handle_cipher_request() argument
330 struct skcipher_request *breq = container_of(areq, struct skcipher_request, base); in sun8i_ss_handle_cipher_request()
340 int sun8i_ss_skdecrypt(struct skcipher_request *areq) in sun8i_ss_skdecrypt() argument
342 struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(areq); in sun8i_ss_skdecrypt()
344 struct sun8i_cipher_req_ctx *rctx = skcipher_request_ctx(areq); in sun8i_ss_skdecrypt()
351 if (sun8i_ss_need_fallback(areq)) in sun8i_ss_skdecrypt()
352 return sun8i_ss_cipher_fallback(areq); in sun8i_ss_skdecrypt()
358 return crypto_transfer_skcipher_request_to_engine(engine, areq); in sun8i_ss_skdecrypt()
361 int sun8i_ss_skencrypt(struct skcipher_request *areq) in sun8i_ss_skencrypt() argument
363 struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(areq); in sun8i_ss_skencrypt()
365 struct sun8i_cipher_req_ctx *rctx = skcipher_request_ctx(areq); in sun8i_ss_skencrypt()
372 if (sun8i_ss_need_fallback(areq)) in sun8i_ss_skencrypt()
373 return sun8i_ss_cipher_fallback(areq); in sun8i_ss_skencrypt()
379 return crypto_transfer_skcipher_request_to_engine(engine, areq); in sun8i_ss_skencrypt()