linux/drivers/scsi/qla4xxx/ql4_nx.c

// SPDX-License-Identifier: GPL-2.0-only
/*
 * QLogic iSCSI HBA Driver
 * Copyright (c)  2003-2013 QLogic Corporation
 */
#include <linux/delay.h>
#include <linux/io.h>
#include <linux/pci.h>
#include <linux/ratelimit.h>
#include "ql4_def.h"
#include "ql4_glbl.h"
#include "ql4_inline.h"

#include <linux/io-64-nonatomic-lo-hi.h>

#define TIMEOUT_100_MS
#define MASK(n)
#define MN_WIN(addr)
#define OCM_WIN(addr)
#define MS_WIN(addr)
#define QLA82XX_PCI_MN_2M
#define QLA82XX_PCI_MS_2M
#define QLA82XX_PCI_OCM0_2M
#define VALID_OCM_ADDR(addr)
#define GET_MEM_OFFS_2M(addr)

/* CRB window related */
#define CRB_BLK(off)
#define CRB_SUBBLK(off)
#define CRB_WINDOW_2M
#define CRB_HI(off)
#define QLA82XX_PCI_CAMQM_2M_END
#define QLA82XX_PCI_CAMQM_2M_BASE
#define CRB_INDIRECT_2M

static inline void __iomem *
qla4_8xxx_pci_base_offsetfset(struct scsi_qla_host *ha, unsigned long off)
{}

static const int MD_MIU_TEST_AGT_RDDATA[] =;
#define MAX_CRB_XFORM
static unsigned long crb_addr_xform[MAX_CRB_XFORM];
static int qla4_8xxx_crb_table_initialized;

#define qla4_8xxx_crb_addr_transform(name)
static void
qla4_82xx_crb_addr_transform_setup(void)
{}

static struct crb_128M_2M_block_map crb_128M_2M_map[64] =;

/*
 * top 12 bits of crb internal address (hub, agent)
 */
static unsigned qla4_82xx_crb_hub_agt[64] =;

/* Device states */
static char *qdev_state[] =;

/*
 * In: 'off' is offset from CRB space in 128M pci map
 * Out: 'off' is 2M pci map addr
 * side effect: lock crb window
 */
static void
qla4_82xx_pci_set_crbwindow_2M(struct scsi_qla_host *ha, ulong *off)
{}

#define CRB_WIN_LOCK_TIMEOUT

/*
 * Context: atomic
 */
static int qla4_82xx_crb_win_lock(struct scsi_qla_host *ha)
{}

void qla4_82xx_crb_win_unlock(struct scsi_qla_host *ha)
{}

void
qla4_82xx_wr_32(struct scsi_qla_host *ha, ulong off, u32 data)
{}

uint32_t qla4_82xx_rd_32(struct scsi_qla_host *ha, ulong off)
{}

/* Minidump related functions */
int qla4_82xx_md_rd_32(struct scsi_qla_host *ha, uint32_t off, uint32_t *data)
{}

int qla4_82xx_md_wr_32(struct scsi_qla_host *ha, uint32_t off, uint32_t data)
{}

#define IDC_LOCK_TIMEOUT

/**
 * qla4_82xx_idc_lock - hw_lock
 * @ha: pointer to adapter structure
 *
 * General purpose lock used to synchronize access to
 * CRB_DEV_STATE, CRB_DEV_REF_COUNT, etc.
 *
 * Context: task, can sleep
 **/
int qla4_82xx_idc_lock(struct scsi_qla_host *ha)
{}

void qla4_82xx_idc_unlock(struct scsi_qla_host *ha)
{}

int
qla4_82xx_pci_get_crb_addr_2M(struct scsi_qla_host *ha, ulong *off)
{}

/*
* check memory access boundary.
* used by test agent. support ddr access only for now
*/
static unsigned long
qla4_82xx_pci_mem_bound_check(struct scsi_qla_host *ha,
		unsigned long long addr, int size)
{}

static int qla4_82xx_pci_set_window_warning_count;

static unsigned long
qla4_82xx_pci_set_window(struct scsi_qla_host *ha, unsigned long long addr)
{}

/* check if address is in the same windows as the previous access */
static int qla4_82xx_pci_is_same_window(struct scsi_qla_host *ha,
		unsigned long long addr)
{}

static int qla4_82xx_pci_mem_read_direct(struct scsi_qla_host *ha,
		u64 off, void *data, int size)
{}

static int
qla4_82xx_pci_mem_write_direct(struct scsi_qla_host *ha, u64 off,
		void *data, int size)
{}

#define MTU_FUDGE_FACTOR

static unsigned long
qla4_82xx_decode_crb_addr(unsigned long addr)
{}

static long rom_max_timeout =;
static long qla4_82xx_rom_lock_timeout =;

/*
 * Context: task, can_sleep
 */
static int
qla4_82xx_rom_lock(struct scsi_qla_host *ha)
{}

static void
qla4_82xx_rom_unlock(struct scsi_qla_host *ha)
{}

static int
qla4_82xx_wait_rom_done(struct scsi_qla_host *ha)
{}

static int
qla4_82xx_do_rom_fast_read(struct scsi_qla_host *ha, int addr, int *valp)
{}

static int
qla4_82xx_rom_fast_read(struct scsi_qla_host *ha, int addr, int *valp)
{}

/*
 * This routine does CRB initialize sequence
 * to put the ISP into operational state
 */
static int
qla4_82xx_pinit_from_rom(struct scsi_qla_host *ha, int verbose)
{}

/**
 * qla4_8xxx_ms_mem_write_128b - Writes data to MS/off-chip memory
 * @ha: Pointer to adapter structure
 * @addr: Flash address to write to
 * @data: Data to be written
 * @count: word_count to be written
 *
 * Return: On success return QLA_SUCCESS
 *         On error return QLA_ERROR
 **/
int qla4_8xxx_ms_mem_write_128b(struct scsi_qla_host *ha, uint64_t addr,
				uint32_t *data, uint32_t count)
{}

static int
qla4_82xx_load_from_flash(struct scsi_qla_host *ha, uint32_t image_start)
{}

static int qla4_82xx_load_fw(struct scsi_qla_host *ha, uint32_t image_start)
{}

int
qla4_82xx_pci_mem_read_2M(struct scsi_qla_host *ha,
		u64 off, void *data, int size)
{}

int
qla4_82xx_pci_mem_write_2M(struct scsi_qla_host *ha,
		u64 off, void *data, int size)
{}

static int qla4_82xx_cmdpeg_ready(struct scsi_qla_host *ha, int pegtune_val)
{}

static int qla4_82xx_rcvpeg_ready(struct scsi_qla_host *ha)
{}

void
qla4_8xxx_set_drv_active(struct scsi_qla_host *ha)
{}

void
qla4_8xxx_clear_drv_active(struct scsi_qla_host *ha)
{}

inline int qla4_8xxx_need_reset(struct scsi_qla_host *ha)
{}

void qla4_8xxx_set_rst_ready(struct scsi_qla_host *ha)
{}

void qla4_8xxx_clear_rst_ready(struct scsi_qla_host *ha)
{}

static inline void
qla4_8xxx_set_qsnt_ready(struct scsi_qla_host *ha)
{}


static int
qla4_82xx_start_firmware(struct scsi_qla_host *ha, uint32_t image_start)
{}

int qla4_82xx_try_start_fw(struct scsi_qla_host *ha)
{}

void qla4_82xx_rom_lock_recovery(struct scsi_qla_host *ha)
{}

static uint32_t ql4_84xx_poll_wait_for_ready(struct scsi_qla_host *ha,
					     uint32_t addr1, uint32_t mask)
{}

static uint32_t ql4_84xx_ipmdio_rd_reg(struct scsi_qla_host *ha, uint32_t addr1,
				uint32_t addr3, uint32_t mask, uint32_t addr,
				uint32_t *data_ptr)
{}


static uint32_t ql4_84xx_poll_wait_ipmdio_bus_idle(struct scsi_qla_host *ha,
						    uint32_t addr1,
						    uint32_t addr2,
						    uint32_t addr3,
						    uint32_t mask)
{}

static int ql4_84xx_ipmdio_wr_reg(struct scsi_qla_host *ha,
				  uint32_t addr1, uint32_t addr3,
				  uint32_t mask, uint32_t addr,
				  uint32_t value)
{}

static void qla4_8xxx_minidump_process_rdcrb(struct scsi_qla_host *ha,
				struct qla8xxx_minidump_entry_hdr *entry_hdr,
				uint32_t **d_ptr)
{}

static int qla4_83xx_check_dma_engine_state(struct scsi_qla_host *ha)
{}

static int qla4_83xx_start_pex_dma(struct scsi_qla_host *ha,
			   struct qla4_83xx_minidump_entry_rdmem_pex_dma *m_hdr)
{}

static int qla4_8xxx_minidump_pex_dma_read(struct scsi_qla_host *ha,
				struct qla8xxx_minidump_entry_hdr *entry_hdr,
				uint32_t **d_ptr)
{}

static int qla4_8xxx_minidump_process_l2tag(struct scsi_qla_host *ha,
				 struct qla8xxx_minidump_entry_hdr *entry_hdr,
				 uint32_t **d_ptr)
{}

static int qla4_8xxx_minidump_process_control(struct scsi_qla_host *ha,
				struct qla8xxx_minidump_entry_hdr *entry_hdr)
{}

static void qla4_8xxx_minidump_process_rdocm(struct scsi_qla_host *ha,
				struct qla8xxx_minidump_entry_hdr *entry_hdr,
				uint32_t **d_ptr)
{}

static void qla4_8xxx_minidump_process_rdmux(struct scsi_qla_host *ha,
				struct qla8xxx_minidump_entry_hdr *entry_hdr,
				uint32_t **d_ptr)
{}

static void qla4_8xxx_minidump_process_l1cache(struct scsi_qla_host *ha,
				struct qla8xxx_minidump_entry_hdr *entry_hdr,
				uint32_t **d_ptr)
{}

static void qla4_8xxx_minidump_process_queue(struct scsi_qla_host *ha,
				struct qla8xxx_minidump_entry_hdr *entry_hdr,
				uint32_t **d_ptr)
{}

#define MD_DIRECT_ROM_WINDOW
#define MD_DIRECT_ROM_READ_BASE

static void qla4_82xx_minidump_process_rdrom(struct scsi_qla_host *ha,
				struct qla8xxx_minidump_entry_hdr *entry_hdr,
				uint32_t **d_ptr)
{}

#define MD_MIU_TEST_AGT_CTRL
#define MD_MIU_TEST_AGT_ADDR_LO
#define MD_MIU_TEST_AGT_ADDR_HI

static int __qla4_8xxx_minidump_process_rdmem(struct scsi_qla_host *ha,
				struct qla8xxx_minidump_entry_hdr *entry_hdr,
				uint32_t **d_ptr)
{}

static int qla4_8xxx_minidump_process_rdmem(struct scsi_qla_host *ha,
				struct qla8xxx_minidump_entry_hdr *entry_hdr,
				uint32_t **d_ptr)
{}

static void qla4_8xxx_mark_entry_skipped(struct scsi_qla_host *ha,
				struct qla8xxx_minidump_entry_hdr *entry_hdr,
				int index)
{}

/* ISP83xx functions to process new minidump entries... */
static uint32_t qla83xx_minidump_process_pollrd(struct scsi_qla_host *ha,
				struct qla8xxx_minidump_entry_hdr *entry_hdr,
				uint32_t **d_ptr)
{}

static uint32_t qla4_84xx_minidump_process_rddfe(struct scsi_qla_host *ha,
				struct qla8xxx_minidump_entry_hdr *entry_hdr,
				uint32_t **d_ptr)
{}

static uint32_t qla4_84xx_minidump_process_rdmdio(struct scsi_qla_host *ha,
				struct qla8xxx_minidump_entry_hdr *entry_hdr,
				uint32_t **d_ptr)
{}

static uint32_t qla4_84xx_minidump_process_pollwr(struct scsi_qla_host *ha,
				struct qla8xxx_minidump_entry_hdr *entry_hdr,
				uint32_t **d_ptr)
{}

static void qla83xx_minidump_process_rdmux2(struct scsi_qla_host *ha,
				struct qla8xxx_minidump_entry_hdr *entry_hdr,
				uint32_t **d_ptr)
{}

static uint32_t qla83xx_minidump_process_pollrdmwr(struct scsi_qla_host *ha,
				struct qla8xxx_minidump_entry_hdr *entry_hdr,
				uint32_t **d_ptr)
{}

static uint32_t qla4_83xx_minidump_process_rdrom(struct scsi_qla_host *ha,
				struct qla8xxx_minidump_entry_hdr *entry_hdr,
				uint32_t **d_ptr)
{}

/**
 * qla4_8xxx_collect_md_data - Retrieve firmware minidump data.
 * @ha: pointer to adapter structure
 **/
static int qla4_8xxx_collect_md_data(struct scsi_qla_host *ha)
{}

/**
 * qla4_8xxx_uevent_emit - Send uevent when the firmware dump is ready.
 * @ha: pointer to adapter structure
 * @code: uevent code to act upon
 **/
static void qla4_8xxx_uevent_emit(struct scsi_qla_host *ha, u32 code)
{}

void qla4_8xxx_get_minidump(struct scsi_qla_host *ha)
{}

/**
 * qla4_8xxx_device_bootstrap - Initialize device, set DEV_READY, start fw
 * @ha: pointer to adapter structure
 *
 * Note: IDC lock must be held upon entry
 **/
int qla4_8xxx_device_bootstrap(struct scsi_qla_host *ha)
{}

/**
 * qla4_82xx_need_reset_handler - Code to start reset sequence
 * @ha: pointer to adapter structure
 *
 * Note: IDC lock must be held upon entry
 **/
static void
qla4_82xx_need_reset_handler(struct scsi_qla_host *ha)
{}

/**
 * qla4_8xxx_need_qsnt_handler - Code to start qsnt
 * @ha: pointer to adapter structure
 **/
void
qla4_8xxx_need_qsnt_handler(struct scsi_qla_host *ha)
{}

static void qla4_82xx_set_idc_ver(struct scsi_qla_host *ha)
{}

static int qla4_83xx_set_idc_ver(struct scsi_qla_host *ha)
{}

int qla4_8xxx_update_idc_reg(struct scsi_qla_host *ha)
{}

/**
 * qla4_8xxx_device_state_handler - Adapter state machine
 * @ha: pointer to host adapter structure.
 *
 * Note: IDC lock must be UNLOCKED upon entry
 **/
int qla4_8xxx_device_state_handler(struct scsi_qla_host *ha)
{}

int qla4_8xxx_load_risc(struct scsi_qla_host *ha)
{}

/*****************************************************************************/
/* Flash Manipulation Routines                                               */
/*****************************************************************************/

#define OPTROM_BURST_SIZE
#define OPTROM_BURST_DWORDS

#define FARX_DATA_FLAG
#define FARX_ACCESS_FLASH_CONF
#define FARX_ACCESS_FLASH_DATA

static inline uint32_t
flash_conf_addr(struct ql82xx_hw_data *hw, uint32_t faddr)
{}

static uint32_t *
qla4_82xx_read_flash_data(struct scsi_qla_host *ha, uint32_t *dwptr,
    uint32_t faddr, uint32_t length)
{}

/*
 * Address and length are byte address
 */
static uint8_t *
qla4_82xx_read_optrom_data(struct scsi_qla_host *ha, uint8_t *buf,
		uint32_t offset, uint32_t length)
{}

static int
qla4_8xxx_find_flt_start(struct scsi_qla_host *ha, uint32_t *start)
{}

static void
qla4_8xxx_get_flt_info(struct scsi_qla_host *ha, uint32_t flt_addr)
{}

static void
qla4_82xx_get_fdt_info(struct scsi_qla_host *ha)
{}

static void
qla4_82xx_get_idc_param(struct scsi_qla_host *ha)
{}

void qla4_82xx_queue_mbox_cmd(struct scsi_qla_host *ha, uint32_t *mbx_cmd,
			      int in_count)
{}

void qla4_82xx_process_mbox_intr(struct scsi_qla_host *ha, int out_count)
{}

int
qla4_8xxx_get_flash_info(struct scsi_qla_host *ha)
{}

/**
 * qla4_8xxx_stop_firmware - stops firmware on specified adapter instance
 * @ha: pointer to host adapter structure.
 *
 * Remarks:
 * For iSCSI, throws away all I/O and AENs into bit bucket, so they will
 * not be available after successful return.  Driver must cleanup potential
 * outstanding I/O's after calling this funcion.
 **/
int
qla4_8xxx_stop_firmware(struct scsi_qla_host *ha)
{}

/**
 * qla4_82xx_isp_reset - Resets ISP and aborts all outstanding commands.
 * @ha: pointer to host adapter structure.
 **/
int
qla4_82xx_isp_reset(struct scsi_qla_host *ha)
{}

/**
 * qla4_8xxx_get_sys_info - get adapter MAC address(es) and serial number
 * @ha: pointer to host adapter structure.
 *
 **/
int qla4_8xxx_get_sys_info(struct scsi_qla_host *ha)
{}

/* Interrupt handling helpers. */

int qla4_8xxx_intr_enable(struct scsi_qla_host *ha)
{}

int qla4_8xxx_intr_disable(struct scsi_qla_host *ha)
{}

void
qla4_82xx_enable_intrs(struct scsi_qla_host *ha)
{}

void
qla4_82xx_disable_intrs(struct scsi_qla_host *ha)
{}

int
qla4_8xxx_enable_msix(struct scsi_qla_host *ha)
{}

int qla4_8xxx_check_init_adapter_retry(struct scsi_qla_host *ha)
{}