linux/arch/parisc/include/asm/irqflags.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef __PARISC_IRQFLAGS_H
   3#define __PARISC_IRQFLAGS_H
   4
   5#include <linux/types.h>
   6#include <asm/psw.h>
   7
   8static inline unsigned long arch_local_save_flags(void)
   9{
  10        unsigned long flags;
  11        asm volatile("ssm 0, %0" : "=r" (flags) : : "memory");
  12        return flags;
  13}
  14
  15static inline void arch_local_irq_disable(void)
  16{
  17        asm volatile("rsm %0,%%r0\n" : : "i" (PSW_I) : "memory");
  18}
  19
  20static inline void arch_local_irq_enable(void)
  21{
  22        asm volatile("ssm %0,%%r0\n" : : "i" (PSW_I) : "memory");
  23}
  24
  25static inline unsigned long arch_local_irq_save(void)
  26{
  27        unsigned long flags;
  28        asm volatile("rsm %1,%0" : "=r" (flags) : "i" (PSW_I) : "memory");
  29        return flags;
  30}
  31
  32static inline void arch_local_irq_restore(unsigned long flags)
  33{
  34        asm volatile("mtsm %0" : : "r" (flags) : "memory");
  35}
  36
  37static inline bool arch_irqs_disabled_flags(unsigned long flags)
  38{
  39        return (flags & PSW_I) == 0;
  40}
  41
  42static inline bool arch_irqs_disabled(void)
  43{
  44        return arch_irqs_disabled_flags(arch_local_save_flags());
  45}
  46
  47#endif /* __PARISC_IRQFLAGS_H */
  48