Lines Matching refs:ar
41 bool ath10k_tm_event_wmi(struct ath10k *ar, u32 cmd_id, struct sk_buff *skb) in ath10k_tm_event_wmi() argument
47 ath10k_dbg(ar, ATH10K_DBG_TESTMODE, in ath10k_tm_event_wmi()
51 ath10k_dbg_dump(ar, ATH10K_DBG_TESTMODE, NULL, "", skb->data, skb->len); in ath10k_tm_event_wmi()
53 spin_lock_bh(&ar->data_lock); in ath10k_tm_event_wmi()
55 if (!ar->testmode.utf_monitor) { in ath10k_tm_event_wmi()
66 nl_skb = cfg80211_testmode_alloc_event_skb(ar->hw->wiphy, in ath10k_tm_event_wmi()
70 ath10k_warn(ar, in ath10k_tm_event_wmi()
77 ath10k_warn(ar, in ath10k_tm_event_wmi()
86 ath10k_warn(ar, in ath10k_tm_event_wmi()
95 ath10k_warn(ar, in ath10k_tm_event_wmi()
105 spin_unlock_bh(&ar->data_lock); in ath10k_tm_event_wmi()
110 static int ath10k_tm_cmd_get_version(struct ath10k *ar, struct nlattr *tb[]) in ath10k_tm_cmd_get_version() argument
115 ath10k_dbg(ar, ATH10K_DBG_TESTMODE, in ath10k_tm_cmd_get_version()
120 skb = cfg80211_testmode_alloc_reply_skb(ar->hw->wiphy, in ath10k_tm_cmd_get_version()
142 static int ath10k_tm_cmd_utf_start(struct ath10k *ar, struct nlattr *tb[]) in ath10k_tm_cmd_utf_start() argument
147 ath10k_dbg(ar, ATH10K_DBG_TESTMODE, "testmode cmd utf start\n"); in ath10k_tm_cmd_utf_start()
149 mutex_lock(&ar->conf_mutex); in ath10k_tm_cmd_utf_start()
151 if (ar->state == ATH10K_STATE_UTF) { in ath10k_tm_cmd_utf_start()
157 if (ar->state != ATH10K_STATE_OFF) { in ath10k_tm_cmd_utf_start()
162 if (WARN_ON(ar->testmode.utf != NULL)) { in ath10k_tm_cmd_utf_start()
169 ar->hw_params.fw.dir, ATH10K_FW_UTF_FILE); in ath10k_tm_cmd_utf_start()
172 ret = request_firmware(&ar->testmode.utf, filename, ar->dev); in ath10k_tm_cmd_utf_start()
174 ath10k_warn(ar, "failed to retrieve utf firmware '%s': %d\n", in ath10k_tm_cmd_utf_start()
179 spin_lock_bh(&ar->data_lock); in ath10k_tm_cmd_utf_start()
181 ar->testmode.utf_monitor = true; in ath10k_tm_cmd_utf_start()
183 spin_unlock_bh(&ar->data_lock); in ath10k_tm_cmd_utf_start()
185 BUILD_BUG_ON(sizeof(ar->fw_features) != in ath10k_tm_cmd_utf_start()
186 sizeof(ar->testmode.orig_fw_features)); in ath10k_tm_cmd_utf_start()
188 memcpy(ar->testmode.orig_fw_features, ar->fw_features, in ath10k_tm_cmd_utf_start()
189 sizeof(ar->fw_features)); in ath10k_tm_cmd_utf_start()
190 ar->testmode.orig_wmi_op_version = ar->wmi.op_version; in ath10k_tm_cmd_utf_start()
196 memset(ar->fw_features, 0, sizeof(ar->fw_features)); in ath10k_tm_cmd_utf_start()
197 ar->wmi.op_version = ATH10K_FW_WMI_OP_VERSION_10_1; in ath10k_tm_cmd_utf_start()
199 ret = ath10k_hif_power_up(ar); in ath10k_tm_cmd_utf_start()
201 ath10k_err(ar, "failed to power up hif (testmode): %d\n", ret); in ath10k_tm_cmd_utf_start()
202 ar->state = ATH10K_STATE_OFF; in ath10k_tm_cmd_utf_start()
206 ret = ath10k_core_start(ar, ATH10K_FIRMWARE_MODE_UTF); in ath10k_tm_cmd_utf_start()
208 ath10k_err(ar, "failed to start core (testmode): %d\n", ret); in ath10k_tm_cmd_utf_start()
209 ar->state = ATH10K_STATE_OFF; in ath10k_tm_cmd_utf_start()
213 ar->state = ATH10K_STATE_UTF; in ath10k_tm_cmd_utf_start()
215 ath10k_info(ar, "UTF firmware started\n"); in ath10k_tm_cmd_utf_start()
217 mutex_unlock(&ar->conf_mutex); in ath10k_tm_cmd_utf_start()
222 ath10k_hif_power_down(ar); in ath10k_tm_cmd_utf_start()
226 memcpy(ar->fw_features, ar->testmode.orig_fw_features, in ath10k_tm_cmd_utf_start()
227 sizeof(ar->fw_features)); in ath10k_tm_cmd_utf_start()
228 ar->wmi.op_version = ar->testmode.orig_wmi_op_version; in ath10k_tm_cmd_utf_start()
230 release_firmware(ar->testmode.utf); in ath10k_tm_cmd_utf_start()
231 ar->testmode.utf = NULL; in ath10k_tm_cmd_utf_start()
234 mutex_unlock(&ar->conf_mutex); in ath10k_tm_cmd_utf_start()
239 static void __ath10k_tm_cmd_utf_stop(struct ath10k *ar) in __ath10k_tm_cmd_utf_stop() argument
241 lockdep_assert_held(&ar->conf_mutex); in __ath10k_tm_cmd_utf_stop()
243 ath10k_core_stop(ar); in __ath10k_tm_cmd_utf_stop()
244 ath10k_hif_power_down(ar); in __ath10k_tm_cmd_utf_stop()
246 spin_lock_bh(&ar->data_lock); in __ath10k_tm_cmd_utf_stop()
248 ar->testmode.utf_monitor = false; in __ath10k_tm_cmd_utf_stop()
250 spin_unlock_bh(&ar->data_lock); in __ath10k_tm_cmd_utf_stop()
253 memcpy(ar->fw_features, ar->testmode.orig_fw_features, in __ath10k_tm_cmd_utf_stop()
254 sizeof(ar->fw_features)); in __ath10k_tm_cmd_utf_stop()
255 ar->wmi.op_version = ar->testmode.orig_wmi_op_version; in __ath10k_tm_cmd_utf_stop()
257 release_firmware(ar->testmode.utf); in __ath10k_tm_cmd_utf_stop()
258 ar->testmode.utf = NULL; in __ath10k_tm_cmd_utf_stop()
260 ar->state = ATH10K_STATE_OFF; in __ath10k_tm_cmd_utf_stop()
263 static int ath10k_tm_cmd_utf_stop(struct ath10k *ar, struct nlattr *tb[]) in ath10k_tm_cmd_utf_stop() argument
267 ath10k_dbg(ar, ATH10K_DBG_TESTMODE, "testmode cmd utf stop\n"); in ath10k_tm_cmd_utf_stop()
269 mutex_lock(&ar->conf_mutex); in ath10k_tm_cmd_utf_stop()
271 if (ar->state != ATH10K_STATE_UTF) { in ath10k_tm_cmd_utf_stop()
276 __ath10k_tm_cmd_utf_stop(ar); in ath10k_tm_cmd_utf_stop()
280 ath10k_info(ar, "UTF firmware stopped\n"); in ath10k_tm_cmd_utf_stop()
283 mutex_unlock(&ar->conf_mutex); in ath10k_tm_cmd_utf_stop()
287 static int ath10k_tm_cmd_wmi(struct ath10k *ar, struct nlattr *tb[]) in ath10k_tm_cmd_wmi() argument
294 mutex_lock(&ar->conf_mutex); in ath10k_tm_cmd_wmi()
296 if (ar->state != ATH10K_STATE_UTF) { in ath10k_tm_cmd_wmi()
315 ath10k_dbg(ar, ATH10K_DBG_TESTMODE, in ath10k_tm_cmd_wmi()
319 ath10k_dbg_dump(ar, ATH10K_DBG_TESTMODE, NULL, "", buf, buf_len); in ath10k_tm_cmd_wmi()
321 skb = ath10k_wmi_alloc_skb(ar, buf_len); in ath10k_tm_cmd_wmi()
329 ret = ath10k_wmi_cmd_send(ar, skb, cmd_id); in ath10k_tm_cmd_wmi()
331 ath10k_warn(ar, "failed to transmit wmi command (testmode): %d\n", in ath10k_tm_cmd_wmi()
339 mutex_unlock(&ar->conf_mutex); in ath10k_tm_cmd_wmi()
346 struct ath10k *ar = hw->priv; in ath10k_tm_cmd() local
360 return ath10k_tm_cmd_get_version(ar, tb); in ath10k_tm_cmd()
362 return ath10k_tm_cmd_utf_start(ar, tb); in ath10k_tm_cmd()
364 return ath10k_tm_cmd_utf_stop(ar, tb); in ath10k_tm_cmd()
366 return ath10k_tm_cmd_wmi(ar, tb); in ath10k_tm_cmd()
372 void ath10k_testmode_destroy(struct ath10k *ar) in ath10k_testmode_destroy() argument
374 mutex_lock(&ar->conf_mutex); in ath10k_testmode_destroy()
376 if (ar->state != ATH10K_STATE_UTF) { in ath10k_testmode_destroy()
381 __ath10k_tm_cmd_utf_stop(ar); in ath10k_testmode_destroy()
384 mutex_unlock(&ar->conf_mutex); in ath10k_testmode_destroy()