diff options
Diffstat (limited to 'sys/dev/if_ndis/if_ndis_pccard.c')
-rw-r--r-- | sys/dev/if_ndis/if_ndis_pccard.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/sys/dev/if_ndis/if_ndis_pccard.c b/sys/dev/if_ndis/if_ndis_pccard.c index 0786b01..c3c42eb 100644 --- a/sys/dev/if_ndis/if_ndis_pccard.c +++ b/sys/dev/if_ndis/if_ndis_pccard.c @@ -87,13 +87,14 @@ static int ndis_probe_pccard (device_t); static int ndis_attach_pccard (device_t); static struct resource_list *ndis_get_resource_list (device_t, device_t); +extern int ndisdrv_modevent (module_t, int, void *); extern int ndis_attach (device_t); extern int ndis_shutdown (device_t); extern int ndis_detach (device_t); extern int ndis_suspend (device_t); extern int ndis_resume (device_t); -extern struct mtx_pool *ndis_mtxpool; +extern unsigned char drv_data[]; static device_method_t ndis_methods[] = { /* Device interface */ @@ -130,10 +131,11 @@ static devclass_t ndis_devclass; #ifdef NDIS_MODNAME #define NDIS_MODNAME_OVERRIDE_PCMCIA(x) \ - DRIVER_MODULE(x, pccard, ndis_driver, ndis_devclass, 0, 0) + DRIVER_MODULE(x, pccard, ndis_driver, ndis_devclass, \ + ndisdrv_modevent, 0) NDIS_MODNAME_OVERRIDE_PCMCIA(NDIS_MODNAME); #else -DRIVER_MODULE(ndis, pccard, ndis_driver, ndis_devclass, 0, 0); +DRIVER_MODULE(ndis, pccard, ndis_driver, ndis_devclass, ndisdrv_modevent, 0); #endif /* @@ -147,6 +149,13 @@ ndis_probe_pccard(dev) struct ndis_pccard_type *t; const char *prodstr, *vendstr; int error; + driver_object *drv; + vm_offset_t img; + + img = (vm_offset_t)drv_data; + drv = windrv_lookup(img); + if (drv == NULL) + return(ENXIO); t = ndis_devs; @@ -161,6 +170,8 @@ ndis_probe_pccard(dev) if (ndis_strcasecmp(vendstr, t->ndis_vid) == 0 && ndis_strcasecmp(prodstr, t->ndis_did) == 0) { device_set_desc(dev, t->ndis_name); + /* Create PDO for this device instance */ + windrv_create_pdo(drv, dev); return(0); } t++; |