Lines Matching defs:hostdata
87 #define optimum_sx_per(hostdata) (hostdata)->sx_table[1].period_ns
369 struct WD33C93_hostdata *hostdata;
372 hostdata = (struct WD33C93_hostdata *) cmd->device->host->hostdata;
438 spin_lock_irq(&hostdata->lock);
440 if (!(hostdata->input_Q) || (cmd->cmnd[0] == REQUEST_SENSE)) {
441 cmd->host_scribble = (uchar *) hostdata->input_Q;
442 hostdata->input_Q = cmd;
444 for (tmp = (struct scsi_cmnd *) hostdata->input_Q;
458 spin_unlock_irq(&hostdata->lock);
477 struct WD33C93_hostdata *hostdata =
478 (struct WD33C93_hostdata *) instance->hostdata;
479 const wd33c93_regs regs = hostdata->regs;
483 if (hostdata->selecting || hostdata->connected) {
493 cmd = (struct scsi_cmnd *) hostdata->input_Q;
496 if (!(hostdata->busy[cmd->device->id] &
515 hostdata->input_Q = (struct scsi_cmnd *) cmd->host_scribble;
518 hostdata->cmd_cnt[cmd->device->id]++;
538 * + Commands should NEVER disconnect if hostdata->disconnect =
540 * disconnect if hostdata->disconnect = DIS_ALWAYS.
554 if (hostdata->disconnect == DIS_NEVER)
556 if (hostdata->disconnect == DIS_ALWAYS)
560 if (hostdata->disconnected_Q) /* other commands disconnected? */
562 if (!(hostdata->input_Q)) /* input_Q empty? */
564 for (prev = (struct scsi_cmnd *) hostdata->input_Q; prev;
568 for (prev = (struct scsi_cmnd *) hostdata->input_Q; prev;
581 hostdata->disc_allowed_cnt[cmd->device->id]++;
590 hostdata->sync_xfer[cmd->device->id]);
591 hostdata->busy[cmd->device->id] |= (1 << (cmd->device->lun & 0xFF));
593 if ((hostdata->level2 == L2_NONE) ||
594 (hostdata->sync_stat[cmd->device->id] == SS_UNSET)) {
604 hostdata->selecting = cmd;
618 if (hostdata->sync_stat[cmd->device->id] == SS_UNSET)
619 hostdata->sync_stat[cmd->device->id] = SS_FIRST;
620 hostdata->state = S_SELECTING;
633 hostdata->connected = cmd;
655 if ((cmd->SCp.phase == 0) && (hostdata->no_dma == 0)) {
656 if (hostdata->dma_setup(cmd,
664 CTRL_IDI | CTRL_EDI | hostdata->dma_mode);
665 hostdata->dma = D_DMA_RUNNING;
670 hostdata->state = S_RUNNING_LEVEL2;
687 int data_in_dir, struct WD33C93_hostdata *hostdata)
724 struct WD33C93_hostdata *hostdata;
727 hostdata = (struct WD33C93_hostdata *) cmd->device->host->hostdata;
747 hostdata->sync_xfer[cmd->device->id]);
749 /* 'hostdata->no_dma' is TRUE if we don't even want to try DMA.
753 if (hostdata->no_dma || hostdata->dma_setup(cmd, data_in_dir)) {
755 hostdata->pio_cnt++;
758 cmd->SCp.this_residual, data_in_dir, hostdata);
766 * We set 'hostdata->dma' = D_DMA_RUNNING so that when the
775 hostdata->dma_cnt++;
777 write_wd33c93(regs, WD_CONTROL, CTRL_IDI | CTRL_EDI | hostdata->dma_mode);
780 if ((hostdata->level2 >= L2_DATA) ||
781 (hostdata->level2 == L2_BASIC && cmd->SCp.phase == 0)) {
784 hostdata->state = S_RUNNING_LEVEL2;
788 hostdata->dma = D_DMA_RUNNING;
795 struct WD33C93_hostdata *hostdata =
796 (struct WD33C93_hostdata *) instance->hostdata;
797 const wd33c93_regs regs = hostdata->regs;
806 spin_lock_irqsave(&hostdata->lock, flags);
809 hostdata->int_cnt++;
812 cmd = (struct scsi_cmnd *) hostdata->connected; /* assume we're connected */
832 if (hostdata->dma == D_DMA_RUNNING) {
835 hostdata->dma_stop(cmd->device->host, cmd, 1);
836 hostdata->dma = D_DMA_OFF;
849 if (hostdata->state == S_RUNNING_LEVEL2)
850 hostdata->connected = NULL;
852 cmd = (struct scsi_cmnd *) hostdata->selecting; /* get a valid cmd */
853 hostdata->selecting = NULL;
857 hostdata->busy[cmd->device->id] &= ~(1 << (cmd->device->lun & 0xff));
858 hostdata->state = S_UNCONNECTED;
871 spin_unlock_irqrestore(&hostdata->lock, flags);
884 hostdata->connected = cmd =
885 (struct scsi_cmnd *) hostdata->selecting;
886 hostdata->selecting = NULL;
890 hostdata->outgoing_msg[0] = IDENTIFY(0, cmd->device->lun);
892 hostdata->outgoing_msg[0] |= 0x40;
894 if (hostdata->sync_stat[cmd->device->id] == SS_FIRST) {
896 hostdata->sync_stat[cmd->device->id] = SS_WAITING;
904 hostdata->outgoing_msg[1] = EXTENDED_MESSAGE;
905 hostdata->outgoing_msg[2] = 3;
906 hostdata->outgoing_msg[3] = EXTENDED_SDTR;
907 if (hostdata->no_sync & (1 << cmd->device->id)) {
908 calc_sync_msg(hostdata->default_sx_per, 0,
909 0, hostdata->outgoing_msg + 4);
911 calc_sync_msg(optimum_sx_per(hostdata),
913 hostdata->fast,
914 hostdata->outgoing_msg + 4);
916 hostdata->outgoing_len = 6;
918 ucp = hostdata->outgoing_msg + 1;
923 hostdata->outgoing_len = 1;
925 hostdata->state = S_CONNECTED;
926 spin_unlock_irqrestore(&hostdata->lock, flags);
936 if (hostdata->state != S_RUNNING_LEVEL2)
937 hostdata->state = S_CONNECTED;
938 spin_unlock_irqrestore(&hostdata->lock, flags);
948 if (hostdata->state != S_RUNNING_LEVEL2)
949 hostdata->state = S_CONNECTED;
950 spin_unlock_irqrestore(&hostdata->lock, flags);
960 hostdata);
961 hostdata->state = S_CONNECTED;
962 spin_unlock_irqrestore(&hostdata->lock, flags);
971 if (hostdata->level2 >= L2_BASIC) {
974 hostdata->state = S_RUNNING_LEVEL2;
978 hostdata->state = S_CONNECTED;
980 spin_unlock_irqrestore(&hostdata->lock, flags);
992 hostdata->incoming_msg[hostdata->incoming_ptr] = msg;
993 if (hostdata->incoming_msg[0] == EXTENDED_MESSAGE)
996 hostdata->incoming_ptr = 0;
1004 hostdata->state = S_PRE_CMP_DISC;
1010 hostdata->state = S_CONNECTED;
1015 if (hostdata->level2 >= L2_BASIC) {
1018 hostdata->state = S_RUNNING_LEVEL2;
1021 hostdata->state = S_CONNECTED;
1029 hostdata->state = S_PRE_TMP_DISC;
1037 if (hostdata->sync_stat[cmd->device->id] == SS_WAITING) {
1038 hostdata->sync_stat[cmd->device->id] = SS_SET;
1040 hostdata->sync_xfer[cmd->device->id] =
1041 calc_sync_xfer(hostdata->default_sx_per
1042 / 4, 0, 0, hostdata->sx_table);
1045 hostdata->state = S_CONNECTED;
1051 ucp = hostdata->incoming_msg;
1054 printk("%02x", ucp[hostdata->incoming_ptr]);
1058 if ((hostdata->incoming_ptr >= 2) &&
1059 (hostdata->incoming_ptr == (ucp[1] + 1))) {
1064 id = calc_sync_xfer(hostdata->
1066 0, hostdata->sx_table);
1067 if (hostdata->sync_stat[cmd->device->id] !=
1080 hostdata->outgoing_msg[0] =
1082 hostdata->outgoing_msg[1] = 3;
1083 hostdata->outgoing_msg[2] =
1085 calc_sync_msg(hostdata->
1087 0, hostdata->outgoing_msg + 3);
1088 hostdata->outgoing_len = 5;
1092 hostdata->fast,
1093 hostdata->sx_table);
1096 0, hostdata->sx_table);
1098 hostdata->sync_xfer[cmd->device->id] = id;
1101 hostdata->sync_xfer[cmd->device->id]);
1103 hostdata->sync_stat[cmd->device->id] =
1107 hostdata->state = S_CONNECTED;
1112 hostdata->outgoing_msg[0] =
1114 hostdata->outgoing_msg[1] = 2;
1115 hostdata->outgoing_msg[2] =
1117 hostdata->outgoing_msg[3] = 0; /* 8 bit transfer width */
1118 hostdata->outgoing_len = 4;
1121 hostdata->state = S_CONNECTED;
1128 hostdata->outgoing_msg[0] =
1130 hostdata->outgoing_len = 1;
1133 hostdata->state = S_CONNECTED;
1136 hostdata->incoming_ptr = 0;
1142 hostdata->incoming_ptr++;
1144 hostdata->state = S_CONNECTED;
1151 hostdata->outgoing_msg[0] = MESSAGE_REJECT;
1152 hostdata->outgoing_len = 1;
1154 hostdata->state = S_CONNECTED;
1156 spin_unlock_irqrestore(&hostdata->lock, flags);
1173 hostdata->connected = NULL;
1174 hostdata->busy[cmd->device->id] &= ~(1 << (cmd->device->lun & 0xff));
1175 hostdata->state = S_UNCONNECTED;
1191 spin_unlock_irqrestore(&hostdata->lock, flags);
1197 spin_unlock_irqrestore(&hostdata->lock, flags);
1205 hostdata->state = S_RUNNING_LEVEL2;
1208 spin_unlock_irqrestore(&hostdata->lock, flags);
1228 if (hostdata->outgoing_len == 0) {
1229 hostdata->outgoing_len = 1;
1230 hostdata->outgoing_msg[0] = NOP;
1232 transfer_pio(regs, hostdata->outgoing_msg,
1233 hostdata->outgoing_len, DATA_OUT_DIR, hostdata);
1234 DB(DB_INTR, printk("%02x", hostdata->outgoing_msg[0]))
1235 hostdata->outgoing_len = 0;
1236 hostdata->state = S_CONNECTED;
1237 spin_unlock_irqrestore(&hostdata->lock, flags);
1257 hostdata->state = S_UNCONNECTED;
1258 spin_unlock_irqrestore(&hostdata->lock, flags);
1262 hostdata->connected = NULL;
1263 hostdata->busy[cmd->device->id] &= ~(1 << (cmd->device->lun & 0xff));
1264 hostdata->state = S_UNCONNECTED;
1276 spin_unlock_irqrestore(&hostdata->lock, flags);
1290 hostdata->state = S_UNCONNECTED;
1292 switch (hostdata->state) {
1294 hostdata->connected = NULL;
1295 hostdata->busy[cmd->device->id] &= ~(1 << (cmd->device->lun & 0xff));
1296 hostdata->state = S_UNCONNECTED;
1310 cmd->host_scribble = (uchar *) hostdata->disconnected_Q;
1311 hostdata->disconnected_Q = cmd;
1312 hostdata->connected = NULL;
1313 hostdata->state = S_UNCONNECTED;
1316 hostdata->disc_done_cnt[cmd->device->id]++;
1322 hostdata->state = S_UNCONNECTED;
1328 spin_unlock_irqrestore(&hostdata->lock, flags);
1343 if (hostdata->level2 <= L2_NONE) {
1345 if (hostdata->selecting) {
1346 cmd = (struct scsi_cmnd *) hostdata->selecting;
1347 hostdata->selecting = NULL;
1348 hostdata->busy[cmd->device->id] &= ~(1 << (cmd->device->lun & 0xff));
1350 (uchar *) hostdata->input_Q;
1351 hostdata->input_Q = cmd;
1359 hostdata->busy[cmd->device->id] &=
1362 (uchar *) hostdata->input_Q;
1363 hostdata->input_Q = cmd;
1387 if (hostdata->level2 < L2_RESELECT)
1440 cmd = (struct scsi_cmnd *) hostdata->disconnected_Q;
1455 spin_unlock_irqrestore(&hostdata->lock, flags);
1464 hostdata->disconnected_Q =
1466 hostdata->connected = cmd;
1468 /* We don't need to worry about 'initialize_SCp()' or 'hostdata->busy[]'
1478 if (hostdata->level2 >= L2_RESELECT) {
1482 hostdata->state = S_RUNNING_LEVEL2;
1484 hostdata->state = S_CONNECTED;
1486 spin_unlock_irqrestore(&hostdata->lock, flags);
1491 spin_unlock_irqrestore(&hostdata->lock, flags);
1501 struct WD33C93_hostdata *hostdata =
1502 (struct WD33C93_hostdata *) instance->hostdata;
1503 const wd33c93_regs regs = hostdata->regs;
1527 instance->this_id | hostdata->clock_freq);
1530 calc_sync_xfer(hostdata->default_sx_per / 4,
1531 DEFAULT_SX_OFF, 0, hostdata->sx_table));
1543 hostdata->microcode = read_wd33c93(regs, WD_CDB_1);
1545 hostdata->chip = C_WD33C93;
1550 hostdata->chip = C_WD33C93B;
1553 hostdata->chip = C_WD33C93A;
1555 hostdata->chip = C_UNKNOWN_CHIP;
1557 if (hostdata->chip != C_WD33C93B) /* Fast SCSI unavailable */
1558 hostdata->fast = 0;
1568 struct WD33C93_hostdata *hostdata;
1573 hostdata = (struct WD33C93_hostdata *) instance->hostdata;
1578 hostdata->dma_stop(instance, NULL, 0);
1580 hostdata->busy[i] = 0;
1581 hostdata->sync_xfer[i] =
1583 0, hostdata->sx_table);
1584 hostdata->sync_stat[i] = SS_UNSET; /* using default sync values */
1586 hostdata->input_Q = NULL;
1587 hostdata->selecting = NULL;
1588 hostdata->connected = NULL;
1589 hostdata->disconnected_Q = NULL;
1590 hostdata->state = S_UNCONNECTED;
1591 hostdata->dma = D_DMA_OFF;
1592 hostdata->incoming_ptr = 0;
1593 hostdata->outgoing_len = 0;
1606 struct WD33C93_hostdata *hostdata;
1613 hostdata = (struct WD33C93_hostdata *) instance->hostdata;
1614 regs = hostdata->regs;
1621 tmp = (struct scsi_cmnd *) hostdata->input_Q;
1628 hostdata->input_Q =
1654 if (hostdata->connected == cmd) {
1662 if (hostdata->dma == D_DMA_RUNNING) {
1663 hostdata->dma_stop(instance, cmd, 0);
1664 hostdata->dma = D_DMA_OFF;
1702 hostdata->busy[cmd->device->id] &= ~(1 << (cmd->device->lun & 0xff));
1703 hostdata->connected = NULL;
1704 hostdata->state = S_UNCONNECTED;
1721 tmp = (struct scsi_cmnd *) hostdata->disconnected_Q;
1930 struct WD33C93_hostdata *hostdata;
1939 hostdata = (struct WD33C93_hostdata *) instance->hostdata;
1941 hostdata->regs = regs;
1942 hostdata->clock_freq = set_clk_freq(clock_freq, &i);
1943 calc_sx_table(i, hostdata->sx_table);
1944 hostdata->dma_setup = setup;
1945 hostdata->dma_stop = stop;
1946 hostdata->dma_bounce_buffer = NULL;
1947 hostdata->dma_bounce_len = 0;
1949 hostdata->busy[i] = 0;
1950 hostdata->sync_xfer[i] =
1952 0, hostdata->sx_table);
1953 hostdata->sync_stat[i] = SS_UNSET; /* using default sync values */
1955 hostdata->cmd_cnt[i] = 0;
1956 hostdata->disc_allowed_cnt[i] = 0;
1957 hostdata->disc_done_cnt[i] = 0;
1960 hostdata->input_Q = NULL;
1961 hostdata->selecting = NULL;
1962 hostdata->connected = NULL;
1963 hostdata->disconnected_Q = NULL;
1964 hostdata->state = S_UNCONNECTED;
1965 hostdata->dma = D_DMA_OFF;
1966 hostdata->level2 = L2_BASIC;
1967 hostdata->disconnect = DIS_ADAPTIVE;
1968 hostdata->args = DEBUG_DEFAULTS;
1969 hostdata->incoming_ptr = 0;
1970 hostdata->outgoing_len = 0;
1971 hostdata->default_sx_per = DEFAULT_SX_PER;
1972 hostdata->no_dma = 0; /* default is DMA enabled */
1975 hostdata->proc = PR_VERSION | PR_INFO | PR_STATISTICS |
1978 hostdata->dma_cnt = 0;
1979 hostdata->pio_cnt = 0;
1980 hostdata->int_cnt = 0;
1985 hostdata->clock_freq = set_clk_freq(val, &val);
1986 calc_sx_table(val, hostdata->sx_table);
1990 hostdata->no_sync = val;
1993 hostdata->no_dma = (val == -1) ? 1 : val;
1996 hostdata->default_sx_per =
1997 hostdata->sx_table[round_period((unsigned int) val,
1998 hostdata->sx_table)].period_ns;
2002 hostdata->disconnect = val;
2004 hostdata->disconnect = DIS_ADAPTIVE;
2008 hostdata->level2 = val;
2011 hostdata->args = val & DB_MASK;
2014 hostdata->dma_mode = val ? CTRL_BURST:CTRL_DMA;
2016 if (WD33C93_FS_16_20 == hostdata->clock_freq /* divisor 4 */
2018 hostdata->fast = !!val;
2026 hostdata->proc = val;
2029 spin_lock_irq(&hostdata->lock);
2031 spin_unlock_irq(&hostdata->lock);
2035 (hostdata->chip == C_WD33C93) ? "WD33c93" : (hostdata->chip ==
2037 "WD33c93A" : (hostdata->chip ==
2039 hostdata->microcode, hostdata->no_sync, hostdata->no_dma);
2041 printk(" debug_flags=0x%02x\n", hostdata->args);
2059 hd = (struct WD33C93_hostdata *) instance->hostdata;
2129 hd = (struct WD33C93_hostdata *) instance->hostdata;