]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Library/PiDxeS3BootScriptLib/InternalBootScriptLib.h
e54027848346f9e81a270da652088aab398285ea
[mirror_edk2.git] / MdeModulePkg / Library / PiDxeS3BootScriptLib / InternalBootScriptLib.h
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