Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
e6bea9c4 TG |
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, | |
a005677b | 8 | _IRQ_PER_CPU = IRQ_PER_CPU, |
876dbd4c | 9 | _IRQ_LEVEL = IRQ_LEVEL, |
1ccb4e61 TG |
10 | _IRQ_NOPROBE = IRQ_NOPROBE, |
11 | _IRQ_NOREQUEST = IRQ_NOREQUEST, | |
7f1b1244 | 12 | _IRQ_NOTHREAD = IRQ_NOTHREAD, |
1ccb4e61 TG |
13 | _IRQ_NOAUTOEN = IRQ_NOAUTOEN, |
14 | _IRQ_MOVE_PCNTXT = IRQ_MOVE_PCNTXT, | |
a005677b | 15 | _IRQ_NO_BALANCING = IRQ_NO_BALANCING, |
1ccb4e61 | 16 | _IRQ_NESTED_THREAD = IRQ_NESTED_THREAD, |
31d9d9b6 | 17 | _IRQ_PER_CPU_DEVID = IRQ_PER_CPU_DEVID, |
b39898cd | 18 | _IRQ_IS_POLLED = IRQ_IS_POLLED, |
e9849777 | 19 | _IRQ_DISABLE_UNLAZY = IRQ_DISABLE_UNLAZY, |
a005677b | 20 | _IRQF_MODIFY_MASK = IRQF_MODIFY_MASK, |
e6bea9c4 | 21 | }; |
009b4c3b | 22 | |
a005677b | 23 | #define IRQ_PER_CPU GOT_YOU_MORON |
a005677b | 24 | #define IRQ_NO_BALANCING GOT_YOU_MORON |
876dbd4c | 25 | #define IRQ_LEVEL GOT_YOU_MORON |
1ccb4e61 | 26 | #define IRQ_NOPROBE GOT_YOU_MORON |
1ccb4e61 | 27 | #define IRQ_NOREQUEST GOT_YOU_MORON |
7f1b1244 | 28 | #define IRQ_NOTHREAD GOT_YOU_MORON |
1ccb4e61 | 29 | #define IRQ_NOAUTOEN GOT_YOU_MORON |
1ccb4e61 | 30 | #define IRQ_NESTED_THREAD GOT_YOU_MORON |
31d9d9b6 | 31 | #define IRQ_PER_CPU_DEVID GOT_YOU_MORON |
b39898cd | 32 | #define IRQ_IS_POLLED GOT_YOU_MORON |
e9849777 | 33 | #define IRQ_DISABLE_UNLAZY GOT_YOU_MORON |
a005677b TG |
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 | { | |
0c6f8a8b TG |
40 | desc->status_use_accessors &= ~(clr & _IRQF_MODIFY_MASK); |
41 | desc->status_use_accessors |= (set & _IRQF_MODIFY_MASK); | |
a005677b TG |
42 | } |
43 | ||
44 | static inline bool irq_settings_is_per_cpu(struct irq_desc *desc) | |
45 | { | |
0c6f8a8b | 46 | return desc->status_use_accessors & _IRQ_PER_CPU; |
a005677b TG |
47 | } |
48 | ||
31d9d9b6 MZ |
49 | static inline bool irq_settings_is_per_cpu_devid(struct irq_desc *desc) |
50 | { | |
51 | return desc->status_use_accessors & _IRQ_PER_CPU_DEVID; | |
52 | } | |
53 | ||
a005677b TG |
54 | static inline void irq_settings_set_per_cpu(struct irq_desc *desc) |
55 | { | |
0c6f8a8b | 56 | desc->status_use_accessors |= _IRQ_PER_CPU; |
a005677b TG |
57 | } |
58 | ||
59 | static inline void irq_settings_set_no_balancing(struct irq_desc *desc) | |
60 | { | |
0c6f8a8b | 61 | desc->status_use_accessors |= _IRQ_NO_BALANCING; |
a005677b TG |
62 | } |
63 | ||
64 | static inline bool irq_settings_has_no_balance_set(struct irq_desc *desc) | |
65 | { | |
0c6f8a8b | 66 | return desc->status_use_accessors & _IRQ_NO_BALANCING; |
a005677b | 67 | } |
876dbd4c TG |
68 | |
69 | static inline u32 irq_settings_get_trigger_mask(struct irq_desc *desc) | |
70 | { | |
0c6f8a8b | 71 | return desc->status_use_accessors & IRQ_TYPE_SENSE_MASK; |
876dbd4c TG |
72 | } |
73 | ||
74 | static inline void | |
75 | irq_settings_set_trigger_mask(struct irq_desc *desc, u32 mask) | |
76 | { | |
0c6f8a8b TG |
77 | desc->status_use_accessors &= ~IRQ_TYPE_SENSE_MASK; |
78 | desc->status_use_accessors |= mask & IRQ_TYPE_SENSE_MASK; | |
876dbd4c TG |
79 | } |
80 | ||
81 | static inline bool irq_settings_is_level(struct irq_desc *desc) | |
82 | { | |
0c6f8a8b | 83 | return desc->status_use_accessors & _IRQ_LEVEL; |
876dbd4c TG |
84 | } |
85 | ||
86 | static inline void irq_settings_clr_level(struct irq_desc *desc) | |
87 | { | |
0c6f8a8b | 88 | desc->status_use_accessors &= ~_IRQ_LEVEL; |
876dbd4c TG |
89 | } |
90 | ||
91 | static inline void irq_settings_set_level(struct irq_desc *desc) | |
92 | { | |
0c6f8a8b | 93 | desc->status_use_accessors |= _IRQ_LEVEL; |
876dbd4c | 94 | } |
1ccb4e61 TG |
95 | |
96 | static inline bool irq_settings_can_request(struct irq_desc *desc) | |
97 | { | |
0c6f8a8b | 98 | return !(desc->status_use_accessors & _IRQ_NOREQUEST); |
1ccb4e61 TG |
99 | } |
100 | ||
101 | static inline void irq_settings_clr_norequest(struct irq_desc *desc) | |
102 | { | |
0c6f8a8b | 103 | desc->status_use_accessors &= ~_IRQ_NOREQUEST; |
1ccb4e61 TG |
104 | } |
105 | ||
106 | static inline void irq_settings_set_norequest(struct irq_desc *desc) | |
107 | { | |
0c6f8a8b | 108 | desc->status_use_accessors |= _IRQ_NOREQUEST; |
1ccb4e61 TG |
109 | } |
110 | ||
7f1b1244 PM |
111 | static inline bool irq_settings_can_thread(struct irq_desc *desc) |
112 | { | |
113 | 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 | desc->status_use_accessors |= _IRQ_NOTHREAD; | |
124 | } | |
125 | ||
1ccb4e61 TG |
126 | static inline bool irq_settings_can_probe(struct irq_desc *desc) |
127 | { | |
0c6f8a8b | 128 | return !(desc->status_use_accessors & _IRQ_NOPROBE); |
1ccb4e61 TG |
129 | } |
130 | ||
131 | static inline void irq_settings_clr_noprobe(struct irq_desc *desc) | |
132 | { | |
0c6f8a8b | 133 | desc->status_use_accessors &= ~_IRQ_NOPROBE; |
1ccb4e61 TG |
134 | } |
135 | ||
136 | static inline void irq_settings_set_noprobe(struct irq_desc *desc) | |
137 | { | |
0c6f8a8b | 138 | desc->status_use_accessors |= _IRQ_NOPROBE; |
1ccb4e61 TG |
139 | } |
140 | ||
141 | static inline bool irq_settings_can_move_pcntxt(struct irq_desc *desc) | |
142 | { | |
0c6f8a8b | 143 | return desc->status_use_accessors & _IRQ_MOVE_PCNTXT; |
1ccb4e61 TG |
144 | } |
145 | ||
146 | static inline bool irq_settings_can_autoenable(struct irq_desc *desc) | |
147 | { | |
0c6f8a8b | 148 | return !(desc->status_use_accessors & _IRQ_NOAUTOEN); |
1ccb4e61 TG |
149 | } |
150 | ||
151 | static inline bool irq_settings_is_nested_thread(struct irq_desc *desc) | |
152 | { | |
0c6f8a8b | 153 | return desc->status_use_accessors & _IRQ_NESTED_THREAD; |
1ccb4e61 | 154 | } |
b39898cd TG |
155 | |
156 | static inline bool irq_settings_is_polled(struct irq_desc *desc) | |
157 | { | |
158 | return desc->status_use_accessors & _IRQ_IS_POLLED; | |
159 | } | |
e9849777 TG |
160 | |
161 | static inline bool irq_settings_disable_unlazy(struct irq_desc *desc) | |
162 | { | |
163 | 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 | desc->status_use_accessors &= ~_IRQ_DISABLE_UNLAZY; | |
169 | } |