Initial kernel events support
All checks were successful
ci/woodpecker/push/build Pipeline was successful

This commit is contained in:
Rafal Kupiec 2023-03-17 16:46:18 +01:00
parent e0778d0a12
commit 934dba37a1
Signed by: belliash
GPG Key ID: 4E829243E0CFE6B4
5 changed files with 117 additions and 0 deletions

View File

@ -16,6 +16,10 @@
/* Kernel services routines forward references */
XTAPI
VOID
KeClearEvent(IN PKEVENT Event);
XTAPI
VOID
KeInitializeApc(IN PKAPC Apc,
@ -27,6 +31,12 @@ KeInitializeApc(IN PKAPC Apc,
IN KPROCESSOR_MODE ApcMode,
IN PVOID Context);
XTAPI
VOID
KeInitializeEvent(OUT PKEVENT Event,
IN KEVENT_TYPE EventType,
IN BOOLEAN InitialState);
XTAPI
VOID
KeInitializeSemaphore(IN PKSEMAPHORE Semaphore,
@ -57,6 +67,12 @@ KeReleaseSemaphore(IN PKSEMAPHORE Semaphore,
IN LONG Adjustment,
IN BOOLEAN Wait);
XTAPI
LONG
KeSetEvent(IN PKEVENT Event,
IN KPRIORITY Increment,
IN BOOLEAN Wait);
XTAPI
VOID
KeStartXtSystem(IN PKERNEL_INITIALIZATION_BLOCK Parameters);

View File

@ -84,6 +84,13 @@ typedef enum _KDPC_IMPORTANCE
MediumHighImportance
} KDPC_IMPORTANCE, *PKDPC_IMPORTANCE;
/* Event types list */
typedef enum _KEVENT_TYPE
{
NotificationEvent,
SynchronizationEvent
} KEVENT_TYPE, *PKEVENT_TYPE;
/* Kernel objects */
typedef enum _KOBJECTS
{
@ -226,6 +233,12 @@ typedef struct _KDPC_DATA
ULONG DpcCount;
} KDPC_DATA, *PKDPC_DATA;
/* Event object structure definition */
typedef struct _KEVENT
{
DISPATCHER_HEADER Header;
} KEVENT, *PKEVENT;
/* Exception registration record structure definition */
typedef struct _EXCEPTION_REGISTRATION_RECORD
{

View File

@ -40,6 +40,7 @@ typedef enum _EFI_UART_STOP_BITS_TYPE EFI_UART_STOP_BITS_TYPE, *PEFI_UART_STOP_B
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 _KEVENT_TYPE KEVENT_TYPE, *PKEVENT_TYPE;
typedef enum _KOBJECTS KOBJECTS, *PKOBJECTS;
typedef enum _KPROCESS_STATE KPROCESS_STATE, *PKPROCESS_STATE;
typedef enum _KTHREAD_STATE KTHREAD_STATE, *PKTHREAD_STATE;
@ -204,6 +205,7 @@ 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 _KEVENT KEVENT, *PKEVENT;
typedef struct _KGATE KGATE, *PKGATE;
typedef struct _KPROCESS KPROCESS, *PKPROCESS;
typedef struct _KQUEUE KQUEUE, *PKQUEUE;

View File

@ -18,6 +18,7 @@ list(APPEND XTOSKRNL_SOURCE
${XTOSKRNL_SOURCE_DIR}/hl/${ARCH}/ioport.c
${XTOSKRNL_SOURCE_DIR}/ke/apc.c
${XTOSKRNL_SOURCE_DIR}/ke/dpc.c
${XTOSKRNL_SOURCE_DIR}/ke/event.c
${XTOSKRNL_SOURCE_DIR}/ke/globals.c
${XTOSKRNL_SOURCE_DIR}/ke/kprocess.c
${XTOSKRNL_SOURCE_DIR}/ke/krnlinit.c

85
xtoskrnl/ke/event.c Normal file
View File

@ -0,0 +1,85 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/ke/event.c
* DESCRIPTION: Kernel events support
* DEVELOPERS: Rafal Kupiec <belliash@codingworkshop.eu.org>
*/
#include <xtos.h>
/**
* Clears the signal state of the event.
*
* @param Event
* Supplies a pointer to the event object.
*
* @return This routine does not return any value.
*
* @since NT 3.5
*/
XTAPI
VOID
KeClearEvent(IN PKEVENT Event)
{
/* Clear event's signal state */
Event->Header.SignalState = FALSE;
}
/**
* Initializes a kernel event.
*
* @param Event
* Supplies a pointer to the event object.
*
* @param EventType
* Specifies an event type.
*
* @param InitialState
* Specifies the initial signal state of the event.
*
* @return This routine does not return any value.
*
* @since NT 3.5
*/
XTAPI
VOID
KeInitializeEvent(OUT PKEVENT Event,
IN KEVENT_TYPE EventType,
IN BOOLEAN InitialState)
{
/* Initialize event dispatcher header */
Event->Header.Type = EventType;
Event->Header.SignalState = InitialState;
/* Initialize event wait list */
RtlInitializeListHead(&Event->Header.WaitListHead);
}
/**
* Sets new signal state and satisfy waits if possible.
*
* @param Event
* Supplies a pointer to the event object.
*
* @param Increment
* Specifies an event priority boost value.
*
* @param Wait
* Specifies whether to call kernel wait routines or not.
*
* @return This routine returns the previous signal state of the event.
*
* @since NT 3.5
*/
XTAPI
LONG
KeSetEvent(IN PKEVENT Event,
IN KPRIORITY Increment,
IN BOOLEAN Wait)
{
UNIMPLEMENTED;
return 0;
}