qcacmn: Add non-tlv implementation in common wmi layer

WIN platform uses non-tlv implementation for host to
target wmi commands. Add support for non-tlv
implementation in common wmi layer.

Change-Id: I1f832695b0d41b521be6b18df0cad31aae11b6c9
Acked-by: Kiran Venkatappa <kiranv@qti.qualcomm.com>
CRs-Fixed: 1005778
This commit is contained in:
Govind Singh
2016-04-15 13:58:27 +05:30
committed by Gerrit - the friendly Code Review server
parent e6eb894c8f
commit a5e18c4829
8 changed files with 15382 additions and 350 deletions

View File

@@ -102,6 +102,9 @@ enum wmi_rx_exec_ctx {
* attach for unified WMI * attach for unified WMI
* *
* @param scn_handle : handle to SCN. * @param scn_handle : handle to SCN.
* @param target_type : type of supported wmi command
* @param use_cookie : flag to indicate cookie based allocation
* @param ops : handle to wmi ops
* @return opaque handle. * @return opaque handle.
*/ */
void *wmi_unified_attach(void *scn_handle, void *wmi_unified_attach(void *scn_handle,
@@ -148,11 +151,12 @@ void wmi_buf_free(wmi_buf_t net_buf);
* @param wmi_handle : handle to WMI. * @param wmi_handle : handle to WMI.
* @param buf : wmi command buffer * @param buf : wmi command buffer
* @param buflen : wmi command buffer length * @param buflen : wmi command buffer length
* @param cmd_id : WMI cmd id
* @return 0 on success and -ve on failure. * @return 0 on success and -ve on failure.
*/ */
int int
wmi_unified_cmd_send(wmi_unified_t wmi_handle, wmi_buf_t buf, uint32_t buflen, wmi_unified_cmd_send(wmi_unified_t wmi_handle, wmi_buf_t buf, uint32_t buflen,
WMI_CMD_ID cmd_id); WMI_CMD_ID cmd_id);
/** /**
* wmi_unified_register_event_handler() - WMI event handler * wmi_unified_register_event_handler() - WMI event handler
@@ -167,7 +171,7 @@ wmi_unified_cmd_send(wmi_unified_t wmi_handle, wmi_buf_t buf, uint32_t buflen,
*/ */
int int
wmi_unified_register_event_handler(wmi_unified_t wmi_handle, wmi_unified_register_event_handler(wmi_unified_t wmi_handle,
WMI_EVT_ID event_id, uint32_t event_id,
wmi_unified_event_handler handler_func, wmi_unified_event_handler handler_func,
uint8_t rx_ctx); uint8_t rx_ctx);
@@ -180,11 +184,12 @@ wmi_unified_register_event_handler(wmi_unified_t wmi_handle,
*/ */
int int
wmi_unified_unregister_event_handler(wmi_unified_t wmi_handle, wmi_unified_unregister_event_handler(wmi_unified_t wmi_handle,
WMI_EVT_ID event_id); uint32_t event_id);
/** /**
* request wmi to connet its htc service. * request wmi to connet its htc service.
* @param wmi_handle : handle to WMI. * @param wmi_handle : handle to WMI.
* @param htc_handle : handle to HTC.
* @return void * @return void
*/ */
int int
@@ -193,27 +198,56 @@ wmi_unified_connect_htc_service(struct wmi_unified *wmi_handle,
/* /*
* WMI API to verify the host has enough credits to suspend * WMI API to verify the host has enough credits to suspend
* @param wmi_handle : handle to WMI.
*/ */
int wmi_is_suspend_ready(wmi_unified_t wmi_handle); int wmi_is_suspend_ready(wmi_unified_t wmi_handle);
/** /**
WMI API to get updated host_credits * WMI API to get updated host_credits
* @param wmi_handle : handle to WMI.
*/ */
int wmi_get_host_credits(wmi_unified_t wmi_handle); int wmi_get_host_credits(wmi_unified_t wmi_handle);
/** /**
WMI API to get WMI Pending Commands in the HTC queue * WMI API to get WMI Pending Commands in the HTC queue
* @param wmi_handle : handle to WMI.
*/ */
int wmi_get_pending_cmds(wmi_unified_t wmi_handle); int wmi_get_pending_cmds(wmi_unified_t wmi_handle);
/** /**
WMI API to set target suspend state * WMI API to set target suspend state
* @param wmi_handle : handle to WMI.
* @param val : suspend state boolean
*/ */
void wmi_set_target_suspend(wmi_unified_t wmi_handle, bool val); void wmi_set_target_suspend(wmi_unified_t wmi_handle, bool val);
/**
* generic function to block unified WMI command
* @param wmi_handle : handle to WMI.
* @return 0 on success and -ve on failure.
*/
int
wmi_stop(wmi_unified_t wmi_handle);
/**
* API to flush all the previous packets associated with the wmi endpoint
*
* @param wmi_handle : handle to WMI.
*/
void
wmi_flush_endpoint(wmi_unified_t wmi_handle);
/**
* API to handle wmi rx event after UMAC has taken care of execution
* context
*
* @param wmi_handle : handle to WMI.
* @param evt_buf : wmi event buffer
*/
void __wmi_control_rx(struct wmi_unified *wmi_handle, wmi_buf_t evt_buf);
#ifdef FEATURE_RUNTIME_PM #ifdef FEATURE_RUNTIME_PM
void void
wmi_set_runtime_pm_inprogress(wmi_unified_t wmi_handle, bool val); wmi_set_runtime_pm_inprogress(wmi_unified_t wmi_handle, bool val);
@@ -233,6 +267,8 @@ static inline bool wmi_get_runtime_pm_inprogress(wmi_unified_t wmi_handle)
/** /**
* UMAC Callback to process fw event. * UMAC Callback to process fw event.
* @param wmi_handle : handle to WMI.
* @param evt_buf : wmi event buffer
*/ */
void wmi_process_fw_event(struct wmi_unified *wmi_handle, wmi_buf_t evt_buf); void wmi_process_fw_event(struct wmi_unified *wmi_handle, wmi_buf_t evt_buf);
uint16_t wmi_get_max_msg_len(wmi_unified_t wmi_handle); uint16_t wmi_get_max_msg_len(wmi_unified_t wmi_handle);
@@ -296,10 +332,16 @@ QDF_STATUS wmi_unified_wow_enable_send(void *wmi_hdl,
struct wow_cmd_params *param, struct wow_cmd_params *param,
uint8_t mac_id); uint8_t mac_id);
#ifdef WMI_NON_TLV_SUPPORT
QDF_STATUS wmi_unified_packet_log_enable_send(void *wmi_hdl,
WMI_HOST_PKTLOG_EVENT PKTLOG_EVENT);
#else
QDF_STATUS wmi_unified_packet_log_enable_send(void *wmi_hdl, QDF_STATUS wmi_unified_packet_log_enable_send(void *wmi_hdl,
uint8_t macaddr[IEEE80211_ADDR_LEN], uint8_t macaddr[IEEE80211_ADDR_LEN],
struct packet_enable_params *param); struct packet_enable_params *param);
#endif
QDF_STATUS wmi_unified_packet_log_disable_send(void *wmi_hdl);
QDF_STATUS wmi_unified_suspend_send(void *wmi_hdl, QDF_STATUS wmi_unified_suspend_send(void *wmi_hdl,
struct suspend_params *param, struct suspend_params *param,
@@ -313,6 +355,10 @@ wmi_unified_pdev_param_send(void *wmi_hdl,
struct pdev_params *param, struct pdev_params *param,
uint8_t mac_id); uint8_t mac_id);
QDF_STATUS wmi_unified_beacon_tmpl_send_cmd(void *wmi_hdl,
struct beacon_tmpl_params *param);
QDF_STATUS wmi_unified_beacon_send_cmd(void *wmi_hdl, QDF_STATUS wmi_unified_beacon_send_cmd(void *wmi_hdl,
struct beacon_params *param); struct beacon_params *param);
@@ -404,8 +450,10 @@ QDF_STATUS wmi_unified_set_mcc_channel_time_latency_cmd
QDF_STATUS wmi_unified_set_enable_disable_mcc_adaptive_scheduler_cmd( QDF_STATUS wmi_unified_set_enable_disable_mcc_adaptive_scheduler_cmd(
void *wmi_hdl, uint32_t mcc_adaptive_scheduler); void *wmi_hdl, uint32_t mcc_adaptive_scheduler);
#ifndef WMI_NON_TLV_SUPPORT
QDF_STATUS wmi_unified_bcn_buf_ll_cmd(void *wmi_hdl, QDF_STATUS wmi_unified_bcn_buf_ll_cmd(void *wmi_hdl,
wmi_bcn_send_from_host_cmd_fixed_param *param); wmi_bcn_send_from_host_cmd_fixed_param *param);
#endif
QDF_STATUS wmi_unified_set_sta_sa_query_param_cmd(void *wmi_hdl, QDF_STATUS wmi_unified_set_sta_sa_query_param_cmd(void *wmi_hdl,
uint8_t vdev_id, uint32_t max_retries, uint8_t vdev_id, uint32_t max_retries,
@@ -418,10 +466,11 @@ QDF_STATUS wmi_unified_set_sta_keep_alive_cmd(void *wmi_hdl,
QDF_STATUS wmi_unified_vdev_set_gtx_cfg_cmd(void *wmi_hdl, uint32_t if_id, QDF_STATUS wmi_unified_vdev_set_gtx_cfg_cmd(void *wmi_hdl, uint32_t if_id,
struct wmi_gtx_config *gtx_info); struct wmi_gtx_config *gtx_info);
#ifndef WMI_NON_TLV_SUPPORT
QDF_STATUS wmi_unified_process_update_edca_param(void *wmi_hdl, QDF_STATUS wmi_unified_process_update_edca_param(void *wmi_hdl,
uint8_t vdev_id, uint8_t vdev_id,
wmi_wmm_vparams gwmm_param[WMI_MAX_NUM_AC]); wmi_wmm_vparams gwmm_param[WMI_MAX_NUM_AC]);
#endif
QDF_STATUS wmi_unified_probe_rsp_tmpl_send_cmd(void *wmi_hdl, QDF_STATUS wmi_unified_probe_rsp_tmpl_send_cmd(void *wmi_hdl,
@@ -451,9 +500,11 @@ QDF_STATUS wmi_unified_reset_passpoint_network_list_cmd(void *wmi_hdl,
QDF_STATUS wmi_unified_set_passpoint_network_list_cmd(void *wmi_hdl, QDF_STATUS wmi_unified_set_passpoint_network_list_cmd(void *wmi_hdl,
struct wifi_passpoint_req_param *req); struct wifi_passpoint_req_param *req);
#ifndef WMI_NON_TLV_SUPPORT
QDF_STATUS wmi_unified_roam_scan_offload_mode_cmd(void *wmi_hdl, QDF_STATUS wmi_unified_roam_scan_offload_mode_cmd(void *wmi_hdl,
wmi_start_scan_cmd_fixed_param *scan_cmd_fp, wmi_start_scan_cmd_fixed_param *scan_cmd_fp,
struct roam_offload_scan_params *roam_req); struct roam_offload_scan_params *roam_req);
#endif
QDF_STATUS wmi_unified_roam_scan_offload_rssi_thresh_cmd(void *wmi_hdl, QDF_STATUS wmi_unified_roam_scan_offload_rssi_thresh_cmd(void *wmi_hdl,
struct roam_offload_scan_rssi_params *roam_req); struct roam_offload_scan_rssi_params *roam_req);
@@ -500,9 +551,11 @@ QDF_STATUS wmi_unified_plm_start_cmd(void *wmi_hdl,
QDF_STATUS wmi_unified_pno_stop_cmd(void *wmi_hdl, uint8_t vdev_id); QDF_STATUS wmi_unified_pno_stop_cmd(void *wmi_hdl, uint8_t vdev_id);
#ifdef FEATURE_WLAN_SCAN_PNO
QDF_STATUS wmi_unified_pno_start_cmd(void *wmi_hdl, QDF_STATUS wmi_unified_pno_start_cmd(void *wmi_hdl,
struct pno_scan_req_params *pno, struct pno_scan_req_params *pno,
uint32_t *gchannel_freq_list); uint32_t *gchannel_freq_list);
#endif
QDF_STATUS wmi_unified_set_ric_req_cmd(void *wmi_hdl, void *msg, QDF_STATUS wmi_unified_set_ric_req_cmd(void *wmi_hdl, void *msg,
uint8_t is_add_ts); uint8_t is_add_ts);
@@ -529,6 +582,7 @@ QDF_STATUS wmi_unified_snr_cmd(void *wmi_hdl, uint8_t vdev_id);
QDF_STATUS wmi_unified_link_status_req_cmd(void *wmi_hdl, QDF_STATUS wmi_unified_link_status_req_cmd(void *wmi_hdl,
struct link_status_params *link_status); struct link_status_params *link_status);
#ifndef WMI_NON_TLV_SUPPORT
QDF_STATUS wmi_unified_lphb_config_hbenable_cmd(void *wmi_hdl, QDF_STATUS wmi_unified_lphb_config_hbenable_cmd(void *wmi_hdl,
wmi_hb_set_enable_cmd_fixed_param *params); wmi_hb_set_enable_cmd_fixed_param *params);
@@ -542,16 +596,17 @@ QDF_STATUS wmi_unified_lphb_config_udp_params_cmd(void *wmi_hdl,
wmi_hb_set_udp_params_cmd_fixed_param *lphb_conf_req); wmi_hb_set_udp_params_cmd_fixed_param *lphb_conf_req);
QDF_STATUS wmi_unified_lphb_config_udp_pkt_filter_cmd(void *wmi_hdl, QDF_STATUS wmi_unified_lphb_config_udp_pkt_filter_cmd(void *wmi_hdl,
wmi_hb_set_udp_pkt_filter_cmd_fixed_param *lphb_conf_req); wmi_hb_set_udp_pkt_filter_cmd_fixed_param *lphb_conf_req);
QDF_STATUS wmi_unified_process_dhcp_ind(void *wmi_hdl, QDF_STATUS wmi_unified_process_dhcp_ind(void *wmi_hdl,
wmi_peer_set_param_cmd_fixed_param *ta_dhcp_ind); wmi_peer_set_param_cmd_fixed_param *ta_dhcp_ind);
QDF_STATUS wmi_unified_get_link_speed_cmd(void *wmi_hdl, QDF_STATUS wmi_unified_get_link_speed_cmd(void *wmi_hdl,
wmi_mac_addr peer_macaddr); wmi_mac_addr peer_macaddr);
QDF_STATUS wmi_unified_egap_conf_params_cmd(void *wmi_hdl, QDF_STATUS wmi_unified_egap_conf_params_cmd(void *wmi_hdl,
wmi_ap_ps_egap_param_cmd_fixed_param *egap_params); wmi_ap_ps_egap_param_cmd_fixed_param *egap_params);
#endif
QDF_STATUS wmi_unified_fw_profiling_data_cmd(void *wmi_hdl, QDF_STATUS wmi_unified_fw_profiling_data_cmd(void *wmi_hdl,
uint32_t cmd, uint32_t value1, uint32_t value2); uint32_t cmd, uint32_t value1, uint32_t value2);
@@ -571,9 +626,11 @@ QDF_STATUS wmi_unified_start_oem_data_cmd(void *wmi_hdl,
QDF_STATUS wmi_unified_dfs_phyerr_filter_offload_en_cmd(void *wmi_hdl, QDF_STATUS wmi_unified_dfs_phyerr_filter_offload_en_cmd(void *wmi_hdl,
bool dfs_phyerr_filter_offload); bool dfs_phyerr_filter_offload);
#ifndef WMI_NON_TLV_SUPPORT
QDF_STATUS wmi_unified_pktlog_wmi_send_cmd(void *wmi_hdl, QDF_STATUS wmi_unified_pktlog_wmi_send_cmd(void *wmi_hdl,
WMI_PKTLOG_EVENT pktlog_event, WMI_PKTLOG_EVENT pktlog_event,
WMI_CMD_ID cmd_id); WMI_CMD_ID cmd_id);
#endif
QDF_STATUS wmi_unified_add_wow_wakeup_event_cmd(void *wmi_hdl, QDF_STATUS wmi_unified_add_wow_wakeup_event_cmd(void *wmi_hdl,
uint32_t vdev_id, uint32_t vdev_id,
@@ -608,9 +665,9 @@ QDF_STATUS wmi_unified_config_packet_filter_cmd(void *wmi_hdl,
uint8_t filter_id, bool enable); uint8_t filter_id, bool enable);
QDF_STATUS wmi_unified_add_clear_mcbc_filter_cmd(void *wmi_hdl, QDF_STATUS wmi_unified_add_clear_mcbc_filter_cmd(void *wmi_hdl,
uint8_t vdev_id, uint8_t vdev_id,
struct qdf_mac_addr multicast_addr, struct qdf_mac_addr multicast_addr,
bool clearList); bool clearList);
QDF_STATUS wmi_unified_send_gtk_offload_cmd(void *wmi_hdl, uint8_t vdev_id, QDF_STATUS wmi_unified_send_gtk_offload_cmd(void *wmi_hdl, uint8_t vdev_id,
struct gtk_offload_params *params, struct gtk_offload_params *params,
@@ -740,9 +797,11 @@ QDF_STATUS wmi_unified_roam_invoke_cmd(void *wmi_hdl,
QDF_STATUS wmi_unified_roam_scan_offload_cmd(void *wmi_hdl, QDF_STATUS wmi_unified_roam_scan_offload_cmd(void *wmi_hdl,
uint32_t command, uint32_t vdev_id); uint32_t command, uint32_t vdev_id);
#ifndef WMI_NON_TLV_SUPPORT
QDF_STATUS wmi_unified_send_roam_scan_offload_ap_cmd(void *wmi_hdl, QDF_STATUS wmi_unified_send_roam_scan_offload_ap_cmd(void *wmi_hdl,
wmi_ap_profile *ap_profile_p, wmi_ap_profile *ap_profile_p,
uint32_t vdev_id); uint32_t vdev_id);
#endif
QDF_STATUS wmi_unified_roam_scan_offload_scan_period(void *wmi_hdl, QDF_STATUS wmi_unified_roam_scan_offload_scan_period(void *wmi_hdl,
uint32_t scan_period, uint32_t scan_period,
@@ -763,4 +822,407 @@ QDF_STATUS wmi_unified_roam_scan_offload_rssi_change_cmd(void *wmi_hdl,
QDF_STATUS wmi_unified_get_buf_extscan_hotlist_cmd(void *wmi_hdl, QDF_STATUS wmi_unified_get_buf_extscan_hotlist_cmd(void *wmi_hdl,
struct ext_scan_setbssi_hotlist_params * struct ext_scan_setbssi_hotlist_params *
photlist, int *buf_len); photlist, int *buf_len);
QDF_STATUS wmi_unified_stats_request_send(void *wmi_hdl,
uint8_t macaddr[IEEE80211_ADDR_LEN],
struct stats_request_params *param);
QDF_STATUS wmi_unified_pdev_get_tpc_config_cmd_send(void *wmi_hdl,
uint32_t param);
QDF_STATUS wmi_unified_set_atf_cmd_send(void *wmi_hdl,
struct set_atf_params *param);
QDF_STATUS wmi_unified_pdev_fips_cmd_send(void *wmi_hdl,
struct fips_params *param);
QDF_STATUS wmi_unified_wlan_profile_enable_cmd_send(void *wmi_hdl,
struct wlan_profile_params *param);
QDF_STATUS wmi_unified_wlan_profile_trigger_cmd_send(void *wmi_hdl,
struct wlan_profile_params *param);
QDF_STATUS wmi_unified_set_chan_cmd_send(void *wmi_hdl,
struct channel_param *param);
QDF_STATUS wmi_unified_set_ht_ie_cmd_send(void *wmi_hdl,
struct ht_ie_params *param);
QDF_STATUS wmi_unified_set_vht_ie_cmd_send(void *wmi_hdl,
struct vht_ie_params *param);
QDF_STATUS wmi_unified_wmm_update_cmd_send(void *wmi_hdl,
struct wmm_update_params *param);
QDF_STATUS wmi_unified_set_ant_switch_tbl_cmd_send(void *wmi_hdl,
struct ant_switch_tbl_params *param);
QDF_STATUS wmi_unified_set_ratepwr_table_cmd_send(void *wmi_hdl,
struct ratepwr_table_params *param);
QDF_STATUS wmi_unified_get_ratepwr_table_cmd_send(void *wmi_hdl);
QDF_STATUS wmi_unified_set_ctl_table_cmd_send(void *wmi_hdl,
struct ctl_table_params *param);
QDF_STATUS wmi_unified_set_mimogain_table_cmd_send(void *wmi_hdl,
struct mimogain_table_params *param);
QDF_STATUS wmi_unified_set_ratepwr_chainmsk_cmd_send(void *wmi_hdl,
struct ratepwr_chainmsk_params *param);
QDF_STATUS wmi_unified_set_macaddr_cmd_send(void *wmi_hdl,
struct macaddr_params *param);
QDF_STATUS wmi_unified_pdev_scan_start_cmd_send(void *wmi_hdl);
QDF_STATUS wmi_unified_pdev_scan_end_cmd_send(void *wmi_hdl);
QDF_STATUS wmi_unified_set_acparams_cmd_send(void *wmi_hdl,
struct acparams_params *param);
QDF_STATUS wmi_unified_set_vap_dscp_tid_map_cmd_send(void *wmi_hdl,
struct vap_dscp_tid_map_params *param);
QDF_STATUS wmi_unified_proxy_ast_reserve_cmd_send(void *wmi_hdl,
struct proxy_ast_reserve_params *param);
QDF_STATUS wmi_unified_pdev_qvit_cmd_send(void *wmi_hdl,
struct pdev_qvit_params *param);
QDF_STATUS wmi_unified_mcast_group_update_cmd_send(void *wmi_hdl,
struct mcast_group_update_params *param);
QDF_STATUS wmi_unified_peer_add_wds_entry_cmd_send(void *wmi_hdl,
struct peer_add_wds_entry_params *param);
QDF_STATUS wmi_unified_peer_del_wds_entry_cmd_send(void *wmi_hdl,
struct peer_del_wds_entry_params *param);
QDF_STATUS wmi_unified_peer_update_wds_entry_cmd_send(void *wmi_hdl,
struct peer_update_wds_entry_params *param);
QDF_STATUS wmi_unified_phyerr_enable_cmd_send(void *wmi_hdl);
QDF_STATUS wmi_unified_phyerr_enable_cmd_send(void *wmi_hdl);
QDF_STATUS wmi_unified_phyerr_disable_cmd_send(void *wmi_hdl);
QDF_STATUS wmi_unified_smart_ant_enable_cmd_send(void *wmi_hdl,
struct smart_ant_enable_params *param);
QDF_STATUS wmi_unified_smart_ant_set_rx_ant_cmd_send(void *wmi_hdl,
struct smart_ant_rx_ant_params *param);
QDF_STATUS wmi_unified_smart_ant_set_tx_ant_cmd_send(void *wmi_hdl,
uint8_t macaddr[IEEE80211_ADDR_LEN],
struct smart_ant_tx_ant_params *param);
QDF_STATUS wmi_unified_smart_ant_set_training_info_cmd_send(void *wmi_hdl,
uint8_t macaddr[IEEE80211_ADDR_LEN],
struct smart_ant_training_info_params *param);
QDF_STATUS wmi_unified_smart_ant_node_config_cmd_send(void *wmi_hdl,
uint8_t macaddr[IEEE80211_ADDR_LEN],
struct smart_ant_node_config_params *param);
QDF_STATUS wmi_unified_smart_ant_enable_tx_feedback_cmd_send(void *wmi_hdl,
struct smart_ant_enable_tx_feedback_params *param);
QDF_STATUS wmi_unified_vdev_spectral_configure_cmd_send(void *wmi_hdl,
struct vdev_spectral_configure_params *param);
QDF_STATUS wmi_unified_vdev_spectral_enable_cmd_send(void *wmi_hdl,
struct vdev_spectral_enable_params *param);
QDF_STATUS wmi_unified_bss_chan_info_request_cmd_send(void *wmi_hdl,
struct bss_chan_info_request_params *param);
QDF_STATUS wmi_unified_thermal_mitigation_param_cmd_send(void *wmi_hdl,
struct thermal_mitigation_params *param);
QDF_STATUS wmi_unified_vdev_set_neighbour_rx_cmd_send(void *wmi_hdl,
uint8_t macaddr[IEEE80211_ADDR_LEN],
struct set_neighbour_rx_params *param);
QDF_STATUS wmi_unified_vdev_set_fwtest_param_cmd_send(void *wmi_hdl,
struct set_fwtest_params *param);
QDF_STATUS wmi_unified_vdev_config_ratemask_cmd_send(void *wmi_hdl,
struct config_ratemask_params *param);
QDF_STATUS wmi_unified_vdev_install_key_cmd_send(void *wmi_hdl,
uint8_t macaddr[IEEE80211_ADDR_LEN],
struct vdev_install_key_params *param);
QDF_STATUS wmi_unified_pdev_set_regdomain_cmd_send(void *wmi_hdl,
struct pdev_set_regdomain_params *param);
QDF_STATUS wmi_unified_set_quiet_mode_cmd_send(void *wmi_hdl,
struct set_quiet_mode_params *param);
QDF_STATUS wmi_unified_set_beacon_filter_cmd_send(void *wmi_hdl,
struct set_beacon_filter_params *param);
QDF_STATUS wmi_unified_remove_beacon_filter_cmd_send(void *wmi_hdl,
struct remove_beacon_filter_params *param);
QDF_STATUS wmi_unified_addba_clearresponse_cmd_send(void *wmi_hdl,
uint8_t macaddr[IEEE80211_ADDR_LEN],
struct addba_clearresponse_params *param);
QDF_STATUS wmi_unified_addba_send_cmd_send(void *wmi_hdl,
uint8_t macaddr[IEEE80211_ADDR_LEN],
struct addba_send_params *param);
QDF_STATUS wmi_unified_delba_send_cmd_send(void *wmi_hdl,
uint8_t macaddr[IEEE80211_ADDR_LEN],
struct delba_send_params *param);
QDF_STATUS wmi_unified_addba_setresponse_cmd_send(void *wmi_hdl,
uint8_t macaddr[IEEE80211_ADDR_LEN],
struct addba_setresponse_params *param);
QDF_STATUS wmi_unified_singleamsdu_cmd_send(void *wmi_hdl,
uint8_t macaddr[IEEE80211_ADDR_LEN],
struct singleamsdu_params *param);
QDF_STATUS wmi_unified_set_qboost_param_cmd_send(void *wmi_hdl,
uint8_t macaddr[IEEE80211_ADDR_LEN],
struct set_qboost_params *param);
QDF_STATUS wmi_unified_mu_scan_cmd_send(void *wmi_hdl,
struct mu_scan_params *param);
QDF_STATUS wmi_unified_lteu_config_cmd_send(void *wmi_hdl,
struct lteu_config_params *param);
QDF_STATUS wmi_unified_set_psmode_cmd_send(void *wmi_hdl,
struct set_ps_mode_params *param);
QDF_STATUS wmi_unified_init_cmd_send(void *wmi_hdl,
target_resource_config *res_cfg,
uint8_t num_mem_chunks,
struct wmi_host_mem_chunk *mem_chunk);
bool wmi_service_enabled(void *wmi_hdl, uint32_t service_id);
QDF_STATUS wmi_save_service_bitmap(void *wmi_hdl, void *evt_buf);
QDF_STATUS wmi_save_fw_version(void *wmi_hdl, void *evt_buf);
QDF_STATUS wmi_get_target_cap_from_service_ready(void *wmi_hdl,
void *evt_buf, target_capability_info *ev);
QDF_STATUS wmi_extract_hal_reg_cap(void *wmi_hdl, void *evt_buf,
TARGET_HAL_REG_CAPABILITIES *hal_reg_cap);
host_mem_req *wmi_extract_host_mem_req_from_service_ready(void *wmi_hdl,
void *evt_buf, uint8_t *num_entries);
uint32_t wmi_ready_extract_init_status(void *wmi_hdl, void *ev);
QDF_STATUS wmi_ready_extract_mac_addr(void *wmi_hdl,
void *ev, uint8_t *macaddr);
QDF_STATUS wmi_extract_fw_version(void *wmi_hdl,
void *ev, struct wmi_host_fw_ver *fw_ver);
QDF_STATUS wmi_extract_fw_abi_version(void *wmi_hdl,
void *ev, struct wmi_host_fw_abi_ver *fw_ver);
QDF_STATUS wmi_check_and_update_fw_version(void *wmi_hdl, void *ev);
uint8_t *wmi_extract_dbglog_data_len(void *wmi_hdl,
void *evt_b, uint16_t *len);
QDF_STATUS wmi_send_ext_resource_config(void *wmi_hdl,
wmi_host_ext_resource_config *ext_cfg);
QDF_STATUS wmi_unified_nf_dbr_dbm_info_get_cmd_send(void *wmi_hdl);
QDF_STATUS wmi_unified_packet_power_info_get_cmd_send(void *wmi_hdl,
struct packet_power_info_params *param);
QDF_STATUS wmi_unified_gpio_config_cmd_send(void *wmi_hdl,
struct gpio_config_params *param);
QDF_STATUS wmi_unified_gpio_output_cmd_send(void *wmi_hdl,
struct gpio_output_params *param);
QDF_STATUS wmi_unified_rtt_meas_req_test_cmd_send(void *wmi_hdl,
struct rtt_meas_req_test_params *param);
QDF_STATUS wmi_unified_rtt_meas_req_cmd_send(void *wmi_hdl,
struct rtt_meas_req_params *param);
QDF_STATUS wmi_unified_rtt_keepalive_req_cmd_send(void *wmi_hdl,
struct rtt_keepalive_req_params *param);
QDF_STATUS wmi_unified_lci_set_cmd_send(void *wmi_hdl,
struct lci_set_params *param);
QDF_STATUS wmi_unified_lcr_set_cmd_send(void *wmi_hdl,
struct lcr_set_params *param);
QDF_STATUS wmi_unified_send_periodic_chan_stats_config_cmd(void *wmi_hdl,
struct periodic_chan_stats_params *param);
QDF_STATUS
wmi_send_atf_peer_request_cmd(void *wmi_hdl,
struct atf_peer_request_params *param);
QDF_STATUS
wmi_send_set_atf_grouping_cmd(void *wmi_hdl,
struct atf_grouping_params *param);
/* Extract APIs */
QDF_STATUS wmi_extract_wds_addr_event(void *wmi_hdl,
void *evt_buf, uint16_t len, wds_addr_event_t *wds_ev);
QDF_STATUS wmi_extract_dcs_interference_type(void *wmi_hdl,
void *evt_buf, uint32_t *interference_type);
QDF_STATUS wmi_extract_dcs_cw_int(void *wmi_hdl, void *evt_buf,
wmi_host_ath_dcs_cw_int *cw_int);
QDF_STATUS wmi_extract_dcs_im_tgt_stats(void *wmi_hdl, void *evt_buf,
wmi_host_dcs_im_tgt_stats_t *wlan_stat);
QDF_STATUS wmi_extract_fips_event_error_status(void *wmi_hdl, void *evt_buf,
uint32_t *err_status);
QDF_STATUS wmi_extract_fips_event_data(void *wmi_hdl, void *evt_buf,
uint32_t *data_len, uint32_t **data);
QDF_STATUS wmi_extract_vdev_start_resp(void *wmi_hdl, void *evt_buf,
wmi_host_vdev_start_resp *vdev_rsp);
QDF_STATUS wmi_extract_tbttoffset_update_params(void *wmi_hdl, void *evt_buf,
uint32_t *vdev_map, uint32_t **tbttoffset_list);
QDF_STATUS wmi_extract_mgmt_rx_params(void *wmi_hdl, void *evt_buf,
wmi_host_mgmt_rx_hdr *hdr, uint8_t **bufp);
QDF_STATUS wmi_extract_vdev_stopped_param(void *wmi_hdl, void *evt_buf,
uint32_t *vdev_id);
QDF_STATUS wmi_extract_vdev_roam_param(void *wmi_hdl, void *evt_buf,
wmi_host_roam_event *ev);
QDF_STATUS wmi_extract_vdev_scan_ev_param(void *wmi_hdl, void *evt_buf,
wmi_host_scan_event *param);
QDF_STATUS wmi_extract_mu_ev_param(void *wmi_hdl, void *evt_buf,
wmi_host_mu_report_event *param);
QDF_STATUS wmi_extract_pdev_tpc_config_ev_param(void *wmi_hdl, void *evt_buf,
wmi_host_pdev_tpc_config_event *param);
QDF_STATUS wmi_extract_gpio_input_ev_param(void *wmi_hdl,
void *evt_buf, uint32_t *gpio_num);
QDF_STATUS wmi_extract_pdev_reserve_ast_ev_param(void *wmi_hdl,
void *evt_buf, uint32_t *result);
QDF_STATUS wmi_extract_nfcal_power_ev_param(void *wmi_hdl, void *evt_buf,
wmi_host_pdev_nfcal_power_all_channels_event *param);
QDF_STATUS wmi_extract_pdev_tpc_ev_param(void *wmi_hdl, void *evt_buf,
wmi_host_pdev_tpc_event *param);
QDF_STATUS wmi_extract_pdev_generic_buffer_ev_param(void *wmi_hdl,
void *evt_buf,
wmi_host_pdev_generic_buffer_event *param);
QDF_STATUS wmi_extract_mgmt_tx_compl_param(void *wmi_hdl, void *evt_buf,
wmi_host_mgmt_tx_compl_event *param);
QDF_STATUS wmi_extract_swba_vdev_map(void *wmi_hdl, void *evt_buf,
uint32_t *vdev_map);
QDF_STATUS wmi_extract_swba_tim_info(void *wmi_hdl, void *evt_buf,
uint32_t idx, wmi_host_tim_info *tim_info);
QDF_STATUS wmi_extract_swba_noa_info(void *wmi_hdl, void *evt_buf,
uint32_t idx, wmi_host_p2p_noa_info *p2p_desc);
QDF_STATUS wmi_extract_peer_sta_ps_statechange_ev(void *wmi_hdl,
void *evt_buf, wmi_host_peer_sta_ps_statechange_event *ev);
QDF_STATUS wmi_extract_peer_sta_kickout_ev(void *wmi_hdl, void *evt_buf,
wmi_host_peer_sta_kickout_event *ev);
QDF_STATUS wmi_extract_peer_ratecode_list_ev(void *wmi_hdl, void *evt_buf,
uint8_t *peer_mac, wmi_sa_rate_cap *rate_cap);
QDF_STATUS wmi_extract_rtt_hdr(void *wmi_hdl, void *evt_buf,
wmi_host_rtt_event_hdr *ev);
QDF_STATUS wmi_extract_rtt_ev(void *wmi_hdl, void *evt_buf,
wmi_host_rtt_meas_event *ev, uint8_t *hdump,
uint16_t hdump_len);
QDF_STATUS wmi_extract_rtt_error_report_ev(void *wmi_hdl, void *evt_buf,
wmi_host_rtt_error_report_event *ev);
QDF_STATUS wmi_extract_thermal_stats(void *wmi_hdl, void *evt_buf,
uint32_t *temp, uint32_t *level);
QDF_STATUS wmi_extract_thermal_level_stats(void *wmi_hdl, void *evt_buf,
uint8_t idx, uint32_t *levelcount, uint32_t *dccount);
QDF_STATUS wmi_extract_comb_phyerr(void *wmi_hdl, void *evt_buf,
uint16_t datalen, uint16_t *buf_offset,
wmi_host_phyerr_t *phyerr);
QDF_STATUS wmi_extract_single_phyerr(void *wmi_hdl, void *evt_buf,
uint16_t datalen, uint16_t *buf_offset,
wmi_host_phyerr_t *phyerr);
QDF_STATUS wmi_extract_composite_phyerr(void *wmi_hdl, void *evt_buf,
uint16_t datalen, wmi_host_phyerr_t *phyerr);
QDF_STATUS wmi_extract_profile_ctx(void *wmi_hdl, void *evt_buf,
wmi_host_wlan_profile_ctx_t *profile_ctx);
QDF_STATUS wmi_extract_profile_data(void *wmi_hdl, void *evt_buf,
wmi_host_wlan_profile_t *profile_data);
QDF_STATUS wmi_extract_chan_info_event(void *wmi_hdl, void *evt_buf,
wmi_host_chan_info_event *chan_info);
QDF_STATUS wmi_extract_channel_hopping_event(void *wmi_hdl, void *evt_buf,
wmi_host_pdev_channel_hopping_event *ch_hopping);
QDF_STATUS wmi_extract_stats_param(void *wmi_hdl, void *evt_buf,
wmi_host_stats_event *stats_param);
QDF_STATUS wmi_extract_pdev_stats(void *wmi_hdl, void *evt_buf,
uint32_t index,
wmi_host_pdev_stats *pdev_stats);
QDF_STATUS wmi_extract_pdev_ext_stats(void *wmi_hdl, void *evt_buf,
uint32_t index,
wmi_host_pdev_ext_stats *pdev_ext_stats);
QDF_STATUS wmi_extract_peer_extd_stats(void *wmi_hdl, void *evt_buf,
uint32_t index,
wmi_host_peer_extd_stats *peer_extd_stats);
QDF_STATUS wmi_extract_bss_chan_info_event(void *wmi_hdl, void *evt_buf,
wmi_host_pdev_bss_chan_info_event *bss_chan_info);
QDF_STATUS wmi_extract_inst_rssi_stats_event(void *wmi_hdl, void *evt_buf,
wmi_host_inst_stats_resp *inst_rssi_resp);
QDF_STATUS wmi_extract_peer_stats(void *wmi_hdl, void *evt_buf,
uint32_t index, wmi_host_peer_stats *peer_stats);
QDF_STATUS wmi_extract_tx_data_traffic_ctrl_ev(void *wmi_hdl, void *evt_buf,
wmi_host_tx_data_traffic_ctrl_event *ev);
QDF_STATUS wmi_extract_vdev_stats(void *wmi_hdl, void *evt_buf,
uint32_t index, wmi_host_vdev_stats *vdev_stats);
QDF_STATUS wmi_extract_vdev_extd_stats(void *wmi_hdl, void *evt_buf,
uint32_t index, wmi_host_vdev_extd_stats *vdev_extd_stats);
#endif /* _WMI_UNIFIED_API_H_ */ #endif /* _WMI_UNIFIED_API_H_ */

View File

@@ -108,10 +108,6 @@ QDF_STATUS send_stats_request_cmd_non_tlv(wmi_unified_t wmi_handle,
uint8_t macaddr[IEEE80211_ADDR_LEN], uint8_t macaddr[IEEE80211_ADDR_LEN],
struct stats_request_params *param); struct stats_request_params *param);
QDF_STATUS send_packet_log_enable_cmd_non_tlv(wmi_unified_t wmi_handle,
uint8_t macaddr[IEEE80211_ADDR_LEN],
struct packet_enable_params *param);
QDF_STATUS send_beacon_send_cmd_non_tlv(wmi_unified_t wmi_handle, QDF_STATUS send_beacon_send_cmd_non_tlv(wmi_unified_t wmi_handle,
struct beacon_params *param); struct beacon_params *param);

File diff suppressed because it is too large Load Diff

View File

@@ -35,6 +35,7 @@
#include "a_types.h" #include "a_types.h"
#include "wmi.h" #include "wmi.h"
#include "wmi_unified.h" #include "wmi_unified.h"
#include "wmi_unified_param.h"
#include "qdf_atomic.h" #include "qdf_atomic.h"
#define WMI_UNIFIED_MAX_EVENT 0x100 #define WMI_UNIFIED_MAX_EVENT 0x100
@@ -152,13 +153,23 @@ QDF_STATUS (*send_stats_request_cmd)(wmi_unified_t wmi_handle,
uint8_t macaddr[IEEE80211_ADDR_LEN], uint8_t macaddr[IEEE80211_ADDR_LEN],
struct stats_request_params *param); struct stats_request_params *param);
#ifdef WMI_NON_TLV_SUPPORT
QDF_STATUS (*send_packet_log_enable_cmd)(wmi_unified_t wmi_handle,
WMI_HOST_PKTLOG_EVENT PKTLOG_EVENT);
#else
QDF_STATUS (*send_packet_log_enable_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_packet_log_enable_cmd)(wmi_unified_t wmi_handle,
uint8_t macaddr[IEEE80211_ADDR_LEN], uint8_t macaddr[IEEE80211_ADDR_LEN],
struct packet_enable_params *param); struct packet_enable_params *param);
#endif
QDF_STATUS (*send_packet_log_disable_cmd)(wmi_unified_t wmi_handle);
QDF_STATUS (*send_beacon_send_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_beacon_send_cmd)(wmi_unified_t wmi_handle,
struct beacon_params *param); struct beacon_params *param);
QDF_STATUS (*send_beacon_tmpl_send_cmd)(wmi_unified_t wmi_handle,
struct beacon_tmpl_params *param);
QDF_STATUS (*send_peer_assoc_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_peer_assoc_cmd)(wmi_unified_t wmi_handle,
struct peer_assoc_params *param); struct peer_assoc_params *param);
@@ -251,9 +262,11 @@ QDF_STATUS (*send_probe_rsp_tmpl_send_cmd)(wmi_unified_t wmi_handle,
QDF_STATUS (*send_setup_install_key_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_setup_install_key_cmd)(wmi_unified_t wmi_handle,
struct set_key_params *key_params); struct set_key_params *key_params);
#ifndef WMI_NON_TLV_SUPPORT
QDF_STATUS (*send_process_update_edca_param_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_process_update_edca_param_cmd)(wmi_unified_t wmi_handle,
uint8_t vdev_id, uint8_t vdev_id,
wmi_wmm_vparams gwmm_param[WMI_MAX_NUM_AC]); wmi_wmm_vparams gwmm_param[WMI_MAX_NUM_AC]);
#endif
QDF_STATUS (*send_vdev_set_gtx_cfg_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_vdev_set_gtx_cfg_cmd)(wmi_unified_t wmi_handle,
uint32_t if_id, uint32_t if_id,
@@ -265,9 +278,10 @@ QDF_STATUS (*send_set_sta_keep_alive_cmd)(wmi_unified_t wmi_handle,
QDF_STATUS (*send_set_sta_sa_query_param_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_set_sta_sa_query_param_cmd)(wmi_unified_t wmi_handle,
uint8_t vdev_id, uint32_t max_retries, uint8_t vdev_id, uint32_t max_retries,
uint32_t retry_interval); uint32_t retry_interval);
#ifndef WMI_NON_TLV_SUPPORT
QDF_STATUS (*send_bcn_buf_ll_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_bcn_buf_ll_cmd)(wmi_unified_t wmi_handle,
wmi_bcn_send_from_host_cmd_fixed_param *param); wmi_bcn_send_from_host_cmd_fixed_param *param);
#endif
QDF_STATUS (*send_set_gateway_params_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_set_gateway_params_cmd)(wmi_unified_t wmi_handle,
struct gateway_update_req_param *req); struct gateway_update_req_param *req);
@@ -280,10 +294,11 @@ QDF_STATUS (*send_scan_probe_setoui_cmd)(wmi_unified_t wmi_handle,
QDF_STATUS (*send_reset_passpoint_network_list_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_reset_passpoint_network_list_cmd)(wmi_unified_t wmi_handle,
struct wifi_passpoint_req_param *req); struct wifi_passpoint_req_param *req);
#ifndef WMI_NON_TLV_SUPPORT
QDF_STATUS (*send_roam_scan_offload_mode_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_roam_scan_offload_mode_cmd)(wmi_unified_t wmi_handle,
wmi_start_scan_cmd_fixed_param *scan_cmd_fp, wmi_start_scan_cmd_fixed_param *scan_cmd_fp,
struct roam_offload_scan_params *roam_req); struct roam_offload_scan_params *roam_req);
#endif
QDF_STATUS (*send_roam_scan_offload_rssi_thresh_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_roam_scan_offload_rssi_thresh_cmd)(wmi_unified_t wmi_handle,
struct roam_offload_scan_rssi_params *roam_req); struct roam_offload_scan_rssi_params *roam_req);
@@ -322,6 +337,7 @@ QDF_STATUS (*send_start_extscan_cmd)(wmi_unified_t wmi_handle,
QDF_STATUS (*send_plm_stop_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_plm_stop_cmd)(wmi_unified_t wmi_handle,
const struct plm_req_params *plm); const struct plm_req_params *plm);
QDF_STATUS (*send_plm_start_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_plm_start_cmd)(wmi_unified_t wmi_handle,
const struct plm_req_params *plm, const struct plm_req_params *plm,
uint32_t *gchannel_list); uint32_t *gchannel_list);
@@ -331,9 +347,11 @@ QDF_STATUS (*send_csa_offload_enable_cmd)(wmi_unified_t wmi_handle,
QDF_STATUS (*send_pno_stop_cmd)(wmi_unified_t wmi_handle, uint8_t vdev_id); QDF_STATUS (*send_pno_stop_cmd)(wmi_unified_t wmi_handle, uint8_t vdev_id);
#ifdef FEATURE_WLAN_SCAN_PNO
QDF_STATUS (*send_pno_start_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_pno_start_cmd)(wmi_unified_t wmi_handle,
struct pno_scan_req_params *pno, struct pno_scan_req_params *pno,
uint32_t *gchannel_freq_list); uint32_t *gchannel_freq_list);
#endif
QDF_STATUS (*send_ipa_offload_control_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_ipa_offload_control_cmd)(wmi_unified_t wmi_handle,
struct ipa_offload_control_params *ipa_offload); struct ipa_offload_control_params *ipa_offload);
@@ -363,7 +381,7 @@ QDF_STATUS (*send_snr_cmd)(wmi_unified_t wmi_handle, uint8_t vdev_id);
QDF_STATUS (*send_link_status_req_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_link_status_req_cmd)(wmi_unified_t wmi_handle,
struct link_status_params *link_status); struct link_status_params *link_status);
#ifndef WMI_NON_TLV_SUPPORT
QDF_STATUS (*send_lphb_config_hbenable_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_lphb_config_hbenable_cmd)(wmi_unified_t wmi_handle,
wmi_hb_set_enable_cmd_fixed_param *params); wmi_hb_set_enable_cmd_fixed_param *params);
@@ -387,6 +405,7 @@ QDF_STATUS (*send_get_link_speed_cmd)(wmi_unified_t wmi_handle,
QDF_STATUS (*send_egap_conf_params_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_egap_conf_params_cmd)(wmi_unified_t wmi_handle,
wmi_ap_ps_egap_param_cmd_fixed_param *egap_params); wmi_ap_ps_egap_param_cmd_fixed_param *egap_params);
#endif
QDF_STATUS (*send_fw_profiling_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_fw_profiling_cmd)(wmi_unified_t wmi_handle,
uint32_t cmd, uint32_t value1, uint32_t value2); uint32_t cmd, uint32_t value1, uint32_t value2);
@@ -404,10 +423,11 @@ QDF_STATUS (*send_start_oem_data_cmd)(wmi_unified_t wmi_handle,
QDF_STATUS QDF_STATUS
(*send_dfs_phyerr_filter_offload_en_cmd)(wmi_unified_t wmi_handle, (*send_dfs_phyerr_filter_offload_en_cmd)(wmi_unified_t wmi_handle,
bool dfs_phyerr_filter_offload); bool dfs_phyerr_filter_offload);
#ifndef WMI_NON_TLV_SUPPORT
QDF_STATUS (*send_pktlog_wmi_send_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_pktlog_wmi_send_cmd)(wmi_unified_t wmi_handle,
WMI_PKTLOG_EVENT pktlog_event, WMI_PKTLOG_EVENT pktlog_event,
WMI_CMD_ID cmd_id); WMI_CMD_ID cmd_id);
#endif
QDF_STATUS (*send_add_wow_wakeup_event_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_add_wow_wakeup_event_cmd)(wmi_unified_t wmi_handle,
uint32_t vdev_id, uint32_t vdev_id,
@@ -564,10 +584,11 @@ QDF_STATUS (*send_roam_invoke_cmd)(wmi_unified_t wmi_handle,
QDF_STATUS (*send_roam_scan_offload_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_roam_scan_offload_cmd)(wmi_unified_t wmi_handle,
uint32_t command, uint32_t vdev_id); uint32_t command, uint32_t vdev_id);
#ifndef WMI_NON_TLV_SUPPORT
QDF_STATUS (*send_roam_scan_offload_ap_profile_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_roam_scan_offload_ap_profile_cmd)(wmi_unified_t wmi_handle,
wmi_ap_profile *ap_profile_p, wmi_ap_profile *ap_profile_p,
uint32_t vdev_id); uint32_t vdev_id);
#endif
QDF_STATUS (*send_roam_scan_offload_scan_period_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_roam_scan_offload_scan_period_cmd)(wmi_unified_t wmi_handle,
uint32_t scan_period, uint32_t scan_period,
@@ -588,6 +609,431 @@ QDF_STATUS (*send_roam_scan_offload_rssi_change_cmd)(wmi_unified_t wmi_handle,
QDF_STATUS (*send_get_buf_extscan_hotlist_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_get_buf_extscan_hotlist_cmd)(wmi_unified_t wmi_handle,
struct ext_scan_setbssi_hotlist_params * struct ext_scan_setbssi_hotlist_params *
photlist, int *buf_len); photlist, int *buf_len);
QDF_STATUS (*send_pdev_get_tpc_config_cmd)(wmi_unified_t wmi_handle,
uint32_t param);
QDF_STATUS (*send_set_atf_cmd)(wmi_unified_t wmi_handle,
struct set_atf_params *param);
QDF_STATUS (*send_pdev_fips_cmd)(wmi_unified_t wmi_handle,
struct fips_params *param);
QDF_STATUS (*send_wlan_profile_enable_cmd)(wmi_unified_t wmi_handle,
struct wlan_profile_params *param);
QDF_STATUS (*send_wlan_profile_trigger_cmd)(wmi_unified_t wmi_handle,
struct wlan_profile_params *param);
QDF_STATUS (*send_pdev_set_chan_cmd)(wmi_unified_t wmi_handle,
struct channel_param *param);
QDF_STATUS (*send_set_ht_ie_cmd)(wmi_unified_t wmi_handle,
struct ht_ie_params *param);
QDF_STATUS (*send_set_vht_ie_cmd)(wmi_unified_t wmi_handle,
struct vht_ie_params *param);
QDF_STATUS (*send_wmm_update_cmd)(wmi_unified_t wmi_handle,
struct wmm_update_params *param);
QDF_STATUS (*send_set_ant_switch_tbl_cmd)(wmi_unified_t wmi_handle,
struct ant_switch_tbl_params *param);
QDF_STATUS (*send_set_ratepwr_table_cmd)(wmi_unified_t wmi_handle,
struct ratepwr_table_params *param);
QDF_STATUS (*send_get_ratepwr_table_cmd)(wmi_unified_t wmi_handle);
QDF_STATUS (*send_set_ctl_table_cmd)(wmi_unified_t wmi_handle,
struct ctl_table_params *param);
QDF_STATUS (*send_set_mimogain_table_cmd)(wmi_unified_t wmi_handle,
struct mimogain_table_params *param);
QDF_STATUS (*send_set_ratepwr_chainmsk_cmd)(wmi_unified_t wmi_handle,
struct ratepwr_chainmsk_params *param);
QDF_STATUS (*send_set_macaddr_cmd)(wmi_unified_t wmi_handle,
struct macaddr_params *param);
QDF_STATUS (*send_pdev_scan_start_cmd)(wmi_unified_t wmi_handle);
QDF_STATUS (*send_pdev_scan_end_cmd)(wmi_unified_t wmi_handle);
QDF_STATUS (*send_set_acparams_cmd)(wmi_unified_t wmi_handle,
struct acparams_params *param);
QDF_STATUS (*send_set_vap_dscp_tid_map_cmd)(wmi_unified_t wmi_handle,
struct vap_dscp_tid_map_params *param);
QDF_STATUS (*send_proxy_ast_reserve_cmd)(wmi_unified_t wmi_handle,
struct proxy_ast_reserve_params *param);
QDF_STATUS (*send_pdev_qvit_cmd)(wmi_unified_t wmi_handle,
struct pdev_qvit_params *param);
QDF_STATUS (*send_mcast_group_update_cmd)(wmi_unified_t wmi_handle,
struct mcast_group_update_params *param);
QDF_STATUS (*send_peer_add_wds_entry_cmd)(wmi_unified_t wmi_handle,
struct peer_add_wds_entry_params *param);
QDF_STATUS (*send_peer_del_wds_entry_cmd)(wmi_unified_t wmi_handle,
struct peer_del_wds_entry_params *param);
QDF_STATUS (*send_peer_update_wds_entry_cmd)(wmi_unified_t wmi_handle,
struct peer_update_wds_entry_params *param);
QDF_STATUS (*send_phyerr_enable_cmd)(wmi_unified_t wmi_handle);
QDF_STATUS (*send_phyerr_disable_cmd)(wmi_unified_t wmi_handle);
QDF_STATUS (*send_smart_ant_enable_cmd)(wmi_unified_t wmi_handle,
struct smart_ant_enable_params *param);
QDF_STATUS (*send_smart_ant_set_rx_ant_cmd)(wmi_unified_t wmi_handle,
struct smart_ant_rx_ant_params *param);
QDF_STATUS (*send_smart_ant_set_tx_ant_cmd)(wmi_unified_t wmi_handle,
uint8_t macaddr[IEEE80211_ADDR_LEN],
struct smart_ant_tx_ant_params *param);
QDF_STATUS (*send_smart_ant_set_training_info_cmd)(wmi_unified_t wmi_handle,
uint8_t macaddr[IEEE80211_ADDR_LEN],
struct smart_ant_training_info_params *param);
QDF_STATUS (*send_smart_ant_set_node_config_cmd)(wmi_unified_t wmi_handle,
uint8_t macaddr[IEEE80211_ADDR_LEN],
struct smart_ant_node_config_params *param);
QDF_STATUS (*send_smart_ant_enable_tx_feedback_cmd)(wmi_unified_t wmi_handle,
struct smart_ant_enable_tx_feedback_params *param);
QDF_STATUS (*send_vdev_spectral_configure_cmd)(wmi_unified_t wmi_handle,
struct vdev_spectral_configure_params *param);
QDF_STATUS (*send_vdev_spectral_enable_cmd)(wmi_unified_t wmi_handle,
struct vdev_spectral_enable_params *param);
QDF_STATUS (*send_bss_chan_info_request_cmd)(wmi_unified_t wmi_handle,
struct bss_chan_info_request_params *param);
QDF_STATUS (*send_thermal_mitigation_param_cmd)(wmi_unified_t wmi_handle,
struct thermal_mitigation_params *param);
QDF_STATUS (*send_vdev_set_neighbour_rx_cmd)(wmi_unified_t wmi_handle,
uint8_t macaddr[IEEE80211_ADDR_LEN],
struct set_neighbour_rx_params *param);
QDF_STATUS (*send_vdev_set_fwtest_param_cmd)(wmi_unified_t wmi_handle,
struct set_fwtest_params *param);
QDF_STATUS (*send_vdev_config_ratemask_cmd)(wmi_unified_t wmi_handle,
struct config_ratemask_params *param);
QDF_STATUS (*send_vdev_install_key_cmd)(wmi_unified_t wmi_handle,
uint8_t macaddr[IEEE80211_ADDR_LEN],
struct vdev_install_key_params *param);
QDF_STATUS (*send_wow_wakeup_cmd)(wmi_unified_t wmi_handle);
QDF_STATUS (*send_wow_add_wakeup_event_cmd)(wmi_unified_t wmi_handle,
struct wow_add_wakeup_params *param);
QDF_STATUS (*send_wow_add_wakeup_pattern_cmd)(wmi_unified_t wmi_handle,
struct wow_add_wakeup_pattern_params *param);
QDF_STATUS (*send_wow_remove_wakeup_pattern_cmd)(wmi_unified_t wmi_handle,
struct wow_remove_wakeup_pattern_params *param);
QDF_STATUS (*send_pdev_set_regdomain_cmd)(wmi_unified_t wmi_handle,
struct pdev_set_regdomain_params *param);
QDF_STATUS (*send_set_quiet_mode_cmd)(wmi_unified_t wmi_handle,
struct set_quiet_mode_params *param);
QDF_STATUS (*send_set_beacon_filter_cmd)(wmi_unified_t wmi_handle,
struct set_beacon_filter_params *param);
QDF_STATUS (*send_remove_beacon_filter_cmd)(wmi_unified_t wmi_handle,
struct remove_beacon_filter_params *param);
/*
QDF_STATUS (*send_mgmt_cmd)(wmi_unified_t wmi_handle,
uint8_t macaddr[IEEE80211_ADDR_LEN],
struct mgmt_params *param);
*/
QDF_STATUS (*send_addba_clearresponse_cmd)(wmi_unified_t wmi_handle,
uint8_t macaddr[IEEE80211_ADDR_LEN],
struct addba_clearresponse_params *param);
QDF_STATUS (*send_addba_send_cmd)(wmi_unified_t wmi_handle,
uint8_t macaddr[IEEE80211_ADDR_LEN],
struct addba_send_params *param);
QDF_STATUS (*send_delba_send_cmd)(wmi_unified_t wmi_handle,
uint8_t macaddr[IEEE80211_ADDR_LEN],
struct delba_send_params *param);
QDF_STATUS (*send_addba_setresponse_cmd)(wmi_unified_t wmi_handle,
uint8_t macaddr[IEEE80211_ADDR_LEN],
struct addba_setresponse_params *param);
QDF_STATUS (*send_singleamsdu_cmd)(wmi_unified_t wmi_handle,
uint8_t macaddr[IEEE80211_ADDR_LEN],
struct singleamsdu_params *param);
QDF_STATUS (*send_set_qboost_param_cmd)(wmi_unified_t wmi_handle,
uint8_t macaddr[IEEE80211_ADDR_LEN],
struct set_qboost_params *param);
QDF_STATUS (*send_mu_scan_cmd)(wmi_unified_t wmi_handle,
struct mu_scan_params *param);
QDF_STATUS (*send_lteu_config_cmd)(wmi_unified_t wmi_handle,
struct lteu_config_params *param);
QDF_STATUS (*send_set_ps_mode_cmd)(wmi_unified_t wmi_handle,
struct set_ps_mode_params *param);
void (*save_service_bitmap)(wmi_unified_t wmi_handle,
void *evt_buf);
bool (*is_service_enabled)(wmi_unified_t wmi_handle,
uint32_t service_id);
QDF_STATUS (*get_target_cap_from_service_ready)(wmi_unified_t wmi_handle,
void *evt_buf, target_capability_info *ev);
QDF_STATUS (*extract_fw_version)(wmi_unified_t wmi_handle,
void *ev, struct wmi_host_fw_ver *fw_ver);
QDF_STATUS (*extract_fw_abi_version)(wmi_unified_t wmi_handle,
void *ev, struct wmi_host_fw_abi_ver *fw_ver);
QDF_STATUS (*extract_hal_reg_cap)(wmi_unified_t wmi_handle, void *evt_buf,
TARGET_HAL_REG_CAPABILITIES *hal_reg_cap);
host_mem_req * (*extract_host_mem_req)(wmi_unified_t wmi_handle,
void *evt_buf, uint8_t *num_entries);
QDF_STATUS (*init_cmd_send)(wmi_unified_t wmi_handle,
target_resource_config *res_cfg,
uint8_t num_mem_chunks,
struct wmi_host_mem_chunk *mem_chunk);
QDF_STATUS (*save_fw_version)(wmi_unified_t wmi_handle, void *evt_buf);
uint32_t (*ready_extract_init_status)(wmi_unified_t wmi_hdl, void *ev);
QDF_STATUS (*ready_extract_mac_addr)(wmi_unified_t wmi_hdl, void *ev,
uint8_t *macaddr);
QDF_STATUS (*check_and_update_fw_version)(wmi_unified_t wmi_hdl, void *ev);
uint8_t* (*extract_dbglog_data_len)(wmi_unified_t wmi_handle, void *evt_buf,
uint16_t *len);
QDF_STATUS (*send_ext_resource_config)(wmi_unified_t wmi_handle,
wmi_host_ext_resource_config *ext_cfg);
QDF_STATUS (*send_nf_dbr_dbm_info_get_cmd)(wmi_unified_t wmi_handle);
QDF_STATUS (*send_packet_power_info_get_cmd)(wmi_unified_t wmi_handle,
struct packet_power_info_params *param);
QDF_STATUS (*send_gpio_config_cmd)(wmi_unified_t wmi_handle,
struct gpio_config_params *param);
QDF_STATUS (*send_gpio_output_cmd)(wmi_unified_t wmi_handle,
struct gpio_output_params *param);
QDF_STATUS (*send_rtt_meas_req_test_cmd)(wmi_unified_t wmi_handle,
struct rtt_meas_req_test_params *param);
QDF_STATUS (*send_rtt_meas_req_cmd)(wmi_unified_t wmi_handle,
struct rtt_meas_req_params *param);
QDF_STATUS (*send_rtt_keepalive_req_cmd)(wmi_unified_t wmi_handle,
struct rtt_keepalive_req_params *param);
QDF_STATUS (*send_lci_set_cmd)(wmi_unified_t wmi_handle,
struct lci_set_params *param);
QDF_STATUS (*send_lcr_set_cmd)(wmi_unified_t wmi_handle,
struct lcr_set_params *param);
QDF_STATUS (*send_periodic_chan_stats_config_cmd)(wmi_unified_t wmi_handle,
struct periodic_chan_stats_params *param);
QDF_STATUS
(*send_atf_peer_request_cmd)(wmi_unified_t wmi_handle,
struct atf_peer_request_params *param);
QDF_STATUS
(*send_set_atf_grouping_cmd)(wmi_unified_t wmi_handle,
struct atf_grouping_params *param);
QDF_STATUS (*extract_wds_addr_event)(wmi_unified_t wmi_handle,
void *evt_buf, uint16_t len, wds_addr_event_t *wds_ev);
QDF_STATUS (*extract_dcs_interference_type)(wmi_unified_t wmi_handle,
void *evt_buf, uint32_t *interference_type);
QDF_STATUS (*extract_dcs_cw_int)(wmi_unified_t wmi_handle, void *evt_buf,
wmi_host_ath_dcs_cw_int *cw_int);
QDF_STATUS (*extract_dcs_im_tgt_stats)(wmi_unified_t wmi_handle, void *evt_buf,
wmi_host_dcs_im_tgt_stats_t *wlan_stat);
QDF_STATUS (*extract_fips_event_error_status)(wmi_unified_t wmi_handle,
void *evt_buf, uint32_t *err_status);
QDF_STATUS (*extract_fips_event_data)(wmi_unified_t wmi_handle,
void *evt_buf, uint32_t *data_len, uint32_t **data);
QDF_STATUS (*extract_vdev_start_resp)(wmi_unified_t wmi_handle, void *evt_buf,
wmi_host_vdev_start_resp *vdev_rsp);
QDF_STATUS (*extract_tbttoffset_update_params)(void *wmi_hdl, void *evt_buf,
uint32_t *vdev_map, uint32_t **tbttoffset_list);
QDF_STATUS (*extract_mgmt_rx_params)(wmi_unified_t wmi_handle, void *evt_buf,
wmi_host_mgmt_rx_hdr *hdr, uint8_t **bufp);
QDF_STATUS (*extract_vdev_stopped_param)(wmi_unified_t wmi_handle,
void *evt_buf, uint32_t *vdev_id);
QDF_STATUS (*extract_vdev_roam_param)(wmi_unified_t wmi_handle, void *evt_buf,
wmi_host_roam_event *param);
QDF_STATUS (*extract_vdev_scan_ev_param)(wmi_unified_t wmi_handle,
void *evt_buf, wmi_host_scan_event *param);
QDF_STATUS (*extract_mu_ev_param)(wmi_unified_t wmi_handle, void *evt_buf,
wmi_host_mu_report_event *param);
QDF_STATUS (*extract_pdev_tpc_config_ev_param)(wmi_unified_t wmi_handle,
void *evt_buf, wmi_host_pdev_tpc_config_event *param);
QDF_STATUS (*extract_gpio_input_ev_param)(wmi_unified_t wmi_handle,
void *evt_buf, uint32_t *gpio_num);
QDF_STATUS (*extract_pdev_reserve_ast_ev_param)(wmi_unified_t wmi_handle,
void *evt_buf, uint32_t *result);
QDF_STATUS (*extract_nfcal_power_ev_param)(wmi_unified_t wmi_handle,
void *evt_buf,
wmi_host_pdev_nfcal_power_all_channels_event *param);
QDF_STATUS (*extract_pdev_tpc_ev_param)(wmi_unified_t wmi_handle,
void *evt_buf, wmi_host_pdev_tpc_event *param);
QDF_STATUS (*extract_pdev_generic_buffer_ev_param)(wmi_unified_t wmi_handle,
void *evt_buf, wmi_host_pdev_generic_buffer_event *param);
QDF_STATUS (*extract_mgmt_tx_compl_param)(wmi_unified_t wmi_handle,
void *evt_buf, wmi_host_mgmt_tx_compl_event *param);
QDF_STATUS (*extract_swba_vdev_map)(wmi_unified_t wmi_handle, void *evt_buf,
uint32_t *vdev_map);
QDF_STATUS (*extract_swba_tim_info)(wmi_unified_t wmi_handle, void *evt_buf,
uint32_t idx, wmi_host_tim_info *tim_info);
QDF_STATUS (*extract_swba_noa_info)(wmi_unified_t wmi_handle, void *evt_buf,
uint32_t idx, wmi_host_p2p_noa_info *p2p_desc);
QDF_STATUS (*extract_peer_sta_ps_statechange_ev)(wmi_unified_t wmi_handle,
void *evt_buf, wmi_host_peer_sta_ps_statechange_event *ev);
QDF_STATUS (*extract_peer_sta_kickout_ev)(wmi_unified_t wmi_handle,
void *evt_buf, wmi_host_peer_sta_kickout_event *ev);
QDF_STATUS (*extract_peer_ratecode_list_ev)(wmi_unified_t wmi_handle,
void *evt_buf, uint8_t *peer_mac, wmi_sa_rate_cap *rate_cap);
QDF_STATUS (*extract_comb_phyerr)(wmi_unified_t wmi_handle, void *evt_buf,
uint16_t datalen, uint16_t *buf_offset, wmi_host_phyerr_t *phyerr);
QDF_STATUS (*extract_single_phyerr)(wmi_unified_t wmi_handle, void *evt_buf,
uint16_t datalen, uint16_t *buf_offset, wmi_host_phyerr_t *phyerr);
QDF_STATUS (*extract_composite_phyerr)(wmi_unified_t wmi_handle, void *evt_buf,
uint16_t datalen, wmi_host_phyerr_t *phyerr);
QDF_STATUS (*extract_rtt_hdr)(wmi_unified_t wmi_handle, void *evt_buf,
wmi_host_rtt_event_hdr *ev);
QDF_STATUS (*extract_rtt_ev)(wmi_unified_t wmi_handle, void *evt_buf,
wmi_host_rtt_meas_event *ev, uint8_t *hdump, uint16_t hdump_len);
QDF_STATUS (*extract_rtt_error_report_ev)(wmi_unified_t wmi_handle,
void *evt_buf, wmi_host_rtt_error_report_event *ev);
QDF_STATUS (*extract_all_stats_count)(wmi_unified_t wmi_handle, void *evt_buf,
wmi_host_stats_event *stats_param);
QDF_STATUS (*extract_pdev_stats)(wmi_unified_t wmi_handle, void *evt_buf,
uint32_t index, wmi_host_pdev_stats *pdev_stats);
QDF_STATUS (*extract_pdev_ext_stats)(wmi_unified_t wmi_handle, void *evt_buf,
uint32_t index, wmi_host_pdev_ext_stats *pdev_ext_stats);
QDF_STATUS (*extract_vdev_stats)(wmi_unified_t wmi_handle, void *evt_buf,
uint32_t index, wmi_host_vdev_stats *vdev_stats);
QDF_STATUS (*extract_peer_stats)(wmi_unified_t wmi_handle, void *evt_buf,
uint32_t index, wmi_host_peer_stats *peer_stats);
QDF_STATUS (*extract_bcnflt_stats)(wmi_unified_t wmi_handle, void *evt_buf,
uint32_t index, wmi_host_bcnflt_stats *bcnflt_stats);
QDF_STATUS (*extract_peer_extd_stats)(wmi_unified_t wmi_handle, void *evt_buf,
uint32_t index, wmi_host_peer_extd_stats *peer_extd_stats);
QDF_STATUS (*extract_chan_stats)(wmi_unified_t wmi_handle, void *evt_buf,
uint32_t index, wmi_host_chan_stats *chan_stats);
QDF_STATUS (*extract_thermal_stats)(wmi_unified_t wmi_handle, void *evt_buf,
uint32_t *temp, uint32_t *level);
QDF_STATUS (*extract_thermal_level_stats)(wmi_unified_t wmi_handle,
void *evt_buf, uint8_t idx, uint32_t *levelcount,
uint32_t *dccount);
QDF_STATUS (*extract_profile_ctx)(wmi_unified_t wmi_handle, void *evt_buf,
wmi_host_wlan_profile_ctx_t *profile_ctx);
QDF_STATUS (*extract_profile_data)(wmi_unified_t wmi_handle, void *evt_buf,
wmi_host_wlan_profile_t *profile_data);
QDF_STATUS (*extract_chan_info_event)(wmi_unified_t wmi_handle, void *evt_buf,
wmi_host_chan_info_event *chan_info);
QDF_STATUS (*extract_channel_hopping_event)(wmi_unified_t wmi_handle,
void *evt_buf,
wmi_host_pdev_channel_hopping_event *ch_hopping);
QDF_STATUS (*extract_bss_chan_info_event)(wmi_unified_t wmi_handle,
void *evt_buf,
wmi_host_pdev_bss_chan_info_event *bss_chan_info);
QDF_STATUS (*extract_inst_rssi_stats_event)(wmi_unified_t wmi_handle,
void *evt_buf, wmi_host_inst_stats_resp *inst_rssi_resp);
QDF_STATUS (*extract_tx_data_traffic_ctrl_ev)(wmi_unified_t wmi_handle,
void *evt_buf, wmi_host_tx_data_traffic_ctrl_event *ev);
QDF_STATUS (*extract_vdev_extd_stats)(wmi_unified_t wmi_handle, void *evt_buf,
uint32_t index, wmi_host_vdev_extd_stats *vdev_extd_stats);
};
struct target_abi_version {
A_UINT32 abi_version_0;
/** WMI Major and Minor versions */
A_UINT32 abi_version_1;
/** WMI change revision */
A_UINT32 abi_version_ns_0;
/** ABI version namespace first four dwords */
A_UINT32 abi_version_ns_1;
/** ABI version namespace second four dwords */
A_UINT32 abi_version_ns_2;
/** ABI version namespace third four dwords */
A_UINT32 abi_version_ns_3;
/** ABI version namespace fourth four dwords */
}; };
/** /**
@@ -601,7 +1047,7 @@ struct wmi_cmd_init {
}; };
struct wmi_unified { struct wmi_unified {
ol_scn_t scn_handle; /* handle to device */ void *scn_handle; /* handle to device */
osdev_t osdev; /* handle to use OS-independent services */ osdev_t osdev; /* handle to use OS-independent services */
qdf_atomic_t pending_cmds; qdf_atomic_t pending_cmds;
HTC_ENDPOINT_ID wmi_endpoint_id; HTC_ENDPOINT_ID wmi_endpoint_id;
@@ -615,8 +1061,10 @@ struct wmi_unified {
qdf_nbuf_queue_t event_queue; qdf_nbuf_queue_t event_queue;
struct work_struct rx_event_work; struct work_struct rx_event_work;
int wmi_stop_in_progress; int wmi_stop_in_progress;
#ifndef WMI_NON_TLV_SUPPORT
struct _wmi_abi_version fw_abi_version; struct _wmi_abi_version fw_abi_version;
struct _wmi_abi_version final_abi_vers; struct _wmi_abi_version final_abi_vers;
#endif
struct wmi_cmd_init saved_wmi_init_cmd; struct wmi_cmd_init saved_wmi_init_cmd;
uint32_t num_of_diag_events_logs; uint32_t num_of_diag_events_logs;
uint32_t *events_logs_list; uint32_t *events_logs_list;
@@ -636,14 +1084,27 @@ struct wmi_unified {
qdf_atomic_t runtime_pm_inprogress; qdf_atomic_t runtime_pm_inprogress;
#endif #endif
enum wmi_target_type target_type;
struct wmi_rx_ops rx_ops; struct wmi_rx_ops rx_ops;
struct wmi_ops *ops; struct wmi_ops *ops;
void *event_handler_cookie[WMI_UNIFIED_MAX_EVENT];
bool use_cookie; bool use_cookie;
bool wmi_stopinprogress;
qdf_spinlock_t ctx_lock; qdf_spinlock_t ctx_lock;
#ifdef WMI_TLV_AND_NON_TLV_SUPPORT
/* WMI service bitmap recieved from target */
uint32_t wmi_service_bitmap[wmi_services_max];
uint32_t wmi_events[wmi_events_max];
uint32_t pdev_param[wmi_pdev_param_max];
uint32_t vdev_param[wmi_vdev_param_max];
uint32_t services[wmi_services_max];
#endif
}; };
struct wmi_ops *wmi_get_tlv_ops(void); #ifdef WMI_NON_TLV_SUPPORT
struct wmi_ops *wmi_get_non_tlv_ops(void); #define wmi_tlv_attach(x) qdf_print("TLV Unavailable\n")
#else
void wmi_tlv_attach(wmi_unified_t wmi_handle);
#endif
void wmi_non_tlv_attach(wmi_unified_t wmi_handle);
/** /**
* wmi_align() - provides word aligned parameter * wmi_align() - provides word aligned parameter

View File

@@ -34,7 +34,9 @@
#include "a_debug.h" #include "a_debug.h"
#include "ol_if_athvar.h" #include "ol_if_athvar.h"
#include "ol_defines.h" #include "ol_defines.h"
#ifndef WMI_NON_TLV_SUPPORT
#include "ol_fw.h" #include "ol_fw.h"
#endif
#include "htc_api.h" #include "htc_api.h"
#include "htc_api.h" #include "htc_api.h"
#include "dbglog_host.h" #include "dbglog_host.h"
@@ -159,7 +161,6 @@ wmi_mgmt_event_log_buffer[WMI_MGMT_EVENT_DEBUG_MAX_ENTRY];
#endif /*WMI_INTERFACE_EVENT_LOGGING */ #endif /*WMI_INTERFACE_EVENT_LOGGING */
static void __wmi_control_rx(struct wmi_unified *wmi_handle, wmi_buf_t evt_buf);
int wmi_get_host_credits(wmi_unified_t wmi_handle); int wmi_get_host_credits(wmi_unified_t wmi_handle);
/* WMI buffer APIs */ /* WMI buffer APIs */
@@ -242,6 +243,7 @@ uint16_t wmi_get_max_msg_len(wmi_unified_t wmi_handle)
return wmi_handle->max_msg_len - WMI_MIN_HEAD_ROOM; return wmi_handle->max_msg_len - WMI_MIN_HEAD_ROOM;
} }
#ifndef WMI_NON_TLV_SUPPORT
static uint8_t *get_wmi_cmd_string(WMI_CMD_ID wmi_command) static uint8_t *get_wmi_cmd_string(WMI_CMD_ID wmi_command)
{ {
switch (wmi_command) { switch (wmi_command) {
@@ -578,10 +580,10 @@ static uint8_t *get_wmi_cmd_string(WMI_CMD_ID wmi_command)
* as we MUST have a fixed value here to maintain compatibility between * as we MUST have a fixed value here to maintain compatibility between
* UTF and the ART2 driver * UTF and the ART2 driver
*/ */
/** UTF WMI commands */ /* UTF WMI commands */
CASE_RETURN_STRING(WMI_PDEV_UTF_CMDID); CASE_RETURN_STRING(WMI_PDEV_UTF_CMDID);
/** set debug log config */ /* set debug log config */
CASE_RETURN_STRING(WMI_DBGLOG_CFG_CMDID); CASE_RETURN_STRING(WMI_DBGLOG_CFG_CMDID);
/* QVIT specific command id */ /* QVIT specific command id */
CASE_RETURN_STRING(WMI_PDEV_QVIT_CMDID); CASE_RETURN_STRING(WMI_PDEV_QVIT_CMDID);
@@ -662,7 +664,7 @@ static uint8_t *get_wmi_cmd_string(WMI_CMD_ID wmi_command)
CASE_RETURN_STRING(WMI_RMC_CONFIG_CMDID); CASE_RETURN_STRING(WMI_RMC_CONFIG_CMDID);
/* WLAN MHF offload commands */ /* WLAN MHF offload commands */
/** enable/disable MHF offload */ /* enable/disable MHF offload */
CASE_RETURN_STRING(WMI_MHF_OFFLOAD_SET_MODE_CMDID); CASE_RETURN_STRING(WMI_MHF_OFFLOAD_SET_MODE_CMDID);
/* Plumb routing table for MHF offload */ /* Plumb routing table for MHF offload */
CASE_RETURN_STRING(WMI_MHF_OFFLOAD_PLUMB_ROUTING_TBL_CMDID); CASE_RETURN_STRING(WMI_MHF_OFFLOAD_PLUMB_ROUTING_TBL_CMDID);
@@ -820,6 +822,7 @@ static inline void wma_log_cmd_id(WMI_CMD_ID cmd_id)
get_wmi_cmd_string(cmd_id), cmd_id); get_wmi_cmd_string(cmd_id), cmd_id);
} }
#endif #endif
#endif
/** /**
* wmi_is_runtime_pm_cmd() - check if a cmd is from suspend resume sequence * wmi_is_runtime_pm_cmd() - check if a cmd is from suspend resume sequence
@@ -827,6 +830,7 @@ static inline void wma_log_cmd_id(WMI_CMD_ID cmd_id)
* *
* Return: true if the command is part of the suspend resume sequence. * Return: true if the command is part of the suspend resume sequence.
*/ */
#ifndef WMI_NON_TLV_SUPPORT
static bool wmi_is_runtime_pm_cmd(WMI_CMD_ID cmd_id) static bool wmi_is_runtime_pm_cmd(WMI_CMD_ID cmd_id)
{ {
switch (cmd_id) { switch (cmd_id) {
@@ -845,6 +849,34 @@ static bool wmi_is_runtime_pm_cmd(WMI_CMD_ID cmd_id)
} }
} }
/**
* wmi_is_pm_resume_cmd() - check if a cmd is part of the resume sequence
* @cmd_id: command to check
*
* Return: true if the command is part of the resume sequence.
*/
static bool wmi_is_pm_resume_cmd(WMI_CMD_ID cmd_id)
{
switch (cmd_id) {
case WMI_WOW_HOSTWAKEUP_FROM_SLEEP_CMDID:
case WMI_PDEV_RESUME_CMDID:
return true;
default:
return false;
}
}
#else
static bool wmi_is_runtime_pm_cmd(WMI_CMD_ID cmd_id)
{
return false;
}
static bool wmi_is_pm_resume_cmd(WMI_CMD_ID cmd_id)
{
return false;
}
#endif
/** /**
* wmi_unified_cmd_send() - WMI command API * wmi_unified_cmd_send() - WMI command API
* @wmi_handle: handle to wmi * @wmi_handle: handle to wmi
@@ -865,16 +897,21 @@ int wmi_unified_cmd_send(wmi_unified_t wmi_handle, wmi_buf_t buf, uint32_t len,
if (wmi_is_runtime_pm_cmd(cmd_id)) if (wmi_is_runtime_pm_cmd(cmd_id))
htc_tag = HTC_TX_PACKET_TAG_AUTO_PM; htc_tag = HTC_TX_PACKET_TAG_AUTO_PM;
} else if (qdf_atomic_read(&wmi_handle->is_target_suspended) && } else if (qdf_atomic_read(&wmi_handle->is_target_suspended) &&
((WMI_WOW_HOSTWAKEUP_FROM_SLEEP_CMDID != cmd_id) && (!wmi_is_pm_resume_cmd(cmd_id))) {
(WMI_PDEV_RESUME_CMDID != cmd_id))) {
QDF_TRACE(QDF_MODULE_ID_WMI, QDF_TRACE_LEVEL_ERROR, QDF_TRACE(QDF_MODULE_ID_WMI, QDF_TRACE_LEVEL_ERROR,
"%s: Target is suspended", __func__); "%s: Target is suspended", __func__);
QDF_ASSERT(0); QDF_ASSERT(0);
return QDF_STATUS_E_BUSY; return QDF_STATUS_E_BUSY;
} }
if (wmi_handle->wmi_stopinprogress) {
QDF_TRACE(QDF_MODULE_ID_WMI, QDF_TRACE_LEVEL_ERROR,
"WMI stop in progress\n");
return -EINVAL;
}
/* Do sanity check on the TLV parameter structure */ /* Do sanity check on the TLV parameter structure */
{ #ifndef WMI_NON_TLV_SUPPORT
if (wmi_handle->target_type == WMI_TLV_TARGET) {
void *buf_ptr = (void *)qdf_nbuf_data(buf); void *buf_ptr = (void *)qdf_nbuf_data(buf);
if (wmitlv_check_command_tlv_params(NULL, buf_ptr, len, cmd_id) if (wmitlv_check_command_tlv_params(NULL, buf_ptr, len, cmd_id)
@@ -885,6 +922,7 @@ int wmi_unified_cmd_send(wmi_unified_t wmi_handle, wmi_buf_t buf, uint32_t len,
return QDF_STATUS_E_INVAL; return QDF_STATUS_E_INVAL;
} }
} }
#endif
if (qdf_nbuf_push_head(buf, sizeof(WMI_CMD_HDR)) == NULL) { if (qdf_nbuf_push_head(buf, sizeof(WMI_CMD_HDR)) == NULL) {
QDF_TRACE(QDF_MODULE_ID_WMI, QDF_TRACE_LEVEL_ERROR, QDF_TRACE(QDF_MODULE_ID_WMI, QDF_TRACE_LEVEL_ERROR,
@@ -899,7 +937,7 @@ int wmi_unified_cmd_send(wmi_unified_t wmi_handle, wmi_buf_t buf, uint32_t len,
if (qdf_atomic_read(&wmi_handle->pending_cmds) >= WMI_MAX_CMDS) { if (qdf_atomic_read(&wmi_handle->pending_cmds) >= WMI_MAX_CMDS) {
QDF_TRACE(QDF_MODULE_ID_WMI, QDF_TRACE_LEVEL_ERROR, QDF_TRACE(QDF_MODULE_ID_WMI, QDF_TRACE_LEVEL_ERROR,
"\n%s: hostcredits = %d", __func__, "\n%s: hostcredits = %d", __func__,
wmi_get_host_credits(wmi_handle)); wmi_get_host_credits(wmi_handle));
htc_dump_counter_info(wmi_handle->htc_handle); htc_dump_counter_info(wmi_handle->htc_handle);
qdf_atomic_dec(&wmi_handle->pending_cmds); qdf_atomic_dec(&wmi_handle->pending_cmds);
QDF_TRACE(QDF_MODULE_ID_WMI, QDF_TRACE_LEVEL_ERROR, QDF_TRACE(QDF_MODULE_ID_WMI, QDF_TRACE_LEVEL_ERROR,
@@ -923,8 +961,9 @@ int wmi_unified_cmd_send(wmi_unified_t wmi_handle, wmi_buf_t buf, uint32_t len,
wmi_handle->wmi_endpoint_id, htc_tag); wmi_handle->wmi_endpoint_id, htc_tag);
SET_HTC_PACKET_NET_BUF_CONTEXT(pkt, buf); SET_HTC_PACKET_NET_BUF_CONTEXT(pkt, buf);
#ifndef WMI_NON_TLV_SUPPORT
wma_log_cmd_id(cmd_id); wma_log_cmd_id(cmd_id);
#endif
#ifdef WMI_INTERFACE_EVENT_LOGGING #ifdef WMI_INTERFACE_EVENT_LOGGING
qdf_spin_lock_bh(&wmi_handle->wmi_record_lock); qdf_spin_lock_bh(&wmi_handle->wmi_record_lock);
@@ -961,10 +1000,11 @@ int wmi_unified_cmd_send(wmi_unified_t wmi_handle, wmi_buf_t buf, uint32_t len,
* Return: event handler's index * Return: event handler's index
*/ */
int wmi_unified_get_event_handler_ix(wmi_unified_t wmi_handle, int wmi_unified_get_event_handler_ix(wmi_unified_t wmi_handle,
WMI_EVT_ID event_id) uint32_t event_id)
{ {
uint32_t idx = 0; uint32_t idx = 0;
int32_t invalid_idx = -1; int32_t invalid_idx = -1;
for (idx = 0; (idx < wmi_handle->max_event_idx && for (idx = 0; (idx < wmi_handle->max_event_idx &&
idx < WMI_UNIFIED_MAX_EVENT); ++idx) { idx < WMI_UNIFIED_MAX_EVENT); ++idx) {
if (wmi_handle->event_id[idx] == event_id && if (wmi_handle->event_id[idx] == event_id &&
@@ -986,25 +1026,37 @@ int wmi_unified_get_event_handler_ix(wmi_unified_t wmi_handle,
* Return: 0 on success * Return: 0 on success
*/ */
int wmi_unified_register_event_handler(wmi_unified_t wmi_handle, int wmi_unified_register_event_handler(wmi_unified_t wmi_handle,
WMI_EVT_ID event_id, uint32_t event_id,
wmi_unified_event_handler handler_func, wmi_unified_event_handler handler_func,
uint8_t rx_ctx) uint8_t rx_ctx)
{ {
uint32_t idx = 0; uint32_t idx = 0;
uint32_t evt_id;
if (wmi_unified_get_event_handler_ix(wmi_handle, event_id) != -1) { #ifdef WMI_TLV_AND_NON_TLV_SUPPORT
qdf_print("%s : event handler already registered 0x%x \n", if (event_id >= wmi_events_max ||
__func__, event_id); wmi_handle->wmi_events[event_id] == WMI_EVENT_ID_INVALID) {
qdf_print("%s: Event id %d is unavailable\n",
__func__, event_id);
return QDF_STATUS_E_FAILURE;
}
evt_id = wmi_handle->wmi_events[event_id];
#else
evt_id = event_id;
#endif
if (wmi_unified_get_event_handler_ix(wmi_handle, evt_id) != -1) {
qdf_print("%s : event handler already registered 0x%x\n",
__func__, evt_id);
return QDF_STATUS_E_FAILURE; return QDF_STATUS_E_FAILURE;
} }
if (wmi_handle->max_event_idx == WMI_UNIFIED_MAX_EVENT) { if (wmi_handle->max_event_idx == WMI_UNIFIED_MAX_EVENT) {
qdf_print("%s : no more event handlers 0x%x \n", qdf_print("%s : no more event handlers 0x%x\n",
__func__, event_id); __func__, evt_id);
return QDF_STATUS_E_FAILURE; return QDF_STATUS_E_FAILURE;
} }
idx = wmi_handle->max_event_idx; idx = wmi_handle->max_event_idx;
wmi_handle->event_handler[idx] = handler_func; wmi_handle->event_handler[idx] = handler_func;
wmi_handle->event_id[idx] = event_id; wmi_handle->event_id[idx] = evt_id;
qdf_spin_lock_bh(&wmi_handle->ctx_lock); qdf_spin_lock_bh(&wmi_handle->ctx_lock);
wmi_handle->ctx[idx] = rx_ctx; wmi_handle->ctx[idx] = rx_ctx;
qdf_spin_unlock_bh(&wmi_handle->ctx_lock); qdf_spin_unlock_bh(&wmi_handle->ctx_lock);
@@ -1021,14 +1073,27 @@ int wmi_unified_register_event_handler(wmi_unified_t wmi_handle,
* Return: 0 on success * Return: 0 on success
*/ */
int wmi_unified_unregister_event_handler(wmi_unified_t wmi_handle, int wmi_unified_unregister_event_handler(wmi_unified_t wmi_handle,
WMI_EVT_ID event_id) uint32_t event_id)
{ {
uint32_t idx = 0; uint32_t idx = 0;
uint32_t evt_id;
idx = wmi_unified_get_event_handler_ix(wmi_handle, event_id); #ifdef WMI_TLV_AND_NON_TLV_SUPPORT
if (event_id >= wmi_events_max ||
wmi_handle->wmi_events[event_id] == WMI_EVENT_ID_INVALID) {
qdf_print("%s: Event id %d is unavailable\n",
__func__, event_id);
return QDF_STATUS_E_FAILURE;
}
evt_id = wmi_handle->wmi_events[event_id];
#else
evt_id = event_id;
#endif
idx = wmi_unified_get_event_handler_ix(wmi_handle, evt_id);
if (idx == -1) { if (idx == -1) {
qdf_print("%s : event handler is not registered: event id 0x%x \n", qdf_print("%s : event handler is not registered: evt id 0x%x\n",
__func__, event_id); __func__, evt_id);
return QDF_STATUS_E_FAILURE; return QDF_STATUS_E_FAILURE;
} }
wmi_handle->event_handler[idx] = NULL; wmi_handle->event_handler[idx] = NULL;
@@ -1046,6 +1111,7 @@ int wmi_unified_unregister_event_handler(wmi_unified_t wmi_handle,
* wmi_process_fw_event_default_ctx() - process in default caller context * wmi_process_fw_event_default_ctx() - process in default caller context
* @wmi_handle: handle to wmi * @wmi_handle: handle to wmi
* @htc_packet: pointer to htc packet * @htc_packet: pointer to htc packet
* @exec_ctx: execution context for wmi fw event
* *
* Event process by below function will be in default caller context. * Event process by below function will be in default caller context.
* wmi internally provides rx work thread processing context. * wmi internally provides rx work thread processing context.
@@ -1058,8 +1124,13 @@ static void wmi_process_fw_event_default_ctx(struct wmi_unified *wmi_handle,
wmi_buf_t evt_buf; wmi_buf_t evt_buf;
evt_buf = (wmi_buf_t) htc_packet->pPktContext; evt_buf = (wmi_buf_t) htc_packet->pPktContext;
#ifdef WMI_NON_TLV_SUPPORT
wmi_handle->rx_ops.wma_process_fw_event_handler_cbk
(wmi_handle->scn_handle, evt_buf, exec_ctx);
#else
wmi_handle->rx_ops.wma_process_fw_event_handler_cbk(wmi_handle, wmi_handle->rx_ops.wma_process_fw_event_handler_cbk(wmi_handle,
evt_buf, exec_ctx); evt_buf, exec_ctx);
#endif
return; return;
} }
@@ -1086,10 +1157,12 @@ static void wmi_process_fw_event_worker_thread_ctx
id = WMI_GET_FIELD(qdf_nbuf_data(evt_buf), WMI_CMD_HDR, COMMANDID); id = WMI_GET_FIELD(qdf_nbuf_data(evt_buf), WMI_CMD_HDR, COMMANDID);
data = qdf_nbuf_data(evt_buf); data = qdf_nbuf_data(evt_buf);
#ifdef WMI_INTERFACE_EVENT_LOGGING
qdf_spin_lock_bh(&wmi_handle->wmi_record_lock); qdf_spin_lock_bh(&wmi_handle->wmi_record_lock);
/* Exclude 4 bytes of TLV header */ /* Exclude 4 bytes of TLV header */
WMI_RX_EVENT_RECORD(id, ((uint8_t *) data + 4)); WMI_RX_EVENT_RECORD(id, ((uint8_t *) data + 4));
qdf_spin_unlock_bh(&wmi_handle->wmi_record_lock); qdf_spin_unlock_bh(&wmi_handle->wmi_record_lock);
#endif
qdf_spin_lock_bh(&wmi_handle->eventq_lock); qdf_spin_lock_bh(&wmi_handle->eventq_lock);
qdf_nbuf_queue_add(&wmi_handle->event_queue, evt_buf); qdf_nbuf_queue_add(&wmi_handle->event_queue, evt_buf);
qdf_spin_unlock_bh(&wmi_handle->eventq_lock); qdf_spin_unlock_bh(&wmi_handle->eventq_lock);
@@ -1166,7 +1239,9 @@ void __wmi_control_rx(struct wmi_unified *wmi_handle, wmi_buf_t evt_buf)
uint8_t *data; uint8_t *data;
uint32_t len; uint32_t len;
void *wmi_cmd_struct_ptr = NULL; void *wmi_cmd_struct_ptr = NULL;
#ifndef WMI_NON_TLV_SUPPORT
int tlv_ok_status = 0; int tlv_ok_status = 0;
#endif
uint32_t idx = 0; uint32_t idx = 0;
id = WMI_GET_FIELD(qdf_nbuf_data(evt_buf), WMI_CMD_HDR, COMMANDID); id = WMI_GET_FIELD(qdf_nbuf_data(evt_buf), WMI_CMD_HDR, COMMANDID);
@@ -1177,16 +1252,21 @@ void __wmi_control_rx(struct wmi_unified *wmi_handle, wmi_buf_t evt_buf)
data = qdf_nbuf_data(evt_buf); data = qdf_nbuf_data(evt_buf);
len = qdf_nbuf_len(evt_buf); len = qdf_nbuf_len(evt_buf);
/* Validate and pad(if necessary) the TLVs */ #ifndef WMI_NON_TLV_SUPPORT
tlv_ok_status = wmitlv_check_and_pad_event_tlvs(wmi_handle->scn_handle, if (wmi_handle->target_type == WMI_TLV_TARGET) {
/* Validate and pad(if necessary) the TLVs */
tlv_ok_status =
wmitlv_check_and_pad_event_tlvs(wmi_handle->scn_handle,
data, len, id, data, len, id,
&wmi_cmd_struct_ptr); &wmi_cmd_struct_ptr);
if (tlv_ok_status != 0) { if (tlv_ok_status != 0) {
QDF_TRACE(QDF_MODULE_ID_WMI, QDF_TRACE_LEVEL_ERROR, QDF_TRACE(QDF_MODULE_ID_WMI, QDF_TRACE_LEVEL_ERROR,
"%s: Error: id=0x%d, wmitlv check status=%d\n", "%s: Error: id=0x%d, wmitlv check status=%d\n",
__func__, id, tlv_ok_status); __func__, id, tlv_ok_status);
goto end; goto end;
}
} }
#endif
idx = wmi_unified_get_event_handler_ix(wmi_handle, id); idx = wmi_unified_get_event_handler_ix(wmi_handle, id);
if (idx == A_ERROR) { if (idx == A_ERROR) {
@@ -1206,12 +1286,19 @@ void __wmi_control_rx(struct wmi_unified *wmi_handle, wmi_buf_t evt_buf)
qdf_spin_unlock_bh(&wmi_handle->wmi_record_lock); qdf_spin_unlock_bh(&wmi_handle->wmi_record_lock);
#endif #endif
/* Call the WMI registered event handler */ /* Call the WMI registered event handler */
wmi_handle->event_handler[idx] (wmi_handle->scn_handle, if (wmi_handle->target_type == WMI_TLV_TARGET)
wmi_cmd_struct_ptr, len); wmi_handle->event_handler[idx] (wmi_handle->scn_handle,
wmi_cmd_struct_ptr, len);
else
wmi_handle->event_handler[idx] (wmi_handle->scn_handle,
data, len);
end: end:
/* Free event buffer and allocated event tlv */ /* Free event buffer and allocated event tlv */
wmitlv_free_allocated_event_tlvs(id, &wmi_cmd_struct_ptr); #ifndef WMI_NON_TLV_SUPPORT
if (wmi_handle->target_type == WMI_TLV_TARGET)
wmitlv_free_allocated_event_tlvs(id, &wmi_cmd_struct_ptr);
#endif
qdf_nbuf_free(evt_buf); qdf_nbuf_free(evt_buf);
} }
@@ -1290,17 +1377,24 @@ void *wmi_unified_attach(void *scn_handle,
bool use_cookie, struct wmi_rx_ops *rx_ops) bool use_cookie, struct wmi_rx_ops *rx_ops)
{ {
struct wmi_unified *wmi_handle; struct wmi_unified *wmi_handle;
#ifndef WMI_NON_TLV_SUPPORT
wmi_handle = wmi_handle =
(struct wmi_unified *)os_malloc(NULL, (struct wmi_unified *)os_malloc(NULL,
sizeof(struct wmi_unified), sizeof(struct wmi_unified),
GFP_ATOMIC); GFP_ATOMIC);
#else
wmi_handle =
(struct wmi_unified *) qdf_mem_malloc(
sizeof(struct wmi_unified));
#endif
if (wmi_handle == NULL) { if (wmi_handle == NULL) {
qdf_print("allocation of wmi handle failed %zu\n", qdf_print("allocation of wmi handle failed %zu\n",
sizeof(struct wmi_unified)); sizeof(struct wmi_unified));
return NULL; return NULL;
} }
OS_MEMZERO(wmi_handle, sizeof(struct wmi_unified)); OS_MEMZERO(wmi_handle, sizeof(struct wmi_unified));
wmi_handle->scn_handle = (ol_scn_t *)scn_handle; wmi_handle->scn_handle = scn_handle;
qdf_atomic_init(&wmi_handle->pending_cmds); qdf_atomic_init(&wmi_handle->pending_cmds);
qdf_atomic_init(&wmi_handle->is_target_suspended); qdf_atomic_init(&wmi_handle->is_target_suspended);
wmi_runtime_pm_init(wmi_handle); wmi_runtime_pm_init(wmi_handle);
@@ -1317,13 +1411,15 @@ void *wmi_unified_attach(void *scn_handle,
/* Attach mc_thread context processing function */ /* Attach mc_thread context processing function */
wmi_handle->rx_ops.wma_process_fw_event_handler_cbk = wmi_handle->rx_ops.wma_process_fw_event_handler_cbk =
rx_ops->wma_process_fw_event_handler_cbk; rx_ops->wma_process_fw_event_handler_cbk;
wmi_handle->target_type = target_type;
if (target_type == WMI_TLV_TARGET) if (target_type == WMI_TLV_TARGET)
wmi_handle->ops = wmi_get_tlv_ops(); wmi_tlv_attach(wmi_handle);
else else
wmi_handle->ops = wmi_get_non_tlv_ops(); wmi_non_tlv_attach(wmi_handle);
/* Assign target cookie capablity */ /* Assign target cookie capablity */
wmi_handle->use_cookie = use_cookie; wmi_handle->use_cookie = use_cookie;
wmi_handle->osdev = osdev; wmi_handle->osdev = osdev;
wmi_handle->wmi_stopinprogress = 0;
qdf_spinlock_create(&wmi_handle->ctx_lock); qdf_spinlock_create(&wmi_handle->ctx_lock);
return wmi_handle; return wmi_handle;
@@ -1385,10 +1481,19 @@ wmi_unified_remove_work(struct wmi_unified *wmi_handle)
"Done: %s", __func__); "Done: %s", __func__);
} }
/**
* wmi_htc_tx_complete() - Process htc tx completion
*
* @ctx: handle to wmi
* @htc_packet: pointer to htc packet
*
* @Return: none.
*/
void wmi_htc_tx_complete(void *ctx, HTC_PACKET *htc_pkt) void wmi_htc_tx_complete(void *ctx, HTC_PACKET *htc_pkt)
{ {
struct wmi_unified *wmi_handle = (struct wmi_unified *)ctx; struct wmi_unified *wmi_handle = (struct wmi_unified *)ctx;
wmi_buf_t wmi_cmd_buf = GET_HTC_PACKET_NET_BUF_CONTEXT(htc_pkt); wmi_buf_t wmi_cmd_buf = GET_HTC_PACKET_NET_BUF_CONTEXT(htc_pkt);
#ifdef WMI_INTERFACE_EVENT_LOGGING #ifdef WMI_INTERFACE_EVENT_LOGGING
uint32_t cmd_id; uint32_t cmd_id;
#endif #endif
@@ -1481,7 +1586,7 @@ wmi_unified_connect_htc_service(struct wmi_unified *wmi_handle,
*/ */
int wmi_get_host_credits(wmi_unified_t wmi_handle) int wmi_get_host_credits(wmi_unified_t wmi_handle)
{ {
int host_credits; int host_credits = 0;
htc_get_control_endpoint_tx_host_credits(wmi_handle->htc_handle, htc_get_control_endpoint_tx_host_credits(wmi_handle->htc_handle,
&host_credits); &host_credits);
@@ -1489,7 +1594,8 @@ int wmi_get_host_credits(wmi_unified_t wmi_handle)
} }
/** /**
* wmi_get_pending_cmds() - WMI API to get WMI Pending Commands in the HTC queue * wmi_get_pending_cmds() - WMI API to get WMI Pending Commands in the HTC
* queue
* *
* @wmi_handle: handle to WMI. * @wmi_handle: handle to WMI.
* *
@@ -1513,3 +1619,30 @@ void wmi_set_target_suspend(wmi_unified_t wmi_handle, A_BOOL val)
qdf_atomic_set(&wmi_handle->is_target_suspended, val); qdf_atomic_set(&wmi_handle->is_target_suspended, val);
} }
#ifdef WMI_NON_TLV_SUPPORT
/**
* API to flush all the previous packets associated with the wmi endpoint
*
* @param wmi_handle : handle to WMI.
*/
void
wmi_flush_endpoint(wmi_unified_t wmi_handle)
{
htc_flush_endpoint(wmi_handle->htc_handle,
wmi_handle->wmi_endpoint_id, 0);
}
/**
* generic function to block unified WMI command
* @param wmi_handle : handle to WMI.
* @return 0 on success and -ve on failure.
*/
int
wmi_stop(wmi_unified_t wmi_handle)
{
QDF_TRACE(QDF_MODULE_ID_WMI, QDF_TRACE_LEVEL_INFO,
"WMI Stop\n");
wmi_handle->wmi_stopinprogress = 1;
return 0;
}
#endif

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -10510,12 +10510,11 @@ struct wmi_ops tlv_ops = {
}; };
/** /**
* wmi_get_tlv_ops() - gives pointer to wmi tlv ops * wmi_tlv_attach() - Attach TLV APIs
* *
* Return: pointer to wmi tlv ops * Return: None
*/ */
struct wmi_ops *wmi_get_tlv_ops(void) void wmi_tlv_attach(wmi_unified_t wmi_handle)
{ {
return &tlv_ops; wmi_handle->ops = &tlv_ops;
} }