Cc: Wu Hao <hao.a.wu@intel.com> Cc: Star Zeng <star.zeng@intel.com> Cc: Eric Dong <eric.dong@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Jian J Wang <jian.j.wang@intel.com> Reviewed-by: Hao Wu <hao.a.wu@intel.com>
		
			
				
	
	
		
			137 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			137 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   SMM Memory Attribute Protocol provides retrieval and update service
 | |
|   for memory attributes in EFI SMM environment.
 | |
| 
 | |
|   Copyright (c) 2017, 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
 | |
|   which 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 __SMM_MEMORYATTRIBUTE_H__
 | |
| #define __SMM_MEMORYATTRIBUTE_H__
 | |
| 
 | |
| //{69B792EA-39CE-402D-A2A6-F721DE351DFE}
 | |
| #define EDKII_SMM_MEMORY_ATTRIBUTE_PROTOCOL_GUID \
 | |
|   { \
 | |
|     0x69b792ea, 0x39ce, 0x402d, { 0xa2, 0xa6, 0xf7, 0x21, 0xde, 0x35, 0x1d, 0xfe } \
 | |
|   }
 | |
| 
 | |
| typedef struct _EDKII_SMM_MEMORY_ATTRIBUTE_PROTOCOL EDKII_SMM_MEMORY_ATTRIBUTE_PROTOCOL;
 | |
| 
 | |
| /**
 | |
|   This function set given attributes of the memory region specified by
 | |
|   BaseAddress and Length.
 | |
| 
 | |
|   @param  This              The EDKII_SMM_MEMORY_ATTRIBUTE_PROTOCOL instance.
 | |
|   @param  BaseAddress       The physical address that is the start address of
 | |
|                             a memory region.
 | |
|   @param  Length            The size in bytes of the memory region.
 | |
|   @param  Attributes        The bit mask of attributes to set for the memory
 | |
|                             region.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The attributes were set for the memory region.
 | |
|   @retval EFI_INVALID_PARAMETER Length is zero.
 | |
|                                 Attributes specified an illegal combination of
 | |
|                                 attributes that cannot be set together.
 | |
|   @retval EFI_UNSUPPORTED       The processor does not support one or more
 | |
|                                 bytes of the memory resource range specified
 | |
|                                 by BaseAddress and Length.
 | |
|                                 The bit mask of attributes is not support for
 | |
|                                 the memory resource range specified by
 | |
|                                 BaseAddress and Length.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EDKII_SMM_SET_MEMORY_ATTRIBUTES)(
 | |
|   IN  EDKII_SMM_MEMORY_ATTRIBUTE_PROTOCOL *This,
 | |
|   IN  EFI_PHYSICAL_ADDRESS                BaseAddress,
 | |
|   IN  UINT64                              Length,
 | |
|   IN  UINT64                              Attributes
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function clears given attributes of the memory region specified by
 | |
|   BaseAddress and Length.
 | |
| 
 | |
|   @param  This              The EDKII_SMM_MEMORY_ATTRIBUTE_PROTOCOL instance.
 | |
|   @param  BaseAddress       The physical address that is the start address of
 | |
|                             a memory region.
 | |
|   @param  Length            The size in bytes of the memory region.
 | |
|   @param  Attributes        The bit mask of attributes to set for the memory
 | |
|                             region.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The attributes were set for the memory region.
 | |
|   @retval EFI_INVALID_PARAMETER Length is zero.
 | |
|                                 Attributes specified an illegal combination of
 | |
|                                 attributes that cannot be set together.
 | |
|   @retval EFI_UNSUPPORTED       The processor does not support one or more
 | |
|                                 bytes of the memory resource range specified
 | |
|                                 by BaseAddress and Length.
 | |
|                                 The bit mask of attributes is not support for
 | |
|                                 the memory resource range specified by
 | |
|                                 BaseAddress and Length.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EDKII_SMM_CLEAR_MEMORY_ATTRIBUTES)(
 | |
|   IN  EDKII_SMM_MEMORY_ATTRIBUTE_PROTOCOL *This,
 | |
|   IN  EFI_PHYSICAL_ADDRESS                BaseAddress,
 | |
|   IN  UINT64                              Length,
 | |
|   IN  UINT64                              Attributes
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function retrieve the attributes of the memory region specified by
 | |
|   BaseAddress and Length. If different attributes are got from different part
 | |
|   of the memory region, EFI_NO_MAPPING will be returned.
 | |
| 
 | |
|   @param  This              The EDKII_SMM_MEMORY_ATTRIBUTE_PROTOCOL instance.
 | |
|   @param  BaseAddress       The physical address that is the start address of
 | |
|                             a memory region.
 | |
|   @param  Length            The size in bytes of the memory region.
 | |
|   @param  Attributes        Pointer to attributes returned.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The attributes got for the memory region.
 | |
|   @retval EFI_INVALID_PARAMETER Length is zero.
 | |
|                                 Attributes is NULL.
 | |
|   @retval EFI_NO_MAPPING        Attributes are not consistent cross the memory
 | |
|                                 region.
 | |
|   @retval EFI_UNSUPPORTED       The processor does not support one or more
 | |
|                                 bytes of the memory resource range specified
 | |
|                                 by BaseAddress and Length.
 | |
|                                 The bit mask of attributes is not support for
 | |
|                                 the memory resource range specified by
 | |
|                                 BaseAddress and Length.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EDKII_SMM_GET_MEMORY_ATTRIBUTES)(
 | |
|   IN  EDKII_SMM_MEMORY_ATTRIBUTE_PROTOCOL *This,
 | |
|   IN  EFI_PHYSICAL_ADDRESS                BaseAddress,
 | |
|   IN  UINT64                              Length,
 | |
|   OUT UINT64                              *Attributes
 | |
|   );
 | |
| 
 | |
| ///
 | |
| /// SMM Memory Attribute Protocol provides services to retrieve or update
 | |
| /// attribute of memory in the EFI SMM environment.
 | |
| ///
 | |
| struct _EDKII_SMM_MEMORY_ATTRIBUTE_PROTOCOL {
 | |
|   EDKII_SMM_GET_MEMORY_ATTRIBUTES       GetMemoryAttributes;
 | |
|   EDKII_SMM_SET_MEMORY_ATTRIBUTES       SetMemoryAttributes;
 | |
|   EDKII_SMM_CLEAR_MEMORY_ATTRIBUTES     ClearMemoryAttributes;
 | |
| };
 | |
| 
 | |
| extern EFI_GUID gEdkiiSmmMemoryAttributeProtocolGuid;
 | |
| 
 | |
| #endif
 |