exported spinlocks
[tpg/acess2.git] / Kernel / arch / x86 / desctab.asm
index 1513984..f6cc14e 100644 (file)
@@ -31,7 +31,8 @@ gGDTPtr:
 ALIGN 8
 [global gIDT]
 gIDT:
-       times   256     dd      0x00080000,0x00000F00
+       ; CS = 0x08, Type = 32-bit Interrupt (0xE = 1 110)
+       times   256     dd      0x00080000,0x00000E00
 [global gIDTPtr]
 gIDTPtr:
        dw      256 * 16 - 1    ; Limit
@@ -52,34 +53,47 @@ Desctab_Install:
        jmp 0x08:.pl0code
 .pl0code:
 
-       ; Set IDT
+       ; Set up IDT
+       ; Helper Macros
+       ; - Set an IDT entry to an ISR
 %macro SETISR  1
        mov eax, Isr%1
        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
 %endmacro
-%macro SETUSER 1
-       mov     ax, WORD [gIDT + %1*8 + 4]
-       or ax, 0x6000
-       mov     WORD [gIDT + %1*8 + 4], ax
+       ; Enable user calling of an ISR
+%macro SET_USER        1
+       or WORD [gIDT + %1*8 + 4], 0x6000
+%endmacro
+       ; Set an ISR as a trap (leaves interrupts enabled when invoked)
+%macro SET_TRAP        1
+       or WORD [gIDT + %1*8 + 4], 0x0100
 %endmacro
+
+       ; Error handlers
        %assign i       0
        %rep 32
        SETISR  i
        %assign i i+1
        %endrep
        
+       ; User Syscall
        SETISR  0xAC
-       SETUSER 0xAC
+       SET_USER        0xAC
+       SET_TRAP        0xAC    ; Interruptable
        
+       ; MP ISRs
        %if USE_MP
-       SETISR  239
+       SETISR  0xEE    ; 0xEE Timer
+       SETISR  0xEF    ; 0xEF Spurious Interrupt
        %endif
-       
+
+       ; IRQs
        %assign i       0xF0
        %rep 16
        SETISR  i
@@ -134,7 +148,7 @@ Isr%1:
 %macro ISR_NOERR       1
 [global Isr%1]
 Isr%1:
-       xchg bx, bx
+       ;xchg bx, bx
        push    0
        push    %1
        jmp     ErrorCommon
@@ -191,24 +205,33 @@ ISR_NOERR 31; 31: Reserved
 
 DEF_SYSCALL    0xAC    ; Acess System Call
 
-; AP's Timer Interrupt
 %if USE_MP
-[global Isr239]
+[global Isr0xEE]
 [extern SchedulerBase]
-Isr239:
+; 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
+       jmp SetAPICTimerCount   ; This is reset once the bus speed has been calculated
        %else
        jmp SchedulerBase
        %endif
@@ -224,7 +247,7 @@ Isr240:
 ; ---------------------
 [extern ErrorHandler]
 ErrorCommon:
-       ;xchg bx, bx
+       ;xchg bx, bx    ; MAGIC BREAK
        pusha
        push ds
        push es

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