Skip to main content

kernel_api/allocator/
mod.rs

1//! Physical and virtual memory allocation
2
3mod pmm;
4pub use pmm::*;
5
6mod vmm;
7pub use vmm::*;
8
9/// The error returned when an allocation was unsuccessful
10#[derive(Debug, Copy, Clone, Eq, PartialEq, Default)]
11#[non_exhaustive]
12pub struct AllocError {
13	provider: AllocProvider,
14}
15
16impl AllocError {
17	pub fn pmm() -> Self { Self { provider: AllocProvider::Pmm } }
18	pub fn vmm() -> Self { Self { provider: AllocProvider::Vmm } }
19	pub fn heap() -> Self { Self { provider: AllocProvider::Heap } }
20}
21
22#[derive(Debug, Copy, Clone, Eq, PartialEq, Default)]
23enum AllocProvider {
24	#[default]
25	None,
26	Pmm,
27	Vmm,
28	Heap,
29	Syscall(crate::syscall::Error),
30}
31
32impl From<crate::syscall::Error> for AllocError {
33	fn from(value: crate::syscall::Error) -> Self {
34		AllocError { provider: AllocProvider::Syscall(value) }
35	}
36}