/** @file Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.
Copyright (c) 2011 - 2021, ARM Limited. All rights reserved. SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include #include #include #include STATIC VOID CacheRangeOperation ( IN VOID *Start, IN UINTN Length, IN LINE_OPERATION LineOperation, IN UINTN LineLength ) { UINTN ArmCacheLineAlignmentMask; // Align address (rounding down) UINTN AlignedAddress; UINTN EndAddress; ArmCacheLineAlignmentMask = LineLength - 1; AlignedAddress = (UINTN)Start - ((UINTN)Start & ArmCacheLineAlignmentMask); EndAddress = (UINTN)Start + Length; // Perform the line operation on an address in each cache line while (AlignedAddress < EndAddress) { LineOperation (AlignedAddress); AlignedAddress += LineLength; } ArmDataSynchronizationBarrier (); } VOID EFIAPI InvalidateInstructionCache ( VOID ) { ASSERT (FALSE); } VOID EFIAPI InvalidateDataCache ( VOID ) { ASSERT (FALSE); } VOID * EFIAPI InvalidateInstructionCacheRange ( IN VOID *Address, IN UINTN Length ) { CacheRangeOperation ( Address, Length, ArmCleanDataCacheEntryToPoUByMVA, ArmDataCacheLineLength () ); CacheRangeOperation ( Address, Length, ArmInvalidateInstructionCacheEntryToPoUByMVA, ArmInstructionCacheLineLength () ); ArmInstructionSynchronizationBarrier (); return Address; } VOID EFIAPI WriteBackInvalidateDataCache ( VOID ) { ASSERT (FALSE); } VOID * EFIAPI WriteBackInvalidateDataCacheRange ( IN VOID *Address, IN UINTN Length ) { CacheRangeOperation ( Address, Length, ArmCleanInvalidateDataCacheEntryByMVA, ArmDataCacheLineLength () ); return Address; } VOID EFIAPI WriteBackDataCache ( VOID ) { ASSERT (FALSE); } VOID * EFIAPI WriteBackDataCacheRange ( IN VOID *Address, IN UINTN Length ) { CacheRangeOperation ( Address, Length, ArmCleanDataCacheEntryByMVA, ArmDataCacheLineLength () ); return Address; } VOID * EFIAPI InvalidateDataCacheRange ( IN VOID *Address, IN UINTN Length ) { CacheRangeOperation ( Address, Length, ArmInvalidateDataCacheEntryByMVA, ArmDataCacheLineLength () ); return Address; }