Lines Matching refs:ha

14 static void ql4xxx_set_mac_number(struct scsi_qla_host *ha)  in ql4xxx_set_mac_number()  argument
21 spin_lock_irqsave(&ha->hardware_lock, flags); in ql4xxx_set_mac_number()
22 value = readw(&ha->reg->ctrl_status); in ql4xxx_set_mac_number()
23 spin_unlock_irqrestore(&ha->hardware_lock, flags); in ql4xxx_set_mac_number()
28 ha->mac_index = 1; in ql4xxx_set_mac_number()
31 ha->mac_index = 3; in ql4xxx_set_mac_number()
35 "ispControlStatus = 0x%x\n", ha->host_no, in ql4xxx_set_mac_number()
39 DEBUG2(printk("scsi%ld: %s: mac_index %d.\n", ha->host_no, __func__, in ql4xxx_set_mac_number()
40 ha->mac_index)); in ql4xxx_set_mac_number()
50 void qla4xxx_free_ddb(struct scsi_qla_host *ha, in qla4xxx_free_ddb() argument
54 ha->fw_ddb_index_map[ddb_entry->fw_ddb_index] = in qla4xxx_free_ddb()
56 ha->tot_ddbs--; in qla4xxx_free_ddb()
66 static void qla4xxx_init_response_q_entries(struct scsi_qla_host *ha) in qla4xxx_init_response_q_entries() argument
71 pkt = (struct response *)ha->response_ptr; in qla4xxx_init_response_q_entries()
86 int qla4xxx_init_rings(struct scsi_qla_host *ha) in qla4xxx_init_rings() argument
92 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_init_rings()
93 ha->request_out = 0; in qla4xxx_init_rings()
94 ha->request_in = 0; in qla4xxx_init_rings()
95 ha->request_ptr = &ha->request_ring[ha->request_in]; in qla4xxx_init_rings()
96 ha->req_q_count = REQUEST_QUEUE_DEPTH; in qla4xxx_init_rings()
99 ha->response_in = 0; in qla4xxx_init_rings()
100 ha->response_out = 0; in qla4xxx_init_rings()
101 ha->response_ptr = &ha->response_ring[ha->response_out]; in qla4xxx_init_rings()
103 if (is_qla8022(ha)) { in qla4xxx_init_rings()
105 (unsigned long __iomem *)&ha->qla4_82xx_reg->req_q_out); in qla4xxx_init_rings()
107 (unsigned long __iomem *)&ha->qla4_82xx_reg->rsp_q_in); in qla4xxx_init_rings()
109 (unsigned long __iomem *)&ha->qla4_82xx_reg->rsp_q_out); in qla4xxx_init_rings()
110 } else if (is_qla8032(ha) || is_qla8042(ha)) { in qla4xxx_init_rings()
112 (unsigned long __iomem *)&ha->qla4_83xx_reg->req_q_in); in qla4xxx_init_rings()
114 (unsigned long __iomem *)&ha->qla4_83xx_reg->rsp_q_in); in qla4xxx_init_rings()
116 (unsigned long __iomem *)&ha->qla4_83xx_reg->rsp_q_out); in qla4xxx_init_rings()
125 ha->shadow_regs->req_q_out = __constant_cpu_to_le32(0); in qla4xxx_init_rings()
126 ha->shadow_regs->rsp_q_in = __constant_cpu_to_le32(0); in qla4xxx_init_rings()
129 writel(0, &ha->reg->req_q_in); in qla4xxx_init_rings()
130 writel(0, &ha->reg->rsp_q_out); in qla4xxx_init_rings()
131 readl(&ha->reg->rsp_q_out); in qla4xxx_init_rings()
134 qla4xxx_init_response_q_entries(ha); in qla4xxx_init_rings()
138 ha->active_mrb_array[i] = NULL; in qla4xxx_init_rings()
140 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_init_rings()
150 int qla4xxx_get_sys_info(struct scsi_qla_host *ha) in qla4xxx_get_sys_info() argument
156 sys_info = dma_alloc_coherent(&ha->pdev->dev, sizeof(*sys_info), in qla4xxx_get_sys_info()
160 ha->host_no, __func__)); in qla4xxx_get_sys_info()
167 if (qla4xxx_get_flash(ha, sys_info_dma, FLASH_OFFSET_SYS_INFO, in qla4xxx_get_sys_info()
170 "failed\n", ha->host_no, __func__)); in qla4xxx_get_sys_info()
176 memcpy(ha->my_mac, &sys_info->physAddr[0].address[0], in qla4xxx_get_sys_info()
177 min(sizeof(ha->my_mac), in qla4xxx_get_sys_info()
179 memcpy(ha->serial_number, &sys_info->acSerialNumber, in qla4xxx_get_sys_info()
180 min(sizeof(ha->serial_number), in qla4xxx_get_sys_info()
186 dma_free_coherent(&ha->pdev->dev, sizeof(*sys_info), sys_info, in qla4xxx_get_sys_info()
198 static void qla4xxx_init_local_data(struct scsi_qla_host *ha) in qla4xxx_init_local_data() argument
201 ha->aen_q_count = MAX_AEN_ENTRIES; in qla4xxx_init_local_data()
205 qla4xxx_wait_for_ip_config(struct scsi_qla_host *ha) in qla4xxx_wait_for_ip_config() argument
214 if (is_ipv4_enabled(ha) && is_ipv6_enabled(ha)) { in qla4xxx_wait_for_ip_config()
215 if (((ha->addl_fw_state & FW_ADDSTATE_DHCPv4_ENABLED) != 0) && in qla4xxx_wait_for_ip_config()
216 ((ha->addl_fw_state & in qla4xxx_wait_for_ip_config()
220 if (((ha->ip_config.ipv6_addl_options & in qla4xxx_wait_for_ip_config()
222 ((ha->ip_config.ipv6_link_local_state == in qla4xxx_wait_for_ip_config()
224 (ha->ip_config.ipv6_addr0_state == in qla4xxx_wait_for_ip_config()
226 (ha->ip_config.ipv6_addr1_state == in qla4xxx_wait_for_ip_config()
231 if ((ha->ip_config.ipv6_link_local_state == in qla4xxx_wait_for_ip_config()
233 (ha->ip_config.ipv6_addr0_state == in qla4xxx_wait_for_ip_config()
235 (ha->ip_config.ipv6_addr1_state == in qla4xxx_wait_for_ip_config()
239 " Don't wait!\n", ha->host_no, in qla4xxx_wait_for_ip_config()
243 if (memcmp(&ha->ip_config.ipv6_default_router_addr, in qla4xxx_wait_for_ip_config()
247 "Don't wait!\n", ha->host_no, in qla4xxx_wait_for_ip_config()
251 if ((ha->ip_config.ipv6_default_router_state == in qla4xxx_wait_for_ip_config()
253 (ha->ip_config.ipv6_link_local_state == in qla4xxx_wait_for_ip_config()
255 (memcmp(&ha->ip_config.ipv6_link_local_addr, in qla4xxx_wait_for_ip_config()
256 &ha->ip_config.ipv6_default_router_addr, 4) == in qla4xxx_wait_for_ip_config()
260 ha->host_no, __func__)); in qla4xxx_wait_for_ip_config()
266 "IP(s) \"", ha->host_no, __func__)); in qla4xxx_wait_for_ip_config()
269 if (ha->ip_config.ipv6_link_local_state == in qla4xxx_wait_for_ip_config()
272 if (ha->ip_config.ipv6_addr0_state == in qla4xxx_wait_for_ip_config()
275 if (ha->ip_config.ipv6_addr1_state == in qla4xxx_wait_for_ip_config()
285 static int qla4_80xx_is_minidump_dma_capable(struct scsi_qla_host *ha, in qla4_80xx_is_minidump_dma_capable() argument
288 int offset = (is_qla8022(ha)) ? QLA8022_TEMPLATE_CAP_OFFSET : in qla4_80xx_is_minidump_dma_capable()
296 ql4_printk(KERN_INFO, ha, "PEX DMA Not supported %d\n", in qla4_80xx_is_minidump_dma_capable()
308 void qla4xxx_alloc_fw_dump(struct scsi_qla_host *ha) in qla4xxx_alloc_fw_dump() argument
318 if (ha->fw_dump) { in qla4xxx_alloc_fw_dump()
319 ql4_printk(KERN_WARNING, ha, in qla4xxx_alloc_fw_dump()
324 status = qla4xxx_req_template_size(ha); in qla4xxx_alloc_fw_dump()
326 ql4_printk(KERN_INFO, ha, in qla4xxx_alloc_fw_dump()
328 ha->host_no); in qla4xxx_alloc_fw_dump()
332 clear_bit(AF_82XX_FW_DUMPED, &ha->flags); in qla4xxx_alloc_fw_dump()
335 md_tmp = dma_alloc_coherent(&ha->pdev->dev, ha->fw_dump_tmplt_size, in qla4xxx_alloc_fw_dump()
338 ql4_printk(KERN_INFO, ha, in qla4xxx_alloc_fw_dump()
340 ha->host_no); in qla4xxx_alloc_fw_dump()
345 status = qla4xxx_get_minidump_template(ha, md_tmp_dma); in qla4xxx_alloc_fw_dump()
347 ql4_printk(KERN_INFO, ha, in qla4xxx_alloc_fw_dump()
349 ha->host_no); in qla4xxx_alloc_fw_dump()
355 dma_capable = qla4_80xx_is_minidump_dma_capable(ha, md_hdr); in qla4xxx_alloc_fw_dump()
362 ha->fw_dump_capture_mask = ql4xmdcapmask; in qla4xxx_alloc_fw_dump()
365 ql4_printk(KERN_INFO, ha, "Falling back to default capture mask, as PEX DMA is not supported\n"); in qla4xxx_alloc_fw_dump()
366 ha->fw_dump_capture_mask = capture_debug_level; in qla4xxx_alloc_fw_dump()
369 md_hdr->driver_capture_mask = ha->fw_dump_capture_mask; in qla4xxx_alloc_fw_dump()
371 DEBUG2(ql4_printk(KERN_INFO, ha, "Minimum num of entries = %d\n", in qla4xxx_alloc_fw_dump()
373 DEBUG2(ql4_printk(KERN_INFO, ha, "Dump template size = %d\n", in qla4xxx_alloc_fw_dump()
374 ha->fw_dump_tmplt_size)); in qla4xxx_alloc_fw_dump()
375 DEBUG2(ql4_printk(KERN_INFO, ha, "Selected Capture mask =0x%x\n", in qla4xxx_alloc_fw_dump()
376 ha->fw_dump_capture_mask)); in qla4xxx_alloc_fw_dump()
381 if (hdr_entry_bit & ha->fw_dump_capture_mask) in qla4xxx_alloc_fw_dump()
382 ha->fw_dump_size += md_hdr->capture_size_array[k]; in qla4xxx_alloc_fw_dump()
386 ha->fw_dump_size += ha->fw_dump_tmplt_size; in qla4xxx_alloc_fw_dump()
387 ha->fw_dump = vmalloc(ha->fw_dump_size); in qla4xxx_alloc_fw_dump()
388 if (!ha->fw_dump) in qla4xxx_alloc_fw_dump()
391 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_alloc_fw_dump()
393 ha->fw_dump_tmplt_size)); in qla4xxx_alloc_fw_dump()
394 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_alloc_fw_dump()
395 "Total Minidump size = 0x%x KB\n", ha->fw_dump_size)); in qla4xxx_alloc_fw_dump()
397 memcpy(ha->fw_dump, md_tmp, ha->fw_dump_tmplt_size); in qla4xxx_alloc_fw_dump()
398 ha->fw_dump_tmplt_hdr = ha->fw_dump; in qla4xxx_alloc_fw_dump()
401 dma_free_coherent(&ha->pdev->dev, ha->fw_dump_tmplt_size, in qla4xxx_alloc_fw_dump()
405 static int qla4xxx_fw_ready(struct scsi_qla_host *ha) in qla4xxx_fw_ready() argument
410 DEBUG2(ql4_printk(KERN_INFO, ha, "Waiting for Firmware Ready..\n")); in qla4xxx_fw_ready()
413 if (test_and_clear_bit(DPC_GET_DHCP_IP_ADDR, &ha->dpc_flags)) in qla4xxx_fw_ready()
414 qla4xxx_get_dhcp_ip_address(ha); in qla4xxx_fw_ready()
417 if (qla4xxx_get_firmware_state(ha) != QLA_SUCCESS) { in qla4xxx_fw_ready()
419 "state\n", ha->host_no, __func__)); in qla4xxx_fw_ready()
423 if (ha->firmware_state & FW_STATE_ERROR) { in qla4xxx_fw_ready()
425 " occurred\n", ha->host_no, __func__)); in qla4xxx_fw_ready()
429 if (ha->firmware_state & FW_STATE_CONFIG_WAIT) { in qla4xxx_fw_ready()
434 if (qla4xxx_initialize_fw_cb(ha) == QLA_ERROR) in qla4xxx_fw_ready()
441 if (ha->firmware_state & FW_STATE_WAIT_AUTOCONNECT) { in qla4xxx_fw_ready()
444 ha->host_no, __func__)); in qla4xxx_fw_ready()
447 if (ha->firmware_state & FW_STATE_CONFIGURING_IP) { in qla4xxx_fw_ready()
450 ha->host_no, __func__)); in qla4xxx_fw_ready()
459 if (ha->addl_fw_state & FW_ADDSTATE_LINK_UP) { in qla4xxx_fw_ready()
462 ha->host_no, __func__)); in qla4xxx_fw_ready()
463 } else if (ha->firmware_state & in qla4xxx_fw_ready()
468 ha->host_no, __func__)); in qla4xxx_fw_ready()
469 ha->firmware_state = FW_STATE_READY; in qla4xxx_fw_ready()
474 if (ha->firmware_state == FW_STATE_READY) { in qla4xxx_fw_ready()
477 &ha->dpc_flags)) in qla4xxx_fw_ready()
478 qla4xxx_get_dhcp_ip_address(ha); in qla4xxx_fw_ready()
480 if (!qla4xxx_wait_for_ip_config(ha) || in qla4xxx_fw_ready()
482 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_fw_ready()
486 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_fw_ready()
488 " - %s\n", ha->host_no, in qla4xxx_fw_ready()
489 __func__, (ha->addl_fw_state & in qla4xxx_fw_ready()
492 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_fw_ready()
494 " Enabled %s\n", ha->host_no, in qla4xxx_fw_ready()
495 __func__, (ha->addl_fw_state & in qla4xxx_fw_ready()
498 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_fw_ready()
500 ha->host_no, __func__, in qla4xxx_fw_ready()
501 (ha->addl_fw_state & in qla4xxx_fw_ready()
504 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_fw_ready()
507 ha->host_no, __func__, in qla4xxx_fw_ready()
508 (ha->addl_fw_state & in qla4xxx_fw_ready()
517 "seconds expired= %d\n", ha->host_no, __func__, in qla4xxx_fw_ready()
518 ha->firmware_state, ha->addl_fw_state, in qla4xxx_fw_ready()
520 if (is_qla4032(ha) && in qla4xxx_fw_ready()
521 !(ha->addl_fw_state & FW_ADDSTATE_LINK_UP) && in qla4xxx_fw_ready()
531 ha->host_no, __func__)); in qla4xxx_fw_ready()
533 if (ha->firmware_state & FW_STATE_CONFIGURING_IP) { in qla4xxx_fw_ready()
536 ha->host_no, __func__)); in qla4xxx_fw_ready()
538 } else if (ha->firmware_state & FW_STATE_WAIT_AUTOCONNECT) { in qla4xxx_fw_ready()
541 ha->host_no, __func__)); in qla4xxx_fw_ready()
553 static int qla4xxx_init_firmware(struct scsi_qla_host *ha) in qla4xxx_init_firmware() argument
557 if (is_aer_supported(ha) && in qla4xxx_init_firmware()
558 test_bit(AF_PCI_CHANNEL_IO_PERM_FAILURE, &ha->flags)) in qla4xxx_init_firmware()
564 if (is_qla80XX(ha)) in qla4xxx_init_firmware()
565 qla4_8xxx_stop_firmware(ha); in qla4xxx_init_firmware()
567 ql4_printk(KERN_INFO, ha, "Initializing firmware..\n"); in qla4xxx_init_firmware()
568 if (qla4xxx_initialize_fw_cb(ha) == QLA_ERROR) { in qla4xxx_init_firmware()
570 "control block\n", ha->host_no, __func__)); in qla4xxx_init_firmware()
574 if (!qla4xxx_fw_ready(ha)) in qla4xxx_init_firmware()
577 if (is_qla80XX(ha) && !test_bit(AF_INIT_DONE, &ha->flags)) in qla4xxx_init_firmware()
578 qla4xxx_alloc_fw_dump(ha); in qla4xxx_init_firmware()
580 return qla4xxx_get_firmware_status(ha); in qla4xxx_init_firmware()
583 static void qla4xxx_set_model_info(struct scsi_qla_host *ha) in qla4xxx_set_model_info() argument
587 int size = sizeof(ha->nvram->isp4022.boardIdStr); in qla4xxx_set_model_info()
591 board_id_string[i] = rd_nvram_word(ha, offset); in qla4xxx_set_model_info()
595 memcpy(ha->model_name, board_id_string, size); in qla4xxx_set_model_info()
598 static int qla4xxx_config_nvram(struct scsi_qla_host *ha) in qla4xxx_config_nvram() argument
603 DEBUG2(printk("scsi%ld: %s: Get EEProm parameters \n", ha->host_no, in qla4xxx_config_nvram()
605 if (ql4xxx_lock_flash(ha) != QLA_SUCCESS) in qla4xxx_config_nvram()
607 if (ql4xxx_lock_nvram(ha) != QLA_SUCCESS) { in qla4xxx_config_nvram()
608 ql4xxx_unlock_flash(ha); in qla4xxx_config_nvram()
613 ql4_printk(KERN_INFO, ha, "Configuring NVRAM ...\n"); in qla4xxx_config_nvram()
614 if (qla4xxx_is_nvram_configuration_valid(ha) == QLA_SUCCESS) { in qla4xxx_config_nvram()
615 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_config_nvram()
617 rd_nvram_word(ha, eeprom_ext_hw_conf_offset(ha)); in qla4xxx_config_nvram()
618 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_config_nvram()
620 ql4_printk(KERN_WARNING, ha, in qla4xxx_config_nvram()
622 "Please update your EEPROM\n", ha->host_no, in qla4xxx_config_nvram()
626 if (is_qla4010(ha)) in qla4xxx_config_nvram()
628 else if (is_qla4022(ha) | is_qla4032(ha)) in qla4xxx_config_nvram()
634 if (is_qla4022(ha) || is_qla4032(ha)) in qla4xxx_config_nvram()
635 qla4xxx_set_model_info(ha); in qla4xxx_config_nvram()
637 strcpy(ha->model_name, "QLA4010"); in qla4xxx_config_nvram()
640 ha->host_no, __func__, extHwConfig.Asuint32_t)); in qla4xxx_config_nvram()
642 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_config_nvram()
643 writel((0xFFFF << 16) | extHwConfig.Asuint32_t, isp_ext_hw_conf(ha)); in qla4xxx_config_nvram()
644 readl(isp_ext_hw_conf(ha)); in qla4xxx_config_nvram()
645 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_config_nvram()
647 ql4xxx_unlock_nvram(ha); in qla4xxx_config_nvram()
648 ql4xxx_unlock_flash(ha); in qla4xxx_config_nvram()
657 void qla4_8xxx_pci_config(struct scsi_qla_host *ha) in qla4_8xxx_pci_config() argument
659 pci_set_master(ha->pdev); in qla4_8xxx_pci_config()
662 void qla4xxx_pci_config(struct scsi_qla_host *ha) in qla4xxx_pci_config() argument
667 ql4_printk(KERN_INFO, ha, "Configuring PCI space...\n"); in qla4xxx_pci_config()
669 pci_set_master(ha->pdev); in qla4xxx_pci_config()
670 status = pci_set_mwi(ha->pdev); in qla4xxx_pci_config()
676 pci_read_config_word(ha->pdev, PCI_COMMAND, &w); in qla4xxx_pci_config()
679 pci_write_config_word(ha->pdev, PCI_COMMAND, w); in qla4xxx_pci_config()
682 static int qla4xxx_start_firmware_from_flash(struct scsi_qla_host *ha) in qla4xxx_start_firmware_from_flash() argument
689 ql4_printk(KERN_INFO, ha, "Starting firmware ...\n"); in qla4xxx_start_firmware_from_flash()
701 ha->host_no, __func__)); in qla4xxx_start_firmware_from_flash()
703 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_start_firmware_from_flash()
704 writel(jiffies, &ha->reg->mailbox[7]); in qla4xxx_start_firmware_from_flash()
705 if (is_qla4022(ha) | is_qla4032(ha)) in qla4xxx_start_firmware_from_flash()
707 &ha->reg->u1.isp4022.nvram); in qla4xxx_start_firmware_from_flash()
709 writel(2, &ha->reg->mailbox[6]); in qla4xxx_start_firmware_from_flash()
710 readl(&ha->reg->mailbox[6]); in qla4xxx_start_firmware_from_flash()
712 writel(set_rmask(CSR_BOOT_ENABLE), &ha->reg->ctrl_status); in qla4xxx_start_firmware_from_flash()
713 readl(&ha->reg->ctrl_status); in qla4xxx_start_firmware_from_flash()
714 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_start_firmware_from_flash()
719 ha->host_no, __func__, FIRMWARE_UP_TOV)); in qla4xxx_start_firmware_from_flash()
724 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_start_firmware_from_flash()
725 ctrl_status = readw(&ha->reg->ctrl_status); in qla4xxx_start_firmware_from_flash()
726 mbox_status = readw(&ha->reg->mailbox[0]); in qla4xxx_start_firmware_from_flash()
727 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_start_firmware_from_flash()
736 ha->host_no, __func__, ctrl_status, max_wait_time)); in qla4xxx_start_firmware_from_flash()
743 ha->host_no, __func__)); in qla4xxx_start_firmware_from_flash()
745 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_start_firmware_from_flash()
747 &ha->reg->ctrl_status); in qla4xxx_start_firmware_from_flash()
748 readl(&ha->reg->ctrl_status); in qla4xxx_start_firmware_from_flash()
749 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_start_firmware_from_flash()
754 "- mbox status 0x%x\n", ha->host_no, __func__, in qla4xxx_start_firmware_from_flash()
793 int qla4xxx_start_firmware(struct scsi_qla_host *ha) in qla4xxx_start_firmware() argument
801 if (is_qla4022(ha) | is_qla4032(ha)) in qla4xxx_start_firmware()
802 ql4xxx_set_mac_number(ha); in qla4xxx_start_firmware()
804 if (ql4xxx_lock_drvr_wait(ha) != QLA_SUCCESS) in qla4xxx_start_firmware()
807 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_start_firmware()
809 DEBUG2(printk("scsi%ld: %s: port_ctrl = 0x%08X\n", ha->host_no, in qla4xxx_start_firmware()
810 __func__, readw(isp_port_ctrl(ha)))); in qla4xxx_start_firmware()
811 DEBUG(printk("scsi%ld: %s: port_status = 0x%08X\n", ha->host_no, in qla4xxx_start_firmware()
812 __func__, readw(isp_port_status(ha)))); in qla4xxx_start_firmware()
815 if ((readw(isp_port_ctrl(ha)) & 0x8000) != 0) { in qla4xxx_start_firmware()
817 "initialized\n", ha->host_no, __func__)); in qla4xxx_start_firmware()
820 mbox_status = readw(&ha->reg->mailbox[0]); in qla4xxx_start_firmware()
823 "0x%x\n", ha->host_no, __func__, mbox_status)); in qla4xxx_start_firmware()
832 &ha->reg->ctrl_status); in qla4xxx_start_firmware()
833 readl(&ha->reg->ctrl_status); in qla4xxx_start_firmware()
835 &ha->reg->ctrl_status); in qla4xxx_start_firmware()
836 readl(&ha->reg->ctrl_status); in qla4xxx_start_firmware()
837 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_start_firmware()
838 if (qla4xxx_get_firmware_state(ha) == QLA_SUCCESS) { in qla4xxx_start_firmware()
841 ha->host_no, in qla4xxx_start_firmware()
842 __func__, ha->firmware_state)); in qla4xxx_start_firmware()
844 if (ha->firmware_state & in qla4xxx_start_firmware()
850 ha->host_no, __func__, in qla4xxx_start_firmware()
851 ha->firmware_state)); in qla4xxx_start_firmware()
859 "0x%x\n", ha->host_no, __func__, in qla4xxx_start_firmware()
860 ha->firmware_state)); in qla4xxx_start_firmware()
862 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_start_firmware()
866 "started - resetting\n", ha->host_no, __func__)); in qla4xxx_start_firmware()
868 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_start_firmware()
871 ha->host_no, __func__, soft_reset, config_chip)); in qla4xxx_start_firmware()
873 DEBUG(printk("scsi%ld: %s: Issue Soft Reset\n", ha->host_no, in qla4xxx_start_firmware()
875 status = qla4xxx_soft_reset(ha); /* NOTE: acquires drvr in qla4xxx_start_firmware()
879 ha->host_no, __func__)); in qla4xxx_start_firmware()
880 ql4xxx_unlock_drvr(ha); in qla4xxx_start_firmware()
886 if (ql4xxx_lock_drvr_wait(ha) != QLA_SUCCESS) in qla4xxx_start_firmware()
891 if ((status = qla4xxx_config_nvram(ha)) == QLA_SUCCESS) in qla4xxx_start_firmware()
892 status = qla4xxx_start_firmware_from_flash(ha); in qla4xxx_start_firmware()
895 ql4xxx_unlock_drvr(ha); in qla4xxx_start_firmware()
897 if (test_and_clear_bit(AF_GET_CRASH_RECORD, &ha->flags)) in qla4xxx_start_firmware()
898 qla4xxx_get_crash_record(ha); in qla4xxx_start_firmware()
900 qla4xxx_init_rings(ha); in qla4xxx_start_firmware()
903 ha->host_no, __func__)); in qla4xxx_start_firmware()
915 void qla4xxx_free_ddb_index(struct scsi_qla_host *ha) in qla4xxx_free_ddb_index() argument
922 max_ddbs = is_qla40XX(ha) ? MAX_DEV_DB_ENTRIES_40XX : in qla4xxx_free_ddb_index()
926 ret = qla4xxx_get_fwddb_entry(ha, idx, NULL, 0, NULL, in qla4xxx_free_ddb_index()
935 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_free_ddb_index()
937 ret = qla4xxx_clear_ddb_entry(ha, idx); in qla4xxx_free_ddb_index()
939 ql4_printk(KERN_ERR, ha, in qla4xxx_free_ddb_index()
955 int qla4xxx_initialize_adapter(struct scsi_qla_host *ha, int is_reset) in qla4xxx_initialize_adapter() argument
959 ha->eeprom_cmd_data = 0; in qla4xxx_initialize_adapter()
961 ql4_printk(KERN_INFO, ha, "Configuring PCI space...\n"); in qla4xxx_initialize_adapter()
962 ha->isp_ops->pci_config(ha); in qla4xxx_initialize_adapter()
964 ha->isp_ops->disable_intrs(ha); in qla4xxx_initialize_adapter()
967 if (ha->isp_ops->start_firmware(ha) == QLA_ERROR) in qla4xxx_initialize_adapter()
977 if (is_qla8032(ha) || is_qla8042(ha)) in qla4xxx_initialize_adapter()
978 qla4_83xx_enable_mbox_intrs(ha); in qla4xxx_initialize_adapter()
980 if (qla4xxx_about_firmware(ha) == QLA_ERROR) in qla4xxx_initialize_adapter()
983 if (ha->isp_ops->get_sys_info(ha) == QLA_ERROR) in qla4xxx_initialize_adapter()
986 qla4xxx_init_local_data(ha); in qla4xxx_initialize_adapter()
988 status = qla4xxx_init_firmware(ha); in qla4xxx_initialize_adapter()
993 qla4xxx_build_ddb_list(ha, is_reset); in qla4xxx_initialize_adapter()
995 set_bit(AF_ONLINE, &ha->flags); in qla4xxx_initialize_adapter()
998 DEBUG2(printk("scsi%ld: initialize adapter: %s\n", ha->host_no, in qla4xxx_initialize_adapter()
1003 int qla4xxx_ddb_change(struct scsi_qla_host *ha, uint32_t fw_ddb_index, in qla4xxx_ddb_change() argument
1010 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_ddb_change()
1022 qla4xxx_update_session_conn_param(ha, ddb_entry); in qla4xxx_ddb_change()
1048 clear_bit(fw_ddb_index, ha->ddb_idx_map); in qla4xxx_ddb_change()
1058 qla4xxx_update_session_conn_param(ha, ddb_entry); in qla4xxx_ddb_change()
1069 DEBUG2(ql4_printk(KERN_INFO, ha, "%s: Unknown Event\n", in qla4xxx_ddb_change()
1097 int qla4xxx_flash_ddb_change(struct scsi_qla_host *ha, uint32_t fw_ddb_index, in qla4xxx_flash_ddb_change() argument
1104 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_flash_ddb_change()
1117 qla4xxx_update_session_conn_fwddb_param(ha, ddb_entry); in qla4xxx_flash_ddb_change()
1142 qla4xxx_update_session_conn_fwddb_param(ha, ddb_entry); in qla4xxx_flash_ddb_change()
1153 DEBUG2(ql4_printk(KERN_INFO, ha, "%s: Unknown Event\n", in qla4xxx_flash_ddb_change()
1168 int qla4xxx_process_ddb_changed(struct scsi_qla_host *ha, in qla4xxx_process_ddb_changed() argument
1180 ddb_entry = qla4xxx_lookup_ddb_by_fw_index(ha, fw_ddb_index); in qla4xxx_process_ddb_changed()
1183 ql4_printk(KERN_ERR, ha, "%s: No ddb_entry at FW index [%d]\n", in qla4xxx_process_ddb_changed()
1187 clear_bit(fw_ddb_index, ha->ddb_idx_map); in qla4xxx_process_ddb_changed()
1192 ddb_entry->ddb_change(ha, fw_ddb_index, ddb_entry, state); in qla4xxx_process_ddb_changed()
1209 struct scsi_qla_host *ha; in qla4xxx_login_flash_ddb() local
1217 ha = ddb_entry->ha; in qla4xxx_login_flash_ddb()
1219 if (!test_bit(AF_LINK_UP, &ha->flags)) in qla4xxx_login_flash_ddb()
1223 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_login_flash_ddb()
1228 fw_ddb_entry = dma_pool_alloc(ha->fw_ddb_dma_pool, GFP_KERNEL, in qla4xxx_login_flash_ddb()
1231 DEBUG2(ql4_printk(KERN_ERR, ha, "Out of memory\n")); in qla4xxx_login_flash_ddb()
1236 ret = qla4xxx_get_ddb_index(ha, &ddb_entry->fw_ddb_index); in qla4xxx_login_flash_ddb()
1240 ha->fw_ddb_index_map[ddb_entry->fw_ddb_index] = ddb_entry; in qla4xxx_login_flash_ddb()
1241 ha->tot_ddbs++; in qla4xxx_login_flash_ddb()
1248 ret = qla4xxx_set_ddb_entry(ha, ddb_entry->fw_ddb_index, in qla4xxx_login_flash_ddb()
1251 DEBUG2(ql4_printk(KERN_ERR, ha, "Set DDB failed\n")); in qla4xxx_login_flash_ddb()
1256 ret = qla4xxx_conn_open(ha, ddb_entry->fw_ddb_index); in qla4xxx_login_flash_ddb()
1258 ql4_printk(KERN_ERR, ha, "%s: Login failed: %s\n", __func__, in qla4xxx_login_flash_ddb()
1265 dma_pool_free(ha->fw_ddb_dma_pool, fw_ddb_entry, fw_ddb_dma); in qla4xxx_login_flash_ddb()