Linux Audio

Check our new training course

Loading...
Note: File does not exist in v5.4.
  1/* SPDX-License-Identifier: GPL-2.0 */
  2/*
  3 * Software async multibuffer crypto daemon headers
  4 *
  5 *    Author:
  6 *             Tim Chen <tim.c.chen@linux.intel.com>
  7 *
  8 *    Copyright (c) 2014, Intel Corporation.
  9 */
 10
 11#ifndef _CRYPTO_MCRYPT_H
 12#define _CRYPTO_MCRYPT_H
 13
 14#include <linux/crypto.h>
 15#include <linux/kernel.h>
 16#include <crypto/hash.h>
 17
 18struct mcryptd_ahash {
 19	struct crypto_ahash base;
 20};
 21
 22static inline struct mcryptd_ahash *__mcryptd_ahash_cast(
 23	struct crypto_ahash *tfm)
 24{
 25	return (struct mcryptd_ahash *)tfm;
 26}
 27
 28struct mcryptd_cpu_queue {
 29	struct crypto_queue queue;
 30	spinlock_t q_lock;
 31	struct work_struct work;
 32};
 33
 34struct mcryptd_queue {
 35	struct mcryptd_cpu_queue __percpu *cpu_queue;
 36};
 37
 38struct mcryptd_instance_ctx {
 39	struct crypto_spawn spawn;
 40	struct mcryptd_queue *queue;
 41};
 42
 43struct mcryptd_hash_ctx {
 44	struct crypto_ahash *child;
 45	struct mcryptd_alg_state *alg_state;
 46};
 47
 48struct mcryptd_tag {
 49	/* seq number of request */
 50	unsigned seq_num;
 51	/* arrival time of request */
 52	unsigned long arrival;
 53	unsigned long expire;
 54	int	cpu;
 55};
 56
 57struct mcryptd_hash_request_ctx {
 58	struct list_head waiter;
 59	crypto_completion_t complete;
 60	struct mcryptd_tag tag;
 61	struct crypto_hash_walk walk;
 62	u8 *out;
 63	int flag;
 64	struct ahash_request areq;
 65};
 66
 67struct mcryptd_ahash *mcryptd_alloc_ahash(const char *alg_name,
 68					u32 type, u32 mask);
 69struct crypto_ahash *mcryptd_ahash_child(struct mcryptd_ahash *tfm);
 70struct ahash_request *mcryptd_ahash_desc(struct ahash_request *req);
 71void mcryptd_free_ahash(struct mcryptd_ahash *tfm);
 72void mcryptd_flusher(struct work_struct *work);
 73
 74enum mcryptd_req_type {
 75	MCRYPTD_NONE,
 76	MCRYPTD_UPDATE,
 77	MCRYPTD_FINUP,
 78	MCRYPTD_DIGEST,
 79	MCRYPTD_FINAL
 80};
 81
 82struct mcryptd_alg_cstate {
 83	unsigned long next_flush;
 84	unsigned next_seq_num;
 85	bool	flusher_engaged;
 86	struct  delayed_work flush;
 87	int	cpu;
 88	struct  mcryptd_alg_state *alg_state;
 89	void	*mgr;
 90	spinlock_t work_lock;
 91	struct list_head work_list;
 92	struct list_head flush_list;
 93};
 94
 95struct mcryptd_alg_state {
 96	struct mcryptd_alg_cstate __percpu *alg_cstate;
 97	unsigned long (*flusher)(struct mcryptd_alg_cstate *cstate);
 98};
 99
100/* return delay in jiffies from current time */
101static inline unsigned long get_delay(unsigned long t)
102{
103	long delay;
104
105	delay = (long) t - (long) jiffies;
106	if (delay <= 0)
107		return 0;
108	else
109		return (unsigned long) delay;
110}
111
112void mcryptd_arm_flusher(struct mcryptd_alg_cstate *cstate, unsigned long delay);
113
114#endif