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