|
@@ -179,19 +179,35 @@ void ath10k_hw_fill_survey_time(struct ath10k *ar, struct survey_info *survey,
|
|
|
u32 cc, u32 rcc, u32 cc_prev, u32 rcc_prev)
|
|
|
{
|
|
|
u32 cc_fix = 0;
|
|
|
+ u32 rcc_fix = 0;
|
|
|
enum ath10k_hw_cc_wraparound_type wraparound_type;
|
|
|
|
|
|
survey->filled |= SURVEY_INFO_TIME |
|
|
|
SURVEY_INFO_TIME_BUSY;
|
|
|
|
|
|
wraparound_type = ar->hw_params.cc_wraparound_type;
|
|
|
- if (wraparound_type == ATH10K_HW_CC_WRAP_SHIFTED_ALL && cc < cc_prev) {
|
|
|
- cc_fix = 0x7fffffff;
|
|
|
- survey->filled &= ~SURVEY_INFO_TIME_BUSY;
|
|
|
+
|
|
|
+ if (cc < cc_prev || rcc < rcc_prev) {
|
|
|
+ switch (wraparound_type) {
|
|
|
+ case ATH10K_HW_CC_WRAP_SHIFTED_ALL:
|
|
|
+ if (cc < cc_prev) {
|
|
|
+ cc_fix = 0x7fffffff;
|
|
|
+ survey->filled &= ~SURVEY_INFO_TIME_BUSY;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case ATH10K_HW_CC_WRAP_SHIFTED_EACH:
|
|
|
+ if (cc < cc_prev)
|
|
|
+ cc_fix = 0x7fffffff;
|
|
|
+ else
|
|
|
+ rcc_fix = 0x7fffffff;
|
|
|
+ break;
|
|
|
+ case ATH10K_HW_CC_WRAP_DISABLED:
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
cc -= cc_prev - cc_fix;
|
|
|
- rcc -= rcc_prev;
|
|
|
+ rcc -= rcc_prev - rcc_fix;
|
|
|
|
|
|
survey->time = CCNT_TO_MSEC(ar, cc);
|
|
|
survey->time_busy = CCNT_TO_MSEC(ar, rcc);
|