162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* Copyright(c) 2017 Oracle and/or its affiliates. All rights reserved. */ 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci#ifndef _IXGBE_IPSEC_H_ 562306a36Sopenharmony_ci#define _IXGBE_IPSEC_H_ 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#define IXGBE_IPSEC_MAX_SA_COUNT 1024 862306a36Sopenharmony_ci#define IXGBE_IPSEC_MAX_RX_IP_COUNT 128 962306a36Sopenharmony_ci#define IXGBE_IPSEC_BASE_RX_INDEX 0 1062306a36Sopenharmony_ci#define IXGBE_IPSEC_BASE_TX_INDEX IXGBE_IPSEC_MAX_SA_COUNT 1162306a36Sopenharmony_ci#define IXGBE_IPSEC_AUTH_BITS 128 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#define IXGBE_RXTXIDX_IPS_EN 0x00000001 1462306a36Sopenharmony_ci#define IXGBE_RXIDX_TBL_SHIFT 1 1562306a36Sopenharmony_cienum ixgbe_ipsec_tbl_sel { 1662306a36Sopenharmony_ci ips_rx_ip_tbl = 0x01, 1762306a36Sopenharmony_ci ips_rx_spi_tbl = 0x02, 1862306a36Sopenharmony_ci ips_rx_key_tbl = 0x03, 1962306a36Sopenharmony_ci}; 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci#define IXGBE_RXTXIDX_IDX_SHIFT 3 2262306a36Sopenharmony_ci#define IXGBE_RXTXIDX_READ 0x40000000 2362306a36Sopenharmony_ci#define IXGBE_RXTXIDX_WRITE 0x80000000 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci#define IXGBE_RXMOD_VALID 0x00000001 2662306a36Sopenharmony_ci#define IXGBE_RXMOD_PROTO_ESP 0x00000004 2762306a36Sopenharmony_ci#define IXGBE_RXMOD_DECRYPT 0x00000008 2862306a36Sopenharmony_ci#define IXGBE_RXMOD_IPV6 0x00000010 2962306a36Sopenharmony_ci#define IXGBE_RXTXMOD_VF 0x00000020 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_cistruct rx_sa { 3262306a36Sopenharmony_ci struct hlist_node hlist; 3362306a36Sopenharmony_ci struct xfrm_state *xs; 3462306a36Sopenharmony_ci __be32 ipaddr[4]; 3562306a36Sopenharmony_ci u32 key[4]; 3662306a36Sopenharmony_ci u32 salt; 3762306a36Sopenharmony_ci u32 mode; 3862306a36Sopenharmony_ci u8 iptbl_ind; 3962306a36Sopenharmony_ci bool used; 4062306a36Sopenharmony_ci bool decrypt; 4162306a36Sopenharmony_ci u32 vf; 4262306a36Sopenharmony_ci}; 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_cistruct rx_ip_sa { 4562306a36Sopenharmony_ci __be32 ipaddr[4]; 4662306a36Sopenharmony_ci u32 ref_cnt; 4762306a36Sopenharmony_ci bool used; 4862306a36Sopenharmony_ci}; 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_cistruct tx_sa { 5162306a36Sopenharmony_ci struct xfrm_state *xs; 5262306a36Sopenharmony_ci u32 key[4]; 5362306a36Sopenharmony_ci u32 salt; 5462306a36Sopenharmony_ci u32 mode; 5562306a36Sopenharmony_ci bool encrypt; 5662306a36Sopenharmony_ci bool used; 5762306a36Sopenharmony_ci u32 vf; 5862306a36Sopenharmony_ci}; 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_cistruct ixgbe_ipsec_tx_data { 6162306a36Sopenharmony_ci u32 flags; 6262306a36Sopenharmony_ci u16 trailer_len; 6362306a36Sopenharmony_ci u16 sa_idx; 6462306a36Sopenharmony_ci}; 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_cistruct ixgbe_ipsec { 6762306a36Sopenharmony_ci u16 num_rx_sa; 6862306a36Sopenharmony_ci u16 num_tx_sa; 6962306a36Sopenharmony_ci struct rx_ip_sa *ip_tbl; 7062306a36Sopenharmony_ci struct rx_sa *rx_tbl; 7162306a36Sopenharmony_ci struct tx_sa *tx_tbl; 7262306a36Sopenharmony_ci DECLARE_HASHTABLE(rx_sa_list, 10); 7362306a36Sopenharmony_ci}; 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_cistruct sa_mbx_msg { 7662306a36Sopenharmony_ci __be32 spi; 7762306a36Sopenharmony_ci u8 dir; 7862306a36Sopenharmony_ci u8 proto; 7962306a36Sopenharmony_ci u16 family; 8062306a36Sopenharmony_ci __be32 addr[4]; 8162306a36Sopenharmony_ci u32 key[5]; 8262306a36Sopenharmony_ci}; 8362306a36Sopenharmony_ci#endif /* _IXGBE_IPSEC_H_ */ 84