2 Boot Discovery Policy UI for Boot Maintenance menu.
4 Copyright (c) 2021, ARM Ltd. All rights reserved.<BR>
5 Copyright (c) 2021, Semihalf All rights reserved.<BR>
7 SPDX-License-Identifier: BSD-2-Clause-Patent
11 #include <Guid/BootDiscoveryPolicy.h>
12 #include <Library/UefiDriverEntryPoint.h>
13 #include <Library/UefiBootServicesTableLib.h>
14 #include <Library/UefiRuntimeServicesTableLib.h>
15 #include <Library/BaseLib.h>
16 #include <Library/DevicePathLib.h>
17 #include <Library/DebugLib.h>
18 #include <Library/HiiLib.h>
19 #include <Library/UefiLib.h>
20 #include <Library/BaseMemoryLib.h>
21 #include <Include/Library/PcdLib.h>
24 /// HII specific Vendor Device Path definition.
27 VENDOR_DEVICE_PATH VendorDevicePath
;
28 EFI_DEVICE_PATH_PROTOCOL End
;
29 } HII_VENDOR_DEVICE_PATH
;
31 extern UINT8 BootDiscoveryPolicyUiLibVfrBin
[];
33 EFI_HII_HANDLE mBPHiiHandle
= NULL
;
34 EFI_HANDLE mBPDriverHandle
= NULL
;
36 STATIC HII_VENDOR_DEVICE_PATH mVendorDevicePath
= {
42 (UINT8
)(sizeof (VENDOR_DEVICE_PATH
)),
43 (UINT8
)((sizeof (VENDOR_DEVICE_PATH
)) >> 8)
46 BOOT_DISCOVERY_POLICY_MGR_FORMSET_GUID
50 END_ENTIRE_DEVICE_PATH_SUBTYPE
,
52 (UINT8
)(END_DEVICE_PATH_LENGTH
),
53 (UINT8
)((END_DEVICE_PATH_LENGTH
) >> 8)
60 Initialize Boot Maintenance Menu library.
62 @param ImageHandle The image handle.
63 @param SystemTable The system table.
65 @retval EFI_SUCCESS Install Boot manager menu success.
66 @retval Other Return error status.gBPDisplayLibGuid
71 BootDiscoveryPolicyUiLibConstructor (
72 IN EFI_HANDLE ImageHandle
,
73 IN EFI_SYSTEM_TABLE
*SystemTable
78 UINT32 BootDiscoveryPolicy
;
80 Size
= sizeof (UINT32
);
81 Status
= gRT
->GetVariable (
82 BOOT_DISCOVERY_POLICY_VAR
,
83 &gBootDiscoveryPolicyMgrFormsetGuid
,
88 if (EFI_ERROR (Status
)) {
89 Status
= PcdSet32S (PcdBootDiscoveryPolicy
, PcdGet32 (PcdBootDiscoveryPolicy
));
90 ASSERT_EFI_ERROR (Status
);
93 Status
= gBS
->InstallMultipleProtocolInterfaces (
95 &gEfiDevicePathProtocolGuid
,
99 if (EFI_ERROR (Status
)) {
104 // Publish our HII data
106 mBPHiiHandle
= HiiAddPackages (
107 &gBootDiscoveryPolicyMgrFormsetGuid
,
109 BootDiscoveryPolicyUiLibVfrBin
,
110 BootDiscoveryPolicyUiLibStrings
,
113 if (mBPHiiHandle
== NULL
) {
114 gBS
->UninstallMultipleProtocolInterfaces (
116 &gEfiDevicePathProtocolGuid
,
121 return EFI_OUT_OF_RESOURCES
;
128 Destructor of Boot Maintenance menu library.
130 @param ImageHandle The firmware allocated handle for the EFI image.
131 @param SystemTable A pointer to the EFI System Table.
133 @retval EFI_SUCCESS The destructor completed successfully.
134 @retval Other value The destructor did not complete successfully.
139 BootDiscoveryPolicyUiLibDestructor (
140 IN EFI_HANDLE ImageHandle
,
141 IN EFI_SYSTEM_TABLE
*SystemTable
145 if (mBPDriverHandle
!= NULL
) {
146 gBS
->UninstallProtocolInterface (
148 &gEfiDevicePathProtocolGuid
,
151 mBPDriverHandle
= NULL
;
154 if (mBPHiiHandle
!= NULL
) {
155 HiiRemovePackages (mBPHiiHandle
);