Lines Matching refs:hostdata

184 static int NCR5380_poll_politely2(struct NCR5380_hostdata *hostdata,  in NCR5380_poll_politely2()  argument
189 unsigned long n = hostdata->poll_loops; in NCR5380_poll_politely2()
273 struct NCR5380_hostdata *hostdata = shost_priv(instance); in NCR5380_print() local
323 struct NCR5380_hostdata *hostdata = shost_priv(instance); in NCR5380_print_phase() local
348 struct NCR5380_hostdata *hostdata = shost_priv(instance); in NCR5380_info() local
350 return hostdata->info; in NCR5380_info()
369 struct NCR5380_hostdata *hostdata = shost_priv(instance); in NCR5380_init() local
376 hostdata->host = instance; in NCR5380_init()
377 hostdata->id_mask = 1 << instance->this_id; in NCR5380_init()
378 hostdata->id_higher_mask = 0; in NCR5380_init()
379 for (i = hostdata->id_mask; i <= 0x80; i <<= 1) in NCR5380_init()
380 if (i > hostdata->id_mask) in NCR5380_init()
381 hostdata->id_higher_mask |= i; in NCR5380_init()
383 hostdata->busy[i] = 0; in NCR5380_init()
384 hostdata->dma_len = 0; in NCR5380_init()
386 spin_lock_init(&hostdata->lock); in NCR5380_init()
387 hostdata->connected = NULL; in NCR5380_init()
388 hostdata->sensing = NULL; in NCR5380_init()
389 INIT_LIST_HEAD(&hostdata->autosense); in NCR5380_init()
390 INIT_LIST_HEAD(&hostdata->unissued); in NCR5380_init()
391 INIT_LIST_HEAD(&hostdata->disconnected); in NCR5380_init()
393 hostdata->flags = flags; in NCR5380_init()
395 INIT_WORK(&hostdata->main_task, NCR5380_main); in NCR5380_init()
396 hostdata->work_q = alloc_workqueue("ncr5380_%d", in NCR5380_init()
399 if (!hostdata->work_q) in NCR5380_init()
402 snprintf(hostdata->info, sizeof(hostdata->info), in NCR5380_init()
404 instance->hostt->name, instance->irq, hostdata->io_port, in NCR5380_init()
405 hostdata->base, instance->can_queue, instance->cmd_per_lun, in NCR5380_init()
407 hostdata->flags & FLAG_DMA_FIXUP ? "DMA_FIXUP " : "", in NCR5380_init()
408 hostdata->flags & FLAG_NO_PSEUDO_DMA ? "NO_PSEUDO_DMA " : "", in NCR5380_init()
409 hostdata->flags & FLAG_TOSHIBA_DELAY ? "TOSHIBA_DELAY " : ""); in NCR5380_init()
429 hostdata->poll_loops = NCR5380_REG_POLL_TIME * accesses_per_ms / 2; in NCR5380_init()
450 struct NCR5380_hostdata *hostdata = shost_priv(instance); in NCR5380_maybe_reset_bus() local
459 NCR5380_poll_politely(hostdata, in NCR5380_maybe_reset_bus()
473 if (hostdata->flags & FLAG_TOSHIBA_DELAY) in NCR5380_maybe_reset_bus()
495 struct NCR5380_hostdata *hostdata = shost_priv(instance); in NCR5380_exit() local
497 cancel_work_sync(&hostdata->main_task); in NCR5380_exit()
498 destroy_workqueue(hostdata->work_q); in NCR5380_exit()
510 struct NCR5380_hostdata *hostdata = shost_priv(instance); in complete_cmd() local
514 if (hostdata->sensing == cmd) { in complete_cmd()
517 scsi_eh_restore_cmnd(cmd, &hostdata->ses); in complete_cmd()
520 scsi_eh_restore_cmnd(cmd, &hostdata->ses); in complete_cmd()
521 hostdata->sensing = NULL; in complete_cmd()
524 hostdata->busy[scmd_id(cmd)] &= ~(1 << cmd->device->lun); in complete_cmd()
542 struct NCR5380_hostdata *hostdata = shost_priv(instance); in NCR5380_queue_command() local
562 spin_lock_irqsave(&hostdata->lock, flags); in NCR5380_queue_command()
572 list_add(&ncmd->list, &hostdata->unissued); in NCR5380_queue_command()
574 list_add_tail(&ncmd->list, &hostdata->unissued); in NCR5380_queue_command()
576 spin_unlock_irqrestore(&hostdata->lock, flags); in NCR5380_queue_command()
582 queue_work(hostdata->work_q, &hostdata->main_task); in NCR5380_queue_command()
588 struct NCR5380_hostdata *hostdata = shost_priv(instance); in maybe_release_dma_irq() local
591 if (list_empty(&hostdata->disconnected) && in maybe_release_dma_irq()
592 list_empty(&hostdata->unissued) && in maybe_release_dma_irq()
593 list_empty(&hostdata->autosense) && in maybe_release_dma_irq()
594 !hostdata->connected && in maybe_release_dma_irq()
595 !hostdata->selecting) { in maybe_release_dma_irq()
613 struct NCR5380_hostdata *hostdata = shost_priv(instance); in dequeue_next_cmd() local
617 if (hostdata->sensing || list_empty(&hostdata->autosense)) { in dequeue_next_cmd()
618 list_for_each_entry(ncmd, &hostdata->unissued, list) { in dequeue_next_cmd()
621 cmd, scmd_id(cmd), hostdata->busy[scmd_id(cmd)], cmd->device->lun); in dequeue_next_cmd()
623 if (!(hostdata->busy[scmd_id(cmd)] & (1 << cmd->device->lun))) { in dequeue_next_cmd()
632 ncmd = list_first_entry(&hostdata->autosense, in dequeue_next_cmd()
638 scsi_eh_prep_cmnd(cmd, &hostdata->ses, NULL, 0, ~0); in dequeue_next_cmd()
639 hostdata->sensing = cmd; in dequeue_next_cmd()
647 struct NCR5380_hostdata *hostdata = shost_priv(instance); in requeue_cmd() local
650 if (hostdata->sensing == cmd) { in requeue_cmd()
651 scsi_eh_restore_cmnd(cmd, &hostdata->ses); in requeue_cmd()
652 list_add(&ncmd->list, &hostdata->autosense); in requeue_cmd()
653 hostdata->sensing = NULL; in requeue_cmd()
655 list_add(&ncmd->list, &hostdata->unissued); in requeue_cmd()
669 struct NCR5380_hostdata *hostdata = in NCR5380_main() local
671 struct Scsi_Host *instance = hostdata->host; in NCR5380_main()
677 spin_lock_irq(&hostdata->lock); in NCR5380_main()
678 while (!hostdata->connected && !hostdata->selecting) { in NCR5380_main()
708 if (hostdata->connected && !hostdata->dma_len) { in NCR5380_main()
713 spin_unlock_irq(&hostdata->lock); in NCR5380_main()
729 struct NCR5380_hostdata *hostdata = shost_priv(instance); in NCR5380_dma_complete() local
736 if (hostdata->read_overruns) { in NCR5380_dma_complete()
737 p = hostdata->connected->SCp.phase; in NCR5380_dma_complete()
751 if ((sun3scsi_dma_finish(rq_data_dir(hostdata->connected->request)))) { in NCR5380_dma_complete()
771 transferred = hostdata->dma_len - NCR5380_dma_residual(hostdata); in NCR5380_dma_complete()
772 hostdata->dma_len = 0; in NCR5380_dma_complete()
774 data = (unsigned char **)&hostdata->connected->SCp.ptr; in NCR5380_dma_complete()
775 count = &hostdata->connected->SCp.this_residual; in NCR5380_dma_complete()
779 if (hostdata->read_overruns) { in NCR5380_dma_complete()
783 cnt = toPIO = hostdata->read_overruns; in NCR5380_dma_complete()
839 struct NCR5380_hostdata *hostdata = shost_priv(instance); in NCR5380_intr() local
844 spin_lock_irqsave(&hostdata->lock, flags); in NCR5380_intr()
862 if (hostdata->connected) { in NCR5380_intr()
864 queue_work(hostdata->work_q, &hostdata->main_task); in NCR5380_intr()
869 } else if ((NCR5380_read(CURRENT_SCSI_DATA_REG) & hostdata->id_mask) && in NCR5380_intr()
877 if (!hostdata->connected) { in NCR5380_intr()
879 queue_work(hostdata->work_q, &hostdata->main_task); in NCR5380_intr()
881 if (!hostdata->connected) in NCR5380_intr()
882 NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask); in NCR5380_intr()
900 spin_unlock_irqrestore(&hostdata->lock, flags); in NCR5380_intr()
936 __releases(&hostdata->lock) __acquires(&hostdata->lock) in NCR5380_select()
938 struct NCR5380_hostdata *hostdata = shost_priv(instance); in NCR5380_select() local
955 hostdata->selecting = cmd; in NCR5380_select()
968 NCR5380_write(OUTPUT_DATA_REG, hostdata->id_mask); in NCR5380_select()
975 spin_unlock_irq(&hostdata->lock); in NCR5380_select()
976 err = NCR5380_poll_politely2(hostdata, MODE_REG, MR_ARBITRATE, 0, in NCR5380_select()
979 spin_lock_irq(&hostdata->lock); in NCR5380_select()
984 if (!hostdata->selecting) { in NCR5380_select()
995 spin_unlock_irq(&hostdata->lock); in NCR5380_select()
1002 (NCR5380_read(CURRENT_SCSI_DATA_REG) & hostdata->id_higher_mask) || in NCR5380_select()
1006 spin_lock_irq(&hostdata->lock); in NCR5380_select()
1022 if (hostdata->flags & FLAG_TOSHIBA_DELAY) in NCR5380_select()
1027 spin_lock_irq(&hostdata->lock); in NCR5380_select()
1033 if (!hostdata->selecting) { in NCR5380_select()
1046 NCR5380_write(OUTPUT_DATA_REG, hostdata->id_mask | (1 << scmd_id(cmd))); in NCR5380_select()
1064 spin_unlock_irq(&hostdata->lock); in NCR5380_select()
1102 err = NCR5380_poll_politely(hostdata, STATUS_REG, SR_BSY, SR_BSY, in NCR5380_select()
1106 spin_lock_irq(&hostdata->lock); in NCR5380_select()
1109 if (!hostdata->connected) in NCR5380_select()
1110 NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask); in NCR5380_select()
1116 spin_lock_irq(&hostdata->lock); in NCR5380_select()
1118 NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask); in NCR5380_select()
1120 if (hostdata->selecting) { in NCR5380_select()
1148 err = NCR5380_poll_politely(hostdata, STATUS_REG, SR_REQ, SR_REQ, HZ); in NCR5380_select()
1149 spin_lock_irq(&hostdata->lock); in NCR5380_select()
1153 NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask); in NCR5380_select()
1156 if (!hostdata->selecting) { in NCR5380_select()
1180 hostdata->connected = cmd; in NCR5380_select()
1181 hostdata->busy[cmd->device->id] |= 1 << cmd->device->lun; in NCR5380_select()
1192 if (!hostdata->selecting) in NCR5380_select()
1194 hostdata->selecting = NULL; in NCR5380_select()
1227 struct NCR5380_hostdata *hostdata = shost_priv(instance); in NCR5380_transfer_pio() local
1246 if (NCR5380_poll_politely(hostdata, STATUS_REG, SR_REQ, SR_REQ, HZ) < 0) in NCR5380_transfer_pio()
1291 if (NCR5380_poll_politely(hostdata, in NCR5380_transfer_pio()
1350 struct NCR5380_hostdata __maybe_unused *hostdata = shost_priv(instance); in do_reset() local
1373 struct NCR5380_hostdata *hostdata = shost_priv(instance); in do_abort() local
1391 rc = NCR5380_poll_politely(hostdata, STATUS_REG, SR_REQ, SR_REQ, 10 * HZ); in do_abort()
1402 rc = NCR5380_poll_politely(hostdata, STATUS_REG, SR_REQ, 0, 3 * HZ); in do_abort()
1449 struct NCR5380_hostdata *hostdata = shost_priv(instance); in NCR5380_transfer_dma() local
1461 hostdata->connected->SCp.phase = p; in NCR5380_transfer_dma()
1464 if (hostdata->read_overruns) in NCR5380_transfer_dma()
1465 c -= hostdata->read_overruns; in NCR5380_transfer_dma()
1466 else if (hostdata->flags & FLAG_DMA_FIXUP) in NCR5380_transfer_dma()
1482 if (!(hostdata->flags & FLAG_LATE_DMA_SETUP)) { in NCR5380_transfer_dma()
1487 result = NCR5380_dma_recv_setup(hostdata, d, c); in NCR5380_transfer_dma()
1489 result = NCR5380_dma_send_setup(hostdata, d, c); in NCR5380_transfer_dma()
1516 if (hostdata->flags & FLAG_LATE_DMA_SETUP) { in NCR5380_transfer_dma()
1521 result = NCR5380_dma_recv_setup(hostdata, d, c); in NCR5380_transfer_dma()
1523 result = NCR5380_dma_send_setup(hostdata, d, c); in NCR5380_transfer_dma()
1532 hostdata->dma_len = result; in NCR5380_transfer_dma()
1537 hostdata->dma_len = c; in NCR5380_transfer_dma()
1573 if (hostdata->flags & FLAG_DMA_FIXUP) { in NCR5380_transfer_dma()
1590 if (NCR5380_poll_politely(hostdata, BUS_AND_STATUS_REG, in NCR5380_transfer_dma()
1595 if (NCR5380_poll_politely(hostdata, STATUS_REG, in NCR5380_transfer_dma()
1606 if (NCR5380_poll_politely2(hostdata, in NCR5380_transfer_dma()
1637 __releases(&hostdata->lock) __acquires(&hostdata->lock) in NCR5380_information_transfer()
1639 struct NCR5380_hostdata *hostdata = shost_priv(instance); in NCR5380_information_transfer() local
1652 while ((cmd = hostdata->connected)) { in NCR5380_information_transfer()
1675 count = sun3scsi_dma_xfer_len(hostdata, cmd); in NCR5380_information_transfer()
1679 sun3scsi_dma_send_setup(hostdata, in NCR5380_information_transfer()
1682 sun3scsi_dma_recv_setup(hostdata, in NCR5380_information_transfer()
1713 hostdata->connected = NULL; in NCR5380_information_transfer()
1744 transfersize = NCR5380_dma_xfer_len(hostdata, cmd); in NCR5380_information_transfer()
1795 hostdata->connected = NULL; in NCR5380_information_transfer()
1809 &hostdata->autosense); in NCR5380_information_transfer()
1821 NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask); in NCR5380_information_transfer()
1828 switch (hostdata->last_message) { in NCR5380_information_transfer()
1833 hostdata->busy[cmd->device->id] |= (1 << (cmd->device->lun & 0xFF)); in NCR5380_information_transfer()
1842 hostdata->connected = NULL; in NCR5380_information_transfer()
1843 list_add(&ncmd->list, &hostdata->disconnected); in NCR5380_information_transfer()
1855 NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask); in NCR5380_information_transfer()
1884 spin_unlock_irq(&hostdata->lock); in NCR5380_information_transfer()
1922 spin_lock_irq(&hostdata->lock); in NCR5380_information_transfer()
1923 if (!hostdata->connected) in NCR5380_information_transfer()
1950 hostdata->last_message = msgout; in NCR5380_information_transfer()
1953 hostdata->connected = NULL; in NCR5380_information_transfer()
1957 NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask); in NCR5380_information_transfer()
1983 spin_unlock_irq(&hostdata->lock); in NCR5380_information_transfer()
1984 NCR5380_poll_politely(hostdata, STATUS_REG, SR_REQ, SR_REQ, HZ); in NCR5380_information_transfer()
1985 spin_lock_irq(&hostdata->lock); in NCR5380_information_transfer()
2002 struct NCR5380_hostdata *hostdata = shost_priv(instance); in NCR5380_reselect() local
2016 target_mask = NCR5380_read(CURRENT_SCSI_DATA_REG) & ~(hostdata->id_mask); in NCR5380_reselect()
2030 if (NCR5380_poll_politely(hostdata, in NCR5380_reselect()
2041 if (NCR5380_poll_politely(hostdata, in NCR5380_reselect()
2089 list_for_each_entry(ncmd, &hostdata->disconnected, list) { in NCR5380_reselect()
2125 count = sun3scsi_dma_xfer_len(hostdata, tmp); in NCR5380_reselect()
2129 sun3scsi_dma_send_setup(hostdata, in NCR5380_reselect()
2132 sun3scsi_dma_recv_setup(hostdata, in NCR5380_reselect()
2144 hostdata->connected = tmp; in NCR5380_reselect()
2216 struct NCR5380_hostdata *hostdata = shost_priv(instance); in NCR5380_abort() local
2220 spin_lock_irqsave(&hostdata->lock, flags); in NCR5380_abort()
2228 if (list_del_cmd(&hostdata->unissued, cmd)) { in NCR5380_abort()
2236 if (hostdata->selecting == cmd) { in NCR5380_abort()
2239 hostdata->selecting = NULL; in NCR5380_abort()
2245 if (list_del_cmd(&hostdata->disconnected, cmd)) { in NCR5380_abort()
2257 if (hostdata->connected == cmd) { in NCR5380_abort()
2259 hostdata->connected = NULL; in NCR5380_abort()
2260 hostdata->dma_len = 0; in NCR5380_abort()
2272 if (list_del_cmd(&hostdata->autosense, cmd)) { in NCR5380_abort()
2285 queue_work(hostdata->work_q, &hostdata->main_task); in NCR5380_abort()
2287 spin_unlock_irqrestore(&hostdata->lock, flags); in NCR5380_abort()
2303 struct NCR5380_hostdata *hostdata = shost_priv(instance); in NCR5380_host_reset() local
2308 spin_lock_irqsave(&hostdata->lock, flags); in NCR5380_host_reset()
2329 if (list_del_cmd(&hostdata->unissued, cmd)) { in NCR5380_host_reset()
2334 if (hostdata->selecting) { in NCR5380_host_reset()
2335 hostdata->selecting->result = DID_RESET << 16; in NCR5380_host_reset()
2336 complete_cmd(instance, hostdata->selecting); in NCR5380_host_reset()
2337 hostdata->selecting = NULL; in NCR5380_host_reset()
2340 list_for_each_entry(ncmd, &hostdata->disconnected, list) { in NCR5380_host_reset()
2346 INIT_LIST_HEAD(&hostdata->disconnected); in NCR5380_host_reset()
2348 list_for_each_entry(ncmd, &hostdata->autosense, list) { in NCR5380_host_reset()
2354 INIT_LIST_HEAD(&hostdata->autosense); in NCR5380_host_reset()
2356 if (hostdata->connected) { in NCR5380_host_reset()
2357 set_host_byte(hostdata->connected, DID_RESET); in NCR5380_host_reset()
2358 complete_cmd(instance, hostdata->connected); in NCR5380_host_reset()
2359 hostdata->connected = NULL; in NCR5380_host_reset()
2363 hostdata->busy[i] = 0; in NCR5380_host_reset()
2364 hostdata->dma_len = 0; in NCR5380_host_reset()
2366 queue_work(hostdata->work_q, &hostdata->main_task); in NCR5380_host_reset()
2368 spin_unlock_irqrestore(&hostdata->lock, flags); in NCR5380_host_reset()