OvmfPkg: PlatformDxe: connect ExtractConfig() to platform data
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 <lersek@redhat.com> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15374 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
1df57ba3e6
commit
cbd08bcc17
@ -15,6 +15,7 @@
|
|||||||
**/
|
**/
|
||||||
|
|
||||||
#include <Library/BaseLib.h>
|
#include <Library/BaseLib.h>
|
||||||
|
#include <Library/BaseMemoryLib.h>
|
||||||
#include <Library/DebugLib.h>
|
#include <Library/DebugLib.h>
|
||||||
#include <Library/DevicePathLib.h>
|
#include <Library/DevicePathLib.h>
|
||||||
#include <Library/HiiLib.h>
|
#include <Library/HiiLib.h>
|
||||||
@ -125,6 +126,79 @@ STATIC UINTN mNumGopModes;
|
|||||||
STATIC GOP_MODE *mGopModes;
|
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);
|
||||||
|
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.
|
This function is called by the HII machinery when it fetches the form state.
|
||||||
|
|
||||||
@ -142,7 +216,9 @@ STATIC GOP_MODE *mGopModes;
|
|||||||
all values filled in for the names in the Request
|
all values filled in for the names in the Request
|
||||||
string.
|
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
|
STATIC
|
||||||
@ -160,9 +236,15 @@ ExtractConfig (
|
|||||||
|
|
||||||
DEBUG ((EFI_D_VERBOSE, "%a: Request=\"%s\"\n", __FUNCTION__, Request));
|
DEBUG ((EFI_D_VERBOSE, "%a: Request=\"%s\"\n", __FUNCTION__, Request));
|
||||||
|
|
||||||
StrnCpy ((CHAR16 *) MainFormState.CurrentPreferredResolution,
|
Status = PlatformConfigToFormState (&MainFormState);
|
||||||
L"Unset", MAXSIZE_RES_CUR);
|
if (EFI_ERROR (Status)) {
|
||||||
MainFormState.NextPreferredResolution = 0;
|
*Progress = Request;
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Answer the textual request keying off the binary form state.
|
||||||
|
//
|
||||||
Status = gHiiConfigRouting->BlockToConfig (gHiiConfigRouting, Request,
|
Status = gHiiConfigRouting->BlockToConfig (gHiiConfigRouting, Request,
|
||||||
(VOID *) &MainFormState, sizeof MainFormState,
|
(VOID *) &MainFormState, sizeof MainFormState,
|
||||||
Results, Progress);
|
Results, Progress);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user