#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
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
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
}\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
**/\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
///\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
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