Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

idt.c (1285B)


      1 /*#include <stdint.h>
      2 #include "../include/io.h"
      3 #include "../include/idt.h"
      4 
      5 struct interrupt_frame {
      6     uint64_t r15, r14, r13, r12, r11, r10, r9, r8, rbp, rdi, rsi, rdx, rcx, rbx, rax;
      7     uint64_t vec, error_code;
      8     uint64_t rip, cs, rflags, rsp, ss;
      9 };
     10 
     11 struct idt_entry {
     12     uint16_t offset_low;
     13     uint16_t sel;
     14     uint8_t ist;
     15     uint8_t types;
     16     uint16_t offset_mid;
     17     uint32_t offset_high;
     18     uint32_t zero;
     19 }__attribute__((packed)) idte_e[256];
     20 
     21 struct idtr {
     22     uint16_t limit;
     23     uint64_t base;
     24 }__attribute__((packed));
     25 
     26 struct idtr idtr_f;
     27 
     28 void set_entry (int vec, uint64_t idt_handler) {
     29     idte_e[vec].offset_low = (idt_handler) & 0xFFFF;
     30     idte_e[vec].offset_mid = (idt_handler >> 16) & 0xFFFF;
     31     idte_e[vec].offset_high = (idt_handler >> 32);
     32     idte_e[vec].sel = 0x08;
     33     idte_e[vec].ist = 0;
     34     idte_e[vec].types = 0x8E;
     35     idte_e[vec].zero = 0;
     36 }
     37 
     38 void load_idt (int vec, uint64_t idt_handler) {
     39 
     40     for (int i = 0; i < 256; i++)
     41             idte_e[i] = (struct idt_entry){0};
     42 
     43     set_entry(vec, idt_handler);
     44 
     45     idtr_f.limit = sizeof(idte_e) - 1;
     46     idtr_f.base = (uint64_t)&idte_e;
     47 
     48     __asm__ volatile ("lidt %0" : : "m" (idtr_f));
     49 }
     50 
     51 void interrupt_handler (struct interrupt_frame *frame) {
     52     if (frame->vec == 0) {
     53 
     54     }
     55 }*/