1 /*
2  * This file is auto-generated. Modifications will be lost.
3  *
4  * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/
5  * for more information.
6  */
7 #ifndef SCSI_BSG_UFS_H
8 #define SCSI_BSG_UFS_H
9 #include <asm/byteorder.h>
10 #include <linux/types.h>
11 #define UFS_CDB_SIZE 16
12 #define UIC_CMD_SIZE (sizeof(__u32) * 4)
13 enum ufs_bsg_msg_code {
14   UPIU_TRANSACTION_UIC_CMD = 0x1F,
15   UPIU_TRANSACTION_ARPMB_CMD,
16 };
17 enum ufs_rpmb_op_type {
18   UFS_RPMB_WRITE_KEY = 0x01,
19   UFS_RPMB_READ_CNT = 0x02,
20   UFS_RPMB_WRITE = 0x03,
21   UFS_RPMB_READ = 0x04,
22   UFS_RPMB_READ_RESP = 0x05,
23   UFS_RPMB_SEC_CONF_WRITE = 0x06,
24   UFS_RPMB_SEC_CONF_READ = 0x07,
25   UFS_RPMB_PURGE_ENABLE = 0x08,
26   UFS_RPMB_PURGE_STATUS_READ = 0x09,
27 };
28 struct utp_upiu_header {
29   union {
30     struct {
31       __be32 dword_0;
32       __be32 dword_1;
33       __be32 dword_2;
34     };
35     struct {
36       __u8 transaction_code;
37       __u8 flags;
38       __u8 lun;
39       __u8 task_tag;
40 #ifdef __BIG_ENDIAN
41       __u8 iid : 4;
42       __u8 command_set_type : 4;
43 #elif defined(__LITTLE_ENDIAN)
44       __u8 command_set_type : 4;
45       __u8 iid : 4;
46 #else
47 #error
48 #endif
49       union {
50         __u8 tm_function;
51         __u8 query_function;
52       } __attribute__((packed));
53       __u8 response;
54       __u8 status;
55       __u8 ehs_length;
56       __u8 device_information;
57       __be16 data_segment_length;
58     };
59   };
60 };
61 struct utp_upiu_query {
62   __u8 opcode;
63   __u8 idn;
64   __u8 index;
65   __u8 selector;
66   __be16 reserved_osf;
67   __be16 length;
68   __be32 value;
69   __be32 reserved[2];
70 };
71 struct utp_upiu_query_v4_0 {
72   __u8 opcode;
73   __u8 idn;
74   __u8 index;
75   __u8 selector;
76   __u8 osf3;
77   __u8 osf4;
78   __be16 osf5;
79   __be32 osf6;
80   __be32 osf7;
81   __be32 reserved;
82 };
83 struct utp_upiu_cmd {
84   __be32 exp_data_transfer_len;
85   __u8 cdb[UFS_CDB_SIZE];
86 };
87 struct utp_upiu_req {
88   struct utp_upiu_header header;
89   union {
90     struct utp_upiu_cmd sc;
91     struct utp_upiu_query qr;
92     struct utp_upiu_query uc;
93   };
94 };
95 struct ufs_arpmb_meta {
96   __be16 req_resp_type;
97   __u8 nonce[16];
98   __be32 write_counter;
99   __be16 addr_lun;
100   __be16 block_count;
101   __be16 result;
102 } __attribute__((__packed__));
103 struct ufs_ehs {
104   __u8 length;
105   __u8 ehs_type;
106   __be16 ehssub_type;
107   struct ufs_arpmb_meta meta;
108   __u8 mac_key[32];
109 } __attribute__((__packed__));
110 struct ufs_bsg_request {
111   __u32 msgcode;
112   struct utp_upiu_req upiu_req;
113 };
114 struct ufs_bsg_reply {
115   int result;
116   __u32 reply_payload_rcv_len;
117   struct utp_upiu_req upiu_rsp;
118 };
119 struct ufs_rpmb_request {
120   struct ufs_bsg_request bsg_request;
121   struct ufs_ehs ehs_req;
122 };
123 struct ufs_rpmb_reply {
124   struct ufs_bsg_reply bsg_reply;
125   struct ufs_ehs ehs_rsp;
126 };
127 #endif
128