GNU Linux-libre 5.10.215-gnu1
[releases.git] / drivers / net / ethernet / intel / ixgbe / ixgbe_ipsec.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Copyright(c) 2017 Oracle and/or its affiliates. All rights reserved. */
3
4 #ifndef _IXGBE_IPSEC_H_
5 #define _IXGBE_IPSEC_H_
6
7 #define IXGBE_IPSEC_MAX_SA_COUNT        1024
8 #define IXGBE_IPSEC_MAX_RX_IP_COUNT     128
9 #define IXGBE_IPSEC_BASE_RX_INDEX       0
10 #define IXGBE_IPSEC_BASE_TX_INDEX       IXGBE_IPSEC_MAX_SA_COUNT
11 #define IXGBE_IPSEC_AUTH_BITS           128
12
13 #define IXGBE_RXTXIDX_IPS_EN            0x00000001
14 #define IXGBE_RXIDX_TBL_SHIFT           1
15 enum ixgbe_ipsec_tbl_sel {
16         ips_rx_ip_tbl   =       0x01,
17         ips_rx_spi_tbl  =       0x02,
18         ips_rx_key_tbl  =       0x03,
19 };
20
21 #define IXGBE_RXTXIDX_IDX_SHIFT         3
22 #define IXGBE_RXTXIDX_READ              0x40000000
23 #define IXGBE_RXTXIDX_WRITE             0x80000000
24
25 #define IXGBE_RXMOD_VALID               0x00000001
26 #define IXGBE_RXMOD_PROTO_ESP           0x00000004
27 #define IXGBE_RXMOD_DECRYPT             0x00000008
28 #define IXGBE_RXMOD_IPV6                0x00000010
29 #define IXGBE_RXTXMOD_VF                0x00000020
30
31 struct rx_sa {
32         struct hlist_node hlist;
33         struct xfrm_state *xs;
34         __be32 ipaddr[4];
35         u32 key[4];
36         u32 salt;
37         u32 mode;
38         u8  iptbl_ind;
39         bool used;
40         bool decrypt;
41         u32 vf;
42 };
43
44 struct rx_ip_sa {
45         __be32 ipaddr[4];
46         u32 ref_cnt;
47         bool used;
48 };
49
50 struct tx_sa {
51         struct xfrm_state *xs;
52         u32 key[4];
53         u32 salt;
54         u32 mode;
55         bool encrypt;
56         bool used;
57         u32 vf;
58 };
59
60 struct ixgbe_ipsec_tx_data {
61         u32 flags;
62         u16 trailer_len;
63         u16 sa_idx;
64 };
65
66 struct ixgbe_ipsec {
67         u16 num_rx_sa;
68         u16 num_tx_sa;
69         struct rx_ip_sa *ip_tbl;
70         struct rx_sa *rx_tbl;
71         struct tx_sa *tx_tbl;
72         DECLARE_HASHTABLE(rx_sa_list, 10);
73 };
74
75 struct sa_mbx_msg {
76         __be32 spi;
77         u8 flags;
78         u8 proto;
79         u16 family;
80         __be32 addr[4];
81         u32 key[5];
82 };
83 #endif /* _IXGBE_IPSEC_H_ */