Lines Matching refs:ar

54 void ath6kl_core_tx_complete(struct ath6kl *ar, struct sk_buff *skb)  in ath6kl_core_tx_complete()  argument
56 ath6kl_htc_tx_complete(ar, skb); in ath6kl_core_tx_complete()
60 void ath6kl_core_rx_complete(struct ath6kl *ar, struct sk_buff *skb, u8 pipe) in ath6kl_core_rx_complete() argument
62 ath6kl_htc_rx_complete(ar, skb, pipe); in ath6kl_core_rx_complete()
66 int ath6kl_core_init(struct ath6kl *ar, enum ath6kl_htc_type htc_type) in ath6kl_core_init() argument
74 ath6kl_htc_mbox_attach(ar); in ath6kl_core_init()
77 ath6kl_htc_pipe_attach(ar); in ath6kl_core_init()
84 ar->ath6kl_wq = create_singlethread_workqueue("ath6kl"); in ath6kl_core_init()
85 if (!ar->ath6kl_wq) in ath6kl_core_init()
88 ret = ath6kl_bmi_init(ar); in ath6kl_core_init()
97 ret = ath6kl_hif_power_on(ar); in ath6kl_core_init()
101 ret = ath6kl_bmi_get_target_info(ar, &targ_info); in ath6kl_core_init()
105 ar->version.target_ver = le32_to_cpu(targ_info.version); in ath6kl_core_init()
106 ar->target_type = le32_to_cpu(targ_info.type); in ath6kl_core_init()
107 ar->wiphy->hw_version = le32_to_cpu(targ_info.version); in ath6kl_core_init()
109 ret = ath6kl_init_hw_params(ar); in ath6kl_core_init()
113 ar->htc_target = ath6kl_htc_create(ar); in ath6kl_core_init()
115 if (!ar->htc_target) { in ath6kl_core_init()
120 ar->testmode = testmode; in ath6kl_core_init()
122 ret = ath6kl_init_fetch_firmwares(ar); in ath6kl_core_init()
132 if (ar->target_type == TARGET_TYPE_AR6004 && in ath6kl_core_init()
133 ar->fw_api <= 4) { in ath6kl_core_init()
135 ar->fw_capabilities); in ath6kl_core_init()
137 ar->fw_capabilities); in ath6kl_core_init()
139 if (ar->hw.id == AR6004_HW_1_3_VERSION) in ath6kl_core_init()
141 ar->fw_capabilities); in ath6kl_core_init()
145 set_bit(WMI_ENABLED, &ar->flag); in ath6kl_core_init()
146 ar->wmi = ath6kl_wmi_init(ar); in ath6kl_core_init()
147 if (!ar->wmi) { in ath6kl_core_init()
153 ath6kl_dbg(ATH6KL_DBG_TRC, "%s: got wmi @ 0x%p.\n", __func__, ar->wmi); in ath6kl_core_init()
156 ar->ac_stream_pri_map[WMM_AC_BK] = 0; /* lowest */ in ath6kl_core_init()
157 ar->ac_stream_pri_map[WMM_AC_BE] = 1; in ath6kl_core_init()
158 ar->ac_stream_pri_map[WMM_AC_VI] = 2; in ath6kl_core_init()
159 ar->ac_stream_pri_map[WMM_AC_VO] = 3; /* highest */ in ath6kl_core_init()
162 ath6kl_refill_amsdu_rxbufs(ar, ATH6KL_MAX_AMSDU_RX_BUFFERS); in ath6kl_core_init()
164 ath6kl_cookie_init(ar); in ath6kl_core_init()
166 ar->conf_flags = ATH6KL_CONF_IGNORE_ERP_BARKER | in ath6kl_core_init()
172 ar->suspend_mode = suspend_mode; in ath6kl_core_init()
174 ar->suspend_mode = 0; in ath6kl_core_init()
179 ar->wow_suspend_mode = wow_mode; in ath6kl_core_init()
181 ar->wow_suspend_mode = 0; in ath6kl_core_init()
184 ar->conf_flags |= ATH6KL_CONF_UART_DEBUG; in ath6kl_core_init()
185 ar->hw.uarttx_rate = uart_rate; in ath6kl_core_init()
187 set_bit(FIRST_BOOT, &ar->flag); in ath6kl_core_init()
189 ath6kl_debug_init(ar); in ath6kl_core_init()
191 ret = ath6kl_init_hw_start(ar); in ath6kl_core_init()
198 ath6kl_rx_refill(ar->htc_target, ar->ctrl_ep); in ath6kl_core_init()
199 ath6kl_rx_refill(ar->htc_target, ar->ac2ep_map[WMM_AC_BE]); in ath6kl_core_init()
201 ret = ath6kl_cfg80211_init(ar); in ath6kl_core_init()
205 ret = ath6kl_debug_init_fs(ar); in ath6kl_core_init()
207 wiphy_unregister(ar->wiphy); in ath6kl_core_init()
211 for (i = 0; i < ar->vif_max; i++) in ath6kl_core_init()
212 ar->avail_idx_map |= BIT(i); in ath6kl_core_init()
215 wiphy_lock(ar->wiphy); in ath6kl_core_init()
218 wdev = ath6kl_interface_add(ar, "wlan%d", NET_NAME_ENUM, in ath6kl_core_init()
221 wiphy_unlock(ar->wiphy); in ath6kl_core_init()
227 wiphy_unregister(ar->wiphy); in ath6kl_core_init()
232 __func__, wdev->netdev->name, wdev->netdev, ar); in ath6kl_core_init()
234 ar->fw_recovery.enable = !!recovery_enable; in ath6kl_core_init()
235 if (!ar->fw_recovery.enable) in ath6kl_core_init()
240 ar->fw_capabilities)) in ath6kl_core_init()
241 ar->fw_recovery.hb_poll = heart_beat_poll; in ath6kl_core_init()
243 ath6kl_recovery_init(ar); in ath6kl_core_init()
248 ath6kl_debug_cleanup(ar); in ath6kl_core_init()
249 ath6kl_htc_flush_rx_buf(ar->htc_target); in ath6kl_core_init()
250 ath6kl_cleanup_amsdu_rxbufs(ar); in ath6kl_core_init()
251 ath6kl_wmi_shutdown(ar->wmi); in ath6kl_core_init()
252 clear_bit(WMI_ENABLED, &ar->flag); in ath6kl_core_init()
253 ar->wmi = NULL; in ath6kl_core_init()
255 ath6kl_htc_cleanup(ar->htc_target); in ath6kl_core_init()
257 ath6kl_hif_power_off(ar); in ath6kl_core_init()
259 ath6kl_bmi_cleanup(ar); in ath6kl_core_init()
261 destroy_workqueue(ar->ath6kl_wq); in ath6kl_core_init()
269 struct ath6kl *ar; in ath6kl_core_create() local
272 ar = ath6kl_cfg80211_create(); in ath6kl_core_create()
273 if (!ar) in ath6kl_core_create()
276 ar->p2p = !!ath6kl_p2p; in ath6kl_core_create()
277 ar->dev = dev; in ath6kl_core_create()
279 ar->vif_max = 1; in ath6kl_core_create()
281 ar->max_norm_iface = 1; in ath6kl_core_create()
283 spin_lock_init(&ar->lock); in ath6kl_core_create()
284 spin_lock_init(&ar->mcastpsq_lock); in ath6kl_core_create()
285 spin_lock_init(&ar->list_lock); in ath6kl_core_create()
287 init_waitqueue_head(&ar->event_wq); in ath6kl_core_create()
288 sema_init(&ar->sem, 1); in ath6kl_core_create()
290 INIT_LIST_HEAD(&ar->amsdu_rx_buffer_queue); in ath6kl_core_create()
291 INIT_LIST_HEAD(&ar->vif_list); in ath6kl_core_create()
293 clear_bit(WMI_ENABLED, &ar->flag); in ath6kl_core_create()
294 clear_bit(SKIP_SCAN, &ar->flag); in ath6kl_core_create()
295 clear_bit(DESTROY_IN_PROGRESS, &ar->flag); in ath6kl_core_create()
297 ar->tx_pwr = 0; in ath6kl_core_create()
298 ar->intra_bss = 1; in ath6kl_core_create()
299 ar->lrssi_roam_threshold = DEF_LRSSI_ROAM_THRESHOLD; in ath6kl_core_create()
301 ar->state = ATH6KL_STATE_OFF; in ath6kl_core_create()
303 memset((u8 *)ar->sta_list, 0, in ath6kl_core_create()
308 spin_lock_init(&ar->sta_list[ctr].psq_lock); in ath6kl_core_create()
309 skb_queue_head_init(&ar->sta_list[ctr].psq); in ath6kl_core_create()
310 skb_queue_head_init(&ar->sta_list[ctr].apsdq); in ath6kl_core_create()
311 ar->sta_list[ctr].mgmt_psq_len = 0; in ath6kl_core_create()
312 INIT_LIST_HEAD(&ar->sta_list[ctr].mgmt_psq); in ath6kl_core_create()
313 ar->sta_list[ctr].aggr_conn = in ath6kl_core_create()
315 if (!ar->sta_list[ctr].aggr_conn) { in ath6kl_core_create()
317 ath6kl_core_destroy(ar); in ath6kl_core_create()
322 skb_queue_head_init(&ar->mcastpsq); in ath6kl_core_create()
324 memcpy(ar->ap_country_code, DEF_AP_COUNTRY_CODE, 3); in ath6kl_core_create()
326 return ar; in ath6kl_core_create()
330 void ath6kl_core_cleanup(struct ath6kl *ar) in ath6kl_core_cleanup() argument
332 ath6kl_hif_power_off(ar); in ath6kl_core_cleanup()
334 ath6kl_recovery_cleanup(ar); in ath6kl_core_cleanup()
336 destroy_workqueue(ar->ath6kl_wq); in ath6kl_core_cleanup()
338 if (ar->htc_target) in ath6kl_core_cleanup()
339 ath6kl_htc_cleanup(ar->htc_target); in ath6kl_core_cleanup()
341 ath6kl_cookie_cleanup(ar); in ath6kl_core_cleanup()
343 ath6kl_cleanup_amsdu_rxbufs(ar); in ath6kl_core_cleanup()
345 ath6kl_bmi_cleanup(ar); in ath6kl_core_cleanup()
347 ath6kl_debug_cleanup(ar); in ath6kl_core_cleanup()
349 kfree(ar->fw_board); in ath6kl_core_cleanup()
350 kfree(ar->fw_otp); in ath6kl_core_cleanup()
351 vfree(ar->fw); in ath6kl_core_cleanup()
352 kfree(ar->fw_patch); in ath6kl_core_cleanup()
353 kfree(ar->fw_testscript); in ath6kl_core_cleanup()
355 ath6kl_cfg80211_cleanup(ar); in ath6kl_core_cleanup()
359 void ath6kl_core_destroy(struct ath6kl *ar) in ath6kl_core_destroy() argument
361 ath6kl_cfg80211_destroy(ar); in ath6kl_core_destroy()