File Index
Files and directories
Sign in
FILE

eip93-main.h

File preview with syntax highlighting.

linux-6.19.14/drivers/crypto/inside-secure/eip93/eip93-main.h C
  1/* SPDX-License-Identifier: GPL-2.0
  2 *
  3 * Copyright (C) 2019 - 2021
  4 *
  5 * Richard van Schagen <vschagen@icloud.com>
  6 * Christian Marangi <ansuelsmth@gmail.com
  7 */
  8#ifndef _EIP93_MAIN_H_
  9#define _EIP93_MAIN_H_
 10
 11#include <crypto/internal/aead.h>
 12#include <crypto/internal/hash.h>
 13#include <crypto/internal/skcipher.h>
 14#include <linux/bitfield.h>
 15#include <linux/interrupt.h>
 16
 17#define EIP93_RING_BUSY_DELAY		500
 18
 19#define EIP93_RING_NUM			512
 20#define EIP93_RING_BUSY			32
 21#define EIP93_CRA_PRIORITY		1500
 22
 23#define EIP93_RING_SA_STATE_ADDR(base, idx)	((base) + (idx))
 24#define EIP93_RING_SA_STATE_DMA(dma_base, idx)	((u32 __force)(dma_base) + \
 25						 ((idx) * sizeof(struct sa_state)))
 26
 27/* cipher algorithms */
 28#define EIP93_ALG_DES			BIT(0)
 29#define EIP93_ALG_3DES			BIT(1)
 30#define EIP93_ALG_AES			BIT(2)
 31#define EIP93_ALG_MASK			GENMASK(2, 0)
 32/* hash and hmac algorithms */
 33#define EIP93_HASH_MD5			BIT(3)
 34#define EIP93_HASH_SHA1			BIT(4)
 35#define EIP93_HASH_SHA224			BIT(5)
 36#define EIP93_HASH_SHA256			BIT(6)
 37#define EIP93_HASH_HMAC			BIT(7)
 38#define EIP93_HASH_MASK			GENMASK(6, 3)
 39/* cipher modes */
 40#define EIP93_MODE_CBC			BIT(8)
 41#define EIP93_MODE_ECB			BIT(9)
 42#define EIP93_MODE_CTR			BIT(10)
 43#define EIP93_MODE_RFC3686		BIT(11)
 44#define EIP93_MODE_MASK			GENMASK(10, 8)
 45
 46/* cipher encryption/decryption operations */
 47#define EIP93_ENCRYPT			BIT(12)
 48#define EIP93_DECRYPT			BIT(13)
 49
 50#define EIP93_BUSY			BIT(14)
 51
 52/* descriptor flags */
 53#define EIP93_DESC_DMA_IV			BIT(0)
 54#define EIP93_DESC_IPSEC			BIT(1)
 55#define EIP93_DESC_FINISH			BIT(2)
 56#define EIP93_DESC_LAST			BIT(3)
 57#define EIP93_DESC_FAKE_HMAC		BIT(4)
 58#define EIP93_DESC_PRNG			BIT(5)
 59#define EIP93_DESC_HASH			BIT(6)
 60#define EIP93_DESC_AEAD			BIT(7)
 61#define EIP93_DESC_SKCIPHER		BIT(8)
 62#define EIP93_DESC_ASYNC			BIT(9)
 63
 64#define IS_DMA_IV(desc_flags)		((desc_flags) & EIP93_DESC_DMA_IV)
 65
 66#define IS_DES(flags)			((flags) & EIP93_ALG_DES)
 67#define IS_3DES(flags)			((flags) & EIP93_ALG_3DES)
 68#define IS_AES(flags)			((flags) & EIP93_ALG_AES)
 69
 70#define IS_HASH_MD5(flags)		((flags) & EIP93_HASH_MD5)
 71#define IS_HASH_SHA1(flags)		((flags) & EIP93_HASH_SHA1)
 72#define IS_HASH_SHA224(flags)		((flags) & EIP93_HASH_SHA224)
 73#define IS_HASH_SHA256(flags)		((flags) & EIP93_HASH_SHA256)
 74#define IS_HMAC(flags)			((flags) & EIP93_HASH_HMAC)
 75
 76#define IS_CBC(mode)			((mode) & EIP93_MODE_CBC)
 77#define IS_ECB(mode)			((mode) & EIP93_MODE_ECB)
 78#define IS_CTR(mode)			((mode) & EIP93_MODE_CTR)
 79#define IS_RFC3686(mode)		((mode) & EIP93_MODE_RFC3686)
 80
 81#define IS_BUSY(flags)			((flags) & EIP93_BUSY)
 82
 83#define IS_ENCRYPT(dir)			((dir) & EIP93_ENCRYPT)
 84#define IS_DECRYPT(dir)			((dir) & EIP93_DECRYPT)
 85
 86#define IS_CIPHER(flags)		((flags) & (EIP93_ALG_DES | \
 87						    EIP93_ALG_3DES |  \
 88						    EIP93_ALG_AES))
 89
 90#define IS_HASH(flags)			((flags) & (EIP93_HASH_MD5 |  \
 91						    EIP93_HASH_SHA1 |   \
 92						    EIP93_HASH_SHA224 | \
 93						    EIP93_HASH_SHA256))
 94
 95/**
 96 * struct eip93_device - crypto engine device structure
 97 */
 98struct eip93_device {
 99	void __iomem		*base;
100	struct device		*dev;
101	struct clk		*clk;
102	int			irq;
103	struct eip93_ring		*ring;
104};
105
106struct eip93_desc_ring {
107	void			*base;
108	void			*base_end;
109	dma_addr_t		base_dma;
110	/* write and read pointers */
111	void			*read;
112	void			*write;
113	/* descriptor element offset */
114	u32			offset;
115};
116
117struct eip93_state_pool {
118	void			*base;
119	dma_addr_t		base_dma;
120};
121
122struct eip93_ring {
123	struct tasklet_struct		done_task;
124	/* command/result rings */
125	struct eip93_desc_ring		cdr;
126	struct eip93_desc_ring		rdr;
127	spinlock_t			write_lock;
128	spinlock_t			read_lock;
129	/* aync idr */
130	spinlock_t			idr_lock;
131	struct idr			crypto_async_idr;
132};
133
134enum eip93_alg_type {
135	EIP93_ALG_TYPE_AEAD,
136	EIP93_ALG_TYPE_SKCIPHER,
137	EIP93_ALG_TYPE_HASH,
138};
139
140struct eip93_alg_template {
141	struct eip93_device	*eip93;
142	enum eip93_alg_type	type;
143	u32			flags;
144	union {
145		struct aead_alg		aead;
146		struct skcipher_alg	skcipher;
147		struct ahash_alg	ahash;
148	} alg;
149};
150
151#endif /* _EIP93_MAIN_H_ */
~/ Read-only file preview.