Files
exectos/sdk/xtdk/extypes.h
Aiken Harris 8479c95e82
Some checks failed
Builds / ExectOS (i686, release) (push) Failing after 28s
Builds / ExectOS (i686, debug) (push) Failing after 29s
Builds / ExectOS (amd64, release) (push) Failing after 34s
Builds / ExectOS (amd64, debug) (push) Failing after 36s
Implement kernel lookaside lists
2026-06-23 19:05:04 +02:00

155 lines
3.8 KiB
C

/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: sdk/xtdk/extypes.h
* DESCRIPTION: Kernel executive structures definitions
* DEVELOPERS: Rafal Kupiec <belliash@codingworkshop.eu.org>
*/
#ifndef __XTDK_EXTYPES_H
#define __XTDK_EXTYPES_H
#include <xtbase.h>
#include <xttypes.h>
#include <ketypes.h>
/* Rundown protection flags */
#define EX_RUNDOWN_ACTIVE 0x1
/* Number of lookaside lists */
#define POOL_LOOKASIDE_LISTS 32
/* C/C++ specific code */
#ifndef __XTOS_ASSEMBLER__
/* Kernel routine callbacks */
typedef XTSTATUS (XTAPI *PALLOCATE_FUNCTION)(IN MMPOOL_TYPE PoolType, IN SIZE_T Bytes, OUT PVOID *Memory, IN ULONG Tag);
typedef XTSTATUS (XTAPI *PALLOCATE_FUNCTION_EX)(IN MMPOOL_TYPE PoolType, IN SIZE_T Bytes, OUT PVOID *Memory, IN ULONG Tag, IN PLOOKASIDE_LIST_EX Lookaside);
typedef XTSTATUS (XTAPI *PFREE_FUNCTION)(IN PVOID Buffer);
typedef XTSTATUS (XTAPI *PFREE_FUNCTION_EX)(IN PVOID Buffer, IN OUT PLOOKASIDE_LIST_EX Lookaside);
/* Owner entry structure definition */
typedef struct _OWNER_ENTRY
{
ULONG_PTR OwnerThread;
union
{
struct
{
ULONG IoPriorityBoosted:1;
ULONG OwnerReferenced:1;
ULONG OwnerCount:30;
};
ULONG TableSize;
};
} OWNER_ENTRY, *POWNER_ENTRY;
/* Exclusive resource structure definition */
typedef struct _ERESOURCE
{
LIST_ENTRY SystemResourcesList;
POWNER_ENTRY OwnerTable;
SHORT ActiveCount;
USHORT Flag;
VOLATILE PKSEMAPHORE SharedWaiters;
VOLATILE PKEVENT ExclusiveWaiters;
OWNER_ENTRY OwnerEntry;
ULONG ActiveEntries;
ULONG ContentionCount;
ULONG NumberOfSharedWaiters;
ULONG NumberOfExclusiveWaiters;
union
{
PVOID Address;
ULONG_PTR CreatorBackTraceIndex;
};
KSPIN_LOCK SpinLock;
} ERESOURCE, *PERESOURCE;
/* Executive rundown protection structure definition */
typedef union _EX_RUNDOWN_REFERENCE
{
ULONG_PTR Count;
PVOID Ptr;
} EX_RUNDOWN_REFERENCE, *PEX_RUNDOWN_REFERENCE;
/* Executive rundown wait block definition */
typedef struct _EX_RUNDOWN_WAIT_BLOCK
{
ULONG_PTR Count;
KEVENT WakeEvent;
} EX_RUNDOWN_WAIT_BLOCK, *PEX_RUNDOWN_WAIT_BLOCK;
/* Lookaside list structure definition */
typedef struct _GENERAL_LOOKASIDE
{
union
{
SINGLE_LIST_HEADER ListHead;
SINGLE_LIST_ENTRY SingleListHead;
};
USHORT Depth;
USHORT MaximumDepth;
ULONG TotalAllocates;
union
{
ULONG AllocateMisses;
ULONG AllocateHits;
};
ULONG TotalFrees;
union {
ULONG FreeMisses;
ULONG FreeHits;
};
MMPOOL_TYPE Type;
ULONG Tag;
ULONG Size;
union
{
PALLOCATE_FUNCTION_EX AllocateEx;
PALLOCATE_FUNCTION Allocate;
};
union
{
PFREE_FUNCTION_EX FreeEx;
PFREE_FUNCTION Free;
};
LIST_ENTRY ListEntry;
ULONG LastTotalAllocates;
union
{
ULONG LastAllocateMisses;
ULONG LastAllocateHits;
};
ULONG Future[2];
} GENERAL_LOOKASIDE, *PGENERAL_LOOKASIDE;
/* Lookaside list pointers structure definition */
typedef struct _LOOKASIDE_LIST
{
PGENERAL_LOOKASIDE Local;
PGENERAL_LOOKASIDE Global;
} LOOKASIDE_LIST, *PLOOKASIDE_LIST;
/* Lookaside list extended structure definition */
typedef struct _LOOKASIDE_LIST_EX
{
GENERAL_LOOKASIDE Global;
} LOOKASIDE_LIST_EX, *PLOOKASIDE_LIST_EX;
/* Non-paged lookaside list structure definition */
typedef struct _NONPAGED_LOOKASIDE_LIST
{
GENERAL_LOOKASIDE Global;
} NONPAGED_LOOKASIDE_LIST, *PNONPAGED_LOOKASIDE_LIST;
/* Paged lookaside list structure definition */
typedef struct _PAGED_LOOKASIDE_LIST
{
GENERAL_LOOKASIDE Global;
} PAGED_LOOKASIDE_LIST, *PPAGED_LOOKASIDE_LIST;
#endif /* __XTOS_ASSEMBLER__ */
#endif /* __XTDK_EXTYPES_H */