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