From 35d297c7acce7d72863c22ddae95eb39827f3cd3 Mon Sep 17 00:00:00 2001 From: qwang12 Date: Wed, 26 Nov 2008 11:28:02 +0000 Subject: PI defines the architectural way to get PeiServicesTablePointer from sizeof (UINTN) bytes before the IDT table base. Add the runtime detection of PI version so that Mm7 Library instance is usable under PI 1.0 system. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@6739 6f19259b-4bc3-4df7-8a09-765794883524 --- .../PeiServicesTablePointer.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib') diff --git a/EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/PeiServicesTablePointerLibMm7/PeiServicesTablePointer.c b/EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/PeiServicesTablePointerLibMm7/PeiServicesTablePointer.c index ca75a9493d..6c6f07c353 100644 --- a/EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/PeiServicesTablePointerLibMm7/PeiServicesTablePointer.c +++ b/EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/PeiServicesTablePointerLibMm7/PeiServicesTablePointer.c @@ -37,19 +37,19 @@ GetPeiServicesTablePointer ( VOID ) { - EFI_PEI_SERVICES **PeiServices; -#if (PI_SPECIFICATION_VERSION >= 0x00010000) IA32_DESCRIPTOR Idtr; -#endif + EFI_PEI_SERVICES **PeiServices; -#if (PI_SPECIFICATION_VERSION < 0x00010000) - PeiServices = (EFI_PEI_SERVICES **)(UINTN)AsmReadMm7 (); -#else AsmReadIdtr (&Idtr); PeiServices = (EFI_PEI_SERVICES **)(UINTN)(*(UINTN*)(Idtr.Base - sizeof (UINTN))); -#endif - ASSERT (PeiServices != NULL); - return PeiServices; + + if ((*PeiServices)->Hdr.Signature == PEI_SERVICES_SIGNATURE) { + return PeiServices; + } else { + PeiServices = (EFI_PEI_SERVICES **)(UINTN)AsmReadMm7 (); + ASSERT (PeiServices != NULL); + return PeiServices; + } } /** -- cgit v1.2.3