Lines Matching defs: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)
1779 int ath6kl_wmi_cmd_send(struct wmi *wmi, u8 if_idx, struct sk_buff *skb,
1783 enum htc_endpoint_id ep_id = wmi->ep_id;
1788 (if_idx > (wmi->parent_dev->vif_max - 1)))) {
1793 ath6kl_dbg(ATH6KL_DBG_WMI, "wmi tx id %d len %d flag %d\n",
1795 ath6kl_dbg_dump(ATH6KL_DBG_WMI_DUMP, NULL, "wmi tx ",
1809 ath6kl_wmi_sync_point(wmi, if_idx);
1821 ret = ath6kl_wmi_data_hdr_add(wmi, skb, OPT_MSGTYPE, false,
1827 ep_id = ath6kl_ac2_endpoint_id(wmi->parent_dev, WMM_AC_BE);
1830 ath6kl_control_tx(wmi->parent_dev, skb, ep_id);
1838 ath6kl_wmi_sync_point(wmi, if_idx);
1844 int ath6kl_wmi_connect_cmd(struct wmi *wmi, u8 if_idx,
1860 "wmi connect bssid %pM freq %d flags 0x%x ssid_len %d "
1866 wmi->traffic_class = 100;
1898 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_CONNECT_CMDID,
1904 int ath6kl_wmi_reconnect_cmd(struct wmi *wmi, u8 if_idx, u8 *bssid,
1911 ath6kl_dbg(ATH6KL_DBG_WMI, "wmi reconnect bssid %pM freq %d\n",
1914 wmi->traffic_class = 100;
1926 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_RECONNECT_CMDID,
1932 int ath6kl_wmi_disconnect_cmd(struct wmi *wmi, u8 if_idx)
1936 ath6kl_dbg(ATH6KL_DBG_WMI, "wmi disconnect\n");
1938 wmi->traffic_class = 100;
1941 ret = ath6kl_wmi_simple_cmd(wmi, if_idx, WMI_DISCONNECT_CMDID);
1950 static int ath6kl_wmi_startscan_cmd(struct wmi *wmi, u8 if_idx,
1982 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_START_SCAN_CMDID,
1993 int ath6kl_wmi_beginscan_cmd(struct wmi *wmi, u8 if_idx,
2004 struct ath6kl *ar = wmi->parent_dev;
2010 return ath6kl_wmi_startscan_cmd(wmi, if_idx,
2061 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_BEGIN_SCAN_CMDID,
2067 int ath6kl_wmi_enable_sched_scan_cmd(struct wmi *wmi, u8 if_idx, bool enable)
2082 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb,
2088 int ath6kl_wmi_scanparams_cmd(struct wmi *wmi, u8 if_idx,
2116 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_SCAN_PARAMS_CMDID,
2121 int ath6kl_wmi_bssfilter_cmd(struct wmi *wmi, u8 if_idx, u8 filter, u32 ie_mask)
2138 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_BSS_FILTER_CMDID,
2143 int ath6kl_wmi_probedssid_cmd(struct wmi *wmi, u8 if_idx, u8 index, u8 flag,
2163 wmi->is_probe_ssid = true;
2175 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_PROBED_SSID_CMDID,
2180 int ath6kl_wmi_listeninterval_cmd(struct wmi *wmi, u8 if_idx,
2196 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_LISTEN_INT_CMDID,
2201 int ath6kl_wmi_bmisstime_cmd(struct wmi *wmi, u8 if_idx,
2216 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_BMISS_TIME_CMDID,
2221 int ath6kl_wmi_powermode_cmd(struct wmi *wmi, u8 if_idx, u8 pwr_mode)
2233 wmi->pwr_mode = pwr_mode;
2235 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_POWER_MODE_CMDID,
2240 int ath6kl_wmi_pmparams_cmd(struct wmi *wmi, u8 if_idx, u16 idle_period,
2261 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_POWER_PARAMS_CMDID,
2266 int ath6kl_wmi_disctimeout_cmd(struct wmi *wmi, u8 if_idx, u8 timeout)
2279 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_DISC_TIMEOUT_CMDID,
2283 ath6kl_debug_set_disconnect_timeout(wmi->parent_dev, timeout);
2288 int ath6kl_wmi_addkey_cmd(struct wmi *wmi, u8 if_idx, u8 key_index,
2330 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_ADD_CIPHER_KEY_CMDID,
2336 int ath6kl_wmi_add_krk_cmd(struct wmi *wmi, u8 if_idx, const u8 *krk)
2349 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_ADD_KRK_CMDID,
2355 int ath6kl_wmi_deletekey_cmd(struct wmi *wmi, u8 if_idx, u8 key_index)
2371 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_DELETE_CIPHER_KEY_CMDID,
2377 int ath6kl_wmi_setpmkid_cmd(struct wmi *wmi, u8 if_idx, const u8 *bssid,
2404 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_PMKID_CMDID,
2410 static int ath6kl_wmi_data_sync_send(struct wmi *wmi, struct sk_buff *skb,
2416 if (WARN_ON(skb == NULL || ep_id == wmi->ep_id)) {
2427 ret = ath6kl_control_tx(wmi->parent_dev, skb, ep_id);
2432 static int ath6kl_wmi_sync_point(struct wmi *wmi, u8 if_idx)
2443 spin_lock_bh(&wmi->lock);
2446 if (wmi->fat_pipe_exist & (1 << index)) {
2453 spin_unlock_bh(&wmi->lock);
2465 cmd->data_sync_map = wmi->fat_pipe_exist;
2486 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SYNCHRONIZE_CMDID,
2498 ep_id = ath6kl_ac2_endpoint_id(wmi->parent_dev,
2502 ath6kl_wmi_data_sync_send(wmi, data_sync_bufs[index].skb,
2524 int ath6kl_wmi_create_pstream_cmd(struct wmi *wmi, u8 if_idx,
2583 spin_lock_bh(&wmi->lock);
2584 fatpipe_exist_for_ac = (wmi->fat_pipe_exist &
2586 wmi->fat_pipe_exist |= (1 << params->traffic_class);
2587 spin_unlock_bh(&wmi->lock);
2590 spin_lock_bh(&wmi->lock);
2591 fatpipe_exist_for_ac = (wmi->fat_pipe_exist &
2593 wmi->stream_exist_for_ac[params->traffic_class] |=
2599 wmi->fat_pipe_exist |= (1 << params->traffic_class);
2600 spin_unlock_bh(&wmi->lock);
2609 ath6kl_indicate_tx_activity(wmi->parent_dev,
2612 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_CREATE_PSTREAM_CMDID,
2617 int ath6kl_wmi_delete_pstream_cmd(struct wmi *wmi, u8 if_idx, u8 traffic_class,
2643 spin_lock_bh(&wmi->lock);
2644 active_tsids = wmi->stream_exist_for_ac[traffic_class];
2645 spin_unlock_bh(&wmi->lock);
2659 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_DELETE_PSTREAM_CMDID,
2662 spin_lock_bh(&wmi->lock);
2663 wmi->stream_exist_for_ac[traffic_class] &= ~(1 << tsid);
2664 active_tsids = wmi->stream_exist_for_ac[traffic_class];
2665 spin_unlock_bh(&wmi->lock);
2672 ath6kl_indicate_tx_activity(wmi->parent_dev,
2674 wmi->fat_pipe_exist &= ~(1 << traffic_class);
2680 int ath6kl_wmi_set_ip_cmd(struct wmi *wmi, u8 if_idx,
2700 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_IP_CMDID,
2705 static void ath6kl_wmi_relinquish_implicit_pstream_credits(struct wmi *wmi)
2717 spin_lock_bh(&wmi->lock);
2718 stream_exist = wmi->fat_pipe_exist;
2719 spin_unlock_bh(&wmi->lock);
2727 spin_lock_bh(&wmi->lock);
2728 active_tsids = wmi->stream_exist_for_ac[i];
2729 spin_unlock_bh(&wmi->lock);
2741 ath6kl_indicate_tx_activity(wmi->parent_dev,
2748 spin_lock_bh(&wmi->lock);
2749 wmi->fat_pipe_exist = stream_exist;
2750 spin_unlock_bh(&wmi->lock);
2753 static int ath6kl_set_bitrate_mask64(struct wmi *wmi, u8 if_idx,
2799 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb,
2805 static int ath6kl_set_bitrate_mask32(struct wmi *wmi, u8 if_idx,
2849 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb,
2855 int ath6kl_wmi_set_bitrate_mask(struct wmi *wmi, u8 if_idx,
2858 struct ath6kl *ar = wmi->parent_dev;
2862 return ath6kl_set_bitrate_mask64(wmi, if_idx, mask);
2864 return ath6kl_set_bitrate_mask32(wmi, if_idx, mask);
2867 int ath6kl_wmi_set_host_sleep_mode_cmd(struct wmi *wmi, u8 if_idx,
2887 ath6kl_wmi_relinquish_implicit_pstream_credits(wmi);
2893 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb,
2900 static int ath6kl_wmi_host_sleep_mode_cmd_prcd_evt_rx(struct wmi *wmi,
2903 struct ath6kl *ar = wmi->parent_dev;
2911 int ath6kl_wmi_set_wow_mode_cmd(struct wmi *wmi, u8 if_idx,
2934 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_WOW_MODE_CMDID,
2939 int ath6kl_wmi_add_wow_pattern_cmd(struct wmi *wmi, u8 if_idx,
2970 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_ADD_WOW_PATTERN_CMDID,
2976 int ath6kl_wmi_del_wow_pattern_cmd(struct wmi *wmi, u8 if_idx,
2991 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_DEL_WOW_PATTERN_CMDID,
2996 static int ath6kl_wmi_cmd_send_xtnd(struct wmi *wmi, struct sk_buff *skb,
3008 ret = ath6kl_wmi_cmd_send(wmi, 0, skb, WMI_EXTENSION_CMDID, sync_flag);
3013 int ath6kl_wmi_get_challenge_resp_cmd(struct wmi *wmi, u32 cookie, u32 source)
3027 ret = ath6kl_wmi_cmd_send_xtnd(wmi, skb, WMIX_HB_CHALLENGE_RESP_CMDID,
3032 int ath6kl_wmi_config_debug_module_cmd(struct wmi *wmi, u32 valid, u32 config)
3046 ret = ath6kl_wmi_cmd_send_xtnd(wmi, skb, WMIX_DBGLOG_CFG_MODULE_CMDID,
3051 int ath6kl_wmi_get_stats_cmd(struct wmi *wmi, u8 if_idx)
3053 return ath6kl_wmi_simple_cmd(wmi, if_idx, WMI_GET_STATISTICS_CMDID);
3056 int ath6kl_wmi_set_tx_pwr_cmd(struct wmi *wmi, u8 if_idx, u8 dbM)
3069 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_TX_PWR_CMDID,
3075 int ath6kl_wmi_get_tx_pwr_cmd(struct wmi *wmi, u8 if_idx)
3077 return ath6kl_wmi_simple_cmd(wmi, if_idx, WMI_GET_TX_PWR_CMDID);
3080 int ath6kl_wmi_get_roam_tbl_cmd(struct wmi *wmi)
3082 return ath6kl_wmi_simple_cmd(wmi, 0, WMI_GET_ROAM_TBL_CMDID);
3085 int ath6kl_wmi_set_lpreamble_cmd(struct wmi *wmi, u8 if_idx, u8 status,
3100 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_LPREAMBLE_CMDID,
3105 int ath6kl_wmi_set_rts_cmd(struct wmi *wmi, u16 threshold)
3118 ret = ath6kl_wmi_cmd_send(wmi, 0, skb, WMI_SET_RTS_CMDID,
3123 int ath6kl_wmi_set_wmm_txop(struct wmi *wmi, u8 if_idx, enum wmi_txop_cfg cfg)
3139 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_WMM_TXOP_CMDID,
3144 int ath6kl_wmi_set_keepalive_cmd(struct wmi *wmi, u8 if_idx,
3158 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_KEEPALIVE_CMDID,
3162 ath6kl_debug_set_keepalive(wmi->parent_dev, keep_alive_intvl);
3167 int ath6kl_wmi_set_htcap_cmd(struct wmi *wmi, u8 if_idx,
3200 return ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_HT_CAP_CMDID,
3204 int ath6kl_wmi_test_cmd(struct wmi *wmi, void *buf, size_t len)
3215 ret = ath6kl_wmi_cmd_send(wmi, 0, skb, WMI_TEST_CMDID, NO_SYNC_WMIFLAG);
3220 int ath6kl_wmi_mcast_filter_cmd(struct wmi *wmi, u8 if_idx, bool mc_all_on)
3233 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_MCAST_FILTER_CMDID,
3238 int ath6kl_wmi_add_del_mcast_filter_cmd(struct wmi *wmi, u8 if_idx,
3258 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb,
3266 int ath6kl_wmi_sta_bmiss_enhance_cmd(struct wmi *wmi, u8 if_idx, bool enhance)
3279 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb,
3285 int ath6kl_wmi_set_regdomain_cmd(struct wmi *wmi, const char *alpha2)
3297 return ath6kl_wmi_cmd_send(wmi, 0, skb,
3302 s32 ath6kl_wmi_get_rate(struct wmi *wmi, s8 rate_index)
3304 struct ath6kl *ar = wmi->parent_dev;
3333 static int ath6kl_wmi_get_pmkid_list_event_rx(struct wmi *wmi, u8 *datap,
3352 static int ath6kl_wmi_addba_req_event_rx(struct wmi *wmi, u8 *datap, int len,
3363 static int ath6kl_wmi_delba_req_event_rx(struct wmi *wmi, u8 *datap, int len,
3375 int ath6kl_wmi_ap_profile_commit(struct wmi *wmip, u8 if_idx,
3398 int ath6kl_wmi_ap_set_mlme(struct wmi *wmip, u8 if_idx, u8 cmd, const u8 *mac,
3420 int ath6kl_wmi_ap_hidden_ssid(struct wmi *wmi, u8 if_idx, bool enable)
3432 return ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_AP_HIDDEN_SSID_CMDID,
3437 int ath6kl_wmi_ap_set_apsd(struct wmi *wmi, u8 if_idx, u8 enable)
3449 return ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_AP_SET_APSD_CMDID,
3453 int ath6kl_wmi_set_apsd_bfrd_traf(struct wmi *wmi, u8 if_idx,
3468 return ath6kl_wmi_cmd_send(wmi, if_idx, skb,
3473 static int ath6kl_wmi_pspoll_event_rx(struct wmi *wmi, u8 *datap, int len,
3488 static int ath6kl_wmi_dtimexpiry_event_rx(struct wmi *wmi, u8 *datap, int len,
3496 int ath6kl_wmi_set_pvb_cmd(struct wmi *wmi, u8 if_idx, u16 aid,
3512 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_AP_SET_PVB_CMDID,
3518 int ath6kl_wmi_set_rx_frame_format_cmd(struct wmi *wmi, u8 if_idx,
3536 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_RX_FRAME_FORMAT_CMDID,
3542 int ath6kl_wmi_set_appie_cmd(struct wmi *wmi, u8 if_idx, u8 mgmt_frm_type,
3562 return ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_APPIE_CMDID,
3566 int ath6kl_wmi_set_ie_cmd(struct wmi *wmi, u8 if_idx, u8 ie_id, u8 ie_field,
3585 return ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_IE_CMDID,
3589 int ath6kl_wmi_disable_11b_rates_cmd(struct wmi *wmi, bool disable)
3603 return ath6kl_wmi_cmd_send(wmi, 0, skb, WMI_DISABLE_11B_RATES_CMDID,
3607 int ath6kl_wmi_remain_on_chnl_cmd(struct wmi *wmi, u8 if_idx, u32 freq, u32 dur)
3621 return ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_REMAIN_ON_CHNL_CMDID,
3629 static int ath6kl_wmi_send_action_cmd(struct wmi *wmi, u8 if_idx, u32 id,
3650 kfree(wmi->last_mgmt_tx_frame);
3651 wmi->last_mgmt_tx_frame = buf;
3652 wmi->last_mgmt_tx_frame_len = data_len;
3663 return ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SEND_ACTION_CMDID,
3667 static int __ath6kl_wmi_send_mgmt_cmd(struct wmi *wmi, u8 if_idx, u32 id,
3688 kfree(wmi->last_mgmt_tx_frame);
3689 wmi->last_mgmt_tx_frame = buf;
3690 wmi->last_mgmt_tx_frame_len = data_len;
3702 return ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SEND_MGMT_CMDID,
3706 int ath6kl_wmi_send_mgmt_cmd(struct wmi *wmi, u8 if_idx, u32 id, u32 freq,
3711 struct ath6kl *ar = wmi->parent_dev;
3721 status = __ath6kl_wmi_send_mgmt_cmd(ar->wmi, if_idx, id, freq,
3725 status = ath6kl_wmi_send_action_cmd(ar->wmi, if_idx, id, freq,
3732 int ath6kl_wmi_send_probe_response_cmd(struct wmi *wmi, u8 if_idx, u32 freq,
3755 return ath6kl_wmi_cmd_send(wmi, if_idx, skb,
3760 int ath6kl_wmi_probe_report_req_cmd(struct wmi *wmi, u8 if_idx, bool enable)
3773 return ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_PROBE_REQ_REPORT_CMDID,
3777 int ath6kl_wmi_info_req_cmd(struct wmi *wmi, u8 if_idx, u32 info_req_flags)
3790 return ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_GET_P2P_INFO_CMDID,
3794 int ath6kl_wmi_cancel_remain_on_chnl_cmd(struct wmi *wmi, u8 if_idx)
3797 return ath6kl_wmi_simple_cmd(wmi, if_idx,
3801 int ath6kl_wmi_set_inact_period(struct wmi *wmi, u8 if_idx, int inact_timeout)
3814 return ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_AP_CONN_INACT_CMDID,
3818 static void ath6kl_wmi_hb_challenge_resp_event(struct wmi *wmi, u8 *datap,
3827 ath6kl_recovery_hb_event(wmi->parent_dev,
3831 static int ath6kl_wmi_control_rx_xtnd(struct wmi *wmi, struct sk_buff *skb)
3854 ath6kl_dbg(ATH6KL_DBG_WMI, "wmi event hb challenge resp\n");
3855 ath6kl_wmi_hb_challenge_resp_event(wmi, datap, len);
3858 ath6kl_dbg(ATH6KL_DBG_WMI, "wmi event dbglog len %d\n", len);
3859 ath6kl_debug_fwlog_event(wmi->parent_dev, datap, len);
3870 static int ath6kl_wmi_roam_tbl_event_rx(struct wmi *wmi, u8 *datap, int len)
3872 return ath6kl_debug_roam_tbl_event(wmi->parent_dev, datap, len);
3875 /* Process interface specific wmi events, caller would free the datap */
3876 static int ath6kl_wmi_proc_events_vif(struct wmi *wmi, u16 if_idx, u16 cmd_id,
3881 vif = ath6kl_get_vif_by_index(wmi->parent_dev, if_idx);
3892 return ath6kl_wmi_connect_event_rx(wmi, datap, len, vif);
3895 return ath6kl_wmi_disconnect_event_rx(wmi, datap, len, vif);
3898 return ath6kl_wmi_tkip_micerr_event_rx(wmi, datap, len, vif);
3901 return ath6kl_wmi_bssinfo_event_rx(wmi, datap, len, vif);
3904 return ath6kl_wmi_neighbor_report_event_rx(wmi, datap, len,
3908 return ath6kl_wmi_scan_complete_rx(wmi, datap, len, vif);
3911 return ath6kl_wmi_stats_event_rx(wmi, datap, len, vif);
3914 return ath6kl_wmi_cac_event_rx(wmi, datap, len, vif);
3917 return ath6kl_wmi_pspoll_event_rx(wmi, datap, len, vif);
3920 return ath6kl_wmi_dtimexpiry_event_rx(wmi, datap, len, vif);
3923 return ath6kl_wmi_addba_req_event_rx(wmi, datap, len, vif);
3926 return ath6kl_wmi_delba_req_event_rx(wmi, datap, len, vif);
3930 return ath6kl_wmi_host_sleep_mode_cmd_prcd_evt_rx(wmi, vif);
3933 return ath6kl_wmi_remain_on_chnl_event_rx(wmi, datap, len, vif);
3937 return ath6kl_wmi_cancel_remain_on_chnl_event_rx(wmi, datap,
3941 return ath6kl_wmi_tx_status_event_rx(wmi, datap, len, vif);
3944 return ath6kl_wmi_rx_probe_req_event_rx(wmi, datap, len, vif);
3947 return ath6kl_wmi_rx_action_event_rx(wmi, datap, len, vif);
3950 return ath6kl_wmi_txe_notify_event_rx(wmi, datap, len, vif);
3959 static int ath6kl_wmi_proc_events(struct wmi *wmi, struct sk_buff *skb)
3976 ath6kl_dbg(ATH6KL_DBG_WMI, "wmi rx id %d len %d\n", id, len);
3977 ath6kl_dbg_dump(ATH6KL_DBG_WMI_DUMP, NULL, "wmi rx ",
3983 ret = ath6kl_wmi_bitrate_reply_rx(wmi, datap, len);
3987 ret = ath6kl_wmi_ch_list_reply_rx(wmi, datap, len);
3991 ret = ath6kl_wmi_tx_pwr_reply_rx(wmi, datap, len);
3995 ret = ath6kl_wmi_ready_event_rx(wmi, datap, len);
3999 ret = ath6kl_wmi_peer_node_event_rx(wmi, datap, len);
4003 ath6kl_wmi_regdomain_event(wmi, datap, len);
4007 ret = ath6kl_wmi_pstream_timeout_event_rx(wmi, datap, len);
4011 ret = ath6kl_wmi_error_event_rx(wmi, datap, len);
4015 ret = ath6kl_wmi_rssi_threshold_event_rx(wmi, datap, len);
4026 ret = ath6kl_wmi_roam_tbl_event_rx(wmi, datap, len);
4030 ret = ath6kl_wmi_control_rx_xtnd(wmi, skb);
4040 ret = ath6kl_wmi_test_rx(wmi, datap, len);
4044 ret = ath6kl_wmi_ratemask_reply_rx(wmi, datap, len);
4051 ret = ath6kl_wmi_snr_threshold_event_rx(wmi, datap, len);
4058 ret = ath6kl_wmi_aplist_event_rx(wmi, datap, len);
4062 ret = ath6kl_wmi_keepalive_reply_rx(wmi, datap, len);
4069 ret = ath6kl_wmi_get_pmkid_list_event_rx(wmi, datap, len);
4099 ret = ath6kl_wmi_proc_events_vif(wmi, if_idx, id, datap, len);
4108 int ath6kl_wmi_control_rx(struct wmi *wmi, struct sk_buff *skb)
4121 return ath6kl_wmi_proc_events(wmi, skb);
4124 void ath6kl_wmi_reset(struct wmi *wmi)
4126 spin_lock_bh(&wmi->lock);
4128 wmi->fat_pipe_exist = 0;
4129 memset(wmi->stream_exist_for_ac, 0, sizeof(wmi->stream_exist_for_ac));
4131 spin_unlock_bh(&wmi->lock);
4136 struct wmi *wmi;
4138 wmi = kzalloc(sizeof(struct wmi), GFP_KERNEL);
4139 if (!wmi)
4142 spin_lock_init(&wmi->lock);
4144 wmi->parent_dev = dev;
4146 wmi->pwr_mode = REC_POWER;
4148 ath6kl_wmi_reset(wmi);
4150 return wmi;
4153 void ath6kl_wmi_shutdown(struct wmi *wmi)
4155 if (!wmi)
4158 kfree(wmi->last_mgmt_tx_frame);
4159 kfree(wmi);