> -----Original Message-----
> From: Laszlo Ersek [mailto:[email protected]]
> Sent: 13 January 2015 10:23
> To: [email protected]
> Subject: [edk2] [PATCH v2 1/3] OvmfPkg: QemuBootOrderLib: expose QEMU's
> "-boot menu=on[, splash-time=N]"
>
> The QEMU command line option
>
> -boot menu=on
>
> is meant to have the guest firmware wait for a firmware-specific
> interval
> for the user to enter the boot menu. During the wait, the user can opt
> to
> enter the boot menu, or interrupt the wait and proceed to booting at
> once.
> If the wait interval elapses, the firmware should boot as it normally
> would.
>
> The QEMU command line option
>
> -boot menu=on,splash-time=N
>
> means the same, except the firmware should wait for cca. N milliseconds
> instead of a firmware-specific interval.
>
> We can approximate this behavior quite well for edk2's virtual
> platforms
> because the Intel BDS front page already supports a progress bar, with
> semantics similar to the above. Let's distill the fw_cfg bits
> underlying
> "-boot menu=on,splash-time=N" for the BDS policies, in the form of a
> timeout value they can pass to Intel's PlatformBdsEnterFrontPage().
>
> If the boot menu is not requested, we return
> "gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdPlatformBootTimeOut",
> which
> is what the virtual platforms use right now.
>
> If the boot menu is requested without specifying the timeout, we return
> the same PCD, unless it would cause us to skip the boot menu at once.
> In
> the latter case, we return 3 seconds (as an approximation of the 2500
> ms
> SeaBIOS default.)
>
> RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=1170507
>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Laszlo Ersek <[email protected]>
> ---
>
> Notes:
> v2:
> - distinguish the possible cases in more detail in the commit
> message
> and in code comments [Jordan]
> - refine logic for "-boot menu=on" (no splash-time=N) [Jordan]
> - rewrite GetFrontPageTimeoutFromQemu() to simplify nesting of
> "if"s
>
> OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.inf | 3 +++
> OvmfPkg/Include/Library/QemuBootOrderLib.h | 12
> ++++++++++++
> OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c | 50
> ++++++++++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 65 insertions(+)
>
> diff --git a/OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.inf
> b/OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.inf
> index 6289e6a..e7be0f3 100644
> --- a/OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.inf
> +++ b/OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.inf
> @@ -57,3 +57,6 @@
> [FeaturePcd]
> gUefiOvmfPkgTokenSpaceGuid.PcdQemuBootOrderPciTranslation
> gUefiOvmfPkgTokenSpaceGuid.PcdQemuBootOrderMmioTranslation
> +
> +[Pcd]
> + gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdPlatformBootTimeOut
> diff --git a/OvmfPkg/Include/Library/QemuBootOrderLib.h
> b/OvmfPkg/Include/Library/QemuBootOrderLib.h
> index 12cda6a..80d02c8 100644
> --- a/OvmfPkg/Include/Library/QemuBootOrderLib.h
> +++ b/OvmfPkg/Include/Library/QemuBootOrderLib.h
> @@ -54,4 +54,16 @@ SetBootOrderFromQemu (
> IN CONST LIST_ENTRY *BootOptionList
> );
>
> +
> +/**
> + Calculate the number of seconds we should be showing the FrontPage
> progress
> + bar for.
> +
> + @return The TimeoutDefault argument for
> PlatformBdsEnterFrontPage().
> +**/
> +UINT16
> +GetFrontPageTimeoutFromQemu (
> + VOID
> + );
> +
> #endif
> diff --git a/OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c
> b/OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c
> index bc2fb56..e63ad26 100644
> --- a/OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c
> +++ b/OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c
> @@ -1571,3 +1571,53 @@ ErrorFreeFwCfg:
>
> return Status;
> }
> +
> +
> +/**
> + Calculate the number of seconds we should be showing the FrontPage
> progress
> + bar for.
> +
> + @return The TimeoutDefault argument for
> PlatformBdsEnterFrontPage().
> +**/
> +UINT16
> +GetFrontPageTimeoutFromQemu (
> + VOID
> + )
> +{
> + FIRMWARE_CONFIG_ITEM BootMenuWaitItem;
> + UINTN BootMenuWaitSize;
> +
> + QemuFwCfgSelectItem (QemuFwCfgItemBootMenu);
> + if (QemuFwCfgRead16 () == 0) {
> + //
> + // The user specified "-boot menu=off", or didn't specify "-boot
> + // menu=(on|off)" at all. Return the platform default.
> + //
> + return PcdGet16 (PcdPlatformBootTimeOut);
> + }
Should it not return 0?
You said this PcdPlatformBootTimeOut is set to 0 for qemu in an earlier
email.
As far as I can see there is no way to differ "-boot menu=off" or no "-boot
menu=off".
- "-boot menu=off" is clearly Timeout=0
- no "-boot menu=off" means default behaviour. And the current default
behaviour is Timeout=0 for qEmu.
Reading this code might be confusing if we do not know
PcdPlatformBootTimeOut is set to 0.
That's why I am suggesting to explicitly return 0.
Feel free to ignore my comment if I miss something. I do not want to block
this patch if my comment is not relevant.
> +
> + if (RETURN_ERROR (QemuFwCfgFindFile ("etc/boot-menu-wait",
> &BootMenuWaitItem,
> + &BootMenuWaitSize)) ||
> + BootMenuWaitSize != sizeof (UINT16)) {
> + //
> + // "-boot menu=on" was specified without "splash-time=N". In this
> case,
> + // return three seconds if the platform default would cause us to
> skip the
> + // front page, and return the platform default otherwise.
> + //
> + UINT16 Timeout;
> +
> + Timeout = PcdGet16 (PcdPlatformBootTimeOut);
> + if (Timeout == 0) {
> + Timeout = 3;
> + }
> + return Timeout;
> + }
> +
> + //
> + // "-boot menu=on,splash-time=N" was specified, where N is in units
> of
> + // milliseconds. The Intel BDS Front Page progress bar only supports
> whole
> + // seconds, round N up.
> + //
> + QemuFwCfgSelectItem (BootMenuWaitItem);
> + return (UINT16)((QemuFwCfgRead16 () + 999) / 1000);
> +}
> --
> 1.8.3.1
>
>
>
> -----------------------------------------------------------------------
> -------
> New Year. New Location. New Benefits. New Data Center in Ashburn, VA.
> GigeNET is offering a free month of service with a new server in
> Ashburn.
> Choose from 2 high performing configs, both with 100TB of bandwidth.
> Higher redundancy.Lower latency.Increased capacity.Completely
> compliant.
> http://p.sf.net/sfu/gigenet
> _______________________________________________
> edk2-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/edk2-devel
------------------------------------------------------------------------------
New Year. New Location. New Benefits. New Data Center in Ashburn, VA.
GigeNET is offering a free month of service with a new server in Ashburn.
Choose from 2 high performing configs, both with 100TB of bandwidth.
Higher redundancy.Lower latency.Increased capacity.Completely compliant.
http://p.sf.net/sfu/gigenet
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel