scsi: core: Drop obsolete Linux-specific SCSI status codes
Originally the SCSI subsystem has been using 'special' SCSI status codes, which were the SAM-specified ones but shifted by 1. As most drivers have now been modified to use the SAM-specified ones, having two nearly identical sets of definitions only causes confusion. The Linux-specifed SCSI status codes have been marked obsolete for several years so drop them and use the SAM-specified status codes throughout. Link: https://lore.kernel.org/r/20210427083046.31620-41-hare@suse.de Reviewed-by: Bart Van Assche <bvanassche@acm.org> Reviewed-by: Douglas Gilbert <dgilbert@interlog.com> Signed-off-by: Hannes Reinecke <hare@suse.de> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
5020714895
commit
3d45cefc8e
@ -642,7 +642,7 @@ static struct ata_queued_cmd *ata_scsi_qc_new(struct ata_device *dev,
|
|||||||
if (cmd->request->rq_flags & RQF_QUIET)
|
if (cmd->request->rq_flags & RQF_QUIET)
|
||||||
qc->flags |= ATA_QCFLAG_QUIET;
|
qc->flags |= ATA_QCFLAG_QUIET;
|
||||||
} else {
|
} else {
|
||||||
cmd->result = (DID_OK << 16) | (QUEUE_FULL << 1);
|
cmd->result = (DID_OK << 16) | SAM_STAT_TASK_SET_FULL;
|
||||||
cmd->scsi_done(cmd);
|
cmd->scsi_done(cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2232,7 +2232,7 @@ static int srp_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *scmnd)
|
|||||||
* to reduce queue depth temporarily.
|
* to reduce queue depth temporarily.
|
||||||
*/
|
*/
|
||||||
scmnd->result = len == -ENOMEM ?
|
scmnd->result = len == -ENOMEM ?
|
||||||
DID_OK << 16 | QUEUE_FULL << 1 : DID_ERROR << 16;
|
DID_OK << 16 | SAM_STAT_TASK_SET_FULL : DID_ERROR << 16;
|
||||||
goto err_iu;
|
goto err_iu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1338,7 +1338,7 @@ static irqreturn_t twa_interrupt(int irq, void *dev_instance)
|
|||||||
/* If error, command failed */
|
/* If error, command failed */
|
||||||
if (error == 1) {
|
if (error == 1) {
|
||||||
/* Ask for a host reset */
|
/* Ask for a host reset */
|
||||||
cmd->result = (DID_OK << 16) | (CHECK_CONDITION << 1);
|
cmd->result = (DID_OK << 16) | SAM_STAT_CHECK_CONDITION;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Report residual bytes for single sgl */
|
/* Report residual bytes for single sgl */
|
||||||
|
@ -429,7 +429,7 @@ static int tw_decode_sense(TW_Device_Extension *tw_dev, int request_id, int fill
|
|||||||
/* Additional sense code qualifier */
|
/* Additional sense code qualifier */
|
||||||
tw_dev->srb[request_id]->sense_buffer[13] = tw_sense_table[i][3];
|
tw_dev->srb[request_id]->sense_buffer[13] = tw_sense_table[i][3];
|
||||||
|
|
||||||
tw_dev->srb[request_id]->result = (DID_OK << 16) | (CHECK_CONDITION << 1);
|
tw_dev->srb[request_id]->result = (DID_OK << 16) | SAM_STAT_CHECK_CONDITION;
|
||||||
return TW_ISR_DONT_RESULT; /* Special case for isr to not over-write result */
|
return TW_ISR_DONT_RESULT; /* Special case for isr to not over-write result */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2159,7 +2159,7 @@ static irqreturn_t tw_interrupt(int irq, void *dev_instance)
|
|||||||
/* If error, command failed */
|
/* If error, command failed */
|
||||||
if (error == 1) {
|
if (error == 1) {
|
||||||
/* Ask for a host reset */
|
/* Ask for a host reset */
|
||||||
tw_dev->srb[request_id]->result = (DID_OK << 16) | (CHECK_CONDITION << 1);
|
tw_dev->srb[request_id]->result = (DID_OK << 16) | SAM_STAT_CHECK_CONDITION;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Now complete the io */
|
/* Now complete the io */
|
||||||
|
@ -980,8 +980,8 @@ process_script_interrupt(__u32 dsps, __u32 dsp, struct scsi_cmnd *SCp,
|
|||||||
NCR_700_FINISHED_TAG_NEGOTIATION);
|
NCR_700_FINISHED_TAG_NEGOTIATION);
|
||||||
|
|
||||||
/* check for contingent allegiance conditions */
|
/* check for contingent allegiance conditions */
|
||||||
if (hostdata->status[0] >> 1 == CHECK_CONDITION ||
|
if (hostdata->status[0] == SAM_STAT_CHECK_CONDITION ||
|
||||||
hostdata->status[0] >> 1 == COMMAND_TERMINATED) {
|
hostdata->status[0] == SAM_STAT_COMMAND_TERMINATED) {
|
||||||
struct NCR_700_command_slot *slot =
|
struct NCR_700_command_slot *slot =
|
||||||
(struct NCR_700_command_slot *)SCp->host_scribble;
|
(struct NCR_700_command_slot *)SCp->host_scribble;
|
||||||
if(slot->flags == NCR_700_FLAG_AUTOSENSE) {
|
if(slot->flags == NCR_700_FLAG_AUTOSENSE) {
|
||||||
|
@ -538,7 +538,7 @@ static void complete_cmd(struct Scsi_Host *instance,
|
|||||||
|
|
||||||
if (hostdata->sensing == cmd) {
|
if (hostdata->sensing == cmd) {
|
||||||
/* Autosense processing ends here */
|
/* Autosense processing ends here */
|
||||||
if (status_byte(cmd->result) != GOOD) {
|
if (get_status_byte(cmd) != SAM_STAT_GOOD) {
|
||||||
scsi_eh_restore_cmnd(cmd, &hostdata->ses);
|
scsi_eh_restore_cmnd(cmd, &hostdata->ses);
|
||||||
} else {
|
} else {
|
||||||
scsi_eh_restore_cmnd(cmd, &hostdata->ses);
|
scsi_eh_restore_cmnd(cmd, &hostdata->ses);
|
||||||
|
@ -1326,7 +1326,7 @@ static void arcmsr_report_sense_info(struct CommandControlBlock *ccb)
|
|||||||
|
|
||||||
struct scsi_cmnd *pcmd = ccb->pcmd;
|
struct scsi_cmnd *pcmd = ccb->pcmd;
|
||||||
struct SENSE_DATA *sensebuffer = (struct SENSE_DATA *)pcmd->sense_buffer;
|
struct SENSE_DATA *sensebuffer = (struct SENSE_DATA *)pcmd->sense_buffer;
|
||||||
pcmd->result = (DID_OK << 16) | (CHECK_CONDITION << 1);
|
pcmd->result = (DID_OK << 16) | SAM_STAT_CHECK_CONDITION;
|
||||||
if (sensebuffer) {
|
if (sensebuffer) {
|
||||||
int sense_data_length =
|
int sense_data_length =
|
||||||
sizeof(struct SENSE_DATA) < SCSI_SENSE_BUFFERSIZE
|
sizeof(struct SENSE_DATA) < SCSI_SENSE_BUFFERSIZE
|
||||||
@ -3253,7 +3253,7 @@ static int arcmsr_queue_command_lck(struct scsi_cmnd *cmd,
|
|||||||
if (!ccb)
|
if (!ccb)
|
||||||
return SCSI_MLQUEUE_HOST_BUSY;
|
return SCSI_MLQUEUE_HOST_BUSY;
|
||||||
if (arcmsr_build_ccb( acb, ccb, cmd ) == FAILED) {
|
if (arcmsr_build_ccb( acb, ccb, cmd ) == FAILED) {
|
||||||
cmd->result = (DID_ERROR << 16) | (RESERVATION_CONFLICT << 1);
|
cmd->result = (DID_ERROR << 16) | SAM_STAT_RESERVATION_CONFLICT;
|
||||||
cmd->scsi_done(cmd);
|
cmd->scsi_done(cmd);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1525,7 +1525,7 @@ void esas2r_complete_request_cb(struct esas2r_adapter *a,
|
|||||||
|
|
||||||
rq->cmd->result =
|
rq->cmd->result =
|
||||||
((esas2r_req_status_to_error(rq->req_stat) << 16)
|
((esas2r_req_status_to_error(rq->req_stat) << 16)
|
||||||
| (rq->func_rsp.scsi_rsp.scsi_stat & STATUS_MASK));
|
| rq->func_rsp.scsi_rsp.scsi_stat);
|
||||||
|
|
||||||
if (rq->req_stat == RS_UNDERRUN)
|
if (rq->req_stat == RS_UNDERRUN)
|
||||||
scsi_set_resid(rq->cmd,
|
scsi_set_resid(rq->cmd,
|
||||||
|
@ -1611,7 +1611,7 @@ mega_cmd_done(adapter_t *adapter, u8 completed[], int nstatus, int status)
|
|||||||
*/
|
*/
|
||||||
if( cmd->cmnd[0] == TEST_UNIT_READY ) {
|
if( cmd->cmnd[0] == TEST_UNIT_READY ) {
|
||||||
cmd->result |= (DID_ERROR << 16) |
|
cmd->result |= (DID_ERROR << 16) |
|
||||||
(RESERVATION_CONFLICT << 1);
|
SAM_STAT_RESERVATION_CONFLICT;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
/*
|
/*
|
||||||
@ -1623,7 +1623,7 @@ mega_cmd_done(adapter_t *adapter, u8 completed[], int nstatus, int status)
|
|||||||
cmd->cmnd[0] == RELEASE) ) {
|
cmd->cmnd[0] == RELEASE) ) {
|
||||||
|
|
||||||
cmd->result |= (DID_ERROR << 16) |
|
cmd->result |= (DID_ERROR << 16) |
|
||||||
(RESERVATION_CONFLICT << 1);
|
SAM_STAT_RESERVATION_CONFLICT;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
@ -2327,7 +2327,7 @@ megaraid_mbox_dpc(unsigned long devp)
|
|||||||
*/
|
*/
|
||||||
if (scp->cmnd[0] == TEST_UNIT_READY) {
|
if (scp->cmnd[0] == TEST_UNIT_READY) {
|
||||||
scp->result = DID_ERROR << 16 |
|
scp->result = DID_ERROR << 16 |
|
||||||
RESERVATION_CONFLICT << 1;
|
SAM_STAT_RESERVATION_CONFLICT;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
/*
|
/*
|
||||||
@ -2338,7 +2338,7 @@ megaraid_mbox_dpc(unsigned long devp)
|
|||||||
scp->cmnd[0] == RELEASE)) {
|
scp->cmnd[0] == RELEASE)) {
|
||||||
|
|
||||||
scp->result = DID_ERROR << 16 |
|
scp->result = DID_ERROR << 16 |
|
||||||
RESERVATION_CONFLICT << 1;
|
SAM_STAT_RESERVATION_CONFLICT;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
scp->result = DID_BAD_TARGET << 16 | status;
|
scp->result = DID_BAD_TARGET << 16 | status;
|
||||||
|
@ -745,32 +745,32 @@ static enum scsi_disposition scsi_eh_completed_normally(struct scsi_cmnd *scmd)
|
|||||||
* now, check the status byte to see if this indicates
|
* now, check the status byte to see if this indicates
|
||||||
* anything special.
|
* anything special.
|
||||||
*/
|
*/
|
||||||
switch (status_byte(scmd->result)) {
|
switch (get_status_byte(scmd)) {
|
||||||
case GOOD:
|
case SAM_STAT_GOOD:
|
||||||
scsi_handle_queue_ramp_up(scmd->device);
|
scsi_handle_queue_ramp_up(scmd->device);
|
||||||
fallthrough;
|
fallthrough;
|
||||||
case COMMAND_TERMINATED:
|
case SAM_STAT_COMMAND_TERMINATED:
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
case CHECK_CONDITION:
|
case SAM_STAT_CHECK_CONDITION:
|
||||||
return scsi_check_sense(scmd);
|
return scsi_check_sense(scmd);
|
||||||
case CONDITION_GOOD:
|
case SAM_STAT_CONDITION_MET:
|
||||||
case INTERMEDIATE_GOOD:
|
case SAM_STAT_INTERMEDIATE:
|
||||||
case INTERMEDIATE_C_GOOD:
|
case SAM_STAT_INTERMEDIATE_CONDITION_MET:
|
||||||
/*
|
/*
|
||||||
* who knows? FIXME(eric)
|
* who knows? FIXME(eric)
|
||||||
*/
|
*/
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
case RESERVATION_CONFLICT:
|
case SAM_STAT_RESERVATION_CONFLICT:
|
||||||
if (scmd->cmnd[0] == TEST_UNIT_READY)
|
if (scmd->cmnd[0] == TEST_UNIT_READY)
|
||||||
/* it is a success, we probed the device and
|
/* it is a success, we probed the device and
|
||||||
* found it */
|
* found it */
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
/* otherwise, we failed to send the command */
|
/* otherwise, we failed to send the command */
|
||||||
return FAILED;
|
return FAILED;
|
||||||
case QUEUE_FULL:
|
case SAM_STAT_TASK_SET_FULL:
|
||||||
scsi_handle_queue_full(scmd->device);
|
scsi_handle_queue_full(scmd->device);
|
||||||
fallthrough;
|
fallthrough;
|
||||||
case BUSY:
|
case SAM_STAT_BUSY:
|
||||||
return NEEDS_RETRY;
|
return NEEDS_RETRY;
|
||||||
default:
|
default:
|
||||||
return FAILED;
|
return FAILED;
|
||||||
@ -1760,7 +1760,7 @@ int scsi_noretry_cmd(struct scsi_cmnd *scmd)
|
|||||||
case DID_PARITY:
|
case DID_PARITY:
|
||||||
return (scmd->request->cmd_flags & REQ_FAILFAST_DEV);
|
return (scmd->request->cmd_flags & REQ_FAILFAST_DEV);
|
||||||
case DID_ERROR:
|
case DID_ERROR:
|
||||||
if (status_byte(scmd->result) == RESERVATION_CONFLICT)
|
if (get_status_byte(scmd) == SAM_STAT_RESERVATION_CONFLICT)
|
||||||
return 0;
|
return 0;
|
||||||
fallthrough;
|
fallthrough;
|
||||||
case DID_SOFT_ERROR:
|
case DID_SOFT_ERROR:
|
||||||
@ -1876,7 +1876,7 @@ enum scsi_disposition scsi_decide_disposition(struct scsi_cmnd *scmd)
|
|||||||
*/
|
*/
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
case DID_ERROR:
|
case DID_ERROR:
|
||||||
if (status_byte(scmd->result) == RESERVATION_CONFLICT)
|
if (get_status_byte(scmd) == SAM_STAT_RESERVATION_CONFLICT)
|
||||||
/*
|
/*
|
||||||
* execute reservation conflict processing code
|
* execute reservation conflict processing code
|
||||||
* lower down
|
* lower down
|
||||||
@ -1907,15 +1907,15 @@ enum scsi_disposition scsi_decide_disposition(struct scsi_cmnd *scmd)
|
|||||||
/*
|
/*
|
||||||
* check the status byte to see if this indicates anything special.
|
* check the status byte to see if this indicates anything special.
|
||||||
*/
|
*/
|
||||||
switch (status_byte(scmd->result)) {
|
switch (get_status_byte(scmd)) {
|
||||||
case QUEUE_FULL:
|
case SAM_STAT_TASK_SET_FULL:
|
||||||
scsi_handle_queue_full(scmd->device);
|
scsi_handle_queue_full(scmd->device);
|
||||||
/*
|
/*
|
||||||
* the case of trying to send too many commands to a
|
* the case of trying to send too many commands to a
|
||||||
* tagged queueing device.
|
* tagged queueing device.
|
||||||
*/
|
*/
|
||||||
fallthrough;
|
fallthrough;
|
||||||
case BUSY:
|
case SAM_STAT_BUSY:
|
||||||
/*
|
/*
|
||||||
* device can't talk to us at the moment. Should only
|
* device can't talk to us at the moment. Should only
|
||||||
* occur (SAM-3) when the task queue is empty, so will cause
|
* occur (SAM-3) when the task queue is empty, so will cause
|
||||||
@ -1923,16 +1923,16 @@ enum scsi_disposition scsi_decide_disposition(struct scsi_cmnd *scmd)
|
|||||||
* device.
|
* device.
|
||||||
*/
|
*/
|
||||||
return ADD_TO_MLQUEUE;
|
return ADD_TO_MLQUEUE;
|
||||||
case GOOD:
|
case SAM_STAT_GOOD:
|
||||||
if (scmd->cmnd[0] == REPORT_LUNS)
|
if (scmd->cmnd[0] == REPORT_LUNS)
|
||||||
scmd->device->sdev_target->expecting_lun_change = 0;
|
scmd->device->sdev_target->expecting_lun_change = 0;
|
||||||
scsi_handle_queue_ramp_up(scmd->device);
|
scsi_handle_queue_ramp_up(scmd->device);
|
||||||
fallthrough;
|
fallthrough;
|
||||||
case COMMAND_TERMINATED:
|
case SAM_STAT_COMMAND_TERMINATED:
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
case TASK_ABORTED:
|
case SAM_STAT_TASK_ABORTED:
|
||||||
goto maybe_retry;
|
goto maybe_retry;
|
||||||
case CHECK_CONDITION:
|
case SAM_STAT_CHECK_CONDITION:
|
||||||
rtn = scsi_check_sense(scmd);
|
rtn = scsi_check_sense(scmd);
|
||||||
if (rtn == NEEDS_RETRY)
|
if (rtn == NEEDS_RETRY)
|
||||||
goto maybe_retry;
|
goto maybe_retry;
|
||||||
@ -1941,16 +1941,16 @@ enum scsi_disposition scsi_decide_disposition(struct scsi_cmnd *scmd)
|
|||||||
* to collect the sense and redo the decide
|
* to collect the sense and redo the decide
|
||||||
* disposition */
|
* disposition */
|
||||||
return rtn;
|
return rtn;
|
||||||
case CONDITION_GOOD:
|
case SAM_STAT_CONDITION_MET:
|
||||||
case INTERMEDIATE_GOOD:
|
case SAM_STAT_INTERMEDIATE:
|
||||||
case INTERMEDIATE_C_GOOD:
|
case SAM_STAT_INTERMEDIATE_CONDITION_MET:
|
||||||
case ACA_ACTIVE:
|
case SAM_STAT_ACA_ACTIVE:
|
||||||
/*
|
/*
|
||||||
* who knows? FIXME(eric)
|
* who knows? FIXME(eric)
|
||||||
*/
|
*/
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
|
|
||||||
case RESERVATION_CONFLICT:
|
case SAM_STAT_RESERVATION_CONFLICT:
|
||||||
sdev_printk(KERN_INFO, scmd->device,
|
sdev_printk(KERN_INFO, scmd->device,
|
||||||
"reservation conflict\n");
|
"reservation conflict\n");
|
||||||
set_host_byte(scmd, DID_NEXUS_FAILURE);
|
set_host_byte(scmd, DID_NEXUS_FAILURE);
|
||||||
|
@ -873,7 +873,7 @@ static int scsi_io_completion_nz_result(struct scsi_cmnd *cmd, int result,
|
|||||||
* if it can't fit). Treat SAM_STAT_CONDITION_MET and the related
|
* if it can't fit). Treat SAM_STAT_CONDITION_MET and the related
|
||||||
* intermediate statuses (both obsolete in SAM-4) as good.
|
* intermediate statuses (both obsolete in SAM-4) as good.
|
||||||
*/
|
*/
|
||||||
if (status_byte(result) && scsi_status_is_good(result)) {
|
if ((result & 0xff) && scsi_status_is_good(result)) {
|
||||||
result = 0;
|
result = 0;
|
||||||
*blk_statp = BLK_STS_OK;
|
*blk_statp = BLK_STS_OK;
|
||||||
}
|
}
|
||||||
|
@ -338,7 +338,7 @@ static int sr_done(struct scsi_cmnd *SCpnt)
|
|||||||
* care is taken to avoid unnecessary additional work such as
|
* care is taken to avoid unnecessary additional work such as
|
||||||
* memcpy's that could be avoided.
|
* memcpy's that could be avoided.
|
||||||
*/
|
*/
|
||||||
if (status_byte(result) == SAM_STAT_CHECK_CONDITION &&
|
if (scsi_status_is_check_condition(result) &&
|
||||||
(SCpnt->sense_buffer[0] & 0x7f) == 0x70) { /* Sense current */
|
(SCpnt->sense_buffer[0] & 0x7f) == 0x70) { /* Sense current */
|
||||||
switch (SCpnt->sense_buffer[2]) {
|
switch (SCpnt->sense_buffer[2]) {
|
||||||
case MEDIUM_ERROR:
|
case MEDIUM_ERROR:
|
||||||
|
@ -205,7 +205,7 @@ int sr_do_ioctl(Scsi_CD *cd, struct packet_command *cgc)
|
|||||||
err = result;
|
err = result;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
if (status_byte(result) == SAM_STAT_CHECK_CONDITION) {
|
if (scsi_status_is_check_condition(result)) {
|
||||||
switch (sshdr->sense_key) {
|
switch (sshdr->sense_key) {
|
||||||
case UNIT_ATTENTION:
|
case UNIT_ATTENTION:
|
||||||
SDev->changed = 1;
|
SDev->changed = 1;
|
||||||
|
@ -224,7 +224,7 @@ static void scsiback_print_status(char *sense_buffer, int errors,
|
|||||||
|
|
||||||
pr_err("[%s:%d] cmnd[0]=%02x -> st=%02x msg=%02x host=%02x\n",
|
pr_err("[%s:%d] cmnd[0]=%02x -> st=%02x msg=%02x host=%02x\n",
|
||||||
tpg->tport->tport_name, pending_req->v2p->lun,
|
tpg->tport->tport_name, pending_req->v2p->lun,
|
||||||
pending_req->cmnd[0], status_byte(errors), COMMAND_COMPLETE,
|
pending_req->cmnd[0], errors & 0xff, COMMAND_COMPLETE,
|
||||||
host_byte(errors));
|
host_byte(errors));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -184,7 +184,6 @@ enum scsi_disposition {
|
|||||||
* msg_byte (unused)
|
* msg_byte (unused)
|
||||||
* host_byte = set by low-level driver to indicate status.
|
* host_byte = set by low-level driver to indicate status.
|
||||||
*/
|
*/
|
||||||
#define status_byte(result) (((result) >> 1) & 0x7f)
|
|
||||||
#define host_byte(result) (((result) >> 16) & 0xff)
|
#define host_byte(result) (((result) >> 16) & 0xff)
|
||||||
|
|
||||||
#define sense_class(sense) (((sense) >> 4) & 0x7)
|
#define sense_class(sense) (((sense) >> 4) & 0x7)
|
||||||
|
@ -202,27 +202,7 @@ struct scsi_varlen_cdb_hdr {
|
|||||||
#define SAM_STAT_ACA_ACTIVE 0x30
|
#define SAM_STAT_ACA_ACTIVE 0x30
|
||||||
#define SAM_STAT_TASK_ABORTED 0x40
|
#define SAM_STAT_TASK_ABORTED 0x40
|
||||||
|
|
||||||
/*
|
|
||||||
* Status codes. These are deprecated as they are shifted 1 bit right
|
|
||||||
* from those found in the SCSI standards. This causes confusion for
|
|
||||||
* applications that are ported to several OSes. Prefer SAM Status codes
|
|
||||||
* above.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define GOOD 0x00
|
|
||||||
#define CHECK_CONDITION 0x01
|
|
||||||
#define CONDITION_GOOD 0x02
|
|
||||||
#define BUSY 0x04
|
|
||||||
#define INTERMEDIATE_GOOD 0x08
|
|
||||||
#define INTERMEDIATE_C_GOOD 0x0a
|
|
||||||
#define RESERVATION_CONFLICT 0x0c
|
|
||||||
#define COMMAND_TERMINATED 0x11
|
|
||||||
#define QUEUE_FULL 0x14
|
|
||||||
#define ACA_ACTIVE 0x18
|
|
||||||
#define TASK_ABORTED 0x20
|
|
||||||
|
|
||||||
#define STATUS_MASK 0xfe
|
#define STATUS_MASK 0xfe
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SENSE KEYS
|
* SENSE KEYS
|
||||||
*/
|
*/
|
||||||
|
@ -145,6 +145,26 @@ struct compat_sg_io_hdr {
|
|||||||
/* Obsolete driver_byte() declaration */
|
/* Obsolete driver_byte() declaration */
|
||||||
#define driver_byte(result) (((result) >> 24) & 0xff)
|
#define driver_byte(result) (((result) >> 24) & 0xff)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Original linux SCSI Status codes. They are shifted 1 bit right
|
||||||
|
* from those found in the SCSI standards.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define GOOD 0x00
|
||||||
|
#define CHECK_CONDITION 0x01
|
||||||
|
#define CONDITION_GOOD 0x02
|
||||||
|
#define BUSY 0x04
|
||||||
|
#define INTERMEDIATE_GOOD 0x08
|
||||||
|
#define INTERMEDIATE_C_GOOD 0x0a
|
||||||
|
#define RESERVATION_CONFLICT 0x0c
|
||||||
|
#define COMMAND_TERMINATED 0x11
|
||||||
|
#define QUEUE_FULL 0x14
|
||||||
|
#define ACA_ACTIVE 0x18
|
||||||
|
#define TASK_ABORTED 0x20
|
||||||
|
|
||||||
|
/* Obsolete status_byte() declaration */
|
||||||
|
#define status_byte(result) (((result) >> 1) & 0x7f)
|
||||||
|
|
||||||
typedef struct sg_scsi_id { /* used by SG_GET_SCSI_ID ioctl() */
|
typedef struct sg_scsi_id { /* used by SG_GET_SCSI_ID ioctl() */
|
||||||
int host_no; /* as in "scsi<n>" where 'n' is one of 0, 1, 2 etc */
|
int host_no; /* as in "scsi<n>" where 'n' is one of 0, 1, 2 etc */
|
||||||
int channel;
|
int channel;
|
||||||
|
Loading…
Reference in New Issue
Block a user