This isn't patch review, just a couple of observations and questions. Current use of categories, please correct misunderstandings:
* A device can have multiple categories. Most (all?) devices currently have exactly one. * -device help shows categories, like this: name "NAME", bus "BUS", categories "CAT1" "CAT2"... * -device help is sorted by category * -device help shows the device once per category. If the device has no categories, it's not shown at all. Should we require devices to have at least one category? Eric, does libvirt still parse -device help? If yes, can it cope with the addition of "categories ..."? A possibly better way to group help by category: instead of adding categories to each line, add category headlines, like this: Controller/Bridge/Hub devices: name "NAME", bus "BUS"... ... USB devices: name "NAME", bus "BUS"... ... Storage devices: ... This way, showing devices with multiple categories once per category actually makes sense. DEVICE_CATEGORY_STORAGE comprises both storage controller devices (providing storage buses such as IDE, SCSI) and storage devices (plugging into such buses). Some of our devices (*-fdc, virtio-blk) integrate both in one device model[*]. DEVICE_CATEGORY_USB comprises *only* host controller devices (providing USB bus(es)), *not* USB devices (plugging into USB bus). These are categorized by function instead: * DEVICE_CATEGORY_BRIDGE: usb-host, usb-hub * DEVICE_CATEGORY_STORAGE: usb-bot, usb-uas, usb-storage * DEVICE_CATEGORY_NETWORK: usb-bt-dongle, usb-net * DEVICE_CATEGORY_INPUT: usb-kbd, usb-ccid, usb-wacom-tablet, usb-braille, usb-mouse, usb-serial * DEVICE_CATEGORY_SOUND: usb-audio * DEVICE_CATEGORY_MISC: usb-tablet, usb-redir Should they additionally be DEVICE_CATEGORY_USB? Why do we have DEVICE_CATEGORY_USB, but no categories for other buses, like PCI or ISA? Devices providing such buses are DEVICE_CATEGORY_BRIDGE. Why is USB different? Why is usb-host DEVICE_CATEGORY_BRIDGE? Why is usb-tablet DEVICE_CATEGORY_MISC, but usb-wacom-tablet DEVICE_CATEGORY_INPUT? DEVICE_CATEGORY_INPUT is weird. Some devices in that category are truly about input (usb-mouse, usb-kbd), others are at least as often used for output (serial devices, PIOs)... The difference between DEVICE_CATEGORY_INPUT and DEVICE_CATEGORY_MISC seems unclear (see usb-tablet vs. usb-wacom-tablet above). [*] I hate that.