18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * CAAM Protocol Data Block (PDB) definition header file 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright 2008-2016 Freescale Semiconductor, Inc. 68c2ecf20Sopenharmony_ci * 78c2ecf20Sopenharmony_ci */ 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#ifndef CAAM_PDB_H 108c2ecf20Sopenharmony_ci#define CAAM_PDB_H 118c2ecf20Sopenharmony_ci#include "compat.h" 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_ci/* 148c2ecf20Sopenharmony_ci * PDB- IPSec ESP Header Modification Options 158c2ecf20Sopenharmony_ci */ 168c2ecf20Sopenharmony_ci#define PDBHMO_ESP_DECAP_SHIFT 28 178c2ecf20Sopenharmony_ci#define PDBHMO_ESP_ENCAP_SHIFT 28 188c2ecf20Sopenharmony_ci/* 198c2ecf20Sopenharmony_ci * Encap and Decap - Decrement TTL (Hop Limit) - Based on the value of the 208c2ecf20Sopenharmony_ci * Options Byte IP version (IPvsn) field: 218c2ecf20Sopenharmony_ci * if IPv4, decrement the inner IP header TTL field (byte 8); 228c2ecf20Sopenharmony_ci * if IPv6 decrement the inner IP header Hop Limit field (byte 7). 238c2ecf20Sopenharmony_ci*/ 248c2ecf20Sopenharmony_ci#define PDBHMO_ESP_DECAP_DEC_TTL (0x02 << PDBHMO_ESP_DECAP_SHIFT) 258c2ecf20Sopenharmony_ci#define PDBHMO_ESP_ENCAP_DEC_TTL (0x02 << PDBHMO_ESP_ENCAP_SHIFT) 268c2ecf20Sopenharmony_ci/* 278c2ecf20Sopenharmony_ci * Decap - DiffServ Copy - Copy the IPv4 TOS or IPv6 Traffic Class byte 288c2ecf20Sopenharmony_ci * from the outer IP header to the inner IP header. 298c2ecf20Sopenharmony_ci */ 308c2ecf20Sopenharmony_ci#define PDBHMO_ESP_DIFFSERV (0x01 << PDBHMO_ESP_DECAP_SHIFT) 318c2ecf20Sopenharmony_ci/* 328c2ecf20Sopenharmony_ci * Encap- Copy DF bit -if an IPv4 tunnel mode outer IP header is coming from 338c2ecf20Sopenharmony_ci * the PDB, copy the DF bit from the inner IP header to the outer IP header. 348c2ecf20Sopenharmony_ci */ 358c2ecf20Sopenharmony_ci#define PDBHMO_ESP_DFBIT (0x04 << PDBHMO_ESP_ENCAP_SHIFT) 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_ci#define PDBNH_ESP_ENCAP_SHIFT 16 388c2ecf20Sopenharmony_ci#define PDBNH_ESP_ENCAP_MASK (0xff << PDBNH_ESP_ENCAP_SHIFT) 398c2ecf20Sopenharmony_ci 408c2ecf20Sopenharmony_ci#define PDBHDRLEN_ESP_DECAP_SHIFT 16 418c2ecf20Sopenharmony_ci#define PDBHDRLEN_MASK (0x0fff << PDBHDRLEN_ESP_DECAP_SHIFT) 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_ci#define PDB_NH_OFFSET_SHIFT 8 448c2ecf20Sopenharmony_ci#define PDB_NH_OFFSET_MASK (0xff << PDB_NH_OFFSET_SHIFT) 458c2ecf20Sopenharmony_ci 468c2ecf20Sopenharmony_ci/* 478c2ecf20Sopenharmony_ci * PDB - IPSec ESP Encap/Decap Options 488c2ecf20Sopenharmony_ci */ 498c2ecf20Sopenharmony_ci#define PDBOPTS_ESP_ARSNONE 0x00 /* no antireplay window */ 508c2ecf20Sopenharmony_ci#define PDBOPTS_ESP_ARS32 0x40 /* 32-entry antireplay window */ 518c2ecf20Sopenharmony_ci#define PDBOPTS_ESP_ARS128 0x80 /* 128-entry antireplay window */ 528c2ecf20Sopenharmony_ci#define PDBOPTS_ESP_ARS64 0xc0 /* 64-entry antireplay window */ 538c2ecf20Sopenharmony_ci#define PDBOPTS_ESP_ARS_MASK 0xc0 /* antireplay window mask */ 548c2ecf20Sopenharmony_ci#define PDBOPTS_ESP_IVSRC 0x20 /* IV comes from internal random gen */ 558c2ecf20Sopenharmony_ci#define PDBOPTS_ESP_ESN 0x10 /* extended sequence included */ 568c2ecf20Sopenharmony_ci#define PDBOPTS_ESP_OUTFMT 0x08 /* output only decapsulation (decap) */ 578c2ecf20Sopenharmony_ci#define PDBOPTS_ESP_IPHDRSRC 0x08 /* IP header comes from PDB (encap) */ 588c2ecf20Sopenharmony_ci#define PDBOPTS_ESP_INCIPHDR 0x04 /* Prepend IP header to output frame */ 598c2ecf20Sopenharmony_ci#define PDBOPTS_ESP_IPVSN 0x02 /* process IPv6 header */ 608c2ecf20Sopenharmony_ci#define PDBOPTS_ESP_AOFL 0x04 /* adjust out frame len (decap, SEC>=5.3)*/ 618c2ecf20Sopenharmony_ci#define PDBOPTS_ESP_TUNNEL 0x01 /* tunnel mode next-header byte */ 628c2ecf20Sopenharmony_ci#define PDBOPTS_ESP_IPV6 0x02 /* ip header version is V6 */ 638c2ecf20Sopenharmony_ci#define PDBOPTS_ESP_DIFFSERV 0x40 /* copy TOS/TC from inner iphdr */ 648c2ecf20Sopenharmony_ci#define PDBOPTS_ESP_UPDATE_CSUM 0x80 /* encap-update ip header checksum */ 658c2ecf20Sopenharmony_ci#define PDBOPTS_ESP_VERIFY_CSUM 0x20 /* decap-validate ip header checksum */ 668c2ecf20Sopenharmony_ci 678c2ecf20Sopenharmony_ci/* 688c2ecf20Sopenharmony_ci * General IPSec encap/decap PDB definitions 698c2ecf20Sopenharmony_ci */ 708c2ecf20Sopenharmony_ci 718c2ecf20Sopenharmony_ci/** 728c2ecf20Sopenharmony_ci * ipsec_encap_cbc - PDB part for IPsec CBC encapsulation 738c2ecf20Sopenharmony_ci * @iv: 16-byte array initialization vector 748c2ecf20Sopenharmony_ci */ 758c2ecf20Sopenharmony_cistruct ipsec_encap_cbc { 768c2ecf20Sopenharmony_ci u8 iv[16]; 778c2ecf20Sopenharmony_ci}; 788c2ecf20Sopenharmony_ci 798c2ecf20Sopenharmony_ci/** 808c2ecf20Sopenharmony_ci * ipsec_encap_ctr - PDB part for IPsec CTR encapsulation 818c2ecf20Sopenharmony_ci * @ctr_nonce: 4-byte array nonce 828c2ecf20Sopenharmony_ci * @ctr_initial: initial count constant 838c2ecf20Sopenharmony_ci * @iv: initialization vector 848c2ecf20Sopenharmony_ci */ 858c2ecf20Sopenharmony_cistruct ipsec_encap_ctr { 868c2ecf20Sopenharmony_ci u8 ctr_nonce[4]; 878c2ecf20Sopenharmony_ci u32 ctr_initial; 888c2ecf20Sopenharmony_ci u64 iv; 898c2ecf20Sopenharmony_ci}; 908c2ecf20Sopenharmony_ci 918c2ecf20Sopenharmony_ci/** 928c2ecf20Sopenharmony_ci * ipsec_encap_ccm - PDB part for IPsec CCM encapsulation 938c2ecf20Sopenharmony_ci * @salt: 3-byte array salt (lower 24 bits) 948c2ecf20Sopenharmony_ci * @ccm_opt: CCM algorithm options - MSB-LSB description: 958c2ecf20Sopenharmony_ci * b0_flags (8b) - CCM B0; use 0x5B for 8-byte ICV, 0x6B for 12-byte ICV, 968c2ecf20Sopenharmony_ci * 0x7B for 16-byte ICV (cf. RFC4309, RFC3610) 978c2ecf20Sopenharmony_ci * ctr_flags (8b) - counter flags; constant equal to 0x3 988c2ecf20Sopenharmony_ci * ctr_initial (16b) - initial count constant 998c2ecf20Sopenharmony_ci * @iv: initialization vector 1008c2ecf20Sopenharmony_ci */ 1018c2ecf20Sopenharmony_cistruct ipsec_encap_ccm { 1028c2ecf20Sopenharmony_ci u8 salt[4]; 1038c2ecf20Sopenharmony_ci u32 ccm_opt; 1048c2ecf20Sopenharmony_ci u64 iv; 1058c2ecf20Sopenharmony_ci}; 1068c2ecf20Sopenharmony_ci 1078c2ecf20Sopenharmony_ci/** 1088c2ecf20Sopenharmony_ci * ipsec_encap_gcm - PDB part for IPsec GCM encapsulation 1098c2ecf20Sopenharmony_ci * @salt: 3-byte array salt (lower 24 bits) 1108c2ecf20Sopenharmony_ci * @rsvd: reserved, do not use 1118c2ecf20Sopenharmony_ci * @iv: initialization vector 1128c2ecf20Sopenharmony_ci */ 1138c2ecf20Sopenharmony_cistruct ipsec_encap_gcm { 1148c2ecf20Sopenharmony_ci u8 salt[4]; 1158c2ecf20Sopenharmony_ci u32 rsvd1; 1168c2ecf20Sopenharmony_ci u64 iv; 1178c2ecf20Sopenharmony_ci}; 1188c2ecf20Sopenharmony_ci 1198c2ecf20Sopenharmony_ci/** 1208c2ecf20Sopenharmony_ci * ipsec_encap_pdb - PDB for IPsec encapsulation 1218c2ecf20Sopenharmony_ci * @options: MSB-LSB description 1228c2ecf20Sopenharmony_ci * hmo (header manipulation options) - 4b 1238c2ecf20Sopenharmony_ci * reserved - 4b 1248c2ecf20Sopenharmony_ci * next header - 8b 1258c2ecf20Sopenharmony_ci * next header offset - 8b 1268c2ecf20Sopenharmony_ci * option flags (depend on selected algorithm) - 8b 1278c2ecf20Sopenharmony_ci * @seq_num_ext_hi: (optional) IPsec Extended Sequence Number (ESN) 1288c2ecf20Sopenharmony_ci * @seq_num: IPsec sequence number 1298c2ecf20Sopenharmony_ci * @spi: IPsec SPI (Security Parameters Index) 1308c2ecf20Sopenharmony_ci * @ip_hdr_len: optional IP Header length (in bytes) 1318c2ecf20Sopenharmony_ci * reserved - 16b 1328c2ecf20Sopenharmony_ci * Opt. IP Hdr Len - 16b 1338c2ecf20Sopenharmony_ci * @ip_hdr: optional IP Header content 1348c2ecf20Sopenharmony_ci */ 1358c2ecf20Sopenharmony_cistruct ipsec_encap_pdb { 1368c2ecf20Sopenharmony_ci u32 options; 1378c2ecf20Sopenharmony_ci u32 seq_num_ext_hi; 1388c2ecf20Sopenharmony_ci u32 seq_num; 1398c2ecf20Sopenharmony_ci union { 1408c2ecf20Sopenharmony_ci struct ipsec_encap_cbc cbc; 1418c2ecf20Sopenharmony_ci struct ipsec_encap_ctr ctr; 1428c2ecf20Sopenharmony_ci struct ipsec_encap_ccm ccm; 1438c2ecf20Sopenharmony_ci struct ipsec_encap_gcm gcm; 1448c2ecf20Sopenharmony_ci }; 1458c2ecf20Sopenharmony_ci u32 spi; 1468c2ecf20Sopenharmony_ci u32 ip_hdr_len; 1478c2ecf20Sopenharmony_ci u32 ip_hdr[0]; 1488c2ecf20Sopenharmony_ci}; 1498c2ecf20Sopenharmony_ci 1508c2ecf20Sopenharmony_ci/** 1518c2ecf20Sopenharmony_ci * ipsec_decap_cbc - PDB part for IPsec CBC decapsulation 1528c2ecf20Sopenharmony_ci * @rsvd: reserved, do not use 1538c2ecf20Sopenharmony_ci */ 1548c2ecf20Sopenharmony_cistruct ipsec_decap_cbc { 1558c2ecf20Sopenharmony_ci u32 rsvd[2]; 1568c2ecf20Sopenharmony_ci}; 1578c2ecf20Sopenharmony_ci 1588c2ecf20Sopenharmony_ci/** 1598c2ecf20Sopenharmony_ci * ipsec_decap_ctr - PDB part for IPsec CTR decapsulation 1608c2ecf20Sopenharmony_ci * @ctr_nonce: 4-byte array nonce 1618c2ecf20Sopenharmony_ci * @ctr_initial: initial count constant 1628c2ecf20Sopenharmony_ci */ 1638c2ecf20Sopenharmony_cistruct ipsec_decap_ctr { 1648c2ecf20Sopenharmony_ci u8 ctr_nonce[4]; 1658c2ecf20Sopenharmony_ci u32 ctr_initial; 1668c2ecf20Sopenharmony_ci}; 1678c2ecf20Sopenharmony_ci 1688c2ecf20Sopenharmony_ci/** 1698c2ecf20Sopenharmony_ci * ipsec_decap_ccm - PDB part for IPsec CCM decapsulation 1708c2ecf20Sopenharmony_ci * @salt: 3-byte salt (lower 24 bits) 1718c2ecf20Sopenharmony_ci * @ccm_opt: CCM algorithm options - MSB-LSB description: 1728c2ecf20Sopenharmony_ci * b0_flags (8b) - CCM B0; use 0x5B for 8-byte ICV, 0x6B for 12-byte ICV, 1738c2ecf20Sopenharmony_ci * 0x7B for 16-byte ICV (cf. RFC4309, RFC3610) 1748c2ecf20Sopenharmony_ci * ctr_flags (8b) - counter flags; constant equal to 0x3 1758c2ecf20Sopenharmony_ci * ctr_initial (16b) - initial count constant 1768c2ecf20Sopenharmony_ci */ 1778c2ecf20Sopenharmony_cistruct ipsec_decap_ccm { 1788c2ecf20Sopenharmony_ci u8 salt[4]; 1798c2ecf20Sopenharmony_ci u32 ccm_opt; 1808c2ecf20Sopenharmony_ci}; 1818c2ecf20Sopenharmony_ci 1828c2ecf20Sopenharmony_ci/** 1838c2ecf20Sopenharmony_ci * ipsec_decap_gcm - PDB part for IPsec GCN decapsulation 1848c2ecf20Sopenharmony_ci * @salt: 4-byte salt 1858c2ecf20Sopenharmony_ci * @rsvd: reserved, do not use 1868c2ecf20Sopenharmony_ci */ 1878c2ecf20Sopenharmony_cistruct ipsec_decap_gcm { 1888c2ecf20Sopenharmony_ci u8 salt[4]; 1898c2ecf20Sopenharmony_ci u32 resvd; 1908c2ecf20Sopenharmony_ci}; 1918c2ecf20Sopenharmony_ci 1928c2ecf20Sopenharmony_ci/** 1938c2ecf20Sopenharmony_ci * ipsec_decap_pdb - PDB for IPsec decapsulation 1948c2ecf20Sopenharmony_ci * @options: MSB-LSB description 1958c2ecf20Sopenharmony_ci * hmo (header manipulation options) - 4b 1968c2ecf20Sopenharmony_ci * IP header length - 12b 1978c2ecf20Sopenharmony_ci * next header offset - 8b 1988c2ecf20Sopenharmony_ci * option flags (depend on selected algorithm) - 8b 1998c2ecf20Sopenharmony_ci * @seq_num_ext_hi: (optional) IPsec Extended Sequence Number (ESN) 2008c2ecf20Sopenharmony_ci * @seq_num: IPsec sequence number 2018c2ecf20Sopenharmony_ci * @anti_replay: Anti-replay window; size depends on ARS (option flags) 2028c2ecf20Sopenharmony_ci */ 2038c2ecf20Sopenharmony_cistruct ipsec_decap_pdb { 2048c2ecf20Sopenharmony_ci u32 options; 2058c2ecf20Sopenharmony_ci union { 2068c2ecf20Sopenharmony_ci struct ipsec_decap_cbc cbc; 2078c2ecf20Sopenharmony_ci struct ipsec_decap_ctr ctr; 2088c2ecf20Sopenharmony_ci struct ipsec_decap_ccm ccm; 2098c2ecf20Sopenharmony_ci struct ipsec_decap_gcm gcm; 2108c2ecf20Sopenharmony_ci }; 2118c2ecf20Sopenharmony_ci u32 seq_num_ext_hi; 2128c2ecf20Sopenharmony_ci u32 seq_num; 2138c2ecf20Sopenharmony_ci __be32 anti_replay[4]; 2148c2ecf20Sopenharmony_ci}; 2158c2ecf20Sopenharmony_ci 2168c2ecf20Sopenharmony_ci/* 2178c2ecf20Sopenharmony_ci * IPSec ESP Datapath Protocol Override Register (DPOVRD) 2188c2ecf20Sopenharmony_ci */ 2198c2ecf20Sopenharmony_cistruct ipsec_deco_dpovrd { 2208c2ecf20Sopenharmony_ci#define IPSEC_ENCAP_DECO_DPOVRD_USE 0x80 2218c2ecf20Sopenharmony_ci u8 ovrd_ecn; 2228c2ecf20Sopenharmony_ci u8 ip_hdr_len; 2238c2ecf20Sopenharmony_ci u8 nh_offset; 2248c2ecf20Sopenharmony_ci u8 next_header; /* reserved if decap */ 2258c2ecf20Sopenharmony_ci}; 2268c2ecf20Sopenharmony_ci 2278c2ecf20Sopenharmony_ci/* 2288c2ecf20Sopenharmony_ci * IEEE 802.11i WiFi Protocol Data Block 2298c2ecf20Sopenharmony_ci */ 2308c2ecf20Sopenharmony_ci#define WIFI_PDBOPTS_FCS 0x01 2318c2ecf20Sopenharmony_ci#define WIFI_PDBOPTS_AR 0x40 2328c2ecf20Sopenharmony_ci 2338c2ecf20Sopenharmony_cistruct wifi_encap_pdb { 2348c2ecf20Sopenharmony_ci u16 mac_hdr_len; 2358c2ecf20Sopenharmony_ci u8 rsvd; 2368c2ecf20Sopenharmony_ci u8 options; 2378c2ecf20Sopenharmony_ci u8 iv_flags; 2388c2ecf20Sopenharmony_ci u8 pri; 2398c2ecf20Sopenharmony_ci u16 pn1; 2408c2ecf20Sopenharmony_ci u32 pn2; 2418c2ecf20Sopenharmony_ci u16 frm_ctrl_mask; 2428c2ecf20Sopenharmony_ci u16 seq_ctrl_mask; 2438c2ecf20Sopenharmony_ci u8 rsvd1[2]; 2448c2ecf20Sopenharmony_ci u8 cnst; 2458c2ecf20Sopenharmony_ci u8 key_id; 2468c2ecf20Sopenharmony_ci u8 ctr_flags; 2478c2ecf20Sopenharmony_ci u8 rsvd2; 2488c2ecf20Sopenharmony_ci u16 ctr_init; 2498c2ecf20Sopenharmony_ci}; 2508c2ecf20Sopenharmony_ci 2518c2ecf20Sopenharmony_cistruct wifi_decap_pdb { 2528c2ecf20Sopenharmony_ci u16 mac_hdr_len; 2538c2ecf20Sopenharmony_ci u8 rsvd; 2548c2ecf20Sopenharmony_ci u8 options; 2558c2ecf20Sopenharmony_ci u8 iv_flags; 2568c2ecf20Sopenharmony_ci u8 pri; 2578c2ecf20Sopenharmony_ci u16 pn1; 2588c2ecf20Sopenharmony_ci u32 pn2; 2598c2ecf20Sopenharmony_ci u16 frm_ctrl_mask; 2608c2ecf20Sopenharmony_ci u16 seq_ctrl_mask; 2618c2ecf20Sopenharmony_ci u8 rsvd1[4]; 2628c2ecf20Sopenharmony_ci u8 ctr_flags; 2638c2ecf20Sopenharmony_ci u8 rsvd2; 2648c2ecf20Sopenharmony_ci u16 ctr_init; 2658c2ecf20Sopenharmony_ci}; 2668c2ecf20Sopenharmony_ci 2678c2ecf20Sopenharmony_ci/* 2688c2ecf20Sopenharmony_ci * IEEE 802.16 WiMAX Protocol Data Block 2698c2ecf20Sopenharmony_ci */ 2708c2ecf20Sopenharmony_ci#define WIMAX_PDBOPTS_FCS 0x01 2718c2ecf20Sopenharmony_ci#define WIMAX_PDBOPTS_AR 0x40 /* decap only */ 2728c2ecf20Sopenharmony_ci 2738c2ecf20Sopenharmony_cistruct wimax_encap_pdb { 2748c2ecf20Sopenharmony_ci u8 rsvd[3]; 2758c2ecf20Sopenharmony_ci u8 options; 2768c2ecf20Sopenharmony_ci u32 nonce; 2778c2ecf20Sopenharmony_ci u8 b0_flags; 2788c2ecf20Sopenharmony_ci u8 ctr_flags; 2798c2ecf20Sopenharmony_ci u16 ctr_init; 2808c2ecf20Sopenharmony_ci /* begin DECO writeback region */ 2818c2ecf20Sopenharmony_ci u32 pn; 2828c2ecf20Sopenharmony_ci /* end DECO writeback region */ 2838c2ecf20Sopenharmony_ci}; 2848c2ecf20Sopenharmony_ci 2858c2ecf20Sopenharmony_cistruct wimax_decap_pdb { 2868c2ecf20Sopenharmony_ci u8 rsvd[3]; 2878c2ecf20Sopenharmony_ci u8 options; 2888c2ecf20Sopenharmony_ci u32 nonce; 2898c2ecf20Sopenharmony_ci u8 iv_flags; 2908c2ecf20Sopenharmony_ci u8 ctr_flags; 2918c2ecf20Sopenharmony_ci u16 ctr_init; 2928c2ecf20Sopenharmony_ci /* begin DECO writeback region */ 2938c2ecf20Sopenharmony_ci u32 pn; 2948c2ecf20Sopenharmony_ci u8 rsvd1[2]; 2958c2ecf20Sopenharmony_ci u16 antireplay_len; 2968c2ecf20Sopenharmony_ci u64 antireplay_scorecard; 2978c2ecf20Sopenharmony_ci /* end DECO writeback region */ 2988c2ecf20Sopenharmony_ci}; 2998c2ecf20Sopenharmony_ci 3008c2ecf20Sopenharmony_ci/* 3018c2ecf20Sopenharmony_ci * IEEE 801.AE MacSEC Protocol Data Block 3028c2ecf20Sopenharmony_ci */ 3038c2ecf20Sopenharmony_ci#define MACSEC_PDBOPTS_FCS 0x01 3048c2ecf20Sopenharmony_ci#define MACSEC_PDBOPTS_AR 0x40 /* used in decap only */ 3058c2ecf20Sopenharmony_ci 3068c2ecf20Sopenharmony_cistruct macsec_encap_pdb { 3078c2ecf20Sopenharmony_ci u16 aad_len; 3088c2ecf20Sopenharmony_ci u8 rsvd; 3098c2ecf20Sopenharmony_ci u8 options; 3108c2ecf20Sopenharmony_ci u64 sci; 3118c2ecf20Sopenharmony_ci u16 ethertype; 3128c2ecf20Sopenharmony_ci u8 tci_an; 3138c2ecf20Sopenharmony_ci u8 rsvd1; 3148c2ecf20Sopenharmony_ci /* begin DECO writeback region */ 3158c2ecf20Sopenharmony_ci u32 pn; 3168c2ecf20Sopenharmony_ci /* end DECO writeback region */ 3178c2ecf20Sopenharmony_ci}; 3188c2ecf20Sopenharmony_ci 3198c2ecf20Sopenharmony_cistruct macsec_decap_pdb { 3208c2ecf20Sopenharmony_ci u16 aad_len; 3218c2ecf20Sopenharmony_ci u8 rsvd; 3228c2ecf20Sopenharmony_ci u8 options; 3238c2ecf20Sopenharmony_ci u64 sci; 3248c2ecf20Sopenharmony_ci u8 rsvd1[3]; 3258c2ecf20Sopenharmony_ci /* begin DECO writeback region */ 3268c2ecf20Sopenharmony_ci u8 antireplay_len; 3278c2ecf20Sopenharmony_ci u32 pn; 3288c2ecf20Sopenharmony_ci u64 antireplay_scorecard; 3298c2ecf20Sopenharmony_ci /* end DECO writeback region */ 3308c2ecf20Sopenharmony_ci}; 3318c2ecf20Sopenharmony_ci 3328c2ecf20Sopenharmony_ci/* 3338c2ecf20Sopenharmony_ci * SSL/TLS/DTLS Protocol Data Blocks 3348c2ecf20Sopenharmony_ci */ 3358c2ecf20Sopenharmony_ci 3368c2ecf20Sopenharmony_ci#define TLS_PDBOPTS_ARS32 0x40 3378c2ecf20Sopenharmony_ci#define TLS_PDBOPTS_ARS64 0xc0 3388c2ecf20Sopenharmony_ci#define TLS_PDBOPTS_OUTFMT 0x08 3398c2ecf20Sopenharmony_ci#define TLS_PDBOPTS_IV_WRTBK 0x02 /* 1.1/1.2/DTLS only */ 3408c2ecf20Sopenharmony_ci#define TLS_PDBOPTS_EXP_RND_IV 0x01 /* 1.1/1.2/DTLS only */ 3418c2ecf20Sopenharmony_ci 3428c2ecf20Sopenharmony_cistruct tls_block_encap_pdb { 3438c2ecf20Sopenharmony_ci u8 type; 3448c2ecf20Sopenharmony_ci u8 version[2]; 3458c2ecf20Sopenharmony_ci u8 options; 3468c2ecf20Sopenharmony_ci u64 seq_num; 3478c2ecf20Sopenharmony_ci u32 iv[4]; 3488c2ecf20Sopenharmony_ci}; 3498c2ecf20Sopenharmony_ci 3508c2ecf20Sopenharmony_cistruct tls_stream_encap_pdb { 3518c2ecf20Sopenharmony_ci u8 type; 3528c2ecf20Sopenharmony_ci u8 version[2]; 3538c2ecf20Sopenharmony_ci u8 options; 3548c2ecf20Sopenharmony_ci u64 seq_num; 3558c2ecf20Sopenharmony_ci u8 i; 3568c2ecf20Sopenharmony_ci u8 j; 3578c2ecf20Sopenharmony_ci u8 rsvd1[2]; 3588c2ecf20Sopenharmony_ci}; 3598c2ecf20Sopenharmony_ci 3608c2ecf20Sopenharmony_cistruct dtls_block_encap_pdb { 3618c2ecf20Sopenharmony_ci u8 type; 3628c2ecf20Sopenharmony_ci u8 version[2]; 3638c2ecf20Sopenharmony_ci u8 options; 3648c2ecf20Sopenharmony_ci u16 epoch; 3658c2ecf20Sopenharmony_ci u16 seq_num[3]; 3668c2ecf20Sopenharmony_ci u32 iv[4]; 3678c2ecf20Sopenharmony_ci}; 3688c2ecf20Sopenharmony_ci 3698c2ecf20Sopenharmony_cistruct tls_block_decap_pdb { 3708c2ecf20Sopenharmony_ci u8 rsvd[3]; 3718c2ecf20Sopenharmony_ci u8 options; 3728c2ecf20Sopenharmony_ci u64 seq_num; 3738c2ecf20Sopenharmony_ci u32 iv[4]; 3748c2ecf20Sopenharmony_ci}; 3758c2ecf20Sopenharmony_ci 3768c2ecf20Sopenharmony_cistruct tls_stream_decap_pdb { 3778c2ecf20Sopenharmony_ci u8 rsvd[3]; 3788c2ecf20Sopenharmony_ci u8 options; 3798c2ecf20Sopenharmony_ci u64 seq_num; 3808c2ecf20Sopenharmony_ci u8 i; 3818c2ecf20Sopenharmony_ci u8 j; 3828c2ecf20Sopenharmony_ci u8 rsvd1[2]; 3838c2ecf20Sopenharmony_ci}; 3848c2ecf20Sopenharmony_ci 3858c2ecf20Sopenharmony_cistruct dtls_block_decap_pdb { 3868c2ecf20Sopenharmony_ci u8 rsvd[3]; 3878c2ecf20Sopenharmony_ci u8 options; 3888c2ecf20Sopenharmony_ci u16 epoch; 3898c2ecf20Sopenharmony_ci u16 seq_num[3]; 3908c2ecf20Sopenharmony_ci u32 iv[4]; 3918c2ecf20Sopenharmony_ci u64 antireplay_scorecard; 3928c2ecf20Sopenharmony_ci}; 3938c2ecf20Sopenharmony_ci 3948c2ecf20Sopenharmony_ci/* 3958c2ecf20Sopenharmony_ci * SRTP Protocol Data Blocks 3968c2ecf20Sopenharmony_ci */ 3978c2ecf20Sopenharmony_ci#define SRTP_PDBOPTS_MKI 0x08 3988c2ecf20Sopenharmony_ci#define SRTP_PDBOPTS_AR 0x40 3998c2ecf20Sopenharmony_ci 4008c2ecf20Sopenharmony_cistruct srtp_encap_pdb { 4018c2ecf20Sopenharmony_ci u8 x_len; 4028c2ecf20Sopenharmony_ci u8 mki_len; 4038c2ecf20Sopenharmony_ci u8 n_tag; 4048c2ecf20Sopenharmony_ci u8 options; 4058c2ecf20Sopenharmony_ci u32 cnst0; 4068c2ecf20Sopenharmony_ci u8 rsvd[2]; 4078c2ecf20Sopenharmony_ci u16 cnst1; 4088c2ecf20Sopenharmony_ci u16 salt[7]; 4098c2ecf20Sopenharmony_ci u16 cnst2; 4108c2ecf20Sopenharmony_ci u32 rsvd1; 4118c2ecf20Sopenharmony_ci u32 roc; 4128c2ecf20Sopenharmony_ci u32 opt_mki; 4138c2ecf20Sopenharmony_ci}; 4148c2ecf20Sopenharmony_ci 4158c2ecf20Sopenharmony_cistruct srtp_decap_pdb { 4168c2ecf20Sopenharmony_ci u8 x_len; 4178c2ecf20Sopenharmony_ci u8 mki_len; 4188c2ecf20Sopenharmony_ci u8 n_tag; 4198c2ecf20Sopenharmony_ci u8 options; 4208c2ecf20Sopenharmony_ci u32 cnst0; 4218c2ecf20Sopenharmony_ci u8 rsvd[2]; 4228c2ecf20Sopenharmony_ci u16 cnst1; 4238c2ecf20Sopenharmony_ci u16 salt[7]; 4248c2ecf20Sopenharmony_ci u16 cnst2; 4258c2ecf20Sopenharmony_ci u16 rsvd1; 4268c2ecf20Sopenharmony_ci u16 seq_num; 4278c2ecf20Sopenharmony_ci u32 roc; 4288c2ecf20Sopenharmony_ci u64 antireplay_scorecard; 4298c2ecf20Sopenharmony_ci}; 4308c2ecf20Sopenharmony_ci 4318c2ecf20Sopenharmony_ci/* 4328c2ecf20Sopenharmony_ci * DSA/ECDSA Protocol Data Blocks 4338c2ecf20Sopenharmony_ci * Two of these exist: DSA-SIGN, and DSA-VERIFY. They are similar 4348c2ecf20Sopenharmony_ci * except for the treatment of "w" for verify, "s" for sign, 4358c2ecf20Sopenharmony_ci * and the placement of "a,b". 4368c2ecf20Sopenharmony_ci */ 4378c2ecf20Sopenharmony_ci#define DSA_PDB_SGF_SHIFT 24 4388c2ecf20Sopenharmony_ci#define DSA_PDB_SGF_MASK (0xff << DSA_PDB_SGF_SHIFT) 4398c2ecf20Sopenharmony_ci#define DSA_PDB_SGF_Q (0x80 << DSA_PDB_SGF_SHIFT) 4408c2ecf20Sopenharmony_ci#define DSA_PDB_SGF_R (0x40 << DSA_PDB_SGF_SHIFT) 4418c2ecf20Sopenharmony_ci#define DSA_PDB_SGF_G (0x20 << DSA_PDB_SGF_SHIFT) 4428c2ecf20Sopenharmony_ci#define DSA_PDB_SGF_W (0x10 << DSA_PDB_SGF_SHIFT) 4438c2ecf20Sopenharmony_ci#define DSA_PDB_SGF_S (0x10 << DSA_PDB_SGF_SHIFT) 4448c2ecf20Sopenharmony_ci#define DSA_PDB_SGF_F (0x08 << DSA_PDB_SGF_SHIFT) 4458c2ecf20Sopenharmony_ci#define DSA_PDB_SGF_C (0x04 << DSA_PDB_SGF_SHIFT) 4468c2ecf20Sopenharmony_ci#define DSA_PDB_SGF_D (0x02 << DSA_PDB_SGF_SHIFT) 4478c2ecf20Sopenharmony_ci#define DSA_PDB_SGF_AB_SIGN (0x02 << DSA_PDB_SGF_SHIFT) 4488c2ecf20Sopenharmony_ci#define DSA_PDB_SGF_AB_VERIFY (0x01 << DSA_PDB_SGF_SHIFT) 4498c2ecf20Sopenharmony_ci 4508c2ecf20Sopenharmony_ci#define DSA_PDB_L_SHIFT 7 4518c2ecf20Sopenharmony_ci#define DSA_PDB_L_MASK (0x3ff << DSA_PDB_L_SHIFT) 4528c2ecf20Sopenharmony_ci 4538c2ecf20Sopenharmony_ci#define DSA_PDB_N_MASK 0x7f 4548c2ecf20Sopenharmony_ci 4558c2ecf20Sopenharmony_cistruct dsa_sign_pdb { 4568c2ecf20Sopenharmony_ci u32 sgf_ln; /* Use DSA_PDB_ definitions per above */ 4578c2ecf20Sopenharmony_ci u8 *q; 4588c2ecf20Sopenharmony_ci u8 *r; 4598c2ecf20Sopenharmony_ci u8 *g; /* or Gx,y */ 4608c2ecf20Sopenharmony_ci u8 *s; 4618c2ecf20Sopenharmony_ci u8 *f; 4628c2ecf20Sopenharmony_ci u8 *c; 4638c2ecf20Sopenharmony_ci u8 *d; 4648c2ecf20Sopenharmony_ci u8 *ab; /* ECC only */ 4658c2ecf20Sopenharmony_ci u8 *u; 4668c2ecf20Sopenharmony_ci}; 4678c2ecf20Sopenharmony_ci 4688c2ecf20Sopenharmony_cistruct dsa_verify_pdb { 4698c2ecf20Sopenharmony_ci u32 sgf_ln; 4708c2ecf20Sopenharmony_ci u8 *q; 4718c2ecf20Sopenharmony_ci u8 *r; 4728c2ecf20Sopenharmony_ci u8 *g; /* or Gx,y */ 4738c2ecf20Sopenharmony_ci u8 *w; /* or Wx,y */ 4748c2ecf20Sopenharmony_ci u8 *f; 4758c2ecf20Sopenharmony_ci u8 *c; 4768c2ecf20Sopenharmony_ci u8 *d; 4778c2ecf20Sopenharmony_ci u8 *tmp; /* temporary data block */ 4788c2ecf20Sopenharmony_ci u8 *ab; /* only used if ECC processing */ 4798c2ecf20Sopenharmony_ci}; 4808c2ecf20Sopenharmony_ci 4818c2ecf20Sopenharmony_ci/* RSA Protocol Data Block */ 4828c2ecf20Sopenharmony_ci#define RSA_PDB_SGF_SHIFT 28 4838c2ecf20Sopenharmony_ci#define RSA_PDB_E_SHIFT 12 4848c2ecf20Sopenharmony_ci#define RSA_PDB_E_MASK (0xFFF << RSA_PDB_E_SHIFT) 4858c2ecf20Sopenharmony_ci#define RSA_PDB_D_SHIFT 12 4868c2ecf20Sopenharmony_ci#define RSA_PDB_D_MASK (0xFFF << RSA_PDB_D_SHIFT) 4878c2ecf20Sopenharmony_ci#define RSA_PDB_Q_SHIFT 12 4888c2ecf20Sopenharmony_ci#define RSA_PDB_Q_MASK (0xFFF << RSA_PDB_Q_SHIFT) 4898c2ecf20Sopenharmony_ci 4908c2ecf20Sopenharmony_ci#define RSA_PDB_SGF_F (0x8 << RSA_PDB_SGF_SHIFT) 4918c2ecf20Sopenharmony_ci#define RSA_PDB_SGF_G (0x4 << RSA_PDB_SGF_SHIFT) 4928c2ecf20Sopenharmony_ci#define RSA_PRIV_PDB_SGF_F (0x4 << RSA_PDB_SGF_SHIFT) 4938c2ecf20Sopenharmony_ci#define RSA_PRIV_PDB_SGF_G (0x8 << RSA_PDB_SGF_SHIFT) 4948c2ecf20Sopenharmony_ci 4958c2ecf20Sopenharmony_ci#define RSA_PRIV_KEY_FRM_1 0 4968c2ecf20Sopenharmony_ci#define RSA_PRIV_KEY_FRM_2 1 4978c2ecf20Sopenharmony_ci#define RSA_PRIV_KEY_FRM_3 2 4988c2ecf20Sopenharmony_ci 4998c2ecf20Sopenharmony_ci/** 5008c2ecf20Sopenharmony_ci * RSA Encrypt Protocol Data Block 5018c2ecf20Sopenharmony_ci * @sgf: scatter-gather field 5028c2ecf20Sopenharmony_ci * @f_dma: dma address of input data 5038c2ecf20Sopenharmony_ci * @g_dma: dma address of encrypted output data 5048c2ecf20Sopenharmony_ci * @n_dma: dma address of RSA modulus 5058c2ecf20Sopenharmony_ci * @e_dma: dma address of RSA public exponent 5068c2ecf20Sopenharmony_ci * @f_len: length in octets of the input data 5078c2ecf20Sopenharmony_ci */ 5088c2ecf20Sopenharmony_cistruct rsa_pub_pdb { 5098c2ecf20Sopenharmony_ci u32 sgf; 5108c2ecf20Sopenharmony_ci dma_addr_t f_dma; 5118c2ecf20Sopenharmony_ci dma_addr_t g_dma; 5128c2ecf20Sopenharmony_ci dma_addr_t n_dma; 5138c2ecf20Sopenharmony_ci dma_addr_t e_dma; 5148c2ecf20Sopenharmony_ci u32 f_len; 5158c2ecf20Sopenharmony_ci}; 5168c2ecf20Sopenharmony_ci 5178c2ecf20Sopenharmony_ci#define SIZEOF_RSA_PUB_PDB (2 * sizeof(u32) + 4 * caam_ptr_sz) 5188c2ecf20Sopenharmony_ci 5198c2ecf20Sopenharmony_ci/** 5208c2ecf20Sopenharmony_ci * RSA Decrypt PDB - Private Key Form #1 5218c2ecf20Sopenharmony_ci * @sgf: scatter-gather field 5228c2ecf20Sopenharmony_ci * @g_dma: dma address of encrypted input data 5238c2ecf20Sopenharmony_ci * @f_dma: dma address of output data 5248c2ecf20Sopenharmony_ci * @n_dma: dma address of RSA modulus 5258c2ecf20Sopenharmony_ci * @d_dma: dma address of RSA private exponent 5268c2ecf20Sopenharmony_ci */ 5278c2ecf20Sopenharmony_cistruct rsa_priv_f1_pdb { 5288c2ecf20Sopenharmony_ci u32 sgf; 5298c2ecf20Sopenharmony_ci dma_addr_t g_dma; 5308c2ecf20Sopenharmony_ci dma_addr_t f_dma; 5318c2ecf20Sopenharmony_ci dma_addr_t n_dma; 5328c2ecf20Sopenharmony_ci dma_addr_t d_dma; 5338c2ecf20Sopenharmony_ci}; 5348c2ecf20Sopenharmony_ci 5358c2ecf20Sopenharmony_ci#define SIZEOF_RSA_PRIV_F1_PDB (sizeof(u32) + 4 * caam_ptr_sz) 5368c2ecf20Sopenharmony_ci 5378c2ecf20Sopenharmony_ci/** 5388c2ecf20Sopenharmony_ci * RSA Decrypt PDB - Private Key Form #2 5398c2ecf20Sopenharmony_ci * @sgf : scatter-gather field 5408c2ecf20Sopenharmony_ci * @g_dma : dma address of encrypted input data 5418c2ecf20Sopenharmony_ci * @f_dma : dma address of output data 5428c2ecf20Sopenharmony_ci * @d_dma : dma address of RSA private exponent 5438c2ecf20Sopenharmony_ci * @p_dma : dma address of RSA prime factor p of RSA modulus n 5448c2ecf20Sopenharmony_ci * @q_dma : dma address of RSA prime factor q of RSA modulus n 5458c2ecf20Sopenharmony_ci * @tmp1_dma: dma address of temporary buffer. CAAM uses this temporary buffer 5468c2ecf20Sopenharmony_ci * as internal state buffer. It is assumed to be as long as p. 5478c2ecf20Sopenharmony_ci * @tmp2_dma: dma address of temporary buffer. CAAM uses this temporary buffer 5488c2ecf20Sopenharmony_ci * as internal state buffer. It is assumed to be as long as q. 5498c2ecf20Sopenharmony_ci * @p_q_len : length in bytes of first two prime factors of the RSA modulus n 5508c2ecf20Sopenharmony_ci */ 5518c2ecf20Sopenharmony_cistruct rsa_priv_f2_pdb { 5528c2ecf20Sopenharmony_ci u32 sgf; 5538c2ecf20Sopenharmony_ci dma_addr_t g_dma; 5548c2ecf20Sopenharmony_ci dma_addr_t f_dma; 5558c2ecf20Sopenharmony_ci dma_addr_t d_dma; 5568c2ecf20Sopenharmony_ci dma_addr_t p_dma; 5578c2ecf20Sopenharmony_ci dma_addr_t q_dma; 5588c2ecf20Sopenharmony_ci dma_addr_t tmp1_dma; 5598c2ecf20Sopenharmony_ci dma_addr_t tmp2_dma; 5608c2ecf20Sopenharmony_ci u32 p_q_len; 5618c2ecf20Sopenharmony_ci}; 5628c2ecf20Sopenharmony_ci 5638c2ecf20Sopenharmony_ci#define SIZEOF_RSA_PRIV_F2_PDB (2 * sizeof(u32) + 7 * caam_ptr_sz) 5648c2ecf20Sopenharmony_ci 5658c2ecf20Sopenharmony_ci/** 5668c2ecf20Sopenharmony_ci * RSA Decrypt PDB - Private Key Form #3 5678c2ecf20Sopenharmony_ci * This is the RSA Chinese Reminder Theorem (CRT) form for two prime factors of 5688c2ecf20Sopenharmony_ci * the RSA modulus. 5698c2ecf20Sopenharmony_ci * @sgf : scatter-gather field 5708c2ecf20Sopenharmony_ci * @g_dma : dma address of encrypted input data 5718c2ecf20Sopenharmony_ci * @f_dma : dma address of output data 5728c2ecf20Sopenharmony_ci * @c_dma : dma address of RSA CRT coefficient 5738c2ecf20Sopenharmony_ci * @p_dma : dma address of RSA prime factor p of RSA modulus n 5748c2ecf20Sopenharmony_ci * @q_dma : dma address of RSA prime factor q of RSA modulus n 5758c2ecf20Sopenharmony_ci * @dp_dma : dma address of RSA CRT exponent of RSA prime factor p 5768c2ecf20Sopenharmony_ci * @dp_dma : dma address of RSA CRT exponent of RSA prime factor q 5778c2ecf20Sopenharmony_ci * @tmp1_dma: dma address of temporary buffer. CAAM uses this temporary buffer 5788c2ecf20Sopenharmony_ci * as internal state buffer. It is assumed to be as long as p. 5798c2ecf20Sopenharmony_ci * @tmp2_dma: dma address of temporary buffer. CAAM uses this temporary buffer 5808c2ecf20Sopenharmony_ci * as internal state buffer. It is assumed to be as long as q. 5818c2ecf20Sopenharmony_ci * @p_q_len : length in bytes of first two prime factors of the RSA modulus n 5828c2ecf20Sopenharmony_ci */ 5838c2ecf20Sopenharmony_cistruct rsa_priv_f3_pdb { 5848c2ecf20Sopenharmony_ci u32 sgf; 5858c2ecf20Sopenharmony_ci dma_addr_t g_dma; 5868c2ecf20Sopenharmony_ci dma_addr_t f_dma; 5878c2ecf20Sopenharmony_ci dma_addr_t c_dma; 5888c2ecf20Sopenharmony_ci dma_addr_t p_dma; 5898c2ecf20Sopenharmony_ci dma_addr_t q_dma; 5908c2ecf20Sopenharmony_ci dma_addr_t dp_dma; 5918c2ecf20Sopenharmony_ci dma_addr_t dq_dma; 5928c2ecf20Sopenharmony_ci dma_addr_t tmp1_dma; 5938c2ecf20Sopenharmony_ci dma_addr_t tmp2_dma; 5948c2ecf20Sopenharmony_ci u32 p_q_len; 5958c2ecf20Sopenharmony_ci}; 5968c2ecf20Sopenharmony_ci 5978c2ecf20Sopenharmony_ci#define SIZEOF_RSA_PRIV_F3_PDB (2 * sizeof(u32) + 9 * caam_ptr_sz) 5988c2ecf20Sopenharmony_ci 5998c2ecf20Sopenharmony_ci#endif 600