]> git.proxmox.com Git - mirror_edk2.git/blob - MdePkg/Library/BaseLib/AArch64/GetInterruptsState.asm
d64b0d513ce31819cbde82623778f53acb1c71f2
[mirror_edk2.git] / MdePkg / Library / BaseLib / AArch64 / GetInterruptsState.asm
1 ;------------------------------------------------------------------------------
2 ;
3 ; GetInterruptState() function for AArch64
4 ;
5 ; Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
6 ; Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
7 ; Portions copyright (c) 2011 - 2013, ARM Ltd. All rights reserved.<BR>
8 ; This program and the accompanying materials
9 ; are licensed and made available under the terms and conditions of the BSD License
10 ; which accompanies this distribution. The full text of the license may be found at
11 ; http://opensource.org/licenses/bsd-license.php.
12 ;
13 ; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
14 ; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
15 ;
16 ;------------------------------------------------------------------------------
17
18 EXPORT GetInterruptState
19 AREA BaseLib_LowLevel, CODE, READONLY
20
21 DAIF_RD_IRQ_BIT EQU (1 << 7)
22
23 ;/**
24 ; Retrieves the current CPU interrupt state.
25 ;
26 ; Returns TRUE is interrupts are currently enabled. Otherwise
27 ; returns FALSE.
28 ;
29 ; @retval TRUE CPU interrupts are enabled.
30 ; @retval FALSE CPU interrupts are disabled.
31 ;
32 ;**/
33 ;
34 ;BOOLEAN
35 ;EFIAPI
36 ;GetInterruptState (
37 ; VOID
38 ; );
39 ;
40 GetInterruptState
41 mrs x0, daif
42 mov w0, wzr
43 tst x0, #DAIF_RD_IRQ_BIT // Check IRQ mask; set Z=1 if clear/unmasked
44 bne exit // if Z=1 (eq) return 1, else 0
45 mov w0, #1
46 exit
47 ret
48
49 END