diff options
Diffstat (limited to 'drivers/infiniband/hw/nes/nes_hw.h')
| -rw-r--r-- | drivers/infiniband/hw/nes/nes_hw.h | 103 | 
1 files changed, 103 insertions, 0 deletions
diff --git a/drivers/infiniband/hw/nes/nes_hw.h b/drivers/infiniband/hw/nes/nes_hw.h index c3654c6383f..f28a41ba9fa 100644 --- a/drivers/infiniband/hw/nes/nes_hw.h +++ b/drivers/infiniband/hw/nes/nes_hw.h @@ -241,6 +241,7 @@ enum nes_cqp_stag_wqeword_idx {  };  #define NES_CQP_OP_IWARP_STATE_SHIFT 28 +#define NES_CQP_OP_TERMLEN_SHIFT     28  enum nes_cqp_qp_bits {  	NES_CQP_QP_ARP_VALID = (1<<8), @@ -265,12 +266,16 @@ enum nes_cqp_qp_bits {  	NES_CQP_QP_IWARP_STATE_TERMINATE = (5<<NES_CQP_OP_IWARP_STATE_SHIFT),  	NES_CQP_QP_IWARP_STATE_ERROR = (6<<NES_CQP_OP_IWARP_STATE_SHIFT),  	NES_CQP_QP_IWARP_STATE_MASK = (7<<NES_CQP_OP_IWARP_STATE_SHIFT), +	NES_CQP_QP_TERM_DONT_SEND_FIN = (1<<24), +	NES_CQP_QP_TERM_DONT_SEND_TERM_MSG = (1<<25),  	NES_CQP_QP_RESET = (1<<31),  };  enum nes_cqp_qp_wqe_word_idx {  	NES_CQP_QP_WQE_CONTEXT_LOW_IDX = 6,  	NES_CQP_QP_WQE_CONTEXT_HIGH_IDX = 7, +	NES_CQP_QP_WQE_FLUSH_SQ_CODE = 8, +	NES_CQP_QP_WQE_FLUSH_RQ_CODE = 9,  	NES_CQP_QP_WQE_NEW_MSS_IDX = 15,  }; @@ -361,6 +366,7 @@ enum nes_cqp_arp_bits {  enum nes_cqp_flush_bits {  	NES_CQP_FLUSH_SQ = (1<<30),  	NES_CQP_FLUSH_RQ = (1<<31), +	NES_CQP_FLUSH_MAJ_MIN = (1<<28),  };  enum nes_cqe_opcode_bits { @@ -633,11 +639,14 @@ enum nes_aeqe_bits {  	NES_AEQE_INBOUND_RDMA = (1<<19),  	NES_AEQE_IWARP_STATE_MASK = (7<<20),  	NES_AEQE_TCP_STATE_MASK = (0xf<<24), +	NES_AEQE_Q2_DATA_WRITTEN = (0x3<<28),  	NES_AEQE_VALID = (1<<31),  };  #define NES_AEQE_IWARP_STATE_SHIFT	20  #define NES_AEQE_TCP_STATE_SHIFT	24 +#define NES_AEQE_Q2_DATA_ETHERNET       (1<<28) +#define NES_AEQE_Q2_DATA_MPA            (1<<29)  enum nes_aeqe_iwarp_state {  	NES_AEQE_IWARP_STATE_NON_EXISTANT = 0, @@ -751,6 +760,15 @@ enum nes_iwarp_sq_wqe_bits {  	NES_IWARP_SQ_OP_NOP = 12,  }; +enum nes_iwarp_cqe_major_code { +	NES_IWARP_CQE_MAJOR_FLUSH = 1, +	NES_IWARP_CQE_MAJOR_DRV = 0x8000 +}; + +enum nes_iwarp_cqe_minor_code { +	NES_IWARP_CQE_MINOR_FLUSH = 1 +}; +  #define NES_EEPROM_READ_REQUEST (1<<16)  #define NES_MAC_ADDR_VALID      (1<<20) @@ -1119,6 +1137,7 @@ struct nes_adapter {  	u8            netdev_max;	/* from host nic address count in EEPROM */  	u8            port_count;  	u8            virtwq; +	u8            send_term_ok;  	u8            et_use_adaptive_rx_coalesce;  	u8            adapter_fcn_count;  	u8 pft_mcast_map[NES_PFT_SIZE]; @@ -1217,6 +1236,90 @@ struct nes_ib_device {  	u32 num_pd;  }; +enum nes_hdrct_flags { +	DDP_LEN_FLAG                    = 0x80, +	DDP_HDR_FLAG                    = 0x40, +	RDMA_HDR_FLAG                   = 0x20 +}; + +enum nes_term_layers { +	LAYER_RDMA			= 0, +	LAYER_DDP			= 1, +	LAYER_MPA			= 2 +}; + +enum nes_term_error_types { +	RDMAP_CATASTROPHIC		= 0, +	RDMAP_REMOTE_PROT		= 1, +	RDMAP_REMOTE_OP			= 2, +	DDP_CATASTROPHIC		= 0, +	DDP_TAGGED_BUFFER		= 1, +	DDP_UNTAGGED_BUFFER		= 2, +	DDP_LLP				= 3 +}; + +enum nes_term_rdma_errors { +	RDMAP_INV_STAG			= 0x00, +	RDMAP_INV_BOUNDS		= 0x01, +	RDMAP_ACCESS			= 0x02, +	RDMAP_UNASSOC_STAG		= 0x03, +	RDMAP_TO_WRAP			= 0x04, +	RDMAP_INV_RDMAP_VER		= 0x05, +	RDMAP_UNEXPECTED_OP		= 0x06, +	RDMAP_CATASTROPHIC_LOCAL	= 0x07, +	RDMAP_CATASTROPHIC_GLOBAL	= 0x08, +	RDMAP_CANT_INV_STAG		= 0x09, +	RDMAP_UNSPECIFIED		= 0xff +}; + +enum nes_term_ddp_errors { +	DDP_CATASTROPHIC_LOCAL		= 0x00, +	DDP_TAGGED_INV_STAG		= 0x00, +	DDP_TAGGED_BOUNDS		= 0x01, +	DDP_TAGGED_UNASSOC_STAG		= 0x02, +	DDP_TAGGED_TO_WRAP		= 0x03, +	DDP_TAGGED_INV_DDP_VER		= 0x04, +	DDP_UNTAGGED_INV_QN		= 0x01, +	DDP_UNTAGGED_INV_MSN_NO_BUF	= 0x02, +	DDP_UNTAGGED_INV_MSN_RANGE	= 0x03, +	DDP_UNTAGGED_INV_MO		= 0x04, +	DDP_UNTAGGED_INV_TOO_LONG	= 0x05, +	DDP_UNTAGGED_INV_DDP_VER	= 0x06 +}; + +enum nes_term_mpa_errors { +	MPA_CLOSED			= 0x01, +	MPA_CRC				= 0x02, +	MPA_MARKER			= 0x03, +	MPA_REQ_RSP			= 0x04, +}; + +struct nes_terminate_hdr { +	u8 layer_etype; +	u8 error_code; +	u8 hdrct; +	u8 rsvd; +}; + +/* Used to determine how to fill in terminate error codes */ +#define IWARP_OPCODE_WRITE		0 +#define IWARP_OPCODE_READREQ		1 +#define IWARP_OPCODE_READRSP		2 +#define IWARP_OPCODE_SEND		3 +#define IWARP_OPCODE_SEND_INV		4 +#define IWARP_OPCODE_SEND_SE		5 +#define IWARP_OPCODE_SEND_SE_INV	6 +#define IWARP_OPCODE_TERM		7 + +/* These values are used only during terminate processing */ +#define TERM_DDP_LEN_TAGGED	14 +#define TERM_DDP_LEN_UNTAGGED	18 +#define TERM_RDMA_LEN		28 +#define RDMA_OPCODE_MASK	0x0f +#define RDMA_READ_REQ_OPCODE	1 +#define BAD_FRAME_OFFSET	64 +#define CQE_MAJOR_DRV		0x8000 +  #define nes_vlan_rx vlan_hwaccel_receive_skb  #define nes_netif_rx netif_receive_skb  |