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>
*** 17,31 ****
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
! /* Copyright 2009 QLogic Corporation */
/*
! * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
! * Use is subject to license terms.
*/
#ifndef _QL_INIT_H
#define _QL_INIT_H
--- 17,30 ----
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
! /* Copyright 2015 QLogic Corporation */
/*
! * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
*/
#ifndef _QL_INIT_H
#define _QL_INIT_H
*** 33,43 ****
* ISP2xxx Solaris Fibre Channel Adapter (FCA) driver header file.
*
* ***********************************************************************
* * **
* * NOTICE **
! * * COPYRIGHT (C) 1996-2009 QLOGIC CORPORATION **
* * ALL RIGHTS RESERVED **
* * **
* ***********************************************************************
*
*/
--- 32,42 ----
* ISP2xxx Solaris Fibre Channel Adapter (FCA) driver header file.
*
* ***********************************************************************
* * **
* * NOTICE **
! * * COPYRIGHT (C) 1996-2015 QLOGIC CORPORATION **
* * ALL RIGHTS RESERVED **
* * **
* ***********************************************************************
*
*/
*** 44,53 ****
--- 43,54 ----
#ifdef __cplusplus
extern "C" {
#endif
+ extern uint32_t ql_task_cb_dly;
+
/*
* ISP2200 NVRAM structure definition.
* Little endian except where noted.
*/
typedef struct nvram {
*** 515,526 ****
* BIT 3-7 = Reserved
*/
uint8_t oem_specific;
uint8_t reserved_4[15];
! /* Offset 112 (70h). */
! uint8_t reserved_5[16];
/*
* Offset 128 (80h).
* PCIe table entries.
* Firmware Extended Initialization Control Block.
--- 516,533 ----
* BIT 3-7 = Reserved
*/
uint8_t oem_specific;
uint8_t reserved_4[15];
! /*
! * Offset 112 (70h).
! * BIT 0 = additional receive credits
! * BIT 1 = additional receive credits
! * BIT 2-15 = Reserved
! */
! uint8_t execute_fw_options[2];
! uint8_t reserved_5[14];
/*
* Offset 128 (80h).
* PCIe table entries.
* Firmware Extended Initialization Control Block.
*** 707,721 ****
} nvram_24xx_t;
/*
* Firmware Dump structure definition
*/
! #define QL_2200_FW_DUMP_SIZE 0x68000 /* bytes */
! #define QL_2300_FW_DUMP_SIZE 0xE2000 /* bytes */
! #define QL_6322_FW_DUMP_SIZE 0xE2000 /* bytes */
! #define QL_24XX_FW_DUMP_SIZE 0x0330000 /* bytes */
! #define QL_25XX_FW_DUMP_SIZE 0x0330000 /* bytes */
#define QL_24XX_VPD_SIZE 0x200 /* bytes */
#define QL_24XX_SFP_SIZE 0x200 /* bytes */
/*
--- 714,731 ----
} nvram_24xx_t;
/*
* Firmware Dump structure definition
*/
! #define QL_2200_FW_DUMP_SIZE 0x100000 /* 86e15 bytes */
! #define QL_2300_FW_DUMP_SIZE 0x100000 /* fc6d3 bytes */
! #define QL_6322_FW_DUMP_SIZE 0x100000 /* fc6d8 bytes */
! #define QL_24XX_FW_DUMP_SIZE 0x300000 /* 2cef71 bytes */
! #define QL_25XX_FW_DUMP_SIZE 0x400000 /* 356c97 bytes */
! #define QL_81XX_FW_DUMP_SIZE 0x400000 /* 356c97 bytes */
! #define QL_27XX_FW_DUMP_SIZE 0x600000 /* 5c3e69 bytes */
! #define QL_83XX_FW_DUMP_SIZE 0x400000 /* 372792 bytes */
#define QL_24XX_VPD_SIZE 0x200 /* bytes */
#define QL_24XX_SFP_SIZE 0x200 /* bytes */
/*
*** 783,793 ****
--- 793,805 ----
uint32_t fce_trace_buf[FWFCESIZE / 4];
uint32_t ext_mem[1];
} ql_24xx_fw_dump_t;
typedef struct ql_25xx_fw_dump {
+ uint32_t hccr;
uint32_t r2h_status;
+ uint32_t aer_ues;
uint32_t hostrisc_reg[32];
uint32_t pcie_reg[4];
uint32_t host_reg[32];
uint16_t mailbox_reg[32];
uint32_t xseq_gp_reg[128];
*** 818,836 ****
uint32_t risc_io;
uint32_t lmc_reg[128];
uint32_t fpm_hdw_reg[192];
uint32_t fb_hdw_reg[192];
uint32_t code_ram[0x2000];
- uint32_t req_q[REQUEST_QUEUE_SIZE / 4];
- uint32_t rsp_q[RESPONSE_QUEUE_SIZE / 4];
uint32_t ext_trace_buf[FWEXTSIZE / 4];
uint32_t fce_trace_buf[FWFCESIZE / 4];
! uint32_t ext_mem[1];
} ql_25xx_fw_dump_t;
typedef struct ql_81xx_fw_dump {
uint32_t r2h_status;
uint32_t hostrisc_reg[32];
uint32_t pcie_reg[4];
uint32_t host_reg[32];
uint16_t mailbox_reg[32];
uint32_t xseq_gp_reg[128];
--- 830,850 ----
uint32_t risc_io;
uint32_t lmc_reg[128];
uint32_t fpm_hdw_reg[192];
uint32_t fb_hdw_reg[192];
uint32_t code_ram[0x2000];
uint32_t ext_trace_buf[FWEXTSIZE / 4];
uint32_t fce_trace_buf[FWFCESIZE / 4];
! uint32_t req_q_size[2];
! uint32_t rsp_q_size;
! uint32_t req_rsp_ext_mem[1];
} ql_25xx_fw_dump_t;
typedef struct ql_81xx_fw_dump {
+ uint32_t hccr;
uint32_t r2h_status;
+ uint32_t aer_ues;
uint32_t hostrisc_reg[32];
uint32_t pcie_reg[4];
uint32_t host_reg[32];
uint16_t mailbox_reg[32];
uint32_t xseq_gp_reg[128];
*** 861,880 ****
uint32_t risc_io;
uint32_t lmc_reg[128];
uint32_t fpm_hdw_reg[224];
uint32_t fb_hdw_reg[208];
uint32_t code_ram[0x2000];
- uint32_t req_q[REQUEST_QUEUE_SIZE / 4];
- uint32_t rsp_q[RESPONSE_QUEUE_SIZE / 4];
uint32_t ext_trace_buf[FWEXTSIZE / 4];
uint32_t fce_trace_buf[FWFCESIZE / 4];
! uint32_t ext_mem[1];
} ql_81xx_fw_dump_t;
#ifdef _KERNEL
/*
* ql_lock_nvram() flags
*/
#define LNF_NVRAM_DATA BIT_0 /* get nvram */
#define LNF_VPD_DATA BIT_1 /* get vpd data (24xx only) */
--- 875,1213 ----
uint32_t risc_io;
uint32_t lmc_reg[128];
uint32_t fpm_hdw_reg[224];
uint32_t fb_hdw_reg[208];
uint32_t code_ram[0x2000];
uint32_t ext_trace_buf[FWEXTSIZE / 4];
uint32_t fce_trace_buf[FWFCESIZE / 4];
! uint32_t req_q_size[2];
! uint32_t rsp_q_size;
! uint32_t req_rsp_ext_mem[1];
} ql_81xx_fw_dump_t;
+ typedef struct ql_83xx_fw_dump {
+ uint32_t hccr;
+ uint32_t r2h_status;
+ uint32_t aer_ues;
+ uint32_t hostrisc_reg[48];
+ uint32_t pcie_reg[4];
+ uint32_t host_reg[32];
+ uint16_t mailbox_reg[32];
+ uint32_t xseq_gp_reg[256];
+ uint32_t xseq_0_reg[48];
+ uint32_t xseq_1_reg[16];
+ uint32_t xseq_2_reg[16];
+ uint32_t rseq_gp_reg[256];
+ uint32_t rseq_0_reg[32];
+ uint32_t rseq_1_reg[16];
+ uint32_t rseq_2_reg[16];
+ uint32_t rseq_3_reg[16];
+ uint32_t aseq_gp_reg[256];
+ uint32_t aseq_0_reg[32];
+ uint32_t aseq_1_reg[16];
+ uint32_t aseq_2_reg[16];
+ uint32_t aseq_3_reg[16];
+ uint32_t cmd_dma_reg[64];
+ uint32_t req0_dma_reg[15];
+ uint32_t resp0_dma_reg[15];
+ uint32_t req1_dma_reg[15];
+ uint32_t xmt0_dma_reg[32];
+ uint32_t xmt1_dma_reg[32];
+ uint32_t xmt2_dma_reg[32];
+ uint32_t xmt3_dma_reg[32];
+ uint32_t xmt4_dma_reg[32];
+ uint32_t xmt_data_dma_reg[16];
+ uint32_t rcvt0_data_dma_reg[32];
+ uint32_t rcvt1_data_dma_reg[32];
+ uint32_t risc_gp_reg[128];
+ uint32_t shadow_reg[11];
+ uint32_t risc_io;
+ uint32_t lmc_reg[128];
+ uint32_t fpm_hdw_reg[256];
+ uint32_t rq0_array_reg[256];
+ uint32_t rq1_array_reg[256];
+ uint32_t rp0_array_reg[256];
+ uint32_t rp1_array_reg[256];
+ uint32_t ato_array_reg[128];
+ uint32_t queue_control_reg[16];
+ uint32_t fb_hdw_reg[432];
+ uint32_t code_ram[0x2400];
+ uint32_t ext_trace_buf[FWEXTSIZE / 4];
+ uint32_t fce_trace_buf[FWFCESIZE / 4];
+ uint32_t req_q_size[2];
+ uint32_t rsp_q_size;
+ uint32_t req_rsp_ext_mem[1];
+ } ql_83xx_fw_dump_t;
+
#ifdef _KERNEL
/*
+ * firmware dump Entry Types
+ */
+ #define DT_NOP 0
+ #define DT_THDR 99
+ #define DT_TEND 255
+ #define DT_RIOB1 256
+ #define DT_WIOB1 257
+ #define DT_RIOB2 258
+ #define DT_WIOB2 259
+ #define DT_RPCI 260
+ #define DT_WPCI 261
+ #define DT_RRAM 262
+ #define DT_GQUE 263
+ #define DT_GFCE 264
+ #define DT_PRISC 265
+ #define DT_RRISC 266
+ #define DT_DINT 267
+ #define DT_GHBD 268
+ #define DT_SCRA 269
+ #define DT_RRREG 270
+ #define DT_WRREG 271
+ #define DT_RRRAM 272
+ #define DT_RPCIC 273
+ #define DT_GQUES 274
+ #define DT_WDMP 275
+
+ /*
+ * firmware dump Template Header (Entry Type 99)
+ */
+ typedef struct ql_dt_hdr {
+ uint32_t type;
+ uint32_t first_entry_offset;
+ uint32_t size_of_template;
+ uint32_t rsv;
+ uint32_t num_of_entries;
+ uint32_t version;
+ uint32_t driver_timestamp;
+ uint32_t checksum;
+ uint32_t rsv_1;
+ uint32_t driver_info[3];
+ uint32_t saved_state_area[16];
+ uint32_t rsv_2[8];
+ uint32_t ver_attr[5];
+ } ql_dt_hdr_t;
+
+ /*
+ * firmware dump Common Entry Header
+ */
+ typedef struct ql_dt_entry_hdr {
+ uint32_t type;
+ uint32_t size;
+ uint32_t rsv;
+ #ifdef _BIG_ENDIAN
+ uint8_t driver_flags;
+ uint8_t rsv_2;
+ uint8_t rsv_1;
+ uint8_t capture_flags;
+ #else
+ uint8_t capture_flags;
+ uint8_t rsv_1;
+ uint8_t rsv_2;
+ uint8_t driver_flags;
+ #endif
+ } ql_dt_entry_hdr_t;
+
+ /*
+ * Capture Flags
+ */
+ #define PF_ONLY_FLAG BIT_0 /* Physical Function Only */
+ #define PF_VF_FLAG BIT_1 /* Physical and Virtual Functions */
+
+ /*
+ * Driver Flags
+ */
+ #define SKIPPED_FLAG BIT_7 /* driver skipped this entry */
+
+ /*
+ * firmware dump Entry Including Header
+ */
+ typedef struct ql_dt_entry {
+ ql_dt_entry_hdr_t h;
+ uint32_t data[1];
+ } ql_dt_entry_t;
+
+ /*
+ * firmware dump Template image
+ */
+ typedef struct ql_dmp_template {
+ uint32_t rsv[2];
+ uint32_t len;
+ uint32_t major_ver;
+ uint32_t minor_ver;
+ uint32_t subminor_ver;
+ uint32_t attribute;
+ ql_dt_hdr_t hdr;
+ ql_dt_entry_t entries[1];
+ } ql_dmp_template_t;
+
+ typedef struct ql_dt_riob1 {
+ ql_dt_entry_hdr_t h;
+ uint32_t addr;
+ #ifdef _BIG_ENDIAN
+ uint8_t pci_offset;
+ uint8_t reg_count_h;
+ uint8_t reg_count_l;
+ uint8_t reg_size;
+ #else
+ uint8_t reg_size;
+ uint8_t reg_count_l;
+ uint8_t reg_count_h;
+ uint8_t pci_offset;
+ #endif
+ } ql_dt_riob1_t;
+
+ typedef struct ql_dt_wiob1 {
+ ql_dt_entry_hdr_t h;
+ uint32_t addr;
+ uint32_t data;
+ #ifdef _BIG_ENDIAN
+ uint8_t rsv[3];
+ uint8_t pci_offset;
+ #else
+ uint8_t pci_offset;
+ uint8_t rsv[3];
+ #endif
+ } ql_dt_wiob1_t;
+
+ typedef struct ql_dt_riob2 {
+ ql_dt_entry_hdr_t h;
+ uint32_t addr;
+ #ifdef _BIG_ENDIAN
+ uint8_t pci_offset;
+ uint8_t reg_count_h;
+ uint8_t reg_count_l;
+ uint8_t reg_size;
+ uint8_t rsv[3];
+ uint8_t bank_sel_offset;
+ #else
+ uint8_t reg_size;
+ uint8_t reg_count_l;
+ uint8_t reg_count_h;
+ uint8_t pci_offset;
+ uint8_t bank_sel_offset;
+ uint8_t rsv[3];
+ #endif
+ uint32_t reg_bank;
+ } ql_dt_riob2_t;
+
+ typedef struct ql_dt_wiob2 {
+ ql_dt_entry_hdr_t h;
+ uint32_t addr;
+ #ifdef _BIG_ENDIAN
+ uint8_t rsv[2];
+ uint8_t data_h;
+ uint8_t data_l;
+ uint8_t bank_sel_offset;
+ uint8_t pci_offset;
+ uint8_t rsv1[2];
+ #else
+ uint8_t data_l;
+ uint8_t data_h;
+ uint8_t rsv[2];
+ uint8_t rsv1[2];
+ uint8_t pci_offset;
+ uint8_t bank_sel_offset;
+ #endif
+ uint32_t reg_bank;
+ } ql_dt_wiob2_t;
+
+ typedef struct ql_dt_rpci {
+ ql_dt_entry_hdr_t h;
+ uint32_t addr;
+ } ql_dt_rpci_t;
+
+ typedef struct ql_dt_wpci {
+ ql_dt_entry_hdr_t h;
+ uint32_t addr;
+ uint32_t data;
+ } ql_dt_wpci_t, ql_dt_wrreg_t;
+
+ typedef struct ql_dt_rram {
+ ql_dt_entry_hdr_t h;
+ #ifdef _BIG_ENDIAN
+ uint8_t rsv[3];
+ uint8_t ram_area;
+ #else
+ uint8_t ram_area;
+ uint8_t rsv[3];
+ #endif
+ uint32_t start_addr;
+ uint32_t end_addr;
+ } ql_dt_rram_t;
+
+ typedef struct ql_dt_gque {
+ ql_dt_entry_hdr_t h;
+ uint32_t num_queues;
+ #ifdef _BIG_ENDIAN
+ uint8_t rsv[3];
+ uint8_t queue_type;
+ #else
+ uint8_t queue_type;
+ uint8_t rsv[3];
+ #endif
+ } ql_dt_gque_t, ql_dt_gques_t;
+
+ typedef struct ql_dt_gfce {
+ ql_dt_entry_hdr_t h;
+ uint32_t fce_trace_size;
+ uint32_t write_pointer[2];
+ uint32_t base_pointer[2];
+ uint32_t fce_enable_mb0;
+ uint32_t fce_enable_mb2;
+ uint32_t fce_enable_mb3;
+ uint32_t fce_enable_mb4;
+ uint32_t fce_enable_mb5;
+ uint32_t fce_enable_mb6;
+ } ql_dt_gfce_t;
+
+ typedef struct ql_dt_prisc {
+ ql_dt_entry_hdr_t h;
+ } ql_dt_prisc_t, ql_dt_rrisc_t;
+
+ typedef struct ql_dt_dint {
+ ql_dt_entry_hdr_t h;
+ #ifdef _BIG_ENDIAN
+ uint8_t rsv[3];
+ uint8_t pci_offset;
+ #else
+ uint8_t pci_offset;
+ uint8_t rsv[3];
+ #endif
+ uint32_t data;
+ } ql_dt_dint_t;
+
+ typedef struct ql_dt_ghbd {
+ ql_dt_entry_hdr_t h;
+ #ifdef _BIG_ENDIAN
+ uint8_t rsv[3];
+ uint8_t host_buf_type;
+ #else
+ uint8_t host_buf_type;
+ uint8_t rsv[3];
+ #endif
+ uint32_t buf_size;
+ uint32_t start_addr;
+ } ql_dt_ghbd_t;
+
+ typedef struct ql_dt_scra {
+ ql_dt_entry_hdr_t h;
+ uint32_t scratch_size;
+ } ql_dt_scra_t;
+
+ typedef struct ql_dt_rrreg {
+ ql_dt_entry_hdr_t h;
+ uint32_t addr;
+ uint32_t count;
+ } ql_dt_rrreg_t, ql_dt_rrram_t, ql_dt_rpcic_t;
+
+ typedef struct ql_dt_wdmp {
+ ql_dt_entry_hdr_t h;
+ uint32_t length;
+ uint32_t data[1];
+ } ql_dt_wdmp_t;
+
+ /*
* ql_lock_nvram() flags
*/
#define LNF_NVRAM_DATA BIT_0 /* get nvram */
#define LNF_VPD_DATA BIT_1 /* get vpd data (24xx only) */
*** 888,901 ****
/*
* NVRAM Command values.
*/
#define NV_START_BIT BIT_2
! #define NV_WRITE_OP (BIT_26+BIT_24)
! #define NV_READ_OP (BIT_26+BIT_25)
! #define NV_ERASE_OP (BIT_26+BIT_25+BIT_24)
! #define NV_MASK_OP (BIT_26+BIT_25+BIT_24)
#define NV_DELAY_COUNT 10
/*
* Deivce ID list definitions.
*/
--- 1221,1234 ----
/*
* NVRAM Command values.
*/
#define NV_START_BIT BIT_2
! #define NV_WRITE_OP (BIT_26 + BIT_24)
! #define NV_READ_OP (BIT_26 + BIT_25)
! #define NV_ERASE_OP (BIT_26 + BIT_25 + BIT_24)
! #define NV_MASK_OP (BIT_26 + BIT_25 + BIT_24)
#define NV_DELAY_COUNT 10
/*
* Deivce ID list definitions.
*/
*** 957,968 ****
int ql_init_rings(ql_adapter_state_t *);
int ql_fw_ready(ql_adapter_state_t *, uint8_t);
void ql_dev_list(ql_adapter_state_t *, ql_dev_id_list_t *, uint32_t,
port_id_t *, uint16_t *);
void ql_reset_chip(ql_adapter_state_t *);
- void ql_reset_24xx_chip(ql_adapter_state_t *);
int ql_abort_isp(ql_adapter_state_t *);
int ql_vport_control(ql_adapter_state_t *, uint8_t);
int ql_vport_modify(ql_adapter_state_t *, uint8_t, uint8_t);
int ql_vport_enable(ql_adapter_state_t *);
ql_adapter_state_t *ql_vport_create(ql_adapter_state_t *, uint8_t);
void ql_vport_destroy(ql_adapter_state_t *);
--- 1290,1301 ----
int ql_init_rings(ql_adapter_state_t *);
int ql_fw_ready(ql_adapter_state_t *, uint8_t);
void ql_dev_list(ql_adapter_state_t *, ql_dev_id_list_t *, uint32_t,
port_id_t *, uint16_t *);
void ql_reset_chip(ql_adapter_state_t *);
int ql_abort_isp(ql_adapter_state_t *);
+ void ql_requeue_all_cmds(ql_adapter_state_t *);
int ql_vport_control(ql_adapter_state_t *, uint8_t);
int ql_vport_modify(ql_adapter_state_t *, uint8_t, uint8_t);
int ql_vport_enable(ql_adapter_state_t *);
ql_adapter_state_t *ql_vport_create(ql_adapter_state_t *, uint8_t);
void ql_vport_destroy(ql_adapter_state_t *);