From ef23acc3bc6d95043da254a86524a90d1bf9041d Mon Sep 17 00:00:00 2001 From: belliash Date: Mon, 27 Feb 2023 19:58:47 +0100 Subject: [PATCH] Add Deferred Procedure Call (DPC) and processor power state related structures --- sdk/xtdk/amd64/ketypes.h | 5 +++++ sdk/xtdk/i686/ketypes.h | 5 +++++ sdk/xtdk/ketypes.h | 36 +++++++++++++++++++++++++++++++++++- sdk/xtdk/potypes.h | 30 ++++++++++++++++++++++++++++++ sdk/xtdk/xtkmapi.h | 1 + sdk/xtdk/xtstruct.h | 3 +++ 6 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 sdk/xtdk/potypes.h diff --git a/sdk/xtdk/amd64/ketypes.h b/sdk/xtdk/amd64/ketypes.h index 483757c..35f5e70 100644 --- a/sdk/xtdk/amd64/ketypes.h +++ b/sdk/xtdk/amd64/ketypes.h @@ -12,6 +12,7 @@ #include #include #include +#include #include ARCH_HEADER(xtstruct.h) #include ARCH_HEADER(artypes.h) @@ -452,8 +453,12 @@ typedef struct _KPROCESSOR_CONTROL_BLOCK ULONG_PTR SetMember; CPU_IDENTIFICATION CpuId; KPROCESSOR_STATE ProcessorState; + KDPC_DATA DpcData[2]; PVOID DpcStack; + VOLATILE ULONG_PTR TimerRequest; ULONG_PTR MultiThreadProcessorSet; + SINGLE_LIST_ENTRY DeferredReadyListHead; + PROCESSOR_POWER_STATE PowerState; } KPROCESSOR_CONTROL_BLOCK, *PKPROCESSOR_CONTROL_BLOCK; /* Processor Block structure definition */ diff --git a/sdk/xtdk/i686/ketypes.h b/sdk/xtdk/i686/ketypes.h index 7672816..a198117 100644 --- a/sdk/xtdk/i686/ketypes.h +++ b/sdk/xtdk/i686/ketypes.h @@ -12,6 +12,7 @@ #include #include #include +#include #include ARCH_HEADER(xtstruct.h) #include ARCH_HEADER(artypes.h) @@ -401,7 +402,11 @@ typedef struct _KPROCESSOR_CONTROL_BLOCK CPU_IDENTIFICATION CpuId; KPROCESSOR_STATE ProcessorState; ULONG_PTR MultiThreadProcessorSet; + KDPC_DATA DpcData[2]; PVOID DpcStack; + VOLATILE ULONG_PTR TimerRequest; + SINGLE_LIST_ENTRY DeferredReadyListHead; + PROCESSOR_POWER_STATE PowerState; } KPROCESSOR_CONTROL_BLOCK, *PKPROCESSOR_CONTROL_BLOCK; /* Processor Block structure definition */ diff --git a/sdk/xtdk/ketypes.h b/sdk/xtdk/ketypes.h index 8b63870..4245ccb 100644 --- a/sdk/xtdk/ketypes.h +++ b/sdk/xtdk/ketypes.h @@ -13,7 +13,7 @@ #include #include #include -#include ARCH_HEADER(ketypes.h) +#include ARCH_HEADER(xtstruct.h) /* Exception types and handling mechanisms */ @@ -43,6 +43,12 @@ #define READY_SKIP_QUANTUM 2 #define THREAD_QUANTUM 6 +/* Thread priority levels */ +#define THREAD_LOW_PRIORITY 0 +#define THREAD_LOW_REALTIME_PRIORITY 16 +#define THREAD_HIGH_PRIORITY 31 +#define THREAD_MAXIMUM_PRIORITY 32 + /* Adjust reason */ typedef enum _ADJUST_REASON { @@ -148,6 +154,7 @@ typedef enum _WAIT_TYPE /* Kernel routine callbacks */ typedef EXCEPTION_DISPOSITION (*PEXCEPTION_ROUTINE)(IN PEXCEPTION_RECORD ExceptionRecord, IN PVOID EstablisherFrame, IN OUT PCONTEXT ContextRecord, IN OUT PVOID DispatcherContext); +typedef VOID (*PKDEFERRED_ROUTINE)(IN PKDPC Dpc, IN PVOID DeferredContext, IN PVOID SystemArgument1, IN PVOID SystemArgument2); typedef VOID (*PKNORMAL_ROUTINE)(IN PVOID NormalContext, IN PVOID SystemArgument1, IN PVOID SystemArgument2); typedef VOID (*PKKERNEL_ROUTINE)(IN PKAPC Apc, IN OUT PKNORMAL_ROUTINE *NormalRoutine, IN OUT PVOID *NormalContext, IN OUT PVOID *SystemArgument1, IN OUT PVOID *SystemArgument2); typedef VOID (*PKRUNDOWN_ROUTINE)(IN PKAPC Apc); @@ -186,6 +193,30 @@ typedef struct _KAPC BOOLEAN Inserted; } KAPC, *PKAPC; +/* Deferred Procedure Call (DPC) object structure definition */ +typedef struct _KDPC +{ + UCHAR Type; + UCHAR Importance; + UCHAR Number; + UCHAR Expedite; + LIST_ENTRY DpcListEntry; + PKDEFERRED_ROUTINE DeferredRoutine; + PVOID DeferredContext; + PVOID SystemArgument1; + PVOID SystemArgument2; + PVOID DpcData; +} KDPC, *PKDPC; + +/* DPC data structure definition */ +typedef struct _KDPC_DATA +{ + LIST_ENTRY DpcListHead; + KSPIN_LOCK DpcLock; + VOLATILE ULONG DpcQueueDepth; + ULONG DpcCount; +} KDPC_DATA, *PKDPC_DATA; + /* Exception registration record structure definition */ typedef struct _EXCEPTION_REGISTRATION_RECORD { @@ -271,6 +302,7 @@ typedef struct _KPROCESS LIST_ENTRY ProfileListHead; ULONG_PTR DirectoryTable[2]; USHORT IopmOffset; + VOLATILE KAFFINITY ActiveProcessors; LIST_ENTRY ReadyListHead; LIST_ENTRY ThreadListHead; KAFFINITY Affinity; @@ -355,6 +387,7 @@ typedef struct _KTHREAD }; }; KWAIT_BLOCK WaitBlock[KTHREAD_WAIT_BLOCK + 1]; + KIRQL WaitIrql; LIST_ENTRY QueueListEntry; PKTRAP_FRAME TrapFrame; PVOID CallbackStack; @@ -363,6 +396,7 @@ typedef struct _KTHREAD UCHAR ApcStateIndex; BOOLEAN StackResident; PKPROCESS Process; + KAFFINITY Affinity; PKAPC_STATE ApcStatePointer[2]; KAPC_STATE SavedApcState; KAPC SuspendApc; diff --git a/sdk/xtdk/potypes.h b/sdk/xtdk/potypes.h new file mode 100644 index 0000000..e918686 --- /dev/null +++ b/sdk/xtdk/potypes.h @@ -0,0 +1,30 @@ +/** + * PROJECT: ExectOS + * COPYRIGHT: See COPYING.md in the top level directory + * FILE: sdk/xtdk/potypes.h + * DESCRIPTION: Power manager subsystem structures definitions + * DEVELOPERS: Rafal Kupiec + */ + +#ifndef __XTDK_POTYPES_H +#define __XTDK_POTYPES_H + +#include +#include +#include + + +/* Power Manager routine callbacks */ +typedef VOID (XTFASTCALL *PPROCESSOR_IDLE_FUNCTION)(PPROCESSOR_POWER_STATE PowerState); + +/* Processor power state structure definition */ +typedef struct _PROCESSOR_POWER_STATE +{ + PPROCESSOR_IDLE_FUNCTION IdleFunction; + ULONG Idle0TimeLimit; + UCHAR CurrentThrottle; + KTIMER PerfTimer; + KDPC PerfDpc; +} PROCESSOR_POWER_STATE, *PPROCESSOR_POWER_STATE; + +#endif /* __XTDK_POTYPES_H */ diff --git a/sdk/xtdk/xtkmapi.h b/sdk/xtdk/xtkmapi.h index 3ac339e..ae09189 100644 --- a/sdk/xtdk/xtkmapi.h +++ b/sdk/xtdk/xtkmapi.h @@ -30,6 +30,7 @@ #include #include #include +#include #include #include diff --git a/sdk/xtdk/xtstruct.h b/sdk/xtdk/xtstruct.h index 88f59ba..4e929b7 100644 --- a/sdk/xtdk/xtstruct.h +++ b/sdk/xtdk/xtstruct.h @@ -199,6 +199,8 @@ typedef struct _FLOAT128 FLOAT128, *PFLOAT128; typedef struct _GUID GUID, *PGUID; typedef struct _KAPC KAPC, *PKAPC; typedef struct _KAPC_STATE KAPC_STATE, *PKAPC_STATE; +typedef struct _KDPC KDPC, *PKDPC; +typedef struct _KDPC_DATA KDPC_DATA, *PKDPC_DATA; typedef struct _KERNEL_INITIALIZATION_BLOCK KERNEL_INITIALIZATION_BLOCK, *PKERNEL_INITIALIZATION_BLOCK; typedef struct _KGATE KGATE, *PKGATE; typedef struct _KPROCESS KPROCESS, *PKPROCESS; @@ -240,6 +242,7 @@ typedef struct _PECOFF_IMAGE_ROM_HEADER PECOFF_IMAGE_ROM_HEADER, *PPECOFF_IMAGE_ typedef struct _PECOFF_IMAGE_ROM_OPTIONAL_HEADER PECOFF_IMAGE_ROM_OPTIONAL_HEADER, *PPECOFF_IMAGE_ROM_OPTIONAL_HEADER; typedef struct _PECOFF_IMAGE_SECTION_HEADER PECOFF_IMAGE_SECTION_HEADER, *PPECOFF_IMAGE_SECTION_HEADER; typedef struct _PECOFF_IMAGE_VXD_HEADER PECOFF_IMAGE_VXD_HEADER, *PPECOFF_IMAGE_VXD_HEADER; +typedef struct _PROCESSOR_POWER_STATE PROCESSOR_POWER_STATE, *PPROCESSOR_POWER_STATE; typedef struct _SINGLE_LIST_ENTRY SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY; typedef struct _STRING STRING, *PSTRING; typedef struct _STRING32 STRING32, *PSTRING32;