#include <ppcmmu/mmu.h>\r
\r
#define NDEBUG\r
-#include <internal/debug.h>\r
+#include <debug.h>\r
\r
KDPC KiExpireTimerDpc;\r
extern ULONG KiMaximumDpcQueueDepth;\r
extern ULONG KeMinimumIncrement;\r
extern ULONG KeTimeAdjustment;\r
\r
+extern void PearPCDebug(int ch);\r
+\r
/* GLOBALS *****************************************************************/\r
\r
/* Interrupt handler list */\r
* @implemented\r
*/\r
VOID\r
-STDCALL\r
+NTAPI\r
KeUpdateRunTime(IN PKTRAP_FRAME TrapFrame,\r
IN KIRQL Irql)\r
{\r
* @implemented\r
*/\r
VOID\r
-STDCALL\r
+NTAPI\r
KeUpdateSystemTime(IN PKTRAP_FRAME TrapFrame,\r
IN KIRQL Irql,\r
IN ULONG Increment)\r
SharedUserData->TickCount.LowPart = Time.LowPart;\r
SharedUserData->TickCount.High1Time = Time.HighPart;\r
\r
- /* Update tick count in shared user data as well */\r
- SharedUserData->TickCountLowDeprecated++;\r
-\r
/* Queue a DPC that will expire timers */\r
KeInsertQueueDpc(&KiExpireTimerDpc, 0, 0);\r
}\r
}\r
}\r
\r
-VOID STDCALL\r
+VOID NTAPI\r
KiInterruptDispatch2 (ULONG vector, KIRQL old_level)\r
/*\r
* FUNCTION: Calls all the interrupt handlers for a given irq.\r
CurrentThread = KeGetCurrentThread();\r
if (CurrentThread!=NULL && CurrentThread->ApcState.UserApcPending)\r
{\r
- DPRINT("PID: %d, TID: %d CS %04x/%04x\n",\r
- ((PETHREAD)CurrentThread)->ThreadsProcess->UniqueProcessId,\r
- ((PETHREAD)CurrentThread)->Cid.UniqueThread,\r
- Trapframe->Cs,\r
- CurrentThread->TrapFrame ? CurrentThread->TrapFrame->Cs : 0);\r
if (CurrentThread->TrapFrame == NULL)\r
{\r
OldTrapFrame = CurrentThread->TrapFrame;\r
* @implemented\r
*/\r
BOOLEAN\r
-STDCALL\r
+NTAPI\r
KeConnectInterrupt(PKINTERRUPT InterruptObject)\r
{\r
KIRQL oldlvl,synch_oldlvl;\r
* InterruptObject = isr to release\r
*/\r
BOOLEAN\r
-STDCALL\r
+NTAPI\r
KeDisconnectInterrupt(PKINTERRUPT InterruptObject)\r
{\r
KIRQL oldlvl,synch_oldlvl;\r
* @implemented\r
*/\r
VOID\r
-STDCALL\r
+NTAPI\r
KeInitializeInterrupt(PKINTERRUPT Interrupt,\r
PKSERVICE_ROUTINE ServiceRoutine,\r
PVOID ServiceContext,\r
NTAPI\r
KdpServiceDispatcher(ULONG Service, PCHAR Buffer, ULONG Length);\r
\r
+typedef ULONG (*PSYSCALL_FUN)\r
+(ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG);\r
+\r
VOID\r
NTAPI\r
KiSystemService(ppc_trap_frame_t *trap_frame)\r
{\r
int i;\r
PKSYSTEM_ROUTINE SystemRoutine;\r
+ PSYSCALL_FUN SyscallFunction;\r
\r
- switch(trap_frame->gpr[8])\r
+ switch(trap_frame->gpr[0])\r
{\r
case 0x10000: /* DebugService */\r
for( i = 0; i < trap_frame->gpr[5]; i++ )\r
- SetPhysByte(0x800003f8, ((PCHAR)trap_frame->gpr[4])[i]);\r
-\r
+ {\r
+ PearPCDebug(((PCHAR)trap_frame->gpr[4])[i]);\r
+ WRITE_PORT_UCHAR((PVOID)0x800003f8, ((PCHAR)trap_frame->gpr[4])[i]);\r
+ }\r
trap_frame->gpr[3] = KdpServiceDispatcher\r
(trap_frame->gpr[3],\r
(PCHAR)trap_frame->gpr[4],\r
SystemRoutine((PKSTART_ROUTINE)trap_frame->gpr[4], \r
(PVOID)trap_frame->gpr[5]);\r
break;\r
+\r
+ /* Handle a normal system call */\r
+ default:\r
+ SyscallFunction = \r
+ ((PSYSCALL_FUN*)KeServiceDescriptorTable\r
+ [trap_frame->gpr[0] >> 12].Base)[trap_frame->gpr[0] & 0xfff];\r
+ trap_frame->gpr[3] = SyscallFunction\r
+ (trap_frame->gpr[3],\r
+ trap_frame->gpr[4],\r
+ trap_frame->gpr[5],\r
+ trap_frame->gpr[6],\r
+ trap_frame->gpr[7],\r
+ trap_frame->gpr[8],\r
+ trap_frame->gpr[9],\r
+ trap_frame->gpr[10],\r
+ trap_frame->gpr[11],\r
+ trap_frame->gpr[12]);\r
+ break;\r
}\r
}\r
\r