Lines Matching refs:adapter

134 static void blogic_announce_drvr(struct blogic_adapter *adapter)  in blogic_announce_drvr()  argument
136 …** BusLogic SCSI Driver Version " blogic_drvr_version " of " blogic_drvr_date " *****\n", adapter); in blogic_announce_drvr()
137 blogic_announce("Copyright 1995-1998 by Leonard N. Zubkoff " "<lnz@dandelion.com>\n", adapter); in blogic_announce_drvr()
148 struct blogic_adapter *adapter = in blogic_drvr_info() local
150 return adapter->full_model; in blogic_drvr_info()
159 static void blogic_init_ccbs(struct blogic_adapter *adapter, void *blk_pointer, in blogic_init_ccbs() argument
169 ccb->adapter = adapter; in blogic_init_ccbs()
171 if (blogic_flashpoint_type(adapter)) { in blogic_init_ccbs()
173 ccb->base_addr = adapter->fpinfo.base_addr; in blogic_init_ccbs()
175 ccb->next = adapter->free_ccbs; in blogic_init_ccbs()
176 ccb->next_all = adapter->all_ccbs; in blogic_init_ccbs()
177 adapter->free_ccbs = ccb; in blogic_init_ccbs()
178 adapter->all_ccbs = ccb; in blogic_init_ccbs()
179 adapter->alloc_ccbs++; in blogic_init_ccbs()
190 static bool __init blogic_create_initccbs(struct blogic_adapter *adapter) in blogic_create_initccbs() argument
196 while (adapter->alloc_ccbs < adapter->initccbs) { in blogic_create_initccbs()
197 blk_pointer = dma_alloc_coherent(&adapter->pci_device->dev, in blogic_create_initccbs()
201 adapter); in blogic_create_initccbs()
204 blogic_init_ccbs(adapter, blk_pointer, blk_size, blkp); in blogic_create_initccbs()
214 static void blogic_destroy_ccbs(struct blogic_adapter *adapter) in blogic_destroy_ccbs() argument
216 struct blogic_ccb *next_ccb = adapter->all_ccbs, *ccb, *lastccb = NULL; in blogic_destroy_ccbs()
217 adapter->all_ccbs = NULL; in blogic_destroy_ccbs()
218 adapter->free_ccbs = NULL; in blogic_destroy_ccbs()
223 dma_free_coherent(&adapter->pci_device->dev, in blogic_destroy_ccbs()
230 dma_free_coherent(&adapter->pci_device->dev, in blogic_destroy_ccbs()
243 static void blogic_create_addlccbs(struct blogic_adapter *adapter, in blogic_create_addlccbs() argument
247 int prev_alloc = adapter->alloc_ccbs; in blogic_create_addlccbs()
252 while (adapter->alloc_ccbs - prev_alloc < addl_ccbs) { in blogic_create_addlccbs()
253 blk_pointer = dma_alloc_coherent(&adapter->pci_device->dev, in blogic_create_addlccbs()
257 blogic_init_ccbs(adapter, blk_pointer, blk_size, blkp); in blogic_create_addlccbs()
259 if (adapter->alloc_ccbs > prev_alloc) { in blogic_create_addlccbs()
261 …e("Allocated %d additional CCBs (total now %d)\n", adapter, adapter->alloc_ccbs - prev_alloc, adap… in blogic_create_addlccbs()
264 blogic_notice("Failed to allocate additional CCBs\n", adapter); in blogic_create_addlccbs()
265 if (adapter->drvr_qdepth > adapter->alloc_ccbs - adapter->tgt_count) { in blogic_create_addlccbs()
266 adapter->drvr_qdepth = adapter->alloc_ccbs - adapter->tgt_count; in blogic_create_addlccbs()
267 adapter->scsi_host->can_queue = adapter->drvr_qdepth; in blogic_create_addlccbs()
277 static struct blogic_ccb *blogic_alloc_ccb(struct blogic_adapter *adapter) in blogic_alloc_ccb() argument
281 ccb = adapter->free_ccbs; in blogic_alloc_ccb()
284 adapter->free_ccbs = ccb->next; in blogic_alloc_ccb()
286 if (adapter->free_ccbs == NULL) in blogic_alloc_ccb()
287 blogic_create_addlccbs(adapter, adapter->inc_ccbs, in blogic_alloc_ccb()
291 blogic_create_addlccbs(adapter, adapter->inc_ccbs, true); in blogic_alloc_ccb()
292 ccb = adapter->free_ccbs; in blogic_alloc_ccb()
296 adapter->free_ccbs = ccb->next; in blogic_alloc_ccb()
310 struct blogic_adapter *adapter = ccb->adapter; in blogic_dealloc_ccb() local
315 dma_unmap_single(&adapter->pci_device->dev, ccb->sensedata, in blogic_dealloc_ccb()
320 ccb->next = adapter->free_ccbs; in blogic_dealloc_ccb()
321 adapter->free_ccbs = ccb; in blogic_dealloc_ccb()
343 static int blogic_cmd(struct blogic_adapter *adapter, enum blogic_opcode opcode, in blogic_cmd() argument
365 if (!adapter->irq_acquired) in blogic_cmd()
374 statusreg.all = blogic_rdstatus(adapter); in blogic_cmd()
388 adapter->adapter_cmd_complete = false; in blogic_cmd()
389 blogic_setcmdparam(adapter, opcode); in blogic_cmd()
411 intreg.all = blogic_rdint(adapter); in blogic_cmd()
412 statusreg.all = blogic_rdstatus(adapter); in blogic_cmd()
415 if (adapter->adapter_cmd_complete) in blogic_cmd()
421 blogic_setcmdparam(adapter, *param_p++); in blogic_cmd()
435 statusreg.all = blogic_rdstatus(adapter); in blogic_cmd()
443 …blogic_notice("blogic_cmd(%02X) Status = %02X: " "(Modify I/O Address)\n", adapter, opcode, status… in blogic_cmd()
469 intreg.all = blogic_rdint(adapter); in blogic_cmd()
470 statusreg.all = blogic_rdstatus(adapter); in blogic_cmd()
473 if (adapter->adapter_cmd_complete) in blogic_cmd()
477 *reply_p++ = blogic_rddatain(adapter); in blogic_cmd()
479 blogic_rddatain(adapter); in blogic_cmd()
495 blogic_intreset(adapter); in blogic_cmd()
502 adapter, opcode, statusreg.all, replylen, in blogic_cmd()
507 blogic_notice(" %02X", adapter, in blogic_cmd()
509 blogic_notice("\n", adapter); in blogic_cmd()
525 statusreg.all = blogic_rdstatus(adapter); in blogic_cmd()
533 blogic_softreset(adapter); in blogic_cmd()
557 if (!adapter->irq_acquired) in blogic_cmd()
588 static void __init blogic_init_probeinfo_isa(struct blogic_adapter *adapter) in blogic_init_probeinfo_isa() argument
661 static int __init blogic_init_mm_probeinfo(struct blogic_adapter *adapter) in blogic_init_mm_probeinfo() argument
695 struct blogic_adapter *host_adapter = adapter; in blogic_init_mm_probeinfo()
928 static int __init blogic_init_fp_probeinfo(struct blogic_adapter *adapter) in blogic_init_fp_probeinfo() argument
1020 static void __init blogic_init_probeinfo_list(struct blogic_adapter *adapter) in blogic_init_probeinfo_list() argument
1029 blogic_init_mm_probeinfo(adapter); in blogic_init_probeinfo_list()
1030 blogic_init_fp_probeinfo(adapter); in blogic_init_probeinfo_list()
1032 blogic_init_fp_probeinfo(adapter); in blogic_init_probeinfo_list()
1033 blogic_init_mm_probeinfo(adapter); in blogic_init_probeinfo_list()
1035 int fpcount = blogic_init_fp_probeinfo(adapter); in blogic_init_probeinfo_list()
1036 int mmcount = blogic_init_mm_probeinfo(adapter); in blogic_init_probeinfo_list()
1040 struct blogic_adapter *myadapter = adapter; in blogic_init_probeinfo_list()
1081 blogic_init_probeinfo_isa(adapter); in blogic_init_probeinfo_list()
1087 #define blogic_init_probeinfo_list(adapter) \ argument
1088 blogic_init_probeinfo_isa(adapter)
1096 static bool blogic_failure(struct blogic_adapter *adapter, char *msg) in blogic_failure() argument
1098 blogic_announce_drvr(adapter); in blogic_failure()
1099 if (adapter->adapter_bus_type == BLOGIC_PCI_BUS) { in blogic_failure()
1101 adapter); in blogic_failure()
1102 …ce %d I/O Address 0x%X PCI Address 0x%X:\n", adapter, adapter->bus, adapter->dev, adapter->io_addr… in blogic_failure()
1104 …blogic_err("While configuring BusLogic Host Adapter at " "I/O Address 0x%X:\n", adapter, adapter->… in blogic_failure()
1105 blogic_err("%s FAILED - DETACHING\n", adapter, msg); in blogic_failure()
1107 blogic_err("ADDITIONAL FAILURE INFO - %s\n", adapter, in blogic_failure()
1117 static bool __init blogic_probe(struct blogic_adapter *adapter) in blogic_probe() argument
1125 if (blogic_flashpoint_type(adapter)) { in blogic_probe()
1126 struct fpoint_info *fpinfo = &adapter->fpinfo; in blogic_probe()
1127 fpinfo->base_addr = (u32) adapter->io_addr; in blogic_probe()
1128 fpinfo->irq_ch = adapter->irq_ch; in blogic_probe()
1132 …ashPoint Host Adapter detected at " "PCI Bus %d Device %d\n", adapter, adapter->bus, adapter->dev); in blogic_probe()
1133 …: I/O Address 0x%X PCI Address 0x%X, " "but FlashPoint\n", adapter, adapter->io_addr, adapter->pci… in blogic_probe()
1134 blogic_err("BusLogic: Probe Function failed to validate it.\n", adapter); in blogic_probe()
1138 blogic_notice("BusLogic_Probe(0x%X): FlashPoint Found\n", adapter, adapter->io_addr); in blogic_probe()
1151 statusreg.all = blogic_rdstatus(adapter); in blogic_probe()
1152 intreg.all = blogic_rdint(adapter); in blogic_probe()
1153 georeg.all = blogic_rdgeom(adapter); in blogic_probe()
1155 …robe(0x%X): Status 0x%02X, Interrupt 0x%02X, " "Geometry 0x%02X\n", adapter, adapter->io_addr, sta… in blogic_probe()
1193 static bool blogic_hwreset(struct blogic_adapter *adapter, bool hard_reset) in blogic_hwreset() argument
1201 if (blogic_flashpoint_type(adapter)) { in blogic_hwreset()
1202 struct fpoint_info *fpinfo = &adapter->fpinfo; in blogic_hwreset()
1205 adapter->cardhandle = in blogic_hwreset()
1207 if (adapter->cardhandle == (void *)FPOINT_BADCARD_HANDLE) in blogic_hwreset()
1220 blogic_hardreset(adapter); in blogic_hwreset()
1222 blogic_softreset(adapter); in blogic_hwreset()
1228 statusreg.all = blogic_rdstatus(adapter); in blogic_hwreset()
1234 …sLogic_HardwareReset(0x%X): Diagnostic Active, " "Status 0x%02X\n", adapter, adapter->io_addr, sta… in blogic_hwreset()
1248 statusreg.all = blogic_rdstatus(adapter); in blogic_hwreset()
1254 …gic_HardwareReset(0x%X): Diagnostic Completed, " "Status 0x%02X\n", adapter, adapter->io_addr, sta… in blogic_hwreset()
1263 statusreg.all = blogic_rdstatus(adapter); in blogic_hwreset()
1270 …Logic_HardwareReset(0x%X): Host Adapter Ready, " "Status 0x%02X\n", adapter, adapter->io_addr, sta… in blogic_hwreset()
1281 blogic_failure(adapter, "HARD RESET DIAGNOSTICS"); in blogic_hwreset()
1282 blogic_err("HOST ADAPTER STATUS REGISTER = %02X\n", adapter, in blogic_hwreset()
1285 blogic_err("HOST ADAPTER ERROR CODE = %d\n", adapter, in blogic_hwreset()
1286 blogic_rddatain(adapter)); in blogic_hwreset()
1301 static bool __init blogic_checkadapter(struct blogic_adapter *adapter) in blogic_checkadapter() argument
1309 if (blogic_flashpoint_type(adapter)) in blogic_checkadapter()
1318 if (blogic_cmd(adapter, BLOGIC_INQ_EXTSETUP, &req_replylen, in blogic_checkadapter()
1326 blogic_notice("BusLogic_Check(0x%X): MultiMaster %s\n", adapter, in blogic_checkadapter()
1327 adapter->io_addr, in blogic_checkadapter()
1338 static bool __init blogic_rdconfig(struct blogic_adapter *adapter) in blogic_rdconfig() argument
1360 if (blogic_flashpoint_type(adapter)) { in blogic_rdconfig()
1361 struct fpoint_info *fpinfo = &adapter->fpinfo; in blogic_rdconfig()
1362 tgt = adapter->model; in blogic_rdconfig()
1369 strcpy(adapter->fw_ver, FLASHPOINT_FW_VER); in blogic_rdconfig()
1370 adapter->scsi_id = fpinfo->scsi_id; in blogic_rdconfig()
1371 adapter->ext_trans_enable = fpinfo->ext_trans_enable; in blogic_rdconfig()
1372 adapter->parity = fpinfo->parity; in blogic_rdconfig()
1373 adapter->reset_enabled = !fpinfo->softreset; in blogic_rdconfig()
1374 adapter->level_int = true; in blogic_rdconfig()
1375 adapter->wide = fpinfo->wide; in blogic_rdconfig()
1376 adapter->differential = false; in blogic_rdconfig()
1377 adapter->scam = true; in blogic_rdconfig()
1378 adapter->ultra = true; in blogic_rdconfig()
1379 adapter->ext_lun = true; in blogic_rdconfig()
1380 adapter->terminfo_valid = true; in blogic_rdconfig()
1381 adapter->low_term = fpinfo->low_term; in blogic_rdconfig()
1382 adapter->high_term = fpinfo->high_term; in blogic_rdconfig()
1383 adapter->scam_enabled = fpinfo->scam_enabled; in blogic_rdconfig()
1384 adapter->scam_lev2 = fpinfo->scam_lev2; in blogic_rdconfig()
1385 adapter->drvr_sglimit = BLOGIC_SG_LIMIT; in blogic_rdconfig()
1386 adapter->maxdev = (adapter->wide ? 16 : 8); in blogic_rdconfig()
1387 adapter->maxlun = 32; in blogic_rdconfig()
1388 adapter->initccbs = 4 * BLOGIC_CCB_GRP_ALLOCSIZE; in blogic_rdconfig()
1389 adapter->inc_ccbs = BLOGIC_CCB_GRP_ALLOCSIZE; in blogic_rdconfig()
1390 adapter->drvr_qdepth = 255; in blogic_rdconfig()
1391 adapter->adapter_qdepth = adapter->drvr_qdepth; in blogic_rdconfig()
1392 adapter->sync_ok = fpinfo->sync_ok; in blogic_rdconfig()
1393 adapter->fast_ok = fpinfo->fast_ok; in blogic_rdconfig()
1394 adapter->ultra_ok = fpinfo->ultra_ok; in blogic_rdconfig()
1395 adapter->wide_ok = fpinfo->wide_ok; in blogic_rdconfig()
1396 adapter->discon_ok = fpinfo->discon_ok; in blogic_rdconfig()
1397 adapter->tagq_ok = 0xFFFF; in blogic_rdconfig()
1403 if (blogic_cmd(adapter, BLOGIC_GET_BOARD_ID, NULL, 0, &id, in blogic_rdconfig()
1405 return blogic_failure(adapter, "INQUIRE BOARD ID"); in blogic_rdconfig()
1409 if (blogic_cmd(adapter, BLOGIC_INQ_CONFIG, NULL, 0, &config, in blogic_rdconfig()
1412 return blogic_failure(adapter, "INQUIRE CONFIGURATION"); in blogic_rdconfig()
1417 if (blogic_cmd(adapter, BLOGIC_INQ_SETUPINFO, &req_replylen, in blogic_rdconfig()
1420 return blogic_failure(adapter, "INQUIRE SETUP INFORMATION"); in blogic_rdconfig()
1425 if (blogic_cmd(adapter, BLOGIC_INQ_EXTSETUP, &req_replylen, in blogic_rdconfig()
1428 return blogic_failure(adapter, in blogic_rdconfig()
1435 if (blogic_cmd(adapter, BLOGIC_INQ_FWVER_D3, NULL, 0, in blogic_rdconfig()
1438 return blogic_failure(adapter, in blogic_rdconfig()
1456 if (blogic_cmd(adapter, BLOGIC_INQ_MODELNO, &req_replylen, in blogic_rdconfig()
1459 return blogic_failure(adapter, in blogic_rdconfig()
1482 tgt = adapter->model; in blogic_rdconfig()
1496 tgt = adapter->fw_ver; in blogic_rdconfig()
1506 if (strcmp(adapter->fw_ver, "3.3") >= 0) { in blogic_rdconfig()
1507 if (blogic_cmd(adapter, BLOGIC_INQ_FWVER_LETTER, NULL, 0, in blogic_rdconfig()
1510 return blogic_failure(adapter, in blogic_rdconfig()
1519 adapter->scsi_id = config.id; in blogic_rdconfig()
1525 adapter->adapter_bus_type = in blogic_rdconfig()
1526 blogic_adater_bus_types[adapter->model[3] - '4']; in blogic_rdconfig()
1527 if (adapter->irq_ch == 0) { in blogic_rdconfig()
1529 adapter->irq_ch = 9; in blogic_rdconfig()
1531 adapter->irq_ch = 10; in blogic_rdconfig()
1533 adapter->irq_ch = 11; in blogic_rdconfig()
1535 adapter->irq_ch = 12; in blogic_rdconfig()
1537 adapter->irq_ch = 14; in blogic_rdconfig()
1539 adapter->irq_ch = 15; in blogic_rdconfig()
1541 if (adapter->adapter_bus_type == BLOGIC_ISA_BUS) { in blogic_rdconfig()
1543 adapter->dma_ch = 5; in blogic_rdconfig()
1545 adapter->dma_ch = 6; in blogic_rdconfig()
1547 adapter->dma_ch = 7; in blogic_rdconfig()
1553 georeg.all = blogic_rdgeom(adapter); in blogic_rdconfig()
1554 adapter->ext_trans_enable = georeg.gr.ext_trans_enable; in blogic_rdconfig()
1560 adapter->adapter_sglimit = ext_setupinfo.sg_limit; in blogic_rdconfig()
1561 adapter->drvr_sglimit = adapter->adapter_sglimit; in blogic_rdconfig()
1562 if (adapter->adapter_sglimit > BLOGIC_SG_LIMIT) in blogic_rdconfig()
1563 adapter->drvr_sglimit = BLOGIC_SG_LIMIT; in blogic_rdconfig()
1565 adapter->level_int = true; in blogic_rdconfig()
1566 adapter->wide = ext_setupinfo.wide; in blogic_rdconfig()
1567 adapter->differential = ext_setupinfo.differential; in blogic_rdconfig()
1568 adapter->scam = ext_setupinfo.scam; in blogic_rdconfig()
1569 adapter->ultra = ext_setupinfo.ultra; in blogic_rdconfig()
1574 if (adapter->fw_ver[0] == '5' || (adapter->fw_ver[0] == '4' && in blogic_rdconfig()
1575 adapter->wide)) in blogic_rdconfig()
1576 adapter->ext_lun = true; in blogic_rdconfig()
1581 if (adapter->fw_ver[0] == '5') { in blogic_rdconfig()
1582 if (blogic_cmd(adapter, BLOGIC_INQ_PCI_INFO, NULL, 0, in blogic_rdconfig()
1585 return blogic_failure(adapter, in blogic_rdconfig()
1592 adapter->terminfo_valid = true; in blogic_rdconfig()
1593 adapter->low_term = adapter_info.low_term; in blogic_rdconfig()
1594 adapter->high_term = adapter_info.high_term; in blogic_rdconfig()
1601 if (adapter->fw_ver[0] >= '4') { in blogic_rdconfig()
1604 if (blogic_cmd(adapter, BLOGIC_FETCH_LOCALRAM, &fetch_localram, in blogic_rdconfig()
1607 return blogic_failure(adapter, in blogic_rdconfig()
1613 adapter->parity = autoscsi.parity; in blogic_rdconfig()
1614 adapter->reset_enabled = autoscsi.reset_enabled; in blogic_rdconfig()
1615 if (adapter->fw_ver[0] == '4') { in blogic_rdconfig()
1616 adapter->terminfo_valid = true; in blogic_rdconfig()
1617 adapter->low_term = autoscsi.low_term; in blogic_rdconfig()
1618 adapter->high_term = autoscsi.high_term; in blogic_rdconfig()
1625 adapter->wide_ok = autoscsi.wide_ok; in blogic_rdconfig()
1626 adapter->fast_ok = autoscsi.fast_ok; in blogic_rdconfig()
1627 adapter->sync_ok = autoscsi.sync_ok; in blogic_rdconfig()
1628 adapter->discon_ok = autoscsi.discon_ok; in blogic_rdconfig()
1629 if (adapter->ultra) in blogic_rdconfig()
1630 adapter->ultra_ok = autoscsi.ultra_ok; in blogic_rdconfig()
1631 if (adapter->scam) { in blogic_rdconfig()
1632 adapter->scam_enabled = autoscsi.scam_enabled; in blogic_rdconfig()
1633 adapter->scam_lev2 = autoscsi.scam_lev2; in blogic_rdconfig()
1640 if (adapter->fw_ver[0] < '4') { in blogic_rdconfig()
1642 adapter->sync_ok = 0xFF; in blogic_rdconfig()
1643 if (adapter->adapter_bus_type == BLOGIC_EISA_BUS) { in blogic_rdconfig()
1645 adapter->fast_ok = 0xFF; in blogic_rdconfig()
1646 if (strcmp(adapter->model, "BT-757") == 0) in blogic_rdconfig()
1647 adapter->wide_ok = 0xFF; in blogic_rdconfig()
1650 adapter->discon_ok = 0xFF; in blogic_rdconfig()
1651 adapter->parity = setupinfo.parity; in blogic_rdconfig()
1652 adapter->reset_enabled = true; in blogic_rdconfig()
1658 adapter->maxdev = (adapter->wide ? 16 : 8); in blogic_rdconfig()
1659 adapter->maxlun = (adapter->ext_lun ? 32 : 8); in blogic_rdconfig()
1685 if (adapter->fw_ver[0] == '5') in blogic_rdconfig()
1686 adapter->adapter_qdepth = 192; in blogic_rdconfig()
1687 else if (adapter->fw_ver[0] == '4') in blogic_rdconfig()
1688 adapter->adapter_qdepth = (adapter->adapter_bus_type != in blogic_rdconfig()
1691 adapter->adapter_qdepth = 30; in blogic_rdconfig()
1692 if (strcmp(adapter->fw_ver, "3.31") >= 0) { in blogic_rdconfig()
1693 adapter->strict_rr = true; in blogic_rdconfig()
1694 adapter->mbox_count = BLOGIC_MAX_MAILBOX; in blogic_rdconfig()
1696 adapter->strict_rr = false; in blogic_rdconfig()
1697 adapter->mbox_count = 32; in blogic_rdconfig()
1699 adapter->drvr_qdepth = adapter->mbox_count; in blogic_rdconfig()
1700 adapter->initccbs = 4 * BLOGIC_CCB_GRP_ALLOCSIZE; in blogic_rdconfig()
1701 adapter->inc_ccbs = BLOGIC_CCB_GRP_ALLOCSIZE; in blogic_rdconfig()
1709 adapter->tagq_ok = 0; in blogic_rdconfig()
1710 switch (adapter->fw_ver[0]) { in blogic_rdconfig()
1712 adapter->tagq_ok = 0xFFFF; in blogic_rdconfig()
1715 if (strcmp(adapter->fw_ver, "4.22") >= 0) in blogic_rdconfig()
1716 adapter->tagq_ok = 0xFFFF; in blogic_rdconfig()
1719 if (strcmp(adapter->fw_ver, "3.35") >= 0) in blogic_rdconfig()
1720 adapter->tagq_ok = 0xFFFF; in blogic_rdconfig()
1728 adapter->bios_addr = ext_setupinfo.bios_addr << 12; in blogic_rdconfig()
1733 if (adapter->adapter_bus_type == BLOGIC_ISA_BUS && in blogic_rdconfig()
1735 adapter->need_bouncebuf = true; in blogic_rdconfig()
1745 if (adapter->bios_addr > 0 && strcmp(adapter->model, "BT-445S") == 0 && in blogic_rdconfig()
1746 strcmp(adapter->fw_ver, "3.37") < 0 && in blogic_rdconfig()
1748 adapter->need_bouncebuf = true; in blogic_rdconfig()
1757 strcpy(adapter->full_model, "BusLogic "); in blogic_rdconfig()
1758 strcat(adapter->full_model, adapter->model); in blogic_rdconfig()
1768 if (adapter->drvr_opts != NULL && in blogic_rdconfig()
1769 adapter->drvr_opts->qdepth[tgt_id] > 0) in blogic_rdconfig()
1770 qdepth = adapter->drvr_opts->qdepth[tgt_id]; in blogic_rdconfig()
1771 else if (adapter->need_bouncebuf) in blogic_rdconfig()
1773 adapter->qdepth[tgt_id] = qdepth; in blogic_rdconfig()
1775 if (adapter->need_bouncebuf) in blogic_rdconfig()
1776 adapter->untag_qdepth = BLOGIC_UNTAG_DEPTH_BB; in blogic_rdconfig()
1778 adapter->untag_qdepth = BLOGIC_UNTAG_DEPTH; in blogic_rdconfig()
1779 if (adapter->drvr_opts != NULL) in blogic_rdconfig()
1780 adapter->common_qdepth = adapter->drvr_opts->common_qdepth; in blogic_rdconfig()
1781 if (adapter->common_qdepth > 0 && in blogic_rdconfig()
1782 adapter->common_qdepth < adapter->untag_qdepth) in blogic_rdconfig()
1783 adapter->untag_qdepth = adapter->common_qdepth; in blogic_rdconfig()
1789 adapter->tagq_ok &= adapter->discon_ok; in blogic_rdconfig()
1794 if (adapter->drvr_opts != NULL) in blogic_rdconfig()
1795 adapter->tagq_ok = (adapter->drvr_opts->tagq_ok & in blogic_rdconfig()
1796 adapter->drvr_opts->tagq_ok_mask) | in blogic_rdconfig()
1797 (adapter->tagq_ok & ~adapter->drvr_opts->tagq_ok_mask); in blogic_rdconfig()
1804 if (adapter->drvr_opts != NULL && in blogic_rdconfig()
1805 adapter->drvr_opts->bus_settle_time > 0) in blogic_rdconfig()
1806 adapter->bus_settle_time = adapter->drvr_opts->bus_settle_time; in blogic_rdconfig()
1808 adapter->bus_settle_time = BLOGIC_BUS_SETTLE_TIME; in blogic_rdconfig()
1821 static bool __init blogic_reportconfig(struct blogic_adapter *adapter) in blogic_reportconfig() argument
1823 unsigned short alltgt_mask = (1 << adapter->maxdev) - 1; in blogic_reportconfig()
1838adapter, adapter->model, blogic_adapter_busnames[adapter->adapter_bus_type], (adapter->wide ? " Wi… in blogic_reportconfig()
1839 … Address: 0x%X, " "IRQ Channel: %d/%s\n", adapter, adapter->fw_ver, adapter->io_addr, adapter->irq… in blogic_reportconfig()
1840 if (adapter->adapter_bus_type != BLOGIC_PCI_BUS) { in blogic_reportconfig()
1841 blogic_info(" DMA Channel: ", adapter); in blogic_reportconfig()
1842 if (adapter->dma_ch > 0) in blogic_reportconfig()
1843 blogic_info("%d, ", adapter, adapter->dma_ch); in blogic_reportconfig()
1845 blogic_info("None, ", adapter); in blogic_reportconfig()
1846 if (adapter->bios_addr > 0) in blogic_reportconfig()
1847 blogic_info("BIOS Address: 0x%X, ", adapter, in blogic_reportconfig()
1848 adapter->bios_addr); in blogic_reportconfig()
1850 blogic_info("BIOS Address: None, ", adapter); in blogic_reportconfig()
1852 blogic_info(" PCI Bus: %d, Device: %d, Address: ", adapter, in blogic_reportconfig()
1853 adapter->bus, adapter->dev); in blogic_reportconfig()
1854 if (adapter->pci_addr > 0) in blogic_reportconfig()
1855 blogic_info("0x%X, ", adapter, adapter->pci_addr); in blogic_reportconfig()
1857 blogic_info("Unassigned, ", adapter); in blogic_reportconfig()
1859 blogic_info("Host Adapter SCSI ID: %d\n", adapter, adapter->scsi_id); in blogic_reportconfig()
1861 adapter, (adapter->parity ? "Enabled" : "Disabled"), in blogic_reportconfig()
1862 (adapter->ext_trans_enable ? "Enabled" : "Disabled")); in blogic_reportconfig()
1863 alltgt_mask &= ~(1 << adapter->scsi_id); in blogic_reportconfig()
1864 sync_ok = adapter->sync_ok & alltgt_mask; in blogic_reportconfig()
1865 fast_ok = adapter->fast_ok & alltgt_mask; in blogic_reportconfig()
1866 ultra_ok = adapter->ultra_ok & alltgt_mask; in blogic_reportconfig()
1867 if ((blogic_multimaster_type(adapter) && in blogic_reportconfig()
1868 (adapter->fw_ver[0] >= '4' || in blogic_reportconfig()
1869 adapter->adapter_bus_type == BLOGIC_EISA_BUS)) || in blogic_reportconfig()
1870 blogic_flashpoint_type(adapter)) { in blogic_reportconfig()
1890 for (tgt_id = 0; tgt_id < adapter->maxdev; tgt_id++) in blogic_reportconfig()
1892 syncstr[adapter->scsi_id] = '#'; in blogic_reportconfig()
1893 syncstr[adapter->maxdev] = '\0'; in blogic_reportconfig()
1897 wide_ok = adapter->wide_ok & alltgt_mask; in blogic_reportconfig()
1903 for (tgt_id = 0; tgt_id < adapter->maxdev; tgt_id++) in blogic_reportconfig()
1905 widestr[adapter->scsi_id] = '#'; in blogic_reportconfig()
1906 widestr[adapter->maxdev] = '\0'; in blogic_reportconfig()
1908 discon_ok = adapter->discon_ok & alltgt_mask; in blogic_reportconfig()
1914 for (tgt_id = 0; tgt_id < adapter->maxdev; tgt_id++) in blogic_reportconfig()
1916 discon_str[adapter->scsi_id] = '#'; in blogic_reportconfig()
1917 discon_str[adapter->maxdev] = '\0'; in blogic_reportconfig()
1919 tagq_ok = adapter->tagq_ok & alltgt_mask; in blogic_reportconfig()
1925 for (tgt_id = 0; tgt_id < adapter->maxdev; tgt_id++) in blogic_reportconfig()
1927 tagq_str[adapter->scsi_id] = '#'; in blogic_reportconfig()
1928 tagq_str[adapter->maxdev] = '\0'; in blogic_reportconfig()
1931 adapter, syncmsg, widemsg); in blogic_reportconfig()
1932 blogic_info(" Disconnect/Reconnect: %s, Tagged Queuing: %s\n", adapter, in blogic_reportconfig()
1934 if (blogic_multimaster_type(adapter)) { in blogic_reportconfig()
1935 …it: %d of %d segments, " "Mailboxes: %d\n", adapter, adapter->drvr_sglimit, adapter->adapter_sglim… in blogic_reportconfig()
1936 …ver Queue Depth: %d, " "Host Adapter Queue Depth: %d\n", adapter, adapter->drvr_qdepth, adapter->a… in blogic_reportconfig()
1938 …ueue Depth: %d, " "Scatter/Gather Limit: %d segments\n", adapter, adapter->drvr_qdepth, adapter->d… in blogic_reportconfig()
1939 blogic_info(" Tagged Queue Depth: ", adapter); in blogic_reportconfig()
1941 for (tgt_id = 1; tgt_id < adapter->maxdev; tgt_id++) in blogic_reportconfig()
1942 if (adapter->qdepth[tgt_id] != adapter->qdepth[0]) { in blogic_reportconfig()
1947 if (adapter->qdepth[0] > 0) in blogic_reportconfig()
1948 blogic_info("%d", adapter, adapter->qdepth[0]); in blogic_reportconfig()
1950 blogic_info("Automatic", adapter); in blogic_reportconfig()
1952 blogic_info("Individual", adapter); in blogic_reportconfig()
1953 blogic_info(", Untagged Queue Depth: %d\n", adapter, in blogic_reportconfig()
1954 adapter->untag_qdepth); in blogic_reportconfig()
1955 if (adapter->terminfo_valid) { in blogic_reportconfig()
1956 if (adapter->wide) in blogic_reportconfig()
1957 blogic_info(" SCSI Bus Termination: %s", adapter, in blogic_reportconfig()
1958 …(adapter->low_term ? (adapter->high_term ? "Both Enabled" : "Low Enabled") : (adapter->high_term ?… in blogic_reportconfig()
1960 blogic_info(" SCSI Bus Termination: %s", adapter, in blogic_reportconfig()
1961 (adapter->low_term ? "Enabled" : "Disabled")); in blogic_reportconfig()
1962 if (adapter->scam) in blogic_reportconfig()
1963 blogic_info(", SCAM: %s", adapter, in blogic_reportconfig()
1964 …(adapter->scam_enabled ? (adapter->scam_lev2 ? "Enabled, Level 2" : "Enabled, Level 1") : "Disable… in blogic_reportconfig()
1965 blogic_info("\n", adapter); in blogic_reportconfig()
1980 static bool __init blogic_getres(struct blogic_adapter *adapter) in blogic_getres() argument
1982 if (adapter->irq_ch == 0) { in blogic_getres()
1984 adapter); in blogic_getres()
1990 if (request_irq(adapter->irq_ch, blogic_inthandler, IRQF_SHARED, in blogic_getres()
1991 adapter->full_model, adapter) < 0) { in blogic_getres()
1993 adapter, adapter->irq_ch); in blogic_getres()
1996 adapter->irq_acquired = true; in blogic_getres()
2000 if (adapter->dma_ch > 0) { in blogic_getres()
2001 if (request_dma(adapter->dma_ch, adapter->full_model) < 0) { in blogic_getres()
2002 blogic_err("UNABLE TO ACQUIRE DMA CHANNEL %d - DETACHING\n", adapter, adapter->dma_ch); in blogic_getres()
2005 set_dma_mode(adapter->dma_ch, DMA_MODE_CASCADE); in blogic_getres()
2006 enable_dma(adapter->dma_ch); in blogic_getres()
2007 adapter->dma_chan_acquired = true; in blogic_getres()
2021 static void blogic_relres(struct blogic_adapter *adapter) in blogic_relres() argument
2026 if (adapter->irq_acquired) in blogic_relres()
2027 free_irq(adapter->irq_ch, adapter); in blogic_relres()
2031 if (adapter->dma_chan_acquired) in blogic_relres()
2032 free_dma(adapter->dma_ch); in blogic_relres()
2036 if (adapter->mbox_space) in blogic_relres()
2037 dma_free_coherent(&adapter->pci_device->dev, adapter->mbox_sz, in blogic_relres()
2038 adapter->mbox_space, adapter->mbox_space_handle); in blogic_relres()
2039 pci_dev_put(adapter->pci_device); in blogic_relres()
2040 adapter->mbox_space = NULL; in blogic_relres()
2041 adapter->mbox_space_handle = 0; in blogic_relres()
2042 adapter->mbox_sz = 0; in blogic_relres()
2052 static bool blogic_initadapter(struct blogic_adapter *adapter) in blogic_initadapter() argument
2063 adapter->firstccb = NULL; in blogic_initadapter()
2064 adapter->lastccb = NULL; in blogic_initadapter()
2071 for (tgt_id = 0; tgt_id < adapter->maxdev; tgt_id++) { in blogic_initadapter()
2072 adapter->bdr_pend[tgt_id] = NULL; in blogic_initadapter()
2073 adapter->tgt_flags[tgt_id].tagq_active = false; in blogic_initadapter()
2074 adapter->tgt_flags[tgt_id].cmd_good = false; in blogic_initadapter()
2075 adapter->active_cmds[tgt_id] = 0; in blogic_initadapter()
2076 adapter->cmds_since_rst[tgt_id] = 0; in blogic_initadapter()
2082 if (blogic_flashpoint_type(adapter)) in blogic_initadapter()
2088adapter->mbox_sz = adapter->mbox_count * (sizeof(struct blogic_outbox) + sizeof(struct blogic_inbo… in blogic_initadapter()
2089 adapter->mbox_space = dma_alloc_coherent(&adapter->pci_device->dev, in blogic_initadapter()
2090 adapter->mbox_sz, &adapter->mbox_space_handle, in blogic_initadapter()
2092 if (adapter->mbox_space == NULL) in blogic_initadapter()
2093 return blogic_failure(adapter, "MAILBOX ALLOCATION"); in blogic_initadapter()
2094 adapter->first_outbox = (struct blogic_outbox *) adapter->mbox_space; in blogic_initadapter()
2095 adapter->last_outbox = adapter->first_outbox + adapter->mbox_count - 1; in blogic_initadapter()
2096 adapter->next_outbox = adapter->first_outbox; in blogic_initadapter()
2097 adapter->first_inbox = (struct blogic_inbox *) (adapter->last_outbox + 1); in blogic_initadapter()
2098 adapter->last_inbox = adapter->first_inbox + adapter->mbox_count - 1; in blogic_initadapter()
2099 adapter->next_inbox = adapter->first_inbox; in blogic_initadapter()
2104 memset(adapter->first_outbox, 0, in blogic_initadapter()
2105 adapter->mbox_count * sizeof(struct blogic_outbox)); in blogic_initadapter()
2106 memset(adapter->first_inbox, 0, in blogic_initadapter()
2107 adapter->mbox_count * sizeof(struct blogic_inbox)); in blogic_initadapter()
2113 extmbox_req.mbox_count = adapter->mbox_count; in blogic_initadapter()
2114 extmbox_req.base_mbox_addr = (u32) adapter->mbox_space_handle; in blogic_initadapter()
2115 if (blogic_cmd(adapter, BLOGIC_INIT_EXT_MBOX, &extmbox_req, in blogic_initadapter()
2117 return blogic_failure(adapter, "MAILBOX INITIALIZATION"); in blogic_initadapter()
2126 if (adapter->strict_rr) { in blogic_initadapter()
2128 if (blogic_cmd(adapter, BLOGIC_STRICT_RR, &rr_req, in blogic_initadapter()
2130 return blogic_failure(adapter, in blogic_initadapter()
2138 if (adapter->ext_lun) { in blogic_initadapter()
2140 if (blogic_cmd(adapter, BLOGIC_SETCCB_FMT, &setccb_fmt, in blogic_initadapter()
2142 return blogic_failure(adapter, "SET CCB FORMAT"); in blogic_initadapter()
2149 if (!adapter->adapter_initd) { in blogic_initadapter()
2150 blogic_info("*** %s Initialized Successfully ***\n", adapter, in blogic_initadapter()
2151 adapter->full_model); in blogic_initadapter()
2152 blogic_info("\n", adapter); in blogic_initadapter()
2154 blogic_warn("*** %s Initialized Successfully ***\n", adapter, in blogic_initadapter()
2155 adapter->full_model); in blogic_initadapter()
2156 adapter->adapter_initd = true; in blogic_initadapter()
2170 static bool __init blogic_inquiry(struct blogic_adapter *adapter) in blogic_inquiry() argument
2185 blogic_delay(adapter->bus_settle_time); in blogic_inquiry()
2189 if (blogic_flashpoint_type(adapter)) in blogic_inquiry()
2194 if (adapter->drvr_opts != NULL && adapter->drvr_opts->stop_tgt_inquiry) in blogic_inquiry()
2206 if (strcmp(adapter->fw_ver, "4.25") >= 0) { in blogic_inquiry()
2216 if (blogic_cmd(adapter, BLOGIC_INQ_DEV, NULL, 0, in blogic_inquiry()
2219 return blogic_failure(adapter, "INQUIRE TARGET DEVICES"); in blogic_inquiry()
2220 for (tgt_id = 0; tgt_id < adapter->maxdev; tgt_id++) in blogic_inquiry()
2221 adapter->tgt_flags[tgt_id].tgt_exists = in blogic_inquiry()
2232 if (blogic_cmd(adapter, BLOGIC_INQ_DEV0TO7, NULL, 0, in blogic_inquiry()
2235 return blogic_failure(adapter, in blogic_inquiry()
2238 adapter->tgt_flags[tgt_id].tgt_exists = in blogic_inquiry()
2245 if (blogic_cmd(adapter, BLOGIC_INQ_SETUPINFO, &req_replylen, in blogic_inquiry()
2248 return blogic_failure(adapter, "INQUIRE SETUP INFORMATION"); in blogic_inquiry()
2249 for (tgt_id = 0; tgt_id < adapter->maxdev; tgt_id++) in blogic_inquiry()
2250adapter->sync_offset[tgt_id] = (tgt_id < 8 ? setupinfo.sync0to7[tgt_id].offset : setupinfo.sync8to… in blogic_inquiry()
2251 if (strcmp(adapter->fw_ver, "5.06L") >= 0) in blogic_inquiry()
2252 for (tgt_id = 0; tgt_id < adapter->maxdev; tgt_id++) in blogic_inquiry()
2253adapter->tgt_flags[tgt_id].wide_active = (tgt_id < 8 ? (setupinfo.wide_tx_active0to7 & (1 << tgt_i… in blogic_inquiry()
2257 if (adapter->fw_ver[0] >= '3') { in blogic_inquiry()
2265 if (blogic_cmd(adapter, BLOGIC_INQ_SYNC_PERIOD, &req_replylen, in blogic_inquiry()
2268 return blogic_failure(adapter, in blogic_inquiry()
2270 for (tgt_id = 0; tgt_id < adapter->maxdev; tgt_id++) in blogic_inquiry()
2271 adapter->sync_period[tgt_id] = sync_period[tgt_id]; in blogic_inquiry()
2273 for (tgt_id = 0; tgt_id < adapter->maxdev; tgt_id++) in blogic_inquiry()
2275 adapter->sync_period[tgt_id] = 20 + 5 * setupinfo.sync0to7[tgt_id].tx_period; in blogic_inquiry()
2291 static void __init blogic_inithoststruct(struct blogic_adapter *adapter, in blogic_inithoststruct() argument
2294 host->max_id = adapter->maxdev; in blogic_inithoststruct()
2295 host->max_lun = adapter->maxlun; in blogic_inithoststruct()
2297 host->unique_id = adapter->io_addr; in blogic_inithoststruct()
2298 host->this_id = adapter->scsi_id; in blogic_inithoststruct()
2299 host->can_queue = adapter->drvr_qdepth; in blogic_inithoststruct()
2300 host->sg_tablesize = adapter->drvr_sglimit; in blogic_inithoststruct()
2301 host->unchecked_isa_dma = adapter->need_bouncebuf; in blogic_inithoststruct()
2302 host->cmd_per_lun = adapter->untag_qdepth; in blogic_inithoststruct()
2315 struct blogic_adapter *adapter = in blogic_slaveconfig() local
2318 int qdepth = adapter->qdepth[tgt_id]; in blogic_slaveconfig()
2320 if (adapter->tgt_flags[tgt_id].tagq_ok && in blogic_slaveconfig()
2321 (adapter->tagq_ok & (1 << tgt_id))) { in blogic_slaveconfig()
2324 adapter->qdepth[tgt_id] = qdepth; in blogic_slaveconfig()
2327 adapter->tagq_ok &= ~(1 << tgt_id); in blogic_slaveconfig()
2328 qdepth = adapter->untag_qdepth; in blogic_slaveconfig()
2329 adapter->qdepth[tgt_id] = qdepth; in blogic_slaveconfig()
2333 for (tgt_id = 0; tgt_id < adapter->maxdev; tgt_id++) in blogic_slaveconfig()
2334 if (adapter->tgt_flags[tgt_id].tgt_exists) in blogic_slaveconfig()
2335 qdepth += adapter->qdepth[tgt_id]; in blogic_slaveconfig()
2336 if (qdepth > adapter->alloc_ccbs) in blogic_slaveconfig()
2337 blogic_create_addlccbs(adapter, qdepth - adapter->alloc_ccbs, in blogic_slaveconfig()
2353 struct blogic_adapter *adapter; in blogic_init() local
2372 adapter = kzalloc(sizeof(struct blogic_adapter), GFP_KERNEL); in blogic_init()
2373 if (adapter == NULL) { in blogic_init()
2383 blogic_init_probeinfo_list(adapter); in blogic_init()
2387 struct blogic_adapter *myadapter = adapter; in blogic_init()
2460 memcpy(myadapter, adapter, sizeof(struct blogic_adapter)); in blogic_init()
2545 kfree(adapter); in blogic_init()
2558 static int __exit blogic_deladapter(struct blogic_adapter *adapter) in blogic_deladapter() argument
2560 struct Scsi_Host *host = adapter->scsi_host; in blogic_deladapter()
2568 if (blogic_flashpoint_type(adapter)) in blogic_deladapter()
2569 FlashPoint_ReleaseHostAdapter(adapter->cardhandle); in blogic_deladapter()
2574 blogic_destroy_ccbs(adapter); in blogic_deladapter()
2575 blogic_relres(adapter); in blogic_deladapter()
2579 release_region(adapter->io_addr, adapter->addr_count); in blogic_deladapter()
2584 list_del(&adapter->host_list); in blogic_deladapter()
2597 struct blogic_adapter *adapter = ccb->adapter; in blogic_qcompleted_ccb() local
2601 if (adapter->firstccb == NULL) { in blogic_qcompleted_ccb()
2602 adapter->firstccb = ccb; in blogic_qcompleted_ccb()
2603 adapter->lastccb = ccb; in blogic_qcompleted_ccb()
2605 adapter->lastccb->next = ccb; in blogic_qcompleted_ccb()
2606 adapter->lastccb = ccb; in blogic_qcompleted_ccb()
2608 adapter->active_cmds[ccb->tgt_id]--; in blogic_qcompleted_ccb()
2617 static int blogic_resultcode(struct blogic_adapter *adapter, in blogic_resultcode() argument
2636 adapter, adapter_status); in blogic_resultcode()
2661 blogic_warn("Unknown Host Adapter Status 0x%02X\n", adapter, in blogic_resultcode()
2675 static void blogic_scan_inbox(struct blogic_adapter *adapter) in blogic_scan_inbox() argument
2690 struct blogic_inbox *next_inbox = adapter->next_inbox; in blogic_scan_inbox()
2720 …blogic_warn("Illegal CCB #%ld status %d in " "Incoming Mailbox\n", adapter, ccb->serial, ccb->stat… in blogic_scan_inbox()
2724 if (++next_inbox > adapter->last_inbox) in blogic_scan_inbox()
2725 next_inbox = adapter->first_inbox; in blogic_scan_inbox()
2727 adapter->next_inbox = next_inbox; in blogic_scan_inbox()
2738 static void blogic_process_ccbs(struct blogic_adapter *adapter) in blogic_process_ccbs() argument
2740 if (adapter->processing_ccbs) in blogic_process_ccbs()
2742 adapter->processing_ccbs = true; in blogic_process_ccbs()
2743 while (adapter->firstccb != NULL) { in blogic_process_ccbs()
2744 struct blogic_ccb *ccb = adapter->firstccb; in blogic_process_ccbs()
2746 adapter->firstccb = ccb->next; in blogic_process_ccbs()
2747 if (adapter->firstccb == NULL) in blogic_process_ccbs()
2748 adapter->lastccb = NULL; in blogic_process_ccbs()
2755 …blogic_warn("Bus Device Reset CCB #%ld to Target " "%d Completed\n", adapter, ccb->serial, tgt_id); in blogic_process_ccbs()
2756 blogic_inc_count(&adapter->tgt_stats[tgt_id].bdr_done); in blogic_process_ccbs()
2757 adapter->tgt_flags[tgt_id].tagq_active = false; in blogic_process_ccbs()
2758 adapter->cmds_since_rst[tgt_id] = 0; in blogic_process_ccbs()
2759 adapter->last_resetdone[tgt_id] = jiffies; in blogic_process_ccbs()
2787 for (ccb = adapter->all_ccbs; ccb != NULL; in blogic_process_ccbs()
2793 adapter->active_cmds[tgt_id]--; in blogic_process_ccbs()
2797 adapter->bdr_pend[tgt_id] = NULL; in blogic_process_ccbs()
2808 blogic_warn("CCB #%ld to Target %d Impossible State\n", adapter, ccb->serial, ccb->tgt_id); in blogic_process_ccbs()
2811 adapter->tgt_stats[ccb->tgt_id] in blogic_process_ccbs()
2813 adapter->tgt_flags[ccb->tgt_id] in blogic_process_ccbs()
2819 adapter, ccb->serial, ccb->tgt_id); in blogic_process_ccbs()
2820 blogic_inc_count(&adapter->tgt_stats[ccb->tgt_id].aborts_done); in blogic_process_ccbs()
2824 command->result = blogic_resultcode(adapter, in blogic_process_ccbs()
2827 adapter->tgt_stats[ccb->tgt_id] in blogic_process_ccbs()
2832 …"Adapter Status %02X " "Target Status %02X\n", adapter, ccb->serial, ccb->tgt_id, command->result,… in blogic_process_ccbs()
2833 blogic_notice("CDB ", adapter); in blogic_process_ccbs()
2835 blogic_notice(" %02X", adapter, ccb->cdb[i]); in blogic_process_ccbs()
2836 blogic_notice("\n", adapter); in blogic_process_ccbs()
2837 blogic_notice("Sense ", adapter); in blogic_process_ccbs()
2839 blogic_notice(" %02X", adapter, command->sense_buffer[i]); in blogic_process_ccbs()
2840 blogic_notice("\n", adapter); in blogic_process_ccbs()
2853 &adapter->tgt_flags[ccb->tgt_id]; in blogic_process_ccbs()
2870 adapter->processing_ccbs = false; in blogic_process_ccbs()
2881 struct blogic_adapter *adapter = (struct blogic_adapter *) devid; in blogic_inthandler() local
2886 spin_lock_irqsave(adapter->scsi_host->host_lock, processor_flag); in blogic_inthandler()
2890 if (blogic_multimaster_type(adapter)) { in blogic_inthandler()
2895 intreg.all = blogic_rdint(adapter); in blogic_inthandler()
2901 blogic_intreset(adapter); in blogic_inthandler()
2909 adapter->adapter_extreset = true; in blogic_inthandler()
2911 blogic_scan_inbox(adapter); in blogic_inthandler()
2913 adapter->adapter_cmd_complete = true; in blogic_inthandler()
2919 if (FlashPoint_InterruptPending(adapter->cardhandle)) in blogic_inthandler()
2920 switch (FlashPoint_HandleInterrupt(adapter->cardhandle)) { in blogic_inthandler()
2924 adapter->adapter_extreset = true; in blogic_inthandler()
2927 blogic_warn("Internal FlashPoint Error detected - Resetting Host Adapter\n", adapter); in blogic_inthandler()
2928 adapter->adapter_intern_err = true; in blogic_inthandler()
2935 if (adapter->firstccb != NULL) in blogic_inthandler()
2936 blogic_process_ccbs(adapter); in blogic_inthandler()
2940 if (adapter->adapter_extreset) { in blogic_inthandler()
2941 blogic_warn("Resetting %s due to External SCSI Bus Reset\n", adapter, adapter->full_model); in blogic_inthandler()
2942 blogic_inc_count(&adapter->ext_resets); in blogic_inthandler()
2943 blogic_resetadapter(adapter, false); in blogic_inthandler()
2944 adapter->adapter_extreset = false; in blogic_inthandler()
2945 } else if (adapter->adapter_intern_err) { in blogic_inthandler()
2946 blogic_warn("Resetting %s due to Host Adapter Internal Error\n", adapter, adapter->full_model); in blogic_inthandler()
2947 blogic_inc_count(&adapter->adapter_intern_errors); in blogic_inthandler()
2948 blogic_resetadapter(adapter, true); in blogic_inthandler()
2949 adapter->adapter_intern_err = false; in blogic_inthandler()
2954 spin_unlock_irqrestore(adapter->scsi_host->host_lock, processor_flag); in blogic_inthandler()
2965 static bool blogic_write_outbox(struct blogic_adapter *adapter, in blogic_write_outbox() argument
2970 next_outbox = adapter->next_outbox; in blogic_write_outbox()
2981 blogic_execmbox(adapter); in blogic_write_outbox()
2982 if (++next_outbox > adapter->last_outbox) in blogic_write_outbox()
2983 next_outbox = adapter->first_outbox; in blogic_write_outbox()
2984 adapter->next_outbox = next_outbox; in blogic_write_outbox()
2986 adapter->active_cmds[ccb->tgt_id]++; in blogic_write_outbox()
2988 adapter->tgt_stats[ccb->tgt_id].cmds_tried++; in blogic_write_outbox()
2999 struct blogic_adapter *adapter = in blogic_hostreset() local
3003 struct blogic_tgt_stats *stats = &adapter->tgt_stats[id]; in blogic_hostreset()
3010 rc = blogic_resetadapter(adapter, false); in blogic_hostreset()
3023 struct blogic_adapter *adapter = in blogic_qcmd_lck() local
3026 &adapter->tgt_flags[command->device->id]; in blogic_qcmd_lck()
3027 struct blogic_tgt_stats *tgt_stats = adapter->tgt_stats; in blogic_qcmd_lck()
3055 ccb = blogic_alloc_ccb(adapter); in blogic_qcmd_lck()
3057 spin_unlock_irq(adapter->scsi_host->host_lock); in blogic_qcmd_lck()
3059 spin_lock_irq(adapter->scsi_host->host_lock); in blogic_qcmd_lck()
3060 ccb = blogic_alloc_ccb(adapter); in blogic_qcmd_lck()
3079 if (blogic_multimaster_type(adapter)) in blogic_qcmd_lck()
3138 if (adapter->cmds_since_rst[tgt_id]++ >= BLOGIC_MAX_TAG_DEPTH && in blogic_qcmd_lck()
3140 adapter->active_cmds[tgt_id] == 0 in blogic_qcmd_lck()
3142 (adapter->tagq_ok & (1 << tgt_id))) { in blogic_qcmd_lck()
3145 adapter, tgt_id); in blogic_qcmd_lck()
3164 if (adapter->active_cmds[tgt_id] == 0) in blogic_qcmd_lck()
3165 adapter->last_seqpoint[tgt_id] = jiffies; in blogic_qcmd_lck()
3167 adapter->last_seqpoint[tgt_id] + 4 * HZ)) { in blogic_qcmd_lck()
3168 adapter->last_seqpoint[tgt_id] = jiffies; in blogic_qcmd_lck()
3171 if (adapter->ext_lun) { in blogic_qcmd_lck()
3182 sense_buf = dma_map_single(&adapter->pci_device->dev, in blogic_qcmd_lck()
3185 if (dma_mapping_error(&adapter->pci_device->dev, sense_buf)) { in blogic_qcmd_lck()
3187 adapter); in blogic_qcmd_lck()
3193 if (blogic_multimaster_type(adapter)) { in blogic_qcmd_lck()
3204 if (!blogic_write_outbox(adapter, BLOGIC_MBOX_START, ccb)) { in blogic_qcmd_lck()
3205 spin_unlock_irq(adapter->scsi_host->host_lock); in blogic_qcmd_lck()
3206 blogic_warn("Unable to write Outgoing Mailbox - " "Pausing for 1 second\n", adapter); in blogic_qcmd_lck()
3208 spin_lock_irq(adapter->scsi_host->host_lock); in blogic_qcmd_lck()
3209 if (!blogic_write_outbox(adapter, BLOGIC_MBOX_START, in blogic_qcmd_lck()
3211 blogic_warn("Still unable to write Outgoing Mailbox - " "Host Adapter Dead?\n", adapter); in blogic_qcmd_lck()
3223 adapter->active_cmds[tgt_id]++; in blogic_qcmd_lck()
3225 FlashPoint_StartCCB(adapter->cardhandle, ccb); in blogic_qcmd_lck()
3232 blogic_process_ccbs(adapter); in blogic_qcmd_lck()
3246 struct blogic_adapter *adapter = in DEF_SCSI_QCMD()
3251 blogic_inc_count(&adapter->tgt_stats[tgt_id].aborts_request); in DEF_SCSI_QCMD()
3257 for (ccb = adapter->all_ccbs; ccb != NULL; ccb = ccb->next_all) in DEF_SCSI_QCMD()
3261 blogic_warn("Unable to Abort Command to Target %d - No CCB Found\n", adapter, tgt_id); in DEF_SCSI_QCMD()
3264 blogic_warn("Unable to Abort Command to Target %d - CCB Completed\n", adapter, tgt_id); in DEF_SCSI_QCMD()
3267 blogic_warn("Unable to Abort Command to Target %d - CCB Reset\n", adapter, tgt_id); in DEF_SCSI_QCMD()
3270 if (blogic_multimaster_type(adapter)) { in DEF_SCSI_QCMD()
3283 if (adapter->tgt_flags[tgt_id].tagq_active && in DEF_SCSI_QCMD()
3284 adapter->fw_ver[0] < '5') { in DEF_SCSI_QCMD()
3285 …blogic_warn("Unable to Abort CCB #%ld to Target %d - Abort Tag Not Supported\n", adapter, ccb->ser… in DEF_SCSI_QCMD()
3287 } else if (blogic_write_outbox(adapter, BLOGIC_MBOX_ABORT, in DEF_SCSI_QCMD()
3290 adapter, ccb->serial, tgt_id); in DEF_SCSI_QCMD()
3291 blogic_inc_count(&adapter->tgt_stats[tgt_id].aborts_tried); in DEF_SCSI_QCMD()
3294 …blogic_warn("Unable to Abort CCB #%ld to Target %d - No Outgoing Mailboxes\n", adapter, ccb->seria… in DEF_SCSI_QCMD()
3302 blogic_warn("Aborting CCB #%ld to Target %d\n", adapter, in DEF_SCSI_QCMD()
3304 blogic_inc_count(&adapter->tgt_stats[tgt_id].aborts_tried); in DEF_SCSI_QCMD()
3305 FlashPoint_AbortCCB(adapter->cardhandle, ccb); in DEF_SCSI_QCMD()
3312 blogic_process_ccbs(adapter); in DEF_SCSI_QCMD()
3324 static int blogic_resetadapter(struct blogic_adapter *adapter, bool hard_reset)
3333 if (!(blogic_hwreset(adapter, hard_reset) &&
3334 blogic_initadapter(adapter))) {
3335 blogic_err("Resetting %s Failed\n", adapter,
3336 adapter->full_model);
3344 for (ccb = adapter->all_ccbs; ccb != NULL; ccb = ccb->next_all)
3355 spin_unlock_irq(adapter->scsi_host->host_lock);
3356 blogic_delay(adapter->bus_settle_time);
3357 spin_lock_irq(adapter->scsi_host->host_lock);
3360 for (tgt_id = 0; tgt_id < adapter->maxdev; tgt_id++) {
3361 adapter->last_resettried[tgt_id] = jiffies;
3362 adapter->last_resetdone[tgt_id] = jiffies;
3387 struct blogic_adapter *adapter = in blogic_diskparam() local
3392 if (adapter->ext_trans_enable && capacity >= 2 * 1024 * 1024 /* 1 GB in 512 byte sectors */) { in blogic_diskparam()
3444 …blogic_warn("Adopting Geometry %d/%d from Partition Table\n", adapter, diskparam->heads, diskparam… in blogic_diskparam()
3446 …blogic_warn("Warning: Partition Table appears to " "have Geometry %d/%d which is\n", adapter, part… in blogic_diskparam()
3447 …blogic_warn("not compatible with current BusLogic " "Host Adapter Geometry %d/%d\n", adapter, disk… in blogic_diskparam()
3462 struct blogic_adapter *adapter = in blogic_write_info() local
3466 tgt_stats = adapter->tgt_stats; in blogic_write_info()
3467 adapter->ext_resets = 0; in blogic_write_info()
3468 adapter->adapter_intern_errors = 0; in blogic_write_info()
3475 struct blogic_adapter *adapter = (struct blogic_adapter *) shost->hostdata; in blogic_show_info() local
3479 tgt_stats = adapter->tgt_stats; in blogic_show_info()
3480 seq_write(m, adapter->msgbuf, adapter->msgbuflen); in blogic_show_info()
3483 Currently Allocated CCBs: %d\n", adapter->drvr_qdepth, adapter->alloc_ccbs); in blogic_show_info()
3489 for (tgt = 0; tgt < adapter->maxdev; tgt++) { in blogic_show_info()
3490 struct blogic_tgt_flags *tgt_flags = &adapter->tgt_flags[tgt]; in blogic_show_info()
3493 …s", tgt, (tgt_flags->tagq_ok ? (tgt_flags->tagq_active ? " Active" : (adapter->tagq_ok & (1 << … in blogic_show_info()
3497 …" %3d %3u %9u %9u\n", adapter->qdepth[tgt], adapter->active_cmds[tgt], tgt_stats[tgt]… in blogic_show_info()
3502 for (tgt = 0; tgt < adapter->maxdev; tgt++) { in blogic_show_info()
3503 struct blogic_tgt_flags *tgt_flags = &adapter->tgt_flags[tgt]; in blogic_show_info()
3519 for (tgt = 0; tgt < adapter->maxdev; tgt++) { in blogic_show_info()
3520 struct blogic_tgt_flags *tgt_flags = &adapter->tgt_flags[tgt]; in blogic_show_info()
3535 for (tgt = 0; tgt < adapter->maxdev; tgt++) { in blogic_show_info()
3536 struct blogic_tgt_flags *tgt_flags = &adapter->tgt_flags[tgt]; in blogic_show_info()
3555 for (tgt = 0; tgt < adapter->maxdev; tgt++) { in blogic_show_info()
3556 struct blogic_tgt_flags *tgt_flags = &adapter->tgt_flags[tgt]; in blogic_show_info()
3570 seq_printf(m, "\nExternal Host Adapter Resets: %d\n", adapter->ext_resets); in blogic_show_info()
3571 seq_printf(m, "Host Adapter Internal Errors: %d\n", adapter->adapter_intern_errors); in blogic_show_info()
3581 struct blogic_adapter *adapter, ...) in blogic_msg() argument
3588 va_start(args, adapter); in blogic_msg()
3593 strcpy(&adapter->msgbuf[adapter->msgbuflen], buf); in blogic_msg()
3594 adapter->msgbuflen += len; in blogic_msg()
3598 strcpy(&adapter->msgbuf[adapter->msgbuflen], buf); in blogic_msg()
3599 adapter->msgbuflen += len; in blogic_msg()
3602 printk("%sscsi%d: %s", blogic_msglevelmap[msglevel], adapter->host_no, buf); in blogic_msg()
3607 if (adapter != NULL && adapter->adapter_initd) in blogic_msg()
3608 printk("%sscsi%d: %s", blogic_msglevelmap[msglevel], adapter->host_no, buf); in blogic_msg()