2 * Software async multibuffer crypto daemon headers
5 * Tim Chen <tim.c.chen@linux.intel.com>
7 * Copyright (c) 2014, Intel Corporation.
10 #ifndef _CRYPTO_MCRYPT_H
11 #define _CRYPTO_MCRYPT_H
13 #include <linux/crypto.h>
14 #include <linux/kernel.h>
15 #include <crypto/hash.h>
17 struct mcryptd_ahash
{
18 struct crypto_ahash base
;
21 static inline struct mcryptd_ahash
*__mcryptd_ahash_cast(
22 struct crypto_ahash
*tfm
)
24 return (struct mcryptd_ahash
*)tfm
;
27 struct mcryptd_cpu_queue
{
28 struct crypto_queue queue
;
29 struct work_struct work
;
32 struct mcryptd_queue
{
33 struct mcryptd_cpu_queue __percpu
*cpu_queue
;
36 struct mcryptd_instance_ctx
{
37 struct crypto_spawn spawn
;
38 struct mcryptd_queue
*queue
;
41 struct mcryptd_hash_ctx
{
42 struct crypto_shash
*child
;
43 struct mcryptd_alg_state
*alg_state
;
47 /* seq number of request */
49 /* arrival time of request */
50 unsigned long arrival
;
55 struct mcryptd_hash_request_ctx
{
56 struct list_head waiter
;
57 crypto_completion_t complete
;
58 struct mcryptd_tag tag
;
59 struct crypto_hash_walk walk
;
62 struct shash_desc desc
;
65 struct mcryptd_ahash
*mcryptd_alloc_ahash(const char *alg_name
,
67 struct crypto_shash
*mcryptd_ahash_child(struct mcryptd_ahash
*tfm
);
68 struct shash_desc
*mcryptd_shash_desc(struct ahash_request
*req
);
69 void mcryptd_free_ahash(struct mcryptd_ahash
*tfm
);
70 void mcryptd_flusher(struct work_struct
*work
);
72 enum mcryptd_req_type
{
80 struct mcryptd_alg_cstate
{
81 unsigned long next_flush
;
82 unsigned next_seq_num
;
84 struct delayed_work flush
;
86 struct mcryptd_alg_state
*alg_state
;
89 struct list_head work_list
;
90 struct list_head flush_list
;
93 struct mcryptd_alg_state
{
94 struct mcryptd_alg_cstate __percpu
*alg_cstate
;
95 unsigned long (*flusher
)(struct mcryptd_alg_cstate
*cstate
);
98 /* return delay in jiffies from current time */
99 static inline unsigned long get_delay(unsigned long t
)
103 delay
= (long) t
- (long) jiffies
;
107 return (unsigned long) delay
;
110 void mcryptd_arm_flusher(struct mcryptd_alg_cstate
*cstate
, unsigned long delay
);