#include "qla_def.h"
#include "qla_gbl.h"
#include <linux/delay.h>
#include <linux/slab.h>
#include <linux/vmalloc.h>
#include "qla_devtbl.h"
#ifdef CONFIG_SPARC
#include <asm/prom.h>
#endif
#include "qla_target.h"
static int qla2x00_isp_firmware(scsi_qla_host_t *);
static int qla2x00_setup_chip(scsi_qla_host_t *);
static int qla2x00_fw_ready(scsi_qla_host_t *);
static int qla2x00_configure_hba(scsi_qla_host_t *);
static int qla2x00_configure_loop(scsi_qla_host_t *);
static int qla2x00_configure_local_loop(scsi_qla_host_t *);
static int qla2x00_configure_fabric(scsi_qla_host_t *);
static int qla2x00_find_all_fabric_devs(scsi_qla_host_t *);
static int qla2x00_restart_isp(scsi_qla_host_t *);
static struct qla_chip_state_84xx *qla84xx_get_chip(struct scsi_qla_host *);
static int qla84xx_init_chip(scsi_qla_host_t *);
static int qla25xx_init_queues(struct qla_hw_data *);
static void qla24xx_handle_gpdb_event(scsi_qla_host_t *vha,
struct event_arg *ea);
static void qla24xx_handle_prli_done_event(struct scsi_qla_host *,
struct event_arg *);
static void __qla24xx_handle_gpdb_event(scsi_qla_host_t *, struct event_arg *);
void
qla2x00_sp_timeout(struct timer_list *t)
{ … }
void qla2x00_sp_free(srb_t *sp)
{ … }
void qla2xxx_rel_done_warning(srb_t *sp, int res)
{ … }
void qla2xxx_rel_free_warning(srb_t *sp)
{ … }
unsigned long
qla2x00_get_async_timeout(struct scsi_qla_host *vha)
{ … }
static void qla24xx_abort_iocb_timeout(void *data)
{ … }
static void qla24xx_abort_sp_done(srb_t *sp, int res)
{ … }
int qla24xx_async_abort_cmd(srb_t *cmd_sp, bool wait)
{ … }
void
qla2x00_async_iocb_timeout(void *data)
{ … }
static void qla2x00_async_login_sp_done(srb_t *sp, int res)
{ … }
int
qla2x00_async_login(struct scsi_qla_host *vha, fc_port_t *fcport,
uint16_t *data)
{ … }
static void qla2x00_async_logout_sp_done(srb_t *sp, int res)
{ … }
int
qla2x00_async_logout(struct scsi_qla_host *vha, fc_port_t *fcport)
{ … }
void
qla2x00_async_prlo_done(struct scsi_qla_host *vha, fc_port_t *fcport,
uint16_t *data)
{ … }
static void qla2x00_async_prlo_sp_done(srb_t *sp, int res)
{ … }
int
qla2x00_async_prlo(struct scsi_qla_host *vha, fc_port_t *fcport)
{ … }
static
void qla24xx_handle_adisc_event(scsi_qla_host_t *vha, struct event_arg *ea)
{ … }
static int qla_post_els_plogi_work(struct scsi_qla_host *vha, fc_port_t *fcport)
{ … }
static void qla2x00_async_adisc_sp_done(srb_t *sp, int res)
{ … }
int
qla2x00_async_adisc(struct scsi_qla_host *vha, fc_port_t *fcport,
uint16_t *data)
{ … }
static bool qla2x00_is_reserved_id(scsi_qla_host_t *vha, uint16_t loop_id)
{ … }
static int qla2x00_find_new_loop_id(scsi_qla_host_t *vha, fc_port_t *dev)
{ … }
void qla2x00_clear_loop_id(fc_port_t *fcport)
{ … }
static void qla24xx_handle_gnl_done_event(scsi_qla_host_t *vha,
struct event_arg *ea)
{ … }
static void qla24xx_async_gnl_sp_done(srb_t *sp, int res)
{ … }
int qla24xx_async_gnl(struct scsi_qla_host *vha, fc_port_t *fcport)
{ … }
int qla24xx_post_gnl_work(struct scsi_qla_host *vha, fc_port_t *fcport)
{ … }
static void qla24xx_async_gpdb_sp_done(srb_t *sp, int res)
{ … }
int qla24xx_post_prli_work(struct scsi_qla_host *vha, fc_port_t *fcport)
{ … }
static void qla2x00_async_prli_sp_done(srb_t *sp, int res)
{ … }
int
qla24xx_async_prli(struct scsi_qla_host *vha, fc_port_t *fcport)
{ … }
int qla24xx_post_gpdb_work(struct scsi_qla_host *vha, fc_port_t *fcport, u8 opt)
{ … }
int qla24xx_async_gpdb(struct scsi_qla_host *vha, fc_port_t *fcport, u8 opt)
{ … }
static
void __qla24xx_handle_gpdb_event(scsi_qla_host_t *vha, struct event_arg *ea)
{ … }
static int qla_chk_secure_login(scsi_qla_host_t *vha, fc_port_t *fcport,
struct port_database_24xx *pd)
{ … }
static
void qla24xx_handle_gpdb_event(scsi_qla_host_t *vha, struct event_arg *ea)
{ … }
static void qla_chk_n2n_b4_login(struct scsi_qla_host *vha, fc_port_t *fcport)
{ … }
int qla24xx_fcport_handle_login(struct scsi_qla_host *vha, fc_port_t *fcport)
{ … }
int qla24xx_post_newsess_work(struct scsi_qla_host *vha, port_id_t *id,
u8 *port_name, u8 *node_name, void *pla, u8 fc4_type)
{ … }
static void qla_rscn_gen_tick(scsi_qla_host_t *vha, u32 *ret_rscn_gen)
{ … }
void qla2x00_handle_rscn(scsi_qla_host_t *vha, struct event_arg *ea)
{ … }
void qla24xx_handle_relogin_event(scsi_qla_host_t *vha,
struct event_arg *ea)
{ … }
void qla_handle_els_plogi_done(scsi_qla_host_t *vha,
struct event_arg *ea)
{ … }
void qla_rscn_replay(fc_port_t *fcport)
{ … }
static void
qla2x00_tmf_iocb_timeout(void *data)
{ … }
static void qla_marker_sp_done(srb_t *sp, int res)
{ … }
#define START_SP_W_RETRIES(_sp, _rval, _chip_gen, _login_gen) …
static int
qla26xx_marker(struct tmf_arg *arg)
{ … }
static void qla2x00_tmf_sp_done(srb_t *sp, int res)
{ … }
static int qla_tmf_wait(struct tmf_arg *arg)
{ … }
static int
__qla2x00_async_tm_cmd(struct tmf_arg *arg)
{ … }
static void qla_put_tmf(struct tmf_arg *arg)
{ … }
static
int qla_get_tmf(struct tmf_arg *arg)
{ … }
int
qla2x00_async_tm_cmd(fc_port_t *fcport, uint32_t flags, uint64_t lun,
uint32_t tag)
{ … }
int
qla24xx_async_abort_command(srb_t *sp)
{ … }
static void
qla24xx_handle_prli_done_event(struct scsi_qla_host *vha, struct event_arg *ea)
{ … }
void
qla24xx_handle_plogi_done_event(struct scsi_qla_host *vha, struct event_arg *ea)
{ … }
static int
qla83xx_nic_core_fw_load(scsi_qla_host_t *vha)
{ … }
static void qla_enable_fce_trace(scsi_qla_host_t *vha)
{ … }
static void qla_enable_eft_trace(scsi_qla_host_t *vha)
{ … }
int
qla2x00_initialize_adapter(scsi_qla_host_t *vha)
{ … }
int
qla2100_pci_config(scsi_qla_host_t *vha)
{ … }
int
qla2300_pci_config(scsi_qla_host_t *vha)
{ … }
int
qla24xx_pci_config(scsi_qla_host_t *vha)
{ … }
int
qla25xx_pci_config(scsi_qla_host_t *vha)
{ … }
static int
qla2x00_isp_firmware(scsi_qla_host_t *vha)
{ … }
int
qla2x00_reset_chip(scsi_qla_host_t *vha)
{ … }
static int
qla81xx_reset_mpi(scsi_qla_host_t *vha)
{ … }
static int
qla_chk_risc_recovery(scsi_qla_host_t *vha)
{ … }
static inline int
qla24xx_reset_risc(scsi_qla_host_t *vha)
{ … }
static void
qla25xx_read_risc_sema_reg(scsi_qla_host_t *vha, uint32_t *data)
{ … }
static void
qla25xx_write_risc_sema_reg(scsi_qla_host_t *vha, uint32_t data)
{ … }
static void
qla25xx_manipulate_risc_semaphore(scsi_qla_host_t *vha)
{ … }
int
qla24xx_reset_chip(scsi_qla_host_t *vha)
{ … }
int
qla2x00_chip_diag(scsi_qla_host_t *vha)
{ … }
int
qla24xx_chip_diag(scsi_qla_host_t *vha)
{ … }
static void
qla2x00_alloc_fce_trace(scsi_qla_host_t *vha)
{ … }
static void
qla2x00_alloc_eft_trace(scsi_qla_host_t *vha)
{ … }
void
qla2x00_alloc_fw_dump(scsi_qla_host_t *vha)
{ … }
static int
qla81xx_mpi_sync(scsi_qla_host_t *vha)
{ … }
int
qla2x00_alloc_outstanding_cmds(struct qla_hw_data *ha, struct req_que *req)
{ … }
#define PRINT_FIELD(_field, _flag, _str) …
static void qla2xxx_print_sfp_info(struct scsi_qla_host *vha)
{ … }
int
qla24xx_detect_sfp(scsi_qla_host_t *vha)
{ … }
static void __qla_adjust_iocb_limit(struct qla_qpair *qpair)
{ … }
void qla_init_iocb_limit(scsi_qla_host_t *vha)
{ … }
void qla_adjust_iocb_limit(scsi_qla_host_t *vha)
{ … }
static int
qla2x00_setup_chip(scsi_qla_host_t *vha)
{ … }
void
qla2x00_init_response_q_entries(struct rsp_que *rsp)
{ … }
void
qla2x00_update_fw_options(scsi_qla_host_t *vha)
{ … }
void
qla24xx_update_fw_options(scsi_qla_host_t *vha)
{ … }
void
qla2x00_config_rings(struct scsi_qla_host *vha)
{ … }
void
qla24xx_config_rings(struct scsi_qla_host *vha)
{ … }
int
qla2x00_init_rings(scsi_qla_host_t *vha)
{ … }
static int
qla2x00_fw_ready(scsi_qla_host_t *vha)
{ … }
static int
qla2x00_configure_hba(scsi_qla_host_t *vha)
{ … }
inline void
qla2x00_set_model_info(scsi_qla_host_t *vha, uint8_t *model, size_t len,
const char *def)
{ … }
static void qla2xxx_nvram_wwn_from_ofw(scsi_qla_host_t *vha, nvram_t *nv)
{ … }
int
qla2x00_nvram_config(scsi_qla_host_t *vha)
{ … }
void qla2x00_set_fcport_state(fc_port_t *fcport, int state)
{ … }
fc_port_t *
qla2x00_alloc_fcport(scsi_qla_host_t *vha, gfp_t flags)
{ … }
void
qla2x00_free_fcport(fc_port_t *fcport)
{ … }
static void qla_get_login_template(scsi_qla_host_t *vha)
{ … }
static int
qla2x00_configure_loop(scsi_qla_host_t *vha)
{ … }
static int qla2x00_configure_n2n_loop(scsi_qla_host_t *vha)
{ … }
static void
qla_reinitialize_link(scsi_qla_host_t *vha)
{ … }
static int
qla2x00_configure_local_loop(scsi_qla_host_t *vha)
{ … }
static void
qla2x00_iidma_fcport(scsi_qla_host_t *vha, fc_port_t *fcport)
{ … }
void qla_do_iidma_work(struct scsi_qla_host *vha, fc_port_t *fcport)
{ … }
int qla_post_iidma_work(struct scsi_qla_host *vha, fc_port_t *fcport)
{ … }
static void
qla2x00_reg_remote_port(scsi_qla_host_t *vha, fc_port_t *fcport)
{ … }
void
qla2x00_update_fcport(scsi_qla_host_t *vha, fc_port_t *fcport)
{ … }
void qla_register_fcport_fn(struct work_struct *work)
{ … }
static int
qla2x00_configure_fabric(scsi_qla_host_t *vha)
{ … }
static int
qla2x00_find_all_fabric_devs(scsi_qla_host_t *vha)
{ … }
int
qla2x00_reserve_mgmt_server_loop_id(scsi_qla_host_t *vha)
{ … }
int
qla2x00_fabric_login(scsi_qla_host_t *vha, fc_port_t *fcport,
uint16_t *next_loopid)
{ … }
int
qla2x00_local_device_login(scsi_qla_host_t *vha, fc_port_t *fcport)
{ … }
int
qla2x00_loop_resync(scsi_qla_host_t *vha)
{ … }
int qla2x00_perform_loop_resync(scsi_qla_host_t *ha)
{ … }
void
qla83xx_reset_ownership(scsi_qla_host_t *vha)
{ … }
static int
__qla83xx_set_drv_ack(scsi_qla_host_t *vha)
{ … }
static int
__qla83xx_clear_drv_ack(scsi_qla_host_t *vha)
{ … }
void
qla83xx_idc_audit(scsi_qla_host_t *vha, int audit_type)
{ … }
static int
qla83xx_initiating_reset(scsi_qla_host_t *vha)
{ … }
int
__qla83xx_set_idc_control(scsi_qla_host_t *vha, uint32_t idc_control)
{ … }
int
__qla83xx_get_idc_control(scsi_qla_host_t *vha, uint32_t *idc_control)
{ … }
static int
qla83xx_check_driver_presence(scsi_qla_host_t *vha)
{ … }
int
qla83xx_nic_core_reset(scsi_qla_host_t *vha)
{ … }
int
qla2xxx_mctp_dump(scsi_qla_host_t *vha)
{ … }
void
qla2x00_quiesce_io(scsi_qla_host_t *vha)
{ … }
void
qla2x00_abort_isp_cleanup(scsi_qla_host_t *vha)
{ … }
int
qla2x00_abort_isp(scsi_qla_host_t *vha)
{ … }
static int
qla2x00_restart_isp(scsi_qla_host_t *vha)
{ … }
static int
qla25xx_init_queues(struct qla_hw_data *ha)
{ … }
int
qla2x00_reset_adapter(scsi_qla_host_t *vha)
{ … }
int
qla24xx_reset_adapter(scsi_qla_host_t *vha)
{ … }
static void qla24xx_nvram_wwn_from_ofw(scsi_qla_host_t *vha,
struct nvram_24xx *nv)
{ … }
int
qla24xx_nvram_config(scsi_qla_host_t *vha)
{ … }
static void
qla27xx_print_image(struct scsi_qla_host *vha, char *name,
struct qla27xx_image_status *image_status)
{ … }
static bool
qla28xx_check_aux_image_status_signature(
struct qla27xx_image_status *image_status)
{ … }
static bool
qla27xx_check_image_status_signature(struct qla27xx_image_status *image_status)
{ … }
static ulong
qla27xx_image_status_checksum(struct qla27xx_image_status *image_status)
{ … }
static inline uint
qla28xx_component_bitmask(struct qla27xx_image_status *aux, uint bitmask)
{ … }
static void
qla28xx_component_status(
struct active_regions *active_regions, struct qla27xx_image_status *aux)
{ … }
static int
qla27xx_compare_image_generation(
struct qla27xx_image_status *pri_image_status,
struct qla27xx_image_status *sec_image_status)
{ … }
void
qla28xx_get_aux_images(
struct scsi_qla_host *vha, struct active_regions *active_regions)
{ … }
void
qla27xx_get_active_image(struct scsi_qla_host *vha,
struct active_regions *active_regions)
{ … }
bool qla24xx_risc_firmware_invalid(uint32_t *dword)
{ … }
static int
qla24xx_load_risc_flash(scsi_qla_host_t *vha, uint32_t *srisc_addr,
uint32_t faddr)
{ … }
#define QLA_FW_URL …
int
qla2x00_load_risc(scsi_qla_host_t *vha, uint32_t *srisc_addr)
{ … }
static int
qla24xx_load_risc_blob(scsi_qla_host_t *vha, uint32_t *srisc_addr)
{ … }
int
qla24xx_load_risc(scsi_qla_host_t *vha, uint32_t *srisc_addr)
{ … }
int
qla81xx_load_risc(scsi_qla_host_t *vha, uint32_t *srisc_addr)
{ … }
void
qla2x00_try_to_stop_firmware(scsi_qla_host_t *vha)
{ … }
int
qla24xx_configure_vhba(scsi_qla_host_t *vha)
{ … }
static LIST_HEAD(qla_cs84xx_list);
static DEFINE_MUTEX(qla_cs84xx_mutex);
static struct qla_chip_state_84xx *
qla84xx_get_chip(struct scsi_qla_host *vha)
{ … }
static void
__qla84xx_chip_release(struct kref *kref)
{ … }
void
qla84xx_put_chip(struct scsi_qla_host *vha)
{ … }
static int
qla84xx_init_chip(scsi_qla_host_t *vha)
{ … }
int
qla81xx_nvram_config(scsi_qla_host_t *vha)
{ … }
int
qla82xx_restart_isp(scsi_qla_host_t *vha)
{ … }
static int
qla24xx_get_fcp_prio(scsi_qla_host_t *vha, fc_port_t *fcport)
{ … }
int
qla24xx_update_fcport_fcp_prio(scsi_qla_host_t *vha, fc_port_t *fcport)
{ … }
int
qla24xx_update_all_fcp_prio(scsi_qla_host_t *vha)
{ … }
struct qla_qpair *qla2xxx_create_qpair(struct scsi_qla_host *vha, int qos,
int vp_idx, bool startqp)
{ … }
int qla2xxx_delete_qpair(struct scsi_qla_host *vha, struct qla_qpair *qpair)
{ … }
uint64_t
qla2x00_count_set_bits(uint32_t num)
{ … }
uint64_t
qla2x00_get_num_tgts(scsi_qla_host_t *vha)
{ … }
int qla2xxx_reset_stats(struct Scsi_Host *host, u32 flags)
{ … }
int qla2xxx_start_stats(struct Scsi_Host *host, u32 flags)
{ … }
int qla2xxx_stop_stats(struct Scsi_Host *host, u32 flags)
{ … }
int qla2xxx_get_ini_stats(struct Scsi_Host *host, u32 flags,
void *data, u64 size)
{ … }
int qla2xxx_get_tgt_stats(struct Scsi_Host *host, u32 flags,
struct fc_rport *rport, void *data, u64 size)
{ … }
int qla2xxx_disable_port(struct Scsi_Host *host)
{ … }
int qla2xxx_enable_port(struct Scsi_Host *host)
{ … }