]>
Commit | Line | Data |
---|---|---|
a23d80e0 HA |
1 | /* |
2 | * CAAM Protocol Data Block (PDB) definition header file | |
3 | * | |
4 | * Copyright 2008-2012 Freescale Semiconductor, Inc. | |
5 | * | |
6 | */ | |
7 | ||
8 | #ifndef CAAM_PDB_H | |
9 | #define CAAM_PDB_H | |
10 | ||
11 | /* | |
12 | * PDB- IPSec ESP Header Modification Options | |
13 | */ | |
14 | #define PDBHMO_ESP_DECAP_SHIFT 12 | |
15 | #define PDBHMO_ESP_ENCAP_SHIFT 4 | |
16 | /* | |
17 | * Encap and Decap - Decrement TTL (Hop Limit) - Based on the value of the | |
18 | * Options Byte IP version (IPvsn) field: | |
19 | * if IPv4, decrement the inner IP header TTL field (byte 8); | |
20 | * if IPv6 decrement the inner IP header Hop Limit field (byte 7). | |
21 | */ | |
22 | #define PDBHMO_ESP_DECAP_DEC_TTL (0x02 << PDBHMO_ESP_DECAP_SHIFT) | |
23 | #define PDBHMO_ESP_ENCAP_DEC_TTL (0x02 << PDBHMO_ESP_ENCAP_SHIFT) | |
24 | /* | |
25 | * Decap - DiffServ Copy - Copy the IPv4 TOS or IPv6 Traffic Class byte | |
26 | * from the outer IP header to the inner IP header. | |
27 | */ | |
28 | #define PDBHMO_ESP_DIFFSERV (0x01 << PDBHMO_ESP_DECAP_SHIFT) | |
29 | /* | |
30 | * Encap- Copy DF bit -if an IPv4 tunnel mode outer IP header is coming from | |
31 | * the PDB, copy the DF bit from the inner IP header to the outer IP header. | |
32 | */ | |
33 | #define PDBHMO_ESP_DFBIT (0x04 << PDBHMO_ESP_ENCAP_SHIFT) | |
34 | ||
35 | /* | |
36 | * PDB - IPSec ESP Encap/Decap Options | |
37 | */ | |
38 | #define PDBOPTS_ESP_ARSNONE 0x00 /* no antireplay window */ | |
39 | #define PDBOPTS_ESP_ARS32 0x40 /* 32-entry antireplay window */ | |
40 | #define PDBOPTS_ESP_ARS64 0xc0 /* 64-entry antireplay window */ | |
41 | #define PDBOPTS_ESP_IVSRC 0x20 /* IV comes from internal random gen */ | |
42 | #define PDBOPTS_ESP_ESN 0x10 /* extended sequence included */ | |
43 | #define PDBOPTS_ESP_OUTFMT 0x08 /* output only decapsulation (decap) */ | |
44 | #define PDBOPTS_ESP_IPHDRSRC 0x08 /* IP header comes from PDB (encap) */ | |
45 | #define PDBOPTS_ESP_INCIPHDR 0x04 /* Prepend IP header to output frame */ | |
46 | #define PDBOPTS_ESP_IPVSN 0x02 /* process IPv6 header */ | |
da64e358 | 47 | #define PDBOPTS_ESP_AOFL 0x04 /* adjust out frame len (decap, SEC>=5.3)*/ |
a23d80e0 HA |
48 | #define PDBOPTS_ESP_TUNNEL 0x01 /* tunnel mode next-header byte */ |
49 | #define PDBOPTS_ESP_IPV6 0x02 /* ip header version is V6 */ | |
50 | #define PDBOPTS_ESP_DIFFSERV 0x40 /* copy TOS/TC from inner iphdr */ | |
51 | #define PDBOPTS_ESP_UPDATE_CSUM 0x80 /* encap-update ip header checksum */ | |
52 | #define PDBOPTS_ESP_VERIFY_CSUM 0x20 /* decap-validate ip header checksum */ | |
53 | ||
54 | /* | |
55 | * General IPSec encap/decap PDB definitions | |
56 | */ | |
57 | struct ipsec_encap_cbc { | |
58 | u32 iv[4]; | |
59 | }; | |
60 | ||
61 | struct ipsec_encap_ctr { | |
62 | u32 ctr_nonce; | |
63 | u32 ctr_initial; | |
64 | u32 iv[2]; | |
65 | }; | |
66 | ||
67 | struct ipsec_encap_ccm { | |
68 | u32 salt; /* lower 24 bits */ | |
69 | u8 b0_flags; | |
70 | u8 ctr_flags; | |
71 | u16 ctr_initial; | |
72 | u32 iv[2]; | |
73 | }; | |
74 | ||
75 | struct ipsec_encap_gcm { | |
76 | u32 salt; /* lower 24 bits */ | |
77 | u32 rsvd1; | |
78 | u32 iv[2]; | |
79 | }; | |
80 | ||
81 | struct ipsec_encap_pdb { | |
82 | u8 hmo_rsvd; | |
83 | u8 ip_nh; | |
84 | u8 ip_nh_offset; | |
85 | u8 options; | |
86 | u32 seq_num_ext_hi; | |
87 | u32 seq_num; | |
88 | union { | |
89 | struct ipsec_encap_cbc cbc; | |
90 | struct ipsec_encap_ctr ctr; | |
91 | struct ipsec_encap_ccm ccm; | |
92 | struct ipsec_encap_gcm gcm; | |
93 | }; | |
94 | u32 spi; | |
95 | u16 rsvd1; | |
96 | u16 ip_hdr_len; | |
97 | u32 ip_hdr[0]; /* optional IP Header content */ | |
98 | }; | |
99 | ||
100 | struct ipsec_decap_cbc { | |
101 | u32 rsvd[2]; | |
102 | }; | |
103 | ||
104 | struct ipsec_decap_ctr { | |
105 | u32 salt; | |
106 | u32 ctr_initial; | |
107 | }; | |
108 | ||
109 | struct ipsec_decap_ccm { | |
110 | u32 salt; | |
111 | u8 iv_flags; | |
112 | u8 ctr_flags; | |
113 | u16 ctr_initial; | |
114 | }; | |
115 | ||
116 | struct ipsec_decap_gcm { | |
117 | u32 salt; | |
118 | u32 resvd; | |
119 | }; | |
120 | ||
121 | struct ipsec_decap_pdb { | |
122 | u16 hmo_ip_hdr_len; | |
123 | u8 ip_nh_offset; | |
124 | u8 options; | |
125 | union { | |
126 | struct ipsec_decap_cbc cbc; | |
127 | struct ipsec_decap_ctr ctr; | |
128 | struct ipsec_decap_ccm ccm; | |
129 | struct ipsec_decap_gcm gcm; | |
130 | }; | |
131 | u32 seq_num_ext_hi; | |
132 | u32 seq_num; | |
133 | u32 anti_replay[2]; | |
134 | u32 end_index[0]; | |
135 | }; | |
136 | ||
137 | /* | |
138 | * IPSec ESP Datapath Protocol Override Register (DPOVRD) | |
139 | */ | |
140 | struct ipsec_deco_dpovrd { | |
141 | #define IPSEC_ENCAP_DECO_DPOVRD_USE 0x80 | |
142 | u8 ovrd_ecn; | |
143 | u8 ip_hdr_len; | |
144 | u8 nh_offset; | |
145 | u8 next_header; /* reserved if decap */ | |
146 | }; | |
147 | ||
148 | /* | |
149 | * IEEE 802.11i WiFi Protocol Data Block | |
150 | */ | |
151 | #define WIFI_PDBOPTS_FCS 0x01 | |
152 | #define WIFI_PDBOPTS_AR 0x40 | |
153 | ||
154 | struct wifi_encap_pdb { | |
155 | u16 mac_hdr_len; | |
156 | u8 rsvd; | |
157 | u8 options; | |
158 | u8 iv_flags; | |
159 | u8 pri; | |
160 | u16 pn1; | |
161 | u32 pn2; | |
162 | u16 frm_ctrl_mask; | |
163 | u16 seq_ctrl_mask; | |
164 | u8 rsvd1[2]; | |
165 | u8 cnst; | |
166 | u8 key_id; | |
167 | u8 ctr_flags; | |
168 | u8 rsvd2; | |
169 | u16 ctr_init; | |
170 | }; | |
171 | ||
172 | struct wifi_decap_pdb { | |
173 | u16 mac_hdr_len; | |
174 | u8 rsvd; | |
175 | u8 options; | |
176 | u8 iv_flags; | |
177 | u8 pri; | |
178 | u16 pn1; | |
179 | u32 pn2; | |
180 | u16 frm_ctrl_mask; | |
181 | u16 seq_ctrl_mask; | |
182 | u8 rsvd1[4]; | |
183 | u8 ctr_flags; | |
184 | u8 rsvd2; | |
185 | u16 ctr_init; | |
186 | }; | |
187 | ||
188 | /* | |
189 | * IEEE 802.16 WiMAX Protocol Data Block | |
190 | */ | |
191 | #define WIMAX_PDBOPTS_FCS 0x01 | |
192 | #define WIMAX_PDBOPTS_AR 0x40 /* decap only */ | |
193 | ||
194 | struct wimax_encap_pdb { | |
195 | u8 rsvd[3]; | |
196 | u8 options; | |
197 | u32 nonce; | |
198 | u8 b0_flags; | |
199 | u8 ctr_flags; | |
200 | u16 ctr_init; | |
201 | /* begin DECO writeback region */ | |
202 | u32 pn; | |
203 | /* end DECO writeback region */ | |
204 | }; | |
205 | ||
206 | struct wimax_decap_pdb { | |
207 | u8 rsvd[3]; | |
208 | u8 options; | |
209 | u32 nonce; | |
210 | u8 iv_flags; | |
211 | u8 ctr_flags; | |
212 | u16 ctr_init; | |
213 | /* begin DECO writeback region */ | |
214 | u32 pn; | |
215 | u8 rsvd1[2]; | |
216 | u16 antireplay_len; | |
217 | u64 antireplay_scorecard; | |
218 | /* end DECO writeback region */ | |
219 | }; | |
220 | ||
221 | /* | |
222 | * IEEE 801.AE MacSEC Protocol Data Block | |
223 | */ | |
224 | #define MACSEC_PDBOPTS_FCS 0x01 | |
225 | #define MACSEC_PDBOPTS_AR 0x40 /* used in decap only */ | |
226 | ||
227 | struct macsec_encap_pdb { | |
228 | u16 aad_len; | |
229 | u8 rsvd; | |
230 | u8 options; | |
231 | u64 sci; | |
232 | u16 ethertype; | |
233 | u8 tci_an; | |
234 | u8 rsvd1; | |
235 | /* begin DECO writeback region */ | |
236 | u32 pn; | |
237 | /* end DECO writeback region */ | |
238 | }; | |
239 | ||
240 | struct macsec_decap_pdb { | |
241 | u16 aad_len; | |
242 | u8 rsvd; | |
243 | u8 options; | |
244 | u64 sci; | |
245 | u8 rsvd1[3]; | |
246 | /* begin DECO writeback region */ | |
247 | u8 antireplay_len; | |
248 | u32 pn; | |
249 | u64 antireplay_scorecard; | |
250 | /* end DECO writeback region */ | |
251 | }; | |
252 | ||
253 | /* | |
254 | * SSL/TLS/DTLS Protocol Data Blocks | |
255 | */ | |
256 | ||
257 | #define TLS_PDBOPTS_ARS32 0x40 | |
258 | #define TLS_PDBOPTS_ARS64 0xc0 | |
259 | #define TLS_PDBOPTS_OUTFMT 0x08 | |
260 | #define TLS_PDBOPTS_IV_WRTBK 0x02 /* 1.1/1.2/DTLS only */ | |
261 | #define TLS_PDBOPTS_EXP_RND_IV 0x01 /* 1.1/1.2/DTLS only */ | |
262 | ||
263 | struct tls_block_encap_pdb { | |
264 | u8 type; | |
265 | u8 version[2]; | |
266 | u8 options; | |
267 | u64 seq_num; | |
268 | u32 iv[4]; | |
269 | }; | |
270 | ||
271 | struct tls_stream_encap_pdb { | |
272 | u8 type; | |
273 | u8 version[2]; | |
274 | u8 options; | |
275 | u64 seq_num; | |
276 | u8 i; | |
277 | u8 j; | |
278 | u8 rsvd1[2]; | |
279 | }; | |
280 | ||
281 | struct dtls_block_encap_pdb { | |
282 | u8 type; | |
283 | u8 version[2]; | |
284 | u8 options; | |
285 | u16 epoch; | |
286 | u16 seq_num[3]; | |
287 | u32 iv[4]; | |
288 | }; | |
289 | ||
290 | struct tls_block_decap_pdb { | |
291 | u8 rsvd[3]; | |
292 | u8 options; | |
293 | u64 seq_num; | |
294 | u32 iv[4]; | |
295 | }; | |
296 | ||
297 | struct tls_stream_decap_pdb { | |
298 | u8 rsvd[3]; | |
299 | u8 options; | |
300 | u64 seq_num; | |
301 | u8 i; | |
302 | u8 j; | |
303 | u8 rsvd1[2]; | |
304 | }; | |
305 | ||
306 | struct dtls_block_decap_pdb { | |
307 | u8 rsvd[3]; | |
308 | u8 options; | |
309 | u16 epoch; | |
310 | u16 seq_num[3]; | |
311 | u32 iv[4]; | |
312 | u64 antireplay_scorecard; | |
313 | }; | |
314 | ||
315 | /* | |
316 | * SRTP Protocol Data Blocks | |
317 | */ | |
318 | #define SRTP_PDBOPTS_MKI 0x08 | |
319 | #define SRTP_PDBOPTS_AR 0x40 | |
320 | ||
321 | struct srtp_encap_pdb { | |
322 | u8 x_len; | |
323 | u8 mki_len; | |
324 | u8 n_tag; | |
325 | u8 options; | |
326 | u32 cnst0; | |
327 | u8 rsvd[2]; | |
328 | u16 cnst1; | |
329 | u16 salt[7]; | |
330 | u16 cnst2; | |
331 | u32 rsvd1; | |
332 | u32 roc; | |
333 | u32 opt_mki; | |
334 | }; | |
335 | ||
336 | struct srtp_decap_pdb { | |
337 | u8 x_len; | |
338 | u8 mki_len; | |
339 | u8 n_tag; | |
340 | u8 options; | |
341 | u32 cnst0; | |
342 | u8 rsvd[2]; | |
343 | u16 cnst1; | |
344 | u16 salt[7]; | |
345 | u16 cnst2; | |
346 | u16 rsvd1; | |
347 | u16 seq_num; | |
348 | u32 roc; | |
349 | u64 antireplay_scorecard; | |
350 | }; | |
351 | ||
352 | /* | |
353 | * DSA/ECDSA Protocol Data Blocks | |
354 | * Two of these exist: DSA-SIGN, and DSA-VERIFY. They are similar | |
355 | * except for the treatment of "w" for verify, "s" for sign, | |
356 | * and the placement of "a,b". | |
357 | */ | |
358 | #define DSA_PDB_SGF_SHIFT 24 | |
359 | #define DSA_PDB_SGF_MASK (0xff << DSA_PDB_SGF_SHIFT) | |
360 | #define DSA_PDB_SGF_Q (0x80 << DSA_PDB_SGF_SHIFT) | |
361 | #define DSA_PDB_SGF_R (0x40 << DSA_PDB_SGF_SHIFT) | |
362 | #define DSA_PDB_SGF_G (0x20 << DSA_PDB_SGF_SHIFT) | |
363 | #define DSA_PDB_SGF_W (0x10 << DSA_PDB_SGF_SHIFT) | |
364 | #define DSA_PDB_SGF_S (0x10 << DSA_PDB_SGF_SHIFT) | |
365 | #define DSA_PDB_SGF_F (0x08 << DSA_PDB_SGF_SHIFT) | |
366 | #define DSA_PDB_SGF_C (0x04 << DSA_PDB_SGF_SHIFT) | |
367 | #define DSA_PDB_SGF_D (0x02 << DSA_PDB_SGF_SHIFT) | |
368 | #define DSA_PDB_SGF_AB_SIGN (0x02 << DSA_PDB_SGF_SHIFT) | |
369 | #define DSA_PDB_SGF_AB_VERIFY (0x01 << DSA_PDB_SGF_SHIFT) | |
370 | ||
371 | #define DSA_PDB_L_SHIFT 7 | |
372 | #define DSA_PDB_L_MASK (0x3ff << DSA_PDB_L_SHIFT) | |
373 | ||
374 | #define DSA_PDB_N_MASK 0x7f | |
375 | ||
376 | struct dsa_sign_pdb { | |
377 | u32 sgf_ln; /* Use DSA_PDB_ defintions per above */ | |
378 | u8 *q; | |
379 | u8 *r; | |
380 | u8 *g; /* or Gx,y */ | |
381 | u8 *s; | |
382 | u8 *f; | |
383 | u8 *c; | |
384 | u8 *d; | |
385 | u8 *ab; /* ECC only */ | |
386 | u8 *u; | |
387 | }; | |
388 | ||
389 | struct dsa_verify_pdb { | |
390 | u32 sgf_ln; | |
391 | u8 *q; | |
392 | u8 *r; | |
393 | u8 *g; /* or Gx,y */ | |
394 | u8 *w; /* or Wx,y */ | |
395 | u8 *f; | |
396 | u8 *c; | |
397 | u8 *d; | |
398 | u8 *tmp; /* temporary data block */ | |
399 | u8 *ab; /* only used if ECC processing */ | |
400 | }; | |
401 | ||
402 | #endif |