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