t3_cpl.h
来自「linux 内核源代码」· C头文件 代码 · 共 1,445 行 · 第 1/3 页
H
1,445 行
/* * Copyright (c) 2004-2007 Chelsio, Inc. All rights reserved. * * This software is available to you under a choice of one of two * licenses. You may choose to be licensed under the terms of the GNU * General Public License (GPL) Version 2, available from the file * COPYING in the main directory of this source tree, or the * OpenIB.org BSD license below: * * Redistribution and use in source and binary forms, with or * without modification, are permitted provided that the following * conditions are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the following * disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials * provided with the distribution. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */#ifndef T3_CPL_H#define T3_CPL_H#if !defined(__LITTLE_ENDIAN_BITFIELD) && !defined(__BIG_ENDIAN_BITFIELD)# include <asm/byteorder.h>#endifenum CPL_opcode { CPL_PASS_OPEN_REQ = 0x1, CPL_PASS_ACCEPT_RPL = 0x2, CPL_ACT_OPEN_REQ = 0x3, CPL_SET_TCB = 0x4, CPL_SET_TCB_FIELD = 0x5, CPL_GET_TCB = 0x6, CPL_PCMD = 0x7, CPL_CLOSE_CON_REQ = 0x8, CPL_CLOSE_LISTSRV_REQ = 0x9, CPL_ABORT_REQ = 0xA, CPL_ABORT_RPL = 0xB, CPL_TX_DATA = 0xC, CPL_RX_DATA_ACK = 0xD, CPL_TX_PKT = 0xE, CPL_RTE_DELETE_REQ = 0xF, CPL_RTE_WRITE_REQ = 0x10, CPL_RTE_READ_REQ = 0x11, CPL_L2T_WRITE_REQ = 0x12, CPL_L2T_READ_REQ = 0x13, CPL_SMT_WRITE_REQ = 0x14, CPL_SMT_READ_REQ = 0x15, CPL_TX_PKT_LSO = 0x16, CPL_PCMD_READ = 0x17, CPL_BARRIER = 0x18, CPL_TID_RELEASE = 0x1A, CPL_CLOSE_LISTSRV_RPL = 0x20, CPL_ERROR = 0x21, CPL_GET_TCB_RPL = 0x22, CPL_L2T_WRITE_RPL = 0x23, CPL_PCMD_READ_RPL = 0x24, CPL_PCMD_RPL = 0x25, CPL_PEER_CLOSE = 0x26, CPL_RTE_DELETE_RPL = 0x27, CPL_RTE_WRITE_RPL = 0x28, CPL_RX_DDP_COMPLETE = 0x29, CPL_RX_PHYS_ADDR = 0x2A, CPL_RX_PKT = 0x2B, CPL_RX_URG_NOTIFY = 0x2C, CPL_SET_TCB_RPL = 0x2D, CPL_SMT_WRITE_RPL = 0x2E, CPL_TX_DATA_ACK = 0x2F, CPL_ABORT_REQ_RSS = 0x30, CPL_ABORT_RPL_RSS = 0x31, CPL_CLOSE_CON_RPL = 0x32, CPL_ISCSI_HDR = 0x33, CPL_L2T_READ_RPL = 0x34, CPL_RDMA_CQE = 0x35, CPL_RDMA_CQE_READ_RSP = 0x36, CPL_RDMA_CQE_ERR = 0x37, CPL_RTE_READ_RPL = 0x38, CPL_RX_DATA = 0x39, CPL_ACT_OPEN_RPL = 0x40, CPL_PASS_OPEN_RPL = 0x41, CPL_RX_DATA_DDP = 0x42, CPL_SMT_READ_RPL = 0x43, CPL_ACT_ESTABLISH = 0x50, CPL_PASS_ESTABLISH = 0x51, CPL_PASS_ACCEPT_REQ = 0x70, CPL_ASYNC_NOTIF = 0x80, /* fake opcode for async notifications */ CPL_TX_DMA_ACK = 0xA0, CPL_RDMA_READ_REQ = 0xA1, CPL_RDMA_TERMINATE = 0xA2, CPL_TRACE_PKT = 0xA3, CPL_RDMA_EC_STATUS = 0xA5, NUM_CPL_CMDS /* must be last and previous entries must be sorted */};enum CPL_error { CPL_ERR_NONE = 0, CPL_ERR_TCAM_PARITY = 1, CPL_ERR_TCAM_FULL = 3, CPL_ERR_CONN_RESET = 20, CPL_ERR_CONN_EXIST = 22, CPL_ERR_ARP_MISS = 23, CPL_ERR_BAD_SYN = 24, CPL_ERR_CONN_TIMEDOUT = 30, CPL_ERR_XMIT_TIMEDOUT = 31, CPL_ERR_PERSIST_TIMEDOUT = 32, CPL_ERR_FINWAIT2_TIMEDOUT = 33, CPL_ERR_KEEPALIVE_TIMEDOUT = 34, CPL_ERR_RTX_NEG_ADVICE = 35, CPL_ERR_PERSIST_NEG_ADVICE = 36, CPL_ERR_ABORT_FAILED = 42, CPL_ERR_GENERAL = 99};enum { CPL_CONN_POLICY_AUTO = 0, CPL_CONN_POLICY_ASK = 1, CPL_CONN_POLICY_DENY = 3};enum { ULP_MODE_NONE = 0, ULP_MODE_ISCSI = 2, ULP_MODE_RDMA = 4, ULP_MODE_TCPDDP = 5};enum { ULP_CRC_HEADER = 1 << 0, ULP_CRC_DATA = 1 << 1};enum { CPL_PASS_OPEN_ACCEPT, CPL_PASS_OPEN_REJECT};enum { CPL_ABORT_SEND_RST = 0, CPL_ABORT_NO_RST, CPL_ABORT_POST_CLOSE_REQ = 2};enum { /* TX_PKT_LSO ethernet types */ CPL_ETH_II, CPL_ETH_II_VLAN, CPL_ETH_802_3, CPL_ETH_802_3_VLAN};enum { /* TCP congestion control algorithms */ CONG_ALG_RENO, CONG_ALG_TAHOE, CONG_ALG_NEWRENO, CONG_ALG_HIGHSPEED};union opcode_tid { __be32 opcode_tid; __u8 opcode;};#define S_OPCODE 24#define V_OPCODE(x) ((x) << S_OPCODE)#define G_OPCODE(x) (((x) >> S_OPCODE) & 0xFF)#define G_TID(x) ((x) & 0xFFFFFF)/* tid is assumed to be 24-bits */#define MK_OPCODE_TID(opcode, tid) (V_OPCODE(opcode) | (tid))#define OPCODE_TID(cmd) ((cmd)->ot.opcode_tid)/* extract the TID from a CPL command */#define GET_TID(cmd) (G_TID(ntohl(OPCODE_TID(cmd))))struct tcp_options { __be16 mss; __u8 wsf;#if defined(__LITTLE_ENDIAN_BITFIELD) __u8:5; __u8 ecn:1; __u8 sack:1; __u8 tstamp:1;#else __u8 tstamp:1; __u8 sack:1; __u8 ecn:1; __u8:5;#endif};struct rss_header { __u8 opcode;#if defined(__LITTLE_ENDIAN_BITFIELD) __u8 cpu_idx:6; __u8 hash_type:2;#else __u8 hash_type:2; __u8 cpu_idx:6;#endif __be16 cq_idx; __be32 rss_hash_val;};#ifndef CHELSIO_FWstruct work_request_hdr { __be32 wr_hi; __be32 wr_lo;};/* wr_hi fields */#define S_WR_SGE_CREDITS 0#define M_WR_SGE_CREDITS 0xFF#define V_WR_SGE_CREDITS(x) ((x) << S_WR_SGE_CREDITS)#define G_WR_SGE_CREDITS(x) (((x) >> S_WR_SGE_CREDITS) & M_WR_SGE_CREDITS)#define S_WR_SGLSFLT 8#define M_WR_SGLSFLT 0xFF#define V_WR_SGLSFLT(x) ((x) << S_WR_SGLSFLT)#define G_WR_SGLSFLT(x) (((x) >> S_WR_SGLSFLT) & M_WR_SGLSFLT)#define S_WR_BCNTLFLT 16#define M_WR_BCNTLFLT 0xF#define V_WR_BCNTLFLT(x) ((x) << S_WR_BCNTLFLT)#define G_WR_BCNTLFLT(x) (((x) >> S_WR_BCNTLFLT) & M_WR_BCNTLFLT)#define S_WR_DATATYPE 20#define V_WR_DATATYPE(x) ((x) << S_WR_DATATYPE)#define F_WR_DATATYPE V_WR_DATATYPE(1U)#define S_WR_COMPL 21#define V_WR_COMPL(x) ((x) << S_WR_COMPL)#define F_WR_COMPL V_WR_COMPL(1U)#define S_WR_EOP 22#define V_WR_EOP(x) ((x) << S_WR_EOP)#define F_WR_EOP V_WR_EOP(1U)#define S_WR_SOP 23#define V_WR_SOP(x) ((x) << S_WR_SOP)#define F_WR_SOP V_WR_SOP(1U)#define S_WR_OP 24#define M_WR_OP 0xFF#define V_WR_OP(x) ((x) << S_WR_OP)#define G_WR_OP(x) (((x) >> S_WR_OP) & M_WR_OP)/* wr_lo fields */#define S_WR_LEN 0#define M_WR_LEN 0xFF#define V_WR_LEN(x) ((x) << S_WR_LEN)#define G_WR_LEN(x) (((x) >> S_WR_LEN) & M_WR_LEN)#define S_WR_TID 8#define M_WR_TID 0xFFFFF#define V_WR_TID(x) ((x) << S_WR_TID)#define G_WR_TID(x) (((x) >> S_WR_TID) & M_WR_TID)#define S_WR_CR_FLUSH 30#define V_WR_CR_FLUSH(x) ((x) << S_WR_CR_FLUSH)#define F_WR_CR_FLUSH V_WR_CR_FLUSH(1U)#define S_WR_GEN 31#define V_WR_GEN(x) ((x) << S_WR_GEN)#define F_WR_GEN V_WR_GEN(1U)# define WR_HDR struct work_request_hdr wr# define RSS_HDR#else# define WR_HDR# define RSS_HDR struct rss_header rss_hdr;#endif/* option 0 lower-half fields */#define S_CPL_STATUS 0#define M_CPL_STATUS 0xFF#define V_CPL_STATUS(x) ((x) << S_CPL_STATUS)#define G_CPL_STATUS(x) (((x) >> S_CPL_STATUS) & M_CPL_STATUS)#define S_INJECT_TIMER 6#define V_INJECT_TIMER(x) ((x) << S_INJECT_TIMER)#define F_INJECT_TIMER V_INJECT_TIMER(1U)#define S_NO_OFFLOAD 7#define V_NO_OFFLOAD(x) ((x) << S_NO_OFFLOAD)#define F_NO_OFFLOAD V_NO_OFFLOAD(1U)#define S_ULP_MODE 8#define M_ULP_MODE 0xF#define V_ULP_MODE(x) ((x) << S_ULP_MODE)#define G_ULP_MODE(x) (((x) >> S_ULP_MODE) & M_ULP_MODE)#define S_RCV_BUFSIZ 12#define M_RCV_BUFSIZ 0x3FFF#define V_RCV_BUFSIZ(x) ((x) << S_RCV_BUFSIZ)#define G_RCV_BUFSIZ(x) (((x) >> S_RCV_BUFSIZ) & M_RCV_BUFSIZ)#define S_TOS 26#define M_TOS 0x3F#define V_TOS(x) ((x) << S_TOS)#define G_TOS(x) (((x) >> S_TOS) & M_TOS)/* option 0 upper-half fields */#define S_DELACK 0#define V_DELACK(x) ((x) << S_DELACK)#define F_DELACK V_DELACK(1U)#define S_NO_CONG 1#define V_NO_CONG(x) ((x) << S_NO_CONG)#define F_NO_CONG V_NO_CONG(1U)#define S_SRC_MAC_SEL 2#define M_SRC_MAC_SEL 0x3#define V_SRC_MAC_SEL(x) ((x) << S_SRC_MAC_SEL)#define G_SRC_MAC_SEL(x) (((x) >> S_SRC_MAC_SEL) & M_SRC_MAC_SEL)#define S_L2T_IDX 4#define M_L2T_IDX 0x7FF#define V_L2T_IDX(x) ((x) << S_L2T_IDX)#define G_L2T_IDX(x) (((x) >> S_L2T_IDX) & M_L2T_IDX)#define S_TX_CHANNEL 15#define V_TX_CHANNEL(x) ((x) << S_TX_CHANNEL)#define F_TX_CHANNEL V_TX_CHANNEL(1U)#define S_TCAM_BYPASS 16#define V_TCAM_BYPASS(x) ((x) << S_TCAM_BYPASS)#define F_TCAM_BYPASS V_TCAM_BYPASS(1U)#define S_NAGLE 17#define V_NAGLE(x) ((x) << S_NAGLE)#define F_NAGLE V_NAGLE(1U)#define S_WND_SCALE 18#define M_WND_SCALE 0xF#define V_WND_SCALE(x) ((x) << S_WND_SCALE)#define G_WND_SCALE(x) (((x) >> S_WND_SCALE) & M_WND_SCALE)#define S_KEEP_ALIVE 22#define V_KEEP_ALIVE(x) ((x) << S_KEEP_ALIVE)#define F_KEEP_ALIVE V_KEEP_ALIVE(1U)#define S_MAX_RETRANS 23#define M_MAX_RETRANS 0xF#define V_MAX_RETRANS(x) ((x) << S_MAX_RETRANS)#define G_MAX_RETRANS(x) (((x) >> S_MAX_RETRANS) & M_MAX_RETRANS)#define S_MAX_RETRANS_OVERRIDE 27#define V_MAX_RETRANS_OVERRIDE(x) ((x) << S_MAX_RETRANS_OVERRIDE)#define F_MAX_RETRANS_OVERRIDE V_MAX_RETRANS_OVERRIDE(1U)#define S_MSS_IDX 28#define M_MSS_IDX 0xF#define V_MSS_IDX(x) ((x) << S_MSS_IDX)#define G_MSS_IDX(x) (((x) >> S_MSS_IDX) & M_MSS_IDX)/* option 1 fields */#define S_RSS_ENABLE 0#define V_RSS_ENABLE(x) ((x) << S_RSS_ENABLE)#define F_RSS_ENABLE V_RSS_ENABLE(1U)#define S_RSS_MASK_LEN 1#define M_RSS_MASK_LEN 0x7#define V_RSS_MASK_LEN(x) ((x) << S_RSS_MASK_LEN)#define G_RSS_MASK_LEN(x) (((x) >> S_RSS_MASK_LEN) & M_RSS_MASK_LEN)#define S_CPU_IDX 4#define M_CPU_IDX 0x3F#define V_CPU_IDX(x) ((x) << S_CPU_IDX)#define G_CPU_IDX(x) (((x) >> S_CPU_IDX) & M_CPU_IDX)#define S_MAC_MATCH_VALID 18#define V_MAC_MATCH_VALID(x) ((x) << S_MAC_MATCH_VALID)#define F_MAC_MATCH_VALID V_MAC_MATCH_VALID(1U)#define S_CONN_POLICY 19#define M_CONN_POLICY 0x3#define V_CONN_POLICY(x) ((x) << S_CONN_POLICY)#define G_CONN_POLICY(x) (((x) >> S_CONN_POLICY) & M_CONN_POLICY)#define S_SYN_DEFENSE 21#define V_SYN_DEFENSE(x) ((x) << S_SYN_DEFENSE)#define F_SYN_DEFENSE V_SYN_DEFENSE(1U)#define S_VLAN_PRI 22#define M_VLAN_PRI 0x3#define V_VLAN_PRI(x) ((x) << S_VLAN_PRI)#define G_VLAN_PRI(x) (((x) >> S_VLAN_PRI) & M_VLAN_PRI)#define S_VLAN_PRI_VALID 24#define V_VLAN_PRI_VALID(x) ((x) << S_VLAN_PRI_VALID)#define F_VLAN_PRI_VALID V_VLAN_PRI_VALID(1U)#define S_PKT_TYPE 25#define M_PKT_TYPE 0x3#define V_PKT_TYPE(x) ((x) << S_PKT_TYPE)#define G_PKT_TYPE(x) (((x) >> S_PKT_TYPE) & M_PKT_TYPE)#define S_MAC_MATCH 27#define M_MAC_MATCH 0x1F#define V_MAC_MATCH(x) ((x) << S_MAC_MATCH)#define G_MAC_MATCH(x) (((x) >> S_MAC_MATCH) & M_MAC_MATCH)/* option 2 fields */#define S_CPU_INDEX 0#define M_CPU_INDEX 0x7F#define V_CPU_INDEX(x) ((x) << S_CPU_INDEX)#define G_CPU_INDEX(x) (((x) >> S_CPU_INDEX) & M_CPU_INDEX)#define S_CPU_INDEX_VALID 7#define V_CPU_INDEX_VALID(x) ((x) << S_CPU_INDEX_VALID)#define F_CPU_INDEX_VALID V_CPU_INDEX_VALID(1U)#define S_RX_COALESCE 8#define M_RX_COALESCE 0x3#define V_RX_COALESCE(x) ((x) << S_RX_COALESCE)#define G_RX_COALESCE(x) (((x) >> S_RX_COALESCE) & M_RX_COALESCE)#define S_RX_COALESCE_VALID 10#define V_RX_COALESCE_VALID(x) ((x) << S_RX_COALESCE_VALID)#define F_RX_COALESCE_VALID V_RX_COALESCE_VALID(1U)#define S_CONG_CONTROL_FLAVOR 11#define M_CONG_CONTROL_FLAVOR 0x3#define V_CONG_CONTROL_FLAVOR(x) ((x) << S_CONG_CONTROL_FLAVOR)#define G_CONG_CONTROL_FLAVOR(x) (((x) >> S_CONG_CONTROL_FLAVOR) & M_CONG_CONTROL_FLAVOR)#define S_PACING_FLAVOR 13#define M_PACING_FLAVOR 0x3#define V_PACING_FLAVOR(x) ((x) << S_PACING_FLAVOR)#define G_PACING_FLAVOR(x) (((x) >> S_PACING_FLAVOR) & M_PACING_FLAVOR)#define S_FLAVORS_VALID 15#define V_FLAVORS_VALID(x) ((x) << S_FLAVORS_VALID)#define F_FLAVORS_VALID V_FLAVORS_VALID(1U)#define S_RX_FC_DISABLE 16#define V_RX_FC_DISABLE(x) ((x) << S_RX_FC_DISABLE)#define F_RX_FC_DISABLE V_RX_FC_DISABLE(1U)#define S_RX_FC_VALID 17#define V_RX_FC_VALID(x) ((x) << S_RX_FC_VALID)#define F_RX_FC_VALID V_RX_FC_VALID(1U)struct cpl_pass_open_req { WR_HDR; union opcode_tid ot; __be16 local_port; __be16 peer_port; __be32 local_ip; __be32 peer_ip; __be32 opt0h; __be32 opt0l; __be32 peer_netmask; __be32 opt1;};struct cpl_pass_open_rpl { RSS_HDR union opcode_tid ot; __be16 local_port; __be16 peer_port; __be32 local_ip; __be32 peer_ip;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?