diff options
author | Neal H. Walfield <neal@gnu.org> | 2009-02-22 00:42:37 +0100 |
---|---|---|
committer | Neal H. Walfield <neal@gnu.org> | 2009-02-22 00:42:37 +0100 |
commit | 56cd2ec5fff0cb6fe8a2c8ebcf2cefb54d7312b4 (patch) | |
tree | 2a35a99621580d7b8a62bb4b1a27b65ca237b847 /viengoos | |
parent | cb4f05cfe9a7a0488de93dbd6c8012cf5fc72a82 (diff) |
Pass the irq number as a parameter to the irq handler.
Diffstat (limited to 'viengoos')
-rw-r--r-- | viengoos/sysdeps/x86_64/pic.c | 44 | ||||
-rw-r--r-- | viengoos/sysdeps/x86_64/pic.h | 2 | ||||
-rw-r--r-- | viengoos/sysdeps/x86_64/timer-arch.c | 2 |
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); |