mirror of https://github.com/acidanthera/audk.git
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/BaseMemoryLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/DevicePathLib.h>
|
||||
#include <Library/HiiLib.h>
|
||||
|
@ -125,6 +126,79 @@ STATIC UINTN mNumGopModes;
|
|||
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.
|
||||
|
||||
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue