diff --git a/sdk/xtdk/ketypes.h b/sdk/xtdk/ketypes.h index dcba1c4..aa60161 100644 --- a/sdk/xtdk/ketypes.h +++ b/sdk/xtdk/ketypes.h @@ -75,6 +75,15 @@ typedef enum _KAPC_ENVIRONMENT InsertApcEnvironment } KAPC_ENVIRONMENT, *PKAPC_ENVIRONMENT; +/* DPC importance enumeration list */ +typedef enum _KDPC_IMPORTANCE +{ + LowImportance, + MediumImportance, + HighImportance, + MediumHighImportance +} KDPC_IMPORTANCE, *PKDPC_IMPORTANCE; + /* Kernel objects */ typedef enum _KOBJECTS { diff --git a/sdk/xtdk/xtstruct.h b/sdk/xtdk/xtstruct.h index 127d912..b6c9022 100644 --- a/sdk/xtdk/xtstruct.h +++ b/sdk/xtdk/xtstruct.h @@ -39,6 +39,7 @@ typedef enum _EFI_UART_PARITY_TYPE EFI_UART_PARITY_TYPE, *PEFI_UART_PARITY_TYPE; typedef enum _EFI_UART_STOP_BITS_TYPE EFI_UART_STOP_BITS_TYPE, *PEFI_UART_STOP_BITS_TYPE; typedef enum _EFI_UNIVERSA_GRAPHICS_BLT_OPERATION EFI_UNIVERSA_GRAPHICS_BLT_OPERATION, *PEFI_UNIVERSA_GRAPHICS_BLT_OPERATION; typedef enum _KAPC_ENVIRONMENT KAPC_ENVIRONMENT, *PKAPC_ENVIRONMENT; +typedef enum _KDPC_IMPORTANCE KDPC_IMPORTANCE, *PKDPC_IMPORTANCE; typedef enum _KOBJECTS KOBJECTS, *PKOBJECTS; typedef enum _KPROCESS_STATE KPROCESS_STATE, *PKPROCESS_STATE; typedef enum _KTHREAD_STATE KTHREAD_STATE, *PKTHREAD_STATE; diff --git a/xtoskrnl/CMakeLists.txt b/xtoskrnl/CMakeLists.txt index d5be385..7ff8b12 100644 --- a/xtoskrnl/CMakeLists.txt +++ b/xtoskrnl/CMakeLists.txt @@ -17,6 +17,7 @@ list(APPEND XTOSKRNL_SOURCE ${XTOSKRNL_SOURCE_DIR}/hl/globals.c ${XTOSKRNL_SOURCE_DIR}/hl/${ARCH}/ioport.c ${XTOSKRNL_SOURCE_DIR}/ke/apc.c + ${XTOSKRNL_SOURCE_DIR}/ke/dpc.c ${XTOSKRNL_SOURCE_DIR}/ke/globals.c ${XTOSKRNL_SOURCE_DIR}/ke/kprocess.c ${XTOSKRNL_SOURCE_DIR}/ke/krnlinit.c diff --git a/xtoskrnl/ke/dpc.c b/xtoskrnl/ke/dpc.c new file mode 100644 index 0000000..4a7ff48 --- /dev/null +++ b/xtoskrnl/ke/dpc.c @@ -0,0 +1,60 @@ +/** + * PROJECT: ExectOS + * COPYRIGHT: See COPYING.md in the top level directory + * FILE: xtoskrnl/ke/dpc.c + * DESCRIPTION: Deferred Procedure Call (DPC) support + * DEVELOPERS: Rafal Kupiec + */ + +#include + + +/** + * Initializes Deferred Procedure Call (DPC) object. + * + * @param Dpc + * Supplies a pointer to the DPC being initialized. + * + * @param DpcRoutine + * Supplies a pointer to the DPC routine being called on object removal. + * + * @param DpcContext + * Supplies a pointer to memory area containing context data for DPC routine. + * + * @return This routine does not return any value. + * + * @since NT 3.5 + */ +XTAPI +VOID +KeInitializeDpc(IN PKDPC Dpc, + IN PKDEFERRED_ROUTINE DpcRoutine, + IN PVOID DpcContext) +{ + /* Initialize DPC */ + Dpc->Type = DpcObject; + Dpc->Number = 0; + Dpc->Importance = MediumImportance; + + /* Initialize DPC routine and context data */ + Dpc->DeferredContext = DpcContext; + Dpc->DeferredRoutine = DpcRoutine; + Dpc->DpcData = NULL; +} + +/** + * Retires the expired DPC objects found in the DPC list. + * + * @param Prcb + * Supplies apointer to the Prcessor Control Block (PRCB). + * + * @return This routine does not return any value. + * + * @since XT 1.0 + */ +XTFASTCALL +VOID +KepRetireDpcList(IN PKPROCESSOR_CONTROL_BLOCK Prcb) +{ + UNIMPLEMENTED; +}