25 lines
1 KiB
C
25 lines
1 KiB
C
#ifndef GDT_H
|
|
#define GDT_H
|
|
|
|
#include <stdint.h>
|
|
|
|
// Структура одного дескриптора сегмента (8 байт)
|
|
struct gdt_entry {
|
|
uint16_t limit_low; // Младшие 16 бит лимита
|
|
uint16_t base_low; // Младшие 16 бит базы
|
|
uint8_t base_middle; // Следующие 8 бит базы
|
|
uint8_t access; // Байт доступа (права, кольцо защиты)
|
|
uint8_t granularity; // Гранулярность и старшие 4 бита лимита
|
|
uint8_t base_high; // Старшие 8 бит базы
|
|
} __attribute__((packed));
|
|
|
|
// Структура указателя для инструкции lgdt (6 байт)
|
|
struct gdt_ptr {
|
|
uint16_t limit; // Размер всей GDT в байтах минус 1
|
|
uint32_t base; // Физический адрес начала массива gdt_entry
|
|
} __attribute__((packed));
|
|
|
|
// Функции для вызова из ядра
|
|
void gdt_init(void);
|
|
|
|
#endif
|