123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501 |
- FILE_LICENCE ( GPL2_ONLY );
-
- /*
- * Data types and structure for HAL - NIC interface.
- *
- */
-
- #ifndef _NXHAL_NIC_INTERFACE_H_
- #define _NXHAL_NIC_INTERFACE_H_
-
- /*****************************************************************************
- * Simple Types
- *****************************************************************************/
-
- typedef U32 nx_reg_addr_t;
-
- /*****************************************************************************
- * Root crb-based firmware commands
- *****************************************************************************/
-
- /* CRB Root Command
-
- A single set of crbs is used across all physical/virtual
- functions for capability queries, initialization, and
- context creation/destruction.
-
- There are 4 CRBS:
- Command/Response CRB
- Argument1 CRB
- Argument2 CRB
- Argument3 CRB
- Signature CRB
-
- The cmd/rsp crb is always intiated by the host via
- a command code and always responded by the card with
- a response code. The cmd and rsp codes are disjoint.
- The sequence of use is always CMD, RSP, CLEAR CMD.
-
- The arguments are for passing in command specific
- and response specific parameters/data.
-
- The signature is composed of a magic value, the
- pci function id, and a command sequence id:
- [7:0] = pci function
- [15:8] = version
- [31:16] = magic of 0xcafe
-
- The pci function allows the card to take correct
- action for the given particular commands.
- The firmware will attempt to detect
- an errant driver that has died while holding
- the root crb hardware lock. Such an error condition
- shows up as the cmd/rsp crb stuck in a non-clear state.
-
- Interface Sequence:
- Host always makes requests and firmware always responds.
- Note that data field is always set prior to command field.
-
- [READ] CMD/RSP CRB ARGUMENT FIELD
- Host grab lock
- Host -> CMD optional parameter
- FW <- (Good) RSP-OK DATA
- FW <- (Fail) RSP-FAIL optional failure code
- Host -> CLEAR
- Host release lock
-
- [WRITE] CMD/RSP CRB ARGUMENT FIELD
- Host grab lock
- Host -> CMD DATA
- FW <- (Good) RSP-OK optional write status
- FW <- (Write) RSP-FAIL optional failure code
- Host -> CLEAR
- Host release lock
-
- */
-
-
- /*****************************************************************************
- * CMD/RSP
- *****************************************************************************/
-
- #define NX_CDRP_SIGNATURE_TO_PCIFN(sign) ((sign) & 0xff)
- #define NX_CDRP_SIGNATURE_TO_VERSION(sign) (((sign)>>8) & 0xff)
- #define NX_CDRP_SIGNATURE_TO_MAGIC(sign) (((sign)>>16) & 0xffff)
- #define NX_CDRP_SIGNATURE_VALID(sign) \
- ( NX_CDRP_SIGNATURE_TO_MAGIC(sign) == 0xcafe && \
- NX_CDRP_SIGNATURE_TO_PCIFN(sign) < 8)
- #define NX_CDRP_SIGNATURE_MAKE(pcifn,version) \
- ( ((pcifn) & 0xff) | \
- (((version) & 0xff) << 8) | \
- (0xcafe << 16) )
-
- #define NX_CDRP_CLEAR 0x00000000
- #define NX_CDRP_CMD_BIT 0x80000000
-
- /* All responses must have the NX_CDRP_CMD_BIT cleared
- * in the crb NX_CDRP_CRB_OFFSET. */
- #define NX_CDRP_FORM_RSP(rsp) (rsp)
- #define NX_CDRP_IS_RSP(rsp) (((rsp) & NX_CDRP_CMD_BIT) == 0)
-
- #define NX_CDRP_RSP_OK 0x00000001
- #define NX_CDRP_RSP_FAIL 0x00000002
- #define NX_CDRP_RSP_TIMEOUT 0x00000003
-
- /* All commands must have the NX_CDRP_CMD_BIT set in
- * the crb NX_CDRP_CRB_OFFSET.
- * The macros below do not have it explicitly set to
- * allow their use in lookup tables */
- #define NX_CDRP_FORM_CMD(cmd) (NX_CDRP_CMD_BIT | (cmd))
- #define NX_CDRP_IS_CMD(cmd) (((cmd) & NX_CDRP_CMD_BIT) != 0)
-
- /* [CMD] Capability Vector [RSP] Capability Vector */
- #define NX_CDRP_CMD_SUBMIT_CAPABILITIES 0x00000001
-
- /* [CMD] - [RSP] Query Value */
- #define NX_CDRP_CMD_READ_MAX_RDS_PER_CTX 0x00000002
-
- /* [CMD] - [RSP] Query Value */
- #define NX_CDRP_CMD_READ_MAX_SDS_PER_CTX 0x00000003
-
- /* [CMD] - [RSP] Query Value */
- #define NX_CDRP_CMD_READ_MAX_RULES_PER_CTX 0x00000004
-
- /* [CMD] - [RSP] Query Value */
- #define NX_CDRP_CMD_READ_MAX_RX_CTX 0x00000005
-
- /* [CMD] - [RSP] Query Value */
- #define NX_CDRP_CMD_READ_MAX_TX_CTX 0x00000006
-
- /* [CMD] Rx Config DMA Addr [RSP] rcode */
- #define NX_CDRP_CMD_CREATE_RX_CTX 0x00000007
-
- /* [CMD] Rx Context Handle, Reset Kind [RSP] rcode */
- #define NX_CDRP_CMD_DESTROY_RX_CTX 0x00000008
-
- /* [CMD] Tx Config DMA Addr [RSP] rcode */
- #define NX_CDRP_CMD_CREATE_TX_CTX 0x00000009
-
- /* [CMD] Tx Context Handle, Reset Kind [RSP] rcode */
- #define NX_CDRP_CMD_DESTROY_TX_CTX 0x0000000a
-
- /* [CMD] Stat setup dma addr - [RSP] Handle, rcode */
- #define NX_CDRP_CMD_SETUP_STATISTICS 0x0000000e
-
- /* [CMD] Handle - [RSP] rcode */
- #define NX_CDRP_CMD_GET_STATISTICS 0x0000000f
-
- /* [CMD] Handle - [RSP] rcode */
- #define NX_CDRP_CMD_DELETE_STATISTICS 0x00000010
-
- #define NX_CDRP_CMD_MAX 0x00000011
-
- /*****************************************************************************
- * Capabilities
- *****************************************************************************/
-
- #define NX_CAP_BIT(class, bit) (1 << bit)
-
- /* Class 0 (i.e. ARGS 1)
- */
- #define NX_CAP0_LEGACY_CONTEXT NX_CAP_BIT(0, 0)
- #define NX_CAP0_MULTI_CONTEXT NX_CAP_BIT(0, 1)
- #define NX_CAP0_LEGACY_MN NX_CAP_BIT(0, 2)
- #define NX_CAP0_LEGACY_MS NX_CAP_BIT(0, 3)
- #define NX_CAP0_CUT_THROUGH NX_CAP_BIT(0, 4)
- #define NX_CAP0_LRO NX_CAP_BIT(0, 5)
- #define NX_CAP0_LSO NX_CAP_BIT(0, 6)
-
- /* Class 1 (i.e. ARGS 2)
- */
- #define NX_CAP1_NIC NX_CAP_BIT(1, 0)
- #define NX_CAP1_PXE NX_CAP_BIT(1, 1)
- #define NX_CAP1_CHIMNEY NX_CAP_BIT(1, 2)
- #define NX_CAP1_LSA NX_CAP_BIT(1, 3)
- #define NX_CAP1_RDMA NX_CAP_BIT(1, 4)
- #define NX_CAP1_ISCSI NX_CAP_BIT(1, 5)
- #define NX_CAP1_FCOE NX_CAP_BIT(1, 6)
-
- /* Class 2 (i.e. ARGS 3)
- */
-
- /*****************************************************************************
- * Rules
- *****************************************************************************/
-
- typedef U32 nx_rx_rule_type_t;
-
- #define NX_RX_RULETYPE_DEFAULT 0
- #define NX_RX_RULETYPE_MAC 1
- #define NX_RX_RULETYPE_MAC_VLAN 2
- #define NX_RX_RULETYPE_MAC_RSS 3
- #define NX_RX_RULETYPE_MAC_VLAN_RSS 4
- #define NX_RX_RULETYPE_MAX 5
-
- typedef U32 nx_rx_rule_cmd_t;
-
- #define NX_RX_RULECMD_ADD 0
- #define NX_RX_RULECMD_REMOVE 1
- #define NX_RX_RULECMD_MAX 2
-
- typedef struct nx_rx_rule_arg_s {
- union {
- struct {
- char mac[6];
- } m;
- struct {
- char mac[6];
- char vlan;
- } mv;
- struct {
- char mac[6];
- } mr;
- struct {
- char mac[6];
- char vlan;
- } mvr;
- };
- /* will be union of all the different args for rules */
- U64 data;
- } nx_rx_rule_arg_t;
-
- typedef struct nx_rx_rule_s {
- U32 id;
- U32 active;
- nx_rx_rule_arg_t arg;
- nx_rx_rule_type_t type;
- } nx_rx_rule_t;
-
- /* MSG - REQUIRES TX CONTEXT */
-
- /* The rules can be added/deleted from both the
- * host and card sides so rq/rsp are similar.
- */
- typedef struct nx_hostmsg_rx_rule_s {
- nx_rx_rule_cmd_t cmd;
- nx_rx_rule_t rule;
- } nx_hostmsg_rx_rule_t;
-
- typedef struct nx_cardmsg_rx_rule_s {
- nx_rcode_t rcode;
- nx_rx_rule_cmd_t cmd;
- nx_rx_rule_t rule;
- } nx_cardmsg_rx_rule_t;
-
-
- /*****************************************************************************
- * Common to Rx/Tx contexts
- *****************************************************************************/
-
- /*
- * Context states
- */
-
- typedef U32 nx_host_ctx_state_t;
-
- #define NX_HOST_CTX_STATE_FREED 0 /* Invalid state */
- #define NX_HOST_CTX_STATE_ALLOCATED 1 /* Not committed */
- /* The following states imply FW is aware of context */
- #define NX_HOST_CTX_STATE_ACTIVE 2
- #define NX_HOST_CTX_STATE_DISABLED 3
- #define NX_HOST_CTX_STATE_QUIESCED 4
- #define NX_HOST_CTX_STATE_MAX 5
-
- /*
- * Interrupt mask crb use must be set identically on the Tx
- * and Rx context configs across a pci function
- */
-
- /* Rx and Tx have unique interrupt/crb */
- #define NX_HOST_INT_CRB_MODE_UNIQUE 0
- /* Rx and Tx share a common interrupt/crb */
- #define NX_HOST_INT_CRB_MODE_SHARED 1 /* <= LEGACY */
- /* Rx does not use a crb */
- #define NX_HOST_INT_CRB_MODE_NORX 2
- /* Tx does not use a crb */
- #define NX_HOST_INT_CRB_MODE_NOTX 3
- /* Neither Rx nor Tx use a crb */
- #define NX_HOST_INT_CRB_MODE_NORXTX 4
-
- /*
- * Destroy Rx/Tx
- */
-
- #define NX_DESTROY_CTX_RESET 0
- #define NX_DESTROY_CTX_D3_RESET 1
- #define NX_DESTROY_CTX_MAX 2
-
-
- /*****************************************************************************
- * Tx
- *****************************************************************************/
-
- /*
- * Components of the host-request for Tx context creation.
- * CRB - DOES NOT REQUIRE Rx/TX CONTEXT
- */
-
- typedef struct nx_hostrq_cds_ring_s {
- U64 host_phys_addr; /* Ring base addr */
- U32 ring_size; /* Ring entries */
- U32 rsvd; /* Padding */
- } nx_hostrq_cds_ring_t;
-
- typedef struct nx_hostrq_tx_ctx_s {
- U64 host_rsp_dma_addr; /* Response dma'd here */
- U64 cmd_cons_dma_addr; /* */
- U64 dummy_dma_addr; /* */
- U32 capabilities[4]; /* Flag bit vector */
- U32 host_int_crb_mode; /* Interrupt crb usage */
- U32 rsvd1; /* Padding */
- U16 rsvd2; /* Padding */
- U16 interrupt_ctl;
- U16 msi_index;
- U16 rsvd3; /* Padding */
- nx_hostrq_cds_ring_t cds_ring; /* Desc of cds ring */
- U8 reserved[128]; /* future expansion */
- } nx_hostrq_tx_ctx_t;
-
- typedef struct nx_cardrsp_cds_ring_s {
- U32 host_producer_crb; /* Crb to use */
- U32 interrupt_crb; /* Crb to use */
- } nx_cardrsp_cds_ring_t;
-
- typedef struct nx_cardrsp_tx_ctx_s {
- U32 host_ctx_state; /* Starting state */
- U16 context_id; /* Handle for context */
- U8 phys_port; /* Physical id of port */
- U8 virt_port; /* Virtual/Logical id of port */
- nx_cardrsp_cds_ring_t cds_ring; /* Card cds settings */
- U8 reserved[128]; /* future expansion */
- } nx_cardrsp_tx_ctx_t;
-
- #define SIZEOF_HOSTRQ_TX(HOSTRQ_TX) \
- ( sizeof(HOSTRQ_TX))
-
- #define SIZEOF_CARDRSP_TX(CARDRSP_TX) \
- ( sizeof(CARDRSP_TX))
-
- /*****************************************************************************
- * Rx
- *****************************************************************************/
-
- /*
- * RDS ring mapping to producer crbs
- */
-
- /* Each ring has a unique crb */
- #define NX_HOST_RDS_CRB_MODE_UNIQUE 0 /* <= LEGACY */
-
- /* All configured RDS Rings share common crb:
- 1 Ring - same as unique
- 2 Rings - 16, 16
- 3 Rings - 10, 10, 10 */
- #define NX_HOST_RDS_CRB_MODE_SHARED 1
-
- /* Bit usage is specified per-ring using the
- ring's size. Sum of bit lengths must be <= 32.
- Packing is [Ring N] ... [Ring 1][Ring 0] */
- #define NX_HOST_RDS_CRB_MODE_CUSTOM 2
- #define NX_HOST_RDS_CRB_MODE_MAX 3
-
-
- /*
- * RDS Ting Types
- */
-
- #define NX_RDS_RING_TYPE_NORMAL 0
- #define NX_RDS_RING_TYPE_JUMBO 1
- #define NX_RDS_RING_TYPE_LRO 2
- #define NX_RDS_RING_TYPE_MAX 3
-
- /*
- * Components of the host-request for Rx context creation.
- * CRB - DOES NOT REQUIRE Rx/TX CONTEXT
- */
-
- typedef struct nx_hostrq_sds_ring_s {
- U64 host_phys_addr; /* Ring base addr */
- U32 ring_size; /* Ring entries */
- U16 msi_index;
- U16 rsvd; /* Padding */
- } nx_hostrq_sds_ring_t;
-
- typedef struct nx_hostrq_rds_ring_s {
- U64 host_phys_addr; /* Ring base addr */
- U64 buff_size; /* Packet buffer size */
- U32 ring_size; /* Ring entries */
- U32 ring_kind; /* Class of ring */
- } nx_hostrq_rds_ring_t;
-
- typedef struct nx_hostrq_rx_ctx_s {
- U64 host_rsp_dma_addr; /* Response dma'd here */
- U32 capabilities[4]; /* Flag bit vector */
- U32 host_int_crb_mode; /* Interrupt crb usage */
- U32 host_rds_crb_mode; /* RDS crb usage */
- /* These ring offsets are relative to data[0] below */
- U32 rds_ring_offset; /* Offset to RDS config */
- U32 sds_ring_offset; /* Offset to SDS config */
- U16 num_rds_rings; /* Count of RDS rings */
- U16 num_sds_rings; /* Count of SDS rings */
- U16 rsvd1; /* Padding */
- U16 rsvd2; /* Padding */
- U8 reserved[128]; /* reserve space for future expansion*/
- /* MUST BE 64-bit aligned.
- The following is packed:
- - N hostrq_rds_rings
- - N hostrq_sds_rings */
- char data[0];
- } nx_hostrq_rx_ctx_t;
-
- typedef struct nx_cardrsp_rds_ring_s {
- U32 host_producer_crb; /* Crb to use */
- U32 rsvd1; /* Padding */
- } nx_cardrsp_rds_ring_t;
-
- typedef struct nx_cardrsp_sds_ring_s {
- U32 host_consumer_crb; /* Crb to use */
- U32 interrupt_crb; /* Crb to use */
- } nx_cardrsp_sds_ring_t;
-
- typedef struct nx_cardrsp_rx_ctx_s {
- /* These ring offsets are relative to data[0] below */
- U32 rds_ring_offset; /* Offset to RDS config */
- U32 sds_ring_offset; /* Offset to SDS config */
- U32 host_ctx_state; /* Starting State */
- U32 num_fn_per_port; /* How many PCI fn share the port */
- U16 num_rds_rings; /* Count of RDS rings */
- U16 num_sds_rings; /* Count of SDS rings */
- U16 context_id; /* Handle for context */
- U8 phys_port; /* Physical id of port */
- U8 virt_port; /* Virtual/Logical id of port */
- U8 reserved[128]; /* save space for future expansion */
- /* MUST BE 64-bit aligned.
- The following is packed:
- - N cardrsp_rds_rings
- - N cardrs_sds_rings */
- char data[0];
- } nx_cardrsp_rx_ctx_t;
-
- #define SIZEOF_HOSTRQ_RX(HOSTRQ_RX, rds_rings, sds_rings) \
- ( sizeof(HOSTRQ_RX) + \
- (rds_rings)*(sizeof (nx_hostrq_rds_ring_t)) + \
- (sds_rings)*(sizeof (nx_hostrq_sds_ring_t)) )
-
- #define SIZEOF_CARDRSP_RX(CARDRSP_RX, rds_rings, sds_rings) \
- ( sizeof(CARDRSP_RX) + \
- (rds_rings)*(sizeof (nx_cardrsp_rds_ring_t)) + \
- (sds_rings)*(sizeof (nx_cardrsp_sds_ring_t)) )
-
-
- /*****************************************************************************
- * Statistics
- *****************************************************************************/
-
- /*
- * The model of statistics update to use
- */
-
- #define NX_STATISTICS_MODE_INVALID 0
-
- /* Permanent setup; Updates are only sent on explicit request
- (NX_CDRP_CMD_GET_STATISTICS) */
- #define NX_STATISTICS_MODE_PULL 1
-
- /* Permanent setup; Updates are sent automatically and on
- explicit request (NX_CDRP_CMD_GET_STATISTICS) */
- #define NX_STATISTICS_MODE_PUSH 2
-
- /* One time stat update. */
- #define NX_STATISTICS_MODE_SINGLE_SHOT 3
-
- #define NX_STATISTICS_MODE_MAX 4
-
- /*
- * What set of stats
- */
- #define NX_STATISTICS_TYPE_INVALID 0
- #define NX_STATISTICS_TYPE_NIC_RX_CORE 1
- #define NX_STATISTICS_TYPE_NIC_TX_CORE 2
- #define NX_STATISTICS_TYPE_NIC_RX_ALL 3
- #define NX_STATISTICS_TYPE_NIC_TX_ALL 4
- #define NX_STATISTICS_TYPE_MAX 5
-
-
- /*
- * Request to setup statistics gathering.
- * CRB - DOES NOT REQUIRE Rx/TX CONTEXT
- */
-
- typedef struct nx_hostrq_stat_setup_s {
- U64 host_stat_buffer; /* Where to dma stats */
- U32 host_stat_size; /* Size of stat buffer */
- U16 context_id; /* Which context */
- U16 stat_type; /* What class of stats */
- U16 stat_mode; /* When to update */
- U16 stat_interval; /* Frequency of update */
- } nx_hostrq_stat_setup_t;
-
-
-
- #endif /* _NXHAL_NIC_INTERFACE_H_ */
|