Line data Source code
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 : */ 6 : enum { 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 : _IRQ_NO_DEBUG = IRQ_NO_DEBUG, 22 : _IRQF_MODIFY_MASK = IRQF_MODIFY_MASK, 23 : }; 24 : 25 : #define IRQ_PER_CPU GOT_YOU_MORON 26 : #define IRQ_NO_BALANCING GOT_YOU_MORON 27 : #define IRQ_LEVEL GOT_YOU_MORON 28 : #define IRQ_NOPROBE GOT_YOU_MORON 29 : #define IRQ_NOREQUEST GOT_YOU_MORON 30 : #define IRQ_NOTHREAD GOT_YOU_MORON 31 : #define IRQ_NOAUTOEN GOT_YOU_MORON 32 : #define IRQ_NESTED_THREAD GOT_YOU_MORON 33 : #define IRQ_PER_CPU_DEVID GOT_YOU_MORON 34 : #define IRQ_IS_POLLED GOT_YOU_MORON 35 : #define IRQ_DISABLE_UNLAZY GOT_YOU_MORON 36 : #define IRQ_HIDDEN GOT_YOU_MORON 37 : #define IRQ_NO_DEBUG GOT_YOU_MORON 38 : #undef IRQF_MODIFY_MASK 39 : #define IRQF_MODIFY_MASK GOT_YOU_MORON 40 : 41 : static inline void 42 : irq_settings_clr_and_set(struct irq_desc *desc, u32 clr, u32 set) 43 : { 44 128 : desc->status_use_accessors &= ~(clr & _IRQF_MODIFY_MASK); 45 128 : desc->status_use_accessors |= (set & _IRQF_MODIFY_MASK); 46 : } 47 : 48 : static inline bool irq_settings_is_per_cpu(struct irq_desc *desc) 49 : { 50 0 : return desc->status_use_accessors & _IRQ_PER_CPU; 51 : } 52 : 53 : static inline bool irq_settings_is_per_cpu_devid(struct irq_desc *desc) 54 : { 55 2 : return desc->status_use_accessors & _IRQ_PER_CPU_DEVID; 56 : } 57 : 58 : static inline void irq_settings_set_per_cpu(struct irq_desc *desc) 59 : { 60 0 : desc->status_use_accessors |= _IRQ_PER_CPU; 61 : } 62 : 63 : static inline void irq_settings_set_no_balancing(struct irq_desc *desc) 64 : { 65 0 : desc->status_use_accessors |= _IRQ_NO_BALANCING; 66 : } 67 : 68 : static inline bool irq_settings_has_no_balance_set(struct irq_desc *desc) 69 : { 70 0 : return desc->status_use_accessors & _IRQ_NO_BALANCING; 71 : } 72 : 73 : static inline u32 irq_settings_get_trigger_mask(struct irq_desc *desc) 74 : { 75 0 : return desc->status_use_accessors & IRQ_TYPE_SENSE_MASK; 76 : } 77 : 78 : static inline void 79 : irq_settings_set_trigger_mask(struct irq_desc *desc, u32 mask) 80 : { 81 0 : desc->status_use_accessors &= ~IRQ_TYPE_SENSE_MASK; 82 0 : desc->status_use_accessors |= mask & IRQ_TYPE_SENSE_MASK; 83 : } 84 : 85 : static inline bool irq_settings_is_level(struct irq_desc *desc) 86 : { 87 2 : return desc->status_use_accessors & _IRQ_LEVEL; 88 : } 89 : 90 : static inline void irq_settings_clr_level(struct irq_desc *desc) 91 : { 92 0 : desc->status_use_accessors &= ~_IRQ_LEVEL; 93 : } 94 : 95 : static inline void irq_settings_set_level(struct irq_desc *desc) 96 : { 97 0 : desc->status_use_accessors |= _IRQ_LEVEL; 98 : } 99 : 100 : static inline bool irq_settings_can_request(struct irq_desc *desc) 101 : { 102 2 : return !(desc->status_use_accessors & _IRQ_NOREQUEST); 103 : } 104 : 105 : static inline void irq_settings_clr_norequest(struct irq_desc *desc) 106 : { 107 : desc->status_use_accessors &= ~_IRQ_NOREQUEST; 108 : } 109 : 110 : static inline void irq_settings_set_norequest(struct irq_desc *desc) 111 : { 112 0 : desc->status_use_accessors |= _IRQ_NOREQUEST; 113 : } 114 : 115 : static inline bool irq_settings_can_thread(struct irq_desc *desc) 116 : { 117 : return !(desc->status_use_accessors & _IRQ_NOTHREAD); 118 : } 119 : 120 : static inline void irq_settings_clr_nothread(struct irq_desc *desc) 121 : { 122 : desc->status_use_accessors &= ~_IRQ_NOTHREAD; 123 : } 124 : 125 : static inline void irq_settings_set_nothread(struct irq_desc *desc) 126 : { 127 0 : desc->status_use_accessors |= _IRQ_NOTHREAD; 128 : } 129 : 130 : static inline bool irq_settings_can_probe(struct irq_desc *desc) 131 : { 132 : return !(desc->status_use_accessors & _IRQ_NOPROBE); 133 : } 134 : 135 : static inline void irq_settings_clr_noprobe(struct irq_desc *desc) 136 : { 137 : desc->status_use_accessors &= ~_IRQ_NOPROBE; 138 : } 139 : 140 : static inline void irq_settings_set_noprobe(struct irq_desc *desc) 141 : { 142 0 : desc->status_use_accessors |= _IRQ_NOPROBE; 143 : } 144 : 145 : static inline bool irq_settings_can_move_pcntxt(struct irq_desc *desc) 146 : { 147 0 : return desc->status_use_accessors & _IRQ_MOVE_PCNTXT; 148 : } 149 : 150 : static inline bool irq_settings_can_autoenable(struct irq_desc *desc) 151 : { 152 2 : return !(desc->status_use_accessors & _IRQ_NOAUTOEN); 153 : } 154 : 155 : static inline bool irq_settings_is_nested_thread(struct irq_desc *desc) 156 : { 157 2 : return desc->status_use_accessors & _IRQ_NESTED_THREAD; 158 : } 159 : 160 : static inline bool irq_settings_is_polled(struct irq_desc *desc) 161 : { 162 5 : return desc->status_use_accessors & _IRQ_IS_POLLED; 163 : } 164 : 165 : static inline bool irq_settings_disable_unlazy(struct irq_desc *desc) 166 : { 167 0 : return desc->status_use_accessors & _IRQ_DISABLE_UNLAZY; 168 : } 169 : 170 : static inline void irq_settings_clr_disable_unlazy(struct irq_desc *desc) 171 : { 172 0 : desc->status_use_accessors &= ~_IRQ_DISABLE_UNLAZY; 173 : } 174 : 175 : static inline bool irq_settings_is_hidden(struct irq_desc *desc) 176 : { 177 0 : return desc->status_use_accessors & _IRQ_HIDDEN; 178 : } 179 : 180 : static inline void irq_settings_set_no_debug(struct irq_desc *desc) 181 : { 182 0 : desc->status_use_accessors |= _IRQ_NO_DEBUG; 183 : } 184 : 185 : static inline bool irq_settings_no_debug(struct irq_desc *desc) 186 : { 187 5 : return desc->status_use_accessors & _IRQ_NO_DEBUG; 188 : }