mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-26 15:14:02 +02:00
OvmfPkg: PlatformDxe: add an empty HII form
... which opens from the Device Manager window. 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@15367 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
bdaf30e4e6
commit
877a4dbb02
@ -15,10 +15,128 @@
|
|||||||
**/
|
**/
|
||||||
|
|
||||||
#include <Library/DebugLib.h>
|
#include <Library/DebugLib.h>
|
||||||
|
#include <Library/DevicePathLib.h>
|
||||||
|
#include <Library/HiiLib.h>
|
||||||
#include <Library/UefiBootServicesTableLib.h>
|
#include <Library/UefiBootServicesTableLib.h>
|
||||||
|
#include <Protocol/DevicePath.h>
|
||||||
|
#include <Protocol/HiiConfigAccess.h>
|
||||||
|
|
||||||
#include "PlatformConfig.h"
|
#include "PlatformConfig.h"
|
||||||
|
|
||||||
|
//
|
||||||
|
// The HiiAddPackages() library function requires that any controller (or
|
||||||
|
// image) handle, to be associated with the HII packages under installation, be
|
||||||
|
// "decorated" with a device path. The tradition seems to be a vendor device
|
||||||
|
// path.
|
||||||
|
//
|
||||||
|
// We'd like to associate our HII packages with the driver's image handle. The
|
||||||
|
// first idea is to use the driver image's device path. Unfortunately, loaded
|
||||||
|
// images only come with an EFI_LOADED_IMAGE_DEVICE_PATH_PROTOCOL (not the
|
||||||
|
// usual EFI_DEVICE_PATH_PROTOCOL), ie. a different GUID. In addition, even the
|
||||||
|
// EFI_LOADED_IMAGE_DEVICE_PATH_PROTOCOL interface may be NULL, if the image
|
||||||
|
// has been loaded from an "unnamed" memory source buffer.
|
||||||
|
//
|
||||||
|
// Hence let's just stick with the tradition -- use a dedicated vendor device
|
||||||
|
// path, with the driver's FILE_GUID.
|
||||||
|
//
|
||||||
|
#pragma pack(1)
|
||||||
|
typedef struct {
|
||||||
|
VENDOR_DEVICE_PATH VendorDevicePath;
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL End;
|
||||||
|
} PKG_DEVICE_PATH;
|
||||||
|
#pragma pack()
|
||||||
|
|
||||||
|
STATIC PKG_DEVICE_PATH mPkgDevicePath = {
|
||||||
|
{
|
||||||
|
{
|
||||||
|
HARDWARE_DEVICE_PATH,
|
||||||
|
HW_VENDOR_DP,
|
||||||
|
{
|
||||||
|
(UINT8) (sizeof (VENDOR_DEVICE_PATH) ),
|
||||||
|
(UINT8) (sizeof (VENDOR_DEVICE_PATH) >> 8)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
EFI_CALLER_ID_GUID
|
||||||
|
},
|
||||||
|
{
|
||||||
|
END_DEVICE_PATH_TYPE,
|
||||||
|
END_ENTIRE_DEVICE_PATH_SUBTYPE,
|
||||||
|
{
|
||||||
|
(UINT8) (END_DEVICE_PATH_LENGTH ),
|
||||||
|
(UINT8) (END_DEVICE_PATH_LENGTH >> 8)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
// The configuration interface between the HII engine (form display etc) and
|
||||||
|
// this driver.
|
||||||
|
//
|
||||||
|
STATIC EFI_HII_CONFIG_ACCESS_PROTOCOL mConfigAccess;
|
||||||
|
|
||||||
|
//
|
||||||
|
// The handle representing our list of packages after installation.
|
||||||
|
//
|
||||||
|
STATIC EFI_HII_HANDLE mInstalledPackages;
|
||||||
|
|
||||||
|
//
|
||||||
|
// The arrays below constitute our HII package list. They are auto-generated by
|
||||||
|
// the VFR compiler and linked into the driver image during the build.
|
||||||
|
//
|
||||||
|
// - The strings package receives its C identifier from the driver's BASE_NAME,
|
||||||
|
// plus "Strings".
|
||||||
|
//
|
||||||
|
// - The forms package receives its C identifier from the VFR file's basename,
|
||||||
|
// plus "Bin".
|
||||||
|
//
|
||||||
|
//
|
||||||
|
extern UINT8 PlatformDxeStrings[];
|
||||||
|
extern UINT8 PlatformFormsBin[];
|
||||||
|
|
||||||
|
|
||||||
|
STATIC
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
ExtractConfig (
|
||||||
|
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
|
||||||
|
IN CONST EFI_STRING Request,
|
||||||
|
OUT EFI_STRING *Progress,
|
||||||
|
OUT EFI_STRING *Results
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
STATIC
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
RouteConfig (
|
||||||
|
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
|
||||||
|
IN CONST EFI_STRING Configuration,
|
||||||
|
OUT EFI_STRING *Progress
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
STATIC
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
Callback (
|
||||||
|
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
|
||||||
|
IN EFI_BROWSER_ACTION Action,
|
||||||
|
IN EFI_QUESTION_ID QuestionId,
|
||||||
|
IN UINT8 Type,
|
||||||
|
IN OUT EFI_IFR_TYPE_VALUE *Value,
|
||||||
|
OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Load and execute the platform configuration.
|
Load and execute the platform configuration.
|
||||||
|
|
||||||
@ -64,6 +182,8 @@ ExecutePlatformConfig (
|
|||||||
@param[in] SystemTable Pointer to SystemTable.
|
@param[in] SystemTable Pointer to SystemTable.
|
||||||
|
|
||||||
@retval EFI_SUCESS Driver has loaded successfully.
|
@retval EFI_SUCESS Driver has loaded successfully.
|
||||||
|
@retval EFI_OUT_OF_RESOURCES Failed to install HII packages.
|
||||||
|
@return Error codes from lower level functions.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
@ -73,8 +193,48 @@ PlatformInit (
|
|||||||
IN EFI_SYSTEM_TABLE *SystemTable
|
IN EFI_SYSTEM_TABLE *SystemTable
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
|
||||||
ExecutePlatformConfig ();
|
ExecutePlatformConfig ();
|
||||||
|
|
||||||
|
mConfigAccess.ExtractConfig = &ExtractConfig;
|
||||||
|
mConfigAccess.RouteConfig = &RouteConfig;
|
||||||
|
mConfigAccess.Callback = &Callback;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Declare ourselves suitable for HII communication.
|
||||||
|
//
|
||||||
|
Status = gBS->InstallMultipleProtocolInterfaces (&ImageHandle,
|
||||||
|
&gEfiDevicePathProtocolGuid, &mPkgDevicePath,
|
||||||
|
&gEfiHiiConfigAccessProtocolGuid, &mConfigAccess,
|
||||||
|
NULL);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Publish the HII package list to HII Database.
|
||||||
|
//
|
||||||
|
mInstalledPackages = HiiAddPackages (
|
||||||
|
&gEfiCallerIdGuid, // PackageListGuid
|
||||||
|
ImageHandle, // associated DeviceHandle
|
||||||
|
PlatformDxeStrings, // 1st package
|
||||||
|
PlatformFormsBin, // 2nd package
|
||||||
|
NULL // terminator
|
||||||
|
);
|
||||||
|
if (mInstalledPackages == NULL) {
|
||||||
|
Status = EFI_OUT_OF_RESOURCES;
|
||||||
|
goto UninstallProtocols;
|
||||||
|
}
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
|
|
||||||
|
UninstallProtocols:
|
||||||
|
gBS->UninstallMultipleProtocolInterfaces (ImageHandle,
|
||||||
|
&gEfiDevicePathProtocolGuid, &mPkgDevicePath,
|
||||||
|
&gEfiHiiConfigAccessProtocolGuid, &mConfigAccess,
|
||||||
|
NULL);
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -90,5 +250,10 @@ PlatformUnload (
|
|||||||
IN EFI_HANDLE ImageHandle
|
IN EFI_HANDLE ImageHandle
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
HiiRemovePackages (mInstalledPackages);
|
||||||
|
gBS->UninstallMultipleProtocolInterfaces (ImageHandle,
|
||||||
|
&gEfiDevicePathProtocolGuid, &mPkgDevicePath,
|
||||||
|
&gEfiHiiConfigAccessProtocolGuid, &mConfigAccess,
|
||||||
|
NULL);
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
24
OvmfPkg/PlatformDxe/Platform.h
Normal file
24
OvmfPkg/PlatformDxe/Platform.h
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
/** @file
|
||||||
|
This driver effectuates OVMF's platform configuration settings and exposes
|
||||||
|
them via HII.
|
||||||
|
|
||||||
|
Copyright (C) 2014, Red Hat, Inc.
|
||||||
|
|
||||||
|
This program and the accompanying materials are licensed and made available
|
||||||
|
under the terms and conditions of the BSD License which accompanies this
|
||||||
|
distribution. The full text of the license may be found at
|
||||||
|
http://opensource.org/licenses/bsd-license.php
|
||||||
|
|
||||||
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT
|
||||||
|
WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||||
|
**/
|
||||||
|
|
||||||
|
#ifndef _PLATFORM_H_
|
||||||
|
#define _PLATFORM_H_
|
||||||
|
|
||||||
|
//
|
||||||
|
// Macro and type definitions that connect the form with the HII driver code.
|
||||||
|
//
|
||||||
|
#define FORMID_MAIN_FORM 1
|
||||||
|
|
||||||
|
#endif // _PLATFORM_H_
|
@ -26,7 +26,9 @@
|
|||||||
|
|
||||||
[Sources]
|
[Sources]
|
||||||
Platform.c
|
Platform.c
|
||||||
|
Platform.uni
|
||||||
PlatformConfig.c
|
PlatformConfig.c
|
||||||
|
PlatformForms.vfr
|
||||||
|
|
||||||
[Packages]
|
[Packages]
|
||||||
MdePkg/MdePkg.dec
|
MdePkg/MdePkg.dec
|
||||||
@ -36,6 +38,8 @@
|
|||||||
[LibraryClasses]
|
[LibraryClasses]
|
||||||
BaseMemoryLib
|
BaseMemoryLib
|
||||||
DebugLib
|
DebugLib
|
||||||
|
DevicePathLib
|
||||||
|
HiiLib
|
||||||
MemoryAllocationLib
|
MemoryAllocationLib
|
||||||
UefiBootServicesTableLib
|
UefiBootServicesTableLib
|
||||||
UefiLib
|
UefiLib
|
||||||
@ -46,9 +50,14 @@
|
|||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution
|
gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution
|
gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution
|
||||||
|
|
||||||
|
[Protocols]
|
||||||
|
gEfiDevicePathProtocolGuid ## PRODUCES
|
||||||
|
gEfiHiiConfigAccessProtocolGuid ## PRODUCES
|
||||||
|
|
||||||
[Guids]
|
[Guids]
|
||||||
gOvmfPlatformConfigGuid
|
gOvmfPlatformConfigGuid
|
||||||
|
|
||||||
[Depex]
|
[Depex]
|
||||||
|
gEfiHiiDatabaseProtocolGuid AND
|
||||||
gEfiVariableArchProtocolGuid AND
|
gEfiVariableArchProtocolGuid AND
|
||||||
gEfiVariableWriteArchProtocolGuid
|
gEfiVariableWriteArchProtocolGuid
|
||||||
|
BIN
OvmfPkg/PlatformDxe/Platform.uni
Normal file
BIN
OvmfPkg/PlatformDxe/Platform.uni
Normal file
Binary file not shown.
38
OvmfPkg/PlatformDxe/PlatformForms.vfr
Normal file
38
OvmfPkg/PlatformDxe/PlatformForms.vfr
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
// *++
|
||||||
|
//
|
||||||
|
// Copyright (C) 2014, Red Hat, Inc.
|
||||||
|
// Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
|
||||||
|
//
|
||||||
|
// This program and the accompanying materials are licensed and made available
|
||||||
|
// under the terms and conditions of the BSD License which accompanies this
|
||||||
|
// distribution. The full text of the license may be found at
|
||||||
|
// http://opensource.org/licenses/bsd-license.php
|
||||||
|
//
|
||||||
|
// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR
|
||||||
|
// IMPLIED.
|
||||||
|
//
|
||||||
|
// Module Name:
|
||||||
|
//
|
||||||
|
// PlatformForms.vfr
|
||||||
|
//
|
||||||
|
// Abstract:
|
||||||
|
//
|
||||||
|
// Form definitions for exposing some of OVMF's platform knobs via HII.
|
||||||
|
//
|
||||||
|
// --*/
|
||||||
|
|
||||||
|
#include <Guid/OvmfPlatformConfig.h>
|
||||||
|
#include "Platform.h"
|
||||||
|
|
||||||
|
formset
|
||||||
|
guid = OVMF_PLATFORM_CONFIG_GUID,
|
||||||
|
title = STRING_TOKEN(STR_FORMSET_TITLE),
|
||||||
|
help = STRING_TOKEN(STR_FORMSET_HELP),
|
||||||
|
|
||||||
|
form
|
||||||
|
formid = FORMID_MAIN_FORM,
|
||||||
|
title = STRING_TOKEN(STR_MAIN_FORM_TITLE);
|
||||||
|
endform;
|
||||||
|
|
||||||
|
endformset;
|
Loading…
x
Reference in New Issue
Block a user