qcacld-3.0: Unit test chan avoid

Add iw private command for unit test sap ch avoid

Change-Id: I27f051b47eb25e3a57be6449ccb778aefe5b0967
CRs-Fixed: 2186440
This commit is contained in:
Liangwei Dong 2018-02-07 17:08:17 +08:00 • committed by snandini
commit 2a7f2914a9
3 changed files with 104 additions and 1 deletions

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2012-2017 The Linux Foundation. All rights reserved.
* Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@ -108,6 +108,27 @@ struct channel_list_info {
#define WE_SET_SAP_CHANNELS 3
#define QCSAP_IOCTL_PRIV_SET_VAR_INT_GET_NONE (SIOCIWFIRSTPRIV + 16)
#define WE_UNIT_TEST_CMD 7
/*
* <ioctl>
* ch_avoid - unit test SAP channel avoidance
*
* @INPUT: chan avoid ranges
*
* @OUTPUT: none
*
* This IOCTL is used to fake a channel avoidance event.
* To test SAP/GO chan switch during chan avoid event process.
*
* @E.g: iwpriv wlan0 ch_avoid 2452 2462
*
* Supported Feature: SAP chan avoidance.
*
* Usage: Internal
*
* </ioctl>
*/
#define WE_SET_CHAN_AVOID 21
#define QCSAP_IOCTL_SET_CHANNEL_RANGE (SIOCIWFIRSTPRIV + 17)
#define WE_P2P_NOA_CMD 2

View file

@ -5980,6 +5980,15 @@ static const struct iw_priv_args hostapd_private_args[] = {
WE_UNIT_TEST_CMD, IW_PRIV_TYPE_INT | MAX_VAR_ARGS, 0,
"setUnitTestCmd"
}
#ifdef WLAN_DEBUG
,
{
WE_SET_CHAN_AVOID,
IW_PRIV_TYPE_INT | MAX_VAR_ARGS,
0,
"ch_avoid"
}
#endif
,
/* handlers for main ioctl */
{

View file

@ -2510,6 +2510,27 @@ static const struct ccp_freq_chan_map freq_chan_map[] = {
*/
#define WE_POLICY_SET_HW_MODE_CMD 20
/*
* <ioctl>
* ch_avoid - unit test SAP channel avoidance
*
* @INPUT: chan avoid ranges
*
* @OUTPUT: none
*
* This IOCTL is used to fake a channel avoidance event.
* To test SAP/GO chan switch during chan avoid event process.
*
* @E.g: iwpriv wlan0 ch_avoid 2452 2462
*
* Supported Feature: SAP chan avoidance.
*
* Usage: Internal
*
* </ioctl>
*/
#define WE_SET_CHAN_AVOID 21
/*
* <ioctl>
* set_scan_cfg - Set dual MAC scan config parameters.
@ -8625,6 +8646,47 @@ static int iw_get_policy_manager_ut_ops(struct hdd_context *hdd_ctx,
}
#endif
/**
* hdd_ch_avoid_unit_cmd - unit test ch avoidance
* @hdd_ctx: hdd_context
* @num_args: input args number
* @apps_args: args data ptr
*
* This is to inject a ch avoid event to do unit test SAP chan avoidance.
*
* Return: void
*/
#if WLAN_DEBUG
static void hdd_ch_avoid_unit_cmd(struct hdd_context *hdd_ctx,
int num_args, int *apps_args)
{
struct ch_avoid_ind_type ch_avoid;
int cnt = 0, i;
if (num_args < 2 || num_args > CH_AVOID_MAX_RANGE * 2 ||
num_args % 2 != 0)
return;
hdd_info("simulate ch avoid num_args %d", num_args);
for (i = 0; i < num_args && i < CH_AVOID_MAX_RANGE * 2; i++) {
ch_avoid.avoid_freq_range[cnt].start_freq =
apps_args[i];
ch_avoid.avoid_freq_range[cnt].end_freq =
apps_args[++i];
hdd_info("simulate ch avoid [%d %d]",
ch_avoid.avoid_freq_range[cnt].start_freq,
ch_avoid.avoid_freq_range[cnt].end_freq);
cnt++;
}
ch_avoid.ch_avoid_range_cnt = cnt;
ucfg_reg_unit_simulate_ch_avoid(hdd_ctx->hdd_psoc, &ch_avoid);
}
#else
static void hdd_ch_avoid_unit_cmd(struct hdd_context *hdd_ctx,
int num_args, int *apps_args)
{
}
#endif
/**
* __iw_set_var_ints_getnone - Generic "set many" private ioctl handler
* @dev: device upon which the ioctl was received
@ -8861,6 +8923,11 @@ static int __iw_set_var_ints_getnone(struct net_device *dev,
sub_cmd, apps_args);
}
break;
case WE_SET_CHAN_AVOID:
{
hdd_ch_avoid_unit_cmd(hdd_ctx, num_args, apps_args);
}
break;
default:
{
hdd_err("Invalid IOCTL command %d", sub_cmd);
@ -11827,6 +11894,12 @@ static const struct iw_priv_args we_private_args[] = {
IW_PRIV_TYPE_INT | MAX_VAR_ARGS,
0,
"gpio_control"},
#endif
#ifdef WLAN_DEBUG
{WE_SET_CHAN_AVOID,
IW_PRIV_TYPE_INT | MAX_VAR_ARGS,
0,
"ch_avoid"},
#endif
/* handlers for main ioctl */
{WLAN_PRIV_FIPS_TEST,