|
Turnstone Operating System
|
cpu segment descriptors for long mode. More...
#include <types.h>Classes | |
| struct | descriptor_gdt_null |
| null segment descriptor for gdt More... | |
| struct | descriptor_gdt_code |
| code segment descriptor for gdt More... | |
| struct | descriptor_gdt_data |
| data segment descriptor for gdt More... | |
| struct | descriptor_gdt |
| general segment descriptor for gdt More... | |
| struct | descriptor_idt |
| idt table descriptor More... | |
| struct | descriptor_register |
| common register value for gdtr, idtr, ldtr, tr More... | |
Macros | |
| #define | ___CPU_DESCRIPTOR_H 0 |
| #define | DPL_RING0 0 |
| #define | DPL_RING1 1 |
| #define | DPL_RING2 2 |
| #define | DPL_RING3 3 |
| #define | DPL_KERNEL DPL_RING0 |
| #define | DPL_USER DPL_RING3 |
| #define | KERNEL_CODE_SEG 0x08 |
| #define | KERNEL_DATA_SEG 0x10 |
| #define | KERNEL_TSS_SEG 0x18 |
| #define | DESCRIPTOR_BUILD_GDT_NULL_SEG(seg) |
| null segment builder macro | |
| #define | DESCRIPTOR_BUILD_GDT_CODE_SEG(seg, DPL) |
| code segment builder macro with privilage level | |
| #define | DESCRIPTOR_BUILD_GDT_DATA_SEG(seg, DPL) |
| data segment builder macro | |
| #define | IDT_BASE_ADDRESS (1 << 20) |
| #define | SYSTEM_SEGMENT_TYPE_IDT 0x02 |
| #define | SYSTEM_SEGMENT_TYPE_TSS_A 0x09 |
| #define | SYSTEM_SEGMENT_TYPE_TSS_B 0x0B |
| #define | SYSTEM_SEGMENT_TYPE_GATE_CALL 0x0C |
| #define | SYSTEM_SEGMENT_TYPE_GATE_INT 0x0E |
| #define | SYSTEM_SEGMENT_TYPE_GATE_TRAP 0x0F |
| #define | DESCRIPTOR_BUILD_IDT_SEG(IE, FUNC_ADDR, SELECTOR, IST, DPL) |
| assign a function to interrupt nomber | |
Typedefs | |
| typedef struct descriptor_gdt_null | descriptor_gdt_null_t |
| struct short hand | |
| typedef struct descriptor_gdt_code | descriptor_gdt_code_t |
| struct short hand | |
| typedef struct descriptor_gdt_data | descriptor_gdt_data_t |
| struct short hand | |
| typedef struct descriptor_gdt | descriptor_gdt_t |
| struct short hand | |
| typedef struct descriptor_idt | descriptor_idt_t |
| struct short hand | |
| typedef struct descriptor_register | descriptor_register_t |
| struct short hand | |
Functions | |
| uint8_t | descriptor_build_gdt_register (void) |
| builds a default gdt | |
| uint8_t | descriptor_build_idt_register (void) |
| builds a default idt | |
| uint8_t | descriptor_build_ap_descriptors_register (void) |
| builds gdt and tss for application processor | |
Variables | |
| descriptor_register_t * | GDT_REGISTER |
| static address of gdt for lgdtr/sgdtr | |
| descriptor_register_t * | IDT_REGISTER |
| static address of idt for lidtr/sidtr | |
cpu segment descriptors for long mode.
This work is licensed under TURNSTONE OS Public License. Please read and understand latest version of Licence.
| #define ___CPU_DESCRIPTOR_H 0 |
prevent duplicate header error macro
| #define DESCRIPTOR_BUILD_GDT_CODE_SEG | ( | seg, | |
| DPL ) |
code segment builder macro with privilage level
| seg | segment to build as code |
| DPL | privilage level to build as code |
| #define DESCRIPTOR_BUILD_GDT_DATA_SEG | ( | seg, | |
| DPL ) |
data segment builder macro
| seg | segment to build as data |
| #define DESCRIPTOR_BUILD_GDT_NULL_SEG | ( | seg | ) |
null segment builder macro
| seg | segment to build as null |
| #define DESCRIPTOR_BUILD_IDT_SEG | ( | IE, | |
| FUNC_ADDR, | |||
| SELECTOR, | |||
| IST, | |||
| DPL ) |
assign a function to interrupt nomber
| [in] | IE | interrupt vector |
| [in] | FUNC_ADDR | interrupt vector's function address |
| [in] | SELECTOR | gdt code selector for interrupt vector |
| [in] | IST | ist number for vector, if ist is zero not ist mechanism, else use ist at tss |
| [in] | DPL | privilage level of interrupt |
| #define DPL_KERNEL DPL_RING0 |
a short hand for ring0 aka kernel space
| #define DPL_RING0 0 |
cpu privilage level 0 for kernel space
| #define DPL_RING1 1 |
cpu privilage level 1 for kernel additional space
| #define DPL_RING2 2 |
cpu privilage level 2 for kernel additional space
| #define DPL_RING3 3 |
cpu privilage level 3 for user space
| #define DPL_USER DPL_RING3 |
a short hand for ring3 aka user space
| #define KERNEL_CODE_SEG 0x08 |
hard coded gdt code segment value
| #define KERNEL_DATA_SEG 0x10 |
hard coded gdt data segment value
| #define KERNEL_TSS_SEG 0x18 |
hard coded gdt tss segment value
| #define SYSTEM_SEGMENT_TYPE_GATE_CALL 0x0C |
Call Gate segment type
| #define SYSTEM_SEGMENT_TYPE_GATE_INT 0x0E |
Interrupt Gate segment type
| #define SYSTEM_SEGMENT_TYPE_GATE_TRAP 0x0F |
Trap Gate segment type
| #define SYSTEM_SEGMENT_TYPE_IDT 0x02 |
IDT segment type
| #define SYSTEM_SEGMENT_TYPE_TSS_A 0x09 |
Active TSS segment type
| #define SYSTEM_SEGMENT_TYPE_TSS_B 0x0B |
Busy TSS segment type
| uint8_t descriptor_build_ap_descriptors_register | ( | void | ) |
builds gdt and tss for application processor
| uint8_t descriptor_build_gdt_register | ( | void | ) |
builds a default gdt
| uint8_t descriptor_build_idt_register | ( | void | ) |
builds a default idt