diff options
Diffstat (limited to 'drivers/net/wireless/ath/carl9170/cmd.c')
| -rw-r--r-- | drivers/net/wireless/ath/carl9170/cmd.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/carl9170/cmd.c b/drivers/net/wireless/ath/carl9170/cmd.c index cdfc94c371b4..195dc6538110 100644 --- a/drivers/net/wireless/ath/carl9170/cmd.c +++ b/drivers/net/wireless/ath/carl9170/cmd.c | |||
| @@ -36,6 +36,7 @@ | |||
| 36 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | 36 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
| 37 | */ | 37 | */ |
| 38 | 38 | ||
| 39 | #include <asm/div64.h> | ||
| 39 | #include "carl9170.h" | 40 | #include "carl9170.h" |
| 40 | #include "cmd.h" | 41 | #include "cmd.h" |
| 41 | 42 | ||
| @@ -165,6 +166,39 @@ int carl9170_bcn_ctrl(struct ar9170 *ar, const unsigned int vif_id, | |||
| 165 | return __carl9170_exec_cmd(ar, cmd, true); | 166 | return __carl9170_exec_cmd(ar, cmd, true); |
| 166 | } | 167 | } |
| 167 | 168 | ||
| 169 | int carl9170_collect_tally(struct ar9170 *ar) | ||
| 170 | { | ||
| 171 | struct carl9170_tally_rsp tally; | ||
| 172 | struct survey_info *info; | ||
| 173 | unsigned int tick; | ||
| 174 | int err; | ||
| 175 | |||
| 176 | err = carl9170_exec_cmd(ar, CARL9170_CMD_TALLY, 0, NULL, | ||
| 177 | sizeof(tally), (u8 *)&tally); | ||
| 178 | if (err) | ||
| 179 | return err; | ||
| 180 | |||
| 181 | tick = le32_to_cpu(tally.tick); | ||
| 182 | if (tick) { | ||
| 183 | ar->tally.active += le32_to_cpu(tally.active) / tick; | ||
| 184 | ar->tally.cca += le32_to_cpu(tally.cca) / tick; | ||
| 185 | ar->tally.tx_time += le32_to_cpu(tally.tx_time) / tick; | ||
| 186 | ar->tally.rx_total += le32_to_cpu(tally.rx_total); | ||
| 187 | ar->tally.rx_overrun += le32_to_cpu(tally.rx_overrun); | ||
| 188 | |||
| 189 | if (ar->channel) { | ||
| 190 | info = &ar->survey[ar->channel->hw_value]; | ||
| 191 | info->channel_time = ar->tally.active; | ||
| 192 | info->channel_time_busy = ar->tally.cca; | ||
| 193 | info->channel_time_tx = ar->tally.tx_time; | ||
| 194 | do_div(info->channel_time, 1000); | ||
| 195 | do_div(info->channel_time_busy, 1000); | ||
| 196 | do_div(info->channel_time_tx, 1000); | ||
| 197 | } | ||
| 198 | } | ||
| 199 | return 0; | ||
| 200 | } | ||
| 201 | |||
| 168 | int carl9170_powersave(struct ar9170 *ar, const bool ps) | 202 | int carl9170_powersave(struct ar9170 *ar, const bool ps) |
| 169 | { | 203 | { |
| 170 | struct carl9170_cmd *cmd; | 204 | struct carl9170_cmd *cmd; |
