Lines Matching defs:hostdata
87 #define optimum_sx_per(hostdata) (hostdata)->sx_table[1].period_ns
308 struct WD33C93_hostdata *hostdata;
311 hostdata = (struct WD33C93_hostdata *) cmd->device->host->hostdata;
375 spin_lock_irq(&hostdata->lock);
377 if (!(hostdata->input_Q) || (cmd->cmnd[0] == REQUEST_SENSE)) {
378 cmd->host_scribble = (uchar *) hostdata->input_Q;
379 hostdata->input_Q = cmd;
381 for (tmp = (struct scsi_cmnd *) hostdata->input_Q;
395 spin_unlock_irq(&hostdata->lock);
415 struct WD33C93_hostdata *hostdata =
416 (struct WD33C93_hostdata *) instance->hostdata;
417 const wd33c93_regs regs = hostdata->regs;
421 if (hostdata->selecting || hostdata->connected) {
431 cmd = (struct scsi_cmnd *) hostdata->input_Q;
434 if (!(hostdata->busy[cmd->device->id] &
453 hostdata->input_Q = (struct scsi_cmnd *) cmd->host_scribble;
456 hostdata->cmd_cnt[cmd->device->id]++;
476 * + Commands should NEVER disconnect if hostdata->disconnect =
478 * disconnect if hostdata->disconnect = DIS_ALWAYS.
493 if (hostdata->disconnect == DIS_NEVER)
495 if (hostdata->disconnect == DIS_ALWAYS)
499 if (hostdata->disconnected_Q) /* other commands disconnected? */
501 if (!(hostdata->input_Q)) /* input_Q empty? */
503 for (prev = (struct scsi_cmnd *) hostdata->input_Q; prev;
507 for (prev = (struct scsi_cmnd *) hostdata->input_Q; prev;
520 hostdata->disc_allowed_cnt[cmd->device->id]++;
529 hostdata->sync_xfer[cmd->device->id]);
530 hostdata->busy[cmd->device->id] |= (1 << (cmd->device->lun & 0xFF));
532 if ((hostdata->level2 == L2_NONE) ||
533 (hostdata->sync_stat[cmd->device->id] == SS_UNSET)) {
543 hostdata->selecting = cmd;
557 if (hostdata->sync_stat[cmd->device->id] == SS_UNSET)
558 hostdata->sync_stat[cmd->device->id] = SS_FIRST;
559 hostdata->state = S_SELECTING;
572 hostdata->connected = cmd;
594 if (scsi_pointer->phase == 0 && hostdata->no_dma == 0) {
595 if (hostdata->dma_setup(cmd,
603 CTRL_IDI | CTRL_EDI | hostdata->dma_mode);
604 hostdata->dma = D_DMA_RUNNING;
609 hostdata->state = S_RUNNING_LEVEL2;
626 int data_in_dir, struct WD33C93_hostdata *hostdata)
664 struct WD33C93_hostdata *hostdata;
667 hostdata = (struct WD33C93_hostdata *) cmd->device->host->hostdata;
687 hostdata->sync_xfer[cmd->device->id]);
689 /* 'hostdata->no_dma' is TRUE if we don't even want to try DMA.
693 if (hostdata->no_dma || hostdata->dma_setup(cmd, data_in_dir)) {
695 hostdata->pio_cnt++;
699 hostdata);
707 * We set 'hostdata->dma' = D_DMA_RUNNING so that when the
716 hostdata->dma_cnt++;
718 write_wd33c93(regs, WD_CONTROL, CTRL_IDI | CTRL_EDI | hostdata->dma_mode);
721 if ((hostdata->level2 >= L2_DATA) ||
722 (hostdata->level2 == L2_BASIC && scsi_pointer->phase == 0)) {
725 hostdata->state = S_RUNNING_LEVEL2;
729 hostdata->dma = D_DMA_RUNNING;
737 struct WD33C93_hostdata *hostdata =
738 (struct WD33C93_hostdata *) instance->hostdata;
739 const wd33c93_regs regs = hostdata->regs;
748 spin_lock_irqsave(&hostdata->lock, flags);
751 hostdata->int_cnt++;
754 cmd = (struct scsi_cmnd *) hostdata->connected; /* assume we're connected */
775 if (hostdata->dma == D_DMA_RUNNING) {
778 hostdata->dma_stop(cmd->device->host, cmd, 1);
779 hostdata->dma = D_DMA_OFF;
792 if (hostdata->state == S_RUNNING_LEVEL2)
793 hostdata->connected = NULL;
795 cmd = (struct scsi_cmnd *) hostdata->selecting; /* get a valid cmd */
796 hostdata->selecting = NULL;
800 hostdata->busy[cmd->device->id] &= ~(1 << (cmd->device->lun & 0xff));
801 hostdata->state = S_UNCONNECTED;
814 spin_unlock_irqrestore(&hostdata->lock, flags);
827 hostdata->connected = cmd =
828 (struct scsi_cmnd *) hostdata->selecting;
829 hostdata->selecting = NULL;
833 hostdata->outgoing_msg[0] = IDENTIFY(0, cmd->device->lun);
835 hostdata->outgoing_msg[0] |= 0x40;
837 if (hostdata->sync_stat[cmd->device->id] == SS_FIRST) {
839 hostdata->sync_stat[cmd->device->id] = SS_WAITING;
847 hostdata->outgoing_msg[1] = EXTENDED_MESSAGE;
848 hostdata->outgoing_msg[2] = 3;
849 hostdata->outgoing_msg[3] = EXTENDED_SDTR;
850 if (hostdata->no_sync & (1 << cmd->device->id)) {
851 calc_sync_msg(hostdata->default_sx_per, 0,
852 0, hostdata->outgoing_msg + 4);
854 calc_sync_msg(optimum_sx_per(hostdata),
856 hostdata->fast,
857 hostdata->outgoing_msg + 4);
859 hostdata->outgoing_len = 6;
861 ucp = hostdata->outgoing_msg + 1;
866 hostdata->outgoing_len = 1;
868 hostdata->state = S_CONNECTED;
869 spin_unlock_irqrestore(&hostdata->lock, flags);
879 if (hostdata->state != S_RUNNING_LEVEL2)
880 hostdata->state = S_CONNECTED;
881 spin_unlock_irqrestore(&hostdata->lock, flags);
891 if (hostdata->state != S_RUNNING_LEVEL2)
892 hostdata->state = S_CONNECTED;
893 spin_unlock_irqrestore(&hostdata->lock, flags);
903 hostdata);
904 hostdata->state = S_CONNECTED;
905 spin_unlock_irqrestore(&hostdata->lock, flags);
914 if (hostdata->level2 >= L2_BASIC) {
917 hostdata->state = S_RUNNING_LEVEL2;
921 hostdata->state = S_CONNECTED;
923 spin_unlock_irqrestore(&hostdata->lock, flags);
935 hostdata->incoming_msg[hostdata->incoming_ptr] = msg;
936 if (hostdata->incoming_msg[0] == EXTENDED_MESSAGE)
939 hostdata->incoming_ptr = 0;
947 hostdata->state = S_PRE_CMP_DISC;
953 hostdata->state = S_CONNECTED;
958 if (hostdata->level2 >= L2_BASIC) {
961 hostdata->state = S_RUNNING_LEVEL2;
964 hostdata->state = S_CONNECTED;
972 hostdata->state = S_PRE_TMP_DISC;
980 if (hostdata->sync_stat[cmd->device->id] == SS_WAITING) {
981 hostdata->sync_stat[cmd->device->id] = SS_SET;
983 hostdata->sync_xfer[cmd->device->id] =
984 calc_sync_xfer(hostdata->default_sx_per
985 / 4, 0, 0, hostdata->sx_table);
988 hostdata->state = S_CONNECTED;
994 ucp = hostdata->incoming_msg;
997 printk("%02x", ucp[hostdata->incoming_ptr]);
1001 if ((hostdata->incoming_ptr >= 2) &&
1002 (hostdata->incoming_ptr == (ucp[1] + 1))) {
1007 id = calc_sync_xfer(hostdata->
1009 0, hostdata->sx_table);
1010 if (hostdata->sync_stat[cmd->device->id] !=
1023 hostdata->outgoing_msg[0] =
1025 hostdata->outgoing_msg[1] = 3;
1026 hostdata->outgoing_msg[2] =
1028 calc_sync_msg(hostdata->
1030 0, hostdata->outgoing_msg + 3);
1031 hostdata->outgoing_len = 5;
1035 hostdata->fast,
1036 hostdata->sx_table);
1039 0, hostdata->sx_table);
1041 hostdata->sync_xfer[cmd->device->id] = id;
1044 hostdata->sync_xfer[cmd->device->id]);
1046 hostdata->sync_stat[cmd->device->id] =
1050 hostdata->state = S_CONNECTED;
1055 hostdata->outgoing_msg[0] =
1057 hostdata->outgoing_msg[1] = 2;
1058 hostdata->outgoing_msg[2] =
1060 hostdata->outgoing_msg[3] = 0; /* 8 bit transfer width */
1061 hostdata->outgoing_len = 4;
1064 hostdata->state = S_CONNECTED;
1071 hostdata->outgoing_msg[0] =
1073 hostdata->outgoing_len = 1;
1076 hostdata->state = S_CONNECTED;
1079 hostdata->incoming_ptr = 0;
1085 hostdata->incoming_ptr++;
1087 hostdata->state = S_CONNECTED;
1094 hostdata->outgoing_msg[0] = MESSAGE_REJECT;
1095 hostdata->outgoing_len = 1;
1097 hostdata->state = S_CONNECTED;
1099 spin_unlock_irqrestore(&hostdata->lock, flags);
1116 hostdata->connected = NULL;
1117 hostdata->busy[cmd->device->id] &= ~(1 << (cmd->device->lun & 0xff));
1118 hostdata->state = S_UNCONNECTED;
1134 spin_unlock_irqrestore(&hostdata->lock, flags);
1140 spin_unlock_irqrestore(&hostdata->lock, flags);
1148 hostdata->state = S_RUNNING_LEVEL2;
1151 spin_unlock_irqrestore(&hostdata->lock, flags);
1171 if (hostdata->outgoing_len == 0) {
1172 hostdata->outgoing_len = 1;
1173 hostdata->outgoing_msg[0] = NOP;
1175 transfer_pio(regs, hostdata->outgoing_msg,
1176 hostdata->outgoing_len, DATA_OUT_DIR, hostdata);
1177 DB(DB_INTR, printk("%02x", hostdata->outgoing_msg[0]))
1178 hostdata->outgoing_len = 0;
1179 hostdata->state = S_CONNECTED;
1180 spin_unlock_irqrestore(&hostdata->lock, flags);
1200 hostdata->state = S_UNCONNECTED;
1201 spin_unlock_irqrestore(&hostdata->lock, flags);
1205 hostdata->connected = NULL;
1206 hostdata->busy[cmd->device->id] &= ~(1 << (cmd->device->lun & 0xff));
1207 hostdata->state = S_UNCONNECTED;
1222 spin_unlock_irqrestore(&hostdata->lock, flags);
1236 hostdata->state = S_UNCONNECTED;
1238 switch (hostdata->state) {
1240 hostdata->connected = NULL;
1241 hostdata->busy[cmd->device->id] &= ~(1 << (cmd->device->lun & 0xff));
1242 hostdata->state = S_UNCONNECTED;
1256 cmd->host_scribble = (uchar *) hostdata->disconnected_Q;
1257 hostdata->disconnected_Q = cmd;
1258 hostdata->connected = NULL;
1259 hostdata->state = S_UNCONNECTED;
1262 hostdata->disc_done_cnt[cmd->device->id]++;
1268 hostdata->state = S_UNCONNECTED;
1274 spin_unlock_irqrestore(&hostdata->lock, flags);
1289 if (hostdata->level2 <= L2_NONE) {
1291 if (hostdata->selecting) {
1292 cmd = (struct scsi_cmnd *) hostdata->selecting;
1293 hostdata->selecting = NULL;
1294 hostdata->busy[cmd->device->id] &= ~(1 << (cmd->device->lun & 0xff));
1296 (uchar *) hostdata->input_Q;
1297 hostdata->input_Q = cmd;
1305 hostdata->busy[cmd->device->id] &=
1308 (uchar *) hostdata->input_Q;
1309 hostdata->input_Q = cmd;
1333 if (hostdata->level2 < L2_RESELECT)
1386 cmd = (struct scsi_cmnd *) hostdata->disconnected_Q;
1401 spin_unlock_irqrestore(&hostdata->lock, flags);
1410 hostdata->disconnected_Q =
1412 hostdata->connected = cmd;
1414 /* We don't need to worry about 'initialize_SCp()' or 'hostdata->busy[]'
1424 if (hostdata->level2 >= L2_RESELECT) {
1428 hostdata->state = S_RUNNING_LEVEL2;
1430 hostdata->state = S_CONNECTED;
1432 spin_unlock_irqrestore(&hostdata->lock, flags);
1437 spin_unlock_irqrestore(&hostdata->lock, flags);
1447 struct WD33C93_hostdata *hostdata =
1448 (struct WD33C93_hostdata *) instance->hostdata;
1449 const wd33c93_regs regs = hostdata->regs;
1473 instance->this_id | hostdata->clock_freq);
1476 calc_sync_xfer(hostdata->default_sx_per / 4,
1477 DEFAULT_SX_OFF, 0, hostdata->sx_table));
1489 hostdata->microcode = read_wd33c93(regs, WD_CDB_1);
1491 hostdata->chip = C_WD33C93;
1496 hostdata->chip = C_WD33C93B;
1499 hostdata->chip = C_WD33C93A;
1501 hostdata->chip = C_UNKNOWN_CHIP;
1503 if (hostdata->chip != C_WD33C93B) /* Fast SCSI unavailable */
1504 hostdata->fast = 0;
1514 struct WD33C93_hostdata *hostdata;
1519 hostdata = (struct WD33C93_hostdata *) instance->hostdata;
1524 hostdata->dma_stop(instance, NULL, 0);
1526 hostdata->busy[i] = 0;
1527 hostdata->sync_xfer[i] =
1529 0, hostdata->sx_table);
1530 hostdata->sync_stat[i] = SS_UNSET; /* using default sync values */
1532 hostdata->input_Q = NULL;
1533 hostdata->selecting = NULL;
1534 hostdata->connected = NULL;
1535 hostdata->disconnected_Q = NULL;
1536 hostdata->state = S_UNCONNECTED;
1537 hostdata->dma = D_DMA_OFF;
1538 hostdata->incoming_ptr = 0;
1539 hostdata->outgoing_len = 0;
1552 struct WD33C93_hostdata *hostdata;
1559 hostdata = (struct WD33C93_hostdata *) instance->hostdata;
1560 regs = hostdata->regs;
1567 tmp = (struct scsi_cmnd *) hostdata->input_Q;
1574 hostdata->input_Q =
1600 if (hostdata->connected == cmd) {
1608 if (hostdata->dma == D_DMA_RUNNING) {
1609 hostdata->dma_stop(instance, cmd, 0);
1610 hostdata->dma = D_DMA_OFF;
1648 hostdata->busy[cmd->device->id] &= ~(1 << (cmd->device->lun & 0xff));
1649 hostdata->connected = NULL;
1650 hostdata->state = S_UNCONNECTED;
1667 tmp = (struct scsi_cmnd *) hostdata->disconnected_Q;
1876 struct WD33C93_hostdata *hostdata;
1885 hostdata = (struct WD33C93_hostdata *) instance->hostdata;
1887 hostdata->regs = regs;
1888 hostdata->clock_freq = set_clk_freq(clock_freq, &i);
1889 calc_sx_table(i, hostdata->sx_table);
1890 hostdata->dma_setup = setup;
1891 hostdata->dma_stop = stop;
1892 hostdata->dma_bounce_buffer = NULL;
1893 hostdata->dma_bounce_len = 0;
1895 hostdata->busy[i] = 0;
1896 hostdata->sync_xfer[i] =
1898 0, hostdata->sx_table);
1899 hostdata->sync_stat[i] = SS_UNSET; /* using default sync values */
1901 hostdata->cmd_cnt[i] = 0;
1902 hostdata->disc_allowed_cnt[i] = 0;
1903 hostdata->disc_done_cnt[i] = 0;
1906 hostdata->input_Q = NULL;
1907 hostdata->selecting = NULL;
1908 hostdata->connected = NULL;
1909 hostdata->disconnected_Q = NULL;
1910 hostdata->state = S_UNCONNECTED;
1911 hostdata->dma = D_DMA_OFF;
1912 hostdata->level2 = L2_BASIC;
1913 hostdata->disconnect = DIS_ADAPTIVE;
1914 hostdata->args = DEBUG_DEFAULTS;
1915 hostdata->incoming_ptr = 0;
1916 hostdata->outgoing_len = 0;
1917 hostdata->default_sx_per = DEFAULT_SX_PER;
1918 hostdata->no_dma = 0; /* default is DMA enabled */
1921 hostdata->proc = PR_VERSION | PR_INFO | PR_STATISTICS |
1924 hostdata->dma_cnt = 0;
1925 hostdata->pio_cnt = 0;
1926 hostdata->int_cnt = 0;
1931 hostdata->clock_freq = set_clk_freq(val, &val);
1932 calc_sx_table(val, hostdata->sx_table);
1936 hostdata->no_sync = val;
1939 hostdata->no_dma = (val == -1) ? 1 : val;
1942 hostdata->default_sx_per =
1943 hostdata->sx_table[round_period((unsigned int) val,
1944 hostdata->sx_table)].period_ns;
1948 hostdata->disconnect = val;
1950 hostdata->disconnect = DIS_ADAPTIVE;
1954 hostdata->level2 = val;
1957 hostdata->args = val & DB_MASK;
1960 hostdata->dma_mode = val ? CTRL_BURST:CTRL_DMA;
1962 if (WD33C93_FS_16_20 == hostdata->clock_freq /* divisor 4 */
1964 hostdata->fast = !!val;
1972 hostdata->proc = val;
1975 spin_lock_irq(&hostdata->lock);
1977 spin_unlock_irq(&hostdata->lock);
1981 (hostdata->chip == C_WD33C93) ? "WD33c93" : (hostdata->chip ==
1983 "WD33c93A" : (hostdata->chip ==
1985 hostdata->microcode, hostdata->no_sync, hostdata->no_dma);
1987 printk(" debug_flags=0x%02x\n", hostdata->args);
2005 hd = (struct WD33C93_hostdata *) instance->hostdata;
2075 hd = (struct WD33C93_hostdata *) instance->hostdata;