1 /* SPDX-License-Identifier: GPL-2.0 */ << 2 #ifndef __USB_UAS_H__ 1 #ifndef __USB_UAS_H__ 3 #define __USB_UAS_H__ 2 #define __USB_UAS_H__ 4 3 5 #include <scsi/scsi.h> 4 #include <scsi/scsi.h> 6 #include <scsi/scsi_cmnd.h> 5 #include <scsi/scsi_cmnd.h> 7 6 8 /* Common header for all IUs */ 7 /* Common header for all IUs */ 9 struct iu { 8 struct iu { 10 __u8 iu_id; 9 __u8 iu_id; 11 __u8 rsvd1; 10 __u8 rsvd1; 12 __be16 tag; 11 __be16 tag; 13 } __attribute__((__packed__)); 12 } __attribute__((__packed__)); 14 13 15 enum { 14 enum { 16 IU_ID_COMMAND = 0x01, 15 IU_ID_COMMAND = 0x01, 17 IU_ID_STATUS = 0x03, 16 IU_ID_STATUS = 0x03, 18 IU_ID_RESPONSE = 0x04, 17 IU_ID_RESPONSE = 0x04, 19 IU_ID_TASK_MGMT = 0x05, 18 IU_ID_TASK_MGMT = 0x05, 20 IU_ID_READ_READY = 0x06, 19 IU_ID_READ_READY = 0x06, 21 IU_ID_WRITE_READY = 0x07, 20 IU_ID_WRITE_READY = 0x07, 22 }; 21 }; 23 22 24 enum { 23 enum { 25 TMF_ABORT_TASK = 0x01, 24 TMF_ABORT_TASK = 0x01, 26 TMF_ABORT_TASK_SET = 0x02, 25 TMF_ABORT_TASK_SET = 0x02, 27 TMF_CLEAR_TASK_SET = 0x04, 26 TMF_CLEAR_TASK_SET = 0x04, 28 TMF_LOGICAL_UNIT_RESET = 0x08, 27 TMF_LOGICAL_UNIT_RESET = 0x08, 29 TMF_I_T_NEXUS_RESET = 0x10, 28 TMF_I_T_NEXUS_RESET = 0x10, 30 TMF_CLEAR_ACA = 0x40, 29 TMF_CLEAR_ACA = 0x40, 31 TMF_QUERY_TASK = 0x80, 30 TMF_QUERY_TASK = 0x80, 32 TMF_QUERY_TASK_SET = 0x81, 31 TMF_QUERY_TASK_SET = 0x81, 33 TMF_QUERY_ASYNC_EVENT = 0x82, 32 TMF_QUERY_ASYNC_EVENT = 0x82, 34 }; 33 }; 35 34 36 enum { 35 enum { 37 RC_TMF_COMPLETE = 0x00, 36 RC_TMF_COMPLETE = 0x00, 38 RC_INVALID_INFO_UNIT = 0x02, 37 RC_INVALID_INFO_UNIT = 0x02, 39 RC_TMF_NOT_SUPPORTED = 0x04, 38 RC_TMF_NOT_SUPPORTED = 0x04, 40 RC_TMF_FAILED = 0x05, 39 RC_TMF_FAILED = 0x05, 41 RC_TMF_SUCCEEDED = 0x08, 40 RC_TMF_SUCCEEDED = 0x08, 42 RC_INCORRECT_LUN = 0x09, 41 RC_INCORRECT_LUN = 0x09, 43 RC_OVERLAPPED_TAG = 0x0a, 42 RC_OVERLAPPED_TAG = 0x0a, 44 }; 43 }; 45 44 46 struct command_iu { 45 struct command_iu { 47 __u8 iu_id; 46 __u8 iu_id; 48 __u8 rsvd1; 47 __u8 rsvd1; 49 __be16 tag; 48 __be16 tag; 50 __u8 prio_attr; 49 __u8 prio_attr; 51 __u8 rsvd5; 50 __u8 rsvd5; 52 __u8 len; 51 __u8 len; 53 __u8 rsvd7; 52 __u8 rsvd7; 54 struct scsi_lun lun; 53 struct scsi_lun lun; 55 __u8 cdb[16]; /* XXX: Overflow-check 54 __u8 cdb[16]; /* XXX: Overflow-checking tools may misunderstand */ 56 } __attribute__((__packed__)); 55 } __attribute__((__packed__)); 57 56 58 struct task_mgmt_iu { 57 struct task_mgmt_iu { 59 __u8 iu_id; 58 __u8 iu_id; 60 __u8 rsvd1; 59 __u8 rsvd1; 61 __be16 tag; 60 __be16 tag; 62 __u8 function; 61 __u8 function; 63 __u8 rsvd2; 62 __u8 rsvd2; 64 __be16 task_tag; 63 __be16 task_tag; 65 struct scsi_lun lun; 64 struct scsi_lun lun; 66 } __attribute__((__packed__)); 65 } __attribute__((__packed__)); 67 66 68 /* 67 /* 69 * Also used for the Read Ready and Write Read 68 * Also used for the Read Ready and Write Ready IUs since they have the 70 * same first four bytes 69 * same first four bytes 71 */ 70 */ 72 struct sense_iu { 71 struct sense_iu { 73 __u8 iu_id; 72 __u8 iu_id; 74 __u8 rsvd1; 73 __u8 rsvd1; 75 __be16 tag; 74 __be16 tag; 76 __be16 status_qual; 75 __be16 status_qual; 77 __u8 status; 76 __u8 status; 78 __u8 rsvd7[7]; 77 __u8 rsvd7[7]; 79 __be16 len; 78 __be16 len; 80 __u8 sense[SCSI_SENSE_BUFFERSIZE]; 79 __u8 sense[SCSI_SENSE_BUFFERSIZE]; 81 } __attribute__((__packed__)); 80 } __attribute__((__packed__)); 82 81 83 struct response_iu { 82 struct response_iu { 84 __u8 iu_id; 83 __u8 iu_id; 85 __u8 rsvd1; 84 __u8 rsvd1; 86 __be16 tag; 85 __be16 tag; 87 __u8 add_response_info[3]; 86 __u8 add_response_info[3]; 88 __u8 response_code; 87 __u8 response_code; 89 } __attribute__((__packed__)); 88 } __attribute__((__packed__)); 90 89 91 struct usb_pipe_usage_descriptor { 90 struct usb_pipe_usage_descriptor { 92 __u8 bLength; 91 __u8 bLength; 93 __u8 bDescriptorType; 92 __u8 bDescriptorType; 94 93 95 __u8 bPipeID; 94 __u8 bPipeID; 96 __u8 Reserved; 95 __u8 Reserved; 97 } __attribute__((__packed__)); 96 } __attribute__((__packed__)); 98 97 99 enum { 98 enum { 100 CMD_PIPE_ID = 1, 99 CMD_PIPE_ID = 1, 101 STATUS_PIPE_ID = 2, 100 STATUS_PIPE_ID = 2, 102 DATA_IN_PIPE_ID = 3, 101 DATA_IN_PIPE_ID = 3, 103 DATA_OUT_PIPE_ID = 4, 102 DATA_OUT_PIPE_ID = 4, 104 103 105 UAS_SIMPLE_TAG = 0, 104 UAS_SIMPLE_TAG = 0, 106 UAS_HEAD_TAG = 1, 105 UAS_HEAD_TAG = 1, 107 UAS_ORDERED_TAG = 2, 106 UAS_ORDERED_TAG = 2, 108 UAS_ACA = 4, 107 UAS_ACA = 4, 109 }; 108 }; 110 #endif 109 #endif 111 110
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.