Lines Matching refs:ha
407 #define IS_ISP1040(ha) (ha->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP1020) argument
408 #define IS_ISP1x40(ha) (ha->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP1020 || \ argument
409 ha->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP1240)
410 #define IS_ISP1x160(ha) (ha->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP10160 || \ argument
411 ha->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP12160)
606 static int qla1280_read_nvram(struct scsi_qla_host *ha) in qla1280_read_nvram() argument
618 printk(KERN_INFO "scsi(%ld): Reading NVRAM\n", ha->host_no); in qla1280_read_nvram()
620 wptr = (uint16_t *)&ha->nvram; in qla1280_read_nvram()
621 nv = &ha->nvram; in qla1280_read_nvram()
624 *wptr = qla1280_get_nvram_word(ha, cnt); in qla1280_read_nvram()
636 *wptr = qla1280_get_nvram_word(ha, cnt); in qla1280_read_nvram()
652 "settings\n", ha->host_no); in qla1280_read_nvram()
653 ha->nvram_valid = 0; in qla1280_read_nvram()
655 ha->nvram_valid = 1; in qla1280_read_nvram()
694 struct scsi_qla_host *ha; in qla1280_info() local
698 ha = (struct scsi_qla_host *)host->hostdata; in qla1280_info()
699 bdp = &ql1280_board_tbl[ha->devnum]; in qla1280_info()
705 &bdp->name[0], ha->fwver1, ha->fwver2, ha->fwver3, in qla1280_info()
725 struct scsi_qla_host *ha = (struct scsi_qla_host *)host->hostdata; in qla1280_queuecommand_lck() local
744 status = qla1280_64bit_start_scsi(ha, sp); in qla1280_queuecommand_lck()
746 status = qla1280_32bit_start_scsi(ha, sp); in qla1280_queuecommand_lck()
763 struct scsi_qla_host *ha = (struct scsi_qla_host *)__data; in qla1280_mailbox_timeout() local
765 reg = ha->iobase; in qla1280_mailbox_timeout()
767 ha->mailbox_out[0] = RD_REG_WORD(®->mailbox0); in qla1280_mailbox_timeout()
769 "ictrl %04x, istatus %04x\n", ha->host_no, ha->mailbox_out[0], in qla1280_mailbox_timeout()
771 complete(ha->mailbox_wait); in qla1280_mailbox_timeout()
775 _qla1280_wait_for_single_command(struct scsi_qla_host *ha, struct srb *sp, in _qla1280_wait_for_single_command() argument
781 spin_unlock_irq(ha->host->host_lock); in _qla1280_wait_for_single_command()
783 spin_lock_irq(ha->host->host_lock); in _qla1280_wait_for_single_command()
793 qla1280_wait_for_single_command(struct scsi_qla_host *ha, struct srb *sp) in qla1280_wait_for_single_command() argument
798 return _qla1280_wait_for_single_command(ha, sp, &wait); in qla1280_wait_for_single_command()
802 qla1280_wait_for_pending_commands(struct scsi_qla_host *ha, int bus, int target) in qla1280_wait_for_pending_commands() argument
816 sp = ha->outstanding_cmds[cnt]; in qla1280_wait_for_pending_commands()
825 status = qla1280_wait_for_single_command(ha, sp); in qla1280_wait_for_pending_commands()
850 struct scsi_qla_host *ha; in qla1280_error_action() local
861 ha = (struct scsi_qla_host *)(CMD_HOST(cmd)->hostdata); in qla1280_error_action()
868 RD_REG_WORD(&ha->iobase->istatus)); in qla1280_error_action()
871 RD_REG_WORD(&ha->iobase->host_cmd), in qla1280_error_action()
872 RD_REG_WORD(&ha->iobase->ictrl), jiffies); in qla1280_error_action()
877 ha->host_no, cmd, CMD_HANDLE(cmd), action); in qla1280_error_action()
887 if (sp == ha->outstanding_cmds[i]) { in qla1280_error_action()
899 "already completed.\n", ha->host_no, bus, in qla1280_error_action()
914 qla1280_abort_command(ha, sp, found); 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()
932 "reset.\n", ha->host_no, bus); in qla1280_error_action()
933 if (qla1280_bus_reset(ha, bus) == 0) { in qla1280_error_action()
944 ha->host_no); in qla1280_error_action()
946 "continue automatically\n", ha->host_no); in qla1280_error_action()
948 ha->flags.reset_active = 1; in qla1280_error_action()
950 if (qla1280_abort_isp(ha) != 0) { /* it's dead */ in qla1280_error_action()
954 ha->flags.reset_active = 0; in qla1280_error_action()
967 result = _qla1280_wait_for_single_command(ha, sp, &wait); in qla1280_error_action()
973 ha->host_no, bus, target, lun); in qla1280_error_action()
987 result = qla1280_wait_for_pending_commands(ha, in qla1280_error_action()
1088 qla1280_disable_intrs(struct scsi_qla_host *ha) in qla1280_disable_intrs() argument
1090 WRT_REG_WORD(&ha->iobase->ictrl, 0); in qla1280_disable_intrs()
1091 RD_REG_WORD(&ha->iobase->ictrl); /* PCI Posted Write flush */ in qla1280_disable_intrs()
1096 qla1280_enable_intrs(struct scsi_qla_host *ha) in qla1280_enable_intrs() argument
1098 WRT_REG_WORD(&ha->iobase->ictrl, (ISP_EN_INT | ISP_EN_RISC)); in qla1280_enable_intrs()
1099 RD_REG_WORD(&ha->iobase->ictrl); /* PCI Posted Write flush */ in qla1280_enable_intrs()
1109 struct scsi_qla_host *ha; in qla1280_intr_handler() local
1115 ha = (struct scsi_qla_host *)dev_id; in qla1280_intr_handler()
1117 spin_lock(ha->host->host_lock); in qla1280_intr_handler()
1119 ha->isr_count++; in qla1280_intr_handler()
1120 reg = ha->iobase; in qla1280_intr_handler()
1122 qla1280_disable_intrs(ha); in qla1280_intr_handler()
1127 qla1280_isr(ha, &ha->done_q); in qla1280_intr_handler()
1130 if (!list_empty(&ha->done_q)) in qla1280_intr_handler()
1131 qla1280_done(ha); in qla1280_intr_handler()
1133 spin_unlock(ha->host->host_lock); in qla1280_intr_handler()
1135 qla1280_enable_intrs(ha); in qla1280_intr_handler()
1143 qla1280_set_target_parameters(struct scsi_qla_host *ha, int bus, int target) in qla1280_set_target_parameters() argument
1150 nv = &ha->nvram; in qla1280_set_target_parameters()
1166 if (IS_ISP1x160(ha)) { in qla1280_set_target_parameters()
1177 status = qla1280_mailbox_command(ha, mr, mb); in qla1280_set_target_parameters()
1186 status |= qla1280_mailbox_command(ha, 0x0f, mb); in qla1280_set_target_parameters()
1192 ha->host_no, bus, target); in qla1280_set_target_parameters()
1211 struct scsi_qla_host *ha; in qla1280_slave_configure() local
1219 ha = (struct scsi_qla_host *)device->host->hostdata; in qla1280_slave_configure()
1220 nv = &ha->nvram; in qla1280_slave_configure()
1222 if (qla1280_check_for_dead_scsi_bus(ha, bus)) in qla1280_slave_configure()
1226 (ha->bus_settings[bus].qtag_enables & (BIT_0 << target))) { in qla1280_slave_configure()
1227 scsi_change_queue_depth(device, ha->bus_settings[bus].hiwat); in qla1280_slave_configure()
1244 if (IS_ISP1x160(ha)) { in qla1280_slave_configure()
1251 spin_lock_irqsave(ha->host->host_lock, flags); in qla1280_slave_configure()
1253 status = qla1280_set_target_parameters(ha, bus, target); in qla1280_slave_configure()
1254 qla1280_get_target_parameters(ha, device); in qla1280_slave_configure()
1255 spin_unlock_irqrestore(ha->host->host_lock, flags); in qla1280_slave_configure()
1268 qla1280_done(struct scsi_qla_host *ha) in qla1280_done() argument
1277 done_q = &ha->done_q; in qla1280_done()
1292 if (!ha->flags.abort_isp_active) in qla1280_done()
1293 qla1280_marker(ha, bus, target, 0, MK_SYNC_ID); in qla1280_done()
1307 ha->actthreads--; in qla1280_done()
1434 qla1280_initialize_adapter(struct scsi_qla_host *ha) in qla1280_initialize_adapter() argument
1444 ha->flags.online = 0; in qla1280_initialize_adapter()
1445 ha->flags.disable_host_adapter = 0; in qla1280_initialize_adapter()
1446 ha->flags.reset_active = 0; in qla1280_initialize_adapter()
1447 ha->flags.abort_isp_active = 0; in qla1280_initialize_adapter()
1452 "dual channel lockup workaround\n", ha->host_no); in qla1280_initialize_adapter()
1453 ha->flags.use_pci_vchannel = 1; in qla1280_initialize_adapter()
1459 if (IS_ISP1040(ha)) in qla1280_initialize_adapter()
1464 reg = ha->iobase; in qla1280_initialize_adapter()
1472 if (qla1280_read_nvram(ha)) { in qla1280_initialize_adapter()
1482 spin_lock_irqsave(ha->host->host_lock, flags); in qla1280_initialize_adapter()
1484 status = qla1280_load_firmware(ha); in qla1280_initialize_adapter()
1487 ha->host_no); in qla1280_initialize_adapter()
1492 dprintk(1, "scsi(%ld): Configure NVRAM parameters\n", ha->host_no); in qla1280_initialize_adapter()
1493 qla1280_nvram_config(ha); in qla1280_initialize_adapter()
1495 if (ha->flags.disable_host_adapter) { in qla1280_initialize_adapter()
1500 status = qla1280_init_rings(ha); in qla1280_initialize_adapter()
1505 for (bus = 0; bus < ha->ports; bus++) { in qla1280_initialize_adapter()
1506 if (!ha->bus_settings[bus].disable_scsi_reset && in qla1280_initialize_adapter()
1507 qla1280_bus_reset(ha, bus) && in qla1280_initialize_adapter()
1508 qla1280_bus_reset(ha, bus)) in qla1280_initialize_adapter()
1509 ha->bus_settings[bus].scsi_bus_dead = 1; in qla1280_initialize_adapter()
1512 ha->flags.online = 1; in qla1280_initialize_adapter()
1514 spin_unlock_irqrestore(ha->host->host_lock, flags); in qla1280_initialize_adapter()
1536 qla1280_request_firmware(struct scsi_qla_host *ha) in qla1280_request_firmware() argument
1543 spin_unlock_irq(ha->host->host_lock); in qla1280_request_firmware()
1546 index = ql1280_board_tbl[ha->devnum].fw_index; in qla1280_request_firmware()
1552 err = request_firmware(&fw, fwname, &ha->pdev->dev); in qla1280_request_firmware()
1571 ha->fwver1 = fw->data[0]; in qla1280_request_firmware()
1572 ha->fwver2 = fw->data[1]; in qla1280_request_firmware()
1573 ha->fwver3 = fw->data[2]; in qla1280_request_firmware()
1576 spin_lock_irq(ha->host->host_lock); in qla1280_request_firmware()
1591 qla1280_chip_diag(struct scsi_qla_host *ha) in qla1280_chip_diag() argument
1594 struct device_reg __iomem *reg = ha->iobase; in qla1280_chip_diag()
1600 dprintk(1, "scsi(%ld): Verifying chip\n", ha->host_no); in qla1280_chip_diag()
1669 qla1280_enable_intrs(ha); in qla1280_chip_diag()
1682 status = qla1280_mailbox_command(ha, 0xff, mb); in qla1280_chip_diag()
1701 qla1280_load_firmware_pio(struct scsi_qla_host *ha) in qla1280_load_firmware_pio() argument
1711 fw = qla1280_request_firmware(ha); in qla1280_load_firmware_pio()
1716 ha->fwstart = __le16_to_cpu(fw_data[2]); in qla1280_load_firmware_pio()
1719 risc_address = ha->fwstart; in qla1280_load_firmware_pio()
1728 err = qla1280_mailbox_command(ha, BIT_0 | BIT_1 | BIT_2, mb); in qla1280_load_firmware_pio()
1731 ha->host_no); in qla1280_load_firmware_pio()
1741 qla1280_load_firmware_dma(struct scsi_qla_host *ha) in qla1280_load_firmware_dma() argument
1753 tbuf = pci_alloc_consistent(ha->pdev, 8000, &p_tbuf); in qla1280_load_firmware_dma()
1758 fw = qla1280_request_firmware(ha); in qla1280_load_firmware_dma()
1763 ha->fwstart = __le16_to_cpu(fw_data[2]); in qla1280_load_firmware_dma()
1766 risc_address = ha->fwstart; in qla1280_load_firmware_dma()
1786 ((__le16 *)ha->request_ring)[i] = fw_data[i]; in qla1280_load_firmware_dma()
1791 mb[3] = ha->request_dma & 0xffff; in qla1280_load_firmware_dma()
1792 mb[2] = (ha->request_dma >> 16) & 0xffff; in qla1280_load_firmware_dma()
1793 mb[7] = pci_dma_hi32(ha->request_dma) & 0xffff; in qla1280_load_firmware_dma()
1794 mb[6] = pci_dma_hi32(ha->request_dma) >> 16; in qla1280_load_firmware_dma()
1797 (void *)(long)ha->request_dma, in qla1280_load_firmware_dma()
1799 err = qla1280_mailbox_command(ha, BIT_4 | BIT_3 | BIT_2 | in qla1280_load_firmware_dma()
1803 "segment of f\n", ha->host_no); in qla1280_load_firmware_dma()
1816 err = qla1280_mailbox_command(ha, BIT_4 | BIT_3 | BIT_2 | in qla1280_load_firmware_dma()
1823 sp = (uint8_t *)ha->request_ring; in qla1280_load_firmware_dma()
1844 pci_free_consistent(ha->pdev, 8000, tbuf, p_tbuf); in qla1280_load_firmware_dma()
1850 qla1280_start_firmware(struct scsi_qla_host *ha) in qla1280_start_firmware() argument
1861 mb[1] = ha->fwstart; in qla1280_start_firmware()
1862 err = qla1280_mailbox_command(ha, BIT_1 | BIT_0, mb); in qla1280_start_firmware()
1864 printk(KERN_ERR "scsi(%li): RISC checksum failed.\n", ha->host_no); in qla1280_start_firmware()
1871 mb[1] = ha->fwstart; in qla1280_start_firmware()
1872 err = qla1280_mailbox_command(ha, BIT_1 | BIT_0, &mb[0]); in qla1280_start_firmware()
1875 ha->host_no); in qla1280_start_firmware()
1882 qla1280_load_firmware(struct scsi_qla_host *ha) in qla1280_load_firmware() argument
1887 err = qla1280_chip_diag(ha); in qla1280_load_firmware()
1890 if (IS_ISP1040(ha)) in qla1280_load_firmware()
1891 err = qla1280_load_firmware_pio(ha); in qla1280_load_firmware()
1893 err = qla1280_load_firmware_dma(ha); in qla1280_load_firmware()
1896 err = qla1280_start_firmware(ha); in qla1280_load_firmware()
1915 qla1280_init_rings(struct scsi_qla_host *ha) in qla1280_init_rings() argument
1923 memset(ha->outstanding_cmds, 0, in qla1280_init_rings()
1927 ha->request_ring_ptr = ha->request_ring; in qla1280_init_rings()
1928 ha->req_ring_index = 0; in qla1280_init_rings()
1929 ha->req_q_cnt = REQUEST_ENTRY_CNT; in qla1280_init_rings()
1933 mb[3] = ha->request_dma & 0xffff; in qla1280_init_rings()
1934 mb[2] = (ha->request_dma >> 16) & 0xffff; in qla1280_init_rings()
1936 mb[7] = pci_dma_hi32(ha->request_dma) & 0xffff; in qla1280_init_rings()
1937 mb[6] = pci_dma_hi32(ha->request_dma) >> 16; in qla1280_init_rings()
1938 if (!(status = qla1280_mailbox_command(ha, BIT_7 | BIT_6 | BIT_4 | in qla1280_init_rings()
1942 ha->response_ring_ptr = ha->response_ring; in qla1280_init_rings()
1943 ha->rsp_ring_index = 0; in qla1280_init_rings()
1947 mb[3] = ha->response_dma & 0xffff; in qla1280_init_rings()
1948 mb[2] = (ha->response_dma >> 16) & 0xffff; in qla1280_init_rings()
1950 mb[7] = pci_dma_hi32(ha->response_dma) & 0xffff; in qla1280_init_rings()
1951 mb[6] = pci_dma_hi32(ha->response_dma) >> 16; in qla1280_init_rings()
1952 status = qla1280_mailbox_command(ha, BIT_7 | BIT_6 | BIT_5 | in qla1280_init_rings()
2015 qla1280_set_target_defaults(struct scsi_qla_host *ha, int bus, int target) in qla1280_set_target_defaults() argument
2017 struct nvram *nv = &ha->nvram; in qla1280_set_target_defaults()
2031 if (IS_ISP1x160(ha)) { in qla1280_set_target_defaults()
2046 qla1280_set_defaults(struct scsi_qla_host *ha) in qla1280_set_defaults() argument
2048 struct nvram *nv = &ha->nvram; in qla1280_set_defaults()
2070 if (IS_ISP1040(ha)) in qla1280_set_defaults()
2075 if (IS_ISP1x160(ha)) in qla1280_set_defaults()
2085 if (IS_ISP1040(ha)) { in qla1280_set_defaults()
2095 qla1280_set_target_defaults(ha, bus, target); in qla1280_set_defaults()
2100 qla1280_config_target(struct scsi_qla_host *ha, int bus, int target) in qla1280_config_target() argument
2102 struct nvram *nv = &ha->nvram; in qla1280_config_target()
2119 if (IS_ISP1x160(ha)) in qla1280_config_target()
2124 status = qla1280_mailbox_command(ha, 0x0f, mb); in qla1280_config_target()
2129 ha->bus_settings[bus].qtag_enables |= flag; in qla1280_config_target()
2132 if (IS_ISP1x160(ha)) { in qla1280_config_target()
2134 ha->bus_settings[bus].device_enables |= flag; in qla1280_config_target()
2135 ha->bus_settings[bus].lun_disables |= 0; in qla1280_config_target()
2138 ha->bus_settings[bus].device_enables |= flag; in qla1280_config_target()
2141 ha->bus_settings[bus].lun_disables |= flag; in qla1280_config_target()
2151 status |= qla1280_mailbox_command(ha, 0x0f, mb); in qla1280_config_target()
2158 qla1280_config_bus(struct scsi_qla_host *ha, int bus) in qla1280_config_bus() argument
2160 struct nvram *nv = &ha->nvram; in qla1280_config_bus()
2165 ha->bus_settings[bus].disable_scsi_reset = in qla1280_config_bus()
2169 ha->bus_settings[bus].id = nv->bus[bus].config_1.initiator_id; in qla1280_config_bus()
2171 mb[1] = bus ? ha->bus_settings[bus].id | BIT_7 : in qla1280_config_bus()
2172 ha->bus_settings[bus].id; in qla1280_config_bus()
2173 status = qla1280_mailbox_command(ha, BIT_1 | BIT_0, &mb[0]); in qla1280_config_bus()
2176 ha->bus_settings[bus].bus_reset_delay = in qla1280_config_bus()
2180 ha->bus_settings[bus].hiwat = nv->bus[bus].max_queue_depth - 1; in qla1280_config_bus()
2184 status |= qla1280_config_target(ha, bus, target); in qla1280_config_bus()
2190 qla1280_nvram_config(struct scsi_qla_host *ha) in qla1280_nvram_config() argument
2192 struct device_reg __iomem *reg = ha->iobase; in qla1280_nvram_config()
2193 struct nvram *nv = &ha->nvram; in qla1280_nvram_config()
2199 if (ha->nvram_valid) { in qla1280_nvram_config()
2207 qla1280_set_defaults(ha); in qla1280_nvram_config()
2213 ha->flags.disable_risc_code_load = in qla1280_nvram_config()
2216 if (IS_ISP1040(ha)) { in qla1280_nvram_config()
2241 if (ha->ports > 1) in qla1280_nvram_config()
2259 status |= qla1280_mailbox_command(ha, BIT_1 | BIT_0, &mb[0]); in qla1280_nvram_config()
2261 if (IS_ISP1x40(ha)) { in qla1280_nvram_config()
2265 status |= qla1280_mailbox_command(ha, BIT_1 | BIT_0, mb); in qla1280_nvram_config()
2276 "workaround\n", ha->host_no); in qla1280_nvram_config()
2280 status |= qla1280_mailbox_command(ha, BIT_1 | BIT_0, mb); in qla1280_nvram_config()
2288 status |= qla1280_mailbox_command(ha, BIT_7 | BIT_6 | BIT_2 | in qla1280_nvram_config()
2295 status |= qla1280_mailbox_command(ha, BIT_2 | BIT_1 | BIT_0, &mb[0]); in qla1280_nvram_config()
2309 status |= qla1280_mailbox_command(ha, BIT_2 | BIT_1 | BIT_0, mb); in qla1280_nvram_config()
2313 status |= qla1280_mailbox_command(ha, BIT_1 | BIT_0, mb); in qla1280_nvram_config()
2319 status |= qla1280_mailbox_command(ha, BIT_2 | BIT_1 | BIT_0, mb); in qla1280_nvram_config()
2323 status |= qla1280_mailbox_command(ha, BIT_1 | BIT_0, mb); in qla1280_nvram_config()
2329 status |= qla1280_mailbox_command(ha, BIT_2 | BIT_1 | BIT_0, mb); in qla1280_nvram_config()
2331 for (bus = 0; bus < ha->ports; bus++) in qla1280_nvram_config()
2332 status |= qla1280_config_bus(ha, bus); in qla1280_nvram_config()
2354 qla1280_get_nvram_word(struct scsi_qla_host *ha, uint32_t address) in qla1280_get_nvram_word() argument
2362 data = le16_to_cpu(qla1280_nvram_request(ha, nv_cmd)); in qla1280_get_nvram_word()
2385 qla1280_nvram_request(struct scsi_qla_host *ha, uint32_t nv_cmd) in qla1280_nvram_request() argument
2387 struct device_reg __iomem *reg = ha->iobase; in qla1280_nvram_request()
2397 qla1280_nv_write(ha, NV_DATA_OUT); in qla1280_nvram_request()
2399 qla1280_nv_write(ha, 0); in qla1280_nvram_request()
2428 qla1280_nv_write(struct scsi_qla_host *ha, uint16_t data) in qla1280_nv_write() argument
2430 struct device_reg __iomem *reg = ha->iobase; in qla1280_nv_write()
2459 qla1280_mailbox_command(struct scsi_qla_host *ha, uint8_t mr, uint16_t *mb) in qla1280_mailbox_command() argument
2461 struct device_reg __iomem *reg = ha->iobase; in qla1280_mailbox_command()
2472 if (ha->mailbox_wait) { in qla1280_mailbox_command()
2475 ha->mailbox_wait = &wait; in qla1280_mailbox_command()
2499 timer.data = (unsigned long)ha; in qla1280_mailbox_command()
2503 spin_unlock_irq(ha->host->host_lock); in qla1280_mailbox_command()
2510 spin_lock_irq(ha->host->host_lock); in qla1280_mailbox_command()
2512 ha->mailbox_wait = NULL; in qla1280_mailbox_command()
2515 if (ha->mailbox_out[0] != MBS_CMD_CMP) { in qla1280_mailbox_command()
2519 mb[0], ha->mailbox_out[0], RD_REG_WORD(®->istatus)); in qla1280_mailbox_command()
2531 iptr = (uint16_t *) &ha->mailbox_out[0]; in qla1280_mailbox_command()
2535 if (ha->flags.reset_marker) in qla1280_mailbox_command()
2536 qla1280_rst_aen(ha); in qla1280_mailbox_command()
2554 qla1280_poll(struct scsi_qla_host *ha) in qla1280_poll() argument
2556 struct device_reg __iomem *reg = ha->iobase; in qla1280_poll()
2565 qla1280_isr(ha, &done_q); in qla1280_poll()
2567 if (!ha->mailbox_wait) { in qla1280_poll()
2568 if (ha->flags.reset_marker) in qla1280_poll()
2569 qla1280_rst_aen(ha); in qla1280_poll()
2573 qla1280_done(ha); in qla1280_poll()
2590 qla1280_bus_reset(struct scsi_qla_host *ha, int bus) in qla1280_bus_reset() argument
2600 ha->host_no, bus); in qla1280_bus_reset()
2602 reset_delay = ha->bus_settings[bus].bus_reset_delay; in qla1280_bus_reset()
2606 status = qla1280_mailbox_command(ha, BIT_2 | BIT_1 | BIT_0, &mb[0]); in qla1280_bus_reset()
2609 if (ha->bus_settings[bus].failed_reset_count > 2) in qla1280_bus_reset()
2610 ha->bus_settings[bus].scsi_bus_dead = 1; in qla1280_bus_reset()
2611 ha->bus_settings[bus].failed_reset_count++; in qla1280_bus_reset()
2613 spin_unlock_irq(ha->host->host_lock); in qla1280_bus_reset()
2615 spin_lock_irq(ha->host->host_lock); in qla1280_bus_reset()
2617 ha->bus_settings[bus].scsi_bus_dead = 0; in qla1280_bus_reset()
2618 ha->bus_settings[bus].failed_reset_count = 0; in qla1280_bus_reset()
2619 ha->bus_settings[bus].reset_marker = 0; in qla1280_bus_reset()
2621 qla1280_marker(ha, bus, 0, 0, MK_SYNC_ALL); in qla1280_bus_reset()
2650 qla1280_device_reset(struct scsi_qla_host *ha, int bus, int target) in qla1280_device_reset() argument
2660 status = qla1280_mailbox_command(ha, BIT_2 | BIT_1 | BIT_0, &mb[0]); in qla1280_device_reset()
2663 qla1280_marker(ha, bus, target, 0, MK_SYNC_ID); in qla1280_device_reset()
2684 qla1280_abort_command(struct scsi_qla_host *ha, struct srb * sp, int handle) in qla1280_abort_command() argument
2702 status = qla1280_mailbox_command(ha, 0x0f, &mb[0]); in qla1280_abort_command()
2722 qla1280_reset_adapter(struct scsi_qla_host *ha) in qla1280_reset_adapter() argument
2724 struct device_reg __iomem *reg = ha->iobase; in qla1280_reset_adapter()
2729 ha->flags.online = 0; in qla1280_reset_adapter()
2750 qla1280_marker(struct scsi_qla_host *ha, int bus, int id, int lun, u8 type) in qla1280_marker() argument
2757 if ((pkt = (struct mrk_entry *) qla1280_req_pkt(ha))) { in qla1280_marker()
2765 qla1280_isp_cmd(ha); in qla1280_marker()
2786 qla1280_64bit_start_scsi(struct scsi_qla_host *ha, struct srb * sp) in qla1280_64bit_start_scsi() argument
2788 struct device_reg __iomem *reg = ha->iobase; in qla1280_64bit_start_scsi()
2815 if ((req_cnt + 2) >= ha->req_q_cnt) { in qla1280_64bit_start_scsi()
2818 if (ha->req_ring_index < cnt) in qla1280_64bit_start_scsi()
2819 ha->req_q_cnt = cnt - ha->req_ring_index; in qla1280_64bit_start_scsi()
2821 ha->req_q_cnt = in qla1280_64bit_start_scsi()
2822 REQUEST_ENTRY_CNT - (ha->req_ring_index - cnt); in qla1280_64bit_start_scsi()
2826 ha->req_q_cnt, seg_cnt); in qla1280_64bit_start_scsi()
2829 if ((req_cnt + 2) >= ha->req_q_cnt) { in qla1280_64bit_start_scsi()
2832 "0x%xreq_cnt=0x%x", ha->req_ring_index, ha->req_q_cnt, in qla1280_64bit_start_scsi()
2839 ha->outstanding_cmds[cnt] != NULL; cnt++); in qla1280_64bit_start_scsi()
2844 "OUTSTANDING ARRAY, req_q_cnt=0x%x", ha->req_q_cnt); in qla1280_64bit_start_scsi()
2848 ha->outstanding_cmds[cnt] = sp; in qla1280_64bit_start_scsi()
2849 ha->req_q_cnt -= req_cnt; in qla1280_64bit_start_scsi()
2861 pkt = (cmd_a64_entry_t *) ha->request_ring_ptr; in qla1280_64bit_start_scsi()
2865 pkt->sys_define = (uint8_t) ha->req_ring_index; in qla1280_64bit_start_scsi()
2915 if (ha->flags.use_pci_vchannel) in qla1280_64bit_start_scsi()
2916 sn_pci_set_vchan(ha->pdev, in qla1280_64bit_start_scsi()
2948 ha->req_ring_index++; in qla1280_64bit_start_scsi()
2949 if (ha->req_ring_index == REQUEST_ENTRY_CNT) { in qla1280_64bit_start_scsi()
2950 ha->req_ring_index = 0; in qla1280_64bit_start_scsi()
2951 ha->request_ring_ptr = in qla1280_64bit_start_scsi()
2952 ha->request_ring; in qla1280_64bit_start_scsi()
2954 ha->request_ring_ptr++; in qla1280_64bit_start_scsi()
2956 pkt = (cmd_a64_entry_t *)ha->request_ring_ptr; in qla1280_64bit_start_scsi()
2966 (uint8_t)ha->req_ring_index; in qla1280_64bit_start_scsi()
2977 if (ha->flags.use_pci_vchannel) in qla1280_64bit_start_scsi()
2978 sn_pci_set_vchan(ha->pdev, in qla1280_64bit_start_scsi()
3008 ha->req_ring_index++; in qla1280_64bit_start_scsi()
3009 if (ha->req_ring_index == REQUEST_ENTRY_CNT) { in qla1280_64bit_start_scsi()
3010 ha->req_ring_index = 0; in qla1280_64bit_start_scsi()
3011 ha->request_ring_ptr = ha->request_ring; in qla1280_64bit_start_scsi()
3013 ha->request_ring_ptr++; in qla1280_64bit_start_scsi()
3019 ha->actthreads++; in qla1280_64bit_start_scsi()
3020 WRT_REG_WORD(®->mailbox4, ha->req_ring_index); in qla1280_64bit_start_scsi()
3054 qla1280_32bit_start_scsi(struct scsi_qla_host *ha, struct srb * sp) in qla1280_32bit_start_scsi() argument
3056 struct device_reg __iomem *reg = ha->iobase; in qla1280_32bit_start_scsi()
3091 if ((req_cnt + 2) >= ha->req_q_cnt) { in qla1280_32bit_start_scsi()
3094 if (ha->req_ring_index < cnt) in qla1280_32bit_start_scsi()
3095 ha->req_q_cnt = cnt - ha->req_ring_index; in qla1280_32bit_start_scsi()
3097 ha->req_q_cnt = in qla1280_32bit_start_scsi()
3098 REQUEST_ENTRY_CNT - (ha->req_ring_index - cnt); in qla1280_32bit_start_scsi()
3102 ha->req_q_cnt, seg_cnt); in qla1280_32bit_start_scsi()
3104 if ((req_cnt + 2) >= ha->req_q_cnt) { in qla1280_32bit_start_scsi()
3107 "req_q_cnt=0x%x, req_cnt=0x%x", ha->req_ring_index, in qla1280_32bit_start_scsi()
3108 ha->req_q_cnt, req_cnt); in qla1280_32bit_start_scsi()
3114 (ha->outstanding_cmds[cnt] != 0); cnt++) ; in qla1280_32bit_start_scsi()
3119 "ARRAY, req_q_cnt=0x%x\n", ha->req_q_cnt); in qla1280_32bit_start_scsi()
3124 ha->outstanding_cmds[cnt] = sp; in qla1280_32bit_start_scsi()
3125 ha->req_q_cnt -= req_cnt; in qla1280_32bit_start_scsi()
3130 pkt = (struct cmd_entry *) ha->request_ring_ptr; in qla1280_32bit_start_scsi()
3134 pkt->sys_define = (uint8_t) ha->req_ring_index; 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 = in qla1280_32bit_start_scsi()
3205 ha->request_ring; in qla1280_32bit_start_scsi()
3207 ha->request_ring_ptr++; in qla1280_32bit_start_scsi()
3209 pkt = (struct cmd_entry *)ha->request_ring_ptr; in qla1280_32bit_start_scsi()
3220 (uint8_t) ha->req_ring_index; in qla1280_32bit_start_scsi()
3254 qla1280_dump_buffer(5, (char *)ha->request_ring_ptr, in qla1280_32bit_start_scsi()
3258 ha->req_ring_index++; in qla1280_32bit_start_scsi()
3259 if (ha->req_ring_index == REQUEST_ENTRY_CNT) { in qla1280_32bit_start_scsi()
3260 ha->req_ring_index = 0; in qla1280_32bit_start_scsi()
3261 ha->request_ring_ptr = ha->request_ring; in qla1280_32bit_start_scsi()
3263 ha->request_ring_ptr++; in qla1280_32bit_start_scsi()
3269 ha->actthreads++; in qla1280_32bit_start_scsi()
3270 WRT_REG_WORD(®->mailbox4, ha->req_ring_index); in qla1280_32bit_start_scsi()
3296 qla1280_req_pkt(struct scsi_qla_host *ha) in qla1280_req_pkt() argument
3298 struct device_reg __iomem *reg = ha->iobase; in qla1280_req_pkt()
3310 if (ha->req_q_cnt > 0) { in qla1280_req_pkt()
3313 if (ha->req_ring_index < cnt) in qla1280_req_pkt()
3314 ha->req_q_cnt = cnt - ha->req_ring_index; in qla1280_req_pkt()
3316 ha->req_q_cnt = in qla1280_req_pkt()
3317 REQUEST_ENTRY_CNT - (ha->req_ring_index - cnt); in qla1280_req_pkt()
3321 if (ha->req_q_cnt > 0) { in qla1280_req_pkt()
3322 ha->req_q_cnt--; in qla1280_req_pkt()
3323 pkt = ha->request_ring_ptr; in qla1280_req_pkt()
3333 pkt->sys_define = (uint8_t) ha->req_ring_index; in qla1280_req_pkt()
3344 qla1280_poll(ha); in qla1280_req_pkt()
3364 qla1280_isp_cmd(struct scsi_qla_host *ha) in qla1280_isp_cmd() argument
3366 struct device_reg __iomem *reg = ha->iobase; in qla1280_isp_cmd()
3371 qla1280_dump_buffer(5, (char *)ha->request_ring_ptr, in qla1280_isp_cmd()
3375 ha->req_ring_index++; in qla1280_isp_cmd()
3376 if (ha->req_ring_index == REQUEST_ENTRY_CNT) { in qla1280_isp_cmd()
3377 ha->req_ring_index = 0; in qla1280_isp_cmd()
3378 ha->request_ring_ptr = ha->request_ring; in qla1280_isp_cmd()
3380 ha->request_ring_ptr++; in qla1280_isp_cmd()
3395 WRT_REG_WORD(®->mailbox4, ha->req_ring_index); in qla1280_isp_cmd()
3414 qla1280_isr(struct scsi_qla_host *ha, struct list_head *done_q) in qla1280_isr() argument
3416 struct device_reg __iomem *reg = ha->iobase; in qla1280_isr()
3468 if (ha->flags.online) { in qla1280_isr()
3474 sp = ha->outstanding_cmds[index]; in qla1280_isr()
3480 ha->outstanding_cmds[index] = NULL; in qla1280_isr()
3499 ha->flags.reset_marker = 1; in qla1280_isr()
3501 ha->bus_settings[index].reset_marker = 1; in qla1280_isr()
3537 ha->flags.reset_marker = 1; in qla1280_isr()
3539 ha->bus_settings[index].reset_marker = 1; in qla1280_isr()
3551 memcpy((uint16_t *) ha->mailbox_out, wptr, in qla1280_isr()
3555 if(ha->mailbox_wait != NULL) in qla1280_isr()
3556 complete(ha->mailbox_wait); in qla1280_isr()
3568 if (!(ha->flags.online && !ha->mailbox_wait)) { in qla1280_isr()
3576 while (ha->rsp_ring_index != mailbox[5]) { in qla1280_isr()
3577 pkt = ha->response_ring_ptr; in qla1280_isr()
3580 " = 0x%x\n", ha->rsp_ring_index, mailbox[5]); in qla1280_isr()
3590 ha->rsp_ring_index, mailbox[5], in qla1280_isr()
3597 ha->rsp_ring_index, mailbox[5]); in qla1280_isr()
3605 ha->outstanding_cmds[pkt->handle]->cmd, in qla1280_isr()
3608 qla1280_status_entry(ha, pkt, done_q); in qla1280_isr()
3610 qla1280_error_entry(ha, pkt, done_q); in qla1280_isr()
3612 ha->rsp_ring_index++; in qla1280_isr()
3613 if (ha->rsp_ring_index == RESPONSE_ENTRY_CNT) { in qla1280_isr()
3614 ha->rsp_ring_index = 0; in qla1280_isr()
3615 ha->response_ring_ptr = ha->response_ring; in qla1280_isr()
3617 ha->response_ring_ptr++; in qla1280_isr()
3618 WRT_REG_WORD(®->mailbox5, ha->rsp_ring_index); in qla1280_isr()
3634 qla1280_rst_aen(struct scsi_qla_host *ha) in qla1280_rst_aen() argument
3640 if (ha->flags.online && !ha->flags.reset_active && in qla1280_rst_aen()
3641 !ha->flags.abort_isp_active) { in qla1280_rst_aen()
3642 ha->flags.reset_active = 1; in qla1280_rst_aen()
3643 while (ha->flags.reset_marker) { in qla1280_rst_aen()
3645 ha->flags.reset_marker = 0; in qla1280_rst_aen()
3646 for (bus = 0; bus < ha->ports && in qla1280_rst_aen()
3647 !ha->flags.reset_marker; bus++) { in qla1280_rst_aen()
3648 if (ha->bus_settings[bus].reset_marker) { in qla1280_rst_aen()
3649 ha->bus_settings[bus].reset_marker = 0; in qla1280_rst_aen()
3650 qla1280_marker(ha, bus, 0, 0, in qla1280_rst_aen()
3671 qla1280_status_entry(struct scsi_qla_host *ha, struct response *pkt, in qla1280_status_entry() argument
3686 sp = ha->outstanding_cmds[handle]; in qla1280_status_entry()
3696 ha->outstanding_cmds[handle] = NULL; in qla1280_status_entry()
3769 qla1280_error_entry(struct scsi_qla_host *ha, struct response *pkt, in qla1280_error_entry() argument
3788 sp = ha->outstanding_cmds[handle]; in qla1280_error_entry()
3794 ha->outstanding_cmds[handle] = NULL; in qla1280_error_entry()
3833 qla1280_abort_isp(struct scsi_qla_host *ha) in qla1280_abort_isp() argument
3835 struct device_reg __iomem *reg = ha->iobase; in qla1280_abort_isp()
3843 if (ha->flags.abort_isp_active || !ha->flags.online) in qla1280_abort_isp()
3846 ha->flags.abort_isp_active = 1; in qla1280_abort_isp()
3849 qla1280_disable_intrs(ha); in qla1280_abort_isp()
3854 ha->host_no); in qla1280_abort_isp()
3858 sp = ha->outstanding_cmds[cnt]; in qla1280_abort_isp()
3863 ha->outstanding_cmds[cnt] = NULL; in qla1280_abort_isp()
3864 list_add_tail(&sp->list, &ha->done_q); in qla1280_abort_isp()
3868 qla1280_done(ha); in qla1280_abort_isp()
3870 status = qla1280_load_firmware(ha); in qla1280_abort_isp()
3875 qla1280_nvram_config (ha); in qla1280_abort_isp()
3877 status = qla1280_init_rings(ha); in qla1280_abort_isp()
3882 for (bus = 0; bus < ha->ports; bus++) in qla1280_abort_isp()
3883 qla1280_bus_reset(ha, bus); in qla1280_abort_isp()
3885 ha->flags.abort_isp_active = 0; in qla1280_abort_isp()
3890 qla1280_reset_adapter(ha); in qla1280_abort_isp()
3939 qla1280_check_for_dead_scsi_bus(struct scsi_qla_host *ha, unsigned int bus) in qla1280_check_for_dead_scsi_bus() argument
3942 struct device_reg __iomem *reg = ha->iobase; in qla1280_check_for_dead_scsi_bus()
3944 if (ha->bus_settings[bus].scsi_bus_dead) { in qla1280_check_for_dead_scsi_bus()
3953 ha->bus_settings[bus].scsi_bus_dead = 1; in qla1280_check_for_dead_scsi_bus()
3956 ha->bus_settings[bus].scsi_bus_dead = 0; in qla1280_check_for_dead_scsi_bus()
3957 ha->bus_settings[bus].failed_reset_count = 0; in qla1280_check_for_dead_scsi_bus()
3964 qla1280_get_target_parameters(struct scsi_qla_host *ha, in qla1280_get_target_parameters() argument
3978 qla1280_mailbox_command(ha, BIT_6 | BIT_3 | BIT_2 | BIT_1 | BIT_0, in qla1280_get_target_parameters()
3981 printk(KERN_INFO "scsi(%li:%d:%d:%d):", ha->host_no, bus, target, lun); in qla1280_get_target_parameters()
4032 struct scsi_qla_host *ha; in __qla1280_print_scsi_cmd() local
4038 ha = (struct scsi_qla_host *)host->hostdata; in __qla1280_print_scsi_cmd()
4070 ql1280_dump_device(struct scsi_qla_host *ha) in ql1280_dump_device() argument
4080 if ((sp = ha->outstanding_cmds[i]) == NULL) in ql1280_dump_device()
4230 struct scsi_qla_host *ha; in qla1280_probe_one() local
4252 host = scsi_host_alloc(&qla1280_driver_template, sizeof(*ha)); in qla1280_probe_one()
4259 ha = (struct scsi_qla_host *)host->hostdata; in qla1280_probe_one()
4260 memset(ha, 0, sizeof(struct scsi_qla_host)); in qla1280_probe_one()
4262 ha->pdev = pdev; in qla1280_probe_one()
4263 ha->devnum = devnum; /* specifies microcode load address */ in qla1280_probe_one()
4266 if (pci_set_dma_mask(ha->pdev, DMA_BIT_MASK(64))) { in qla1280_probe_one()
4267 if (pci_set_dma_mask(ha->pdev, DMA_BIT_MASK(32))) { in qla1280_probe_one()
4269 "suitable DMA mask - aborting\n", ha->host_no); in qla1280_probe_one()
4275 ha->host_no); in qla1280_probe_one()
4277 if (pci_set_dma_mask(ha->pdev, DMA_BIT_MASK(32))) { in qla1280_probe_one()
4279 "suitable DMA mask - aborting\n", ha->host_no); in qla1280_probe_one()
4285 ha->request_ring = pci_alloc_consistent(ha->pdev, in qla1280_probe_one()
4287 &ha->request_dma); in qla1280_probe_one()
4288 if (!ha->request_ring) { in qla1280_probe_one()
4293 ha->response_ring = pci_alloc_consistent(ha->pdev, in qla1280_probe_one()
4295 &ha->response_dma); in qla1280_probe_one()
4296 if (!ha->response_ring) { in qla1280_probe_one()
4301 ha->ports = bdp->numPorts; in qla1280_probe_one()
4303 ha->host = host; in qla1280_probe_one()
4304 ha->host_no = host->host_no; in qla1280_probe_one()
4316 ha->mmpbase = pci_ioremap_bar(ha->pdev, 1); in qla1280_probe_one()
4317 if (!ha->mmpbase) { in qla1280_probe_one()
4322 host->base = (unsigned long)ha->mmpbase; in qla1280_probe_one()
4323 ha->iobase = (struct device_reg __iomem *)ha->mmpbase; in qla1280_probe_one()
4325 host->io_port = pci_resource_start(ha->pdev, 0); in qla1280_probe_one()
4333 ha->iobase = (struct device_reg *)host->io_port; in qla1280_probe_one()
4336 INIT_LIST_HEAD(&ha->done_q); in qla1280_probe_one()
4339 qla1280_disable_intrs(ha); in qla1280_probe_one()
4342 "qla1280", ha)) { in qla1280_probe_one()
4349 if (qla1280_initialize_adapter(ha)) { in qla1280_probe_one()
4355 host->this_id = ha->bus_settings[0].id; in qla1280_probe_one()
4367 qla1280_disable_intrs(ha); in qla1280_probe_one()
4369 free_irq(pdev->irq, ha); in qla1280_probe_one()
4372 iounmap(ha->mmpbase); in qla1280_probe_one()
4377 pci_free_consistent(ha->pdev, in qla1280_probe_one()
4379 ha->response_ring, ha->response_dma); in qla1280_probe_one()
4381 pci_free_consistent(ha->pdev, in qla1280_probe_one()
4383 ha->request_ring, ha->request_dma); in qla1280_probe_one()
4397 struct scsi_qla_host *ha = (struct scsi_qla_host *)host->hostdata; in qla1280_remove_one() local
4401 qla1280_disable_intrs(ha); in qla1280_remove_one()
4403 free_irq(pdev->irq, ha); in qla1280_remove_one()
4406 iounmap(ha->mmpbase); in qla1280_remove_one()
4411 pci_free_consistent(ha->pdev, in qla1280_remove_one()
4413 ha->request_ring, ha->request_dma); in qla1280_remove_one()
4414 pci_free_consistent(ha->pdev, in qla1280_remove_one()
4416 ha->response_ring, ha->response_dma); in qla1280_remove_one()