1 | /** @file
|
---|
2 |
|
---|
3 | Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
|
---|
4 | SPDX-License-Identifier: BSD-2-Clause-Patent
|
---|
5 |
|
---|
6 | **/
|
---|
7 |
|
---|
8 | #ifndef _PI_SMM_COMMUNICATION_REGION_TABLE_H_
|
---|
9 | #define _PI_SMM_COMMUNICATION_REGION_TABLE_H_
|
---|
10 |
|
---|
11 | #define EDKII_PI_SMM_COMMUNICATION_REGION_TABLE_GUID {\
|
---|
12 | 0x4e28ca50, 0xd582, 0x44ac, {0xa1, 0x1f, 0xe3, 0xd5, 0x65, 0x26, 0xdb, 0x34} \
|
---|
13 | }
|
---|
14 |
|
---|
15 | //
|
---|
16 | // This table to declare the generic SMM communication buffer location.
|
---|
17 | // If this table is present, it means the SMM communication buffer is restricted to
|
---|
18 | // EfiReservedMemoryType, EfiACPIMemoryNVS, or EfiRuntimeServicesData.
|
---|
19 | //
|
---|
20 | // This table is installed to UEFI configuration table by generic driver
|
---|
21 | // or platform driver, at early DXE phase.
|
---|
22 | //
|
---|
23 | // The EFI_MEMORY_DESCRIPTOR entry must contain at least one entry.
|
---|
24 | // The entries must be normal memory region in EfiReservedMemoryType, EfiACPIMemoryNVS,
|
---|
25 | // or EfiRuntimeServicesData.
|
---|
26 | // If the Entry.Type is EfiConventionalMemory, it means this entry is free to use.
|
---|
27 | // If the Entry.Type is other, it means this entry is occupied.
|
---|
28 | //
|
---|
29 | // Any non-SMM component may put communication data there, then use
|
---|
30 | // UEFI defined SMM Communication ACPI Table, or PI defined EFI_SMM_COMMUNICATION_PROTOCOL
|
---|
31 | // to communicate with SMI handler. The process is:
|
---|
32 | // 1) Find an entry whose type is EfiConventional.
|
---|
33 | // 2) Change type to be EfiReservedMemoryType before use.
|
---|
34 | // 3) Use it.
|
---|
35 | // 4) Restore type be EfiConventional.
|
---|
36 | // The step 2) must be performed as an atomic transaction, if there might be conflict during runtime.
|
---|
37 | // For example, on IA-32/x64 platforms, this can be done using the CMPXCHG CPU instruction.
|
---|
38 | // If there is guarantee on no conflict during boot time, these steps can be skipped.
|
---|
39 | // For example, DXE, UEFI driver and UEFI application runs in sequence.
|
---|
40 | //
|
---|
41 | // For example, FPDT driver can use this communication buffer to get SMM
|
---|
42 | // performance data in SMM. Profile driver can use this communication buffer
|
---|
43 | // to get SMM profile data in SMM.
|
---|
44 | //
|
---|
45 | typedef struct {
|
---|
46 | UINT32 Version;
|
---|
47 | UINT32 NumberOfEntries;
|
---|
48 | UINT32 DescriptorSize;
|
---|
49 | UINT32 Reserved;
|
---|
50 | //EFI_MEMORY_DESCRIPTOR Entry[1];
|
---|
51 | } EDKII_PI_SMM_COMMUNICATION_REGION_TABLE;
|
---|
52 |
|
---|
53 | #define EDKII_PI_SMM_COMMUNICATION_REGION_TABLE_VERSION 0x00000001
|
---|
54 |
|
---|
55 | extern EFI_GUID gEdkiiPiSmmCommunicationRegionTableGuid;
|
---|
56 |
|
---|
57 | #endif
|
---|