From e13be08edc0c60463406e83a63460d7d1882e14e Mon Sep 17 00:00:00 2001 From: Laszlo Ersek Date: Fri, 13 Sep 2013 08:14:51 +0000 Subject: [PATCH] OvmfPkg: QemuBootOrder: mark UEFI boot options selected by fw_cfg This will allow us to identify those UEFI boot options (while keeping their relative order) that have *not* been selected by fw_cfg. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Laszlo Ersek Tested-by: Michael Chang Reviewed-by: Jordan Justen git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14667 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Library/PlatformBdsLib/QemuBootOrder.c | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/OvmfPkg/Library/PlatformBdsLib/QemuBootOrder.c b/OvmfPkg/Library/PlatformBdsLib/QemuBootOrder.c index 72f78f1ca0..31c3378856 100644 --- a/OvmfPkg/Library/PlatformBdsLib/QemuBootOrder.c +++ b/OvmfPkg/Library/PlatformBdsLib/QemuBootOrder.c @@ -244,20 +244,22 @@ typedef struct { **/ typedef struct { CONST BDS_COMMON_OPTION *BootOption; // reference only, no ownership + BOOLEAN Appended; // has been added to a BOOT_ORDER? } ACTIVE_OPTION; /** - Append BootOptionId to BootOrder, reallocating the latter if needed. + Append an active boot option to BootOrder, reallocating the latter if needed. @param[in out] BootOrder The structure pointing to the array and holding allocation and usage counters. - @param[in] BootOptionId The value to append to the array. + @param[in] ActiveOption The active boot option whose ID should be + appended to the array. - @retval RETURN_SUCCESS BootOptionId appended. + @retval RETURN_SUCCESS ID of ActiveOption appended. @retval RETURN_OUT_OF_RESOURCES Memory reallocation failed. @@ -265,8 +267,8 @@ typedef struct { STATIC RETURN_STATUS BootOrderAppend ( - IN OUT BOOT_ORDER *BootOrder, - IN UINT16 BootOptionId + IN OUT BOOT_ORDER *BootOrder, + IN OUT ACTIVE_OPTION *ActiveOption ) { if (BootOrder->Produced == BootOrder->Allocated) { @@ -287,7 +289,9 @@ BootOrderAppend ( BootOrder->Data = DataNew; } - BootOrder->Data[BootOrder->Produced++] = BootOptionId; + BootOrder->Data[BootOrder->Produced++] = + ActiveOption->BootOption->BootCurrent; + ActiveOption->Appended = TRUE; return RETURN_SUCCESS; } @@ -343,6 +347,7 @@ CollectActiveOptions ( if (IS_LOAD_OPTION_TYPE (Current->Attribute, LOAD_OPTION_ACTIVE)) { if (ScanMode == 1) { (*ActiveOption)[*Count].BootOption = Current; + (*ActiveOption)[*Count].Appended = FALSE; } ++*Count; } @@ -1119,8 +1124,7 @@ SetBootOrderFromQemu ( // // match found, store ID and continue with next OpenFirmware path // - Status = BootOrderAppend (&BootOrder, - ActiveOption[Idx].BootOption->BootCurrent); + Status = BootOrderAppend (&BootOrder, &ActiveOption[Idx]); if (Status != RETURN_SUCCESS) { goto ErrorFreeActiveOption; }