summaryrefslogtreecommitdiff
path: root/viengoos
diff options
context:
space:
mode:
authorNeal H. Walfield <neal@gnu.org>2009-02-22 00:42:37 +0100
committerNeal H. Walfield <neal@gnu.org>2009-02-22 00:42:37 +0100
commit56cd2ec5fff0cb6fe8a2c8ebcf2cefb54d7312b4 (patch)
tree2a35a99621580d7b8a62bb4b1a27b65ca237b847 /viengoos
parentcb4f05cfe9a7a0488de93dbd6c8012cf5fc72a82 (diff)
Pass the irq number as a parameter to the irq handler.
Diffstat (limited to 'viengoos')
-rw-r--r--viengoos/sysdeps/x86_64/pic.c44
-rw-r--r--viengoos/sysdeps/x86_64/pic.h2
-rw-r--r--viengoos/sysdeps/x86_64/timer-arch.c2
3 files changed, 24 insertions, 24 deletions
diff --git a/viengoos/sysdeps/x86_64/pic.c b/viengoos/sysdeps/x86_64/pic.c
index 5e0c8a1..29e96ab 100644
--- a/viengoos/sysdeps/x86_64/pic.c
+++ b/viengoos/sysdeps/x86_64/pic.c
@@ -32,7 +32,7 @@
#include "pic.h"
-typedef void (*irq_handler_t) ();
+typedef void (*irq_handler_t) (int irq);
static irq_handler_t handlers[PIC_NUM_IRQS];
@@ -92,12 +92,15 @@ pic_init ()
/* Register the IRQ handler HANDLER for IRQ number IRQ_NO. */
bool
-irq_register (int irq_no, void (*handler) (void))
+irq_register (int irq_no, void (*handler) (int))
{
irq_no -= IRQ_BASE;
if (irq_no < 0 || irq_no >= IRQ_COUNT)
- return false;
+ {
+ debug (0, "Attempt to register handler for invalid IRQ: %d", irq_no);
+ return false;
+ }
handlers[irq_no] = handler;
return true;
@@ -112,12 +115,11 @@ irq_unmask (int irq_no)
uint8_t mask;
irq_no -= IRQ_BASE;
- do_debug (2)
- if (irq_no < 0 || irq_no > 15)
- {
- debug (2, "Ignore unmask request for invalid IRQ number %i\n", irq_no);
- return;
- }
+ if (irq_no < 0 || irq_no > 15)
+ {
+ debug (0, "Ignore unmask request for invalid IRQ number %i\n", irq_no);
+ return;
+ }
if (irq_no < 8)
base = PIC_I8259_MASTER;
@@ -140,12 +142,11 @@ irq_mask (int irq_no)
uint8_t mask;
irq_no -= IRQ_BASE;
- do_debug (2)
- if (irq_no < 0 || irq_no > 15)
- {
- debug (2, "Ignore mask request for invalid IRQ number %i\n", irq_no);
- return;
- }
+ if (irq_no < 0 || irq_no > 15)
+ {
+ debug (0, "Ignore mask request for invalid IRQ number %i\n", irq_no);
+ return;
+ }
if (irq_no < 8)
base = PIC_I8259_MASTER;
@@ -166,12 +167,11 @@ void
irq_ack (int irq_no)
{
irq_no -= IRQ_BASE;
- do_debug (2)
- if (irq_no < 0 || irq_no > 15)
- {
- debug (2, "Ignore ack request for invalid IRQ number %i\n", irq_no);
- return;
- }
+ if (unlikely (irq_no < 0 || irq_no > 15))
+ {
+ debug (0, "Ignore ack request for invalid IRQ number %i\n", irq_no);
+ return;
+ }
if (irq_no < 8)
outb (PIC_I8259_EOI | irq_no, PIC_I8259_MASTER);
@@ -200,7 +200,7 @@ pic_handle_irq (struct interrupt_context *t)
irq_ack (t->num);
}
else
- handlers[num] ();
+ handlers[num] (num);
}
diff --git a/viengoos/sysdeps/x86_64/pic.h b/viengoos/sysdeps/x86_64/pic.h
index 26eb808..bb98288 100644
--- a/viengoos/sysdeps/x86_64/pic.h
+++ b/viengoos/sysdeps/x86_64/pic.h
@@ -31,7 +31,7 @@ void pic_init ();
/* Register the IRQ handler HANDLER for IRQ number IRQ_NO. */
-bool irq_register (int irq_no, void (*handler) ());
+bool irq_register (int irq_no, void (*handler) (int));
/* Unmask the interrupt IRQ_NO. */
void irq_unmask (int irq_no);
diff --git a/viengoos/sysdeps/x86_64/timer-arch.c b/viengoos/sysdeps/x86_64/timer-arch.c
index 31d6ad0..03d8aa0 100644
--- a/viengoos/sysdeps/x86_64/timer-arch.c
+++ b/viengoos/sysdeps/x86_64/timer-arch.c
@@ -178,7 +178,7 @@ arch_timer_alarm (uint64_t ticks)
/* The interrupt timer handler. */
void
-timer_interrupt ()
+timer_interrupt (int irq)
{
/* Acknowledge IRQ on the PIC. */
irq_ack (INT_IRQ8);