13 #define BUS2QUAD(global) (mp_bus_id_to_node[global])
15 #define BUS2LOCAL(global) (mp_bus_id_to_local[global])
17 #define QUADLOCAL2BUS(quad,local) (quad_local_to_mp_bus_id[quad][local])
19 #define PCI_CONF1_MQ_ADDRESS(bus, devfn, reg) \
20 (0x80000000 | (BUS2LOCAL(bus) << 16) | (devfn << 8) | (reg & ~3))
22 static void write_cf8(
unsigned bus,
unsigned devfn,
unsigned reg)
31 static int pci_conf1_mq_read(
unsigned int seg,
unsigned int bus,
38 if (!value || (bus >=
MAX_MP_BUSSES) || (devfn > 255) || (reg > 255))
43 write_cf8(bus, devfn, reg);
48 *value =
readb(adr + (reg & 3));
50 *value =
inb(0xCFC + (reg & 3));
54 *value =
readw(adr + (reg & 2));
56 *value =
inw(0xCFC + (reg & 2));
71 static int pci_conf1_mq_write(
unsigned int seg,
unsigned int bus,
72 unsigned int devfn,
int reg,
int len,
u32 value)
75 void *adr __iomem = XQUAD_PORT_ADDR(0xcfc,
BUS2QUAD(bus));
83 write_cf8(bus, devfn, reg);
88 writeb(value, adr + (reg & 3));
90 outb((
u8)value, 0xCFC + (reg & 3));
94 writew(value, adr + (reg & 2));
96 outw((
u16)value, 0xCFC + (reg & 2));
111 #undef PCI_CONF1_MQ_ADDRESS
113 static const struct pci_raw_ops pci_direct_conf1_mq = {
114 .read = pci_conf1_mq_read,
115 .write = pci_conf1_mq_write
125 u8 busno, suba, subb;
128 dev_info(&d->
dev,
"searching for i450NX host bridges\n");
130 for(pxb=0; pxb<2; pxb++) {
131 pci_read_config_byte(d, reg++, &busno);
132 pci_read_config_byte(d, reg++, &suba);
133 pci_read_config_byte(d, reg++, &subb);
134 dev_dbg(&d->
dev,
"i450NX PXB %d: %02x/%02x/%02x\n",
135 pxb, busno, suba, subb);
160 printk(
"Scanning PCI bus %d for quad %d\n",