2 Support for S3 boot script lib. This file defined some internal macro and internal
5 Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>
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
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.
17 #ifndef __INTERNAL_BOOT_SCRIPT_LIB__
18 #define __INTERNAL_BOOT_SCRIPT_LIB__
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>
29 #include <Library/S3BootScriptLib.h>
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/PciSegmentLib.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>
43 #include "BootScriptInternalFormat.h"
45 #define MAX_IO_ADDRESS 0xFFFF
48 // Macro to convert a UEFI PCI address + segment to a PCI Segment Library PCI address
50 #define PCI_ADDRESS_ENCODE(S, A) PCI_SEGMENT_LIB_ADDRESS( \
52 ((((UINTN)(A)) & 0xff000000) >> 24), \
53 ((((UINTN)(A)) & 0x00ff0000) >> 16), \
54 ((((UINTN)(A)) & 0xff00) >> 8), \
55 ((RShiftU64 ((A), 32) & 0xfff) | ((A) & 0xff)) \
60 UINT8
volatile *Uint8
;
61 UINT16
volatile *Uint16
;
62 UINT32
volatile *Uint32
;
63 UINT64
volatile *Uint64
;
68 // Minimum and maximum length for SMBus bus block protocols defined in SMBus spec 2.0.
70 #define MIN_SMBUS_BLOCK_LEN 1
71 #define MAX_SMBUS_BLOCK_LEN 32
74 // The boot script private data.
78 UINT32 TableLength
; // Record the actual memory length
79 UINT16 TableMemoryPageNumber
; // Record the page number Allocated for the table
80 BOOLEAN InSmm
; // Record if this library is in SMM.
81 BOOLEAN AtRuntime
; // Record if current state is after SmmExitBootServices or SmmLegacyBoot.
82 UINT32 BootTimeScriptLength
; // Maintain boot time script length in LockBox after SmmReadyToLock in SMM.
83 BOOLEAN SmmLocked
; // Record if current state is after SmmReadyToLock
84 BOOLEAN BackFromS3
; // Indicate that the system is back from S3.
85 } SCRIPT_TABLE_PRIVATE_DATA
;
89 (EFIAPI
*DISPATCH_ENTRYPOINT_FUNC
) (
90 IN EFI_HANDLE ImageHandle
,
94 extern SCRIPT_TABLE_PRIVATE_DATA
*mS3BootScriptTablePtr
;
97 // Define Opcode for Label which is implementation specific and no standard spec define.
99 #define S3_BOOT_SCRIPT_LIB_LABEL_OPCODE 0xFE
102 /// The opcode indicate the start of the boot script table.
104 #define S3_BOOT_SCRIPT_LIB_TABLE_OPCODE 0xAA
106 /// The opcode indicate the end of the boot script table.
108 #define S3_BOOT_SCRIPT_LIB_TERMINATE_OPCODE 0xFF
111 #endif //__INTERNAL_BOOT_SCRIPT_LIB__