mirror of https://github.com/acidanthera/audk.git
UefiCpuPkg: Add New Memory Attributes
Add usage of EFI_MEMORY_SP and EFI_MEMORY_CPU_CRYPTO attributes introduced in UEFI 2.8. (UEFI 2.8, mantis 1919 and 1872). Use attributes bitmasks, defined in MdePkg. Signed-off-by: Oleksiy Yakovlev <oleksiyy@ami.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com> Message-Id: <20200702205039.52400-5-oleksiyy@ami.com> Reviewed-by: Eric Dong <eric.dong@intel.com> Tested-by: Laszlo Ersek <lersek@redhat.com>
This commit is contained in:
parent
c2e38a520e
commit
e77966b341
|
@ -10,9 +10,6 @@
|
||||||
#include "CpuMp.h"
|
#include "CpuMp.h"
|
||||||
#include "CpuPageTable.h"
|
#include "CpuPageTable.h"
|
||||||
|
|
||||||
#define CACHE_ATTRIBUTE_MASK (EFI_MEMORY_UC | EFI_MEMORY_WC | EFI_MEMORY_WT | EFI_MEMORY_WB | EFI_MEMORY_UCE | EFI_MEMORY_WP)
|
|
||||||
#define MEMORY_ATTRIBUTE_MASK (EFI_MEMORY_RP | EFI_MEMORY_XP | EFI_MEMORY_RO)
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Global Variables
|
// Global Variables
|
||||||
//
|
//
|
||||||
|
@ -417,8 +414,8 @@ CpuSetMemoryAttributes (
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
CacheAttributes = Attributes & CACHE_ATTRIBUTE_MASK;
|
CacheAttributes = Attributes & EFI_CACHE_ATTRIBUTE_MASK;
|
||||||
MemoryAttributes = Attributes & MEMORY_ATTRIBUTE_MASK;
|
MemoryAttributes = Attributes & EFI_MEMORY_ATTRIBUTE_MASK;
|
||||||
|
|
||||||
if (Attributes != (CacheAttributes | MemoryAttributes)) {
|
if (Attributes != (CacheAttributes | MemoryAttributes)) {
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
|
@ -677,7 +674,7 @@ SetGcdMemorySpaceAttributes (
|
||||||
gDS->SetMemorySpaceAttributes (
|
gDS->SetMemorySpaceAttributes (
|
||||||
RegionStart,
|
RegionStart,
|
||||||
RegionLength,
|
RegionLength,
|
||||||
(MemorySpaceMap[Index].Attributes & ~EFI_MEMORY_CACHETYPE_MASK) | (MemorySpaceMap[Index].Capabilities & Attributes)
|
(MemorySpaceMap[Index].Attributes & ~EFI_CACHE_ATTRIBUTE_MASK) | (MemorySpaceMap[Index].Capabilities & Attributes)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -754,7 +751,7 @@ RefreshMemoryAttributesFromMtrr (
|
||||||
gDS->SetMemorySpaceAttributes (
|
gDS->SetMemorySpaceAttributes (
|
||||||
MemorySpaceMap[Index].BaseAddress,
|
MemorySpaceMap[Index].BaseAddress,
|
||||||
MemorySpaceMap[Index].Length,
|
MemorySpaceMap[Index].Length,
|
||||||
(MemorySpaceMap[Index].Attributes & ~EFI_MEMORY_CACHETYPE_MASK) |
|
(MemorySpaceMap[Index].Attributes & ~EFI_CACHE_ATTRIBUTE_MASK) |
|
||||||
(MemorySpaceMap[Index].Capabilities & DefaultAttributes)
|
(MemorySpaceMap[Index].Capabilities & DefaultAttributes)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,19 +39,6 @@
|
||||||
#include <Guid/IdleLoopEvent.h>
|
#include <Guid/IdleLoopEvent.h>
|
||||||
#include <Guid/VectorHandoffTable.h>
|
#include <Guid/VectorHandoffTable.h>
|
||||||
|
|
||||||
#define EFI_MEMORY_CACHETYPE_MASK (EFI_MEMORY_UC | \
|
|
||||||
EFI_MEMORY_WC | \
|
|
||||||
EFI_MEMORY_WT | \
|
|
||||||
EFI_MEMORY_WB | \
|
|
||||||
EFI_MEMORY_UCE | \
|
|
||||||
EFI_MEMORY_WP \
|
|
||||||
)
|
|
||||||
|
|
||||||
#define EFI_MEMORY_PAGETYPE_MASK (EFI_MEMORY_RP | \
|
|
||||||
EFI_MEMORY_XP | \
|
|
||||||
EFI_MEMORY_RO \
|
|
||||||
)
|
|
||||||
|
|
||||||
#define HEAP_GUARD_NONSTOP_MODE \
|
#define HEAP_GUARD_NONSTOP_MODE \
|
||||||
((PcdGet8 (PcdHeapGuardPropertyMask) & (BIT6|BIT4|BIT1|BIT0)) > BIT6)
|
((PcdGet8 (PcdHeapGuardPropertyMask) & (BIT6|BIT4|BIT1|BIT0)) > BIT6)
|
||||||
|
|
||||||
|
|
|
@ -717,7 +717,7 @@ ConvertMemoryPageAttributes (
|
||||||
return RETURN_INVALID_PARAMETER;
|
return RETURN_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((Attributes & ~(EFI_MEMORY_RP | EFI_MEMORY_RO | EFI_MEMORY_XP)) != 0) {
|
if ((Attributes & ~EFI_MEMORY_ATTRIBUTE_MASK) != 0) {
|
||||||
DEBUG ((DEBUG_ERROR, "Attributes(0x%lx) has unsupported bit\n", Attributes));
|
DEBUG ((DEBUG_ERROR, "Attributes(0x%lx) has unsupported bit\n", Attributes));
|
||||||
return EFI_UNSUPPORTED;
|
return EFI_UNSUPPORTED;
|
||||||
}
|
}
|
||||||
|
@ -1018,9 +1018,9 @@ RefreshGcdMemoryAttributesFromPaging (
|
||||||
|
|
||||||
Length = MIN (PageLength, MemorySpaceLength);
|
Length = MIN (PageLength, MemorySpaceLength);
|
||||||
if (Attributes != (MemorySpaceMap[Index].Attributes &
|
if (Attributes != (MemorySpaceMap[Index].Attributes &
|
||||||
EFI_MEMORY_PAGETYPE_MASK)) {
|
EFI_MEMORY_ATTRIBUTE_MASK)) {
|
||||||
NewAttributes = (MemorySpaceMap[Index].Attributes &
|
NewAttributes = (MemorySpaceMap[Index].Attributes &
|
||||||
~EFI_MEMORY_PAGETYPE_MASK) | Attributes;
|
~EFI_MEMORY_ATTRIBUTE_MASK) | Attributes;
|
||||||
Status = gDS->SetMemorySpaceAttributes (
|
Status = gDS->SetMemorySpaceAttributes (
|
||||||
BaseAddress,
|
BaseAddress,
|
||||||
Length,
|
Length,
|
||||||
|
|
|
@ -435,7 +435,7 @@ ConvertMemoryPageAttributes (
|
||||||
EFI_PHYSICAL_ADDRESS MaximumSupportMemAddress;
|
EFI_PHYSICAL_ADDRESS MaximumSupportMemAddress;
|
||||||
|
|
||||||
ASSERT (Attributes != 0);
|
ASSERT (Attributes != 0);
|
||||||
ASSERT ((Attributes & ~(EFI_MEMORY_RP | EFI_MEMORY_RO | EFI_MEMORY_XP)) == 0);
|
ASSERT ((Attributes & ~EFI_MEMORY_ATTRIBUTE_MASK) == 0);
|
||||||
|
|
||||||
ASSERT ((BaseAddress & (SIZE_4KB - 1)) == 0);
|
ASSERT ((BaseAddress & (SIZE_4KB - 1)) == 0);
|
||||||
ASSERT ((Length & (SIZE_4KB - 1)) == 0);
|
ASSERT ((Length & (SIZE_4KB - 1)) == 0);
|
||||||
|
|
Loading…
Reference in New Issue