summaryrefslogtreecommitdiffstats
path: root/sys/dev/if_ndis
diff options
context:
space:
mode:
authorwpaul <wpaul@FreeBSD.org>2005-02-24 22:54:15 +0000
committerwpaul <wpaul@FreeBSD.org>2005-02-24 22:54:15 +0000
commit9ad2b03bb585fe6c3f96474adffe9d61d3c7e3de (patch)
tree373355eb7668d69f56b7283afd0a8cab49387fd1 /sys/dev/if_ndis
parentb5521d6df746ce6e4a69360def49ec22058017c9 (diff)
downloadFreeBSD-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.c2
-rw-r--r--sys/dev/if_ndis/if_ndis_usb.c16
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;
OpenPOWER on IntegriCloud