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. 9 * 10 * Detailed information is available in Documentation/DocBook/genericirq 11 */ 12 13 #include <linux/irq.h> 14 #include <linux/msi.h> 15 #include <linux/module.h> 16 #include <linux/interrupt.h> 17 #include <linux/kernel_stat.h> 18 19 #include "internals.h" 20 21 /** 22 * dynamic_irq_init - initialize a dynamically allocated irq 23 * @irq: irq number to initialize 24 */ 25 void dynamic_irq_init(unsigned int irq) 26 { 27 struct irq_desc *desc; 28 unsigned long flags; 29 30 desc = irq_to_desc(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; 39 desc->chip = &no_irq_chip; 40 desc->handle_irq = handle_bad_irq; 41 desc->depth = 1; 42 desc->msi_desc = NULL; 43 desc->handler_data = NULL; 44 desc->chip_data = NULL; 45 desc->action = NULL; 46 desc->irq_count = 0; 47 desc->irqs_unhandled = 0; 48 #ifdef CONFIG_SMP 49 cpumask_setall(&desc->affinity); 50 #endif 51 spin_unlock_irqrestore(&desc->lock, flags); 52 } 53 54 /** 55 * dynamic_irq_cleanup - cleanup a dynamically allocated irq 56 * @irq: irq number to initialize 57 */ 58 void dynamic_irq_cleanup(unsigned int irq) 59 { 60 struct irq_desc *desc = irq_to_desc(irq); 61 unsigned long flags; 62 63 if (!desc) { 64 WARN(1, KERN_ERR "Trying to cleanup invalid IRQ%d\n", irq); 65 return; 66 } 67 68 spin_lock_irqsave(&desc->lock, flags); 69 if (desc->action) { 70 spin_unlock_irqrestore(&desc->lock, flags); 71 WARN(1, KERN_ERR "Destroying IRQ%d without calling free_irq\n", 72 irq); 73 return; 74 } 75 desc->msi_desc = NULL; 76 desc->handler_data = NULL; 77 desc->chip_data = NULL; 78 desc->handle_irq = handle_bad_irq; 79 desc->chip = &no_irq_chip; 80 desc->name = NULL; 81 spin_unlock_irqrestore(&desc->lock, flags); 82 } 83 84 85 /** 86 * set_irq_chip - set the irq chip for an irq 87 * @irq: irq number 88 * @chip: pointer to irq chip description structure 89 */ 90 int set_irq_chip(unsigned int irq, struct irq_chip *chip) 91 { 92 struct irq_desc *desc = irq_to_desc(irq); 93 unsigned long flags; 94 95 if (!desc) { 96 WARN(1, KERN_ERR "Trying to install chip for IRQ%d\n", irq); 97 return -EINVAL; 98 } 99 100 if (!chip) 101 chip = &no_irq_chip; 102 103 spin_lock_irqsave(&desc->lock, flags); 104 irq_chip_set_defaults(chip); 105 desc->chip = chip; 106 spin_unlock_irqrestore(&desc->lock, flags); 107 108 return 0; 109 } 110 EXPORT_SYMBOL(set_irq_chip); 111 112 /** 113 * set_irq_type - set the irq trigger type for an irq 114 * @irq: irq number 115 * @type: IRQ_TYPE_{LEVEL,EDGE}_* value - see include/linux/irq.h 116 */ 117 int set_irq_type(unsigned int irq, unsigned int type) 118 { 119 struct irq_desc *desc = irq_to_desc(irq); 120 unsigned long flags; 121 int ret = -ENXIO; 122 123 if (!desc) { 124 printk(KERN_ERR "Trying to set irq type for IRQ%d\n", irq); 125 return -ENODEV; 126 } 127 128 type &= IRQ_TYPE_SENSE_MASK; 129 if (type == IRQ_TYPE_NONE) 130 return 0; 131 132 spin_lock_irqsave(&desc->lock, flags); 133 ret = __irq_set_trigger(desc, irq, type); 134 spin_unlock_irqrestore(&desc->lock, flags); 135 return ret; 136 } 137 EXPORT_SYMBOL(set_irq_type); 138 139 /** 140 * set_irq_data - set irq type data for an irq 141 * @irq: Interrupt number 142 * @data: Pointer to interrupt specific data 143 * 144 * Set the hardware irq controller data for an irq 145 */ 146 int set_irq_data(unsigned int irq, void *data) 147 { 148 struct irq_desc *desc = irq_to_desc(irq); 149 unsigned long flags; 150 151 if (!desc) { 152 printk(KERN_ERR 153 "Trying to install controller data for IRQ%d\n", irq); 154 return -EINVAL; 155 } 156 157 spin_lock_irqsave(&desc->lock, flags); 158 desc->handler_data = data; 159 spin_unlock_irqrestore(&desc->lock, flags); 160 return 0; 161 } 162 EXPORT_SYMBOL(set_irq_data); 163 164 /** 165 * set_irq_data - set irq type data for an irq 166 * @irq: Interrupt number 167 * @entry: Pointer to MSI descriptor data 168 * 169 * Set the hardware irq controller data for an irq 170 */ 171 int set_irq_msi(unsigned int irq, struct msi_desc *entry) 172 { 173 struct irq_desc *desc = irq_to_desc(irq); 174 unsigned long flags; 175 176 if (!desc) { 177 printk(KERN_ERR 178 "Trying to install msi data for IRQ%d\n", irq); 179 return -EINVAL; 180 } 181 182 spin_lock_irqsave(&desc->lock, flags); 183 desc->msi_desc = entry; 184 if (entry) 185 entry->irq = irq; 186 spin_unlock_irqrestore(&desc->lock, flags); 187 return 0; 188 } 189 190 /** 191 * set_irq_chip_data - set irq chip data for an irq 192 * @irq: Interrupt number 193 * @data: Pointer to chip specific data 194 * 195 * Set the hardware irq chip data for an irq 196 */ 197 int set_irq_chip_data(unsigned int irq, void *data) 198 { 199 struct irq_desc *desc = irq_to_desc(irq); 200 unsigned long flags; 201 202 if (!desc) { 203 printk(KERN_ERR 204 "Trying to install chip data for IRQ%d\n", irq); 205 return -EINVAL; 206 } 207 208 if (!desc->chip) { 209 printk(KERN_ERR "BUG: bad set_irq_chip_data(IRQ#%d)\n", irq); 210 return -EINVAL; 211 } 212 213 spin_lock_irqsave(&desc->lock, flags); 214 desc->chip_data = data; 215 spin_unlock_irqrestore(&desc->lock, flags); 216 217 return 0; 218 } 219 EXPORT_SYMBOL(set_irq_chip_data); 220 221 /* 222 * default enable function 223 */ 224 static void default_enable(unsigned int irq) 225 { 226 struct irq_desc *desc = irq_to_desc(irq); 227 228 desc->chip->unmask(irq); 229 desc->status &= ~IRQ_MASKED; 230 } 231 232 /* 233 * default disable function 234 */ 235 static void default_disable(unsigned int irq) 236 { 237 } 238 239 /* 240 * default startup function 241 */ 242 static unsigned int default_startup(unsigned int irq) 243 { 244 struct irq_desc *desc = irq_to_desc(irq); 245 246 desc->chip->enable(irq); 247 return 0; 248 } 249 250 /* 251 * default shutdown function 252 */ 253 static void default_shutdown(unsigned int irq) 254 { 255 struct irq_desc *desc = irq_to_desc(irq); 256 257 desc->chip->mask(irq); 258 desc->status |= IRQ_MASKED; 259 } 260 261 /* 262 * Fixup enable/disable function pointers 263 */ 264 void irq_chip_set_defaults(struct irq_chip *chip) 265 { 266 if (!chip->enable) 267 chip->enable = default_enable; 268 if (!chip->disable) 269 chip->disable = default_disable; 270 if (!chip->startup) 271 chip->startup = default_startup; 272 /* 273 * We use chip->disable, when the user provided its own. When 274 * we have default_disable set for chip->disable, then we need 275 * to use default_shutdown, otherwise the irq line is not 276 * disabled on free_irq(): 277 */ 278 if (!chip->shutdown) 279 chip->shutdown = chip->disable != default_disable ? 280 chip->disable : default_shutdown; 281 if (!chip->name) 282 chip->name = chip->typename; 283 if (!chip->end) 284 chip->end = dummy_irq_chip.end; 285 } 286 287 static inline void mask_ack_irq(struct irq_desc *desc, int irq) 288 { 289 if (desc->chip->mask_ack) 290 desc->chip->mask_ack(irq); 291 else { 292 desc->chip->mask(irq); 293 desc->chip->ack(irq); 294 } 295 } 296 297 /** 298 * handle_simple_irq - Simple and software-decoded IRQs. 299 * @irq: the interrupt number 300 * @desc: the interrupt description structure for this irq 301 * 302 * Simple interrupts are either sent from a demultiplexing interrupt 303 * handler or come from hardware, where no interrupt hardware control 304 * is necessary. 305 * 306 * Note: The caller is expected to handle the ack, clear, mask and 307 * unmask issues if necessary. 308 */ 309 void 310 handle_simple_irq(unsigned int irq, struct irq_desc *desc) 311 { 312 struct irqaction *action; 313 irqreturn_t action_ret; 314 315 spin_lock(&desc->lock); 316 317 if (unlikely(desc->status & IRQ_INPROGRESS)) 318 goto out_unlock; 319 desc->status &= ~(IRQ_REPLAY | IRQ_WAITING); 320 kstat_incr_irqs_this_cpu(irq, desc); 321 322 action = desc->action; 323 if (unlikely(!action || (desc->status & IRQ_DISABLED))) 324 goto out_unlock; 325 326 desc->status |= IRQ_INPROGRESS; 327 spin_unlock(&desc->lock); 328 329 action_ret = handle_IRQ_event(irq, action); 330 if (!noirqdebug) 331 note_interrupt(irq, desc, action_ret); 332 333 spin_lock(&desc->lock); 334 desc->status &= ~IRQ_INPROGRESS; 335 out_unlock: 336 spin_unlock(&desc->lock); 337 } 338 339 /** 340 * handle_level_irq - Level type irq handler 341 * @irq: the interrupt number 342 * @desc: the interrupt description structure for this irq 343 * 344 * Level type interrupts are active as long as the hardware line has 345 * the active level. This may require to mask the interrupt and unmask 346 * it after the associated handler has acknowledged the device, so the 347 * interrupt line is back to inactive. 348 */ 349 void 350 handle_level_irq(unsigned int irq, struct irq_desc *desc) 351 { 352 struct irqaction *action; 353 irqreturn_t action_ret; 354 355 spin_lock(&desc->lock); 356 mask_ack_irq(desc, irq); 357 desc = irq_remap_to_desc(irq, desc); 358 359 if (unlikely(desc->status & IRQ_INPROGRESS)) 360 goto out_unlock; 361 desc->status &= ~(IRQ_REPLAY | IRQ_WAITING); 362 kstat_incr_irqs_this_cpu(irq, desc); 363 364 /* 365 * If its disabled or no action available 366 * keep it masked and get out of here 367 */ 368 action = desc->action; 369 if (unlikely(!action || (desc->status & IRQ_DISABLED))) 370 goto out_unlock; 371 372 desc->status |= IRQ_INPROGRESS; 373 spin_unlock(&desc->lock); 374 375 action_ret = handle_IRQ_event(irq, action); 376 if (!noirqdebug) 377 note_interrupt(irq, desc, action_ret); 378 379 spin_lock(&desc->lock); 380 desc->status &= ~IRQ_INPROGRESS; 381 if (!(desc->status & IRQ_DISABLED) && desc->chip->unmask) 382 desc->chip->unmask(irq); 383 out_unlock: 384 spin_unlock(&desc->lock); 385 } 386 EXPORT_SYMBOL_GPL(handle_level_irq); 387 388 /** 389 * handle_fasteoi_irq - irq handler for transparent controllers 390 * @irq: the interrupt number 391 * @desc: the interrupt description structure for this irq 392 * 393 * Only a single callback will be issued to the chip: an ->eoi() 394 * call when the interrupt has been serviced. This enables support 395 * for modern forms of interrupt handlers, which handle the flow 396 * details in hardware, transparently. 397 */ 398 void 399 handle_fasteoi_irq(unsigned int irq, struct irq_desc *desc) 400 { 401 struct irqaction *action; 402 irqreturn_t action_ret; 403 404 spin_lock(&desc->lock); 405 406 if (unlikely(desc->status & IRQ_INPROGRESS)) 407 goto out; 408 409 desc->status &= ~(IRQ_REPLAY | IRQ_WAITING); 410 kstat_incr_irqs_this_cpu(irq, desc); 411 412 /* 413 * If its disabled or no action available 414 * then mask it and get out of here: 415 */ 416 action = desc->action; 417 if (unlikely(!action || (desc->status & IRQ_DISABLED))) { 418 desc->status |= IRQ_PENDING; 419 if (desc->chip->mask) 420 desc->chip->mask(irq); 421 goto out; 422 } 423 424 desc->status |= IRQ_INPROGRESS; 425 desc->status &= ~IRQ_PENDING; 426 spin_unlock(&desc->lock); 427 428 action_ret = handle_IRQ_event(irq, action); 429 if (!noirqdebug) 430 note_interrupt(irq, desc, action_ret); 431 432 spin_lock(&desc->lock); 433 desc->status &= ~IRQ_INPROGRESS; 434 out: 435 desc->chip->eoi(irq); 436 desc = irq_remap_to_desc(irq, desc); 437 438 spin_unlock(&desc->lock); 439 } 440 441 /** 442 * handle_edge_irq - edge type IRQ handler 443 * @irq: the interrupt number 444 * @desc: the interrupt description structure for this irq 445 * 446 * Interrupt occures on the falling and/or rising edge of a hardware 447 * signal. The occurence is latched into the irq controller hardware 448 * and must be acked in order to be reenabled. After the ack another 449 * interrupt can happen on the same source even before the first one 450 * is handled by the assosiacted event handler. If this happens it 451 * might be necessary to disable (mask) the interrupt depending on the 452 * controller hardware. This requires to reenable the interrupt inside 453 * of the loop which handles the interrupts which have arrived while 454 * the handler was running. If all pending interrupts are handled, the 455 * loop is left. 456 */ 457 void 458 handle_edge_irq(unsigned int irq, struct irq_desc *desc) 459 { 460 spin_lock(&desc->lock); 461 462 desc->status &= ~(IRQ_REPLAY | IRQ_WAITING); 463 464 /* 465 * If we're currently running this IRQ, or its disabled, 466 * we shouldn't process the IRQ. Mark it pending, handle 467 * the necessary masking and go out 468 */ 469 if (unlikely((desc->status & (IRQ_INPROGRESS | IRQ_DISABLED)) || 470 !desc->action)) { 471 desc->status |= (IRQ_PENDING | IRQ_MASKED); 472 mask_ack_irq(desc, irq); 473 desc = irq_remap_to_desc(irq, desc); 474 goto out_unlock; 475 } 476 kstat_incr_irqs_this_cpu(irq, desc); 477 478 /* Start handling the irq */ 479 desc->chip->ack(irq); 480 desc = irq_remap_to_desc(irq, desc); 481 482 /* Mark the IRQ currently in progress.*/ 483 desc->status |= IRQ_INPROGRESS; 484 485 do { 486 struct irqaction *action = desc->action; 487 irqreturn_t action_ret; 488 489 if (unlikely(!action)) { 490 desc->chip->mask(irq); 491 goto out_unlock; 492 } 493 494 /* 495 * When another irq arrived while we were handling 496 * one, we could have masked the irq. 497 * Renable it, if it was not disabled in meantime. 498 */ 499 if (unlikely((desc->status & 500 (IRQ_PENDING | IRQ_MASKED | IRQ_DISABLED)) == 501 (IRQ_PENDING | IRQ_MASKED))) { 502 desc->chip->unmask(irq); 503 desc->status &= ~IRQ_MASKED; 504 } 505 506 desc->status &= ~IRQ_PENDING; 507 spin_unlock(&desc->lock); 508 action_ret = handle_IRQ_event(irq, action); 509 if (!noirqdebug) 510 note_interrupt(irq, desc, action_ret); 511 spin_lock(&desc->lock); 512 513 } while ((desc->status & (IRQ_PENDING | IRQ_DISABLED)) == IRQ_PENDING); 514 515 desc->status &= ~IRQ_INPROGRESS; 516 out_unlock: 517 spin_unlock(&desc->lock); 518 } 519 520 /** 521 * handle_percpu_IRQ - Per CPU local irq handler 522 * @irq: the interrupt number 523 * @desc: the interrupt description structure for this irq 524 * 525 * Per CPU interrupts on SMP machines without locking requirements 526 */ 527 void 528 handle_percpu_irq(unsigned int irq, struct irq_desc *desc) 529 { 530 irqreturn_t action_ret; 531 532 kstat_incr_irqs_this_cpu(irq, desc); 533 534 if (desc->chip->ack) 535 desc->chip->ack(irq); 536 537 action_ret = handle_IRQ_event(irq, desc->action); 538 if (!noirqdebug) 539 note_interrupt(irq, desc, action_ret); 540 541 if (desc->chip->eoi) { 542 desc->chip->eoi(irq); 543 desc = irq_remap_to_desc(irq, desc); 544 } 545 } 546 547 void 548 __set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained, 549 const char *name) 550 { 551 struct irq_desc *desc = irq_to_desc(irq); 552 unsigned long flags; 553 554 if (!desc) { 555 printk(KERN_ERR 556 "Trying to install type control for IRQ%d\n", irq); 557 return; 558 } 559 560 if (!handle) 561 handle = handle_bad_irq; 562 else if (desc->chip == &no_irq_chip) { 563 printk(KERN_WARNING "Trying to install %sinterrupt handler " 564 "for IRQ%d\n", is_chained ? "chained " : "", irq); 565 /* 566 * Some ARM implementations install a handler for really dumb 567 * interrupt hardware without setting an irq_chip. This worked 568 * with the ARM no_irq_chip but the check in setup_irq would 569 * prevent us to setup the interrupt at all. Switch it to 570 * dummy_irq_chip for easy transition. 571 */ 572 desc->chip = &dummy_irq_chip; 573 } 574 575 spin_lock_irqsave(&desc->lock, flags); 576 577 /* Uninstall? */ 578 if (handle == handle_bad_irq) { 579 if (desc->chip != &no_irq_chip) { 580 mask_ack_irq(desc, irq); 581 desc = irq_remap_to_desc(irq, desc); 582 } 583 desc->status |= IRQ_DISABLED; 584 desc->depth = 1; 585 } 586 desc->handle_irq = handle; 587 desc->name = name; 588 589 if (handle != handle_bad_irq && is_chained) { 590 desc->status &= ~IRQ_DISABLED; 591 desc->status |= IRQ_NOREQUEST | IRQ_NOPROBE; 592 desc->depth = 0; 593 desc->chip->startup(irq); 594 } 595 spin_unlock_irqrestore(&desc->lock, flags); 596 } 597 EXPORT_SYMBOL_GPL(__set_irq_handler); 598 599 void 600 set_irq_chip_and_handler(unsigned int irq, struct irq_chip *chip, 601 irq_flow_handler_t handle) 602 { 603 set_irq_chip(irq, chip); 604 __set_irq_handler(irq, handle, 0, NULL); 605 } 606 607 void 608 set_irq_chip_and_handler_name(unsigned int irq, struct irq_chip *chip, 609 irq_flow_handler_t handle, const char *name) 610 { 611 set_irq_chip(irq, chip); 612 __set_irq_handler(irq, handle, 0, name); 613 } 614 615 void __init set_irq_noprobe(unsigned int irq) 616 { 617 struct irq_desc *desc = irq_to_desc(irq); 618 unsigned long flags; 619 620 if (!desc) { 621 printk(KERN_ERR "Trying to mark IRQ%d non-probeable\n", irq); 622 return; 623 } 624 625 spin_lock_irqsave(&desc->lock, flags); 626 desc->status |= IRQ_NOPROBE; 627 spin_unlock_irqrestore(&desc->lock, flags); 628 } 629 630 void __init set_irq_probe(unsigned int irq) 631 { 632 struct irq_desc *desc = irq_to_desc(irq); 633 unsigned long flags; 634 635 if (!desc) { 636 printk(KERN_ERR "Trying to mark IRQ%d probeable\n", irq); 637 return; 638 } 639 640 spin_lock_irqsave(&desc->lock, flags); 641 desc->status &= ~IRQ_NOPROBE; 642 spin_unlock_irqrestore(&desc->lock, flags); 643 } 644