diff options
Diffstat (limited to 'drivers/net/wireless/ath')
| -rw-r--r-- | drivers/net/wireless/ath/ar9170/main.c | 5 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ar9170/usb.c | 6 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath5k/base.c | 3 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/ani.c | 12 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/eeprom.c | 4 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/regd.c | 17 |
6 files changed, 42 insertions, 5 deletions
diff --git a/drivers/net/wireless/ath/ar9170/main.c b/drivers/net/wireless/ath/ar9170/main.c index 9d38cf60a0db..88c3d8573869 100644 --- a/drivers/net/wireless/ath/ar9170/main.c +++ b/drivers/net/wireless/ath/ar9170/main.c | |||
| @@ -1967,13 +1967,14 @@ static int ar9170_conf_tx(struct ieee80211_hw *hw, u16 queue, | |||
| 1967 | int ret; | 1967 | int ret; |
| 1968 | 1968 | ||
| 1969 | mutex_lock(&ar->mutex); | 1969 | mutex_lock(&ar->mutex); |
| 1970 | if ((param) && !(queue > __AR9170_NUM_TXQ)) { | 1970 | if (queue < __AR9170_NUM_TXQ) { |
| 1971 | memcpy(&ar->edcf[ar9170_qos_hwmap[queue]], | 1971 | memcpy(&ar->edcf[ar9170_qos_hwmap[queue]], |
| 1972 | param, sizeof(*param)); | 1972 | param, sizeof(*param)); |
| 1973 | 1973 | ||
| 1974 | ret = ar9170_set_qos(ar); | 1974 | ret = ar9170_set_qos(ar); |
| 1975 | } else | 1975 | } else { |
| 1976 | ret = -EINVAL; | 1976 | ret = -EINVAL; |
| 1977 | } | ||
| 1977 | 1978 | ||
| 1978 | mutex_unlock(&ar->mutex); | 1979 | mutex_unlock(&ar->mutex); |
| 1979 | return ret; | 1980 | return ret; |
diff --git a/drivers/net/wireless/ath/ar9170/usb.c b/drivers/net/wireless/ath/ar9170/usb.c index 754b1f8d8da9..007eb85fc67e 100644 --- a/drivers/net/wireless/ath/ar9170/usb.c +++ b/drivers/net/wireless/ath/ar9170/usb.c | |||
| @@ -598,11 +598,15 @@ static int ar9170_usb_request_firmware(struct ar9170_usb *aru) | |||
| 598 | 598 | ||
| 599 | err = request_firmware(&aru->init_values, "ar9170-1.fw", | 599 | err = request_firmware(&aru->init_values, "ar9170-1.fw", |
| 600 | &aru->udev->dev); | 600 | &aru->udev->dev); |
| 601 | if (err) { | ||
| 602 | dev_err(&aru->udev->dev, "file with init values not found.\n"); | ||
| 603 | return err; | ||
| 604 | } | ||
| 601 | 605 | ||
| 602 | err = request_firmware(&aru->firmware, "ar9170-2.fw", &aru->udev->dev); | 606 | err = request_firmware(&aru->firmware, "ar9170-2.fw", &aru->udev->dev); |
| 603 | if (err) { | 607 | if (err) { |
| 604 | release_firmware(aru->init_values); | 608 | release_firmware(aru->init_values); |
| 605 | dev_err(&aru->udev->dev, "file with init values not found.\n"); | 609 | dev_err(&aru->udev->dev, "firmware file not found.\n"); |
| 606 | return err; | 610 | return err; |
| 607 | } | 611 | } |
| 608 | 612 | ||
diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c index ea045151f953..029c1bc7468f 100644 --- a/drivers/net/wireless/ath/ath5k/base.c +++ b/drivers/net/wireless/ath/ath5k/base.c | |||
| @@ -2970,6 +2970,9 @@ ath5k_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, | |||
| 2970 | if (modparam_nohwcrypt) | 2970 | if (modparam_nohwcrypt) |
| 2971 | return -EOPNOTSUPP; | 2971 | return -EOPNOTSUPP; |
| 2972 | 2972 | ||
| 2973 | if (sc->opmode == NL80211_IFTYPE_AP) | ||
| 2974 | return -EOPNOTSUPP; | ||
| 2975 | |||
| 2973 | switch (key->alg) { | 2976 | switch (key->alg) { |
| 2974 | case ALG_WEP: | 2977 | case ALG_WEP: |
| 2975 | case ALG_TKIP: | 2978 | case ALG_TKIP: |
diff --git a/drivers/net/wireless/ath/ath9k/ani.c b/drivers/net/wireless/ath/ath9k/ani.c index 1aeafb511ddd..aad259b4c197 100644 --- a/drivers/net/wireless/ath/ath9k/ani.c +++ b/drivers/net/wireless/ath/ath9k/ani.c | |||
| @@ -478,6 +478,18 @@ void ath9k_ani_reset(struct ath_hw *ah) | |||
| 478 | "Reset ANI state opmode %u\n", ah->opmode); | 478 | "Reset ANI state opmode %u\n", ah->opmode); |
| 479 | ah->stats.ast_ani_reset++; | 479 | ah->stats.ast_ani_reset++; |
| 480 | 480 | ||
| 481 | if (ah->opmode == NL80211_IFTYPE_AP) { | ||
| 482 | /* | ||
| 483 | * ath9k_hw_ani_control() will only process items set on | ||
| 484 | * ah->ani_function | ||
| 485 | */ | ||
| 486 | if (IS_CHAN_2GHZ(chan)) | ||
| 487 | ah->ani_function = (ATH9K_ANI_SPUR_IMMUNITY_LEVEL | | ||
| 488 | ATH9K_ANI_FIRSTEP_LEVEL); | ||
| 489 | else | ||
| 490 | ah->ani_function = 0; | ||
| 491 | } | ||
| 492 | |||
| 481 | ath9k_hw_ani_control(ah, ATH9K_ANI_NOISE_IMMUNITY_LEVEL, 0); | 493 | ath9k_hw_ani_control(ah, ATH9K_ANI_NOISE_IMMUNITY_LEVEL, 0); |
| 482 | ath9k_hw_ani_control(ah, ATH9K_ANI_SPUR_IMMUNITY_LEVEL, 0); | 494 | ath9k_hw_ani_control(ah, ATH9K_ANI_SPUR_IMMUNITY_LEVEL, 0); |
| 483 | ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL, 0); | 495 | ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL, 0); |
diff --git a/drivers/net/wireless/ath/ath9k/eeprom.c b/drivers/net/wireless/ath/ath9k/eeprom.c index a2fda702b620..ce0e86c36a82 100644 --- a/drivers/net/wireless/ath/ath9k/eeprom.c +++ b/drivers/net/wireless/ath/ath9k/eeprom.c | |||
| @@ -460,7 +460,7 @@ static int ath9k_hw_4k_check_eeprom(struct ath_hw *ah) | |||
| 460 | integer = swab32(eep->modalHeader.antCtrlCommon); | 460 | integer = swab32(eep->modalHeader.antCtrlCommon); |
| 461 | eep->modalHeader.antCtrlCommon = integer; | 461 | eep->modalHeader.antCtrlCommon = integer; |
| 462 | 462 | ||
| 463 | for (i = 0; i < AR5416_MAX_CHAINS; i++) { | 463 | for (i = 0; i < AR5416_EEP4K_MAX_CHAINS; i++) { |
| 464 | integer = swab32(eep->modalHeader.antCtrlChain[i]); | 464 | integer = swab32(eep->modalHeader.antCtrlChain[i]); |
| 465 | eep->modalHeader.antCtrlChain[i] = integer; | 465 | eep->modalHeader.antCtrlChain[i] = integer; |
| 466 | } | 466 | } |
| @@ -914,7 +914,7 @@ static void ath9k_hw_set_4k_power_per_rate_table(struct ath_hw *ah, | |||
| 914 | ctlMode, numCtlModes, isHt40CtlMode, | 914 | ctlMode, numCtlModes, isHt40CtlMode, |
| 915 | (pCtlMode[ctlMode] & EXT_ADDITIVE)); | 915 | (pCtlMode[ctlMode] & EXT_ADDITIVE)); |
| 916 | 916 | ||
| 917 | for (i = 0; (i < AR5416_NUM_CTLS) && | 917 | for (i = 0; (i < AR5416_EEP4K_NUM_CTLS) && |
| 918 | pEepData->ctlIndex[i]; i++) { | 918 | pEepData->ctlIndex[i]; i++) { |
| 919 | DPRINTF(ah->ah_sc, ATH_DBG_EEPROM, | 919 | DPRINTF(ah->ah_sc, ATH_DBG_EEPROM, |
| 920 | " LOOP-Ctlidx %d: cfgCtl 0x%2.2x " | 920 | " LOOP-Ctlidx %d: cfgCtl 0x%2.2x " |
diff --git a/drivers/net/wireless/ath/regd.c b/drivers/net/wireless/ath/regd.c index eef370bd1211..bf3d25ba7be1 100644 --- a/drivers/net/wireless/ath/regd.c +++ b/drivers/net/wireless/ath/regd.c | |||
| @@ -474,6 +474,21 @@ ath_regd_init_wiphy(struct ath_regulatory *reg, | |||
| 474 | return 0; | 474 | return 0; |
| 475 | } | 475 | } |
| 476 | 476 | ||
| 477 | /* | ||
| 478 | * Some users have reported their EEPROM programmed with | ||
| 479 | * 0x8000 set, this is not a supported regulatory domain | ||
| 480 | * but since we have more than one user with it we need | ||
| 481 | * a solution for them. We default to 0x64, which is the | ||
| 482 | * default Atheros world regulatory domain. | ||
| 483 | */ | ||
| 484 | static void ath_regd_sanitize(struct ath_regulatory *reg) | ||
| 485 | { | ||
| 486 | if (reg->current_rd != COUNTRY_ERD_FLAG) | ||
| 487 | return; | ||
| 488 | printk(KERN_DEBUG "ath: EEPROM regdomain sanitized\n"); | ||
| 489 | reg->current_rd = 0x64; | ||
| 490 | } | ||
| 491 | |||
| 477 | int | 492 | int |
| 478 | ath_regd_init(struct ath_regulatory *reg, | 493 | ath_regd_init(struct ath_regulatory *reg, |
| 479 | struct wiphy *wiphy, | 494 | struct wiphy *wiphy, |
| @@ -486,6 +501,8 @@ ath_regd_init(struct ath_regulatory *reg, | |||
| 486 | if (!reg) | 501 | if (!reg) |
| 487 | return -EINVAL; | 502 | return -EINVAL; |
| 488 | 503 | ||
| 504 | ath_regd_sanitize(reg); | ||
| 505 | |||
| 489 | printk(KERN_DEBUG "ath: EEPROM regdomain: 0x%0x\n", reg->current_rd); | 506 | printk(KERN_DEBUG "ath: EEPROM regdomain: 0x%0x\n", reg->current_rd); |
| 490 | 507 | ||
| 491 | if (!ath_regd_is_eeprom_valid(reg)) { | 508 | if (!ath_regd_is_eeprom_valid(reg)) { |
