]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Include/Guid/PiSmmCommunicationRegionTable.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / MdeModulePkg / Include / Guid / PiSmmCommunicationRegionTable.h
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