--- /dev/null
+/** @file\r
+ Definition for structure & defines exported by Boot Discovery Policy UI\r
+\r
+ Copyright (c) 2021, ARM Ltd. All rights reserved.<BR>\r
+ Copyright (c) 2021, Semihalf All rights reserved.<BR>\r
+\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
+\r
+**/\r
+\r
+#ifndef BOOT_DISCOVERY_POLICY_UI_LIB_H_\r
+#define BOOT_DISCOVERY_POLICY_UI_LIB_H_\r
+\r
+#define BDP_CONNECT_MINIMAL 0 /* Do not connect any additional devices */\r
+#define BDP_CONNECT_NET 1\r
+#define BDP_CONNECT_ALL 2\r
+\r
+#define BOOT_DISCOVERY_POLICY_MGR_FORMSET_GUID { 0x5b6f7107, 0xbb3c, 0x4660, { 0x92, 0xcd, 0x54, 0x26, 0x90, 0x28, 0x0b, 0xbd } }\r
+\r
+#define BOOT_DISCOVERY_POLICY_VAR L"BootDiscoveryPolicy"\r
+\r
+#endif\r
--- /dev/null
+/** @file\r
+ Boot Discovery Policy UI for Boot Maintenance menu.\r
+\r
+ Copyright (c) 2021, ARM Ltd. All rights reserved.<BR>\r
+ Copyright (c) 2021, Semihalf All rights reserved.<BR>\r
+\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
+\r
+**/\r
+\r
+#include <Guid/BootDiscoveryPolicy.h>\r
+#include <Library/UefiDriverEntryPoint.h>\r
+#include <Library/UefiBootServicesTableLib.h>\r
+#include <Library/UefiRuntimeServicesTableLib.h>\r
+#include <Library/BaseLib.h>\r
+#include <Library/DevicePathLib.h>\r
+#include <Library/DebugLib.h>\r
+#include <Library/HiiLib.h>\r
+#include <Library/UefiLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
+#include <Include/Library/PcdLib.h>\r
+\r
+///\r
+/// HII specific Vendor Device Path definition.\r
+///\r
+typedef struct {\r
+ VENDOR_DEVICE_PATH VendorDevicePath;\r
+ EFI_DEVICE_PATH_PROTOCOL End;\r
+} HII_VENDOR_DEVICE_PATH;\r
+\r
+extern UINT8 BootDiscoveryPolicyUiLibVfrBin[];\r
+\r
+EFI_HII_HANDLE mBPHiiHandle = NULL;\r
+EFI_HANDLE mBPDriverHandle = NULL;\r
+\r
+STATIC HII_VENDOR_DEVICE_PATH mVendorDevicePath = {\r
+ {\r
+ {\r
+ HARDWARE_DEVICE_PATH,\r
+ HW_VENDOR_DP,\r
+ {\r
+ (UINT8)(sizeof (VENDOR_DEVICE_PATH)),\r
+ (UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8)\r
+ }\r
+ },\r
+ BOOT_DISCOVERY_POLICY_MGR_FORMSET_GUID\r
+ },\r
+ {\r
+ END_DEVICE_PATH_TYPE,\r
+ END_ENTIRE_DEVICE_PATH_SUBTYPE,\r
+ {\r
+ (UINT8)(END_DEVICE_PATH_LENGTH),\r
+ (UINT8)((END_DEVICE_PATH_LENGTH) >> 8)\r
+ }\r
+ }\r
+};\r
+\r
+/**\r
+\r
+ Initialize Boot Maintenance Menu library.\r
+\r
+ @param ImageHandle The image handle.\r
+ @param SystemTable The system table.\r
+\r
+ @retval EFI_SUCCESS Install Boot manager menu success.\r
+ @retval Other Return error status.gBPDisplayLibGuid\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+BootDiscoveryPolicyUiLibConstructor (\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+ UINTN Size;\r
+ UINT32 BootDiscoveryPolicy;\r
+\r
+ Size = sizeof (UINT32);\r
+ Status = gRT->GetVariable (\r
+ BOOT_DISCOVERY_POLICY_VAR,\r
+ &gBootDiscoveryPolicyMgrFormsetGuid,\r
+ NULL,\r
+ &Size,\r
+ &BootDiscoveryPolicy\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ Status = PcdSet32S (PcdBootDiscoveryPolicy, PcdGet32 (PcdBootDiscoveryPolicy));\r
+ ASSERT_EFI_ERROR (Status);\r
+ }\r
+\r
+ Status = gBS->InstallMultipleProtocolInterfaces (\r
+ &mBPDriverHandle,\r
+ &gEfiDevicePathProtocolGuid,\r
+ &mVendorDevicePath,\r
+ NULL\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+\r
+ //\r
+ // Publish our HII data\r
+ //\r
+ mBPHiiHandle = HiiAddPackages (\r
+ &gBootDiscoveryPolicyMgrFormsetGuid,\r
+ mBPDriverHandle,\r
+ BootDiscoveryPolicyUiLibVfrBin,\r
+ BootDiscoveryPolicyUiLibStrings,\r
+ NULL\r
+ );\r
+ if (mBPHiiHandle == NULL) {\r
+ gBS->UninstallMultipleProtocolInterfaces (\r
+ mBPDriverHandle,\r
+ &gEfiDevicePathProtocolGuid,\r
+ &mVendorDevicePath,\r
+ NULL\r
+ );\r
+\r
+ return EFI_OUT_OF_RESOURCES;\r
+ }\r
+\r
+ return EFI_SUCCESS;\r
+}\r
+\r
+/**\r
+ Destructor of Boot Maintenance menu library.\r
+\r
+ @param ImageHandle The firmware allocated handle for the EFI image.\r
+ @param SystemTable A pointer to the EFI System Table.\r
+\r
+ @retval EFI_SUCCESS The destructor completed successfully.\r
+ @retval Other value The destructor did not complete successfully.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+BootDiscoveryPolicyUiLibDestructor (\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
+ )\r
+{\r
+\r
+ if (mBPDriverHandle != NULL) {\r
+ gBS->UninstallProtocolInterface (\r
+ mBPDriverHandle,\r
+ &gEfiDevicePathProtocolGuid,\r
+ &mVendorDevicePath\r
+ );\r
+ mBPDriverHandle = NULL;\r
+ }\r
+\r
+ if (mBPHiiHandle != NULL) {\r
+ HiiRemovePackages (mBPHiiHandle);\r
+ mBPHiiHandle = NULL;\r
+ }\r
+\r
+ return EFI_SUCCESS;\r
+}\r
--- /dev/null
+## @file\r
+# Library for BDS phase to use Boot Discovery Policy\r
+#\r
+# Copyright (c) 2021, ARM Ltd. All rights reserved.<BR>\r
+# Copyright (c) 2021, Semihalf All rights reserved.<BR>\r
+# SPDX-License-Identifier: BSD-2-Clause-Patent\r
+#\r
+##\r
+\r
+[Defines]\r
+ INF_VERSION = 0x00010005\r
+ BASE_NAME = BootDiscoveryPolicyUiLib\r
+ MODULE_UNI_FILE = BootDiscoveryPolicyUiLib.uni\r
+ FILE_GUID = BE73105A-B13D-4B57-A41A-463DBD15FE10\r
+ MODULE_TYPE = DXE_DRIVER\r
+ VERSION_STRING = 1.0\r
+ LIBRARY_CLASS = NULL|DXE_DRIVER UEFI_APPLICATION\r
+ CONSTRUCTOR = BootDiscoveryPolicyUiLibConstructor\r
+ DESTRUCTOR = BootDiscoveryPolicyUiLibDestructor\r
+#\r
+# The following information is for reference only and not required by the build tools.\r
+#\r
+# VALID_ARCHITECTURES = IA32 X64 AARCH64\r
+#\r
+\r
+[Sources]\r
+ BootDiscoveryPolicyUiLib.c\r
+ BootDiscoveryPolicyUiLibStrings.uni\r
+ BootDiscoveryPolicyUiLibVfr.Vfr\r
+\r
+[Packages]\r
+ MdePkg/MdePkg.dec\r
+ MdeModulePkg/MdeModulePkg.dec\r
+\r
+[LibraryClasses]\r
+ DevicePathLib\r
+ BaseLib\r
+ UefiRuntimeServicesTableLib\r
+ UefiBootServicesTableLib\r
+ DebugLib\r
+ HiiLib\r
+ UefiLib\r
+ BaseMemoryLib\r
+\r
+[Guids]\r
+ gBootDiscoveryPolicyMgrFormsetGuid\r
+\r
+[Pcd]\r
+ gEfiMdeModulePkgTokenSpaceGuid.PcdBootDiscoveryPolicy ## PRODUCES\r
+\r
+[Depex]\r
+ gEfiHiiDatabaseProtocolGuid AND gPcdProtocolGuid\r
--- /dev/null
+// /** @file\r
+// Boot Discovery Policy UI module.\r
+//\r
+// Copyright (c) 2021, ARM Ltd. All rights reserved.<BR>\r
+// Copyright (c) 2021, Semihalf All rights reserved.<BR>\r
+//\r
+// SPDX-License-Identifier: BSD-2-Clause-Patent\r
+//\r
+// **/\r
+\r
+\r
+#string STR_MODULE_ABSTRACT\r
+#language en-US "Boot Discovery Policy UI module."\r
+\r
+#string STR_MODULE_DESCRIPTION\r
+#language en-US "Boot Discovery Policy UI module."\r
+\r
+\r
--- /dev/null
+// *++\r
+//\r
+// Copyright (c) 2021, ARM Ltd. All rights reserved.<BR>\r
+// Copyright (c) 2021, Semihalf All rights reserved.<BR>\r
+// SPDX-License-Identifier: BSD-2-Clause-Patent\r
+//\r
+// Module Name:\r
+//\r
+// BootDiscoveryPolicyUiLibStrings.uni\r
+//\r
+// Abstract:\r
+//\r
+// String definitions for Boot Discovery Policy UI.\r
+//\r
+// --*/\r
+\r
+/=#\r
+\r
+\r
+#langdef en-US "English"\r
+\r
+#string STR_FORM_BDP_MAIN_TITLE #language en-US "Boot Discovery Policy"\r
+\r
+#string STR_FORM_BDP_CONN_MIN #language en-US "Minimal"\r
+\r
+#string STR_FORM_BDP_CONN_NET #language en-US "Connect Network Devices"\r
+\r
+#string STR_FORM_BDP_CONN_ALL #language en-US "Connect All Devices"\r
+\r
--- /dev/null
+///** @file\r
+//\r
+// Formset for Boot Discovery Policy UI\r
+//\r
+// Copyright (c) 2021, ARM Ltd. All rights reserved.<BR>\r
+// Copyright (c) 2021, Semihalf All rights reserved.<BR>\r
+//\r
+// SPDX-License-Identifier: BSD-2-Clause-Patent\r
+//\r
+//**/\r
+\r
+#include <Uefi/UefiMultiPhase.h>\r
+#include "Guid/BootDiscoveryPolicy.h"\r
+#include <Guid/HiiBootMaintenanceFormset.h>\r
+\r
+typedef struct {\r
+ UINT32 BootDiscoveryPolicy;\r
+} BOOT_DISCOVERY_POLICY_VARSTORE_DATA;\r
+\r
+formset\r
+ guid = BOOT_DISCOVERY_POLICY_MGR_FORMSET_GUID,\r
+ title = STRING_TOKEN(STR_FORM_BDP_MAIN_TITLE),\r
+ help = STRING_TOKEN(STR_FORM_BDP_MAIN_TITLE),\r
+ classguid = EFI_IFR_BOOT_MAINTENANCE_GUID,\r
+\r
+ efivarstore BOOT_DISCOVERY_POLICY_VARSTORE_DATA,\r
+ attribute = EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
+ name = BootDiscoveryPolicy,\r
+ guid = BOOT_DISCOVERY_POLICY_MGR_FORMSET_GUID;\r
+\r
+ form formid = 0x0001,\r
+ title = STRING_TOKEN(STR_FORM_BDP_MAIN_TITLE);\r
+\r
+ oneof varid = BootDiscoveryPolicy.BootDiscoveryPolicy,\r
+ prompt = STRING_TOKEN(STR_FORM_BDP_MAIN_TITLE),\r
+ help = STRING_TOKEN(STR_FORM_BDP_MAIN_TITLE),\r
+ flags = NUMERIC_SIZE_4 | INTERACTIVE | RESET_REQUIRED,\r
+ option text = STRING_TOKEN(STR_FORM_BDP_CONN_MIN), value = BDP_CONNECT_MINIMAL, flags = DEFAULT;\r
+ option text = STRING_TOKEN(STR_FORM_BDP_CONN_NET), value = BDP_CONNECT_NET, flags = 0;\r
+ option text = STRING_TOKEN(STR_FORM_BDP_CONN_ALL), value = BDP_CONNECT_ALL, flags = 0;\r
+ endoneof;\r
+\r
+ endform;\r
+endformset;\r
## Include/UniversalPayload/SerialPortInfo.h\r
gUniversalPayloadSerialPortInfoGuid = { 0xaa7e190d, 0xbe21, 0x4409, { 0x8e, 0x67, 0xa2, 0xcd, 0xf, 0x61, 0xe1, 0x70 } }\r
\r
+ ## GUID used for Boot Discovery Policy FormSet guid and related variables.\r
+ gBootDiscoveryPolicyMgrFormsetGuid = { 0x5b6f7107, 0xbb3c, 0x4660, { 0x92, 0xcd, 0x54, 0x26, 0x90, 0x28, 0x0b, 0xbd } }\r
+\r
[Ppis]\r
## Include/Ppi/AtaController.h\r
gPeiAtaControllerPpiGuid = { 0xa45e60d1, 0xc719, 0x44aa, { 0xb0, 0x7a, 0xaa, 0x77, 0x7f, 0x85, 0x90, 0x6d }}\r
# @Prompt Console Output Row of Text Setup\r
gEfiMdeModulePkgTokenSpaceGuid.PcdSetupConOutRow|25|UINT32|0x4000000e\r
\r
+ ## Specify the Boot Discovery Policy settings\r
+ # To support configuring from setup page, this PCD should be overridden in DynamicHii type in its platform .dsc:\r
+ # gEfiMdeModulePkgTokenSpaceGuid.PcdBootDiscoveryPolicy|L"BootDiscoveryPolicy"|gBootDiscoveryPolicyMgrFormsetGuid|0\r
+ # @Prompt Boot Discovery Policy\r
+ gEfiMdeModulePkgTokenSpaceGuid.PcdBootDiscoveryPolicy|2|UINT32|0x4000000f\r
+\r
[PcdsFixedAtBuild.AARCH64, PcdsPatchableInModule.AARCH64]\r
gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiExposedTableVersions|0x20|UINT32|0x0001004c\r
\r
MdeModulePkg/Logo/Logo.inf\r
MdeModulePkg/Logo/LogoDxe.inf\r
MdeModulePkg/Library/BaseSortLib/BaseSortLib.inf\r
+ MdeModulePkg/Library/BootDiscoveryPolicyUiLib/BootDiscoveryPolicyUiLib.inf\r
MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf\r
MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf\r
MdeModulePkg/Library/CustomizedDisplayLib/CustomizedDisplayLib.inf\r
MdeModulePkg/Application/UiApp/UiApp.inf{\r
<LibraryClasses>\r
NULL|MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf\r
+ NULL|MdeModulePkg/Library/BootDiscoveryPolicyUiLib/BootDiscoveryPolicyUiLib.inf\r
NULL|MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf\r
NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf\r
}\r