Beispiel #1
0
Datei: irq.c Projekt: erik/acedia
void init_irq() {
  remap_irq();

  idt_set_gate(32, (unsigned)irq0, 0x08, 0x8E);
  idt_set_gate(33, (unsigned)irq1, 0x08, 0x8E);
  idt_set_gate(34, (unsigned)irq2, 0x08, 0x8E);
  idt_set_gate(35, (unsigned)irq3, 0x08, 0x8E);
  idt_set_gate(36, (unsigned)irq4, 0x08, 0x8E);
  idt_set_gate(37, (unsigned)irq5, 0x08, 0x8E);
  idt_set_gate(38, (unsigned)irq6, 0x08, 0x8E);
  idt_set_gate(39, (unsigned)irq7, 0x08, 0x8E);
  idt_set_gate(40, (unsigned)irq8, 0x08, 0x8E);
  idt_set_gate(41, (unsigned)irq9, 0x08, 0x8E);
  idt_set_gate(42, (unsigned)irq10, 0x08, 0x8E);
  idt_set_gate(43, (unsigned)irq11, 0x08, 0x8E);
  idt_set_gate(44, (unsigned)irq12, 0x08, 0x8E);
  idt_set_gate(45, (unsigned)irq13, 0x08, 0x8E);
  idt_set_gate(46, (unsigned)irq14, 0x08, 0x8E);
  idt_set_gate(47, (unsigned)irq15, 0x08, 0x8E);
}
Beispiel #2
0
// Name: initialize_idt
// Description: This function will create interrupt descript table and loads it to IDTR
// Parameters: - 
// Return: - 
void initialize_idt()
{
	
	struct idt_table_entry nullEntry;
	int i = 0;

	idtptr.limit = (sizeof(struct idt_table_entry)*256) - 1;
	idtptr.base = (unsigned int)&idt;

	nullEntry = idtDescriptorToidtEntry(getidtDescriptor(0,0,0,0,0,0,0,0,0));

	for(i = 0; i < 255; i++)
		idt[i] = nullEntry;

	idt[0] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_handler_0, 1, 1, 0, 0, 0,6, 0 ));
	idt[1] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_handler_1, 1, 1, 0, 0, 0,6, 0 ));
	idt[2] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_handler_2, 1, 1, 0, 0, 0,6, 0 ));
	idt[3] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_handler_3, 1, 1, 0, 0, 0,6, 0 ));
	idt[4] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_handler_4, 1, 1, 0, 0, 0,6, 0 ));
	idt[5] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_handler_5, 1, 1, 0, 0, 0,6, 0 ));
	idt[6] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_handler_6, 1, 1, 0, 0, 0,6, 0 ));
	idt[7] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_handler_7, 1, 1, 0, 0, 0,6, 0 ));
	idt[8] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_handler_8, 1, 1, 0, 0, 0,6, 0 ));
	idt[9] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_handler_9, 1, 1, 0, 0, 0,6, 0 ));
	idt[10] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_handler_10, 1, 1, 0, 0, 0,6, 0 ));
	idt[11] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_handler_11, 1, 1, 0, 0, 0,6, 0 ));
	idt[12] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_handler_12, 1, 1, 0, 0, 0,6, 0 ));
	idt[13] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_handler_13, 1, 1, 0, 0, 0,6, 0 ));
	idt[14] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_handler_14, 1, 1, 0, 0, 0,6, 0 ));
	idt[15] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_handler_15, 1, 1, 0, 0, 0,6, 0 ));
	idt[16] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_handler_16, 1, 1, 0, 0, 0,6, 0 ));
	idt[17] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_handler_17, 1, 1, 0, 0, 0,6, 0 ));
	idt[18] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_handler_18, 1, 1, 0, 0, 0,6, 0 ));
	idt[19] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_handler_19, 1, 1, 0, 0, 0,6, 0 ));
	idt[20] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_handler_20, 1, 1, 0, 0, 0,6, 0 ));
	idt[21] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_handler_21, 1, 1, 0, 0, 0,6, 0 ));
	idt[22] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_handler_22, 1, 1, 0, 0, 0,6, 0 ));
	idt[23] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_handler_23, 1, 1, 0, 0, 0,6, 0 ));
	idt[24] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_handler_24, 1, 1, 0, 0, 0,6, 0 ));
	idt[25] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_handler_25, 1, 1, 0, 0, 0,6, 0 ));
	idt[26] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_handler_26, 1, 1, 0, 0, 0,6, 0 ));
	idt[27] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_handler_27, 1, 1, 0, 0, 0,6, 0 ));
	idt[28] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_handler_28, 1, 1, 0, 0, 0,6, 0 ));
	idt[29] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_handler_29, 1, 1, 0, 0, 0,6, 0 ));
	idt[30] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_handler_30, 1, 1, 0, 0, 0,6, 0 ));
	idt[31] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_handler_31, 1, 1, 0, 0, 0,6, 0 ));

	remap_irq();

	idt[32] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_request_0, 1, 1, 0, 0, 0,6, 0 ));
	idt[33] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_request_1, 1, 1, 0, 0, 0,6, 0 ));
	idt[34] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_request_2, 1, 1, 0, 0, 0,6, 0 ));
	idt[35] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_request_3, 1, 1, 0, 0, 0,6, 0 ));
	idt[36] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_request_4, 1, 1, 0, 0, 0,6, 0 ));
	idt[37] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_request_5, 1, 1, 0, 0, 0,6, 0 ));
	idt[38] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_request_6, 1, 1, 0, 0, 0,6, 0 ));
	idt[39] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_request_7, 1, 1, 0, 0, 0,6, 0 ));
	idt[40] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_request_8, 1, 1, 0, 0, 0,6, 0 ));
	idt[41] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_request_9, 1, 1, 0, 0, 0,6, 0 ));
	idt[42] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_request_10, 1, 1, 0, 0, 0,6, 0 ));
	idt[43] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_request_11, 1, 1, 0, 0, 0,6, 0 ));
	idt[44] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_request_12, 1, 1, 0, 0, 0,6, 0 ));
	idt[45] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_request_13, 1, 1, 0, 0, 0,6, 0 ));
	idt[46] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_request_14, 1, 1, 0, 0, 0,6, 0 ));
	idt[47] = idtDescriptorToidtEntry(getidtDescriptor(0x08, (unsigned int)interrupt_request_15, 1, 1, 0, 0, 0,6, 0 ));
	
	load_idt();

	__asm__ __volatile__("sti");


}