Blame view
include/crypto/engine.h
4.11 KB
2874c5fd2 treewide: Replace... |
1 |
/* SPDX-License-Identifier: GPL-2.0-or-later */ |
2589ad840 crypto: engine - ... |
2 3 4 5 |
/* * Crypto engine API * * Copyright (c) 2016 Baolin Wang <baolin.wang@linaro.org> |
2589ad840 crypto: engine - ... |
6 7 8 9 10 11 12 13 14 |
*/ #ifndef _CRYPTO_ENGINE_H #define _CRYPTO_ENGINE_H #include <linux/crypto.h> #include <linux/list.h> #include <linux/kernel.h> #include <linux/kthread.h> #include <crypto/algapi.h> |
218d1cc18 crypto: engine - ... |
15 16 |
#include <crypto/aead.h> #include <crypto/akcipher.h> |
4cba7cf02 crypto: engine - ... |
17 |
#include <crypto/hash.h> |
218d1cc18 crypto: engine - ... |
18 |
#include <crypto/skcipher.h> |
2589ad840 crypto: engine - ... |
19 20 21 22 23 24 25 26 |
#define ENGINE_NAME_LEN 30 /* * struct crypto_engine - crypto hardware engine * @name: the engine name * @idling: the engine is entering idle state * @busy: request pump is busy * @running: the engine is on working |
6a89f492f crypto: engine - ... |
27 28 29 |
* @retry_support: indication that the hardware allows re-execution * of a failed backlog request * crypto-engine, in head position to keep order |
2589ad840 crypto: engine - ... |
30 31 32 33 34 35 36 37 38 39 |
* @list: link with the global crypto engine list * @queue_lock: spinlock to syncronise access to request queue * @queue: the crypto queue of the engine * @rt: whether this queue is set to run as a realtime task * @prepare_crypt_hardware: a request will soon arrive from the queue * so the subsystem requests the driver to prepare the hardware * by issuing this call * @unprepare_crypt_hardware: there are currently no more requests on the * queue so the subsystem notifies the driver that it may relax the * hardware by issuing this call |
8d9082264 crypto: engine - ... |
40 41 |
* @do_batch_requests: execute a batch of requests. Depends on multiple * requests support. |
c4ca2b0b2 crypto: engine - ... |
42 |
* @kworker: kthread worker struct for request pump |
2589ad840 crypto: engine - ... |
43 44 45 46 47 48 49 50 51 |
* @pump_requests: work struct for scheduling work to the request pump * @priv_data: the engine private data * @cur_req: the current request which is on processing */ struct crypto_engine { char name[ENGINE_NAME_LEN]; bool idling; bool busy; bool running; |
6a89f492f crypto: engine - ... |
52 53 |
bool retry_support; |
2589ad840 crypto: engine - ... |
54 55 56 57 |
struct list_head list; spinlock_t queue_lock; struct crypto_queue queue; |
88d58ef89 crypto: engine - ... |
58 |
struct device *dev; |
2589ad840 crypto: engine - ... |
59 60 61 62 63 |
bool rt; int (*prepare_crypt_hardware)(struct crypto_engine *engine); int (*unprepare_crypt_hardware)(struct crypto_engine *engine); |
8d9082264 crypto: engine - ... |
64 |
int (*do_batch_requests)(struct crypto_engine *engine); |
2589ad840 crypto: engine - ... |
65 |
|
c4ca2b0b2 crypto: engine - ... |
66 |
struct kthread_worker *kworker; |
2589ad840 crypto: engine - ... |
67 68 69 |
struct kthread_work pump_requests; void *priv_data; |
4cba7cf02 crypto: engine - ... |
70 |
struct crypto_async_request *cur_req; |
2589ad840 crypto: engine - ... |
71 |
}; |
218d1cc18 crypto: engine - ... |
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
/* * struct crypto_engine_op - crypto hardware engine operations * @prepare__request: do some prepare if need before handle the current request * @unprepare_request: undo any work done by prepare_request() * @do_one_request: do encryption for current request */ struct crypto_engine_op { int (*prepare_request)(struct crypto_engine *engine, void *areq); int (*unprepare_request)(struct crypto_engine *engine, void *areq); int (*do_one_request)(struct crypto_engine *engine, void *areq); }; struct crypto_engine_ctx { struct crypto_engine_op op; }; |
218d1cc18 crypto: engine - ... |
90 91 92 93 |
int crypto_transfer_aead_request_to_engine(struct crypto_engine *engine, struct aead_request *req); int crypto_transfer_akcipher_request_to_engine(struct crypto_engine *engine, struct akcipher_request *req); |
4cba7cf02 crypto: engine - ... |
94 |
int crypto_transfer_hash_request_to_engine(struct crypto_engine *engine, |
218d1cc18 crypto: engine - ... |
95 96 97 |
struct ahash_request *req); int crypto_transfer_skcipher_request_to_engine(struct crypto_engine *engine, struct skcipher_request *req); |
218d1cc18 crypto: engine - ... |
98 99 100 101 |
void crypto_finalize_aead_request(struct crypto_engine *engine, struct aead_request *req, int err); void crypto_finalize_akcipher_request(struct crypto_engine *engine, struct akcipher_request *req, int err); |
4cba7cf02 crypto: engine - ... |
102 103 |
void crypto_finalize_hash_request(struct crypto_engine *engine, struct ahash_request *req, int err); |
218d1cc18 crypto: engine - ... |
104 105 |
void crypto_finalize_skcipher_request(struct crypto_engine *engine, struct skcipher_request *req, int err); |
2589ad840 crypto: engine - ... |
106 107 108 |
int crypto_engine_start(struct crypto_engine *engine); int crypto_engine_stop(struct crypto_engine *engine); struct crypto_engine *crypto_engine_alloc_init(struct device *dev, bool rt); |
6a89f492f crypto: engine - ... |
109 110 |
struct crypto_engine *crypto_engine_alloc_init_and_set(struct device *dev, bool retry_support, |
8d9082264 crypto: engine - ... |
111 |
int (*cbk_do_batch)(struct crypto_engine *engine), |
6a89f492f crypto: engine - ... |
112 |
bool rt, int qlen); |
2589ad840 crypto: engine - ... |
113 114 115 |
int crypto_engine_exit(struct crypto_engine *engine); #endif /* _CRYPTO_ENGINE_H */ |