X-Git-Url: http://git.joshuawise.com/netwatch.git/blobdiff_plain/81148fa15713ee68be49610206526d0725a5868f..d5d3737996d3828397e02f0f953fbc5c9e63f709:/pci/pci-raw.c?ds=inline diff --git a/pci/pci-raw.c b/pci/pci-raw.c index 1d59208..37f5f79 100644 --- a/pci/pci-raw.c +++ b/pci/pci-raw.c @@ -1,10 +1,20 @@ +/* pci-raw.c + * Raw PCI implementation + * NetWatch system management mode administration console + * + * Copyright (c) 2008 Jacob Potter and Joshua Wise. All rights reserved. + * This program is free software; you can redistribute and/or modify it under + * the terms found in the file LICENSE in the root of this source tree. + * + */ + #include #include #include static void __pci_config(int bus, int slot, int fn, int addr) { - outl(0xCF8, 0x80000000ULL | (bus << 16) | (slot << 11) | (fn << 8) | addr); + outl(0xCF8, 0x80000000ULL | (bus << 16) | (slot << 11) | (fn << 8) | (addr & ~3)); } void pci_write32(int bus, int slot, int fn, int addr, uint32_t data) @@ -34,11 +44,11 @@ uint32_t pci_read32(int bus, int slot, int fn, int addr) uint16_t pci_read16(int bus, int slot, int fn, int addr) { __pci_config(bus, slot, fn, addr); - return inw(0xCFC); + return inw(0xCFC + (addr & 2)); } uint8_t pci_read8(int bus, int slot, int fn, int addr) { __pci_config(bus, slot, fn, addr); - return inb(0xCFC); + return inb(0xCFC + (addr & 3)); }