Bit of debug cleanup, fixing bugs found on GrUB2
[tpg/acess2.git] / Kernel / arch / x86 / desctab.asm
index 969752c..615d6a2 100644 (file)
@@ -3,10 +3,10 @@
 ; 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+1+MAX_CPUS)*8
 
@@ -21,24 +21,28 @@ gGDT:
        dd 0x0000FFFF, 0x00CF9200       ; 10 PL0 Data
        dd 0x0000FFFF, 0x00CFFA00       ; 18 PL3 Code
        dd 0x0000FFFF, 0x00CFF200       ; 20 PL3 Data
-       dd 0, 0 ; Double Fault TSS
-       times MAX_CPUS  dd 0, 0
-gGDTptr:
+       dd 26*4-1, 0x00408900   ; 28 Double Fault TSS
+       times MAX_CPUS  dd 26*4-1, 0x00408900   ; 30+ TSSes
+[global gGDTPtr]
+gGDTPtr:
        dw      GDT_SIZE-1
        dd      gGDT
 ; IDT
 ALIGN 8
+[global gIDT]
 gIDT:
        times   256     dd      0x00080000,0x00000F00
+[global gIDTPtr]
 gIDTPtr:
        dw      256 * 16 - 1    ; Limit
        dd      gIDT            ; Base
 
 [section .text]
+
 [global Desctab_Install]
 Desctab_Install:
        ; Set GDT
-       lgdt [gGDTptr]
+       lgdt [gGDTPtr]
        mov ax, 0x10    ; PL0 Data
        mov ss, ax
        mov ds, ax
@@ -54,6 +58,7 @@ Desctab_Install:
        mov     WORD [gIDT + %1*8], ax
        shr eax, 16
        mov     WORD [gIDT + %1*8+6], ax
+       ; Enable
        mov     ax, WORD [gIDT + %1*8 + 4]
        or ax, 0x8000
        mov     WORD [gIDT + %1*8 + 4], ax
@@ -72,6 +77,11 @@ Desctab_Install:
        SETISR  0xAC
        SETUSER 0xAC
        
+       %if USE_MP
+       SETISR  0xEE    ; 0xEE Timer
+       SETISR  0xEF    ; 0xEF Spurious Interrupt
+       %endif
+       
        %assign i       0xF0
        %rep 16
        SETISR  i
@@ -126,7 +136,7 @@ Isr%1:
 %macro ISR_NOERR       1
 [global Isr%1]
 Isr%1:
-       xchg bx, bx
+       ;xchg bx, bx
        push    0
        push    %1
        jmp     ErrorCommon
@@ -143,7 +153,6 @@ Isr%1:
 %macro DEF_IRQ 1
 [global Isr%1]
 Isr%1:
-       ;cli    ; HACK!
        push    0
        push    %1
        jmp     IRQCommon
@@ -184,12 +193,36 @@ ISR_NOERR 31; 31: Reserved
 
 DEF_SYSCALL    0xAC    ; Acess System Call
 
+%if USE_MP
+[global Isr0xEE]
+[extern SchedulerBase]
+; AP's Timer Interrupt
+Isr0xEE:
+       push 0
+       xchg bx, bx     ; MAGIC BREAK
+       jmp SchedulerBase
+; Spurious Interrupt
+[global Isr0xEF]
+Isr0xEF:
+       xchg bx, bx     ; MAGIC BREAK
+       iret
+%endif
+
 ; IRQs
 ; - Timer
 [global Isr240]
+[global Isr240.jmp]
+[extern SchedulerBase]
+[extern SetAPICTimerCount]
 Isr240:
        push 0
+       ;xchg bx, bx    ; MAGIC BREAK
+Isr240.jmp:
+       %if USE_MP
+       jmp SetAPICTimerCount   ; This is reset once the bus speed has been calculated
+       %else
        jmp SchedulerBase
+       %endif
 ; - Assignable
 %assign i      0xF1
 %rep 16
@@ -202,12 +235,19 @@ Isr240:
 ; ---------------------
 [extern ErrorHandler]
 ErrorCommon:
+       ;xchg bx, bx    ; MAGIC BREAK
        pusha
        push ds
        push es
        push fs
        push gs
        
+       mov ax, 0x10
+       mov ds, ax
+       mov es, ax
+       mov fs, ax
+       mov gs, ax
+       
        push esp
        call ErrorHandler
        add esp, 4
@@ -247,6 +287,7 @@ SyscallCommon:
 ; IRQ Handling
 ; ------------
 [extern IRQ_Handler]
+[global IRQCommon]
 IRQCommon:
        pusha
        push ds
@@ -254,6 +295,12 @@ IRQCommon:
        push fs
        push gs
        
+       mov ax, 0x10
+       mov ds, ax
+       mov es, ax
+       mov fs, ax
+       mov gs, ax
+       
        push esp
        call IRQ_Handler
        add esp, 4
@@ -265,34 +312,3 @@ IRQCommon:
        popa
        add esp, 8      ; Error Code and ID
        iret
-
-; --------------
-; Task Scheduler
-; --------------
-[extern Proc_Scheduler]
-SchedulerBase:
-       pusha
-       push ds
-       push es
-       push fs
-       push gs
-       
-       mov eax, [esp+12*4]     ; CPU Number
-       push eax        ; Pus as argument
-       
-       call Proc_Scheduler
-       
-       add esp, 4      ; Remove Argument
-       
-       pop gs
-       pop fs
-       pop es
-       pop ds
-
-       mov dx, 0x20
-       mov al, 0x20
-       out dx, al              ; ACK IRQ
-       popa
-       add esp, 4      ; CPU ID
-       ; No Error code / int num
-       iret

UCC git Repository :: git.ucc.asn.au