| .. | .. |
|---|
| 17 | 17 | _IRQ_PER_CPU_DEVID = IRQ_PER_CPU_DEVID, |
|---|
| 18 | 18 | _IRQ_IS_POLLED = IRQ_IS_POLLED, |
|---|
| 19 | 19 | _IRQ_DISABLE_UNLAZY = IRQ_DISABLE_UNLAZY, |
|---|
| 20 | | - _IRQ_NO_SOFTIRQ_CALL = IRQ_NO_SOFTIRQ_CALL, |
|---|
| 20 | + _IRQ_HIDDEN = IRQ_HIDDEN, |
|---|
| 21 | + _IRQ_RAW = IRQ_RAW, |
|---|
| 21 | 22 | _IRQF_MODIFY_MASK = IRQF_MODIFY_MASK, |
|---|
| 22 | 23 | }; |
|---|
| 23 | 24 | |
|---|
| .. | .. |
|---|
| 32 | 33 | #define IRQ_PER_CPU_DEVID GOT_YOU_MORON |
|---|
| 33 | 34 | #define IRQ_IS_POLLED GOT_YOU_MORON |
|---|
| 34 | 35 | #define IRQ_DISABLE_UNLAZY GOT_YOU_MORON |
|---|
| 35 | | -#define IRQ_NO_SOFTIRQ_CALL GOT_YOU_MORON |
|---|
| 36 | +#define IRQ_HIDDEN GOT_YOU_MORON |
|---|
| 37 | +#define IRQ_RAW GOT_YOU_MORON |
|---|
| 36 | 38 | #undef IRQF_MODIFY_MASK |
|---|
| 37 | 39 | #define IRQF_MODIFY_MASK GOT_YOU_MORON |
|---|
| 38 | 40 | |
|---|
| 39 | 41 | static inline void |
|---|
| 42 | +__irq_settings_clr_and_set(struct irq_desc *desc, u32 clr, u32 set, u32 mask) |
|---|
| 43 | +{ |
|---|
| 44 | + desc->status_use_accessors &= ~(clr & mask); |
|---|
| 45 | + desc->status_use_accessors |= (set & mask); |
|---|
| 46 | +} |
|---|
| 47 | + |
|---|
| 48 | +static inline void |
|---|
| 40 | 49 | irq_settings_clr_and_set(struct irq_desc *desc, u32 clr, u32 set) |
|---|
| 41 | 50 | { |
|---|
| 42 | | - desc->status_use_accessors &= ~(clr & _IRQF_MODIFY_MASK); |
|---|
| 43 | | - desc->status_use_accessors |= (set & _IRQF_MODIFY_MASK); |
|---|
| 44 | | -} |
|---|
| 45 | | - |
|---|
| 46 | | -static inline bool irq_settings_no_softirq_call(struct irq_desc *desc) |
|---|
| 47 | | -{ |
|---|
| 48 | | - return desc->status_use_accessors & _IRQ_NO_SOFTIRQ_CALL; |
|---|
| 49 | | -} |
|---|
| 50 | | - |
|---|
| 51 | | -static inline void irq_settings_set_no_softirq_call(struct irq_desc *desc) |
|---|
| 52 | | -{ |
|---|
| 53 | | - desc->status_use_accessors |= _IRQ_NO_SOFTIRQ_CALL; |
|---|
| 51 | + __irq_settings_clr_and_set(desc, clr, set, _IRQF_MODIFY_MASK); |
|---|
| 54 | 52 | } |
|---|
| 55 | 53 | |
|---|
| 56 | 54 | static inline bool irq_settings_is_per_cpu(struct irq_desc *desc) |
|---|
| .. | .. |
|---|
| 179 | 177 | { |
|---|
| 180 | 178 | desc->status_use_accessors &= ~_IRQ_DISABLE_UNLAZY; |
|---|
| 181 | 179 | } |
|---|
| 180 | + |
|---|
| 181 | +static inline bool irq_settings_is_hidden(struct irq_desc *desc) |
|---|
| 182 | +{ |
|---|
| 183 | + return desc->status_use_accessors & _IRQ_HIDDEN; |
|---|
| 184 | +} |
|---|
| 185 | + |
|---|
| 186 | +static inline bool irq_settings_is_raw(struct irq_desc *desc) |
|---|
| 187 | +{ |
|---|
| 188 | + if (IS_ENABLED(CONFIG_ARCH_WANTS_IRQ_RAW)) |
|---|
| 189 | + return desc->status_use_accessors & _IRQ_RAW; |
|---|
| 190 | + |
|---|
| 191 | + /* |
|---|
| 192 | + * Using IRQ_RAW on architectures that don't expect it is |
|---|
| 193 | + * likely to be wrong. |
|---|
| 194 | + */ |
|---|
| 195 | + WARN_ON_ONCE(1); |
|---|
| 196 | + return false; |
|---|
| 197 | +} |
|---|