1 /* 2 * QEMU PCI bus manager 3 * 4 * Copyright (c) 2004 Fabrice Bellard 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a copy 7 * of this software and associated documentation files (the "Software"), to deal 8 * in the Software without restriction, including without limitation the rights 9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 * copies of the Software, and to permit persons to whom the Software is 11 * furnished to do so, subject to the following conditions: 12 * 13 * The above copyright notice and this permission notice shall be included in 14 * all copies or substantial portions of the Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 * THE SOFTWARE. 23 */ 24 #include "hw.h" 25 #include "pci.h" 26 #include "monitor.h" 27 #include "net.h" 28 #include "sysemu.h" 29 30 //#define DEBUG_PCI 31 32 struct PCIBus { 33 BusState qbus; 34 int bus_num; 35 int devfn_min; 36 pci_set_irq_fn set_irq; 37 pci_map_irq_fn map_irq; 38 uint32_t config_reg; /* XXX: suppress */ 39 /* low level pic */ 40 SetIRQFunc *low_set_irq; 41 qemu_irq *irq_opaque; 42 PCIDevice *devices[256]; 43 PCIDevice *parent_dev; 44 PCIBus *next; 45 /* The bus IRQ state is the logical OR of the connected devices. 46 Keep a count of the number of devices with raised IRQs. */ 47 int nirq; 48 int irq_count[]; 49 }; 50 51 static void pci_update_mappings(PCIDevice *d); 52 static void pci_set_irq(void *opaque, int irq_num, int level); 53 54 target_phys_addr_t pci_mem_base; 55 static uint16_t pci_default_sub_vendor_id = PCI_SUBVENDOR_ID_REDHAT_QUMRANET; 56 static uint16_t pci_default_sub_device_id = PCI_SUBDEVICE_ID_QEMU; 57 static PCIBus *first_bus; 58 59 static void pcibus_save(QEMUFile *f, void *opaque) 60 { 61 PCIBus *bus = (PCIBus *)opaque; 62 int i; 63 64 qemu_put_be32(f, bus->nirq); 65 for (i = 0; i < bus->nirq; i++) 66 qemu_put_be32(f, bus->irq_count[i]); 67 } 68 69 static int pcibus_load(QEMUFile *f, void *opaque, int version_id) 70 { 71 PCIBus *bus = (PCIBus *)opaque; 72 int i, nirq; 73 74 if (version_id != 1) 75 return -EINVAL; 76 77 nirq = qemu_get_be32(f); 78 if (bus->nirq != nirq) { 79 fprintf(stderr, "pcibus_load: nirq mismatch: src=%d dst=%d\n", 80 nirq, bus->nirq); 81 return -EINVAL; 82 } 83 84 for (i = 0; i < nirq; i++) 85 bus->irq_count[i] = qemu_get_be32(f); 86 87 return 0; 88 } 89 90 PCIBus *pci_register_bus(DeviceState *parent, const char *name, 91 pci_set_irq_fn set_irq, pci_map_irq_fn map_irq, 92 qemu_irq *pic, int devfn_min, int nirq) 93 { 94 PCIBus *bus; 95 static int nbus = 0; 96 97 bus = FROM_QBUS(PCIBus, qbus_create(BUS_TYPE_PCI, 98 sizeof(PCIBus) + (nirq * sizeof(int)), 99 parent, name)); 100 bus->set_irq = set_irq; 101 bus->map_irq = map_irq; 102 bus->irq_opaque = pic; 103 bus->devfn_min = devfn_min; 104 bus->nirq = nirq; 105 bus->next = first_bus; 106 first_bus = bus; 107 register_savevm("PCIBUS", nbus++, 1, pcibus_save, pcibus_load, bus); 108 return bus; 109 } 110 111 static PCIBus *pci_register_secondary_bus(PCIDevice *dev, pci_map_irq_fn map_irq) 112 { 113 PCIBus *bus; 114 bus = qemu_mallocz(sizeof(PCIBus)); 115 bus->map_irq = map_irq; 116 bus->parent_dev = dev; 117 bus->next = dev->bus->next; 118 dev->bus->next = bus; 119 return bus; 120 } 121 122 int pci_bus_num(PCIBus *s) 123 { 124 return s->bus_num; 125 } 126 127 void pci_device_save(PCIDevice *s, QEMUFile *f) 128 { 129 int i; 130 131 qemu_put_be32(f, 2); /* PCI device version */ 132 qemu_put_buffer(f, s->config, 256); 133 for (i = 0; i < 4; i++) 134 qemu_put_be32(f, s->irq_state[i]); 135 } 136 137 int pci_device_load(PCIDevice *s, QEMUFile *f) 138 { 139 uint32_t version_id; 140 int i; 141 142 version_id = qemu_get_be32(f); 143 if (version_id > 2) 144 return -EINVAL; 145 qemu_get_buffer(f, s->config, 256); 146 pci_update_mappings(s); 147 148 if (version_id >= 2) 149 for (i = 0; i < 4; i ++) 150 s->irq_state[i] = qemu_get_be32(f); 151 152 return 0; 153 } 154 155 static int pci_set_default_subsystem_id(PCIDevice *pci_dev) 156 { 157 uint16_t *id; 158 159 id = (void*)(&pci_dev->config[PCI_SUBVENDOR_ID]); 160 id[0] = cpu_to_le16(pci_default_sub_vendor_id); 161 id[1] = cpu_to_le16(pci_default_sub_device_id); 162 return 0; 163 } 164 165 /* 166 * Parse [[<domain>:]<bus>:]<slot>, return -1 on error 167 */ 168 static int pci_parse_devaddr(const char *addr, int *domp, int *busp, unsigned *slotp) 169 { 170 const char *p; 171 char *e; 172 unsigned long val; 173 unsigned long dom = 0, bus = 0; 174 unsigned slot = 0; 175 176 p = addr; 177 val = strtoul(p, &e, 16); 178 if (e == p) 179 return -1; 180 if (*e == ':') { 181 bus = val; 182 p = e + 1; 183 val = strtoul(p, &e, 16); 184 if (e == p) 185 return -1; 186 if (*e == ':') { 187 dom = bus; 188 bus = val; 189 p = e + 1; 190 val = strtoul(p, &e, 16); 191 if (e == p) 192 return -1; 193 } 194 } 195 196 if (dom > 0xffff || bus > 0xff || val > 0x1f) 197 return -1; 198 199 slot = val; 200 201 if (*e) 202 return -1; 203 204 /* Note: QEMU doesn't implement domains other than 0 */ 205 if (dom != 0 || pci_find_bus(bus) == NULL) 206 return -1; 207 208 *domp = dom; 209 *busp = bus; 210 *slotp = slot; 211 return 0; 212 } 213 214 int pci_read_devaddr(const char *addr, int *domp, int *busp, unsigned *slotp) 215 { 216 char devaddr[32]; 217 218 if (!get_param_value(devaddr, sizeof(devaddr), "pci_addr", addr)) 219 return -1; 220 221 return pci_parse_devaddr(devaddr, domp, busp, slotp); 222 } 223 224 int pci_assign_devaddr(const char *addr, int *domp, int *busp, unsigned *slotp) 225 { 226 char devaddr[32]; 227 228 if (!get_param_value(devaddr, sizeof(devaddr), "pci_addr", addr)) 229 return -1; 230 231 if (!strcmp(devaddr, "auto")) { 232 *domp = *busp = 0; 233 *slotp = -1; 234 /* want to support dom/bus auto-assign at some point */ 235 return 0; 236 } 237 238 return pci_parse_devaddr(devaddr, domp, busp, slotp); 239 } 240 241 /* -1 for devfn means auto assign */ 242 static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, PCIBus *bus, 243 const char *name, int devfn, 244 PCIConfigReadFunc *config_read, 245 PCIConfigWriteFunc *config_write) 246 { 247 if (devfn < 0) { 248 for(devfn = bus->devfn_min ; devfn < 256; devfn += 8) { 249 if (!bus->devices[devfn]) 250 goto found; 251 } 252 return NULL; 253 found: ; 254 } 255 pci_dev->bus = bus; 256 pci_dev->devfn = devfn; 257 pstrcpy(pci_dev->name, sizeof(pci_dev->name), name); 258 memset(pci_dev->irq_state, 0, sizeof(pci_dev->irq_state)); 259 pci_set_default_subsystem_id(pci_dev); 260 261 if (!config_read) 262 config_read = pci_default_read_config; 263 if (!config_write) 264 config_write = pci_default_write_config; 265 pci_dev->config_read = config_read; 266 pci_dev->config_write = config_write; 267 bus->devices[devfn] = pci_dev; 268 pci_dev->irq = qemu_allocate_irqs(pci_set_irq, pci_dev, 4); 269 return pci_dev; 270 } 271 272 PCIDevice *pci_register_device(PCIBus *bus, const char *name, 273 int instance_size, int devfn, 274 PCIConfigReadFunc *config_read, 275 PCIConfigWriteFunc *config_write) 276 { 277 PCIDevice *pci_dev; 278 279 pci_dev = qemu_mallocz(instance_size); 280 pci_dev = do_pci_register_device(pci_dev, bus, name, devfn, 281 config_read, config_write); 282 return pci_dev; 283 } 284 static target_phys_addr_t pci_to_cpu_addr(target_phys_addr_t addr) 285 { 286 return addr + pci_mem_base; 287 } 288 289 static void pci_unregister_io_regions(PCIDevice *pci_dev) 290 { 291 PCIIORegion *r; 292 int i; 293 294 for(i = 0; i < PCI_NUM_REGIONS; i++) { 295 r = &pci_dev->io_regions[i]; 296 if (!r->size || r->addr == -1) 297 continue; 298 if (r->type == PCI_ADDRESS_SPACE_IO) { 299 isa_unassign_ioport(r->addr, r->size); 300 } else { 301 cpu_register_physical_memory(pci_to_cpu_addr(r->addr), 302 r->size, 303 IO_MEM_UNASSIGNED); 304 } 305 } 306 } 307 308 int pci_unregister_device(PCIDevice *pci_dev) 309 { 310 int ret = 0; 311 312 if (pci_dev->unregister) 313 ret = pci_dev->unregister(pci_dev); 314 if (ret) 315 return ret; 316 317 pci_unregister_io_regions(pci_dev); 318 319 qemu_free_irqs(pci_dev->irq); 320 pci_dev->bus->devices[pci_dev->devfn] = NULL; 321 qdev_free(&pci_dev->qdev); 322 return 0; 323 } 324 325 void pci_register_bar(PCIDevice *pci_dev, int region_num, 326 uint32_t size, int type, 327 PCIMapIORegionFunc *map_func) 328 { 329 PCIIORegion *r; 330 uint32_t addr; 331 332 if ((unsigned int)region_num >= PCI_NUM_REGIONS) 333 return; 334 335 if (size & (size-1)) { 336 fprintf(stderr, "ERROR: PCI region size must be pow2 " 337 "type=0x%x, size=0x%x\n", type, size); 338 exit(1); 339 } 340 341 r = &pci_dev->io_regions[region_num]; 342 r->addr = -1; 343 r->size = size; 344 r->type = type; 345 r->map_func = map_func; 346 if (region_num == PCI_ROM_SLOT) { 347 addr = 0x30; 348 } else { 349 addr = 0x10 + region_num * 4; 350 } 351 *(uint32_t *)(pci_dev->config + addr) = cpu_to_le32(type); 352 } 353 354 static void pci_update_mappings(PCIDevice *d) 355 { 356 PCIIORegion *r; 357 int cmd, i; 358 uint32_t last_addr, new_addr, config_ofs; 359 360 cmd = le16_to_cpu(*(uint16_t *)(d->config + PCI_COMMAND)); 361 for(i = 0; i < PCI_NUM_REGIONS; i++) { 362 r = &d->io_regions[i]; 363 if (i == PCI_ROM_SLOT) { 364 config_ofs = 0x30; 365 } else { 366 config_ofs = 0x10 + i * 4; 367 } 368 if (r->size != 0) { 369 if (r->type & PCI_ADDRESS_SPACE_IO) { 370 if (cmd & PCI_COMMAND_IO) { 371 new_addr = le32_to_cpu(*(uint32_t *)(d->config + 372 config_ofs)); 373 new_addr = new_addr & ~(r->size - 1); 374 last_addr = new_addr + r->size - 1; 375 /* NOTE: we have only 64K ioports on PC */ 376 if (last_addr <= new_addr || new_addr == 0 || 377 last_addr >= 0x10000) { 378 new_addr = -1; 379 } 380 } else { 381 new_addr = -1; 382 } 383 } else { 384 if (cmd & PCI_COMMAND_MEMORY) { 385 new_addr = le32_to_cpu(*(uint32_t *)(d->config + 386 config_ofs)); 387 /* the ROM slot has a specific enable bit */ 388 if (i == PCI_ROM_SLOT && !(new_addr & 1)) 389 goto no_mem_map; 390 new_addr = new_addr & ~(r->size - 1); 391 last_addr = new_addr + r->size - 1; 392 /* NOTE: we do not support wrapping */ 393 /* XXX: as we cannot support really dynamic 394 mappings, we handle specific values as invalid 395 mappings. */ 396 if (last_addr <= new_addr || new_addr == 0 || 397 last_addr == -1) { 398 new_addr = -1; 399 } 400 } else { 401 no_mem_map: 402 new_addr = -1; 403 } 404 } 405 /* now do the real mapping */ 406 if (new_addr != r->addr) { 407 if (r->addr != -1) { 408 if (r->type & PCI_ADDRESS_SPACE_IO) { 409 int class; 410 /* NOTE: specific hack for IDE in PC case: 411 only one byte must be mapped. */ 412 class = d->config[0x0a] | (d->config[0x0b] << 8); 413 if (class == 0x0101 && r->size == 4) { 414 isa_unassign_ioport(r->addr + 2, 1); 415 } else { 416 isa_unassign_ioport(r->addr, r->size); 417 } 418 } else { 419 cpu_register_physical_memory(pci_to_cpu_addr(r->addr), 420 r->size, 421 IO_MEM_UNASSIGNED); 422 qemu_unregister_coalesced_mmio(r->addr, r->size); 423 } 424 } 425 r->addr = new_addr; 426 if (r->addr != -1) { 427 r->map_func(d, i, r->addr, r->size, r->type); 428 } 429 } 430 } 431 } 432 } 433 434 uint32_t pci_default_read_config(PCIDevice *d, 435 uint32_t address, int len) 436 { 437 uint32_t val; 438 439 switch(len) { 440 default: 441 case 4: 442 if (address <= 0xfc) { 443 val = le32_to_cpu(*(uint32_t *)(d->config + address)); 444 break; 445 } 446 /* fall through */ 447 case 2: 448 if (address <= 0xfe) { 449 val = le16_to_cpu(*(uint16_t *)(d->config + address)); 450 break; 451 } 452 /* fall through */ 453 case 1: 454 val = d->config[address]; 455 break; 456 } 457 return val; 458 } 459 460 void pci_default_write_config(PCIDevice *d, 461 uint32_t address, uint32_t val, int len) 462 { 463 int can_write, i; 464 uint32_t end, addr; 465 466 if (len == 4 && ((address >= 0x10 && address < 0x10 + 4 * 6) || 467 (address >= 0x30 && address < 0x34))) { 468 PCIIORegion *r; 469 int reg; 470 471 if ( address >= 0x30 ) { 472 reg = PCI_ROM_SLOT; 473 }else{ 474 reg = (address - 0x10) >> 2; 475 } 476 r = &d->io_regions[reg]; 477 if (r->size == 0) 478 goto default_config; 479 /* compute the stored value */ 480 if (reg == PCI_ROM_SLOT) { 481 /* keep ROM enable bit */ 482 val &= (~(r->size - 1)) | 1; 483 } else { 484 val &= ~(r->size - 1); 485 val |= r->type; 486 } 487 *(uint32_t *)(d->config + address) = cpu_to_le32(val); 488 pci_update_mappings(d); 489 return; 490 } 491 default_config: 492 /* not efficient, but simple */ 493 addr = address; 494 for(i = 0; i < len; i++) { 495 /* default read/write accesses */ 496 switch(d->config[0x0e]) { 497 case 0x00: 498 case 0x80: 499 switch(addr) { 500 case 0x00: 501 case 0x01: 502 case 0x02: 503 case 0x03: 504 case 0x06: 505 case 0x07: 506 case 0x08: 507 case 0x09: 508 case 0x0a: 509 case 0x0b: 510 case 0x0e: 511 case 0x10 ... 0x27: /* base */ 512 case 0x2c ... 0x2f: /* read-only subsystem ID & vendor ID */ 513 case 0x30 ... 0x33: /* rom */ 514 case 0x3d: 515 can_write = 0; 516 break; 517 default: 518 can_write = 1; 519 break; 520 } 521 break; 522 default: 523 case 0x01: 524 switch(addr) { 525 case 0x00: 526 case 0x01: 527 case 0x02: 528 case 0x03: 529 case 0x06: 530 case 0x07: 531 case 0x08: 532 case 0x09: 533 case 0x0a: 534 case 0x0b: 535 case 0x0e: 536 case 0x2c ... 0x2f: /* read-only subsystem ID & vendor ID */ 537 case 0x38 ... 0x3b: /* rom */ 538 case 0x3d: 539 can_write = 0; 540 break; 541 default: 542 can_write = 1; 543 break; 544 } 545 break; 546 } 547 if (can_write) { 548 /* Mask out writes to reserved bits in registers */ 549 switch (addr) { 550 case 0x05: 551 val &= ~PCI_COMMAND_RESERVED_MASK_HI; 552 break; 553 case 0x06: 554 val &= ~PCI_STATUS_RESERVED_MASK_LO; 555 break; 556 case 0x07: 557 val &= ~PCI_STATUS_RESERVED_MASK_HI; 558 break; 559 } 560 d->config[addr] = val; 561 } 562 if (++addr > 0xff) 563 break; 564 val >>= 8; 565 } 566 567 end = address + len; 568 if (end > PCI_COMMAND && address < (PCI_COMMAND + 2)) { 569 /* if the command register is modified, we must modify the mappings */ 570 pci_update_mappings(d); 571 } 572 } 573 574 void pci_data_write(void *opaque, uint32_t addr, uint32_t val, int len) 575 { 576 PCIBus *s = opaque; 577 PCIDevice *pci_dev; 578 int config_addr, bus_num; 579 580 #if defined(DEBUG_PCI) && 0 581 printf("pci_data_write: addr=%08x val=%08x len=%d\n", 582 addr, val, len); 583 #endif 584 bus_num = (addr >> 16) & 0xff; 585 while (s && s->bus_num != bus_num) 586 s = s->next; 587 if (!s) 588 return; 589 pci_dev = s->devices[(addr >> 8) & 0xff]; 590 if (!pci_dev) 591 return; 592 config_addr = addr & 0xff; 593 #if defined(DEBUG_PCI) 594 printf("pci_config_write: %s: addr=%02x val=%08x len=%d\n", 595 pci_dev->name, config_addr, val, len); 596 #endif 597 pci_dev->config_write(pci_dev, config_addr, val, len); 598 } 599 600 uint32_t pci_data_read(void *opaque, uint32_t addr, int len) 601 { 602 PCIBus *s = opaque; 603 PCIDevice *pci_dev; 604 int config_addr, bus_num; 605 uint32_t val; 606 607 bus_num = (addr >> 16) & 0xff; 608 while (s && s->bus_num != bus_num) 609 s= s->next; 610 if (!s) 611 goto fail; 612 pci_dev = s->devices[(addr >> 8) & 0xff]; 613 if (!pci_dev) { 614 fail: 615 switch(len) { 616 case 1: 617 val = 0xff; 618 break; 619 case 2: 620 val = 0xffff; 621 break; 622 default: 623 case 4: 624 val = 0xffffffff; 625 break; 626 } 627 goto the_end; 628 } 629 config_addr = addr & 0xff; 630 val = pci_dev->config_read(pci_dev, config_addr, len); 631 #if defined(DEBUG_PCI) 632 printf("pci_config_read: %s: addr=%02x val=%08x len=%d\n", 633 pci_dev->name, config_addr, val, len); 634 #endif 635 the_end: 636 #if defined(DEBUG_PCI) && 0 637 printf("pci_data_read: addr=%08x val=%08x len=%d\n", 638 addr, val, len); 639 #endif 640 return val; 641 } 642 643 /***********************************************************/ 644 /* generic PCI irq support */ 645 646 /* 0 <= irq_num <= 3. level must be 0 or 1 */ 647 static void pci_set_irq(void *opaque, int irq_num, int level) 648 { 649 PCIDevice *pci_dev = (PCIDevice *)opaque; 650 PCIBus *bus; 651 int change; 652 653 change = level - pci_dev->irq_state[irq_num]; 654 if (!change) 655 return; 656 657 pci_dev->irq_state[irq_num] = level; 658 for (;;) { 659 bus = pci_dev->bus; 660 irq_num = bus->map_irq(pci_dev, irq_num); 661 if (bus->set_irq) 662 break; 663 pci_dev = bus->parent_dev; 664 } 665 bus->irq_count[irq_num] += change; 666 bus->set_irq(bus->irq_opaque, irq_num, bus->irq_count[irq_num] != 0); 667 } 668 669 /***********************************************************/ 670 /* monitor info on PCI */ 671 672 typedef struct { 673 uint16_t class; 674 const char *desc; 675 } pci_class_desc; 676 677 static const pci_class_desc pci_class_descriptions[] = 678 { 679 { 0x0100, "SCSI controller"}, 680 { 0x0101, "IDE controller"}, 681 { 0x0102, "Floppy controller"}, 682 { 0x0103, "IPI controller"}, 683 { 0x0104, "RAID controller"}, 684 { 0x0106, "SATA controller"}, 685 { 0x0107, "SAS controller"}, 686 { 0x0180, "Storage controller"}, 687 { 0x0200, "Ethernet controller"}, 688 { 0x0201, "Token Ring controller"}, 689 { 0x0202, "FDDI controller"}, 690 { 0x0203, "ATM controller"}, 691 { 0x0280, "Network controller"}, 692 { 0x0300, "VGA controller"}, 693 { 0x0301, "XGA controller"}, 694 { 0x0302, "3D controller"}, 695 { 0x0380, "Display controller"}, 696 { 0x0400, "Video controller"}, 697 { 0x0401, "Audio controller"}, 698 { 0x0402, "Phone"}, 699 { 0x0480, "Multimedia controller"}, 700 { 0x0500, "RAM controller"}, 701 { 0x0501, "Flash controller"}, 702 { 0x0580, "Memory controller"}, 703 { 0x0600, "Host bridge"}, 704 { 0x0601, "ISA bridge"}, 705 { 0x0602, "EISA bridge"}, 706 { 0x0603, "MC bridge"}, 707 { 0x0604, "PCI bridge"}, 708 { 0x0605, "PCMCIA bridge"}, 709 { 0x0606, "NUBUS bridge"}, 710 { 0x0607, "CARDBUS bridge"}, 711 { 0x0608, "RACEWAY bridge"}, 712 { 0x0680, "Bridge"}, 713 { 0x0c03, "USB controller"}, 714 { 0, NULL} 715 }; 716 717 static void pci_info_device(PCIDevice *d) 718 { 719 Monitor *mon = cur_mon; 720 int i, class; 721 PCIIORegion *r; 722 const pci_class_desc *desc; 723 724 monitor_printf(mon, " Bus %2d, device %3d, function %d:\n", 725 d->bus->bus_num, d->devfn >> 3, d->devfn & 7); 726 class = le16_to_cpu(*((uint16_t *)(d->config + PCI_CLASS_DEVICE))); 727 monitor_printf(mon, " "); 728 desc = pci_class_descriptions; 729 while (desc->desc && class != desc->class) 730 desc++; 731 if (desc->desc) { 732 monitor_printf(mon, "%s", desc->desc); 733 } else { 734 monitor_printf(mon, "Class %04x", class); 735 } 736 monitor_printf(mon, ": PCI device %04x:%04x\n", 737 le16_to_cpu(*((uint16_t *)(d->config + PCI_VENDOR_ID))), 738 le16_to_cpu(*((uint16_t *)(d->config + PCI_DEVICE_ID)))); 739 740 if (d->config[PCI_INTERRUPT_PIN] != 0) { 741 monitor_printf(mon, " IRQ %d.\n", 742 d->config[PCI_INTERRUPT_LINE]); 743 } 744 if (class == 0x0604) { 745 monitor_printf(mon, " BUS %d.\n", d->config[0x19]); 746 } 747 for(i = 0;i < PCI_NUM_REGIONS; i++) { 748 r = &d->io_regions[i]; 749 if (r->size != 0) { 750 monitor_printf(mon, " BAR%d: ", i); 751 if (r->type & PCI_ADDRESS_SPACE_IO) { 752 monitor_printf(mon, "I/O at 0x%04x [0x%04x].\n", 753 r->addr, r->addr + r->size - 1); 754 } else { 755 monitor_printf(mon, "32 bit memory at 0x%08x [0x%08x].\n", 756 r->addr, r->addr + r->size - 1); 757 } 758 } 759 } 760 if (class == 0x0604 && d->config[0x19] != 0) { 761 pci_for_each_device(d->config[0x19], pci_info_device); 762 } 763 } 764 765 void pci_for_each_device(int bus_num, void (*fn)(PCIDevice *d)) 766 { 767 PCIBus *bus = first_bus; 768 PCIDevice *d; 769 int devfn; 770 771 while (bus && bus->bus_num != bus_num) 772 bus = bus->next; 773 if (bus) { 774 for(devfn = 0; devfn < 256; devfn++) { 775 d = bus->devices[devfn]; 776 if (d) 777 fn(d); 778 } 779 } 780 } 781 782 void pci_info(Monitor *mon) 783 { 784 pci_for_each_device(0, pci_info_device); 785 } 786 787 static const char * const pci_nic_models[] = { 788 "ne2k_pci", 789 "i82551", 790 "i82557b", 791 "i82559er", 792 "rtl8139", 793 "e1000", 794 "pcnet", 795 "virtio", 796 NULL 797 }; 798 799 static const char * const pci_nic_names[] = { 800 "ne2k_pci", 801 "i82551", 802 "i82557b", 803 "i82559er", 804 "rtl8139", 805 "e1000", 806 "pcnet", 807 "virtio-net-pci", 808 NULL 809 }; 810 811 /* Initialize a PCI NIC. */ 812 PCIDevice *pci_nic_init(PCIBus *bus, NICInfo *nd, int devfn, 813 const char *default_model) 814 { 815 DeviceState *dev; 816 int i; 817 818 qemu_check_nic_model_list(nd, pci_nic_models, default_model); 819 820 for (i = 0; pci_nic_models[i]; i++) { 821 if (strcmp(nd->model, pci_nic_models[i]) == 0) { 822 dev = qdev_create(&bus->qbus, pci_nic_names[i]); 823 qdev_set_prop_int(dev, "devfn", devfn); 824 qdev_set_netdev(dev, nd); 825 qdev_init(dev); 826 nd->private = dev; 827 return (PCIDevice *)dev; 828 } 829 } 830 831 return NULL; 832 } 833 834 typedef struct { 835 PCIDevice dev; 836 PCIBus *bus; 837 } PCIBridge; 838 839 static void pci_bridge_write_config(PCIDevice *d, 840 uint32_t address, uint32_t val, int len) 841 { 842 PCIBridge *s = (PCIBridge *)d; 843 844 if (address == 0x19 || (address == 0x18 && len > 1)) { 845 if (address == 0x19) 846 s->bus->bus_num = val & 0xff; 847 else 848 s->bus->bus_num = (val >> 8) & 0xff; 849 #if defined(DEBUG_PCI) 850 printf ("pci-bridge: %s: Assigned bus %d\n", d->name, s->bus->bus_num); 851 #endif 852 } 853 pci_default_write_config(d, address, val, len); 854 } 855 856 PCIBus *pci_find_bus(int bus_num) 857 { 858 PCIBus *bus = first_bus; 859 860 while (bus && bus->bus_num != bus_num) 861 bus = bus->next; 862 863 return bus; 864 } 865 866 PCIDevice *pci_find_device(int bus_num, int slot, int function) 867 { 868 PCIBus *bus = pci_find_bus(bus_num); 869 870 if (!bus) 871 return NULL; 872 873 return bus->devices[PCI_DEVFN(slot, function)]; 874 } 875 876 PCIBus *pci_bridge_init(PCIBus *bus, int devfn, uint16_t vid, uint16_t did, 877 pci_map_irq_fn map_irq, const char *name) 878 { 879 PCIBridge *s; 880 s = (PCIBridge *)pci_register_device(bus, name, sizeof(PCIBridge), 881 devfn, NULL, pci_bridge_write_config); 882 883 pci_config_set_vendor_id(s->dev.config, vid); 884 pci_config_set_device_id(s->dev.config, did); 885 886 s->dev.config[0x04] = 0x06; // command = bus master, pci mem 887 s->dev.config[0x05] = 0x00; 888 s->dev.config[0x06] = 0xa0; // status = fast back-to-back, 66MHz, no error 889 s->dev.config[0x07] = 0x00; // status = fast devsel 890 s->dev.config[0x08] = 0x00; // revision 891 s->dev.config[0x09] = 0x00; // programming i/f 892 pci_config_set_class(s->dev.config, PCI_CLASS_BRIDGE_PCI); 893 s->dev.config[0x0D] = 0x10; // latency_timer 894 s->dev.config[PCI_HEADER_TYPE] = 895 PCI_HEADER_TYPE_MULTI_FUNCTION | PCI_HEADER_TYPE_BRIDGE; // header_type 896 s->dev.config[0x1E] = 0xa0; // secondary status 897 898 s->bus = pci_register_secondary_bus(&s->dev, map_irq); 899 return s->bus; 900 } 901 902 typedef struct { 903 DeviceInfo qdev; 904 pci_qdev_initfn init; 905 } PCIDeviceInfo; 906 907 static void pci_qdev_init(DeviceState *qdev, DeviceInfo *base) 908 { 909 PCIDevice *pci_dev = (PCIDevice *)qdev; 910 PCIDeviceInfo *info = container_of(base, PCIDeviceInfo, qdev); 911 PCIBus *bus; 912 int devfn; 913 914 bus = FROM_QBUS(PCIBus, qdev_get_parent_bus(qdev)); 915 devfn = qdev_get_prop_int(qdev, "devfn", -1); 916 pci_dev = do_pci_register_device(pci_dev, bus, "FIXME", devfn, 917 NULL, NULL);//FIXME:config_read, config_write); 918 assert(pci_dev); 919 info->init(pci_dev); 920 } 921 922 void pci_qdev_register(const char *name, int size, pci_qdev_initfn init) 923 { 924 PCIDeviceInfo *info; 925 926 info = qemu_mallocz(sizeof(*info)); 927 info->qdev.name = qemu_strdup(name); 928 info->qdev.size = size; 929 info->init = init; 930 info->qdev.init = pci_qdev_init; 931 info->qdev.bus_type = BUS_TYPE_PCI; 932 933 qdev_register(&info->qdev); 934 } 935 936 PCIDevice *pci_create_simple(PCIBus *bus, int devfn, const char *name) 937 { 938 DeviceState *dev; 939 940 dev = qdev_create(&bus->qbus, name); 941 qdev_set_prop_int(dev, "devfn", devfn); 942 qdev_init(dev); 943 944 return (PCIDevice *)dev; 945 } 946