# directories like "/usr/src/myproject". Separate the files or directories
# with spaces.
--INPUT =
++INPUT = .
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
# doxygen to hide any special comment blocks from generated source code
# fragments. Normal C and C++ comments will always remain visible.
--STRIP_CODE_COMMENTS = YES
++STRIP_CODE_COMMENTS = NO
# If the REFERENCED_BY_RELATION tag is set to YES
# then for each documented function all documented
# each generated HTML page. If it is left blank doxygen will generate a
# standard header.
--HTML_HEADER = Doxygen/header.html
++HTML_HEADER =
# The HTML_FOOTER tag can be used to specify a personal HTML footer for
# each generated HTML page. If it is left blank doxygen will generate a
# standard footer.
--HTML_FOOTER = Doxygen/footer.html
++HTML_FOOTER =
# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
# style sheet that is used by each HTML page. It can be used to
NTAPI
VidInitialize(IN BOOLEAN SetMode)
{
- ULONG Context = 0;
+ ULONG_PTR Context = 0;
PHYSICAL_ADDRESS TranslatedAddress;
- PHYSICAL_ADDRESS NullAddress = {{0, 0}};
+ PHYSICAL_ADDRESS NullAddress = {{0, 0}}, VgaAddress;
ULONG AddressSpace = 1;
BOOLEAN Result;
ULONG_PTR Base;
--- /dev/null
- ULONG Vector,
+/*
+ * PROJECT: ReactOS HAL
+ * LICENSE: GPL - See COPYING in the top level directory
+ * FILE: hal/halx86/generic/misc.c
+ * PURPOSE: Miscellanous Routines
+ * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
+ * Eric Kohl (ekohl@abo.rhein-zeitung.de)
+ * Timo Kreuzer (timo.kreuzer@reactos.org)
+ */
+
+/* INCLUDES ******************************************************************/
+
+#include <hal.h>
+#define NDEBUG
+#include <debug.h>
+
+LARGE_INTEGER HalpPerformanceFrequency;
+
+/* PRIVATE FUNCTIONS *********************************************************/
+
+VOID
+NTAPI
+HalpCheckPowerButton(VOID)
+{
+ /* Nothing to do on non-ACPI */
+ return;
+}
+
+PVOID
+NTAPI
+HalpMapPhysicalMemory64(IN PHYSICAL_ADDRESS PhysicalAddress,
+ IN ULONG NumberPage)
+{
+ /* Use kernel memory manager I/O map facilities */
+ return MmMapIoSpace(PhysicalAddress,
+ NumberPage << PAGE_SHIFT,
+ MmNonCached);
+}
+
+VOID
+NTAPI
+HalpUnmapVirtualAddress(IN PVOID VirtualAddress,
+ IN ULONG NumberPages)
+{
+ /* Use kernel memory manager I/O map facilities */
+ MmUnmapIoSpace(VirtualAddress, NumberPages << PAGE_SHIFT);
+}
+
+VOID
+NTAPI
+HalpInitIdtEntry(PKIDTENTRY64 Idt, PVOID Address)
+{
+ Idt->OffsetLow = (ULONG_PTR)Address & 0xffff;
+ Idt->OffsetMiddle = ((ULONG_PTR)Address >> 16) & 0xffff;
+ Idt->OffsetHigh = (ULONG_PTR)Address >> 32;
+ Idt->Selector = KGDT64_R0_CODE;
+ Idt->IstIndex = 0;
+ Idt->Type = 0x0e;
+ Idt->Dpl = 0;
+ Idt->Present = 1;
+ Idt->Reserved0 = 0;
+ Idt->Reserved1 = 0;
+}
+
+VOID
+NTAPI
+HalpSetInterruptGate(ULONG Index, PVOID Address)
+{
+ ULONG_PTR Flags;
+
+ /* Disable interupts */
+ Flags = __readeflags();
+ _disable();
+
+ /* Initialize the entry */
+ HalpInitIdtEntry(&KeGetPcr()->IdtBase[Index], Address);
+
+ /* Enable interrupts if they were enabled previously */
+ __writeeflags(Flags);
+}
+
+
+/* FUNCTIONS *****************************************************************/
+
+/*
+ * @implemented
+ */
+VOID
+NTAPI
+HalHandleNMI(IN PVOID NmiInfo)
+{
+ UCHAR ucStatus;
+
+ /* Get the NMI Flag */
+ ucStatus = READ_PORT_UCHAR((PUCHAR)0x61);
+
+ /* Display NMI failure string */
+ HalDisplayString ("\n*** Hardware Malfunction\n\n");
+ HalDisplayString ("Call your hardware vendor for support\n\n");
+
+ /* Check for parity error */
+ if (ucStatus & 0x80)
+ {
+ /* Display message */
+ HalDisplayString ("NMI: Parity Check / Memory Parity Error\n");
+ }
+
+ /* Check for I/O failure */
+ if (ucStatus & 0x40)
+ {
+ /* Display message */
+ HalDisplayString ("NMI: Channel Check / IOCHK\n");
+ }
+
+ /* Halt the system */
+ HalDisplayString("\n*** The system has halted ***\n");
+ //KeEnterKernelDebugger();
+}
+
+/*
+ * @implemented
+ */
+UCHAR
+FASTCALL
+HalSystemVectorDispatchEntry(IN ULONG Vector,
+ OUT PKINTERRUPT_ROUTINE **FlatDispatch,
+ OUT PKINTERRUPT_ROUTINE *NoConnection)
+{
+ /* Not implemented on x86 */
+ return FALSE;
+}
+
+VOID
+NTAPI
+HalBugCheckSystem (PVOID ErrorRecord)
+{
+ UNIMPLEMENTED;
+}
+
+
+/*
+ * @implemented
+ */
+VOID
+NTAPI
+KeFlushWriteBuffer(VOID)
+{
+ /* Not implemented on x86 */
+ return;
+}
+
+LARGE_INTEGER
+NTAPI
+KeQueryPerformanceCounter(
+ OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL)
+{
+ LARGE_INTEGER Result;
+
+// ASSERT(HalpPerformanceFrequency.QuadPart != 0);
+
+ /* Does the caller want the frequency? */
+ if (PerformanceFrequency)
+ {
+ /* Return value */
+ *PerformanceFrequency = HalpPerformanceFrequency;
+ }
+
+ Result.QuadPart = __rdtsc();
+ return Result;
+}
+
+VOID
+NTAPI
+HalDisableSystemInterrupt(
- ULONG Vector,
++ UCHAR Vector,
+ KIRQL Irql)
+{
+ UNIMPLEMENTED;
+}
+
+BOOLEAN
+NTAPI
+HalEnableSystemInterrupt(
++ UCHAR Vector,
+ KIRQL Irql,
+ KINTERRUPT_MODE InterruptMode)
+{
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
HalpCurrentRollOver = RollOver;
}
++#ifdef _M_IX86
+ VOID
+ FASTCALL
+ HalpClockInterruptHandler(IN PKTRAP_FRAME TrapFrame)
+ {
+ KIRQL Irql;
+
+ /* Enter trap */
+ KiEnterInterruptTrap(TrapFrame);
+
+ /* Start the interrupt */
+ if (HalBeginSystemInterrupt(CLOCK2_LEVEL, PRIMARY_VECTOR_BASE, &Irql))
+ {
+ /* Update the performance counter */
+ HalpPerfCounter.QuadPart += HalpCurrentRollOver;
+
+ /* Check if someone changed the time rate */
+ if (HalpClockSetMSRate)
+ {
+ /* Not yet supported */
+ UNIMPLEMENTED;
+ while (TRUE);
+ }
+
+ /* Update the system time -- the kernel will exit this trap */
+ KeUpdateSystemTime(TrapFrame, HalpCurrentTimeIncrement, Irql);
+ }
+
+ /* Spurious, just end the interrupt */
+ KiEoiHelper(TrapFrame);
+ }
+
+ VOID
+ FASTCALL
+ HalpProfileInterruptHandler(IN PKTRAP_FRAME TrapFrame)
+ {
+ KIRQL Irql;
+
+ /* Enter trap */
+ KiEnterInterruptTrap(TrapFrame);
+
+ /* Start the interrupt */
+ if (HalBeginSystemInterrupt(PROFILE_LEVEL, PRIMARY_VECTOR_BASE + 8, &Irql))
+ {
+ /* Profiling isn't yet enabled */
+ UNIMPLEMENTED;
+ while (TRUE);
+ }
+
+ /* Spurious, just end the interrupt */
+ KiEoiHelper(TrapFrame);
+ }
+
+ KiTrap(HalpClockInterrupt, KI_PUSH_FAKE_ERROR_CODE);
+ KiTrap(HalpProfileInterrupt, KI_PUSH_FAKE_ERROR_CODE);
++#endif
+
/* PUBLIC FUNCTIONS ***********************************************************/
/*
<file>dma.c</file>
<file>drive.c</file>
<file>display.c</file>
- <file>pic.c</file>
- <file>halinit.c</file>
- <file>misc.c</file>
- <file>portio.c</file>
<file>profil.c</file>
<file>reboot.c</file>
<file>sysinfo.c</file>
- <file>systimer.S</file>
<file>timer.c</file>
- <file>usage.c</file>
+ <if property="ARCH" value="i386">
+ <file>bios.c</file>
+ <file>halinit.c</file>
+ <file>misc.c</file>
++ <file>pic.c</file>
+ <file>usage.c</file>
+ <directory name="i386">
+ <file>portio.c</file>
+ <file>systimer.S</file>
+ <file>v86.s</file>
+ </directory>
+ </if>
+ <if property="ARCH" value="amd64">
+ <directory name="amd64">
+ <file>halinit.c</file>
+ <file>irq.S</file>
+ <file>misc.c</file>
++ <file>apic.c</file>
+ <file>systimer.S</file>
+ <file>usage.c</file>
+ </directory>
+ </if>
</directory>
+ <if property="ARCH" value="amd64">
+ <directory name="mp">
+ <file>apic.c</file>
+ </directory>
+ </if>
<directory name="include">
<pch>hal.h</pch>
</directory>
--- /dev/null
+#ifndef __NTOSKRNL_INCLUDE_INTERNAL_AMD64_KE_H
+#define __NTOSKRNL_INCLUDE_INTERNAL_AMD64_KE_H
+
+#define X86_EFLAGS_TF 0x00000100 /* Trap flag */
+#define X86_EFLAGS_IF 0x00000200 /* Interrupt Enable flag */
+#define X86_EFLAGS_IOPL 0x00003000 /* I/O Privilege Level bits */
+#define X86_EFLAGS_NT 0x00004000 /* Nested Task flag */
+#define X86_EFLAGS_RF 0x00010000 /* Resume flag */
+#define X86_EFLAGS_VM 0x00020000 /* Virtual Mode */
+#define X86_EFLAGS_ID 0x00200000 /* CPUID detection flag */
+
+#define X86_CR0_PE 0x00000001 /* enable Protected Mode */
+#define X86_CR0_NE 0x00000020 /* enable native FPU error reporting */
+#define X86_CR0_TS 0x00000008 /* enable exception on FPU instruction for task switch */
+#define X86_CR0_EM 0x00000004 /* enable FPU emulation (disable FPU) */
+#define X86_CR0_MP 0x00000002 /* enable FPU monitoring */
+#define X86_CR0_WP 0x00010000 /* enable Write Protect (copy on write) */
+#define X86_CR0_PG 0x80000000 /* enable Paging */
+
+#define X86_CR4_PAE 0x00000020 /* enable physical address extensions */
+#define X86_CR4_PGE 0x00000080 /* enable global pages */
+#define X86_CR4_OSFXSR 0x00000200 /* enable FXSAVE/FXRSTOR instructions */
+#define X86_CR4_OSXMMEXCPT 0x00000400 /* enable #XF exception */
+
+#define X86_FEATURE_VME 0x00000002 /* Virtual 8086 Extensions are present */
+#define X86_FEATURE_TSC 0x00000010 /* time stamp counters are present */
+#define X86_FEATURE_PAE 0x00000040 /* physical address extension is present */
+#define X86_FEATURE_CX8 0x00000100 /* CMPXCHG8B instruction present */
+#define X86_FEATURE_SYSCALL 0x00000800 /* SYSCALL/SYSRET support present */
+#define X86_FEATURE_PGE 0x00002000 /* Page Global Enable */
+#define X86_FEATURE_MMX 0x00800000 /* MMX extension present */
+#define X86_FEATURE_FXSR 0x01000000 /* FXSAVE/FXRSTOR instructions present */
+#define X86_FEATURE_SSE 0x02000000 /* SSE extension present */
+#define X86_FEATURE_SSE2 0x04000000 /* SSE2 extension present */
+#define X86_FEATURE_HT 0x10000000 /* Hyper-Threading present */
+
+#define X86_EXT_FEATURE_SSE3 0x00000001 /* SSE3 extension present */
+#define X86_EXT_FEATURE_3DNOW 0x40000000 /* 3DNOW! extension present */
+
+#define FRAME_EDITED 0xFFF8
+
+#define X86_MSR_GSBASE 0xC0000101
+#define X86_MSR_KERNEL_GSBASE 0xC0000102
+#define X86_MSR_EFER 0xC0000080
+#define X86_MSR_STAR 0xC0000081
+#define X86_MSR_LSTAR 0xC0000082
+#define X86_MSR_CSTAR 0xC0000083
+#define X86_MSR_SFMASK 0xC0000084
+
+#define EFER_SCE 0x01
+#define EFER_LME 0x10
+#define EFER_LMA 0x40
+#define EFER_NXE 0x80
+#define EFER_SVME 0x100
+#define EFER_FFXSR 0x400
+
+#define AMD64_TSS 9
+
+#ifndef __ASM__
+
+#include "intrin_i.h"
+
+typedef struct _KIDT_INIT
+{
+ UCHAR InterruptId;
+ UCHAR Dpl;
+ UCHAR IstIndex;
+ PVOID ServiceRoutine;
+} KIDT_INIT, *PKIDT_INIT;
+
+extern ULONG Ke386CacheAlignment;
+extern ULONG KeI386NpxPresent;
+extern ULONG KeI386XMMIPresent;
+extern ULONG KeI386FxsrPresent;
+extern ULONG KeI386CpuType;
+extern ULONG KeI386CpuStep;
+
+#define IMAGE_FILE_MACHINE_ARCHITECTURE IMAGE_FILE_MACHINE_AMD64
+
+//
+// INT3 is 1 byte long
+//
+#define KD_BREAKPOINT_TYPE UCHAR
+#define KD_BREAKPOINT_SIZE sizeof(UCHAR)
+#define KD_BREAKPOINT_VALUE 0xCC
+
+//
+// Macros for getting and setting special purpose registers in portable code
+//
+#define KeGetContextPc(Context) \
+ ((Context)->Rip)
+
+#define KeSetContextPc(Context, ProgramCounter) \
+ ((Context)->Rip = (ProgramCounter))
+
+#define KeGetTrapFramePc(TrapFrame) \
+ ((TrapFrame)->Rip)
+
+#define KeGetContextReturnRegister(Context) \
+ ((Context)->Rax)
+
+#define KeSetContextReturnRegister(Context, ReturnValue) \
+ ((Context)->Rax = (ReturnValue))
+
+//
+// Macro to get trap and exception frame from a thread stack
+//
+#define KeGetTrapFrame(Thread) \
+ (PKTRAP_FRAME)((ULONG_PTR)((Thread)->InitialStack) - \
+ sizeof(KTRAP_FRAME))
+
+//
+// Macro to get context switches from the PRCB
+// All architectures but x86 have it in the PRCB's KeContextSwitches
+//
+#define KeGetContextSwitches(Prcb) \
+ (Prcb->KeContextSwitches)
+
+#define KeGetExceptionFrame(Thread) \
+ (PKEXCEPTION_FRAME)((ULONG_PTR)KeGetTrapFrame(Thread) - \
+ sizeof(KEXCEPTION_FRAME))
+
+//
+// Returns the Interrupt State from a Trap Frame.
+// ON = TRUE, OFF = FALSE
+//
+#define KeGetTrapFrameInterruptState(TrapFrame) \
+ BooleanFlagOn((TrapFrame)->EFlags, EFLAGS_INTERRUPT_MASK)
+
+//
+// Invalidates the TLB entry for a specified address
+//
+FORCEINLINE
+VOID
+KeInvalidateTlbEntry(IN PVOID Address)
+{
+ /* Invalidate the TLB entry for this address */
+ __invlpg(Address);
+}
+
+FORCEINLINE
+VOID
+KeFlushProcessTb(VOID)
+{
+ /* Flush the TLB by resetting CR3 */
+ __writecr3(__readcr3());
+}
+
+FORCEINLINE
+PRKTHREAD
+KeGetCurrentThread(VOID)
+{
+ return (PRKTHREAD)__readgsqword(FIELD_OFFSET(KIPCR, Prcb.CurrentThread));
+}
+
+FORCEINLINE
+VOID
+KiRundownThread(IN PKTHREAD Thread)
+{
+#ifndef CONFIG_SMP
+ DbgPrint("KiRundownThread is unimplemented\n");
+#else
+ /* Nothing to do */
+#endif
+}
+
++VOID
++FORCEINLINE
++KiEndInterrupt(IN KIRQL Irql,
++ IN PKTRAP_FRAME TrapFrame)
++{
++ DbgPrint("KiEndInterrupt is unimplemented\n");
++}
++
++#define Ki386PerfEnd(x)
++
+struct _KPCR;
+
+VOID
+FASTCALL
+KiInitializeTss(IN PKTSS Tss, IN UINT64 Stack);
+
+VOID KiDivideErrorFault();
+VOID KiDebugTrapOrFault();
+VOID KiNmiInterrupt();
+VOID KiBreakpointTrap();
+VOID KiOverflowTrap();
+VOID KiBoundFault();
+VOID KiInvalidOpcodeFault();
+VOID KiNpxNotAvailableFault();
+VOID KiDoubleFaultAbort();
+VOID KiNpxSegmentOverrunAbort();
+VOID KiInvalidTssFault();
+VOID KiSegmentNotPresentFault();
+VOID KiStackFault();
+VOID KiGeneralProtectionFault();
+VOID KiPageFault();
+VOID KiFloatingErrorFault();
+VOID KiAlignmentFault();
+VOID KiMcheckAbort();
+VOID KiXmmException();
+VOID KiApcInterrupt();
+VOID KiRaiseAssertion();
+VOID KiDebugServiceTrap();
+VOID KiDpcInterrupt();
+VOID KiIpiInterrupt();
+
+VOID
+KiGdtPrepareForApplicationProcessorInit(ULONG Id);
+VOID
+Ki386InitializeLdt(VOID);
+VOID
+Ki386SetProcessorFeatures(VOID);
+
+VOID
+NTAPI
+KiGetCacheInformation(VOID);
+
+BOOLEAN
+NTAPI
+KiIsNpxPresent(
+ VOID
+);
+
+BOOLEAN
+NTAPI
+KiIsNpxErrataPresent(
+ VOID
+);
+
+VOID
+NTAPI
+KiSetProcessorType(VOID);
+
+ULONG
+NTAPI
+KiGetFeatureBits(VOID);
+
+VOID
+NTAPI
+KiInitializeCpuFeatures();
+
+ULONG KeAllocateGdtSelector(ULONG Desc[2]);
+VOID KeFreeGdtSelector(ULONG Entry);
+VOID
+NtEarlyInitVdm(VOID);
+VOID
+KeApplicationProcessorInitDispatcher(VOID);
+VOID
+KeCreateApplicationProcessorIdleThread(ULONG Id);
+
+VOID
+NTAPI
+Ke386InitThreadWithContext(PKTHREAD Thread,
+ PKSYSTEM_ROUTINE SystemRoutine,
+ PKSTART_ROUTINE StartRoutine,
+ PVOID StartContext,
+ PCONTEXT Context);
+#define KeArchInitThreadWithContext(Thread,SystemRoutine,StartRoutine,StartContext,Context) \
+ Ke386InitThreadWithContext(Thread,SystemRoutine,StartRoutine,StartContext,Context)
+
+#ifdef _NTOSKRNL_ /* FIXME: Move flags above to NDK instead of here */
+VOID
+NTAPI
+KiThreadStartup(PKSYSTEM_ROUTINE SystemRoutine,
+ PKSTART_ROUTINE StartRoutine,
+ PVOID StartContext,
+ BOOLEAN UserThread,
+ KTRAP_FRAME TrapFrame);
+#endif
+
+#endif
+#endif /* __NTOSKRNL_INCLUDE_INTERNAL_AMD64_KE_H */
+
+/* EOF */
VOID
FASTCALL
- KiIdleLoop(
- VOID
+ DECLSPEC_NORETURN
+ KiSystemFatalException(
+ IN ULONG ExceptionCode,
+ IN PKTRAP_FRAME TrapFrame
);
+PVOID
+NTAPI
+KiPcToFileHeader(IN PVOID Eip,
+ OUT PLDR_DATA_TABLE_ENTRY *LdrEntry,
+ IN BOOLEAN DriversOnly,
+ OUT PBOOLEAN InKernel);
+
+PVOID
+NTAPI
+KiRosPcToUserFileHeader(IN PVOID Eip,
+ OUT PLDR_DATA_TABLE_ENTRY *LdrEntry);
+
#include "ke_x.h"
#endif /* __NTOSKRNL_INCLUDE_INTERNAL_KE_H */
Pcr->NtTib.Self, Pcr->Self, Pcr->Prcb, Pcr->Irql, Pcr->IRR, Pcr->IrrActive,
Pcr->IDR, Pcr->KdVersionBlock, Pcr->IDT, Pcr->GDT, Pcr->TSS,
Pcr->MajorVersion, Pcr->MinorVersion, Pcr->SetMember, Pcr->StallScaleFactor,
- Pcr->Number, Pcr->L2CacheAssociativity,
+ Pcr->Number, Pcr->SecondLevelCacheAssociativity,
Pcr->VdmAlert, Pcr->SecondLevelCacheSize, Pcr->InterruptMode);
-
+#elif defined(_M_AMD64)
+ KdbpPrint("Current PCR is at 0x%x.\n", (INT_PTR)Pcr);
+ KdbpPrint(" Tib.ExceptionList: 0x%p\n"
+ " Tib.StackBase: 0x%p\n"
+ " Tib.StackLimit: 0x%x\n"
+ " Tib.SubSystemTib: 0x%p\n"
+ " Tib.FiberData/Version: 0x%x\n"
+ " Tib.ArbitraryUserPointer: 0x%p\n"
+ " Tib.Self: 0x%p\n"
+ " Self: 0x%p\n"
+ " PCRCB: 0x%p\n"
+ " Irql: 0x%x\n"
+ " KdVersionBlock: 0x%08x\n"
+ " IDT: 0x%p\n"
+ " GDT: 0x%p\n"
+ " TSS: 0x%p\n"
+ " UserRsp: 0x%p\n"
+ " MajorVersion: 0x%04x\n"
+ " MinorVersion: 0x%04x\n"
+ " StallScaleFactor: 0x%08x\n"
+ " L2CacheAssociativity: 0x%02x\n"
+ " L2CacheSize: 0x%08x\n",
+ Pcr->NtTib.ExceptionList, Pcr->NtTib.StackBase, Pcr->NtTib.StackLimit,
+ Pcr->NtTib.SubSystemTib, Pcr->NtTib.FiberData, Pcr->NtTib.ArbitraryUserPointer,
+ Pcr->NtTib.Self, Pcr->Self, Pcr->Prcb, Pcr->Irql,
+ Pcr->KdVersionBlock, Pcr->IdtBase, Pcr->GdtBase, Pcr->TssBase,Pcr->UserRsp,
+ Pcr->MajorVersion, Pcr->MinorVersion, Pcr->StallScaleFactor,
+ Pcr->SecondLevelCacheAssociativity, Pcr->SecondLevelCacheSize);
+#endif
return TRUE;
}
--- /dev/null
+/*
+ * PROJECT: ReactOS Kernel
+ * LICENSE: GPL - See COPYING in the top level directory
+ * PURPOSE: stubs
+ * PROGRAMMERS: Timo Kreuzer (timo.kreuzer@reactos.org)
+ */
+
+/* INCLUDES ******************************************************************/
+
+#include <ntoskrnl.h>
+
+#define NDEBUG
+#include <debug.h>
+
+BOOLEAN
+NTAPI
+KeConnectInterrupt(IN PKINTERRUPT Interrupt)
+{
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
+PVOID
+NTAPI
+KeSwitchKernelStack(PVOID StackBase, PVOID StackLimit)
+{
+ UNIMPLEMENTED;
+ return NULL;
+}
+
+BOOLEAN
+NTAPI
+KeSynchronizeExecution(
+ IN OUT PKINTERRUPT Interrupt,
+ IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine,
+ IN PVOID SynchronizeContext)
+{
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
+NTSTATUS
+NTAPI
+KeUserModeCallback(IN ULONG RoutineIndex,
+ IN PVOID Argument,
+ IN ULONG ArgumentLength,
+ OUT PVOID *Result,
+ OUT PULONG ResultLength)
+{
+ UNIMPLEMENTED;
+ return STATUS_UNSUCCESSFUL;
+}
+
+VOID
+KiIdleLoop()
+{
+ UNIMPLEMENTED;
+ for(;;);
+}
+
+VOID
+NTAPI
+KiInitializeUserApc(IN PKEXCEPTION_FRAME ExceptionFrame,
+ IN PKTRAP_FRAME TrapFrame,
+ IN PKNORMAL_ROUTINE NormalRoutine,
+ IN PVOID NormalContext,
+ IN PVOID SystemArgument1,
+ IN PVOID SystemArgument2)
+{
+ UNIMPLEMENTED;
+}
+
+VOID
+NTAPI
+KiSwapProcess(IN PKPROCESS NewProcess,
+ IN PKPROCESS OldProcess)
+{
+ UNIMPLEMENTED;
+}
+
+VOID
+KiSystemService(IN PKTHREAD Thread,
+ IN PKTRAP_FRAME TrapFrame,
+ IN ULONG Instruction)
+{
+ UNIMPLEMENTED;
+}
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtCallbackReturn
+( IN PVOID Result OPTIONAL, IN ULONG ResultLength, IN NTSTATUS Status )
+{
+ UNIMPLEMENTED;
+ return STATUS_UNSUCCESSFUL;
+}
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtContinue(
+ IN PCONTEXT ThreadContext, IN BOOLEAN RaiseAlert)
+{
+ UNIMPLEMENTED;
+ return STATUS_UNSUCCESSFUL;
+}
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtRaiseException
+(IN PEXCEPTION_RECORD ExceptionRecord, IN PCONTEXT ThreadContext, IN BOOLEAN HandleException )
+{
+ UNIMPLEMENTED;
+ return STATUS_UNSUCCESSFUL;
+}
+
+NTSTATUS
+NTAPI
+NtSetLdtEntries
+(ULONG Selector1, LDT_ENTRY LdtEntry1, ULONG Selector2, LDT_ENTRY LdtEntry2)
+{
+ UNIMPLEMENTED;
+ return STATUS_UNSUCCESSFUL;
+}
+
+NTSTATUS
+NTAPI
+NtVdmControl(IN ULONG ControlCode,
+ IN PVOID ControlData)
+{
+ UNIMPLEMENTED;
+ return STATUS_UNSUCCESSFUL;
+}
+
+NTSTATUS
+NTAPI
+KiCallUserMode(
+ IN PVOID *OutputBuffer,
+ IN PULONG OutputLength)
+{
+ UNIMPLEMENTED;
+ return STATUS_UNSUCCESSFUL;
+}
+
+#undef ExQueryDepthSList
+NTKERNELAPI
+USHORT
+ExQueryDepthSList(IN PSLIST_HEADER ListHead)
+{
+ return (USHORT)(ListHead->Alignment & 0xffff);
+}
+
++
++ULONG ProcessCount;
++
+#ifdef _MSC_VER
+void
+__GSHandlerCheck()
+{
+}
+
+int __security_cookie;
+
+void
+__security_check_cookie()
+{
+}
+
+BOOLEAN CcPfEnablePrefetcher;
+
+unsigned long __readfsdword(const unsigned long Offset)
+{
+ return 0;
+}
+
+void main()
+{
+}
+
+#endif
/* FUNCTIONS ******************************************************************/
- #ifdef _M_IX86
VOID
- __attribute__((regparm(3)))
- KeUpdateSystemTimeHandler(IN ULONG Increment,
- IN KIRQL Irql,
- IN PKTRAP_FRAME TrapFrame)
- #else
- VOID
- NTAPI
+ FASTCALL
KeUpdateSystemTime(IN PKTRAP_FRAME TrapFrame,
- IN ULONG Increment,
- IN KIRQL Irql)
+ IN KIRQL Irql,
+ IN ULONG Increment)
- #endif
{
PKPRCB Prcb = KeGetCurrentPrcb();
ULARGE_INTEGER CurrentTime, InterruptTime;
@ stdcall KeStackAttachProcess(ptr ptr)
@ stdcall KeSynchronizeExecution(ptr ptr ptr)
@ stdcall KeTerminateThread(long)
-@ fastcall KeTestSpinLock(ptr)
+@ FASTCALL KeTestSpinLock(ptr)
@ extern KeTickCount
-@ fastcall KeTryToAcquireGuardedMutex(ptr)
-@ fastcall KeTryToAcquireSpinLockAtDpcLevel(ptr)
+@ FASTCALL KeTryToAcquireGuardedMutex(ptr)
+@ FASTCALL KeTryToAcquireSpinLockAtDpcLevel(ptr)
@ stdcall KeUnstackDetachProcess(ptr)
@ stdcall KeUpdateRunTime(ptr long)
- #ifdef _M_IX86
- @ stdcall KeUpdateSystemTime()
- #else
- @ stdcall KeUpdateSystemTime(ptr long long)
- #endif
+ @ fastcall KeUpdateSystemTime(ptr long long)
@ stdcall KeUserModeCallback(long ptr long ptr ptr)
@ stdcall KeWaitForMultipleObjects(long ptr long long long long ptr ptr)
@ stdcall KeWaitForMutexObject(ptr long long long ptr) KeWaitForSingleObject
@ stdcall KeWaitForSingleObject(ptr long long long ptr)
-@ fastcall KefAcquireSpinLockAtDpcLevel(ptr)
-@ fastcall KefReleaseSpinLockFromDpcLevel(ptr)
-#ifdef _M_IX86
-@ stdcall Kei386EoiHelper()
-@ fastcall KiEoiHelper(ptr) /* FIXME: Evaluate decision */
-#endif
-@ fastcall KiAcquireSpinLock(ptr)
+@ FASTCALL KefAcquireSpinLockAtDpcLevel(ptr)
+@ FASTCALL KefReleaseSpinLockFromDpcLevel(ptr)
- @ stdcall -arch=i386 Kei386EoiHelper()
++@ stdcall -arch=i386 Kei386EoiHelper(ptr) /* FIXME: Evaluate decision */
+@ FASTCALL KiAcquireSpinLock(ptr)
@ extern KiBugCheckData
@ stdcall KiCheckForKernelApcDelivery()
;KiCheckForSListAddress