Lines Matching defs:hostdata
193 * @hostdata: host private data
210 static int NCR5380_poll_politely2(struct NCR5380_hostdata *hostdata,
215 unsigned long n = hostdata->poll_loops;
299 struct NCR5380_hostdata *hostdata = shost_priv(instance);
348 struct NCR5380_hostdata *hostdata = shost_priv(instance);
373 struct NCR5380_hostdata *hostdata = shost_priv(instance);
375 return hostdata->info;
394 struct NCR5380_hostdata *hostdata = shost_priv(instance);
401 hostdata->host = instance;
402 hostdata->id_mask = 1 << instance->this_id;
403 hostdata->id_higher_mask = 0;
404 for (i = hostdata->id_mask; i <= 0x80; i <<= 1)
405 if (i > hostdata->id_mask)
406 hostdata->id_higher_mask |= i;
408 hostdata->busy[i] = 0;
409 hostdata->dma_len = 0;
411 spin_lock_init(&hostdata->lock);
412 hostdata->connected = NULL;
413 hostdata->sensing = NULL;
414 INIT_LIST_HEAD(&hostdata->autosense);
415 INIT_LIST_HEAD(&hostdata->unissued);
416 INIT_LIST_HEAD(&hostdata->disconnected);
418 hostdata->flags = flags;
420 INIT_WORK(&hostdata->main_task, NCR5380_main);
421 hostdata->work_q = alloc_workqueue("ncr5380_%d",
424 if (!hostdata->work_q)
427 snprintf(hostdata->info, sizeof(hostdata->info),
429 instance->hostt->name, instance->irq, hostdata->io_port,
430 hostdata->base, instance->can_queue, instance->cmd_per_lun,
432 hostdata->flags & FLAG_DMA_FIXUP ? "DMA_FIXUP " : "",
433 hostdata->flags & FLAG_NO_PSEUDO_DMA ? "NO_PSEUDO_DMA " : "",
434 hostdata->flags & FLAG_TOSHIBA_DELAY ? "TOSHIBA_DELAY " : "");
454 hostdata->poll_loops = NCR5380_REG_POLL_TIME * accesses_per_ms / 2;
475 struct NCR5380_hostdata *hostdata = shost_priv(instance);
484 NCR5380_poll_politely(hostdata,
498 if (hostdata->flags & FLAG_TOSHIBA_DELAY)
520 struct NCR5380_hostdata *hostdata = shost_priv(instance);
522 cancel_work_sync(&hostdata->main_task);
523 destroy_workqueue(hostdata->work_q);
535 struct NCR5380_hostdata *hostdata = shost_priv(instance);
539 if (hostdata->sensing == cmd) {
542 scsi_eh_restore_cmnd(cmd, &hostdata->ses);
544 scsi_eh_restore_cmnd(cmd, &hostdata->ses);
547 hostdata->sensing = NULL;
566 struct NCR5380_hostdata *hostdata = shost_priv(instance);
586 spin_lock_irqsave(&hostdata->lock, flags);
596 list_add(&ncmd->list, &hostdata->unissued);
598 list_add_tail(&ncmd->list, &hostdata->unissued);
600 spin_unlock_irqrestore(&hostdata->lock, flags);
606 queue_work(hostdata->work_q, &hostdata->main_task);
612 struct NCR5380_hostdata *hostdata = shost_priv(instance);
615 if (list_empty(&hostdata->disconnected) &&
616 list_empty(&hostdata->unissued) &&
617 list_empty(&hostdata->autosense) &&
618 !hostdata->connected &&
619 !hostdata->selecting) {
637 struct NCR5380_hostdata *hostdata = shost_priv(instance);
641 if (hostdata->sensing || list_empty(&hostdata->autosense)) {
642 list_for_each_entry(ncmd, &hostdata->unissued, list) {
645 cmd, scmd_id(cmd), hostdata->busy[scmd_id(cmd)], cmd->device->lun);
647 if (!(hostdata->busy[scmd_id(cmd)] & (1 << cmd->device->lun))) {
656 ncmd = list_first_entry(&hostdata->autosense,
662 scsi_eh_prep_cmnd(cmd, &hostdata->ses, NULL, 0, ~0);
663 hostdata->sensing = cmd;
671 struct NCR5380_hostdata *hostdata = shost_priv(instance);
674 if (hostdata->sensing == cmd) {
675 scsi_eh_restore_cmnd(cmd, &hostdata->ses);
676 list_add(&ncmd->list, &hostdata->autosense);
677 hostdata->sensing = NULL;
679 list_add(&ncmd->list, &hostdata->unissued);
693 struct NCR5380_hostdata *hostdata =
695 struct Scsi_Host *instance = hostdata->host;
701 spin_lock_irq(&hostdata->lock);
702 while (!hostdata->connected && !hostdata->selecting) {
712 * On success, instance->hostdata->connected is set.
732 if (hostdata->connected && !hostdata->dma_len) {
737 if (!hostdata->connected)
738 NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
739 spin_unlock_irq(&hostdata->lock);
755 struct NCR5380_hostdata *hostdata = shost_priv(instance);
762 if (hostdata->read_overruns) {
763 p = hostdata->connected->SCp.phase;
777 if ((sun3scsi_dma_finish(rq_data_dir(hostdata->connected->request)))) {
797 transferred = hostdata->dma_len - NCR5380_dma_residual(hostdata);
798 hostdata->dma_len = 0;
800 data = (unsigned char **)&hostdata->connected->SCp.ptr;
801 count = &hostdata->connected->SCp.this_residual;
805 if (hostdata->read_overruns) {
809 cnt = toPIO = hostdata->read_overruns;
865 struct NCR5380_hostdata *hostdata = shost_priv(instance);
870 spin_lock_irqsave(&hostdata->lock, flags);
888 if (hostdata->connected) {
890 queue_work(hostdata->work_q, &hostdata->main_task);
895 } else if ((NCR5380_read(CURRENT_SCSI_DATA_REG) & hostdata->id_mask) &&
903 if (!hostdata->connected) {
905 queue_work(hostdata->work_q, &hostdata->main_task);
907 if (!hostdata->connected)
908 NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
933 spin_unlock_irqrestore(&hostdata->lock, flags);
956 * hostdata->connected will be set to cmd.
964 __releases(&hostdata->lock) __acquires(&hostdata->lock)
966 struct NCR5380_hostdata *hostdata = shost_priv(instance);
987 hostdata->selecting = cmd;
1000 NCR5380_write(OUTPUT_DATA_REG, hostdata->id_mask);
1007 spin_unlock_irq(&hostdata->lock);
1008 err = NCR5380_poll_politely2(hostdata, MODE_REG, MR_ARBITRATE, 0,
1011 spin_lock_irq(&hostdata->lock);
1016 if (!hostdata->selecting) {
1027 spin_unlock_irq(&hostdata->lock);
1034 (NCR5380_read(CURRENT_SCSI_DATA_REG) & hostdata->id_higher_mask) ||
1038 spin_lock_irq(&hostdata->lock);
1054 if (hostdata->flags & FLAG_TOSHIBA_DELAY)
1059 spin_lock_irq(&hostdata->lock);
1065 if (!hostdata->selecting) {
1078 NCR5380_write(OUTPUT_DATA_REG, hostdata->id_mask | (1 << scmd_id(cmd)));
1096 spin_unlock_irq(&hostdata->lock);
1134 err = NCR5380_poll_politely(hostdata, STATUS_REG, SR_BSY, SR_BSY,
1138 spin_lock_irq(&hostdata->lock);
1146 spin_lock_irq(&hostdata->lock);
1150 if (!hostdata->selecting)
1180 err = NCR5380_poll_politely(hostdata, STATUS_REG, SR_REQ, SR_REQ, HZ);
1181 spin_lock_irq(&hostdata->lock);
1187 if (!hostdata->selecting) {
1211 hostdata->connected = cmd;
1212 hostdata->busy[cmd->device->id] |= 1 << cmd->device->lun;
1223 if (!hostdata->selecting)
1225 hostdata->selecting = NULL;
1258 struct NCR5380_hostdata *hostdata = shost_priv(instance);
1277 if (NCR5380_poll_politely(hostdata, STATUS_REG, SR_REQ, SR_REQ, HZ) < 0)
1322 if (NCR5380_poll_politely(hostdata,
1381 struct NCR5380_hostdata __maybe_unused *hostdata = shost_priv(instance);
1404 struct NCR5380_hostdata *hostdata = shost_priv(instance);
1422 rc = NCR5380_poll_politely(hostdata, STATUS_REG, SR_REQ, SR_REQ, 10 * HZ);
1433 rc = NCR5380_poll_politely(hostdata, STATUS_REG, SR_REQ, 0, 3 * HZ);
1480 struct NCR5380_hostdata *hostdata = shost_priv(instance);
1492 hostdata->connected->SCp.phase = p;
1495 if (hostdata->read_overruns)
1496 c -= hostdata->read_overruns;
1497 else if (hostdata->flags & FLAG_DMA_FIXUP)
1513 if (!(hostdata->flags & FLAG_LATE_DMA_SETUP)) {
1518 result = NCR5380_dma_recv_setup(hostdata, d, c);
1520 result = NCR5380_dma_send_setup(hostdata, d, c);
1547 if (hostdata->flags & FLAG_LATE_DMA_SETUP) {
1552 result = NCR5380_dma_recv_setup(hostdata, d, c);
1554 result = NCR5380_dma_send_setup(hostdata, d, c);
1563 hostdata->dma_len = result;
1568 hostdata->dma_len = c;
1604 if (hostdata->flags & FLAG_DMA_FIXUP) {
1621 if (NCR5380_poll_politely(hostdata, BUS_AND_STATUS_REG,
1626 if (NCR5380_poll_politely(hostdata, STATUS_REG,
1637 if (NCR5380_poll_politely2(hostdata,
1668 __releases(&hostdata->lock) __acquires(&hostdata->lock)
1670 struct NCR5380_hostdata *hostdata = shost_priv(instance);
1683 while ((cmd = hostdata->connected)) {
1701 count = sun3scsi_dma_xfer_len(hostdata, cmd);
1705 sun3scsi_dma_send_setup(hostdata,
1708 sun3scsi_dma_recv_setup(hostdata,
1739 hostdata->connected = NULL;
1740 hostdata->busy[scmd_id(cmd)] &= ~(1 << cmd->device->lun);
1767 transfersize = NCR5380_dma_xfer_len(hostdata, cmd);
1816 hostdata->connected = NULL;
1817 hostdata->busy[scmd_id(cmd)] &= ~(1 << cmd->device->lun);
1833 &hostdata->autosense);
1849 switch (hostdata->last_message) {
1854 hostdata->busy[cmd->device->id] |= (1 << (cmd->device->lun & 0xFF));
1863 hostdata->connected = NULL;
1864 list_add(&ncmd->list, &hostdata->disconnected);
1903 spin_unlock_irq(&hostdata->lock);
1941 spin_lock_irq(&hostdata->lock);
1942 if (!hostdata->connected)
1969 hostdata->last_message = msgout;
1972 hostdata->connected = NULL;
1973 hostdata->busy[scmd_id(cmd)] &= ~(1 << cmd->device->lun);
2002 spin_unlock_irq(&hostdata->lock);
2003 NCR5380_poll_politely(hostdata, STATUS_REG, SR_REQ, SR_REQ, HZ);
2004 spin_lock_irq(&hostdata->lock);
2021 struct NCR5380_hostdata *hostdata = shost_priv(instance);
2035 target_mask = NCR5380_read(CURRENT_SCSI_DATA_REG) & ~(hostdata->id_mask);
2052 if (NCR5380_poll_politely(hostdata,
2064 if (NCR5380_poll_politely(hostdata,
2116 list_for_each_entry(ncmd, &hostdata->disconnected, list) {
2140 hostdata->busy[target] &= ~(1 << lun);
2150 count = sun3scsi_dma_xfer_len(hostdata, tmp);
2154 sun3scsi_dma_send_setup(hostdata,
2157 sun3scsi_dma_recv_setup(hostdata,
2169 hostdata->connected = tmp;
2241 struct NCR5380_hostdata *hostdata = shost_priv(instance);
2245 spin_lock_irqsave(&hostdata->lock, flags);
2253 if (list_del_cmd(&hostdata->unissued, cmd)) {
2261 if (hostdata->selecting == cmd) {
2264 hostdata->selecting = NULL;
2270 if (list_del_cmd(&hostdata->disconnected, cmd)) {
2282 if (hostdata->connected == cmd) {
2284 hostdata->connected = NULL;
2285 hostdata->dma_len = 0;
2297 if (list_del_cmd(&hostdata->autosense, cmd)) {
2307 hostdata->busy[scmd_id(cmd)] &= ~(1 << cmd->device->lun);
2311 queue_work(hostdata->work_q, &hostdata->main_task);
2313 spin_unlock_irqrestore(&hostdata->lock, flags);
2321 struct NCR5380_hostdata *hostdata = shost_priv(instance);
2336 if (hostdata->selecting) {
2337 hostdata->selecting->result = DID_RESET << 16;
2338 complete_cmd(instance, hostdata->selecting);
2339 hostdata->selecting = NULL;
2342 list_for_each_entry(ncmd, &hostdata->disconnected, list) {
2348 INIT_LIST_HEAD(&hostdata->disconnected);
2350 list_for_each_entry(ncmd, &hostdata->autosense, list) {
2355 INIT_LIST_HEAD(&hostdata->autosense);
2357 if (hostdata->connected) {
2358 set_host_byte(hostdata->connected, DID_RESET);
2359 complete_cmd(instance, hostdata->connected);
2360 hostdata->connected = NULL;
2364 hostdata->busy[i] = 0;
2365 hostdata->dma_len = 0;
2367 queue_work(hostdata->work_q, &hostdata->main_task);
2381 struct NCR5380_hostdata *hostdata = shost_priv(instance);
2385 spin_lock_irqsave(&hostdata->lock, flags);
2393 list_for_each_entry(ncmd, &hostdata->unissued, list) {
2399 INIT_LIST_HEAD(&hostdata->unissued);
2404 spin_unlock_irqrestore(&hostdata->lock, flags);