Lines Matching refs:ha
414 #define IS_ISP1040(ha) (ha->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP1020) argument
415 #define IS_ISP1x40(ha) (ha->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP1020 || \ argument
416 ha->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP1240)
417 #define IS_ISP1x160(ha) (ha->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP10160 || \ argument
418 ha->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP12160)
608 static int qla1280_read_nvram(struct scsi_qla_host *ha) in qla1280_read_nvram() argument
620 printk(KERN_INFO "scsi(%ld): Reading NVRAM\n", ha->host_no); in qla1280_read_nvram()
622 wptr = (uint16_t *)&ha->nvram; in qla1280_read_nvram()
623 nv = &ha->nvram; in qla1280_read_nvram()
626 *wptr = qla1280_get_nvram_word(ha, cnt); in qla1280_read_nvram()
638 *wptr = qla1280_get_nvram_word(ha, cnt); in qla1280_read_nvram()
654 "settings\n", ha->host_no); in qla1280_read_nvram()
655 ha->nvram_valid = 0; in qla1280_read_nvram()
657 ha->nvram_valid = 1; in qla1280_read_nvram()
696 struct scsi_qla_host *ha; in qla1280_info() local
700 ha = (struct scsi_qla_host *)host->hostdata; in qla1280_info()
701 bdp = &ql1280_board_tbl[ha->devnum]; in qla1280_info()
727 struct scsi_qla_host *ha = (struct scsi_qla_host *)host->hostdata; in qla1280_queuecommand() local
744 status = qla1280_64bit_start_scsi(ha, sp); in qla1280_queuecommand()
746 status = qla1280_32bit_start_scsi(ha, sp); in qla1280_queuecommand()
771 struct scsi_qla_host *ha = (struct scsi_qla_host *)__data; in qla1280_mailbox_timeout() local
773 reg = ha->iobase; in qla1280_mailbox_timeout()
775 ha->mailbox_out[0] = RD_REG_WORD(®->mailbox0); in qla1280_mailbox_timeout()
777 "ictrl %04x, istatus %04x\n", ha->host_no, ha->mailbox_out[0], in qla1280_mailbox_timeout()
779 complete(ha->mailbox_wait); in qla1280_mailbox_timeout()
804 struct scsi_qla_host *ha; in qla1280_error_action() local
813 ha = (struct scsi_qla_host *)(CMD_HOST(cmd)->hostdata); in qla1280_error_action()
816 RD_REG_WORD(&ha->iobase->istatus)); in qla1280_error_action()
819 RD_REG_WORD(&ha->iobase->host_cmd), in qla1280_error_action()
820 RD_REG_WORD(&ha->iobase->ictrl), jiffies); in qla1280_error_action()
826 ha->host_no, cmd, CMD_HANDLE(cmd), action); in qla1280_error_action()
835 ha = (struct scsi_qla_host *)cmd->device->host->hostdata; in qla1280_error_action()
840 data = qla1280_debounce_register(&ha->iobase->istatus); in qla1280_error_action()
847 qla1280_isr(ha, &ha->done_q); in qla1280_error_action()
886 if (sp == ha->outstanding_cmds[i]) { in qla1280_error_action()
888 if (qla1280_abort_command(ha, sp, i) == 0) in qla1280_error_action()
902 ha->host_no, bus, target, lun); in qla1280_error_action()
912 "command.\n", ha->host_no, bus, target, lun); in qla1280_error_action()
913 if (qla1280_abort_device(ha, bus, target, lun) == 0) in qla1280_error_action()
921 "command.\n", ha->host_no, bus, target, lun); in qla1280_error_action()
922 if (qla1280_device_reset(ha, bus, target) == 0) in qla1280_error_action()
929 "reset.\n", ha->host_no, bus); in qla1280_error_action()
930 if (qla1280_bus_reset(ha, bus) == 0) in qla1280_error_action()
939 ha->host_no); in qla1280_error_action()
941 "continue automatically\n", ha->host_no); in qla1280_error_action()
943 ha->flags.reset_active = 1; in qla1280_error_action()
948 if (qla1280_abort_isp(ha) == 0) in qla1280_error_action()
951 ha->flags.reset_active = 0; in qla1280_error_action()
954 if (!list_empty(&ha->done_q)) in qla1280_error_action()
955 qla1280_done(ha); in qla1280_error_action()
978 spin_unlock_irq(ha->host->host_lock); in qla1280_error_action()
981 spin_lock_irq(ha->host->host_lock); in qla1280_error_action()
1090 qla1280_disable_intrs(struct scsi_qla_host *ha) in qla1280_disable_intrs() argument
1092 WRT_REG_WORD(&ha->iobase->ictrl, 0); in qla1280_disable_intrs()
1093 RD_REG_WORD(&ha->iobase->ictrl); /* PCI Posted Write flush */ in qla1280_disable_intrs()
1098 qla1280_enable_intrs(struct scsi_qla_host *ha) in qla1280_enable_intrs() argument
1100 WRT_REG_WORD(&ha->iobase->ictrl, (ISP_EN_INT | ISP_EN_RISC)); in qla1280_enable_intrs()
1101 RD_REG_WORD(&ha->iobase->ictrl); /* PCI Posted Write flush */ in qla1280_enable_intrs()
1111 struct scsi_qla_host *ha; in qla1280_intr_handler() local
1117 ha = (struct scsi_qla_host *)dev_id; in qla1280_intr_handler()
1119 spin_lock(ha->host->host_lock); in qla1280_intr_handler()
1121 ha->isr_count++; in qla1280_intr_handler()
1122 reg = ha->iobase; in qla1280_intr_handler()
1124 qla1280_disable_intrs(ha); in qla1280_intr_handler()
1129 qla1280_isr(ha, &ha->done_q); in qla1280_intr_handler()
1132 if (!list_empty(&ha->done_q)) in qla1280_intr_handler()
1133 qla1280_done(ha); in qla1280_intr_handler()
1135 spin_unlock(ha->host->host_lock); in qla1280_intr_handler()
1137 qla1280_enable_intrs(ha); in qla1280_intr_handler()
1145 qla1280_set_target_parameters(struct scsi_qla_host *ha, int bus, int target) in qla1280_set_target_parameters() argument
1152 nv = &ha->nvram; in qla1280_set_target_parameters()
1168 if (IS_ISP1x160(ha)) { in qla1280_set_target_parameters()
1179 status = qla1280_mailbox_command(ha, mr, mb); in qla1280_set_target_parameters()
1188 status |= qla1280_mailbox_command(ha, 0x0f, mb); in qla1280_set_target_parameters()
1194 ha->host_no, bus, target); in qla1280_set_target_parameters()
1213 struct scsi_qla_host *ha; in qla1280_slave_configure() local
1221 ha = (struct scsi_qla_host *)device->host->hostdata; in qla1280_slave_configure()
1222 nv = &ha->nvram; in qla1280_slave_configure()
1224 if (qla1280_check_for_dead_scsi_bus(ha, bus)) in qla1280_slave_configure()
1228 (ha->bus_settings[bus].qtag_enables & (BIT_0 << target))) { in qla1280_slave_configure()
1230 ha->bus_settings[bus].hiwat); in qla1280_slave_configure()
1247 if (IS_ISP1x160(ha)) { in qla1280_slave_configure()
1254 spin_lock_irqsave(ha->host->host_lock, flags); in qla1280_slave_configure()
1256 status = qla1280_set_target_parameters(ha, bus, target); in qla1280_slave_configure()
1257 qla1280_get_target_parameters(ha, device); in qla1280_slave_configure()
1258 spin_unlock_irqrestore(ha->host->host_lock, flags); in qla1280_slave_configure()
1271 qla1280_done(struct scsi_qla_host *ha) in qla1280_done() argument
1280 done_q = &ha->done_q; in qla1280_done()
1295 qla1280_marker(ha, bus, target, 0, MK_SYNC_ID); in qla1280_done()
1312 ha->actthreads--; in qla1280_done()
1439 qla1280_initialize_adapter(struct scsi_qla_host *ha) in qla1280_initialize_adapter() argument
1449 ha->flags.online = 0; in qla1280_initialize_adapter()
1450 ha->flags.disable_host_adapter = 0; in qla1280_initialize_adapter()
1451 ha->flags.reset_active = 0; in qla1280_initialize_adapter()
1452 ha->flags.abort_isp_active = 0; in qla1280_initialize_adapter()
1457 "dual channel lockup workaround\n", ha->host_no); in qla1280_initialize_adapter()
1458 ha->flags.use_pci_vchannel = 1; in qla1280_initialize_adapter()
1464 if (IS_ISP1040(ha)) in qla1280_initialize_adapter()
1469 reg = ha->iobase; in qla1280_initialize_adapter()
1477 if (qla1280_read_nvram(ha)) { in qla1280_initialize_adapter()
1487 spin_lock_irqsave(ha->host->host_lock, flags); in qla1280_initialize_adapter()
1489 status = qla1280_load_firmware(ha); in qla1280_initialize_adapter()
1492 ha->host_no); in qla1280_initialize_adapter()
1497 dprintk(1, "scsi(%ld): Configure NVRAM parameters\n", ha->host_no); in qla1280_initialize_adapter()
1498 qla1280_nvram_config(ha); in qla1280_initialize_adapter()
1500 if (ha->flags.disable_host_adapter) { in qla1280_initialize_adapter()
1505 status = qla1280_init_rings(ha); in qla1280_initialize_adapter()
1510 for (bus = 0; bus < ha->ports; bus++) { in qla1280_initialize_adapter()
1511 if (!ha->bus_settings[bus].disable_scsi_reset && in qla1280_initialize_adapter()
1512 qla1280_bus_reset(ha, bus) && in qla1280_initialize_adapter()
1513 qla1280_bus_reset(ha, bus)) in qla1280_initialize_adapter()
1514 ha->bus_settings[bus].scsi_bus_dead = 1; in qla1280_initialize_adapter()
1517 ha->flags.online = 1; in qla1280_initialize_adapter()
1519 spin_unlock_irqrestore(ha->host->host_lock, flags); in qla1280_initialize_adapter()
1539 qla1280_chip_diag(struct scsi_qla_host *ha) in qla1280_chip_diag() argument
1542 struct device_reg __iomem *reg = ha->iobase; in qla1280_chip_diag()
1548 dprintk(1, "scsi(%ld): Verifying chip\n", ha->host_no); in qla1280_chip_diag()
1617 qla1280_enable_intrs(ha); in qla1280_chip_diag()
1630 status = qla1280_mailbox_command(ha, 0xff, mb); in qla1280_chip_diag()
1649 qla1280_load_firmware_pio(struct scsi_qla_host *ha) in qla1280_load_firmware_pio() argument
1656 risc_address = *ql1280_board_tbl[ha->devnum].fwstart; in qla1280_load_firmware_pio()
1657 risc_code_address = ql1280_board_tbl[ha->devnum].fwcode; in qla1280_load_firmware_pio()
1658 risc_code_size = *ql1280_board_tbl[ha->devnum].fwlen; in qla1280_load_firmware_pio()
1665 err = qla1280_mailbox_command(ha, BIT_0 | BIT_1 | BIT_2, mb); in qla1280_load_firmware_pio()
1668 ha->host_no); in qla1280_load_firmware_pio()
1678 qla1280_load_firmware_dma(struct scsi_qla_host *ha) in qla1280_load_firmware_dma() argument
1687 tbuf = pci_alloc_consistent(ha->pdev, 8000, &p_tbuf); in qla1280_load_firmware_dma()
1693 risc_address = *ql1280_board_tbl[ha->devnum].fwstart; in qla1280_load_firmware_dma()
1694 risc_code_address = ql1280_board_tbl[ha->devnum].fwcode; in qla1280_load_firmware_dma()
1695 risc_code_size = *ql1280_board_tbl[ha->devnum].fwlen; in qla1280_load_firmware_dma()
1713 ((__le16 *)ha->request_ring)[i] = in qla1280_load_firmware_dma()
1719 mb[3] = ha->request_dma & 0xffff; in qla1280_load_firmware_dma()
1720 mb[2] = (ha->request_dma >> 16) & 0xffff; in qla1280_load_firmware_dma()
1721 mb[7] = pci_dma_hi32(ha->request_dma) & 0xffff; in qla1280_load_firmware_dma()
1722 mb[6] = pci_dma_hi32(ha->request_dma) >> 16; in qla1280_load_firmware_dma()
1725 (void *)(long)ha->request_dma, in qla1280_load_firmware_dma()
1727 err = qla1280_mailbox_command(ha, BIT_4 | BIT_3 | BIT_2 | in qla1280_load_firmware_dma()
1731 "segment of f\n", ha->host_no); in qla1280_load_firmware_dma()
1744 err = qla1280_mailbox_command(ha, BIT_4 | BIT_3 | BIT_2 | in qla1280_load_firmware_dma()
1751 sp = (uint8_t *)ha->request_ring; in qla1280_load_firmware_dma()
1772 pci_free_consistent(ha->pdev, 8000, tbuf, p_tbuf); in qla1280_load_firmware_dma()
1778 qla1280_start_firmware(struct scsi_qla_host *ha) in qla1280_start_firmware() argument
1789 mb[1] = *ql1280_board_tbl[ha->devnum].fwstart; in qla1280_start_firmware()
1790 err = qla1280_mailbox_command(ha, BIT_1 | BIT_0, mb); in qla1280_start_firmware()
1792 printk(KERN_ERR "scsi(%li): RISC checksum failed.\n", ha->host_no); in qla1280_start_firmware()
1799 mb[1] = *ql1280_board_tbl[ha->devnum].fwstart; in qla1280_start_firmware()
1800 err = qla1280_mailbox_command(ha, BIT_1 | BIT_0, &mb[0]); in qla1280_start_firmware()
1803 ha->host_no); in qla1280_start_firmware()
1810 qla1280_load_firmware(struct scsi_qla_host *ha) in qla1280_load_firmware() argument
1814 err = qla1280_chip_diag(ha); in qla1280_load_firmware()
1817 if (IS_ISP1040(ha)) in qla1280_load_firmware()
1818 err = qla1280_load_firmware_pio(ha); in qla1280_load_firmware()
1820 err = qla1280_load_firmware_dma(ha); in qla1280_load_firmware()
1823 err = qla1280_start_firmware(ha); in qla1280_load_firmware()
1842 qla1280_init_rings(struct scsi_qla_host *ha) in qla1280_init_rings() argument
1850 memset(ha->outstanding_cmds, 0, in qla1280_init_rings()
1854 ha->request_ring_ptr = ha->request_ring; in qla1280_init_rings()
1855 ha->req_ring_index = 0; in qla1280_init_rings()
1856 ha->req_q_cnt = REQUEST_ENTRY_CNT; in qla1280_init_rings()
1860 mb[3] = ha->request_dma & 0xffff; in qla1280_init_rings()
1861 mb[2] = (ha->request_dma >> 16) & 0xffff; in qla1280_init_rings()
1863 mb[7] = pci_dma_hi32(ha->request_dma) & 0xffff; in qla1280_init_rings()
1864 mb[6] = pci_dma_hi32(ha->request_dma) >> 16; in qla1280_init_rings()
1865 if (!(status = qla1280_mailbox_command(ha, BIT_7 | BIT_6 | BIT_4 | in qla1280_init_rings()
1869 ha->response_ring_ptr = ha->response_ring; in qla1280_init_rings()
1870 ha->rsp_ring_index = 0; in qla1280_init_rings()
1874 mb[3] = ha->response_dma & 0xffff; in qla1280_init_rings()
1875 mb[2] = (ha->response_dma >> 16) & 0xffff; in qla1280_init_rings()
1877 mb[7] = pci_dma_hi32(ha->response_dma) & 0xffff; in qla1280_init_rings()
1878 mb[6] = pci_dma_hi32(ha->response_dma) >> 16; in qla1280_init_rings()
1879 status = qla1280_mailbox_command(ha, BIT_7 | BIT_6 | BIT_5 | in qla1280_init_rings()
1942 qla1280_set_target_defaults(struct scsi_qla_host *ha, int bus, int target) in qla1280_set_target_defaults() argument
1944 struct nvram *nv = &ha->nvram; in qla1280_set_target_defaults()
1958 if (IS_ISP1x160(ha)) { in qla1280_set_target_defaults()
1973 qla1280_set_defaults(struct scsi_qla_host *ha) in qla1280_set_defaults() argument
1975 struct nvram *nv = &ha->nvram; in qla1280_set_defaults()
1997 if (IS_ISP1040(ha)) in qla1280_set_defaults()
2002 if (IS_ISP1x160(ha)) in qla1280_set_defaults()
2012 if (IS_ISP1040(ha)) { in qla1280_set_defaults()
2022 qla1280_set_target_defaults(ha, bus, target); in qla1280_set_defaults()
2027 qla1280_config_target(struct scsi_qla_host *ha, int bus, int target) in qla1280_config_target() argument
2029 struct nvram *nv = &ha->nvram; in qla1280_config_target()
2046 if (IS_ISP1x160(ha)) in qla1280_config_target()
2051 status = qla1280_mailbox_command(ha, 0x0f, mb); in qla1280_config_target()
2056 ha->bus_settings[bus].qtag_enables |= flag; in qla1280_config_target()
2059 if (IS_ISP1x160(ha)) { in qla1280_config_target()
2061 ha->bus_settings[bus].device_enables |= flag; in qla1280_config_target()
2062 ha->bus_settings[bus].lun_disables |= 0; in qla1280_config_target()
2065 ha->bus_settings[bus].device_enables |= flag; in qla1280_config_target()
2068 ha->bus_settings[bus].lun_disables |= flag; in qla1280_config_target()
2078 status |= qla1280_mailbox_command(ha, 0x0f, mb); in qla1280_config_target()
2085 qla1280_config_bus(struct scsi_qla_host *ha, int bus) in qla1280_config_bus() argument
2087 struct nvram *nv = &ha->nvram; in qla1280_config_bus()
2092 ha->bus_settings[bus].disable_scsi_reset = in qla1280_config_bus()
2096 ha->bus_settings[bus].id = nv->bus[bus].config_1.initiator_id; in qla1280_config_bus()
2098 mb[1] = bus ? ha->bus_settings[bus].id | BIT_7 : in qla1280_config_bus()
2099 ha->bus_settings[bus].id; in qla1280_config_bus()
2100 status = qla1280_mailbox_command(ha, BIT_1 | BIT_0, &mb[0]); in qla1280_config_bus()
2103 ha->bus_settings[bus].bus_reset_delay = in qla1280_config_bus()
2107 ha->bus_settings[bus].hiwat = nv->bus[bus].max_queue_depth - 1; in qla1280_config_bus()
2111 status |= qla1280_config_target(ha, bus, target); in qla1280_config_bus()
2117 qla1280_nvram_config(struct scsi_qla_host *ha) in qla1280_nvram_config() argument
2119 struct device_reg __iomem *reg = ha->iobase; in qla1280_nvram_config()
2120 struct nvram *nv = &ha->nvram; in qla1280_nvram_config()
2126 if (ha->nvram_valid) { in qla1280_nvram_config()
2134 qla1280_set_defaults(ha); in qla1280_nvram_config()
2140 ha->flags.disable_risc_code_load = in qla1280_nvram_config()
2143 if (IS_ISP1040(ha)) { in qla1280_nvram_config()
2168 if (ha->ports > 1) in qla1280_nvram_config()
2186 status |= qla1280_mailbox_command(ha, BIT_1 | BIT_0, &mb[0]); in qla1280_nvram_config()
2188 if (IS_ISP1x40(ha)) { in qla1280_nvram_config()
2192 status |= qla1280_mailbox_command(ha, BIT_1 | BIT_0, mb); in qla1280_nvram_config()
2203 "workaround\n", ha->host_no); in qla1280_nvram_config()
2207 status |= qla1280_mailbox_command(ha, BIT_1 | BIT_0, mb); in qla1280_nvram_config()
2215 status |= qla1280_mailbox_command(ha, BIT_7 | BIT_6 | BIT_2 | in qla1280_nvram_config()
2222 status |= qla1280_mailbox_command(ha, BIT_2 | BIT_1 | BIT_0, &mb[0]); in qla1280_nvram_config()
2236 status |= qla1280_mailbox_command(ha, BIT_2 | BIT_1 | BIT_0, mb); in qla1280_nvram_config()
2240 status |= qla1280_mailbox_command(ha, BIT_1 | BIT_0, mb); in qla1280_nvram_config()
2246 status |= qla1280_mailbox_command(ha, BIT_2 | BIT_1 | BIT_0, mb); in qla1280_nvram_config()
2250 status |= qla1280_mailbox_command(ha, BIT_1 | BIT_0, mb); in qla1280_nvram_config()
2256 status |= qla1280_mailbox_command(ha, BIT_2 | BIT_1 | BIT_0, mb); in qla1280_nvram_config()
2258 for (bus = 0; bus < ha->ports; bus++) in qla1280_nvram_config()
2259 status |= qla1280_config_bus(ha, bus); in qla1280_nvram_config()
2281 qla1280_get_nvram_word(struct scsi_qla_host *ha, uint32_t address) in qla1280_get_nvram_word() argument
2289 data = le16_to_cpu(qla1280_nvram_request(ha, nv_cmd)); in qla1280_get_nvram_word()
2312 qla1280_nvram_request(struct scsi_qla_host *ha, uint32_t nv_cmd) in qla1280_nvram_request() argument
2314 struct device_reg __iomem *reg = ha->iobase; in qla1280_nvram_request()
2324 qla1280_nv_write(ha, NV_DATA_OUT); in qla1280_nvram_request()
2326 qla1280_nv_write(ha, 0); in qla1280_nvram_request()
2355 qla1280_nv_write(struct scsi_qla_host *ha, uint16_t data) in qla1280_nv_write() argument
2357 struct device_reg __iomem *reg = ha->iobase; in qla1280_nv_write()
2386 qla1280_mailbox_command(struct scsi_qla_host *ha, uint8_t mr, uint16_t *mb) in qla1280_mailbox_command() argument
2388 struct device_reg __iomem *reg = ha->iobase; in qla1280_mailbox_command()
2402 if (ha->mailbox_wait) { in qla1280_mailbox_command()
2405 ha->mailbox_wait = &wait; in qla1280_mailbox_command()
2429 timer.data = (unsigned long)ha; in qla1280_mailbox_command()
2433 spin_unlock_irq(ha->host->host_lock); in qla1280_mailbox_command()
2440 spin_lock_irq(ha->host->host_lock); in qla1280_mailbox_command()
2442 ha->mailbox_wait = NULL; in qla1280_mailbox_command()
2445 if (ha->mailbox_out[0] != MBS_CMD_CMP) { in qla1280_mailbox_command()
2449 mb[0], ha->mailbox_out[0], RD_REG_WORD(®->istatus)); in qla1280_mailbox_command()
2461 iptr = (uint16_t *) &ha->mailbox_out[0]; in qla1280_mailbox_command()
2467 qla1280_isr(ha, &done_q); in qla1280_mailbox_command()
2470 if (ha->flags.reset_marker) in qla1280_mailbox_command()
2471 qla1280_rst_aen(ha); in qla1280_mailbox_command()
2475 qla1280_done(ha, &done_q); in qla1280_mailbox_command()
2494 qla1280_poll(struct scsi_qla_host *ha) in qla1280_poll() argument
2496 struct device_reg __iomem *reg = ha->iobase; in qla1280_poll()
2505 qla1280_isr(ha, &done_q); in qla1280_poll()
2507 if (!ha->mailbox_wait) { in qla1280_poll()
2508 if (ha->flags.reset_marker) in qla1280_poll()
2509 qla1280_rst_aen(ha); in qla1280_poll()
2513 qla1280_done(ha); in qla1280_poll()
2530 qla1280_bus_reset(struct scsi_qla_host *ha, int bus) in qla1280_bus_reset() argument
2540 ha->host_no, bus); in qla1280_bus_reset()
2542 reset_delay = ha->bus_settings[bus].bus_reset_delay; in qla1280_bus_reset()
2546 status = qla1280_mailbox_command(ha, BIT_2 | BIT_1 | BIT_0, &mb[0]); in qla1280_bus_reset()
2549 if (ha->bus_settings[bus].failed_reset_count > 2) in qla1280_bus_reset()
2550 ha->bus_settings[bus].scsi_bus_dead = 1; in qla1280_bus_reset()
2551 ha->bus_settings[bus].failed_reset_count++; in qla1280_bus_reset()
2553 spin_unlock_irq(ha->host->host_lock); in qla1280_bus_reset()
2555 spin_lock_irq(ha->host->host_lock); in qla1280_bus_reset()
2557 ha->bus_settings[bus].scsi_bus_dead = 0; in qla1280_bus_reset()
2558 ha->bus_settings[bus].failed_reset_count = 0; in qla1280_bus_reset()
2559 ha->bus_settings[bus].reset_marker = 0; in qla1280_bus_reset()
2561 qla1280_marker(ha, bus, 0, 0, MK_SYNC_ALL); in qla1280_bus_reset()
2590 qla1280_device_reset(struct scsi_qla_host *ha, int bus, int target) in qla1280_device_reset() argument
2600 status = qla1280_mailbox_command(ha, BIT_2 | BIT_1 | BIT_0, &mb[0]); in qla1280_device_reset()
2603 qla1280_marker(ha, bus, target, 0, MK_SYNC_ID); in qla1280_device_reset()
2626 qla1280_abort_device(struct scsi_qla_host *ha, int bus, int target, int lun) in qla1280_abort_device() argument
2635 status = qla1280_mailbox_command(ha, BIT_1 | BIT_0, &mb[0]); in qla1280_abort_device()
2638 qla1280_marker(ha, bus, target, lun, MK_SYNC_ID_LUN); in qla1280_abort_device()
2659 qla1280_abort_command(struct scsi_qla_host *ha, struct srb * sp, int handle) in qla1280_abort_command() argument
2677 status = qla1280_mailbox_command(ha, 0x0f, &mb[0]); in qla1280_abort_command()
2697 qla1280_reset_adapter(struct scsi_qla_host *ha) in qla1280_reset_adapter() argument
2699 struct device_reg __iomem *reg = ha->iobase; in qla1280_reset_adapter()
2704 ha->flags.online = 0; in qla1280_reset_adapter()
2725 qla1280_marker(struct scsi_qla_host *ha, int bus, int id, int lun, u8 type) in qla1280_marker() argument
2732 if ((pkt = (struct mrk_entry *) qla1280_req_pkt(ha))) { in qla1280_marker()
2740 qla1280_isp_cmd(ha); in qla1280_marker()
2761 qla1280_64bit_start_scsi(struct scsi_qla_host *ha, struct srb * sp) in qla1280_64bit_start_scsi() argument
2763 struct device_reg __iomem *reg = ha->iobase; in qla1280_64bit_start_scsi()
2790 if ((req_cnt + 2) >= ha->req_q_cnt) { in qla1280_64bit_start_scsi()
2793 if (ha->req_ring_index < cnt) in qla1280_64bit_start_scsi()
2794 ha->req_q_cnt = cnt - ha->req_ring_index; in qla1280_64bit_start_scsi()
2796 ha->req_q_cnt = in qla1280_64bit_start_scsi()
2797 REQUEST_ENTRY_CNT - (ha->req_ring_index - cnt); in qla1280_64bit_start_scsi()
2801 ha->req_q_cnt, seg_cnt); in qla1280_64bit_start_scsi()
2804 if ((req_cnt + 2) >= ha->req_q_cnt) { in qla1280_64bit_start_scsi()
2807 "0x%xreq_cnt=0x%x", ha->req_ring_index, ha->req_q_cnt, in qla1280_64bit_start_scsi()
2814 ha->outstanding_cmds[cnt] != NULL; cnt++); in qla1280_64bit_start_scsi()
2819 "OUTSTANDING ARRAY, req_q_cnt=0x%x", ha->req_q_cnt); in qla1280_64bit_start_scsi()
2823 ha->outstanding_cmds[cnt] = sp; in qla1280_64bit_start_scsi()
2824 ha->req_q_cnt -= req_cnt; in qla1280_64bit_start_scsi()
2836 pkt = (cmd_a64_entry_t *) ha->request_ring_ptr; in qla1280_64bit_start_scsi()
2840 pkt->sys_define = (uint8_t) ha->req_ring_index; in qla1280_64bit_start_scsi()
2890 if (ha->flags.use_pci_vchannel) in qla1280_64bit_start_scsi()
2891 sn_pci_set_vchan(ha->pdev, in qla1280_64bit_start_scsi()
2923 ha->req_ring_index++; in qla1280_64bit_start_scsi()
2924 if (ha->req_ring_index == REQUEST_ENTRY_CNT) { in qla1280_64bit_start_scsi()
2925 ha->req_ring_index = 0; in qla1280_64bit_start_scsi()
2926 ha->request_ring_ptr = in qla1280_64bit_start_scsi()
2927 ha->request_ring; in qla1280_64bit_start_scsi()
2929 ha->request_ring_ptr++; in qla1280_64bit_start_scsi()
2931 pkt = (cmd_a64_entry_t *)ha->request_ring_ptr; in qla1280_64bit_start_scsi()
2941 (uint8_t)ha->req_ring_index; in qla1280_64bit_start_scsi()
2952 if (ha->flags.use_pci_vchannel) in qla1280_64bit_start_scsi()
2953 sn_pci_set_vchan(ha->pdev, in qla1280_64bit_start_scsi()
2983 ha->req_ring_index++; in qla1280_64bit_start_scsi()
2984 if (ha->req_ring_index == REQUEST_ENTRY_CNT) { in qla1280_64bit_start_scsi()
2985 ha->req_ring_index = 0; in qla1280_64bit_start_scsi()
2986 ha->request_ring_ptr = ha->request_ring; in qla1280_64bit_start_scsi()
2988 ha->request_ring_ptr++; in qla1280_64bit_start_scsi()
2994 ha->actthreads++; in qla1280_64bit_start_scsi()
2995 WRT_REG_WORD(®->mailbox4, ha->req_ring_index); in qla1280_64bit_start_scsi()
3029 qla1280_32bit_start_scsi(struct scsi_qla_host *ha, struct srb * sp) in qla1280_32bit_start_scsi() argument
3031 struct device_reg __iomem *reg = ha->iobase; in qla1280_32bit_start_scsi()
3066 if ((req_cnt + 2) >= ha->req_q_cnt) { in qla1280_32bit_start_scsi()
3069 if (ha->req_ring_index < cnt) in qla1280_32bit_start_scsi()
3070 ha->req_q_cnt = cnt - ha->req_ring_index; in qla1280_32bit_start_scsi()
3072 ha->req_q_cnt = in qla1280_32bit_start_scsi()
3073 REQUEST_ENTRY_CNT - (ha->req_ring_index - cnt); in qla1280_32bit_start_scsi()
3077 ha->req_q_cnt, seg_cnt); in qla1280_32bit_start_scsi()
3079 if ((req_cnt + 2) >= ha->req_q_cnt) { in qla1280_32bit_start_scsi()
3082 "req_q_cnt=0x%x, req_cnt=0x%x", ha->req_ring_index, in qla1280_32bit_start_scsi()
3083 ha->req_q_cnt, req_cnt); in qla1280_32bit_start_scsi()
3089 (ha->outstanding_cmds[cnt] != 0); cnt++) ; in qla1280_32bit_start_scsi()
3094 "ARRAY, req_q_cnt=0x%x\n", ha->req_q_cnt); in qla1280_32bit_start_scsi()
3099 ha->outstanding_cmds[cnt] = sp; in qla1280_32bit_start_scsi()
3100 ha->req_q_cnt -= req_cnt; in qla1280_32bit_start_scsi()
3105 pkt = (struct cmd_entry *) ha->request_ring_ptr; in qla1280_32bit_start_scsi()
3109 pkt->sys_define = (uint8_t) ha->req_ring_index; in qla1280_32bit_start_scsi()
3176 ha->req_ring_index++; in qla1280_32bit_start_scsi()
3177 if (ha->req_ring_index == REQUEST_ENTRY_CNT) { in qla1280_32bit_start_scsi()
3178 ha->req_ring_index = 0; in qla1280_32bit_start_scsi()
3179 ha->request_ring_ptr = in qla1280_32bit_start_scsi()
3180 ha->request_ring; in qla1280_32bit_start_scsi()
3182 ha->request_ring_ptr++; in qla1280_32bit_start_scsi()
3184 pkt = (struct cmd_entry *)ha->request_ring_ptr; in qla1280_32bit_start_scsi()
3195 (uint8_t) ha->req_ring_index; in qla1280_32bit_start_scsi()
3229 qla1280_dump_buffer(5, (char *)ha->request_ring_ptr, in qla1280_32bit_start_scsi()
3233 ha->req_ring_index++; in qla1280_32bit_start_scsi()
3234 if (ha->req_ring_index == REQUEST_ENTRY_CNT) { in qla1280_32bit_start_scsi()
3235 ha->req_ring_index = 0; in qla1280_32bit_start_scsi()
3236 ha->request_ring_ptr = ha->request_ring; in qla1280_32bit_start_scsi()
3238 ha->request_ring_ptr++; in qla1280_32bit_start_scsi()
3244 ha->actthreads++; in qla1280_32bit_start_scsi()
3245 WRT_REG_WORD(®->mailbox4, ha->req_ring_index); in qla1280_32bit_start_scsi()
3271 qla1280_req_pkt(struct scsi_qla_host *ha) in qla1280_req_pkt() argument
3273 struct device_reg __iomem *reg = ha->iobase; in qla1280_req_pkt()
3285 if (ha->req_q_cnt > 0) { in qla1280_req_pkt()
3288 if (ha->req_ring_index < cnt) in qla1280_req_pkt()
3289 ha->req_q_cnt = cnt - ha->req_ring_index; in qla1280_req_pkt()
3291 ha->req_q_cnt = in qla1280_req_pkt()
3292 REQUEST_ENTRY_CNT - (ha->req_ring_index - cnt); in qla1280_req_pkt()
3296 if (ha->req_q_cnt > 0) { in qla1280_req_pkt()
3297 ha->req_q_cnt--; in qla1280_req_pkt()
3298 pkt = ha->request_ring_ptr; in qla1280_req_pkt()
3308 pkt->sys_define = (uint8_t) ha->req_ring_index; in qla1280_req_pkt()
3319 qla1280_poll(ha); in qla1280_req_pkt()
3339 qla1280_isp_cmd(struct scsi_qla_host *ha) in qla1280_isp_cmd() argument
3341 struct device_reg __iomem *reg = ha->iobase; in qla1280_isp_cmd()
3346 qla1280_dump_buffer(5, (char *)ha->request_ring_ptr, in qla1280_isp_cmd()
3350 ha->req_ring_index++; in qla1280_isp_cmd()
3351 if (ha->req_ring_index == REQUEST_ENTRY_CNT) { in qla1280_isp_cmd()
3352 ha->req_ring_index = 0; in qla1280_isp_cmd()
3353 ha->request_ring_ptr = ha->request_ring; in qla1280_isp_cmd()
3355 ha->request_ring_ptr++; in qla1280_isp_cmd()
3370 WRT_REG_WORD(®->mailbox4, ha->req_ring_index); in qla1280_isp_cmd()
3389 qla1280_isr(struct scsi_qla_host *ha, struct list_head *done_q) in qla1280_isr() argument
3391 struct device_reg __iomem *reg = ha->iobase; in qla1280_isr()
3443 if (ha->flags.online) { in qla1280_isr()
3449 sp = ha->outstanding_cmds[index]; in qla1280_isr()
3455 ha->outstanding_cmds[index] = NULL; in qla1280_isr()
3473 ha->flags.reset_marker = 1; in qla1280_isr()
3475 ha->bus_settings[index].reset_marker = 1; in qla1280_isr()
3511 ha->flags.reset_marker = 1; in qla1280_isr()
3513 ha->bus_settings[index].reset_marker = 1; in qla1280_isr()
3525 memcpy((uint16_t *) ha->mailbox_out, wptr, in qla1280_isr()
3529 if(ha->mailbox_wait != NULL) in qla1280_isr()
3530 complete(ha->mailbox_wait); in qla1280_isr()
3542 if (!(ha->flags.online && !ha->mailbox_wait)) { in qla1280_isr()
3550 while (ha->rsp_ring_index != mailbox[5]) { in qla1280_isr()
3551 pkt = ha->response_ring_ptr; in qla1280_isr()
3554 " = 0x%x\n", ha->rsp_ring_index, mailbox[5]); in qla1280_isr()
3564 ha->rsp_ring_index, mailbox[5], in qla1280_isr()
3571 ha->rsp_ring_index, mailbox[5]); in qla1280_isr()
3579 ha->outstanding_cmds[pkt->handle]->cmd, in qla1280_isr()
3582 qla1280_status_entry(ha, pkt, done_q); in qla1280_isr()
3584 qla1280_error_entry(ha, pkt, done_q); in qla1280_isr()
3586 ha->rsp_ring_index++; in qla1280_isr()
3587 if (ha->rsp_ring_index == RESPONSE_ENTRY_CNT) { in qla1280_isr()
3588 ha->rsp_ring_index = 0; in qla1280_isr()
3589 ha->response_ring_ptr = ha->response_ring; in qla1280_isr()
3591 ha->response_ring_ptr++; in qla1280_isr()
3592 WRT_REG_WORD(®->mailbox5, ha->rsp_ring_index); in qla1280_isr()
3608 qla1280_rst_aen(struct scsi_qla_host *ha) in qla1280_rst_aen() argument
3614 if (ha->flags.online && !ha->flags.reset_active && in qla1280_rst_aen()
3615 !ha->flags.abort_isp_active) { in qla1280_rst_aen()
3616 ha->flags.reset_active = 1; in qla1280_rst_aen()
3617 while (ha->flags.reset_marker) { in qla1280_rst_aen()
3619 ha->flags.reset_marker = 0; in qla1280_rst_aen()
3620 for (bus = 0; bus < ha->ports && in qla1280_rst_aen()
3621 !ha->flags.reset_marker; bus++) { in qla1280_rst_aen()
3622 if (ha->bus_settings[bus].reset_marker) { in qla1280_rst_aen()
3623 ha->bus_settings[bus].reset_marker = 0; in qla1280_rst_aen()
3624 qla1280_marker(ha, bus, 0, 0, in qla1280_rst_aen()
3645 qla1280_status_entry(struct scsi_qla_host *ha, struct response *pkt, in qla1280_status_entry() argument
3660 sp = ha->outstanding_cmds[handle]; in qla1280_status_entry()
3670 ha->outstanding_cmds[handle] = NULL; in qla1280_status_entry()
3741 qla1280_error_entry(struct scsi_qla_host *ha, struct response *pkt, in qla1280_error_entry() argument
3760 sp = ha->outstanding_cmds[handle]; in qla1280_error_entry()
3766 ha->outstanding_cmds[handle] = NULL; in qla1280_error_entry()
3803 qla1280_abort_isp(struct scsi_qla_host *ha) in qla1280_abort_isp() argument
3805 struct device_reg __iomem *reg = ha->iobase; in qla1280_abort_isp()
3813 if (ha->flags.abort_isp_active || !ha->flags.online) in qla1280_abort_isp()
3816 ha->flags.abort_isp_active = 1; in qla1280_abort_isp()
3819 qla1280_disable_intrs(ha); in qla1280_abort_isp()
3824 ha->host_no); in qla1280_abort_isp()
3828 sp = ha->outstanding_cmds[cnt]; in qla1280_abort_isp()
3835 ha->outstanding_cmds[cnt] = NULL; in qla1280_abort_isp()
3843 status = qla1280_load_firmware(ha); in qla1280_abort_isp()
3848 qla1280_nvram_config (ha); in qla1280_abort_isp()
3850 status = qla1280_init_rings(ha); in qla1280_abort_isp()
3855 for (bus = 0; bus < ha->ports; bus++) in qla1280_abort_isp()
3856 qla1280_bus_reset(ha, bus); in qla1280_abort_isp()
3858 ha->flags.abort_isp_active = 0; in qla1280_abort_isp()
3863 qla1280_reset_adapter(ha); in qla1280_abort_isp()
3912 qla1280_check_for_dead_scsi_bus(struct scsi_qla_host *ha, unsigned int bus) in qla1280_check_for_dead_scsi_bus() argument
3915 struct device_reg __iomem *reg = ha->iobase; in qla1280_check_for_dead_scsi_bus()
3917 if (ha->bus_settings[bus].scsi_bus_dead) { in qla1280_check_for_dead_scsi_bus()
3926 ha->bus_settings[bus].scsi_bus_dead = 1; in qla1280_check_for_dead_scsi_bus()
3936 ha->bus_settings[bus].scsi_bus_dead = 0; in qla1280_check_for_dead_scsi_bus()
3937 ha->bus_settings[bus].failed_reset_count = 0; in qla1280_check_for_dead_scsi_bus()
3944 qla1280_get_target_parameters(struct scsi_qla_host *ha, in qla1280_get_target_parameters() argument
3958 qla1280_mailbox_command(ha, BIT_6 | BIT_3 | BIT_2 | BIT_1 | BIT_0, in qla1280_get_target_parameters()
3961 printk(KERN_INFO "scsi(%li:%d:%d:%d):", ha->host_no, bus, target, lun); in qla1280_get_target_parameters()
4012 struct scsi_qla_host *ha; in __qla1280_print_scsi_cmd() local
4018 ha = (struct scsi_qla_host *)host->hostdata; in __qla1280_print_scsi_cmd()
4050 ql1280_dump_device(struct scsi_qla_host *ha) in ql1280_dump_device() argument
4060 if ((sp = ha->outstanding_cmds[i]) == NULL) in ql1280_dump_device()
4211 struct scsi_qla_host *ha; in qla1280_probe_one() local
4233 host = scsi_host_alloc(&qla1280_driver_template, sizeof(*ha)); in qla1280_probe_one()
4240 ha = (struct scsi_qla_host *)host->hostdata; in qla1280_probe_one()
4241 memset(ha, 0, sizeof(struct scsi_qla_host)); in qla1280_probe_one()
4243 ha->pdev = pdev; in qla1280_probe_one()
4244 ha->devnum = devnum; /* specifies microcode load address */ in qla1280_probe_one()
4247 if (pci_set_dma_mask(ha->pdev, DMA_64BIT_MASK)) { in qla1280_probe_one()
4248 if (pci_set_dma_mask(ha->pdev, DMA_32BIT_MASK)) { in qla1280_probe_one()
4250 "suitable DMA mask - aborting\n", ha->host_no); in qla1280_probe_one()
4256 ha->host_no); in qla1280_probe_one()
4258 if (pci_set_dma_mask(ha->pdev, DMA_32BIT_MASK)) { in qla1280_probe_one()
4260 "suitable DMA mask - aborting\n", ha->host_no); in qla1280_probe_one()
4266 ha->request_ring = pci_alloc_consistent(ha->pdev, in qla1280_probe_one()
4268 &ha->request_dma); in qla1280_probe_one()
4269 if (!ha->request_ring) { in qla1280_probe_one()
4274 ha->response_ring = pci_alloc_consistent(ha->pdev, in qla1280_probe_one()
4276 &ha->response_dma); in qla1280_probe_one()
4277 if (!ha->response_ring) { in qla1280_probe_one()
4282 ha->ports = bdp->numPorts; in qla1280_probe_one()
4284 ha->host = host; in qla1280_probe_one()
4285 ha->host_no = host->host_no; in qla1280_probe_one()
4297 ha->mmpbase = pci_ioremap_bar(ha->pdev, 1); in qla1280_probe_one()
4298 if (!ha->mmpbase) { in qla1280_probe_one()
4303 host->base = (unsigned long)ha->mmpbase; in qla1280_probe_one()
4304 ha->iobase = (struct device_reg __iomem *)ha->mmpbase; in qla1280_probe_one()
4306 host->io_port = pci_resource_start(ha->pdev, 0); in qla1280_probe_one()
4314 ha->iobase = (struct device_reg *)host->io_port; in qla1280_probe_one()
4317 INIT_LIST_HEAD(&ha->done_q); in qla1280_probe_one()
4320 qla1280_disable_intrs(ha); in qla1280_probe_one()
4323 "qla1280", ha)) { in qla1280_probe_one()
4330 if (qla1280_initialize_adapter(ha)) { in qla1280_probe_one()
4336 host->this_id = ha->bus_settings[0].id; in qla1280_probe_one()
4348 qla1280_disable_intrs(ha); in qla1280_probe_one()
4350 free_irq(pdev->irq, ha); in qla1280_probe_one()
4353 iounmap(ha->mmpbase); in qla1280_probe_one()
4358 pci_free_consistent(ha->pdev, in qla1280_probe_one()
4360 ha->response_ring, ha->response_dma); in qla1280_probe_one()
4362 pci_free_consistent(ha->pdev, in qla1280_probe_one()
4364 ha->request_ring, ha->request_dma); in qla1280_probe_one()
4378 struct scsi_qla_host *ha = (struct scsi_qla_host *)host->hostdata; in qla1280_remove_one() local
4382 qla1280_disable_intrs(ha); in qla1280_remove_one()
4384 free_irq(pdev->irq, ha); in qla1280_remove_one()
4387 iounmap(ha->mmpbase); in qla1280_remove_one()
4392 pci_free_consistent(ha->pdev, in qla1280_remove_one()
4394 ha->request_ring, ha->request_dma); in qla1280_remove_one()
4395 pci_free_consistent(ha->pdev, in qla1280_remove_one()
4397 ha->response_ring, ha->response_dma); in qla1280_remove_one()