Lines Matching +full:fails +full:- +full:without +full:- +full:test +full:- +full:cd

1 // SPDX-License-Identifier: GPL-2.0-only
7 Copyright 1995-1998 by Leonard N. Zubkoff <lnz@dandelion.com>
13 Special thanks to Wayne Yen, Jin-Lon Hon, and Alex Win of BusLogic, whose
15 BusLogic driver, and to Paul Gortmaker, for being such a dedicated test site.
37 #include <linux/dma-mapping.h>
54 #define FAILURE (-1)
124 call to blogic_cmd failed. It is only non-NULL when blogic_cmd
138 blogic_announce("Copyright 1995-1998 by Leonard N. Zubkoff <lnz@dandelion.com>\n", adapter); in blogic_announce_drvr()
150 (struct blogic_adapter *) host->hostdata; in blogic_drvr_info()
151 return adapter->full_model; in blogic_drvr_info()
166 ccb->allocgrp_head = blkp; in blogic_init_ccbs()
167 ccb->allocgrp_size = blk_size; in blogic_init_ccbs()
168 while ((blk_size -= sizeof(struct blogic_ccb)) >= 0) { in blogic_init_ccbs()
169 ccb->status = BLOGIC_CCB_FREE; in blogic_init_ccbs()
170 ccb->adapter = adapter; in blogic_init_ccbs()
171 ccb->dma_handle = (u32) blkp + offset; in blogic_init_ccbs()
173 ccb->callback = blogic_qcompleted_ccb; in blogic_init_ccbs()
174 ccb->base_addr = adapter->fpinfo.base_addr; in blogic_init_ccbs()
176 ccb->next = adapter->free_ccbs; in blogic_init_ccbs()
177 ccb->next_all = adapter->all_ccbs; in blogic_init_ccbs()
178 adapter->free_ccbs = ccb; in blogic_init_ccbs()
179 adapter->all_ccbs = ccb; in blogic_init_ccbs()
180 adapter->alloc_ccbs++; in blogic_init_ccbs()
197 while (adapter->alloc_ccbs < adapter->initccbs) { in blogic_create_initccbs()
198 blk_pointer = dma_alloc_coherent(&adapter->pci_device->dev, in blogic_create_initccbs()
201 blogic_err("UNABLE TO ALLOCATE CCB GROUP - DETACHING\n", in blogic_create_initccbs()
217 struct blogic_ccb *next_ccb = adapter->all_ccbs, *ccb, *lastccb = NULL; in blogic_destroy_ccbs()
218 adapter->all_ccbs = NULL; in blogic_destroy_ccbs()
219 adapter->free_ccbs = NULL; in blogic_destroy_ccbs()
221 next_ccb = ccb->next_all; in blogic_destroy_ccbs()
222 if (ccb->allocgrp_head) { in blogic_destroy_ccbs()
224 dma_free_coherent(&adapter->pci_device->dev, in blogic_destroy_ccbs()
225 lastccb->allocgrp_size, lastccb, in blogic_destroy_ccbs()
226 lastccb->allocgrp_head); in blogic_destroy_ccbs()
231 dma_free_coherent(&adapter->pci_device->dev, in blogic_destroy_ccbs()
232 lastccb->allocgrp_size, lastccb, in blogic_destroy_ccbs()
233 lastccb->allocgrp_head); in blogic_destroy_ccbs()
239 allocation fails and there are no remaining CCBs available, the Driver Queue
248 int prev_alloc = adapter->alloc_ccbs; in blogic_create_addlccbs()
253 while (adapter->alloc_ccbs - prev_alloc < addl_ccbs) { in blogic_create_addlccbs()
254 blk_pointer = dma_alloc_coherent(&adapter->pci_device->dev, in blogic_create_addlccbs()
260 if (adapter->alloc_ccbs > prev_alloc) { in blogic_create_addlccbs()
262 …ated %d additional CCBs (total now %d)\n", adapter, adapter->alloc_ccbs - prev_alloc, adapter->all… in blogic_create_addlccbs()
266 if (adapter->drvr_qdepth > adapter->alloc_ccbs - adapter->tgt_count) { in blogic_create_addlccbs()
267 adapter->drvr_qdepth = adapter->alloc_ccbs - adapter->tgt_count; in blogic_create_addlccbs()
268 adapter->scsi_host->can_queue = adapter->drvr_qdepth; in blogic_create_addlccbs()
282 ccb = adapter->free_ccbs; in blogic_alloc_ccb()
284 ccb->serial = ++serial; in blogic_alloc_ccb()
285 adapter->free_ccbs = ccb->next; in blogic_alloc_ccb()
286 ccb->next = NULL; in blogic_alloc_ccb()
287 if (adapter->free_ccbs == NULL) in blogic_alloc_ccb()
288 blogic_create_addlccbs(adapter, adapter->inc_ccbs, in blogic_alloc_ccb()
292 blogic_create_addlccbs(adapter, adapter->inc_ccbs, true); in blogic_alloc_ccb()
293 ccb = adapter->free_ccbs; in blogic_alloc_ccb()
296 ccb->serial = ++serial; in blogic_alloc_ccb()
297 adapter->free_ccbs = ccb->next; in blogic_alloc_ccb()
298 ccb->next = NULL; in blogic_alloc_ccb()
311 struct blogic_adapter *adapter = ccb->adapter; in blogic_dealloc_ccb()
313 if (ccb->command != NULL) in blogic_dealloc_ccb()
314 scsi_dma_unmap(ccb->command); in blogic_dealloc_ccb()
316 dma_unmap_single(&adapter->pci_device->dev, ccb->sensedata, in blogic_dealloc_ccb()
317 ccb->sense_datalen, DMA_FROM_DEVICE); in blogic_dealloc_ccb()
319 ccb->command = NULL; in blogic_dealloc_ccb()
320 ccb->status = BLOGIC_CCB_FREE; in blogic_dealloc_ccb()
321 ccb->next = adapter->free_ccbs; in blogic_dealloc_ccb()
322 adapter->free_ccbs = ccb; in blogic_dealloc_ccb()
334 -1 if the command was invalid, or -2 if a timeout occurred.
366 if (!adapter->irq_acquired) in blogic_cmd()
374 while (--timeout >= 0) { in blogic_cmd()
383 result = -2; in blogic_cmd()
389 adapter->adapter_cmd_complete = false; in blogic_cmd()
395 while (paramlen > 0 && --timeout >= 0) { in blogic_cmd()
416 if (adapter->adapter_cmd_complete) in blogic_cmd()
423 paramlen--; in blogic_cmd()
428 result = -2; in blogic_cmd()
440 result = -1; in blogic_cmd()
469 while (--timeout >= 0) { in blogic_cmd()
474 if (adapter->adapter_cmd_complete) in blogic_cmd()
490 result = -2; in blogic_cmd()
538 result = -1; in blogic_cmd()
546 result = -1; in blogic_cmd()
558 if (!adapter->irq_acquired) in blogic_cmd()
576 probeinfo->adapter_type = BLOGIC_MULTIMASTER; in blogic_add_probeaddr_isa()
577 probeinfo->adapter_bus_type = BLOGIC_ISA_BUS; in blogic_add_probeaddr_isa()
578 probeinfo->io_addr = io_addr; in blogic_add_probeaddr_isa()
579 probeinfo->pci_device = NULL; in blogic_add_probeaddr_isa()
626 int last_exchange = probeinfo_cnt - 1, bound, j; in blogic_sort_probeinfo()
636 if (probeinfo1->bus > probeinfo2->bus || in blogic_sort_probeinfo()
637 (probeinfo1->bus == probeinfo2->bus && in blogic_sort_probeinfo()
638 (probeinfo1->dev > probeinfo2->dev))) { in blogic_sort_probeinfo()
692 pr_probeinfo->io_addr = 0; in blogic_init_mm_probeinfo()
710 if (dma_set_mask(&pci_device->dev, DMA_BIT_MASK(32))) in blogic_init_mm_probeinfo()
713 bus = pci_device->bus->number; in blogic_init_mm_probeinfo()
714 device = pci_device->devfn >> 3; in blogic_init_mm_probeinfo()
715 irq_ch = pci_device->irq; in blogic_init_mm_probeinfo()
744 host_adapter->io_addr = io_addr; in blogic_init_mm_probeinfo()
770 only valid for the BT-948/958/958D. in blogic_init_mm_probeinfo()
799 pr_probeinfo->adapter_type = BLOGIC_MULTIMASTER; in blogic_init_mm_probeinfo()
800 pr_probeinfo->adapter_bus_type = BLOGIC_PCI_BUS; in blogic_init_mm_probeinfo()
801 pr_probeinfo->io_addr = io_addr; in blogic_init_mm_probeinfo()
802 pr_probeinfo->pci_addr = pci_addr; in blogic_init_mm_probeinfo()
803 pr_probeinfo->bus = bus; in blogic_init_mm_probeinfo()
804 pr_probeinfo->dev = device; in blogic_init_mm_probeinfo()
805 pr_probeinfo->irq_ch = irq_ch; in blogic_init_mm_probeinfo()
806 pr_probeinfo->pci_device = pci_dev_get(pci_device); in blogic_init_mm_probeinfo()
811 probeinfo->adapter_type = BLOGIC_MULTIMASTER; in blogic_init_mm_probeinfo()
812 probeinfo->adapter_bus_type = BLOGIC_PCI_BUS; in blogic_init_mm_probeinfo()
813 probeinfo->io_addr = io_addr; in blogic_init_mm_probeinfo()
814 probeinfo->pci_addr = pci_addr; in blogic_init_mm_probeinfo()
815 probeinfo->bus = bus; in blogic_init_mm_probeinfo()
816 probeinfo->dev = device; in blogic_init_mm_probeinfo()
817 probeinfo->irq_ch = irq_ch; in blogic_init_mm_probeinfo()
818 probeinfo->pci_device = pci_dev_get(pci_device); in blogic_init_mm_probeinfo()
827 and if that host adapter is a BT-948/958/958D, then the in blogic_init_mm_probeinfo()
844 if (pr_probeinfo->io_addr == 0 && in blogic_init_mm_probeinfo()
847 pr_probeinfo->adapter_type = BLOGIC_MULTIMASTER; in blogic_init_mm_probeinfo()
848 pr_probeinfo->adapter_bus_type = BLOGIC_ISA_BUS; in blogic_init_mm_probeinfo()
849 pr_probeinfo->io_addr = 0x330; in blogic_init_mm_probeinfo()
878 Iterate over the older non-compliant MultiMaster PCI Host Adapters, in blogic_init_mm_probeinfo()
893 if (dma_set_mask(&pci_device->dev, DMA_BIT_MASK(32))) in blogic_init_mm_probeinfo()
896 bus = pci_device->bus->number; in blogic_init_mm_probeinfo()
897 device = pci_device->devfn >> 3; in blogic_init_mm_probeinfo()
898 irq_ch = pci_device->irq; in blogic_init_mm_probeinfo()
906 if (probeinfo->io_addr == io_addr && in blogic_init_mm_probeinfo()
907 probeinfo->adapter_type == BLOGIC_MULTIMASTER) { in blogic_init_mm_probeinfo()
908 probeinfo->adapter_bus_type = BLOGIC_PCI_BUS; in blogic_init_mm_probeinfo()
909 probeinfo->pci_addr = 0; in blogic_init_mm_probeinfo()
910 probeinfo->bus = bus; in blogic_init_mm_probeinfo()
911 probeinfo->dev = device; in blogic_init_mm_probeinfo()
912 probeinfo->irq_ch = irq_ch; in blogic_init_mm_probeinfo()
913 probeinfo->pci_device = pci_dev_get(pci_device); in blogic_init_mm_probeinfo()
950 if (dma_set_mask(&pci_device->dev, DMA_BIT_MASK(32))) in blogic_init_fp_probeinfo()
953 bus = pci_device->bus->number; in blogic_init_fp_probeinfo()
954 device = pci_device->devfn >> 3; in blogic_init_fp_probeinfo()
955 irq_ch = pci_device->irq; in blogic_init_fp_probeinfo()
981 probeinfo->adapter_type = BLOGIC_FLASHPOINT; in blogic_init_fp_probeinfo()
982 probeinfo->adapter_bus_type = BLOGIC_PCI_BUS; in blogic_init_fp_probeinfo()
983 probeinfo->io_addr = io_addr; in blogic_init_fp_probeinfo()
984 probeinfo->pci_addr = pci_addr; in blogic_init_fp_probeinfo()
985 probeinfo->bus = bus; in blogic_init_fp_probeinfo()
986 probeinfo->dev = device; in blogic_init_fp_probeinfo()
987 probeinfo->irq_ch = irq_ch; in blogic_init_fp_probeinfo()
988 probeinfo->pci_device = pci_dev_get(pci_device); in blogic_init_fp_probeinfo()
1045 while (probeinfo->adapter_bus_type != in blogic_init_probeinfo_list()
1048 myadapter->io_addr = probeinfo->io_addr; in blogic_init_probeinfo_list()
1067 int mmcount = blogic_probeinfo_count - fpcount; in blogic_init_probeinfo_list()
1100 if (adapter->adapter_bus_type == BLOGIC_PCI_BUS) { in blogic_failure()
1103 …Address 0x%lX PCI Address 0x%lX:\n", adapter, adapter->bus, adapter->dev, adapter->io_addr, adapte… in blogic_failure()
1105 …blogic_err("While configuring BusLogic Host Adapter at I/O Address 0x%lX:\n", adapter, adapter->io… in blogic_failure()
1106 blogic_err("%s FAILED - DETACHING\n", adapter, msg); in blogic_failure()
1108 blogic_err("ADDITIONAL FAILURE INFO - %s\n", adapter, in blogic_failure()
1127 struct fpoint_info *fpinfo = &adapter->fpinfo; in blogic_probe()
1128 fpinfo->base_addr = (u32) adapter->io_addr; in blogic_probe()
1129 fpinfo->irq_ch = adapter->irq_ch; in blogic_probe()
1130 fpinfo->present = false; in blogic_probe()
1132 fpinfo->present)) { in blogic_probe()
1133 … FlashPoint Host Adapter detected at PCI Bus %d Device %d\n", adapter, adapter->bus, adapter->dev); in blogic_probe()
1134 … Address 0x%lX PCI Address 0x%lX, but FlashPoint\n", adapter, adapter->io_addr, adapter->pci_addr); in blogic_probe()
1139 blogic_notice("BusLogic_Probe(0x%lX): FlashPoint Found\n", adapter, adapter->io_addr); in blogic_probe()
1146 Read the Status, Interrupt, and Geometry Registers to test if there are I/O in blogic_probe()
1150 The test here is a subset of that used by the BusLogic Host Adapter BIOS. in blogic_probe()
1156 …x%lX): Status 0x%02X, Interrupt 0x%02X, Geometry 0x%02X\n", adapter, adapter->io_addr, statusreg.a… in blogic_probe()
1162 Check the undocumented Geometry Register to test if there is in blogic_probe()
1164 implement the Geometry Register, so this test helps serve to in blogic_probe()
1190 Soft Reset is performed which only resets the Host Adapter without forcing a
1203 struct fpoint_info *fpinfo = &adapter->fpinfo; in blogic_hwreset()
1204 fpinfo->softreset = !hard_reset; in blogic_hwreset()
1205 fpinfo->report_underrun = true; in blogic_hwreset()
1206 adapter->cardhandle = in blogic_hwreset()
1208 if (adapter->cardhandle == (void *)FPOINT_BADCARD_HANDLE) in blogic_hwreset()
1228 while (--timeout >= 0) { in blogic_hwreset()
1235 …_HardwareReset(0x%lX): Diagnostic Active, Status 0x%02X\n", adapter, adapter->io_addr, statusreg.a… in blogic_hwreset()
1248 while (--timeout >= 0) { in blogic_hwreset()
1255 …rdwareReset(0x%lX): Diagnostic Completed, Status 0x%02X\n", adapter, adapter->io_addr, statusreg.a… in blogic_hwreset()
1263 while (--timeout >= 0) { in blogic_hwreset()
1271 …HardwareReset(0x%lX): Host Adapter Ready, Status 0x%02X\n", adapter, adapter->io_addr, statusreg.a… in blogic_hwreset()
1328 adapter->io_addr, in blogic_checkadapter()
1362 struct fpoint_info *fpinfo = &adapter->fpinfo; in blogic_rdconfig()
1363 tgt = adapter->model; in blogic_rdconfig()
1366 *tgt++ = '-'; in blogic_rdconfig()
1367 for (i = 0; i < sizeof(fpinfo->model); i++) in blogic_rdconfig()
1368 *tgt++ = fpinfo->model[i]; in blogic_rdconfig()
1370 strcpy(adapter->fw_ver, FLASHPOINT_FW_VER); in blogic_rdconfig()
1371 adapter->scsi_id = fpinfo->scsi_id; in blogic_rdconfig()
1372 adapter->ext_trans_enable = fpinfo->ext_trans_enable; in blogic_rdconfig()
1373 adapter->parity = fpinfo->parity; in blogic_rdconfig()
1374 adapter->reset_enabled = !fpinfo->softreset; in blogic_rdconfig()
1375 adapter->level_int = true; in blogic_rdconfig()
1376 adapter->wide = fpinfo->wide; in blogic_rdconfig()
1377 adapter->differential = false; in blogic_rdconfig()
1378 adapter->scam = true; in blogic_rdconfig()
1379 adapter->ultra = true; in blogic_rdconfig()
1380 adapter->ext_lun = true; in blogic_rdconfig()
1381 adapter->terminfo_valid = true; in blogic_rdconfig()
1382 adapter->low_term = fpinfo->low_term; in blogic_rdconfig()
1383 adapter->high_term = fpinfo->high_term; in blogic_rdconfig()
1384 adapter->scam_enabled = fpinfo->scam_enabled; in blogic_rdconfig()
1385 adapter->scam_lev2 = fpinfo->scam_lev2; in blogic_rdconfig()
1386 adapter->drvr_sglimit = BLOGIC_SG_LIMIT; in blogic_rdconfig()
1387 adapter->maxdev = (adapter->wide ? 16 : 8); in blogic_rdconfig()
1388 adapter->maxlun = 32; in blogic_rdconfig()
1389 adapter->initccbs = 4 * BLOGIC_CCB_GRP_ALLOCSIZE; in blogic_rdconfig()
1390 adapter->inc_ccbs = BLOGIC_CCB_GRP_ALLOCSIZE; in blogic_rdconfig()
1391 adapter->drvr_qdepth = 255; in blogic_rdconfig()
1392 adapter->adapter_qdepth = adapter->drvr_qdepth; in blogic_rdconfig()
1393 adapter->sync_ok = fpinfo->sync_ok; in blogic_rdconfig()
1394 adapter->fast_ok = fpinfo->fast_ok; in blogic_rdconfig()
1395 adapter->ultra_ok = fpinfo->ultra_ok; in blogic_rdconfig()
1396 adapter->wide_ok = fpinfo->wide_ok; in blogic_rdconfig()
1397 adapter->discon_ok = fpinfo->discon_ok; in blogic_rdconfig()
1398 adapter->tagq_ok = 0xFFFF; in blogic_rdconfig()
1445 /* BusLogic BT-542B ISA 2.xx */ in blogic_rdconfig()
1450 /* BusLogic BT-742A EISA 2.1x or 2.20 */ in blogic_rdconfig()
1469 BT-948/958/958D in blogic_rdconfig()
1471 BT-946C/956C/956CD/747C/757C/757CD/445C/545C/540CF in blogic_rdconfig()
1473 BT-747S/747D/757S/757D/445S/545S/542D in blogic_rdconfig()
1474 BT-542B/742A (revision H) in blogic_rdconfig()
1476 BT-542B/742A (revision G and below) in blogic_rdconfig()
1483 tgt = adapter->model; in blogic_rdconfig()
1486 *tgt++ = '-'; in blogic_rdconfig()
1497 tgt = adapter->fw_ver; in blogic_rdconfig()
1507 if (strcmp(adapter->fw_ver, "3.3") >= 0) { in blogic_rdconfig()
1520 adapter->scsi_id = config.id; in blogic_rdconfig()
1526 adapter->adapter_bus_type = in blogic_rdconfig()
1527 blogic_adater_bus_types[adapter->model[3] - '4']; in blogic_rdconfig()
1528 if (adapter->irq_ch == 0) { in blogic_rdconfig()
1530 adapter->irq_ch = 9; in blogic_rdconfig()
1532 adapter->irq_ch = 10; in blogic_rdconfig()
1534 adapter->irq_ch = 11; in blogic_rdconfig()
1536 adapter->irq_ch = 12; in blogic_rdconfig()
1538 adapter->irq_ch = 14; in blogic_rdconfig()
1540 adapter->irq_ch = 15; in blogic_rdconfig()
1542 if (adapter->adapter_bus_type == BLOGIC_ISA_BUS) { in blogic_rdconfig()
1544 adapter->dma_ch = 5; in blogic_rdconfig()
1546 adapter->dma_ch = 6; in blogic_rdconfig()
1548 adapter->dma_ch = 7; in blogic_rdconfig()
1555 adapter->ext_trans_enable = georeg.gr.ext_trans_enable; in blogic_rdconfig()
1561 adapter->adapter_sglimit = ext_setupinfo.sg_limit; in blogic_rdconfig()
1562 adapter->drvr_sglimit = adapter->adapter_sglimit; in blogic_rdconfig()
1563 if (adapter->adapter_sglimit > BLOGIC_SG_LIMIT) in blogic_rdconfig()
1564 adapter->drvr_sglimit = BLOGIC_SG_LIMIT; in blogic_rdconfig()
1566 adapter->level_int = true; in blogic_rdconfig()
1567 adapter->wide = ext_setupinfo.wide; in blogic_rdconfig()
1568 adapter->differential = ext_setupinfo.differential; in blogic_rdconfig()
1569 adapter->scam = ext_setupinfo.scam; in blogic_rdconfig()
1570 adapter->ultra = ext_setupinfo.ultra; in blogic_rdconfig()
1575 if (adapter->fw_ver[0] == '5' || (adapter->fw_ver[0] == '4' && in blogic_rdconfig()
1576 adapter->wide)) in blogic_rdconfig()
1577 adapter->ext_lun = true; in blogic_rdconfig()
1582 if (adapter->fw_ver[0] == '5') { in blogic_rdconfig()
1593 adapter->terminfo_valid = true; in blogic_rdconfig()
1594 adapter->low_term = adapter_info.low_term; in blogic_rdconfig()
1595 adapter->high_term = adapter_info.high_term; in blogic_rdconfig()
1602 if (adapter->fw_ver[0] >= '4') { in blogic_rdconfig()
1614 adapter->parity = autoscsi.parity; in blogic_rdconfig()
1615 adapter->reset_enabled = autoscsi.reset_enabled; in blogic_rdconfig()
1616 if (adapter->fw_ver[0] == '4') { in blogic_rdconfig()
1617 adapter->terminfo_valid = true; in blogic_rdconfig()
1618 adapter->low_term = autoscsi.low_term; in blogic_rdconfig()
1619 adapter->high_term = autoscsi.high_term; in blogic_rdconfig()
1626 adapter->wide_ok = autoscsi.wide_ok; in blogic_rdconfig()
1627 adapter->fast_ok = autoscsi.fast_ok; in blogic_rdconfig()
1628 adapter->sync_ok = autoscsi.sync_ok; in blogic_rdconfig()
1629 adapter->discon_ok = autoscsi.discon_ok; in blogic_rdconfig()
1630 if (adapter->ultra) in blogic_rdconfig()
1631 adapter->ultra_ok = autoscsi.ultra_ok; in blogic_rdconfig()
1632 if (adapter->scam) { in blogic_rdconfig()
1633 adapter->scam_enabled = autoscsi.scam_enabled; in blogic_rdconfig()
1634 adapter->scam_lev2 = autoscsi.scam_lev2; in blogic_rdconfig()
1641 if (adapter->fw_ver[0] < '4') { in blogic_rdconfig()
1643 adapter->sync_ok = 0xFF; in blogic_rdconfig()
1644 if (adapter->adapter_bus_type == BLOGIC_EISA_BUS) { in blogic_rdconfig()
1646 adapter->fast_ok = 0xFF; in blogic_rdconfig()
1647 if (strcmp(adapter->model, "BT-757") == 0) in blogic_rdconfig()
1648 adapter->wide_ok = 0xFF; in blogic_rdconfig()
1651 adapter->discon_ok = 0xFF; in blogic_rdconfig()
1652 adapter->parity = setupinfo.parity; in blogic_rdconfig()
1653 adapter->reset_enabled = true; in blogic_rdconfig()
1659 adapter->maxdev = (adapter->wide ? 16 : 8); in blogic_rdconfig()
1660 adapter->maxlun = (adapter->ext_lun ? 32 : 8); in blogic_rdconfig()
1681 192 BT-948/958/958D in blogic_rdconfig()
1682 100 BT-946C/956C/956CD/747C/757C/757CD/445C in blogic_rdconfig()
1683 50 BT-545C/540CF in blogic_rdconfig()
1684 30 BT-747S/747D/757S/757D/445S/545S/542D/542B/742A in blogic_rdconfig()
1686 if (adapter->fw_ver[0] == '5') in blogic_rdconfig()
1687 adapter->adapter_qdepth = 192; in blogic_rdconfig()
1688 else if (adapter->fw_ver[0] == '4') in blogic_rdconfig()
1689 adapter->adapter_qdepth = (adapter->adapter_bus_type != in blogic_rdconfig()
1692 adapter->adapter_qdepth = 30; in blogic_rdconfig()
1693 if (strcmp(adapter->fw_ver, "3.31") >= 0) { in blogic_rdconfig()
1694 adapter->strict_rr = true; in blogic_rdconfig()
1695 adapter->mbox_count = BLOGIC_MAX_MAILBOX; in blogic_rdconfig()
1697 adapter->strict_rr = false; in blogic_rdconfig()
1698 adapter->mbox_count = 32; in blogic_rdconfig()
1700 adapter->drvr_qdepth = adapter->mbox_count; in blogic_rdconfig()
1701 adapter->initccbs = 4 * BLOGIC_CCB_GRP_ALLOCSIZE; in blogic_rdconfig()
1702 adapter->inc_ccbs = BLOGIC_CCB_GRP_ALLOCSIZE; in blogic_rdconfig()
1710 adapter->tagq_ok = 0; in blogic_rdconfig()
1711 switch (adapter->fw_ver[0]) { in blogic_rdconfig()
1713 adapter->tagq_ok = 0xFFFF; in blogic_rdconfig()
1716 if (strcmp(adapter->fw_ver, "4.22") >= 0) in blogic_rdconfig()
1717 adapter->tagq_ok = 0xFFFF; in blogic_rdconfig()
1720 if (strcmp(adapter->fw_ver, "3.35") >= 0) in blogic_rdconfig()
1721 adapter->tagq_ok = 0xFFFF; in blogic_rdconfig()
1729 adapter->bios_addr = ext_setupinfo.bios_addr << 12; in blogic_rdconfig()
1734 if (adapter->adapter_bus_type == BLOGIC_ISA_BUS && in blogic_rdconfig()
1736 adapter->need_bouncebuf = true; in blogic_rdconfig()
1738 BusLogic BT-445S Host Adapters prior to board revision E have a in blogic_rdconfig()
1741 incorrectly. Only properly functioning BT-445S Host Adapters in blogic_rdconfig()
1743 be used for the buggy BT-445S models if there is more than 16MB in blogic_rdconfig()
1746 if (adapter->bios_addr > 0 && strcmp(adapter->model, "BT-445S") == 0 && in blogic_rdconfig()
1747 strcmp(adapter->fw_ver, "3.37") < 0 && in blogic_rdconfig()
1749 adapter->need_bouncebuf = true; in blogic_rdconfig()
1758 strcpy(adapter->full_model, "BusLogic "); in blogic_rdconfig()
1759 strcat(adapter->full_model, adapter->model); in blogic_rdconfig()
1769 if (adapter->drvr_opts != NULL && in blogic_rdconfig()
1770 adapter->drvr_opts->qdepth[tgt_id] > 0) in blogic_rdconfig()
1771 qdepth = adapter->drvr_opts->qdepth[tgt_id]; in blogic_rdconfig()
1772 else if (adapter->need_bouncebuf) in blogic_rdconfig()
1774 adapter->qdepth[tgt_id] = qdepth; in blogic_rdconfig()
1776 if (adapter->need_bouncebuf) in blogic_rdconfig()
1777 adapter->untag_qdepth = BLOGIC_UNTAG_DEPTH_BB; in blogic_rdconfig()
1779 adapter->untag_qdepth = BLOGIC_UNTAG_DEPTH; in blogic_rdconfig()
1780 if (adapter->drvr_opts != NULL) in blogic_rdconfig()
1781 adapter->common_qdepth = adapter->drvr_opts->common_qdepth; in blogic_rdconfig()
1782 if (adapter->common_qdepth > 0 && in blogic_rdconfig()
1783 adapter->common_qdepth < adapter->untag_qdepth) in blogic_rdconfig()
1784 adapter->untag_qdepth = adapter->common_qdepth; in blogic_rdconfig()
1790 adapter->tagq_ok &= adapter->discon_ok; in blogic_rdconfig()
1795 if (adapter->drvr_opts != NULL) in blogic_rdconfig()
1796 adapter->tagq_ok = (adapter->drvr_opts->tagq_ok & in blogic_rdconfig()
1797 adapter->drvr_opts->tagq_ok_mask) | in blogic_rdconfig()
1798 (adapter->tagq_ok & ~adapter->drvr_opts->tagq_ok_mask); in blogic_rdconfig()
1805 if (adapter->drvr_opts != NULL && in blogic_rdconfig()
1806 adapter->drvr_opts->bus_settle_time > 0) in blogic_rdconfig()
1807 adapter->bus_settle_time = adapter->drvr_opts->bus_settle_time; in blogic_rdconfig()
1809 adapter->bus_settle_time = BLOGIC_BUS_SETTLE_TIME; in blogic_rdconfig()
1824 unsigned short alltgt_mask = (1 << adapter->maxdev) - 1; in blogic_reportconfig()
1839 …r->model, blogic_adapter_busnames[adapter->adapter_bus_type], (adapter->wide ? " Wide" : ""), (ada… in blogic_reportconfig()
1840 …s: 0x%lX, IRQ Channel: %d/%s\n", adapter, adapter->fw_ver, adapter->io_addr, adapter->irq_ch, (ada… in blogic_reportconfig()
1841 if (adapter->adapter_bus_type != BLOGIC_PCI_BUS) { in blogic_reportconfig()
1843 if (adapter->dma_ch > 0) in blogic_reportconfig()
1844 blogic_info("%d, ", adapter, adapter->dma_ch); in blogic_reportconfig()
1847 if (adapter->bios_addr > 0) in blogic_reportconfig()
1849 adapter->bios_addr); in blogic_reportconfig()
1854 adapter->bus, adapter->dev); in blogic_reportconfig()
1855 if (adapter->pci_addr > 0) in blogic_reportconfig()
1856 blogic_info("0x%lX, ", adapter, adapter->pci_addr); in blogic_reportconfig()
1860 blogic_info("Host Adapter SCSI ID: %d\n", adapter, adapter->scsi_id); in blogic_reportconfig()
1862 adapter, (adapter->parity ? "Enabled" : "Disabled"), in blogic_reportconfig()
1863 (adapter->ext_trans_enable ? "Enabled" : "Disabled")); in blogic_reportconfig()
1864 alltgt_mask &= ~(1 << adapter->scsi_id); in blogic_reportconfig()
1865 sync_ok = adapter->sync_ok & alltgt_mask; in blogic_reportconfig()
1866 fast_ok = adapter->fast_ok & alltgt_mask; in blogic_reportconfig()
1867 ultra_ok = adapter->ultra_ok & alltgt_mask; in blogic_reportconfig()
1869 (adapter->fw_ver[0] >= '4' || in blogic_reportconfig()
1870 adapter->adapter_bus_type == BLOGIC_EISA_BUS)) || in blogic_reportconfig()
1891 for (tgt_id = 0; tgt_id < adapter->maxdev; tgt_id++) in blogic_reportconfig()
1893 syncstr[adapter->scsi_id] = '#'; in blogic_reportconfig()
1894 syncstr[adapter->maxdev] = '\0'; in blogic_reportconfig()
1898 wide_ok = adapter->wide_ok & alltgt_mask; in blogic_reportconfig()
1904 for (tgt_id = 0; tgt_id < adapter->maxdev; tgt_id++) in blogic_reportconfig()
1906 widestr[adapter->scsi_id] = '#'; in blogic_reportconfig()
1907 widestr[adapter->maxdev] = '\0'; in blogic_reportconfig()
1909 discon_ok = adapter->discon_ok & alltgt_mask; in blogic_reportconfig()
1915 for (tgt_id = 0; tgt_id < adapter->maxdev; tgt_id++) in blogic_reportconfig()
1917 discon_str[adapter->scsi_id] = '#'; in blogic_reportconfig()
1918 discon_str[adapter->maxdev] = '\0'; in blogic_reportconfig()
1920 tagq_ok = adapter->tagq_ok & alltgt_mask; in blogic_reportconfig()
1926 for (tgt_id = 0; tgt_id < adapter->maxdev; tgt_id++) in blogic_reportconfig()
1928 tagq_str[adapter->scsi_id] = '#'; in blogic_reportconfig()
1929 tagq_str[adapter->maxdev] = '\0'; in blogic_reportconfig()
1936 … of %d segments, Mailboxes: %d\n", adapter, adapter->drvr_sglimit, adapter->adapter_sglimit, adapt… in blogic_reportconfig()
1937 …ueue Depth: %d, Host Adapter Queue Depth: %d\n", adapter, adapter->drvr_qdepth, adapter->adapter_q… in blogic_reportconfig()
1939 …Depth: %d, Scatter/Gather Limit: %d segments\n", adapter, adapter->drvr_qdepth, adapter->drvr_sgli… in blogic_reportconfig()
1942 for (tgt_id = 1; tgt_id < adapter->maxdev; tgt_id++) in blogic_reportconfig()
1943 if (adapter->qdepth[tgt_id] != adapter->qdepth[0]) { in blogic_reportconfig()
1948 if (adapter->qdepth[0] > 0) in blogic_reportconfig()
1949 blogic_info("%d", adapter, adapter->qdepth[0]); in blogic_reportconfig()
1955 adapter->untag_qdepth); in blogic_reportconfig()
1956 if (adapter->terminfo_valid) { in blogic_reportconfig()
1957 if (adapter->wide) in blogic_reportconfig()
1959 …(adapter->low_term ? (adapter->high_term ? "Both Enabled" : "Low Enabled") : (adapter->high_term ?… in blogic_reportconfig()
1962 (adapter->low_term ? "Enabled" : "Disabled")); in blogic_reportconfig()
1963 if (adapter->scam) in blogic_reportconfig()
1965 …(adapter->scam_enabled ? (adapter->scam_lev2 ? "Enabled, Level 2" : "Enabled, Level 1") : "Disable… in blogic_reportconfig()
1983 if (adapter->irq_ch == 0) { in blogic_getres()
1984 blogic_err("NO LEGAL INTERRUPT CHANNEL ASSIGNED - DETACHING\n", in blogic_getres()
1991 if (request_irq(adapter->irq_ch, blogic_inthandler, IRQF_SHARED, in blogic_getres()
1992 adapter->full_model, adapter) < 0) { in blogic_getres()
1993 blogic_err("UNABLE TO ACQUIRE IRQ CHANNEL %d - DETACHING\n", in blogic_getres()
1994 adapter, adapter->irq_ch); in blogic_getres()
1997 adapter->irq_acquired = true; in blogic_getres()
2001 if (adapter->dma_ch > 0) { in blogic_getres()
2002 if (request_dma(adapter->dma_ch, adapter->full_model) < 0) { in blogic_getres()
2003 blogic_err("UNABLE TO ACQUIRE DMA CHANNEL %d - DETACHING\n", adapter, adapter->dma_ch); in blogic_getres()
2006 set_dma_mode(adapter->dma_ch, DMA_MODE_CASCADE); in blogic_getres()
2007 enable_dma(adapter->dma_ch); in blogic_getres()
2008 adapter->dma_chan_acquired = true; in blogic_getres()
2027 if (adapter->irq_acquired) in blogic_relres()
2028 free_irq(adapter->irq_ch, adapter); in blogic_relres()
2032 if (adapter->dma_chan_acquired) in blogic_relres()
2033 free_dma(adapter->dma_ch); in blogic_relres()
2037 if (adapter->mbox_space) in blogic_relres()
2038 dma_free_coherent(&adapter->pci_device->dev, adapter->mbox_sz, in blogic_relres()
2039 adapter->mbox_space, adapter->mbox_space_handle); in blogic_relres()
2040 pci_dev_put(adapter->pci_device); in blogic_relres()
2041 adapter->mbox_space = NULL; in blogic_relres()
2042 adapter->mbox_space_handle = 0; in blogic_relres()
2043 adapter->mbox_sz = 0; in blogic_relres()
2064 adapter->firstccb = NULL; in blogic_initadapter()
2065 adapter->lastccb = NULL; in blogic_initadapter()
2072 for (tgt_id = 0; tgt_id < adapter->maxdev; tgt_id++) { in blogic_initadapter()
2073 adapter->bdr_pend[tgt_id] = NULL; in blogic_initadapter()
2074 adapter->tgt_flags[tgt_id].tagq_active = false; in blogic_initadapter()
2075 adapter->tgt_flags[tgt_id].cmd_good = false; in blogic_initadapter()
2076 adapter->active_cmds[tgt_id] = 0; in blogic_initadapter()
2077 adapter->cmds_since_rst[tgt_id] = 0; in blogic_initadapter()
2089 …adapter->mbox_sz = adapter->mbox_count * (sizeof(struct blogic_outbox) + sizeof(struct blogic_inbo… in blogic_initadapter()
2090 adapter->mbox_space = dma_alloc_coherent(&adapter->pci_device->dev, in blogic_initadapter()
2091 adapter->mbox_sz, &adapter->mbox_space_handle, in blogic_initadapter()
2093 if (adapter->mbox_space == NULL) in blogic_initadapter()
2095 adapter->first_outbox = (struct blogic_outbox *) adapter->mbox_space; in blogic_initadapter()
2096 adapter->last_outbox = adapter->first_outbox + adapter->mbox_count - 1; in blogic_initadapter()
2097 adapter->next_outbox = adapter->first_outbox; in blogic_initadapter()
2098 adapter->first_inbox = (struct blogic_inbox *) (adapter->last_outbox + 1); in blogic_initadapter()
2099 adapter->last_inbox = adapter->first_inbox + adapter->mbox_count - 1; in blogic_initadapter()
2100 adapter->next_inbox = adapter->first_inbox; in blogic_initadapter()
2105 memset(adapter->first_outbox, 0, in blogic_initadapter()
2106 adapter->mbox_count * sizeof(struct blogic_outbox)); in blogic_initadapter()
2107 memset(adapter->first_inbox, 0, in blogic_initadapter()
2108 adapter->mbox_count * sizeof(struct blogic_inbox)); in blogic_initadapter()
2114 extmbox_req.mbox_count = adapter->mbox_count; in blogic_initadapter()
2115 extmbox_req.base_mbox_addr = (u32) adapter->mbox_space_handle; in blogic_initadapter()
2127 if (adapter->strict_rr) { in blogic_initadapter()
2139 if (adapter->ext_lun) { in blogic_initadapter()
2150 if (!adapter->adapter_initd) { in blogic_initadapter()
2152 adapter->full_model); in blogic_initadapter()
2156 adapter->full_model); in blogic_initadapter()
2157 adapter->adapter_initd = true; in blogic_initadapter()
2186 blogic_delay(adapter->bus_settle_time); in blogic_inquiry()
2195 if (adapter->drvr_opts != NULL && adapter->drvr_opts->stop_tgt_inquiry) in blogic_inquiry()
2207 if (strcmp(adapter->fw_ver, "4.25") >= 0) { in blogic_inquiry()
2212 unlike the Inquire Installed Devices commands which test in blogic_inquiry()
2213 Logical Units 0 - 7. Two bytes are returned, where byte in blogic_inquiry()
2221 for (tgt_id = 0; tgt_id < adapter->maxdev; tgt_id++) in blogic_inquiry()
2222 adapter->tgt_flags[tgt_id].tgt_exists = in blogic_inquiry()
2239 adapter->tgt_flags[tgt_id].tgt_exists = in blogic_inquiry()
2250 for (tgt_id = 0; tgt_id < adapter->maxdev; tgt_id++) in blogic_inquiry()
2251 …adapter->sync_offset[tgt_id] = (tgt_id < 8 ? setupinfo.sync0to7[tgt_id].offset : setupinfo.sync8to… in blogic_inquiry()
2252 if (strcmp(adapter->fw_ver, "5.06L") >= 0) in blogic_inquiry()
2253 for (tgt_id = 0; tgt_id < adapter->maxdev; tgt_id++) in blogic_inquiry()
2254->tgt_flags[tgt_id].wide_active = (tgt_id < 8 ? (setupinfo.wide_tx_active0to7 & (1 << tgt_id) ? tr… in blogic_inquiry()
2258 if (adapter->fw_ver[0] >= '3') { in blogic_inquiry()
2271 for (tgt_id = 0; tgt_id < adapter->maxdev; tgt_id++) in blogic_inquiry()
2272 adapter->sync_period[tgt_id] = sync_period[tgt_id]; in blogic_inquiry()
2274 for (tgt_id = 0; tgt_id < adapter->maxdev; tgt_id++) in blogic_inquiry()
2276 adapter->sync_period[tgt_id] = 20 + 5 * setupinfo.sync0to7[tgt_id].tx_period; in blogic_inquiry()
2295 host->max_id = adapter->maxdev; in blogic_inithoststruct()
2296 host->max_lun = adapter->maxlun; in blogic_inithoststruct()
2297 host->max_channel = 0; in blogic_inithoststruct()
2298 host->unique_id = adapter->io_addr; in blogic_inithoststruct()
2299 host->this_id = adapter->scsi_id; in blogic_inithoststruct()
2300 host->can_queue = adapter->drvr_qdepth; in blogic_inithoststruct()
2301 host->sg_tablesize = adapter->drvr_sglimit; in blogic_inithoststruct()
2302 host->unchecked_isa_dma = adapter->need_bouncebuf; in blogic_inithoststruct()
2303 host->cmd_per_lun = adapter->untag_qdepth; in blogic_inithoststruct()
2317 (struct blogic_adapter *) dev->host->hostdata; in blogic_slaveconfig()
2318 int tgt_id = dev->id; in blogic_slaveconfig()
2319 int qdepth = adapter->qdepth[tgt_id]; in blogic_slaveconfig()
2321 if (adapter->tgt_flags[tgt_id].tagq_ok && in blogic_slaveconfig()
2322 (adapter->tagq_ok & (1 << tgt_id))) { in blogic_slaveconfig()
2325 adapter->qdepth[tgt_id] = qdepth; in blogic_slaveconfig()
2328 adapter->tagq_ok &= ~(1 << tgt_id); in blogic_slaveconfig()
2329 qdepth = adapter->untag_qdepth; in blogic_slaveconfig()
2330 adapter->qdepth[tgt_id] = qdepth; in blogic_slaveconfig()
2334 for (tgt_id = 0; tgt_id < adapter->maxdev; tgt_id++) in blogic_slaveconfig()
2335 if (adapter->tgt_flags[tgt_id].tgt_exists) in blogic_slaveconfig()
2336 qdepth += adapter->qdepth[tgt_id]; in blogic_slaveconfig()
2337 if (qdepth > adapter->alloc_ccbs) in blogic_slaveconfig()
2338 blogic_create_addlccbs(adapter, qdepth - adapter->alloc_ccbs, in blogic_slaveconfig()
2363 return -ENODEV; in blogic_init()
2370 return -ENOMEM; in blogic_init()
2377 return -ENOMEM; in blogic_init()
2391 if (probeinfo->io_addr == 0) in blogic_init()
2394 myadapter->adapter_type = probeinfo->adapter_type; in blogic_init()
2395 myadapter->adapter_bus_type = probeinfo->adapter_bus_type; in blogic_init()
2396 myadapter->io_addr = probeinfo->io_addr; in blogic_init()
2397 myadapter->pci_addr = probeinfo->pci_addr; in blogic_init()
2398 myadapter->bus = probeinfo->bus; in blogic_init()
2399 myadapter->dev = probeinfo->dev; in blogic_init()
2400 myadapter->pci_device = probeinfo->pci_device; in blogic_init()
2401 myadapter->irq_ch = probeinfo->irq_ch; in blogic_init()
2402 myadapter->addr_count = in blogic_init()
2403 blogic_adapter_addr_count[myadapter->adapter_type]; in blogic_init()
2408 if (!request_region(myadapter->io_addr, myadapter->addr_count, in blogic_init()
2416 release_region(myadapter->io_addr, in blogic_init()
2417 myadapter->addr_count); in blogic_init()
2425 release_region(myadapter->io_addr, in blogic_init()
2426 myadapter->addr_count); in blogic_init()
2434 release_region(myadapter->io_addr, in blogic_init()
2435 myadapter->addr_count); in blogic_init()
2442 myadapter->drvr_opts = in blogic_init()
2456 release_region(myadapter->io_addr, in blogic_init()
2457 myadapter->addr_count); in blogic_init()
2460 myadapter = (struct blogic_adapter *) host->hostdata; in blogic_init()
2462 myadapter->scsi_host = host; in blogic_init()
2463 myadapter->host_no = host->host_no; in blogic_init()
2468 list_add_tail(&myadapter->host_list, &blogic_host_list); in blogic_init()
2491 Release and re-register usage of the I/O Address in blogic_init()
2495 release_region(myadapter->io_addr, in blogic_init()
2496 myadapter->addr_count); in blogic_init()
2497 if (!request_region(myadapter->io_addr, in blogic_init()
2498 myadapter->addr_count, in blogic_init()
2499 myadapter->full_model)) { in blogic_init()
2501 "BusLogic: Release and re-register of " in blogic_init()
2503 (unsigned long)myadapter->io_addr); in blogic_init()
2506 list_del(&myadapter->host_list); in blogic_init()
2508 ret = -ENOMEM; in blogic_init()
2512 if (scsi_add_host(host, myadapter->pci_device in blogic_init()
2513 ? &myadapter->pci_device->dev in blogic_init()
2520 list_del(&myadapter->host_list); in blogic_init()
2522 ret = -ENODEV; in blogic_init()
2541 list_del(&myadapter->host_list); in blogic_init()
2543 ret = -ENODEV; in blogic_init()
2561 struct Scsi_Host *host = adapter->scsi_host; in blogic_deladapter()
2570 FlashPoint_ReleaseHostAdapter(adapter->cardhandle); in blogic_deladapter()
2580 release_region(adapter->io_addr, adapter->addr_count); in blogic_deladapter()
2585 list_del(&adapter->host_list); in blogic_deladapter()
2598 struct blogic_adapter *adapter = ccb->adapter; in blogic_qcompleted_ccb()
2600 ccb->status = BLOGIC_CCB_COMPLETE; in blogic_qcompleted_ccb()
2601 ccb->next = NULL; in blogic_qcompleted_ccb()
2602 if (adapter->firstccb == NULL) { in blogic_qcompleted_ccb()
2603 adapter->firstccb = ccb; in blogic_qcompleted_ccb()
2604 adapter->lastccb = ccb; in blogic_qcompleted_ccb()
2606 adapter->lastccb->next = ccb; in blogic_qcompleted_ccb()
2607 adapter->lastccb = ccb; in blogic_qcompleted_ccb()
2609 adapter->active_cmds[ccb->tgt_id]--; in blogic_qcompleted_ccb()
2684 Without Error, Command Completed With Error, or Command Aborted in blogic_scan_inbox()
2691 struct blogic_inbox *next_inbox = adapter->next_inbox; in blogic_scan_inbox()
2694 while ((comp_code = next_inbox->comp_code) != BLOGIC_INBOX_FREE) { in blogic_scan_inbox()
2704 (struct blogic_ccb *) bus_to_virt(next_inbox->ccb); in blogic_scan_inbox()
2706 if (ccb->status == BLOGIC_CCB_ACTIVE || in blogic_scan_inbox()
2707 ccb->status == BLOGIC_CCB_RESET) { in blogic_scan_inbox()
2712 ccb->comp_code = comp_code; in blogic_scan_inbox()
2721 …blogic_warn("Illegal CCB #%ld status %d in Incoming Mailbox\n", adapter, ccb->serial, ccb->status); in blogic_scan_inbox()
2724 next_inbox->comp_code = BLOGIC_INBOX_FREE; in blogic_scan_inbox()
2725 if (++next_inbox > adapter->last_inbox) in blogic_scan_inbox()
2726 next_inbox = adapter->first_inbox; in blogic_scan_inbox()
2728 adapter->next_inbox = next_inbox; in blogic_scan_inbox()
2741 if (adapter->processing_ccbs) in blogic_process_ccbs()
2743 adapter->processing_ccbs = true; in blogic_process_ccbs()
2744 while (adapter->firstccb != NULL) { in blogic_process_ccbs()
2745 struct blogic_ccb *ccb = adapter->firstccb; in blogic_process_ccbs()
2746 struct scsi_cmnd *command = ccb->command; in blogic_process_ccbs()
2747 adapter->firstccb = ccb->next; in blogic_process_ccbs()
2748 if (adapter->firstccb == NULL) in blogic_process_ccbs()
2749 adapter->lastccb = NULL; in blogic_process_ccbs()
2753 if (ccb->opcode == BLOGIC_BDR) { in blogic_process_ccbs()
2754 int tgt_id = ccb->tgt_id; in blogic_process_ccbs()
2756 blogic_warn("Bus Device Reset CCB #%ld to Target %d Completed\n", adapter, ccb->serial, tgt_id); in blogic_process_ccbs()
2757 blogic_inc_count(&adapter->tgt_stats[tgt_id].bdr_done); in blogic_process_ccbs()
2758 adapter->tgt_flags[tgt_id].tagq_active = false; in blogic_process_ccbs()
2759 adapter->cmds_since_rst[tgt_id] = 0; in blogic_process_ccbs()
2760 adapter->last_resetdone[tgt_id] = jiffies; in blogic_process_ccbs()
2768 non-NULL only when a Bus Device Reset was requested in blogic_process_ccbs()
2776 command->reset_chain; in blogic_process_ccbs()
2777 command->reset_chain = NULL; in blogic_process_ccbs()
2778 command->result = DID_RESET << 16; in blogic_process_ccbs()
2779 command->scsi_done(command); in blogic_process_ccbs()
2788 for (ccb = adapter->all_ccbs; ccb != NULL; in blogic_process_ccbs()
2789 ccb = ccb->next_all) in blogic_process_ccbs()
2790 if (ccb->status == BLOGIC_CCB_RESET && in blogic_process_ccbs()
2791 ccb->tgt_id == tgt_id) { in blogic_process_ccbs()
2792 command = ccb->command; in blogic_process_ccbs()
2794 adapter->active_cmds[tgt_id]--; in blogic_process_ccbs()
2795 command->result = DID_RESET << 16; in blogic_process_ccbs()
2796 command->scsi_done(command); in blogic_process_ccbs()
2798 adapter->bdr_pend[tgt_id] = NULL; in blogic_process_ccbs()
2805 switch (ccb->comp_code) { in blogic_process_ccbs()
2809 blogic_warn("CCB #%ld to Target %d Impossible State\n", adapter, ccb->serial, ccb->tgt_id); in blogic_process_ccbs()
2812 adapter->tgt_stats[ccb->tgt_id] in blogic_process_ccbs()
2814 adapter->tgt_flags[ccb->tgt_id] in blogic_process_ccbs()
2816 command->result = DID_OK << 16; in blogic_process_ccbs()
2820 adapter, ccb->serial, ccb->tgt_id); in blogic_process_ccbs()
2821 blogic_inc_count(&adapter->tgt_stats[ccb->tgt_id].aborts_done); in blogic_process_ccbs()
2822 command->result = DID_ABORT << 16; in blogic_process_ccbs()
2825 command->result = blogic_resultcode(adapter, in blogic_process_ccbs()
2826 ccb->adapter_status, ccb->tgt_status); in blogic_process_ccbs()
2827 if (ccb->adapter_status != BLOGIC_SELECT_TIMEOUT) { in blogic_process_ccbs()
2828 adapter->tgt_stats[ccb->tgt_id] in blogic_process_ccbs()
2833 …tus %02X Target Status %02X\n", adapter, ccb->serial, ccb->tgt_id, command->result, ccb->adapter_s… in blogic_process_ccbs()
2835 for (i = 0; i < ccb->cdblen; i++) in blogic_process_ccbs()
2836 blogic_notice(" %02X", adapter, ccb->cdb[i]); in blogic_process_ccbs()
2839 for (i = 0; i < ccb->sense_datalen; i++) in blogic_process_ccbs()
2840 blogic_notice(" %02X", adapter, command->sense_buffer[i]); in blogic_process_ccbs()
2851 if (ccb->cdb[0] == INQUIRY && ccb->cdb[1] == 0 && in blogic_process_ccbs()
2852 ccb->adapter_status == BLOGIC_CMD_CMPLT_NORMAL) { in blogic_process_ccbs()
2854 &adapter->tgt_flags[ccb->tgt_id]; in blogic_process_ccbs()
2857 tgt_flags->tgt_exists = true; in blogic_process_ccbs()
2858 tgt_flags->tagq_ok = inquiry->CmdQue; in blogic_process_ccbs()
2859 tgt_flags->wide_ok = inquiry->WBus16; in blogic_process_ccbs()
2868 command->scsi_done(command); in blogic_process_ccbs()
2871 adapter->processing_ccbs = false; in blogic_process_ccbs()
2887 spin_lock_irqsave(adapter->scsi_host->host_lock, processor_flag); in blogic_inthandler()
2910 adapter->adapter_extreset = true; in blogic_inthandler()
2914 adapter->adapter_cmd_complete = true; in blogic_inthandler()
2920 if (FlashPoint_InterruptPending(adapter->cardhandle)) in blogic_inthandler()
2921 switch (FlashPoint_HandleInterrupt(adapter->cardhandle)) { in blogic_inthandler()
2925 adapter->adapter_extreset = true; in blogic_inthandler()
2928 blogic_warn("Internal FlashPoint Error detected - Resetting Host Adapter\n", adapter); in blogic_inthandler()
2929 adapter->adapter_intern_err = true; in blogic_inthandler()
2936 if (adapter->firstccb != NULL) in blogic_inthandler()
2941 if (adapter->adapter_extreset) { in blogic_inthandler()
2942 blogic_warn("Resetting %s due to External SCSI Bus Reset\n", adapter, adapter->full_model); in blogic_inthandler()
2943 blogic_inc_count(&adapter->ext_resets); in blogic_inthandler()
2945 adapter->adapter_extreset = false; in blogic_inthandler()
2946 } else if (adapter->adapter_intern_err) { in blogic_inthandler()
2947 blogic_warn("Resetting %s due to Host Adapter Internal Error\n", adapter, adapter->full_model); in blogic_inthandler()
2948 blogic_inc_count(&adapter->adapter_intern_errors); in blogic_inthandler()
2950 adapter->adapter_intern_err = false; in blogic_inthandler()
2955 spin_unlock_irqrestore(adapter->scsi_host->host_lock, processor_flag); in blogic_inthandler()
2971 next_outbox = adapter->next_outbox; in blogic_write_outbox()
2972 if (next_outbox->action == BLOGIC_OUTBOX_FREE) { in blogic_write_outbox()
2973 ccb->status = BLOGIC_CCB_ACTIVE; in blogic_write_outbox()
2980 next_outbox->ccb = ccb->dma_handle; in blogic_write_outbox()
2981 next_outbox->action = action; in blogic_write_outbox()
2983 if (++next_outbox > adapter->last_outbox) in blogic_write_outbox()
2984 next_outbox = adapter->first_outbox; in blogic_write_outbox()
2985 adapter->next_outbox = next_outbox; in blogic_write_outbox()
2987 adapter->active_cmds[ccb->tgt_id]++; in blogic_write_outbox()
2988 if (ccb->opcode != BLOGIC_BDR) in blogic_write_outbox()
2989 adapter->tgt_stats[ccb->tgt_id].cmds_tried++; in blogic_write_outbox()
3001 (struct blogic_adapter *) SCpnt->device->host->hostdata; in blogic_hostreset()
3003 unsigned int id = SCpnt->device->id; in blogic_hostreset()
3004 struct blogic_tgt_stats *stats = &adapter->tgt_stats[id]; in blogic_hostreset()
3007 spin_lock_irq(SCpnt->device->host->host_lock); in blogic_hostreset()
3009 blogic_inc_count(&stats->adapter_reset_req); in blogic_hostreset()
3012 spin_unlock_irq(SCpnt->device->host->host_lock); in blogic_hostreset()
3025 (struct blogic_adapter *) command->device->host->hostdata; in blogic_qcmd_lck()
3027 &adapter->tgt_flags[command->device->id]; in blogic_qcmd_lck()
3028 struct blogic_tgt_stats *tgt_stats = adapter->tgt_stats; in blogic_qcmd_lck()
3029 unsigned char *cdb = command->cmnd; in blogic_qcmd_lck()
3030 int cdblen = command->cmd_len; in blogic_qcmd_lck()
3031 int tgt_id = command->device->id; in blogic_qcmd_lck()
3032 int lun = command->device->lun; in blogic_qcmd_lck()
3044 if (cdb[0] == REQUEST_SENSE && command->sense_buffer[0] != 0) { in blogic_qcmd_lck()
3045 command->result = DID_OK << 16; in blogic_qcmd_lck()
3051 event that there are none available and memory allocation fails, in blogic_qcmd_lck()
3052 wait 1 second and try again. If that fails, the Host Adapter is in blogic_qcmd_lck()
3058 spin_unlock_irq(adapter->scsi_host->host_lock); in blogic_qcmd_lck()
3060 spin_lock_irq(adapter->scsi_host->host_lock); in blogic_qcmd_lck()
3063 command->result = DID_ERROR << 16; in blogic_qcmd_lck()
3078 ccb->opcode = BLOGIC_INITIATOR_CCB_SG; in blogic_qcmd_lck()
3079 ccb->datalen = count * sizeof(struct blogic_sg_seg); in blogic_qcmd_lck()
3081 ccb->data = (void *)((unsigned int) ccb->dma_handle + in blogic_qcmd_lck()
3082 ((unsigned long) &ccb->sglist - in blogic_qcmd_lck()
3085 ccb->data = ccb->sglist; in blogic_qcmd_lck()
3088 ccb->sglist[i].segbytes = sg_dma_len(sg); in blogic_qcmd_lck()
3089 ccb->sglist[i].segdata = sg_dma_address(sg); in blogic_qcmd_lck()
3092 ccb->opcode = BLOGIC_INITIATOR_CCB; in blogic_qcmd_lck()
3093 ccb->datalen = buflen; in blogic_qcmd_lck()
3094 ccb->data = 0; in blogic_qcmd_lck()
3100 ccb->datadir = BLOGIC_DATAIN_CHECKED; in blogic_qcmd_lck()
3107 ccb->datadir = BLOGIC_DATAOUT_CHECKED; in blogic_qcmd_lck()
3113 ccb->datadir = BLOGIC_UNCHECKED_TX; in blogic_qcmd_lck()
3116 ccb->cdblen = cdblen; in blogic_qcmd_lck()
3117 ccb->adapter_status = 0; in blogic_qcmd_lck()
3118 ccb->tgt_status = 0; in blogic_qcmd_lck()
3119 ccb->tgt_id = tgt_id; in blogic_qcmd_lck()
3120 ccb->lun = lun; in blogic_qcmd_lck()
3121 ccb->tag_enable = false; in blogic_qcmd_lck()
3122 ccb->legacytag_enable = false; in blogic_qcmd_lck()
3135 from non-tagged to tagged commands, so it is necessary to wait in blogic_qcmd_lck()
3139 if (adapter->cmds_since_rst[tgt_id]++ >= BLOGIC_MAX_TAG_DEPTH && in blogic_qcmd_lck()
3140 !tgt_flags->tagq_active && in blogic_qcmd_lck()
3141 adapter->active_cmds[tgt_id] == 0 in blogic_qcmd_lck()
3142 && tgt_flags->tagq_ok && in blogic_qcmd_lck()
3143 (adapter->tagq_ok & (1 << tgt_id))) { in blogic_qcmd_lck()
3144 tgt_flags->tagq_active = true; in blogic_qcmd_lck()
3148 if (tgt_flags->tagq_active) { in blogic_qcmd_lck()
3155 head position continue to arrive without interruption. in blogic_qcmd_lck()
3165 if (adapter->active_cmds[tgt_id] == 0) in blogic_qcmd_lck()
3166 adapter->last_seqpoint[tgt_id] = jiffies; in blogic_qcmd_lck()
3168 adapter->last_seqpoint[tgt_id] + 4 * HZ)) { in blogic_qcmd_lck()
3169 adapter->last_seqpoint[tgt_id] = jiffies; in blogic_qcmd_lck()
3172 if (adapter->ext_lun) { in blogic_qcmd_lck()
3173 ccb->tag_enable = true; in blogic_qcmd_lck()
3174 ccb->queuetag = queuetag; in blogic_qcmd_lck()
3176 ccb->legacytag_enable = true; in blogic_qcmd_lck()
3177 ccb->legacy_tag = queuetag; in blogic_qcmd_lck()
3180 memcpy(ccb->cdb, cdb, cdblen); in blogic_qcmd_lck()
3181 ccb->sense_datalen = SCSI_SENSE_BUFFERSIZE; in blogic_qcmd_lck()
3182 ccb->command = command; in blogic_qcmd_lck()
3183 sense_buf = dma_map_single(&adapter->pci_device->dev, in blogic_qcmd_lck()
3184 command->sense_buffer, ccb->sense_datalen, in blogic_qcmd_lck()
3186 if (dma_mapping_error(&adapter->pci_device->dev, sense_buf)) { in blogic_qcmd_lck()
3192 ccb->sensedata = sense_buf; in blogic_qcmd_lck()
3193 command->scsi_done = comp_cb; in blogic_qcmd_lck()
3201 again. If that fails, the Host Adapter is probably hung in blogic_qcmd_lck()
3206 spin_unlock_irq(adapter->scsi_host->host_lock); in blogic_qcmd_lck()
3207 blogic_warn("Unable to write Outgoing Mailbox - Pausing for 1 second\n", adapter); in blogic_qcmd_lck()
3209 spin_lock_irq(adapter->scsi_host->host_lock); in blogic_qcmd_lck()
3212 blogic_warn("Still unable to write Outgoing Mailbox - Host Adapter Dead?\n", adapter); in blogic_qcmd_lck()
3214 command->result = DID_ERROR << 16; in blogic_qcmd_lck()
3215 command->scsi_done(command); in blogic_qcmd_lck()
3223 ccb->status = BLOGIC_CCB_ACTIVE; in blogic_qcmd_lck()
3224 adapter->active_cmds[tgt_id]++; in blogic_qcmd_lck()
3226 FlashPoint_StartCCB(adapter->cardhandle, ccb); in blogic_qcmd_lck()
3232 if (ccb->status == BLOGIC_CCB_COMPLETE) in blogic_qcmd_lck()
3248 (struct blogic_adapter *) command->device->host->hostdata; in DEF_SCSI_QCMD()
3250 int tgt_id = command->device->id; in DEF_SCSI_QCMD()
3252 blogic_inc_count(&adapter->tgt_stats[tgt_id].aborts_request); in DEF_SCSI_QCMD()
3258 for (ccb = adapter->all_ccbs; ccb != NULL; ccb = ccb->next_all) in DEF_SCSI_QCMD()
3259 if (ccb->command == command) in DEF_SCSI_QCMD()
3262 blogic_warn("Unable to Abort Command to Target %d - No CCB Found\n", adapter, tgt_id); in DEF_SCSI_QCMD()
3264 } else if (ccb->status == BLOGIC_CCB_COMPLETE) { in DEF_SCSI_QCMD()
3265 blogic_warn("Unable to Abort Command to Target %d - CCB Completed\n", adapter, tgt_id); in DEF_SCSI_QCMD()
3267 } else if (ccb->status == BLOGIC_CCB_RESET) { in DEF_SCSI_QCMD()
3268 blogic_warn("Unable to Abort Command to Target %d - CCB Reset\n", adapter, tgt_id); in DEF_SCSI_QCMD()
3275 generate the non-tagged Abort message. Since non-tagged in DEF_SCSI_QCMD()
3278 Abort message is treated as a non-tagged command, it is in DEF_SCSI_QCMD()
3284 if (adapter->tgt_flags[tgt_id].tagq_active && in DEF_SCSI_QCMD()
3285 adapter->fw_ver[0] < '5') { in DEF_SCSI_QCMD()
3286 …blogic_warn("Unable to Abort CCB #%ld to Target %d - Abort Tag Not Supported\n", adapter, ccb->ser… in DEF_SCSI_QCMD()
3291 adapter, ccb->serial, tgt_id); in DEF_SCSI_QCMD()
3292 blogic_inc_count(&adapter->tgt_stats[tgt_id].aborts_tried); in DEF_SCSI_QCMD()
3295 …blogic_warn("Unable to Abort CCB #%ld to Target %d - No Outgoing Mailboxes\n", adapter, ccb->seria… in DEF_SCSI_QCMD()
3304 ccb->serial, tgt_id); in DEF_SCSI_QCMD()
3305 blogic_inc_count(&adapter->tgt_stats[tgt_id].aborts_tried); in DEF_SCSI_QCMD()
3306 FlashPoint_AbortCCB(adapter->cardhandle, ccb); in DEF_SCSI_QCMD()
3312 if (ccb->status == BLOGIC_CCB_COMPLETE) in DEF_SCSI_QCMD()
3337 adapter->full_model);
3345 for (ccb = adapter->all_ccbs; ccb != NULL; ccb = ccb->next_all)
3346 if (ccb->status == BLOGIC_CCB_ACTIVE)
3356 spin_unlock_irq(adapter->scsi_host->host_lock);
3357 blogic_delay(adapter->bus_settle_time);
3358 spin_lock_irq(adapter->scsi_host->host_lock);
3361 for (tgt_id = 0; tgt_id < adapter->maxdev; tgt_id++) {
3362 adapter->last_resettried[tgt_id] = jiffies;
3363 adapter->last_resetdone[tgt_id] = jiffies;
3373 without exceeding the BIOS limitation of 1024 cylinders, Extended Translation
3389 (struct blogic_adapter *) sdev->host->hostdata; in blogic_diskparam()
3393 if (adapter->ext_trans_enable && capacity >= 2 * 1024 * 1024 /* 1 GB in 512 byte sectors */) { in blogic_diskparam()
3395 diskparam->heads = 255; in blogic_diskparam()
3396 diskparam->sectors = 63; in blogic_diskparam()
3398 diskparam->heads = 128; in blogic_diskparam()
3399 diskparam->sectors = 32; in blogic_diskparam()
3402 diskparam->heads = 64; in blogic_diskparam()
3403 diskparam->sectors = 32; in blogic_diskparam()
3405 diskparam->cylinders = (unsigned long) capacity / (diskparam->heads * diskparam->sectors); in blogic_diskparam()
3418 int saved_cyl = diskparam->cylinders, part_no; in blogic_diskparam()
3422 part_end_head = part_entry->end_head; in blogic_diskparam()
3423 part_end_sector = part_entry->end_sector & 0x3F; in blogic_diskparam()
3424 if (part_end_head == 64 - 1) { in blogic_diskparam()
3425 diskparam->heads = 64; in blogic_diskparam()
3426 diskparam->sectors = 32; in blogic_diskparam()
3428 } else if (part_end_head == 128 - 1) { in blogic_diskparam()
3429 diskparam->heads = 128; in blogic_diskparam()
3430 diskparam->sectors = 32; in blogic_diskparam()
3432 } else if (part_end_head == 255 - 1) { in blogic_diskparam()
3433 diskparam->heads = 255; in blogic_diskparam()
3434 diskparam->sectors = 63; in blogic_diskparam()
3440 part_end_head = part1_entry->end_head; in blogic_diskparam()
3441 part_end_sector = part1_entry->end_sector & 0x3F; in blogic_diskparam()
3443 diskparam->cylinders = (unsigned long) capacity / (diskparam->heads * diskparam->sectors); in blogic_diskparam()
3444 if (part_no < 4 && part_end_sector == diskparam->sectors) { in blogic_diskparam()
3445 if (diskparam->cylinders != saved_cyl) in blogic_diskparam()
3446 …n("Adopting Geometry %d/%d from Partition Table\n", adapter, diskparam->heads, diskparam->sectors); in blogic_diskparam()
3449 …th current BusLogic Host Adapter Geometry %d/%d\n", adapter, diskparam->heads, diskparam->sectors); in blogic_diskparam()
3465 (struct blogic_adapter *) shost->hostdata; in blogic_write_info()
3468 tgt_stats = adapter->tgt_stats; in blogic_write_info()
3469 adapter->ext_resets = 0; in blogic_write_info()
3470 adapter->adapter_intern_errors = 0; in blogic_write_info()
3477 struct blogic_adapter *adapter = (struct blogic_adapter *) shost->hostdata; in blogic_show_info()
3481 tgt_stats = adapter->tgt_stats; in blogic_show_info()
3482 seq_write(m, adapter->msgbuf, adapter->msgbuflen); in blogic_show_info()
3485 Currently Allocated CCBs: %d\n", adapter->drvr_qdepth, adapter->alloc_ccbs); in blogic_show_info()
3491 for (tgt = 0; tgt < adapter->maxdev; tgt++) { in blogic_show_info()
3492 struct blogic_tgt_flags *tgt_flags = &adapter->tgt_flags[tgt]; in blogic_show_info()
3493 if (!tgt_flags->tgt_exists) in blogic_show_info()
3495 …seq_printf(m, " %2d %s", tgt, (tgt_flags->tagq_ok ? (tgt_flags->tagq_active ? " Active" : (ada… in blogic_show_info()
3499 …" %3d %3u %9u %9u\n", adapter->qdepth[tgt], adapter->active_cmds[tgt], tgt_stats[tgt]… in blogic_show_info()
3504 for (tgt = 0; tgt < adapter->maxdev; tgt++) { in blogic_show_info()
3505 struct blogic_tgt_flags *tgt_flags = &adapter->tgt_flags[tgt]; in blogic_show_info()
3506 if (!tgt_flags->tgt_exists) in blogic_show_info()
3519 Target Command 0-1KB 1-2KB 2-4KB 4-8KB 8-16KB\n\ in blogic_show_info()
3521 for (tgt = 0; tgt < adapter->maxdev; tgt++) { in blogic_show_info()
3522 struct blogic_tgt_flags *tgt_flags = &adapter->tgt_flags[tgt]; in blogic_show_info()
3523 if (!tgt_flags->tgt_exists) in blogic_show_info()
3535 Target Command 16-32KB 32-64KB 64-128KB 128-256KB 256KB+\n\ in blogic_show_info()
3537 for (tgt = 0; tgt < adapter->maxdev; tgt++) { in blogic_show_info()
3538 struct blogic_tgt_flags *tgt_flags = &adapter->tgt_flags[tgt]; in blogic_show_info()
3539 if (!tgt_flags->tgt_exists) in blogic_show_info()
3557 for (tgt = 0; tgt < adapter->maxdev; tgt++) { in blogic_show_info()
3558 struct blogic_tgt_flags *tgt_flags = &adapter->tgt_flags[tgt]; in blogic_show_info()
3559 if (!tgt_flags->tgt_exists) in blogic_show_info()
3572 seq_printf(m, "\nExternal Host Adapter Resets: %d\n", adapter->ext_resets); in blogic_show_info()
3573 seq_printf(m, "Host Adapter Internal Errors: %d\n", adapter->adapter_intern_errors); in blogic_show_info()
3595 strcpy(&adapter->msgbuf[adapter->msgbuflen], buf); in blogic_msg()
3596 adapter->msgbuflen += len; in blogic_msg()
3600 strcpy(&adapter->msgbuf[adapter->msgbuflen], buf); in blogic_msg()
3601 adapter->msgbuflen += len; in blogic_msg()
3604 printk("%sscsi%d: %s", blogic_msglevelmap[msglevel], adapter->host_no, buf); in blogic_msg()
3609 if (adapter != NULL && adapter->adapter_initd) in blogic_msg()
3610 printk("%sscsi%d: %s", blogic_msglevelmap[msglevel], adapter->host_no, buf); in blogic_msg()
3616 begin = (buf[len - 1] == '\n'); in blogic_msg()
3632 strch += 'a' - 'Z'; in blogic_parse()
3634 keywordch += 'a' - 'Z'; in blogic_parse()
3718 drvr_opts->qdepth[tgt_id] = qdepth; in blogic_parseopts()
3740 drvr_opts->common_qdepth = qdepth; in blogic_parseopts()
3742 drvr_opts->qdepth[tgt_id] = qdepth; in blogic_parseopts()
3746 drvr_opts->tagq_ok = 0x0000; in blogic_parseopts()
3747 drvr_opts->tagq_ok_mask = 0x0000; in blogic_parseopts()
3749 drvr_opts->tagq_ok = 0xFFFF; in blogic_parseopts()
3750 drvr_opts->tagq_ok_mask = 0xFFFF; in blogic_parseopts()
3752 drvr_opts->tagq_ok = 0x0000; in blogic_parseopts()
3753 drvr_opts->tagq_ok_mask = 0xFFFF; in blogic_parseopts()
3761 drvr_opts->tagq_ok |= tgt_bit; in blogic_parseopts()
3762 drvr_opts->tagq_ok_mask |= tgt_bit; in blogic_parseopts()
3765 drvr_opts->tagq_ok &= ~tgt_bit; in blogic_parseopts()
3766 drvr_opts->tagq_ok_mask |= tgt_bit; in blogic_parseopts()
3771 options--; in blogic_parseopts()
3786 drvr_opts->bus_settle_time = bus_settle_time; in blogic_parseopts()
3789 drvr_opts->stop_tgt_inquiry = true; in blogic_parseopts()
3823 if (drvr_opts->qdepth[tgt_id] == 1) { in blogic_parseopts()
3825 drvr_opts->tagq_ok &= ~tgt_bit; in blogic_parseopts()
3826 drvr_opts->tagq_ok_mask |= tgt_bit; in blogic_parseopts()