#ifndef TYPES_H #define TYPES_H #include "consts.h" typedef unsigned char u8_t; typedef unsigned short u16_t; typedef unsigned long u32_t; typedef unsigned long long u64_t; typedef u32_t reg_t; /* Defines a GDT entry. We say packed, because it prevents the * compiler from doing things that it thinks is best: Prevent * compiler "optimization" by packing */ struct segdesc_s { /* segment descriptor for protected mode */ u16_t limit_low; u16_t base_low; u8_t base_middle; u8_t access; /* |P|DL|1|X|E|R|A| */ u8_t granularity; /* |G|X|0|A|LIMT| */ u8_t base_high; } __attribute__((packed));; struct gdt_ptr { unsigned short limit; struct segdesc_s *base; } __attribute__((packed)); struct tss_s { reg_t backlink; reg_t sp0; /* stack pointer to use during interrupt */ reg_t ss0; /* " segment " " " " */ reg_t sp1; reg_t ss1; reg_t sp2; reg_t ss2; reg_t cr3; reg_t ip; reg_t flags; reg_t ax; reg_t cx; reg_t dx; reg_t bx; reg_t sp; reg_t bp; reg_t si; reg_t di; reg_t es; reg_t cs; reg_t ss; reg_t ds; reg_t fs; reg_t gs; reg_t ldt; u16_t trap; u16_t iobase; }; #endif /* #ifndef TYPES_H */