chip.c (7d94f7ca401dd7f445fda9a971a48aa5427b3e55) chip.c (cb5bc83225a86ca53bbb889ed8439e4fd6cf44ac)
1/*
2 * linux/kernel/irq/chip.c
3 *
4 * Copyright (C) 1992, 1998-2006 Linus Torvalds, Ingo Molnar
5 * Copyright (C) 2005-2006, Thomas Gleixner, Russell King
6 *
7 * This file contains the core interrupt handling code, for irq-chip
8 * based architectures.

--- 13 unchanged lines hidden (view full) ---

22 * dynamic_irq_init - initialize a dynamically allocated irq
23 * @irq: irq number to initialize
24 */
25void dynamic_irq_init(unsigned int irq)
26{
27 struct irq_desc *desc;
28 unsigned long flags;
29
1/*
2 * linux/kernel/irq/chip.c
3 *
4 * Copyright (C) 1992, 1998-2006 Linus Torvalds, Ingo Molnar
5 * Copyright (C) 2005-2006, Thomas Gleixner, Russell King
6 *
7 * This file contains the core interrupt handling code, for irq-chip
8 * based architectures.

--- 13 unchanged lines hidden (view full) ---

22 * dynamic_irq_init - initialize a dynamically allocated irq
23 * @irq: irq number to initialize
24 */
25void dynamic_irq_init(unsigned int irq)
26{
27 struct irq_desc *desc;
28 unsigned long flags;
29
30 desc = irq_to_desc(irq);
30 /* first time to use this irq_desc */
31 desc = irq_to_desc_alloc(irq);
31 if (!desc) {
32 WARN(1, KERN_ERR "Trying to initialize invalid IRQ%d\n", irq);
33 return;
34 }
35
36 /* Ensure we don't have left over values from a previous use of this irq */
37 spin_lock_irqsave(&desc->lock, flags);
38 desc->status = IRQ_DISABLED;

--- 16 unchanged lines hidden (view full) ---

55 * dynamic_irq_cleanup - cleanup a dynamically allocated irq
56 * @irq: irq number to initialize
57 */
58void dynamic_irq_cleanup(unsigned int irq)
59{
60 struct irq_desc *desc;
61 unsigned long flags;
62
32 if (!desc) {
33 WARN(1, KERN_ERR "Trying to initialize invalid IRQ%d\n", irq);
34 return;
35 }
36
37 /* Ensure we don't have left over values from a previous use of this irq */
38 spin_lock_irqsave(&desc->lock, flags);
39 desc->status = IRQ_DISABLED;

--- 16 unchanged lines hidden (view full) ---

56 * dynamic_irq_cleanup - cleanup a dynamically allocated irq
57 * @irq: irq number to initialize
58 */
59void dynamic_irq_cleanup(unsigned int irq)
60{
61 struct irq_desc *desc;
62 unsigned long flags;
63
63 desc = __irq_to_desc(irq);
64 desc = irq_to_desc(irq);
64 if (!desc) {
65 WARN(1, KERN_ERR "Trying to cleanup invalid IRQ%d\n", irq);
66 return;
67 }
68
69 spin_lock_irqsave(&desc->lock, flags);
70 if (desc->action) {
71 spin_unlock_irqrestore(&desc->lock, flags);

--- 15 unchanged lines hidden (view full) ---

87 * @irq: irq number
88 * @chip: pointer to irq chip description structure
89 */
90int set_irq_chip(unsigned int irq, struct irq_chip *chip)
91{
92 struct irq_desc *desc;
93 unsigned long flags;
94
65 if (!desc) {
66 WARN(1, KERN_ERR "Trying to cleanup invalid IRQ%d\n", irq);
67 return;
68 }
69
70 spin_lock_irqsave(&desc->lock, flags);
71 if (desc->action) {
72 spin_unlock_irqrestore(&desc->lock, flags);

--- 15 unchanged lines hidden (view full) ---

88 * @irq: irq number
89 * @chip: pointer to irq chip description structure
90 */
91int set_irq_chip(unsigned int irq, struct irq_chip *chip)
92{
93 struct irq_desc *desc;
94 unsigned long flags;
95
95 desc = __irq_to_desc(irq);
96 desc = irq_to_desc(irq);
96 if (!desc) {
97 WARN(1, KERN_ERR "Trying to install chip for IRQ%d\n", irq);
98 return -EINVAL;
99 }
100
101 if (!chip)
102 chip = &no_irq_chip;
103

--- 13 unchanged lines hidden (view full) ---

117 * @type: IRQ_TYPE_{LEVEL,EDGE}_* value - see include/linux/irq.h
118 */
119int set_irq_type(unsigned int irq, unsigned int type)
120{
121 struct irq_desc *desc;
122 unsigned long flags;
123 int ret = -ENXIO;
124
97 if (!desc) {
98 WARN(1, KERN_ERR "Trying to install chip for IRQ%d\n", irq);
99 return -EINVAL;
100 }
101
102 if (!chip)
103 chip = &no_irq_chip;
104

--- 13 unchanged lines hidden (view full) ---

118 * @type: IRQ_TYPE_{LEVEL,EDGE}_* value - see include/linux/irq.h
119 */
120int set_irq_type(unsigned int irq, unsigned int type)
121{
122 struct irq_desc *desc;
123 unsigned long flags;
124 int ret = -ENXIO;
125
125 desc = __irq_to_desc(irq);
126 desc = irq_to_desc(irq);
126 if (!desc) {
127 printk(KERN_ERR "Trying to set irq type for IRQ%d\n", irq);
128 return -ENODEV;
129 }
130
131 if (type == IRQ_TYPE_NONE)
132 return 0;
133

--- 11 unchanged lines hidden (view full) ---

145 *
146 * Set the hardware irq controller data for an irq
147 */
148int set_irq_data(unsigned int irq, void *data)
149{
150 struct irq_desc *desc;
151 unsigned long flags;
152
127 if (!desc) {
128 printk(KERN_ERR "Trying to set irq type for IRQ%d\n", irq);
129 return -ENODEV;
130 }
131
132 if (type == IRQ_TYPE_NONE)
133 return 0;
134

--- 11 unchanged lines hidden (view full) ---

146 *
147 * Set the hardware irq controller data for an irq
148 */
149int set_irq_data(unsigned int irq, void *data)
150{
151 struct irq_desc *desc;
152 unsigned long flags;
153
153 desc = __irq_to_desc(irq);
154 desc = irq_to_desc(irq);
154 if (!desc) {
155 printk(KERN_ERR
156 "Trying to install controller data for IRQ%d\n", irq);
157 return -EINVAL;
158 }
159
160 spin_lock_irqsave(&desc->lock, flags);
161 desc->handler_data = data;

--- 9 unchanged lines hidden (view full) ---

171 *
172 * Set the hardware irq controller data for an irq
173 */
174int set_irq_msi(unsigned int irq, struct msi_desc *entry)
175{
176 struct irq_desc *desc;
177 unsigned long flags;
178
155 if (!desc) {
156 printk(KERN_ERR
157 "Trying to install controller data for IRQ%d\n", irq);
158 return -EINVAL;
159 }
160
161 spin_lock_irqsave(&desc->lock, flags);
162 desc->handler_data = data;

--- 9 unchanged lines hidden (view full) ---

172 *
173 * Set the hardware irq controller data for an irq
174 */
175int set_irq_msi(unsigned int irq, struct msi_desc *entry)
176{
177 struct irq_desc *desc;
178 unsigned long flags;
179
179 desc = __irq_to_desc(irq);
180 desc = irq_to_desc(irq);
180 if (!desc) {
181 printk(KERN_ERR
182 "Trying to install msi data for IRQ%d\n", irq);
183 return -EINVAL;
184 }
185
186 spin_lock_irqsave(&desc->lock, flags);
187 desc->msi_desc = entry;

--- 10 unchanged lines hidden (view full) ---

198 *
199 * Set the hardware irq chip data for an irq
200 */
201int set_irq_chip_data(unsigned int irq, void *data)
202{
203 struct irq_desc *desc;
204 unsigned long flags;
205
181 if (!desc) {
182 printk(KERN_ERR
183 "Trying to install msi data for IRQ%d\n", irq);
184 return -EINVAL;
185 }
186
187 spin_lock_irqsave(&desc->lock, flags);
188 desc->msi_desc = entry;

--- 10 unchanged lines hidden (view full) ---

199 *
200 * Set the hardware irq chip data for an irq
201 */
202int set_irq_chip_data(unsigned int irq, void *data)
203{
204 struct irq_desc *desc;
205 unsigned long flags;
206
206 desc = __irq_to_desc(irq);
207 desc = irq_to_desc(irq);
207 if (!desc) {
208 printk(KERN_ERR
209 "Trying to install chip data for IRQ%d\n", irq);
210 return -EINVAL;
211 }
212
213 if (!desc->chip) {
214 printk(KERN_ERR "BUG: bad set_irq_chip_data(IRQ#%d)\n", irq);

--- 334 unchanged lines hidden (view full) ---

549
550void
551__set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained,
552 const char *name)
553{
554 struct irq_desc *desc;
555 unsigned long flags;
556
208 if (!desc) {
209 printk(KERN_ERR
210 "Trying to install chip data for IRQ%d\n", irq);
211 return -EINVAL;
212 }
213
214 if (!desc->chip) {
215 printk(KERN_ERR "BUG: bad set_irq_chip_data(IRQ#%d)\n", irq);

--- 334 unchanged lines hidden (view full) ---

550
551void
552__set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained,
553 const char *name)
554{
555 struct irq_desc *desc;
556 unsigned long flags;
557
557 desc = __irq_to_desc(irq);
558 desc = irq_to_desc(irq);
558 if (!desc) {
559 printk(KERN_ERR
560 "Trying to install type control for IRQ%d\n", irq);
561 return;
562 }
563
564 if (!handle)
565 handle = handle_bad_irq;

--- 47 unchanged lines hidden (view full) ---

613 __set_irq_handler(irq, handle, 0, name);
614}
615
616void __init set_irq_noprobe(unsigned int irq)
617{
618 struct irq_desc *desc;
619 unsigned long flags;
620
559 if (!desc) {
560 printk(KERN_ERR
561 "Trying to install type control for IRQ%d\n", irq);
562 return;
563 }
564
565 if (!handle)
566 handle = handle_bad_irq;

--- 47 unchanged lines hidden (view full) ---

614 __set_irq_handler(irq, handle, 0, name);
615}
616
617void __init set_irq_noprobe(unsigned int irq)
618{
619 struct irq_desc *desc;
620 unsigned long flags;
621
621 desc = __irq_to_desc(irq);
622 desc = irq_to_desc(irq);
622 if (!desc) {
623 printk(KERN_ERR "Trying to mark IRQ%d non-probeable\n", irq);
624
625 return;
626 }
627
628 spin_lock_irqsave(&desc->lock, flags);
629 desc->status |= IRQ_NOPROBE;
630 spin_unlock_irqrestore(&desc->lock, flags);
631}
632
633void __init set_irq_probe(unsigned int irq)
634{
635 struct irq_desc *desc;
636 unsigned long flags;
637
623 if (!desc) {
624 printk(KERN_ERR "Trying to mark IRQ%d non-probeable\n", irq);
625
626 return;
627 }
628
629 spin_lock_irqsave(&desc->lock, flags);
630 desc->status |= IRQ_NOPROBE;
631 spin_unlock_irqrestore(&desc->lock, flags);
632}
633
634void __init set_irq_probe(unsigned int irq)
635{
636 struct irq_desc *desc;
637 unsigned long flags;
638
638 desc = __irq_to_desc(irq);
639 desc = irq_to_desc(irq);
639 if (!desc) {
640 printk(KERN_ERR "Trying to mark IRQ%d probeable\n", irq);
641
642 return;
643 }
644
645 spin_lock_irqsave(&desc->lock, flags);
646 desc->status &= ~IRQ_NOPROBE;
647 spin_unlock_irqrestore(&desc->lock, flags);
648}
640 if (!desc) {
641 printk(KERN_ERR "Trying to mark IRQ%d probeable\n", irq);
642
643 return;
644 }
645
646 spin_lock_irqsave(&desc->lock, flags);
647 desc->status &= ~IRQ_NOPROBE;
648 spin_unlock_irqrestore(&desc->lock, flags);
649}