xref: /linux/kernel/irq/manage.c (revision 5e8d780d745c1619aba81fe7166c5a4b5cad2b84)
1 /*
2  * linux/kernel/irq/manage.c
3  *
4  * Copyright (C) 1992, 1998-2006 Linus Torvalds, Ingo Molnar
5  * Copyright (C) 2005-2006 Thomas Gleixner
6  *
7  * This file contains driver APIs to the irq subsystem.
8  */
9 
10 #include <linux/config.h>
11 #include <linux/irq.h>
12 #include <linux/module.h>
13 #include <linux/random.h>
14 #include <linux/interrupt.h>
15 
16 #include "internals.h"
17 
18 #ifdef CONFIG_SMP
19 
20 /**
21  *	synchronize_irq - wait for pending IRQ handlers (on other CPUs)
22  *	@irq: interrupt number to wait for
23  *
24  *	This function waits for any pending IRQ handlers for this interrupt
25  *	to complete before returning. If you use this function while
26  *	holding a resource the IRQ handler may need you will deadlock.
27  *
28  *	This function may be called - with care - from IRQ context.
29  */
30 void synchronize_irq(unsigned int irq)
31 {
32 	struct irq_desc *desc = irq_desc + irq;
33 
34 	if (irq >= NR_IRQS)
35 		return;
36 
37 	while (desc->status & IRQ_INPROGRESS)
38 		cpu_relax();
39 }
40 EXPORT_SYMBOL(synchronize_irq);
41 
42 #endif
43 
44 /**
45  *	disable_irq_nosync - disable an irq without waiting
46  *	@irq: Interrupt to disable
47  *
48  *	Disable the selected interrupt line.  Disables and Enables are
49  *	nested.
50  *	Unlike disable_irq(), this function does not ensure existing
51  *	instances of the IRQ handler have completed before returning.
52  *
53  *	This function may be called from IRQ context.
54  */
55 void disable_irq_nosync(unsigned int irq)
56 {
57 	struct irq_desc *desc = irq_desc + irq;
58 	unsigned long flags;
59 
60 	if (irq >= NR_IRQS)
61 		return;
62 
63 	spin_lock_irqsave(&desc->lock, flags);
64 	if (!desc->depth++) {
65 		desc->status |= IRQ_DISABLED;
66 		desc->chip->disable(irq);
67 	}
68 	spin_unlock_irqrestore(&desc->lock, flags);
69 }
70 EXPORT_SYMBOL(disable_irq_nosync);
71 
72 /**
73  *	disable_irq - disable an irq and wait for completion
74  *	@irq: Interrupt to disable
75  *
76  *	Disable the selected interrupt line.  Enables and Disables are
77  *	nested.
78  *	This function waits for any pending IRQ handlers for this interrupt
79  *	to complete before returning. If you use this function while
80  *	holding a resource the IRQ handler may need you will deadlock.
81  *
82  *	This function may be called - with care - from IRQ context.
83  */
84 void disable_irq(unsigned int irq)
85 {
86 	struct irq_desc *desc = irq_desc + irq;
87 
88 	if (irq >= NR_IRQS)
89 		return;
90 
91 	disable_irq_nosync(irq);
92 	if (desc->action)
93 		synchronize_irq(irq);
94 }
95 EXPORT_SYMBOL(disable_irq);
96 
97 /**
98  *	enable_irq - enable handling of an irq
99  *	@irq: Interrupt to enable
100  *
101  *	Undoes the effect of one call to disable_irq().  If this
102  *	matches the last disable, processing of interrupts on this
103  *	IRQ line is re-enabled.
104  *
105  *	This function may be called from IRQ context.
106  */
107 void enable_irq(unsigned int irq)
108 {
109 	struct irq_desc *desc = irq_desc + irq;
110 	unsigned long flags;
111 
112 	if (irq >= NR_IRQS)
113 		return;
114 
115 	spin_lock_irqsave(&desc->lock, flags);
116 	switch (desc->depth) {
117 	case 0:
118 		printk(KERN_WARNING "Unablanced enable_irq(%d)\n", irq);
119 		WARN_ON(1);
120 		break;
121 	case 1: {
122 		unsigned int status = desc->status & ~IRQ_DISABLED;
123 
124 		/* Prevent probing on this irq: */
125 		desc->status = status | IRQ_NOPROBE;
126 		check_irq_resend(desc, irq);
127 		/* fall-through */
128 	}
129 	default:
130 		desc->depth--;
131 	}
132 	spin_unlock_irqrestore(&desc->lock, flags);
133 }
134 EXPORT_SYMBOL(enable_irq);
135 
136 /**
137  *	set_irq_wake - control irq power management wakeup
138  *	@irq:	interrupt to control
139  *	@on:	enable/disable power management wakeup
140  *
141  *	Enable/disable power management wakeup mode
142  */
143 int set_irq_wake(unsigned int irq, unsigned int on)
144 {
145 	struct irq_desc *desc = irq_desc + irq;
146 	unsigned long flags;
147 	int ret = -ENXIO;
148 
149 	spin_lock_irqsave(&desc->lock, flags);
150 	if (desc->chip->set_wake)
151 		ret = desc->chip->set_wake(irq, on);
152 	spin_unlock_irqrestore(&desc->lock, flags);
153 	return ret;
154 }
155 EXPORT_SYMBOL(set_irq_wake);
156 
157 /*
158  * Internal function that tells the architecture code whether a
159  * particular irq has been exclusively allocated or is available
160  * for driver use.
161  */
162 int can_request_irq(unsigned int irq, unsigned long irqflags)
163 {
164 	struct irqaction *action;
165 
166 	if (irq >= NR_IRQS || irq_desc[irq].status & IRQ_NOREQUEST)
167 		return 0;
168 
169 	action = irq_desc[irq].action;
170 	if (action)
171 		if (irqflags & action->flags & SA_SHIRQ)
172 			action = NULL;
173 
174 	return !action;
175 }
176 
177 void compat_irq_chip_set_default_handler(struct irq_desc *desc)
178 {
179 	/*
180 	 * If the architecture still has not overriden
181 	 * the flow handler then zap the default. This
182 	 * should catch incorrect flow-type setting.
183 	 */
184 	if (desc->handle_irq == &handle_bad_irq)
185 		desc->handle_irq = NULL;
186 }
187 
188 /*
189  * Internal function to register an irqaction - typically used to
190  * allocate special interrupts that are part of the architecture.
191  */
192 int setup_irq(unsigned int irq, struct irqaction *new)
193 {
194 	struct irq_desc *desc = irq_desc + irq;
195 	struct irqaction *old, **p;
196 	unsigned long flags;
197 	int shared = 0;
198 
199 	if (irq >= NR_IRQS)
200 		return -EINVAL;
201 
202 	if (desc->chip == &no_irq_chip)
203 		return -ENOSYS;
204 	/*
205 	 * Some drivers like serial.c use request_irq() heavily,
206 	 * so we have to be careful not to interfere with a
207 	 * running system.
208 	 */
209 	if (new->flags & SA_SAMPLE_RANDOM) {
210 		/*
211 		 * This function might sleep, we want to call it first,
212 		 * outside of the atomic block.
213 		 * Yes, this might clear the entropy pool if the wrong
214 		 * driver is attempted to be loaded, without actually
215 		 * installing a new handler, but is this really a problem,
216 		 * only the sysadmin is able to do this.
217 		 */
218 		rand_initialize_irq(irq);
219 	}
220 
221 	/*
222 	 * The following block of code has to be executed atomically
223 	 */
224 	spin_lock_irqsave(&desc->lock, flags);
225 	p = &desc->action;
226 	old = *p;
227 	if (old) {
228 		/*
229 		 * Can't share interrupts unless both agree to and are
230 		 * the same type (level, edge, polarity). So both flag
231 		 * fields must have SA_SHIRQ set and the bits which
232 		 * set the trigger type must match.
233 		 */
234 		if (!((old->flags & new->flags) & SA_SHIRQ) ||
235 		    ((old->flags ^ new->flags) & SA_TRIGGER_MASK))
236 			goto mismatch;
237 
238 #if defined(CONFIG_IRQ_PER_CPU) && defined(SA_PERCPU_IRQ)
239 		/* All handlers must agree on per-cpuness */
240 		if ((old->flags & IRQ_PER_CPU) != (new->flags & IRQ_PER_CPU))
241 			goto mismatch;
242 #endif
243 
244 		/* add new interrupt at end of irq queue */
245 		do {
246 			p = &old->next;
247 			old = *p;
248 		} while (old);
249 		shared = 1;
250 	}
251 
252 	*p = new;
253 #if defined(CONFIG_IRQ_PER_CPU) && defined(SA_PERCPU_IRQ)
254 	if (new->flags & SA_PERCPU_IRQ)
255 		desc->status |= IRQ_PER_CPU;
256 #endif
257 	if (!shared) {
258 		irq_chip_set_defaults(desc->chip);
259 
260 		/* Setup the type (level, edge polarity) if configured: */
261 		if (new->flags & SA_TRIGGER_MASK) {
262 			if (desc->chip && desc->chip->set_type)
263 				desc->chip->set_type(irq,
264 						new->flags & SA_TRIGGER_MASK);
265 			else
266 				/*
267 				 * SA_TRIGGER_* but the PIC does not support
268 				 * multiple flow-types?
269 				 */
270 				printk(KERN_WARNING "setup_irq(%d) SA_TRIGGER"
271 				       "set. No set_type function available\n",
272 				       irq);
273 		} else
274 			compat_irq_chip_set_default_handler(desc);
275 
276 		desc->status &= ~(IRQ_AUTODETECT | IRQ_WAITING |
277 				  IRQ_INPROGRESS);
278 
279 		if (!(desc->status & IRQ_NOAUTOEN)) {
280 			desc->depth = 0;
281 			desc->status &= ~IRQ_DISABLED;
282 			if (desc->chip->startup)
283 				desc->chip->startup(irq);
284 			else
285 				desc->chip->enable(irq);
286 		} else
287 			/* Undo nested disables: */
288 			desc->depth = 1;
289 	}
290 	spin_unlock_irqrestore(&desc->lock, flags);
291 
292 	new->irq = irq;
293 	register_irq_proc(irq);
294 	new->dir = NULL;
295 	register_handler_proc(irq, new);
296 
297 	return 0;
298 
299 mismatch:
300 	spin_unlock_irqrestore(&desc->lock, flags);
301 	if (!(new->flags & SA_PROBEIRQ)) {
302 		printk(KERN_ERR "%s: irq handler mismatch\n", __FUNCTION__);
303 		dump_stack();
304 	}
305 	return -EBUSY;
306 }
307 
308 /**
309  *	free_irq - free an interrupt
310  *	@irq: Interrupt line to free
311  *	@dev_id: Device identity to free
312  *
313  *	Remove an interrupt handler. The handler is removed and if the
314  *	interrupt line is no longer in use by any driver it is disabled.
315  *	On a shared IRQ the caller must ensure the interrupt is disabled
316  *	on the card it drives before calling this function. The function
317  *	does not return until any executing interrupts for this IRQ
318  *	have completed.
319  *
320  *	This function must not be called from interrupt context.
321  */
322 void free_irq(unsigned int irq, void *dev_id)
323 {
324 	struct irq_desc *desc;
325 	struct irqaction **p;
326 	unsigned long flags;
327 
328 	WARN_ON(in_interrupt());
329 	if (irq >= NR_IRQS)
330 		return;
331 
332 	desc = irq_desc + irq;
333 	spin_lock_irqsave(&desc->lock, flags);
334 	p = &desc->action;
335 	for (;;) {
336 		struct irqaction *action = *p;
337 
338 		if (action) {
339 			struct irqaction **pp = p;
340 
341 			p = &action->next;
342 			if (action->dev_id != dev_id)
343 				continue;
344 
345 			/* Found it - now remove it from the list of entries */
346 			*pp = action->next;
347 
348 			/* Currently used only by UML, might disappear one day.*/
349 #ifdef CONFIG_IRQ_RELEASE_METHOD
350 			if (desc->chip->release)
351 				desc->chip->release(irq, dev_id);
352 #endif
353 
354 			if (!desc->action) {
355 				desc->status |= IRQ_DISABLED;
356 				if (desc->chip->shutdown)
357 					desc->chip->shutdown(irq);
358 				else
359 					desc->chip->disable(irq);
360 			}
361 			spin_unlock_irqrestore(&desc->lock, flags);
362 			unregister_handler_proc(irq, action);
363 
364 			/* Make sure it's not being used on another CPU */
365 			synchronize_irq(irq);
366 			kfree(action);
367 			return;
368 		}
369 		printk(KERN_ERR "Trying to free free IRQ%d\n", irq);
370 		spin_unlock_irqrestore(&desc->lock, flags);
371 		return;
372 	}
373 }
374 EXPORT_SYMBOL(free_irq);
375 
376 /**
377  *	request_irq - allocate an interrupt line
378  *	@irq: Interrupt line to allocate
379  *	@handler: Function to be called when the IRQ occurs
380  *	@irqflags: Interrupt type flags
381  *	@devname: An ascii name for the claiming device
382  *	@dev_id: A cookie passed back to the handler function
383  *
384  *	This call allocates interrupt resources and enables the
385  *	interrupt line and IRQ handling. From the point this
386  *	call is made your handler function may be invoked. Since
387  *	your handler function must clear any interrupt the board
388  *	raises, you must take care both to initialise your hardware
389  *	and to set up the interrupt handler in the right order.
390  *
391  *	Dev_id must be globally unique. Normally the address of the
392  *	device data structure is used as the cookie. Since the handler
393  *	receives this value it makes sense to use it.
394  *
395  *	If your interrupt is shared you must pass a non NULL dev_id
396  *	as this is required when freeing the interrupt.
397  *
398  *	Flags:
399  *
400  *	SA_SHIRQ		Interrupt is shared
401  *	SA_INTERRUPT		Disable local interrupts while processing
402  *	SA_SAMPLE_RANDOM	The interrupt can be used for entropy
403  *
404  */
405 int request_irq(unsigned int irq,
406 		irqreturn_t (*handler)(int, void *, struct pt_regs *),
407 		unsigned long irqflags, const char *devname, void *dev_id)
408 {
409 	struct irqaction *action;
410 	int retval;
411 
412 	/*
413 	 * Sanity-check: shared interrupts must pass in a real dev-ID,
414 	 * otherwise we'll have trouble later trying to figure out
415 	 * which interrupt is which (messes up the interrupt freeing
416 	 * logic etc).
417 	 */
418 	if ((irqflags & SA_SHIRQ) && !dev_id)
419 		return -EINVAL;
420 	if (irq >= NR_IRQS)
421 		return -EINVAL;
422 	if (irq_desc[irq].status & IRQ_NOREQUEST)
423 		return -EINVAL;
424 	if (!handler)
425 		return -EINVAL;
426 
427 	action = kmalloc(sizeof(struct irqaction), GFP_ATOMIC);
428 	if (!action)
429 		return -ENOMEM;
430 
431 	action->handler = handler;
432 	action->flags = irqflags;
433 	cpus_clear(action->mask);
434 	action->name = devname;
435 	action->next = NULL;
436 	action->dev_id = dev_id;
437 
438 	select_smp_affinity(irq);
439 
440 	retval = setup_irq(irq, action);
441 	if (retval)
442 		kfree(action);
443 
444 	return retval;
445 }
446 EXPORT_SYMBOL(request_irq);
447 
448