mirror of
https://github.com/freebsd/freebsd-src.git
synced 2024-12-05 03:39:02 +00:00
More fixes for multibus drivers. When calling out to the match
function in if_ndis_pci.c and if_ndis_pccard.c, provide the bustype too so the stubs can ignore devlists that don't concern them.
This commit is contained in:
parent
6169e4d097
commit
239a676456
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=146016
@ -204,7 +204,7 @@ windrv_match(matchfunc, ctx)
|
||||
STAILQ_FOREACH(d, &drvdb_head, link) {
|
||||
if (d->windrv_devlist == NULL)
|
||||
continue;
|
||||
match = matchfunc(d->windrv_devlist, ctx);
|
||||
match = matchfunc(d->windrv_bustype, d->windrv_devlist, ctx);
|
||||
if (match == TRUE) {
|
||||
mtx_unlock(&drvdb_mtx);
|
||||
return(d);
|
||||
|
@ -1225,7 +1225,7 @@ struct drvdb_ent {
|
||||
|
||||
extern image_patch_table ntoskrnl_functbl[];
|
||||
typedef void (*funcptr)(void);
|
||||
typedef int (*matchfuncptr)(void *, void *);
|
||||
typedef int (*matchfuncptr)(interface_type, void *, void *);
|
||||
|
||||
__BEGIN_DECLS
|
||||
extern int windrv_libinit(void);
|
||||
|
@ -69,7 +69,8 @@ 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);
|
||||
static int ndis_devcompare (struct ndis_pccard_type *, device_t);
|
||||
static int ndis_devcompare (interface_type,
|
||||
struct ndis_pccard_type *, device_t);
|
||||
extern int ndisdrv_modevent (module_t, int, void *);
|
||||
extern int ndis_attach (device_t);
|
||||
extern int ndis_shutdown (device_t);
|
||||
@ -111,13 +112,17 @@ static devclass_t ndis_devclass;
|
||||
DRIVER_MODULE(ndis, pccard, ndis_driver, ndis_devclass, ndisdrv_modevent, 0);
|
||||
|
||||
static int
|
||||
ndis_devcompare(t, dev)
|
||||
ndis_devcompare(bustype, t, dev)
|
||||
interface_type bustype;
|
||||
struct ndis_pccard_type *t;
|
||||
device_t dev;
|
||||
{
|
||||
const char *prodstr, *vendstr;
|
||||
int error;
|
||||
|
||||
if (bustype != PCMCIABus)
|
||||
return(FALSE);
|
||||
|
||||
error = pccard_get_product_str(dev, &prodstr);
|
||||
if (error)
|
||||
return(FALSE);
|
||||
|
@ -68,7 +68,8 @@ static int ndis_probe_pci (device_t);
|
||||
static int ndis_attach_pci (device_t);
|
||||
static struct resource_list *ndis_get_resource_list
|
||||
(device_t, device_t);
|
||||
static int ndis_devcompare (struct ndis_pci_type *, device_t);
|
||||
static int ndis_devcompare (interface_type,
|
||||
struct ndis_pci_type *, device_t);
|
||||
extern int ndisdrv_modevent (module_t, int, void *);
|
||||
extern int ndis_attach (device_t);
|
||||
extern int ndis_shutdown (device_t);
|
||||
@ -103,10 +104,14 @@ DRIVER_MODULE(ndis, pci, ndis_driver, ndis_devclass, ndisdrv_modevent, 0);
|
||||
DRIVER_MODULE(ndis, cardbus, ndis_driver, ndis_devclass, ndisdrv_modevent, 0);
|
||||
|
||||
static int
|
||||
ndis_devcompare(t, dev)
|
||||
ndis_devcompare(bustype, t, dev)
|
||||
interface_type bustype;
|
||||
struct ndis_pci_type *t;
|
||||
device_t dev;
|
||||
{
|
||||
if (bustype != PCIBus)
|
||||
return(FALSE);
|
||||
|
||||
while(t->ndis_name != NULL) {
|
||||
if ((pci_get_vendor(dev) == t->ndis_vid) &&
|
||||
(pci_get_device(dev) == t->ndis_did) &&
|
||||
|
Loading…
Reference in New Issue
Block a user