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