diff options
author | Reyk Floeter <reyk@cvs.openbsd.org> | 2005-09-19 10:27:09 +0000 |
---|---|---|
committer | Reyk Floeter <reyk@cvs.openbsd.org> | 2005-09-19 10:27:09 +0000 |
commit | 08c5ab5fa59b674aacdcb6239b96079cf9f6aeee (patch) | |
tree | 59e3a0770726a0b00291a421a1d8ba641eac0e14 /sys/dev/ic | |
parent | 06a664f84143271471484589db0961e075a13f18 (diff) |
don't attach unsupported radio chipsets
based on a diff by jsg@
Diffstat (limited to 'sys/dev/ic')
-rw-r--r-- | sys/dev/ic/ar5210.c | 3 | ||||
-rw-r--r-- | sys/dev/ic/ar5211.c | 10 | ||||
-rw-r--r-- | sys/dev/ic/ar5212.c | 13 | ||||
-rw-r--r-- | sys/dev/ic/ar5xxx.c | 4 | ||||
-rw-r--r-- | sys/dev/ic/ar5xxx.h | 35 | ||||
-rw-r--r-- | sys/dev/ic/ath.c | 55 |
6 files changed, 56 insertions, 64 deletions
diff --git a/sys/dev/ic/ar5210.c b/sys/dev/ic/ar5210.c index bdb057b56b8..8e735f09404 100644 --- a/sys/dev/ic/ar5210.c +++ b/sys/dev/ic/ar5210.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ar5210.c,v 1.29 2005/09/10 14:36:46 jsg Exp $ */ +/* $OpenBSD: ar5210.c,v 1.30 2005/09/19 10:27:08 reyk Exp $ */ /* * Copyright (c) 2004, 2005 Reyk Floeter <reyk@vantronix.net> @@ -190,6 +190,7 @@ ar5k_ar5210_attach(u_int16_t device, void *sc, bus_space_tag_t st, /* Get MAC, PHY and RADIO revisions */ srev = AR5K_REG_READ(AR5K_AR5210_SREV); + hal->ah_mac_srev = srev; hal->ah_mac_version = AR5K_REG_MS(srev, AR5K_AR5210_SREV_VER); hal->ah_mac_revision = AR5K_REG_MS(srev, AR5K_AR5210_SREV_REV); hal->ah_phy_revision = AR5K_REG_READ(AR5K_AR5210_PHY_CHIP_ID) & diff --git a/sys/dev/ic/ar5211.c b/sys/dev/ic/ar5211.c index e14969c9b94..b0cf4db7a91 100644 --- a/sys/dev/ic/ar5211.c +++ b/sys/dev/ic/ar5211.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ar5211.c,v 1.21 2005/09/10 14:36:46 jsg Exp $ */ +/* $OpenBSD: ar5211.c,v 1.22 2005/09/19 10:27:08 reyk Exp $ */ /* * Copyright (c) 2004, 2005 Reyk Floeter <reyk@vantronix.net> @@ -193,18 +193,14 @@ ar5k_ar5211_attach(u_int16_t device, void *sc, bus_space_tag_t st, /* Get MAC, PHY and RADIO revisions */ srev = AR5K_REG_READ(AR5K_AR5211_SREV); + hal->ah_mac_srev = srev; hal->ah_mac_version = AR5K_REG_MS(srev, AR5K_AR5211_SREV_VER); hal->ah_mac_revision = AR5K_REG_MS(srev, AR5K_AR5211_SREV_REV); hal->ah_phy_revision = AR5K_REG_READ(AR5K_AR5211_PHY_CHIP_ID) & 0x00ffffffff; - hal->ah_radio_5ghz_revision = ar5k_ar5211_radio_revision(hal, HAL_CHIP_5GHZ); - - /* Get the 2GHz radio revision if it's supported */ - if (hal->ah_mac_version >= AR5K_SREV_VER_AR5211) - hal->ah_radio_2ghz_revision = - ar5k_ar5211_radio_revision(hal, HAL_CHIP_2GHZ); + hal->ah_radio_2ghz_revision = 0; /* Identify the chipset (this has to be done in an early step) */ hal->ah_version = AR5K_AR5211; diff --git a/sys/dev/ic/ar5212.c b/sys/dev/ic/ar5212.c index aac1722c595..2dba7499832 100644 --- a/sys/dev/ic/ar5212.c +++ b/sys/dev/ic/ar5212.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ar5212.c,v 1.25 2005/09/10 14:36:46 jsg Exp $ */ +/* $OpenBSD: ar5212.c,v 1.26 2005/09/19 10:27:08 reyk Exp $ */ /* * Copyright (c) 2004, 2005 Reyk Floeter <reyk@vantronix.net> @@ -190,18 +190,19 @@ ar5k_ar5212_attach(u_int16_t device, void *sc, bus_space_tag_t st, /* Get MAC, PHY and RADIO revisions */ srev = AR5K_REG_READ(AR5K_AR5212_SREV); + hal->ah_mac_srev = srev; hal->ah_mac_version = AR5K_REG_MS(srev, AR5K_AR5212_SREV_VER); hal->ah_mac_revision = AR5K_REG_MS(srev, AR5K_AR5212_SREV_REV); hal->ah_phy_revision = AR5K_REG_READ(AR5K_AR5212_PHY_CHIP_ID) & 0x00ffffffff; - hal->ah_radio_5ghz_revision = ar5k_ar5212_radio_revision(hal, HAL_CHIP_5GHZ); + hal->ah_radio_2ghz_revision = + ar5k_ar5212_radio_revision(hal, HAL_CHIP_2GHZ); - /* Get the 2GHz radio revision if it's supported */ - if (hal->ah_mac_version >= AR5K_SREV_VER_AR5211) - hal->ah_radio_2ghz_revision = - ar5k_ar5212_radio_revision(hal, HAL_CHIP_2GHZ); + /* Single chip radio */ + if (hal->ah_radio_2ghz_revision == hal->ah_radio_5ghz_revision) + hal->ah_radio_2ghz_revision = 0; /* Identify the chipset (this has to be done in an early step) */ hal->ah_version = AR5K_AR5212; diff --git a/sys/dev/ic/ar5xxx.c b/sys/dev/ic/ar5xxx.c index c638e0dcf31..ad003805818 100644 --- a/sys/dev/ic/ar5xxx.c +++ b/sys/dev/ic/ar5xxx.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ar5xxx.c,v 1.29 2005/09/10 14:36:46 jsg Exp $ */ +/* $OpenBSD: ar5xxx.c,v 1.30 2005/09/19 10:27:08 reyk Exp $ */ /* * Copyright (c) 2004, 2005 Reyk Floeter <reyk@vantronix.net> @@ -522,7 +522,7 @@ ar5k_printver(enum ar5k_srev_type type, u_int32_t val) if (names[i].sr_type != type || names[i].sr_val == AR5K_SREV_UNKNOWN) continue; - if (val < names[i + 1].sr_val) { + if ((val & 0xff) < names[i + 1].sr_val) { name = names[i].sr_name; break; } diff --git a/sys/dev/ic/ar5xxx.h b/sys/dev/ic/ar5xxx.h index dbe4928c1f6..11d5904556e 100644 --- a/sys/dev/ic/ar5xxx.h +++ b/sys/dev/ic/ar5xxx.h @@ -1,4 +1,4 @@ -/* $OpenBSD: ar5xxx.h,v 1.26 2005/09/08 12:44:55 jsg Exp $ */ +/* $OpenBSD: ar5xxx.h,v 1.27 2005/09/19 10:27:08 reyk Exp $ */ /* * Copyright (c) 2004, 2005 Reyk Floeter <reyk@vantronix.net> @@ -1107,7 +1107,8 @@ struct ath_hal { HAL_RATE_TABLE ah_rt_turbo; HAL_RATE_TABLE ah_rt_xr; - u_int32_t ah_mac_version; + u_int32_t ah_mac_srev; + u_int16_t ah_mac_version; u_int16_t ah_mac_revision; u_int16_t ah_phy_revision; u_int16_t ah_radio_5ghz_revision; @@ -1120,11 +1121,6 @@ struct ath_hal { HAL_BOOL ah_5ghz; HAL_BOOL ah_2ghz; -#define ah_macVersion ah_mac_version -#define ah_macRev ah_mac_revision -#define ah_phyRev ah_phy_revision -#define ah_analog5GhzRev ah_radio_5ghz_revision -#define ah_analog2GhzRev ah_radio_2ghz_revision #define ah_regdomain ah_capabilities.cap_regdomain.reg_current #define ah_modes ah_capabilities.cap_mode #define ah_ee_version ah_capabilities.cap_eeprom.ee_version @@ -1197,31 +1193,27 @@ struct ar5k_srev_name { { "5311b", AR5K_VERSION_VER, AR5K_SREV_VER_AR5311B },\ { "5211", AR5K_VERSION_VER, AR5K_SREV_VER_AR5211 }, \ { "5212", AR5K_VERSION_VER, AR5K_SREV_VER_AR5212 }, \ + { "5213", AR5K_VERSION_VER, AR5K_SREV_VER_AR5213 }, \ { "xxxx", AR5K_VERSION_VER, AR5K_SREV_UNKNOWN }, \ { "5110", AR5K_VERSION_RAD, AR5K_SREV_RAD_5110 }, \ { "5111", AR5K_VERSION_RAD, AR5K_SREV_RAD_5111 }, \ { "2111", AR5K_VERSION_RAD, AR5K_SREV_RAD_2111 }, \ { "5112", AR5K_VERSION_RAD, AR5K_SREV_RAD_5112 }, \ { "2112", AR5K_VERSION_RAD, AR5K_SREV_RAD_2112 }, \ + { "2112a", AR5K_VERSION_RAD, AR5K_SREV_RAD_2112A }, \ { "xxxx", AR5K_VERSION_RAD, AR5K_SREV_UNKNOWN } \ } #define AR5K_SREV_UNKNOWN 0xffff -#define AR5K_SREV_REV_FPGA 1 -#define AR5K_SREV_REV_PROTO 2 -#define AR5K_SREV_REV_PROTOA 3 -#define AR5K_SREV_REV_AR5210 4 -#define AR5K_SREV_REV_AR5210M 5 -#define AR5K_SREV_REV_AR5210M23 7 -#define AR5K_SREV_REV_AR521023 8 - -#define AR5K_SREV_VER_AR5210 0 -#define AR5K_SREV_VER_AR5311 1 -#define AR5K_SREV_VER_AR5311A 2 -#define AR5K_SREV_VER_AR5311B 3 -#define AR5K_SREV_VER_AR5211 4 -#define AR5K_SREV_VER_AR5212 5 +#define AR5K_SREV_VER_AR5210 0x00 +#define AR5K_SREV_VER_AR5311 0x10 +#define AR5K_SREV_VER_AR5311A 0x20 +#define AR5K_SREV_VER_AR5311B 0x30 +#define AR5K_SREV_VER_AR5211 0x40 +#define AR5K_SREV_VER_AR5212 0x50 +#define AR5K_SREV_VER_AR5213 0x55 +#define AR5K_SREV_VER_UNSUPP 0x60 #define AR5K_SREV_RAD_5110 0x00 #define AR5K_SREV_RAD_5111 0x10 @@ -1231,6 +1223,7 @@ struct ar5k_srev_name { #define AR5K_SREV_RAD_5112A 0x35 #define AR5K_SREV_RAD_2112 0x40 #define AR5K_SREV_RAD_2112A 0x45 +#define AR5K_SREV_RAD_UNSUPP 0x50 /* * Misc defines diff --git a/sys/dev/ic/ath.c b/sys/dev/ic/ath.c index d04d210556b..879c5de285b 100644 --- a/sys/dev/ic/ath.c +++ b/sys/dev/ic/ath.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ath.c,v 1.39 2005/09/08 17:38:11 reyk Exp $ */ +/* $OpenBSD: ath.c,v 1.40 2005/09/19 10:27:08 reyk Exp $ */ /* $NetBSD: ath.c,v 1.37 2004/08/18 21:59:39 dyoung Exp $ */ /*- @@ -238,18 +238,25 @@ ath_attach(u_int16_t devid, struct ath_softc *sc) } printf("%s: AR%s %u.%u phy %u.%u", ifp->if_xname, - ar5k_printver(AR5K_VERSION_VER, ah->ah_macVersion), - ah->ah_macVersion, ah->ah_macRev, - ah->ah_phyRev >> 4, ah->ah_phyRev & 0xf); + ar5k_printver(AR5K_VERSION_VER, ah->ah_mac_srev), + ah->ah_mac_version, ah->ah_mac_revision, + ah->ah_phy_revision >> 4, ah->ah_phy_revision & 0xf); printf(" rf%s %u.%u", - ar5k_printver(AR5K_VERSION_RAD, ah->ah_analog5GhzRev), - ah->ah_analog5GhzRev >> 4, - ah->ah_analog5GhzRev & 0xf); - if (ah->ah_analog2GhzRev != 0) { + ar5k_printver(AR5K_VERSION_RAD, ah->ah_radio_5ghz_revision), + ah->ah_radio_5ghz_revision >> 4, + ah->ah_radio_5ghz_revision & 0xf); + if (ah->ah_radio_2ghz_revision != 0) { printf(" rf%s %u.%u", - ar5k_printver(AR5K_VERSION_RAD, ah->ah_analog2GhzRev), - ah->ah_analog2GhzRev >> 4, - ah->ah_analog2GhzRev & 0xf); + ar5k_printver(AR5K_VERSION_RAD, + ah->ah_radio_2ghz_revision), + ah->ah_radio_2ghz_revision >> 4, + ah->ah_radio_2ghz_revision & 0xf); + } + + if (ah->ah_radio_5ghz_revision >= AR5K_SREV_RAD_UNSUPP || + ah->ah_radio_2ghz_revision >= AR5K_SREV_RAD_UNSUPP) { + printf(": RF radio not supported\n"); + goto bad; } sc->sc_ah = ah; @@ -282,8 +289,7 @@ ath_attach(u_int16_t devid, struct ath_softc *sc) error = ath_desc_alloc(sc); if (error != 0) { - printf("%s: failed to allocate descriptors: %d\n", - ifp->if_xname, error); + printf(": failed to allocate descriptors: %d\n", error); goto bad; } timeout_set(&sc->sc_scan_to, ath_next_scan, sc); @@ -310,8 +316,7 @@ ath_attach(u_int16_t devid, struct ath_softc *sc) */ sc->sc_bhalq = ath_hal_setup_tx_queue(ah,HAL_TX_QUEUE_BEACON,NULL); if (sc->sc_bhalq == (u_int) -1) { - printf("%s: unable to setup a beacon xmit queue!\n", - ifp->if_xname); + printf(": unable to setup a beacon xmit queue!\n"); goto bad2; } @@ -321,8 +326,7 @@ ath_attach(u_int16_t devid, struct ath_softc *sc) sc->sc_txhalq[i] = ath_hal_setup_tx_queue(ah, HAL_TX_QUEUE_DATA, &qinfo); if (sc->sc_txhalq[i] == (u_int) -1) { - printf("%s: unable to setup a data xmit queue %u!\n", - ifp->if_xname, i); + printf(": unable to setup a data xmit queue %u!\n", i); goto bad2; } } @@ -403,15 +407,12 @@ ath_attach(u_int16_t devid, struct ath_softc *sc) * Make sure the interface is shutdown during reboot. */ sc->sc_sdhook = shutdownhook_establish(ath_shutdown, sc); - if (sc->sc_sdhook == NULL) { - printf("%s: WARNING: unable to establish shutdown hook\n", - sc->sc_dev.dv_xname); - } + if (sc->sc_sdhook == NULL) + printf(": WARNING: unable to establish shutdown hook\n"); sc->sc_powerhook = powerhook_establish(ath_power, sc); - if (sc->sc_powerhook == NULL) { - printf("%s: WARNING: unable to establish power hook\n", - sc->sc_dev.dv_xname); - } + if (sc->sc_powerhook == NULL) + printf(": WARNING: unable to establish power hook\n"); + printf(", %s, address %s\n", ieee80211_regdomain2name(ath_regdomain), ether_sprintf(ic->ic_myaddr)); @@ -434,11 +435,11 @@ ath_detach(struct ath_softc *sc, int flags) struct ifnet *ifp = &sc->sc_ic.ic_if; int s; - config_detach_children(&sc->sc_dev, flags); - if ((sc->sc_flags & ATH_ATTACHED) == 0) return (0); + config_detach_children(&sc->sc_dev, flags); + DPRINTF(ATH_DEBUG_ANY, ("%s: if_flags %x\n", __func__, ifp->if_flags)); s = splnet(); |