Move SAL "initialization/virtual address change notification" from EdkUefiRuntimeLib...
authoryshang1 <yshang1@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 24 Nov 2006 06:02:46 +0000 (06:02 +0000)
committeryshang1 <yshang1@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 24 Nov 2006 06:02:46 +0000 (06:02 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2009 6f19259b-4bc3-4df7-8a09-765794883524

EdkModulePkg/Library/EdkDxeSalLib/EdkDxeSalLib.msa
EdkModulePkg/Library/EdkDxeSalLib/Ipf/EsalServiceLib.c
EdkModulePkg/Library/EdkUefiRuntimeLib/Ipf/RuntimeLib.c
EdkModulePkg/Library/EdkUefiRuntimeLib/Ipf/RuntimeService.c

index a2e51f09617c35dcd3e2c5d88dd787da68019f2a..42a846d7c203f0c1ac05d3f62a2ebc113a93907e 100644 (file)
     <LibraryClass Usage="ALWAYS_PRODUCED">\r
       <Keyword>EdkDxeSalLib</Keyword>\r
     </LibraryClass>\r
+    <LibraryClass Usage="ALWAYS_CONSUMED">\r
+      <Keyword>BaseLib</Keyword>\r
+    </LibraryClass>\r
     <LibraryClass Usage="ALWAYS_CONSUMED">\r
       <Keyword>DebugLib</Keyword>\r
     </LibraryClass>\r
     <LibraryClass Usage="ALWAYS_CONSUMED">\r
       <Keyword>UefiBootServicesTableLib</Keyword>\r
     </LibraryClass>\r
+    <LibraryClass Usage="ALWAYS_CONSUMED">\r
+      <Keyword>UefiRuntimeLib</Keyword>\r
+    </LibraryClass>\r
   </LibraryClassDefinitions>\r
   <SourceFiles>\r
     <Filename SupArchList="IPF">Ipf/EsalServiceLib.c</Filename>\r
@@ -51,5 +57,8 @@
     <Extern>\r
       <Constructor>DxeSalLibConstruct</Constructor>\r
     </Extern>\r
+    <Extern>\r
+      <SetVirtualAddressMapCallBack>DxeSalVirtualNotifyEvent</SetVirtualAddressMapCallBack>\r
+    </Extern>\r
   </Externs>\r
 </ModuleSurfaceArea>
\ No newline at end of file
index 83b6aa2c4cfb106e4659c386471069abafd1c603..2e0daeb89e1260c711bca6515f9f6e0bdebb60d5 100644 (file)
@@ -21,6 +21,7 @@ Abstract:
 \r
 \r
 STATIC EXTENDED_SAL_BOOT_SERVICE_PROTOCOL *mEsalBootService;\r
+STATIC EFI_PLABEL                         mPlabel;\r
 \r
 EFI_STATUS\r
 EFIAPI\r
@@ -29,14 +30,59 @@ DxeSalLibConstruct (
   IN EFI_SYSTEM_TABLE  *SystemTable\r
   )\r
 {\r
-  EFI_STATUS Status;\r
-\r
-  Status = gBS->LocateProtocol (&gEfiExtendedSalBootServiceProtocolGuid, NULL, &mEsalBootService);\r
+  EFI_PLABEL  *Plabel;\r
+  EFI_STATUS  Status;\r
+\r
+  //\r
+  // The protocol contains a function pointer, which is an indirect procedure call.\r
+  // An indirect procedure call goes through a plabel, and pointer to a function is\r
+  // a pointer to a plabel. To implement indirect procedure calls that can work in\r
+  // both physical and virtual mode, two plabels are required (one physical and one\r
+  // virtual). So lets grap the physical PLABEL for the EsalEntryPoint and store it\r
+  // away. We cache it in a module global, so we can register the vitrual version.\r
+  //\r
+  Status              = gBS->LocateProtocol (&gEfiExtendedSalBootServiceProtocolGuid, NULL, &mEsalBootService);\r
   ASSERT_EFI_ERROR (Status);\r
 \r
+  Plabel              = (EFI_PLABEL *) (UINTN) mEsalBootService->ExtendedSalProc;\r
+\r
+  mPlabel.EntryPoint  = Plabel->EntryPoint;\r
+  mPlabel.GP          = Plabel->GP;\r
+  SetEsalPhysicalEntryPoint (mPlabel.EntryPoint, mPlabel.GP);\r
+\r
   return Status;\r
 }\r
 \r
+VOID\r
+EFIAPI\r
+DxeSalVirtualNotifyEvent (\r
+  IN EFI_EVENT        Event,\r
+  IN VOID             *Context\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  Fixup virtual address pointer of label.\r
+\r
+Arguments:\r
+\r
+  Event   - The Event that is being processed\r
+  \r
+  Context - Event Context\r
+\r
+Returns: \r
+\r
+  None\r
+\r
+--*/\r
+{\r
+  EfiConvertPointer (0x0, (VOID **) &mPlabel.EntryPoint);\r
+  EfiConvertPointer (EFI_IPF_GP_POINTER, (VOID **) &mPlabel.GP);\r
+\r
+  SetEsalVirtualEntryPoint (mPlabel.EntryPoint, mPlabel.GP);\r
+}\r
+\r
 EFI_STATUS\r
 EFIAPI\r
 RegisterEsalFunction (\r
index 6399f67213223c2019b29696d99d95c0e4ee6b30..3e9554721a84026943f09f2c33085f8ca2b8a412 100644 (file)
@@ -24,8 +24,6 @@ Module Name:
 \r
 STATIC EFI_EVENT                          mRuntimeNotifyEvent;\r
 STATIC EFI_EVENT                          mEfiVirtualNotifyEvent;\r
-STATIC EFI_PLABEL                         mPlabel;\r
-STATIC EXTENDED_SAL_BOOT_SERVICE_PROTOCOL *mEsalBootService;\r
 \r
 EFI_RUNTIME_SERVICES                      *mRT;\r
 \r
@@ -103,10 +101,10 @@ Returns:
     ChildNotifyEventHandler (Event, NULL);\r
   }\r
 \r
-  mRT->ConvertPointer (0x0, (VOID **) &mPlabel.EntryPoint);\r
-  mRT->ConvertPointer (EFI_IPF_GP_POINTER, (VOID **) &mPlabel.GP);\r
-\r
-  SetEsalVirtualEntryPoint (mPlabel.EntryPoint, mPlabel.GP);\r
+  //\r
+  // Update global for Runtime Services Table\r
+  //\r
+  EfiConvertPointer (0, (VOID **) &mRT);\r
 }\r
 \r
 EFI_STATUS\r
@@ -135,29 +133,10 @@ Returns:
 \r
 --*/\r
 {\r
-  EFI_PLABEL  *Plabel;\r
   EFI_STATUS  Status;\r
 \r
   mRT = SystemTable->RuntimeServices;\r
 \r
-  //\r
-  // The protocol contains a function pointer, which is an indirect procedure call.\r
-  // An indirect procedure call goes through a plabel, and pointer to a function is\r
-  // a pointer to a plabel. To implement indirect procedure calls that can work in\r
-  // both physical and virtual mode, two plabels are required (one physical and one\r
-  // virtual). So lets grap the physical PLABEL for the EsalEntryPoint and store it\r
-  // away. We cache it in a module global, so we can register the vitrual version.\r
-  //\r
-  Status = gBS->LocateProtocol (&gEfiExtendedSalBootServiceProtocolGuid, NULL, &mEsalBootService);\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-  Plabel              = (EFI_PLABEL *) (UINTN) mEsalBootService->ExtendedSalProc;\r
-\r
-  mPlabel.EntryPoint  = Plabel->EntryPoint;\r
-  mPlabel.GP          = Plabel->GP;\r
-\r
-  SetEsalPhysicalEntryPoint (mPlabel.EntryPoint, mPlabel.GP);\r
-\r
   //\r
   // Register our ExitBootServices () notify function\r
   //\r
index 159a53fc0eb8390c63b8ec5c4b8123b31d3438dd..b4a56a23b31aef19f02a4c6ecb1d2386a80dc78f 100644 (file)
@@ -91,7 +91,7 @@ Returns:
 --*/\r
 {\r
   SAL_RETURN_REGS ReturnReg;\r
-  EFI_GUID Guid = EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID;\r
+  EFI_GUID        Guid = EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID;\r
 \r
   ReturnReg = EfiCallEsalService (&Guid, GetTime, (UINT64) Time, (UINT64) Capabilities, 0, 0, 0, 0, 0);\r
   return ReturnReg.Status;\r
@@ -119,8 +119,7 @@ Returns:
 --*/\r
 {\r
   SAL_RETURN_REGS ReturnReg;\r
-\r
-  EFI_GUID Guid = EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID;\r
+  EFI_GUID        Guid = EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID;\r
 \r
   ReturnReg = EfiCallEsalService (&Guid, SetTime, (UINT64) Time, 0, 0, 0, 0, 0, 0);\r
   return ReturnReg.Status;\r
@@ -152,8 +151,7 @@ Returns:
 --*/\r
 {\r
   SAL_RETURN_REGS ReturnReg;\r
-\r
-  EFI_GUID Guid = EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID;\r
+  EFI_GUID        Guid = EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID;\r
 \r
   ReturnReg = EfiCallEsalService (&Guid, GetWakeupTime, (UINT64) Enabled, (UINT64) Pending, (UINT64) Time, 0, 0, 0, 0);\r
   return ReturnReg.Status;\r
@@ -184,8 +182,7 @@ Returns:
 --*/\r
 {\r
   SAL_RETURN_REGS ReturnReg;\r
-\r
-  EFI_GUID Guid = EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID;\r
+  EFI_GUID        Guid = EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID;\r
 \r
   ReturnReg = EfiCallEsalService (&Guid, SetWakeupTime, (UINT64) Enable, (UINT64) Time, 0, 0, 0, 0, 0);\r
   return ReturnReg.Status;\r
@@ -224,7 +221,7 @@ Returns:
 --*/\r
 {\r
   SAL_RETURN_REGS ReturnReg;\r
-  EFI_GUID Guid = EFI_EXTENDED_SAL_VARIABLE_SERVICES_PROTOCOL_GUID;\r
+  EFI_GUID        Guid = EFI_EXTENDED_SAL_VARIABLE_SERVICES_PROTOCOL_GUID;\r
 \r
   ReturnReg = EfiCallEsalService (\r
                 &Guid,\r
@@ -271,7 +268,7 @@ Returns:
 --*/\r
 {\r
   SAL_RETURN_REGS ReturnReg;\r
-  EFI_GUID Guid = EFI_EXTENDED_SAL_VARIABLE_SERVICES_PROTOCOL_GUID;\r
+  EFI_GUID        Guid = EFI_EXTENDED_SAL_VARIABLE_SERVICES_PROTOCOL_GUID;\r
 \r
   ReturnReg = EfiCallEsalService (\r
                 &Guid,\r
@@ -318,7 +315,7 @@ Returns:
 --*/\r
 {\r
   SAL_RETURN_REGS ReturnReg;\r
-  EFI_GUID Guid = EFI_EXTENDED_SAL_VARIABLE_SERVICES_PROTOCOL_GUID;\r
+  EFI_GUID        Guid = EFI_EXTENDED_SAL_VARIABLE_SERVICES_PROTOCOL_GUID;\r
 \r
   ReturnReg = EfiCallEsalService (\r
                 &Guid,\r
@@ -356,8 +353,7 @@ Returns:
 --*/\r
 {\r
   SAL_RETURN_REGS ReturnReg;\r
-\r
-  EFI_GUID Guid = EFI_EXTENDED_SAL_MTC_SERVICES_PROTOCOL_GUID;\r
+  EFI_GUID        Guid = EFI_EXTENDED_SAL_MTC_SERVICES_PROTOCOL_GUID;\r
 \r
   ReturnReg = EfiCallEsalService (&Guid, GetNextHighMonotonicCount, (UINT64) HighCount, 0, 0, 0, 0, 0, 0);\r
   return (EFI_STATUS) ReturnReg.Status;\r
@@ -492,9 +488,9 @@ EfiSetVirtualAddressMap (
 EFI_STATUS\r
 EFIAPI\r
 EfiUpdateCapsule (\r
-  IN UEFI_CAPSULE_HEADER       **CapsuleHeaderArray,\r
-  IN UINTN                                 CapsuleCount,\r
-  IN EFI_PHYSICAL_ADDRESS      ScatterGatherList       OPTIONAL\r
+  IN UEFI_CAPSULE_HEADER  **CapsuleHeaderArray,\r
+  IN UINTN                CapsuleCount,\r
+  IN EFI_PHYSICAL_ADDRESS ScatterGatherList OPTIONAL\r
   )\r
 {\r
   return EFI_UNSUPPORTED;\r
@@ -503,10 +499,10 @@ EfiUpdateCapsule (
 EFI_STATUS\r
 EFIAPI\r
 EfiQueryCapsuleCapabilities (\r
-  IN UEFI_CAPSULE_HEADER       **CapsuleHeaderArray,\r
-  IN UINTN                                 CapsuleCount,\r
-  OUT  UINT64                      *MaximumCapsuleSize,\r
-  OUT EFI_RESET_TYPE           *ResetType\r
+  IN UEFI_CAPSULE_HEADER  **CapsuleHeaderArray,\r
+  IN UINTN                CapsuleCount,\r
+  OUT UINT64              *MaximumCapsuleSize,\r
+  OUT EFI_RESET_TYPE    *ResetType\r
   )\r
 {\r
   return EFI_UNSUPPORTED;\r
@@ -516,10 +512,10 @@ EfiQueryCapsuleCapabilities (
 EFI_STATUS\r
 EFIAPI\r
 EfiQueryVariableInfo (\r
-  IN UINT32                      Attributes,\r
-  OUT UINT64                   *MaximumVariableStorageSize,\r
-  OUT   UINT64                 *RemainingVariableStorageSize,\r
-  OUT UINT64                   *MaximumVariableSize\r
+  IN UINT32       Attributes,\r
+  OUT UINT64      *MaximumVariableStorageSize,\r
+  OUT  UINT64     *RemainingVariableStorageSize,\r
+  OUT UINT64      *MaximumVariableSize\r
   )\r
 {\r
   return EFI_UNSUPPORTED;\r