1 /* 2 * linux/kernel/irq/manage.c 3 * 4 * Copyright (C) 1992, 1998-2006 Linus Torvalds, Ingo Molnar 5 * Copyright (C) 2005-2006 Thomas Gleixner 6 * 7 * This file contains driver APIs to the irq subsystem. 8 */ 9 10 #include <linux/irq.h> 11 #include <linux/module.h> 12 #include <linux/random.h> 13 #include <linux/interrupt.h> 14 15 #include "internals.h" 16 17 #ifdef CONFIG_SMP 18 19 /** 20 * synchronize_irq - wait for pending IRQ handlers (on other CPUs) 21 * @irq: interrupt number to wait for 22 * 23 * This function waits for any pending IRQ handlers for this interrupt 24 * to complete before returning. If you use this function while 25 * holding a resource the IRQ handler may need you will deadlock. 26 * 27 * This function may be called - with care - from IRQ context. 28 */ 29 void synchronize_irq(unsigned int irq) 30 { 31 struct irq_desc *desc = irq_desc + irq; 32 33 if (irq >= NR_IRQS) 34 return; 35 36 while (desc->status & IRQ_INPROGRESS) 37 cpu_relax(); 38 } 39 EXPORT_SYMBOL(synchronize_irq); 40 41 /** 42 * irq_can_set_affinity - Check if the affinity of a given irq can be set 43 * @irq: Interrupt to check 44 * 45 */ 46 int irq_can_set_affinity(unsigned int irq) 47 { 48 struct irq_desc *desc = irq_desc + irq; 49 50 if (CHECK_IRQ_PER_CPU(desc->status) || !desc->chip || 51 !desc->chip->set_affinity) 52 return 0; 53 54 return 1; 55 } 56 57 /** 58 * irq_set_affinity - Set the irq affinity of a given irq 59 * @irq: Interrupt to set affinity 60 * @cpumask: cpumask 61 * 62 */ 63 int irq_set_affinity(unsigned int irq, cpumask_t cpumask) 64 { 65 struct irq_desc *desc = irq_desc + irq; 66 67 if (!desc->chip->set_affinity) 68 return -EINVAL; 69 70 set_balance_irq_affinity(irq, cpumask); 71 72 #ifdef CONFIG_GENERIC_PENDING_IRQ 73 set_pending_irq(irq, cpumask); 74 #else 75 desc->affinity = cpumask; 76 desc->chip->set_affinity(irq, cpumask); 77 #endif 78 return 0; 79 } 80 81 #endif 82 83 /** 84 * disable_irq_nosync - disable an irq without waiting 85 * @irq: Interrupt to disable 86 * 87 * Disable the selected interrupt line. Disables and Enables are 88 * nested. 89 * Unlike disable_irq(), this function does not ensure existing 90 * instances of the IRQ handler have completed before returning. 91 * 92 * This function may be called from IRQ context. 93 */ 94 void disable_irq_nosync(unsigned int irq) 95 { 96 struct irq_desc *desc = irq_desc + irq; 97 unsigned long flags; 98 99 if (irq >= NR_IRQS) 100 return; 101 102 spin_lock_irqsave(&desc->lock, flags); 103 if (!desc->depth++) { 104 desc->status |= IRQ_DISABLED; 105 desc->chip->disable(irq); 106 } 107 spin_unlock_irqrestore(&desc->lock, flags); 108 } 109 EXPORT_SYMBOL(disable_irq_nosync); 110 111 /** 112 * disable_irq - disable an irq and wait for completion 113 * @irq: Interrupt to disable 114 * 115 * Disable the selected interrupt line. Enables and Disables are 116 * nested. 117 * This function waits for any pending IRQ handlers for this interrupt 118 * to complete before returning. If you use this function while 119 * holding a resource the IRQ handler may need you will deadlock. 120 * 121 * This function may be called - with care - from IRQ context. 122 */ 123 void disable_irq(unsigned int irq) 124 { 125 struct irq_desc *desc = irq_desc + irq; 126 127 if (irq >= NR_IRQS) 128 return; 129 130 disable_irq_nosync(irq); 131 if (desc->action) 132 synchronize_irq(irq); 133 } 134 EXPORT_SYMBOL(disable_irq); 135 136 /** 137 * enable_irq - enable handling of an irq 138 * @irq: Interrupt to enable 139 * 140 * Undoes the effect of one call to disable_irq(). If this 141 * matches the last disable, processing of interrupts on this 142 * IRQ line is re-enabled. 143 * 144 * This function may be called from IRQ context. 145 */ 146 void enable_irq(unsigned int irq) 147 { 148 struct irq_desc *desc = irq_desc + irq; 149 unsigned long flags; 150 151 if (irq >= NR_IRQS) 152 return; 153 154 spin_lock_irqsave(&desc->lock, flags); 155 switch (desc->depth) { 156 case 0: 157 printk(KERN_WARNING "Unbalanced enable for IRQ %d\n", irq); 158 WARN_ON(1); 159 break; 160 case 1: { 161 unsigned int status = desc->status & ~IRQ_DISABLED; 162 163 /* Prevent probing on this irq: */ 164 desc->status = status | IRQ_NOPROBE; 165 check_irq_resend(desc, irq); 166 /* fall-through */ 167 } 168 default: 169 desc->depth--; 170 } 171 spin_unlock_irqrestore(&desc->lock, flags); 172 } 173 EXPORT_SYMBOL(enable_irq); 174 175 /** 176 * set_irq_wake - control irq power management wakeup 177 * @irq: interrupt to control 178 * @on: enable/disable power management wakeup 179 * 180 * Enable/disable power management wakeup mode, which is 181 * disabled by default. Enables and disables must match, 182 * just as they match for non-wakeup mode support. 183 * 184 * Wakeup mode lets this IRQ wake the system from sleep 185 * states like "suspend to RAM". 186 */ 187 int set_irq_wake(unsigned int irq, unsigned int on) 188 { 189 struct irq_desc *desc = irq_desc + irq; 190 unsigned long flags; 191 int ret = -ENXIO; 192 int (*set_wake)(unsigned, unsigned) = desc->chip->set_wake; 193 194 /* wakeup-capable irqs can be shared between drivers that 195 * don't need to have the same sleep mode behaviors. 196 */ 197 spin_lock_irqsave(&desc->lock, flags); 198 if (on) { 199 if (desc->wake_depth++ == 0) 200 desc->status |= IRQ_WAKEUP; 201 else 202 set_wake = NULL; 203 } else { 204 if (desc->wake_depth == 0) { 205 printk(KERN_WARNING "Unbalanced IRQ %d " 206 "wake disable\n", irq); 207 WARN_ON(1); 208 } else if (--desc->wake_depth == 0) 209 desc->status &= ~IRQ_WAKEUP; 210 else 211 set_wake = NULL; 212 } 213 if (set_wake) 214 ret = desc->chip->set_wake(irq, on); 215 spin_unlock_irqrestore(&desc->lock, flags); 216 return ret; 217 } 218 EXPORT_SYMBOL(set_irq_wake); 219 220 /* 221 * Internal function that tells the architecture code whether a 222 * particular irq has been exclusively allocated or is available 223 * for driver use. 224 */ 225 int can_request_irq(unsigned int irq, unsigned long irqflags) 226 { 227 struct irqaction *action; 228 229 if (irq >= NR_IRQS || irq_desc[irq].status & IRQ_NOREQUEST) 230 return 0; 231 232 action = irq_desc[irq].action; 233 if (action) 234 if (irqflags & action->flags & IRQF_SHARED) 235 action = NULL; 236 237 return !action; 238 } 239 240 void compat_irq_chip_set_default_handler(struct irq_desc *desc) 241 { 242 /* 243 * If the architecture still has not overriden 244 * the flow handler then zap the default. This 245 * should catch incorrect flow-type setting. 246 */ 247 if (desc->handle_irq == &handle_bad_irq) 248 desc->handle_irq = NULL; 249 } 250 251 /* 252 * Internal function to register an irqaction - typically used to 253 * allocate special interrupts that are part of the architecture. 254 */ 255 int setup_irq(unsigned int irq, struct irqaction *new) 256 { 257 struct irq_desc *desc = irq_desc + irq; 258 struct irqaction *old, **p; 259 const char *old_name = NULL; 260 unsigned long flags; 261 int shared = 0; 262 263 if (irq >= NR_IRQS) 264 return -EINVAL; 265 266 if (desc->chip == &no_irq_chip) 267 return -ENOSYS; 268 /* 269 * Some drivers like serial.c use request_irq() heavily, 270 * so we have to be careful not to interfere with a 271 * running system. 272 */ 273 if (new->flags & IRQF_SAMPLE_RANDOM) { 274 /* 275 * This function might sleep, we want to call it first, 276 * outside of the atomic block. 277 * Yes, this might clear the entropy pool if the wrong 278 * driver is attempted to be loaded, without actually 279 * installing a new handler, but is this really a problem, 280 * only the sysadmin is able to do this. 281 */ 282 rand_initialize_irq(irq); 283 } 284 285 /* 286 * The following block of code has to be executed atomically 287 */ 288 spin_lock_irqsave(&desc->lock, flags); 289 p = &desc->action; 290 old = *p; 291 if (old) { 292 /* 293 * Can't share interrupts unless both agree to and are 294 * the same type (level, edge, polarity). So both flag 295 * fields must have IRQF_SHARED set and the bits which 296 * set the trigger type must match. 297 */ 298 if (!((old->flags & new->flags) & IRQF_SHARED) || 299 ((old->flags ^ new->flags) & IRQF_TRIGGER_MASK)) { 300 old_name = old->name; 301 goto mismatch; 302 } 303 304 #if defined(CONFIG_IRQ_PER_CPU) 305 /* All handlers must agree on per-cpuness */ 306 if ((old->flags & IRQF_PERCPU) != 307 (new->flags & IRQF_PERCPU)) 308 goto mismatch; 309 #endif 310 311 /* add new interrupt at end of irq queue */ 312 do { 313 p = &old->next; 314 old = *p; 315 } while (old); 316 shared = 1; 317 } 318 319 *p = new; 320 #if defined(CONFIG_IRQ_PER_CPU) 321 if (new->flags & IRQF_PERCPU) 322 desc->status |= IRQ_PER_CPU; 323 #endif 324 /* Exclude IRQ from balancing */ 325 if (new->flags & IRQF_NOBALANCING) 326 desc->status |= IRQ_NO_BALANCING; 327 328 if (!shared) { 329 irq_chip_set_defaults(desc->chip); 330 331 /* Setup the type (level, edge polarity) if configured: */ 332 if (new->flags & IRQF_TRIGGER_MASK) { 333 if (desc->chip && desc->chip->set_type) 334 desc->chip->set_type(irq, 335 new->flags & IRQF_TRIGGER_MASK); 336 else 337 /* 338 * IRQF_TRIGGER_* but the PIC does not support 339 * multiple flow-types? 340 */ 341 printk(KERN_WARNING "No IRQF_TRIGGER set_type " 342 "function for IRQ %d (%s)\n", irq, 343 desc->chip ? desc->chip->name : 344 "unknown"); 345 } else 346 compat_irq_chip_set_default_handler(desc); 347 348 desc->status &= ~(IRQ_AUTODETECT | IRQ_WAITING | 349 IRQ_INPROGRESS); 350 351 if (!(desc->status & IRQ_NOAUTOEN)) { 352 desc->depth = 0; 353 desc->status &= ~IRQ_DISABLED; 354 if (desc->chip->startup) 355 desc->chip->startup(irq); 356 else 357 desc->chip->enable(irq); 358 } else 359 /* Undo nested disables: */ 360 desc->depth = 1; 361 } 362 /* Reset broken irq detection when installing new handler */ 363 desc->irq_count = 0; 364 desc->irqs_unhandled = 0; 365 spin_unlock_irqrestore(&desc->lock, flags); 366 367 new->irq = irq; 368 register_irq_proc(irq); 369 new->dir = NULL; 370 register_handler_proc(irq, new); 371 372 return 0; 373 374 mismatch: 375 #ifdef CONFIG_DEBUG_SHIRQ 376 if (!(new->flags & IRQF_PROBE_SHARED)) { 377 printk(KERN_ERR "IRQ handler type mismatch for IRQ %d\n", irq); 378 if (old_name) 379 printk(KERN_ERR "current handler: %s\n", old_name); 380 dump_stack(); 381 } 382 #endif 383 spin_unlock_irqrestore(&desc->lock, flags); 384 return -EBUSY; 385 } 386 387 /** 388 * free_irq - free an interrupt 389 * @irq: Interrupt line to free 390 * @dev_id: Device identity to free 391 * 392 * Remove an interrupt handler. The handler is removed and if the 393 * interrupt line is no longer in use by any driver it is disabled. 394 * On a shared IRQ the caller must ensure the interrupt is disabled 395 * on the card it drives before calling this function. The function 396 * does not return until any executing interrupts for this IRQ 397 * have completed. 398 * 399 * This function must not be called from interrupt context. 400 */ 401 void free_irq(unsigned int irq, void *dev_id) 402 { 403 struct irq_desc *desc; 404 struct irqaction **p; 405 unsigned long flags; 406 irqreturn_t (*handler)(int, void *) = NULL; 407 408 WARN_ON(in_interrupt()); 409 if (irq >= NR_IRQS) 410 return; 411 412 desc = irq_desc + irq; 413 spin_lock_irqsave(&desc->lock, flags); 414 p = &desc->action; 415 for (;;) { 416 struct irqaction *action = *p; 417 418 if (action) { 419 struct irqaction **pp = p; 420 421 p = &action->next; 422 if (action->dev_id != dev_id) 423 continue; 424 425 /* Found it - now remove it from the list of entries */ 426 *pp = action->next; 427 428 /* Currently used only by UML, might disappear one day.*/ 429 #ifdef CONFIG_IRQ_RELEASE_METHOD 430 if (desc->chip->release) 431 desc->chip->release(irq, dev_id); 432 #endif 433 434 if (!desc->action) { 435 desc->status |= IRQ_DISABLED; 436 if (desc->chip->shutdown) 437 desc->chip->shutdown(irq); 438 else 439 desc->chip->disable(irq); 440 } 441 spin_unlock_irqrestore(&desc->lock, flags); 442 unregister_handler_proc(irq, action); 443 444 /* Make sure it's not being used on another CPU */ 445 synchronize_irq(irq); 446 if (action->flags & IRQF_SHARED) 447 handler = action->handler; 448 kfree(action); 449 return; 450 } 451 printk(KERN_ERR "Trying to free already-free IRQ %d\n", irq); 452 spin_unlock_irqrestore(&desc->lock, flags); 453 return; 454 } 455 #ifdef CONFIG_DEBUG_SHIRQ 456 if (handler) { 457 /* 458 * It's a shared IRQ -- the driver ought to be prepared for it 459 * to happen even now it's being freed, so let's make sure.... 460 * We do this after actually deregistering it, to make sure that 461 * a 'real' IRQ doesn't run in parallel with our fake 462 */ 463 handler(irq, dev_id); 464 } 465 #endif 466 } 467 EXPORT_SYMBOL(free_irq); 468 469 /** 470 * request_irq - allocate an interrupt line 471 * @irq: Interrupt line to allocate 472 * @handler: Function to be called when the IRQ occurs 473 * @irqflags: Interrupt type flags 474 * @devname: An ascii name for the claiming device 475 * @dev_id: A cookie passed back to the handler function 476 * 477 * This call allocates interrupt resources and enables the 478 * interrupt line and IRQ handling. From the point this 479 * call is made your handler function may be invoked. Since 480 * your handler function must clear any interrupt the board 481 * raises, you must take care both to initialise your hardware 482 * and to set up the interrupt handler in the right order. 483 * 484 * Dev_id must be globally unique. Normally the address of the 485 * device data structure is used as the cookie. Since the handler 486 * receives this value it makes sense to use it. 487 * 488 * If your interrupt is shared you must pass a non NULL dev_id 489 * as this is required when freeing the interrupt. 490 * 491 * Flags: 492 * 493 * IRQF_SHARED Interrupt is shared 494 * IRQF_DISABLED Disable local interrupts while processing 495 * IRQF_SAMPLE_RANDOM The interrupt can be used for entropy 496 * 497 */ 498 int request_irq(unsigned int irq, irq_handler_t handler, 499 unsigned long irqflags, const char *devname, void *dev_id) 500 { 501 struct irqaction *action; 502 int retval; 503 504 #ifdef CONFIG_LOCKDEP 505 /* 506 * Lockdep wants atomic interrupt handlers: 507 */ 508 irqflags |= IRQF_DISABLED; 509 #endif 510 /* 511 * Sanity-check: shared interrupts must pass in a real dev-ID, 512 * otherwise we'll have trouble later trying to figure out 513 * which interrupt is which (messes up the interrupt freeing 514 * logic etc). 515 */ 516 if ((irqflags & IRQF_SHARED) && !dev_id) 517 return -EINVAL; 518 if (irq >= NR_IRQS) 519 return -EINVAL; 520 if (irq_desc[irq].status & IRQ_NOREQUEST) 521 return -EINVAL; 522 if (!handler) 523 return -EINVAL; 524 525 action = kmalloc(sizeof(struct irqaction), GFP_ATOMIC); 526 if (!action) 527 return -ENOMEM; 528 529 action->handler = handler; 530 action->flags = irqflags; 531 cpus_clear(action->mask); 532 action->name = devname; 533 action->next = NULL; 534 action->dev_id = dev_id; 535 536 select_smp_affinity(irq); 537 538 #ifdef CONFIG_DEBUG_SHIRQ 539 if (irqflags & IRQF_SHARED) { 540 /* 541 * It's a shared IRQ -- the driver ought to be prepared for it 542 * to happen immediately, so let's make sure.... 543 * We do this before actually registering it, to make sure that 544 * a 'real' IRQ doesn't run in parallel with our fake 545 */ 546 if (irqflags & IRQF_DISABLED) { 547 unsigned long flags; 548 549 local_irq_save(flags); 550 handler(irq, dev_id); 551 local_irq_restore(flags); 552 } else 553 handler(irq, dev_id); 554 } 555 #endif 556 557 retval = setup_irq(irq, action); 558 if (retval) 559 kfree(action); 560 561 return retval; 562 } 563 EXPORT_SYMBOL(request_irq); 564