1 /** @file 2 Support for S3 boot script lib. This file defined some internal macro and internal 3 data structure 4 5 Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR> 6 7 This program and the accompanying materials 8 are licensed and made available under the terms and conditions 9 of the BSD License which accompanies this distribution. The 10 full text of the license may be found at 11 http://opensource.org/licenses/bsd-license.php 12 13 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 14 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 15 16 **/ 17 #ifndef __INTERNAL_BOOT_SCRIPT_LIB__ 18 #define __INTERNAL_BOOT_SCRIPT_LIB__ 19 20 #include <PiDxe.h> 21 22 #include <Guid/EventGroup.h> 23 #include <Protocol/SmmBase2.h> 24 #include <Protocol/DxeSmmReadyToLock.h> 25 #include <Protocol/SmmReadyToLock.h> 26 #include <Protocol/SmmExitBootServices.h> 27 #include <Protocol/SmmLegacyBoot.h> 28 29 #include <Library/S3BootScriptLib.h> 30 31 #include <Library/UefiBootServicesTableLib.h> 32 #include <Library/BaseLib.h> 33 #include <Library/PcdLib.h> 34 #include <Library/SmbusLib.h> 35 #include <Library/IoLib.h> 36 #include <Library/PciLib.h> 37 #include <Library/DebugLib.h> 38 #include <Library/BaseMemoryLib.h> 39 #include <Library/TimerLib.h> 40 #include <Library/UefiLib.h> 41 #include <Library/LockBoxLib.h> 42 43 #include "BootScriptInternalFormat.h" 44 45 #define MAX_IO_ADDRESS 0xFFFF 46 47 // 48 // Macro to convert a UEFI PCI address to a PCI Library PCI address 49 // 50 #define PCI_ADDRESS_ENCODE(A) (UINTN)PCI_LIB_ADDRESS( \ 51 ((((UINTN)(A))& 0xff000000) >> 24), ((((UINTN)(A)) &0x00ff0000) >> 16), ((((UINTN)(A)) & 0xff00) >> 8), ((RShiftU64 ((A), 32) & 0xfff) | ((A)& 0xff)) \ 52 ) 53 54 55 56 typedef union { 57 UINT8 volatile *Buf; 58 UINT8 volatile *Uint8; 59 UINT16 volatile *Uint16; 60 UINT32 volatile *Uint32; 61 UINT64 volatile *Uint64; 62 UINTN volatile Uint; 63 } PTR; 64 65 66 // Minimum and maximum length for SMBus bus block protocols defined in SMBus spec 2.0. 67 // 68 #define MIN_SMBUS_BLOCK_LEN 1 69 #define MAX_SMBUS_BLOCK_LEN 32 70 71 // 72 // The boot script private data. 73 // 74 typedef struct { 75 UINT8 *TableBase; 76 UINT32 TableLength; // Record the actual memory length 77 UINT16 TableMemoryPageNumber; // Record the page number Allocated for the table 78 BOOLEAN InSmm; // Record if this library is in SMM. 79 BOOLEAN AtRuntime; // Record if current state is after SmmExitBootServices or SmmLegacyBoot. 80 UINT32 BootTimeScriptLength; // Maintain boot time script length in LockBox after SmmReadyToLock in SMM. 81 BOOLEAN SmmLocked; // Record if current state is after SmmReadyToLock 82 BOOLEAN BackFromS3; // Indicate that the system is back from S3. 83 } SCRIPT_TABLE_PRIVATE_DATA; 84 85 typedef 86 EFI_STATUS 87 (EFIAPI *DISPATCH_ENTRYPOINT_FUNC) ( 88 IN EFI_HANDLE ImageHandle, 89 IN VOID *Context 90 ); 91 92 extern SCRIPT_TABLE_PRIVATE_DATA *mS3BootScriptTablePtr; 93 94 // 95 // Define Opcode for Label which is implementation specific and no standard spec define. 96 // 97 #define S3_BOOT_SCRIPT_LIB_LABEL_OPCODE 0xFE 98 99 /// 100 /// The opcode indicate the start of the boot script table. 101 /// 102 #define S3_BOOT_SCRIPT_LIB_TABLE_OPCODE 0xAA 103 /// 104 /// The opcode indicate the end of the boot script table. 105 /// 106 #define S3_BOOT_SCRIPT_LIB_TERMINATE_OPCODE 0xFF 107 108 109 #endif //__INTERNAL_BOOT_SCRIPT_LIB__ 110 111