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 --- |