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