mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-23 12:14:10 +08:00
scsi: core: Introduce enums for the SAM and host status codes
Make it possible for the compiler to verify whether SAM and host status codes are used correctly. [mkp: resolve conflicts with Hannes' SCSI result series] Link: https://lore.kernel.org/r/20210524025457.11299-3-bvanassche@acm.org Cc: Hannes Reinecke <hare@suse.com> Reviewed-by: John Garry <john.garry@huawei.com> Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com> Signed-off-by: Bart Van Assche <bvanassche@acm.org> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
d377f415dd
commit
149d0e489e
@ -408,8 +408,8 @@ static const char * const hostbyte_table[]={
|
||||
|
||||
const char *scsi_hostbyte_string(int result)
|
||||
{
|
||||
enum scsi_host_status hb = host_byte(result);
|
||||
const char *hb_string = NULL;
|
||||
int hb = host_byte(result);
|
||||
|
||||
if (hb < ARRAY_SIZE(hostbyte_table))
|
||||
hb_string = hostbyte_table[hb];
|
||||
|
@ -1044,7 +1044,7 @@ static void pscsi_req_done(struct request *req, blk_status_t status)
|
||||
struct se_cmd *cmd = req->end_io_data;
|
||||
struct pscsi_plugin_task *pt = cmd->priv;
|
||||
int result = scsi_req(req)->result;
|
||||
u8 scsi_status = result & 0xff;
|
||||
enum sam_status scsi_status = result & 0xff;
|
||||
|
||||
if (scsi_status != SAM_STAT_GOOD) {
|
||||
pr_debug("PSCSI Status Byte exception at cmd: %p CDB:"
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include <linux/kernel.h>
|
||||
#include <scsi/scsi_common.h>
|
||||
#include <scsi/scsi_proto.h>
|
||||
#include <scsi/scsi_status.h>
|
||||
|
||||
struct scsi_cmnd;
|
||||
|
||||
@ -79,78 +80,14 @@ static inline int scsi_status_is_check_condition(int status)
|
||||
}
|
||||
|
||||
/*
|
||||
* MESSAGE CODES
|
||||
* Extended message codes.
|
||||
*/
|
||||
|
||||
#define COMMAND_COMPLETE 0x00
|
||||
#define EXTENDED_MESSAGE 0x01
|
||||
#define EXTENDED_MODIFY_DATA_POINTER 0x00
|
||||
#define EXTENDED_SDTR 0x01
|
||||
#define EXTENDED_EXTENDED_IDENTIFY 0x02 /* SCSI-I only */
|
||||
#define EXTENDED_WDTR 0x03
|
||||
#define EXTENDED_PPR 0x04
|
||||
#define EXTENDED_MODIFY_BIDI_DATA_PTR 0x05
|
||||
#define SAVE_POINTERS 0x02
|
||||
#define RESTORE_POINTERS 0x03
|
||||
#define DISCONNECT 0x04
|
||||
#define INITIATOR_ERROR 0x05
|
||||
#define ABORT_TASK_SET 0x06
|
||||
#define MESSAGE_REJECT 0x07
|
||||
#define NOP 0x08
|
||||
#define MSG_PARITY_ERROR 0x09
|
||||
#define LINKED_CMD_COMPLETE 0x0a
|
||||
#define LINKED_FLG_CMD_COMPLETE 0x0b
|
||||
#define TARGET_RESET 0x0c
|
||||
#define ABORT_TASK 0x0d
|
||||
#define CLEAR_TASK_SET 0x0e
|
||||
#define INITIATE_RECOVERY 0x0f /* SCSI-II only */
|
||||
#define RELEASE_RECOVERY 0x10 /* SCSI-II only */
|
||||
#define TERMINATE_IO_PROC 0x11 /* SCSI-II only */
|
||||
#define CLEAR_ACA 0x16
|
||||
#define LOGICAL_UNIT_RESET 0x17
|
||||
#define SIMPLE_QUEUE_TAG 0x20
|
||||
#define HEAD_OF_QUEUE_TAG 0x21
|
||||
#define ORDERED_QUEUE_TAG 0x22
|
||||
#define IGNORE_WIDE_RESIDUE 0x23
|
||||
#define ACA 0x24
|
||||
#define QAS_REQUEST 0x55
|
||||
|
||||
/* Old SCSI2 names, don't use in new code */
|
||||
#define BUS_DEVICE_RESET TARGET_RESET
|
||||
#define ABORT ABORT_TASK_SET
|
||||
|
||||
/*
|
||||
* Host byte codes
|
||||
*/
|
||||
|
||||
#define DID_OK 0x00 /* NO error */
|
||||
#define DID_NO_CONNECT 0x01 /* Couldn't connect before timeout period */
|
||||
#define DID_BUS_BUSY 0x02 /* BUS stayed busy through time out period */
|
||||
#define DID_TIME_OUT 0x03 /* TIMED OUT for other reason */
|
||||
#define DID_BAD_TARGET 0x04 /* BAD target. */
|
||||
#define DID_ABORT 0x05 /* Told to abort for some other reason */
|
||||
#define DID_PARITY 0x06 /* Parity error */
|
||||
#define DID_ERROR 0x07 /* Internal error */
|
||||
#define DID_RESET 0x08 /* Reset by somebody. */
|
||||
#define DID_BAD_INTR 0x09 /* Got an interrupt we weren't expecting. */
|
||||
#define DID_PASSTHROUGH 0x0a /* Force command past mid-layer */
|
||||
#define DID_SOFT_ERROR 0x0b /* The low level driver just wish a retry */
|
||||
#define DID_IMM_RETRY 0x0c /* Retry without decrementing retry count */
|
||||
#define DID_REQUEUE 0x0d /* Requeue command (no immediate retry) also
|
||||
* without decrementing the retry count */
|
||||
#define DID_TRANSPORT_DISRUPTED 0x0e /* Transport error disrupted execution
|
||||
* and the driver blocked the port to
|
||||
* recover the link. Transport class will
|
||||
* retry or fail IO */
|
||||
#define DID_TRANSPORT_FAILFAST 0x0f /* Transport class fastfailed the io */
|
||||
#define DID_TARGET_FAILURE 0x10 /* Permanent target failure, do not retry on
|
||||
* other paths */
|
||||
#define DID_NEXUS_FAILURE 0x11 /* Permanent nexus failure, retry on other
|
||||
* paths might yield different results */
|
||||
#define DID_ALLOC_FAILURE 0x12 /* Space allocation on the device failed */
|
||||
#define DID_MEDIUM_ERROR 0x13 /* Medium error */
|
||||
#define DID_TRANSPORT_MARGINAL 0x14 /* Transport marginal errors */
|
||||
#define DRIVER_OK 0x00 /* Driver status */
|
||||
|
||||
/*
|
||||
* Internal return values.
|
||||
|
@ -190,17 +190,19 @@ struct scsi_varlen_cdb_hdr {
|
||||
* SCSI Architecture Model (SAM) Status codes. Taken from SAM-3 draft
|
||||
* T10/1561-D Revision 4 Draft dated 7th November 2002.
|
||||
*/
|
||||
#define SAM_STAT_GOOD 0x00
|
||||
#define SAM_STAT_CHECK_CONDITION 0x02
|
||||
#define SAM_STAT_CONDITION_MET 0x04
|
||||
#define SAM_STAT_BUSY 0x08
|
||||
#define SAM_STAT_INTERMEDIATE 0x10
|
||||
#define SAM_STAT_INTERMEDIATE_CONDITION_MET 0x14
|
||||
#define SAM_STAT_RESERVATION_CONFLICT 0x18
|
||||
#define SAM_STAT_COMMAND_TERMINATED 0x22 /* obsolete in SAM-3 */
|
||||
#define SAM_STAT_TASK_SET_FULL 0x28
|
||||
#define SAM_STAT_ACA_ACTIVE 0x30
|
||||
#define SAM_STAT_TASK_ABORTED 0x40
|
||||
enum sam_status {
|
||||
SAM_STAT_GOOD = 0x00,
|
||||
SAM_STAT_CHECK_CONDITION = 0x02,
|
||||
SAM_STAT_CONDITION_MET = 0x04,
|
||||
SAM_STAT_BUSY = 0x08,
|
||||
SAM_STAT_INTERMEDIATE = 0x10,
|
||||
SAM_STAT_INTERMEDIATE_CONDITION_MET = 0x14,
|
||||
SAM_STAT_RESERVATION_CONFLICT = 0x18,
|
||||
SAM_STAT_COMMAND_TERMINATED = 0x22, /* obsolete in SAM-3 */
|
||||
SAM_STAT_TASK_SET_FULL = 0x28,
|
||||
SAM_STAT_ACA_ACTIVE = 0x30,
|
||||
SAM_STAT_TASK_ABORTED = 0x40,
|
||||
};
|
||||
|
||||
#define STATUS_MASK 0xfe
|
||||
/*
|
||||
|
74
include/scsi/scsi_status.h
Normal file
74
include/scsi/scsi_status.h
Normal file
@ -0,0 +1,74 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
|
||||
#ifndef _SCSI_SCSI_STATUS_H
|
||||
#define _SCSI_SCSI_STATUS_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <scsi/scsi_proto.h>
|
||||
|
||||
/* Message codes. */
|
||||
enum scsi_msg_byte {
|
||||
COMMAND_COMPLETE = 0x00,
|
||||
EXTENDED_MESSAGE = 0x01,
|
||||
SAVE_POINTERS = 0x02,
|
||||
RESTORE_POINTERS = 0x03,
|
||||
DISCONNECT = 0x04,
|
||||
INITIATOR_ERROR = 0x05,
|
||||
ABORT_TASK_SET = 0x06,
|
||||
MESSAGE_REJECT = 0x07,
|
||||
NOP = 0x08,
|
||||
MSG_PARITY_ERROR = 0x09,
|
||||
LINKED_CMD_COMPLETE = 0x0a,
|
||||
LINKED_FLG_CMD_COMPLETE = 0x0b,
|
||||
TARGET_RESET = 0x0c,
|
||||
ABORT_TASK = 0x0d,
|
||||
CLEAR_TASK_SET = 0x0e,
|
||||
INITIATE_RECOVERY = 0x0f, /* SCSI-II only */
|
||||
RELEASE_RECOVERY = 0x10, /* SCSI-II only */
|
||||
TERMINATE_IO_PROC = 0x11, /* SCSI-II only */
|
||||
CLEAR_ACA = 0x16,
|
||||
LOGICAL_UNIT_RESET = 0x17,
|
||||
SIMPLE_QUEUE_TAG = 0x20,
|
||||
HEAD_OF_QUEUE_TAG = 0x21,
|
||||
ORDERED_QUEUE_TAG = 0x22,
|
||||
IGNORE_WIDE_RESIDUE = 0x23,
|
||||
ACA = 0x24,
|
||||
QAS_REQUEST = 0x55,
|
||||
|
||||
/* Old SCSI2 names, don't use in new code */
|
||||
BUS_DEVICE_RESET = TARGET_RESET,
|
||||
ABORT = ABORT_TASK_SET,
|
||||
};
|
||||
|
||||
/* Host byte codes. */
|
||||
enum scsi_host_status {
|
||||
DID_OK = 0x00, /* NO error */
|
||||
DID_NO_CONNECT = 0x01, /* Couldn't connect before timeout period */
|
||||
DID_BUS_BUSY = 0x02, /* BUS stayed busy through time out period */
|
||||
DID_TIME_OUT = 0x03, /* TIMED OUT for other reason */
|
||||
DID_BAD_TARGET = 0x04, /* BAD target. */
|
||||
DID_ABORT = 0x05, /* Told to abort for some other reason */
|
||||
DID_PARITY = 0x06, /* Parity error */
|
||||
DID_ERROR = 0x07, /* Internal error */
|
||||
DID_RESET = 0x08, /* Reset by somebody. */
|
||||
DID_BAD_INTR = 0x09, /* Got an interrupt we weren't expecting. */
|
||||
DID_PASSTHROUGH = 0x0a, /* Force command past mid-layer */
|
||||
DID_SOFT_ERROR = 0x0b, /* The low level driver just wish a retry */
|
||||
DID_IMM_RETRY = 0x0c, /* Retry without decrementing retry count */
|
||||
DID_REQUEUE = 0x0d, /* Requeue command (no immediate retry) also
|
||||
* without decrementing the retry count */
|
||||
DID_TRANSPORT_DISRUPTED = 0x0e, /* Transport error disrupted execution
|
||||
* and the driver blocked the port to
|
||||
* recover the link. Transport class will
|
||||
* retry or fail IO */
|
||||
DID_TRANSPORT_FAILFAST = 0x0f, /* Transport class fastfailed the io */
|
||||
DID_TARGET_FAILURE = 0x10, /* Permanent target failure, do not retry on
|
||||
* other paths */
|
||||
DID_NEXUS_FAILURE = 0x11, /* Permanent nexus failure, retry on other
|
||||
* paths might yield different results */
|
||||
DID_ALLOC_FAILURE = 0x12, /* Space allocation on the device failed */
|
||||
DID_MEDIUM_ERROR = 0x13, /* Medium error */
|
||||
DID_TRANSPORT_MARGINAL = 0x14, /* Transport marginal errors */
|
||||
};
|
||||
|
||||
#endif /* _SCSI_SCSI_STATUS_H */
|
Loading…
Reference in New Issue
Block a user