Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/drivers/crypto/inside-secure/eip93/eip93-main.h
26285 views
1
/* SPDX-License-Identifier: GPL-2.0
2
*
3
* Copyright (C) 2019 - 2021
4
*
5
* Richard van Schagen <[email protected]>
6
* Christian Marangi <[email protected]
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
*/
98
struct eip93_device {
99
void __iomem *base;
100
struct device *dev;
101
struct clk *clk;
102
int irq;
103
struct eip93_ring *ring;
104
};
105
106
struct 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
117
struct eip93_state_pool {
118
void *base;
119
dma_addr_t base_dma;
120
};
121
122
struct 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
134
enum eip93_alg_type {
135
EIP93_ALG_TYPE_AEAD,
136
EIP93_ALG_TYPE_SKCIPHER,
137
EIP93_ALG_TYPE_HASH,
138
};
139
140
struct 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_ */
152
153