Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/dev/usb Make zyd(4) use config_mountroot(9) to complete ...
details: https://anonhg.NetBSD.org/src/rev/7de8a32c8957
branches: trunk
changeset: 756037:7de8a32c8957
user: tsutsui <tsutsui%NetBSD.org@localhost>
date: Sun Jul 04 15:38:27 2010 +0000
description:
Make zyd(4) use config_mountroot(9) to complete device initialization
(which requires firmload(9)) right after mountroot.
Now it's attached on boot as following:
---
uhub4 at usb4: vendor 0x1033 EHCI root hub, class 9/0, rev 2.00/1.00, addr 1
uhub4: 5 ports with 5 removable, self powered
:
zyd0 at uhub4 port 4
zyd0: PCI PCI GW-US54GXS, rev 2.00/48.10, addr 3
:
boot device: wd0
root on wd0a dumps on wd0b
root file system type: ffs
zyd0: HMAC ZD1211B, FW 47.25, RF AL2230, PA 0, address 00:22:cf:xx:xx:xx
zyd0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
zyd0: 11g rates: 1Mbps 2Mbps 5.5Mbps 11Mbps 6Mbps 9Mbps 12Mbps 18Mbps 24Mbps 36Mbps 48Mbps 54Mbps
:
---
Should close PR kern/43125, no particular objections in that PR.
diffstat:
sys/dev/usb/if_zyd.c | 40 +++++++++++++++-------------------------
1 files changed, 15 insertions(+), 25 deletions(-)
diffs (136 lines):
diff -r d64649a5063a -r 7de8a32c8957 sys/dev/usb/if_zyd.c
--- a/sys/dev/usb/if_zyd.c Sun Jul 04 15:31:04 2010 +0000
+++ b/sys/dev/usb/if_zyd.c Sun Jul 04 15:38:27 2010 +0000
@@ -1,5 +1,5 @@
/* $OpenBSD: if_zyd.c,v 1.52 2007/02/11 00:08:04 jsg Exp $ */
-/* $NetBSD: if_zyd.c,v 1.25 2010/04/05 07:21:49 joerg Exp $ */
+/* $NetBSD: if_zyd.c,v 1.26 2010/07/04 15:38:27 tsutsui Exp $ */
/*-
* Copyright (c) 2006 by Damien Bergamini <damien.bergamini%free.fr@localhost>
@@ -22,7 +22,7 @@
* ZyDAS ZD1211/ZD1211B USB WLAN driver.
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_zyd.c,v 1.25 2010/04/05 07:21:49 joerg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_zyd.c,v 1.26 2010/07/04 15:38:27 tsutsui Exp $");
#include <sys/param.h>
@@ -156,7 +156,7 @@
CFATTACH_DECL_NEW(zyd, sizeof(struct zyd_softc), zyd_match,
zyd_attach, zyd_detach, zyd_activate);
-Static int zyd_attachhook(void *);
+Static void zyd_attachhook(device_t);
Static int zyd_complete_attach(struct zyd_softc *);
Static int zyd_open_pipes(struct zyd_softc *);
Static void zyd_close_pipes(struct zyd_softc *);
@@ -245,10 +245,10 @@
UMATCH_VENDOR_PRODUCT : UMATCH_NONE;
}
-Static int
-zyd_attachhook(void *xsc)
+Static void
+zyd_attachhook(device_t self)
{
- struct zyd_softc *sc = xsc;
+ struct zyd_softc *sc = device_private(self);
firmware_handle_t fwh;
const char *fwname;
u_char *fw;
@@ -259,7 +259,7 @@
if ((error = firmware_open("zyd", fwname, &fwh)) != 0) {
aprint_error_dev(sc->sc_dev,
"failed to open firmware %s (error=%d)\n", fwname, error);
- return error;
+ return;
}
size = firmware_get_size(fwh);
fw = firmware_malloc(size);
@@ -267,7 +267,7 @@
aprint_error_dev(sc->sc_dev,
"failed to allocate firmware memory\n");
firmware_close(fwh);
- return ENOMEM;
+ return;
}
error = firmware_read(fwh, 0, fw, size);
firmware_close(fwh);
@@ -275,7 +275,7 @@
aprint_error_dev(sc->sc_dev,
"failed to read firmware (error %d)\n", error);
firmware_free(fw, 0);
- return error;
+ return;
}
error = zyd_loadfirmware(sc, fw, size);
@@ -283,7 +283,7 @@
aprint_error_dev(sc->sc_dev,
"could not load firmware (error=%d)\n", error);
firmware_free(fw, 0);
- return ENXIO;
+ return;
}
firmware_free(fw, 0);
@@ -292,7 +292,7 @@
/* complete the attach process */
if ((error = zyd_complete_attach(sc)) == 0)
sc->attached = 1;
- return error;
+ return;
}
void
@@ -334,13 +334,10 @@
IFQ_SET_READY(&ifp->if_snd);
memcpy(ifp->if_xname, device_xname(sc->sc_dev), IFNAMSIZ);
- if_attach(ifp);
- /* XXXX: alloc temporarily until the layer2 can be configured. */
- if_alloc_sadl(ifp);
-
SIMPLEQ_INIT(&sc->sc_rqh);
- return;
+ /* defer configrations after file system is ready to load firmware */
+ config_mountroot(self, zyd_attachhook);
}
Static int
@@ -424,7 +421,7 @@
IEEE80211_CHAN_DYN | IEEE80211_CHAN_2GHZ;
}
- if_free_sadl(ifp);
+ if_attach(ifp);
ieee80211_ifattach(ic);
ic->ic_node_alloc = zyd_node_alloc;
ic->ic_newassoc = zyd_newassoc;
@@ -461,11 +458,8 @@
struct ifnet *ifp = &sc->sc_if;
int s;
- if (!sc->attached) {
- if_free_sadl(ifp);
- if_detach(ifp);
+ if (!sc->attached)
return 0;
- }
s = splusb();
@@ -2450,10 +2444,6 @@
struct ieee80211com *ic = &sc->sc_ic;
int i, error;
- if ((sc->sc_flags & ZD1211_FWLOADED) == 0)
- if ((error = zyd_attachhook(sc)) != 0)
- return error;
-
zyd_stop(ifp, 0);
IEEE80211_ADDR_COPY(ic->ic_myaddr, CLLADDR(ifp->if_sadl));
Home |
Main Index |
Thread Index |
Old Index