diff options
author | Cyrille Pitchen <cyrille.pitchen@atmel.com> | 2017-01-26 11:07:48 -0500 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2017-02-03 05:16:12 -0500 |
commit | b5ce82a7b4938f278fc6da28ce00da34e7a0773c (patch) | |
tree | d339df10118e56d3438d7b0c61a59beb77ff8c7a /drivers/crypto/atmel-sha.c | |
parent | a29af939b24dc98c11e1e8a77be7669c4e4f5719 (diff) |
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: Cyrille Pitchen <cyrille.pitchen@atmel.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'drivers/crypto/atmel-sha.c')
-rw-r--r-- | drivers/crypto/atmel-sha.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/drivers/crypto/atmel-sha.c b/drivers/crypto/atmel-sha.c index 2dbed8bb8d26..643d79a05dda 100644 --- a/drivers/crypto/atmel-sha.c +++ b/drivers/crypto/atmel-sha.c | |||
@@ -138,6 +138,7 @@ struct atmel_sha_dev { | |||
138 | struct crypto_queue queue; | 138 | struct crypto_queue queue; |
139 | struct ahash_request *req; | 139 | struct ahash_request *req; |
140 | bool is_async; | 140 | bool is_async; |
141 | atmel_sha_fn_t resume; | ||
141 | 142 | ||
142 | struct atmel_sha_dma dma_lch_in; | 143 | struct atmel_sha_dma dma_lch_in; |
143 | 144 | ||
@@ -946,6 +947,8 @@ static int atmel_sha_handle_queue(struct atmel_sha_dev *dd, | |||
946 | return (start_async) ? ret : err; | 947 | return (start_async) ? ret : err; |
947 | } | 948 | } |
948 | 949 | ||
950 | static int atmel_sha_done(struct atmel_sha_dev *dd); | ||
951 | |||
949 | static int atmel_sha_start(struct atmel_sha_dev *dd) | 952 | static int atmel_sha_start(struct atmel_sha_dev *dd) |
950 | { | 953 | { |
951 | struct ahash_request *req = dd->req; | 954 | struct ahash_request *req = dd->req; |
@@ -960,6 +963,7 @@ static int atmel_sha_start(struct atmel_sha_dev *dd) | |||
960 | if (err) | 963 | if (err) |
961 | goto err1; | 964 | goto err1; |
962 | 965 | ||
966 | dd->resume = atmel_sha_done; | ||
963 | if (ctx->op == SHA_OP_UPDATE) { | 967 | if (ctx->op == SHA_OP_UPDATE) { |
964 | err = atmel_sha_update_req(dd); | 968 | err = atmel_sha_update_req(dd); |
965 | if (err != -EINPROGRESS && (ctx->flags & SHA_FLAGS_FINUP)) | 969 | if (err != -EINPROGRESS && (ctx->flags & SHA_FLAGS_FINUP)) |
@@ -1215,13 +1219,10 @@ static void atmel_sha_queue_task(unsigned long data) | |||
1215 | atmel_sha_handle_queue(dd, NULL); | 1219 | atmel_sha_handle_queue(dd, NULL); |
1216 | } | 1220 | } |
1217 | 1221 | ||
1218 | static void atmel_sha_done_task(unsigned long data) | 1222 | static int atmel_sha_done(struct atmel_sha_dev *dd) |
1219 | { | 1223 | { |
1220 | struct atmel_sha_dev *dd = (struct atmel_sha_dev *)data; | ||
1221 | int err = 0; | 1224 | int err = 0; |
1222 | 1225 | ||
1223 | dd->is_async = true; | ||
1224 | |||
1225 | if (SHA_FLAGS_CPU & dd->flags) { | 1226 | if (SHA_FLAGS_CPU & dd->flags) { |
1226 | if (SHA_FLAGS_OUTPUT_READY & dd->flags) { | 1227 | if (SHA_FLAGS_OUTPUT_READY & dd->flags) { |
1227 | dd->flags &= ~SHA_FLAGS_OUTPUT_READY; | 1228 | dd->flags &= ~SHA_FLAGS_OUTPUT_READY; |
@@ -1245,11 +1246,21 @@ static void atmel_sha_done_task(unsigned long data) | |||
1245 | goto finish; | 1246 | goto finish; |
1246 | } | 1247 | } |
1247 | } | 1248 | } |
1248 | return; | 1249 | return err; |
1249 | 1250 | ||
1250 | finish: | 1251 | finish: |
1251 | /* finish curent request */ | 1252 | /* finish curent request */ |
1252 | atmel_sha_finish_req(dd->req, err); | 1253 | atmel_sha_finish_req(dd->req, err); |
1254 | |||
1255 | return err; | ||
1256 | } | ||
1257 | |||
1258 | static void atmel_sha_done_task(unsigned long data) | ||
1259 | { | ||
1260 | struct atmel_sha_dev *dd = (struct atmel_sha_dev *)data; | ||
1261 | |||
1262 | dd->is_async = true; | ||
1263 | (void)dd->resume(dd); | ||
1253 | } | 1264 | } |
1254 | 1265 | ||
1255 | static irqreturn_t atmel_sha_irq(int irq, void *dev_id) | 1266 | static irqreturn_t atmel_sha_irq(int irq, void *dev_id) |