qla_gbl.h 42 KB

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