- Switch HalEndSystemInterrupt to ASM version and get completely rid of the irql.C file.

svn path=/trunk/; revision=23663
This commit is contained in:
Alex Ionescu 2006-08-23 06:38:46 +00:00
parent a82987f860
commit 280da54a61
3 changed files with 1 additions and 58 deletions

View file

@ -31,7 +31,6 @@
<define name="_NTHAL_" />
<define name="__USE_W32API" />
<file>ipi.c</file>
<file>irql.c</file>
<file>irq.S</file>
<file>processor.c</file>
<file>resource.c</file>

View file

@ -367,7 +367,6 @@ DoneBegin:
ret 12
.endfunc
#if 0
.globl _HalEndSystemInterrupt@8
.func HalEndSystemInterrupt@8
_HalEndSystemInterrupt@8:
@ -389,7 +388,7 @@ SkipMask2:
/* Set IRQL and check if there are pending software interrupts */
mov [fs:KPCR_IRQL], cl
#if 0
mov eax, [fs:KPCR_IDR]
mov eax, [fs:KPCR_IRR]
mov al, _SoftIntByteTable[eax]
cmp al, cl
ja DoCall
@ -402,7 +401,6 @@ DoCall:
add esp, 8
jmp SoftIntHandlerTable2[eax*4]
.endfunc
#endif
.globl @KfLowerIrql@4
.func @KfLowerIrql@4

View file

@ -1,54 +0,0 @@
/* $Id$
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
* FILE: ntoskrnl/hal/x86/irql.c
* PURPOSE: Implements IRQLs
* PROGRAMMER: David Welch (welch@cwcom.net)
*/
/* INCLUDES *****************************************************************/
#include <hal.h>
#define NDEBUG
#include <debug.h>
/* GLOBALS ******************************************************************/
typedef VOID (*PSW_HANDLER)(VOID);
extern PSW_HANDLER SoftIntHandlerTable[];
extern ULONG KiI8259MaskTable[];
extern UCHAR SoftIntByteTable[];
/* FUNCTIONS ****************************************************************/
VOID STDCALL HalEndSystemInterrupt (KIRQL Irql, ULONG Unknown2)
{
ULONG Mask;
ULONG Flags;
UCHAR Pending;
Ki386SaveFlags(Flags);
Ki386DisableInterrupts();
if (KeGetPcr()->Irql > DISPATCH_LEVEL)
{
Mask = KeGetPcr()->IDR | KiI8259MaskTable[Irql];
WRITE_PORT_UCHAR((PUCHAR)0x21, (UCHAR)Mask);
Mask >>= 8;
WRITE_PORT_UCHAR((PUCHAR)0xa1, (UCHAR)Mask);
}
KeGetPcr()->Irql = Irql;
Pending = SoftIntByteTable[KeGetPcr()->IRR];
if (Pending > Irql)
{
SoftIntHandlerTable[Pending]();
}
Ki386RestoreFlags(Flags);
}
/* EOF */