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