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