mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-12-27 16:58:09 +01:00
128 lines
5.3 KiB
C
128 lines
5.3 KiB
C
|
/** @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
|