| /* |
| * Copyright (c) 2016-2017 The Linux Foundation. All rights reserved. |
| * |
| * |
| * Permission to use, copy, modify, and/or distribute this software for |
| * any purpose with or without fee is hereby granted, provided that the |
| * above copyright notice and this permission notice appear in all |
| * copies. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL |
| * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED |
| * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE |
| * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL |
| * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR |
| * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER |
| * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR |
| * PERFORMANCE OF THIS SOFTWARE. |
| */ |
| |
| #ifndef _WLAN_LMAC_IF_DEF_H_ |
| #define _WLAN_LMAC_IF_DEF_H_ |
| |
| #include "qdf_status.h" |
| #include "wlan_objmgr_cmn.h" |
| #ifdef DFS_COMPONENT_ENABLE |
| #include <wlan_dfs_public_struct.h> |
| #endif |
| #include "wlan_mgmt_txrx_utils_api.h" |
| #include "wlan_scan_public_structs.h" |
| #ifdef WLAN_ATF_ENABLE |
| #include "wlan_atf_utils_defs.h" |
| #endif |
| #include <reg_services_public_struct.h> |
| |
| #ifdef WLAN_CONV_CRYPTO_SUPPORTED |
| #include "wlan_crypto_global_def.h" |
| #endif |
| |
| /* Number of dev type: Direct attach and Offload */ |
| #define MAX_DEV_TYPE 2 |
| |
| #ifdef WIFI_POS_CONVERGED |
| /* forward declarations */ |
| struct oem_data_req; |
| struct oem_data_rsp; |
| #endif /* WIFI_POS_CONVERGED */ |
| |
| #ifdef WLAN_FEATURE_NAN_CONVERGENCE |
| struct scheduler_msg; |
| #endif |
| |
| #ifdef CONVERGED_TDLS_ENABLE |
| #include "wlan_tdls_public_structs.h" |
| #endif |
| |
| /** |
| * struct wlan_lmac_if_mgmt_txrx_tx_ops - structure of tx function |
| * pointers for mgmt txrx component |
| * @mgmt_tx_send: function pointer to transmit mgmt tx frame |
| * @beacon_send: function pointer to transmit beacon frame |
| */ |
| struct wlan_lmac_if_mgmt_txrx_tx_ops { |
| QDF_STATUS (*mgmt_tx_send)(struct wlan_objmgr_vdev *vdev, |
| qdf_nbuf_t nbuf, u_int32_t desc_id, |
| void *mgmt_tx_params); |
| QDF_STATUS (*beacon_send)(struct wlan_objmgr_vdev *vdev, |
| qdf_nbuf_t nbuf); |
| }; |
| |
| /** |
| * struct wlan_lmac_if_scan_tx_ops - south bound tx function pointers for scan |
| * @scan_start: function to start scan |
| * @scan_cancel: function to cancel scan |
| * @pno_start: start pno scan |
| * @pno_stop: stop pno scan |
| * @scan_reg_ev_handler: function to register for scan events |
| * @scan_unreg_ev_handler: function to unregister for scan events |
| * |
| * scan module uses these functions to avail ol/da lmac services |
| */ |
| struct wlan_lmac_if_scan_tx_ops { |
| QDF_STATUS (*scan_start)(struct wlan_objmgr_psoc *psoc, |
| struct scan_start_request *req); |
| QDF_STATUS (*scan_cancel)(struct wlan_objmgr_psoc *psoc, |
| struct scan_cancel_param *req); |
| QDF_STATUS (*pno_start)(struct wlan_objmgr_psoc *psoc, |
| struct pno_scan_req_params *req); |
| QDF_STATUS (*pno_stop)(struct wlan_objmgr_psoc *psoc, |
| uint8_t vdev_id); |
| QDF_STATUS (*scan_reg_ev_handler)(struct wlan_objmgr_psoc *psoc, |
| void *arg); |
| QDF_STATUS (*scan_unreg_ev_handler)(struct wlan_objmgr_psoc *psoc, |
| void *arg); |
| QDF_STATUS (*set_chan_list)(struct wlan_objmgr_pdev *pdev, void *arg); |
| }; |
| |
| |
| /** |
| * struct wlan_lmac_if_scan_rx_ops - south bound rx function pointers for scan |
| * @scan_ev_handler: scan event handler |
| * @scan_set_max_active_scans: set max active scans allowed |
| * |
| * lmac modules uses this API to post scan events to scan module |
| */ |
| struct wlan_lmac_if_scan_rx_ops { |
| QDF_STATUS (*scan_ev_handler)(struct wlan_objmgr_psoc *psoc, |
| struct scan_event_info *event_info); |
| QDF_STATUS (*scan_set_max_active_scans)(struct wlan_objmgr_psoc *psoc, |
| uint32_t max_active_scans); |
| }; |
| |
| #ifdef WLAN_PMO_ENABLE |
| |
| /* fwd declarations for pmo tx ops */ |
| struct pmo_arp_offload_params; |
| struct pmo_ns_offload_params; |
| struct pmo_bcast_filter_params; |
| struct pmo_gtk_req; |
| struct pmo_action_wakeup_set_params; |
| struct pmo_lphb_enable_req; |
| struct pmo_lphb_tcp_params; |
| struct pmo_lphb_tcp_filter_req; |
| struct pmo_lphb_udp_params; |
| struct pmo_lphb_udp_filter_req; |
| struct pmo_wow_cmd_params; |
| struct pmo_suspend_params; |
| |
| /** |
| * struct wlan_lmac_if_pmo_tx_ops - structure of tx function |
| * pointers for pmo component |
| * @send_arp_offload_req: fp to send arp offload request |
| * @send_ns_offload_req: fp to send ns offload request |
| * @send_non_arp_bcast_filter_req: for enable/disable broadcast filter |
| * @send_enable_wakeup_event_req: fp to send enable wow wakeup events req |
| * @send_disable_wakeup_event_req: fp to send disable wow wakeup events req |
| * @send_add_wow_pattern: fp to send wow pattern request |
| * @send_enhance_mc_offload_req: fp to send enhanced multicast offload request |
| * @send_set_mc_filter_req: fp to send set mc filter request |
| * @send_clear_mc_filter_req: fp to send clear mc filter request |
| * @send_ra_filter_req: fp to send ra filter request |
| * @send_gtk_offload_req: fp to send gtk offload request command |
| * @send_get_gtk_rsp_cmd: fp to send get gtk response request cmd to firmware |
| * @send_action_frame_pattern_req: fp to send wow action frame patterns request |
| * @send_lphb_enable: fp to send lphb enable request command |
| * @send_lphb_tcp_params: fp to send lphb tcp params request command |
| * @send_lphb_tcp_filter_req: fp to send lphb tcp packet filter request command |
| * @send_lphb_upd_params: fp to send lphb udp params request command |
| * @send_lphb_udp_filter_req: fp to send lphb udp packet filter request command |
| * @send_vdev_param_update_req: fp to send vdev param request |
| * @send_vdev_set_sta_ps_param: fp to send sta vdev ps power set req |
| * @psoc_update_wow_bus_suspend: fp to update bus suspend req flag at wmi |
| * @psoc_get_host_credits: fp to get the host credits |
| * @psoc_get_pending_cmnds: fp to get the host pending wmi commands |
| * @update_target_suspend_flag: fp to update target suspend flag at wmi |
| * @psoc_send_wow_enable_req: fp to send wow enable request |
| * @psoc_send_supend_req: fp to send target suspend request |
| * @psoc_set_runtime_pm_in_progress: fp to set runtime pm is in progress status |
| * @psoc_get_runtime_pm_in_progress: fp to get runtime pm is in progress status |
| * @psoc_send_host_wakeup_ind: fp tp send host wake indication to fwr |
| * @psoc_send_target_resume_req: fp to send target resume request |
| */ |
| struct wlan_lmac_if_pmo_tx_ops { |
| QDF_STATUS(*send_arp_offload_req)(struct wlan_objmgr_vdev *vdev, |
| struct pmo_arp_offload_params *arp_offload_req, |
| struct pmo_ns_offload_params *ns_offload_req); |
| QDF_STATUS(*send_non_arp_bcast_filter_req)( |
| struct wlan_objmgr_vdev *vdev, |
| struct pmo_bcast_filter_params *bcast_req); |
| QDF_STATUS(*send_ns_offload_req)(struct wlan_objmgr_vdev *vdev, |
| struct pmo_arp_offload_params *arp_offload_req, |
| struct pmo_ns_offload_params *ns_offload_req); |
| QDF_STATUS(*send_enable_wow_wakeup_event_req)( |
| struct wlan_objmgr_vdev *vdev, |
| uint32_t bitmap); |
| QDF_STATUS(*send_disable_wow_wakeup_event_req)( |
| struct wlan_objmgr_vdev *vdev, |
| uint32_t bitmap); |
| QDF_STATUS(*send_add_wow_pattern)( |
| struct wlan_objmgr_vdev *vdev, |
| uint8_t ptrn_id, const uint8_t *ptrn, uint8_t ptrn_len, |
| uint8_t ptrn_offset, const uint8_t *mask, |
| uint8_t mask_len, bool user); |
| QDF_STATUS(*send_enhance_mc_offload_req)( |
| struct wlan_objmgr_vdev *vdev, bool enable); |
| QDF_STATUS(*send_set_mc_filter_req)( |
| struct wlan_objmgr_vdev *vdev, |
| struct qdf_mac_addr multicast_addr); |
| QDF_STATUS(*send_clear_mc_filter_req)( |
| struct wlan_objmgr_vdev *vdev, |
| struct qdf_mac_addr multicast_addr); |
| QDF_STATUS(*send_ra_filter_req)( |
| struct wlan_objmgr_vdev *vdev, |
| uint8_t default_pattern, uint16_t rate_limit_interval); |
| QDF_STATUS(*send_gtk_offload_req)( |
| struct wlan_objmgr_vdev *vdev, |
| struct pmo_gtk_req *gtk_offload_req); |
| QDF_STATUS(*send_get_gtk_rsp_cmd)(struct wlan_objmgr_vdev *vdev); |
| QDF_STATUS(*send_action_frame_pattern_req)( |
| struct wlan_objmgr_vdev *vdev, |
| struct pmo_action_wakeup_set_params *ip_cmd); |
| QDF_STATUS(*send_lphb_enable)( |
| struct wlan_objmgr_psoc *psoc, |
| struct pmo_lphb_enable_req *ts_lphb_enable); |
| QDF_STATUS(*send_lphb_tcp_params)( |
| struct wlan_objmgr_psoc *psoc, |
| struct pmo_lphb_tcp_params *ts_lphb_tcp_param); |
| QDF_STATUS(*send_lphb_tcp_filter_req)( |
| struct wlan_objmgr_psoc *psoc, |
| struct pmo_lphb_tcp_filter_req *ts_lphb_tcp_filter); |
| QDF_STATUS(*send_lphb_upd_params)( |
| struct wlan_objmgr_psoc *psoc, |
| struct pmo_lphb_udp_params *ts_lphb_udp_param); |
| QDF_STATUS(*send_lphb_udp_filter_req)( |
| struct wlan_objmgr_psoc *psoc, |
| struct pmo_lphb_udp_filter_req *ts_lphb_udp_filter); |
| QDF_STATUS(*send_vdev_param_update_req)( |
| struct wlan_objmgr_vdev *vdev, |
| uint32_t param_id, uint32_t param_value); |
| QDF_STATUS(*send_vdev_sta_ps_param_req)( |
| struct wlan_objmgr_vdev *vdev, |
| uint32_t ps_mode, uint32_t value); |
| void(*psoc_update_wow_bus_suspend)( |
| struct wlan_objmgr_psoc *psoc, uint8_t value); |
| int(*psoc_get_host_credits)( |
| struct wlan_objmgr_psoc *psoc); |
| int(*psoc_get_pending_cmnds)( |
| struct wlan_objmgr_psoc *psoc); |
| void(*update_target_suspend_flag)( |
| struct wlan_objmgr_psoc *psoc, uint8_t value); |
| QDF_STATUS(*psoc_send_wow_enable_req)(struct wlan_objmgr_psoc *psoc, |
| struct pmo_wow_cmd_params *param); |
| QDF_STATUS(*psoc_send_supend_req)(struct wlan_objmgr_psoc *psoc, |
| struct pmo_suspend_params *param); |
| void (*psoc_set_runtime_pm_in_progress)(struct wlan_objmgr_psoc *psoc, |
| bool value); |
| bool (*psoc_get_runtime_pm_in_progress)(struct wlan_objmgr_psoc *psoc); |
| QDF_STATUS(*psoc_send_host_wakeup_ind)(struct wlan_objmgr_psoc *psoc); |
| QDF_STATUS (*psoc_send_target_resume_req)( |
| struct wlan_objmgr_psoc *psoc); |
| |
| }; |
| #endif |
| |
| #ifdef CONVERGED_P2P_ENABLE |
| |
| /* forward declarations for p2p tx ops */ |
| struct p2p_ps_config; |
| struct p2p_lo_start; |
| |
| /** |
| * struct wlan_lmac_if_p2p_tx_ops - structure of tx function pointers |
| * for P2P component |
| * @set_ps: function pointer to set power save |
| * @lo_start: function pointer to start listen offload |
| * @lo_stop: function pointer to stop listen offload |
| * @set_noa: function pointer to disable/enable NOA |
| * @reg_lo_ev_handler: function pointer to register lo event handler |
| * @reg_noa_ev_handler: function pointer to register noa event handler |
| * @unreg_lo_ev_handler: function pointer to unregister lo event handler |
| * @unreg_noa_ev_handler:function pointer to unregister noa event handler |
| */ |
| struct wlan_lmac_if_p2p_tx_ops { |
| QDF_STATUS (*set_ps)(struct wlan_objmgr_psoc *psoc, |
| struct p2p_ps_config *ps_config); |
| QDF_STATUS (*lo_start)(struct wlan_objmgr_psoc *psoc, |
| struct p2p_lo_start *lo_start); |
| QDF_STATUS (*lo_stop)(struct wlan_objmgr_psoc *psoc, |
| uint32_t vdev_id); |
| QDF_STATUS (*set_noa)(struct wlan_objmgr_psoc *psoc, |
| uint32_t vdev_id, bool disable_noa); |
| QDF_STATUS (*reg_lo_ev_handler)(struct wlan_objmgr_psoc *psoc, |
| void *arg); |
| QDF_STATUS (*reg_noa_ev_handler)(struct wlan_objmgr_psoc *psoc, |
| void *arg); |
| QDF_STATUS (*unreg_lo_ev_handler)(struct wlan_objmgr_psoc *psoc, |
| void *arg); |
| QDF_STATUS (*unreg_noa_ev_handler)(struct wlan_objmgr_psoc *psoc, |
| void *arg); |
| }; |
| #endif |
| |
| #ifdef WLAN_ATF_ENABLE |
| |
| /** |
| * struct wlan_lmac_if_atf_tx_ops - ATF specific tx function pointers |
| * @atf_update_peer_txtoken: Update peer Tx token |
| * @atf_set_enable_disable: Set atf enable/disable |
| * @atf_tokens_used: Get used atf tokens |
| * @atf_get_unused_txtoken: Get unused atf tokens |
| * @atf_peer_resume: Resume peer |
| * @atf_tokens_unassigned: Set unassigned atf tockens |
| * @atf_capable_peer: Set atf state change |
| * @atf_airtime_estimate: Get estimated airtime |
| * @atf_debug_peerstate: Get peer state |
| * @atf_enable_disable: Set atf peer stats enable/disable |
| * @atf_ssid_sched_policy: Set ssid schedule policy |
| * @atf_set: Set atf |
| * @atf_set_grouping: Set atf grouping |
| * @atf_send_peer_request: Send peer requests |
| * @atf_set_bwf: Set bandwidth fairness |
| * @atf_peer_buf_held: Get buffer held |
| * @atf_get_peer_airtime: Get peer airtime |
| * @atf_get_chbusyper: Get channel busy |
| * @atf_open: ATF open |
| * @atf_register_event_handler ATF register wmi event handlers |
| * @atf_unregister_event_handler ATF unregister wmi event handlers |
| */ |
| struct wlan_lmac_if_atf_tx_ops { |
| void (*atf_update_peer_txtoken)(struct wlan_objmgr_pdev *pdev, |
| struct wlan_objmgr_peer *peer, |
| struct atf_stats *stats); |
| void (*atf_set_enable_disable)(struct wlan_objmgr_pdev *pdev, |
| uint8_t value); |
| uint8_t (*atf_tokens_used)(struct wlan_objmgr_pdev *pdev, |
| struct wlan_objmgr_peer *peer); |
| void (*atf_get_unused_txtoken)(struct wlan_objmgr_pdev *pdev, |
| struct wlan_objmgr_peer *peer, |
| int *unused_token); |
| void (*atf_peer_resume)(struct wlan_objmgr_pdev *pdev, |
| struct wlan_objmgr_peer *peer); |
| void (*atf_tokens_unassigned)(struct wlan_objmgr_pdev *pdev, |
| uint32_t tokens_unassigned); |
| void (*atf_capable_peer)(struct wlan_objmgr_pdev *pdev, |
| struct wlan_objmgr_peer *peer, |
| uint8_t val, uint8_t atfstate_change); |
| uint32_t (*atf_airtime_estimate)(struct wlan_objmgr_pdev *pdev, |
| struct wlan_objmgr_peer *peer, |
| uint32_t tput, |
| uint32_t *possible_tput); |
| uint32_t (*atf_debug_peerstate)(struct wlan_objmgr_pdev *pdev, |
| struct wlan_objmgr_peer *peer); |
| |
| int32_t (*atf_enable_disable)(struct wlan_objmgr_vdev *vdev, |
| uint8_t value); |
| int32_t (*atf_ssid_sched_policy)(struct wlan_objmgr_vdev *vdev, |
| uint8_t value); |
| int32_t (*atf_set)(struct wlan_objmgr_pdev *pdev, |
| struct pdev_atf_req *atf_req, |
| uint8_t atf_tput_based); |
| int32_t (*atf_set_grouping)(struct wlan_objmgr_pdev *pdev, |
| struct pdev_atf_ssid_group_req *atf_grp_req, |
| uint8_t atf_tput_based); |
| int32_t (*atf_send_peer_request)(struct wlan_objmgr_pdev *pdev, |
| struct pdev_atf_peer_ext_request *atfr, |
| uint8_t atf_tput_based); |
| int32_t (*atf_set_bwf)(struct wlan_objmgr_pdev *pdev, |
| struct pdev_bwf_req *bwf_req); |
| uint32_t (*atf_peer_buf_held)(struct wlan_objmgr_peer *peer); |
| uint32_t (*atf_get_peer_airtime)(struct wlan_objmgr_peer *peer); |
| uint32_t (*atf_get_chbusyper)(struct wlan_objmgr_pdev *pdev); |
| void (*atf_open)(struct wlan_objmgr_psoc *psoc); |
| void (*atf_register_event_handler)(struct wlan_objmgr_psoc *psoc); |
| void (*atf_unregister_event_handler)(struct wlan_objmgr_psoc *psoc); |
| }; |
| #endif |
| |
| #ifdef WIFI_POS_CONVERGED |
| /* |
| * struct wlan_lmac_if_wifi_pos_tx_ops - structure of firmware tx function |
| * pointers for wifi_pos component |
| * @data_req_tx: function pointer to send wifi_pos req to firmware |
| */ |
| struct wlan_lmac_if_wifi_pos_tx_ops { |
| QDF_STATUS (*data_req_tx)(struct wlan_objmgr_psoc *psoc, |
| struct oem_data_req *req); |
| }; |
| #endif |
| |
| #ifdef CONVERGED_TDLS_ENABLE |
| /* fwd declarations for tdls tx ops */ |
| struct tdls_info; |
| struct tdls_peer_update_state; |
| struct tdls_channel_switch_params; |
| struct sta_uapsd_trig_params; |
| /** |
| * struct wlan_lmac_if_tdls_tx_ops - south bound tx function pointers for tdls |
| * @update_fw_state: function to update tdls firmware state |
| * @update_peer_state: function to update tdls peer state |
| * @set_offchan_mode: function to set tdls offchannel mode |
| * @tdls_reg_ev_handler: function to register for tdls events |
| * @tdls_unreg_ev_handler: function to unregister for tdls events |
| * @tdls_set_uapsd: function to set upasdt trigger command |
| * |
| * tdls module uses these functions to avail ol/da lmac services |
| */ |
| struct wlan_lmac_if_tdls_tx_ops { |
| QDF_STATUS(*update_fw_state)(struct wlan_objmgr_psoc *psoc, |
| struct tdls_info *req); |
| QDF_STATUS(*update_peer_state)(struct wlan_objmgr_psoc *psoc, |
| struct tdls_peer_update_state *param); |
| QDF_STATUS(*set_offchan_mode)(struct wlan_objmgr_psoc *psoc, |
| struct tdls_channel_switch_params *param); |
| QDF_STATUS(*tdls_reg_ev_handler)(struct wlan_objmgr_psoc *psoc, |
| void *arg); |
| QDF_STATUS(*tdls_unreg_ev_handler) (struct wlan_objmgr_psoc *psoc, |
| void *arg); |
| QDF_STATUS(*tdls_set_uapsd)(struct wlan_objmgr_psoc *psoc, |
| struct sta_uapsd_trig_params *params); |
| }; |
| |
| /* fwd declarations for tdls rx ops */ |
| struct tdls_event_info; |
| /** |
| * struct wlan_lmac_if_tdls_rx_ops - south bound rx function pointers for tdls |
| * @tdls_ev_handler: function to handler tdls event |
| * |
| * lmac modules uses this API to post scan events to tdls module |
| */ |
| struct wlan_lmac_if_tdls_rx_ops { |
| QDF_STATUS(*tdls_ev_handler)(struct wlan_objmgr_psoc *psoc, |
| struct tdls_event_info *info); |
| }; |
| #endif |
| |
| #ifdef WLAN_FEATURE_NAN_CONVERGENCE |
| /** |
| * struct wlan_lmac_if_nan_tx_ops - structure of firwware tx function |
| * pointers for nan component |
| * @data_req_tx: function pointer to send nan req to firmware |
| */ |
| struct wlan_lmac_if_nan_tx_ops { |
| QDF_STATUS (*nan_req_tx)(void *req, uint32_t req_id); |
| }; |
| #endif |
| |
| /** |
| * struct wlan_lmac_reg_if_tx_ops - structure of tx function |
| * pointers for regulatory component |
| * @register_master_handler: pointer to register event handler |
| * @unregister_master_handler: pointer to unregister event handler |
| */ |
| struct wlan_lmac_if_reg_tx_ops { |
| QDF_STATUS (*register_master_handler)(struct wlan_objmgr_psoc *psoc, |
| void *arg); |
| QDF_STATUS (*unregister_master_handler)(struct wlan_objmgr_psoc *psoc, |
| void *arg); |
| }; |
| |
| /** |
| * struct wlan_lmac_if_dfs_tx_ops - Function pointer to call offload/lmac |
| * functions from DFS module. |
| * @dfs_enable: Enable DFS. |
| * @dfs_get_caps: Get DFS capabilities. |
| * @dfs_disable: Disable DFS |
| * @dfs_gettsf64: Get tsf64 value. |
| * @dfs_set_use_cac_prssi: Set use_cac_prssi value. |
| * @dfs_get_dfsdomain: Get DFS domain. |
| * @dfs_is_countryCode_CHINA: Check is country code CHINA. |
| * @dfs_get_thresholds: Get thresholds. |
| * @dfs_get_ext_busy: Get ext_busy. |
| * @dfs_get_target_type: Get target type. |
| * @dfs_is_countryCode_KOREA_ROC3: Check is county code Korea. |
| * @dfs_is_mode_offload: Check the radio for offload. |
| * @dfs_get_ah_devid: Get ah devid. |
| * @dfs_get_phymode_info: Get phymode info. |
| * @dfs_reg_ev_handler: Register dfs event handler. |
| */ |
| |
| struct wlan_lmac_if_dfs_tx_ops { |
| QDF_STATUS (*dfs_enable)(struct wlan_objmgr_pdev *pdev, |
| int *is_fastclk, |
| int32_t pe_firpwr, |
| int32_t pe_rrssi, |
| int32_t pe_height, |
| int32_t pe_prssi, |
| int32_t pe_inband, |
| uint32_t pe_relpwr, |
| uint32_t pe_relstep, |
| uint32_t pe_maxlen, |
| uint32_t dfsdomain); |
| QDF_STATUS (*dfs_get_caps)(struct wlan_objmgr_pdev *pdev, |
| bool *wlan_dfs_ext_chan_ok, |
| bool *wlan_dfs_combined_rssi_ok, |
| bool *wlan_dfs_use_enhancement, |
| bool *wlan_strong_signal_diversiry, |
| bool *wlan_chip_is_bb_tlv, |
| bool *wlan_chip_is_over_sampled, |
| bool *wlan_chip_is_ht160, |
| bool *wlan_chip_is_false_detect, |
| uint32_t *wlan_fastdiv_val); |
| QDF_STATUS (*dfs_disable)(struct wlan_objmgr_pdev *pdev, |
| int no_cac); |
| QDF_STATUS (*dfs_gettsf64)(struct wlan_objmgr_pdev *pdev, |
| uint64_t *tsf64); |
| QDF_STATUS (*dfs_set_use_cac_prssi)(struct wlan_objmgr_pdev *pdev); |
| QDF_STATUS (*dfs_get_dfsdomain)(struct wlan_objmgr_pdev *pdev, |
| int *country_china); |
| QDF_STATUS (*dfs_is_countryCode_CHINA)(struct wlan_objmgr_pdev *pdev, |
| bool *status); |
| QDF_STATUS (*dfs_get_thresholds)(struct wlan_objmgr_pdev *pdev, |
| int32_t *pe_firpwr, |
| int32_t *pe_rrssi, |
| int32_t *pe_height, |
| int32_t *pe_prssi, |
| int32_t *pe_inband, |
| uint32_t *pe_relpwr, |
| uint32_t *pe_relstep, |
| uint32_t *pe_maxlen); |
| QDF_STATUS (*dfs_get_ext_busy)(struct wlan_objmgr_pdev *pdev, |
| int *dfs_ext_chan_busy); |
| QDF_STATUS (*dfs_get_target_type)(struct wlan_objmgr_pdev *pdev, |
| uint32_t *target_type); |
| QDF_STATUS (*dfs_is_countryCode_KOREA_ROC3)( |
| struct wlan_objmgr_pdev *pdev, |
| bool *ctry_korea); |
| QDF_STATUS (*dfs_is_mode_offload)(struct wlan_objmgr_pdev *pdev, |
| bool *is_offload); |
| QDF_STATUS (*dfs_get_ah_devid)(struct wlan_objmgr_pdev *pdev, |
| uint16_t *devid); |
| QDF_STATUS (*dfs_get_phymode_info)(struct wlan_objmgr_pdev *pdev, |
| uint32_t chan_mode, |
| uint32_t *mode_info); |
| QDF_STATUS (*dfs_reg_ev_handler)(struct wlan_objmgr_pdev *pdev, |
| bool dfs_offload); |
| }; |
| |
| /** |
| * struct wlan_lmac_if_tx_ops - south bound tx function pointers |
| * @mgmt_txrx_tx_ops: mgmt txrx tx ops |
| * @scan: scan tx ops |
| * @dfs_tx_ops: dfs tx ops. |
| * |
| * Callback function tabled to be registered with umac. |
| * umac will use the functional table to send events/frames to lmac/wmi |
| */ |
| |
| struct wlan_lmac_if_tx_ops { |
| /* Components to declare function pointers required by the module |
| * in component specific structure. |
| * The component specific ops structure can be declared in this file |
| * only |
| */ |
| struct wlan_lmac_if_mgmt_txrx_tx_ops mgmt_txrx_tx_ops; |
| struct wlan_lmac_if_scan_tx_ops scan; |
| #ifdef WLAN_PMO_ENABLE |
| struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; |
| #endif |
| #ifdef CONVERGED_P2P_ENABLE |
| struct wlan_lmac_if_p2p_tx_ops p2p; |
| #endif |
| |
| #ifdef WLAN_ATF_ENABLE |
| struct wlan_lmac_if_atf_tx_ops atf_tx_ops; |
| #endif |
| |
| #ifdef WLAN_CONV_CRYPTO_SUPPORTED |
| struct wlan_lmac_if_crypto_tx_ops crypto_tx_ops; |
| #endif |
| |
| #ifdef WIFI_POS_CONVERGED |
| struct wlan_lmac_if_wifi_pos_tx_ops wifi_pos_tx_ops; |
| #endif |
| #ifdef WLAN_FEATURE_NAN_CONVERGENCE |
| struct wlan_lmac_if_nan_tx_ops nan_tx_ops; |
| #endif |
| struct wlan_lmac_if_reg_tx_ops reg_ops; |
| struct wlan_lmac_if_dfs_tx_ops dfs_tx_ops; |
| |
| #ifdef CONVERGED_TDLS_ENABLE |
| struct wlan_lmac_if_tdls_tx_ops tdls_tx_ops; |
| #endif |
| }; |
| |
| /** |
| * struct wlan_lmac_if_mgmt_txrx_rx_ops - structure of rx function |
| * pointers for mgmt txrx component |
| * @mgmt_tx_completion_handler: function pointer to give tx completions |
| * to mgmt txrx comp. |
| * @mgmt_rx_frame_handler: function pointer to give rx frame to mgmt txrx comp. |
| * @mgmt_txrx_get_nbuf_from_desc_id: function pointer to get nbuf from desc id |
| * @mgmt_txrx_get_peer_from_desc_id: function pointer to get peer from desc id |
| * @mgmt_txrx_get_vdev_id_from_desc_id: function pointer to get vdev id from |
| * desc id |
| */ |
| struct wlan_lmac_if_mgmt_txrx_rx_ops { |
| QDF_STATUS (*mgmt_tx_completion_handler)( |
| struct wlan_objmgr_psoc *psoc, |
| uint32_t desc_id, uint32_t status, |
| void *tx_compl_params); |
| QDF_STATUS (*mgmt_rx_frame_handler)( |
| struct wlan_objmgr_psoc *psoc, |
| qdf_nbuf_t buf, |
| struct mgmt_rx_event_params *mgmt_rx_params); |
| qdf_nbuf_t (*mgmt_txrx_get_nbuf_from_desc_id)( |
| struct wlan_objmgr_psoc *psoc, |
| uint32_t desc_id); |
| struct wlan_objmgr_peer * (*mgmt_txrx_get_peer_from_desc_id)( |
| struct wlan_objmgr_psoc *psoc, uint32_t desc_id); |
| uint8_t (*mgmt_txrx_get_vdev_id_from_desc_id)( |
| struct wlan_objmgr_psoc *psoc, |
| uint32_t desc_id); |
| }; |
| |
| #ifdef WLAN_PMO_ENABLE |
| |
| /* fwd declarations for pmo rx ops */ |
| struct pmo_gtk_rsp_params; |
| struct pmo_lphb_rsp; |
| |
| /** |
| * struct wlan_lmac_if_pmo_rx_ops - structure of rx function |
| * pointers for pmo component |
| * @gtk_rsp_event: function pointer to handle gtk rsp event from fwr |
| * @lphb_rsp_event: function pointer to handle lphb rsp event from fwr |
| */ |
| struct wlan_lmac_if_pmo_rx_ops { |
| QDF_STATUS(*rx_gtk_rsp_event)(struct wlan_objmgr_psoc *psoc, |
| struct pmo_gtk_rsp_params *rsp_param); |
| QDF_STATUS (*lphb_rsp_event)(struct wlan_objmgr_psoc *psoc, |
| struct pmo_lphb_rsp *rsp_param); |
| }; |
| #endif |
| struct wlan_lmac_if_reg_rx_ops { |
| QDF_STATUS (*master_list_handler)(struct cur_regulatory_info |
| *reg_info); |
| }; |
| |
| #ifdef CONVERGED_P2P_ENABLE |
| |
| /* forward declarations for p2p rx ops */ |
| struct p2p_noa_info; |
| struct p2p_lo_event; |
| |
| /** |
| * struct wlan_lmac_if_p2p_rx_ops - structure of rx function pointers |
| * for P2P component |
| * @lo_ev_handler: function pointer to give listen offload event |
| * @noa_ev_handler: function pointer to give noa event |
| */ |
| struct wlan_lmac_if_p2p_rx_ops { |
| QDF_STATUS (*lo_ev_handler)(struct wlan_objmgr_psoc *psoc, |
| struct p2p_lo_event *event_info); |
| QDF_STATUS (*noa_ev_handler)(struct wlan_objmgr_psoc *psoc, |
| struct p2p_noa_info *event_info); |
| }; |
| #endif |
| |
| #ifdef WLAN_ATF_ENABLE |
| |
| /** |
| * struct wlan_lmac_if_atf_rx_ops - ATF south bound rx function pointers |
| * @atf_get_atf_commit: Get ATF commit state |
| * @atf_get_fmcap: Get firmware capability for ATF |
| * @atf_get_obss_scale: Get OBSS scale |
| * @atf_get_mode: Get mode of ATF |
| * @atf_get_msdu_desc: Get msdu desc for ATF |
| * @atf_get_max_vdevs: Get maximum vdevs for a Radio |
| * @atf_get_peers: Get number of peers for a radio |
| * @atf_get_tput_based: Get throughput based enabled/disabled |
| * @atf_get_logging: Get logging enabled/disabled |
| * @atf_get_txbuf_share: Get TxBuff share state |
| * @atf_get_txbuf_max: Get TxBuff MAX number |
| * @atf_get_txbuf_min: Get TxBuff MIN number |
| * @atf_get_ssidgroup: Get ssid group state |
| * @atf_get_tx_block_count: Get tx block count |
| * @atf_get_peer_blk_txtraffic: Get peer tx traffic block state |
| * @atf_get_vdev_blk_txtraffic: Get vdev tx traffic block state |
| * @atf_get_sched: Get ATF scheduled policy |
| * @atf_get_tx_tokens: Get Tx tokens |
| * @atf_get_shadow_tx_tokens: Get shadow tx tokens |
| * @atf_get_tx_tokens_common: Get common tx tokens |
| * @atf_get_shadow_alloted_tx_tokens: Get shadow alloted tx tokens |
| * @atf_get_peer_stats: Get atf peer stats |
| * @atf_get_token_allocated: Get atf token allocated |
| * @atf_get_token_utilized: Get atf token utilized |
| * @atf_set_sched: Set ATF schedule policy |
| * @atf_set_fmcap: Set firmware capability for ATF |
| * @atf_set_obss_scale: Set ATF obss scale |
| * @atf_set_mode: Set ATF mode |
| * @atf_set_msdu_desc: Set msdu desc |
| * @atf_set_max_vdevs: Set maximum vdevs number |
| * @atf_set_peers: Set peers number |
| * @atf_set_peer_stats: Set peer stats |
| * @atf_set_vdev_blk_txtraffic: Set Block/unblock vdev tx traffic |
| * @atf_set_peer_blk_txtraffic: Set Block/unblock peer tx traffic |
| * @atf_set_tx_block_count: Set tx block count |
| * @atf_set_token_allocated: Set atf token allocated |
| * @atf_set_token_utilized: Set atf token utilized |
| */ |
| struct wlan_lmac_if_atf_rx_ops { |
| uint8_t (*atf_get_atf_commit)(struct wlan_objmgr_pdev *pdev); |
| uint32_t (*atf_get_fmcap)(struct wlan_objmgr_psoc *psoc); |
| uint32_t (*atf_get_obss_scale)(struct wlan_objmgr_pdev *pdev); |
| uint32_t (*atf_get_mode)(struct wlan_objmgr_psoc *psoc); |
| uint32_t (*atf_get_msdu_desc)(struct wlan_objmgr_psoc *psoc); |
| uint32_t (*atf_get_max_vdevs)(struct wlan_objmgr_psoc *psoc); |
| uint32_t (*atf_get_peers)(struct wlan_objmgr_psoc *psoc); |
| uint32_t (*atf_get_tput_based)(struct wlan_objmgr_pdev *pdev); |
| uint32_t (*atf_get_logging)(struct wlan_objmgr_pdev *pdev); |
| uint8_t (*atf_get_txbuf_share)(struct wlan_objmgr_pdev *pdev); |
| uint16_t (*atf_get_txbuf_max)(struct wlan_objmgr_pdev *pdev); |
| uint16_t (*atf_get_txbuf_min)(struct wlan_objmgr_pdev *pdev); |
| uint32_t (*atf_get_ssidgroup)(struct wlan_objmgr_pdev *pdev); |
| uint32_t (*atf_get_tx_block_count)(struct wlan_objmgr_vdev *vdev); |
| uint8_t (*atf_get_peer_blk_txtraffic)(struct wlan_objmgr_peer *peer); |
| uint8_t (*atf_get_vdev_blk_txtraffic)(struct wlan_objmgr_vdev *vdev); |
| uint32_t (*atf_get_sched)(struct wlan_objmgr_pdev *pdev); |
| uint32_t (*atf_get_tx_tokens)(struct wlan_objmgr_peer *peer); |
| uint32_t (*atf_get_shadow_tx_tokens)(struct wlan_objmgr_peer *peer); |
| uint32_t (*atf_get_txtokens_common)(struct wlan_objmgr_pdev *pdev); |
| uint32_t (*atf_get_shadow_alloted_tx_tokens)( |
| struct wlan_objmgr_pdev *pdev); |
| void (*atf_get_peer_stats)(struct wlan_objmgr_peer *peer, |
| struct atf_stats *stats); |
| uint16_t (*atf_get_token_allocated)(struct wlan_objmgr_peer *peer); |
| uint16_t (*atf_get_token_utilized)(struct wlan_objmgr_peer *peer); |
| |
| void (*atf_set_sched)(struct wlan_objmgr_pdev *pdev, uint32_t value); |
| void (*atf_set_fmcap)(struct wlan_objmgr_psoc *psoc, uint32_t value); |
| void (*atf_set_obss_scale)(struct wlan_objmgr_pdev *pdev, |
| uint32_t value); |
| void (*atf_set_mode)(struct wlan_objmgr_psoc *psoc, uint8_t value); |
| void (*atf_set_msdu_desc)(struct wlan_objmgr_psoc *psoc, |
| uint32_t value); |
| void (*atf_set_max_vdevs)(struct wlan_objmgr_psoc *psoc, |
| uint32_t value); |
| void (*atf_set_peers)(struct wlan_objmgr_psoc *psoc, uint32_t value); |
| void (*atf_set_peer_stats)(struct wlan_objmgr_peer *peer, |
| struct atf_stats *stats); |
| void (*atf_set_vdev_blk_txtraffic)(struct wlan_objmgr_vdev *vdev, |
| uint8_t value); |
| void (*atf_set_peer_blk_txtraffic)(struct wlan_objmgr_peer *peer, |
| uint8_t value); |
| void (*atf_set_tx_block_count)(struct wlan_objmgr_vdev *vdev, |
| uint32_t count); |
| void (*atf_set_token_allocated)(struct wlan_objmgr_peer *peer, |
| uint16_t value); |
| void (*atf_set_token_utilized)(struct wlan_objmgr_peer *peer, |
| uint16_t value); |
| }; |
| #endif |
| |
| #ifdef WIFI_POS_CONVERGED |
| /** |
| * struct wlan_lmac_if_wifi_pos_rx_ops - structure of rx function |
| * pointers for wifi_pos component |
| * @oem_rsp_event_rx: callback for WMI_OEM_RESPONSE_EVENTID |
| */ |
| struct wlan_lmac_if_wifi_pos_rx_ops { |
| int (*oem_rsp_event_rx)(struct wlan_objmgr_psoc *psoc, |
| struct oem_data_rsp *oem_rsp); |
| }; |
| #endif |
| |
| #ifdef WLAN_FEATURE_NAN_CONVERGENCE |
| /** |
| * struct wlan_lmac_if_nan_rx_ops - structure of rx function |
| * pointers for nan component |
| * @oem_rsp_event_rx: callback for WMI_OEM_RESPONSE_EVENTID |
| */ |
| struct wlan_lmac_if_nan_rx_ops { |
| QDF_STATUS (*nan_event_rx)(struct scheduler_msg *event); |
| }; |
| #endif |
| |
| /** |
| * struct wlan_lmac_if_dfs_rx_ops - Function pointers to call dfs functions |
| * from lmac/offload. |
| * @dfs_reset: Reset dfs. |
| * @dfs_get_radars: Calls init radar table functions. |
| * @dfs_process_phyerr: Process phyerr. |
| * @dfs_destroy_object: Destroys the DFS object. |
| * @dfs_radar_enable: Enables the radar. |
| * @dfs_attach: Allocates memory for wlan_dfs members. |
| * @dfs_sif_dfs_detach: DFS detach. |
| * @dfs_control: Used to process ioctls related to DFS. |
| * @dfs_nif_dfs_reset: DFS reset. |
| * @dfs_is_precac_timer_running: Check whether precac timer is running. |
| * @dfs_find_vht80_chan_for_precac: Find VHT80 channel for precac. |
| * @dfs_cancel_precac_timer: Cancel the precac timer. |
| * @dfs_override_precac_timeout: Override the default precac timeout. |
| * @dfs_set_precac_enable: Set precac enable flag. |
| * @dfs_get_precac_enable: Get precac enable flag. |
| * @dfs_get_override_precac_timeout: Get precac timeout. |
| * @dfs_set_current_channel: Set DFS current channel. |
| * @dfs_process_radar_ind: Process radar found indication. |
| * @dfs_dfs_cac_complete_ind: Process cac complete indication. |
| */ |
| struct wlan_lmac_if_dfs_rx_ops { |
| QDF_STATUS (*dfs_reset)(struct wlan_objmgr_pdev *pdev); |
| QDF_STATUS (*dfs_get_radars)(struct wlan_objmgr_pdev *pdev); |
| QDF_STATUS (*dfs_process_phyerr)(struct wlan_objmgr_pdev *pdev, |
| void *buf, |
| uint16_t datalen, |
| uint8_t r_rssi, |
| uint8_t r_ext_rssi, |
| uint32_t r_rs_tstamp, |
| uint64_t r_fulltsf); |
| QDF_STATUS (*dfs_destroy_object)(struct wlan_objmgr_pdev *pdev); |
| QDF_STATUS (*dfs_radar_enable)(struct wlan_objmgr_pdev *pdev, |
| int no_cac, |
| uint32_t opmode); |
| QDF_STATUS (*dfs_attach)(struct wlan_objmgr_pdev *pdev); |
| QDF_STATUS (*dfs_sif_dfs_detach)(struct wlan_objmgr_pdev *pdev); |
| QDF_STATUS (*dfs_control)(struct wlan_objmgr_pdev *pdev, |
| u_int id, |
| void *indata, |
| uint32_t insize, |
| void *outdata, |
| uint32_t *outsize, |
| int *error); |
| QDF_STATUS (*dfs_nif_dfs_reset)(struct wlan_objmgr_pdev *pdev); |
| QDF_STATUS (*dfs_is_precac_timer_running)(struct wlan_objmgr_pdev *pdev, |
| bool *is_precac_timer_running); |
| QDF_STATUS (*dfs_find_vht80_chan_for_precac)(struct wlan_objmgr_pdev *pdev, |
| uint32_t chan_mode, |
| uint8_t ch_freq_seg1, |
| uint32_t *cfreq1, |
| uint32_t *cfreq2, |
| uint32_t *phy_mode, |
| bool *dfs_set_cfreq2, |
| bool *set_agile); |
| QDF_STATUS (*dfs_cancel_precac_timer)(struct wlan_objmgr_pdev *pdev); |
| QDF_STATUS (*dfs_override_precac_timeout)( |
| struct wlan_objmgr_pdev *pdev, |
| int precac_timeout); |
| QDF_STATUS (*dfs_set_precac_enable)(struct wlan_objmgr_pdev *pdev, |
| uint32_t value); |
| QDF_STATUS (*dfs_get_precac_enable)(struct wlan_objmgr_pdev *pdev, |
| int *buff); |
| QDF_STATUS (*dfs_get_override_precac_timeout)( |
| struct wlan_objmgr_pdev *pdev, |
| int *precac_timeout); |
| QDF_STATUS (*dfs_set_current_channel)(struct wlan_objmgr_pdev *pdev, |
| uint16_t ic_freq, |
| uint32_t ic_flags, |
| uint16_t ic_flagext, |
| uint8_t ic_ieee, |
| uint8_t ic_vhtop_ch_freq_seg1, |
| uint8_t ic_vhtop_ch_freq_seg2); |
| #ifdef DFS_COMPONENT_ENABLE |
| QDF_STATUS (*dfs_process_radar_ind)(struct wlan_objmgr_pdev *pdev, |
| struct radar_found_info *radar_found); |
| QDF_STATUS (*dfs_dfs_cac_complete_ind)(struct wlan_objmgr_pdev *pdev, |
| uint32_t vdev_id); |
| #endif |
| }; |
| |
| /** |
| * struct wlan_lmac_if_rx_ops - south bound rx function pointers |
| * @mgmt_txrx_tx_ops: mgmt txrx rx ops |
| * @scan: scan rx ops |
| * @dfs_rx_ops: dfs rx ops. |
| * |
| * Callback function tabled to be registered with lmac/wmi. |
| * lmac will use the functional table to send events/frames to umac |
| */ |
| struct wlan_lmac_if_rx_ops { |
| /* Components to declare function pointers required by the module |
| * in component specific structure. |
| * The component specific ops structure can be declared in this file |
| * only |
| */ |
| struct wlan_lmac_if_mgmt_txrx_rx_ops mgmt_txrx_rx_ops; |
| struct wlan_lmac_if_scan_rx_ops scan; |
| #ifdef WLAN_PMO_ENABLE |
| struct wlan_lmac_if_pmo_rx_ops pmo_rx_ops; |
| #endif |
| #ifdef CONVERGED_P2P_ENABLE |
| struct wlan_lmac_if_p2p_rx_ops p2p; |
| #endif |
| |
| #ifdef WLAN_ATF_ENABLE |
| struct wlan_lmac_if_atf_rx_ops atf_rx_ops; |
| #endif |
| #ifdef WLAN_CONV_CRYPTO_SUPPORTED |
| struct wlan_lmac_if_crypto_rx_ops crypto_rx_ops; |
| #endif |
| #ifdef WIFI_POS_CONVERGED |
| struct wlan_lmac_if_wifi_pos_rx_ops wifi_pos_rx_ops; |
| #endif |
| #ifdef WLAN_FEATURE_NAN_CONVERGENCE |
| struct wlan_lmac_if_nan_rx_ops nan_rx_ops; |
| #endif |
| struct wlan_lmac_if_reg_rx_ops reg_rx_ops; |
| struct wlan_lmac_if_dfs_rx_ops dfs_rx_ops; |
| #ifdef CONVERGED_TDLS_ENABLE |
| struct wlan_lmac_if_tdls_rx_ops tdls_rx_ops; |
| #endif |
| }; |
| |
| /* Function pointer to call legacy tx_ops registration in OL/WMA. |
| */ |
| extern QDF_STATUS (*wlan_lmac_if_umac_tx_ops_register) |
| (struct wlan_lmac_if_tx_ops *tx_ops); |
| #endif /* _WLAN_LMAC_IF_DEF_H_ */ |