From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by mx.groups.io with SMTP id smtpd.web10.12282.1647966116424665084 for ; Tue, 22 Mar 2022 09:21:56 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="body hash did not verify" header.i=@linux.microsoft.com header.s=default header.b=DCiyX4SX; spf=pass (domain: linux.microsoft.com, ip: 13.77.154.182, mailfrom: mikuback@linux.microsoft.com) Received: from localhost.localdomain (unknown [47.202.59.224]) by linux.microsoft.com (Postfix) with ESMTPSA id 26E8E20B4783; Tue, 22 Mar 2022 09:21:55 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 26E8E20B4783 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1647966116; bh=qoADedXDPT4Vi8GAkKkp2e6UCPXd4C0x9HtoUBiVG+k=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DCiyX4SX7q4A9iv6lysaDnIRelNtzms63+L7GVlJqHac0FzQRSEOkyiAYBD1nubVT HO0d0HzS/pn7YnSdb/Poq1nz0g+dD2r7TeFsGWNShcmxB/DDGnI1O9xDvPDS29Bn/B e38x9r5rW3Q0vxfbCpou4Lb4CH++jvvAN603dlA8= From: "Michael Kubacki" To: devel@edk2.groups.io Cc: Andrew Fish , Kang Gao , Michael D Kinney , Michael Kubacki , Leif Lindholm , Benjamin You , Liu Yun , Ankit Sinha , Nate DeSimone Subject: [PATCH v1 21/41] PrmPkg/PrmSampleHardwareAccessModule: Add non-print PRM handlers Date: Tue, 22 Mar 2022 12:19:27 -0400 Message-Id: <20220322161947.9319-22-mikuback@linux.microsoft.com> X-Mailer: git-send-email 2.28.0.windows.1 In-Reply-To: <20220322161947.9319-1-mikuback@linux.microsoft.com> References: <20220322161947.9319-1-mikuback@linux.microsoft.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Michael Kubacki 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 --- PrmPkg/Samples/PrmSampleHardwareAccessModule/PrmSampleHardwareAccessModu= le.c | 375 +++++++++++++------- 1 file changed, 243 insertions(+), 132 deletions(-) diff --git a/PrmPkg/Samples/PrmSampleHardwareAccessModule/PrmSampleHardwa= reAccessModule.c b/PrmPkg/Samples/PrmSampleHardwareAccessModule/PrmSample= HardwareAccessModule.c index 87fe9cafc912..32e04c5e8592 100644 --- a/PrmPkg/Samples/PrmSampleHardwareAccessModule/PrmSampleHardwareAcces= sModule.c +++ b/PrmPkg/Samples/PrmSampleHardwareAccessModule/PrmSampleHardwareAcces= sModule.c @@ -27,12 +27,21 @@ // {2120cd3c-848b-4d8f-abbb-4b74ce64ac89} #define MSR_ACCESS_MICROCODE_SIGNATURE_PRM_HANDLER_GUID {0x2120cd3c, 0x8= 48b, 0x4d8f, {0xab, 0xbb, 0x4b, 0x74, 0xce, 0x64, 0xac, 0x89}} =20 +// {5d28b4e7-3867-4aee-aa09-51fc282c3b22} +#define MSR_PRINT_MICROCODE_SIGNATURE_PRM_HANDLER_GUID {0x5d28b4e7, 0x38= 67, 0x4aee, {0xaa, 0x09, 0x51, 0xfc, 0x28, 0x2c, 0x3b, 0x22}} + // {ea0935a7-506b-4159-bbbb-48deeecb6f58} #define MSR_ACCESS_MTRR_DUMP_PRM_HANDLER_GUID {0xea0935a7, 0x506b, 0x415= 9, {0xbb, 0xbb, 0x48, 0xde, 0xee, 0xcb, 0x6f, 0x58}} =20 +// {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}} =20 +// {8a0efdde-78d0-45f0-aea0-c28245c7e1db} +#define MMIO_PRINT_HPET_PRM_HANDLER_GUID {0x8a0efdde, 0x78d0, 0x45f0, {0= xae, 0xa0, 0xc2, 0x82, 0x45, 0xc7, 0xe1, 0xdb}} + #define HPET_BASE_ADDRESS 0xFED00000 =20 // @@ -124,13 +133,18 @@ MtrrLibApplyVariableMtrrs ( // =20 /** - 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 pr= int function. =20 **/ 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)= ]; =20 - if (OsServiceDebugPrint =3D=3D NULL || !IsMtrrSupported ()) { + if (!IsMtrrSupported ()) { return; } =20 @@ -160,56 +174,63 @@ PrintAllMtrrs ( // // Dump RAW MTRR contents // - OsServiceDebugPrint (" MTRR Settings:\n"); - OsServiceDebugPrint (" =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D\n"); + if (OsServiceDebugPrint !=3D NULL) { + OsServiceDebugPrint (" MTRR Settings:\n"); + OsServiceDebugPrint (" =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D\n"); =20 - AsciiSPrint ( - &DebugMessage[0], - ARRAY_SIZE (DebugMessage), - " MTRR Default Type: %016lx\n", - Mtrrs->MtrrDefType - ); - OsServiceDebugPrint (&DebugMessage[0]); - - for (Index =3D 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 =3D FALSE; - for (Index =3D 0; Index < VariableMtrrCount; Index++) { - if ((Mtrrs->Variables.Mtrr[Index].Mask & BIT11) =3D=3D 0) { - // - // If mask is not valid, then do not display range - // - continue; + + if (OsServiceDebugPrint !=3D NULL) { + for (Index =3D 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 =3D FALSE; + for (Index =3D 0; Index < VariableMtrrCount; Index++) { + if ((Mtrrs->Variables.Mtrr[Index].Mask & BIT11) =3D=3D 0) { + // + // If mask is not valid, then do not display range + // + continue; + } + ContainVariableMtrr =3D TRUE; + AsciiSPrint ( + &DebugMessage[0], + ARRAY_SIZE (DebugMessage), + " Variable MTRR[%02d]: Base=3D%016lx Mask=3D%016lx\n", + Index, + Mtrrs->Variables.Mtrr[Index].Base, + Mtrrs->Variables.Mtrr[Index].Mask + ); + OsServiceDebugPrint (&DebugMessage[0]); } - ContainVariableMtrr =3D TRUE; - AsciiSPrint ( - &DebugMessage[0], - ARRAY_SIZE (DebugMessage), - " Variable MTRR[%02d]: Base=3D%016lx Mask=3D%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"); =20 // // Dump MTRR setting in ranges // - OsServiceDebugPrint (" Memory Ranges:\n"); - OsServiceDebugPrint (" =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D\n"); + if (OsServiceDebugPrint !=3D NULL) { + OsServiceDebugPrint (" Memory Ranges:\n"); + OsServiceDebugPrint (" =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D\n"); + } MtrrLibInitializeMtrrMask (&MtrrValidBitsMask, &MtrrValidAddressMask); Ranges[0].BaseAddress =3D 0; Ranges[0].Length =3D MtrrValidBitsMask + 1; @@ -227,15 +248,17 @@ PrintAllMtrrs ( =20 MtrrLibApplyFixedMtrrs (&Mtrrs->Fixed, Ranges, ARRAY_SIZE (Ranges), &R= angeCount); =20 - for (Index =3D 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[Inde= x].Length - 1 - ); - OsServiceDebugPrint (&DebugMessage[0]); + if (OsServiceDebugPrint !=3D NULL) { + for (Index =3D 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[In= dex].Length - 1 + ); + OsServiceDebugPrint (&DebugMessage[0]); + } } } =20 @@ -277,12 +300,17 @@ HpetRead ( } =20 /** - 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 pr= int function =20 **/ VOID EFIAPI -PrintHpetConfiguration ( +AccessHpetConfiguration ( IN PRM_OS_SERVICE_DEBUG_PRINT OsServiceDebugPrint ) { @@ -291,117 +319,132 @@ PrintHpetConfiguration ( HPET_GENERAL_CONFIGURATION_REGISTER HpetGeneralConfiguration; CHAR8 DebugMessage[256]; =20 - if (OsServiceDebugPrint =3D=3D NULL) { - return; - } - HpetGeneralCapabilities.Uint64 =3D HpetRead (HPET_GENERAL_CAPABILITIE= S_ID_OFFSET); HpetGeneralConfiguration.Uint64 =3D HpetRead (HPET_GENERAL_CONFIGURATI= ON_OFFSET); =20 - AsciiSPrint ( - &DebugMessage[0], - ARRAY_SIZE (DebugMessage), - " HPET Base Address =3D 0x%08x\n", - HPET_BASE_ADDRESS - ); - OsServiceDebugPrint (&DebugMessage[0]); - - AsciiSPrint ( - &DebugMessage[0], - ARRAY_SIZE (DebugMessage), - " HPET_GENERAL_CAPABILITIES_ID =3D 0x%016lx\n", - HpetGeneralCapabilities - ); - OsServiceDebugPrint (&DebugMessage[0]); - - AsciiSPrint ( - &DebugMessage[0], - ARRAY_SIZE (DebugMessage), - " HPET_GENERAL_CONFIGURATION =3D 0x%016lx\n", - HpetGeneralConfiguration.Uint64 - ); - OsServiceDebugPrint (&DebugMessage[0]); - - AsciiSPrint ( - &DebugMessage[0], - ARRAY_SIZE (DebugMessage), - " HPET_GENERAL_INTERRUPT_STATUS =3D 0x%016lx\n", - HpetRead (HPET_GENERAL_INTERRUPT_STATUS_OFFSET) - ); - OsServiceDebugPrint (&DebugMessage[0]); + if (OsServiceDebugPrint !=3D NULL) { + AsciiSPrint ( + &DebugMessage[0], + ARRAY_SIZE (DebugMessage), + " HPET Base Address =3D 0x%08x\n", + HPET_BASE_ADDRESS + ); + OsServiceDebugPrint (&DebugMessage[0]); =20 - AsciiSPrint ( - &DebugMessage[0], - ARRAY_SIZE (DebugMessage), - " HPET_MAIN_COUNTER =3D 0x%016lx\n", - HpetRead (HPET_MAIN_COUNTER_OFFSET) - ); - OsServiceDebugPrint (&DebugMessage[0]); + AsciiSPrint ( + &DebugMessage[0], + ARRAY_SIZE (DebugMessage), + " HPET_GENERAL_CAPABILITIES_ID =3D 0x%016lx\n", + HpetGeneralCapabilities + ); + OsServiceDebugPrint (&DebugMessage[0]); =20 - AsciiSPrint ( - &DebugMessage[0], - ARRAY_SIZE (DebugMessage), - " HPET Main Counter Period =3D %d (fs)\n", - HpetGeneralCapabilities.Bits.CounterClockPeriod - ); - OsServiceDebugPrint (&DebugMessage[0]); + AsciiSPrint ( + &DebugMessage[0], + ARRAY_SIZE (DebugMessage), + " HPET_GENERAL_CONFIGURATION =3D 0x%016lx\n", + HpetGeneralConfiguration.Uint64 + ); + OsServiceDebugPrint (&DebugMessage[0]); =20 - for (TimerIndex =3D 0; TimerIndex <=3D HpetGeneralCapabilities.Bits.Nu= mberOfTimers; TimerIndex++) { AsciiSPrint ( &DebugMessage[0], ARRAY_SIZE (DebugMessage), - " HPET_TIMER%d_CONFIGURATION =3D 0x%016lx\n", - TimerIndex, - HpetRead (HPET_TIMER_CONFIGURATION_OFFSET + TimerIndex * HPET_TIME= R_STRIDE) + " HPET_GENERAL_INTERRUPT_STATUS =3D 0x%016lx\n", + HpetRead (HPET_GENERAL_INTERRUPT_STATUS_OFFSET) ); OsServiceDebugPrint (&DebugMessage[0]); =20 AsciiSPrint ( &DebugMessage[0], ARRAY_SIZE (DebugMessage), - " HPET_TIMER%d_COMPARATOR =3D 0x%016lx\n", - TimerIndex, - HpetRead (HPET_TIMER_COMPARATOR_OFFSET + TimerIndex * HPET_TIME= R_STRIDE) + " HPET_MAIN_COUNTER =3D 0x%016lx\n", + HpetRead (HPET_MAIN_COUNTER_OFFSET) ); OsServiceDebugPrint (&DebugMessage[0]); =20 AsciiSPrint ( &DebugMessage[0], ARRAY_SIZE (DebugMessage), - " HPET_TIMER%d_MSI_ROUTE =3D 0x%016lx\n", - TimerIndex, - HpetRead (HPET_TIMER_MSI_ROUTE_OFFSET + TimerIndex * HPET_TIME= R_STRIDE) + " HPET Main Counter Period =3D %d (fs)\n", + HpetGeneralCapabilities.Bits.CounterClockPeriod ); OsServiceDebugPrint (&DebugMessage[0]); + + for (TimerIndex =3D 0; TimerIndex <=3D HpetGeneralCapabilities.Bits.= NumberOfTimers; TimerIndex++) { + AsciiSPrint ( + &DebugMessage[0], + ARRAY_SIZE (DebugMessage), + " HPET_TIMER%d_CONFIGURATION =3D 0x%016lx\n", + TimerIndex, + HpetRead (HPET_TIMER_CONFIGURATION_OFFSET + TimerIndex * HPET_TI= MER_STRIDE) + ); + OsServiceDebugPrint (&DebugMessage[0]); + + AsciiSPrint ( + &DebugMessage[0], + ARRAY_SIZE (DebugMessage), + " HPET_TIMER%d_COMPARATOR =3D 0x%016lx\n", + TimerIndex, + HpetRead (HPET_TIMER_COMPARATOR_OFFSET + TimerIndex * HPET_TI= MER_STRIDE) + ); + OsServiceDebugPrint (&DebugMessage[0]); + + AsciiSPrint ( + &DebugMessage[0], + ARRAY_SIZE (DebugMessage), + " HPET_TIMER%d_MSI_ROUTE =3D 0x%016lx\n", + TimerIndex, + HpetRead (HPET_TIMER_MSI_ROUTE_OFFSET + TimerIndex * HPET_TI= MER_STRIDE) + ); + OsServiceDebugPrint (&DebugMessage[0]); + } } } =20 /** - Prints the microcode update signature as read from architectural MSR 0= x8B. + Reads the microcode signature from architectural MSR 0x8B. =20 + @retval MicrocodeSignature The microcode signature value. **/ -VOID -EFIAPI -PrintMicrocodeUpdateSignature ( - IN PRM_OS_SERVICE_DEBUG_PRINT OsServiceDebugPrint +UINT32 +GetMicrocodeSignature ( + VOID ) { MSR_IA32_BIOS_SIGN_ID_REGISTER BiosSignIdMsr; - CHAR8 DebugMessage[256]; - - if (OsServiceDebugPrint =3D=3D NULL) { - return; - } =20 AsmWriteMsr64 (MSR_IA32_BIOS_SIGN_ID, 0); AsmCpuid (CPUID_VERSION_INFO, NULL, NULL, NULL, NULL); BiosSignIdMsr.Uint64 =3D AsmReadMsr64 (MSR_IA32_BIOS_SIGN_ID); =20 + return BiosSignIdMsr.Bits.MicrocodeUpdateSignature; +} + +/** + Prints the microcode update signature as read from architectural MSR 0= x8B. + +**/ +VOID +EFIAPI +PrintMicrocodeUpdateSignature ( + IN PRM_OS_SERVICE_DEBUG_PRINT OsServiceDebugPrint + ) +{ + UINT32 MicrocodeSignature; + CHAR8 DebugMessage[256]; + + if (OsServiceDebugPrint =3D=3D NULL) { + return; + } + + MicrocodeSignature =3D GetMicrocodeSignature (); + AsciiSPrint ( &DebugMessage[0], ARRAY_SIZE (DebugMessage), " Signature read =3D 0x%x.\n", - BiosSignIdMsr.Bits.MicrocodeUpdateSignature + MicrocodeSignature ); OsServiceDebugPrint (&DebugMessage[0]); } @@ -409,7 +452,7 @@ PrintMicrocodeUpdateSignature ( /** A sample Platform Runtime Mechanism (PRM) handler. =20 - This sample handler attempts to read the microcode update signature MS= R and print the result to a debug message. + This sample handler attempts to read the microcode update signature. =20 @param[in] ParameterBuffer A pointer to the PRM handler parameter= buffer @param[in] ContextBUffer A pointer to the PRM handler context b= uffer @@ -419,6 +462,32 @@ PrintMicrocodeUpdateSignature ( =20 **/ PRM_HANDLER_EXPORT (MsrAccessMicrocodeSignaturePrmHandler) +{ + UINT32 MicrocodeSignature; + + MicrocodeSignature =3D 0; + MicrocodeSignature =3D GetMicrocodeSignature (); + + if (MicrocodeSignature =3D=3D 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 MS= R 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 b= uffer + + @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; =20 @@ -426,7 +495,7 @@ PRM_HANDLER_EXPORT (MsrAccessMicrocodeSignaturePrmHan= dler) return EFI_INVALID_PARAMETER; } =20 - // In the POC, the OS debug print service is assumed to be at the begi= nning of ParameterBuffer + // The OS debug print service is assumed to be at the beginning of Par= ameterBuffer OsServiceDebugPrint =3D *((PRM_OS_SERVICE_DEBUG_PRINT *) ParameterBuff= er); if (OsServiceDebugPrint =3D=3D NULL) { return EFI_INVALID_PARAMETER; @@ -443,7 +512,7 @@ PRM_HANDLER_EXPORT (MsrAccessMicrocodeSignaturePrmHan= dler) /** A sample Platform Runtime Mechanism (PRM) handler. =20 - This sample handler attempts to read the current MTRR settings and pri= nt the result to a debug message. + This sample handler attempts to read the current MTRR settings. =20 @param[in] ParameterBuffer A pointer to the PRM handler parameter= buffer @param[in] ContextBUffer A pointer to the PRM handler context b= uffer @@ -453,6 +522,25 @@ PRM_HANDLER_EXPORT (MsrAccessMicrocodeSignaturePrmHa= ndler) =20 **/ 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 pri= nt 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 b= uffer + + @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; =20 @@ -468,16 +556,17 @@ PRM_HANDLER_EXPORT (MsrAccessMtrrDumpPrmHandler) =20 OsServiceDebugPrint ("Hardware Access MsrAccessMtrrDumpPrmHandler entr= y.\n"); OsServiceDebugPrint (" Attempting to dump MTRR values:\n"); - PrintAllMtrrs (OsServiceDebugPrint); + AccessAllMtrrs (OsServiceDebugPrint); OsServiceDebugPrint ("Hardware Access MsrAccessMtrrDumpPrmHandler exit= .\n"); =20 return EFI_SUCCESS; } =20 + /** A sample Platform Runtime Mechanism (PRM) handler. =20 - This sample handler attempts to read from a HPET MMIO resource and pri= nt the result to a debug message. + This sample handler attempts to read from a HPET MMIO resource. =20 @param[in] ParameterBuffer A pointer to the PRM handler parameter= buffer @param[in] ContextBUffer A pointer to the PRM handler context b= uffer @@ -487,6 +576,25 @@ PRM_HANDLER_EXPORT (MsrAccessMtrrDumpPrmHandler) =20 **/ 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 pri= nt 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 b= uffer + + @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; =20 @@ -494,16 +602,16 @@ PRM_HANDLER_EXPORT (MmioAccessHpetPrmHandler) return EFI_INVALID_PARAMETER; } =20 - // In the POC, the OS debug print service is assumed to be at the begi= nning of ParameterBuffer + // An OS debug print service is assumed to be at the beginning of Para= meterBuffer OsServiceDebugPrint =3D *((PRM_OS_SERVICE_DEBUG_PRINT *) ParameterBuff= er); if (OsServiceDebugPrint =3D=3D NULL) { return EFI_INVALID_PARAMETER; } =20 - 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"= ); =20 return EFI_SUCCESS; } @@ -514,7 +622,10 @@ PRM_HANDLER_EXPORT (MmioAccessHpetPrmHandler) PRM_MODULE_EXPORT ( PRM_HANDLER_EXPORT_ENTRY (MSR_ACCESS_MICROCODE_SIGNATURE_PRM_HANDLER_G= UID, MsrAccessMicrocodeSignaturePrmHandler), PRM_HANDLER_EXPORT_ENTRY (MSR_ACCESS_MTRR_DUMP_PRM_HANDLER_GUID, MsrAc= cessMtrrDumpPrmHandler), - PRM_HANDLER_EXPORT_ENTRY (MMIO_ACCESS_HPET_PRM_HANDLER_GUID, MmioAcces= sHpetPrmHandler) + PRM_HANDLER_EXPORT_ENTRY (MMIO_ACCESS_HPET_PRM_HANDLER_GUID, MmioAcces= sHpetPrmHandler), + PRM_HANDLER_EXPORT_ENTRY (MSR_PRINT_MICROCODE_SIGNATURE_PRM_HANDLER_GU= ID, MsrPrintMicrocodeSignaturePrmHandler), + PRM_HANDLER_EXPORT_ENTRY (MSR_PRINT_MTRR_DUMP_PRM_HANDLER_GUID, MsrPri= ntMtrrDumpPrmHandler), + PRM_HANDLER_EXPORT_ENTRY (MMIO_PRINT_HPET_PRM_HANDLER_GUID, MmioPrintH= petPrmHandler) ); =20 /** --=20 2.28.0.windows.1