Newer
Older
AMI-Aptio-BIOS-Reversed / TcgStorageSecurity / TcgStorageSecurity.h
@Ajax Dong Ajax Dong 2 days ago 13 KB Init
/** @file
  TcgStorageSecurity.h -- Header for TcgStorageSecurity

Copyright (c) HR650X BIOS Decompilation Project
**/

#ifndef __TCGSTORAGESECURITY_H__
#define __TCGSTORAGESECURITY_H__

#include "../uefi_headers/Uefi.h"

//
// Function Prototypes
//

EFI_STATUS
EFIAPI
SendReceiveRaw(
  VOID
);

EFI_STATUS
EFIAPI
DriverInitEntry(
  VOID
);

EFI_STATUS
EFIAPI
TcgStorageSecuritySupported(
  VOID
);

EFI_STATUS
EFIAPI
TcgStorageSecurityStart(
  VOID
);

EFI_STATUS
EFIAPI
TcgStorageSecurityStop(
  VOID
);

EFI_STATUS
EFIAPI
TcgRetrieveSecurityStatus(
  VOID
);

EFI_STATUS
EFIAPI
TcgSendReceive(
  VOID
);

EFI_STATUS
EFIAPI
TcgGetInfo(
  VOID
);

EFI_STATUS
EFIAPI
TcgSetPassword(
  VOID
);

EFI_STATUS
EFIAPI
TcgReset(
  VOID
);

EFI_STATUS
EFIAPI
TcgBlockSid(
  VOID
);

EFI_STATUS
EFIAPI
GetSupportedProtocols(
  VOID
);

EFI_STATUS
EFIAPI
OpenSessionWithAdminSpMsid(
  VOID
);

EFI_STATUS
EFIAPI
CloseSession(
  VOID
);

EFI_STATUS
EFIAPI
GetLevel0DiscoveryData(
  VOID
);

EFI_STATUS
EFIAPI
ParseLevel0DiscoveryData(
  VOID
);

EFI_STATUS
EFIAPI
OpenLockingSpSession(
  VOID
);

EFI_STATUS
EFIAPI
ReadLockingRange(
  VOID
);

EFI_STATUS
EFIAPI
SetLockingRange(
  VOID
);

EFI_STATUS
EFIAPI
ConfigureLockingRange(
  VOID
);

EFI_STATUS
EFIAPI
SetSidCredential(
  VOID
);

EFI_STATUS
EFIAPI
InitializeTcgSessions(
  VOID
);

EFI_STATUS
EFIAPI
GetMsidCredential(
  VOID
);

EFI_STATUS
EFIAPI
GetOpalSecurityStatus(
  VOID
);

EFI_STATUS
EFIAPI
UpdateLockingStatus(
  VOID
);

EFI_STATUS
EFIAPI
CopyPciDataToS3Buffer(
  VOID
);

EFI_STATUS
EFIAPI
RestoreS3Data(
  VOID
);

EFI_STATUS
EFIAPI
InitializeS3Data(
  VOID
);

EFI_STATUS
EFIAPI
_ModuleEntryPoint(
  VOID
);

EFI_STATUS
EFIAPI
protocol GUIDs and device path protocols(
  VOID
);

EFI_STATUS
EFIAPI
EFI_GUID gEfiTcgStorageProtocolGuid;(
  VOID
);

EFI_STATUS
EFIAPI
data references(
  VOID
);

EFI_STATUS
EFIAPI
UINTN   gImageHandle      = 0;(
  VOID
);

EFI_STATUS
EFIAPI
global state(
  VOID
);

EFI_STATUS
EFIAPI
n0x180           = 0;(
  VOID
);

EFI_STATUS
EFIAPI
tables(
  VOID
);

EFI_STATUS
EFIAPI
gTcgStorageProtocolGuid         = { 0xCA1E3F1A, 0x2D84, 0x46C8, { 0x9B, 0x2E, 0x23, 0x51, 0xC0, 0xB9, 0x1B, 0x94 } };(
  VOID
);

EFI_STATUS
EFIAPI
data used by Level 0 discovery parsing(
  VOID
);

EFI_STATUS
EFIAPI
UINT8  FeatureTper[];(
  VOID
);

EFI_STATUS
EFIAPI
input parameters using UEFI Boot Services Table Library(
  VOID
);

EFI_STATUS
EFIAPI
(gImageHandle != 0);(
  VOID
);

EFI_STATUS
EFIAPI
platform-specific initialization(
  VOID
);

EFI_STATUS
EFIAPI
for PCI OPAL presence and configure CMOS(
  VOID
);

EFI_STATUS
EFIAPI
= PciRead32 (PCI_LIB_ADDRESS (0, 0, 0, 0));(
  VOID
);

EFI_STATUS
EFIAPI
chipset register for OPAL(
  VOID
);

EFI_STATUS
EFIAPI
(PCI_LIB_ADDRESS (0, 0, 0, 0xA4), BIT7);(
  VOID
);

EFI_STATUS
EFIAPI
CMOS for TCG enable(
  VOID
);

EFI_STATUS
EFIAPI
((IoRead8 (0x71) & 0x0F) == 0) {(
  VOID
);

EFI_STATUS
EFIAPI
platform type via memory-mapped I/O(
  VOID
);

EFI_STATUS
EFIAPI
((MmioRead8 (0xFEDAF0490) & 0x02) != 0) {(
  VOID
);

EFI_STATUS
EFIAPI
if controller supports EFI Storage Security Command Protocol(
  VOID
);

EFI_STATUS
EFIAPI
= gBS->OpenProtocol ((
  VOID
);

EFI_STATUS
EFIAPI
the Storage Security Command Protocol(
  VOID
);

EFI_STATUS
EFIAPI
if TCG security protocol (0x01) is supported(
  VOID
);

EFI_STATUS
EFIAPI
= GetSupportedProtocols (TcgProtocol, 1);(
  VOID
);

EFI_STATUS
EFIAPI
if the protocol is already installed (already started)(
  VOID
);

EFI_STATUS
EFIAPI
protocol context(
  VOID
);

EFI_STATUS
EFIAPI
= gBS->AllocatePool ((
  VOID
);

EFI_STATUS
EFIAPI
up function dispatch table(
  VOID
);

EFI_STATUS
EFIAPI
back to driver context and set flags(
  VOID
);

EFI_STATUS
EFIAPI
context(
  VOID
);

EFI_STATUS
EFIAPI
per-controller session data(
  VOID
);

EFI_STATUS
EFIAPI
= InitializeTcgSessions (TcgProtocol, 1);(
  VOID
);

EFI_STATUS
EFIAPI
initial security status(
  VOID
);

EFI_STATUS
EFIAPI
= TcgRetrieveSecurityStatus (Context, &SecurityStatus);(
  VOID
);

EFI_STATUS
EFIAPI
TPER reset / Block SID if needed(
  VOID
);

EFI_STATUS
EFIAPI
(!(SecurityStatus & TCG_SECURITY_STATUS_FROZEN) &&(
  VOID
);

EFI_STATUS
EFIAPI
TPER reset for locked drives(
  VOID
);

EFI_STATUS
EFIAPI
= OpenSessionWithAdminSpMsid ((
  VOID
);

EFI_STATUS
EFIAPI
the protocol on the controller handle(
  VOID
);

EFI_STATUS
EFIAPI
= gBS->InstallMultipleProtocolInterfaces ((
  VOID
);

EFI_STATUS
EFIAPI
protocol notification for Block SID(
  VOID
);

EFI_STATUS
EFIAPI
(gBlockSidStorageProtocol == NULL) {(
  VOID
);

EFI_STATUS
EFIAPI
timer event for periodic S3 data save(
  VOID
);

EFI_STATUS
EFIAPI
(gSidBlockCommandInterface == NULL) {(
  VOID
);

EFI_STATUS
EFIAPI
the protocol and free context(
  VOID
);

EFI_STATUS
EFIAPI
= gBS->UninstallMultipleProtocolInterfaces ((
  VOID
);

EFI_STATUS
EFIAPI
the storage security command protocol(
  VOID
);

EFI_STATUS
EFIAPI
Storage Protocol Interface Functions(
  VOID
);

EFI_STATUS
EFIAPI
TPER context based on primary/secondary binding(
  VOID
);

EFI_STATUS
EFIAPI
(Index == 1) {(
  VOID
);

EFI_STATUS
EFIAPI
operations: Locking range related(
  VOID
);

EFI_STATUS
EFIAPI
= GetOpalSecurityStatus (TcgContext->DriverContext, Index);(
  VOID
);

EFI_STATUS
EFIAPI
locked: perform ReadLockingRange(
  VOID
);

EFI_STATUS
EFIAPI
= ReadLockingRange (TperContext, Buffer);(
  VOID
);

EFI_STATUS
EFIAPI
locked: perform full Locking SP session(
  VOID
);

EFI_STATUS
EFIAPI
= OpenLockingSpSession (TperContext, Buffer);(
  VOID
);

EFI_STATUS
EFIAPI
locking state to ReadWrite (0x02)(
  VOID
);

EFI_STATUS
EFIAPI
= OPAL_LOCKING_STATE_READWRITE;(
  VOID
);

EFI_STATUS
EFIAPI
operations: Set SID credential / MSID related(
  VOID
);

EFI_STATUS
EFIAPI
= SetSidCredential (TperContext, Buffer);(
  VOID
);

EFI_STATUS
EFIAPI
operations: C_PIN_SID / credential handling(
  VOID
);

EFI_STATUS
EFIAPI
((Operation & BIT0) != 0) {(
  VOID
);

EFI_STATUS
EFIAPI
for Block SID feature(
  VOID
);

EFI_STATUS
EFIAPI
(*(UINT16 *)((UINTN)TperContext + 82) == TCG_FEATURE_CODE_BLOCK_SID) {(
  VOID
);

EFI_STATUS
EFIAPI
C_PIN_SID vs C_PIN_MSID equality(
  VOID
);

EFI_STATUS
EFIAPI
((*(UINT8 *)((UINTN)TperContext + 86) & SID_BLOCK_STATUS_C_PIN_SID) == 0) {(
  VOID
);

EFI_STATUS
EFIAPI
SID supported(
  VOID
);

EFI_STATUS
EFIAPI
if SID is already blocked(
  VOID
);

EFI_STATUS
EFIAPI
((*(UINT8 *)((UINTN)TperContext + 86) & SID_BLOCK_STATUS_SID_VALUE) != 0) {(
  VOID
);

EFI_STATUS
EFIAPI
blocked(
  VOID
);

EFI_STATUS
EFIAPI
TPER reset via Admin SP session(
  VOID
);

EFI_STATUS
EFIAPI
OpenSessionWithAdminSpMsid ((
  VOID
);

EFI_STATUS
EFIAPI
if Block SID feature is supported (feature code 0x0402 = 1026)(
  VOID
);

EFI_STATUS
EFIAPI
(*(UINT16 *)((UINTN)TperContext + 82) != 0x0402) {(
  VOID
);

EFI_STATUS
EFIAPI
C_PIN_SID is not equal to C_PIN_MSID(
  VOID
);

EFI_STATUS
EFIAPI
= *(UINT8 *)((UINTN)TperContext + 86);(
  VOID
);

EFI_STATUS
EFIAPI
((SidStatus & SID_BLOCK_STATUS_SID_VALUE) != 0) {(
  VOID
);

EFI_STATUS
EFIAPI
and send Block SID command(
  VOID
);

EFI_STATUS
EFIAPI
(gSidBlockPassword[0] != 0) {(
  VOID
);

EFI_STATUS
EFIAPI
session and issue Block SID(
  VOID
);

EFI_STATUS
EFIAPI
bytes(
  VOID
);

EFI_STATUS
EFIAPI
Helper Functions(
  VOID
);

EFI_STATUS
EFIAPI
seconds(
  VOID
);

EFI_STATUS
EFIAPI
* 8(
  VOID
);

EFI_STATUS
EFIAPI
supported protocols(
  VOID
);

EFI_STATUS
EFIAPI
(Buffer, sizeof (Buffer));(
  VOID
);

EFI_STATUS
EFIAPI
protocol 0 = list(
  VOID
);

EFI_STATUS
EFIAPI
BufferSize(
  VOID
);

EFI_STATUS
EFIAPI
protocol list (big-endian byte count at offset 6)(
  VOID
);

EFI_STATUS
EFIAPI
= Buffer + 8;(
  VOID
);

EFI_STATUS
EFIAPI
of supported protocols(
  VOID
);

EFI_STATUS
EFIAPI
for protocol 0x01 (TCG / OPAL)(
  VOID
);

EFI_STATUS
EFIAPI
(SpIndex = 0; SpIndex < SpCount; SpIndex++) {(
  VOID
);

EFI_STATUS
EFIAPI
session open request(
  VOID
);

EFI_STATUS
EFIAPI
(Request, sizeof (Request));(
  VOID
);

EFI_STATUS
EFIAPI
manager / start session(
  VOID
);

EFI_STATUS
EFIAPI
SP UID (0x00000000)(
  VOID
);

EFI_STATUS
EFIAPI
(e.g. 0x01 = Admin1, 0x02 = Admin2)(
  VOID
);

EFI_STATUS
EFIAPI
method header (8 bytes)(
  VOID
);

EFI_STATUS
EFIAPI
((UINT64 *)&Request[16], (UINT64)0x0000000000000003); // SMUID + method(
  VOID
);

EFI_STATUS
EFIAPI
the command(
  VOID
);

EFI_STATUS
EFIAPI
= sizeof (Request);(
  VOID
);

EFI_STATUS
EFIAPI
protocol(
  VOID
);

EFI_STATUS
EFIAPI
TransferLength(
  VOID
);

EFI_STATUS
EFIAPI
close session request (end session)(
  VOID
);

EFI_STATUS
EFIAPI
(CloseRequest, sizeof (CloseRequest));(
  VOID
);

EFI_STATUS
EFIAPI
manager(
  VOID
);

EFI_STATUS
EFIAPI
close session via security protocol 0x01(
  VOID
);

EFI_STATUS
EFIAPI
= SendReceiveRaw ((
  VOID
);

EFI_STATUS
EFIAPI
second timeout(
  VOID
);

EFI_STATUS
EFIAPI
discovery buffer(
  VOID
);

EFI_STATUS
EFIAPI
= sizeof (UINTN) * 64;(
  VOID
);

EFI_STATUS
EFIAPI
timeout and other params(
  VOID
);

EFI_STATUS
EFIAPI
= 10000000;   // 10 seconds default(
  VOID
);

EFI_STATUS
EFIAPI
layer request(
  VOID
);

EFI_STATUS
EFIAPI
0x0100(
  VOID
);

EFI_STATUS
EFIAPI
if this is a Level 0 session(
  VOID
);

EFI_STATUS
EFIAPI
= (UINT8 *)DeviceContext;(
  VOID
);

EFI_STATUS
EFIAPI
seconds for non-Level0(
  VOID
);

EFI_STATUS
EFIAPI
discovery receive(
  VOID
);

EFI_STATUS
EFIAPI
= 512;(
  VOID
);

EFI_STATUS
EFIAPI
ID(
  VOID
);

EFI_STATUS
EFIAPI
the discovery response(
  VOID
);

EFI_STATUS
EFIAPI
= ParseLevel0DiscoveryData (DeviceContext, Buffer);(
  VOID
);

EFI_STATUS
EFIAPI
the TCG Level 0 discovery header (first 48 bytes)(
  VOID
);

EFI_STATUS
EFIAPI
includes: Length (4), Version (2), Reserved, VendorID, etc.(
  VOID
);

EFI_STATUS
EFIAPI
= (UINT8 *)Data + 48;                // +12 dwords(
  VOID
);

EFI_STATUS
EFIAPI
feature descriptors(
  VOID
);

EFI_STATUS
EFIAPI
descriptor: FeatureCode(2) + Version(1) + Length(1) + Data(Length)(
  VOID
);

EFI_STATUS
EFIAPI
((UINTN)(Data - (UINT8 *)DiscoveryBuffer) < RemainingLength) {(
  VOID
);

EFI_STATUS
EFIAPI
//(
  VOID
);

EFI_STATUS
EFIAPI
feature: byte 0 of data has TPER flags(
  VOID
);

EFI_STATUS
EFIAPI
feature: byte 0 of data has locking flags(
  VOID
);

EFI_STATUS
EFIAPI
feature: 32 bytes of geometry data(
  VOID
);

EFI_STATUS
EFIAPI
((VOID *)((UINTN)Context + 30), FeatureData, 32);(
  VOID
);

EFI_STATUS
EFIAPI
SSC V2(
  VOID
);

EFI_STATUS
EFIAPI
SSC V2 feature descriptor(
  VOID
);

EFI_STATUS
EFIAPI
V1(
  VOID
);

EFI_STATUS
EFIAPI
V2 (alternate)(
  VOID
);

EFI_STATUS
EFIAPI
feature descriptor: similar structure(
  VOID
);

EFI_STATUS
EFIAPI
SID(
  VOID
);

EFI_STATUS
EFIAPI
SID feature descriptor(
  VOID
);

EFI_STATUS
EFIAPI
to next descriptor(
  VOID
);

EFI_STATUS
EFIAPI
+= FeatureLength + 4;(
  VOID
);

EFI_STATUS
EFIAPI
session with Locking SP using the stored MSID/PIN(
  VOID
);

EFI_STATUS
EFIAPI
is a simplified wrapper around the TCG session open method.(
  VOID
);

EFI_STATUS
EFIAPI
EFI_SUCCESS;(
  VOID
);

EFI_STATUS
EFIAPI
locking range info via TCG method calls(
  VOID
);

EFI_STATUS
EFIAPI
locking range config method call(
  VOID
);

EFI_STATUS
EFIAPI
locking range state to desired value(
  VOID
);

EFI_STATUS
EFIAPI
C_PIN_SID using the provided credential buffer.(
  VOID
);

EFI_STATUS
EFIAPI
session with Admin SP, sends Set method for C_PIN_SID.(
  VOID
);

EFI_STATUS
EFIAPI
session buffer(
  VOID
);

EFI_STATUS
EFIAPI
based on binding index(
  VOID
);

EFI_STATUS
EFIAPI
context: use device path node and PFA(
  VOID
);

EFI_STATUS
EFIAPI
(SessionData, (VOID *)((UINTN)DeviceContext + 904), sizeof (UINTN));(
  VOID
);

EFI_STATUS
EFIAPI
context: use secondary binding data(
  VOID
);

EFI_STATUS
EFIAPI
(SessionData, (VOID *)((UINTN)DeviceContext + 4256), sizeof (UINTN));(
  VOID
);

EFI_STATUS
EFIAPI
Level 0 Discovery data(
  VOID
);

EFI_STATUS
EFIAPI
= GetLevel0DiscoveryData (SessionData);(
  VOID
);

EFI_STATUS
EFIAPI
and retrieve MSID credential (C_PIN_MSID)(
  VOID
);

EFI_STATUS
EFIAPI
(gMsidCredential[0] == 0) {(
  VOID
);

EFI_STATUS
EFIAPI
MSID credential retrieval (Get C_PIN_MSID_UID)(
  VOID
);

EFI_STATUS
EFIAPI
((DEBUG_INFO, "Get  C_PIN_MSID_UID\n"));(
  VOID
);

EFI_STATUS
EFIAPI
session pointer in the appropriate context slot(
  VOID
);

EFI_STATUS
EFIAPI
Get method for C_PIN_MSID UID(
  VOID
);

EFI_STATUS
EFIAPI
sends a TCG command to read C_PIN_MSID value from(
  VOID
);

EFI_STATUS
EFIAPI
Admin SP, using the stored credential UID.(
  VOID
);

EFI_STATUS
EFIAPI
locking flags(
  VOID
);

EFI_STATUS
EFIAPI
= (*(UINT8 *)(TperContext + 25) & 0x07);(
  VOID
);

EFI_STATUS
EFIAPI
SID blocked status (SID is blocked if BIT1 set at offset 86)(
  VOID
);

EFI_STATUS
EFIAPI
((*(UINT8 *)(TperContext + 86) & 0x02) != 0) {(
  VOID
);

EFI_STATUS
EFIAPI
the system via S3 buffer that locking state changed(
  VOID
);

EFI_STATUS
EFIAPI
Resume Data Management(
  VOID
);

EFI_STATUS
EFIAPI
buffer capacity (0x180 entries max)(
  VOID
);

EFI_STATUS
EFIAPI
(n0x180 >= TCG_S3_BUFFER_SLOTS) {(
  VOID
);

EFI_STATUS
EFIAPI
at slot position (3 UINT64 per slot = 24 bytes)(
  VOID
);

EFI_STATUS
EFIAPI
= n0x180;(
  VOID
);

EFI_STATUS
EFIAPI
all stored entries and perform PCI config writes(
  VOID
);

EFI_STATUS
EFIAPI
(SlotIndex = 0; SlotIndex < Count; SlotIndex++) {(
  VOID
);

EFI_STATUS
EFIAPI
and Dispatch(
  VOID
);

EFI_STATUS
EFIAPI
of (BDF, Register, Value) triples for S3 save(
  VOID
);

EFI_STATUS
EFIAPI
struct {(
  VOID
);

EFI_STATUS
EFIAPI
entries come from the PciS3Table in the HOB(
  VOID
);

EFI_STATUS
EFIAPI
= 5;   // 5 entries: 5 descriptors * 12 bytes each = 60 bytes(
  VOID
);

EFI_STATUS
EFIAPI
Binding Protocol instance(
  VOID
);

EFI_STATUS
EFIAPI
gDriverBinding = {(
  VOID
);

EFI_STATUS
EFIAPI
installation notification entries(
  VOID
);

EFI_STATUS
EFIAPI
gTcgStorageSecurityEvent;(
  VOID
);

#endif /* __TCGSTORAGESECURITY_H__ */