--- /dev/null
+/** @file\r
+ HII Library implementation that uses DXE protocols and services.\r
+\r
+ Copyright (c) 2006, Intel Corporation<BR>\r
+ All rights reserved. This program and the accompanying materials\r
+ are licensed and made available under the terms and conditions of the BSD License\r
+ which accompanies this distribution. The full text of the license may be found at\r
+ http://opensource.org/licenses/bsd-license.php\r
+\r
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+ Module Name: HiiLib.c\r
+\r
+**/\r
+\r
+//\r
+// The package level header files this module uses\r
+//\r
+#include <FrameworkDxe.h>\r
+//\r
+// The protocols, PPI and GUID defintions for this module\r
+//\r
+//\r
+// The Library classes this module consumes\r
+//\r
+#include <Library/HiiLibFramework.h>\r
+#include <Library/DebugLib.h>\r
+#include <Library/MemoryAllocationLib.h>\r
+\r
+/**\r
+ This function allocates pool for an EFI_HII_PACKAGES structure\r
+ with enough space for the variable argument list of package pointers.\r
+ The allocated structure is initialized using NumberOfPackages, Guid,\r
+ and the variable length argument list of package pointers.\r
+\r
+ @param NumberOfPackages The number of HII packages to prepare.\r
+ @param Guid Package GUID.\r
+\r
+ @return The allocated and initialized packages.\r
+\r
+**/\r
+EFI_HII_PACKAGES *\r
+EFIAPI\r
+PreparePackages (\r
+ IN UINTN NumberOfPackages,\r
+ IN CONST EFI_GUID *Guid OPTIONAL,\r
+ ...\r
+ )\r
+{\r
+ VA_LIST Args;\r
+ EFI_HII_PACKAGES *HiiPackages;\r
+ VOID **Package;\r
+ UINTN Index;\r
+\r
+ ASSERT (NumberOfPackages > 0);\r
+\r
+ HiiPackages = AllocateZeroPool (sizeof (EFI_HII_PACKAGES) + NumberOfPackages * sizeof (VOID *));\r
+ ASSERT (HiiPackages != NULL);\r
+\r
+ HiiPackages->GuidId = (EFI_GUID *) Guid;\r
+ HiiPackages->NumberOfPackages = NumberOfPackages;\r
+ Package = (VOID **) (((UINT8 *) HiiPackages) + sizeof (EFI_HII_PACKAGES));\r
+\r
+ VA_START (Args, Guid);\r
+\r
+ for (Index = 0; Index < NumberOfPackages; Index++) {\r
+ *Package = VA_ARG (Args, VOID *);\r
+ Package++;\r
+ }\r
+\r
+ VA_END (Args);\r
+\r
+ return HiiPackages;\r
+\r
+}\r