Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
0002 /* QLogic qed NIC Driver
0003  * Copyright (c) 2015-2017  QLogic Corporation
0004  * Copyright (c) 2019-2020 Marvell International Ltd.
0005  */
0006 
0007 #ifndef __TCP_COMMON__
0008 #define __TCP_COMMON__
0009 
0010 /********************/
0011 /* TCP FW CONSTANTS */
0012 /********************/
0013 
0014 #define TCP_INVALID_TIMEOUT_VAL -1
0015 
0016 /* OOO opaque data received from LL2 */
0017 struct ooo_opaque {
0018     __le32 cid;
0019     u8 drop_isle;
0020     u8 drop_size;
0021     u8 ooo_opcode;
0022     u8 ooo_isle;
0023 };
0024 
0025 /* tcp connect mode enum */
0026 enum tcp_connect_mode {
0027     TCP_CONNECT_ACTIVE,
0028     TCP_CONNECT_PASSIVE,
0029     MAX_TCP_CONNECT_MODE
0030 };
0031 
0032 /* tcp function init parameters */
0033 struct tcp_init_params {
0034     __le32 two_msl_timer;
0035     __le16 tx_sws_timer;
0036     u8 max_fin_rt;
0037     u8 reserved[9];
0038 };
0039 
0040 /* tcp IPv4/IPv6 enum */
0041 enum tcp_ip_version {
0042     TCP_IPV4,
0043     TCP_IPV6,
0044     MAX_TCP_IP_VERSION
0045 };
0046 
0047 /* tcp offload parameters */
0048 struct tcp_offload_params {
0049     __le16 local_mac_addr_lo;
0050     __le16 local_mac_addr_mid;
0051     __le16 local_mac_addr_hi;
0052     __le16 remote_mac_addr_lo;
0053     __le16 remote_mac_addr_mid;
0054     __le16 remote_mac_addr_hi;
0055     __le16 vlan_id;
0056     __le16 flags;
0057 #define TCP_OFFLOAD_PARAMS_TS_EN_MASK           0x1
0058 #define TCP_OFFLOAD_PARAMS_TS_EN_SHIFT          0
0059 #define TCP_OFFLOAD_PARAMS_DA_EN_MASK           0x1
0060 #define TCP_OFFLOAD_PARAMS_DA_EN_SHIFT          1
0061 #define TCP_OFFLOAD_PARAMS_KA_EN_MASK           0x1
0062 #define TCP_OFFLOAD_PARAMS_KA_EN_SHIFT          2
0063 #define TCP_OFFLOAD_PARAMS_ECN_SENDER_EN_MASK       0x1
0064 #define TCP_OFFLOAD_PARAMS_ECN_SENDER_EN_SHIFT      3
0065 #define TCP_OFFLOAD_PARAMS_ECN_RECEIVER_EN_MASK     0x1
0066 #define TCP_OFFLOAD_PARAMS_ECN_RECEIVER_EN_SHIFT    4
0067 #define TCP_OFFLOAD_PARAMS_NAGLE_EN_MASK        0x1
0068 #define TCP_OFFLOAD_PARAMS_NAGLE_EN_SHIFT       5
0069 #define TCP_OFFLOAD_PARAMS_DA_CNT_EN_MASK       0x1
0070 #define TCP_OFFLOAD_PARAMS_DA_CNT_EN_SHIFT      6
0071 #define TCP_OFFLOAD_PARAMS_FIN_SENT_MASK        0x1
0072 #define TCP_OFFLOAD_PARAMS_FIN_SENT_SHIFT       7
0073 #define TCP_OFFLOAD_PARAMS_FIN_RECEIVED_MASK        0x1
0074 #define TCP_OFFLOAD_PARAMS_FIN_RECEIVED_SHIFT       8
0075 #define TCP_OFFLOAD_PARAMS_RESERVED_MASK        0x7F
0076 #define TCP_OFFLOAD_PARAMS_RESERVED_SHIFT       9
0077     u8 ip_version;
0078     u8 reserved0[3];
0079     __le32 remote_ip[4];
0080     __le32 local_ip[4];
0081     __le32 flow_label;
0082     u8 ttl;
0083     u8 tos_or_tc;
0084     __le16 remote_port;
0085     __le16 local_port;
0086     __le16 mss;
0087     u8 rcv_wnd_scale;
0088     u8 connect_mode;
0089     __le16 srtt;
0090     __le32 ss_thresh;
0091     __le32 rcv_wnd;
0092     __le32 cwnd;
0093     u8 ka_max_probe_cnt;
0094     u8 dup_ack_theshold;
0095     __le16 reserved1;
0096     __le32 ka_timeout;
0097     __le32 ka_interval;
0098     __le32 max_rt_time;
0099     __le32 initial_rcv_wnd;
0100     __le32 rcv_next;
0101     __le32 snd_una;
0102     __le32 snd_next;
0103     __le32 snd_max;
0104     __le32 snd_wnd;
0105     __le32 snd_wl1;
0106     __le32 ts_recent;
0107     __le32 ts_recent_age;
0108     __le32 total_rt;
0109     __le32 ka_timeout_delta;
0110     __le32 rt_timeout_delta;
0111     u8 dup_ack_cnt;
0112     u8 snd_wnd_probe_cnt;
0113     u8 ka_probe_cnt;
0114     u8 rt_cnt;
0115     __le16 rtt_var;
0116     __le16 fw_internal;
0117     u8 snd_wnd_scale;
0118     u8 ack_frequency;
0119     __le16 da_timeout_value;
0120     __le32 reserved3;
0121 };
0122 
0123 /* tcp offload parameters */
0124 struct tcp_offload_params_opt2 {
0125     __le16 local_mac_addr_lo;
0126     __le16 local_mac_addr_mid;
0127     __le16 local_mac_addr_hi;
0128     __le16 remote_mac_addr_lo;
0129     __le16 remote_mac_addr_mid;
0130     __le16 remote_mac_addr_hi;
0131     __le16 vlan_id;
0132     __le16 flags;
0133 #define TCP_OFFLOAD_PARAMS_OPT2_TS_EN_MASK  0x1
0134 #define TCP_OFFLOAD_PARAMS_OPT2_TS_EN_SHIFT 0
0135 #define TCP_OFFLOAD_PARAMS_OPT2_DA_EN_MASK  0x1
0136 #define TCP_OFFLOAD_PARAMS_OPT2_DA_EN_SHIFT 1
0137 #define TCP_OFFLOAD_PARAMS_OPT2_KA_EN_MASK  0x1
0138 #define TCP_OFFLOAD_PARAMS_OPT2_KA_EN_SHIFT 2
0139 #define TCP_OFFLOAD_PARAMS_OPT2_ECN_EN_MASK 0x1
0140 #define TCP_OFFLOAD_PARAMS_OPT2_ECN_EN_SHIFT    3
0141 #define TCP_OFFLOAD_PARAMS_OPT2_RESERVED0_MASK  0xFFF
0142 #define TCP_OFFLOAD_PARAMS_OPT2_RESERVED0_SHIFT 4
0143     u8 ip_version;
0144     u8 reserved1[3];
0145     __le32 remote_ip[4];
0146     __le32 local_ip[4];
0147     __le32 flow_label;
0148     u8 ttl;
0149     u8 tos_or_tc;
0150     __le16 remote_port;
0151     __le16 local_port;
0152     __le16 mss;
0153     u8 rcv_wnd_scale;
0154     u8 connect_mode;
0155     __le16 syn_ip_payload_length;
0156     __le32 syn_phy_addr_lo;
0157     __le32 syn_phy_addr_hi;
0158     __le32 cwnd;
0159     u8 ka_max_probe_cnt;
0160     u8 reserved2[3];
0161     __le32 ka_timeout;
0162     __le32 ka_interval;
0163     __le32 max_rt_time;
0164     __le32 reserved3[16];
0165 };
0166 
0167 /* tcp IPv4/IPv6 enum */
0168 enum tcp_seg_placement_event {
0169     TCP_EVENT_ADD_PEN,
0170     TCP_EVENT_ADD_NEW_ISLE,
0171     TCP_EVENT_ADD_ISLE_RIGHT,
0172     TCP_EVENT_ADD_ISLE_LEFT,
0173     TCP_EVENT_JOIN,
0174     TCP_EVENT_DELETE_ISLES,
0175     TCP_EVENT_NOP,
0176     MAX_TCP_SEG_PLACEMENT_EVENT
0177 };
0178 
0179 /* tcp init parameters */
0180 struct tcp_update_params {
0181     __le16 flags;
0182 #define TCP_UPDATE_PARAMS_REMOTE_MAC_ADDR_CHANGED_MASK      0x1
0183 #define TCP_UPDATE_PARAMS_REMOTE_MAC_ADDR_CHANGED_SHIFT     0
0184 #define TCP_UPDATE_PARAMS_MSS_CHANGED_MASK          0x1
0185 #define TCP_UPDATE_PARAMS_MSS_CHANGED_SHIFT         1
0186 #define TCP_UPDATE_PARAMS_TTL_CHANGED_MASK          0x1
0187 #define TCP_UPDATE_PARAMS_TTL_CHANGED_SHIFT         2
0188 #define TCP_UPDATE_PARAMS_TOS_OR_TC_CHANGED_MASK        0x1
0189 #define TCP_UPDATE_PARAMS_TOS_OR_TC_CHANGED_SHIFT       3
0190 #define TCP_UPDATE_PARAMS_KA_TIMEOUT_CHANGED_MASK       0x1
0191 #define TCP_UPDATE_PARAMS_KA_TIMEOUT_CHANGED_SHIFT      4
0192 #define TCP_UPDATE_PARAMS_KA_INTERVAL_CHANGED_MASK      0x1
0193 #define TCP_UPDATE_PARAMS_KA_INTERVAL_CHANGED_SHIFT     5
0194 #define TCP_UPDATE_PARAMS_MAX_RT_TIME_CHANGED_MASK      0x1
0195 #define TCP_UPDATE_PARAMS_MAX_RT_TIME_CHANGED_SHIFT     6
0196 #define TCP_UPDATE_PARAMS_FLOW_LABEL_CHANGED_MASK       0x1
0197 #define TCP_UPDATE_PARAMS_FLOW_LABEL_CHANGED_SHIFT      7
0198 #define TCP_UPDATE_PARAMS_INITIAL_RCV_WND_CHANGED_MASK      0x1
0199 #define TCP_UPDATE_PARAMS_INITIAL_RCV_WND_CHANGED_SHIFT     8
0200 #define TCP_UPDATE_PARAMS_KA_MAX_PROBE_CNT_CHANGED_MASK     0x1
0201 #define TCP_UPDATE_PARAMS_KA_MAX_PROBE_CNT_CHANGED_SHIFT    9
0202 #define TCP_UPDATE_PARAMS_KA_EN_CHANGED_MASK            0x1
0203 #define TCP_UPDATE_PARAMS_KA_EN_CHANGED_SHIFT           10
0204 #define TCP_UPDATE_PARAMS_NAGLE_EN_CHANGED_MASK         0x1
0205 #define TCP_UPDATE_PARAMS_NAGLE_EN_CHANGED_SHIFT        11
0206 #define TCP_UPDATE_PARAMS_KA_EN_MASK                0x1
0207 #define TCP_UPDATE_PARAMS_KA_EN_SHIFT               12
0208 #define TCP_UPDATE_PARAMS_NAGLE_EN_MASK             0x1
0209 #define TCP_UPDATE_PARAMS_NAGLE_EN_SHIFT            13
0210 #define TCP_UPDATE_PARAMS_KA_RESTART_MASK           0x1
0211 #define TCP_UPDATE_PARAMS_KA_RESTART_SHIFT          14
0212 #define TCP_UPDATE_PARAMS_RETRANSMIT_RESTART_MASK       0x1
0213 #define TCP_UPDATE_PARAMS_RETRANSMIT_RESTART_SHIFT      15
0214     __le16 remote_mac_addr_lo;
0215     __le16 remote_mac_addr_mid;
0216     __le16 remote_mac_addr_hi;
0217     __le16 mss;
0218     u8 ttl;
0219     u8 tos_or_tc;
0220     __le32 ka_timeout;
0221     __le32 ka_interval;
0222     __le32 max_rt_time;
0223     __le32 flow_label;
0224     __le32 initial_rcv_wnd;
0225     u8 ka_max_probe_cnt;
0226     u8 reserved1[7];
0227 };
0228 
0229 /* toe upload parameters */
0230 struct tcp_upload_params {
0231     __le32 rcv_next;
0232     __le32 snd_una;
0233     __le32 snd_next;
0234     __le32 snd_max;
0235     __le32 snd_wnd;
0236     __le32 rcv_wnd;
0237     __le32 snd_wl1;
0238     __le32 cwnd;
0239     __le32 ss_thresh;
0240     __le16 srtt;
0241     __le16 rtt_var;
0242     __le32 ts_time;
0243     __le32 ts_recent;
0244     __le32 ts_recent_age;
0245     __le32 total_rt;
0246     __le32 ka_timeout_delta;
0247     __le32 rt_timeout_delta;
0248     u8 dup_ack_cnt;
0249     u8 snd_wnd_probe_cnt;
0250     u8 ka_probe_cnt;
0251     u8 rt_cnt;
0252     __le32 reserved;
0253 };
0254 
0255 #endif /* __TCP_COMMON__ */