xref: /openbmc/linux/drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.h (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
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