Lines Matching refs:ha
379 #define IS_ISP1040(ha) (ha->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP1020) argument
380 #define IS_ISP1x40(ha) (ha->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP1020 || \ argument
381 ha->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP1240)
382 #define IS_ISP1x160(ha) (ha->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP10160 || \ argument
383 ha->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP12160)
578 static int qla1280_read_nvram(struct scsi_qla_host *ha) in qla1280_read_nvram() argument
590 printk(KERN_INFO "scsi(%ld): Reading NVRAM\n", ha->host_no); in qla1280_read_nvram()
592 wptr = (uint16_t *)&ha->nvram; in qla1280_read_nvram()
593 nv = &ha->nvram; in qla1280_read_nvram()
596 *wptr = qla1280_get_nvram_word(ha, cnt); in qla1280_read_nvram()
608 *wptr = qla1280_get_nvram_word(ha, cnt); in qla1280_read_nvram()
624 "settings\n", ha->host_no); in qla1280_read_nvram()
625 ha->nvram_valid = 0; in qla1280_read_nvram()
627 ha->nvram_valid = 1; in qla1280_read_nvram()
666 struct scsi_qla_host *ha; in qla1280_info() local
670 ha = (struct scsi_qla_host *)host->hostdata; in qla1280_info()
671 bdp = &ql1280_board_tbl[ha->devnum]; in qla1280_info()
677 &bdp->name[0], ha->fwver1, ha->fwver2, ha->fwver3, in qla1280_info()
697 struct scsi_qla_host *ha = (struct scsi_qla_host *)host->hostdata; in qla1280_queuecommand_lck() local
716 status = qla1280_64bit_start_scsi(ha, sp); in qla1280_queuecommand_lck()
718 status = qla1280_32bit_start_scsi(ha, sp); in qla1280_queuecommand_lck()
735 struct scsi_qla_host *ha = from_timer(ha, t, mailbox_timer); in qla1280_mailbox_timeout() local
737 reg = ha->iobase; in qla1280_mailbox_timeout()
739 ha->mailbox_out[0] = RD_REG_WORD(®->mailbox0); in qla1280_mailbox_timeout()
741 "ictrl %04x, istatus %04x\n", ha->host_no, ha->mailbox_out[0], in qla1280_mailbox_timeout()
743 complete(ha->mailbox_wait); in qla1280_mailbox_timeout()
747 _qla1280_wait_for_single_command(struct scsi_qla_host *ha, struct srb *sp, in _qla1280_wait_for_single_command() argument
753 spin_unlock_irq(ha->host->host_lock); in _qla1280_wait_for_single_command()
755 spin_lock_irq(ha->host->host_lock); in _qla1280_wait_for_single_command()
765 qla1280_wait_for_single_command(struct scsi_qla_host *ha, struct srb *sp) in qla1280_wait_for_single_command() argument
770 return _qla1280_wait_for_single_command(ha, sp, &wait); in qla1280_wait_for_single_command()
774 qla1280_wait_for_pending_commands(struct scsi_qla_host *ha, int bus, int target) in qla1280_wait_for_pending_commands() argument
788 sp = ha->outstanding_cmds[cnt]; in qla1280_wait_for_pending_commands()
797 status = qla1280_wait_for_single_command(ha, sp); in qla1280_wait_for_pending_commands()
822 struct scsi_qla_host *ha; in qla1280_error_action() local
833 ha = (struct scsi_qla_host *)(CMD_HOST(cmd)->hostdata); in qla1280_error_action()
840 RD_REG_WORD(&ha->iobase->istatus)); in qla1280_error_action()
843 RD_REG_WORD(&ha->iobase->host_cmd), in qla1280_error_action()
844 RD_REG_WORD(&ha->iobase->ictrl), jiffies); in qla1280_error_action()
849 ha->host_no, cmd, CMD_HANDLE(cmd), action); in qla1280_error_action()
859 if (sp == ha->outstanding_cmds[i]) { in qla1280_error_action()
871 "already completed.\n", ha->host_no, bus, in qla1280_error_action()
886 qla1280_abort_command(ha, sp, found); in qla1280_error_action()
893 "command.\n", ha->host_no, bus, target, lun); in qla1280_error_action()
894 if (qla1280_device_reset(ha, bus, target) == 0) { in qla1280_error_action()
904 "reset.\n", ha->host_no, bus); in qla1280_error_action()
905 if (qla1280_bus_reset(ha, bus) == 0) { in qla1280_error_action()
916 ha->host_no); in qla1280_error_action()
918 "continue automatically\n", ha->host_no); in qla1280_error_action()
920 ha->flags.reset_active = 1; in qla1280_error_action()
922 if (qla1280_abort_isp(ha) != 0) { /* it's dead */ in qla1280_error_action()
926 ha->flags.reset_active = 0; in qla1280_error_action()
939 result = _qla1280_wait_for_single_command(ha, sp, &wait); in qla1280_error_action()
945 ha->host_no, bus, target, lun); in qla1280_error_action()
959 result = qla1280_wait_for_pending_commands(ha, in qla1280_error_action()
1060 qla1280_disable_intrs(struct scsi_qla_host *ha) in qla1280_disable_intrs() argument
1062 WRT_REG_WORD(&ha->iobase->ictrl, 0); in qla1280_disable_intrs()
1063 RD_REG_WORD(&ha->iobase->ictrl); /* PCI Posted Write flush */ in qla1280_disable_intrs()
1068 qla1280_enable_intrs(struct scsi_qla_host *ha) in qla1280_enable_intrs() argument
1070 WRT_REG_WORD(&ha->iobase->ictrl, (ISP_EN_INT | ISP_EN_RISC)); in qla1280_enable_intrs()
1071 RD_REG_WORD(&ha->iobase->ictrl); /* PCI Posted Write flush */ in qla1280_enable_intrs()
1081 struct scsi_qla_host *ha; in qla1280_intr_handler() local
1087 ha = (struct scsi_qla_host *)dev_id; in qla1280_intr_handler()
1089 spin_lock(ha->host->host_lock); in qla1280_intr_handler()
1091 ha->isr_count++; in qla1280_intr_handler()
1092 reg = ha->iobase; in qla1280_intr_handler()
1094 qla1280_disable_intrs(ha); in qla1280_intr_handler()
1099 qla1280_isr(ha, &ha->done_q); in qla1280_intr_handler()
1102 if (!list_empty(&ha->done_q)) in qla1280_intr_handler()
1103 qla1280_done(ha); in qla1280_intr_handler()
1105 spin_unlock(ha->host->host_lock); in qla1280_intr_handler()
1107 qla1280_enable_intrs(ha); in qla1280_intr_handler()
1115 qla1280_set_target_parameters(struct scsi_qla_host *ha, int bus, int target) in qla1280_set_target_parameters() argument
1122 nv = &ha->nvram; in qla1280_set_target_parameters()
1138 if (IS_ISP1x160(ha)) { in qla1280_set_target_parameters()
1149 status = qla1280_mailbox_command(ha, mr, mb); in qla1280_set_target_parameters()
1158 status |= qla1280_mailbox_command(ha, 0x0f, mb); in qla1280_set_target_parameters()
1164 ha->host_no, bus, target); in qla1280_set_target_parameters()
1183 struct scsi_qla_host *ha; in qla1280_slave_configure() local
1191 ha = (struct scsi_qla_host *)device->host->hostdata; in qla1280_slave_configure()
1192 nv = &ha->nvram; in qla1280_slave_configure()
1194 if (qla1280_check_for_dead_scsi_bus(ha, bus)) in qla1280_slave_configure()
1198 (ha->bus_settings[bus].qtag_enables & (BIT_0 << target))) { in qla1280_slave_configure()
1199 scsi_change_queue_depth(device, ha->bus_settings[bus].hiwat); in qla1280_slave_configure()
1216 if (IS_ISP1x160(ha)) { in qla1280_slave_configure()
1223 spin_lock_irqsave(ha->host->host_lock, flags); in qla1280_slave_configure()
1225 status = qla1280_set_target_parameters(ha, bus, target); in qla1280_slave_configure()
1226 qla1280_get_target_parameters(ha, device); in qla1280_slave_configure()
1227 spin_unlock_irqrestore(ha->host->host_lock, flags); in qla1280_slave_configure()
1240 qla1280_done(struct scsi_qla_host *ha) in qla1280_done() argument
1249 done_q = &ha->done_q; in qla1280_done()
1263 if (!ha->flags.abort_isp_active) in qla1280_done()
1264 qla1280_marker(ha, bus, target, 0, MK_SYNC_ID); in qla1280_done()
1278 ha->actthreads--; in qla1280_done()
1405 qla1280_initialize_adapter(struct scsi_qla_host *ha) in qla1280_initialize_adapter() argument
1415 ha->flags.online = 0; in qla1280_initialize_adapter()
1416 ha->flags.disable_host_adapter = 0; in qla1280_initialize_adapter()
1417 ha->flags.reset_active = 0; in qla1280_initialize_adapter()
1418 ha->flags.abort_isp_active = 0; in qla1280_initialize_adapter()
1421 if (IS_ISP1040(ha)) in qla1280_initialize_adapter()
1426 reg = ha->iobase; in qla1280_initialize_adapter()
1434 if (qla1280_read_nvram(ha)) { in qla1280_initialize_adapter()
1444 spin_lock_irqsave(ha->host->host_lock, flags); in qla1280_initialize_adapter()
1446 status = qla1280_load_firmware(ha); in qla1280_initialize_adapter()
1449 ha->host_no); in qla1280_initialize_adapter()
1454 dprintk(1, "scsi(%ld): Configure NVRAM parameters\n", ha->host_no); in qla1280_initialize_adapter()
1455 qla1280_nvram_config(ha); in qla1280_initialize_adapter()
1457 if (ha->flags.disable_host_adapter) { in qla1280_initialize_adapter()
1462 status = qla1280_init_rings(ha); in qla1280_initialize_adapter()
1467 for (bus = 0; bus < ha->ports; bus++) { in qla1280_initialize_adapter()
1468 if (!ha->bus_settings[bus].disable_scsi_reset && in qla1280_initialize_adapter()
1469 qla1280_bus_reset(ha, bus) && in qla1280_initialize_adapter()
1470 qla1280_bus_reset(ha, bus)) in qla1280_initialize_adapter()
1471 ha->bus_settings[bus].scsi_bus_dead = 1; in qla1280_initialize_adapter()
1474 ha->flags.online = 1; in qla1280_initialize_adapter()
1476 spin_unlock_irqrestore(ha->host->host_lock, flags); in qla1280_initialize_adapter()
1498 qla1280_request_firmware(struct scsi_qla_host *ha) in qla1280_request_firmware() argument
1505 spin_unlock_irq(ha->host->host_lock); in qla1280_request_firmware()
1508 index = ql1280_board_tbl[ha->devnum].fw_index; in qla1280_request_firmware()
1514 err = request_firmware(&fw, fwname, &ha->pdev->dev); in qla1280_request_firmware()
1533 ha->fwver1 = fw->data[0]; in qla1280_request_firmware()
1534 ha->fwver2 = fw->data[1]; in qla1280_request_firmware()
1535 ha->fwver3 = fw->data[2]; in qla1280_request_firmware()
1538 spin_lock_irq(ha->host->host_lock); in qla1280_request_firmware()
1553 qla1280_chip_diag(struct scsi_qla_host *ha) in qla1280_chip_diag() argument
1556 struct device_reg __iomem *reg = ha->iobase; in qla1280_chip_diag()
1562 dprintk(1, "scsi(%ld): Verifying chip\n", ha->host_no); in qla1280_chip_diag()
1631 qla1280_enable_intrs(ha); in qla1280_chip_diag()
1644 status = qla1280_mailbox_command(ha, 0xff, mb); in qla1280_chip_diag()
1663 qla1280_load_firmware_pio(struct scsi_qla_host *ha) in qla1280_load_firmware_pio() argument
1673 fw = qla1280_request_firmware(ha); in qla1280_load_firmware_pio()
1678 ha->fwstart = __le16_to_cpu(fw_data[2]); in qla1280_load_firmware_pio()
1681 risc_address = ha->fwstart; in qla1280_load_firmware_pio()
1690 err = qla1280_mailbox_command(ha, BIT_0 | BIT_1 | BIT_2, mb); in qla1280_load_firmware_pio()
1693 ha->host_no); in qla1280_load_firmware_pio()
1713 qla1280_load_firmware_dma(struct scsi_qla_host *ha) in qla1280_load_firmware_dma() argument
1725 tbuf = dma_alloc_coherent(&ha->pdev->dev, 8000, &p_tbuf, GFP_KERNEL); in qla1280_load_firmware_dma()
1730 fw = qla1280_request_firmware(ha); in qla1280_load_firmware_dma()
1735 ha->fwstart = __le16_to_cpu(fw_data[2]); in qla1280_load_firmware_dma()
1738 risc_address = ha->fwstart; in qla1280_load_firmware_dma()
1758 ((__le16 *)ha->request_ring)[i] = fw_data[i]; in qla1280_load_firmware_dma()
1763 mb[3] = ha->request_dma & 0xffff; in qla1280_load_firmware_dma()
1764 mb[2] = (ha->request_dma >> 16) & 0xffff; in qla1280_load_firmware_dma()
1765 mb[7] = upper_32_bits(ha->request_dma) & 0xffff; in qla1280_load_firmware_dma()
1766 mb[6] = upper_32_bits(ha->request_dma) >> 16; in qla1280_load_firmware_dma()
1769 (void *)(long)ha->request_dma, in qla1280_load_firmware_dma()
1771 err = qla1280_mailbox_command(ha, CMD_ARGS, mb); in qla1280_load_firmware_dma()
1774 "segment of f\n", ha->host_no); in qla1280_load_firmware_dma()
1787 err = qla1280_mailbox_command(ha, CMD_ARGS, mb); in qla1280_load_firmware_dma()
1793 sp = (uint8_t *)ha->request_ring; in qla1280_load_firmware_dma()
1814 dma_free_coherent(&ha->pdev->dev, 8000, tbuf, p_tbuf); in qla1280_load_firmware_dma()
1820 qla1280_start_firmware(struct scsi_qla_host *ha) in qla1280_start_firmware() argument
1831 mb[1] = ha->fwstart; in qla1280_start_firmware()
1832 err = qla1280_mailbox_command(ha, BIT_1 | BIT_0, mb); in qla1280_start_firmware()
1834 printk(KERN_ERR "scsi(%li): RISC checksum failed.\n", ha->host_no); in qla1280_start_firmware()
1841 mb[1] = ha->fwstart; in qla1280_start_firmware()
1842 err = qla1280_mailbox_command(ha, BIT_1 | BIT_0, &mb[0]); in qla1280_start_firmware()
1845 ha->host_no); in qla1280_start_firmware()
1852 qla1280_load_firmware(struct scsi_qla_host *ha) in qla1280_load_firmware() argument
1857 err = qla1280_chip_diag(ha); in qla1280_load_firmware()
1860 if (IS_ISP1040(ha)) in qla1280_load_firmware()
1861 err = qla1280_load_firmware_pio(ha); in qla1280_load_firmware()
1863 err = qla1280_load_firmware_dma(ha); in qla1280_load_firmware()
1866 err = qla1280_start_firmware(ha); in qla1280_load_firmware()
1885 qla1280_init_rings(struct scsi_qla_host *ha) in qla1280_init_rings() argument
1893 memset(ha->outstanding_cmds, 0, in qla1280_init_rings()
1897 ha->request_ring_ptr = ha->request_ring; in qla1280_init_rings()
1898 ha->req_ring_index = 0; in qla1280_init_rings()
1899 ha->req_q_cnt = REQUEST_ENTRY_CNT; in qla1280_init_rings()
1903 mb[3] = ha->request_dma & 0xffff; in qla1280_init_rings()
1904 mb[2] = (ha->request_dma >> 16) & 0xffff; in qla1280_init_rings()
1906 mb[7] = upper_32_bits(ha->request_dma) & 0xffff; in qla1280_init_rings()
1907 mb[6] = upper_32_bits(ha->request_dma) >> 16; in qla1280_init_rings()
1908 if (!(status = qla1280_mailbox_command(ha, BIT_7 | BIT_6 | BIT_4 | in qla1280_init_rings()
1912 ha->response_ring_ptr = ha->response_ring; in qla1280_init_rings()
1913 ha->rsp_ring_index = 0; in qla1280_init_rings()
1917 mb[3] = ha->response_dma & 0xffff; in qla1280_init_rings()
1918 mb[2] = (ha->response_dma >> 16) & 0xffff; in qla1280_init_rings()
1920 mb[7] = upper_32_bits(ha->response_dma) & 0xffff; in qla1280_init_rings()
1921 mb[6] = upper_32_bits(ha->response_dma) >> 16; in qla1280_init_rings()
1922 status = qla1280_mailbox_command(ha, BIT_7 | BIT_6 | BIT_5 | in qla1280_init_rings()
1985 qla1280_set_target_defaults(struct scsi_qla_host *ha, int bus, int target) in qla1280_set_target_defaults() argument
1987 struct nvram *nv = &ha->nvram; in qla1280_set_target_defaults()
2001 if (IS_ISP1x160(ha)) { in qla1280_set_target_defaults()
2016 qla1280_set_defaults(struct scsi_qla_host *ha) in qla1280_set_defaults() argument
2018 struct nvram *nv = &ha->nvram; in qla1280_set_defaults()
2040 if (IS_ISP1040(ha)) in qla1280_set_defaults()
2045 if (IS_ISP1x160(ha)) in qla1280_set_defaults()
2055 if (IS_ISP1040(ha)) { in qla1280_set_defaults()
2065 qla1280_set_target_defaults(ha, bus, target); in qla1280_set_defaults()
2070 qla1280_config_target(struct scsi_qla_host *ha, int bus, int target) in qla1280_config_target() argument
2072 struct nvram *nv = &ha->nvram; in qla1280_config_target()
2089 if (IS_ISP1x160(ha)) in qla1280_config_target()
2094 status = qla1280_mailbox_command(ha, 0x0f, mb); in qla1280_config_target()
2099 ha->bus_settings[bus].qtag_enables |= flag; in qla1280_config_target()
2102 if (IS_ISP1x160(ha)) { in qla1280_config_target()
2104 ha->bus_settings[bus].device_enables |= flag; in qla1280_config_target()
2105 ha->bus_settings[bus].lun_disables |= 0; in qla1280_config_target()
2108 ha->bus_settings[bus].device_enables |= flag; in qla1280_config_target()
2111 ha->bus_settings[bus].lun_disables |= flag; in qla1280_config_target()
2121 status |= qla1280_mailbox_command(ha, 0x0f, mb); in qla1280_config_target()
2128 qla1280_config_bus(struct scsi_qla_host *ha, int bus) in qla1280_config_bus() argument
2130 struct nvram *nv = &ha->nvram; in qla1280_config_bus()
2135 ha->bus_settings[bus].disable_scsi_reset = in qla1280_config_bus()
2139 ha->bus_settings[bus].id = nv->bus[bus].config_1.initiator_id; in qla1280_config_bus()
2141 mb[1] = bus ? ha->bus_settings[bus].id | BIT_7 : in qla1280_config_bus()
2142 ha->bus_settings[bus].id; in qla1280_config_bus()
2143 status = qla1280_mailbox_command(ha, BIT_1 | BIT_0, &mb[0]); in qla1280_config_bus()
2146 ha->bus_settings[bus].bus_reset_delay = in qla1280_config_bus()
2150 ha->bus_settings[bus].hiwat = nv->bus[bus].max_queue_depth - 1; in qla1280_config_bus()
2154 status |= qla1280_config_target(ha, bus, target); in qla1280_config_bus()
2160 qla1280_nvram_config(struct scsi_qla_host *ha) in qla1280_nvram_config() argument
2162 struct device_reg __iomem *reg = ha->iobase; in qla1280_nvram_config()
2163 struct nvram *nv = &ha->nvram; in qla1280_nvram_config()
2169 if (ha->nvram_valid) { in qla1280_nvram_config()
2177 qla1280_set_defaults(ha); in qla1280_nvram_config()
2183 ha->flags.disable_risc_code_load = in qla1280_nvram_config()
2186 if (IS_ISP1040(ha)) { in qla1280_nvram_config()
2210 if (ha->ports > 1) in qla1280_nvram_config()
2228 status |= qla1280_mailbox_command(ha, BIT_1 | BIT_0, &mb[0]); in qla1280_nvram_config()
2230 if (IS_ISP1x40(ha)) { in qla1280_nvram_config()
2234 status |= qla1280_mailbox_command(ha, BIT_1 | BIT_0, mb); in qla1280_nvram_config()
2242 status |= qla1280_mailbox_command(ha, BIT_1 | BIT_0, mb); in qla1280_nvram_config()
2250 status |= qla1280_mailbox_command(ha, BIT_7 | BIT_6 | BIT_2 | in qla1280_nvram_config()
2257 status |= qla1280_mailbox_command(ha, BIT_2 | BIT_1 | BIT_0, &mb[0]); in qla1280_nvram_config()
2271 status |= qla1280_mailbox_command(ha, BIT_2 | BIT_1 | BIT_0, mb); in qla1280_nvram_config()
2275 status |= qla1280_mailbox_command(ha, BIT_1 | BIT_0, mb); in qla1280_nvram_config()
2281 status |= qla1280_mailbox_command(ha, BIT_2 | BIT_1 | BIT_0, mb); in qla1280_nvram_config()
2285 status |= qla1280_mailbox_command(ha, BIT_1 | BIT_0, mb); in qla1280_nvram_config()
2291 status |= qla1280_mailbox_command(ha, BIT_2 | BIT_1 | BIT_0, mb); in qla1280_nvram_config()
2293 for (bus = 0; bus < ha->ports; bus++) in qla1280_nvram_config()
2294 status |= qla1280_config_bus(ha, bus); in qla1280_nvram_config()
2316 qla1280_get_nvram_word(struct scsi_qla_host *ha, uint32_t address) in qla1280_get_nvram_word() argument
2324 data = le16_to_cpu(qla1280_nvram_request(ha, nv_cmd)); in qla1280_get_nvram_word()
2347 qla1280_nvram_request(struct scsi_qla_host *ha, uint32_t nv_cmd) in qla1280_nvram_request() argument
2349 struct device_reg __iomem *reg = ha->iobase; in qla1280_nvram_request()
2359 qla1280_nv_write(ha, NV_DATA_OUT); in qla1280_nvram_request()
2361 qla1280_nv_write(ha, 0); in qla1280_nvram_request()
2390 qla1280_nv_write(struct scsi_qla_host *ha, uint16_t data) in qla1280_nv_write() argument
2392 struct device_reg __iomem *reg = ha->iobase; in qla1280_nv_write()
2421 qla1280_mailbox_command(struct scsi_qla_host *ha, uint8_t mr, uint16_t *mb) in qla1280_mailbox_command() argument
2423 struct device_reg __iomem *reg = ha->iobase; in qla1280_mailbox_command()
2432 if (ha->mailbox_wait) { in qla1280_mailbox_command()
2435 ha->mailbox_wait = &wait; in qla1280_mailbox_command()
2457 timer_setup(&ha->mailbox_timer, qla1280_mailbox_timeout, 0); in qla1280_mailbox_command()
2458 mod_timer(&ha->mailbox_timer, jiffies + 20 * HZ); in qla1280_mailbox_command()
2460 spin_unlock_irq(ha->host->host_lock); in qla1280_mailbox_command()
2465 del_timer_sync(&ha->mailbox_timer); in qla1280_mailbox_command()
2467 spin_lock_irq(ha->host->host_lock); in qla1280_mailbox_command()
2469 ha->mailbox_wait = NULL; in qla1280_mailbox_command()
2472 if (ha->mailbox_out[0] != MBS_CMD_CMP) { in qla1280_mailbox_command()
2476 mb[0], ha->mailbox_out[0], RD_REG_WORD(®->istatus)); in qla1280_mailbox_command()
2488 iptr = (uint16_t *) &ha->mailbox_out[0]; in qla1280_mailbox_command()
2492 if (ha->flags.reset_marker) in qla1280_mailbox_command()
2493 qla1280_rst_aen(ha); in qla1280_mailbox_command()
2511 qla1280_poll(struct scsi_qla_host *ha) in qla1280_poll() argument
2513 struct device_reg __iomem *reg = ha->iobase; in qla1280_poll()
2522 qla1280_isr(ha, &done_q); in qla1280_poll()
2524 if (!ha->mailbox_wait) { in qla1280_poll()
2525 if (ha->flags.reset_marker) in qla1280_poll()
2526 qla1280_rst_aen(ha); in qla1280_poll()
2530 qla1280_done(ha); in qla1280_poll()
2547 qla1280_bus_reset(struct scsi_qla_host *ha, int bus) in qla1280_bus_reset() argument
2557 ha->host_no, bus); in qla1280_bus_reset()
2559 reset_delay = ha->bus_settings[bus].bus_reset_delay; in qla1280_bus_reset()
2563 status = qla1280_mailbox_command(ha, BIT_2 | BIT_1 | BIT_0, &mb[0]); in qla1280_bus_reset()
2566 if (ha->bus_settings[bus].failed_reset_count > 2) in qla1280_bus_reset()
2567 ha->bus_settings[bus].scsi_bus_dead = 1; in qla1280_bus_reset()
2568 ha->bus_settings[bus].failed_reset_count++; in qla1280_bus_reset()
2570 spin_unlock_irq(ha->host->host_lock); in qla1280_bus_reset()
2572 spin_lock_irq(ha->host->host_lock); in qla1280_bus_reset()
2574 ha->bus_settings[bus].scsi_bus_dead = 0; in qla1280_bus_reset()
2575 ha->bus_settings[bus].failed_reset_count = 0; in qla1280_bus_reset()
2576 ha->bus_settings[bus].reset_marker = 0; in qla1280_bus_reset()
2578 qla1280_marker(ha, bus, 0, 0, MK_SYNC_ALL); in qla1280_bus_reset()
2607 qla1280_device_reset(struct scsi_qla_host *ha, int bus, int target) in qla1280_device_reset() argument
2617 status = qla1280_mailbox_command(ha, BIT_2 | BIT_1 | BIT_0, &mb[0]); in qla1280_device_reset()
2620 qla1280_marker(ha, bus, target, 0, MK_SYNC_ID); in qla1280_device_reset()
2641 qla1280_abort_command(struct scsi_qla_host *ha, struct srb * sp, int handle) in qla1280_abort_command() argument
2659 status = qla1280_mailbox_command(ha, 0x0f, &mb[0]); in qla1280_abort_command()
2679 qla1280_reset_adapter(struct scsi_qla_host *ha) in qla1280_reset_adapter() argument
2681 struct device_reg __iomem *reg = ha->iobase; in qla1280_reset_adapter()
2686 ha->flags.online = 0; in qla1280_reset_adapter()
2707 qla1280_marker(struct scsi_qla_host *ha, int bus, int id, int lun, u8 type) in qla1280_marker() argument
2714 if ((pkt = (struct mrk_entry *) qla1280_req_pkt(ha))) { in qla1280_marker()
2722 qla1280_isp_cmd(ha); in qla1280_marker()
2743 qla1280_64bit_start_scsi(struct scsi_qla_host *ha, struct srb * sp) in qla1280_64bit_start_scsi() argument
2745 struct device_reg __iomem *reg = ha->iobase; in qla1280_64bit_start_scsi()
2772 if ((req_cnt + 2) >= ha->req_q_cnt) { in qla1280_64bit_start_scsi()
2775 if (ha->req_ring_index < cnt) in qla1280_64bit_start_scsi()
2776 ha->req_q_cnt = cnt - ha->req_ring_index; in qla1280_64bit_start_scsi()
2778 ha->req_q_cnt = in qla1280_64bit_start_scsi()
2779 REQUEST_ENTRY_CNT - (ha->req_ring_index - cnt); in qla1280_64bit_start_scsi()
2783 ha->req_q_cnt, seg_cnt); in qla1280_64bit_start_scsi()
2786 if ((req_cnt + 2) >= ha->req_q_cnt) { in qla1280_64bit_start_scsi()
2789 "0x%xreq_cnt=0x%x", ha->req_ring_index, ha->req_q_cnt, in qla1280_64bit_start_scsi()
2796 ha->outstanding_cmds[cnt] != NULL; cnt++); in qla1280_64bit_start_scsi()
2801 "OUTSTANDING ARRAY, req_q_cnt=0x%x", ha->req_q_cnt); in qla1280_64bit_start_scsi()
2805 ha->outstanding_cmds[cnt] = sp; in qla1280_64bit_start_scsi()
2806 ha->req_q_cnt -= req_cnt; in qla1280_64bit_start_scsi()
2818 pkt = (cmd_a64_entry_t *) ha->request_ring_ptr; in qla1280_64bit_start_scsi()
2822 pkt->sys_define = (uint8_t) ha->req_ring_index; in qla1280_64bit_start_scsi()
2899 ha->req_ring_index++; in qla1280_64bit_start_scsi()
2900 if (ha->req_ring_index == REQUEST_ENTRY_CNT) { in qla1280_64bit_start_scsi()
2901 ha->req_ring_index = 0; in qla1280_64bit_start_scsi()
2902 ha->request_ring_ptr = in qla1280_64bit_start_scsi()
2903 ha->request_ring; in qla1280_64bit_start_scsi()
2905 ha->request_ring_ptr++; in qla1280_64bit_start_scsi()
2907 pkt = (cmd_a64_entry_t *)ha->request_ring_ptr; in qla1280_64bit_start_scsi()
2917 (uint8_t)ha->req_ring_index; in qla1280_64bit_start_scsi()
2953 ha->req_ring_index++; in qla1280_64bit_start_scsi()
2954 if (ha->req_ring_index == REQUEST_ENTRY_CNT) { in qla1280_64bit_start_scsi()
2955 ha->req_ring_index = 0; in qla1280_64bit_start_scsi()
2956 ha->request_ring_ptr = ha->request_ring; in qla1280_64bit_start_scsi()
2958 ha->request_ring_ptr++; in qla1280_64bit_start_scsi()
2964 ha->actthreads++; in qla1280_64bit_start_scsi()
2965 WRT_REG_WORD(®->mailbox4, ha->req_ring_index); in qla1280_64bit_start_scsi()
2997 qla1280_32bit_start_scsi(struct scsi_qla_host *ha, struct srb * sp) in qla1280_32bit_start_scsi() argument
2999 struct device_reg __iomem *reg = ha->iobase; in qla1280_32bit_start_scsi()
3034 if ((req_cnt + 2) >= ha->req_q_cnt) { in qla1280_32bit_start_scsi()
3037 if (ha->req_ring_index < cnt) in qla1280_32bit_start_scsi()
3038 ha->req_q_cnt = cnt - ha->req_ring_index; in qla1280_32bit_start_scsi()
3040 ha->req_q_cnt = in qla1280_32bit_start_scsi()
3041 REQUEST_ENTRY_CNT - (ha->req_ring_index - cnt); in qla1280_32bit_start_scsi()
3045 ha->req_q_cnt, seg_cnt); in qla1280_32bit_start_scsi()
3047 if ((req_cnt + 2) >= ha->req_q_cnt) { in qla1280_32bit_start_scsi()
3050 "req_q_cnt=0x%x, req_cnt=0x%x", ha->req_ring_index, in qla1280_32bit_start_scsi()
3051 ha->req_q_cnt, req_cnt); in qla1280_32bit_start_scsi()
3057 (ha->outstanding_cmds[cnt] != 0); cnt++) ; in qla1280_32bit_start_scsi()
3062 "ARRAY, req_q_cnt=0x%x\n", ha->req_q_cnt); in qla1280_32bit_start_scsi()
3067 ha->outstanding_cmds[cnt] = sp; in qla1280_32bit_start_scsi()
3068 ha->req_q_cnt -= req_cnt; in qla1280_32bit_start_scsi()
3073 pkt = (struct cmd_entry *) ha->request_ring_ptr; in qla1280_32bit_start_scsi()
3077 pkt->sys_define = (uint8_t) ha->req_ring_index; in qla1280_32bit_start_scsi()
3144 ha->req_ring_index++; in qla1280_32bit_start_scsi()
3145 if (ha->req_ring_index == REQUEST_ENTRY_CNT) { in qla1280_32bit_start_scsi()
3146 ha->req_ring_index = 0; in qla1280_32bit_start_scsi()
3147 ha->request_ring_ptr = in qla1280_32bit_start_scsi()
3148 ha->request_ring; in qla1280_32bit_start_scsi()
3150 ha->request_ring_ptr++; in qla1280_32bit_start_scsi()
3152 pkt = (struct cmd_entry *)ha->request_ring_ptr; in qla1280_32bit_start_scsi()
3163 (uint8_t) ha->req_ring_index; in qla1280_32bit_start_scsi()
3197 qla1280_dump_buffer(5, (char *)ha->request_ring_ptr, in qla1280_32bit_start_scsi()
3201 ha->req_ring_index++; in qla1280_32bit_start_scsi()
3202 if (ha->req_ring_index == REQUEST_ENTRY_CNT) { in qla1280_32bit_start_scsi()
3203 ha->req_ring_index = 0; in qla1280_32bit_start_scsi()
3204 ha->request_ring_ptr = ha->request_ring; in qla1280_32bit_start_scsi()
3206 ha->request_ring_ptr++; in qla1280_32bit_start_scsi()
3212 ha->actthreads++; in qla1280_32bit_start_scsi()
3213 WRT_REG_WORD(®->mailbox4, ha->req_ring_index); in qla1280_32bit_start_scsi()
3237 qla1280_req_pkt(struct scsi_qla_host *ha) in qla1280_req_pkt() argument
3239 struct device_reg __iomem *reg = ha->iobase; in qla1280_req_pkt()
3251 if (ha->req_q_cnt > 0) { in qla1280_req_pkt()
3254 if (ha->req_ring_index < cnt) in qla1280_req_pkt()
3255 ha->req_q_cnt = cnt - ha->req_ring_index; in qla1280_req_pkt()
3257 ha->req_q_cnt = in qla1280_req_pkt()
3258 REQUEST_ENTRY_CNT - (ha->req_ring_index - cnt); in qla1280_req_pkt()
3262 if (ha->req_q_cnt > 0) { in qla1280_req_pkt()
3263 ha->req_q_cnt--; in qla1280_req_pkt()
3264 pkt = ha->request_ring_ptr; in qla1280_req_pkt()
3274 pkt->sys_define = (uint8_t) ha->req_ring_index; in qla1280_req_pkt()
3285 qla1280_poll(ha); in qla1280_req_pkt()
3305 qla1280_isp_cmd(struct scsi_qla_host *ha) in qla1280_isp_cmd() argument
3307 struct device_reg __iomem *reg = ha->iobase; in qla1280_isp_cmd()
3312 qla1280_dump_buffer(5, (char *)ha->request_ring_ptr, in qla1280_isp_cmd()
3316 ha->req_ring_index++; in qla1280_isp_cmd()
3317 if (ha->req_ring_index == REQUEST_ENTRY_CNT) { in qla1280_isp_cmd()
3318 ha->req_ring_index = 0; in qla1280_isp_cmd()
3319 ha->request_ring_ptr = ha->request_ring; in qla1280_isp_cmd()
3321 ha->request_ring_ptr++; in qla1280_isp_cmd()
3326 WRT_REG_WORD(®->mailbox4, ha->req_ring_index); in qla1280_isp_cmd()
3344 qla1280_isr(struct scsi_qla_host *ha, struct list_head *done_q) in qla1280_isr() argument
3346 struct device_reg __iomem *reg = ha->iobase; in qla1280_isr()
3398 if (ha->flags.online) { in qla1280_isr()
3404 sp = ha->outstanding_cmds[index]; in qla1280_isr()
3410 ha->outstanding_cmds[index] = NULL; in qla1280_isr()
3429 ha->flags.reset_marker = 1; in qla1280_isr()
3431 ha->bus_settings[index].reset_marker = 1; in qla1280_isr()
3467 ha->flags.reset_marker = 1; in qla1280_isr()
3469 ha->bus_settings[index].reset_marker = 1; in qla1280_isr()
3481 memcpy((uint16_t *) ha->mailbox_out, wptr, in qla1280_isr()
3485 if(ha->mailbox_wait != NULL) in qla1280_isr()
3486 complete(ha->mailbox_wait); in qla1280_isr()
3498 if (!(ha->flags.online && !ha->mailbox_wait)) { in qla1280_isr()
3506 while (ha->rsp_ring_index != mailbox[5]) { in qla1280_isr()
3507 pkt = ha->response_ring_ptr; in qla1280_isr()
3510 " = 0x%x\n", ha->rsp_ring_index, mailbox[5]); in qla1280_isr()
3520 ha->rsp_ring_index, mailbox[5], in qla1280_isr()
3527 ha->rsp_ring_index, mailbox[5]); in qla1280_isr()
3535 ha->outstanding_cmds[pkt->handle]->cmd, in qla1280_isr()
3538 qla1280_status_entry(ha, pkt, done_q); in qla1280_isr()
3540 qla1280_error_entry(ha, pkt, done_q); in qla1280_isr()
3542 ha->rsp_ring_index++; in qla1280_isr()
3543 if (ha->rsp_ring_index == RESPONSE_ENTRY_CNT) { in qla1280_isr()
3544 ha->rsp_ring_index = 0; in qla1280_isr()
3545 ha->response_ring_ptr = ha->response_ring; in qla1280_isr()
3547 ha->response_ring_ptr++; in qla1280_isr()
3548 WRT_REG_WORD(®->mailbox5, ha->rsp_ring_index); in qla1280_isr()
3564 qla1280_rst_aen(struct scsi_qla_host *ha) in qla1280_rst_aen() argument
3570 if (ha->flags.online && !ha->flags.reset_active && in qla1280_rst_aen()
3571 !ha->flags.abort_isp_active) { in qla1280_rst_aen()
3572 ha->flags.reset_active = 1; in qla1280_rst_aen()
3573 while (ha->flags.reset_marker) { in qla1280_rst_aen()
3575 ha->flags.reset_marker = 0; in qla1280_rst_aen()
3576 for (bus = 0; bus < ha->ports && in qla1280_rst_aen()
3577 !ha->flags.reset_marker; bus++) { in qla1280_rst_aen()
3578 if (ha->bus_settings[bus].reset_marker) { in qla1280_rst_aen()
3579 ha->bus_settings[bus].reset_marker = 0; in qla1280_rst_aen()
3580 qla1280_marker(ha, bus, 0, 0, in qla1280_rst_aen()
3601 qla1280_status_entry(struct scsi_qla_host *ha, struct response *pkt, in qla1280_status_entry() argument
3615 sp = ha->outstanding_cmds[handle]; in qla1280_status_entry()
3625 ha->outstanding_cmds[handle] = NULL; in qla1280_status_entry()
3694 qla1280_error_entry(struct scsi_qla_host *ha, struct response *pkt, in qla1280_error_entry() argument
3713 sp = ha->outstanding_cmds[handle]; in qla1280_error_entry()
3719 ha->outstanding_cmds[handle] = NULL; in qla1280_error_entry()
3758 qla1280_abort_isp(struct scsi_qla_host *ha) in qla1280_abort_isp() argument
3760 struct device_reg __iomem *reg = ha->iobase; in qla1280_abort_isp()
3768 if (ha->flags.abort_isp_active || !ha->flags.online) in qla1280_abort_isp()
3771 ha->flags.abort_isp_active = 1; in qla1280_abort_isp()
3774 qla1280_disable_intrs(ha); in qla1280_abort_isp()
3779 ha->host_no); in qla1280_abort_isp()
3783 sp = ha->outstanding_cmds[cnt]; in qla1280_abort_isp()
3788 ha->outstanding_cmds[cnt] = NULL; in qla1280_abort_isp()
3789 list_add_tail(&sp->list, &ha->done_q); in qla1280_abort_isp()
3793 qla1280_done(ha); in qla1280_abort_isp()
3795 status = qla1280_load_firmware(ha); in qla1280_abort_isp()
3800 qla1280_nvram_config (ha); in qla1280_abort_isp()
3802 status = qla1280_init_rings(ha); in qla1280_abort_isp()
3807 for (bus = 0; bus < ha->ports; bus++) in qla1280_abort_isp()
3808 qla1280_bus_reset(ha, bus); in qla1280_abort_isp()
3810 ha->flags.abort_isp_active = 0; in qla1280_abort_isp()
3815 qla1280_reset_adapter(ha); in qla1280_abort_isp()
3864 qla1280_check_for_dead_scsi_bus(struct scsi_qla_host *ha, unsigned int bus) in qla1280_check_for_dead_scsi_bus() argument
3867 struct device_reg __iomem *reg = ha->iobase; in qla1280_check_for_dead_scsi_bus()
3869 if (ha->bus_settings[bus].scsi_bus_dead) { in qla1280_check_for_dead_scsi_bus()
3878 ha->bus_settings[bus].scsi_bus_dead = 1; in qla1280_check_for_dead_scsi_bus()
3881 ha->bus_settings[bus].scsi_bus_dead = 0; in qla1280_check_for_dead_scsi_bus()
3882 ha->bus_settings[bus].failed_reset_count = 0; in qla1280_check_for_dead_scsi_bus()
3889 qla1280_get_target_parameters(struct scsi_qla_host *ha, in qla1280_get_target_parameters() argument
3903 qla1280_mailbox_command(ha, BIT_6 | BIT_3 | BIT_2 | BIT_1 | BIT_0, in qla1280_get_target_parameters()
3906 printk(KERN_INFO "scsi(%li:%d:%d:%d):", ha->host_no, bus, target, lun); in qla1280_get_target_parameters()
3957 struct scsi_qla_host *ha; in __qla1280_print_scsi_cmd() local
3963 ha = (struct scsi_qla_host *)host->hostdata; in __qla1280_print_scsi_cmd()
3995 ql1280_dump_device(struct scsi_qla_host *ha) in ql1280_dump_device() argument
4005 if ((sp = ha->outstanding_cmds[i]) == NULL) in ql1280_dump_device()
4154 struct scsi_qla_host *ha; in qla1280_probe_one() local
4176 host = scsi_host_alloc(&qla1280_driver_template, sizeof(*ha)); in qla1280_probe_one()
4183 ha = (struct scsi_qla_host *)host->hostdata; in qla1280_probe_one()
4184 memset(ha, 0, sizeof(struct scsi_qla_host)); in qla1280_probe_one()
4186 ha->pdev = pdev; in qla1280_probe_one()
4187 ha->devnum = devnum; /* specifies microcode load address */ in qla1280_probe_one()
4190 if (dma_set_mask_and_coherent(&ha->pdev->dev, DMA_BIT_MASK(64))) { in qla1280_probe_one()
4191 if (dma_set_mask(&ha->pdev->dev, DMA_BIT_MASK(32))) { in qla1280_probe_one()
4193 "suitable DMA mask - aborting\n", ha->host_no); in qla1280_probe_one()
4199 ha->host_no); in qla1280_probe_one()
4201 if (dma_set_mask(&ha->pdev->dev, DMA_BIT_MASK(32))) { in qla1280_probe_one()
4203 "suitable DMA mask - aborting\n", ha->host_no); in qla1280_probe_one()
4209 ha->request_ring = dma_alloc_coherent(&ha->pdev->dev, in qla1280_probe_one()
4211 &ha->request_dma, GFP_KERNEL); in qla1280_probe_one()
4212 if (!ha->request_ring) { in qla1280_probe_one()
4217 ha->response_ring = dma_alloc_coherent(&ha->pdev->dev, in qla1280_probe_one()
4219 &ha->response_dma, GFP_KERNEL); in qla1280_probe_one()
4220 if (!ha->response_ring) { in qla1280_probe_one()
4225 ha->ports = bdp->numPorts; in qla1280_probe_one()
4227 ha->host = host; in qla1280_probe_one()
4228 ha->host_no = host->host_no; in qla1280_probe_one()
4240 ha->mmpbase = pci_ioremap_bar(ha->pdev, 1); in qla1280_probe_one()
4241 if (!ha->mmpbase) { in qla1280_probe_one()
4246 host->base = (unsigned long)ha->mmpbase; in qla1280_probe_one()
4247 ha->iobase = (struct device_reg __iomem *)ha->mmpbase; in qla1280_probe_one()
4249 host->io_port = pci_resource_start(ha->pdev, 0); in qla1280_probe_one()
4257 ha->iobase = (struct device_reg *)host->io_port; in qla1280_probe_one()
4260 INIT_LIST_HEAD(&ha->done_q); in qla1280_probe_one()
4263 qla1280_disable_intrs(ha); in qla1280_probe_one()
4266 "qla1280", ha)) { in qla1280_probe_one()
4273 if (qla1280_initialize_adapter(ha)) { in qla1280_probe_one()
4279 host->this_id = ha->bus_settings[0].id; in qla1280_probe_one()
4291 qla1280_disable_intrs(ha); in qla1280_probe_one()
4293 free_irq(pdev->irq, ha); in qla1280_probe_one()
4296 iounmap(ha->mmpbase); in qla1280_probe_one()
4301 dma_free_coherent(&ha->pdev->dev, in qla1280_probe_one()
4303 ha->response_ring, ha->response_dma); in qla1280_probe_one()
4305 dma_free_coherent(&ha->pdev->dev, in qla1280_probe_one()
4307 ha->request_ring, ha->request_dma); in qla1280_probe_one()
4321 struct scsi_qla_host *ha = (struct scsi_qla_host *)host->hostdata; in qla1280_remove_one() local
4325 qla1280_disable_intrs(ha); in qla1280_remove_one()
4327 free_irq(pdev->irq, ha); in qla1280_remove_one()
4330 iounmap(ha->mmpbase); in qla1280_remove_one()
4335 dma_free_coherent(&ha->pdev->dev, in qla1280_remove_one()
4337 ha->request_ring, ha->request_dma); in qla1280_remove_one()
4338 dma_free_coherent(&ha->pdev->dev, in qla1280_remove_one()
4340 ha->response_ring, ha->response_dma); in qla1280_remove_one()