[PATCH] x86: Move direct PCI scanning functions out of line
[pandora-kernel.git] / arch / i386 / pci / early.c
1 #include <linux/kernel.h>
2 #include <asm/pci-direct.h>
3 #include <asm/io.h>
4
5 /* Direct PCI access. This is used for PCI accesses in early boot before
6    the PCI subsystem works. */
7
8 #define PDprintk(x...)
9
10 u32 read_pci_config(u8 bus, u8 slot, u8 func, u8 offset)
11 {
12         u32 v;
13         outl(0x80000000 | (bus<<16) | (slot<<11) | (func<<8) | offset, 0xcf8);
14         v = inl(0xcfc);
15         if (v != 0xffffffff)
16                 PDprintk("%x reading 4 from %x: %x\n", slot, offset, v);
17         return v;
18 }
19
20 u8 read_pci_config_byte(u8 bus, u8 slot, u8 func, u8 offset)
21 {
22         u8 v;
23         outl(0x80000000 | (bus<<16) | (slot<<11) | (func<<8) | offset, 0xcf8);
24         v = inb(0xcfc + (offset&3));
25         PDprintk("%x reading 1 from %x: %x\n", slot, offset, v);
26         return v;
27 }
28
29 u16 read_pci_config_16(u8 bus, u8 slot, u8 func, u8 offset)
30 {
31         u16 v;
32         outl(0x80000000 | (bus<<16) | (slot<<11) | (func<<8) | offset, 0xcf8);
33         v = inw(0xcfc + (offset&2));
34         PDprintk("%x reading 2 from %x: %x\n", slot, offset, v);
35         return v;
36 }
37
38 void write_pci_config(u8 bus, u8 slot, u8 func, u8 offset,
39                                     u32 val)
40 {
41         PDprintk("%x writing to %x: %x\n", slot, offset, val);
42         outl(0x80000000 | (bus<<16) | (slot<<11) | (func<<8) | offset, 0xcf8);
43         outl(val, 0xcfc);
44 }