diff options
| author | Hemant Agrawal <hemant@freescale.com> | 2012-06-22 20:42:39 -0400 |
|---|---|---|
| committer | Herbert Xu <herbert@gondor.apana.org.au> | 2012-06-27 02:42:04 -0400 |
| commit | a23d80e0b77314cc863a075796bc2b6d5245ba60 (patch) | |
| tree | 3be0c5e038dcc3d4249eb84ccb6c4d8cf0c4077b /drivers/crypto | |
| parent | 991c569c5df68609b24a0aba5e5fd4879225c4cf (diff) | |
crypto: caam - add PDB (Protocol Descriptor Block) definitions
Add a PDB header file to support building protocol descriptors.
Signed-off-by: Steve Cornelius <sec@pobox.com>
Signed-off-by: Hemant Agrawal <hemant@freescale.com>
Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'drivers/crypto')
| -rw-r--r-- | drivers/crypto/caam/desc.h | 16 | ||||
| -rw-r--r-- | drivers/crypto/caam/pdb.h | 401 |
2 files changed, 401 insertions, 16 deletions
diff --git a/drivers/crypto/caam/desc.h b/drivers/crypto/caam/desc.h index a17c2958dab1..af25e76c5f7c 100644 --- a/drivers/crypto/caam/desc.h +++ b/drivers/crypto/caam/desc.h | |||
| @@ -1585,20 +1585,4 @@ | |||
| 1585 | #define NFIFOENTRY_PLEN_SHIFT 0 | 1585 | #define NFIFOENTRY_PLEN_SHIFT 0 |
| 1586 | #define NFIFOENTRY_PLEN_MASK (0xFF << NFIFOENTRY_PLEN_SHIFT) | 1586 | #define NFIFOENTRY_PLEN_MASK (0xFF << NFIFOENTRY_PLEN_SHIFT) |
| 1587 | 1587 | ||
| 1588 | /* | ||
| 1589 | * PDB internal definitions | ||
| 1590 | */ | ||
| 1591 | |||
| 1592 | /* IPSec ESP CBC Encap/Decap Options */ | ||
| 1593 | #define PDBOPTS_ESPCBC_ARSNONE 0x00 /* no antireplay window */ | ||
| 1594 | #define PDBOPTS_ESPCBC_ARS32 0x40 /* 32-entry antireplay window */ | ||
| 1595 | #define PDBOPTS_ESPCBC_ARS64 0xc0 /* 64-entry antireplay window */ | ||
| 1596 | #define PDBOPTS_ESPCBC_IVSRC 0x20 /* IV comes from internal random gen */ | ||
| 1597 | #define PDBOPTS_ESPCBC_ESN 0x10 /* extended sequence included */ | ||
| 1598 | #define PDBOPTS_ESPCBC_OUTFMT 0x08 /* output only decapsulation (decap) */ | ||
| 1599 | #define PDBOPTS_ESPCBC_IPHDRSRC 0x08 /* IP header comes from PDB (encap) */ | ||
| 1600 | #define PDBOPTS_ESPCBC_INCIPHDR 0x04 /* Prepend IP header to output frame */ | ||
| 1601 | #define PDBOPTS_ESPCBC_IPVSN 0x02 /* process IPv6 header */ | ||
| 1602 | #define PDBOPTS_ESPCBC_TUNNEL 0x01 /* tunnel mode next-header byte */ | ||
| 1603 | |||
| 1604 | #endif /* DESC_H */ | 1588 | #endif /* DESC_H */ |
diff --git a/drivers/crypto/caam/pdb.h b/drivers/crypto/caam/pdb.h new file mode 100644 index 000000000000..62950d22ac13 --- /dev/null +++ b/drivers/crypto/caam/pdb.h | |||
| @@ -0,0 +1,401 @@ | |||
| 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 */ | ||
| 47 | #define PDBOPTS_ESP_TUNNEL 0x01 /* tunnel mode next-header byte */ | ||
| 48 | #define PDBOPTS_ESP_IPV6 0x02 /* ip header version is V6 */ | ||
| 49 | #define PDBOPTS_ESP_DIFFSERV 0x40 /* copy TOS/TC from inner iphdr */ | ||
| 50 | #define PDBOPTS_ESP_UPDATE_CSUM 0x80 /* encap-update ip header checksum */ | ||
| 51 | #define PDBOPTS_ESP_VERIFY_CSUM 0x20 /* decap-validate ip header checksum */ | ||
| 52 | |||
| 53 | /* | ||
| 54 | * General IPSec encap/decap PDB definitions | ||
| 55 | */ | ||
| 56 | struct ipsec_encap_cbc { | ||
| 57 | u32 iv[4]; | ||
| 58 | }; | ||
| 59 | |||
| 60 | struct ipsec_encap_ctr { | ||
| 61 | u32 ctr_nonce; | ||
| 62 | u32 ctr_initial; | ||
| 63 | u32 iv[2]; | ||
| 64 | }; | ||
| 65 | |||
| 66 | struct ipsec_encap_ccm { | ||
| 67 | u32 salt; /* lower 24 bits */ | ||
| 68 | u8 b0_flags; | ||
| 69 | u8 ctr_flags; | ||
| 70 | u16 ctr_initial; | ||
| 71 | u32 iv[2]; | ||
| 72 | }; | ||
| 73 | |||
| 74 | struct ipsec_encap_gcm { | ||
| 75 | u32 salt; /* lower 24 bits */ | ||
| 76 | u32 rsvd1; | ||
| 77 | u32 iv[2]; | ||
| 78 | }; | ||
| 79 | |||
| 80 | struct ipsec_encap_pdb { | ||
| 81 | u8 hmo_rsvd; | ||
| 82 | u8 ip_nh; | ||
| 83 | u8 ip_nh_offset; | ||
| 84 | u8 options; | ||
| 85 | u32 seq_num_ext_hi; | ||
| 86 | u32 seq_num; | ||
| 87 | union { | ||
| 88 | struct ipsec_encap_cbc cbc; | ||
| 89 | struct ipsec_encap_ctr ctr; | ||
| 90 | struct ipsec_encap_ccm ccm; | ||
| 91 | struct ipsec_encap_gcm gcm; | ||
| 92 | }; | ||
| 93 | u32 spi; | ||
| 94 | u16 rsvd1; | ||
| 95 | u16 ip_hdr_len; | ||
| 96 | u32 ip_hdr[0]; /* optional IP Header content */ | ||
| 97 | }; | ||
| 98 | |||
| 99 | struct ipsec_decap_cbc { | ||
| 100 | u32 rsvd[2]; | ||
| 101 | }; | ||
| 102 | |||
| 103 | struct ipsec_decap_ctr { | ||
| 104 | u32 salt; | ||
| 105 | u32 ctr_initial; | ||
| 106 | }; | ||
| 107 | |||
| 108 | struct ipsec_decap_ccm { | ||
| 109 | u32 salt; | ||
| 110 | u8 iv_flags; | ||
| 111 | u8 ctr_flags; | ||
| 112 | u16 ctr_initial; | ||
| 113 | }; | ||
| 114 | |||
| 115 | struct ipsec_decap_gcm { | ||
| 116 | u32 salt; | ||
| 117 | u32 resvd; | ||
| 118 | }; | ||
| 119 | |||
| 120 | struct ipsec_decap_pdb { | ||
| 121 | u16 hmo_ip_hdr_len; | ||
| 122 | u8 ip_nh_offset; | ||
| 123 | u8 options; | ||
| 124 | union { | ||
| 125 | struct ipsec_decap_cbc cbc; | ||
| 126 | struct ipsec_decap_ctr ctr; | ||
| 127 | struct ipsec_decap_ccm ccm; | ||
| 128 | struct ipsec_decap_gcm gcm; | ||
| 129 | }; | ||
| 130 | u32 seq_num_ext_hi; | ||
| 131 | u32 seq_num; | ||
| 132 | u32 anti_replay[2]; | ||
| 133 | u32 end_index[0]; | ||
| 134 | }; | ||
| 135 | |||
| 136 | /* | ||
| 137 | * IPSec ESP Datapath Protocol Override Register (DPOVRD) | ||
| 138 | */ | ||
| 139 | struct ipsec_deco_dpovrd { | ||
| 140 | #define IPSEC_ENCAP_DECO_DPOVRD_USE 0x80 | ||
| 141 | u8 ovrd_ecn; | ||
| 142 | u8 ip_hdr_len; | ||
| 143 | u8 nh_offset; | ||
| 144 | u8 next_header; /* reserved if decap */ | ||
| 145 | }; | ||
| 146 | |||
| 147 | /* | ||
| 148 | * IEEE 802.11i WiFi Protocol Data Block | ||
| 149 | */ | ||
| 150 | #define WIFI_PDBOPTS_FCS 0x01 | ||
| 151 | #define WIFI_PDBOPTS_AR 0x40 | ||
| 152 | |||
| 153 | struct wifi_encap_pdb { | ||
| 154 | u16 mac_hdr_len; | ||
| 155 | u8 rsvd; | ||
| 156 | u8 options; | ||
| 157 | u8 iv_flags; | ||
| 158 | u8 pri; | ||
| 159 | u16 pn1; | ||
| 160 | u32 pn2; | ||
| 161 | u16 frm_ctrl_mask; | ||
| 162 | u16 seq_ctrl_mask; | ||
| 163 | u8 rsvd1[2]; | ||
| 164 | u8 cnst; | ||
| 165 | u8 key_id; | ||
| 166 | u8 ctr_flags; | ||
| 167 | u8 rsvd2; | ||
| 168 | u16 ctr_init; | ||
| 169 | }; | ||
| 170 | |||
| 171 | struct wifi_decap_pdb { | ||
| 172 | u16 mac_hdr_len; | ||
| 173 | u8 rsvd; | ||
| 174 | u8 options; | ||
| 175 | u8 iv_flags; | ||
| 176 | u8 pri; | ||
| 177 | u16 pn1; | ||
| 178 | u32 pn2; | ||
| 179 | u16 frm_ctrl_mask; | ||
| 180 | u16 seq_ctrl_mask; | ||
| 181 | u8 rsvd1[4]; | ||
| 182 | u8 ctr_flags; | ||
| 183 | u8 rsvd2; | ||
| 184 | u16 ctr_init; | ||
| 185 | }; | ||
| 186 | |||
| 187 | /* | ||
| 188 | * IEEE 802.16 WiMAX Protocol Data Block | ||
| 189 | */ | ||
| 190 | #define WIMAX_PDBOPTS_FCS 0x01 | ||
| 191 | #define WIMAX_PDBOPTS_AR 0x40 /* decap only */ | ||
| 192 | |||
| 193 | struct wimax_encap_pdb { | ||
| 194 | u8 rsvd[3]; | ||
| 195 | u8 options; | ||
| 196 | u32 nonce; | ||
| 197 | u8 b0_flags; | ||
| 198 | u8 ctr_flags; | ||
| 199 | u16 ctr_init; | ||
| 200 | /* begin DECO writeback region */ | ||
| 201 | u32 pn; | ||
| 202 | /* end DECO writeback region */ | ||
| 203 | }; | ||
| 204 | |||
| 205 | struct wimax_decap_pdb { | ||
| 206 | u8 rsvd[3]; | ||
| 207 | u8 options; | ||
| 208 | u32 nonce; | ||
| 209 | u8 iv_flags; | ||
| 210 | u8 ctr_flags; | ||
| 211 | u16 ctr_init; | ||
| 212 | /* begin DECO writeback region */ | ||
| 213 | u32 pn; | ||
| 214 | u8 rsvd1[2]; | ||
| 215 | u16 antireplay_len; | ||
| 216 | u64 antireplay_scorecard; | ||
| 217 | /* end DECO writeback region */ | ||
| 218 | }; | ||
| 219 | |||
| 220 | /* | ||
| 221 | * IEEE 801.AE MacSEC Protocol Data Block | ||
| 222 | */ | ||
| 223 | #define MACSEC_PDBOPTS_FCS 0x01 | ||
| 224 | #define MACSEC_PDBOPTS_AR 0x40 /* used in decap only */ | ||
| 225 | |||
| 226 | struct macsec_encap_pdb { | ||
| 227 | u16 aad_len; | ||
| 228 | u8 rsvd; | ||
| 229 | u8 options; | ||
| 230 | u64 sci; | ||
| 231 | u16 ethertype; | ||
| 232 | u8 tci_an; | ||
| 233 | u8 rsvd1; | ||
| 234 | /* begin DECO writeback region */ | ||
| 235 | u32 pn; | ||
| 236 | /* end DECO writeback region */ | ||
| 237 | }; | ||
| 238 | |||
| 239 | struct macsec_decap_pdb { | ||
| 240 | u16 aad_len; | ||
| 241 | u8 rsvd; | ||
| 242 | u8 options; | ||
| 243 | u64 sci; | ||
| 244 | u8 rsvd1[3]; | ||
| 245 | /* begin DECO writeback region */ | ||
| 246 | u8 antireplay_len; | ||
| 247 | u32 pn; | ||
| 248 | u64 antireplay_scorecard; | ||
| 249 | /* end DECO writeback region */ | ||
| 250 | }; | ||
| 251 | |||
| 252 | /* | ||
| 253 | * SSL/TLS/DTLS Protocol Data Blocks | ||
| 254 | */ | ||
| 255 | |||
| 256 | #define TLS_PDBOPTS_ARS32 0x40 | ||
| 257 | #define TLS_PDBOPTS_ARS64 0xc0 | ||
| 258 | #define TLS_PDBOPTS_OUTFMT 0x08 | ||
| 259 | #define TLS_PDBOPTS_IV_WRTBK 0x02 /* 1.1/1.2/DTLS only */ | ||
| 260 | #define TLS_PDBOPTS_EXP_RND_IV 0x01 /* 1.1/1.2/DTLS only */ | ||
| 261 | |||
| 262 | struct tls_block_encap_pdb { | ||
| 263 | u8 type; | ||
| 264 | u8 version[2]; | ||
| 265 | u8 options; | ||
| 266 | u64 seq_num; | ||
| 267 | u32 iv[4]; | ||
| 268 | }; | ||
| 269 | |||
| 270 | struct tls_stream_encap_pdb { | ||
| 271 | u8 type; | ||
| 272 | u8 version[2]; | ||
| 273 | u8 options; | ||
| 274 | u64 seq_num; | ||
| 275 | u8 i; | ||
| 276 | u8 j; | ||
| 277 | u8 rsvd1[2]; | ||
| 278 | }; | ||
| 279 | |||
| 280 | struct dtls_block_encap_pdb { | ||
| 281 | u8 type; | ||
| 282 | u8 version[2]; | ||
| 283 | u8 options; | ||
| 284 | u16 epoch; | ||
| 285 | u16 seq_num[3]; | ||
| 286 | u32 iv[4]; | ||
| 287 | }; | ||
| 288 | |||
| 289 | struct tls_block_decap_pdb { | ||
| 290 | u8 rsvd[3]; | ||
| 291 | u8 options; | ||
| 292 | u64 seq_num; | ||
| 293 | u32 iv[4]; | ||
| 294 | }; | ||
| 295 | |||
| 296 | struct tls_stream_decap_pdb { | ||
| 297 | u8 rsvd[3]; | ||
| 298 | u8 options; | ||
| 299 | u64 seq_num; | ||
| 300 | u8 i; | ||
| 301 | u8 j; | ||
| 302 | u8 rsvd1[2]; | ||
| 303 | }; | ||
| 304 | |||
| 305 | struct dtls_block_decap_pdb { | ||
| 306 | u8 rsvd[3]; | ||
| 307 | u8 options; | ||
| 308 | u16 epoch; | ||
| 309 | u16 seq_num[3]; | ||
| 310 | u32 iv[4]; | ||
| 311 | u64 antireplay_scorecard; | ||
| 312 | }; | ||
| 313 | |||
| 314 | /* | ||
| 315 | * SRTP Protocol Data Blocks | ||
| 316 | */ | ||
| 317 | #define SRTP_PDBOPTS_MKI 0x08 | ||
| 318 | #define SRTP_PDBOPTS_AR 0x40 | ||
| 319 | |||
| 320 | struct srtp_encap_pdb { | ||
| 321 | u8 x_len; | ||
| 322 | u8 mki_len; | ||
| 323 | u8 n_tag; | ||
| 324 | u8 options; | ||
| 325 | u32 cnst0; | ||
| 326 | u8 rsvd[2]; | ||
| 327 | u16 cnst1; | ||
| 328 | u16 salt[7]; | ||
| 329 | u16 cnst2; | ||
| 330 | u32 rsvd1; | ||
| 331 | u32 roc; | ||
| 332 | u32 opt_mki; | ||
| 333 | }; | ||
| 334 | |||
| 335 | struct srtp_decap_pdb { | ||
| 336 | u8 x_len; | ||
| 337 | u8 mki_len; | ||
| 338 | u8 n_tag; | ||
| 339 | u8 options; | ||
| 340 | u32 cnst0; | ||
| 341 | u8 rsvd[2]; | ||
| 342 | u16 cnst1; | ||
| 343 | u16 salt[7]; | ||
| 344 | u16 cnst2; | ||
| 345 | u16 rsvd1; | ||
| 346 | u16 seq_num; | ||
| 347 | u32 roc; | ||
| 348 | u64 antireplay_scorecard; | ||
| 349 | }; | ||
| 350 | |||
| 351 | /* | ||
| 352 | * DSA/ECDSA Protocol Data Blocks | ||
| 353 | * Two of these exist: DSA-SIGN, and DSA-VERIFY. They are similar | ||
| 354 | * except for the treatment of "w" for verify, "s" for sign, | ||
| 355 | * and the placement of "a,b". | ||
| 356 | */ | ||
| 357 | #define DSA_PDB_SGF_SHIFT 24 | ||
| 358 | #define DSA_PDB_SGF_MASK (0xff << DSA_PDB_SGF_SHIFT) | ||
| 359 | #define DSA_PDB_SGF_Q (0x80 << DSA_PDB_SGF_SHIFT) | ||
| 360 | #define DSA_PDB_SGF_R (0x40 << DSA_PDB_SGF_SHIFT) | ||
| 361 | #define DSA_PDB_SGF_G (0x20 << DSA_PDB_SGF_SHIFT) | ||
| 362 | #define DSA_PDB_SGF_W (0x10 << DSA_PDB_SGF_SHIFT) | ||
| 363 | #define DSA_PDB_SGF_S (0x10 << DSA_PDB_SGF_SHIFT) | ||
| 364 | #define DSA_PDB_SGF_F (0x08 << DSA_PDB_SGF_SHIFT) | ||
| 365 | #define DSA_PDB_SGF_C (0x04 << DSA_PDB_SGF_SHIFT) | ||
| 366 | #define DSA_PDB_SGF_D (0x02 << DSA_PDB_SGF_SHIFT) | ||
| 367 | #define DSA_PDB_SGF_AB_SIGN (0x02 << DSA_PDB_SGF_SHIFT) | ||
| 368 | #define DSA_PDB_SGF_AB_VERIFY (0x01 << DSA_PDB_SGF_SHIFT) | ||
| 369 | |||
| 370 | #define DSA_PDB_L_SHIFT 7 | ||
| 371 | #define DSA_PDB_L_MASK (0x3ff << DSA_PDB_L_SHIFT) | ||
| 372 | |||
| 373 | #define DSA_PDB_N_MASK 0x7f | ||
| 374 | |||
| 375 | struct dsa_sign_pdb { | ||
| 376 | u32 sgf_ln; /* Use DSA_PDB_ defintions per above */ | ||
| 377 | u8 *q; | ||
| 378 | u8 *r; | ||
| 379 | u8 *g; /* or Gx,y */ | ||
| 380 | u8 *s; | ||
| 381 | u8 *f; | ||
| 382 | u8 *c; | ||
| 383 | u8 *d; | ||
| 384 | u8 *ab; /* ECC only */ | ||
| 385 | u8 *u; | ||
| 386 | }; | ||
| 387 | |||
| 388 | struct dsa_verify_pdb { | ||
| 389 | u32 sgf_ln; | ||
| 390 | u8 *q; | ||
| 391 | u8 *r; | ||
| 392 | u8 *g; /* or Gx,y */ | ||
| 393 | u8 *w; /* or Wx,y */ | ||
| 394 | u8 *f; | ||
| 395 | u8 *c; | ||
| 396 | u8 *d; | ||
| 397 | u8 *tmp; /* temporary data block */ | ||
| 398 | u8 *ab; /* only used if ECC processing */ | ||
| 399 | }; | ||
| 400 | |||
| 401 | #endif | ||
