mirror of
https://github.com/BoredDevNL/BoredOS.git
synced 2026-05-15 10:48:38 +00:00
51 lines
1.1 KiB
C
51 lines
1.1 KiB
C
// Copyright (c) 2023-2026 Chris (boreddevnl)
|
|
// This software is released under the GNU General Public License v3.0. See LICENSE file for details.
|
|
// This header needs to maintain in any file it is present in, as per the GPL license terms.
|
|
#ifndef GDT_H
|
|
#define GDT_H
|
|
|
|
#include <stdint.h>
|
|
|
|
// Segment Selectors
|
|
#define KERNEL_CS 0x08
|
|
#define KERNEL_DS 0x10
|
|
#define USER_CS 0x1B // 0x18 | 3 (RPL 3)
|
|
#define USER_DS 0x23 // 0x20 | 3 (RPL 3)
|
|
#define TSS_SEG 0x28
|
|
|
|
struct gdt_entry {
|
|
uint16_t limit_low;
|
|
uint16_t base_low;
|
|
uint8_t base_middle;
|
|
uint8_t access;
|
|
uint8_t granularity;
|
|
uint8_t base_high;
|
|
} __attribute__((packed));
|
|
|
|
struct tss_entry {
|
|
uint32_t reserved0;
|
|
uint64_t rsp0;
|
|
uint64_t rsp1;
|
|
uint64_t rsp2;
|
|
uint64_t reserved1;
|
|
uint64_t ist1;
|
|
uint64_t ist2;
|
|
uint64_t ist3;
|
|
uint64_t ist4;
|
|
uint64_t ist5;
|
|
uint64_t ist6;
|
|
uint64_t ist7;
|
|
uint64_t reserved2;
|
|
uint16_t reserved3;
|
|
uint16_t iopb_offset;
|
|
} __attribute__((packed));
|
|
|
|
struct gdt_ptr {
|
|
uint16_t limit;
|
|
uint64_t base;
|
|
} __attribute__((packed));
|
|
|
|
void gdt_init(void);
|
|
void tss_set_stack(uint64_t kernel_stack);
|
|
|
|
#endif
|