qcacmn: Add TDLS user command getTDLSPeers
Add TDLS user command getTDLSPeers for TDLS functional verification Change-Id: Ia02461a364ca604672d728f7dad7c3537e78f067 CRs-Fixed: 2146626
This commit is contained in:

committed by
Tushnim Bhattacharyya

父節點
5661cef405
當前提交
70113f22aa
@@ -44,8 +44,11 @@
|
||||
* @tdls_mgmt_comp: Completion to send tdls mgmt packets
|
||||
* @tdls_link_establish_req_comp: Completion to establish link, sync to
|
||||
* send establish params to firmware, not used today.
|
||||
* @tdls_teardown_comp: tdls teardown completion event
|
||||
* @tdls_user_cmd_comp: tdls user command completion event
|
||||
* @tdls_add_peer_status: Peer status after add peer
|
||||
* @mgmt_tx_completion_status: Tdls mgmt frames TX completion status code
|
||||
* @tdls_user_cmd_len: tdls user command written buffer length
|
||||
*/
|
||||
struct osif_tdls_vdev {
|
||||
struct completion tdls_add_peer_comp;
|
||||
@@ -53,8 +56,10 @@ struct osif_tdls_vdev {
|
||||
struct completion tdls_mgmt_comp;
|
||||
struct completion tdls_link_establish_req_comp;
|
||||
struct completion tdls_teardown_comp;
|
||||
struct completion tdls_user_cmd_comp;
|
||||
QDF_STATUS tdls_add_peer_status;
|
||||
uint32_t mgmt_tx_completion_status;
|
||||
uint32_t tdls_user_cmd_len;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -146,6 +151,17 @@ int wlan_cfg80211_tdls_oper(struct wlan_objmgr_pdev *pdev,
|
||||
const uint8_t *peer,
|
||||
enum nl80211_tdls_operation oper);
|
||||
|
||||
/**
|
||||
* wlan_cfg80211_tdls_get_all_peers() - get all the TDLS peers from the list
|
||||
* @vdev: vdev object
|
||||
* @buf: output buffer
|
||||
* @buflen: valid length of the output error
|
||||
*
|
||||
* Return: length of the output buffer
|
||||
*/
|
||||
int wlan_cfg80211_tdls_get_all_peers(struct wlan_objmgr_vdev *vdev,
|
||||
char *buf, int buflen);
|
||||
|
||||
/**
|
||||
* wlan_cfg80211_tdls_mgmt() - process tdls management frames from the supplicant
|
||||
* @pdev: pdev object
|
||||
|
@@ -67,6 +67,7 @@ QDF_STATUS wlan_cfg80211_tdls_priv_init(struct vdev_osif_priv *osif_priv)
|
||||
init_completion(&tdls_priv->tdls_mgmt_comp);
|
||||
init_completion(&tdls_priv->tdls_link_establish_req_comp);
|
||||
init_completion(&tdls_priv->tdls_teardown_comp);
|
||||
init_completion(&tdls_priv->tdls_user_cmd_comp);
|
||||
|
||||
osif_priv->osif_tdls = tdls_priv;
|
||||
|
||||
@@ -636,6 +637,56 @@ fail:
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_TDLS_NB_ID);
|
||||
}
|
||||
|
||||
int wlan_cfg80211_tdls_get_all_peers(struct wlan_objmgr_vdev *vdev,
|
||||
char *buf, int buflen)
|
||||
{
|
||||
struct vdev_osif_priv *osif_priv;
|
||||
struct osif_tdls_vdev *tdls_priv;
|
||||
int32_t len;
|
||||
QDF_STATUS status;
|
||||
unsigned long rc;
|
||||
|
||||
if (wlan_objmgr_vdev_try_get_ref(vdev, WLAN_OSIF_ID) !=
|
||||
QDF_STATUS_SUCCESS) {
|
||||
len = scnprintf(buf, buflen,
|
||||
"\nNo TDLS VDEV is null\n");
|
||||
return len;
|
||||
}
|
||||
|
||||
osif_priv = wlan_vdev_get_ospriv(vdev);
|
||||
tdls_priv = osif_priv->osif_tdls;
|
||||
|
||||
reinit_completion(&tdls_priv->tdls_user_cmd_comp);
|
||||
status = ucfg_tdls_get_all_peers(vdev, buf, buflen);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
cfg80211_err("ucfg_tdls_get_all_peers failed err %d", status);
|
||||
len = scnprintf(buf, buflen,
|
||||
"\nucfg_tdls_send_mgmt failed\n");
|
||||
goto error_get_tdls_peers;
|
||||
}
|
||||
|
||||
cfg80211_info("Wait for tdls_user_cmd_comp. Timeout %u ms",
|
||||
WAIT_TIME_FOR_TDLS_USER_CMD);
|
||||
|
||||
rc = wait_for_completion_timeout(
|
||||
&tdls_priv->tdls_user_cmd_comp,
|
||||
msecs_to_jiffies(WAIT_TIME_FOR_TDLS_USER_CMD));
|
||||
|
||||
if (0 == rc) {
|
||||
cfg80211_err("TDLS user cmd get all peers timed out rc %ld",
|
||||
rc);
|
||||
len = scnprintf(buf, buflen,
|
||||
"\nTDLS user cmd get all peers timed out\n");
|
||||
goto error_get_tdls_peers;
|
||||
}
|
||||
|
||||
len = tdls_priv->tdls_user_cmd_len;
|
||||
|
||||
error_get_tdls_peers:
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_OSIF_ID);
|
||||
return len;
|
||||
}
|
||||
|
||||
int wlan_cfg80211_tdls_mgmt(struct wlan_objmgr_pdev *pdev,
|
||||
struct net_device *dev, const uint8_t *peer_mac,
|
||||
uint8_t action_code, uint8_t dialog_token,
|
||||
@@ -840,6 +891,11 @@ void wlan_cfg80211_tdls_event_callback(void *user_data,
|
||||
case TDLS_EVENT_TEARDOWN_LINKS_DONE:
|
||||
complete(&tdls_priv->tdls_teardown_comp);
|
||||
break;
|
||||
case TDLS_EVENT_USER_CMD:
|
||||
tdls_priv->tdls_user_cmd_len = ind->status;
|
||||
complete(&tdls_priv->tdls_user_cmd_comp);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
Reference in New Issue
Block a user