Serenity Operating System
1/*
2 * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#pragma once
8
9#include <AK/DistinctNumeric.h>
10#include <Kernel/API/POSIX/sys/types.h>
11
12namespace Kernel {
13
14enum class LockRank;
15
16class BlockDevice;
17class CharacterDevice;
18class Coredump;
19class Credentials;
20class Custody;
21class Device;
22class DiskCache;
23class DoubleBuffer;
24class File;
25class FATInode;
26class OpenFileDescription;
27class DisplayConnector;
28class FileSystem;
29class FutexQueue;
30class IPv4Socket;
31class Inode;
32class InodeIdentifier;
33class InodeWatcher;
34class Jail;
35class KBuffer;
36class KString;
37class LocalSocket;
38class Mutex;
39class MasterPTY;
40class Mount;
41class PerformanceEventBuffer;
42class ProcFS;
43class ProcFSInode;
44class Process;
45class ProcessGroup;
46class RAMFS;
47template<LockRank Rank>
48class RecursiveSpinlock;
49class Scheduler;
50class Socket;
51class SysFS;
52class SysFSDirectory;
53class SysFSRootDirectory;
54class SysFSBusDirectory;
55class SysFSDevicesDirectory;
56class SysFSDirectoryInode;
57class SysFSInode;
58class TCPSocket;
59class TTY;
60class Thread;
61class ThreadTracer;
62class RAMFSInode;
63class UDPSocket;
64class UserOrKernelBuffer;
65class VirtualFileSystem;
66class WaitQueue;
67class WorkQueue;
68
69namespace Memory {
70class AddressSpace;
71class AnonymousVMObject;
72class InodeVMObject;
73class MappedROM;
74class MemoryManager;
75class PageDirectory;
76class PhysicalPage;
77class PhysicalRegion;
78class PrivateInodeVMObject;
79class Region;
80class SharedInodeVMObject;
81class VMObject;
82class VirtualRange;
83}
84
85template<LockRank Rank>
86class Spinlock;
87template<typename LockType>
88class SpinlockLocker;
89
90struct InodeMetadata;
91struct TrapFrame;
92
93AK_TYPEDEF_DISTINCT_ORDERED_ID(pid_t, ProcessID);
94AK_TYPEDEF_DISTINCT_ORDERED_ID(pid_t, ThreadID);
95AK_TYPEDEF_DISTINCT_ORDERED_ID(pid_t, SessionID);
96AK_TYPEDEF_DISTINCT_ORDERED_ID(pid_t, ProcessGroupID);
97
98AK_TYPEDEF_DISTINCT_ORDERED_ID(uid_t, UserID);
99AK_TYPEDEF_DISTINCT_ORDERED_ID(gid_t, GroupID);
100
101}