Ejemplo n.º 1
0
Archivo: kernel.c Proyecto: sklccwu/ff
void setup_idt(){
	u32 i;
	u64 entry = IDT_ENTRY(0x8e00,cs(),(u32)udef_fun);

	for(i = 0;i < 256;i++)
		idt[i] = entry;

	struct gdt_ptr ptr = {sizeof(idt),(u32)idt};
	asm volatile("lidtl %0"::"m"(ptr));
}
Ejemplo n.º 2
0
Archivo: kernel.c Proyecto: sklccwu/ff
void init_8259A(){
	outb(0x20,0x11);
	iodelay();
	outb(0xa0,0x11);
	iodelay();
	outb(0x21,0x20);
	iodelay();
	outb(0xa1,0x28);
	iodelay();
	outb(0x21,0x04);
	iodelay(); outb(0xa1,0x02);
	iodelay();
	outb(0x21,0x01);
	iodelay();
	outb(0xa1,0x01);
	iodelay();
	outb(0x21,0xfe);
	iodelay();
	outb(0xa1,0xff);
	iodelay();
	idt[TIMER] = IDT_ENTRY(0x8e00,cs(),(u32)p);
	sti();
}
Ejemplo n.º 3
0
void idt_inicializar() {
    // Excepciones

	// llamar a IDT_ENTRY una vez por cada entrada a configurar (es una macro que no soporta loops)
    IDT_ENTRY(0, 0);
    IDT_ENTRY(1, 0);
    IDT_ENTRY(2, 0);
    IDT_ENTRY(3, 0);
    IDT_ENTRY(4, 0);
    IDT_ENTRY(5, 0);
    IDT_ENTRY(6, 0);
    IDT_ENTRY(7, 0);
    IDT_ENTRY(8, 0);
    IDT_ENTRY(9, 0);
    IDT_ENTRY(10, 0);
    IDT_ENTRY(11, 0);
    IDT_ENTRY(12, 0);
    IDT_ENTRY(13, 0);
    IDT_ENTRY(14, 0);
    IDT_ENTRY(15, 0);
    IDT_ENTRY(16, 0);
    IDT_ENTRY(17, 0);
    IDT_ENTRY(18, 0);
    IDT_ENTRY(19, 0);

    IDT_ENTRY(32, 0);
    IDT_ENTRY(33, 0);
    IDT_ENTRY(70, 3);
       
}
Ejemplo n.º 4
0
Archivo: idt.c Proyecto: facubara/orga2
void idt_inicializar() {
    // Excepciones
    IDT_ENTRY(0);
    IDT_ENTRY(1);
    IDT_ENTRY(2);
    IDT_ENTRY(3);
    IDT_ENTRY(4);
    IDT_ENTRY(5);//BOUND Range Exceeded Exception
    IDT_ENTRY(6);
    IDT_ENTRY(7);
    IDT_ENTRY(8);//Double Fault Exception
    IDT_ENTRY(9);//Coprocessor Segment Overrun
    IDT_ENTRY(10);//invalid TSS
    IDT_ENTRY(11);//Segment Not Present
    IDT_ENTRY(12);//Stack Fault Exception
    IDT_ENTRY(13);
    IDT_ENTRY(14);
    IDT_ENTRY(15);
    IDT_ENTRY(16);
    IDT_ENTRY(17);
    IDT_ENTRY(18);
    IDT_ENTRY(19);

    IDT_ENTRY(32); //reloj
    IDT_ENTRY(33); //teclado

    IDT_ENTRY(70); // 0x46    
    idt[70].attr = (unsigned short)0XEE00; //cambio el dpl 
}
Ejemplo n.º 5
0
void idt_inicializar() {
    // Excepciones
        IDT_ENTRY(0);
        IDT_ENTRY(1);
        IDT_ENTRY(2);
        IDT_ENTRY(3);
        IDT_ENTRY(4);
        IDT_ENTRY(5);
        IDT_ENTRY(6);
        IDT_ENTRY(7);
        IDT_ENTRY(8);
        IDT_ENTRY(9);
        IDT_ENTRY(10);
        IDT_ENTRY(11);
        IDT_ENTRY(12);
        IDT_ENTRY(13);
        IDT_ENTRY(14);
        IDT_ENTRY(15);
        IDT_ENTRY(16);
        IDT_ENTRY(17);
        IDT_ENTRY(18);
        IDT_ENTRY(19);
		IDT_ENTRY(32); //Reloj
		IDT_ENTRY(33); //Teclado
		IDT_ENTRY_SOFT(102); //Teclado
}
Ejemplo n.º 6
0
    (uint16_t)(((uintptr_t)(offset) >> 16) & 0xFFFF), \
    (uint32_t)(((uintptr_t)(offset) >> 32) & 0xFFFFFFFF), \
    0 \
}
#endif

#define IDT_INTERRUPT_GATE 0xE
#define IDT_TRAP_GATE 0xF
#define IDT_RING0 (0 << 5)
#define IDT_RING3 (3 << 5)
#define IDT_PRESENT (1 << 7)

extern "C" {

idt_entry idt[] = {
    IDT_ENTRY(isr_0, 0x8, IDT_INTERRUPT_GATE | IDT_RING0 | IDT_PRESENT),
    IDT_ENTRY(isr_1, 0x8, IDT_INTERRUPT_GATE | IDT_RING0 | IDT_PRESENT),
    IDT_ENTRY(isr_2, 0x8, IDT_INTERRUPT_GATE | IDT_RING0 | IDT_PRESENT),
    IDT_ENTRY(isr_3, 0x8, IDT_INTERRUPT_GATE | IDT_RING0 | IDT_PRESENT),
    IDT_ENTRY(isr_4, 0x8, IDT_INTERRUPT_GATE | IDT_RING0 | IDT_PRESENT),
    IDT_ENTRY(isr_5, 0x8, IDT_INTERRUPT_GATE | IDT_RING0 | IDT_PRESENT),
    IDT_ENTRY(isr_6, 0x8, IDT_INTERRUPT_GATE | IDT_RING0 | IDT_PRESENT),
    IDT_ENTRY(isr_7, 0x8, IDT_INTERRUPT_GATE | IDT_RING0 | IDT_PRESENT),
    IDT_ENTRY(isr_8, 0x8, IDT_INTERRUPT_GATE | IDT_RING0 | IDT_PRESENT),
    IDT_ENTRY(isr_9, 0x8, IDT_INTERRUPT_GATE | IDT_RING0 | IDT_PRESENT),
    IDT_ENTRY(isr_10, 0x8, IDT_INTERRUPT_GATE | IDT_RING0 | IDT_PRESENT),
    IDT_ENTRY(isr_11, 0x8, IDT_INTERRUPT_GATE | IDT_RING0 | IDT_PRESENT),
    IDT_ENTRY(isr_12, 0x8, IDT_INTERRUPT_GATE | IDT_RING0 | IDT_PRESENT),
    IDT_ENTRY(isr_13, 0x8, IDT_INTERRUPT_GATE | IDT_RING0 | IDT_PRESENT),
    IDT_ENTRY(isr_14, 0x8, IDT_INTERRUPT_GATE | IDT_RING0 | IDT_PRESENT),
    IDT_ENTRY(0, 0, 0),
Ejemplo n.º 7
0
void idt_inicializar() {
    // Excepciones
    IDT_ENTRY(0x00,0);
    IDT_ENTRY(0x01,0);
    IDT_ENTRY(0x02,0);
    IDT_ENTRY(0x03,0);
    IDT_ENTRY(0x04,0);
    IDT_ENTRY(0x05,0);
    IDT_ENTRY(0x06,0);
    IDT_ENTRY(0x07,0);
    IDT_ENTRY(0x08,0);
    IDT_ENTRY(0x09,0);
    IDT_ENTRY(0x0A,0);
    IDT_ENTRY(0x0B,0);
    IDT_ENTRY(0x0C,0);
    IDT_ENTRY(0x0D,0);
    IDT_ENTRY(0x0E,0);
    IDT_ENTRY(0x0F,0);
    IDT_ENTRY(0x10,0);
    IDT_ENTRY(0x11,0);
    IDT_ENTRY(0x12,0);
    IDT_ENTRY(0x13,0);

    IDT_ENTRY(0x20,0);
    IDT_ENTRY(0x21,0);
    IDT_ENTRY(0x46,3);

	// llamar a IDT_ENTRY una vez por cada entrada a configurar (es una macro que no soporta loops)
}
Ejemplo n.º 8
0
    idt[numero].segsel = (unsigned short) 0x18;      /*porque hay un 18 aca??*, para decir que es el tecero de la gdt? */                                                           \
    idt[numero].attr = (unsigned short) IDT_PRESENT | IDT_USR0 | IDT_INTERRUPT | IDT_32BITS;                                                                 \
    idt[numero].offset_16_31 = (unsigned short) ((unsigned int)(&_isr ## numero) >> 16 /*& (unsigned int) 0xFFFF*/);

/*comente el *& (unsigned int) 0xFFFF porque me arecio que no servia para nada, lo dej por si me equivoco*/

#define IDT_ENTRYUSR(numero)  /*es un descriptor de  interrupcion de nivel usuario*/                                                                                      \
    idt[numero].offset_0_15 = (unsigned short) ((unsigned int)(&_isr ## numero) /*& (unsigned int) 0xFFFF*/);        \
    idt[numero].segsel = (unsigned short) 0x18;      /*porque hay un 18 aca?? para decir que es el tecero de la gdt? */                                                            \
    idt[numero].attr = (unsigned short) IDT_PRESENT | IDT_USR3 | IDT_INTERRUPT | IDT_32BITS;                                                                \
    idt[numero].offset_16_31 = (unsigned short) ((unsigned int)(&_isr ## numero) >> 16 /*& (unsigned int) 0xFFFF*/);


void idt_inicializar() {
    // Excepciones
    IDT_ENTRY(0)
    IDT_ENTRY(1)
    IDT_ENTRY(2)
    IDT_ENTRY(3)
    IDT_ENTRY(4)
    IDT_ENTRY(5)
    IDT_ENTRY(6)
    IDT_ENTRY(7)
    IDT_ENTRY(8)
    IDT_ENTRY(9)
    IDT_ENTRY(10)
    IDT_ENTRY(11)
    IDT_ENTRY(12)
    IDT_ENTRY(13)
    IDT_ENTRY(14)
    IDT_ENTRY(16)
Ejemplo n.º 9
0
void idt_inicializar() {
    // Excepciones
    IDT_ENTRY(0);
    IDT_ENTRY(1);
    IDT_ENTRY(2);
    IDT_ENTRY(3);
    IDT_ENTRY(4);
    IDT_ENTRY(5);
    IDT_ENTRY(6);
    IDT_ENTRY(7);
    IDT_ENTRY(8);
    IDT_ENTRY(9);
    IDT_ENTRY(10);
    IDT_ENTRY(11);
    IDT_ENTRY(12);
    IDT_ENTRY(13);
    IDT_ENTRY(14);
    IDT_ENTRY(15);
    IDT_ENTRY(16);
    IDT_ENTRY(17);
    IDT_ENTRY(18);
    IDT_ENTRY(19);
    IDT_ENTRY(32);
    IDT_ENTRY(33);
    IDT_ENTRY2(70); // 0x46 DPL = 11
}