aboutsummaryrefslogtreecommitdiffstats
path: root/arch/i386
diff options
context:
space:
mode:
authorAndi Kleen <ak@suse.de>2006-09-26 04:52:41 -0400
committerAndi Kleen <andi@basil.nowhere.org>2006-09-26 04:52:41 -0400
commit8f60774a116ced9b73ae3913d511687889efe725 (patch)
tree4c719703d138998a5eed9aabb2fe216b79790687 /arch/i386
parentf157cbb1eb9ce3f33a401ec6d20eb3eb852351a3 (diff)
[PATCH] x86: Move direct PCI scanning functions out of line
Saves about 200 bytes of code space. Signed-off-by: Andi Kleen <ak@suse.de>
Diffstat (limited to 'arch/i386')
-rw-r--r--arch/i386/pci/Makefile2
-rw-r--r--arch/i386/pci/early.c44
2 files changed, 45 insertions, 1 deletions
diff --git a/arch/i386/pci/Makefile b/arch/i386/pci/Makefile
index 62ad75c57e6a..1594d2f55c8f 100644
--- a/arch/i386/pci/Makefile
+++ b/arch/i386/pci/Makefile
@@ -11,4 +11,4 @@ pci-y += legacy.o irq.o
11pci-$(CONFIG_X86_VISWS) := visws.o fixup.o 11pci-$(CONFIG_X86_VISWS) := visws.o fixup.o
12pci-$(CONFIG_X86_NUMAQ) := numa.o irq.o 12pci-$(CONFIG_X86_NUMAQ) := numa.o irq.o
13 13
14obj-y += $(pci-y) common.o 14obj-y += $(pci-y) common.o early.o
diff --git a/arch/i386/pci/early.c b/arch/i386/pci/early.c
new file mode 100644
index 000000000000..b1f7f40d809b
--- /dev/null
+++ b/arch/i386/pci/early.c
@@ -0,0 +1,44 @@
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
10u32 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
20u8 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
29u16 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
38void 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}