#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
