Blame view
drivers/crypto/omap-aes.h
5.99 KB
d2912cb15 treewide: Replace... |
1 |
/* SPDX-License-Identifier: GPL-2.0-only */ |
5b3d4d2e6 crypto: omap-aes ... |
2 3 4 5 6 7 |
/* * Cryptographic API. * * Support for OMAP AES HW ACCELERATOR defines * * Copyright (c) 2015 Texas Instruments Incorporated |
5b3d4d2e6 crypto: omap-aes ... |
8 9 10 |
*/ #ifndef __OMAP_AES_H__ #define __OMAP_AES_H__ |
f0956d42c crypto: omap-aes-... |
11 |
#include <crypto/aes.h> |
c21c8b898 crypto: omap - co... |
12 |
#include <crypto/engine.h> |
5b3d4d2e6 crypto: omap-aes ... |
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#define DST_MAXBURST 4 #define DMA_MIN (DST_MAXBURST * sizeof(u32)) #define _calc_walked(inout) (dd->inout##_walk.offset - dd->inout##_sg->offset) /* * OMAP TRM gives bitfields as start:end, where start is the higher bit * number. For example 7:0 */ #define FLD_MASK(start, end) (((1 << ((start) - (end) + 1)) - 1) << (end)) #define FLD_VAL(val, start, end) (((val) << (end)) & FLD_MASK(start, end)) #define AES_REG_KEY(dd, x) ((dd)->pdata->key_ofs - \ (((x) ^ 0x01) * 0x04)) #define AES_REG_IV(dd, x) ((dd)->pdata->iv_ofs + ((x) * 0x04)) #define AES_REG_CTRL(dd) ((dd)->pdata->ctrl_ofs) |
ad18cc9d0 crypto: omap-aes ... |
30 |
#define AES_REG_CTRL_CONTEXT_READY BIT(31) |
5b3d4d2e6 crypto: omap-aes ... |
31 32 33 34 35 |
#define AES_REG_CTRL_CTR_WIDTH_MASK GENMASK(8, 7) #define AES_REG_CTRL_CTR_WIDTH_32 0 #define AES_REG_CTRL_CTR_WIDTH_64 BIT(7) #define AES_REG_CTRL_CTR_WIDTH_96 BIT(8) #define AES_REG_CTRL_CTR_WIDTH_128 GENMASK(8, 7) |
ad18cc9d0 crypto: omap-aes ... |
36 |
#define AES_REG_CTRL_GCM GENMASK(17, 16) |
5b3d4d2e6 crypto: omap-aes ... |
37 38 39 40 41 42 43 |
#define AES_REG_CTRL_CTR BIT(6) #define AES_REG_CTRL_CBC BIT(5) #define AES_REG_CTRL_KEY_SIZE GENMASK(4, 3) #define AES_REG_CTRL_DIRECTION BIT(2) #define AES_REG_CTRL_INPUT_READY BIT(1) #define AES_REG_CTRL_OUTPUT_READY BIT(0) #define AES_REG_CTRL_MASK GENMASK(24, 2) |
ad18cc9d0 crypto: omap-aes ... |
44 45 46 |
#define AES_REG_C_LEN_0 0x54 #define AES_REG_C_LEN_1 0x58 #define AES_REG_A_LEN 0x5C |
5b3d4d2e6 crypto: omap-aes ... |
47 |
#define AES_REG_DATA_N(dd, x) ((dd)->pdata->data_ofs + ((x) * 0x04)) |
ad18cc9d0 crypto: omap-aes ... |
48 |
#define AES_REG_TAG_N(dd, x) (0x70 + ((x) * 0x04)) |
5b3d4d2e6 crypto: omap-aes ... |
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
#define AES_REG_REV(dd) ((dd)->pdata->rev_ofs) #define AES_REG_MASK(dd) ((dd)->pdata->mask_ofs) #define AES_REG_MASK_SIDLE BIT(6) #define AES_REG_MASK_START BIT(5) #define AES_REG_MASK_DMA_OUT_EN BIT(3) #define AES_REG_MASK_DMA_IN_EN BIT(2) #define AES_REG_MASK_SOFTRESET BIT(1) #define AES_REG_AUTOIDLE BIT(0) #define AES_REG_LENGTH_N(x) (0x54 + ((x) * 0x04)) #define AES_REG_IRQ_STATUS(dd) ((dd)->pdata->irq_status_ofs) #define AES_REG_IRQ_ENABLE(dd) ((dd)->pdata->irq_enable_ofs) #define AES_REG_IRQ_DATA_IN BIT(1) #define AES_REG_IRQ_DATA_OUT BIT(2) #define DEFAULT_TIMEOUT (5 * HZ) #define DEFAULT_AUTOSUSPEND_DELAY 1000 |
ad18cc9d0 crypto: omap-aes ... |
69 |
#define FLAGS_MODE_MASK 0x001f |
5b3d4d2e6 crypto: omap-aes ... |
70 71 |
#define FLAGS_ENCRYPT BIT(0) #define FLAGS_CBC BIT(1) |
ad18cc9d0 crypto: omap-aes ... |
72 73 74 |
#define FLAGS_CTR BIT(2) #define FLAGS_GCM BIT(3) #define FLAGS_RFC4106_GCM BIT(4) |
5b3d4d2e6 crypto: omap-aes ... |
75 |
|
ad18cc9d0 crypto: omap-aes ... |
76 77 |
#define FLAGS_INIT BIT(5) #define FLAGS_FAST BIT(6) |
5b3d4d2e6 crypto: omap-aes ... |
78 79 80 |
#define FLAGS_IN_DATA_ST_SHIFT 8 #define FLAGS_OUT_DATA_ST_SHIFT 10 |
ad18cc9d0 crypto: omap-aes ... |
81 |
#define FLAGS_ASSOC_DATA_ST_SHIFT 12 |
5b3d4d2e6 crypto: omap-aes ... |
82 83 |
#define AES_BLOCK_WORDS (AES_BLOCK_SIZE >> 2) |
ad18cc9d0 crypto: omap-aes ... |
84 85 86 87 |
struct omap_aes_gcm_result { struct completion completion; int err; }; |
5b3d4d2e6 crypto: omap-aes ... |
88 |
struct omap_aes_ctx { |
c21c8b898 crypto: omap - co... |
89 |
struct crypto_engine_ctx enginectx; |
5b3d4d2e6 crypto: omap-aes ... |
90 91 |
int keylen; u32 key[AES_KEYSIZE_256 / sizeof(u32)]; |
ad18cc9d0 crypto: omap-aes ... |
92 |
u8 nonce[4]; |
6a99d7a2d crypto: omap-aes ... |
93 |
struct crypto_skcipher *fallback; |
f0956d42c crypto: omap-aes-... |
94 95 96 97 98 |
}; struct omap_aes_gcm_ctx { struct omap_aes_ctx octx; struct crypto_aes_ctx actx; |
5b3d4d2e6 crypto: omap-aes ... |
99 100 101 102 103 |
}; struct omap_aes_reqctx { struct omap_aes_dev *dd; unsigned long mode; |
ad18cc9d0 crypto: omap-aes ... |
104 105 |
u8 iv[AES_BLOCK_SIZE]; u32 auth_tag[AES_BLOCK_SIZE / sizeof(u32)]; |
6a99d7a2d crypto: omap-aes ... |
106 |
struct skcipher_request fallback_req; // keep at the end |
5b3d4d2e6 crypto: omap-aes ... |
107 108 109 110 111 112 |
}; #define OMAP_AES_QUEUE_LENGTH 1 #define OMAP_AES_CACHE_SIZE 0 struct omap_aes_algs_info { |
b3e3f0fe4 crypto: omap - sw... |
113 |
struct skcipher_alg *algs_list; |
5b3d4d2e6 crypto: omap-aes ... |
114 115 116 |
unsigned int size; unsigned int registered; }; |
ad18cc9d0 crypto: omap-aes ... |
117 118 119 120 121 |
struct omap_aes_aead_algs { struct aead_alg *algs_list; unsigned int size; unsigned int registered; }; |
5b3d4d2e6 crypto: omap-aes ... |
122 123 124 |
struct omap_aes_pdata { struct omap_aes_algs_info *algs_info; unsigned int algs_info_size; |
ad18cc9d0 crypto: omap-aes ... |
125 |
struct omap_aes_aead_algs *aead_algs_info; |
5b3d4d2e6 crypto: omap-aes ... |
126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
void (*trigger)(struct omap_aes_dev *dd, int length); u32 key_ofs; u32 iv_ofs; u32 ctrl_ofs; u32 data_ofs; u32 rev_ofs; u32 mask_ofs; u32 irq_enable_ofs; u32 irq_status_ofs; u32 dma_enable_in; u32 dma_enable_out; u32 dma_start; u32 major_mask; u32 major_shift; u32 minor_mask; u32 minor_shift; }; struct omap_aes_dev { struct list_head list; unsigned long phys_base; void __iomem *io_base; struct omap_aes_ctx *ctx; struct device *dev; unsigned long flags; int err; struct tasklet_struct done_task; |
ad18cc9d0 crypto: omap-aes ... |
158 159 |
struct aead_queue aead_queue; spinlock_t lock; |
5b3d4d2e6 crypto: omap-aes ... |
160 |
|
b3e3f0fe4 crypto: omap - sw... |
161 |
struct skcipher_request *req; |
ad18cc9d0 crypto: omap-aes ... |
162 |
struct aead_request *aead_req; |
5b3d4d2e6 crypto: omap-aes ... |
163 164 165 166 167 168 169 170 |
struct crypto_engine *engine; /* * total is used by PIO mode for book keeping so introduce * variable total_save as need it to calc page_order */ size_t total; size_t total_save; |
ad18cc9d0 crypto: omap-aes ... |
171 172 |
size_t assoc_len; size_t authsize; |
5b3d4d2e6 crypto: omap-aes ... |
173 174 175 176 177 |
struct scatterlist *in_sg; struct scatterlist *out_sg; /* Buffers for copying for unaligned cases */ |
ad18cc9d0 crypto: omap-aes ... |
178 |
struct scatterlist in_sgl[2]; |
5b3d4d2e6 crypto: omap-aes ... |
179 180 181 182 183 184 185 186 187 188 189 190 |
struct scatterlist out_sgl; struct scatterlist *orig_out; struct scatter_walk in_walk; struct scatter_walk out_walk; struct dma_chan *dma_lch_in; struct dma_chan *dma_lch_out; int in_sg_len; int out_sg_len; int pio_only; const struct omap_aes_pdata *pdata; }; |
d695bfd6f crypto: omap-aes ... |
191 192 193 |
u32 omap_aes_read(struct omap_aes_dev *dd, u32 offset); void omap_aes_write(struct omap_aes_dev *dd, u32 offset, u32 value); struct omap_aes_dev *omap_aes_find_dev(struct omap_aes_reqctx *rctx); |
ad18cc9d0 crypto: omap-aes ... |
194 195 196 197 198 199 |
int omap_aes_gcm_setkey(struct crypto_aead *tfm, const u8 *key, unsigned int keylen); int omap_aes_4106gcm_setkey(struct crypto_aead *tfm, const u8 *key, unsigned int keylen); int omap_aes_gcm_encrypt(struct aead_request *req); int omap_aes_gcm_decrypt(struct aead_request *req); |
12adf9d63 crypto: omap-aes-... |
200 |
int omap_aes_gcm_setauthsize(struct crypto_aead *tfm, unsigned int authsize); |
ad18cc9d0 crypto: omap-aes ... |
201 202 |
int omap_aes_4106gcm_encrypt(struct aead_request *req); int omap_aes_4106gcm_decrypt(struct aead_request *req); |
12adf9d63 crypto: omap-aes-... |
203 204 |
int omap_aes_4106gcm_setauthsize(struct crypto_aead *parent, unsigned int authsize); |
04a4616e6 crypto: omap-aes-... |
205 |
int omap_aes_gcm_cra_init(struct crypto_aead *tfm); |
d695bfd6f crypto: omap-aes ... |
206 207 208 |
int omap_aes_write_ctrl(struct omap_aes_dev *dd); int omap_aes_crypt_dma_start(struct omap_aes_dev *dd); int omap_aes_crypt_dma_stop(struct omap_aes_dev *dd); |
ad18cc9d0 crypto: omap-aes ... |
209 210 |
void omap_aes_gcm_dma_out_callback(void *data); void omap_aes_clear_copy_flags(struct omap_aes_dev *dd); |
d695bfd6f crypto: omap-aes ... |
211 |
|
5b3d4d2e6 crypto: omap-aes ... |
212 |
#endif |