qla_gbl.h 42 KB

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