RFC: nuke pcidevs and usbdevs

Hasso Tepper hasso at estpak.ee
Thu Sep 27 05:18:58 PDT 2007


These files have annoyed me quite some time. Maintaining entries in there
is real pain. So I took some time to investigate how useful they are. From
these files structures used for two different things (at least in theory)
are generated:

- to get "nice" defines to use in the code (pcidevs.h/usbdevs.h)
- to get nice device descriptions in dmesg (pcidevs_data.h/usbdevs_data.h)

To achieve both goals these files should contain as much devices as
possible of course. But it's obvious that we don't have enough resources.
Our *devs files are much more out of date than they are in other BSDs.

There is several possibilities to improve the situation. We could use
regular import from <random>BSD, we could use some automatic method etc.
But is it needed at all? How much of this data is actually used?

Only fraction of defines are actually used in the code (lets not look at
generated _data.h files in this context). Some quirks use them of course,
also drivers matching vendor and device id's. The second usage is
questionable already IMHO - why to have define used in one place? Look at
dev/usbmisc/uftdi/uftdi.c for example - I'd rather have there plain id's
with proper documenting comments. So, the answer to is: "defines are
rarely used".

Nice device descriptions are not used at all at the moment. All nice
descriptions about PCI devices you see in dmesg are coming from drivers
(see bus/pci/pcisupport.c for example; yes, this is hell ugly as well),
I don't see the pcidevs_data.h included anywhere in the code. The USB
code doesn't include the usbdevs_data.h either - it's done only if
USBVERBOSE is defined, but by accident I didn't move this out from
usb_port.h during USB code cleanup. The point is - no one complained
yet ;).

There is more issues with nice descriptions for USB devices:
 - Nobody has even close to complete database for USB devices. There is
   just too many of them.
 - If candidates for such databases exist, data in them is often wrong
   do to rebranding, several devices using same id's etc etc.
 - Often USB devices contain vendor and device _strings_ themselves
   (see usbd_devinfo()).

So, my proposal is:

 - Remove the usbdevs and pcidevs files. If the code wants to use defines
   for vendor and/or device id's, it has to define them itself.
 - As maintaining descriptions database makes sense only for PCI devices,
   look at possibilities to generate structures for that from the
   share/misc/pci_vendors file. If it's needed at all?


Waiting for comments.

-- 
Hasso Tepper





More information about the Kernel mailing list