]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Use Memory Allocation Library instance for modules of type DXE_SMM_DRIVER
authormdkinney <mdkinney@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 16 Feb 2010 04:07:39 +0000 (04:07 +0000)
committermdkinney <mdkinney@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 16 Feb 2010 04:07:39 +0000 (04:07 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10015 6f19259b-4bc3-4df7-8a09-765794883524

EdkCompatibilityPkg/Compatibility/SmmBaseHelper/SmmBaseHelper.c
EdkCompatibilityPkg/Compatibility/SmmBaseHelper/SmmBaseHelper.inf

index 347e83d01f61b5d47aac6bf5e562e814677e0fcb..a8f5d13b60885a14bc2772d97923852e8824c716 100644 (file)
@@ -24,6 +24,7 @@
 #include <Library/PeCoffLib.h>\r
 #include <Library/DevicePathLib.h>\r
 #include <Library/CacheMaintenanceLib.h>\r
+#include <Library/MemoryAllocationLib.h>\r
 #include <Guid/SmmBaseThunkCommunication.h>\r
 #include <Protocol/SmmBaseHelperReady.h>\r
 #include <Protocol/SmmCpu.h>\r
@@ -134,15 +135,10 @@ ConstructFrameworkSmst (
   VOID\r
   )\r
 {\r
-  EFI_STATUS            Status;\r
   EFI_SMM_SYSTEM_TABLE  *FrameworkSmst;\r
 \r
-  Status = gSmst->SmmAllocatePool (\r
-                    EfiRuntimeServicesData,\r
-                    sizeof (EFI_SMM_SYSTEM_TABLE),\r
-                    (VOID **)&FrameworkSmst\r
-                    );\r
-  ASSERT_EFI_ERROR (Status);\r
+  FrameworkSmst = (EFI_SMM_SYSTEM_TABLE  *)AllocatePool (sizeof (EFI_SMM_SYSTEM_TABLE));\r
+  ASSERT (FrameworkSmst != NULL);\r
 \r
   ///\r
   /// Copy same things from PI SMST to Framework SMST\r
@@ -160,13 +156,8 @@ ConstructFrameworkSmst (
   FrameworkSmst->Hdr.Revision = EFI_SMM_SYSTEM_TABLE_REVISION;\r
   CopyGuid (&FrameworkSmst->EfiSmmCpuIoGuid, &mEfiSmmCpuIoGuid);\r
 \r
-  Status = gSmst->SmmAllocatePool (\r
-                    EfiRuntimeServicesData,\r
-                    gSmst->NumberOfCpus * sizeof (EFI_SMM_CPU_SAVE_STATE),\r
-                    (VOID **)&FrameworkSmst->CpuSaveState\r
-                    );\r
-  ASSERT_EFI_ERROR (Status);\r
-  ZeroMem (FrameworkSmst->CpuSaveState, gSmst->NumberOfCpus * sizeof (EFI_SMM_CPU_SAVE_STATE));\r
+  FrameworkSmst->CpuSaveState = (EFI_SMM_CPU_SAVE_STATE *)AllocateZeroPool (gSmst->NumberOfCpus * sizeof (EFI_SMM_CPU_SAVE_STATE));\r
+  ASSERT (FrameworkSmst->CpuSaveState != NULL);\r
 \r
   ///\r
   /// Do not support floating point state now\r
@@ -335,8 +326,8 @@ LoadImage (
   }\r
 \r
 Error:\r
-  gSmst->SmmFreePages (Buffer, PageCount);\r
-  return Status;\r
+  FreePages ((VOID *)(UINTN)Buffer, PageCount);\r
+  return EFI_SUCCESS;\r
 }\r
 \r
 /** \r
@@ -534,10 +525,9 @@ CallbackThunk (
 **/\r
 VOID\r
 RegisterCallback (\r
-  IN OUT SMMBASE_FUNCTION_DATA *FunctionData\r
+  IN OUT SMMBASE_FUNCTION_DATA  *FunctionData\r
   )\r
 {\r
-  EFI_STATUS     Status;\r
   CALLBACK_INFO  *Buffer;\r
 \r
   ///\r
@@ -547,36 +537,35 @@ RegisterCallback (
   ///\r
   /// Allocate buffer for callback thunk information\r
   ///\r
-  Status = gSmst->SmmAllocatePool (\r
-                    EfiRuntimeServicesCode,\r
-                    sizeof (CALLBACK_INFO),\r
-                    (VOID **)&Buffer\r
-                    );\r
-  if (!EFI_ERROR (Status)) {\r
-    ///\r
-    /// Fill SmmImageHandle and CallbackAddress into the thunk\r
-    ///\r
-    Buffer->SmmImageHandle = FunctionData->Args.RegisterCallback.SmmImageHandle;\r
-    Buffer->CallbackAddress = FunctionData->Args.RegisterCallback.CallbackAddress;\r
-\r
-    ///\r
-    /// Register the thunk code as a root SMI handler\r
-    ///\r
-    Status = gSmst->SmiHandlerRegister (\r
-                      CallbackThunk,\r
-                      NULL,\r
-                      &Buffer->DispatchHandle\r
-                      );\r
-    if (!EFI_ERROR (Status)) {\r
-      ///\r
-      /// Save this callback info\r
-      ///\r
-      InsertTailList (&mCallbackInfoListHead, &Buffer->Link);\r
-    } else {\r
-      gSmst->SmmFreePool (Buffer);\r
-    }\r
+  Buffer = (CALLBACK_INFO *)AllocatePool (sizeof (CALLBACK_INFO));\r
+  if (Buffer == NULL) {\r
+    FunctionData->Status = EFI_OUT_OF_RESOURCES;\r
+    return;\r
   }\r
-  FunctionData->Status = Status;\r
+\r
+  ///\r
+  /// Fill SmmImageHandle and CallbackAddress into the thunk\r
+  ///\r
+  Buffer->SmmImageHandle = FunctionData->Args.RegisterCallback.SmmImageHandle;\r
+  Buffer->CallbackAddress = FunctionData->Args.RegisterCallback.CallbackAddress;\r
+\r
+  ///\r
+  /// Register the thunk code as a root SMI handler\r
+  ///\r
+  FunctionData->Status = gSmst->SmiHandlerRegister (\r
+                                  CallbackThunk,\r
+                                  NULL,\r
+                                  &Buffer->DispatchHandle\r
+                                  );\r
+  if (EFI_ERROR (FunctionData->Status)) {\r
+    FreePool (Buffer);\r
+    return;\r
+  }\r
+\r
+  ///\r
+  /// Save this callback info\r
+  ///\r
+  InsertTailList (&mCallbackInfoListHead, &Buffer->Link);\r
 }\r
 \r
 \r
@@ -607,9 +596,8 @@ HelperFreePool (
   IN OUT SMMBASE_FUNCTION_DATA *FunctionData\r
   )\r
 {\r
-  FunctionData->Status = gSmst->SmmFreePool (\r
-                                  FunctionData->Args.FreePool.Buffer\r
-                                  );\r
+  FreePool (FunctionData->Args.FreePool.Buffer);\r
+  FunctionData->Status = EFI_SUCCESS;\r
 }\r
 \r
 /**\r
index cd425adfa05466611ef0c325ec7eda46caaaa41a..89ac7fb50c5d3b6346f98e5aa859ca313361d2ec 100644 (file)
@@ -44,6 +44,7 @@
   PeCoffLib\r
   DevicePathLib\r
   CacheMaintenanceLib\r
+  MemoryAllocationLib\r
 \r
 [Guids]\r
   gEfiSmmBaseThunkCommunicationGuid\r