summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Gray <jsg@cvs.openbsd.org>2005-01-19 09:36:19 +0000
committerJonathan Gray <jsg@cvs.openbsd.org>2005-01-19 09:36:19 +0000
commit5cf9352dd9d3a0cead5532372b4e3f6ed4098081 (patch)
tree3118c2aca6141a3f010ddeaf080b6909f0cb3875
parenta8924a52172bc7bafb12f501df3b1af32a26135b (diff)
Use the RF chipset type rather than the hardware version when determining
whether to use host or MAC controlled RF I/O. From part of NetBSD rev 1.42
-rw-r--r--sys/dev/ic/rtw.c41
-rw-r--r--sys/dev/ic/rtwvar.h4
2 files changed, 26 insertions, 19 deletions
diff --git a/sys/dev/ic/rtw.c b/sys/dev/ic/rtw.c
index 6dcebca76a5..ec0adeeb776 100644
--- a/sys/dev/ic/rtw.c
+++ b/sys/dev/ic/rtw.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: rtw.c,v 1.6 2005/01/10 06:49:19 jsg Exp $ */
+/* $OpenBSD: rtw.c,v 1.7 2005/01/19 09:36:18 jsg Exp $ */
/* $NetBSD: rtw.c,v 1.29 2004/12/27 19:49:16 dyoung Exp $ */
/*-
* Copyright (c) 2004, 2005 David Young. All rights reserved.
@@ -178,8 +178,7 @@ struct mbuf * rtw_dmamap_load_txbuf(bus_dma_tag_t, bus_dmamap_t, struct mbuf *,
int rtw_newstate(struct ieee80211com *, enum ieee80211_state, int);
int rtw_media_change(struct ifnet *);
int rtw_txctl_blk_setup_all(struct rtw_softc *);
-struct rtw_rf * rtw_rf_attach(struct rtw_softc *, enum rtw_rfchipid,
- rtw_rf_write_t, int);
+struct rtw_rf * rtw_rf_attach(struct rtw_softc *, enum rtw_rfchipid, int);
u_int8_t rtw_check_phydelay(struct rtw_regs *, u_int32_t);
#ifdef RTW_DEBUG
@@ -3275,12 +3274,25 @@ rtw_txdesc_blk_setup_all(struct rtw_softc *sc)
}
struct rtw_rf *
-rtw_rf_attach(struct rtw_softc *sc, enum rtw_rfchipid rfchipid,
- rtw_rf_write_t rf_write, int digphy)
+rtw_rf_attach(struct rtw_softc *sc, enum rtw_rfchipid rfchipid, int digphy)
{
+ rtw_rf_write_t rf_write;
struct rtw_rf *rf;
switch (rfchipid) {
+ default:
+ rf_write = rtw_rf_hostwrite;
+ break;
+ case RTW_RFCHIPID_INTERSIL:
+ case RTW_RFCHIPID_PHILIPS:
+ case RTW_RFCHIPID_GCT: /* XXX a guess */
+ case RTW_RFCHIPID_RFMD:
+ rf_write = (rtw_host_rfio) ? rtw_rf_hostwrite : rtw_rf_macwrite;
+ break;
+
+ }
+
+ switch (rfchipid) {
case RTW_RFCHIPID_MAXIM:
rf = rtw_max2820_create(&sc->sc_regs, rf_write, 0);
sc->sc_pwrstate_cb = rtw_maxim_pwrstate;
@@ -3331,9 +3343,8 @@ rtw_check_phydelay(struct rtw_regs *regs, u_int32_t rcr0)
void
rtw_attach(struct rtw_softc *sc)
{
- rtw_rf_write_t rf_write;
struct rtw_txctl_blk *stc;
- int pri, rc, vers;
+ int pri, rc;
#if 0
CASSERT(RTW_DESC_ALIGNMENT % sizeof(struct rtw_txdesc) == 0,
@@ -3352,22 +3363,16 @@ rtw_attach(struct rtw_softc *sc)
switch (RTW_READ(&sc->sc_regs, RTW_TCR) & RTW_TCR_HWVERID_MASK) {
case RTW_TCR_HWVERID_F:
- vers = 'F';
- rf_write = rtw_rf_macwrite;
+ sc->sc_hwverid = 'F';
break;
case RTW_TCR_HWVERID_D:
- vers = 'D';
- if (rtw_host_rfio)
- rf_write = rtw_rf_hostwrite;
- else
- rf_write = rtw_rf_macwrite;
+ sc->sc_hwverid = 'D';
break;
default:
- vers = '?';
- rf_write = rtw_rf_macwrite;
+ sc->sc_hwverid = '?';
break;
}
- printf("%s: ver %c ", sc->sc_dev.dv_xname, vers);
+ printf("%s: ver %c ", sc->sc_dev.dv_xname, sc->sc_hwverid);
rc = bus_dmamem_alloc(sc->sc_dmat, sizeof(struct rtw_descs),
RTW_DESC_ALIGNMENT, 0, &sc->sc_desc_segs, 1, &sc->sc_desc_nsegs,
@@ -3477,7 +3482,7 @@ rtw_attach(struct rtw_softc *sc)
NEXT_ATTACH_STATE(sc, FINISH_PARSE_SROM);
- sc->sc_rf = rtw_rf_attach(sc, sc->sc_rfchipid, rf_write,
+ sc->sc_rf = rtw_rf_attach(sc, sc->sc_rfchipid,
sc->sc_flags & RTW_F_DIGPHY);
if (sc->sc_rf == NULL) {
diff --git a/sys/dev/ic/rtwvar.h b/sys/dev/ic/rtwvar.h
index fb91518560a..9693d9592c6 100644
--- a/sys/dev/ic/rtwvar.h
+++ b/sys/dev/ic/rtwvar.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: rtwvar.h,v 1.1 2004/12/29 01:02:31 jsg Exp $ */
+/* $OpenBSD: rtwvar.h,v 1.2 2005/01/19 09:36:18 jsg Exp $ */
/* $NetBSD: rtwvar.h,v 1.10 2004/12/26 22:37:57 mycroft Exp $ */
/*-
* Copyright (c) 2004, 2005 David Young. All rights reserved.
@@ -438,6 +438,8 @@ struct rtw_softc {
u_int8_t pad[64];
} sc_txtapu;
enum rtw_access sc_access;
+
+ int sc_hwverid;
};
#define sc_if sc_ic.ic_if