X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Farch%2Fx86_64%2Fdesctab.asm;h=e83317353d6c4ed4d2595282e03e43d3ad6d3364;hb=e2744a459d1c63435d7348d0bfd0e4b92b0ec9f9;hp=22b41be041ce7f90280c8b37dc0e45a2051afa37;hpb=d0b4559f2936f6d9f06be0f7c3c51527a480ec0d;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/arch/x86_64/desctab.asm b/KernelLand/Kernel/arch/x86_64/desctab.asm index 22b41be0..e8331735 100644 --- a/KernelLand/Kernel/arch/x86_64/desctab.asm +++ b/KernelLand/Kernel/arch/x86_64/desctab.asm @@ -276,17 +276,23 @@ DEFIRQ i %assign i i+1 %endrep +[extern Proc_int_SetIRQIP] + [global IrqCommon] IrqCommon: PUSH_GPR push gs push fs - + + mov rdi, [rsp+(16+2+2)*8] ; 2SReg + GPRs + Int/Errcode = RIP + call Proc_int_SetIRQIP + push rax + ; mov rdi, csIRQ_Fired ; mov rsi, [rsp+(16+2)*8] ; call Log - mov ebx, [rsp+(16+2)*8] ; Get interrupt number (16 GPRS + 2 SRs) + mov ebx, [rsp+(1+2+16)*8] ; Get interrupt number (16 GPRS + 2 SRs) shl ebx, 2 ; *4 mov rax, gaIRQ_Handlers lea rbx, [rax+rbx*8] @@ -300,7 +306,7 @@ IrqCommon: test rax, rax ; Check if it exists jz .skip.%[i] ; Set RDI to IRQ number - mov rdi, [rsp+(16+2+1)*8] ; Get IRQ number + mov rdi, [rsp+(16+2+1+1)*8] ; Get IRQ number mov rsi, [rbx-gaIRQ_Handlers+gaIRQ_DataPtrs] call rax ; Call .skip.%[i]: @@ -311,12 +317,15 @@ IrqCommon: ; ACK mov al, 0x20 - mov rdi, [rsp+(16+2)*8] ; Get IRQ number + mov rdi, [rsp+(16+2+1)*8] ; Get IRQ number cmp rdi, 8 jb .skipAckSecondary out 0xA0, al .skipAckSecondary: out 0x20, al + + pop rdi + call Proc_int_SetIRQIP pop fs pop gs @@ -398,7 +407,10 @@ SyscallStub: mov [rsp+0x28], r10 ; Arg4 mov [rsp+0x30], r8 ; Arg5 mov [rsp+0x38], r9 ; Arg6 - + + mov rdi, rcx + call Proc_int_SetIRQIP + mov rdi, rsp sub rsp, 8 call SyscallHandler