1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 #ifndef _SAFE_SAFEREG_H_
32 #define _SAFE_SAFEREG_H_
33
34
35
36
37
38
39 #define SAFE_BAR 0x10
40
41 #define PCI_VENDOR_SAFENET 0x16ae
42
43
44 #define PCI_PRODUCT_SAFEXCEL 0x1141
45
46 #define SAFE_PE_CSR 0x0000
47 #define SAFE_PE_SRC 0x0004
48 #define SAFE_PE_DST 0x0008
49 #define SAFE_PE_SA 0x000c
50 #define SAFE_PE_LEN 0x0010
51 #define SAFE_PE_DMACFG 0x0040
52 #define SAFE_PE_DMASTAT 0x0044
53 #define SAFE_PE_PDRBASE 0x0048
54 #define SAFE_PE_RDRBASE 0x004c
55 #define SAFE_PE_RINGCFG 0x0050
56 #define SAFE_PE_RINGPOLL 0x0054
57 #define SAFE_PE_IRNGSTAT 0x0058
58 #define SAFE_PE_ERNGSTAT 0x005c
59 #define SAFE_PE_IOTHRESH 0x0060
60 #define SAFE_PE_GRNGBASE 0x0064
61 #define SAFE_PE_SRNGBASE 0x0068
62 #define SAFE_PE_PARTSIZE 0x006c
63 #define SAFE_PE_PARTCFG 0x0070
64 #define SAFE_CRYPTO_CTRL 0x0080
65 #define SAFE_DEVID 0x0084
66 #define SAFE_DEVINFO 0x0088
67 #define SAFE_HU_STAT 0x00a0
68 #define SAFE_HM_STAT 0x00a4
69 #define SAFE_HI_CLR 0x00a4
70 #define SAFE_HI_MASK 0x00a8
71 #define SAFE_HI_CFG 0x00ac
72 #define SAFE_HI_RD_DESCR 0x00b4
73 #define SAFE_HI_DESC_CNT 0x00b8
74 #define SAFE_DMA_ENDIAN 0x00c0
75 #define SAFE_DMA_SRCADDR 0x00c4
76 #define SAFE_DMA_DSTADDR 0x00c8
77 #define SAFE_DMA_STAT 0x00cc
78 #define SAFE_DMA_CFG 0x00d4
79 #define SAFE_ENDIAN 0x00e0
80 #define SAFE_RNG_OUT 0x0100
81 #define SAFE_RNG_STAT 0x0104
82 #define SAFE_RNG_CTRL 0x0108
83 #define SAFE_RNG_A 0x010c
84 #define SAFE_RNG_B 0x0110
85 #define SAFE_RNG_X_LO 0x0114
86 #define SAFE_RNG_X_MID 0x0118
87 #define SAFE_RNG_X_HI 0x011c
88 #define SAFE_RNG_X_CNTR 0x0120
89 #define SAFE_RNG_ALM_CNT 0x0124
90 #define SAFE_RNG_CNFG 0x0128
91 #define SAFE_RNG_LFSR1_LO 0x012c
92 #define SAFE_RNG_LFSR1_HI 0x0130
93 #define SAFE_RNG_LFSR2_LO 0x0134
94 #define SAFE_RNG_LFSR2_HI 0x0138
95 #define SAFE_PK_A_ADDR 0x0800
96 #define SAFE_PK_B_ADDR 0x0804
97 #define SAFE_PK_C_ADDR 0x0808
98 #define SAFE_PK_D_ADDR 0x080c
99 #define SAFE_PK_A_LEN 0x0810
100 #define SAFE_PK_B_LEN 0x0814
101 #define SAFE_PK_SHIFT 0x0818
102 #define SAFE_PK_FUNC 0x081c
103 #define SAFE_PK_RAM_START 0x1000
104 #define SAFE_PK_RAM_END 0x1fff
105
106 #define SAFE_PE_CSR_READY 0x00000001
107 #define SAFE_PE_CSR_DONE 0x00000002
108 #define SAFE_PE_CSR_LOADSA 0x00000004
109 #define SAFE_PE_CSR_HASHFINAL 0x00000010
110 #define SAFE_PE_CSR_SABUSID 0x000000c0
111 #define SAFE_PE_CSR_SAPCI 0x00000040
112 #define SAFE_PE_CSR_NXTHDR 0x0000ff00
113 #define SAFE_PE_CSR_FPAD 0x0000ff00
114 #define SAFE_PE_CSR_STATUS 0x00ff0000
115 #define SAFE_PE_CSR_AUTH_FAIL 0x00010000
116 #define SAFE_PE_CSR_PAD_FAIL 0x00020000
117 #define SAFE_PE_CSR_SEQ_FAIL 0x00040000
118 #define SAFE_PE_CSR_XERROR 0x00080000
119 #define SAFE_PE_CSR_XECODE 0x00f00000
120 #define SAFE_PE_CSR_XECODE_S 20
121 #define SAFE_PE_CSR_XECODE_BADCMD 0
122 #define SAFE_PE_CSR_XECODE_BADALG 1
123 #define SAFE_PE_CSR_XECODE_ALGDIS 2
124 #define SAFE_PE_CSR_XECODE_ZEROLEN 3
125 #define SAFE_PE_CSR_XECODE_DMAERR 4
126 #define SAFE_PE_CSR_XECODE_PIPEABORT 5
127 #define SAFE_PE_CSR_XECODE_BADSPI 6
128 #define SAFE_PE_CSR_XECODE_TIMEOUT 10
129 #define SAFE_PE_CSR_PAD 0xff000000
130 #define SAFE_PE_CSR_PAD_MIN 0x00000000
131 #define SAFE_PE_CSR_PAD_16 0x08000000
132 #define SAFE_PE_CSR_PAD_32 0x10000000
133 #define SAFE_PE_CSR_PAD_64 0x20000000
134 #define SAFE_PE_CSR_PAD_128 0x40000000
135 #define SAFE_PE_CSR_PAD_256 0x80000000
136
137
138
139
140
141
142
143
144 #define SAFE_PE_CSR_IS_DONE(_csr) \
145 (((_csr) & (SAFE_PE_CSR_READY | SAFE_PE_CSR_DONE)) == SAFE_PE_CSR_DONE)
146
147 #define SAFE_PE_LEN_LENGTH 0x000fffff
148 #define SAFE_PE_LEN_READY 0x00400000
149 #define SAFE_PE_LEN_DONE 0x00800000
150 #define SAFE_PE_LEN_BYPASS 0xff000000
151 #define SAFE_PE_LEN_BYPASS_S 24
152
153 #define SAFE_PE_LEN_IS_DONE(_len) \
154 (((_len) & (SAFE_PE_LEN_READY | SAFE_PE_LEN_DONE)) == SAFE_PE_LEN_DONE)
155
156
157 #define SAFE_INT_PE_CDONE 0x00000002
158 #define SAFE_INT_PE_DDONE 0x00000008
159 #define SAFE_INT_PE_ERROR 0x00000010
160 #define SAFE_INT_PE_ODONE 0x00000020
161
162 #define SAFE_HI_CFG_PULSE 0x00000001
163 #define SAFE_HI_CFG_LEVEL 0x00000000
164 #define SAFE_HI_CFG_AUTOCLR 0x00000002
165
166 #define SAFE_ENDIAN_TGT_PASS 0x00e40000
167 #define SAFE_ENDIAN_TGT_SWAB 0x001b0000
168 #define SAFE_ENDIAN_DMA_PASS 0x000000e4
169 #define SAFE_ENDIAN_DMA_SWAB 0x0000001b
170
171 #define SAFE_PE_DMACFG_PERESET 0x00000001
172 #define SAFE_PE_DMACFG_PDRRESET 0x00000002
173 #define SAFE_PE_DMACFG_SGRESET 0x00000004
174 #define SAFE_PE_DMACFG_FSENA 0x00000008
175 #define SAFE_PE_DMACFG_PEMODE 0x00000100
176 #define SAFE_PE_DMACFG_SAPREC 0x00000200
177 #define SAFE_PE_DMACFG_PKFOLL 0x00000400
178 #define SAFE_PE_DMACFG_GPRBID 0x00003000
179 #define SAFE_PE_DMACFG_GPRPCI 0x00001000
180 #define SAFE_PE_DMACFG_SPRBID 0x0000c000
181 #define SAFE_PE_DMACFG_SPRPCI 0x00004000
182 #define SAFE_PE_DMACFG_ESDESC 0x00010000
183 #define SAFE_PE_DMACFG_ESSA 0x00020000
184 #define SAFE_PE_DMACFG_ESPACKET 0x00040000
185 #define SAFE_PE_DMACFG_ESPDESC 0x00080000
186 #define SAFE_PE_DMACFG_NOPDRUP 0x00100000
187 #define SAFE_PD_EDMACFG_PCIMODE 0x01000000
188
189 #define SAFE_PE_DMASTAT_PEIDONE 0x00000001
190 #define SAFE_PE_DMASTAT_PEODONE 0x00000002
191 #define SAFE_PE_DMASTAT_ENCDONE 0x00000004
192 #define SAFE_PE_DMASTAT_IHDONE 0x00000008
193 #define SAFE_PE_DMASTAT_OHDONE 0x00000010
194 #define SAFE_PE_DMASTAT_PADFLT 0x00000020
195 #define SAFE_PE_DMASTAT_ICVFLT 0x00000040
196 #define SAFE_PE_DMASTAT_SPIMIS 0x00000080
197 #define SAFE_PE_DMASTAT_CRYPTO 0x00000100
198 #define SAFE_PE_DMASTAT_CQACT 0x00000200
199 #define SAFE_PE_DMASTAT_IRACT 0x00000400
200 #define SAFE_PE_DMASTAT_ORACT 0x00000800
201 #define SAFE_PE_DMASTAT_PEISIZE 0x003ff000
202 #define SAFE_PE_DMASTAT_PEOSIZE 0xffc00000
203
204 #define SAFE_PE_RINGCFG_SIZE 0x000003ff
205 #define SAFE_PE_RINGCFG_OFFSET 0xffff0000
206 #define SAFE_PE_RINGCFG_OFFSET_S 16
207
208 #define SAFE_PE_RINGPOLL_POLL 0x00000fff
209 #define SAFE_PE_RINGPOLL_RETRY 0x03ff0000
210 #define SAFE_PE_RINGPOLL_CONT 0x80000000
211
212 #define SAFE_PE_IRNGSTAT_CQAVAIL 0x00000001
213
214 #define SAFE_PE_ERNGSTAT_NEXT 0x03ff0000
215 #define SAFE_PE_ERNGSTAT_NEXT_S 16
216
217 #define SAFE_PE_IOTHRESH_INPUT 0x000003ff
218 #define SAFE_PE_IOTHRESH_OUTPUT 0x03ff0000
219
220 #define SAFE_PE_PARTCFG_SIZE 0x0000ffff
221 #define SAFE_PE_PARTCFG_GBURST 0x00030000
222 #define SAFE_PE_PARTCFG_GBURST_2 0x00000000
223 #define SAFE_PE_PARTCFG_GBURST_4 0x00010000
224 #define SAFE_PE_PARTCFG_GBURST_8 0x00020000
225 #define SAFE_PE_PARTCFG_GBURST_16 0x00030000
226 #define SAFE_PE_PARTCFG_SBURST 0x000c0000
227 #define SAFE_PE_PARTCFG_SBURST_2 0x00000000
228 #define SAFE_PE_PARTCFG_SBURST_4 0x00040000
229 #define SAFE_PE_PARTCFG_SBURST_8 0x00080000
230 #define SAFE_PE_PARTCFG_SBURST_16 0x000c0000
231
232 #define SAFE_PE_PARTSIZE_SCAT 0xffff0000
233 #define SAFE_PE_PARTSIZE_GATH 0x0000ffff
234
235 #define SAFE_CRYPTO_CTRL_3DES 0x00000001
236 #define SAFE_CRYPTO_CTRL_PKEY 0x00010000
237 #define SAFE_CRYPTO_CTRL_RNG 0x00020000
238
239 #define SAFE_DEVINFO_REV_MIN 0x0000000f
240 #define SAFE_DEVINFO_REV_MAJ 0x000000f0
241 #define SAFE_DEVINFO_REV_MAJ_S 4
242 #define SAFE_DEVINFO_DES 0x00000100
243 #define SAFE_DEVINFO_ARC4 0x00000200
244 #define SAFE_DEVINFO_AES 0x00000400
245 #define SAFE_DEVINFO_MD5 0x00001000
246 #define SAFE_DEVINFO_SHA1 0x00002000
247 #define SAFE_DEVINFO_RIPEMD 0x00004000
248 #define SAFE_DEVINFO_DEFLATE 0x00010000
249 #define SAFE_DEVINFO_SARAM 0x00100000
250 #define SAFE_DEVINFO_EMIBUS 0x00200000
251 #define SAFE_DEVINFO_PKEY 0x00400000
252 #define SAFE_DEVINFO_RNG 0x00800000
253
254 #define SAFE_REV(_maj, _min) (((_maj) << SAFE_DEVINFO_REV_MAJ_S) | (_min))
255 #define SAFE_REV_MAJ(_chiprev) \
256 (((_chiprev) & SAFE_DEVINFO_REV_MAJ) >> SAFE_DEVINFO_REV_MAJ_S)
257 #define SAFE_REV_MIN(_chiprev) ((_chiprev) & SAFE_DEVINFO_REV_MIN)
258
259 #define SAFE_PK_FUNC_MULT 0x00000001
260 #define SAFE_PK_FUNC_SQUARE 0x00000004
261 #define SAFE_PK_FUNC_ADD 0x00000010
262 #define SAFE_PK_FUNC_SUB 0x00000020
263 #define SAFE_PK_FUNC_LSHIFT 0x00000040
264 #define SAFE_PK_FUNC_RSHIFT 0x00000080
265 #define SAFE_PK_FUNC_DIV 0x00000100
266 #define SAFE_PK_FUNC_CMP 0x00000400
267 #define SAFE_PK_FUNC_COPY 0x00000800
268 #define SAFE_PK_FUNC_EXP16 0x00002000
269 #define SAFE_PK_FUNC_EXP4 0x00004000
270 #define SAFE_PK_FUNC_RUN 0x00008000
271
272 #define SAFE_RNG_STAT_BUSY 0x00000001
273
274 #define SAFE_RNG_CTRL_PRE_LFSR 0x00000001
275 #define SAFE_RNG_CTRL_TST_MODE 0x00000002
276 #define SAFE_RNG_CTRL_TST_RUN 0x00000004
277 #define SAFE_RNG_CTRL_ENA_RING1 0x00000008
278 #define SAFE_RNG_CTRL_ENA_RING2 0x00000010
279 #define SAFE_RNG_CTRL_DIS_ALARM 0x00000020
280 #define SAFE_RNG_CTRL_TST_CLOCK 0x00000040
281 #define SAFE_RNG_CTRL_SHORTEN 0x00000080
282 #define SAFE_RNG_CTRL_TST_ALARM 0x00000100
283 #define SAFE_RNG_CTRL_RST_LFSR 0x00000200
284
285
286
287
288
289
290
291
292 struct safe_desc {
293 volatile u_int32_t d_csr;
294 volatile u_int32_t d_src;
295 volatile u_int32_t d_dst;
296 volatile u_int32_t d_sa;
297 volatile u_int32_t d_len;
298 };
299
300
301
302
303
304
305
306 struct safe_pdesc {
307 volatile u_int32_t pd_addr;
308 volatile u_int32_t pd_ctrl;
309 };
310
311 #define SAFE_PD_LEN_M 0xffff0000
312 #define SAFE_PD_LEN_S 16
313 #define SAFE_PD_READY 0x00000001
314 #define SAFE_PD_DONE 0x00000002
315
316
317
318
319
320 struct safe_sarec {
321 volatile u_int32_t sa_cmd0;
322 volatile u_int32_t sa_cmd1;
323 volatile u_int32_t sa_resv0;
324 volatile u_int32_t sa_resv1;
325 volatile u_int32_t sa_key[8];
326 volatile u_int32_t sa_indigest[5];
327 volatile u_int32_t sa_outdigest[5];
328 volatile u_int32_t sa_spi;
329 volatile u_int32_t sa_seqnum;
330 volatile u_int32_t sa_seqmask[2];
331 volatile u_int32_t sa_resv2;
332 volatile u_int32_t sa_staterec;
333 volatile u_int32_t sa_resv3[2];
334 volatile u_int32_t sa_samgmt0;
335 volatile u_int32_t sa_samgmt1;
336 };
337
338 #define SAFE_SA_CMD0_OP 0x00000007
339 #define SAFE_SA_CMD0_OP_CRYPT 0x00000000
340 #define SAFE_SA_CMD0_OP_BOTH 0x00000001
341 #define SAFE_SA_CMD0_OP_HASH 0x00000003
342 #define SAFE_SA_CMD0_OP_ESP 0x00000000
343 #define SAFE_SA_CMD0_OP_AH 0x00000001
344 #define SAFE_SA_CMD0_INBOUND 0x00000008
345 #define SAFE_SA_CMD0_OUTBOUND 0x00000000
346 #define SAFE_SA_CMD0_GROUP 0x00000030
347 #define SAFE_SA_CMD0_BASIC 0x00000000
348 #define SAFE_SA_CMD0_PROTO 0x00000010
349 #define SAFE_SA_CMD0_BUNDLE 0x00000020
350 #define SAFE_SA_CMD0_PAD 0x000000c0
351 #define SAFE_SA_CMD0_PAD_IPSEC 0x00000000
352 #define SAFE_SA_CMD0_PAD_PKCS7 0x00000040
353 #define SAFE_SA_CMD0_PAD_CONS 0x00000080
354 #define SAFE_SA_CMD0_PAD_ZERO 0x000000c0
355 #define SAFE_SA_CMD0_CRYPT_ALG 0x00000f00
356 #define SAFE_SA_CMD0_DES 0x00000000
357 #define SAFE_SA_CMD0_3DES 0x00000100
358 #define SAFE_SA_CMD0_AES 0x00000300
359 #define SAFE_SA_CMD0_CRYPT_NULL 0x00000f00
360 #define SAFE_SA_CMD0_HASH_ALG 0x0000f000
361 #define SAFE_SA_CMD0_MD5 0x00000000
362 #define SAFE_SA_CMD0_SHA1 0x00001000
363 #define SAFE_SA_CMD0_HASH_NULL 0x0000f000
364 #define SAFE_SA_CMD0_HDR_PROC 0x00080000
365 #define SAFE_SA_CMD0_IBUSID 0x00300000
366 #define SAFE_SA_CMD0_IPCI 0x00100000
367 #define SAFE_SA_CMD0_OBUSID 0x00c00000
368 #define SAFE_SA_CMD0_OPCI 0x00400000
369 #define SAFE_SA_CMD0_IVLD 0x03000000
370 #define SAFE_SA_CMD0_IVLD_NONE 0x00000000
371 #define SAFE_SA_CMD0_IVLD_IBUF 0x01000000
372 #define SAFE_SA_CMD0_IVLD_STATE 0x02000000
373 #define SAFE_SA_CMD0_HSLD 0x0c000000
374 #define SAFE_SA_CMD0_HSLD_SA 0x00000000
375 #define SAFE_SA_CMD0_HSLD_STATE 0x08000000
376 #define SAFE_SA_CMD0_HSLD_NONE 0x0c000000
377 #define SAFE_SA_CMD0_SAVEIV 0x10000000
378 #define SAFE_SA_CMD0_SAVEHASH 0x20000000
379 #define SAFE_SA_CMD0_IGATHER 0x40000000
380 #define SAFE_SA_CMD0_OSCATTER 0x80000000
381
382 #define SAFE_SA_CMD1_HDRCOPY 0x00000002
383 #define SAFE_SA_CMD1_PAYCOPY 0x00000004
384 #define SAFE_SA_CMD1_PADCOPY 0x00000008
385 #define SAFE_SA_CMD1_IPV4 0x00000000
386 #define SAFE_SA_CMD1_IPV6 0x00000010
387 #define SAFE_SA_CMD1_MUTABLE 0x00000020
388 #define SAFE_SA_CMD1_SRBUSID 0x000000c0
389 #define SAFE_SA_CMD1_SRPCI 0x00000040
390 #define SAFE_SA_CMD1_CRMODE 0x00000300
391 #define SAFE_SA_CMD1_ECB 0x00000000
392 #define SAFE_SA_CMD1_CBC 0x00000100
393 #define SAFE_SA_CMD1_OFB 0x00000200
394 #define SAFE_SA_CMD1_CFB 0x00000300
395 #define SAFE_SA_CMD1_CRFEEDBACK 0x00000c00
396 #define SAFE_SA_CMD1_64BIT 0x00000000
397 #define SAFE_SA_CMD1_8BIT 0x00000400
398 #define SAFE_SA_CMD1_1BIT 0x00000800
399 #define SAFE_SA_CMD1_128BIT 0x00000c00
400 #define SAFE_SA_CMD1_OPTIONS 0x00001000
401 #define SAFE_SA_CMD1_HMAC SAFE_SA_CMD1_OPTIONS
402 #define SAFE_SA_CMD1_SAREV1 0x00008000
403 #define SAFE_SA_CMD1_OFFSET 0x00ff0000
404 #define SAFE_SA_CMD1_OFFSET_S 16
405 #define SAFE_SA_CMD1_AESKEYLEN 0x0f000000
406 #define SAFE_SA_CMD1_AES128 0x02000000
407 #define SAFE_SA_CMD1_AES192 0x03000000
408 #define SAFE_SA_CMD1_AES256 0x04000000
409
410
411
412
413 struct safe_sastate {
414 volatile u_int32_t sa_saved_iv[4];
415 volatile u_int32_t sa_saved_hashbc;
416 volatile u_int32_t sa_saved_indigest[5];
417 };
418 #endif