OvmfPkg/QemuFwCfgS3Lib: add initial PEI and DXE fw_cfg library instances

This patch introduces PeiQemuFwCfgS3LibFwCfg, a limited functionality
QemuFwCfgS3Lib instance, for PEI phase modules.

The patch also introduces DxeQemuFwCfgS3LibFwCfg, a full functionality
QemuFwCfgS3Lib instance, for DXE_DRIVER and DXE_RUNTIME_DRIVER modules.

These library instances share the QemuFwCfgS3Enabled() function. The
function actually uses fw_cfg; the implementation is copied from
"OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLib.c".

The library instances will diverge in the following patches.

Cc: Jordan Justen <jordan.l.justen@intel.com>
Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=394
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
This commit is contained in:
Laszlo Ersek 2017-02-22 02:40:32 +01:00
parent ad223a1c54
commit 5e4d5b1087
3 changed files with 127 additions and 0 deletions

View File

@ -0,0 +1,38 @@
## @file
# Full functionality QemuFwCfgS3Lib instance, for DXE phase modules.
#
# Copyright (C) 2017, 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.
##
[Defines]
INF_VERSION = 1.25
BASE_NAME = DxeQemuFwCfgS3LibFwCfg
FILE_GUID = C5DE76EB-E8DE-4057-A487-C5A09AB039AB
MODULE_TYPE = DXE_DRIVER
VERSION_STRING = 1.0
LIBRARY_CLASS = QemuFwCfgS3Lib|DXE_DRIVER DXE_RUNTIME_DRIVER
#
# The following information is for reference only and not required by the build
# tools.
#
# VALID_ARCHITECTURES = IA32 X64 ARM AARCH64 IPF EBC
#
[Sources]
QemuFwCfgS3PeiDxe.c
[Packages]
MdePkg/MdePkg.dec
OvmfPkg/OvmfPkg.dec
[LibraryClasses]
QemuFwCfgLib

View File

@ -0,0 +1,41 @@
## @file
# Limited functionality QemuFwCfgS3Lib instance, for PEI phase modules.
#
# QemuFwCfgS3Enabled() queries S3 enablement via fw_cfg. Other library APIs
# will report lack of support.
#
# Copyright (C) 2017, 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.
##
[Defines]
INF_VERSION = 1.25
BASE_NAME = PeiQemuFwCfgS3LibFwCfg
FILE_GUID = DD8D28B4-C1DC-4CAF-BB93-074BE80DAE6D
MODULE_TYPE = PEIM
VERSION_STRING = 1.0
LIBRARY_CLASS = QemuFwCfgS3Lib|PEIM
#
# The following information is for reference only and not required by the build
# tools.
#
# VALID_ARCHITECTURES = IA32 X64 ARM AARCH64 IPF EBC
#
[Sources]
QemuFwCfgS3PeiDxe.c
[Packages]
MdePkg/MdePkg.dec
OvmfPkg/OvmfPkg.dec
[LibraryClasses]
QemuFwCfgLib

View File

@ -0,0 +1,48 @@
/** @file
Shared code for the PEI fw_cfg and DXE fw_cfg instances of the QemuFwCfgS3Lib
class.
Copyright (C) 2017, 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.
**/
#include <Library/QemuFwCfgLib.h>
#include <Library/QemuFwCfgS3Lib.h>
/**
Determine if S3 support is explicitly enabled.
@retval TRUE If S3 support is explicitly enabled. Other functions in this
library may be called (subject to their individual
restrictions).
FALSE Otherwise. This includes unavailability of the firmware
configuration interface. No other function in this library
must be called.
**/
BOOLEAN
EFIAPI
QemuFwCfgS3Enabled (
VOID
)
{
RETURN_STATUS Status;
FIRMWARE_CONFIG_ITEM FwCfgItem;
UINTN FwCfgSize;
UINT8 SystemStates[6];
Status = QemuFwCfgFindFile ("etc/system-states", &FwCfgItem, &FwCfgSize);
if (Status != RETURN_SUCCESS || FwCfgSize != sizeof SystemStates) {
return FALSE;
}
QemuFwCfgSelectItem (FwCfgItem);
QemuFwCfgReadBytes (sizeof SystemStates, SystemStates);
return (BOOLEAN) (SystemStates[3] & BIT7);
}