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