OurOS 0.1
Operating System built by McGill Students
 
Loading...
Searching...
No Matches
idt.h
Go to the documentation of this file.
1#ifndef _CPU_IDT_H
2#define _CPU_IDT_H
4#include <stdint.h>
6// Flags (strikingly similar to GDT)
7#define IDT_PRESENT 0x80
8#define IDT_RING_0 0x00
9#define IDT_RING_1 0x20
10#define IDT_RING_2 0x40
11#define IDT_RING_3 0x60
12#define IDT_INT_GATE 0x0E
13#define IDT_TRAP_GATE 0x0F
14
15#define IDT_KTRAP_GATE (IDT_PRESENT + IDT_RING_0 + IDT_TRAP_GATE)
16#define IDT_KINT_GATE (IDT_PRESENT + IDT_RING_0 + IDT_INT_GATE)
17
18#define IDT_ENTRY_CREATE(addr, selector, ist, flags) { \
19 (addr) & 0xffff, /* 16-bit address (low) */ \
20 (selector) & 0xffff, /* 16-bit Code Selector */ \
21 (ist) & 0xff, /* Interrupt Stack Table */ \
22 (flags) & 0xff, /* Flags (one byte) */ \
23 (addr) >> 16 & 0xffff, /* Second two low bytes */ \
24 (addr) >> 32, /* Four high bytes */ \
25 0, /* Reserved (four bytes) */ \
26}
27
28// A IDT is necessary to handle interrupts
38
39// Represents the contents of the IDTR in memory
44
45// The data structure placed on the stack
46// by the CPU when an ISR is invoked
54
55// Represents the state of the CPU following an interrupt
75
76
77// Advertise the kernel's idt to the CPU
78void cpu_idt_bind(void);
79// Describe the currently loaded IDT.
80void cpu_idt_describe(char *buf, uint64_t bufsz);
81
82static inline void enable_interrupts() {
83 asm("sti");
84}
85
86static inline void disable_interrupts() {
87 asm("cli");
88}
89
90#endif
static void enable_interrupts()
Definition idt.h:82
static void disable_interrupts()
Definition idt.h:86
void cpu_idt_bind(void)
Definition idt.c:11
struct cpu_idt_iframe __attribute__
void cpu_idt_describe(char *buf, uint64_t bufsz)
Definition idt.c:33
unsigned short uint16_t
Definition stdint.h:5
unsigned int uint32_t
Definition stdint.h:6
unsigned long uint64_t
Definition stdint.h:7
unsigned char uint8_t
Definition stdint.h:4
Definition idt.h:29
uint16_t selector
Definition idt.h:31
uint8_t flags
Definition idt.h:33
uint8_t ist
Definition idt.h:32
uint16_t address_low
Definition idt.h:30
uint32_t address_high
Definition idt.h:35
uint16_t address_mid
Definition idt.h:34
uint32_t reserved
Definition idt.h:36
Definition idt.h:47
uint64_t rsp
Definition idt.h:51
uint64_t ss
Definition idt.h:52
uint64_t rflags
Definition idt.h:50
uint64_t cs
Definition idt.h:49
uint64_t rip
Definition idt.h:48
Definition idt.h:56
struct cpu_idt_iframe iframe
Definition idt.h:73
uint64_t vector
Definition idt.h:71
uint64_t rdi
Definition idt.h:66
uint64_t error_code
Definition idt.h:72
uint64_t rbx
Definition idt.h:69
uint64_t r15
Definition idt.h:57
uint64_t rdx
Definition idt.h:67
uint64_t rax
Definition idt.h:70
uint64_t rsi
Definition idt.h:65
uint64_t r12
Definition idt.h:60
uint64_t r8
Definition idt.h:64
uint64_t r10
Definition idt.h:62
uint64_t rcx
Definition idt.h:68
uint64_t r9
Definition idt.h:63
uint64_t r11
Definition idt.h:61
uint64_t r14
Definition idt.h:58
uint64_t r13
Definition idt.h:59
Definition idt.h:40
uint64_t base
Definition idt.h:42
uint16_t limit
Definition idt.h:41