We cannot entirely eliminate the manual boot script building in this driver, as it also programs lower-level chipset registers (SMI_EN, GEN_PMCON_1) at S3 resume, not just registers exposed via fw_cfg. We can nonetheless replace the manually built opcodes for the latter class of registers with QemuFwCfgS3Lib function calls. We preserve the ordering between the two sets of registers (low-level chipset first, fw_cfg second). This patch demonstrates that manual handling of S3SaveState protocol installation can be combined with QemuFwCfgS3Lib, even without upsetting the original order between boot script fragments. An S3SaveState notify function running at TPL_CALLBACK can safely queue another S3SaveState notify function at TPL_CALLBACK with QemuFwCfgS3CallWhenBootScriptReady(). 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>
47 lines
1.3 KiB
C
47 lines
1.3 KiB
C
/**@file
|
|
Negotiate SMI features with QEMU, and configure UefiCpuPkg/PiSmmCpuDxeSmm
|
|
accordingly.
|
|
|
|
Copyright (C) 2016-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.
|
|
**/
|
|
|
|
#ifndef __SMI_FEATURES_H__
|
|
#define __SMI_FEATURES_H__
|
|
|
|
#include <Protocol/S3SaveState.h>
|
|
|
|
/**
|
|
Negotiate SMI features with QEMU.
|
|
|
|
@retval FALSE If SMI feature negotiation is not supported by QEMU. This is
|
|
not an error, it just means that SaveSmiFeatures() should not
|
|
be called.
|
|
|
|
@retval TRUE SMI feature negotiation is supported, and it has completed
|
|
successfully as well. (Failure to negotiate is a fatal error
|
|
and the function never returns in that case.)
|
|
**/
|
|
BOOLEAN
|
|
NegotiateSmiFeatures (
|
|
VOID
|
|
);
|
|
|
|
/**
|
|
Append a boot script fragment that will re-select the previously negotiated
|
|
SMI features during S3 resume.
|
|
**/
|
|
VOID
|
|
SaveSmiFeatures (
|
|
VOID
|
|
);
|
|
|
|
#endif
|