From 906e1937bbe645522e1c59a98dfeca3bccc1bff8 Mon Sep 17 00:00:00 2001 From: Himbeer Date: Sun, 26 May 2024 12:50:49 +0200 Subject: paging: Map PCI(e) controller before using it --- src/lib/pci.zig | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) (limited to 'src/lib/pci.zig') 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; } } -- cgit v1.2.3