Lines Matching full:ar
184 static void carl9170_ampdu_gc(struct ar9170 *ar) in carl9170_ampdu_gc() argument
190 list_for_each_entry_rcu(tid_info, &ar->tx_ampdu_list, list) { in carl9170_ampdu_gc()
191 spin_lock_bh(&ar->tx_ampdu_list_lock); in carl9170_ampdu_gc()
195 ar->tx_ampdu_list_len--; in carl9170_ampdu_gc()
198 spin_unlock_bh(&ar->tx_ampdu_list_lock); in carl9170_ampdu_gc()
201 rcu_assign_pointer(ar->tx_ampdu_iter, tid_info); in carl9170_ampdu_gc()
212 carl9170_tx_status(ar, skb, false); in carl9170_ampdu_gc()
219 static void carl9170_flush(struct ar9170 *ar, bool drop_queued) in carl9170_flush() argument
229 for (i = 0; i < ar->hw->queues; i++) { in carl9170_flush()
232 while ((skb = skb_dequeue(&ar->tx_pending[i]))) { in carl9170_flush()
237 atomic_dec(&ar->tx_ampdu_upload); in carl9170_flush()
239 carl9170_tx_status(ar, skb, false); in carl9170_flush()
245 if (atomic_read(&ar->tx_total_queued)) in carl9170_flush()
246 WARN_ON(wait_for_completion_timeout(&ar->tx_flush, HZ) == 0); in carl9170_flush()
249 static void carl9170_flush_ba(struct ar9170 *ar) in carl9170_flush_ba() argument
258 spin_lock_bh(&ar->tx_ampdu_list_lock); in carl9170_flush_ba()
259 list_for_each_entry_rcu(tid_info, &ar->tx_ampdu_list, list) { in carl9170_flush_ba()
269 spin_unlock_bh(&ar->tx_ampdu_list_lock); in carl9170_flush_ba()
273 carl9170_tx_status(ar, skb, false); in carl9170_flush_ba()
276 static void carl9170_zap_queues(struct ar9170 *ar) in carl9170_zap_queues() argument
281 carl9170_ampdu_gc(ar); in carl9170_zap_queues()
283 carl9170_flush_ba(ar); in carl9170_zap_queues()
284 carl9170_flush(ar, true); in carl9170_zap_queues()
286 for (i = 0; i < ar->hw->queues; i++) { in carl9170_zap_queues()
287 spin_lock_bh(&ar->tx_status[i].lock); in carl9170_zap_queues()
288 while (!skb_queue_empty(&ar->tx_status[i])) { in carl9170_zap_queues()
291 skb = skb_peek(&ar->tx_status[i]); in carl9170_zap_queues()
293 spin_unlock_bh(&ar->tx_status[i].lock); in carl9170_zap_queues()
294 carl9170_tx_drop(ar, skb); in carl9170_zap_queues()
295 spin_lock_bh(&ar->tx_status[i].lock); in carl9170_zap_queues()
298 spin_unlock_bh(&ar->tx_status[i].lock); in carl9170_zap_queues()
306 memset(&ar->tx_stats, 0, sizeof(ar->tx_stats)); in carl9170_zap_queues()
307 for (i = 0; i < ar->hw->queues; i++) in carl9170_zap_queues()
308 ar->tx_stats[i].limit = CARL9170_NUM_TX_LIMIT_HARD; in carl9170_zap_queues()
310 bitmap_zero(ar->mem_bitmap, ar->fw.mem_blocks); in carl9170_zap_queues()
313 list_for_each_entry_rcu(cvif, &ar->vif_list, list) { in carl9170_zap_queues()
314 spin_lock_bh(&ar->beacon_lock); in carl9170_zap_queues()
317 spin_unlock_bh(&ar->beacon_lock); in carl9170_zap_queues()
321 atomic_set(&ar->tx_ampdu_upload, 0); in carl9170_zap_queues()
322 atomic_set(&ar->tx_ampdu_scheduler, 0); in carl9170_zap_queues()
323 atomic_set(&ar->tx_total_pending, 0); in carl9170_zap_queues()
324 atomic_set(&ar->tx_total_queued, 0); in carl9170_zap_queues()
325 atomic_set(&ar->mem_free_blocks, ar->fw.mem_blocks); in carl9170_zap_queues()
338 struct ar9170 *ar = hw->priv; in carl9170_op_start() local
341 mutex_lock(&ar->mutex); in carl9170_op_start()
343 carl9170_zap_queues(ar); in carl9170_op_start()
346 CARL9170_FILL_QUEUE(ar->edcf[AR9170_TXQ_VO], 2, 3, 7, 47); in carl9170_op_start()
347 CARL9170_FILL_QUEUE(ar->edcf[AR9170_TXQ_VI], 2, 7, 15, 94); in carl9170_op_start()
348 CARL9170_FILL_QUEUE(ar->edcf[AR9170_TXQ_BE], 3, 15, 1023, 0); in carl9170_op_start()
349 CARL9170_FILL_QUEUE(ar->edcf[AR9170_TXQ_BK], 7, 15, 1023, 0); in carl9170_op_start()
350 CARL9170_FILL_QUEUE(ar->edcf[AR9170_TXQ_SPECIAL], 2, 3, 7, 0); in carl9170_op_start()
352 ar->current_factor = ar->current_density = -1; in carl9170_op_start()
354 ar->usedkeys = 1; in carl9170_op_start()
355 ar->filter_state = 0; in carl9170_op_start()
356 ar->ps.last_action = jiffies; in carl9170_op_start()
357 ar->ps.last_slept = jiffies; in carl9170_op_start()
358 ar->erp_mode = CARL9170_ERP_AUTO; in carl9170_op_start()
363 ar->disable_offload = modparam_nohwcrypt | in carl9170_op_start()
364 ar->fw.disable_offload_fw; in carl9170_op_start()
365 ar->rx_software_decryption = ar->disable_offload; in carl9170_op_start()
367 for (i = 0; i < ar->hw->queues; i++) { in carl9170_op_start()
368 ar->queue_stop_timeout[i] = jiffies; in carl9170_op_start()
369 ar->max_queue_stop_timeout[i] = 0; in carl9170_op_start()
372 atomic_set(&ar->mem_allocs, 0); in carl9170_op_start()
374 err = carl9170_usb_open(ar); in carl9170_op_start()
378 err = carl9170_init_mac(ar); in carl9170_op_start()
382 err = carl9170_set_qos(ar); in carl9170_op_start()
386 if (ar->fw.rx_filter) { in carl9170_op_start()
387 err = carl9170_rx_filter(ar, CARL9170_RX_FILTER_OTHER_RA | in carl9170_op_start()
393 err = carl9170_write_reg(ar, AR9170_MAC_REG_DMA_TRIGGER, in carl9170_op_start()
400 err = carl9170_upload_key(ar, i, NULL, AR9170_ENC_ALG_NONE, in carl9170_op_start()
405 err = carl9170_upload_key(ar, i, NULL, AR9170_ENC_ALG_NONE, in carl9170_op_start()
411 err = carl9170_disable_key(ar, i); in carl9170_op_start()
417 carl9170_set_state_when(ar, CARL9170_IDLE, CARL9170_STARTED); in carl9170_op_start()
419 ieee80211_queue_delayed_work(ar->hw, &ar->stat_work, in carl9170_op_start()
422 ieee80211_wake_queues(ar->hw); in carl9170_op_start()
426 mutex_unlock(&ar->mutex); in carl9170_op_start()
430 static void carl9170_cancel_worker(struct ar9170 *ar) in carl9170_cancel_worker() argument
432 cancel_delayed_work_sync(&ar->stat_work); in carl9170_cancel_worker()
433 cancel_delayed_work_sync(&ar->tx_janitor); in carl9170_cancel_worker()
435 cancel_delayed_work_sync(&ar->led_work); in carl9170_cancel_worker()
437 cancel_work_sync(&ar->ps_work); in carl9170_cancel_worker()
438 cancel_work_sync(&ar->ping_work); in carl9170_cancel_worker()
439 cancel_work_sync(&ar->ampdu_work); in carl9170_cancel_worker()
444 struct ar9170 *ar = hw->priv; in carl9170_op_stop() local
446 carl9170_set_state_when(ar, CARL9170_STARTED, CARL9170_IDLE); in carl9170_op_stop()
448 ieee80211_stop_queues(ar->hw); in carl9170_op_stop()
450 mutex_lock(&ar->mutex); in carl9170_op_stop()
451 if (IS_ACCEPTING_CMD(ar)) { in carl9170_op_stop()
452 RCU_INIT_POINTER(ar->beacon_iter, NULL); in carl9170_op_stop()
454 carl9170_led_set_state(ar, 0); in carl9170_op_stop()
457 carl9170_write_reg(ar, AR9170_MAC_REG_DMA_TRIGGER, 0); in carl9170_op_stop()
458 carl9170_usb_stop(ar); in carl9170_op_stop()
461 carl9170_zap_queues(ar); in carl9170_op_stop()
462 mutex_unlock(&ar->mutex); in carl9170_op_stop()
464 carl9170_cancel_worker(ar); in carl9170_op_stop()
469 struct ar9170 *ar = container_of(work, struct ar9170, in carl9170_restart_work() local
473 ar->usedkeys = 0; in carl9170_restart_work()
474 ar->filter_state = 0; in carl9170_restart_work()
475 carl9170_cancel_worker(ar); in carl9170_restart_work()
477 mutex_lock(&ar->mutex); in carl9170_restart_work()
478 if (!ar->force_usb_reset) { in carl9170_restart_work()
479 err = carl9170_usb_restart(ar); in carl9170_restart_work()
482 dev_err(&ar->udev->dev, "Failed to restart device (%d).\n", err); in carl9170_restart_work()
484 dev_info(&ar->udev->dev, "device restarted successfully.\n"); in carl9170_restart_work()
487 carl9170_zap_queues(ar); in carl9170_restart_work()
488 mutex_unlock(&ar->mutex); in carl9170_restart_work()
490 if (!err && !ar->force_usb_reset) { in carl9170_restart_work()
491 ar->restart_counter++; in carl9170_restart_work()
492 atomic_set(&ar->pending_restarts, 0); in carl9170_restart_work()
494 ieee80211_restart_hw(ar->hw); in carl9170_restart_work()
502 carl9170_usb_reset(ar); in carl9170_restart_work()
506 void carl9170_restart(struct ar9170 *ar, const enum carl9170_restart_reasons r) in carl9170_restart() argument
508 carl9170_set_state_when(ar, CARL9170_STARTED, CARL9170_IDLE); in carl9170_restart()
515 if (atomic_inc_return(&ar->pending_restarts) > 1) { in carl9170_restart()
516 dev_dbg(&ar->udev->dev, "ignoring restart (%d)\n", r); in carl9170_restart()
520 ieee80211_stop_queues(ar->hw); in carl9170_restart()
522 dev_err(&ar->udev->dev, "restart device (%d)\n", r); in carl9170_restart()
526 ar->last_reason = r; in carl9170_restart()
528 if (!ar->registered) in carl9170_restart()
531 if (!IS_ACCEPTING_CMD(ar) || ar->needs_full_reset) in carl9170_restart()
532 ar->force_usb_reset = true; in carl9170_restart()
534 ieee80211_queue_work(ar->hw, &ar->restart_work); in carl9170_restart()
545 struct ar9170 *ar = container_of(work, struct ar9170, ping_work); in carl9170_ping_work() local
548 if (!IS_STARTED(ar)) in carl9170_ping_work()
551 mutex_lock(&ar->mutex); in carl9170_ping_work()
552 err = carl9170_echo_test(ar, 0xdeadbeef); in carl9170_ping_work()
554 carl9170_restart(ar, CARL9170_RR_UNRESPONSIVE_DEVICE); in carl9170_ping_work()
555 mutex_unlock(&ar->mutex); in carl9170_ping_work()
558 static int carl9170_init_interface(struct ar9170 *ar, in carl9170_init_interface() argument
561 struct ath_common *common = &ar->common; in carl9170_init_interface()
565 WARN_ON_ONCE(IS_STARTED(ar)); in carl9170_init_interface()
581 ar->disable_offload |= ((vif->type != NL80211_IFTYPE_STATION) && in carl9170_init_interface()
589 ar->disable_offload |= vif->p2p; in carl9170_init_interface()
591 ar->rx_software_decryption = ar->disable_offload; in carl9170_init_interface()
593 err = carl9170_set_operating_mode(ar); in carl9170_init_interface()
602 struct ar9170 *ar = hw->priv; in carl9170_op_add_interface() local
605 mutex_lock(&ar->mutex); in carl9170_op_add_interface()
615 spin_lock_bh(&ar->beacon_lock); in carl9170_op_add_interface()
618 spin_unlock_bh(&ar->beacon_lock); in carl9170_op_add_interface()
628 * The first (from HEAD/TOP) interface in the ar->vif_list is in carl9170_op_add_interface()
632 main_vif = carl9170_get_main_vif(ar); in carl9170_op_add_interface()
662 vif_id = bitmap_find_free_region(&ar->vif_bitmap, ar->fw.vif_num, 0); in carl9170_op_add_interface()
671 BUG_ON(ar->vif_priv[vif_id].id != vif_id); in carl9170_op_add_interface()
676 ar->vifs++; in carl9170_op_add_interface()
682 list_add_rcu(&vif_priv->list, &ar->vif_list); in carl9170_op_add_interface()
687 list_add_tail_rcu(&vif_priv->list, &ar->vif_list); in carl9170_op_add_interface()
689 rcu_assign_pointer(ar->vif_priv[vif_id].vif, vif); in carl9170_op_add_interface()
692 main_vif = carl9170_get_main_vif(ar); in carl9170_op_add_interface()
695 rcu_assign_pointer(ar->beacon_iter, vif_priv); in carl9170_op_add_interface()
703 * But we are still holding ar->mutex, so the in carl9170_op_add_interface()
706 err = carl9170_mod_virtual_mac(ar, old_main_priv->id, in carl9170_op_add_interface()
712 err = carl9170_init_interface(ar, vif); in carl9170_op_add_interface()
717 err = carl9170_mod_virtual_mac(ar, vif_id, vif->addr); in carl9170_op_add_interface()
723 if (ar->fw.tx_seq_table) { in carl9170_op_add_interface()
724 err = carl9170_write_reg(ar, ar->fw.tx_seq_table + vif_id * 4, in carl9170_op_add_interface()
733 bitmap_release_region(&ar->vif_bitmap, vif_id, 0); in carl9170_op_add_interface()
734 ar->vifs--; in carl9170_op_add_interface()
735 RCU_INIT_POINTER(ar->vif_priv[vif_id].vif, NULL); in carl9170_op_add_interface()
737 mutex_unlock(&ar->mutex); in carl9170_op_add_interface()
740 if (ar->vifs > 1) in carl9170_op_add_interface()
741 ar->ps.off_override |= PS_OFF_VIF; in carl9170_op_add_interface()
743 mutex_unlock(&ar->mutex); in carl9170_op_add_interface()
754 struct ar9170 *ar = hw->priv; in carl9170_op_remove_interface() local
757 mutex_lock(&ar->mutex); in carl9170_op_remove_interface()
762 ar->vifs--; in carl9170_op_remove_interface()
765 main_vif = carl9170_get_main_vif(ar); in carl9170_op_remove_interface()
773 RCU_INIT_POINTER(ar->vif_priv[id].vif, NULL); in carl9170_op_remove_interface()
778 if (ar->vifs) { in carl9170_op_remove_interface()
779 WARN_ON(carl9170_init_interface(ar, in carl9170_op_remove_interface()
780 carl9170_get_main_vif(ar))); in carl9170_op_remove_interface()
782 carl9170_set_operating_mode(ar); in carl9170_op_remove_interface()
787 WARN_ON(carl9170_mod_virtual_mac(ar, id, NULL)); in carl9170_op_remove_interface()
790 carl9170_update_beacon(ar, false); in carl9170_op_remove_interface()
791 carl9170_flush_cab(ar, id); in carl9170_op_remove_interface()
793 spin_lock_bh(&ar->beacon_lock); in carl9170_op_remove_interface()
796 spin_unlock_bh(&ar->beacon_lock); in carl9170_op_remove_interface()
798 bitmap_release_region(&ar->vif_bitmap, id, 0); in carl9170_op_remove_interface()
800 carl9170_set_beacon_timers(ar); in carl9170_op_remove_interface()
802 if (ar->vifs == 1) in carl9170_op_remove_interface()
803 ar->ps.off_override &= ~PS_OFF_VIF; in carl9170_op_remove_interface()
806 mutex_unlock(&ar->mutex); in carl9170_op_remove_interface()
811 void carl9170_ps_check(struct ar9170 *ar) in carl9170_ps_check() argument
813 ieee80211_queue_work(ar->hw, &ar->ps_work); in carl9170_ps_check()
816 /* caller must hold ar->mutex */
817 static int carl9170_ps_update(struct ar9170 *ar) in carl9170_ps_update() argument
822 if (!ar->ps.off_override) in carl9170_ps_update()
823 ps = (ar->hw->conf.flags & IEEE80211_CONF_PS); in carl9170_ps_update()
825 if (ps != ar->ps.state) { in carl9170_ps_update()
826 err = carl9170_powersave(ar, ps); in carl9170_ps_update()
830 if (ar->ps.state && !ps) { in carl9170_ps_update()
831 ar->ps.sleep_ms = jiffies_to_msecs(jiffies - in carl9170_ps_update()
832 ar->ps.last_action); in carl9170_ps_update()
836 ar->ps.last_slept = jiffies; in carl9170_ps_update()
838 ar->ps.last_action = jiffies; in carl9170_ps_update()
839 ar->ps.state = ps; in carl9170_ps_update()
847 struct ar9170 *ar = container_of(work, struct ar9170, in carl9170_ps_work() local
849 mutex_lock(&ar->mutex); in carl9170_ps_work()
850 if (IS_STARTED(ar)) in carl9170_ps_work()
851 WARN_ON_ONCE(carl9170_ps_update(ar) != 0); in carl9170_ps_work()
852 mutex_unlock(&ar->mutex); in carl9170_ps_work()
855 static int carl9170_update_survey(struct ar9170 *ar, bool flush, bool noise) in carl9170_update_survey() argument
860 err = carl9170_get_noisefloor(ar); in carl9170_update_survey()
865 if (ar->fw.hw_counters) { in carl9170_update_survey()
866 err = carl9170_collect_tally(ar); in carl9170_update_survey()
872 memset(&ar->tally, 0, sizeof(ar->tally)); in carl9170_update_survey()
879 struct ar9170 *ar = container_of(work, struct ar9170, stat_work.work); in carl9170_stat_work() local
882 mutex_lock(&ar->mutex); in carl9170_stat_work()
883 err = carl9170_update_survey(ar, false, true); in carl9170_stat_work()
884 mutex_unlock(&ar->mutex); in carl9170_stat_work()
889 ieee80211_queue_delayed_work(ar->hw, &ar->stat_work, in carl9170_stat_work()
895 struct ar9170 *ar = hw->priv; in carl9170_op_config() local
898 mutex_lock(&ar->mutex); in carl9170_op_config()
905 err = carl9170_ps_update(ar); in carl9170_op_config()
920 err = carl9170_set_slot_time(ar); in carl9170_op_config()
924 err = carl9170_update_survey(ar, true, false); in carl9170_op_config()
928 err = carl9170_set_channel(ar, hw->conf.chandef.chan, in carl9170_op_config()
933 err = carl9170_update_survey(ar, false, true); in carl9170_op_config()
937 err = carl9170_set_dyn_sifs_ack(ar); in carl9170_op_config()
941 err = carl9170_set_rts_cts_rate(ar); in carl9170_op_config()
947 err = carl9170_set_mac_tpc(ar, ar->hw->conf.chandef.chan); in carl9170_op_config()
953 mutex_unlock(&ar->mutex); in carl9170_op_config()
977 struct ar9170 *ar = hw->priv; in carl9170_op_configure_filter() local
980 *new_flags &= FIF_ALLMULTI | ar->rx_filter_caps; in carl9170_op_configure_filter()
982 if (!IS_ACCEPTING_CMD(ar)) in carl9170_op_configure_filter()
985 mutex_lock(&ar->mutex); in carl9170_op_configure_filter()
987 ar->filter_state = *new_flags; in carl9170_op_configure_filter()
996 if (multicast != ar->cur_mc_hash) in carl9170_op_configure_filter()
997 WARN_ON(carl9170_update_multicast(ar, multicast)); in carl9170_op_configure_filter()
1000 ar->sniffer_enabled = !!(*new_flags & FIF_OTHER_BSS); in carl9170_op_configure_filter()
1002 WARN_ON(carl9170_set_operating_mode(ar)); in carl9170_op_configure_filter()
1005 if (ar->fw.rx_filter && changed_flags & ar->rx_filter_caps) { in carl9170_op_configure_filter()
1008 if (!ar->fw.ba_filter) in carl9170_op_configure_filter()
1025 WARN_ON(carl9170_rx_filter(ar, rx_filter)); in carl9170_op_configure_filter()
1028 mutex_unlock(&ar->mutex); in carl9170_op_configure_filter()
1037 struct ar9170 *ar = hw->priv; in carl9170_op_bss_info_changed() local
1038 struct ath_common *common = &ar->common; in carl9170_op_bss_info_changed()
1043 mutex_lock(&ar->mutex); in carl9170_op_bss_info_changed()
1045 main_vif = carl9170_get_main_vif(ar); in carl9170_op_bss_info_changed()
1055 list_for_each_entry_rcu(iter, &ar->vif_list, list) { in carl9170_op_bss_info_changed()
1062 ar->beacon_enabled = i; in carl9170_op_bss_info_changed()
1066 err = carl9170_update_beacon(ar, false); in carl9170_op_bss_info_changed()
1090 err = carl9170_set_beacon_timers(ar); in carl9170_op_bss_info_changed()
1112 err = carl9170_set_operating_mode(ar); in carl9170_op_bss_info_changed()
1118 ar->common.curaid = vif->cfg.aid; in carl9170_op_bss_info_changed()
1119 err = carl9170_set_beacon_timers(ar); in carl9170_op_bss_info_changed()
1125 err = carl9170_set_slot_time(ar); in carl9170_op_bss_info_changed()
1131 err = carl9170_set_mac_rates(ar); in carl9170_op_bss_info_changed()
1137 WARN_ON_ONCE(err && IS_STARTED(ar)); in carl9170_op_bss_info_changed()
1138 mutex_unlock(&ar->mutex); in carl9170_op_bss_info_changed()
1144 struct ar9170 *ar = hw->priv; in carl9170_op_get_tsf() local
1148 mutex_lock(&ar->mutex); in carl9170_op_get_tsf()
1149 err = carl9170_exec_cmd(ar, CARL9170_CMD_READ_TSF, in carl9170_op_get_tsf()
1151 mutex_unlock(&ar->mutex); in carl9170_op_get_tsf()
1163 struct ar9170 *ar = hw->priv; in carl9170_op_set_key() local
1167 if (ar->disable_offload || !vif) in carl9170_op_set_key()
1177 if (!is_main_vif(ar, vif)) { in carl9170_op_set_key()
1178 mutex_lock(&ar->mutex); in carl9170_op_set_key()
1210 mutex_lock(&ar->mutex); in carl9170_op_set_key()
1212 if (!IS_STARTED(ar)) { in carl9170_op_set_key()
1223 if (!(ar->usedkeys & BIT(i))) in carl9170_op_set_key()
1231 err = carl9170_upload_key(ar, i, sta ? sta->addr : NULL, in carl9170_op_set_key()
1238 err = carl9170_upload_key(ar, i, sta ? sta->addr : in carl9170_op_set_key()
1252 ar->usedkeys |= BIT(i); in carl9170_op_set_key()
1256 if (!IS_STARTED(ar)) { in carl9170_op_set_key()
1263 ar->usedkeys &= ~BIT(key->hw_key_idx); in carl9170_op_set_key()
1265 err = carl9170_upload_key(ar, key->hw_key_idx, NULL, in carl9170_op_set_key()
1272 err = carl9170_upload_key(ar, key->hw_key_idx, in carl9170_op_set_key()
1282 err = carl9170_disable_key(ar, key->hw_key_idx); in carl9170_op_set_key()
1288 mutex_unlock(&ar->mutex); in carl9170_op_set_key()
1292 if (!ar->rx_software_decryption) { in carl9170_op_set_key()
1293 ar->rx_software_decryption = true; in carl9170_op_set_key()
1294 carl9170_set_operating_mode(ar); in carl9170_op_set_key()
1296 mutex_unlock(&ar->mutex); in carl9170_op_set_key()
1333 struct ar9170 *ar = hw->priv; in carl9170_op_sta_remove() local
1352 spin_lock_bh(&ar->tx_ampdu_list_lock); in carl9170_op_sta_remove()
1355 spin_unlock_bh(&ar->tx_ampdu_list_lock); in carl9170_op_sta_remove()
1361 carl9170_ampdu_gc(ar); in carl9170_op_sta_remove()
1372 struct ar9170 *ar = hw->priv; in carl9170_op_conf_tx() local
1375 mutex_lock(&ar->mutex); in carl9170_op_conf_tx()
1376 memcpy(&ar->edcf[ar9170_qmap(queue)], param, sizeof(*param)); in carl9170_op_conf_tx()
1377 ret = carl9170_set_qos(ar); in carl9170_op_conf_tx()
1378 mutex_unlock(&ar->mutex); in carl9170_op_conf_tx()
1384 struct ar9170 *ar = container_of(work, struct ar9170, in carl9170_ampdu_work() local
1387 if (!IS_STARTED(ar)) in carl9170_ampdu_work()
1390 mutex_lock(&ar->mutex); in carl9170_ampdu_work()
1391 carl9170_ampdu_gc(ar); in carl9170_ampdu_work()
1392 mutex_unlock(&ar->mutex); in carl9170_ampdu_work()
1403 struct ar9170 *ar = hw->priv; in carl9170_op_ampdu_action() local
1432 spin_lock_bh(&ar->tx_ampdu_list_lock); in carl9170_op_ampdu_action()
1433 ar->tx_ampdu_list_len++; in carl9170_op_ampdu_action()
1434 list_add_tail_rcu(&tid_info->list, &ar->tx_ampdu_list); in carl9170_op_ampdu_action()
1436 spin_unlock_bh(&ar->tx_ampdu_list_lock); in carl9170_op_ampdu_action()
1446 spin_lock_bh(&ar->tx_ampdu_list_lock); in carl9170_op_ampdu_action()
1449 spin_unlock_bh(&ar->tx_ampdu_list_lock); in carl9170_op_ampdu_action()
1456 ieee80211_queue_work(ar->hw, &ar->ampdu_work); in carl9170_op_ampdu_action()
1490 static int carl9170_register_wps_button(struct ar9170 *ar) in carl9170_register_wps_button() argument
1495 if (!(ar->features & CARL9170_WPS_BUTTON)) in carl9170_register_wps_button()
1498 input = devm_input_allocate_device(&ar->udev->dev); in carl9170_register_wps_button()
1502 snprintf(ar->wps.name, sizeof(ar->wps.name), "%s WPS Button", in carl9170_register_wps_button()
1503 wiphy_name(ar->hw->wiphy)); in carl9170_register_wps_button()
1505 snprintf(ar->wps.phys, sizeof(ar->wps.phys), in carl9170_register_wps_button()
1506 "ieee80211/%s/input0", wiphy_name(ar->hw->wiphy)); in carl9170_register_wps_button()
1508 input->name = ar->wps.name; in carl9170_register_wps_button()
1509 input->phys = ar->wps.phys; in carl9170_register_wps_button()
1511 input->dev.parent = &ar->hw->wiphy->dev; in carl9170_register_wps_button()
1519 ar->wps.pbc = input; in carl9170_register_wps_button()
1525 static int carl9170_rng_get(struct ar9170 *ar) in carl9170_rng_get() argument
1541 if (!IS_ACCEPTING_CMD(ar)) in carl9170_rng_get()
1544 count = ARRAY_SIZE(ar->rng.cache); in carl9170_rng_get()
1546 err = carl9170_exec_cmd(ar, CARL9170_CMD_RREG, in carl9170_rng_get()
1554 ar->rng.cache[off + i] = buf[i]; in carl9170_rng_get()
1560 ar->rng.cache_idx = 0; in carl9170_rng_get()
1569 struct ar9170 *ar = (struct ar9170 *)rng->priv; in carl9170_rng_read() local
1572 mutex_lock(&ar->mutex); in carl9170_rng_read()
1573 if (ar->rng.cache_idx >= ARRAY_SIZE(ar->rng.cache)) { in carl9170_rng_read()
1574 ret = carl9170_rng_get(ar); in carl9170_rng_read()
1576 mutex_unlock(&ar->mutex); in carl9170_rng_read()
1581 *data = ar->rng.cache[ar->rng.cache_idx++]; in carl9170_rng_read()
1582 mutex_unlock(&ar->mutex); in carl9170_rng_read()
1587 static int carl9170_register_hwrng(struct ar9170 *ar) in carl9170_register_hwrng() argument
1591 snprintf(ar->rng.name, ARRAY_SIZE(ar->rng.name), in carl9170_register_hwrng()
1592 "%s_%s", KBUILD_MODNAME, wiphy_name(ar->hw->wiphy)); in carl9170_register_hwrng()
1593 ar->rng.rng.name = ar->rng.name; in carl9170_register_hwrng()
1594 ar->rng.rng.data_read = carl9170_rng_read; in carl9170_register_hwrng()
1595 ar->rng.rng.priv = (unsigned long)ar; in carl9170_register_hwrng()
1597 err = devm_hwrng_register(&ar->udev->dev, &ar->rng.rng); in carl9170_register_hwrng()
1599 dev_err(&ar->udev->dev, "Failed to register the random " in carl9170_register_hwrng()
1604 return carl9170_rng_get(ar); in carl9170_register_hwrng()
1611 struct ar9170 *ar = hw->priv; in carl9170_op_get_survey() local
1616 chan = ar->channel; in carl9170_op_get_survey()
1621 mutex_lock(&ar->mutex); in carl9170_op_get_survey()
1622 err = carl9170_update_survey(ar, false, true); in carl9170_op_get_survey()
1623 mutex_unlock(&ar->mutex); in carl9170_op_get_survey()
1629 band = ar->hw->wiphy->bands[b]; in carl9170_op_get_survey()
1644 memcpy(survey, &ar->survey[idx], sizeof(*survey)); in carl9170_op_get_survey()
1649 if (ar->channel == chan) in carl9170_op_get_survey()
1652 if (ar->fw.hw_counters) { in carl9170_op_get_survey()
1665 struct ar9170 *ar = hw->priv; in carl9170_op_flush() local
1668 mutex_lock(&ar->mutex); in carl9170_op_flush()
1669 for_each_set_bit(vid, &ar->vif_bitmap, ar->fw.vif_num) in carl9170_op_flush()
1670 carl9170_flush_cab(ar, vid); in carl9170_op_flush()
1672 carl9170_flush(ar, drop); in carl9170_op_flush()
1673 mutex_unlock(&ar->mutex); in carl9170_op_flush()
1679 struct ar9170 *ar = hw->priv; in carl9170_op_get_stats() local
1682 stats->dot11ACKFailureCount = ar->tx_ack_failures; in carl9170_op_get_stats()
1683 stats->dot11FCSErrorCount = ar->tx_fcs_errors; in carl9170_op_get_stats()
1709 struct ar9170 *ar = hw->priv; in carl9170_tx_frames_pending() local
1711 return !!atomic_read(&ar->tx_total_queued); in carl9170_tx_frames_pending()
1741 struct ar9170 *ar; in carl9170_alloc() local
1759 ar = hw->priv; in carl9170_alloc()
1760 ar->hw = hw; in carl9170_alloc()
1761 ar->rx_failover = skb; in carl9170_alloc()
1763 memset(&ar->rx_plcp, 0, sizeof(struct ar9170_rx_head)); in carl9170_alloc()
1764 ar->rx_has_plcp = false; in carl9170_alloc()
1776 mutex_init(&ar->mutex); in carl9170_alloc()
1777 spin_lock_init(&ar->beacon_lock); in carl9170_alloc()
1778 spin_lock_init(&ar->cmd_lock); in carl9170_alloc()
1779 spin_lock_init(&ar->tx_stats_lock); in carl9170_alloc()
1780 spin_lock_init(&ar->tx_ampdu_list_lock); in carl9170_alloc()
1781 spin_lock_init(&ar->mem_lock); in carl9170_alloc()
1782 spin_lock_init(&ar->state_lock); in carl9170_alloc()
1783 atomic_set(&ar->pending_restarts, 0); in carl9170_alloc()
1784 ar->vifs = 0; in carl9170_alloc()
1785 for (i = 0; i < ar->hw->queues; i++) { in carl9170_alloc()
1786 skb_queue_head_init(&ar->tx_status[i]); in carl9170_alloc()
1787 skb_queue_head_init(&ar->tx_pending[i]); in carl9170_alloc()
1789 INIT_LIST_HEAD(&ar->bar_list[i]); in carl9170_alloc()
1790 spin_lock_init(&ar->bar_list_lock[i]); in carl9170_alloc()
1792 INIT_WORK(&ar->ps_work, carl9170_ps_work); in carl9170_alloc()
1793 INIT_WORK(&ar->ping_work, carl9170_ping_work); in carl9170_alloc()
1794 INIT_WORK(&ar->restart_work, carl9170_restart_work); in carl9170_alloc()
1795 INIT_WORK(&ar->ampdu_work, carl9170_ampdu_work); in carl9170_alloc()
1796 INIT_DELAYED_WORK(&ar->stat_work, carl9170_stat_work); in carl9170_alloc()
1797 INIT_DELAYED_WORK(&ar->tx_janitor, carl9170_tx_janitor); in carl9170_alloc()
1798 INIT_LIST_HEAD(&ar->tx_ampdu_list); in carl9170_alloc()
1799 rcu_assign_pointer(ar->tx_ampdu_iter, in carl9170_alloc()
1800 (struct carl9170_sta_tid *) &ar->tx_ampdu_list); in carl9170_alloc()
1802 bitmap_zero(&ar->vif_bitmap, ar->fw.vif_num); in carl9170_alloc()
1803 INIT_LIST_HEAD(&ar->vif_list); in carl9170_alloc()
1804 init_completion(&ar->tx_flush); in carl9170_alloc()
1834 for (i = 0; i < ARRAY_SIZE(ar->noise); i++) in carl9170_alloc()
1835 ar->noise[i] = -95; /* ATH_DEFAULT_NOISE_FLOOR */ in carl9170_alloc()
1839 return ar; in carl9170_alloc()
1846 static int carl9170_read_eeprom(struct ar9170 *ar) in carl9170_read_eeprom() argument
1850 u8 *eeprom = (void *)&ar->eeprom; in carl9170_read_eeprom()
1854 BUILD_BUG_ON(sizeof(ar->eeprom) & 3); in carl9170_read_eeprom()
1859 BUILD_BUG_ON(sizeof(ar->eeprom) % RB); in carl9170_read_eeprom()
1862 for (i = 0; i < sizeof(ar->eeprom) / RB; i++) { in carl9170_read_eeprom()
1867 err = carl9170_exec_cmd(ar, CARL9170_CMD_RREG, in carl9170_read_eeprom()
1879 static int carl9170_parse_eeprom(struct ar9170 *ar) in carl9170_parse_eeprom() argument
1881 struct ath_regulatory *regulatory = &ar->common.regulatory; in carl9170_parse_eeprom()
1886 if (ar->eeprom.length == cpu_to_le16(0xffff)) in carl9170_parse_eeprom()
1889 rx_streams = hweight8(ar->eeprom.rx_mask); in carl9170_parse_eeprom()
1890 tx_streams = hweight8(ar->eeprom.tx_mask); in carl9170_parse_eeprom()
1905 if (ar->eeprom.operating_flags & AR9170_OPFLAG_2GHZ) { in carl9170_parse_eeprom()
1906 ar->hw->wiphy->bands[NL80211_BAND_2GHZ] = in carl9170_parse_eeprom()
1911 if (ar->eeprom.operating_flags & AR9170_OPFLAG_5GHZ) { in carl9170_parse_eeprom()
1912 ar->hw->wiphy->bands[NL80211_BAND_5GHZ] = in carl9170_parse_eeprom()
1921 ar->survey = devm_kcalloc(&ar->udev->dev, chans, in carl9170_parse_eeprom()
1923 if (!ar->survey) in carl9170_parse_eeprom()
1925 ar->num_channels = chans; in carl9170_parse_eeprom()
1927 regulatory->current_rd = le16_to_cpu(ar->eeprom.reg_domain[0]); in carl9170_parse_eeprom()
1930 SET_IEEE80211_PERM_ADDR(ar->hw, ar->eeprom.mac_address); in carl9170_parse_eeprom()
1939 struct ar9170 *ar = hw->priv; in carl9170_reg_notifier() local
1941 ath_reg_notifier_apply(wiphy, request, &ar->common.regulatory); in carl9170_reg_notifier()
1944 int carl9170_register(struct ar9170 *ar) in carl9170_register() argument
1946 struct ath_regulatory *regulatory = &ar->common.regulatory; in carl9170_register()
1949 ar->mem_bitmap = devm_bitmap_zalloc(&ar->udev->dev, ar->fw.mem_blocks, GFP_KERNEL); in carl9170_register()
1950 if (!ar->mem_bitmap) in carl9170_register()
1954 err = carl9170_read_eeprom(ar); in carl9170_register()
1958 err = carl9170_parse_eeprom(ar); in carl9170_register()
1962 err = ath_regd_init(regulatory, ar->hw->wiphy, in carl9170_register()
1972 for (i = 0; i < ar->fw.vif_num; i++) { in carl9170_register()
1973 ar->vif_priv[i].id = i; in carl9170_register()
1974 ar->vif_priv[i].vif = NULL; in carl9170_register()
1977 err = ieee80211_register_hw(ar->hw); in carl9170_register()
1982 ar->registered = true; in carl9170_register()
1985 regulatory_hint(ar->hw->wiphy, regulatory->alpha2); in carl9170_register()
1988 carl9170_debugfs_register(ar); in carl9170_register()
1991 err = carl9170_led_init(ar); in carl9170_register()
1996 err = carl9170_led_register(ar); in carl9170_register()
2002 err = carl9170_register_wps_button(ar); in carl9170_register()
2008 err = carl9170_register_hwrng(ar); in carl9170_register()
2013 dev_info(&ar->udev->dev, "Atheros AR9170 is registered as '%s'\n", in carl9170_register()
2014 wiphy_name(ar->hw->wiphy)); in carl9170_register()
2019 carl9170_unregister(ar); in carl9170_register()
2023 void carl9170_unregister(struct ar9170 *ar) in carl9170_unregister() argument
2025 if (!ar->registered) in carl9170_unregister()
2028 ar->registered = false; in carl9170_unregister()
2031 carl9170_led_unregister(ar); in carl9170_unregister()
2035 carl9170_debugfs_unregister(ar); in carl9170_unregister()
2038 carl9170_cancel_worker(ar); in carl9170_unregister()
2039 cancel_work_sync(&ar->restart_work); in carl9170_unregister()
2041 ieee80211_unregister_hw(ar->hw); in carl9170_unregister()
2044 void carl9170_free(struct ar9170 *ar) in carl9170_free() argument
2046 WARN_ON(ar->registered); in carl9170_free()
2047 WARN_ON(IS_INITIALIZED(ar)); in carl9170_free()
2049 kfree_skb(ar->rx_failover); in carl9170_free()
2050 ar->rx_failover = NULL; in carl9170_free()
2052 mutex_destroy(&ar->mutex); in carl9170_free()
2054 ieee80211_free_hw(ar->hw); in carl9170_free()