From 1241af9510c6f7c0ff83cc3c418e9e1e24bf1ab1 Mon Sep 17 00:00:00 2001
From: Star Zeng <star.zeng@intel.com>
Date: Tue, 25 Aug 2015 03:10:04 +0000
Subject: MdeModulePkg: Add VarCheckHiiLib NULL class library

The check will be based on VarCheckHiiBin that generated
from FV and Hii Database.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Star Zeng <star.zeng@intel.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18293 6f19259b-4bc3-4df7-8a09-765794883524
---
 .../Library/VarCheckHiiLib/VarCheckHiiGenFromHii.c | 73 ++++++++++++++++++++++
 1 file changed, 73 insertions(+)
 create mode 100644 MdeModulePkg/Library/VarCheckHiiLib/VarCheckHiiGenFromHii.c

(limited to 'MdeModulePkg/Library/VarCheckHiiLib/VarCheckHiiGenFromHii.c')

diff --git a/MdeModulePkg/Library/VarCheckHiiLib/VarCheckHiiGenFromHii.c b/MdeModulePkg/Library/VarCheckHiiLib/VarCheckHiiGenFromHii.c
new file mode 100644
index 0000000000..41cde34af7
--- /dev/null
+++ b/MdeModulePkg/Library/VarCheckHiiLib/VarCheckHiiGenFromHii.c
@@ -0,0 +1,73 @@
+/** @file
+  Var Check Hii generation from Hii Database.
+
+Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
+This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution.  The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+
+#include "VarCheckHiiGen.h"
+
+/**
+  Generate from Hii Database.
+
+**/
+VOID
+VarCheckHiiGenFromHiiDatabase (
+  VOID
+  )
+{
+  EFI_STATUS                    Status;
+  UINTN                         BufferSize;
+  VOID                          *Buffer;
+  EFI_PHYSICAL_ADDRESS          BufferAddress;
+  EFI_HII_DATABASE_PROTOCOL     *HiiDatabase;
+
+  //
+  // Locate HII Database protocol
+  //
+  Status = gBS->LocateProtocol (&gEfiHiiDatabaseProtocolGuid, NULL, (VOID **) &HiiDatabase);
+  if (EFI_ERROR (Status)) {
+    return;
+  }
+
+  //
+  // Call first time with zero buffer length.
+  // Should fail with EFI_BUFFER_TOO_SMALL.
+  //
+  BufferSize = 0;
+  Buffer = NULL;
+  Status = HiiDatabase->ExportPackageLists (HiiDatabase, 0, &BufferSize, Buffer);
+  if (Status == EFI_BUFFER_TOO_SMALL) {
+    //
+    // Allocate buffer to hold the HII Database.
+    //
+    Status = gBS->AllocatePages (AllocateAnyPages, EfiBootServicesData, EFI_SIZE_TO_PAGES (BufferSize), &BufferAddress);
+    ASSERT_EFI_ERROR (Status);
+    Buffer = (VOID *) (UINTN) BufferAddress;
+
+    //
+    // Export HII Database into the buffer.
+    //
+    Status = HiiDatabase->ExportPackageLists (HiiDatabase, 0, &BufferSize, Buffer);
+    ASSERT_EFI_ERROR (Status);
+
+    DEBUG ((EFI_D_INFO, "VarCheckHiiGenDxeFromHii - HII Database exported at 0x%x, size = 0x%x\n", Buffer, BufferSize));
+
+#ifdef DUMP_HII_DATA
+    DEBUG_CODE (
+      DumpHiiDatabase (Buffer, BufferSize);
+      );
+#endif
+
+    VarCheckParseHiiDatabase (Buffer, BufferSize);
+
+    gBS->FreePages (BufferAddress, EFI_SIZE_TO_PAGES (BufferSize));
+  }
+}
-- 
cgit v1.2.3