mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-10-30 18:53:45 +01:00 
			
		
		
		
	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
					
				
							
								
								
									
										1753
									
								
								MdeModulePkg/Library/PiDxeS3BootScriptLib/BootScriptExecute.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1753
									
								
								MdeModulePkg/Library/PiDxeS3BootScriptLib/BootScriptExecute.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												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 | ||||||
							
								
								
									
										1852
									
								
								MdeModulePkg/Library/PiDxeS3BootScriptLib/BootScriptSave.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1852
									
								
								MdeModulePkg/Library/PiDxeS3BootScriptLib/BootScriptSave.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user