Lines Matching refs:hostdata

205 static int NCR5380_poll_politely2(struct NCR5380_hostdata *hostdata,  in NCR5380_poll_politely2()  argument
210 unsigned long n = hostdata->poll_loops; in NCR5380_poll_politely2()
294 struct NCR5380_hostdata *hostdata = shost_priv(instance); in NCR5380_print() local
343 struct NCR5380_hostdata *hostdata = shost_priv(instance); in NCR5380_print_phase() local
368 struct NCR5380_hostdata *hostdata = shost_priv(instance); in NCR5380_info() local
370 return hostdata->info; in NCR5380_info()
389 struct NCR5380_hostdata *hostdata = shost_priv(instance); in NCR5380_init() local
396 hostdata->host = instance; in NCR5380_init()
397 hostdata->id_mask = 1 << instance->this_id; in NCR5380_init()
398 hostdata->id_higher_mask = 0; in NCR5380_init()
399 for (i = hostdata->id_mask; i <= 0x80; i <<= 1) in NCR5380_init()
400 if (i > hostdata->id_mask) in NCR5380_init()
401 hostdata->id_higher_mask |= i; in NCR5380_init()
403 hostdata->busy[i] = 0; in NCR5380_init()
404 hostdata->dma_len = 0; in NCR5380_init()
406 spin_lock_init(&hostdata->lock); in NCR5380_init()
407 hostdata->connected = NULL; in NCR5380_init()
408 hostdata->sensing = NULL; in NCR5380_init()
409 INIT_LIST_HEAD(&hostdata->autosense); in NCR5380_init()
410 INIT_LIST_HEAD(&hostdata->unissued); in NCR5380_init()
411 INIT_LIST_HEAD(&hostdata->disconnected); in NCR5380_init()
413 hostdata->flags = flags; in NCR5380_init()
415 INIT_WORK(&hostdata->main_task, NCR5380_main); in NCR5380_init()
416 hostdata->work_q = alloc_workqueue("ncr5380_%d", in NCR5380_init()
419 if (!hostdata->work_q) in NCR5380_init()
422 snprintf(hostdata->info, sizeof(hostdata->info), in NCR5380_init()
424 instance->hostt->name, instance->irq, hostdata->io_port, in NCR5380_init()
425 hostdata->base, instance->can_queue, instance->cmd_per_lun, in NCR5380_init()
427 hostdata->flags & FLAG_DMA_FIXUP ? "DMA_FIXUP " : "", in NCR5380_init()
428 hostdata->flags & FLAG_NO_PSEUDO_DMA ? "NO_PSEUDO_DMA " : "", in NCR5380_init()
429 hostdata->flags & FLAG_TOSHIBA_DELAY ? "TOSHIBA_DELAY " : ""); in NCR5380_init()
449 hostdata->poll_loops = NCR5380_REG_POLL_TIME * accesses_per_ms / 2; in NCR5380_init()
470 struct NCR5380_hostdata *hostdata = shost_priv(instance); in NCR5380_maybe_reset_bus() local
479 NCR5380_poll_politely(hostdata, in NCR5380_maybe_reset_bus()
493 if (hostdata->flags & FLAG_TOSHIBA_DELAY) in NCR5380_maybe_reset_bus()
515 struct NCR5380_hostdata *hostdata = shost_priv(instance); in NCR5380_exit() local
517 cancel_work_sync(&hostdata->main_task); in NCR5380_exit()
518 destroy_workqueue(hostdata->work_q); in NCR5380_exit()
530 struct NCR5380_hostdata *hostdata = shost_priv(instance); in complete_cmd() local
534 if (hostdata->sensing == cmd) { in complete_cmd()
537 scsi_eh_restore_cmnd(cmd, &hostdata->ses); in complete_cmd()
539 scsi_eh_restore_cmnd(cmd, &hostdata->ses); in complete_cmd()
542 hostdata->sensing = NULL; in complete_cmd()
561 struct NCR5380_hostdata *hostdata = shost_priv(instance); in NCR5380_queue_command() local
578 spin_lock_irqsave(&hostdata->lock, flags); in NCR5380_queue_command()
581 spin_unlock_irqrestore(&hostdata->lock, flags); in NCR5380_queue_command()
594 list_add(&ncmd->list, &hostdata->unissued); in NCR5380_queue_command()
596 list_add_tail(&ncmd->list, &hostdata->unissued); in NCR5380_queue_command()
598 spin_unlock_irqrestore(&hostdata->lock, flags); in NCR5380_queue_command()
604 queue_work(hostdata->work_q, &hostdata->main_task); in NCR5380_queue_command()
610 struct NCR5380_hostdata *hostdata = shost_priv(instance); in maybe_release_dma_irq() local
613 if (list_empty(&hostdata->disconnected) && in maybe_release_dma_irq()
614 list_empty(&hostdata->unissued) && in maybe_release_dma_irq()
615 list_empty(&hostdata->autosense) && in maybe_release_dma_irq()
616 !hostdata->connected && in maybe_release_dma_irq()
617 !hostdata->selecting) { in maybe_release_dma_irq()
635 struct NCR5380_hostdata *hostdata = shost_priv(instance); in dequeue_next_cmd() local
639 if (hostdata->sensing || list_empty(&hostdata->autosense)) { in dequeue_next_cmd()
640 list_for_each_entry(ncmd, &hostdata->unissued, list) { in dequeue_next_cmd()
643 cmd, scmd_id(cmd), hostdata->busy[scmd_id(cmd)], cmd->device->lun); in dequeue_next_cmd()
645 if (!(hostdata->busy[scmd_id(cmd)] & (1 << cmd->device->lun))) { in dequeue_next_cmd()
654 ncmd = list_first_entry(&hostdata->autosense, in dequeue_next_cmd()
660 scsi_eh_prep_cmnd(cmd, &hostdata->ses, NULL, 0, ~0); in dequeue_next_cmd()
661 hostdata->sensing = cmd; in dequeue_next_cmd()
669 struct NCR5380_hostdata *hostdata = shost_priv(instance); in requeue_cmd() local
672 if (hostdata->sensing == cmd) { in requeue_cmd()
673 scsi_eh_restore_cmnd(cmd, &hostdata->ses); in requeue_cmd()
674 list_add(&ncmd->list, &hostdata->autosense); in requeue_cmd()
675 hostdata->sensing = NULL; in requeue_cmd()
677 list_add(&ncmd->list, &hostdata->unissued); in requeue_cmd()
691 struct NCR5380_hostdata *hostdata = in NCR5380_main() local
693 struct Scsi_Host *instance = hostdata->host; in NCR5380_main()
699 spin_lock_irq(&hostdata->lock); in NCR5380_main()
700 while (!hostdata->connected && !hostdata->selecting) { in NCR5380_main()
729 if (hostdata->connected && !hostdata->dma_len) { in NCR5380_main()
734 if (!hostdata->connected) { in NCR5380_main()
735 NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask); in NCR5380_main()
738 spin_unlock_irq(&hostdata->lock); in NCR5380_main()
754 struct NCR5380_hostdata *hostdata = shost_priv(instance); in NCR5380_dma_complete() local
755 struct NCR5380_cmd *ncmd = NCR5380_to_ncmd(hostdata->connected); in NCR5380_dma_complete()
762 if (hostdata->read_overruns) { in NCR5380_dma_complete()
777 if (sun3scsi_dma_finish(hostdata->connected->sc_data_direction)) { in NCR5380_dma_complete()
797 transferred = hostdata->dma_len - NCR5380_dma_residual(hostdata); in NCR5380_dma_complete()
798 hostdata->dma_len = 0; in NCR5380_dma_complete()
805 if (hostdata->read_overruns) { in NCR5380_dma_complete()
809 cnt = toPIO = hostdata->read_overruns; in NCR5380_dma_complete()
865 struct NCR5380_hostdata *hostdata = shost_priv(instance); in NCR5380_intr() local
870 spin_lock_irqsave(&hostdata->lock, flags); in NCR5380_intr()
888 if (hostdata->connected) { in NCR5380_intr()
890 queue_work(hostdata->work_q, &hostdata->main_task); in NCR5380_intr()
895 } else if ((NCR5380_read(CURRENT_SCSI_DATA_REG) & hostdata->id_mask) && in NCR5380_intr()
903 if (!hostdata->connected) { in NCR5380_intr()
905 queue_work(hostdata->work_q, &hostdata->main_task); in NCR5380_intr()
907 if (!hostdata->connected) in NCR5380_intr()
908 NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask); in NCR5380_intr()
933 spin_unlock_irqrestore(&hostdata->lock, flags); in NCR5380_intr()
964 __releases(&hostdata->lock) __acquires(&hostdata->lock) in NCR5380_select()
966 struct NCR5380_hostdata *hostdata = shost_priv(instance); in NCR5380_select() local
987 hostdata->selecting = cmd; in NCR5380_select()
1000 NCR5380_write(OUTPUT_DATA_REG, hostdata->id_mask); in NCR5380_select()
1007 spin_unlock_irq(&hostdata->lock); in NCR5380_select()
1008 err = NCR5380_poll_politely2(hostdata, MODE_REG, MR_ARBITRATE, 0, in NCR5380_select()
1011 spin_lock_irq(&hostdata->lock); in NCR5380_select()
1016 if (!hostdata->selecting) { in NCR5380_select()
1027 spin_unlock_irq(&hostdata->lock); in NCR5380_select()
1034 (NCR5380_read(CURRENT_SCSI_DATA_REG) & hostdata->id_higher_mask) || in NCR5380_select()
1038 spin_lock_irq(&hostdata->lock); in NCR5380_select()
1054 if (hostdata->flags & FLAG_TOSHIBA_DELAY) in NCR5380_select()
1059 spin_lock_irq(&hostdata->lock); in NCR5380_select()
1065 if (!hostdata->selecting) { in NCR5380_select()
1078 NCR5380_write(OUTPUT_DATA_REG, hostdata->id_mask | (1 << scmd_id(cmd))); in NCR5380_select()
1096 spin_unlock_irq(&hostdata->lock); in NCR5380_select()
1134 err = NCR5380_poll_politely(hostdata, STATUS_REG, SR_BSY, SR_BSY, in NCR5380_select()
1138 spin_lock_irq(&hostdata->lock); in NCR5380_select()
1146 spin_lock_irq(&hostdata->lock); in NCR5380_select()
1150 if (!hostdata->selecting) in NCR5380_select()
1180 err = NCR5380_poll_politely(hostdata, STATUS_REG, SR_REQ, SR_REQ, HZ); in NCR5380_select()
1181 spin_lock_irq(&hostdata->lock); in NCR5380_select()
1187 if (!hostdata->selecting) { in NCR5380_select()
1211 hostdata->connected = cmd; in NCR5380_select()
1212 hostdata->busy[cmd->device->id] |= 1 << cmd->device->lun; in NCR5380_select()
1223 if (!hostdata->selecting) in NCR5380_select()
1225 hostdata->selecting = NULL; in NCR5380_select()
1250 struct NCR5380_hostdata *hostdata = shost_priv(instance); in NCR5380_transfer_pio() local
1269 if (NCR5380_poll_politely(hostdata, STATUS_REG, SR_REQ | SR_BSY, in NCR5380_transfer_pio()
1315 if (NCR5380_poll_politely(hostdata, in NCR5380_transfer_pio()
1371 struct NCR5380_hostdata __maybe_unused *hostdata = shost_priv(instance); in do_reset() local
1395 struct NCR5380_hostdata *hostdata = shost_priv(instance); in do_abort() local
1413 rc = NCR5380_poll_politely(hostdata, STATUS_REG, SR_REQ, SR_REQ, in do_abort()
1425 rc = NCR5380_poll_politely(hostdata, STATUS_REG, SR_REQ, 0, in do_abort()
1473 struct NCR5380_hostdata *hostdata = shost_priv(instance); in NCR5380_transfer_dma() local
1474 struct NCR5380_cmd *ncmd = NCR5380_to_ncmd(hostdata->connected); in NCR5380_transfer_dma()
1489 if (hostdata->read_overruns) in NCR5380_transfer_dma()
1490 c -= hostdata->read_overruns; in NCR5380_transfer_dma()
1491 else if (hostdata->flags & FLAG_DMA_FIXUP) in NCR5380_transfer_dma()
1507 if (!(hostdata->flags & FLAG_LATE_DMA_SETUP)) { in NCR5380_transfer_dma()
1512 result = NCR5380_dma_recv_setup(hostdata, d, c); in NCR5380_transfer_dma()
1514 result = NCR5380_dma_send_setup(hostdata, d, c); in NCR5380_transfer_dma()
1541 if (hostdata->flags & FLAG_LATE_DMA_SETUP) { in NCR5380_transfer_dma()
1546 result = NCR5380_dma_recv_setup(hostdata, d, c); in NCR5380_transfer_dma()
1548 result = NCR5380_dma_send_setup(hostdata, d, c); in NCR5380_transfer_dma()
1557 hostdata->dma_len = result; in NCR5380_transfer_dma()
1562 hostdata->dma_len = c; in NCR5380_transfer_dma()
1600 if ((hostdata->flags & FLAG_DMA_FIXUP) && in NCR5380_transfer_dma()
1620 if (!NCR5380_poll_politely(hostdata, BUS_AND_STATUS_REG, in NCR5380_transfer_dma()
1624 if (!NCR5380_poll_politely(hostdata, STATUS_REG, in NCR5380_transfer_dma()
1630 scmd_printk(KERN_ERR, hostdata->connected, in NCR5380_transfer_dma()
1636 scmd_printk(KERN_ERR, hostdata->connected, in NCR5380_transfer_dma()
1660 __releases(&hostdata->lock) __acquires(&hostdata->lock) in NCR5380_information_transfer()
1662 struct NCR5380_hostdata *hostdata = shost_priv(instance); in NCR5380_information_transfer() local
1675 while ((cmd = hostdata->connected)) { in NCR5380_information_transfer()
1693 count = sun3scsi_dma_xfer_len(hostdata, cmd); in NCR5380_information_transfer()
1697 sun3scsi_dma_send_setup(hostdata, in NCR5380_information_transfer()
1700 sun3scsi_dma_recv_setup(hostdata, in NCR5380_information_transfer()
1731 hostdata->connected = NULL; in NCR5380_information_transfer()
1732 hostdata->busy[scmd_id(cmd)] &= ~(1 << cmd->device->lun); in NCR5380_information_transfer()
1759 transfersize = NCR5380_dma_xfer_len(hostdata, cmd); in NCR5380_information_transfer()
1813 hostdata->connected = NULL; in NCR5380_information_transfer()
1814 hostdata->busy[scmd_id(cmd)] &= ~(1 << cmd->device->lun); in NCR5380_information_transfer()
1828 &hostdata->autosense); in NCR5380_information_transfer()
1843 switch (hostdata->last_message) { in NCR5380_information_transfer()
1848 hostdata->busy[cmd->device->id] |= (1 << (cmd->device->lun & 0xFF)); in NCR5380_information_transfer()
1857 hostdata->connected = NULL; in NCR5380_information_transfer()
1858 list_add(&ncmd->list, &hostdata->disconnected); in NCR5380_information_transfer()
1897 spin_unlock_irq(&hostdata->lock); in NCR5380_information_transfer()
1935 spin_lock_irq(&hostdata->lock); in NCR5380_information_transfer()
1936 if (!hostdata->connected) in NCR5380_information_transfer()
1963 hostdata->last_message = msgout; in NCR5380_information_transfer()
1966 hostdata->connected = NULL; in NCR5380_information_transfer()
1967 hostdata->busy[scmd_id(cmd)] &= ~(1 << cmd->device->lun); in NCR5380_information_transfer()
1998 spin_unlock_irq(&hostdata->lock); in NCR5380_information_transfer()
1999 err = NCR5380_poll_politely(hostdata, STATUS_REG, in NCR5380_information_transfer()
2001 spin_lock_irq(&hostdata->lock); in NCR5380_information_transfer()
2003 if (err < 0 && hostdata->connected && in NCR5380_information_transfer()
2005 scmd_printk(KERN_ERR, hostdata->connected, in NCR5380_information_transfer()
2026 struct NCR5380_hostdata *hostdata = shost_priv(instance); in NCR5380_reselect() local
2040 target_mask = NCR5380_read(CURRENT_SCSI_DATA_REG) & ~(hostdata->id_mask); in NCR5380_reselect()
2057 if (NCR5380_poll_politely(hostdata, in NCR5380_reselect()
2069 if (NCR5380_poll_politely(hostdata, in NCR5380_reselect()
2121 list_for_each_entry(ncmd, &hostdata->disconnected, list) { in NCR5380_reselect()
2145 hostdata->busy[target] &= ~(1 << lun); in NCR5380_reselect()
2155 count = sun3scsi_dma_xfer_len(hostdata, tmp); in NCR5380_reselect()
2159 sun3scsi_dma_send_setup(hostdata, in NCR5380_reselect()
2162 sun3scsi_dma_recv_setup(hostdata, in NCR5380_reselect()
2174 hostdata->connected = tmp; in NCR5380_reselect()
2246 struct NCR5380_hostdata *hostdata = shost_priv(instance); in NCR5380_abort() local
2250 spin_lock_irqsave(&hostdata->lock, flags); in NCR5380_abort()
2258 if (list_del_cmd(&hostdata->unissued, cmd)) { in NCR5380_abort()
2266 if (hostdata->selecting == cmd) { in NCR5380_abort()
2269 hostdata->selecting = NULL; in NCR5380_abort()
2275 if (list_del_cmd(&hostdata->disconnected, cmd)) { in NCR5380_abort()
2287 if (hostdata->connected == cmd) { in NCR5380_abort()
2289 hostdata->connected = NULL; in NCR5380_abort()
2290 hostdata->dma_len = 0; in NCR5380_abort()
2302 if (list_del_cmd(&hostdata->autosense, cmd)) { in NCR5380_abort()
2312 hostdata->busy[scmd_id(cmd)] &= ~(1 << cmd->device->lun); in NCR5380_abort()
2316 queue_work(hostdata->work_q, &hostdata->main_task); in NCR5380_abort()
2317 spin_unlock_irqrestore(&hostdata->lock, flags); in NCR5380_abort()
2325 struct NCR5380_hostdata *hostdata = shost_priv(instance); in bus_reset_cleanup() local
2340 if (hostdata->selecting) { in bus_reset_cleanup()
2341 hostdata->selecting->result = DID_RESET << 16; in bus_reset_cleanup()
2342 complete_cmd(instance, hostdata->selecting); in bus_reset_cleanup()
2343 hostdata->selecting = NULL; in bus_reset_cleanup()
2346 list_for_each_entry(ncmd, &hostdata->disconnected, list) { in bus_reset_cleanup()
2352 INIT_LIST_HEAD(&hostdata->disconnected); in bus_reset_cleanup()
2354 list_for_each_entry(ncmd, &hostdata->autosense, list) { in bus_reset_cleanup()
2359 INIT_LIST_HEAD(&hostdata->autosense); in bus_reset_cleanup()
2361 if (hostdata->connected) { in bus_reset_cleanup()
2362 set_host_byte(hostdata->connected, DID_RESET); in bus_reset_cleanup()
2363 complete_cmd(instance, hostdata->connected); in bus_reset_cleanup()
2364 hostdata->connected = NULL; in bus_reset_cleanup()
2368 hostdata->busy[i] = 0; in bus_reset_cleanup()
2369 hostdata->dma_len = 0; in bus_reset_cleanup()
2371 queue_work(hostdata->work_q, &hostdata->main_task); in bus_reset_cleanup()
2384 struct NCR5380_hostdata *hostdata = shost_priv(instance); in NCR5380_host_reset() local
2388 spin_lock_irqsave(&hostdata->lock, flags); in NCR5380_host_reset()
2396 list_for_each_entry(ncmd, &hostdata->unissued, list) { in NCR5380_host_reset()
2402 INIT_LIST_HEAD(&hostdata->unissued); in NCR5380_host_reset()
2407 spin_unlock_irqrestore(&hostdata->lock, flags); in NCR5380_host_reset()