18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci 38c2ecf20Sopenharmony_ci#ifndef __ASM_CSKY_IRQFLAGS_H 48c2ecf20Sopenharmony_ci#define __ASM_CSKY_IRQFLAGS_H 58c2ecf20Sopenharmony_ci#include <abi/reg_ops.h> 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_cistatic inline unsigned long arch_local_irq_save(void) 88c2ecf20Sopenharmony_ci{ 98c2ecf20Sopenharmony_ci unsigned long flags; 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci flags = mfcr("psr"); 128c2ecf20Sopenharmony_ci asm volatile("psrclr ie\n":::"memory"); 138c2ecf20Sopenharmony_ci return flags; 148c2ecf20Sopenharmony_ci} 158c2ecf20Sopenharmony_ci#define arch_local_irq_save arch_local_irq_save 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_cistatic inline void arch_local_irq_enable(void) 188c2ecf20Sopenharmony_ci{ 198c2ecf20Sopenharmony_ci asm volatile("psrset ee, ie\n":::"memory"); 208c2ecf20Sopenharmony_ci} 218c2ecf20Sopenharmony_ci#define arch_local_irq_enable arch_local_irq_enable 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_cistatic inline void arch_local_irq_disable(void) 248c2ecf20Sopenharmony_ci{ 258c2ecf20Sopenharmony_ci asm volatile("psrclr ie\n":::"memory"); 268c2ecf20Sopenharmony_ci} 278c2ecf20Sopenharmony_ci#define arch_local_irq_disable arch_local_irq_disable 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_cistatic inline unsigned long arch_local_save_flags(void) 308c2ecf20Sopenharmony_ci{ 318c2ecf20Sopenharmony_ci return mfcr("psr"); 328c2ecf20Sopenharmony_ci} 338c2ecf20Sopenharmony_ci#define arch_local_save_flags arch_local_save_flags 348c2ecf20Sopenharmony_ci 358c2ecf20Sopenharmony_cistatic inline void arch_local_irq_restore(unsigned long flags) 368c2ecf20Sopenharmony_ci{ 378c2ecf20Sopenharmony_ci mtcr("psr", flags); 388c2ecf20Sopenharmony_ci} 398c2ecf20Sopenharmony_ci#define arch_local_irq_restore arch_local_irq_restore 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_cistatic inline int arch_irqs_disabled_flags(unsigned long flags) 428c2ecf20Sopenharmony_ci{ 438c2ecf20Sopenharmony_ci return !(flags & (1<<6)); 448c2ecf20Sopenharmony_ci} 458c2ecf20Sopenharmony_ci#define arch_irqs_disabled_flags arch_irqs_disabled_flags 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_ci#include <asm-generic/irqflags.h> 488c2ecf20Sopenharmony_ci 498c2ecf20Sopenharmony_ci#endif /* __ASM_CSKY_IRQFLAGS_H */ 50