From 2ff435b26459fb2f904773764369294451c587e8 Mon Sep 17 00:00:00 2001 From: Chao Li Date: Thu, 12 Oct 2023 11:08:16 +0800 Subject: MdePkg: Add LoongArch64 local interrupt function set into BaseLib Adding LoongArch local interrupt function set, which is used to control the opening or closing of the local interrupt when the global interrupt is enabled. BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=4584 Cc: Michael D Kinney Cc: Liming Gao Cc: Zhiguang Liu Signed-off-by: Chao Li Acked-by: Michael D Kinney Reviewed-by: Liming Gao --- MdePkg/Include/Library/BaseLib.h | 20 ++++++++++++++++++++ .../BaseLib/LoongArch64/DisableInterrupts.S | 22 +++++++++++++++++----- .../Library/BaseLib/LoongArch64/EnableInterrupts.S | 22 +++++++++++++++++----- 3 files changed, 54 insertions(+), 10 deletions(-) (limited to 'MdePkg') diff --git a/MdePkg/Include/Library/BaseLib.h b/MdePkg/Include/Library/BaseLib.h index 7117c4288f..91322d2dfa 100644 --- a/MdePkg/Include/Library/BaseLib.h +++ b/MdePkg/Include/Library/BaseLib.h @@ -307,6 +307,26 @@ SetTlbRebaseAddress ( IN UINT64 ); +/** + Enables local CPU interrupts. + + @param Needs to enable local interrupt bit. +**/ +VOID +EnableLocalInterrupts ( + IN UINT16 + ); + +/** + Disables local CPU interrupts. + + @param Needs to disable local interrupt bit. +**/ +VOID +DisableLocalInterrupts ( + IN UINT16 + ); + #endif // defined (MDE_CPU_LOONGARCH64) // diff --git a/MdePkg/Library/BaseLib/LoongArch64/DisableInterrupts.S b/MdePkg/Library/BaseLib/LoongArch64/DisableInterrupts.S index 0f228339af..8f9ee888b1 100644 --- a/MdePkg/Library/BaseLib/LoongArch64/DisableInterrupts.S +++ b/MdePkg/Library/BaseLib/LoongArch64/DisableInterrupts.S @@ -1,21 +1,33 @@ #------------------------------------------------------------------------------ # -# LoongArch interrupt disable +# LoongArch interrupt disable operations # -# Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.
+# Copyright (c) 2024, Loongson Technology Corporation Limited. All rights reserved.
# # SPDX-License-Identifier: BSD-2-Clause-Patent # #------------------------------------------------------------------------------ +#include +#include + +ASM_GLOBAL ASM_PFX(DisableLocalInterrupts) ASM_GLOBAL ASM_PFX(DisableInterrupts) #/** -# Disables CPU interrupts. +# Disables local CPU interrupts. +# +# @param Needs to disable local interrupt bit. #**/ +ASM_PFX(DisableLocalInterrupts): + csrxchg $zero, $a0, LOONGARCH_CSR_ECFG + jirl $zero, $ra, 0 +#/** +# Disables global CPU interrupts. +#**/ ASM_PFX(DisableInterrupts): - li.w $t0, 0x4 - csrxchg $zero, $t0, 0x0 + li.w $t0, BIT2 + csrxchg $zero, $t0, LOONGARCH_CSR_CRMD jirl $zero, $ra, 0 .end diff --git a/MdePkg/Library/BaseLib/LoongArch64/EnableInterrupts.S b/MdePkg/Library/BaseLib/LoongArch64/EnableInterrupts.S index 3c34fb2cdd..126c7b49b3 100644 --- a/MdePkg/Library/BaseLib/LoongArch64/EnableInterrupts.S +++ b/MdePkg/Library/BaseLib/LoongArch64/EnableInterrupts.S @@ -1,21 +1,33 @@ #------------------------------------------------------------------------------ # -# LoongArch interrupt enable +# LoongArch interrupt enable operations # -# Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.
+# Copyright (c) 2024, Loongson Technology Corporation Limited. All rights reserved.
# # SPDX-License-Identifier: BSD-2-Clause-Patent # #------------------------------------------------------------------------------ +#include +#include + +ASM_GLOBAL ASM_PFX(EnableLocalInterrupts) ASM_GLOBAL ASM_PFX(EnableInterrupts) #/** -# Enables CPU interrupts. +# Enables local CPU interrupts. +# +# @param Needs to enable local interrupt bit. #**/ +ASM_PFX(EnableLocalInterrupts): + csrxchg $a0, $a0, LOONGARCH_CSR_ECFG + jirl $zero, $ra, 0 +#/** +# Enables global CPU interrupts. +#**/ ASM_PFX(EnableInterrupts): - li.w $t0, 0x4 - csrxchg $t0, $t0, 0x0 + li.w $t0, BIT2 + csrxchg $t0, $t0, LOONGARCH_CSR_CRMD jirl $zero, $ra, 0 .end -- cgit v1.2.3