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>
NEX-4957 Panic in qlc with QLE2460 in PCI passthrough mode on ESXi
Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
Reviewed by: Gordon Ross <gordon.ross@nexenta.com>
@@ -17,14 +17,14 @@
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
-/* Copyright 2010 QLogic Corporation */
+/* Copyright 2015 QLogic Corporation */
/*
- * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
*/
#ifndef _QL_API_H
#define _QL_API_H
@@ -32,11 +32,11 @@
* ISP2xxx Solaris Fibre Channel Adapter (FCA) driver header file.
*
* ***********************************************************************
* * **
* * NOTICE **
- * * COPYRIGHT (C) 1996-2010 QLOGIC CORPORATION **
+ * * COPYRIGHT (C) 1996-2015 QLOGIC CORPORATION **
* * ALL RIGHTS RESERVED **
* * **
* ***********************************************************************
*
*/
@@ -50,12 +50,21 @@
#include <sys/byteorder.h>
#include <sys/pci.h>
#include <sys/utsname.h>
#include <sys/file.h>
#include <sys/param.h>
+#include <sys/time.h>
+#include <sys/ddifm.h>
+#include <sys/sunddi.h>
+#include <sys/fm/protocol.h>
+#include <sys/fm/io/ddi.h>
#include <ql_open.h>
+#ifdef __x86
+#include <sys/x86_archext.h>
+#endif
+
#include <sys/fibre-channel/fc.h>
#include <sys/fibre-channel/impl/fc_fcaif.h>
#ifndef DDI_INTR_TYPE_FIXED
#define DDI_INTR_TYPE_FIXED 0x1
@@ -74,10 +83,25 @@
#endif
#ifndef DDI_INTR_ALLOC_STRICT
#define DDI_INTR_ALLOC_STRICT 1
#endif
+#define PCI_PCIE_DEVICE_CONTROL 0x8 /* Device control reg offset */
+#define PCI_MSI_CONTROL 0x2 /* MSI Control reg offset */
+#define PCI_MSI_MSG_ADDR 0x4 /* MSI Msg Addr reg offset */
+#define PCI_MSI_MSG_UPPER_ADDR 0x8 /* MSI MSI Msg Upper Addr reg */
+/* offset */
+#define PCI_MSI_MSG_DATA 0xc /* MSI Msg Data reg offset */
+#define PCI_MSI_X_CONTROL 0x2 /* MSI-X Control reg offset */
+#define MSI_X_TABLE_SIZE_MASK 0x7ff /* MSI-X Table Size mask */
+
+#define PCIE_EXT_CAP_PTR 0x100
+#define PCIE_EXT_CAP_NEXT_SHIFT 20
+#define PCIE_EXT_CAP_ID_SRIOV 0x0010 /* SRIOV capabilities offset */
+#define PCIE_EXT_CAP_SRIOV_TOTAL_VFS 0xe
+#define PCIE_SRIOV_PAGE_SIZE_MULTIPLIER 4096
+
/*
* NPIV defines
*/
#ifndef FC_NPIV_FDISC_FAILED
#define FC_NPIV_FDISC_FAILED 0x45
@@ -92,10 +116,13 @@
#define FC_NPIV_WRONG_TOPOLOGY 0x48
#endif
#ifndef FC_NPIV_NPIV_BOUND
#define FC_NPIV_NPIV_BOUND 0x49
#endif
+#ifndef FC_HBA_PORTSPEED_32GBIT
+#define FC_HBA_PORTSPEED_32GBIT 64
+#endif
#pragma weak ddi_intr_get_supported_types
#pragma weak ddi_intr_get_nintrs
#pragma weak ddi_intr_alloc
#pragma weak ddi_intr_free
@@ -122,23 +149,13 @@
extern int ddi_intr_disable();
extern int ddi_intr_enable();
extern int ddi_intr_get_cap();
extern int ddi_intr_remove_handler();
-#ifndef QL_DRV_HARDENING
-#define ddi_devstate_t int
-#define DDI_DEVSTATE_UP 0
-#define ddi_get_devstate(a) DDI_DEVSTATE_UP
-#define ddi_dev_report_fault(a, b, c, d)
-#define ddi_check_dma_handle(a) DDI_SUCCESS
-#define ddi_check_acc_handle(a) DDI_SUCCESS
-#define QL_CLEAR_DMA_HANDLE(x)
-#else
#define QL_CLEAR_DMA_HANDLE(x) ((ddi_dma_impl_t *)x)->dmai_fault_notify = 0; \
((ddi_dma_impl_t *)x)->dmai_fault_check = 0; \
((ddi_dma_impl_t *)x)->dmai_fault = 0
-#endif
#ifndef FC_STATE_1GBIT_SPEED
#define FC_STATE_1GBIT_SPEED 0x0100 /* 1 Gbit/sec */
#endif
#ifndef FC_STATE_2GBIT_SPEED
@@ -151,10 +168,16 @@
#define FC_STATE_8GBIT_SPEED 0x0700 /* 8 Gbit/sec */
#endif
#ifndef FC_STATE_10GBIT_SPEED
#define FC_STATE_10GBIT_SPEED 0x0600 /* 10 Gbit/sec */
#endif
+#ifndef FC_STATE_16GBIT_SPEED
+#define FC_STATE_16GBIT_SPEED 0x0800 /* 16 Gbit/sec */
+#endif
+#ifndef FC_STATE_32GBIT_SPEED
+#define FC_STATE_32GBIT_SPEED 0x1000 /* 32 Gbit/sec */
+#endif
/*
* Data bit definitions.
*/
#define BIT_0 0x1
@@ -187,10 +210,42 @@
#define BIT_27 0x8000000
#define BIT_28 0x10000000
#define BIT_29 0x20000000
#define BIT_30 0x40000000
#define BIT_31 0x80000000
+#define BIT_32 0x100000000
+#define BIT_33 0x200000000
+#define BIT_34 0x400000000
+#define BIT_35 0x800000000
+#define BIT_36 0x1000000000
+#define BIT_37 0x2000000000
+#define BIT_38 0x4000000000
+#define BIT_39 0x8000000000
+#define BIT_40 0x10000000000
+#define BIT_41 0x20000000000
+#define BIT_42 0x40000000000
+#define BIT_43 0x80000000000
+#define BIT_44 0x100000000000
+#define BIT_45 0x200000000000
+#define BIT_46 0x400000000000
+#define BIT_47 0x800000000000
+#define BIT_48 0x1000000000000
+#define BIT_49 0x2000000000000
+#define BIT_50 0x4000000000000
+#define BIT_51 0x8000000000000
+#define BIT_52 0x10000000000000
+#define BIT_53 0x20000000000000
+#define BIT_54 0x40000000000000
+#define BIT_55 0x80000000000000
+#define BIT_56 0x100000000000000
+#define BIT_57 0x200000000000000
+#define BIT_58 0x400000000000000
+#define BIT_59 0x800000000000000
+#define BIT_60 0x1000000000000000
+#define BIT_61 0x2000000000000000
+#define BIT_62 0x4000000000000000
+#define BIT_63 0x8000000000000000
/*
* Local Macro Definitions.
*/
#ifndef TRUE
@@ -262,10 +317,40 @@
#define WRT16_IOMAP_REG(ha, regname, data) \
WRT_IOREG_WORD(ha, (ha->iomap_iobase + ha->reg_off->regname), (data))
#define WRT32_IOMAP_REG(ha, regname, data) \
WRT_IOREG_DWORD(ha, (ha->iomap_iobase + ha->reg_off->regname), (data))
+#define RD8_MBAR_REG(ha, ofst) \
+ (uint8_t)ddi_get8(ha->mbar_dev_handle, \
+ (uint8_t *)(ha->mbar + (ofst)))
+#define RD16_MBAR_REG(ha, ofst) \
+ (uint16_t)ddi_get16(ha->mbar_dev_handle, \
+ (uint16_t *)(ha->mbar + (ofst)))
+#define RD32_MBAR_REG(ha, ofst) \
+ (uint32_t)ddi_get32(ha->mbar_dev_handle, \
+ (uint32_t *)(ha->mbar + (ofst)))
+#define RD64_MBAR_REG(ha, ofst) \
+ (uint64_t)ddi_get64(ha->mbar_dev_handle, \
+ (uint64_t *)(ha->mbar + (ofst)))
+
+#define WR8_MBAR_REG(ha, ofst, data) \
+ ddi_put8(ha->mbar_dev_handle, \
+ (uint8_t *)(ha->mbar + (ofst)), \
+ (uint8_t)(data))
+#define WR16_MBAR_REG(ha, ofst, data) \
+ ddi_put16(ha->mbar_dev_handle, \
+ (uint16_t *)(ha->mbar + (ofst)), \
+ (uint16_t)(data))
+#define WR32_MBAR_REG(ha, ofst, data) \
+ ddi_put32(ha->mbar_dev_handle, \
+ (uint32_t *)(ha->mbar + (ofst)), \
+ (uint32_t)(data))
+#define WR64_MBAR_REG(ha, ofst, data) \
+ ddi_put64(ha->mbar_dev_handle, \
+ (uint64_t *)(ha->mbar + (ofst)), \
+ (uint64_t)(data))
+
/*
* FCA definitions
*/
#define MAX_LUNS 16384
#define QL_FCA_BRAND 0x0fca2200
@@ -318,10 +403,14 @@
*/
#define MAX_22_FIBRE_DEVICES 256
#define MAX_24_FIBRE_DEVICES 2048
#define MAX_24_VIRTUAL_PORTS 127
#define MAX_25_VIRTUAL_PORTS 254
+#define MAX_27_VIRTUAL_PORTS 252
+#define MAX_8021_VIRTUAL_PORTS 63
+#define MAX_81XX_VIRTUAL_PORTS 254
+#define MAX_83_VIRTUAL_PORTS 254
#define LAST_LOCAL_LOOP_ID 0x7d
#define FL_PORT_LOOP_ID 0x7e /* FFFFFE Fabric F_Port */
#define SWITCH_FABRIC_CONTROLLER_LOOP_ID 0x7f /* FFFFFD Fabric Controller */
#define SIMPLE_NAME_SERVER_LOOP_ID 0x80 /* FFFFFC Directory Server */
@@ -346,13 +435,13 @@
/* Fibre Channel Topoploy. */
#define QL_N_PORT BIT_0
#define QL_NL_PORT BIT_1
#define QL_F_PORT BIT_2
#define QL_FL_PORT BIT_3
-#define QL_SNS_CONNECTION BIT_4
#define QL_LOOP_CONNECTION (QL_NL_PORT | QL_FL_PORT)
#define QL_P2P_CONNECTION (QL_F_PORT | QL_N_PORT)
+#define QL_FABRIC_CONNECTION (QL_F_PORT | QL_FL_PORT)
/* Timeout timer counts in seconds (must greater than 1 second). */
#define WATCHDOG_TIME 5 /* 0 - 255 */
#define PORT_RETRY_TIME 2 /* 0 - 255 */
#define LOOP_DOWN_TIMER_OFF 0
@@ -363,11 +452,10 @@
#define IDLE_CHECK_TIMER 300 /* 0 - 65535 */
#define MAX_DEVICE_LOST_RETRY 16 /* 0 - 255 */
#define TIMEOUT_THRESHOLD 16 /* 0 - 255 */
/* Maximum outstanding commands in ISP queues (1-4095) */
-#define MAX_OUTSTANDING_COMMANDS 0x400
#define OSC_INDEX_MASK 0xfff
#define OSC_INDEX_SHIFT 12
/* Maximum unsolicited buffers (1-65535) */
#define QL_UB_LIMIT 256
@@ -378,29 +466,21 @@
#define RCVBUF_CONTAINER_CNT 64 /* Rcv buffer containers (8-1024) */
/*
* ISP request, response, mailbox and receive buffer queue sizes
*/
+#define SHADOW_ENTRY_SIZE 4
#define REQUEST_ENTRY_SIZE 64
#define REQUEST_QUEUE_SIZE (REQUEST_ENTRY_SIZE * REQUEST_ENTRY_CNT)
#define RESPONSE_ENTRY_SIZE 64
#define RESPONSE_QUEUE_SIZE (RESPONSE_ENTRY_SIZE * RESPONSE_ENTRY_CNT)
-#define MAILBOX_BUFFER_SIZE 0x4000
-
#define RCVBUF_CONTAINER_SIZE 12
#define RCVBUF_QUEUE_SIZE (RCVBUF_CONTAINER_SIZE * RCVBUF_CONTAINER_CNT)
/*
- * ISP DMA buffer definitions
- */
-#define REQUEST_Q_BUFFER_OFFSET 0
-#define RESPONSE_Q_BUFFER_OFFSET (REQUEST_Q_BUFFER_OFFSET + REQUEST_QUEUE_SIZE)
-#define RCVBUF_Q_BUFFER_OFFSET (RESPONSE_Q_BUFFER_OFFSET + RESPONSE_QUEUE_SIZE)
-
-/*
* DMA attributes definitions.
*/
#define QL_DMA_LOW_ADDRESS (uint64_t)0
#define QL_DMA_HIGH_64BIT_ADDRESS (uint64_t)0xffffffffffffffff
#define QL_DMA_HIGH_32BIT_ADDRESS (uint64_t)0xffffffff
@@ -489,10 +569,20 @@
uint16_t nx_host_int; /* NetXen */
uint16_t nx_risc_int; /* NetXen */
} reg_off_t;
/*
+ * Multi-Queue, Mem BAR 2 definition.
+ */
+#define MBAR2_REQ_IN 0x0
+#define MBAR2_REQ_OUT 0x4
+#define MBAR2_RESP_IN 0x8
+#define MBAR2_RESP_OUT 0xc
+#define MBAR2_MULTI_Q_MAX 256
+#define MBAR2_REG_OFFSET 4096
+
+/*
* Mbox-8 read maximum debounce count.
* Reading Mbox-8 could be debouncing, before getting stable value.
* This is the recommended driver fix from Qlogic along with firmware fix.
* During testing, maximum count did not cross 3.
*/
@@ -553,10 +643,12 @@
*/
#define FLASH_DATA_FLAG BIT_31
#define FLASH_CONF_ADDR 0x7FFD0000
#define FLASH_24_25_DATA_ADDR 0x7FF00000
#define FLASH_8100_DATA_ADDR 0x7F800000
+#define FLASH_8300_DATA_ADDR 0x7F800000
+#define FLASH_2700_DATA_ADDR 0x7F800000
#define FLASH_ADDR_MASK 0x7FFF0000
#define NVRAM_CONF_ADDR 0x7FFF0000
#define NVRAM_DATA_ADDR 0x7FFE0000
@@ -569,49 +661,97 @@
#define NVRAM_2500_FUNC1_ADDR 0x48180
#define NVRAM_8100_FUNC0_ADDR 0xD0080
#define NVRAM_8100_FUNC1_ADDR 0xD0180
#define NVRAM_8021_FUNC0_ADDR 0xF0080
#define NVRAM_8021_FUNC1_ADDR 0xF0180
+#define NVRAM_8300_FC_FUNC0_ADDR 0x270080
+#define NVRAM_8300_FC_FUNC1_ADDR 0x270180
+#define NVRAM_8300_FCOE_FUNC0_ADDR 0x274080
+#define NVRAM_8300_FCOE_FUNC1_ADDR 0x274180
+#define NVRAM_2700_FUNC0_ADDR 0x270080
+#define NVRAM_2700_FUNC1_ADDR 0x270180
+#define NVRAM_2700_FUNC2_ADDR 0x270280
+#define NVRAM_2700_FUNC3_ADDR 0x270380
#define VPD_2400_FUNC0_ADDR 0
#define VPD_2400_FUNC1_ADDR 0x100
#define VPD_2500_FUNC0_ADDR 0x48000
#define VPD_2500_FUNC1_ADDR 0x48100
#define VPD_8100_FUNC0_ADDR 0xD0000
#define VPD_8100_FUNC1_ADDR 0xD0400
#define VPD_8021_FUNC0_ADDR 0xFA300
#define VPD_8021_FUNC1_ADDR 0xFA300
+#define VPD_8300_FC_FUNC0_ADDR 0x270000
+#define VPD_8300_FC_FUNC1_ADDR 0x270100
+#define VPD_8300_FCOE_FUNC0_ADDR 0xFA300
+#define VPD_8300_FCOE_FUNC1_ADDR 0xFA300
+#define VPD_2700_FUNC0_ADDR 0x270000
+#define VPD_2700_FUNC1_ADDR 0x270100
+#define VPD_2700_FUNC2_ADDR 0x270200
+#define VPD_2700_FUNC3_ADDR 0x270300
#define VPD_SIZE 0x80
#define FLASH_2200_FIRMWARE_ADDR 0x20000
#define FLASH_2300_FIRMWARE_ADDR 0x20000
#define FLASH_2400_FIRMWARE_ADDR 0x20000
#define FLASH_2500_FIRMWARE_ADDR 0x20000
#define FLASH_8100_FIRMWARE_ADDR 0xA0000
#define FLASH_8021_FIRMWARE_ADDR 0x40000
#define FLASH_8021_FIRMWARE_SIZE 0x80000
+#define FLASH_8300_FC_FIRMWARE_ADDR 0x240000
+#define FLASH_8300_FCOE_FIRMWARE_ADDR 0x220000
+#define FLASH_8300_FIRMWARE_SIZE 0x20000
+#define FLASH_2700_FIRMWARE_ADDR 0x240000
+#define FLASH_2700_FIRMWARE_SIZE 0x20000
+
#define FLASH_8021_BOOTLOADER_ADDR 0x4000
#define FLASH_8021_BOOTLOADER_SIZE 0x8000
+#define FLASH_8300_BOOTLOADER_ADDR 0x4000
+#define FLASH_8300_BOOTLOADER_SIZE 0x8000
+#define FLASH_2200_BOOT_CODE_ADDR 0
+#define FLASH_2300_BOOT_CODE_ADDR 0
+#define FLASH_2400_BOOT_CODE_ADDR 0
+#define FLASH_2500_BOOT_CODE_ADDR 0
+#define FLASH_2700_BOOT_CODE_ADDR 0x200000
+#define FLASH_8100_BOOT_CODE_ADDR 0x80000
+#define FLASH_8021_BOOT_CODE_ADDR 0x20000
+#define FLASH_8300_BOOT_CODE_ADDR 0x200000
+
+#define BEACON_8300_FC_FUNC0_ADDR 0x00201320
+#define BEACON_8300_FC_FUNC1_ADDR 0x00201328
+#define BEACON_8300_FCOE_FUNC0_ADDR 0x00201324
+#define BEACON_8300_FCOE_FUNC1_ADDR 0x0020132c
+#define BEACON_2700_FUNC0_ADDR 0x00201320
+#define BEACON_2700_FUNC1_ADDR 0x00201328
+#define BEACON_2700_FUNC2_ADDR 0x00201330
+#define BEACON_2700_FUNC3_ADDR 0x00201338
+
#define FLASH_2400_ERRLOG_START_ADDR_0 0
#define FLASH_2400_ERRLOG_START_ADDR_1 0
#define FLASH_2500_ERRLOG_START_ADDR_0 0x54000
#define FLASH_2500_ERRLOG_START_ADDR_1 0x54400
#define FLASH_8100_ERRLOG_START_ADDR_0 0xDC000
#define FLASH_8100_ERRLOG_START_ADDR_1 0xDC400
+#define FLASH_8300_ERRLOG_START_ADDR_0 0x280000
+#define FLASH_8300_ERRLOG_START_ADDR_1 0x280400
#define FLASH_ERRLOG_SIZE 0x200
#define FLASH_ERRLOG_ENTRY_SIZE 4
#define FLASH_2400_DESCRIPTOR_TABLE 0
#define FLASH_2500_DESCRIPTOR_TABLE 0x50000
#define FLASH_8100_DESCRIPTOR_TABLE 0xD8000
#define FLASH_8021_DESCRIPTOR_TABLE 0
+#define FLASH_8300_DESCRIPTOR_TABLE 0xFC000
+#define FLASH_2700_DESCRIPTOR_TABLE 0xFC000
#define FLASH_2400_LAYOUT_TABLE 0x11400
#define FLASH_2500_LAYOUT_TABLE 0x50400
#define FLASH_8100_LAYOUT_TABLE 0xD8400
#define FLASH_8021_LAYOUT_TABLE 0xFC400
+#define FLASH_8300_LAYOUT_TABLE 0xFC400
+#define FLASH_2700_LAYOUT_TABLE 0xFC400
/*
* Flash Error Log Event Codes.
*/
#define FLASH_ERRLOG_AEN_8002 0x8002
@@ -644,11 +784,11 @@
#define ROM_MBX_ERR 0x02
#define MBX_SUCCESS 0x10
#define MBX_ERR 0x11
#define ASYNC_EVENT 0x12
#define RESP_UPDATE 0x13
-#define REQ_UPDATE 0x14
+#define MULTI_Q_RSP_UPDATE 0x14
#define SCSI_FAST_POST_16 0x15
#define SCSI_FAST_POST_32 0x16
#define CTIO_FAST_POST 0x17
#define IP_FAST_POST_XMT 0x18
#define IP_FAST_POST_RCV 0x19
@@ -1021,36 +1161,24 @@
/*
* f/w module table
*/
struct fw_table {
- uint16_t fw_class;
+ uint32_t fw_class;
int8_t *fw_version;
};
/*
- * aif function table
- */
-typedef struct ql_ifunc {
- uint_t (*ifunc)();
-} ql_ifunc_t;
-
-#define QL_MSIX_AIF 0x0
-#define QL_MSIX_RSPQ 0x1
-#define QL_MSIX_MAXAIF QL_MSIX_RSPQ + 1
-
-/*
* DMA memory type.
*/
typedef enum mem_alloc_type {
UNKNOWN_MEMORY,
TASK_MEMORY,
LITTLE_ENDIAN_DMA,
BIG_ENDIAN_DMA,
KERNEL_MEM,
- NO_SWAP_DMA,
- STRUCT_BUF_MEMORY
+ NO_SWAP_DMA
} mem_alloc_type_t;
/*
* DMA memory alignment type.
*/
@@ -1067,23 +1195,19 @@
void *bp;
ddi_dma_cookie_t *cookies;
ddi_acc_handle_t acc_handle;
ddi_dma_handle_t dma_handle;
ddi_dma_cookie_t cookie;
+ uint32_t max_cookie_count;
uint32_t cookie_count;
uint32_t size;
uint32_t memflags;
mem_alloc_type_t type;
uint32_t flags; /* Solaris DMA flags. */
} dma_mem_t;
/*
- * dma_mem_t memflags defines
- */
-#define MFLG_32BIT_ONLY BIT_0
-
-/*
* 24 bit port ID type definition.
*/
typedef union {
struct {
uint8_t d_id[3];
@@ -1125,10 +1249,45 @@
ql_link_t *first;
ql_link_t *last;
} ql_head_t;
/*
+ * ISP request queue context
+ */
+typedef struct ql_request_q {
+ struct cmd_entry *req_ring_ptr;
+ dma_mem_t req_ring;
+ uint32_t *req_out_shadow_ptr;
+ uint32_t req_out_shadow_ofst;
+ uint32_t mbar_req_in;
+ uint32_t mbar_req_out;
+ uint16_t req_ring_index;
+ uint16_t req_entry_cnt;
+ uint16_t req_q_cnt; /* # of available entries. */
+ uint16_t req_q_number;
+} ql_request_q_t;
+
+/*
+ * ISP response queue context
+ */
+typedef struct ql_response_q {
+ struct ql_srb *status_srb;
+ struct sts_entry *rsp_ring_ptr;
+ dma_mem_t rsp_ring;
+ kmutex_t intr_mutex;
+ uint32_t *rsp_in_shadow_ptr;
+ uint32_t rsp_in_shadow_ofst;
+ uint32_t mbar_rsp_in;
+ uint32_t mbar_rsp_out;
+ uint16_t rsp_ring_index;
+ uint16_t rsp_entry_cnt;
+ uint16_t isp_rsp_index;
+ uint16_t rsp_q_number;
+ uint16_t msi_x_vector;
+} ql_response_q_t;
+
+/*
* This is the per-command structure
*/
typedef struct ql_srb {
/* Command link. */
ql_link_t cmd;
@@ -1162,42 +1321,48 @@
/* Command state/status flags. */
volatile uint32_t flags;
/* Command IOCB context. */
void (*iocb)(struct ql_adapter_state *,
- struct ql_srb *, void *);
+ ql_request_q_t *, struct ql_srb *, void *);
struct cmd_entry *request_ring_ptr;
uint32_t handle;
+ uint16_t req_q_number;
uint16_t req_cnt;
uint8_t retry_count;
+ uint8_t rsp_q_number;
dma_mem_t sg_dma;
} ql_srb_t;
#define SRB_ISP_STARTED BIT_0 /* Command sent to ISP. */
#define SRB_ISP_COMPLETED BIT_1 /* ISP finished with command. */
#define SRB_RETRY BIT_2 /* Driver retrying command. */
#define SRB_POLL BIT_3 /* Poll for completion. */
+
#define SRB_WATCHDOG_ENABLED BIT_4 /* Command on watchdog list. */
-#define SRB_ABORT BIT_5 /* SRB to be aborted. */
+#define SRB_ELS_PKT BIT_5 /* Extended Link Services pkt */
#define SRB_UB_IN_FCA BIT_6 /* FCA holds unsolicited buffer */
#define SRB_UB_IN_ISP BIT_7 /* ISP holds unsolicited buffer */
+
#define SRB_UB_CALLBACK BIT_8 /* Unsolicited callback needed. */
#define SRB_UB_RSCN BIT_9 /* Unsolicited RSCN callback. */
#define SRB_UB_FCP BIT_10 /* Unsolicited RSCN callback. */
#define SRB_FCP_CMD_PKT BIT_11 /* FCP command type packet. */
+
#define SRB_FCP_DATA_PKT BIT_12 /* FCP data type packet. */
#define SRB_FCP_RSP_PKT BIT_13 /* FCP response type packet. */
#define SRB_IP_PKT BIT_14 /* IP type packet. */
#define SRB_GENERIC_SERVICES_PKT BIT_15 /* Generic services type packet */
+
#define SRB_COMMAND_TIMEOUT BIT_16 /* Command timed out. */
#define SRB_ABORTING BIT_17 /* SRB aborting. */
#define SRB_IN_DEVICE_QUEUE BIT_18 /* In Device Queue */
#define SRB_IN_TOKEN_ARRAY BIT_19 /* In Token Array */
+
#define SRB_UB_FREE_REQUESTED BIT_20 /* UB Free requested */
#define SRB_UB_ACQUIRED BIT_21 /* UB selected for upcall */
#define SRB_MS_PKT BIT_22 /* Management Service pkt */
-#define SRB_ELS_PKT BIT_23 /* Extended Link Services pkt */
/*
* This byte will be used to define flags for the LUN on the target.
* Presently, we have untagged-command as one flag. Others can be
* added later, if needed.
@@ -1227,30 +1392,44 @@
uint32_t flags;
/* LUN execution throttle. */
uint16_t lun_outcnt;
+ /* LUN number as reported by REPORT LUNS */
uint16_t lun_no;
+ /*
+ * Logical unit number in SCSI3 format, also
+ * referred to as FCP lun or FCP entity address.
+ */
+ uint64_t lun_addr;
+
ql_link_t link;
} ql_lun_t;
/*
* LUN Queue flags
*/
#define LQF_UNTAGGED_PENDING BIT_0
/*
+ * SCSI standard defined lun addressing methods.
+ */
+#define QL_LUN_AM_MASK 0xC0 /* Address Method Mask */
+#define QL_LUN_AM_PDEV 0x00 /* Peripheral device AM */
+#define QL_LUN_AM_FLAT 0x40 /* Flat space AM */
+#define QL_LUN_AM_LUN 0x80 /* Logical unit AM */
+#define QL_LUN_AM_EFLAT 0xC0 /* Extended flat space AM */
+#define QL_LUN_AM_ELUN 0xC0 /* Extended logical unit AM */
+
+/*
* Fibre Channel Device Queue structure
*/
typedef struct ql_target {
/* Device queue lock. */
kmutex_t mutex;
- /* Head target command link. */
- ql_head_t tgt_cmd;
-
volatile uint32_t flags;
port_id_t d_id;
uint16_t loop_id;
volatile uint16_t outcnt; /* # of cmds running in ISP */
uint32_t iidma_rate;
@@ -1307,28 +1486,34 @@
#define TQF_INITIATOR_DEVICE BIT_3
#define TQF_RSCN_RCVD BIT_4
#define TQF_NEED_AUTHENTICATION BIT_5
#define TQF_PLOGI_PROGRS BIT_6
#define TQF_IIDMA_NEEDED BIT_7
+#define TQF_LOGIN_NEEDED BIT_8
+
/*
* Tempoary N_Port information
*/
typedef struct ql_n_port_info {
uint16_t n_port_handle;
uint8_t port_name[8]; /* Big endian. */
uint8_t node_name[8]; /* Big endian. */
+ port_id_t d_id;
} ql_n_port_info_t;
/*
* iiDMA
*/
#define IIDMA_RATE_INIT 0xffffffff /* init state */
#define IIDMA_RATE_NDEF 0xfffffffe /* not defined in conf file */
#define IIDMA_RATE_1GB 0x0
#define IIDMA_RATE_2GB 0x1
+#define IIDMA_RATE_AUTO 0x2
#define IIDMA_RATE_4GB 0x3
#define IIDMA_RATE_8GB 0x4
+#define IIDMA_RATE_16GB 0x5
+#define IIDMA_RATE_32GB 0x6
#define IIDMA_RATE_10GB 0x13
#define IIDMA_RATE_MAX IIDMA_RATE_10GB
/*
* Kernel statistic structure definitions.
@@ -1365,28 +1550,49 @@
/* DUMP state flags. */
#define QL_DUMPING BIT_0
#define QL_DUMP_VALID BIT_1
#define QL_DUMP_UPLOADED BIT_2
+#define QL_LOG_ENTRIES 256 /* max # of EL entries */
+#define QL_LOG_LENGTH 128 /* max # of bytes in each EL entry */
+
+typedef struct ql_trace_entry {
+ timespec_t hs_time; /* high resolution timestamp */
+ char buf[QL_LOG_LENGTH];
+} ql_trace_entry_t;
+
+/* per instance based extended logging trace descriptor */
typedef struct el_trace_desc {
kmutex_t mutex;
- uint16_t next;
- uint32_t trace_buffer_size;
- char *trace_buffer;
-} el_trace_desc_t;
+ uint32_t nentries; /* max number of entries */
+ uint16_t nindex; /* next index to fill */
+ uint32_t start; /* starting point */
+ uint32_t end; /* ending point */
+ uint32_t csize; /* current filled queue size */
+ uint32_t count; /* sequence number */
+ size_t trace_buffer_size;
+ ql_trace_entry_t *trace_buffer;
+} ql_trace_desc_t;
/*
* NVRAM cache descriptor.
*/
typedef struct nvram_cache_desc {
- kmutex_t mutex;
uint32_t valid;
uint32_t size;
void *cache;
} nvram_cache_desc_t;
/*
+ * Plogi retry parameters
+ */
+typedef struct plogi_params_desc {
+ uint32_t retry_cnt;
+ uint32_t retry_dly_usec;
+} plogi_params_desc_t;
+
+/*
* ql attach progress indication
*/
#define QL_SOFT_STATE_ALLOCED BIT_0
#define QL_REGS_MAPPED BIT_1
#define QL_HBA_BUFFER_SETUP BIT_2
@@ -1399,10 +1605,14 @@
#define QL_FCA_TRAN_ALLOCED BIT_9
#define QL_FCA_ATTACH_DONE BIT_10
#define QL_IOMAP_IOBASE_MAPPED BIT_11
#define QL_N_PORT_INFO_CREATED BIT_12
#define QL_DB_IOBASE_MAPPED BIT_13
+#define QL_FCA_INIT_FM BIT_14
+#define QL_NVRAM_CACHE_CREATED BIT_15
+#define QL_PLOGI_PARAMS_CREATED BIT_16
+
/* Device queue head list size (based on AL_PA address). */
#define DEVICE_HEAD_LIST_SIZE 0x81
struct legacy_intr_set {
uint32_t int_vec_bit;
@@ -1409,90 +1619,109 @@
uint32_t tgt_status_reg;
uint32_t tgt_mask_reg;
uint32_t pci_int_reg;
};
+/* Returned Mailbox registers. */
+typedef struct ql_mbx_data {
+ uint16_t mb[MAX_MBOX_COUNT];
+} ql_mbx_data_t;
+
+typedef struct ql_ledstate {
+ uint32_t BeaconState;
+ uint32_t LEDflags;
+ uint32_t flags;
+ uint32_t led_blink_on;
+ uint32_t select;
+ ql_mbx_data_t cfg;
+} ql_ledstate_t;
+
/*
* Adapter state structure.
*/
typedef struct ql_adapter_state {
ql_link_t hba;
kmutex_t mutex;
- volatile uint32_t flags; /* State flags. */
+ volatile uint64_t flags; /* State flags. */
uint32_t state;
port_id_t d_id;
uint16_t loop_id;
- uint8_t topology;
uint16_t sfp_stat;
-
uint16_t idle_timer;
+ uint16_t r_a_tov; /* 2 * R_A_TOV + 5 */
+ uint8_t topology;
+ uint8_t bbcr_runtime;
+ uint8_t bbcr_initial;
uint8_t loop_down_abort_time;
uint8_t port_retry_timer;
uint8_t loop_down_timer;
uint8_t watchdog_timer;
- uint16_t r_a_tov; /* 2 * R_A_TOV + 5 */
/* Task Daemon context. */
- callb_cpr_t cprinfo;
+ ql_head_t unsol_callback_queue;
+ ddi_taskq_t *driver_thread_taskq;
kmutex_t task_daemon_mutex;
- kcondvar_t cv_dr_suspended;
kcondvar_t cv_task_daemon;
- volatile uint32_t task_daemon_flags;
- ql_head_t callback_queue;
+ kcondvar_t cv_dr_suspended;
+ volatile uint64_t task_daemon_flags;
+ uint32_t driver_thread_awake;
+ uint64_t df;
+ uint64_t sf;
+ uint64_t cf;
+ /* Completion thread context */
+ ddi_taskq_t *completion_taskq;
+ ql_head_t comp_q;
+ kmutex_t comp_q_mutex;
+ kcondvar_t cv_comp_thread;
+ uint8_t comp_thds_active;
+ uint8_t comp_thds_awake;
+ uint8_t completion_thds;
+
/* Interrupt context. */
- kmutex_t intr_mutex;
- caddr_t iobase;
- uint8_t rev_id;
- uint16_t device_id;
- uint16_t subsys_id;
- uint16_t subven_id;
- uint16_t ven_id;
- uint16_t fw_class;
- ql_srb_t *status_srb;
+ ddi_iblock_cookie_t iblock_cookie;
+ ddi_intr_handle_t *htable;
+ uint32_t hsize;
+ int32_t intr_cnt;
+ void *intr_pri;
+ int32_t intr_cap;
+ uint32_t iflags;
volatile uint8_t intr_claimed;
+ uint8_t mq_msix_vectors;
+ uint8_t interrupt_count;
- /*
- * ISP request queue, response queue, mailbox buffer and
- * IP receive queue buffer.
- */
- dma_mem_t hba_buf;
-
- /* ISP request queue context. */
- kmutex_t req_ring_mutex;
- struct cmd_entry *request_ring_bp;
- struct cmd_entry *request_ring_ptr;
- uint64_t request_dvma;
- uint16_t req_ring_index;
- uint16_t req_q_cnt; /* # of available entries. */
+ /* Outstanding ISP commands. */
ql_head_t pending_cmds;
ql_srb_t **outstanding_cmds;
uint16_t osc_index;
+ uint16_t osc_max_cnt;
+ /* ISP request queue context. */
+ kmutex_t req_ring_mutex;
+ ql_request_q_t *req_q[2];
+
/* ISP response queue context. */
- struct sts_entry *response_ring_bp;
- struct sts_entry *response_ring_ptr;
- uint64_t response_dvma;
- uint16_t rsp_ring_index;
- uint16_t isp_rsp_index;
+ ql_response_q_t **rsp_queues;
+ uint32_t rsp_queues_size;
+ uint8_t rsp_queues_cnt;
+ uint8_t rsp_q_number;
+ uint8_t io_min_rsp_q_number;
+ /* IP receive buffer queue context. */
+ ql_tgt_t *rcv_dev_q;
+ dma_mem_t rcv_ring;
+ struct rcvbuf *rcvbuf_ring_ptr;
+ uint16_t rcvbuf_ring_index;
+
/* Mailbox context. */
kmutex_t mbx_mutex;
- caddr_t mbx_bp;
struct mbx_cmd *mcp;
kcondvar_t cv_mbx_wait;
kcondvar_t cv_mbx_intr;
volatile uint8_t mailbox_flags;
- /* ISP receive buffer queue context. */
- ql_tgt_t *rcv_dev_q;
- struct rcvbuf *rcvbuf_ring_bp;
- struct rcvbuf *rcvbuf_ring_ptr;
- uint64_t rcvbuf_dvma;
- uint16_t rcvbuf_ring_index;
-
/* Unsolicited buffer data. */
uint16_t ub_outcnt;
uint8_t ub_seq_id;
uint8_t ub_command_count;
uint8_t ub_notify_count;
@@ -1506,17 +1735,30 @@
/* Kernel statistics. */
kstat_t *k_stats;
ql_adapter_stat_t *adapter_stats;
- /* Solaris adapter configuration data */
- ddi_acc_handle_t dev_handle;
+ /* PCI context */
ddi_acc_handle_t pci_handle; /* config space */
+ ddi_acc_handle_t dev_handle;
+ caddr_t iobase;
ddi_acc_handle_t iomap_dev_handle;
caddr_t iomap_iobase;
+ ddi_acc_handle_t mbar_dev_handle;
+ caddr_t mbar;
+ uint32_t mbar_size;
+ uint32_t mbar_queue_offset;
+ uint16_t device_id;
+ uint16_t subsys_id;
+ uint16_t subven_id;
+ uint16_t ven_id;
+ uint16_t pci_max_read_req;
+ uint8_t rev_id;
+ uint8_t pci_function_number;
+
+ /* Solaris adapter configuration data */
dev_info_t *dip;
- ddi_iblock_cookie_t iblock_cookie;
fc_fca_tran_t *tran;
uint32_t instance;
int8_t *devpath;
uint32_t fru_hba_index;
uint32_t fru_port_index;
@@ -1527,53 +1769,64 @@
fc_fca_bind_info_t bind_info;
ddi_modhandle_t fw_module;
uint32_t fw_major_version;
uint32_t fw_minor_version;
uint32_t fw_subminor_version;
- uint16_t fw_attributes;
+ uint32_t fw_attributes;
+ uint32_t fw_ext_attributes;
+ uint32_t fw_ext_memory_end;
uint32_t fw_ext_memory_size;
+ uint32_t fw_shared_ram_start;
+ uint32_t fw_shared_ram_end;
+ uint32_t fw_ddr_ram_start;
+ uint32_t fw_ddr_ram_end;
uint32_t parity_pause_errors;
boolean_t log_parity_pause;
+ uint32_t fw_class;
+ uint16_t fw_state[7];
+ uint16_t rom_status;
+ ql_ledstate_t ledstate;
uint16_t parity_hccr_err;
uint32_t parity_stat_err;
reg_off_t *reg_off;
caddr_t risc_code;
uint32_t risc_code_size;
ql_fw_code_t risc_fw[MAX_RISC_CODE_SEGMENTS];
uint32_t risc_dump_size;
void (*fcp_cmd)(struct ql_adapter_state *,
- ql_srb_t *, void *);
+ ql_request_q_t *, ql_srb_t *, void *);
void (*ip_cmd)(struct ql_adapter_state *,
- ql_srb_t *, void *);
+ ql_request_q_t *, ql_srb_t *, void *);
void (*ms_cmd)(struct ql_adapter_state *,
- ql_srb_t *, void *);
+ ql_request_q_t *, ql_srb_t *, void *);
+ void (*els_cmd)(struct ql_adapter_state *,
+ ql_request_q_t *, ql_srb_t *, void *);
uint8_t cmd_segs;
uint8_t cmd_cont_segs;
/* NVRAM configuration data */
- uint32_t cfg_flags;
+ uint64_t cfg_flags;
ql_comb_init_cb_t init_ctrl_blk;
ql_comb_ip_init_cb_t ip_init_ctrl_blk;
- uint16_t nvram_version;
- uint16_t adapter_features;
uint32_t fw_transfer_size;
+ uint16_t adapter_features;
uint16_t execution_throttle;
uint16_t port_down_retry_count;
+ uint16_t serdes_param[4];
+ uint16_t maximum_luns_per_target;
uint8_t port_down_retry_delay;
uint8_t qfull_retry_count;
uint8_t qfull_retry_delay;
- uint16_t serdes_param[4];
uint8_t loop_reset_delay;
/* Power management context. */
kmutex_t pm_mutex;
- uint32_t busy;
+ uint32_t pm_busy;
uint8_t power_level;
uint8_t pm_capable;
uint8_t config_saved;
uint8_t lip_on_panic;
- port_id_t port_hard_address;
/* sbus card data */
caddr_t sbus_fpga_iobase;
ddi_acc_handle_t sbus_fpga_dev_handle;
ddi_acc_handle_t sbus_config_handle;
@@ -1580,29 +1833,14 @@
caddr_t sbus_config_base;
/* XIOCTL context pointer. */
struct ql_xioctl *xioctl;
- kmutex_t cache_mutex;
struct ql_fcache *fcache;
int8_t *vcache;
+ nvram_cache_desc_t *nvram_cache;
- /* AIF (Advanced Interrupt Framework) support */
- ddi_intr_handle_t *htable;
- uint32_t hsize;
- int32_t intr_cnt;
- uint32_t intr_pri;
- int32_t intr_cap;
- uint32_t iflags;
-
- /* PCI maximum read request override */
- uint16_t pci_max_read_req;
-
- /* port manage mutex */
- kmutex_t portmutex;
- uint16_t maximum_luns_per_target;
-
/* f/w dump mutex */
uint32_t ql_dump_size;
uint32_t ql_dump_state;
void *ql_dump_ptr;
kmutex_t dump_mutex;
@@ -1609,33 +1847,37 @@
uint8_t fwwait;
dma_mem_t fwexttracebuf; /* extended trace */
dma_mem_t fwfcetracebuf; /* event trace */
+ ql_mbx_data_t fw_fce_trace_enable;
uint32_t fwfcetraceopt;
uint32_t flash_errlog_start; /* 32bit word addr */
uint32_t flash_errlog_ptr; /* 32bit word addr */
uint8_t send_plogi_timer;
+ /* Plogi retry parameters */
+ plogi_params_desc_t *plogi_params;
+
/* Virtual port context. */
fca_port_attrs_t *pi_attrs;
struct ql_adapter_state *pha;
struct ql_adapter_state *vp_next;
uint8_t vp_index;
+ uint8_t max_vports;
uint16_t free_loop_id;
/* Tempoary N_Port information */
struct ql_n_port_info *n_port;
- void (*els_cmd)(struct ql_adapter_state *,
- ql_srb_t *, void *);
- el_trace_desc_t *el_trace_desc;
+ ql_trace_desc_t *ql_trace_desc;
uint32_t flash_data_addr;
uint32_t flash_fw_addr;
uint32_t flash_golden_fw_addr;
+ uint32_t boot_code_addr;
uint32_t flash_vpd_addr;
uint32_t flash_nvram_addr;
uint32_t flash_desc_addr;
uint32_t mpi_capability_list;
uint8_t phy_fw_major_version;
@@ -1643,101 +1885,140 @@
uint8_t phy_fw_subminor_version;
uint8_t mpi_fw_major_version;
uint8_t mpi_fw_minor_version;
uint8_t mpi_fw_subminor_version;
- uint8_t idc_flash_acc;
- uint8_t idc_restart_cnt;
uint16_t idc_mb[8];
uint8_t idc_restart_timer;
- uint8_t idc_flash_acc_timer;
/* VLAN ID and MAC address */
uint8_t fcoe_vnport_mac[6];
uint16_t fabric_params;
uint16_t fcoe_vlan_id;
uint16_t fcoe_fcf_idx;
- nvram_cache_desc_t *nvram_cache;
/* NetXen context */
ddi_acc_handle_t db_dev_handle;
caddr_t db_iobase;
- uint64_t first_page_group_start;
- uint64_t first_page_group_end;
- uint64_t mn_win_crb;
caddr_t nx_pcibase; /* BAR0 base I/O address */
- uint32_t crb_win;
- uint32_t ddr_mn_window;
uint32_t qdr_sn_window;
uint32_t *nx_req_in;
caddr_t db_read;
uint32_t pci_bus_addr;
struct legacy_intr_set nx_legacy_intr;
uint32_t bootloader_size;
uint32_t bootloader_addr;
uint32_t flash_fw_size;
+ uint32_t dev_state;
+ uint32_t fw_heartbeat_counter;
+ dma_mem_t dmp_template;
+ uint32_t md_capture_mask;
+ uint32_t md_capture_size;
uint16_t iidma_rate;
uint8_t function_number;
uint8_t timeout_cnt;
+ uint8_t seconds_since_last_heartbeat;
+
+ /* default dma attributes */
+ ddi_dma_attr_t bit32_io_dma_attr;
+ ddi_dma_attr_t bit64_io_dma_attr;
+
+ ddi_dma_attr_t io_dma_attr;
+ ddi_dma_attr_t fcsm_cmd_dma_attr;
+ ddi_dma_attr_t fcsm_rsp_dma_attr;
+ ddi_dma_attr_t fcip_cmd_dma_attr;
+ ddi_dma_attr_t fcip_rsp_dma_attr;
+ ddi_dma_attr_t fcp_cmd_dma_attr;
+ ddi_dma_attr_t fcp_rsp_dma_attr;
+ ddi_dma_attr_t fcp_data_dma_attr;
+
+ int fm_capabilities;
+ uint16_t errlog[4];
} ql_adapter_state_t;
/*
* adapter state flags
*/
-#define FCA_BOUND BIT_0
-#define QL_OPENED BIT_1
-#define ONLINE BIT_2
-#define INTERRUPTS_ENABLED BIT_3
-#define ABORT_CMDS_LOOP_DOWN_TMO BIT_4
-#define POINT_TO_POINT BIT_5
-#define IP_ENABLED BIT_6
-#define IP_INITIALIZED BIT_7
-#define MENLO_LOGIN_OPERATIONAL BIT_8
-#define ADAPTER_SUSPENDED BIT_9
-#define ADAPTER_TIMER_BUSY BIT_10
-#define PARITY_ERROR BIT_11
-#define FLASH_ERRLOG_MARKER BIT_12
-#define VP_ENABLED BIT_13
-#define FDISC_ENABLED BIT_14
-#define FUNCTION_1 BIT_15
-#define MPI_RESET_NEEDED BIT_16
+#define FCA_BOUND (uint64_t)BIT_0
+#define QL_OPENED (uint64_t)BIT_1
+#define ONLINE (uint64_t)BIT_2
+#define INTERRUPTS_ENABLED (uint64_t)BIT_3
+#define ABORT_CMDS_LOOP_DOWN_TMO (uint64_t)BIT_4
+#define POINT_TO_POINT (uint64_t)BIT_5
+#define IP_ENABLED (uint64_t)BIT_6
+#define IP_INITIALIZED (uint64_t)BIT_7
+
+#define MENLO_LOGIN_OPERATIONAL (uint64_t)BIT_8
+#define ADAPTER_SUSPENDED (uint64_t)BIT_9
+#define FW_DUMP_NEEDED (uint64_t)BIT_10
+#define PARITY_ERROR (uint64_t)BIT_11
+
+#define FLASH_ERRLOG_MARKER (uint64_t)BIT_12
+#define VP_ENABLED (uint64_t)BIT_13
+#define FDISC_ENABLED (uint64_t)BIT_14
+#define MULTI_QUEUE (uint64_t)BIT_15
+
+#define MPI_RESET_NEEDED (uint64_t)BIT_16
+#define VP_ID_NOT_ACQUIRED (uint64_t)BIT_17
+#define IDC_STALL_NEEDED (uint64_t)BIT_18
+#define POLL_INTR (uint64_t)BIT_19
+
+#define IDC_RESTART_NEEDED (uint64_t)BIT_20
+#define IDC_ACK_NEEDED (uint64_t)BIT_21
+#define LOOPBACK_ACTIVE (uint64_t)BIT_22
+#define QUEUE_SHADOW_PTRS (uint64_t)BIT_23
+
+#define NO_INTR_HANDSHAKE (uint64_t)BIT_24
+#define COMP_THD_TERMINATE (uint64_t)BIT_25
+#define DISABLE_NIC_FW_DMP (uint64_t)BIT_26
+#define MULTI_CHIP_ADAPTER (uint64_t)BIT_27
+
/*
* task daemon flags
*/
-#define TASK_DAEMON_STOP_FLG BIT_0
-#define TASK_DAEMON_SLEEPING_FLG BIT_1
-#define TASK_DAEMON_ALIVE_FLG BIT_2
-#define TASK_DAEMON_IDLE_CHK_FLG BIT_3
-#define SUSPENDED_WAKEUP_FLG BIT_4
-#define FC_STATE_CHANGE BIT_5
-#define NEED_UNSOLICITED_BUFFERS BIT_6
-#define RESET_MARKER_NEEDED BIT_7
-#define RESET_ACTIVE BIT_8
-#define ISP_ABORT_NEEDED BIT_9
-#define ABORT_ISP_ACTIVE BIT_10
-#define LOOP_RESYNC_NEEDED BIT_11
-#define LOOP_RESYNC_ACTIVE BIT_12
-#define LOOP_DOWN BIT_13
-#define DRIVER_STALL BIT_14
-#define COMMAND_WAIT_NEEDED BIT_15
-#define COMMAND_WAIT_ACTIVE BIT_16
-#define STATE_ONLINE BIT_17
-#define ABORT_QUEUES_NEEDED BIT_18
-#define TASK_DAEMON_STALLED_FLG BIT_19
-#define TASK_THREAD_CALLED BIT_20
-#define FIRMWARE_UP BIT_21
-#define LIP_RESET_PENDING BIT_22
-#define FIRMWARE_LOADED BIT_23
-#define RSCN_UPDATE_NEEDED BIT_24
-#define HANDLE_PORT_BYPASS_CHANGE BIT_25
-#define PORT_RETRY_NEEDED BIT_26
-#define TASK_DAEMON_POWERING_DOWN BIT_27
-#define TD_IIDMA_NEEDED BIT_28
-#define SEND_PLOGI BIT_29
-#define IDC_EVENT BIT_30
+#define TASK_DAEMON_STOP_FLG (uint64_t)BIT_0
+#define TASK_DAEMON_SLEEPING_FLG (uint64_t)BIT_1
+#define TASK_DAEMON_ALIVE_FLG (uint64_t)BIT_2
+#define TASK_DAEMON_IDLE_CHK_FLG (uint64_t)BIT_3
+#define SUSPENDED_WAKEUP_FLG (uint64_t)BIT_4
+#define FC_STATE_CHANGE (uint64_t)BIT_5
+#define NEED_UNSOLICITED_BUFFERS (uint64_t)BIT_6
+#define MARKER_NEEDED (uint64_t)BIT_7
+
+#define MARKER_ACTIVE (uint64_t)BIT_8
+#define ISP_ABORT_NEEDED (uint64_t)BIT_9
+#define ABORT_ISP_ACTIVE (uint64_t)BIT_10
+#define LOOP_RESYNC_NEEDED (uint64_t)BIT_11
+
+#define LOOP_RESYNC_ACTIVE (uint64_t)BIT_12
+#define LOOP_DOWN (uint64_t)BIT_13
+#define DRIVER_STALL (uint64_t)BIT_14
+#define COMMAND_WAIT_NEEDED (uint64_t)BIT_15
+
+#define COMMAND_WAIT_ACTIVE (uint64_t)BIT_16
+#define STATE_ONLINE (uint64_t)BIT_17
+#define ABORT_QUEUES_NEEDED (uint64_t)BIT_18
+#define TASK_DAEMON_STALLED_FLG (uint64_t)BIT_19
+
+#define SEND_PLOGI (uint64_t)BIT_20
+#define FIRMWARE_UP (uint64_t)BIT_21
+#define IDC_POLL_NEEDED (uint64_t)BIT_22
+#define FIRMWARE_LOADED (uint64_t)BIT_23
+
+#define RSCN_UPDATE_NEEDED (uint64_t)BIT_24
+#define HANDLE_PORT_BYPASS_CHANGE (uint64_t)BIT_25
+#define PORT_RETRY_NEEDED (uint64_t)BIT_26
+#define TASK_DAEMON_POWERING_DOWN (uint64_t)BIT_27
+
+#define TD_IIDMA_NEEDED (uint64_t)BIT_28
+#define WATCHDOG_NEEDED (uint64_t)BIT_29
+#define LED_BLINK (uint64_t)BIT_30
+
+#define DTF_EL_MSG_SKIP_FLGS (IDC_POLL_NEEDED | WATCHDOG_NEEDED | \
+ TASK_DAEMON_IDLE_CHK_FLG | LED_BLINK)
/*
* Mailbox flags
*/
#define MBX_WANT_FLG BIT_0
#define MBX_BUSY_FLG BIT_1
@@ -1745,53 +2026,82 @@
#define MBX_ABORT BIT_3
/*
* Configuration flags
*/
-#define CFG_ENABLE_HARD_ADDRESS BIT_0
-#define CFG_ENABLE_64BIT_ADDRESSING BIT_1
-#define CFG_ENABLE_LIP_RESET BIT_2
-#define CFG_ENABLE_FULL_LIP_LOGIN BIT_3
-#define CFG_ENABLE_TARGET_RESET BIT_4
-#define CFG_ENABLE_LINK_DOWN_REPORTING BIT_5
-#define CFG_DISABLE_EXTENDED_LOGGING_TRACE BIT_6
-#define CFG_ENABLE_FCP_2_SUPPORT BIT_7
-#define CFG_MULTI_CHIP_ADAPTER BIT_8
-#define CFG_SBUS_CARD BIT_9
-#define CFG_CTRL_2300 BIT_10
-#define CFG_CTRL_6322 BIT_11
-#define CFG_CTRL_2200 BIT_12
-#define CFG_CTRL_2422 BIT_13
-#define CFG_CTRL_25XX BIT_14
-#define CFG_ENABLE_EXTENDED_LOGGING BIT_15
-#define CFG_DISABLE_RISC_CODE_LOAD BIT_16
-#define CFG_SET_CACHE_LINE_SIZE_1 BIT_17
-#define CFG_CTRL_MENLO BIT_18
-#define CFG_EXT_FW_INTERFACE BIT_19
-#define CFG_LOAD_FLASH_FW BIT_20
-#define CFG_DUMP_MAILBOX_TIMEOUT BIT_21
-#define CFG_DUMP_ISP_SYSTEM_ERROR BIT_22
-#define CFG_DUMP_DRIVER_COMMAND_TIMEOUT BIT_23
-#define CFG_DUMP_LOOP_OFFLINE_TIMEOUT BIT_24
-#define CFG_ENABLE_FWEXTTRACE BIT_25
-#define CFG_ENABLE_FWFCETRACE BIT_26
-#define CFG_FW_MISMATCH BIT_27
-#define CFG_CTRL_81XX BIT_28
-#define CFG_CTRL_8021 BIT_29
-#define CFG_FAST_TIMEOUT BIT_30
-#define CFG_LR_SUPPORT BIT_31
+#define CFG_CTRL_27XX (uint64_t)BIT_0
+#define CFG_ENABLE_64BIT_ADDRESSING (uint64_t)BIT_1
+#define CFG_ENABLE_LIP_RESET (uint64_t)BIT_2
+#define CFG_ENABLE_FULL_LIP_LOGIN (uint64_t)BIT_3
-#define CFG_CTRL_2425 (CFG_CTRL_2422 | CFG_CTRL_25XX)
-#define CFG_CTRL_8081 (CFG_CTRL_8021 | CFG_CTRL_81XX)
-#define CFG_CTRL_2581 (CFG_CTRL_25XX | CFG_CTRL_81XX)
-#define CFG_CTRL_242581 (CFG_CTRL_2422 | CFG_CTRL_25XX | CFG_CTRL_81XX)
-#define CFG_CTRL_24258081 (CFG_CTRL_2425 | CFG_CTRL_8081)
-#define CFG_CTRL_258081 (CFG_CTRL_25XX | CFG_CTRL_8081)
-#define CFG_CTRL_2480 (CFG_CTRL_2422 | CFG_CTRL_8021)
+#define CFG_ENABLE_TARGET_RESET (uint64_t)BIT_4
+#define CFG_ENABLE_LINK_DOWN_REPORTING (uint64_t)BIT_5
+#define CFG_LR_SUPPORT (uint64_t)BIT_6
+#define CFG_ENABLE_FCP_2_SUPPORT (uint64_t)BIT_7
-#define CFG_IST(ha, cfgflags) (ha->cfg_flags & cfgflags)
+#define CFG_CTRL_83XX (uint64_t)BIT_8
+#define CFG_SBUS_CARD (uint64_t)BIT_9
+#define CFG_CTRL_23XX (uint64_t)BIT_10
+#define CFG_CTRL_63XX (uint64_t)BIT_11
+#define CFG_CTRL_22XX (uint64_t)BIT_12
+#define CFG_CTRL_24XX (uint64_t)BIT_13
+#define CFG_CTRL_25XX (uint64_t)BIT_14
+#define CFG_ENABLE_EXTENDED_LOGGING (uint64_t)BIT_15
+
+#define CFG_DISABLE_RISC_CODE_LOAD (uint64_t)BIT_16
+#define CFG_SET_CACHE_LINE_SIZE_1 (uint64_t)BIT_17
+#define CFG_CTRL_MENLO (uint64_t)BIT_18
+#define CFG_EXT_FW_INTERFACE (uint64_t)BIT_19
+
+#define CFG_LOAD_FLASH_FW (uint64_t)BIT_20
+#define CFG_DUMP_MAILBOX_TIMEOUT (uint64_t)BIT_21
+#define CFG_DUMP_ISP_SYSTEM_ERROR (uint64_t)BIT_22
+#define CFG_DUMP_DRIVER_COMMAND_TIMEOUT (uint64_t)BIT_23
+
+#define CFG_DUMP_LOOP_OFFLINE_TIMEOUT (uint64_t)BIT_24
+#define CFG_ENABLE_FWEXTTRACE (uint64_t)BIT_25
+#define CFG_ENABLE_FWFCETRACE (uint64_t)BIT_26
+#define CFG_CTRL_80XX (uint64_t)BIT_27
+
+#define CFG_CTRL_81XX (uint64_t)BIT_28
+#define CFG_CTRL_82XX (uint64_t)BIT_29
+#define CFG_FAST_TIMEOUT (uint64_t)BIT_30
+
+#define CFG_CTRL_2363 (CFG_CTRL_23XX | CFG_CTRL_63XX)
+#define CFG_CTRL_2425 (CFG_CTRL_24XX | CFG_CTRL_25XX)
+#define CFG_CTRL_2783 (CFG_CTRL_27XX | CFG_CTRL_83XX)
+#define CFG_CTRL_8081 (CFG_CTRL_80XX | CFG_CTRL_81XX)
+#define CFG_CTRL_278083 (CFG_CTRL_80XX | CFG_CTRL_2783)
+#define CFG_CTRL_27808183 (CFG_CTRL_8081 | CFG_CTRL_2783)
+#define CFG_CTRL_2527808183 (CFG_CTRL_25XX | CFG_CTRL_27808183)
+#define CFG_CTRL_252780818283 (CFG_CTRL_82XX | CFG_CTRL_2527808183)
+
+#define CFG_ISP_FW_TYPE_1 (CFG_CTRL_22XX | CFG_CTRL_2363)
+#define CFG_ISP_FW_TYPE_2 (CFG_CTRL_24XX | CFG_CTRL_252780818283)
+#define CFG_FCIP_TYPE_1 (CFG_CTRL_22XX | CFG_CTRL_23XX)
+#define CFG_FCIP_SUPPORT (CFG_FCIP_TYPE_1 | CFG_CTRL_24XX)
+#define CFG_FCOE_SUPPORT (CFG_CTRL_82XX | CFG_CTRL_8081)
+#define CFG_N2N_SUPPORT (CFG_CTRL_2425 | CFG_CTRL_2783)
+#define CFG_FC_TYPE_1 (CFG_CTRL_22XX | CFG_CTRL_2363)
+#define CFG_FC_TYPE_2 (CFG_CTRL_2425 | CFG_CTRL_2783)
+#define CFG_FC_TYPE (CFG_FC_TYPE_1 | CFG_FC_TYPE_2)
+#define CFG_NO_INTR_HSHAKE_SUP (CFG_CTRL_27808183)
+#define CFG_MWB_4096_SUPPORT (CFG_CTRL_2425 | CFG_CTRL_81XX)
+#define CFG_IIDMA_SUPPORT (CFG_CTRL_8081 | CFG_FC_TYPE_2)
+#define CFG_FLASH_ACC_SUPPORT (CFG_CTRL_27808183)
+#define CFG_FLASH_DMA_SUPPORT (CFG_CTRL_2527808183)
+#define CFG_LOOP_POINT_SUPPORT (CFG_CTRL_8081)
+#define CFG_LB_ECHO_SUPPORT (CFG_CTRL_2363 | CFG_ISP_FW_TYPE_2)
+#define CFG_SET_LEDS_SUPPORT (CFG_CTRL_2363 | CFG_ISP_FW_TYPE_2)
+#define CFG_SERDES_SUPPORT (CFG_CTRL_2783)
+#define CFG_BBCR_SUPPORT (CFG_CTRL_2783)
+#define CFG_MSI_SUPPORT (CFG_CTRL_2425 | CFG_CTRL_81XX | CFG_CTRL_82XX)
+
+
+#define CFG_IST(ha, cfgflags) (ha->cfg_flags & (cfgflags))
+
/*
* Interrupt configuration flags
*/
#define IFLG_INTR_LEGACY BIT_0
#define IFLG_INTR_FIXED BIT_1
@@ -1808,12 +2118,14 @@
#define MSW(x) (uint16_t)((uint32_t)(x) >> 16)
#define LSW(x) (uint16_t)(x)
#define LSD(x) (uint32_t)(x)
#define MSD(x) (uint32_t)((uint64_t)(x) >> 32)
-#define SHORT_TO_LONG(lsw, msw) (uint32_t)((uint16_t)msw << 16 | (uint16_t)lsw)
-#define CHAR_TO_SHORT(lsb, msb) (uint16_t)((uint8_t)msb << 8 | (uint8_t)lsb)
+#define LONG_TO_LLONG(lsl, msl) (uint64_t)((uint64_t)(msl) << 32 | \
+ (uint32_t)(lsl))
+#define SHORT_TO_LONG(lsw, msw) (uint32_t)((uint32_t)msw << 16 | (uint16_t)lsw)
+#define CHAR_TO_SHORT(lsb, msb) (uint16_t)((uint16_t)msb << 8 | (uint8_t)lsb)
#define CHAR_TO_LONG(lsb, b1, b2, msb) \
(uint32_t)(SHORT_TO_LONG(CHAR_TO_SHORT(lsb, b1), \
CHAR_TO_SHORT(b2, msb)))
/* Little endian machine correction defines. */
@@ -1858,91 +2170,83 @@
FABRIC_LOOP_ID(x) || BROADCAST_LOOP_ID(x))
#define VALID_N_PORT_HDL(x) (x <= LAST_N_PORT_HDL || \
(x >= SNS_24XX_HDL && x <= BROADCAST_24XX_HDL))
-#define VALID_DEVICE_ID(ha, x) (CFG_IST(ha, CFG_CTRL_24258081) ? \
+#define VALID_DEVICE_ID(ha, x) (CFG_IST(ha, CFG_ISP_FW_TYPE_2) ? \
VALID_N_PORT_HDL(x) : VALID_LOOP_ID(x))
-#define VALID_TARGET_ID(ha, x) (CFG_IST(ha, CFG_CTRL_24258081) ? \
+#define VALID_TARGET_ID(ha, x) (CFG_IST(ha, CFG_ISP_FW_TYPE_2) ? \
(x <= LAST_N_PORT_HDL) : (LOCAL_LOOP_ID(x) || SNS_LOOP_ID(x)))
-#define RESERVED_LOOP_ID(ha, x) (CFG_IST(ha, CFG_CTRL_24258081) ? \
+#define RESERVED_LOOP_ID(ha, x) (CFG_IST(ha, CFG_ISP_FW_TYPE_2) ? \
(x > LAST_N_PORT_HDL && x <= FL_PORT_24XX_HDL) : \
(x >= FL_PORT_LOOP_ID && x <= SIMPLE_NAME_SERVER_LOOP_ID))
-#define QL_LOOP_TRANSITION (RESET_MARKER_NEEDED | RESET_ACTIVE | \
+#define QL_LOOP_TRANSITION (MARKER_NEEDED | MARKER_ACTIVE | \
ISP_ABORT_NEEDED | ABORT_ISP_ACTIVE | \
LOOP_RESYNC_NEEDED | LOOP_RESYNC_ACTIVE | \
COMMAND_WAIT_NEEDED | COMMAND_WAIT_ACTIVE)
-#define QL_SUSPENDED (QL_LOOP_TRANSITION | LOOP_DOWN | DRIVER_STALL)
-
#define LOOP_RECONFIGURE(ha) (ha->task_daemon_flags & (QL_LOOP_TRANSITION | \
DRIVER_STALL))
-#define DRIVER_SUSPENDED(ha) (ha->task_daemon_flags & QL_SUSPENDED)
+#define DRIVER_SUSPENDED(ha) (ha->task_daemon_flags & (LOOP_DOWN | \
+ QL_LOOP_TRANSITION | DRIVER_STALL))
#define LOOP_NOT_READY(ha) (ha->task_daemon_flags & (QL_LOOP_TRANSITION | \
LOOP_DOWN))
#define LOOP_READY(ha) (LOOP_NOT_READY(ha) == 0)
#define QL_TASK_PENDING(ha) ( \
ha->task_daemon_flags & (QL_LOOP_TRANSITION | ABORT_QUEUES_NEEDED | \
- PORT_RETRY_NEEDED) || ha->callback_queue.first != NULL)
+ PORT_RETRY_NEEDED) || ha->unsol_callback_queue.first != NULL)
#define QL_DAEMON_NOT_ACTIVE(ha) ( \
!(ha->task_daemon_flags & TASK_DAEMON_ALIVE_FLG) || \
ha->task_daemon_flags & (TASK_DAEMON_SLEEPING_FLG | \
TASK_DAEMON_STOP_FLG))
-#define QL_DAEMON_SUSPENDED(ha) (\
- (((ha)->cprinfo.cc_events & CALLB_CPR_START) ||\
- ((ha)->flags & ADAPTER_SUSPENDED)))
+#define QL_ABORTED_SRB(ha) ((ql_srb_t *)ha)
-#define INTERRUPT_PENDING(ha) (CFG_IST(ha, CFG_CTRL_8021) ? \
+#define INTERRUPT_PENDING(ha) (CFG_IST(ha, CFG_CTRL_82XX) ? \
RD32_IO_REG(ha, nx_risc_int) & NX_RISC_INT : \
RD16_IO_REG(ha, istatus) & RISC_INT)
-
-#define QL_MAX_FRAME_SIZE(ha) \
- (uint16_t)(CFG_IST(ha, CFG_CTRL_24258081) ? CHAR_TO_SHORT( \
- ha->init_ctrl_blk.cb24.max_frame_length[0], \
- ha->init_ctrl_blk.cb24.max_frame_length[1]) : CHAR_TO_SHORT( \
- ha->init_ctrl_blk.cb.max_frame_length[0], \
- ha->init_ctrl_blk.cb.max_frame_length[1]))
-
/*
* Locking Macro Definitions
*/
#define GLOBAL_STATE_LOCK() mutex_enter(&ql_global_mutex)
#define GLOBAL_STATE_UNLOCK() mutex_exit(&ql_global_mutex)
+#define GLOBAL_TIMER_LOCK() mutex_enter(&ql_global_timer_mutex)
+#define GLOBAL_TIMER_UNLOCK() mutex_exit(&ql_global_timer_mutex)
+
#define TRY_DEVICE_QUEUE_LOCK(q) mutex_tryenter(&q->mutex)
#define DEVICE_QUEUE_LOCK(q) mutex_enter(&q->mutex)
#define DEVICE_QUEUE_UNLOCK(q) mutex_exit(&q->mutex)
#define TRY_MBX_REGISTER_LOCK(ha) mutex_tryenter(&ha->pha->mbx_mutex)
#define MBX_REGISTER_LOCK_OWNER(ha) mutex_owner(&ha->pha->mbx_mutex)
#define MBX_REGISTER_LOCK(ha) mutex_enter(&ha->pha->mbx_mutex)
#define MBX_REGISTER_UNLOCK(ha) mutex_exit(&ha->pha->mbx_mutex)
-#define INTR_LOCK(ha) mutex_enter(&ha->pha->intr_mutex)
-#define INTR_UNLOCK(ha) mutex_exit(&ha->pha->intr_mutex)
+#define INTR_LOCK(ha) ql_intr_lock(ha->pha)
+#define INTR_UNLOCK(ha) ql_intr_unlock(ha->pha)
+#define INDX_INTR_LOCK(ha, i) mutex_enter(&ha->pha->rsp_queues[i]->intr_mutex)
+#define INDX_INTR_UNLOCK(ha, i) mutex_exit(&ha->pha->rsp_queues[i]->intr_mutex)
+
#define TASK_DAEMON_LOCK(ha) mutex_enter(&ha->pha->task_daemon_mutex)
#define TASK_DAEMON_UNLOCK(ha) mutex_exit(&ha->pha->task_daemon_mutex)
#define REQUEST_RING_LOCK(ha) mutex_enter(&ha->pha->req_ring_mutex)
#define REQUEST_RING_UNLOCK(ha) mutex_exit(&ha->pha->req_ring_mutex)
-#define CACHE_LOCK(ha) mutex_enter(&ha->pha->cache_mutex);
-#define CACHE_UNLOCK(ha) mutex_exit(&ha->pha->cache_mutex);
+#define COMP_Q_LOCK(ha) mutex_enter(&ha->pha->comp_q_mutex)
+#define COMP_Q_UNLOCK(ha) mutex_exit(&ha->pha->comp_q_mutex)
-#define PORTMANAGE_LOCK(ha) mutex_enter(&ha->pha->portmutex);
-#define PORTMANAGE_UNLOCK(ha) mutex_exit(&ha->pha->portmutex);
-
#define ADAPTER_STATE_LOCK(ha) mutex_enter(&ha->pha->mutex)
#define ADAPTER_STATE_UNLOCK(ha) mutex_exit(&ha->pha->mutex)
#define QL_DUMP_LOCK(ha) mutex_enter(&ha->pha->dump_mutex)
#define QL_DUMP_UNLOCK(ha) mutex_exit(&ha->pha->dump_mutex)
@@ -1954,13 +2258,10 @@
#define QL_UB_UNLOCK(ha) mutex_exit(&ha->pha->ub_mutex)
#define GLOBAL_HW_LOCK() mutex_enter(&ql_global_hw_mutex)
#define GLOBAL_HW_UNLOCK() mutex_exit(&ql_global_hw_mutex)
-#define NVRAM_CACHE_LOCK(ha) mutex_enter(&ha->nvram_cache->mutex);
-#define NVRAM_CACHE_UNLOCK(ha) mutex_exit(&ha->nvram_cache->mutex);
-
/*
* PCI power management control/status register location
*/
#define QL_PM_CS_REG 0x48
@@ -1994,12 +2295,10 @@
#define QL_SAVE_CONFIG_REGS(dip) ql_save_config_regs(dip)
#define QL_RESTORE_CONFIG_REGS(dip) ql_restore_config_regs(dip)
#endif /* USE_DDI_INTERFACES */
-#define QL_IS_SET(x, y) (((x) & (y)) == (y))
-
/*
* QL local function return status codes
*/
#define QL_SUCCESS 0x4000
#define QL_INVALID_COMMAND 0x4001
@@ -2151,10 +2450,15 @@
struct prli_svc_pram_resp_page svc_params;
} prli_acc_resp_t;
#define EL_TRACE_BUF_SIZE 8192
+#define QL_PORT_ID_MASK 0xffffff
+
+#define QL_PLOGI_RETRY_CNT (5)
+#define QL_PLOGI_RETRY_DLY_USEC (10 * MILLISEC)
+
/*
* Global Data in ql_api.c source file.
*/
extern void *ql_state; /* for soft state routine */
extern uint32_t ql_os_release_level;
@@ -2179,15 +2483,15 @@
uint16_t ql_pci_config_get16(ql_adapter_state_t *, off_t);
uint32_t ql_pci_config_get32(ql_adapter_state_t *, off_t);
void ql_pci_config_put8(ql_adapter_state_t *, off_t, uint8_t);
void ql_pci_config_put16(ql_adapter_state_t *, off_t, uint16_t);
void ql_delay(ql_adapter_state_t *, clock_t);
-void ql_awaken_task_daemon(ql_adapter_state_t *, ql_srb_t *, uint32_t,
- uint32_t);
+void ql_awaken_task_daemon(ql_adapter_state_t *, ql_srb_t *, uint64_t,
+ uint64_t);
int ql_abort_device(ql_adapter_state_t *, ql_tgt_t *, int);
int ql_binary_fw_dump(ql_adapter_state_t *, int);
-void ql_done(ql_link_t *);
+void ql_done(ql_link_t *, boolean_t);
int ql_24xx_flash_id(ql_adapter_state_t *);
int ql_24xx_load_flash(ql_adapter_state_t *, uint8_t *, uint32_t, uint32_t);
int ql_poll_flash(ql_adapter_state_t *, uint32_t, uint8_t);
void ql_flash_disable(ql_adapter_state_t *);
void ql_flash_enable(ql_adapter_state_t *);
@@ -2195,10 +2499,11 @@
void ql_write_flash_byte(ql_adapter_state_t *, uint32_t, uint8_t);
uint8_t ql_read_flash_byte(ql_adapter_state_t *, uint32_t);
int ql_24xx_read_flash(ql_adapter_state_t *, uint32_t, uint32_t *);
int ql_24xx_write_flash(ql_adapter_state_t *, uint32_t, uint32_t);
fc_unsol_buf_t *ql_get_unsolicited_buffer(ql_adapter_state_t *, uint32_t);
+int ql_dump_firmware(ql_adapter_state_t *);
size_t ql_ascii_fw_dump(ql_adapter_state_t *, caddr_t);
void ql_add_link_b(ql_head_t *, ql_link_t *);
void ql_add_link_t(ql_head_t *, ql_link_t *);
void ql_remove_link(ql_head_t *, ql_link_t *);
void ql_next(ql_adapter_state_t *, ql_lun_t *);
@@ -2214,14 +2519,14 @@
int ql_stall_driver(ql_adapter_state_t *, uint32_t);
void ql_restart_driver(ql_adapter_state_t *);
int ql_load_flash(ql_adapter_state_t *, uint8_t *, uint32_t);
int ql_get_dma_mem(ql_adapter_state_t *, dma_mem_t *, uint32_t,
mem_alloc_type_t, mem_alignment_t);
+void ql_free_dma_resource(ql_adapter_state_t *, dma_mem_t *);
int ql_alloc_phys(ql_adapter_state_t *, dma_mem_t *, int);
void ql_free_phys(ql_adapter_state_t *, dma_mem_t *);
void ql_24xx_protect_flash(ql_adapter_state_t *);
-void ql_free_dma_resource(ql_adapter_state_t *, dma_mem_t *);
uint8_t ql_pci_config_get8(ql_adapter_state_t *, off_t);
void ql_pci_config_put32(ql_adapter_state_t *, off_t, uint32_t);
int ql_24xx_unprotect_flash(ql_adapter_state_t *);
char *els_cmd_text(int);
char *mbx_cmd_text(int);
@@ -2230,16 +2535,31 @@
void ql_port_state(ql_adapter_state_t *, uint32_t, uint32_t);
void ql_isp_els_handle_cmd_endian(ql_adapter_state_t *ha, ql_srb_t *srb);
void ql_isp_els_handle_rsp_endian(ql_adapter_state_t *ha, ql_srb_t *srb);
void ql_isp_els_handle_endian(ql_adapter_state_t *ha, uint8_t *ptr,
uint8_t ls_code);
-int ql_el_trace_desc_ctor(ql_adapter_state_t *);
-int ql_el_trace_desc_dtor(ql_adapter_state_t *);
+void ql_el_trace_alloc(ql_adapter_state_t *);
+void ql_el_trace_dealloc(ql_adapter_state_t *);
int ql_nvram_cache_desc_ctor(ql_adapter_state_t *);
int ql_nvram_cache_desc_dtor(ql_adapter_state_t *);
+int ql_plogi_params_desc_ctor(ql_adapter_state_t *);
+int ql_plogi_params_desc_dtor(ql_adapter_state_t *);
int ql_wwn_cmp(ql_adapter_state_t *, la_wwn_t *, la_wwn_t *);
void ql_dev_free(ql_adapter_state_t *, ql_tgt_t *);
+void ql_restart_queues(ql_adapter_state_t *);
+void ql_abort_queues(ql_adapter_state_t *);
+void ql_requeue_pending_cmds(ql_adapter_state_t *, ql_tgt_t *);
+void ql_toggle_loop_state(ql_adapter_state_t *);
+void ql_els_24xx_iocb(ql_adapter_state_t *, ql_request_q_t *, ql_srb_t *,
+ void *);
+int ql_get_cap_ofst(ql_adapter_state_t *, uint8_t);
+void ql_intr_lock(ql_adapter_state_t *);
+void ql_intr_unlock(ql_adapter_state_t *);
+void ql_io_comp(ql_srb_t *sp);
+uint64_t ql_get_lun_addr(ql_tgt_t *, uint16_t);
+int ql_2700_get_flash_dmp_template(ql_adapter_state_t *);
+int ql_2700_get_module_dmp_template(ql_adapter_state_t *);
#ifdef __cplusplus
}
#endif