| /** @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; | |
| } |