1 /* 2 * QLogic Fibre Channel HBA Driver 3 * Copyright (c) 2003-2008 QLogic Corporation 4 * 5 * See LICENSE.qla2xxx for copyright and licensing details. 6 */ 7 #ifndef __QLA_GBL_H 8 #define __QLA_GBL_H 9 10 #include <linux/interrupt.h> 11 12 /* 13 * Global Function Prototypes in qla_init.c source file. 14 */ 15 extern int qla2x00_initialize_adapter(scsi_qla_host_t *); 16 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 void qla2x00_reset_chip(struct scsi_qla_host *); 22 extern void 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 void qla2x00_reset_adapter(struct scsi_qla_host *); 28 extern void 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 void qla81xx_update_fw_options(scsi_qla_host_t *); 35 extern int qla2x00_load_risc(struct scsi_qla_host *, uint32_t *); 36 extern int qla24xx_load_risc(scsi_qla_host_t *, uint32_t *); 37 extern int qla81xx_load_risc(scsi_qla_host_t *, uint32_t *); 38 39 extern int qla2x00_loop_resync(scsi_qla_host_t *); 40 41 extern int qla2x00_fabric_login(scsi_qla_host_t *, fc_port_t *, uint16_t *); 42 extern int qla2x00_local_device_login(scsi_qla_host_t *, fc_port_t *); 43 44 extern void qla2x00_update_fcports(scsi_qla_host_t *); 45 46 extern int qla2x00_abort_isp(scsi_qla_host_t *); 47 48 extern void qla2x00_update_fcport(scsi_qla_host_t *, fc_port_t *); 49 50 extern void qla2x00_alloc_fw_dump(scsi_qla_host_t *); 51 extern void qla2x00_try_to_stop_firmware(scsi_qla_host_t *); 52 53 extern void qla84xx_put_chip(struct scsi_qla_host *); 54 55 /* 56 * Global Data in qla_os.c source file. 57 */ 58 extern char qla2x00_version_str[]; 59 60 extern int ql2xlogintimeout; 61 extern int qlport_down_retry; 62 extern int ql2xplogiabsentdevice; 63 extern int ql2xloginretrycount; 64 extern int ql2xfdmienable; 65 extern int ql2xallocfwdump; 66 extern int ql2xextended_error_logging; 67 extern int ql2xqfullrampup; 68 extern int ql2xiidmaenable; 69 extern int ql2xmaxqueues; 70 71 extern int qla2x00_loop_reset(scsi_qla_host_t *); 72 extern void qla2x00_abort_all_cmds(scsi_qla_host_t *, int); 73 extern int qla2x00_post_aen_work(struct scsi_qla_host *, enum 74 fc_host_event_code, u32); 75 extern int qla2x00_post_idc_ack_work(struct scsi_qla_host *, uint16_t *); 76 extern int qla81xx_restart_mpi_firmware(scsi_qla_host_t *); 77 78 extern void qla2x00_abort_fcport_cmds(fc_port_t *); 79 extern struct scsi_qla_host *qla2x00_create_host(struct scsi_host_template *, 80 struct qla_hw_data *); 81 extern void qla2x00_free_host(struct scsi_qla_host *); 82 extern void qla2x00_relogin(struct scsi_qla_host *); 83 /* 84 * Global Functions in qla_mid.c source file. 85 */ 86 extern struct scsi_host_template qla2xxx_driver_template; 87 extern struct scsi_transport_template *qla2xxx_transport_vport_template; 88 extern void qla2x00_timer(scsi_qla_host_t *); 89 extern void qla2x00_start_timer(scsi_qla_host_t *, void *, unsigned long); 90 extern void qla24xx_deallocate_vp_id(scsi_qla_host_t *); 91 extern int qla24xx_disable_vp (scsi_qla_host_t *); 92 extern int qla24xx_enable_vp (scsi_qla_host_t *); 93 extern int qla24xx_control_vp(scsi_qla_host_t *, int ); 94 extern int qla24xx_modify_vp_config(scsi_qla_host_t *); 95 extern int qla2x00_send_change_request(scsi_qla_host_t *, uint16_t, uint16_t); 96 extern void qla2x00_vp_stop_timer(scsi_qla_host_t *); 97 extern int qla24xx_configure_vhba (scsi_qla_host_t *); 98 extern void qla24xx_report_id_acquisition(scsi_qla_host_t *, 99 struct vp_rpt_id_entry_24xx *); 100 extern void qla2x00_do_dpc_all_vps(scsi_qla_host_t *); 101 extern int qla24xx_vport_create_req_sanity_check(struct fc_vport *); 102 extern scsi_qla_host_t * qla24xx_create_vhost(struct fc_vport *); 103 104 extern void qla2x00_sp_compl(struct qla_hw_data *, srb_t *); 105 106 extern char *qla2x00_get_fw_version_str(struct scsi_qla_host *, char *); 107 108 extern void qla2x00_mark_device_lost(scsi_qla_host_t *, fc_port_t *, int, int); 109 extern void qla2x00_mark_all_devices_lost(scsi_qla_host_t *, int); 110 111 extern struct fw_blob *qla2x00_request_firmware(scsi_qla_host_t *); 112 113 extern int qla2x00_wait_for_hba_online(scsi_qla_host_t *); 114 extern int qla2x00_wait_for_chip_reset(scsi_qla_host_t *); 115 116 extern void qla2xxx_wake_dpc(struct scsi_qla_host *); 117 extern void qla2x00_alert_all_vps(struct rsp_que *, uint16_t *); 118 extern void qla2x00_async_event(scsi_qla_host_t *, struct rsp_que *, 119 uint16_t *); 120 extern int qla2x00_vp_abort_isp(scsi_qla_host_t *); 121 122 /* 123 * Global Function Prototypes in qla_iocb.c source file. 124 */ 125 extern uint16_t qla2x00_calc_iocbs_32(uint16_t); 126 extern uint16_t qla2x00_calc_iocbs_64(uint16_t); 127 extern void qla2x00_build_scsi_iocbs_32(srb_t *, cmd_entry_t *, uint16_t); 128 extern void qla2x00_build_scsi_iocbs_64(srb_t *, cmd_entry_t *, uint16_t); 129 extern int qla2x00_start_scsi(srb_t *sp); 130 extern int qla24xx_start_scsi(srb_t *sp); 131 int qla2x00_marker(struct scsi_qla_host *, struct req_que *, struct rsp_que *, 132 uint16_t, uint16_t, uint8_t); 133 int __qla2x00_marker(struct scsi_qla_host *, struct req_que *, struct rsp_que *, 134 uint16_t, uint16_t, uint8_t); 135 136 /* 137 * Global Function Prototypes in qla_mbx.c source file. 138 */ 139 extern int 140 qla2x00_load_ram(scsi_qla_host_t *, dma_addr_t, uint32_t, uint32_t); 141 142 extern int 143 qla2x00_dump_ram(scsi_qla_host_t *, dma_addr_t, uint32_t, uint32_t); 144 145 extern int 146 qla2x00_execute_fw(scsi_qla_host_t *, uint32_t); 147 148 extern void 149 qla2x00_get_fw_version(scsi_qla_host_t *, uint16_t *, uint16_t *, uint16_t *, 150 uint16_t *, uint32_t *, uint8_t *, uint32_t *, uint8_t *); 151 152 extern int 153 qla2x00_get_fw_options(scsi_qla_host_t *, uint16_t *); 154 155 extern int 156 qla2x00_set_fw_options(scsi_qla_host_t *, uint16_t *); 157 158 extern int 159 qla2x00_mbx_reg_test(scsi_qla_host_t *); 160 161 extern int 162 qla2x00_verify_checksum(scsi_qla_host_t *, uint32_t); 163 164 extern int 165 qla2x00_issue_iocb(scsi_qla_host_t *, void *, dma_addr_t, size_t); 166 167 extern int 168 qla2x00_abort_command(scsi_qla_host_t *, srb_t *, struct req_que *); 169 170 extern int 171 qla2x00_abort_target(struct fc_port *, unsigned int); 172 173 extern int 174 qla2x00_lun_reset(struct fc_port *, unsigned int); 175 176 extern int 177 qla2x00_get_adapter_id(scsi_qla_host_t *, uint16_t *, uint8_t *, uint8_t *, 178 uint8_t *, uint16_t *, uint16_t *); 179 180 extern int 181 qla2x00_get_retry_cnt(scsi_qla_host_t *, uint8_t *, uint8_t *, uint16_t *); 182 183 extern int 184 qla2x00_init_firmware(scsi_qla_host_t *, uint16_t); 185 186 extern int 187 qla2x00_get_port_database(scsi_qla_host_t *, fc_port_t *, uint8_t); 188 189 extern int 190 qla2x00_get_firmware_state(scsi_qla_host_t *, uint16_t *); 191 192 extern int 193 qla2x00_get_port_name(scsi_qla_host_t *, uint16_t, uint8_t *, uint8_t); 194 195 extern int 196 qla2x00_lip_reset(scsi_qla_host_t *); 197 198 extern int 199 qla2x00_send_sns(scsi_qla_host_t *, dma_addr_t, uint16_t, size_t); 200 201 extern int 202 qla2x00_login_fabric(scsi_qla_host_t *, uint16_t, uint8_t, uint8_t, uint8_t, 203 uint16_t *, uint8_t); 204 extern int 205 qla24xx_login_fabric(scsi_qla_host_t *, uint16_t, uint8_t, uint8_t, uint8_t, 206 uint16_t *, uint8_t); 207 208 extern int 209 qla2x00_login_local_device(scsi_qla_host_t *, fc_port_t *, uint16_t *, 210 uint8_t); 211 212 extern int 213 qla2x00_fabric_logout(scsi_qla_host_t *, uint16_t, uint8_t, uint8_t, uint8_t); 214 215 extern int 216 qla24xx_fabric_logout(scsi_qla_host_t *, uint16_t, uint8_t, uint8_t, uint8_t); 217 218 extern int 219 qla2x00_full_login_lip(scsi_qla_host_t *ha); 220 221 extern int 222 qla2x00_get_id_list(scsi_qla_host_t *, void *, dma_addr_t, uint16_t *); 223 224 extern int 225 qla2x00_get_resource_cnts(scsi_qla_host_t *, uint16_t *, uint16_t *, 226 uint16_t *, uint16_t *, uint16_t *); 227 228 extern int 229 qla2x00_get_fcal_position_map(scsi_qla_host_t *ha, char *pos_map); 230 231 extern int 232 qla2x00_get_link_status(scsi_qla_host_t *, uint16_t, struct link_statistics *, 233 dma_addr_t); 234 235 extern int 236 qla24xx_get_isp_stats(scsi_qla_host_t *, struct link_statistics *, 237 dma_addr_t); 238 239 extern int qla24xx_abort_command(scsi_qla_host_t *, srb_t *, struct req_que *); 240 extern int qla24xx_abort_target(struct fc_port *, unsigned int); 241 extern int qla24xx_lun_reset(struct fc_port *, unsigned int); 242 243 extern int 244 qla2x00_system_error(scsi_qla_host_t *); 245 246 extern int 247 qla2x00_set_serdes_params(scsi_qla_host_t *, uint16_t, uint16_t, uint16_t); 248 249 extern int 250 qla2x00_stop_firmware(scsi_qla_host_t *); 251 252 extern int 253 qla2x00_enable_eft_trace(scsi_qla_host_t *, dma_addr_t, uint16_t); 254 extern int 255 qla2x00_disable_eft_trace(scsi_qla_host_t *); 256 257 extern int 258 qla2x00_enable_fce_trace(scsi_qla_host_t *, dma_addr_t, uint16_t , uint16_t *, 259 uint32_t *); 260 261 extern int 262 qla2x00_disable_fce_trace(scsi_qla_host_t *, uint64_t *, uint64_t *); 263 264 extern int 265 qla2x00_read_sfp(scsi_qla_host_t *, dma_addr_t, uint16_t, uint16_t, uint16_t); 266 267 extern int 268 qla2x00_read_edc(scsi_qla_host_t *, uint16_t, uint16_t, dma_addr_t, 269 uint8_t *, uint16_t, uint16_t); 270 271 extern int 272 qla2x00_write_edc(scsi_qla_host_t *, uint16_t, uint16_t, dma_addr_t, 273 uint8_t *, uint16_t, uint16_t); 274 275 extern int 276 qla2x00_set_idma_speed(scsi_qla_host_t *, uint16_t, uint16_t, uint16_t *); 277 278 extern int qla84xx_verify_chip(struct scsi_qla_host *, uint16_t *); 279 280 extern int qla81xx_idc_ack(scsi_qla_host_t *, uint16_t *); 281 282 extern int 283 qla81xx_fac_get_sector_size(scsi_qla_host_t *, uint32_t *); 284 285 extern int 286 qla81xx_fac_do_write_enable(scsi_qla_host_t *, int); 287 288 extern int 289 qla81xx_fac_erase_sector(scsi_qla_host_t *, uint32_t, uint32_t); 290 291 /* 292 * Global Function Prototypes in qla_isr.c source file. 293 */ 294 extern irqreturn_t qla2100_intr_handler(int, void *); 295 extern irqreturn_t qla2300_intr_handler(int, void *); 296 extern irqreturn_t qla24xx_intr_handler(int, void *); 297 extern void qla2x00_process_response_queue(struct rsp_que *); 298 extern void qla24xx_process_response_queue(struct rsp_que *); 299 300 extern int qla2x00_request_irqs(struct qla_hw_data *, struct rsp_que *); 301 extern void qla2x00_free_irqs(scsi_qla_host_t *); 302 303 /* 304 * Global Function Prototypes in qla_sup.c source file. 305 */ 306 extern void qla2x00_release_nvram_protection(scsi_qla_host_t *); 307 extern uint32_t *qla24xx_read_flash_data(scsi_qla_host_t *, uint32_t *, 308 uint32_t, uint32_t); 309 extern uint8_t *qla2x00_read_nvram_data(scsi_qla_host_t *, uint8_t *, uint32_t, 310 uint32_t); 311 extern uint8_t *qla24xx_read_nvram_data(scsi_qla_host_t *, uint8_t *, uint32_t, 312 uint32_t); 313 extern int qla2x00_write_nvram_data(scsi_qla_host_t *, uint8_t *, uint32_t, 314 uint32_t); 315 extern int qla24xx_write_nvram_data(scsi_qla_host_t *, uint8_t *, uint32_t, 316 uint32_t); 317 extern uint8_t *qla25xx_read_nvram_data(scsi_qla_host_t *, uint8_t *, uint32_t, 318 uint32_t); 319 extern int qla25xx_write_nvram_data(scsi_qla_host_t *, uint8_t *, uint32_t, 320 uint32_t); 321 322 extern int qla2x00_beacon_on(struct scsi_qla_host *); 323 extern int qla2x00_beacon_off(struct scsi_qla_host *); 324 extern void qla2x00_beacon_blink(struct scsi_qla_host *); 325 extern int qla24xx_beacon_on(struct scsi_qla_host *); 326 extern int qla24xx_beacon_off(struct scsi_qla_host *); 327 extern void qla24xx_beacon_blink(struct scsi_qla_host *); 328 329 extern uint8_t *qla2x00_read_optrom_data(struct scsi_qla_host *, uint8_t *, 330 uint32_t, uint32_t); 331 extern int qla2x00_write_optrom_data(struct scsi_qla_host *, uint8_t *, 332 uint32_t, uint32_t); 333 extern uint8_t *qla24xx_read_optrom_data(struct scsi_qla_host *, uint8_t *, 334 uint32_t, uint32_t); 335 extern int qla24xx_write_optrom_data(struct scsi_qla_host *, uint8_t *, 336 uint32_t, uint32_t); 337 extern uint8_t *qla25xx_read_optrom_data(struct scsi_qla_host *, uint8_t *, 338 uint32_t, uint32_t); 339 340 extern int qla2x00_get_flash_version(scsi_qla_host_t *, void *); 341 extern int qla24xx_get_flash_version(scsi_qla_host_t *, void *); 342 343 extern int qla2xxx_get_flash_info(scsi_qla_host_t *); 344 extern int qla2xxx_get_vpd_field(scsi_qla_host_t *, char *, char *, size_t); 345 346 extern void qla2xxx_flash_npiv_conf(scsi_qla_host_t *); 347 348 /* 349 * Global Function Prototypes in qla_dbg.c source file. 350 */ 351 extern void qla2100_fw_dump(scsi_qla_host_t *, int); 352 extern void qla2300_fw_dump(scsi_qla_host_t *, int); 353 extern void qla24xx_fw_dump(scsi_qla_host_t *, int); 354 extern void qla25xx_fw_dump(scsi_qla_host_t *, int); 355 extern void qla81xx_fw_dump(scsi_qla_host_t *, int); 356 extern void qla2x00_dump_regs(scsi_qla_host_t *); 357 extern void qla2x00_dump_buffer(uint8_t *, uint32_t); 358 359 /* 360 * Global Function Prototypes in qla_gs.c source file. 361 */ 362 extern void *qla2x00_prep_ms_iocb(scsi_qla_host_t *, uint32_t, uint32_t); 363 extern void *qla24xx_prep_ms_iocb(scsi_qla_host_t *, uint32_t, uint32_t); 364 extern int qla2x00_ga_nxt(scsi_qla_host_t *, fc_port_t *); 365 extern int qla2x00_gid_pt(scsi_qla_host_t *, sw_info_t *); 366 extern int qla2x00_gpn_id(scsi_qla_host_t *, sw_info_t *); 367 extern int qla2x00_gnn_id(scsi_qla_host_t *, sw_info_t *); 368 extern int qla2x00_rft_id(scsi_qla_host_t *); 369 extern int qla2x00_rff_id(scsi_qla_host_t *); 370 extern int qla2x00_rnn_id(scsi_qla_host_t *); 371 extern int qla2x00_rsnn_nn(scsi_qla_host_t *); 372 extern void *qla2x00_prep_ms_fdmi_iocb(scsi_qla_host_t *, uint32_t, uint32_t); 373 extern void *qla24xx_prep_ms_fdmi_iocb(scsi_qla_host_t *, uint32_t, uint32_t); 374 extern int qla2x00_fdmi_register(scsi_qla_host_t *); 375 extern int qla2x00_gfpn_id(scsi_qla_host_t *, sw_info_t *); 376 extern int qla2x00_gpsc(scsi_qla_host_t *, sw_info_t *); 377 extern void qla2x00_get_sym_node_name(scsi_qla_host_t *, uint8_t *); 378 379 /* 380 * Global Function Prototypes in qla_attr.c source file. 381 */ 382 struct device_attribute; 383 extern struct device_attribute *qla2x00_host_attrs[]; 384 struct fc_function_template; 385 extern struct fc_function_template qla2xxx_transport_functions; 386 extern struct fc_function_template qla2xxx_transport_vport_functions; 387 extern void qla2x00_alloc_sysfs_attr(scsi_qla_host_t *); 388 extern void qla2x00_free_sysfs_attr(scsi_qla_host_t *); 389 extern void qla2x00_init_host_attr(scsi_qla_host_t *); 390 extern void qla2x00_alloc_sysfs_attr(scsi_qla_host_t *); 391 extern void qla2x00_free_sysfs_attr(scsi_qla_host_t *); 392 393 /* 394 * Global Function Prototypes in qla_dfs.c source file. 395 */ 396 extern int qla2x00_dfs_setup(scsi_qla_host_t *); 397 extern int qla2x00_dfs_remove(scsi_qla_host_t *); 398 399 /* Globa function prototypes for multi-q */ 400 extern int qla25xx_request_irq(struct rsp_que *); 401 extern int qla25xx_init_req_que(struct scsi_qla_host *, struct req_que *); 402 extern int qla25xx_init_rsp_que(struct scsi_qla_host *, struct rsp_que *); 403 extern int qla25xx_create_req_que(struct qla_hw_data *, uint16_t, uint8_t, 404 uint16_t, uint8_t, uint8_t); 405 extern int qla25xx_create_rsp_que(struct qla_hw_data *, uint16_t, uint8_t, 406 uint16_t); 407 extern int qla25xx_update_req_que(struct scsi_qla_host *, uint8_t, uint8_t); 408 extern void qla2x00_init_response_q_entries(struct rsp_que *); 409 extern int qla25xx_delete_req_que(struct scsi_qla_host *, struct req_que *); 410 extern int qla25xx_delete_rsp_que(struct scsi_qla_host *, struct rsp_que *); 411 extern int qla25xx_create_queues(struct scsi_qla_host *, uint8_t); 412 extern int qla25xx_delete_queues(struct scsi_qla_host *, uint8_t); 413 extern uint16_t qla24xx_rd_req_reg(struct qla_hw_data *, uint16_t); 414 extern uint16_t qla25xx_rd_req_reg(struct qla_hw_data *, uint16_t); 415 extern void qla24xx_wrt_req_reg(struct qla_hw_data *, uint16_t, uint16_t); 416 extern void qla25xx_wrt_req_reg(struct qla_hw_data *, uint16_t, uint16_t); 417 extern void qla25xx_wrt_rsp_reg(struct qla_hw_data *, uint16_t, uint16_t); 418 extern void qla24xx_wrt_rsp_reg(struct qla_hw_data *, uint16_t, uint16_t); 419 #endif /* _QLA_GBL_H */ 420