]> Joshua Wise's Git repositories - netwatch.git/blobdiff - pci/pci-smm.c
Move more functionality out to C
[netwatch.git] / pci / pci-smm.c
diff --git a/pci/pci-smm.c b/pci/pci-smm.c
new file mode 100644 (file)
index 0000000..117a8b5
--- /dev/null
@@ -0,0 +1,43 @@
+#include <io.h>
+#include <inttypes.h>
+
+static void __pci_config(int bus, int slot, int fn, int addr)
+{
+       outl(0xCF8, 0x80000000ULL | (bus << 16) | (slot << 11) | (fn << 8) | addr);
+}
+
+void pci_write32(int bus, int slot, int fn, int addr, uint32_t data)
+{
+       __pci_config(bus, slot, fn, addr);
+       outl(0xCFC, data);
+}
+
+void pci_write16(int bus, int slot, int fn, int addr, uint16_t data)
+{
+       __pci_config(bus, slot, fn, addr);
+       outw(0xCFC, data);
+}
+
+void pci_write8(int bus, int slot, int fn, int addr, uint8_t data)
+{
+       __pci_config(bus, slot, fn, addr);
+       outb(0xCFC, data);
+}
+
+uint32_t pci_read32(int bus, int slot, int fn, int addr)
+{
+       __pci_config(bus, slot, fn, addr);
+       return inl(0xCFC);
+}
+
+uint16_t pci_read16(int bus, int slot, int fn, int addr)
+{
+       __pci_config(bus, slot, fn, addr);
+       return inw(0xCFC);
+}
+
+uint8_t pci_read8(int bus, int slot, int fn, int addr)
+{
+       __pci_config(bus, slot, fn, addr);
+       return inb(0xCFC);
+}
This page took 0.019781 seconds and 4 git commands to generate.