Commit b5ce82a7 authored by Cyrille Pitchen's avatar Cyrille Pitchen Committed by Herbert Xu

crypto: atmel-sha - make atmel_sha_done_task more generic

This patch is a transitional patch. It updates atmel_sha_done_task() to
make it more generic. Indeed, it adds a new .resume() member in the
atmel_sha_dev structure. This hook is called from atmel_sha_done_task()
to resume processing an asynchronous request.
Signed-off-by: default avatarCyrille Pitchen <cyrille.pitchen@atmel.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent a29af939
...@@ -138,6 +138,7 @@ struct atmel_sha_dev { ...@@ -138,6 +138,7 @@ struct atmel_sha_dev {
struct crypto_queue queue; struct crypto_queue queue;
struct ahash_request *req; struct ahash_request *req;
bool is_async; bool is_async;
atmel_sha_fn_t resume;
struct atmel_sha_dma dma_lch_in; struct atmel_sha_dma dma_lch_in;
...@@ -946,6 +947,8 @@ static int atmel_sha_handle_queue(struct atmel_sha_dev *dd, ...@@ -946,6 +947,8 @@ static int atmel_sha_handle_queue(struct atmel_sha_dev *dd,
return (start_async) ? ret : err; return (start_async) ? ret : err;
} }
static int atmel_sha_done(struct atmel_sha_dev *dd);
static int atmel_sha_start(struct atmel_sha_dev *dd) static int atmel_sha_start(struct atmel_sha_dev *dd)
{ {
struct ahash_request *req = dd->req; struct ahash_request *req = dd->req;
...@@ -960,6 +963,7 @@ static int atmel_sha_start(struct atmel_sha_dev *dd) ...@@ -960,6 +963,7 @@ static int atmel_sha_start(struct atmel_sha_dev *dd)
if (err) if (err)
goto err1; goto err1;
dd->resume = atmel_sha_done;
if (ctx->op == SHA_OP_UPDATE) { if (ctx->op == SHA_OP_UPDATE) {
err = atmel_sha_update_req(dd); err = atmel_sha_update_req(dd);
if (err != -EINPROGRESS && (ctx->flags & SHA_FLAGS_FINUP)) if (err != -EINPROGRESS && (ctx->flags & SHA_FLAGS_FINUP))
...@@ -1215,13 +1219,10 @@ static void atmel_sha_queue_task(unsigned long data) ...@@ -1215,13 +1219,10 @@ static void atmel_sha_queue_task(unsigned long data)
atmel_sha_handle_queue(dd, NULL); atmel_sha_handle_queue(dd, NULL);
} }
static void atmel_sha_done_task(unsigned long data) static int atmel_sha_done(struct atmel_sha_dev *dd)
{ {
struct atmel_sha_dev *dd = (struct atmel_sha_dev *)data;
int err = 0; int err = 0;
dd->is_async = true;
if (SHA_FLAGS_CPU & dd->flags) { if (SHA_FLAGS_CPU & dd->flags) {
if (SHA_FLAGS_OUTPUT_READY & dd->flags) { if (SHA_FLAGS_OUTPUT_READY & dd->flags) {
dd->flags &= ~SHA_FLAGS_OUTPUT_READY; dd->flags &= ~SHA_FLAGS_OUTPUT_READY;
...@@ -1245,11 +1246,21 @@ static void atmel_sha_done_task(unsigned long data) ...@@ -1245,11 +1246,21 @@ static void atmel_sha_done_task(unsigned long data)
goto finish; goto finish;
} }
} }
return; return err;
finish: finish:
/* finish curent request */ /* finish curent request */
atmel_sha_finish_req(dd->req, err); atmel_sha_finish_req(dd->req, err);
return err;
}
static void atmel_sha_done_task(unsigned long data)
{
struct atmel_sha_dev *dd = (struct atmel_sha_dev *)data;
dd->is_async = true;
(void)dd->resume(dd);
} }
static irqreturn_t atmel_sha_irq(int irq, void *dev_id) static irqreturn_t atmel_sha_irq(int irq, void *dev_id)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment