On 03/17/14 18:42, Jordan Justen wrote: > On Wed, Mar 5, 2014 at 4:25 PM, Laszlo Ersek <ler...@redhat.com> wrote: >> Establish the full stack of conversions in retrieving the platform >> configuration: >> >> MultiConfigAltResp -- form engine / HII communication >> ^ >> | >> [BlockToConfig] >> | >> MAIN_FORM_STATE -- binary representation of form/widget state >> ^ >> | >> [PlatformConfigToFormState] >> | >> PLATFORM_CONFIG -- accessible to DXE and UEFI drivers >> ^ >> | >> [PlatformConfigLoad] >> | >> UEFI non-volatile variable -- accessible to external utilities >> >> Contributed-under: TianoCore Contribution Agreement 1.0 >> Signed-off-by: Laszlo Ersek <ler...@redhat.com> >> --- >> >> Notes: >> - check presence of PLATFORM_CONFIG_F_GRAPHICS_RESOLUTION in >> PlatformConfigToFormState() >> >> OvmfPkg/PlatformDxe/Platform.c | 90 >> ++++++++++++++++++++++++++++++++++++++++-- >> 1 file changed, 86 insertions(+), 4 deletions(-) >> >> diff --git a/OvmfPkg/PlatformDxe/Platform.c b/OvmfPkg/PlatformDxe/Platform.c >> index 765c6de..8fd1827 100644 >> --- a/OvmfPkg/PlatformDxe/Platform.c >> +++ b/OvmfPkg/PlatformDxe/Platform.c >> @@ -15,6 +15,7 @@ >> **/ >> >> #include <Library/BaseLib.h> >> +#include <Library/BaseMemoryLib.h> >> #include <Library/DebugLib.h> >> #include <Library/DevicePathLib.h> >> #include <Library/HiiLib.h> >> @@ -126,6 +127,79 @@ STATIC GOP_MODE *mGopModes; >> >> >> /** >> + Load the persistent platform configuration and translate it to binary form >> + state. >> + >> + If the platform configuration is missing, then the function fills in a >> + default state. >> + >> + @param[out] MainFormState Binary form/widget state after translation. >> + >> + @retval EFI_SUCCESS Form/widget state ready. >> + @return Error codes from underlying functions. >> +**/ >> +STATIC >> +EFI_STATUS >> +EFIAPI >> +PlatformConfigToFormState ( >> + OUT MAIN_FORM_STATE *MainFormState >> + ) >> +{ >> + EFI_STATUS Status; >> + PLATFORM_CONFIG PlatformConfig; >> + UINT64 OptionalElements; >> + UINTN ModeNumber; >> + >> + ZeroMem (MainFormState, sizeof *MainFormState); >> + >> + Status = PlatformConfigLoad (&PlatformConfig, &OptionalElements); > > Should we check for an error here?
We already do, please see the "default" label in the switch just below. > > Otherwise, series is Reviewed-by: Jordan Justen <jordan.l.jus...@intel.com> Thank you! Laszlo > >> + switch (Status) { >> + case EFI_SUCCESS: >> + if (OptionalElements & PLATFORM_CONFIG_F_GRAPHICS_RESOLUTION) { >> + // >> + // Format the preferred resolution as text. >> + // >> + UnicodeSPrintAsciiFormat ( >> + (CHAR16 *) MainFormState->CurrentPreferredResolution, >> + sizeof MainFormState->CurrentPreferredResolution, >> + "%Ldx%Ld", >> + (INT64) PlatformConfig.HorizontalResolution, >> + (INT64) PlatformConfig.VerticalResolution); >> + >> + // >> + // Try to locate it in the drop-down list too. This may not succeed, >> but >> + // that's fine. >> + // >> + for (ModeNumber = 0; ModeNumber < mNumGopModes; ++ModeNumber) { >> + if (mGopModes[ModeNumber].X == PlatformConfig.HorizontalResolution >> && >> + mGopModes[ModeNumber].Y == PlatformConfig.VerticalResolution) { >> + MainFormState->NextPreferredResolution = (UINT32) ModeNumber; >> + break; >> + } >> + } >> + >> + break; >> + } >> + // >> + // fall through otherwise >> + // >> + >> + case EFI_NOT_FOUND: >> + UnicodeSPrintAsciiFormat ( >> + (CHAR16 *) MainFormState->CurrentPreferredResolution, >> + sizeof MainFormState->CurrentPreferredResolution, >> + "Unset"); >> + break; >> + >> + default: >> + return Status; >> + } >> + >> + return EFI_SUCCESS; >> +} >> + >> + >> +/** >> This function is called by the HII machinery when it fetches the form >> state. >> >> See the precise documentation in the UEFI spec. >> @@ -142,7 +216,9 @@ STATIC GOP_MODE *mGopModes; >> all values filled in for the names in the Request >> string. >> >> - @return Status codes from gHiiConfigRouting->BlockToConfig(). >> + @retval EFI_SUCCESS Extraction of form state in <MultiConfigAltResp> >> + encoding successful. >> + @return Status codes from underlying functions. >> >> **/ >> STATIC >> @@ -160,9 +236,15 @@ ExtractConfig ( >> >> DEBUG ((EFI_D_VERBOSE, "%a: Request=\"%s\"\n", __FUNCTION__, Request)); >> >> - StrnCpy ((CHAR16 *) MainFormState.CurrentPreferredResolution, >> - L"Unset", MAXSIZE_RES_CUR); >> - MainFormState.NextPreferredResolution = 0; >> + Status = PlatformConfigToFormState (&MainFormState); >> + if (EFI_ERROR (Status)) { >> + *Progress = Request; >> + return Status; >> + } >> + >> + // >> + // Answer the textual request keying off the binary form state. >> + // >> Status = gHiiConfigRouting->BlockToConfig (gHiiConfigRouting, Request, >> (VOID *) &MainFormState, sizeof >> MainFormState, >> Results, Progress); >> -- >> 1.8.3.1 >> >> >> >> ------------------------------------------------------------------------------ >> Subversion Kills Productivity. Get off Subversion & Make the Move to >> Perforce. >> With Perforce, you get hassle-free workflows. Merge that actually works. >> Faster operations. Version large binaries. Built-in WAN optimization and the >> freedom to use Git, Perforce or both. Make the move to Perforce. >> http://pubads.g.doubleclick.net/gampad/clk?id=122218951&iu=/4140/ostg.clktrk >> _______________________________________________ >> edk2-devel mailing list >> edk2-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/edk2-devel > > ------------------------------------------------------------------------------ > Learn Graph Databases - Download FREE O'Reilly Book > "Graph Databases" is the definitive new guide to graph databases and their > applications. Written by three acclaimed leaders in the field, > this first edition is now available. Download your free book today! > http://p.sf.net/sfu/13534_NeoTech > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/edk2-devel > ------------------------------------------------------------------------------ Learn Graph Databases - Download FREE O'Reilly Book "Graph Databases" is the definitive new guide to graph databases and their applications. Written by three acclaimed leaders in the field, this first edition is now available. Download your free book today! http://p.sf.net/sfu/13534_NeoTech _______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel