Deleted Added
full compact
rt2860.c (298818) rt2860.c (300006)
1/*-
2 * Copyright (c) 2007-2010 Damien Bergamini <damien.bergamini@free.fr>
3 * Copyright (c) 2012 Bernhard Schmidt <bschmidt@FreeBSD.org>
4 *
5 * Permission to use, copy, modify, and distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *

--- 4 unchanged lines hidden (view full) ---

13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 *
17 * $OpenBSD: rt2860.c,v 1.65 2010/10/23 14:24:54 damien Exp $
18 */
19
20#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 2007-2010 Damien Bergamini <damien.bergamini@free.fr>
3 * Copyright (c) 2012 Bernhard Schmidt <bschmidt@FreeBSD.org>
4 *
5 * Permission to use, copy, modify, and distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *

--- 4 unchanged lines hidden (view full) ---

13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 *
17 * $OpenBSD: rt2860.c,v 1.65 2010/10/23 14:24:54 damien Exp $
18 */
19
20#include <sys/cdefs.h>
21__FBSDID("$FreeBSD: head/sys/dev/ral/rt2860.c 298818 2016-04-29 22:14:11Z avos $");
21__FBSDID("$FreeBSD: head/sys/dev/ral/rt2860.c 300006 2016-05-17 06:04:33Z kevlo $");
22
23/*-
24 * Ralink Technology RT2860/RT3090/RT3390/RT3562/RT5390/RT5392 chipset driver
25 * http://www.ralinktech.com/
26 */
27
28#include <sys/param.h>
29#include <sys/sysctl.h>

--- 130 unchanged lines hidden (view full) ---

160static int rt2860_updateedca(struct ieee80211com *);
161#ifdef HW_CRYPTO
162static int rt2860_set_key(struct ieee80211com *, struct ieee80211_node *,
163 struct ieee80211_key *);
164static void rt2860_delete_key(struct ieee80211com *,
165 struct ieee80211_node *, struct ieee80211_key *);
166#endif
167static int8_t rt2860_rssi2dbm(struct rt2860_softc *, uint8_t, uint8_t);
22
23/*-
24 * Ralink Technology RT2860/RT3090/RT3390/RT3562/RT5390/RT5392 chipset driver
25 * http://www.ralinktech.com/
26 */
27
28#include <sys/param.h>
29#include <sys/sysctl.h>

--- 130 unchanged lines hidden (view full) ---

160static int rt2860_updateedca(struct ieee80211com *);
161#ifdef HW_CRYPTO
162static int rt2860_set_key(struct ieee80211com *, struct ieee80211_node *,
163 struct ieee80211_key *);
164static void rt2860_delete_key(struct ieee80211com *,
165 struct ieee80211_node *, struct ieee80211_key *);
166#endif
167static int8_t rt2860_rssi2dbm(struct rt2860_softc *, uint8_t, uint8_t);
168static const char *rt2860_get_rf(uint8_t);
168static const char *rt2860_get_rf(uint16_t);
169static int rt2860_read_eeprom(struct rt2860_softc *,
170 uint8_t macaddr[IEEE80211_ADDR_LEN]);
171static int rt2860_bbp_init(struct rt2860_softc *);
172static void rt5390_bbp_init(struct rt2860_softc *);
173static int rt2860_txrx_enable(struct rt2860_softc *);
174static void rt2860_init(void *);
175static void rt2860_init_locked(struct rt2860_softc *);
176static void rt2860_stop(void *);

--- 3125 unchanged lines hidden (view full) ---

3302 else if (b4 > 0xf)
3303 b4 = 0xf;
3304 b32 = b32 >> 4 | b4 << 28;
3305 }
3306 return b32;
3307}
3308
3309static const char *
169static int rt2860_read_eeprom(struct rt2860_softc *,
170 uint8_t macaddr[IEEE80211_ADDR_LEN]);
171static int rt2860_bbp_init(struct rt2860_softc *);
172static void rt5390_bbp_init(struct rt2860_softc *);
173static int rt2860_txrx_enable(struct rt2860_softc *);
174static void rt2860_init(void *);
175static void rt2860_init_locked(struct rt2860_softc *);
176static void rt2860_stop(void *);

--- 3125 unchanged lines hidden (view full) ---

3302 else if (b4 > 0xf)
3303 b4 = 0xf;
3304 b32 = b32 >> 4 | b4 << 28;
3305 }
3306 return b32;
3307}
3308
3309static const char *
3310rt2860_get_rf(uint8_t rev)
3310rt2860_get_rf(uint16_t rev)
3311{
3312 switch (rev) {
3313 case RT2860_RF_2820: return "RT2820";
3314 case RT2860_RF_2850: return "RT2850";
3315 case RT2860_RF_2720: return "RT2720";
3316 case RT2860_RF_2750: return "RT2750";
3317 case RT3070_RF_3020: return "RT3020";
3318 case RT3070_RF_2020: return "RT2020";
3319 case RT3070_RF_3021: return "RT3021";
3320 case RT3070_RF_3022: return "RT3022";
3321 case RT3070_RF_3052: return "RT3052";
3322 case RT3070_RF_3320: return "RT3320";
3323 case RT3070_RF_3053: return "RT3053";
3311{
3312 switch (rev) {
3313 case RT2860_RF_2820: return "RT2820";
3314 case RT2860_RF_2850: return "RT2850";
3315 case RT2860_RF_2720: return "RT2720";
3316 case RT2860_RF_2750: return "RT2750";
3317 case RT3070_RF_3020: return "RT3020";
3318 case RT3070_RF_2020: return "RT2020";
3319 case RT3070_RF_3021: return "RT3021";
3320 case RT3070_RF_3022: return "RT3022";
3321 case RT3070_RF_3052: return "RT3052";
3322 case RT3070_RF_3320: return "RT3320";
3323 case RT3070_RF_3053: return "RT3053";
3324 case RT5390_RF_5360: return "RT5360";
3324 case RT5390_RF_5390: return "RT5390";
3325 default: return "unknown";
3326 }
3327}
3328
3329static int
3330rt2860_read_eeprom(struct rt2860_softc *sc, uint8_t macaddr[IEEE80211_ADDR_LEN])
3331{

--- 6 unchanged lines hidden (view full) ---

3338 sc->sc_srom_read = rt2860_eeprom_read_2;
3339 if (sc->mac_ver >= 0x3071) {
3340 tmp = RAL_READ(sc, RT3070_EFUSE_CTRL);
3341 DPRINTF(("EFUSE_CTRL=0x%08x\n", tmp));
3342 if (tmp & RT3070_SEL_EFUSE)
3343 sc->sc_srom_read = rt3090_efuse_read_2;
3344 }
3345
3325 case RT5390_RF_5390: return "RT5390";
3326 default: return "unknown";
3327 }
3328}
3329
3330static int
3331rt2860_read_eeprom(struct rt2860_softc *sc, uint8_t macaddr[IEEE80211_ADDR_LEN])
3332{

--- 6 unchanged lines hidden (view full) ---

3339 sc->sc_srom_read = rt2860_eeprom_read_2;
3340 if (sc->mac_ver >= 0x3071) {
3341 tmp = RAL_READ(sc, RT3070_EFUSE_CTRL);
3342 DPRINTF(("EFUSE_CTRL=0x%08x\n", tmp));
3343 if (tmp & RT3070_SEL_EFUSE)
3344 sc->sc_srom_read = rt3090_efuse_read_2;
3345 }
3346
3347#ifdef RAL_DEBUG
3346 /* read EEPROM version */
3347 val = rt2860_srom_read(sc, RT2860_EEPROM_VERSION);
3348 DPRINTF(("EEPROM rev=%d, FAE=%d\n", val >> 8, val & 0xff));
3348 /* read EEPROM version */
3349 val = rt2860_srom_read(sc, RT2860_EEPROM_VERSION);
3350 DPRINTF(("EEPROM rev=%d, FAE=%d\n", val >> 8, val & 0xff));
3351#endif
3349
3350 /* read MAC address */
3351 val = rt2860_srom_read(sc, RT2860_EEPROM_MAC01);
3352 macaddr[0] = val & 0xff;
3353 macaddr[1] = val >> 8;
3354 val = rt2860_srom_read(sc, RT2860_EEPROM_MAC23);
3355 macaddr[2] = val & 0xff;
3356 macaddr[3] = val >> 8;
3357 val = rt2860_srom_read(sc, RT2860_EEPROM_MAC45);
3358 macaddr[4] = val & 0xff;
3359 macaddr[5] = val >> 8;
3360
3352
3353 /* read MAC address */
3354 val = rt2860_srom_read(sc, RT2860_EEPROM_MAC01);
3355 macaddr[0] = val & 0xff;
3356 macaddr[1] = val >> 8;
3357 val = rt2860_srom_read(sc, RT2860_EEPROM_MAC23);
3358 macaddr[2] = val & 0xff;
3359 macaddr[3] = val >> 8;
3360 val = rt2860_srom_read(sc, RT2860_EEPROM_MAC45);
3361 macaddr[4] = val & 0xff;
3362 macaddr[5] = val >> 8;
3363
3364#ifdef RAL_DEBUG
3361 /* read country code */
3362 val = rt2860_srom_read(sc, RT2860_EEPROM_COUNTRY);
3363 DPRINTF(("EEPROM region code=0x%04x\n", val));
3365 /* read country code */
3366 val = rt2860_srom_read(sc, RT2860_EEPROM_COUNTRY);
3367 DPRINTF(("EEPROM region code=0x%04x\n", val));
3368#endif
3364
3365 /* read vendor BBP settings */
3366 for (i = 0; i < 8; i++) {
3367 val = rt2860_srom_read(sc, RT2860_EEPROM_BBP_BASE + i);
3368 sc->bbp[i].val = val & 0xff;
3369 sc->bbp[i].reg = val >> 8;
3370 DPRINTF(("BBP%d=0x%02x\n", sc->bbp[i].reg, sc->bbp[i].val));
3371 }

--- 25 unchanged lines hidden (view full) ---

3397 sc->led[1] = 0x2221;
3398 sc->led[2] = 0xa9f8;
3399 }
3400 DPRINTF(("EEPROM LED mode=0x%02x, LEDs=0x%04x/0x%04x/0x%04x\n",
3401 sc->leds, sc->led[0], sc->led[1], sc->led[2]));
3402
3403 /* read RF information */
3404 val = rt2860_srom_read(sc, RT2860_EEPROM_ANTENNA);
3369
3370 /* read vendor BBP settings */
3371 for (i = 0; i < 8; i++) {
3372 val = rt2860_srom_read(sc, RT2860_EEPROM_BBP_BASE + i);
3373 sc->bbp[i].val = val & 0xff;
3374 sc->bbp[i].reg = val >> 8;
3375 DPRINTF(("BBP%d=0x%02x\n", sc->bbp[i].reg, sc->bbp[i].val));
3376 }

--- 25 unchanged lines hidden (view full) ---

3402 sc->led[1] = 0x2221;
3403 sc->led[2] = 0xa9f8;
3404 }
3405 DPRINTF(("EEPROM LED mode=0x%02x, LEDs=0x%04x/0x%04x/0x%04x\n",
3406 sc->leds, sc->led[0], sc->led[1], sc->led[2]));
3407
3408 /* read RF information */
3409 val = rt2860_srom_read(sc, RT2860_EEPROM_ANTENNA);
3405 if (val == 0xffff) {
3406 DPRINTF(("invalid EEPROM antenna info, using default\n"));
3407 if (sc->mac_ver >= 0x5390) {
3408 /* default to RF5390 */
3409 sc->rf_rev = RT5390_RF_5390;
3410 sc->ntxchains = (sc->mac_ver == 0x5392) ? 2 : 1;
3411 sc->nrxchains = (sc->mac_ver == 0x5392) ? 2 : 1;
3412 } else if (sc->mac_ver == 0x3593) {
3413 /* default to RF3053 3T3R */
3414 sc->rf_rev = RT3070_RF_3053;
3415 sc->ntxchains = 3;
3416 sc->nrxchains = 3;
3417 } else if (sc->mac_ver >= 0x3071) {
3418 /* default to RF3020 1T1R */
3419 sc->rf_rev = RT3070_RF_3020;
3420 sc->ntxchains = 1;
3421 sc->nrxchains = 1;
3422 } else {
3423 /* default to RF2820 1T2R */
3424 sc->rf_rev = RT2860_RF_2820;
3425 sc->ntxchains = 1;
3426 sc->nrxchains = 2;
3427 }
3428 } else {
3410 if (sc->mac_ver >= 0x5390)
3411 sc->rf_rev = rt2860_srom_read(sc, RT2860_EEPROM_CHIPID);
3412 else
3429 sc->rf_rev = (val >> 8) & 0xf;
3413 sc->rf_rev = (val >> 8) & 0xf;
3430 if (sc->mac_ver >= 0x5390) {
3431 sc->ntxchains = (sc->mac_ver == 0x5392) ? 2 : 1;
3432 sc->nrxchains = (sc->mac_ver == 0x5392) ? 2 : 1;
3433 } else {
3434 sc->ntxchains = (val >> 4) & 0xf;
3435 sc->nrxchains = val & 0xf;
3436 }
3437 }
3414 sc->ntxchains = (val >> 4) & 0xf;
3415 sc->nrxchains = val & 0xf;
3438 DPRINTF(("EEPROM RF rev=0x%02x chains=%dT%dR\n",
3439 sc->rf_rev, sc->ntxchains, sc->nrxchains));
3440
3441 /* check if RF supports automatic Tx access gain control */
3442 val = rt2860_srom_read(sc, RT2860_EEPROM_CONFIG);
3443 DPRINTF(("EEPROM CFG 0x%04x\n", val));
3444 /* check if driver should patch the DAC issue */
3445 if ((val >> 8) != 0xff)

--- 885 unchanged lines hidden ---
3416 DPRINTF(("EEPROM RF rev=0x%02x chains=%dT%dR\n",
3417 sc->rf_rev, sc->ntxchains, sc->nrxchains));
3418
3419 /* check if RF supports automatic Tx access gain control */
3420 val = rt2860_srom_read(sc, RT2860_EEPROM_CONFIG);
3421 DPRINTF(("EEPROM CFG 0x%04x\n", val));
3422 /* check if driver should patch the DAC issue */
3423 if ((val >> 8) != 0xff)

--- 885 unchanged lines hidden ---