aboutsummaryrefslogtreecommitdiff
path: root/kernel/idt.c
blob: 010899197486e1ebea8c97d77bd146e4f53bea30 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdint.h>
#include <string.h>
#include "idt.h"
#include "isr.h"
#include "irq.h"

void idt_set_gate(uint8_t idx, uint32_t base, uint16_t sel, uint8_t flags)
{
    idt[idx].base_lo = base & 0xFFFF;
    idt[idx].base_hi = base >> 16;
    idt[idx].sel = sel;
    idt[idx].zero = 0;
    idt[idx].flags = flags;
}

void idt_init(void)
{
    idt_pt.limit = sizeof(idt) - 1;
    idt_pt.base = (uint32_t)&idt;

    memset(&idt, 0, sizeof(idt));

    idt_flush((uint32_t)&idt_pt);
}