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

TOMOYO Linux Cross Reference
Linux/include/uapi/scsi/scsi_bsg_ufs.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 WITH Linux-syscall-note */
  2 /*
  3  * UFS Transport SGIO v4 BSG Message Support
  4  *
  5  * Copyright (C) 2011-2013 Samsung India Software Operations
  6  * Copyright (C) 2018 Western Digital Corporation
  7  */
  8 #ifndef SCSI_BSG_UFS_H
  9 #define SCSI_BSG_UFS_H
 10 
 11 #include <asm/byteorder.h>
 12 #include <linux/types.h>
 13 /*
 14  * This file intended to be included by both kernel and user space
 15  */
 16 
 17 #define UFS_CDB_SIZE    16
 18 /* uic commands are 4DW long, per UFSHCI V2.1 paragraph 5.6.1 */
 19 #define UIC_CMD_SIZE (sizeof(__u32) * 4)
 20 
 21 enum ufs_bsg_msg_code {
 22         UPIU_TRANSACTION_UIC_CMD = 0x1F,
 23         UPIU_TRANSACTION_ARPMB_CMD,
 24 };
 25 
 26 /* UFS RPMB Request Message Types */
 27 enum ufs_rpmb_op_type {
 28         UFS_RPMB_WRITE_KEY              = 0x01,
 29         UFS_RPMB_READ_CNT               = 0x02,
 30         UFS_RPMB_WRITE                  = 0x03,
 31         UFS_RPMB_READ                   = 0x04,
 32         UFS_RPMB_READ_RESP              = 0x05,
 33         UFS_RPMB_SEC_CONF_WRITE         = 0x06,
 34         UFS_RPMB_SEC_CONF_READ          = 0x07,
 35         UFS_RPMB_PURGE_ENABLE           = 0x08,
 36         UFS_RPMB_PURGE_STATUS_READ      = 0x09,
 37 };
 38 
 39 /**
 40  * struct utp_upiu_header - UPIU header structure
 41  * @dword_0: UPIU header DW-0
 42  * @dword_1: UPIU header DW-1
 43  * @dword_2: UPIU header DW-2
 44  *
 45  * @transaction_code: Type of request or response. See also enum
 46  *      upiu_request_transaction and enum upiu_response_transaction.
 47  * @flags: UPIU flags. The meaning of individual flags depends on the
 48  *      transaction code.
 49  * @lun: Logical unit number.
 50  * @task_tag: Task tag.
 51  * @iid: Initiator ID.
 52  * @command_set_type: 0 for SCSI command set; 1 for UFS specific.
 53  * @tm_function: Task management function in case of a task management request
 54  *      UPIU.
 55  * @query_function: Query function in case of a query request UPIU.
 56  * @response: 0 for success; 1 for failure.
 57  * @status: SCSI status if this is the header of a response to a SCSI command.
 58  * @ehs_length: EHS length in units of 32 bytes.
 59  * @device_information:
 60  * @data_segment_length: data segment length.
 61  */
 62 struct utp_upiu_header {
 63         union {
 64                 struct {
 65                         __be32 dword_0;
 66                         __be32 dword_1;
 67                         __be32 dword_2;
 68                 };
 69                 struct {
 70                         __u8 transaction_code;
 71                         __u8 flags;
 72                         __u8 lun;
 73                         __u8 task_tag;
 74 #if defined(__BIG_ENDIAN)
 75                         __u8 iid: 4;
 76                         __u8 command_set_type: 4;
 77 #elif defined(__LITTLE_ENDIAN)
 78                         __u8 command_set_type: 4;
 79                         __u8 iid: 4;
 80 #else
 81 #error
 82 #endif
 83                         union {
 84                                 __u8 tm_function;
 85                                 __u8 query_function;
 86                         } __attribute__((packed));
 87                         __u8 response;
 88                         __u8 status;
 89                         __u8 ehs_length;
 90                         __u8 device_information;
 91                         __be16 data_segment_length;
 92                 };
 93         };
 94 };
 95 
 96 /**
 97  * struct utp_upiu_query - upiu request buffer structure for
 98  * query request.
 99  * @opcode: command to perform B-0
100  * @idn: a value that indicates the particular type of data B-1
101  * @index: Index to further identify data B-2
102  * @selector: Index to further identify data B-3
103  * @reserved_osf: spec reserved field B-4,5
104  * @length: number of descriptor bytes to read/write B-6,7
105  * @value: Attribute value to be written DW-5
106  * @reserved: spec reserved DW-6,7
107  */
108 struct utp_upiu_query {
109         __u8 opcode;
110         __u8 idn;
111         __u8 index;
112         __u8 selector;
113         __be16 reserved_osf;
114         __be16 length;
115         __be32 value;
116         __be32 reserved[2];
117 };
118 
119 /**
120  * struct utp_upiu_query_v4_0 - upiu request buffer structure for
121  * query request >= UFS 4.0 spec.
122  * @opcode: command to perform B-0
123  * @idn: a value that indicates the particular type of data B-1
124  * @index: Index to further identify data B-2
125  * @selector: Index to further identify data B-3
126  * @osf3: spec field B-4
127  * @osf4: spec field B-5
128  * @osf5: spec field B 6,7
129  * @osf6: spec field DW 8,9
130  * @osf7: spec field DW 10,11
131  */
132 struct utp_upiu_query_v4_0 {
133         __u8 opcode;
134         __u8 idn;
135         __u8 index;
136         __u8 selector;
137         __u8 osf3;
138         __u8 osf4;
139         __be16 osf5;
140         __be32 osf6;
141         __be32 osf7;
142         /* private: */
143         __be32 reserved;
144 };
145 
146 /**
147  * struct utp_upiu_cmd - Command UPIU structure
148  * @exp_data_transfer_len: Data Transfer Length DW-3
149  * @cdb: Command Descriptor Block CDB DW-4 to DW-7
150  */
151 struct utp_upiu_cmd {
152         __be32 exp_data_transfer_len;
153         __u8 cdb[UFS_CDB_SIZE];
154 };
155 
156 /**
157  * struct utp_upiu_req - general upiu request structure
158  * @header:UPIU header structure DW-0 to DW-2
159  * @sc: fields structure for scsi command DW-3 to DW-7
160  * @qr: fields structure for query request DW-3 to DW-7
161  * @uc: use utp_upiu_query to host the 4 dwords of uic command
162  */
163 struct utp_upiu_req {
164         struct utp_upiu_header header;
165         union {
166                 struct utp_upiu_cmd             sc;
167                 struct utp_upiu_query           qr;
168                 struct utp_upiu_query           uc;
169         };
170 };
171 
172 struct ufs_arpmb_meta {
173         __be16  req_resp_type;
174         __u8    nonce[16];
175         __be32  write_counter;
176         __be16  addr_lun;
177         __be16  block_count;
178         __be16  result;
179 } __attribute__((__packed__));
180 
181 struct ufs_ehs {
182         __u8    length;
183         __u8    ehs_type;
184         __be16  ehssub_type;
185         struct ufs_arpmb_meta meta;
186         __u8    mac_key[32];
187 } __attribute__((__packed__));
188 
189 /* request (CDB) structure of the sg_io_v4 */
190 struct ufs_bsg_request {
191         __u32 msgcode;
192         struct utp_upiu_req upiu_req;
193 };
194 
195 /* response (request sense data) structure of the sg_io_v4 */
196 struct ufs_bsg_reply {
197         /*
198          * The completion result. Result exists in two forms:
199          * if negative, it is an -Exxx system errno value. There will
200          * be no further reply information supplied.
201          * else, it's the 4-byte scsi error result, with driver, host,
202          * msg and status fields. The per-msgcode reply structure
203          * will contain valid data.
204          */
205         int result;
206 
207         /* If there was reply_payload, how much was received? */
208         __u32 reply_payload_rcv_len;
209 
210         struct utp_upiu_req upiu_rsp;
211 };
212 
213 struct ufs_rpmb_request {
214         struct ufs_bsg_request bsg_request;
215         struct ufs_ehs ehs_req;
216 };
217 
218 struct ufs_rpmb_reply {
219         struct ufs_bsg_reply bsg_reply;
220         struct ufs_ehs ehs_rsp;
221 };
222 #endif /* UFS_BSG_H */
223 

~ [ 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