aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2006-06-29 05:24:36 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-06-29 13:26:21 -0400
commitd1bef4ed5faf7d9872337b33c4269e45ae1bf960 (patch)
treea88c58e3102396382e9137a25a884af14421f6a6 /drivers
parentcfb9e32f2ff32ef5265c1c80fe68dd1a7f03a604 (diff)
[PATCH] genirq: rename desc->handler to desc->chip
This patch-queue improves the generic IRQ layer to be truly generic, by adding various abstractions and features to it, without impacting existing functionality. While the queue can be best described as "fix and improve everything in the generic IRQ layer that we could think of", and thus it consists of many smaller features and lots of cleanups, the one feature that stands out most is the new 'irq chip' abstraction. The irq-chip abstraction is about describing and coding and IRQ controller driver by mapping its raw hardware capabilities [and quirks, if needed] in a straightforward way, without having to think about "IRQ flow" (level/edge/etc.) type of details. This stands in contrast with the current 'irq-type' model of genirq architectures, which 'mixes' raw hardware capabilities with 'flow' details. The patchset supports both types of irq controller designs at once, and converts i386 and x86_64 to the new irq-chip design. As a bonus side-effect of the irq-chip approach, chained interrupt controllers (master/slave PIC constructs, etc.) are now supported by design as well. The end result of this patchset intends to be simpler architecture-level code and more consolidation between architectures. We reused many bits of code and many concepts from Russell King's ARM IRQ layer, the merging of which was one of the motivations for this patchset. This patch: rename desc->handler to desc->chip. Originally i did not want to do this, because it's a big patch. But having both "desc->handler", "desc->handle_irq" and "action->handler" caused a large degree of confusion and made the code appear alot less clean than it truly is. I have also attempted a dual approach as well by introducing a desc->chip alias - but that just wasnt robust enough and broke frequently. So lets get over with this quickly. The conversion was done automatically via scripts and converts all the code in the kernel. This renaming patch is the first one amongst the patches, so that the remaining patches can stay flexible and can be merged and split up without having some big monolithic patch act as a merge barrier. [akpm@osdl.org: build fix] [akpm@osdl.org: another build fix] Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/char/vr41xx_giu.c4
-rw-r--r--drivers/parisc/dino.c4
-rw-r--r--drivers/parisc/eisa.c2
-rw-r--r--drivers/parisc/gsc.c8
-rw-r--r--drivers/parisc/iosapic.c2
-rw-r--r--drivers/parisc/superio.c2
-rw-r--r--drivers/pci/msi.c6
-rw-r--r--drivers/pcmcia/hd64465_ss.c6
8 files changed, 17 insertions, 17 deletions
diff --git a/drivers/char/vr41xx_giu.c b/drivers/char/vr41xx_giu.c
index 05e6e814d86f..073da48c092e 100644
--- a/drivers/char/vr41xx_giu.c
+++ b/drivers/char/vr41xx_giu.c
@@ -689,9 +689,9 @@ static int __devinit giu_probe(struct platform_device *dev)
689 689
690 for (i = GIU_IRQ_BASE; i <= GIU_IRQ_LAST; i++) { 690 for (i = GIU_IRQ_BASE; i <= GIU_IRQ_LAST; i++) {
691 if (i < GIU_IRQ(GIUINT_HIGH_OFFSET)) 691 if (i < GIU_IRQ(GIUINT_HIGH_OFFSET))
692 irq_desc[i].handler = &giuint_low_irq_type; 692 irq_desc[i].chip = &giuint_low_irq_type;
693 else 693 else
694 irq_desc[i].handler = &giuint_high_irq_type; 694 irq_desc[i].chip = &giuint_high_irq_type;
695 } 695 }
696 696
697 return cascade_irq(GIUINT_IRQ, giu_get_irq); 697 return cascade_irq(GIUINT_IRQ, giu_get_irq);
diff --git a/drivers/parisc/dino.c b/drivers/parisc/dino.c
index 6e8ed0c81a6c..ce0a6ebcff15 100644
--- a/drivers/parisc/dino.c
+++ b/drivers/parisc/dino.c
@@ -299,7 +299,7 @@ struct pci_port_ops dino_port_ops = {
299 299
300static void dino_disable_irq(unsigned int irq) 300static void dino_disable_irq(unsigned int irq)
301{ 301{
302 struct dino_device *dino_dev = irq_desc[irq].handler_data; 302 struct dino_device *dino_dev = irq_desc[irq].chip_data;
303 int local_irq = gsc_find_local_irq(irq, dino_dev->global_irq, DINO_LOCAL_IRQS); 303 int local_irq = gsc_find_local_irq(irq, dino_dev->global_irq, DINO_LOCAL_IRQS);
304 304
305 DBG(KERN_WARNING "%s(0x%p, %d)\n", __FUNCTION__, dino_dev, irq); 305 DBG(KERN_WARNING "%s(0x%p, %d)\n", __FUNCTION__, dino_dev, irq);
@@ -311,7 +311,7 @@ static void dino_disable_irq(unsigned int irq)
311 311
312static void dino_enable_irq(unsigned int irq) 312static void dino_enable_irq(unsigned int irq)
313{ 313{
314 struct dino_device *dino_dev = irq_desc[irq].handler_data; 314 struct dino_device *dino_dev = irq_desc[irq].chip_data;
315 int local_irq = gsc_find_local_irq(irq, dino_dev->global_irq, DINO_LOCAL_IRQS); 315 int local_irq = gsc_find_local_irq(irq, dino_dev->global_irq, DINO_LOCAL_IRQS);
316 u32 tmp; 316 u32 tmp;
317 317
diff --git a/drivers/parisc/eisa.c b/drivers/parisc/eisa.c
index 9d3bd15bf53b..58f0ce8d78e0 100644
--- a/drivers/parisc/eisa.c
+++ b/drivers/parisc/eisa.c
@@ -350,7 +350,7 @@ static int __devinit eisa_probe(struct parisc_device *dev)
350 irq_desc[2].action = &irq2_action; 350 irq_desc[2].action = &irq2_action;
351 351
352 for (i = 0; i < 16; i++) { 352 for (i = 0; i < 16; i++) {
353 irq_desc[i].handler = &eisa_interrupt_type; 353 irq_desc[i].chip = &eisa_interrupt_type;
354 } 354 }
355 355
356 EISA_bus = 1; 356 EISA_bus = 1;
diff --git a/drivers/parisc/gsc.c b/drivers/parisc/gsc.c
index 16d40f95978d..5476ba7709b3 100644
--- a/drivers/parisc/gsc.c
+++ b/drivers/parisc/gsc.c
@@ -109,7 +109,7 @@ int gsc_find_local_irq(unsigned int irq, int *global_irqs, int limit)
109 109
110static void gsc_asic_disable_irq(unsigned int irq) 110static void gsc_asic_disable_irq(unsigned int irq)
111{ 111{
112 struct gsc_asic *irq_dev = irq_desc[irq].handler_data; 112 struct gsc_asic *irq_dev = irq_desc[irq].chip_data;
113 int local_irq = gsc_find_local_irq(irq, irq_dev->global_irq, 32); 113 int local_irq = gsc_find_local_irq(irq, irq_dev->global_irq, 32);
114 u32 imr; 114 u32 imr;
115 115
@@ -124,7 +124,7 @@ static void gsc_asic_disable_irq(unsigned int irq)
124 124
125static void gsc_asic_enable_irq(unsigned int irq) 125static void gsc_asic_enable_irq(unsigned int irq)
126{ 126{
127 struct gsc_asic *irq_dev = irq_desc[irq].handler_data; 127 struct gsc_asic *irq_dev = irq_desc[irq].chip_data;
128 int local_irq = gsc_find_local_irq(irq, irq_dev->global_irq, 32); 128 int local_irq = gsc_find_local_irq(irq, irq_dev->global_irq, 32);
129 u32 imr; 129 u32 imr;
130 130
@@ -164,8 +164,8 @@ int gsc_assign_irq(struct hw_interrupt_type *type, void *data)
164 if (irq > GSC_IRQ_MAX) 164 if (irq > GSC_IRQ_MAX)
165 return NO_IRQ; 165 return NO_IRQ;
166 166
167 irq_desc[irq].handler = type; 167 irq_desc[irq].chip = type;
168 irq_desc[irq].handler_data = data; 168 irq_desc[irq].chip_data = data;
169 return irq++; 169 return irq++;
170} 170}
171 171
diff --git a/drivers/parisc/iosapic.c b/drivers/parisc/iosapic.c
index 7a458d5bc751..1fbda77cefc2 100644
--- a/drivers/parisc/iosapic.c
+++ b/drivers/parisc/iosapic.c
@@ -619,7 +619,7 @@ iosapic_set_irt_data( struct vector_info *vi, u32 *dp0, u32 *dp1)
619 619
620static struct vector_info *iosapic_get_vector(unsigned int irq) 620static struct vector_info *iosapic_get_vector(unsigned int irq)
621{ 621{
622 return irq_desc[irq].handler_data; 622 return irq_desc[irq].chip_data;
623} 623}
624 624
625static void iosapic_disable_irq(unsigned int irq) 625static void iosapic_disable_irq(unsigned int irq)
diff --git a/drivers/parisc/superio.c b/drivers/parisc/superio.c
index 828eb45062de..a988dc7a9abd 100644
--- a/drivers/parisc/superio.c
+++ b/drivers/parisc/superio.c
@@ -360,7 +360,7 @@ int superio_fixup_irq(struct pci_dev *pcidev)
360#endif 360#endif
361 361
362 for (i = 0; i < 16; i++) { 362 for (i = 0; i < 16; i++) {
363 irq_desc[i].handler = &superio_interrupt_type; 363 irq_desc[i].chip = &superio_interrupt_type;
364 } 364 }
365 365
366 /* 366 /*
diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
index 7f8429284fab..76d023d8a33b 100644
--- a/drivers/pci/msi.c
+++ b/drivers/pci/msi.c
@@ -429,12 +429,12 @@ static void irq_handler_init(int cap_id, int pos, int mask)
429 429
430 spin_lock_irqsave(&irq_desc[pos].lock, flags); 430 spin_lock_irqsave(&irq_desc[pos].lock, flags);
431 if (cap_id == PCI_CAP_ID_MSIX) 431 if (cap_id == PCI_CAP_ID_MSIX)
432 irq_desc[pos].handler = &msix_irq_type; 432 irq_desc[pos].chip = &msix_irq_type;
433 else { 433 else {
434 if (!mask) 434 if (!mask)
435 irq_desc[pos].handler = &msi_irq_wo_maskbit_type; 435 irq_desc[pos].chip = &msi_irq_wo_maskbit_type;
436 else 436 else
437 irq_desc[pos].handler = &msi_irq_w_maskbit_type; 437 irq_desc[pos].chip = &msi_irq_w_maskbit_type;
438 } 438 }
439 spin_unlock_irqrestore(&irq_desc[pos].lock, flags); 439 spin_unlock_irqrestore(&irq_desc[pos].lock, flags);
440} 440}
diff --git a/drivers/pcmcia/hd64465_ss.c b/drivers/pcmcia/hd64465_ss.c
index b39435bbfaeb..c662e4f89d46 100644
--- a/drivers/pcmcia/hd64465_ss.c
+++ b/drivers/pcmcia/hd64465_ss.c
@@ -244,8 +244,8 @@ static void hs_map_irq(hs_socket_t *sp, unsigned int irq)
244 244
245 hs_mapped_irq[irq].sock = sp; 245 hs_mapped_irq[irq].sock = sp;
246 /* insert ourselves as the irq controller */ 246 /* insert ourselves as the irq controller */
247 hs_mapped_irq[irq].old_handler = irq_desc[irq].handler; 247 hs_mapped_irq[irq].old_handler = irq_desc[irq].chip;
248 irq_desc[irq].handler = &hd64465_ss_irq_type; 248 irq_desc[irq].chip = &hd64465_ss_irq_type;
249} 249}
250 250
251 251
@@ -260,7 +260,7 @@ static void hs_unmap_irq(hs_socket_t *sp, unsigned int irq)
260 return; 260 return;
261 261
262 /* restore the original irq controller */ 262 /* restore the original irq controller */
263 irq_desc[irq].handler = hs_mapped_irq[irq].old_handler; 263 irq_desc[irq].chip = hs_mapped_irq[irq].old_handler;
264} 264}
265 265
266/*============================================================*/ 266/*============================================================*/