Files
zing/src/mem.zig
T
2025-03-14 22:16:36 +02:00

33 lines
893 B
Zig

pub const vmm = @import("mem/vmm.zig");
pub const translationLevel = vmm.translationLevel;
pub const PhysicalAddress = packed struct(u64) {
raw: u64,
pub const NULL: @This() = .{ .raw = 0 };
pub var gVirtualizeBase: usize = 0;
pub var gVirtualizeSize: usize = 0;
pub fn add(self: @This(), offset: usize) @This() {
return .{ .raw = self.raw + @as(u64, @intCast(offset)) };
}
pub fn virtualize(self: @This()) usize {
if (self.raw > gVirtualizeSize) {
@panic("Physical address out of virtualize bounds");
}
return self.raw + gVirtualizeBase;
}
pub fn from_virtualized(virt: usize) @This() {
if ((virt < gVirtualizeBase) || (virt - gVirtualizeBase > gVirtualizeSize)) {
@panic("Invalid virtualized physical address");
}
return .{ .raw = virt - gVirtualizeBase };
}
};