#ifndef _SYSTEM_DATA_STRUCTS_H
#define _SYSTEM_DATA_STRUCTS_H
#define SDT_AVL286TSS 0x1
#define SDT_LDT 0x2
#define SDT_BSY286TSS 0x3
#define SDT_CALLGT 0x4
#define SDT_TASKGT 0x5
#define SDT_286INTGT 0x6
#define SDT_286TRAPGT 0x7
#define SDT_AVL386TSS 0x9
#define SDT_BSY386TSS 0xb
#define SDT_386CALLGT 0xc
#define SDT_386INTGT 0xe
#define SDT_386TRAPGT 0xf
struct descr_data_struct {
unsigned type : 1;
union {
struct {
unsigned system_type : 4;
};
struct {
unsigned accessed : 1;
unsigned segment_type : 1;
union {
struct {
unsigned writable : 1;
unsigned expand_down : 1;
};
struct {
unsigned readable : 1;
unsigned conforming : 1;
};
};
};
};
unsigned dpl : 2;
unsigned present : 1;
union {
struct {
union {
struct {
unsigned long base;
unsigned limit : 20;
unsigned granularity : 1;
unsigned avl : 1;
union {
unsigned x : 1;
unsigned big : 1;
unsigned def : 1;
};
};
struct {
unsigned short selector;
union {
struct {
unsigned long offset;
union {
unsigned dword_count : 5;
};
};
};
};
};
};
};
};
struct sel_data_struct {
unsigned rpl : 2;
unsigned table_ind : 1;
unsigned index : 13;
};
struct linear_address_data_struct {
unsigned dir : 10;
unsigned page : 10;
unsigned offset : 12;
};
struct page_table_entry_data_struct {
unsigned present : 1;
union {
struct {
unsigned rw : 1;
unsigned us : 1;
unsigned accessed : 1;
unsigned dirty : 1;
unsigned avail : 3;
unsigned long page_frame_addr;
};
};
};
struct tss_data_struct {
unsigned long pdbr;
unsigned short ldt;
unsigned short ss0;
unsigned long esp0;
unsigned short ss1;
unsigned long esp1;
unsigned short ss2;
unsigned long esp2;
unsigned trap : 1;
unsigned short iomap_base;
unsigned long eax;
unsigned long ebx;
unsigned long ecx;
unsigned long edx;
unsigned long ebp;
unsigned long esp;
unsigned long esi;
unsigned long edi;
unsigned short cs;
unsigned short ds;
unsigned short es;
unsigned short fs;
unsigned short gs;
unsigned short ss;
unsigned long eflags;
unsigned long eip;
unsigned short previous;
};
struct error_code_data_struct {
unsigned ext : 1;
unsigned idt : 1;
unsigned table_ind : 1;
unsigned index : 13;
};
struct page_fault_error_code_data_struct {
unsigned cause : 1;
unsigned access : 1;
unsigned mode : 1;
};
#endif