You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
217 lines
6.1 KiB
217 lines
6.1 KiB
2 years ago
|
From b6a0dcb7a035aef12e1466fd1017194b9430c948 Mon Sep 17 00:00:00 2001
|
||
|
From: Gerd Hoffmann <kraxel@redhat.com>
|
||
|
Date: Tue, 13 Dec 2022 10:31:05 +0100
|
||
|
Subject: Revert "OvmfPkg/PlatformDxe: Handle all requests in ExtractConfig and
|
||
|
RouteConfig"
|
||
|
|
||
|
This reverts commit aefcc91805fd69e4aad4bc08a9f708db11cae5f0.
|
||
|
|
||
|
Fixes regression, patch breaks setting display resolution via ovmf
|
||
|
platform config.
|
||
|
|
||
|
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
|
||
|
---
|
||
|
OvmfPkg/PlatformDxe/Platform.c | 115 +--------------------------
|
||
|
OvmfPkg/PlatformDxe/PlatformConfig.c | 2 +-
|
||
|
OvmfPkg/PlatformDxe/PlatformConfig.h | 2 -
|
||
|
3 files changed, 3 insertions(+), 116 deletions(-)
|
||
|
|
||
|
diff --git a/OvmfPkg/PlatformDxe/Platform.c b/OvmfPkg/PlatformDxe/Platform.c
|
||
|
index ac31fafbdc..4d432f18df 100644
|
||
|
--- a/OvmfPkg/PlatformDxe/Platform.c
|
||
|
+++ b/OvmfPkg/PlatformDxe/Platform.c
|
||
|
@@ -108,11 +108,6 @@ STATIC EFI_EVENT mGopEvent;
|
||
|
//
|
||
|
STATIC VOID *mGopTracker;
|
||
|
|
||
|
-//
|
||
|
-// The driver image handle, used to obtain the device path for <ConfigHdr>.
|
||
|
-//
|
||
|
-STATIC EFI_HANDLE mImageHandle;
|
||
|
-
|
||
|
//
|
||
|
// Cache the resolutions we get from the GOP.
|
||
|
//
|
||
|
@@ -234,10 +229,6 @@ ExtractConfig (
|
||
|
{
|
||
|
MAIN_FORM_STATE MainFormState;
|
||
|
EFI_STATUS Status;
|
||
|
- EFI_STRING ConfigRequestHdr;
|
||
|
- EFI_STRING ConfigRequest;
|
||
|
- UINTN Size;
|
||
|
- BOOLEAN AllocatedRequest;
|
||
|
|
||
|
DEBUG ((DEBUG_VERBOSE, "%a: Request=\"%s\"\n", __FUNCTION__, Request));
|
||
|
|
||
|
@@ -245,73 +236,18 @@ ExtractConfig (
|
||
|
return EFI_INVALID_PARAMETER;
|
||
|
}
|
||
|
|
||
|
- ConfigRequestHdr = NULL;
|
||
|
- ConfigRequest = NULL;
|
||
|
- Size = 0;
|
||
|
- AllocatedRequest = FALSE;
|
||
|
-
|
||
|
- //
|
||
|
- // Check if <ConfigHdr> matches the GUID and name
|
||
|
- //
|
||
|
- *Progress = Request;
|
||
|
- if ((Request != NULL) &&
|
||
|
- !HiiIsConfigHdrMatch (
|
||
|
- Request,
|
||
|
- &gOvmfPlatformConfigGuid,
|
||
|
- mVariableName
|
||
|
- )
|
||
|
- )
|
||
|
- {
|
||
|
- return EFI_NOT_FOUND;
|
||
|
- }
|
||
|
-
|
||
|
Status = PlatformConfigToFormState (&MainFormState);
|
||
|
if (EFI_ERROR (Status)) {
|
||
|
+ *Progress = Request;
|
||
|
return Status;
|
||
|
}
|
||
|
|
||
|
- if ((Request == NULL) || (StrStr (Request, L"OFFSET") == NULL)) {
|
||
|
- //
|
||
|
- // Request has no <RequestElement>, so construct full request string.
|
||
|
- // Allocate and fill a buffer large enough to hold <ConfigHdr>
|
||
|
- // followed by "&OFFSET=0&WIDTH=WWWWWWWWWWWWWWWW" followed by a
|
||
|
- // null terminator.
|
||
|
- //
|
||
|
- ConfigRequestHdr = HiiConstructConfigHdr (
|
||
|
- &gOvmfPlatformConfigGuid,
|
||
|
- mVariableName,
|
||
|
- mImageHandle
|
||
|
- );
|
||
|
- if (ConfigRequestHdr == NULL) {
|
||
|
- return EFI_OUT_OF_RESOURCES;
|
||
|
- }
|
||
|
-
|
||
|
- Size = (StrLen (ConfigRequestHdr) + 32 + 1) * sizeof (CHAR16);
|
||
|
- ConfigRequest = AllocateZeroPool (Size);
|
||
|
- AllocatedRequest = TRUE;
|
||
|
- if (ConfigRequest == NULL) {
|
||
|
- FreePool (ConfigRequestHdr);
|
||
|
- return EFI_OUT_OF_RESOURCES;
|
||
|
- }
|
||
|
-
|
||
|
- UnicodeSPrint (
|
||
|
- ConfigRequest,
|
||
|
- Size,
|
||
|
- L"%s&OFFSET=0&WIDTH=%016LX",
|
||
|
- ConfigRequestHdr,
|
||
|
- sizeof MainFormState
|
||
|
- );
|
||
|
- FreePool (ConfigRequestHdr);
|
||
|
- } else {
|
||
|
- ConfigRequest = Request;
|
||
|
- }
|
||
|
-
|
||
|
//
|
||
|
// Answer the textual request keying off the binary form state.
|
||
|
//
|
||
|
Status = gHiiConfigRouting->BlockToConfig (
|
||
|
gHiiConfigRouting,
|
||
|
- ConfigRequest,
|
||
|
+ Request,
|
||
|
(VOID *)&MainFormState,
|
||
|
sizeof MainFormState,
|
||
|
Results,
|
||
|
@@ -329,33 +265,6 @@ ExtractConfig (
|
||
|
DEBUG ((DEBUG_VERBOSE, "%a: Results=\"%s\"\n", __FUNCTION__, *Results));
|
||
|
}
|
||
|
|
||
|
- //
|
||
|
- // If we used a newly allocated ConfigRequest, update Progress to point to
|
||
|
- // original Request instead of ConfigRequest.
|
||
|
- //
|
||
|
- if (Request == NULL) {
|
||
|
- *Progress = NULL;
|
||
|
- } else if (StrStr (Request, L"OFFSET") == NULL) {
|
||
|
- if (EFI_ERROR (Status)) {
|
||
|
- //
|
||
|
- // Since we constructed ConfigRequest, failure can only occur if there
|
||
|
- // is not enough memory. In this case, we point Progress to the first
|
||
|
- // character of Request.
|
||
|
- //
|
||
|
- *Progress = Request;
|
||
|
- } else {
|
||
|
- //
|
||
|
- // In case of success, we point Progress to the null terminator of
|
||
|
- // Request.
|
||
|
- //
|
||
|
- *Progress = Request + StrLen (Request);
|
||
|
- }
|
||
|
- }
|
||
|
-
|
||
|
- if (AllocatedRequest) {
|
||
|
- FreePool (ConfigRequest);
|
||
|
- }
|
||
|
-
|
||
|
return Status;
|
||
|
}
|
||
|
|
||
|
@@ -439,21 +348,6 @@ RouteConfig (
|
||
|
return EFI_INVALID_PARAMETER;
|
||
|
}
|
||
|
|
||
|
- //
|
||
|
- // Check if <ConfigHdr> matches the GUID and name
|
||
|
- //
|
||
|
- *Progress = Configuration;
|
||
|
- if ((Configuration != NULL) &&
|
||
|
- !HiiIsConfigHdrMatch (
|
||
|
- Configuration,
|
||
|
- &gOvmfPlatformConfigGuid,
|
||
|
- mVariableName
|
||
|
- )
|
||
|
- )
|
||
|
- {
|
||
|
- return EFI_NOT_FOUND;
|
||
|
- }
|
||
|
-
|
||
|
//
|
||
|
// the "read" step in RMW
|
||
|
//
|
||
|
@@ -972,11 +866,6 @@ PlatformInit (
|
||
|
return Status;
|
||
|
}
|
||
|
|
||
|
- //
|
||
|
- // Save the driver image handle.
|
||
|
- //
|
||
|
- mImageHandle = ImageHandle;
|
||
|
-
|
||
|
//
|
||
|
// Publish the HII package list to HII Database.
|
||
|
//
|
||
|
diff --git a/OvmfPkg/PlatformDxe/PlatformConfig.c b/OvmfPkg/PlatformDxe/PlatformConfig.c
|
||
|
index f5ac2d0609..e202ac5b47 100644
|
||
|
--- a/OvmfPkg/PlatformDxe/PlatformConfig.c
|
||
|
+++ b/OvmfPkg/PlatformDxe/PlatformConfig.c
|
||
|
@@ -21,7 +21,7 @@
|
||
|
//
|
||
|
// Name of the UEFI variable that we use for persistent storage.
|
||
|
//
|
||
|
-CHAR16 mVariableName[] = L"PlatformConfig";
|
||
|
+STATIC CHAR16 mVariableName[] = L"PlatformConfig";
|
||
|
|
||
|
/**
|
||
|
Serialize and persistently save platform configuration.
|
||
|
diff --git a/OvmfPkg/PlatformDxe/PlatformConfig.h b/OvmfPkg/PlatformDxe/PlatformConfig.h
|
||
|
index 5d9b457b1b..902c9b2ce0 100644
|
||
|
--- a/OvmfPkg/PlatformDxe/PlatformConfig.h
|
||
|
+++ b/OvmfPkg/PlatformDxe/PlatformConfig.h
|
||
|
@@ -50,6 +50,4 @@ PlatformConfigLoad (
|
||
|
#define PLATFORM_CONFIG_F_GRAPHICS_RESOLUTION BIT0
|
||
|
#define PLATFORM_CONFIG_F_DOWNGRADE BIT63
|
||
|
|
||
|
-extern CHAR16 mVariableName[];
|
||
|
-
|
||
|
#endif // _PLATFORM_CONFIG_H_
|
||
|
--
|
||
|
2.38.1
|
||
|
|