]> git.proxmox.com Git - mirror_edk2.git/blob - ArmPkg/Library/ArmLib/AArch64/AArch64Lib.c
3fbd591192e270131af594cca53f1babd7cb0489
[mirror_edk2.git] / ArmPkg / Library / ArmLib / AArch64 / AArch64Lib.c
1 /** @file
2
3 Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
4 Portions copyright (c) 2011 - 2014, ARM Ltd. All rights reserved.<BR>
5
6 SPDX-License-Identifier: BSD-2-Clause-Patent
7
8 **/
9
10 #include <Base.h>
11
12 #include <Library/ArmLib.h>
13 #include <Library/DebugLib.h>
14
15 #include <Chipset/AArch64.h>
16
17 #include "AArch64Lib.h"
18 #include "ArmLibPrivate.h"
19
20 VOID
21 AArch64DataCacheOperation (
22 IN AARCH64_CACHE_OPERATION DataCacheOperation
23 )
24 {
25 UINTN SavedInterruptState;
26
27 SavedInterruptState = ArmGetInterruptState ();
28 ArmDisableInterrupts();
29
30 AArch64AllDataCachesOperation (DataCacheOperation);
31
32 ArmDataSynchronizationBarrier ();
33
34 if (SavedInterruptState) {
35 ArmEnableInterrupts ();
36 }
37 }
38
39 VOID
40 EFIAPI
41 ArmInvalidateDataCache (
42 VOID
43 )
44 {
45 ASSERT (!ArmMmuEnabled ());
46
47 ArmDataSynchronizationBarrier ();
48 AArch64DataCacheOperation (ArmInvalidateDataCacheEntryBySetWay);
49 }
50
51 VOID
52 EFIAPI
53 ArmCleanInvalidateDataCache (
54 VOID
55 )
56 {
57 ASSERT (!ArmMmuEnabled ());
58
59 ArmDataSynchronizationBarrier ();
60 AArch64DataCacheOperation (ArmCleanInvalidateDataCacheEntryBySetWay);
61 }
62
63 VOID
64 EFIAPI
65 ArmCleanDataCache (
66 VOID
67 )
68 {
69 ASSERT (!ArmMmuEnabled ());
70
71 ArmDataSynchronizationBarrier ();
72 AArch64DataCacheOperation (ArmCleanDataCacheEntryBySetWay);
73 }