summaryrefslogtreecommitdiffstats
path: root/arch/x86_64/hal/gdt.h
blob: 7fb7dfcf82da4d0d0d711e4719a22eef394d31b1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#ifndef _JOVE_x86_64_HAL_GDT_H
#define _JOVE_x86_64_HAL_GDT_H 1

#include <stddef.h>
#include <stdint.h>
#include "jove.h"

enum {
    GDT_KERNEL_NULL = 0,
    GDT_KERNEL_CODE,
    GDT_KERNEL_DATA,
    GDT_USER_NULL,
    GDT_USER_DATA,
    GDT_USER_CODE,
    GDT_TSS_LO,
    GDT_TSS_HI
};

#define GDT_OFFSET(i) (i << 3)

struct gdt_entry
{
    uint16_t limit_0_15;
    uint16_t base_0_15;
    uint8_t base_16_23;
    uint8_t type_flg;
    uint8_t limit_flg;
    uint8_t base_24_31;
};

struct tss
{
    uint32_t rsv0;
    uint64_t rsp[3];
    uint64_t rsv1;
    uint64_t ist[7];
    uint64_t rsv2;
    uint16_t rsv3;
    uint16_t iopb;
} PACKED;

struct gdt_descriptor
{
    uint16_t limit;
    uint64_t base;
} PACKED;

#endif