1. Do not use tab characters 2. No trailing white space in one line 3. All files must end with CRLF Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Liming Gao <liming.gao@intel.com> Reviewed-by: Star Zeng <star.zeng@intel.com>
		
			
				
	
	
		
			64 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
 | 
						|
Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
 | 
						|
This program and the accompanying materials are licensed and made available under
 | 
						|
the terms and conditions of the BSD License that accompanies this distribution.
 | 
						|
The full text of the license may be found at
 | 
						|
http://opensource.org/licenses/bsd-license.php.
 | 
						|
 | 
						|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | 
						|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef _PI_SMM_COMMUNICATION_REGION_TABLE_H_
 | 
						|
#define _PI_SMM_COMMUNICATION_REGION_TABLE_H_
 | 
						|
 | 
						|
#define EDKII_PI_SMM_COMMUNICATION_REGION_TABLE_GUID {\
 | 
						|
  0x4e28ca50, 0xd582, 0x44ac, {0xa1, 0x1f, 0xe3, 0xd5, 0x65, 0x26, 0xdb, 0x34} \
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// This table to declare the generic SMM communication buffer location.
 | 
						|
// If this table is present, it means the SMM communication buffer is restricted to
 | 
						|
// EfiReservedMemoryType, EfiACPIMemoryNVS, or EfiRuntimeServicesData.
 | 
						|
//
 | 
						|
// This table is installed to UEFI configuration table by generic driver
 | 
						|
// or platform driver, at early DXE phase.
 | 
						|
//
 | 
						|
// The EFI_MEMORY_DESCRIPTOR entry must contain at least one entry.
 | 
						|
// The entries must be normal memory region in EfiReservedMemoryType, EfiACPIMemoryNVS,
 | 
						|
// or EfiRuntimeServicesData.
 | 
						|
// If the Entry.Type is EfiConventionalMemory, it means this entry is free to use.
 | 
						|
// If the Entry.Type is other, it means this entry is occupied.
 | 
						|
//
 | 
						|
// Any non-SMM component may put communication data there, then use
 | 
						|
// UEFI defined SMM Communication ACPI Table, or PI defined EFI_SMM_COMMUNICATION_PROTOCOL
 | 
						|
// to communicate with SMI handler. The process is:
 | 
						|
// 1) Find an entry whose type is EfiConventional.
 | 
						|
// 2) Change type to be EfiReservedMemoryType before use.
 | 
						|
// 3) Use it.
 | 
						|
// 4) Restore type be EfiConventional.
 | 
						|
//    The step 2) must be performed as an atomic transaction, if there might be conflict during runtime.
 | 
						|
//    For example, on IA-32/x64 platforms, this can be done using the CMPXCHG CPU instruction.
 | 
						|
//    If there is guarantee on no conflict during boot time, these steps can be skipped.
 | 
						|
//    For example, DXE, UEFI driver and UEFI application runs in sequence.
 | 
						|
//
 | 
						|
// For example, FPDT driver can use this communication buffer to get SMM
 | 
						|
// performance data in SMM. Profile driver can use this communication buffer
 | 
						|
// to get SMM profile data in SMM.
 | 
						|
//
 | 
						|
typedef struct {
 | 
						|
  UINT32                Version;
 | 
						|
  UINT32                NumberOfEntries;
 | 
						|
  UINT32                DescriptorSize;
 | 
						|
  UINT32                Reserved;
 | 
						|
//EFI_MEMORY_DESCRIPTOR Entry[1];
 | 
						|
} EDKII_PI_SMM_COMMUNICATION_REGION_TABLE;
 | 
						|
 | 
						|
#define EDKII_PI_SMM_COMMUNICATION_REGION_TABLE_VERSION  0x00000001
 | 
						|
 | 
						|
extern EFI_GUID gEdkiiPiSmmCommunicationRegionTableGuid;
 | 
						|
 | 
						|
#endif
 |