]> git.proxmox.com Git - mirror_edk2.git/blob - MdePkg/Include/IndustryStandard/TcgStorageOpal.h
MdePkg: Add Feature definitions added in pyrite 2.0 spec.
[mirror_edk2.git] / MdePkg / Include / IndustryStandard / TcgStorageOpal.h
1 /** @file
2 Opal Specification defined values and structures.
3
4 Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13 **/
14
15 #ifndef _TCG_STORAGE_OPAL_H_
16 #define _TCG_STORAGE_OPAL_H_
17
18 #include <IndustryStandard/TcgStorageCore.h>
19
20 #define OPAL_UID_ADMIN_SP TCG_TO_UID(0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x00, 0x01)
21 #define OPAL_UID_ADMIN_SP_C_PIN_MSID TCG_TO_UID(0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x84, 0x02)
22 #define OPAL_UID_ADMIN_SP_C_PIN_SID TCG_TO_UID(0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x01)
23 #define OPAL_UID_LOCKING_SP TCG_TO_UID(0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x00, 0x02)
24
25 // ADMIN_SP
26 // Authorities
27 #define OPAL_ADMIN_SP_ANYBODY_AUTHORITY TCG_TO_UID(0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x01)
28 #define OPAL_ADMIN_SP_ADMINS_AUTHORITY TCG_TO_UID(0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02)
29 #define OPAL_ADMIN_SP_MAKERS_AUTHORITY TCG_TO_UID(0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x03)
30 #define OPAL_ADMIN_SP_SID_AUTHORITY TCG_TO_UID(0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x06)
31 #define OPAL_ADMIN_SP_ADMIN1_AUTHORITY TCG_TO_UID(0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x02, 0x01)
32 #define OPAL_ADMIN_SP_PSID_AUTHORITY TCG_TO_UID(0x00, 0x00, 0x00, 0x09, 0x00, 0x01, 0xFF, 0x01)
33
34 #define OPAL_ADMIN_SP_ACTIVATE_METHOD TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x03)
35 #define OPAL_ADMIN_SP_REVERT_METHOD TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x02)
36
37 // ADMIN_SP
38 // Data Removal mechanism
39 #define OPAL_UID_ADMIN_SP_DATA_REMOVAL_MECHANISM TCG_TO_UID(0x00, 0x00, 0x11, 0x01, 0x00, 0x00, 0x00, 0x01)
40
41 // LOCKING SP
42 // Authorities
43 #define OPAL_LOCKING_SP_ANYBODY_AUTHORITY TCG_TO_UID(0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x01)
44 #define OPAL_LOCKING_SP_ADMINS_AUTHORITY TCG_TO_UID(0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02)
45 #define OPAL_LOCKING_SP_ADMIN1_AUTHORITY TCG_TO_UID(0x00, 0x00, 0x00, 0x09, 0x00, 0x01, 0x00, 0x01)
46 #define OPAL_LOCKING_SP_USERS_AUTHORITY TCG_TO_UID(0x00, 0x00, 0x00, 0x09, 0x00, 0x03, 0x00, 0x00)
47 #define OPAL_LOCKING_SP_USER1_AUTHORITY TCG_TO_UID(0x00, 0x00, 0x00, 0x09, 0x00, 0x03, 0x00, 0x01)
48
49 #define OPAL_LOCKING_SP_REVERTSP_METHOD TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x11)
50
51 // C_PIN Table Rows
52 #define OPAL_LOCKING_SP_C_PIN_ADMIN1 TCG_TO_UID( 0x00, 0x00, 0x00, 0x0B, 0x00, 0x01, 0x00, 0x01 )
53 #define OPAL_LOCKING_SP_C_PIN_USER1 TCG_TO_UID( 0x00, 0x00, 0x00, 0x0B, 0x00, 0x03, 0x00, 0x01 )
54
55 // Locking Table
56 #define OPAL_LOCKING_SP_LOCKING_GLOBALRANGE TCG_TO_UID( 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x00, 0x01 )
57 #define OPAL_LOCKING_SP_LOCKING_RANGE1 TCG_TO_UID( 0x00, 0x00, 0x08, 0x02, 0x00, 0x03, 0x00, 0x01 )
58
59
60 // LOCKING SP ACE Table Preconfiguration
61 #define OPAL_LOCKING_SP_ACE_LOCKING_GLOBALRANGE_GET_ALL TCG_TO_UID( 0x00, 0x00, 0x00, 0x08, 0x00, 0x03, 0xD0, 0x00 )
62 #define OPAL_LOCKING_SP_ACE_LOCKING_GLOBALRANGE_SET_RDLOCKED TCG_TO_UID( 0x00, 0x00, 0x00, 0x08, 0x00, 0x03, 0xE0, 0x00 )
63 #define OPAL_LOCKING_SP_ACE_LOCKING_GLOBALRANGE_SET_WRLOCKED TCG_TO_UID( 0x00, 0x00, 0x00, 0x08, 0x00, 0x03, 0xE8, 0x00 )
64
65 #define OPAL_LOCKING_SP_ACE_K_AES_256_GLOBALRANGE_GENKEY TCG_TO_UID( 0x00, 0x00, 0x00, 0x08, 0x00, 0x03, 0xB8, 0x00 )
66 #define OPAL_LOCKING_SP_ACE_K_AES_128_GLOBALRANGE_GENKEY TCG_TO_UID( 0x00, 0x00, 0x00, 0x08, 0x00, 0x03, 0xB0, 0x00 )
67
68
69 // LOCKING SP LockingInfo Table Preconfiguration
70 #define OPAL_LOCKING_SP_LOCKING_INFO TCG_TO_UID( 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 0x01 )
71
72 #define OPAL_LOCKING_SP_LOCKINGINFO_ALIGNMENTREQUIRED_COL 0x7
73 #define OPAL_LOCKING_SP_LOCKINGINFO_LOGICALBLOCKSIZE_COL 0x8
74 #define OPAL_LOCKING_SP_LOCKINGINFO_ALIGNMENTGRANULARITY_COL 0x9
75 #define OPAL_LOCKING_SP_LOCKINGINFO_LOWESTALIGNEDLBA_COL 0xA
76
77 // K_AES_256 Table Preconfiguration
78 #define OPAL_LOCKING_SP_K_AES_256_GLOBALRANGE_KEY TCG_TO_UID( 0x00, 0x00, 0x08, 0x06, 0x00, 0x00, 0x00, 0x01 )
79
80 // K_AES_128 Table Preconfiguration
81 #define OPAL_LOCKING_SP_K_AES_128_GLOBALRANGE_KEY TCG_TO_UID( 0x00, 0x00, 0x08, 0x05, 0x00, 0x00, 0x00, 0x01 )
82
83 // Minimum Properties that an Opal Compliant SD Shall support
84 #define OPAL_MIN_MAX_COM_PACKET_SIZE 2048
85 #define OPAL_MIN_MAX_REPONSE_COM_PACKET_SIZE 2048
86 #define OPAL_MIN_MAX_PACKET_SIZE 2028
87 #define OPAL_MIN_MAX_IND_TOKEN_SIZE 1992
88 #define OPAL_MIN_MAX_PACKETS 1
89 #define OPAL_MIN_MAX_SUBPACKETS 1
90 #define OPAL_MIN_MAX_METHODS 1
91 #define OPAL_MIN_MAX_SESSIONS 1
92 #define OPAL_MIN_MAX_AUTHENTICATIONS 2
93 #define OPAL_MIN_MAX_TRANSACTION_LIMIT 1
94
95 #define OPAL_ADMIN_SP_PIN_COL 3
96 #define OPAL_LOCKING_SP_C_PIN_TRYLIMIT_COL 5
97 #define OPAL_RANDOM_METHOD_MAX_COUNT_SIZE 32
98
99 // Data Removal Mechanism column.
100 #define OPAL_ADMIN_SP_ACTIVE_DATA_REMOVAL_MECHANISM_COL 1
101
102 //
103 // Supported Data Removal Mechanism.
104 // Detail see Pyrite SSC v2 spec.
105 //
106 typedef enum {
107 OverwriteDataErase = 0,
108 BlockErase,
109 CryptoErase,
110 Unmap,
111 ResetWritePointers,
112 VendorSpecificErase,
113 ResearvedMechanism
114 } SUPPORTED_DATA_REMOVAL_MECHANISM;
115
116 #pragma pack(1)
117
118 typedef struct _OPAL_GEOMETRY_REPORTING_FEATURE {
119 TCG_LEVEL0_FEATURE_DESCRIPTOR_HEADER Header;
120 UINT8 Reserved[8];
121 UINT32 LogicalBlockSizeBE;
122 UINT64 AlignmentGranularityBE;
123 UINT64 LowestAlignedLBABE;
124 } OPAL_GEOMETRY_REPORTING_FEATURE;
125
126 typedef struct _OPAL_SINGLE_USER_MODE_FEATURE {
127 TCG_LEVEL0_FEATURE_DESCRIPTOR_HEADER Header;
128 UINT32 NumLockingObjectsSupportedBE;
129 UINT8 Any : 1;
130 UINT8 All : 1;
131 UINT8 Policy : 1;
132 UINT8 Reserved : 5;
133 UINT8 Reserved2[7];
134 } OPAL_SINGLE_USER_MODE_FEATURE;
135
136 typedef struct _OPAL_DATASTORE_TABLE_FEATURE {
137 TCG_LEVEL0_FEATURE_DESCRIPTOR_HEADER Header;
138 UINT16 Reserved;
139 UINT16 MaxNumTablesBE;
140 UINT32 MaxTotalSizeBE;
141 UINT32 SizeAlignmentBE;
142 } OPAL_DATASTORE_TABLE_FEATURE;
143
144 typedef struct _OPAL_SSCV1_FEATURE_DESCRIPTOR {
145 TCG_LEVEL0_FEATURE_DESCRIPTOR_HEADER Header;
146 UINT16 BaseComdIdBE;
147 UINT16 NumComIdsBE;
148 UINT8 RangeCrossing : 1;
149 UINT8 Reserved : 7;
150 UINT8 Future[11];
151 } OPAL_SSCV1_FEATURE_DESCRIPTOR;
152
153 typedef struct _OPAL_SSCV2_FEATURE_DESCRIPTOR {
154 TCG_LEVEL0_FEATURE_DESCRIPTOR_HEADER Header;
155 UINT16 BaseComdIdBE;
156 UINT16 NumComIdsBE;
157 UINT8 Reserved;
158 UINT16 NumLockingSpAdminAuthoritiesSupportedBE;
159 UINT16 NumLockingSpUserAuthoritiesSupportedBE;
160 UINT8 InitialCPINSIDPIN;
161 UINT8 CPINSIDPINRevertBehavior;
162 UINT8 Future[5];
163 } OPAL_SSCV2_FEATURE_DESCRIPTOR;
164
165 typedef struct _OPAL_SSCLITE_FEATURE_DESCRIPTOR {
166 TCG_LEVEL0_FEATURE_DESCRIPTOR_HEADER Header;
167 UINT16 BaseComdIdBE;
168 UINT16 NumComIdsBE;
169 UINT8 Reserved[5];
170 UINT8 InitialCPINSIDPIN;
171 UINT8 CPINSIDPINRevertBehavior;
172 UINT8 Future[5];
173 } OPAL_SSCLITE_FEATURE_DESCRIPTOR;
174
175 typedef struct _PYRITE_SSC_FEATURE_DESCRIPTOR {
176 TCG_LEVEL0_FEATURE_DESCRIPTOR_HEADER Header;
177 UINT16 BaseComdIdBE;
178 UINT16 NumComIdsBE;
179 UINT8 Reserved[5];
180 UINT8 InitialCPINSIDPIN;
181 UINT8 CPINSIDPINRevertBehavior;
182 UINT8 Future[5];
183 } PYRITE_SSC_FEATURE_DESCRIPTOR;
184
185 typedef struct _PYRITE_SSCV2_FEATURE_DESCRIPTOR {
186 TCG_LEVEL0_FEATURE_DESCRIPTOR_HEADER Header;
187 UINT16 BaseComdIdBE;
188 UINT16 NumComIdsBE;
189 UINT8 Reserved[5];
190 UINT8 InitialCPINSIDPIN;
191 UINT8 CPINSIDPINRevertBehavior;
192 UINT8 Future[5];
193 } PYRITE_SSCV2_FEATURE_DESCRIPTOR;
194
195 typedef struct _DATA_REMOVAL_FEATURE_DESCRIPTOR {
196 TCG_LEVEL0_FEATURE_DESCRIPTOR_HEADER Header;
197 UINT8 Reserved;
198 UINT8 OperationProcessing : 1;
199 UINT8 Reserved2 : 7;
200 UINT8 RemovalMechanism;
201 UINT8 FormatBit0 : 1; // Data Removal Time Format for Bit 0
202 UINT8 FormatBit1 : 1; // Data Removal Time Format for Bit 1
203 UINT8 FormatBit2 : 1; // Data Removal Time Format for Bit 2
204 UINT8 FormatBit3 : 1; // Data Removal Time Format for Bit 3
205 UINT8 FormatBit4 : 1; // Data Removal Time Format for Bit 4
206 UINT8 FormatBit5 : 1; // Data Removal Time Format for Bit 5
207 UINT8 Reserved3 : 2;
208 UINT16 TimeBit0; // Data Removal Time for Supported Data Removal Mechanism Bit 0
209 UINT16 TimeBit1; // Data Removal Time for Supported Data Removal Mechanism Bit 1
210 UINT16 TimeBit2; // Data Removal Time for Supported Data Removal Mechanism Bit 2
211 UINT16 TimeBit3; // Data Removal Time for Supported Data Removal Mechanism Bit 3
212 UINT16 TimeBit4; // Data Removal Time for Supported Data Removal Mechanism Bit 4
213 UINT16 TimeBit5; // Data Removal Time for Supported Data Removal Mechanism Bit 5
214 UINT8 Future[16];
215 } DATA_REMOVAL_FEATURE_DESCRIPTOR;
216
217 typedef union {
218 TCG_LEVEL0_FEATURE_DESCRIPTOR_HEADER CommonHeader;
219 TCG_TPER_FEATURE_DESCRIPTOR Tper;
220 TCG_LOCKING_FEATURE_DESCRIPTOR Locking;
221 OPAL_GEOMETRY_REPORTING_FEATURE Geometry;
222 OPAL_SINGLE_USER_MODE_FEATURE SingleUser;
223 OPAL_DATASTORE_TABLE_FEATURE DataStore;
224 OPAL_SSCV1_FEATURE_DESCRIPTOR OpalSscV1;
225 OPAL_SSCV2_FEATURE_DESCRIPTOR OpalSscV2;
226 OPAL_SSCLITE_FEATURE_DESCRIPTOR OpalSscLite;
227 PYRITE_SSC_FEATURE_DESCRIPTOR PyriteSsc;
228 PYRITE_SSCV2_FEATURE_DESCRIPTOR PyriteSscV2;
229 TCG_BLOCK_SID_FEATURE_DESCRIPTOR BlockSid;
230 DATA_REMOVAL_FEATURE_DESCRIPTOR DataRemoval;
231 } OPAL_LEVEL0_FEATURE_DESCRIPTOR;
232
233 #pragma pack()
234
235 #endif // _OPAL_H_