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 - 2016, Intel Corporation. All rights reserved.<BR>
|
---|
6 |
|
---|
7 | SPDX-License-Identifier: BSD-2-Clause-Patent
|
---|
8 |
|
---|
9 | **/
|
---|
10 | #ifndef __INTERNAL_BOOT_SCRIPT_LIB__
|
---|
11 | #define __INTERNAL_BOOT_SCRIPT_LIB__
|
---|
12 |
|
---|
13 | #include <PiDxe.h>
|
---|
14 |
|
---|
15 | #include <Guid/EventGroup.h>
|
---|
16 | #include <Protocol/SmmBase2.h>
|
---|
17 | #include <Protocol/DxeSmmReadyToLock.h>
|
---|
18 | #include <Protocol/SmmReadyToLock.h>
|
---|
19 | #include <Protocol/SmmExitBootServices.h>
|
---|
20 | #include <Protocol/SmmLegacyBoot.h>
|
---|
21 |
|
---|
22 | #include <Library/S3BootScriptLib.h>
|
---|
23 |
|
---|
24 | #include <Library/UefiBootServicesTableLib.h>
|
---|
25 | #include <Library/BaseLib.h>
|
---|
26 | #include <Library/PcdLib.h>
|
---|
27 | #include <Library/SmbusLib.h>
|
---|
28 | #include <Library/IoLib.h>
|
---|
29 | #include <Library/PciSegmentLib.h>
|
---|
30 | #include <Library/DebugLib.h>
|
---|
31 | #include <Library/BaseMemoryLib.h>
|
---|
32 | #include <Library/TimerLib.h>
|
---|
33 | #include <Library/UefiLib.h>
|
---|
34 | #include <Library/LockBoxLib.h>
|
---|
35 |
|
---|
36 | #include "BootScriptInternalFormat.h"
|
---|
37 |
|
---|
38 | #define MAX_IO_ADDRESS 0xFFFF
|
---|
39 |
|
---|
40 | //
|
---|
41 | // Macro to convert a UEFI PCI address + segment to a PCI Segment Library PCI address
|
---|
42 | //
|
---|
43 | #define PCI_ADDRESS_ENCODE(S, A) PCI_SEGMENT_LIB_ADDRESS( \
|
---|
44 | S, \
|
---|
45 | ((((UINTN)(A)) & 0xff000000) >> 24), \
|
---|
46 | ((((UINTN)(A)) & 0x00ff0000) >> 16), \
|
---|
47 | ((((UINTN)(A)) & 0xff00) >> 8), \
|
---|
48 | ((RShiftU64 ((A), 32) & 0xfff) | ((A) & 0xff)) \
|
---|
49 | )
|
---|
50 |
|
---|
51 | typedef union {
|
---|
52 | UINT8 volatile *Buf;
|
---|
53 | UINT8 volatile *Uint8;
|
---|
54 | UINT16 volatile *Uint16;
|
---|
55 | UINT32 volatile *Uint32;
|
---|
56 | UINT64 volatile *Uint64;
|
---|
57 | UINTN volatile Uint;
|
---|
58 | } PTR;
|
---|
59 |
|
---|
60 |
|
---|
61 | // Minimum and maximum length for SMBus bus block protocols defined in SMBus spec 2.0.
|
---|
62 | //
|
---|
63 | #define MIN_SMBUS_BLOCK_LEN 1
|
---|
64 | #define MAX_SMBUS_BLOCK_LEN 32
|
---|
65 |
|
---|
66 | //
|
---|
67 | // The boot script private data.
|
---|
68 | //
|
---|
69 | typedef struct {
|
---|
70 | UINT8 *TableBase;
|
---|
71 | UINT32 TableLength; // Record the actual memory length
|
---|
72 | UINT16 TableMemoryPageNumber; // Record the page number Allocated for the table
|
---|
73 | BOOLEAN InSmm; // Record if this library is in SMM.
|
---|
74 | BOOLEAN AtRuntime; // Record if current state is after SmmExitBootServices or SmmLegacyBoot.
|
---|
75 | UINT32 BootTimeScriptLength; // Maintain boot time script length in LockBox after SmmReadyToLock in SMM.
|
---|
76 | BOOLEAN SmmLocked; // Record if current state is after SmmReadyToLock
|
---|
77 | BOOLEAN BackFromS3; // Indicate that the system is back from S3.
|
---|
78 | } SCRIPT_TABLE_PRIVATE_DATA;
|
---|
79 |
|
---|
80 | typedef
|
---|
81 | EFI_STATUS
|
---|
82 | (EFIAPI *DISPATCH_ENTRYPOINT_FUNC) (
|
---|
83 | IN EFI_HANDLE ImageHandle,
|
---|
84 | IN VOID *Context
|
---|
85 | );
|
---|
86 |
|
---|
87 | extern SCRIPT_TABLE_PRIVATE_DATA *mS3BootScriptTablePtr;
|
---|
88 |
|
---|
89 | //
|
---|
90 | // Define Opcode for Label which is implementation specific and no standard spec define.
|
---|
91 | //
|
---|
92 | #define S3_BOOT_SCRIPT_LIB_LABEL_OPCODE 0xFE
|
---|
93 |
|
---|
94 | ///
|
---|
95 | /// The opcode indicate the start of the boot script table.
|
---|
96 | ///
|
---|
97 | #define S3_BOOT_SCRIPT_LIB_TABLE_OPCODE 0xAA
|
---|
98 | ///
|
---|
99 | /// The opcode indicate the end of the boot script table.
|
---|
100 | ///
|
---|
101 | #define S3_BOOT_SCRIPT_LIB_TERMINATE_OPCODE 0xFF
|
---|
102 |
|
---|
103 |
|
---|
104 | #endif //__INTERNAL_BOOT_SCRIPT_LIB__
|
---|
105 |
|
---|