Lines Matching refs:SCpnt
367 static void nsp32_build_identify(struct scsi_cmnd *SCpnt) in nsp32_build_identify() argument
369 nsp32_hw_data *data = (nsp32_hw_data *)SCpnt->device->host->hostdata; in nsp32_build_identify()
378 data->msgoutbuf[pos] = IDENTIFY(mode, SCpnt->device->lun); pos++; in nsp32_build_identify()
386 static void nsp32_build_sdtr(struct scsi_cmnd *SCpnt, in nsp32_build_sdtr() argument
390 nsp32_hw_data *data = (nsp32_hw_data *)SCpnt->device->host->hostdata; in nsp32_build_sdtr()
405 static void nsp32_build_nop(struct scsi_cmnd *SCpnt) in nsp32_build_nop() argument
407 nsp32_hw_data *data = (nsp32_hw_data *)SCpnt->device->host->hostdata; in nsp32_build_nop()
423 static void nsp32_build_reject(struct scsi_cmnd *SCpnt) in nsp32_build_reject() argument
425 nsp32_hw_data *data = (nsp32_hw_data *)SCpnt->device->host->hostdata; in nsp32_build_reject()
436 static void nsp32_start_timer(struct scsi_cmnd *SCpnt, int time)
438 unsigned int base = SCpnt->host->io_port;
454 static int nsp32_selection_autopara(struct scsi_cmnd *SCpnt) in nsp32_selection_autopara() argument
456 nsp32_hw_data *data = (nsp32_hw_data *)SCpnt->device->host->hostdata; in nsp32_selection_autopara()
457 unsigned int base = SCpnt->device->host->io_port; in nsp32_selection_autopara()
458 unsigned int host_id = SCpnt->device->host->this_id; in nsp32_selection_autopara()
459 unsigned char target = scmd_id(SCpnt); in nsp32_selection_autopara()
475 SCpnt->result = DID_BUS_BUSY << 16; in nsp32_selection_autopara()
487 SCpnt->result = DID_ERROR << 16; in nsp32_selection_autopara()
517 for (i = 0; i < SCpnt->cmd_len; i++) { in nsp32_selection_autopara()
518 param->cdb[4 * i] = SCpnt->cmnd[i]; in nsp32_selection_autopara()
576 ret = nsp32_arbitration(SCpnt, base); in nsp32_selection_autopara()
585 static int nsp32_selection_autoscsi(struct scsi_cmnd *SCpnt) in nsp32_selection_autoscsi() argument
587 nsp32_hw_data *data = (nsp32_hw_data *)SCpnt->device->host->hostdata; in nsp32_selection_autoscsi()
588 unsigned int base = SCpnt->device->host->io_port; in nsp32_selection_autoscsi()
589 unsigned int host_id = SCpnt->device->host->this_id; in nsp32_selection_autoscsi()
590 unsigned char target = scmd_id(SCpnt); in nsp32_selection_autoscsi()
611 SCpnt->result = DID_BUS_BUSY << 16; in nsp32_selection_autoscsi()
629 for (i = 0; i < SCpnt->cmd_len; i++) { in nsp32_selection_autoscsi()
630 nsp32_write1(base, COMMAND_DATA, SCpnt->cmnd[i]); in nsp32_selection_autoscsi()
632 nsp32_dbg(NSP32_DEBUG_CDB_CONTENTS, "CDB[0]=[0x%x]", SCpnt->cmnd[0]); in nsp32_selection_autoscsi()
647 SCpnt->result = DID_ERROR << 16; in nsp32_selection_autoscsi()
717 if (scsi_bufflen(SCpnt) > 0) { in nsp32_selection_autoscsi()
740 status = nsp32_arbitration(SCpnt, base); in nsp32_selection_autoscsi()
760 static int nsp32_arbitration(struct scsi_cmnd *SCpnt, unsigned int base) in nsp32_arbitration() argument
777 SCpnt->result = DID_OK << 16; in nsp32_arbitration()
781 SCpnt->result = DID_BUS_BUSY << 16; in nsp32_arbitration()
789 SCpnt->result = DID_NO_CONNECT << 16; in nsp32_arbitration()
809 static int nsp32_reselection(struct scsi_cmnd *SCpnt, unsigned char newlun) in nsp32_reselection() argument
811 nsp32_hw_data *data = (nsp32_hw_data *)SCpnt->device->host->hostdata; in nsp32_reselection()
812 unsigned int host_id = SCpnt->device->host->this_id; in nsp32_reselection()
813 unsigned int base = SCpnt->device->host->io_port; in nsp32_reselection()
840 } else if(data->lunt[newid][newlun].SCpnt == NULL) { in nsp32_reselection()
863 static int nsp32_setup_sg_table(struct scsi_cmnd *SCpnt) in nsp32_setup_sg_table() argument
865 nsp32_hw_data *data = (nsp32_hw_data *)SCpnt->device->host->hostdata; in nsp32_setup_sg_table()
876 num = scsi_dma_map(SCpnt); in nsp32_setup_sg_table()
882 scsi_for_each_sg(SCpnt, sg, num, i) { in nsp32_setup_sg_table()
909 static int nsp32_queuecommand_lck(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *)) in nsp32_queuecommand_lck() argument
911 nsp32_hw_data *data = (nsp32_hw_data *)SCpnt->device->host->hostdata; in nsp32_queuecommand_lck()
919 SCpnt->device->id, SCpnt->device->lun, SCpnt->cmnd[0], SCpnt->cmd_len, in nsp32_queuecommand_lck()
920 scsi_sg_count(SCpnt), scsi_sglist(SCpnt), scsi_bufflen(SCpnt)); in nsp32_queuecommand_lck()
925 SCpnt->result = DID_NO_CONNECT << 16; in nsp32_queuecommand_lck()
926 done(SCpnt); in nsp32_queuecommand_lck()
931 if (scmd_id(SCpnt) == SCpnt->device->host->this_id) { in nsp32_queuecommand_lck()
933 SCpnt->result = DID_BAD_TARGET << 16; in nsp32_queuecommand_lck()
934 done(SCpnt); in nsp32_queuecommand_lck()
939 if (SCpnt->device->lun >= MAX_LUN) { in nsp32_queuecommand_lck()
941 SCpnt->result = DID_BAD_TARGET << 16; in nsp32_queuecommand_lck()
942 done(SCpnt); in nsp32_queuecommand_lck()
946 show_command(SCpnt); in nsp32_queuecommand_lck()
948 SCpnt->scsi_done = done; in nsp32_queuecommand_lck()
949 data->CurrentSC = SCpnt; in nsp32_queuecommand_lck()
950 SCpnt->SCp.Status = CHECK_CONDITION; in nsp32_queuecommand_lck()
951 SCpnt->SCp.Message = 0; in nsp32_queuecommand_lck()
952 scsi_set_resid(SCpnt, scsi_bufflen(SCpnt)); in nsp32_queuecommand_lck()
954 SCpnt->SCp.ptr = (char *)scsi_sglist(SCpnt); in nsp32_queuecommand_lck()
955 SCpnt->SCp.this_residual = scsi_bufflen(SCpnt); in nsp32_queuecommand_lck()
956 SCpnt->SCp.buffer = NULL; in nsp32_queuecommand_lck()
957 SCpnt->SCp.buffers_residual = 0; in nsp32_queuecommand_lck()
962 cur_lunt = &(data->lunt[SCpnt->device->id][SCpnt->device->lun]); in nsp32_queuecommand_lck()
963 cur_lunt->SCpnt = SCpnt; in nsp32_queuecommand_lck()
967 data->cur_id = SCpnt->device->id; in nsp32_queuecommand_lck()
968 data->cur_lun = SCpnt->device->lun; in nsp32_queuecommand_lck()
970 ret = nsp32_setup_sg_table(SCpnt); in nsp32_queuecommand_lck()
973 SCpnt->result = DID_ERROR << 16; in nsp32_queuecommand_lck()
974 nsp32_scsi_done(SCpnt); in nsp32_queuecommand_lck()
979 nsp32_build_identify(SCpnt); in nsp32_queuecommand_lck()
986 target = &data->target[scmd_id(SCpnt)]; in nsp32_queuecommand_lck()
994 nsp32_build_sdtr(SCpnt, period, offset); in nsp32_queuecommand_lck()
1032 SCpnt->device->id, target->sync_flag, target->syncreg, in nsp32_queuecommand_lck()
1037 ret = nsp32_selection_autopara(SCpnt); in nsp32_queuecommand_lck()
1039 ret = nsp32_selection_autoscsi(SCpnt); in nsp32_queuecommand_lck()
1044 nsp32_scsi_done(SCpnt); in nsp32_queuecommand_lck()
1164 struct scsi_cmnd *SCpnt = data->CurrentSC; in do_nsp32_isr() local
1196 SCpnt->result = DID_BAD_TARGET << 16; in do_nsp32_isr()
1197 nsp32_scsi_done(SCpnt); in do_nsp32_isr()
1213 if (SCpnt != NULL) { in do_nsp32_isr()
1214 SCpnt->result = DID_RESET << 16; in do_nsp32_isr()
1215 nsp32_scsi_done(SCpnt); in do_nsp32_isr()
1220 if (SCpnt == NULL) { in do_nsp32_isr()
1242 SCpnt->result = DID_TIME_OUT << 16; in do_nsp32_isr()
1243 nsp32_scsi_done(SCpnt); in do_nsp32_isr()
1268 (scsi_get_resid(SCpnt) > 0) && in do_nsp32_isr()
1289 scsi_set_resid(SCpnt, 0); /* all data transferred! */ in do_nsp32_isr()
1296 nsp32_msgin_occur(SCpnt, irq_stat, auto_stat); in do_nsp32_isr()
1303 nsp32_msgout_occur(SCpnt); in do_nsp32_isr()
1310 ret = nsp32_busfree_occur(SCpnt, auto_stat); in do_nsp32_isr()
1324 SCpnt->result = (int)nsp32_read1(base, SCSI_CSB_IN); in do_nsp32_isr()
1377 SCpnt->SCp.Status = nsp32_read1(base, SCSI_CSB_IN); in do_nsp32_isr()
1397 nsp32_msgin_occur(SCpnt, irq_stat, 0); in do_nsp32_isr()
1522 static void nsp32_scsi_done(struct scsi_cmnd *SCpnt) in nsp32_scsi_done() argument
1524 nsp32_hw_data *data = (nsp32_hw_data *)SCpnt->device->host->hostdata; in nsp32_scsi_done()
1525 unsigned int base = SCpnt->device->host->io_port; in nsp32_scsi_done()
1527 scsi_dma_unmap(SCpnt); in nsp32_scsi_done()
1538 (*SCpnt->scsi_done)(SCpnt); in nsp32_scsi_done()
1543 data->cur_lunt->SCpnt = NULL; in nsp32_scsi_done()
1560 static int nsp32_busfree_occur(struct scsi_cmnd *SCpnt, unsigned short execph) in nsp32_busfree_occur() argument
1562 nsp32_hw_data *data = (nsp32_hw_data *)SCpnt->device->host->hostdata; in nsp32_busfree_occur()
1563 unsigned int base = SCpnt->device->host->io_port; in nsp32_busfree_occur()
1621 nsp32_adjust_busfree(SCpnt, s_sacklen); in nsp32_busfree_occur()
1680 SCpnt->SCp.Status = nsp32_read1(base, SCSI_CSB_IN); in nsp32_busfree_occur()
1681 SCpnt->SCp.Message = 0; in nsp32_busfree_occur()
1684 SCpnt->SCp.Status, scsi_get_resid(SCpnt)); in nsp32_busfree_occur()
1685 SCpnt->result = (DID_OK << 16) | in nsp32_busfree_occur()
1686 (SCpnt->SCp.Message << 8) | in nsp32_busfree_occur()
1687 (SCpnt->SCp.Status << 0); in nsp32_busfree_occur()
1688 nsp32_scsi_done(SCpnt); in nsp32_busfree_occur()
1693 SCpnt->SCp.Status = nsp32_read1(base, SCSI_CSB_IN); in nsp32_busfree_occur()
1694 SCpnt->SCp.Message = 4; in nsp32_busfree_occur()
1704 SCpnt->result = DID_ERROR << 16; in nsp32_busfree_occur()
1705 nsp32_scsi_done(SCpnt); in nsp32_busfree_occur()
1718 static void nsp32_adjust_busfree(struct scsi_cmnd *SCpnt, unsigned int s_sacklen) in nsp32_adjust_busfree() argument
1720 nsp32_hw_data *data = (nsp32_hw_data *)SCpnt->device->host->hostdata; in nsp32_adjust_busfree()
1728 nsp32_dbg(NSP32_DEBUG_SGLIST, "old resid=0x%x", scsi_get_resid(SCpnt)); in nsp32_adjust_busfree()
1772 if (scsi_get_resid(SCpnt) < sentlen) { in nsp32_adjust_busfree()
1776 scsi_set_resid(SCpnt, scsi_get_resid(SCpnt) - sentlen); in nsp32_adjust_busfree()
1777 nsp32_dbg(NSP32_DEBUG_SGLIST, "new resid=0x%x", scsi_get_resid(SCpnt)); in nsp32_adjust_busfree()
1791 static void nsp32_msgout_occur(struct scsi_cmnd *SCpnt) in nsp32_msgout_occur() argument
1793 nsp32_hw_data *data = (nsp32_hw_data *)SCpnt->device->host->hostdata; in nsp32_msgout_occur()
1794 unsigned int base = SCpnt->device->host->io_port; in nsp32_msgout_occur()
1807 nsp32_build_nop(SCpnt); in nsp32_msgout_occur()
1867 static void nsp32_restart_autoscsi(struct scsi_cmnd *SCpnt, unsigned short command) in nsp32_restart_autoscsi() argument
1869 nsp32_hw_data *data = (nsp32_hw_data *)SCpnt->device->host->hostdata; in nsp32_restart_autoscsi()
1906 if (scsi_bufflen(SCpnt) > 0) { in nsp32_restart_autoscsi()
1933 static void nsp32_msgin_occur(struct scsi_cmnd *SCpnt, in nsp32_msgin_occur() argument
1937 nsp32_hw_data *data = (nsp32_hw_data *)SCpnt->device->host->hostdata; in nsp32_msgin_occur()
1938 unsigned int base = SCpnt->device->host->io_port; in nsp32_msgin_occur()
1978 ret = nsp32_reselection(SCpnt, newlun); in nsp32_msgin_occur()
2015 nsp32_adjust_busfree(SCpnt, s_sacklen); in nsp32_msgin_occur()
2140 nsp32_analyze_sdtr(SCpnt); in nsp32_msgin_occur()
2200 nsp32_restart_autoscsi(SCpnt, command); in nsp32_msgin_occur()
2221 nsp32_build_reject(SCpnt); in nsp32_msgin_occur()
2230 static void nsp32_analyze_sdtr(struct scsi_cmnd *SCpnt) in nsp32_analyze_sdtr() argument
2232 nsp32_hw_data *data = (nsp32_hw_data *)SCpnt->device->host->hostdata; in nsp32_analyze_sdtr()
2334 nsp32_build_sdtr(SCpnt, 0, ASYNC_OFFSET); in nsp32_analyze_sdtr()
2337 nsp32_build_sdtr(SCpnt, get_period, get_offset); in nsp32_analyze_sdtr()
2350 nsp32_build_reject(SCpnt); in nsp32_analyze_sdtr()
2671 .SCpnt = NULL, in nsp32_detect()
2820 static int nsp32_eh_abort(struct scsi_cmnd *SCpnt) in nsp32_eh_abort() argument
2822 nsp32_hw_data *data = (nsp32_hw_data *)SCpnt->device->host->hostdata; in nsp32_eh_abort()
2823 unsigned int base = SCpnt->device->host->io_port; in nsp32_eh_abort()
2827 if (data->cur_lunt->SCpnt == NULL) { in nsp32_eh_abort()
2841 SCpnt->result = DID_ABORT << 16; in nsp32_eh_abort()
2842 nsp32_scsi_done(SCpnt); in nsp32_eh_abort()
2848 static int nsp32_eh_bus_reset(struct scsi_cmnd *SCpnt) in nsp32_eh_bus_reset() argument
2850 nsp32_hw_data *data = (nsp32_hw_data *)SCpnt->device->host->hostdata; in nsp32_eh_bus_reset()
2851 unsigned int base = SCpnt->device->host->io_port; in nsp32_eh_bus_reset()
2853 spin_lock_irq(SCpnt->device->host->host_lock); in nsp32_eh_bus_reset()
2856 nsp32_dbg(NSP32_DEBUG_BUSRESET, "SCpnt=0x%x", SCpnt); in nsp32_eh_bus_reset()
2862 spin_unlock_irq(SCpnt->device->host->host_lock); in nsp32_eh_bus_reset()
2908 static int nsp32_eh_host_reset(struct scsi_cmnd *SCpnt) in nsp32_eh_host_reset() argument
2910 struct Scsi_Host *host = SCpnt->device->host; in nsp32_eh_host_reset()
2911 unsigned int base = SCpnt->device->host->io_port; in nsp32_eh_host_reset()
2915 nsp32_dbg(NSP32_DEBUG_BUSRESET, "SCpnt=0x%x", SCpnt); in nsp32_eh_host_reset()
2917 spin_lock_irq(SCpnt->device->host->host_lock); in nsp32_eh_host_reset()
2924 spin_unlock_irq(SCpnt->device->host->host_lock); in nsp32_eh_host_reset()