Lines Matching refs:wmi
27 static int ath6kl_wmi_sync_point(struct wmi *wmi, u8 if_idx);
123 void ath6kl_wmi_set_control_ep(struct wmi *wmi, enum htc_endpoint_id ep_id)
128 wmi->ep_id = ep_id;
131 enum htc_endpoint_id ath6kl_wmi_get_control_ep(struct wmi *wmi)
133 return wmi->ep_id;
160 int ath6kl_wmi_dix_2_dot3(struct wmi *wmi, struct sk_buff *skb)
206 static int ath6kl_wmi_meta_add(struct wmi *wmi, struct sk_buff *skb,
234 int ath6kl_wmi_data_hdr_add(struct wmi *wmi, struct sk_buff *skb,
242 if (WARN_ON(skb == NULL || (if_idx > wmi->parent_dev->vif_max - 1)))
246 ret = ath6kl_wmi_meta_add(wmi, skb, &meta_ver, tx_meta_info);
298 int ath6kl_wmi_implicit_create_pstream(struct wmi *wmi, u8 if_idx,
356 * FIXME: wmi->traffic_class is always 100 so this test doesn't
359 if ((wmi->traffic_class == WMM_AC_VI) &&
368 spin_lock_bh(&wmi->lock);
369 stream_exist = wmi->fat_pipe_exist;
370 spin_unlock_bh(&wmi->lock);
380 ath6kl_wmi_create_pstream_cmd(wmi, if_idx, &cmd);
388 int ath6kl_wmi_dot11_hdr_remove(struct wmi *wmi, struct sk_buff *skb)
503 static int ath6kl_wmi_remain_on_chnl_event_rx(struct wmi *wmi, u8 *datap,
510 struct ath6kl *ar = wmi->parent_dev;
535 static int ath6kl_wmi_cancel_remain_on_chnl_event_rx(struct wmi *wmi,
543 struct ath6kl *ar = wmi->parent_dev;
573 static int ath6kl_wmi_tx_status_event_rx(struct wmi *wmi, u8 *datap, int len,
586 if (wmi->last_mgmt_tx_frame) {
588 wmi->last_mgmt_tx_frame,
589 wmi->last_mgmt_tx_frame_len,
591 kfree(wmi->last_mgmt_tx_frame);
592 wmi->last_mgmt_tx_frame = NULL;
593 wmi->last_mgmt_tx_frame_len = 0;
599 static int ath6kl_wmi_rx_probe_req_event_rx(struct wmi *wmi, u8 *datap, int len,
642 static int ath6kl_wmi_rx_action_event_rx(struct wmi *wmi, u8 *datap, int len,
725 /* Send a "simple" wmi command -- one with no arguments */
726 static int ath6kl_wmi_simple_cmd(struct wmi *wmi, u8 if_idx,
736 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, cmd_id, NO_SYNC_WMIFLAG);
741 static int ath6kl_wmi_ready_event_rx(struct wmi *wmi, u8 *datap, int len)
748 ath6kl_ready_event(wmi->parent_dev, ev->mac_addr,
761 int ath6kl_wmi_set_roam_lrssi_cmd(struct wmi *wmi, u8 lrssi)
779 return ath6kl_wmi_cmd_send(wmi, 0, skb, WMI_SET_ROAM_CTRL_CMDID,
783 int ath6kl_wmi_force_roam_cmd(struct wmi *wmi, const u8 *bssid)
798 return ath6kl_wmi_cmd_send(wmi, 0, skb, WMI_SET_ROAM_CTRL_CMDID,
802 int ath6kl_wmi_ap_set_beacon_intvl_cmd(struct wmi *wmi, u8 if_idx,
815 return ath6kl_wmi_cmd_send(wmi, if_idx, skb,
819 int ath6kl_wmi_ap_set_dtim_cmd(struct wmi *wmi, u8 if_idx, u32 dtim_period)
831 return ath6kl_wmi_cmd_send(wmi, if_idx, skb,
835 int ath6kl_wmi_set_roam_mode_cmd(struct wmi *wmi, enum wmi_roam_mode mode)
850 return ath6kl_wmi_cmd_send(wmi, 0, skb, WMI_SET_ROAM_CTRL_CMDID,
854 static int ath6kl_wmi_connect_event_rx(struct wmi *wmi, u8 *datap, int len,
899 "wmi event connect freq %d bssid %pM listen_intvl %d beacon_intvl %d type %d\n",
921 wmi->is_wmm_enabled = true;
926 if (wmi->is_wmm_enabled)
985 static void ath6kl_wmi_regdomain_event(struct wmi *wmi, u8 *datap, int len)
1009 if (country && wmi->parent_dev->wiphy_registered) {
1013 regulatory_hint(wmi->parent_dev->wiphy, alpha2);
1020 static int ath6kl_wmi_disconnect_event_rx(struct wmi *wmi, u8 *datap, int len,
1024 wmi->traffic_class = 100;
1032 "wmi event disconnect proto_reason %d bssid %pM wmi_reason %d assoc_resp_len %d\n",
1036 wmi->is_wmm_enabled = false;
1045 static int ath6kl_wmi_peer_node_event_rx(struct wmi *wmi, u8 *datap, int len)
1064 static int ath6kl_wmi_tkip_micerr_event_rx(struct wmi *wmi, u8 *datap, int len,
1086 static int ath6kl_wmi_bssinfo_event_rx(struct wmi *wmi, u8 *datap, int len,
1092 struct ath6kl *ar = wmi->parent_dev;
1115 ath6kl_wmi_bssfilter_cmd(ar->wmi, vif->fw_vif_idx,
1170 static int ath6kl_wmi_pstream_timeout_event_rx(struct wmi *wmi, u8 *datap,
1190 spin_lock_bh(&wmi->lock);
1191 wmi->stream_exist_for_ac[ev->traffic_class] = 0;
1192 wmi->fat_pipe_exist &= ~(1 << ev->traffic_class);
1193 spin_unlock_bh(&wmi->lock);
1196 ath6kl_indicate_tx_activity(wmi->parent_dev, ev->traffic_class, false);
1201 static int ath6kl_wmi_bitrate_reply_rx(struct wmi *wmi, u8 *datap, int len)
1219 ath6kl_wakeup_event(wmi->parent_dev);
1224 static int ath6kl_wmi_test_rx(struct wmi *wmi, u8 *datap, int len)
1226 ath6kl_tm_rx_event(wmi->parent_dev, datap, len);
1231 static int ath6kl_wmi_ratemask_reply_rx(struct wmi *wmi, u8 *datap, int len)
1236 ath6kl_wakeup_event(wmi->parent_dev);
1241 static int ath6kl_wmi_ch_list_reply_rx(struct wmi *wmi, u8 *datap, int len)
1246 ath6kl_wakeup_event(wmi->parent_dev);
1251 static int ath6kl_wmi_tx_pwr_reply_rx(struct wmi *wmi, u8 *datap, int len)
1259 ath6kl_txpwr_rx_evt(wmi->parent_dev, reply->dbM);
1264 static int ath6kl_wmi_keepalive_reply_rx(struct wmi *wmi, u8 *datap, int len)
1269 ath6kl_wakeup_event(wmi->parent_dev);
1274 static int ath6kl_wmi_scan_complete_rx(struct wmi *wmi, u8 *datap, int len,
1282 wmi->is_probe_ssid = false;
1287 static int ath6kl_wmi_neighbor_report_event_rx(struct wmi *wmi, u8 *datap,
1320 * Behavior of target after wmi error event is undefined.
1323 static int ath6kl_wmi_error_event_rx(struct wmi *wmi, u8 *datap, int len)
1347 static int ath6kl_wmi_stats_event_rx(struct wmi *wmi, u8 *datap, int len,
1391 static int ath6kl_wmi_send_rssi_threshold_params(struct wmi *wmi,
1404 return ath6kl_wmi_cmd_send(wmi, 0, skb, WMI_RSSI_THRESHOLD_PARAMS_CMDID,
1408 static int ath6kl_wmi_rssi_threshold_event_rx(struct wmi *wmi, u8 *datap,
1426 sq_thresh = &wmi->sq_threshld[SIGNAL_QUALITY_METRICS_RSSI];
1489 /* Issue a wmi command to install the thresholds */
1495 ret = ath6kl_wmi_send_rssi_threshold_params(wmi, &cmd);
1504 static int ath6kl_wmi_cac_event_rx(struct wmi *wmi, u8 *datap, int len,
1529 ath6kl_wmi_delete_pstream_cmd(wmi, vif->fw_vif_idx,
1536 spin_lock_bh(&wmi->lock);
1537 active_tsids = wmi->stream_exist_for_ac[reply->ac];
1538 spin_unlock_bh(&wmi->lock);
1545 ath6kl_wmi_delete_pstream_cmd(wmi, vif->fw_vif_idx,
1559 spin_lock_bh(&wmi->lock);
1560 wmi->stream_exist_for_ac[reply->ac] &= ~(1 << ts_id);
1561 active_tsids = wmi->stream_exist_for_ac[reply->ac];
1562 spin_unlock_bh(&wmi->lock);
1568 ath6kl_indicate_tx_activity(wmi->parent_dev, reply->ac,
1570 wmi->fat_pipe_exist &= ~(1 << reply->ac);
1577 static int ath6kl_wmi_txe_notify_event_rx(struct wmi *wmi, u8 *datap, int len,
1607 int ath6kl_wmi_set_txe_notify(struct wmi *wmi, u8 idx,
1622 return ath6kl_wmi_cmd_send(wmi, idx, skb, WMI_SET_TXE_NOTIFY_CMDID,
1626 int ath6kl_wmi_set_rssi_filter_cmd(struct wmi *wmi, u8 if_idx, s8 rssi)
1639 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_RSSI_FILTER_CMDID,
1644 static int ath6kl_wmi_send_snr_threshold_params(struct wmi *wmi,
1657 return ath6kl_wmi_cmd_send(wmi, 0, skb, WMI_SNR_THRESHOLD_PARAMS_CMDID,
1661 static int ath6kl_wmi_snr_threshold_event_rx(struct wmi *wmi, u8 *datap,
1680 sq_thresh = &wmi->sq_threshld[SIGNAL_QUALITY_METRICS_SNR];
1731 /* Issue a wmi command to install the thresholds */
1742 ret = ath6kl_wmi_send_snr_threshold_params(wmi, &cmd);
1751 static int ath6kl_wmi_aplist_event_rx(struct wmi *wmi, u8 *datap, int len)
1782 int ath6kl_wmi_cmd_send(struct wmi *wmi, u8 if_idx, struct sk_buff *skb,
1786 enum htc_endpoint_id ep_id = wmi->ep_id;
1791 (if_idx > (wmi->parent_dev->vif_max - 1)))) {
1796 ath6kl_dbg(ATH6KL_DBG_WMI, "wmi tx id %d len %d flag %d\n",
1798 ath6kl_dbg_dump(ATH6KL_DBG_WMI_DUMP, NULL, "wmi tx ",
1812 ath6kl_wmi_sync_point(wmi, if_idx);
1824 ret = ath6kl_wmi_data_hdr_add(wmi, skb, OPT_MSGTYPE,
1830 ep_id = ath6kl_ac2_endpoint_id(wmi->parent_dev, WMM_AC_BE);
1833 ath6kl_control_tx(wmi->parent_dev, skb, ep_id);
1841 ath6kl_wmi_sync_point(wmi, if_idx);
1847 int ath6kl_wmi_connect_cmd(struct wmi *wmi, u8 if_idx,
1863 "wmi connect bssid %pM freq %d flags 0x%x ssid_len %d "
1869 wmi->traffic_class = 100;
1901 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_CONNECT_CMDID,
1907 int ath6kl_wmi_reconnect_cmd(struct wmi *wmi, u8 if_idx, u8 *bssid,
1914 ath6kl_dbg(ATH6KL_DBG_WMI, "wmi reconnect bssid %pM freq %d\n",
1917 wmi->traffic_class = 100;
1929 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_RECONNECT_CMDID,
1935 int ath6kl_wmi_disconnect_cmd(struct wmi *wmi, u8 if_idx)
1939 ath6kl_dbg(ATH6KL_DBG_WMI, "wmi disconnect\n");
1941 wmi->traffic_class = 100;
1944 ret = ath6kl_wmi_simple_cmd(wmi, if_idx, WMI_DISCONNECT_CMDID);
1953 static int ath6kl_wmi_startscan_cmd(struct wmi *wmi, u8 if_idx,
1991 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_START_SCAN_CMDID,
2002 int ath6kl_wmi_beginscan_cmd(struct wmi *wmi, u8 if_idx,
2013 struct ath6kl *ar = wmi->parent_dev;
2019 return ath6kl_wmi_startscan_cmd(wmi, if_idx,
2075 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_BEGIN_SCAN_CMDID,
2081 int ath6kl_wmi_enable_sched_scan_cmd(struct wmi *wmi, u8 if_idx, bool enable)
2096 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb,
2102 int ath6kl_wmi_scanparams_cmd(struct wmi *wmi, u8 if_idx,
2130 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_SCAN_PARAMS_CMDID,
2135 int ath6kl_wmi_bssfilter_cmd(struct wmi *wmi, u8 if_idx, u8 filter, u32 ie_mask)
2152 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_BSS_FILTER_CMDID,
2157 int ath6kl_wmi_probedssid_cmd(struct wmi *wmi, u8 if_idx, u8 index, u8 flag,
2177 wmi->is_probe_ssid = true;
2189 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_PROBED_SSID_CMDID,
2194 int ath6kl_wmi_listeninterval_cmd(struct wmi *wmi, u8 if_idx,
2210 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_LISTEN_INT_CMDID,
2215 int ath6kl_wmi_bmisstime_cmd(struct wmi *wmi, u8 if_idx,
2230 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_BMISS_TIME_CMDID,
2235 int ath6kl_wmi_powermode_cmd(struct wmi *wmi, u8 if_idx, u8 pwr_mode)
2247 wmi->pwr_mode = pwr_mode;
2249 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_POWER_MODE_CMDID,
2254 int ath6kl_wmi_pmparams_cmd(struct wmi *wmi, u8 if_idx, u16 idle_period,
2275 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_POWER_PARAMS_CMDID,
2280 int ath6kl_wmi_disctimeout_cmd(struct wmi *wmi, u8 if_idx, u8 timeout)
2293 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_DISC_TIMEOUT_CMDID,
2297 ath6kl_debug_set_disconnect_timeout(wmi->parent_dev, timeout);
2302 int ath6kl_wmi_addkey_cmd(struct wmi *wmi, u8 if_idx, u8 key_index,
2344 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_ADD_CIPHER_KEY_CMDID,
2350 int ath6kl_wmi_add_krk_cmd(struct wmi *wmi, u8 if_idx, const u8 *krk)
2363 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_ADD_KRK_CMDID,
2369 int ath6kl_wmi_deletekey_cmd(struct wmi *wmi, u8 if_idx, u8 key_index)
2385 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_DELETE_CIPHER_KEY_CMDID,
2391 int ath6kl_wmi_setpmkid_cmd(struct wmi *wmi, u8 if_idx, const u8 *bssid,
2418 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_PMKID_CMDID,
2424 static int ath6kl_wmi_data_sync_send(struct wmi *wmi, struct sk_buff *skb,
2430 if (WARN_ON(skb == NULL || ep_id == wmi->ep_id)) {
2441 ret = ath6kl_control_tx(wmi->parent_dev, skb, ep_id);
2446 static int ath6kl_wmi_sync_point(struct wmi *wmi, u8 if_idx)
2457 spin_lock_bh(&wmi->lock);
2460 if (wmi->fat_pipe_exist & (1 << index)) {
2467 spin_unlock_bh(&wmi->lock);
2479 cmd->data_sync_map = wmi->fat_pipe_exist;
2500 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SYNCHRONIZE_CMDID,
2512 ep_id = ath6kl_ac2_endpoint_id(wmi->parent_dev,
2516 ath6kl_wmi_data_sync_send(wmi, data_sync_bufs[index].skb,
2538 int ath6kl_wmi_create_pstream_cmd(struct wmi *wmi, u8 if_idx,
2597 spin_lock_bh(&wmi->lock);
2598 fatpipe_exist_for_ac = (wmi->fat_pipe_exist &
2600 wmi->fat_pipe_exist |= (1 << params->traffic_class);
2601 spin_unlock_bh(&wmi->lock);
2604 spin_lock_bh(&wmi->lock);
2605 fatpipe_exist_for_ac = (wmi->fat_pipe_exist &
2607 wmi->stream_exist_for_ac[params->traffic_class] |=
2613 wmi->fat_pipe_exist |= (1 << params->traffic_class);
2614 spin_unlock_bh(&wmi->lock);
2623 ath6kl_indicate_tx_activity(wmi->parent_dev,
2626 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_CREATE_PSTREAM_CMDID,
2631 int ath6kl_wmi_delete_pstream_cmd(struct wmi *wmi, u8 if_idx, u8 traffic_class,
2657 spin_lock_bh(&wmi->lock);
2658 active_tsids = wmi->stream_exist_for_ac[traffic_class];
2659 spin_unlock_bh(&wmi->lock);
2673 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_DELETE_PSTREAM_CMDID,
2676 spin_lock_bh(&wmi->lock);
2677 wmi->stream_exist_for_ac[traffic_class] &= ~(1 << tsid);
2678 active_tsids = wmi->stream_exist_for_ac[traffic_class];
2679 spin_unlock_bh(&wmi->lock);
2686 ath6kl_indicate_tx_activity(wmi->parent_dev,
2688 wmi->fat_pipe_exist &= ~(1 << traffic_class);
2694 int ath6kl_wmi_set_ip_cmd(struct wmi *wmi, u8 if_idx,
2714 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_IP_CMDID,
2719 static void ath6kl_wmi_relinquish_implicit_pstream_credits(struct wmi *wmi)
2731 spin_lock_bh(&wmi->lock);
2732 stream_exist = wmi->fat_pipe_exist;
2733 spin_unlock_bh(&wmi->lock);
2741 spin_lock_bh(&wmi->lock);
2742 active_tsids = wmi->stream_exist_for_ac[i];
2743 spin_unlock_bh(&wmi->lock);
2755 ath6kl_indicate_tx_activity(wmi->parent_dev,
2762 spin_lock_bh(&wmi->lock);
2763 wmi->fat_pipe_exist = stream_exist;
2764 spin_unlock_bh(&wmi->lock);
2767 static int ath6kl_set_bitrate_mask64(struct wmi *wmi, u8 if_idx,
2813 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb,
2819 static int ath6kl_set_bitrate_mask32(struct wmi *wmi, u8 if_idx,
2863 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb,
2869 int ath6kl_wmi_set_bitrate_mask(struct wmi *wmi, u8 if_idx,
2872 struct ath6kl *ar = wmi->parent_dev;
2876 return ath6kl_set_bitrate_mask64(wmi, if_idx, mask);
2878 return ath6kl_set_bitrate_mask32(wmi, if_idx, mask);
2881 int ath6kl_wmi_set_host_sleep_mode_cmd(struct wmi *wmi, u8 if_idx,
2901 ath6kl_wmi_relinquish_implicit_pstream_credits(wmi);
2907 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb,
2914 static int ath6kl_wmi_host_sleep_mode_cmd_prcd_evt_rx(struct wmi *wmi,
2917 struct ath6kl *ar = wmi->parent_dev;
2925 int ath6kl_wmi_set_wow_mode_cmd(struct wmi *wmi, u8 if_idx,
2948 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_WOW_MODE_CMDID,
2953 int ath6kl_wmi_add_wow_pattern_cmd(struct wmi *wmi, u8 if_idx,
2984 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_ADD_WOW_PATTERN_CMDID,
2990 int ath6kl_wmi_del_wow_pattern_cmd(struct wmi *wmi, u8 if_idx,
3005 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_DEL_WOW_PATTERN_CMDID,
3010 static int ath6kl_wmi_cmd_send_xtnd(struct wmi *wmi, struct sk_buff *skb,
3022 ret = ath6kl_wmi_cmd_send(wmi, 0, skb, WMI_EXTENSION_CMDID, sync_flag);
3027 int ath6kl_wmi_get_challenge_resp_cmd(struct wmi *wmi, u32 cookie, u32 source)
3041 ret = ath6kl_wmi_cmd_send_xtnd(wmi, skb, WMIX_HB_CHALLENGE_RESP_CMDID,
3046 int ath6kl_wmi_config_debug_module_cmd(struct wmi *wmi, u32 valid, u32 config)
3060 ret = ath6kl_wmi_cmd_send_xtnd(wmi, skb, WMIX_DBGLOG_CFG_MODULE_CMDID,
3065 int ath6kl_wmi_get_stats_cmd(struct wmi *wmi, u8 if_idx)
3067 return ath6kl_wmi_simple_cmd(wmi, if_idx, WMI_GET_STATISTICS_CMDID);
3070 int ath6kl_wmi_set_tx_pwr_cmd(struct wmi *wmi, u8 if_idx, u8 dbM)
3083 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_TX_PWR_CMDID,
3089 int ath6kl_wmi_get_tx_pwr_cmd(struct wmi *wmi, u8 if_idx)
3091 return ath6kl_wmi_simple_cmd(wmi, if_idx, WMI_GET_TX_PWR_CMDID);
3094 int ath6kl_wmi_get_roam_tbl_cmd(struct wmi *wmi)
3096 return ath6kl_wmi_simple_cmd(wmi, 0, WMI_GET_ROAM_TBL_CMDID);
3099 int ath6kl_wmi_set_lpreamble_cmd(struct wmi *wmi, u8 if_idx, u8 status,
3114 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_LPREAMBLE_CMDID,
3119 int ath6kl_wmi_set_rts_cmd(struct wmi *wmi, u16 threshold)
3132 ret = ath6kl_wmi_cmd_send(wmi, 0, skb, WMI_SET_RTS_CMDID,
3137 int ath6kl_wmi_set_wmm_txop(struct wmi *wmi, u8 if_idx, enum wmi_txop_cfg cfg)
3153 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_WMM_TXOP_CMDID,
3158 int ath6kl_wmi_set_keepalive_cmd(struct wmi *wmi, u8 if_idx,
3172 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_KEEPALIVE_CMDID,
3176 ath6kl_debug_set_keepalive(wmi->parent_dev, keep_alive_intvl);
3181 int ath6kl_wmi_set_htcap_cmd(struct wmi *wmi, u8 if_idx,
3214 return ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_HT_CAP_CMDID,
3218 int ath6kl_wmi_test_cmd(struct wmi *wmi, void *buf, size_t len)
3229 ret = ath6kl_wmi_cmd_send(wmi, 0, skb, WMI_TEST_CMDID, NO_SYNC_WMIFLAG);
3234 int ath6kl_wmi_mcast_filter_cmd(struct wmi *wmi, u8 if_idx, bool mc_all_on)
3247 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_MCAST_FILTER_CMDID,
3252 int ath6kl_wmi_add_del_mcast_filter_cmd(struct wmi *wmi, u8 if_idx,
3272 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb,
3280 int ath6kl_wmi_sta_bmiss_enhance_cmd(struct wmi *wmi, u8 if_idx, bool enhance)
3293 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb,
3299 int ath6kl_wmi_set_regdomain_cmd(struct wmi *wmi, const char *alpha2)
3311 return ath6kl_wmi_cmd_send(wmi, 0, skb,
3316 s32 ath6kl_wmi_get_rate(struct wmi *wmi, s8 rate_index)
3318 struct ath6kl *ar = wmi->parent_dev;
3347 static int ath6kl_wmi_get_pmkid_list_event_rx(struct wmi *wmi, u8 *datap,
3366 static int ath6kl_wmi_addba_req_event_rx(struct wmi *wmi, u8 *datap, int len,
3377 static int ath6kl_wmi_delba_req_event_rx(struct wmi *wmi, u8 *datap, int len,
3389 int ath6kl_wmi_ap_profile_commit(struct wmi *wmip, u8 if_idx,
3412 int ath6kl_wmi_ap_set_mlme(struct wmi *wmip, u8 if_idx, u8 cmd, const u8 *mac,
3434 int ath6kl_wmi_ap_hidden_ssid(struct wmi *wmi, u8 if_idx, bool enable)
3446 return ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_AP_HIDDEN_SSID_CMDID,
3451 int ath6kl_wmi_ap_set_apsd(struct wmi *wmi, u8 if_idx, u8 enable)
3463 return ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_AP_SET_APSD_CMDID,
3467 int ath6kl_wmi_set_apsd_bfrd_traf(struct wmi *wmi, u8 if_idx,
3482 return ath6kl_wmi_cmd_send(wmi, if_idx, skb,
3487 static int ath6kl_wmi_pspoll_event_rx(struct wmi *wmi, u8 *datap, int len,
3502 static int ath6kl_wmi_dtimexpiry_event_rx(struct wmi *wmi, u8 *datap, int len,
3510 int ath6kl_wmi_set_pvb_cmd(struct wmi *wmi, u8 if_idx, u16 aid,
3526 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_AP_SET_PVB_CMDID,
3532 int ath6kl_wmi_set_rx_frame_format_cmd(struct wmi *wmi, u8 if_idx,
3550 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_RX_FRAME_FORMAT_CMDID,
3556 int ath6kl_wmi_set_appie_cmd(struct wmi *wmi, u8 if_idx, u8 mgmt_frm_type,
3576 return ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_APPIE_CMDID,
3580 int ath6kl_wmi_set_ie_cmd(struct wmi *wmi, u8 if_idx, u8 ie_id, u8 ie_field,
3599 return ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_IE_CMDID,
3603 int ath6kl_wmi_disable_11b_rates_cmd(struct wmi *wmi, bool disable)
3617 return ath6kl_wmi_cmd_send(wmi, 0, skb, WMI_DISABLE_11B_RATES_CMDID,
3621 int ath6kl_wmi_remain_on_chnl_cmd(struct wmi *wmi, u8 if_idx, u32 freq, u32 dur)
3635 return ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_REMAIN_ON_CHNL_CMDID,
3643 static int ath6kl_wmi_send_action_cmd(struct wmi *wmi, u8 if_idx, u32 id,
3664 kfree(wmi->last_mgmt_tx_frame);
3665 wmi->last_mgmt_tx_frame = buf;
3666 wmi->last_mgmt_tx_frame_len = data_len;
3677 return ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SEND_ACTION_CMDID,
3681 static int __ath6kl_wmi_send_mgmt_cmd(struct wmi *wmi, u8 if_idx, u32 id,
3702 kfree(wmi->last_mgmt_tx_frame);
3703 wmi->last_mgmt_tx_frame = buf;
3704 wmi->last_mgmt_tx_frame_len = data_len;
3716 return ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SEND_MGMT_CMDID,
3720 int ath6kl_wmi_send_mgmt_cmd(struct wmi *wmi, u8 if_idx, u32 id, u32 freq,
3725 struct ath6kl *ar = wmi->parent_dev;
3735 status = __ath6kl_wmi_send_mgmt_cmd(ar->wmi, if_idx, id, freq,
3739 status = ath6kl_wmi_send_action_cmd(ar->wmi, if_idx, id, freq,
3746 int ath6kl_wmi_send_probe_response_cmd(struct wmi *wmi, u8 if_idx, u32 freq,
3769 return ath6kl_wmi_cmd_send(wmi, if_idx, skb,
3774 int ath6kl_wmi_probe_report_req_cmd(struct wmi *wmi, u8 if_idx, bool enable)
3787 return ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_PROBE_REQ_REPORT_CMDID,
3791 int ath6kl_wmi_info_req_cmd(struct wmi *wmi, u8 if_idx, u32 info_req_flags)
3804 return ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_GET_P2P_INFO_CMDID,
3808 int ath6kl_wmi_cancel_remain_on_chnl_cmd(struct wmi *wmi, u8 if_idx)
3811 return ath6kl_wmi_simple_cmd(wmi, if_idx,
3815 int ath6kl_wmi_set_inact_period(struct wmi *wmi, u8 if_idx, int inact_timeout)
3828 return ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_AP_CONN_INACT_CMDID,
3832 static void ath6kl_wmi_hb_challenge_resp_event(struct wmi *wmi, u8 *datap,
3841 ath6kl_recovery_hb_event(wmi->parent_dev,
3845 static int ath6kl_wmi_control_rx_xtnd(struct wmi *wmi, struct sk_buff *skb)
3868 ath6kl_dbg(ATH6KL_DBG_WMI, "wmi event hb challenge resp\n");
3869 ath6kl_wmi_hb_challenge_resp_event(wmi, datap, len);
3872 ath6kl_dbg(ATH6KL_DBG_WMI, "wmi event dbglog len %d\n", len);
3873 ath6kl_debug_fwlog_event(wmi->parent_dev, datap, len);
3884 static int ath6kl_wmi_roam_tbl_event_rx(struct wmi *wmi, u8 *datap, int len)
3886 return ath6kl_debug_roam_tbl_event(wmi->parent_dev, datap, len);
3889 /* Process interface specific wmi events, caller would free the datap */
3890 static int ath6kl_wmi_proc_events_vif(struct wmi *wmi, u16 if_idx, u16 cmd_id,
3895 vif = ath6kl_get_vif_by_index(wmi->parent_dev, if_idx);
3906 return ath6kl_wmi_connect_event_rx(wmi, datap, len, vif);
3909 return ath6kl_wmi_disconnect_event_rx(wmi, datap, len, vif);
3912 return ath6kl_wmi_tkip_micerr_event_rx(wmi, datap, len, vif);
3915 return ath6kl_wmi_bssinfo_event_rx(wmi, datap, len, vif);
3918 return ath6kl_wmi_neighbor_report_event_rx(wmi, datap, len,
3922 return ath6kl_wmi_scan_complete_rx(wmi, datap, len, vif);
3925 return ath6kl_wmi_stats_event_rx(wmi, datap, len, vif);
3928 return ath6kl_wmi_cac_event_rx(wmi, datap, len, vif);
3931 return ath6kl_wmi_pspoll_event_rx(wmi, datap, len, vif);
3934 return ath6kl_wmi_dtimexpiry_event_rx(wmi, datap, len, vif);
3937 return ath6kl_wmi_addba_req_event_rx(wmi, datap, len, vif);
3940 return ath6kl_wmi_delba_req_event_rx(wmi, datap, len, vif);
3944 return ath6kl_wmi_host_sleep_mode_cmd_prcd_evt_rx(wmi, vif);
3947 return ath6kl_wmi_remain_on_chnl_event_rx(wmi, datap, len, vif);
3951 return ath6kl_wmi_cancel_remain_on_chnl_event_rx(wmi, datap,
3955 return ath6kl_wmi_tx_status_event_rx(wmi, datap, len, vif);
3958 return ath6kl_wmi_rx_probe_req_event_rx(wmi, datap, len, vif);
3961 return ath6kl_wmi_rx_action_event_rx(wmi, datap, len, vif);
3964 return ath6kl_wmi_txe_notify_event_rx(wmi, datap, len, vif);
3973 static int ath6kl_wmi_proc_events(struct wmi *wmi, struct sk_buff *skb)
3990 ath6kl_dbg(ATH6KL_DBG_WMI, "wmi rx id %d len %d\n", id, len);
3991 ath6kl_dbg_dump(ATH6KL_DBG_WMI_DUMP, NULL, "wmi rx ",
3997 ret = ath6kl_wmi_bitrate_reply_rx(wmi, datap, len);
4001 ret = ath6kl_wmi_ch_list_reply_rx(wmi, datap, len);
4005 ret = ath6kl_wmi_tx_pwr_reply_rx(wmi, datap, len);
4009 ret = ath6kl_wmi_ready_event_rx(wmi, datap, len);
4013 ret = ath6kl_wmi_peer_node_event_rx(wmi, datap, len);
4017 ath6kl_wmi_regdomain_event(wmi, datap, len);
4021 ret = ath6kl_wmi_pstream_timeout_event_rx(wmi, datap, len);
4025 ret = ath6kl_wmi_error_event_rx(wmi, datap, len);
4029 ret = ath6kl_wmi_rssi_threshold_event_rx(wmi, datap, len);
4040 ret = ath6kl_wmi_roam_tbl_event_rx(wmi, datap, len);
4044 ret = ath6kl_wmi_control_rx_xtnd(wmi, skb);
4054 ret = ath6kl_wmi_test_rx(wmi, datap, len);
4058 ret = ath6kl_wmi_ratemask_reply_rx(wmi, datap, len);
4065 ret = ath6kl_wmi_snr_threshold_event_rx(wmi, datap, len);
4072 ret = ath6kl_wmi_aplist_event_rx(wmi, datap, len);
4076 ret = ath6kl_wmi_keepalive_reply_rx(wmi, datap, len);
4083 ret = ath6kl_wmi_get_pmkid_list_event_rx(wmi, datap, len);
4113 ret = ath6kl_wmi_proc_events_vif(wmi, if_idx, id, datap, len);
4122 int ath6kl_wmi_control_rx(struct wmi *wmi, struct sk_buff *skb)
4135 return ath6kl_wmi_proc_events(wmi, skb);
4138 void ath6kl_wmi_reset(struct wmi *wmi)
4140 spin_lock_bh(&wmi->lock);
4142 wmi->fat_pipe_exist = 0;
4143 memset(wmi->stream_exist_for_ac, 0, sizeof(wmi->stream_exist_for_ac));
4145 spin_unlock_bh(&wmi->lock);
4150 struct wmi *wmi;
4152 wmi = kzalloc(sizeof(struct wmi), GFP_KERNEL);
4153 if (!wmi)
4156 spin_lock_init(&wmi->lock);
4158 wmi->parent_dev = dev;
4160 wmi->pwr_mode = REC_POWER;
4162 ath6kl_wmi_reset(wmi);
4164 return wmi;
4167 void ath6kl_wmi_shutdown(struct wmi *wmi)
4169 if (!wmi)
4172 kfree(wmi->last_mgmt_tx_frame);
4173 kfree(wmi);