Lines Matching refs:acb
155 #define DC395x_read8(acb,address) (u8)(inb(acb->io_port_base + (address)))
156 #define DC395x_read16(acb,address) (u16)(inw(acb->io_port_base + (address)))
157 #define DC395x_read32(acb,address) (u32)(inl(acb->io_port_base + (address)))
158 #define DC395x_write8(acb,address,value) outb((value), acb->io_port_base + (address))
159 #define DC395x_write16(acb,address,value) outw((value), acb->io_port_base + (address))
160 #define DC395x_write32(acb,address,value) outl((value), acb->io_port_base + (address))
270 struct AdapterCtlBlk *acb;
343 static void data_out_phase0(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
345 static void data_in_phase0(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
347 static void command_phase0(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
349 static void status_phase0(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
351 static void msgout_phase0(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
353 static void msgin_phase0(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
355 static void data_out_phase1(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
357 static void data_in_phase1(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
359 static void command_phase1(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
361 static void status_phase1(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
363 static void msgout_phase1(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
365 static void msgin_phase1(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
367 static void nop0(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
369 static void nop1(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
371 static void set_basic_config(struct AdapterCtlBlk *acb);
372 static void cleanup_after_transfer(struct AdapterCtlBlk *acb,
374 static void reset_scsi_bus(struct AdapterCtlBlk *acb);
375 static void data_io_transfer(struct AdapterCtlBlk *acb,
377 static void disconnect(struct AdapterCtlBlk *acb);
378 static void reselect(struct AdapterCtlBlk *acb);
379 static u8 start_scsi(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
381 static inline void enable_msgout_abort(struct AdapterCtlBlk *acb,
385 static void doing_srb_done(struct AdapterCtlBlk *acb, u8 did_code,
387 static void scsi_reset_detect(struct AdapterCtlBlk *acb);
388 static void pci_unmap_srb(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb);
389 static void pci_unmap_srb_sense(struct AdapterCtlBlk *acb,
391 static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
393 static void request_sense(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
395 static void set_xfer_rate(struct AdapterCtlBlk *acb,
756 static void waiting_set_timer(struct AdapterCtlBlk *acb, unsigned long to)
758 if (timer_pending(&acb->waiting_timer))
760 if (time_before(jiffies + to, acb->last_reset - HZ / 2))
761 acb->waiting_timer.expires =
762 acb->last_reset - HZ / 2 + 1;
764 acb->waiting_timer.expires = jiffies + to + 1;
765 add_timer(&acb->waiting_timer);
770 static void waiting_process_next(struct AdapterCtlBlk *acb)
776 struct list_head *dcb_list_head = &acb->dcb_list;
778 if (acb->active_dcb
779 || (acb->acb_flag & (RESET_DETECT + RESET_DONE + RESET_DEV)))
782 if (timer_pending(&acb->waiting_timer))
783 del_timer(&acb->waiting_timer);
793 if (dcb == acb->dcb_run_robin) {
800 acb->dcb_run_robin = start;
813 acb->dcb_run_robin = dcb_get_next(dcb_list_head,
814 acb->dcb_run_robin);
825 if (!start_scsi(acb, pos, srb))
828 waiting_set_timer(acb, HZ/50);
839 struct AdapterCtlBlk *acb = from_timer(acb, t, waiting_timer);
841 "waiting_timeout: Queue woken up by timer. acb=%p\n", acb);
842 DC395x_LOCK_IO(acb->scsi_host, flags);
843 waiting_process_next(acb);
844 DC395x_UNLOCK_IO(acb->scsi_host, flags);
849 static struct DeviceCtlBlk *find_dcb(struct AdapterCtlBlk *acb, u8 id, u8 lun)
851 return acb->children[id][lun];
855 /* Send SCSI Request Block (srb) to adapter (acb) */
856 static void send_srb(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb)
861 acb->active_dcb ||
862 (acb->acb_flag & (RESET_DETECT + RESET_DONE + RESET_DEV))) {
864 waiting_process_next(acb);
868 if (!start_scsi(acb, dcb, srb)) {
872 waiting_set_timer(acb, HZ / 50);
948 srb->sg_bus_addr = dma_map_single(&dcb->acb->dev->dev,
982 struct AdapterCtlBlk *acb =
991 if (cmd->device->id >= acb->scsi_host->max_id ||
992 cmd->device->lun >= acb->scsi_host->max_lun ||
998 if (!(acb->dcb_map[cmd->device->id] & (1 << cmd->device->lun))) {
1005 dcb = find_dcb(acb, cmd->device->id, cmd->device->lun);
1017 srb = list_first_entry_or_null(&acb->srb_free_list,
1034 waiting_process_next(acb);
1037 send_srb(acb, srb);
1055 static void dump_register_info(struct AdapterCtlBlk *acb,
1059 struct pci_dev *dev = acb->dev;
1062 dcb = acb->active_dcb;
1080 (acb->active_dcb) ? "" : "not");
1086 DC395x_read16(acb, TRM_S1040_SCSI_STATUS),
1087 DC395x_read8(acb, TRM_S1040_SCSI_FIFOCNT),
1088 DC395x_read8(acb, TRM_S1040_SCSI_SIGNAL),
1089 DC395x_read8(acb, TRM_S1040_SCSI_INTSTATUS),
1090 DC395x_read8(acb, TRM_S1040_SCSI_SYNC),
1091 DC395x_read8(acb, TRM_S1040_SCSI_TARGETID),
1092 DC395x_read8(acb, TRM_S1040_SCSI_IDMSG),
1093 DC395x_read32(acb, TRM_S1040_SCSI_COUNTER),
1094 DC395x_read8(acb, TRM_S1040_SCSI_INTEN),
1095 DC395x_read16(acb, TRM_S1040_SCSI_CONFIG0),
1096 DC395x_read8(acb, TRM_S1040_SCSI_CONFIG2),
1097 DC395x_read8(acb, TRM_S1040_SCSI_COMMAND),
1098 DC395x_read8(acb, TRM_S1040_SCSI_TIMEOUT));
1102 DC395x_read16(acb, TRM_S1040_DMA_COMMAND),
1103 DC395x_read8(acb, TRM_S1040_DMA_FIFOCNT),
1104 DC395x_read8(acb, TRM_S1040_DMA_FIFOSTAT),
1105 DC395x_read8(acb, TRM_S1040_DMA_STATUS),
1106 DC395x_read8(acb, TRM_S1040_DMA_INTEN),
1107 DC395x_read16(acb, TRM_S1040_DMA_CONFIG),
1108 DC395x_read32(acb, TRM_S1040_DMA_XCNT),
1109 DC395x_read32(acb, TRM_S1040_DMA_CXCNT),
1110 DC395x_read32(acb, TRM_S1040_DMA_XHIGHADDR),
1111 DC395x_read32(acb, TRM_S1040_DMA_XLOWADDR));
1114 DC395x_read8(acb, TRM_S1040_GEN_CONTROL),
1115 DC395x_read8(acb, TRM_S1040_GEN_STATUS),
1116 DC395x_read8(acb, TRM_S1040_GEN_TIMER),
1121 static inline void clear_fifo(struct AdapterCtlBlk *acb, char *txt)
1124 u8 lines = DC395x_read8(acb, TRM_S1040_SCSI_SIGNAL);
1125 u8 fifocnt = DC395x_read8(acb, TRM_S1040_SCSI_FIFOCNT);
1131 DC395x_write16(acb, TRM_S1040_SCSI_CONTROL, DO_CLRFIFO);
1135 static void reset_dev_param(struct AdapterCtlBlk *acb)
1138 struct NvRamType *eeprom = &acb->eeprom;
1139 dprintkdbg(DBG_0, "reset_dev_param: acb=%p\n", acb);
1141 list_for_each_entry(dcb, &acb->dcb_list, list) {
1152 || !(acb->config & HCC_WIDE_CARD))
1165 struct AdapterCtlBlk *acb =
1171 if (timer_pending(&acb->waiting_timer))
1172 del_timer(&acb->waiting_timer);
1177 DC395x_write8(acb, TRM_S1040_DMA_INTEN, 0x00);
1178 DC395x_write8(acb, TRM_S1040_SCSI_INTEN, 0x00);
1179 DC395x_write8(acb, TRM_S1040_SCSI_CONTROL, DO_RSTMODULE);
1180 DC395x_write8(acb, TRM_S1040_DMA_CONTROL, DMARESETMODULE);
1182 reset_scsi_bus(acb);
1186 acb->last_reset =
1188 HZ * acb->eeprom.delay_time;
1194 DC395x_write8(acb, TRM_S1040_DMA_CONTROL, CLRXFIFO);
1195 clear_fifo(acb, "eh_bus_reset");
1197 DC395x_read8(acb, TRM_S1040_SCSI_INTSTATUS);
1198 set_basic_config(acb);
1200 reset_dev_param(acb);
1201 doing_srb_done(acb, DID_RESET, cmd, 0);
1202 acb->active_dcb = NULL;
1203 acb->acb_flag = 0; /* RESET_DETECT, RESET_DONE ,RESET_DEV */
1204 waiting_process_next(acb);
1231 struct AdapterCtlBlk *acb =
1238 dcb = find_dcb(acb, cmd->device->id, cmd->device->lun);
1247 pci_unmap_srb_sense(acb, srb);
1248 pci_unmap_srb(acb, srb);
1250 list_add_tail(&srb->list, &acb->srb_free_list);
1267 static void build_sdtr(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
1295 static void build_wdtr(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
1299 (acb->config & HCC_WIDE_CARD)) ? 1 : 0;
1322 static void selto_timer(struct AdapterCtlBlk *acb)
1324 if (timer_pending(&acb->selto_timer))
1326 acb->selto_timer.function = selection_timeout_missed;
1327 acb->selto_timer.data = (unsigned long) acb;
1329 (jiffies + HZ, acb->last_reset + HZ / 2))
1330 acb->selto_timer.expires =
1331 acb->last_reset + HZ / 2 + 1;
1333 acb->selto_timer.expires = jiffies + HZ + 1;
1334 add_timer(&acb->selto_timer);
1341 struct AdapterCtlBlk *acb = (struct AdapterCtlBlk *)ptr;
1344 if (!acb->active_dcb || !acb->active_dcb->active_srb) {
1348 DC395x_LOCK_IO(acb->scsi_host, flags);
1349 srb = acb->active_dcb->active_srb;
1350 disconnect(acb);
1351 DC395x_UNLOCK_IO(acb->scsi_host, flags);
1356 static u8 start_scsi(struct AdapterCtlBlk* acb, struct DeviceCtlBlk* dcb,
1365 srb->tag_number = TAG_NONE; /* acb->tag_max_num: had error read in eeprom */
1367 s_stat = DC395x_read8(acb, TRM_S1040_SCSI_SIGNAL);
1369 s_stat2 = DC395x_read16(acb, TRM_S1040_SCSI_STATUS);
1384 /*selto_timer (acb); */
1388 if (acb->active_dcb) {
1392 acb->active_dcb->active_srb ?
1393 acb->active_dcb->active_srb->cmd : 0);
1396 if (DC395x_read16(acb, TRM_S1040_SCSI_STATUS) & SCSIINTERRUPT) {
1402 if (time_before(jiffies, acb->last_reset - HZ / 2)) {
1408 clear_fifo(acb, "start_scsi");
1409 DC395x_write8(acb, TRM_S1040_SCSI_HOSTID, acb->scsi_host->this_id);
1410 DC395x_write8(acb, TRM_S1040_SCSI_TARGETID, dcb->target_id);
1411 DC395x_write8(acb, TRM_S1040_SCSI_SYNC, dcb->sync_period);
1412 DC395x_write8(acb, TRM_S1040_SCSI_OFFSET, dcb->sync_offset);
1436 build_wdtr(acb, dcb, srb);
1442 build_sdtr(acb, dcb, srb);
1447 build_wdtr(acb, dcb, srb);
1453 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, identify_message);
1474 DC395x_write16(acb, TRM_S1040_SCSI_CONTROL,
1479 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, MSG_SIMPLE_QTAG);
1480 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, tag_number);
1493 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, REQUEST_SENSE);
1494 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, (dcb->target_lun << 5));
1495 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, 0);
1496 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, 0);
1497 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, SCSI_SENSE_BUFFERSIZE);
1498 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, 0);
1502 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, *ptr++);
1505 DC395x_write16(acb, TRM_S1040_SCSI_CONTROL,
1507 if (DC395x_read16(acb, TRM_S1040_SCSI_STATUS) & SCSIINTERRUPT) {
1527 acb->active_dcb = dcb;
1530 DC395x_write16(acb, TRM_S1040_SCSI_CONTROL,
1533 DC395x_write8(acb, TRM_S1040_SCSI_COMMAND, scsicommand);
1540 DC395x_write16 (acb, TRM_S1040_SCSI_CONTROL, DO_SETATN); \
1545 static inline void enable_msgout_abort(struct AdapterCtlBlk *acb,
1560 * @acb: a pointer to the adpter control block
1563 static void dc395x_handle_interrupt(struct AdapterCtlBlk *acb,
1574 DC395x_LOCK_IO(acb->scsi_host, flags);
1577 scsi_intstatus = DC395x_read8(acb, TRM_S1040_SCSI_INTSTATUS);
1587 if (timer_pending(&acb->selto_timer))
1588 del_timer(&acb->selto_timer);
1591 disconnect(acb); /* bus free interrupt */
1595 reselect(acb);
1603 scsi_reset_detect(acb);
1607 dcb = acb->active_dcb;
1617 enable_msgout_abort(acb, srb);
1637 dc395x_statev(acb, srb, &scsi_status);
1660 dc395x_statev(acb, srb, &scsi_status);
1663 DC395x_UNLOCK_IO(acb->scsi_host, flags);
1669 struct AdapterCtlBlk *acb = dev_id;
1677 scsi_status = DC395x_read16(acb, TRM_S1040_SCSI_STATUS);
1678 dma_status = DC395x_read8(acb, TRM_S1040_DMA_STATUS);
1681 dc395x_handle_interrupt(acb, scsi_status);
1689 if (acb->active_dcb) {
1690 acb->active_dcb-> flag |= ABORT_DEV_;
1691 if (acb->active_dcb->active_srb)
1692 enable_msgout_abort(acb, acb->active_dcb->active_srb);
1694 DC395x_write8(acb, TRM_S1040_DMA_CONTROL, ABORTXFER | CLRXFIFO);
1697 acb = NULL;
1706 static void msgout_phase0(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
1713 DC395x_write16(acb, TRM_S1040_SCSI_CONTROL, DO_DATALATCH); /* it's important for atn stop */
1718 static void msgout_phase1(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
1725 clear_fifo(acb, "msgout_phase1");
1735 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, MSG_NOP);
1736 DC395x_write16(acb, TRM_S1040_SCSI_CONTROL, DO_DATALATCH); /* it's important for atn stop */
1737 DC395x_write8(acb, TRM_S1040_SCSI_COMMAND, SCMD_FIFO_OUT);
1742 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, *ptr++);
1747 DC395x_write8(acb, TRM_S1040_SCSI_COMMAND, SCMD_FIFO_OUT);
1751 static void command_phase0(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
1755 DC395x_write16(acb, TRM_S1040_SCSI_CONTROL, DO_DATALATCH);
1759 static void command_phase1(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
1767 clear_fifo(acb, "command_phase1");
1768 DC395x_write16(acb, TRM_S1040_SCSI_CONTROL, DO_CLRATN);
1772 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, *ptr);
1776 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, REQUEST_SENSE);
1777 dcb = acb->active_dcb;
1779 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, (dcb->target_lun << 5));
1780 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, 0);
1781 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, 0);
1782 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, SCSI_SENSE_BUFFERSIZE);
1783 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, 0);
1787 DC395x_write16(acb, TRM_S1040_SCSI_CONTROL, DO_DATALATCH);
1789 DC395x_write8(acb, TRM_S1040_SCSI_COMMAND, SCMD_FIFO_OUT);
1839 dma_sync_single_for_cpu(&srb->dcb->acb->dev->dev,
1845 dma_sync_single_for_device(&srb->dcb->acb->dev->dev,
1876 static void cleanup_after_transfer(struct AdapterCtlBlk *acb,
1880 if (DC395x_read16(acb, TRM_S1040_DMA_COMMAND) & 0x0001) { /* read */
1881 if (!(DC395x_read8(acb, TRM_S1040_SCSI_FIFOCNT) & 0x40))
1882 clear_fifo(acb, "cleanup/in");
1883 if (!(DC395x_read8(acb, TRM_S1040_DMA_FIFOSTAT) & 0x80))
1884 DC395x_write8(acb, TRM_S1040_DMA_CONTROL, CLRXFIFO);
1886 if (!(DC395x_read8(acb, TRM_S1040_DMA_FIFOSTAT) & 0x80))
1887 DC395x_write8(acb, TRM_S1040_DMA_CONTROL, CLRXFIFO);
1888 if (!(DC395x_read8(acb, TRM_S1040_SCSI_FIFOCNT) & 0x40))
1889 clear_fifo(acb, "cleanup/out");
1891 DC395x_write16(acb, TRM_S1040_SCSI_CONTROL, DO_DATALATCH);
1902 static void data_out_phase0(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
1926 DC395x_read8(acb, TRM_S1040_DMA_FIFOCNT),
1927 DC395x_read8(acb, TRM_S1040_DMA_FIFOSTAT),
1928 DC395x_read8(acb, TRM_S1040_SCSI_FIFOCNT),
1929 DC395x_read32(acb, TRM_S1040_SCSI_COUNTER), scsi_status,
1931 DC395x_write8(acb, TRM_S1040_DMA_CONTROL, STOPDMAXFER | CLRXFIFO);
1949 (u32)(DC395x_read8(acb, TRM_S1040_SCSI_FIFOCNT) &
1957 DC395x_read8(acb, TRM_S1040_SCSI_FIFOCNT),
1959 DC395x_read8(acb, TRM_S1040_SCSI_FIFOCNT),
1960 DC395x_read32(acb, TRM_S1040_SCSI_COUNTER),
1961 DC395x_read8(acb, TRM_S1040_DMA_FIFOCNT),
1962 DC395x_read8(acb, TRM_S1040_DMA_FIFOSTAT),
1963 DC395x_read32(acb, TRM_S1040_DMA_CXCNT));
1976 DC395x_read32(acb, TRM_S1040_SCSI_COUNTER);
1979 /*clear_fifo(acb, "DOP1"); */
2030 cleanup_after_transfer(acb, srb);
2035 static void data_out_phase1(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
2040 clear_fifo(acb, "data_out_phase1");
2042 data_io_transfer(acb, srb, XFERDATAOUT);
2045 static void data_in_phase0(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
2081 if (!(DC395x_read8(acb, TRM_S1040_DMA_FIFOSTAT) & 0x80)) {
2090 (DC395x_read16(acb, TRM_S1040_DMA_FIFOSTAT) &
2102 DC395x_read8(acb, TRM_S1040_DMA_FIFOCNT),
2103 DC395x_read8(acb, TRM_S1040_DMA_FIFOSTAT));
2106 sc = DC395x_read32(acb, TRM_S1040_SCSI_COUNTER);
2107 fc = DC395x_read8(acb, TRM_S1040_SCSI_FIFOCNT);
2119 DC395x_read8(acb, TRM_S1040_DMA_FIFOSTAT),
2120 DC395x_read32(acb, TRM_S1040_DMA_CXCNT),
2137 DC395x_write8(acb, TRM_S1040_SCSI_CONFIG2,
2156 byte = DC395x_read8(acb, TRM_S1040_SCSI_FIFO);
2167 fc = DC395x_read8(acb, TRM_S1040_SCSI_FIFOCNT);
2180 u8 byte = DC395x_read8(acb, TRM_S1040_SCSI_FIFO);
2188 DC395x_write8(acb, TRM_S1040_SCSI_CONFIG2, 0);
2212 (u32)(DC395x_read8(acb, TRM_S1040_SCSI_FIFOCNT) &
2231 DC395x_read8(acb, TRM_S1040_DMA_STATUS);
2253 cleanup_after_transfer(acb, srb);
2258 static void data_in_phase1(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
2263 data_io_transfer(acb, srb, XFERDATAIN);
2267 static void data_io_transfer(struct AdapterCtlBlk *acb,
2277 if (srb == acb->tmp_srb)
2285 u8 dma_status = DC395x_read8(acb, TRM_S1040_DMA_STATUS);
2293 dump_register_info(acb, dcb, srb);
2294 DC395x_write8(acb, TRM_S1040_DMA_CONTROL, CLRXFIFO);
2296 /* clear_fifo(acb, "IO"); */
2302 DC395x_write32(acb, TRM_S1040_DMA_XHIGHADDR, 0);
2305 DC395x_write32(acb, TRM_S1040_DMA_XLOWADDR,
2310 DC395x_write32(acb, TRM_S1040_DMA_XCNT,
2315 DC395x_write32(acb, TRM_S1040_DMA_XLOWADDR,
2317 DC395x_write32(acb, TRM_S1040_DMA_XCNT,
2321 DC395x_write32(acb, TRM_S1040_SCSI_COUNTER,
2323 DC395x_write16(acb, TRM_S1040_SCSI_CONTROL, DO_DATALATCH); /* it's important for atn stop */
2325 DC395x_write8(acb, TRM_S1040_SCSI_COMMAND,
2327 DC395x_write16(acb, TRM_S1040_DMA_COMMAND, io_dir);
2329 DC395x_write16(acb, TRM_S1040_DMA_COMMAND, io_dir);
2330 DC395x_write8(acb, TRM_S1040_SCSI_COMMAND,
2343 DC395x_write32(acb, TRM_S1040_SCSI_COUNTER,
2345 DC395x_write16(acb, TRM_S1040_SCSI_CONTROL, DO_DATALATCH); /* it's important for atn stop */
2347 DC395x_write8(acb, TRM_S1040_SCSI_COMMAND,
2354 DC395x_write8(acb, TRM_S1040_SCSI_CONFIG2,
2375 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, *virt++);
2385 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, 0);
2389 DC395x_write8(acb, TRM_S1040_SCSI_CONFIG2, 0);
2391 /*DC395x_write32(acb, TRM_S1040_SCSI_COUNTER, ln); */
2394 DC395x_write8(acb, TRM_S1040_SCSI_COMMAND,
2411 DC395x_write32(acb, TRM_S1040_SCSI_COUNTER, 2);
2412 DC395x_write8(acb, TRM_S1040_SCSI_CONFIG2,
2415 data = DC395x_read8(acb, TRM_S1040_SCSI_FIFO);
2416 data2 = DC395x_read8(acb, TRM_S1040_SCSI_FIFO);
2421 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, 'K');
2422 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, 'G');
2424 DC395x_write8(acb, TRM_S1040_SCSI_CONFIG2, 0);
2426 DC395x_write32(acb, TRM_S1040_SCSI_COUNTER, 1);
2430 data = DC395x_read8(acb, TRM_S1040_SCSI_FIFO);
2432 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, 'K');
2435 DC395x_write16(acb, TRM_S1040_SCSI_CONTROL, DO_DATALATCH); /* it's important for atn stop */
2438 DC395x_write8(acb, TRM_S1040_SCSI_COMMAND, bval);
2443 static void status_phase0(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
2448 srb->target_status = DC395x_read8(acb, TRM_S1040_SCSI_FIFO);
2449 srb->end_message = DC395x_read8(acb, TRM_S1040_SCSI_FIFO); /* get message */
2452 DC395x_write16(acb, TRM_S1040_SCSI_CONTROL, DO_DATALATCH); /* it's important for atn stop */
2453 DC395x_write8(acb, TRM_S1040_SCSI_COMMAND, SCMD_MSGACCEPT);
2457 static void status_phase1(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
2463 DC395x_write16(acb, TRM_S1040_SCSI_CONTROL, DO_DATALATCH); /* it's important for atn stop */
2464 DC395x_write8(acb, TRM_S1040_SCSI_COMMAND, SCMD_COMP);
2483 static inline void msgin_reject(struct AdapterCtlBlk *acb,
2497 static struct ScsiReqBlk *msgin_qtag(struct AdapterCtlBlk *acb,
2525 enable_msgout_abort(acb, srb);
2531 memcpy(srb->msgin_buf, dcb->active_srb->msgin_buf, acb->msg_len);
2539 srb = acb->tmp_srb;
2550 static inline void reprogram_regs(struct AdapterCtlBlk *acb,
2553 DC395x_write8(acb, TRM_S1040_SCSI_TARGETID, dcb->target_id);
2554 DC395x_write8(acb, TRM_S1040_SCSI_SYNC, dcb->sync_period);
2555 DC395x_write8(acb, TRM_S1040_SCSI_OFFSET, dcb->sync_offset);
2556 set_xfer_rate(acb, dcb);
2561 static void msgin_set_async(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb)
2573 reprogram_regs(acb, dcb);
2576 build_wdtr(acb, dcb, srb);
2584 static void msgin_set_sync(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb)
2645 build_wdtr(acb, dcb, srb);
2653 reprogram_regs(acb, dcb);
2657 static inline void msgin_set_nowide(struct AdapterCtlBlk *acb,
2667 reprogram_regs(acb, dcb);
2670 build_sdtr(acb, dcb, srb);
2676 static void msgin_set_wide(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb)
2680 && acb->config & HCC_WIDE_CARD) ? 1 : 0;
2706 reprogram_regs(acb, dcb);
2709 build_sdtr(acb, dcb, srb);
2728 static void msgin_phase0(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
2731 struct DeviceCtlBlk *dcb = acb->active_dcb;
2734 srb->msgin_buf[acb->msg_len++] = DC395x_read8(acb, TRM_S1040_SCSI_FIFO);
2735 if (msgin_completed(srb->msgin_buf, acb->msg_len)) {
2746 msgin_qtag(acb, dcb,
2751 DC395x_write16(acb, TRM_S1040_SCSI_CONTROL,
2755 msgin_set_async(acb, srb);
2760 msgin_set_nowide(acb, srb);
2763 enable_msgout_abort(acb, srb);
2771 msgin_set_sync(acb, srb);
2778 msgin_set_wide(acb, srb);
2781 msgin_reject(acb, srb);
2813 enable_msgout_abort(acb, srb);
2826 msgin_reject(acb, srb);
2831 acb->msg_len = 0;
2834 DC395x_write16(acb, TRM_S1040_SCSI_CONTROL, DO_DATALATCH); /* it's important ... you know! */
2835 DC395x_write8(acb, TRM_S1040_SCSI_COMMAND, SCMD_MSGACCEPT);
2839 static void msgin_phase1(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
2843 clear_fifo(acb, "msgin_phase1");
2844 DC395x_write32(acb, TRM_S1040_SCSI_COUNTER, 1);
2849 DC395x_write16(acb, TRM_S1040_SCSI_CONTROL, DO_DATALATCH); /* it's important for atn stop */
2851 DC395x_write8(acb, TRM_S1040_SCSI_COMMAND, SCMD_FIFO_IN);
2855 static void nop0(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
2861 static void nop1(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
2867 static void set_xfer_rate(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb)
2875 if (acb->scan_devices) {
2880 list_for_each_entry(i, &acb->dcb_list, list)
2890 static void disconnect(struct AdapterCtlBlk *acb)
2892 struct DeviceCtlBlk *dcb = acb->active_dcb;
2899 acb->last_reset =
2901 HZ * acb->eeprom.delay_time;
2902 clear_fifo(acb, "disconnectEx");
2903 DC395x_write16(acb, TRM_S1040_SCSI_CONTROL, DO_HWRESELECT);
2907 acb->active_dcb = NULL;
2911 clear_fifo(acb, "disconnect");
2912 DC395x_write16(acb, TRM_S1040_SCSI_CONTROL, DO_HWRESELECT);
2918 waiting_process_next(acb);
2921 acb->last_reset = jiffies + HZ / 2 + 1;
2923 doing_srb_done(acb, DID_ABORT, srb->cmd, 1);
2924 waiting_process_next(acb);
2948 || acb->scan_devices) {
2958 waiting_set_timer(acb, HZ / 20);
2961 u8 bval = DC395x_read8(acb, TRM_S1040_SCSI_SIGNAL);
2971 waiting_process_next(acb);
2980 srb_done(acb, dcb, srb);
2986 static void reselect(struct AdapterCtlBlk *acb)
2988 struct DeviceCtlBlk *dcb = acb->active_dcb;
2993 dprintkdbg(DBG_0, "reselect: acb=%p\n", acb);
2995 clear_fifo(acb, "reselect");
2996 /*DC395x_write16(acb, TRM_S1040_SCSI_CONTROL, DO_HWRESELECT | DO_DATALATCH); */
2998 rsel_tar_lun_id = DC395x_read16(acb, TRM_S1040_SCSI_TARGETID);
3004 DC395x_write16(acb, TRM_S1040_SCSI_CONTROL, DO_DATALATCH); /* it's important for atn stop */
3008 if (!acb->scan_devices) {
3013 DC395x_read16(acb, TRM_S1040_SCSI_STATUS));
3020 waiting_set_timer(acb, HZ / 20);
3031 dcb = find_dcb(acb, id, lun);
3035 DC395x_write16(acb, TRM_S1040_SCSI_CONTROL, DO_DATALATCH); /* it's important for atn stop */
3038 acb->active_dcb = dcb;
3046 srb = acb->tmp_srb;
3058 srb = acb->tmp_srb;
3061 enable_msgout_abort(acb, srb);
3065 enable_msgout_abort(acb, srb);
3075 DC395x_write8(acb, TRM_S1040_SCSI_HOSTID, acb->scsi_host->this_id); /* host ID */
3076 DC395x_write8(acb, TRM_S1040_SCSI_TARGETID, dcb->target_id); /* target ID */
3077 DC395x_write8(acb, TRM_S1040_SCSI_OFFSET, dcb->sync_offset); /* offset */
3078 DC395x_write8(acb, TRM_S1040_SCSI_SYNC, dcb->sync_period); /* sync period, wide */
3079 DC395x_write16(acb, TRM_S1040_SCSI_CONTROL, DO_DATALATCH); /* it's important for atn stop */
3081 DC395x_write8(acb, TRM_S1040_SCSI_COMMAND, SCMD_MSGACCEPT);
3113 dcb->acb->tag_max_num;
3122 static void add_dev(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
3133 static void pci_unmap_srb(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb)
3142 dma_unmap_single(&acb->dev->dev, srb->sg_bus_addr, SEGMENTX_LEN,
3153 static void pci_unmap_srb_sense(struct AdapterCtlBlk *acb,
3161 dma_unmap_single(&acb->dev->dev, srb->segment_x[0].address,
3176 static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
3192 pci_unmap_srb_sense(acb, srb);
3205 dcb->target_lun, status, acb->scan_devices);
3211 dcb->target_lun, status, acb->scan_devices);
3217 dcb->target_lun, status, acb->scan_devices);
3223 dcb->target_lun, status, acb->scan_devices);
3229 dcb->target_lun, status, acb->scan_devices);
3271 request_sense(acb, dcb, srb);
3282 waiting_set_timer(acb, HZ / 20);
3321 pci_unmap_srb(acb, srb);
3344 add_dev(acb, dcb, ptr);
3366 if (srb != acb->tmp_srb) {
3370 list_move_tail(&srb->list, &acb->srb_free_list);
3376 waiting_process_next(acb);
3381 static void doing_srb_done(struct AdapterCtlBlk *acb, u8 did_flag,
3387 list_for_each_entry(dcb, &acb->dcb_list, list) {
3403 list_add_tail(&srb->list, &acb->srb_free_list);
3405 pci_unmap_srb_sense(acb, srb);
3406 pci_unmap_srb(acb, srb);
3431 list_move_tail(&srb->list, &acb->srb_free_list);
3433 pci_unmap_srb_sense(acb, srb);
3434 pci_unmap_srb(acb, srb);
3451 static void reset_scsi_bus(struct AdapterCtlBlk *acb)
3453 dprintkdbg(DBG_0, "reset_scsi_bus: acb=%p\n", acb);
3454 acb->acb_flag |= RESET_DEV; /* RESET_DETECT, RESET_DONE, RESET_DEV */
3455 DC395x_write16(acb, TRM_S1040_SCSI_CONTROL, DO_RSTSCSI);
3457 while (!(DC395x_read8(acb, TRM_S1040_SCSI_INTSTATUS) & INT_SCSIRESET))
3462 static void set_basic_config(struct AdapterCtlBlk *acb)
3466 DC395x_write8(acb, TRM_S1040_SCSI_TIMEOUT, acb->sel_timeout);
3467 if (acb->config & HCC_PARITY)
3472 DC395x_write8(acb, TRM_S1040_SCSI_CONFIG0, bval);
3475 DC395x_write8(acb, TRM_S1040_SCSI_CONFIG1, 0x03); /* was 0x13: default */
3477 DC395x_write8(acb, TRM_S1040_SCSI_HOSTID, acb->scsi_host->this_id);
3479 DC395x_write8(acb, TRM_S1040_SCSI_OFFSET, 0x00);
3481 wval = DC395x_read16(acb, TRM_S1040_GEN_CONTROL) & 0x7F;
3482 DC395x_write16(acb, TRM_S1040_GEN_CONTROL, wval);
3484 wval = DC395x_read16(acb, TRM_S1040_DMA_CONFIG) & ~DMA_FIFO_CTRL;
3487 DC395x_write16(acb, TRM_S1040_DMA_CONFIG, wval);
3489 DC395x_read8(acb, TRM_S1040_SCSI_INTSTATUS);
3491 DC395x_write8(acb, TRM_S1040_SCSI_INTEN, 0x7F);
3492 DC395x_write8(acb, TRM_S1040_DMA_INTEN, EN_SCSIINTR | EN_DMAXFERERROR
3498 static void scsi_reset_detect(struct AdapterCtlBlk *acb)
3500 dprintkl(KERN_INFO, "scsi_reset_detect: acb=%p\n", acb);
3502 if (timer_pending(&acb->waiting_timer))
3503 del_timer(&acb->waiting_timer);
3505 DC395x_write8(acb, TRM_S1040_SCSI_CONTROL, DO_RSTMODULE);
3506 DC395x_write8(acb, TRM_S1040_DMA_CONTROL, DMARESETMODULE);
3507 /*DC395x_write8(acb, TRM_S1040_DMA_CONTROL,STOPDMAXFER); */
3510 acb->last_reset =
3512 HZ * acb->eeprom.delay_time;
3514 clear_fifo(acb, "scsi_reset_detect");
3515 set_basic_config(acb);
3517 /*DC395x_write16(acb, TRM_S1040_SCSI_CONTROL, DO_HWRESELECT); */
3519 if (acb->acb_flag & RESET_DEV) { /* RESET_DETECT, RESET_DONE, RESET_DEV */
3520 acb->acb_flag |= RESET_DONE;
3522 acb->acb_flag |= RESET_DETECT;
3523 reset_dev_param(acb);
3524 doing_srb_done(acb, DID_RESET, NULL, 1);
3525 /*DC395x_RecoverSRB( acb ); */
3526 acb->active_dcb = NULL;
3527 acb->acb_flag = 0;
3528 waiting_process_next(acb);
3533 static void request_sense(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
3557 srb->segment_x[0].address = dma_map_single(&acb->dev->dev,
3566 if (start_scsi(acb, dcb, srb)) { /* Should only happen, if sb. else grabs the bus */
3571 waiting_set_timer(acb, HZ / 100);
3583 * @acb: The adapter to obtain configuration information from.
3589 static struct DeviceCtlBlk *device_alloc(struct AdapterCtlBlk *acb,
3592 struct NvRamType *eeprom = &acb->eeprom;
3600 dcb->acb = NULL;
3624 && (acb->config & HCC_WIDE_CARD))
3636 list_for_each_entry(iter, &acb->dcb_list, list)
3664 * @acb: The adapter device to be updated
3667 static void adapter_add_device(struct AdapterCtlBlk *acb,
3671 dcb->acb = acb;
3674 if (list_empty(&acb->dcb_list))
3675 acb->dcb_run_robin = dcb;
3678 list_add_tail(&dcb->list, &acb->dcb_list);
3681 acb->dcb_map[dcb->target_id] |= (1 << dcb->target_lun);
3682 acb->children[dcb->target_id][dcb->target_lun] = dcb;
3692 * @acb: The adapter device to be updated
3695 static void adapter_remove_device(struct AdapterCtlBlk *acb,
3704 if (acb->active_dcb == dcb)
3705 acb->active_dcb = NULL;
3706 if (acb->dcb_run_robin == dcb)
3707 acb->dcb_run_robin = dcb_get_next(&acb->dcb_list, dcb);
3710 list_for_each_entry_safe(i, tmp, &acb->dcb_list, list)
3717 acb->dcb_map[dcb->target_id] &= ~(1 << dcb->target_lun);
3718 acb->children[dcb->target_id][dcb->target_lun] = NULL;
3719 dcb->acb = NULL;
3727 * @acb: The adapter device to be updated
3730 static void adapter_remove_and_free_device(struct AdapterCtlBlk *acb,
3740 adapter_remove_device(acb, dcb);
3749 * @acb: The adapter from which all devices should be removed.
3751 static void adapter_remove_and_free_all_devices(struct AdapterCtlBlk* acb)
3756 list_size(&acb->dcb_list));
3758 list_for_each_entry_safe(dcb, tmp, &acb->dcb_list, list)
3759 adapter_remove_and_free_device(acb, dcb);
3772 struct AdapterCtlBlk *acb = (struct AdapterCtlBlk *)scsi_device->host->hostdata;
3775 dcb = device_alloc(acb, scsi_device->id, scsi_device->lun);
3778 adapter_add_device(acb, dcb);
3792 struct AdapterCtlBlk *acb = (struct AdapterCtlBlk *)scsi_device->host->hostdata;
3793 struct DeviceCtlBlk *dcb = find_dcb(acb, scsi_device->id, scsi_device->lun);
3795 adapter_remove_and_free_device(acb, dcb);
4117 static void adapter_sg_tables_free(struct AdapterCtlBlk *acb)
4123 kfree(acb->srb_array[i].segment_x);
4130 static int adapter_sg_tables_alloc(struct AdapterCtlBlk *acb)
4141 acb->srb_array[i].segment_x = NULL;
4147 adapter_sg_tables_free(acb);
4154 acb->srb_array[srb_idx++].segment_x =
4158 acb->srb.segment_x =
4174 * @acb: The adapter to print the information for.
4176 static void adapter_print_config(struct AdapterCtlBlk *acb)
4180 bval = DC395x_read8(acb, TRM_S1040_GEN_STATUS);
4192 bval = DC395x_read8(acb, TRM_S1040_GEN_CONTROL);
4218 * @acb: The adapter to initialize.
4220 static void adapter_init_params(struct AdapterCtlBlk *acb)
4222 struct NvRamType *eeprom = &acb->eeprom;
4225 /* NOTE: acb->scsi_host is set at scsi_host/acb creation time */
4226 /* NOTE: acb->io_port_base is set at port registration time */
4227 /* NOTE: acb->io_port_len is set at port registration time */
4229 INIT_LIST_HEAD(&acb->dcb_list);
4230 acb->dcb_run_robin = NULL;
4231 acb->active_dcb = NULL;
4233 INIT_LIST_HEAD(&acb->srb_free_list);
4235 acb->tmp_srb = &acb->srb;
4236 timer_setup(&acb->waiting_timer, waiting_timeout, 0);
4237 timer_setup(&acb->selto_timer, NULL, 0);
4239 acb->srb_count = DC395x_MAX_SRB_CNT;
4241 acb->sel_timeout = DC395x_SEL_TIMEOUT; /* timeout=250ms */
4242 /* NOTE: acb->irq_level is set at IRQ registration time */
4244 acb->tag_max_num = 1 << eeprom->max_tag;
4245 if (acb->tag_max_num > 30)
4246 acb->tag_max_num = 30;
4248 acb->acb_flag = 0; /* RESET_DETECT, RESET_DONE, RESET_DEV */
4249 acb->gmode2 = eeprom->channel_cfg;
4250 acb->config = 0; /* NOTE: actually set in adapter_init_chip */
4253 acb->lun_chk = 1;
4254 acb->scan_devices = 1;
4256 acb->scsi_host->this_id = eeprom->scsi_id;
4257 acb->hostid_bit = (1 << acb->scsi_host->this_id);
4260 acb->dcb_map[i] = 0;
4262 acb->msg_len = 0;
4265 for (i = 0; i < acb->srb_count - 1; i++)
4266 list_add_tail(&acb->srb_array[i].list, &acb->srb_free_list);
4284 struct AdapterCtlBlk *acb = (struct AdapterCtlBlk *)host->hostdata;
4285 struct NvRamType *eeprom = &acb->eeprom;
4291 host->io_port = acb->io_port_base;
4292 host->n_io_port = acb->io_port_len;
4294 host->unique_id = acb->io_port_base;
4295 host->irq = acb->irq_level;
4296 acb->last_reset = jiffies;
4316 * @acb: The adapter which we are to init.
4318 static void adapter_init_chip(struct AdapterCtlBlk *acb)
4320 struct NvRamType *eeprom = &acb->eeprom;
4323 DC395x_write8(acb, TRM_S1040_DMA_INTEN, 0x00);
4324 DC395x_write8(acb, TRM_S1040_SCSI_INTEN, 0x00);
4327 DC395x_write16(acb, TRM_S1040_SCSI_CONTROL, DO_RSTMODULE);
4330 DC395x_write8(acb, TRM_S1040_DMA_CONTROL, DMARESETMODULE);
4334 acb->config = HCC_AUTOTERM | HCC_PARITY;
4335 if (DC395x_read8(acb, TRM_S1040_GEN_STATUS) & WIDESCSI)
4336 acb->config |= HCC_WIDE_CARD;
4339 acb->config |= HCC_SCSI_RESET;
4341 if (acb->config & HCC_SCSI_RESET) {
4343 DC395x_write8(acb, TRM_S1040_SCSI_CONTROL, DO_RSTSCSI);
4345 /*while (!( DC395x_read8(acb, TRM_S1040_SCSI_INTSTATUS) & INT_SCSIRESET )); */
4349 acb->last_reset =
4351 HZ * acb->eeprom.delay_time;
4371 static int adapter_init(struct AdapterCtlBlk *acb, unsigned long io_port,
4379 acb->io_port_base = io_port;
4380 acb->io_port_len = io_port_len;
4382 if (request_irq(irq, dc395x_interrupt, IRQF_SHARED, DC395X_NAME, acb)) {
4388 acb->irq_level = irq;
4391 check_eeprom(&acb->eeprom, io_port);
4392 print_eeprom_settings(&acb->eeprom);
4395 adapter_init_params(acb);
4398 adapter_print_config(acb);
4400 if (adapter_sg_tables_alloc(acb)) {
4404 adapter_init_scsi_host(acb->scsi_host);
4405 adapter_init_chip(acb);
4406 set_basic_config(acb);
4409 "adapter_init: acb=%p, pdcb_map=%p psrb_array=%p "
4410 "size{acb=0x%04x dcb=0x%04x srb=0x%04x}\n",
4411 acb, acb->dcb_map, acb->srb_array, sizeof(struct AdapterCtlBlk),
4416 if (acb->irq_level)
4417 free_irq(acb->irq_level, acb);
4418 if (acb->io_port_base)
4419 release_region(acb->io_port_base, acb->io_port_len);
4420 adapter_sg_tables_free(acb);
4431 * @acb: The adapter which we are to shutdown.
4433 static void adapter_uninit_chip(struct AdapterCtlBlk *acb)
4436 DC395x_write8(acb, TRM_S1040_DMA_INTEN, 0);
4437 DC395x_write8(acb, TRM_S1040_SCSI_INTEN, 0);
4440 if (acb->config & HCC_SCSI_RESET)
4441 reset_scsi_bus(acb);
4444 DC395x_read8(acb, TRM_S1040_SCSI_INTSTATUS);
4454 * @acb: The adapter which we are to un-initialize.
4456 static void adapter_uninit(struct AdapterCtlBlk *acb)
4459 DC395x_LOCK_IO(acb->scsi_host, flags);
4462 if (timer_pending(&acb->waiting_timer))
4463 del_timer(&acb->waiting_timer);
4464 if (timer_pending(&acb->selto_timer))
4465 del_timer(&acb->selto_timer);
4467 adapter_uninit_chip(acb);
4468 adapter_remove_and_free_all_devices(acb);
4469 DC395x_UNLOCK_IO(acb->scsi_host, flags);
4471 if (acb->irq_level)
4472 free_irq(acb->irq_level, acb);
4473 if (acb->io_port_base)
4474 release_region(acb->io_port_base, acb->io_port_len);
4476 adapter_sg_tables_free(acb);
4487 struct AdapterCtlBlk *acb = (struct AdapterCtlBlk *)host->hostdata;
4496 DC395x_LOCK_IO(acb->scsi_host, flags);
4500 (acb->config & HCC_WIDE_CARD) ? "Wide" : "");
4501 seq_printf(m, "io_port_base 0x%04lx, ", acb->io_port_base);
4502 seq_printf(m, "irq_level 0x%04x, ", acb->irq_level);
4503 seq_printf(m, " SelTimeout %ims\n", (1638 * acb->sel_timeout) / 1000);
4508 seq_printf(m, "tag_max_num %i", acb->tag_max_num);
4509 /*seq_printf(m, ", DMA_Status %i\n", DC395x_read8(acb, TRM_S1040_DMA_STATUS)); */
4511 DC395x_read8(acb, TRM_S1040_SCSI_CONFIG1));
4512 seq_printf(m, ", DelayReset %is\n", acb->eeprom.delay_time);
4515 seq_printf(m, "Nr of DCBs: %i\n", list_size(&acb->dcb_list));
4516 seq_printf(m, "Map of attached LUNs: %8ph\n", &acb->dcb_map[0]);
4517 seq_printf(m, " %8ph\n", &acb->dcb_map[8]);
4523 list_for_each_entry(dcb, &acb->dcb_list, list) {
4553 if (timer_pending(&acb->waiting_timer))
4558 list_for_each_entry(dcb, &acb->dcb_list, list) {
4577 seq_printf(m, "DCB list for ACB %p:\n", acb);
4578 list_for_each_entry(dcb, &acb->dcb_list, list) {
4584 DC395x_UNLOCK_IO(acb->scsi_host, flags);
4638 struct AdapterCtlBlk *acb = NULL;
4663 acb = (struct AdapterCtlBlk*)scsi_host->hostdata;
4664 acb->scsi_host = scsi_host;
4665 acb->dev = dev;
4668 if (adapter_init(acb, io_port_base, io_port_len, irq)) {
4670 acb = NULL;
4687 if (acb != NULL)
4688 adapter_uninit(acb);
4705 struct AdapterCtlBlk *acb = (struct AdapterCtlBlk *)(scsi_host->hostdata);
4707 dprintkdbg(DBG_0, "dc395x_remove_one: acb=%p\n", acb);
4710 adapter_uninit(acb);