/** @file | |
SMM Memory Attribute Protocol provides retrieval and update service | |
for memory attributes in EFI SMM environment. | |
Copyright (c) 2017 - 2018, Intel Corporation. All rights reserved.<BR> | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
**/ | |
#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 supported 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 clear for the memory | |
region. | |
@retval EFI_SUCCESS The attributes were cleared for the memory region. | |
@retval EFI_INVALID_PARAMETER Length is zero. | |
Attributes specified an illegal combination of | |
attributes that cannot be cleared 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 supported 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 retrieves 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. | |
**/ | |
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 |