18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci#ifndef __ALPHA_IRQFLAGS_H 38c2ecf20Sopenharmony_ci#define __ALPHA_IRQFLAGS_H 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ci#include <asm/pal.h> 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci#define IPL_MIN 0 88c2ecf20Sopenharmony_ci#define IPL_SW0 1 98c2ecf20Sopenharmony_ci#define IPL_SW1 2 108c2ecf20Sopenharmony_ci#define IPL_DEV0 3 118c2ecf20Sopenharmony_ci#define IPL_DEV1 4 128c2ecf20Sopenharmony_ci#define IPL_TIMER 5 138c2ecf20Sopenharmony_ci#define IPL_PERF 6 148c2ecf20Sopenharmony_ci#define IPL_POWERFAIL 6 158c2ecf20Sopenharmony_ci#define IPL_MCHECK 7 168c2ecf20Sopenharmony_ci#define IPL_MAX 7 178c2ecf20Sopenharmony_ci 188c2ecf20Sopenharmony_ci#ifdef CONFIG_ALPHA_BROKEN_IRQ_MASK 198c2ecf20Sopenharmony_ci#undef IPL_MIN 208c2ecf20Sopenharmony_ci#define IPL_MIN __min_ipl 218c2ecf20Sopenharmony_ciextern int __min_ipl; 228c2ecf20Sopenharmony_ci#endif 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci#define getipl() (rdps() & 7) 258c2ecf20Sopenharmony_ci#define setipl(ipl) ((void) swpipl(ipl)) 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_cistatic inline unsigned long arch_local_save_flags(void) 288c2ecf20Sopenharmony_ci{ 298c2ecf20Sopenharmony_ci return rdps(); 308c2ecf20Sopenharmony_ci} 318c2ecf20Sopenharmony_ci 328c2ecf20Sopenharmony_cistatic inline void arch_local_irq_disable(void) 338c2ecf20Sopenharmony_ci{ 348c2ecf20Sopenharmony_ci setipl(IPL_MAX); 358c2ecf20Sopenharmony_ci barrier(); 368c2ecf20Sopenharmony_ci} 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_cistatic inline unsigned long arch_local_irq_save(void) 398c2ecf20Sopenharmony_ci{ 408c2ecf20Sopenharmony_ci unsigned long flags = swpipl(IPL_MAX); 418c2ecf20Sopenharmony_ci barrier(); 428c2ecf20Sopenharmony_ci return flags; 438c2ecf20Sopenharmony_ci} 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_cistatic inline void arch_local_irq_enable(void) 468c2ecf20Sopenharmony_ci{ 478c2ecf20Sopenharmony_ci barrier(); 488c2ecf20Sopenharmony_ci setipl(IPL_MIN); 498c2ecf20Sopenharmony_ci} 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_cistatic inline void arch_local_irq_restore(unsigned long flags) 528c2ecf20Sopenharmony_ci{ 538c2ecf20Sopenharmony_ci barrier(); 548c2ecf20Sopenharmony_ci setipl(flags); 558c2ecf20Sopenharmony_ci barrier(); 568c2ecf20Sopenharmony_ci} 578c2ecf20Sopenharmony_ci 588c2ecf20Sopenharmony_cistatic inline bool arch_irqs_disabled_flags(unsigned long flags) 598c2ecf20Sopenharmony_ci{ 608c2ecf20Sopenharmony_ci return flags == IPL_MAX; 618c2ecf20Sopenharmony_ci} 628c2ecf20Sopenharmony_ci 638c2ecf20Sopenharmony_cistatic inline bool arch_irqs_disabled(void) 648c2ecf20Sopenharmony_ci{ 658c2ecf20Sopenharmony_ci return arch_irqs_disabled_flags(getipl()); 668c2ecf20Sopenharmony_ci} 678c2ecf20Sopenharmony_ci 688c2ecf20Sopenharmony_ci#endif /* __ALPHA_IRQFLAGS_H */ 69