Lines Matching refs:ha
14 static struct ddb_entry * qla4xxx_alloc_ddb(struct scsi_qla_host *ha,
17 static void ql4xxx_set_mac_number(struct scsi_qla_host *ha) in ql4xxx_set_mac_number() argument
24 spin_lock_irqsave(&ha->hardware_lock, flags); in ql4xxx_set_mac_number()
25 value = readw(&ha->reg->ctrl_status); in ql4xxx_set_mac_number()
26 spin_unlock_irqrestore(&ha->hardware_lock, flags); in ql4xxx_set_mac_number()
31 ha->mac_index = 1; in ql4xxx_set_mac_number()
34 ha->mac_index = 3; in ql4xxx_set_mac_number()
38 "ispControlStatus = 0x%x\n", ha->host_no, in ql4xxx_set_mac_number()
42 DEBUG2(printk("scsi%ld: %s: mac_index %d.\n", ha->host_no, __func__, in ql4xxx_set_mac_number()
43 ha->mac_index)); in ql4xxx_set_mac_number()
54 static void qla4xxx_free_ddb(struct scsi_qla_host *ha, in qla4xxx_free_ddb() argument
61 ha->fw_ddb_index_map[ddb_entry->fw_ddb_index] = in qla4xxx_free_ddb()
63 ha->tot_ddbs--; in qla4xxx_free_ddb()
75 void qla4xxx_free_ddb_list(struct scsi_qla_host *ha) in qla4xxx_free_ddb_list() argument
80 while (!list_empty(&ha->ddb_list)) { in qla4xxx_free_ddb_list()
81 ptr = ha->ddb_list.next; in qla4xxx_free_ddb_list()
84 qla4xxx_free_ddb(ha, ddb_entry); in qla4xxx_free_ddb_list()
96 int qla4xxx_init_rings(struct scsi_qla_host *ha) in qla4xxx_init_rings() argument
101 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_init_rings()
102 ha->request_out = 0; in qla4xxx_init_rings()
103 ha->request_in = 0; in qla4xxx_init_rings()
104 ha->request_ptr = &ha->request_ring[ha->request_in]; in qla4xxx_init_rings()
105 ha->req_q_count = REQUEST_QUEUE_DEPTH; in qla4xxx_init_rings()
108 ha->response_in = 0; in qla4xxx_init_rings()
109 ha->response_out = 0; in qla4xxx_init_rings()
110 ha->response_ptr = &ha->response_ring[ha->response_out]; in qla4xxx_init_rings()
118 ha->shadow_regs->req_q_out = __constant_cpu_to_le32(0); in qla4xxx_init_rings()
119 ha->shadow_regs->rsp_q_in = __constant_cpu_to_le32(0); in qla4xxx_init_rings()
122 writel(0, &ha->reg->req_q_in); in qla4xxx_init_rings()
123 writel(0, &ha->reg->rsp_q_out); in qla4xxx_init_rings()
124 readl(&ha->reg->rsp_q_out); in qla4xxx_init_rings()
126 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_init_rings()
136 static int qla4xxx_validate_mac_address(struct scsi_qla_host *ha) in qla4xxx_validate_mac_address() argument
142 sys_info = dma_alloc_coherent(&ha->pdev->dev, sizeof(*sys_info), in qla4xxx_validate_mac_address()
146 ha->host_no, __func__)); in qla4xxx_validate_mac_address()
153 if (qla4xxx_get_flash(ha, sys_info_dma, FLASH_OFFSET_SYS_INFO, in qla4xxx_validate_mac_address()
156 "failed\n", ha->host_no, __func__)); in qla4xxx_validate_mac_address()
162 memcpy(ha->my_mac, &sys_info->physAddr[0].address[0], in qla4xxx_validate_mac_address()
163 min(sizeof(ha->my_mac), in qla4xxx_validate_mac_address()
165 memcpy(ha->serial_number, &sys_info->acSerialNumber, in qla4xxx_validate_mac_address()
166 min(sizeof(ha->serial_number), in qla4xxx_validate_mac_address()
172 dma_free_coherent(&ha->pdev->dev, sizeof(*sys_info), sys_info, in qla4xxx_validate_mac_address()
184 static int qla4xxx_init_local_data(struct scsi_qla_host *ha) in qla4xxx_init_local_data() argument
187 ha->aen_q_count = MAX_AEN_ENTRIES; in qla4xxx_init_local_data()
189 return qla4xxx_get_firmware_status(ha); in qla4xxx_init_local_data()
192 static int qla4xxx_fw_ready(struct scsi_qla_host *ha) in qla4xxx_fw_ready() argument
197 DEBUG2(dev_info(&ha->pdev->dev, "Waiting for Firmware Ready..\n")); in qla4xxx_fw_ready()
200 if (test_and_clear_bit(DPC_GET_DHCP_IP_ADDR, &ha->dpc_flags)) in qla4xxx_fw_ready()
201 qla4xxx_get_dhcp_ip_address(ha); in qla4xxx_fw_ready()
204 if (qla4xxx_get_firmware_state(ha) != QLA_SUCCESS) { in qla4xxx_fw_ready()
206 "state\n", ha->host_no, __func__)); in qla4xxx_fw_ready()
211 if (ha->firmware_state & FW_STATE_ERROR) { in qla4xxx_fw_ready()
213 " occurred\n", ha->host_no, __func__)); in qla4xxx_fw_ready()
217 if (ha->firmware_state & FW_STATE_CONFIG_WAIT) { in qla4xxx_fw_ready()
222 if (qla4xxx_initialize_fw_cb(ha) == QLA_ERROR) in qla4xxx_fw_ready()
229 if (ha->firmware_state == FW_STATE_READY) { in qla4xxx_fw_ready()
230 DEBUG2(dev_info(&ha->pdev->dev, "Firmware Ready..\n")); in qla4xxx_fw_ready()
232 DEBUG2(dev_info(&ha->pdev->dev, in qla4xxx_fw_ready()
234 ha->host_no, in qla4xxx_fw_ready()
235 __func__, (ha->addl_fw_state & in qla4xxx_fw_ready()
238 DEBUG2(dev_info(&ha->pdev->dev, in qla4xxx_fw_ready()
241 ha->host_no, __func__, in qla4xxx_fw_ready()
242 (ha->addl_fw_state & in qla4xxx_fw_ready()
245 DEBUG2(dev_info(&ha->pdev->dev, in qla4xxx_fw_ready()
247 ha->host_no, __func__, in qla4xxx_fw_ready()
248 (ha->addl_fw_state & in qla4xxx_fw_ready()
251 DEBUG2(dev_info(&ha->pdev->dev, in qla4xxx_fw_ready()
254 ha->host_no, __func__, in qla4xxx_fw_ready()
255 (ha->addl_fw_state & in qla4xxx_fw_ready()
263 "seconds expired= %d\n", ha->host_no, __func__, in qla4xxx_fw_ready()
264 ha->firmware_state, ha->addl_fw_state, in qla4xxx_fw_ready()
266 if (is_qla4032(ha) && in qla4xxx_fw_ready()
267 !(ha->addl_fw_state & FW_ADDSTATE_LINK_UP) && in qla4xxx_fw_ready()
277 ha->host_no, __func__)); in qla4xxx_fw_ready()
279 if (ha->firmware_state & FW_STATE_DHCP_IN_PROGRESS) { in qla4xxx_fw_ready()
282 ha->host_no, __func__)); in qla4xxx_fw_ready()
294 static int qla4xxx_init_firmware(struct scsi_qla_host *ha) in qla4xxx_init_firmware() argument
298 dev_info(&ha->pdev->dev, "Initializing firmware..\n"); in qla4xxx_init_firmware()
299 if (qla4xxx_initialize_fw_cb(ha) == QLA_ERROR) { in qla4xxx_init_firmware()
301 "control block\n", ha->host_no, __func__)); in qla4xxx_init_firmware()
304 if (!qla4xxx_fw_ready(ha)) in qla4xxx_init_firmware()
307 return qla4xxx_get_firmware_status(ha); in qla4xxx_init_firmware()
310 static struct ddb_entry* qla4xxx_get_ddb_entry(struct scsi_qla_host *ha, in qla4xxx_get_ddb_entry() argument
322 fw_ddb_entry = dma_alloc_coherent(&ha->pdev->dev, in qla4xxx_get_ddb_entry()
327 ha->host_no, __func__)); in qla4xxx_get_ddb_entry()
331 if (qla4xxx_get_fwddb_entry(ha, fw_ddb_index, fw_ddb_entry, in qla4xxx_get_ddb_entry()
336 "fw_ddb_index %d\n", ha->host_no, __func__, in qla4xxx_get_ddb_entry()
342 DEBUG2(printk("scsi%ld: %s: Looking for ddb[%d]\n", ha->host_no, in qla4xxx_get_ddb_entry()
344 list_for_each_entry(ddb_entry, &ha->ddb_list, list) { in qla4xxx_get_ddb_entry()
358 "new ddb\n", ha->host_no, __func__, in qla4xxx_get_ddb_entry()
361 ddb_entry = qla4xxx_alloc_ddb(ha, fw_ddb_index); in qla4xxx_get_ddb_entry()
365 dma_free_coherent(&ha->pdev->dev, sizeof(*fw_ddb_entry), fw_ddb_entry, in qla4xxx_get_ddb_entry()
383 static int qla4xxx_update_ddb_entry(struct scsi_qla_host *ha, in qla4xxx_update_ddb_entry() argument
392 DEBUG2(printk("scsi%ld: %s: ddb_entry is NULL\n", ha->host_no, in qla4xxx_update_ddb_entry()
398 fw_ddb_entry = dma_alloc_coherent(&ha->pdev->dev, in qla4xxx_update_ddb_entry()
403 ha->host_no, __func__)); in qla4xxx_update_ddb_entry()
408 if (qla4xxx_get_fwddb_entry(ha, fw_ddb_index, fw_ddb_entry, in qla4xxx_update_ddb_entry()
415 "fw_ddb_index %d\n", ha->host_no, __func__, in qla4xxx_update_ddb_entry()
433 ha->fw_ddb_index_map[fw_ddb_index] = ddb_entry; in qla4xxx_update_ddb_entry()
446 ha->host_no, __func__, fw_ddb_index, in qla4xxx_update_ddb_entry()
451 dma_free_coherent(&ha->pdev->dev, sizeof(*fw_ddb_entry), in qla4xxx_update_ddb_entry()
465 static struct ddb_entry * qla4xxx_alloc_ddb(struct scsi_qla_host *ha, in qla4xxx_alloc_ddb() argument
470 DEBUG2(printk("scsi%ld: %s: fw_ddb_index [%d]\n", ha->host_no, in qla4xxx_alloc_ddb()
473 ddb_entry = qla4xxx_alloc_sess(ha); in qla4xxx_alloc_ddb()
477 ha->host_no, __func__, fw_ddb_index)); in qla4xxx_alloc_ddb()
482 atomic_set(&ddb_entry->port_down_timer, ha->port_down_retry_count); in qla4xxx_alloc_ddb()
487 list_add_tail(&ddb_entry->list, &ha->ddb_list); in qla4xxx_alloc_ddb()
488 ha->fw_ddb_index_map[fw_ddb_index] = ddb_entry; in qla4xxx_alloc_ddb()
489 ha->tot_ddbs++; in qla4xxx_alloc_ddb()
502 static int qla4xxx_build_ddb_list(struct scsi_qla_host *ha) in qla4xxx_build_ddb_list() argument
512 dev_info(&ha->pdev->dev, "Initializing DDBs ...\n"); in qla4xxx_build_ddb_list()
516 if (qla4xxx_get_fwddb_entry(ha, fw_ddb_index, NULL, 0, NULL, in qla4xxx_build_ddb_list()
521 "fw_ddb_index %d failed", ha->host_no, in qla4xxx_build_ddb_list()
527 "next_fw_ddb_index=%d.\n", ha->host_no, __func__, in qla4xxx_build_ddb_list()
535 ha->host_no, __func__, fw_ddb_index)); in qla4xxx_build_ddb_list()
541 ha->host_no, __func__)); in qla4xxx_build_ddb_list()
543 qla4xxx_set_ddb_entry(ha, fw_ddb_index, 0); in qla4xxx_build_ddb_list()
544 if (qla4xxx_get_fwddb_entry(ha, fw_ddb_index, in qla4xxx_build_ddb_list()
550 ha->host_no, in qla4xxx_build_ddb_list()
564 ha->host_no, __func__, fw_ddb_index)); in qla4xxx_build_ddb_list()
567 ddb_entry = qla4xxx_get_ddb_entry(ha, fw_ddb_index, &new_tgt); in qla4xxx_build_ddb_list()
571 ha->host_no, __func__, fw_ddb_index)); in qla4xxx_build_ddb_list()
575 if (qla4xxx_update_ddb_entry(ha, ddb_entry, fw_ddb_index) == in qla4xxx_build_ddb_list()
577 ha->fw_ddb_index_map[fw_ddb_index] = in qla4xxx_build_ddb_list()
583 ha->host_no, __func__, fw_ddb_index)); in qla4xxx_build_ddb_list()
594 dev_info(&ha->pdev->dev, "DDB list done..\n"); in qla4xxx_build_ddb_list()
608 static int qla4_test_rdy(struct scsi_qla_host *ha, struct qla4_relog_scan *rs) in qla4_test_rdy() argument
622 ha->host_no, __func__)); in qla4_test_rdy()
630 ddb_entry = qla4xxx_lookup_ddb_by_fw_index(ha, in qla4_test_rdy()
641 qla4xxx_set_ddb_entry(ha, rs->fw_ddb_index, 0); in qla4_test_rdy()
647 static int qla4_scan_for_relogin(struct scsi_qla_host *ha, in qla4_scan_for_relogin() argument
656 if (qla4xxx_get_fwddb_entry(ha, rs->fw_ddb_index, NULL, 0, in qla4_scan_for_relogin()
668 error = qla4_test_rdy(ha, rs); in qla4_scan_for_relogin()
688 static int qla4xxx_devices_ready(struct scsi_qla_host *ha) in qla4xxx_devices_ready() argument
699 qla4xxx_get_firmware_state(ha); in qla4xxx_devices_ready()
700 if (test_and_clear_bit(DPC_AEN, &ha->dpc_flags)) { in qla4xxx_devices_ready()
702 qla4xxx_process_aen(ha, RELOGIN_DDB_CHANGED_AENS); in qla4xxx_devices_ready()
708 error = qla4_scan_for_relogin(ha, &rs); in qla4xxx_devices_ready()
712 "Ready.\n", ha->host_no, __func__)); in qla4xxx_devices_ready()
719 DEBUG3(qla4xxx_get_conn_event_log(ha)); in qla4xxx_devices_ready()
724 static void qla4xxx_flush_AENS(struct scsi_qla_host *ha) in qla4xxx_flush_AENS() argument
737 if (qla4xxx_get_firmware_state(ha) == QLA_SUCCESS) in qla4xxx_flush_AENS()
738 if (ha->firmware_state & (BIT_2 | BIT_0)) in qla4xxx_flush_AENS()
741 if (test_and_clear_bit(DPC_AEN, &ha->dpc_flags)) in qla4xxx_flush_AENS()
742 qla4xxx_process_aen(ha, FLUSH_DDB_CHANGED_AENS); in qla4xxx_flush_AENS()
749 static int qla4xxx_initialize_ddb_list(struct scsi_qla_host *ha) in qla4xxx_initialize_ddb_list() argument
755 if (!list_empty(&ha->ddb_list)) in qla4xxx_initialize_ddb_list()
756 qla4xxx_free_ddb_list(ha); in qla4xxx_initialize_ddb_list()
759 ha->fw_ddb_index_map[fw_ddb_index] = in qla4xxx_initialize_ddb_list()
762 ha->tot_ddbs = 0; in qla4xxx_initialize_ddb_list()
764 qla4xxx_flush_AENS(ha); in qla4xxx_initialize_ddb_list()
771 if ((status = qla4xxx_build_ddb_list(ha)) == QLA_ERROR) in qla4xxx_initialize_ddb_list()
775 qla4xxx_devices_ready(ha); in qla4xxx_initialize_ddb_list()
781 if (test_and_clear_bit(DPC_AEN, &ha->dpc_flags)) in qla4xxx_initialize_ddb_list()
782 qla4xxx_process_aen(ha, PROCESS_ALL_AENS); in qla4xxx_initialize_ddb_list()
794 int qla4xxx_reinitialize_ddb_list(struct scsi_qla_host *ha) in qla4xxx_reinitialize_ddb_list() argument
800 list_for_each_entry_safe(ddb_entry, detemp, &ha->ddb_list, list) { in qla4xxx_reinitialize_ddb_list()
801 qla4xxx_update_ddb_entry(ha, ddb_entry, in qla4xxx_reinitialize_ddb_list()
806 "ONLINE\n", ha->host_no, __func__, in qla4xxx_reinitialize_ddb_list()
809 qla4xxx_mark_device_missing(ha, ddb_entry); in qla4xxx_reinitialize_ddb_list()
822 int qla4xxx_relogin_device(struct scsi_qla_host *ha, in qla4xxx_relogin_device() argument
831 DEBUG2(printk("scsi%ld: Relogin index [%d]. TOV=%d\n", ha->host_no, in qla4xxx_relogin_device()
834 qla4xxx_set_ddb_entry(ha, ddb_entry->fw_ddb_index, 0); in qla4xxx_relogin_device()
839 static int qla4xxx_config_nvram(struct scsi_qla_host *ha) in qla4xxx_config_nvram() argument
844 DEBUG2(printk("scsi%ld: %s: Get EEProm parameters \n", ha->host_no, in qla4xxx_config_nvram()
846 if (ql4xxx_lock_flash(ha) != QLA_SUCCESS) in qla4xxx_config_nvram()
848 if (ql4xxx_lock_nvram(ha) != QLA_SUCCESS) { in qla4xxx_config_nvram()
849 ql4xxx_unlock_flash(ha); in qla4xxx_config_nvram()
854 dev_info(&ha->pdev->dev, "Configuring NVRAM ...\n"); in qla4xxx_config_nvram()
855 if (qla4xxx_is_nvram_configuration_valid(ha) == QLA_SUCCESS) { in qla4xxx_config_nvram()
856 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_config_nvram()
858 rd_nvram_word(ha, eeprom_ext_hw_conf_offset(ha)); in qla4xxx_config_nvram()
859 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_config_nvram()
865 dev_warn(&ha->pdev->dev, in qla4xxx_config_nvram()
867 "Please update your EEPROM\n", ha->host_no, in qla4xxx_config_nvram()
871 if (is_qla4010(ha)) in qla4xxx_config_nvram()
873 else if (is_qla4022(ha) | is_qla4032(ha)) in qla4xxx_config_nvram()
877 ha->host_no, __func__, extHwConfig.Asuint32_t)); in qla4xxx_config_nvram()
879 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_config_nvram()
880 writel((0xFFFF << 16) | extHwConfig.Asuint32_t, isp_ext_hw_conf(ha)); in qla4xxx_config_nvram()
881 readl(isp_ext_hw_conf(ha)); in qla4xxx_config_nvram()
882 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_config_nvram()
884 ql4xxx_unlock_nvram(ha); in qla4xxx_config_nvram()
885 ql4xxx_unlock_flash(ha); in qla4xxx_config_nvram()
890 static void qla4x00_pci_config(struct scsi_qla_host *ha) in qla4x00_pci_config() argument
895 dev_info(&ha->pdev->dev, "Configuring PCI space...\n"); in qla4x00_pci_config()
897 pci_set_master(ha->pdev); in qla4x00_pci_config()
898 status = pci_set_mwi(ha->pdev); in qla4x00_pci_config()
904 pci_read_config_word(ha->pdev, PCI_COMMAND, &w); in qla4x00_pci_config()
907 pci_write_config_word(ha->pdev, PCI_COMMAND, w); in qla4x00_pci_config()
910 static int qla4xxx_start_firmware_from_flash(struct scsi_qla_host *ha) in qla4xxx_start_firmware_from_flash() argument
917 dev_info(&ha->pdev->dev, "Starting firmware ...\n"); in qla4xxx_start_firmware_from_flash()
929 ha->host_no, __func__)); in qla4xxx_start_firmware_from_flash()
931 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_start_firmware_from_flash()
932 writel(jiffies, &ha->reg->mailbox[7]); in qla4xxx_start_firmware_from_flash()
933 if (is_qla4022(ha) | is_qla4032(ha)) in qla4xxx_start_firmware_from_flash()
935 &ha->reg->u1.isp4022.nvram); in qla4xxx_start_firmware_from_flash()
937 writel(2, &ha->reg->mailbox[6]); in qla4xxx_start_firmware_from_flash()
938 readl(&ha->reg->mailbox[6]); in qla4xxx_start_firmware_from_flash()
940 writel(set_rmask(CSR_BOOT_ENABLE), &ha->reg->ctrl_status); in qla4xxx_start_firmware_from_flash()
941 readl(&ha->reg->ctrl_status); in qla4xxx_start_firmware_from_flash()
942 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_start_firmware_from_flash()
949 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_start_firmware_from_flash()
950 ctrl_status = readw(&ha->reg->ctrl_status); in qla4xxx_start_firmware_from_flash()
951 mbox_status = readw(&ha->reg->mailbox[0]); in qla4xxx_start_firmware_from_flash()
952 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_start_firmware_from_flash()
961 ha->host_no, __func__, ctrl_status, in qla4xxx_start_firmware_from_flash()
969 ha->host_no, __func__)); in qla4xxx_start_firmware_from_flash()
971 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_start_firmware_from_flash()
973 &ha->reg->ctrl_status); in qla4xxx_start_firmware_from_flash()
974 readl(&ha->reg->ctrl_status); in qla4xxx_start_firmware_from_flash()
975 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_start_firmware_from_flash()
980 "- mbox status 0x%x\n", ha->host_no, __func__, in qla4xxx_start_firmware_from_flash()
1019 static int qla4xxx_start_firmware(struct scsi_qla_host *ha) in qla4xxx_start_firmware() argument
1027 if (is_qla4022(ha) | is_qla4032(ha)) in qla4xxx_start_firmware()
1028 ql4xxx_set_mac_number(ha); in qla4xxx_start_firmware()
1030 if (ql4xxx_lock_drvr_wait(ha) != QLA_SUCCESS) in qla4xxx_start_firmware()
1033 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_start_firmware()
1035 DEBUG2(printk("scsi%ld: %s: port_ctrl = 0x%08X\n", ha->host_no, in qla4xxx_start_firmware()
1036 __func__, readw(isp_port_ctrl(ha)))); in qla4xxx_start_firmware()
1037 DEBUG(printk("scsi%ld: %s: port_status = 0x%08X\n", ha->host_no, in qla4xxx_start_firmware()
1038 __func__, readw(isp_port_status(ha)))); in qla4xxx_start_firmware()
1041 if ((readw(isp_port_ctrl(ha)) & 0x8000) != 0) { in qla4xxx_start_firmware()
1043 "initialized\n", ha->host_no, __func__)); in qla4xxx_start_firmware()
1046 mbox_status = readw(&ha->reg->mailbox[0]); in qla4xxx_start_firmware()
1049 "0x%x\n", ha->host_no, __func__, mbox_status)); in qla4xxx_start_firmware()
1058 &ha->reg->ctrl_status); in qla4xxx_start_firmware()
1059 readl(&ha->reg->ctrl_status); in qla4xxx_start_firmware()
1060 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_start_firmware()
1061 if (qla4xxx_get_firmware_state(ha) == QLA_SUCCESS) { in qla4xxx_start_firmware()
1064 ha->host_no, in qla4xxx_start_firmware()
1065 __func__, ha->firmware_state)); in qla4xxx_start_firmware()
1067 if (ha->firmware_state & in qla4xxx_start_firmware()
1073 ha->host_no, __func__, in qla4xxx_start_firmware()
1074 ha->firmware_state)); in qla4xxx_start_firmware()
1082 "0x%x\n", ha->host_no, __func__, in qla4xxx_start_firmware()
1083 ha->firmware_state)); in qla4xxx_start_firmware()
1085 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_start_firmware()
1089 "started - resetting\n", ha->host_no, __func__)); in qla4xxx_start_firmware()
1091 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_start_firmware()
1094 ha->host_no, __func__, soft_reset, config_chip)); in qla4xxx_start_firmware()
1096 DEBUG(printk("scsi%ld: %s: Issue Soft Reset\n", ha->host_no, in qla4xxx_start_firmware()
1098 status = qla4xxx_soft_reset(ha); in qla4xxx_start_firmware()
1101 ha->host_no, __func__)); in qla4xxx_start_firmware()
1102 ql4xxx_unlock_drvr(ha); in qla4xxx_start_firmware()
1108 if (ql4xxx_lock_drvr_wait(ha) != QLA_SUCCESS) in qla4xxx_start_firmware()
1113 if ((status = qla4xxx_config_nvram(ha)) == QLA_SUCCESS) in qla4xxx_start_firmware()
1114 status = qla4xxx_start_firmware_from_flash(ha); in qla4xxx_start_firmware()
1117 ql4xxx_unlock_drvr(ha); in qla4xxx_start_firmware()
1119 qla4xxx_get_fw_version(ha); in qla4xxx_start_firmware()
1120 if (test_and_clear_bit(AF_GET_CRASH_RECORD, &ha->flags)) in qla4xxx_start_firmware()
1121 qla4xxx_get_crash_record(ha); in qla4xxx_start_firmware()
1124 ha->host_no, __func__)); in qla4xxx_start_firmware()
1140 int qla4xxx_initialize_adapter(struct scsi_qla_host *ha, in qla4xxx_initialize_adapter() argument
1146 ha->eeprom_cmd_data = 0; in qla4xxx_initialize_adapter()
1148 qla4x00_pci_config(ha); in qla4xxx_initialize_adapter()
1150 qla4xxx_disable_intrs(ha); in qla4xxx_initialize_adapter()
1153 if (qla4xxx_start_firmware(ha) == QLA_ERROR) in qla4xxx_initialize_adapter()
1156 if (qla4xxx_validate_mac_address(ha) == QLA_ERROR) in qla4xxx_initialize_adapter()
1159 if (qla4xxx_init_local_data(ha) == QLA_ERROR) in qla4xxx_initialize_adapter()
1162 status = qla4xxx_init_firmware(ha); in qla4xxx_initialize_adapter()
1171 if (ha->firmware_state & FW_STATE_DHCP_IN_PROGRESS) in qla4xxx_initialize_adapter()
1175 if (memcmp(ha->ip_address, ip_address, IP_ADDR_LEN) == 0 || in qla4xxx_initialize_adapter()
1176 memcmp(ha->subnet_mask, ip_address, IP_ADDR_LEN) == 0) in qla4xxx_initialize_adapter()
1185 qla4xxx_reinitialize_ddb_list(ha); in qla4xxx_initialize_adapter()
1192 status = qla4xxx_initialize_ddb_list(ha); in qla4xxx_initialize_adapter()
1195 "ddb list\n", __func__, ha->host_no)); in qla4xxx_initialize_adapter()
1200 if (!ha->tot_ddbs) { in qla4xxx_initialize_adapter()
1203 ha->host_no)); in qla4xxx_initialize_adapter()
1207 set_bit(AF_ONLINE, &ha->flags); in qla4xxx_initialize_adapter()
1219 static void qla4xxx_add_device_dynamically(struct scsi_qla_host *ha, in qla4xxx_add_device_dynamically() argument
1226 ddb_entry = qla4xxx_get_ddb_entry(ha, fw_ddb_index, &new_tgt); in qla4xxx_add_device_dynamically()
1230 "fw_ddb_index %d\n", ha->host_no, fw_ddb_index)); in qla4xxx_add_device_dynamically()
1236 qla4xxx_free_ddb(ha, ddb_entry); in qla4xxx_add_device_dynamically()
1237 ddb_entry = qla4xxx_alloc_ddb(ha, fw_ddb_index); in qla4xxx_add_device_dynamically()
1242 ha->host_no, fw_ddb_index)); in qla4xxx_add_device_dynamically()
1246 if (qla4xxx_update_ddb_entry(ha, ddb_entry, fw_ddb_index) == in qla4xxx_add_device_dynamically()
1248 ha->fw_ddb_index_map[fw_ddb_index] = in qla4xxx_add_device_dynamically()
1253 ha->host_no, fw_ddb_index)); in qla4xxx_add_device_dynamically()
1254 qla4xxx_free_ddb(ha, ddb_entry); in qla4xxx_add_device_dynamically()
1262 ha->host_no, fw_ddb_index)); in qla4xxx_add_device_dynamically()
1263 qla4xxx_free_ddb(ha, ddb_entry); in qla4xxx_add_device_dynamically()
1275 int qla4xxx_process_ddb_changed(struct scsi_qla_host *ha, in qla4xxx_process_ddb_changed() argument
1286 ddb_entry = qla4xxx_lookup_ddb_by_fw_index(ha, fw_ddb_index); in qla4xxx_process_ddb_changed()
1290 qla4xxx_add_device_dynamically(ha, fw_ddb_index); in qla4xxx_process_ddb_changed()
1297 "index [%d]\n", ha->host_no, __func__, in qla4xxx_process_ddb_changed()
1310 ha->port_down_retry_count); in qla4xxx_process_ddb_changed()
1326 qla4xxx_mark_device_missing(ha, ddb_entry); in qla4xxx_process_ddb_changed()