~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/scsi/scsi_common.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0 */
  2 /*
  3  * Functions used by both the SCSI initiator code and the SCSI target code.
  4  */
  5 
  6 #ifndef _SCSI_COMMON_H_
  7 #define _SCSI_COMMON_H_
  8 
  9 #include <linux/types.h>
 10 #include <uapi/linux/pr.h>
 11 #include <scsi/scsi_proto.h>
 12 
 13 enum scsi_pr_type {
 14         SCSI_PR_WRITE_EXCLUSIVE                 = 0x01,
 15         SCSI_PR_EXCLUSIVE_ACCESS                = 0x03,
 16         SCSI_PR_WRITE_EXCLUSIVE_REG_ONLY        = 0x05,
 17         SCSI_PR_EXCLUSIVE_ACCESS_REG_ONLY       = 0x06,
 18         SCSI_PR_WRITE_EXCLUSIVE_ALL_REGS        = 0x07,
 19         SCSI_PR_EXCLUSIVE_ACCESS_ALL_REGS       = 0x08,
 20 };
 21 
 22 enum scsi_pr_type block_pr_type_to_scsi(enum pr_type type);
 23 enum pr_type scsi_pr_type_to_block(enum scsi_pr_type type);
 24 
 25 static inline unsigned
 26 scsi_varlen_cdb_length(const void *hdr)
 27 {
 28         return ((struct scsi_varlen_cdb_hdr *)hdr)->additional_cdb_length + 8;
 29 }
 30 
 31 extern const unsigned char scsi_command_size_tbl[8];
 32 #define COMMAND_SIZE(opcode) scsi_command_size_tbl[((opcode) >> 5) & 7]
 33 
 34 static inline unsigned
 35 scsi_command_size(const unsigned char *cmnd)
 36 {
 37         return (cmnd[0] == VARIABLE_LENGTH_CMD) ?
 38                 scsi_varlen_cdb_length(cmnd) : COMMAND_SIZE(cmnd[0]);
 39 }
 40 
 41 static inline unsigned char
 42 scsi_command_control(const unsigned char *cmnd)
 43 {
 44         return (cmnd[0] == VARIABLE_LENGTH_CMD) ?
 45                 cmnd[1] : cmnd[COMMAND_SIZE(cmnd[0]) - 1];
 46 }
 47 
 48 /* Returns a human-readable name for the device */
 49 extern const char *scsi_device_type(unsigned type);
 50 
 51 extern void int_to_scsilun(u64, struct scsi_lun *);
 52 extern u64 scsilun_to_int(struct scsi_lun *);
 53 
 54 /*
 55  * This is a slightly modified SCSI sense "descriptor" format header.
 56  * The addition is to allow the 0x70 and 0x71 response codes. The idea
 57  * is to place the salient data from either "fixed" or "descriptor" sense
 58  * format into one structure to ease application processing.
 59  *
 60  * The original sense buffer should be kept around for those cases
 61  * in which more information is required (e.g. the LBA of a MEDIUM ERROR).
 62  */
 63 struct scsi_sense_hdr {         /* See SPC-3 section 4.5 */
 64         u8 response_code;       /* permit: 0x0, 0x70, 0x71, 0x72, 0x73 */
 65         u8 sense_key;
 66         u8 asc;
 67         u8 ascq;
 68         u8 byte4;
 69         u8 byte5;
 70         u8 byte6;
 71         u8 additional_length;   /* always 0 for fixed sense format */
 72 };
 73 
 74 static inline bool scsi_sense_valid(const struct scsi_sense_hdr *sshdr)
 75 {
 76         if (!sshdr)
 77                 return false;
 78 
 79         return (sshdr->response_code & 0x70) == 0x70;
 80 }
 81 
 82 extern bool scsi_normalize_sense(const u8 *sense_buffer, int sb_len,
 83                                  struct scsi_sense_hdr *sshdr);
 84 
 85 extern void scsi_build_sense_buffer(int desc, u8 *buf, u8 key, u8 asc, u8 ascq);
 86 int scsi_set_sense_information(u8 *buf, int buf_len, u64 info);
 87 int scsi_set_sense_field_pointer(u8 *buf, int buf_len, u16 fp, u8 bp, bool cd);
 88 extern const u8 * scsi_sense_desc_find(const u8 * sense_buffer, int sb_len,
 89                                        int desc_type);
 90 
 91 #endif /* _SCSI_COMMON_H_ */
 92 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php