Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1546452
| From | Cyrille Pitchen <cyrille.pitchen@atmel.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH 03/12] crypto: atmel-sha: make atmel_sha_done_task more generic |
| Date | 2016-12-22 17:20 +0100 |
| Message-ID | <sReg2-3hw-23@gated-at.bofh.it> (permalink) |
| References | <sReg1-3hw-3@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
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>
---
drivers/crypto/atmel-sha.c | 21 ++++++++++++++++-----
1 file 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 {
struct crypto_queue queue;
struct ahash_request *req;
bool is_async;
+ atmel_sha_fn_t resume;
struct atmel_sha_dma dma_lch_in;
@@ -946,6 +947,8 @@ static int atmel_sha_handle_queue(struct atmel_sha_dev *dd,
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)
{
struct ahash_request *req = dd->req;
@@ -960,6 +963,7 @@ static int atmel_sha_start(struct atmel_sha_dev *dd)
if (err)
goto err1;
+ dd->resume = atmel_sha_done;
if (ctx->op == SHA_OP_UPDATE) {
err = atmel_sha_update_req(dd);
if (err != -EINPROGRESS && (ctx->flags & SHA_FLAGS_FINUP))
@@ -1215,13 +1219,10 @@ static void atmel_sha_queue_task(unsigned long data)
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;
- dd->is_async = true;
-
if (SHA_FLAGS_CPU & dd->flags) {
if (SHA_FLAGS_OUTPUT_READY & dd->flags) {
dd->flags &= ~SHA_FLAGS_OUTPUT_READY;
@@ -1245,11 +1246,21 @@ static void atmel_sha_done_task(unsigned long data)
goto finish;
}
}
- return;
+ return err;
finish:
/* finish curent request */
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)
--
2.7.4
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH 00/12] crypto: atmel-authenc: add support to authenc(hmac(shaX),Y(aes)) modes Cyrille Pitchen <cyrille.pitchen@atmel.com> - 2016-12-22 17:20 +0100 [PATCH 06/12] crypto: atmel-sha: add SHA_MR_MODE_IDATAR0 Cyrille Pitchen <cyrille.pitchen@atmel.com> - 2016-12-22 17:20 +0100 [PATCH 05/12] crypto: atmel-sha: add atmel_sha_wait_for_data_ready() Cyrille Pitchen <cyrille.pitchen@atmel.com> - 2016-12-22 17:20 +0100 [PATCH 03/12] crypto: atmel-sha: make atmel_sha_done_task more generic Cyrille Pitchen <cyrille.pitchen@atmel.com> - 2016-12-22 17:20 +0100 [PATCH 04/12] crypto: atmel-sha: redefine SHA_FLAGS_SHA* flags to match SHA_MR_ALGO_SHA* Cyrille Pitchen <cyrille.pitchen@atmel.com> - 2016-12-22 17:20 +0100 [PATCH 11/12] crypto: atmel-authenc: add support to authenc(hmac(shaX),Y(aes)) modes Cyrille Pitchen <cyrille.pitchen@atmel.com> - 2016-12-22 17:20 +0100 [PATCH 02/12] crypto: atmel-sha: update request queue management to make it more generic Cyrille Pitchen <cyrille.pitchen@atmel.com> - 2016-12-22 17:20 +0100 [PATCH 12/12] crypto: atmel-sha: add verbose debug facilities to print hw register names Cyrille Pitchen <cyrille.pitchen@atmel.com> - 2016-12-22 17:20 +0100 [PATCH 01/12] crypto: atmel-sha: create function to get an Atmel SHA device Cyrille Pitchen <cyrille.pitchen@atmel.com> - 2016-12-22 17:20 +0100
csiph-web