Lines Matching +full:ftm +full:- +full:src

1 // SPDX-License-Identifier: BSD-3-Clause-Clear
3 * Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
4 * Copyright (c) 2021-2025 Qualcomm Innovation Center, Inc. All rights reserved.
190 return ath12k_wmi_tlv_hdr(cmd, len - TLV_HDR_SIZE); in ath12k_wmi_tlv_cmd_hdr()
196 config->num_vdevs = ab->num_radios * TARGET_NUM_VDEVS; in ath12k_wmi_init_qcn9274()
197 config->num_peers = ab->num_radios * in ath12k_wmi_init_qcn9274()
199 config->num_tids = ath12k_core_get_max_num_tids(ab); in ath12k_wmi_init_qcn9274()
200 config->num_offload_peers = TARGET_NUM_OFFLD_PEERS; in ath12k_wmi_init_qcn9274()
201 config->num_offload_reorder_buffs = TARGET_NUM_OFFLD_REORDER_BUFFS; in ath12k_wmi_init_qcn9274()
202 config->num_peer_keys = TARGET_NUM_PEER_KEYS; in ath12k_wmi_init_qcn9274()
203 config->ast_skid_limit = TARGET_AST_SKID_LIMIT; in ath12k_wmi_init_qcn9274()
204 config->tx_chain_mask = (1 << ab->target_caps.num_rf_chains) - 1; in ath12k_wmi_init_qcn9274()
205 config->rx_chain_mask = (1 << ab->target_caps.num_rf_chains) - 1; in ath12k_wmi_init_qcn9274()
206 config->rx_timeout_pri[0] = TARGET_RX_TIMEOUT_LO_PRI; in ath12k_wmi_init_qcn9274()
207 config->rx_timeout_pri[1] = TARGET_RX_TIMEOUT_LO_PRI; in ath12k_wmi_init_qcn9274()
208 config->rx_timeout_pri[2] = TARGET_RX_TIMEOUT_LO_PRI; in ath12k_wmi_init_qcn9274()
209 config->rx_timeout_pri[3] = TARGET_RX_TIMEOUT_HI_PRI; in ath12k_wmi_init_qcn9274()
211 if (test_bit(ATH12K_FLAG_RAW_MODE, &ab->dev_flags)) in ath12k_wmi_init_qcn9274()
212 config->rx_decap_mode = TARGET_DECAP_MODE_RAW; in ath12k_wmi_init_qcn9274()
214 config->rx_decap_mode = TARGET_DECAP_MODE_NATIVE_WIFI; in ath12k_wmi_init_qcn9274()
216 config->scan_max_pending_req = TARGET_SCAN_MAX_PENDING_REQS; in ath12k_wmi_init_qcn9274()
217 config->bmiss_offload_max_vdev = TARGET_BMISS_OFFLOAD_MAX_VDEV; in ath12k_wmi_init_qcn9274()
218 config->roam_offload_max_vdev = TARGET_ROAM_OFFLOAD_MAX_VDEV; in ath12k_wmi_init_qcn9274()
219 config->roam_offload_max_ap_profiles = TARGET_ROAM_OFFLOAD_MAX_AP_PROFILES; in ath12k_wmi_init_qcn9274()
220 config->num_mcast_groups = TARGET_NUM_MCAST_GROUPS; in ath12k_wmi_init_qcn9274()
221 config->num_mcast_table_elems = TARGET_NUM_MCAST_TABLE_ELEMS; in ath12k_wmi_init_qcn9274()
222 config->mcast2ucast_mode = TARGET_MCAST2UCAST_MODE; in ath12k_wmi_init_qcn9274()
223 config->tx_dbg_log_size = TARGET_TX_DBG_LOG_SIZE; in ath12k_wmi_init_qcn9274()
224 config->num_wds_entries = TARGET_NUM_WDS_ENTRIES; in ath12k_wmi_init_qcn9274()
225 config->dma_burst_size = TARGET_DMA_BURST_SIZE; in ath12k_wmi_init_qcn9274()
226 config->rx_skip_defrag_timeout_dup_detection_check = in ath12k_wmi_init_qcn9274()
228 config->vow_config = TARGET_VOW_CONFIG; in ath12k_wmi_init_qcn9274()
229 config->gtk_offload_max_vdev = TARGET_GTK_OFFLOAD_MAX_VDEV; in ath12k_wmi_init_qcn9274()
230 config->num_msdu_desc = TARGET_NUM_MSDU_DESC; in ath12k_wmi_init_qcn9274()
231 config->beacon_tx_offload_max_vdev = ab->num_radios * TARGET_MAX_BCN_OFFLD; in ath12k_wmi_init_qcn9274()
232 config->rx_batchmode = TARGET_RX_BATCHMODE; in ath12k_wmi_init_qcn9274()
234 config->peer_map_unmap_version = 0x32; in ath12k_wmi_init_qcn9274()
235 config->twt_ap_pdev_count = ab->num_radios; in ath12k_wmi_init_qcn9274()
236 config->twt_ap_sta_count = 1000; in ath12k_wmi_init_qcn9274()
237 config->ema_max_vap_cnt = ab->num_radios; in ath12k_wmi_init_qcn9274()
238 config->ema_max_profile_period = TARGET_EMA_MAX_PROFILE_PERIOD; in ath12k_wmi_init_qcn9274()
239 config->beacon_tx_offload_max_vdev += config->ema_max_vap_cnt; in ath12k_wmi_init_qcn9274()
241 if (test_bit(WMI_TLV_SERVICE_PEER_METADATA_V1A_V1B_SUPPORT, ab->wmi_ab.svc_map)) in ath12k_wmi_init_qcn9274()
242 config->peer_metadata_ver = ATH12K_PEER_METADATA_V1B; in ath12k_wmi_init_qcn9274()
248 config->num_vdevs = 4; in ath12k_wmi_init_wcn7850()
249 config->num_peers = 16; in ath12k_wmi_init_wcn7850()
250 config->num_tids = 32; in ath12k_wmi_init_wcn7850()
252 config->num_offload_peers = 3; in ath12k_wmi_init_wcn7850()
253 config->num_offload_reorder_buffs = 3; in ath12k_wmi_init_wcn7850()
254 config->num_peer_keys = TARGET_NUM_PEER_KEYS; in ath12k_wmi_init_wcn7850()
255 config->ast_skid_limit = TARGET_AST_SKID_LIMIT; in ath12k_wmi_init_wcn7850()
256 config->tx_chain_mask = (1 << ab->target_caps.num_rf_chains) - 1; in ath12k_wmi_init_wcn7850()
257 config->rx_chain_mask = (1 << ab->target_caps.num_rf_chains) - 1; in ath12k_wmi_init_wcn7850()
258 config->rx_timeout_pri[0] = TARGET_RX_TIMEOUT_LO_PRI; in ath12k_wmi_init_wcn7850()
259 config->rx_timeout_pri[1] = TARGET_RX_TIMEOUT_LO_PRI; in ath12k_wmi_init_wcn7850()
260 config->rx_timeout_pri[2] = TARGET_RX_TIMEOUT_LO_PRI; in ath12k_wmi_init_wcn7850()
261 config->rx_timeout_pri[3] = TARGET_RX_TIMEOUT_HI_PRI; in ath12k_wmi_init_wcn7850()
262 config->rx_decap_mode = TARGET_DECAP_MODE_NATIVE_WIFI; in ath12k_wmi_init_wcn7850()
263 config->scan_max_pending_req = TARGET_SCAN_MAX_PENDING_REQS; in ath12k_wmi_init_wcn7850()
264 config->bmiss_offload_max_vdev = TARGET_BMISS_OFFLOAD_MAX_VDEV; in ath12k_wmi_init_wcn7850()
265 config->roam_offload_max_vdev = TARGET_ROAM_OFFLOAD_MAX_VDEV; in ath12k_wmi_init_wcn7850()
266 config->roam_offload_max_ap_profiles = TARGET_ROAM_OFFLOAD_MAX_AP_PROFILES; in ath12k_wmi_init_wcn7850()
267 config->num_mcast_groups = 0; in ath12k_wmi_init_wcn7850()
268 config->num_mcast_table_elems = 0; in ath12k_wmi_init_wcn7850()
269 config->mcast2ucast_mode = 0; in ath12k_wmi_init_wcn7850()
270 config->tx_dbg_log_size = TARGET_TX_DBG_LOG_SIZE; in ath12k_wmi_init_wcn7850()
271 config->num_wds_entries = 0; in ath12k_wmi_init_wcn7850()
272 config->dma_burst_size = 0; in ath12k_wmi_init_wcn7850()
273 config->rx_skip_defrag_timeout_dup_detection_check = 0; in ath12k_wmi_init_wcn7850()
274 config->vow_config = TARGET_VOW_CONFIG; in ath12k_wmi_init_wcn7850()
275 config->gtk_offload_max_vdev = 2; in ath12k_wmi_init_wcn7850()
276 config->num_msdu_desc = 0x400; in ath12k_wmi_init_wcn7850()
277 config->beacon_tx_offload_max_vdev = 2; in ath12k_wmi_init_wcn7850()
278 config->rx_batchmode = TARGET_RX_BATCHMODE; in ath12k_wmi_init_wcn7850()
280 config->peer_map_unmap_version = 0x1; in ath12k_wmi_init_wcn7850()
281 config->use_pdev_id = 1; in ath12k_wmi_init_wcn7850()
282 config->max_frag_entries = 0xa; in ath12k_wmi_init_wcn7850()
283 config->num_tdls_vdevs = 0x1; in ath12k_wmi_init_wcn7850()
284 config->num_tdls_conn_table_entries = 8; in ath12k_wmi_init_wcn7850()
285 config->beacon_tx_offload_max_vdev = 0x2; in ath12k_wmi_init_wcn7850()
286 config->num_multicast_filter_entries = 0x20; in ath12k_wmi_init_wcn7850()
287 config->num_wow_filters = 0x16; in ath12k_wmi_init_wcn7850()
288 config->num_keep_alive_pattern = 0; in ath12k_wmi_init_wcn7850()
319 ptr - begin, len, sizeof(*tlv)); in ath12k_wmi_tlv_iter()
320 return -EINVAL; in ath12k_wmi_tlv_iter()
324 tlv_tag = le32_get_bits(tlv->header, WMI_TLV_TAG); in ath12k_wmi_tlv_iter()
325 tlv_len = le32_get_bits(tlv->header, WMI_TLV_LEN); in ath12k_wmi_tlv_iter()
327 len -= sizeof(*tlv); in ath12k_wmi_tlv_iter()
331 tlv_tag, ptr - begin, len, tlv_len); in ath12k_wmi_tlv_iter()
332 return -EINVAL; in ath12k_wmi_tlv_iter()
339 tlv_tag, ptr - begin, tlv_len, in ath12k_wmi_tlv_iter()
341 return -EINVAL; in ath12k_wmi_tlv_iter()
349 len -= tlv_len; in ath12k_wmi_tlv_iter()
382 return ERR_PTR(-ENOMEM); in ath12k_wmi_tlv_parse_alloc()
384 ret = ath12k_wmi_tlv_parse(ab, tb, skb->data, skb->len); in ath12k_wmi_tlv_parse_alloc()
397 struct ath12k_base *ab = wmi->wmi_ab->ab; in ath12k_wmi_cmd_send_nowait()
402 return -ENOMEM; in ath12k_wmi_cmd_send_nowait()
404 cmd_hdr = (struct wmi_cmd_hdr *)skb->data; in ath12k_wmi_cmd_send_nowait()
405 cmd_hdr->cmd_id = le32_encode_bits(cmd_id, WMI_CMD_HDR_CMD_ID); in ath12k_wmi_cmd_send_nowait()
408 ret = ath12k_htc_send(&ab->htc, wmi->eid, skb); in ath12k_wmi_cmd_send_nowait()
423 struct ath12k_wmi_base *wmi_ab = wmi->wmi_ab; in ath12k_wmi_cmd_send()
424 int ret = -EOPNOTSUPP; in ath12k_wmi_cmd_send()
428 wait_event_timeout(wmi_ab->tx_credits_wq, ({ in ath12k_wmi_cmd_send()
431 if (ret && test_bit(ATH12K_FLAG_CRASH_FLUSH, &wmi_ab->ab->dev_flags)) in ath12k_wmi_cmd_send()
432 ret = -ESHUTDOWN; in ath12k_wmi_cmd_send()
434 (ret != -EAGAIN); in ath12k_wmi_cmd_send()
437 if (ret == -EAGAIN) in ath12k_wmi_cmd_send()
438 ath12k_warn(wmi_ab->ab, "wmi command %d timeout\n", cmd_id); in ath12k_wmi_cmd_send()
451 return -EINVAL; in ath12k_pull_svc_ready_ext()
454 arg->default_conc_scan_config_bits = in ath12k_pull_svc_ready_ext()
455 le32_to_cpu(ev->default_conc_scan_config_bits); in ath12k_pull_svc_ready_ext()
456 arg->default_fw_config_bits = le32_to_cpu(ev->default_fw_config_bits); in ath12k_pull_svc_ready_ext()
457 arg->he_cap_info = le32_to_cpu(ev->he_cap_info); in ath12k_pull_svc_ready_ext()
458 arg->mpdu_density = le32_to_cpu(ev->mpdu_density); in ath12k_pull_svc_ready_ext()
459 arg->max_bssid_rx_filters = le32_to_cpu(ev->max_bssid_rx_filters); in ath12k_pull_svc_ready_ext()
460 arg->ppet.numss_m1 = le32_to_cpu(ev->ppet.numss_m1); in ath12k_pull_svc_ready_ext()
461 arg->ppet.ru_bit_mask = le32_to_cpu(ev->ppet.ru_info); in ath12k_pull_svc_ready_ext()
464 arg->ppet.ppet16_ppet8_ru3_ru0[i] = in ath12k_pull_svc_ready_ext()
465 le32_to_cpu(ev->ppet.ppet16_ppet8_ru3_ru0[i]); in ath12k_pull_svc_ready_ext()
477 const struct ath12k_wmi_soc_mac_phy_hw_mode_caps_params *hw_caps = svc->hw_caps; in ath12k_pull_mac_phy_cap_svc_ready_ext()
478 const struct ath12k_wmi_hw_mode_cap_params *wmi_hw_mode_caps = svc->hw_mode_caps; in ath12k_pull_mac_phy_cap_svc_ready_ext()
479 const struct ath12k_wmi_mac_phy_caps_params *wmi_mac_phy_caps = svc->mac_phy_caps; in ath12k_pull_mac_phy_cap_svc_ready_ext()
480 struct ath12k_base *ab = wmi_handle->wmi_ab->ab; in ath12k_pull_mac_phy_cap_svc_ready_ext()
482 struct ath12k_pdev_cap *pdev_cap = &pdev->cap; in ath12k_pull_mac_phy_cap_svc_ready_ext()
488 if (!hw_caps || !wmi_hw_mode_caps || !svc->soc_hal_reg_caps) in ath12k_pull_mac_phy_cap_svc_ready_ext()
489 return -EINVAL; in ath12k_pull_mac_phy_cap_svc_ready_ext()
491 for (hw_idx = 0; hw_idx < le32_to_cpu(hw_caps->num_hw_modes); hw_idx++) { in ath12k_pull_mac_phy_cap_svc_ready_ext()
499 if (hw_idx == le32_to_cpu(hw_caps->num_hw_modes)) in ath12k_pull_mac_phy_cap_svc_ready_ext()
500 return -EINVAL; in ath12k_pull_mac_phy_cap_svc_ready_ext()
503 if (phy_id >= le32_to_cpu(svc->soc_hal_reg_caps->num_phy)) in ath12k_pull_mac_phy_cap_svc_ready_ext()
504 return -EINVAL; in ath12k_pull_mac_phy_cap_svc_ready_ext()
508 pdev->pdev_id = ath12k_wmi_mac_phy_get_pdev_id(mac_caps); in ath12k_pull_mac_phy_cap_svc_ready_ext()
509 pdev->hw_link_id = ath12k_wmi_mac_phy_get_hw_link_id(mac_caps); in ath12k_pull_mac_phy_cap_svc_ready_ext()
510 pdev_cap->supported_bands |= le32_to_cpu(mac_caps->supported_bands); in ath12k_pull_mac_phy_cap_svc_ready_ext()
511 pdev_cap->ampdu_density = le32_to_cpu(mac_caps->ampdu_density); in ath12k_pull_mac_phy_cap_svc_ready_ext()
513 fw_pdev = &ab->fw_pdev[ab->fw_pdev_count]; in ath12k_pull_mac_phy_cap_svc_ready_ext()
514 fw_pdev->supported_bands = le32_to_cpu(mac_caps->supported_bands); in ath12k_pull_mac_phy_cap_svc_ready_ext()
515 fw_pdev->pdev_id = ath12k_wmi_mac_phy_get_pdev_id(mac_caps); in ath12k_pull_mac_phy_cap_svc_ready_ext()
516 fw_pdev->phy_id = le32_to_cpu(mac_caps->phy_id); in ath12k_pull_mac_phy_cap_svc_ready_ext()
517 ab->fw_pdev_count++; in ath12k_pull_mac_phy_cap_svc_ready_ext()
519 /* Take non-zero tx/rx chainmask. If tx/rx chainmask differs from in ath12k_pull_mac_phy_cap_svc_ready_ext()
523 if (le32_to_cpu(mac_caps->supported_bands) & WMI_HOST_WLAN_2G_CAP) { in ath12k_pull_mac_phy_cap_svc_ready_ext()
524 pdev_cap->tx_chain_mask = le32_to_cpu(mac_caps->tx_chain_mask_2g); in ath12k_pull_mac_phy_cap_svc_ready_ext()
525 pdev_cap->rx_chain_mask = le32_to_cpu(mac_caps->rx_chain_mask_2g); in ath12k_pull_mac_phy_cap_svc_ready_ext()
526 } else if (le32_to_cpu(mac_caps->supported_bands) & WMI_HOST_WLAN_5G_CAP) { in ath12k_pull_mac_phy_cap_svc_ready_ext()
527 pdev_cap->vht_cap = le32_to_cpu(mac_caps->vht_cap_info_5g); in ath12k_pull_mac_phy_cap_svc_ready_ext()
528 pdev_cap->vht_mcs = le32_to_cpu(mac_caps->vht_supp_mcs_5g); in ath12k_pull_mac_phy_cap_svc_ready_ext()
529 pdev_cap->he_mcs = le32_to_cpu(mac_caps->he_supp_mcs_5g); in ath12k_pull_mac_phy_cap_svc_ready_ext()
530 pdev_cap->tx_chain_mask = le32_to_cpu(mac_caps->tx_chain_mask_5g); in ath12k_pull_mac_phy_cap_svc_ready_ext()
531 pdev_cap->rx_chain_mask = le32_to_cpu(mac_caps->rx_chain_mask_5g); in ath12k_pull_mac_phy_cap_svc_ready_ext()
533 return -EINVAL; in ath12k_pull_mac_phy_cap_svc_ready_ext()
538 * mac and the remaining 4 chains can be used for the second mac or vice-versa. in ath12k_pull_mac_phy_cap_svc_ready_ext()
540 * will be advertised for second mac or vice-versa. Compute the shift value in ath12k_pull_mac_phy_cap_svc_ready_ext()
544 pdev_cap->tx_chain_mask_shift = in ath12k_pull_mac_phy_cap_svc_ready_ext()
545 find_first_bit((unsigned long *)&pdev_cap->tx_chain_mask, 32); in ath12k_pull_mac_phy_cap_svc_ready_ext()
546 pdev_cap->rx_chain_mask_shift = in ath12k_pull_mac_phy_cap_svc_ready_ext()
547 find_first_bit((unsigned long *)&pdev_cap->rx_chain_mask, 32); in ath12k_pull_mac_phy_cap_svc_ready_ext()
549 if (le32_to_cpu(mac_caps->supported_bands) & WMI_HOST_WLAN_2G_CAP) { in ath12k_pull_mac_phy_cap_svc_ready_ext()
550 cap_band = &pdev_cap->band[NL80211_BAND_2GHZ]; in ath12k_pull_mac_phy_cap_svc_ready_ext()
551 cap_band->phy_id = le32_to_cpu(mac_caps->phy_id); in ath12k_pull_mac_phy_cap_svc_ready_ext()
552 cap_band->max_bw_supported = le32_to_cpu(mac_caps->max_bw_supported_2g); in ath12k_pull_mac_phy_cap_svc_ready_ext()
553 cap_band->ht_cap_info = le32_to_cpu(mac_caps->ht_cap_info_2g); in ath12k_pull_mac_phy_cap_svc_ready_ext()
554 cap_band->he_cap_info[0] = le32_to_cpu(mac_caps->he_cap_info_2g); in ath12k_pull_mac_phy_cap_svc_ready_ext()
555 cap_band->he_cap_info[1] = le32_to_cpu(mac_caps->he_cap_info_2g_ext); in ath12k_pull_mac_phy_cap_svc_ready_ext()
556 cap_band->he_mcs = le32_to_cpu(mac_caps->he_supp_mcs_2g); in ath12k_pull_mac_phy_cap_svc_ready_ext()
558 cap_band->he_cap_phy_info[i] = in ath12k_pull_mac_phy_cap_svc_ready_ext()
559 le32_to_cpu(mac_caps->he_cap_phy_info_2g[i]); in ath12k_pull_mac_phy_cap_svc_ready_ext()
561 cap_band->he_ppet.numss_m1 = le32_to_cpu(mac_caps->he_ppet2g.numss_m1); in ath12k_pull_mac_phy_cap_svc_ready_ext()
562 cap_band->he_ppet.ru_bit_mask = le32_to_cpu(mac_caps->he_ppet2g.ru_info); in ath12k_pull_mac_phy_cap_svc_ready_ext()
565 cap_band->he_ppet.ppet16_ppet8_ru3_ru0[i] = in ath12k_pull_mac_phy_cap_svc_ready_ext()
566 le32_to_cpu(mac_caps->he_ppet2g.ppet16_ppet8_ru3_ru0[i]); in ath12k_pull_mac_phy_cap_svc_ready_ext()
569 if (le32_to_cpu(mac_caps->supported_bands) & WMI_HOST_WLAN_5G_CAP) { in ath12k_pull_mac_phy_cap_svc_ready_ext()
570 cap_band = &pdev_cap->band[NL80211_BAND_5GHZ]; in ath12k_pull_mac_phy_cap_svc_ready_ext()
571 cap_band->phy_id = le32_to_cpu(mac_caps->phy_id); in ath12k_pull_mac_phy_cap_svc_ready_ext()
572 cap_band->max_bw_supported = in ath12k_pull_mac_phy_cap_svc_ready_ext()
573 le32_to_cpu(mac_caps->max_bw_supported_5g); in ath12k_pull_mac_phy_cap_svc_ready_ext()
574 cap_band->ht_cap_info = le32_to_cpu(mac_caps->ht_cap_info_5g); in ath12k_pull_mac_phy_cap_svc_ready_ext()
575 cap_band->he_cap_info[0] = le32_to_cpu(mac_caps->he_cap_info_5g); in ath12k_pull_mac_phy_cap_svc_ready_ext()
576 cap_band->he_cap_info[1] = le32_to_cpu(mac_caps->he_cap_info_5g_ext); in ath12k_pull_mac_phy_cap_svc_ready_ext()
577 cap_band->he_mcs = le32_to_cpu(mac_caps->he_supp_mcs_5g); in ath12k_pull_mac_phy_cap_svc_ready_ext()
579 cap_band->he_cap_phy_info[i] = in ath12k_pull_mac_phy_cap_svc_ready_ext()
580 le32_to_cpu(mac_caps->he_cap_phy_info_5g[i]); in ath12k_pull_mac_phy_cap_svc_ready_ext()
582 cap_band->he_ppet.numss_m1 = le32_to_cpu(mac_caps->he_ppet5g.numss_m1); in ath12k_pull_mac_phy_cap_svc_ready_ext()
583 cap_band->he_ppet.ru_bit_mask = le32_to_cpu(mac_caps->he_ppet5g.ru_info); in ath12k_pull_mac_phy_cap_svc_ready_ext()
586 cap_band->he_ppet.ppet16_ppet8_ru3_ru0[i] = in ath12k_pull_mac_phy_cap_svc_ready_ext()
587 le32_to_cpu(mac_caps->he_ppet5g.ppet16_ppet8_ru3_ru0[i]); in ath12k_pull_mac_phy_cap_svc_ready_ext()
589 cap_band = &pdev_cap->band[NL80211_BAND_6GHZ]; in ath12k_pull_mac_phy_cap_svc_ready_ext()
590 cap_band->max_bw_supported = in ath12k_pull_mac_phy_cap_svc_ready_ext()
591 le32_to_cpu(mac_caps->max_bw_supported_5g); in ath12k_pull_mac_phy_cap_svc_ready_ext()
592 cap_band->ht_cap_info = le32_to_cpu(mac_caps->ht_cap_info_5g); in ath12k_pull_mac_phy_cap_svc_ready_ext()
593 cap_band->he_cap_info[0] = le32_to_cpu(mac_caps->he_cap_info_5g); in ath12k_pull_mac_phy_cap_svc_ready_ext()
594 cap_band->he_cap_info[1] = le32_to_cpu(mac_caps->he_cap_info_5g_ext); in ath12k_pull_mac_phy_cap_svc_ready_ext()
595 cap_band->he_mcs = le32_to_cpu(mac_caps->he_supp_mcs_5g); in ath12k_pull_mac_phy_cap_svc_ready_ext()
597 cap_band->he_cap_phy_info[i] = in ath12k_pull_mac_phy_cap_svc_ready_ext()
598 le32_to_cpu(mac_caps->he_cap_phy_info_5g[i]); in ath12k_pull_mac_phy_cap_svc_ready_ext()
600 cap_band->he_ppet.numss_m1 = le32_to_cpu(mac_caps->he_ppet5g.numss_m1); in ath12k_pull_mac_phy_cap_svc_ready_ext()
601 cap_band->he_ppet.ru_bit_mask = le32_to_cpu(mac_caps->he_ppet5g.ru_info); in ath12k_pull_mac_phy_cap_svc_ready_ext()
604 cap_band->he_ppet.ppet16_ppet8_ru3_ru0[i] = in ath12k_pull_mac_phy_cap_svc_ready_ext()
605 le32_to_cpu(mac_caps->he_ppet5g.ppet16_ppet8_ru3_ru0[i]); in ath12k_pull_mac_phy_cap_svc_ready_ext()
621 return -EINVAL; in ath12k_pull_reg_cap_svc_rdy_ext()
623 if (phy_idx >= le32_to_cpu(reg_caps->num_phy)) in ath12k_pull_reg_cap_svc_rdy_ext()
624 return -EINVAL; in ath12k_pull_reg_cap_svc_rdy_ext()
628 param->phy_id = le32_to_cpu(ext_reg_cap->phy_id); in ath12k_pull_reg_cap_svc_rdy_ext()
629 param->eeprom_reg_domain = le32_to_cpu(ext_reg_cap->eeprom_reg_domain); in ath12k_pull_reg_cap_svc_rdy_ext()
630 param->eeprom_reg_domain_ext = in ath12k_pull_reg_cap_svc_rdy_ext()
631 le32_to_cpu(ext_reg_cap->eeprom_reg_domain_ext); in ath12k_pull_reg_cap_svc_rdy_ext()
632 param->regcap1 = le32_to_cpu(ext_reg_cap->regcap1); in ath12k_pull_reg_cap_svc_rdy_ext()
633 param->regcap2 = le32_to_cpu(ext_reg_cap->regcap2); in ath12k_pull_reg_cap_svc_rdy_ext()
634 /* check if param->wireless_mode is needed */ in ath12k_pull_reg_cap_svc_rdy_ext()
635 param->low_2ghz_chan = le32_to_cpu(ext_reg_cap->low_2ghz_chan); in ath12k_pull_reg_cap_svc_rdy_ext()
636 param->high_2ghz_chan = le32_to_cpu(ext_reg_cap->high_2ghz_chan); in ath12k_pull_reg_cap_svc_rdy_ext()
637 param->low_5ghz_chan = le32_to_cpu(ext_reg_cap->low_5ghz_chan); in ath12k_pull_reg_cap_svc_rdy_ext()
638 param->high_5ghz_chan = le32_to_cpu(ext_reg_cap->high_5ghz_chan); in ath12k_pull_reg_cap_svc_rdy_ext()
652 return -EINVAL; in ath12k_pull_service_ready_tlv()
655 cap->phy_capability = le32_to_cpu(ev->phy_capability); in ath12k_pull_service_ready_tlv()
656 cap->max_frag_entry = le32_to_cpu(ev->max_frag_entry); in ath12k_pull_service_ready_tlv()
657 cap->num_rf_chains = le32_to_cpu(ev->num_rf_chains); in ath12k_pull_service_ready_tlv()
658 cap->ht_cap_info = le32_to_cpu(ev->ht_cap_info); in ath12k_pull_service_ready_tlv()
659 cap->vht_cap_info = le32_to_cpu(ev->vht_cap_info); in ath12k_pull_service_ready_tlv()
660 cap->vht_supp_mcs = le32_to_cpu(ev->vht_supp_mcs); in ath12k_pull_service_ready_tlv()
661 cap->hw_min_tx_power = le32_to_cpu(ev->hw_min_tx_power); in ath12k_pull_service_ready_tlv()
662 cap->hw_max_tx_power = le32_to_cpu(ev->hw_max_tx_power); in ath12k_pull_service_ready_tlv()
663 cap->sys_cap_info = le32_to_cpu(ev->sys_cap_info); in ath12k_pull_service_ready_tlv()
664 cap->min_pkt_size_enable = le32_to_cpu(ev->min_pkt_size_enable); in ath12k_pull_service_ready_tlv()
665 cap->max_bcn_ie_size = le32_to_cpu(ev->max_bcn_ie_size); in ath12k_pull_service_ready_tlv()
666 cap->max_num_scan_channels = le32_to_cpu(ev->max_num_scan_channels); in ath12k_pull_service_ready_tlv()
667 cap->max_supported_macs = le32_to_cpu(ev->max_supported_macs); in ath12k_pull_service_ready_tlv()
668 cap->wmi_fw_sub_feat_caps = le32_to_cpu(ev->wmi_fw_sub_feat_caps); in ath12k_pull_service_ready_tlv()
669 cap->txrx_chainmask = le32_to_cpu(ev->txrx_chainmask); in ath12k_pull_service_ready_tlv()
670 cap->default_dbs_hw_mode_index = le32_to_cpu(ev->default_dbs_hw_mode_index); in ath12k_pull_service_ready_tlv()
671 cap->num_msdu_desc = le32_to_cpu(ev->num_msdu_desc); in ath12k_pull_service_ready_tlv()
677 * wmi_service ready event are advertised in b0-b3 (LSB 4-bits) of each
678 * 4-byte word.
688 set_bit(j, wmi->wmi_ab->svc_map); in ath12k_wmi_service_bitmap_copy()
697 struct ath12k_wmi_pdev *wmi_handle = &ab->wmi_ab.wmi[0]; in ath12k_wmi_svc_rdy_parse()
702 if (ath12k_pull_service_ready_tlv(ab, ptr, &ab->target_caps)) in ath12k_wmi_svc_rdy_parse()
703 return -EINVAL; in ath12k_wmi_svc_rdy_parse()
707 if (!svc_ready->wmi_svc_bitmap_done) { in ath12k_wmi_svc_rdy_parse()
712 return -EINVAL; in ath12k_wmi_svc_rdy_parse()
717 svc_ready->wmi_svc_bitmap_done = true; in ath12k_wmi_svc_rdy_parse()
732 ret = ath12k_wmi_tlv_iter(ab, skb->data, skb->len, in ath12k_service_ready_event()
746 struct ath12k_base *ab = ar->ab; in ath12k_wmi_mgmt_get_freq()
749 if (ab->hw_params->single_pdev_only && in ath12k_wmi_mgmt_get_freq()
750 ar->scan.is_roc && in ath12k_wmi_mgmt_get_freq()
751 (info->flags & IEEE80211_TX_CTL_TX_OFFCHAN)) in ath12k_wmi_mgmt_get_freq()
752 freq = ar->scan.roc_freq; in ath12k_wmi_mgmt_get_freq()
760 struct ath12k_base *ab = wmi_ab->ab; in ath12k_wmi_alloc_skb()
768 if (!IS_ALIGNED((unsigned long)skb->data, 4)) in ath12k_wmi_alloc_skb()
772 memset(skb->data, 0, round_len); in ath12k_wmi_alloc_skb()
780 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_mgmt_send()
788 buf_len = min_t(int, frame->len, WMI_MGMT_SEND_DOWNLD_LEN); in ath12k_wmi_mgmt_send()
792 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, len); in ath12k_wmi_mgmt_send()
794 return -ENOMEM; in ath12k_wmi_mgmt_send()
796 cmd = (struct wmi_mgmt_send_cmd *)skb->data; in ath12k_wmi_mgmt_send()
797 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_MGMT_TX_SEND_CMD, in ath12k_wmi_mgmt_send()
799 cmd->vdev_id = cpu_to_le32(vdev_id); in ath12k_wmi_mgmt_send()
800 cmd->desc_id = cpu_to_le32(buf_id); in ath12k_wmi_mgmt_send()
801 cmd->chanfreq = cpu_to_le32(ath12k_wmi_mgmt_get_freq(ar, info)); in ath12k_wmi_mgmt_send()
802 cmd->paddr_lo = cpu_to_le32(lower_32_bits(ATH12K_SKB_CB(frame)->paddr)); in ath12k_wmi_mgmt_send()
803 cmd->paddr_hi = cpu_to_le32(upper_32_bits(ATH12K_SKB_CB(frame)->paddr)); in ath12k_wmi_mgmt_send()
804 cmd->frame_len = cpu_to_le32(frame->len); in ath12k_wmi_mgmt_send()
805 cmd->buf_len = cpu_to_le32(buf_len); in ath12k_wmi_mgmt_send()
806 cmd->tx_params_valid = 0; in ath12k_wmi_mgmt_send()
808 frame_tlv = (struct wmi_tlv *)(skb->data + sizeof(*cmd)); in ath12k_wmi_mgmt_send()
809 frame_tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_BYTE, buf_len); in ath12k_wmi_mgmt_send()
811 memcpy(frame_tlv->value, frame->data, buf_len); in ath12k_wmi_mgmt_send()
815 ath12k_warn(ar->ab, in ath12k_wmi_mgmt_send()
826 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_send_stats_request_cmd()
831 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_send_stats_request_cmd()
833 return -ENOMEM; in ath12k_wmi_send_stats_request_cmd()
835 cmd = (struct wmi_request_stats_cmd *)skb->data; in ath12k_wmi_send_stats_request_cmd()
836 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_REQUEST_STATS_CMD, in ath12k_wmi_send_stats_request_cmd()
839 cmd->stats_id = cpu_to_le32(stats_id); in ath12k_wmi_send_stats_request_cmd()
840 cmd->vdev_id = cpu_to_le32(vdev_id); in ath12k_wmi_send_stats_request_cmd()
841 cmd->pdev_id = cpu_to_le32(pdev_id); in ath12k_wmi_send_stats_request_cmd()
845 ath12k_warn(ar->ab, "failed to send WMI_REQUEST_STATS cmd\n"); in ath12k_wmi_send_stats_request_cmd()
849 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_send_stats_request_cmd()
859 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_vdev_create()
863 bool is_ml_vdev = is_valid_ether_addr(args->mld_addr); in ath12k_wmi_vdev_create()
877 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, len); in ath12k_wmi_vdev_create()
879 return -ENOMEM; in ath12k_wmi_vdev_create()
881 cmd = (struct wmi_vdev_create_cmd *)skb->data; in ath12k_wmi_vdev_create()
882 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_VDEV_CREATE_CMD, in ath12k_wmi_vdev_create()
885 cmd->vdev_id = cpu_to_le32(args->if_id); in ath12k_wmi_vdev_create()
886 cmd->vdev_type = cpu_to_le32(args->type); in ath12k_wmi_vdev_create()
887 cmd->vdev_subtype = cpu_to_le32(args->subtype); in ath12k_wmi_vdev_create()
888 cmd->num_cfg_txrx_streams = cpu_to_le32(WMI_NUM_SUPPORTED_BAND_MAX); in ath12k_wmi_vdev_create()
889 cmd->pdev_id = cpu_to_le32(args->pdev_id); in ath12k_wmi_vdev_create()
890 cmd->mbssid_flags = cpu_to_le32(args->mbssid_flags); in ath12k_wmi_vdev_create()
891 cmd->mbssid_tx_vdev_id = cpu_to_le32(args->mbssid_tx_vdev_id); in ath12k_wmi_vdev_create()
892 cmd->vdev_stats_id = cpu_to_le32(args->if_stats_id); in ath12k_wmi_vdev_create()
893 ether_addr_copy(cmd->vdev_macaddr.addr, macaddr); in ath12k_wmi_vdev_create()
895 if (args->if_stats_id != ATH12K_INVAL_VDEV_STATS_ID) in ath12k_wmi_vdev_create()
896 cmd->vdev_stats_id_valid = cpu_to_le32(BIT(0)); in ath12k_wmi_vdev_create()
898 ptr = skb->data + sizeof(*cmd); in ath12k_wmi_vdev_create()
902 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_STRUCT, len); in ath12k_wmi_vdev_create()
907 txrx_streams->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_VDEV_TXRX_STREAMS, in ath12k_wmi_vdev_create()
909 txrx_streams->band = cpu_to_le32(WMI_TPC_CHAINMASK_CONFIG_BAND_2G); in ath12k_wmi_vdev_create()
910 txrx_streams->supported_tx_streams = in ath12k_wmi_vdev_create()
911 cpu_to_le32(args->chains[NL80211_BAND_2GHZ].tx); in ath12k_wmi_vdev_create()
912 txrx_streams->supported_rx_streams = in ath12k_wmi_vdev_create()
913 cpu_to_le32(args->chains[NL80211_BAND_2GHZ].rx); in ath12k_wmi_vdev_create()
916 txrx_streams->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_VDEV_TXRX_STREAMS, in ath12k_wmi_vdev_create()
918 txrx_streams->band = cpu_to_le32(WMI_TPC_CHAINMASK_CONFIG_BAND_5G); in ath12k_wmi_vdev_create()
919 txrx_streams->supported_tx_streams = in ath12k_wmi_vdev_create()
920 cpu_to_le32(args->chains[NL80211_BAND_5GHZ].tx); in ath12k_wmi_vdev_create()
921 txrx_streams->supported_rx_streams = in ath12k_wmi_vdev_create()
922 cpu_to_le32(args->chains[NL80211_BAND_5GHZ].rx); in ath12k_wmi_vdev_create()
928 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_STRUCT, in ath12k_wmi_vdev_create()
933 ml_params->tlv_header = in ath12k_wmi_vdev_create()
936 ether_addr_copy(ml_params->mld_macaddr.addr, args->mld_addr); in ath12k_wmi_vdev_create()
939 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_vdev_create()
941 args->if_id, args->type, args->subtype, in ath12k_wmi_vdev_create()
942 macaddr, args->pdev_id); in ath12k_wmi_vdev_create()
946 ath12k_warn(ar->ab, in ath12k_wmi_vdev_create()
956 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_vdev_delete()
961 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_vdev_delete()
963 return -ENOMEM; in ath12k_wmi_vdev_delete()
965 cmd = (struct wmi_vdev_delete_cmd *)skb->data; in ath12k_wmi_vdev_delete()
966 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_VDEV_DELETE_CMD, in ath12k_wmi_vdev_delete()
968 cmd->vdev_id = cpu_to_le32(vdev_id); in ath12k_wmi_vdev_delete()
970 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, "WMI vdev delete id %d\n", vdev_id); in ath12k_wmi_vdev_delete()
974 ath12k_warn(ar->ab, "failed to submit WMI_VDEV_DELETE_CMDID\n"); in ath12k_wmi_vdev_delete()
983 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_vdev_stop()
988 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_vdev_stop()
990 return -ENOMEM; in ath12k_wmi_vdev_stop()
992 cmd = (struct wmi_vdev_stop_cmd *)skb->data; in ath12k_wmi_vdev_stop()
994 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_VDEV_STOP_CMD, in ath12k_wmi_vdev_stop()
996 cmd->vdev_id = cpu_to_le32(vdev_id); in ath12k_wmi_vdev_stop()
998 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, "WMI vdev stop id 0x%x\n", vdev_id); in ath12k_wmi_vdev_stop()
1002 ath12k_warn(ar->ab, "failed to submit WMI_VDEV_STOP cmd\n"); in ath12k_wmi_vdev_stop()
1011 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_vdev_down()
1016 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_vdev_down()
1018 return -ENOMEM; in ath12k_wmi_vdev_down()
1020 cmd = (struct wmi_vdev_down_cmd *)skb->data; in ath12k_wmi_vdev_down()
1022 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_VDEV_DOWN_CMD, in ath12k_wmi_vdev_down()
1024 cmd->vdev_id = cpu_to_le32(vdev_id); in ath12k_wmi_vdev_down()
1026 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, "WMI vdev down id 0x%x\n", vdev_id); in ath12k_wmi_vdev_down()
1030 ath12k_warn(ar->ab, "failed to submit WMI_VDEV_DOWN cmd\n"); in ath12k_wmi_vdev_down()
1042 chan->mhz = cpu_to_le32(arg->freq); in ath12k_wmi_put_wmi_channel()
1043 chan->band_center_freq1 = cpu_to_le32(arg->band_center_freq1); in ath12k_wmi_put_wmi_channel()
1044 if (arg->mode == MODE_11AC_VHT80_80) in ath12k_wmi_put_wmi_channel()
1045 chan->band_center_freq2 = cpu_to_le32(arg->band_center_freq2); in ath12k_wmi_put_wmi_channel()
1047 chan->band_center_freq2 = 0; in ath12k_wmi_put_wmi_channel()
1049 chan->info |= le32_encode_bits(arg->mode, WMI_CHAN_INFO_MODE); in ath12k_wmi_put_wmi_channel()
1050 if (arg->passive) in ath12k_wmi_put_wmi_channel()
1051 chan->info |= cpu_to_le32(WMI_CHAN_INFO_PASSIVE); in ath12k_wmi_put_wmi_channel()
1052 if (arg->allow_ibss) in ath12k_wmi_put_wmi_channel()
1053 chan->info |= cpu_to_le32(WMI_CHAN_INFO_ADHOC_ALLOWED); in ath12k_wmi_put_wmi_channel()
1054 if (arg->allow_ht) in ath12k_wmi_put_wmi_channel()
1055 chan->info |= cpu_to_le32(WMI_CHAN_INFO_ALLOW_HT); in ath12k_wmi_put_wmi_channel()
1056 if (arg->allow_vht) in ath12k_wmi_put_wmi_channel()
1057 chan->info |= cpu_to_le32(WMI_CHAN_INFO_ALLOW_VHT); in ath12k_wmi_put_wmi_channel()
1058 if (arg->allow_he) in ath12k_wmi_put_wmi_channel()
1059 chan->info |= cpu_to_le32(WMI_CHAN_INFO_ALLOW_HE); in ath12k_wmi_put_wmi_channel()
1060 if (arg->ht40plus) in ath12k_wmi_put_wmi_channel()
1061 chan->info |= cpu_to_le32(WMI_CHAN_INFO_HT40_PLUS); in ath12k_wmi_put_wmi_channel()
1062 if (arg->chan_radar) in ath12k_wmi_put_wmi_channel()
1063 chan->info |= cpu_to_le32(WMI_CHAN_INFO_DFS); in ath12k_wmi_put_wmi_channel()
1064 if (arg->freq2_radar) in ath12k_wmi_put_wmi_channel()
1065 chan->info |= cpu_to_le32(WMI_CHAN_INFO_DFS_FREQ2); in ath12k_wmi_put_wmi_channel()
1067 chan->reg_info_1 = le32_encode_bits(arg->max_power, in ath12k_wmi_put_wmi_channel()
1069 le32_encode_bits(arg->max_reg_power, in ath12k_wmi_put_wmi_channel()
1072 chan->reg_info_2 = le32_encode_bits(arg->max_antenna_gain, in ath12k_wmi_put_wmi_channel()
1074 le32_encode_bits(arg->max_power, WMI_CHAN_REG_INFO2_MAX_TX_PWR); in ath12k_wmi_put_wmi_channel()
1082 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_vdev_start()
1090 if (WARN_ON(arg->ssid_len > sizeof(cmd->ssid.ssid))) in ath12k_wmi_vdev_start()
1091 return -EINVAL; in ath12k_wmi_vdev_start()
1095 if (!restart && arg->ml.enabled) { in ath12k_wmi_vdev_start()
1097 TLV_HDR_SIZE + (arg->ml.num_partner_links * in ath12k_wmi_vdev_start()
1101 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, len); in ath12k_wmi_vdev_start()
1103 return -ENOMEM; in ath12k_wmi_vdev_start()
1105 cmd = (struct wmi_vdev_start_request_cmd *)skb->data; in ath12k_wmi_vdev_start()
1106 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_VDEV_START_REQUEST_CMD, in ath12k_wmi_vdev_start()
1108 cmd->vdev_id = cpu_to_le32(arg->vdev_id); in ath12k_wmi_vdev_start()
1109 cmd->beacon_interval = cpu_to_le32(arg->bcn_intval); in ath12k_wmi_vdev_start()
1110 cmd->bcn_tx_rate = cpu_to_le32(arg->bcn_tx_rate); in ath12k_wmi_vdev_start()
1111 cmd->dtim_period = cpu_to_le32(arg->dtim_period); in ath12k_wmi_vdev_start()
1112 cmd->num_noa_descriptors = cpu_to_le32(arg->num_noa_descriptors); in ath12k_wmi_vdev_start()
1113 cmd->preferred_rx_streams = cpu_to_le32(arg->pref_rx_streams); in ath12k_wmi_vdev_start()
1114 cmd->preferred_tx_streams = cpu_to_le32(arg->pref_tx_streams); in ath12k_wmi_vdev_start()
1115 cmd->cac_duration_ms = cpu_to_le32(arg->cac_duration_ms); in ath12k_wmi_vdev_start()
1116 cmd->regdomain = cpu_to_le32(arg->regdomain); in ath12k_wmi_vdev_start()
1117 cmd->he_ops = cpu_to_le32(arg->he_ops); in ath12k_wmi_vdev_start()
1118 cmd->punct_bitmap = cpu_to_le32(arg->punct_bitmap); in ath12k_wmi_vdev_start()
1119 cmd->mbssid_flags = cpu_to_le32(arg->mbssid_flags); in ath12k_wmi_vdev_start()
1120 cmd->mbssid_tx_vdev_id = cpu_to_le32(arg->mbssid_tx_vdev_id); in ath12k_wmi_vdev_start()
1123 if (arg->ssid) { in ath12k_wmi_vdev_start()
1124 cmd->ssid.ssid_len = cpu_to_le32(arg->ssid_len); in ath12k_wmi_vdev_start()
1125 memcpy(cmd->ssid.ssid, arg->ssid, arg->ssid_len); in ath12k_wmi_vdev_start()
1127 if (arg->hidden_ssid) in ath12k_wmi_vdev_start()
1128 cmd->flags |= cpu_to_le32(WMI_VDEV_START_HIDDEN_SSID); in ath12k_wmi_vdev_start()
1129 if (arg->pmf_enabled) in ath12k_wmi_vdev_start()
1130 cmd->flags |= cpu_to_le32(WMI_VDEV_START_PMF_ENABLED); in ath12k_wmi_vdev_start()
1133 cmd->flags |= cpu_to_le32(WMI_VDEV_START_LDPC_RX_ENABLED); in ath12k_wmi_vdev_start()
1135 ptr = skb->data + sizeof(*cmd); in ath12k_wmi_vdev_start()
1140 chan->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_CHANNEL, in ath12k_wmi_vdev_start()
1145 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_STRUCT, 0); in ath12k_wmi_vdev_start()
1155 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_STRUCT, in ath12k_wmi_vdev_start()
1161 ml_params->tlv_header = in ath12k_wmi_vdev_start()
1165 ml_params->flags = le32_encode_bits(arg->ml.enabled, in ath12k_wmi_vdev_start()
1167 le32_encode_bits(arg->ml.assoc_link, in ath12k_wmi_vdev_start()
1169 le32_encode_bits(arg->ml.mcast_link, in ath12k_wmi_vdev_start()
1171 le32_encode_bits(arg->ml.link_add, in ath12k_wmi_vdev_start()
1174 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, "vdev %d start ml flags 0x%x\n", in ath12k_wmi_vdev_start()
1175 arg->vdev_id, ml_params->flags); in ath12k_wmi_vdev_start()
1180 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_STRUCT, in ath12k_wmi_vdev_start()
1181 arg->ml.num_partner_links * in ath12k_wmi_vdev_start()
1187 for (i = 0; i < arg->ml.num_partner_links; i++) { in ath12k_wmi_vdev_start()
1188 partner_info->tlv_header = in ath12k_wmi_vdev_start()
1191 partner_info->vdev_id = in ath12k_wmi_vdev_start()
1192 cpu_to_le32(arg->ml.partner_info[i].vdev_id); in ath12k_wmi_vdev_start()
1193 partner_info->hw_link_id = in ath12k_wmi_vdev_start()
1194 cpu_to_le32(arg->ml.partner_info[i].hw_link_id); in ath12k_wmi_vdev_start()
1195 ether_addr_copy(partner_info->vdev_addr.addr, in ath12k_wmi_vdev_start()
1196 arg->ml.partner_info[i].addr); in ath12k_wmi_vdev_start()
1198 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, "partner vdev %d hw_link_id %d macaddr%pM\n", in ath12k_wmi_vdev_start()
1199 partner_info->vdev_id, partner_info->hw_link_id, in ath12k_wmi_vdev_start()
1200 partner_info->vdev_addr.addr); in ath12k_wmi_vdev_start()
1208 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, "vdev %s id 0x%x freq 0x%x mode 0x%x\n", in ath12k_wmi_vdev_start()
1209 restart ? "restart" : "start", arg->vdev_id, in ath12k_wmi_vdev_start()
1210 arg->freq, arg->mode); in ath12k_wmi_vdev_start()
1219 ath12k_warn(ar->ab, "failed to submit vdev_%s cmd\n", in ath12k_wmi_vdev_start()
1229 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_vdev_up()
1234 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_vdev_up()
1236 return -ENOMEM; in ath12k_wmi_vdev_up()
1238 cmd = (struct wmi_vdev_up_cmd *)skb->data; in ath12k_wmi_vdev_up()
1240 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_VDEV_UP_CMD, in ath12k_wmi_vdev_up()
1242 cmd->vdev_id = cpu_to_le32(params->vdev_id); in ath12k_wmi_vdev_up()
1243 cmd->vdev_assoc_id = cpu_to_le32(params->aid); in ath12k_wmi_vdev_up()
1245 ether_addr_copy(cmd->vdev_bssid.addr, params->bssid); in ath12k_wmi_vdev_up()
1247 if (params->tx_bssid) { in ath12k_wmi_vdev_up()
1248 ether_addr_copy(cmd->tx_vdev_bssid.addr, params->tx_bssid); in ath12k_wmi_vdev_up()
1249 cmd->nontx_profile_idx = cpu_to_le32(params->nontx_profile_idx); in ath12k_wmi_vdev_up()
1250 cmd->nontx_profile_cnt = cpu_to_le32(params->nontx_profile_cnt); in ath12k_wmi_vdev_up()
1253 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_vdev_up()
1255 params->vdev_id, params->aid, params->bssid); in ath12k_wmi_vdev_up()
1259 ath12k_warn(ar->ab, "failed to submit WMI_VDEV_UP cmd\n"); in ath12k_wmi_vdev_up()
1269 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_send_peer_create_cmd()
1279 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, len); in ath12k_wmi_send_peer_create_cmd()
1281 return -ENOMEM; in ath12k_wmi_send_peer_create_cmd()
1283 cmd = (struct wmi_peer_create_cmd *)skb->data; in ath12k_wmi_send_peer_create_cmd()
1284 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_PEER_CREATE_CMD, in ath12k_wmi_send_peer_create_cmd()
1287 ether_addr_copy(cmd->peer_macaddr.addr, arg->peer_addr); in ath12k_wmi_send_peer_create_cmd()
1288 cmd->peer_type = cpu_to_le32(arg->peer_type); in ath12k_wmi_send_peer_create_cmd()
1289 cmd->vdev_id = cpu_to_le32(arg->vdev_id); in ath12k_wmi_send_peer_create_cmd()
1291 ptr = skb->data + sizeof(*cmd); in ath12k_wmi_send_peer_create_cmd()
1293 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_STRUCT, in ath12k_wmi_send_peer_create_cmd()
1297 ml_param->tlv_header = in ath12k_wmi_send_peer_create_cmd()
1300 if (arg->ml_enabled) in ath12k_wmi_send_peer_create_cmd()
1301 ml_param->flags = cpu_to_le32(ATH12K_WMI_FLAG_MLO_ENABLED); in ath12k_wmi_send_peer_create_cmd()
1305 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_send_peer_create_cmd()
1307 arg->vdev_id, arg->peer_addr, ml_param->flags); in ath12k_wmi_send_peer_create_cmd()
1311 ath12k_warn(ar->ab, "failed to submit WMI_PEER_CREATE cmd\n"); in ath12k_wmi_send_peer_create_cmd()
1321 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_send_peer_delete_cmd()
1326 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_send_peer_delete_cmd()
1328 return -ENOMEM; in ath12k_wmi_send_peer_delete_cmd()
1330 cmd = (struct wmi_peer_delete_cmd *)skb->data; in ath12k_wmi_send_peer_delete_cmd()
1331 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_PEER_DELETE_CMD, in ath12k_wmi_send_peer_delete_cmd()
1334 ether_addr_copy(cmd->peer_macaddr.addr, peer_addr); in ath12k_wmi_send_peer_delete_cmd()
1335 cmd->vdev_id = cpu_to_le32(vdev_id); in ath12k_wmi_send_peer_delete_cmd()
1337 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_send_peer_delete_cmd()
1343 ath12k_warn(ar->ab, "failed to send WMI_PEER_DELETE cmd\n"); in ath12k_wmi_send_peer_delete_cmd()
1353 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_send_pdev_set_regdomain()
1358 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_send_pdev_set_regdomain()
1360 return -ENOMEM; in ath12k_wmi_send_pdev_set_regdomain()
1362 cmd = (struct wmi_pdev_set_regdomain_cmd *)skb->data; in ath12k_wmi_send_pdev_set_regdomain()
1363 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_PDEV_SET_REGDOMAIN_CMD, in ath12k_wmi_send_pdev_set_regdomain()
1366 cmd->reg_domain = cpu_to_le32(arg->current_rd_in_use); in ath12k_wmi_send_pdev_set_regdomain()
1367 cmd->reg_domain_2g = cpu_to_le32(arg->current_rd_2g); in ath12k_wmi_send_pdev_set_regdomain()
1368 cmd->reg_domain_5g = cpu_to_le32(arg->current_rd_5g); in ath12k_wmi_send_pdev_set_regdomain()
1369 cmd->conformance_test_limit_2g = cpu_to_le32(arg->ctl_2g); in ath12k_wmi_send_pdev_set_regdomain()
1370 cmd->conformance_test_limit_5g = cpu_to_le32(arg->ctl_5g); in ath12k_wmi_send_pdev_set_regdomain()
1371 cmd->dfs_domain = cpu_to_le32(arg->dfs_domain); in ath12k_wmi_send_pdev_set_regdomain()
1372 cmd->pdev_id = cpu_to_le32(arg->pdev_id); in ath12k_wmi_send_pdev_set_regdomain()
1374 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_send_pdev_set_regdomain()
1376 arg->current_rd_in_use, arg->current_rd_2g, in ath12k_wmi_send_pdev_set_regdomain()
1377 arg->current_rd_5g, arg->dfs_domain, arg->pdev_id); in ath12k_wmi_send_pdev_set_regdomain()
1381 ath12k_warn(ar->ab, in ath12k_wmi_send_pdev_set_regdomain()
1392 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_set_peer_param()
1397 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_set_peer_param()
1399 return -ENOMEM; in ath12k_wmi_set_peer_param()
1401 cmd = (struct wmi_peer_set_param_cmd *)skb->data; in ath12k_wmi_set_peer_param()
1402 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_PEER_SET_PARAM_CMD, in ath12k_wmi_set_peer_param()
1404 ether_addr_copy(cmd->peer_macaddr.addr, peer_addr); in ath12k_wmi_set_peer_param()
1405 cmd->vdev_id = cpu_to_le32(vdev_id); in ath12k_wmi_set_peer_param()
1406 cmd->param_id = cpu_to_le32(param_id); in ath12k_wmi_set_peer_param()
1407 cmd->param_value = cpu_to_le32(param_val); in ath12k_wmi_set_peer_param()
1409 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_set_peer_param()
1415 ath12k_warn(ar->ab, "failed to send WMI_PEER_SET_PARAM cmd\n"); in ath12k_wmi_set_peer_param()
1427 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_send_peer_flush_tids_cmd()
1432 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_send_peer_flush_tids_cmd()
1434 return -ENOMEM; in ath12k_wmi_send_peer_flush_tids_cmd()
1436 cmd = (struct wmi_peer_flush_tids_cmd *)skb->data; in ath12k_wmi_send_peer_flush_tids_cmd()
1437 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_PEER_FLUSH_TIDS_CMD, in ath12k_wmi_send_peer_flush_tids_cmd()
1440 ether_addr_copy(cmd->peer_macaddr.addr, peer_addr); in ath12k_wmi_send_peer_flush_tids_cmd()
1441 cmd->peer_tid_bitmap = cpu_to_le32(peer_tid_bitmap); in ath12k_wmi_send_peer_flush_tids_cmd()
1442 cmd->vdev_id = cpu_to_le32(vdev_id); in ath12k_wmi_send_peer_flush_tids_cmd()
1444 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_send_peer_flush_tids_cmd()
1450 ath12k_warn(ar->ab, in ath12k_wmi_send_peer_flush_tids_cmd()
1468 skb = ath12k_wmi_alloc_skb(ar->wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_peer_rx_reorder_queue_setup()
1470 return -ENOMEM; in ath12k_wmi_peer_rx_reorder_queue_setup()
1472 cmd = (struct wmi_peer_reorder_queue_setup_cmd *)skb->data; in ath12k_wmi_peer_rx_reorder_queue_setup()
1473 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_REORDER_QUEUE_SETUP_CMD, in ath12k_wmi_peer_rx_reorder_queue_setup()
1476 ether_addr_copy(cmd->peer_macaddr.addr, addr); in ath12k_wmi_peer_rx_reorder_queue_setup()
1477 cmd->vdev_id = cpu_to_le32(vdev_id); in ath12k_wmi_peer_rx_reorder_queue_setup()
1478 cmd->tid = cpu_to_le32(tid); in ath12k_wmi_peer_rx_reorder_queue_setup()
1479 cmd->queue_ptr_lo = cpu_to_le32(lower_32_bits(paddr)); in ath12k_wmi_peer_rx_reorder_queue_setup()
1480 cmd->queue_ptr_hi = cpu_to_le32(upper_32_bits(paddr)); in ath12k_wmi_peer_rx_reorder_queue_setup()
1481 cmd->queue_no = cpu_to_le32(tid); in ath12k_wmi_peer_rx_reorder_queue_setup()
1482 cmd->ba_window_size_valid = cpu_to_le32(ba_window_size_valid); in ath12k_wmi_peer_rx_reorder_queue_setup()
1483 cmd->ba_window_size = cpu_to_le32(ba_window_size); in ath12k_wmi_peer_rx_reorder_queue_setup()
1485 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_peer_rx_reorder_queue_setup()
1489 ret = ath12k_wmi_cmd_send(ar->wmi, skb, in ath12k_wmi_peer_rx_reorder_queue_setup()
1492 ath12k_warn(ar->ab, in ath12k_wmi_peer_rx_reorder_queue_setup()
1504 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_rx_reord_queue_remove()
1509 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_rx_reord_queue_remove()
1511 return -ENOMEM; in ath12k_wmi_rx_reord_queue_remove()
1513 cmd = (struct wmi_peer_reorder_queue_remove_cmd *)skb->data; in ath12k_wmi_rx_reord_queue_remove()
1514 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_REORDER_QUEUE_REMOVE_CMD, in ath12k_wmi_rx_reord_queue_remove()
1517 ether_addr_copy(cmd->peer_macaddr.addr, arg->peer_macaddr); in ath12k_wmi_rx_reord_queue_remove()
1518 cmd->vdev_id = cpu_to_le32(arg->vdev_id); in ath12k_wmi_rx_reord_queue_remove()
1519 cmd->tid_mask = cpu_to_le32(arg->peer_tid_bitmap); in ath12k_wmi_rx_reord_queue_remove()
1521 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_rx_reord_queue_remove()
1523 arg->peer_macaddr, arg->vdev_id, arg->peer_tid_bitmap); in ath12k_wmi_rx_reord_queue_remove()
1528 ath12k_warn(ar->ab, in ath12k_wmi_rx_reord_queue_remove()
1539 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_pdev_set_param()
1544 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_pdev_set_param()
1546 return -ENOMEM; in ath12k_wmi_pdev_set_param()
1548 cmd = (struct wmi_pdev_set_param_cmd *)skb->data; in ath12k_wmi_pdev_set_param()
1549 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_PDEV_SET_PARAM_CMD, in ath12k_wmi_pdev_set_param()
1551 cmd->pdev_id = cpu_to_le32(pdev_id); in ath12k_wmi_pdev_set_param()
1552 cmd->param_id = cpu_to_le32(param_id); in ath12k_wmi_pdev_set_param()
1553 cmd->param_value = cpu_to_le32(param_value); in ath12k_wmi_pdev_set_param()
1555 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_pdev_set_param()
1561 ath12k_warn(ar->ab, "failed to send WMI_PDEV_SET_PARAM cmd\n"); in ath12k_wmi_pdev_set_param()
1570 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_pdev_set_ps_mode()
1575 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_pdev_set_ps_mode()
1577 return -ENOMEM; in ath12k_wmi_pdev_set_ps_mode()
1579 cmd = (struct wmi_pdev_set_ps_mode_cmd *)skb->data; in ath12k_wmi_pdev_set_ps_mode()
1580 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_STA_POWERSAVE_MODE_CMD, in ath12k_wmi_pdev_set_ps_mode()
1582 cmd->vdev_id = cpu_to_le32(vdev_id); in ath12k_wmi_pdev_set_ps_mode()
1583 cmd->sta_ps_mode = cpu_to_le32(enable); in ath12k_wmi_pdev_set_ps_mode()
1585 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_pdev_set_ps_mode()
1591 ath12k_warn(ar->ab, "failed to send WMI_PDEV_SET_PARAM cmd\n"); in ath12k_wmi_pdev_set_ps_mode()
1601 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_pdev_suspend()
1606 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_pdev_suspend()
1608 return -ENOMEM; in ath12k_wmi_pdev_suspend()
1610 cmd = (struct wmi_pdev_suspend_cmd *)skb->data; in ath12k_wmi_pdev_suspend()
1612 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_PDEV_SUSPEND_CMD, in ath12k_wmi_pdev_suspend()
1615 cmd->suspend_opt = cpu_to_le32(suspend_opt); in ath12k_wmi_pdev_suspend()
1616 cmd->pdev_id = cpu_to_le32(pdev_id); in ath12k_wmi_pdev_suspend()
1618 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_pdev_suspend()
1623 ath12k_warn(ar->ab, "failed to send WMI_PDEV_SUSPEND cmd\n"); in ath12k_wmi_pdev_suspend()
1632 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_pdev_resume()
1637 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_pdev_resume()
1639 return -ENOMEM; in ath12k_wmi_pdev_resume()
1641 cmd = (struct wmi_pdev_resume_cmd *)skb->data; in ath12k_wmi_pdev_resume()
1643 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_PDEV_RESUME_CMD, in ath12k_wmi_pdev_resume()
1645 cmd->pdev_id = cpu_to_le32(pdev_id); in ath12k_wmi_pdev_resume()
1647 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_pdev_resume()
1652 ath12k_warn(ar->ab, "failed to send WMI_PDEV_RESUME cmd\n"); in ath12k_wmi_pdev_resume()
1666 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_pdev_bss_chan_info_request()
1671 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_pdev_bss_chan_info_request()
1673 return -ENOMEM; in ath12k_wmi_pdev_bss_chan_info_request()
1675 cmd = (struct wmi_pdev_bss_chan_info_req_cmd *)skb->data; in ath12k_wmi_pdev_bss_chan_info_request()
1677 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_PDEV_BSS_CHAN_INFO_REQUEST, in ath12k_wmi_pdev_bss_chan_info_request()
1679 cmd->req_type = cpu_to_le32(type); in ath12k_wmi_pdev_bss_chan_info_request()
1680 cmd->pdev_id = cpu_to_le32(ar->pdev->pdev_id); in ath12k_wmi_pdev_bss_chan_info_request()
1682 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_pdev_bss_chan_info_request()
1688 ath12k_warn(ar->ab, in ath12k_wmi_pdev_bss_chan_info_request()
1699 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_send_set_ap_ps_param_cmd()
1704 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_send_set_ap_ps_param_cmd()
1706 return -ENOMEM; in ath12k_wmi_send_set_ap_ps_param_cmd()
1708 cmd = (struct wmi_ap_ps_peer_cmd *)skb->data; in ath12k_wmi_send_set_ap_ps_param_cmd()
1709 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_AP_PS_PEER_CMD, in ath12k_wmi_send_set_ap_ps_param_cmd()
1712 cmd->vdev_id = cpu_to_le32(arg->vdev_id); in ath12k_wmi_send_set_ap_ps_param_cmd()
1713 ether_addr_copy(cmd->peer_macaddr.addr, peer_addr); in ath12k_wmi_send_set_ap_ps_param_cmd()
1714 cmd->param = cpu_to_le32(arg->param); in ath12k_wmi_send_set_ap_ps_param_cmd()
1715 cmd->value = cpu_to_le32(arg->value); in ath12k_wmi_send_set_ap_ps_param_cmd()
1717 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_send_set_ap_ps_param_cmd()
1719 arg->vdev_id, peer_addr, arg->param, arg->value); in ath12k_wmi_send_set_ap_ps_param_cmd()
1723 ath12k_warn(ar->ab, in ath12k_wmi_send_set_ap_ps_param_cmd()
1734 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_set_sta_ps_param()
1739 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_set_sta_ps_param()
1741 return -ENOMEM; in ath12k_wmi_set_sta_ps_param()
1743 cmd = (struct wmi_sta_powersave_param_cmd *)skb->data; in ath12k_wmi_set_sta_ps_param()
1744 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_STA_POWERSAVE_PARAM_CMD, in ath12k_wmi_set_sta_ps_param()
1747 cmd->vdev_id = cpu_to_le32(vdev_id); in ath12k_wmi_set_sta_ps_param()
1748 cmd->param = cpu_to_le32(param); in ath12k_wmi_set_sta_ps_param()
1749 cmd->value = cpu_to_le32(param_value); in ath12k_wmi_set_sta_ps_param()
1751 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_set_sta_ps_param()
1757 ath12k_warn(ar->ab, "failed to send WMI_STA_POWERSAVE_PARAM_CMDID"); in ath12k_wmi_set_sta_ps_param()
1766 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_force_fw_hang_cmd()
1773 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, len); in ath12k_wmi_force_fw_hang_cmd()
1775 return -ENOMEM; in ath12k_wmi_force_fw_hang_cmd()
1777 cmd = (struct wmi_force_fw_hang_cmd *)skb->data; in ath12k_wmi_force_fw_hang_cmd()
1778 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_FORCE_FW_HANG_CMD, in ath12k_wmi_force_fw_hang_cmd()
1781 cmd->type = cpu_to_le32(type); in ath12k_wmi_force_fw_hang_cmd()
1782 cmd->delay_time_ms = cpu_to_le32(delay_time_ms); in ath12k_wmi_force_fw_hang_cmd()
1787 ath12k_warn(ar->ab, "Failed to send WMI_FORCE_FW_HANG_CMDID"); in ath12k_wmi_force_fw_hang_cmd()
1796 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_vdev_set_param_cmd()
1801 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_vdev_set_param_cmd()
1803 return -ENOMEM; in ath12k_wmi_vdev_set_param_cmd()
1805 cmd = (struct wmi_vdev_set_param_cmd *)skb->data; in ath12k_wmi_vdev_set_param_cmd()
1806 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_VDEV_SET_PARAM_CMD, in ath12k_wmi_vdev_set_param_cmd()
1809 cmd->vdev_id = cpu_to_le32(vdev_id); in ath12k_wmi_vdev_set_param_cmd()
1810 cmd->param_id = cpu_to_le32(param_id); in ath12k_wmi_vdev_set_param_cmd()
1811 cmd->param_value = cpu_to_le32(param_value); in ath12k_wmi_vdev_set_param_cmd()
1813 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_vdev_set_param_cmd()
1819 ath12k_warn(ar->ab, in ath12k_wmi_vdev_set_param_cmd()
1829 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_send_pdev_temperature_cmd()
1834 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_send_pdev_temperature_cmd()
1836 return -ENOMEM; in ath12k_wmi_send_pdev_temperature_cmd()
1838 cmd = (struct wmi_get_pdev_temperature_cmd *)skb->data; in ath12k_wmi_send_pdev_temperature_cmd()
1839 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_PDEV_GET_TEMPERATURE_CMD, in ath12k_wmi_send_pdev_temperature_cmd()
1841 cmd->pdev_id = cpu_to_le32(ar->pdev->pdev_id); in ath12k_wmi_send_pdev_temperature_cmd()
1843 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_send_pdev_temperature_cmd()
1844 "WMI pdev get temperature for pdev_id %d\n", ar->pdev->pdev_id); in ath12k_wmi_send_pdev_temperature_cmd()
1848 ath12k_warn(ar->ab, "failed to send WMI_PDEV_GET_TEMPERATURE cmd\n"); in ath12k_wmi_send_pdev_temperature_cmd()
1858 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_send_bcn_offload_control_cmd()
1863 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_send_bcn_offload_control_cmd()
1865 return -ENOMEM; in ath12k_wmi_send_bcn_offload_control_cmd()
1867 cmd = (struct wmi_bcn_offload_ctrl_cmd *)skb->data; in ath12k_wmi_send_bcn_offload_control_cmd()
1868 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_BCN_OFFLOAD_CTRL_CMD, in ath12k_wmi_send_bcn_offload_control_cmd()
1871 cmd->vdev_id = cpu_to_le32(vdev_id); in ath12k_wmi_send_bcn_offload_control_cmd()
1872 cmd->bcn_ctrl_op = cpu_to_le32(bcn_ctrl_op); in ath12k_wmi_send_bcn_offload_control_cmd()
1874 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_send_bcn_offload_control_cmd()
1880 ath12k_warn(ar->ab, in ath12k_wmi_send_bcn_offload_control_cmd()
1891 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_p2p_go_bcn_ie()
1904 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, len); in ath12k_wmi_p2p_go_bcn_ie()
1906 return -ENOMEM; in ath12k_wmi_p2p_go_bcn_ie()
1908 ptr = skb->data; in ath12k_wmi_p2p_go_bcn_ie()
1910 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_P2P_GO_SET_BEACON_IE, in ath12k_wmi_p2p_go_bcn_ie()
1912 cmd->vdev_id = cpu_to_le32(vdev_id); in ath12k_wmi_p2p_go_bcn_ie()
1913 cmd->ie_buf_len = cpu_to_le32(p2p_ie_len); in ath12k_wmi_p2p_go_bcn_ie()
1917 tlv->header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_ARRAY_BYTE, in ath12k_wmi_p2p_go_bcn_ie()
1919 memcpy(tlv->value, p2p_ie, p2p_ie_len); in ath12k_wmi_p2p_go_bcn_ie()
1923 ath12k_warn(ar->ab, "failed to send WMI_P2P_GO_SET_BEACON_IE\n"); in ath12k_wmi_p2p_go_bcn_ie()
1935 struct ath12k *ar = arvif->ar; in ath12k_wmi_bcn_tmpl()
1936 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_bcn_tmpl()
1937 struct ath12k_base *ab = ar->ab; in ath12k_wmi_bcn_tmpl()
1940 struct ath12k_vif *ahvif = arvif->ahvif; in ath12k_wmi_bcn_tmpl()
1942 u32 vdev_id = arvif->vdev_id; in ath12k_wmi_bcn_tmpl()
1948 size_t aligned_len = roundup(bcn->len, 4); in ath12k_wmi_bcn_tmpl()
1954 ahvif->vif->addr, arvif->link_id); in ath12k_wmi_bcn_tmpl()
1955 return -EINVAL; in ath12k_wmi_bcn_tmpl()
1960 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, len); in ath12k_wmi_bcn_tmpl()
1962 return -ENOMEM; in ath12k_wmi_bcn_tmpl()
1964 cmd = (struct wmi_bcn_tmpl_cmd *)skb->data; in ath12k_wmi_bcn_tmpl()
1965 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_BCN_TMPL_CMD, in ath12k_wmi_bcn_tmpl()
1967 cmd->vdev_id = cpu_to_le32(vdev_id); in ath12k_wmi_bcn_tmpl()
1968 cmd->tim_ie_offset = cpu_to_le32(offs->tim_offset); in ath12k_wmi_bcn_tmpl()
1970 if (conf->csa_active) { in ath12k_wmi_bcn_tmpl()
1971 cmd->csa_switch_count_offset = in ath12k_wmi_bcn_tmpl()
1972 cpu_to_le32(offs->cntdwn_counter_offs[0]); in ath12k_wmi_bcn_tmpl()
1973 cmd->ext_csa_switch_count_offset = in ath12k_wmi_bcn_tmpl()
1974 cpu_to_le32(offs->cntdwn_counter_offs[1]); in ath12k_wmi_bcn_tmpl()
1975 cmd->csa_event_bitmap = cpu_to_le32(0xFFFFFFFF); in ath12k_wmi_bcn_tmpl()
1976 arvif->current_cntdown_counter = bcn->data[offs->cntdwn_counter_offs[0]]; in ath12k_wmi_bcn_tmpl()
1979 cmd->buf_len = cpu_to_le32(bcn->len); in ath12k_wmi_bcn_tmpl()
1980 cmd->mbssid_ie_offset = cpu_to_le32(offs->mbssid_off); in ath12k_wmi_bcn_tmpl()
1982 u32p_replace_bits(&ema_params, ema_args->bcn_cnt, WMI_EMA_BEACON_CNT); in ath12k_wmi_bcn_tmpl()
1983 u32p_replace_bits(&ema_params, ema_args->bcn_index, WMI_EMA_BEACON_IDX); in ath12k_wmi_bcn_tmpl()
1984 if (ema_args->bcn_index == 0) in ath12k_wmi_bcn_tmpl()
1986 if (ema_args->bcn_index + 1 == ema_args->bcn_cnt) in ath12k_wmi_bcn_tmpl()
1988 cmd->ema_params = cpu_to_le32(ema_params); in ath12k_wmi_bcn_tmpl()
1991 ptr = skb->data + sizeof(*cmd); in ath12k_wmi_bcn_tmpl()
1995 bcn_prb_info->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_BCN_PRB_INFO, in ath12k_wmi_bcn_tmpl()
1997 bcn_prb_info->caps = 0; in ath12k_wmi_bcn_tmpl()
1998 bcn_prb_info->erp = 0; in ath12k_wmi_bcn_tmpl()
2003 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_BYTE, aligned_len); in ath12k_wmi_bcn_tmpl()
2004 memcpy(tlv->value, bcn->data, bcn->len); in ath12k_wmi_bcn_tmpl()
2018 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_vdev_install_key()
2025 * length is specified in cmd->key_len. in ath12k_wmi_vdev_install_key()
2027 key_len_aligned = roundup(arg->key_len, 4); in ath12k_wmi_vdev_install_key()
2031 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, len); in ath12k_wmi_vdev_install_key()
2033 return -ENOMEM; in ath12k_wmi_vdev_install_key()
2035 cmd = (struct wmi_vdev_install_key_cmd *)skb->data; in ath12k_wmi_vdev_install_key()
2036 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_VDEV_INSTALL_KEY_CMD, in ath12k_wmi_vdev_install_key()
2038 cmd->vdev_id = cpu_to_le32(arg->vdev_id); in ath12k_wmi_vdev_install_key()
2039 ether_addr_copy(cmd->peer_macaddr.addr, arg->macaddr); in ath12k_wmi_vdev_install_key()
2040 cmd->key_idx = cpu_to_le32(arg->key_idx); in ath12k_wmi_vdev_install_key()
2041 cmd->key_flags = cpu_to_le32(arg->key_flags); in ath12k_wmi_vdev_install_key()
2042 cmd->key_cipher = cpu_to_le32(arg->key_cipher); in ath12k_wmi_vdev_install_key()
2043 cmd->key_len = cpu_to_le32(arg->key_len); in ath12k_wmi_vdev_install_key()
2044 cmd->key_txmic_len = cpu_to_le32(arg->key_txmic_len); in ath12k_wmi_vdev_install_key()
2045 cmd->key_rxmic_len = cpu_to_le32(arg->key_rxmic_len); in ath12k_wmi_vdev_install_key()
2047 if (arg->key_rsc_counter) in ath12k_wmi_vdev_install_key()
2048 cmd->key_rsc_counter = cpu_to_le64(arg->key_rsc_counter); in ath12k_wmi_vdev_install_key()
2050 tlv = (struct wmi_tlv *)(skb->data + sizeof(*cmd)); in ath12k_wmi_vdev_install_key()
2051 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_BYTE, key_len_aligned); in ath12k_wmi_vdev_install_key()
2052 memcpy(tlv->value, arg->key_data, arg->key_len); in ath12k_wmi_vdev_install_key()
2054 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_vdev_install_key()
2056 arg->key_idx, arg->key_cipher, arg->key_len); in ath12k_wmi_vdev_install_key()
2060 ath12k_warn(ar->ab, in ath12k_wmi_vdev_install_key()
2072 cmd->peer_flags = 0; in ath12k_wmi_copy_peer_flags()
2073 cmd->peer_flags_ext = 0; in ath12k_wmi_copy_peer_flags()
2075 if (arg->is_wme_set) { in ath12k_wmi_copy_peer_flags()
2076 if (arg->qos_flag) in ath12k_wmi_copy_peer_flags()
2077 cmd->peer_flags |= cpu_to_le32(WMI_PEER_QOS); in ath12k_wmi_copy_peer_flags()
2078 if (arg->apsd_flag) in ath12k_wmi_copy_peer_flags()
2079 cmd->peer_flags |= cpu_to_le32(WMI_PEER_APSD); in ath12k_wmi_copy_peer_flags()
2080 if (arg->ht_flag) in ath12k_wmi_copy_peer_flags()
2081 cmd->peer_flags |= cpu_to_le32(WMI_PEER_HT); in ath12k_wmi_copy_peer_flags()
2082 if (arg->bw_40) in ath12k_wmi_copy_peer_flags()
2083 cmd->peer_flags |= cpu_to_le32(WMI_PEER_40MHZ); in ath12k_wmi_copy_peer_flags()
2084 if (arg->bw_80) in ath12k_wmi_copy_peer_flags()
2085 cmd->peer_flags |= cpu_to_le32(WMI_PEER_80MHZ); in ath12k_wmi_copy_peer_flags()
2086 if (arg->bw_160) in ath12k_wmi_copy_peer_flags()
2087 cmd->peer_flags |= cpu_to_le32(WMI_PEER_160MHZ); in ath12k_wmi_copy_peer_flags()
2088 if (arg->bw_320) in ath12k_wmi_copy_peer_flags()
2089 cmd->peer_flags_ext |= cpu_to_le32(WMI_PEER_EXT_320MHZ); in ath12k_wmi_copy_peer_flags()
2094 if (arg->stbc_flag) in ath12k_wmi_copy_peer_flags()
2095 cmd->peer_flags |= cpu_to_le32(WMI_PEER_STBC); in ath12k_wmi_copy_peer_flags()
2100 if (arg->ldpc_flag) in ath12k_wmi_copy_peer_flags()
2101 cmd->peer_flags |= cpu_to_le32(WMI_PEER_LDPC); in ath12k_wmi_copy_peer_flags()
2103 if (arg->static_mimops_flag) in ath12k_wmi_copy_peer_flags()
2104 cmd->peer_flags |= cpu_to_le32(WMI_PEER_STATIC_MIMOPS); in ath12k_wmi_copy_peer_flags()
2105 if (arg->dynamic_mimops_flag) in ath12k_wmi_copy_peer_flags()
2106 cmd->peer_flags |= cpu_to_le32(WMI_PEER_DYN_MIMOPS); in ath12k_wmi_copy_peer_flags()
2107 if (arg->spatial_mux_flag) in ath12k_wmi_copy_peer_flags()
2108 cmd->peer_flags |= cpu_to_le32(WMI_PEER_SPATIAL_MUX); in ath12k_wmi_copy_peer_flags()
2109 if (arg->vht_flag) in ath12k_wmi_copy_peer_flags()
2110 cmd->peer_flags |= cpu_to_le32(WMI_PEER_VHT); in ath12k_wmi_copy_peer_flags()
2111 if (arg->he_flag) in ath12k_wmi_copy_peer_flags()
2112 cmd->peer_flags |= cpu_to_le32(WMI_PEER_HE); in ath12k_wmi_copy_peer_flags()
2113 if (arg->twt_requester) in ath12k_wmi_copy_peer_flags()
2114 cmd->peer_flags |= cpu_to_le32(WMI_PEER_TWT_REQ); in ath12k_wmi_copy_peer_flags()
2115 if (arg->twt_responder) in ath12k_wmi_copy_peer_flags()
2116 cmd->peer_flags |= cpu_to_le32(WMI_PEER_TWT_RESP); in ath12k_wmi_copy_peer_flags()
2117 if (arg->eht_flag) in ath12k_wmi_copy_peer_flags()
2118 cmd->peer_flags_ext |= cpu_to_le32(WMI_PEER_EXT_EHT); in ath12k_wmi_copy_peer_flags()
2121 /* Suppress authorization for all AUTH modes that need 4-way handshake in ath12k_wmi_copy_peer_flags()
2122 * (during re-association). in ath12k_wmi_copy_peer_flags()
2125 if (arg->auth_flag) in ath12k_wmi_copy_peer_flags()
2126 cmd->peer_flags |= cpu_to_le32(WMI_PEER_AUTH); in ath12k_wmi_copy_peer_flags()
2127 if (arg->need_ptk_4_way) { in ath12k_wmi_copy_peer_flags()
2128 cmd->peer_flags |= cpu_to_le32(WMI_PEER_NEED_PTK_4_WAY); in ath12k_wmi_copy_peer_flags()
2130 cmd->peer_flags &= cpu_to_le32(~WMI_PEER_AUTH); in ath12k_wmi_copy_peer_flags()
2132 if (arg->need_gtk_2_way) in ath12k_wmi_copy_peer_flags()
2133 cmd->peer_flags |= cpu_to_le32(WMI_PEER_NEED_GTK_2_WAY); in ath12k_wmi_copy_peer_flags()
2134 /* safe mode bypass the 4-way handshake */ in ath12k_wmi_copy_peer_flags()
2135 if (arg->safe_mode_enabled) in ath12k_wmi_copy_peer_flags()
2136 cmd->peer_flags &= cpu_to_le32(~(WMI_PEER_NEED_PTK_4_WAY | in ath12k_wmi_copy_peer_flags()
2139 if (arg->is_pmf_enabled) in ath12k_wmi_copy_peer_flags()
2140 cmd->peer_flags |= cpu_to_le32(WMI_PEER_PMF); in ath12k_wmi_copy_peer_flags()
2145 * if (arg->amsdu_disable) Add after FW support in ath12k_wmi_copy_peer_flags()
2149 * Mark the node as non-HT if all the mcs rates are disabled through in ath12k_wmi_copy_peer_flags()
2152 if (arg->peer_ht_rates.num_rates == 0) in ath12k_wmi_copy_peer_flags()
2153 cmd->peer_flags &= cpu_to_le32(~WMI_PEER_HT); in ath12k_wmi_copy_peer_flags()
2159 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_send_peer_assoc_cmd()
2174 peer_legacy_rates_align = roundup(arg->peer_legacy_rates.num_rates, in ath12k_wmi_send_peer_assoc_cmd()
2176 peer_ht_rates_align = roundup(arg->peer_ht_rates.num_rates, in ath12k_wmi_send_peer_assoc_cmd()
2183 (sizeof(*he_mcs) * arg->peer_he_mcs_count) + in ath12k_wmi_send_peer_assoc_cmd()
2184 TLV_HDR_SIZE + (sizeof(*eht_mcs) * arg->peer_eht_mcs_count); in ath12k_wmi_send_peer_assoc_cmd()
2186 if (arg->ml.enabled) in ath12k_wmi_send_peer_assoc_cmd()
2188 TLV_HDR_SIZE + (arg->ml.num_partner_links * sizeof(*partner_info)); in ath12k_wmi_send_peer_assoc_cmd()
2192 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, len); in ath12k_wmi_send_peer_assoc_cmd()
2194 return -ENOMEM; in ath12k_wmi_send_peer_assoc_cmd()
2196 ptr = skb->data; in ath12k_wmi_send_peer_assoc_cmd()
2199 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_PEER_ASSOC_COMPLETE_CMD, in ath12k_wmi_send_peer_assoc_cmd()
2202 cmd->vdev_id = cpu_to_le32(arg->vdev_id); in ath12k_wmi_send_peer_assoc_cmd()
2204 cmd->peer_new_assoc = cpu_to_le32(arg->peer_new_assoc); in ath12k_wmi_send_peer_assoc_cmd()
2205 cmd->peer_associd = cpu_to_le32(arg->peer_associd); in ath12k_wmi_send_peer_assoc_cmd()
2206 cmd->punct_bitmap = cpu_to_le32(arg->punct_bitmap); in ath12k_wmi_send_peer_assoc_cmd()
2210 &ar->ab->dev_flags)); in ath12k_wmi_send_peer_assoc_cmd()
2212 ether_addr_copy(cmd->peer_macaddr.addr, arg->peer_mac); in ath12k_wmi_send_peer_assoc_cmd()
2214 cmd->peer_rate_caps = cpu_to_le32(arg->peer_rate_caps); in ath12k_wmi_send_peer_assoc_cmd()
2215 cmd->peer_caps = cpu_to_le32(arg->peer_caps); in ath12k_wmi_send_peer_assoc_cmd()
2216 cmd->peer_listen_intval = cpu_to_le32(arg->peer_listen_intval); in ath12k_wmi_send_peer_assoc_cmd()
2217 cmd->peer_ht_caps = cpu_to_le32(arg->peer_ht_caps); in ath12k_wmi_send_peer_assoc_cmd()
2218 cmd->peer_max_mpdu = cpu_to_le32(arg->peer_max_mpdu); in ath12k_wmi_send_peer_assoc_cmd()
2219 cmd->peer_mpdu_density = cpu_to_le32(arg->peer_mpdu_density); in ath12k_wmi_send_peer_assoc_cmd()
2220 cmd->peer_vht_caps = cpu_to_le32(arg->peer_vht_caps); in ath12k_wmi_send_peer_assoc_cmd()
2221 cmd->peer_phymode = cpu_to_le32(arg->peer_phymode); in ath12k_wmi_send_peer_assoc_cmd()
2224 cmd->peer_he_cap_info = cpu_to_le32(arg->peer_he_cap_macinfo[0]); in ath12k_wmi_send_peer_assoc_cmd()
2225 cmd->peer_he_cap_info_ext = cpu_to_le32(arg->peer_he_cap_macinfo[1]); in ath12k_wmi_send_peer_assoc_cmd()
2226 cmd->peer_he_cap_info_internal = cpu_to_le32(arg->peer_he_cap_macinfo_internal); in ath12k_wmi_send_peer_assoc_cmd()
2227 cmd->peer_he_caps_6ghz = cpu_to_le32(arg->peer_he_caps_6ghz); in ath12k_wmi_send_peer_assoc_cmd()
2228 cmd->peer_he_ops = cpu_to_le32(arg->peer_he_ops); in ath12k_wmi_send_peer_assoc_cmd()
2230 cmd->peer_he_cap_phy[i] = in ath12k_wmi_send_peer_assoc_cmd()
2231 cpu_to_le32(arg->peer_he_cap_phyinfo[i]); in ath12k_wmi_send_peer_assoc_cmd()
2232 cmd->peer_ppet.numss_m1 = cpu_to_le32(arg->peer_ppet.numss_m1); in ath12k_wmi_send_peer_assoc_cmd()
2233 cmd->peer_ppet.ru_info = cpu_to_le32(arg->peer_ppet.ru_bit_mask); in ath12k_wmi_send_peer_assoc_cmd()
2235 cmd->peer_ppet.ppet16_ppet8_ru3_ru0[i] = in ath12k_wmi_send_peer_assoc_cmd()
2236 cpu_to_le32(arg->peer_ppet.ppet16_ppet8_ru3_ru0[i]); in ath12k_wmi_send_peer_assoc_cmd()
2239 memcpy_and_pad(cmd->peer_eht_cap_mac, sizeof(cmd->peer_eht_cap_mac), in ath12k_wmi_send_peer_assoc_cmd()
2240 arg->peer_eht_cap_mac, sizeof(arg->peer_eht_cap_mac), in ath12k_wmi_send_peer_assoc_cmd()
2242 memcpy_and_pad(cmd->peer_eht_cap_phy, sizeof(cmd->peer_eht_cap_phy), in ath12k_wmi_send_peer_assoc_cmd()
2243 arg->peer_eht_cap_phy, sizeof(arg->peer_eht_cap_phy), in ath12k_wmi_send_peer_assoc_cmd()
2245 memcpy_and_pad(&cmd->peer_eht_ppet, sizeof(cmd->peer_eht_ppet), in ath12k_wmi_send_peer_assoc_cmd()
2246 &arg->peer_eht_ppet, sizeof(arg->peer_eht_ppet), 0); in ath12k_wmi_send_peer_assoc_cmd()
2252 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_BYTE, peer_legacy_rates_align); in ath12k_wmi_send_peer_assoc_cmd()
2256 cmd->num_peer_legacy_rates = cpu_to_le32(arg->peer_legacy_rates.num_rates); in ath12k_wmi_send_peer_assoc_cmd()
2257 memcpy(ptr, arg->peer_legacy_rates.rates, in ath12k_wmi_send_peer_assoc_cmd()
2258 arg->peer_legacy_rates.num_rates); in ath12k_wmi_send_peer_assoc_cmd()
2264 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_BYTE, peer_ht_rates_align); in ath12k_wmi_send_peer_assoc_cmd()
2266 cmd->num_peer_ht_rates = cpu_to_le32(arg->peer_ht_rates.num_rates); in ath12k_wmi_send_peer_assoc_cmd()
2267 memcpy(ptr, arg->peer_ht_rates.rates, in ath12k_wmi_send_peer_assoc_cmd()
2268 arg->peer_ht_rates.num_rates); in ath12k_wmi_send_peer_assoc_cmd()
2275 mcs->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_VHT_RATE_SET, in ath12k_wmi_send_peer_assoc_cmd()
2278 cmd->peer_nss = cpu_to_le32(arg->peer_nss); in ath12k_wmi_send_peer_assoc_cmd()
2280 /* Update bandwidth-NSS mapping */ in ath12k_wmi_send_peer_assoc_cmd()
2281 cmd->peer_bw_rxnss_override = 0; in ath12k_wmi_send_peer_assoc_cmd()
2282 cmd->peer_bw_rxnss_override |= cpu_to_le32(arg->peer_bw_rxnss_override); in ath12k_wmi_send_peer_assoc_cmd()
2284 if (arg->vht_capable) { in ath12k_wmi_send_peer_assoc_cmd()
2285 mcs->rx_max_rate = cpu_to_le32(arg->rx_max_rate); in ath12k_wmi_send_peer_assoc_cmd()
2286 mcs->rx_mcs_set = cpu_to_le32(arg->rx_mcs_set); in ath12k_wmi_send_peer_assoc_cmd()
2287 mcs->tx_max_rate = cpu_to_le32(arg->tx_max_rate); in ath12k_wmi_send_peer_assoc_cmd()
2288 mcs->tx_mcs_set = cpu_to_le32(arg->tx_mcs_set); in ath12k_wmi_send_peer_assoc_cmd()
2292 cmd->peer_he_mcs = cpu_to_le32(arg->peer_he_mcs_count); in ath12k_wmi_send_peer_assoc_cmd()
2293 cmd->min_data_rate = cpu_to_le32(arg->min_data_rate); in ath12k_wmi_send_peer_assoc_cmd()
2297 len = arg->peer_he_mcs_count * sizeof(*he_mcs); in ath12k_wmi_send_peer_assoc_cmd()
2300 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_STRUCT, len); in ath12k_wmi_send_peer_assoc_cmd()
2304 for (i = 0; i < arg->peer_he_mcs_count; i++) { in ath12k_wmi_send_peer_assoc_cmd()
2306 he_mcs->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_HE_RATE_SET, in ath12k_wmi_send_peer_assoc_cmd()
2309 he_mcs->rx_mcs_set = cpu_to_le32(arg->peer_he_rx_mcs_set[i]); in ath12k_wmi_send_peer_assoc_cmd()
2310 he_mcs->tx_mcs_set = cpu_to_le32(arg->peer_he_tx_mcs_set[i]); in ath12k_wmi_send_peer_assoc_cmd()
2315 len = arg->ml.enabled ? sizeof(*ml_params) : 0; in ath12k_wmi_send_peer_assoc_cmd()
2316 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_STRUCT, len); in ath12k_wmi_send_peer_assoc_cmd()
2322 ml_params->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_MLO_PEER_ASSOC_PARAMS, in ath12k_wmi_send_peer_assoc_cmd()
2324 ml_params->flags = cpu_to_le32(ATH12K_WMI_FLAG_MLO_ENABLED); in ath12k_wmi_send_peer_assoc_cmd()
2326 if (arg->ml.assoc_link) in ath12k_wmi_send_peer_assoc_cmd()
2327 ml_params->flags |= cpu_to_le32(ATH12K_WMI_FLAG_MLO_ASSOC_LINK); in ath12k_wmi_send_peer_assoc_cmd()
2329 if (arg->ml.primary_umac) in ath12k_wmi_send_peer_assoc_cmd()
2330 ml_params->flags |= cpu_to_le32(ATH12K_WMI_FLAG_MLO_PRIMARY_UMAC); in ath12k_wmi_send_peer_assoc_cmd()
2332 if (arg->ml.logical_link_idx_valid) in ath12k_wmi_send_peer_assoc_cmd()
2333 ml_params->flags |= in ath12k_wmi_send_peer_assoc_cmd()
2336 if (arg->ml.peer_id_valid) in ath12k_wmi_send_peer_assoc_cmd()
2337 ml_params->flags |= cpu_to_le32(ATH12K_WMI_FLAG_MLO_PEER_ID_VALID); in ath12k_wmi_send_peer_assoc_cmd()
2339 ether_addr_copy(ml_params->mld_addr.addr, arg->ml.mld_addr); in ath12k_wmi_send_peer_assoc_cmd()
2340 ml_params->logical_link_idx = cpu_to_le32(arg->ml.logical_link_idx); in ath12k_wmi_send_peer_assoc_cmd()
2341 ml_params->ml_peer_id = cpu_to_le32(arg->ml.ml_peer_id); in ath12k_wmi_send_peer_assoc_cmd()
2342 ml_params->ieee_link_id = cpu_to_le32(arg->ml.ieee_link_id); in ath12k_wmi_send_peer_assoc_cmd()
2347 len = arg->peer_eht_mcs_count * sizeof(*eht_mcs); in ath12k_wmi_send_peer_assoc_cmd()
2349 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_STRUCT, len); in ath12k_wmi_send_peer_assoc_cmd()
2352 for (i = 0; i < arg->peer_eht_mcs_count; i++) { in ath12k_wmi_send_peer_assoc_cmd()
2354 eht_mcs->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_HE_RATE_SET, in ath12k_wmi_send_peer_assoc_cmd()
2357 eht_mcs->rx_mcs_set = cpu_to_le32(arg->peer_eht_rx_mcs_set[i]); in ath12k_wmi_send_peer_assoc_cmd()
2358 eht_mcs->tx_mcs_set = cpu_to_le32(arg->peer_eht_tx_mcs_set[i]); in ath12k_wmi_send_peer_assoc_cmd()
2363 len = arg->ml.enabled ? arg->ml.num_partner_links * sizeof(*partner_info) : 0; in ath12k_wmi_send_peer_assoc_cmd()
2365 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_STRUCT, len); in ath12k_wmi_send_peer_assoc_cmd()
2371 for (i = 0; i < arg->ml.num_partner_links; i++) { in ath12k_wmi_send_peer_assoc_cmd()
2375 partner_info->tlv_header = ath12k_wmi_tlv_cmd_hdr(cmd, in ath12k_wmi_send_peer_assoc_cmd()
2377 partner_info->vdev_id = cpu_to_le32(arg->ml.partner_info[i].vdev_id); in ath12k_wmi_send_peer_assoc_cmd()
2378 partner_info->hw_link_id = in ath12k_wmi_send_peer_assoc_cmd()
2379 cpu_to_le32(arg->ml.partner_info[i].hw_link_id); in ath12k_wmi_send_peer_assoc_cmd()
2380 partner_info->flags = cpu_to_le32(ATH12K_WMI_FLAG_MLO_ENABLED); in ath12k_wmi_send_peer_assoc_cmd()
2382 if (arg->ml.partner_info[i].assoc_link) in ath12k_wmi_send_peer_assoc_cmd()
2383 partner_info->flags |= in ath12k_wmi_send_peer_assoc_cmd()
2386 if (arg->ml.partner_info[i].primary_umac) in ath12k_wmi_send_peer_assoc_cmd()
2387 partner_info->flags |= in ath12k_wmi_send_peer_assoc_cmd()
2390 if (arg->ml.partner_info[i].logical_link_idx_valid) { in ath12k_wmi_send_peer_assoc_cmd()
2392 partner_info->flags |= v; in ath12k_wmi_send_peer_assoc_cmd()
2395 partner_info->logical_link_idx = in ath12k_wmi_send_peer_assoc_cmd()
2396 cpu_to_le32(arg->ml.partner_info[i].logical_link_idx); in ath12k_wmi_send_peer_assoc_cmd()
2401 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_send_peer_assoc_cmd()
2403 cmd->vdev_id, cmd->peer_associd, arg->peer_mac, in ath12k_wmi_send_peer_assoc_cmd()
2404 cmd->peer_flags, cmd->peer_rate_caps, cmd->peer_caps, in ath12k_wmi_send_peer_assoc_cmd()
2405 cmd->peer_listen_intval, cmd->peer_ht_caps, in ath12k_wmi_send_peer_assoc_cmd()
2406 cmd->peer_max_mpdu, cmd->peer_nss, cmd->peer_phymode, in ath12k_wmi_send_peer_assoc_cmd()
2407 cmd->peer_mpdu_density, in ath12k_wmi_send_peer_assoc_cmd()
2408 cmd->peer_vht_caps, cmd->peer_he_cap_info, in ath12k_wmi_send_peer_assoc_cmd()
2409 cmd->peer_he_ops, cmd->peer_he_cap_info_ext, in ath12k_wmi_send_peer_assoc_cmd()
2410 cmd->peer_he_cap_phy[0], cmd->peer_he_cap_phy[1], in ath12k_wmi_send_peer_assoc_cmd()
2411 cmd->peer_he_cap_phy[2], in ath12k_wmi_send_peer_assoc_cmd()
2412 cmd->peer_bw_rxnss_override, cmd->peer_flags_ext, in ath12k_wmi_send_peer_assoc_cmd()
2413 cmd->peer_eht_cap_mac[0], cmd->peer_eht_cap_mac[1], in ath12k_wmi_send_peer_assoc_cmd()
2414 cmd->peer_eht_cap_phy[0], cmd->peer_eht_cap_phy[1], in ath12k_wmi_send_peer_assoc_cmd()
2415 cmd->peer_eht_cap_phy[2]); in ath12k_wmi_send_peer_assoc_cmd()
2419 ath12k_warn(ar->ab, in ath12k_wmi_send_peer_assoc_cmd()
2431 arg->scan_req_id = 1; in ath12k_wmi_start_scan_init()
2432 arg->scan_priority = WMI_SCAN_PRIORITY_LOW; in ath12k_wmi_start_scan_init()
2433 arg->dwell_time_active = 50; in ath12k_wmi_start_scan_init()
2434 arg->dwell_time_active_2g = 0; in ath12k_wmi_start_scan_init()
2435 arg->dwell_time_passive = 150; in ath12k_wmi_start_scan_init()
2436 arg->dwell_time_active_6g = 70; in ath12k_wmi_start_scan_init()
2437 arg->dwell_time_passive_6g = 70; in ath12k_wmi_start_scan_init()
2438 arg->min_rest_time = 50; in ath12k_wmi_start_scan_init()
2439 arg->max_rest_time = 500; in ath12k_wmi_start_scan_init()
2440 arg->repeat_probe_time = 0; in ath12k_wmi_start_scan_init()
2441 arg->probe_spacing_time = 0; in ath12k_wmi_start_scan_init()
2442 arg->idle_time = 0; in ath12k_wmi_start_scan_init()
2443 arg->max_scan_time = 20000; in ath12k_wmi_start_scan_init()
2444 arg->probe_delay = 5; in ath12k_wmi_start_scan_init()
2445 arg->notify_scan_events = WMI_SCAN_EVENT_STARTED | in ath12k_wmi_start_scan_init()
2450 arg->scan_f_chan_stat_evnt = 1; in ath12k_wmi_start_scan_init()
2451 arg->num_bssid = 1; in ath12k_wmi_start_scan_init()
2456 eth_broadcast_addr(arg->bssid_list[0].addr); in ath12k_wmi_start_scan_init()
2463 if (arg->scan_ev_started) in ath12k_wmi_copy_scan_event_cntrl_flags()
2464 cmd->notify_scan_events |= cpu_to_le32(WMI_SCAN_EVENT_STARTED); in ath12k_wmi_copy_scan_event_cntrl_flags()
2465 if (arg->scan_ev_completed) in ath12k_wmi_copy_scan_event_cntrl_flags()
2466 cmd->notify_scan_events |= cpu_to_le32(WMI_SCAN_EVENT_COMPLETED); in ath12k_wmi_copy_scan_event_cntrl_flags()
2467 if (arg->scan_ev_bss_chan) in ath12k_wmi_copy_scan_event_cntrl_flags()
2468 cmd->notify_scan_events |= cpu_to_le32(WMI_SCAN_EVENT_BSS_CHANNEL); in ath12k_wmi_copy_scan_event_cntrl_flags()
2469 if (arg->scan_ev_foreign_chan) in ath12k_wmi_copy_scan_event_cntrl_flags()
2470 cmd->notify_scan_events |= cpu_to_le32(WMI_SCAN_EVENT_FOREIGN_CHAN); in ath12k_wmi_copy_scan_event_cntrl_flags()
2471 if (arg->scan_ev_dequeued) in ath12k_wmi_copy_scan_event_cntrl_flags()
2472 cmd->notify_scan_events |= cpu_to_le32(WMI_SCAN_EVENT_DEQUEUED); in ath12k_wmi_copy_scan_event_cntrl_flags()
2473 if (arg->scan_ev_preempted) in ath12k_wmi_copy_scan_event_cntrl_flags()
2474 cmd->notify_scan_events |= cpu_to_le32(WMI_SCAN_EVENT_PREEMPTED); in ath12k_wmi_copy_scan_event_cntrl_flags()
2475 if (arg->scan_ev_start_failed) in ath12k_wmi_copy_scan_event_cntrl_flags()
2476 cmd->notify_scan_events |= cpu_to_le32(WMI_SCAN_EVENT_START_FAILED); in ath12k_wmi_copy_scan_event_cntrl_flags()
2477 if (arg->scan_ev_restarted) in ath12k_wmi_copy_scan_event_cntrl_flags()
2478 cmd->notify_scan_events |= cpu_to_le32(WMI_SCAN_EVENT_RESTARTED); in ath12k_wmi_copy_scan_event_cntrl_flags()
2479 if (arg->scan_ev_foreign_chn_exit) in ath12k_wmi_copy_scan_event_cntrl_flags()
2480 cmd->notify_scan_events |= cpu_to_le32(WMI_SCAN_EVENT_FOREIGN_CHAN_EXIT); in ath12k_wmi_copy_scan_event_cntrl_flags()
2481 if (arg->scan_ev_suspended) in ath12k_wmi_copy_scan_event_cntrl_flags()
2482 cmd->notify_scan_events |= cpu_to_le32(WMI_SCAN_EVENT_SUSPENDED); in ath12k_wmi_copy_scan_event_cntrl_flags()
2483 if (arg->scan_ev_resumed) in ath12k_wmi_copy_scan_event_cntrl_flags()
2484 cmd->notify_scan_events |= cpu_to_le32(WMI_SCAN_EVENT_RESUMED); in ath12k_wmi_copy_scan_event_cntrl_flags()
2487 cmd->scan_ctrl_flags = 0; in ath12k_wmi_copy_scan_event_cntrl_flags()
2488 if (arg->scan_f_passive) in ath12k_wmi_copy_scan_event_cntrl_flags()
2489 cmd->scan_ctrl_flags |= cpu_to_le32(WMI_SCAN_FLAG_PASSIVE); in ath12k_wmi_copy_scan_event_cntrl_flags()
2490 if (arg->scan_f_strict_passive_pch) in ath12k_wmi_copy_scan_event_cntrl_flags()
2491 cmd->scan_ctrl_flags |= cpu_to_le32(WMI_SCAN_FLAG_STRICT_PASSIVE_ON_PCHN); in ath12k_wmi_copy_scan_event_cntrl_flags()
2492 if (arg->scan_f_promisc_mode) in ath12k_wmi_copy_scan_event_cntrl_flags()
2493 cmd->scan_ctrl_flags |= cpu_to_le32(WMI_SCAN_FILTER_PROMISCUOS); in ath12k_wmi_copy_scan_event_cntrl_flags()
2494 if (arg->scan_f_capture_phy_err) in ath12k_wmi_copy_scan_event_cntrl_flags()
2495 cmd->scan_ctrl_flags |= cpu_to_le32(WMI_SCAN_CAPTURE_PHY_ERROR); in ath12k_wmi_copy_scan_event_cntrl_flags()
2496 if (arg->scan_f_half_rate) in ath12k_wmi_copy_scan_event_cntrl_flags()
2497 cmd->scan_ctrl_flags |= cpu_to_le32(WMI_SCAN_FLAG_HALF_RATE_SUPPORT); in ath12k_wmi_copy_scan_event_cntrl_flags()
2498 if (arg->scan_f_quarter_rate) in ath12k_wmi_copy_scan_event_cntrl_flags()
2499 cmd->scan_ctrl_flags |= cpu_to_le32(WMI_SCAN_FLAG_QUARTER_RATE_SUPPORT); in ath12k_wmi_copy_scan_event_cntrl_flags()
2500 if (arg->scan_f_cck_rates) in ath12k_wmi_copy_scan_event_cntrl_flags()
2501 cmd->scan_ctrl_flags |= cpu_to_le32(WMI_SCAN_ADD_CCK_RATES); in ath12k_wmi_copy_scan_event_cntrl_flags()
2502 if (arg->scan_f_ofdm_rates) in ath12k_wmi_copy_scan_event_cntrl_flags()
2503 cmd->scan_ctrl_flags |= cpu_to_le32(WMI_SCAN_ADD_OFDM_RATES); in ath12k_wmi_copy_scan_event_cntrl_flags()
2504 if (arg->scan_f_chan_stat_evnt) in ath12k_wmi_copy_scan_event_cntrl_flags()
2505 cmd->scan_ctrl_flags |= cpu_to_le32(WMI_SCAN_CHAN_STAT_EVENT); in ath12k_wmi_copy_scan_event_cntrl_flags()
2506 if (arg->scan_f_filter_prb_req) in ath12k_wmi_copy_scan_event_cntrl_flags()
2507 cmd->scan_ctrl_flags |= cpu_to_le32(WMI_SCAN_FILTER_PROBE_REQ); in ath12k_wmi_copy_scan_event_cntrl_flags()
2508 if (arg->scan_f_bcast_probe) in ath12k_wmi_copy_scan_event_cntrl_flags()
2509 cmd->scan_ctrl_flags |= cpu_to_le32(WMI_SCAN_ADD_BCAST_PROBE_REQ); in ath12k_wmi_copy_scan_event_cntrl_flags()
2510 if (arg->scan_f_offchan_mgmt_tx) in ath12k_wmi_copy_scan_event_cntrl_flags()
2511 cmd->scan_ctrl_flags |= cpu_to_le32(WMI_SCAN_OFFCHAN_MGMT_TX); in ath12k_wmi_copy_scan_event_cntrl_flags()
2512 if (arg->scan_f_offchan_data_tx) in ath12k_wmi_copy_scan_event_cntrl_flags()
2513 cmd->scan_ctrl_flags |= cpu_to_le32(WMI_SCAN_OFFCHAN_DATA_TX); in ath12k_wmi_copy_scan_event_cntrl_flags()
2514 if (arg->scan_f_force_active_dfs_chn) in ath12k_wmi_copy_scan_event_cntrl_flags()
2515 cmd->scan_ctrl_flags |= cpu_to_le32(WMI_SCAN_FLAG_FORCE_ACTIVE_ON_DFS); in ath12k_wmi_copy_scan_event_cntrl_flags()
2516 if (arg->scan_f_add_tpc_ie_in_probe) in ath12k_wmi_copy_scan_event_cntrl_flags()
2517 cmd->scan_ctrl_flags |= cpu_to_le32(WMI_SCAN_ADD_TPC_IE_IN_PROBE_REQ); in ath12k_wmi_copy_scan_event_cntrl_flags()
2518 if (arg->scan_f_add_ds_ie_in_probe) in ath12k_wmi_copy_scan_event_cntrl_flags()
2519 cmd->scan_ctrl_flags |= cpu_to_le32(WMI_SCAN_ADD_DS_IE_IN_PROBE_REQ); in ath12k_wmi_copy_scan_event_cntrl_flags()
2520 if (arg->scan_f_add_spoofed_mac_in_probe) in ath12k_wmi_copy_scan_event_cntrl_flags()
2521 cmd->scan_ctrl_flags |= cpu_to_le32(WMI_SCAN_ADD_SPOOF_MAC_IN_PROBE_REQ); in ath12k_wmi_copy_scan_event_cntrl_flags()
2522 if (arg->scan_f_add_rand_seq_in_probe) in ath12k_wmi_copy_scan_event_cntrl_flags()
2523 cmd->scan_ctrl_flags |= cpu_to_le32(WMI_SCAN_RANDOM_SEQ_NO_IN_PROBE_REQ); in ath12k_wmi_copy_scan_event_cntrl_flags()
2524 if (arg->scan_f_en_ie_whitelist_in_probe) in ath12k_wmi_copy_scan_event_cntrl_flags()
2525 cmd->scan_ctrl_flags |= in ath12k_wmi_copy_scan_event_cntrl_flags()
2528 cmd->scan_ctrl_flags |= le32_encode_bits(arg->adaptive_dwell_time_mode, in ath12k_wmi_copy_scan_event_cntrl_flags()
2535 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_send_scan_start_cmd()
2550 if (arg->num_chan) in ath12k_wmi_send_scan_start_cmd()
2551 len += arg->num_chan * sizeof(u32); in ath12k_wmi_send_scan_start_cmd()
2554 if (arg->num_ssids) in ath12k_wmi_send_scan_start_cmd()
2555 len += arg->num_ssids * sizeof(*ssid); in ath12k_wmi_send_scan_start_cmd()
2558 if (arg->num_bssid) in ath12k_wmi_send_scan_start_cmd()
2559 len += sizeof(*bssid) * arg->num_bssid; in ath12k_wmi_send_scan_start_cmd()
2561 if (arg->num_hint_bssid) in ath12k_wmi_send_scan_start_cmd()
2563 arg->num_hint_bssid * sizeof(*hint_bssid); in ath12k_wmi_send_scan_start_cmd()
2565 if (arg->num_hint_s_ssid) in ath12k_wmi_send_scan_start_cmd()
2567 arg->num_hint_s_ssid * sizeof(*s_ssid); in ath12k_wmi_send_scan_start_cmd()
2570 if (arg->extraie.len) in ath12k_wmi_send_scan_start_cmd()
2572 roundup(arg->extraie.len, sizeof(u32)); in ath12k_wmi_send_scan_start_cmd()
2573 if (extraie_len_with_pad <= (wmi->wmi_ab->max_msg_len[ar->pdev_idx] - len)) { in ath12k_wmi_send_scan_start_cmd()
2576 ath12k_warn(ar->ab, "discard large size %d bytes extraie for scan start\n", in ath12k_wmi_send_scan_start_cmd()
2577 arg->extraie.len); in ath12k_wmi_send_scan_start_cmd()
2581 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, len); in ath12k_wmi_send_scan_start_cmd()
2583 return -ENOMEM; in ath12k_wmi_send_scan_start_cmd()
2585 ptr = skb->data; in ath12k_wmi_send_scan_start_cmd()
2588 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_START_SCAN_CMD, in ath12k_wmi_send_scan_start_cmd()
2591 cmd->scan_id = cpu_to_le32(arg->scan_id); in ath12k_wmi_send_scan_start_cmd()
2592 cmd->scan_req_id = cpu_to_le32(arg->scan_req_id); in ath12k_wmi_send_scan_start_cmd()
2593 cmd->vdev_id = cpu_to_le32(arg->vdev_id); in ath12k_wmi_send_scan_start_cmd()
2594 cmd->scan_priority = cpu_to_le32(arg->scan_priority); in ath12k_wmi_send_scan_start_cmd()
2595 cmd->notify_scan_events = cpu_to_le32(arg->notify_scan_events); in ath12k_wmi_send_scan_start_cmd()
2599 cmd->dwell_time_active = cpu_to_le32(arg->dwell_time_active); in ath12k_wmi_send_scan_start_cmd()
2600 cmd->dwell_time_active_2g = cpu_to_le32(arg->dwell_time_active_2g); in ath12k_wmi_send_scan_start_cmd()
2601 cmd->dwell_time_passive = cpu_to_le32(arg->dwell_time_passive); in ath12k_wmi_send_scan_start_cmd()
2602 cmd->dwell_time_active_6g = cpu_to_le32(arg->dwell_time_active_6g); in ath12k_wmi_send_scan_start_cmd()
2603 cmd->dwell_time_passive_6g = cpu_to_le32(arg->dwell_time_passive_6g); in ath12k_wmi_send_scan_start_cmd()
2604 cmd->min_rest_time = cpu_to_le32(arg->min_rest_time); in ath12k_wmi_send_scan_start_cmd()
2605 cmd->max_rest_time = cpu_to_le32(arg->max_rest_time); in ath12k_wmi_send_scan_start_cmd()
2606 cmd->repeat_probe_time = cpu_to_le32(arg->repeat_probe_time); in ath12k_wmi_send_scan_start_cmd()
2607 cmd->probe_spacing_time = cpu_to_le32(arg->probe_spacing_time); in ath12k_wmi_send_scan_start_cmd()
2608 cmd->idle_time = cpu_to_le32(arg->idle_time); in ath12k_wmi_send_scan_start_cmd()
2609 cmd->max_scan_time = cpu_to_le32(arg->max_scan_time); in ath12k_wmi_send_scan_start_cmd()
2610 cmd->probe_delay = cpu_to_le32(arg->probe_delay); in ath12k_wmi_send_scan_start_cmd()
2611 cmd->burst_duration = cpu_to_le32(arg->burst_duration); in ath12k_wmi_send_scan_start_cmd()
2612 cmd->num_chan = cpu_to_le32(arg->num_chan); in ath12k_wmi_send_scan_start_cmd()
2613 cmd->num_bssid = cpu_to_le32(arg->num_bssid); in ath12k_wmi_send_scan_start_cmd()
2614 cmd->num_ssids = cpu_to_le32(arg->num_ssids); in ath12k_wmi_send_scan_start_cmd()
2615 cmd->ie_len = cpu_to_le32(arg->extraie.len); in ath12k_wmi_send_scan_start_cmd()
2616 cmd->n_probes = cpu_to_le32(arg->n_probes); in ath12k_wmi_send_scan_start_cmd()
2620 len = arg->num_chan * sizeof(u32); in ath12k_wmi_send_scan_start_cmd()
2623 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_UINT32, len); in ath12k_wmi_send_scan_start_cmd()
2627 memcpy(tmp_ptr, arg->chan_list, arg->num_chan * 4); in ath12k_wmi_send_scan_start_cmd()
2631 len = arg->num_ssids * sizeof(*ssid); in ath12k_wmi_send_scan_start_cmd()
2633 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_FIXED_STRUCT, len); in ath12k_wmi_send_scan_start_cmd()
2637 if (arg->num_ssids) { in ath12k_wmi_send_scan_start_cmd()
2639 for (i = 0; i < arg->num_ssids; ++i) { in ath12k_wmi_send_scan_start_cmd()
2640 ssid->ssid_len = cpu_to_le32(arg->ssid[i].ssid_len); in ath12k_wmi_send_scan_start_cmd()
2641 memcpy(ssid->ssid, arg->ssid[i].ssid, in ath12k_wmi_send_scan_start_cmd()
2642 arg->ssid[i].ssid_len); in ath12k_wmi_send_scan_start_cmd()
2647 ptr += (arg->num_ssids * sizeof(*ssid)); in ath12k_wmi_send_scan_start_cmd()
2648 len = arg->num_bssid * sizeof(*bssid); in ath12k_wmi_send_scan_start_cmd()
2650 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_FIXED_STRUCT, len); in ath12k_wmi_send_scan_start_cmd()
2655 if (arg->num_bssid) { in ath12k_wmi_send_scan_start_cmd()
2656 for (i = 0; i < arg->num_bssid; ++i) { in ath12k_wmi_send_scan_start_cmd()
2657 ether_addr_copy(bssid->addr, in ath12k_wmi_send_scan_start_cmd()
2658 arg->bssid_list[i].addr); in ath12k_wmi_send_scan_start_cmd()
2663 ptr += arg->num_bssid * sizeof(*bssid); in ath12k_wmi_send_scan_start_cmd()
2667 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_BYTE, len); in ath12k_wmi_send_scan_start_cmd()
2671 memcpy(ptr, arg->extraie.ptr, in ath12k_wmi_send_scan_start_cmd()
2672 arg->extraie.len); in ath12k_wmi_send_scan_start_cmd()
2676 if (arg->num_hint_s_ssid) { in ath12k_wmi_send_scan_start_cmd()
2677 len = arg->num_hint_s_ssid * sizeof(*s_ssid); in ath12k_wmi_send_scan_start_cmd()
2679 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_FIXED_STRUCT, len); in ath12k_wmi_send_scan_start_cmd()
2682 for (i = 0; i < arg->num_hint_s_ssid; ++i) { in ath12k_wmi_send_scan_start_cmd()
2683 s_ssid->freq_flags = arg->hint_s_ssid[i].freq_flags; in ath12k_wmi_send_scan_start_cmd()
2684 s_ssid->short_ssid = arg->hint_s_ssid[i].short_ssid; in ath12k_wmi_send_scan_start_cmd()
2690 if (arg->num_hint_bssid) { in ath12k_wmi_send_scan_start_cmd()
2691 len = arg->num_hint_bssid * sizeof(struct ath12k_wmi_hint_bssid_arg); in ath12k_wmi_send_scan_start_cmd()
2693 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_FIXED_STRUCT, len); in ath12k_wmi_send_scan_start_cmd()
2696 for (i = 0; i < arg->num_hint_bssid; ++i) { in ath12k_wmi_send_scan_start_cmd()
2697 hint_bssid->freq_flags = in ath12k_wmi_send_scan_start_cmd()
2698 arg->hint_bssid[i].freq_flags; in ath12k_wmi_send_scan_start_cmd()
2699 ether_addr_copy(&arg->hint_bssid[i].bssid.addr[0], in ath12k_wmi_send_scan_start_cmd()
2700 &hint_bssid->bssid.addr[0]); in ath12k_wmi_send_scan_start_cmd()
2708 ath12k_warn(ar->ab, "failed to send WMI_START_SCAN_CMDID\n"); in ath12k_wmi_send_scan_start_cmd()
2718 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_send_scan_stop_cmd()
2723 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_send_scan_stop_cmd()
2725 return -ENOMEM; in ath12k_wmi_send_scan_stop_cmd()
2727 cmd = (struct wmi_stop_scan_cmd *)skb->data; in ath12k_wmi_send_scan_stop_cmd()
2729 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_STOP_SCAN_CMD, in ath12k_wmi_send_scan_stop_cmd()
2732 cmd->vdev_id = cpu_to_le32(arg->vdev_id); in ath12k_wmi_send_scan_stop_cmd()
2733 cmd->requestor = cpu_to_le32(arg->requester); in ath12k_wmi_send_scan_stop_cmd()
2734 cmd->scan_id = cpu_to_le32(arg->scan_id); in ath12k_wmi_send_scan_stop_cmd()
2735 cmd->pdev_id = cpu_to_le32(arg->pdev_id); in ath12k_wmi_send_scan_stop_cmd()
2737 if (arg->req_type == WLAN_SCAN_CANCEL_PDEV_ALL) { in ath12k_wmi_send_scan_stop_cmd()
2739 cmd->req_type = cpu_to_le32(WMI_SCAN_STOP_ALL); in ath12k_wmi_send_scan_stop_cmd()
2740 } else if (arg->req_type == WLAN_SCAN_CANCEL_VDEV_ALL) { in ath12k_wmi_send_scan_stop_cmd()
2742 cmd->req_type = cpu_to_le32(WMI_SCAN_STOP_VAP_ALL); in ath12k_wmi_send_scan_stop_cmd()
2743 } else if (arg->req_type == WLAN_SCAN_CANCEL_SINGLE) { in ath12k_wmi_send_scan_stop_cmd()
2745 cmd->req_type = WMI_SCAN_STOP_ONE; in ath12k_wmi_send_scan_stop_cmd()
2747 ath12k_warn(ar->ab, "invalid scan cancel req_type %d", in ath12k_wmi_send_scan_stop_cmd()
2748 arg->req_type); in ath12k_wmi_send_scan_stop_cmd()
2750 return -EINVAL; in ath12k_wmi_send_scan_stop_cmd()
2756 ath12k_warn(ar->ab, "failed to send WMI_STOP_SCAN_CMDID\n"); in ath12k_wmi_send_scan_stop_cmd()
2766 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_send_scan_chan_list_cmd()
2777 channel_arg = &arg->channel[0]; in ath12k_wmi_send_scan_chan_list_cmd()
2778 while (arg->nallchans) { in ath12k_wmi_send_scan_chan_list_cmd()
2780 max_chan_limit = (wmi->wmi_ab->max_msg_len[ar->pdev_idx] - len) / in ath12k_wmi_send_scan_chan_list_cmd()
2783 num_send_chans = min(arg->nallchans, max_chan_limit); in ath12k_wmi_send_scan_chan_list_cmd()
2785 arg->nallchans -= num_send_chans; in ath12k_wmi_send_scan_chan_list_cmd()
2788 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, len); in ath12k_wmi_send_scan_chan_list_cmd()
2790 return -ENOMEM; in ath12k_wmi_send_scan_chan_list_cmd()
2792 cmd = (struct wmi_scan_chan_list_cmd *)skb->data; in ath12k_wmi_send_scan_chan_list_cmd()
2793 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_SCAN_CHAN_LIST_CMD, in ath12k_wmi_send_scan_chan_list_cmd()
2795 cmd->pdev_id = cpu_to_le32(arg->pdev_id); in ath12k_wmi_send_scan_chan_list_cmd()
2796 cmd->num_scan_chans = cpu_to_le32(num_send_chans); in ath12k_wmi_send_scan_chan_list_cmd()
2798 cmd->flags |= cpu_to_le32(WMI_APPEND_TO_EXISTING_CHAN_LIST_FLAG); in ath12k_wmi_send_scan_chan_list_cmd()
2800 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_send_scan_chan_list_cmd()
2802 num_send_chans, len, cmd->pdev_id, num_sends); in ath12k_wmi_send_scan_chan_list_cmd()
2804 ptr = skb->data + sizeof(*cmd); in ath12k_wmi_send_scan_chan_list_cmd()
2808 tlv->header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_ARRAY_STRUCT, in ath12k_wmi_send_scan_chan_list_cmd()
2816 chan_info->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_CHANNEL, in ath12k_wmi_send_scan_chan_list_cmd()
2819 reg1 = &chan_info->reg_info_1; in ath12k_wmi_send_scan_chan_list_cmd()
2820 reg2 = &chan_info->reg_info_2; in ath12k_wmi_send_scan_chan_list_cmd()
2821 chan_info->mhz = cpu_to_le32(channel_arg->mhz); in ath12k_wmi_send_scan_chan_list_cmd()
2822 chan_info->band_center_freq1 = cpu_to_le32(channel_arg->cfreq1); in ath12k_wmi_send_scan_chan_list_cmd()
2823 chan_info->band_center_freq2 = cpu_to_le32(channel_arg->cfreq2); in ath12k_wmi_send_scan_chan_list_cmd()
2825 if (channel_arg->is_chan_passive) in ath12k_wmi_send_scan_chan_list_cmd()
2826 chan_info->info |= cpu_to_le32(WMI_CHAN_INFO_PASSIVE); in ath12k_wmi_send_scan_chan_list_cmd()
2827 if (channel_arg->allow_he) in ath12k_wmi_send_scan_chan_list_cmd()
2828 chan_info->info |= cpu_to_le32(WMI_CHAN_INFO_ALLOW_HE); in ath12k_wmi_send_scan_chan_list_cmd()
2829 else if (channel_arg->allow_vht) in ath12k_wmi_send_scan_chan_list_cmd()
2830 chan_info->info |= cpu_to_le32(WMI_CHAN_INFO_ALLOW_VHT); in ath12k_wmi_send_scan_chan_list_cmd()
2831 else if (channel_arg->allow_ht) in ath12k_wmi_send_scan_chan_list_cmd()
2832 chan_info->info |= cpu_to_le32(WMI_CHAN_INFO_ALLOW_HT); in ath12k_wmi_send_scan_chan_list_cmd()
2833 if (channel_arg->half_rate) in ath12k_wmi_send_scan_chan_list_cmd()
2834 chan_info->info |= cpu_to_le32(WMI_CHAN_INFO_HALF_RATE); in ath12k_wmi_send_scan_chan_list_cmd()
2835 if (channel_arg->quarter_rate) in ath12k_wmi_send_scan_chan_list_cmd()
2836 chan_info->info |= in ath12k_wmi_send_scan_chan_list_cmd()
2839 if (channel_arg->psc_channel) in ath12k_wmi_send_scan_chan_list_cmd()
2840 chan_info->info |= cpu_to_le32(WMI_CHAN_INFO_PSC); in ath12k_wmi_send_scan_chan_list_cmd()
2842 if (channel_arg->dfs_set) in ath12k_wmi_send_scan_chan_list_cmd()
2843 chan_info->info |= cpu_to_le32(WMI_CHAN_INFO_DFS); in ath12k_wmi_send_scan_chan_list_cmd()
2845 chan_info->info |= le32_encode_bits(channel_arg->phy_mode, in ath12k_wmi_send_scan_chan_list_cmd()
2847 *reg1 |= le32_encode_bits(channel_arg->minpower, in ath12k_wmi_send_scan_chan_list_cmd()
2849 *reg1 |= le32_encode_bits(channel_arg->maxpower, in ath12k_wmi_send_scan_chan_list_cmd()
2851 *reg1 |= le32_encode_bits(channel_arg->maxregpower, in ath12k_wmi_send_scan_chan_list_cmd()
2853 *reg1 |= le32_encode_bits(channel_arg->reg_class_id, in ath12k_wmi_send_scan_chan_list_cmd()
2855 *reg2 |= le32_encode_bits(channel_arg->antennamax, in ath12k_wmi_send_scan_chan_list_cmd()
2857 *reg2 |= le32_encode_bits(channel_arg->maxregpower, in ath12k_wmi_send_scan_chan_list_cmd()
2860 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_send_scan_chan_list_cmd()
2861 "WMI chan scan list chan[%d] = %u, chan_info->info %8x\n", in ath12k_wmi_send_scan_chan_list_cmd()
2862 i, chan_info->mhz, chan_info->info); in ath12k_wmi_send_scan_chan_list_cmd()
2871 ath12k_warn(ar->ab, "failed to send WMI_SCAN_CHAN_LIST cmd\n"); in ath12k_wmi_send_scan_chan_list_cmd()
2885 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_send_wmm_update_cmd()
2892 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_send_wmm_update_cmd()
2894 return -ENOMEM; in ath12k_wmi_send_wmm_update_cmd()
2896 cmd = (struct wmi_vdev_set_wmm_params_cmd *)skb->data; in ath12k_wmi_send_wmm_update_cmd()
2897 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_VDEV_SET_WMM_PARAMS_CMD, in ath12k_wmi_send_wmm_update_cmd()
2900 cmd->vdev_id = cpu_to_le32(vdev_id); in ath12k_wmi_send_wmm_update_cmd()
2901 cmd->wmm_param_type = 0; in ath12k_wmi_send_wmm_update_cmd()
2906 wmi_wmm_arg = &param->ac_be; in ath12k_wmi_send_wmm_update_cmd()
2909 wmi_wmm_arg = &param->ac_bk; in ath12k_wmi_send_wmm_update_cmd()
2912 wmi_wmm_arg = &param->ac_vi; in ath12k_wmi_send_wmm_update_cmd()
2915 wmi_wmm_arg = &param->ac_vo; in ath12k_wmi_send_wmm_update_cmd()
2919 wmm_param = (struct wmi_wmm_params *)&cmd->wmm_params[ac]; in ath12k_wmi_send_wmm_update_cmd()
2920 wmm_param->tlv_header = in ath12k_wmi_send_wmm_update_cmd()
2924 wmm_param->aifs = cpu_to_le32(wmi_wmm_arg->aifs); in ath12k_wmi_send_wmm_update_cmd()
2925 wmm_param->cwmin = cpu_to_le32(wmi_wmm_arg->cwmin); in ath12k_wmi_send_wmm_update_cmd()
2926 wmm_param->cwmax = cpu_to_le32(wmi_wmm_arg->cwmax); in ath12k_wmi_send_wmm_update_cmd()
2927 wmm_param->txoplimit = cpu_to_le32(wmi_wmm_arg->txop); in ath12k_wmi_send_wmm_update_cmd()
2928 wmm_param->acm = cpu_to_le32(wmi_wmm_arg->acm); in ath12k_wmi_send_wmm_update_cmd()
2929 wmm_param->no_ack = cpu_to_le32(wmi_wmm_arg->no_ack); in ath12k_wmi_send_wmm_update_cmd()
2931 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_send_wmm_update_cmd()
2933 ac, wmm_param->aifs, wmm_param->cwmin, in ath12k_wmi_send_wmm_update_cmd()
2934 wmm_param->cwmax, wmm_param->txoplimit, in ath12k_wmi_send_wmm_update_cmd()
2935 wmm_param->acm, wmm_param->no_ack); in ath12k_wmi_send_wmm_update_cmd()
2940 ath12k_warn(ar->ab, in ath12k_wmi_send_wmm_update_cmd()
2951 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_send_dfs_phyerr_offload_enable_cmd()
2956 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_send_dfs_phyerr_offload_enable_cmd()
2958 return -ENOMEM; in ath12k_wmi_send_dfs_phyerr_offload_enable_cmd()
2960 cmd = (struct wmi_dfs_phyerr_offload_cmd *)skb->data; in ath12k_wmi_send_dfs_phyerr_offload_enable_cmd()
2961 cmd->tlv_header = in ath12k_wmi_send_dfs_phyerr_offload_enable_cmd()
2965 cmd->pdev_id = cpu_to_le32(pdev_id); in ath12k_wmi_send_dfs_phyerr_offload_enable_cmd()
2967 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_send_dfs_phyerr_offload_enable_cmd()
2973 ath12k_warn(ar->ab, in ath12k_wmi_send_dfs_phyerr_offload_enable_cmd()
2984 struct ath12k_wmi_base *wmi_ab = &ab->wmi_ab; in ath12k_wmi_set_bios_cmd()
2997 return -ENOMEM; in ath12k_wmi_set_bios_cmd()
2999 cmd = (struct wmi_pdev_set_bios_interface_cmd *)skb->data; in ath12k_wmi_set_bios_cmd()
3000 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_PDEV_SET_BIOS_INTERFACE_CMD, in ath12k_wmi_set_bios_cmd()
3002 cmd->pdev_id = cpu_to_le32(WMI_PDEV_ID_SOC); in ath12k_wmi_set_bios_cmd()
3003 cmd->param_type_id = cpu_to_le32(param_id); in ath12k_wmi_set_bios_cmd()
3004 cmd->length = cpu_to_le32(buf_len); in ath12k_wmi_set_bios_cmd()
3006 ptr = skb->data + sizeof(*cmd); in ath12k_wmi_set_bios_cmd()
3008 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_BYTE, len_aligned); in ath12k_wmi_set_bios_cmd()
3012 ret = ath12k_wmi_cmd_send(&wmi_ab->wmi[0], in ath12k_wmi_set_bios_cmd()
3027 struct ath12k_wmi_base *wmi_ab = &ab->wmi_ab; in ath12k_wmi_set_bios_sar_cmd()
3045 return -ENOMEM; in ath12k_wmi_set_bios_sar_cmd()
3047 cmd = (struct wmi_pdev_set_bios_sar_table_cmd *)skb->data; in ath12k_wmi_set_bios_sar_cmd()
3048 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_PDEV_SET_BIOS_SAR_TABLE_CMD, in ath12k_wmi_set_bios_sar_cmd()
3050 cmd->pdev_id = cpu_to_le32(WMI_PDEV_ID_SOC); in ath12k_wmi_set_bios_sar_cmd()
3051 cmd->sar_len = cpu_to_le32(ATH12K_ACPI_BIOS_SAR_TABLE_LEN); in ath12k_wmi_set_bios_sar_cmd()
3052 cmd->dbs_backoff_len = cpu_to_le32(ATH12K_ACPI_BIOS_SAR_DBS_BACKOFF_LEN); in ath12k_wmi_set_bios_sar_cmd()
3054 buf_ptr = skb->data + sizeof(*cmd); in ath12k_wmi_set_bios_sar_cmd()
3056 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_BYTE, in ath12k_wmi_set_bios_sar_cmd()
3063 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_BYTE, in ath12k_wmi_set_bios_sar_cmd()
3068 ret = ath12k_wmi_cmd_send(&wmi_ab->wmi[0], in ath12k_wmi_set_bios_sar_cmd()
3083 struct ath12k_wmi_base *wmi_ab = &ab->wmi_ab; in ath12k_wmi_set_bios_geo_cmd()
3097 return -ENOMEM; in ath12k_wmi_set_bios_geo_cmd()
3099 cmd = (struct wmi_pdev_set_bios_geo_table_cmd *)skb->data; in ath12k_wmi_set_bios_geo_cmd()
3100 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_PDEV_SET_BIOS_GEO_TABLE_CMD, in ath12k_wmi_set_bios_geo_cmd()
3102 cmd->pdev_id = cpu_to_le32(WMI_PDEV_ID_SOC); in ath12k_wmi_set_bios_geo_cmd()
3103 cmd->geo_len = cpu_to_le32(ATH12K_ACPI_BIOS_SAR_GEO_OFFSET_LEN); in ath12k_wmi_set_bios_geo_cmd()
3105 buf_ptr = skb->data + sizeof(*cmd); in ath12k_wmi_set_bios_geo_cmd()
3107 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_BYTE, sar_geo_len_aligned); in ath12k_wmi_set_bios_geo_cmd()
3111 ret = ath12k_wmi_cmd_send(&wmi_ab->wmi[0], in ath12k_wmi_set_bios_geo_cmd()
3127 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_delba_send()
3132 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_delba_send()
3134 return -ENOMEM; in ath12k_wmi_delba_send()
3136 cmd = (struct wmi_delba_send_cmd *)skb->data; in ath12k_wmi_delba_send()
3137 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_DELBA_SEND_CMD, in ath12k_wmi_delba_send()
3139 cmd->vdev_id = cpu_to_le32(vdev_id); in ath12k_wmi_delba_send()
3140 ether_addr_copy(cmd->peer_macaddr.addr, mac); in ath12k_wmi_delba_send()
3141 cmd->tid = cpu_to_le32(tid); in ath12k_wmi_delba_send()
3142 cmd->initiator = cpu_to_le32(initiator); in ath12k_wmi_delba_send()
3143 cmd->reasoncode = cpu_to_le32(reason); in ath12k_wmi_delba_send()
3145 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_delba_send()
3152 ath12k_warn(ar->ab, in ath12k_wmi_delba_send()
3163 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_addba_set_resp()
3168 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_addba_set_resp()
3170 return -ENOMEM; in ath12k_wmi_addba_set_resp()
3172 cmd = (struct wmi_addba_setresponse_cmd *)skb->data; in ath12k_wmi_addba_set_resp()
3173 cmd->tlv_header = in ath12k_wmi_addba_set_resp()
3176 cmd->vdev_id = cpu_to_le32(vdev_id); in ath12k_wmi_addba_set_resp()
3177 ether_addr_copy(cmd->peer_macaddr.addr, mac); in ath12k_wmi_addba_set_resp()
3178 cmd->tid = cpu_to_le32(tid); in ath12k_wmi_addba_set_resp()
3179 cmd->statuscode = cpu_to_le32(status); in ath12k_wmi_addba_set_resp()
3181 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_addba_set_resp()
3188 ath12k_warn(ar->ab, in ath12k_wmi_addba_set_resp()
3199 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_addba_send()
3204 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_addba_send()
3206 return -ENOMEM; in ath12k_wmi_addba_send()
3208 cmd = (struct wmi_addba_send_cmd *)skb->data; in ath12k_wmi_addba_send()
3209 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_ADDBA_SEND_CMD, in ath12k_wmi_addba_send()
3211 cmd->vdev_id = cpu_to_le32(vdev_id); in ath12k_wmi_addba_send()
3212 ether_addr_copy(cmd->peer_macaddr.addr, mac); in ath12k_wmi_addba_send()
3213 cmd->tid = cpu_to_le32(tid); in ath12k_wmi_addba_send()
3214 cmd->buffersize = cpu_to_le32(buf_size); in ath12k_wmi_addba_send()
3216 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_addba_send()
3223 ath12k_warn(ar->ab, in ath12k_wmi_addba_send()
3233 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_addba_clear_resp()
3238 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_addba_clear_resp()
3240 return -ENOMEM; in ath12k_wmi_addba_clear_resp()
3242 cmd = (struct wmi_addba_clear_resp_cmd *)skb->data; in ath12k_wmi_addba_clear_resp()
3243 cmd->tlv_header = in ath12k_wmi_addba_clear_resp()
3246 cmd->vdev_id = cpu_to_le32(vdev_id); in ath12k_wmi_addba_clear_resp()
3247 ether_addr_copy(cmd->peer_macaddr.addr, mac); in ath12k_wmi_addba_clear_resp()
3249 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_addba_clear_resp()
3256 ath12k_warn(ar->ab, in ath12k_wmi_addba_clear_resp()
3267 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_send_init_country_cmd()
3272 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_send_init_country_cmd()
3274 return -ENOMEM; in ath12k_wmi_send_init_country_cmd()
3276 cmd = (struct wmi_init_country_cmd *)skb->data; in ath12k_wmi_send_init_country_cmd()
3277 cmd->tlv_header = in ath12k_wmi_send_init_country_cmd()
3281 cmd->pdev_id = cpu_to_le32(ar->pdev->pdev_id); in ath12k_wmi_send_init_country_cmd()
3283 switch (arg->flags) { in ath12k_wmi_send_init_country_cmd()
3285 cmd->init_cc_type = WMI_COUNTRY_INFO_TYPE_ALPHA; in ath12k_wmi_send_init_country_cmd()
3286 memcpy(&cmd->cc_info.alpha2, arg->cc_info.alpha2, 3); in ath12k_wmi_send_init_country_cmd()
3289 cmd->init_cc_type = cpu_to_le32(WMI_COUNTRY_INFO_TYPE_COUNTRY_CODE); in ath12k_wmi_send_init_country_cmd()
3290 cmd->cc_info.country_code = in ath12k_wmi_send_init_country_cmd()
3291 cpu_to_le32(arg->cc_info.country_code); in ath12k_wmi_send_init_country_cmd()
3294 cmd->init_cc_type = cpu_to_le32(WMI_COUNTRY_INFO_TYPE_REGDOMAIN); in ath12k_wmi_send_init_country_cmd()
3295 cmd->cc_info.regdom_id = cpu_to_le32(arg->cc_info.regdom_id); in ath12k_wmi_send_init_country_cmd()
3298 ret = -EINVAL; in ath12k_wmi_send_init_country_cmd()
3307 ath12k_warn(ar->ab, in ath12k_wmi_send_init_country_cmd()
3319 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_send_twt_enable_cmd()
3320 struct ath12k_base *ab = wmi->wmi_ab->ab; in ath12k_wmi_send_twt_enable_cmd()
3327 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, len); in ath12k_wmi_send_twt_enable_cmd()
3329 return -ENOMEM; in ath12k_wmi_send_twt_enable_cmd()
3331 cmd = (struct wmi_twt_enable_params_cmd *)skb->data; in ath12k_wmi_send_twt_enable_cmd()
3332 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_TWT_ENABLE_CMD, in ath12k_wmi_send_twt_enable_cmd()
3334 cmd->pdev_id = cpu_to_le32(pdev_id); in ath12k_wmi_send_twt_enable_cmd()
3335 cmd->sta_cong_timer_ms = cpu_to_le32(ATH12K_TWT_DEF_STA_CONG_TIMER_MS); in ath12k_wmi_send_twt_enable_cmd()
3336 cmd->default_slot_size = cpu_to_le32(ATH12K_TWT_DEF_DEFAULT_SLOT_SIZE); in ath12k_wmi_send_twt_enable_cmd()
3337 cmd->congestion_thresh_setup = in ath12k_wmi_send_twt_enable_cmd()
3339 cmd->congestion_thresh_teardown = in ath12k_wmi_send_twt_enable_cmd()
3341 cmd->congestion_thresh_critical = in ath12k_wmi_send_twt_enable_cmd()
3343 cmd->interference_thresh_teardown = in ath12k_wmi_send_twt_enable_cmd()
3345 cmd->interference_thresh_setup = in ath12k_wmi_send_twt_enable_cmd()
3347 cmd->min_no_sta_setup = cpu_to_le32(ATH12K_TWT_DEF_MIN_NO_STA_SETUP); in ath12k_wmi_send_twt_enable_cmd()
3348 cmd->min_no_sta_teardown = cpu_to_le32(ATH12K_TWT_DEF_MIN_NO_STA_TEARDOWN); in ath12k_wmi_send_twt_enable_cmd()
3349 cmd->no_of_bcast_mcast_slots = in ath12k_wmi_send_twt_enable_cmd()
3351 cmd->min_no_twt_slots = cpu_to_le32(ATH12K_TWT_DEF_MIN_NO_TWT_SLOTS); in ath12k_wmi_send_twt_enable_cmd()
3352 cmd->max_no_sta_twt = cpu_to_le32(ATH12K_TWT_DEF_MAX_NO_STA_TWT); in ath12k_wmi_send_twt_enable_cmd()
3353 cmd->mode_check_interval = cpu_to_le32(ATH12K_TWT_DEF_MODE_CHECK_INTERVAL); in ath12k_wmi_send_twt_enable_cmd()
3354 cmd->add_sta_slot_interval = cpu_to_le32(ATH12K_TWT_DEF_ADD_STA_SLOT_INTERVAL); in ath12k_wmi_send_twt_enable_cmd()
3355 cmd->remove_sta_slot_interval = in ath12k_wmi_send_twt_enable_cmd()
3358 cmd->mbss_support = 0; in ath12k_wmi_send_twt_enable_cmd()
3372 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_send_twt_disable_cmd()
3373 struct ath12k_base *ab = wmi->wmi_ab->ab; in ath12k_wmi_send_twt_disable_cmd()
3380 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, len); in ath12k_wmi_send_twt_disable_cmd()
3382 return -ENOMEM; in ath12k_wmi_send_twt_disable_cmd()
3384 cmd = (struct wmi_twt_disable_params_cmd *)skb->data; in ath12k_wmi_send_twt_disable_cmd()
3385 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_TWT_DISABLE_CMD, in ath12k_wmi_send_twt_disable_cmd()
3387 cmd->pdev_id = cpu_to_le32(pdev_id); in ath12k_wmi_send_twt_disable_cmd()
3402 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_send_obss_spr_cmd()
3403 struct ath12k_base *ab = wmi->wmi_ab->ab; in ath12k_wmi_send_obss_spr_cmd()
3410 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, len); in ath12k_wmi_send_obss_spr_cmd()
3412 return -ENOMEM; in ath12k_wmi_send_obss_spr_cmd()
3414 cmd = (struct wmi_obss_spatial_reuse_params_cmd *)skb->data; in ath12k_wmi_send_obss_spr_cmd()
3415 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_OBSS_SPATIAL_REUSE_SET_CMD, in ath12k_wmi_send_obss_spr_cmd()
3417 cmd->vdev_id = cpu_to_le32(vdev_id); in ath12k_wmi_send_obss_spr_cmd()
3418 cmd->enable = cpu_to_le32(he_obss_pd->enable); in ath12k_wmi_send_obss_spr_cmd()
3419 cmd->obss_min = a_cpu_to_sle32(he_obss_pd->min_offset); in ath12k_wmi_send_obss_spr_cmd()
3420 cmd->obss_max = a_cpu_to_sle32(he_obss_pd->max_offset); in ath12k_wmi_send_obss_spr_cmd()
3436 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_obss_color_cfg_cmd()
3437 struct ath12k_base *ab = wmi->wmi_ab->ab; in ath12k_wmi_obss_color_cfg_cmd()
3444 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, len); in ath12k_wmi_obss_color_cfg_cmd()
3446 return -ENOMEM; in ath12k_wmi_obss_color_cfg_cmd()
3448 cmd = (struct wmi_obss_color_collision_cfg_params_cmd *)skb->data; in ath12k_wmi_obss_color_cfg_cmd()
3449 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_OBSS_COLOR_COLLISION_DET_CONFIG, in ath12k_wmi_obss_color_cfg_cmd()
3451 cmd->vdev_id = cpu_to_le32(vdev_id); in ath12k_wmi_obss_color_cfg_cmd()
3452 cmd->evt_type = enable ? cpu_to_le32(ATH12K_OBSS_COLOR_COLLISION_DETECTION) : in ath12k_wmi_obss_color_cfg_cmd()
3454 cmd->current_bss_color = cpu_to_le32(bss_color); in ath12k_wmi_obss_color_cfg_cmd()
3455 cmd->detection_period_ms = cpu_to_le32(period); in ath12k_wmi_obss_color_cfg_cmd()
3456 cmd->scan_period_ms = cpu_to_le32(ATH12K_BSS_COLOR_COLLISION_SCAN_PERIOD_MS); in ath12k_wmi_obss_color_cfg_cmd()
3457 cmd->free_slot_expiry_time_ms = 0; in ath12k_wmi_obss_color_cfg_cmd()
3458 cmd->flags = 0; in ath12k_wmi_obss_color_cfg_cmd()
3460 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_obss_color_cfg_cmd()
3462 cmd->vdev_id, cmd->evt_type, cmd->current_bss_color, in ath12k_wmi_obss_color_cfg_cmd()
3463 cmd->detection_period_ms, cmd->scan_period_ms); in ath12k_wmi_obss_color_cfg_cmd()
3477 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_send_bss_color_change_enable_cmd()
3478 struct ath12k_base *ab = wmi->wmi_ab->ab; in ath12k_wmi_send_bss_color_change_enable_cmd()
3485 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, len); in ath12k_wmi_send_bss_color_change_enable_cmd()
3487 return -ENOMEM; in ath12k_wmi_send_bss_color_change_enable_cmd()
3489 cmd = (struct wmi_bss_color_change_enable_params_cmd *)skb->data; in ath12k_wmi_send_bss_color_change_enable_cmd()
3490 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_BSS_COLOR_CHANGE_ENABLE, in ath12k_wmi_send_bss_color_change_enable_cmd()
3492 cmd->vdev_id = cpu_to_le32(vdev_id); in ath12k_wmi_send_bss_color_change_enable_cmd()
3493 cmd->enable = enable ? cpu_to_le32(1) : 0; in ath12k_wmi_send_bss_color_change_enable_cmd()
3495 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_send_bss_color_change_enable_cmd()
3497 cmd->vdev_id, cmd->enable); in ath12k_wmi_send_bss_color_change_enable_cmd()
3518 aligned_len = roundup(tmpl->len, 4); in ath12k_wmi_fils_discovery_tmpl()
3521 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_fils_discovery_tmpl()
3524 skb = ath12k_wmi_alloc_skb(ar->wmi->wmi_ab, len); in ath12k_wmi_fils_discovery_tmpl()
3526 return -ENOMEM; in ath12k_wmi_fils_discovery_tmpl()
3528 cmd = (struct wmi_fils_discovery_tmpl_cmd *)skb->data; in ath12k_wmi_fils_discovery_tmpl()
3529 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_FILS_DISCOVERY_TMPL_CMD, in ath12k_wmi_fils_discovery_tmpl()
3531 cmd->vdev_id = cpu_to_le32(vdev_id); in ath12k_wmi_fils_discovery_tmpl()
3532 cmd->buf_len = cpu_to_le32(tmpl->len); in ath12k_wmi_fils_discovery_tmpl()
3533 ptr = skb->data + sizeof(*cmd); in ath12k_wmi_fils_discovery_tmpl()
3536 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_BYTE, aligned_len); in ath12k_wmi_fils_discovery_tmpl()
3537 memcpy(tlv->value, tmpl->data, tmpl->len); in ath12k_wmi_fils_discovery_tmpl()
3539 ret = ath12k_wmi_cmd_send(ar->wmi, skb, WMI_FILS_DISCOVERY_TMPL_CMDID); in ath12k_wmi_fils_discovery_tmpl()
3541 ath12k_warn(ar->ab, in ath12k_wmi_fils_discovery_tmpl()
3558 size_t aligned_len = roundup(tmpl->len, 4); in ath12k_wmi_probe_resp_tmpl()
3560 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_probe_resp_tmpl()
3565 skb = ath12k_wmi_alloc_skb(ar->wmi->wmi_ab, len); in ath12k_wmi_probe_resp_tmpl()
3567 return -ENOMEM; in ath12k_wmi_probe_resp_tmpl()
3569 cmd = (struct wmi_probe_tmpl_cmd *)skb->data; in ath12k_wmi_probe_resp_tmpl()
3570 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_PRB_TMPL_CMD, in ath12k_wmi_probe_resp_tmpl()
3572 cmd->vdev_id = cpu_to_le32(vdev_id); in ath12k_wmi_probe_resp_tmpl()
3573 cmd->buf_len = cpu_to_le32(tmpl->len); in ath12k_wmi_probe_resp_tmpl()
3575 ptr = skb->data + sizeof(*cmd); in ath12k_wmi_probe_resp_tmpl()
3579 probe_info->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_BCN_PRB_INFO, in ath12k_wmi_probe_resp_tmpl()
3581 probe_info->caps = 0; in ath12k_wmi_probe_resp_tmpl()
3582 probe_info->erp = 0; in ath12k_wmi_probe_resp_tmpl()
3587 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_BYTE, aligned_len); in ath12k_wmi_probe_resp_tmpl()
3588 memcpy(tlv->value, tmpl->data, tmpl->len); in ath12k_wmi_probe_resp_tmpl()
3590 ret = ath12k_wmi_cmd_send(ar->wmi, skb, WMI_PRB_TMPL_CMDID); in ath12k_wmi_probe_resp_tmpl()
3592 ath12k_warn(ar->ab, in ath12k_wmi_probe_resp_tmpl()
3607 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_fils_discovery()
3614 skb = ath12k_wmi_alloc_skb(ar->wmi->wmi_ab, len); in ath12k_wmi_fils_discovery()
3616 return -ENOMEM; in ath12k_wmi_fils_discovery()
3618 cmd = (struct wmi_fils_discovery_cmd *)skb->data; in ath12k_wmi_fils_discovery()
3619 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_ENABLE_FILS_CMD, in ath12k_wmi_fils_discovery()
3621 cmd->vdev_id = cpu_to_le32(vdev_id); in ath12k_wmi_fils_discovery()
3622 cmd->interval = cpu_to_le32(interval); in ath12k_wmi_fils_discovery()
3623 cmd->config = cpu_to_le32(unsol_bcast_probe_resp_enabled); in ath12k_wmi_fils_discovery()
3625 ret = ath12k_wmi_cmd_send(ar->wmi, skb, WMI_ENABLE_FILS_CMDID); in ath12k_wmi_fils_discovery()
3627 ath12k_warn(ar->ab, in ath12k_wmi_fils_discovery()
3643 for (i = 0; i < soc->num_radios; i++) { in ath12k_fill_band_to_mac_param()
3644 pdev = &soc->pdevs[i]; in ath12k_fill_band_to_mac_param()
3645 hal_reg_cap = &soc->hal_reg_cap[i]; in ath12k_fill_band_to_mac_param()
3646 arg[i].pdev_id = pdev->pdev_id; in ath12k_fill_band_to_mac_param()
3648 switch (pdev->cap.supported_bands) { in ath12k_fill_band_to_mac_param()
3650 arg[i].start_freq = hal_reg_cap->low_2ghz_chan; in ath12k_fill_band_to_mac_param()
3651 arg[i].end_freq = hal_reg_cap->high_5ghz_chan; in ath12k_fill_band_to_mac_param()
3654 arg[i].start_freq = hal_reg_cap->low_2ghz_chan; in ath12k_fill_band_to_mac_param()
3655 arg[i].end_freq = hal_reg_cap->high_2ghz_chan; in ath12k_fill_band_to_mac_param()
3658 arg[i].start_freq = hal_reg_cap->low_5ghz_chan; in ath12k_fill_band_to_mac_param()
3659 arg[i].end_freq = hal_reg_cap->high_5ghz_chan; in ath12k_fill_band_to_mac_param()
3671 wmi_cfg->num_vdevs = cpu_to_le32(tg_cfg->num_vdevs); in ath12k_wmi_copy_resource_config()
3672 wmi_cfg->num_peers = cpu_to_le32(tg_cfg->num_peers); in ath12k_wmi_copy_resource_config()
3673 wmi_cfg->num_offload_peers = cpu_to_le32(tg_cfg->num_offload_peers); in ath12k_wmi_copy_resource_config()
3674 wmi_cfg->num_offload_reorder_buffs = in ath12k_wmi_copy_resource_config()
3675 cpu_to_le32(tg_cfg->num_offload_reorder_buffs); in ath12k_wmi_copy_resource_config()
3676 wmi_cfg->num_peer_keys = cpu_to_le32(tg_cfg->num_peer_keys); in ath12k_wmi_copy_resource_config()
3677 wmi_cfg->num_tids = cpu_to_le32(tg_cfg->num_tids); in ath12k_wmi_copy_resource_config()
3678 wmi_cfg->ast_skid_limit = cpu_to_le32(tg_cfg->ast_skid_limit); in ath12k_wmi_copy_resource_config()
3679 wmi_cfg->tx_chain_mask = cpu_to_le32(tg_cfg->tx_chain_mask); in ath12k_wmi_copy_resource_config()
3680 wmi_cfg->rx_chain_mask = cpu_to_le32(tg_cfg->rx_chain_mask); in ath12k_wmi_copy_resource_config()
3681 wmi_cfg->rx_timeout_pri[0] = cpu_to_le32(tg_cfg->rx_timeout_pri[0]); in ath12k_wmi_copy_resource_config()
3682 wmi_cfg->rx_timeout_pri[1] = cpu_to_le32(tg_cfg->rx_timeout_pri[1]); in ath12k_wmi_copy_resource_config()
3683 wmi_cfg->rx_timeout_pri[2] = cpu_to_le32(tg_cfg->rx_timeout_pri[2]); in ath12k_wmi_copy_resource_config()
3684 wmi_cfg->rx_timeout_pri[3] = cpu_to_le32(tg_cfg->rx_timeout_pri[3]); in ath12k_wmi_copy_resource_config()
3685 wmi_cfg->rx_decap_mode = cpu_to_le32(tg_cfg->rx_decap_mode); in ath12k_wmi_copy_resource_config()
3686 wmi_cfg->scan_max_pending_req = cpu_to_le32(tg_cfg->scan_max_pending_req); in ath12k_wmi_copy_resource_config()
3687 wmi_cfg->bmiss_offload_max_vdev = cpu_to_le32(tg_cfg->bmiss_offload_max_vdev); in ath12k_wmi_copy_resource_config()
3688 wmi_cfg->roam_offload_max_vdev = cpu_to_le32(tg_cfg->roam_offload_max_vdev); in ath12k_wmi_copy_resource_config()
3689 wmi_cfg->roam_offload_max_ap_profiles = in ath12k_wmi_copy_resource_config()
3690 cpu_to_le32(tg_cfg->roam_offload_max_ap_profiles); in ath12k_wmi_copy_resource_config()
3691 wmi_cfg->num_mcast_groups = cpu_to_le32(tg_cfg->num_mcast_groups); in ath12k_wmi_copy_resource_config()
3692 wmi_cfg->num_mcast_table_elems = cpu_to_le32(tg_cfg->num_mcast_table_elems); in ath12k_wmi_copy_resource_config()
3693 wmi_cfg->mcast2ucast_mode = cpu_to_le32(tg_cfg->mcast2ucast_mode); in ath12k_wmi_copy_resource_config()
3694 wmi_cfg->tx_dbg_log_size = cpu_to_le32(tg_cfg->tx_dbg_log_size); in ath12k_wmi_copy_resource_config()
3695 wmi_cfg->num_wds_entries = cpu_to_le32(tg_cfg->num_wds_entries); in ath12k_wmi_copy_resource_config()
3696 wmi_cfg->dma_burst_size = cpu_to_le32(tg_cfg->dma_burst_size); in ath12k_wmi_copy_resource_config()
3697 wmi_cfg->mac_aggr_delim = cpu_to_le32(tg_cfg->mac_aggr_delim); in ath12k_wmi_copy_resource_config()
3698 wmi_cfg->rx_skip_defrag_timeout_dup_detection_check = in ath12k_wmi_copy_resource_config()
3699 cpu_to_le32(tg_cfg->rx_skip_defrag_timeout_dup_detection_check); in ath12k_wmi_copy_resource_config()
3700 wmi_cfg->vow_config = cpu_to_le32(tg_cfg->vow_config); in ath12k_wmi_copy_resource_config()
3701 wmi_cfg->gtk_offload_max_vdev = cpu_to_le32(tg_cfg->gtk_offload_max_vdev); in ath12k_wmi_copy_resource_config()
3702 wmi_cfg->num_msdu_desc = cpu_to_le32(tg_cfg->num_msdu_desc); in ath12k_wmi_copy_resource_config()
3703 wmi_cfg->max_frag_entries = cpu_to_le32(tg_cfg->max_frag_entries); in ath12k_wmi_copy_resource_config()
3704 wmi_cfg->num_tdls_vdevs = cpu_to_le32(tg_cfg->num_tdls_vdevs); in ath12k_wmi_copy_resource_config()
3705 wmi_cfg->num_tdls_conn_table_entries = in ath12k_wmi_copy_resource_config()
3706 cpu_to_le32(tg_cfg->num_tdls_conn_table_entries); in ath12k_wmi_copy_resource_config()
3707 wmi_cfg->beacon_tx_offload_max_vdev = in ath12k_wmi_copy_resource_config()
3708 cpu_to_le32(tg_cfg->beacon_tx_offload_max_vdev); in ath12k_wmi_copy_resource_config()
3709 wmi_cfg->num_multicast_filter_entries = in ath12k_wmi_copy_resource_config()
3710 cpu_to_le32(tg_cfg->num_multicast_filter_entries); in ath12k_wmi_copy_resource_config()
3711 wmi_cfg->num_wow_filters = cpu_to_le32(tg_cfg->num_wow_filters); in ath12k_wmi_copy_resource_config()
3712 wmi_cfg->num_keep_alive_pattern = cpu_to_le32(tg_cfg->num_keep_alive_pattern); in ath12k_wmi_copy_resource_config()
3713 wmi_cfg->keep_alive_pattern_size = cpu_to_le32(tg_cfg->keep_alive_pattern_size); in ath12k_wmi_copy_resource_config()
3714 wmi_cfg->max_tdls_concurrent_sleep_sta = in ath12k_wmi_copy_resource_config()
3715 cpu_to_le32(tg_cfg->max_tdls_concurrent_sleep_sta); in ath12k_wmi_copy_resource_config()
3716 wmi_cfg->max_tdls_concurrent_buffer_sta = in ath12k_wmi_copy_resource_config()
3717 cpu_to_le32(tg_cfg->max_tdls_concurrent_buffer_sta); in ath12k_wmi_copy_resource_config()
3718 wmi_cfg->wmi_send_separate = cpu_to_le32(tg_cfg->wmi_send_separate); in ath12k_wmi_copy_resource_config()
3719 wmi_cfg->num_ocb_vdevs = cpu_to_le32(tg_cfg->num_ocb_vdevs); in ath12k_wmi_copy_resource_config()
3720 wmi_cfg->num_ocb_channels = cpu_to_le32(tg_cfg->num_ocb_channels); in ath12k_wmi_copy_resource_config()
3721 wmi_cfg->num_ocb_schedules = cpu_to_le32(tg_cfg->num_ocb_schedules); in ath12k_wmi_copy_resource_config()
3722 wmi_cfg->bpf_instruction_size = cpu_to_le32(tg_cfg->bpf_instruction_size); in ath12k_wmi_copy_resource_config()
3723 wmi_cfg->max_bssid_rx_filters = cpu_to_le32(tg_cfg->max_bssid_rx_filters); in ath12k_wmi_copy_resource_config()
3724 wmi_cfg->use_pdev_id = cpu_to_le32(tg_cfg->use_pdev_id); in ath12k_wmi_copy_resource_config()
3725 wmi_cfg->flag1 = cpu_to_le32(tg_cfg->atf_config | in ath12k_wmi_copy_resource_config()
3727 wmi_cfg->peer_map_unmap_version = cpu_to_le32(tg_cfg->peer_map_unmap_version); in ath12k_wmi_copy_resource_config()
3728 wmi_cfg->sched_params = cpu_to_le32(tg_cfg->sched_params); in ath12k_wmi_copy_resource_config()
3729 wmi_cfg->twt_ap_pdev_count = cpu_to_le32(tg_cfg->twt_ap_pdev_count); in ath12k_wmi_copy_resource_config()
3730 wmi_cfg->twt_ap_sta_count = cpu_to_le32(tg_cfg->twt_ap_sta_count); in ath12k_wmi_copy_resource_config()
3731 wmi_cfg->flags2 = le32_encode_bits(tg_cfg->peer_metadata_ver, in ath12k_wmi_copy_resource_config()
3733 wmi_cfg->host_service_flags = cpu_to_le32(tg_cfg->is_reg_cc_ext_event_supported << in ath12k_wmi_copy_resource_config()
3735 wmi_cfg->ema_max_vap_cnt = cpu_to_le32(tg_cfg->ema_max_vap_cnt); in ath12k_wmi_copy_resource_config()
3736 wmi_cfg->ema_max_profile_period = cpu_to_le32(tg_cfg->ema_max_profile_period); in ath12k_wmi_copy_resource_config()
3737 wmi_cfg->flags2 |= cpu_to_le32(WMI_RSRC_CFG_FLAGS2_CALC_NEXT_DTIM_COUNT_SET); in ath12k_wmi_copy_resource_config()
3743 struct ath12k_base *ab = wmi->wmi_ab->ab; in ath12k_init_cmd_send()
3756 if (arg->hw_mode_id != WMI_HOST_HW_MODE_MAX) in ath12k_init_cmd_send()
3758 (arg->num_band_to_mac * sizeof(*band_to_mac)); in ath12k_init_cmd_send()
3761 (arg->num_mem_chunks ? (sizeof(*host_mem_chunks) * WMI_MAX_MEM_REQS) : 0); in ath12k_init_cmd_send()
3763 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, len); in ath12k_init_cmd_send()
3765 return -ENOMEM; in ath12k_init_cmd_send()
3767 cmd = (struct wmi_init_cmd *)skb->data; in ath12k_init_cmd_send()
3769 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_INIT_CMD, in ath12k_init_cmd_send()
3772 ptr = skb->data + sizeof(*cmd); in ath12k_init_cmd_send()
3775 ath12k_wmi_copy_resource_config(cfg, &arg->res_cfg); in ath12k_init_cmd_send()
3777 cfg->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_RESOURCE_CONFIG, in ath12k_init_cmd_send()
3784 for (idx = 0; idx < arg->num_mem_chunks; ++idx) { in ath12k_init_cmd_send()
3789 host_mem_chunks[idx].ptr = cpu_to_le32(arg->mem_chunks[idx].paddr); in ath12k_init_cmd_send()
3790 host_mem_chunks[idx].size = cpu_to_le32(arg->mem_chunks[idx].len); in ath12k_init_cmd_send()
3791 host_mem_chunks[idx].req_id = cpu_to_le32(arg->mem_chunks[idx].req_id); in ath12k_init_cmd_send()
3795 arg->mem_chunks[idx].req_id, in ath12k_init_cmd_send()
3796 (u64)arg->mem_chunks[idx].paddr, in ath12k_init_cmd_send()
3797 arg->mem_chunks[idx].len); in ath12k_init_cmd_send()
3799 cmd->num_host_mem_chunks = cpu_to_le32(arg->num_mem_chunks); in ath12k_init_cmd_send()
3800 len = sizeof(struct ath12k_wmi_host_mem_chunk_params) * arg->num_mem_chunks; in ath12k_init_cmd_send()
3804 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_STRUCT, len); in ath12k_init_cmd_send()
3807 if (arg->hw_mode_id != WMI_HOST_HW_MODE_MAX) { in ath12k_init_cmd_send()
3809 hw_mode->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_PDEV_SET_HW_MODE_CMD, in ath12k_init_cmd_send()
3812 hw_mode->hw_mode_index = cpu_to_le32(arg->hw_mode_id); in ath12k_init_cmd_send()
3813 hw_mode->num_band_to_mac = cpu_to_le32(arg->num_band_to_mac); in ath12k_init_cmd_send()
3817 len = arg->num_band_to_mac * sizeof(*band_to_mac); in ath12k_init_cmd_send()
3819 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_STRUCT, len); in ath12k_init_cmd_send()
3824 for (idx = 0; idx < arg->num_band_to_mac; idx++) { in ath12k_init_cmd_send()
3827 band_to_mac->tlv_header = in ath12k_init_cmd_send()
3830 band_to_mac->pdev_id = cpu_to_le32(arg->band_to_mac[idx].pdev_id); in ath12k_init_cmd_send()
3831 band_to_mac->start_freq = in ath12k_init_cmd_send()
3832 cpu_to_le32(arg->band_to_mac[idx].start_freq); in ath12k_init_cmd_send()
3833 band_to_mac->end_freq = in ath12k_init_cmd_send()
3834 cpu_to_le32(arg->band_to_mac[idx].end_freq); in ath12k_init_cmd_send()
3855 skb = ath12k_wmi_alloc_skb(ar->wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_pdev_lro_cfg()
3857 return -ENOMEM; in ath12k_wmi_pdev_lro_cfg()
3859 cmd = (struct ath12k_wmi_pdev_lro_config_cmd *)skb->data; in ath12k_wmi_pdev_lro_cfg()
3860 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_LRO_INFO_CMD, in ath12k_wmi_pdev_lro_cfg()
3863 get_random_bytes(cmd->th_4, sizeof(cmd->th_4)); in ath12k_wmi_pdev_lro_cfg()
3864 get_random_bytes(cmd->th_6, sizeof(cmd->th_6)); in ath12k_wmi_pdev_lro_cfg()
3866 cmd->pdev_id = cpu_to_le32(pdev_id); in ath12k_wmi_pdev_lro_cfg()
3868 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_pdev_lro_cfg()
3871 ret = ath12k_wmi_cmd_send(ar->wmi, skb, WMI_LRO_CONFIG_CMDID); in ath12k_wmi_pdev_lro_cfg()
3873 ath12k_warn(ar->ab, in ath12k_wmi_pdev_lro_cfg()
3888 time_left = wait_for_completion_timeout(&ab->wmi_ab.service_ready, in ath12k_wmi_wait_for_service_ready()
3891 return -ETIMEDOUT; in ath12k_wmi_wait_for_service_ready()
3900 time_left = wait_for_completion_timeout(&ab->wmi_ab.unified_ready, in ath12k_wmi_wait_for_unified_ready()
3903 return -ETIMEDOUT; in ath12k_wmi_wait_for_unified_ready()
3913 struct ath12k_wmi_base *wmi_ab = &ab->wmi_ab; in ath12k_wmi_set_hw_mode()
3921 return -ENOMEM; in ath12k_wmi_set_hw_mode()
3923 cmd = (struct ath12k_wmi_pdev_set_hw_mode_cmd *)skb->data; in ath12k_wmi_set_hw_mode()
3925 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_PDEV_SET_HW_MODE_CMD, in ath12k_wmi_set_hw_mode()
3928 cmd->pdev_id = WMI_PDEV_ID_SOC; in ath12k_wmi_set_hw_mode()
3929 cmd->hw_mode_index = cpu_to_le32(mode); in ath12k_wmi_set_hw_mode()
3931 ret = ath12k_wmi_cmd_send(&wmi_ab->wmi[0], skb, WMI_PDEV_SET_HW_MODE_CMDID); in ath12k_wmi_set_hw_mode()
3942 struct ath12k_wmi_base *wmi_ab = &ab->wmi_ab; in ath12k_wmi_cmd_init()
3946 ab->wmi_ab.svc_map)) in ath12k_wmi_cmd_init()
3949 ab->hw_params->wmi_init(ab, &arg.res_cfg); in ath12k_wmi_cmd_init()
3950 ab->wow.wmi_conf_rx_decap_mode = arg.res_cfg.rx_decap_mode; in ath12k_wmi_cmd_init()
3952 arg.num_mem_chunks = wmi_ab->num_mem_chunks; in ath12k_wmi_cmd_init()
3953 arg.hw_mode_id = wmi_ab->preferred_hw_mode; in ath12k_wmi_cmd_init()
3954 arg.mem_chunks = wmi_ab->mem_chunks; in ath12k_wmi_cmd_init()
3956 if (ab->hw_params->single_pdev_only) in ath12k_wmi_cmd_init()
3959 arg.num_band_to_mac = ab->num_radios; in ath12k_wmi_cmd_init()
3962 ab->dp.peer_metadata_ver = arg.res_cfg.peer_metadata_ver; in ath12k_wmi_cmd_init()
3964 return ath12k_init_cmd_send(&wmi_ab->wmi[0], &arg); in ath12k_wmi_cmd_init()
3974 skb = ath12k_wmi_alloc_skb(ar->wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_vdev_spectral_conf()
3976 return -ENOMEM; in ath12k_wmi_vdev_spectral_conf()
3978 cmd = (struct ath12k_wmi_vdev_spectral_conf_cmd *)skb->data; in ath12k_wmi_vdev_spectral_conf()
3979 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_VDEV_SPECTRAL_CONFIGURE_CMD, in ath12k_wmi_vdev_spectral_conf()
3981 cmd->vdev_id = cpu_to_le32(arg->vdev_id); in ath12k_wmi_vdev_spectral_conf()
3982 cmd->scan_count = cpu_to_le32(arg->scan_count); in ath12k_wmi_vdev_spectral_conf()
3983 cmd->scan_period = cpu_to_le32(arg->scan_period); in ath12k_wmi_vdev_spectral_conf()
3984 cmd->scan_priority = cpu_to_le32(arg->scan_priority); in ath12k_wmi_vdev_spectral_conf()
3985 cmd->scan_fft_size = cpu_to_le32(arg->scan_fft_size); in ath12k_wmi_vdev_spectral_conf()
3986 cmd->scan_gc_ena = cpu_to_le32(arg->scan_gc_ena); in ath12k_wmi_vdev_spectral_conf()
3987 cmd->scan_restart_ena = cpu_to_le32(arg->scan_restart_ena); in ath12k_wmi_vdev_spectral_conf()
3988 cmd->scan_noise_floor_ref = cpu_to_le32(arg->scan_noise_floor_ref); in ath12k_wmi_vdev_spectral_conf()
3989 cmd->scan_init_delay = cpu_to_le32(arg->scan_init_delay); in ath12k_wmi_vdev_spectral_conf()
3990 cmd->scan_nb_tone_thr = cpu_to_le32(arg->scan_nb_tone_thr); in ath12k_wmi_vdev_spectral_conf()
3991 cmd->scan_str_bin_thr = cpu_to_le32(arg->scan_str_bin_thr); in ath12k_wmi_vdev_spectral_conf()
3992 cmd->scan_wb_rpt_mode = cpu_to_le32(arg->scan_wb_rpt_mode); in ath12k_wmi_vdev_spectral_conf()
3993 cmd->scan_rssi_rpt_mode = cpu_to_le32(arg->scan_rssi_rpt_mode); in ath12k_wmi_vdev_spectral_conf()
3994 cmd->scan_rssi_thr = cpu_to_le32(arg->scan_rssi_thr); in ath12k_wmi_vdev_spectral_conf()
3995 cmd->scan_pwr_format = cpu_to_le32(arg->scan_pwr_format); in ath12k_wmi_vdev_spectral_conf()
3996 cmd->scan_rpt_mode = cpu_to_le32(arg->scan_rpt_mode); in ath12k_wmi_vdev_spectral_conf()
3997 cmd->scan_bin_scale = cpu_to_le32(arg->scan_bin_scale); in ath12k_wmi_vdev_spectral_conf()
3998 cmd->scan_dbm_adj = cpu_to_le32(arg->scan_dbm_adj); in ath12k_wmi_vdev_spectral_conf()
3999 cmd->scan_chn_mask = cpu_to_le32(arg->scan_chn_mask); in ath12k_wmi_vdev_spectral_conf()
4001 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_vdev_spectral_conf()
4003 arg->vdev_id); in ath12k_wmi_vdev_spectral_conf()
4005 ret = ath12k_wmi_cmd_send(ar->wmi, skb, in ath12k_wmi_vdev_spectral_conf()
4008 ath12k_warn(ar->ab, in ath12k_wmi_vdev_spectral_conf()
4026 skb = ath12k_wmi_alloc_skb(ar->wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_vdev_spectral_enable()
4028 return -ENOMEM; in ath12k_wmi_vdev_spectral_enable()
4030 cmd = (struct ath12k_wmi_vdev_spectral_enable_cmd *)skb->data; in ath12k_wmi_vdev_spectral_enable()
4031 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_VDEV_SPECTRAL_ENABLE_CMD, in ath12k_wmi_vdev_spectral_enable()
4034 cmd->vdev_id = cpu_to_le32(vdev_id); in ath12k_wmi_vdev_spectral_enable()
4035 cmd->trigger_cmd = cpu_to_le32(trigger); in ath12k_wmi_vdev_spectral_enable()
4036 cmd->enable_cmd = cpu_to_le32(enable); in ath12k_wmi_vdev_spectral_enable()
4038 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_vdev_spectral_enable()
4042 ret = ath12k_wmi_cmd_send(ar->wmi, skb, in ath12k_wmi_vdev_spectral_enable()
4045 ath12k_warn(ar->ab, in ath12k_wmi_vdev_spectral_enable()
4063 skb = ath12k_wmi_alloc_skb(ar->wmi->wmi_ab, sizeof(*cmd)); in ath12k_wmi_pdev_dma_ring_cfg()
4065 return -ENOMEM; in ath12k_wmi_pdev_dma_ring_cfg()
4067 cmd = (struct ath12k_wmi_pdev_dma_ring_cfg_req_cmd *)skb->data; in ath12k_wmi_pdev_dma_ring_cfg()
4068 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_DMA_RING_CFG_REQ, in ath12k_wmi_pdev_dma_ring_cfg()
4071 cmd->pdev_id = cpu_to_le32(arg->pdev_id); in ath12k_wmi_pdev_dma_ring_cfg()
4072 cmd->module_id = cpu_to_le32(arg->module_id); in ath12k_wmi_pdev_dma_ring_cfg()
4073 cmd->base_paddr_lo = cpu_to_le32(arg->base_paddr_lo); in ath12k_wmi_pdev_dma_ring_cfg()
4074 cmd->base_paddr_hi = cpu_to_le32(arg->base_paddr_hi); in ath12k_wmi_pdev_dma_ring_cfg()
4075 cmd->head_idx_paddr_lo = cpu_to_le32(arg->head_idx_paddr_lo); in ath12k_wmi_pdev_dma_ring_cfg()
4076 cmd->head_idx_paddr_hi = cpu_to_le32(arg->head_idx_paddr_hi); in ath12k_wmi_pdev_dma_ring_cfg()
4077 cmd->tail_idx_paddr_lo = cpu_to_le32(arg->tail_idx_paddr_lo); in ath12k_wmi_pdev_dma_ring_cfg()
4078 cmd->tail_idx_paddr_hi = cpu_to_le32(arg->tail_idx_paddr_hi); in ath12k_wmi_pdev_dma_ring_cfg()
4079 cmd->num_elems = cpu_to_le32(arg->num_elems); in ath12k_wmi_pdev_dma_ring_cfg()
4080 cmd->buf_size = cpu_to_le32(arg->buf_size); in ath12k_wmi_pdev_dma_ring_cfg()
4081 cmd->num_resp_per_event = cpu_to_le32(arg->num_resp_per_event); in ath12k_wmi_pdev_dma_ring_cfg()
4082 cmd->event_timeout_ms = cpu_to_le32(arg->event_timeout_ms); in ath12k_wmi_pdev_dma_ring_cfg()
4084 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_pdev_dma_ring_cfg()
4086 arg->pdev_id); in ath12k_wmi_pdev_dma_ring_cfg()
4088 ret = ath12k_wmi_cmd_send(ar->wmi, skb, in ath12k_wmi_pdev_dma_ring_cfg()
4091 ath12k_warn(ar->ab, in ath12k_wmi_pdev_dma_ring_cfg()
4109 return -EPROTO; in ath12k_wmi_dma_buf_entry_parse()
4111 if (arg->num_buf_entry >= le32_to_cpu(arg->fixed.num_buf_release_entry)) in ath12k_wmi_dma_buf_entry_parse()
4112 return -ENOBUFS; in ath12k_wmi_dma_buf_entry_parse()
4114 arg->num_buf_entry++; in ath12k_wmi_dma_buf_entry_parse()
4125 return -EPROTO; in ath12k_wmi_dma_buf_meta_parse()
4127 if (arg->num_meta >= le32_to_cpu(arg->fixed.num_meta_data_entry)) in ath12k_wmi_dma_buf_meta_parse()
4128 return -ENOBUFS; in ath12k_wmi_dma_buf_meta_parse()
4130 arg->num_meta++; in ath12k_wmi_dma_buf_meta_parse()
4147 arg->fixed = *fixed; in ath12k_wmi_dma_buf_parse()
4148 pdev_id = DP_HW2SW_MACID(le32_to_cpu(fixed->pdev_id)); in ath12k_wmi_dma_buf_parse()
4149 arg->fixed.pdev_id = cpu_to_le32(pdev_id); in ath12k_wmi_dma_buf_parse()
4152 if (!arg->buf_entry_done) { in ath12k_wmi_dma_buf_parse()
4153 arg->num_buf_entry = 0; in ath12k_wmi_dma_buf_parse()
4154 arg->buf_entry = ptr; in ath12k_wmi_dma_buf_parse()
4165 arg->buf_entry_done = true; in ath12k_wmi_dma_buf_parse()
4166 } else if (!arg->meta_data_done) { in ath12k_wmi_dma_buf_parse()
4167 arg->num_meta = 0; in ath12k_wmi_dma_buf_parse()
4168 arg->meta_data = ptr; in ath12k_wmi_dma_buf_parse()
4179 arg->meta_data_done = true; in ath12k_wmi_dma_buf_parse()
4195 ret = ath12k_wmi_tlv_iter(ab, skb->data, skb->len, in ath12k_wmi_pdev_dma_ring_buf_release_event()
4225 return -EPROTO; in ath12k_wmi_hw_mode_caps_parse()
4227 if (svc_rdy_ext->n_hw_mode_caps >= svc_rdy_ext->arg.num_hw_modes) in ath12k_wmi_hw_mode_caps_parse()
4228 return -ENOBUFS; in ath12k_wmi_hw_mode_caps_parse()
4232 svc_rdy_ext->n_hw_mode_caps++; in ath12k_wmi_hw_mode_caps_parse()
4234 phy_map = le32_to_cpu(hw_mode_cap->phy_id_map); in ath12k_wmi_hw_mode_caps_parse()
4235 svc_rdy_ext->tot_phy_id += fls(phy_map); in ath12k_wmi_hw_mode_caps_parse()
4249 svc_rdy_ext->n_hw_mode_caps = 0; in ath12k_wmi_hw_mode_caps()
4250 svc_rdy_ext->hw_mode_caps = ptr; in ath12k_wmi_hw_mode_caps()
4260 for (i = 0 ; i < svc_rdy_ext->n_hw_mode_caps; i++) { in ath12k_wmi_hw_mode_caps()
4261 hw_mode_caps = &svc_rdy_ext->hw_mode_caps[i]; in ath12k_wmi_hw_mode_caps()
4262 mode = le32_to_cpu(hw_mode_caps->hw_mode_id); in ath12k_wmi_hw_mode_caps()
4267 pref = soc->wmi_ab.preferred_hw_mode; in ath12k_wmi_hw_mode_caps()
4270 svc_rdy_ext->pref_hw_mode_caps = *hw_mode_caps; in ath12k_wmi_hw_mode_caps()
4271 soc->wmi_ab.preferred_hw_mode = mode; in ath12k_wmi_hw_mode_caps()
4276 soc->wmi_ab.preferred_hw_mode); in ath12k_wmi_hw_mode_caps()
4277 if (soc->wmi_ab.preferred_hw_mode == WMI_HOST_HW_MODE_MAX) in ath12k_wmi_hw_mode_caps()
4278 return -EINVAL; in ath12k_wmi_hw_mode_caps()
4290 return -EPROTO; in ath12k_wmi_mac_phy_caps_parse()
4292 if (svc_rdy_ext->n_mac_phy_caps >= svc_rdy_ext->tot_phy_id) in ath12k_wmi_mac_phy_caps_parse()
4293 return -ENOBUFS; in ath12k_wmi_mac_phy_caps_parse()
4296 if (!svc_rdy_ext->n_mac_phy_caps) { in ath12k_wmi_mac_phy_caps_parse()
4297 svc_rdy_ext->mac_phy_caps = kzalloc((svc_rdy_ext->tot_phy_id) * len, in ath12k_wmi_mac_phy_caps_parse()
4299 if (!svc_rdy_ext->mac_phy_caps) in ath12k_wmi_mac_phy_caps_parse()
4300 return -ENOMEM; in ath12k_wmi_mac_phy_caps_parse()
4303 memcpy(svc_rdy_ext->mac_phy_caps + svc_rdy_ext->n_mac_phy_caps, ptr, len); in ath12k_wmi_mac_phy_caps_parse()
4304 svc_rdy_ext->n_mac_phy_caps++; in ath12k_wmi_mac_phy_caps_parse()
4315 return -EPROTO; in ath12k_wmi_ext_hal_reg_caps_parse()
4317 if (svc_rdy_ext->n_ext_hal_reg_caps >= svc_rdy_ext->arg.num_phy) in ath12k_wmi_ext_hal_reg_caps_parse()
4318 return -ENOBUFS; in ath12k_wmi_ext_hal_reg_caps_parse()
4320 svc_rdy_ext->n_ext_hal_reg_caps++; in ath12k_wmi_ext_hal_reg_caps_parse()
4327 struct ath12k_wmi_pdev *wmi_handle = &soc->wmi_ab.wmi[0]; in ath12k_wmi_ext_hal_reg_caps()
4333 svc_rdy_ext->n_ext_hal_reg_caps = 0; in ath12k_wmi_ext_hal_reg_caps()
4334 svc_rdy_ext->ext_hal_reg_caps = ptr; in ath12k_wmi_ext_hal_reg_caps()
4343 for (i = 0; i < svc_rdy_ext->arg.num_phy; i++) { in ath12k_wmi_ext_hal_reg_caps()
4345 svc_rdy_ext->soc_hal_reg_caps, in ath12k_wmi_ext_hal_reg_caps()
4346 svc_rdy_ext->ext_hal_reg_caps, i, in ath12k_wmi_ext_hal_reg_caps()
4355 return -EINVAL; in ath12k_wmi_ext_hal_reg_caps()
4358 soc->hal_reg_cap[reg_cap.phy_id] = reg_cap; in ath12k_wmi_ext_hal_reg_caps()
4367 struct ath12k_wmi_pdev *wmi_handle = &soc->wmi_ab.wmi[0]; in ath12k_wmi_ext_soc_hal_reg_caps_parse()
4369 u8 hw_mode_id = le32_to_cpu(svc_rdy_ext->pref_hw_mode_caps.hw_mode_id); in ath12k_wmi_ext_soc_hal_reg_caps_parse()
4374 svc_rdy_ext->soc_hal_reg_caps = ptr; in ath12k_wmi_ext_soc_hal_reg_caps_parse()
4375 svc_rdy_ext->arg.num_phy = le32_to_cpu(svc_rdy_ext->soc_hal_reg_caps->num_phy); in ath12k_wmi_ext_soc_hal_reg_caps_parse()
4377 soc->num_radios = 0; in ath12k_wmi_ext_soc_hal_reg_caps_parse()
4378 phy_id_map = le32_to_cpu(svc_rdy_ext->pref_hw_mode_caps.phy_id_map); in ath12k_wmi_ext_soc_hal_reg_caps_parse()
4379 soc->fw_pdev_count = 0; in ath12k_wmi_ext_soc_hal_reg_caps_parse()
4381 while (phy_id_map && soc->num_radios < MAX_RADIOS) { in ath12k_wmi_ext_soc_hal_reg_caps_parse()
4384 hw_mode_id, soc->num_radios, in ath12k_wmi_ext_soc_hal_reg_caps_parse()
4385 &soc->pdevs[pdev_index]); in ath12k_wmi_ext_soc_hal_reg_caps_parse()
4388 soc->num_radios); in ath12k_wmi_ext_soc_hal_reg_caps_parse()
4392 soc->num_radios++; in ath12k_wmi_ext_soc_hal_reg_caps_parse()
4397 if (soc->hw_params->single_pdev_only) in ath12k_wmi_ext_soc_hal_reg_caps_parse()
4400 pdev_index = soc->num_radios; in ath12k_wmi_ext_soc_hal_reg_caps_parse()
4406 if (soc->hw_params->single_pdev_only) { in ath12k_wmi_ext_soc_hal_reg_caps_parse()
4407 soc->num_radios = 1; in ath12k_wmi_ext_soc_hal_reg_caps_parse()
4408 soc->pdevs[0].pdev_id = 0; in ath12k_wmi_ext_soc_hal_reg_caps_parse()
4421 return -EPROTO; in ath12k_wmi_dma_ring_caps_parse()
4423 parse->n_dma_ring_caps++; in ath12k_wmi_dma_ring_caps_parse()
4436 return -ENOMEM; in ath12k_wmi_alloc_dbring_caps()
4438 ab->db_caps = ptr; in ath12k_wmi_alloc_dbring_caps()
4439 ab->num_db_cap = num_cap; in ath12k_wmi_alloc_dbring_caps()
4446 kfree(ab->db_caps); in ath12k_wmi_free_dbring_caps()
4447 ab->db_caps = NULL; in ath12k_wmi_free_dbring_caps()
4448 ab->num_db_cap = 0; in ath12k_wmi_free_dbring_caps()
4460 dma_caps_parse->n_dma_ring_caps = 0; in ath12k_wmi_dma_ring_caps()
4470 if (!dma_caps_parse->n_dma_ring_caps) in ath12k_wmi_dma_ring_caps()
4473 if (ab->num_db_cap) { in ath12k_wmi_dma_ring_caps()
4478 ret = ath12k_wmi_alloc_dbring_caps(ab, dma_caps_parse->n_dma_ring_caps); in ath12k_wmi_dma_ring_caps()
4482 dir_buff_caps = ab->db_caps; in ath12k_wmi_dma_ring_caps()
4483 for (i = 0; i < dma_caps_parse->n_dma_ring_caps; i++) { in ath12k_wmi_dma_ring_caps()
4487 ret = -EINVAL; in ath12k_wmi_dma_ring_caps()
4510 struct ath12k_wmi_pdev *wmi_handle = &ab->wmi_ab.wmi[0]; in ath12k_wmi_svc_rdy_ext_parse()
4517 &svc_rdy_ext->arg); in ath12k_wmi_svc_rdy_ext_parse()
4525 svc_rdy_ext->hw_caps = ptr; in ath12k_wmi_svc_rdy_ext_parse()
4526 svc_rdy_ext->arg.num_hw_modes = in ath12k_wmi_svc_rdy_ext_parse()
4527 le32_to_cpu(svc_rdy_ext->hw_caps->num_hw_modes); in ath12k_wmi_svc_rdy_ext_parse()
4538 if (!svc_rdy_ext->hw_mode_done) { in ath12k_wmi_svc_rdy_ext_parse()
4543 svc_rdy_ext->hw_mode_done = true; in ath12k_wmi_svc_rdy_ext_parse()
4544 } else if (!svc_rdy_ext->mac_phy_done) { in ath12k_wmi_svc_rdy_ext_parse()
4545 svc_rdy_ext->n_mac_phy_caps = 0; in ath12k_wmi_svc_rdy_ext_parse()
4554 svc_rdy_ext->mac_phy_done = true; in ath12k_wmi_svc_rdy_ext_parse()
4555 } else if (!svc_rdy_ext->ext_hal_reg_done) { in ath12k_wmi_svc_rdy_ext_parse()
4560 svc_rdy_ext->ext_hal_reg_done = true; in ath12k_wmi_svc_rdy_ext_parse()
4561 } else if (!svc_rdy_ext->mac_phy_chainmask_combo_done) { in ath12k_wmi_svc_rdy_ext_parse()
4562 svc_rdy_ext->mac_phy_chainmask_combo_done = true; in ath12k_wmi_svc_rdy_ext_parse()
4563 } else if (!svc_rdy_ext->mac_phy_chainmask_cap_done) { in ath12k_wmi_svc_rdy_ext_parse()
4564 svc_rdy_ext->mac_phy_chainmask_cap_done = true; in ath12k_wmi_svc_rdy_ext_parse()
4565 } else if (!svc_rdy_ext->oem_dma_ring_cap_done) { in ath12k_wmi_svc_rdy_ext_parse()
4566 svc_rdy_ext->oem_dma_ring_cap_done = true; in ath12k_wmi_svc_rdy_ext_parse()
4567 } else if (!svc_rdy_ext->dma_ring_cap_done) { in ath12k_wmi_svc_rdy_ext_parse()
4569 &svc_rdy_ext->dma_caps_parse); in ath12k_wmi_svc_rdy_ext_parse()
4573 svc_rdy_ext->dma_ring_cap_done = true; in ath12k_wmi_svc_rdy_ext_parse()
4589 ret = ath12k_wmi_tlv_iter(ab, skb->data, skb->len, in ath12k_service_ready_ext_event()
4597 if (!test_bit(WMI_TLV_SERVICE_EXT2_MSG, ab->wmi_ab.svc_map)) in ath12k_service_ready_ext_event()
4598 complete(&ab->wmi_ab.service_ready); in ath12k_service_ready_ext_event()
4615 return -EINVAL; in ath12k_pull_svc_ready_ext2()
4617 arg->reg_db_version = le32_to_cpu(ev->reg_db_version); in ath12k_pull_svc_ready_ext2()
4618 arg->hw_min_max_tx_power_2ghz = le32_to_cpu(ev->hw_min_max_tx_power_2ghz); in ath12k_pull_svc_ready_ext2()
4619 arg->hw_min_max_tx_power_5ghz = le32_to_cpu(ev->hw_min_max_tx_power_5ghz); in ath12k_pull_svc_ready_ext2()
4620 arg->chwidth_num_peer_caps = le32_to_cpu(ev->chwidth_num_peer_caps); in ath12k_pull_svc_ready_ext2()
4621 arg->preamble_puncture_bw = le32_to_cpu(ev->preamble_puncture_bw); in ath12k_pull_svc_ready_ext2()
4622 arg->max_user_per_ppdu_ofdma = le32_to_cpu(ev->max_user_per_ppdu_ofdma); in ath12k_pull_svc_ready_ext2()
4623 arg->max_user_per_ppdu_mumimo = le32_to_cpu(ev->max_user_per_ppdu_mumimo); in ath12k_pull_svc_ready_ext2()
4624 arg->target_cap_flags = le32_to_cpu(ev->target_cap_flags); in ath12k_pull_svc_ready_ext2()
4635 struct ath12k_band_cap *cap_band = &pdev->cap.band[band]; in ath12k_wmi_eht_caps_parse()
4640 support_320mhz = cap_band->eht_cap_phy_info[0] & in ath12k_wmi_eht_caps_parse()
4644 cap_band->eht_cap_mac_info[i] = le32_to_cpu(cap_mac_info[i]); in ath12k_wmi_eht_caps_parse()
4647 cap_band->eht_cap_phy_info[i] = le32_to_cpu(cap_phy_info[i]); in ath12k_wmi_eht_caps_parse()
4650 cap_band->eht_cap_phy_info[0] |= support_320mhz; in ath12k_wmi_eht_caps_parse()
4652 cap_band->eht_mcs_20_only = le32_to_cpu(supp_mcs[0]); in ath12k_wmi_eht_caps_parse()
4653 cap_band->eht_mcs_80 = le32_to_cpu(supp_mcs[1]); in ath12k_wmi_eht_caps_parse()
4655 cap_band->eht_mcs_160 = le32_to_cpu(supp_mcs[2]); in ath12k_wmi_eht_caps_parse()
4656 cap_band->eht_mcs_320 = le32_to_cpu(supp_mcs[3]); in ath12k_wmi_eht_caps_parse()
4659 cap_band->eht_ppet.numss_m1 = le32_to_cpu(ppet->numss_m1); in ath12k_wmi_eht_caps_parse()
4660 cap_band->eht_ppet.ru_bit_mask = le32_to_cpu(ppet->ru_info); in ath12k_wmi_eht_caps_parse()
4662 cap_band->eht_ppet.ppet16_ppet8_ru3_ru0[i] = in ath12k_wmi_eht_caps_parse()
4663 le32_to_cpu(ppet->ppet16_ppet8_ru3_ru0[i]); in ath12k_wmi_eht_caps_parse()
4665 cap_band->eht_cap_info_internal = le32_to_cpu(cap_info_internal); in ath12k_wmi_eht_caps_parse()
4677 if (ab->hw_params->single_pdev_only) { in ath12k_wmi_tlv_mac_phy_caps_ext_parse()
4678 if (caps->hw_mode_id == WMI_HOST_HW_MODE_SINGLE) { in ath12k_wmi_tlv_mac_phy_caps_ext_parse()
4679 support_320mhz = le32_to_cpu(caps->eht_cap_phy_info_5ghz[0]) & in ath12k_wmi_tlv_mac_phy_caps_ext_parse()
4681 cap_band = &pdev->cap.band[NL80211_BAND_6GHZ]; in ath12k_wmi_tlv_mac_phy_caps_ext_parse()
4682 cap_band->eht_cap_phy_info[0] |= support_320mhz; in ath12k_wmi_tlv_mac_phy_caps_ext_parse()
4686 for (i = 0; i < ab->fw_pdev_count; i++) { in ath12k_wmi_tlv_mac_phy_caps_ext_parse()
4687 struct ath12k_fw_pdev *fw_pdev = &ab->fw_pdev[i]; in ath12k_wmi_tlv_mac_phy_caps_ext_parse()
4689 if (fw_pdev->pdev_id == ath12k_wmi_caps_ext_get_pdev_id(caps) && in ath12k_wmi_tlv_mac_phy_caps_ext_parse()
4690 fw_pdev->phy_id == le32_to_cpu(caps->phy_id)) { in ath12k_wmi_tlv_mac_phy_caps_ext_parse()
4691 bands = fw_pdev->supported_bands; in ath12k_wmi_tlv_mac_phy_caps_ext_parse()
4696 if (i == ab->fw_pdev_count) in ath12k_wmi_tlv_mac_phy_caps_ext_parse()
4697 return -EINVAL; in ath12k_wmi_tlv_mac_phy_caps_ext_parse()
4699 bands = pdev->cap.supported_bands; in ath12k_wmi_tlv_mac_phy_caps_ext_parse()
4704 caps->eht_cap_mac_info_2ghz, in ath12k_wmi_tlv_mac_phy_caps_ext_parse()
4705 caps->eht_cap_phy_info_2ghz, in ath12k_wmi_tlv_mac_phy_caps_ext_parse()
4706 caps->eht_supp_mcs_ext_2ghz, in ath12k_wmi_tlv_mac_phy_caps_ext_parse()
4707 &caps->eht_ppet_2ghz, in ath12k_wmi_tlv_mac_phy_caps_ext_parse()
4708 caps->eht_cap_info_internal); in ath12k_wmi_tlv_mac_phy_caps_ext_parse()
4713 caps->eht_cap_mac_info_5ghz, in ath12k_wmi_tlv_mac_phy_caps_ext_parse()
4714 caps->eht_cap_phy_info_5ghz, in ath12k_wmi_tlv_mac_phy_caps_ext_parse()
4715 caps->eht_supp_mcs_ext_5ghz, in ath12k_wmi_tlv_mac_phy_caps_ext_parse()
4716 &caps->eht_ppet_5ghz, in ath12k_wmi_tlv_mac_phy_caps_ext_parse()
4717 caps->eht_cap_info_internal); in ath12k_wmi_tlv_mac_phy_caps_ext_parse()
4720 caps->eht_cap_mac_info_5ghz, in ath12k_wmi_tlv_mac_phy_caps_ext_parse()
4721 caps->eht_cap_phy_info_5ghz, in ath12k_wmi_tlv_mac_phy_caps_ext_parse()
4722 caps->eht_supp_mcs_ext_5ghz, in ath12k_wmi_tlv_mac_phy_caps_ext_parse()
4723 &caps->eht_ppet_5ghz, in ath12k_wmi_tlv_mac_phy_caps_ext_parse()
4724 caps->eht_cap_info_internal); in ath12k_wmi_tlv_mac_phy_caps_ext_parse()
4727 pdev->cap.eml_cap = le32_to_cpu(caps->eml_capability); in ath12k_wmi_tlv_mac_phy_caps_ext_parse()
4728 pdev->cap.mld_cap = le32_to_cpu(caps->mld_capability); in ath12k_wmi_tlv_mac_phy_caps_ext_parse()
4741 return -EPROTO; in ath12k_wmi_tlv_mac_phy_caps_ext()
4743 if (ab->hw_params->single_pdev_only) { in ath12k_wmi_tlv_mac_phy_caps_ext()
4744 if (ab->wmi_ab.preferred_hw_mode != le32_to_cpu(caps->hw_mode_id) && in ath12k_wmi_tlv_mac_phy_caps_ext()
4745 caps->hw_mode_id != WMI_HOST_HW_MODE_SINGLE) in ath12k_wmi_tlv_mac_phy_caps_ext()
4748 for (i = 0; i < ab->num_radios; i++) { in ath12k_wmi_tlv_mac_phy_caps_ext()
4749 if (ab->pdevs[i].pdev_id == in ath12k_wmi_tlv_mac_phy_caps_ext()
4754 if (i == ab->num_radios) in ath12k_wmi_tlv_mac_phy_caps_ext()
4755 return -EINVAL; in ath12k_wmi_tlv_mac_phy_caps_ext()
4758 ret = ath12k_wmi_tlv_mac_phy_caps_ext_parse(ab, caps, &ab->pdevs[i]); in ath12k_wmi_tlv_mac_phy_caps_ext()
4762 ret, ab->pdevs[i].pdev_id); in ath12k_wmi_tlv_mac_phy_caps_ext()
4773 struct ath12k_wmi_pdev *wmi_handle = &ab->wmi_ab.wmi[0]; in ath12k_wmi_svc_rdy_ext2_parse()
4780 &parse->arg); in ath12k_wmi_svc_rdy_ext2_parse()
4790 if (!parse->dma_ring_cap_done) { in ath12k_wmi_svc_rdy_ext2_parse()
4792 &parse->dma_caps_parse); in ath12k_wmi_svc_rdy_ext2_parse()
4796 parse->dma_ring_cap_done = true; in ath12k_wmi_svc_rdy_ext2_parse()
4797 } else if (!parse->spectral_bin_scaling_done) { in ath12k_wmi_svc_rdy_ext2_parse()
4798 /* TODO: This is a place-holder as WMI tag for in ath12k_wmi_svc_rdy_ext2_parse()
4802 parse->spectral_bin_scaling_done = true; in ath12k_wmi_svc_rdy_ext2_parse()
4803 } else if (!parse->mac_phy_caps_ext_done) { in ath12k_wmi_svc_rdy_ext2_parse()
4813 parse->mac_phy_caps_ext_done = true; in ath12k_wmi_svc_rdy_ext2_parse()
4829 ret = ath12k_wmi_tlv_iter(ab, skb->data, skb->len, in ath12k_service_ready_ext2_event()
4837 complete(&ab->wmi_ab.service_ready); in ath12k_service_ready_ext2_event()
4864 return -EPROTO; in ath12k_pull_vdev_start_resp_tlv()
4959 return -EPROTO; in ath12k_pull_reg_chan_list_ext_update_ev()
4962 reg_info->num_2g_reg_rules = le32_to_cpu(ev->num_2g_reg_rules); in ath12k_pull_reg_chan_list_ext_update_ev()
4963 reg_info->num_5g_reg_rules = le32_to_cpu(ev->num_5g_reg_rules); in ath12k_pull_reg_chan_list_ext_update_ev()
4964 reg_info->num_6g_reg_rules_ap[WMI_REG_INDOOR_AP] = in ath12k_pull_reg_chan_list_ext_update_ev()
4965 le32_to_cpu(ev->num_6g_reg_rules_ap_lpi); in ath12k_pull_reg_chan_list_ext_update_ev()
4966 reg_info->num_6g_reg_rules_ap[WMI_REG_STD_POWER_AP] = in ath12k_pull_reg_chan_list_ext_update_ev()
4967 le32_to_cpu(ev->num_6g_reg_rules_ap_sp); in ath12k_pull_reg_chan_list_ext_update_ev()
4968 reg_info->num_6g_reg_rules_ap[WMI_REG_VLP_AP] = in ath12k_pull_reg_chan_list_ext_update_ev()
4969 le32_to_cpu(ev->num_6g_reg_rules_ap_vlp); in ath12k_pull_reg_chan_list_ext_update_ev()
4972 reg_info->num_6g_reg_rules_cl[WMI_REG_INDOOR_AP][i] = in ath12k_pull_reg_chan_list_ext_update_ev()
4973 le32_to_cpu(ev->num_6g_reg_rules_cl_lpi[i]); in ath12k_pull_reg_chan_list_ext_update_ev()
4974 reg_info->num_6g_reg_rules_cl[WMI_REG_STD_POWER_AP][i] = in ath12k_pull_reg_chan_list_ext_update_ev()
4975 le32_to_cpu(ev->num_6g_reg_rules_cl_sp[i]); in ath12k_pull_reg_chan_list_ext_update_ev()
4976 reg_info->num_6g_reg_rules_cl[WMI_REG_VLP_AP][i] = in ath12k_pull_reg_chan_list_ext_update_ev()
4977 le32_to_cpu(ev->num_6g_reg_rules_cl_vlp[i]); in ath12k_pull_reg_chan_list_ext_update_ev()
4980 num_2g_reg_rules = reg_info->num_2g_reg_rules; in ath12k_pull_reg_chan_list_ext_update_ev()
4982 num_5g_reg_rules = reg_info->num_5g_reg_rules; in ath12k_pull_reg_chan_list_ext_update_ev()
4989 return -EINVAL; in ath12k_pull_reg_chan_list_ext_update_ev()
4993 num_6g_reg_rules_ap[i] = reg_info->num_6g_reg_rules_ap[i]; in ath12k_pull_reg_chan_list_ext_update_ev()
4999 return -EINVAL; in ath12k_pull_reg_chan_list_ext_update_ev()
5007 reg_info->num_6g_reg_rules_cl[WMI_REG_INDOOR_AP][i]; in ath12k_pull_reg_chan_list_ext_update_ev()
5011 reg_info->num_6g_reg_rules_cl[WMI_REG_STD_POWER_AP][i]; in ath12k_pull_reg_chan_list_ext_update_ev()
5015 reg_info->num_6g_reg_rules_cl[WMI_REG_VLP_AP][i]; in ath12k_pull_reg_chan_list_ext_update_ev()
5024 return -EINVAL; in ath12k_pull_reg_chan_list_ext_update_ev()
5031 return -EINVAL; in ath12k_pull_reg_chan_list_ext_update_ev()
5034 memcpy(reg_info->alpha2, &ev->alpha2, REG_ALPHA2_LEN); in ath12k_pull_reg_chan_list_ext_update_ev()
5036 reg_info->dfs_region = le32_to_cpu(ev->dfs_region); in ath12k_pull_reg_chan_list_ext_update_ev()
5037 reg_info->phybitmap = le32_to_cpu(ev->phybitmap); in ath12k_pull_reg_chan_list_ext_update_ev()
5038 reg_info->num_phy = le32_to_cpu(ev->num_phy); in ath12k_pull_reg_chan_list_ext_update_ev()
5039 reg_info->phy_id = le32_to_cpu(ev->phy_id); in ath12k_pull_reg_chan_list_ext_update_ev()
5040 reg_info->ctry_code = le32_to_cpu(ev->country_id); in ath12k_pull_reg_chan_list_ext_update_ev()
5041 reg_info->reg_dmn_pair = le32_to_cpu(ev->domain_code); in ath12k_pull_reg_chan_list_ext_update_ev()
5043 switch (le32_to_cpu(ev->status_code)) { in ath12k_pull_reg_chan_list_ext_update_ev()
5045 reg_info->status_code = REG_SET_CC_STATUS_PASS; in ath12k_pull_reg_chan_list_ext_update_ev()
5048 reg_info->status_code = REG_CURRENT_ALPHA2_NOT_FOUND; in ath12k_pull_reg_chan_list_ext_update_ev()
5051 reg_info->status_code = REG_INIT_ALPHA2_NOT_FOUND; in ath12k_pull_reg_chan_list_ext_update_ev()
5054 reg_info->status_code = REG_SET_CC_CHANGE_NOT_ALLOWED; in ath12k_pull_reg_chan_list_ext_update_ev()
5057 reg_info->status_code = REG_SET_CC_STATUS_NO_MEMORY; in ath12k_pull_reg_chan_list_ext_update_ev()
5060 reg_info->status_code = REG_SET_CC_STATUS_FAIL; in ath12k_pull_reg_chan_list_ext_update_ev()
5064 reg_info->is_ext_reg_event = true; in ath12k_pull_reg_chan_list_ext_update_ev()
5066 reg_info->min_bw_2g = le32_to_cpu(ev->min_bw_2g); in ath12k_pull_reg_chan_list_ext_update_ev()
5067 reg_info->max_bw_2g = le32_to_cpu(ev->max_bw_2g); in ath12k_pull_reg_chan_list_ext_update_ev()
5068 reg_info->min_bw_5g = le32_to_cpu(ev->min_bw_5g); in ath12k_pull_reg_chan_list_ext_update_ev()
5069 reg_info->max_bw_5g = le32_to_cpu(ev->max_bw_5g); in ath12k_pull_reg_chan_list_ext_update_ev()
5070 reg_info->min_bw_6g_ap[WMI_REG_INDOOR_AP] = le32_to_cpu(ev->min_bw_6g_ap_lpi); in ath12k_pull_reg_chan_list_ext_update_ev()
5071 reg_info->max_bw_6g_ap[WMI_REG_INDOOR_AP] = le32_to_cpu(ev->max_bw_6g_ap_lpi); in ath12k_pull_reg_chan_list_ext_update_ev()
5072 reg_info->min_bw_6g_ap[WMI_REG_STD_POWER_AP] = le32_to_cpu(ev->min_bw_6g_ap_sp); in ath12k_pull_reg_chan_list_ext_update_ev()
5073 reg_info->max_bw_6g_ap[WMI_REG_STD_POWER_AP] = le32_to_cpu(ev->max_bw_6g_ap_sp); in ath12k_pull_reg_chan_list_ext_update_ev()
5074 reg_info->min_bw_6g_ap[WMI_REG_VLP_AP] = le32_to_cpu(ev->min_bw_6g_ap_vlp); in ath12k_pull_reg_chan_list_ext_update_ev()
5075 reg_info->max_bw_6g_ap[WMI_REG_VLP_AP] = le32_to_cpu(ev->max_bw_6g_ap_vlp); in ath12k_pull_reg_chan_list_ext_update_ev()
5078 reg_info->min_bw_6g_client[WMI_REG_INDOOR_AP][i] = in ath12k_pull_reg_chan_list_ext_update_ev()
5079 le32_to_cpu(ev->min_bw_6g_client_lpi[i]); in ath12k_pull_reg_chan_list_ext_update_ev()
5080 reg_info->max_bw_6g_client[WMI_REG_INDOOR_AP][i] = in ath12k_pull_reg_chan_list_ext_update_ev()
5081 le32_to_cpu(ev->max_bw_6g_client_lpi[i]); in ath12k_pull_reg_chan_list_ext_update_ev()
5082 reg_info->min_bw_6g_client[WMI_REG_STD_POWER_AP][i] = in ath12k_pull_reg_chan_list_ext_update_ev()
5083 le32_to_cpu(ev->min_bw_6g_client_sp[i]); in ath12k_pull_reg_chan_list_ext_update_ev()
5084 reg_info->max_bw_6g_client[WMI_REG_STD_POWER_AP][i] = in ath12k_pull_reg_chan_list_ext_update_ev()
5085 le32_to_cpu(ev->max_bw_6g_client_sp[i]); in ath12k_pull_reg_chan_list_ext_update_ev()
5086 reg_info->min_bw_6g_client[WMI_REG_VLP_AP][i] = in ath12k_pull_reg_chan_list_ext_update_ev()
5087 le32_to_cpu(ev->min_bw_6g_client_vlp[i]); in ath12k_pull_reg_chan_list_ext_update_ev()
5088 reg_info->max_bw_6g_client[WMI_REG_VLP_AP][i] = in ath12k_pull_reg_chan_list_ext_update_ev()
5089 le32_to_cpu(ev->max_bw_6g_client_vlp[i]); in ath12k_pull_reg_chan_list_ext_update_ev()
5094 __func__, reg_info->alpha2, reg_info->dfs_region, in ath12k_pull_reg_chan_list_ext_update_ev()
5095 reg_info->min_bw_2g, reg_info->max_bw_2g, in ath12k_pull_reg_chan_list_ext_update_ev()
5096 reg_info->min_bw_5g, reg_info->max_bw_5g, in ath12k_pull_reg_chan_list_ext_update_ev()
5097 reg_info->phybitmap); in ath12k_pull_reg_chan_list_ext_update_ev()
5127 reg_info->reg_rules_2g_ptr = in ath12k_pull_reg_chan_list_ext_update_ev()
5131 if (!reg_info->reg_rules_2g_ptr) { in ath12k_pull_reg_chan_list_ext_update_ev()
5134 return -ENOMEM; in ath12k_pull_reg_chan_list_ext_update_ev()
5153 reg_info->alpha2, reg_info->num_5g_reg_rules, in ath12k_pull_reg_chan_list_ext_update_ev()
5156 num_5g_reg_rules = num_5g_reg_rules - num_invalid_5ghz_ext_rules; in ath12k_pull_reg_chan_list_ext_update_ev()
5157 reg_info->num_5g_reg_rules = num_5g_reg_rules; in ath12k_pull_reg_chan_list_ext_update_ev()
5161 reg_info->reg_rules_5g_ptr = in ath12k_pull_reg_chan_list_ext_update_ev()
5165 if (!reg_info->reg_rules_5g_ptr) { in ath12k_pull_reg_chan_list_ext_update_ev()
5168 return -ENOMEM; in ath12k_pull_reg_chan_list_ext_update_ev()
5180 reg_info->reg_rules_6g_ap_ptr[i] = in ath12k_pull_reg_chan_list_ext_update_ev()
5184 if (!reg_info->reg_rules_6g_ap_ptr[i]) { in ath12k_pull_reg_chan_list_ext_update_ev()
5187 return -ENOMEM; in ath12k_pull_reg_chan_list_ext_update_ev()
5195 reg_info->reg_rules_6g_client_ptr[j][i] = in ath12k_pull_reg_chan_list_ext_update_ev()
5199 if (!reg_info->reg_rules_6g_client_ptr[j][i]) { in ath12k_pull_reg_chan_list_ext_update_ev()
5202 return -ENOMEM; in ath12k_pull_reg_chan_list_ext_update_ev()
5209 reg_info->client_type = le32_to_cpu(ev->client_type); in ath12k_pull_reg_chan_list_ext_update_ev()
5210 reg_info->rnr_tpe_usable = ev->rnr_tpe_usable; in ath12k_pull_reg_chan_list_ext_update_ev()
5211 reg_info->unspecified_ap_usable = ev->unspecified_ap_usable; in ath12k_pull_reg_chan_list_ext_update_ev()
5212 reg_info->domain_code_6g_ap[WMI_REG_INDOOR_AP] = in ath12k_pull_reg_chan_list_ext_update_ev()
5213 le32_to_cpu(ev->domain_code_6g_ap_lpi); in ath12k_pull_reg_chan_list_ext_update_ev()
5214 reg_info->domain_code_6g_ap[WMI_REG_STD_POWER_AP] = in ath12k_pull_reg_chan_list_ext_update_ev()
5215 le32_to_cpu(ev->domain_code_6g_ap_sp); in ath12k_pull_reg_chan_list_ext_update_ev()
5216 reg_info->domain_code_6g_ap[WMI_REG_VLP_AP] = in ath12k_pull_reg_chan_list_ext_update_ev()
5217 le32_to_cpu(ev->domain_code_6g_ap_vlp); in ath12k_pull_reg_chan_list_ext_update_ev()
5220 reg_info->domain_code_6g_client[WMI_REG_INDOOR_AP][i] = in ath12k_pull_reg_chan_list_ext_update_ev()
5221 le32_to_cpu(ev->domain_code_6g_client_lpi[i]); in ath12k_pull_reg_chan_list_ext_update_ev()
5222 reg_info->domain_code_6g_client[WMI_REG_STD_POWER_AP][i] = in ath12k_pull_reg_chan_list_ext_update_ev()
5223 le32_to_cpu(ev->domain_code_6g_client_sp[i]); in ath12k_pull_reg_chan_list_ext_update_ev()
5224 reg_info->domain_code_6g_client[WMI_REG_VLP_AP][i] = in ath12k_pull_reg_chan_list_ext_update_ev()
5225 le32_to_cpu(ev->domain_code_6g_client_vlp[i]); in ath12k_pull_reg_chan_list_ext_update_ev()
5228 reg_info->domain_code_6g_super_id = le32_to_cpu(ev->domain_code_6g_super_id); in ath12k_pull_reg_chan_list_ext_update_ev()
5231 reg_info->client_type, reg_info->domain_code_6g_super_id); in ath12k_pull_reg_chan_list_ext_update_ev()
5257 return -EPROTO; in ath12k_pull_peer_del_resp_ev()
5262 peer_del_resp->vdev_id = ev->vdev_id; in ath12k_pull_peer_del_resp_ev()
5263 ether_addr_copy(peer_del_resp->peer_macaddr.addr, in ath12k_pull_peer_del_resp_ev()
5264 ev->peer_macaddr.addr); in ath12k_pull_peer_del_resp_ev()
5289 return -EPROTO; in ath12k_pull_vdev_del_resp_ev()
5292 *vdev_id = le32_to_cpu(ev->vdev_id); in ath12k_pull_vdev_del_resp_ev()
5317 return -EPROTO; in ath12k_pull_bcn_tx_status_ev()
5320 *vdev_id = le32_to_cpu(ev->vdev_id); in ath12k_pull_bcn_tx_status_ev()
5321 *tx_status = le32_to_cpu(ev->tx_status); in ath12k_pull_bcn_tx_status_ev()
5345 return -EPROTO; in ath12k_pull_vdev_stopped_param_tlv()
5348 *vdev_id = le32_to_cpu(ev->vdev_id); in ath12k_pull_vdev_stopped_param_tlv()
5362 parse->fixed = ptr; in ath12k_wmi_tlv_mgmt_rx_parse()
5365 if (!parse->frame_buf_done) { in ath12k_wmi_tlv_mgmt_rx_parse()
5366 parse->frame_buf = ptr; in ath12k_wmi_tlv_mgmt_rx_parse()
5367 parse->frame_buf_done = true; in ath12k_wmi_tlv_mgmt_rx_parse()
5383 ret = ath12k_wmi_tlv_iter(ab, skb->data, skb->len, in ath12k_pull_mgmt_rx_params_tlv()
5396 return -EPROTO; in ath12k_pull_mgmt_rx_params_tlv()
5399 hdr->pdev_id = le32_to_cpu(ev->pdev_id); in ath12k_pull_mgmt_rx_params_tlv()
5400 hdr->chan_freq = le32_to_cpu(ev->chan_freq); in ath12k_pull_mgmt_rx_params_tlv()
5401 hdr->channel = le32_to_cpu(ev->channel); in ath12k_pull_mgmt_rx_params_tlv()
5402 hdr->snr = le32_to_cpu(ev->snr); in ath12k_pull_mgmt_rx_params_tlv()
5403 hdr->rate = le32_to_cpu(ev->rate); in ath12k_pull_mgmt_rx_params_tlv()
5404 hdr->phy_mode = le32_to_cpu(ev->phy_mode); in ath12k_pull_mgmt_rx_params_tlv()
5405 hdr->buf_len = le32_to_cpu(ev->buf_len); in ath12k_pull_mgmt_rx_params_tlv()
5406 hdr->status = le32_to_cpu(ev->status); in ath12k_pull_mgmt_rx_params_tlv()
5407 hdr->flags = le32_to_cpu(ev->flags); in ath12k_pull_mgmt_rx_params_tlv()
5408 hdr->rssi = a_sle32_to_cpu(ev->rssi); in ath12k_pull_mgmt_rx_params_tlv()
5409 hdr->tsf_delta = le32_to_cpu(ev->tsf_delta); in ath12k_pull_mgmt_rx_params_tlv()
5412 hdr->rssi_ctl[i] = le32_to_cpu(ev->rssi_ctl[i]); in ath12k_pull_mgmt_rx_params_tlv()
5414 if (skb->len < (frame - skb->data) + hdr->buf_len) { in ath12k_pull_mgmt_rx_params_tlv()
5416 return -EPROTO; in ath12k_pull_mgmt_rx_params_tlv()
5421 skb_put(skb, frame - skb->data); in ath12k_pull_mgmt_rx_params_tlv()
5422 skb_pull(skb, frame - skb->data); in ath12k_pull_mgmt_rx_params_tlv()
5423 skb_put(skb, hdr->buf_len); in ath12k_pull_mgmt_rx_params_tlv()
5436 spin_lock_bh(&ar->txmgmt_idr_lock); in wmi_process_mgmt_tx_comp()
5437 msdu = idr_find(&ar->txmgmt_idr, desc_id); in wmi_process_mgmt_tx_comp()
5440 ath12k_warn(ar->ab, "received mgmt tx compl for invalid msdu_id: %d\n", in wmi_process_mgmt_tx_comp()
5442 spin_unlock_bh(&ar->txmgmt_idr_lock); in wmi_process_mgmt_tx_comp()
5443 return -ENOENT; in wmi_process_mgmt_tx_comp()
5446 idr_remove(&ar->txmgmt_idr, desc_id); in wmi_process_mgmt_tx_comp()
5447 spin_unlock_bh(&ar->txmgmt_idr_lock); in wmi_process_mgmt_tx_comp()
5450 dma_unmap_single(ar->ab->dev, skb_cb->paddr, msdu->len, DMA_TO_DEVICE); in wmi_process_mgmt_tx_comp()
5453 if ((!(info->flags & IEEE80211_TX_CTL_NO_ACK)) && !status) in wmi_process_mgmt_tx_comp()
5454 info->flags |= IEEE80211_TX_STAT_ACK; in wmi_process_mgmt_tx_comp()
5456 if ((info->flags & IEEE80211_TX_CTL_NO_ACK) && !status) in wmi_process_mgmt_tx_comp()
5457 info->flags |= IEEE80211_TX_STAT_NOACK_TRANSMITTED; in wmi_process_mgmt_tx_comp()
5461 num_mgmt = atomic_dec_if_positive(&ar->num_pending_mgmt_tx); in wmi_process_mgmt_tx_comp()
5468 wake_up(&ar->txmgmt_empty_waitq); in wmi_process_mgmt_tx_comp()
5492 return -EPROTO; in ath12k_pull_mgmt_tx_compl_param_tlv()
5495 param->pdev_id = ev->pdev_id; in ath12k_pull_mgmt_tx_compl_param_tlv()
5496 param->desc_id = ev->desc_id; in ath12k_pull_mgmt_tx_compl_param_tlv()
5497 param->status = ev->status; in ath12k_pull_mgmt_tx_compl_param_tlv()
5505 lockdep_assert_held(&ar->data_lock); in ath12k_wmi_event_scan_started()
5507 switch (ar->scan.state) { in ath12k_wmi_event_scan_started()
5511 ath12k_warn(ar->ab, "received scan started event in an invalid scan state: %s (%d)\n", in ath12k_wmi_event_scan_started()
5512 ath12k_scan_state_str(ar->scan.state), in ath12k_wmi_event_scan_started()
5513 ar->scan.state); in ath12k_wmi_event_scan_started()
5516 ar->scan.state = ATH12K_SCAN_RUNNING; in ath12k_wmi_event_scan_started()
5518 if (ar->scan.is_roc) in ath12k_wmi_event_scan_started()
5521 complete(&ar->scan.started); in ath12k_wmi_event_scan_started()
5528 lockdep_assert_held(&ar->data_lock); in ath12k_wmi_event_scan_start_failed()
5530 switch (ar->scan.state) { in ath12k_wmi_event_scan_start_failed()
5534 ath12k_warn(ar->ab, "received scan start failed event in an invalid scan state: %s (%d)\n", in ath12k_wmi_event_scan_start_failed()
5535 ath12k_scan_state_str(ar->scan.state), in ath12k_wmi_event_scan_start_failed()
5536 ar->scan.state); in ath12k_wmi_event_scan_start_failed()
5539 complete(&ar->scan.started); in ath12k_wmi_event_scan_start_failed()
5547 lockdep_assert_held(&ar->data_lock); in ath12k_wmi_event_scan_completed()
5549 switch (ar->scan.state) { in ath12k_wmi_event_scan_completed()
5560 ath12k_warn(ar->ab, "received scan completed event in an invalid scan state: %s (%d)\n", in ath12k_wmi_event_scan_completed()
5561 ath12k_scan_state_str(ar->scan.state), in ath12k_wmi_event_scan_completed()
5562 ar->scan.state); in ath12k_wmi_event_scan_completed()
5573 lockdep_assert_held(&ar->data_lock); in ath12k_wmi_event_scan_bss_chan()
5575 switch (ar->scan.state) { in ath12k_wmi_event_scan_bss_chan()
5578 ath12k_warn(ar->ab, "received scan bss chan event in an invalid scan state: %s (%d)\n", in ath12k_wmi_event_scan_bss_chan()
5579 ath12k_scan_state_str(ar->scan.state), in ath12k_wmi_event_scan_bss_chan()
5580 ar->scan.state); in ath12k_wmi_event_scan_bss_chan()
5584 ar->scan_channel = NULL; in ath12k_wmi_event_scan_bss_chan()
5593 lockdep_assert_held(&ar->data_lock); in ath12k_wmi_event_scan_foreign_chan()
5595 switch (ar->scan.state) { in ath12k_wmi_event_scan_foreign_chan()
5598 ath12k_warn(ar->ab, "received scan foreign chan event in an invalid scan state: %s (%d)\n", in ath12k_wmi_event_scan_foreign_chan()
5599 ath12k_scan_state_str(ar->scan.state), in ath12k_wmi_event_scan_foreign_chan()
5600 ar->scan.state); in ath12k_wmi_event_scan_foreign_chan()
5604 ar->scan_channel = ieee80211_get_channel(hw->wiphy, freq); in ath12k_wmi_event_scan_foreign_chan()
5606 if (ar->scan.is_roc && ar->scan.roc_freq == freq) in ath12k_wmi_event_scan_foreign_chan()
5607 complete(&ar->scan.on_channel); in ath12k_wmi_event_scan_foreign_chan()
5673 return -EPROTO; in ath12k_pull_scan_ev()
5676 scan_evt_param->event_type = ev->event_type; in ath12k_pull_scan_ev()
5677 scan_evt_param->reason = ev->reason; in ath12k_pull_scan_ev()
5678 scan_evt_param->channel_freq = ev->channel_freq; in ath12k_pull_scan_ev()
5679 scan_evt_param->scan_req_id = ev->scan_req_id; in ath12k_pull_scan_ev()
5680 scan_evt_param->scan_id = ev->scan_id; in ath12k_pull_scan_ev()
5681 scan_evt_param->vdev_id = ev->vdev_id; in ath12k_pull_scan_ev()
5682 scan_evt_param->tsf_timestamp = ev->tsf_timestamp; in ath12k_pull_scan_ev()
5706 return -EPROTO; in ath12k_pull_peer_sta_kickout_ev()
5709 arg->mac_addr = ev->peer_macaddr.addr; in ath12k_pull_peer_sta_kickout_ev()
5733 return -EPROTO; in ath12k_pull_roam_ev()
5736 roam_ev->vdev_id = ev->vdev_id; in ath12k_pull_roam_ev()
5737 roam_ev->reason = ev->reason; in ath12k_pull_roam_ev()
5738 roam_ev->rssi = ev->rssi; in ath12k_pull_roam_ev()
5751 if (!ar->mac.sbands[band].channels) in freq_to_idx()
5754 sband = hw->wiphy->bands[band]; in freq_to_idx()
5758 for (ch = 0; ch < sband->n_channels; ch++, idx++) in freq_to_idx()
5759 if (sband->channels[ch].center_freq == freq) in freq_to_idx()
5785 return -EPROTO; in ath12k_pull_chan_info_ev()
5788 ch_info_ev->err_code = ev->err_code; in ath12k_pull_chan_info_ev()
5789 ch_info_ev->freq = ev->freq; in ath12k_pull_chan_info_ev()
5790 ch_info_ev->cmd_flags = ev->cmd_flags; in ath12k_pull_chan_info_ev()
5791 ch_info_ev->noise_floor = ev->noise_floor; in ath12k_pull_chan_info_ev()
5792 ch_info_ev->rx_clear_count = ev->rx_clear_count; in ath12k_pull_chan_info_ev()
5793 ch_info_ev->cycle_count = ev->cycle_count; in ath12k_pull_chan_info_ev()
5794 ch_info_ev->chan_tx_pwr_range = ev->chan_tx_pwr_range; in ath12k_pull_chan_info_ev()
5795 ch_info_ev->chan_tx_pwr_tp = ev->chan_tx_pwr_tp; in ath12k_pull_chan_info_ev()
5796 ch_info_ev->rx_frame_count = ev->rx_frame_count; in ath12k_pull_chan_info_ev()
5797 ch_info_ev->tx_frame_cnt = ev->tx_frame_cnt; in ath12k_pull_chan_info_ev()
5798 ch_info_ev->mac_clk_mhz = ev->mac_clk_mhz; in ath12k_pull_chan_info_ev()
5799 ch_info_ev->vdev_id = ev->vdev_id; in ath12k_pull_chan_info_ev()
5824 return -EPROTO; in ath12k_pull_pdev_bss_chan_info_ev()
5827 bss_ch_info_ev->pdev_id = ev->pdev_id; in ath12k_pull_pdev_bss_chan_info_ev()
5828 bss_ch_info_ev->freq = ev->freq; in ath12k_pull_pdev_bss_chan_info_ev()
5829 bss_ch_info_ev->noise_floor = ev->noise_floor; in ath12k_pull_pdev_bss_chan_info_ev()
5830 bss_ch_info_ev->rx_clear_count_low = ev->rx_clear_count_low; in ath12k_pull_pdev_bss_chan_info_ev()
5831 bss_ch_info_ev->rx_clear_count_high = ev->rx_clear_count_high; in ath12k_pull_pdev_bss_chan_info_ev()
5832 bss_ch_info_ev->cycle_count_low = ev->cycle_count_low; in ath12k_pull_pdev_bss_chan_info_ev()
5833 bss_ch_info_ev->cycle_count_high = ev->cycle_count_high; in ath12k_pull_pdev_bss_chan_info_ev()
5834 bss_ch_info_ev->tx_cycle_count_low = ev->tx_cycle_count_low; in ath12k_pull_pdev_bss_chan_info_ev()
5835 bss_ch_info_ev->tx_cycle_count_high = ev->tx_cycle_count_high; in ath12k_pull_pdev_bss_chan_info_ev()
5836 bss_ch_info_ev->rx_cycle_count_low = ev->rx_cycle_count_low; in ath12k_pull_pdev_bss_chan_info_ev()
5837 bss_ch_info_ev->rx_cycle_count_high = ev->rx_cycle_count_high; in ath12k_pull_pdev_bss_chan_info_ev()
5838 bss_ch_info_ev->rx_bss_cycle_count_low = ev->rx_bss_cycle_count_low; in ath12k_pull_pdev_bss_chan_info_ev()
5839 bss_ch_info_ev->rx_bss_cycle_count_high = ev->rx_bss_cycle_count_high; in ath12k_pull_pdev_bss_chan_info_ev()
5864 return -EPROTO; in ath12k_pull_vdev_install_key_compl_ev()
5867 arg->vdev_id = le32_to_cpu(ev->vdev_id); in ath12k_pull_vdev_install_key_compl_ev()
5868 arg->macaddr = ev->peer_macaddr.addr; in ath12k_pull_vdev_install_key_compl_ev()
5869 arg->key_idx = le32_to_cpu(ev->key_idx); in ath12k_pull_vdev_install_key_compl_ev()
5870 arg->key_flags = le32_to_cpu(ev->key_flags); in ath12k_pull_vdev_install_key_compl_ev()
5871 arg->status = le32_to_cpu(ev->status); in ath12k_pull_vdev_install_key_compl_ev()
5895 return -EPROTO; in ath12k_pull_peer_assoc_conf_ev()
5898 peer_assoc_conf->vdev_id = le32_to_cpu(ev->vdev_id); in ath12k_pull_peer_assoc_conf_ev()
5899 peer_assoc_conf->macaddr = ev->peer_macaddr.addr; in ath12k_pull_peer_assoc_conf_ev()
5923 return -EPROTO; in ath12k_pull_pdev_temp_ev()
5933 wake_up(&ab->wmi_ab.tx_credits_wq); in ath12k_wmi_op_ep_tx_credits()
5963 ret = -ENOMEM; in ath12k_reg_chan_list_event()
5974 if (reg_info->status_code != REG_SET_CC_STATUS_PASS) { in ath12k_reg_chan_list_event()
5983 pdev_idx = reg_info->phy_id; in ath12k_reg_chan_list_event()
5985 if (pdev_idx >= ab->num_radios) { in ath12k_reg_chan_list_event()
5990 if (ab->hw_params->single_pdev_only && in ath12k_reg_chan_list_event()
5991 pdev_idx < ab->hw_params->num_rxdma_per_pdev) in ath12k_reg_chan_list_event()
5998 * stop-start after mac registration. in ath12k_reg_chan_list_event()
6000 if (ab->default_regd[pdev_idx] && !ab->new_regd[pdev_idx] && in ath12k_reg_chan_list_event()
6001 !memcmp(ab->default_regd[pdev_idx]->alpha2, in ath12k_reg_chan_list_event()
6002 reg_info->alpha2, 2)) in ath12k_reg_chan_list_event()
6009 if (ab->default_regd[pdev_idx] && in ath12k_reg_chan_list_event()
6011 ab->default_regd[pdev_idx]->alpha2) && in ath12k_reg_chan_list_event()
6012 !ath12k_reg_is_world_alpha((char *)reg_info->alpha2)) in ath12k_reg_chan_list_event()
6021 spin_lock(&ab->base_lock); in ath12k_reg_chan_list_event()
6022 if (test_bit(ATH12K_FLAG_REGISTERED, &ab->dev_flags)) { in ath12k_reg_chan_list_event()
6030 ar = ab->pdevs[pdev_idx].ar; in ath12k_reg_chan_list_event()
6031 kfree(ab->new_regd[pdev_idx]); in ath12k_reg_chan_list_event()
6032 ab->new_regd[pdev_idx] = regd; in ath12k_reg_chan_list_event()
6033 queue_work(ab->workqueue, &ar->regd_update_work); in ath12k_reg_chan_list_event()
6040 kfree(ab->default_regd[pdev_idx]); in ath12k_reg_chan_list_event()
6042 ab->default_regd[pdev_idx] = regd; in ath12k_reg_chan_list_event()
6044 ab->dfs_region = reg_info->dfs_region; in ath12k_reg_chan_list_event()
6045 spin_unlock(&ab->base_lock); in ath12k_reg_chan_list_event()
6061 kfree(reg_info->reg_rules_2g_ptr); in ath12k_reg_chan_list_event()
6062 kfree(reg_info->reg_rules_5g_ptr); in ath12k_reg_chan_list_event()
6063 if (reg_info->is_ext_reg_event) { in ath12k_reg_chan_list_event()
6065 kfree(reg_info->reg_rules_6g_ap_ptr[i]); in ath12k_reg_chan_list_event()
6069 kfree(reg_info->reg_rules_6g_client_ptr[j][i]); in ath12k_reg_chan_list_event()
6091 ab->wlan_init_status = le32_to_cpu(fixed_param.ready_event_min.status); in ath12k_wmi_rdy_parse()
6092 rdy_parse->num_extra_mac_addr = in ath12k_wmi_rdy_parse()
6095 ether_addr_copy(ab->mac_addr, in ath12k_wmi_rdy_parse()
6097 ab->pktlog_defs_checksum = le32_to_cpu(fixed_param.pktlog_defs_checksum); in ath12k_wmi_rdy_parse()
6098 ab->wmi_ready = true; in ath12k_wmi_rdy_parse()
6102 num_mac_addr = rdy_parse->num_extra_mac_addr; in ath12k_wmi_rdy_parse()
6104 if (!(ab->num_radios > 1 && num_mac_addr >= ab->num_radios)) in ath12k_wmi_rdy_parse()
6107 for (i = 0; i < ab->num_radios; i++) { in ath12k_wmi_rdy_parse()
6108 pdev = &ab->pdevs[i]; in ath12k_wmi_rdy_parse()
6109 ether_addr_copy(pdev->mac_addr, addr_list[i].addr); in ath12k_wmi_rdy_parse()
6111 ab->pdevs_macaddr_valid = true; in ath12k_wmi_rdy_parse()
6125 ret = ath12k_wmi_tlv_iter(ab, skb->data, skb->len, in ath12k_ready_event()
6132 complete(&ab->wmi_ab.unified_ready); in ath12k_ready_event()
6155 complete(&ar->peer_delete_done); in ath12k_peer_delete_resp_event()
6181 complete(&ar->vdev_delete_done); in ath12k_vdev_delete_resp_event()
6225 ar->last_wmi_vdev_start_status = 0; in ath12k_vdev_start_resp_event()
6232 ar->last_wmi_vdev_start_status = status; in ath12k_vdev_start_resp_event()
6235 complete(&ar->vdev_setup_done); in ath12k_vdev_start_resp_event()
6272 complete(&ar->vdev_setup_done); in ath12k_vdev_stopped_event()
6309 if ((test_bit(ATH12K_FLAG_CAC_RUNNING, &ar->dev_flags)) || in ath12k_mgmt_rx_event()
6318 status->flag |= RX_FLAG_MMIC_ERROR; in ath12k_mgmt_rx_event()
6322 status->band = NL80211_BAND_6GHZ; in ath12k_mgmt_rx_event()
6323 status->freq = rx_ev.chan_freq; in ath12k_mgmt_rx_event()
6325 status->band = NL80211_BAND_2GHZ; in ath12k_mgmt_rx_event()
6327 status->band = NL80211_BAND_5GHZ; in ath12k_mgmt_rx_event()
6338 (status->band == NL80211_BAND_5GHZ || status->band == NL80211_BAND_6GHZ)) in ath12k_mgmt_rx_event()
6340 "wmi mgmt rx 11b (CCK) on 5/6GHz, band = %d\n", status->band); in ath12k_mgmt_rx_event()
6342 sband = &ar->mac.sbands[status->band]; in ath12k_mgmt_rx_event()
6344 if (status->band != NL80211_BAND_6GHZ) in ath12k_mgmt_rx_event()
6345 status->freq = ieee80211_channel_to_frequency(rx_ev.channel, in ath12k_mgmt_rx_event()
6346 status->band); in ath12k_mgmt_rx_event()
6348 status->signal = rx_ev.snr + ATH12K_DEFAULT_NOISE_FLOOR; in ath12k_mgmt_rx_event()
6349 status->rate_idx = ath12k_mac_bitrate_to_idx(sband, rx_ev.rate / 100); in ath12k_mgmt_rx_event()
6351 hdr = (struct ieee80211_hdr *)skb->data; in ath12k_mgmt_rx_event()
6352 fc = le16_to_cpu(hdr->frame_control); in ath12k_mgmt_rx_event()
6358 status->flag |= RX_FLAG_SKIP_MONITOR; in ath12k_mgmt_rx_event()
6363 if (ieee80211_has_protected(hdr->frame_control)) { in ath12k_mgmt_rx_event()
6364 status->flag |= RX_FLAG_DECRYPTED; in ath12k_mgmt_rx_event()
6367 status->flag |= RX_FLAG_IV_STRIPPED | in ath12k_mgmt_rx_event()
6369 hdr->frame_control = __cpu_to_le16(fc & in ath12k_mgmt_rx_event()
6374 if (ieee80211_is_beacon(hdr->frame_control)) in ath12k_mgmt_rx_event()
6379 skb, skb->len, in ath12k_mgmt_rx_event()
6384 status->freq, status->band, status->signal, in ath12k_mgmt_rx_event()
6385 status->rate_idx); in ath12k_mgmt_rx_event()
6431 for (i = 0; i < ab->num_radios; i++) { in ath12k_get_ar_on_scan_state()
6432 pdev = rcu_dereference(ab->pdevs_active[i]); in ath12k_get_ar_on_scan_state()
6433 if (pdev && pdev->ar) { in ath12k_get_ar_on_scan_state()
6434 ar = pdev->ar; in ath12k_get_ar_on_scan_state()
6436 spin_lock_bh(&ar->data_lock); in ath12k_get_ar_on_scan_state()
6437 if (ar->scan.state == state && in ath12k_get_ar_on_scan_state()
6438 ar->scan.arvif && in ath12k_get_ar_on_scan_state()
6439 ar->scan.arvif->vdev_id == vdev_id) { in ath12k_get_ar_on_scan_state()
6440 spin_unlock_bh(&ar->data_lock); in ath12k_get_ar_on_scan_state()
6443 spin_unlock_bh(&ar->data_lock); in ath12k_get_ar_on_scan_state()
6484 spin_lock_bh(&ar->data_lock); in ath12k_scan_event()
6496 ath12k_scan_state_str(ar->scan.state), ar->scan.state); in ath12k_scan_event()
6525 spin_unlock_bh(&ar->data_lock); in ath12k_scan_event()
6544 spin_lock_bh(&ab->base_lock); in ath12k_peer_sta_kickout_event()
6554 ar = ath12k_mac_get_ar_by_vdev_id(ab, peer->vdev_id); in ath12k_peer_sta_kickout_event()
6557 peer->vdev_id); in ath12k_peer_sta_kickout_event()
6575 spin_unlock_bh(&ab->base_lock); in ath12k_peer_sta_kickout_event()
6634 u32 cc_freq_hz = ab->cc_freq_hz; in ath12k_chan_info_event()
6661 spin_lock_bh(&ar->data_lock); in ath12k_chan_info_event()
6663 switch (ar->scan.state) { in ath12k_chan_info_event()
6674 if (idx >= ARRAY_SIZE(ar->survey)) { in ath12k_chan_info_event()
6687 survey = &ar->survey[idx]; in ath12k_chan_info_event()
6689 survey->noise = le32_to_cpu(ch_info_ev.noise_floor); in ath12k_chan_info_event()
6690 survey->filled = SURVEY_INFO_NOISE_DBM | SURVEY_INFO_TIME | in ath12k_chan_info_event()
6692 survey->time = div_u64(le32_to_cpu(ch_info_ev.cycle_count), cc_freq_hz); in ath12k_chan_info_event()
6693 survey->time_busy = div_u64(le32_to_cpu(ch_info_ev.rx_clear_count), in ath12k_chan_info_event()
6697 spin_unlock_bh(&ar->data_lock); in ath12k_chan_info_event()
6707 u32 cc_freq_hz = ab->cc_freq_hz; in ath12k_pdev_bss_chan_info_event()
6747 spin_lock_bh(&ar->data_lock); in ath12k_pdev_bss_chan_info_event()
6749 if (idx >= ARRAY_SIZE(ar->survey)) { in ath12k_pdev_bss_chan_info_event()
6755 survey = &ar->survey[idx]; in ath12k_pdev_bss_chan_info_event()
6757 survey->noise = le32_to_cpu(bss_ch_info_ev.noise_floor); in ath12k_pdev_bss_chan_info_event()
6758 survey->time = div_u64(total, cc_freq_hz); in ath12k_pdev_bss_chan_info_event()
6759 survey->time_busy = div_u64(busy, cc_freq_hz); in ath12k_pdev_bss_chan_info_event()
6760 survey->time_rx = div_u64(rx_bss, cc_freq_hz); in ath12k_pdev_bss_chan_info_event()
6761 survey->time_tx = div_u64(tx, cc_freq_hz); in ath12k_pdev_bss_chan_info_event()
6762 survey->filled |= (SURVEY_INFO_NOISE_DBM | in ath12k_pdev_bss_chan_info_event()
6768 spin_unlock_bh(&ar->data_lock); in ath12k_pdev_bss_chan_info_event()
6769 complete(&ar->bss_survey_done); in ath12k_pdev_bss_chan_info_event()
6799 ar->install_key_status = 0; in ath12k_vdev_install_key_compl_event()
6804 ar->install_key_status = install_key_compl.status; in ath12k_vdev_install_key_compl_event()
6807 complete(&ar->install_key_done); in ath12k_vdev_install_key_compl_event()
6825 return -EINVAL; in ath12k_wmi_tlv_services_parser()
6835 if (le32_to_cpu(ev->wmi_service_segment_bitmap[i]) & in ath12k_wmi_tlv_services_parser()
6837 set_bit(j, ab->wmi_ab.svc_map); in ath12k_wmi_tlv_services_parser()
6843 ev->wmi_service_segment_bitmap[0], in ath12k_wmi_tlv_services_parser()
6844 ev->wmi_service_segment_bitmap[1], in ath12k_wmi_tlv_services_parser()
6845 ev->wmi_service_segment_bitmap[2], in ath12k_wmi_tlv_services_parser()
6846 ev->wmi_service_segment_bitmap[3]); in ath12k_wmi_tlv_services_parser()
6856 set_bit(j, ab->wmi_ab.svc_map); in ath12k_wmi_tlv_services_parser()
6873 ret = ath12k_wmi_tlv_iter(ab, skb->data, skb->len, in ath12k_service_available_event()
6903 complete(&ar->peer_assoc_done); in ath12k_peer_assoc_conf_event()
6919 len += scnprintf(buf + len, buf_len - len, "\n"); in ath12k_wmi_fw_vdev_stats_dump()
6920 len += scnprintf(buf + len, buf_len - len, "%30s\n", in ath12k_wmi_fw_vdev_stats_dump()
6922 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath12k_wmi_fw_vdev_stats_dump()
6925 list_for_each_entry(vdev, &fw_stats->vdevs, list) { in ath12k_wmi_fw_vdev_stats_dump()
6926 arvif = ath12k_mac_get_arvif(ar, vdev->vdev_id); in ath12k_wmi_fw_vdev_stats_dump()
6929 vif_macaddr = arvif->ahvif->vif->addr; in ath12k_wmi_fw_vdev_stats_dump()
6931 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath12k_wmi_fw_vdev_stats_dump()
6932 "VDEV ID", vdev->vdev_id); in ath12k_wmi_fw_vdev_stats_dump()
6933 len += scnprintf(buf + len, buf_len - len, "%30s %pM\n", in ath12k_wmi_fw_vdev_stats_dump()
6935 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath12k_wmi_fw_vdev_stats_dump()
6936 "beacon snr", vdev->beacon_snr); in ath12k_wmi_fw_vdev_stats_dump()
6937 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath12k_wmi_fw_vdev_stats_dump()
6938 "data snr", vdev->data_snr); in ath12k_wmi_fw_vdev_stats_dump()
6939 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath12k_wmi_fw_vdev_stats_dump()
6940 "num rx frames", vdev->num_rx_frames); in ath12k_wmi_fw_vdev_stats_dump()
6941 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath12k_wmi_fw_vdev_stats_dump()
6942 "num rts fail", vdev->num_rts_fail); in ath12k_wmi_fw_vdev_stats_dump()
6943 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath12k_wmi_fw_vdev_stats_dump()
6944 "num rts success", vdev->num_rts_success); in ath12k_wmi_fw_vdev_stats_dump()
6945 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath12k_wmi_fw_vdev_stats_dump()
6946 "num rx err", vdev->num_rx_err); in ath12k_wmi_fw_vdev_stats_dump()
6947 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath12k_wmi_fw_vdev_stats_dump()
6948 "num rx discard", vdev->num_rx_discard); in ath12k_wmi_fw_vdev_stats_dump()
6949 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath12k_wmi_fw_vdev_stats_dump()
6950 "num tx not acked", vdev->num_tx_not_acked); in ath12k_wmi_fw_vdev_stats_dump()
6953 len += scnprintf(buf + len, buf_len - len, in ath12k_wmi_fw_vdev_stats_dump()
6956 vdev->num_tx_frames[i]); in ath12k_wmi_fw_vdev_stats_dump()
6959 len += scnprintf(buf + len, buf_len - len, in ath12k_wmi_fw_vdev_stats_dump()
6962 vdev->num_tx_frames_retries[i]); in ath12k_wmi_fw_vdev_stats_dump()
6965 len += scnprintf(buf + len, buf_len - len, in ath12k_wmi_fw_vdev_stats_dump()
6968 vdev->num_tx_frames_failures[i]); in ath12k_wmi_fw_vdev_stats_dump()
6971 len += scnprintf(buf + len, buf_len - len, in ath12k_wmi_fw_vdev_stats_dump()
6974 vdev->tx_rate_history[i]); in ath12k_wmi_fw_vdev_stats_dump()
6976 len += scnprintf(buf + len, buf_len - len, in ath12k_wmi_fw_vdev_stats_dump()
6979 vdev->beacon_rssi_history[i]); in ath12k_wmi_fw_vdev_stats_dump()
6981 len += scnprintf(buf + len, buf_len - len, "\n"); in ath12k_wmi_fw_vdev_stats_dump()
6997 num_bcn = list_count_nodes(&fw_stats->bcn); in ath12k_wmi_fw_bcn_stats_dump()
6999 len += scnprintf(buf + len, buf_len - len, "\n"); in ath12k_wmi_fw_bcn_stats_dump()
7000 len += scnprintf(buf + len, buf_len - len, "%30s (%zu)\n", in ath12k_wmi_fw_bcn_stats_dump()
7002 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath12k_wmi_fw_bcn_stats_dump()
7005 list_for_each_entry(bcn, &fw_stats->bcn, list) { in ath12k_wmi_fw_bcn_stats_dump()
7006 arvif = ath12k_mac_get_arvif(ar, bcn->vdev_id); in ath12k_wmi_fw_bcn_stats_dump()
7009 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath12k_wmi_fw_bcn_stats_dump()
7010 "VDEV ID", bcn->vdev_id); in ath12k_wmi_fw_bcn_stats_dump()
7011 len += scnprintf(buf + len, buf_len - len, "%30s %pM\n", in ath12k_wmi_fw_bcn_stats_dump()
7012 "VDEV MAC address", arvif->ahvif->vif->addr); in ath12k_wmi_fw_bcn_stats_dump()
7013 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath12k_wmi_fw_bcn_stats_dump()
7015 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath12k_wmi_fw_bcn_stats_dump()
7016 "Num of beacon tx success", bcn->tx_bcn_succ_cnt); in ath12k_wmi_fw_bcn_stats_dump()
7017 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath12k_wmi_fw_bcn_stats_dump()
7018 "Num of beacon tx failures", bcn->tx_bcn_outage_cnt); in ath12k_wmi_fw_bcn_stats_dump()
7020 len += scnprintf(buf + len, buf_len - len, "\n"); in ath12k_wmi_fw_bcn_stats_dump()
7032 len = scnprintf(buf + len, buf_len - len, "\n"); in ath12k_wmi_fw_pdev_base_stats_dump()
7033 len += scnprintf(buf + len, buf_len - len, "%30s\n", in ath12k_wmi_fw_pdev_base_stats_dump()
7035 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath12k_wmi_fw_pdev_base_stats_dump()
7038 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath12k_wmi_fw_pdev_base_stats_dump()
7039 "Channel noise floor", pdev->ch_noise_floor); in ath12k_wmi_fw_pdev_base_stats_dump()
7040 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath12k_wmi_fw_pdev_base_stats_dump()
7041 "Channel TX power", pdev->chan_tx_power); in ath12k_wmi_fw_pdev_base_stats_dump()
7042 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath12k_wmi_fw_pdev_base_stats_dump()
7043 "TX frame count", pdev->tx_frame_count); in ath12k_wmi_fw_pdev_base_stats_dump()
7044 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath12k_wmi_fw_pdev_base_stats_dump()
7045 "RX frame count", pdev->rx_frame_count); in ath12k_wmi_fw_pdev_base_stats_dump()
7046 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath12k_wmi_fw_pdev_base_stats_dump()
7047 "RX clear count", pdev->rx_clear_count); in ath12k_wmi_fw_pdev_base_stats_dump()
7048 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath12k_wmi_fw_pdev_base_stats_dump()
7049 "Cycle count", pdev->cycle_count); in ath12k_wmi_fw_pdev_base_stats_dump()
7050 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath12k_wmi_fw_pdev_base_stats_dump()
7051 "PHY error count", pdev->phy_err_count); in ath12k_wmi_fw_pdev_base_stats_dump()
7052 len += scnprintf(buf + len, buf_len - len, "%30s %10llu\n", in ath12k_wmi_fw_pdev_base_stats_dump()
7065 len += scnprintf(buf + len, buf_len - len, "\n%30s\n", in ath12k_wmi_fw_pdev_tx_stats_dump()
7067 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath12k_wmi_fw_pdev_tx_stats_dump()
7070 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath12k_wmi_fw_pdev_tx_stats_dump()
7071 "HTT cookies queued", pdev->comp_queued); in ath12k_wmi_fw_pdev_tx_stats_dump()
7072 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath12k_wmi_fw_pdev_tx_stats_dump()
7073 "HTT cookies disp.", pdev->comp_delivered); in ath12k_wmi_fw_pdev_tx_stats_dump()
7074 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath12k_wmi_fw_pdev_tx_stats_dump()
7075 "MSDU queued", pdev->msdu_enqued); in ath12k_wmi_fw_pdev_tx_stats_dump()
7076 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath12k_wmi_fw_pdev_tx_stats_dump()
7077 "MPDU queued", pdev->mpdu_enqued); in ath12k_wmi_fw_pdev_tx_stats_dump()
7078 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath12k_wmi_fw_pdev_tx_stats_dump()
7079 "MSDUs dropped", pdev->wmm_drop); in ath12k_wmi_fw_pdev_tx_stats_dump()
7080 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath12k_wmi_fw_pdev_tx_stats_dump()
7081 "Local enqued", pdev->local_enqued); in ath12k_wmi_fw_pdev_tx_stats_dump()
7082 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath12k_wmi_fw_pdev_tx_stats_dump()
7083 "Local freed", pdev->local_freed); in ath12k_wmi_fw_pdev_tx_stats_dump()
7084 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath12k_wmi_fw_pdev_tx_stats_dump()
7085 "HW queued", pdev->hw_queued); in ath12k_wmi_fw_pdev_tx_stats_dump()
7086 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath12k_wmi_fw_pdev_tx_stats_dump()
7087 "PPDUs reaped", pdev->hw_reaped); in ath12k_wmi_fw_pdev_tx_stats_dump()
7088 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath12k_wmi_fw_pdev_tx_stats_dump()
7089 "Num underruns", pdev->underrun); in ath12k_wmi_fw_pdev_tx_stats_dump()
7090 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath12k_wmi_fw_pdev_tx_stats_dump()
7091 "PPDUs cleaned", pdev->tx_abort); in ath12k_wmi_fw_pdev_tx_stats_dump()
7092 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath12k_wmi_fw_pdev_tx_stats_dump()
7093 "MPDUs requeued", pdev->mpdus_requed); in ath12k_wmi_fw_pdev_tx_stats_dump()
7094 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath12k_wmi_fw_pdev_tx_stats_dump()
7095 "Excessive retries", pdev->tx_ko); in ath12k_wmi_fw_pdev_tx_stats_dump()
7096 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath12k_wmi_fw_pdev_tx_stats_dump()
7097 "HW rate", pdev->data_rc); in ath12k_wmi_fw_pdev_tx_stats_dump()
7098 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath12k_wmi_fw_pdev_tx_stats_dump()
7099 "Sched self triggers", pdev->self_triggers); in ath12k_wmi_fw_pdev_tx_stats_dump()
7100 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath12k_wmi_fw_pdev_tx_stats_dump()
7102 pdev->sw_retry_failure); in ath12k_wmi_fw_pdev_tx_stats_dump()
7103 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath12k_wmi_fw_pdev_tx_stats_dump()
7105 pdev->illgl_rate_phy_err); in ath12k_wmi_fw_pdev_tx_stats_dump()
7106 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath12k_wmi_fw_pdev_tx_stats_dump()
7107 "PDEV continuous xretry", pdev->pdev_cont_xretry); in ath12k_wmi_fw_pdev_tx_stats_dump()
7108 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath12k_wmi_fw_pdev_tx_stats_dump()
7109 "TX timeout", pdev->pdev_tx_timeout); in ath12k_wmi_fw_pdev_tx_stats_dump()
7110 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath12k_wmi_fw_pdev_tx_stats_dump()
7111 "PDEV resets", pdev->pdev_resets); in ath12k_wmi_fw_pdev_tx_stats_dump()
7112 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath12k_wmi_fw_pdev_tx_stats_dump()
7114 pdev->stateless_tid_alloc_failure); in ath12k_wmi_fw_pdev_tx_stats_dump()
7115 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath12k_wmi_fw_pdev_tx_stats_dump()
7116 "PHY underrun", pdev->phy_underrun); in ath12k_wmi_fw_pdev_tx_stats_dump()
7117 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath12k_wmi_fw_pdev_tx_stats_dump()
7118 "MPDU is more than txop limit", pdev->txop_ovf); in ath12k_wmi_fw_pdev_tx_stats_dump()
7129 len += scnprintf(buf + len, buf_len - len, "\n%30s\n", in ath12k_wmi_fw_pdev_rx_stats_dump()
7131 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath12k_wmi_fw_pdev_rx_stats_dump()
7134 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath12k_wmi_fw_pdev_rx_stats_dump()
7136 pdev->mid_ppdu_route_change); in ath12k_wmi_fw_pdev_rx_stats_dump()
7137 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath12k_wmi_fw_pdev_rx_stats_dump()
7138 "Tot. number of statuses", pdev->status_rcvd); in ath12k_wmi_fw_pdev_rx_stats_dump()
7139 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath12k_wmi_fw_pdev_rx_stats_dump()
7140 "Extra frags on rings 0", pdev->r0_frags); in ath12k_wmi_fw_pdev_rx_stats_dump()
7141 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath12k_wmi_fw_pdev_rx_stats_dump()
7142 "Extra frags on rings 1", pdev->r1_frags); in ath12k_wmi_fw_pdev_rx_stats_dump()
7143 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath12k_wmi_fw_pdev_rx_stats_dump()
7144 "Extra frags on rings 2", pdev->r2_frags); in ath12k_wmi_fw_pdev_rx_stats_dump()
7145 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath12k_wmi_fw_pdev_rx_stats_dump()
7146 "Extra frags on rings 3", pdev->r3_frags); in ath12k_wmi_fw_pdev_rx_stats_dump()
7147 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath12k_wmi_fw_pdev_rx_stats_dump()
7148 "MSDUs delivered to HTT", pdev->htt_msdus); in ath12k_wmi_fw_pdev_rx_stats_dump()
7149 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath12k_wmi_fw_pdev_rx_stats_dump()
7150 "MPDUs delivered to HTT", pdev->htt_mpdus); in ath12k_wmi_fw_pdev_rx_stats_dump()
7151 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath12k_wmi_fw_pdev_rx_stats_dump()
7152 "MSDUs delivered to stack", pdev->loc_msdus); in ath12k_wmi_fw_pdev_rx_stats_dump()
7153 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath12k_wmi_fw_pdev_rx_stats_dump()
7154 "MPDUs delivered to stack", pdev->loc_mpdus); in ath12k_wmi_fw_pdev_rx_stats_dump()
7155 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath12k_wmi_fw_pdev_rx_stats_dump()
7156 "Oversized AMSUs", pdev->oversize_amsdu); in ath12k_wmi_fw_pdev_rx_stats_dump()
7157 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath12k_wmi_fw_pdev_rx_stats_dump()
7158 "PHY errors", pdev->phy_errs); in ath12k_wmi_fw_pdev_rx_stats_dump()
7159 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath12k_wmi_fw_pdev_rx_stats_dump()
7160 "PHY errors drops", pdev->phy_err_drop); in ath12k_wmi_fw_pdev_rx_stats_dump()
7161 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath12k_wmi_fw_pdev_rx_stats_dump()
7162 "MPDU errors (FCS, MIC, ENC)", pdev->mpdu_errs); in ath12k_wmi_fw_pdev_rx_stats_dump()
7174 pdev = list_first_entry_or_null(&fw_stats->pdevs, in ath12k_wmi_fw_pdev_stats_dump()
7177 ath12k_warn(ar->ab, "failed to get pdev stats\n"); in ath12k_wmi_fw_pdev_stats_dump()
7182 ar->ab->fw_soc_drop_count); in ath12k_wmi_fw_pdev_stats_dump()
7196 spin_lock_bh(&ar->data_lock); in ath12k_wmi_fw_stats_dump()
7212 spin_unlock_bh(&ar->data_lock); in ath12k_wmi_fw_stats_dump()
7215 buf[len - 1] = 0; in ath12k_wmi_fw_stats_dump()
7223 ath12k_wmi_pull_vdev_stats(const struct wmi_vdev_stats_params *src, in ath12k_wmi_pull_vdev_stats() argument
7228 dst->vdev_id = le32_to_cpu(src->vdev_id); in ath12k_wmi_pull_vdev_stats()
7229 dst->beacon_snr = le32_to_cpu(src->beacon_snr); in ath12k_wmi_pull_vdev_stats()
7230 dst->data_snr = le32_to_cpu(src->data_snr); in ath12k_wmi_pull_vdev_stats()
7231 dst->num_rx_frames = le32_to_cpu(src->num_rx_frames); in ath12k_wmi_pull_vdev_stats()
7232 dst->num_rts_fail = le32_to_cpu(src->num_rts_fail); in ath12k_wmi_pull_vdev_stats()
7233 dst->num_rts_success = le32_to_cpu(src->num_rts_success); in ath12k_wmi_pull_vdev_stats()
7234 dst->num_rx_err = le32_to_cpu(src->num_rx_err); in ath12k_wmi_pull_vdev_stats()
7235 dst->num_rx_discard = le32_to_cpu(src->num_rx_discard); in ath12k_wmi_pull_vdev_stats()
7236 dst->num_tx_not_acked = le32_to_cpu(src->num_tx_not_acked); in ath12k_wmi_pull_vdev_stats()
7239 dst->num_tx_frames[i] = in ath12k_wmi_pull_vdev_stats()
7240 le32_to_cpu(src->num_tx_frames[i]); in ath12k_wmi_pull_vdev_stats()
7243 dst->num_tx_frames_retries[i] = in ath12k_wmi_pull_vdev_stats()
7244 le32_to_cpu(src->num_tx_frames_retries[i]); in ath12k_wmi_pull_vdev_stats()
7247 dst->num_tx_frames_failures[i] = in ath12k_wmi_pull_vdev_stats()
7248 le32_to_cpu(src->num_tx_frames_failures[i]); in ath12k_wmi_pull_vdev_stats()
7251 dst->tx_rate_history[i] = in ath12k_wmi_pull_vdev_stats()
7252 le32_to_cpu(src->tx_rate_history[i]); in ath12k_wmi_pull_vdev_stats()
7255 dst->beacon_rssi_history[i] = in ath12k_wmi_pull_vdev_stats()
7256 le32_to_cpu(src->beacon_rssi_history[i]); in ath12k_wmi_pull_vdev_stats()
7260 ath12k_wmi_pull_bcn_stats(const struct ath12k_wmi_bcn_stats_params *src, in ath12k_wmi_pull_bcn_stats() argument
7263 dst->vdev_id = le32_to_cpu(src->vdev_id); in ath12k_wmi_pull_bcn_stats()
7264 dst->tx_bcn_succ_cnt = le32_to_cpu(src->tx_bcn_succ_cnt); in ath12k_wmi_pull_bcn_stats()
7265 dst->tx_bcn_outage_cnt = le32_to_cpu(src->tx_bcn_outage_cnt); in ath12k_wmi_pull_bcn_stats()
7269 ath12k_wmi_pull_pdev_stats_base(const struct ath12k_wmi_pdev_base_stats_params *src, in ath12k_wmi_pull_pdev_stats_base() argument
7272 dst->ch_noise_floor = a_sle32_to_cpu(src->chan_nf); in ath12k_wmi_pull_pdev_stats_base()
7273 dst->tx_frame_count = __le32_to_cpu(src->tx_frame_count); in ath12k_wmi_pull_pdev_stats_base()
7274 dst->rx_frame_count = __le32_to_cpu(src->rx_frame_count); in ath12k_wmi_pull_pdev_stats_base()
7275 dst->rx_clear_count = __le32_to_cpu(src->rx_clear_count); in ath12k_wmi_pull_pdev_stats_base()
7276 dst->cycle_count = __le32_to_cpu(src->cycle_count); in ath12k_wmi_pull_pdev_stats_base()
7277 dst->phy_err_count = __le32_to_cpu(src->phy_err_count); in ath12k_wmi_pull_pdev_stats_base()
7278 dst->chan_tx_power = __le32_to_cpu(src->chan_tx_pwr); in ath12k_wmi_pull_pdev_stats_base()
7282 ath12k_wmi_pull_pdev_stats_tx(const struct ath12k_wmi_pdev_tx_stats_params *src, in ath12k_wmi_pull_pdev_stats_tx() argument
7285 dst->comp_queued = a_sle32_to_cpu(src->comp_queued); in ath12k_wmi_pull_pdev_stats_tx()
7286 dst->comp_delivered = a_sle32_to_cpu(src->comp_delivered); in ath12k_wmi_pull_pdev_stats_tx()
7287 dst->msdu_enqued = a_sle32_to_cpu(src->msdu_enqued); in ath12k_wmi_pull_pdev_stats_tx()
7288 dst->mpdu_enqued = a_sle32_to_cpu(src->mpdu_enqued); in ath12k_wmi_pull_pdev_stats_tx()
7289 dst->wmm_drop = a_sle32_to_cpu(src->wmm_drop); in ath12k_wmi_pull_pdev_stats_tx()
7290 dst->local_enqued = a_sle32_to_cpu(src->local_enqued); in ath12k_wmi_pull_pdev_stats_tx()
7291 dst->local_freed = a_sle32_to_cpu(src->local_freed); in ath12k_wmi_pull_pdev_stats_tx()
7292 dst->hw_queued = a_sle32_to_cpu(src->hw_queued); in ath12k_wmi_pull_pdev_stats_tx()
7293 dst->hw_reaped = a_sle32_to_cpu(src->hw_reaped); in ath12k_wmi_pull_pdev_stats_tx()
7294 dst->underrun = a_sle32_to_cpu(src->underrun); in ath12k_wmi_pull_pdev_stats_tx()
7295 dst->tx_abort = a_sle32_to_cpu(src->tx_abort); in ath12k_wmi_pull_pdev_stats_tx()
7296 dst->mpdus_requed = a_sle32_to_cpu(src->mpdus_requed); in ath12k_wmi_pull_pdev_stats_tx()
7297 dst->tx_ko = __le32_to_cpu(src->tx_ko); in ath12k_wmi_pull_pdev_stats_tx()
7298 dst->data_rc = __le32_to_cpu(src->data_rc); in ath12k_wmi_pull_pdev_stats_tx()
7299 dst->self_triggers = __le32_to_cpu(src->self_triggers); in ath12k_wmi_pull_pdev_stats_tx()
7300 dst->sw_retry_failure = __le32_to_cpu(src->sw_retry_failure); in ath12k_wmi_pull_pdev_stats_tx()
7301 dst->illgl_rate_phy_err = __le32_to_cpu(src->illgl_rate_phy_err); in ath12k_wmi_pull_pdev_stats_tx()
7302 dst->pdev_cont_xretry = __le32_to_cpu(src->pdev_cont_xretry); in ath12k_wmi_pull_pdev_stats_tx()
7303 dst->pdev_tx_timeout = __le32_to_cpu(src->pdev_tx_timeout); in ath12k_wmi_pull_pdev_stats_tx()
7304 dst->pdev_resets = __le32_to_cpu(src->pdev_resets); in ath12k_wmi_pull_pdev_stats_tx()
7305 dst->stateless_tid_alloc_failure = in ath12k_wmi_pull_pdev_stats_tx()
7306 __le32_to_cpu(src->stateless_tid_alloc_failure); in ath12k_wmi_pull_pdev_stats_tx()
7307 dst->phy_underrun = __le32_to_cpu(src->phy_underrun); in ath12k_wmi_pull_pdev_stats_tx()
7308 dst->txop_ovf = __le32_to_cpu(src->txop_ovf); in ath12k_wmi_pull_pdev_stats_tx()
7312 ath12k_wmi_pull_pdev_stats_rx(const struct ath12k_wmi_pdev_rx_stats_params *src, in ath12k_wmi_pull_pdev_stats_rx() argument
7315 dst->mid_ppdu_route_change = in ath12k_wmi_pull_pdev_stats_rx()
7316 a_sle32_to_cpu(src->mid_ppdu_route_change); in ath12k_wmi_pull_pdev_stats_rx()
7317 dst->status_rcvd = a_sle32_to_cpu(src->status_rcvd); in ath12k_wmi_pull_pdev_stats_rx()
7318 dst->r0_frags = a_sle32_to_cpu(src->r0_frags); in ath12k_wmi_pull_pdev_stats_rx()
7319 dst->r1_frags = a_sle32_to_cpu(src->r1_frags); in ath12k_wmi_pull_pdev_stats_rx()
7320 dst->r2_frags = a_sle32_to_cpu(src->r2_frags); in ath12k_wmi_pull_pdev_stats_rx()
7321 dst->r3_frags = a_sle32_to_cpu(src->r3_frags); in ath12k_wmi_pull_pdev_stats_rx()
7322 dst->htt_msdus = a_sle32_to_cpu(src->htt_msdus); in ath12k_wmi_pull_pdev_stats_rx()
7323 dst->htt_mpdus = a_sle32_to_cpu(src->htt_mpdus); in ath12k_wmi_pull_pdev_stats_rx()
7324 dst->loc_msdus = a_sle32_to_cpu(src->loc_msdus); in ath12k_wmi_pull_pdev_stats_rx()
7325 dst->loc_mpdus = a_sle32_to_cpu(src->loc_mpdus); in ath12k_wmi_pull_pdev_stats_rx()
7326 dst->oversize_amsdu = a_sle32_to_cpu(src->oversize_amsdu); in ath12k_wmi_pull_pdev_stats_rx()
7327 dst->phy_errs = a_sle32_to_cpu(src->phy_errs); in ath12k_wmi_pull_pdev_stats_rx()
7328 dst->phy_err_drop = a_sle32_to_cpu(src->phy_err_drop); in ath12k_wmi_pull_pdev_stats_rx()
7329 dst->mpdu_errs = a_sle32_to_cpu(src->mpdu_errs); in ath12k_wmi_pull_pdev_stats_rx()
7337 const struct wmi_stats_event *ev = parse->ev; in ath12k_wmi_tlv_fw_stats_data_parse()
7353 return -EPROTO; in ath12k_wmi_tlv_fw_stats_data_parse()
7358 ar = ath12k_mac_get_ar_by_pdev_id(ab, le32_to_cpu(ev->pdev_id)); in ath12k_wmi_tlv_fw_stats_data_parse()
7361 le32_to_cpu(ev->pdev_id)); in ath12k_wmi_tlv_fw_stats_data_parse()
7362 ret = -EPROTO; in ath12k_wmi_tlv_fw_stats_data_parse()
7366 for (i = 0; i < le32_to_cpu(ev->num_vdev_stats); i++) { in ath12k_wmi_tlv_fw_stats_data_parse()
7367 const struct wmi_vdev_stats_params *src; in ath12k_wmi_tlv_fw_stats_data_parse() local
7370 src = data; in ath12k_wmi_tlv_fw_stats_data_parse()
7371 if (len < sizeof(*src)) { in ath12k_wmi_tlv_fw_stats_data_parse()
7372 ret = -EPROTO; in ath12k_wmi_tlv_fw_stats_data_parse()
7376 arvif = ath12k_mac_get_arvif(ar, le32_to_cpu(src->vdev_id)); in ath12k_wmi_tlv_fw_stats_data_parse()
7379 arvif->bssid, in ath12k_wmi_tlv_fw_stats_data_parse()
7383 arsta = &ahsta->deflink; in ath12k_wmi_tlv_fw_stats_data_parse()
7384 arsta->rssi_beacon = le32_to_cpu(src->beacon_snr); in ath12k_wmi_tlv_fw_stats_data_parse()
7387 src->vdev_id, src->beacon_snr); in ath12k_wmi_tlv_fw_stats_data_parse()
7391 arvif->bssid); in ath12k_wmi_tlv_fw_stats_data_parse()
7395 data += sizeof(*src); in ath12k_wmi_tlv_fw_stats_data_parse()
7396 len -= sizeof(*src); in ath12k_wmi_tlv_fw_stats_data_parse()
7400 ath12k_wmi_pull_vdev_stats(src, dst); in ath12k_wmi_tlv_fw_stats_data_parse()
7402 list_add_tail(&dst->list, &stats.vdevs); in ath12k_wmi_tlv_fw_stats_data_parse()
7404 for (i = 0; i < le32_to_cpu(ev->num_bcn_stats); i++) { in ath12k_wmi_tlv_fw_stats_data_parse()
7405 const struct ath12k_wmi_bcn_stats_params *src; in ath12k_wmi_tlv_fw_stats_data_parse() local
7408 src = data; in ath12k_wmi_tlv_fw_stats_data_parse()
7409 if (len < sizeof(*src)) { in ath12k_wmi_tlv_fw_stats_data_parse()
7410 ret = -EPROTO; in ath12k_wmi_tlv_fw_stats_data_parse()
7414 data += sizeof(*src); in ath12k_wmi_tlv_fw_stats_data_parse()
7415 len -= sizeof(*src); in ath12k_wmi_tlv_fw_stats_data_parse()
7419 ath12k_wmi_pull_bcn_stats(src, dst); in ath12k_wmi_tlv_fw_stats_data_parse()
7421 list_add_tail(&dst->list, &stats.bcn); in ath12k_wmi_tlv_fw_stats_data_parse()
7423 for (i = 0; i < le32_to_cpu(ev->num_pdev_stats); i++) { in ath12k_wmi_tlv_fw_stats_data_parse()
7424 const struct ath12k_wmi_pdev_stats_params *src; in ath12k_wmi_tlv_fw_stats_data_parse() local
7427 src = data; in ath12k_wmi_tlv_fw_stats_data_parse()
7428 if (len < sizeof(*src)) { in ath12k_wmi_tlv_fw_stats_data_parse()
7429 ret = -EPROTO; in ath12k_wmi_tlv_fw_stats_data_parse()
7435 data += sizeof(*src); in ath12k_wmi_tlv_fw_stats_data_parse()
7436 len -= sizeof(*src); in ath12k_wmi_tlv_fw_stats_data_parse()
7442 ath12k_wmi_pull_pdev_stats_base(&src->base, dst); in ath12k_wmi_tlv_fw_stats_data_parse()
7443 ath12k_wmi_pull_pdev_stats_tx(&src->tx, dst); in ath12k_wmi_tlv_fw_stats_data_parse()
7444 ath12k_wmi_pull_pdev_stats_rx(&src->rx, dst); in ath12k_wmi_tlv_fw_stats_data_parse()
7445 list_add_tail(&dst->list, &stats.pdevs); in ath12k_wmi_tlv_fw_stats_data_parse()
7448 complete(&ar->fw_stats_complete); in ath12k_wmi_tlv_fw_stats_data_parse()
7464 parse->ev = ptr; in ath12k_wmi_tlv_fw_stats_parse()
7480 ret = ath12k_wmi_tlv_iter(ab, skb->data, skb->len, in ath12k_update_stats_event()
7513 ev->ctl_failsafe_status); in ath12k_pdev_ctl_failsafe_check_event()
7518 if (ev->ctl_failsafe_status != 0) in ath12k_pdev_ctl_failsafe_check_event()
7520 ev->ctl_failsafe_status); in ath12k_pdev_ctl_failsafe_check_event()
7530 u32 current_switch_count = le32_to_cpu(ev->current_switch_count); in ath12k_wmi_process_csa_switch_count_event()
7531 u32 num_vdevs = le32_to_cpu(ev->num_vdevs); in ath12k_wmi_process_csa_switch_count_event()
7546 ahvif = arvif->ahvif; in ath12k_wmi_process_csa_switch_count_event()
7548 if (arvif->link_id >= IEEE80211_MLD_MAX_NUM_LINKS) { in ath12k_wmi_process_csa_switch_count_event()
7550 arvif->link_id); in ath12k_wmi_process_csa_switch_count_event()
7554 conf = rcu_dereference(ahvif->vif->link_conf[arvif->link_id]); in ath12k_wmi_process_csa_switch_count_event()
7557 ahvif->vif->addr, arvif->link_id); in ath12k_wmi_process_csa_switch_count_event()
7561 if (!arvif->is_up || !conf->csa_active) in ath12k_wmi_process_csa_switch_count_event()
7566 ieee80211_csa_finish(ahvif->vif, arvif->link_id); in ath12k_wmi_process_csa_switch_count_event()
7567 arvif->current_cntdown_counter = 0; in ath12k_wmi_process_csa_switch_count_event()
7574 if (current_switch_count != arvif->current_cntdown_counter) in ath12k_wmi_process_csa_switch_count_event()
7577 arvif->current_cntdown_counter = in ath12k_wmi_process_csa_switch_count_event()
7578 ieee80211_beacon_update_cntdwn(ahvif->vif, in ath12k_wmi_process_csa_switch_count_event()
7579 arvif->link_id); in ath12k_wmi_process_csa_switch_count_event()
7612 ev->current_switch_count, ev->pdev_id, in ath12k_wmi_pdev_csa_switch_count_status_event()
7613 ev->num_vdevs); in ath12k_wmi_pdev_csa_switch_count_status_event()
7646 ev->pdev_id, ev->detection_mode, ev->chan_freq, ev->chan_width, in ath12k_wmi_pdev_dfs_radar_detected_event()
7647 ev->detector_id, ev->segment_id, ev->timestamp, ev->is_chirp, in ath12k_wmi_pdev_dfs_radar_detected_event()
7648 ev->freq_offset, ev->sidx); in ath12k_wmi_pdev_dfs_radar_detected_event()
7652 ar = ath12k_mac_get_ar_by_pdev_id(ab, le32_to_cpu(ev->pdev_id)); in ath12k_wmi_pdev_dfs_radar_detected_event()
7656 ev->pdev_id); in ath12k_wmi_pdev_dfs_radar_detected_event()
7669 ath12k_dbg(ar->ab, ATH12K_DBG_REG, "DFS Radar Detected in pdev %d\n", in ath12k_wmi_pdev_dfs_radar_detected_event()
7670 ev->pdev_id); in ath12k_wmi_pdev_dfs_radar_detected_event()
7672 if (ar->dfs_block_radar_events) in ath12k_wmi_pdev_dfs_radar_detected_event()
7695 ath12k_warn(ab, "failed to parse ftm event tlv: %d\n", ret); in ath12k_tm_wmi_event_segmented()
7701 ath12k_warn(ab, "failed to fetch ftm msg\n"); in ath12k_tm_wmi_event_segmented()
7706 length = skb->len - TLV_HDR_SIZE; in ath12k_tm_wmi_event_segmented()
7764 ev->vdev_id, ev->fils_tt, ev->tbtt); in ath12k_fils_discovery_event()
7793 if (ev->tx_status) in ath12k_probe_resp_tx_status_event()
7796 ev->vdev_id, ev->tx_status); in ath12k_probe_resp_tx_status_event()
7821 ret = -EPROTO; in ath12k_wmi_p2p_noa_event()
7825 vdev_id = __le32_to_cpu(ev->vdev_id); in ath12k_wmi_p2p_noa_event()
7829 vdev_id, le32_get_bits(noa->noa_attr, WMI_P2P_NOA_INFO_DESC_NUM)); in ath12k_wmi_p2p_noa_event()
7836 ret = -EINVAL; in ath12k_wmi_p2p_noa_event()
7873 le32_to_cpu(ev->gpio_pin_num), in ath12k_rfkill_state_change_event()
7874 le32_to_cpu(ev->int_type), in ath12k_rfkill_state_change_event()
7875 le32_to_cpu(ev->radio_state)); in ath12k_rfkill_state_change_event()
7877 spin_lock_bh(&ab->base_lock); in ath12k_rfkill_state_change_event()
7878 ab->rfkill_radio_on = (ev->radio_state == cpu_to_le32(WMI_RFKILL_RADIO_STATE_ON)); in ath12k_rfkill_state_change_event()
7879 spin_unlock_bh(&ab->base_lock); in ath12k_rfkill_state_change_event()
7881 queue_work(ab->workqueue, &ab->rfkill_work); in ath12k_rfkill_state_change_event()
7888 trace_ath12k_wmi_diag(ab, skb->data, skb->len); in ath12k_wmi_diag_event()
7913 le32_to_cpu(ev->pdev_id), in ath12k_wmi_twt_enable_event()
7914 le32_to_cpu(ev->status)); in ath12k_wmi_twt_enable_event()
7942 le32_to_cpu(ev->pdev_id), in ath12k_wmi_twt_disable_event()
7943 le32_to_cpu(ev->status)); in ath12k_wmi_twt_disable_event()
7961 arg->wake_reason = le32_to_cpu(param->wake_reason); in ath12k_wmi_wow_wakeup_host_parse()
7963 arg->wake_reason, wow_reason(arg->wake_reason)); in ath12k_wmi_wow_wakeup_host_parse()
7967 if (arg && arg->wake_reason == WOW_REASON_PAGE_FAULT) { in ath12k_wmi_wow_wakeup_host_parse()
7969 pf_len = le32_to_cpu(pf_param->len); in ath12k_wmi_wow_wakeup_host_parse()
7970 if (pf_len > len - sizeof(pf_len) || in ath12k_wmi_wow_wakeup_host_parse()
7974 return -EINVAL; in ath12k_wmi_wow_wakeup_host_parse()
7981 pf_param->data, in ath12k_wmi_wow_wakeup_host_parse()
7997 ret = ath12k_wmi_tlv_iter(ab, skb->data, skb->len, in ath12k_wmi_event_wow_wakeup_host()
8006 complete(&ab->wow.wakeup_completed); in ath12k_wmi_event_wow_wakeup_host()
8034 arvif = ath12k_mac_get_arvif_by_vdev_id(ab, le32_to_cpu(ev->vdev_id)); in ath12k_wmi_gtk_offload_status_event()
8038 le32_to_cpu(ev->vdev_id)); in ath12k_wmi_gtk_offload_status_event()
8043 replay_ctr = le64_to_cpu(ev->replay_ctr); in ath12k_wmi_gtk_offload_status_event()
8044 arvif->rekey_data.replay_ctr = replay_ctr; in ath12k_wmi_gtk_offload_status_event()
8046 le32_to_cpu(ev->refresh_cnt), replay_ctr); in ath12k_wmi_gtk_offload_status_event()
8048 /* supplicant expects big-endian replay counter */ in ath12k_wmi_gtk_offload_status_event()
8051 ieee80211_gtk_rekey_notify(arvif->ahvif->vif, arvif->bssid, in ath12k_wmi_gtk_offload_status_event()
8083 if (le32_to_cpu(ev->pdev_id) > ab->num_radios) in ath12k_wmi_event_mlo_setup_complete()
8086 for (i = 0; i < ab->num_radios; i++) { in ath12k_wmi_event_mlo_setup_complete()
8087 pdev = &ab->pdevs[i]; in ath12k_wmi_event_mlo_setup_complete()
8088 if (pdev && pdev->pdev_id == le32_to_cpu(ev->pdev_id)) { in ath12k_wmi_event_mlo_setup_complete()
8089 ar = pdev->ar; in ath12k_wmi_event_mlo_setup_complete()
8097 ev->pdev_id, ev->status); in ath12k_wmi_event_mlo_setup_complete()
8101 ar->mlo_setup_status = le32_to_cpu(ev->status); in ath12k_wmi_event_mlo_setup_complete()
8102 complete(&ar->mlo_setup_done); in ath12k_wmi_event_mlo_setup_complete()
8141 len1 = le32_to_cpu(tpc_stats->max_reg_allowed_power.tpc_reg_pwr.reg_array_len); in ath12k_wmi_tpc_stats_copy_buffer()
8142 len2 = le32_to_cpu(tpc_stats->rates_array1.tpc_rates_array.rate_array_len); in ath12k_wmi_tpc_stats_copy_buffer()
8143 len3 = le32_to_cpu(tpc_stats->rates_array2.tpc_rates_array.rate_array_len); in ath12k_wmi_tpc_stats_copy_buffer()
8144 len4 = le32_to_cpu(tpc_stats->ctl_array.tpc_ctl_pwr.ctl_array_len); in ath12k_wmi_tpc_stats_copy_buffer()
8146 switch (tpc_stats->event_count) { in ath12k_wmi_tpc_stats_copy_buffer()
8149 return -ENOBUFS; in ath12k_wmi_tpc_stats_copy_buffer()
8151 if (tpc_stats->tlvs_rcvd & WMI_TPC_REG_PWR_ALLOWED) { in ath12k_wmi_tpc_stats_copy_buffer()
8152 dst_ptr = tpc_stats->max_reg_allowed_power.reg_pwr_array; in ath12k_wmi_tpc_stats_copy_buffer()
8158 return -ENOBUFS; in ath12k_wmi_tpc_stats_copy_buffer()
8160 if (tpc_stats->tlvs_rcvd & WMI_TPC_RATES_ARRAY1) { in ath12k_wmi_tpc_stats_copy_buffer()
8161 dst_ptr = tpc_stats->rates_array1.rate_array; in ath12k_wmi_tpc_stats_copy_buffer()
8167 return -ENOBUFS; in ath12k_wmi_tpc_stats_copy_buffer()
8169 if (tpc_stats->tlvs_rcvd & WMI_TPC_RATES_ARRAY2) { in ath12k_wmi_tpc_stats_copy_buffer()
8170 dst_ptr = tpc_stats->rates_array2.rate_array; in ath12k_wmi_tpc_stats_copy_buffer()
8176 return -ENOBUFS; in ath12k_wmi_tpc_stats_copy_buffer()
8178 if (tpc_stats->tlvs_rcvd & WMI_TPC_CTL_PWR_ARRAY) { in ath12k_wmi_tpc_stats_copy_buffer()
8179 dst_ptr_ctl = tpc_stats->ctl_array.ctl_pwr_table; in ath12k_wmi_tpc_stats_copy_buffer()
8196 ev->reg_power_type, ev->reg_array_len); in ath12k_tpc_get_reg_pwr()
8198 switch (le32_to_cpu(ev->reg_power_type)) { in ath12k_tpc_get_reg_pwr()
8200 reg_pwr = &tpc_stats->max_reg_allowed_power; in ath12k_tpc_get_reg_pwr()
8203 return -EINVAL; in ath12k_tpc_get_reg_pwr()
8207 total_size = le32_to_cpu(ev->d1) * le32_to_cpu(ev->d2) * in ath12k_tpc_get_reg_pwr()
8208 le32_to_cpu(ev->d3) * le32_to_cpu(ev->d4) * 2; in ath12k_tpc_get_reg_pwr()
8209 if (le32_to_cpu(ev->reg_array_len) != total_size) { in ath12k_tpc_get_reg_pwr()
8212 return -EINVAL; in ath12k_tpc_get_reg_pwr()
8215 memcpy(&reg_pwr->tpc_reg_pwr, ev, sizeof(struct wmi_max_reg_power_fixed_params)); in ath12k_tpc_get_reg_pwr()
8217 reg_pwr->reg_pwr_array = kzalloc(le32_to_cpu(reg_pwr->tpc_reg_pwr.reg_array_len), in ath12k_tpc_get_reg_pwr()
8219 if (!reg_pwr->reg_pwr_array) in ath12k_tpc_get_reg_pwr()
8220 return -ENOMEM; in ath12k_tpc_get_reg_pwr()
8222 tpc_stats->tlvs_rcvd |= WMI_TPC_REG_PWR_ALLOWED; in ath12k_tpc_get_reg_pwr()
8236 ev->rate_array_type, ev->rate_array_len); in ath12k_tpc_get_rate_array()
8238 switch (le32_to_cpu(ev->rate_array_type)) { in ath12k_tpc_get_rate_array()
8240 rates_array = &tpc_stats->rates_array1; in ath12k_tpc_get_rate_array()
8244 rates_array = &tpc_stats->rates_array2; in ath12k_tpc_get_rate_array()
8250 return -EINVAL; in ath12k_tpc_get_rate_array()
8252 memcpy(&rates_array->tpc_rates_array, ev, in ath12k_tpc_get_rate_array()
8254 rate_array_len = le32_to_cpu(rates_array->tpc_rates_array.rate_array_len); in ath12k_tpc_get_rate_array()
8255 rates_array->rate_array = kzalloc(rate_array_len, GFP_ATOMIC); in ath12k_tpc_get_rate_array()
8256 if (!rates_array->rate_array) in ath12k_tpc_get_rate_array()
8257 return -ENOMEM; in ath12k_tpc_get_rate_array()
8259 tpc_stats->tlvs_rcvd |= flag; in ath12k_tpc_get_rate_array()
8272 ev->ctl_array_type, ev->ctl_array_len); in ath12k_tpc_get_ctl_pwr_tbl()
8274 switch (le32_to_cpu(ev->ctl_array_type)) { in ath12k_tpc_get_ctl_pwr_tbl()
8276 ctl_array = &tpc_stats->ctl_array; in ath12k_tpc_get_ctl_pwr_tbl()
8282 return -EINVAL; in ath12k_tpc_get_ctl_pwr_tbl()
8285 total_size = le32_to_cpu(ev->d1) * le32_to_cpu(ev->d2) * in ath12k_tpc_get_ctl_pwr_tbl()
8286 le32_to_cpu(ev->d3) * le32_to_cpu(ev->d4); in ath12k_tpc_get_ctl_pwr_tbl()
8287 if (le32_to_cpu(ev->ctl_array_len) != total_size) { in ath12k_tpc_get_ctl_pwr_tbl()
8290 return -EINVAL; in ath12k_tpc_get_ctl_pwr_tbl()
8293 memcpy(&ctl_array->tpc_ctl_pwr, ev, sizeof(struct wmi_tpc_ctl_pwr_fixed_params)); in ath12k_tpc_get_ctl_pwr_tbl()
8294 ctl_array_len = le32_to_cpu(ctl_array->tpc_ctl_pwr.ctl_array_len); in ath12k_tpc_get_ctl_pwr_tbl()
8295 ctl_array->ctl_pwr_table = kzalloc(ctl_array_len, GFP_ATOMIC); in ath12k_tpc_get_ctl_pwr_tbl()
8296 if (!ctl_array->ctl_pwr_table) in ath12k_tpc_get_ctl_pwr_tbl()
8297 return -ENOMEM; in ath12k_tpc_get_ctl_pwr_tbl()
8299 tpc_stats->tlvs_rcvd |= flag; in ath12k_tpc_get_ctl_pwr_tbl()
8316 return -EINVAL; in ath12k_wmi_tpc_stats_subtlv_parser()
8322 memcpy(&tpc_stats->tpc_config, tpc_config, in ath12k_wmi_tpc_stats_subtlv_parser()
8340 return -EINVAL; in ath12k_wmi_tpc_stats_subtlv_parser()
8383 ret = -EINVAL; in ath12k_wmi_tpc_stats_event_parser()
8391 struct wmi_tpc_stats_arg *tpc_stats = ar->debug.tpc_stats; in ath12k_wmi_free_tpc_stats_mem()
8393 lockdep_assert_held(&ar->data_lock); in ath12k_wmi_free_tpc_stats_mem()
8394 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, "tpc stats mem free\n"); in ath12k_wmi_free_tpc_stats_mem()
8396 kfree(tpc_stats->max_reg_allowed_power.reg_pwr_array); in ath12k_wmi_free_tpc_stats_mem()
8397 kfree(tpc_stats->rates_array1.rate_array); in ath12k_wmi_free_tpc_stats_mem()
8398 kfree(tpc_stats->rates_array2.rate_array); in ath12k_wmi_free_tpc_stats_mem()
8399 kfree(tpc_stats->ctl_array.ctl_pwr_table); in ath12k_wmi_free_tpc_stats_mem()
8401 ar->debug.tpc_stats = NULL; in ath12k_wmi_free_tpc_stats_mem()
8411 void *ptr = skb->data; in ath12k_wmi_process_tpc_stats()
8417 if (!skb->data) { in ath12k_wmi_process_tpc_stats()
8422 if (skb->len < (sizeof(*fixed_param) + TLV_HDR_SIZE)) { in ath12k_wmi_process_tpc_stats()
8428 tlv_tag = le32_get_bits(tlv->header, WMI_TLV_TAG); in ath12k_wmi_process_tpc_stats()
8438 ar = ath12k_mac_get_ar_by_pdev_id(ab, le32_to_cpu(fixed_param->pdev_id) + 1); in ath12k_wmi_process_tpc_stats()
8444 spin_lock_bh(&ar->data_lock); in ath12k_wmi_process_tpc_stats()
8445 if (!ar->debug.tpc_request) { in ath12k_wmi_process_tpc_stats()
8449 if (ar->debug.tpc_stats) { in ath12k_wmi_process_tpc_stats()
8456 event_count = le32_to_cpu(fixed_param->event_count); in ath12k_wmi_process_tpc_stats()
8458 if (ar->debug.tpc_stats) { in ath12k_wmi_process_tpc_stats()
8463 ar->debug.tpc_stats = in ath12k_wmi_process_tpc_stats()
8466 if (!ar->debug.tpc_stats) { in ath12k_wmi_process_tpc_stats()
8473 tpc_stats = ar->debug.tpc_stats; in ath12k_wmi_process_tpc_stats()
8480 if (event_count != tpc_stats->event_count + 1) { in ath12k_wmi_process_tpc_stats()
8486 tpc_stats->pdev_id = le32_to_cpu(fixed_param->pdev_id); in ath12k_wmi_process_tpc_stats()
8487 tpc_stats->end_of_event = le32_to_cpu(fixed_param->end_of_event); in ath12k_wmi_process_tpc_stats()
8488 tpc_stats->event_count = le32_to_cpu(fixed_param->event_count); in ath12k_wmi_process_tpc_stats()
8491 tpc_stats->event_count); in ath12k_wmi_process_tpc_stats()
8492 ret = ath12k_wmi_tlv_iter(ab, skb->data, skb->len, in ath12k_wmi_process_tpc_stats()
8501 if (tpc_stats->end_of_event) in ath12k_wmi_process_tpc_stats()
8502 complete(&ar->debug.tpc_complete); in ath12k_wmi_process_tpc_stats()
8505 spin_unlock_bh(&ar->data_lock); in ath12k_wmi_process_tpc_stats()
8520 cmd_hdr = (struct wmi_cmd_hdr *)skb->data; in ath12k_wmi_op_rx()
8521 id = le32_get_bits(cmd_hdr->cmd_id, WMI_CMD_HDR_CMD_ID); in ath12k_wmi_op_rx()
8654 /* debug might flood hence silently ignore (no-op) */ in ath12k_wmi_op_rx()
8657 if (test_bit(ATH12K_FLAG_FTM_SEGMENTED, &ab->dev_flags)) in ath12k_wmi_op_rx()
8691 status = ath12k_htc_connect_service(&ab->htc, &conn_req, &conn_resp); in ath12k_connect_pdev_htc_service()
8698 ab->wmi_ab.wmi_endpoint_id[pdev_idx] = conn_resp.eid; in ath12k_connect_pdev_htc_service()
8699 ab->wmi_ab.wmi[pdev_idx].eid = conn_resp.eid; in ath12k_connect_pdev_htc_service()
8700 ab->wmi_ab.max_msg_len[pdev_idx] = conn_resp.max_msg_len; in ath12k_connect_pdev_htc_service()
8710 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_send_unit_test_cmd()
8723 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, buf_len); in ath12k_wmi_send_unit_test_cmd()
8725 return -ENOMEM; in ath12k_wmi_send_unit_test_cmd()
8727 cmd = (struct wmi_unit_test_cmd *)skb->data; in ath12k_wmi_send_unit_test_cmd()
8728 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_UNIT_TEST_CMD, in ath12k_wmi_send_unit_test_cmd()
8731 cmd->vdev_id = ut_cmd.vdev_id; in ath12k_wmi_send_unit_test_cmd()
8732 cmd->module_id = ut_cmd.module_id; in ath12k_wmi_send_unit_test_cmd()
8733 cmd->num_args = ut_cmd.num_args; in ath12k_wmi_send_unit_test_cmd()
8734 cmd->diag_token = ut_cmd.diag_token; in ath12k_wmi_send_unit_test_cmd()
8736 ptr = skb->data + sizeof(ut_cmd); in ath12k_wmi_send_unit_test_cmd()
8739 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_UINT32, arg_len); in ath12k_wmi_send_unit_test_cmd()
8747 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_send_unit_test_cmd()
8749 cmd->module_id, cmd->vdev_id, cmd->num_args, in ath12k_wmi_send_unit_test_cmd()
8750 cmd->diag_token); in ath12k_wmi_send_unit_test_cmd()
8755 ath12k_warn(ar->ab, "failed to send WMI_UNIT_TEST CMD :%d\n", in ath12k_wmi_send_unit_test_cmd()
8770 list_for_each_entry(arvif, &ar->arvifs, list) { in ath12k_wmi_simulate_radar()
8771 if (arvif->is_started && arvif->ahvif->vdev_type == WMI_VDEV_TYPE_AP) { in ath12k_wmi_simulate_radar()
8778 return -EINVAL; in ath12k_wmi_simulate_radar()
8781 dfs_args[DFS_TEST_PDEV_ID] = ar->pdev->pdev_id; in ath12k_wmi_simulate_radar()
8782 /* Currently we could pass segment_id(b0 - b1), chirp(b2) in ath12k_wmi_simulate_radar()
8783 * freq offset (b3 - b10) to unit test. For simulation in ath12k_wmi_simulate_radar()
8788 wmi_ut.vdev_id = cpu_to_le32(arvif->vdev_id); in ath12k_wmi_simulate_radar()
8793 ath12k_dbg(ar->ab, ATH12K_DBG_REG, "Triggering Radar Simulation\n"); in ath12k_wmi_simulate_radar()
8802 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_send_tpc_stats_request()
8812 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, buf_len); in ath12k_wmi_send_tpc_stats_request()
8814 return -ENOMEM; in ath12k_wmi_send_tpc_stats_request()
8815 cmd = (struct wmi_request_halphy_ctrl_path_stats_cmd_fixed_params *)skb->data; in ath12k_wmi_send_tpc_stats_request()
8816 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_HALPHY_CTRL_PATH_CMD_FIXED_PARAM, in ath12k_wmi_send_tpc_stats_request()
8819 cmd->stats_id_mask = cpu_to_le32(WMI_REQ_CTRL_PATH_PDEV_TX_STAT); in ath12k_wmi_send_tpc_stats_request()
8820 cmd->action = cpu_to_le32(WMI_REQUEST_CTRL_PATH_STAT_GET); in ath12k_wmi_send_tpc_stats_request()
8821 cmd->subid = cpu_to_le32(tpc_stats_type); in ath12k_wmi_send_tpc_stats_request()
8823 ptr = skb->data + sizeof(*cmd); in ath12k_wmi_send_tpc_stats_request()
8827 * If this array is present and non-zero length, stats should only in ath12k_wmi_send_tpc_stats_request()
8830 * If this array is present and non-zero length, stats should only in ath12k_wmi_send_tpc_stats_request()
8833 * If this array is present and non-zero length, stats should only in ath12k_wmi_send_tpc_stats_request()
8838 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_UINT32, sizeof(u32)); in ath12k_wmi_send_tpc_stats_request()
8846 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_UINT32, 0); in ath12k_wmi_send_tpc_stats_request()
8850 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_FIXED_STRUCT, 0); in ath12k_wmi_send_tpc_stats_request()
8855 ath12k_warn(ar->ab, in ath12k_wmi_send_tpc_stats_request()
8860 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, "WMI get TPC STATS sent on pdev %d\n", in ath12k_wmi_send_tpc_stats_request()
8861 ar->pdev->pdev_id); in ath12k_wmi_send_tpc_stats_request()
8871 wmi_ep_count = ab->htc.wmi_ep_count; in ath12k_wmi_connect()
8872 if (wmi_ep_count > ab->hw_params->max_radios) in ath12k_wmi_connect()
8873 return -1; in ath12k_wmi_connect()
8894 if (pdev_id >= ab->hw_params->max_radios) in ath12k_wmi_pdev_attach()
8895 return -EINVAL; in ath12k_wmi_pdev_attach()
8897 wmi_handle = &ab->wmi_ab.wmi[pdev_id]; in ath12k_wmi_pdev_attach()
8899 wmi_handle->wmi_ab = &ab->wmi_ab; in ath12k_wmi_pdev_attach()
8901 ab->wmi_ab.ab = ab; in ath12k_wmi_pdev_attach()
8915 ab->wmi_ab.ab = ab; in ath12k_wmi_attach()
8916 ab->wmi_ab.preferred_hw_mode = WMI_HOST_HW_MODE_MAX; in ath12k_wmi_attach()
8919 if (ab->hw_params->single_pdev_only) in ath12k_wmi_attach()
8920 ab->wmi_ab.preferred_hw_mode = WMI_HOST_HW_MODE_SINGLE; in ath12k_wmi_attach()
8923 init_completion(&ab->wmi_ab.service_ready); in ath12k_wmi_attach()
8924 init_completion(&ab->wmi_ab.unified_ready); in ath12k_wmi_attach()
8935 for (i = 0; i < ab->htc.wmi_ep_count; i++) in ath12k_wmi_detach()
8948 skb = ath12k_wmi_alloc_skb(ar->wmi->wmi_ab, len); in ath12k_wmi_hw_data_filter_cmd()
8951 return -ENOMEM; in ath12k_wmi_hw_data_filter_cmd()
8953 cmd = (struct wmi_hw_data_filter_cmd *)skb->data; in ath12k_wmi_hw_data_filter_cmd()
8954 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_HW_DATA_FILTER_CMD, in ath12k_wmi_hw_data_filter_cmd()
8956 cmd->vdev_id = cpu_to_le32(arg->vdev_id); in ath12k_wmi_hw_data_filter_cmd()
8957 cmd->enable = cpu_to_le32(arg->enable ? 1 : 0); in ath12k_wmi_hw_data_filter_cmd()
8960 if (arg->enable) in ath12k_wmi_hw_data_filter_cmd()
8961 cmd->hw_filter_bitmap = cpu_to_le32(arg->hw_filter_bitmap); in ath12k_wmi_hw_data_filter_cmd()
8963 cmd->hw_filter_bitmap = cpu_to_le32((u32)~0U); in ath12k_wmi_hw_data_filter_cmd()
8965 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_hw_data_filter_cmd()
8967 arg->enable, arg->hw_filter_bitmap); in ath12k_wmi_hw_data_filter_cmd()
8969 return ath12k_wmi_cmd_send(ar->wmi, skb, WMI_HW_DATA_FILTER_CMDID); in ath12k_wmi_hw_data_filter_cmd()
8979 skb = ath12k_wmi_alloc_skb(ar->wmi->wmi_ab, len); in ath12k_wmi_wow_host_wakeup_ind()
8981 return -ENOMEM; in ath12k_wmi_wow_host_wakeup_ind()
8983 cmd = (struct wmi_wow_host_wakeup_cmd *)skb->data; in ath12k_wmi_wow_host_wakeup_ind()
8984 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_WOW_HOSTWAKEUP_FROM_SLEEP_CMD, in ath12k_wmi_wow_host_wakeup_ind()
8987 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, "wmi tlv wow host wakeup ind\n"); in ath12k_wmi_wow_host_wakeup_ind()
8989 return ath12k_wmi_cmd_send(ar->wmi, skb, WMI_WOW_HOSTWAKEUP_FROM_SLEEP_CMDID); in ath12k_wmi_wow_host_wakeup_ind()
8999 skb = ath12k_wmi_alloc_skb(ar->wmi->wmi_ab, len); in ath12k_wmi_wow_enable()
9001 return -ENOMEM; in ath12k_wmi_wow_enable()
9003 cmd = (struct wmi_wow_enable_cmd *)skb->data; in ath12k_wmi_wow_enable()
9004 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_WOW_ENABLE_CMD, in ath12k_wmi_wow_enable()
9007 cmd->enable = cpu_to_le32(1); in ath12k_wmi_wow_enable()
9008 cmd->pause_iface_config = cpu_to_le32(WOW_IFACE_PAUSE_ENABLED); in ath12k_wmi_wow_enable()
9009 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, "wmi tlv wow enable\n"); in ath12k_wmi_wow_enable()
9011 return ath12k_wmi_cmd_send(ar->wmi, skb, WMI_WOW_ENABLE_CMDID); in ath12k_wmi_wow_enable()
9023 skb = ath12k_wmi_alloc_skb(ar->wmi->wmi_ab, len); in ath12k_wmi_wow_add_wakeup_event()
9025 return -ENOMEM; in ath12k_wmi_wow_add_wakeup_event()
9027 cmd = (struct wmi_wow_add_del_event_cmd *)skb->data; in ath12k_wmi_wow_add_wakeup_event()
9028 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_WOW_ADD_DEL_EVT_CMD, in ath12k_wmi_wow_add_wakeup_event()
9030 cmd->vdev_id = cpu_to_le32(vdev_id); in ath12k_wmi_wow_add_wakeup_event()
9031 cmd->is_add = cpu_to_le32(enable); in ath12k_wmi_wow_add_wakeup_event()
9032 cmd->event_bitmap = cpu_to_le32((1 << event)); in ath12k_wmi_wow_add_wakeup_event()
9034 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, "wmi tlv wow add wakeup event %s enable %d vdev_id %d\n", in ath12k_wmi_wow_add_wakeup_event()
9037 return ath12k_wmi_cmd_send(ar->wmi, skb, WMI_WOW_ENABLE_DISABLE_WAKE_EVENT_CMDID); in ath12k_wmi_wow_add_wakeup_event()
9060 skb = ath12k_wmi_alloc_skb(ar->wmi->wmi_ab, len); in ath12k_wmi_wow_add_pattern()
9062 return -ENOMEM; in ath12k_wmi_wow_add_pattern()
9065 ptr = skb->data; in ath12k_wmi_wow_add_pattern()
9067 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_WOW_ADD_PATTERN_CMD, in ath12k_wmi_wow_add_pattern()
9069 cmd->vdev_id = cpu_to_le32(vdev_id); in ath12k_wmi_wow_add_pattern()
9070 cmd->pattern_id = cpu_to_le32(pattern_id); in ath12k_wmi_wow_add_pattern()
9071 cmd->pattern_type = cpu_to_le32(WOW_BITMAP_PATTERN); in ath12k_wmi_wow_add_pattern()
9077 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_STRUCT, sizeof(*bitmap)); in ath12k_wmi_wow_add_pattern()
9082 bitmap->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_WOW_BITMAP_PATTERN_T, in ath12k_wmi_wow_add_pattern()
9084 memcpy(bitmap->patternbuf, pattern, pattern_len); in ath12k_wmi_wow_add_pattern()
9085 memcpy(bitmap->bitmaskbuf, mask, pattern_len); in ath12k_wmi_wow_add_pattern()
9086 bitmap->pattern_offset = cpu_to_le32(pattern_offset); in ath12k_wmi_wow_add_pattern()
9087 bitmap->pattern_len = cpu_to_le32(pattern_len); in ath12k_wmi_wow_add_pattern()
9088 bitmap->bitmask_len = cpu_to_le32(pattern_len); in ath12k_wmi_wow_add_pattern()
9089 bitmap->pattern_id = cpu_to_le32(pattern_id); in ath12k_wmi_wow_add_pattern()
9095 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_STRUCT, 0); in ath12k_wmi_wow_add_pattern()
9101 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_STRUCT, 0); in ath12k_wmi_wow_add_pattern()
9107 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_STRUCT, 0); in ath12k_wmi_wow_add_pattern()
9113 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_UINT32, 0); in ath12k_wmi_wow_add_pattern()
9119 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_UINT32, sizeof(u32)); in ath12k_wmi_wow_add_pattern()
9121 …ath12k_dbg(ar->ab, ATH12K_DBG_WMI, "wmi tlv wow add pattern vdev_id %d pattern_id %d pattern_offse… in ath12k_wmi_wow_add_pattern()
9124 ath12k_dbg_dump(ar->ab, ATH12K_DBG_WMI, NULL, "wow pattern: ", in ath12k_wmi_wow_add_pattern()
9125 bitmap->patternbuf, pattern_len); in ath12k_wmi_wow_add_pattern()
9126 ath12k_dbg_dump(ar->ab, ATH12K_DBG_WMI, NULL, "wow bitmask: ", in ath12k_wmi_wow_add_pattern()
9127 bitmap->bitmaskbuf, pattern_len); in ath12k_wmi_wow_add_pattern()
9129 return ath12k_wmi_cmd_send(ar->wmi, skb, WMI_WOW_ADD_WAKE_PATTERN_CMDID); in ath12k_wmi_wow_add_pattern()
9139 skb = ath12k_wmi_alloc_skb(ar->wmi->wmi_ab, len); in ath12k_wmi_wow_del_pattern()
9141 return -ENOMEM; in ath12k_wmi_wow_del_pattern()
9143 cmd = (struct wmi_wow_del_pattern_cmd *)skb->data; in ath12k_wmi_wow_del_pattern()
9144 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_WOW_DEL_PATTERN_CMD, in ath12k_wmi_wow_del_pattern()
9146 cmd->vdev_id = cpu_to_le32(vdev_id); in ath12k_wmi_wow_del_pattern()
9147 cmd->pattern_id = cpu_to_le32(pattern_id); in ath12k_wmi_wow_del_pattern()
9148 cmd->pattern_type = cpu_to_le32(WOW_BITMAP_PATTERN); in ath12k_wmi_wow_del_pattern()
9150 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, "wmi tlv wow del pattern vdev_id %d pattern_id %d\n", in ath12k_wmi_wow_del_pattern()
9153 return ath12k_wmi_cmd_send(ar->wmi, skb, WMI_WOW_DEL_WAKE_PATTERN_CMDID); in ath12k_wmi_wow_del_pattern()
9177 channel_list_len = sizeof(u32) * pno->a_networks[0].channel_count; in ath12k_wmi_op_gen_config_pno_start()
9180 nlo_list_len = sizeof(*nlo_list) * pno->uc_networks_count; in ath12k_wmi_op_gen_config_pno_start()
9183 skb = ath12k_wmi_alloc_skb(ar->wmi->wmi_ab, len); in ath12k_wmi_op_gen_config_pno_start()
9185 return ERR_PTR(-ENOMEM); in ath12k_wmi_op_gen_config_pno_start()
9187 ptr = skb->data; in ath12k_wmi_op_gen_config_pno_start()
9189 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_NLO_CONFIG_CMD, sizeof(*cmd)); in ath12k_wmi_op_gen_config_pno_start()
9191 cmd->vdev_id = cpu_to_le32(pno->vdev_id); in ath12k_wmi_op_gen_config_pno_start()
9192 cmd->flags = cpu_to_le32(WMI_NLO_CONFIG_START | WMI_NLO_CONFIG_SSID_HIDE_EN); in ath12k_wmi_op_gen_config_pno_start()
9194 /* current FW does not support min-max range for dwell time */ in ath12k_wmi_op_gen_config_pno_start()
9195 cmd->active_dwell_time = cpu_to_le32(pno->active_max_time); in ath12k_wmi_op_gen_config_pno_start()
9196 cmd->passive_dwell_time = cpu_to_le32(pno->passive_max_time); in ath12k_wmi_op_gen_config_pno_start()
9198 if (pno->do_passive_scan) in ath12k_wmi_op_gen_config_pno_start()
9199 cmd->flags |= cpu_to_le32(WMI_NLO_CONFIG_SCAN_PASSIVE); in ath12k_wmi_op_gen_config_pno_start()
9201 cmd->fast_scan_period = cpu_to_le32(pno->fast_scan_period); in ath12k_wmi_op_gen_config_pno_start()
9202 cmd->slow_scan_period = cpu_to_le32(pno->slow_scan_period); in ath12k_wmi_op_gen_config_pno_start()
9203 cmd->fast_scan_max_cycles = cpu_to_le32(pno->fast_scan_max_cycles); in ath12k_wmi_op_gen_config_pno_start()
9204 cmd->delay_start_time = cpu_to_le32(pno->delay_start_time); in ath12k_wmi_op_gen_config_pno_start()
9206 if (pno->enable_pno_scan_randomization) { in ath12k_wmi_op_gen_config_pno_start()
9207 cmd->flags |= cpu_to_le32(WMI_NLO_CONFIG_SPOOFED_MAC_IN_PROBE_REQ | in ath12k_wmi_op_gen_config_pno_start()
9209 ether_addr_copy(cmd->mac_addr.addr, pno->mac_addr); in ath12k_wmi_op_gen_config_pno_start()
9210 ether_addr_copy(cmd->mac_mask.addr, pno->mac_addr_mask); in ath12k_wmi_op_gen_config_pno_start()
9216 cmd->no_of_ssids = cpu_to_le32(pno->uc_networks_count); in ath12k_wmi_op_gen_config_pno_start()
9218 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_STRUCT, nlo_list_len); in ath12k_wmi_op_gen_config_pno_start()
9222 for (i = 0; i < pno->uc_networks_count; i++) { in ath12k_wmi_op_gen_config_pno_start()
9224 tlv->header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_ARRAY_BYTE, in ath12k_wmi_op_gen_config_pno_start()
9229 cpu_to_le32(pno->a_networks[i].ssid.ssid_len); in ath12k_wmi_op_gen_config_pno_start()
9231 pno->a_networks[i].ssid.ssid, in ath12k_wmi_op_gen_config_pno_start()
9234 if (pno->a_networks[i].rssi_threshold && in ath12k_wmi_op_gen_config_pno_start()
9235 pno->a_networks[i].rssi_threshold > -300) { in ath12k_wmi_op_gen_config_pno_start()
9238 cpu_to_le32(pno->a_networks[i].rssi_threshold); in ath12k_wmi_op_gen_config_pno_start()
9243 cpu_to_le32(pno->a_networks[i].bcast_nw_type); in ath12k_wmi_op_gen_config_pno_start()
9247 cmd->num_of_channels = cpu_to_le32(pno->a_networks[0].channel_count); in ath12k_wmi_op_gen_config_pno_start()
9249 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_UINT32, channel_list_len); in ath12k_wmi_op_gen_config_pno_start()
9253 for (i = 0; i < pno->a_networks[0].channel_count; i++) in ath12k_wmi_op_gen_config_pno_start()
9254 channel_list[i] = cpu_to_le32(pno->a_networks[0].channels[i]); in ath12k_wmi_op_gen_config_pno_start()
9256 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, "wmi tlv start pno config vdev_id %d\n", in ath12k_wmi_op_gen_config_pno_start()
9270 skb = ath12k_wmi_alloc_skb(ar->wmi->wmi_ab, len); in ath12k_wmi_op_gen_config_pno_stop()
9272 return ERR_PTR(-ENOMEM); in ath12k_wmi_op_gen_config_pno_stop()
9274 cmd = (struct wmi_wow_nlo_config_cmd *)skb->data; in ath12k_wmi_op_gen_config_pno_stop()
9275 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_NLO_CONFIG_CMD, len); in ath12k_wmi_op_gen_config_pno_stop()
9277 cmd->vdev_id = cpu_to_le32(vdev_id); in ath12k_wmi_op_gen_config_pno_stop()
9278 cmd->flags = cpu_to_le32(WMI_NLO_CONFIG_STOP); in ath12k_wmi_op_gen_config_pno_stop()
9280 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_op_gen_config_pno_stop()
9290 if (pno_scan->enable) in ath12k_wmi_wow_config_pno()
9296 return -ENOMEM; in ath12k_wmi_wow_config_pno()
9298 return ath12k_wmi_cmd_send(ar->wmi, skb, WMI_NETWORK_LIST_OFFLOAD_CONFIG_CMDID); in ath12k_wmi_wow_config_pno()
9313 ns_cnt = offload->ipv6_count; in ath12k_wmi_fill_ns_offload()
9318 ns_ext_tuples = offload->ipv6_count - WMI_MAX_NS_OFFLOADS; in ath12k_wmi_fill_ns_offload()
9319 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_STRUCT, in ath12k_wmi_fill_ns_offload()
9322 max_offloads = offload->ipv6_count; in ath12k_wmi_fill_ns_offload()
9324 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_STRUCT, in ath12k_wmi_fill_ns_offload()
9334 ns->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_NS_OFFLOAD_TUPLE, in ath12k_wmi_fill_ns_offload()
9339 ns->flags |= cpu_to_le32(WMI_NSOL_FLAGS_VALID); in ath12k_wmi_fill_ns_offload()
9341 memcpy(ns->target_ipaddr[0], offload->ipv6_addr[i], 16); in ath12k_wmi_fill_ns_offload()
9342 memcpy(ns->solicitation_ipaddr, offload->self_ipv6_addr[i], 16); in ath12k_wmi_fill_ns_offload()
9344 if (offload->ipv6_type[i]) in ath12k_wmi_fill_ns_offload()
9345 ns->flags |= cpu_to_le32(WMI_NSOL_FLAGS_IS_IPV6_ANYCAST); in ath12k_wmi_fill_ns_offload()
9347 memcpy(ns->target_mac.addr, offload->mac_addr, ETH_ALEN); in ath12k_wmi_fill_ns_offload()
9349 if (!is_zero_ether_addr(ns->target_mac.addr)) in ath12k_wmi_fill_ns_offload()
9350 ns->flags |= cpu_to_le32(WMI_NSOL_FLAGS_MAC_VALID); in ath12k_wmi_fill_ns_offload()
9352 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_fill_ns_offload()
9354 i, ns->solicitation_ipaddr, in ath12k_wmi_fill_ns_offload()
9355 ns->target_ipaddr[0]); in ath12k_wmi_fill_ns_offload()
9376 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_STRUCT, in ath12k_wmi_fill_arp_offload()
9382 arp->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_ARP_OFFLOAD_TUPLE, in ath12k_wmi_fill_arp_offload()
9385 if (enable && i < offload->ipv4_count) { in ath12k_wmi_fill_arp_offload()
9387 arp->flags = cpu_to_le32(WMI_ARPOL_FLAGS_VALID); in ath12k_wmi_fill_arp_offload()
9388 memcpy(arp->target_ipaddr, offload->ipv4_addr[i], 4); in ath12k_wmi_fill_arp_offload()
9390 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, "wmi arp offload address %pI4", in ath12k_wmi_fill_arp_offload()
9391 arp->target_ipaddr); in ath12k_wmi_fill_arp_offload()
9412 ns_cnt = offload->ipv6_count; in ath12k_wmi_arp_ns_offload()
9421 ns_ext_tuples = ns_cnt - WMI_MAX_NS_OFFLOADS; in ath12k_wmi_arp_ns_offload()
9426 skb = ath12k_wmi_alloc_skb(ar->wmi->wmi_ab, len); in ath12k_wmi_arp_ns_offload()
9428 return -ENOMEM; in ath12k_wmi_arp_ns_offload()
9430 buf_ptr = skb->data; in ath12k_wmi_arp_ns_offload()
9432 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_SET_ARP_NS_OFFLOAD_CMD, in ath12k_wmi_arp_ns_offload()
9434 cmd->flags = cpu_to_le32(0); in ath12k_wmi_arp_ns_offload()
9435 cmd->vdev_id = cpu_to_le32(arvif->vdev_id); in ath12k_wmi_arp_ns_offload()
9436 cmd->num_ns_ext_tuples = cpu_to_le32(ns_ext_tuples); in ath12k_wmi_arp_ns_offload()
9446 return ath12k_wmi_cmd_send(ar->wmi, skb, WMI_SET_ARP_NS_OFFLOAD_CMDID); in ath12k_wmi_arp_ns_offload()
9452 struct ath12k_rekey_data *rekey_data = &arvif->rekey_data; in ath12k_wmi_gtk_rekey_offload()
9459 skb = ath12k_wmi_alloc_skb(ar->wmi->wmi_ab, len); in ath12k_wmi_gtk_rekey_offload()
9461 return -ENOMEM; in ath12k_wmi_gtk_rekey_offload()
9463 cmd = (struct wmi_gtk_rekey_offload_cmd *)skb->data; in ath12k_wmi_gtk_rekey_offload()
9464 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_GTK_OFFLOAD_CMD, sizeof(*cmd)); in ath12k_wmi_gtk_rekey_offload()
9465 cmd->vdev_id = cpu_to_le32(arvif->vdev_id); in ath12k_wmi_gtk_rekey_offload()
9468 cmd->flags = cpu_to_le32(GTK_OFFLOAD_ENABLE_OPCODE); in ath12k_wmi_gtk_rekey_offload()
9471 memcpy(cmd->kck, rekey_data->kck, sizeof(cmd->kck)); in ath12k_wmi_gtk_rekey_offload()
9472 memcpy(cmd->kek, rekey_data->kek, sizeof(cmd->kek)); in ath12k_wmi_gtk_rekey_offload()
9474 replay_ctr = cpu_to_le64(rekey_data->replay_ctr); in ath12k_wmi_gtk_rekey_offload()
9475 memcpy(cmd->replay_ctr, &replay_ctr, in ath12k_wmi_gtk_rekey_offload()
9478 cmd->flags = cpu_to_le32(GTK_OFFLOAD_DISABLE_OPCODE); in ath12k_wmi_gtk_rekey_offload()
9481 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, "offload gtk rekey vdev: %d %d\n", in ath12k_wmi_gtk_rekey_offload()
9482 arvif->vdev_id, enable); in ath12k_wmi_gtk_rekey_offload()
9483 return ath12k_wmi_cmd_send(ar->wmi, skb, WMI_GTK_OFFLOAD_CMDID); in ath12k_wmi_gtk_rekey_offload()
9494 skb = ath12k_wmi_alloc_skb(ar->wmi->wmi_ab, len); in ath12k_wmi_gtk_rekey_getinfo()
9496 return -ENOMEM; in ath12k_wmi_gtk_rekey_getinfo()
9498 cmd = (struct wmi_gtk_rekey_offload_cmd *)skb->data; in ath12k_wmi_gtk_rekey_getinfo()
9499 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_GTK_OFFLOAD_CMD, sizeof(*cmd)); in ath12k_wmi_gtk_rekey_getinfo()
9500 cmd->vdev_id = cpu_to_le32(arvif->vdev_id); in ath12k_wmi_gtk_rekey_getinfo()
9501 cmd->flags = cpu_to_le32(GTK_OFFLOAD_REQUEST_STATUS_OPCODE); in ath12k_wmi_gtk_rekey_getinfo()
9503 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, "get gtk rekey vdev_id: %d\n", in ath12k_wmi_gtk_rekey_getinfo()
9504 arvif->vdev_id); in ath12k_wmi_gtk_rekey_getinfo()
9505 return ath12k_wmi_cmd_send(ar->wmi, skb, WMI_GTK_OFFLOAD_CMDID); in ath12k_wmi_gtk_rekey_getinfo()
9512 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_sta_keepalive()
9518 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, len); in ath12k_wmi_sta_keepalive()
9520 return -ENOMEM; in ath12k_wmi_sta_keepalive()
9522 cmd = (struct wmi_sta_keepalive_cmd *)skb->data; in ath12k_wmi_sta_keepalive()
9523 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_STA_KEEPALIVE_CMD, sizeof(*cmd)); in ath12k_wmi_sta_keepalive()
9524 cmd->vdev_id = cpu_to_le32(arg->vdev_id); in ath12k_wmi_sta_keepalive()
9525 cmd->enabled = cpu_to_le32(arg->enabled); in ath12k_wmi_sta_keepalive()
9526 cmd->interval = cpu_to_le32(arg->interval); in ath12k_wmi_sta_keepalive()
9527 cmd->method = cpu_to_le32(arg->method); in ath12k_wmi_sta_keepalive()
9530 arp->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_STA_KEEPALVE_ARP_RESPONSE, in ath12k_wmi_sta_keepalive()
9532 if (arg->method == WMI_STA_KEEPALIVE_METHOD_UNSOLICITED_ARP_RESPONSE || in ath12k_wmi_sta_keepalive()
9533 arg->method == WMI_STA_KEEPALIVE_METHOD_GRATUITOUS_ARP_REQUEST) { in ath12k_wmi_sta_keepalive()
9534 arp->src_ip4_addr = cpu_to_le32(arg->src_ip4_addr); in ath12k_wmi_sta_keepalive()
9535 arp->dest_ip4_addr = cpu_to_le32(arg->dest_ip4_addr); in ath12k_wmi_sta_keepalive()
9536 ether_addr_copy(arp->dest_mac_addr.addr, arg->dest_mac_addr); in ath12k_wmi_sta_keepalive()
9539 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, in ath12k_wmi_sta_keepalive()
9541 arg->vdev_id, arg->enabled, arg->method, arg->interval); in ath12k_wmi_sta_keepalive()
9549 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_mlo_setup()
9556 num_links = mlo_params->num_partner_links; in ath12k_wmi_mlo_setup()
9560 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, buf_len); in ath12k_wmi_mlo_setup()
9562 return -ENOMEM; in ath12k_wmi_mlo_setup()
9564 cmd = (struct wmi_mlo_setup_cmd *)skb->data; in ath12k_wmi_mlo_setup()
9565 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_MLO_SETUP_CMD, in ath12k_wmi_mlo_setup()
9567 cmd->mld_group_id = mlo_params->group_id; in ath12k_wmi_mlo_setup()
9568 cmd->pdev_id = cpu_to_le32(ar->pdev->pdev_id); in ath12k_wmi_mlo_setup()
9569 ptr = skb->data + sizeof(*cmd); in ath12k_wmi_mlo_setup()
9572 tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_UINT32, arg_len); in ath12k_wmi_mlo_setup()
9577 partner_links[i] = mlo_params->partner_link_id[i]; in ath12k_wmi_mlo_setup()
9581 ath12k_warn(ar->ab, "failed to submit WMI_MLO_SETUP_CMDID command: %d\n", in ath12k_wmi_mlo_setup()
9593 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_mlo_ready()
9598 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, len); in ath12k_wmi_mlo_ready()
9600 return -ENOMEM; in ath12k_wmi_mlo_ready()
9602 cmd = (struct wmi_mlo_ready_cmd *)skb->data; in ath12k_wmi_mlo_ready()
9603 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_MLO_READY_CMD, in ath12k_wmi_mlo_ready()
9605 cmd->pdev_id = cpu_to_le32(ar->pdev->pdev_id); in ath12k_wmi_mlo_ready()
9609 ath12k_warn(ar->ab, "failed to submit WMI_MLO_READY_CMDID command: %d\n", in ath12k_wmi_mlo_ready()
9621 struct ath12k_wmi_pdev *wmi = ar->wmi; in ath12k_wmi_mlo_teardown()
9626 skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, len); in ath12k_wmi_mlo_teardown()
9628 return -ENOMEM; in ath12k_wmi_mlo_teardown()
9630 cmd = (struct wmi_mlo_teardown_cmd *)skb->data; in ath12k_wmi_mlo_teardown()
9631 cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_MLO_TEARDOWN_CMD, in ath12k_wmi_mlo_teardown()
9633 cmd->pdev_id = cpu_to_le32(ar->pdev->pdev_id); in ath12k_wmi_mlo_teardown()
9634 cmd->reason_code = WMI_MLO_TEARDOWN_SSR_REASON; in ath12k_wmi_mlo_teardown()
9638 ath12k_warn(ar->ab, "failed to submit WMI MLO teardown command: %d\n", in ath12k_wmi_mlo_teardown()