mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-11 15:11:48 -04:00
qcacmn: Update address search flags for TDLS
Add support to set address search flags in WLAN Tx Descriptor for TDLS operation Change-Id: Iafb15fb1efd84a4bef436062368401a5496e4468 CRs-Fixed: 2041759
This commit is contained in:
parent
14f621c934
commit
56bfd8fdb3
9 changed files with 54 additions and 2 deletions
|
|
@ -440,13 +440,16 @@ struct cdp_soc_t {
|
|||
* to set values in vdev
|
||||
* @CDP_ENABLE_NAWDS: set nawds enable/disable
|
||||
* @CDP_ENABLE_MCAST_EN: enable/disable multicast enhancement
|
||||
*
|
||||
* @CDP_ENABLE_WDS: wds sta
|
||||
* @CDP_ENABLE_PROXYSTA: proxy sta
|
||||
* @CDP_UPDATE_TDLS_FLAGS: tdls link flags
|
||||
*/
|
||||
enum cdp_vdev_param_type {
|
||||
CDP_ENABLE_NAWDS,
|
||||
CDP_ENABLE_MCAST_EN,
|
||||
CDP_ENABLE_WDS,
|
||||
CDP_ENABLE_PROXYSTA,
|
||||
CDP_UPDATE_TDLS_FLAGS,
|
||||
};
|
||||
|
||||
#define TXRX_FW_STATS_TXSTATS 1
|
||||
|
|
|
|||
|
|
@ -3212,6 +3212,8 @@ static void dp_set_vdev_param(struct cdp_vdev *vdev_handle,
|
|||
case CDP_ENABLE_PROXYSTA:
|
||||
vdev->proxysta_vdev = val;
|
||||
break;
|
||||
case CDP_UPDATE_TDLS_FLAGS:
|
||||
vdev->tdls_link_connected = val;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1995,13 +1995,20 @@ QDF_STATUS dp_tx_vdev_attach(struct dp_vdev *vdev)
|
|||
void dp_tx_vdev_update_search_flags(struct dp_vdev *vdev)
|
||||
{
|
||||
/*
|
||||
* Enable both AddrY (SA based search) and AddrX (Da based search)
|
||||
* for TDLS link
|
||||
*
|
||||
* Enable AddrY (SA based search) only for non-WDS STA and
|
||||
* ProxySTA VAP modes.
|
||||
*
|
||||
* In all other VAP modes, only DA based search should be
|
||||
* enabled
|
||||
*/
|
||||
if ((vdev->opmode == wlan_op_mode_sta &&
|
||||
if (vdev->opmode == wlan_op_mode_sta &&
|
||||
vdev->tdls_link_connected)
|
||||
vdev->hal_desc_addr_search_flags =
|
||||
(HAL_TX_DESC_ADDRX_EN | HAL_TX_DESC_ADDRY_EN);
|
||||
else if ((vdev->opmode == wlan_op_mode_sta &&
|
||||
(!vdev->wds_enabled || vdev->proxysta_vdev)))
|
||||
vdev->hal_desc_addr_search_flags = HAL_TX_DESC_ADDRY_EN;
|
||||
else
|
||||
|
|
|
|||
|
|
@ -920,6 +920,8 @@ struct dp_vdev {
|
|||
privacy_exemption privacy_filters[MAX_PRIVACY_FILTERS];
|
||||
uint32_t filters_num;
|
||||
#endif
|
||||
/* TDLS Link status */
|
||||
bool tdls_link_connected;
|
||||
|
||||
/* VDEV operating mode */
|
||||
enum wlan_op_mode opmode;
|
||||
|
|
|
|||
|
|
@ -1693,6 +1693,13 @@ QDF_STATUS tdls_process_enable_link(struct tdls_oper_request *req)
|
|||
tdls_increment_peer_count(soc_obj);
|
||||
feature = soc_obj->tdls_configs.tdls_feature_flags;
|
||||
|
||||
if (soc_obj->tdls_dp_vdev_update)
|
||||
soc_obj->tdls_dp_vdev_update(&soc_obj->soc,
|
||||
peer->sta_id,
|
||||
soc_obj->tdls_update_dp_vdev_flags,
|
||||
((peer->link_status ==
|
||||
TDLS_LINK_CONNECTED) ? true : false));
|
||||
|
||||
tdls_debug("TDLS buffer sta: %d, uapsd_mask %d",
|
||||
TDLS_IS_BUFFER_STA_ENABLED(feature),
|
||||
soc_obj->tdls_configs.tdls_uapsd_mask);
|
||||
|
|
@ -1911,6 +1918,13 @@ QDF_STATUS tdls_process_remove_force_peer(struct tdls_oper_request *req)
|
|||
tdls_set_peer_link_status(peer, TDLS_LINK_TEARING,
|
||||
TDLS_LINK_UNSPECIFIED);
|
||||
|
||||
if (soc_obj->tdls_dp_vdev_update)
|
||||
soc_obj->tdls_dp_vdev_update(&soc_obj->soc,
|
||||
peer->sta_id,
|
||||
soc_obj->tdls_update_dp_vdev_flags,
|
||||
((peer->link_status ==
|
||||
TDLS_LINK_CONNECTED) ? true : false));
|
||||
|
||||
if (soc_obj->tdls_event_cb) {
|
||||
qdf_mem_copy(ind.peer_mac, macaddr, QDF_MAC_ADDR_SIZE);
|
||||
ind.vdev = vdev;
|
||||
|
|
|
|||
|
|
@ -536,6 +536,13 @@ void tdls_indicate_teardown(struct tdls_vdev_priv_obj *tdls_vdev,
|
|||
TDLS_LINK_UNSPECIFIED);
|
||||
tdls_notice("Teardown reason %d", reason);
|
||||
|
||||
if (tdls_soc->tdls_dp_vdev_update)
|
||||
tdls_soc->tdls_dp_vdev_update(&tdls_soc->soc,
|
||||
curr_peer->sta_id,
|
||||
tdls_soc->tdls_update_dp_vdev_flags,
|
||||
((curr_peer->link_status ==
|
||||
TDLS_LINK_CONNECTED) ? true : false));
|
||||
|
||||
indication.reason = reason;
|
||||
indication.vdev = tdls_vdev->vdev;
|
||||
qdf_mem_copy(indication.peer_mac, curr_peer->peer_mac.bytes,
|
||||
|
|
|
|||
|
|
@ -181,6 +181,7 @@ struct tdls_set_state_info {
|
|||
* @tdls_del_sta_req: store eWNI_SME_TDLS_DEL_STA_REQ value
|
||||
* @tdls_update_peer_state: store WMA_UPDATE_TDLS_PEER_STATE value
|
||||
* @tdls_del_all_peers:store eWNI_SME_DEL_ALL_TDLS_PEERS
|
||||
* @tdls_update_dp_vdev_flags store CDP_UPDATE_TDLS_FLAGS
|
||||
* @tdls_idle_peer_data: provide information about idle peer
|
||||
* @tdls_ct_spinlock: connection tracker spin lock
|
||||
*/
|
||||
|
|
@ -215,6 +216,7 @@ struct tdls_soc_priv_obj {
|
|||
void *tdls_evt_cb_data;
|
||||
tdls_register_tl_peer_callback tdls_reg_tl_peer;
|
||||
tdls_deregister_tl_peer_callback tdls_dereg_tl_peer;
|
||||
tdls_dp_vdev_update_flags_callback tdls_dp_vdev_update;
|
||||
void *tdls_tl_peer_data;
|
||||
qdf_list_t tx_q_ack;
|
||||
enum tdls_conc_cap tdls_con_cap;
|
||||
|
|
@ -223,6 +225,7 @@ struct tdls_soc_priv_obj {
|
|||
uint16_t tdls_del_sta_req;
|
||||
uint16_t tdls_update_peer_state;
|
||||
uint16_t tdls_del_all_peers;
|
||||
uint32_t tdls_update_dp_vdev_flags;
|
||||
struct tdls_ct_idle_peer_data tdls_idle_peer_data;
|
||||
qdf_spinlock_t tdls_ct_spinlock;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -530,6 +530,14 @@ typedef QDF_STATUS (*tdls_register_tl_peer_callback)(void *userdata,
|
|||
typedef QDF_STATUS (*tdls_deregister_tl_peer_callback)(void *userdata,
|
||||
uint32_t vdev_id,
|
||||
uint8_t sta_id);
|
||||
|
||||
/* This callback is used to update datapath vdev flags */
|
||||
typedef QDF_STATUS
|
||||
(*tdls_dp_vdev_update_flags_callback)(void *cbk_data,
|
||||
uint8_t sta_id,
|
||||
uint32_t vdev_param,
|
||||
bool is_link_up);
|
||||
|
||||
/**
|
||||
* struct tdls_start_params - tdls start params
|
||||
* @config: tdls user config
|
||||
|
|
@ -537,12 +545,15 @@ typedef QDF_STATUS (*tdls_deregister_tl_peer_callback)(void *userdata,
|
|||
* @tdls_add_sta_req: pass eWNI_SME_TDLS_ADD_STA_REQ value
|
||||
* @tdls_del_sta_req: pass eWNI_SME_TDLS_DEL_STA_REQ value
|
||||
* @tdls_update_peer_state: pass WMA_UPDATE_TDLS_PEER_STATE value
|
||||
* @tdls_del_all_peers: pass eWNI_SME_DEL_ALL_TDLS_PEERS
|
||||
* @tdls_update_dp_vdev_flags: pass CDP_UPDATE_TDLS_FLAGS
|
||||
* @tdls_event_cb: tdls event callback
|
||||
* @tdls_evt_cb_data: tdls event data
|
||||
* @ack_cnf_cb: tdls tx ack callback to indicate the tx status
|
||||
* @tx_ack_cnf_cb_data: tdls tx ack user data
|
||||
* @tdls_reg_tl_peer: tdls register tdls peer
|
||||
* @tdls_dereg_tl_peer: tdls deregister tdls peer
|
||||
* @tdls_dp_vdev_update: update vdev flags in datapath
|
||||
* @tdls_tl_peer_data: userdata for register/deregister TDLS peer
|
||||
*/
|
||||
struct tdls_start_params {
|
||||
|
|
@ -552,6 +563,7 @@ struct tdls_start_params {
|
|||
uint16_t tdls_del_sta_req;
|
||||
uint16_t tdls_update_peer_state;
|
||||
uint16_t tdls_del_all_peers;
|
||||
uint32_t tdls_update_dp_vdev_flags;
|
||||
tdls_rx_callback tdls_rx_cb;
|
||||
void *tdls_rx_cb_data;
|
||||
tdls_wmm_check tdls_wmm_cb;
|
||||
|
|
@ -562,6 +574,7 @@ struct tdls_start_params {
|
|||
void *tx_ack_cnf_cb_data;
|
||||
tdls_register_tl_peer_callback tdls_reg_tl_peer;
|
||||
tdls_deregister_tl_peer_callback tdls_dereg_tl_peer;
|
||||
tdls_dp_vdev_update_flags_callback tdls_dp_vdev_update;
|
||||
void *tdls_tl_peer_data;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -217,6 +217,7 @@ QDF_STATUS ucfg_tdls_update_config(struct wlan_objmgr_psoc *psoc,
|
|||
soc_obj->tdls_del_sta_req = req->tdls_del_sta_req;
|
||||
soc_obj->tdls_update_peer_state = req->tdls_update_peer_state;
|
||||
soc_obj->tdls_del_all_peers = req->tdls_del_all_peers;
|
||||
soc_obj->tdls_update_dp_vdev_flags = req->tdls_update_dp_vdev_flags;
|
||||
tdls_pm_call_backs.tdls_notify_increment_session =
|
||||
tdls_notify_increment_session;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue