/** @file NvramSmm.h -- Header for NvramSmm Copyright (c) HR650X BIOS Decompilation Project **/ #ifndef __NVRAMSMM_H__ #define __NVRAMSMM_H__ #include "../uefi_headers/Uefi.h" // // Function Prototypes // EFI_STATUS EFIAPI ModuleEntryPoint( VOID ); EFI_STATUS EFIAPI NvramCoreInit( VOID ); EFI_STATUS EFIAPI SmiNvramCommHandler( VOID ); EFI_STATUS EFIAPI SmiNvramUpdateHandler( VOID ); EFI_STATUS EFIAPI RuntimeGetVariable( VOID ); EFI_STATUS EFIAPI RuntimeSetVariable( VOID ); EFI_STATUS EFIAPI RuntimeGetNextVariableName( VOID ); EFI_STATUS EFIAPI RuntimeQueryVariableInfo( VOID ); EFI_STATUS EFIAPI SecureBootSetVariable( VOID ); EFI_STATUS EFIAPI SecureBootGetVariable( VOID ); EFI_STATUS EFIAPI NvramSyncCallbackSetup( VOID ); EFI_STATUS EFIAPI GetFvHeaderSize( VOID ); EFI_STATUS EFIAPI VarStoreInit( VOID ); EFI_STATUS EFIAPI NvramHobRetrieve( VOID ); EFI_STATUS EFIAPI path: e:\hs\Build\HR6N0XMLK\DEBUG_VS2015\X64\AmiModulePkg\NVRAM\NvramSmm\DEBUG( VOID ); EFI_STATUS EFIAPI files: NvramSmm.c, NvramDxeCommon.c, NvramSmi.c, AuthService.c( VOID ); EFI_STATUS EFIAPI State (from .data section)( VOID ); EFI_STATUS EFIAPI EFI_SYSTEM_TABLE *gST = NULL; // 0x11660( VOID ); EFI_STATUS EFIAPI EFI_RUNTIME_SERVICES *gRT = NULL; // 0x11678( VOID ); EFI_STATUS EFIAPI VOID *gDS = NULL; // 0x11758( VOID ); EFI_STATUS EFIAPI VOID *gMmst; // 0x116F0( VOID ); EFI_STATUS EFIAPI VOID *gSmmBufferValidation = NULL; // 0x11750( VOID ); EFI_STATUS EFIAPI UINT64 gNvramStoreSize = 0; // 0x115D8( VOID ); EFI_STATUS EFIAPI UINT8 gVarStoreInitFlags = 0; // 0x11C20( VOID ); EFI_STATUS EFIAPI EFI_RUNTIME_SERVICES *gRuntimeServicesOverride = NULL; // 0x116E8( VOID ); EFI_STATUS EFIAPI UINTN gDriverNvramBufferSize = 0; // 0x11F18( VOID ); EFI_STATUS EFIAPI UINT64 gMailboxNvramBase = 0; // 0x11F28( VOID ); EFI_STATUS EFIAPI UINT32 gMailboxNvramFlags = 0; // 0x11F38( VOID ); EFI_STATUS EFIAPI UINT64 gMailboxVarStoreSize = 0; // 0x11F48( VOID ); EFI_STATUS EFIAPI BOOLEAN gSmiProcessing = FALSE; // 0x11768( VOID ); EFI_STATUS EFIAPI VAR_STORE_INFO gVarStoreArray[?]; // 0x11C38( VOID ); EFI_STATUS EFIAPI Entry Point( VOID ); EFI_STATUS EFIAPI all UEFI/SMM plumbing( VOID ); EFI_STATUS EFIAPI status variable( VOID ); EFI_STATUS EFIAPI SmmBase2 protocol( VOID ); EFI_STATUS EFIAPI SMM System Table( VOID ); EFI_STATUS EFIAPI SMM memory allocation protocol( VOID ); EFI_STATUS EFIAPI SMRAM ranges( VOID ); EFI_STATUS EFIAPI PCIE segment bus table( VOID ); EFI_STATUS EFIAPI AmiCryptoLib( VOID ); EFI_STATUS EFIAPI heap memory manager( VOID ); EFI_STATUS EFIAPI SMM buffer validation protocol( VOID ); EFI_STATUS EFIAPI DxeServicesTable( VOID ); EFI_STATUS EFIAPI through to SMM protocol install / notification init (returned from Init)( VOID ); EFI_STATUS EFIAPI NVRAM initialization( VOID ); EFI_STATUS EFIAPI that NVRAM store size at least matches HOB pattern( VOID ); EFI_STATUS EFIAPI NVRAM HOB from HOB list( VOID ); EFI_STATUS EFIAPI NvramMailBox variable to get mailbox memory region info( VOID ); EFI_STATUS EFIAPI mailbox NVRAM base/size details from the variable( VOID ); EFI_STATUS EFIAPI 0( VOID ); EFI_STATUS EFIAPI 8( VOID ); EFI_STATUS EFIAPI 60( VOID ); EFI_STATUS EFIAPI 736( VOID ); EFI_STATUS EFIAPI 744( VOID ); EFI_STATUS EFIAPI the variable( VOID ); EFI_STATUS EFIAPI that VarStoreInfo NVRAM sizes match mailbox( VOID ); EFI_STATUS EFIAPI VarStoreInfo NVRAM data from mailbox into working buffer( VOID ); EFI_STATUS EFIAPI simulation mode, also copy NvInfo data from mailbox( VOID ); EFI_STATUS EFIAPI DMA buffer for SMI communication (0x40000 bytes)( VOID ); EFI_STATUS EFIAPI buffer header( VOID ); EFI_STATUS EFIAPI starts at +24( VOID ); EFI_STATUS EFIAPI size( VOID ); EFI_STATUS EFIAPI SMI handler for NVRAM variable access( VOID ); EFI_STATUS EFIAPI notification callback on SMM ReadyToLock( VOID ); EFI_STATUS EFIAPI runtime variable services( VOID ); EFI_STATUS EFIAPI variable change callbacks for variable sync( VOID ); EFI_STATUS EFIAPI additional callbacks for DmiArray variable change( VOID ); EFI_STATUS EFIAPI SMM communication protocol for variable sync( VOID ); EFI_STATUS EFIAPI SMI NVRAM communication handler( VOID ); EFI_STATUS EFIAPI buffer address with SMM buffer validation protocol( VOID ); EFI_STATUS EFIAPI the buffer pointer to 8-byte boundary( VOID ); EFI_STATUS EFIAPI SMI processing flag( VOID ); EFI_STATUS EFIAPI command code at offset 0( VOID ); EFI_STATUS EFIAPI 0: GetVariable operation( VOID ); EFI_STATUS EFIAPI layout: +0x00: cmd, +0x08: NameSize, +0x10: DataSize( VOID ); EFI_STATUS EFIAPI variable read via runtime override( VOID ); EFI_STATUS EFIAPI 1: SetVariable operation( VOID ); EFI_STATUS EFIAPI layout: +0x00: cmd, +0x08: NameLength, +0x10: DataSize( VOID ); EFI_STATUS EFIAPI handles the actual set( VOID ); EFI_STATUS EFIAPI 2: GetNextVariableName( VOID ); EFI_STATUS EFIAPI 3: QueryVariableInfo( VOID ); EFI_STATUS EFIAPI 4: Variable write with auth( VOID ); EFI_STATUS EFIAPI complete notification( VOID ); EFI_STATUS EFIAPI status back to command code location( VOID ); EFI_STATUS EFIAPI SMI NVRAM update handler( VOID ); EFI_STATUS EFIAPI // Validate comm buffer( VOID ); EFI_STATUS EFIAPI size match( VOID ); EFI_STATUS EFIAPI that source buffer has a valid FV header( VOID ); EFI_STATUS EFIAPI if FV header size is consistent( VOID ); EFI_STATUS EFIAPI the data aligns with store parameters( VOID ); EFI_STATUS EFIAPI to allocate bigger temp buffer (3x)( VOID ); EFI_STATUS EFIAPI source NVRAM data( VOID ); EFI_STATUS EFIAPI that data is not all 0xFF (empty erased)( VOID ); EFI_STATUS EFIAPI for active NVRAM (FV header + GUID match)( VOID ); EFI_STATUS EFIAPI size matches the data in the FV( VOID ); EFI_STATUS EFIAPI from temp to working store( VOID ); EFI_STATUS EFIAPI up store pointers for the migration( VOID ); EFI_STATUS EFIAPI address( VOID ); EFI_STATUS EFIAPI store parameters( VOID ); EFI_STATUS EFIAPI Fill header calculation( VOID ); EFI_STATUS EFIAPI up the variable enumeration( VOID ); EFI_STATUS EFIAPI to find space and move( VOID ); EFI_STATUS EFIAPI collection / flush path( VOID ); EFI_STATUS EFIAPI old store entries( VOID ); EFI_STATUS EFIAPI deleted( VOID ); EFI_STATUS EFIAPI GC path( VOID ); EFI_STATUS EFIAPI this point the GC reclaimed space( VOID ); EFI_STATUS EFIAPI Variable Service Overrides( VOID ); EFI_STATUS EFIAPI to SMI via SMI_NVRAM_CMD_GET_VARIABLE command( VOID ); EFI_STATUS EFIAPI non-SMM context, sends SMI to enter SMM first.( VOID ); EFI_STATUS EFIAPI runtime get-variable implementation( VOID ); EFI_STATUS EFIAPI to SMI via SMI_NVRAM_CMD_SET_VARIABLE command( VOID ); EFI_STATUS EFIAPI runtime set-variable implementation( VOID ); EFI_STATUS EFIAPI via SMI_NVRAM_CMD_GET_NEXT_VARIABLE( VOID ); EFI_STATUS EFIAPI runtime get-next-variable implementation( VOID ); EFI_STATUS EFIAPI via SMI_NVRAM_CMD_QUERY_VARIABLE_INFO( VOID ); EFI_STATUS EFIAPI runtime query-variable-info implementation( VOID ); EFI_STATUS EFIAPI Aware Variable Services( VOID ); EFI_STATUS EFIAPI variable type from vendor GUID( VOID ); EFI_STATUS EFIAPI DEBUG((( VOID ); EFI_STATUS EFIAPI the variable to the actual NVRAM store( VOID ); EFI_STATUS EFIAPI SecureBootMode transitions( VOID ); EFI_STATUS EFIAPI type: handle PK/KEK changes( VOID ); EFI_STATUS EFIAPI mode -> set to secure boot mode 0( VOID ); EFI_STATUS EFIAPI mode -> set to 3( VOID ); EFI_STATUS EFIAPI physically present( VOID ); EFI_STATUS EFIAPI mode( VOID ); EFI_STATUS EFIAPI DeploymentModeNv and VendorKeysNv, reject access( VOID ); EFI_STATUS EFIAPI Synchronization Callbacks( VOID ); EFI_STATUS EFIAPI disable flag variable( VOID ); EFI_STATUS EFIAPI disable flag( VOID ); EFI_STATUS EFIAPI sync from Setup to other config variables( VOID ); EFI_STATUS EFIAPI fields from Setup to variables( VOID ); EFI_STATUS EFIAPI SocketIioConfig( VOID ); EFI_STATUS EFIAPI SRIOVEnable between IntelSetup and Setup( VOID ); EFI_STATUS EFIAPI Storage Helper Functions( VOID ); EFI_STATUS EFIAPI for FV header signature at offset 40( VOID ); EFI_STATUS EFIAPI header length at offset 48( VOID ); EFI_STATUS EFIAPI FV header only( VOID ); EFI_STATUS EFIAPI header present at ExtHeaderOffset( VOID ); EFI_STATUS EFIAPI aligned total size( VOID ); EFI_STATUS EFIAPI from end, working backwards( VOID ); EFI_STATUS EFIAPI from flags field( VOID ); EFI_STATUS EFIAPI to locate existing variable data( VOID ); EFI_STATUS EFIAPI for valid flash store( VOID ); EFI_STATUS EFIAPI existing data( VOID ); EFI_STATUS EFIAPI NVRAM HOB retrieval( VOID ); EFI_STATUS EFIAPI for NVRAM HOB( VOID ); EFI_STATUS EFIAPI HOB found, run in simulation mode( VOID ); EFI_STATUS EFIAPI +48 = NVRAM size( VOID ); EFI_STATUS EFIAPI +24 = store address( VOID ); EFI_STATUS EFIAPI that store fits in the GCD descriptor( VOID ); EFI_STATUS EFIAPI working buffer for NVRAM image( VOID ); EFI_STATUS EFIAPI no real store, fill with 0xFF (simulation)( VOID ); EFI_STATUS EFIAPI store from actual flash( VOID ); EFI_STATUS EFIAPI initialization: discover GCD descriptor( VOID ); EFI_STATUS EFIAPI boundaries( VOID ); EFI_STATUS EFIAPI variable store info from working buffer( VOID ); EFI_STATUS EFIAPI info pointer to the variable store array entry( VOID ); EFI_STATUS EFIAPI up callback table for for for for for for...( VOID ); EFI_STATUS EFIAPI as initialized( VOID ); EFI_STATUS EFIAPI the driver's NVRAM working buffer (3x store size for GC)( VOID ); EFI_STATUS EFIAPI "StdDefaults" if present for first-boot defaults( VOID ); EFI_STATUS EFIAPI default variable values from HOB or FV( VOID ); EFI_STATUS EFIAPI defaults flag( VOID ); EFI_STATUS EFIAPI defaults( VOID ); EFI_STATUS EFIAPI actual maximum NVRAM size across all stores( VOID ); EFI_STATUS EFIAPI allocate driver buffer with larger size( VOID ); EFI_STATUS EFIAPI NVRAM init( VOID ); EFI_STATUS EFIAPI the NVRAM HOB from HOB list( VOID ); EFI_STATUS EFIAPI HOB list looking for NVRAM HOB data structure( VOID ); EFI_STATUS EFIAPI driver's NVRAM working buffer( VOID ); EFI_STATUS EFIAPI the store from from HOB( VOID ); EFI_STATUS EFIAPI up VarStore array entry( VOID ); EFI_STATUS EFIAPI working comparison buffer( VOID ); EFI_STATUS EFIAPI all stores fit in the working buffer( VOID ); #endif /* __NVRAMSMM_H__ */