Lines Matching defs:hostdata

96 #define optimum_sx_per(hostdata) (hostdata)->sx_table[1].period_ns
378 struct WD33C93_hostdata *hostdata;
381 hostdata = (struct WD33C93_hostdata *) cmd->device->host->hostdata;
447 spin_lock_irq(&hostdata->lock);
449 if (!(hostdata->input_Q) || (cmd->cmnd[0] == REQUEST_SENSE)) {
450 cmd->host_scribble = (uchar *) hostdata->input_Q;
451 hostdata->input_Q = cmd;
453 for (tmp = (struct scsi_cmnd *) hostdata->input_Q;
467 spin_unlock_irq(&hostdata->lock);
486 struct WD33C93_hostdata *hostdata =
487 (struct WD33C93_hostdata *) instance->hostdata;
488 const wd33c93_regs regs = hostdata->regs;
492 if (hostdata->selecting || hostdata->connected) {
502 cmd = (struct scsi_cmnd *) hostdata->input_Q;
505 if (!(hostdata->busy[cmd->device->id] & (1 << cmd->device->lun)))
523 hostdata->input_Q = (struct scsi_cmnd *) cmd->host_scribble;
526 hostdata->cmd_cnt[cmd->device->id]++;
546 * + Commands should NEVER disconnect if hostdata->disconnect =
548 * disconnect if hostdata->disconnect = DIS_ALWAYS.
562 if (hostdata->disconnect == DIS_NEVER)
564 if (hostdata->disconnect == DIS_ALWAYS)
568 if (hostdata->disconnected_Q) /* other commands disconnected? */
570 if (!(hostdata->input_Q)) /* input_Q empty? */
572 for (prev = (struct scsi_cmnd *) hostdata->input_Q; prev;
576 for (prev = (struct scsi_cmnd *) hostdata->input_Q; prev;
589 hostdata->disc_allowed_cnt[cmd->device->id]++;
598 hostdata->sync_xfer[cmd->device->id]);
599 hostdata->busy[cmd->device->id] |= (1 << cmd->device->lun);
601 if ((hostdata->level2 == L2_NONE) ||
602 (hostdata->sync_stat[cmd->device->id] == SS_UNSET)) {
612 hostdata->selecting = cmd;
626 if (hostdata->sync_stat[cmd->device->id] == SS_UNSET)
627 hostdata->sync_stat[cmd->device->id] = SS_FIRST;
628 hostdata->state = S_SELECTING;
641 hostdata->connected = cmd;
663 if ((cmd->SCp.phase == 0) && (hostdata->no_dma == 0)) {
664 if (hostdata->dma_setup(cmd,
672 CTRL_IDI | CTRL_EDI | hostdata->dma_mode);
673 hostdata->dma = D_DMA_RUNNING;
678 hostdata->state = S_RUNNING_LEVEL2;
695 int data_in_dir, struct WD33C93_hostdata *hostdata)
732 struct WD33C93_hostdata *hostdata;
735 hostdata = (struct WD33C93_hostdata *) cmd->device->host->hostdata;
755 hostdata->sync_xfer[cmd->device->id]);
757 /* 'hostdata->no_dma' is TRUE if we don't even want to try DMA.
761 if (hostdata->no_dma || hostdata->dma_setup(cmd, data_in_dir)) {
763 hostdata->pio_cnt++;
766 cmd->SCp.this_residual, data_in_dir, hostdata);
774 * We set 'hostdata->dma' = D_DMA_RUNNING so that when the
783 hostdata->dma_cnt++;
785 write_wd33c93(regs, WD_CONTROL, CTRL_IDI | CTRL_EDI | hostdata->dma_mode);
788 if ((hostdata->level2 >= L2_DATA) ||
789 (hostdata->level2 == L2_BASIC && cmd->SCp.phase == 0)) {
792 hostdata->state = S_RUNNING_LEVEL2;
796 hostdata->dma = D_DMA_RUNNING;
803 struct WD33C93_hostdata *hostdata =
804 (struct WD33C93_hostdata *) instance->hostdata;
805 const wd33c93_regs regs = hostdata->regs;
814 spin_lock_irqsave(&hostdata->lock, flags);
817 hostdata->int_cnt++;
820 cmd = (struct scsi_cmnd *) hostdata->connected; /* assume we're connected */
840 if (hostdata->dma == D_DMA_RUNNING) {
843 hostdata->dma_stop(cmd->device->host, cmd, 1);
844 hostdata->dma = D_DMA_OFF;
857 if (hostdata->state == S_RUNNING_LEVEL2)
858 hostdata->connected = NULL;
860 cmd = (struct scsi_cmnd *) hostdata->selecting; /* get a valid cmd */
861 hostdata->selecting = NULL;
865 hostdata->busy[cmd->device->id] &= ~(1 << cmd->device->lun);
866 hostdata->state = S_UNCONNECTED;
879 spin_unlock_irqrestore(&hostdata->lock, flags);
892 hostdata->connected = cmd =
893 (struct scsi_cmnd *) hostdata->selecting;
894 hostdata->selecting = NULL;
898 hostdata->outgoing_msg[0] = (0x80 | 0x00 | cmd->device->lun);
900 hostdata->outgoing_msg[0] |= 0x40;
902 if (hostdata->sync_stat[cmd->device->id] == SS_FIRST) {
904 hostdata->sync_stat[cmd->device->id] = SS_WAITING;
912 hostdata->outgoing_msg[1] = EXTENDED_MESSAGE;
913 hostdata->outgoing_msg[2] = 3;
914 hostdata->outgoing_msg[3] = EXTENDED_SDTR;
915 if (hostdata->no_sync & (1 << cmd->device->id)) {
916 calc_sync_msg(hostdata->default_sx_per, 0,
917 0, hostdata->outgoing_msg + 4);
919 calc_sync_msg(optimum_sx_per(hostdata),
921 hostdata->fast,
922 hostdata->outgoing_msg + 4);
924 hostdata->outgoing_len = 6;
926 ucp = hostdata->outgoing_msg + 1;
931 hostdata->outgoing_len = 1;
933 hostdata->state = S_CONNECTED;
934 spin_unlock_irqrestore(&hostdata->lock, flags);
944 if (hostdata->state != S_RUNNING_LEVEL2)
945 hostdata->state = S_CONNECTED;
946 spin_unlock_irqrestore(&hostdata->lock, flags);
956 if (hostdata->state != S_RUNNING_LEVEL2)
957 hostdata->state = S_CONNECTED;
958 spin_unlock_irqrestore(&hostdata->lock, flags);
968 hostdata);
969 hostdata->state = S_CONNECTED;
970 spin_unlock_irqrestore(&hostdata->lock, flags);
979 if (hostdata->level2 >= L2_BASIC) {
982 hostdata->state = S_RUNNING_LEVEL2;
986 hostdata->state = S_CONNECTED;
988 spin_unlock_irqrestore(&hostdata->lock, flags);
1000 hostdata->incoming_msg[hostdata->incoming_ptr] = msg;
1001 if (hostdata->incoming_msg[0] == EXTENDED_MESSAGE)
1004 hostdata->incoming_ptr = 0;
1012 hostdata->state = S_PRE_CMP_DISC;
1018 hostdata->state = S_CONNECTED;
1023 if (hostdata->level2 >= L2_BASIC) {
1026 hostdata->state = S_RUNNING_LEVEL2;
1029 hostdata->state = S_CONNECTED;
1037 hostdata->state = S_PRE_TMP_DISC;
1045 if (hostdata->sync_stat[cmd->device->id] == SS_WAITING) {
1046 hostdata->sync_stat[cmd->device->id] = SS_SET;
1048 hostdata->sync_xfer[cmd->device->id] =
1049 calc_sync_xfer(hostdata->default_sx_per
1050 / 4, 0, 0, hostdata->sx_table);
1053 hostdata->state = S_CONNECTED;
1059 ucp = hostdata->incoming_msg;
1062 printk("%02x", ucp[hostdata->incoming_ptr]);
1066 if ((hostdata->incoming_ptr >= 2) &&
1067 (hostdata->incoming_ptr == (ucp[1] + 1))) {
1072 id = calc_sync_xfer(hostdata->
1074 0, hostdata->sx_table);
1075 if (hostdata->sync_stat[cmd->device->id] !=
1088 hostdata->outgoing_msg[0] =
1090 hostdata->outgoing_msg[1] = 3;
1091 hostdata->outgoing_msg[2] =
1093 calc_sync_msg(hostdata->
1095 0, hostdata->outgoing_msg + 3);
1096 hostdata->outgoing_len = 5;
1100 hostdata->fast,
1101 hostdata->sx_table);
1104 0, hostdata->sx_table);
1106 hostdata->sync_xfer[cmd->device->id] = id;
1109 hostdata->sync_xfer[cmd->device->id]);
1111 hostdata->sync_stat[cmd->device->id] =
1115 hostdata->state = S_CONNECTED;
1120 hostdata->outgoing_msg[0] =
1122 hostdata->outgoing_msg[1] = 2;
1123 hostdata->outgoing_msg[2] =
1125 hostdata->outgoing_msg[3] = 0; /* 8 bit transfer width */
1126 hostdata->outgoing_len = 4;
1129 hostdata->state = S_CONNECTED;
1136 hostdata->outgoing_msg[0] =
1138 hostdata->outgoing_len = 1;
1141 hostdata->state = S_CONNECTED;
1144 hostdata->incoming_ptr = 0;
1150 hostdata->incoming_ptr++;
1152 hostdata->state = S_CONNECTED;
1159 hostdata->outgoing_msg[0] = MESSAGE_REJECT;
1160 hostdata->outgoing_len = 1;
1162 hostdata->state = S_CONNECTED;
1164 spin_unlock_irqrestore(&hostdata->lock, flags);
1181 hostdata->connected = NULL;
1182 hostdata->busy[cmd->device->id] &= ~(1 << cmd->device->lun);
1183 hostdata->state = S_UNCONNECTED;
1199 spin_unlock_irqrestore(&hostdata->lock, flags);
1205 spin_unlock_irqrestore(&hostdata->lock, flags);
1213 hostdata->state = S_RUNNING_LEVEL2;
1216 spin_unlock_irqrestore(&hostdata->lock, flags);
1236 if (hostdata->outgoing_len == 0) {
1237 hostdata->outgoing_len = 1;
1238 hostdata->outgoing_msg[0] = NOP;
1240 transfer_pio(regs, hostdata->outgoing_msg,
1241 hostdata->outgoing_len, DATA_OUT_DIR, hostdata);
1242 DB(DB_INTR, printk("%02x", hostdata->outgoing_msg[0]))
1243 hostdata->outgoing_len = 0;
1244 hostdata->state = S_CONNECTED;
1245 spin_unlock_irqrestore(&hostdata->lock, flags);
1265 hostdata->state = S_UNCONNECTED;
1266 spin_unlock_irqrestore(&hostdata->lock, flags);
1270 hostdata->connected = NULL;
1271 hostdata->busy[cmd->device->id] &= ~(1 << cmd->device->lun);
1272 hostdata->state = S_UNCONNECTED;
1284 spin_unlock_irqrestore(&hostdata->lock, flags);
1298 hostdata->state = S_UNCONNECTED;
1300 switch (hostdata->state) {
1302 hostdata->connected = NULL;
1303 hostdata->busy[cmd->device->id] &= ~(1 << cmd->device->lun);
1304 hostdata->state = S_UNCONNECTED;
1318 cmd->host_scribble = (uchar *) hostdata->disconnected_Q;
1319 hostdata->disconnected_Q = cmd;
1320 hostdata->connected = NULL;
1321 hostdata->state = S_UNCONNECTED;
1324 hostdata->disc_done_cnt[cmd->device->id]++;
1330 hostdata->state = S_UNCONNECTED;
1336 spin_unlock_irqrestore(&hostdata->lock, flags);
1351 if (hostdata->level2 <= L2_NONE) {
1353 if (hostdata->selecting) {
1354 cmd = (struct scsi_cmnd *) hostdata->selecting;
1355 hostdata->selecting = NULL;
1356 hostdata->busy[cmd->device->id] &= ~(1 << cmd->device->lun);
1358 (uchar *) hostdata->input_Q;
1359 hostdata->input_Q = cmd;
1367 hostdata->busy[cmd->device->id] &=
1370 (uchar *) hostdata->input_Q;
1371 hostdata->input_Q = cmd;
1395 if (hostdata->level2 < L2_RESELECT)
1448 cmd = (struct scsi_cmnd *) hostdata->disconnected_Q;
1463 spin_unlock_irqrestore(&hostdata->lock, flags);
1472 hostdata->disconnected_Q =
1474 hostdata->connected = cmd;
1476 /* We don't need to worry about 'initialize_SCp()' or 'hostdata->busy[]'
1486 if (hostdata->level2 >= L2_RESELECT) {
1490 hostdata->state = S_RUNNING_LEVEL2;
1492 hostdata->state = S_CONNECTED;
1494 spin_unlock_irqrestore(&hostdata->lock, flags);
1499 spin_unlock_irqrestore(&hostdata->lock, flags);
1509 struct WD33C93_hostdata *hostdata =
1510 (struct WD33C93_hostdata *) instance->hostdata;
1511 const wd33c93_regs regs = hostdata->regs;
1535 instance->this_id | hostdata->clock_freq);
1538 calc_sync_xfer(hostdata->default_sx_per / 4,
1539 DEFAULT_SX_OFF, 0, hostdata->sx_table));
1551 hostdata->microcode = read_wd33c93(regs, WD_CDB_1);
1553 hostdata->chip = C_WD33C93;
1558 hostdata->chip = C_WD33C93B;
1561 hostdata->chip = C_WD33C93A;
1563 hostdata->chip = C_UNKNOWN_CHIP;
1565 if (hostdata->chip != C_WD33C93B) /* Fast SCSI unavailable */
1566 hostdata->fast = 0;
1576 struct WD33C93_hostdata *hostdata;
1580 hostdata = (struct WD33C93_hostdata *) instance->hostdata;
1585 hostdata->dma_stop(instance, NULL, 0);
1587 hostdata->busy[i] = 0;
1588 hostdata->sync_xfer[i] =
1590 0, hostdata->sx_table);
1591 hostdata->sync_stat[i] = SS_UNSET; /* using default sync values */
1593 hostdata->input_Q = NULL;
1594 hostdata->selecting = NULL;
1595 hostdata->connected = NULL;
1596 hostdata->disconnected_Q = NULL;
1597 hostdata->state = S_UNCONNECTED;
1598 hostdata->dma = D_DMA_OFF;
1599 hostdata->incoming_ptr = 0;
1600 hostdata->outgoing_len = 0;
1612 struct WD33C93_hostdata *hostdata;
1619 hostdata = (struct WD33C93_hostdata *) instance->hostdata;
1620 regs = hostdata->regs;
1627 tmp = (struct scsi_cmnd *) hostdata->input_Q;
1634 hostdata->input_Q =
1660 if (hostdata->connected == cmd) {
1668 if (hostdata->dma == D_DMA_RUNNING) {
1669 hostdata->dma_stop(instance, cmd, 0);
1670 hostdata->dma = D_DMA_OFF;
1708 hostdata->busy[cmd->device->id] &= ~(1 << cmd->device->lun);
1709 hostdata->connected = NULL;
1710 hostdata->state = S_UNCONNECTED;
1727 tmp = (struct scsi_cmnd *) hostdata->disconnected_Q;
1935 struct WD33C93_hostdata *hostdata;
1944 hostdata = (struct WD33C93_hostdata *) instance->hostdata;
1946 hostdata->regs = regs;
1947 hostdata->clock_freq = set_clk_freq(clock_freq, &i);
1948 calc_sx_table(i, hostdata->sx_table);
1949 hostdata->dma_setup = setup;
1950 hostdata->dma_stop = stop;
1951 hostdata->dma_bounce_buffer = NULL;
1952 hostdata->dma_bounce_len = 0;
1954 hostdata->busy[i] = 0;
1955 hostdata->sync_xfer[i] =
1957 0, hostdata->sx_table);
1958 hostdata->sync_stat[i] = SS_UNSET; /* using default sync values */
1960 hostdata->cmd_cnt[i] = 0;
1961 hostdata->disc_allowed_cnt[i] = 0;
1962 hostdata->disc_done_cnt[i] = 0;
1965 hostdata->input_Q = NULL;
1966 hostdata->selecting = NULL;
1967 hostdata->connected = NULL;
1968 hostdata->disconnected_Q = NULL;
1969 hostdata->state = S_UNCONNECTED;
1970 hostdata->dma = D_DMA_OFF;
1971 hostdata->level2 = L2_BASIC;
1972 hostdata->disconnect = DIS_ADAPTIVE;
1973 hostdata->args = DEBUG_DEFAULTS;
1974 hostdata->incoming_ptr = 0;
1975 hostdata->outgoing_len = 0;
1976 hostdata->default_sx_per = DEFAULT_SX_PER;
1977 hostdata->no_dma = 0; /* default is DMA enabled */
1980 hostdata->proc = PR_VERSION | PR_INFO | PR_STATISTICS |
1983 hostdata->dma_cnt = 0;
1984 hostdata->pio_cnt = 0;
1985 hostdata->int_cnt = 0;
1990 hostdata->clock_freq = set_clk_freq(val, &val);
1991 calc_sx_table(val, hostdata->sx_table);
1995 hostdata->no_sync = val;
1998 hostdata->no_dma = (val == -1) ? 1 : val;
2001 hostdata->default_sx_per =
2002 hostdata->sx_table[round_period((unsigned int) val,
2003 hostdata->sx_table)].period_ns;
2007 hostdata->disconnect = val;
2009 hostdata->disconnect = DIS_ADAPTIVE;
2013 hostdata->level2 = val;
2016 hostdata->args = val & DB_MASK;
2019 hostdata->dma_mode = val ? CTRL_BURST:CTRL_DMA;
2021 if (WD33C93_FS_16_20 == hostdata->clock_freq /* divisor 4 */
2023 hostdata->fast = !!val;
2031 hostdata->proc = val;
2034 spin_lock_irq(&hostdata->lock);
2036 spin_unlock_irq(&hostdata->lock);
2040 (hostdata->chip == C_WD33C93) ? "WD33c93" : (hostdata->chip ==
2042 "WD33c93A" : (hostdata->chip ==
2044 hostdata->microcode, hostdata->no_sync, hostdata->no_dma);
2046 printk(" debug_flags=0x%02x\n", hostdata->args);
2070 hd = (struct WD33C93_hostdata *) instance->hostdata;