+enum {
+ ROC_IE_ON_IV_SRC_HW_GEN_DEFAULT = 0,
+ ROC_IE_ON_IV_SRC_FROM_DPTR = 1,
+};
+
+struct roc_ie_on_outb_hdr {
+ uint32_t ip_id;
+ uint32_t seq;
+ uint8_t iv[16];
+};
+
+union roc_ie_on_bit_perfect_iv {
+ uint8_t aes_iv[16];
+ uint8_t des_iv[8];
+ struct {
+ uint8_t nonce[4];
+ uint8_t iv[8];
+ uint8_t counter[4];
+ } gcm;
+};
+
+struct roc_ie_on_traffic_selector {
+ uint16_t src_port[2];
+ uint16_t dst_port[2];
+ union {
+ struct {
+ uint32_t src_addr[2];
+ uint32_t dst_addr[2];
+ } ipv4;
+ struct {
+ uint8_t src_addr[32];
+ uint8_t dst_addr[32];
+ } ipv6;
+ };
+};
+
+struct roc_ie_on_ip_template {
+ union {
+ struct {
+ uint8_t ipv4_hdr[20];
+ uint16_t udp_src;
+ uint16_t udp_dst;
+ } ip4;
+ struct {
+ uint8_t ipv6_hdr[40];
+ uint16_t udp_src;
+ uint16_t udp_dst;
+ } ip6;
+ };
+};
+
+union roc_on_ipsec_outb_param1 {
+ uint16_t u16;
+ struct {
+ uint16_t frag_num : 4;
+ uint16_t rsvd_4_6 : 3;
+ uint16_t gre_select : 1;
+ uint16_t dsiv : 1;
+ uint16_t ikev2 : 1;
+ uint16_t min_frag_size : 1;
+ uint16_t per_pkt_iv : 1;
+ uint16_t tfc_pad_enable : 1;
+ uint16_t tfc_dummy_pkt : 1;
+ uint16_t rfc_or_override_mode : 1;
+ uint16_t custom_hdr_or_p99 : 1;
+ } s;
+};
+
+union roc_on_ipsec_inb_param2 {
+ uint16_t u16;
+ struct {
+ uint16_t rsvd_0_10 : 11;
+ uint16_t gre_select : 1;
+ uint16_t ikev2 : 1;
+ uint16_t udp_cksum : 1;
+ uint16_t ctx_addr_sel : 1;
+ uint16_t custom_hdr_or_p99 : 1;
+ } s;
+};
+
+struct roc_ie_on_sa_ctl {
+ uint64_t spi : 32;
+ uint64_t exp_proto_inter_frag : 8;
+ uint64_t copy_df : 1;
+ uint64_t frag_type : 1;
+ uint64_t explicit_iv_en : 1;
+ uint64_t esn_en : 1;
+ uint64_t rsvd_45_44 : 2;
+ uint64_t encap_type : 2;
+ uint64_t enc_type : 3;
+ uint64_t rsvd_48 : 1;
+ uint64_t auth_type : 4;
+ uint64_t valid : 1;
+ uint64_t direction : 1;
+ uint64_t outer_ip_ver : 1;
+ uint64_t inner_ip_ver : 1;
+ uint64_t ipsec_mode : 1;
+ uint64_t ipsec_proto : 1;
+ uint64_t aes_key_len : 2;
+};
+
+struct roc_ie_on_common_sa {
+ /* w0 */
+ struct roc_ie_on_sa_ctl ctl;
+
+ /* w1-w4 */
+ uint8_t cipher_key[32];
+
+ /* w5-w6 */
+ union roc_ie_on_bit_perfect_iv iv;
+
+ /* w7 */
+ uint32_t esn_hi;
+ uint32_t esn_low;
+};
+
+struct roc_ie_on_outb_sa {
+ /* w0 - w7 */
+ struct roc_ie_on_common_sa common_sa;
+
+ /* w8-w55 */
+ union {
+ struct {
+ struct roc_ie_on_ip_template template;
+ } aes_gcm;
+ struct {
+ uint8_t hmac_key[24];
+ uint8_t unused[24];
+ struct roc_ie_on_ip_template template;
+ } sha1;
+ struct {
+ uint8_t key[16];
+ uint8_t unused[32];
+ struct roc_ie_on_ip_template template;
+ } aes_xcbc;
+ struct {
+ uint8_t hmac_key[64];
+ uint8_t hmac_iv[64];
+ struct roc_ie_on_ip_template template;
+ } sha2;
+ };
+};
+
+struct roc_ie_on_inb_sa {
+ /* w0 - w7 */
+ struct roc_ie_on_common_sa common_sa;
+
+ /* w8 */
+ uint8_t udp_encap[8];
+
+ /* w9-w33 */
+ union {
+ struct {
+ uint8_t hmac_key[48];
+ struct roc_ie_on_traffic_selector selector;
+ } sha1_or_gcm;
+ struct {
+ uint8_t key[16];
+ uint8_t unused[32];
+ struct roc_ie_on_traffic_selector selector;
+ } aes_xcbc;
+ struct {
+ uint8_t hmac_key[64];
+ uint8_t hmac_iv[64];
+ struct roc_ie_on_traffic_selector selector;
+ } sha2;
+ };
+};
+
+/* CN9K IPsec FP */
+
+/* CN9K IPsec FP opcodes */
+#define ROC_IE_ONF_MAJOR_OP_PROCESS_OUTBOUND_IPSEC 0x25UL
+#define ROC_IE_ONF_MAJOR_OP_PROCESS_INBOUND_IPSEC 0x26UL
+
+/* Ucode completion codes */
+#define ROC_IE_ONF_UCC_SUCCESS 0
+