Esempio n. 1
0
//! sets new interrupt vector
void setvect(int intno, void(&vect) (), int flags) {

	//! install interrupt handler! This overwrites prev interrupt descriptor
	i86_install_ir(intno, (uint16_t)(I86_IDT_DESC_PRESENT | I86_IDT_DESC_BIT32 | flags), 0x8, vect);
}
Esempio n. 2
0
void i86_irq_initialize(uint16_t codeSel) {
  for(uint8_t i = 0; i < IRQ_COUNT; i++)
    {
      irq_routines[i] = 0;
    }

  // Remap IRQ 0-15 to interrupts 32-47
  outport(IRQ_PRIMARY_PIC_COMMAND_PORT, IRQ_ICW1);
  outport(IRQ_SECONDARY_PIC_COMMAND_PORT, IRQ_ICW1);

  outport(IRQ_PRIMARY_PIC_DATA_PORT, IRQ_ICW2_PRIMARY_PIC);
  outport(IRQ_SECONDARY_PIC_DATA_PORT, IRQ_ICW2_SECONDARY_PIC);

  outport(IRQ_PRIMARY_PIC_DATA_PORT, IRQ_ICW3_PRIMARY_PIC);
  outport(IRQ_SECONDARY_PIC_DATA_PORT, IRQ_ICW3_SECONDARY_PIC);

  outport(IRQ_PRIMARY_PIC_DATA_PORT, IRQ_ICW4);
  outport(IRQ_SECONDARY_PIC_DATA_PORT, IRQ_ICW4);

  // Zero data port
  outport(IRQ_PRIMARY_PIC_DATA_PORT, 0);
  outport(IRQ_SECONDARY_PIC_DATA_PORT, 0);

  
  uint16_t _flags = I86_IDT_DESC_PRESENT + I86_IDT_DESC_RING0 + I86_IDT_DESC_INT32;
  // Set up default IDT for IRQs
  i86_install_ir(32, _flags, codeSel, (I86_IRQ_HANDLER) irq0);
  i86_install_ir(33, _flags, codeSel, (I86_IRQ_HANDLER) irq1);
  i86_install_ir(34, _flags, codeSel, (I86_IRQ_HANDLER) irq2);
  i86_install_ir(35, _flags, codeSel, (I86_IRQ_HANDLER) irq3);
  i86_install_ir(36, _flags, codeSel, (I86_IRQ_HANDLER) irq4);
  i86_install_ir(37, _flags, codeSel, (I86_IRQ_HANDLER) irq5);
  i86_install_ir(38, _flags, codeSel, (I86_IRQ_HANDLER) irq6);
  i86_install_ir(39, _flags, codeSel, (I86_IRQ_HANDLER) irq7);
  i86_install_ir(40, _flags, codeSel, (I86_IRQ_HANDLER) irq8);
  i86_install_ir(41, _flags, codeSel, (I86_IRQ_HANDLER) irq9);
  i86_install_ir(42, _flags, codeSel, (I86_IRQ_HANDLER) irq10);
  i86_install_ir(43, _flags, codeSel, (I86_IRQ_HANDLER) irq11);
  i86_install_ir(44, _flags, codeSel, (I86_IRQ_HANDLER) irq12);
  i86_install_ir(45, _flags, codeSel, (I86_IRQ_HANDLER) irq13);
  i86_install_ir(46, _flags, codeSel, (I86_IRQ_HANDLER) irq14);
  i86_install_ir(47, _flags, codeSel, (I86_IRQ_HANDLER) irq15);
}
Esempio n. 3
0
//! sets new interrupt vector
void setvect (int intno, void (far *vect) ( ) ) {

	//! install interrupt handler! This overwrites prev interrupt descriptor
	i86_install_ir (intno, I86_IDT_DESC_PRESENT | I86_IDT_DESC_BIT32,
		0x8, vect);
}