cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

qla_gbl.h (43620B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * QLogic Fibre Channel HBA Driver
      4 * Copyright (c)  2003-2014 QLogic Corporation
      5 */
      6#ifndef __QLA_GBL_H
      7#define	__QLA_GBL_H
      8
      9#include <linux/interrupt.h>
     10
     11/*
     12 * Global Function Prototypes in qla_init.c source file.
     13 */
     14extern int qla2x00_initialize_adapter(scsi_qla_host_t *);
     15extern int qla24xx_post_prli_work(struct scsi_qla_host *vha, fc_port_t *fcport);
     16
     17extern int qla2100_pci_config(struct scsi_qla_host *);
     18extern int qla2300_pci_config(struct scsi_qla_host *);
     19extern int qla24xx_pci_config(scsi_qla_host_t *);
     20extern int qla25xx_pci_config(scsi_qla_host_t *);
     21extern int qla2x00_reset_chip(struct scsi_qla_host *);
     22extern int qla24xx_reset_chip(struct scsi_qla_host *);
     23extern int qla2x00_chip_diag(struct scsi_qla_host *);
     24extern int qla24xx_chip_diag(struct scsi_qla_host *);
     25extern void qla2x00_config_rings(struct scsi_qla_host *);
     26extern void qla24xx_config_rings(struct scsi_qla_host *);
     27extern int qla2x00_reset_adapter(struct scsi_qla_host *);
     28extern int qla24xx_reset_adapter(struct scsi_qla_host *);
     29extern int qla2x00_nvram_config(struct scsi_qla_host *);
     30extern int qla24xx_nvram_config(struct scsi_qla_host *);
     31extern int qla81xx_nvram_config(struct scsi_qla_host *);
     32extern void qla2x00_update_fw_options(struct scsi_qla_host *);
     33extern void qla24xx_update_fw_options(scsi_qla_host_t *);
     34
     35extern int qla2x00_load_risc(struct scsi_qla_host *, uint32_t *);
     36extern int qla24xx_load_risc(scsi_qla_host_t *, uint32_t *);
     37extern int qla81xx_load_risc(scsi_qla_host_t *, uint32_t *);
     38
     39extern int qla2x00_perform_loop_resync(scsi_qla_host_t *);
     40extern int qla2x00_loop_resync(scsi_qla_host_t *);
     41extern void qla2x00_clear_loop_id(fc_port_t *fcport);
     42
     43extern int qla2x00_fabric_login(scsi_qla_host_t *, fc_port_t *, uint16_t *);
     44extern int qla2x00_local_device_login(scsi_qla_host_t *, fc_port_t *);
     45
     46extern int qla24xx_els_dcmd_iocb(scsi_qla_host_t *, int, port_id_t);
     47extern int qla24xx_els_dcmd2_iocb(scsi_qla_host_t *, int, fc_port_t *, bool);
     48extern void qla2x00_els_dcmd2_free(scsi_qla_host_t *vha,
     49				   struct els_plogi *els_plogi);
     50
     51extern void qla2x00_update_fcports(scsi_qla_host_t *);
     52
     53extern int qla2x00_abort_isp(scsi_qla_host_t *);
     54extern void qla2x00_abort_isp_cleanup(scsi_qla_host_t *);
     55extern void qla2x00_quiesce_io(scsi_qla_host_t *);
     56
     57extern void qla2x00_update_fcport(scsi_qla_host_t *, fc_port_t *);
     58void qla_register_fcport_fn(struct work_struct *);
     59extern void qla2x00_alloc_fw_dump(scsi_qla_host_t *);
     60extern void qla2x00_try_to_stop_firmware(scsi_qla_host_t *);
     61
     62extern int qla2x00_get_thermal_temp(scsi_qla_host_t *, uint16_t *);
     63
     64extern void qla84xx_put_chip(struct scsi_qla_host *);
     65
     66extern int qla2x00_async_login(struct scsi_qla_host *, fc_port_t *,
     67    uint16_t *);
     68extern int qla2x00_async_logout(struct scsi_qla_host *, fc_port_t *);
     69extern int qla2x00_async_prlo(struct scsi_qla_host *, fc_port_t *);
     70extern int qla2x00_async_adisc(struct scsi_qla_host *, fc_port_t *,
     71    uint16_t *);
     72extern int qla2x00_async_tm_cmd(fc_port_t *, uint32_t, uint32_t, uint32_t);
     73extern void qla2x00_async_login_done(struct scsi_qla_host *, fc_port_t *,
     74    uint16_t *);
     75struct qla_work_evt *qla2x00_alloc_work(struct scsi_qla_host *,
     76    enum qla_work_type);
     77extern int qla24xx_async_gnl(struct scsi_qla_host *, fc_port_t *);
     78int qla2x00_post_work(struct scsi_qla_host *vha, struct qla_work_evt *e);
     79extern void *qla2x00_alloc_iocbs_ready(struct qla_qpair *, srb_t *);
     80extern int qla24xx_update_fcport_fcp_prio(scsi_qla_host_t *, fc_port_t *);
     81extern int qla24xx_async_abort_cmd(srb_t *, bool);
     82
     83extern void qla2x00_set_fcport_state(fc_port_t *fcport, int state);
     84extern fc_port_t *
     85qla2x00_alloc_fcport(scsi_qla_host_t *, gfp_t );
     86
     87extern int __qla83xx_set_idc_control(scsi_qla_host_t *, uint32_t);
     88extern int __qla83xx_get_idc_control(scsi_qla_host_t *, uint32_t *);
     89extern void qla83xx_idc_audit(scsi_qla_host_t *, int);
     90extern int qla83xx_nic_core_reset(scsi_qla_host_t *);
     91extern void qla83xx_reset_ownership(scsi_qla_host_t *);
     92extern int qla2xxx_mctp_dump(scsi_qla_host_t *);
     93
     94extern int
     95qla2x00_alloc_outstanding_cmds(struct qla_hw_data *, struct req_que *);
     96extern int qla2x00_init_rings(scsi_qla_host_t *);
     97extern struct qla_qpair *qla2xxx_create_qpair(struct scsi_qla_host *,
     98	int, int, bool);
     99extern int qla2xxx_delete_qpair(struct scsi_qla_host *, struct qla_qpair *);
    100void qla2x00_handle_rscn(scsi_qla_host_t *vha, struct event_arg *ea);
    101void qla24xx_handle_plogi_done_event(struct scsi_qla_host *vha,
    102				     struct event_arg *ea);
    103void qla24xx_handle_relogin_event(scsi_qla_host_t *vha,
    104				  struct event_arg *ea);
    105int qla24xx_async_gpdb(struct scsi_qla_host *, fc_port_t *, u8);
    106int qla24xx_async_prli(struct scsi_qla_host *, fc_port_t *);
    107int qla24xx_async_notify_ack(scsi_qla_host_t *, fc_port_t *,
    108	struct imm_ntfy_from_isp *, int);
    109int qla24xx_post_newsess_work(struct scsi_qla_host *, port_id_t *, u8 *, u8*,
    110    void *, u8);
    111int qla24xx_fcport_handle_login(struct scsi_qla_host *, fc_port_t *);
    112int qla24xx_detect_sfp(scsi_qla_host_t *);
    113int qla24xx_post_gpdb_work(struct scsi_qla_host *, fc_port_t *, u8);
    114
    115extern void qla28xx_get_aux_images(struct scsi_qla_host *,
    116    struct active_regions *);
    117extern void qla27xx_get_active_image(struct scsi_qla_host *,
    118    struct active_regions *);
    119
    120void qla2x00_async_prlo_done(struct scsi_qla_host *, fc_port_t *,
    121    uint16_t *);
    122extern int qla2x00_post_async_prlo_work(struct scsi_qla_host *, fc_port_t *,
    123    uint16_t *);
    124extern int qla2x00_post_async_prlo_done_work(struct scsi_qla_host *,
    125    fc_port_t *, uint16_t *);
    126int qla_post_iidma_work(struct scsi_qla_host *vha, fc_port_t *fcport);
    127void qla_do_iidma_work(struct scsi_qla_host *vha, fc_port_t *fcport);
    128int qla2x00_reserve_mgmt_server_loop_id(scsi_qla_host_t *);
    129void qla_rscn_replay(fc_port_t *fcport);
    130void qla24xx_free_purex_item(struct purex_item *item);
    131extern bool qla24xx_risc_firmware_invalid(uint32_t *);
    132void qla_init_iocb_limit(scsi_qla_host_t *);
    133
    134void qla_edif_list_del(fc_port_t *fcport);
    135void qla_edif_sadb_release(struct qla_hw_data *ha);
    136int qla_edif_sadb_build_free_pool(struct qla_hw_data *ha);
    137void qla_edif_sadb_release_free_pool(struct qla_hw_data *ha);
    138void qla_chk_edif_rx_sa_delete_pending(scsi_qla_host_t *vha,
    139		srb_t *sp, struct sts_entry_24xx *sts24);
    140void qlt_chk_edif_rx_sa_delete_pending(scsi_qla_host_t *vha, fc_port_t *fcport,
    141		struct ctio7_from_24xx *ctio);
    142void qla2x00_release_all_sadb(struct scsi_qla_host *vha, struct fc_port *fcport);
    143int qla_edif_process_els(scsi_qla_host_t *vha, struct bsg_job *bsgjob);
    144void qla_edif_sess_down(struct scsi_qla_host *vha, struct fc_port *sess);
    145void qla_edif_clear_appdata(struct scsi_qla_host *vha,
    146			    struct fc_port *fcport);
    147const char *sc_to_str(uint16_t cmd);
    148
    149/*
    150 * Global Data in qla_os.c source file.
    151 */
    152extern char qla2x00_version_str[];
    153
    154extern struct kmem_cache *srb_cachep;
    155extern struct kmem_cache *qla_tgt_plogi_cachep;
    156
    157extern int ql2xlogintimeout;
    158extern int qlport_down_retry;
    159extern int ql2xplogiabsentdevice;
    160extern int ql2xloginretrycount;
    161extern int ql2xfdmienable;
    162extern int ql2xrdpenable;
    163extern int ql2xsmartsan;
    164extern int ql2xallocfwdump;
    165extern int ql2xextended_error_logging;
    166extern int ql2xiidmaenable;
    167extern int ql2xmqsupport;
    168extern int ql2xfwloadbin;
    169extern int ql2xetsenable;
    170extern int ql2xshiftctondsd;
    171extern int ql2xdbwr;
    172extern int ql2xasynctmfenable;
    173extern int ql2xgffidenable;
    174extern int ql2xenabledif;
    175extern int ql2xenablehba_err_chk;
    176extern int ql2xdontresethba;
    177extern uint64_t ql2xmaxlun;
    178extern int ql2xmdcapmask;
    179extern int ql2xmdenable;
    180extern int ql2xexlogins;
    181extern int ql2xexchoffld;
    182extern int ql2xiniexchg;
    183extern int ql2xfwholdabts;
    184extern int ql2xmvasynctoatio;
    185extern int ql2xuctrlirq;
    186extern int ql2xnvmeenable;
    187extern int ql2xautodetectsfp;
    188extern int ql2xenablemsix;
    189extern int qla2xuseresexchforels;
    190extern int ql2xdifbundlinginternalbuffers;
    191extern int ql2xfulldump_on_mpifail;
    192extern int ql2xsecenable;
    193extern int ql2xenforce_iocb_limit;
    194extern int ql2xabts_wait_nvme;
    195extern u32 ql2xnvme_queues;
    196
    197extern int qla2x00_loop_reset(scsi_qla_host_t *);
    198extern void qla2x00_abort_all_cmds(scsi_qla_host_t *, int);
    199extern int qla2x00_post_aen_work(struct scsi_qla_host *, enum
    200    fc_host_event_code, u32);
    201extern int qla2x00_post_idc_ack_work(struct scsi_qla_host *, uint16_t *);
    202extern int qla2x00_post_async_login_work(struct scsi_qla_host *, fc_port_t *,
    203    uint16_t *);
    204extern int qla2x00_post_async_logout_work(struct scsi_qla_host *, fc_port_t *,
    205    uint16_t *);
    206extern int qla2x00_post_async_adisc_work(struct scsi_qla_host *, fc_port_t *,
    207    uint16_t *);
    208extern int qla2x00_post_async_adisc_done_work(struct scsi_qla_host *,
    209    fc_port_t *, uint16_t *);
    210extern int qla2x00_set_exlogins_buffer(struct scsi_qla_host *);
    211extern void qla2x00_free_exlogin_buffer(struct qla_hw_data *);
    212extern int qla2x00_set_exchoffld_buffer(struct scsi_qla_host *);
    213extern void qla2x00_free_exchoffld_buffer(struct qla_hw_data *);
    214
    215extern int qla81xx_restart_mpi_firmware(scsi_qla_host_t *);
    216
    217extern struct scsi_qla_host *qla2x00_create_host(struct scsi_host_template *,
    218	struct qla_hw_data *);
    219extern void qla2x00_free_host(struct scsi_qla_host *);
    220extern void qla2x00_relogin(struct scsi_qla_host *);
    221extern void qla2x00_do_work(struct scsi_qla_host *);
    222extern void qla2x00_free_fcports(struct scsi_qla_host *);
    223extern void qla2x00_free_fcport(fc_port_t *);
    224
    225extern void qla83xx_schedule_work(scsi_qla_host_t *, int);
    226extern void qla83xx_service_idc_aen(struct work_struct *);
    227extern void qla83xx_nic_core_unrecoverable_work(struct work_struct *);
    228extern void qla83xx_idc_state_handler_work(struct work_struct *);
    229extern void qla83xx_nic_core_reset_work(struct work_struct *);
    230
    231extern void qla83xx_idc_lock(scsi_qla_host_t *, uint16_t);
    232extern void qla83xx_idc_unlock(scsi_qla_host_t *, uint16_t);
    233extern int qla83xx_idc_state_handler(scsi_qla_host_t *);
    234extern int qla83xx_set_drv_presence(scsi_qla_host_t *vha);
    235extern int __qla83xx_set_drv_presence(scsi_qla_host_t *vha);
    236extern int qla83xx_clear_drv_presence(scsi_qla_host_t *vha);
    237extern int __qla83xx_clear_drv_presence(scsi_qla_host_t *vha);
    238
    239extern int qla2x00_post_uevent_work(struct scsi_qla_host *, u32);
    240extern void qla2x00_disable_board_on_pci_error(struct work_struct *);
    241extern void qla_eeh_work(struct work_struct *);
    242extern void qla2x00_sp_compl(srb_t *sp, int);
    243extern void qla2xxx_qpair_sp_free_dma(srb_t *sp);
    244extern void qla2xxx_qpair_sp_compl(srb_t *sp, int);
    245extern void qla24xx_sched_upd_fcport(fc_port_t *);
    246void qla2x00_handle_login_done_event(struct scsi_qla_host *, fc_port_t *,
    247	uint16_t *);
    248int qla24xx_post_gnl_work(struct scsi_qla_host *, fc_port_t *);
    249int qla24xx_post_relogin_work(struct scsi_qla_host *vha);
    250void qla2x00_wait_for_sess_deletion(scsi_qla_host_t *);
    251void qla24xx_process_purex_rdp(struct scsi_qla_host *vha,
    252			       struct purex_item *pkt);
    253void qla_pci_set_eeh_busy(struct scsi_qla_host *);
    254void qla_schedule_eeh_work(struct scsi_qla_host *);
    255struct edif_sa_ctl *qla_edif_find_sa_ctl_by_index(fc_port_t *fcport,
    256						  int index, int dir);
    257
    258/*
    259 * Global Functions in qla_mid.c source file.
    260 */
    261extern struct scsi_host_template qla2xxx_driver_template;
    262extern struct scsi_transport_template *qla2xxx_transport_vport_template;
    263extern void qla2x00_timer(struct timer_list *);
    264extern void qla2x00_start_timer(scsi_qla_host_t *, unsigned long);
    265extern void qla24xx_deallocate_vp_id(scsi_qla_host_t *);
    266extern int qla24xx_disable_vp (scsi_qla_host_t *);
    267extern int qla24xx_enable_vp (scsi_qla_host_t *);
    268extern int qla24xx_control_vp(scsi_qla_host_t *, int );
    269extern int qla24xx_modify_vp_config(scsi_qla_host_t *);
    270extern int qla2x00_send_change_request(scsi_qla_host_t *, uint16_t, uint16_t);
    271extern void qla2x00_vp_stop_timer(scsi_qla_host_t *);
    272extern int qla24xx_configure_vhba (scsi_qla_host_t *);
    273extern void qla24xx_report_id_acquisition(scsi_qla_host_t *,
    274    struct vp_rpt_id_entry_24xx *);
    275extern void qla2x00_do_dpc_all_vps(scsi_qla_host_t *);
    276extern int qla24xx_vport_create_req_sanity_check(struct fc_vport *);
    277extern scsi_qla_host_t *qla24xx_create_vhost(struct fc_vport *);
    278
    279extern void qla2x00_sp_free_dma(srb_t *sp);
    280extern char *qla2x00_get_fw_version_str(struct scsi_qla_host *, char *);
    281
    282extern void qla2x00_mark_device_lost(scsi_qla_host_t *, fc_port_t *, int);
    283extern void qla2x00_mark_all_devices_lost(scsi_qla_host_t *);
    284extern int qla24xx_async_abort_cmd(srb_t *, bool);
    285
    286extern struct fw_blob *qla2x00_request_firmware(scsi_qla_host_t *);
    287
    288extern int qla2x00_wait_for_hba_online(scsi_qla_host_t *);
    289extern int qla2x00_wait_for_chip_reset(scsi_qla_host_t *);
    290extern int qla2x00_wait_for_fcoe_ctx_reset(scsi_qla_host_t *);
    291
    292extern void qla2xxx_wake_dpc(struct scsi_qla_host *);
    293extern void qla2x00_alert_all_vps(struct rsp_que *, uint16_t *);
    294extern void qla2x00_async_event(scsi_qla_host_t *, struct rsp_que *,
    295	uint16_t *);
    296extern int  qla2x00_vp_abort_isp(scsi_qla_host_t *);
    297
    298/*
    299 * Global Function Prototypes in qla_iocb.c source file.
    300 */
    301void qla_els_pt_iocb(struct scsi_qla_host *vha,
    302	struct els_entry_24xx *pkt, struct qla_els_pt_arg *a);
    303cont_a64_entry_t *qla2x00_prep_cont_type1_iocb(scsi_qla_host_t *vha,
    304		struct req_que *que);
    305extern uint16_t qla2x00_calc_iocbs_32(uint16_t);
    306extern uint16_t qla2x00_calc_iocbs_64(uint16_t);
    307extern void qla2x00_build_scsi_iocbs_32(srb_t *, cmd_entry_t *, uint16_t);
    308extern void qla2x00_build_scsi_iocbs_64(srb_t *, cmd_entry_t *, uint16_t);
    309extern void qla24xx_build_scsi_iocbs(srb_t *, struct cmd_type_7 *,
    310	uint16_t, struct req_que *);
    311extern uint32_t qla2xxx_get_next_handle(struct req_que *req);
    312extern int qla2x00_start_scsi(srb_t *sp);
    313extern int qla24xx_start_scsi(srb_t *sp);
    314int qla2x00_marker(struct scsi_qla_host *, struct qla_qpair *,
    315    uint16_t, uint64_t, uint8_t);
    316extern int qla2x00_start_sp(srb_t *);
    317extern int qla24xx_dif_start_scsi(srb_t *);
    318extern int qla2x00_start_bidir(srb_t *, struct scsi_qla_host *, uint32_t);
    319extern int qla2xxx_dif_start_scsi_mq(srb_t *);
    320extern void qla2x00_init_async_sp(srb_t *sp, unsigned long tmo,
    321				  void (*done)(struct srb *, int));
    322extern unsigned long qla2x00_get_async_timeout(struct scsi_qla_host *);
    323
    324extern void *qla2x00_alloc_iocbs(struct scsi_qla_host *, srb_t *);
    325extern void *__qla2x00_alloc_iocbs(struct qla_qpair *, srb_t *);
    326extern int qla2x00_issue_marker(scsi_qla_host_t *, int);
    327extern int qla24xx_walk_and_build_sglist_no_difb(struct qla_hw_data *, srb_t *,
    328	struct dsd64 *, uint16_t, struct qla_tc_param *);
    329extern int qla24xx_walk_and_build_sglist(struct qla_hw_data *, srb_t *,
    330	struct dsd64 *, uint16_t, struct qla_tc_param *);
    331extern int qla24xx_walk_and_build_prot_sglist(struct qla_hw_data *, srb_t *,
    332	struct dsd64 *, uint16_t, struct qla_tgt_cmd *);
    333extern int qla24xx_get_one_block_sg(uint32_t, struct qla2_sgx *, uint32_t *);
    334extern int qla24xx_configure_prot_mode(srb_t *, uint16_t *);
    335extern int qla24xx_issue_sa_replace_iocb(scsi_qla_host_t *vha,
    336	struct qla_work_evt *e);
    337void qla2x00_sp_release(struct kref *kref);
    338
    339/*
    340 * Global Function Prototypes in qla_mbx.c source file.
    341 */
    342extern int
    343qla2x00_load_ram(scsi_qla_host_t *, dma_addr_t, uint32_t, uint32_t);
    344
    345extern int
    346qla2x00_dump_ram(scsi_qla_host_t *, dma_addr_t, uint32_t, uint32_t);
    347
    348extern int
    349qla2x00_execute_fw(scsi_qla_host_t *, uint32_t);
    350
    351extern int
    352qla2x00_get_fw_version(scsi_qla_host_t *);
    353
    354extern int
    355qla2x00_get_fw_options(scsi_qla_host_t *, uint16_t *);
    356
    357extern int
    358qla2x00_set_fw_options(scsi_qla_host_t *, uint16_t *);
    359
    360extern int
    361qla2x00_mbx_reg_test(scsi_qla_host_t *);
    362
    363extern int
    364qla2x00_verify_checksum(scsi_qla_host_t *, uint32_t);
    365
    366extern int
    367qla2x00_issue_iocb(scsi_qla_host_t *, void *, dma_addr_t, size_t);
    368
    369extern int
    370qla2x00_abort_command(srb_t *);
    371
    372extern int
    373qla2x00_abort_target(struct fc_port *, uint64_t, int);
    374
    375extern int
    376qla2x00_lun_reset(struct fc_port *, uint64_t, int);
    377
    378extern int
    379qla2x00_get_adapter_id(scsi_qla_host_t *, uint16_t *, uint8_t *, uint8_t *,
    380    uint8_t *, uint16_t *, uint16_t *);
    381
    382extern int
    383qla2x00_get_retry_cnt(scsi_qla_host_t *, uint8_t *, uint8_t *, uint16_t *);
    384
    385extern int
    386qla2x00_init_firmware(scsi_qla_host_t *, uint16_t);
    387
    388extern int
    389qla2x00_get_port_database(scsi_qla_host_t *, fc_port_t *, uint8_t);
    390
    391extern int
    392qla24xx_get_port_database(scsi_qla_host_t *, u16, struct port_database_24xx *);
    393
    394extern int
    395qla2x00_get_firmware_state(scsi_qla_host_t *, uint16_t *);
    396
    397extern int
    398qla2x00_get_port_name(scsi_qla_host_t *, uint16_t, uint8_t *, uint8_t);
    399
    400extern int
    401qla24xx_link_initialize(scsi_qla_host_t *);
    402
    403extern int
    404qla2x00_lip_reset(scsi_qla_host_t *);
    405
    406extern int
    407qla2x00_send_sns(scsi_qla_host_t *, dma_addr_t, uint16_t, size_t);
    408
    409extern int
    410qla2x00_login_fabric(scsi_qla_host_t *, uint16_t, uint8_t, uint8_t, uint8_t,
    411    uint16_t *, uint8_t);
    412extern int
    413qla24xx_login_fabric(scsi_qla_host_t *, uint16_t, uint8_t, uint8_t, uint8_t,
    414    uint16_t *, uint8_t);
    415
    416extern int
    417qla2x00_login_local_device(scsi_qla_host_t *, fc_port_t *, uint16_t *,
    418    uint8_t);
    419
    420extern int
    421qla2x00_fabric_logout(scsi_qla_host_t *, uint16_t, uint8_t, uint8_t, uint8_t);
    422
    423extern int
    424qla24xx_fabric_logout(scsi_qla_host_t *, uint16_t, uint8_t, uint8_t, uint8_t);
    425
    426extern int
    427qla2x00_full_login_lip(scsi_qla_host_t *ha);
    428
    429extern int
    430qla2x00_get_id_list(scsi_qla_host_t *, void *, dma_addr_t, uint16_t *);
    431
    432extern int
    433qla2x00_get_resource_cnts(scsi_qla_host_t *);
    434
    435extern int
    436qla2x00_get_fcal_position_map(scsi_qla_host_t *ha, char *pos_map);
    437
    438extern int
    439qla2x00_get_link_status(scsi_qla_host_t *, uint16_t, struct link_statistics *,
    440    dma_addr_t);
    441
    442extern int
    443qla24xx_get_isp_stats(scsi_qla_host_t *, struct link_statistics *,
    444    dma_addr_t, uint16_t);
    445
    446extern int qla24xx_abort_command(srb_t *);
    447extern int qla24xx_async_abort_command(srb_t *);
    448extern int
    449qla24xx_abort_target(struct fc_port *, uint64_t, int);
    450extern int
    451qla24xx_lun_reset(struct fc_port *, uint64_t, int);
    452extern int
    453qla2x00_eh_wait_for_pending_commands(scsi_qla_host_t *, unsigned int,
    454	uint64_t, enum nexus_wait_type);
    455extern int
    456qla2x00_system_error(scsi_qla_host_t *);
    457
    458extern int
    459qla2x00_write_serdes_word(scsi_qla_host_t *, uint16_t, uint16_t);
    460extern int
    461qla2x00_read_serdes_word(scsi_qla_host_t *, uint16_t, uint16_t *);
    462
    463extern int
    464qla8044_write_serdes_word(scsi_qla_host_t *, uint32_t, uint32_t);
    465extern int
    466qla8044_read_serdes_word(scsi_qla_host_t *, uint32_t, uint32_t *);
    467
    468extern int
    469qla2x00_set_serdes_params(scsi_qla_host_t *, uint16_t, uint16_t, uint16_t);
    470
    471extern int
    472qla2x00_stop_firmware(scsi_qla_host_t *);
    473
    474extern int
    475qla2x00_enable_eft_trace(scsi_qla_host_t *, dma_addr_t, uint16_t);
    476extern int
    477qla2x00_disable_eft_trace(scsi_qla_host_t *);
    478
    479extern int
    480qla2x00_enable_fce_trace(scsi_qla_host_t *, dma_addr_t, uint16_t , uint16_t *,
    481    uint32_t *);
    482
    483extern int
    484qla2x00_disable_fce_trace(scsi_qla_host_t *, uint64_t *, uint64_t *);
    485
    486extern int
    487qla82xx_set_driver_version(scsi_qla_host_t *, char *);
    488
    489extern int
    490qla25xx_set_driver_version(scsi_qla_host_t *, char *);
    491
    492extern int
    493qla25xx_set_els_cmds_supported(scsi_qla_host_t *);
    494
    495extern int
    496qla24xx_get_buffer_credits(scsi_qla_host_t *, struct buffer_credit_24xx *,
    497	dma_addr_t);
    498
    499extern int
    500qla2x00_read_sfp(scsi_qla_host_t *, dma_addr_t, uint8_t *,
    501	uint16_t, uint16_t, uint16_t, uint16_t);
    502
    503extern int
    504qla2x00_write_sfp(scsi_qla_host_t *, dma_addr_t, uint8_t *,
    505	uint16_t, uint16_t, uint16_t, uint16_t);
    506
    507extern int
    508qla2x00_set_idma_speed(scsi_qla_host_t *, uint16_t, uint16_t, uint16_t *);
    509
    510extern int qla84xx_verify_chip(struct scsi_qla_host *, uint16_t *);
    511
    512extern int qla81xx_idc_ack(scsi_qla_host_t *, uint16_t *);
    513
    514extern int
    515qla81xx_fac_get_sector_size(scsi_qla_host_t *, uint32_t *);
    516
    517extern int
    518qla81xx_fac_do_write_enable(scsi_qla_host_t *, int);
    519
    520extern int
    521qla81xx_fac_erase_sector(scsi_qla_host_t *, uint32_t, uint32_t);
    522
    523extern int qla81xx_fac_semaphore_access(scsi_qla_host_t *, int);
    524
    525extern int
    526qla2x00_get_xgmac_stats(scsi_qla_host_t *, dma_addr_t, uint16_t, uint16_t *);
    527
    528extern int
    529qla2x00_get_dcbx_params(scsi_qla_host_t *, dma_addr_t, uint16_t);
    530
    531extern int
    532qla2x00_read_ram_word(scsi_qla_host_t *, uint32_t, uint32_t *);
    533
    534extern int
    535qla2x00_write_ram_word(scsi_qla_host_t *, uint32_t, uint32_t);
    536
    537extern int
    538qla81xx_write_mpi_register(scsi_qla_host_t *, uint16_t *);
    539extern int qla2x00_get_data_rate(scsi_qla_host_t *);
    540extern int qla24xx_set_fcp_prio(scsi_qla_host_t *, uint16_t, uint16_t,
    541	uint16_t *);
    542extern int
    543qla81xx_get_port_config(scsi_qla_host_t *, uint16_t *);
    544
    545extern int
    546qla81xx_set_port_config(scsi_qla_host_t *, uint16_t *);
    547
    548extern int
    549qla2x00_port_logout(scsi_qla_host_t *, struct fc_port *);
    550
    551extern int
    552qla2x00_dump_mctp_data(scsi_qla_host_t *, dma_addr_t, uint32_t, uint32_t);
    553
    554extern int
    555qla26xx_dport_diagnostics(scsi_qla_host_t *, void *, uint, uint);
    556
    557int qla24xx_send_mb_cmd(struct scsi_qla_host *, mbx_cmd_t *);
    558int qla24xx_gpdb_wait(struct scsi_qla_host *, fc_port_t *, u8);
    559int qla24xx_gidlist_wait(struct scsi_qla_host *, void *, dma_addr_t,
    560    uint16_t *);
    561int __qla24xx_parse_gpdb(struct scsi_qla_host *, fc_port_t *,
    562	struct port_database_24xx *);
    563int qla24xx_get_port_login_templ(scsi_qla_host_t *, dma_addr_t,
    564				 void *, uint16_t);
    565
    566extern int qla27xx_get_zio_threshold(scsi_qla_host_t *, uint16_t *);
    567extern int qla27xx_set_zio_threshold(scsi_qla_host_t *, uint16_t);
    568int qla24xx_res_count_wait(struct scsi_qla_host *, uint16_t *, int);
    569
    570extern int qla28xx_secure_flash_update(scsi_qla_host_t *, uint16_t, uint16_t,
    571    uint32_t, dma_addr_t, uint32_t);
    572
    573extern int qla2xxx_read_remote_register(scsi_qla_host_t *, uint32_t,
    574    uint32_t *);
    575extern int qla2xxx_write_remote_register(scsi_qla_host_t *, uint32_t,
    576    uint32_t);
    577void qla_no_op_mb(struct scsi_qla_host *vha);
    578
    579/*
    580 * Global Function Prototypes in qla_isr.c source file.
    581 */
    582extern irqreturn_t qla2100_intr_handler(int, void *);
    583extern irqreturn_t qla2300_intr_handler(int, void *);
    584extern irqreturn_t qla24xx_intr_handler(int, void *);
    585extern void qla2x00_process_response_queue(struct rsp_que *);
    586extern void
    587qla24xx_process_response_queue(struct scsi_qla_host *, struct rsp_que *);
    588extern int qla2x00_request_irqs(struct qla_hw_data *, struct rsp_que *);
    589extern void qla2x00_free_irqs(scsi_qla_host_t *);
    590
    591extern int qla2x00_get_data_rate(scsi_qla_host_t *);
    592extern const char *qla2x00_get_link_speed_str(struct qla_hw_data *, uint16_t);
    593extern srb_t *
    594qla2x00_get_sp_from_handle(scsi_qla_host_t *, const char *, struct req_que *,
    595	void *);
    596extern void
    597qla2x00_process_completed_request(struct scsi_qla_host *, struct req_que *,
    598	uint32_t);
    599extern irqreturn_t
    600qla2xxx_msix_rsp_q(int irq, void *dev_id);
    601extern irqreturn_t
    602qla2xxx_msix_rsp_q_hs(int irq, void *dev_id);
    603fc_port_t *qla2x00_find_fcport_by_loopid(scsi_qla_host_t *, uint16_t);
    604fc_port_t *qla2x00_find_fcport_by_wwpn(scsi_qla_host_t *, u8 *, u8);
    605fc_port_t *qla2x00_find_fcport_by_nportid(scsi_qla_host_t *, port_id_t *, u8);
    606void __qla_consume_iocb(struct scsi_qla_host *vha, void **pkt, struct rsp_que **rsp);
    607
    608/*
    609 * Global Function Prototypes in qla_sup.c source file.
    610 */
    611extern void qla2x00_release_nvram_protection(scsi_qla_host_t *);
    612extern int qla24xx_read_flash_data(scsi_qla_host_t *, uint32_t *,
    613    uint32_t, uint32_t);
    614extern uint8_t *qla2x00_read_nvram_data(scsi_qla_host_t *, void *, uint32_t,
    615    uint32_t);
    616extern uint8_t *qla24xx_read_nvram_data(scsi_qla_host_t *, void *, uint32_t,
    617    uint32_t);
    618extern int qla2x00_write_nvram_data(scsi_qla_host_t *, void *, uint32_t,
    619    uint32_t);
    620extern int qla24xx_write_nvram_data(scsi_qla_host_t *, void *, uint32_t,
    621    uint32_t);
    622extern uint8_t *qla25xx_read_nvram_data(scsi_qla_host_t *, void *, uint32_t,
    623    uint32_t);
    624extern int qla25xx_write_nvram_data(scsi_qla_host_t *, void *, uint32_t,
    625    uint32_t);
    626
    627extern int qla2x00_is_a_vp_did(scsi_qla_host_t *, uint32_t);
    628bool qla2x00_check_reg32_for_disconnect(scsi_qla_host_t *, uint32_t);
    629bool qla2x00_check_reg16_for_disconnect(scsi_qla_host_t *, uint16_t);
    630
    631extern int qla2x00_beacon_on(struct scsi_qla_host *);
    632extern int qla2x00_beacon_off(struct scsi_qla_host *);
    633extern void qla2x00_beacon_blink(struct scsi_qla_host *);
    634extern int qla24xx_beacon_on(struct scsi_qla_host *);
    635extern int qla24xx_beacon_off(struct scsi_qla_host *);
    636extern void qla24xx_beacon_blink(struct scsi_qla_host *);
    637extern void qla83xx_beacon_blink(struct scsi_qla_host *);
    638extern int qla82xx_beacon_on(struct scsi_qla_host *);
    639extern int qla82xx_beacon_off(struct scsi_qla_host *);
    640extern int qla83xx_wr_reg(scsi_qla_host_t *, uint32_t, uint32_t);
    641extern int qla83xx_rd_reg(scsi_qla_host_t *, uint32_t, uint32_t *);
    642extern int qla83xx_restart_nic_firmware(scsi_qla_host_t *);
    643extern int qla83xx_access_control(scsi_qla_host_t *, uint16_t, uint32_t,
    644				  uint32_t, uint16_t *);
    645
    646extern void *qla2x00_read_optrom_data(struct scsi_qla_host *, void *,
    647					 uint32_t, uint32_t);
    648extern int qla2x00_write_optrom_data(struct scsi_qla_host *, void *,
    649				     uint32_t, uint32_t);
    650extern void *qla24xx_read_optrom_data(struct scsi_qla_host *, void *,
    651					 uint32_t, uint32_t);
    652extern int qla24xx_write_optrom_data(struct scsi_qla_host *, void *,
    653				     uint32_t, uint32_t);
    654extern void *qla25xx_read_optrom_data(struct scsi_qla_host *, void *,
    655					 uint32_t, uint32_t);
    656extern void *qla8044_read_optrom_data(struct scsi_qla_host *,
    657					 void *, uint32_t, uint32_t);
    658extern void qla8044_watchdog(struct scsi_qla_host *vha);
    659
    660extern int qla2x00_get_flash_version(scsi_qla_host_t *, void *);
    661extern int qla24xx_get_flash_version(scsi_qla_host_t *, void *);
    662extern int qla82xx_get_flash_version(scsi_qla_host_t *, void *);
    663
    664extern int qla2xxx_get_flash_info(scsi_qla_host_t *);
    665extern int qla2xxx_get_vpd_field(scsi_qla_host_t *, char *, char *, size_t);
    666
    667extern void qla2xxx_flash_npiv_conf(scsi_qla_host_t *);
    668extern int qla24xx_read_fcp_prio_cfg(scsi_qla_host_t *);
    669extern int qla2x00_mailbox_passthru(struct bsg_job *bsg_job);
    670int __qla_copy_purex_to_buffer(struct scsi_qla_host *vha, void **pkt,
    671	struct rsp_que **rsp, u8 *buf, u32 buf_len);
    672
    673int qla_mailbox_passthru(scsi_qla_host_t *vha, uint16_t *mbx_in,
    674			 uint16_t *mbx_out);
    675
    676/*
    677 * Global Function Prototypes in qla_dbg.c source file.
    678 */
    679void qla2xxx_dump_fw(scsi_qla_host_t *vha);
    680void qla2100_fw_dump(scsi_qla_host_t *vha);
    681void qla2300_fw_dump(scsi_qla_host_t *vha);
    682void qla24xx_fw_dump(scsi_qla_host_t *vha);
    683void qla25xx_fw_dump(scsi_qla_host_t *vha);
    684void qla81xx_fw_dump(scsi_qla_host_t *vha);
    685void qla82xx_fw_dump(scsi_qla_host_t *vha);
    686void qla8044_fw_dump(scsi_qla_host_t *vha);
    687
    688void qla27xx_fwdump(scsi_qla_host_t *vha);
    689extern void qla27xx_mpi_fwdump(scsi_qla_host_t *, int);
    690extern ulong qla27xx_fwdt_calculate_dump_size(struct scsi_qla_host *, void *);
    691extern int qla27xx_fwdt_template_valid(void *);
    692extern ulong qla27xx_fwdt_template_size(void *);
    693
    694extern void qla2xxx_dump_post_process(scsi_qla_host_t *, int);
    695extern void ql_dump_regs(uint, scsi_qla_host_t *, uint);
    696extern void ql_dump_buffer(uint, scsi_qla_host_t *, uint, const void *, uint);
    697/*
    698 * Global Function Prototypes in qla_gs.c source file.
    699 */
    700extern void *qla2x00_prep_ms_iocb(scsi_qla_host_t *, struct ct_arg *);
    701extern void *qla24xx_prep_ms_iocb(scsi_qla_host_t *, struct ct_arg *);
    702extern int qla2x00_ga_nxt(scsi_qla_host_t *, fc_port_t *);
    703extern int qla2x00_gid_pt(scsi_qla_host_t *, sw_info_t *);
    704extern int qla2x00_gpn_id(scsi_qla_host_t *, sw_info_t *);
    705extern int qla2x00_gnn_id(scsi_qla_host_t *, sw_info_t *);
    706extern void qla2x00_gff_id(scsi_qla_host_t *, sw_info_t *);
    707extern int qla2x00_rft_id(scsi_qla_host_t *);
    708extern int qla2x00_rff_id(scsi_qla_host_t *, u8);
    709extern int qla2x00_rnn_id(scsi_qla_host_t *);
    710extern int qla2x00_rsnn_nn(scsi_qla_host_t *);
    711extern void *qla2x00_prep_ms_fdmi_iocb(scsi_qla_host_t *, uint32_t, uint32_t);
    712extern void *qla24xx_prep_ms_fdmi_iocb(scsi_qla_host_t *, uint32_t, uint32_t);
    713extern int qla2x00_fdmi_register(scsi_qla_host_t *);
    714extern int qla2x00_gfpn_id(scsi_qla_host_t *, sw_info_t *);
    715extern int qla2x00_gpsc(scsi_qla_host_t *, sw_info_t *);
    716extern size_t qla2x00_get_sym_node_name(scsi_qla_host_t *, uint8_t *, size_t);
    717extern int qla2x00_chk_ms_status(scsi_qla_host_t *, ms_iocb_entry_t *,
    718	struct ct_sns_rsp *, const char *);
    719extern void qla2x00_async_iocb_timeout(void *data);
    720
    721extern int qla24xx_post_gpnid_work(struct scsi_qla_host *, port_id_t *);
    722extern int qla24xx_async_gpnid(scsi_qla_host_t *, port_id_t *);
    723void qla24xx_handle_gpnid_event(scsi_qla_host_t *, struct event_arg *);
    724
    725int qla24xx_post_gpsc_work(struct scsi_qla_host *, fc_port_t *);
    726int qla24xx_async_gpsc(scsi_qla_host_t *, fc_port_t *);
    727void qla24xx_handle_gpsc_event(scsi_qla_host_t *, struct event_arg *);
    728int qla2x00_mgmt_svr_login(scsi_qla_host_t *);
    729void qla24xx_handle_gffid_event(scsi_qla_host_t *vha, struct event_arg *ea);
    730int qla24xx_async_gffid(scsi_qla_host_t *vha, fc_port_t *fcport);
    731int qla24xx_async_gpnft(scsi_qla_host_t *, u8, srb_t *);
    732void qla24xx_async_gpnft_done(scsi_qla_host_t *, srb_t *);
    733void qla24xx_async_gnnft_done(scsi_qla_host_t *, srb_t *);
    734int qla24xx_async_gnnid(scsi_qla_host_t *, fc_port_t *);
    735void qla24xx_handle_gnnid_event(scsi_qla_host_t *, struct event_arg *);
    736int qla24xx_post_gnnid_work(struct scsi_qla_host *, fc_port_t *);
    737int qla24xx_post_gfpnid_work(struct scsi_qla_host *, fc_port_t *);
    738int qla24xx_async_gfpnid(scsi_qla_host_t *, fc_port_t *);
    739void qla24xx_handle_gfpnid_event(scsi_qla_host_t *, struct event_arg *);
    740void qla24xx_sp_unmap(scsi_qla_host_t *, srb_t *);
    741void qla_scan_work_fn(struct work_struct *);
    742uint qla25xx_fdmi_port_speed_capability(struct qla_hw_data *);
    743uint qla25xx_fdmi_port_speed_currently(struct qla_hw_data *);
    744
    745/*
    746 * Global Function Prototypes in qla_attr.c source file.
    747 */
    748struct device_attribute;
    749extern const struct attribute_group *qla2x00_host_groups[];
    750struct fc_function_template;
    751extern struct fc_function_template qla2xxx_transport_functions;
    752extern struct fc_function_template qla2xxx_transport_vport_functions;
    753extern void qla2x00_alloc_sysfs_attr(scsi_qla_host_t *);
    754extern void qla2x00_free_sysfs_attr(scsi_qla_host_t *, bool);
    755extern void qla2x00_init_host_attr(scsi_qla_host_t *);
    756extern void qla2x00_alloc_sysfs_attr(scsi_qla_host_t *);
    757extern int qla2x00_loopback_test(scsi_qla_host_t *, struct msg_echo_lb *, uint16_t *);
    758extern int qla2x00_echo_test(scsi_qla_host_t *,
    759	struct msg_echo_lb *, uint16_t *);
    760extern int qla24xx_update_all_fcp_prio(scsi_qla_host_t *);
    761extern int qla24xx_fcp_prio_cfg_valid(scsi_qla_host_t *,
    762	struct qla_fcp_prio_cfg *, uint8_t);
    763/*
    764 * Global Function Prototypes in qla_dfs.c source file.
    765 */
    766extern int qla2x00_dfs_setup(scsi_qla_host_t *);
    767extern int qla2x00_dfs_remove(scsi_qla_host_t *);
    768
    769/* Globa function prototypes for multi-q */
    770extern int qla25xx_request_irq(struct qla_hw_data *, struct qla_qpair *,
    771	struct qla_msix_entry *, int);
    772extern int qla25xx_init_req_que(struct scsi_qla_host *, struct req_que *);
    773extern int qla25xx_init_rsp_que(struct scsi_qla_host *, struct rsp_que *);
    774extern int qla25xx_create_req_que(struct qla_hw_data *, uint16_t, uint8_t,
    775	uint16_t, int, uint8_t, bool);
    776extern int qla25xx_create_rsp_que(struct qla_hw_data *, uint16_t, uint8_t,
    777	uint16_t, struct qla_qpair *, bool);
    778
    779extern void qla2x00_init_response_q_entries(struct rsp_que *);
    780extern int qla25xx_delete_req_que(struct scsi_qla_host *, struct req_que *);
    781extern int qla25xx_delete_rsp_que(struct scsi_qla_host *, struct rsp_que *);
    782extern int qla25xx_delete_queues(struct scsi_qla_host *);
    783extern uint16_t qla24xx_rd_req_reg(struct qla_hw_data *, uint16_t);
    784extern uint16_t qla25xx_rd_req_reg(struct qla_hw_data *, uint16_t);
    785extern void qla24xx_wrt_req_reg(struct qla_hw_data *, uint16_t, uint16_t);
    786extern void qla25xx_wrt_req_reg(struct qla_hw_data *, uint16_t, uint16_t);
    787extern void qla25xx_wrt_rsp_reg(struct qla_hw_data *, uint16_t, uint16_t);
    788extern void qla24xx_wrt_rsp_reg(struct qla_hw_data *, uint16_t, uint16_t);
    789
    790/* qlafx00 related functions */
    791extern int qlafx00_pci_config(struct scsi_qla_host *);
    792extern int qlafx00_initialize_adapter(struct scsi_qla_host *);
    793extern int qlafx00_soft_reset(scsi_qla_host_t *);
    794extern int qlafx00_chip_diag(scsi_qla_host_t *);
    795extern void qlafx00_config_rings(struct scsi_qla_host *);
    796extern char *qlafx00_pci_info_str(struct scsi_qla_host *, char *, size_t);
    797extern char *qlafx00_fw_version_str(struct scsi_qla_host *, char *, size_t);
    798extern irqreturn_t qlafx00_intr_handler(int, void *);
    799extern void qlafx00_enable_intrs(struct qla_hw_data *);
    800extern void qlafx00_disable_intrs(struct qla_hw_data *);
    801extern int qlafx00_abort_target(fc_port_t *, uint64_t, int);
    802extern int qlafx00_lun_reset(fc_port_t *, uint64_t, int);
    803extern int qlafx00_start_scsi(srb_t *);
    804extern int qlafx00_abort_isp(scsi_qla_host_t *);
    805extern int qlafx00_iospace_config(struct qla_hw_data *);
    806extern int qlafx00_init_firmware(scsi_qla_host_t *, uint16_t);
    807extern int qlafx00_driver_shutdown(scsi_qla_host_t *, int);
    808extern int qlafx00_fw_ready(scsi_qla_host_t *);
    809extern int qlafx00_configure_devices(scsi_qla_host_t *);
    810extern int qlafx00_reset_initialize(scsi_qla_host_t *);
    811extern int qlafx00_fx_disc(scsi_qla_host_t *, fc_port_t *, uint16_t);
    812extern void qlafx00_process_aen(struct scsi_qla_host *, struct qla_work_evt *);
    813extern int qlafx00_post_aenfx_work(struct scsi_qla_host *,  uint32_t,
    814				   uint32_t *, int);
    815extern uint32_t qlafx00_fw_state_show(struct device *,
    816				      struct device_attribute *, char *);
    817extern void qlafx00_get_host_speed(struct Scsi_Host *);
    818extern void qlafx00_init_response_q_entries(struct rsp_que *);
    819
    820extern void qlafx00_tm_iocb(srb_t *, struct tsk_mgmt_entry_fx00 *);
    821extern void qlafx00_abort_iocb(srb_t *, struct abort_iocb_entry_fx00 *);
    822extern void qlafx00_fxdisc_iocb(srb_t *, struct fxdisc_entry_fx00 *);
    823extern void qlafx00_timer_routine(scsi_qla_host_t *);
    824extern int qlafx00_rescan_isp(scsi_qla_host_t *);
    825
    826/* qla82xx related functions */
    827
    828/* PCI related functions */
    829extern int qla82xx_pci_config(struct scsi_qla_host *);
    830extern int qla82xx_pci_mem_read_2M(struct qla_hw_data *, u64, void *, int);
    831extern int qla82xx_pci_region_offset(struct pci_dev *, int);
    832extern int qla82xx_iospace_config(struct qla_hw_data *);
    833
    834/* Initialization related functions */
    835extern int qla82xx_reset_chip(struct scsi_qla_host *);
    836extern void qla82xx_config_rings(struct scsi_qla_host *);
    837extern void qla82xx_watchdog(scsi_qla_host_t *);
    838extern int qla82xx_start_firmware(scsi_qla_host_t *);
    839
    840/* Firmware and flash related functions */
    841extern int qla82xx_load_risc(scsi_qla_host_t *, uint32_t *);
    842extern void *qla82xx_read_optrom_data(struct scsi_qla_host *, void *,
    843					 uint32_t, uint32_t);
    844extern int qla82xx_write_optrom_data(struct scsi_qla_host *, void *,
    845				     uint32_t, uint32_t);
    846
    847/* Mailbox related functions */
    848extern int qla82xx_abort_isp(scsi_qla_host_t *);
    849extern int qla82xx_restart_isp(scsi_qla_host_t *);
    850
    851/* IOCB related functions */
    852extern int qla82xx_start_scsi(srb_t *);
    853extern void qla2x00_sp_free(srb_t *sp);
    854extern void qla2x00_sp_timeout(struct timer_list *);
    855extern void qla2x00_bsg_job_done(srb_t *sp, int);
    856extern void qla2x00_bsg_sp_free(srb_t *sp);
    857extern void qla2x00_start_iocbs(struct scsi_qla_host *, struct req_que *);
    858
    859/* Interrupt related */
    860extern irqreturn_t qla82xx_intr_handler(int, void *);
    861extern irqreturn_t qla82xx_msi_handler(int, void *);
    862extern irqreturn_t qla82xx_msix_default(int, void *);
    863extern irqreturn_t qla82xx_msix_rsp_q(int, void *);
    864extern void qla82xx_enable_intrs(struct qla_hw_data *);
    865extern void qla82xx_disable_intrs(struct qla_hw_data *);
    866extern void qla82xx_poll(int, void *);
    867extern void qla82xx_init_flags(struct qla_hw_data *);
    868
    869/* ISP 8021 hardware related */
    870extern void qla82xx_set_drv_active(scsi_qla_host_t *);
    871extern int qla82xx_wr_32(struct qla_hw_data *, ulong, u32);
    872extern int qla82xx_rd_32(struct qla_hw_data *, ulong);
    873extern int qla82xx_rdmem(struct qla_hw_data *, u64, void *, int);
    874extern int qla82xx_wrmem(struct qla_hw_data *, u64, void *, int);
    875
    876/* ISP 8021 IDC */
    877extern void qla82xx_clear_drv_active(struct qla_hw_data *);
    878extern uint32_t  qla82xx_wait_for_state_change(scsi_qla_host_t *, uint32_t);
    879extern int qla82xx_idc_lock(struct qla_hw_data *);
    880extern void qla82xx_idc_unlock(struct qla_hw_data *);
    881extern int qla82xx_device_state_handler(scsi_qla_host_t *);
    882extern void qla8xxx_dev_failed_handler(scsi_qla_host_t *);
    883extern void qla82xx_clear_qsnt_ready(scsi_qla_host_t *);
    884
    885extern void qla2x00_set_model_info(scsi_qla_host_t *, uint8_t *, size_t,
    886				   const char *);
    887extern int qla82xx_mbx_intr_enable(scsi_qla_host_t *);
    888extern int qla82xx_mbx_intr_disable(scsi_qla_host_t *);
    889extern void qla82xx_start_iocbs(scsi_qla_host_t *);
    890extern int qla82xx_fcoe_ctx_reset(scsi_qla_host_t *);
    891extern int qla82xx_check_md_needed(scsi_qla_host_t *);
    892extern void qla82xx_chip_reset_cleanup(scsi_qla_host_t *);
    893extern int qla81xx_set_led_config(scsi_qla_host_t *, uint16_t *);
    894extern int qla81xx_get_led_config(scsi_qla_host_t *, uint16_t *);
    895extern int qla82xx_mbx_beacon_ctl(scsi_qla_host_t *, int);
    896extern const char *qdev_state(uint32_t);
    897extern void qla82xx_clear_pending_mbx(scsi_qla_host_t *);
    898extern int qla82xx_read_temperature(scsi_qla_host_t *);
    899extern int qla8044_read_temperature(scsi_qla_host_t *);
    900extern int qla2x00_read_sfp_dev(struct scsi_qla_host *, char *, int);
    901extern int ql26xx_led_config(scsi_qla_host_t *, uint16_t, uint16_t *);
    902
    903/* BSG related functions */
    904extern int qla24xx_bsg_request(struct bsg_job *);
    905extern int qla24xx_bsg_timeout(struct bsg_job *);
    906extern int qla84xx_reset_chip(scsi_qla_host_t *, uint16_t);
    907extern int qla2x00_issue_iocb_timeout(scsi_qla_host_t *, void *,
    908	dma_addr_t, size_t, uint32_t);
    909extern int qla2x00_get_idma_speed(scsi_qla_host_t *, uint16_t,
    910	uint16_t *, uint16_t *);
    911extern int qla24xx_sadb_update(struct bsg_job *bsg_job);
    912extern int qla_post_sa_replace_work(struct scsi_qla_host *vha,
    913	 fc_port_t *fcport, uint16_t nport_handle, struct edif_sa_ctl *sa_ctl);
    914
    915/* 83xx related functions */
    916void qla83xx_fw_dump(scsi_qla_host_t *vha);
    917
    918/* Minidump related functions */
    919extern int qla82xx_md_get_template_size(scsi_qla_host_t *);
    920extern int qla82xx_md_get_template(scsi_qla_host_t *);
    921extern int qla82xx_md_alloc(scsi_qla_host_t *);
    922extern void qla82xx_md_free(scsi_qla_host_t *);
    923extern int qla82xx_md_collect(scsi_qla_host_t *);
    924extern void qla82xx_md_prep(scsi_qla_host_t *);
    925extern void qla82xx_set_reset_owner(scsi_qla_host_t *);
    926extern int qla82xx_validate_template_chksum(scsi_qla_host_t *vha);
    927
    928/* Function declarations for ISP8044 */
    929extern int qla8044_idc_lock(struct qla_hw_data *ha);
    930extern void qla8044_idc_unlock(struct qla_hw_data *ha);
    931extern uint32_t qla8044_rd_reg(struct qla_hw_data *ha, ulong addr);
    932extern void qla8044_wr_reg(struct qla_hw_data *ha, ulong addr, uint32_t val);
    933extern void qla8044_read_reset_template(struct scsi_qla_host *ha);
    934extern void qla8044_set_idc_dontreset(struct scsi_qla_host *ha);
    935extern int qla8044_rd_direct(struct scsi_qla_host *vha, const uint32_t crb_reg);
    936extern void qla8044_wr_direct(struct scsi_qla_host *vha,
    937			      const uint32_t crb_reg, const uint32_t value);
    938extern int qla8044_device_state_handler(struct scsi_qla_host *vha);
    939extern void qla8044_clear_qsnt_ready(struct scsi_qla_host *vha);
    940extern void qla8044_clear_drv_active(struct qla_hw_data *);
    941void qla8044_get_minidump(struct scsi_qla_host *vha);
    942int qla8044_collect_md_data(struct scsi_qla_host *vha);
    943extern int qla8044_md_get_template(scsi_qla_host_t *);
    944extern int qla8044_write_optrom_data(struct scsi_qla_host *, void *,
    945				     uint32_t, uint32_t);
    946extern irqreturn_t qla8044_intr_handler(int, void *);
    947extern void qla82xx_mbx_completion(scsi_qla_host_t *, uint16_t);
    948extern int qla8044_abort_isp(scsi_qla_host_t *);
    949extern int qla8044_check_fw_alive(struct scsi_qla_host *);
    950extern int qla_get_exlogin_status(scsi_qla_host_t *, uint16_t *,
    951	uint16_t *);
    952extern int qla_set_exlogin_mem_cfg(scsi_qla_host_t *vha, dma_addr_t phys_addr);
    953extern int qla_get_exchoffld_status(scsi_qla_host_t *, uint16_t *, uint16_t *);
    954extern int qla_set_exchoffld_mem_cfg(scsi_qla_host_t *);
    955extern void qlt_handle_abts_recv(struct scsi_qla_host *, struct rsp_que *,
    956	response_t *);
    957
    958struct scsi_qla_host *qla_find_host_by_d_id(struct scsi_qla_host *vha, be_id_t d_id);
    959int qla24xx_async_notify_ack(scsi_qla_host_t *, fc_port_t *,
    960	struct imm_ntfy_from_isp *, int);
    961void qla24xx_do_nack_work(struct scsi_qla_host *, struct qla_work_evt *);
    962void qlt_plogi_ack_link(struct scsi_qla_host *, struct qlt_plogi_ack_t *,
    963	struct fc_port *, enum qlt_plogi_link_t);
    964void qlt_plogi_ack_unref(struct scsi_qla_host *, struct qlt_plogi_ack_t *);
    965extern void qlt_schedule_sess_for_deletion(struct fc_port *);
    966extern struct fc_port *qlt_find_sess_invalidate_other(scsi_qla_host_t *,
    967	uint64_t wwn, port_id_t port_id, uint16_t loop_id, struct fc_port **);
    968void qla24xx_delete_sess_fn(struct work_struct *);
    969void qlt_unknown_atio_work_fn(struct work_struct *);
    970void qlt_update_host_map(struct scsi_qla_host *, port_id_t);
    971void qla_remove_hostmap(struct qla_hw_data *ha);
    972void qlt_clr_qp_table(struct scsi_qla_host *vha);
    973void qlt_set_mode(struct scsi_qla_host *);
    974int qla2x00_set_data_rate(scsi_qla_host_t *vha, uint16_t mode);
    975extern void qla24xx_process_purex_list(struct purex_list *);
    976extern void qla2x00_dfs_create_rport(scsi_qla_host_t *vha, struct fc_port *fp);
    977extern void qla2x00_dfs_remove_rport(scsi_qla_host_t *vha, struct fc_port *fp);
    978extern void qla_wait_nvme_release_cmd_kref(srb_t *sp);
    979extern void qla_nvme_abort_set_option
    980		(struct abort_entry_24xx *abt, srb_t *sp);
    981extern void qla_nvme_abort_process_comp_status
    982		(struct abort_entry_24xx *abt, srb_t *sp);
    983
    984/* nvme.c */
    985void qla_nvme_unregister_remote_port(struct fc_port *fcport);
    986
    987/* qla_edif.c */
    988fc_port_t *qla2x00_find_fcport_by_pid(scsi_qla_host_t *vha, port_id_t *id);
    989void qla_edb_eventcreate(scsi_qla_host_t *vha, uint32_t dbtype, uint32_t data, uint32_t data2,
    990		fc_port_t *fcport);
    991void qla_edb_stop(scsi_qla_host_t *vha);
    992ssize_t edif_doorbell_show(struct device *dev, struct device_attribute *attr, char *buf);
    993int32_t qla_edif_app_mgmt(struct bsg_job *bsg_job);
    994void qla_enode_init(scsi_qla_host_t *vha);
    995void qla_enode_stop(scsi_qla_host_t *vha);
    996void qla_edif_flush_sa_ctl_lists(fc_port_t *fcport);
    997void qla_edb_init(scsi_qla_host_t *vha);
    998void qla_edif_timer(scsi_qla_host_t *vha);
    999int qla28xx_start_scsi_edif(srb_t *sp);
   1000void qla24xx_sa_update_iocb(srb_t *sp, struct sa_update_28xx *sa_update_iocb);
   1001void qla24xx_sa_replace_iocb(srb_t *sp, struct sa_update_28xx *sa_update_iocb);
   1002void qla24xx_auth_els(scsi_qla_host_t *vha, void **pkt, struct rsp_que **rsp);
   1003void qla28xx_sa_update_iocb_entry(scsi_qla_host_t *vha, struct req_que *req,
   1004		struct sa_update_28xx *pkt);
   1005void qla_handle_els_plogi_done(scsi_qla_host_t *vha, struct event_arg *ea);
   1006
   1007#define QLA2XX_HW_ERROR			BIT_0
   1008#define QLA2XX_SHT_LNK_DWN		BIT_1
   1009#define QLA2XX_INT_ERR			BIT_2
   1010#define QLA2XX_CMD_TIMEOUT		BIT_3
   1011#define QLA2XX_RESET_CMD_ERR		BIT_4
   1012#define QLA2XX_TGT_SHT_LNK_DOWN		BIT_17
   1013
   1014#define QLA2XX_MAX_LINK_DOWN_TIME	100
   1015
   1016int qla2xxx_start_stats(struct Scsi_Host *shost, u32 flags);
   1017int qla2xxx_stop_stats(struct Scsi_Host *shost, u32 flags);
   1018int qla2xxx_reset_stats(struct Scsi_Host *shost, u32 flags);
   1019
   1020int qla2xxx_get_ini_stats(struct Scsi_Host *shost, u32 flags, void *data, u64 size);
   1021int qla2xxx_get_tgt_stats(struct Scsi_Host *shost, u32 flags,
   1022			  struct fc_rport *rport, void *data, u64 size);
   1023int qla2xxx_disable_port(struct Scsi_Host *shost);
   1024int qla2xxx_enable_port(struct Scsi_Host *shost);
   1025
   1026uint64_t qla2x00_get_num_tgts(scsi_qla_host_t *vha);
   1027uint64_t qla2x00_count_set_bits(u32 num);
   1028
   1029#endif /* _QLA_GBL_H */