qcacmn: Add support to get RSSI of Non associated clients

Add change in driver to get RSSI of non associated clients.

This is done in 2 levels of filtering
1. Send WMI to FW to configure BSSID in HW
2. Filter the neighbour BSSID packets received in host for
the configured client mac

Change-Id: I6b684b83cecb308dac326056aa77537aee07b933
CRs-Fixed: 2148773
This commit is contained in:
Soumya Bhat 2018-02-18 18:21:25 +05:30 • committed by snandini
commit bc719e6b02
5 changed files with 156 additions and 4 deletions

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2016-2017 The Linux Foundation. All rights reserved.
* Copyright (c) 2016-2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@ -762,4 +762,35 @@ cdp_get_pldev(ol_txrx_soc_handle soc,
return soc->ops->ctrl_ops->txrx_get_pldev(pdev);
}
#ifdef ATH_SUPPORT_NAC_RSSI
/**
* cdp_vdev_config_for_nac_rssi(): To invoke dp callback for nac rssi config
* @soc: soc pointer
* @vdev: vdev pointer
* @nac_cmd: specfies nac_rss config action add, del, list
* @bssid: Neighbour bssid
* @client_macaddr: Non-Associated client MAC
* @chan_num: channel number to scan
*
* Return: QDF_STATUS
*/
static inline QDF_STATUS cdp_vdev_config_for_nac_rssi(ol_txrx_soc_handle soc,
struct cdp_vdev *vdev, enum cdp_nac_param_cmd nac_cmd,
char *bssid, char *client_macaddr, uint8_t chan_num)
{
if (!soc || !soc->ops) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
"%s invalid instance", __func__);
QDF_BUG(0);
return QDF_STATUS_E_FAILURE;
}
if (!soc->ops->ctrl_ops ||
!soc->ops->ctrl_ops->txrx_vdev_config_for_nac_rssi)
return QDF_STATUS_E_FAILURE;
return soc->ops->ctrl_ops->txrx_vdev_config_for_nac_rssi(vdev,
nac_cmd, bssid, client_macaddr, chan_num);
}
#endif
#endif

View file

@ -45,6 +45,15 @@
#define CDP_PEER_DELETE_NO_SPECIAL 0
#define CDP_PEER_DO_NOT_START_UNMAP_TIMER 1
/* same as ieee80211_nac_param */
enum cdp_nac_param_cmd {
/* IEEE80211_NAC_PARAM_ADD */
CDP_NAC_PARAM_ADD = 1,
/* IEEE80211_NAC_PARAM_DEL */
CDP_NAC_PARAM_DEL,
/* IEEE80211_NAC_PARAM_LIST */
CDP_NAC_PARAM_LIST,
};
/******************************************************************************
*
* Control Interface (A Interface)
@ -473,6 +482,12 @@ struct cdp_ctrl_ops {
int (*txrx_wdi_event_handler)(struct cdp_pdev *pdev,
uint32_t event, void *evt_data);
void * (*txrx_get_pldev)(struct cdp_pdev *pdev);
#ifdef ATH_SUPPORT_NAC_RSSI
QDF_STATUS (*txrx_vdev_config_for_nac_rssi)(struct cdp_vdev *vdev,
enum cdp_nac_param_cmd cmd, char *bssid, char *client_macaddr,
uint8_t chan_num);
#endif
};
struct cdp_me_ops {
@ -699,7 +714,13 @@ struct ol_if_ops {
void (*record_act_change)(struct wlan_objmgr_pdev *pdev,
u_int8_t *dstmac, bool active);
#ifdef ATH_SUPPORT_NAC_RSSI
int (*config_fw_for_nac_rssi)(struct wlan_objmgr_pdev *pdev,
u_int8_t vdev_id, enum cdp_nac_param_cmd cmd, char *bssid,
char *client_macaddr, uint8_t chan_num);
int (*config_bssid_in_fw_for_nac_rssi)(struct wlan_objmgr_pdev *pdev,
u_int8_t vdev_id, enum cdp_nac_param_cmd cmd, char *bssid);
#endif
/* TODO: Add any other control path calls required to OL_IF/WMA layer */
};