3 static void setup_resource_map_offset(const unsigned int *register_values, int max, unsigned offset_pci_dev, unsigned offset_io_base)
6 // print_debug("setting up resource map offset....");
10 for(i = 0; i < max; i += 3) {
15 prink_debug("%08x <- %08x\r\n", register_values[i] + offset_pci_dev, register_values[i+2]);
17 dev = (register_values[i] & ~0xfff) + offset_pci_dev;
18 where = register_values[i] & 0xfff;
19 reg = pci_read_config32(dev, where);
20 reg &= register_values[i+1];
21 reg |= register_values[i+2] + offset_io_base;
22 pci_write_config32(dev, where, reg);
24 reg = pci_read_config32(register_values[i]);
25 reg &= register_values[i+1];
26 reg |= register_values[i+2] & ~register_values[i+1];
27 pci_write_config32(register_values[i], reg);
30 // print_debug("done.\r\n");
33 #define RES_PCI_IO 0x10
34 #define RES_PORT_IO_8 0x22
35 #define RES_PORT_IO_32 0x20
36 #define RES_MEM_IO 0x40
38 static void setup_resource_map_x_offset(const unsigned int *register_values, int max, unsigned offset_pci_dev, unsigned offset_io_base)
43 print_debug("setting up resource map ex offset....");
50 for(i = 0; i < max; i += 4) {
52 printk_debug("%04x: %02x %08x <- & %08x | %08x\r\n",
53 i>>2, register_values[i],
54 register_values[i+1] + ( (register_values[i]==RES_PCI_IO) ? offset_pci_dev : 0),
56 register_values[i+3] + ( ( (register_values[i] & RES_PORT_IO_32) == RES_PORT_IO_32) ? offset_io_base : 0)
59 switch (register_values[i]) {
60 case RES_PCI_IO: //PCI
65 dev = (register_values[i+1] & ~0xfff) + offset_pci_dev;
66 where = register_values[i+1] & 0xfff;
67 reg = pci_read_config32(dev, where);
68 reg &= register_values[i+2];
69 reg |= register_values[i+3];
70 pci_write_config32(dev, where, reg);
73 case RES_PORT_IO_8: // io 8
77 where = register_values[i+1] + offset_io_base;
79 reg &= register_values[i+2];
80 reg |= register_values[i+3];
84 case RES_PORT_IO_32: //io32
88 where = register_values[i+1] + offset_io_base;
90 reg &= register_values[i+2];
91 reg |= register_values[i+3];
96 case RES_MEM_IO: //mem
100 where = register_values[i+1];
102 reg &= register_values[i+2];
103 reg |= register_values[i+3];
104 write32( where, reg);
115 print_debug("done.\r\n");
118 static void setup_resource_map_x(const unsigned int *register_values, int max)
123 print_debug("setting up resource map ex offset....");
130 for(i = 0; i < max; i += 4) {
132 printk_debug("%04x: %02x %08x <- & %08x | %08x\r\n",
133 i/4, register_values[i],register_values[i+1], register_values[i+2], register_values[i+3]);
135 switch (register_values[i]) {
136 case RES_PCI_IO: //PCI
141 dev = register_values[i+1] & ~0xfff;
142 where = register_values[i+1] & 0xfff;
143 reg = pci_read_config32(dev, where);
144 reg &= register_values[i+2];
145 reg |= register_values[i+3];
146 pci_write_config32(dev, where, reg);
149 case RES_PORT_IO_8: // io 8
153 where = register_values[i+1];
155 reg &= register_values[i+2];
156 reg |= register_values[i+3];
160 case RES_PORT_IO_32: //io32
164 where = register_values[i+1];
166 reg &= register_values[i+2];
167 reg |= register_values[i+3];
172 case RES_MEM_IO: //mem
176 where = register_values[i+1];
178 reg &= register_values[i+2];
179 reg |= register_values[i+3];
180 write32( where, reg);
191 print_debug("done.\r\n");
195 static void setup_iob_resource_map(const unsigned int *register_values, int max)
199 for(i = 0; i < max; i += 3) {
203 where = register_values[i];
206 print_debug_hex16(where);
211 print_debug_hex8(reg);
214 reg &= register_values[i+1];
215 reg |= register_values[i+2];
218 print_debug_hex8(reg);
225 print_debug_hex8(reg);
231 static void setup_io_resource_map(const unsigned int *register_values, int max)
235 for(i = 0; i < max; i += 3) {
239 where = register_values[i];
242 print_debug_hex16(where);
249 print_debug_hex32(reg);
251 reg &= register_values[i+1];
252 reg |= register_values[i+2];
257 print_debug_hex32(reg);
264 print_debug_hex32(reg);
271 static void setup_mem_resource_map(const unsigned int *register_values, int max)
275 for(i = 0; i < max; i += 3) {
279 print_debug_hex32(register_values[i]);
281 print_debug_hex32(register_values[i+2]);
283 where = register_values[i];
285 reg &= register_values[i+1];
286 reg |= register_values[i+2];
287 write32( where, reg);
291 print_debug_hex32(reg);