The Pedigree Project
0.1
src
system
include
pedigree
kernel
machine
DiskPaging.h
1
/*
2
* Copyright (c) 2026, Pedigree Developers
3
*
4
* Permission to use, copy, modify, and distribute this software for any
5
* purpose with or without fee is hereby granted.
6
*/
7
#ifndef PEDIGREE_MACHINE_DISKPAGING_H
8
#define PEDIGREE_MACHINE_DISKPAGING_H
9
10
#include "pedigree/kernel/compiler.h"
11
#include "pedigree/kernel/processor/types.h"
12
13
class
Disk
;
14
struct
DiskEndpoint
;
15
17
enum class
PagingStatus { Success, Unsupported, Busy, NoMemory, Invalid, IoError, Closed };
18
enum class
PagingOperation { Read, Write, Flush };
19
struct
PagingRequest
{
20
PagingOperation operation;
21
uint64_t offset;
22
void
* page;
23
PagingStatus result;
24
};
25
27
class
EXPORTED_PUBLIC
DiskUse
{
28
public
:
29
DiskUse
();
30
DiskUse
(
DiskUse
&& other)
noexcept
;
31
~DiskUse
();
32
DiskUse
& operator=(
DiskUse
&& other)
noexcept
;
33
void
reset();
34
Disk
* get()
const
;
35
explicit
operator
bool()
const
;
36
37
private
:
38
friend
class
Disk
;
39
friend
class
DiskEndpoints
;
40
DiskUse
(
const
DiskUse
&) =
delete
;
41
DiskUse
& operator=(
const
DiskUse
&) =
delete
;
42
DiskEndpoint
* m_Endpoint;
43
};
44
46
class
EXPORTED_PUBLIC
PagingTransport
{
47
public
:
48
virtual
PagingStatus transfer(PagingOperation operation, uint64_t offset,
void
* page) = 0;
49
virtual
void
release() = 0;
50
51
protected
:
52
virtual
~PagingTransport
() =
default
;
53
};
54
60
class
EXPORTED_PUBLIC
PagingChannel
{
61
public
:
62
static
constexpr
size_t
PageBytes = 4096;
63
PagingChannel
();
64
~PagingChannel
();
65
PagingChannel
(
const
PagingChannel
&) =
delete
;
66
PagingChannel
& operator=(
const
PagingChannel
&) =
delete
;
67
68
PagingStatus readPage(uint64_t offset,
void
* page);
69
PagingStatus writePage(uint64_t offset,
const
void
* page);
70
PagingStatus flush();
71
void
reset();
72
uint32_t endpointId()
const
;
73
uint64_t size()
const
;
74
explicit
operator
bool()
const
;
75
76
private
:
77
friend
class
DiskEndpoints
;
78
PagingStatus transfer(PagingOperation operation, uint64_t offset,
void
* page);
79
DiskEndpoint
* m_Endpoint;
80
};
81
87
class
EXPORTED_PUBLIC
DiskEndpoints
{
88
public
:
89
static
constexpr
size_t
Capacity = 64;
90
static
bool
acquire(uint32_t
id
,
DiskUse
& use);
91
static
size_t
snapshot(uint32_t* ids,
size_t
capacity);
92
static
bool
describe(uint32_t
id
, uint64_t& bytes);
93
static
PagingStatus prepare(uint32_t
id
,
PagingChannel
& channel);
94
95
private
:
96
friend
class
Disk
;
97
static
DiskEndpoint
* reserve(
Disk
* disk);
98
static
void
publish(
DiskEndpoint
* endpoint);
99
static
bool
acquire(
DiskEndpoint
* endpoint,
Disk
* disk,
DiskUse
& use);
100
static
uint32_t id(
DiskEndpoint
* endpoint,
Disk
* disk);
101
static
void
retire(
DiskEndpoint
* endpoint,
Disk
* disk);
102
static
bool
tryClose(
DiskEndpoint
* endpoint,
Disk
* disk);
103
static
void
reopen(
DiskEndpoint
* endpoint,
Disk
* disk);
104
};
105
106
#endif
DiskEndpoints
Definition
DiskPaging.h:87
DiskUse
Definition
DiskPaging.h:27
Disk
Definition
Disk.h:35
PagingChannel
Definition
DiskPaging.h:60
PagingTransport
Definition
DiskPaging.h:46
DiskEndpoint
Definition
DiskPaging.cc:16
PagingRequest
Definition
DiskPaging.h:19
Generated on Tue Sep 22 2026 06:05:49 for The Pedigree Project by
1.9.8