3 static void setup_resource_map_offset(const unsigned int *register_values, int max, unsigned offset_pci_dev, unsigned offset_io_base)
7 printk(BIOS_DEBUG, "setting up resource map offset....\n");
9 for(i = 0; i < max; i += 3) {
14 prink_debug("%08x <- %08x\n", register_values[i] + offset_pci_dev, register_values[i+2]);
16 dev = (register_values[i] & ~0xfff) + offset_pci_dev;
17 where = register_values[i] & 0xfff;
18 reg = pci_read_config32(dev, where);
19 reg &= register_values[i+1];
20 reg |= register_values[i+2] + offset_io_base;
21 pci_write_config32(dev, where, reg);
23 reg = pci_read_config32(register_values[i]);
24 reg &= register_values[i+1];
25 reg |= register_values[i+2] & ~register_values[i+1];
26 pci_write_config32(register_values[i], reg);
30 printk(BIOS_DEBUG, "done.\n");
34 #define RES_PCI_IO 0x10
35 #define RES_PORT_IO_8 0x22
36 #define RES_PORT_IO_32 0x20
37 #define RES_MEM_IO 0x40
39 static void setup_resource_map_x_offset(const unsigned int *register_values, int max, unsigned offset_pci_dev, unsigned offset_io_base)
44 printk(BIOS_DEBUG, "setting up resource map ex offset....\n");
46 for(i = 0; i < max; i += 4) {
48 printk(BIOS_DEBUG, "%04x: %02x %08x <- & %08x | %08x\n",
49 i>>2, register_values[i],
50 register_values[i+1] + ( (register_values[i]==RES_PCI_IO) ? offset_pci_dev : 0),
52 register_values[i+3] + ( ( (register_values[i] & RES_PORT_IO_32) == RES_PORT_IO_32) ? offset_io_base : 0)
55 switch (register_values[i]) {
56 case RES_PCI_IO: //PCI
61 dev = (register_values[i+1] & ~0xfff) + offset_pci_dev;
62 where = register_values[i+1] & 0xfff;
63 reg = pci_read_config32(dev, where);
64 reg &= register_values[i+2];
65 reg |= register_values[i+3];
66 pci_write_config32(dev, where, reg);
69 case RES_PORT_IO_8: // io 8
73 where = register_values[i+1] + offset_io_base;
75 reg &= register_values[i+2];
76 reg |= register_values[i+3];
80 case RES_PORT_IO_32: //io32
84 where = register_values[i+1] + offset_io_base;
86 reg &= register_values[i+2];
87 reg |= register_values[i+3];
92 case RES_MEM_IO: //mem
96 where = register_values[i+1];
98 reg &= register_values[i+2];
99 reg |= register_values[i+3];
100 write32( where, reg);
111 printk(BIOS_DEBUG, "done.\n");
115 #if defined(CONFIG_SOUTHBRIDGE_NVIDIA_MCP55) || defined(CONFIG_SOUTHBRIDGE_NVIDIA_CK804)
116 static void setup_resource_map_x(const unsigned int *register_values, int max)
121 printk(BIOS_DEBUG, "setting up resource map ex....\n");
124 for(i = 0; i < max; i += 4) {
126 printk(BIOS_DEBUG, "%04x: %02x %08x <- & %08x | %08x\n",
127 i/4, register_values[i],register_values[i+1], register_values[i+2], register_values[i+3]);
129 switch (register_values[i]) {
130 case RES_PCI_IO: //PCI
135 dev = register_values[i+1] & ~0xfff;
136 where = register_values[i+1] & 0xfff;
137 reg = pci_read_config32(dev, where);
138 reg &= register_values[i+2];
139 reg |= register_values[i+3];
140 pci_write_config32(dev, where, reg);
143 case RES_PORT_IO_8: // io 8
147 where = register_values[i+1];
149 reg &= register_values[i+2];
150 reg |= register_values[i+3];
154 case RES_PORT_IO_32: //io32
158 where = register_values[i+1];
160 reg &= register_values[i+2];
161 reg |= register_values[i+3];
166 case RES_MEM_IO: //mem
170 where = register_values[i+1];
172 reg &= register_values[i+2];
173 reg |= register_values[i+3];
174 write32( where, reg);
185 printk(BIOS_DEBUG, "done.\n");
191 static void setup_io_resource_map(const unsigned int *register_values, int max)
195 for(i = 0; i < max; i += 3) {
199 where = register_values[i];
202 printk(BIOS_DEBUG, "%04x", where);
208 printk(BIOS_DEBUG, "=%08x", reg);
210 reg &= register_values[i+1];
211 reg |= register_values[i+2];
215 printk(BIOS_DEBUG, " <- %08x", reg);
221 printk(BIOS_DEBUG, " -> %08x\n", reg);
226 static void setup_mem_resource_map(const unsigned int *register_values, int max)
230 for(i = 0; i < max; i += 3) {
234 prink(BIOS_DEBUG, "%08x <- %08x\n",
235 register_values[i], register_values[i+2]);
237 where = register_values[i];
239 reg &= register_values[i+1];
240 reg |= register_values[i+2];
241 write32( where, reg);
244 prink(BIOS_DEBUG, " RB %08x\n", reg);