git.ucc.asn.au
/
tpg
/
acess2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fixing bugs and removing debug statements
[tpg/acess2.git]
/
Kernel
/
arch
/
x86
/
desctab.asm
diff --git
a/Kernel/arch/x86/desctab.asm
b/Kernel/arch/x86/desctab.asm
index
9d19300
..
4223e6f
100644
(file)
--- a/
Kernel/arch/x86/desctab.asm
+++ b/
Kernel/arch/x86/desctab.asm
@@
-31,7
+31,8
@@
gGDTPtr:
ALIGN 8
[global gIDT]
gIDT:
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
[global gIDTPtr]
gIDTPtr:
dw 256 * 16 - 1 ; Limit
@@
-52,21
+53,24
@@
Desctab_Install:
jmp 0x08:.pl0code
.pl0code:
jmp 0x08:.pl0code
.pl0code:
- ; Set IDT
+ ; Set
up
IDT
%macro SETISR 1
mov eax, Isr%1
mov WORD [gIDT + %1*8], ax
shr eax, 16
mov WORD [gIDT + %1*8+6], ax
%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
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
+%macro SET_USER 1
+ or WORD [gIDT + %1*8 + 4], 0x6000
%endmacro
%endmacro
+%macro SET_TRAP 1
+ or WORD [gIDT + %1*8 + 4], 0x0100
+%endmacro
+
%assign i 0
%rep 32
SETISR i
%assign i 0
%rep 32
SETISR i
@@
-74,8
+78,15
@@
Desctab_Install:
%endrep
SETISR 0xAC
%endrep
SETISR 0xAC
- SETUSER 0xAC
+ SET_USER 0xAC
+ SET_TRAP 0xAC ; Interruptable
+ %if USE_MP
+ SETISR 0xEE ; 0xEE Timer
+ SETISR 0xEF ; 0xEF Spurious Interrupt
+ %endif
+
+ ; IRQs
%assign i 0xF0
%rep 16
SETISR i
%assign i 0xF0
%rep 16
SETISR i
@@
-130,7
+141,7
@@
Isr%1:
%macro ISR_NOERR 1
[global Isr%1]
Isr%1:
%macro ISR_NOERR 1
[global Isr%1]
Isr%1:
- xchg bx, bx
+
;
xchg bx, bx
push 0
push %1
jmp ErrorCommon
push 0
push %1
jmp ErrorCommon
@@
-187,13
+198,36
@@
ISR_NOERR 31; 31: Reserved
DEF_SYSCALL 0xAC ; Acess System Call
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]
; IRQs
; - Timer
[global Isr240]
+[global Isr240.jmp]
[extern SchedulerBase]
[extern SchedulerBase]
+[extern SetAPICTimerCount]
Isr240:
push 0
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
jmp SchedulerBase
+ %endif
; - Assignable
%assign i 0xF1
%rep 16
; - Assignable
%assign i 0xF1
%rep 16
@@
-206,7
+240,7
@@
Isr240:
; ---------------------
[extern ErrorHandler]
ErrorCommon:
; ---------------------
[extern ErrorHandler]
ErrorCommon:
- ;xchg bx, bx
+ ;xchg bx, bx
; MAGIC BREAK
pusha
push ds
push es
pusha
push ds
push es
@@
-258,6
+292,7
@@
SyscallCommon:
; IRQ Handling
; ------------
[extern IRQ_Handler]
; IRQ Handling
; ------------
[extern IRQ_Handler]
+[global IRQCommon]
IRQCommon:
pusha
push ds
IRQCommon:
pusha
push ds
UCC
git Repository :: git.ucc.asn.au