+/*XXX if dynamic, the _info entry will be here but code may or may not
+be loaded. How to tell? What's the entry point? init call?
+Currently that is IN the _info entry.
+
+For lookups it does it by pulling the info entry out of the dlopen()d
+file (for dynamic) or direct from the lookup .o file (for static).
+It builds a linked-list with those two classes,
+then an array sorted by (? name) and discards the list.
+The array is the _info list.
+
+We'd rather not have to do two passes over the config file(s) section.
+With the number of drivers I see no point in sorting,
+so we could stick with a one-pass build of an _info linked-list.
+This does mean converting any code using the current array.
+
+DONE:
+Rename the array to old. For now, walk it once and build a linked-list.
+Find and convert all the uses,
+
+Move all the element defns to driver code files.
+Change the init/build to scan them.
+
+Move the scan to the place-of-use reading the config,
+only load if not already on linked-list.
+
+Add the build-dynamic wrapper,
+and scan from dlopen if marked dynamic.
+*/
+
+#ifdef old
+/*XXX walk the old array */
+for (driver_info * dd = drivers_available; dd->driver_name[0] != 0;