]>
Commit | Line | Data |
---|---|---|
1e01ea24 JY |
1 | /** @file\r |
2 | \r | |
3 | Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>\r | |
4 | This program and the accompanying materials are licensed and made available under \r | |
5 | the terms and conditions of the BSD License that accompanies this distribution. \r | |
6 | The full text of the license may be found at\r | |
7 | http://opensource.org/licenses/bsd-license.php. \r | |
8 | \r | |
9 | THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r | |
10 | WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r | |
11 | \r | |
12 | **/\r | |
13 | \r | |
14 | #ifndef _PI_SMM_COMMUNICATION_REGION_TABLE_H_\r | |
15 | #define _PI_SMM_COMMUNICATION_REGION_TABLE_H_\r | |
16 | \r | |
17 | #define EDKII_PI_SMM_COMMUNICATION_REGION_TABLE_GUID {\\r | |
18 | 0x4e28ca50, 0xd582, 0x44ac, {0xa1, 0x1f, 0xe3, 0xd5, 0x65, 0x26, 0xdb, 0x34} \\r | |
19 | }\r | |
20 | \r | |
21 | //\r | |
22 | // This table to declare the generic SMM communication buffer location.\r | |
23 | // If this table is present, it means the SMM communication buffer is restricted to\r | |
24 | // EfiReservedMemoryType, EfiACPIMemoryNVS, or EfiRuntimeServicesData.\r | |
25 | //\r | |
26 | // This table is installed to UEFI configuration table by generic driver\r | |
27 | // or platform driver, at early DXE phase.\r | |
28 | // \r | |
29 | // The EFI_MEMORY_DESCRIPTOR entry must contain at least one entry.\r | |
30 | // The entries must be normal memory region in EfiReservedMemoryType, EfiACPIMemoryNVS,\r | |
31 | // or EfiRuntimeServicesData.\r | |
32 | // If the Entry.Type is EfiConventionalMemory, it means this entry is free to use.\r | |
33 | // If the Entry.Type is other, it means this entry is occupied.\r | |
34 | //\r | |
35 | // Any non-SMM component may put communication data there, then use \r | |
36 | // UEFI defined SMM Communication ACPI Table, or PI defined EFI_SMM_COMMUNICATION_PROTOCOL\r | |
37 | // to communicate with SMI handler. The process is:\r | |
38 | // 1) Find an entry whose type is EfiConventional.\r | |
39 | // 2) Change type to be EfiReservedMemoryType before use.\r | |
40 | // 3) Use it.\r | |
41 | // 4) Restore type be EfiConventional.\r | |
42 | // The step 2) must be performed as an atomic transaction, if there might be conflict during runtime.\r | |
43 | // For example, on IA-32/x64 platforms, this can be done using the CMPXCHG CPU instruction.\r | |
44 | // If there is guarantee on no conflict during boot time, these steps can be skipped.\r | |
45 | // For example, DXE, UEFI driver and UEFI application runs in sequence.\r | |
46 | //\r | |
47 | // For example, FPDT driver can use this communication buffer to get SMM\r | |
48 | // performance data in SMM. Profile driver can use this communication buffer\r | |
49 | // to get SMM profile data in SMM.\r | |
50 | //\r | |
51 | typedef struct {\r | |
52 | UINT32 Version;\r | |
53 | UINT32 NumberOfEntries;\r | |
54 | UINT32 DescriptorSize;\r | |
55 | UINT32 Reserved;\r | |
56 | //EFI_MEMORY_DESCRIPTOR Entry[1];\r | |
57 | } EDKII_PI_SMM_COMMUNICATION_REGION_TABLE;\r | |
58 | \r | |
59 | #define EDKII_PI_SMM_COMMUNICATION_REGION_TABLE_VERSION 0x00000001\r | |
60 | \r | |
61 | extern EFI_GUID gEdkiiPiSmmCommunicationRegionTableGuid;\r | |
62 | \r | |
63 | #endif\r |