xref: /freebsd/sys/dev/qlnx/qlnxe/tcp_common.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
111e25f0dSDavid C Somayajulu /*
211e25f0dSDavid C Somayajulu  * Copyright (c) 2017-2018 Cavium, Inc.
311e25f0dSDavid C Somayajulu  * All rights reserved.
411e25f0dSDavid C Somayajulu  *
511e25f0dSDavid C Somayajulu  *  Redistribution and use in source and binary forms, with or without
611e25f0dSDavid C Somayajulu  *  modification, are permitted provided that the following conditions
711e25f0dSDavid C Somayajulu  *  are met:
811e25f0dSDavid C Somayajulu  *
911e25f0dSDavid C Somayajulu  *  1. Redistributions of source code must retain the above copyright
1011e25f0dSDavid C Somayajulu  *     notice, this list of conditions and the following disclaimer.
1111e25f0dSDavid C Somayajulu  *  2. Redistributions in binary form must reproduce the above copyright
1211e25f0dSDavid C Somayajulu  *     notice, this list of conditions and the following disclaimer in the
1311e25f0dSDavid C Somayajulu  *     documentation and/or other materials provided with the distribution.
1411e25f0dSDavid C Somayajulu  *
1511e25f0dSDavid C Somayajulu  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
1611e25f0dSDavid C Somayajulu  *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1711e25f0dSDavid C Somayajulu  *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1811e25f0dSDavid C Somayajulu  *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
1911e25f0dSDavid C Somayajulu  *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2011e25f0dSDavid C Somayajulu  *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2111e25f0dSDavid C Somayajulu  *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2211e25f0dSDavid C Somayajulu  *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2311e25f0dSDavid C Somayajulu  *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2411e25f0dSDavid C Somayajulu  *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
2511e25f0dSDavid C Somayajulu  *  POSSIBILITY OF SUCH DAMAGE.
2611e25f0dSDavid C Somayajulu  *
2711e25f0dSDavid C Somayajulu  */
2811e25f0dSDavid C Somayajulu 
2911e25f0dSDavid C Somayajulu #ifndef __TCP_COMMON__
3011e25f0dSDavid C Somayajulu #define __TCP_COMMON__
3111e25f0dSDavid C Somayajulu /********************/
3211e25f0dSDavid C Somayajulu /* TCP FW CONSTANTS */
3311e25f0dSDavid C Somayajulu /********************/
3411e25f0dSDavid C Somayajulu 
3511e25f0dSDavid C Somayajulu #define TCP_INVALID_TIMEOUT_VAL -1
3611e25f0dSDavid C Somayajulu 
3711e25f0dSDavid C Somayajulu /*
3811e25f0dSDavid C Somayajulu  * OOO opaque data received from LL2
3911e25f0dSDavid C Somayajulu  */
4011e25f0dSDavid C Somayajulu struct ooo_opaque
4111e25f0dSDavid C Somayajulu {
4211e25f0dSDavid C Somayajulu 	__le32 cid /* connection ID  */;
4311e25f0dSDavid C Somayajulu 	u8 drop_isle /* isle number of the first isle to drop */;
4411e25f0dSDavid C Somayajulu 	u8 drop_size /* number of isles to drop */;
4511e25f0dSDavid C Somayajulu 	u8 ooo_opcode /* (use enum tcp_seg_placement_event) */;
4611e25f0dSDavid C Somayajulu 	u8 ooo_isle /* OOO isle number to add the packet to */;
4711e25f0dSDavid C Somayajulu };
4811e25f0dSDavid C Somayajulu 
4911e25f0dSDavid C Somayajulu /*
5011e25f0dSDavid C Somayajulu  * tcp connect mode enum
5111e25f0dSDavid C Somayajulu  */
5211e25f0dSDavid C Somayajulu enum tcp_connect_mode
5311e25f0dSDavid C Somayajulu {
5411e25f0dSDavid C Somayajulu 	TCP_CONNECT_ACTIVE,
5511e25f0dSDavid C Somayajulu 	TCP_CONNECT_PASSIVE,
5611e25f0dSDavid C Somayajulu 	MAX_TCP_CONNECT_MODE
5711e25f0dSDavid C Somayajulu };
5811e25f0dSDavid C Somayajulu 
5911e25f0dSDavid C Somayajulu /*
6011e25f0dSDavid C Somayajulu  * tcp function init parameters
6111e25f0dSDavid C Somayajulu  */
6211e25f0dSDavid C Somayajulu struct tcp_init_params
6311e25f0dSDavid C Somayajulu {
6411e25f0dSDavid C Somayajulu 	__le32 two_msl_timer /* 2MSL (used for TIME_WAIT state) timeout value */;
6511e25f0dSDavid C Somayajulu 	__le16 tx_sws_timer /* Transmission silly window syndrom timeout value */;
66*217ec208SDavid C Somayajulu 	u8 max_fin_rt /* Minimum Fin RT */;
6711e25f0dSDavid C Somayajulu 	u8 reserved[9];
6811e25f0dSDavid C Somayajulu };
6911e25f0dSDavid C Somayajulu 
7011e25f0dSDavid C Somayajulu /*
7111e25f0dSDavid C Somayajulu  * tcp IPv4/IPv6 enum
7211e25f0dSDavid C Somayajulu  */
7311e25f0dSDavid C Somayajulu enum tcp_ip_version
7411e25f0dSDavid C Somayajulu {
7511e25f0dSDavid C Somayajulu 	TCP_IPV4,
7611e25f0dSDavid C Somayajulu 	TCP_IPV6,
7711e25f0dSDavid C Somayajulu 	MAX_TCP_IP_VERSION
7811e25f0dSDavid C Somayajulu };
7911e25f0dSDavid C Somayajulu 
8011e25f0dSDavid C Somayajulu /*
8111e25f0dSDavid C Somayajulu  * tcp offload parameters
8211e25f0dSDavid C Somayajulu  */
8311e25f0dSDavid C Somayajulu struct tcp_offload_params
8411e25f0dSDavid C Somayajulu {
8511e25f0dSDavid C Somayajulu 	__le16 local_mac_addr_lo;
8611e25f0dSDavid C Somayajulu 	__le16 local_mac_addr_mid;
8711e25f0dSDavid C Somayajulu 	__le16 local_mac_addr_hi;
8811e25f0dSDavid C Somayajulu 	__le16 remote_mac_addr_lo;
8911e25f0dSDavid C Somayajulu 	__le16 remote_mac_addr_mid;
9011e25f0dSDavid C Somayajulu 	__le16 remote_mac_addr_hi;
9111e25f0dSDavid C Somayajulu 	__le16 vlan_id;
92*217ec208SDavid C Somayajulu 	__le16 flags;
9311e25f0dSDavid C Somayajulu #define TCP_OFFLOAD_PARAMS_TS_EN_MASK            0x1 /* timestamp enable */
9411e25f0dSDavid C Somayajulu #define TCP_OFFLOAD_PARAMS_TS_EN_SHIFT           0
9511e25f0dSDavid C Somayajulu #define TCP_OFFLOAD_PARAMS_DA_EN_MASK            0x1 /* delayed ack enabled */
9611e25f0dSDavid C Somayajulu #define TCP_OFFLOAD_PARAMS_DA_EN_SHIFT           1
9711e25f0dSDavid C Somayajulu #define TCP_OFFLOAD_PARAMS_KA_EN_MASK            0x1 /* keep alive enabled */
9811e25f0dSDavid C Somayajulu #define TCP_OFFLOAD_PARAMS_KA_EN_SHIFT           2
99*217ec208SDavid C Somayajulu #define TCP_OFFLOAD_PARAMS_ECN_SENDER_EN_MASK    0x1 /* ECN sender enabled */
100*217ec208SDavid C Somayajulu #define TCP_OFFLOAD_PARAMS_ECN_SENDER_EN_SHIFT   3
101*217ec208SDavid C Somayajulu #define TCP_OFFLOAD_PARAMS_ECN_RECEIVER_EN_MASK  0x1 /* ECN receiver enabled */
102*217ec208SDavid C Somayajulu #define TCP_OFFLOAD_PARAMS_ECN_RECEIVER_EN_SHIFT 4
10311e25f0dSDavid C Somayajulu #define TCP_OFFLOAD_PARAMS_NAGLE_EN_MASK         0x1 /* nagle algorithm enabled */
104*217ec208SDavid C Somayajulu #define TCP_OFFLOAD_PARAMS_NAGLE_EN_SHIFT        5
10511e25f0dSDavid C Somayajulu #define TCP_OFFLOAD_PARAMS_DA_CNT_EN_MASK        0x1 /* delayed ack counter enabled */
106*217ec208SDavid C Somayajulu #define TCP_OFFLOAD_PARAMS_DA_CNT_EN_SHIFT       6
10711e25f0dSDavid C Somayajulu #define TCP_OFFLOAD_PARAMS_FIN_SENT_MASK         0x1 /* fin already sent to far end */
108*217ec208SDavid C Somayajulu #define TCP_OFFLOAD_PARAMS_FIN_SENT_SHIFT        7
10911e25f0dSDavid C Somayajulu #define TCP_OFFLOAD_PARAMS_FIN_RECEIVED_MASK     0x1 /* fin received */
110*217ec208SDavid C Somayajulu #define TCP_OFFLOAD_PARAMS_FIN_RECEIVED_SHIFT    8
111*217ec208SDavid C Somayajulu #define TCP_OFFLOAD_PARAMS_RESERVED_MASK         0x7F
112*217ec208SDavid C Somayajulu #define TCP_OFFLOAD_PARAMS_RESERVED_SHIFT        9
113*217ec208SDavid C Somayajulu 	u8 ip_version /*  (use enum tcp_ip_version) */;
114*217ec208SDavid C Somayajulu 	u8 reserved0[3];
11511e25f0dSDavid C Somayajulu 	__le32 remote_ip[4];
11611e25f0dSDavid C Somayajulu 	__le32 local_ip[4];
11711e25f0dSDavid C Somayajulu 	__le32 flow_label;
11811e25f0dSDavid C Somayajulu 	u8 ttl;
11911e25f0dSDavid C Somayajulu 	u8 tos_or_tc;
12011e25f0dSDavid C Somayajulu 	__le16 remote_port;
12111e25f0dSDavid C Somayajulu 	__le16 local_port;
12211e25f0dSDavid C Somayajulu 	__le16 mss /* the mss derived from remote mss and local mtu, ipVersion options and tags */;
12311e25f0dSDavid C Somayajulu 	u8 rcv_wnd_scale;
124*217ec208SDavid C Somayajulu 	u8 connect_mode /* TCP connect mode: use enum tcp_connect_mode (use enum tcp_connect_mode) */;
12511e25f0dSDavid C Somayajulu 	__le16 srtt /* in ms */;
12611e25f0dSDavid C Somayajulu 	__le32 ss_thresh;
127*217ec208SDavid C Somayajulu 	__le32 rcv_wnd /* absolute receive window (not scaled) */;
128*217ec208SDavid C Somayajulu 	__le32 cwnd /* absolute congestion window */;
12911e25f0dSDavid C Somayajulu 	u8 ka_max_probe_cnt;
13011e25f0dSDavid C Somayajulu 	u8 dup_ack_theshold;
131*217ec208SDavid C Somayajulu 	__le16 reserved1;
132*217ec208SDavid C Somayajulu 	__le32 ka_timeout /* This member specifies, in ms, the timeout interval for inactivity before sending a keepalive probe */;
133*217ec208SDavid C Somayajulu 	__le32 ka_interval /* This member specifies, in ms, the timeout after which to retransmit a keepalive frame if no response is received to a keepalive probe  */;
134*217ec208SDavid C Somayajulu 	__le32 max_rt_time /* This member specifies, in ms, the maximum time that the offload target should spend retransmitting a segment */;
135*217ec208SDavid C Somayajulu 	__le32 initial_rcv_wnd /* Initial receive window */;
13611e25f0dSDavid C Somayajulu 	__le32 rcv_next;
13711e25f0dSDavid C Somayajulu 	__le32 snd_una;
13811e25f0dSDavid C Somayajulu 	__le32 snd_next;
13911e25f0dSDavid C Somayajulu 	__le32 snd_max;
14011e25f0dSDavid C Somayajulu 	__le32 snd_wnd /* absolute send window (not scaled) */;
14111e25f0dSDavid C Somayajulu 	__le32 snd_wl1 /* the segment sequence number used for the last window update */;
14211e25f0dSDavid C Somayajulu 	__le32 ts_recent /* The timestamp value to send in the next ACK */;
14311e25f0dSDavid C Somayajulu 	__le32 ts_recent_age /* The length of time, in ms, since the most recent timestamp was received */;
14411e25f0dSDavid C Somayajulu 	__le32 total_rt /* The total time, in ms, that has been spent retransmitting the current TCP segment */;
14511e25f0dSDavid C Somayajulu 	__le32 ka_timeout_delta /* The time remaining, in clock ticks, until the next keepalive timeout. A value of -1 indicates that the keepalive timer was not running when the connection was offloaded. */;
14611e25f0dSDavid C Somayajulu 	__le32 rt_timeout_delta /* The time remaining, in clock ticks, until the next retransmit timeout. A value of -1 indicates that the  retransmit timer was not running when the connection was offloaded. */;
14711e25f0dSDavid C Somayajulu 	u8 dup_ack_cnt /* The number of ACKs that have been accepted for the same sequence number */;
14811e25f0dSDavid C Somayajulu 	u8 snd_wnd_probe_cnt /* The current send window probe round */;
14911e25f0dSDavid C Somayajulu 	u8 ka_probe_cnt /* the number of keepalive probes that have been sent that have not received a response */;
15011e25f0dSDavid C Somayajulu 	u8 rt_cnt /* The number of retransmits that have been sent */;
15111e25f0dSDavid C Somayajulu 	__le16 rtt_var /* in ms */;
15211e25f0dSDavid C Somayajulu 	__le16 fw_internal /* fw internal use - initialize value = 0 */;
15311e25f0dSDavid C Somayajulu 	u8 snd_wnd_scale;
15411e25f0dSDavid C Somayajulu 	u8 ack_frequency /* delayed ack counter threshold */;
15511e25f0dSDavid C Somayajulu 	__le16 da_timeout_value /* delayed ack timeout value in ms */;
156*217ec208SDavid C Somayajulu 	__le32 reserved3;
15711e25f0dSDavid C Somayajulu };
15811e25f0dSDavid C Somayajulu 
15911e25f0dSDavid C Somayajulu /*
16011e25f0dSDavid C Somayajulu  * tcp offload parameters
16111e25f0dSDavid C Somayajulu  */
16211e25f0dSDavid C Somayajulu struct tcp_offload_params_opt2
16311e25f0dSDavid C Somayajulu {
16411e25f0dSDavid C Somayajulu 	__le16 local_mac_addr_lo;
16511e25f0dSDavid C Somayajulu 	__le16 local_mac_addr_mid;
16611e25f0dSDavid C Somayajulu 	__le16 local_mac_addr_hi;
16711e25f0dSDavid C Somayajulu 	__le16 remote_mac_addr_lo;
16811e25f0dSDavid C Somayajulu 	__le16 remote_mac_addr_mid;
16911e25f0dSDavid C Somayajulu 	__le16 remote_mac_addr_hi;
17011e25f0dSDavid C Somayajulu 	__le16 vlan_id;
171*217ec208SDavid C Somayajulu 	__le16 flags;
17211e25f0dSDavid C Somayajulu #define TCP_OFFLOAD_PARAMS_OPT2_TS_EN_MASK      0x1 /* timestamp enable */
17311e25f0dSDavid C Somayajulu #define TCP_OFFLOAD_PARAMS_OPT2_TS_EN_SHIFT     0
17411e25f0dSDavid C Somayajulu #define TCP_OFFLOAD_PARAMS_OPT2_DA_EN_MASK      0x1 /* delayed ack enabled */
17511e25f0dSDavid C Somayajulu #define TCP_OFFLOAD_PARAMS_OPT2_DA_EN_SHIFT     1
17611e25f0dSDavid C Somayajulu #define TCP_OFFLOAD_PARAMS_OPT2_KA_EN_MASK      0x1 /* keep alive enabled */
17711e25f0dSDavid C Somayajulu #define TCP_OFFLOAD_PARAMS_OPT2_KA_EN_SHIFT     2
178*217ec208SDavid C Somayajulu #define TCP_OFFLOAD_PARAMS_OPT2_ECN_EN_MASK     0x1 /* ECN enabled */
179*217ec208SDavid C Somayajulu #define TCP_OFFLOAD_PARAMS_OPT2_ECN_EN_SHIFT    3
180*217ec208SDavid C Somayajulu #define TCP_OFFLOAD_PARAMS_OPT2_RESERVED0_MASK  0xFFF
181*217ec208SDavid C Somayajulu #define TCP_OFFLOAD_PARAMS_OPT2_RESERVED0_SHIFT 4
182*217ec208SDavid C Somayajulu 	u8 ip_version /*  (use enum tcp_ip_version) */;
183*217ec208SDavid C Somayajulu 	u8 reserved1[3];
18411e25f0dSDavid C Somayajulu 	__le32 remote_ip[4];
18511e25f0dSDavid C Somayajulu 	__le32 local_ip[4];
18611e25f0dSDavid C Somayajulu 	__le32 flow_label;
18711e25f0dSDavid C Somayajulu 	u8 ttl;
18811e25f0dSDavid C Somayajulu 	u8 tos_or_tc;
18911e25f0dSDavid C Somayajulu 	__le16 remote_port;
19011e25f0dSDavid C Somayajulu 	__le16 local_port;
19111e25f0dSDavid C Somayajulu 	__le16 mss /* the mss derived from remote mss and local mtu, ipVersion options and tags */;
19211e25f0dSDavid C Somayajulu 	u8 rcv_wnd_scale;
193*217ec208SDavid C Somayajulu 	u8 connect_mode /* TCP connect mode: use enum tcp_connect_mode (use enum tcp_connect_mode) */;
19411e25f0dSDavid C Somayajulu 	__le16 syn_ip_payload_length /* length of Tcp header in SYN packet - relevent for passive mode */;
19511e25f0dSDavid C Somayajulu 	__le32 syn_phy_addr_lo /* physical address (low) of SYN buffer - relevent for passive mode */;
19611e25f0dSDavid C Somayajulu 	__le32 syn_phy_addr_hi /* physical address (high) of SYN buffer - relevent for passive mode */;
197*217ec208SDavid C Somayajulu 	__le32 cwnd /* absolute congestion window */;
198*217ec208SDavid C Somayajulu 	u8 ka_max_probe_cnt;
199*217ec208SDavid C Somayajulu 	u8 reserved2[3];
200*217ec208SDavid C Somayajulu 	__le32 ka_timeout /* This member specifies, in ms, the timeout interval for inactivity before sending a keepalive probe */;
201*217ec208SDavid C Somayajulu 	__le32 ka_interval /* This member specifies, in ms, the timeout after which to retransmit a keepalive frame if no response is received to a keepalive probe  */;
202*217ec208SDavid C Somayajulu 	__le32 max_rt_time /* This member specifies, in ms, the maximum time that the offload target should spend retransmitting a segment */;
203*217ec208SDavid C Somayajulu 	__le32 reserved3[16];
20411e25f0dSDavid C Somayajulu };
20511e25f0dSDavid C Somayajulu 
20611e25f0dSDavid C Somayajulu /*
20711e25f0dSDavid C Somayajulu  * tcp IPv4/IPv6 enum
20811e25f0dSDavid C Somayajulu  */
20911e25f0dSDavid C Somayajulu enum tcp_seg_placement_event
21011e25f0dSDavid C Somayajulu {
21111e25f0dSDavid C Somayajulu 	TCP_EVENT_ADD_PEN,
21211e25f0dSDavid C Somayajulu 	TCP_EVENT_ADD_NEW_ISLE,
21311e25f0dSDavid C Somayajulu 	TCP_EVENT_ADD_ISLE_RIGHT,
21411e25f0dSDavid C Somayajulu 	TCP_EVENT_ADD_ISLE_LEFT,
21511e25f0dSDavid C Somayajulu 	TCP_EVENT_JOIN,
21611e25f0dSDavid C Somayajulu 	TCP_EVENT_DELETE_ISLES,
21711e25f0dSDavid C Somayajulu 	TCP_EVENT_NOP,
21811e25f0dSDavid C Somayajulu 	MAX_TCP_SEG_PLACEMENT_EVENT
21911e25f0dSDavid C Somayajulu };
22011e25f0dSDavid C Somayajulu 
22111e25f0dSDavid C Somayajulu /*
22211e25f0dSDavid C Somayajulu  * tcp init parameters
22311e25f0dSDavid C Somayajulu  */
22411e25f0dSDavid C Somayajulu struct tcp_update_params
22511e25f0dSDavid C Somayajulu {
22611e25f0dSDavid C Somayajulu 	__le16 flags;
22711e25f0dSDavid C Somayajulu #define TCP_UPDATE_PARAMS_REMOTE_MAC_ADDR_CHANGED_MASK   0x1
22811e25f0dSDavid C Somayajulu #define TCP_UPDATE_PARAMS_REMOTE_MAC_ADDR_CHANGED_SHIFT  0
22911e25f0dSDavid C Somayajulu #define TCP_UPDATE_PARAMS_MSS_CHANGED_MASK               0x1
23011e25f0dSDavid C Somayajulu #define TCP_UPDATE_PARAMS_MSS_CHANGED_SHIFT              1
23111e25f0dSDavid C Somayajulu #define TCP_UPDATE_PARAMS_TTL_CHANGED_MASK               0x1
23211e25f0dSDavid C Somayajulu #define TCP_UPDATE_PARAMS_TTL_CHANGED_SHIFT              2
23311e25f0dSDavid C Somayajulu #define TCP_UPDATE_PARAMS_TOS_OR_TC_CHANGED_MASK         0x1
23411e25f0dSDavid C Somayajulu #define TCP_UPDATE_PARAMS_TOS_OR_TC_CHANGED_SHIFT        3
23511e25f0dSDavid C Somayajulu #define TCP_UPDATE_PARAMS_KA_TIMEOUT_CHANGED_MASK        0x1
23611e25f0dSDavid C Somayajulu #define TCP_UPDATE_PARAMS_KA_TIMEOUT_CHANGED_SHIFT       4
23711e25f0dSDavid C Somayajulu #define TCP_UPDATE_PARAMS_KA_INTERVAL_CHANGED_MASK       0x1
23811e25f0dSDavid C Somayajulu #define TCP_UPDATE_PARAMS_KA_INTERVAL_CHANGED_SHIFT      5
23911e25f0dSDavid C Somayajulu #define TCP_UPDATE_PARAMS_MAX_RT_TIME_CHANGED_MASK       0x1
24011e25f0dSDavid C Somayajulu #define TCP_UPDATE_PARAMS_MAX_RT_TIME_CHANGED_SHIFT      6
24111e25f0dSDavid C Somayajulu #define TCP_UPDATE_PARAMS_FLOW_LABEL_CHANGED_MASK        0x1
24211e25f0dSDavid C Somayajulu #define TCP_UPDATE_PARAMS_FLOW_LABEL_CHANGED_SHIFT       7
24311e25f0dSDavid C Somayajulu #define TCP_UPDATE_PARAMS_INITIAL_RCV_WND_CHANGED_MASK   0x1
24411e25f0dSDavid C Somayajulu #define TCP_UPDATE_PARAMS_INITIAL_RCV_WND_CHANGED_SHIFT  8
24511e25f0dSDavid C Somayajulu #define TCP_UPDATE_PARAMS_KA_MAX_PROBE_CNT_CHANGED_MASK  0x1
24611e25f0dSDavid C Somayajulu #define TCP_UPDATE_PARAMS_KA_MAX_PROBE_CNT_CHANGED_SHIFT 9
24711e25f0dSDavid C Somayajulu #define TCP_UPDATE_PARAMS_KA_EN_CHANGED_MASK             0x1
24811e25f0dSDavid C Somayajulu #define TCP_UPDATE_PARAMS_KA_EN_CHANGED_SHIFT            10
24911e25f0dSDavid C Somayajulu #define TCP_UPDATE_PARAMS_NAGLE_EN_CHANGED_MASK          0x1
25011e25f0dSDavid C Somayajulu #define TCP_UPDATE_PARAMS_NAGLE_EN_CHANGED_SHIFT         11
25111e25f0dSDavid C Somayajulu #define TCP_UPDATE_PARAMS_KA_EN_MASK                     0x1
25211e25f0dSDavid C Somayajulu #define TCP_UPDATE_PARAMS_KA_EN_SHIFT                    12
25311e25f0dSDavid C Somayajulu #define TCP_UPDATE_PARAMS_NAGLE_EN_MASK                  0x1
25411e25f0dSDavid C Somayajulu #define TCP_UPDATE_PARAMS_NAGLE_EN_SHIFT                 13
25511e25f0dSDavid C Somayajulu #define TCP_UPDATE_PARAMS_KA_RESTART_MASK                0x1
25611e25f0dSDavid C Somayajulu #define TCP_UPDATE_PARAMS_KA_RESTART_SHIFT               14
25711e25f0dSDavid C Somayajulu #define TCP_UPDATE_PARAMS_RETRANSMIT_RESTART_MASK        0x1
25811e25f0dSDavid C Somayajulu #define TCP_UPDATE_PARAMS_RETRANSMIT_RESTART_SHIFT       15
25911e25f0dSDavid C Somayajulu 	__le16 remote_mac_addr_lo;
26011e25f0dSDavid C Somayajulu 	__le16 remote_mac_addr_mid;
26111e25f0dSDavid C Somayajulu 	__le16 remote_mac_addr_hi;
26211e25f0dSDavid C Somayajulu 	__le16 mss;
26311e25f0dSDavid C Somayajulu 	u8 ttl;
26411e25f0dSDavid C Somayajulu 	u8 tos_or_tc;
26511e25f0dSDavid C Somayajulu 	__le32 ka_timeout;
26611e25f0dSDavid C Somayajulu 	__le32 ka_interval;
26711e25f0dSDavid C Somayajulu 	__le32 max_rt_time;
26811e25f0dSDavid C Somayajulu 	__le32 flow_label;
26911e25f0dSDavid C Somayajulu 	__le32 initial_rcv_wnd;
27011e25f0dSDavid C Somayajulu 	u8 ka_max_probe_cnt;
27111e25f0dSDavid C Somayajulu 	u8 reserved1[7];
27211e25f0dSDavid C Somayajulu };
27311e25f0dSDavid C Somayajulu 
27411e25f0dSDavid C Somayajulu /*
27511e25f0dSDavid C Somayajulu  * toe upload parameters
27611e25f0dSDavid C Somayajulu  */
27711e25f0dSDavid C Somayajulu struct tcp_upload_params
27811e25f0dSDavid C Somayajulu {
27911e25f0dSDavid C Somayajulu 	__le32 rcv_next;
28011e25f0dSDavid C Somayajulu 	__le32 snd_una;
28111e25f0dSDavid C Somayajulu 	__le32 snd_next;
28211e25f0dSDavid C Somayajulu 	__le32 snd_max;
28311e25f0dSDavid C Somayajulu 	__le32 snd_wnd /* absolute send window (not scaled) */;
28411e25f0dSDavid C Somayajulu 	__le32 rcv_wnd /* absolute receive window (not scaled) */;
28511e25f0dSDavid C Somayajulu 	__le32 snd_wl1 /* the segment sequence number used for the last window update */;
28611e25f0dSDavid C Somayajulu 	__le32 cwnd /* absolute congestion window */;
28711e25f0dSDavid C Somayajulu 	__le32 ss_thresh;
28811e25f0dSDavid C Somayajulu 	__le16 srtt /* in ms */;
28911e25f0dSDavid C Somayajulu 	__le16 rtt_var /* in ms */;
29011e25f0dSDavid C Somayajulu 	__le32 ts_time /* The current value of the adjusted timestamp */;
29111e25f0dSDavid C Somayajulu 	__le32 ts_recent /* The timestamp value to send in the next ACK */;
29211e25f0dSDavid C Somayajulu 	__le32 ts_recent_age /* The length of time, in ms, since the most recent timestamp was received */;
29311e25f0dSDavid C Somayajulu 	__le32 total_rt /* The total time, in ms, that has been spent retransmitting the current TCP segment */;
29411e25f0dSDavid C Somayajulu 	__le32 ka_timeout_delta /* The time remaining, in clock ticks, until the next keepalive timeout. A value of -1 indicates that the keepalive timer was not running when the connection was offloaded. */;
29511e25f0dSDavid C Somayajulu 	__le32 rt_timeout_delta /* The time remaining, in clock ticks, until the next retransmit timeout. A value of -1 indicates that the  retransmit timer was not running when the connection was offloaded. */;
29611e25f0dSDavid C Somayajulu 	u8 dup_ack_cnt /* The number of ACKs that have been accepted for the same sequence number */;
29711e25f0dSDavid C Somayajulu 	u8 snd_wnd_probe_cnt /* The current send window probe round */;
29811e25f0dSDavid C Somayajulu 	u8 ka_probe_cnt /* the number of keepalive probes that have been sent that have not received a response */;
29911e25f0dSDavid C Somayajulu 	u8 rt_cnt /* The number of retransmits that have been sent */;
30011e25f0dSDavid C Somayajulu 	__le32 reserved;
30111e25f0dSDavid C Somayajulu };
30211e25f0dSDavid C Somayajulu 
30311e25f0dSDavid C Somayajulu #endif /* __TCP_COMMON__ */
304