/** Initialize the Boot Maintenance Utitliy. **/ VOID InitializeBM ( VOID ) { BMM_CALLBACK_DATA *BmmCallbackInfo; BmmCallbackInfo = mBmmCallbackInfo; BmmCallbackInfo->BmmPreviousPageId = FORM_MAIN_ID; BmmCallbackInfo->BmmCurrentPageId = FORM_MAIN_ID; BmmCallbackInfo->FeCurrentState = FileExplorerStateInActive; BmmCallbackInfo->FeDisplayContext = FileExplorerDisplayUnknown; InitAllMenu (BmmCallbackInfo); CreateMenuStringToken (BmmCallbackInfo, BmmCallbackInfo->BmmHiiHandle, &ConsoleInpMenu); CreateMenuStringToken (BmmCallbackInfo, BmmCallbackInfo->BmmHiiHandle, &ConsoleOutMenu); CreateMenuStringToken (BmmCallbackInfo, BmmCallbackInfo->BmmHiiHandle, &ConsoleErrMenu); CreateMenuStringToken (BmmCallbackInfo, BmmCallbackInfo->BmmHiiHandle, &BootOptionMenu); CreateMenuStringToken (BmmCallbackInfo, BmmCallbackInfo->BmmHiiHandle, &DriverOptionMenu); CreateMenuStringToken (BmmCallbackInfo, BmmCallbackInfo->BmmHiiHandle, &TerminalMenu); CreateMenuStringToken (BmmCallbackInfo, BmmCallbackInfo->BmmHiiHandle, &DriverMenu); InitializeBmmConfig(BmmCallbackInfo); }
/** Install Boot Maintenance Manager Menu driver. @param ImageHandle The image handle. @param SystemTable The system table. @retval EFI_SUCEESS Install Boot manager menu success. @retval Other Return error status. **/ EFI_STATUS EFIAPI BootMaintenanceManagerUiLibConstructor ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; UINT8 *Ptr; Status = EFI_SUCCESS; // // Install Device Path Protocol and Config Access protocol to driver handle // Status = gBS->InstallMultipleProtocolInterfaces ( &mBmmCallbackInfo->BmmDriverHandle, &gEfiDevicePathProtocolGuid, &mBmmHiiVendorDevicePath, &gEfiHiiConfigAccessProtocolGuid, &mBmmCallbackInfo->BmmConfigAccess, NULL ); ASSERT_EFI_ERROR (Status); // // Post our Boot Maint VFR binary to the HII database. // mBmmCallbackInfo->BmmHiiHandle = HiiAddPackages ( &mBootMaintGuid, mBmmCallbackInfo->BmmDriverHandle, BootMaintenanceManagerBin, BootMaintenanceManagerUiLibStrings, NULL ); ASSERT (mBmmCallbackInfo->BmmHiiHandle != NULL); // // Locate Formbrowser2 protocol // Status = gBS->LocateProtocol (&gEfiFormBrowser2ProtocolGuid, NULL, (VOID **) &mBmmCallbackInfo->FormBrowser2); ASSERT_EFI_ERROR (Status); EfiBootManagerRefreshAllBootOption (); // // Create LoadOption in BmmCallbackInfo for Driver Callback // Ptr = AllocateZeroPool (sizeof (BM_LOAD_CONTEXT) + sizeof (BM_FILE_CONTEXT) + sizeof (BM_HANDLE_CONTEXT) + sizeof (BM_MENU_ENTRY)); ASSERT (Ptr != NULL); // // Initialize Bmm callback data. // mBmmCallbackInfo->LoadContext = (BM_LOAD_CONTEXT *) Ptr; Ptr += sizeof (BM_LOAD_CONTEXT); mBmmCallbackInfo->FileContext = (BM_FILE_CONTEXT *) Ptr; Ptr += sizeof (BM_FILE_CONTEXT); mBmmCallbackInfo->HandleContext = (BM_HANDLE_CONTEXT *) Ptr; Ptr += sizeof (BM_HANDLE_CONTEXT); mBmmCallbackInfo->MenuEntry = (BM_MENU_ENTRY *) Ptr; mBmmCallbackInfo->BmmPreviousPageId = FORM_MAIN_ID; mBmmCallbackInfo->BmmCurrentPageId = FORM_MAIN_ID; InitAllMenu (mBmmCallbackInfo); CreateUpdateData(); // // Update boot maintenance manager page // InitializeBmmConfig(mBmmCallbackInfo); return EFI_SUCCESS; }