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        _IRQF_MODIFY_MASK       = IRQF_MODIFY_MASK,
  18};
  19
  20#define IRQ_PER_CPU             GOT_YOU_MORON
  21#define IRQ_NO_BALANCING        GOT_YOU_MORON
  22#define IRQ_LEVEL               GOT_YOU_MORON
  23#define IRQ_NOPROBE             GOT_YOU_MORON
  24#define IRQ_NOREQUEST           GOT_YOU_MORON
  25#define IRQ_NOTHREAD            GOT_YOU_MORON
  26#define IRQ_NOAUTOEN            GOT_YOU_MORON
  27#define IRQ_NESTED_THREAD       GOT_YOU_MORON
  28#define IRQ_PER_CPU_DEVID       GOT_YOU_MORON
  29#undef IRQF_MODIFY_MASK
  30#define IRQF_MODIFY_MASK        GOT_YOU_MORON
  31
  32static inline void
  33irq_settings_clr_and_set(struct irq_desc *desc, u32 clr, u32 set)
  34{
  35        desc->status_use_accessors &= ~(clr & _IRQF_MODIFY_MASK);
  36        desc->status_use_accessors |= (set & _IRQF_MODIFY_MASK);
  37}
  38
  39static inline bool irq_settings_is_per_cpu(struct irq_desc *desc)
  40{
  41        return desc->status_use_accessors & _IRQ_PER_CPU;
  42}
  43
  44static inline bool irq_settings_is_per_cpu_devid(struct irq_desc *desc)
  45{
  46        return desc->status_use_accessors & _IRQ_PER_CPU_DEVID;
  47}
  48
  49static inline void irq_settings_set_per_cpu(struct irq_desc *desc)
  50{
  51        desc->status_use_accessors |= _IRQ_PER_CPU;
  52}
  53
  54static inline void irq_settings_set_no_balancing(struct irq_desc *desc)
  55{
  56        desc->status_use_accessors |= _IRQ_NO_BALANCING;
  57}
  58
  59static inline bool irq_settings_has_no_balance_set(struct irq_desc *desc)
  60{
  61        return desc->status_use_accessors & _IRQ_NO_BALANCING;
  62}
  63
  64static inline u32 irq_settings_get_trigger_mask(struct irq_desc *desc)
  65{
  66        return desc->status_use_accessors & IRQ_TYPE_SENSE_MASK;
  67}
  68
  69static inline void
  70irq_settings_set_trigger_mask(struct irq_desc *desc, u32 mask)
  71{
  72        desc->status_use_accessors &= ~IRQ_TYPE_SENSE_MASK;
  73        desc->status_use_accessors |= mask & IRQ_TYPE_SENSE_MASK;
  74}
  75
  76static inline bool irq_settings_is_level(struct irq_desc *desc)
  77{
  78        return desc->status_use_accessors & _IRQ_LEVEL;
  79}
  80
  81static inline void irq_settings_clr_level(struct irq_desc *desc)
  82{
  83        desc->status_use_accessors &= ~_IRQ_LEVEL;
  84}
  85
  86static inline void irq_settings_set_level(struct irq_desc *desc)
  87{
  88        desc->status_use_accessors |= _IRQ_LEVEL;
  89}
  90
  91static inline bool irq_settings_can_request(struct irq_desc *desc)
  92{
  93        return !(desc->status_use_accessors & _IRQ_NOREQUEST);
  94}
  95
  96static inline void irq_settings_clr_norequest(struct irq_desc *desc)
  97{
  98        desc->status_use_accessors &= ~_IRQ_NOREQUEST;
  99}
 100
 101static inline void irq_settings_set_norequest(struct irq_desc *desc)
 102{
 103        desc->status_use_accessors |= _IRQ_NOREQUEST;
 104}
 105
 106static inline bool irq_settings_can_thread(struct irq_desc *desc)
 107{
 108        return !(desc->status_use_accessors & _IRQ_NOTHREAD);
 109}
 110
 111static inline void irq_settings_clr_nothread(struct irq_desc *desc)
 112{
 113        desc->status_use_accessors &= ~_IRQ_NOTHREAD;
 114}
 115
 116static inline void irq_settings_set_nothread(struct irq_desc *desc)
 117{
 118        desc->status_use_accessors |= _IRQ_NOTHREAD;
 119}
 120
 121static inline bool irq_settings_can_probe(struct irq_desc *desc)
 122{
 123        return !(desc->status_use_accessors & _IRQ_NOPROBE);
 124}
 125
 126static inline void irq_settings_clr_noprobe(struct irq_desc *desc)
 127{
 128        desc->status_use_accessors &= ~_IRQ_NOPROBE;
 129}
 130
 131static inline void irq_settings_set_noprobe(struct irq_desc *desc)
 132{
 133        desc->status_use_accessors |= _IRQ_NOPROBE;
 134}
 135
 136static inline bool irq_settings_can_move_pcntxt(struct irq_desc *desc)
 137{
 138        return desc->status_use_accessors & _IRQ_MOVE_PCNTXT;
 139}
 140
 141static inline bool irq_settings_can_autoenable(struct irq_desc *desc)
 142{
 143        return !(desc->status_use_accessors & _IRQ_NOAUTOEN);
 144}
 145
 146static inline bool irq_settings_is_nested_thread(struct irq_desc *desc)
 147{
 148        return desc->status_use_accessors & _IRQ_NESTED_THREAD;
 149}
 150
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.