diff options
author | wpaul <wpaul@FreeBSD.org> | 2005-02-24 22:54:15 +0000 |
---|---|---|
committer | wpaul <wpaul@FreeBSD.org> | 2005-02-24 22:54:15 +0000 |
commit | 9ad2b03bb585fe6c3f96474adffe9d61d3c7e3de (patch) | |
tree | 373355eb7668d69f56b7283afd0a8cab49387fd1 /sys/dev/if_ndis | |
parent | b5521d6df746ce6e4a69360def49ec22058017c9 (diff) | |
download | FreeBSD-src-9ad2b03bb585fe6c3f96474adffe9d61d3c7e3de.zip FreeBSD-src-9ad2b03bb585fe6c3f96474adffe9d61d3c7e3de.tar.gz |
Apparently, the probe routine in if_ndis_usb.c can be called twice
for a given device in some circumstances, so move the PDO creation
to the attach routine so we don't end up creating two PDOs.
Also, when we skip the call to ndis_convert_res() in if_ndis.c:ndis_attach(),
initialize sc->ndis_block->nmb_rlist to NULL. We don't explicitly zero
the miniport block, so this will make sure ndis_unload_driver() does
the right thing.
Diffstat (limited to 'sys/dev/if_ndis')
-rw-r--r-- | sys/dev/if_ndis/if_ndis.c | 2 | ||||
-rw-r--r-- | sys/dev/if_ndis/if_ndis_usb.c | 16 |
2 files changed, 9 insertions, 9 deletions
diff --git a/sys/dev/if_ndis/if_ndis.c b/sys/dev/if_ndis/if_ndis.c index 2207e18..fefe5fa 100644 --- a/sys/dev/if_ndis/if_ndis.c +++ b/sys/dev/if_ndis/if_ndis.c @@ -508,6 +508,8 @@ ndis_attach(dev) /* Do resource conversion. */ if (sc->ndis_iftype == PCMCIABus || sc->ndis_iftype == PCIBus) ndis_convert_res(sc); + else + sc->ndis_block->nmb_rlist = NULL; /* Install our RX and TX interrupt handlers. */ sc->ndis_block->nmb_senddone_func = ndis_txeof_wrap; diff --git a/sys/dev/if_ndis/if_ndis_usb.c b/sys/dev/if_ndis/if_ndis_usb.c index 942ae1a..03d60b1 100644 --- a/sys/dev/if_ndis/if_ndis_usb.c +++ b/sys/dev/if_ndis/if_ndis_usb.c @@ -129,18 +129,10 @@ DRIVER_MODULE(ndis, uhub, ndis_driver, ndis_devclass, ndisdrv_modevent, 0); USB_MATCH(ndisusb) { USB_MATCH_START(ndisusb, uaa); - driver_object *drv; - drv = windrv_lookup(NULL, "USB Bus"); - if (drv == NULL) + if (windrv_lookup(NULL, "USB Bus") == NULL) return(UMATCH_NONE); - if (0) { - /* Create PDO for this device instance */ - windrv_create_pdo(drv, self); - return(0); - } - if (uaa->iface != NULL) return(UMATCH_NONE); @@ -151,11 +143,17 @@ USB_ATTACH(ndisusb) { USB_ATTACH_START(ndisusb, dummy, uaa); struct ndis_softc *sc; + driver_object *drv; sc = (struct ndis_softc *)dummy; sc->ndis_dev = self; + /* Create PDO for this device instance */ + + drv = windrv_lookup(NULL, "USB Bus"); + windrv_create_pdo(drv, self); + if (ndis_attach(self) != 0) USB_ATTACH_ERROR_RETURN; |