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,28 +409,40 @@ void pci_set_irq(PCIDevice *pci_dev, int irq_num, int level) | ||
409 | /***********************************************************/ | 409 | /***********************************************************/ |
410 | /* monitor info on PCI */ | 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 | static void pci_info_device(PCIDevice *d) | 429 | static void pci_info_device(PCIDevice *d) |
413 | { | 430 | { |
414 | int i, class; | 431 | int i, class; |
415 | PCIIORegion *r; | 432 | PCIIORegion *r; |
433 | + pci_class_desc *desc; | ||
416 | 434 | ||
417 | term_printf(" Bus %2d, device %3d, function %d:\n", | 435 | term_printf(" Bus %2d, device %3d, function %d:\n", |
418 | d->bus->bus_num, d->devfn >> 3, d->devfn & 7); | 436 | d->bus->bus_num, d->devfn >> 3, d->devfn & 7); |
419 | class = le16_to_cpu(*((uint16_t *)(d->config + PCI_CLASS_DEVICE))); | 437 | class = le16_to_cpu(*((uint16_t *)(d->config + PCI_CLASS_DEVICE))); |
420 | term_printf(" "); | 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 | term_printf("Class %04x", class); | 445 | term_printf("Class %04x", class); |
433 | - break; | ||
434 | } | 446 | } |
435 | term_printf(": PCI device %04x:%04x\n", | 447 | term_printf(": PCI device %04x:%04x\n", |
436 | le16_to_cpu(*((uint16_t *)(d->config + PCI_VENDOR_ID))), | 448 | le16_to_cpu(*((uint16_t *)(d->config + PCI_VENDOR_ID))), |