linux/arch/c6x/include/asm/irqflags.h
<<
>>
Prefs
   1/*
   2 *  C6X IRQ flag handling
   3 *
   4 * Copyright (C) 2010 Texas Instruments Incorporated
   5 * Written by Mark Salter (msalter@redhat.com)
   6 *
   7 * This program is free software; you can redistribute it and/or
   8 * modify it under the terms of the GNU General Public Licence
   9 * as published by the Free Software Foundation; either version
  10 * 2 of the Licence, or (at your option) any later version.
  11 */
  12
  13#ifndef _ASM_IRQFLAGS_H
  14#define _ASM_IRQFLAGS_H
  15
  16#ifndef __ASSEMBLY__
  17
  18/* read interrupt enabled status */
  19static inline unsigned long arch_local_save_flags(void)
  20{
  21        unsigned long flags;
  22
  23        asm volatile (" mvc .s2 CSR,%0\n" : "=b"(flags));
  24        return flags;
  25}
  26
  27/* set interrupt enabled status */
  28static inline void arch_local_irq_restore(unsigned long flags)
  29{
  30        asm volatile (" mvc .s2 %0,CSR\n" : : "b"(flags) : "memory");
  31}
  32
  33/* unconditionally enable interrupts */
  34static inline void arch_local_irq_enable(void)
  35{
  36        unsigned long flags = arch_local_save_flags();
  37        flags |= 1;
  38        arch_local_irq_restore(flags);
  39}
  40
  41/* unconditionally disable interrupts */
  42static inline void arch_local_irq_disable(void)
  43{
  44        unsigned long flags = arch_local_save_flags();
  45        flags &= ~1;
  46        arch_local_irq_restore(flags);
  47}
  48
  49/* get status and disable interrupts */
  50static inline unsigned long arch_local_irq_save(void)
  51{
  52        unsigned long flags;
  53
  54        flags = arch_local_save_flags();
  55        arch_local_irq_restore(flags & ~1);
  56        return flags;
  57}
  58
  59/* test flags */
  60static inline int arch_irqs_disabled_flags(unsigned long flags)
  61{
  62        return (flags & 1) == 0;
  63}
  64
  65/* test hardware interrupt enable bit */
  66static inline int arch_irqs_disabled(void)
  67{
  68        return arch_irqs_disabled_flags(arch_local_save_flags());
  69}
  70
  71#endif /* __ASSEMBLY__ */
  72#endif /* __ASM_IRQFLAGS_H */
  73