1 /** @file
2 Var Check Hii generation from Hii Database.
3
4 Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13 **/
14
15 #include "VarCheckHiiGen.h"
16
17 /**
18 Generate from Hii Database.
19
20 **/
21 VOID
VarCheckHiiGenFromHiiDatabase(VOID)22 VarCheckHiiGenFromHiiDatabase (
23 VOID
24 )
25 {
26 EFI_STATUS Status;
27 UINTN BufferSize;
28 VOID *Buffer;
29 EFI_PHYSICAL_ADDRESS BufferAddress;
30 EFI_HII_DATABASE_PROTOCOL *HiiDatabase;
31
32 //
33 // Locate HII Database protocol
34 //
35 Status = gBS->LocateProtocol (&gEfiHiiDatabaseProtocolGuid, NULL, (VOID **) &HiiDatabase);
36 if (EFI_ERROR (Status)) {
37 return;
38 }
39
40 //
41 // Call first time with zero buffer length.
42 // Should fail with EFI_BUFFER_TOO_SMALL.
43 //
44 BufferSize = 0;
45 Buffer = NULL;
46 Status = HiiDatabase->ExportPackageLists (HiiDatabase, 0, &BufferSize, Buffer);
47 if (Status == EFI_BUFFER_TOO_SMALL) {
48 //
49 // Allocate buffer to hold the HII Database.
50 //
51 Status = gBS->AllocatePages (AllocateAnyPages, EfiBootServicesData, EFI_SIZE_TO_PAGES (BufferSize), &BufferAddress);
52 ASSERT_EFI_ERROR (Status);
53 Buffer = (VOID *) (UINTN) BufferAddress;
54
55 //
56 // Export HII Database into the buffer.
57 //
58 Status = HiiDatabase->ExportPackageLists (HiiDatabase, 0, &BufferSize, Buffer);
59 ASSERT_EFI_ERROR (Status);
60
61 DEBUG ((EFI_D_INFO, "VarCheckHiiGenDxeFromHii - HII Database exported at 0x%x, size = 0x%x\n", Buffer, BufferSize));
62
63 #ifdef DUMP_HII_DATA
64 DEBUG_CODE (
65 DumpHiiDatabase (Buffer, BufferSize);
66 );
67 #endif
68
69 VarCheckParseHiiDatabase (Buffer, BufferSize);
70
71 gBS->FreePages (BufferAddress, EFI_SIZE_TO_PAGES (BufferSize));
72 }
73 }
74