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