258 lines
7.3 KiB
C
258 lines
7.3 KiB
C
/** @file
|
|
TCG OPAL Definition
|
|
|
|
;******************************************************************************
|
|
;* Copyright (c) 2016, Insyde Software Corp. All Rights Reserved.
|
|
;*
|
|
;* You may not reproduce, distribute, publish, display, perform, modify, adapt,
|
|
;* transmit, broadcast, present, recite, release, license or otherwise exploit
|
|
;* any part of this publication in any form, by any means, without the prior
|
|
;* written permission of Insyde Software Corporation.
|
|
;*
|
|
;******************************************************************************
|
|
*/
|
|
|
|
#ifndef _TCG_OPAL_H
|
|
#define _TCG_OPAL_H
|
|
|
|
#define L0_DISCOVERY_HEADER_SIZE 48
|
|
|
|
#define FC_TPER 0x0001
|
|
#define FC_LOCKING 0x0002
|
|
#define FC_GEOMETRY 0x0003
|
|
#define FC_OPAL20 0x0203
|
|
#define FC_OPALITE 0x0301
|
|
#define FC_PYRITE 0x0302
|
|
#define FC_OPAL10 0x0200
|
|
#define FC_SINGLEUSER 0x0201
|
|
#define FC_DATASTORE 0x0202
|
|
|
|
typedef enum _OPAL_TOKEN {
|
|
// Cell Blocks
|
|
TABLE = 0x00,
|
|
STARTROW = 0x01,
|
|
ENDROW = 0x02,
|
|
STARTCOLUMN = 0x03,
|
|
ENDCOLUMN = 0x04,
|
|
VALUES = 0x01,
|
|
// SP table
|
|
LIFECYCLESTATE = 0x06,
|
|
// Authority Table
|
|
PIN = 0x03,
|
|
// Locking Table
|
|
RANGESTART = 0x03,
|
|
RANGELENGTH = 0x04,
|
|
READLOCKENABLED = 0x05,
|
|
WRITELOCKENABLED = 0x06,
|
|
READLOCKED = 0x07,
|
|
WRITELOCKED = 0x08,
|
|
ACTIVEKEY = 0x0A,
|
|
LOCKONRESET = 0x09,
|
|
// Locking Info Table
|
|
MAXRANGES = 0x04,
|
|
// MBR Control
|
|
MBRENABLE = 0x01,
|
|
MBRDONE = 0x02,
|
|
// properties
|
|
HOSTPROPERTIES = 0x00,
|
|
// Atoms
|
|
STARTLIST = 0xF0,
|
|
ENDLIST = 0xF1,
|
|
STARTNAME = 0xF2,
|
|
ENDNAME = 0xF3,
|
|
CALL = 0xF8,
|
|
ENDOFDATA = 0xF9,
|
|
ENDOFSESSION = 0xFA,
|
|
STARTTRANSACTON = 0xFB,
|
|
ENDTRANSACTON = 0xFC,
|
|
WHERE = 0x00,
|
|
TOKEN_MAX
|
|
} OPAL_TOKEN;
|
|
|
|
#pragma pack(1)
|
|
typedef struct _L0_DISCOVERY_HEADER{
|
|
UINT32 Length;
|
|
UINT32 Revision;
|
|
UINT8 Reserved[8];
|
|
UINT8 VendorUnique[32];
|
|
} L0_DISCOVERY_HEADER;
|
|
|
|
typedef struct _L0_DISCOVERY_DESCRIPTOR {
|
|
UINT16 FeatureCode;
|
|
UINT8 Reserved : 4;
|
|
UINT8 Version : 4;
|
|
UINT8 Length;
|
|
//UINT8 Data[];
|
|
} L0_DISCOVERY_DESCRIPTOR;
|
|
|
|
typedef struct _L0_DISCOVERY_TPER_FEATURE {
|
|
UINT16 FeatureCode; // 0x0001
|
|
UINT8 Reserved0 : 4;
|
|
UINT8 Version : 4;
|
|
UINT8 Length;
|
|
UINT8 Sync : 1;
|
|
UINT8 Async : 1;
|
|
UINT8 AckNack : 1;
|
|
UINT8 BufferManagement : 1;
|
|
UINT8 Streaming : 1;
|
|
UINT8 Reserved1 : 1;
|
|
UINT8 ComIDManagement : 1;
|
|
UINT8 Reserved2 : 1;
|
|
UINT8 Reserved3[11];
|
|
} L0_DISCOVERY_TPER_FEATURE;
|
|
|
|
typedef struct _L0_DISCOVERY_LOCKING_FEATURE {
|
|
UINT16 FeatureCode; // 0x0002
|
|
UINT8 Reserved0 : 4;
|
|
UINT8 Version : 4;
|
|
UINT8 Length;
|
|
UINT8 LockingSupported : 1;
|
|
UINT8 LockingEnabled : 1;
|
|
UINT8 Locked : 1;
|
|
UINT8 MediaEncryption : 1;
|
|
UINT8 MBREnabled : 1;
|
|
UINT8 MBRDone : 1;
|
|
UINT8 Reserved1 : 1;
|
|
UINT8 Reserved2 : 1;
|
|
UINT8 Reserved3[11];
|
|
} L0_DISCOVERY_LOCKING_FEATURE;
|
|
|
|
typedef struct _L0_DISCOVERY_GEOMETRY_REPORTING_FEATURE {
|
|
UINT16 FeatureCode; // 0x0003
|
|
UINT8 Reserved0 : 4;
|
|
UINT8 Version : 4;
|
|
UINT8 Length;
|
|
UINT8 Align : 1;
|
|
UINT8 Reserved1 : 7;
|
|
UINT8 Reserved2[7];
|
|
UINT32 LogicalBlockSize;
|
|
UINT64 AlignmentGranularity;
|
|
UINT64 LowestAlighedLBA;
|
|
} L0_DISCOVERY_GEOMETRY_REPORTING_FEATURE;
|
|
|
|
typedef struct _L0_DISCOVERY_OPALSSC_V200_FEATURE {
|
|
UINT16 FeatureCode; // 0x0203
|
|
UINT8 Reserved0 : 4;
|
|
UINT8 Version : 4;
|
|
UINT8 Length;
|
|
UINT16 BaseComID;
|
|
UINT16 NumOfComIDs;
|
|
UINT8 RangeCrossing : 1;
|
|
UINT8 Reserved1 : 7;
|
|
UINT16 NumOfAdmin;
|
|
UINT16 NumOfUser;
|
|
UINT8 InitialPIN;
|
|
UINT8 RevertedPIN;
|
|
UINT8 Reserved2[5];
|
|
} L0_DISCOVERY_OPALSSC_V200_FEATURE;
|
|
|
|
typedef struct _L0_DISCOVERY_OPALITESSC_FEATURE {
|
|
UINT16 FeatureCode; // 0x0301
|
|
UINT8 Reserved0 : 4;
|
|
UINT8 Version : 4;
|
|
UINT8 Length;
|
|
UINT16 BaseComID;
|
|
UINT16 NumOfComIDs;
|
|
UINT8 Reserved1[5];
|
|
UINT8 InitialPIN;
|
|
UINT8 RevertedPIN;
|
|
UINT8 Reserved2[5];
|
|
} L0_DISCOVERY_OPALITESSC_FEATURE;
|
|
|
|
typedef struct _L0_DISCOVERY_PYRITESSC_FEATURE {
|
|
UINT16 FeatureCode; // 0x0302
|
|
UINT8 Reserved0 : 4;
|
|
UINT8 Version : 4;
|
|
UINT8 Length;
|
|
UINT16 BaseComID;
|
|
UINT16 NumOfComIDs;
|
|
UINT8 Reserved1[5];
|
|
UINT8 InitialPIN;
|
|
UINT8 RevertedPIN;
|
|
UINT8 Reserved2[5];
|
|
} L0_DISCOVERY_PYRITESSC_FEATURE;
|
|
|
|
typedef struct _L0_DISCOVERY_OPALSSC_V100_FEATURE {
|
|
UINT16 FeatureCode; // 0x0200
|
|
UINT8 Reserved0 : 4;
|
|
UINT8 Version : 4;
|
|
UINT8 Length;
|
|
UINT16 BaseComID;
|
|
UINT16 NumOfComIDs;
|
|
UINT8 RangeCrossing : 1;
|
|
UINT8 Reserved1 : 7;
|
|
UINT8 Reserved2[11];
|
|
} L0_DISCOVERY_OPALSSC_V100_FEATURE;
|
|
|
|
typedef struct _L0_DISCOVERY_SINGLE_USER_MODE_FEATURE {
|
|
UINT16 FeatureCode; // 0x0201
|
|
UINT8 Reserved0 : 4;
|
|
UINT8 Version : 4;
|
|
UINT8 Length;
|
|
UINT32 NumberOfLockingObjects;
|
|
UINT8 Any : 1;
|
|
UINT8 All : 1;
|
|
UINT8 Policy : 1;
|
|
UINT8 Reserved1 : 5;
|
|
UINT8 Reserved2[7];
|
|
} L0_DISCOVERY_SINGLE_USER_MODE_FEATURE;
|
|
|
|
typedef struct _L0_DISCOVERY_DATASTORE_TABLE_FEATURE {
|
|
UINT16 FeatureCode; // 0x0202
|
|
UINT8 Reserved0 : 4;
|
|
UINT8 Version : 4;
|
|
UINT8 Length;
|
|
UINT8 Reserved1[2];
|
|
UINT16 MaxTables;
|
|
UINT32 MaxSizeTables;
|
|
UINT32 TableSizeAlignment;
|
|
} L0_DISCOVERY_DATASTORE_TABLE_FEATURE;
|
|
|
|
typedef union _L0_DISCOVERY_FEATURES {
|
|
L0_DISCOVERY_TPER_FEATURE TPer;
|
|
L0_DISCOVERY_LOCKING_FEATURE Locking;
|
|
L0_DISCOVERY_GEOMETRY_REPORTING_FEATURE Geometry;
|
|
L0_DISCOVERY_OPALSSC_V200_FEATURE Opal20;
|
|
L0_DISCOVERY_OPALITESSC_FEATURE Opalite;
|
|
L0_DISCOVERY_PYRITESSC_FEATURE Pyrite;
|
|
L0_DISCOVERY_OPALSSC_V100_FEATURE Opal10;
|
|
L0_DISCOVERY_SINGLE_USER_MODE_FEATURE SingleUser;
|
|
L0_DISCOVERY_DATASTORE_TABLE_FEATURE DataStore;
|
|
} L0_DISCOVERY_FEATURES;
|
|
|
|
typedef struct {
|
|
UINT8 Reserved[4];
|
|
UINT8 ExtComID[4];
|
|
UINT32 OutstandingData;
|
|
UINT32 MinTransfer;
|
|
UINT32 Length;
|
|
//UINT8 Payload[];
|
|
} COMPACKET_HEADER;
|
|
|
|
typedef struct {
|
|
UINT32 TPerSN;
|
|
UINT32 HostSN;
|
|
UINT32 SeqNumber;
|
|
UINT8 Reserved[2];
|
|
UINT16 AckType;
|
|
UINT32 Ack;
|
|
UINT32 Length;
|
|
//UINT8 Payload[];
|
|
} PACKET_HEADER;
|
|
|
|
typedef struct {
|
|
UINT8 Reserved[6];
|
|
UINT16 Kind;
|
|
UINT32 Length;
|
|
//UINT8 Payload[];
|
|
} SUBPACKET_HEADER;
|
|
|
|
typedef struct {
|
|
COMPACKET_HEADER ComPacket;
|
|
PACKET_HEADER Packet;
|
|
SUBPACKET_HEADER SubPacket;
|
|
} OPAL_HEADER;
|
|
#pragma pack()
|
|
#endif //_TCG_OPAL_H_
|
|
|