18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci// Copyright (C) 2005-2017 Andes Technology Corporation 38c2ecf20Sopenharmony_ci 48c2ecf20Sopenharmony_ci#include <asm/nds32.h> 58c2ecf20Sopenharmony_ci#include <nds32_intrinsic.h> 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci#define arch_local_irq_disable() \ 88c2ecf20Sopenharmony_ci GIE_DISABLE(); 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci#define arch_local_irq_enable() \ 118c2ecf20Sopenharmony_ci GIE_ENABLE(); 128c2ecf20Sopenharmony_cistatic inline unsigned long arch_local_irq_save(void) 138c2ecf20Sopenharmony_ci{ 148c2ecf20Sopenharmony_ci unsigned long flags; 158c2ecf20Sopenharmony_ci flags = __nds32__mfsr(NDS32_SR_PSW) & PSW_mskGIE; 168c2ecf20Sopenharmony_ci GIE_DISABLE(); 178c2ecf20Sopenharmony_ci return flags; 188c2ecf20Sopenharmony_ci} 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_cistatic inline unsigned long arch_local_save_flags(void) 218c2ecf20Sopenharmony_ci{ 228c2ecf20Sopenharmony_ci unsigned long flags; 238c2ecf20Sopenharmony_ci flags = __nds32__mfsr(NDS32_SR_PSW) & PSW_mskGIE; 248c2ecf20Sopenharmony_ci return flags; 258c2ecf20Sopenharmony_ci} 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_cistatic inline void arch_local_irq_restore(unsigned long flags) 288c2ecf20Sopenharmony_ci{ 298c2ecf20Sopenharmony_ci if(flags) 308c2ecf20Sopenharmony_ci GIE_ENABLE(); 318c2ecf20Sopenharmony_ci} 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_cistatic inline int arch_irqs_disabled_flags(unsigned long flags) 348c2ecf20Sopenharmony_ci{ 358c2ecf20Sopenharmony_ci return !flags; 368c2ecf20Sopenharmony_ci} 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_cistatic inline int arch_irqs_disabled(void) 398c2ecf20Sopenharmony_ci{ 408c2ecf20Sopenharmony_ci return arch_irqs_disabled_flags(arch_local_save_flags()); 418c2ecf20Sopenharmony_ci} 42