KiInitSystem

This commit is contained in:
ergo720 2019-01-08 10:26:20 +01:00
parent 9827cfcaa3
commit bd0eced253
4 changed files with 34 additions and 22 deletions

View File

@ -174,12 +174,6 @@ void FASTCALL KiWaitSatisfyAll
break; \
}
#define KiInsertWaitList(_WaitMode, _Thread) { \
PLIST_ENTRY _ListHead; \
_ListHead = &KiWaitInListHead; \
InsertTailList(_ListHead, &(_Thread)->WaitListEntry); \
}
// ******************************************************************
// * KeGetPcr()
@ -1833,8 +1827,6 @@ xboxkrnl::PLARGE_INTEGER FASTCALL KiComputeWaitInterval(
}
}
xboxkrnl::LIST_ENTRY KiWaitInListHead;
// ******************************************************************
// * 0x009E - KeWaitForMultipleObjects()
// ******************************************************************

View File

@ -62,6 +62,20 @@ xboxkrnl::KTIMER_TABLE_ENTRY KiTimerTableListHead[TIMER_TABLE_SIZE];
xboxkrnl::KDPC KiTimerExpireDpc;
VOID xboxkrnl::KiInitSystem()
{
unsigned int i;
InitializeListHead(&KiWaitInListHead);
KeInitializeDpc(&KiTimerExpireDpc, KiTimerExpiration, NULL);
for (i = 0; i < TIMER_TABLE_SIZE; i++) {
InitializeListHead(&KiTimerTableListHead[i].Entry);
KiTimerTableListHead[i].Time.u.HighPart = 0xFFFFFFFF;
KiTimerTableListHead[i].Time.u.LowPart = 0;
}
}
VOID xboxkrnl::KiClockIsr(unsigned int ScalingFactor)
{
KIRQL OldIrql;

View File

@ -31,16 +31,7 @@
// * All rights reserved
// *
// ******************************************************************
#pragma once
#define KiLockDispatcherDatabase(OldIrql) \
*(OldIrql) = KeRaiseIrqlToDpcLevel()
#define KiLockApcQueue(Thread, OldIrql) \
*(OldIrql) = KeRaiseIrqlToSynchLevel()
#define KiUnlockApcQueue(Thread, OldIrql) \
KfLowerIrql((OldIrql))
#pragma once
namespace xboxkrnl
{
@ -51,6 +42,9 @@ namespace xboxkrnl
} KTIMER_TABLE_ENTRY, *PKTIMER_TABLE_ENTRY;
const ULONG CLOCK_TIME_INCREMENT = 0x2710;
LIST_ENTRY KiWaitInListHead;
VOID KiInitSystem();
VOID KiClockIsr(
IN unsigned int ScalingFactor
@ -99,3 +93,18 @@ namespace xboxkrnl
IN PKTIMER Timer
);
};
#define KiLockDispatcherDatabase(OldIrql) \
*(OldIrql) = KeRaiseIrqlToDpcLevel()
#define KiLockApcQueue(Thread, OldIrql) \
*(OldIrql) = KeRaiseIrqlToSynchLevel()
#define KiUnlockApcQueue(Thread, OldIrql) \
KfLowerIrql((OldIrql))
#define KiInsertWaitList(_WaitMode, _Thread) { \
PLIST_ENTRY _ListHead; \
_ListHead = &KiWaitInListHead; \
InsertTailList(_ListHead, &(_Thread)->WaitListEntry); \
}

View File

@ -1579,10 +1579,6 @@ __declspec(noreturn) void CxbxKrnlInit
// Read Xbox video mode from the SMC, store it in HalBootSMCVideoMode
xboxkrnl::HalReadSMBusValue(SMBUS_ADDRESS_SYSTEM_MICRO_CONTROLLER, SMC_COMMAND_AV_PACK, FALSE, &xboxkrnl::HalBootSMCVideoMode);
// TODO: move much of this stuff to xboxkrnl::init();
extern xboxkrnl::LIST_ENTRY KiWaitInListHead;
InitializeListHead(&KiWaitInListHead);
if (bLLE_USB) {
#if 1 // Reenable this when LLE USB actually works
int ret;
@ -1633,6 +1629,7 @@ __declspec(noreturn) void CxbxKrnlInit
InitXboxThread(g_CPUXbox);
xboxkrnl::ObInitSystem();
xboxkrnl::KiInitSystem();
EmuX86_Init();
// Create the interrupt processing thread