From 6b8e389b47cc065d99614ccadbad0021baad7c5c Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Tue, 25 Mar 2014 18:50:41 +0100 Subject: [PATCH] Fix 32-bit PCI devices not having bar sizes correctly determined. --- kernel/pci.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kernel/pci.cpp b/kernel/pci.cpp index e8cae90b..1c8da15f 100644 --- a/kernel/pci.cpp +++ b/kernel/pci.cpp @@ -198,6 +198,7 @@ pcibar_t GetBAR(uint32_t devaddr, uint8_t bar) PCI::Write32(devaddr, 0x10 + 4 * (bar+0), low); result.size_raw = (uint64_t) size_low << 0; result.size_raw = ~(result.size_raw & 0xFFFFFFF0) + 1; + result.size_raw &= 0xFFFFFFFF; } else if ( result.is_iospace() ) { @@ -206,6 +207,7 @@ pcibar_t GetBAR(uint32_t devaddr, uint8_t bar) PCI::Write32(devaddr, 0x10 + 4 * (bar+0), low); result.size_raw = (uint64_t) size_low << 0; result.size_raw = ~(result.size_raw & 0xFFFFFFFC) + 1; + result.size_raw &= 0xFFFFFFFF; } return result;