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