Kintsugi OS 0.2.0
x86 Monolithic OS
Loading...
Searching...
No Matches
idt.h
Go to the documentation of this file.
1#ifndef IDT_H
2#define IDT_H
3
4#include "../kklibc/ctypes.h"
5
6/* Селекторы сегментов */
7#define KERNEL_CS 0x08
8#define IDT_ENTRIES 256
9
10/* Как определяется каждый элемент прерывания (обработчик) */
11typedef struct {
12 u16 low_offset; /* Младшие 16 бит адреса функции обработчика */
13 u16 sel; /* Селектор сегментов ядра */
15 /*
16 Бит 7 первого байта: "Присутствует прерывание"
17 Биты 6-5: Уровень привилегий вызывающего абонента (0=ядро..3=пользователь)
18 Бит 4: Устанавливается равным 0 для элементов прерывания
19 Биты 3-0: биты 1110 = десятичное число 14 = "32-разрядный элемент прерывания"*/
21 u16 high_offset; /* Higher 16 bits of handler function address */
22} __attribute__((packed)) idt_gate_t;
23
24/* Указатель на массив обработчиков прерывания.
25 Ассемблерная инструкция 'lidt' читает это. */
26typedef struct {
29} __attribute__((packed)) idt_register_t;
30
31extern idt_gate_t idt[IDT_ENTRIES];
32extern idt_register_t idt_reg;
33
40void set_idt_gate(int n, u32 handler);
41
46void set_idt();
47
48#endif
unsigned int u32
Definition ctypes.h:11
unsigned short u16
Definition ctypes.h:13
unsigned char u8
Definition ctypes.h:15
#define IDT_ENTRIES
Definition idt.h:8
idt_gate_t idt[IDT_ENTRIES]
Definition idt.c:3
idt_register_t idt_reg
Definition idt.c:4
void set_idt_gate(int n, u32 handler)
Заготовка обработчика IDT.
Definition idt.c:6
void set_idt()
Заготовка IDT.
Definition idt.c:14
Definition idt.h:11
u32 base
Definition idt.h:28
u8 always0
Definition idt.h:14
u16 high_offset
Definition idt.h:21
u16 low_offset
Definition idt.h:12
u16 sel
Definition idt.h:13
u16 limit
Definition idt.h:27
u8 flags
Definition idt.h:20