summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2015-07-08 07:15:14 +0300
committerHerbert Xu <herbert@gondor.apana.org.au>2015-07-14 09:56:44 +0300
commit2c11a3f970d143f86bff096ca84a3d3f3b5ac3c1 (patch)
tree94f7d9b913b2522800f0826bb4ab8fd063997984
parent31d228cc644034da97394bbadb2dc55ad9bcddb9 (diff)
downloadlinux-2c11a3f970d143f86bff096ca84a3d3f3b5ac3c1.tar.xz
crypto: aead - Add aead_queue interface
This patch adds a type-safe queueing interface for AEAD. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
-rw-r--r--include/crypto/internal/aead.h35
1 files changed, 35 insertions, 0 deletions
diff --git a/include/crypto/internal/aead.h b/include/crypto/internal/aead.h
index 4b2547186519..c3942f4d6e9f 100644
--- a/include/crypto/internal/aead.h
+++ b/include/crypto/internal/aead.h
@@ -34,6 +34,10 @@ struct crypto_aead_spawn {
struct crypto_spawn base;
};
+struct aead_queue {
+ struct crypto_queue base;
+};
+
extern const struct crypto_type crypto_aead_type;
extern const struct crypto_type crypto_nivaead_type;
@@ -157,6 +161,37 @@ static inline unsigned int crypto_aead_maxauthsize(struct crypto_aead *aead)
return crypto_aead_alg_maxauthsize(crypto_aead_alg(aead));
}
+static inline void aead_init_queue(struct aead_queue *queue,
+ unsigned int max_qlen)
+{
+ crypto_init_queue(&queue->base, max_qlen);
+}
+
+static inline int aead_enqueue_request(struct aead_queue *queue,
+ struct aead_request *request)
+{
+ return crypto_enqueue_request(&queue->base, &request->base);
+}
+
+static inline struct aead_request *aead_dequeue_request(
+ struct aead_queue *queue)
+{
+ struct crypto_async_request *req;
+
+ req = crypto_dequeue_request(&queue->base);
+
+ return req ? container_of(req, struct aead_request, base) : NULL;
+}
+
+static inline struct aead_request *aead_get_backlog(struct aead_queue *queue)
+{
+ struct crypto_async_request *req;
+
+ req = crypto_get_backlog(&queue->base);
+
+ return req ? container_of(req, struct aead_request, base) : NULL;
+}
+
int crypto_register_aead(struct aead_alg *alg);
void crypto_unregister_aead(struct aead_alg *alg);
int crypto_register_aeads(struct aead_alg *algs, int count);