mirror of https://github.com/acidanthera/audk.git
MdeModulePkg: Add PiDxeS3BootScriptLib
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@12224 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
88d20adc90
commit
64d14edfeb
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,186 @@
|
||||||
|
/** @file
|
||||||
|
This file declares the internal Framework Boot Script format used by
|
||||||
|
the PI implementation of Script Saver and Executor.
|
||||||
|
|
||||||
|
Copyright (c) 2006, 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 _BOOT_SCRIPT_INTERNAL_FORMAT_H_
|
||||||
|
#define _BOOT_SCRIPT_INTERNAL_FORMAT_H_
|
||||||
|
|
||||||
|
#pragma pack(1)
|
||||||
|
|
||||||
|
//
|
||||||
|
// Boot Script Opcode Header Structure Definitions
|
||||||
|
//
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
UINT16 OpCode;
|
||||||
|
UINT8 Length;
|
||||||
|
} EFI_BOOT_SCRIPT_GENERIC_HEADER;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
UINT16 OpCode;
|
||||||
|
UINT8 Length;
|
||||||
|
UINT16 Version;
|
||||||
|
UINT32 TableLength;
|
||||||
|
UINT16 Reserved[2];
|
||||||
|
} EFI_BOOT_SCRIPT_TABLE_HEADER;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
UINT16 OpCode;
|
||||||
|
UINT8 Length;
|
||||||
|
UINT32 Width;
|
||||||
|
} EFI_BOOT_SCRIPT_COMMON_HEADER;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
UINT16 OpCode;
|
||||||
|
UINT8 Length;
|
||||||
|
UINT32 Width;
|
||||||
|
UINT32 Count;
|
||||||
|
UINT64 Address;
|
||||||
|
} EFI_BOOT_SCRIPT_IO_WRITE;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
UINT16 OpCode;
|
||||||
|
UINT8 Length;
|
||||||
|
UINT32 Width;
|
||||||
|
UINT64 Address;
|
||||||
|
} EFI_BOOT_SCRIPT_IO_READ_WRITE;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
UINT16 OpCode;
|
||||||
|
UINT8 Length;
|
||||||
|
UINT32 Width;
|
||||||
|
UINT32 Count;
|
||||||
|
UINT64 Address;
|
||||||
|
} EFI_BOOT_SCRIPT_MEM_WRITE;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
UINT16 OpCode;
|
||||||
|
UINT8 Length;
|
||||||
|
UINT32 Width;
|
||||||
|
UINT64 Address;
|
||||||
|
} EFI_BOOT_SCRIPT_MEM_READ_WRITE;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
UINT16 OpCode;
|
||||||
|
UINT8 Length;
|
||||||
|
UINT32 Width;
|
||||||
|
UINT32 Count;
|
||||||
|
UINT64 Address;
|
||||||
|
} EFI_BOOT_SCRIPT_PCI_CONFIG_WRITE;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
UINT16 OpCode;
|
||||||
|
UINT8 Length;
|
||||||
|
UINT32 Width;
|
||||||
|
UINT32 Count;
|
||||||
|
UINT64 Address;
|
||||||
|
UINT16 Segment;
|
||||||
|
} EFI_BOOT_SCRIPT_PCI_CONFIG2_WRITE;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
UINT16 OpCode;
|
||||||
|
UINT8 Length;
|
||||||
|
UINT32 Width;
|
||||||
|
UINT64 Address;
|
||||||
|
} EFI_BOOT_SCRIPT_PCI_CONFIG_READ_WRITE;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
UINT16 OpCode;
|
||||||
|
UINT8 Length;
|
||||||
|
UINT32 Width;
|
||||||
|
UINT64 Address;
|
||||||
|
UINT16 Segment;
|
||||||
|
} EFI_BOOT_SCRIPT_PCI_CONFIG2_READ_WRITE;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
UINT16 OpCode;
|
||||||
|
UINT8 Length;
|
||||||
|
UINT64 SmBusAddress;
|
||||||
|
UINT32 Operation;
|
||||||
|
UINT32 DataSize;
|
||||||
|
} EFI_BOOT_SCRIPT_SMBUS_EXECUTE;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
UINT16 OpCode;
|
||||||
|
UINT8 Length;
|
||||||
|
UINT64 Duration;
|
||||||
|
} EFI_BOOT_SCRIPT_STALL;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
UINT16 OpCode;
|
||||||
|
UINT8 Length;
|
||||||
|
EFI_PHYSICAL_ADDRESS EntryPoint;
|
||||||
|
} EFI_BOOT_SCRIPT_DISPATCH;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
UINT16 OpCode;
|
||||||
|
UINT8 Length;
|
||||||
|
EFI_PHYSICAL_ADDRESS EntryPoint;
|
||||||
|
EFI_PHYSICAL_ADDRESS Context;
|
||||||
|
} EFI_BOOT_SCRIPT_DISPATCH_2;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
UINT16 OpCode;
|
||||||
|
UINT8 Length;
|
||||||
|
UINT32 Width;
|
||||||
|
UINT64 Address;
|
||||||
|
UINT64 Duration;
|
||||||
|
UINT64 LoopTimes;
|
||||||
|
} EFI_BOOT_SCRIPT_MEM_POLL;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
UINT16 OpCode;
|
||||||
|
UINT8 Length;
|
||||||
|
UINT32 InformationLength;
|
||||||
|
EFI_PHYSICAL_ADDRESS Information;
|
||||||
|
} EFI_BOOT_SCRIPT_INFORMATION;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
UINT16 OpCode;
|
||||||
|
UINT8 Length;
|
||||||
|
UINT32 Width;
|
||||||
|
UINT64 Address;
|
||||||
|
UINT64 Delay;
|
||||||
|
} EFI_BOOT_SCRIPT_IO_POLL;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
UINT16 OpCode;
|
||||||
|
UINT8 Length;
|
||||||
|
UINT32 Width;
|
||||||
|
UINT64 Address;
|
||||||
|
UINT64 Delay;
|
||||||
|
} EFI_BOOT_SCRIPT_PCI_CONFIG_POLL;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
UINT16 OpCode;
|
||||||
|
UINT8 Length;
|
||||||
|
UINT32 Width;
|
||||||
|
UINT64 Address;
|
||||||
|
UINT16 Segment;
|
||||||
|
UINT64 Delay;
|
||||||
|
} EFI_BOOT_SCRIPT_PCI_CONFIG2_POLL;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
UINT16 OpCode;
|
||||||
|
UINT8 Length;
|
||||||
|
} EFI_BOOT_SCRIPT_TERMINATE;
|
||||||
|
|
||||||
|
|
||||||
|
#pragma pack()
|
||||||
|
|
||||||
|
#define BOOT_SCRIPT_NODE_MAX_LENGTH 1024
|
||||||
|
|
||||||
|
#endif
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,70 @@
|
||||||
|
## @file
|
||||||
|
# S3 boot script Library which could be used for multi phases.
|
||||||
|
#
|
||||||
|
# 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 = DxeS3BootScriptLib
|
||||||
|
FILE_GUID = 57F9967B-26CD-4262-837A-55B8AA158254
|
||||||
|
MODULE_TYPE = DXE_DRIVER
|
||||||
|
VERSION_STRING = 1.0
|
||||||
|
LIBRARY_CLASS = S3BootScriptLib|SEC PEIM PEI_CORE DXE_CORE DXE_DRIVER DXE_RUNTIME_DRIVER DXE_SMM_DRIVER DXE_SAL_DRIVER UEFI_DRIVER UEFI_APPLICATION
|
||||||
|
|
||||||
|
|
||||||
|
CONSTRUCTOR = S3BootScriptLibInitialize
|
||||||
|
|
||||||
|
#
|
||||||
|
# The following information is for reference only and not required by the build tools.
|
||||||
|
#
|
||||||
|
# VALID_ARCHITECTURES = IA32 X64 IPF EBC
|
||||||
|
#
|
||||||
|
|
||||||
|
[Sources]
|
||||||
|
BootScriptSave.c
|
||||||
|
BootScriptExecute.c
|
||||||
|
InternalBootScriptLib.h
|
||||||
|
BootScriptInternalFormat.h
|
||||||
|
|
||||||
|
|
||||||
|
[Packages]
|
||||||
|
MdePkg/MdePkg.dec
|
||||||
|
MdeModulePkg/MdeModulePkg.dec
|
||||||
|
|
||||||
|
[LibraryClasses]
|
||||||
|
UefiBootServicesTableLib
|
||||||
|
BaseLib
|
||||||
|
BaseMemoryLib
|
||||||
|
TimerLib
|
||||||
|
DebugLib
|
||||||
|
PcdLib
|
||||||
|
UefiLib
|
||||||
|
SmbusLib
|
||||||
|
PciLib
|
||||||
|
IoLib
|
||||||
|
LockBoxLib
|
||||||
|
|
||||||
|
[Guids]
|
||||||
|
gEfiEventExitBootServicesGuid # ALWAYS_CONSUMED
|
||||||
|
|
||||||
|
[Protocols]
|
||||||
|
gEfiSmmBase2ProtocolGuid # ALWAYS_CONSUMED
|
||||||
|
gEfiDxeSmmReadyToLockProtocolGuid # ALWAYS_CONSUMED
|
||||||
|
gEfiSmmReadyToLockProtocolGuid # ALWAYS_CONSUMED
|
||||||
|
|
||||||
|
[Pcd]
|
||||||
|
gEfiMdeModulePkgTokenSpaceGuid.PcdS3BootScriptTablePrivateDataPtr ## CONSUMES
|
||||||
|
gEfiMdeModulePkgTokenSpaceGuid.PcdS3BootScriptRuntimeTableReservePageNumber ## CONSUMES
|
||||||
|
|
||||||
|
[Depex]
|
||||||
|
gPcdProtocolGuid
|
|
@ -0,0 +1,102 @@
|
||||||
|
/** @file
|
||||||
|
Support for S3 boot script lib. This file defined some internal macro and internal
|
||||||
|
data structure
|
||||||
|
|
||||||
|
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 __INTERNAL_BOOT_SCRIPT_LIB__
|
||||||
|
#define __INTERNAL_BOOT_SCRIPT_LIB__
|
||||||
|
|
||||||
|
#include <PiDxe.h>
|
||||||
|
|
||||||
|
#include <Guid/EventGroup.h>
|
||||||
|
#include <Protocol/SmmBase2.h>
|
||||||
|
#include <Protocol/DxeSmmReadyToLock.h>
|
||||||
|
#include <Protocol/SmmReadyToLock.h>
|
||||||
|
|
||||||
|
#include <Library/S3BootScriptLib.h>
|
||||||
|
|
||||||
|
#include <Library/UefiBootServicesTableLib.h>
|
||||||
|
#include <Library/BaseLib.h>
|
||||||
|
#include <Library/PcdLib.h>
|
||||||
|
#include <Library/SmbusLib.h>
|
||||||
|
#include <Library/IoLib.h>
|
||||||
|
#include <Library/PciLib.h>
|
||||||
|
#include <Library/DebugLib.h>
|
||||||
|
#include <Library/BaseMemoryLib.h>
|
||||||
|
#include <Library/TimerLib.h>
|
||||||
|
#include <Library/UefiLib.h>
|
||||||
|
#include <Library/LockBoxLib.h>
|
||||||
|
|
||||||
|
#include "BootScriptInternalFormat.h"
|
||||||
|
|
||||||
|
#define MAX_IO_ADDRESS 0xFFFF
|
||||||
|
|
||||||
|
#define PCI_ADDRESS_ENCODE(A) (UINTN)PCI_LIB_ADDRESS( \
|
||||||
|
(((A)& 0xff000000) >> 24), (((A) &0x00ff0000) >> 16), (((A) & 0xff00) >> 8), ((RShiftU64 ((A), 32) & 0xfff) | ((A)& 0xff)) \
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef union {
|
||||||
|
UINT8 volatile *Buf;
|
||||||
|
UINT8 volatile *Uint8;
|
||||||
|
UINT16 volatile *Uint16;
|
||||||
|
UINT32 volatile *Uint32;
|
||||||
|
UINT64 volatile *Uint64;
|
||||||
|
UINTN volatile Uint;
|
||||||
|
} PTR;
|
||||||
|
|
||||||
|
|
||||||
|
// Minimum and maximum length for SMBus bus block protocols defined in SMBus spec 2.0.
|
||||||
|
//
|
||||||
|
#define MIN_SMBUS_BLOCK_LEN 1
|
||||||
|
#define MAX_SMBUS_BLOCK_LEN 32
|
||||||
|
|
||||||
|
//
|
||||||
|
// The boot script private data.
|
||||||
|
//
|
||||||
|
typedef struct {
|
||||||
|
UINT8 *TableBase;
|
||||||
|
UINT32 TableLength; // Record the actual memory length
|
||||||
|
UINT16 TableMemoryPageNumber; // Record the page number Allocated for the table
|
||||||
|
BOOLEAN AtRuntime; // Record if current state is after SmmReadyToLock
|
||||||
|
BOOLEAN InSmm; // Record if this library is in SMM.
|
||||||
|
} SCRIPT_TABLE_PRIVATE_DATA;
|
||||||
|
|
||||||
|
typedef
|
||||||
|
EFI_STATUS
|
||||||
|
(EFIAPI *DISPATCH_ENTRYPOINT_FUNC) (
|
||||||
|
IN EFI_HANDLE ImageHandle,
|
||||||
|
IN VOID *Context
|
||||||
|
);
|
||||||
|
|
||||||
|
extern SCRIPT_TABLE_PRIVATE_DATA *mS3BootScriptTablePtr;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Define Opcode for Label which is implementation specific and no standard spec define.
|
||||||
|
//
|
||||||
|
#define S3_BOOT_SCRIPT_LIB_LABEL_OPCODE 0xFE
|
||||||
|
|
||||||
|
///
|
||||||
|
/// The opcode indicate the start of the boot script table.
|
||||||
|
///
|
||||||
|
#define S3_BOOT_SCRIPT_LIB_TABLE_OPCODE 0xAA
|
||||||
|
///
|
||||||
|
/// The opcode indicate the end of the boot script table.
|
||||||
|
///
|
||||||
|
#define S3_BOOT_SCRIPT_LIB_TERMINATE_OPCODE 0xFF
|
||||||
|
|
||||||
|
|
||||||
|
#endif //__INTERNAL_BOOT_SCRIPT_LIB__
|
||||||
|
|
|
@ -241,6 +241,7 @@
|
||||||
MdeModulePkg/Library/DxeDebugPrintErrorLevelLib/DxeDebugPrintErrorLevelLib.inf
|
MdeModulePkg/Library/DxeDebugPrintErrorLevelLib/DxeDebugPrintErrorLevelLib.inf
|
||||||
MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxDxeLib.inf
|
MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxDxeLib.inf
|
||||||
MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.inf
|
MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.inf
|
||||||
|
MdeModulePkg/Library/PiDxeS3BootScriptLib/DxeS3BootScriptLib.inf
|
||||||
|
|
||||||
MdeModulePkg/Universal/CapsulePei/CapsulePei.inf
|
MdeModulePkg/Universal/CapsulePei/CapsulePei.inf
|
||||||
MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf
|
MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf
|
||||||
|
|
Loading…
Reference in New Issue