From: James Smart <jsmart2021@gmail.com>
To: linux-scsi@vger.kernel.org
Cc: James Smart <jsmart2021@gmail.com>,
Ram Vegesna <ram.vegesna@broadcom.com>
Subject: [PATCH 03/32] elx: libefc_sli: Data structures and defines for mbox commands
Date: Wed, 23 Oct 2019 14:55:28 -0700 [thread overview]
Message-ID: <20191023215557.12581-4-jsmart2021@gmail.com> (raw)
In-Reply-To: <20191023215557.12581-1-jsmart2021@gmail.com>
This patch continues the libefc_sli SLI-4 library population.
This patch adds definitions for SLI-4 mailbox commands
and responses.
Signed-off-by: Ram Vegesna <ram.vegesna@broadcom.com>
Signed-off-by: James Smart <jsmart2021@gmail.com>
---
drivers/scsi/elx/libefc_sli/sli4.h | 1996 ++++++++++++++++++++++++++++++++++++
1 file changed, 1996 insertions(+)
diff --git a/drivers/scsi/elx/libefc_sli/sli4.h b/drivers/scsi/elx/libefc_sli/sli4.h
index ebc6a67e9c8c..b36d67abf219 100644
--- a/drivers/scsi/elx/libefc_sli/sli4.h
+++ b/drivers/scsi/elx/libefc_sli/sli4.h
@@ -2264,4 +2264,2000 @@ struct sli4_fc_xri_aborted_cqe_s {
#define SLI4_ELS_REQUEST64_CMD_NON_FABRIC 0x0c
#define SLI4_ELS_REQUEST64_CMD_FABRIC 0x0d
+#define SLI_PAGE_SIZE (1 << 12) /* 4096 */
+#define SLI_SUB_PAGE_MASK (SLI_PAGE_SIZE - 1)
+#define SLI_ROUND_PAGE(b) (((b) + SLI_SUB_PAGE_MASK) & ~SLI_SUB_PAGE_MASK)
+
+#define SLI4_BMBX_TIMEOUT_MSEC 30000
+#define SLI4_FW_READY_TIMEOUT_MSEC 30000
+
+#define SLI4_BMBX_DELAY_US 1000 /* 1 ms */
+#define SLI4_INIT_PORT_DELAY_US 10000 /* 10 ms */
+
+static inline u32
+sli_page_count(size_t bytes, u32 page_size)
+{
+ u32 mask = page_size - 1;
+ u32 shift = 0;
+
+ switch (page_size) {
+ case 4096:
+ shift = 12;
+ break;
+ case 8192:
+ shift = 13;
+ break;
+ case 16384:
+ shift = 14;
+ break;
+ case 32768:
+ shift = 15;
+ break;
+ case 65536:
+ shift = 16;
+ break;
+ default:
+ return 0;
+ }
+
+ return (bytes + mask) >> shift;
+}
+
+/*************************************************************************
+ * SLI-4 mailbox command formats and definitions
+ */
+
+struct sli4_mbox_command_header_s {
+ u8 resvd0;
+ u8 command;
+ __le16 status; /* Port writes to indicate success/fail */
+};
+
+enum {
+ MBX_CMD_CONFIG_LINK = 0x07,
+ MBX_CMD_DUMP = 0x17,
+ MBX_CMD_DOWN_LINK = 0x06,
+ MBX_CMD_INIT_LINK = 0x05,
+ MBX_CMD_INIT_VFI = 0xa3,
+ MBX_CMD_INIT_VPI = 0xa4,
+ MBX_CMD_POST_XRI = 0xa7,
+ MBX_CMD_RELEASE_XRI = 0xac,
+ MBX_CMD_READ_CONFIG = 0x0b,
+ MBX_CMD_READ_STATUS = 0x0e,
+ MBX_CMD_READ_NVPARMS = 0x02,
+ MBX_CMD_READ_REV = 0x11,
+ MBX_CMD_READ_LNK_STAT = 0x12,
+ MBX_CMD_READ_SPARM64 = 0x8d,
+ MBX_CMD_READ_TOPOLOGY = 0x95,
+ MBX_CMD_REG_FCFI = 0xa0,
+ MBX_CMD_REG_FCFI_MRQ = 0xaf,
+ MBX_CMD_REG_RPI = 0x93,
+ MBX_CMD_REG_RX_RQ = 0xa6,
+ MBX_CMD_REG_VFI = 0x9f,
+ MBX_CMD_REG_VPI = 0x96,
+ MBX_CMD_RQST_FEATURES = 0x9d,
+ MBX_CMD_SLI_CONFIG = 0x9b,
+ MBX_CMD_UNREG_FCFI = 0xa2,
+ MBX_CMD_UNREG_RPI = 0x14,
+ MBX_CMD_UNREG_VFI = 0xa1,
+ MBX_CMD_UNREG_VPI = 0x97,
+ MBX_CMD_WRITE_NVPARMS = 0x03,
+ MBX_CMD_CFG_AUTO_XFER_RDY = 0xAD,
+
+ MBX_STATUS_SUCCESS = 0x0000,
+ MBX_STATUS_FAILURE = 0x0001,
+ MBX_STATUS_RPI_NOT_REG = 0x1400,
+};
+
+/**
+ * @brief CONFIG_LINK
+ */
+enum {
+ SLI4_CFG_LINK_BBSCN = 0xf00,
+ SLI4_CFG_LINK_CSCN = 0x1000,
+};
+
+struct sli4_cmd_config_link_s {
+ struct sli4_mbox_command_header_s hdr;
+ u8 maxbbc; /* Max buffer-to-buffer credit */
+ u8 rsvd5;
+ u8 rsvd6;
+ u8 rsvd7;
+ u8 alpa;
+ __le16 n_port_id;
+ u8 rsvd11;
+ __le32 rsvd12;
+ __le32 e_d_tov;
+ __le32 lp_tov;
+ __le32 r_a_tov;
+ __le32 r_t_tov;
+ __le32 al_tov;
+ __le32 rsvd36;
+ /*
+ * Buffer-to-buffer state change number
+ * Configure BBSCN
+ */
+ __le32 bbscn_dword;
+};
+
+/**
+ * @brief DUMP Type 4
+ */
+enum {
+ SLI4_DUMP4_TYPE = 0xf,
+};
+
+#define SLI4_WKI_TAG_SAT_TEM 0x1040
+
+struct sli4_cmd_dump4_s {
+ struct sli4_mbox_command_header_s hdr;
+ __le32 type_dword;
+ __le16 wki_selection;
+ __le16 rsvd10;
+ __le32 rsvd12;
+ __le32 returned_byte_cnt;
+ __le32 resp_data[59];
+};
+
+/* INIT_LINK - initialize the link for a FC port */
+#define FC_TOPOLOGY_FCAL 0
+#define FC_TOPOLOGY_P2P 1
+
+#define SLI4_INIT_LINK_F_LOOP_BACK (1 << 0)
+#define SLI4_INIT_LINK_F_UNFAIR (1 << 6)
+#define SLI4_INIT_LINK_F_NO_LIRP (1 << 7)
+#define SLI4_INIT_LINK_F_LOOP_VALID_CHK (1 << 8)
+#define SLI4_INIT_LINK_F_NO_LISA (1 << 9)
+#define SLI4_INIT_LINK_F_FAIL_OVER (1 << 10)
+#define SLI4_INIT_LINK_F_NO_AUTOSPEED (1 << 11)
+#define SLI4_INIT_LINK_F_PICK_HI_ALPA (1 << 15)
+
+#define SLI4_INIT_LINK_F_P2P_ONLY 1
+#define SLI4_INIT_LINK_F_FCAL_ONLY 2
+
+#define SLI4_INIT_LINK_F_FCAL_FAIL_OVER 0
+#define SLI4_INIT_LINK_F_P2P_FAIL_OVER 1
+
+enum {
+ SLI4_INIT_LINK_SEL_RESET_AL_PA = 0xff,
+ SLI4_INIT_LINK_FLAG_LOOPBACK = 0x1,
+ SLI4_INIT_LINK_FLAG_TOPOLOGY = 0x6,
+ SLI4_INIT_LINK_FLAG_UNFAIR = 0x40,
+ SLI4_INIT_LINK_FLAG_SKIP_LIRP_LILP = 0x80,
+ SLI4_INIT_LINK_FLAG_LOOP_VALIDITY = 0x100,
+ SLI4_INIT_LINK_FLAG_SKIP_LISA = 0x200,
+ SLI4_INIT_LINK_FLAG_EN_TOPO_FAILOVER = 0x400,
+ SLI4_INIT_LINK_FLAG_FIXED_SPEED = 0x800,
+ SLI4_INIT_LINK_FLAG_SEL_HIGHTEST_AL_PA = 0x8000,
+};
+
+struct sli4_cmd_init_link_s {
+ struct sli4_mbox_command_header_s hdr;
+ __le32 sel_reset_al_pa_dword;
+ __le32 flags0;
+ __le32 link_speed_sel_code;
+#define FC_LINK_SPEED_1G 1
+#define FC_LINK_SPEED_2G 2
+#define FC_LINK_SPEED_AUTO_1_2 3
+#define FC_LINK_SPEED_4G 4
+#define FC_LINK_SPEED_AUTO_4_1 5
+#define FC_LINK_SPEED_AUTO_4_2 6
+#define FC_LINK_SPEED_AUTO_4_2_1 7
+#define FC_LINK_SPEED_8G 8
+#define FC_LINK_SPEED_AUTO_8_1 9
+#define FC_LINK_SPEED_AUTO_8_2 10
+#define FC_LINK_SPEED_AUTO_8_2_1 11
+#define FC_LINK_SPEED_AUTO_8_4 12
+#define FC_LINK_SPEED_AUTO_8_4_1 13
+#define FC_LINK_SPEED_AUTO_8_4_2 14
+#define FC_LINK_SPEED_10G 16
+#define FC_LINK_SPEED_16G 17
+#define FC_LINK_SPEED_AUTO_16_8_4 18
+#define FC_LINK_SPEED_AUTO_16_8 19
+#define FC_LINK_SPEED_32G 20
+#define FC_LINK_SPEED_AUTO_32_16_8 21
+#define FC_LINK_SPEED_AUTO_32_16 22
+};
+
+/**
+ * @brief INIT_VFI - initialize the VFI resource
+ */
+enum {
+ SLI4_INIT_VFI_FLAG_VP = 0x1000, /* DW1W1 */
+ SLI4_INIT_VFI_FLAG_VF = 0x2000,
+ SLI4_INIT_VFI_FLAG_VT = 0x4000,
+ SLI4_INIT_VFI_FLAG_VR = 0x8000,
+
+ SLI4_INIT_VFI_VFID = 0x1fff, /* DW3W0 */
+ SLI4_INIT_VFI_PRI = 0xe000,
+
+ SLI4_INIT_VFI_HOP_COUNT = 0xff000000, /* DW4 */
+};
+
+struct sli4_cmd_init_vfi_s {
+ struct sli4_mbox_command_header_s hdr;
+ __le16 vfi;
+ __le16 flags0_word;
+ __le16 fcfi;
+ __le16 vpi;
+ __le32 vf_id_pri_dword;
+ __le32 hop_cnt_dword;
+};
+
+/**
+ * @brief INIT_VPI - initialize the VPI resource
+ */
+struct sli4_cmd_init_vpi_s {
+ struct sli4_mbox_command_header_s hdr;
+ __le16 vpi;
+ __le16 vfi;
+};
+
+/**
+ * @brief POST_XRI - post XRI resources to the SLI Port
+ */
+enum {
+ SLI4_POST_XRI_COUNT = 0xfff, /* DW1W1 */
+ SLI4_POST_XRI_FLAG_ENX = 0x1000,
+ SLI4_POST_XRI_FLAG_DL = 0x2000,
+ SLI4_POST_XRI_FLAG_DI = 0x4000,
+ SLI4_POST_XRI_FLAG_VAL = 0x8000,
+};
+
+struct sli4_cmd_post_xri_s {
+ struct sli4_mbox_command_header_s hdr;
+ __le16 xri_base;
+ __le16 xri_count_flags;
+};
+
+/**
+ * @brief RELEASE_XRI - Release XRI resources from the SLI Port
+ */
+enum {
+ SLI4_RELEASE_XRI_REL_XRI_CNT = 0x1f, /* DW1W0 */
+ SLI4_RELEASE_XRI_COUNT = 0x1f, /* DW1W1 */
+};
+
+struct sli4_cmd_release_xri_s {
+ struct sli4_mbox_command_header_s hdr;
+ __le16 rel_xri_count_word;
+ __le16 xri_count_word;
+
+ struct {
+ __le16 xri_tag0;
+ __le16 xri_tag1;
+ } xri_tbl[62];
+};
+
+/**
+ * @brief READ_CONFIG - read SLI port configuration parameters
+ */
+struct sli4_cmd_read_config_s {
+ struct sli4_mbox_command_header_s hdr;
+};
+
+enum {
+ SLI4_READ_CFG_RESP_RESOURCE_EXT = 0x80000000, /* DW1 */
+ SLI4_READ_CFG_RESP_TOPOLOGY = 0xff000000, /* DW2 */
+};
+
+struct sli4_rsp_read_config_s {
+ struct sli4_mbox_command_header_s hdr;
+ __le32 ext_dword;
+ __le32 topology_dword;
+ __le32 resvd8;
+ __le16 e_d_tov;
+ __le16 resvd14;
+ __le32 resvd16;
+ __le16 r_a_tov;
+ __le16 resvd22;
+ __le32 resvd24;
+ __le32 resvd28;
+ __le16 lmt;
+ __le16 resvd34;
+ __le32 resvd36;
+ __le32 resvd40;
+ __le16 xri_base;
+ __le16 xri_count;
+ __le16 rpi_base;
+ __le16 rpi_count;
+ __le16 vpi_base;
+ __le16 vpi_count;
+ __le16 vfi_base;
+ __le16 vfi_count;
+ __le16 resvd60;
+ __le16 fcfi_count;
+ __le16 rq_count;
+ __le16 eq_count;
+ __le16 wq_count;
+ __le16 cq_count;
+ __le32 pad[45];
+};
+
+#define SLI4_READ_CFG_TOPO_FC 0x1 /** FC topology unknown */
+#define SLI4_READ_CFG_TOPO_FC_DA 0x2 /* FC Direct Attach (non FC-AL) */
+#define SLI4_READ_CFG_TOPO_FC_AL 0x3 /** FC-AL topology */
+
+/**
+ * @brief READ_NVPARMS - read SLI port configuration parameters
+ */
+
+enum {
+ SLI4_READ_NVPARAMS_HARD_ALPA = 0xff,
+ SLI4_READ_NVPARAMS_PREFERRED_D_ID = 0xffffff00,
+};
+
+struct sli4_cmd_read_nvparms_s {
+ struct sli4_mbox_command_header_s hdr;
+ __le32 resvd0;
+ __le32 resvd4;
+ __le32 resvd8;
+ __le32 resvd12;
+ u8 wwpn[8];
+ u8 wwnn[8];
+ __le32 hard_alpa_d_id;
+};
+
+/**
+ * @brief WRITE_NVPARMS - write SLI port configuration parameters
+ */
+struct sli4_cmd_write_nvparms_s {
+ struct sli4_mbox_command_header_s hdr;
+ __le32 resvd0;
+ __le32 resvd4;
+ __le32 resvd8;
+ __le32 resvd12;
+ u8 wwpn[8];
+ u8 wwnn[8];
+ __le32 hard_alpa_d_id;
+};
+
+/**
+ * @brief READ_REV - read the Port revision levels
+ */
+enum {
+ SLI4_READ_REV_FLAG_SLI_LEVEL = 0xf,
+ SLI4_READ_REV_FLAG_FCOEM = 0x10,
+ SLI4_READ_REV_FLAG_CEEV = 0x60,
+ SLI4_READ_REV_FLAG_VPD = 0x2000,
+
+ SLI4_READ_REV_AVAILABLE_LENGTH = 0xffffff,
+};
+
+struct sli4_cmd_read_rev_s {
+ struct sli4_mbox_command_header_s hdr;
+ __le16 resvd0;
+ __le16 flags0_word;
+ __le32 first_hw_rev;
+ __le32 second_hw_rev;
+ __le32 resvd12;
+ __le32 third_hw_rev;
+ u8 fc_ph_low;
+ u8 fc_ph_high;
+ u8 feature_level_low;
+ u8 feature_level_high;
+ __le32 resvd24;
+ __le32 first_fw_id;
+ u8 first_fw_name[16];
+ __le32 second_fw_id;
+ u8 second_fw_name[16];
+ __le32 rsvd18[30];
+ __le32 available_length_dword;
+ struct sli4_dmaaddr_s hostbuf;
+ __le32 returned_vpd_length;
+ __le32 actual_vpd_length;
+};
+
+/**
+ * @brief READ_SPARM64 - read the Port service parameters
+ */
+struct sli4_cmd_read_sparm64_s {
+ struct sli4_mbox_command_header_s hdr;
+ __le32 resvd0;
+ __le32 resvd4;
+ struct sli4_bde_s bde_64;
+ __le16 vpi;
+ __le16 resvd22;
+ __le16 port_name_start;
+ __le16 port_name_len;
+ __le16 node_name_start;
+ __le16 node_name_len;
+};
+
+#define SLI4_READ_SPARM64_VPI_DEFAULT 0
+#define SLI4_READ_SPARM64_VPI_SPECIAL U16_MAX
+
+#define SLI4_READ_SPARM64_WWPN_OFFSET (4 * sizeof(u32))
+#define SLI4_READ_SPARM64_WWNN_OFFSET (SLI4_READ_SPARM64_WWPN_OFFSET \
+ + sizeof(uint64_t))
+/**
+ * @brief READ_TOPOLOGY - read the link event information
+ */
+enum {
+ SLI4_READTOPO_ATTEN_TYPE = 0xff, /* DW2 */
+ SLI4_READTOPO_FLAG_IL = 0x100,
+ SLI4_READTOPO_FLAG_PB_RECVD = 0x200,
+
+ SLI4_READTOPO_LINKSTATE_RECV = 0x3,
+ SLI4_READTOPO_LINKSTATE_TRANS = 0xc,
+ SLI4_READTOPO_LINKSTATE_MACHINE = 0xf0,
+ SLI4_READTOPO_LINKSTATE_SPEED = 0xff00,
+ SLI4_READTOPO_LINKSTATE_TF = 0x40000000,
+ SLI4_READTOPO_LINKSTATE_LU = 0x80000000,
+
+ SLI4_READTOPO_SCN_BBSCN = 0xf, /* DW9W1B0 */
+ SLI4_READTOPO_SCN_CBBSCN = 0xf0,
+
+ SLI4_READTOPO_R_T_TOV = 0x1ff, /* DW10WO */
+ SLI4_READTOPO_AL_TOV = 0xf000,
+
+ SLI4_READTOPO_PB_FLAG = 0x80,
+
+ SLI4_READTOPO_INIT_N_PORTID = 0xffffff,
+};
+
+struct sli4_cmd_read_topology_s {
+ struct sli4_mbox_command_header_s hdr;
+ __le32 event_tag;
+ __le32 dw2_attentype;
+ u8 topology;
+ u8 lip_type;
+ u8 lip_al_ps;
+ u8 al_pa_granted;
+ struct sli4_bde_s bde_loop_map;
+ __le32 linkdown_state;
+ __le32 currlink_state;
+ u8 max_bbc;
+ u8 init_bbc;
+ u8 scn_flags;
+ u8 rsvd39;
+ __le16 dw10w0_al_rt_tov;
+ __le16 lp_tov;
+ u8 acquired_al_pa;
+ u8 pb_flags;
+ __le16 specified_al_pa;
+ __le32 dw12_init_n_port_id;
+};
+
+#define SLI4_MIN_LOOP_MAP_BYTES 128
+
+#define SLI4_READ_TOPOLOGY_LINK_UP 0x1
+#define SLI4_READ_TOPOLOGY_LINK_DOWN 0x2
+#define SLI4_READ_TOPOLOGY_LINK_NO_ALPA 0x3
+
+#define SLI4_READ_TOPOLOGY_UNKNOWN 0x0
+#define SLI4_READ_TOPOLOGY_NPORT 0x1
+#define SLI4_READ_TOPOLOGY_FC_AL 0x2
+
+#define SLI4_READ_TOPOLOGY_SPEED_NONE 0x00
+#define SLI4_READ_TOPOLOGY_SPEED_1G 0x04
+#define SLI4_READ_TOPOLOGY_SPEED_2G 0x08
+#define SLI4_READ_TOPOLOGY_SPEED_4G 0x10
+#define SLI4_READ_TOPOLOGY_SPEED_8G 0x20
+#define SLI4_READ_TOPOLOGY_SPEED_10G 0x40
+#define SLI4_READ_TOPOLOGY_SPEED_16G 0x80
+#define SLI4_READ_TOPOLOGY_SPEED_32G 0x90
+
+/**
+ * @brief REG_FCFI - activate a FC Forwarder
+ */
+struct sli4_cmd_reg_fcfi_rq_cfg {
+ u8 r_ctl_mask;
+ u8 r_ctl_match;
+ u8 type_mask;
+ u8 type_match;
+};
+
+enum {
+ SLI4_REGFCFI_VLAN_TAG = 0xfff,
+ SLI4_REGFCFI_VLANTAG_VALID = 0x1000,
+};
+
+#define SLI4_CMD_REG_FCFI_NUM_RQ_CFG 4
+struct sli4_cmd_reg_fcfi_s {
+ struct sli4_mbox_command_header_s hdr;
+ __le16 fcf_index;
+ __le16 fcfi;
+ __le16 rqid1;
+ __le16 rqid0;
+ __le16 rqid3;
+ __le16 rqid2;
+ struct sli4_cmd_reg_fcfi_rq_cfg rq_cfg[SLI4_CMD_REG_FCFI_NUM_RQ_CFG];
+ __le32 dw8_vlan;
+};
+
+#define SLI4_CMD_REG_FCFI_MRQ_NUM_RQ_CFG 4
+#define SLI4_CMD_REG_FCFI_MRQ_MAX_NUM_RQ 32
+#define SLI4_CMD_REG_FCFI_SET_FCFI_MODE 0
+#define SLI4_CMD_REG_FCFI_SET_MRQ_MODE 1
+
+enum {
+ SLI4_REGFCFI_MRQ_VLAN_TAG = 0xfff,
+ SLI4_REGFCFI_MRQ_VLANTAG_VALID = 0x1000,
+ SLI4_REGFCFI_MRQ_MODE = 0x2000,
+
+ SLI4_REGFCFI_MRQ_MASK_NUM_PAIRS = 0xff,
+ SLI4_REGFCFI_MRQ_FILTER_BITMASK = 0xf00,
+ SLI4_REGFCFI_MRQ_RQ_SEL_POLICY = 0xf000,
+};
+
+struct sli4_cmd_reg_fcfi_mrq_s {
+ struct sli4_mbox_command_header_s hdr;
+ __le16 fcf_index;
+ __le16 fcfi;
+ __le16 rqid1;
+ __le16 rqid0;
+ __le16 rqid3;
+ __le16 rqid2;
+ struct sli4_cmd_reg_fcfi_rq_cfg
+ rq_cfg[SLI4_CMD_REG_FCFI_MRQ_NUM_RQ_CFG];
+ __le32 dw8_vlan;
+ __le32 dw9_mrqflags;
+};
+
+/**
+ * @brief REG_RPI - register a Remote Port Indicator
+ */
+enum {
+ SLI4_REGRPI_REMOTE_N_PORTID = 0xffffff, /* DW2 */
+ SLI4_REGRPI_UPD = 0x1000000,
+ SLI4_REGRPI_ETOW = 0x8000000,
+ SLI4_REGRPI_TERP = 0x20000000,
+ SLI4_REGRPI_CI = 0x80000000,
+};
+
+struct sli4_cmd_reg_rpi_s {
+ struct sli4_mbox_command_header_s hdr;
+ __le16 rpi;
+ __le16 rsvd2;
+ __le32 dw2_rportid_flags;
+ struct sli4_bde_s bde_64;
+ __le16 vpi;
+ __le16 rsvd26;
+};
+
+#define SLI4_REG_RPI_BUF_LEN 0x70
+
+/**
+ * @brief REG_VFI - register a Virtual Fabric Indicator
+ */
+enum {
+ SLI4_REGVFI_VP = 0x1000, /* DW1 */
+ SLI4_REGVFI_UPD = 0x2000,
+
+ SLI4_REGVFI_LOCAL_N_PORTID = 0xffffff, /* DW10 */
+};
+
+struct sli4_cmd_reg_vfi_s {
+ struct sli4_mbox_command_header_s hdr;
+ __le16 vfi;
+ __le16 dw0w1_flags;
+ __le16 fcfi;
+ __le16 vpi; /* vp=TRUE */
+ u8 wwpn[8];
+ struct sli4_bde_s sparm;
+ __le32 e_d_tov;
+ __le32 r_a_tov;
+ __le32 dw10_lportid_flags;
+};
+
+/**
+ * @brief REG_VPI - register a Virtual Port Indicator
+ */
+enum {
+ SLI4_REGVPI_LOCAL_N_PORTID = 0xffffff,
+ SLI4_REGVPI_UPD = 0x1000000,
+};
+
+struct sli4_cmd_reg_vpi_s {
+ struct sli4_mbox_command_header_s hdr;
+ __le32 rsvd0;
+ __le32 dw2_lportid_flags;
+ u8 wwpn[8];
+ __le32 rsvd12;
+ __le16 vpi;
+ __le16 vfi;
+};
+
+/**
+ * @brief REQUEST_FEATURES - request / query SLI features
+ */
+enum {
+ SLI4_REQFEAT_QRY = 0x1, /* Dw1 */
+
+ SLI4_REQFEAT_IAAB = (1 << 0), /* DW2 & DW3 */
+ SLI4_REQFEAT_NPIV = (1 << 1),
+ SLI4_REQFEAT_DIF = (1 << 2),
+ SLI4_REQFEAT_VF = (1 << 3),
+ SLI4_REQFEAT_FCPI = (1 << 4),
+ SLI4_REQFEAT_FCPT = (1 << 5),
+ SLI4_REQFEAT_FCPC = (1 << 6),
+ SLI4_REQFEAT_RSVD = (1 << 7),
+ SLI4_REQFEAT_RQD = (1 << 8),
+ SLI4_REQFEAT_IAAR = (1 << 9),
+ SLI4_REQFEAT_HLM = (1 << 10),
+ SLI4_REQFEAT_PERFH = (1 << 11),
+ SLI4_REQFEAT_RXSEQ = (1 << 12),
+ SLI4_REQFEAT_RXRI = (1 << 13),
+ SLI4_REQFEAT_DCL2 = (1 << 14),
+ SLI4_REQFEAT_RSCO = (1 << 15),
+ SLI4_REQFEAT_MRQP = (1 << 16),
+};
+
+struct sli4_cmd_request_features_s {
+ struct sli4_mbox_command_header_s hdr;
+ __le32 dw1_qry;
+ __le32 cmd;
+ __le32 resp;
+};
+
+/**
+ * @brief SLI_CONFIG - submit a configuration command to Port
+ *
+ * Command is either embedded as part of the payload (embed) or located
+ * in a separate memory buffer (mem)
+ */
+enum {
+ SLI4_SLICONF_EMB = 0x1, /* DW1 */
+ SLI4_SLICONF_PMDCMD_SHIFT = 3,
+ SLI4_SLICONF_PMDCMD_MASK = 0x1F << SLI4_SLICONF_PMDCMD_SHIFT,
+ SLI4_SLICONF_PMDCMD_VAL_1 = 1 << SLI4_SLICONF_PMDCMD_SHIFT,
+ SLI4_SLICONF_PMDCNT = 0xf8,
+
+ SLI4_SLICONFIG_PMD_LEN = 0x00ffffff, /* Config PMD length */
+};
+
+struct sli4_cmd_sli_config_s {
+ struct sli4_mbox_command_header_s hdr;
+ __le32 dw1_flags;
+ __le32 payload_len;
+ __le32 rsvd12[3];
+ union {
+ u8 embed[58 * sizeof(u32)];
+ struct sli4_bufptr_s mem;
+ } payload;
+};
+
+/**
+ * @brief READ_STATUS - read tx/rx status of a particular port
+ *
+ */
+enum {
+ SLI4_READSTATUS_CLEAR_COUNTERS = 0x1, /* DW1 */
+};
+
+struct sli4_cmd_read_status_s {
+ struct sli4_mbox_command_header_s hdr;
+ __le32 dw1_flags;
+ __le32 rsvd4;
+ __le32 trans_kbyte_cnt;
+ __le32 recv_kbyte_cnt;
+ __le32 trans_frame_cnt;
+ __le32 recv_frame_cnt;
+ __le32 trans_seq_cnt;
+ __le32 recv_seq_cnt;
+ __le32 tot_exchanges_orig;
+ __le32 tot_exchanges_resp;
+ __le32 recv_p_bsy_cnt;
+ __le32 recv_f_bsy_cnt;
+ __le32 no_rq_buf_dropped_frames_cnt;
+ __le32 empty_rq_timeout_cnt;
+ __le32 no_xri_dropped_frames_cnt;
+ __le32 empty_xri_pool_cnt;
+};
+
+/**
+ * @brief READ_LNK_STAT - read link status of a particular port
+ *
+ */
+enum {
+ SLI4_READ_LNKSTAT_REC = (1 << 0),
+ SLI4_READ_LNKSTAT_GEC = (1 << 1),
+ SLI4_READ_LNKSTAT_W02OF = (1 << 2),
+ SLI4_READ_LNKSTAT_W03OF = (1 << 3),
+ SLI4_READ_LNKSTAT_W04OF = (1 << 4),
+ SLI4_READ_LNKSTAT_W05OF = (1 << 5),
+ SLI4_READ_LNKSTAT_W06OF = (1 << 6),
+ SLI4_READ_LNKSTAT_W07OF = (1 << 7),
+ SLI4_READ_LNKSTAT_W08OF = (1 << 8),
+ SLI4_READ_LNKSTAT_W09OF = (1 << 9),
+ SLI4_READ_LNKSTAT_W10OF = (1 << 10),
+ SLI4_READ_LNKSTAT_W11OF = (1 << 11),
+ SLI4_READ_LNKSTAT_W12OF = (1 << 12),
+ SLI4_READ_LNKSTAT_W13OF = (1 << 13),
+ SLI4_READ_LNKSTAT_W14OF = (1 << 14),
+ SLI4_READ_LNKSTAT_W15OF = (1 << 15),
+ SLI4_READ_LNKSTAT_W16OF = (1 << 16),
+ SLI4_READ_LNKSTAT_W17OF = (1 << 17),
+ SLI4_READ_LNKSTAT_W18OF = (1 << 18),
+ SLI4_READ_LNKSTAT_W19OF = (1 << 19),
+ SLI4_READ_LNKSTAT_W20OF = (1 << 20),
+ SLI4_READ_LNKSTAT_W21OF = (1 << 21),
+ SLI4_READ_LNKSTAT_CLRC = (1 << 30),
+ SLI4_READ_LNKSTAT_CLOF = (1 << 31),
+};
+
+struct sli4_cmd_read_link_stats_s {
+ struct sli4_mbox_command_header_s hdr;
+ __le32 dw1_flags;
+ __le32 linkfail_errcnt;
+ __le32 losssync_errcnt;
+ __le32 losssignal_errcnt;
+ __le32 primseq_errcnt;
+ __le32 inval_txword_errcnt;
+ __le32 crc_errcnt;
+ __le32 primseq_eventtimeout_cnt;
+ __le32 elastic_bufoverrun_errcnt;
+ __le32 arbit_fc_al_timeout_cnt;
+ __le32 adv_rx_buftor_to_buf_credit;
+ __le32 curr_rx_buf_to_buf_credit;
+ __le32 adv_tx_buf_to_buf_credit;
+ __le32 curr_tx_buf_to_buf_credit;
+ __le32 rx_eofa_cnt;
+ __le32 rx_eofdti_cnt;
+ __le32 rx_eofni_cnt;
+ __le32 rx_soff_cnt;
+ __le32 rx_dropped_no_aer_cnt;
+ __le32 rx_dropped_no_avail_rpi_rescnt;
+ __le32 rx_dropped_no_avail_xri_rescnt;
+};
+
+/**
+ * @brief Format a WQE with WQ_ID Association performance hint
+ *
+ * @par Description
+ * PHWQ works by over-writing part of Word 10 in the WQE with the WQ ID.
+ *
+ * @param entry Pointer to the WQE.
+ * @param q_id Queue ID.
+ *
+ * @return None.
+ */
+static inline void
+sli_set_wq_id_association(void *entry, u16 q_id)
+{
+ u32 *wqe = entry;
+
+ /*
+ * Set Word 10, bit 0 to zero
+ * Set Word 10, bits 15:1 to the WQ ID
+ */
+ wqe[10] &= cpu_to_le32(~0xffff);
+ wqe[10] |= cpu_to_le16(q_id << 1);
+}
+
+/**
+ * @brief UNREG_FCFI - unregister a FCFI
+ */
+struct sli4_cmd_unreg_fcfi_s {
+ struct sli4_mbox_command_header_s hdr;
+ __le32 rsvd0;
+ __le16 fcfi;
+ __le16 rsvd6;
+};
+
+/**
+ * @brief UNREG_RPI - unregister one or more RPI
+ */
+enum {
+ UNREG_RPI_DP = 0x2000,
+ UNREG_RPI_II_SHIFT = 14,
+ UNREG_RPI_II_MASK = 0x03 << UNREG_RPI_II_SHIFT,
+ UNREG_RPI_II_RPI = 0x00 << UNREG_RPI_II_SHIFT,
+ UNREG_RPI_II_VPI = 0x01 << UNREG_RPI_II_SHIFT,
+ UNREG_RPI_II_VFI = 0x02 << UNREG_RPI_II_SHIFT,
+ UNREG_RPI_II_FCFI = 0x03 << UNREG_RPI_II_SHIFT,
+
+ UNREG_RPI_DEST_N_PORTID_MASK = 0x00ffffff,
+};
+
+struct sli4_cmd_unreg_rpi_s {
+ struct sli4_mbox_command_header_s hdr;
+ __le16 index;
+ __le16 dw1w1_flags;
+ __le32 dw2_dest_n_portid;
+};
+
+/**
+ * @brief UNREG_VFI - unregister one or more VFI
+ */
+enum {
+ UNREG_VFI_II_SHIFT = 14,
+ UNREG_VFI_II_MASK = 0x03 << UNREG_VFI_II_SHIFT,
+ UNREG_VFI_II_VFI = 0x00 << UNREG_VFI_II_SHIFT,
+ UNREG_VFI_II_FCFI = 0x03 << UNREG_VFI_II_SHIFT,
+};
+
+struct sli4_cmd_unreg_vfi_s {
+ struct sli4_mbox_command_header_s hdr;
+ __le32 rsvd0;
+ __le16 index;
+ __le16 dw2_flags;
+};
+
+enum sli4_unreg_type_e {
+ SLI4_UNREG_TYPE_PORT,
+ SLI4_UNREG_TYPE_DOMAIN,
+ SLI4_UNREG_TYPE_FCF,
+ SLI4_UNREG_TYPE_ALL
+};
+
+/**
+ * @brief UNREG_VPI - unregister one or more VPI
+ */
+enum {
+ UNREG_VPI_II_SHIFT = 14,
+ UNREG_VPI_II_MASK = 0x03 << UNREG_VPI_II_SHIFT,
+ UNREG_VPI_II_VPI = 0x00 << UNREG_VPI_II_SHIFT,
+ UNREG_VPI_II_VFI = 0x02 << UNREG_VPI_II_SHIFT,
+ UNREG_VPI_II_FCFI = 0x03 << UNREG_VPI_II_SHIFT,
+};
+
+struct sli4_cmd_unreg_vpi_s {
+ struct sli4_mbox_command_header_s hdr;
+ __le32 rsvd0;
+ __le16 index;
+ __le16 dw2w0_flags;
+};
+
+/**
+ * @brief AUTO_XFER_RDY - Configure the auto-generate XFER-RDY feature.
+ */
+struct sli4_cmd_config_auto_xfer_rdy_s {
+ struct sli4_mbox_command_header_s hdr;
+ __le32 rsvd0;
+ __le32 max_burst_len;
+};
+
+#define SLI4_CONFIG_AUTO_XFERRDY_BLKSIZE 0xffff
+
+struct sli4_cmd_config_auto_xfer_rdy_hp_s {
+ struct sli4_mbox_command_header_s hdr;
+ __le32 rsvd0;
+ __le32 max_burst_len;
+ __le32 dw3_esoc_flags;
+ __le16 block_size;
+ __le16 rsvd14;
+};
+
+/*************************************************************************
+ * SLI-4 common configuration command formats and definitions
+ */
+
+#define SLI4_CFG_STATUS_SUCCESS 0x00
+#define SLI4_CFG_STATUS_FAILED 0x01
+#define SLI4_CFG_STATUS_ILLEGAL_REQUEST 0x02
+#define SLI4_CFG_STATUS_ILLEGAL_FIELD 0x03
+
+#define SLI4_MGMT_STATUS_FLASHROM_READ_FAILED 0xcb
+
+#define SLI4_CFG_ADD_STATUS_NO_STATUS 0x00
+#define SLI4_CFG_ADD_STATUS_INVALID_OPCODE 0x1e
+
+/**
+ * Subsystem values.
+ */
+#define SLI4_SUBSYSTEM_COMMON 0x01
+#define SLI4_SUBSYSTEM_LOWLEVEL 0x0B
+#define SLI4_SUBSYSTEM_FC 0x0c
+#define SLI4_SUBSYSTEM_DMTF 0x11
+
+#define SLI4_OPC_LOWLEVEL_SET_WATCHDOG 0X36
+
+/**
+ * Common opcode (OPC) values.
+ */
+enum {
+ CMN_FUNCTION_RESET = 0x3d,
+ CMN_CREATE_CQ = 0x0c,
+ CMN_CREATE_CQ_SET = 0x1d,
+ CMN_DESTROY_CQ = 0x36,
+ CMN_MODIFY_EQ_DELAY = 0x29,
+ CMN_CREATE_EQ = 0x0d,
+ CMN_DESTROY_EQ = 0x37,
+ CMN_CREATE_MQ_EXT = 0x5a,
+ CMN_DESTROY_MQ = 0x35,
+ CMN_GET_CNTL_ATTRIBUTES = 0x20,
+ CMN_NOP = 0x21,
+ CMN_GET_RSC_EXTENT_INFO = 0x9a,
+ CMN_GET_SLI4_PARAMS = 0xb5,
+ CMN_QUERY_FW_CONFIG = 0x3a,
+ CMN_GET_PORT_NAME = 0x4d,
+
+ CMN_WRITE_FLASHROM = 0x07,
+ /* TRANSCEIVER Data */
+ CMN_READ_TRANS_DATA = 0x49,
+ CMN_GET_CNTL_ADDL_ATTRS = 0x79,
+ CMN_GET_FUNCTION_CFG = 0xa0,
+ CMN_GET_PROFILE_CFG = 0xa4,
+ CMN_SET_PROFILE_CFG = 0xa5,
+ CMN_GET_PROFILE_LIST = 0xa6,
+ CMN_GET_ACTIVE_PROFILE = 0xa7,
+ CMN_SET_ACTIVE_PROFILE = 0xa8,
+ CMN_READ_OBJECT = 0xab,
+ CMN_WRITE_OBJECT = 0xac,
+ CMN_DELETE_OBJECT = 0xae,
+ CMN_READ_OBJECT_LIST = 0xad,
+ CMN_SET_DUMP_LOCATION = 0xb8,
+ CMN_SET_FEATURES = 0xbf,
+ CMN_GET_RECFG_LINK_INFO = 0xc9,
+ CMN_SET_RECNG_LINK_ID = 0xca,
+};
+
+/**
+ * DMTF opcode (OPC) values.
+ */
+#define DMTF_EXEC_CLP_CMD 0x01
+
+/**
+ * @brief COMMON_FUNCTION_RESET
+ *
+ * Resets the Port, returning it to a power-on state. This configuration
+ * command does not have a payload and should set/expect the lengths to
+ * be zero.
+ */
+struct sli4_rqst_cmn_function_reset_s {
+ struct sli4_rqst_hdr_s hdr;
+};
+
+struct sli4_rsp_cmn_function_reset_s {
+ struct sli4_rsp_hdr_s hdr;
+};
+
+
+/**
+ * @brief COMMON_GET_CNTL_ATTRIBUTES
+ *
+ * Query for information about the SLI Port
+ */
+enum {
+ SLI4_CNTL_ATTR_PORTNUM = 0x3f, /* Port num and type */
+ SLI4_CNTL_ATTR_PORTTYPE = 0xc0,
+};
+
+struct sli4_rsp_cmn_get_cntl_attributes_s {
+ struct sli4_rsp_hdr_s hdr;
+ u8 version_str[32];
+ u8 manufacturer_name[32];
+ __le32 supported_modes;
+ u8 eprom_version_lo;
+ u8 eprom_version_hi;
+ __le16 rsvd17;
+ __le32 mbx_ds_version;
+ __le32 ep_fw_ds_version;
+ u8 ncsi_version_str[12];
+ __le32 def_extended_timeout;
+ u8 model_number[32];
+ u8 description[64];
+ u8 serial_number[32];
+ u8 ip_version_str[32];
+ u8 fw_version_str[32];
+ u8 bios_version_str[32];
+ u8 redboot_version_str[32];
+ u8 driver_version_str[32];
+ u8 fw_on_flash_version_str[32];
+ __le32 functionalities_supported;
+ __le16 max_cdb_length;
+ u8 asic_revision;
+ u8 generational_guid0;
+ __le32 generational_guid1_12[3];
+ __le16 generational_guid13_14;
+ u8 generational_guid15;
+ u8 hba_port_count;
+ __le16 default_link_down_timeout;
+ u8 iscsi_version_min_max;
+ u8 multifunctional_device;
+ u8 cache_valid;
+ u8 hba_status;
+ u8 max_domains_supported;
+ u8 port_num_type_flags;
+ __le32 firmware_post_status;
+ __le32 hba_mtu;
+ u8 iscsi_features;
+ u8 rsvd121[3];
+ __le16 pci_vendor_id;
+ __le16 pci_device_id;
+ __le16 pci_sub_vendor_id;
+ __le16 pci_sub_system_id;
+ u8 pci_bus_number;
+ u8 pci_device_number;
+ u8 pci_function_number;
+ u8 interface_type;
+ __le64 unique_identifier;
+ u8 number_of_netfilters;
+ u8 rsvd122[3];
+};
+
+/**
+ * @brief COMMON_GET_CNTL_ATTRIBUTES
+ *
+ * This command queries the controller information from the Flash ROM.
+ */
+struct sli4_rqst_cmn_get_cntl_addl_attributes_s {
+ struct sli4_rqst_hdr_s hdr;
+};
+
+struct sli4_rsp_cmn_get_cntl_addl_attributes_s {
+ struct sli4_rsp_hdr_s hdr;
+ __le16 ipl_file_number;
+ u8 ipl_file_version;
+ u8 rsvd4;
+ u8 on_die_temperature;
+ u8 rsvd5[3];
+ __le32 driver_advanced_features_supported;
+ __le32 rsvd7[4];
+ char universal_bios_version[32];
+ char x86_bios_version[32];
+ char efi_bios_version[32];
+ char fcode_version[32];
+ char uefi_bios_version[32];
+ char uefi_nic_version[32];
+ char uefi_fcode_version[32];
+ char uefi_iscsi_version[32];
+ char iscsi_x86_bios_version[32];
+ char pxe_x86_bios_version[32];
+ u8 default_wwpn[8];
+ u8 ext_phy_version[32];
+ u8 fc_universal_bios_version[32];
+ u8 fc_x86_bios_version[32];
+ u8 fc_efi_bios_version[32];
+ u8 fc_fcode_version[32];
+ u8 ext_phy_crc_label[8];
+ u8 ipl_file_name[16];
+ u8 rsvd139[72];
+};
+
+/**
+ * @brief COMMON_NOP
+ *
+ * This command does not do anything; it only returns
+ * the payload in the completion.
+ */
+struct sli4_rqst_cmn_nop_s {
+ struct sli4_rqst_hdr_s hdr;
+ __le32 context[2];
+};
+
+struct sli4_rsp_cmn_nop_s {
+ struct sli4_rsp_hdr_s hdr;
+ __le32 context[2];
+};
+
+/**
+ * @brief COMMON_GET_RESOURCE_EXTENT_INFO
+ */
+struct sli4_rqst_cmn_get_resource_extent_info_s {
+ struct sli4_rqst_hdr_s hdr;
+ __le16 resource_type;
+ __le16 rsvd16;
+};
+
+#define SLI4_RSC_TYPE_ISCSI_INI_XRI 0x0c
+#define SLI4_RSC_TYPE_VFI 0x20
+#define SLI4_RSC_TYPE_VPI 0x21
+#define SLI4_RSC_TYPE_RPI 0x22
+#define SLI4_RSC_TYPE_XRI 0x23
+
+struct sli4_rsp_cmn_get_resource_extent_info_s {
+ struct sli4_rsp_hdr_s hdr;
+ __le16 resource_extent_count;
+ __le16 resource_extent_size;
+};
+
+#define SLI4_128BYTE_WQE_SUPPORT 0x02
+/**
+ * @brief COMMON_GET_SLI4_PARAMETERS
+ */
+
+#define GET_Q_CNT_METHOD(val)\
+ ((val & RSP_GET_PARAM_Q_CNT_MTHD_MASK)\
+ >> RSP_GET_PARAM_Q_CNT_MTHD_SHFT)
+#define GET_Q_CREATE_VERSION(val)\
+ ((val & RSP_GET_PARAM_QV_MASK)\
+ >> RSP_GET_PARAM_QV_SHIFT)
+
+enum {
+ /*GENERIC*/
+ RSP_GET_PARAM_Q_CNT_MTHD_SHFT = 24,
+ RSP_GET_PARAM_Q_CNT_MTHD_MASK = (0xF << 24),
+ RSP_GET_PARAM_QV_SHIFT = 14,
+ RSP_GET_PARAM_QV_MASK = (3 << 14),
+
+ /* DW4 */
+ RSP_GET_PARAM_PROTO_TYPE_MASK = 0xFF,
+ /* DW5 */
+ RSP_GET_PARAM_FT = (1 << 0),
+ RSP_GET_PARAM_SLI_REV_MASK = (0xF << 4),
+ RSP_GET_PARAM_SLI_FAM_MASK = (0xF << 8),
+ RSP_GET_PARAM_IF_TYPE_MASK = (0xF << 12),
+ RSP_GET_PARAM_SLI_HINT1_MASK = (0xFF << 16),
+ RSP_GET_PARAM_SLI_HINT2_MASK = (0x1F << 24),
+ /* DW6 */
+ RSP_GET_PARAM_EQ_PAGE_CNT_MASK = (0xF << 0),
+ RSP_GET_PARAM_EQE_SZS_MASK = (0xF << 8),
+ RSP_GET_PARAM_EQ_PAGE_SZS_MASK = (0xFF << 16),
+ /* DW8 */
+ RSP_GET_PARAM_CQ_PAGE_CNT_MASK = (0xF << 0),
+ RSP_GET_PARAM_CQE_SZS_MASK = (0xF << 8),
+ RSP_GET_PARAM_CQ_PAGE_SZS_MASK = (0xFF << 16),
+ /* DW10 */
+ RSP_GET_PARAM_MQ_PAGE_CNT_MASK = (0xF << 0),
+ RSP_GET_PARAM_MQ_PAGE_SZS_MASK = (0xFF << 16),
+ /* DW12 */
+ RSP_GET_PARAM_WQ_PAGE_CNT_MASK = (0xF << 0),
+ RSP_GET_PARAM_WQE_SZS_MASK = (0xF << 8),
+ RSP_GET_PARAM_WQ_PAGE_SZS_MASK = (0xFF << 16),
+ /* DW14 */
+ RSP_GET_PARAM_RQ_PAGE_CNT_MASK = (0xF << 0),
+ RSP_GET_PARAM_RQE_SZS_MASK = (0xF << 8),
+ RSP_GET_PARAM_RQ_PAGE_SZS_MASK = (0xFF << 16),
+ /* DW15W1*/
+ RSP_GET_PARAM_RQ_DB_WINDOW_MASK = 0xF000,
+ /* DW16 */
+ RSP_GET_PARAM_FC = (1 << 0),
+ RSP_GET_PARAM_EXT = (1 << 1),
+ RSP_GET_PARAM_HDRR = (1 << 2),
+ RSP_GET_PARAM_SGLR = (1 << 3),
+ RSP_GET_PARAM_FBRR = (1 << 4),
+ RSP_GET_PARAM_AREG = (1 << 5),
+ RSP_GET_PARAM_TGT = (1 << 6),
+ RSP_GET_PARAM_TERP = (1 << 7),
+ RSP_GET_PARAM_ASSI = (1 << 8),
+ RSP_GET_PARAM_WCHN = (1 << 9),
+ RSP_GET_PARAM_TCCA = (1 << 10),
+ RSP_GET_PARAM_TRTY = (1 << 11),
+ RSP_GET_PARAM_TRIR = (1 << 12),
+ RSP_GET_PARAM_PHOFF = (1 << 13),
+ RSP_GET_PARAM_PHON = (1 << 14),
+ RSP_GET_PARAM_PHWQ = (1 << 15),
+ RSP_GET_PARAM_BOUND_4GA = (1 << 16),
+ RSP_GET_PARAM_RXC = (1 << 17),
+ RSP_GET_PARAM_HLM = (1 << 18),
+ RSP_GET_PARAM_IPR = (1 << 19),
+ RSP_GET_PARAM_RXRI = (1 << 20),
+ RSP_GET_PARAM_SGLC = (1 << 21),
+ RSP_GET_PARAM_TIMM = (1 << 22),
+ RSP_GET_PARAM_TSMM = (1 << 23),
+ RSP_GET_PARAM_OAS = (1 << 25),
+ RSP_GET_PARAM_LC = (1 << 26),
+ RSP_GET_PARAM_AGXF = (1 << 27),
+ RSP_GET_PARAM_LOOPBACK_MASK = (0xF << 28),
+ /* DW18 */
+ RSP_GET_PARAM_SGL_PAGE_CNT_MASK = (0xF << 0),
+ RSP_GET_PARAM_SGL_PAGE_SZS_MASK = (0xFF << 8),
+ RSP_GET_PARAM_SGL_PP_ALIGN_MASK = (0xFF << 16)
+};
+
+struct sli4_rqst_cmn_get_sli4_params_s {
+ struct sli4_rqst_hdr_s hdr;
+};
+
+struct sli4_rsp_cmn_get_sli4_params_s {
+ struct sli4_rsp_hdr_s hdr;
+ __le32 dw4_protocol_type;
+ __le32 dw5_sli;
+ __le32 dw6_eq_page_cnt;
+ __le16 eqe_count_mask;
+ __le16 rsvd26;
+ __le32 dw8_cq_page_cnt;
+ __le16 cqe_count_mask;
+ __le16 rsvd34;
+ __le32 dw10_mq_page_cnt;
+ __le16 mqe_count_mask;
+ __le16 rsvd42;
+ __le32 dw12_wq_page_cnt;
+ __le16 wqe_count_mask;
+ __le16 rsvd50;
+ __le32 dw14_rq_page_cnt;
+ __le16 rqe_count_mask;
+ __le16 dw15w1_rq_db_window;
+ __le32 dw16_loopback_scope;
+ __le32 sge_supported_length;
+ __le32 dw18_sgl_page_cnt;
+ __le16 min_rq_buffer_size;
+ __le16 rsvd75;
+ __le32 max_rq_buffer_size;
+ __le16 physical_xri_max;
+ __le16 physical_rpi_max;
+ __le16 physical_vpi_max;
+ __le16 physical_vfi_max;
+ __le32 rsvd88;
+ __le16 frag_num_field_offset;
+ __le16 frag_num_field_size;
+ __le16 sgl_index_field_offset;
+ __le16 sgl_index_field_size;
+ __le32 chain_sge_initial_value_lo;
+ __le32 chain_sge_initial_value_hi;
+};
+
+/**
+ * @brief COMMON_QUERY_FW_CONFIG
+ *
+ * This command retrieves firmware configuration parameters and adapter
+ * resources available to the driver.
+ */
+struct sli4_rqst_cmn_query_fw_config_s {
+ struct sli4_rqst_hdr_s hdr;
+};
+
+#define SLI4_FUNCTION_MODE_INI_MODE 0x40
+#define SLI4_FUNCTION_MODE_TGT_MODE 0x80
+#define SLI4_FUNCTION_MODE_DUA_MODE 0x800
+
+#define SLI4_ULP_MODE_INI 0x40
+#define SLI4_ULP_MODE_TGT 0x80
+
+struct sli4_rsp_cmn_query_fw_config_s {
+ struct sli4_rsp_hdr_s hdr;
+ __le32 config_number;
+ __le32 asic_rev;
+ __le32 physical_port;
+ __le32 function_mode;
+ __le32 ulp0_mode;
+ __le32 ulp0_nic_wqid_base;
+ __le32 ulp0_nic_wq_total; /* Dword 10 */
+ __le32 ulp0_toe_wqid_base;
+ __le32 ulp0_toe_wq_total;
+ __le32 ulp0_toe_rqid_base;
+ __le32 ulp0_toe_rq_total;
+ __le32 ulp0_toe_defrqid_base;
+ __le32 ulp0_toe_defrq_total;
+ __le32 ulp0_lro_rqid_base;
+ __le32 ulp0_lro_rq_total;
+ __le32 ulp0_iscsi_icd_base;
+ __le32 ulp0_iscsi_icd_total; /* Dword 20 */
+ __le32 ulp1_mode;
+ __le32 ulp1_nic_wqid_base;
+ __le32 ulp1_nic_wq_total;
+ __le32 ulp1_toe_wqid_base;
+ __le32 ulp1_toe_wq_total;
+ __le32 ulp1_toe_rqid_base;
+ __le32 ulp1_toe_rq_total;
+ __le32 ulp1_toe_defrqid_base;
+ __le32 ulp1_toe_defrq_total;
+ __le32 ulp1_lro_rqid_base; /* Dword 30 */
+ __le32 ulp1_lro_rq_total;
+ __le32 ulp1_iscsi_icd_base;
+ __le32 ulp1_iscsi_icd_total;
+ __le32 function_capabilities;
+ __le32 ulp0_cq_base;
+ __le32 ulp0_cq_total;
+ __le32 ulp0_eq_base;
+ __le32 ulp0_eq_total;
+ __le32 ulp0_iscsi_chain_icd_base;
+ __le32 ulp0_iscsi_chain_icd_total; /* Dword 40 */
+ __le32 ulp1_iscsi_chain_icd_base;
+ __le32 ulp1_iscsi_chain_icd_total;
+};
+
+/**
+ * @brief COMMON_GET_PORT_NAME
+ */
+/*Port Types*/
+enum {
+ PORT_TYPE_ETH = 0,
+ PORT_TYPE_FC = 1,
+};
+
+struct sli4_rqst_cmn_get_port_name_s {
+ struct sli4_rqst_hdr_s hdr;
+ u8 port_type;
+ u8 rsvd4[3];
+};
+
+struct sli4_rsp_cmn_get_port_name_s {
+ struct sli4_rsp_hdr_s hdr;
+ char port_name[4];
+};
+
+/**
+ * @brief COMMON_WRITE_FLASHROM
+ */
+struct sli4_rqst_cmn_write_flashrom_s {
+ struct sli4_rqst_hdr_s hdr;
+ __le32 flash_rom_access_opcode;
+ __le32 flash_rom_access_operation_type;
+ __le32 data_buffer_size;
+ __le32 offset;
+ u8 data_buffer[4];
+};
+
+#define SLI4_MGMT_FLASHROM_OPCODE_FLASH 0x01
+#define SLI4_MGMT_FLASHROM_OPCODE_SAVE 0x02
+#define SLI4_MGMT_FLASHROM_OPCODE_CLEAR 0x03
+#define SLI4_MGMT_FLASHROM_OPCODE_REPORT 0x04
+#define SLI4_MGMT_FLASHROM_OPCODE_IMAGE_INFO 0x05
+#define SLI4_MGMT_FLASHROM_OPCODE_IMAGE_CRC 0x06
+#define SLI4_MGMT_FLASHROM_OPCODE_OFFSET_BASED_FLASH 0x07
+#define SLI4_MGMT_FLASHROM_OPCODE_OFFSET_BASED_SAVE 0x08
+#define SLI4_MGMT_PHY_FLASHROM_OPCODE_FLASH 0x09
+#define SLI4_MGMT_PHY_FLASHROM_OPCODE_SAVE 0x0a
+
+#define SLI4_FLASH_ROM_ACCESS_OP_TYPE_ISCSI 0x00
+#define SLI4_FLASH_ROM_ACCESS_OP_TYPE_REDBOOT 0x01
+#define SLI4_FLASH_ROM_ACCESS_OP_TYPE_BIOS 0x02
+#define SLI4_FLASH_ROM_ACCESS_OP_TYPE_PXE_BIOS 0x03
+#define SLI4_FLASH_ROM_ACCESS_OP_TYPE_CODE_CONTROL 0x04
+#define SLI4_FLASH_ROM_ACCESS_OP_TYPE_IPSEC_CFG 0x05
+#define SLI4_FLASH_ROM_ACCESS_OP_TYPE_INIT_DATA 0x06
+#define SLI4_FLASH_ROM_ACCESS_OP_TYPE_ROM_OFFSET 0x07
+#define SLI4_FLASH_ROM_ACCESS_OP_TYPE_FC_BIOS 0x08
+#define SLI4_FLASH_ROM_ACCESS_OP_TYPE_ISCSI_BAK 0x09
+#define SLI4_FLASH_ROM_ACCESS_OP_TYPE_FC_ACT 0x0a
+#define SLI4_FLASH_ROM_ACCESS_OP_TYPE_FC_BAK 0x0b
+#define SLI4_FLASH_ROM_ACCESS_OP_TYPE_CODE_CTRL_P 0x0c
+#define SLI4_FLASH_ROM_ACCESS_OP_TYPE_NCSI 0x0d
+#define SLI4_FLASH_ROM_ACCESS_OP_TYPE_NIC 0x0e
+#define SLI4_FLASH_ROM_ACCESS_OP_TYPE_DCBX 0x0f
+#define SLI4_FLASH_ROM_ACCESS_OP_TYPE_PXE_BIOS_CFG 0x10
+#define SLI4_FLASH_ROM_ACCESS_OP_TYPE_ALL_CFG_DATA 0x11
+
+/**
+ * @brief COMMON_READ_TRANSCEIVER_DATA
+ *
+ * This command reads SFF transceiver data(Format is defined
+ * by the SFF-8472 specification).
+ */
+struct sli4_rqst_cmn_read_transceiver_data_s {
+ struct sli4_rqst_hdr_s hdr;
+ __le32 page_number;
+ __le32 port;
+};
+
+struct sli4_rsp_cmn_read_transceiver_data_s {
+ struct sli4_rsp_hdr_s hdr;
+ __le32 page_number;
+ __le32 port;
+ __le32 page_data[32];
+ __le32 page_data_2[32];
+};
+
+/**
+ * @brief COMMON_READ_OBJECT
+ */
+
+enum {
+ SLI4_REQ_DESIRE_READLEN = 0xFFFFFF
+};
+
+struct sli4_rqst_cmn_read_object_s {
+ struct sli4_rqst_hdr_s hdr;
+ __le32 desired_read_length_dword;
+ __le32 read_offset;
+ u8 object_name[104];
+ __le32 host_buffer_descriptor_count;
+ struct sli4_bde_s host_buffer_descriptor[0];
+};
+
+enum {
+ RSP_COM_READ_OBJ_EOF = 0x80000000
+
+};
+
+struct sli4_rsp_cmn_read_object_s {
+ struct sli4_rsp_hdr_s hdr;
+ __le32 actual_read_length;
+ __le32 eof_dword;
+};
+
+/**
+ * @brief COMMON_WRITE_OBJECT
+ */
+
+enum {
+ SLI4_RQ_DES_WRITE_LEN = 0xFFFFFF,
+ SLI4_RQ_DES_WRITE_LEN_NOC = 0x40000000,
+ SLI4_RQ_DES_WRITE_LEN_EOF = 0x80000000
+
+};
+
+struct sli4_rqst_cmn_write_object_s {
+ struct sli4_rqst_hdr_s hdr;
+ __le32 desired_write_len_dword;
+ __le32 write_offset;
+ u8 object_name[104];
+ __le32 host_buffer_descriptor_count;
+ struct sli4_bde_s host_buffer_descriptor[0];
+};
+
+enum {
+ RSP_CHANGE_STATUS = 0xFF
+
+};
+
+struct sli4_rsp_cmn_write_object_s {
+ struct sli4_rsp_hdr_s hdr;
+ __le32 actual_write_length;
+ __le32 change_status_dword;
+};
+
+/**
+ * @brief COMMON_DELETE_OBJECT
+ */
+struct sli4_rqst_cmn_delete_object_s {
+ struct sli4_rqst_hdr_s hdr;
+ __le32 rsvd4;
+ __le32 rsvd5;
+ u8 object_name[104];
+};
+
+/**
+ * @brief COMMON_READ_OBJECT_LIST
+ */
+
+enum {
+ SLI4_RQ_OBJ_LIST_READ_LEN = 0xFFFFFF
+
+};
+
+struct sli4_rqst_cmn_read_object_list_s {
+ struct sli4_rqst_hdr_s hdr;
+ __le32 desired_read_length_dword;
+ __le32 read_offset;
+ u8 object_name[104];
+ __le32 host_buffer_descriptor_count;
+ struct sli4_bde_s host_buffer_descriptor[0];
+};
+
+/**
+ * @brief COMMON_SET_DUMP_LOCATION
+ */
+
+enum {
+ SLI4_RQ_COM_SET_DUMP_BUFFER_LEN = 0xFFFFFF,
+ SLI4_RQ_COM_SET_DUMP_FDB = 0x20000000,
+ SLI4_RQ_COM_SET_DUMP_BLP = 0x40000000,
+ SLI4_RQ_COM_SET_DUMP_QRY = 0x80000000,
+
+};
+
+struct sli4_rqst_cmn_set_dump_location_s {
+ struct sli4_rqst_hdr_s hdr;
+ __le32 buffer_length_dword;
+ __le32 buf_addr_low;
+ __le32 buf_addr_high;
+};
+
+enum {
+ RSP_SET_DUMP_BUFFER_LEN = 0xFFFFFF
+
+};
+
+struct sli4_rsp_cmn_set_dump_location_s {
+ struct sli4_rsp_hdr_s hdr;
+ __le32 buffer_length_dword;
+};
+
+/**
+ * @brief COMMON_SET_SET_FEATURES
+ */
+#define SLI4_SET_FEATURES_DIF_SEED 0x01
+#define SLI4_SET_FEATURES_XRI_TIMER 0x03
+#define SLI4_SET_FEATURES_MAX_PCIE_SPEED 0x04
+#define SLI4_SET_FEATURES_FCTL_CHECK 0x05
+#define SLI4_SET_FEATURES_FEC 0x06
+#define SLI4_SET_FEATURES_PCIE_RECV_DETECT 0x07
+#define SLI4_SET_FEATURES_DIF_MEMORY_MODE 0x08
+#define SLI4_SET_FEATURES_DISABLE_SLI_PORT_PAUSE_STATE 0x09
+#define SLI4_SET_FEATURES_ENABLE_PCIE_OPTIONS 0x0A
+#define SLI4_SET_FEAT_CFG_AUTO_XFER_RDY_T10PI 0x0C
+#define SLI4_SET_FEATURES_ENABLE_MULTI_RECEIVE_QUEUE 0x0D
+#define SLI4_SET_FEATURES_SET_FTD_XFER_HINT 0x0F
+#define SLI4_SET_FEATURES_SLI_PORT_HEALTH_CHECK 0x11
+
+struct sli4_rqst_cmn_set_features_s {
+ struct sli4_rqst_hdr_s hdr;
+ __le32 feature;
+ __le32 param_len;
+ __le32 params[8];
+};
+
+struct sli4_rqst_cmn_set_features_dif_seed_s {
+ __le16 seed;
+ __le16 rsvd16;
+};
+
+enum {
+ SLI4_RQ_COM_SET_T10_PI_MEM_MODEL = 0x1
+
+};
+
+struct sli4_rqst_cmn_set_features_t10_pi_mem_model_s {
+ __le32 tmm_dword;
+};
+
+enum {
+ SLI4_RQ_MULTIRQ_ISR = 0x1,
+ SLI4_RQ_MULTIRQ_AUTOGEN_XFER_RDY = 0x2,
+
+ SLI4_RQ_MULTIRQ_NUM_RQS = 0xFF,
+ SLI4_RQ_MULTIRQ_RQ_SELECT = 0xF00
+};
+
+struct sli4_rqst_cmn_set_features_multirq_s {
+ __le32 auto_gen_xfer_dword; /* Include Sequence Reporting */
+ /* Auto Generate XFER-RDY Enabled */
+ __le32 num_rqs_dword;
+};
+
+enum {
+ SLI4_SETFEAT_XFERRDY_T10PI_RTC = (1 << 0), /* DW0 */
+ SLI4_SETFEAT_XFERRDY_T10PI_ATV = (1 << 1),
+ SLI4_SETFEAT_XFERRDY_T10PI_TMM = (1 << 2),
+ SLI4_SETFEAT_XFERRDY_T10PI_PTYPE = (0x7 << 4),
+ SLI4_SETFEAT_XFERRDY_T10PI_BLKSIZ = (0x7 << 7),
+};
+
+struct sli4_rqst_cmn_set_features_xfer_rdy_t10pi_s {
+ __le32 dw0_flags;
+ __le16 app_tag;
+ __le16 rsvd6;
+};
+
+enum {
+ SLI4_RQ_HEALTH_CHECK_ENABLE = 0x1,
+ SLI4_RQ_HEALTH_CHECK_QUERY = 0x2
+
+};
+
+struct sli4_rqst_cmn_set_features_health_check_s {
+ __le32 health_check_dword;
+};
+
+struct sli4_rqst_cmn_set_features_set_fdt_xfer_hint_s {
+ __le32 fdt_xfer_hint;
+};
+
+/**
+ * @brief DMTF_EXEC_CLP_CMD
+ */
+struct sli4_rqst_dmtf_exec_clp_cmd_s {
+ struct sli4_rqst_hdr_s hdr;
+ __le32 cmd_buf_length;
+ __le32 resp_buf_length;
+ __le32 cmd_buf_addr_low;
+ __le32 cmd_buf_addr_high;
+ __le32 resp_buf_addr_low;
+ __le32 resp_buf_addr_high;
+};
+
+struct sli4_rsp_dmtf_exec_clp_cmd_s {
+ struct sli4_rsp_hdr_s hdr;
+ __le32 rsvd4;
+ __le32 resp_length;
+ __le32 rsvd6;
+ __le32 rsvd7;
+ __le32 rsvd8;
+ __le32 rsvd9;
+ __le32 clp_status;
+ __le32 clp_detailed_status;
+};
+
+#define SLI4_PROTOCOL_FC 0x10
+#define SLI4_PROTOCOL_DEFAULT 0xff
+
+struct sli4_rspource_descriptor_v1_s {
+ u8 descriptor_type;
+ u8 descriptor_length;
+ __le16 rsvd16;
+ __le32 type_specific[0];
+};
+
+enum {
+ SLI4_PCIE_DESC_IMM = 0x4000,
+ SLI4_PCIE_DESC_NOSV = 0x8000,
+
+ SLI4_PCIE_DESC_PF_NO = 0x3FF0000,
+
+ SLI4_PCIE_DESC_MISSN_ROLE = 0xFF,
+ SLI4_PCIE_DESC_PCHG = 0x8000000,
+ SLI4_PCIE_DESC_SCHG = 0x10000000,
+ SLI4_PCIE_DESC_XCHG = 0x20000000,
+ SLI4_PCIE_DESC_XROM = 0xC0000000
+};
+
+struct sli4_pcie_resource_descriptor_v1_s {
+ u8 descriptor_type;
+ u8 descriptor_length;
+ __le16 imm_nosv_dword;
+ __le32 pf_number_dword;
+ __le32 rsvd3;
+ u8 sriov_state;
+ u8 pf_state;
+ u8 pf_type;
+ u8 rsvd4;
+ __le16 number_of_vfs;
+ __le16 rsvd5;
+ __le32 mission_roles_dword;
+ __le32 rsvd7[16];
+};
+
+/**
+ * @brief COMMON_GET_FUNCTION_CONFIG
+ */
+struct sli4_rqst_cmn_get_function_config_s {
+ struct sli4_rqst_hdr_s hdr;
+};
+
+struct sli4_rsp_cmn_get_function_config_s {
+ struct sli4_rsp_hdr_s hdr;
+ __le32 desc_count;
+ __le32 desc[54];
+};
+
+/**
+ * @brief COMMON_GET_PROFILE_CONFIG
+ */
+
+enum {
+ SLI4_RQ_GET_PROFILE_ID = 0XFF,
+ SLI4_RQ_GET_PROFILE_TYPE = 0x300
+};
+
+struct sli4_rqst_cmn_get_profile_config_s {
+ struct sli4_rqst_hdr_s hdr;
+ __le32 profile_id_dword;
+};
+
+struct sli4_rsp_cmn_get_profile_config_s {
+ struct sli4_rsp_hdr_s hdr;
+ __le32 desc_count;
+ __le32 desc[0];
+};
+
+/**
+ * @brief COMMON_SET_PROFILE_CONFIG
+ */
+
+enum {
+ SLI4_RQ_SET_PROFILE_ID = 0XFF,
+ SLI4_RQ_SET_PROFILE_ISAP = 0x80000000
+
+};
+
+struct sli4_rqst_cmn_set_profile_config_s {
+ struct sli4_rqst_hdr_s hdr;
+ __le32 profile_id_dword;
+ __le32 desc_count;
+ __le32 desc[0];
+};
+
+struct sli4_rsp_cmn_set_profile_config_s {
+ struct sli4_rsp_hdr_s hdr;
+};
+
+/**
+ * @brief Profile Descriptor for profile functions
+ */
+struct sli4_profile_descriptor_s {
+ u8 profile_id;
+ u8 rsvd8;
+ u8 profile_index;
+ u8 rsvd24;
+ __le32 profile_description[128];
+};
+
+/*
+ * We don't know in advance how many descriptors there are. We have
+ * to pick a number that we think will be big enough and ask for that
+ * many.
+ */
+
+#define MAX_PROD_DES 40
+
+/**
+ * @brief COMMON_GET_PROFILE_LIST
+ */
+
+enum {
+ SLI4_RQ_PROFILE_INDEX = 0XFF
+
+};
+
+struct sli4_rqst_cmn_get_profile_list_s {
+ struct sli4_rqst_hdr_s hdr;
+ __le32 start_profile_index_dword;
+};
+
+struct sli4_rsp_cmn_get_profile_list_s {
+ struct sli4_rsp_hdr_s hdr;
+ __le32 profile_descriptor_count;
+ struct sli4_profile_descriptor_s profile_descriptor[MAX_PROD_DES];
+};
+
+/**
+ * @brief COMMON_GET_ACTIVE_PROFILE
+ */
+struct sli4_rqst_cmn_get_active_profile_s {
+ struct sli4_rqst_hdr_s hdr;
+};
+
+struct sli4_rsp_cmn_get_active_profile_s {
+ struct sli4_rsp_hdr_s hdr;
+ u8 active_profile_id;
+ u8 rsvd0;
+ u8 next_profile_id;
+ u8 rsvd1;
+};
+
+/**
+ * @brief COMMON_SET_ACTIVE_PROFILE
+ */
+
+enum {
+ SLI4_REQ_SETACTIVE_PROF_ID = 0xFF,
+ SLI4_REQ_SETACTIVE_PROF_FD = 0x80000000
+};
+
+struct sli4_rqst_cmn_set_active_profile_s {
+ struct sli4_rqst_hdr_s hdr;
+ __le32 active_profile_id_dword;
+};
+
+struct sli4_rsp_cmn_set_active_profile_s {
+ struct sli4_rsp_hdr_s hdr;
+};
+
+/**
+ * @brief Link Config Descriptor for link config functions
+ */
+struct sli4_link_config_descriptor_s {
+ u8 link_config_id;
+ u8 rsvd1[3];
+ __le32 config_description[8];
+};
+
+#define MAX_LINK_DES 10
+
+/**
+ * @brief COMMON_GET_RECONFIG_LINK_INFO
+ */
+struct sli4_rqst_cmn_get_reconfig_link_info_s {
+ struct sli4_rqst_hdr_s hdr;
+};
+
+struct sli4_rsp_cmn_get_reconfig_link_info_s {
+ struct sli4_rsp_hdr_s hdr;
+ u8 active_link_config_id;
+ u8 rsvd17;
+ u8 next_link_config_id;
+ u8 rsvd19;
+ __le32 link_configuration_descriptor_count;
+ struct sli4_link_config_descriptor_s desc[MAX_LINK_DES];
+};
+
+/**
+ * @brief COMMON_SET_RECONFIG_LINK_ID
+ */
+enum {
+ SLI4_SET_RECONFIG_LINKID_NEXT = 0xff,
+ SLI4_SET_RECONFIG_LINKID_FD = (1 << 31),
+};
+
+struct sli4_rqst_cmn_set_reconfig_link_id_s {
+ struct sli4_rqst_hdr_s hdr;
+ __le32 dw4_flags;
+};
+
+struct sli4_rsp_cmn_set_reconfig_link_id_s {
+ struct sli4_rsp_hdr_s hdr;
+};
+
+struct sli4_rqst_lowlevel_set_watchdog_s {
+ struct sli4_rqst_hdr_s hdr;
+ __le16 watchdog_timeout;
+ __le16 rsvd18;
+};
+
+struct sli4_rsp_lowlevel_set_watchdog_s {
+ struct sli4_rsp_hdr_s hdr;
+ __le32 rsvd;
+};
+
+/*
+ * Maximum value for a FCFI
+ *
+ * Note that although most commands provide a 16 bit field for the FCFI,
+ * the FC/FCoE Asynchronous Recived CQE format only provides 6 bits for
+ * the returned FCFI. Then effectively, the FCFI cannot be larger than
+ * 1 << 6 or 64.
+ */
+#define SLI4_MAX_FCFI 64
+
+/**
+ * FC opcode (OPC) values.
+ */
+#define SLI4_OPC_WQ_CREATE 0x1
+#define SLI4_OPC_WQ_DESTROY 0x2
+#define SLI4_OPC_POST_SGL_PAGES 0x3
+#define SLI4_OPC_RQ_CREATE 0x5
+#define SLI4_OPC_RQ_DESTROY 0x6
+#define SLI4_OPC_READ_FCF_TABLE 0x8
+#define SLI4_OPC_POST_HDR_TEMPLATES 0xb
+#define SLI4_OPC_REDISCOVER_FCF 0x10
+
+/* Use the default CQ associated with the WQ */
+#define SLI4_CQ_DEFAULT 0xffff
+
+/**
+ * @brief POST_SGL_PAGES
+ *
+ * Register the scatter gather list (SGL) memory and associate it with an XRI.
+ */
+struct sli4_rqst_post_sgl_pages_s {
+ struct sli4_rqst_hdr_s hdr;
+ __le16 xri_start;
+ __le16 xri_count;
+ struct {
+ __le32 page0_low;
+ __le32 page0_high;
+ __le32 page1_low;
+ __le32 page1_high;
+ } page_set[10];
+};
+
+struct sli4_rsp_post_sgl_pages_s {
+ struct sli4_rsp_hdr_s hdr;
+};
+
+/**
+ * @brief POST_HDR_TEMPLATES
+ */
+struct sli4_rqst_post_hdr_templates_s {
+ struct sli4_rqst_hdr_s hdr;
+ __le16 rpi_offset;
+ __le16 page_count;
+ struct sli4_dmaaddr_s page_descriptor[0];
+};
+
+#define SLI4_HDR_TEMPLATE_SIZE 64
+
+/** The XRI associated with this IO is already active */
+#define SLI4_IO_CONTINUATION (1 << 0)
+/** Automatically generate a good RSP frame */
+#define SLI4_IO_AUTO_GOOD_RESPONSE (1 << 1)
+#define SLI4_IO_NO_ABORT (1 << 2)
+/** Set the DNRX bit because no auto xref rdy buffer is posted */
+#define SLI4_IO_DNRX (1 << 3)
+
+
+
+enum sli4_callback_e {
+ SLI4_CB_LINK,
+ SLI4_CB_MAX /* must be last */
+};
+
+enum sli4_link_status_e {
+ SLI_LINK_STATUS_UP,
+ SLI_LINK_STATUS_DOWN,
+ SLI_LINK_STATUS_NO_ALPA,
+ SLI_LINK_STATUS_MAX,
+};
+
+enum sli4_link_topology_e {
+ SLI_LINK_TOPO_NPORT = 1, /** fabric or point-to-point */
+ SLI_LINK_TOPO_LOOP,
+ SLI_LINK_TOPO_LOOPBACK_INTERNAL,
+ SLI_LINK_TOPO_LOOPBACK_EXTERNAL,
+ SLI_LINK_TOPO_NONE,
+ SLI_LINK_TOPO_MAX,
+};
+
+enum sli4_link_medium_e {
+ SLI_LINK_MEDIUM_ETHERNET,
+ SLI_LINK_MEDIUM_FC,
+ SLI_LINK_MEDIUM_MAX,
+};
+
+/*Driver specific structures*/
+
+struct sli4_link_event_s {
+ enum sli4_link_status_e status; /* link up/down */
+ enum sli4_link_topology_e topology;
+ enum sli4_link_medium_e medium; /* Ethernet / FC */
+ u32 speed; /* Mbps */
+ u8 *loop_map;
+ u32 fc_id;
+};
+
+enum sli4_resource_e {
+ SLI_RSRC_VFI,
+ SLI_RSRC_VPI,
+ SLI_RSRC_RPI,
+ SLI_RSRC_XRI,
+ SLI_RSRC_FCFI,
+ SLI_RSRC_MAX /* must be last */
+};
+
+struct sli4_extent_s {
+ u32 number; /* number of extents */
+ u32 size; /* no of element in each extent */
+ u32 n_alloc; /* no of elements allocated */
+ u32 *base;
+ unsigned long *use_map; /* shows resource in use */
+ u32 map_size; /* no of bits in bitmap */
+};
+
+struct sli4_queue_info_s {
+ u16 max_qcount[SLI_QTYPE_MAX];
+ u32 max_qentries[SLI_QTYPE_MAX];
+ u16 count_mask[SLI_QTYPE_MAX];
+ u16 count_method[SLI_QTYPE_MAX];
+ u32 qpage_count[SLI_QTYPE_MAX];
+};
+
+struct sli4_s {
+ void *os;
+ struct pci_dev *pcidev;
+#define SLI_PCI_MAX_REGS 6
+ void __iomem *reg[SLI_PCI_MAX_REGS];
+
+ u32 sli_rev; /* SLI revision number */
+ u32 sli_family;
+ u32 if_type; /* SLI Interface type */
+
+ u16 asic_type;
+ u16 asic_rev;
+
+ u16 e_d_tov;
+ u16 r_a_tov;
+ struct sli4_queue_info_s qinfo;
+ u16 link_module_type;
+ u8 rq_batch;
+ u16 rq_min_buf_size;
+ u32 rq_max_buf_size;
+ u8 topology;
+ u8 wwpn[8]; /* WW Port Name */
+ u8 wwnn[8]; /* WW Node Name */
+ u32 fw_rev[2];
+ u8 fw_name[2][16];
+ char ipl_name[16];
+ u32 hw_rev[3];
+ u8 port_number;
+ char port_name[2];
+ char modeldesc[64];
+ char bios_version_string[32];
+ /*
+ * Tracks the port resources using extents metaphor. For
+ * devices that don't implement extents (i.e.
+ * has_extents == FALSE), the code models each resource as
+ * a single large extent.
+ */
+ struct sli4_extent_s extent[SLI_RSRC_MAX];
+ u32 features;
+ u32 has_extents:1,
+ auto_reg:1,
+ auto_xfer_rdy:1,
+ hdr_template_req:1,
+ perf_hint:1,
+ perf_wq_id_association:1,
+ cq_create_version:2,
+ mq_create_version:2,
+ high_login_mode:1,
+ sgl_pre_registered:1,
+ sgl_pre_registration_required:1,
+ t10_dif_inline_capable:1,
+ t10_dif_separate_capable:1;
+ u32 sge_supported_length;
+ u32 sgl_page_sizes;
+ u32 max_sgl_pages;
+ u32 wqe_size;
+
+ /*
+ * Callback functions
+ */
+ int (*link)(void *ctx, void *event);
+ void *link_arg;
+
+ struct efc_dma_s bmbx;
+
+ /* Save pointer to physical memory descriptor for non-embedded
+ * SLI_CONFIG commands for BMBX dumping purposes
+ */
+ struct efc_dma_s *bmbx_non_emb_pmd;
+
+ struct efc_dma_s vpd_data;
+ u32 vpd_length;
+};
+
#endif /* !_SLI4_H */
--
2.13.7
next prev parent reply other threads:[~2019-10-23 21:56 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-23 21:55 [PATCH 00/32] [NEW] efct: Broadcom (Emulex) FC Target driver James Smart
2019-10-23 21:55 ` [PATCH 01/32] elx: libefc_sli: SLI-4 register offsets and field definitions James Smart
2019-10-24 16:22 ` Daniel Wagner
2019-10-25 23:04 ` James Smart
2019-10-23 21:55 ` [PATCH 02/32] elx: libefc_sli: SLI Descriptors and Queue entries James Smart
2019-10-25 9:59 ` Daniel Wagner
2019-10-25 23:00 ` James Smart
2019-10-23 21:55 ` James Smart [this message]
2019-10-25 11:19 ` [PATCH 03/32] elx: libefc_sli: Data structures and defines for mbox commands Daniel Wagner
2019-10-25 12:20 ` Steffen Maier
2019-10-25 22:10 ` James Smart
2019-10-25 22:42 ` James Smart
2019-10-23 21:55 ` [PATCH 04/32] elx: libefc_sli: queue create/destroy/parse routines James Smart
2019-10-25 15:35 ` Daniel Wagner
2019-10-25 22:24 ` James Smart
2019-10-23 21:55 ` [PATCH 05/32] elx: libefc_sli: Populate and post different WQEs James Smart
2019-10-23 21:55 ` [PATCH 06/32] elx: libefc_sli: bmbx routines and SLI config commands James Smart
2019-10-23 21:55 ` [PATCH 07/32] elx: libefc_sli: APIs to setup SLI library James Smart
2019-10-23 21:55 ` [PATCH 08/32] elx: libefc: Generic state machine framework James Smart
2019-10-23 21:55 ` [PATCH 09/32] elx: libefc: Emulex FC discovery library APIs and definitions James Smart
2019-10-23 21:55 ` [PATCH 10/32] elx: libefc: FC Domain state machine interfaces James Smart
2019-10-23 21:55 ` [PATCH 11/32] elx: libefc: SLI and FC PORT " James Smart
2019-10-23 21:55 ` [PATCH 12/32] elx: libefc: Remote node " James Smart
2019-10-23 21:55 ` [PATCH 13/32] elx: libefc: Fabric " James Smart
2019-10-23 21:55 ` [PATCH 14/32] elx: libefc: FC node ELS and state handling James Smart
2019-10-23 21:55 ` [PATCH 15/32] elx: efct: Data structures and defines for hw operations James Smart
2019-10-23 21:55 ` [PATCH 16/32] elx: efct: Driver initialization routines James Smart
2019-10-23 21:55 ` [PATCH 17/32] elx: efct: Hardware queues creation and deletion James Smart
2019-10-23 21:55 ` [PATCH 18/32] elx: efct: RQ buffer, memory pool allocation and deallocation APIs James Smart
2019-10-23 21:55 ` [PATCH 19/32] elx: efct: Hardware IO and SGL initialization James Smart
2019-10-23 21:55 ` [PATCH 20/32] elx: efct: Hardware queues processing James Smart
2019-10-23 21:55 ` [PATCH 21/32] elx: efct: Unsolicited FC frame processing routines James Smart
2019-10-23 21:55 ` [PATCH 22/32] elx: efct: Extended link Service IO handling James Smart
2019-10-23 21:55 ` [PATCH 23/32] elx: efct: SCSI IO handling routines James Smart
2019-10-23 21:55 ` [PATCH 24/32] elx: efct: LIO backend interface routines James Smart
2019-10-24 22:27 ` Bart Van Assche
2019-10-28 17:49 ` James Smart
2019-10-28 18:31 ` Bart Van Assche
2019-10-23 21:55 ` [PATCH 25/32] elx: efct: Hardware IO submission routines James Smart
2019-10-23 21:55 ` [PATCH 26/32] elx: efct: link statistics and SFP data James Smart
2019-10-23 21:55 ` [PATCH 27/32] elx: efct: xport and hardware teardown routines James Smart
2019-10-23 21:55 ` [PATCH 28/32] elx: efct: IO timeout handling routines James Smart
2019-10-23 21:55 ` [PATCH 29/32] elx: efct: Firmware update, async link processing James Smart
2019-10-23 21:55 ` [PATCH 30/32] elx: efct: scsi_transport_fc host interface support James Smart
2019-10-23 21:55 ` [PATCH 31/32] elx: efct: Add Makefile and Kconfig for efct driver James Smart
2019-10-25 15:55 ` Daniel Wagner
2019-10-25 22:47 ` James Smart
2019-10-23 21:55 ` [PATCH 32/32] elx: efct: Tie into kernel Kconfig and build process James Smart
2019-10-26 0:34 ` kbuild test robot
2019-10-26 0:34 ` kbuild test robot
2019-10-26 0:39 ` Randy Dunlap
2019-10-26 0:39 ` Randy Dunlap
2019-10-26 14:13 ` kbuild test robot
2019-10-26 14:13 ` kbuild test robot
2019-10-26 14:13 ` [RFC PATCH] elx: efct: efct_libefc_templ can be static kbuild test robot
2019-10-26 14:13 ` kbuild test robot
2019-10-25 15:56 ` [PATCH 00/32] [NEW] efct: Broadcom (Emulex) FC Target driver Daniel Wagner
2019-10-25 22:31 ` James Smart
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191023215557.12581-4-jsmart2021@gmail.com \
--to=jsmart2021@gmail.com \
--cc=linux-scsi@vger.kernel.org \
--cc=ram.vegesna@broadcom.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.