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} |