1ae06c70bSJeff Kirsher /* SPDX-License-Identifier: GPL-2.0 */ 251dce24bSJeff Kirsher /* Copyright(c) 2017 Oracle and/or its affiliates. All rights reserved. */ 38bbbc5e9SShannon Nelson 48bbbc5e9SShannon Nelson #ifndef _IXGBE_IPSEC_H_ 58bbbc5e9SShannon Nelson #define _IXGBE_IPSEC_H_ 68bbbc5e9SShannon Nelson 78bbbc5e9SShannon Nelson #define IXGBE_IPSEC_MAX_SA_COUNT 1024 88bbbc5e9SShannon Nelson #define IXGBE_IPSEC_MAX_RX_IP_COUNT 128 98bbbc5e9SShannon Nelson #define IXGBE_IPSEC_BASE_RX_INDEX 0 108bbbc5e9SShannon Nelson #define IXGBE_IPSEC_BASE_TX_INDEX IXGBE_IPSEC_MAX_SA_COUNT 1168c1fb2dSShannon Nelson #define IXGBE_IPSEC_AUTH_BITS 128 128bbbc5e9SShannon Nelson 138bbbc5e9SShannon Nelson #define IXGBE_RXTXIDX_IPS_EN 0x00000001 148bbbc5e9SShannon Nelson #define IXGBE_RXIDX_TBL_SHIFT 1 158bbbc5e9SShannon Nelson enum ixgbe_ipsec_tbl_sel { 168bbbc5e9SShannon Nelson ips_rx_ip_tbl = 0x01, 178bbbc5e9SShannon Nelson ips_rx_spi_tbl = 0x02, 188bbbc5e9SShannon Nelson ips_rx_key_tbl = 0x03, 198bbbc5e9SShannon Nelson }; 208bbbc5e9SShannon Nelson 218bbbc5e9SShannon Nelson #define IXGBE_RXTXIDX_IDX_SHIFT 3 228bbbc5e9SShannon Nelson #define IXGBE_RXTXIDX_READ 0x40000000 238bbbc5e9SShannon Nelson #define IXGBE_RXTXIDX_WRITE 0x80000000 248bbbc5e9SShannon Nelson 258bbbc5e9SShannon Nelson #define IXGBE_RXMOD_VALID 0x00000001 268bbbc5e9SShannon Nelson #define IXGBE_RXMOD_PROTO_ESP 0x00000004 278bbbc5e9SShannon Nelson #define IXGBE_RXMOD_DECRYPT 0x00000008 288bbbc5e9SShannon Nelson #define IXGBE_RXMOD_IPV6 0x00000010 29eda0333aSShannon Nelson #define IXGBE_RXTXMOD_VF 0x00000020 308bbbc5e9SShannon Nelson 3134c822e2SShannon Nelson struct rx_sa { 3234c822e2SShannon Nelson struct hlist_node hlist; 3334c822e2SShannon Nelson struct xfrm_state *xs; 3434c822e2SShannon Nelson __be32 ipaddr[4]; 3534c822e2SShannon Nelson u32 key[4]; 3634c822e2SShannon Nelson u32 salt; 3734c822e2SShannon Nelson u32 mode; 3834c822e2SShannon Nelson u8 iptbl_ind; 3934c822e2SShannon Nelson bool used; 4034c822e2SShannon Nelson bool decrypt; 41eda0333aSShannon Nelson u32 vf; 4234c822e2SShannon Nelson }; 4334c822e2SShannon Nelson 4434c822e2SShannon Nelson struct rx_ip_sa { 4534c822e2SShannon Nelson __be32 ipaddr[4]; 4634c822e2SShannon Nelson u32 ref_cnt; 4734c822e2SShannon Nelson bool used; 4834c822e2SShannon Nelson }; 4934c822e2SShannon Nelson 5034c822e2SShannon Nelson struct tx_sa { 5134c822e2SShannon Nelson struct xfrm_state *xs; 5234c822e2SShannon Nelson u32 key[4]; 5334c822e2SShannon Nelson u32 salt; 54eda0333aSShannon Nelson u32 mode; 5534c822e2SShannon Nelson bool encrypt; 5634c822e2SShannon Nelson bool used; 57eda0333aSShannon Nelson u32 vf; 5834c822e2SShannon Nelson }; 5934c822e2SShannon Nelson 6034c822e2SShannon Nelson struct ixgbe_ipsec_tx_data { 6134c822e2SShannon Nelson u32 flags; 6234c822e2SShannon Nelson u16 trailer_len; 6334c822e2SShannon Nelson u16 sa_idx; 6434c822e2SShannon Nelson }; 6534c822e2SShannon Nelson 6634c822e2SShannon Nelson struct ixgbe_ipsec { 6734c822e2SShannon Nelson u16 num_rx_sa; 6834c822e2SShannon Nelson u16 num_tx_sa; 6934c822e2SShannon Nelson struct rx_ip_sa *ip_tbl; 7034c822e2SShannon Nelson struct rx_sa *rx_tbl; 7134c822e2SShannon Nelson struct tx_sa *tx_tbl; 7234c822e2SShannon Nelson DECLARE_HASHTABLE(rx_sa_list, 10); 7334c822e2SShannon Nelson }; 74eda0333aSShannon Nelson 75eda0333aSShannon Nelson struct sa_mbx_msg { 76eda0333aSShannon Nelson __be32 spi; 77*0c05ab78SLeon Romanovsky u8 dir; 78eda0333aSShannon Nelson u8 proto; 79eda0333aSShannon Nelson u16 family; 80eda0333aSShannon Nelson __be32 addr[4]; 81eda0333aSShannon Nelson u32 key[5]; 82eda0333aSShannon Nelson }; 838bbbc5e9SShannon Nelson #endif /* _IXGBE_IPSEC_H_ */ 84