Changeset de57e060 in mainline for kernel/arch/ia64/src/interrupt.c


Ignore:
Timestamp:
2006-10-18T20:51:15Z (18 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
80ca47e
Parents:
cd13c2a
Message:

Convert ia64 to the new IRQ and notification scheme.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/ia64/src/interrupt.c

    rcd13c2a rde57e060  
    3535
    3636#include <arch/interrupt.h>
     37#include <interrupt.h>
     38#include <ddi/irq.h>
    3739#include <panic.h>
    3840#include <print.h>
     41#include <symtab.h>
     42#include <debug.h>
    3943#include <console/console.h>
    4044#include <arch/types.h>
     
    4246#include <arch/barrier.h>
    4347#include <arch/register.h>
    44 #include <arch/drivers/it.h>
    4548#include <arch.h>
    46 #include <symtab.h>
    47 #include <debug.h>
    4849#include <syscall/syscall.h>
    4950#include <print.h>
     
    5253#include <ipc/irq.h>
    5354#include <ipc/ipc.h>
    54 #include <interrupt.h>
    55 
     55#include <synch/spinlock.h>
    5656
    5757#define VECTORS_64_BUNDLE       20
     
    6161
    6262#define BUNDLE_SIZE             16
    63 
    6463
    6564char *vector_names_64_bundle[VECTORS_64_BUNDLE] = {
     
    198197}
    199198
    200 
    201199void nop_handler(uint64_t vector, istate_t *istate)
    202200{
    203201}
    204 
    205202
    206203/** Handle syscall. */
     
    229226void external_interrupt(uint64_t vector, istate_t *istate)
    230227{
     228        irq_t *irq;
    231229        cr_ivr_t ivr;
    232230       
     
    234232        srlz_d();
    235233
    236         switch(ivr.vector) {
    237         case INTERRUPT_TIMER:
    238                 it_interrupt();
    239                 break;
    240         case INTERRUPT_SPURIOUS:
    241                 printf("cpu%d: spurious interrupt\n", CPU->id);
    242                 break;
    243         default:
    244                 panic("\nUnhandled External Interrupt Vector %d\n", ivr.vector);
    245                 break;
     234        irq = irq_dispatch_and_lock(ivr.vector);
     235        if (irq) {
     236                irq->handler(irq, irq->arg);
     237                spinlock_unlock(&irq->lock);
     238        } else {
     239                switch (ivr.vector) {
     240                case INTERRUPT_SPURIOUS:
     241#ifdef CONFIG_DEBUG
     242                        printf("cpu%d: spurious interrupt\n", CPU->id);
     243#endif
     244                        break;
     245
     246                default:
     247                        panic("\nUnhandled External Interrupt Vector %d\n", ivr.vector);
     248                        break;
     249                }
    246250        }
    247251}
    248252
    249 void virtual_interrupt(uint64_t irq, void *param)
    250 {
    251         switch(irq) {
    252         case IRQ_KBD:
    253                 if (kbd_uspace)
    254                         ipc_irq_send_notif(irq);
    255                 break;
    256         default:
    257                 panic("\nUnhandled Virtual Interrupt request %d\n", irq);
    258                 break;
    259         }
    260 }
    261 
    262253/** @}
    263254 */
Note: See TracChangeset for help on using the changeset viewer.