| 1 | |
| 2 | |
| 3 | * Copyright (C) 1992, 1998-2006 Linus Torvalds, Ingo Molnar
|
| 4 | * Copyright (C) 2005-2006, Thomas Gleixner, Russell King
|
| 5 | *
|
| 6 | * This file contains the dummy interrupt chip implementation
|
| 7 |
|
| 8 | #include <linux/interrupt.h>
|
| 9 | #include <linux/irq.h>
|
| 10 | #include <linux/export.h>
|
| 11 |
|
| 12 | #include "internals.h"
|
| 13 |
|
| 14 | |
| 15 | * What should we do if we get a hw irq event on an illegal vector?
|
| 16 | * Each architecture has to answer this themselves.
|
| 17 |
|
| 18 | static void ack_bad(struct irq_data *data)
|
| 19 | {
|
| 20 | struct irq_desc *desc = irq_data_to_desc(data);
|
| 21 |
|
| 22 | print_irq_desc(data->irq, desc);
|
| 23 | ack_bad_irq(data->irq);
|
| 24 | }
|
| 25 |
|
| 26 | |
| 27 | * NOP functions
|
| 28 |
|
| 29 | static void noop(struct irq_data *data) { }
|
| 30 |
|
| 31 | static unsigned int noop_ret(struct irq_data *data)
|
| 32 | {
|
| 33 | return 0;
|
| 34 | }
|
| 35 |
|
| 36 | |
| 37 | * Generic no controller implementation
|
| 38 |
|
| 39 | struct irq_chip no_irq_chip = {
|
| 40 | .name = "none",
|
| 41 | .irq_startup = noop_ret,
|
| 42 | .irq_shutdown = noop,
|
| 43 | .irq_enable = noop,
|
| 44 | .irq_disable = noop,
|
| 45 | .irq_ack = ack_bad,
|
| 46 | .flags = IRQCHIP_SKIP_SET_WAKE,
|
| 47 | };
|
| 48 |
|
| 49 | |
| 50 | * Generic dummy implementation which can be used for
|
| 51 | * real dumb interrupt sources
|
| 52 |
|
| 53 | struct irq_chip dummy_irq_chip = {
|
| 54 | .name = "dummy",
|
| 55 | .irq_startup = noop_ret,
|
| 56 | .irq_shutdown = noop,
|
| 57 | .irq_enable = noop,
|
| 58 | .irq_disable = noop,
|
| 59 | .irq_ack = noop,
|
| 60 | .irq_mask = noop,
|
| 61 | .irq_unmask = noop,
|
| 62 | .flags = IRQCHIP_SKIP_SET_WAKE,
|
| 63 | };
|
| 64 | EXPORT_SYMBOL_GPL(dummy_irq_chip);
|