Linux Audio

Check our new training course

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