qcacmn: Enable MU sniffer mode

Enable MU sniffer mode. MU sniffer mode support match and wildcard
mode.

Change-Id: I919b99ccabfba8f2e3b877831f473f8cf674b59d
这个提交包含在:
Kai Chen
2021-08-03 16:17:56 -07:00
提交者 Madan Koyyalamudi
父节点 2fd2127a4e
当前提交 ddc9f472ac
修改 6 个文件,包含 113 行新增0 行删除

查看文件

@@ -36,6 +36,8 @@
/** slot time short */ /** slot time short */
#define WLAN_MLME_VDEV_SLOT_TIME_SHORT 0x2 #define WLAN_MLME_VDEV_SLOT_TIME_SHORT 0x2
#define WLAN_MU_SNIF_MAX_AIDS 4
/** /**
* enum MLME_bcn_tx_rate_code - beacon tx rate code * enum MLME_bcn_tx_rate_code - beacon tx rate code
*/ */
@@ -611,6 +613,23 @@ struct vdev_set_params {
uint32_t param_value; uint32_t param_value;
}; };
/**
* struct vdev_set_mu_snif_params - vdev set mu sniffer cmd parameter
* @vdev_id: vdev id
* @mode: mu snif mode
* @num_user: max number of user
* @num_aid: number of set sta aid
* @aid: sta aids
*/
struct vdev_set_mu_snif_param {
uint32_t vdev_id;
uint32_t mode;
uint32_t num_user;
uint32_t num_aid;
uint32_t aid[WLAN_MU_SNIF_MAX_AIDS];
};
/** /**
* struct vdev_create_params - vdev create cmd parameter * struct vdev_create_params - vdev create cmd parameter
* @vdev_id: interface id * @vdev_id: interface id

查看文件

@@ -887,6 +887,18 @@ wmi_unified_roam_set_param_send(wmi_unified_t wmi_handle,
} }
#endif #endif
/**
* wmi_unified_vdev_set_param_send() - WMI vdev set parameter function
* @wmi_handle: handle to WMI.
* @macaddr: MAC address
* @param: pointer to hold vdev set parameter
*
* Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
*/
QDF_STATUS
wmi_unified_vdev_set_mu_snif_send(wmi_unified_t wmi_handle,
struct vdev_set_mu_snif_param *param);
/** /**
* wmi_unified_sifs_trigger_send() - WMI vdev sifs trigger parameter function * wmi_unified_sifs_trigger_send() - WMI vdev sifs trigger parameter function
* @wmi_handle: handle to WMI. * @wmi_handle: handle to WMI.

查看文件

@@ -5334,6 +5334,7 @@ typedef enum {
wmi_service_mgmt_rx_reo_supported, wmi_service_mgmt_rx_reo_supported,
wmi_service_phy_dma_byte_swap_support, wmi_service_phy_dma_byte_swap_support,
wmi_service_spectral_session_info_support, wmi_service_spectral_session_info_support,
wmi_service_mu_snif,
wmi_services_max, wmi_services_max,
} wmi_conv_service_ids; } wmi_conv_service_ids;
#define WMI_SERVICE_UNAVAILABLE 0xFFFF #define WMI_SERVICE_UNAVAILABLE 0xFFFF

查看文件

@@ -568,6 +568,9 @@ QDF_STATUS
QDF_STATUS (*send_vdev_set_param_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_vdev_set_param_cmd)(wmi_unified_t wmi_handle,
struct vdev_set_params *param); struct vdev_set_params *param);
QDF_STATUS (*send_vdev_set_mu_snif_cmd)(wmi_unified_t wmi_handle,
struct vdev_set_mu_snif_param *param);
QDF_STATUS (*send_vdev_sifs_trigger_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_vdev_sifs_trigger_cmd)(wmi_unified_t wmi_handle,
struct sifs_trigger_param *param); struct sifs_trigger_param *param);

查看文件

@@ -421,6 +421,16 @@ wmi_unified_roam_set_param_send(wmi_unified_t wmi_handle,
return QDF_STATUS_E_FAILURE; return QDF_STATUS_E_FAILURE;
} }
#endif #endif
QDF_STATUS
wmi_unified_vdev_set_mu_snif_send(wmi_unified_t wmi_handle,
struct vdev_set_mu_snif_param *param)
{
if (wmi_handle->ops->send_vdev_set_mu_snif_cmd)
return wmi_handle->ops->send_vdev_set_mu_snif_cmd(wmi_handle,
param);
return QDF_STATUS_E_FAILURE;
}
QDF_STATUS wmi_unified_sifs_trigger_send(wmi_unified_t wmi_handle, QDF_STATUS wmi_unified_sifs_trigger_send(wmi_unified_t wmi_handle,
struct sifs_trigger_param *param) struct sifs_trigger_param *param)

查看文件

@@ -2219,6 +2219,71 @@ static QDF_STATUS send_vdev_set_param_cmd_tlv(wmi_unified_t wmi_handle,
return ret; return ret;
} }
/**
* send_vdev_set_mu_snif_cmd_tlv() - WMI vdev set mu snif function
* @param wmi_handle : handle to WMI.
* @param param : pointer to hold mu sniffer parameter
*
* Return: 0 on success and -ve on failure.
*/
static
QDF_STATUS send_vdev_set_mu_snif_cmd_tlv(wmi_unified_t wmi_handle,
struct vdev_set_mu_snif_param *param)
{
QDF_STATUS ret;
wmi_vdev_set_mu_snif_cmd_param *cmd;
wmi_buf_t buf;
uint32_t *tmp_ptr;
uint16_t len = sizeof(*cmd);
uint8_t *buf_ptr;
uint32_t i;
/* Length TLV placeholder for array of uint32_t */
len += WMI_TLV_HDR_SIZE;
if (param->num_aid)
len += param->num_aid * sizeof(uint32_t);
buf = wmi_buf_alloc(wmi_handle, len);
if (!buf)
return QDF_STATUS_E_NOMEM;
buf_ptr = (uint8_t *)wmi_buf_data(buf);
cmd = (wmi_vdev_set_mu_snif_cmd_param *)buf_ptr;
WMITLV_SET_HDR(&cmd->tlv_header,
WMITLV_TAG_STRUC_wmi_vdev_set_mu_snif_cmd_param,
WMITLV_GET_STRUCT_TLVLEN
(wmi_vdev_set_mu_snif_cmd_param));
cmd->vdev_id = param->vdev_id;
cmd->mode = param->mode;
cmd->max_num_user = param->num_user;
buf_ptr += sizeof(*cmd);
tmp_ptr = (uint32_t *)(buf_ptr + WMI_TLV_HDR_SIZE);
for (i = 0; i < param->num_aid; ++i)
tmp_ptr[i] = param->aid[i];
WMITLV_SET_HDR(buf_ptr,
WMITLV_TAG_ARRAY_UINT32,
(param->num_aid * sizeof(uint32_t)));
wmi_debug("Setting vdev %d mode = %x, max user = %u aids= %u",
cmd->vdev_id, cmd->mode, cmd->max_num_user, param->num_aid);
wmi_mtrace(WMI_VDEV_SET_PARAM_CMDID, cmd->vdev_id, 0);
ret = wmi_unified_cmd_send(wmi_handle, buf, len,
WMI_VDEV_SET_MU_SNIF_CMDID);
if (QDF_IS_STATUS_ERROR(ret)) {
wmi_err("Failed to send set param command ret = %d", ret);
wmi_buf_free(buf);
}
return ret;
}
/** /**
* send_peer_based_pktlog_cmd() - Send WMI command to enable packet-log * send_peer_based_pktlog_cmd() - Send WMI command to enable packet-log
* @wmi_handle: handle to WMI. * @wmi_handle: handle to WMI.
@@ -5405,6 +5470,7 @@ static bool is_service_enabled_tlv(wmi_unified_t wmi_handle,
wmi_err("WMI service ext bit map is not saved yet"); wmi_err("WMI service ext bit map is not saved yet");
return false; return false;
} }
return WMI_SERVICE_EXT2_IS_ENABLED(soc->wmi_service_bitmap, return WMI_SERVICE_EXT2_IS_ENABLED(soc->wmi_service_bitmap,
soc->wmi_ext_service_bitmap, soc->wmi_ext_service_bitmap,
soc->wmi_ext2_service_bitmap, soc->wmi_ext2_service_bitmap,
@@ -16715,6 +16781,7 @@ struct wmi_ops tlv_ops = {
.send_crash_inject_cmd = send_crash_inject_cmd_tlv, .send_crash_inject_cmd = send_crash_inject_cmd_tlv,
.send_dbglog_cmd = send_dbglog_cmd_tlv, .send_dbglog_cmd = send_dbglog_cmd_tlv,
.send_vdev_set_param_cmd = send_vdev_set_param_cmd_tlv, .send_vdev_set_param_cmd = send_vdev_set_param_cmd_tlv,
.send_vdev_set_mu_snif_cmd = send_vdev_set_mu_snif_cmd_tlv,
.send_packet_log_enable_cmd = send_packet_log_enable_cmd_tlv, .send_packet_log_enable_cmd = send_packet_log_enable_cmd_tlv,
.send_peer_based_pktlog_cmd = send_peer_based_pktlog_cmd, .send_peer_based_pktlog_cmd = send_peer_based_pktlog_cmd,
.send_time_stamp_sync_cmd = send_time_stamp_sync_cmd_tlv, .send_time_stamp_sync_cmd = send_time_stamp_sync_cmd_tlv,
@@ -17971,6 +18038,7 @@ static void populate_tlv_service(uint32_t *wmi_service)
WMI_SERVICE_UNAVAILABLE; WMI_SERVICE_UNAVAILABLE;
wmi_service[wmi_service_spectral_session_info_support] = wmi_service[wmi_service_spectral_session_info_support] =
WMI_SERVICE_UNAVAILABLE; WMI_SERVICE_UNAVAILABLE;
wmi_service[wmi_service_mu_snif] = WMI_SERVICE_MU_SNIF;
} }
/** /**