From f809f280e079432b896f3de6f15ca44a7bdab55f Mon Sep 17 00:00:00 2001 From: Warner Losh Date: Fri, 11 Dec 2015 05:28:00 +0000 Subject: [PATCH] Create a USB_PNP_INFO and use it to export the existing PNP tables. Some drivers needed some slight re-arrangement of declarations to accommodate this. Change the USB pnp tables slightly to allow better compatibility with the system by moving linux driver info from start of each entry to the end. All other PNP tables in the system have the per-device flags and such at the end of the elements rather that at the beginning. Differential Review: https://reviews.freebsd.org/D3458 --- sys/dev/sound/usb/uaudio.c | 1 + sys/dev/usb/input/atp.c | 2 + sys/dev/usb/input/uep.c | 1 + sys/dev/usb/input/uhid.c | 1 + sys/dev/usb/input/ukbd.c | 1 + sys/dev/usb/input/ums.c | 1 + sys/dev/usb/input/wsp.c | 1 + sys/dev/usb/misc/udbp.c | 19 ++--- sys/dev/usb/misc/ufm.c | 9 +-- sys/dev/usb/misc/ugold.c | 9 +-- sys/dev/usb/misc/uled.c | 9 +-- sys/dev/usb/net/if_aue.c | 1 + sys/dev/usb/net/if_axe.c | 1 + sys/dev/usb/net/if_axge.c | 1 + sys/dev/usb/net/if_cdce.c | 33 +++++---- sys/dev/usb/net/if_cue.c | 1 + sys/dev/usb/net/if_ipheth.c | 43 ++++++------ sys/dev/usb/net/if_kue.c | 1 + sys/dev/usb/net/if_mos.c | 1 + sys/dev/usb/net/if_rue.c | 1 + sys/dev/usb/net/if_smsc.c | 1 + sys/dev/usb/net/if_udav.c | 31 +++++---- sys/dev/usb/net/if_urndis.c | 31 +++++---- sys/dev/usb/net/if_usie.c | 1 + sys/dev/usb/net/uhso.c | 1 + sys/dev/usb/serial/u3g.c | 11 +-- sys/dev/usb/serial/uark.c | 9 +-- sys/dev/usb/serial/ubsa.c | 1 + sys/dev/usb/serial/uchcom.c | 1 + sys/dev/usb/serial/ucycom.c | 11 +-- sys/dev/usb/serial/ufoma.c | 11 +-- sys/dev/usb/serial/uftdi.c | 11 +-- sys/dev/usb/serial/ugensa.c | 11 +-- sys/dev/usb/serial/uipaq.c | 1 + sys/dev/usb/serial/ulpt.c | 1 + sys/dev/usb/serial/umcs.c | 1 + sys/dev/usb/serial/umct.c | 1 + sys/dev/usb/serial/umodem.c | 2 + sys/dev/usb/serial/umoscom.c | 9 +-- sys/dev/usb/serial/uplcom.c | 1 + sys/dev/usb/serial/uslcom.c | 1 + sys/dev/usb/serial/uvisor.c | 11 +-- sys/dev/usb/serial/uvscom.c | 1 + sys/dev/usb/storage/umass.c | 19 ++--- sys/dev/usb/storage/urio.c | 9 +-- sys/dev/usb/usb_hub.c | 2 + sys/dev/usb/usbdi.h | 69 ++++++++++++++----- sys/dev/usb/wlan/if_rsu.c | 1 + sys/dev/usb/wlan/if_rum.c | 1 + sys/dev/usb/wlan/if_run.c | 1 + sys/dev/usb/wlan/if_uath.c | 1 + sys/dev/usb/wlan/if_upgt.c | 1 + sys/dev/usb/wlan/if_ural.c | 1 + sys/dev/usb/wlan/if_urtw.c | 1 + sys/dev/usb/wlan/if_urtwn.c | 1 + sys/dev/usb/wlan/if_zyd.c | 1 + sys/netgraph/bluetooth/drivers/ubt/ng_ubt.c | 2 +- .../bluetooth/drivers/ubtbcmfw/ubtbcmfw.c | 14 ++-- 58 files changed, 260 insertions(+), 161 deletions(-) diff --git a/sys/dev/sound/usb/uaudio.c b/sys/dev/sound/usb/uaudio.c index 063d8ce48dba..c3baf7fca5e1 100644 --- a/sys/dev/sound/usb/uaudio.c +++ b/sys/dev/sound/usb/uaudio.c @@ -6118,3 +6118,4 @@ DRIVER_MODULE_ORDERED(uaudio, uhub, uaudio_driver, uaudio_devclass, NULL, 0, SI_ MODULE_DEPEND(uaudio, usb, 1, 1, 1); MODULE_DEPEND(uaudio, sound, SOUND_MINVER, SOUND_PREFVER, SOUND_MAXVER); MODULE_VERSION(uaudio, 1); +USB_PNP_HOST_INFO(uaudio_devs); diff --git a/sys/dev/usb/input/atp.c b/sys/dev/usb/input/atp.c index 6b9e2ac5575d..2d93d09d6a86 100644 --- a/sys/dev/usb/input/atp.c +++ b/sys/dev/usb/input/atp.c @@ -2630,3 +2630,5 @@ static driver_t atp_driver = { DRIVER_MODULE(atp, uhub, atp_driver, atp_devclass, NULL, 0); MODULE_DEPEND(atp, usb, 1, 1, 1); MODULE_VERSION(atp, 1); +USB_PNP_HOST_INFO(fg_devs); +USB_PNP_HOST_INFO(wsp_devs); diff --git a/sys/dev/usb/input/uep.c b/sys/dev/usb/input/uep.c index 260d28101dbd..cdcad09f1fdd 100644 --- a/sys/dev/usb/input/uep.c +++ b/sys/dev/usb/input/uep.c @@ -441,3 +441,4 @@ static driver_t uep_driver = { DRIVER_MODULE(uep, uhub, uep_driver, uep_devclass, NULL, NULL); MODULE_DEPEND(uep, usb, 1, 1, 1); MODULE_VERSION(uep, 1); +USB_PNP_HOST_INFO(uep_devs); diff --git a/sys/dev/usb/input/uhid.c b/sys/dev/usb/input/uhid.c index b0fe3a012845..88c68a7bff5d 100644 --- a/sys/dev/usb/input/uhid.c +++ b/sys/dev/usb/input/uhid.c @@ -878,3 +878,4 @@ static driver_t uhid_driver = { DRIVER_MODULE(uhid, uhub, uhid_driver, uhid_devclass, NULL, 0); MODULE_DEPEND(uhid, usb, 1, 1, 1); MODULE_VERSION(uhid, 1); +USB_PNP_HOST_INFO(uhid_devs); diff --git a/sys/dev/usb/input/ukbd.c b/sys/dev/usb/input/ukbd.c index 3938952ee491..219d02bef5e9 100644 --- a/sys/dev/usb/input/ukbd.c +++ b/sys/dev/usb/input/ukbd.c @@ -2178,3 +2178,4 @@ static driver_t ukbd_driver = { DRIVER_MODULE(ukbd, uhub, ukbd_driver, ukbd_devclass, ukbd_driver_load, 0); MODULE_DEPEND(ukbd, usb, 1, 1, 1); MODULE_VERSION(ukbd, 1); +USB_PNP_HOST_INFO(ukbd_devs); diff --git a/sys/dev/usb/input/ums.c b/sys/dev/usb/input/ums.c index 265df4b5e5bf..43784bf1175b 100644 --- a/sys/dev/usb/input/ums.c +++ b/sys/dev/usb/input/ums.c @@ -1052,3 +1052,4 @@ static driver_t ums_driver = { DRIVER_MODULE(ums, uhub, ums_driver, ums_devclass, NULL, 0); MODULE_DEPEND(ums, usb, 1, 1, 1); MODULE_VERSION(ums, 1); +USB_PNP_HOST_INFO(ums_devs); diff --git a/sys/dev/usb/input/wsp.c b/sys/dev/usb/input/wsp.c index 1858c12474b5..86c935279974 100644 --- a/sys/dev/usb/input/wsp.c +++ b/sys/dev/usb/input/wsp.c @@ -1395,3 +1395,4 @@ static devclass_t wsp_devclass; DRIVER_MODULE(wsp, uhub, wsp_driver, wsp_devclass, NULL, 0); MODULE_DEPEND(wsp, usb, 1, 1, 1); MODULE_VERSION(wsp, 1); +USB_PNP_HOST_INFO(wsp_devs); diff --git a/sys/dev/usb/misc/udbp.c b/sys/dev/usb/misc/udbp.c index 8140170e0514..85924b3d1f97 100644 --- a/sys/dev/usb/misc/udbp.c +++ b/sys/dev/usb/misc/udbp.c @@ -258,10 +258,20 @@ static driver_t udbp_driver = { .size = sizeof(struct udbp_softc), }; +static const STRUCT_USB_HOST_ID udbp_devs[] = { + {USB_VPI(USB_VENDOR_NETCHIP, USB_PRODUCT_NETCHIP_TURBOCONNECT, 0)}, + {USB_VPI(USB_VENDOR_NETCHIP, USB_PRODUCT_NETCHIP_GADGETZERO, 0)}, + {USB_VPI(USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2301, 0)}, + {USB_VPI(USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2302, 0)}, + {USB_VPI(USB_VENDOR_ANCHOR, USB_PRODUCT_ANCHOR_EZLINK, 0)}, + {USB_VPI(USB_VENDOR_GENESYS, USB_PRODUCT_GENESYS_GL620USB, 0)}, +}; + DRIVER_MODULE(udbp, uhub, udbp_driver, udbp_devclass, udbp_modload, 0); MODULE_DEPEND(udbp, netgraph, NG_ABI_VERSION, NG_ABI_VERSION, NG_ABI_VERSION); MODULE_DEPEND(udbp, usb, 1, 1, 1); MODULE_VERSION(udbp, 1); +USB_PNP_HOST_INFO(udbp_devs); static int udbp_modload(module_t mod, int event, void *data) @@ -289,15 +299,6 @@ udbp_modload(module_t mod, int event, void *data) return (error); } -static const STRUCT_USB_HOST_ID udbp_devs[] = { - {USB_VPI(USB_VENDOR_NETCHIP, USB_PRODUCT_NETCHIP_TURBOCONNECT, 0)}, - {USB_VPI(USB_VENDOR_NETCHIP, USB_PRODUCT_NETCHIP_GADGETZERO, 0)}, - {USB_VPI(USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2301, 0)}, - {USB_VPI(USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2302, 0)}, - {USB_VPI(USB_VENDOR_ANCHOR, USB_PRODUCT_ANCHOR_EZLINK, 0)}, - {USB_VPI(USB_VENDOR_GENESYS, USB_PRODUCT_GENESYS_GL620USB, 0)}, -}; - static int udbp_probe(device_t dev) { diff --git a/sys/dev/usb/misc/ufm.c b/sys/dev/usb/misc/ufm.c index 0612dd2d12e1..e7423b268845 100644 --- a/sys/dev/usb/misc/ufm.c +++ b/sys/dev/usb/misc/ufm.c @@ -115,14 +115,15 @@ static driver_t ufm_driver = { .size = sizeof(struct ufm_softc), }; -DRIVER_MODULE(ufm, uhub, ufm_driver, ufm_devclass, NULL, 0); -MODULE_DEPEND(ufm, usb, 1, 1, 1); -MODULE_VERSION(ufm, 1); - static const STRUCT_USB_HOST_ID ufm_devs[] = { {USB_VPI(USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_FMRADIO, 0)}, }; +DRIVER_MODULE(ufm, uhub, ufm_driver, ufm_devclass, NULL, 0); +MODULE_DEPEND(ufm, usb, 1, 1, 1); +MODULE_VERSION(ufm, 1); +USB_PNP_HOST_INFO(ufm_devs); + static int ufm_probe(device_t dev) { diff --git a/sys/dev/usb/misc/ugold.c b/sys/dev/usb/misc/ugold.c index d6f8f777cac0..88190b03a086 100644 --- a/sys/dev/usb/misc/ugold.c +++ b/sys/dev/usb/misc/ugold.c @@ -136,9 +136,14 @@ static driver_t ugold_driver = { .size = sizeof(struct ugold_softc), }; +static const STRUCT_USB_HOST_ID ugold_devs[] = { + {USB_VPI(USB_VENDOR_CHICONY2, USB_PRODUCT_CHICONY2_TEMPER, 0)}, +}; + DRIVER_MODULE(ugold, uhub, ugold_driver, ugold_devclass, NULL, NULL); MODULE_DEPEND(ugold, usb, 1, 1, 1); MODULE_VERSION(ugold, 1); +USB_PNP_HOST_INFO(ugold_devs); static const struct usb_config ugold_config[UGOLD_N_TRANSFER] = { @@ -153,10 +158,6 @@ static const struct usb_config ugold_config[UGOLD_N_TRANSFER] = { }, }; -static const STRUCT_USB_HOST_ID ugold_devs[] = { - {USB_VPI(USB_VENDOR_CHICONY2, USB_PRODUCT_CHICONY2_TEMPER, 0)}, -}; - static void ugold_timeout(void *arg) { diff --git a/sys/dev/usb/misc/uled.c b/sys/dev/usb/misc/uled.c index efe6d9cd7c3d..df117eae9a69 100644 --- a/sys/dev/usb/misc/uled.c +++ b/sys/dev/usb/misc/uled.c @@ -107,14 +107,15 @@ static driver_t uled_driver = { .size = sizeof(struct uled_softc), }; -DRIVER_MODULE(uled, uhub, uled_driver, uled_devclass, NULL, NULL); -MODULE_DEPEND(uled, usb, 1, 1, 1); -MODULE_VERSION(uled, 1); - static const STRUCT_USB_HOST_ID uled_devs[] = { {USB_VPI(USB_VENDOR_DREAMLINK, USB_PRODUCT_DREAMLINK_DL100B, 0)}, }; +DRIVER_MODULE(uled, uhub, uled_driver, uled_devclass, NULL, NULL); +MODULE_DEPEND(uled, usb, 1, 1, 1); +MODULE_VERSION(uled, 1); +USB_PNP_HOST_INFO(uled_devs); + static int uled_probe(device_t dev) { diff --git a/sys/dev/usb/net/if_aue.c b/sys/dev/usb/net/if_aue.c index 81b9cca63e0b..a756820bf358 100644 --- a/sys/dev/usb/net/if_aue.c +++ b/sys/dev/usb/net/if_aue.c @@ -279,6 +279,7 @@ MODULE_DEPEND(aue, usb, 1, 1, 1); MODULE_DEPEND(aue, ether, 1, 1, 1); MODULE_DEPEND(aue, miibus, 1, 1, 1); MODULE_VERSION(aue, 1); +USB_PNP_HOST_INFO(aue_devs); static const struct usb_ether_methods aue_ue_methods = { .ue_attach_post = aue_attach_post, diff --git a/sys/dev/usb/net/if_axe.c b/sys/dev/usb/net/if_axe.c index 1a7987c3e4e4..199549729de7 100644 --- a/sys/dev/usb/net/if_axe.c +++ b/sys/dev/usb/net/if_axe.c @@ -278,6 +278,7 @@ MODULE_DEPEND(axe, usb, 1, 1, 1); MODULE_DEPEND(axe, ether, 1, 1, 1); MODULE_DEPEND(axe, miibus, 1, 1, 1); MODULE_VERSION(axe, 1); +USB_PNP_HOST_INFO(axe_devs); static const struct usb_ether_methods axe_ue_methods = { .ue_attach_post = axe_attach_post, diff --git a/sys/dev/usb/net/if_axge.c b/sys/dev/usb/net/if_axge.c index 2c695cd4b850..eb025c72a802 100644 --- a/sys/dev/usb/net/if_axge.c +++ b/sys/dev/usb/net/if_axge.c @@ -190,6 +190,7 @@ MODULE_DEPEND(axge, usb, 1, 1, 1); MODULE_DEPEND(axge, ether, 1, 1, 1); MODULE_DEPEND(axge, miibus, 1, 1, 1); MODULE_VERSION(axge, 1); +USB_PNP_HOST_INFO(axge_devs); static const struct usb_ether_methods axge_ue_methods = { .ue_attach_post = axge_attach_post, diff --git a/sys/dev/usb/net/if_cdce.c b/sys/dev/usb/net/if_cdce.c index 397c4f6c779e..8b220ae84051 100644 --- a/sys/dev/usb/net/if_cdce.c +++ b/sys/dev/usb/net/if_cdce.c @@ -256,21 +256,6 @@ static eventhandler_tag cdce_etag; static int cdce_driver_loaded(struct module *, int, void *); -DRIVER_MODULE(cdce, uhub, cdce_driver, cdce_devclass, cdce_driver_loaded, 0); -MODULE_VERSION(cdce, 1); -MODULE_DEPEND(cdce, uether, 1, 1, 1); -MODULE_DEPEND(cdce, usb, 1, 1, 1); -MODULE_DEPEND(cdce, ether, 1, 1, 1); - -static const struct usb_ether_methods cdce_ue_methods = { - .ue_attach_post = cdce_attach_post, - .ue_start = cdce_start, - .ue_init = cdce_init, - .ue_stop = cdce_stop, - .ue_setmulti = cdce_setmulti, - .ue_setpromisc = cdce_setpromisc, -}; - static const STRUCT_USB_HOST_ID cdce_switch_devs[] = { {USB_VPI(USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E3272_INIT, MSC_EJECT_HUAWEI2)}, }; @@ -307,6 +292,24 @@ static const STRUCT_USB_DUAL_ID cdce_dual_devs[] = { {USB_IF_CSI(UICLASS_CDC, UISUBCLASS_NETWORK_CONTROL_MODEL, 0)}, }; +DRIVER_MODULE(cdce, uhub, cdce_driver, cdce_devclass, cdce_driver_loaded, 0); +MODULE_VERSION(cdce, 1); +MODULE_DEPEND(cdce, uether, 1, 1, 1); +MODULE_DEPEND(cdce, usb, 1, 1, 1); +MODULE_DEPEND(cdce, ether, 1, 1, 1); +USB_PNP_DEVICE_INFO(cdce_switch_devs); +USB_PNP_HOST_INFO(cdce_host_devs); +USB_PNP_DUAL_INFO(cdce_dual_devs); + +static const struct usb_ether_methods cdce_ue_methods = { + .ue_attach_post = cdce_attach_post, + .ue_start = cdce_start, + .ue_init = cdce_init, + .ue_stop = cdce_stop, + .ue_setmulti = cdce_setmulti, + .ue_setpromisc = cdce_setpromisc, +}; + #if CDCE_HAVE_NCM /*------------------------------------------------------------------------* * cdce_ncm_init diff --git a/sys/dev/usb/net/if_cue.c b/sys/dev/usb/net/if_cue.c index 9accde9db2c5..39860fe49a8e 100644 --- a/sys/dev/usb/net/if_cue.c +++ b/sys/dev/usb/net/if_cue.c @@ -177,6 +177,7 @@ MODULE_DEPEND(cue, uether, 1, 1, 1); MODULE_DEPEND(cue, usb, 1, 1, 1); MODULE_DEPEND(cue, ether, 1, 1, 1); MODULE_VERSION(cue, 1); +USB_PNP_HOST_INFO(cue_devs); static const struct usb_ether_methods cue_ue_methods = { .ue_attach_post = cue_attach_post, diff --git a/sys/dev/usb/net/if_ipheth.c b/sys/dev/usb/net/if_ipheth.c index 7e121cc005d4..d7035881e097 100644 --- a/sys/dev/usb/net/if_ipheth.c +++ b/sys/dev/usb/net/if_ipheth.c @@ -131,27 +131,6 @@ static driver_t ipheth_driver = { static devclass_t ipheth_devclass; -DRIVER_MODULE(ipheth, uhub, ipheth_driver, ipheth_devclass, NULL, 0); -MODULE_VERSION(ipheth, 1); -MODULE_DEPEND(ipheth, uether, 1, 1, 1); -MODULE_DEPEND(ipheth, usb, 1, 1, 1); -MODULE_DEPEND(ipheth, ether, 1, 1, 1); - -static const struct usb_ether_methods ipheth_ue_methods = { - .ue_attach_post = ipheth_attach_post, - .ue_start = ipheth_start, - .ue_init = ipheth_init, - .ue_tick = ipheth_tick, - .ue_stop = ipheth_stop, - .ue_setmulti = ipheth_setmulti, - .ue_setpromisc = ipheth_setpromisc, -}; - -#define IPHETH_ID(v,p,c,sc,pt) \ - USB_VENDOR(v), USB_PRODUCT(p), \ - USB_IFACE_CLASS(c), USB_IFACE_SUBCLASS(sc), \ - USB_IFACE_PROTOCOL(pt) - static const STRUCT_USB_HOST_ID ipheth_devs[] = { #if 0 {IPHETH_ID(USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE, @@ -181,6 +160,28 @@ static const STRUCT_USB_HOST_ID ipheth_devs[] = { #endif }; +DRIVER_MODULE(ipheth, uhub, ipheth_driver, ipheth_devclass, NULL, 0); +MODULE_VERSION(ipheth, 1); +MODULE_DEPEND(ipheth, uether, 1, 1, 1); +MODULE_DEPEND(ipheth, usb, 1, 1, 1); +MODULE_DEPEND(ipheth, ether, 1, 1, 1); +USB_PNP_HOST_INFO(ipheth_devs); + +static const struct usb_ether_methods ipheth_ue_methods = { + .ue_attach_post = ipheth_attach_post, + .ue_start = ipheth_start, + .ue_init = ipheth_init, + .ue_tick = ipheth_tick, + .ue_stop = ipheth_stop, + .ue_setmulti = ipheth_setmulti, + .ue_setpromisc = ipheth_setpromisc, +}; + +#define IPHETH_ID(v,p,c,sc,pt) \ + USB_VENDOR(v), USB_PRODUCT(p), \ + USB_IFACE_CLASS(c), USB_IFACE_SUBCLASS(sc), \ + USB_IFACE_PROTOCOL(pt) + static int ipheth_get_mac_addr(struct ipheth_softc *sc) { diff --git a/sys/dev/usb/net/if_kue.c b/sys/dev/usb/net/if_kue.c index 9d2291ec7b60..562ead2809e7 100644 --- a/sys/dev/usb/net/if_kue.c +++ b/sys/dev/usb/net/if_kue.c @@ -219,6 +219,7 @@ MODULE_DEPEND(kue, uether, 1, 1, 1); MODULE_DEPEND(kue, usb, 1, 1, 1); MODULE_DEPEND(kue, ether, 1, 1, 1); MODULE_VERSION(kue, 1); +USB_PNP_HOST_INFO(kue_devs); static const struct usb_ether_methods kue_ue_methods = { .ue_attach_post = kue_attach_post, diff --git a/sys/dev/usb/net/if_mos.c b/sys/dev/usb/net/if_mos.c index 60b574245d64..1f926290035d 100644 --- a/sys/dev/usb/net/if_mos.c +++ b/sys/dev/usb/net/if_mos.c @@ -247,6 +247,7 @@ MODULE_DEPEND(mos, uether, 1, 1, 1); MODULE_DEPEND(mos, usb, 1, 1, 1); MODULE_DEPEND(mos, ether, 1, 1, 1); MODULE_DEPEND(mos, miibus, 1, 1, 1); +USB_PNP_HOST_INFO(mos_devs); static const struct usb_ether_methods mos_ue_methods = { .ue_attach_post = mos_attach_post, diff --git a/sys/dev/usb/net/if_rue.c b/sys/dev/usb/net/if_rue.c index e9fb62292626..541d62d3ae75 100644 --- a/sys/dev/usb/net/if_rue.c +++ b/sys/dev/usb/net/if_rue.c @@ -214,6 +214,7 @@ MODULE_DEPEND(rue, usb, 1, 1, 1); MODULE_DEPEND(rue, ether, 1, 1, 1); MODULE_DEPEND(rue, miibus, 1, 1, 1); MODULE_VERSION(rue, 1); +USB_PNP_HOST_INFO(rue_devs); static const struct usb_ether_methods rue_ue_methods = { .ue_attach_post = rue_attach_post, diff --git a/sys/dev/usb/net/if_smsc.c b/sys/dev/usb/net/if_smsc.c index b642a6989616..19c46152eac5 100644 --- a/sys/dev/usb/net/if_smsc.c +++ b/sys/dev/usb/net/if_smsc.c @@ -1858,3 +1858,4 @@ MODULE_DEPEND(smsc, usb, 1, 1, 1); MODULE_DEPEND(smsc, ether, 1, 1, 1); MODULE_DEPEND(smsc, miibus, 1, 1, 1); MODULE_VERSION(smsc, 1); +USB_PNP_HOST_INFO(smsc_devs); diff --git a/sys/dev/usb/net/if_udav.c b/sys/dev/usb/net/if_udav.c index de908a984129..735742535164 100644 --- a/sys/dev/usb/net/if_udav.c +++ b/sys/dev/usb/net/if_udav.c @@ -165,6 +165,21 @@ static driver_t udav_driver = { static devclass_t udav_devclass; +static const STRUCT_USB_HOST_ID udav_devs[] = { + /* ShanTou DM9601 USB NIC */ + {USB_VPI(USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_DM9601, 0)}, + /* ShanTou ST268 USB NIC */ + {USB_VPI(USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_ST268, 0)}, + /* Corega USB-TXC */ + {USB_VPI(USB_VENDOR_COREGA, USB_PRODUCT_COREGA_FETHER_USB_TXC, 0)}, + /* ShanTou AMD8515 USB NIC */ + {USB_VPI(USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_ADM8515, 0)}, + /* Kontron AG USB Ethernet */ + {USB_VPI(USB_VENDOR_KONTRON, USB_PRODUCT_KONTRON_DM9601, 0)}, + {USB_VPI(USB_VENDOR_KONTRON, USB_PRODUCT_KONTRON_JP1082, + UDAV_FLAG_NO_PHY)}, +}; + DRIVER_MODULE(udav, uhub, udav_driver, udav_devclass, NULL, 0); DRIVER_MODULE(miibus, udav, miibus_driver, miibus_devclass, 0, 0); MODULE_DEPEND(udav, uether, 1, 1, 1); @@ -172,6 +187,7 @@ MODULE_DEPEND(udav, usb, 1, 1, 1); MODULE_DEPEND(udav, ether, 1, 1, 1); MODULE_DEPEND(udav, miibus, 1, 1, 1); MODULE_VERSION(udav, 1); +USB_PNP_HOST_INFO(udav_devs); static const struct usb_ether_methods udav_ue_methods = { .ue_attach_post = udav_attach_post, @@ -208,21 +224,6 @@ SYSCTL_INT(_hw_usb_udav, OID_AUTO, debug, CTLFLAG_RWTUN, &udav_debug, 0, #define UDAV_CLRBIT(sc, reg, x) \ udav_csr_write1(sc, reg, udav_csr_read1(sc, reg) & ~(x)) -static const STRUCT_USB_HOST_ID udav_devs[] = { - /* ShanTou DM9601 USB NIC */ - {USB_VPI(USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_DM9601, 0)}, - /* ShanTou ST268 USB NIC */ - {USB_VPI(USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_ST268, 0)}, - /* Corega USB-TXC */ - {USB_VPI(USB_VENDOR_COREGA, USB_PRODUCT_COREGA_FETHER_USB_TXC, 0)}, - /* ShanTou AMD8515 USB NIC */ - {USB_VPI(USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_ADM8515, 0)}, - /* Kontron AG USB Ethernet */ - {USB_VPI(USB_VENDOR_KONTRON, USB_PRODUCT_KONTRON_DM9601, 0)}, - {USB_VPI(USB_VENDOR_KONTRON, USB_PRODUCT_KONTRON_JP1082, - UDAV_FLAG_NO_PHY)}, -}; - static void udav_attach_post(struct usb_ether *ue) { diff --git a/sys/dev/usb/net/if_urndis.c b/sys/dev/usb/net/if_urndis.c index 32fa53370946..749f874c0d94 100644 --- a/sys/dev/usb/net/if_urndis.c +++ b/sys/dev/usb/net/if_urndis.c @@ -161,21 +161,6 @@ static driver_t urndis_driver = { static devclass_t urndis_devclass; -DRIVER_MODULE(urndis, uhub, urndis_driver, urndis_devclass, NULL, NULL); -MODULE_VERSION(urndis, 1); -MODULE_DEPEND(urndis, uether, 1, 1, 1); -MODULE_DEPEND(urndis, usb, 1, 1, 1); -MODULE_DEPEND(urndis, ether, 1, 1, 1); - -static const struct usb_ether_methods urndis_ue_methods = { - .ue_attach_post = urndis_attach_post, - .ue_start = urndis_start, - .ue_init = urndis_init, - .ue_stop = urndis_stop, - .ue_setmulti = urndis_setmulti, - .ue_setpromisc = urndis_setpromisc, -}; - static const STRUCT_USB_HOST_ID urndis_host_devs[] = { /* Generic RNDIS class match */ {USB_IFACE_CLASS(UICLASS_CDC), @@ -191,6 +176,22 @@ static const STRUCT_USB_HOST_ID urndis_host_devs[] = { USB_IFACE_PROTOCOL(0xff)}, }; +DRIVER_MODULE(urndis, uhub, urndis_driver, urndis_devclass, NULL, NULL); +MODULE_VERSION(urndis, 1); +MODULE_DEPEND(urndis, uether, 1, 1, 1); +MODULE_DEPEND(urndis, usb, 1, 1, 1); +MODULE_DEPEND(urndis, ether, 1, 1, 1); +USB_PNP_HOST_INFO(urndis_host_devs); + +static const struct usb_ether_methods urndis_ue_methods = { + .ue_attach_post = urndis_attach_post, + .ue_start = urndis_start, + .ue_init = urndis_init, + .ue_stop = urndis_stop, + .ue_setmulti = urndis_setmulti, + .ue_setpromisc = urndis_setpromisc, +}; + static int urndis_probe(device_t dev) { diff --git a/sys/dev/usb/net/if_usie.c b/sys/dev/usb/net/if_usie.c index 6736cbc9640c..528c1e47697e 100644 --- a/sys/dev/usb/net/if_usie.c +++ b/sys/dev/usb/net/if_usie.c @@ -212,6 +212,7 @@ DRIVER_MODULE(usie, uhub, usie_driver, usie_devclass, usie_driver_loaded, 0); MODULE_DEPEND(usie, ucom, 1, 1, 1); MODULE_DEPEND(usie, usb, 1, 1, 1); MODULE_VERSION(usie, 1); +USB_PNP_HOST_INFO(usie_devs); static const struct ucom_callback usie_uc_callback = { .ucom_cfg_get_status = &usie_uc_cfg_get_status, diff --git a/sys/dev/usb/net/uhso.c b/sys/dev/usb/net/uhso.c index 1851320c0bd3..f2afb0b44c0e 100644 --- a/sys/dev/usb/net/uhso.c +++ b/sys/dev/usb/net/uhso.c @@ -497,6 +497,7 @@ DRIVER_MODULE(uhso, uhub, uhso_driver, uhso_devclass, uhso_driver_loaded, 0); MODULE_DEPEND(uhso, ucom, 1, 1, 1); MODULE_DEPEND(uhso, usb, 1, 1, 1); MODULE_VERSION(uhso, 1); +USB_PNP_HOST_INFO(uhso_devs); static struct ucom_callback uhso_ucom_callback = { .ucom_cfg_get_status = &uhso_ucom_cfg_get_status, diff --git a/sys/dev/usb/serial/u3g.c b/sys/dev/usb/serial/u3g.c index 065da281807c..ab6b20a350ca 100644 --- a/sys/dev/usb/serial/u3g.c +++ b/sys/dev/usb/serial/u3g.c @@ -198,11 +198,6 @@ static driver_t u3g_driver = { .size = sizeof(struct u3g_softc), }; -DRIVER_MODULE(u3g, uhub, u3g_driver, u3g_devclass, u3g_driver_loaded, 0); -MODULE_DEPEND(u3g, ucom, 1, 1, 1); -MODULE_DEPEND(u3g, usb, 1, 1, 1); -MODULE_VERSION(u3g, 1); - static const STRUCT_USB_HOST_ID u3g_devs[] = { #define U3G_DEV(v,p,i) { USB_VPI(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, i) } U3G_DEV(ACERP, H10, 0), @@ -587,6 +582,12 @@ static const STRUCT_USB_HOST_ID u3g_devs[] = { #undef U3G_DEV }; +DRIVER_MODULE(u3g, uhub, u3g_driver, u3g_devclass, u3g_driver_loaded, 0); +MODULE_DEPEND(u3g, ucom, 1, 1, 1); +MODULE_DEPEND(u3g, usb, 1, 1, 1); +MODULE_VERSION(u3g, 1); +USB_PNP_HOST_INFO(u3g_devs); + static int u3g_sierra_init(struct usb_device *udev) { diff --git a/sys/dev/usb/serial/uark.c b/sys/dev/usb/serial/uark.c index f0737f2abfef..e0e6d0bc9049 100644 --- a/sys/dev/usb/serial/uark.c +++ b/sys/dev/usb/serial/uark.c @@ -168,14 +168,15 @@ static driver_t uark_driver = { .size = sizeof(struct uark_softc), }; +static const STRUCT_USB_HOST_ID uark_devs[] = { + {USB_VPI(USB_VENDOR_ARKMICRO, USB_PRODUCT_ARKMICRO_ARK3116, 0)}, +}; + DRIVER_MODULE(uark, uhub, uark_driver, uark_devclass, NULL, 0); MODULE_DEPEND(uark, ucom, 1, 1, 1); MODULE_DEPEND(uark, usb, 1, 1, 1); MODULE_VERSION(uark, 1); - -static const STRUCT_USB_HOST_ID uark_devs[] = { - {USB_VPI(USB_VENDOR_ARKMICRO, USB_PRODUCT_ARKMICRO_ARK3116, 0)}, -}; +USB_PNP_HOST_INFO(uark_devs); static int uark_probe(device_t dev) diff --git a/sys/dev/usb/serial/ubsa.c b/sys/dev/usb/serial/ubsa.c index 6a30af22861b..5fac56a27666 100644 --- a/sys/dev/usb/serial/ubsa.c +++ b/sys/dev/usb/serial/ubsa.c @@ -273,6 +273,7 @@ DRIVER_MODULE(ubsa, uhub, ubsa_driver, ubsa_devclass, NULL, 0); MODULE_DEPEND(ubsa, ucom, 1, 1, 1); MODULE_DEPEND(ubsa, usb, 1, 1, 1); MODULE_VERSION(ubsa, 1); +USB_PNP_HOST_INFO(ubsa_devs); static int ubsa_probe(device_t dev) diff --git a/sys/dev/usb/serial/uchcom.c b/sys/dev/usb/serial/uchcom.c index 41ebe5cefcfe..70f1979355b3 100644 --- a/sys/dev/usb/serial/uchcom.c +++ b/sys/dev/usb/serial/uchcom.c @@ -874,3 +874,4 @@ DRIVER_MODULE(uchcom, uhub, uchcom_driver, uchcom_devclass, NULL, 0); MODULE_DEPEND(uchcom, ucom, 1, 1, 1); MODULE_DEPEND(uchcom, usb, 1, 1, 1); MODULE_VERSION(uchcom, 1); +USB_PNP_HOST_INFO(uchcom_devs); diff --git a/sys/dev/usb/serial/ucycom.c b/sys/dev/usb/serial/ucycom.c index 7536a025270c..66aedecd1041 100644 --- a/sys/dev/usb/serial/ucycom.c +++ b/sys/dev/usb/serial/ucycom.c @@ -174,11 +174,6 @@ static driver_t ucycom_driver = { .size = sizeof(struct ucycom_softc), }; -DRIVER_MODULE(ucycom, uhub, ucycom_driver, ucycom_devclass, NULL, 0); -MODULE_DEPEND(ucycom, ucom, 1, 1, 1); -MODULE_DEPEND(ucycom, usb, 1, 1, 1); -MODULE_VERSION(ucycom, 1); - /* * Supported devices */ @@ -186,6 +181,12 @@ static const STRUCT_USB_HOST_ID ucycom_devs[] = { {USB_VPI(USB_VENDOR_DELORME, USB_PRODUCT_DELORME_EARTHMATE, MODEL_CY7C64013)}, }; +DRIVER_MODULE(ucycom, uhub, ucycom_driver, ucycom_devclass, NULL, 0); +MODULE_DEPEND(ucycom, ucom, 1, 1, 1); +MODULE_DEPEND(ucycom, usb, 1, 1, 1); +MODULE_VERSION(ucycom, 1); +USB_PNP_HOST_INFO(ucycom_devs); + #define UCYCOM_DEFAULT_RATE 4800 #define UCYCOM_DEFAULT_CFG 0x03 /* N-8-1 */ diff --git a/sys/dev/usb/serial/ufoma.c b/sys/dev/usb/serial/ufoma.c index f3d66dfc6814..fb526cd57e6d 100644 --- a/sys/dev/usb/serial/ufoma.c +++ b/sys/dev/usb/serial/ufoma.c @@ -317,16 +317,17 @@ static driver_t ufoma_driver = { .size = sizeof(struct ufoma_softc), }; -DRIVER_MODULE(ufoma, uhub, ufoma_driver, ufoma_devclass, NULL, 0); -MODULE_DEPEND(ufoma, ucom, 1, 1, 1); -MODULE_DEPEND(ufoma, usb, 1, 1, 1); -MODULE_VERSION(ufoma, 1); - static const STRUCT_USB_HOST_ID ufoma_devs[] = { {USB_IFACE_CLASS(UICLASS_CDC), USB_IFACE_SUBCLASS(UISUBCLASS_MCPC),}, }; +DRIVER_MODULE(ufoma, uhub, ufoma_driver, ufoma_devclass, NULL, 0); +MODULE_DEPEND(ufoma, ucom, 1, 1, 1); +MODULE_DEPEND(ufoma, usb, 1, 1, 1); +MODULE_VERSION(ufoma, 1); +USB_PNP_HOST_INFO(ufoma_devs); + static int ufoma_probe(device_t dev) { diff --git a/sys/dev/usb/serial/uftdi.c b/sys/dev/usb/serial/uftdi.c index b33df36d9276..936d7f096ed5 100644 --- a/sys/dev/usb/serial/uftdi.c +++ b/sys/dev/usb/serial/uftdi.c @@ -265,11 +265,6 @@ static driver_t uftdi_driver = { .size = sizeof(struct uftdi_softc), }; -DRIVER_MODULE(uftdi, uhub, uftdi_driver, uftdi_devclass, NULL, NULL); -MODULE_DEPEND(uftdi, ucom, 1, 1, 1); -MODULE_DEPEND(uftdi, usb, 1, 1, 1); -MODULE_VERSION(uftdi, 1); - static const STRUCT_USB_HOST_ID uftdi_devs[] = { #define UFTDI_DEV(v, p, i) \ { USB_VPI(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, i) } @@ -914,6 +909,12 @@ static const STRUCT_USB_HOST_ID uftdi_devs[] = { #undef UFTDI_DEV }; +DRIVER_MODULE(uftdi, uhub, uftdi_driver, uftdi_devclass, NULL, NULL); +MODULE_DEPEND(uftdi, ucom, 1, 1, 1); +MODULE_DEPEND(uftdi, usb, 1, 1, 1); +MODULE_VERSION(uftdi, 1); +USB_PNP_HOST_INFO(uftdi_devs); + /* * Jtag product name strings table. Some products have one or more interfaces * dedicated to jtag or gpio, but use a product ID that's the same as other diff --git a/sys/dev/usb/serial/ugensa.c b/sys/dev/usb/serial/ugensa.c index 5d6785d24633..d78c326c9a91 100644 --- a/sys/dev/usb/serial/ugensa.c +++ b/sys/dev/usb/serial/ugensa.c @@ -152,11 +152,6 @@ static driver_t ugensa_driver = { .size = sizeof(struct ugensa_softc), }; -DRIVER_MODULE(ugensa, uhub, ugensa_driver, ugensa_devclass, NULL, 0); -MODULE_DEPEND(ugensa, ucom, 1, 1, 1); -MODULE_DEPEND(ugensa, usb, 1, 1, 1); -MODULE_VERSION(ugensa, 1); - static const STRUCT_USB_HOST_ID ugensa_devs[] = { {USB_VPI(USB_VENDOR_AIRPRIME, USB_PRODUCT_AIRPRIME_PC5220, 0)}, {USB_VPI(USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CDMA_MODEM1, 0)}, @@ -165,6 +160,12 @@ static const STRUCT_USB_HOST_ID ugensa_devs[] = { {USB_VPI(USB_VENDOR_NOVATEL2, USB_PRODUCT_NOVATEL2_FLEXPACKGPS, 0)}, }; +DRIVER_MODULE(ugensa, uhub, ugensa_driver, ugensa_devclass, NULL, 0); +MODULE_DEPEND(ugensa, ucom, 1, 1, 1); +MODULE_DEPEND(ugensa, usb, 1, 1, 1); +MODULE_VERSION(ugensa, 1); +USB_PNP_HOST_INFO(ugensa_devs); + static int ugensa_probe(device_t dev) { diff --git a/sys/dev/usb/serial/uipaq.c b/sys/dev/usb/serial/uipaq.c index f9e54f8c9512..d483ce59017f 100644 --- a/sys/dev/usb/serial/uipaq.c +++ b/sys/dev/usb/serial/uipaq.c @@ -1088,6 +1088,7 @@ DRIVER_MODULE(uipaq, uhub, uipaq_driver, uipaq_devclass, NULL, 0); MODULE_DEPEND(uipaq, ucom, 1, 1, 1); MODULE_DEPEND(uipaq, usb, 1, 1, 1); MODULE_VERSION(uipaq, 1); +USB_PNP_HOST_INFO(uipaq_devs); static int uipaq_probe(device_t dev) diff --git a/sys/dev/usb/serial/ulpt.c b/sys/dev/usb/serial/ulpt.c index 214310d934cc..52dd494c3b91 100644 --- a/sys/dev/usb/serial/ulpt.c +++ b/sys/dev/usb/serial/ulpt.c @@ -759,3 +759,4 @@ static driver_t ulpt_driver = { DRIVER_MODULE(ulpt, uhub, ulpt_driver, ulpt_devclass, NULL, 0); MODULE_DEPEND(ulpt, usb, 1, 1, 1); MODULE_VERSION(ulpt, 1); +USB_PNP_HOST_INFO(ulpt_devs); diff --git a/sys/dev/usb/serial/umcs.c b/sys/dev/usb/serial/umcs.c index 01873c608f31..b48d5e57b036 100644 --- a/sys/dev/usb/serial/umcs.c +++ b/sys/dev/usb/serial/umcs.c @@ -278,6 +278,7 @@ DRIVER_MODULE(umcs7840, uhub, umcs7840_driver, umcs7840_devclass, 0, 0); MODULE_DEPEND(umcs7840, ucom, 1, 1, 1); MODULE_DEPEND(umcs7840, usb, 1, 1, 1); MODULE_VERSION(umcs7840, UMCS7840_MODVER); +USB_PNP_HOST_INFO(umcs7840_devs); static int umcs7840_probe(device_t dev) diff --git a/sys/dev/usb/serial/umct.c b/sys/dev/usb/serial/umct.c index d8fad9824c4b..32c789743723 100644 --- a/sys/dev/usb/serial/umct.c +++ b/sys/dev/usb/serial/umct.c @@ -221,6 +221,7 @@ DRIVER_MODULE(umct, uhub, umct_driver, umct_devclass, NULL, 0); MODULE_DEPEND(umct, ucom, 1, 1, 1); MODULE_DEPEND(umct, usb, 1, 1, 1); MODULE_VERSION(umct, 1); +USB_PNP_HOST_INFO(umct_devs); static int umct_probe(device_t dev) diff --git a/sys/dev/usb/serial/umodem.c b/sys/dev/usb/serial/umodem.c index c1e88125f12e..5e65c12e1cb7 100644 --- a/sys/dev/usb/serial/umodem.c +++ b/sys/dev/usb/serial/umodem.c @@ -298,6 +298,8 @@ DRIVER_MODULE(umodem, uhub, umodem_driver, umodem_devclass, NULL, 0); MODULE_DEPEND(umodem, ucom, 1, 1, 1); MODULE_DEPEND(umodem, usb, 1, 1, 1); MODULE_VERSION(umodem, UMODEM_MODVER); +USB_PNP_DUAL_INFO(umodem_dual_devs); +USB_PNP_HOST_INFO(umodem_host_devs); static int umodem_probe(device_t dev) diff --git a/sys/dev/usb/serial/umoscom.c b/sys/dev/usb/serial/umoscom.c index f8f460b6e97b..8c580dabb59c 100644 --- a/sys/dev/usb/serial/umoscom.c +++ b/sys/dev/usb/serial/umoscom.c @@ -278,14 +278,15 @@ static driver_t umoscom_driver = { .size = sizeof(struct umoscom_softc), }; +static const STRUCT_USB_HOST_ID umoscom_devs[] = { + {USB_VPI(USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7703, 0)} +}; + DRIVER_MODULE(umoscom, uhub, umoscom_driver, umoscom_devclass, NULL, 0); MODULE_DEPEND(umoscom, ucom, 1, 1, 1); MODULE_DEPEND(umoscom, usb, 1, 1, 1); MODULE_VERSION(umoscom, 1); - -static const STRUCT_USB_HOST_ID umoscom_devs[] = { - {USB_VPI(USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7703, 0)} -}; +USB_PNP_HOST_INFO(umoscom_devs); static int umoscom_probe(device_t dev) diff --git a/sys/dev/usb/serial/uplcom.c b/sys/dev/usb/serial/uplcom.c index 8f3779151fb0..af0166e16e38 100644 --- a/sys/dev/usb/serial/uplcom.c +++ b/sys/dev/usb/serial/uplcom.c @@ -326,6 +326,7 @@ DRIVER_MODULE(uplcom, uhub, uplcom_driver, uplcom_devclass, NULL, 0); MODULE_DEPEND(uplcom, ucom, 1, 1, 1); MODULE_DEPEND(uplcom, usb, 1, 1, 1); MODULE_VERSION(uplcom, UPLCOM_MODVER); +USB_PNP_HOST_INFO(uplcom_devs); static int uplcom_probe(device_t dev) diff --git a/sys/dev/usb/serial/uslcom.c b/sys/dev/usb/serial/uslcom.c index 9bb03f6cd7fb..b516bdec3641 100644 --- a/sys/dev/usb/serial/uslcom.c +++ b/sys/dev/usb/serial/uslcom.c @@ -382,6 +382,7 @@ DRIVER_MODULE(uslcom, uhub, uslcom_driver, uslcom_devclass, NULL, 0); MODULE_DEPEND(uslcom, ucom, 1, 1, 1); MODULE_DEPEND(uslcom, usb, 1, 1, 1); MODULE_VERSION(uslcom, 1); +USB_PNP_HOST_INFO(uslcom_devs); static void uslcom_watchdog(void *arg) diff --git a/sys/dev/usb/serial/uvisor.c b/sys/dev/usb/serial/uvisor.c index b564c99075b4..bd6bc6b8ed06 100644 --- a/sys/dev/usb/serial/uvisor.c +++ b/sys/dev/usb/serial/uvisor.c @@ -251,11 +251,6 @@ static driver_t uvisor_driver = { .size = sizeof(struct uvisor_softc), }; -DRIVER_MODULE(uvisor, uhub, uvisor_driver, uvisor_devclass, NULL, 0); -MODULE_DEPEND(uvisor, ucom, 1, 1, 1); -MODULE_DEPEND(uvisor, usb, 1, 1, 1); -MODULE_VERSION(uvisor, 1); - static const STRUCT_USB_HOST_ID uvisor_devs[] = { #define UVISOR_DEV(v,p,i) { USB_VPI(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, i) } UVISOR_DEV(ACEECA, MEZ1000, UVISOR_FLAG_PALM4), @@ -288,6 +283,12 @@ static const STRUCT_USB_HOST_ID uvisor_devs[] = { #undef UVISOR_DEV }; +DRIVER_MODULE(uvisor, uhub, uvisor_driver, uvisor_devclass, NULL, 0); +MODULE_DEPEND(uvisor, ucom, 1, 1, 1); +MODULE_DEPEND(uvisor, usb, 1, 1, 1); +MODULE_VERSION(uvisor, 1); +USB_PNP_HOST_INFO(uvisor_devs); + static int uvisor_probe(device_t dev) { diff --git a/sys/dev/usb/serial/uvscom.c b/sys/dev/usb/serial/uvscom.c index 1ee2745fb8b3..0a6e7146a436 100644 --- a/sys/dev/usb/serial/uvscom.c +++ b/sys/dev/usb/serial/uvscom.c @@ -268,6 +268,7 @@ DRIVER_MODULE(uvscom, uhub, uvscom_driver, uvscom_devclass, NULL, 0); MODULE_DEPEND(uvscom, ucom, 1, 1, 1); MODULE_DEPEND(uvscom, usb, 1, 1, 1); MODULE_VERSION(uvscom, UVSCOM_MODVER); +USB_PNP_HOST_INFO(uvscom_devs); static int uvscom_probe(device_t dev) diff --git a/sys/dev/usb/storage/umass.c b/sys/dev/usb/storage/umass.c index 0b769c4d4652..80b6da30a11f 100644 --- a/sys/dev/usb/storage/umass.c +++ b/sys/dev/usb/storage/umass.c @@ -706,20 +706,21 @@ static driver_t umass_driver = { .size = sizeof(struct umass_softc), }; -DRIVER_MODULE(umass, uhub, umass_driver, umass_devclass, NULL, 0); -MODULE_DEPEND(umass, usb, 1, 1, 1); -MODULE_DEPEND(umass, cam, 1, 1, 1); -MODULE_VERSION(umass, 1); - -/* - * USB device probe/attach/detach - */ - static const STRUCT_USB_HOST_ID __used umass_devs[] = { /* generic mass storage class */ {USB_IFACE_CLASS(UICLASS_MASS),}, }; +DRIVER_MODULE(umass, uhub, umass_driver, umass_devclass, NULL, 0); +MODULE_DEPEND(umass, usb, 1, 1, 1); +MODULE_DEPEND(umass, cam, 1, 1, 1); +MODULE_VERSION(umass, 1); +USB_PNP_HOST_INFO(umass_devs); + +/* + * USB device probe/attach/detach + */ + static uint16_t umass_get_proto(struct usb_interface *iface) { diff --git a/sys/dev/usb/storage/urio.c b/sys/dev/usb/storage/urio.c index 7f119819a52a..7de31324b775 100644 --- a/sys/dev/usb/storage/urio.c +++ b/sys/dev/usb/storage/urio.c @@ -195,16 +195,17 @@ static driver_t urio_driver = { .size = sizeof(struct urio_softc), }; -DRIVER_MODULE(urio, uhub, urio_driver, urio_devclass, NULL, 0); -MODULE_DEPEND(urio, usb, 1, 1, 1); -MODULE_VERSION(urio, 1); - static const STRUCT_USB_HOST_ID urio_devs[] = { {USB_VPI(USB_VENDOR_DIAMOND, USB_PRODUCT_DIAMOND_RIO500USB, 0)}, {USB_VPI(USB_VENDOR_DIAMOND2, USB_PRODUCT_DIAMOND2_RIO600USB, 0)}, {USB_VPI(USB_VENDOR_DIAMOND2, USB_PRODUCT_DIAMOND2_RIO800USB, 0)}, }; +DRIVER_MODULE(urio, uhub, urio_driver, urio_devclass, NULL, 0); +MODULE_DEPEND(urio, usb, 1, 1, 1); +MODULE_VERSION(urio, 1); +USB_PNP_HOST_INFO(urio_devs); + static int urio_probe(device_t dev) { diff --git a/sys/dev/usb/usb_hub.c b/sys/dev/usb/usb_hub.c index a54fa2e0c838..280e97a9aa51 100644 --- a/sys/dev/usb/usb_hub.c +++ b/sys/dev/usb/usb_hub.c @@ -1731,6 +1731,7 @@ uhub_child_pnpinfo_string(device_t parent, device_t child, if (iface && iface->idesc) { snprintf(buf, buflen, "vendor=0x%04x product=0x%04x " "devclass=0x%02x devsubclass=0x%02x " + "devproto=0x%02x " "sernum=\"%s\" " "release=0x%04x " "mode=%s " @@ -1740,6 +1741,7 @@ uhub_child_pnpinfo_string(device_t parent, device_t child, UGETW(res.udev->ddesc.idProduct), res.udev->ddesc.bDeviceClass, res.udev->ddesc.bDeviceSubClass, + res.udev->ddesc.bDeviceProtocol, usb_get_serial(res.udev), UGETW(res.udev->ddesc.bcdDevice), (res.udev->flags.usb_mode == USB_MODE_HOST) ? "host" : "device", diff --git a/sys/dev/usb/usbdi.h b/sys/dev/usb/usbdi.h index ecd5a8121860..74453abda76c 100644 --- a/sys/dev/usb/usbdi.h +++ b/sys/dev/usb/usbdi.h @@ -266,8 +266,38 @@ struct usb_config { */ struct usb_device_id { - /* Hook for driver specific information */ - unsigned long driver_info; + /* Select which fields to match against */ +#if _BYTE_ORDER == _LITTLE_ENDIAN + uint16_t + match_flag_vendor:1, + match_flag_product:1, + match_flag_dev_lo:1, + match_flag_dev_hi:1, + + match_flag_dev_class:1, + match_flag_dev_subclass:1, + match_flag_dev_protocol:1, + match_flag_int_class:1, + + match_flag_int_subclass:1, + match_flag_int_protocol:1, + match_flag_unused:6; +#else + uint16_t + match_flag_unused:6, + match_flag_int_protocol:1, + match_flag_int_subclass:1, + + match_flag_int_class:1, + match_flag_dev_protocol:1, + match_flag_dev_subclass:1, + match_flag_dev_class:1, + + match_flag_dev_hi:1, + match_flag_dev_lo:1, + match_flag_product:1, + match_flag_vendor:1; +#endif /* Used for product specific matches; the BCD range is inclusive */ uint16_t idVendor; @@ -285,21 +315,13 @@ struct usb_device_id { uint8_t bInterfaceSubClass; uint8_t bInterfaceProtocol; - /* Select which fields to match against */ - uint8_t match_flag_vendor:1; - uint8_t match_flag_product:1; - uint8_t match_flag_dev_lo:1; - uint8_t match_flag_dev_hi:1; - - uint8_t match_flag_dev_class:1; - uint8_t match_flag_dev_subclass:1; - uint8_t match_flag_dev_protocol:1; - uint8_t match_flag_int_class:1; - - uint8_t match_flag_int_subclass:1; - uint8_t match_flag_int_protocol:1; - uint8_t match_flag_unused:6; + /* Hook for driver specific information */ + unsigned long driver_info; +/* + * XXX can't currently participate in auto driver loading + * XXX making it a union with the match_flag_* above messes up init + */ #if USB_HAVE_COMPAT_LINUX /* which fields to match against */ uint16_t match_flags; @@ -316,6 +338,21 @@ struct usb_device_id { #endif } __aligned(32); +#define USB_STD_PNP_INFO "M16:mask;U16:vendor;U16:product;L16:product;G16:product;" \ + "U8:devclass;U8:devsubclass;U8:devprotocol;" \ + "U8:intclass;U8:intsubclass;U8:intprotocol;" +#define USB_STD_PNP_HOST_INFO USB_STD_PNP_INFO "T:mode=host;" +#define USB_STD_PNP_DEVICE_INFO USB_STD_PNP_INFO "T:mode=device;" +#define USB_PNP_HOST_INFO(table) \ + MODULE_PNP_INFO(USB_STD_PNP_HOST_INFO, usb, table, table, sizeof(table[0]), \ + sizeof(table) / sizeof(table[0])) +#define USB_PNP_DEVICE_INFO(table) \ + MODULE_PNP_INFO(USB_STD_PNP_DEVICE_INFO, usb, table, table, sizeof(table[0]), \ + sizeof(table) / sizeof(table[0])) +#define USB_PNP_DUAL_INFO(table) \ + MODULE_PNP_INFO(USB_STD_PNP_INFO, usb, table, table, sizeof(table[0]), \ + sizeof(table) / sizeof(table[0])) + /* check that the size of the structure above is correct */ extern char usb_device_id_assert[(sizeof(struct usb_device_id) == 32) ? 1 : -1]; diff --git a/sys/dev/usb/wlan/if_rsu.c b/sys/dev/usb/wlan/if_rsu.c index 6558c93571ea..ea89bff79e53 100644 --- a/sys/dev/usb/wlan/if_rsu.c +++ b/sys/dev/usb/wlan/if_rsu.c @@ -249,6 +249,7 @@ MODULE_DEPEND(rsu, wlan, 1, 1, 1); MODULE_DEPEND(rsu, usb, 1, 1, 1); MODULE_DEPEND(rsu, firmware, 1, 1, 1); MODULE_VERSION(rsu, 1); +USB_PNP_HOST_INFO(rsu_devs); static uint8_t rsu_wme_ac_xfer_map[4] = { [WME_AC_BE] = RSU_BULK_TX_BE_BK, diff --git a/sys/dev/usb/wlan/if_rum.c b/sys/dev/usb/wlan/if_rum.c index 9d2203da5494..02788b1afa42 100644 --- a/sys/dev/usb/wlan/if_rum.c +++ b/sys/dev/usb/wlan/if_rum.c @@ -3016,3 +3016,4 @@ DRIVER_MODULE(rum, uhub, rum_driver, rum_devclass, NULL, 0); MODULE_DEPEND(rum, wlan, 1, 1, 1); MODULE_DEPEND(rum, usb, 1, 1, 1); MODULE_VERSION(rum, 1); +USB_PNP_HOST_INFO(rum_devs); diff --git a/sys/dev/usb/wlan/if_run.c b/sys/dev/usb/wlan/if_run.c index bb52a09322cb..aa853c6e4634 100644 --- a/sys/dev/usb/wlan/if_run.c +++ b/sys/dev/usb/wlan/if_run.c @@ -6236,3 +6236,4 @@ MODULE_DEPEND(run, wlan, 1, 1, 1); MODULE_DEPEND(run, usb, 1, 1, 1); MODULE_DEPEND(run, firmware, 1, 1, 1); MODULE_VERSION(run, 1); +USB_PNP_HOST_INFO(run_devs); diff --git a/sys/dev/usb/wlan/if_uath.c b/sys/dev/usb/wlan/if_uath.c index ec5b54caf46c..747d49dc2efc 100644 --- a/sys/dev/usb/wlan/if_uath.c +++ b/sys/dev/usb/wlan/if_uath.c @@ -2794,3 +2794,4 @@ DRIVER_MODULE(uath, uhub, uath_driver, uath_devclass, NULL, 0); MODULE_DEPEND(uath, wlan, 1, 1, 1); MODULE_DEPEND(uath, usb, 1, 1, 1); MODULE_VERSION(uath, 1); +USB_PNP_HOST_INFO(uath_devs); diff --git a/sys/dev/usb/wlan/if_upgt.c b/sys/dev/usb/wlan/if_upgt.c index 2689ae0fb7f3..8030c6f9391b 100644 --- a/sys/dev/usb/wlan/if_upgt.c +++ b/sys/dev/usb/wlan/if_upgt.c @@ -2347,3 +2347,4 @@ MODULE_VERSION(if_upgt, 1); MODULE_DEPEND(if_upgt, usb, 1, 1, 1); MODULE_DEPEND(if_upgt, wlan, 1, 1, 1); MODULE_DEPEND(if_upgt, upgtfw_fw, 1, 1, 1); +USB_PNP_HOST_INFO(upgt_devs); diff --git a/sys/dev/usb/wlan/if_ural.c b/sys/dev/usb/wlan/if_ural.c index 3fb03bdf39d1..617421575b3c 100644 --- a/sys/dev/usb/wlan/if_ural.c +++ b/sys/dev/usb/wlan/if_ural.c @@ -401,6 +401,7 @@ DRIVER_MODULE(ural, uhub, ural_driver, ural_devclass, NULL, 0); MODULE_DEPEND(ural, usb, 1, 1, 1); MODULE_DEPEND(ural, wlan, 1, 1, 1); MODULE_VERSION(ural, 1); +USB_PNP_HOST_INFO(ural_devs); static int ural_match(device_t self) diff --git a/sys/dev/usb/wlan/if_urtw.c b/sys/dev/usb/wlan/if_urtw.c index a9aac3a02f20..3f4e4c7826a3 100644 --- a/sys/dev/usb/wlan/if_urtw.c +++ b/sys/dev/usb/wlan/if_urtw.c @@ -4382,3 +4382,4 @@ DRIVER_MODULE(urtw, uhub, urtw_driver, urtw_devclass, NULL, 0); MODULE_DEPEND(urtw, wlan, 1, 1, 1); MODULE_DEPEND(urtw, usb, 1, 1, 1); MODULE_VERSION(urtw, 1); +USB_PNP_HOST_INFO(urtw_devs); diff --git a/sys/dev/usb/wlan/if_urtwn.c b/sys/dev/usb/wlan/if_urtwn.c index 59d8c136e7d6..3223008f1415 100644 --- a/sys/dev/usb/wlan/if_urtwn.c +++ b/sys/dev/usb/wlan/if_urtwn.c @@ -4156,3 +4156,4 @@ MODULE_DEPEND(urtwn, usb, 1, 1, 1); MODULE_DEPEND(urtwn, wlan, 1, 1, 1); MODULE_DEPEND(urtwn, firmware, 1, 1, 1); MODULE_VERSION(urtwn, 1); +USB_PNP_HOST_INFO(urtwn_devs); diff --git a/sys/dev/usb/wlan/if_zyd.c b/sys/dev/usb/wlan/if_zyd.c index dc7a87f2dad6..d23f306dc373 100644 --- a/sys/dev/usb/wlan/if_zyd.c +++ b/sys/dev/usb/wlan/if_zyd.c @@ -2893,3 +2893,4 @@ DRIVER_MODULE(zyd, uhub, zyd_driver, zyd_devclass, NULL, 0); MODULE_DEPEND(zyd, usb, 1, 1, 1); MODULE_DEPEND(zyd, wlan, 1, 1, 1); MODULE_VERSION(zyd, 1); +USB_PNP_HOST_INFO(zyd_devs); diff --git a/sys/netgraph/bluetooth/drivers/ubt/ng_ubt.c b/sys/netgraph/bluetooth/drivers/ubt/ng_ubt.c index f34c70817188..4121ebc07f19 100644 --- a/sys/netgraph/bluetooth/drivers/ubt/ng_ubt.c +++ b/sys/netgraph/bluetooth/drivers/ubt/ng_ubt.c @@ -1872,4 +1872,4 @@ MODULE_VERSION(ng_ubt, NG_BLUETOOTH_VERSION); MODULE_DEPEND(ng_ubt, netgraph, NG_ABI_VERSION, NG_ABI_VERSION, NG_ABI_VERSION); MODULE_DEPEND(ng_ubt, ng_hci, NG_BLUETOOTH_VERSION, NG_BLUETOOTH_VERSION, NG_BLUETOOTH_VERSION); MODULE_DEPEND(ng_ubt, usb, 1, 1, 1); - +USB_PNP_HOST_INFO(ubt_devs); diff --git a/sys/netgraph/bluetooth/drivers/ubtbcmfw/ubtbcmfw.c b/sys/netgraph/bluetooth/drivers/ubtbcmfw/ubtbcmfw.c index da00e05c9b35..d5e55eac1f17 100644 --- a/sys/netgraph/bluetooth/drivers/ubtbcmfw/ubtbcmfw.c +++ b/sys/netgraph/bluetooth/drivers/ubtbcmfw/ubtbcmfw.c @@ -170,8 +170,15 @@ static driver_t ubtbcmfw_driver = .size = sizeof(struct ubtbcmfw_softc), }; +static const STRUCT_USB_HOST_ID ubtbcmfw_devs[] = { +/* Broadcom BCM2033 devices only */ + { USB_VPI(USB_VENDOR_BROADCOM, USB_PRODUCT_BROADCOM_BCM2033, 0) }, +}; + + DRIVER_MODULE(ubtbcmfw, uhub, ubtbcmfw_driver, ubtbcmfw_devclass, NULL, 0); MODULE_DEPEND(ubtbcmfw, usb, 1, 1, 1); +USB_PNP_HOST_INFO(ubtbcmfw_devs); /* * Probe for a USB Bluetooth device @@ -180,11 +187,6 @@ MODULE_DEPEND(ubtbcmfw, usb, 1, 1, 1); static int ubtbcmfw_probe(device_t dev) { - static const STRUCT_USB_HOST_ID devs[] = { - /* Broadcom BCM2033 devices only */ - { USB_VPI(USB_VENDOR_BROADCOM, USB_PRODUCT_BROADCOM_BCM2033, 0) }, - }; - struct usb_attach_arg *uaa = device_get_ivars(dev); if (uaa->usb_mode != USB_MODE_HOST) @@ -193,7 +195,7 @@ ubtbcmfw_probe(device_t dev) if (uaa->info.bIfaceIndex != 0) return (ENXIO); - return (usbd_lookup_id_by_uaa(devs, sizeof(devs), uaa)); + return (usbd_lookup_id_by_uaa(ubtbcmfw_devs, sizeof(ubtbcmfw_devs), uaa)); } /* ubtbcmfw_probe */ /*