]>
Commit | Line | Data |
---|---|---|
1 | /* pci-raw.c | |
2 | * Raw PCI implementation | |
3 | * NetWatch system management mode administration console | |
4 | * | |
5 | * Copyright (c) 2008 Jacob Potter and Joshua Wise. All rights reserved. | |
6 | * This program is free software; you can redistribute and/or modify it under | |
7 | * the terms found in the file LICENSE in the root of this source tree. | |
8 | * | |
9 | */ | |
10 | ||
11 | #include <io.h> | |
12 | #include <stdint.h> | |
13 | #include <pci.h> | |
14 | ||
15 | static void __pci_config(int bus, int slot, int fn, int addr) | |
16 | { | |
17 | outl(0xCF8, 0x80000000ULL | (bus << 16) | (slot << 11) | (fn << 8) | (addr & ~3)); | |
18 | } | |
19 | ||
20 | void pci_write32(int bus, int slot, int fn, int addr, uint32_t data) | |
21 | { | |
22 | __pci_config(bus, slot, fn, addr); | |
23 | outl(0xCFC, data); | |
24 | } | |
25 | ||
26 | void pci_write16(int bus, int slot, int fn, int addr, uint16_t data) | |
27 | { | |
28 | __pci_config(bus, slot, fn, addr); | |
29 | outw(0xCFC, data); | |
30 | } | |
31 | ||
32 | void pci_write8(int bus, int slot, int fn, int addr, uint8_t data) | |
33 | { | |
34 | __pci_config(bus, slot, fn, addr); | |
35 | outb(0xCFC, data); | |
36 | } | |
37 | ||
38 | uint32_t pci_read32(int bus, int slot, int fn, int addr) | |
39 | { | |
40 | __pci_config(bus, slot, fn, addr); | |
41 | return inl(0xCFC); | |
42 | } | |
43 | ||
44 | uint16_t pci_read16(int bus, int slot, int fn, int addr) | |
45 | { | |
46 | __pci_config(bus, slot, fn, addr); | |
47 | return inw(0xCFC + (addr & 2)); | |
48 | } | |
49 | ||
50 | uint8_t pci_read8(int bus, int slot, int fn, int addr) | |
51 | { | |
52 | __pci_config(bus, slot, fn, addr); | |
53 | return inb(0xCFC + (addr & 3)); | |
54 | } |