1 /* 2 * Internal header to deal with irq_desc->status which will be renamed 3 * to irq_desc->settings. 4 */ 5 enum { 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_NOAUTOEN = IRQ_NOAUTOEN, 12 _IRQ_MOVE_PCNTXT = IRQ_MOVE_PCNTXT, 13 _IRQ_NO_BALANCING = IRQ_NO_BALANCING, 14 _IRQ_NESTED_THREAD = IRQ_NESTED_THREAD, 15 _IRQF_MODIFY_MASK = IRQF_MODIFY_MASK, 16 }; 17 18 #define IRQ_PER_CPU GOT_YOU_MORON 19 #define IRQ_NO_BALANCING GOT_YOU_MORON 20 #define IRQ_LEVEL GOT_YOU_MORON 21 #define IRQ_NOPROBE GOT_YOU_MORON 22 #define IRQ_NOREQUEST GOT_YOU_MORON 23 #define IRQ_NOAUTOEN GOT_YOU_MORON 24 #define IRQ_NESTED_THREAD GOT_YOU_MORON 25 #undef IRQF_MODIFY_MASK 26 #define IRQF_MODIFY_MASK GOT_YOU_MORON 27 28 static inline void 29 irq_settings_clr_and_set(struct irq_desc *desc, u32 clr, u32 set) 30 { 31 desc->status_use_accessors &= ~(clr & _IRQF_MODIFY_MASK); 32 desc->status_use_accessors |= (set & _IRQF_MODIFY_MASK); 33 } 34 35 static inline bool irq_settings_is_per_cpu(struct irq_desc *desc) 36 { 37 return desc->status_use_accessors & _IRQ_PER_CPU; 38 } 39 40 static inline void irq_settings_set_per_cpu(struct irq_desc *desc) 41 { 42 desc->status_use_accessors |= _IRQ_PER_CPU; 43 } 44 45 static inline void irq_settings_set_no_balancing(struct irq_desc *desc) 46 { 47 desc->status_use_accessors |= _IRQ_NO_BALANCING; 48 } 49 50 static inline bool irq_settings_has_no_balance_set(struct irq_desc *desc) 51 { 52 return desc->status_use_accessors & _IRQ_NO_BALANCING; 53 } 54 55 static inline u32 irq_settings_get_trigger_mask(struct irq_desc *desc) 56 { 57 return desc->status_use_accessors & IRQ_TYPE_SENSE_MASK; 58 } 59 60 static inline void 61 irq_settings_set_trigger_mask(struct irq_desc *desc, u32 mask) 62 { 63 desc->status_use_accessors &= ~IRQ_TYPE_SENSE_MASK; 64 desc->status_use_accessors |= mask & IRQ_TYPE_SENSE_MASK; 65 } 66 67 static inline bool irq_settings_is_level(struct irq_desc *desc) 68 { 69 return desc->status_use_accessors & _IRQ_LEVEL; 70 } 71 72 static inline void irq_settings_clr_level(struct irq_desc *desc) 73 { 74 desc->status_use_accessors &= ~_IRQ_LEVEL; 75 } 76 77 static inline void irq_settings_set_level(struct irq_desc *desc) 78 { 79 desc->status_use_accessors |= _IRQ_LEVEL; 80 } 81 82 static inline bool irq_settings_can_request(struct irq_desc *desc) 83 { 84 return !(desc->status_use_accessors & _IRQ_NOREQUEST); 85 } 86 87 static inline void irq_settings_clr_norequest(struct irq_desc *desc) 88 { 89 desc->status_use_accessors &= ~_IRQ_NOREQUEST; 90 } 91 92 static inline void irq_settings_set_norequest(struct irq_desc *desc) 93 { 94 desc->status_use_accessors |= _IRQ_NOREQUEST; 95 } 96 97 static inline bool irq_settings_can_probe(struct irq_desc *desc) 98 { 99 return !(desc->status_use_accessors & _IRQ_NOPROBE); 100 } 101 102 static inline void irq_settings_clr_noprobe(struct irq_desc *desc) 103 { 104 desc->status_use_accessors &= ~_IRQ_NOPROBE; 105 } 106 107 static inline void irq_settings_set_noprobe(struct irq_desc *desc) 108 { 109 desc->status_use_accessors |= _IRQ_NOPROBE; 110 } 111 112 static inline bool irq_settings_can_move_pcntxt(struct irq_desc *desc) 113 { 114 return desc->status_use_accessors & _IRQ_MOVE_PCNTXT; 115 } 116 117 static inline bool irq_settings_can_autoenable(struct irq_desc *desc) 118 { 119 return !(desc->status_use_accessors & _IRQ_NOAUTOEN); 120 } 121 122 static inline bool irq_settings_is_nested_thread(struct irq_desc *desc) 123 { 124 return desc->status_use_accessors & _IRQ_NESTED_THREAD; 125 } 126