123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- /* SPDX-License-Identifier: GPL-2.0 */
- /*
- * Software async multibuffer crypto daemon headers
- *
- * Author:
- * Tim Chen <tim.c.chen@linux.intel.com>
- *
- * Copyright (c) 2014, Intel Corporation.
- */
- #ifndef _CRYPTO_MCRYPT_H
- #define _CRYPTO_MCRYPT_H
- #include <linux/crypto.h>
- #include <linux/kernel.h>
- #include <crypto/hash.h>
- struct mcryptd_ahash {
- struct crypto_ahash base;
- };
- static inline struct mcryptd_ahash *__mcryptd_ahash_cast(
- struct crypto_ahash *tfm)
- {
- return (struct mcryptd_ahash *)tfm;
- }
- struct mcryptd_cpu_queue {
- struct crypto_queue queue;
- spinlock_t q_lock;
- struct work_struct work;
- };
- struct mcryptd_queue {
- struct mcryptd_cpu_queue __percpu *cpu_queue;
- };
- struct mcryptd_instance_ctx {
- struct crypto_spawn spawn;
- struct mcryptd_queue *queue;
- };
- struct mcryptd_hash_ctx {
- struct crypto_ahash *child;
- struct mcryptd_alg_state *alg_state;
- };
- struct mcryptd_tag {
- /* seq number of request */
- unsigned seq_num;
- /* arrival time of request */
- unsigned long arrival;
- unsigned long expire;
- int cpu;
- };
- struct mcryptd_hash_request_ctx {
- struct list_head waiter;
- crypto_completion_t complete;
- struct mcryptd_tag tag;
- struct crypto_hash_walk walk;
- u8 *out;
- int flag;
- struct ahash_request areq;
- };
- struct mcryptd_ahash *mcryptd_alloc_ahash(const char *alg_name,
- u32 type, u32 mask);
- struct crypto_ahash *mcryptd_ahash_child(struct mcryptd_ahash *tfm);
- struct ahash_request *mcryptd_ahash_desc(struct ahash_request *req);
- void mcryptd_free_ahash(struct mcryptd_ahash *tfm);
- void mcryptd_flusher(struct work_struct *work);
- enum mcryptd_req_type {
- MCRYPTD_NONE,
- MCRYPTD_UPDATE,
- MCRYPTD_FINUP,
- MCRYPTD_DIGEST,
- MCRYPTD_FINAL
- };
- struct mcryptd_alg_cstate {
- unsigned long next_flush;
- unsigned next_seq_num;
- bool flusher_engaged;
- struct delayed_work flush;
- int cpu;
- struct mcryptd_alg_state *alg_state;
- void *mgr;
- spinlock_t work_lock;
- struct list_head work_list;
- struct list_head flush_list;
- };
- struct mcryptd_alg_state {
- struct mcryptd_alg_cstate __percpu *alg_cstate;
- unsigned long (*flusher)(struct mcryptd_alg_cstate *cstate);
- };
- /* return delay in jiffies from current time */
- static inline unsigned long get_delay(unsigned long t)
- {
- long delay;
- delay = (long) t - (long) jiffies;
- if (delay <= 0)
- return 0;
- else
- return (unsigned long) delay;
- }
- void mcryptd_arm_flusher(struct mcryptd_alg_cstate *cstate, unsigned long delay);
- #endif
|