diff options
Diffstat (limited to 'kernel/irq/chip.c')
-rw-r--r-- | kernel/irq/chip.c | 48 |
1 files changed, 18 insertions, 30 deletions
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index 4cf65f5c6a74..11c99697acfe 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c | |||
@@ -249,7 +249,6 @@ static inline void mask_ack_irq(struct irq_desc *desc, int irq) | |||
249 | * handle_simple_irq - Simple and software-decoded IRQs. | 249 | * handle_simple_irq - Simple and software-decoded IRQs. |
250 | * @irq: the interrupt number | 250 | * @irq: the interrupt number |
251 | * @desc: the interrupt description structure for this irq | 251 | * @desc: the interrupt description structure for this irq |
252 | * @regs: pointer to a register structure | ||
253 | * | 252 | * |
254 | * Simple interrupts are either sent from a demultiplexing interrupt | 253 | * Simple interrupts are either sent from a demultiplexing interrupt |
255 | * handler or come from hardware, where no interrupt hardware control | 254 | * handler or come from hardware, where no interrupt hardware control |
@@ -259,7 +258,7 @@ static inline void mask_ack_irq(struct irq_desc *desc, int irq) | |||
259 | * unmask issues if necessary. | 258 | * unmask issues if necessary. |
260 | */ | 259 | */ |
261 | void fastcall | 260 | void fastcall |
262 | handle_simple_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs) | 261 | handle_simple_irq(unsigned int irq, struct irq_desc *desc) |
263 | { | 262 | { |
264 | struct irqaction *action; | 263 | struct irqaction *action; |
265 | irqreturn_t action_ret; | 264 | irqreturn_t action_ret; |
@@ -279,9 +278,9 @@ handle_simple_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs) | |||
279 | desc->status |= IRQ_INPROGRESS; | 278 | desc->status |= IRQ_INPROGRESS; |
280 | spin_unlock(&desc->lock); | 279 | spin_unlock(&desc->lock); |
281 | 280 | ||
282 | action_ret = handle_IRQ_event(irq, regs, action); | 281 | action_ret = handle_IRQ_event(irq, action); |
283 | if (!noirqdebug) | 282 | if (!noirqdebug) |
284 | note_interrupt(irq, desc, action_ret, regs); | 283 | note_interrupt(irq, desc, action_ret); |
285 | 284 | ||
286 | spin_lock(&desc->lock); | 285 | spin_lock(&desc->lock); |
287 | desc->status &= ~IRQ_INPROGRESS; | 286 | desc->status &= ~IRQ_INPROGRESS; |
@@ -293,7 +292,6 @@ out_unlock: | |||
293 | * handle_level_irq - Level type irq handler | 292 | * handle_level_irq - Level type irq handler |
294 | * @irq: the interrupt number | 293 | * @irq: the interrupt number |
295 | * @desc: the interrupt description structure for this irq | 294 | * @desc: the interrupt description structure for this irq |
296 | * @regs: pointer to a register structure | ||
297 | * | 295 | * |
298 | * Level type interrupts are active as long as the hardware line has | 296 | * Level type interrupts are active as long as the hardware line has |
299 | * the active level. This may require to mask the interrupt and unmask | 297 | * the active level. This may require to mask the interrupt and unmask |
@@ -301,7 +299,7 @@ out_unlock: | |||
301 | * interrupt line is back to inactive. | 299 | * interrupt line is back to inactive. |
302 | */ | 300 | */ |
303 | void fastcall | 301 | void fastcall |
304 | handle_level_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs) | 302 | handle_level_irq(unsigned int irq, struct irq_desc *desc) |
305 | { | 303 | { |
306 | unsigned int cpu = smp_processor_id(); | 304 | unsigned int cpu = smp_processor_id(); |
307 | struct irqaction *action; | 305 | struct irqaction *action; |
@@ -329,9 +327,9 @@ handle_level_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs) | |||
329 | desc->status &= ~IRQ_PENDING; | 327 | desc->status &= ~IRQ_PENDING; |
330 | spin_unlock(&desc->lock); | 328 | spin_unlock(&desc->lock); |
331 | 329 | ||
332 | action_ret = handle_IRQ_event(irq, regs, action); | 330 | action_ret = handle_IRQ_event(irq, action); |
333 | if (!noirqdebug) | 331 | if (!noirqdebug) |
334 | note_interrupt(irq, desc, action_ret, regs); | 332 | note_interrupt(irq, desc, action_ret); |
335 | 333 | ||
336 | spin_lock(&desc->lock); | 334 | spin_lock(&desc->lock); |
337 | desc->status &= ~IRQ_INPROGRESS; | 335 | desc->status &= ~IRQ_INPROGRESS; |
@@ -345,7 +343,6 @@ out_unlock: | |||
345 | * handle_fasteoi_irq - irq handler for transparent controllers | 343 | * handle_fasteoi_irq - irq handler for transparent controllers |
346 | * @irq: the interrupt number | 344 | * @irq: the interrupt number |
347 | * @desc: the interrupt description structure for this irq | 345 | * @desc: the interrupt description structure for this irq |
348 | * @regs: pointer to a register structure | ||
349 | * | 346 | * |
350 | * Only a single callback will be issued to the chip: an ->eoi() | 347 | * Only a single callback will be issued to the chip: an ->eoi() |
351 | * call when the interrupt has been serviced. This enables support | 348 | * call when the interrupt has been serviced. This enables support |
@@ -353,8 +350,7 @@ out_unlock: | |||
353 | * details in hardware, transparently. | 350 | * details in hardware, transparently. |
354 | */ | 351 | */ |
355 | void fastcall | 352 | void fastcall |
356 | handle_fasteoi_irq(unsigned int irq, struct irq_desc *desc, | 353 | handle_fasteoi_irq(unsigned int irq, struct irq_desc *desc) |
357 | struct pt_regs *regs) | ||
358 | { | 354 | { |
359 | unsigned int cpu = smp_processor_id(); | 355 | unsigned int cpu = smp_processor_id(); |
360 | struct irqaction *action; | 356 | struct irqaction *action; |
@@ -382,9 +378,9 @@ handle_fasteoi_irq(unsigned int irq, struct irq_desc *desc, | |||
382 | desc->status &= ~IRQ_PENDING; | 378 | desc->status &= ~IRQ_PENDING; |
383 | spin_unlock(&desc->lock); | 379 | spin_unlock(&desc->lock); |
384 | 380 | ||
385 | action_ret = handle_IRQ_event(irq, regs, action); | 381 | action_ret = handle_IRQ_event(irq, action); |
386 | if (!noirqdebug) | 382 | if (!noirqdebug) |
387 | note_interrupt(irq, desc, action_ret, regs); | 383 | note_interrupt(irq, desc, action_ret); |
388 | 384 | ||
389 | spin_lock(&desc->lock); | 385 | spin_lock(&desc->lock); |
390 | desc->status &= ~IRQ_INPROGRESS; | 386 | desc->status &= ~IRQ_INPROGRESS; |
@@ -398,7 +394,6 @@ out: | |||
398 | * handle_edge_irq - edge type IRQ handler | 394 | * handle_edge_irq - edge type IRQ handler |
399 | * @irq: the interrupt number | 395 | * @irq: the interrupt number |
400 | * @desc: the interrupt description structure for this irq | 396 | * @desc: the interrupt description structure for this irq |
401 | * @regs: pointer to a register structure | ||
402 | * | 397 | * |
403 | * Interrupt occures on the falling and/or rising edge of a hardware | 398 | * Interrupt occures on the falling and/or rising edge of a hardware |
404 | * signal. The occurence is latched into the irq controller hardware | 399 | * signal. The occurence is latched into the irq controller hardware |
@@ -412,7 +407,7 @@ out: | |||
412 | * loop is left. | 407 | * loop is left. |
413 | */ | 408 | */ |
414 | void fastcall | 409 | void fastcall |
415 | handle_edge_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs) | 410 | handle_edge_irq(unsigned int irq, struct irq_desc *desc) |
416 | { | 411 | { |
417 | const unsigned int cpu = smp_processor_id(); | 412 | const unsigned int cpu = smp_processor_id(); |
418 | 413 | ||
@@ -463,9 +458,9 @@ handle_edge_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs) | |||
463 | 458 | ||
464 | desc->status &= ~IRQ_PENDING; | 459 | desc->status &= ~IRQ_PENDING; |
465 | spin_unlock(&desc->lock); | 460 | spin_unlock(&desc->lock); |
466 | action_ret = handle_IRQ_event(irq, regs, action); | 461 | action_ret = handle_IRQ_event(irq, action); |
467 | if (!noirqdebug) | 462 | if (!noirqdebug) |
468 | note_interrupt(irq, desc, action_ret, regs); | 463 | note_interrupt(irq, desc, action_ret); |
469 | spin_lock(&desc->lock); | 464 | spin_lock(&desc->lock); |
470 | 465 | ||
471 | } while ((desc->status & (IRQ_PENDING | IRQ_DISABLED)) == IRQ_PENDING); | 466 | } while ((desc->status & (IRQ_PENDING | IRQ_DISABLED)) == IRQ_PENDING); |
@@ -480,12 +475,11 @@ out_unlock: | |||
480 | * handle_percpu_IRQ - Per CPU local irq handler | 475 | * handle_percpu_IRQ - Per CPU local irq handler |
481 | * @irq: the interrupt number | 476 | * @irq: the interrupt number |
482 | * @desc: the interrupt description structure for this irq | 477 | * @desc: the interrupt description structure for this irq |
483 | * @regs: pointer to a register structure | ||
484 | * | 478 | * |
485 | * Per CPU interrupts on SMP machines without locking requirements | 479 | * Per CPU interrupts on SMP machines without locking requirements |
486 | */ | 480 | */ |
487 | void fastcall | 481 | void fastcall |
488 | handle_percpu_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs) | 482 | handle_percpu_irq(unsigned int irq, struct irq_desc *desc) |
489 | { | 483 | { |
490 | irqreturn_t action_ret; | 484 | irqreturn_t action_ret; |
491 | 485 | ||
@@ -494,9 +488,9 @@ handle_percpu_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs) | |||
494 | if (desc->chip->ack) | 488 | if (desc->chip->ack) |
495 | desc->chip->ack(irq); | 489 | desc->chip->ack(irq); |
496 | 490 | ||
497 | action_ret = handle_IRQ_event(irq, regs, desc->action); | 491 | action_ret = handle_IRQ_event(irq, desc->action); |
498 | if (!noirqdebug) | 492 | if (!noirqdebug) |
499 | note_interrupt(irq, desc, action_ret, regs); | 493 | note_interrupt(irq, desc, action_ret); |
500 | 494 | ||
501 | if (desc->chip->eoi) | 495 | if (desc->chip->eoi) |
502 | desc->chip->eoi(irq); | 496 | desc->chip->eoi(irq); |
@@ -505,10 +499,7 @@ handle_percpu_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs) | |||
505 | #endif /* CONFIG_SMP */ | 499 | #endif /* CONFIG_SMP */ |
506 | 500 | ||
507 | void | 501 | void |
508 | __set_irq_handler(unsigned int irq, | 502 | __set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained) |
509 | void fastcall (*handle)(unsigned int, irq_desc_t *, | ||
510 | struct pt_regs *), | ||
511 | int is_chained) | ||
512 | { | 503 | { |
513 | struct irq_desc *desc; | 504 | struct irq_desc *desc; |
514 | unsigned long flags; | 505 | unsigned long flags; |
@@ -561,9 +552,7 @@ __set_irq_handler(unsigned int irq, | |||
561 | 552 | ||
562 | void | 553 | void |
563 | set_irq_chip_and_handler(unsigned int irq, struct irq_chip *chip, | 554 | set_irq_chip_and_handler(unsigned int irq, struct irq_chip *chip, |
564 | void fastcall (*handle)(unsigned int, | 555 | irq_flow_handler_t handle) |
565 | struct irq_desc *, | ||
566 | struct pt_regs *)) | ||
567 | { | 556 | { |
568 | set_irq_chip(irq, chip); | 557 | set_irq_chip(irq, chip); |
569 | __set_irq_handler(irq, handle, 0); | 558 | __set_irq_handler(irq, handle, 0); |
@@ -574,8 +563,7 @@ set_irq_chip_and_handler(unsigned int irq, struct irq_chip *chip, | |||
574 | * /proc/interrupts output: | 563 | * /proc/interrupts output: |
575 | */ | 564 | */ |
576 | const char * | 565 | const char * |
577 | handle_irq_name(void fastcall (*handle)(unsigned int, struct irq_desc *, | 566 | handle_irq_name(irq_flow_handler_t handle) |
578 | struct pt_regs *)) | ||
579 | { | 567 | { |
580 | if (handle == handle_level_irq) | 568 | if (handle == handle_level_irq) |
581 | return "level "; | 569 | return "level "; |