1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef _H8300_IRQFLAGS_H 3#define _H8300_IRQFLAGS_H 4 5#ifdef CONFIG_CPU_H8300H 6typedef unsigned char h8300flags; 7 8static inline h8300flags arch_local_save_flags(void) 9{ 10 h8300flags flags; 11 12 __asm__ volatile ("stc ccr,%w0" : "=r" (flags)); 13 return flags; 14} 15 16static inline void arch_local_irq_disable(void) 17{ 18 __asm__ volatile ("orc #0xc0,ccr"); 19} 20 21static inline void arch_local_irq_enable(void) 22{ 23 __asm__ volatile ("andc #0x3f,ccr"); 24} 25 26static inline h8300flags arch_local_irq_save(void) 27{ 28 h8300flags flags; 29 30 __asm__ volatile ("stc ccr,%w0\n\t" 31 "orc #0xc0,ccr" : "=r" (flags)); 32 return flags; 33} 34 35static inline void arch_local_irq_restore(h8300flags flags) 36{ 37 __asm__ volatile ("ldc %w0,ccr" : : "r" (flags) : "cc"); 38} 39 40static inline int arch_irqs_disabled_flags(unsigned long flags) 41{ 42 return (flags & 0xc0) == 0xc0; 43} 44#endif 45#ifdef CONFIG_CPU_H8S 46typedef unsigned short h8300flags; 47 48static inline h8300flags arch_local_save_flags(void) 49{ 50 h8300flags flags; 51 52 __asm__ volatile ("stc ccr,%w0\n\tstc exr,%x0" : "=r" (flags)); 53 return flags; 54} 55 56static inline void arch_local_irq_disable(void) 57{ 58 __asm__ volatile ("orc #0x80,ccr\n\t"); 59} 60 61static inline void arch_local_irq_enable(void) 62{ 63 __asm__ volatile ("andc #0x7f,ccr\n\t" 64 "andc #0xf0,exr\n\t"); 65} 66 67static inline h8300flags arch_local_irq_save(void) 68{ 69 h8300flags flags; 70 71 __asm__ volatile ("stc ccr,%w0\n\t" 72 "stc exr,%x0\n\t" 73 "orc #0x80,ccr\n\t" 74 : "=r" (flags)); 75 return flags; 76} 77 78static inline void arch_local_irq_restore(h8300flags flags) 79{ 80 __asm__ volatile ("ldc %w0,ccr\n\t" 81 "ldc %x0,exr" 82 : : "r" (flags) : "cc"); 83} 84 85static inline int arch_irqs_disabled_flags(h8300flags flags) 86{ 87 return (flags & 0x0080) == 0x0080; 88} 89 90#endif 91 92static inline int arch_irqs_disabled(void) 93{ 94 return arch_irqs_disabled_flags(arch_local_save_flags()); 95} 96 97#endif /* _H8300_IRQFLAGS_H */ 98