forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.5 KiB
67 lines
1.5 KiB
/* SPDX-License-Identifier: GPL-2.0 */ |
|
#ifndef __ASM_GENERIC_IRQFLAGS_H |
|
#define __ASM_GENERIC_IRQFLAGS_H |
|
|
|
/* |
|
* All architectures should implement at least the first two functions, |
|
* usually inline assembly will be the best way. |
|
*/ |
|
#ifndef ARCH_IRQ_DISABLED |
|
#define ARCH_IRQ_DISABLED 0 |
|
#define ARCH_IRQ_ENABLED 1 |
|
#endif |
|
|
|
/* read interrupt enabled status */ |
|
#ifndef arch_local_save_flags |
|
unsigned long arch_local_save_flags(void); |
|
#endif |
|
|
|
/* set interrupt enabled status */ |
|
#ifndef arch_local_irq_restore |
|
void arch_local_irq_restore(unsigned long flags); |
|
#endif |
|
|
|
/* get status and disable interrupts */ |
|
#ifndef arch_local_irq_save |
|
static inline unsigned long arch_local_irq_save(void) |
|
{ |
|
unsigned long flags; |
|
flags = arch_local_save_flags(); |
|
arch_local_irq_restore(ARCH_IRQ_DISABLED); |
|
return flags; |
|
} |
|
#endif |
|
|
|
/* test flags */ |
|
#ifndef arch_irqs_disabled_flags |
|
static inline int arch_irqs_disabled_flags(unsigned long flags) |
|
{ |
|
return flags == ARCH_IRQ_DISABLED; |
|
} |
|
#endif |
|
|
|
/* unconditionally enable interrupts */ |
|
#ifndef arch_local_irq_enable |
|
static inline void arch_local_irq_enable(void) |
|
{ |
|
arch_local_irq_restore(ARCH_IRQ_ENABLED); |
|
} |
|
#endif |
|
|
|
/* unconditionally disable interrupts */ |
|
#ifndef arch_local_irq_disable |
|
static inline void arch_local_irq_disable(void) |
|
{ |
|
arch_local_irq_restore(ARCH_IRQ_DISABLED); |
|
} |
|
#endif |
|
|
|
/* test hardware interrupt enable bit */ |
|
#ifndef arch_irqs_disabled |
|
static inline int arch_irqs_disabled(void) |
|
{ |
|
return arch_irqs_disabled_flags(arch_local_save_flags()); |
|
} |
|
#endif |
|
|
|
#endif /* __ASM_GENERIC_IRQFLAGS_H */
|
|
|