From 4c8486fd72156b1327206121572f3959ba7afa59 Mon Sep 17 00:00:00 2001 From: Michael Kubacki Date: Wed, 10 Jun 2020 16:28:30 -0700 Subject: PrmPkg/PrmSampleHardwareAccessModule: Add non-print PRM handlers For each PRM handler that is currently present, a corresponding PRM handler is added that does not print. This allows a caller to execute a sample hardware access PRM handler without requiring that caller to provide a debug print service. Cc: Andrew Fish Cc: Kang Gao Cc: Michael D Kinney Cc: Michael Kubacki Cc: Leif Lindholm Cc: Benjamin You Cc: Liu Yun Cc: Ankit Sinha Cc: Nate DeSimone Signed-off-by: Michael Kubacki Acked-by: Michael D Kinney Acked-by: Liming Gao Acked-by: Leif Lindholm Reviewed-by: Ankit Sinha --- .../PrmSampleHardwareAccessModule.c | 363 ++++++++++++++------- 1 file changed, 237 insertions(+), 126 deletions(-) diff --git a/PrmPkg/Samples/PrmSampleHardwareAccessModule/PrmSampleHardwareAccessModule.c b/PrmPkg/Samples/PrmSampleHardwareAccessModule/PrmSampleHardwareAccessModule.c index 87fe9cafc9..32e04c5e85 100644 --- a/PrmPkg/Samples/PrmSampleHardwareAccessModule/PrmSampleHardwareAccessModule.c +++ b/PrmPkg/Samples/PrmSampleHardwareAccessModule/PrmSampleHardwareAccessModule.c @@ -27,12 +27,21 @@ // {2120cd3c-848b-4d8f-abbb-4b74ce64ac89} #define MSR_ACCESS_MICROCODE_SIGNATURE_PRM_HANDLER_GUID {0x2120cd3c, 0x848b, 0x4d8f, {0xab, 0xbb, 0x4b, 0x74, 0xce, 0x64, 0xac, 0x89}} +// {5d28b4e7-3867-4aee-aa09-51fc282c3b22} +#define MSR_PRINT_MICROCODE_SIGNATURE_PRM_HANDLER_GUID {0x5d28b4e7, 0x3867, 0x4aee, {0xaa, 0x09, 0x51, 0xfc, 0x28, 0x2c, 0x3b, 0x22}} + // {ea0935a7-506b-4159-bbbb-48deeecb6f58} #define MSR_ACCESS_MTRR_DUMP_PRM_HANDLER_GUID {0xea0935a7, 0x506b, 0x4159, {0xbb, 0xbb, 0x48, 0xde, 0xee, 0xcb, 0x6f, 0x58}} +// {4b64b702-4d2b-4dfe-ac5a-0b4110a2ca47} +#define MSR_PRINT_MTRR_DUMP_PRM_HANDLER_GUID {0x4b64b702, 0x4d2b, 0x4dfe, {0xac, 0x5a, 0x0b, 0x41, 0x10, 0xa2, 0xca, 0x47}} + // {1bd1bda9-909a-4614-9699-25ec0c2783f7} #define MMIO_ACCESS_HPET_PRM_HANDLER_GUID {0x1bd1bda9, 0x909a, 0x4614, {0x96, 0x99, 0x25, 0xec, 0x0c, 0x27, 0x83, 0xf7}} +// {8a0efdde-78d0-45f0-aea0-c28245c7e1db} +#define MMIO_PRINT_HPET_PRM_HANDLER_GUID {0x8a0efdde, 0x78d0, 0x45f0, {0xae, 0xa0, 0xc2, 0x82, 0x45, 0xc7, 0xe1, 0xdb}} + #define HPET_BASE_ADDRESS 0xFED00000 // @@ -124,13 +133,18 @@ MtrrLibApplyVariableMtrrs ( // /** - Prints all MTRR values including architectural and variable MTTRs. + Accesses MTRR values including architectural and variable MTRRs. + + If the optional OsServiceDebugPrint function pointer is provided that function is + used to print the MTRR settings. + + @param[in] OsServiceDebugPrint A pointer to an OS-provided debug print function. **/ VOID EFIAPI -PrintAllMtrrs ( - IN PRM_OS_SERVICE_DEBUG_PRINT OsServiceDebugPrint +AccessAllMtrrs ( + IN PRM_OS_SERVICE_DEBUG_PRINT OsServiceDebugPrint OPTIONAL ) { MTRR_SETTINGS LocalMtrrs; @@ -148,7 +162,7 @@ PrintAllMtrrs ( ]; MTRR_MEMORY_RANGE RawVariableRanges[ARRAY_SIZE (Mtrrs->Variables.Mtrr)]; - if (OsServiceDebugPrint == NULL || !IsMtrrSupported ()) { + if (!IsMtrrSupported ()) { return; } @@ -160,56 +174,63 @@ PrintAllMtrrs ( // // Dump RAW MTRR contents // - OsServiceDebugPrint (" MTRR Settings:\n"); - OsServiceDebugPrint (" =============\n"); + if (OsServiceDebugPrint != NULL) { + OsServiceDebugPrint (" MTRR Settings:\n"); + OsServiceDebugPrint (" =============\n"); - AsciiSPrint ( - &DebugMessage[0], - ARRAY_SIZE (DebugMessage), - " MTRR Default Type: %016lx\n", - Mtrrs->MtrrDefType - ); - OsServiceDebugPrint (&DebugMessage[0]); - - for (Index = 0; Index < MTRR_NUMBER_OF_FIXED_MTRR; Index++) { AsciiSPrint ( &DebugMessage[0], ARRAY_SIZE (DebugMessage), - " Fixed MTRR[%02d] : %016lx\n", - Index, - Mtrrs->Fixed.Mtrr[Index] + " MTRR Default Type: %016lx\n", + Mtrrs->MtrrDefType ); OsServiceDebugPrint (&DebugMessage[0]); } - ContainVariableMtrr = FALSE; - for (Index = 0; Index < VariableMtrrCount; Index++) { - if ((Mtrrs->Variables.Mtrr[Index].Mask & BIT11) == 0) { - // - // If mask is not valid, then do not display range - // - continue; + + if (OsServiceDebugPrint != NULL) { + for (Index = 0; Index < MTRR_NUMBER_OF_FIXED_MTRR; Index++) { + AsciiSPrint ( + &DebugMessage[0], + ARRAY_SIZE (DebugMessage), + " Fixed MTRR[%02d] : %016lx\n", + Index, + Mtrrs->Fixed.Mtrr[Index] + ); + OsServiceDebugPrint (&DebugMessage[0]); + } + + ContainVariableMtrr = FALSE; + for (Index = 0; Index < VariableMtrrCount; Index++) { + if ((Mtrrs->Variables.Mtrr[Index].Mask & BIT11) == 0) { + // + // If mask is not valid, then do not display range + // + continue; + } + ContainVariableMtrr = TRUE; + AsciiSPrint ( + &DebugMessage[0], + ARRAY_SIZE (DebugMessage), + " Variable MTRR[%02d]: Base=%016lx Mask=%016lx\n", + Index, + Mtrrs->Variables.Mtrr[Index].Base, + Mtrrs->Variables.Mtrr[Index].Mask + ); + OsServiceDebugPrint (&DebugMessage[0]); } - ContainVariableMtrr = TRUE; - AsciiSPrint ( - &DebugMessage[0], - ARRAY_SIZE (DebugMessage), - " Variable MTRR[%02d]: Base=%016lx Mask=%016lx\n", - Index, - Mtrrs->Variables.Mtrr[Index].Base, - Mtrrs->Variables.Mtrr[Index].Mask - ); - OsServiceDebugPrint (&DebugMessage[0]); - } - if (!ContainVariableMtrr) { - OsServiceDebugPrint (" Variable MTRR : None.\n"); + if (!ContainVariableMtrr) { + OsServiceDebugPrint (" Variable MTRR : None.\n"); + } + OsServiceDebugPrint ("\n"); } - OsServiceDebugPrint ("\n"); // // Dump MTRR setting in ranges // - OsServiceDebugPrint (" Memory Ranges:\n"); - OsServiceDebugPrint (" ====================================\n"); + if (OsServiceDebugPrint != NULL) { + OsServiceDebugPrint (" Memory Ranges:\n"); + OsServiceDebugPrint (" ====================================\n"); + } MtrrLibInitializeMtrrMask (&MtrrValidBitsMask, &MtrrValidAddressMask); Ranges[0].BaseAddress = 0; Ranges[0].Length = MtrrValidBitsMask + 1; @@ -227,15 +248,17 @@ PrintAllMtrrs ( MtrrLibApplyFixedMtrrs (&Mtrrs->Fixed, Ranges, ARRAY_SIZE (Ranges), &RangeCount); - for (Index = 0; Index < RangeCount; Index++) { - AsciiSPrint ( - &DebugMessage[0], - ARRAY_SIZE (DebugMessage), - " %a:%016lx-%016lx\n", - mMtrrMemoryCacheTypeShortName[Ranges[Index].Type], - Ranges[Index].BaseAddress, Ranges[Index].BaseAddress + Ranges[Index].Length - 1 - ); - OsServiceDebugPrint (&DebugMessage[0]); + if (OsServiceDebugPrint != NULL) { + for (Index = 0; Index < RangeCount; Index++) { + AsciiSPrint ( + &DebugMessage[0], + ARRAY_SIZE (DebugMessage), + " %a:%016lx-%016lx\n", + mMtrrMemoryCacheTypeShortName[Ranges[Index].Type], + Ranges[Index].BaseAddress, Ranges[Index].BaseAddress + Ranges[Index].Length - 1 + ); + OsServiceDebugPrint (&DebugMessage[0]); + } } } @@ -277,12 +300,17 @@ HpetRead ( } /** - Prints HPET configuration information. + Accesses HPET configuration information. + + If the optional OsServiceDebugPrint function pointer is provided that function is + used to print HPET settings. + + @param[in] OsServiceDebugPrint A pointer to an OS-provided debug print function **/ VOID EFIAPI -PrintHpetConfiguration ( +AccessHpetConfiguration ( IN PRM_OS_SERVICE_DEBUG_PRINT OsServiceDebugPrint ) { @@ -291,91 +319,108 @@ PrintHpetConfiguration ( HPET_GENERAL_CONFIGURATION_REGISTER HpetGeneralConfiguration; CHAR8 DebugMessage[256]; - if (OsServiceDebugPrint == NULL) { - return; - } - HpetGeneralCapabilities.Uint64 = HpetRead (HPET_GENERAL_CAPABILITIES_ID_OFFSET); HpetGeneralConfiguration.Uint64 = HpetRead (HPET_GENERAL_CONFIGURATION_OFFSET); - AsciiSPrint ( - &DebugMessage[0], - ARRAY_SIZE (DebugMessage), - " HPET Base Address = 0x%08x\n", - HPET_BASE_ADDRESS - ); - OsServiceDebugPrint (&DebugMessage[0]); - - AsciiSPrint ( - &DebugMessage[0], - ARRAY_SIZE (DebugMessage), - " HPET_GENERAL_CAPABILITIES_ID = 0x%016lx\n", - HpetGeneralCapabilities - ); - OsServiceDebugPrint (&DebugMessage[0]); - - AsciiSPrint ( - &DebugMessage[0], - ARRAY_SIZE (DebugMessage), - " HPET_GENERAL_CONFIGURATION = 0x%016lx\n", - HpetGeneralConfiguration.Uint64 - ); - OsServiceDebugPrint (&DebugMessage[0]); - - AsciiSPrint ( - &DebugMessage[0], - ARRAY_SIZE (DebugMessage), - " HPET_GENERAL_INTERRUPT_STATUS = 0x%016lx\n", - HpetRead (HPET_GENERAL_INTERRUPT_STATUS_OFFSET) - ); - OsServiceDebugPrint (&DebugMessage[0]); + if (OsServiceDebugPrint != NULL) { + AsciiSPrint ( + &DebugMessage[0], + ARRAY_SIZE (DebugMessage), + " HPET Base Address = 0x%08x\n", + HPET_BASE_ADDRESS + ); + OsServiceDebugPrint (&DebugMessage[0]); - AsciiSPrint ( - &DebugMessage[0], - ARRAY_SIZE (DebugMessage), - " HPET_MAIN_COUNTER = 0x%016lx\n", - HpetRead (HPET_MAIN_COUNTER_OFFSET) - ); - OsServiceDebugPrint (&DebugMessage[0]); + AsciiSPrint ( + &DebugMessage[0], + ARRAY_SIZE (DebugMessage), + " HPET_GENERAL_CAPABILITIES_ID = 0x%016lx\n", + HpetGeneralCapabilities + ); + OsServiceDebugPrint (&DebugMessage[0]); - AsciiSPrint ( - &DebugMessage[0], - ARRAY_SIZE (DebugMessage), - " HPET Main Counter Period = %d (fs)\n", - HpetGeneralCapabilities.Bits.CounterClockPeriod - ); - OsServiceDebugPrint (&DebugMessage[0]); + AsciiSPrint ( + &DebugMessage[0], + ARRAY_SIZE (DebugMessage), + " HPET_GENERAL_CONFIGURATION = 0x%016lx\n", + HpetGeneralConfiguration.Uint64 + ); + OsServiceDebugPrint (&DebugMessage[0]); - for (TimerIndex = 0; TimerIndex <= HpetGeneralCapabilities.Bits.NumberOfTimers; TimerIndex++) { AsciiSPrint ( &DebugMessage[0], ARRAY_SIZE (DebugMessage), - " HPET_TIMER%d_CONFIGURATION = 0x%016lx\n", - TimerIndex, - HpetRead (HPET_TIMER_CONFIGURATION_OFFSET + TimerIndex * HPET_TIMER_STRIDE) + " HPET_GENERAL_INTERRUPT_STATUS = 0x%016lx\n", + HpetRead (HPET_GENERAL_INTERRUPT_STATUS_OFFSET) ); OsServiceDebugPrint (&DebugMessage[0]); AsciiSPrint ( &DebugMessage[0], ARRAY_SIZE (DebugMessage), - " HPET_TIMER%d_COMPARATOR = 0x%016lx\n", - TimerIndex, - HpetRead (HPET_TIMER_COMPARATOR_OFFSET + TimerIndex * HPET_TIMER_STRIDE) + " HPET_MAIN_COUNTER = 0x%016lx\n", + HpetRead (HPET_MAIN_COUNTER_OFFSET) ); OsServiceDebugPrint (&DebugMessage[0]); AsciiSPrint ( &DebugMessage[0], ARRAY_SIZE (DebugMessage), - " HPET_TIMER%d_MSI_ROUTE = 0x%016lx\n", - TimerIndex, - HpetRead (HPET_TIMER_MSI_ROUTE_OFFSET + TimerIndex * HPET_TIMER_STRIDE) + " HPET Main Counter Period = %d (fs)\n", + HpetGeneralCapabilities.Bits.CounterClockPeriod ); OsServiceDebugPrint (&DebugMessage[0]); + + for (TimerIndex = 0; TimerIndex <= HpetGeneralCapabilities.Bits.NumberOfTimers; TimerIndex++) { + AsciiSPrint ( + &DebugMessage[0], + ARRAY_SIZE (DebugMessage), + " HPET_TIMER%d_CONFIGURATION = 0x%016lx\n", + TimerIndex, + HpetRead (HPET_TIMER_CONFIGURATION_OFFSET + TimerIndex * HPET_TIMER_STRIDE) + ); + OsServiceDebugPrint (&DebugMessage[0]); + + AsciiSPrint ( + &DebugMessage[0], + ARRAY_SIZE (DebugMessage), + " HPET_TIMER%d_COMPARATOR = 0x%016lx\n", + TimerIndex, + HpetRead (HPET_TIMER_COMPARATOR_OFFSET + TimerIndex * HPET_TIMER_STRIDE) + ); + OsServiceDebugPrint (&DebugMessage[0]); + + AsciiSPrint ( + &DebugMessage[0], + ARRAY_SIZE (DebugMessage), + " HPET_TIMER%d_MSI_ROUTE = 0x%016lx\n", + TimerIndex, + HpetRead (HPET_TIMER_MSI_ROUTE_OFFSET + TimerIndex * HPET_TIMER_STRIDE) + ); + OsServiceDebugPrint (&DebugMessage[0]); + } } } +/** + Reads the microcode signature from architectural MSR 0x8B. + + @retval MicrocodeSignature The microcode signature value. +**/ +UINT32 +GetMicrocodeSignature ( + VOID + ) +{ + MSR_IA32_BIOS_SIGN_ID_REGISTER BiosSignIdMsr; + + AsmWriteMsr64 (MSR_IA32_BIOS_SIGN_ID, 0); + AsmCpuid (CPUID_VERSION_INFO, NULL, NULL, NULL, NULL); + BiosSignIdMsr.Uint64 = AsmReadMsr64 (MSR_IA32_BIOS_SIGN_ID); + + return BiosSignIdMsr.Bits.MicrocodeUpdateSignature; +} + /** Prints the microcode update signature as read from architectural MSR 0x8B. @@ -386,22 +431,20 @@ PrintMicrocodeUpdateSignature ( IN PRM_OS_SERVICE_DEBUG_PRINT OsServiceDebugPrint ) { - MSR_IA32_BIOS_SIGN_ID_REGISTER BiosSignIdMsr; + UINT32 MicrocodeSignature; CHAR8 DebugMessage[256]; if (OsServiceDebugPrint == NULL) { return; } - AsmWriteMsr64 (MSR_IA32_BIOS_SIGN_ID, 0); - AsmCpuid (CPUID_VERSION_INFO, NULL, NULL, NULL, NULL); - BiosSignIdMsr.Uint64 = AsmReadMsr64 (MSR_IA32_BIOS_SIGN_ID); + MicrocodeSignature = GetMicrocodeSignature (); AsciiSPrint ( &DebugMessage[0], ARRAY_SIZE (DebugMessage), " Signature read = 0x%x.\n", - BiosSignIdMsr.Bits.MicrocodeUpdateSignature + MicrocodeSignature ); OsServiceDebugPrint (&DebugMessage[0]); } @@ -409,7 +452,7 @@ PrintMicrocodeUpdateSignature ( /** A sample Platform Runtime Mechanism (PRM) handler. - This sample handler attempts to read the microcode update signature MSR and print the result to a debug message. + This sample handler attempts to read the microcode update signature. @param[in] ParameterBuffer A pointer to the PRM handler parameter buffer @param[in] ContextBUffer A pointer to the PRM handler context buffer @@ -419,6 +462,32 @@ PrintMicrocodeUpdateSignature ( **/ PRM_HANDLER_EXPORT (MsrAccessMicrocodeSignaturePrmHandler) +{ + UINT32 MicrocodeSignature; + + MicrocodeSignature = 0; + MicrocodeSignature = GetMicrocodeSignature (); + + if (MicrocodeSignature == 0) { + return EFI_NOT_FOUND; + } + + return EFI_SUCCESS; +} + +/** + A sample Platform Runtime Mechanism (PRM) handler. + + This sample handler attempts to read the microcode update signature MSR and print the result to a debug message. + + @param[in] ParameterBuffer A pointer to the PRM handler parameter buffer + @param[in] ContextBUffer A pointer to the PRM handler context buffer + + @retval EFI_STATUS The PRM handler executed successfully. + @retval Others An error occurred in the PRM handler. + +**/ +PRM_HANDLER_EXPORT (MsrPrintMicrocodeSignaturePrmHandler) { PRM_OS_SERVICE_DEBUG_PRINT OsServiceDebugPrint; @@ -426,7 +495,7 @@ PRM_HANDLER_EXPORT (MsrAccessMicrocodeSignaturePrmHandler) return EFI_INVALID_PARAMETER; } - // In the POC, the OS debug print service is assumed to be at the beginning of ParameterBuffer + // The OS debug print service is assumed to be at the beginning of ParameterBuffer OsServiceDebugPrint = *((PRM_OS_SERVICE_DEBUG_PRINT *) ParameterBuffer); if (OsServiceDebugPrint == NULL) { return EFI_INVALID_PARAMETER; @@ -443,7 +512,7 @@ PRM_HANDLER_EXPORT (MsrAccessMicrocodeSignaturePrmHandler) /** A sample Platform Runtime Mechanism (PRM) handler. - This sample handler attempts to read the current MTRR settings and print the result to a debug message. + This sample handler attempts to read the current MTRR settings. @param[in] ParameterBuffer A pointer to the PRM handler parameter buffer @param[in] ContextBUffer A pointer to the PRM handler context buffer @@ -453,6 +522,25 @@ PRM_HANDLER_EXPORT (MsrAccessMicrocodeSignaturePrmHandler) **/ PRM_HANDLER_EXPORT (MsrAccessMtrrDumpPrmHandler) +{ + AccessAllMtrrs (NULL); + + return EFI_SUCCESS; +} + +/** + A sample Platform Runtime Mechanism (PRM) handler. + + This sample handler attempts to read the current MTRR settings and print the result to a debug message. + + @param[in] ParameterBuffer A pointer to the PRM handler parameter buffer + @param[in] ContextBUffer A pointer to the PRM handler context buffer + + @retval EFI_STATUS The PRM handler executed successfully. + @retval Others An error occurred in the PRM handler. + +**/ +PRM_HANDLER_EXPORT (MsrPrintMtrrDumpPrmHandler) { PRM_OS_SERVICE_DEBUG_PRINT OsServiceDebugPrint; @@ -468,16 +556,17 @@ PRM_HANDLER_EXPORT (MsrAccessMtrrDumpPrmHandler) OsServiceDebugPrint ("Hardware Access MsrAccessMtrrDumpPrmHandler entry.\n"); OsServiceDebugPrint (" Attempting to dump MTRR values:\n"); - PrintAllMtrrs (OsServiceDebugPrint); + AccessAllMtrrs (OsServiceDebugPrint); OsServiceDebugPrint ("Hardware Access MsrAccessMtrrDumpPrmHandler exit.\n"); return EFI_SUCCESS; } + /** A sample Platform Runtime Mechanism (PRM) handler. - This sample handler attempts to read from a HPET MMIO resource and print the result to a debug message. + This sample handler attempts to read from a HPET MMIO resource. @param[in] ParameterBuffer A pointer to the PRM handler parameter buffer @param[in] ContextBUffer A pointer to the PRM handler context buffer @@ -487,6 +576,25 @@ PRM_HANDLER_EXPORT (MsrAccessMtrrDumpPrmHandler) **/ PRM_HANDLER_EXPORT (MmioAccessHpetPrmHandler) +{ + AccessHpetConfiguration (NULL); + + return EFI_SUCCESS; +} + +/** + A sample Platform Runtime Mechanism (PRM) handler. + + This sample handler attempts to read from a HPET MMIO resource and print the result to a debug message. + + @param[in] ParameterBuffer A pointer to the PRM handler parameter buffer + @param[in] ContextBUffer A pointer to the PRM handler context buffer + + @retval EFI_STATUS The PRM handler executed successfully. + @retval Others An error occurred in the PRM handler. + +**/ +PRM_HANDLER_EXPORT (MmioPrintHpetPrmHandler) { PRM_OS_SERVICE_DEBUG_PRINT OsServiceDebugPrint; @@ -494,16 +602,16 @@ PRM_HANDLER_EXPORT (MmioAccessHpetPrmHandler) return EFI_INVALID_PARAMETER; } - // In the POC, the OS debug print service is assumed to be at the beginning of ParameterBuffer + // An OS debug print service is assumed to be at the beginning of ParameterBuffer OsServiceDebugPrint = *((PRM_OS_SERVICE_DEBUG_PRINT *) ParameterBuffer); if (OsServiceDebugPrint == NULL) { return EFI_INVALID_PARAMETER; } - OsServiceDebugPrint ("Hardware Access MmioAccessHpetPrmHandler entry.\n"); + OsServiceDebugPrint ("Hardware Access MmioPrintHpetPrmHandler entry.\n"); OsServiceDebugPrint (" Attempting to read HPET configuration...\n"); - PrintHpetConfiguration (OsServiceDebugPrint); - OsServiceDebugPrint ("Hardware Access MmioAccessHpetPrmHandler exit.\n"); + AccessHpetConfiguration (OsServiceDebugPrint); + OsServiceDebugPrint ("Hardware Access MmioPrintHpetPrmHandler exit.\n"); return EFI_SUCCESS; } @@ -514,7 +622,10 @@ PRM_HANDLER_EXPORT (MmioAccessHpetPrmHandler) PRM_MODULE_EXPORT ( PRM_HANDLER_EXPORT_ENTRY (MSR_ACCESS_MICROCODE_SIGNATURE_PRM_HANDLER_GUID, MsrAccessMicrocodeSignaturePrmHandler), PRM_HANDLER_EXPORT_ENTRY (MSR_ACCESS_MTRR_DUMP_PRM_HANDLER_GUID, MsrAccessMtrrDumpPrmHandler), - PRM_HANDLER_EXPORT_ENTRY (MMIO_ACCESS_HPET_PRM_HANDLER_GUID, MmioAccessHpetPrmHandler) + PRM_HANDLER_EXPORT_ENTRY (MMIO_ACCESS_HPET_PRM_HANDLER_GUID, MmioAccessHpetPrmHandler), + PRM_HANDLER_EXPORT_ENTRY (MSR_PRINT_MICROCODE_SIGNATURE_PRM_HANDLER_GUID, MsrPrintMicrocodeSignaturePrmHandler), + PRM_HANDLER_EXPORT_ENTRY (MSR_PRINT_MTRR_DUMP_PRM_HANDLER_GUID, MsrPrintMtrrDumpPrmHandler), + PRM_HANDLER_EXPORT_ENTRY (MMIO_PRINT_HPET_PRM_HANDLER_GUID, MmioPrintHpetPrmHandler) ); /** -- cgit v1.2.3