Lines Matching refs:hostdata

190  * @hostdata: host private data
207 static int NCR5380_poll_politely2(struct NCR5380_hostdata *hostdata,
212 unsigned long n = hostdata->poll_loops;
296 struct NCR5380_hostdata *hostdata = shost_priv(instance);
345 struct NCR5380_hostdata *hostdata = shost_priv(instance);
370 struct NCR5380_hostdata *hostdata = shost_priv(instance);
372 return hostdata->info;
391 struct NCR5380_hostdata *hostdata = shost_priv(instance);
398 hostdata->host = instance;
399 hostdata->id_mask = 1 << instance->this_id;
400 hostdata->id_higher_mask = 0;
401 for (i = hostdata->id_mask; i <= 0x80; i <<= 1)
402 if (i > hostdata->id_mask)
403 hostdata->id_higher_mask |= i;
405 hostdata->busy[i] = 0;
406 hostdata->dma_len = 0;
408 spin_lock_init(&hostdata->lock);
409 hostdata->connected = NULL;
410 hostdata->sensing = NULL;
411 INIT_LIST_HEAD(&hostdata->autosense);
412 INIT_LIST_HEAD(&hostdata->unissued);
413 INIT_LIST_HEAD(&hostdata->disconnected);
415 hostdata->flags = flags;
417 INIT_WORK(&hostdata->main_task, NCR5380_main);
418 hostdata->work_q = alloc_workqueue("ncr5380_%d",
421 if (!hostdata->work_q)
424 snprintf(hostdata->info, sizeof(hostdata->info),
426 instance->hostt->name, instance->irq, hostdata->io_port,
427 hostdata->base, instance->can_queue, instance->cmd_per_lun,
429 hostdata->flags & FLAG_DMA_FIXUP ? "DMA_FIXUP " : "",
430 hostdata->flags & FLAG_NO_PSEUDO_DMA ? "NO_PSEUDO_DMA " : "",
431 hostdata->flags & FLAG_TOSHIBA_DELAY ? "TOSHIBA_DELAY " : "");
451 hostdata->poll_loops = NCR5380_REG_POLL_TIME * accesses_per_ms / 2;
472 struct NCR5380_hostdata *hostdata = shost_priv(instance);
481 NCR5380_poll_politely(hostdata,
495 if (hostdata->flags & FLAG_TOSHIBA_DELAY)
517 struct NCR5380_hostdata *hostdata = shost_priv(instance);
519 cancel_work_sync(&hostdata->main_task);
520 destroy_workqueue(hostdata->work_q);
532 struct NCR5380_hostdata *hostdata = shost_priv(instance);
536 if (hostdata->sensing == cmd) {
539 scsi_eh_restore_cmnd(cmd, &hostdata->ses);
541 scsi_eh_restore_cmnd(cmd, &hostdata->ses);
544 hostdata->sensing = NULL;
563 struct NCR5380_hostdata *hostdata = shost_priv(instance);
580 spin_lock_irqsave(&hostdata->lock, flags);
583 spin_unlock_irqrestore(&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.
731 if (hostdata->connected && !hostdata->dma_len) {
736 if (!hostdata->connected) {
737 NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
740 spin_unlock_irq(&hostdata->lock);
756 struct NCR5380_hostdata *hostdata = shost_priv(instance);
757 struct NCR5380_cmd *ncmd = NCR5380_to_ncmd(hostdata->connected);
764 if (hostdata->read_overruns) {
779 if (sun3scsi_dma_finish(hostdata->connected->sc_data_direction)) {
799 transferred = hostdata->dma_len - NCR5380_dma_residual(hostdata);
800 hostdata->dma_len = 0;
807 if (hostdata->read_overruns) {
811 cnt = toPIO = hostdata->read_overruns;
867 struct NCR5380_hostdata *hostdata = shost_priv(instance);
872 spin_lock_irqsave(&hostdata->lock, flags);
890 if (hostdata->connected) {
892 queue_work(hostdata->work_q, &hostdata->main_task);
897 } else if ((NCR5380_read(CURRENT_SCSI_DATA_REG) & hostdata->id_mask) &&
905 if (!hostdata->connected) {
907 queue_work(hostdata->work_q, &hostdata->main_task);
909 if (!hostdata->connected)
910 NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
935 spin_unlock_irqrestore(&hostdata->lock, flags);
958 * hostdata->connected will be set to cmd.
966 __releases(&hostdata->lock) __acquires(&hostdata->lock)
968 struct NCR5380_hostdata *hostdata = shost_priv(instance);
989 hostdata->selecting = cmd;
1002 NCR5380_write(OUTPUT_DATA_REG, hostdata->id_mask);
1009 spin_unlock_irq(&hostdata->lock);
1010 err = NCR5380_poll_politely2(hostdata, MODE_REG, MR_ARBITRATE, 0,
1013 spin_lock_irq(&hostdata->lock);
1018 if (!hostdata->selecting) {
1029 spin_unlock_irq(&hostdata->lock);
1036 (NCR5380_read(CURRENT_SCSI_DATA_REG) & hostdata->id_higher_mask) ||
1040 spin_lock_irq(&hostdata->lock);
1056 if (hostdata->flags & FLAG_TOSHIBA_DELAY)
1061 spin_lock_irq(&hostdata->lock);
1067 if (!hostdata->selecting) {
1080 NCR5380_write(OUTPUT_DATA_REG, hostdata->id_mask | (1 << scmd_id(cmd)));
1098 spin_unlock_irq(&hostdata->lock);
1136 err = NCR5380_poll_politely(hostdata, STATUS_REG, SR_BSY, SR_BSY,
1140 spin_lock_irq(&hostdata->lock);
1148 spin_lock_irq(&hostdata->lock);
1152 if (!hostdata->selecting)
1182 err = NCR5380_poll_politely(hostdata, STATUS_REG, SR_REQ, SR_REQ, HZ);
1183 spin_lock_irq(&hostdata->lock);
1189 if (!hostdata->selecting) {
1213 hostdata->connected = cmd;
1214 hostdata->busy[cmd->device->id] |= 1 << cmd->device->lun;
1225 if (!hostdata->selecting)
1227 hostdata->selecting = NULL;
1261 struct NCR5380_hostdata *hostdata = shost_priv(instance);
1280 if (NCR5380_poll_politely(hostdata, STATUS_REG, SR_REQ, SR_REQ,
1326 if (NCR5380_poll_politely(hostdata,
1385 struct NCR5380_hostdata __maybe_unused *hostdata = shost_priv(instance);
1409 struct NCR5380_hostdata *hostdata = shost_priv(instance);
1427 rc = NCR5380_poll_politely(hostdata, STATUS_REG, SR_REQ, SR_REQ,
1439 rc = NCR5380_poll_politely(hostdata, STATUS_REG, SR_REQ, 0,
1487 struct NCR5380_hostdata *hostdata = shost_priv(instance);
1499 NCR5380_to_ncmd(hostdata->connected)->phase = p;
1502 if (hostdata->read_overruns)
1503 c -= hostdata->read_overruns;
1504 else if (hostdata->flags & FLAG_DMA_FIXUP)
1520 if (!(hostdata->flags & FLAG_LATE_DMA_SETUP)) {
1525 result = NCR5380_dma_recv_setup(hostdata, d, c);
1527 result = NCR5380_dma_send_setup(hostdata, d, c);
1554 if (hostdata->flags & FLAG_LATE_DMA_SETUP) {
1559 result = NCR5380_dma_recv_setup(hostdata, d, c);
1561 result = NCR5380_dma_send_setup(hostdata, d, c);
1570 hostdata->dma_len = result;
1575 hostdata->dma_len = c;
1611 if (hostdata->flags & FLAG_DMA_FIXUP) {
1628 if (NCR5380_poll_politely(hostdata, BUS_AND_STATUS_REG,
1633 if (NCR5380_poll_politely(hostdata, STATUS_REG,
1644 if (NCR5380_poll_politely2(hostdata,
1675 __releases(&hostdata->lock) __acquires(&hostdata->lock)
1677 struct NCR5380_hostdata *hostdata = shost_priv(instance);
1690 while ((cmd = hostdata->connected)) {
1708 count = sun3scsi_dma_xfer_len(hostdata, cmd);
1712 sun3scsi_dma_send_setup(hostdata,
1715 sun3scsi_dma_recv_setup(hostdata,
1746 hostdata->connected = NULL;
1747 hostdata->busy[scmd_id(cmd)] &= ~(1 << cmd->device->lun);
1774 transfersize = NCR5380_dma_xfer_len(hostdata, cmd);
1826 hostdata->connected = NULL;
1827 hostdata->busy[scmd_id(cmd)] &= ~(1 << cmd->device->lun);
1841 &hostdata->autosense);
1856 switch (hostdata->last_message) {
1861 hostdata->busy[cmd->device->id] |= (1 << (cmd->device->lun & 0xFF));
1870 hostdata->connected = NULL;
1871 list_add(&ncmd->list, &hostdata->disconnected);
1910 spin_unlock_irq(&hostdata->lock);
1948 spin_lock_irq(&hostdata->lock);
1949 if (!hostdata->connected)
1976 hostdata->last_message = msgout;
1979 hostdata->connected = NULL;
1980 hostdata->busy[scmd_id(cmd)] &= ~(1 << cmd->device->lun);
2008 spin_unlock_irq(&hostdata->lock);
2009 NCR5380_poll_politely(hostdata, STATUS_REG, SR_REQ, SR_REQ, HZ);
2010 spin_lock_irq(&hostdata->lock);
2027 struct NCR5380_hostdata *hostdata = shost_priv(instance);
2041 target_mask = NCR5380_read(CURRENT_SCSI_DATA_REG) & ~(hostdata->id_mask);
2058 if (NCR5380_poll_politely(hostdata,
2070 if (NCR5380_poll_politely(hostdata,
2122 list_for_each_entry(ncmd, &hostdata->disconnected, list) {
2146 hostdata->busy[target] &= ~(1 << lun);
2156 count = sun3scsi_dma_xfer_len(hostdata, tmp);
2160 sun3scsi_dma_send_setup(hostdata,
2163 sun3scsi_dma_recv_setup(hostdata,
2175 hostdata->connected = tmp;
2247 struct NCR5380_hostdata *hostdata = shost_priv(instance);
2251 spin_lock_irqsave(&hostdata->lock, flags);
2259 if (list_del_cmd(&hostdata->unissued, cmd)) {
2267 if (hostdata->selecting == cmd) {
2270 hostdata->selecting = NULL;
2276 if (list_del_cmd(&hostdata->disconnected, cmd)) {
2288 if (hostdata->connected == cmd) {
2290 hostdata->connected = NULL;
2291 hostdata->dma_len = 0;
2303 if (list_del_cmd(&hostdata->autosense, cmd)) {
2313 hostdata->busy[scmd_id(cmd)] &= ~(1 << cmd->device->lun);
2317 queue_work(hostdata->work_q, &hostdata->main_task);
2318 spin_unlock_irqrestore(&hostdata->lock, flags);
2326 struct NCR5380_hostdata *hostdata = shost_priv(instance);
2341 if (hostdata->selecting) {
2342 hostdata->selecting->result = DID_RESET << 16;
2343 complete_cmd(instance, hostdata->selecting);
2344 hostdata->selecting = NULL;
2347 list_for_each_entry(ncmd, &hostdata->disconnected, list) {
2353 INIT_LIST_HEAD(&hostdata->disconnected);
2355 list_for_each_entry(ncmd, &hostdata->autosense, list) {
2360 INIT_LIST_HEAD(&hostdata->autosense);
2362 if (hostdata->connected) {
2363 set_host_byte(hostdata->connected, DID_RESET);
2364 complete_cmd(instance, hostdata->connected);
2365 hostdata->connected = NULL;
2369 hostdata->busy[i] = 0;
2370 hostdata->dma_len = 0;
2372 queue_work(hostdata->work_q, &hostdata->main_task);
2385 struct NCR5380_hostdata *hostdata = shost_priv(instance);
2389 spin_lock_irqsave(&hostdata->lock, flags);
2397 list_for_each_entry(ncmd, &hostdata->unissued, list) {
2403 INIT_LIST_HEAD(&hostdata->unissued);
2408 spin_unlock_irqrestore(&hostdata->lock, flags);