80 lines
3.4 KiB
C
80 lines
3.4 KiB
C
/** @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.
|
|
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
**/
|
|
|
|
#include <Library/QemuFwCfgS3Lib.h>
|
|
|
|
/**
|
|
Install the client module's FW_CFG_BOOT_SCRIPT_CALLBACK_FUNCTION callback for
|
|
when the production of ACPI S3 Boot Script opcodes becomes possible.
|
|
|
|
Take ownership of the client-provided Context, and pass it to the callback
|
|
function, when the latter is invoked.
|
|
|
|
Allocate scratch space for those ACPI S3 Boot Script opcodes to work upon
|
|
that the client will produce in the callback function.
|
|
|
|
@param[in] Callback FW_CFG_BOOT_SCRIPT_CALLBACK_FUNCTION to invoke
|
|
when the production of ACPI S3 Boot Script
|
|
opcodes becomes possible. Callback() may be
|
|
called immediately from
|
|
QemuFwCfgS3CallWhenBootScriptReady().
|
|
|
|
@param[in,out] Context Client-provided data structure for the
|
|
Callback() callback function to consume.
|
|
|
|
If Context points to dynamically allocated
|
|
memory, then Callback() must release it.
|
|
|
|
If Context points to dynamically allocated
|
|
memory, and
|
|
QemuFwCfgS3CallWhenBootScriptReady() returns
|
|
successfully, then the caller of
|
|
QemuFwCfgS3CallWhenBootScriptReady() must
|
|
neither dereference nor even evaluate Context
|
|
any longer, as ownership of the referenced area
|
|
has been transferred to Callback().
|
|
|
|
@param[in] ScratchBufferSize The size of the scratch buffer that will hold,
|
|
in reserved memory, all client data read,
|
|
written, and checked by the ACPI S3 Boot Script
|
|
opcodes produced by Callback().
|
|
|
|
@retval RETURN_UNSUPPORTED The library instance does not support this
|
|
function.
|
|
|
|
@retval RETURN_NOT_FOUND The fw_cfg DMA interface to QEMU is
|
|
unavailable.
|
|
|
|
@retval RETURN_BAD_BUFFER_SIZE ScratchBufferSize is too large.
|
|
|
|
@retval RETURN_OUT_OF_RESOURCES Memory allocation failed.
|
|
|
|
@retval RETURN_SUCCESS Callback() has been installed, and the
|
|
ownership of Context has been transferred.
|
|
Reserved memory has been allocated for the
|
|
scratch buffer.
|
|
|
|
A successful invocation of
|
|
QemuFwCfgS3CallWhenBootScriptReady() cannot
|
|
be rolled back.
|
|
|
|
@return Error codes from underlying functions.
|
|
**/
|
|
RETURN_STATUS
|
|
EFIAPI
|
|
QemuFwCfgS3CallWhenBootScriptReady (
|
|
IN FW_CFG_BOOT_SCRIPT_CALLBACK_FUNCTION *Callback,
|
|
IN OUT VOID *Context, OPTIONAL
|
|
IN UINTN ScratchBufferSize
|
|
)
|
|
{
|
|
return RETURN_UNSUPPORTED;
|
|
}
|