qcacld-3.0: Support to configure RM enabled capability IE
qcacld-2.0 to qcacld-3.0 propagation Add support to configure RM enabled capbility information element through INI. Using the introduced INI config option(rm_capability), we can set or unset any bit in the IE. Default value for the config parameter is set based on rrmInitialize routine. Change-Id: Ia2a4352760db77ab71dad4757eb603d7539ffefa CRs-Fixed: 918667
This commit is contained in:

committed by
Prakash Dhavali

parent
bee4f78cbe
commit
f599c6e7d3
@@ -818,6 +818,18 @@ typedef enum {
|
|||||||
#define CFG_RRM_MEAS_RANDOMIZATION_INTVL_MIN (10)
|
#define CFG_RRM_MEAS_RANDOMIZATION_INTVL_MIN (10)
|
||||||
#define CFG_RRM_MEAS_RANDOMIZATION_INTVL_MAX (100)
|
#define CFG_RRM_MEAS_RANDOMIZATION_INTVL_MAX (100)
|
||||||
#define CFG_RRM_MEAS_RANDOMIZATION_INTVL_DEFAULT (100)
|
#define CFG_RRM_MEAS_RANDOMIZATION_INTVL_DEFAULT (100)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This INI is used to configure RM enabled capabilities IE.
|
||||||
|
* Using this INI, we can set/unset any of the bits in 5 bytes
|
||||||
|
* (last 4bytes are reserved). Bit details are updated as per
|
||||||
|
* Draft version of 11mc spec. (Draft P802.11REVmc_D4.2)
|
||||||
|
*
|
||||||
|
* Bitwise details are defined as bit mask in rrmGlobal.h
|
||||||
|
* Comma is used as a separator for each byte.
|
||||||
|
*/
|
||||||
|
#define CFG_RM_CAPABILITY_NAME "rm_capability"
|
||||||
|
#define CFG_RM_CAPABILITY_DEFAULT "73,00,6D,00,04"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define CFG_QOS_IMPLICIT_SETUP_ENABLED_NAME "ImplicitQosIsEnabled"
|
#define CFG_QOS_IMPLICIT_SETUP_ENABLED_NAME "ImplicitQosIsEnabled"
|
||||||
@@ -2808,6 +2820,8 @@ struct hdd_config {
|
|||||||
uint8_t nInChanMeasMaxDuration;
|
uint8_t nInChanMeasMaxDuration;
|
||||||
uint8_t nOutChanMeasMaxDuration;
|
uint8_t nOutChanMeasMaxDuration;
|
||||||
uint16_t nRrmRandnIntvl;
|
uint16_t nRrmRandnIntvl;
|
||||||
|
/* length includes separator */
|
||||||
|
char rm_capability[3 * DOT11F_IE_RRMENABLEDCAP_MAX_LEN];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WLAN_FEATURE_VOWIFI_11R
|
#ifdef WLAN_FEATURE_VOWIFI_11R
|
||||||
@@ -3442,6 +3456,9 @@ void hdd_dfs_indicate_radar(void *context, void *param);
|
|||||||
|
|
||||||
CDF_STATUS hdd_string_to_u8_array(char *str, uint8_t *intArray, uint8_t *len,
|
CDF_STATUS hdd_string_to_u8_array(char *str, uint8_t *intArray, uint8_t *len,
|
||||||
uint8_t intArrayMaxLen);
|
uint8_t intArrayMaxLen);
|
||||||
|
CDF_STATUS hdd_hex_string_to_u16_array(char *str, uint16_t *int_array,
|
||||||
|
uint8_t *len, uint8_t int_array_max_len);
|
||||||
|
|
||||||
void hdd_cfg_print(hdd_context_t *pHddCtx);
|
void hdd_cfg_print(hdd_context_t *pHddCtx);
|
||||||
|
|
||||||
CDF_STATUS hdd_update_nss(hdd_context_t *hdd_ctx, uint8_t nss);
|
CDF_STATUS hdd_update_nss(hdd_context_t *hdd_ctx, uint8_t nss);
|
||||||
|
@@ -1333,6 +1333,11 @@ REG_TABLE_ENTRY g_registry_table[] = {
|
|||||||
CFG_RRM_MEAS_RANDOMIZATION_INTVL_DEFAULT,
|
CFG_RRM_MEAS_RANDOMIZATION_INTVL_DEFAULT,
|
||||||
CFG_RRM_MEAS_RANDOMIZATION_INTVL_MIN,
|
CFG_RRM_MEAS_RANDOMIZATION_INTVL_MIN,
|
||||||
CFG_RRM_MEAS_RANDOMIZATION_INTVL_MAX),
|
CFG_RRM_MEAS_RANDOMIZATION_INTVL_MAX),
|
||||||
|
|
||||||
|
REG_VARIABLE_STRING(CFG_RM_CAPABILITY_NAME, WLAN_PARAM_String,
|
||||||
|
struct hdd_config, rm_capability,
|
||||||
|
VAR_FLAGS_OPTIONAL,
|
||||||
|
(void *) CFG_RM_CAPABILITY_DEFAULT),
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WLAN_FEATURE_VOWIFI_11R
|
#ifdef WLAN_FEATURE_VOWIFI_11R
|
||||||
@@ -5403,40 +5408,85 @@ static void hdd_set_fine_time_meas_cap(hdd_context_t *hdd_ctx,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* hdd_string_to_u8_array() - scan the string and convert to u8 array
|
* hdd_convert_string_to_u8_array() - used to convert string into u8 array
|
||||||
* @str: the pointer to the string
|
* @str: String to be converted
|
||||||
* @intArray: the pointer of buffer to store the u8 value
|
* @hex_array: Array where converted value is stored
|
||||||
* @len: size of the buffer
|
* @len: Length of the populated array
|
||||||
|
* @array_max_len: Maximum length of the array
|
||||||
|
* @to_hex: true, if conversion required for hex string
|
||||||
*
|
*
|
||||||
* Return: CDF_STATUS_SUCCESS if the conversion is done,
|
* This API is called to convert string (each byte separated by
|
||||||
* otherwise CDF_STATUS_E_INVAL
|
* a comma) into an u8 array
|
||||||
|
*
|
||||||
|
* Return: CDF_STATUS
|
||||||
*/
|
*/
|
||||||
CDF_STATUS hdd_string_to_u8_array(char *str, uint8_t *intArray, uint8_t *len,
|
|
||||||
uint8_t intArrayMaxLen)
|
static CDF_STATUS hdd_convert_string_to_array(char *str, uint8_t *array,
|
||||||
|
uint8_t *len, uint8_t array_max_len, bool to_hex)
|
||||||
{
|
{
|
||||||
char *s = str;
|
char *format, *s = str;
|
||||||
|
|
||||||
if (str == NULL || intArray == NULL || len == NULL) {
|
if (str == NULL || array == NULL || len == NULL)
|
||||||
return CDF_STATUS_E_INVAL;
|
return CDF_STATUS_E_INVAL;
|
||||||
}
|
|
||||||
*len = 0;
|
|
||||||
|
|
||||||
while ((s != NULL) && (*len < intArrayMaxLen)) {
|
format = (to_hex) ? "%02x" : "%d";
|
||||||
|
|
||||||
|
*len = 0;
|
||||||
|
while ((s != NULL) && (*len < array_max_len)) {
|
||||||
int val;
|
int val;
|
||||||
/* Increment length only if sscanf succesfully extracted one element.
|
/* Increment length only if sscanf successfully extracted
|
||||||
* Any other return value means error. Ignore it.
|
* one element. Any other return value means error.
|
||||||
*/
|
* Ignore it. */
|
||||||
if (sscanf(s, "%d", &val) == 1) {
|
if (sscanf(s, format, &val) == 1) {
|
||||||
intArray[*len] = (uint8_t) val;
|
array[*len] = (uint8_t) val;
|
||||||
*len += 1;
|
*len += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
s = strpbrk(s, ",");
|
s = strpbrk(s, ",");
|
||||||
if (s)
|
if (s)
|
||||||
s++;
|
s++;
|
||||||
}
|
}
|
||||||
|
|
||||||
return CDF_STATUS_SUCCESS;
|
return CDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hdd_hex_string_to_u8_array() - used to convert hex string into u8 array
|
||||||
|
* @str: Hexadecimal string
|
||||||
|
* @hex_array: Array where converted value is stored
|
||||||
|
* @len: Length of the populated array
|
||||||
|
* @array_max_len: Maximum length of the array
|
||||||
|
*
|
||||||
|
* This API is called to convert hexadecimal string (each byte separated by
|
||||||
|
* a comma) into an u8 array
|
||||||
|
*
|
||||||
|
* Return: CDF_STATUS
|
||||||
|
*/
|
||||||
|
CDF_STATUS hdd_hex_string_to_u8_array(char *str, uint8_t *hex_array,
|
||||||
|
uint8_t *len, uint8_t array_max_len)
|
||||||
|
{
|
||||||
|
return hdd_convert_string_to_array(str, hex_array, len,
|
||||||
|
array_max_len, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hdd_string_to_u8_array() - used to convert decimal string into u8 array
|
||||||
|
* @str: Decimal string
|
||||||
|
* @hex_array: Array where converted value is stored
|
||||||
|
* @len: Length of the populated array
|
||||||
|
* @array_max_len: Maximum length of the array
|
||||||
|
*
|
||||||
|
* This API is called to convert decimal string (each byte separated by
|
||||||
|
* a comma) into an u8 array
|
||||||
|
*
|
||||||
|
* Return: CDF_STATUS
|
||||||
|
*/
|
||||||
|
|
||||||
|
CDF_STATUS hdd_string_to_u8_array(char *str, uint8_t *array,
|
||||||
|
uint8_t *len, uint8_t array_max_len)
|
||||||
|
{
|
||||||
|
return hdd_convert_string_to_array(str, array, len,
|
||||||
|
array_max_len, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -5636,31 +5686,6 @@ bool hdd_update_config_dat(hdd_context_t *pHddCtx)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if defined WLAN_FEATURE_VOWIFI
|
#if defined WLAN_FEATURE_VOWIFI
|
||||||
if (sme_cfg_set_int
|
|
||||||
(pHddCtx->hHal, WNI_CFG_RRM_ENABLED, pConfig->fRrmEnable)
|
|
||||||
== CDF_STATUS_E_FAILURE) {
|
|
||||||
fStatus = false;
|
|
||||||
hddLog(LOGE,
|
|
||||||
"Could not pass on WNI_CFG_RRM_ENABLE to CFG");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sme_cfg_set_int
|
|
||||||
(pHddCtx->hHal, WNI_CFG_RRM_OPERATING_CHAN_MAX,
|
|
||||||
pConfig->nInChanMeasMaxDuration) == CDF_STATUS_E_FAILURE) {
|
|
||||||
fStatus = false;
|
|
||||||
hddLog(LOGE,
|
|
||||||
"Could not pass on WNI_CFG_RRM_OPERATING_CHAN_MAX to CFG");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sme_cfg_set_int
|
|
||||||
(pHddCtx->hHal, WNI_CFG_RRM_NON_OPERATING_CHAN_MAX,
|
|
||||||
pConfig->nOutChanMeasMaxDuration) ==
|
|
||||||
CDF_STATUS_E_FAILURE) {
|
|
||||||
fStatus = false;
|
|
||||||
hddLog(LOGE,
|
|
||||||
"Could not pass on WNI_CFG_RRM_OUT_CHAN_MAX to CFG");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sme_cfg_set_int
|
if (sme_cfg_set_int
|
||||||
(pHddCtx->hHal, WNI_CFG_MCAST_BCAST_FILTER_SETTING,
|
(pHddCtx->hHal, WNI_CFG_MCAST_BCAST_FILTER_SETTING,
|
||||||
pConfig->mcastBcastFilterSetting) == CDF_STATUS_E_FAILURE)
|
pConfig->mcastBcastFilterSetting) == CDF_STATUS_E_FAILURE)
|
||||||
@@ -6215,6 +6240,7 @@ CDF_STATUS hdd_set_sme_config(hdd_context_t *pHddCtx)
|
|||||||
{
|
{
|
||||||
CDF_STATUS status = CDF_STATUS_SUCCESS;
|
CDF_STATUS status = CDF_STATUS_SUCCESS;
|
||||||
tSmeConfigParams *smeConfig;
|
tSmeConfigParams *smeConfig;
|
||||||
|
uint8_t rrm_capab_len;
|
||||||
|
|
||||||
struct hdd_config *pConfig = pHddCtx->config;
|
struct hdd_config *pConfig = pHddCtx->config;
|
||||||
|
|
||||||
@@ -6299,8 +6325,11 @@ CDF_STATUS hdd_set_sme_config(hdd_context_t *pHddCtx)
|
|||||||
smeConfig->csrConfig.WMMSupportMode = pConfig->WmmMode;
|
smeConfig->csrConfig.WMMSupportMode = pConfig->WmmMode;
|
||||||
|
|
||||||
#if defined WLAN_FEATURE_VOWIFI
|
#if defined WLAN_FEATURE_VOWIFI
|
||||||
smeConfig->rrmConfig.rrmEnabled = pConfig->fRrmEnable;
|
smeConfig->rrmConfig.rrm_enabled = pConfig->fRrmEnable;
|
||||||
smeConfig->rrmConfig.maxRandnInterval = pConfig->nRrmRandnIntvl;
|
smeConfig->rrmConfig.max_randn_interval = pConfig->nRrmRandnIntvl;
|
||||||
|
hdd_hex_string_to_u8_array(pConfig->rm_capability,
|
||||||
|
smeConfig->rrmConfig.rm_capability, &rrm_capab_len,
|
||||||
|
DOT11F_IE_RRMENABLEDCAP_MAX_LEN);
|
||||||
#endif
|
#endif
|
||||||
/* Remaining config params not obtained from registry
|
/* Remaining config params not obtained from registry
|
||||||
* On RF EVB beacon using channel 1.
|
* On RF EVB beacon using channel 1.
|
||||||
|
@@ -278,6 +278,14 @@ typedef enum eSirResultCodes {
|
|||||||
eSIR_DONOT_USE_RESULT_CODE = SIR_MAX_ENUM_SIZE
|
eSIR_DONOT_USE_RESULT_CODE = SIR_MAX_ENUM_SIZE
|
||||||
} tSirResultCodes;
|
} tSirResultCodes;
|
||||||
|
|
||||||
|
#define RMENABLEDCAP_MAX_LEN 5
|
||||||
|
|
||||||
|
struct rrm_config_param {
|
||||||
|
uint8_t rrm_enabled;
|
||||||
|
uint8_t max_randn_interval;
|
||||||
|
uint8_t rm_capability[RMENABLEDCAP_MAX_LEN];
|
||||||
|
};
|
||||||
|
|
||||||
/* each station added has a rate mode which specifies the sta attributes */
|
/* each station added has a rate mode which specifies the sta attributes */
|
||||||
typedef enum eStaRateMode {
|
typedef enum eStaRateMode {
|
||||||
eSTA_TAURUS = 0,
|
eSTA_TAURUS = 0,
|
||||||
@@ -973,6 +981,7 @@ typedef struct sSirSmeJoinReq {
|
|||||||
tAniBool isWMEenabled;
|
tAniBool isWMEenabled;
|
||||||
tAniBool isQosEnabled;
|
tAniBool isQosEnabled;
|
||||||
tAniBool isOSENConnection;
|
tAniBool isOSENConnection;
|
||||||
|
struct rrm_config_param rrm_config;
|
||||||
tAniBool spectrumMgtIndicator;
|
tAniBool spectrumMgtIndicator;
|
||||||
tSirMacPowerCapInfo powerCap;
|
tSirMacPowerCapInfo powerCap;
|
||||||
tSirSupChnl supportedChannels;
|
tSirSupChnl supportedChannels;
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2011-2012, 2014 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2011-2012, 2014-2015 The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
|
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
|
||||||
*
|
*
|
||||||
@@ -38,6 +38,7 @@
|
|||||||
#ifndef __RRM_API_H__
|
#ifndef __RRM_API_H__
|
||||||
#define __RRM_API_H__
|
#define __RRM_API_H__
|
||||||
|
|
||||||
|
#ifdef WLAN_FEATURE_VOWIFI
|
||||||
#define RRM_MIN_TX_PWR_CAP 13
|
#define RRM_MIN_TX_PWR_CAP 13
|
||||||
#define RRM_MAX_TX_PWR_CAP 19
|
#define RRM_MAX_TX_PWR_CAP 19
|
||||||
|
|
||||||
@@ -86,8 +87,6 @@ extern void rrm_cache_mgmt_tx_power(tpAniSirGlobal pMac,
|
|||||||
extern tpRRMCaps rrm_get_capabilities(tpAniSirGlobal pMac,
|
extern tpRRMCaps rrm_get_capabilities(tpAniSirGlobal pMac,
|
||||||
tpPESession pSessionEntry);
|
tpPESession pSessionEntry);
|
||||||
|
|
||||||
extern void rrm_update_config(tpAniSirGlobal pMac, tpPESession pSessionEntry);
|
|
||||||
|
|
||||||
extern void rrm_get_start_tsf(tpAniSirGlobal pMac, uint32_t *pStartTSF);
|
extern void rrm_get_start_tsf(tpAniSirGlobal pMac, uint32_t *pStartTSF);
|
||||||
|
|
||||||
extern void rrm_update_start_tsf(tpAniSirGlobal pMac, uint32_t startTSF[2]);
|
extern void rrm_update_start_tsf(tpAniSirGlobal pMac, uint32_t startTSF[2]);
|
||||||
@@ -101,4 +100,12 @@ rrm_process_neighbor_report_req(tpAniSirGlobal pMac,
|
|||||||
extern tSirRetStatus
|
extern tSirRetStatus
|
||||||
rrm_process_beacon_report_xmit(tpAniSirGlobal pMac,
|
rrm_process_beacon_report_xmit(tpAniSirGlobal pMac,
|
||||||
tpSirBeaconReportXmitInd pBcnReport);
|
tpSirBeaconReportXmitInd pBcnReport);
|
||||||
|
extern void lim_update_rrm_capability(tpAniSirGlobal mac_ctx,
|
||||||
|
tpSirSmeJoinReq join_req);
|
||||||
|
#else
|
||||||
|
void lim_update_rrm_capability(tpAniSirGlobal mac_ctx,
|
||||||
|
tpSirSmeJoinReq join_req)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
@@ -225,4 +225,127 @@ typedef struct sRrmPEContext {
|
|||||||
#define RCPI_MAX_VALUE (220)
|
#define RCPI_MAX_VALUE (220)
|
||||||
#define CALCULATE_RCPI(rssi) (((rssi) + 110) * 2)
|
#define CALCULATE_RCPI(rssi) (((rssi) + 110) * 2)
|
||||||
|
|
||||||
|
/* Bit mask are defined as per Draft P802.11REVmc_D4.2 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* enum mask_rm_capability_byte1 - mask for supported capability
|
||||||
|
* @RM_CAP_LINK_MEASUREMENT: Link Measurement capability
|
||||||
|
* @RM_CAP_NEIGHBOR_REPORT: Neighbor report capability
|
||||||
|
* @RM_CAP_PARALLEL_MEASUREMENT: Parallel Measurement capability
|
||||||
|
* @RM_CAP_REPEATED_MEASUREMENT: Repeated Measurement capability
|
||||||
|
* @RM_CAP_BCN_PASSIVE_MEASUREMENT: Beacon passive measurement capability
|
||||||
|
* @RM_CAP_BCN_ACTIVE_MEASUREMENT: Beacon active measurement capability
|
||||||
|
* @RM_CAP_BCN_TABLE_MEASUREMENT: Beacon table measurement capability
|
||||||
|
* @RM_CAP_BCN_MEAS_REPORTING_COND: Beacon measurement reporting conditions
|
||||||
|
*/
|
||||||
|
enum mask_rm_capability_byte1 {
|
||||||
|
RM_CAP_LINK_MEASUREMENT = (1 << (0)),
|
||||||
|
RM_CAP_NEIGHBOR_REPORT = (1 << (1)),
|
||||||
|
RM_CAP_PARALLEL_MEASUREMENT = (1 << (2)),
|
||||||
|
RM_CAP_REPEATED_MEASUREMENT = (1 << (3)),
|
||||||
|
RM_CAP_BCN_PASSIVE_MEASUREMENT = (1 << (4)),
|
||||||
|
RM_CAP_BCN_ACTIVE_MEASUREMENT = (1 << (5)),
|
||||||
|
RM_CAP_BCN_TABLE_MEASUREMENT = (1 << (6)),
|
||||||
|
RM_CAP_BCN_MEAS_REPORTING_COND = (1 << (7)),
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* enum mask_rm_capability_byte2 - mask for supported capability
|
||||||
|
* @RM_CAP_FRAME_MEASUREMENT: Frame Measurement capability
|
||||||
|
* @RM_CAP_CHAN_LOAD_MEASUREMENT: Channel load measurement capability
|
||||||
|
* @RM_CAP_NOISE_HIST_MEASUREMENT: Noise Histogram Measurement capability
|
||||||
|
* @RM_CAP_STATISTICS_MEASUREMENT: Statistics Measurement capability
|
||||||
|
* @RM_CAP_LCI_MEASUREMENT: LCI measurement capability
|
||||||
|
* @RM_CAP_LCI_AZIMUTH: LCI Azimuth capability
|
||||||
|
* @RM_CAP_TX_CATEGORY_MEASUREMENT: Transmit category measurement capability
|
||||||
|
* @RM_CAP_TRIG_TX_CATEGORY_MEASUREMENT:
|
||||||
|
* Triggered Transmit category measurement capability
|
||||||
|
*/
|
||||||
|
enum mask_rm_capability_byte2 {
|
||||||
|
RM_CAP_FRAME_MEASUREMENT = (1 << (0)),
|
||||||
|
RM_CAP_CHAN_LOAD_MEASUREMENT = (1 << (1)),
|
||||||
|
RM_CAP_NOISE_HIST_MEASUREMENT = (1 << (2)),
|
||||||
|
RM_CAP_STATISTICS_MEASUREMENT = (1 << (3)),
|
||||||
|
RM_CAP_LCI_MEASUREMENT = (1 << (4)),
|
||||||
|
RM_CAP_LCI_AZIMUTH = (1 << (5)),
|
||||||
|
RM_CAP_TX_CATEGORY_MEASUREMENT = (1 << (6)),
|
||||||
|
RM_CAP_TRIG_TX_CATEGORY_MEASUREMENT = (1 << (7)),
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* enum mask_rm_capability_byte3 - mask for supported capability
|
||||||
|
* @RM_CAP_AP_CHAN_REPORT: AP channel report capability
|
||||||
|
* @RM_CAP_RM_MIB: RM MIB capability
|
||||||
|
* @RM_CAP_OPER_CHAN_MAX_DURATION_1: OPER_CHAN_MAX_DURATION bit1
|
||||||
|
* @RM_CAP_OPER_CHAN_MAX_DURATION_2: OPER_CHAN_MAX_DURATION bit2
|
||||||
|
* @RM_CAP_OPER_CHAN_MAX_DURATION_3: OPER_CHAN_MAX_DURATION bit3
|
||||||
|
* @RM_CAP_NONOPER_CHAN_MAX_DURATION_1: NONOPER_CHAN_MAX bit1
|
||||||
|
* @RM_CAP_NONOPER_CHAN_MAX_DURATION_2: NONOPER_CHAN_MAX bit2
|
||||||
|
* @RM_CAP_NONOPER_CHAN_MAX_DURATION_3: NONOPER_CHAN_MAX bit3
|
||||||
|
* @RM_CAP_OPER_CHAN_MAX_DURATION: Operating Channel Max Measurement Duration
|
||||||
|
* @RM_CAP_NONOPER_CHAN_MAX_DURATION:
|
||||||
|
* Nonoperating Channel Max Measurement Duration
|
||||||
|
*/
|
||||||
|
|
||||||
|
enum mask_rm_capability_byte3 {
|
||||||
|
RM_CAP_AP_CHAN_REPORT = (1 << (0)),
|
||||||
|
RM_CAP_RM_MIB = (1 << (1)),
|
||||||
|
RM_CAP_OPER_CHAN_MAX_DURATION_1 = (1 << (2)),
|
||||||
|
RM_CAP_OPER_CHAN_MAX_DURATION_2 = (1 << (3)),
|
||||||
|
RM_CAP_OPER_CHAN_MAX_DURATION_3 = (1 << (4)),
|
||||||
|
RM_CAP_NONOPER_CHAN_MAX_DURATION_1 = (1 << (5)),
|
||||||
|
RM_CAP_NONOPER_CHAN_MAX_DURATION_2 = (1 << (6)),
|
||||||
|
RM_CAP_NONOPER_CHAN_MAX_DURATION_3 = (1 << (7)),
|
||||||
|
RM_CAP_OPER_CHAN_MAX_DURATION = (RM_CAP_OPER_CHAN_MAX_DURATION_1 ||
|
||||||
|
RM_CAP_OPER_CHAN_MAX_DURATION_2 ||
|
||||||
|
RM_CAP_OPER_CHAN_MAX_DURATION_3),
|
||||||
|
RM_CAP_NONOPER_CHAN_MAX_DURATION =
|
||||||
|
(RM_CAP_NONOPER_CHAN_MAX_DURATION_1 ||
|
||||||
|
RM_CAP_NONOPER_CHAN_MAX_DURATION_2 ||
|
||||||
|
RM_CAP_NONOPER_CHAN_MAX_DURATION_3),
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* enum mask_rm_capability_byte4 - mask for supported capability
|
||||||
|
* @RM_CAP_MEASUREMENT_PILOT_1: MEASUREMENT_PILOT bit1
|
||||||
|
* @RM_CAP_MEASUREMENT_PILOT_2: MEASUREMENT_PILOT bit2
|
||||||
|
* @RM_CAP_MEASUREMENT_PILOT_3: MEASUREMENT_PILOT bit3
|
||||||
|
* @RM_CAP_MEAS_PILOT_TX_INFO: Measurement Pilot Transmission Capability
|
||||||
|
* @RM_CAP_NEIGHBOR_RPT_TSF_OFFSET: Neighbor Report TSF Offset Capability
|
||||||
|
* @RM_CAP_RCPI_MEASUREMENT: RCPI Measurement Capability
|
||||||
|
* @RM_CAP_RSNI_MEASUREMENT: RSNI Measurement Capability
|
||||||
|
* @RM_CAP_BSS_AVG_ACCESS_DELAY: BSS Average Access Delay Capability
|
||||||
|
* @RM_CAP_MEASUREMENT_PILOT: Measurement pilot capability
|
||||||
|
*/
|
||||||
|
|
||||||
|
enum mask_rm_capability_byte4 {
|
||||||
|
RM_CAP_MEASUREMENT_PILOT_1 = (1 << (0)),
|
||||||
|
RM_CAP_MEASUREMENT_PILOT_2 = (1 << (1)),
|
||||||
|
RM_CAP_MEASUREMENT_PILOT_3 = (1 << (2)),
|
||||||
|
RM_CAP_MEAS_PILOT_TX_INFO = (1 << (3)),
|
||||||
|
RM_CAP_NEIGHBOR_RPT_TSF_OFFSET = (1 << (4)),
|
||||||
|
RM_CAP_RCPI_MEASUREMENT1 = (1 << (5)),
|
||||||
|
RM_CAP_RSNI_MEASUREMENT = (1 << (6)),
|
||||||
|
RM_CAP_BSS_AVG_ACCESS_DELAY = (1 << (7)),
|
||||||
|
RM_CAP_MEASUREMENT_PILOT = (RM_CAP_MEASUREMENT_PILOT_1 ||
|
||||||
|
RM_CAP_MEASUREMENT_PILOT_2 ||
|
||||||
|
RM_CAP_MEASUREMENT_PILOT_3),
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* enum mask_rm_capability_byte5 - mask for supported capability
|
||||||
|
* @RM_CAP_BSS_AVAIL_ADMISSION: BSS Available Admission Capacity Capability
|
||||||
|
* @RM_CAP_ANTENNA: Antenna Capability
|
||||||
|
* @RM_CAP_FTM_RANGE_REPORT: FTM Range Report Capability
|
||||||
|
* @RM_CAP_CIVIC_LOC_MEASUREMENT: Civic Location Measurement capability
|
||||||
|
*
|
||||||
|
* 4 bits are reserved
|
||||||
|
*/
|
||||||
|
enum mask_rm_capability_byte5 {
|
||||||
|
RM_CAP_BSS_AVAIL_ADMISSION = (1 << (0)),
|
||||||
|
RM_CAP_ANTENNA = (1 << (1)),
|
||||||
|
RM_CAP_FTM_RANGE_REPORT = (1 << (2)),
|
||||||
|
RM_CAP_CIVIC_LOC_MEASUREMENT = (1 << (3)),
|
||||||
|
};
|
||||||
|
|
||||||
#endif /* #if defined __RRMGLOBAL_H */
|
#endif /* #if defined __RRMGLOBAL_H */
|
||||||
|
@@ -641,8 +641,5 @@ static void lim_update_config(tpAniSirGlobal pMac, tpPESession psessionEntry)
|
|||||||
}
|
}
|
||||||
pMac->lim.gLimAssocStaLimit = (uint16_t) val;
|
pMac->lim.gLimAssocStaLimit = (uint16_t) val;
|
||||||
|
|
||||||
#if defined WLAN_FEATURE_VOWIFI
|
|
||||||
rrm_update_config(pMac, psessionEntry);
|
|
||||||
#endif
|
|
||||||
PELOG1(lim_log(pMac, LOG1, FL("Updated Lim shadow state based on CFG"));)
|
PELOG1(lim_log(pMac, LOG1, FL("Updated Lim shadow state based on CFG"));)
|
||||||
}
|
}
|
||||||
|
@@ -56,12 +56,10 @@
|
|||||||
#include "lim_api.h"
|
#include "lim_api.h"
|
||||||
#include "wmm_apsd.h"
|
#include "wmm_apsd.h"
|
||||||
#include "sir_mac_prot_def.h"
|
#include "sir_mac_prot_def.h"
|
||||||
|
#include "rrm_api.h"
|
||||||
|
|
||||||
#include "sap_api.h"
|
#include "sap_api.h"
|
||||||
|
|
||||||
#if defined WLAN_FEATURE_VOWIFI
|
|
||||||
#include "rrm_api.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined WLAN_FEATURE_VOWIFI_11R
|
#if defined WLAN_FEATURE_VOWIFI_11R
|
||||||
#include <lim_ft.h>
|
#include <lim_ft.h>
|
||||||
@@ -1575,23 +1573,6 @@ __lim_process_sme_join_req(tpAniSirGlobal mac_ctx, uint32_t *msg_buf)
|
|||||||
#endif /* FEATURE_WLAN_DIAG_SUPPORT */
|
#endif /* FEATURE_WLAN_DIAG_SUPPORT */
|
||||||
|
|
||||||
lim_log(mac_ctx, LOG1, FL("Received SME_JOIN_REQ"));
|
lim_log(mac_ctx, LOG1, FL("Received SME_JOIN_REQ"));
|
||||||
#ifdef WLAN_FEATURE_VOWIFI
|
|
||||||
/*
|
|
||||||
* Need to read the CFG here itself as this is
|
|
||||||
* used in limExtractAPCapability() below.
|
|
||||||
* This CFG is actually read in rrm_update_config()
|
|
||||||
* which is called later. Because this is not
|
|
||||||
* read, RRM related path before calling rrm_update_config()
|
|
||||||
* is not getting executed causing issues
|
|
||||||
* like not honoring power constraint on 1st association
|
|
||||||
* after driver loading.
|
|
||||||
*/
|
|
||||||
if (wlan_cfg_get_int(mac_ctx, WNI_CFG_RRM_ENABLED, &val) !=
|
|
||||||
eSIR_SUCCESS)
|
|
||||||
lim_log(mac_ctx, LOGP, FL("cfg get rrm enabled failed"));
|
|
||||||
mac_ctx->rrm.rrmPEContext.rrmEnable = (val) ? 1 : 0;
|
|
||||||
val = 0;
|
|
||||||
#endif /* WLAN_FEATURE_VOWIFI */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Expect Join request in idle state.
|
* Expect Join request in idle state.
|
||||||
@@ -1624,9 +1605,16 @@ __lim_process_sme_join_req(tpAniSirGlobal mac_ctx, uint32_t *msg_buf)
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Update the capability here itself as this is used in
|
||||||
|
* lim_extract_ap_capability() below. If not updated issues
|
||||||
|
* like not honoring power constraint on 1st association after
|
||||||
|
* driver loading might occur.
|
||||||
|
*/
|
||||||
|
lim_update_rrm_capability(mac_ctx, sme_join_req);
|
||||||
|
|
||||||
bss_desc = sme_join_req->bssDescription;
|
bss_desc = sme_join_req->bssDescription;
|
||||||
/* check for the existence of start BSS session */
|
/* check for the existence of start BSS session */
|
||||||
|
|
||||||
session = pe_find_session_by_bssid(mac_ctx, bss_desc.bssId,
|
session = pe_find_session_by_bssid(mac_ctx, bss_desc.bssId,
|
||||||
&session_id);
|
&session_id);
|
||||||
|
|
||||||
@@ -4497,10 +4485,10 @@ void __lim_process_report_message(tpAniSirGlobal pMac, tpSirMsgQ pMsg)
|
|||||||
rrm_process_neighbor_report_req(pMac, pMsg->bodyptr);
|
rrm_process_neighbor_report_req(pMac, pMsg->bodyptr);
|
||||||
break;
|
break;
|
||||||
case eWNI_SME_BEACON_REPORT_RESP_XMIT_IND:
|
case eWNI_SME_BEACON_REPORT_RESP_XMIT_IND:
|
||||||
{
|
|
||||||
rrm_process_beacon_report_xmit(pMac, pMsg->bodyptr);
|
rrm_process_beacon_report_xmit(pMac, pMsg->bodyptr);
|
||||||
}
|
break;
|
||||||
break;
|
default:
|
||||||
|
lim_log(pMac, LOGE, FL("Invalid msg type:%d"), pMsg->type);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@@ -1334,57 +1334,6 @@ tpRRMCaps rrm_get_capabilities(tpAniSirGlobal pMac, tpPESession pSessionEntry)
|
|||||||
return &pMac->rrm.rrmPEContext.rrmEnabledCaps;
|
return &pMac->rrm.rrmPEContext.rrmEnabledCaps;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------------------------------- */
|
|
||||||
/**
|
|
||||||
* rrm_update_config
|
|
||||||
*
|
|
||||||
* FUNCTION:
|
|
||||||
* Update the configuration. This is called from lim_update_config.
|
|
||||||
*
|
|
||||||
* LOGIC:
|
|
||||||
*
|
|
||||||
* ASSUMPTIONS:
|
|
||||||
*
|
|
||||||
* NOTE:
|
|
||||||
*
|
|
||||||
* @param pSessionEntry
|
|
||||||
* @return pointer to tRRMCaps
|
|
||||||
*/
|
|
||||||
void rrm_update_config(tpAniSirGlobal pMac, tpPESession pSessionEntry)
|
|
||||||
{
|
|
||||||
uint32_t val;
|
|
||||||
tpRRMCaps pRRMCaps = &pMac->rrm.rrmPEContext.rrmEnabledCaps;
|
|
||||||
|
|
||||||
if (wlan_cfg_get_int(pMac, WNI_CFG_RRM_ENABLED, &val) != eSIR_SUCCESS) {
|
|
||||||
lim_log(pMac, LOGP, FL("cfg get rrm enabled failed"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
pMac->rrm.rrmPEContext.rrmEnable = (val) ? 1 : 0;
|
|
||||||
|
|
||||||
if (wlan_cfg_get_int(pMac, WNI_CFG_RRM_OPERATING_CHAN_MAX, &val) !=
|
|
||||||
eSIR_SUCCESS) {
|
|
||||||
lim_log(pMac, LOGP,
|
|
||||||
FL
|
|
||||||
("cfg get rrm operating channel max measurement duration failed"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
pRRMCaps->operatingChanMax = (uint8_t) val;
|
|
||||||
|
|
||||||
if (wlan_cfg_get_int(pMac, WNI_CFG_RRM_NON_OPERATING_CHAN_MAX, &val) !=
|
|
||||||
eSIR_SUCCESS) {
|
|
||||||
lim_log(pMac, LOGP,
|
|
||||||
FL
|
|
||||||
("cfg get rrm non-operating channel max measurement duration failed"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
pRRMCaps->nonOperatingChanMax = (uint8_t) val;
|
|
||||||
|
|
||||||
lim_log(pMac, LOG1,
|
|
||||||
"RRM enabled = %d OperatingChanMax = %d NonOperatingMax = %d",
|
|
||||||
pMac->rrm.rrmPEContext.rrmEnable,
|
|
||||||
pRRMCaps->operatingChanMax, pRRMCaps->nonOperatingChanMax);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------- */
|
||||||
/**
|
/**
|
||||||
* rrm_initialize
|
* rrm_initialize
|
||||||
@@ -1488,8 +1437,30 @@ void rrm_process_message(tpAniSirGlobal pMac, tpSirMsgQ pMsg)
|
|||||||
case eWNI_SME_BEACON_REPORT_RESP_XMIT_IND:
|
case eWNI_SME_BEACON_REPORT_RESP_XMIT_IND:
|
||||||
rrm_process_beacon_report_xmit(pMac, pMsg->bodyptr);
|
rrm_process_beacon_report_xmit(pMac, pMsg->bodyptr);
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
lim_log(pMac, LOGE, FL("Invalid msg type:%d"), pMsg->type);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* lim_update_rrm_capability() - Update PE context's rrm capability
|
||||||
|
* @mac_ctx: Global pointer to MAC context
|
||||||
|
* @join_req: Pointer to SME join request.
|
||||||
|
*
|
||||||
|
* Update PE context's rrm capability based on SME join request.
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*/
|
||||||
|
void lim_update_rrm_capability(tpAniSirGlobal mac_ctx,
|
||||||
|
tpSirSmeJoinReq join_req)
|
||||||
|
{
|
||||||
|
mac_ctx->rrm.rrmPEContext.rrmEnable = join_req->rrm_config.rrm_enabled;
|
||||||
|
cdf_mem_copy(&mac_ctx->rrm.rrmPEContext.rrmEnabledCaps,
|
||||||
|
&join_req->rrm_config.rm_capability,
|
||||||
|
RMENABLEDCAP_MAX_LEN);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -5492,6 +5492,7 @@ tSirRetStatus populate_dot11f_rrm_ie(tpAniSirGlobal pMac,
|
|||||||
tpPESession psessionEntry)
|
tpPESession psessionEntry)
|
||||||
{
|
{
|
||||||
tpRRMCaps pRrmCaps;
|
tpRRMCaps pRrmCaps;
|
||||||
|
uint8_t *bytes;
|
||||||
|
|
||||||
pRrmCaps = rrm_get_capabilities(pMac, psessionEntry);
|
pRrmCaps = rrm_get_capabilities(pMac, psessionEntry);
|
||||||
|
|
||||||
@@ -5527,6 +5528,10 @@ tSirRetStatus populate_dot11f_rrm_ie(tpAniSirGlobal pMac,
|
|||||||
pDot11f->lci_capability = pRrmCaps->lci_capability;
|
pDot11f->lci_capability = pRrmCaps->lci_capability;
|
||||||
pDot11f->reserved = pRrmCaps->reserved;
|
pDot11f->reserved = pRrmCaps->reserved;
|
||||||
|
|
||||||
|
bytes = (uint8_t *) pDot11f + 1; /* ignore present field */
|
||||||
|
lim_log(pMac, LOG1, FL("RRM Enabled Cap IE: %02x %02x %02x %02x %02x"),
|
||||||
|
bytes[0], bytes[1], bytes[2], bytes[3], bytes[4]);
|
||||||
|
|
||||||
pDot11f->present = 1;
|
pDot11f->present = 1;
|
||||||
return eSIR_SUCCESS;
|
return eSIR_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@@ -95,7 +95,7 @@ typedef void (*hdd_ftm_msg_processor)(void *);
|
|||||||
typedef struct _smeConfigParams {
|
typedef struct _smeConfigParams {
|
||||||
tCsrConfigParam csrConfig;
|
tCsrConfigParam csrConfig;
|
||||||
#if defined WLAN_FEATURE_VOWIFI
|
#if defined WLAN_FEATURE_VOWIFI
|
||||||
tRrmConfigParam rrmConfig;
|
struct rrm_config_param rrmConfig;
|
||||||
#endif
|
#endif
|
||||||
#if defined FEATURE_WLAN_LFR
|
#if defined FEATURE_WLAN_LFR
|
||||||
uint8_t isFastRoamIniFeatureEnabled;
|
uint8_t isFastRoamIniFeatureEnabled;
|
||||||
|
@@ -52,7 +52,7 @@ CDF_STATUS rrm_close(tpAniSirGlobal pMac);
|
|||||||
CDF_STATUS rrm_ready(tpAniSirGlobal pMac);
|
CDF_STATUS rrm_ready(tpAniSirGlobal pMac);
|
||||||
CDF_STATUS rrm_open(tpAniSirGlobal pMac);
|
CDF_STATUS rrm_open(tpAniSirGlobal pMac);
|
||||||
CDF_STATUS rrm_change_default_config_param(tpAniSirGlobal pMac,
|
CDF_STATUS rrm_change_default_config_param(tpAniSirGlobal pMac,
|
||||||
tpRrmConfigParam pRrmConfig);
|
struct rrm_config_param *rrm_config);
|
||||||
CDF_STATUS sme_rrm_neighbor_report_request(tpAniSirGlobal pMac,
|
CDF_STATUS sme_rrm_neighbor_report_request(tpAniSirGlobal pMac,
|
||||||
uint8_t sessionId, tpRrmNeighborReq pNeighborReq,
|
uint8_t sessionId, tpRrmNeighborReq pNeighborReq,
|
||||||
tpRrmNeighborRspCallbackInfo callbackInfo);
|
tpRrmNeighborRspCallbackInfo callbackInfo);
|
||||||
|
@@ -46,11 +46,6 @@
|
|||||||
/*--------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------
|
||||||
Type declarations
|
Type declarations
|
||||||
------------------------------------------------------------------------*/
|
------------------------------------------------------------------------*/
|
||||||
typedef struct sRrmConfigParam {
|
|
||||||
uint8_t rrmEnabled;
|
|
||||||
uint8_t maxRandnInterval;
|
|
||||||
} tRrmConfigParam, *tpRrmConfigParam;
|
|
||||||
|
|
||||||
typedef struct sRrmNeighborReportDesc {
|
typedef struct sRrmNeighborReportDesc {
|
||||||
tListElem List;
|
tListElem List;
|
||||||
tSirNeighborBssDescription *pNeighborBssDescription;
|
tSirNeighborBssDescription *pNeighborBssDescription;
|
||||||
@@ -88,7 +83,7 @@ typedef struct sRrmSMEContext {
|
|||||||
uint16_t randnIntvl;
|
uint16_t randnIntvl;
|
||||||
uint16_t duration[SIR_ESE_MAX_MEAS_IE_REQS];
|
uint16_t duration[SIR_ESE_MAX_MEAS_IE_REQS];
|
||||||
uint8_t measMode[SIR_ESE_MAX_MEAS_IE_REQS];
|
uint8_t measMode[SIR_ESE_MAX_MEAS_IE_REQS];
|
||||||
tRrmConfigParam rrmConfig;
|
struct rrm_config_param rrmConfig;
|
||||||
cdf_mc_timer_t IterMeasTimer;
|
cdf_mc_timer_t IterMeasTimer;
|
||||||
tDblLinkList neighborReportCache;
|
tDblLinkList neighborReportCache;
|
||||||
tRrmNeighborRequestControlInfo neighborReqControlInfo;
|
tRrmNeighborRequestControlInfo neighborReqControlInfo;
|
||||||
|
@@ -13976,6 +13976,11 @@ CDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId,
|
|||||||
else
|
else
|
||||||
csr_join_req->isOSENConnection = false;
|
csr_join_req->isOSENConnection = false;
|
||||||
|
|
||||||
|
/* Fill rrm config parameters */
|
||||||
|
cdf_mem_copy(&csr_join_req->rrm_config,
|
||||||
|
&pMac->rrm.rrmSmeContext.rrmConfig,
|
||||||
|
sizeof(struct rrm_config_param));
|
||||||
|
|
||||||
pAP_capabilityInfo =
|
pAP_capabilityInfo =
|
||||||
(tSirMacCapabilityInfo *)
|
(tSirMacCapabilityInfo *)
|
||||||
&pBssDescription->capabilityInfo;
|
&pBssDescription->capabilityInfo;
|
||||||
|
@@ -906,7 +906,7 @@ CDF_STATUS sme_rrm_process_beacon_report_req_ind(tpAniSirGlobal pMac, void *pMsg
|
|||||||
pSmeRrmContext->regClass = pBeaconReq->channelInfo.regulatoryClass;
|
pSmeRrmContext->regClass = pBeaconReq->channelInfo.regulatoryClass;
|
||||||
pSmeRrmContext->randnIntvl =
|
pSmeRrmContext->randnIntvl =
|
||||||
CDF_MAX(pBeaconReq->randomizationInterval,
|
CDF_MAX(pBeaconReq->randomizationInterval,
|
||||||
pSmeRrmContext->rrmConfig.maxRandnInterval);
|
pSmeRrmContext->rrmConfig.max_randn_interval);
|
||||||
pSmeRrmContext->currentIndex = 0;
|
pSmeRrmContext->currentIndex = 0;
|
||||||
pSmeRrmContext->msgSource = pBeaconReq->msgSource;
|
pSmeRrmContext->msgSource = pBeaconReq->msgSource;
|
||||||
cdf_mem_copy((uint8_t *) &pSmeRrmContext->measMode,
|
cdf_mem_copy((uint8_t *) &pSmeRrmContext->measMode,
|
||||||
@@ -1357,7 +1357,7 @@ CDF_STATUS rrm_open(tpAniSirGlobal pMac)
|
|||||||
tpRrmSMEContext pSmeRrmContext = &pMac->rrm.rrmSmeContext;
|
tpRrmSMEContext pSmeRrmContext = &pMac->rrm.rrmSmeContext;
|
||||||
CDF_STATUS cdf_ret_status = CDF_STATUS_SUCCESS;
|
CDF_STATUS cdf_ret_status = CDF_STATUS_SUCCESS;
|
||||||
|
|
||||||
pSmeRrmContext->rrmConfig.maxRandnInterval = 50; /* ms */
|
pSmeRrmContext->rrmConfig.max_randn_interval = 50; /* ms */
|
||||||
|
|
||||||
cdf_status = cdf_mc_timer_init(&pSmeRrmContext->IterMeasTimer,
|
cdf_status = cdf_mc_timer_init(&pSmeRrmContext->IterMeasTimer,
|
||||||
CDF_TIMER_TYPE_SW,
|
CDF_TIMER_TYPE_SW,
|
||||||
@@ -1491,10 +1491,10 @@ CDF_STATUS rrm_ready(tpAniSirGlobal pMac)
|
|||||||
|
|
||||||
---------------------------------------------------------------------------*/
|
---------------------------------------------------------------------------*/
|
||||||
CDF_STATUS rrm_change_default_config_param(tpAniSirGlobal pMac,
|
CDF_STATUS rrm_change_default_config_param(tpAniSirGlobal pMac,
|
||||||
tpRrmConfigParam pRrmConfig)
|
struct rrm_config_param *rrm_config)
|
||||||
{
|
{
|
||||||
cdf_mem_copy(&pMac->rrm.rrmSmeContext.rrmConfig, pRrmConfig,
|
cdf_mem_copy(&pMac->rrm.rrmSmeContext.rrmConfig, rrm_config,
|
||||||
sizeof(tRrmConfigParam));
|
sizeof(struct rrm_config_param));
|
||||||
|
|
||||||
return CDF_STATUS_SUCCESS;
|
return CDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user