X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Farch%2Fx86%2Fdesctab.asm;h=737570b01bf837d867f4d004f26d62d3ab7ec652;hb=b3fa9a08edcbc459bd8e9df73186e292470ebfc3;hp=2d0a2329d0b0a1118fb222d42cc1fee2e730c4cc;hpb=b37a72724f8584364a3b0f3c57882e803155e499;p=tpg%2Facess2.git diff --git a/Kernel/arch/x86/desctab.asm b/Kernel/arch/x86/desctab.asm index 2d0a2329..737570b0 100644 --- a/Kernel/arch/x86/desctab.asm +++ b/Kernel/arch/x86/desctab.asm @@ -3,17 +3,17 @@ ; desctab.asm [BITS 32] -%if ARCH == "i386" -MAX_CPUS equ 1 -%else +%if USE_MP MAX_CPUS equ 8 +%else +MAX_CPUS equ 1 %endif -GDT_SIZE equ (1+2*2+MAX_CPUS)*8 ; 4 Permission levels +GDT_SIZE equ (1+2*2+1+MAX_CPUS)*8 [section .data] ; GDT -[global _gGDT] -_gGDT: +[global gGDT] +gGDT: ; PL0 - Kernel ; PL3 - User dd 0x00000000, 0x00000000 ; 00 NULL Entry @@ -21,23 +21,27 @@ _gGDT: dd 0x0000FFFF, 0x00CF9200 ; 10 PL0 Data dd 0x0000FFFF, 0x00CFFA00 ; 18 PL3 Code dd 0x0000FFFF, 0x00CFF200 ; 20 PL3 Data - times MAX_CPUS dd 0, 0 -_gGDTptr: + dd 26*4-1, 0x00408900 ; Double Fault TSS + times MAX_CPUS dd 26*4-1, 0x00408900 +[global gGDTPtr] +gGDTPtr: dw GDT_SIZE-1 - dd _gGDT + dd gGDT ; IDT ALIGN 8 -_gIDT: +gIDT: times 256 dd 0x00080000,0x00000F00 -_gIDTPtr: +[global gIDTPtr] +gIDTPtr: dw 256 * 16 - 1 ; Limit - dd _gIDT ; Base + dd gIDT ; Base [section .text] -[global _Desctab_Install] -_Desctab_Install: + +[global Desctab_Install] +Desctab_Install: ; Set GDT - lgdt [_gGDTptr] + lgdt [gGDTPtr] mov ax, 0x10 ; PL0 Data mov ss, ax mov ds, ax @@ -49,18 +53,18 @@ _Desctab_Install: ; Set IDT %macro SETISR 1 - mov eax, _Isr%1 - mov WORD [_gIDT + %1*8], ax + mov eax, Isr%1 + mov WORD [gIDT + %1*8], ax shr eax, 16 - mov WORD [_gIDT + %1*8+6], ax - mov ax, WORD [_gIDT + %1*8 + 4] + mov WORD [gIDT + %1*8+6], ax + mov ax, WORD [gIDT + %1*8 + 4] or ax, 0x8000 - mov WORD [_gIDT + %1*8 + 4], ax + mov WORD [gIDT + %1*8 + 4], ax %endmacro %macro SETUSER 1 - mov ax, WORD [_gIDT + %1*8 + 4] + mov ax, WORD [gIDT + %1*8 + 4] or ax, 0x6000 - mov WORD [_gIDT + %1*8 + 4], ax + mov WORD [gIDT + %1*8 + 4], ax %endmacro %assign i 0 %rep 32 @@ -78,7 +82,7 @@ _Desctab_Install: %endrep ; Load IDT - lidt [_gIDTPtr] + lidt [gIDTPtr] ; Remap PIC push edx ; Save EDX @@ -116,15 +120,15 @@ _Desctab_Install: ; = Define ISRs = ; =============== %macro ISR_ERRNO 1 -[global _Isr%1] -_Isr%1: +[global Isr%1] +Isr%1: ;xchg bx, bx push %1 jmp ErrorCommon %endmacro %macro ISR_NOERR 1 -[global _Isr%1] -_Isr%1: +[global Isr%1] +Isr%1: xchg bx, bx push 0 push %1 @@ -132,16 +136,16 @@ _Isr%1: %endmacro %macro DEF_SYSCALL 1 -[global _Isr%1] -_Isr%1: +[global Isr%1] +Isr%1: push 0 push %1 jmp SyscallCommon %endmacro %macro DEF_IRQ 1 -[global _Isr%1] -_Isr%1: +[global Isr%1] +Isr%1: ;cli ; HACK! push 0 push %1 @@ -185,8 +189,8 @@ DEF_SYSCALL 0xAC ; Acess System Call ; IRQs ; - Timer -[global _Isr240] -_Isr240: +[global Isr240] +Isr240: push 0 jmp SchedulerBase ; - Assignable @@ -199,8 +203,9 @@ _Isr240: ; --------------------- ; Common error handling ; --------------------- -[extern _ErrorHandler] +[extern ErrorHandler] ErrorCommon: + ;xchg bx, bx pusha push ds push es @@ -208,7 +213,7 @@ ErrorCommon: push gs push esp - call _ErrorHandler + call ErrorHandler add esp, 4 pop gs @@ -222,7 +227,7 @@ ErrorCommon: ; -------------------------- ; Common System Call Handler ; -------------------------- -[extern _SyscallHandler] +[extern SyscallHandler] SyscallCommon: pusha push ds @@ -231,7 +236,7 @@ SyscallCommon: push gs push esp - call _SyscallHandler + call SyscallHandler add esp, 4 pop gs @@ -245,7 +250,7 @@ SyscallCommon: ; ------------ ; IRQ Handling ; ------------ -[extern _IRQ_Handler] +[extern IRQ_Handler] IRQCommon: pusha push ds @@ -254,7 +259,7 @@ IRQCommon: push gs push esp - call _IRQ_Handler + call IRQ_Handler add esp, 4 pop gs @@ -268,7 +273,7 @@ IRQCommon: ; -------------- ; Task Scheduler ; -------------- -[extern _Proc_Scheduler] +[extern Proc_Scheduler] SchedulerBase: pusha push ds @@ -279,7 +284,7 @@ SchedulerBase: mov eax, [esp+12*4] ; CPU Number push eax ; Pus as argument - call _Proc_Scheduler + call Proc_Scheduler add esp, 4 ; Remove Argument