aboutsummaryrefslogtreecommitdiff
path: root/src/lib/pci.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/pci.zig')
-rw-r--r--src/lib/pci.zig23
1 files changed, 10 insertions, 13 deletions
diff --git a/src/lib/pci.zig b/src/lib/pci.zig
index 7b862ee..573ff18 100644
--- a/src/lib/pci.zig
+++ b/src/lib/pci.zig
@@ -5,17 +5,10 @@
const std = @import("std");
const hwinfo = @import("hwinfo.zig");
+const paging = @import("paging.zig");
pub const Error = error{
- NoRootNode,
- NoSoCnode,
- NoAddrCells,
- NoSizeCells,
- NoPcinode,
- NoUnitAddr,
- NoReg,
- NoCompatInfo,
- Incompatible,
+ NoPciController,
};
pub const CamType = enum {
@@ -747,15 +740,19 @@ pub const CfgSpace = packed struct(u576) {
}
};
-pub fn controllerFromHwInfo() ?Controller {
+pub fn controllerFromHwInfo(kmem: *paging.Table) !Controller {
var pcie = hwinfo.byKind(.pcie);
var pci = hwinfo.byKind(.pci);
if (try pcie.next()) |ecam| {
- return Controller{ .enhanced = .{ .reg = ecam.reg.slice(u8) } };
+ var reg = ecam.reg;
+ try kmem.mapDevice(&reg);
+ return Controller{ .enhanced = .{ .reg = reg.slice(u8) } };
} else if (try pci.next()) |cam| {
- return Controller{ .conventional = .{ .reg = cam.reg.slice(u8) } };
+ var reg = cam.reg;
+ try kmem.mapDevice(&reg);
+ return Controller{ .conventional = .{ .reg = reg.slice(u8) } };
} else {
- return null;
+ return Error.NoPciController;
}
}