aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/pci/common.c
diff options
context:
space:
mode:
authorMatthew Wilcox <matthew@wil.cx>2008-02-10 09:45:28 -0500
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2008-02-10 15:52:46 -0500
commitb6ce068a1285a24185b01be8a49021827516b3e1 (patch)
treeea1420fefff86f2e2ee4ed83f08ec2dd99a86dc5 /arch/x86/pci/common.c
parenta0ca9909609470ad779b9b9cc68ce96e975afff7 (diff)
Change pci_raw_ops to pci_raw_read/write
We want to allow different implementations of pci_raw_ops for standard and extended config space on x86. Rather than clutter generic code with knowledge of this, we make pci_raw_ops private to x86 and use it to implement the new raw interface -- raw_pci_read() and raw_pci_write(). Signed-off-by: Matthew Wilcox <willy@linux.intel.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch/x86/pci/common.c')
-rw-r--r--arch/x86/pci/common.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c
index 52deabc72a6f..b7c67a187b6b 100644
--- a/arch/x86/pci/common.c
+++ b/arch/x86/pci/common.c
@@ -26,16 +26,37 @@ int pcibios_last_bus = -1;
26unsigned long pirq_table_addr; 26unsigned long pirq_table_addr;
27struct pci_bus *pci_root_bus; 27struct pci_bus *pci_root_bus;
28struct pci_raw_ops *raw_pci_ops; 28struct pci_raw_ops *raw_pci_ops;
29struct pci_raw_ops *raw_pci_ext_ops;
30
31int raw_pci_read(unsigned int domain, unsigned int bus, unsigned int devfn,
32 int reg, int len, u32 *val)
33{
34 if (reg < 256 && raw_pci_ops)
35 return raw_pci_ops->read(domain, bus, devfn, reg, len, val);
36 if (raw_pci_ext_ops)
37 return raw_pci_ext_ops->read(domain, bus, devfn, reg, len, val);
38 return -EINVAL;
39}
40
41int raw_pci_write(unsigned int domain, unsigned int bus, unsigned int devfn,
42 int reg, int len, u32 val)
43{
44 if (reg < 256 && raw_pci_ops)
45 return raw_pci_ops->write(domain, bus, devfn, reg, len, val);
46 if (raw_pci_ext_ops)
47 return raw_pci_ext_ops->write(domain, bus, devfn, reg, len, val);
48 return -EINVAL;
49}
29 50
30static int pci_read(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 *value) 51static int pci_read(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 *value)
31{ 52{
32 return raw_pci_ops->read(pci_domain_nr(bus), bus->number, 53 return raw_pci_read(pci_domain_nr(bus), bus->number,
33 devfn, where, size, value); 54 devfn, where, size, value);
34} 55}
35 56
36static int pci_write(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 value) 57static int pci_write(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 value)
37{ 58{
38 return raw_pci_ops->write(pci_domain_nr(bus), bus->number, 59 return raw_pci_write(pci_domain_nr(bus), bus->number,
39 devfn, where, size, value); 60 devfn, where, size, value);
40} 61}
41 62