2 TCG defined values and structures.
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
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.
15 #ifndef _TCG_STORAGE_CORE_H_
16 #define _TCG_STORAGE_CORE_H_
22 /// UID in host native byte order
23 typedef UINT64 TCG_UID
;
25 #define TCG_TO_UID(b0, b1, b2, b3, b4, b5, b6, b7) (TCG_UID)( \
27 ((UINT64)(b1) << 8) | \
28 ((UINT64)(b2) << 16) | \
29 ((UINT64)(b3) << 24) | \
30 ((UINT64)(b4) << 32) | \
31 ((UINT64)(b5) << 40) | \
32 ((UINT64)(b6) << 48) | \
38 UINT16 ComIDExtensionBE
;
39 UINT32 OutstandingDataBE
;
46 UINT32 TperSessionNumberBE
;
47 UINT32 HostSessionNumberBE
;
48 UINT32 SequenceNumberBE
;
51 UINT32 AcknowledgementBE
;
56 #define TCG_SUBPACKET_ALIGNMENT 4 // 4-byte alignment per spec
65 #define SUBPACKET_KIND_DATA 0x0000
66 #define SUBPACKET_KIND_CREDIT_CONTROL 0x8001
68 #define TCG_ATOM_TYPE_INTEGER 0x0
69 #define TCG_ATOM_TYPE_BYTE 0x1
78 TCG_TINY_ATOM_BITS TinyAtomBits
;
79 } TCG_SIMPLE_TOKEN_TINY_ATOM
;
88 } TCG_SHORT_ATOM_BITS
;
92 TCG_SHORT_ATOM_BITS ShortAtomBits
;
93 } TCG_SIMPLE_TOKEN_SHORT_ATOM
;
96 #define TCG_MEDIUM_ATOM_LENGTH_HIGH_SHIFT 0x8
97 #define TCG_MEDIUM_ATOM_LENGTH_HIGH_MASK 0x7
100 UINT8 LengthHigh
: 3;
101 UINT8 SignOrCont
: 1;
107 } TCG_MEDIUM_ATOM_BITS
;
111 TCG_MEDIUM_ATOM_BITS MediumAtomBits
;
112 } TCG_SIMPLE_TOKEN_MEDIUM_ATOM
;
115 #define TCG_LONG_ATOM_LENGTH_HIGH_SHIFT 16
116 #define TCG_LONG_ATOM_LENGTH_MID_SHIFT 8
119 UINT8 SignOrCont
: 1;
129 } TCG_LONG_ATOM_BITS
;
133 TCG_LONG_ATOM_BITS LongAtomBits
;
134 } TCG_SIMPLE_TOKEN_LONG_ATOM
;
137 // TCG Core Spec v2 - Table 04 - Token Types
139 TcgTokenTypeReserved
,
140 TcgTokenTypeTinyAtom
,
141 TcgTokenTypeShortAtom
,
142 TcgTokenTypeMediumAtom
,
143 TcgTokenTypeLongAtom
,
144 TcgTokenTypeStartList
,
146 TcgTokenTypeStartName
,
149 TcgTokenTypeEndOfData
,
150 TcgTokenTypeEndOfSession
,
151 TcgTokenTypeStartTransaction
,
152 TcgTokenTypeEndTransaction
,
153 TcgTokenTypeEmptyAtom
,
158 #define TCG_TOKEN_SHORTATOM_MAX_BYTE_SIZE 0x0F
159 #define TCG_TOKEN_MEDIUMATOM_MAX_BYTE_SIZE 0x7FF
160 #define TCG_TOKEN_LONGATOM_MAX_BYTE_SIZE 0xFFFFFF
162 #define TCG_TOKEN_TINYATOM_UNSIGNED_MAX_VALUE 0x3F
163 #define TCG_TOKEN_TINYATOM_SIGNED_MAX_VALUE 0x1F
164 #define TCG_TOKEN_TINYATOM_SIGNED_MIN_VALUE -32
167 #define TCG_TOKEN_TINYATOM 0x00
168 #define TCG_TOKEN_TINYSIGNEDATOM 0x40
169 #define TCG_TOKEN_SHORTATOM 0x80
170 #define TCG_TOKEN_SHORTSIGNEDATOM 0x90
171 #define TCG_TOKEN_SHORTBYTESATOM 0xA0
172 #define TCG_TOKEN_MEDIUMATOM 0xC0
173 #define TCG_TOKEN_MEDIUMSIGNEDATOM 0xC8
174 #define TCG_TOKEN_MEDIUMBYTESATOM 0xD0
175 #define TCG_TOKEN_LONGATOM 0xE0
176 #define TCG_TOKEN_LONGSIGNEDATOM 0xE1
177 #define TCG_TOKEN_LONGBYTESATOM 0xE2
178 #define TCG_TOKEN_STARTLIST 0xF0
179 #define TCG_TOKEN_ENDLIST 0xF1
180 #define TCG_TOKEN_STARTNAME 0xF2
181 #define TCG_TOKEN_ENDNAME 0xF3
182 // 0xF4 - 0xF7 TCG Reserved
183 #define TCG_TOKEN_CALL 0xF8
184 #define TCG_TOKEN_ENDDATA 0xF9
185 #define TCG_TOKEN_ENDSESSION 0xFA
186 #define TCG_TOKEN_STARTTRANSACTION 0xFB
187 #define TCG_TOKEN_ENDTRANSACTION 0xFC
188 // 0xFD - 0xFE TCG Reserved
189 #define TCG_TOKEN_EMPTY 0xFF
191 // CELLBLOCK reserved Names
192 #define TCG_CELL_BLOCK_TABLE_NAME (UINT8)0x00
193 #define TCG_CELL_BLOCK_START_ROW_NAME (UINT8)0x01
194 #define TCG_CELL_BLOCK_END_ROW_NAME (UINT8)0x02
195 #define TCG_CELL_BLOCK_START_COLUMN_NAME (UINT8)0x03
196 #define TCG_CELL_BLOCK_END_COLUMN_NAME (UINT8)0x04
198 // METHOD STATUS CODES
199 #define TCG_METHOD_STATUS_CODE_SUCCESS 0x00
200 #define TCG_METHOD_STATUS_CODE_NOT_AUTHORIZED 0x01
201 #define TCG_METHOD_STATUS_CODE_OBSOLETE 0x02
202 #define TCG_METHOD_STATUS_CODE_SP_BUSY 0x03
203 #define TCG_METHOD_STATUS_CODE_SP_FAILED 0x04
204 #define TCG_METHOD_STATUS_CODE_SP_DISABLED 0x05
205 #define TCG_METHOD_STATUS_CODE_SP_FROZEN 0x06
206 #define TCG_METHOD_STATUS_CODE_NO_SESSIONS_AVAILABLE 0x07
207 #define TCG_METHOD_STATUS_CODE_UNIQUENESS_CONFLICT 0x08
208 #define TCG_METHOD_STATUS_CODE_INSUFFICIENT_SPACE 0x09
209 #define TCG_METHOD_STATUS_CODE_INSUFFICIENT_ROWS 0x0A
210 #define TCG_METHOD_STATUS_CODE_INVALID_PARAMETER 0x0C
211 #define TCG_METHOD_STATUS_CODE_OBSOLETE2 0x0D
212 #define TCG_METHOD_STATUS_CODE_OBSOLETE3 0x0E
213 #define TCG_METHOD_STATUS_CODE_TPER_MALFUNCTION 0x0F
214 #define TCG_METHOD_STATUS_CODE_TRANSACTION_FAILURE 0x10
215 #define TCG_METHOD_STATUS_CODE_RESPONSE_OVERFLOW 0x11
216 #define TCG_METHOD_STATUS_CODE_AUTHORITY_LOCKED_OUT 0x12
217 #define TCG_METHOD_STATUS_CODE_FAIL 0x3F
221 #define TCG_FEATURE_INVALID (UINT16)0x0000
222 #define TCG_FEATURE_TPER (UINT16)0x0001
223 #define TCG_FEATURE_LOCKING (UINT16)0x0002
224 #define TCG_FEATURE_GEOMETRY_REPORTING (UINT16)0x0003
225 #define TCG_FEATURE_SINGLE_USER_MODE (UINT16)0x0201
226 #define TCG_FEATURE_DATASTORE_TABLE (UINT16)0x0202
227 #define TCG_FEATURE_OPAL_SSC_V1_0_0 (UINT16)0x0200
228 #define TCG_FEATURE_OPAL_SSC_V2_0_0 (UINT16)0x0203
229 #define TCG_FEATURE_OPAL_SSC_LITE (UINT16)0x0301
230 #define TCG_FEATURE_PYRITE_SSC (UINT16)0x0302
231 #define TCG_FEATURE_BLOCK_SID (UINT16)0x0402
233 // ACE Expression values
234 #define TCG_ACE_EXPRESSION_AND 0x0
235 #define TCG_ACE_EXPRESSION_OR 0x1
237 /****************************************************************************
238 TRUSTED RECEIVE - supported security protocols list (SP_Specific = 0000h)
239 ATA 8 Rev6a Table 68 7.57.6.2
240 ****************************************************************************/
241 // Security Protocol IDs
242 #define TCG_SECURITY_PROTOCOL_INFO 0x00
243 #define TCG_OPAL_SECURITY_PROTOCOL_1 0x01
244 #define TCG_OPAL_SECURITY_PROTOCOL_2 0x02
245 #define TCG_SECURITY_PROTOCOL_TCG3 0x03
246 #define TCG_SECURITY_PROTOCOL_TCG4 0x04
247 #define TCG_SECURITY_PROTOCOL_TCG5 0x05
248 #define TCG_SECURITY_PROTOCOL_TCG6 0x06
249 #define TCG_SECURITY_PROTOCOL_CBCS 0x07
250 #define TCG_SECURITY_PROTOCOL_TAPE_DATA 0x20
251 #define TCG_SECURITY_PROTOCOL_DATA_ENCRYPT_CONFIG 0x21
252 #define TCG_SECURITY_PROTOCOL_SA_CREATION_CAPS 0x40
253 #define TCG_SECURITY_PROTOCOL_IKEV2_SCSI 0x41
254 #define TCG_SECURITY_PROTOCOL_JEDEC_UFS 0xEC
255 #define TCG_SECURITY_PROTOCOL_SDCARD_SECURITY 0xED
256 #define TCG_SECURITY_PROTOCOL_IEEE_1667 0xEE
257 #define TCG_SECURITY_PROTOCOL_ATA_DEVICE_SERVER_PASS 0xEF
259 // Security Protocol Specific IDs
260 #define TCG_SP_SPECIFIC_PROTOCOL_LIST 0x0000
261 #define TCG_SP_SPECIFIC_PROTOCOL_LEVEL0_DISCOVERY 0x0001
263 #define TCG_RESERVED_COMID 0x0000
265 // Defined in TCG Storage Feature Set:Block SID Authentication spec,
266 // ComId used for BlockSid command is hardcode 0x0005.
267 #define TCG_BLOCKSID_COMID 0x0005
272 UINT16 ListLength_BE
; // 6 - 7
273 UINT8 List
[504]; // 8...
274 } TCG_SUPPORTED_SECURITY_PROTOCOLS
;
279 UINT32 LengthBE
; // number of valid bytes in discovery response, not including length field
283 UINT8 VendorUnique
[32];
284 } TCG_LEVEL0_DISCOVERY_HEADER
;
286 typedef struct _TCG_LEVEL0_FEATURE_DESCRIPTOR_HEADER
{
287 UINT16 FeatureCode_BE
;
290 UINT8 Length
; // length of feature dependent data in bytes
291 } TCG_LEVEL0_FEATURE_DESCRIPTOR_HEADER
;
295 TCG_LEVEL0_FEATURE_DESCRIPTOR_HEADER Header
;
296 UINT8 LockingSupported
: 1;
297 UINT8 LockingEnabled
: 1; // means the locking security provider (SP) is enabled
298 UINT8 Locked
: 1; // means at least 1 locking range is enabled
299 UINT8 MediaEncryption
: 1;
300 UINT8 MbrEnabled
: 1;
303 UINT8 Reserved515
[11];
304 } TCG_LOCKING_FEATURE_DESCRIPTOR
;
307 TCG_LEVEL0_FEATURE_DESCRIPTOR_HEADER Header
;
308 UINT8 SIDValueState
: 1;
309 UINT8 SIDBlockedState
: 1;
311 UINT8 HardwareReset
: 1;
313 UINT8 Reserved615
[10];
314 } TCG_BLOCK_SID_FEATURE_DESCRIPTOR
;
318 TCG_LEVEL0_FEATURE_DESCRIPTOR_HEADER Header
;
319 UINT8 SyncSupported
: 1;
320 UINT8 AsyncSupported
: 1;
321 UINT8 AckNakSupported
: 1;
322 UINT8 BufferMgmtSupported
: 1;
323 UINT8 StreamingSupported
: 1;
324 UINT8 Reserved4b5
: 1;
325 UINT8 ComIdMgmtSupported
: 1;
326 UINT8 Reserved4b7
: 1;
327 UINT8 Reserved515
[11];
328 } TCG_TPER_FEATURE_DESCRIPTOR
;
332 // Special Purpose UIDs
333 #define TCG_UID_NULL TCG_TO_UID(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)
334 #define TCG_UID_THIS_SP TCG_TO_UID(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01)
335 #define TCG_UID_SMUID TCG_TO_UID(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF)
337 // Session Manager Method UIDS
338 #define TCG_UID_SM_PROPERTIES TCG_TO_UID(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x01)
339 #define TCG_UID_SM_START_SESSION TCG_TO_UID(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x02)
340 #define TCG_UID_SM_SYNC_SESSION TCG_TO_UID(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03)
341 #define TCG_UID_SM_START_TRUSTED_SESSION TCG_TO_UID(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x04)
342 #define TCG_UID_SM_SYNC_TRUSTED_SESSION TCG_TO_UID(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x05)
343 #define TCG_UID_SM_CLOSE_SESSION TCG_TO_UID(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x06)
346 #define TCG_UID_METHOD_DELETE_SP TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01)
347 #define TCG_UID_METHOD_CREATE_TABLE TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02)
348 #define TCG_UID_METHOD_DELETE TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03)
349 #define TCG_UID_METHOD_CREATE_ROW TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04)
350 #define TCG_UID_METHOD_DELETE_ROW TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05)
351 #define TCG_UID_METHOD_NEXT TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x08)
352 #define TCG_UID_METHOD_GET_FREE_SPACE TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09)
353 #define TCG_UID_METHOD_GET_FREE_ROWS TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0A)
354 #define TCG_UID_METHOD_DELETE_METHOD TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0B)
355 #define TCG_UID_METHOD_GET_ACL TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0D)
356 #define TCG_UID_METHOD_ADD_ACE TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0E)
357 #define TCG_UID_METHOD_REMOVE_ACE TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0F)
358 #define TCG_UID_METHOD_GEN_KEY TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x10)
359 #define TCG_UID_METHOD_GET_PACKAGE TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12)
360 #define TCG_UID_METHOD_SET_PACKAGE TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x13)
361 #define TCG_UID_METHOD_GET TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x16)
362 #define TCG_UID_METHOD_SET TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x17)
363 #define TCG_UID_METHOD_AUTHENTICATE TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1C)
364 #define TCG_UID_METHOD_ISSUE_SP TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x01)
365 #define TCG_UID_METHOD_GET_CLOCK TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x04, 0x01)
366 #define TCG_UID_METHOD_RESET_CLOCK TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x04, 0x02)
367 #define TCG_UID_METHOD_SET_CLOCK_HIGH TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x04, 0x03)
368 #define TCG_UID_METHOD_SET_LAG_HIGH TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x04, 0x04)
369 #define TCG_UID_METHOD_SET_CLOCK_LOW TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x04, 0x05)
370 #define TCG_UID_METHOD_SET_LAG_LOW TCG_TO_UID(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x06)
371 #define TCG_UID_METHOD_INCREMENT_COUNTER TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x04, 0x07)
372 #define TCG_UID_METHOD_RANDOM TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x01)
373 #define TCG_UID_METHOD_SALT TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x02)
374 #define TCG_UID_METHOD_DECRYPT_INIT TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x03)
375 #define TCG_UID_METHOD_DECRYPT TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x04)
376 #define TCG_UID_METHOD_DECRYPT_FINALIZE TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x05)
377 #define TCG_UID_METHOD_ENCRYPT_INIT TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x06)
378 #define TCG_UID_METHOD_ENCRYPT TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x07)
379 #define TCG_UID_METHOD_ENCRYPT_FINALIZE TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x08)
380 #define TCG_UID_METHOD_HMAC_INIT TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x09)
381 #define TCG_UID_METHOD_HMAC TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x0A)
382 #define TCG_UID_METHOD_HMAC_FINALIZE TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x0B)
383 #define TCG_UID_METHOD_HASH_INIT TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x0C)
384 #define TCG_UID_METHOD_HASH TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x0D)
385 #define TCG_UID_METHOD_HASH_FINALIZE TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x0E)
386 #define TCG_UID_METHOD_SIGN TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x0F)
387 #define TCG_UID_METHOD_VERIFY TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x10)
388 #define TCG_UID_METHOD_XOR TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x11)
389 #define TCG_UID_METHOD_ADD_LOG TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0A, 0x01)
390 #define TCG_UID_METHOD_CREATE_LOG TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0A, 0x02)
391 #define TCG_UID_METHOD_CLEAR_LOG TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0A, 0x03)
392 #define TCG_UID_METHOD_FLUSH_LOG TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0A, 0x04)