Lines Matching refs:req
167 static void acomp_save_req(struct acomp_req *req, crypto_completion_t cplt) in acomp_save_req() argument
169 struct acomp_req_chain *state = &req->chain; in acomp_save_req()
171 state->compl = req->base.complete; in acomp_save_req()
172 state->data = req->base.data; in acomp_save_req()
173 req->base.complete = cplt; in acomp_save_req()
174 req->base.data = state; in acomp_save_req()
177 static void acomp_restore_req(struct acomp_req *req) in acomp_restore_req() argument
179 struct acomp_req_chain *state = req->base.data; in acomp_restore_req()
181 req->base.complete = state->compl; in acomp_restore_req()
182 req->base.data = state->data; in acomp_restore_req()
185 static void acomp_reqchain_virt(struct acomp_req *req) in acomp_reqchain_virt() argument
187 struct acomp_req_chain *state = &req->chain; in acomp_reqchain_virt()
188 unsigned int slen = req->slen; in acomp_reqchain_virt()
189 unsigned int dlen = req->dlen; in acomp_reqchain_virt()
192 acomp_request_set_src_dma(req, state->src, slen); in acomp_reqchain_virt()
194 acomp_request_set_dst_dma(req, state->dst, dlen); in acomp_reqchain_virt()
197 static void acomp_virt_to_sg(struct acomp_req *req) in acomp_virt_to_sg() argument
199 struct acomp_req_chain *state = &req->chain; in acomp_virt_to_sg()
201 state->flags = req->base.flags & (CRYPTO_ACOMP_REQ_SRC_VIRT | in acomp_virt_to_sg()
204 if (acomp_request_src_isvirt(req)) { in acomp_virt_to_sg()
205 unsigned int slen = req->slen; in acomp_virt_to_sg()
206 const u8 *svirt = req->svirt; in acomp_virt_to_sg()
210 acomp_request_set_src_sg(req, &state->ssg, slen); in acomp_virt_to_sg()
213 if (acomp_request_dst_isvirt(req)) { in acomp_virt_to_sg()
214 unsigned int dlen = req->dlen; in acomp_virt_to_sg()
215 u8 *dvirt = req->dvirt; in acomp_virt_to_sg()
219 acomp_request_set_dst_sg(req, &state->dsg, dlen); in acomp_virt_to_sg()
223 static int acomp_do_nondma(struct acomp_req *req, bool comp) in acomp_do_nondma() argument
225 ACOMP_FBREQ_ON_STACK(fbreq, req); in acomp_do_nondma()
233 req->dlen = fbreq->dlen; in acomp_do_nondma()
237 static int acomp_do_one_req(struct acomp_req *req, bool comp) in acomp_do_one_req() argument
239 if (acomp_request_isnondma(req)) in acomp_do_one_req()
240 return acomp_do_nondma(req, comp); in acomp_do_one_req()
242 acomp_virt_to_sg(req); in acomp_do_one_req()
243 return comp ? crypto_acomp_reqtfm(req)->compress(req) : in acomp_do_one_req()
244 crypto_acomp_reqtfm(req)->decompress(req); in acomp_do_one_req()
247 static int acomp_reqchain_finish(struct acomp_req *req, int err) in acomp_reqchain_finish() argument
249 acomp_reqchain_virt(req); in acomp_reqchain_finish()
250 acomp_restore_req(req); in acomp_reqchain_finish()
256 struct acomp_req *req = data; in acomp_reqchain_done() local
259 compl = req->chain.compl; in acomp_reqchain_done()
260 data = req->chain.data; in acomp_reqchain_done()
265 err = acomp_reqchain_finish(req, err); in acomp_reqchain_done()
271 static int acomp_do_req_chain(struct acomp_req *req, bool comp) in acomp_do_req_chain() argument
275 acomp_save_req(req, acomp_reqchain_done); in acomp_do_req_chain()
277 err = acomp_do_one_req(req, comp); in acomp_do_req_chain()
281 return acomp_reqchain_finish(req, err); in acomp_do_req_chain()
284 int crypto_acomp_compress(struct acomp_req *req) in crypto_acomp_compress() argument
286 struct crypto_acomp *tfm = crypto_acomp_reqtfm(req); in crypto_acomp_compress()
288 if (acomp_req_on_stack(req) && acomp_is_async(tfm)) in crypto_acomp_compress()
290 if (crypto_acomp_req_virt(tfm) || acomp_request_issg(req)) in crypto_acomp_compress()
291 return crypto_acomp_reqtfm(req)->compress(req); in crypto_acomp_compress()
292 return acomp_do_req_chain(req, true); in crypto_acomp_compress()
296 int crypto_acomp_decompress(struct acomp_req *req) in crypto_acomp_decompress() argument
298 struct crypto_acomp *tfm = crypto_acomp_reqtfm(req); in crypto_acomp_decompress()
300 if (acomp_req_on_stack(req) && acomp_is_async(tfm)) in crypto_acomp_decompress()
302 if (crypto_acomp_req_virt(tfm) || acomp_request_issg(req)) in crypto_acomp_decompress()
303 return crypto_acomp_reqtfm(req)->decompress(req); in crypto_acomp_decompress()
304 return acomp_do_req_chain(req, false); in crypto_acomp_decompress()
535 struct acomp_req *__restrict req, bool atomic) in acomp_walk_virt() argument
537 struct scatterlist *src = req->src; in acomp_walk_virt()
538 struct scatterlist *dst = req->dst; in acomp_walk_virt()
540 walk->slen = req->slen; in acomp_walk_virt()
541 walk->dlen = req->dlen; in acomp_walk_virt()
547 if ((req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP) && !atomic) in acomp_walk_virt()
549 if ((req->base.flags & CRYPTO_ACOMP_REQ_SRC_VIRT)) in acomp_walk_virt()
551 if ((req->base.flags & CRYPTO_ACOMP_REQ_DST_VIRT)) in acomp_walk_virt()
555 walk->in.sg = (void *)req->svirt; in acomp_walk_virt()
560 walk->out.sg = (void *)req->dvirt; in acomp_walk_virt()
569 struct acomp_req *acomp_request_clone(struct acomp_req *req, in acomp_request_clone() argument
574 nreq = container_of(crypto_request_clone(&req->base, total, gfp), in acomp_request_clone()
576 if (nreq == req) in acomp_request_clone()
577 return req; in acomp_request_clone()
579 if (req->src == &req->chain.ssg) in acomp_request_clone()
581 if (req->dst == &req->chain.dsg) in acomp_request_clone()