Changeset 7c34b28f in mainline for kernel


Ignore:
Timestamp:
2011-01-07T15:10:52Z (15 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
61bfc370
Parents:
3d5e190 (diff), acc7ce4 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

merge small NE2000 and interrupt handling improvements

  • introduce new uspace interrupt controller drivers
    • i8259
    • APIC (only a non-functional stub yet)
  • do not pre-enable NE2000's IRQ in kernel, but use the above drivers (solves the "spurious interrupt" issue, but breaks SMP functionality because of the non-functional APIC driver)
Location:
kernel/arch
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/amd64/include/interrupt.h

    r3d5e190 r7c34b28f  
    7474extern void (* enable_irqs_function)(uint16_t);
    7575extern void (* eoi_function)(void);
     76extern const char *irqs_info;
    7677
    7778extern void interrupt_init(void);
  • kernel/arch/amd64/src/amd64.c

    r3d5e190 r7c34b28f  
    235235#endif
    236236       
    237         /*
    238          * This nasty hack should also go away ASAP.
    239          */
    240         trap_virtual_enable_irqs(1 << IRQ_DP8390);
     237        if (irqs_info != NULL)
     238                sysinfo_set_item_val(irqs_info, NULL, true);
     239       
    241240        sysinfo_set_item_val("netif.dp8390.inr", NULL, IRQ_DP8390);
    242241}
  • kernel/arch/amd64/src/interrupt.c

    r3d5e190 r7c34b28f  
    6262void (* enable_irqs_function)(uint16_t irqmask) = NULL;
    6363void (* eoi_function)(void) = NULL;
     64const char *irqs_info = NULL;
    6465
    6566void istate_decode(istate_t *istate)
  • kernel/arch/ia32/include/interrupt.h

    r3d5e190 r7c34b28f  
    7474extern void (* enable_irqs_function)(uint16_t);
    7575extern void (* eoi_function)(void);
     76extern const char *irqs_info;
    7677
    7778extern void interrupt_init(void);
  • kernel/arch/ia32/src/drivers/i8259.c

    r3d5e190 r7c34b28f  
    8686        disable_irqs_function = pic_disable_irqs;
    8787        eoi_function = pic_eoi;
     88        irqs_info = "i8259";
    8889
    8990        pic_disable_irqs(0xffff);               /* disable all irq's */
  • kernel/arch/ia32/src/ia32.c

    r3d5e190 r7c34b28f  
    193193#endif
    194194       
    195         /*
    196          * This nasty hack should also go away ASAP.
    197          */
    198         trap_virtual_enable_irqs(1 << IRQ_DP8390);
     195        if (irqs_info != NULL)
     196                sysinfo_set_item_val(irqs_info, NULL, true);
     197       
    199198        sysinfo_set_item_val("netif.dp8390.inr", NULL, IRQ_DP8390);
    200199}
  • kernel/arch/ia32/src/interrupt.c

    r3d5e190 r7c34b28f  
    6262void (* enable_irqs_function)(uint16_t irqmask) = NULL;
    6363void (* eoi_function)(void) = NULL;
     64const char *irqs_info = NULL;
    6465
    6566void istate_decode(istate_t *istate)
  • kernel/arch/ia32/src/smp/apic.c

    r3d5e190 r7c34b28f  
    178178        disable_irqs_function = io_apic_disable_irqs;
    179179        eoi_function = l_apic_eoi;
     180        irqs_info = "apic";
    180181       
    181182        /*
Note: See TracChangeset for help on using the changeset viewer.