diff --git a/EdkModulePkg/EdkModulePkg.fpd b/EdkModulePkg/EdkModulePkg.fpd
index d171610da4..4ccad88df2 100644
--- a/EdkModulePkg/EdkModulePkg.fpd
+++ b/EdkModulePkg/EdkModulePkg.fpd
@@ -1038,6 +1038,7 @@
+
@@ -6201,6 +6202,7 @@
+
@@ -10223,6 +10225,7 @@
+
diff --git a/EdkModulePkg/Include/Library/EdkDxeSalLib.h b/EdkModulePkg/Include/Library/EdkDxeSalLib.h
index d5fe5ed141..1a37e97cda 100644
--- a/EdkModulePkg/Include/Library/EdkDxeSalLib.h
+++ b/EdkModulePkg/Include/Library/EdkDxeSalLib.h
@@ -137,12 +137,5 @@ GetEsalEntryPoint (
)
;
-VOID
-EFIAPI
-SalFlushCache (
- IN EFI_PHYSICAL_ADDRESS Start,
- IN UINT64 Length
- )
-;
#endif
diff --git a/EdkModulePkg/Library/EdkDxeSalLib/EdkDxeSalLib.msa b/EdkModulePkg/Library/EdkDxeSalLib/EdkDxeSalLib.msa
index dcb07b578b..a2e51f0961 100644
--- a/EdkModulePkg/Library/EdkDxeSalLib/EdkDxeSalLib.msa
+++ b/EdkModulePkg/Library/EdkDxeSalLib/EdkDxeSalLib.msa
@@ -35,7 +35,6 @@
Ipf/EsalServiceLib.c
Ipf/AsmEsalServiceLib.s
- Ipf/AsmIpfCpuCache.s
diff --git a/EdkModulePkg/Universal/Runtime/RuntimeDxe/Runtime.c b/EdkModulePkg/Universal/Runtime/RuntimeDxe/Runtime.c
index f3899bc8e1..61dbd9c1fc 100644
--- a/EdkModulePkg/Universal/Runtime/RuntimeDxe/Runtime.c
+++ b/EdkModulePkg/Universal/Runtime/RuntimeDxe/Runtime.c
@@ -468,7 +468,7 @@ RuntimeDriverSetVirtualAddressMap (
RuntimeImage->RelocationData
);
- FlushCpuCache (RuntimeImage->ImageBase, (UINT64)RuntimeImage->ImageSize);
+ InvalidateInstructionCacheRange ((VOID *)(UINTN)RuntimeImage->ImageBase, (UINTN)RuntimeImage->ImageSize);
}
}
//
diff --git a/EdkModulePkg/Universal/Runtime/RuntimeDxe/Runtime.h b/EdkModulePkg/Universal/Runtime/RuntimeDxe/Runtime.h
index 5b582c76ba..1aa0af5767 100644
--- a/EdkModulePkg/Universal/Runtime/RuntimeDxe/Runtime.h
+++ b/EdkModulePkg/Universal/Runtime/RuntimeDxe/Runtime.h
@@ -50,8 +50,7 @@ typedef struct {
VOID
RelocatePeImageForRuntime (
RUNTIME_IMAGE_RELOCATION_DATA *Image
- )
-;
+ );
EFI_STATUS
EFIAPI
@@ -59,8 +58,7 @@ RuntimeDriverCalculateCrc32 (
IN VOID *Data,
IN UINTN DataSize,
OUT UINT32 *CrcOut
- )
-;
+ );
EFI_STATUS
EFIAPI
@@ -69,8 +67,7 @@ RuntimeDriverRegisterImage (
IN EFI_PHYSICAL_ADDRESS ImageBase,
IN UINTN ImageSize,
IN VOID *RelocationData
- )
-;
+ );
EFI_STATUS
EFIAPI
@@ -81,40 +78,27 @@ RuntimeDriverRegisterEvent (
IN EFI_EVENT_NOTIFY NotifyFunction,
IN VOID *NotifyContext,
IN EFI_EVENT *Event
- )
-;
+ );
EFI_STATUS
EFIAPI
RuntimeDriverConvertPointer (
IN UINTN DebugDisposition,
IN OUT VOID **ConvertAddress
- )
-;
+ );
VOID
RuntimeDriverInitializeCrc32Table (
VOID
- )
-;
+ );
EFI_STATUS
EFIAPI
RuntimeDriverInitialize (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
- )
-;
+ );
-//
-// Cache Flush Routine.
-//
-EFI_STATUS
-FlushCpuCache (
- IN EFI_PHYSICAL_ADDRESS Start,
- IN UINT64 Length
- )
-;
#endif
diff --git a/EdkModulePkg/Universal/Runtime/RuntimeDxe/Runtime.msa b/EdkModulePkg/Universal/Runtime/RuntimeDxe/Runtime.msa
index b72531eafb..516dfa4855 100644
--- a/EdkModulePkg/Universal/Runtime/RuntimeDxe/Runtime.msa
+++ b/EdkModulePkg/Universal/Runtime/RuntimeDxe/Runtime.msa
@@ -49,17 +49,15 @@
UefiBootServicesTableLib
+
+ CacheMaintenanceLib
+
Runtime.dxs
Runtime.c
Runtime.h
Crc32.c
- Ia32/PeHotRelocateEx.c
- x64/PeHotRelocateEx.c
- x64/PeHotRelocateEx.h
- Ipf/PeHotRelocateEx.c
- Ipf/PeHotRelocateEx.h
diff --git a/EdkNt32Pkg/Nt32.fpd b/EdkNt32Pkg/Nt32.fpd
index 6347998e49..cb0e2fbac1 100644
--- a/EdkNt32Pkg/Nt32.fpd
+++ b/EdkNt32Pkg/Nt32.fpd
@@ -2199,6 +2199,7 @@
+
diff --git a/MdePkg/Include/Library/BaseLib.h b/MdePkg/Include/Library/BaseLib.h
index e414e27399..329385d9c1 100644
--- a/MdePkg/Include/Library/BaseLib.h
+++ b/MdePkg/Include/Library/BaseLib.h
@@ -5072,24 +5072,24 @@ IpfReadItc (
/**
- Invalidates a range of instruction cache lines in the cache coherency domain
- of the calling CPU.
+ Flush a range of cache lines in the cache coherency domain of the calling
+ CPU.
- Invalidates the instruction cache lines specified by Address and Length. If
- Address is not aligned on a cache line boundary, then entire instruction
- cache line containing Address is invalidated. If Address + Length is not
- aligned on a cache line boundary, then the entire instruction cache line
- containing Address + Length -1 is invalidated. This function may choose to
- invalidate the entire instruction cache if that is more efficient than
- invalidating the specified range. If Length is 0, the no instruction cache
- lines are invalidated. Address is returned.
+ Invalidates the cache lines specified by Address and Length. If Address is
+ not aligned on a cache line boundary, then entire cache line containing
+ Address is invalidated. If Address + Length is not aligned on a cache line
+ boundary, then the entire instruction cache line containing Address + Length
+ -1 is invalidated. This function may choose to invalidate the entire
+ instruction cache if that is more efficient than invalidating the specified
+ range. If Length is 0, the no instruction cache lines are invalidated.
+ Address is returned.
If Length is greater than (MAX_ADDRESS - Address + 1), then ASSERT().
- @param Address The base address of the instruction cache lines to
- invalidate. If the CPU is in a physical addressing mode, then
- Address is a physical address. If the CPU is in a virtual
- addressing mode, then Address is a virtual address.
+ @param Address The base address of the instruction lines to invalidate. If
+ the CPU is in a physical addressing mode, then Address is a
+ physical address. If the CPU is in a virtual addressing mode,
+ then Address is a virtual address.
@param Length The number of bytes to invalidate from the instruction cache.
@@ -5098,7 +5098,7 @@ IpfReadItc (
**/
VOID *
EFIAPI
-IpfInvalidateInstructionCacheRange (
+IpfFlushCacheRange (
IN VOID *Address,
IN UINTN Length
);
diff --git a/MdePkg/Library/BaseCacheMaintenanceLib/IpfCache.c b/MdePkg/Library/BaseCacheMaintenanceLib/IpfCache.c
index 0c6f0e4dc8..17060eb70f 100644
--- a/MdePkg/Library/BaseCacheMaintenanceLib/IpfCache.c
+++ b/MdePkg/Library/BaseCacheMaintenanceLib/IpfCache.c
@@ -62,7 +62,7 @@ InvalidateInstructionCacheRange (
IN UINTN Length
)
{
- return IpfInvalidateInstructionCacheRange (Address, Length);
+ return IpfFlushCacheRange (Address, Length);
}
/**
@@ -119,10 +119,7 @@ WriteBackInvalidateDataCacheRange (
{
ASSERT (Length <= MAX_ADDRESS - (UINTN)Address + 1);
- if (Length > 0) {
- WriteBackInvalidateDataCache ();
- }
- return Address;
+ return IpfFlushCacheRange (Address, Length);
}
/**
@@ -178,10 +175,7 @@ WriteBackDataCacheRange (
{
ASSERT (Length <= MAX_ADDRESS - (UINTN)Address + 1);
- if (Length > 0) {
- WriteBackDataCache ();
- }
- return Address;
+ return IpfFlushCacheRange (Address, Length);
}
/**
@@ -238,5 +232,5 @@ InvalidateDataCacheRange (
IN UINTN Length
)
{
- return WriteBackInvalidateDataCacheRange (Address, Length);
+ return IpfFlushCacheRange (Address, Length);
}
diff --git a/MdePkg/Library/BaseLib/BaseLib.msa b/MdePkg/Library/BaseLib/BaseLib.msa
index 52dbf7304a..08f21eb7b2 100644
--- a/MdePkg/Library/BaseLib/BaseLib.msa
+++ b/MdePkg/Library/BaseLib/BaseLib.msa
@@ -425,7 +425,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Ipf/CpuFlushTlb.s
Ipf/GetInterruptState.s
Ipf/Non-existing.c
- Ipf/InvalidateInstructionCacheRange.s
+ Ipf/FlushCacheRange.s
Ipf/ReadItc.s
Math64.c