Cc: Jordan Justen <jordan.l.justen@intel.com> Cc: Laszlo Ersek <lersek@redhat.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Dandan Bi <dandan.bi@intel.com> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
		
			
				
	
	
		
			87 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			3.8 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.
 | |
| 
 | |
|   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/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;
 | |
| }
 |