linux/kernel/irq/settings.h
<<
>>
Prefs
   1/*
   2 * Internal header to deal with irq_desc->status which will be renamed
   3 * to irq_desc->settings.
   4 */
   5enum {
   6        _IRQ_DEFAULT_INIT_FLAGS = IRQ_DEFAULT_INIT_FLAGS,
   7        _IRQ_PER_CPU            = IRQ_PER_CPU,
   8        _IRQ_LEVEL              = IRQ_LEVEL,
   9        _IRQ_NOPROBE            = IRQ_NOPROBE,
  10        _IRQ_NOREQUEST          = IRQ_NOREQUEST,
  11        _IRQ_NOTHREAD           = IRQ_NOTHREAD,
  12        _IRQ_NOAUTOEN           = IRQ_NOAUTOEN,
  13        _IRQ_MOVE_PCNTXT        = IRQ_MOVE_PCNTXT,
  14        _IRQ_NO_BALANCING       = IRQ_NO_BALANCING,
  15        _IRQ_NESTED_THREAD      = IRQ_NESTED_THREAD,
  16        _IRQ_PER_CPU_DEVID      = IRQ_PER_CPU_DEVID,
  17        _IRQ_IS_POLLED          = IRQ_IS_POLLED,
  18        _IRQF_MODIFY_MASK       = IRQF_MODIFY_MASK,
  19};
  20
  21#define IRQ_PER_CPU             GOT_YOU_MORON
  22#define IRQ_NO_BALANCING        GOT_YOU_MORON
  23#define IRQ_LEVEL               GOT_YOU_MORON
  24#define IRQ_NOPROBE             GOT_YOU_MORON
  25#define IRQ_NOREQUEST           GOT_YOU_MORON
  26#define IRQ_NOTHREAD            GOT_YOU_MORON
  27#define IRQ_NOAUTOEN            GOT_YOU_MORON
  28#define IRQ_NESTED_THREAD       GOT_YOU_MORON
  29#define IRQ_PER_CPU_DEVID       GOT_YOU_MORON
  30#define IRQ_IS_POLLED           GOT_YOU_MORON
  31#undef IRQF_MODIFY_MASK
  32#define IRQF_MODIFY_MASK        GOT_YOU_MORON
  33
  34static inline void
  35irq_settings_clr_and_set(struct irq_desc *desc, u32 clr, u32 set)
  36{
  37        desc->status_use_accessors &= ~(clr & _IRQF_MODIFY_MASK);
  38        desc->status_use_accessors |= (set & _IRQF_MODIFY_MASK);
  39}
  40
  41static inline bool irq_settings_is_per_cpu(struct irq_desc *desc)
  42{
  43        return desc->status_use_accessors & _IRQ_PER_CPU;
  44}
  45
  46static inline bool irq_settings_is_per_cpu_devid(struct irq_desc *desc)
  47{
  48        return desc->status_use_accessors & _IRQ_PER_CPU_DEVID;
  49}
  50
  51static inline void irq_settings_set_per_cpu(struct irq_desc *desc)
  52{
  53        desc->status_use_accessors |= _IRQ_PER_CPU;
  54}
  55
  56static inline void irq_settings_set_no_balancing(struct irq_desc *desc)
  57{
  58        desc->status_use_accessors |= _IRQ_NO_BALANCING;
  59}
  60
  61static inline bool irq_settings_has_no_balance_set(struct irq_desc *desc)
  62{
  63        return desc->status_use_accessors & _IRQ_NO_BALANCING;
  64}
  65
  66static inline u32 irq_settings_get_trigger_mask(struct irq_desc *desc)
  67{
  68        return desc->status_use_accessors & IRQ_TYPE_SENSE_MASK;
  69}
  70
  71static inline void
  72irq_settings_set_trigger_mask(struct irq_desc *desc, u32 mask)
  73{
  74        desc->status_use_accessors &= ~IRQ_TYPE_SENSE_MASK;
  75        desc->status_use_accessors |= mask & IRQ_TYPE_SENSE_MASK;
  76}
  77
  78static inline bool irq_settings_is_level(struct irq_desc *desc)
  79{
  80        return desc->status_use_accessors & _IRQ_LEVEL;
  81}
  82
  83static inline void irq_settings_clr_level(struct irq_desc *desc)
  84{
  85        desc->status_use_accessors &= ~_IRQ_LEVEL;
  86}
  87
  88static inline void irq_settings_set_level(struct irq_desc *desc)
  89{
  90        desc->status_use_accessors |= _IRQ_LEVEL;
  91}
  92
  93static inline bool irq_settings_can_request(struct irq_desc *desc)
  94{
  95        return !(desc->status_use_accessors & _IRQ_NOREQUEST);
  96}
  97
  98static inline void irq_settings_clr_norequest(struct irq_desc *desc)
  99{
 100        desc->status_use_accessors &= ~_IRQ_NOREQUEST;
 101}
 102
 103static inline void irq_settings_set_norequest(struct irq_desc *desc)
 104{
 105        desc->status_use_accessors |= _IRQ_NOREQUEST;
 106}
 107
 108static inline bool irq_settings_can_thread(struct irq_desc *desc)
 109{
 110        return !(desc->status_use_accessors & _IRQ_NOTHREAD);
 111}
 112
 113static inline void irq_settings_clr_nothread(struct irq_desc *desc)
 114{
 115        desc->status_use_accessors &= ~_IRQ_NOTHREAD;
 116}
 117
 118static inline void irq_settings_set_nothread(struct irq_desc *desc)
 119{
 120        desc->status_use_accessors |= _IRQ_NOTHREAD;
 121}
 122
 123static inline bool irq_settings_can_probe(struct irq_desc *desc)
 124{
 125        return !(desc->status_use_accessors & _IRQ_NOPROBE);
 126}
 127
 128static inline void irq_settings_clr_noprobe(struct irq_desc *desc)
 129{
 130        desc->status_use_accessors &= ~_IRQ_NOPROBE;
 131}
 132
 133static inline void irq_settings_set_noprobe(struct irq_desc *desc)
 134{
 135        desc->status_use_accessors |= _IRQ_NOPROBE;
 136}
 137
 138static inline bool irq_settings_can_move_pcntxt(struct irq_desc *desc)
 139{
 140        return desc->status_use_accessors & _IRQ_MOVE_PCNTXT;
 141}
 142
 143static inline bool irq_settings_can_autoenable(struct irq_desc *desc)
 144{
 145        return !(desc->status_use_accessors & _IRQ_NOAUTOEN);
 146}
 147
 148static inline bool irq_settings_is_nested_thread(struct irq_desc *desc)
 149{
 150        return desc->status_use_accessors & _IRQ_NESTED_THREAD;
 151}
 152
 153static inline bool irq_settings_is_polled(struct irq_desc *desc)
 154{
 155        return desc->status_use_accessors & _IRQ_IS_POLLED;
 156}
 157