00001 #ifndef KERNEL_ASM_H 00002 #define KERNEL_ASM_H 00003 00004 typedef struct{ 00005 U16 SegmentLength; //segment length [15:0] 00006 U16 BaseAddress; //base address [15:0] 00007 U8 BaseAddress2; //base address [23:16] 00008 U8 Attribute; //P+DPL+S+TYPE+A 00009 U8 SegmentLength2; //G+D+AVL+segment length [19:16] 00010 U8 BaseAddress3; //base address [31:24] 00011 }DESCRIPTOR; 00012 00013 #define GDT_NULL 0 //0th gdt 00014 #define GDT_CODE 1 //1st gdt 00015 #define GDT_DATA 2 //2nd gdt 00016 #define GDT_STACK 3 //3rd gdt 00017 #define GDT_EXTRA 4 //4th gdt 00018 #define GDT_FLAG 4 //4th gdt 00019 #define GDT_VIDEO 5 //5th gdt 00020 #define GDT_TSS 6 //6th gdt...for tss segment use 00021 #define LDT_BASE 7 //7th gdt...for ldt use 00022 00023 #define KERNEL_CS GDT_CODE 00024 #define KERNEL_DS GDT_DATA 00025 #define KERNEL_SS GDT_STACK 00026 #define KERNEL_ES GDT_EXTRA 00027 #define KERNEL_FS GDT_FLAG 00028 #define KERNEL_GS GDT_VIDEO 00029 00030 #define TASK_CS GDT_CODE 00031 #define TASK_DS GDT_DATA 00032 #define TASK_SS GDT_STACK 00033 #define TASK_ES GDT_EXTRA 00034 #define TASK_FS GDT_FLAG 00035 #define TASK_GS GDT_VIDEO 00036 00037 extern U32 CursorPosition; 00038 extern U8 CharacterAttribute; 00039 extern GATE IdtTable[IDT_SIZE]; 00040 extern DESCRIPTOR GdtTable[128]; 00041 extern INT_HANDLER CpuIntHandlersTable[20]; 00042 extern INT_HANDLER CpuIntExecutorTable[20]; 00043 extern INT_HANDLER IrqHandlersTable[16]; 00044 extern INT_HANDLER IrqExecutorTable[16]; 00045 extern INT_HANDLER SoftwareIntHandlersTable[1]; 00046 extern INT_HANDLER SoftwareIntExecutorTable[1]; 00047 00048 void OutByte(U32 port, U8 value); 00049 U8 InByte(U32 port); 00050 void EnableIrq(U8 IrqNumber); 00051 void DisableIrq(U8 IrqNumber); 00052 00053 void OsTaskSwitchOut(void); //task level task switch called by OsYield() IN OsCore.c 00054 void OsRootTaskStart(void); 00055 00056 #endif
1.5.9