Print this page
NEX-5717 import QLogic 16G FC drivers
Reviewed by: Steve Peng <steve.peng@nexenta.com>
Reviewed by: Josef 'Jeff' Sipek <josef.sipek@nexenta.com>
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>

*** 18,29 **** * * CDDL HEADER END */ /* ! * Copyright 2010 QLogic Corporation. All rights reserved. ! * Use is subject to license terms. */ #ifndef _QL_NX_H #define _QL_NX_H --- 18,28 ---- * * CDDL HEADER END */ /* ! * Copyright (c) 2015 QLogic Corporation. All rights reserved. */ #ifndef _QL_NX_H #define _QL_NX_H
*** 31,41 **** * ISP2xxx Solaris Fibre Channel Adapter (FCA) driver header file. * * *********************************************************************** * * ** * * NOTICE ** ! * * COPYRIGHT (C) 1996-2010 QLOGIC CORPORATION ** * * ALL RIGHTS RESERVED ** * * ** * *********************************************************************** * */ --- 30,40 ---- * ISP2xxx Solaris Fibre Channel Adapter (FCA) driver header file. * * *********************************************************************** * * ** * * NOTICE ** ! * * COPYRIGHT (C) 1996-2015 QLOGIC CORPORATION ** * * ALL RIGHTS RESERVED ** * * ** * *********************************************************************** * */
*** 52,61 **** --- 51,61 ---- #define NX_P3P_A0 0x50 #define NX_P3P_B0 0x54 #define NX_IS_REVISION_P3(REVISION) (REVISION >= NX_P3_A0) #define NX_IS_REVISION_P3PLUS(REVISION) (REVISION >= NX_P3P_A0) + #define NX_IS_REVISION_P3PLUS_B0(REVISION) (REVISION >= NX_P3P_B0) /* * Following are the states of the Phantom. Phantom will set them and * Host will read to check if the fields are correct. */
*** 80,100 **** #define CRB_DEV_STATE (UNM_CAM_RAM(0x140)) #define CRB_DRV_IDC_VERSION (UNM_CAM_RAM(0x174)) #define CRB_DRV_ACTIVE (UNM_CAM_RAM(0x138)) #define CRB_DRV_STATE (UNM_CAM_RAM(0x144)) #define CRB_DRV_SCRATCH (UNM_CAM_RAM(0x148)) ! #define CRB_FCOE_PORT_0_REQIN (UNM_CAM_RAM(0x1b8)) ! #define CRB_FCOE_PORT_1_REQIN (UNM_CAM_RAM(0x1bc)) /* Every driver should use these Device State */ #define NX_DEV_COLD 1 #define NX_DEV_INITIALIZING 2 #define NX_DEV_READY 3 #define NX_DEV_NEED_RESET 4 #define NX_DEV_NEED_QUIESCENT 5 #define NX_DEV_FAILED 6 #define NX_DEV_QUIESCENT 7 #define NX_IDC_VERSION 0x1 #define CRB_CMD_PRODUCER_OFFSET (UNM_NIC_REG(0x08)) #define CRB_CMD_CONSUMER_OFFSET (UNM_NIC_REG(0x0c)) --- 80,102 ---- #define CRB_DEV_STATE (UNM_CAM_RAM(0x140)) #define CRB_DRV_IDC_VERSION (UNM_CAM_RAM(0x174)) #define CRB_DRV_ACTIVE (UNM_CAM_RAM(0x138)) #define CRB_DRV_STATE (UNM_CAM_RAM(0x144)) #define CRB_DRV_SCRATCH (UNM_CAM_RAM(0x148)) ! #define CRB_PORT_0_REQIN (UNM_CAM_RAM(0x1b8)) ! #define CRB_PORT_1_REQIN (UNM_CAM_RAM(0x1bc)) /* Every driver should use these Device State */ + #define NX_DEV_POLL 0 #define NX_DEV_COLD 1 #define NX_DEV_INITIALIZING 2 #define NX_DEV_READY 3 #define NX_DEV_NEED_RESET 4 #define NX_DEV_NEED_QUIESCENT 5 #define NX_DEV_FAILED 6 #define NX_DEV_QUIESCENT 7 + #define NX_DEV_BADOBADO 0xbad0bad0 #define NX_IDC_VERSION 0x1 #define CRB_CMD_PRODUCER_OFFSET (UNM_NIC_REG(0x08)) #define CRB_CMD_CONSUMER_OFFSET (UNM_NIC_REG(0x0c))
*** 1168,1199 **** #define CRB_INDIRECT_2M (0x1e0000UL) /* #define ADDR_ERROR ((unsigned long ) 0xffffffff) */ /* PCI Windowing for DDR regions. */ #define QL_8021_ADDR_IN_RANGE(addr, low, high) \ ! (((addr) <= (high)) && ((addr) >= (low))) #define CRB_WIN_LOCK_TIMEOUT 100000000 #define ROM_LOCK_TIMEOUT 100 #define ROM_MAX_TIMEOUT 100 #define IDC_LOCK_TIMEOUT 100000000 /* ! * IDC parameters are defined in “user area” in the flash */ #define ROM_DEV_INIT_TIMEOUT 0x3e885c #define ROM_DRV_RESET_ACK_TIMEOUT 0x3e8860 /* * Global Data in ql_nx.c source file. */ /* * Global Function Prototypes in ql_nx.c source file. */ void ql_8021_reset_chip(ql_adapter_state_t *); ! int ql_8021_load_risc(ql_adapter_state_t *); void ql_8021_clr_hw_intr(ql_adapter_state_t *); void ql_8021_clr_fw_intr(ql_adapter_state_t *); void ql_8021_enable_intrs(ql_adapter_state_t *); void ql_8021_disable_intrs(ql_adapter_state_t *); void ql_8021_update_crb_int_ptr(ql_adapter_state_t *); --- 1170,1584 ---- #define CRB_INDIRECT_2M (0x1e0000UL) /* #define ADDR_ERROR ((unsigned long ) 0xffffffff) */ /* PCI Windowing for DDR regions. */ #define QL_8021_ADDR_IN_RANGE(addr, low, high) \ ! (((addr) <= (high)) && ((int64_t)(addr) >= (low))) #define CRB_WIN_LOCK_TIMEOUT 100000000 #define ROM_LOCK_TIMEOUT 100 #define ROM_MAX_TIMEOUT 100 #define IDC_LOCK_TIMEOUT 100000000 /* ! * IDC parameters are defined in "user area" in the flash */ #define ROM_DEV_INIT_TIMEOUT 0x3e885c #define ROM_DRV_RESET_ACK_TIMEOUT 0x3e8860 + /* ****************************************************************** */ + /* ******************* NetXen MiniDump Defines ********************** */ + /* ****************************************************************** */ + /* + * Get MBC_GET_DUMP_TEMPLATE Command Options + */ + #define GTO_TEMPLATE_SIZE 0 + #define GTO_TEMPLATE 1 + + /* + * Entry Type Defines + */ + #define RDNOP 0 + #define RDCRB 1 + #define RDMUX 2 + #define QUEUE 3 + #define BOARD 4 + #define RDSRE 5 + #define RDOCM 6 + #define PREGS 7 + #define L1DTG 8 + #define L1ITG 9 + #define CACHE 10 + #define L1DAT 11 + #define L1INS 12 + #define RDSTK 13 + #define RDCON 14 + #define L2DTG 21 + #define L2ITG 22 + #define L2DAT 23 + #define L2INS 24 + #define RDOC3 25 + #define MEMBK 32 + #define RDROM 71 + #define RDMEM 72 + #define INFOR 81 + #define CNTRL 98 + #define TLHDR 99 + #define RDEND 255 + #define PRIMQ 103 + #define SQG2Q 104 + #define SQG3Q 105 + #define ISCSI_EVENT_LOG 201 + + /* + * Minidump Template Header + * Parts of the template header can be modified by the driver. + * These include the saved_state_array, capture_debug_level, driver_timestamp + * The driver_info_wordX is used to add info about the drivers environment. + * It is important that drivers add identication and system info in these + * fields. + */ + + #define QL_DBG_STATE_ARRAY_LEN 16 + #define QL_DBG_CAP_SIZE_ARRAY_LEN 8 + #define QL_DBG_RSVD_ARRAY_LEN 8 + + typedef struct md_template_hdr { + uint32_t entry_type; + uint32_t first_entry_offset; + uint32_t size_of_template; + uint32_t capture_debug_level; + uint32_t num_of_entries; + uint32_t version; + uint32_t driver_timestamp; + uint32_t checksum; + uint32_t driver_capture_mask; + uint32_t driver_info_word1; + uint32_t driver_info_word2; + uint32_t driver_info_word3; + uint32_t saved_state_array[QL_DBG_STATE_ARRAY_LEN]; + uint32_t capture_size_array[QL_DBG_CAP_SIZE_ARRAY_LEN]; + + /* markers_array used to capture some special locations on board */ + uint32_t markers_array[QL_DBG_RSVD_ARRAY_LEN]; + uint32_t num_of_free_entries; /* For internal use */ + uint32_t free_entry_offset; /* For internal use */ + uint32_t total_table_size; /* For internal use */ + uint32_t bkup_table_offset; /* For internal use */ + } md_template_hdr_t; + + /* + * Driver Flags + */ + #define QL_DBG_SKIPPED_FLAG 0x80 /* driver skipped this entry */ + #define QL_DBG_SIZE_ERR_FLAG 0x40 /* entry siz vs capture siz mismatch */ + + /* + * Minidump Entry Header + */ + typedef struct md_entry_hdr { + uint32_t entry_type; + uint32_t entry_size; + uint32_t entry_capture_size; + union { + struct { + #ifdef _BIG_ENDIAN + uint8_t driver_flags; + uint8_t driver_code; + uint8_t entry_code; + uint8_t entry_capture_mask; + #else + uint8_t entry_capture_mask; + uint8_t entry_code; + uint8_t driver_code; + uint8_t driver_flags; + #endif + } ecw; + uint32_t entry_ctrl_word; + } a; + } md_entry_hdr_t; + + /* + * Minidump Entry Including Header + */ + typedef struct md_entry { + md_entry_hdr_t h; + uint32_t entry_data00; + uint32_t entry_data01; + uint32_t entry_data02; + uint32_t entry_data03; + uint32_t entry_data04; + uint32_t entry_data05; + uint32_t entry_data06; + uint32_t entry_data07; + } md_entry_t; + + /* + * Minidump Read CRB Entry Header + */ + typedef struct md_entry_rdcrb { + md_entry_hdr_t h; + uint32_t addr; + union { + struct { + #ifdef _BIG_ENDIAN + uint8_t rsvd_1[2]; + uint8_t rsvd_0; + uint8_t addr_stride; + #else + uint8_t addr_stride; + uint8_t rsvd_0; + uint8_t rsvd_1[2]; + #endif + } ac; + uint32_t addr_cntrl; + } a; + uint32_t data_size; + uint32_t op_count; + uint32_t rsvd_2; + uint32_t rsvd_3; + uint32_t rsvd_4; + uint32_t rsvd_5; + } md_entry_rdcrb_t; + + /* + * Minidump Cache Entry Header + */ + typedef struct ql_md_entry_cache { + md_entry_hdr_t h; + uint32_t tag_reg_addr; + union { + struct { + #ifdef _BIG_ENDIAN + uint8_t init_tag_value[2]; + uint8_t tag_value_stride[2]; + #else + uint8_t tag_value_stride[2]; + uint8_t init_tag_value[2]; + #endif + } sac; + uint32_t select_addr_cntrl; + } a; + uint32_t data_size; + uint32_t op_count; + uint32_t control_addr; + union { + struct { + #ifdef _BIG_ENDIAN + uint8_t poll_wait; + uint8_t poll_mask; + uint8_t write_value[2]; + #else + uint8_t write_value[2]; + uint8_t poll_mask; + uint8_t poll_wait; + #endif + } cv; + uint32_t control_value; + } b; + uint32_t read_addr; + union { + struct { + #ifdef _BIG_ENDIAN + uint8_t rsvd_1[2]; + uint8_t read_addr_cnt; + uint8_t read_addr_stride; + #else + uint8_t read_addr_stride; + uint8_t read_addr_cnt; + uint8_t rsvd_1[2]; + #endif + } rac; + uint32_t read_addr_cntrl; + } c; + } md_entry_cache_t; + + /* + * Minidump Read OCM Entry Header + */ + typedef struct md_entry_rdocm { + md_entry_hdr_t h; + uint32_t rsvd_0; + uint32_t rsvd_1; + uint32_t data_size; + uint32_t op_count; + uint32_t rsvd_2; + uint32_t rsvd_3; + uint32_t read_addr; + uint32_t read_addr_stride; + } md_entry_rdocm_t; + + /* + * Minidump Read MEM Entry Header + */ + typedef struct md_entry_rdmem { + md_entry_hdr_t h; + uint32_t rsvd_0[6]; + uint32_t read_addr; + uint32_t read_data_size; + } md_entry_rdmem_t; + /* + * Minidump MIU AGENT ADDRESSES. + */ + #define MD_TA_CTL_ENABLE 0x2 + #define MD_TA_CTL_START 0x1 + #define MD_TA_CTL_BUSY 0x8 + #define MD_TA_CTL_CHECK 1000 + #define MD_MIU_TEST_AGT_CTRL 0x41000090 + #define MD_MIU_TEST_AGT_ADDR_LO 0x41000094 + #define MD_MIU_TEST_AGT_ADDR_HI 0x41000098 + #define MD_MIU_TEST_AGT_RDDATA_0_31 0x410000A8 + #define MD_MIU_TEST_AGT_RDDATA_32_63 0x410000AC + #define MD_MIU_TEST_AGT_RDDATA_64_95 0x410000B8 + #define MD_MIU_TEST_AGT_RDDATA_96_127 0x410000BC + #define MD_MIU_TEST_AGT_WRDATA_0_31 0x410000A0 + #define MD_MIU_TEST_AGT_WRDATA_32_63 0x410000A4 + #define MD_MIU_TEST_AGT_WRDATA_64_95 0x410000B0 + #define MD_MIU_TEST_AGT_WRDATA_96_127 0x410000B4 + + /* + * Minidump Read ROM Entry Header + */ + typedef struct md_entry_rdrom { + md_entry_hdr_t h; + uint32_t rsvd_0[6]; + uint32_t read_addr; + uint32_t read_data_size; + } md_entry_rdrom_t; + /* + * Minidump ROM Read Address + */ + #define MD_DIRECT_ROM_WINDOW 0x42110030 + #define MD_DIRECT_ROM_READ_BASE 0x42150000 + + /* + * Minidump Read MUX Entry Header + */ + typedef struct md_entry_mux { + md_entry_hdr_t h; + uint32_t select_addr; + union { + struct { + uint32_t rsvd_0; + } sac; + uint32_t select_addr_cntrl; + } a; + uint32_t data_size; + uint32_t op_count; + uint32_t select_value; + uint32_t select_value_stride; + uint32_t read_addr; + uint32_t rsvd_1; + } md_entry_mux_t; + + /* + * Minidump Read QUEUE Entry Header + */ + typedef struct md_entry_queue { + md_entry_hdr_t h; + uint32_t select_addr; + union { + struct { + #ifdef _BIG_ENDIAN + uint8_t rsvd_0[2]; + uint8_t queue_id_stride[2]; + #else + uint8_t queue_id_stride[2]; + uint8_t rsvd_0[2]; + #endif + } sac; + uint32_t select_addr_cntrl; + } a; + uint32_t data_size; + uint32_t op_count; + uint32_t rsvd_1; + uint32_t rsvd_2; + uint32_t read_addr; + union { + struct { + #ifdef _BIG_ENDIAN + uint8_t rsvd_3[2]; + uint8_t read_addr_cnt; + uint8_t read_addr_stride; + #else + uint8_t read_addr_stride; + uint8_t read_addr_cnt; + uint8_t rsvd_3[2]; + #endif + } rac; + uint32_t read_addr_cntrl; + } b; + } md_entry_queue_t; + + /* + * Minidump Control Entry Header + */ + typedef struct md_entry_cntrl { + md_entry_hdr_t h; + uint32_t addr; + union { + struct { + #ifdef _BIG_ENDIAN + uint8_t poll_timeout[2]; + uint8_t state_index_a; + uint8_t addr_stride; + #else + uint8_t addr_stride; + uint8_t state_index_a; + uint8_t poll_timeout[2]; + #endif + } ac; + uint32_t addr_cntrl; + } a; + uint32_t data_size; + uint32_t op_count; + union { + struct { + #ifdef _BIG_ENDIAN + uint8_t shr; + uint8_t shl; + uint8_t state_index_v; + uint8_t opcode; + #else + uint8_t opcode; + uint8_t state_index_v; + uint8_t shl; + uint8_t shr; + #endif + } cv; + uint32_t control_value; + } b; + uint32_t value_1; + uint32_t value_2; + uint32_t value_3; + } md_entry_cntrl_t; + + /* + * Opcodes for Control Entries. + * These Flags are bit fields. + */ + #define QL_DBG_OPCODE_WR 0x01 + #define QL_DBG_OPCODE_RW 0x02 + #define QL_DBG_OPCODE_AND 0x04 + #define QL_DBG_OPCODE_OR 0x08 + #define QL_DBG_OPCODE_POLL 0x10 + #define QL_DBG_OPCODE_RDSTATE 0x20 + #define QL_DBG_OPCODE_WRSTATE 0x40 + #define QL_DBG_OPCODE_MDSTATE 0x80 + + /* * Global Data in ql_nx.c source file. */ /* * Global Function Prototypes in ql_nx.c source file. */ + void ql_8021_wr_32(ql_adapter_state_t *, uint64_t, uint32_t); + void ql_8021_rd_32(ql_adapter_state_t *, uint64_t, uint32_t *); void ql_8021_reset_chip(ql_adapter_state_t *); ! int ql_8021_fw_reload(ql_adapter_state_t *); void ql_8021_clr_hw_intr(ql_adapter_state_t *); void ql_8021_clr_fw_intr(ql_adapter_state_t *); void ql_8021_enable_intrs(ql_adapter_state_t *); void ql_8021_disable_intrs(ql_adapter_state_t *); void ql_8021_update_crb_int_ptr(ql_adapter_state_t *);
*** 1201,1211 **** int ql_8021_rom_write(ql_adapter_state_t *, uint32_t, uint32_t); int ql_8021_rom_erase(ql_adapter_state_t *, uint32_t); int ql_8021_rom_wrsr(ql_adapter_state_t *, uint32_t); void ql_8021_set_drv_active(ql_adapter_state_t *); void ql_8021_clr_drv_active(ql_adapter_state_t *); ! uint32_t ql_8021_idc_handler(ql_adapter_state_t *); #ifdef __cplusplus } #endif --- 1586,1601 ---- int ql_8021_rom_write(ql_adapter_state_t *, uint32_t, uint32_t); int ql_8021_rom_erase(ql_adapter_state_t *, uint32_t); int ql_8021_rom_wrsr(ql_adapter_state_t *, uint32_t); void ql_8021_set_drv_active(ql_adapter_state_t *); void ql_8021_clr_drv_active(ql_adapter_state_t *); ! int ql_8021_idc_handler(ql_adapter_state_t *, uint32_t); ! void ql_8021_wr_req_in(ql_adapter_state_t *, uint32_t); ! void ql_8021_idc_poll(ql_adapter_state_t *); ! int ql_8021_reset_fw(ql_adapter_state_t *); ! int ql_8021_fw_chk(ql_adapter_state_t *); ! int ql_8021_get_md_template(ql_adapter_state_t *); #ifdef __cplusplus } #endif