0001
0002
0003
0004
0005
0006
0007 #ifndef __TCP_COMMON__
0008 #define __TCP_COMMON__
0009
0010
0011
0012
0013
0014 #define TCP_INVALID_TIMEOUT_VAL -1
0015
0016
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
0026 enum tcp_connect_mode {
0027 TCP_CONNECT_ACTIVE,
0028 TCP_CONNECT_PASSIVE,
0029 MAX_TCP_CONNECT_MODE
0030 };
0031
0032
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
0041 enum tcp_ip_version {
0042 TCP_IPV4,
0043 TCP_IPV6,
0044 MAX_TCP_IP_VERSION
0045 };
0046
0047
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
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
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
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
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