summaryrefslogtreecommitdiff
path: root/EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib
diff options
context:
space:
mode:
authorqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>2008-11-26 11:28:02 +0000
committerqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>2008-11-26 11:28:02 +0000
commit35d297c7acce7d72863c22ddae95eb39827f3cd3 (patch)
tree84d5ead6f27a451c9c157a3628be7c3dbf87a3e4 /EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib
parentb6228a086faf4c4a3f68a9d9b83822414fd0b4ce (diff)
downloadedk2-platforms-35d297c7acce7d72863c22ddae95eb39827f3cd3.tar.xz
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
Diffstat (limited to 'EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib')
-rw-r--r--EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/PeiServicesTablePointerLibMm7/PeiServicesTablePointer.c18
1 files changed, 9 insertions, 9 deletions
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;
+ }
}
/**