xref: /aosp_15_r20/external/kernel-headers/original/uapi/linux/sed-opal.h (revision f80ad8b4341604f5951dab671d41019a6d7087ce)
1*f80ad8b4SAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2*f80ad8b4SAndroid Build Coastguard Worker /*
3*f80ad8b4SAndroid Build Coastguard Worker  * Copyright © 2016 Intel Corporation
4*f80ad8b4SAndroid Build Coastguard Worker  *
5*f80ad8b4SAndroid Build Coastguard Worker  * Authors:
6*f80ad8b4SAndroid Build Coastguard Worker  *    Rafael Antognolli <[email protected]>
7*f80ad8b4SAndroid Build Coastguard Worker  *    Scott  Bauer      <[email protected]>
8*f80ad8b4SAndroid Build Coastguard Worker  */
9*f80ad8b4SAndroid Build Coastguard Worker 
10*f80ad8b4SAndroid Build Coastguard Worker #ifndef _UAPI_SED_OPAL_H
11*f80ad8b4SAndroid Build Coastguard Worker #define _UAPI_SED_OPAL_H
12*f80ad8b4SAndroid Build Coastguard Worker 
13*f80ad8b4SAndroid Build Coastguard Worker #include <linux/types.h>
14*f80ad8b4SAndroid Build Coastguard Worker 
15*f80ad8b4SAndroid Build Coastguard Worker #define OPAL_KEY_MAX 256
16*f80ad8b4SAndroid Build Coastguard Worker #define OPAL_MAX_LRS 9
17*f80ad8b4SAndroid Build Coastguard Worker 
18*f80ad8b4SAndroid Build Coastguard Worker enum opal_mbr {
19*f80ad8b4SAndroid Build Coastguard Worker 	OPAL_MBR_ENABLE = 0x0,
20*f80ad8b4SAndroid Build Coastguard Worker 	OPAL_MBR_DISABLE = 0x01,
21*f80ad8b4SAndroid Build Coastguard Worker };
22*f80ad8b4SAndroid Build Coastguard Worker 
23*f80ad8b4SAndroid Build Coastguard Worker enum opal_mbr_done_flag {
24*f80ad8b4SAndroid Build Coastguard Worker 	OPAL_MBR_NOT_DONE = 0x0,
25*f80ad8b4SAndroid Build Coastguard Worker 	OPAL_MBR_DONE = 0x01
26*f80ad8b4SAndroid Build Coastguard Worker };
27*f80ad8b4SAndroid Build Coastguard Worker 
28*f80ad8b4SAndroid Build Coastguard Worker enum opal_user {
29*f80ad8b4SAndroid Build Coastguard Worker 	OPAL_ADMIN1 = 0x0,
30*f80ad8b4SAndroid Build Coastguard Worker 	OPAL_USER1 = 0x01,
31*f80ad8b4SAndroid Build Coastguard Worker 	OPAL_USER2 = 0x02,
32*f80ad8b4SAndroid Build Coastguard Worker 	OPAL_USER3 = 0x03,
33*f80ad8b4SAndroid Build Coastguard Worker 	OPAL_USER4 = 0x04,
34*f80ad8b4SAndroid Build Coastguard Worker 	OPAL_USER5 = 0x05,
35*f80ad8b4SAndroid Build Coastguard Worker 	OPAL_USER6 = 0x06,
36*f80ad8b4SAndroid Build Coastguard Worker 	OPAL_USER7 = 0x07,
37*f80ad8b4SAndroid Build Coastguard Worker 	OPAL_USER8 = 0x08,
38*f80ad8b4SAndroid Build Coastguard Worker 	OPAL_USER9 = 0x09,
39*f80ad8b4SAndroid Build Coastguard Worker };
40*f80ad8b4SAndroid Build Coastguard Worker 
41*f80ad8b4SAndroid Build Coastguard Worker enum opal_lock_state {
42*f80ad8b4SAndroid Build Coastguard Worker 	OPAL_RO = 0x01, /* 0001 */
43*f80ad8b4SAndroid Build Coastguard Worker 	OPAL_RW = 0x02, /* 0010 */
44*f80ad8b4SAndroid Build Coastguard Worker 	OPAL_LK = 0x04, /* 0100 */
45*f80ad8b4SAndroid Build Coastguard Worker };
46*f80ad8b4SAndroid Build Coastguard Worker 
47*f80ad8b4SAndroid Build Coastguard Worker enum opal_lock_flags {
48*f80ad8b4SAndroid Build Coastguard Worker 	/* IOC_OPAL_SAVE will also store the provided key for locking */
49*f80ad8b4SAndroid Build Coastguard Worker 	OPAL_SAVE_FOR_LOCK = 0x01,
50*f80ad8b4SAndroid Build Coastguard Worker };
51*f80ad8b4SAndroid Build Coastguard Worker 
52*f80ad8b4SAndroid Build Coastguard Worker enum opal_key_type {
53*f80ad8b4SAndroid Build Coastguard Worker 	OPAL_INCLUDED = 0,	/* key[] is the key */
54*f80ad8b4SAndroid Build Coastguard Worker 	OPAL_KEYRING,		/* key is in keyring */
55*f80ad8b4SAndroid Build Coastguard Worker };
56*f80ad8b4SAndroid Build Coastguard Worker 
57*f80ad8b4SAndroid Build Coastguard Worker struct opal_key {
58*f80ad8b4SAndroid Build Coastguard Worker 	__u8 lr;
59*f80ad8b4SAndroid Build Coastguard Worker 	__u8 key_len;
60*f80ad8b4SAndroid Build Coastguard Worker 	__u8 key_type;
61*f80ad8b4SAndroid Build Coastguard Worker 	__u8 __align[5];
62*f80ad8b4SAndroid Build Coastguard Worker 	__u8 key[OPAL_KEY_MAX];
63*f80ad8b4SAndroid Build Coastguard Worker };
64*f80ad8b4SAndroid Build Coastguard Worker 
65*f80ad8b4SAndroid Build Coastguard Worker enum opal_revert_lsp_opts {
66*f80ad8b4SAndroid Build Coastguard Worker 	OPAL_PRESERVE = 0x01,
67*f80ad8b4SAndroid Build Coastguard Worker };
68*f80ad8b4SAndroid Build Coastguard Worker 
69*f80ad8b4SAndroid Build Coastguard Worker struct opal_lr_act {
70*f80ad8b4SAndroid Build Coastguard Worker 	struct opal_key key;
71*f80ad8b4SAndroid Build Coastguard Worker 	__u32 sum;
72*f80ad8b4SAndroid Build Coastguard Worker 	__u8 num_lrs;
73*f80ad8b4SAndroid Build Coastguard Worker 	__u8 lr[OPAL_MAX_LRS];
74*f80ad8b4SAndroid Build Coastguard Worker 	__u8 align[2]; /* Align to 8 byte boundary */
75*f80ad8b4SAndroid Build Coastguard Worker };
76*f80ad8b4SAndroid Build Coastguard Worker 
77*f80ad8b4SAndroid Build Coastguard Worker struct opal_session_info {
78*f80ad8b4SAndroid Build Coastguard Worker 	__u32 sum;
79*f80ad8b4SAndroid Build Coastguard Worker 	__u32 who;
80*f80ad8b4SAndroid Build Coastguard Worker 	struct opal_key opal_key;
81*f80ad8b4SAndroid Build Coastguard Worker };
82*f80ad8b4SAndroid Build Coastguard Worker 
83*f80ad8b4SAndroid Build Coastguard Worker struct opal_user_lr_setup {
84*f80ad8b4SAndroid Build Coastguard Worker 	__u64 range_start;
85*f80ad8b4SAndroid Build Coastguard Worker 	__u64 range_length;
86*f80ad8b4SAndroid Build Coastguard Worker 	__u32 RLE; /* Read Lock enabled */
87*f80ad8b4SAndroid Build Coastguard Worker 	__u32 WLE; /* Write Lock Enabled */
88*f80ad8b4SAndroid Build Coastguard Worker 	struct opal_session_info session;
89*f80ad8b4SAndroid Build Coastguard Worker };
90*f80ad8b4SAndroid Build Coastguard Worker 
91*f80ad8b4SAndroid Build Coastguard Worker struct opal_lr_status {
92*f80ad8b4SAndroid Build Coastguard Worker 	struct opal_session_info session;
93*f80ad8b4SAndroid Build Coastguard Worker 	__u64 range_start;
94*f80ad8b4SAndroid Build Coastguard Worker 	__u64 range_length;
95*f80ad8b4SAndroid Build Coastguard Worker 	__u32 RLE; /* Read Lock enabled */
96*f80ad8b4SAndroid Build Coastguard Worker 	__u32 WLE; /* Write Lock Enabled */
97*f80ad8b4SAndroid Build Coastguard Worker 	__u32 l_state;
98*f80ad8b4SAndroid Build Coastguard Worker 	__u8  align[4];
99*f80ad8b4SAndroid Build Coastguard Worker };
100*f80ad8b4SAndroid Build Coastguard Worker 
101*f80ad8b4SAndroid Build Coastguard Worker struct opal_lock_unlock {
102*f80ad8b4SAndroid Build Coastguard Worker 	struct opal_session_info session;
103*f80ad8b4SAndroid Build Coastguard Worker 	__u32 l_state;
104*f80ad8b4SAndroid Build Coastguard Worker 	__u16 flags;
105*f80ad8b4SAndroid Build Coastguard Worker 	__u8 __align[2];
106*f80ad8b4SAndroid Build Coastguard Worker };
107*f80ad8b4SAndroid Build Coastguard Worker 
108*f80ad8b4SAndroid Build Coastguard Worker struct opal_new_pw {
109*f80ad8b4SAndroid Build Coastguard Worker 	struct opal_session_info session;
110*f80ad8b4SAndroid Build Coastguard Worker 
111*f80ad8b4SAndroid Build Coastguard Worker 	/* When we're not operating in sum, and we first set
112*f80ad8b4SAndroid Build Coastguard Worker 	 * passwords we need to set them via ADMIN authority.
113*f80ad8b4SAndroid Build Coastguard Worker 	 * After passwords are changed, we can set them via,
114*f80ad8b4SAndroid Build Coastguard Worker 	 * User authorities.
115*f80ad8b4SAndroid Build Coastguard Worker 	 * Because of this restriction we need to know about
116*f80ad8b4SAndroid Build Coastguard Worker 	 * Two different users. One in 'session' which we will use
117*f80ad8b4SAndroid Build Coastguard Worker 	 * to start the session and new_userr_pw as the user we're
118*f80ad8b4SAndroid Build Coastguard Worker 	 * chaning the pw for.
119*f80ad8b4SAndroid Build Coastguard Worker 	 */
120*f80ad8b4SAndroid Build Coastguard Worker 	struct opal_session_info new_user_pw;
121*f80ad8b4SAndroid Build Coastguard Worker };
122*f80ad8b4SAndroid Build Coastguard Worker 
123*f80ad8b4SAndroid Build Coastguard Worker struct opal_mbr_data {
124*f80ad8b4SAndroid Build Coastguard Worker 	struct opal_key key;
125*f80ad8b4SAndroid Build Coastguard Worker 	__u8 enable_disable;
126*f80ad8b4SAndroid Build Coastguard Worker 	__u8 __align[7];
127*f80ad8b4SAndroid Build Coastguard Worker };
128*f80ad8b4SAndroid Build Coastguard Worker 
129*f80ad8b4SAndroid Build Coastguard Worker struct opal_mbr_done {
130*f80ad8b4SAndroid Build Coastguard Worker 	struct opal_key key;
131*f80ad8b4SAndroid Build Coastguard Worker 	__u8 done_flag;
132*f80ad8b4SAndroid Build Coastguard Worker 	__u8 __align[7];
133*f80ad8b4SAndroid Build Coastguard Worker };
134*f80ad8b4SAndroid Build Coastguard Worker 
135*f80ad8b4SAndroid Build Coastguard Worker struct opal_shadow_mbr {
136*f80ad8b4SAndroid Build Coastguard Worker 	struct opal_key key;
137*f80ad8b4SAndroid Build Coastguard Worker 	const __u64 data;
138*f80ad8b4SAndroid Build Coastguard Worker 	__u64 offset;
139*f80ad8b4SAndroid Build Coastguard Worker 	__u64 size;
140*f80ad8b4SAndroid Build Coastguard Worker };
141*f80ad8b4SAndroid Build Coastguard Worker 
142*f80ad8b4SAndroid Build Coastguard Worker /* Opal table operations */
143*f80ad8b4SAndroid Build Coastguard Worker enum opal_table_ops {
144*f80ad8b4SAndroid Build Coastguard Worker 	OPAL_READ_TABLE,
145*f80ad8b4SAndroid Build Coastguard Worker 	OPAL_WRITE_TABLE,
146*f80ad8b4SAndroid Build Coastguard Worker };
147*f80ad8b4SAndroid Build Coastguard Worker 
148*f80ad8b4SAndroid Build Coastguard Worker #define OPAL_UID_LENGTH 8
149*f80ad8b4SAndroid Build Coastguard Worker struct opal_read_write_table {
150*f80ad8b4SAndroid Build Coastguard Worker 	struct opal_key key;
151*f80ad8b4SAndroid Build Coastguard Worker 	const __u64 data;
152*f80ad8b4SAndroid Build Coastguard Worker 	const __u8 table_uid[OPAL_UID_LENGTH];
153*f80ad8b4SAndroid Build Coastguard Worker 	__u64 offset;
154*f80ad8b4SAndroid Build Coastguard Worker 	__u64 size;
155*f80ad8b4SAndroid Build Coastguard Worker #define OPAL_TABLE_READ (1 << OPAL_READ_TABLE)
156*f80ad8b4SAndroid Build Coastguard Worker #define OPAL_TABLE_WRITE (1 << OPAL_WRITE_TABLE)
157*f80ad8b4SAndroid Build Coastguard Worker 	__u64 flags;
158*f80ad8b4SAndroid Build Coastguard Worker 	__u64 priv;
159*f80ad8b4SAndroid Build Coastguard Worker };
160*f80ad8b4SAndroid Build Coastguard Worker 
161*f80ad8b4SAndroid Build Coastguard Worker #define OPAL_FL_SUPPORTED		0x00000001
162*f80ad8b4SAndroid Build Coastguard Worker #define OPAL_FL_LOCKING_SUPPORTED	0x00000002
163*f80ad8b4SAndroid Build Coastguard Worker #define OPAL_FL_LOCKING_ENABLED		0x00000004
164*f80ad8b4SAndroid Build Coastguard Worker #define OPAL_FL_LOCKED			0x00000008
165*f80ad8b4SAndroid Build Coastguard Worker #define OPAL_FL_MBR_ENABLED		0x00000010
166*f80ad8b4SAndroid Build Coastguard Worker #define OPAL_FL_MBR_DONE		0x00000020
167*f80ad8b4SAndroid Build Coastguard Worker #define OPAL_FL_SUM_SUPPORTED		0x00000040
168*f80ad8b4SAndroid Build Coastguard Worker 
169*f80ad8b4SAndroid Build Coastguard Worker struct opal_status {
170*f80ad8b4SAndroid Build Coastguard Worker 	__u32 flags;
171*f80ad8b4SAndroid Build Coastguard Worker 	__u32 reserved;
172*f80ad8b4SAndroid Build Coastguard Worker };
173*f80ad8b4SAndroid Build Coastguard Worker 
174*f80ad8b4SAndroid Build Coastguard Worker /*
175*f80ad8b4SAndroid Build Coastguard Worker  * Geometry Reporting per TCG Storage OPAL SSC
176*f80ad8b4SAndroid Build Coastguard Worker  * section 3.1.1.4
177*f80ad8b4SAndroid Build Coastguard Worker  */
178*f80ad8b4SAndroid Build Coastguard Worker struct opal_geometry {
179*f80ad8b4SAndroid Build Coastguard Worker 	__u8 align;
180*f80ad8b4SAndroid Build Coastguard Worker 	__u32 logical_block_size;
181*f80ad8b4SAndroid Build Coastguard Worker 	__u64 alignment_granularity;
182*f80ad8b4SAndroid Build Coastguard Worker 	__u64 lowest_aligned_lba;
183*f80ad8b4SAndroid Build Coastguard Worker 	__u8  __align[3];
184*f80ad8b4SAndroid Build Coastguard Worker };
185*f80ad8b4SAndroid Build Coastguard Worker 
186*f80ad8b4SAndroid Build Coastguard Worker struct opal_discovery {
187*f80ad8b4SAndroid Build Coastguard Worker 	__u64 data;
188*f80ad8b4SAndroid Build Coastguard Worker 	__u64 size;
189*f80ad8b4SAndroid Build Coastguard Worker };
190*f80ad8b4SAndroid Build Coastguard Worker 
191*f80ad8b4SAndroid Build Coastguard Worker struct opal_revert_lsp {
192*f80ad8b4SAndroid Build Coastguard Worker 	struct opal_key key;
193*f80ad8b4SAndroid Build Coastguard Worker 	__u32 options;
194*f80ad8b4SAndroid Build Coastguard Worker 	__u32 __pad;
195*f80ad8b4SAndroid Build Coastguard Worker };
196*f80ad8b4SAndroid Build Coastguard Worker 
197*f80ad8b4SAndroid Build Coastguard Worker #define IOC_OPAL_SAVE		    _IOW('p', 220, struct opal_lock_unlock)
198*f80ad8b4SAndroid Build Coastguard Worker #define IOC_OPAL_LOCK_UNLOCK	    _IOW('p', 221, struct opal_lock_unlock)
199*f80ad8b4SAndroid Build Coastguard Worker #define IOC_OPAL_TAKE_OWNERSHIP	    _IOW('p', 222, struct opal_key)
200*f80ad8b4SAndroid Build Coastguard Worker #define IOC_OPAL_ACTIVATE_LSP       _IOW('p', 223, struct opal_lr_act)
201*f80ad8b4SAndroid Build Coastguard Worker #define IOC_OPAL_SET_PW             _IOW('p', 224, struct opal_new_pw)
202*f80ad8b4SAndroid Build Coastguard Worker #define IOC_OPAL_ACTIVATE_USR       _IOW('p', 225, struct opal_session_info)
203*f80ad8b4SAndroid Build Coastguard Worker #define IOC_OPAL_REVERT_TPR         _IOW('p', 226, struct opal_key)
204*f80ad8b4SAndroid Build Coastguard Worker #define IOC_OPAL_LR_SETUP           _IOW('p', 227, struct opal_user_lr_setup)
205*f80ad8b4SAndroid Build Coastguard Worker #define IOC_OPAL_ADD_USR_TO_LR      _IOW('p', 228, struct opal_lock_unlock)
206*f80ad8b4SAndroid Build Coastguard Worker #define IOC_OPAL_ENABLE_DISABLE_MBR _IOW('p', 229, struct opal_mbr_data)
207*f80ad8b4SAndroid Build Coastguard Worker #define IOC_OPAL_ERASE_LR           _IOW('p', 230, struct opal_session_info)
208*f80ad8b4SAndroid Build Coastguard Worker #define IOC_OPAL_SECURE_ERASE_LR    _IOW('p', 231, struct opal_session_info)
209*f80ad8b4SAndroid Build Coastguard Worker #define IOC_OPAL_PSID_REVERT_TPR    _IOW('p', 232, struct opal_key)
210*f80ad8b4SAndroid Build Coastguard Worker #define IOC_OPAL_MBR_DONE           _IOW('p', 233, struct opal_mbr_done)
211*f80ad8b4SAndroid Build Coastguard Worker #define IOC_OPAL_WRITE_SHADOW_MBR   _IOW('p', 234, struct opal_shadow_mbr)
212*f80ad8b4SAndroid Build Coastguard Worker #define IOC_OPAL_GENERIC_TABLE_RW   _IOW('p', 235, struct opal_read_write_table)
213*f80ad8b4SAndroid Build Coastguard Worker #define IOC_OPAL_GET_STATUS         _IOR('p', 236, struct opal_status)
214*f80ad8b4SAndroid Build Coastguard Worker #define IOC_OPAL_GET_LR_STATUS      _IOW('p', 237, struct opal_lr_status)
215*f80ad8b4SAndroid Build Coastguard Worker #define IOC_OPAL_GET_GEOMETRY       _IOR('p', 238, struct opal_geometry)
216*f80ad8b4SAndroid Build Coastguard Worker #define IOC_OPAL_DISCOVERY          _IOW('p', 239, struct opal_discovery)
217*f80ad8b4SAndroid Build Coastguard Worker #define IOC_OPAL_REVERT_LSP         _IOW('p', 240, struct opal_revert_lsp)
218*f80ad8b4SAndroid Build Coastguard Worker 
219*f80ad8b4SAndroid Build Coastguard Worker #endif /* _UAPI_SED_OPAL_H */
220