diff options
Diffstat (limited to 'src/lib/pci.zig')
-rw-r--r-- | src/lib/pci.zig | 23 |
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(®); + 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(®); + return Controller{ .conventional = .{ .reg = reg.slice(u8) } }; } else { - return null; + return Error.NoPciController; } } |