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