]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdePkg: Add definition for TCG Storage Core and Opal specs.
authorEric Dong <eric.dong@intel.com>
Tue, 29 Mar 2016 06:39:52 +0000 (14:39 +0800)
committerFeng Tian <feng.tian@intel.com>
Tue, 29 Mar 2016 07:37:29 +0000 (15:37 +0800)
The definitions are defined in TCG storage core and opal spec.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Eric Dong <eric.dong@intel.com>
Reviewed-by: Feng Tian <feng.tian@intel.com>
MdePkg/Include/IndustryStandard/TcgStorageCore.h [new file with mode: 0644]
MdePkg/Include/IndustryStandard/TcgStorageOpal.h [new file with mode: 0644]

diff --git a/MdePkg/Include/IndustryStandard/TcgStorageCore.h b/MdePkg/Include/IndustryStandard/TcgStorageCore.h
new file mode 100644 (file)
index 0000000..9549c00
--- /dev/null
@@ -0,0 +1,378 @@
+/** @file\r
+  TCG defined values and structures.\r
+\r
+Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution.  The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#ifndef _TCG_STORAGE_CORE_H_\r
+#define _TCG_STORAGE_CORE_H_\r
+\r
+#include <Base.h>\r
+\r
+#pragma pack(1)\r
+\r
+/// UID in host native byte order\r
+typedef UINT64 TCG_UID;\r
+\r
+#define TCG_TO_UID(b0, b1, b2, b3, b4, b5, b6, b7) (TCG_UID)( \\r
+  (UINT64)(b0)         | \\r
+  ((UINT64)(b1) << 8)  | \\r
+  ((UINT64)(b2) << 16) | \\r
+  ((UINT64)(b3) << 24) | \\r
+  ((UINT64)(b4) << 32) | \\r
+  ((UINT64)(b5) << 40) | \\r
+  ((UINT64)(b6) << 48) | \\r
+  ((UINT64)(b7) << 56))\r
+\r
+typedef struct {\r
+  UINT32     ReservedBE;\r
+  UINT16     ComIDBE;\r
+  UINT16     ComIDExtensionBE;\r
+  UINT32     OutstandingDataBE;\r
+  UINT32     MinTransferBE;\r
+  UINT32     LengthBE;\r
+  UINT8      Payload[0];\r
+} TCG_COM_PACKET;\r
+\r
+typedef struct {\r
+  UINT32     TperSessionNumberBE;\r
+  UINT32     HostSessionNumberBE;\r
+  UINT32     SequenceNumberBE;\r
+  UINT16     ReservedBE;\r
+  UINT16     AckTypeBE;\r
+  UINT32     AcknowledgementBE;\r
+  UINT32     LengthBE;\r
+  UINT8      Payload[0];\r
+} TCG_PACKET;\r
+\r
+#define TCG_SUBPACKET_ALIGNMENT 4 // 4-byte alignment per spec\r
+\r
+typedef struct {\r
+  UINT8      ReservedBE[6];\r
+  UINT16     KindBE;\r
+  UINT32     LengthBE;\r
+  UINT8      Payload[0];\r
+} TCG_SUB_PACKET;\r
+\r
+#define SUBPACKET_KIND_DATA           0x0000\r
+#define SUBPACKET_KIND_CREDIT_CONTROL 0x8001\r
+\r
+#define TCG_ATOM_TYPE_INTEGER 0x0\r
+#define TCG_ATOM_TYPE_BYTE    0x1\r
+typedef struct {\r
+  UINT8   Data : 6;\r
+  UINT8   Sign : 1;\r
+  UINT8   IsZero : 1;\r
+} TCG_TINY_ATOM_BITS;\r
+\r
+typedef union {\r
+  UINT8               Raw;\r
+  TCG_TINY_ATOM_BITS  TinyAtomBits;\r
+} TCG_SIMPLE_TOKEN_TINY_ATOM;\r
+\r
+\r
+typedef struct {\r
+  UINT8   Length : 4;\r
+  UINT8   SignOrCont : 1;\r
+  UINT8   ByteOrInt : 1;\r
+  UINT8   IsZero : 1;\r
+  UINT8   IsOne : 1;\r
+} TCG_SHORT_ATOM_BITS;\r
+\r
+typedef union {\r
+  UINT8                 RawHeader;\r
+  TCG_SHORT_ATOM_BITS   ShortAtomBits;\r
+} TCG_SIMPLE_TOKEN_SHORT_ATOM;\r
+\r
+\r
+#define TCG_MEDIUM_ATOM_LENGTH_HIGH_SHIFT 0x8\r
+#define TCG_MEDIUM_ATOM_LENGTH_HIGH_MASK  0x7\r
+\r
+typedef struct {\r
+  UINT8  LengthHigh : 3;\r
+  UINT8  SignOrCont : 1;\r
+  UINT8  ByteOrInt : 1;\r
+  UINT8  IsZero : 1;\r
+  UINT8  IsOne1 : 1;\r
+  UINT8  IsOne2 : 1;\r
+  UINT8  LengthLow;\r
+} TCG_MEDIUM_ATOM_BITS;\r
+\r
+typedef union {\r
+  UINT16                RawHeader;\r
+  TCG_MEDIUM_ATOM_BITS  MediumAtomBits;\r
+} TCG_SIMPLE_TOKEN_MEDIUM_ATOM;\r
+\r
+\r
+#define TCG_LONG_ATOM_LENGTH_HIGH_SHIFT 16\r
+#define TCG_LONG_ATOM_LENGTH_MID_SHIFT  8\r
+\r
+typedef  struct {\r
+  UINT8   SignOrCont : 1;\r
+  UINT8   ByteOrInt : 1;\r
+  UINT8   Reserved : 2;\r
+  UINT8   IsZero : 1;\r
+  UINT8   IsOne1 : 1;\r
+  UINT8   IsOne2 : 1;\r
+  UINT8   IsOne3 : 1;\r
+  UINT8   LengthHigh;\r
+  UINT8   LengthMid;\r
+  UINT8   LengthLow;\r
+} TCG_LONG_ATOM_BITS;\r
+\r
+typedef union {\r
+  UINT32              RawHeader;\r
+  TCG_LONG_ATOM_BITS  LongAtomBits;\r
+} TCG_SIMPLE_TOKEN_LONG_ATOM;\r
+\r
+\r
+// TCG Core Spec v2 - Table 04 - Token Types\r
+typedef enum {\r
+  TcgTokenTypeReserved,\r
+  TcgTokenTypeTinyAtom,\r
+  TcgTokenTypeShortAtom,\r
+  TcgTokenTypeMediumAtom,\r
+  TcgTokenTypeLongAtom,\r
+  TcgTokenTypeStartList,\r
+  TcgTokenTypeEndList,\r
+  TcgTokenTypeStartName,\r
+  TcgTokenTypeEndName,\r
+  TcgTokenTypeCall,\r
+  TcgTokenTypeEndOfData,\r
+  TcgTokenTypeEndOfSession,\r
+  TcgTokenTypeStartTransaction,\r
+  TcgTokenTypeEndTransaction,\r
+  TcgTokenTypeEmptyAtom,\r
+} TCG_TOKEN_TYPE;\r
+\r
+#pragma pack()\r
+\r
+#define TCG_TOKEN_SHORTATOM_MAX_BYTE_SIZE   0x0F\r
+#define TCG_TOKEN_MEDIUMATOM_MAX_BYTE_SIZE  0x7FF\r
+#define TCG_TOKEN_LONGATOM_MAX_BYTE_SIZE    0xFFFFFF\r
+\r
+#define TCG_TOKEN_TINYATOM_UNSIGNED_MAX_VALUE 0x3F\r
+#define TCG_TOKEN_TINYATOM_SIGNED_MAX_VALUE   0x1F\r
+#define TCG_TOKEN_TINYATOM_SIGNED_MIN_VALUE   -32\r
+\r
+// TOKEN TYPES\r
+#define TCG_TOKEN_TINYATOM          0x00\r
+#define TCG_TOKEN_TINYSIGNEDATOM    0x40\r
+#define TCG_TOKEN_SHORTATOM         0x80\r
+#define TCG_TOKEN_SHORTSIGNEDATOM   0x90\r
+#define TCG_TOKEN_SHORTBYTESATOM    0xA0\r
+#define TCG_TOKEN_MEDIUMATOM        0xC0\r
+#define TCG_TOKEN_MEDIUMSIGNEDATOM  0xC8\r
+#define TCG_TOKEN_MEDIUMBYTESATOM   0xD0\r
+#define TCG_TOKEN_LONGATOM          0xE0\r
+#define TCG_TOKEN_LONGSIGNEDATOM    0xE1\r
+#define TCG_TOKEN_LONGBYTESATOM     0xE2\r
+#define TCG_TOKEN_STARTLIST         0xF0\r
+#define TCG_TOKEN_ENDLIST           0xF1\r
+#define TCG_TOKEN_STARTNAME         0xF2\r
+#define TCG_TOKEN_ENDNAME           0xF3\r
+// 0xF4 - 0xF7 TCG Reserved\r
+#define TCG_TOKEN_CALL              0xF8\r
+#define TCG_TOKEN_ENDDATA           0xF9\r
+#define TCG_TOKEN_ENDSESSION        0xFA\r
+#define TCG_TOKEN_STARTTRANSACTION  0xFB\r
+#define TCG_TOKEN_ENDTRANSACTION    0xFC\r
+// 0xFD - 0xFE TCG Reserved\r
+#define TCG_TOKEN_EMPTY             0xFF\r
+\r
+// CELLBLOCK reserved Names\r
+#define TCG_CELL_BLOCK_TABLE_NAME           (UINT8)0x00\r
+#define TCG_CELL_BLOCK_START_ROW_NAME       (UINT8)0x01\r
+#define TCG_CELL_BLOCK_END_ROW_NAME         (UINT8)0x02\r
+#define TCG_CELL_BLOCK_START_COLUMN_NAME    (UINT8)0x03\r
+#define TCG_CELL_BLOCK_END_COLUMN_NAME      (UINT8)0x04\r
+\r
+// METHOD STATUS CODES\r
+#define TCG_METHOD_STATUS_CODE_SUCCESS                  0x00\r
+#define TCG_METHOD_STATUS_CODE_NOT_AUTHORIZED           0x01\r
+#define TCG_METHOD_STATUS_CODE_OBSOLETE                 0x02\r
+#define TCG_METHOD_STATUS_CODE_SP_BUSY                  0x03\r
+#define TCG_METHOD_STATUS_CODE_SP_FAILED                0x04\r
+#define TCG_METHOD_STATUS_CODE_SP_DISABLED              0x05\r
+#define TCG_METHOD_STATUS_CODE_SP_FROZEN                0x06\r
+#define TCG_METHOD_STATUS_CODE_NO_SESSIONS_AVAILABLE    0x07\r
+#define TCG_METHOD_STATUS_CODE_UNIQUENESS_CONFLICT      0x08\r
+#define TCG_METHOD_STATUS_CODE_INSUFFICIENT_SPACE       0x09\r
+#define TCG_METHOD_STATUS_CODE_INSUFFICIENT_ROWS        0x0A\r
+#define TCG_METHOD_STATUS_CODE_INVALID_PARAMETER        0x0C\r
+#define TCG_METHOD_STATUS_CODE_OBSOLETE2                0x0D\r
+#define TCG_METHOD_STATUS_CODE_OBSOLETE3                0x0E\r
+#define TCG_METHOD_STATUS_CODE_TPER_MALFUNCTION         0x0F\r
+#define TCG_METHOD_STATUS_CODE_TRANSACTION_FAILURE      0x10\r
+#define TCG_METHOD_STATUS_CODE_RESPONSE_OVERFLOW        0x11\r
+#define TCG_METHOD_STATUS_CODE_AUTHORITY_LOCKED_OUT     0x12\r
+#define TCG_METHOD_STATUS_CODE_FAIL                     0x3F\r
+\r
+\r
+// Feature Codes\r
+#define TCG_FEATURE_INVALID             (UINT16)0x0000\r
+#define TCG_FEATURE_TPER                (UINT16)0x0001\r
+#define TCG_FEATURE_LOCKING             (UINT16)0x0002\r
+#define TCG_FEATURE_GEOMETRY_REPORTING  (UINT16)0x0003\r
+#define TCG_FEATURE_SINGLE_USER_MODE    (UINT16)0x0201\r
+#define TCG_FEATURE_DATASTORE_TABLE     (UINT16)0x0202\r
+#define TCG_FEATURE_OPAL_SSC_V1_0_0     (UINT16)0x0200\r
+#define TCG_FEATURE_OPAL_SSC_V2_0_0     (UINT16)0x0203\r
+#define TCG_FEATURE_OPAL_SSC_LITE       (UINT16)0x0301\r
+#define TCG_FEATURE_PYRITE_SSC          (UINT16)0x0302\r
+\r
+// ACE Expression values\r
+#define TCG_ACE_EXPRESSION_AND 0x0\r
+#define TCG_ACE_EXPRESSION_OR  0x1\r
+\r
+/****************************************************************************\r
+TRUSTED RECEIVE - supported security protocols list (SP_Specific = 0000h)\r
+ATA 8 Rev6a Table 68 7.57.6.2\r
+****************************************************************************/\r
+// Security Protocol IDs\r
+#define TCG_SECURITY_PROTOCOL_INFO                   0x00\r
+#define TCG_OPAL_SECURITY_PROTOCOL_1                 0x01\r
+#define TCG_OPAL_SECURITY_PROTOCOL_2                 0x02\r
+#define TCG_SECURITY_PROTOCOL_TCG3                   0x03\r
+#define TCG_SECURITY_PROTOCOL_TCG4                   0x04\r
+#define TCG_SECURITY_PROTOCOL_TCG5                   0x05\r
+#define TCG_SECURITY_PROTOCOL_TCG6                   0x06\r
+#define TCG_SECURITY_PROTOCOL_CBCS                   0x07\r
+#define TCG_SECURITY_PROTOCOL_TAPE_DATA              0x20\r
+#define TCG_SECURITY_PROTOCOL_DATA_ENCRYPT_CONFIG    0x21\r
+#define TCG_SECURITY_PROTOCOL_SA_CREATION_CAPS       0x40\r
+#define TCG_SECURITY_PROTOCOL_IKEV2_SCSI             0x41\r
+#define TCG_SECURITY_PROTOCOL_JEDEC_UFS              0xEC\r
+#define TCG_SECURITY_PROTOCOL_SDCARD_SECURITY        0xED\r
+#define TCG_SECURITY_PROTOCOL_IEEE_1667              0xEE\r
+#define TCG_SECURITY_PROTOCOL_ATA_DEVICE_SERVER_PASS 0xEF\r
+\r
+// Security Protocol Specific IDs\r
+#define TCG_SP_SPECIFIC_PROTOCOL_LIST               0x0000\r
+#define TCG_SP_SPECIFIC_PROTOCOL_LEVEL0_DISCOVERY   0x0001\r
+\r
+#define TCG_RESERVED_COMID 0x0000\r
+\r
+#pragma pack(1)\r
+typedef struct {\r
+  UINT8   Reserved[6];\r
+  UINT16  ListLength_BE;  // 6 - 7\r
+  UINT8   List[504];      // 8...\r
+} TCG_SUPPORTED_SECURITY_PROTOCOLS;\r
+\r
+\r
+// Level 0 Discovery\r
+typedef struct {\r
+  UINT32 LengthBE;    // number of valid bytes in discovery response, not including length field\r
+  UINT16 VerMajorBE;\r
+  UINT16 VerMinorBE;\r
+  UINT8  Reserved[8];\r
+  UINT8  VendorUnique[32];\r
+} TCG_LEVEL0_DISCOVERY_HEADER;\r
+\r
+typedef struct _TCG_LEVEL0_FEATURE_DESCRIPTOR_HEADER {\r
+  UINT16 FeatureCode_BE;\r
+  UINT8  Reserved : 4;\r
+  UINT8  Version : 4;\r
+  UINT8  Length;     // length of feature dependent data in bytes\r
+} TCG_LEVEL0_FEATURE_DESCRIPTOR_HEADER;\r
+\r
+\r
+typedef struct {\r
+  TCG_LEVEL0_FEATURE_DESCRIPTOR_HEADER Header;\r
+  UINT8                                LockingSupported : 1;\r
+  UINT8                                LockingEnabled : 1;   // means the locking security provider (SP) is enabled\r
+  UINT8                                Locked : 1;   // means at least 1 locking range is enabled\r
+  UINT8                                MediaEncryption : 1;\r
+  UINT8                                MbrEnabled : 1;\r
+  UINT8                                MbrDone : 1;\r
+  UINT8                                Reserved : 2;\r
+  UINT8                                Reserved515[11];\r
+} TCG_LOCKING_FEATURE_DESCRIPTOR;\r
+\r
+typedef struct {\r
+  TCG_LEVEL0_FEATURE_DESCRIPTOR_HEADER Header;\r
+  UINT8                                SyncSupported : 1;\r
+  UINT8                                AsyncSupported : 1;\r
+  UINT8                                AckNakSupported : 1;\r
+  UINT8                                BufferMgmtSupported : 1;\r
+  UINT8                                StreamingSupported : 1;\r
+  UINT8                                Reserved4b5 : 1;\r
+  UINT8                                ComIdMgmtSupported : 1;\r
+  UINT8                                Reserved4b7 : 1;\r
+  UINT8                                Reserved515[11];\r
+} TCG_TPER_FEATURE_DESCRIPTOR;\r
+\r
+#pragma pack()\r
+\r
+// Special Purpose UIDs\r
+#define TCG_UID_NULL                            TCG_TO_UID(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)\r
+#define TCG_UID_THIS_SP                         TCG_TO_UID(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01)\r
+#define TCG_UID_SMUID                           TCG_TO_UID(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF)\r
+\r
+// Session Manager Method UIDS\r
+#define TCG_UID_SM_PROPERTIES                   TCG_TO_UID(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x01)\r
+#define TCG_UID_SM_START_SESSION                TCG_TO_UID(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x02)\r
+#define TCG_UID_SM_SYNC_SESSION                 TCG_TO_UID(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03)\r
+#define TCG_UID_SM_START_TRUSTED_SESSION        TCG_TO_UID(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x04)\r
+#define TCG_UID_SM_SYNC_TRUSTED_SESSION         TCG_TO_UID(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x05)\r
+#define TCG_UID_SM_CLOSE_SESSION                TCG_TO_UID(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x06)\r
+\r
+// MethodID UIDs\r
+#define TCG_UID_METHOD_DELETE_SP                TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01)\r
+#define TCG_UID_METHOD_CREATE_TABLE             TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02)\r
+#define TCG_UID_METHOD_DELETE                   TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03)\r
+#define TCG_UID_METHOD_CREATE_ROW               TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04)\r
+#define TCG_UID_METHOD_DELETE_ROW               TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05)\r
+#define TCG_UID_METHOD_NEXT                     TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x08)\r
+#define TCG_UID_METHOD_GET_FREE_SPACE           TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09)\r
+#define TCG_UID_METHOD_GET_FREE_ROWS            TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0A)\r
+#define TCG_UID_METHOD_DELETE_METHOD            TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0B)\r
+#define TCG_UID_METHOD_GET_ACL                  TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0D)\r
+#define TCG_UID_METHOD_ADD_ACE                  TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0E)\r
+#define TCG_UID_METHOD_REMOVE_ACE               TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0F)\r
+#define TCG_UID_METHOD_GEN_KEY                  TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x10)\r
+#define TCG_UID_METHOD_GET_PACKAGE              TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12)\r
+#define TCG_UID_METHOD_SET_PACKAGE              TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x13)\r
+#define TCG_UID_METHOD_GET                      TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x16)\r
+#define TCG_UID_METHOD_SET                      TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x17)\r
+#define TCG_UID_METHOD_AUTHENTICATE             TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1C)\r
+#define TCG_UID_METHOD_ISSUE_SP                 TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x01)\r
+#define TCG_UID_METHOD_GET_CLOCK                TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x04, 0x01)\r
+#define TCG_UID_METHOD_RESET_CLOCK              TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x04, 0x02)\r
+#define TCG_UID_METHOD_SET_CLOCK_HIGH           TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x04, 0x03)\r
+#define TCG_UID_METHOD_SET_LAG_HIGH             TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x04, 0x04)\r
+#define TCG_UID_METHOD_SET_CLOCK_LOW            TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x04, 0x05)\r
+#define TCG_UID_METHOD_SET_LAG_LOW              TCG_TO_UID(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x06)\r
+#define TCG_UID_METHOD_INCREMENT_COUNTER        TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x04, 0x07)\r
+#define TCG_UID_METHOD_RANDOM                   TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x01)\r
+#define TCG_UID_METHOD_SALT                     TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x02)\r
+#define TCG_UID_METHOD_DECRYPT_INIT             TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x03)\r
+#define TCG_UID_METHOD_DECRYPT                  TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x04)\r
+#define TCG_UID_METHOD_DECRYPT_FINALIZE         TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x05)\r
+#define TCG_UID_METHOD_ENCRYPT_INIT             TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x06)\r
+#define TCG_UID_METHOD_ENCRYPT                  TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x07)\r
+#define TCG_UID_METHOD_ENCRYPT_FINALIZE         TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x08)\r
+#define TCG_UID_METHOD_HMAC_INIT                TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x09)\r
+#define TCG_UID_METHOD_HMAC                     TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x0A)\r
+#define TCG_UID_METHOD_HMAC_FINALIZE            TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x0B)\r
+#define TCG_UID_METHOD_HASH_INIT                TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x0C)\r
+#define TCG_UID_METHOD_HASH                     TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x0D)\r
+#define TCG_UID_METHOD_HASH_FINALIZE            TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x0E)\r
+#define TCG_UID_METHOD_SIGN                     TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x0F)\r
+#define TCG_UID_METHOD_VERIFY                   TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x10)\r
+#define TCG_UID_METHOD_XOR                      TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x11)\r
+#define TCG_UID_METHOD_ADD_LOG                  TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0A, 0x01)\r
+#define TCG_UID_METHOD_CREATE_LOG               TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0A, 0x02)\r
+#define TCG_UID_METHOD_CLEAR_LOG                TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0A, 0x03)\r
+#define TCG_UID_METHOD_FLUSH_LOG                TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0A, 0x04)\r
+\r
+#endif // TCG_H_\r
diff --git a/MdePkg/Include/IndustryStandard/TcgStorageOpal.h b/MdePkg/Include/IndustryStandard/TcgStorageOpal.h
new file mode 100644 (file)
index 0000000..66027da
--- /dev/null
@@ -0,0 +1,180 @@
+/** @file\r
+  Opal Specification defined values and structures.\r
+\r
+Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution.  The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#ifndef _TCG_STORAGE_OPAL_H_\r
+#define _TCG_STORAGE_OPAL_H_\r
+\r
+#include <IndustryStandard/TcgStorageCore.h>\r
+\r
+#define OPAL_UID_ADMIN_SP                   TCG_TO_UID(0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x00, 0x01)\r
+#define OPAL_UID_ADMIN_SP_C_PIN_MSID        TCG_TO_UID(0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x84, 0x02)\r
+#define OPAL_UID_ADMIN_SP_C_PIN_SID         TCG_TO_UID(0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x01)\r
+#define OPAL_UID_LOCKING_SP                 TCG_TO_UID(0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x00, 0x02)\r
+\r
+// ADMIN_SP\r
+// Authorities\r
+#define OPAL_ADMIN_SP_ANYBODY_AUTHORITY     TCG_TO_UID(0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x01)\r
+#define OPAL_ADMIN_SP_ADMINS_AUTHORITY      TCG_TO_UID(0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02)\r
+#define OPAL_ADMIN_SP_MAKERS_AUTHORITY      TCG_TO_UID(0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x03)\r
+#define OPAL_ADMIN_SP_SID_AUTHORITY         TCG_TO_UID(0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x06)\r
+#define OPAL_ADMIN_SP_ADMIN1_AUTHORITY      TCG_TO_UID(0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x02, 0x01)\r
+#define OPAL_ADMIN_SP_PSID_AUTHORITY        TCG_TO_UID(0x00, 0x00, 0x00, 0x09, 0x00, 0x01, 0xFF, 0x01)\r
+\r
+#define OPAL_ADMIN_SP_ACTIVATE_METHOD       TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x03)\r
+#define OPAL_ADMIN_SP_REVERT_METHOD         TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x02)\r
+\r
+\r
+// LOCKING SP\r
+// Authorities\r
+#define OPAL_LOCKING_SP_ANYBODY_AUTHORITY   TCG_TO_UID(0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x01)\r
+#define OPAL_LOCKING_SP_ADMINS_AUTHORITY    TCG_TO_UID(0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02)\r
+#define OPAL_LOCKING_SP_ADMIN1_AUTHORITY    TCG_TO_UID(0x00, 0x00, 0x00, 0x09, 0x00, 0x01, 0x00, 0x01)\r
+#define OPAL_LOCKING_SP_USERS_AUTHORITY     TCG_TO_UID(0x00, 0x00, 0x00, 0x09, 0x00, 0x03, 0x00, 0x00)\r
+#define OPAL_LOCKING_SP_USER1_AUTHORITY     TCG_TO_UID(0x00, 0x00, 0x00, 0x09, 0x00, 0x03, 0x00, 0x01)\r
+\r
+#define OPAL_LOCKING_SP_REVERTSP_METHOD     TCG_TO_UID(0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x11)\r
+\r
+// C_PIN Table Rows\r
+#define OPAL_LOCKING_SP_C_PIN_ADMIN1        TCG_TO_UID( 0x00, 0x00, 0x00, 0x0B, 0x00, 0x01, 0x00, 0x01 )\r
+#define OPAL_LOCKING_SP_C_PIN_USER1         TCG_TO_UID( 0x00, 0x00, 0x00, 0x0B, 0x00, 0x03, 0x00, 0x01 )\r
+\r
+// Locking Table\r
+#define OPAL_LOCKING_SP_LOCKING_GLOBALRANGE TCG_TO_UID( 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x00, 0x01 )\r
+#define OPAL_LOCKING_SP_LOCKING_RANGE1      TCG_TO_UID( 0x00, 0x00, 0x08, 0x02, 0x00, 0x03, 0x00, 0x01 )\r
+\r
+\r
+// LOCKING SP ACE Table Preconfiguration\r
+#define OPAL_LOCKING_SP_ACE_LOCKING_GLOBALRANGE_GET_ALL      TCG_TO_UID( 0x00, 0x00, 0x00, 0x08, 0x00, 0x03, 0xD0, 0x00 )\r
+#define OPAL_LOCKING_SP_ACE_LOCKING_GLOBALRANGE_SET_RDLOCKED TCG_TO_UID( 0x00, 0x00, 0x00, 0x08, 0x00, 0x03, 0xE0, 0x00 )\r
+#define OPAL_LOCKING_SP_ACE_LOCKING_GLOBALRANGE_SET_WRLOCKED TCG_TO_UID( 0x00, 0x00, 0x00, 0x08, 0x00, 0x03, 0xE8, 0x00 )\r
+\r
+#define OPAL_LOCKING_SP_ACE_K_AES_256_GLOBALRANGE_GENKEY TCG_TO_UID( 0x00, 0x00, 0x00, 0x08, 0x00, 0x03, 0xB8, 0x00 )\r
+#define OPAL_LOCKING_SP_ACE_K_AES_128_GLOBALRANGE_GENKEY TCG_TO_UID( 0x00, 0x00, 0x00, 0x08, 0x00, 0x03, 0xB0, 0x00 )\r
+\r
+\r
+// LOCKING SP LockingInfo Table Preconfiguration\r
+#define OPAL_LOCKING_SP_LOCKING_INFO TCG_TO_UID( 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 0x01 )\r
+\r
+#define OPAL_LOCKING_SP_LOCKINGINFO_ALIGNMENTREQUIRED_COL       0x7\r
+#define OPAL_LOCKING_SP_LOCKINGINFO_LOGICALBLOCKSIZE_COL        0x8\r
+#define OPAL_LOCKING_SP_LOCKINGINFO_ALIGNMENTGRANULARITY_COL    0x9\r
+#define OPAL_LOCKING_SP_LOCKINGINFO_LOWESTALIGNEDLBA_COL        0xA\r
+\r
+// K_AES_256 Table Preconfiguration\r
+#define OPAL_LOCKING_SP_K_AES_256_GLOBALRANGE_KEY TCG_TO_UID( 0x00, 0x00, 0x08, 0x06, 0x00, 0x00, 0x00, 0x01 )\r
+\r
+// K_AES_128 Table Preconfiguration\r
+#define OPAL_LOCKING_SP_K_AES_128_GLOBALRANGE_KEY TCG_TO_UID( 0x00, 0x00, 0x08, 0x05, 0x00, 0x00, 0x00, 0x01 )\r
+\r
+// Minimum Properties that an Opal Compliant SD Shall support\r
+#define OPAL_MIN_MAX_COM_PACKET_SIZE            2048\r
+#define OPAL_MIN_MAX_REPONSE_COM_PACKET_SIZE    2048\r
+#define OPAL_MIN_MAX_PACKET_SIZE                2028\r
+#define OPAL_MIN_MAX_IND_TOKEN_SIZE             1992\r
+#define OPAL_MIN_MAX_PACKETS                    1\r
+#define OPAL_MIN_MAX_SUBPACKETS                 1\r
+#define OPAL_MIN_MAX_METHODS                    1\r
+#define OPAL_MIN_MAX_SESSIONS                   1\r
+#define OPAL_MIN_MAX_AUTHENTICATIONS            2\r
+#define OPAL_MIN_MAX_TRANSACTION_LIMIT          1\r
+\r
+#define OPAL_ADMIN_SP_PIN_COL  3\r
+#define OPAL_LOCKING_SP_C_PIN_TRYLIMIT_COL 5\r
+#define OPAL_RANDOM_METHOD_MAX_COUNT_SIZE 32\r
+\r
+#pragma pack(1)\r
+\r
+typedef struct _OPAL_GEOMETRY_REPORTING_FEATURE {\r
+  TCG_LEVEL0_FEATURE_DESCRIPTOR_HEADER Header;\r
+  UINT8                                Reserved[8];\r
+  UINT32                               LogicalBlockSizeBE;\r
+  UINT64                               AlignmentGranularityBE;\r
+  UINT64                               LowestAlignedLBABE;\r
+} OPAL_GEOMETRY_REPORTING_FEATURE;\r
+\r
+typedef struct _OPAL_SINGLE_USER_MODE_FEATURE  {\r
+  TCG_LEVEL0_FEATURE_DESCRIPTOR_HEADER Header;\r
+  UINT32                               NumLockingObjectsSupportedBE;\r
+  UINT8                                Any : 1;\r
+  UINT8                                All : 1;\r
+  UINT8                                Policy : 1;\r
+  UINT8                                Reserved : 5;\r
+  UINT8                                Reserved2[7];\r
+} OPAL_SINGLE_USER_MODE_FEATURE;\r
+\r
+typedef struct _OPAL_DATASTORE_TABLE_FEATURE {\r
+  TCG_LEVEL0_FEATURE_DESCRIPTOR_HEADER Header;\r
+  UINT16                               Reserved;\r
+  UINT16                               MaxNumTablesBE;\r
+  UINT32                               MaxTotalSizeBE;\r
+  UINT32                               SizeAlignmentBE;\r
+} OPAL_DATASTORE_TABLE_FEATURE;\r
+\r
+typedef struct _OPAL_SSCV1_FEATURE_DESCRIPTOR {\r
+  TCG_LEVEL0_FEATURE_DESCRIPTOR_HEADER Header;\r
+  UINT16                               BaseComdIdBE;\r
+  UINT16                               NumComIdsBE;\r
+  UINT8                                RangeCrossing : 1;\r
+  UINT8                                Reserved : 7;\r
+  UINT8                                Future[11];\r
+} OPAL_SSCV1_FEATURE_DESCRIPTOR;\r
+\r
+typedef struct _OPAL_SSCV2_FEATURE_DESCRIPTOR {\r
+  TCG_LEVEL0_FEATURE_DESCRIPTOR_HEADER Header;\r
+  UINT16                               BaseComdIdBE;\r
+  UINT16                               NumComIdsBE;\r
+  UINT8                                Reserved;\r
+  UINT16                               NumLockingSpAdminAuthoritiesSupportedBE;\r
+  UINT16                               NumLockingSpUserAuthoritiesSupportedBE;\r
+  UINT8                                InitialCPINSIDPIN;\r
+  UINT8                                CPINSIDPINRevertBehavior;\r
+  UINT8                                Future[5];\r
+} OPAL_SSCV2_FEATURE_DESCRIPTOR;\r
+\r
+typedef struct _OPAL_SSCLITE_FEATURE_DESCRIPTOR {\r
+  TCG_LEVEL0_FEATURE_DESCRIPTOR_HEADER Header;\r
+  UINT16                               BaseComdIdBE;\r
+  UINT16                               NumComIdsBE;\r
+  UINT8                                Reserved[5];\r
+  UINT8                                InitialCPINSIDPIN;\r
+  UINT8                                CPINSIDPINRevertBehavior;\r
+  UINT8                                Future[5];\r
+} OPAL_SSCLITE_FEATURE_DESCRIPTOR;\r
+\r
+typedef struct _PYRITE_SSC_FEATURE_DESCRIPTOR {\r
+  TCG_LEVEL0_FEATURE_DESCRIPTOR_HEADER Header;\r
+  UINT16                               BaseComdIdBE;\r
+  UINT16                               NumComIdsBE;\r
+  UINT8                                Reserved[5];\r
+  UINT8                                InitialCPINSIDPIN;\r
+  UINT8                                CPINSIDPINRevertBehavior;\r
+  UINT8                                Future[5];\r
+} PYRITE_SSC_FEATURE_DESCRIPTOR;\r
+\r
+typedef union {\r
+  TCG_LEVEL0_FEATURE_DESCRIPTOR_HEADER     CommonHeader;\r
+  TCG_TPER_FEATURE_DESCRIPTOR              Tper;\r
+  TCG_LOCKING_FEATURE_DESCRIPTOR           Locking;\r
+  OPAL_GEOMETRY_REPORTING_FEATURE          Geometry;\r
+  OPAL_SINGLE_USER_MODE_FEATURE            SingleUser;\r
+  OPAL_DATASTORE_TABLE_FEATURE             DataStore;\r
+  OPAL_SSCV1_FEATURE_DESCRIPTOR            OpalSscV1;\r
+  OPAL_SSCV2_FEATURE_DESCRIPTOR            OpalSscV2;\r
+  OPAL_SSCLITE_FEATURE_DESCRIPTOR          OpalSscLite;\r
+  PYRITE_SSC_FEATURE_DESCRIPTOR            PyriteSsc;\r
+} OPAL_LEVEL0_FEATURE_DESCRIPTOR;\r
+\r
+#pragma pack()\r
+\r
+#endif // _OPAL_H_\r