From 6004db96ae3b699a7416aec7a2c38d386412a3a1 Mon Sep 17 00:00:00 2001 From: Paul Saab Date: Tue, 12 Sep 2000 11:03:12 +0000 Subject: Move the detection of Linksys PCMCIA cards from attach to probe. This should solve the problems people were seeing with this driver. Reported by: phk & others. --- sys/dev/ed/if_ed.c | 5 +++-- sys/dev/ed/if_ed_pccard.c | 4 +++- sys/dev/ed/if_edvar.h | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) (limited to 'sys/dev') diff --git a/sys/dev/ed/if_ed.c b/sys/dev/ed/if_ed.c index 4bff9f51b725..0c67a94002b5 100644 --- a/sys/dev/ed/if_ed.c +++ b/sys/dev/ed/if_ed.c @@ -912,9 +912,10 @@ ed_probe_3Com(dev, port_rid, flags) * conditionally. */ int -ed_get_Linksys(sc) - struct ed_softc *sc; +ed_get_Linksys(dev) + device_t dev; { + struct ed_softc *sc = device_get_softc(dev); u_char sum; int i; diff --git a/sys/dev/ed/if_ed_pccard.c b/sys/dev/ed/if_ed_pccard.c index 168170b28d49..76d318fd0d24 100644 --- a/sys/dev/ed/if_ed_pccard.c +++ b/sys/dev/ed/if_ed_pccard.c @@ -63,6 +63,7 @@ static int ed_pccard_detach(device_t); static void ax88190_geteprom(struct ed_softc *); static int ed_pccard_memwrite(device_t dev, off_t offset, u_char byte); static int ed_pccard_memread(device_t dev, off_t offset, u_char *buf, int size); +static int linksys; static device_method_t ed_pccard_methods[] = { /* Device interface */ @@ -170,6 +171,7 @@ ed_pccard_probe(device_t dev) ed_release_resources(dev); end: + linksys = ed_get_Linksys(dev); if (error == 0) error = ed_alloc_irq(dev, 0, 0); @@ -201,7 +203,7 @@ ed_pccard_attach(device_t dev) return (error); } - if (ed_get_Linksys(sc) == 0) { + if (linksys == 0) { pccard_get_ether(dev, ether_addr); for (i = 0, sum = 0; i < ETHER_ADDR_LEN; i++) sum |= ether_addr[i]; diff --git a/sys/dev/ed/if_edvar.h b/sys/dev/ed/if_edvar.h index d78f4427f6ec..535146e1e849 100644 --- a/sys/dev/ed/if_edvar.h +++ b/sys/dev/ed/if_edvar.h @@ -197,7 +197,7 @@ int ed_probe_Novell __P((device_t, int, int)); int ed_probe_Novell_generic __P((device_t, int)); int ed_probe_HP_pclanp __P((device_t, int, int)); -int ed_get_Linksys __P((struct ed_softc *)); +int ed_get_Linksys __P((device_t)); int ed_attach __P((struct ed_softc *, int, int)); void ed_stop __P((struct ed_softc *)); -- cgit v1.3