xref: /OK3568_Linux_fs/kernel/include/linux/qed/tcp_common.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
2*4882a593Smuzhiyun /* QLogic qed NIC Driver
3*4882a593Smuzhiyun  * Copyright (c) 2015-2017  QLogic Corporation
4*4882a593Smuzhiyun  * Copyright (c) 2019-2020 Marvell International Ltd.
5*4882a593Smuzhiyun  */
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #ifndef __TCP_COMMON__
8*4882a593Smuzhiyun #define __TCP_COMMON__
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun /********************/
11*4882a593Smuzhiyun /* TCP FW CONSTANTS */
12*4882a593Smuzhiyun /********************/
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun #define TCP_INVALID_TIMEOUT_VAL	-1
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun /* OOO opaque data received from LL2 */
17*4882a593Smuzhiyun struct ooo_opaque {
18*4882a593Smuzhiyun 	__le32 cid;
19*4882a593Smuzhiyun 	u8 drop_isle;
20*4882a593Smuzhiyun 	u8 drop_size;
21*4882a593Smuzhiyun 	u8 ooo_opcode;
22*4882a593Smuzhiyun 	u8 ooo_isle;
23*4882a593Smuzhiyun };
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun /* tcp connect mode enum */
26*4882a593Smuzhiyun enum tcp_connect_mode {
27*4882a593Smuzhiyun 	TCP_CONNECT_ACTIVE,
28*4882a593Smuzhiyun 	TCP_CONNECT_PASSIVE,
29*4882a593Smuzhiyun 	MAX_TCP_CONNECT_MODE
30*4882a593Smuzhiyun };
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun /* tcp function init parameters */
33*4882a593Smuzhiyun struct tcp_init_params {
34*4882a593Smuzhiyun 	__le32 two_msl_timer;
35*4882a593Smuzhiyun 	__le16 tx_sws_timer;
36*4882a593Smuzhiyun 	u8 max_fin_rt;
37*4882a593Smuzhiyun 	u8 reserved[9];
38*4882a593Smuzhiyun };
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun /* tcp IPv4/IPv6 enum */
41*4882a593Smuzhiyun enum tcp_ip_version {
42*4882a593Smuzhiyun 	TCP_IPV4,
43*4882a593Smuzhiyun 	TCP_IPV6,
44*4882a593Smuzhiyun 	MAX_TCP_IP_VERSION
45*4882a593Smuzhiyun };
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun /* tcp offload parameters */
48*4882a593Smuzhiyun struct tcp_offload_params {
49*4882a593Smuzhiyun 	__le16 local_mac_addr_lo;
50*4882a593Smuzhiyun 	__le16 local_mac_addr_mid;
51*4882a593Smuzhiyun 	__le16 local_mac_addr_hi;
52*4882a593Smuzhiyun 	__le16 remote_mac_addr_lo;
53*4882a593Smuzhiyun 	__le16 remote_mac_addr_mid;
54*4882a593Smuzhiyun 	__le16 remote_mac_addr_hi;
55*4882a593Smuzhiyun 	__le16 vlan_id;
56*4882a593Smuzhiyun 	__le16 flags;
57*4882a593Smuzhiyun #define TCP_OFFLOAD_PARAMS_TS_EN_MASK			0x1
58*4882a593Smuzhiyun #define TCP_OFFLOAD_PARAMS_TS_EN_SHIFT			0
59*4882a593Smuzhiyun #define TCP_OFFLOAD_PARAMS_DA_EN_MASK			0x1
60*4882a593Smuzhiyun #define TCP_OFFLOAD_PARAMS_DA_EN_SHIFT			1
61*4882a593Smuzhiyun #define TCP_OFFLOAD_PARAMS_KA_EN_MASK			0x1
62*4882a593Smuzhiyun #define TCP_OFFLOAD_PARAMS_KA_EN_SHIFT			2
63*4882a593Smuzhiyun #define TCP_OFFLOAD_PARAMS_ECN_SENDER_EN_MASK		0x1
64*4882a593Smuzhiyun #define TCP_OFFLOAD_PARAMS_ECN_SENDER_EN_SHIFT		3
65*4882a593Smuzhiyun #define TCP_OFFLOAD_PARAMS_ECN_RECEIVER_EN_MASK		0x1
66*4882a593Smuzhiyun #define TCP_OFFLOAD_PARAMS_ECN_RECEIVER_EN_SHIFT	4
67*4882a593Smuzhiyun #define TCP_OFFLOAD_PARAMS_NAGLE_EN_MASK		0x1
68*4882a593Smuzhiyun #define TCP_OFFLOAD_PARAMS_NAGLE_EN_SHIFT		5
69*4882a593Smuzhiyun #define TCP_OFFLOAD_PARAMS_DA_CNT_EN_MASK		0x1
70*4882a593Smuzhiyun #define TCP_OFFLOAD_PARAMS_DA_CNT_EN_SHIFT		6
71*4882a593Smuzhiyun #define TCP_OFFLOAD_PARAMS_FIN_SENT_MASK		0x1
72*4882a593Smuzhiyun #define TCP_OFFLOAD_PARAMS_FIN_SENT_SHIFT		7
73*4882a593Smuzhiyun #define TCP_OFFLOAD_PARAMS_FIN_RECEIVED_MASK		0x1
74*4882a593Smuzhiyun #define TCP_OFFLOAD_PARAMS_FIN_RECEIVED_SHIFT		8
75*4882a593Smuzhiyun #define TCP_OFFLOAD_PARAMS_RESERVED_MASK		0x7F
76*4882a593Smuzhiyun #define TCP_OFFLOAD_PARAMS_RESERVED_SHIFT		9
77*4882a593Smuzhiyun 	u8 ip_version;
78*4882a593Smuzhiyun 	u8 reserved0[3];
79*4882a593Smuzhiyun 	__le32 remote_ip[4];
80*4882a593Smuzhiyun 	__le32 local_ip[4];
81*4882a593Smuzhiyun 	__le32 flow_label;
82*4882a593Smuzhiyun 	u8 ttl;
83*4882a593Smuzhiyun 	u8 tos_or_tc;
84*4882a593Smuzhiyun 	__le16 remote_port;
85*4882a593Smuzhiyun 	__le16 local_port;
86*4882a593Smuzhiyun 	__le16 mss;
87*4882a593Smuzhiyun 	u8 rcv_wnd_scale;
88*4882a593Smuzhiyun 	u8 connect_mode;
89*4882a593Smuzhiyun 	__le16 srtt;
90*4882a593Smuzhiyun 	__le32 ss_thresh;
91*4882a593Smuzhiyun 	__le32 rcv_wnd;
92*4882a593Smuzhiyun 	__le32 cwnd;
93*4882a593Smuzhiyun 	u8 ka_max_probe_cnt;
94*4882a593Smuzhiyun 	u8 dup_ack_theshold;
95*4882a593Smuzhiyun 	__le16 reserved1;
96*4882a593Smuzhiyun 	__le32 ka_timeout;
97*4882a593Smuzhiyun 	__le32 ka_interval;
98*4882a593Smuzhiyun 	__le32 max_rt_time;
99*4882a593Smuzhiyun 	__le32 initial_rcv_wnd;
100*4882a593Smuzhiyun 	__le32 rcv_next;
101*4882a593Smuzhiyun 	__le32 snd_una;
102*4882a593Smuzhiyun 	__le32 snd_next;
103*4882a593Smuzhiyun 	__le32 snd_max;
104*4882a593Smuzhiyun 	__le32 snd_wnd;
105*4882a593Smuzhiyun 	__le32 snd_wl1;
106*4882a593Smuzhiyun 	__le32 ts_recent;
107*4882a593Smuzhiyun 	__le32 ts_recent_age;
108*4882a593Smuzhiyun 	__le32 total_rt;
109*4882a593Smuzhiyun 	__le32 ka_timeout_delta;
110*4882a593Smuzhiyun 	__le32 rt_timeout_delta;
111*4882a593Smuzhiyun 	u8 dup_ack_cnt;
112*4882a593Smuzhiyun 	u8 snd_wnd_probe_cnt;
113*4882a593Smuzhiyun 	u8 ka_probe_cnt;
114*4882a593Smuzhiyun 	u8 rt_cnt;
115*4882a593Smuzhiyun 	__le16 rtt_var;
116*4882a593Smuzhiyun 	__le16 fw_internal;
117*4882a593Smuzhiyun 	u8 snd_wnd_scale;
118*4882a593Smuzhiyun 	u8 ack_frequency;
119*4882a593Smuzhiyun 	__le16 da_timeout_value;
120*4882a593Smuzhiyun 	__le32 reserved3;
121*4882a593Smuzhiyun };
122*4882a593Smuzhiyun 
123*4882a593Smuzhiyun /* tcp offload parameters */
124*4882a593Smuzhiyun struct tcp_offload_params_opt2 {
125*4882a593Smuzhiyun 	__le16 local_mac_addr_lo;
126*4882a593Smuzhiyun 	__le16 local_mac_addr_mid;
127*4882a593Smuzhiyun 	__le16 local_mac_addr_hi;
128*4882a593Smuzhiyun 	__le16 remote_mac_addr_lo;
129*4882a593Smuzhiyun 	__le16 remote_mac_addr_mid;
130*4882a593Smuzhiyun 	__le16 remote_mac_addr_hi;
131*4882a593Smuzhiyun 	__le16 vlan_id;
132*4882a593Smuzhiyun 	__le16 flags;
133*4882a593Smuzhiyun #define TCP_OFFLOAD_PARAMS_OPT2_TS_EN_MASK	0x1
134*4882a593Smuzhiyun #define TCP_OFFLOAD_PARAMS_OPT2_TS_EN_SHIFT	0
135*4882a593Smuzhiyun #define TCP_OFFLOAD_PARAMS_OPT2_DA_EN_MASK	0x1
136*4882a593Smuzhiyun #define TCP_OFFLOAD_PARAMS_OPT2_DA_EN_SHIFT	1
137*4882a593Smuzhiyun #define TCP_OFFLOAD_PARAMS_OPT2_KA_EN_MASK	0x1
138*4882a593Smuzhiyun #define TCP_OFFLOAD_PARAMS_OPT2_KA_EN_SHIFT	2
139*4882a593Smuzhiyun #define TCP_OFFLOAD_PARAMS_OPT2_ECN_EN_MASK	0x1
140*4882a593Smuzhiyun #define TCP_OFFLOAD_PARAMS_OPT2_ECN_EN_SHIFT	3
141*4882a593Smuzhiyun #define TCP_OFFLOAD_PARAMS_OPT2_RESERVED0_MASK	0xFFF
142*4882a593Smuzhiyun #define TCP_OFFLOAD_PARAMS_OPT2_RESERVED0_SHIFT	4
143*4882a593Smuzhiyun 	u8 ip_version;
144*4882a593Smuzhiyun 	u8 reserved1[3];
145*4882a593Smuzhiyun 	__le32 remote_ip[4];
146*4882a593Smuzhiyun 	__le32 local_ip[4];
147*4882a593Smuzhiyun 	__le32 flow_label;
148*4882a593Smuzhiyun 	u8 ttl;
149*4882a593Smuzhiyun 	u8 tos_or_tc;
150*4882a593Smuzhiyun 	__le16 remote_port;
151*4882a593Smuzhiyun 	__le16 local_port;
152*4882a593Smuzhiyun 	__le16 mss;
153*4882a593Smuzhiyun 	u8 rcv_wnd_scale;
154*4882a593Smuzhiyun 	u8 connect_mode;
155*4882a593Smuzhiyun 	__le16 syn_ip_payload_length;
156*4882a593Smuzhiyun 	__le32 syn_phy_addr_lo;
157*4882a593Smuzhiyun 	__le32 syn_phy_addr_hi;
158*4882a593Smuzhiyun 	__le32 cwnd;
159*4882a593Smuzhiyun 	u8 ka_max_probe_cnt;
160*4882a593Smuzhiyun 	u8 reserved2[3];
161*4882a593Smuzhiyun 	__le32 ka_timeout;
162*4882a593Smuzhiyun 	__le32 ka_interval;
163*4882a593Smuzhiyun 	__le32 max_rt_time;
164*4882a593Smuzhiyun 	__le32 reserved3[16];
165*4882a593Smuzhiyun };
166*4882a593Smuzhiyun 
167*4882a593Smuzhiyun /* tcp IPv4/IPv6 enum */
168*4882a593Smuzhiyun enum tcp_seg_placement_event {
169*4882a593Smuzhiyun 	TCP_EVENT_ADD_PEN,
170*4882a593Smuzhiyun 	TCP_EVENT_ADD_NEW_ISLE,
171*4882a593Smuzhiyun 	TCP_EVENT_ADD_ISLE_RIGHT,
172*4882a593Smuzhiyun 	TCP_EVENT_ADD_ISLE_LEFT,
173*4882a593Smuzhiyun 	TCP_EVENT_JOIN,
174*4882a593Smuzhiyun 	TCP_EVENT_DELETE_ISLES,
175*4882a593Smuzhiyun 	TCP_EVENT_NOP,
176*4882a593Smuzhiyun 	MAX_TCP_SEG_PLACEMENT_EVENT
177*4882a593Smuzhiyun };
178*4882a593Smuzhiyun 
179*4882a593Smuzhiyun /* tcp init parameters */
180*4882a593Smuzhiyun struct tcp_update_params {
181*4882a593Smuzhiyun 	__le16 flags;
182*4882a593Smuzhiyun #define TCP_UPDATE_PARAMS_REMOTE_MAC_ADDR_CHANGED_MASK		0x1
183*4882a593Smuzhiyun #define TCP_UPDATE_PARAMS_REMOTE_MAC_ADDR_CHANGED_SHIFT		0
184*4882a593Smuzhiyun #define TCP_UPDATE_PARAMS_MSS_CHANGED_MASK			0x1
185*4882a593Smuzhiyun #define TCP_UPDATE_PARAMS_MSS_CHANGED_SHIFT			1
186*4882a593Smuzhiyun #define TCP_UPDATE_PARAMS_TTL_CHANGED_MASK			0x1
187*4882a593Smuzhiyun #define TCP_UPDATE_PARAMS_TTL_CHANGED_SHIFT			2
188*4882a593Smuzhiyun #define TCP_UPDATE_PARAMS_TOS_OR_TC_CHANGED_MASK		0x1
189*4882a593Smuzhiyun #define TCP_UPDATE_PARAMS_TOS_OR_TC_CHANGED_SHIFT		3
190*4882a593Smuzhiyun #define TCP_UPDATE_PARAMS_KA_TIMEOUT_CHANGED_MASK		0x1
191*4882a593Smuzhiyun #define TCP_UPDATE_PARAMS_KA_TIMEOUT_CHANGED_SHIFT		4
192*4882a593Smuzhiyun #define TCP_UPDATE_PARAMS_KA_INTERVAL_CHANGED_MASK		0x1
193*4882a593Smuzhiyun #define TCP_UPDATE_PARAMS_KA_INTERVAL_CHANGED_SHIFT		5
194*4882a593Smuzhiyun #define TCP_UPDATE_PARAMS_MAX_RT_TIME_CHANGED_MASK		0x1
195*4882a593Smuzhiyun #define TCP_UPDATE_PARAMS_MAX_RT_TIME_CHANGED_SHIFT		6
196*4882a593Smuzhiyun #define TCP_UPDATE_PARAMS_FLOW_LABEL_CHANGED_MASK		0x1
197*4882a593Smuzhiyun #define TCP_UPDATE_PARAMS_FLOW_LABEL_CHANGED_SHIFT		7
198*4882a593Smuzhiyun #define TCP_UPDATE_PARAMS_INITIAL_RCV_WND_CHANGED_MASK		0x1
199*4882a593Smuzhiyun #define TCP_UPDATE_PARAMS_INITIAL_RCV_WND_CHANGED_SHIFT		8
200*4882a593Smuzhiyun #define TCP_UPDATE_PARAMS_KA_MAX_PROBE_CNT_CHANGED_MASK		0x1
201*4882a593Smuzhiyun #define TCP_UPDATE_PARAMS_KA_MAX_PROBE_CNT_CHANGED_SHIFT	9
202*4882a593Smuzhiyun #define TCP_UPDATE_PARAMS_KA_EN_CHANGED_MASK			0x1
203*4882a593Smuzhiyun #define TCP_UPDATE_PARAMS_KA_EN_CHANGED_SHIFT			10
204*4882a593Smuzhiyun #define TCP_UPDATE_PARAMS_NAGLE_EN_CHANGED_MASK			0x1
205*4882a593Smuzhiyun #define TCP_UPDATE_PARAMS_NAGLE_EN_CHANGED_SHIFT		11
206*4882a593Smuzhiyun #define TCP_UPDATE_PARAMS_KA_EN_MASK				0x1
207*4882a593Smuzhiyun #define TCP_UPDATE_PARAMS_KA_EN_SHIFT				12
208*4882a593Smuzhiyun #define TCP_UPDATE_PARAMS_NAGLE_EN_MASK				0x1
209*4882a593Smuzhiyun #define TCP_UPDATE_PARAMS_NAGLE_EN_SHIFT			13
210*4882a593Smuzhiyun #define TCP_UPDATE_PARAMS_KA_RESTART_MASK			0x1
211*4882a593Smuzhiyun #define TCP_UPDATE_PARAMS_KA_RESTART_SHIFT			14
212*4882a593Smuzhiyun #define TCP_UPDATE_PARAMS_RETRANSMIT_RESTART_MASK		0x1
213*4882a593Smuzhiyun #define TCP_UPDATE_PARAMS_RETRANSMIT_RESTART_SHIFT		15
214*4882a593Smuzhiyun 	__le16 remote_mac_addr_lo;
215*4882a593Smuzhiyun 	__le16 remote_mac_addr_mid;
216*4882a593Smuzhiyun 	__le16 remote_mac_addr_hi;
217*4882a593Smuzhiyun 	__le16 mss;
218*4882a593Smuzhiyun 	u8 ttl;
219*4882a593Smuzhiyun 	u8 tos_or_tc;
220*4882a593Smuzhiyun 	__le32 ka_timeout;
221*4882a593Smuzhiyun 	__le32 ka_interval;
222*4882a593Smuzhiyun 	__le32 max_rt_time;
223*4882a593Smuzhiyun 	__le32 flow_label;
224*4882a593Smuzhiyun 	__le32 initial_rcv_wnd;
225*4882a593Smuzhiyun 	u8 ka_max_probe_cnt;
226*4882a593Smuzhiyun 	u8 reserved1[7];
227*4882a593Smuzhiyun };
228*4882a593Smuzhiyun 
229*4882a593Smuzhiyun /* toe upload parameters */
230*4882a593Smuzhiyun struct tcp_upload_params {
231*4882a593Smuzhiyun 	__le32 rcv_next;
232*4882a593Smuzhiyun 	__le32 snd_una;
233*4882a593Smuzhiyun 	__le32 snd_next;
234*4882a593Smuzhiyun 	__le32 snd_max;
235*4882a593Smuzhiyun 	__le32 snd_wnd;
236*4882a593Smuzhiyun 	__le32 rcv_wnd;
237*4882a593Smuzhiyun 	__le32 snd_wl1;
238*4882a593Smuzhiyun 	__le32 cwnd;
239*4882a593Smuzhiyun 	__le32 ss_thresh;
240*4882a593Smuzhiyun 	__le16 srtt;
241*4882a593Smuzhiyun 	__le16 rtt_var;
242*4882a593Smuzhiyun 	__le32 ts_time;
243*4882a593Smuzhiyun 	__le32 ts_recent;
244*4882a593Smuzhiyun 	__le32 ts_recent_age;
245*4882a593Smuzhiyun 	__le32 total_rt;
246*4882a593Smuzhiyun 	__le32 ka_timeout_delta;
247*4882a593Smuzhiyun 	__le32 rt_timeout_delta;
248*4882a593Smuzhiyun 	u8 dup_ack_cnt;
249*4882a593Smuzhiyun 	u8 snd_wnd_probe_cnt;
250*4882a593Smuzhiyun 	u8 ka_probe_cnt;
251*4882a593Smuzhiyun 	u8 rt_cnt;
252*4882a593Smuzhiyun 	__le32 reserved;
253*4882a593Smuzhiyun };
254*4882a593Smuzhiyun 
255*4882a593Smuzhiyun #endif /* __TCP_COMMON__ */
256