Author: sir_richard
Date: Tue Jan 19 09:35:37 2010
New Revision: 45144
URL:
http://svn.reactos.org/svn/reactos?rev=45144&view=rev
Log:
[NTOS]: Kei386EoiHelper now jumps into the C KiEoiHelper. All interrupt exit is now done
through the C trap exit code.
[NTOS]: The ASM KiServiceExit/KiServiceExit2 are no more. All system call exit is now done
through the C trap exit code.
Modified:
trunk/reactos/ntoskrnl/ke/i386/trap.s
trunk/reactos/ntoskrnl/ke/i386/usercall_asm.S
Modified: trunk/reactos/ntoskrnl/ke/i386/trap.s
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ke/i386/trap.s?re…
==============================================================================
--- trunk/reactos/ntoskrnl/ke/i386/trap.s [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/ke/i386/trap.s [iso-8859-1] Tue Jan 19 09:35:37 2010
@@ -83,8 +83,6 @@
#endif
/* We implement the following trap exit points: */
-.globl _KiServiceExit /* Exit from syscall */
-.globl _KiServiceExit2 /* Exit from syscall with complete frame*/
.globl _Kei386EoiHelper@0 /* Exit from interrupt or H/W trap */
.globl _Kei386EoiHelper2ndEntry /* Exit from unexpected interrupt */
@@ -113,36 +111,8 @@
_IsrOverflowMsg:
.asciz "\n*** ISR at %lx appears to have an interrupt storm\n"
-_KiTrapPrefixTable:
- .byte 0xF2 /* REP */
- .byte 0xF3 /* REP INS/OUTS */
- .byte 0x67 /* ADDR */
- .byte 0xF0 /* LOCK */
- .byte 0x66 /* OP */
- .byte 0x2E /* SEG */
- .byte 0x3E /* DS */
- .byte 0x26 /* ES */
- .byte 0x64 /* FS */
- .byte 0x65 /* GS */
- .byte 0x36 /* SS */
-
-_KiTrapIoTable:
- .byte 0xE4 /* IN */
- .byte 0xE5 /* IN */
- .byte 0xEC /* IN */
- .byte 0xED /* IN */
- .byte 0x6C /* INS */
- .byte 0x6D /* INS */
- .byte 0xE6 /* OUT */
- .byte 0xE7 /* OUT */
- .byte 0xEE /* OUT */
- .byte 0xEF /* OUT */
- .byte 0x6E /* OUTS */
- .byte 0x6F /* OUTS */
-
/* SOFTWARE INTERRUPT SERVICES ***********************************************/
.text
-
.func KiSystemService
TRAP_FIXUPS kss_a, kss_t, DoNotFixupV86, DoNotFixupAbios
@@ -282,18 +252,11 @@
/* Restore the old trap frame pointer */
mov edx, [ebp+KTRAP_FRAME_EDX]
mov [ecx+KTHREAD_TRAP_FRAME], edx
-.endfunc
-
-.func KiServiceExit
-_KiServiceExit:
- /* Disable interrupts */
- cli
-
- /* Check for, and deliver, User-Mode APCs if needed */
- CHECK_FOR_APC_DELIVER 1
-
- /* Exit and cleanup */
- TRAP_EPILOG FromSystemCall, DoRestorePreviousMode, DoNotRestoreSegments,
DoNotRestoreVolatiles, DoRestoreEverything
+
+ /* Exit the system call */
+ mov ecx, ebp
+ mov edx, eax
+ jmp @KiServiceExit@8
.endfunc
KiBBTUnexpectedRange:
@@ -418,56 +381,12 @@
ret
#endif
-.func KiServiceExit2
-_KiServiceExit2:
-
- /* Disable interrupts */
- cli
-
- /* Check for, and deliver, User-Mode APCs if needed */
- CHECK_FOR_APC_DELIVER 0
-
- /* Exit and cleanup */
- TRAP_EPILOG NotFromSystemCall, DoRestorePreviousMode, DoRestoreSegments,
DoRestoreVolatiles, DoNotRestoreEverything
-.endfunc
-
.func Kei386EoiHelper@0
_Kei386EoiHelper@0:
-
- /* Disable interrupts */
- cli
-
- /* Check for, and deliver, User-Mode APCs if needed */
- CHECK_FOR_APC_DELIVER 0
-
- /* Exit and cleanup */
-_Kei386EoiHelper2ndEntry:
- TRAP_EPILOG NotFromSystemCall, DoNotRestorePreviousMode, DoRestoreSegments,
DoRestoreVolatiles, DoNotRestoreEverything
-.endfunc
-
-V86_Exit:
- /* Move to EDX position */
- add esp, KTRAP_FRAME_EDX
-
- /* Restore volatiles */
- pop edx
- pop ecx
- pop eax
-
- /* Move to non-volatiles */
- lea esp, [ebp+KTRAP_FRAME_EDI]
- pop edi
- pop esi
- pop ebx
- pop ebp
-
- /* Skip error code and return */
- add esp, 4
- iret
-
-AbiosExit:
- /* FIXME: TODO */
- UNHANDLED_PATH "ABIOS Exit"
+ /* Call the C EOI Helper */
+ mov ecx, esp
+ jmp @KiEoiHelper@4
+.endfunc
GENERATE_TRAP_HANDLER KiGetTickCount, 1
GENERATE_TRAP_HANDLER KiCallbackReturn, 1
@@ -549,7 +468,7 @@
/* Spurious, ignore it */
add esp, 8
- jmp _Kei386EoiHelper2ndEntry
+ jmp _Kei386EoiHelper@0
Handled:
/* Unexpected interrupt, print a message on debug builds */
Modified: trunk/reactos/ntoskrnl/ke/i386/usercall_asm.S
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ke/i386/usercall_…
==============================================================================
--- trunk/reactos/ntoskrnl/ke/i386/usercall_asm.S [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/ke/i386/usercall_asm.S [iso-8859-1] Tue Jan 19 09:35:37 2010
@@ -204,7 +204,8 @@
SET_TF_DEBUG_HEADER
/* Exit to user-mode */
- jmp _KiServiceExit
+ mov ecx, esp
+ jmp @KiServiceExit@8
SaveDebug: