blob: 65b95fd251019a4e63dfb7d129cad5cee66c5be6 [file] [log] [blame]
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001/* QLogic qed NIC Driver
Mintz, Yuvale8f1cb52017-01-01 13:57:00 +02002 * Copyright (c) 2015-2017 QLogic Corporation
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03003 *
Mintz, Yuvale8f1cb52017-01-01 13:57:00 +02004 * This software is available to you under a choice of one of two
5 * licenses. You may choose to be licensed under the terms of the GNU
6 * General Public License (GPL) Version 2, available from the file
7 * COPYING in the main directory of this source tree, or the
8 * OpenIB.org BSD license below:
9 *
10 * Redistribution and use in source and binary forms, with or
11 * without modification, are permitted provided that the following
12 * conditions are met:
13 *
14 * - Redistributions of source code must retain the above
15 * copyright notice, this list of conditions and the following
16 * disclaimer.
17 *
18 * - Redistributions in binary form must reproduce the above
19 * copyright notice, this list of conditions and the following
20 * disclaimer in the documentation and /or other materials
21 * provided with the distribution.
22 *
23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30 * SOFTWARE.
Yuval Mintz7a9b6b82016-06-03 14:35:33 +030031 */
32
33#ifndef __TCP_COMMON__
34#define __TCP_COMMON__
35
Tomer Tayara2e76992017-12-27 19:30:05 +020036/********************/
37/* TCP FW CONSTANTS */
38/********************/
Yuval Mintz7a9b6b82016-06-03 14:35:33 +030039
Tomer Tayara2e76992017-12-27 19:30:05 +020040#define TCP_INVALID_TIMEOUT_VAL -1
41
42/* OOO opaque data received from LL2 */
Yuval Mintz05fafbf2016-08-19 09:33:31 +030043struct ooo_opaque {
44 __le32 cid;
45 u8 drop_isle;
46 u8 drop_size;
47 u8 ooo_opcode;
48 u8 ooo_isle;
49};
50
Tomer Tayara2e76992017-12-27 19:30:05 +020051/* tcp connect mode enum */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +030052enum tcp_connect_mode {
53 TCP_CONNECT_ACTIVE,
54 TCP_CONNECT_PASSIVE,
55 MAX_TCP_CONNECT_MODE
56};
57
Tomer Tayara2e76992017-12-27 19:30:05 +020058/* tcp function init parameters */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +030059struct tcp_init_params {
Yuval Mintz05fafbf2016-08-19 09:33:31 +030060 __le32 two_msl_timer;
Yuval Mintz7a9b6b82016-06-03 14:35:33 +030061 __le16 tx_sws_timer;
Tomer Tayara2e76992017-12-27 19:30:05 +020062 u8 max_fin_rt;
Yuval Mintz05fafbf2016-08-19 09:33:31 +030063 u8 reserved[9];
Yuval Mintz7a9b6b82016-06-03 14:35:33 +030064};
65
Tomer Tayara2e76992017-12-27 19:30:05 +020066/* tcp IPv4/IPv6 enum */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +030067enum tcp_ip_version {
68 TCP_IPV4,
69 TCP_IPV6,
70 MAX_TCP_IP_VERSION
71};
72
Tomer Tayara2e76992017-12-27 19:30:05 +020073/* tcp offload parameters */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +030074struct tcp_offload_params {
75 __le16 local_mac_addr_lo;
76 __le16 local_mac_addr_mid;
77 __le16 local_mac_addr_hi;
78 __le16 remote_mac_addr_lo;
79 __le16 remote_mac_addr_mid;
80 __le16 remote_mac_addr_hi;
81 __le16 vlan_id;
82 u8 flags;
Tomer Tayara2e76992017-12-27 19:30:05 +020083#define TCP_OFFLOAD_PARAMS_TS_EN_MASK 0x1
84#define TCP_OFFLOAD_PARAMS_TS_EN_SHIFT 0
85#define TCP_OFFLOAD_PARAMS_DA_EN_MASK 0x1
86#define TCP_OFFLOAD_PARAMS_DA_EN_SHIFT 1
87#define TCP_OFFLOAD_PARAMS_KA_EN_MASK 0x1
88#define TCP_OFFLOAD_PARAMS_KA_EN_SHIFT 2
89#define TCP_OFFLOAD_PARAMS_NAGLE_EN_MASK 0x1
90#define TCP_OFFLOAD_PARAMS_NAGLE_EN_SHIFT 3
91#define TCP_OFFLOAD_PARAMS_DA_CNT_EN_MASK 0x1
92#define TCP_OFFLOAD_PARAMS_DA_CNT_EN_SHIFT 4
93#define TCP_OFFLOAD_PARAMS_FIN_SENT_MASK 0x1
94#define TCP_OFFLOAD_PARAMS_FIN_SENT_SHIFT 5
95#define TCP_OFFLOAD_PARAMS_FIN_RECEIVED_MASK 0x1
96#define TCP_OFFLOAD_PARAMS_FIN_RECEIVED_SHIFT 6
97#define TCP_OFFLOAD_PARAMS_RESERVED0_MASK 0x1
98#define TCP_OFFLOAD_PARAMS_RESERVED0_SHIFT 7
Yuval Mintz7a9b6b82016-06-03 14:35:33 +030099 u8 ip_version;
100 __le32 remote_ip[4];
101 __le32 local_ip[4];
102 __le32 flow_label;
103 u8 ttl;
104 u8 tos_or_tc;
105 __le16 remote_port;
106 __le16 local_port;
107 __le16 mss;
108 u8 rcv_wnd_scale;
109 u8 connect_mode;
110 __le16 srtt;
111 __le32 cwnd;
112 __le32 ss_thresh;
113 __le16 reserved1;
114 u8 ka_max_probe_cnt;
115 u8 dup_ack_theshold;
116 __le32 rcv_next;
117 __le32 snd_una;
118 __le32 snd_next;
119 __le32 snd_max;
120 __le32 snd_wnd;
121 __le32 rcv_wnd;
122 __le32 snd_wl1;
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300123 __le32 ts_recent;
124 __le32 ts_recent_age;
125 __le32 total_rt;
126 __le32 ka_timeout_delta;
127 __le32 rt_timeout_delta;
128 u8 dup_ack_cnt;
129 u8 snd_wnd_probe_cnt;
130 u8 ka_probe_cnt;
131 u8 rt_cnt;
132 __le16 rtt_var;
Mintz, Yuval7b6859f2017-05-18 19:41:04 +0300133 __le16 fw_internal;
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300134 __le32 ka_timeout;
135 __le32 ka_interval;
136 __le32 max_rt_time;
137 __le32 initial_rcv_wnd;
138 u8 snd_wnd_scale;
139 u8 ack_frequency;
140 __le16 da_timeout_value;
Mintz, Yuval7b6859f2017-05-18 19:41:04 +0300141 __le32 reserved3[2];
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300142};
143
Tomer Tayara2e76992017-12-27 19:30:05 +0200144/* tcp offload parameters */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300145struct tcp_offload_params_opt2 {
146 __le16 local_mac_addr_lo;
147 __le16 local_mac_addr_mid;
148 __le16 local_mac_addr_hi;
149 __le16 remote_mac_addr_lo;
150 __le16 remote_mac_addr_mid;
151 __le16 remote_mac_addr_hi;
152 __le16 vlan_id;
153 u8 flags;
Tomer Tayara2e76992017-12-27 19:30:05 +0200154#define TCP_OFFLOAD_PARAMS_OPT2_TS_EN_MASK 0x1
155#define TCP_OFFLOAD_PARAMS_OPT2_TS_EN_SHIFT 0
156#define TCP_OFFLOAD_PARAMS_OPT2_DA_EN_MASK 0x1
157#define TCP_OFFLOAD_PARAMS_OPT2_DA_EN_SHIFT 1
158#define TCP_OFFLOAD_PARAMS_OPT2_KA_EN_MASK 0x1
159#define TCP_OFFLOAD_PARAMS_OPT2_KA_EN_SHIFT 2
160#define TCP_OFFLOAD_PARAMS_OPT2_RESERVED0_MASK 0x1F
161#define TCP_OFFLOAD_PARAMS_OPT2_RESERVED0_SHIFT 3
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300162 u8 ip_version;
163 __le32 remote_ip[4];
164 __le32 local_ip[4];
165 __le32 flow_label;
166 u8 ttl;
167 u8 tos_or_tc;
168 __le16 remote_port;
169 __le16 local_port;
170 __le16 mss;
171 u8 rcv_wnd_scale;
172 u8 connect_mode;
173 __le16 syn_ip_payload_length;
174 __le32 syn_phy_addr_lo;
175 __le32 syn_phy_addr_hi;
176 __le32 reserved1[22];
177};
178
Tomer Tayara2e76992017-12-27 19:30:05 +0200179/* tcp IPv4/IPv6 enum */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300180enum tcp_seg_placement_event {
181 TCP_EVENT_ADD_PEN,
182 TCP_EVENT_ADD_NEW_ISLE,
183 TCP_EVENT_ADD_ISLE_RIGHT,
184 TCP_EVENT_ADD_ISLE_LEFT,
185 TCP_EVENT_JOIN,
Mintz, Yuvalbe086e72017-03-11 18:39:18 +0200186 TCP_EVENT_DELETE_ISLES,
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300187 TCP_EVENT_NOP,
188 MAX_TCP_SEG_PLACEMENT_EVENT
189};
190
Tomer Tayara2e76992017-12-27 19:30:05 +0200191/* tcp init parameters */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300192struct tcp_update_params {
193 __le16 flags;
Tomer Tayara2e76992017-12-27 19:30:05 +0200194#define TCP_UPDATE_PARAMS_REMOTE_MAC_ADDR_CHANGED_MASK 0x1
195#define TCP_UPDATE_PARAMS_REMOTE_MAC_ADDR_CHANGED_SHIFT 0
196#define TCP_UPDATE_PARAMS_MSS_CHANGED_MASK 0x1
197#define TCP_UPDATE_PARAMS_MSS_CHANGED_SHIFT 1
198#define TCP_UPDATE_PARAMS_TTL_CHANGED_MASK 0x1
199#define TCP_UPDATE_PARAMS_TTL_CHANGED_SHIFT 2
200#define TCP_UPDATE_PARAMS_TOS_OR_TC_CHANGED_MASK 0x1
201#define TCP_UPDATE_PARAMS_TOS_OR_TC_CHANGED_SHIFT 3
202#define TCP_UPDATE_PARAMS_KA_TIMEOUT_CHANGED_MASK 0x1
203#define TCP_UPDATE_PARAMS_KA_TIMEOUT_CHANGED_SHIFT 4
204#define TCP_UPDATE_PARAMS_KA_INTERVAL_CHANGED_MASK 0x1
205#define TCP_UPDATE_PARAMS_KA_INTERVAL_CHANGED_SHIFT 5
206#define TCP_UPDATE_PARAMS_MAX_RT_TIME_CHANGED_MASK 0x1
207#define TCP_UPDATE_PARAMS_MAX_RT_TIME_CHANGED_SHIFT 6
208#define TCP_UPDATE_PARAMS_FLOW_LABEL_CHANGED_MASK 0x1
209#define TCP_UPDATE_PARAMS_FLOW_LABEL_CHANGED_SHIFT 7
210#define TCP_UPDATE_PARAMS_INITIAL_RCV_WND_CHANGED_MASK 0x1
211#define TCP_UPDATE_PARAMS_INITIAL_RCV_WND_CHANGED_SHIFT 8
212#define TCP_UPDATE_PARAMS_KA_MAX_PROBE_CNT_CHANGED_MASK 0x1
213#define TCP_UPDATE_PARAMS_KA_MAX_PROBE_CNT_CHANGED_SHIFT 9
214#define TCP_UPDATE_PARAMS_KA_EN_CHANGED_MASK 0x1
215#define TCP_UPDATE_PARAMS_KA_EN_CHANGED_SHIFT 10
216#define TCP_UPDATE_PARAMS_NAGLE_EN_CHANGED_MASK 0x1
217#define TCP_UPDATE_PARAMS_NAGLE_EN_CHANGED_SHIFT 11
218#define TCP_UPDATE_PARAMS_KA_EN_MASK 0x1
219#define TCP_UPDATE_PARAMS_KA_EN_SHIFT 12
220#define TCP_UPDATE_PARAMS_NAGLE_EN_MASK 0x1
221#define TCP_UPDATE_PARAMS_NAGLE_EN_SHIFT 13
222#define TCP_UPDATE_PARAMS_KA_RESTART_MASK 0x1
223#define TCP_UPDATE_PARAMS_KA_RESTART_SHIFT 14
224#define TCP_UPDATE_PARAMS_RETRANSMIT_RESTART_MASK 0x1
225#define TCP_UPDATE_PARAMS_RETRANSMIT_RESTART_SHIFT 15
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300226 __le16 remote_mac_addr_lo;
227 __le16 remote_mac_addr_mid;
228 __le16 remote_mac_addr_hi;
229 __le16 mss;
230 u8 ttl;
231 u8 tos_or_tc;
232 __le32 ka_timeout;
233 __le32 ka_interval;
234 __le32 max_rt_time;
235 __le32 flow_label;
236 __le32 initial_rcv_wnd;
237 u8 ka_max_probe_cnt;
238 u8 reserved1[7];
239};
240
Tomer Tayara2e76992017-12-27 19:30:05 +0200241/* toe upload parameters */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300242struct tcp_upload_params {
243 __le32 rcv_next;
244 __le32 snd_una;
245 __le32 snd_next;
246 __le32 snd_max;
247 __le32 snd_wnd;
248 __le32 rcv_wnd;
249 __le32 snd_wl1;
250 __le32 cwnd;
251 __le32 ss_thresh;
252 __le16 srtt;
253 __le16 rtt_var;
254 __le32 ts_time;
255 __le32 ts_recent;
256 __le32 ts_recent_age;
257 __le32 total_rt;
258 __le32 ka_timeout_delta;
259 __le32 rt_timeout_delta;
260 u8 dup_ack_cnt;
261 u8 snd_wnd_probe_cnt;
262 u8 ka_probe_cnt;
263 u8 rt_cnt;
264 __le32 reserved;
265};
266
267#endif /* __TCP_COMMON__ */