audk/OvmfPkg/Library
Laszlo Ersek 9d7051b7a0 OvmfPkg: install DxeSmmReadyToLock in PlatformBdsLib
Currently we have the following call chain in OVMF:

  PlatformBdsPolicyBehavior()
                            [OvmfPkg/Library/PlatformBdsLib/BdsPlatform.c]
    //
    // signals End-of-Dxe
    //
    OnEndOfDxe()                      [OvmfPkg/AcpiS3SaveDxe/AcpiS3Save.c]
      S3Ready()                       [OvmfPkg/AcpiS3SaveDxe/AcpiS3Save.c]
        //
        // 1. saves S3 state
        //

        SaveS3BootScript()            [OvmfPkg/AcpiS3SaveDxe/AcpiS3Save.c]
          //
          // 2. saves INFO opcode in S3 boot script
          // 3. installs DxeSmmReadyToLockProtocol
          //

The bottom of this call chain was introduced in git commit 5a217a06 (SVN
r15305, "OvmfPkg: S3 Suspend: save boot script after ACPI context"). That
patch was necessary because there was no other way, due to GenericBdsLib
calling S3Save() from BdsLibBootViaBootOption(), to perform the necessary
steps in the right order:
- save S3 system information,
- save a final (well, only) boot script opcode,
- signal DxeSmmReadyToLock, closing the boot script, and locking down
  LockBox and SMM.

The GenericBdsLib bug has been fixed in the previous patch -- the call in
BdsLibBootViaBootOption() has been eliminated.

Therefore, hoist the SaveS3BootScript() code, and call, from
OvmfPkg/AcpiS3SaveDxe, to PlatformBdsLib:

  PlatformBdsPolicyBehavior()
                            [OvmfPkg/Library/PlatformBdsLib/BdsPlatform.c]
    //
    // signals End-of-Dxe
    //
    OnEndOfDxe()                      [OvmfPkg/AcpiS3SaveDxe/AcpiS3Save.c]
      S3Ready()                       [OvmfPkg/AcpiS3SaveDxe/AcpiS3Save.c]
        //
        // 1. saves S3 state
        //

    <---
    SaveS3BootScript()      [OvmfPkg/Library/PlatformBdsLib/BdsPlatform.c]
      //
      // 2. saves INFO opcode in S3 boot script
      // 3. installs DxeSmmReadyToLockProtocol
      //

The installation of DxeSmmReadyToLockProtocol belongs with Platform BDS,
not AcpiS3SaveDxe, and we can now undo the hack in SVN r15305, without
upsetting the relative order of the steps.

Cc: Jordan Justen <jordan.l.justen@intel.com>
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@18037 6f19259b-4bc3-4df7-8a09-765794883524
2015-07-26 08:02:24 +00:00
..
AcpiTimerLib OvmfPkg: extract some bits and port offsets common to Q35 and I440FX 2015-05-13 09:31:53 +00:00
EmuVariableFvbLib OvmfPkg EMU FVB: Add 2 functions to PlatformFvbLib 2011-01-09 03:51:16 +00:00
LoadLinuxLib OvmfPkg LoadLinuxLib: Convert X64/JumpToKernel.asm to NASM 2014-10-31 20:54:31 +00:00
LockBoxLib OvmfPkg: implement LockBoxLib 2014-03-04 08:03:23 +00:00
NvVarsFileLib Fix VS2013 build failure. 2014-08-13 06:31:08 +00:00
PlatformBdsLib OvmfPkg: install DxeSmmReadyToLock in PlatformBdsLib 2015-07-26 08:02:24 +00:00
PlatformDebugLibIoPort OvmfPkg: Update PlatformBaseDebugLibIoPort library 2015-02-06 06:38:37 +00:00
PlatformFvbLibNull OvmfPkg EMU FVB: Add 2 functions to PlatformFvbLib 2011-01-09 03:51:16 +00:00
PlatformSecureLib OvmfPkg: Add custom mode setup if the Secure Boot build option is specified. 2012-04-04 17:35:06 +00:00
QemuBootOrderLib OvmfPkg: QemuBootOrderLib: recognize extra PCI root buses 2015-07-14 12:02:44 +00:00
QemuFwCfgLib OvmfPkg: QemuFwCfgLib: avoid "variable set but not used" warning from GCC 2015-07-10 06:46:57 +00:00
ResetSystemLib OvmfPkg ResetSystemLib: Fix VS build error 2013-08-19 04:15:26 +00:00
SerializeVariablesLib OvmfPkg/SerializeVariablesLib: ignore secure variable restore errors 2013-05-28 17:21:37 +00:00
VirtioLib OvmfPkg/Virtio: Removed VirtioReadDevice() / VirtIoWriteDevice() functions 2013-12-11 16:58:39 +00:00
VirtioMmioDeviceLib OvmfPkg/VirtioMmioDeviceLib: Implement VIRTIO_DEVICE_PROTOCOL for VirtIo Devices over MMIO 2013-12-11 16:57:59 +00:00
XenConsoleSerialPortLib OvmfPkg: XenConsoleSerialPortLib: deal with output overflow 2015-03-27 21:25:16 +00:00
XenHypercallLib OvmfPkg: replace strict XenHypercallLib construction with explicit query 2015-03-03 08:13:40 +00:00
XenIoMmioLib ArmVirtualizationPkg: add XenIoMmioLib 2015-02-28 20:34:16 +00:00