Home | History | Annotate | Download | only in Guid
      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