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 #if CONFIG_USE_PRINTK_IN_CAR
16 prink_debug("%08x <- %08x\r\n", register_values[i] + offset_pci_dev, register_values[i+2]);
18 print_debug_hex32(register_values[i] + offset_pci_dev);
20 print_debug_hex32(register_values[i+2]);
24 dev = (register_values[i] & ~0xfff) + offset_pci_dev;
25 where = register_values[i] & 0xfff;
26 reg = pci_read_config32(dev, where);
27 reg &= register_values[i+1];
28 reg |= register_values[i+2] + offset_io_base;
29 pci_write_config32(dev, where, reg);
31 reg = pci_read_config32(register_values[i]);
32 reg &= register_values[i+1];
33 reg |= register_values[i+2] & ~register_values[i+1];
34 pci_write_config32(register_values[i], reg);
37 // print_debug("done.\r\n");
40 #define RES_PCI_IO 0x10
41 #define RES_PORT_IO_8 0x22
42 #define RES_PORT_IO_32 0x20
43 #define RES_MEM_IO 0x40
45 static void setup_resource_map_x_offset(const unsigned int *register_values, int max, unsigned offset_pci_dev, unsigned offset_io_base)
50 print_debug("setting up resource map ex offset....");
57 for(i = 0; i < max; i += 4) {
59 #if CONFIG_USE_PRINTK_IN_CAR
60 printk_debug("%04x: %02x %08x <- & %08x | %08x\r\n",
61 i>>2, register_values[i],
62 register_values[i+1] + ( (register_values[i]==RES_PCI_IO) ? offset_pci_dev : 0),
64 register_values[i+3] + ( ( (register_values[i] & RES_PORT_IO_32) == RES_PORT_IO_32) ? offset_io_base : 0)
67 print_debug_hex16(i>>2);
69 print_debug_hex8(register_values[i]);
71 print_debug_hex32(register_values[i+1] + ( (register_values[i]==RES_PCI_IO) ? offset_pci_dev : 0) );
72 print_debug(" <- & ");
73 print_debug_hex32(register_values[i+2]);
75 print_debug_hex32(register_values[i+3] +
76 (((register_values[i] & RES_PORT_IO_32) == RES_PORT_IO_32) ? offset_io_base : 0)
81 switch (register_values[i]) {
82 case RES_PCI_IO: //PCI
87 dev = (register_values[i+1] & ~0xfff) + offset_pci_dev;
88 where = register_values[i+1] & 0xfff;
89 reg = pci_read_config32(dev, where);
90 reg &= register_values[i+2];
91 reg |= register_values[i+3];
92 pci_write_config32(dev, where, reg);
95 case RES_PORT_IO_8: // io 8
99 where = register_values[i+1] + offset_io_base;
101 reg &= register_values[i+2];
102 reg |= register_values[i+3];
106 case RES_PORT_IO_32: //io32
110 where = register_values[i+1] + offset_io_base;
112 reg &= register_values[i+2];
113 reg |= register_values[i+3];
118 case RES_MEM_IO: //mem
122 where = register_values[i+1];
124 reg &= register_values[i+2];
125 reg |= register_values[i+3];
126 write32( where, reg);
137 print_debug("done.\r\n");
140 static void setup_resource_map_x(const unsigned int *register_values, int max)
145 print_debug("setting up resource map ex offset....");
152 for(i = 0; i < max; i += 4) {
154 #if CONFIG_USE_PRINTK_IN_CAR
155 printk_debug("%04x: %02x %08x <- & %08x | %08x\r\n",
156 i/4, register_values[i],register_values[i+1], register_values[i+2], register_values[i+3]);
158 print_debug_hex16(i/4);
160 print_debug_hex8(register_values[i]);
162 print_debug_hex32(register_values[i+1]);
163 print_debug(" <- & ");
164 print_debug_hex32(register_values[i+2]);
166 print_debug_hex32(register_values[i+3]);
170 switch (register_values[i]) {
171 case RES_PCI_IO: //PCI
176 dev = register_values[i+1] & ~0xfff;
177 where = register_values[i+1] & 0xfff;
178 reg = pci_read_config32(dev, where);
179 reg &= register_values[i+2];
180 reg |= register_values[i+3];
181 pci_write_config32(dev, where, reg);
184 case RES_PORT_IO_8: // io 8
188 where = register_values[i+1];
190 reg &= register_values[i+2];
191 reg |= register_values[i+3];
195 case RES_PORT_IO_32: //io32
199 where = register_values[i+1];
201 reg &= register_values[i+2];
202 reg |= register_values[i+3];
207 case RES_MEM_IO: //mem
211 where = register_values[i+1];
213 reg &= register_values[i+2];
214 reg |= register_values[i+3];
215 write32( where, reg);
226 print_debug("done.\r\n");
230 static void setup_iob_resource_map(const unsigned int *register_values, int max)
234 for(i = 0; i < max; i += 3) {
238 where = register_values[i];
241 print_debug_hex16(where);
246 print_debug_hex8(reg);
249 reg &= register_values[i+1];
250 reg |= register_values[i+2];
253 print_debug_hex8(reg);
260 print_debug_hex8(reg);
266 static void setup_io_resource_map(const unsigned int *register_values, int max)
270 for(i = 0; i < max; i += 3) {
274 where = register_values[i];
277 print_debug_hex16(where);
284 print_debug_hex32(reg);
286 reg &= register_values[i+1];
287 reg |= register_values[i+2];
292 print_debug_hex32(reg);
299 print_debug_hex32(reg);
306 static void setup_mem_resource_map(const unsigned int *register_values, int max)
310 for(i = 0; i < max; i += 3) {
314 print_debug_hex32(register_values[i]);
316 print_debug_hex32(register_values[i+2]);
318 where = register_values[i];
320 reg &= register_values[i+1];
321 reg |= register_values[i+2];
322 write32( where, reg);
326 print_debug_hex32(reg);