Kernelite 0.1.0
Kernelite is a minimalist, educational operating system kernel built from scratch. The project aims to recreate core components of the Linux architecture to explore the fundamentals of operating system design and hardware-software interaction.
Loading...
Searching...
No Matches
mmu.h
Go to the documentation of this file.
1
11#ifndef MMU_MMU_H
12#define MMU_MMU_H
13
15
16#include <stdint.h>
17
27typedef struct __attribute__((packed)) tcr_reg_t {
28 union {
30 uint64_t value;
31
33 struct __attribute__((packed)) {
34 /* ── TTBR0 region ───────────────────────────────────
35 */
38 uint64_t t0sz : 6;
39
41 uint64_t res0_6 : 1;
42
45 uint64_t epd0 : 1;
46
49 uint64_t irgn0 : 2;
50
53 uint64_t orgn0 : 2;
54
57 uint64_t sh0 : 2;
58
61 uint64_t tg0 : 2;
62
63 /* ── TTBR1 region ───────────────────────────────────
64 */
67 uint64_t t1sz : 6;
68
71 uint64_t a1 : 1;
72
75 uint64_t epd1 : 1;
76
79 uint64_t irgn1 : 2;
80
83 uint64_t orgn1 : 2;
84
87 uint64_t sh1 : 2;
88
91 uint64_t tg1 : 2;
92
93 /* ── Physical address size ──────────────────────────
94 */
97 uint64_t ips : 3;
98
100 uint64_t res0_35 : 1;
101
105 uint64_t as : 1;
106
107 /* ── Top-byte ignore ────────────────────────────────
108 */
111 uint64_t tbi0 : 1;
112
115 uint64_t tbi1 : 1;
116
117 /* ── Hardware Access / Dirty (FEAT_HAF / FEAT_HAFDBS)
118 */
121 uint64_t ha : 1;
122
125 uint64_t hd : 1;
126
127 /* ── Hierarchical Permission Disable (FEAT_HPDS) ─────
128 */
131 uint64_t hpd0 : 1;
132
135 uint64_t hpd1 : 1;
136
137 /* ── Hardware Use bits (FEAT_HPDS2) ─────────────────
138 */
141 uint64_t hwu059 : 1;
142
145 uint64_t hwu060 : 1;
146
149 uint64_t hwu061 : 1;
150
153 uint64_t hwu062 : 1;
154
157 uint64_t hwu159 : 1;
158
161 uint64_t hwu160 : 1;
162
165 uint64_t hwu161 : 1;
166
169 uint64_t hwu162 : 1;
170
171 /* ── Top-byte ignore for data only (FEAT_PAuth) ─────
172 */
175 uint64_t tbid0 : 1;
176
179 uint64_t tbid1 : 1;
180
181 /* ── Non-Fault Disable (FEAT_SVE) ───────────────────
182 */
185 uint64_t nfd0 : 1;
186
189 uint64_t nfd1 : 1;
190
191 /* ── EL0 fault on TTBR access (FEAT_E0PD) ───────────
192 */
195 uint64_t e0pd0 : 1;
196
199 uint64_t e0pd1 : 1;
200
201 /* ── Tag Check Mask (FEAT_MTE2) ──────────────────────
202 */
205 uint64_t tcma0 : 1;
206
209 uint64_t tcma1 : 1;
210
211 /* ── 52-bit PA (FEAT_LPA2) ──────────────────────────
212 */
215 uint64_t ds : 1;
216
217 /* ── Extended MTE canonical tagging
218 * (FEAT_MTE_NO_ADDRESS_TAGS / FEAT_MTE_CANONICAL_TAGS)
219 */
222 uint64_t mtx0 : 1;
223
226 uint64_t mtx1 : 1;
227
229 uint64_t res0_63_62 : 2;
230 };
231 };
233_Static_assert(sizeof(tcr_reg_t) == 8,
234 "FATAL: tcr_reg_t must be exactly 8 bytes (64-bit register)");
235
256bool enable_mmu(page_table_t *id_map_root, page_table_t *kernel_map_root);
257
258#endif /* MMU_MMU_H */
bool enable_mmu(page_table_t *id_map_root, page_table_t *kernel_map_root)
Configure system registers and enable the AArch64 EL1 MMU.
Definition mmu.c:415
Page table definitions and helpers for virtual memory mapping.
Represents a single page table level (512 entries).
Definition page_table.h:315
TCR_EL1 — Translation Control Register, EL1.
Definition mmu.h:27
uint64_t hwu159
Definition mmu.h:157
uint64_t tg1
Definition mmu.h:91
uint64_t e0pd1
Definition mmu.h:199
uint64_t orgn1
Definition mmu.h:83
uint64_t nfd0
Definition mmu.h:185
uint64_t epd0
Definition mmu.h:45
uint64_t as
Definition mmu.h:105
uint64_t mtx1
Definition mmu.h:226
uint64_t hwu161
Definition mmu.h:165
uint64_t tbid1
Definition mmu.h:179
uint64_t res0_6
Definition mmu.h:41
uint64_t tbid0
Definition mmu.h:175
uint64_t irgn1
Definition mmu.h:79
uint64_t hpd1
Definition mmu.h:135
uint64_t tbi1
Definition mmu.h:115
uint64_t epd1
Definition mmu.h:75
uint64_t res0_63_62
Definition mmu.h:229
uint64_t a1
Definition mmu.h:71
uint64_t hpd0
Definition mmu.h:131
uint64_t sh0
Definition mmu.h:57
uint64_t tg0
Definition mmu.h:61
uint64_t value
Definition mmu.h:30
uint64_t t1sz
Definition mmu.h:67
uint64_t sh1
Definition mmu.h:87
uint64_t orgn0
Definition mmu.h:53
uint64_t hd
Definition mmu.h:125
uint64_t t0sz
Definition mmu.h:38
uint64_t ha
Definition mmu.h:121
uint64_t hwu060
Definition mmu.h:145
uint64_t hwu162
Definition mmu.h:169
uint64_t hwu062
Definition mmu.h:153
uint64_t hwu061
Definition mmu.h:149
uint64_t tbi0
Definition mmu.h:111
uint64_t hwu160
Definition mmu.h:161
uint64_t hwu059
Definition mmu.h:141
uint64_t nfd1
Definition mmu.h:189
uint64_t ds
Definition mmu.h:215
uint64_t res0_35
Definition mmu.h:100
uint64_t tcma1
Definition mmu.h:209
uint64_t ips
Definition mmu.h:97
uint64_t mtx0
Definition mmu.h:222
uint64_t tcma0
Definition mmu.h:205
uint64_t irgn0
Definition mmu.h:49
uint64_t e0pd0
Definition mmu.h:195