diff options
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ar9003_mac.c | 28 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/hw.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/hw.h | 3 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/reg.h | 1 |
4 files changed, 33 insertions, 2 deletions
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_mac.c b/drivers/net/wireless/ath/ath9k/ar9003_mac.c index 10c812e353a..f5896aa3000 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_mac.c +++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c | |||
@@ -410,12 +410,36 @@ static void ar9003_hw_set11n_ratescenario(struct ath_hw *ah, void *ds, | |||
410 | static void ar9003_hw_set11n_aggr_first(struct ath_hw *ah, void *ds, | 410 | static void ar9003_hw_set11n_aggr_first(struct ath_hw *ah, void *ds, |
411 | u32 aggrLen) | 411 | u32 aggrLen) |
412 | { | 412 | { |
413 | #define FIRST_DESC_NDELIMS 60 | ||
413 | struct ar9003_txc *ads = (struct ar9003_txc *) ds; | 414 | struct ar9003_txc *ads = (struct ar9003_txc *) ds; |
414 | 415 | ||
415 | ads->ctl12 |= (AR_IsAggr | AR_MoreAggr); | 416 | ads->ctl12 |= (AR_IsAggr | AR_MoreAggr); |
416 | 417 | ||
417 | ads->ctl17 &= ~AR_AggrLen; | 418 | if (ah->ent_mode & AR_ENT_OTP_MPSD) { |
418 | ads->ctl17 |= SM(aggrLen, AR_AggrLen); | 419 | u32 ctl17, ndelim; |
420 | /* | ||
421 | * Add delimiter when using RTS/CTS with aggregation | ||
422 | * and non enterprise AR9003 card | ||
423 | */ | ||
424 | ctl17 = ads->ctl17; | ||
425 | ndelim = MS(ctl17, AR_PadDelim); | ||
426 | |||
427 | if (ndelim < FIRST_DESC_NDELIMS) { | ||
428 | aggrLen += (FIRST_DESC_NDELIMS - ndelim) * 4; | ||
429 | ndelim = FIRST_DESC_NDELIMS; | ||
430 | } | ||
431 | |||
432 | ctl17 &= ~AR_AggrLen; | ||
433 | ctl17 |= SM(aggrLen, AR_AggrLen); | ||
434 | |||
435 | ctl17 &= ~AR_PadDelim; | ||
436 | ctl17 |= SM(ndelim, AR_PadDelim); | ||
437 | |||
438 | ads->ctl17 = ctl17; | ||
439 | } else { | ||
440 | ads->ctl17 &= ~AR_AggrLen; | ||
441 | ads->ctl17 |= SM(aggrLen, AR_AggrLen); | ||
442 | } | ||
419 | } | 443 | } |
420 | 444 | ||
421 | static void ar9003_hw_set11n_aggr_middle(struct ath_hw *ah, void *ds, | 445 | static void ar9003_hw_set11n_aggr_middle(struct ath_hw *ah, void *ds, |
diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c index e75d8e8cf4d..75e23632b96 100644 --- a/drivers/net/wireless/ath/ath9k/hw.c +++ b/drivers/net/wireless/ath/ath9k/hw.c | |||
@@ -1952,6 +1952,9 @@ int ath9k_hw_fill_cap_info(struct ath_hw *ah) | |||
1952 | if (AR_SREV_9300_20_OR_LATER(ah)) | 1952 | if (AR_SREV_9300_20_OR_LATER(ah)) |
1953 | pCap->hw_caps |= ATH9K_HW_CAP_RAC_SUPPORTED; | 1953 | pCap->hw_caps |= ATH9K_HW_CAP_RAC_SUPPORTED; |
1954 | 1954 | ||
1955 | if (AR_SREV_9300_20_OR_LATER(ah)) | ||
1956 | ah->ent_mode = REG_READ(ah, AR_ENT_OTP); | ||
1957 | |||
1955 | if (AR_SREV_9287_11_OR_LATER(ah) || AR_SREV_9271(ah)) | 1958 | if (AR_SREV_9287_11_OR_LATER(ah) || AR_SREV_9271(ah)) |
1956 | pCap->hw_caps |= ATH9K_HW_CAP_SGI_20; | 1959 | pCap->hw_caps |= ATH9K_HW_CAP_SGI_20; |
1957 | 1960 | ||
diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h index f821a28bcda..15f51c8943a 100644 --- a/drivers/net/wireless/ath/ath9k/hw.h +++ b/drivers/net/wireless/ath/ath9k/hw.h | |||
@@ -803,6 +803,9 @@ struct ath_hw { | |||
803 | * this register when in sleep states. | 803 | * this register when in sleep states. |
804 | */ | 804 | */ |
805 | u32 WARegVal; | 805 | u32 WARegVal; |
806 | |||
807 | /* Enterprise mode cap */ | ||
808 | u32 ent_mode; | ||
806 | }; | 809 | }; |
807 | 810 | ||
808 | static inline struct ath_common *ath9k_hw_common(struct ath_hw *ah) | 811 | static inline struct ath_common *ath9k_hw_common(struct ath_hw *ah) |
diff --git a/drivers/net/wireless/ath/ath9k/reg.h b/drivers/net/wireless/ath/ath9k/reg.h index ac6a13e2735..60826b82f4a 100644 --- a/drivers/net/wireless/ath/ath9k/reg.h +++ b/drivers/net/wireless/ath/ath9k/reg.h | |||
@@ -1067,6 +1067,7 @@ enum { | |||
1067 | #define AR_INTR_PRIO_ASYNC_ENABLE 0x40d4 | 1067 | #define AR_INTR_PRIO_ASYNC_ENABLE 0x40d4 |
1068 | #define AR_ENT_OTP 0x40d8 | 1068 | #define AR_ENT_OTP 0x40d8 |
1069 | #define AR_ENT_OTP_CHAIN2_DISABLE 0x00020000 | 1069 | #define AR_ENT_OTP_CHAIN2_DISABLE 0x00020000 |
1070 | #define AR_ENT_OTP_MPSD 0x00800000 | ||
1070 | 1071 | ||
1071 | #define AR_RTC_9300_PLL_DIV 0x000003ff | 1072 | #define AR_RTC_9300_PLL_DIV 0x000003ff |
1072 | #define AR_RTC_9300_PLL_DIV_S 0 | 1073 | #define AR_RTC_9300_PLL_DIV_S 0 |