Ard: I check this protocol definition in UEFI2.10 spec. GetMemoryAttributes and SetMemoryAttributes API return status include EFI_OUT_OF_RESOURCES and EFI_ACCESS_DENIED. But, they are missing in this patch. Can you help confirm?
Thanks Liming > -----邮件原件----- > 发件人: Ard Biesheuvel <a...@kernel.org> > 发送时间: 2023年2月1日 6:36 > 收件人: devel@edk2.groups.io > 抄送: Ard Biesheuvel <a...@kernel.org>; Michael Kinney > <michael.d.kin...@intel.com>; Liming Gao <gaolim...@byosoft.com.cn>; > Jiewen Yao <jiewen....@intel.com>; Michael Kubacki > <michael.kuba...@microsoft.com>; Sean Brogan > <sean.bro...@microsoft.com>; Rebecca Cran <quic_rc...@quicinc.com>; > Leif Lindholm <quic_llind...@quicinc.com>; Sami Mujawar > <sami.muja...@arm.com> > 主题: [PATCH 1/4] MdePkg: Add Memory Attribute Protocol definition > > From: Sean Brogan <sean.bro...@microsoft.com> > > Add the Memory Attribute Protocol definition, which was adopted and > included in version 2.10 of the UEFI specification. > > Taken from Project Mu's mu_basecore repository. > > Link: https://bugzilla.tianocore.org/show_bug.cgi?id=3519 > Signed-off-by: Ard Biesheuvel <a...@kernel.org> > --- > MdePkg/Include/Protocol/MemoryAttribute.h | 131 > ++++++++++++++++++++ > MdePkg/MdePkg.dec | 3 + > 2 files changed, 134 insertions(+) > > diff --git a/MdePkg/Include/Protocol/MemoryAttribute.h > b/MdePkg/Include/Protocol/MemoryAttribute.h > new file mode 100644 > index 000000000000..b33138732ad1 > --- /dev/null > +++ b/MdePkg/Include/Protocol/MemoryAttribute.h > @@ -0,0 +1,131 @@ > +/** @file > > + > > + EFI Memory Attribute Protocol provides retrieval and update service > > + for memory attributes in EFI environment. > > + > > + Copyright (c) 2021, Intel Corporation. All rights reserved.<BR> > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#ifndef __EFI_MEMORY_ATTRIBUTE_H__ > > +#define __EFI_MEMORY_ATTRIBUTE_H__ > > + > > +#define EFI_MEMORY_ATTRIBUTE_PROTOCOL_GUID \ > > + { \ > > + 0xf4560cf6, 0x40ec, 0x4b4a, { 0xa1, 0x92, 0xbf, 0x1d, 0x57, 0xd0, 0xb1, > 0x89 } \ > > + } > > + > > +typedef struct _EFI_MEMORY_ATTRIBUTE_PROTOCOL > EFI_MEMORY_ATTRIBUTE_PROTOCOL; > > + > > +/** > > + This function set given attributes of the memory region specified by > > + BaseAddress and Length. > > + > > + The valid Attributes is EFI_MEMORY_RP, EFI_MEMORY_XP, and > EFI_MEMORY_RO. > > + > > + @param This The > EFI_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 *EFI_SET_MEMORY_ATTRIBUTES)( > > + IN EFI_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. > > + > > + The valid Attributes is EFI_MEMORY_RP, EFI_MEMORY_XP, and > EFI_MEMORY_RO. > > + > > + @param This The > EFI_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 *EFI_CLEAR_MEMORY_ATTRIBUTES)( > > + IN EFI_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 > EFI_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 *EFI_GET_MEMORY_ATTRIBUTES)( > > + IN EFI_MEMORY_ATTRIBUTE_PROTOCOL *This, > > + IN EFI_PHYSICAL_ADDRESS BaseAddress, > > + IN UINT64 Length, > > + OUT UINT64 *Attributes > > + ); > > + > > +/// > > +/// EFI Memory Attribute Protocol provides services to retrieve or update > > +/// attribute of memory in the EFI environment. > > +/// > > +struct _EFI_MEMORY_ATTRIBUTE_PROTOCOL { > > + EFI_GET_MEMORY_ATTRIBUTES GetMemoryAttributes; > > + EFI_SET_MEMORY_ATTRIBUTES SetMemoryAttributes; > > + EFI_CLEAR_MEMORY_ATTRIBUTES ClearMemoryAttributes; > > +}; > > + > > +extern EFI_GUID gEfiMemoryAttributeProtocolGuid; > > + > > +#endif > > diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec > index 3d08f20d15b0..a8658403c8fd 100644 > --- a/MdePkg/MdePkg.dec > +++ b/MdePkg/MdePkg.dec > @@ -1915,6 +1915,9 @@ [Protocols] > ## Include/Protocol/RedfishDiscover.h > > gEfiRedfishDiscoverProtocolGuid = { 0x5db12509, 0x4550, 0x4347, > { 0x96, 0xb3, 0x73, 0xc0, 0xff, 0x6e, 0x86, 0x9f }} > > > > + ## Include/Protocol/MemoryAttribute.h > > + gEfiMemoryAttributeProtocolGuid = { 0xf4560cf6, 0x40ec, 0x4b4a, { 0xa1, > 0x92, 0xbf, 0x1d, 0x57, 0xd0, 0xb1, 0x89 }} > > + > > # > > # Protocols defined in Shell2.0 > > # > > -- > 2.39.0 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#99430): https://edk2.groups.io/g/devel/message/99430 Mute This Topic: https://groups.io/mt/96693492/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-