void __init__ init_idt(uint32 *IDT) { int i; for(i=0;i<16;i++) irq_task_map[i] = NULL; set_irq(IDT,0x00,__ex0); set_irq(IDT,0x01,__ex1); set_irq(IDT,0x02,__ex2); set_irq(IDT,0x03,__ex3); set_irq(IDT,0x04,__ex4); set_irq(IDT,0x05,__ex5); set_irq(IDT,0x06,__ex6); set_irq(IDT,0x07,__ex7); set_irq(IDT,0x08,__ex8); set_irq(IDT,0x09,__ex9); set_irq(IDT,0x0A,__ex10); set_irq(IDT,0x0B,__ex11); set_irq(IDT,0x0C,__ex12); set_irq(IDT,0x0D,__ex13); set_irq(IDT,0x0E,__ex14); set_irq(IDT,0x0F,__ex15); set_irq(IDT,0x10,__ex16); set_irq(IDT,0x11,__ex17); set_irq(IDT,0x12,__ex18); set_irqU(IDT,0x20,__syscall); set_irq(IDT,0x30,__timer_irq); set_irq(IDT,0x31,__irq1); set_irq(IDT,0x32,__irq2); set_irq(IDT,0x33,__irq3); set_irq(IDT,0x34,__irq4); set_irq(IDT,0x35,__irq5); set_irq(IDT,0x36,__irq6); set_irq(IDT,0x37,__irq7); set_irq(IDT,0x38,__irq8); set_irq(IDT,0x39,__irq9); set_irq(IDT,0x3A,__irq10); set_irq(IDT,0x3B,__irq11); set_irq(IDT,0x3C,__irq12); set_irq(IDT,0x3D,__irq13); set_irq(IDT,0x3E,__irq14); set_irq(IDT,0x3F,__irq15); #ifdef __SMP__ set_irq(IDT,0x40,__ipi_cf); set_irq(IDT,0x41,__ipi_tlb); set_irq(IDT,0x42,__ipi_pte); set_irq(IDT,0x43,__ipi_resched); set_irq(IDT,0x44,__ipi_stop); #endif i386lidt((uint32) IDT, 0x3FF); remap_irqs(); unmask_irq(0); unmask_irq(2); }
void init_irqs() { int i; assert( irq_lock == 0 ); remap_irqs( 0x20, 0x28 ); outb_p( PORT_8259M + 1, irq_mask & 0xFF ); outb_p( PORT_8259S + 1, ( irq_mask >> 8 ) & 0xFF ); for ( i = 0; i < IRQ_COUNT; i++ ) handlers[i] = NULL; }
// Инициализация PIC void irq_init() { puts_color("Remapping IRQs...\t\t", 0x0b); remap_irqs(IRQ0_INT, IRQ8_INT); printf_color(0x0a, "IRQ0 = int 0x%x, IRQ8 = int 0x%x\n", IRQ0_INT, IRQ8_INT); }