Revision 1f62d938 hw/pci.c
b/hw/pci.c | ||
---|---|---|
255 | 255 |
addr = address; |
256 | 256 |
for(i = 0; i < len; i++) { |
257 | 257 |
/* default read/write accesses */ |
258 |
switch(addr) {
|
|
258 |
switch(d->config[0x0e]) {
|
|
259 | 259 |
case 0x00: |
260 |
case 0x01: |
|
261 |
case 0x02: |
|
262 |
case 0x03: |
|
263 |
case 0x08: |
|
264 |
case 0x09: |
|
265 |
case 0x0a: |
|
266 |
case 0x0b: |
|
267 |
case 0x0e: |
|
268 |
case 0x3d: |
|
269 |
can_write = 0; |
|
260 |
case 0x80: |
|
261 |
switch(addr) { |
|
262 |
case 0x00: |
|
263 |
case 0x01: |
|
264 |
case 0x02: |
|
265 |
case 0x03: |
|
266 |
case 0x08: |
|
267 |
case 0x09: |
|
268 |
case 0x0a: |
|
269 |
case 0x0b: |
|
270 |
case 0x0e: |
|
271 |
case 0x10 ... 0x27: /* base */ |
|
272 |
case 0x30 ... 0x33: /* rom */ |
|
273 |
case 0x3d: |
|
274 |
can_write = 0; |
|
275 |
break; |
|
276 |
default: |
|
277 |
can_write = 1; |
|
278 |
break; |
|
279 |
} |
|
270 | 280 |
break; |
271 | 281 |
default: |
272 |
can_write = 1; |
|
282 |
case 0x01: |
|
283 |
switch(addr) { |
|
284 |
case 0x00: |
|
285 |
case 0x01: |
|
286 |
case 0x02: |
|
287 |
case 0x03: |
|
288 |
case 0x08: |
|
289 |
case 0x09: |
|
290 |
case 0x0a: |
|
291 |
case 0x0b: |
|
292 |
case 0x0e: |
|
293 |
case 0x38 ... 0x3b: /* rom */ |
|
294 |
case 0x3d: |
|
295 |
can_write = 0; |
|
296 |
break; |
|
297 |
default: |
|
298 |
can_write = 1; |
|
299 |
break; |
|
300 |
} |
|
273 | 301 |
break; |
274 | 302 |
} |
275 | 303 |
if (can_write) { |
... | ... | |
986 | 1014 |
int i, pin, pic_irq, vendor_id, device_id; |
987 | 1015 |
|
988 | 1016 |
class = pci_config_readw(d, PCI_CLASS_DEVICE); |
1017 |
vendor_id = pci_config_readw(d, PCI_VENDOR_ID); |
|
1018 |
device_id = pci_config_readw(d, PCI_DEVICE_ID); |
|
989 | 1019 |
switch(class) { |
990 | 1020 |
case 0x0101: |
991 |
vendor_id = pci_config_readw(d, PCI_VENDOR_ID); |
|
992 |
device_id = pci_config_readw(d, PCI_DEVICE_ID); |
|
993 | 1021 |
if (vendor_id == 0x8086 && device_id == 0x7010) { |
994 | 1022 |
/* PIIX3 IDE */ |
995 | 1023 |
pci_config_writew(d, PCI_COMMAND, PCI_COMMAND_IO); |
... | ... | |
1006 | 1034 |
/* VGA: map frame buffer to default Bochs VBE address */ |
1007 | 1035 |
pci_set_io_region_addr(d, 0, 0xE0000000); |
1008 | 1036 |
break; |
1037 |
case 0xff00: |
|
1038 |
if (vendor_id == 0x0106b && device_id == 0x0017) { |
|
1039 |
/* macio bridge */ |
|
1040 |
pci_set_io_region_addr(d, 0, 0x80800000); |
|
1041 |
} |
|
1042 |
break; |
|
1009 | 1043 |
default: |
1010 | 1044 |
/* default memory mappings */ |
1011 | 1045 |
for(i = 0; i < PCI_NUM_REGIONS; i++) { |
Also available in: Unified diff