Commit 6650ee6d3365d7f246cd7a6523c15fb542fc6032
1 parent
db59203d
Use lookup table for PCI class descriptions.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1927 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
24 additions
and
12 deletions
hw/pci.c
| ... | ... | @@ -409,28 +409,40 @@ void pci_set_irq(PCIDevice *pci_dev, int irq_num, int level) |
| 409 | 409 | /***********************************************************/ |
| 410 | 410 | /* monitor info on PCI */ |
| 411 | 411 | |
| 412 | +typedef struct { | |
| 413 | + uint16_t class; | |
| 414 | + const char *desc; | |
| 415 | +} pci_class_desc; | |
| 416 | + | |
| 417 | +static pci_class_desc pci_class_descriptions[] = | |
| 418 | +{ | |
| 419 | + { 0x0101, "IDE controller"}, | |
| 420 | + { 0x0200, "Ethernet controller"}, | |
| 421 | + { 0x0300, "VGA controller"}, | |
| 422 | + { 0x0600, "Host bridge"}, | |
| 423 | + { 0x0601, "ISA bridge"}, | |
| 424 | + { 0x0604, "PCI bridge"}, | |
| 425 | + { 0x0c03, "USB controller"}, | |
| 426 | + { 0, NULL} | |
| 427 | +}; | |
| 428 | + | |
| 412 | 429 | static void pci_info_device(PCIDevice *d) |
| 413 | 430 | { |
| 414 | 431 | int i, class; |
| 415 | 432 | PCIIORegion *r; |
| 433 | + pci_class_desc *desc; | |
| 416 | 434 | |
| 417 | 435 | term_printf(" Bus %2d, device %3d, function %d:\n", |
| 418 | 436 | d->bus->bus_num, d->devfn >> 3, d->devfn & 7); |
| 419 | 437 | class = le16_to_cpu(*((uint16_t *)(d->config + PCI_CLASS_DEVICE))); |
| 420 | 438 | term_printf(" "); |
| 421 | - switch(class) { | |
| 422 | - case 0x0101: | |
| 423 | - term_printf("IDE controller"); | |
| 424 | - break; | |
| 425 | - case 0x0200: | |
| 426 | - term_printf("Ethernet controller"); | |
| 427 | - break; | |
| 428 | - case 0x0300: | |
| 429 | - term_printf("VGA controller"); | |
| 430 | - break; | |
| 431 | - default: | |
| 439 | + desc = pci_class_descriptions; | |
| 440 | + while (desc->desc && class != desc->class) | |
| 441 | + desc++; | |
| 442 | + if (desc->desc) { | |
| 443 | + term_printf("%s", desc->desc); | |
| 444 | + } else { | |
| 432 | 445 | term_printf("Class %04x", class); |
| 433 | - break; | |
| 434 | 446 | } |
| 435 | 447 | term_printf(": PCI device %04x:%04x\n", |
| 436 | 448 | le16_to_cpu(*((uint16_t *)(d->config + PCI_VENDOR_ID))), | ... | ... |