Skip to main content

kernel/state/
kstate.rs

1// SPDX-License-Identifier: GPL-3.0-only
2//! Central kernel state aggregate ([`KState`]): one static holding every OS
3//! subsystem's state.
4//!
5//! Authors: MarioS271
6
7use super::subcats::dev::Devs;
8use super::subcats::vdev::VDevs;
9use super::subcats::sys::Sys;
10use super::subcats::mnt::Mounts;
11use super::subcats::net::Net;
12use super::subcats::ipc::Ipc;
13use super::subcats::sched::Sched;
14use super::subcats::mm::Mm;
15use super::subcats::irq::Irq;
16use super::subcats::time::Time;
17use super::subcats::cpu::Cpu;
18use super::subcats::fs::Fs;
19use super::subcats::procs::Procs;
20
21static KSTATE: KState = KState {
22    devs: Devs {},
23    vdevs: VDevs {},
24    sys: Sys {},
25    mnt: Mounts {},
26    net: Net {},
27    ipc: Ipc {},
28    sched: Sched {},
29    mm: Mm {},
30    irq: Irq {},
31    time: Time {},
32    cpu: Cpu::new(),
33    fs: Fs {},
34    procs: Procs {},
35};
36
37/// The central kernel state aggregate; one field per OS subsystem domain.
38pub struct KState {
39    pub devs: Devs,
40    pub vdevs: VDevs,
41    pub sys: Sys,
42    pub mnt: Mounts,
43    pub net: Net,
44    pub ipc: Ipc,
45    pub sched: Sched,
46    pub mm: Mm,
47    pub irq: Irq,
48    pub time: Time,
49    pub cpu: Cpu,
50    pub fs: Fs,
51    pub procs: Procs,
52}
53
54impl KState {
55    /// Return a `'static` reference to the global kernel state.
56    pub fn get() -> &'static Self {
57        &KSTATE
58    }
59}