33 lines
893 B
Zig
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 };
|
|
}
|
|
};
|