/** @file\r
*\r
-* Copyright (c) 2013, ARM Limited. All rights reserved.\r
+* Copyright (c) 2013-2015, ARM Limited. All rights reserved.\r
*\r
* This program and the accompanying materials\r
* are licensed and made available under the terms and conditions of the BSD License\r
OUT UINTN *FileSize\r
);\r
\r
+/**\r
+ * Call BS.ExitBootServices with the appropriate Memory Map information\r
+ */\r
+EFI_STATUS\r
+ShutdownUefiBootServices (\r
+ VOID\r
+ );\r
+\r
#endif\r
**/\r
\r
#include <Guid/GlobalVariable.h>\r
+\r
#include <Library/PrintLib.h>\r
#include <Library/HandleParsingLib.h>\r
#include <Library/DevicePathLib.h>\r
#include <Library/BaseLib.h>\r
#include <Library/BaseMemoryLib.h>\r
+#include <Library/BdsLib.h>\r
#include <Library/MemoryAllocationLib.h>\r
#include <Library/DebugLib.h>\r
\r
UINTN arg2, UINTN arg3);\r
\r
\r
-STATIC\r
-EFI_STATUS\r
-ShutdownUefiBootServices (\r
- VOID\r
- )\r
-{\r
- EFI_STATUS Status;\r
- UINTN MemoryMapSize;\r
- EFI_MEMORY_DESCRIPTOR *MemoryMap;\r
- UINTN MapKey;\r
- UINTN DescriptorSize;\r
- UINT32 DescriptorVersion;\r
- UINTN Pages;\r
-\r
- MemoryMap = NULL;\r
- MemoryMapSize = 0;\r
- Pages = 0;\r
-\r
- do {\r
- Status = gBS->GetMemoryMap (\r
- &MemoryMapSize,\r
- MemoryMap,\r
- &MapKey,\r
- &DescriptorSize,\r
- &DescriptorVersion\r
- );\r
- if (Status == EFI_BUFFER_TOO_SMALL) {\r
-\r
- Pages = EFI_SIZE_TO_PAGES (MemoryMapSize) + 1;\r
- MemoryMap = AllocatePages (Pages);\r
-\r
- //\r
- // Get System MemoryMap\r
- //\r
- Status = gBS->GetMemoryMap (\r
- &MemoryMapSize,\r
- MemoryMap,\r
- &MapKey,\r
- &DescriptorSize,\r
- &DescriptorVersion\r
- );\r
- }\r
-\r
- // Don't do anything between the GetMemoryMap() and ExitBootServices()\r
- if (!EFI_ERROR (Status)) {\r
- Status = gBS->ExitBootServices (gImageHandle, MapKey);\r
- if (EFI_ERROR (Status)) {\r
- FreePages (MemoryMap, Pages);\r
- MemoryMap = NULL;\r
- MemoryMapSize = 0;\r
- }\r
- }\r
- } while (EFI_ERROR (Status));\r
-\r
- return Status;\r
-}\r
-\r
-\r
STATIC\r
EFI_STATUS\r
PreparePlatformHardware (\r