/** @file | |
Copyright (c) 2023, Google LLC. All rights reserved.<BR> | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
**/ | |
#ifndef EDKII_MEMORY_ATTRIBUTE_PPI_H_ | |
#define EDKII_MEMORY_ATTRIBUTE_PPI_H_ | |
#include <Uefi/UefiSpec.h> | |
/// | |
/// Global ID for the EDKII_MEMORY_ATTRIBUTE_PPI. | |
/// | |
#define EDKII_MEMORY_ATTRIBUTE_PPI_GUID \ | |
{ \ | |
0x1be840de, 0x2d92, 0x41ec, { 0xb6, 0xd3, 0x19, 0x64, 0x13, 0x50, 0x51, 0xfb } \ | |
} | |
/// | |
/// Forward declaration for the EDKII_MEMORY_ATTRIBUTE_PPI. | |
/// | |
typedef struct _EDKII_MEMORY_ATTRIBUTE_PPI EDKII_MEMORY_ATTRIBUTE_PPI; | |
/** | |
Set the requested memory permission attributes on a region of memory. | |
BaseAddress and Length must be aligned to EFI_PAGE_SIZE. | |
Attributes must contain a combination of EFI_MEMORY_RP, EFI_MEMORY_RO and | |
EFI_MEMORY_XP, and specifies the attributes that must be set for the | |
region in question. Attributes that are omitted will be cleared from the | |
region only if they are set in AttributeMask. | |
AttributeMask must contain a combination of EFI_MEMORY_RP, EFI_MEMORY_RO and | |
EFI_MEMORY_XP, and specifies the attributes that the call will operate on. | |
AttributeMask must not be 0x0, and must contain at least the bits set in | |
Attributes. | |
@param[in] This The protocol instance pointer. | |
@param[in] BaseAddress The physical address that is the start address | |
of a memory region. | |
@param[in] Length The size in bytes of the memory region. | |
@param[in] Attributes Memory attributes to set or clear. | |
@param[in] AttributeMask Mask of memory attributes to operate on. | |
@retval EFI_SUCCESS The attributes were set for the memory region. | |
@retval EFI_INVALID_PARAMETER Length is zero. | |
AttributeMask is zero. | |
AttributeMask lacks bits set in Attributes. | |
BaseAddress or Length is not suitably aligned. | |
@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. | |
@retval EFI_OUT_OF_RESOURCES Requested attributes cannot be applied due to | |
lack of system resources. | |
**/ | |
typedef | |
EFI_STATUS | |
(EFIAPI *EDKII_MEMORY_ATTRIBUTE_SET_PERMISSIONS)( | |
IN EDKII_MEMORY_ATTRIBUTE_PPI *This, | |
IN EFI_PHYSICAL_ADDRESS BaseAddress, | |
IN UINT64 Length, | |
IN UINT64 Attributes, | |
IN UINT64 AttributeMask | |
); | |
/// | |
/// This PPI contains a set of services to manage memory permission attributes. | |
/// | |
struct _EDKII_MEMORY_ATTRIBUTE_PPI { | |
EDKII_MEMORY_ATTRIBUTE_SET_PERMISSIONS SetPermissions; | |
}; | |
extern EFI_GUID gEdkiiMemoryAttributePpiGuid; | |
#endif |