mirror of https://github.com/acidanthera/audk.git
MdePkg: Add S3 library interfaces and base implementations
Signed-off-by: jljusten Reviewed-by: mdkinney Reviewed-by: rsun3 Reviewed-by: jyao1 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12222 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
8a96515e88
commit
fe69ac847a
|
@ -0,0 +1,599 @@
|
|||
/** @file
|
||||
Defines library APIs used by modules to save EFI Boot Script Opcodes.
|
||||
These OpCode will be restored by S3 related modules.
|
||||
Note that some of the API defined in the Library class may not
|
||||
be provided in the Framework version library instance, which means some of these
|
||||
APIs cannot be used if the underlying firmware is Framework and not PI.
|
||||
|
||||
Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
|
||||
|
||||
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 _S3_BOOT_SCRIPT_LIB_H_
|
||||
#define _S3_BOOT_SCRIPT_LIB_H_
|
||||
|
||||
#include <Library/BaseLib.h>
|
||||
#include <IndustryStandard/SmBus.h>
|
||||
|
||||
/**
|
||||
Macro that converts PCI Bus, PCI Device, PCI Function and PCI Register to an
|
||||
address that can be passed to the S3 Boot Script Library PCI functions.
|
||||
|
||||
@param Bus PCI Bus number. Range 0..255.
|
||||
@param Device PCI Device number. Range 0..31.
|
||||
@param Function PCI Function number. Range 0..7.
|
||||
@param Register PCI Register number. Range 0..255 for PCI. Range 0..4095
|
||||
for PCI Express.
|
||||
|
||||
@return The encoded PCI address.
|
||||
|
||||
**/
|
||||
#define S3_BOOT_SCRIPT_LIB_PCI_ADDRESS(Bus,Device,Function,Register) \
|
||||
(UINT64) ( \
|
||||
(((UINTN) Bus) << 24) | \
|
||||
(((UINTN) Device) << 16) | \
|
||||
(((UINTN) Function) << 8) | \
|
||||
(((UINTN) (Register)) < 256 ? ((UINTN) (Register)) : (UINT64) (LShiftU64 ((UINT64) (Register), 32))))
|
||||
|
||||
///
|
||||
/// S3 Boot Script Width.
|
||||
///
|
||||
typedef enum {
|
||||
S3BootScriptWidthUint8, ///< 8-bit operation.
|
||||
S3BootScriptWidthUint16, ///< 16-bit operation.
|
||||
S3BootScriptWidthUint32, ///< 32-bit operation.
|
||||
S3BootScriptWidthUint64, ///< 64-bit operation.
|
||||
S3BootScriptWidthFifoUint8, ///< 8-bit FIFO operation.
|
||||
S3BootScriptWidthFifoUint16, ///< 16-bit FIFO operation.
|
||||
S3BootScriptWidthFifoUint32, ///< 32-bit FIFO operation.
|
||||
S3BootScriptWidthFifoUint64, ///< 64-bit FIFO operation.
|
||||
S3BootScriptWidthFillUint8, ///< 8-bit Fill operation.
|
||||
S3BootScriptWidthFillUint16, ///< 16-bit Fill operation.
|
||||
S3BootScriptWidthFillUint32, ///< 32-bit Fill operation.
|
||||
S3BootScriptWidthFillUint64, ///< 64-bit Fill operation.
|
||||
S3BootScriptWidthMaximum
|
||||
} S3_BOOT_SCRIPT_LIB_WIDTH;
|
||||
|
||||
/**
|
||||
Save I/O write to boot script.
|
||||
|
||||
@param[in] Width The width of the I/O operations.
|
||||
@param[in] Address The base address of the I/O operations.
|
||||
@param[in] Count The number of I/O operations to perform.
|
||||
@param[in] Buffer The source buffer from which to write data.
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table to perform
|
||||
the operation.
|
||||
@retval RETURN_SUCCESS The opcode was added.
|
||||
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSaveIoWrite (
|
||||
IN S3_BOOT_SCRIPT_LIB_WIDTH Width,
|
||||
IN UINT64 Address,
|
||||
IN UINTN Count,
|
||||
IN VOID *Buffer
|
||||
);
|
||||
|
||||
/**
|
||||
Adds a record for an I/O modify operation into a S3 boot script table.
|
||||
|
||||
@param[in] Width The width of the I/O operations.
|
||||
@param[in] Address The base address of the I/O operations.
|
||||
@param[in] Data A pointer to the data to be OR-ed.
|
||||
@param[in] DataMask A pointer to the data mask to be AND-ed with the data
|
||||
read from the register.
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table to perform
|
||||
the operation.
|
||||
@retval RETURN_SUCCESS The opcode was added.
|
||||
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSaveIoReadWrite (
|
||||
IN S3_BOOT_SCRIPT_LIB_WIDTH Width,
|
||||
IN UINT64 Address,
|
||||
IN VOID *Data,
|
||||
IN VOID *DataMask
|
||||
);
|
||||
|
||||
/**
|
||||
Adds a record for a memory write operation into a specified boot script table.
|
||||
|
||||
@param[in] Width The width of the I/O operations.
|
||||
@param[in] Address The base address of the memory operations
|
||||
@param[in] Count The number of memory operations to perform.
|
||||
@param[in] Buffer The source buffer from which to write the data.
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table to perform
|
||||
the operation.
|
||||
@retval RETURN_SUCCESS The opcode was added.
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSaveMemWrite (
|
||||
IN S3_BOOT_SCRIPT_LIB_WIDTH Width,
|
||||
IN UINT64 Address,
|
||||
IN UINTN Count,
|
||||
IN VOID *Buffer
|
||||
);
|
||||
|
||||
/**
|
||||
Adds a record for a memory modify operation into a specified boot script table.
|
||||
|
||||
@param[in] Width The width of the I/O operations.
|
||||
@param[in] Address The base address of the memory operations. Address needs
|
||||
alignment, if required
|
||||
@param[in] Data A pointer to the data to be OR-ed.
|
||||
@param[in] DataMask A pointer to the data mask to be AND-ed with the data
|
||||
read from the register.
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table to perform
|
||||
the operation.
|
||||
@retval RETURN_SUCCESS The opcode was added.
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSaveMemReadWrite (
|
||||
IN S3_BOOT_SCRIPT_LIB_WIDTH Width,
|
||||
IN UINT64 Address,
|
||||
IN VOID *Data,
|
||||
IN VOID *DataMask
|
||||
);
|
||||
|
||||
/**
|
||||
Adds a record for a PCI configuration space write operation into a specified boot script table.
|
||||
|
||||
@param[in] Width The width of the I/O operations.
|
||||
@param[in] Address The address within the PCI configuration space.
|
||||
@param[in] Count The number of PCI operations to perform.
|
||||
@param[in] Buffer The source buffer from which to write the data.
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table to perform
|
||||
the operation.
|
||||
@retval RETURN_SUCCESS The opcode was added.
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSavePciCfgWrite (
|
||||
IN S3_BOOT_SCRIPT_LIB_WIDTH Width,
|
||||
IN UINT64 Address,
|
||||
IN UINTN Count,
|
||||
IN VOID *Buffer
|
||||
);
|
||||
|
||||
/**
|
||||
Adds a record for a PCI configuration space modify operation into a specified boot script table.
|
||||
|
||||
@param[in] Width The width of the I/O operations.
|
||||
@param[in] Address The address within the PCI configuration space.
|
||||
@param[in] Data A pointer to the data to be OR-ed.The size depends on Width.
|
||||
@param[in] DataMask A pointer to the data mask to be AND-ed.
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table to perform
|
||||
the operation.
|
||||
@retval RETURN__SUCCESS The opcode was added.
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSavePciCfgReadWrite (
|
||||
IN S3_BOOT_SCRIPT_LIB_WIDTH Width,
|
||||
IN UINT64 Address,
|
||||
IN VOID *Data,
|
||||
IN VOID *DataMask
|
||||
);
|
||||
|
||||
/**
|
||||
Adds a record for a PCI configuration space modify operation into a specified boot script table.
|
||||
|
||||
@param[in] Width The width of the I/O operations.
|
||||
@param[in] Segment The PCI segment number for Address.
|
||||
@param[in] Address The address within the PCI configuration space.
|
||||
@param[in] Count The number of PCI operations to perform.
|
||||
@param[in] Buffer The source buffer from which to write the data.
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table to perform
|
||||
the operation.
|
||||
@retval RETURN_SUCCESS The opcode was added.
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSavePciCfg2Write (
|
||||
IN S3_BOOT_SCRIPT_LIB_WIDTH Width,
|
||||
IN UINT16 Segment,
|
||||
IN UINT64 Address,
|
||||
IN UINTN Count,
|
||||
IN VOID *Buffer
|
||||
);
|
||||
|
||||
/**
|
||||
Adds a record for a PCI configuration space modify operation into a specified boot script table.
|
||||
|
||||
@param[in] Width The width of the I/O operations.
|
||||
@param[in] Segment The PCI segment number for Address.
|
||||
@param[in] Address The address within the PCI configuration space.
|
||||
@param[in] Data A pointer to the data to be OR-ed. The size depends on Width.
|
||||
@param[in] DataMask A pointer to the data mask to be AND-ed.
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table to perform
|
||||
the operation.
|
||||
@retval RETURN_SUCCESS The opcode was added.
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSavePciCfg2ReadWrite (
|
||||
IN S3_BOOT_SCRIPT_LIB_WIDTH Width,
|
||||
IN UINT16 Segment,
|
||||
IN UINT64 Address,
|
||||
IN VOID *Data,
|
||||
IN VOID *DataMask
|
||||
);
|
||||
|
||||
/**
|
||||
Adds a record for an SMBus command execution into a specified boot script table.
|
||||
|
||||
@param[in] SmBusAddress Address that encodes the SMBUS Slave Address, SMBUS
|
||||
Command, SMBUS Data Length, and PEC.
|
||||
@param[in] Operation Indicates which particular SMBus protocol it will use
|
||||
to execute the SMBus transactions.
|
||||
@param[in] Length A pointer to signify the number of bytes that this
|
||||
operation will do.
|
||||
@param[in] Buffer Contains the value of data to execute to the SMBUS
|
||||
slave device.
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table to perform
|
||||
the operation.
|
||||
@retval RETURN_SUCCESS The opcode was added.
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSaveSmbusExecute (
|
||||
IN UINTN SmBusAddress,
|
||||
IN EFI_SMBUS_OPERATION Operation,
|
||||
IN UINTN *Length,
|
||||
IN VOID *Buffer
|
||||
);
|
||||
|
||||
/**
|
||||
Adds a record for an execution stall on the processor into a specified boot script table.
|
||||
|
||||
@param[in] Duration The duration in microseconds of the stall.
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table to perform
|
||||
the operation.
|
||||
@retval RETURN_SUCCESS The opcode was added.
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSaveStall (
|
||||
IN UINTN Duration
|
||||
);
|
||||
|
||||
/**
|
||||
Adds a record for an execution stall on the processor into a specified boot script table.
|
||||
|
||||
@param[in] EntryPoint The entry point of the code to be dispatched.
|
||||
@param[in] Context The argument to be passed into the EntryPoint of the code
|
||||
to be dispatched.
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table to perform
|
||||
the operation.
|
||||
@retval RETURN_SUCCESS The opcode was added.
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSaveDispatch2 (
|
||||
IN VOID *EntryPoint,
|
||||
IN VOID *Context
|
||||
);
|
||||
|
||||
/**
|
||||
Adds a record for dispatching specified arbitrary code into a specified boot script table.
|
||||
|
||||
@param[in] EntryPoint The entry point of the code to be dispatched.
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table to perform
|
||||
the operation.
|
||||
@retval RETURN_SUCCESS The opcode was added.
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSaveDispatch (
|
||||
IN VOID *EntryPoint
|
||||
);
|
||||
|
||||
/**
|
||||
Adds a record for memory reads of the memory location and continues when the exit
|
||||
criteria is satisfied, or after a defined duration.
|
||||
|
||||
@param[in] Width The width of the memory operations.
|
||||
@param[in] Address The base address of the memory operations.
|
||||
@param[in] BitMask A pointer to the bit mask to be AND-ed with the data read
|
||||
from the register.
|
||||
@param[in] BitValue A pointer to the data value after to be Masked.
|
||||
@param[in] Duration The duration in microseconds of the stall.
|
||||
@param[in] LoopTimes The times of the register polling.
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table to perform
|
||||
the operation.
|
||||
@retval RETURN_SUCCESS The opcode was added.
|
||||
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSaveMemPoll (
|
||||
IN S3_BOOT_SCRIPT_LIB_WIDTH Width,
|
||||
IN UINT64 Address,
|
||||
IN VOID *BitMask,
|
||||
IN VOID *BitValue,
|
||||
IN UINTN Duration,
|
||||
IN UINTN LoopTimes
|
||||
);
|
||||
|
||||
/**
|
||||
Store arbitrary information in the boot script table. This opcode is a no-op on
|
||||
dispatch and is only used for debugging script issues.
|
||||
|
||||
@param[in] InformationLength Length of the data in bytes
|
||||
@param[in] Information Information to be logged in the boot scrpit
|
||||
|
||||
@retval RETURN_UNSUPPORTED In runtime, this method is not supported.
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table to perform
|
||||
the operation.
|
||||
@retval RETURN_SUCCESS The opcode was added.
|
||||
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSaveInformation (
|
||||
IN UINT32 InformationLength,
|
||||
IN VOID *Information
|
||||
);
|
||||
/**
|
||||
Adds a record for I/O reads the I/O location and continues when the exit criteria
|
||||
is satisfied, or after a defined duration.
|
||||
|
||||
@param Width The width of the I/O operations.
|
||||
@param Address The base address of the I/O operations.
|
||||
@param Data The comparison value used for the polling exit criteria.
|
||||
@param DataMask The mask used for the polling criteria. The bits in
|
||||
the bytes below Width which are zero in Data are
|
||||
ignored when polling the memory address.
|
||||
@param Delay The number of 100ns units to poll. Note that timer
|
||||
available may be of insufficient granularity, so the
|
||||
delay may be longer.
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table to perform the
|
||||
operation.
|
||||
@retval RETURN_SUCCESS The opcode was added.
|
||||
@note The FRAMEWORK version implementation does not support this API
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSaveIoPoll (
|
||||
IN S3_BOOT_SCRIPT_LIB_WIDTH Width,
|
||||
IN UINT64 Address,
|
||||
IN VOID *Data,
|
||||
IN VOID *DataMask,
|
||||
IN UINT64 Delay
|
||||
);
|
||||
|
||||
/**
|
||||
Adds a record for PCI configuration space reads and continues when the exit
|
||||
criteria is satisfied ,or after a defined duration.
|
||||
|
||||
@param Width The width of the I/O operations.
|
||||
@param Address The address within the PCI configuration space.
|
||||
@param Data The comparison value used for the polling exit
|
||||
criteria.
|
||||
@param DataMask Mask used for the polling criteria. The bits in
|
||||
the bytes below Width which are zero in Data are
|
||||
ignored when polling the memory address.
|
||||
@param Delay The number of 100ns units to poll. Note that timer
|
||||
available may be of insufficient granularity, so the
|
||||
delay may be longer.
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table to perform the
|
||||
operation.
|
||||
@retval RETURN_SUCCESS The opcode was added.
|
||||
@note The FRAMEWORK version implementation does not support this API
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSavePciPoll (
|
||||
IN S3_BOOT_SCRIPT_LIB_WIDTH Width,
|
||||
IN UINT64 Address,
|
||||
IN VOID *Data,
|
||||
IN VOID *DataMask,
|
||||
IN UINT64 Delay
|
||||
);
|
||||
/**
|
||||
Adds a record for PCI configuration space reads and continues when the exit criteria
|
||||
is satisfied, or after a defined duration.
|
||||
|
||||
@param Width The width of the I/O operations.
|
||||
@param Segment The PCI segment number for Address.
|
||||
@param Address The address within the PCI configuration space.
|
||||
@param Data The comparison value used for the polling exit
|
||||
criteria.
|
||||
@param DataMask Mask used for the polling criteria. The bits in
|
||||
the bytes below Width which are zero
|
||||
in Data are ignored when polling the memory address
|
||||
@param Delay The number of 100ns units to poll. Note that timer
|
||||
available may be of insufficient granularity so the delay
|
||||
may be longer.
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table to perform the
|
||||
operation.
|
||||
@retval RETURN_SUCCESS The opcode was added.
|
||||
@note A known Limitations in the implementation: When interpreting the opcode
|
||||
EFI_BOOT_SCRIPT_PCI_CONFIG2_WRITE_OPCODE, EFI_BOOT_SCRIPT_PCI_CONFIG2_READ_WRITE_OPCODE
|
||||
and EFI_BOOT_SCRIPT_PCI_CONFIG2_POLL_OPCODE, the 'Segment' parameter is assumed as
|
||||
Zero, or else, assert.
|
||||
The FRAMEWORK version implementation does not support this API.
|
||||
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSavePci2Poll (
|
||||
IN S3_BOOT_SCRIPT_LIB_WIDTH Width,
|
||||
IN UINT16 Segment,
|
||||
IN UINT64 Address,
|
||||
IN VOID *Data,
|
||||
IN VOID *DataMask,
|
||||
IN UINT64 Delay
|
||||
);
|
||||
/**
|
||||
Save ASCII string information specified by Buffer to boot script with opcode
|
||||
EFI_BOOT_SCRIPT_INFORMATION_OPCODE.
|
||||
|
||||
@param[in] String The Null-terminated ASCII string to store into the S3 boot
|
||||
script table.
|
||||
|
||||
@retval RETURN_UNSUPPORTED In runtime, this method is not supported.
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table to perform
|
||||
the operation.
|
||||
@retval RETURN_SUCCESS The opcode was added.
|
||||
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSaveInformationAsciiString (
|
||||
IN CONST CHAR8 *String
|
||||
);
|
||||
|
||||
/**
|
||||
This is an function to close the S3 boot script table. The function could only
|
||||
be called in BOOT time phase. To comply with the Framework spec definition on
|
||||
EFI_BOOT_SCRIPT_SAVE_PROTOCOL.CloseTable(), this function will fulfill following things:
|
||||
1. Closes the specified boot script table
|
||||
2. It allocates a new memory pool to duplicate all the boot scripts in the specified table.
|
||||
Once this function is called, the table maintained by the library will be destroyed
|
||||
after it is copied into the allocated pool.
|
||||
3. Any attempts to add a script record after calling this function will cause a
|
||||
new table to be created by the library.
|
||||
4. The base address of the allocated pool will be returned in Address. Note that
|
||||
after using the boot script table, the CALLER is responsible for freeing the
|
||||
pool that is allocated by this function.
|
||||
|
||||
In Spec PI1.1, this EFI_BOOT_SCRIPT_SAVE_PROTOCOL.CloseTable() is retired. This
|
||||
API is supplied here to meet the requirements of the Framework Spec.
|
||||
|
||||
If anyone does call CloseTable() on a real platform, then the caller is responsible
|
||||
for figuring out how to get the script to run on an S3 resume because the boot script
|
||||
maintained by the lib will be destroyed.
|
||||
|
||||
@return the base address of the new copy of the boot script tble.
|
||||
|
||||
**/
|
||||
UINT8*
|
||||
EFIAPI
|
||||
S3BootScriptCloseTable (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Executes the S3 boot script table.
|
||||
|
||||
@retval RETURN_SUCCESS The boot script table was executed successfully.
|
||||
@retval RETURN_UNSUPPORTED Invalid script table or opcode.
|
||||
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptExecute (
|
||||
VOID
|
||||
);
|
||||
/**
|
||||
Move the last boot script entry to the position
|
||||
|
||||
@param BeforeOrAfter Specifies whether the opcode is stored before
|
||||
(TRUE) or after (FALSE) the positionin the boot
|
||||
script table specified by Position. If Position
|
||||
is NULL or points to NULL then the new opcode is
|
||||
inserted at the beginning of the table (if TRUE)
|
||||
or end of the table (if FALSE).
|
||||
@param Position On entry, specifies the position in the boot script
|
||||
table where the opcode will be inserted, either
|
||||
before or after, depending on BeforeOrAfter. On
|
||||
exit, specifies the position of the inserted opcode
|
||||
in the boot script table.
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES The table is not available.
|
||||
@retval RETURN_INVALID_PARAMETER The Position is not a valid position in the
|
||||
boot script table.
|
||||
@retval RETURN_SUCCESS The opcode was inserted.
|
||||
@note The FRAMEWORK version implementation does not support this API.
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptMoveLastOpcode (
|
||||
IN BOOLEAN BeforeOrAfter,
|
||||
IN OUT VOID **Position OPTIONAL
|
||||
);
|
||||
/**
|
||||
Find a label within the boot script table and, if not present, optionally create it.
|
||||
|
||||
@param BeforeOrAfter Specifies whether the opcode is stored before (TRUE)
|
||||
or after (FALSE) the position in the boot script table
|
||||
specified by Position.
|
||||
@param CreateIfNotFound Specifies whether the label will be created if the
|
||||
label does not exists (TRUE) or not (FALSE).
|
||||
@param Position On entry, specifies the position in the boot script
|
||||
table where the opcode will be inserted, either
|
||||
before or after, depending on BeforeOrAfter. On exit,
|
||||
specifies the positionof the inserted opcode in
|
||||
the boot script table.
|
||||
@param Label Points to the label which will be inserted in the
|
||||
boot script table.
|
||||
@retval EFI_SUCCESS The operation succeeded. A record was added into
|
||||
the specified script table.
|
||||
@retval EFI_INVALID_PARAMETER The parameter is illegal or the given boot script
|
||||
is not supported. If the opcode is unknow or not
|
||||
supported because of the PCD Feature Flags.
|
||||
@retval EFI_OUT_OF_RESOURCES There is insufficient memory to store the boot script.
|
||||
@note The FRAMEWORK version implementation does not support this API
|
||||
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptLabel (
|
||||
IN BOOLEAN BeforeOrAfter,
|
||||
IN BOOLEAN CreateIfNotFound,
|
||||
IN OUT VOID **Position OPTIONAL,
|
||||
IN CONST CHAR8 *Label
|
||||
);
|
||||
/**
|
||||
Compare two positions in the boot script table and return their relative position.
|
||||
@param Position1 The positions in the boot script table to compare
|
||||
@param Position2 The positions in the boot script table to compare
|
||||
@param RelativePosition On return, points to the result of the comparison
|
||||
|
||||
@retval EFI_SUCCESS The operation succeeded. A record was added into the
|
||||
specified script table.
|
||||
@retval EFI_INVALID_PARAMETER The parameter is illegal or the given boot script
|
||||
is not supported. If the opcode is unknow or not s
|
||||
upported because of the PCD Feature Flags.
|
||||
@retval EFI_OUT_OF_RESOURCES There is insufficient memory to store the boot script.
|
||||
@note The FRAMEWORK version implementation does not support this API
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptCompare (
|
||||
IN UINT8 *Position1,
|
||||
IN UINT8 *Position2,
|
||||
OUT UINTN *RelativePosition
|
||||
);
|
||||
|
||||
#endif
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,455 @@
|
|||
/** @file
|
||||
Smbus Library Services that conduct SMBus transactions and enable the operatation
|
||||
to be replayed during an S3 resume. This library class maps directly on top
|
||||
of the SmbusLib class.
|
||||
|
||||
Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
|
||||
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 __S3_SMBUS_LIB_H__
|
||||
#define __S3_SMBUS_LIB_H__
|
||||
|
||||
/**
|
||||
Executes an SMBUS quick read command, and saves the value in the S3 script to be replayed
|
||||
on S3 resume.
|
||||
|
||||
Executes an SMBUS quick read command on the SMBUS device specified by SmBusAddress.
|
||||
Only the SMBUS slave address field of SmBusAddress is required.
|
||||
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||
If PEC is set in SmBusAddress, then ASSERT().
|
||||
If Command in SmBusAddress is not zero, then ASSERT().
|
||||
If Length in SmBusAddress is not zero, then ASSERT().
|
||||
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||
|
||||
@param[in] SmBusAddress The address that encodes the SMBUS Slave Address,
|
||||
SMBUS Command, SMBUS Data Length, and PEC.
|
||||
@param[out] Status The return status for the executed command.
|
||||
This is an optional parameter and may be NULL.
|
||||
RETURN_SUCCESS The SMBUS command was executed.
|
||||
RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
|
||||
RETURN_DEVICE_ERROR The request was not completed because a failure
|
||||
was recorded in the Host Status Register bit. Device errors are a result
|
||||
of a transaction collision, illegal command field, unclaimed cycle
|
||||
(host initiated), or bus error (collision).
|
||||
RETURN_UNSUPPORTED The SMBus operation is not supported.
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
S3SmBusQuickRead (
|
||||
IN UINTN SmBusAddress,
|
||||
OUT RETURN_STATUS *Status OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Executes an SMBUS quick write command, and saves the value in the S3 script to be replayed
|
||||
on S3 resume.
|
||||
|
||||
Executes an SMBUS quick write command on the SMBUS device specified by SmBusAddress.
|
||||
Only the SMBUS slave address field of SmBusAddress is required.
|
||||
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||
If PEC is set in SmBusAddress, then ASSERT().
|
||||
If Command in SmBusAddress is not zero, then ASSERT().
|
||||
If Length in SmBusAddress is not zero, then ASSERT().
|
||||
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||
|
||||
@param[in] SmBusAddress The address that encodes the SMBUS Slave Address,
|
||||
SMBUS Command, SMBUS Data Length, and PEC.
|
||||
@param[out] Status The return status for the executed command.
|
||||
This is an optional parameter and may be NULL.
|
||||
RETURN_SUCCESS The SMBUS command was executed.
|
||||
RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
|
||||
RETURN_DEVICE_ERROR The request was not completed because a failure
|
||||
was recorded in the Host Status Register bit. Device errors are a result
|
||||
of a transaction collision, illegal command field, unclaimed cycle
|
||||
(host initiated), or bus error (collision).
|
||||
RETURN_UNSUPPORTED The SMBus operation is not supported.
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
S3SmBusQuickWrite (
|
||||
IN UINTN SmBusAddress,
|
||||
OUT RETURN_STATUS *Status OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Executes an SMBUS receive byte command, and saves the value in the S3 script to be replayed
|
||||
on S3 resume.
|
||||
|
||||
Executes an SMBUS receive byte command on the SMBUS device specified by SmBusAddress.
|
||||
Only the SMBUS slave address field of SmBusAddress is required.
|
||||
The byte received from the SMBUS is returned.
|
||||
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||
If Command in SmBusAddress is not zero, then ASSERT().
|
||||
If Length in SmBusAddress is not zero, then ASSERT().
|
||||
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||
|
||||
@param[in] SmBusAddress The address that encodes the SMBUS Slave Address,
|
||||
SMBUS Command, SMBUS Data Length, and PEC.
|
||||
@param[out] Status The return status for the executed command.
|
||||
This is an optional parameter and may be NULL.
|
||||
RETURN_SUCCESS The SMBUS command was executed.
|
||||
RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
|
||||
RETURN_DEVICE_ERROR The request was not completed because a failure
|
||||
was recorded in the Host Status Register bit. Device errors are a result
|
||||
of a transaction collision, illegal command field, unclaimed cycle
|
||||
(host initiated), or bus error (collision).
|
||||
RETURN_CRC_ERROR The checksum is not correct (PEC is incorrect).
|
||||
RETURN_UNSUPPORTED The SMBus operation is not supported.
|
||||
|
||||
@return The byte received from the SMBUS.
|
||||
|
||||
**/
|
||||
UINT8
|
||||
EFIAPI
|
||||
S3SmBusReceiveByte (
|
||||
IN UINTN SmBusAddress,
|
||||
OUT RETURN_STATUS *Status OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Executes an SMBUS send byte command, and saves the value in the S3 script to be replayed
|
||||
on S3 resume.
|
||||
|
||||
Executes an SMBUS send byte command on the SMBUS device specified by SmBusAddress.
|
||||
The byte specified by Value is sent.
|
||||
Only the SMBUS slave address field of SmBusAddress is required. Value is returned.
|
||||
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||
If Command in SmBusAddress is not zero, then ASSERT().
|
||||
If Length in SmBusAddress is not zero, then ASSERT().
|
||||
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||
|
||||
@param[in] SmBusAddress The address that encodes the SMBUS Slave Address,
|
||||
SMBUS Command, SMBUS Data Length, and PEC.
|
||||
@param[in] Value The 8-bit value to send.
|
||||
@param[out] Status The return status for the executed command.
|
||||
This is an optional parameter and may be NULL.
|
||||
RETURN_SUCCESS The SMBUS command was executed.
|
||||
RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
|
||||
RETURN_DEVICE_ERROR The request was not completed because a failure
|
||||
was recorded in the Host Status Register bit. Device errors are a result
|
||||
of a transaction collision, illegal command field, unclaimed cycle
|
||||
(host initiated), or bus errors (collisions).
|
||||
RETURN_CRC_ERROR The checksum is not correct (PEC is incorrect).
|
||||
RETURN_UNSUPPORTED The SMBus operation is not supported.
|
||||
|
||||
@return The parameter of Value.
|
||||
|
||||
**/
|
||||
UINT8
|
||||
EFIAPI
|
||||
S3SmBusSendByte (
|
||||
IN UINTN SmBusAddress,
|
||||
IN UINT8 Value,
|
||||
OUT RETURN_STATUS *Status OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Executes an SMBUS read data byte command, and saves the value in the S3 script to be replayed
|
||||
on S3 resume.
|
||||
|
||||
Executes an SMBUS read data byte command on the SMBUS device specified by SmBusAddress.
|
||||
Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
|
||||
The 8-bit value read from the SMBUS is returned.
|
||||
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||
If Length in SmBusAddress is not zero, then ASSERT().
|
||||
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||
|
||||
@param[in] SmBusAddress The address that encodes the SMBUS Slave Address,
|
||||
SMBUS Command, SMBUS Data Length, and PEC.
|
||||
@param[out] Status The return status for the executed command.
|
||||
This is an optional parameter and may be NULL.
|
||||
RETURN_SUCCESS The SMBUS command was executed.
|
||||
RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
|
||||
RETURN_DEVICE_ERROR The request was not completed because a failure
|
||||
was recorded in the Host Status Register bit. Device errors are a result
|
||||
of a transaction collision, illegal command field, unclaimed cycle
|
||||
(host initiated), or bus error (collision).
|
||||
RETURN_CRC_ERROR The checksum is not correct (PEC is incorrect).
|
||||
RETURN_UNSUPPORTED The SMBus operation is not supported.
|
||||
|
||||
@return The byte read from the SMBUS.
|
||||
|
||||
**/
|
||||
UINT8
|
||||
EFIAPI
|
||||
S3SmBusReadDataByte (
|
||||
IN UINTN SmBusAddress,
|
||||
OUT RETURN_STATUS *Status OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Executes an SMBUS write data byte command, and saves the value in the S3 script to be replayed
|
||||
on S3 resume.
|
||||
|
||||
Executes an SMBUS write data byte command on the SMBUS device specified by SmBusAddress.
|
||||
The 8-bit value specified by Value is written.
|
||||
Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
|
||||
Value is returned.
|
||||
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||
If Length in SmBusAddress is not zero, then ASSERT().
|
||||
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||
|
||||
@param[in] SmBusAddress The address that encodes the SMBUS Slave Address,
|
||||
SMBUS Command, SMBUS Data Length, and PEC.
|
||||
@param[in] Value The 8-bit value to write.
|
||||
@param[out] Status The return status for the executed command.
|
||||
This is an optional parameter and may be NULL.
|
||||
RETURN_SUCCESS The SMBUS command was executed.
|
||||
RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
|
||||
RETURN_DEVICE_ERROR The request was not completed because a failure
|
||||
was recorded in the Host Status Register bit. Device errors are a result
|
||||
of a transaction collision, illegal command field, unclaimed cycle
|
||||
(host initiated), or bus error (collision).
|
||||
RETURN_CRC_ERROR The checksum is not correct (PEC is incorrect).
|
||||
RETURN_UNSUPPORTED The SMBus operation is not supported.
|
||||
|
||||
@return The parameter of Value.
|
||||
|
||||
**/
|
||||
UINT8
|
||||
EFIAPI
|
||||
S3SmBusWriteDataByte (
|
||||
IN UINTN SmBusAddress,
|
||||
IN UINT8 Value,
|
||||
OUT RETURN_STATUS *Status OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Executes an SMBUS read data word command, and saves the value in the S3 script to be replayed
|
||||
on S3 resume.
|
||||
|
||||
Executes an SMBUS read data word command on the SMBUS device specified by SmBusAddress.
|
||||
Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
|
||||
The 16-bit value read from the SMBUS is returned.
|
||||
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||
If Length in SmBusAddress is not zero, then ASSERT().
|
||||
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||
|
||||
@param[in] SmBusAddress The address that encodes the SMBUS Slave Address,
|
||||
SMBUS Command, SMBUS Data Length, and PEC.
|
||||
@param[out] Status The return status for the executed command.
|
||||
This is an optional parameter and may be NULL.
|
||||
RETURN_SUCCESS The SMBUS command was executed.
|
||||
RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
|
||||
RETURN_DEVICE_ERROR The request was not completed because a failure
|
||||
was recorded in the Host Status Register bit. Device errors are a result
|
||||
of a transaction collision, illegal command field, unclaimed cycle
|
||||
(host initiated), or bus error (collision).
|
||||
RETURN_CRC_ERROR The checksum is not correct (PEC is incorrect).
|
||||
RETURN_UNSUPPORTED The SMBus operation is not supported.
|
||||
|
||||
@return The byte read from the SMBUS.
|
||||
|
||||
**/
|
||||
UINT16
|
||||
EFIAPI
|
||||
S3SmBusReadDataWord (
|
||||
IN UINTN SmBusAddress,
|
||||
OUT RETURN_STATUS *Status OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Executes an SMBUS write data word command, and saves the value in the S3 script to be replayed
|
||||
on S3 resume.
|
||||
|
||||
Executes an SMBUS write data word command on the SMBUS device specified by SmBusAddress.
|
||||
The 16-bit value specified by Value is written.
|
||||
Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
|
||||
Value is returned.
|
||||
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||
If Length in SmBusAddress is not zero, then ASSERT().
|
||||
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||
|
||||
@param[in] SmBusAddress The address that encodes the SMBUS Slave Address,
|
||||
SMBUS Command, SMBUS Data Length, and PEC.
|
||||
@param[in] Value The 16-bit value to write.
|
||||
@param[out] Status The return status for the executed command.
|
||||
This is an optional parameter and may be NULL.
|
||||
RETURN_SUCCESS The SMBUS command was executed.
|
||||
RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
|
||||
RETURN_DEVICE_ERROR The request was not completed because a failure
|
||||
was recorded in the Host Status Register bit. Device errors are a result
|
||||
of a transaction collision, illegal command field, unclaimed cycle
|
||||
(host initiated), or bus error (collision).
|
||||
RETURN_CRC_ERROR The checksum is not correct (PEC is incorrect).
|
||||
RETURN_UNSUPPORTED The SMBus operation is not supported.
|
||||
|
||||
@return The parameter of Value.
|
||||
|
||||
**/
|
||||
UINT16
|
||||
EFIAPI
|
||||
S3SmBusWriteDataWord (
|
||||
IN UINTN SmBusAddress,
|
||||
IN UINT16 Value,
|
||||
OUT RETURN_STATUS *Status OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Executes an SMBUS process call command, and saves the value in the S3 script to be replayed
|
||||
on S3 resume.
|
||||
|
||||
Executes an SMBUS process call command on the SMBUS device specified by SmBusAddress.
|
||||
The 16-bit value specified by Value is written.
|
||||
Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
|
||||
The 16-bit value returned by the process call command is returned.
|
||||
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||
If Length in SmBusAddress is not zero, then ASSERT().
|
||||
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||
|
||||
@param[in] SmBusAddress The address that encodes the SMBUS Slave Address,
|
||||
SMBUS Command, SMBUS Data Length, and PEC.
|
||||
@param[in] Value The 16-bit value to write.
|
||||
@param[out] Status The return status for the executed command.
|
||||
This is an optional parameter and may be NULL.
|
||||
RETURN_SUCCESS The SMBUS command was executed.
|
||||
RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
|
||||
RETURN_DEVICE_ERROR The request was not completed because a failure
|
||||
was recorded in the Host Status Register bit. Device errors are a result
|
||||
of a transaction collision, illegal command field, unclaimed cycle
|
||||
(host initiated), or bus error (collision).
|
||||
RETURN_CRC_ERROR The checksum is not correct (PEC is incorrect).
|
||||
RETURN_UNSUPPORTED The SMBus operation is not supported.
|
||||
|
||||
@return The 16-bit value returned by the process call command.
|
||||
|
||||
**/
|
||||
UINT16
|
||||
EFIAPI
|
||||
S3SmBusProcessCall (
|
||||
IN UINTN SmBusAddress,
|
||||
IN UINT16 Value,
|
||||
OUT RETURN_STATUS *Status OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Executes an SMBUS read block command, and saves the value in the S3 script to be replayed
|
||||
on S3 resume.
|
||||
|
||||
Executes an SMBUS read block command on the SMBUS device specified by SmBusAddress.
|
||||
Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
|
||||
Bytes are read from the SMBUS and stored in Buffer.
|
||||
The number of bytes read is returned, and will never return a value larger than 32-bytes.
|
||||
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||
It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read.
|
||||
SMBUS supports a maximum transfer size of 32 bytes, so Buffer does not need to be any larger than 32 bytes.
|
||||
If Length in SmBusAddress is not zero, then ASSERT().
|
||||
If Buffer is NULL, then ASSERT().
|
||||
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||
|
||||
@param[in] SmBusAddress The address that encodes the SMBUS Slave Address,
|
||||
SMBUS Command, SMBUS Data Length, and PEC.
|
||||
@param[out] Buffer The pointer to the buffer to store the bytes read from the SMBUS.
|
||||
@param[out] Status The return status for the executed command.
|
||||
This is an optional parameter and may be NULL.
|
||||
RETURN_SUCCESS The SMBUS command was executed.
|
||||
RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
|
||||
RETURN_DEVICE_ERROR The request was not completed because a failure
|
||||
was recorded in the Host Status Register bit. Device errors are a result
|
||||
of a transaction collision, illegal command field, unclaimed cycle
|
||||
(host initiated), or bus error (collision).
|
||||
RETURN_CRC_ERROR The checksum is not correct (PEC is incorrect).
|
||||
RETURN_UNSUPPORTED The SMBus operation is not supported.
|
||||
|
||||
@return The number of bytes read.
|
||||
|
||||
**/
|
||||
UINTN
|
||||
EFIAPI
|
||||
S3SmBusReadBlock (
|
||||
IN UINTN SmBusAddress,
|
||||
OUT VOID *Buffer,
|
||||
OUT RETURN_STATUS *Status OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Executes an SMBUS write block command, and saves the value in the S3 script to be replayed
|
||||
on S3 resume.
|
||||
|
||||
Executes an SMBUS write block command on the SMBUS device specified by SmBusAddress.
|
||||
The SMBUS slave address, SMBUS command, and SMBUS length fields of SmBusAddress are required.
|
||||
Bytes are written to the SMBUS from Buffer.
|
||||
The number of bytes written is returned, and will never return a value larger than 32-bytes.
|
||||
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||
If Length in SmBusAddress is zero or greater than 32, then ASSERT().
|
||||
If Buffer is NULL, then ASSERT().
|
||||
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||
|
||||
@param[in] SmBusAddress The address that encodes the SMBUS Slave Address,
|
||||
SMBUS Command, SMBUS Data Length, and PEC.
|
||||
@param[out] Buffer The pointer to the buffer to store the bytes read from the SMBUS.
|
||||
@param[out] Status The return status for the executed command.
|
||||
This is an optional parameter and may be NULL.
|
||||
RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
|
||||
RETURN_DEVICE_ERROR The request was not completed because a failure
|
||||
was recorded in the Host Status Register bit. Device errors are a result
|
||||
of a transaction collision, illegal command field, unclaimed cycle
|
||||
(host initiated), or bus error (collision).
|
||||
RETURN_CRC_ERROR The checksum is not correct (PEC is incorrect).
|
||||
RETURN_UNSUPPORTED The SMBus operation is not supported.
|
||||
|
||||
@return The number of bytes written.
|
||||
|
||||
**/
|
||||
UINTN
|
||||
EFIAPI
|
||||
S3SmBusWriteBlock (
|
||||
IN UINTN SmBusAddress,
|
||||
OUT VOID *Buffer,
|
||||
OUT RETURN_STATUS *Status OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Executes an SMBUS block process call command, and saves the value in the S3 script to be replayed
|
||||
on S3 resume.
|
||||
|
||||
Executes an SMBUS block process call command on the SMBUS device specified by SmBusAddress.
|
||||
The SMBUS slave address, SMBUS command, and SMBUS length fields of SmBusAddress are required.
|
||||
Bytes are written to the SMBUS from WriteBuffer. Bytes are then read from the SMBUS into ReadBuffer.
|
||||
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||
It is the caller's responsibility to make sure ReadBuffer is large enough for the total number of bytes read.
|
||||
SMBUS supports a maximum transfer size of 32 bytes, so Buffer does not need to be any larger than 32 bytes.
|
||||
If Length in SmBusAddress is zero or greater than 32, then ASSERT().
|
||||
If WriteBuffer is NULL, then ASSERT().
|
||||
If ReadBuffer is NULL, then ASSERT().
|
||||
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||
|
||||
@param[in] SmBusAddress The address that encodes the SMBUS Slave Address,
|
||||
SMBUS Command, SMBUS Data Length, and PEC.
|
||||
@param[in] WriteBuffer The pointer to the buffer of bytes to write to the SMBUS.
|
||||
@param[out] ReadBuffer The pointer to the buffer of bytes to read from the SMBUS.
|
||||
@param[out] Status The return status for the executed command.
|
||||
This is an optional parameter and may be NULL.
|
||||
RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
|
||||
RETURN_DEVICE_ERROR The request was not completed because a failure
|
||||
was recorded in the Host Status Register bit. Device errors are a result
|
||||
of a transaction collision, illegal command field, unclaimed cycle
|
||||
(host initiated), or bus error (collision).
|
||||
RETURN_CRC_ERROR The checksum is not correct (PEC is incorrect).
|
||||
RETURN_UNSUPPORTED The SMBus operation is not supported.
|
||||
|
||||
@return The number of bytes written.
|
||||
|
||||
**/
|
||||
UINTN
|
||||
EFIAPI
|
||||
S3SmBusBlockProcessCall (
|
||||
IN UINTN SmBusAddress,
|
||||
IN VOID *WriteBuffer,
|
||||
OUT VOID *ReadBuffer,
|
||||
OUT RETURN_STATUS *Status OPTIONAL
|
||||
);
|
||||
|
||||
#endif
|
|
@ -0,0 +1,39 @@
|
|||
/** @file
|
||||
Stall Services that perform stalls and also enable the Stall operatation
|
||||
to be replayed during an S3 resume. This library class maps directly on top
|
||||
of the Timer class.
|
||||
|
||||
Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
|
||||
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 __S3_STALL_LIB_H__
|
||||
#define __S3_STALL_LIB_H__
|
||||
|
||||
/**
|
||||
Stalls the CPU for at least the given number of microseconds and saves
|
||||
the value in the S3 script to be replayed on S3 resume.
|
||||
|
||||
Stalls the CPU for the number of microseconds specified by MicroSeconds.
|
||||
|
||||
@param[in] MicroSeconds The minimum number of microseconds to delay.
|
||||
|
||||
@return MicroSeconds.
|
||||
|
||||
**/
|
||||
UINTN
|
||||
EFIAPI
|
||||
S3Stall (
|
||||
IN UINTN MicroSeconds
|
||||
);
|
||||
|
||||
#endif
|
|
@ -0,0 +1,42 @@
|
|||
## @file
|
||||
# BootScriptLib instance that always produces NOP operation.
|
||||
#
|
||||
# This library is primarily used by platform that does not support ACPI S3
|
||||
# resume. All the library interfaces simply return EFI_SUCCESS without
|
||||
# performing any operation.
|
||||
#
|
||||
# Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
##
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = BaseS3BootScriptLibNull
|
||||
FILE_GUID = 9A6DC1AC-94C0-43b1-8714-4C70FD58A815
|
||||
MODULE_TYPE = BASE
|
||||
VERSION_STRING = 1.0
|
||||
LIBRARY_CLASS = S3BootScriptLib
|
||||
|
||||
|
||||
|
||||
#
|
||||
# The following information is for reference only and not required by the build tools.
|
||||
#
|
||||
# VALID_ARCHITECTURES = IA32 X64 IPF EBC
|
||||
#
|
||||
|
||||
[Sources]
|
||||
BootScriptLib.c
|
||||
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
|
|
@ -0,0 +1,563 @@
|
|||
/** @file
|
||||
Null function implementation for EFI S3 boot script.
|
||||
|
||||
Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
|
||||
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 <Base.h>
|
||||
#include <Library/S3BootScriptLib.h>
|
||||
|
||||
/**
|
||||
Save I/O write to boot script
|
||||
|
||||
@param Width the width of the I/O operations.Enumerated in S3_BOOT_SCRIPT_LIB_WIDTH.
|
||||
@param Address The base address of the I/O operations.
|
||||
@param Count The number of I/O operations to perform.
|
||||
@param Buffer The source buffer from which to write data.
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table do operation.
|
||||
@retval RETURN_SUCCESS Opcode is added.
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSaveIoWrite (
|
||||
IN S3_BOOT_SCRIPT_LIB_WIDTH Width,
|
||||
IN UINT64 Address,
|
||||
IN UINTN Count,
|
||||
IN VOID *Buffer
|
||||
)
|
||||
{
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
Adds a record for an I/O modify operation into a S3 boot script table
|
||||
|
||||
@param Width The width of the I/O operations.Enumerated in S3_BOOT_SCRIPT_LIB_WIDTH.
|
||||
@param Address The base address of the I/O operations.
|
||||
@param Data A pointer to the data to be OR-ed.
|
||||
@param DataMask A pointer to the data mask to be AND-ed with the data read from the register
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table do operation.
|
||||
@retval RETURN_SUCCESS Opcode is added.
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSaveIoReadWrite (
|
||||
IN S3_BOOT_SCRIPT_LIB_WIDTH Width,
|
||||
IN UINT64 Address,
|
||||
IN VOID *Data,
|
||||
IN VOID *DataMask
|
||||
)
|
||||
{
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
Adds a record for a memory write operation into a specified boot script table.
|
||||
|
||||
@param Width The width of the I/O operations.Enumerated in S3_BOOT_SCRIPT_LIB_WIDTH.
|
||||
@param Address The base address of the memory operations
|
||||
@param Count The number of memory operations to perform.
|
||||
@param Buffer The source buffer from which to write the data.
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table do operation.
|
||||
@retval RETURN_SUCCESS Opcode is added.
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSaveMemWrite (
|
||||
IN S3_BOOT_SCRIPT_LIB_WIDTH Width,
|
||||
IN UINT64 Address,
|
||||
IN UINTN Count,
|
||||
IN VOID *Buffer
|
||||
)
|
||||
{
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
/**
|
||||
Adds a record for a memory modify operation into a specified boot script table.
|
||||
|
||||
@param Width The width of the I/O operations.Enumerated in S3_BOOT_SCRIPT_LIB_WIDTH.
|
||||
@param Address The base address of the memory operations. Address needs alignment if required
|
||||
@param Data A pointer to the data to be OR-ed.
|
||||
@param DataMask A pointer to the data mask to be AND-ed with the data read from the register.
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table do operation.
|
||||
@retval RETURN_SUCCESS Opcode is added.
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSaveMemReadWrite (
|
||||
IN S3_BOOT_SCRIPT_LIB_WIDTH Width,
|
||||
IN UINT64 Address,
|
||||
IN VOID *Data,
|
||||
IN VOID *DataMask
|
||||
)
|
||||
{
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
/**
|
||||
Adds a record for a PCI configuration space write operation into a specified boot script table.
|
||||
|
||||
@param Width The width of the I/O operations.Enumerated in S3_BOOT_SCRIPT_LIB_WIDTH.
|
||||
@param Address The address within the PCI configuration space.
|
||||
@param Count The number of PCI operations to perform.
|
||||
@param Buffer The source buffer from which to write the data.
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table do operation.
|
||||
@retval RETURN_SUCCESS Opcode is added.
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSavePciCfgWrite (
|
||||
IN S3_BOOT_SCRIPT_LIB_WIDTH Width,
|
||||
IN UINT64 Address,
|
||||
IN UINTN Count,
|
||||
IN VOID *Buffer
|
||||
)
|
||||
{
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
Adds a record for a PCI configuration space modify operation into a specified boot script table.
|
||||
|
||||
@param Width The width of the I/O operations.Enumerated in S3_BOOT_SCRIPT_LIB_WIDTH.
|
||||
@param Address The address within the PCI configuration space.
|
||||
@param Data A pointer to the data to be OR-ed.The size depends on Width.
|
||||
@param DataMask A pointer to the data mask to be AND-ed.
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table do operation.
|
||||
@retval RETURN__SUCCESS Opcode is added.
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSavePciCfgReadWrite (
|
||||
IN S3_BOOT_SCRIPT_LIB_WIDTH Width,
|
||||
IN UINT64 Address,
|
||||
IN VOID *Data,
|
||||
IN VOID *DataMask
|
||||
)
|
||||
{
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
/**
|
||||
Adds a record for a PCI configuration space modify operation into a specified boot script table.
|
||||
|
||||
@param Width The width of the I/O operations.Enumerated in S3_BOOT_SCRIPT_LIB_WIDTH.
|
||||
@param Segment The PCI segment number for Address.
|
||||
@param Address The address within the PCI configuration space.
|
||||
@param Count The number of PCI operations to perform.
|
||||
@param Buffer The source buffer from which to write the data.
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table do operation.
|
||||
@retval RETURN_SUCCESS Opcode is added.
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSavePciCfg2Write (
|
||||
IN S3_BOOT_SCRIPT_LIB_WIDTH Width,
|
||||
IN UINT16 Segment,
|
||||
IN UINT64 Address,
|
||||
IN UINTN Count,
|
||||
IN VOID *Buffer
|
||||
)
|
||||
{
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
/**
|
||||
Adds a record for a PCI configuration space modify operation into a specified boot script table.
|
||||
|
||||
@param Width The width of the I/O operations.Enumerated in S3_BOOT_SCRIPT_LIB_WIDTH.
|
||||
@param Segment The PCI segment number for Address.
|
||||
@param Address The address within the PCI configuration space.
|
||||
@param Data A pointer to the data to be OR-ed. The size depends on Width.
|
||||
@param DataMask A pointer to the data mask to be AND-ed.
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table do operation.
|
||||
@retval RETURN_SUCCESS Opcode is added.
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSavePciCfg2ReadWrite (
|
||||
IN S3_BOOT_SCRIPT_LIB_WIDTH Width,
|
||||
IN UINT16 Segment,
|
||||
IN UINT64 Address,
|
||||
IN VOID *Data,
|
||||
IN VOID *DataMask
|
||||
)
|
||||
{
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
/**
|
||||
Adds a record for an SMBus command execution into a specified boot script table.
|
||||
|
||||
@param SmBusAddress Address that encodes the SMBUS Slave Address, SMBUS Command, SMBUS Data Length, and PEC.
|
||||
@param Operation Indicates which particular SMBus protocol it will use to execute the SMBus
|
||||
transactions.
|
||||
@param Length A pointer to signify the number of bytes that this operation will do.
|
||||
@param Buffer Contains the value of data to execute to the SMBUS slave device.
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table do operation.
|
||||
@retval RETURN_SUCCESS Opcode is added.
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSaveSmbusExecute (
|
||||
IN UINTN SmBusAddress,
|
||||
IN EFI_SMBUS_OPERATION Operation,
|
||||
IN UINTN *Length,
|
||||
IN VOID *Buffer
|
||||
)
|
||||
{
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
/**
|
||||
Adds a record for an execution stall on the processor into a specified boot script table.
|
||||
|
||||
@param Duration Duration in microseconds of the stall
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table do operation.
|
||||
@retval RETURN_SUCCESS Opcode is added.
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSaveStall (
|
||||
IN UINTN Duration
|
||||
)
|
||||
{
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
/**
|
||||
Adds a record for dispatching specified arbitrary code into a specified boot script table.
|
||||
|
||||
@param EntryPoint Entry point of the code to be dispatched.
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table do operation.
|
||||
@retval RETURN_SUCCESS Opcode is added.
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSaveDispatch (
|
||||
IN VOID *EntryPoint
|
||||
)
|
||||
{
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
/**
|
||||
Adds a record for an execution stall on the processor into a specified boot script table.
|
||||
|
||||
@param EntryPoint Entry point of the code to be dispatched.
|
||||
@param Context Argument to be passed into the EntryPoint of the code to be dispatched.
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table do operation.
|
||||
@retval RETURN_SUCCESS Opcode is added.
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSaveDispatch2 (
|
||||
IN VOID *EntryPoint,
|
||||
IN VOID *Context
|
||||
)
|
||||
{
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
Adds a record for memory reads of the memory location and continues when the exit criteria is
|
||||
satisfied or after a defined duration.
|
||||
|
||||
@param Width The width of the memory operations.
|
||||
@param Address The base address of the memory operations.
|
||||
@param BitMask A pointer to the bit mask to be AND-ed with the data read from the register.
|
||||
@param BitValue A pointer to the data value after to be Masked.
|
||||
@param Duration Duration in microseconds of the stall.
|
||||
@param LoopTimes The times of the register polling.
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table do operation.
|
||||
@retval RETURN_SUCCESS Opcode is added.
|
||||
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSaveMemPoll (
|
||||
IN S3_BOOT_SCRIPT_LIB_WIDTH Width,
|
||||
IN UINT64 Address,
|
||||
IN VOID *BitMask,
|
||||
IN VOID *BitValue,
|
||||
IN UINTN Duration,
|
||||
IN UINTN LoopTimes
|
||||
)
|
||||
{
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
Store arbitrary information in the boot script table. This opcode is a no-op on dispatch and is only
|
||||
used for debugging script issues.
|
||||
|
||||
@param InformationLength Length of the data in bytes
|
||||
@param Information Information to be logged in the boot scrpit
|
||||
|
||||
@retval RETURN_UNSUPPORTED If entering runtime, this method will not support.
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table do operation.
|
||||
@retval RETURN_SUCCESS Opcode is added.
|
||||
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSaveInformation (
|
||||
IN UINT32 InformationLength,
|
||||
IN VOID *Information
|
||||
)
|
||||
{
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
/**
|
||||
Adds a record for I/O reads the I/O location and continues when the exit criteria is satisfied or after a
|
||||
defined duration.
|
||||
|
||||
@param Width The width of the I/O operations.
|
||||
@param Address The base address of the I/O operations.
|
||||
@param Data The comparison value used for the polling exit criteria.
|
||||
@param DataMask Mask used for the polling criteria. The bits in the bytes below Width which are zero
|
||||
in Data are ignored when polling the memory address.
|
||||
@param Delay The number of 100ns units to poll. Note that timer available may be of poorer
|
||||
granularity so the delay may be longer.
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table do operation.
|
||||
@retval RETURN_SUCCESS Opcode is added.
|
||||
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSaveIoPoll (
|
||||
IN S3_BOOT_SCRIPT_LIB_WIDTH Width,
|
||||
IN UINT64 Address,
|
||||
IN VOID *Data,
|
||||
IN VOID *DataMask,
|
||||
IN UINT64 Delay
|
||||
)
|
||||
{
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
Adds a record for PCI configuration space reads and continues when the exit criteria is satisfied or
|
||||
after a defined duration.
|
||||
|
||||
@param Width The width of the I/O operations.
|
||||
@param Address The address within the PCI configuration space.
|
||||
@param Data The comparison value used for the polling exit criteria.
|
||||
@param DataMask Mask used for the polling criteria. The bits in the bytes below Width which are zero
|
||||
in Data are ignored when polling the memory address
|
||||
@param Delay The number of 100ns units to poll. Note that timer available may be of poorer
|
||||
granularity so the delay may be longer.
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table do operation.
|
||||
@retval RETURN_SUCCESS Opcode is added.
|
||||
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSavePciPoll (
|
||||
IN S3_BOOT_SCRIPT_LIB_WIDTH Width,
|
||||
IN UINT64 Address,
|
||||
IN VOID *Data,
|
||||
IN VOID *DataMask,
|
||||
IN UINT64 Delay
|
||||
)
|
||||
{
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
/**
|
||||
Adds a record for PCI configuration space reads and continues when the exit criteria is satisfied or
|
||||
after a defined duration.
|
||||
|
||||
@param Width The width of the I/O operations.
|
||||
@param Segment The PCI segment number for Address.
|
||||
@param Address The address within the PCI configuration space.
|
||||
@param Data The comparison value used for the polling exit criteria.
|
||||
@param DataMask Mask used for the polling criteria. The bits in the bytes below Width which are zero
|
||||
in Data are ignored when polling the memory address
|
||||
@param Delay The number of 100ns units to poll. Note that timer available may be of poorer
|
||||
granularity so the delay may be longer.
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES Not enough memory for the table do operation.
|
||||
@retval RETURN_SUCCESS Opcode is added.
|
||||
@note A known Limitations in the implementation: When interpreting the opcode EFI_BOOT_SCRIPT_PCI_CONFIG2_WRITE_OPCODE
|
||||
EFI_BOOT_SCRIPT_PCI_CONFIG2_READ_WRITE_OPCODE and EFI_BOOT_SCRIPT_PCI_CONFIG2_POLL_OPCODE, the 'Segment' parameter is assumed as
|
||||
Zero, or else, assert.
|
||||
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSavePci2Poll (
|
||||
IN S3_BOOT_SCRIPT_LIB_WIDTH Width,
|
||||
IN UINT16 Segment,
|
||||
IN UINT64 Address,
|
||||
IN VOID *Data,
|
||||
IN VOID *DataMask,
|
||||
IN UINT64 Delay
|
||||
)
|
||||
{
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
/**
|
||||
Save ASCII string information specified by Buffer to
|
||||
boot script with opcode EFI_BOOT_SCRIPT_INFORMATION_OPCODE
|
||||
|
||||
@param String the ascii string to store into the S3 boot script table
|
||||
|
||||
@retval RETURN_NOT_FOUND BootScriptSave Protocol not exist.
|
||||
@retval RETURN_SUCCESS BootScriptSave Protocol exist, always returns RETURN_SUCCESS
|
||||
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptSaveInformationAsciiString (
|
||||
IN CONST CHAR8 *String
|
||||
)
|
||||
{
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
/**
|
||||
This is an function to close the S3 boot script table. The function could only be called in
|
||||
BOOT time phase. To comply with the Framework spec definition on
|
||||
EFI_BOOT_SCRIPT_SAVE_PROTOCOL.CloseTable(), this function will fulfill following things:
|
||||
1. Closes the specified boot script table
|
||||
2. It allocates a new memory pool to duplicate all the boot scripts in the specified table.
|
||||
Once this function is called, the table maintained by the library will be destroyed
|
||||
after it is copied into the allocated pool.
|
||||
3. Any attempts to add a script record after calling this function will cause a new table
|
||||
to be created by the library.
|
||||
4. The base address of the allocated pool will be returned in Address. Note that after
|
||||
using the boot script table, the CALLER is responsible for freeing the pool that is allocated
|
||||
by this function.
|
||||
|
||||
In Spec PI1.1, this EFI_BOOT_SCRIPT_SAVE_PROTOCOL.CloseTable() is retired. By then it is not
|
||||
necessary to provide this API in BootScriptLib. To provides this API for now is only to meet
|
||||
the requirement from Framework Spec.
|
||||
|
||||
If anyone does call CloseTable() on a real platform, then the caller is responsible for figuring out
|
||||
how to get the script to run on an S3 resume because the boot script maintained by the lib will be
|
||||
destroyed.
|
||||
|
||||
@return the base address of the new copy of the boot script tble.
|
||||
|
||||
**/
|
||||
UINT8*
|
||||
EFIAPI
|
||||
S3BootScriptCloseTable (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
/**
|
||||
Executes the S3 boot script table.
|
||||
|
||||
@param RETURN_SUCCESS The boot script table was executed successfully.
|
||||
@param RETURN_UNSUPPORTED Invalid script table or opcode.
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptExecute (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
/**
|
||||
Move the last boot script entry to the position
|
||||
|
||||
@param BeforeOrAfter Specifies whether the opcode is stored before (TRUE) or after (FALSE) the position
|
||||
in the boot script table specified by Position. If Position is NULL or points to
|
||||
NULL then the new opcode is inserted at the beginning of the table (if TRUE) or end
|
||||
of the table (if FALSE).
|
||||
@param Position On entry, specifies the position in the boot script table where the opcode will be
|
||||
inserted, either before or after, depending on BeforeOrAfter. On exit, specifies
|
||||
the position of the inserted opcode in the boot script table.
|
||||
|
||||
@retval RETURN_OUT_OF_RESOURCES The table is not available.
|
||||
@retval RETURN_INVALID_PARAMETER The Position is not a valid position in the boot script table.
|
||||
@retval RETURN_SUCCESS Opcode is inserted.
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptMoveLastOpcode (
|
||||
IN BOOLEAN BeforeOrAfter,
|
||||
IN OUT VOID **Position OPTIONAL
|
||||
)
|
||||
{
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
/**
|
||||
Find a label within the boot script table and, if not present, optionally create it.
|
||||
|
||||
@param BeforeOrAfter Specifies whether the opcode is stored before (TRUE)
|
||||
or after (FALSE) the position in the boot script table
|
||||
specified by Position.
|
||||
@param CreateIfNotFound Specifies whether the label will be created if the label
|
||||
does not exists (TRUE) or not (FALSE).
|
||||
@param Position On entry, specifies the position in the boot script table
|
||||
where the opcode will be inserted, either before or after,
|
||||
depending on BeforeOrAfter. On exit, specifies the position
|
||||
of the inserted opcode in the boot script table.
|
||||
@param Label Points to the label which will be inserted in the boot script table.
|
||||
|
||||
@retval EFI_SUCCESS The operation succeeded. A record was added into the
|
||||
specified script table.
|
||||
@retval EFI_INVALID_PARAMETER The parameter is illegal or the given boot script is not supported.
|
||||
If the opcode is unknow or not supported because of the PCD
|
||||
Feature Flags.
|
||||
@retval EFI_OUT_OF_RESOURCES There is insufficient memory to store the boot script.
|
||||
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptLabel (
|
||||
IN BOOLEAN BeforeOrAfter,
|
||||
IN BOOLEAN CreateIfNotFound,
|
||||
IN OUT VOID **Position OPTIONAL,
|
||||
IN CONST CHAR8 *Label
|
||||
)
|
||||
{
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
/**
|
||||
Compare two positions in the boot script table and return their relative position.
|
||||
@param Position1 The positions in the boot script table to compare
|
||||
@param Position2 The positions in the boot script table to compare
|
||||
@param RelativePosition On return, points to the result of the comparison
|
||||
|
||||
@retval EFI_SUCCESS The operation succeeded. A record was added into the
|
||||
specified script table.
|
||||
@retval EFI_INVALID_PARAMETER The parameter is illegal or the given boot script is not supported.
|
||||
If the opcode is unknow or not supported because of the PCD
|
||||
Feature Flags.
|
||||
@retval EFI_OUT_OF_RESOURCES There is insufficient memory to store the boot script.
|
||||
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
S3BootScriptCompare (
|
||||
IN UINT8 *Position1,
|
||||
IN UINT8 *Position2,
|
||||
OUT UINTN *RelativePosition
|
||||
)
|
||||
{
|
||||
return RETURN_SUCCESS;
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
## @file
|
||||
# Component description file for S3IoLib.
|
||||
#
|
||||
# I/O and MMIO Library Services that do I/O and also enable the I/O operatation
|
||||
# to be replayed during an S3 resume.
|
||||
#
|
||||
# Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
##
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = BaseS3IoLib
|
||||
FILE_GUID = B13F938E-47DF-4516-A397-8927A4E42B61
|
||||
MODULE_TYPE = BASE
|
||||
VERSION_STRING = 1.0
|
||||
LIBRARY_CLASS = S3IoLib
|
||||
|
||||
|
||||
#
|
||||
# The following information is for reference only and not required by the build tools.
|
||||
#
|
||||
# VALID_ARCHITECTURES = IA32 X64 IPF EBC
|
||||
#
|
||||
|
||||
[Sources]
|
||||
S3IoLib.c
|
||||
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
|
||||
[LibraryClasses]
|
||||
DebugLib
|
||||
IoLib
|
||||
S3BootScriptLib
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,43 @@
|
|||
## @file
|
||||
# Component discription file for DxeS3PciLib module
|
||||
#
|
||||
# Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
##
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = BaseS3PciLib
|
||||
FILE_GUID = F66B6BD2-513F-441d-B367-2D5BD4998A50
|
||||
MODULE_TYPE = BASE
|
||||
VERSION_STRING = 1.0
|
||||
LIBRARY_CLASS = S3PciLib
|
||||
|
||||
|
||||
#
|
||||
# The following information is for reference only and not required by the build tools.
|
||||
#
|
||||
# VALID_ARCHITECTURES = IA32 X64 IPF EBC
|
||||
#
|
||||
|
||||
[Sources]
|
||||
S3PciLib.c
|
||||
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
|
||||
|
||||
[LibraryClasses]
|
||||
PciLib
|
||||
S3BootScriptLib
|
||||
DebugLib
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,47 @@
|
|||
## @file
|
||||
# Component description file for S3SmbusLib.
|
||||
#
|
||||
# Smbus Library Services that do SMBus transactions and also enable the
|
||||
# operatation to be replayed during an S3 resume. This library class maps
|
||||
# directly on top of the SmbusLib class.
|
||||
#
|
||||
# Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
##
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = BaseS3SmbusLib
|
||||
FILE_GUID = 01190654-FED0-40d3-BA7F-2925539E5830
|
||||
MODULE_TYPE = BASE
|
||||
VERSION_STRING = 1.0
|
||||
LIBRARY_CLASS = S3SmbusLib
|
||||
|
||||
|
||||
#
|
||||
# The following information is for reference only and not required by the build tools.
|
||||
#
|
||||
# VALID_ARCHITECTURES = IA32 X64 IPF EBC
|
||||
#
|
||||
|
||||
[Sources]
|
||||
S3SmbusLib.c
|
||||
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
|
||||
|
||||
[LibraryClasses]
|
||||
DebugLib
|
||||
SmbusLib
|
||||
S3BootScriptLib
|
||||
|
|
@ -0,0 +1,502 @@
|
|||
/** @file
|
||||
Smbus Library Services that do SMBus transactions and also enable the operatation
|
||||
to be replayed during an S3 resume. This library class maps directly on top
|
||||
of the SmbusLib class.
|
||||
|
||||
Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
|
||||
|
||||
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 <Base.h>
|
||||
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/S3BootScriptLib.h>
|
||||
#include <Library/SmbusLib.h>
|
||||
#include <Library/S3SmbusLib.h>
|
||||
|
||||
/**
|
||||
Saves an SMBus operation to S3 script to be replayed on S3 resume.
|
||||
|
||||
This function provides a standard way to save SMBus operation to S3 boot Script.
|
||||
The data can either be of the Length byte, word, or a block of data.
|
||||
If it falis to save S3 boot script, then ASSERT ().
|
||||
|
||||
@param SmbusOperation Signifies which particular SMBus hardware protocol instance that it will use to
|
||||
execute the SMBus transactions.
|
||||
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||
SMBUS Command, SMBUS Data Length, and PEC.
|
||||
@param Length Signifies the number of bytes that this operation will do. The maximum number of
|
||||
bytes can be revision specific and operation specific.
|
||||
@param Buffer Contains the value of data to execute to the SMBus slave device. Not all operations
|
||||
require this argument. The length of this buffer is identified by Length.
|
||||
|
||||
**/
|
||||
VOID
|
||||
InternalSaveSmBusExecToBootScript (
|
||||
IN EFI_SMBUS_OPERATION SmbusOperation,
|
||||
IN UINTN SmBusAddress,
|
||||
IN UINTN Length,
|
||||
IN OUT VOID *Buffer
|
||||
)
|
||||
{
|
||||
RETURN_STATUS Status;
|
||||
|
||||
Status = S3BootScriptSaveSmbusExecute (
|
||||
SmBusAddress,
|
||||
SmbusOperation,
|
||||
&Length,
|
||||
Buffer
|
||||
);
|
||||
ASSERT (Status == RETURN_SUCCESS);
|
||||
}
|
||||
|
||||
/**
|
||||
Executes an SMBUS quick read command and saves the value in the S3 script to be replayed
|
||||
on S3 resume.
|
||||
|
||||
Executes an SMBUS quick read command on the SMBUS device specified by SmBusAddress.
|
||||
Only the SMBUS slave address field of SmBusAddress is required.
|
||||
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||
If PEC is set in SmBusAddress, then ASSERT().
|
||||
If Command in SmBusAddress is not zero, then ASSERT().
|
||||
If Length in SmBusAddress is not zero, then ASSERT().
|
||||
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||
|
||||
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||
SMBUS Command, SMBUS Data Length, and PEC.
|
||||
@param Status Return status for the executed command.
|
||||
This is an optional parameter and may be NULL.
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
S3SmBusQuickRead (
|
||||
IN UINTN SmBusAddress,
|
||||
OUT RETURN_STATUS *Status OPTIONAL
|
||||
)
|
||||
{
|
||||
SmBusQuickRead (SmBusAddress, Status);
|
||||
|
||||
InternalSaveSmBusExecToBootScript (EfiSmbusQuickRead, SmBusAddress, 0, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
Executes an SMBUS quick write command and saves the value in the S3 script to be replayed
|
||||
on S3 resume.
|
||||
|
||||
Executes an SMBUS quick write command on the SMBUS device specified by SmBusAddress.
|
||||
Only the SMBUS slave address field of SmBusAddress is required.
|
||||
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||
If PEC is set in SmBusAddress, then ASSERT().
|
||||
If Command in SmBusAddress is not zero, then ASSERT().
|
||||
If Length in SmBusAddress is not zero, then ASSERT().
|
||||
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||
|
||||
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||
SMBUS Command, SMBUS Data Length, and PEC.
|
||||
@param Status Return status for the executed command.
|
||||
This is an optional parameter and may be NULL.
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
S3SmBusQuickWrite (
|
||||
IN UINTN SmBusAddress,
|
||||
OUT RETURN_STATUS *Status OPTIONAL
|
||||
)
|
||||
{
|
||||
SmBusQuickWrite (SmBusAddress, Status);
|
||||
|
||||
InternalSaveSmBusExecToBootScript (EfiSmbusQuickWrite, SmBusAddress, 0, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
Executes an SMBUS receive byte command and saves the value in the S3 script to be replayed
|
||||
on S3 resume.
|
||||
|
||||
Executes an SMBUS receive byte command on the SMBUS device specified by SmBusAddress.
|
||||
Only the SMBUS slave address field of SmBusAddress is required.
|
||||
The byte received from the SMBUS is returned.
|
||||
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||
If Command in SmBusAddress is not zero, then ASSERT().
|
||||
If Length in SmBusAddress is not zero, then ASSERT().
|
||||
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||
|
||||
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||
SMBUS Command, SMBUS Data Length, and PEC.
|
||||
@param Status Return status for the executed command.
|
||||
This is an optional parameter and may be NULL.
|
||||
|
||||
@return The byte received from the SMBUS.
|
||||
|
||||
**/
|
||||
UINT8
|
||||
EFIAPI
|
||||
S3SmBusReceiveByte (
|
||||
IN UINTN SmBusAddress,
|
||||
OUT RETURN_STATUS *Status OPTIONAL
|
||||
)
|
||||
{
|
||||
UINT8 Byte;
|
||||
|
||||
Byte = SmBusReceiveByte (SmBusAddress, Status);
|
||||
|
||||
InternalSaveSmBusExecToBootScript (EfiSmbusReceiveByte, SmBusAddress, 1, &Byte);
|
||||
|
||||
return Byte;
|
||||
}
|
||||
|
||||
/**
|
||||
Executes an SMBUS send byte command and saves the value in the S3 script to be replayed
|
||||
on S3 resume.
|
||||
|
||||
Executes an SMBUS send byte command on the SMBUS device specified by SmBusAddress.
|
||||
The byte specified by Value is sent.
|
||||
Only the SMBUS slave address field of SmBusAddress is required. Value is returned.
|
||||
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||
If Command in SmBusAddress is not zero, then ASSERT().
|
||||
If Length in SmBusAddress is not zero, then ASSERT().
|
||||
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||
|
||||
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||
SMBUS Command, SMBUS Data Length, and PEC.
|
||||
@param Value The 8-bit value to send.
|
||||
@param Status Return status for the executed command.
|
||||
This is an optional parameter and may be NULL.
|
||||
|
||||
@return The parameter of Value.
|
||||
|
||||
**/
|
||||
UINT8
|
||||
EFIAPI
|
||||
S3SmBusSendByte (
|
||||
IN UINTN SmBusAddress,
|
||||
IN UINT8 Value,
|
||||
OUT RETURN_STATUS *Status OPTIONAL
|
||||
)
|
||||
{
|
||||
UINT8 Byte;
|
||||
|
||||
Byte = SmBusSendByte (SmBusAddress, Value, Status);
|
||||
|
||||
InternalSaveSmBusExecToBootScript (EfiSmbusSendByte, SmBusAddress, 1, &Byte);
|
||||
|
||||
return Byte;
|
||||
}
|
||||
|
||||
/**
|
||||
Executes an SMBUS read data byte command and saves the value in the S3 script to be replayed
|
||||
on S3 resume.
|
||||
|
||||
Executes an SMBUS read data byte command on the SMBUS device specified by SmBusAddress.
|
||||
Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
|
||||
The 8-bit value read from the SMBUS is returned.
|
||||
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||
If Length in SmBusAddress is not zero, then ASSERT().
|
||||
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||
|
||||
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||
SMBUS Command, SMBUS Data Length, and PEC.
|
||||
@param Status Return status for the executed command.
|
||||
This is an optional parameter and may be NULL.
|
||||
|
||||
@return The byte read from the SMBUS.
|
||||
|
||||
**/
|
||||
UINT8
|
||||
EFIAPI
|
||||
S3SmBusReadDataByte (
|
||||
IN UINTN SmBusAddress,
|
||||
OUT RETURN_STATUS *Status OPTIONAL
|
||||
)
|
||||
{
|
||||
UINT8 Byte;
|
||||
|
||||
Byte = SmBusReadDataByte (SmBusAddress, Status);
|
||||
|
||||
InternalSaveSmBusExecToBootScript (EfiSmbusReadByte, SmBusAddress, 1, &Byte);
|
||||
|
||||
return Byte;
|
||||
}
|
||||
|
||||
/**
|
||||
Executes an SMBUS write data byte command and saves the value in the S3 script to be replayed
|
||||
on S3 resume.
|
||||
|
||||
Executes an SMBUS write data byte command on the SMBUS device specified by SmBusAddress.
|
||||
The 8-bit value specified by Value is written.
|
||||
Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
|
||||
Value is returned.
|
||||
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||
If Length in SmBusAddress is not zero, then ASSERT().
|
||||
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||
|
||||
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||
SMBUS Command, SMBUS Data Length, and PEC.
|
||||
@param Value The 8-bit value to write.
|
||||
@param Status Return status for the executed command.
|
||||
This is an optional parameter and may be NULL.
|
||||
|
||||
@return The parameter of Value.
|
||||
|
||||
**/
|
||||
UINT8
|
||||
EFIAPI
|
||||
S3SmBusWriteDataByte (
|
||||
IN UINTN SmBusAddress,
|
||||
IN UINT8 Value,
|
||||
OUT RETURN_STATUS *Status OPTIONAL
|
||||
)
|
||||
{
|
||||
UINT8 Byte;
|
||||
|
||||
Byte = SmBusWriteDataByte (SmBusAddress, Value, Status);
|
||||
|
||||
InternalSaveSmBusExecToBootScript (EfiSmbusWriteByte, SmBusAddress, 1, &Byte);
|
||||
|
||||
return Byte;
|
||||
}
|
||||
|
||||
/**
|
||||
Executes an SMBUS read data word command and saves the value in the S3 script to be replayed
|
||||
on S3 resume.
|
||||
|
||||
Executes an SMBUS read data word command on the SMBUS device specified by SmBusAddress.
|
||||
Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
|
||||
The 16-bit value read from the SMBUS is returned.
|
||||
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||
If Length in SmBusAddress is not zero, then ASSERT().
|
||||
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||
|
||||
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||
SMBUS Command, SMBUS Data Length, and PEC.
|
||||
@param Status Return status for the executed command.
|
||||
This is an optional parameter and may be NULL.
|
||||
|
||||
@return The byte read from the SMBUS.
|
||||
|
||||
**/
|
||||
UINT16
|
||||
EFIAPI
|
||||
S3SmBusReadDataWord (
|
||||
IN UINTN SmBusAddress,
|
||||
OUT RETURN_STATUS *Status OPTIONAL
|
||||
)
|
||||
{
|
||||
UINT16 Word;
|
||||
|
||||
Word = SmBusReadDataWord (SmBusAddress, Status);
|
||||
|
||||
InternalSaveSmBusExecToBootScript (EfiSmbusReadWord, SmBusAddress, 2, &Word);
|
||||
|
||||
return Word;
|
||||
}
|
||||
|
||||
/**
|
||||
Executes an SMBUS write data word command and saves the value in the S3 script to be replayed
|
||||
on S3 resume.
|
||||
|
||||
Executes an SMBUS write data word command on the SMBUS device specified by SmBusAddress.
|
||||
The 16-bit value specified by Value is written.
|
||||
Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
|
||||
Value is returned.
|
||||
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||
If Length in SmBusAddress is not zero, then ASSERT().
|
||||
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||
|
||||
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||
SMBUS Command, SMBUS Data Length, and PEC.
|
||||
@param Value The 16-bit value to write.
|
||||
@param Status Return status for the executed command.
|
||||
This is an optional parameter and may be NULL.
|
||||
|
||||
@return The parameter of Value.
|
||||
|
||||
**/
|
||||
UINT16
|
||||
EFIAPI
|
||||
S3SmBusWriteDataWord (
|
||||
IN UINTN SmBusAddress,
|
||||
IN UINT16 Value,
|
||||
OUT RETURN_STATUS *Status OPTIONAL
|
||||
)
|
||||
{
|
||||
UINT16 Word;
|
||||
|
||||
Word = SmBusWriteDataWord (SmBusAddress, Value, Status);
|
||||
|
||||
InternalSaveSmBusExecToBootScript (EfiSmbusWriteWord, SmBusAddress, 2, &Word);
|
||||
|
||||
return Word;
|
||||
}
|
||||
|
||||
/**
|
||||
Executes an SMBUS process call command and saves the value in the S3 script to be replayed
|
||||
on S3 resume.
|
||||
|
||||
Executes an SMBUS process call command on the SMBUS device specified by SmBusAddress.
|
||||
The 16-bit value specified by Value is written.
|
||||
Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
|
||||
The 16-bit value returned by the process call command is returned.
|
||||
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||
If Length in SmBusAddress is not zero, then ASSERT().
|
||||
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||
|
||||
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||
SMBUS Command, SMBUS Data Length, and PEC.
|
||||
@param Value The 16-bit value to write.
|
||||
@param Status Return status for the executed command.
|
||||
This is an optional parameter and may be NULL.
|
||||
|
||||
@return The 16-bit value returned by the process call command.
|
||||
|
||||
**/
|
||||
UINT16
|
||||
EFIAPI
|
||||
S3SmBusProcessCall (
|
||||
IN UINTN SmBusAddress,
|
||||
IN UINT16 Value,
|
||||
OUT RETURN_STATUS *Status OPTIONAL
|
||||
)
|
||||
{
|
||||
UINT16 Word;
|
||||
|
||||
Word = SmBusProcessCall (SmBusAddress, Value, Status);
|
||||
|
||||
InternalSaveSmBusExecToBootScript (EfiSmbusProcessCall, SmBusAddress, 2, &Value);
|
||||
|
||||
return Word;
|
||||
}
|
||||
|
||||
/**
|
||||
Executes an SMBUS read block command and saves the value in the S3 script to be replayed
|
||||
on S3 resume.
|
||||
|
||||
Executes an SMBUS read block command on the SMBUS device specified by SmBusAddress.
|
||||
Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
|
||||
Bytes are read from the SMBUS and stored in Buffer.
|
||||
The number of bytes read is returned, and will never return a value larger than 32-bytes.
|
||||
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||
It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read.
|
||||
SMBUS supports a maximum transfer size of 32 bytes, so Buffer does not need to be any larger than 32 bytes.
|
||||
If Length in SmBusAddress is not zero, then ASSERT().
|
||||
If Buffer is NULL, then ASSERT().
|
||||
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||
|
||||
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||
SMBUS Command, SMBUS Data Length, and PEC.
|
||||
@param Buffer Pointer to the buffer to store the bytes read from the SMBUS.
|
||||
@param Status Return status for the executed command.
|
||||
This is an optional parameter and may be NULL.
|
||||
|
||||
@return The number of bytes read.
|
||||
|
||||
**/
|
||||
UINTN
|
||||
EFIAPI
|
||||
S3SmBusReadBlock (
|
||||
IN UINTN SmBusAddress,
|
||||
OUT VOID *Buffer,
|
||||
OUT RETURN_STATUS *Status OPTIONAL
|
||||
)
|
||||
{
|
||||
UINTN Length;
|
||||
|
||||
Length = SmBusReadBlock (SmBusAddress, Buffer, Status);
|
||||
|
||||
InternalSaveSmBusExecToBootScript (EfiSmbusReadBlock, SmBusAddress, Length, Buffer);
|
||||
|
||||
return Length;
|
||||
}
|
||||
|
||||
/**
|
||||
Executes an SMBUS write block command and saves the value in the S3 script to be replayed
|
||||
on S3 resume.
|
||||
|
||||
Executes an SMBUS write block command on the SMBUS device specified by SmBusAddress.
|
||||
The SMBUS slave address, SMBUS command, and SMBUS length fields of SmBusAddress are required.
|
||||
Bytes are written to the SMBUS from Buffer.
|
||||
The number of bytes written is returned, and will never return a value larger than 32-bytes.
|
||||
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||
If Length in SmBusAddress is zero or greater than 32, then ASSERT().
|
||||
If Buffer is NULL, then ASSERT().
|
||||
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||
|
||||
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||
SMBUS Command, SMBUS Data Length, and PEC.
|
||||
@param Buffer Pointer to the buffer to store the bytes read from the SMBUS.
|
||||
@param Status Return status for the executed command.
|
||||
This is an optional parameter and may be NULL.
|
||||
|
||||
@return The number of bytes written.
|
||||
|
||||
**/
|
||||
UINTN
|
||||
EFIAPI
|
||||
S3SmBusWriteBlock (
|
||||
IN UINTN SmBusAddress,
|
||||
OUT VOID *Buffer,
|
||||
OUT RETURN_STATUS *Status OPTIONAL
|
||||
)
|
||||
{
|
||||
UINTN Length;
|
||||
|
||||
Length = SmBusWriteBlock (SmBusAddress, Buffer, Status);
|
||||
|
||||
InternalSaveSmBusExecToBootScript (EfiSmbusWriteBlock, SmBusAddress, SMBUS_LIB_LENGTH (SmBusAddress), Buffer);
|
||||
|
||||
return Length;
|
||||
}
|
||||
|
||||
/**
|
||||
Executes an SMBUS block process call command and saves the value in the S3 script to be replayed
|
||||
on S3 resume.
|
||||
|
||||
Executes an SMBUS block process call command on the SMBUS device specified by SmBusAddress.
|
||||
The SMBUS slave address, SMBUS command, and SMBUS length fields of SmBusAddress are required.
|
||||
Bytes are written to the SMBUS from WriteBuffer. Bytes are then read from the SMBUS into ReadBuffer.
|
||||
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||
It is the caller's responsibility to make sure ReadBuffer is large enough for the total number of bytes read.
|
||||
SMBUS supports a maximum transfer size of 32 bytes, so Buffer does not need to be any larger than 32 bytes.
|
||||
If Length in SmBusAddress is zero or greater than 32, then ASSERT().
|
||||
If WriteBuffer is NULL, then ASSERT().
|
||||
If ReadBuffer is NULL, then ASSERT().
|
||||
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||
|
||||
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||
SMBUS Command, SMBUS Data Length, and PEC.
|
||||
@param WriteBuffer Pointer to the buffer of bytes to write to the SMBUS.
|
||||
@param ReadBuffer Pointer to the buffer of bytes to read from the SMBUS.
|
||||
@param Status Return status for the executed command.
|
||||
This is an optional parameter and may be NULL.
|
||||
|
||||
@return The number of bytes written.
|
||||
|
||||
**/
|
||||
UINTN
|
||||
EFIAPI
|
||||
S3SmBusBlockProcessCall (
|
||||
IN UINTN SmBusAddress,
|
||||
IN VOID *WriteBuffer,
|
||||
OUT VOID *ReadBuffer,
|
||||
OUT RETURN_STATUS *Status OPTIONAL
|
||||
)
|
||||
{
|
||||
UINTN Length;
|
||||
|
||||
Length = SmBusBlockProcessCall (SmBusAddress, WriteBuffer, ReadBuffer, Status);
|
||||
|
||||
InternalSaveSmBusExecToBootScript (EfiSmbusBWBRProcessCall, SmBusAddress, SMBUS_LIB_LENGTH (SmBusAddress), ReadBuffer);
|
||||
|
||||
return Length;
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
## @file
|
||||
# Component description file for S3StallLib.
|
||||
#
|
||||
# Stall Services that do stall and also enable the Stall operatation
|
||||
# to be replayed during an S3 resume. This library class maps directly on top
|
||||
# of the Timer class.
|
||||
#
|
||||
# Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
##
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = BaseS3StallLib
|
||||
FILE_GUID = 498C6AC3-CC29-4821-BE6F-7C6F4ECF2C14
|
||||
MODULE_TYPE = BASE
|
||||
VERSION_STRING = 1.0
|
||||
LIBRARY_CLASS = S3StallLib
|
||||
|
||||
|
||||
#
|
||||
# The following information is for reference only and not required by the build tools.
|
||||
#
|
||||
# VALID_ARCHITECTURES = IA32 X64 IPF EBC
|
||||
#
|
||||
|
||||
[Sources]
|
||||
S3StallLib.c
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
|
||||
[LibraryClasses]
|
||||
DebugLib
|
||||
TimerLib
|
||||
S3BootScriptLib
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
/** @file
|
||||
Stall Services that do stall and also enable the Stall operatation
|
||||
to be replayed during an S3 resume. This library class maps directly on top
|
||||
of the Timer class.
|
||||
|
||||
Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
|
||||
|
||||
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 <Base.h>
|
||||
|
||||
#include <Library/TimerLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/S3BootScriptLib.h>
|
||||
#include <Library/S3StallLib.h>
|
||||
|
||||
|
||||
/**
|
||||
Stalls the CPU for at least the given number of microseconds and and saves
|
||||
the value in the S3 script to be replayed on S3 resume.
|
||||
|
||||
Stalls the CPU for the number of microseconds specified by MicroSeconds.
|
||||
|
||||
@param MicroSeconds The minimum number of microseconds to delay.
|
||||
|
||||
@return MicroSeconds
|
||||
|
||||
**/
|
||||
UINTN
|
||||
EFIAPI
|
||||
S3Stall (
|
||||
IN UINTN MicroSeconds
|
||||
)
|
||||
{
|
||||
RETURN_STATUS Status;
|
||||
|
||||
Status = S3BootScriptSaveStall (MicroSecondDelay (MicroSeconds));
|
||||
ASSERT (Status == RETURN_SUCCESS);
|
||||
|
||||
return MicroSeconds;
|
||||
}
|
||||
|
||||
|
|
@ -191,6 +191,32 @@
|
|||
##
|
||||
SynchronizationLib|Include/Library/SynchronizationLib.h
|
||||
|
||||
## @libraryclass Defines library APIs used by modules to save S3 Boot
|
||||
# Script Opcodes. These OpCode will be restored by S3
|
||||
# related modules.
|
||||
S3BootScriptLib|Include/Library/S3BootScriptLib.h
|
||||
|
||||
## @libraryclass I/O and MMIO Library Services that do I/O and also enable
|
||||
# the I/O operatation to be replayed during an S3 resume.
|
||||
# This library class maps directly on top of the IoLib class.
|
||||
S3IoLib|Include/Library/S3IoLib.h
|
||||
|
||||
## @libraryclass PCI configuration Library Services that do PCI configuration
|
||||
# and also enable the PCI operations to be replayed during an
|
||||
# S3 resume. This library class maps directly on top of the
|
||||
# PciLib class.
|
||||
S3PciLib|Include/Library/S3PciLib.h
|
||||
|
||||
## @libraryclass Smbus Library Services that do SMBus transactions and also
|
||||
# enable the operatation to be replayed during an S3 resume.
|
||||
# This library class maps directly on top of the SmbusLib class.
|
||||
S3SmbusLib|Include/Library/S3SmbusLib.h
|
||||
|
||||
## @libraryclass Stall Services that do stall and also enable the Stall
|
||||
# operatation to be replayed during an S3 resume. This
|
||||
# library class maps directly on top of the Timer class.
|
||||
S3StallLib|Include/Library/S3StallLib.h
|
||||
|
||||
[LibraryClasses.IA32, LibraryClasses.X64]
|
||||
## @libraryclass Abstracts both S/W SMI generation and detection.
|
||||
##
|
||||
|
|
|
@ -140,7 +140,12 @@
|
|||
MdePkg/Library/SmmPciLibPciRootBridgeIo/SmmPciLibPciRootBridgeIo.inf
|
||||
MdePkg/Library/SmmServicesTableLib/SmmServicesTableLib.inf
|
||||
MdePkg/Library/SmmMemoryAllocationLib/SmmMemoryAllocationLib.inf
|
||||
MdePkg/Library/SmmPeriodicSmiLib/SmmPeriodicSmiLib.inf
|
||||
MdePkg/Library/SmmPeriodicSmiLib/SmmPeriodicSmiLib.inf
|
||||
MdePkg/Library/BaseS3BootScriptLibNull/BaseS3BootScriptLibNull.inf
|
||||
MdePkg/Library/BaseS3IoLib/BaseS3IoLib.inf
|
||||
MdePkg/Library/BaseS3PciLib/BaseS3PciLib.inf
|
||||
MdePkg/Library/BaseS3SmbusLib/BaseS3SmbusLib.inf
|
||||
MdePkg/Library/BaseS3StallLib/BaseS3StallLib.inf
|
||||
|
||||
[Components.IPF]
|
||||
MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
|
||||
|
|
Loading…
Reference in New Issue