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