Merge "Release 5.2.0.35I"

This commit is contained in:
Linux Build Service Account 2017-07-19 22:47:25 -07:00 • committed by Gerrit - the friendly Code Review server
commit 6c1da11513
106 changed files with 931 additions and 220 deletions

4
Kbuild
View file

@ -883,7 +883,7 @@ UMAC_MGMT_TXRX_OBJS := $(UMAC_MGMT_TXRX_DIR)/core/src/wlan_mgmt_txrx_main.o \
$(UMAC_MGMT_TXRX_DIR)/dispatcher/src/wlan_mgmt_txrx_tgt_api.o
########## POWER MANAGEMENT OFFLOADS (PMO) ##########
PMO_DIR := core/components/pmo
PMO_DIR := components/pmo
PMO_INC := -I$(WLAN_ROOT)/$(PMO_DIR)/core/inc \
-I$(WLAN_ROOT)/$(PMO_DIR)/core/src \
-I$(WLAN_ROOT)/$(PMO_DIR)/dispatcher/inc \
@ -914,7 +914,7 @@ PMO_OBJS := $(PMO_DIR)/core/src/wlan_pmo_main.o \
$(PMO_DIR)/dispatcher/src/wlan_pmo_tgt_pkt_filter.o
########## CLD TARGET_IF #######
CLD_TARGET_IF_DIR := core/components/target_if
CLD_TARGET_IF_DIR := components/target_if
CLD_TARGET_IF_INC := -I$(WLAN_ROOT)/$(CLD_TARGET_IF_DIR)/pmo/inc \
-I$(WLAN_ROOT)/$(CLD_TARGET_IF_DIR)/pmo/src \

View file

@ -105,7 +105,7 @@ config WLAN_TX_FLOW_CONTROL_V2
config WLAN_LRO
bool "Enable Large Receive Offload"
depends on HELIUMPLUS
depends on CONFIG_INET_LRO
depends on INET_LRO
default n
config WLAN_SYNC_TSF

View file

@ -3333,8 +3333,26 @@ static QDF_STATUS ol_txrx_clear_peer(struct cdp_pdev *ppdev, uint8_t sta_id)
}
void peer_unmap_timer_work_function(void *param)
{
WMA_LOGE("Enter: %s", __func__);
/*
* wma_peer_debug_dump() will be replaced with a new routine.
* Add the equivalent of wma_peer_debug_dump() when available.
*/
if (cds_is_self_recovery_enabled()) {
if (!cds_is_driver_recovering())
cds_trigger_recovery(false);
else
WMA_LOGE("%s: Recovery is in progress, ignore!",
__func__);
} else {
QDF_BUG(0);
}
}
/**
* peer_unmap_timer() - peer unmap timer function
* peer_unmap_timer_handler() - peer unmap timer function
* @data: peer object pointer
*
* Return: none
@ -3342,6 +3360,7 @@ static QDF_STATUS ol_txrx_clear_peer(struct cdp_pdev *ppdev, uint8_t sta_id)
void peer_unmap_timer_handler(void *data)
{
ol_txrx_peer_handle peer = (ol_txrx_peer_handle)data;
ol_txrx_pdev_handle txrx_pdev = cds_get_context(QDF_MODULE_ID_TXRX);
ol_txrx_err("all unmap events not received for peer %p, ref_cnt %d",
peer, qdf_atomic_read(&peer->ref_cnt));
@ -3351,10 +3370,10 @@ void peer_unmap_timer_handler(void *data)
peer->mac_addr.raw[2], peer->mac_addr.raw[3],
peer->mac_addr.raw[4], peer->mac_addr.raw[5]);
if (!cds_is_driver_recovering()) {
/*
* Add the equivalent of wma_peer_debug_dump() when available.
*/
QDF_BUG(0);
qdf_create_work(0, &txrx_pdev->peer_unmap_timer_work,
peer_unmap_timer_work_function,
NULL);
qdf_sched_work(0, &txrx_pdev->peer_unmap_timer_work);
} else {
ol_txrx_err("Recovery is in progress, ignore!");
}

View file

@ -128,6 +128,7 @@ void *ol_txrx_find_peer_by_addr(struct cdp_pdev *pdev,
uint8_t *peer_id);
void htt_pkt_log_init(struct cdp_pdev *pdev_handle, void *scn);
void peer_unmap_timer_work_function(void *);
void peer_unmap_timer_handler(void *data);
#endif /* _OL_TXRX__H_ */

View file

@ -974,6 +974,7 @@ struct ol_txrx_pdev_t {
qdf_atomic_t lro_dev_cnt;
} lro_info;
struct ol_txrx_peer_t *self_peer;
qdf_work_t peer_unmap_timer_work;
};
struct ol_txrx_vdev_t {

View file

@ -5798,6 +5798,29 @@ enum hdd_link_speed_rpt_type {
#define CFG_RATE_FOR_TX_MGMT_5G_MAX (WNI_CFG_RATE_FOR_TX_MGMT_5G_STAMAX)
#define CFG_RATE_FOR_TX_MGMT_5G_DEFAULT (WNI_CFG_RATE_FOR_TX_MGMT_5G_STADEF)
/*
* <ini>
* gPreventLinkDown - Enable to prevent bus link from going down
* @Min: 0
* @Max: 1
* @Default: 0
*
* Enable to prevent bus link from going down. Useful for platforms that do not
* (yet) support link down suspend cases.
*
* Related: N/A
*
* Supported Feature: Suspend/Resume
*
* Usage: Internal
*
* </ini>
*/
#define CFG_PREVENT_LINK_DOWN_NAME "gPreventLinkDown"
#define CFG_PREVENT_LINK_DOWN_MIN (0)
#define CFG_PREVENT_LINK_DOWN_MAX (1)
#define CFG_PREVENT_LINK_DOWN_DEFAULT (0)
#ifdef FEATURE_WLAN_TDLS
/*
* <ini>
@ -10456,6 +10479,70 @@ enum hdd_external_acs_freq_band {
#define CFG_ITO_REPEAT_COUNT_MIN (0)
#define CFG_ITO_REPEAT_COUNT_MAX (5)
#define CFG_ITO_REPEAT_COUNT_DEFAULT (0)
/*
* <ini>
* groam_disallow_duration -disallow duration before roaming
* @Min: 0
* @Max: 3600
* @Default: 30
*
* This ini is used to configure how long LCA[Last Connected AP] AP will
* be disallowed before it can be a roaming candidate again, in units of
* seconds.
*
* Related: LFR
*
* Usage: Internal
*
* </ini>
*/
#define CFG_ROAM_DISALLOW_DURATION_NAME "groam_disallow_duration"
#define CFG_ROAM_DISALLOW_DURATION_MIN (0)
#define CFG_ROAM_DISALLOW_DURATION_MAX (3600)
#define CFG_ROAM_DISALLOW_DURATION_DEFAULT (30)
/*
* <ini>
* grssi_channel_penalization - RSSI penalization
* @Min: 0
* @Max: 15
* @Default: 5
*
* This ini is used to configure RSSI that will be penalized if candidate(s)
* are found to be in the same channel as disallowed AP's, in units of db.
*
* Related: LFR
*
* Usage: Internal
*
* </ini>
*/
#define CFG_ROAM_RSSI_CHANNEL_PENALIZATION_NAME "grssi_channel_penalization"
#define CFG_ROAM_RSSI_CHANNEL_PENALIZATION_MIN (0)
#define CFG_ROAM_RSSI_CHANNEL_PENALIZATION_MAX (15)
#define CFG_ROAM_RSSI_CHANNEL_PENALIZATION_DEFAULT (5)
/*
* <ini>
* groam_num_disallowed_aps - Max number of AP's to maintain in LCA list
* @Min: 0
* @Max: 8
* @Default: 3
*
* This ini is used to set the maximum number of AP's to be maintained
* in LCA [Last Connected AP] list.
*
* Related: LFR
*
* Usage: Internal
*
* </ini>
*/
#define CFG_ROAM_NUM_DISALLOWED_APS_NAME "groam_num_disallowed_aps"
#define CFG_ROAM_NUM_DISALLOWED_APS_MIN (0)
#define CFG_ROAM_NUM_DISALLOWED_APS_MAX (8)
#define CFG_ROAM_NUM_DISALLOWED_APS_DEFAULT (3)
/*
* Type declarations
*/
@ -10784,6 +10871,7 @@ struct hdd_config {
uint8_t enable_tx_ldpc;
uint8_t enable_rx_ldpc;
bool enable5gEBT;
bool prevent_link_down;
#ifdef FEATURE_WLAN_TDLS
bool fEnableTDLSSupport;
bool fEnableTDLSImplicitTrigger;
@ -11200,6 +11288,11 @@ struct hdd_config {
uint16_t num_11b_tx_chains;
uint16_t num_11ag_tx_chains;
uint8_t ito_repeat_count;
/* LCA(Last connected AP) disallow configs */
uint32_t disallow_duration;
uint32_t rssi_channel_penalization;
uint32_t num_disallowed_aps;
};
#define VAR_OFFSET(_Struct, _Var) (offsetof(_Struct, _Var))

View file

@ -92,6 +92,14 @@
#define NUM_TX_QUEUES 4
#endif
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0))
#define HDD_NL80211_BAND_2GHZ NL80211_BAND_2GHZ
#define HDD_NL80211_BAND_5GHZ NL80211_BAND_5GHZ
#else
#define HDD_NL80211_BAND_2GHZ IEEE80211_BAND_2GHZ
#define HDD_NL80211_BAND_5GHZ IEEE80211_BAND_5GHZ
#endif
/** Length of the TX queue for the netdev */
#define HDD_NETDEV_TX_QUEUE_LEN (3000)

View file

@ -165,31 +165,30 @@ hdd_conn_set_authenticated(hdd_adapter_t *pAdapter, uint8_t authState)
/**
* hdd_conn_set_connection_state() - set connection state
* @pAdapter: pointer to the adapter
* @connState: connection state
* @adapter: pointer to the adapter
* @conn_state: connection state
*
* This function updates the global HDD station context connection state.
*
* Return: none
*/
void hdd_conn_set_connection_state(hdd_adapter_t *pAdapter,
eConnectionState connState)
void hdd_conn_set_connection_state(hdd_adapter_t *adapter,
eConnectionState conn_state)
{
hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter);
hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter);
hdd_station_ctx_t *hdd_sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter);
hdd_context_t *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
/* save the new connection state */
hdd_debug("%pS Changed connectionState Changed from oldState:%d to State:%d",
(void *)_RET_IP_, pHddStaCtx->conn_info.connState,
connState);
hdd_debug("%pS Changed conn state from old:%d to new:%d for dev %s",
(void *)_RET_IP_, hdd_sta_ctx->conn_info.connState,
conn_state, adapter->dev->name);
hdd_tsf_notify_wlan_state_change(pAdapter,
pHddStaCtx->conn_info.connState,
connState);
pHddStaCtx->conn_info.connState = connState;
hdd_tsf_notify_wlan_state_change(adapter,
hdd_sta_ctx->conn_info.connState,
conn_state);
hdd_sta_ctx->conn_info.connState = conn_state;
/* Check is pending ROC request or not when connection state changed */
schedule_delayed_work(&pHddCtx->roc_req_work, 0);
schedule_delayed_work(&hdd_ctx->roc_req_work, 0);
}
/**
@ -2474,7 +2473,9 @@ static QDF_STATUS hdd_association_completion_handler(hdd_adapter_t *pAdapter,
pHddStaCtx->conn_info.connState)) &&
((eCSR_ROAM_RESULT_ASSOCIATED == roamResult) ||
(eCSR_ROAM_ASSOCIATION_FAILURE == roamStatus))) {
hdd_info("Disconnect from HDD in progress");
hdd_info("hddDisconInProgress state=%d, result=%d, status=%d",
pHddStaCtx->conn_info.connState,
roamResult, roamStatus);
hddDisconInProgress = true;
}
@ -3207,10 +3208,10 @@ static void hdd_roam_ibss_indication_handler(hdd_adapter_t *pAdapter,
if (chan_no <= 14)
freq = ieee80211_channel_to_frequency(chan_no,
NL80211_BAND_2GHZ);
HDD_NL80211_BAND_2GHZ);
else
freq = ieee80211_channel_to_frequency(chan_no,
NL80211_BAND_5GHZ);
HDD_NL80211_BAND_5GHZ);
chan = ieee80211_get_channel(pAdapter->wdev.wiphy, freq);
@ -3350,8 +3351,8 @@ static bool roam_remove_ibss_station(hdd_adapter_t *pAdapter, uint8_t staId)
if (MAX_PEERS == empty_slots) {
/* Last peer departed, set the IBSS state appropriately */
pHddStaCtx->conn_info.connState =
eConnectionState_IbssDisconnected;
hdd_conn_set_connection_state(pAdapter,
eConnectionState_IbssDisconnected);
hdd_debug("Last IBSS Peer Departed!!!");
}
/* Find next active staId, to have a valid sta trigger for TL. */

View file

@ -2197,6 +2197,13 @@ struct reg_table_entry g_registry_table[] = {
CFG_PPS_ENABLE_5G_EBT_FEATURE_MIN,
CFG_PPS_ENABLE_5G_EBT_FEATURE_MAX),
REG_VARIABLE(CFG_PREVENT_LINK_DOWN_NAME, WLAN_PARAM_Integer,
struct hdd_config, prevent_link_down,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_PREVENT_LINK_DOWN_DEFAULT,
CFG_PREVENT_LINK_DOWN_MIN,
CFG_PREVENT_LINK_DOWN_MAX),
#ifdef FEATURE_WLAN_TDLS
REG_VARIABLE(CFG_TDLS_SUPPORT_ENABLE, WLAN_PARAM_Integer,
struct hdd_config, fEnableTDLSSupport,
@ -4463,6 +4470,27 @@ struct reg_table_entry g_registry_table[] = {
CFG_ITO_REPEAT_COUNT_MIN,
CFG_ITO_REPEAT_COUNT_MAX),
REG_VARIABLE(CFG_ROAM_DISALLOW_DURATION_NAME, WLAN_PARAM_Integer,
struct hdd_config, disallow_duration,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_ROAM_DISALLOW_DURATION_DEFAULT,
CFG_ROAM_DISALLOW_DURATION_MIN,
CFG_ROAM_DISALLOW_DURATION_MAX),
REG_VARIABLE(CFG_ROAM_RSSI_CHANNEL_PENALIZATION_NAME,
WLAN_PARAM_Integer, struct hdd_config,
rssi_channel_penalization,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_ROAM_RSSI_CHANNEL_PENALIZATION_DEFAULT,
CFG_ROAM_RSSI_CHANNEL_PENALIZATION_MIN,
CFG_ROAM_RSSI_CHANNEL_PENALIZATION_MAX),
REG_VARIABLE(CFG_ROAM_NUM_DISALLOWED_APS_NAME, WLAN_PARAM_Integer,
struct hdd_config, num_disallowed_aps,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_ROAM_NUM_DISALLOWED_APS_DEFAULT,
CFG_ROAM_NUM_DISALLOWED_APS_MIN,
CFG_ROAM_NUM_DISALLOWED_APS_MAX),
};
@ -6004,6 +6032,15 @@ void hdd_cfg_print(hdd_context_t *pHddCtx)
hdd_debug("Name = [%s] value = [%u]",
CFG_ITO_REPEAT_COUNT_NAME,
pHddCtx->config->ito_repeat_count);
hdd_debug("Name = [%s] Value = [%u]",
CFG_ROAM_DISALLOW_DURATION_NAME,
pHddCtx->config->disallow_duration);
hdd_debug("Name = [%s] Value = [%u]",
CFG_ROAM_RSSI_CHANNEL_PENALIZATION_NAME,
pHddCtx->config->rssi_channel_penalization);
hdd_debug("Name = [%s] Value = [%u]",
CFG_ROAM_NUM_DISALLOWED_APS_NAME,
pHddCtx->config->num_disallowed_aps);
}
@ -7626,6 +7663,13 @@ QDF_STATUS hdd_set_sme_config(hdd_context_t *pHddCtx)
smeConfig->csrConfig.pkt_err_disconn_th =
pHddCtx->config->pkt_err_disconn_th;
smeConfig->csrConfig.disallow_duration =
pHddCtx->config->disallow_duration;
smeConfig->csrConfig.rssi_channel_penalization =
pHddCtx->config->rssi_channel_penalization;
smeConfig->csrConfig.num_disallowed_aps =
pHddCtx->config->num_disallowed_aps;
smeConfig->csrConfig.is_force_1x1 =
pHddCtx->config->is_force_1x1;
smeConfig->csrConfig.num_11b_tx_chains =

View file

@ -112,6 +112,44 @@
#include "wlan_utility.h"
#include "wlan_reg_ucfg_api.h"
/* define short names for get station info attributes */
#ifndef LINK_INFO_STANDARD_NL80211_ATTR
#define LINK_INFO_STANDARD_NL80211_ATTR \
QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_LINK_STANDARD_NL80211_ATTR
#endif
#ifndef AP_INFO_STANDARD_NL80211_ATTR
#define AP_INFO_STANDARD_NL80211_ATTR \
QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_AP_STANDARD_NL80211_ATTR
#endif
#ifndef INFO_ROAM_COUNT
#define INFO_ROAM_COUNT \
QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_ROAM_COUNT
#endif
#ifndef INFO_AKM
#define INFO_AKM \
QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_AKM
#endif
#ifndef WLAN802_11_MODE
#define WLAN802_11_MODE \
QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_802_11_MODE
#endif
#ifndef AP_INFO_HS20_INDICATION
#define AP_INFO_HS20_INDICATION \
QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_AP_HS20_INDICATION
#endif
#ifndef HT_OPERATION
#define HT_OPERATION \
QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_HT_OPERATION
#endif
#ifndef VHT_OPERATION
#define VHT_OPERATION \
QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_VHT_OPERATION
#endif
#ifndef INFO_ASSOC_FAIL_REASON
#define INFO_ASSOC_FAIL_REASON \
QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_ASSOC_FAIL_REASON
#endif
#define g_mode_rates_size (12)
#define a_mode_rates_size (8)
#define GET_IE_LEN_IN_BSS_DESC(lenInBss) (lenInBss + sizeof(lenInBss) - \
@ -130,7 +168,7 @@
#define IBSS_CFG_PROTECTION_ENABLE_MASK 0x8282
#define HDD2GHZCHAN(freq, chan, flag) { \
.band = NL80211_BAND_2GHZ, \
.band = HDD_NL80211_BAND_2GHZ, \
.center_freq = (freq), \
.hw_value = (chan), \
.flags = (flag), \
@ -139,7 +177,7 @@
}
#define HDD5GHZCHAN(freq, chan, flag) { \
.band = NL80211_BAND_5GHZ, \
.band = HDD_NL80211_BAND_5GHZ, \
.center_freq = (freq), \
.hw_value = (chan), \
.flags = (flag), \
@ -277,7 +315,7 @@ static struct ieee80211_rate a_mode_rates[] = {
static struct ieee80211_supported_band wlan_hdd_band_2_4_ghz = {
.channels = NULL,
.n_channels = ARRAY_SIZE(hdd_channels_2_4_ghz),
.band = NL80211_BAND_2GHZ,
.band = HDD_NL80211_BAND_2GHZ,
.bitrates = g_mode_rates,
.n_bitrates = g_mode_rates_size,
.ht_cap.ht_supported = 1,
@ -296,7 +334,7 @@ static struct ieee80211_supported_band wlan_hdd_band_2_4_ghz = {
static struct ieee80211_supported_band wlan_hdd_band_5_ghz = {
.channels = NULL,
.n_channels = ARRAY_SIZE(hdd_channels_5_ghz),
.band = NL80211_BAND_5GHZ,
.band = HDD_NL80211_BAND_5GHZ,
.bitrates = a_mode_rates,
.n_bitrates = a_mode_rates_size,
.ht_cap.ht_supported = 1,
@ -6656,11 +6694,11 @@ static int __wlan_hdd_cfg80211_get_preferred_freq_list(struct wiphy *wiphy,
if (pcl[i] <= ARRAY_SIZE(hdd_channels_2_4_ghz))
freq_list[i] =
ieee80211_channel_to_frequency(pcl[i],
NL80211_BAND_2GHZ);
HDD_NL80211_BAND_2GHZ);
else
freq_list[i] =
ieee80211_channel_to_frequency(pcl[i],
NL80211_BAND_5GHZ);
HDD_NL80211_BAND_5GHZ);
}
/* send the freq_list back to supplicant */
@ -9878,10 +9916,10 @@ static int wlan_hdd_cfg80211_sar_convert_band(u32 nl80211_value, u32 *wmi_value)
int ret = 0;
switch (nl80211_value) {
case NL80211_BAND_2GHZ:
case HDD_NL80211_BAND_2GHZ:
*wmi_value = WMI_SAR_2G_ID;
break;
case NL80211_BAND_5GHZ:
case HDD_NL80211_BAND_5GHZ:
*wmi_value = WMI_SAR_5G_ID;
break;
default:
@ -11179,7 +11217,8 @@ int wlan_hdd_cfg80211_update_band(hdd_context_t *hdd_ctx, struct wiphy *wiphy,
hdd_ctx->hdd_pdev,
band->channels[j].hw_value);
if (NL80211_BAND_2GHZ == i && eCSR_BAND_5G == eBand) {
if (HDD_NL80211_BAND_2GHZ == i &&
eCSR_BAND_5G == eBand) {
/* 5G only */
#ifdef WLAN_ENABLE_SOCIAL_CHANNELS_5G_ONLY
/* Enable Social channels for P2P */
@ -11194,7 +11233,7 @@ int wlan_hdd_cfg80211_update_band(hdd_context_t *hdd_ctx, struct wiphy *wiphy,
band->channels[j].flags |=
IEEE80211_CHAN_DISABLED;
continue;
} else if (NL80211_BAND_5GHZ == i &&
} else if (HDD_NL80211_BAND_5GHZ == i &&
eCSR_BAND_24 == eBand) {
/* 2G only */
band->channels[j].flags |=
@ -11337,14 +11376,14 @@ int wlan_hdd_cfg80211_init(struct device *dev,
* wiphy flags don't get reset because of static memory.
* It's better not to store channel in static memory.
*/
wiphy->bands[NL80211_BAND_2GHZ] = &wlan_hdd_band_2_4_ghz;
wiphy->bands[NL80211_BAND_2GHZ]->channels =
wiphy->bands[HDD_NL80211_BAND_2GHZ] = &wlan_hdd_band_2_4_ghz;
wiphy->bands[HDD_NL80211_BAND_2GHZ]->channels =
qdf_mem_malloc(sizeof(hdd_channels_2_4_ghz));
if (wiphy->bands[NL80211_BAND_2GHZ]->channels == NULL) {
if (wiphy->bands[HDD_NL80211_BAND_2GHZ]->channels == NULL) {
hdd_err("Not enough memory to allocate channels");
return -ENOMEM;
}
qdf_mem_copy(wiphy->bands[NL80211_BAND_2GHZ]->channels,
qdf_mem_copy(wiphy->bands[HDD_NL80211_BAND_2GHZ]->channels,
&hdd_channels_2_4_ghz[0],
sizeof(hdd_channels_2_4_ghz));
if ((hdd_is_5g_supported(pHddCtx)) &&
@ -11352,17 +11391,17 @@ int wlan_hdd_cfg80211_init(struct device *dev,
(eHDD_DOT11_MODE_11g != pCfg->dot11Mode) &&
(eHDD_DOT11_MODE_11b_ONLY != pCfg->dot11Mode) &&
(eHDD_DOT11_MODE_11g_ONLY != pCfg->dot11Mode))) {
wiphy->bands[NL80211_BAND_5GHZ] = &wlan_hdd_band_5_ghz;
wiphy->bands[NL80211_BAND_5GHZ]->channels =
wiphy->bands[HDD_NL80211_BAND_5GHZ] = &wlan_hdd_band_5_ghz;
wiphy->bands[HDD_NL80211_BAND_5GHZ]->channels =
qdf_mem_malloc(sizeof(hdd_channels_5_ghz));
if (wiphy->bands[NL80211_BAND_5GHZ]->channels == NULL) {
if (wiphy->bands[HDD_NL80211_BAND_5GHZ]->channels == NULL) {
hdd_err("Not enough memory to allocate channels");
qdf_mem_free(wiphy->
bands[NL80211_BAND_2GHZ]->channels);
wiphy->bands[NL80211_BAND_2GHZ]->channels = NULL;
bands[HDD_NL80211_BAND_2GHZ]->channels);
wiphy->bands[HDD_NL80211_BAND_2GHZ]->channels = NULL;
return -ENOMEM;
}
qdf_mem_copy(wiphy->bands[NL80211_BAND_5GHZ]->channels,
qdf_mem_copy(wiphy->bands[HDD_NL80211_BAND_5GHZ]->channels,
&hdd_channels_5_ghz[0],
sizeof(hdd_channels_5_ghz));
}
@ -11375,7 +11414,7 @@ int wlan_hdd_cfg80211_init(struct device *dev,
for (j = 0; j < wiphy->bands[i]->n_channels; j++) {
struct ieee80211_supported_band *band = wiphy->bands[i];
if (NL80211_BAND_2GHZ == i &&
if (HDD_NL80211_BAND_2GHZ == i &&
eCSR_BAND_5G == pCfg->nBandCapability) {
/* 5G only */
#ifdef WLAN_ENABLE_SOCIAL_CHANNELS_5G_ONLY
@ -11389,7 +11428,7 @@ int wlan_hdd_cfg80211_init(struct device *dev,
band->channels[j].flags |=
IEEE80211_CHAN_DISABLED;
continue;
} else if (NL80211_BAND_5GHZ == i &&
} else if (HDD_NL80211_BAND_5GHZ == i &&
eCSR_BAND_24 == pCfg->nBandCapability) {
/* 2G only */
band->channels[j].flags |=
@ -11490,21 +11529,21 @@ static void wlan_hdd_update_band_cap(hdd_context_t *hdd_ctx)
ht_cap_info = (tSirMacHTCapabilityInfo *)&val16;
if (ht_cap_info->txSTBC == true) {
if (NULL != hdd_ctx->wiphy->bands[NL80211_BAND_2GHZ])
hdd_ctx->wiphy->bands[NL80211_BAND_2GHZ]->ht_cap.cap |=
if (NULL != hdd_ctx->wiphy->bands[HDD_NL80211_BAND_2GHZ])
hdd_ctx->wiphy->bands[HDD_NL80211_BAND_2GHZ]->ht_cap.cap |=
IEEE80211_HT_CAP_TX_STBC;
if (NULL != hdd_ctx->wiphy->bands[NL80211_BAND_5GHZ])
hdd_ctx->wiphy->bands[NL80211_BAND_5GHZ]->ht_cap.cap |=
if (NULL != hdd_ctx->wiphy->bands[HDD_NL80211_BAND_5GHZ])
hdd_ctx->wiphy->bands[HDD_NL80211_BAND_5GHZ]->ht_cap.cap |=
IEEE80211_HT_CAP_TX_STBC;
}
if (!sme_is_feature_supported_by_fw(DOT11AC)) {
hdd_ctx->wiphy->bands[NL80211_BAND_2GHZ]->
hdd_ctx->wiphy->bands[HDD_NL80211_BAND_2GHZ]->
vht_cap.vht_supported = 0;
hdd_ctx->wiphy->bands[NL80211_BAND_2GHZ]->vht_cap.cap = 0;
hdd_ctx->wiphy->bands[NL80211_BAND_5GHZ]->
hdd_ctx->wiphy->bands[HDD_NL80211_BAND_2GHZ]->vht_cap.cap = 0;
hdd_ctx->wiphy->bands[HDD_NL80211_BAND_5GHZ]->
vht_cap.vht_supported = 0;
hdd_ctx->wiphy->bands[NL80211_BAND_5GHZ]->vht_cap.cap = 0;
hdd_ctx->wiphy->bands[HDD_NL80211_BAND_5GHZ]->vht_cap.cap = 0;
}
}
@ -13426,15 +13465,15 @@ struct cfg80211_bss *wlan_hdd_cfg80211_inform_bss_frame(hdd_adapter_t *pAdapter,
}
if (chan_no <= ARRAY_SIZE(hdd_channels_2_4_ghz) &&
(wiphy->bands[NL80211_BAND_2GHZ] != NULL)) {
(wiphy->bands[HDD_NL80211_BAND_2GHZ] != NULL)) {
freq =
ieee80211_channel_to_frequency(chan_no,
NL80211_BAND_2GHZ);
HDD_NL80211_BAND_2GHZ);
} else if ((chan_no > ARRAY_SIZE(hdd_channels_2_4_ghz))
&& (wiphy->bands[NL80211_BAND_5GHZ] != NULL)) {
&& (wiphy->bands[HDD_NL80211_BAND_5GHZ] != NULL)) {
freq =
ieee80211_channel_to_frequency(chan_no,
NL80211_BAND_5GHZ);
HDD_NL80211_BAND_5GHZ);
} else {
hdd_err("Invalid channel: %d", chan_no);
qdf_mem_free(mgmt);
@ -15453,7 +15492,8 @@ static int wlan_hdd_disconnect(hdd_adapter_t *pAdapter, u16 reason)
wlan_hdd_netif_queue_control(pAdapter,
WLAN_STOP_ALL_NETIF_QUEUE_N_CARRIER, WLAN_CONTROL_PATH);
hdd_debug("Set HDD connState to eConnectionState_Disconnecting");
pHddStaCtx->conn_info.connState = eConnectionState_Disconnecting;
hdd_conn_set_connection_state(pAdapter, eConnectionState_Disconnecting);
INIT_COMPLETION(pAdapter->disconnect_comp_var);
/* issue disconnect */

View file

@ -230,6 +230,9 @@ int hdd_hif_open(struct device *dev, void *bdev, const struct hif_bus_id *bid,
goto err_hif_close;
}
if (hdd_ctx->config->prevent_link_down)
hif_vote_link_up(hif_ctx);
status = hif_enable(hif_ctx, dev, bdev, bid, bus_type,
(reinit == true) ? HIF_ENABLE_TYPE_REINIT :
HIF_ENABLE_TYPE_PROBE);

View file

@ -186,7 +186,8 @@ static int wlan_hdd_qcmbr_command(hdd_adapter_t *adapter,
switch (pqcmbr_data->cmd) {
case ATH_XIOCTL_UNIFIED_UTF_CMD: {
pqcmbr_data->copy_to_user = 0;
if (pqcmbr_data->length) {
if (pqcmbr_data->length &&
pqcmbr_data->length <= sizeof(pqcmbr_data->buf)) {
if (wlan_hdd_ftm_testmode_cmd(pqcmbr_data->buf,
pqcmbr_data->
length)

View file

@ -1061,7 +1061,7 @@ static void hdd_update_tgt_vht_cap(hdd_context_t *hdd_ctx,
struct hdd_config *pconfig = hdd_ctx->config;
struct wiphy *wiphy = hdd_ctx->wiphy;
struct ieee80211_supported_band *band_5g =
wiphy->bands[NL80211_BAND_5GHZ];
wiphy->bands[HDD_NL80211_BAND_5GHZ];
uint32_t temp = 0;
uint32_t ch_width = eHT_CHANNEL_WIDTH_80MHZ;
@ -3196,10 +3196,7 @@ QDF_STATUS hdd_init_station_mode(hdd_adapter_t *adapter)
hdd_err("failed to register wireless extensions: %d", status);
goto error_register_wext;
}
/* Set the Connection State to Not Connected */
hdd_debug("Set HDD connState to eConnectionState_NotConnected");
pHddStaCtx->conn_info.connState = eConnectionState_NotConnected;
hdd_conn_set_connection_state(adapter, eConnectionState_NotConnected);
qdf_mem_set(pHddStaCtx->conn_info.staId,
sizeof(pHddStaCtx->conn_info.staId), HDD_WLAN_INVALID_STA_ID);
@ -4316,14 +4313,18 @@ QDF_STATUS hdd_reset_all_adapters(hdd_context_t *hdd_ctx)
clear_bit(WMM_INIT_DONE, &adapter->event_flags);
}
/*
* If adapter is SAP, set session ID to invalid since SAP
* session will be cleanup during SSR.
*/
if (adapter->device_mode == QDF_SAP_MODE)
if (adapter->device_mode == QDF_SAP_MODE) {
/*
* If adapter is SAP, set session ID to invalid
* since SAP session will be cleanup during SSR.
*/
wlansap_set_invalid_session(
WLAN_HDD_GET_SAP_CTX_PTR(adapter));
wlansap_cleanup_cac_timer(
WLAN_HDD_GET_SAP_CTX_PTR(adapter));
}
/* Delete peers if any for STA and P2P client modes */
if (adapter->device_mode == QDF_STA_MODE ||
adapter->device_mode == QDF_P2P_CLIENT_MODE) {
@ -4588,10 +4589,10 @@ void hdd_connect_result(struct net_device *dev, const u8 *bssid,
if (chan_no <= 14)
freq = ieee80211_channel_to_frequency(chan_no,
NL80211_BAND_2GHZ);
HDD_NL80211_BAND_2GHZ);
else
freq = ieee80211_channel_to_frequency(chan_no,
NL80211_BAND_5GHZ);
HDD_NL80211_BAND_5GHZ);
chan = ieee80211_get_channel(padapter->wdev.wiphy, freq);
bss = hdd_cfg80211_get_bss(padapter->wdev.wiphy, chan, bssid,

View file

@ -1251,8 +1251,8 @@ static void hdd_ndp_new_peer_ind_handler(hdd_adapter_t *adapter,
hdd_ctx->sta_to_adapter[new_peer_ind->sta_id] = adapter;
/* perform following steps for first new peer ind */
if (ndp_ctx->active_ndp_peers == 1) {
hdd_info("Set ctx connection state to connected");
sta_ctx->conn_info.connState = eConnectionState_NdiConnected;
hdd_conn_set_connection_state(adapter,
eConnectionState_NdiConnected);
hdd_wmm_connect(adapter, &roam_info, eCSR_BSS_TYPE_NDI);
wlan_hdd_netif_queue_control(adapter,
WLAN_WAKE_ALL_NETIF_QUEUE, WLAN_CONTROL_PATH);
@ -1281,7 +1281,6 @@ static void hdd_ndp_peer_departed_ind_handler(hdd_adapter_t *adapter,
if (--ndp_ctx->active_ndp_peers == 0) {
hdd_info("No more ndp peers.");
sta_ctx->conn_info.connState = eConnectionState_NdiDisconnected;
hdd_conn_set_connection_state(adapter,
eConnectionState_NdiDisconnected);
hdd_info("Stop netif tx queues.");

View file

@ -259,9 +259,9 @@ static void hdd_regulatory_wiphy_init(hdd_context_t *hdd_ctx,
* disable 2.4 Ghz channels that dont have 20 mhz bw
*/
for (chan_num = 0;
chan_num < wiphy->bands[NL80211_BAND_2GHZ]->n_channels;
chan_num < wiphy->bands[HDD_NL80211_BAND_2GHZ]->n_channels;
chan_num++) {
chan = &(wiphy->bands[NL80211_BAND_2GHZ]->channels[chan_num]);
chan = &(wiphy->bands[HDD_NL80211_BAND_2GHZ]->channels[chan_num]);
if (chan->flags & IEEE80211_CHAN_NO_20MHZ)
chan->flags |= IEEE80211_CHAN_DISABLED;
}

View file

@ -1855,16 +1855,18 @@ static int
hdd_populate_wifi_signal_info(struct sir_wifi_peer_signal_stats *peer_signal,
struct sk_buff *skb)
{
uint32_t i;
uint32_t i, chain_count;
struct nlattr *chains, *att;
/* There might be no signal info for a peer */
if (!peer_signal)
return 0;
chain_count = peer_signal->num_chain < WIFI_MAX_CHAINS ?
peer_signal->num_chain : WIFI_MAX_CHAINS;
if (nla_put_u32(skb,
QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_PEER_ANT_NUM,
WIFI_MAX_CHAINS)) {
chain_count)) {
hdd_err("QCA_WLAN_VENDOR_ATTR put fail");
return -EINVAL;
}
@ -1876,7 +1878,7 @@ hdd_populate_wifi_signal_info(struct sir_wifi_peer_signal_stats *peer_signal,
return -EINVAL;
}
for (i = 0; i < WIFI_MAX_CHAINS; i++) {
for (i = 0; i < chain_count; i++) {
chains = nla_nest_start(skb, i);
if (!chains) {
@ -1884,12 +1886,23 @@ hdd_populate_wifi_signal_info(struct sir_wifi_peer_signal_stats *peer_signal,
return -EINVAL;
}
hdd_debug("SNR=%d, NF=%d, Rx=%d, Tx=%d",
peer_signal->per_ant_snr[i],
peer_signal->nf[i],
peer_signal->per_ant_rx_mpdus[i],
peer_signal->per_ant_tx_mpdus[i]);
if (nla_put_u32(skb,
QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_ANT_SNR,
peer_signal->per_ant_snr[i]) ||
nla_put_u32(skb,
QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_ANT_NF,
peer_signal->nf[i])) {
peer_signal->nf[i]) ||
nla_put_u32(skb,
QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_RX_MPDU,
peer_signal->per_ant_rx_mpdus[i]) ||
nla_put_u32(skb,
QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_TX_MPDU,
peer_signal->per_ant_tx_mpdus[i])) {
hdd_err("QCA_WLAN_VENDOR_ATTR put fail");
return -EINVAL;
}

View file

@ -7569,10 +7569,10 @@ int wlan_hdd_update_phymode(struct net_device *net, tHalHandle hal,
return -EIO;
}
if (phddctx->config->nChannelBondingMode5GHz)
phddctx->wiphy->bands[NL80211_BAND_5GHZ]->ht_cap.cap
phddctx->wiphy->bands[HDD_NL80211_BAND_5GHZ]->ht_cap.cap
|= IEEE80211_HT_CAP_SUP_WIDTH_20_40;
else
phddctx->wiphy->bands[NL80211_BAND_5GHZ]->ht_cap.cap
phddctx->wiphy->bands[HDD_NL80211_BAND_5GHZ]->ht_cap.cap
&= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40;
hdd_debug("New_Phymode= %d ch_bonding=%d band=%d VHT_ch_width=%u",

View file

@ -41,9 +41,9 @@
#define QWLAN_VERSION_MAJOR 5
#define QWLAN_VERSION_MINOR 2
#define QWLAN_VERSION_PATCH 0
#define QWLAN_VERSION_EXTRA "Z"
#define QWLAN_VERSION_BUILD 34
#define QWLAN_VERSION_EXTRA "I"
#define QWLAN_VERSION_BUILD 35
#define QWLAN_VERSIONSTR "5.2.0.34Z"
#define QWLAN_VERSIONSTR "5.2.0.35I"
#endif /* QWLAN_VERSION_H */

View file

@ -1287,6 +1287,12 @@ typedef struct sSirSmeChanInfo {
enum phy_ch_width ch_width;
} tSirSmeChanInfo, *tpSirSmeChanInfo;
enum sir_sme_phy_mode {
SIR_SME_PHY_MODE_LEGACY = 0,
SIR_SME_PHY_MODE_HT = 1,
SIR_SME_PHY_MODE_VHT = 2
};
/* / Definition for Association indication from peer */
/* / MAC ---> */
typedef struct sSirSmeAssocInd {
@ -1324,6 +1330,17 @@ typedef struct sSirSmeAssocInd {
/* Timing measurement capability */
uint8_t timingMeasCap;
tSirSmeChanInfo chan_info;
bool ampdu;
bool sgi_enable;
bool tx_stbc;
bool rx_stbc;
tSirMacHTChannelWidth ch_width;
enum sir_sme_phy_mode mode;
uint8_t max_supp_idx;
uint8_t max_ext_idx;
uint8_t max_mcs_idx;
uint8_t rx_mcs_map;
uint8_t tx_mcs_map;
} tSirSmeAssocInd, *tpSirSmeAssocInd;
/* / Definition for Association confirm */
@ -2983,6 +3000,20 @@ struct pmkid_mode_bits {
uint32_t unused:30;
};
/**
* struct lca_disallow_config_params - LCA[Last Connected AP]
* disallow config params
* @disallow_duration: LCA AP disallowed duration
* @rssi_channel_penalization: RSSI channel Penalization
* @num_disallowed_aps: Maximum number of AP's in LCA list
*
*/
struct lca_disallow_config_params{
uint32_t disallow_duration;
uint32_t rssi_channel_penalization;
uint32_t num_disallowed_aps;
};
typedef struct sSirRoamOffloadScanReq {
uint16_t message_type;
uint16_t length;
@ -3040,6 +3071,7 @@ typedef struct sSirRoamOffloadScanReq {
int8_t early_stop_scan_max_threshold;
enum wmi_dwelltime_adaptive_mode roamscan_adaptive_dwell_mode;
tSirAddie assoc_ie;
struct lca_disallow_config_params lca_config_params;
} tSirRoamOffloadScanReq, *tpSirRoamOffloadScanReq;
typedef struct sSirRoamOffloadScanRsp {
@ -5225,6 +5257,9 @@ struct sir_wifi_chan_cca_stats {
* @peer_id: peer ID
* @per_ant_snr: per antenna SNR
* @nf: peer background noise
* @per_ant_rx_mpdus: MPDUs received per antenna
* @per_ant_tx_mpdus: MPDUs transferred per antenna
* @num_chain: valid chain count
*/
struct sir_wifi_peer_signal_stats {
uint32_t vdev_id;
@ -5235,6 +5270,10 @@ struct sir_wifi_peer_signal_stats {
/* Background noise */
int32_t nf[WIFI_MAX_CHAINS];
int32_t per_ant_rx_mpdus[WIFI_MAX_CHAINS];
int32_t per_ant_tx_mpdus[WIFI_MAX_CHAINS];
int32_t num_chain;
};
#define WIFI_VDEV_NUM 4

View file

@ -240,7 +240,7 @@ tpDphHashNode dph_init_sta_state(tpAniSirGlobal pMac, tSirMacAddr staAddr,
{
uint32_t val;
tpDphHashNode pStaDs;
tpDphHashNode pStaDs, pnext;
uint16_t staIdx = STA_INVALID_IDX;
if (assocId >= pDphHashTable->size) {
@ -250,10 +250,11 @@ tpDphHashNode dph_init_sta_state(tpAniSirGlobal pMac, tSirMacAddr staAddr,
pStaDs = get_node(pMac, (uint8_t) assocId, pDphHashTable);
staIdx = pStaDs->staIndex;
pnext = pStaDs->next;
/* Clear the STA node except for the next pointer (last 4 bytes) */
qdf_mem_set((uint8_t *) pStaDs,
sizeof(tDphHashNode) - sizeof(tpDphHashNode), 0);
/* Clear the STA node except for the next pointer */
qdf_mem_set((uint8_t *)pStaDs, sizeof(tDphHashNode), 0);
pStaDs->next = pnext;
/* Initialize the assocId */
pStaDs->assocId = assocId;

View file

@ -55,7 +55,7 @@ typedef struct tagComebackTimerInfo {
tpAniSirGlobal pMac;
uint8_t sessionID;
tLimMlmStates limPrevMlmState; /* Previous MLM State */
tLimSmeStates limMlmState; /* MLM State */
tLimMlmStates limMlmState; /* MLM State */
} tComebackTimerInfo;
#endif /* WLAN_FEATURE_11W */
/*--------------------------------------------------------------------------

View file

@ -231,7 +231,7 @@ void lim_delete_sta_context(tpAniSirGlobal mac_ctx,
pe_err("Do not process in limMlmState %s(%x) limSmeState %s(%x)",
lim_mlm_state_str(session_entry->limMlmState),
session_entry->limMlmState,
lim_mlm_state_str(session_entry->limSmeState),
lim_sme_state_str(session_entry->limSmeState),
session_entry->limSmeState);
qdf_mem_free(msg);
return;

View file

@ -2110,6 +2110,50 @@ static void lim_fill_assoc_ind_vht_info(tpAniSirGlobal mac_ctx,
return;
}
static uint8_t lim_get_max_rate_idx(tSirMacRateSet *rateset)
{
uint8_t maxidx;
int i;
maxidx = rateset->rate[0] & 0x7f;
for (i = 1; i < rateset->numRates; i++) {
if ((rateset->rate[i] & 0x7f) > maxidx)
maxidx = rateset->rate[i] & 0x7f;
}
return maxidx;
}
static void fill_mlm_assoc_ind_vht(tpSirAssocReq assocreq,
tpDphHashNode stads,
tpLimMlmAssocInd assocind)
{
if (stads->mlmStaContext.vhtCapability) {
/* ampdu */
assocind->ampdu = true;
/* sgi */
if (assocreq->VHTCaps.shortGI80MHz ||
assocreq->VHTCaps.shortGI160and80plus80MHz)
assocind->sgi_enable = true;
/* stbc */
assocind->tx_stbc = assocreq->VHTCaps.txSTBC;
assocind->rx_stbc = assocreq->VHTCaps.rxSTBC;
/* ch width */
assocind->ch_width = stads->vhtSupportedChannelWidthSet ?
eHT_CHANNEL_WIDTH_80MHZ :
stads->htSupportedChannelWidthSet ?
eHT_CHANNEL_WIDTH_40MHZ : eHT_CHANNEL_WIDTH_20MHZ;
/* mode */
assocind->mode = SIR_SME_PHY_MODE_VHT;
assocind->rx_mcs_map = assocreq->VHTCaps.rxMCSMap & 0xff;
assocind->tx_mcs_map = assocreq->VHTCaps.txMCSMap & 0xff;
}
}
/**
* lim_send_mlm_assoc_ind() - Sends assoc indication to SME
* @mac_ctx: Global Mac context
@ -2130,6 +2174,7 @@ void lim_send_mlm_assoc_ind(tpAniSirGlobal mac_ctx,
uint32_t phy_mode;
uint8_t sub_type;
uint8_t *wpsie = NULL;
uint8_t maxidx, i;
uint32_t tmp;
/* Get a copy of the already parsed Assoc Request */
@ -2295,6 +2340,57 @@ void lim_send_mlm_assoc_ind(tpAniSirGlobal mac_ctx,
assoc_ind->chan_info.nss = sta_ds->nss;
assoc_ind->chan_info.rate_flags =
lim_get_max_rate_flags(mac_ctx, sta_ds);
assoc_ind->ampdu = false;
assoc_ind->sgi_enable = false;
assoc_ind->tx_stbc = false;
assoc_ind->rx_stbc = false;
assoc_ind->ch_width = eHT_CHANNEL_WIDTH_20MHZ;
assoc_ind->mode = SIR_SME_PHY_MODE_LEGACY;
assoc_ind->max_supp_idx = 0xff;
assoc_ind->max_ext_idx = 0xff;
assoc_ind->max_mcs_idx = 0xff;
assoc_ind->rx_mcs_map = 0xff;
assoc_ind->tx_mcs_map = 0xff;
if (assoc_req->supportedRates.numRates)
assoc_ind->max_supp_idx =
lim_get_max_rate_idx(
&assoc_req->supportedRates);
if (assoc_req->extendedRates.numRates)
assoc_ind->max_ext_idx =
lim_get_max_rate_idx(
&assoc_req->extendedRates);
if (sta_ds->mlmStaContext.htCapability) {
/* ampdu */
assoc_ind->ampdu = true;
/* sgi */
if (sta_ds->htShortGI20Mhz || sta_ds->htShortGI40Mhz)
assoc_ind->sgi_enable = true;
/* stbc */
assoc_ind->tx_stbc = assoc_req->HTCaps.txSTBC;
assoc_ind->rx_stbc = assoc_req->HTCaps.rxSTBC;
/* ch width */
assoc_ind->ch_width =
sta_ds->htSupportedChannelWidthSet ?
eHT_CHANNEL_WIDTH_40MHZ :
eHT_CHANNEL_WIDTH_20MHZ;
/* mode */
assoc_ind->mode = SIR_SME_PHY_MODE_HT;
maxidx = 0;
for (i = 0; i < 8; i++) {
if (assoc_req->HTCaps.supportedMCSSet[0] &
(1 << i))
maxidx = i;
}
assoc_ind->max_mcs_idx = maxidx;
}
fill_mlm_assoc_ind_vht(assoc_req, sta_ds, assoc_ind);
/* updates VHT information in assoc indication */
lim_fill_assoc_ind_vht_info(mac_ctx, session_entry, assoc_req,
assoc_ind);

View file

@ -489,7 +489,7 @@ lim_mlm_add_bss(tpAniSirGlobal mac_ctx,
if (NULL == addbss_param) {
pe_err("Unable to allocate memory during ADD_BSS");
/* Respond to SME with LIM_MLM_START_CNF */
return eSIR_MEM_ALLOC_FAILED;
return eSIR_SME_RESOURCES_UNAVAILABLE;
}
/* Fill in tAddBssParams members */

View file

@ -772,6 +772,17 @@ lim_fill_assoc_ind_params(tpAniSirGlobal mac_ctx,
sizeof(tSirSmeChanInfo));
/* Fill in WmmInfo */
sme_assoc_ind->wmmEnabledSta = assoc_ind->WmmStaInfoPresent;
sme_assoc_ind->ampdu = assoc_ind->ampdu;
sme_assoc_ind->sgi_enable = assoc_ind->sgi_enable;
sme_assoc_ind->tx_stbc = assoc_ind->tx_stbc;
sme_assoc_ind->rx_stbc = assoc_ind->rx_stbc;
sme_assoc_ind->ch_width = assoc_ind->ch_width;
sme_assoc_ind->mode = assoc_ind->mode;
sme_assoc_ind->max_supp_idx = assoc_ind->max_supp_idx;
sme_assoc_ind->max_ext_idx = assoc_ind->max_ext_idx;
sme_assoc_ind->max_mcs_idx = assoc_ind->max_mcs_idx;
sme_assoc_ind->rx_mcs_map = assoc_ind->rx_mcs_map;
sme_assoc_ind->tx_mcs_map = assoc_ind->tx_mcs_map;
}
/**

View file

@ -3569,10 +3569,7 @@ static void __lim_process_sme_addts_req(tpAniSirGlobal pMac, uint32_t *pMsgBuf)
if (!LIM_IS_STA_ROLE(psessionEntry)) {
pe_err("AddTs received on AP - ignoring");
lim_send_sme_addts_rsp(pMac, pSirAddts->rspReqd, eSIR_FAILURE,
psessionEntry, pSirAddts->req.tspec,
smesessionId, smetransactionId);
return;
goto send_failure_addts_rsp;
}
pStaDs =
@ -3581,19 +3578,13 @@ static void __lim_process_sme_addts_req(tpAniSirGlobal pMac, uint32_t *pMsgBuf)
if (pStaDs == NULL) {
pe_err("Cannot find AP context for addts req");
lim_send_sme_addts_rsp(pMac, pSirAddts->rspReqd, eSIR_FAILURE,
psessionEntry, pSirAddts->req.tspec,
smesessionId, smetransactionId);
return;
goto send_failure_addts_rsp;
}
if ((!pStaDs->valid) || (pStaDs->mlmStaContext.mlmState !=
eLIM_MLM_LINK_ESTABLISHED_STATE)) {
pe_err("AddTs received in invalid MLM state");
lim_send_sme_addts_rsp(pMac, pSirAddts->rspReqd, eSIR_FAILURE,
psessionEntry, pSirAddts->req.tspec,
smesessionId, smetransactionId);
return;
goto send_failure_addts_rsp;
}
pSirAddts->req.wsmTspecPresent = 0;
@ -3610,20 +3601,14 @@ static void __lim_process_sme_addts_req(tpAniSirGlobal pMac, uint32_t *pMsgBuf)
pSirAddts->req.lleTspecPresent = 1;
else {
pe_warn("ADDTS_REQ ignore - qos is disabled");
lim_send_sme_addts_rsp(pMac, pSirAddts->rspReqd, eSIR_FAILURE,
psessionEntry, pSirAddts->req.tspec,
smesessionId, smetransactionId);
return;
goto send_failure_addts_rsp;
}
if ((psessionEntry->limSmeState != eLIM_SME_ASSOCIATED_STATE) &&
(psessionEntry->limSmeState != eLIM_SME_LINK_EST_STATE)) {
pe_err("AddTs received in invalid LIMsme state (%d)",
psessionEntry->limSmeState);
lim_send_sme_addts_rsp(pMac, pSirAddts->rspReqd, eSIR_FAILURE,
psessionEntry, pSirAddts->req.tspec,
smesessionId, smetransactionId);
return;
goto send_failure_addts_rsp;
}
if (pMac->lim.gLimAddtsSent) {
@ -3632,10 +3617,7 @@ static void __lim_process_sme_addts_req(tpAniSirGlobal pMac, uint32_t *pMsgBuf)
pMac->lim.gLimAddtsReq.req.tspec.tsinfo.traffic.tsid,
pMac->lim.gLimAddtsReq.req.tspec.tsinfo.traffic.
userPrio);
lim_send_sme_addts_rsp(pMac, pSirAddts->rspReqd, eSIR_FAILURE,
psessionEntry, pSirAddts->req.tspec,
smesessionId, smetransactionId);
return;
goto send_failure_addts_rsp;
}
sir_copy_mac_addr(peerMac, psessionEntry->bssId);
@ -3656,21 +3638,21 @@ static void __lim_process_sme_addts_req(tpAniSirGlobal pMac, uint32_t *pMsgBuf)
eSIR_SUCCESS) {
pe_err("Unable to get Cfg param %d (Addts Rsp Timeout)",
WNI_CFG_ADDTS_RSP_TIMEOUT);
return;
goto send_failure_addts_rsp;
}
timeout = SYS_MS_TO_TICKS(timeout);
if (tx_timer_change(&pMac->lim.limTimers.gLimAddtsRspTimer, timeout, 0)
!= TX_SUCCESS) {
pe_err("AddtsRsp timer change failed!");
return;
goto send_failure_addts_rsp;
}
pMac->lim.gLimAddtsRspTimerCount++;
if (tx_timer_change_context(&pMac->lim.limTimers.gLimAddtsRspTimer,
pMac->lim.gLimAddtsRspTimerCount) !=
TX_SUCCESS) {
pe_err("AddtsRsp timer change failed!");
return;
goto send_failure_addts_rsp;
}
MTRACE(mac_trace
(pMac, TRACE_CODE_TIMER_ACTIVATE, psessionEntry->peSessionId,
@ -3681,9 +3663,14 @@ static void __lim_process_sme_addts_req(tpAniSirGlobal pMac, uint32_t *pMsgBuf)
if (tx_timer_activate(&pMac->lim.limTimers.gLimAddtsRspTimer) !=
TX_SUCCESS) {
pe_err("AddtsRsp timer activation failed!");
return;
goto send_failure_addts_rsp;
}
return;
send_failure_addts_rsp:
lim_send_sme_addts_rsp(pMac, pSirAddts->rspReqd, eSIR_FAILURE,
psessionEntry, pSirAddts->req.tspec,
smesessionId, smetransactionId);
}
static void __lim_process_sme_delts_req(tpAniSirGlobal pMac, uint32_t *pMsgBuf)

View file

@ -2416,8 +2416,6 @@ static void lim_tdls_update_hash_node_info(tpAniSirGlobal pMac,
tDot11fIEVHTCaps *pVhtCaps_txbf = NULL;
tDot11fIEVHTCaps vhtCap;
uint8_t cbMode;
tpDphHashNode pSessStaDs = NULL;
uint16_t aid;
if (pTdlsAddStaReq->tdlsAddOper == TDLS_OPER_ADD) {
populate_dot11f_ht_caps(pMac, psessionEntry, &htCap);
@ -2516,8 +2514,6 @@ static void lim_tdls_update_hash_node_info(tpAniSirGlobal pMac,
else
pStaDs->htSecondaryChannelOffset = cbMode;
}
pSessStaDs = dph_lookup_hash_entry(pMac, psessionEntry->bssId, &aid,
&psessionEntry->dph.dphHashTable);
/* Lets enable QOS parameter */
pStaDs->qosMode = (pTdlsAddStaReq->capability & CAPABILITIES_QOS_OFFSET)
|| pTdlsAddStaReq->htcap_present;

View file

@ -266,6 +266,17 @@ typedef struct sLimMlmAssocInd {
uint32_t assocReqLength;
uint8_t *assocReqPtr;
tSirSmeChanInfo chan_info;
bool ampdu;
bool sgi_enable;
bool tx_stbc;
bool rx_stbc;
tSirMacHTChannelWidth ch_width;
enum sir_sme_phy_mode mode;
uint8_t max_supp_idx;
uint8_t max_ext_idx;
uint8_t max_mcs_idx;
uint8_t rx_mcs_map;
uint8_t tx_mcs_map;
} tLimMlmAssocInd, *tpLimMlmAssocInd;
typedef struct sLimMlmReassocReq {

View file

@ -414,6 +414,8 @@ uint8_t *mac_trace_get_sme_msg_string(uint16_t sme_msg)
CASE_RETURN_STRING(eWNI_SME_DEFAULT_SCAN_IE);
CASE_RETURN_STRING(eWNI_SME_ROAM_SCAN_OFFLOAD_REQ);
CASE_RETURN_STRING(eWNI_SME_LOST_LINK_INFO_IND);
CASE_RETURN_STRING(eWNI_SME_GET_PEER_INFO_IND);
CASE_RETURN_STRING(eWNI_SME_GET_PEER_INFO_EXT_IND);
CASE_RETURN_STRING(eWNI_SME_RSO_CMD_STATUS_IND);
CASE_RETURN_STRING(eWNI_SME_MSG_TYPES_END);
default:

View file

@ -287,6 +287,17 @@ typedef struct sap_StationAssocReassocCompleteEvent_s {
uint8_t *assocRespPtr;
uint8_t timingMeasCap;
tSirSmeChanInfo chan_info;
bool ampdu;
bool sgi_enable;
bool tx_stbc;
bool rx_stbc;
tSirMacHTChannelWidth ch_width;
enum sir_sme_phy_mode mode;
uint8_t max_supp_idx;
uint8_t max_ext_idx;
uint8_t max_mcs_idx;
uint8_t rx_mcs_map;
uint8_t tx_mcs_map;
} tSap_StationAssocReassocCompleteEvent;
typedef struct sap_StationDisassocCompleteEvent_s {
@ -1055,6 +1066,18 @@ QDF_STATUS wlansap_set_invalid_session(void *cds_ctx);
* Return: None
*/
void sap_dfs_set_current_channel(void *sap_ctx);
/**
* wlansap_cleanup_cac_timer() - Force cleanup DFS CAC timer
* @sap_ctx: sap context
*
* Force cleanup DFS CAC timer when reset all adapters. It will not
* check concurrency SAP since just called when reset all adapters.
*
* Return: None
*/
void wlansap_cleanup_cac_timer(void *sap_ctx);
#ifdef __cplusplus
}
#endif

View file

@ -2451,6 +2451,17 @@ QDF_STATUS sap_signal_hdd_event(ptSapContext sap_ctx,
reassoc_complete->wmmEnabled = csr_roaminfo->wmmEnabledSta;
reassoc_complete->status = (eSapStatus) context;
reassoc_complete->timingMeasCap = csr_roaminfo->timingMeasCap;
reassoc_complete->ampdu = csr_roaminfo->ampdu;
reassoc_complete->sgi_enable = csr_roaminfo->sgi_enable;
reassoc_complete->tx_stbc = csr_roaminfo->tx_stbc;
reassoc_complete->rx_stbc = csr_roaminfo->rx_stbc;
reassoc_complete->ch_width = csr_roaminfo->ch_width;
reassoc_complete->mode = csr_roaminfo->mode;
reassoc_complete->max_supp_idx = csr_roaminfo->max_supp_idx;
reassoc_complete->max_ext_idx = csr_roaminfo->max_ext_idx;
reassoc_complete->max_mcs_idx = csr_roaminfo->max_mcs_idx;
reassoc_complete->rx_mcs_map = csr_roaminfo->rx_mcs_map;
reassoc_complete->tx_mcs_map = csr_roaminfo->tx_mcs_map;
break;
case eSAP_STA_DISASSOC_EVENT:

View file

@ -3745,3 +3745,26 @@ wlansap_set_invalid_session(void *cds_ctx)
return QDF_STATUS_SUCCESS;
}
void wlansap_cleanup_cac_timer(void *sap_ctx)
{
tHalHandle hal;
ptSapContext psap_ctx;
tpAniSirGlobal pmac;
if (!sap_ctx)
return;
psap_ctx = CDS_GET_SAP_CB(sap_ctx);
hal = CDS_GET_HAL_CB(psap_ctx->p_cds_gctx);
pmac = PMAC_STRUCT(hal);
if (pmac->sap.SapDfsInfo.is_dfs_cac_timer_running) {
qdf_mc_timer_stop(&pmac->sap.SapDfsInfo.
sap_dfs_cac_timer);
pmac->sap.SapDfsInfo.is_dfs_cac_timer_running = 0;
qdf_mc_timer_destroy(
&pmac->sap.SapDfsInfo.sap_dfs_cac_timer);
QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR,
FL("sapdfs, force cleanup running dfs cac timer"));
}
}

View file

@ -1319,6 +1319,9 @@ typedef struct tagCsrConfigParam {
bool is_force_1x1;
uint16_t num_11b_tx_chains;
uint16_t num_11ag_tx_chains;
uint32_t disallow_duration;
uint32_t rssi_channel_penalization;
uint32_t num_disallowed_aps;
} tCsrConfigParam;
/* Tush */
@ -1447,6 +1450,17 @@ typedef struct tagCsrRoamInfo {
tDot11fIEVHTOperation vht_operation;
tDot11fIEHTInfo ht_operation;
bool reassoc;
bool ampdu;
bool sgi_enable;
bool tx_stbc;
bool rx_stbc;
tSirMacHTChannelWidth ch_width;
enum sir_sme_phy_mode mode;
uint8_t max_supp_idx;
uint8_t max_ext_idx;
uint8_t max_mcs_idx;
uint8_t rx_mcs_map;
uint8_t tx_mcs_map;
} tCsrRoamInfo;
typedef struct tagCsrFreqScanInfo {
@ -1474,6 +1488,17 @@ typedef struct sSirSmeAssocIndToUpperLayerCnf {
uint8_t timingMeasCap;
tSirSmeChanInfo chan_info;
uint8_t target_channel;
bool ampdu;
bool sgi_enable;
bool tx_stbc;
tSirMacHTChannelWidth ch_width;
enum sir_sme_phy_mode mode;
bool rx_stbc;
uint8_t max_supp_idx;
uint8_t max_ext_idx;
uint8_t max_mcs_idx;
uint8_t rx_mcs_map;
uint8_t tx_mcs_map;
} tSirSmeAssocIndToUpperLayerCnf, *tpSirSmeAssocIndToUpperLayerCnf;
typedef struct tagCsrSummaryStatsInfo {

View file

@ -624,6 +624,9 @@ typedef struct tagCsrConfig {
bool is_force_1x1;
uint16_t num_11b_tx_chains;
uint16_t num_11ag_tx_chains;
uint32_t disallow_duration;
uint32_t rssi_channel_penalization;
uint32_t num_disallowed_aps;
} tCsrConfig;
typedef struct tagCsrChannelPowerInfo {

View file

@ -1627,4 +1627,37 @@ int sme_cli_set_command(int vdev_id, int param_id, int sval, int vpdev);
QDF_STATUS sme_set_bt_activity_info_cb(tHalHandle hal,
void (*cb)(void *, uint32_t profile_info));
/**
* sme_get_peer_info() - sme api to get peer info
* @hal: hal handle for getting global mac struct
* @req: peer info request struct send to wma
* @context: context of callback function
* @callbackfn: hdd callback function when receive response
*
* This function will send WMA_GET_PEER_INFO to WMA
*
* Return: QDF_STATUS_SUCCESS or non-zero on failure
*/
QDF_STATUS sme_get_peer_info(tHalHandle hal,
struct sir_peer_info_req req,
void *context,
void (*callbackfn)(struct sir_peer_info_resp *param,
void *pcontext));
/**
* sme_get_peer_info_ext() - sme api to get peer ext info
* @hal: hal handle for getting global mac struct
* @req: peer ext info request struct send to wma
* @context: context of callback function
* @callbackfn: hdd callback function when receive response
*
* This function will send WMA_GET_PEER_INFO_EXT to WMA
*
* Return: QDF_STATUS_SUCCESS or non-zero on failure
*/
QDF_STATUS sme_get_peer_info_ext(tHalHandle hal,
struct sir_peer_info_ext_req *req,
void *context,
void (*callbackfn)(struct sir_peer_info_ext_resp *param,
void *pcontext));
#endif /* #if !defined( __SME_API_H ) */

View file

@ -197,6 +197,14 @@ typedef struct tagSmeStruct {
void (*pLinkSpeedIndCb)(tSirLinkSpeedInfo *indParam,
void *pDevContext);
void *pLinkSpeedCbContext;
/* get peer info callback */
void (*pget_peer_info_ind_cb)(struct sir_peer_info_resp *param,
void *pcontext);
void *pget_peer_info_cb_context;
/* get extended peer info callback */
void (*pget_peer_info_ext_ind_cb)(struct sir_peer_info_ext_resp *param,
void *pcontext);
void *pget_peer_info_ext_cb_context;
#ifdef FEATURE_WLAN_EXTSCAN
void (*pExtScanIndCb)(void *, const uint16_t, void *);
#endif /* FEATURE_WLAN_EXTSCAN */

View file

@ -123,17 +123,6 @@ QDF_STATUS sme_qos_msg_processor(tpAniSirGlobal pMac, uint16_t msg_type,
------------------------------------------------------------------------*/
QDF_STATUS sme_qos_validate_params(tpAniSirGlobal pMac,
tSirBssDescription *pBssDesc);
/**
* sme_qos_remove_addts_delts_cmd - Remove addts/delts command
* @mac_ctx: Pointer to the global MAC structure.
* @session_id: Session id
*
* This function is used to remove addts/delts command
* during csr roam sync callback.
*
* Return: void
*/
void sme_qos_remove_addts_delts_cmd(tpAniSirGlobal mac_ctx, uint8_t session_id);
QDF_STATUS sme_qos_csr_event_ind(tpAniSirGlobal pMac,
uint8_t sessionId,
sme_qos_csr_event_indType ind, void *pEvent_info);

View file

@ -2413,6 +2413,18 @@ QDF_STATUS sme_process_msg(tHalHandle hHal, struct scheduler_msg *pMsg)
}
break;
#endif
case eWNI_SME_GET_PEER_INFO_IND:
if (pMac->sme.pget_peer_info_ind_cb)
pMac->sme.pget_peer_info_ind_cb(pMsg->bodyptr,
pMac->sme.pget_peer_info_cb_context);
qdf_mem_free(pMsg->bodyptr);
break;
case eWNI_SME_GET_PEER_INFO_EXT_IND:
if (pMac->sme.pget_peer_info_ext_ind_cb)
pMac->sme.pget_peer_info_ext_ind_cb(pMsg->bodyptr,
pMac->sme.pget_peer_info_ext_cb_context);
qdf_mem_free(pMsg->bodyptr);
break;
case eWNI_SME_CSA_OFFLOAD_EVENT:
if (pMsg->bodyptr) {
csr_scan_flush_bss_entry(pMac, pMsg->bodyptr);
@ -9686,6 +9698,100 @@ QDF_STATUS sme_get_link_speed(tHalHandle hHal, tSirLinkSpeedInfo *lsReq,
return status;
}
QDF_STATUS sme_get_peer_info(tHalHandle hal, struct sir_peer_info_req req,
void *context,
void (*callbackfn)(struct sir_peer_info_resp *param,
void *pcontext))
{
QDF_STATUS status;
QDF_STATUS qdf_status;
tpAniSirGlobal mac = PMAC_STRUCT(hal);
struct scheduler_msg message;
status = sme_acquire_global_lock(&mac->sme);
if (QDF_STATUS_SUCCESS == status) {
if (NULL == callbackfn) {
QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR,
"%s: Indication Call back is NULL",
__func__);
sme_release_global_lock(&mac->sme);
return QDF_STATUS_E_FAILURE;
}
mac->sme.pget_peer_info_ind_cb = callbackfn;
mac->sme.pget_peer_info_cb_context = context;
/* serialize the req through MC thread */
message.bodyptr = qdf_mem_malloc(sizeof(req));
if (NULL == message.bodyptr) {
QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR,
"%s: Memory allocation failed.", __func__);
sme_release_global_lock(&mac->sme);
return QDF_STATUS_E_NOMEM;
}
qdf_mem_copy(message.bodyptr, &req, sizeof(req));
message.type = WMA_GET_PEER_INFO;
qdf_status = scheduler_post_msg(QDF_MODULE_ID_WMA, &message);
if (!QDF_IS_STATUS_SUCCESS(qdf_status)) {
QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR,
"%s: Post get peer info msg fail", __func__);
qdf_mem_free(message.bodyptr);
status = QDF_STATUS_E_FAILURE;
}
sme_release_global_lock(&mac->sme);
}
return status;
}
QDF_STATUS sme_get_peer_info_ext(tHalHandle hal,
struct sir_peer_info_ext_req *req,
void *context,
void (*callbackfn)(struct sir_peer_info_ext_resp *param,
void *pcontext))
{
QDF_STATUS status;
QDF_STATUS qdf_status;
tpAniSirGlobal mac = PMAC_STRUCT(hal);
struct scheduler_msg message;
status = sme_acquire_global_lock(&mac->sme);
if (QDF_STATUS_SUCCESS == status) {
if (NULL == callbackfn) {
QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR,
"%s: Indication Call back is NULL",
__func__);
sme_release_global_lock(&mac->sme);
return QDF_STATUS_E_FAILURE;
}
mac->sme.pget_peer_info_ext_ind_cb = callbackfn;
mac->sme.pget_peer_info_ext_cb_context = context;
/* serialize the req through MC thread */
message.bodyptr =
qdf_mem_malloc(sizeof(struct sir_peer_info_ext_req));
if (NULL == message.bodyptr) {
QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR,
"%s: Memory allocation failed.", __func__);
sme_release_global_lock(&mac->sme);
return QDF_STATUS_E_NOMEM;
}
qdf_mem_copy(message.bodyptr,
req,
sizeof(struct sir_peer_info_ext_req));
message.type = WMA_GET_PEER_INFO_EXT;
qdf_status = scheduler_post_msg(QDF_MODULE_ID_WMA, &message);
if (!QDF_IS_STATUS_SUCCESS(qdf_status)) {
QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR,
"%s: Post get rssi msg fail", __func__);
qdf_mem_free(message.bodyptr);
status = QDF_STATUS_E_FAILURE;
}
sme_release_global_lock(&mac->sme);
}
return status;
}
/*
* SME API to enable/disable WLAN driver initiated SSR

View file

@ -2775,6 +2775,8 @@ QDF_STATUS csr_change_default_config_param(tpAniSirGlobal pMac,
pParam->sta_roam_policy_params.dfs_mode;
pMac->roam.configParam.sta_roam_policy.skip_unsafe_channels =
pParam->sta_roam_policy_params.skip_unsafe_channels;
pMac->roam.configParam.sta_roam_policy.sap_operating_band =
pParam->sta_roam_policy_params.sap_operating_band;
pMac->roam.configParam.tx_aggregation_size =
pParam->tx_aggregation_size;
@ -2786,6 +2788,12 @@ QDF_STATUS csr_change_default_config_param(tpAniSirGlobal pMac,
pParam->qcn_ie_support;
pMac->roam.configParam.fils_max_chan_guard_time =
pParam->fils_max_chan_guard_time;
pMac->roam.configParam.disallow_duration =
pParam->disallow_duration;
pMac->roam.configParam.rssi_channel_penalization =
pParam->rssi_channel_penalization;
pMac->roam.configParam.num_disallowed_aps =
pParam->num_disallowed_aps;
csr_update_he_config_param(pMac, pParam);
}
@ -3025,6 +3033,12 @@ QDF_STATUS csr_get_config_param(tpAniSirGlobal pMac, tCsrConfigParam *pParam)
pMac->roam.configParam.qcn_ie_support;
pParam->fils_max_chan_guard_time =
pMac->roam.configParam.fils_max_chan_guard_time;
pParam->disallow_duration =
pMac->roam.configParam.disallow_duration;
pParam->rssi_channel_penalization =
pMac->roam.configParam.rssi_channel_penalization;
pParam->num_disallowed_aps =
pMac->roam.configParam.num_disallowed_aps;
csr_get_he_config_param(pParam, pMac);
@ -9838,6 +9852,17 @@ void csr_roam_joined_state_msg_processor(tpAniSirGlobal pMac, void *pMsgBuf)
qdf_mem_copy(&pRoamInfo->chan_info,
&pUpperLayerAssocCnf->chan_info,
sizeof(tSirSmeChanInfo));
pRoamInfo->ampdu = pUpperLayerAssocCnf->ampdu;
pRoamInfo->sgi_enable = pUpperLayerAssocCnf->sgi_enable;
pRoamInfo->tx_stbc = pUpperLayerAssocCnf->tx_stbc;
pRoamInfo->tx_stbc = pUpperLayerAssocCnf->rx_stbc;
pRoamInfo->ch_width = pUpperLayerAssocCnf->ch_width;
pRoamInfo->mode = pUpperLayerAssocCnf->mode;
pRoamInfo->max_supp_idx = pUpperLayerAssocCnf->max_supp_idx;
pRoamInfo->max_ext_idx = pUpperLayerAssocCnf->max_ext_idx;
pRoamInfo->max_mcs_idx = pUpperLayerAssocCnf->max_mcs_idx;
pRoamInfo->rx_mcs_map = pUpperLayerAssocCnf->rx_mcs_map;
pRoamInfo->tx_mcs_map = pUpperLayerAssocCnf->tx_mcs_map;
if (CSR_IS_INFRA_AP(pRoamInfo->u.pConnectedProfile)) {
pMac->roam.roamSession[sessionId].connectState =
eCSR_ASSOC_STATE_TYPE_INFRA_CONNECTED;
@ -15157,54 +15182,90 @@ QDF_STATUS csr_send_assoc_ind_to_upper_layer_cnf_msg(tpAniSirGlobal pMac,
else
statusCode = eSIR_SME_ASSOC_REFUSED;
qdf_mem_copy(pBuf, &statusCode, sizeof(tSirResultCodes));
pBuf += sizeof(tSirResultCodes);
/* bssId */
qdf_mem_copy((tSirMacAddr *) pBuf, pAssocInd->bssId,
sizeof(tSirMacAddr));
pBuf += sizeof(tSirMacAddr);
pBuf = (uint8_t *)&pMsg->bssId;
qdf_mem_copy((tSirMacAddr *)pBuf, pAssocInd->bssId,
sizeof(tSirMacAddr));
/* peerMacAddr */
qdf_mem_copy((tSirMacAddr *) pBuf, pAssocInd->peerMacAddr,
sizeof(tSirMacAddr));
pBuf += sizeof(tSirMacAddr);
pBuf = (uint8_t *)&pMsg->peerMacAddr;
qdf_mem_copy((tSirMacAddr *)pBuf, pAssocInd->peerMacAddr,
sizeof(tSirMacAddr));
/* StaId */
pBuf = (uint8_t *)&pMsg->aid;
wTmp = pAssocInd->staId;
qdf_mem_copy(pBuf, &wTmp, sizeof(uint16_t));
pBuf += sizeof(uint16_t);
/* alternateBssId */
qdf_mem_copy((tSirMacAddr *) pBuf, pAssocInd->bssId,
sizeof(tSirMacAddr));
pBuf += sizeof(tSirMacAddr);
pBuf = (uint8_t *)&pMsg->alternateBssId;
qdf_mem_copy((tSirMacAddr *)pBuf, pAssocInd->bssId,
sizeof(tSirMacAddr));
/* alternateChannelId */
pBuf = (uint8_t *)&pMsg->alternateChannelId;
*pBuf = 11;
pBuf += sizeof(uint8_t);
/* Instead of copying roam Info, we just copy only WmmEnabled,
* RsnIE information
/*
* Instead of copying roam Info,just copy WmmEnabled,
* RsnIE information.
* Wmm
*/
/* Wmm */
pBuf = (uint8_t *)&pMsg->wmmEnabledSta;
*pBuf = pAssocInd->wmmEnabledSta;
pBuf += sizeof(uint8_t);
/* RSN IE */
qdf_mem_copy((tSirRSNie *) pBuf, &pAssocInd->rsnIE,
sizeof(tSirRSNie));
pBuf += sizeof(tSirRSNie);
pBuf = (uint8_t *)&pMsg->rsnIE;
qdf_mem_copy((tSirRSNie *)pBuf, &pAssocInd->rsnIE,
sizeof(tSirRSNie));
#ifdef FEATURE_WLAN_WAPI
/* WAPI IE */
qdf_mem_copy((tSirWAPIie *) pBuf, &pAssocInd->wapiIE,
sizeof(tSirWAPIie));
pBuf += sizeof(tSirWAPIie);
pBuf = (uint8_t *)&pMsg->wapiIE;
qdf_mem_copy((tSirWAPIie *)pBuf, &pAssocInd->wapiIE,
sizeof(tSirWAPIie));
#endif
/* Additional IE */
qdf_mem_copy((void *)pBuf, &pAssocInd->addIE,
sizeof(tSirAddie));
pBuf += sizeof(tSirAddie);
pBuf = (uint8_t *)&pMsg->addIE;
qdf_mem_copy((tSirAddie *)pBuf, &pAssocInd->addIE,
sizeof(tSirAddie));
/* reassocReq */
pBuf = (uint8_t *)&pMsg->reassocReq;
*pBuf = pAssocInd->reassocReq;
pBuf += sizeof(uint8_t);
/* timingMeasCap */
pBuf = (uint8_t *)&pMsg->timingMeasCap;
*pBuf = pAssocInd->timingMeasCap;
pBuf += sizeof(uint8_t);
/* chan_info */
pBuf = (uint8_t *)&pMsg->chan_info;
qdf_mem_copy((void *)pBuf, &pAssocInd->chan_info,
sizeof(tSirSmeChanInfo));
sizeof(tSirSmeChanInfo));
/* ampdu */
pBuf = (uint8_t *)&pMsg->ampdu;
*((bool *)pBuf) = pAssocInd->ampdu;
/* sgi_enable */
pBuf = (uint8_t *)&pMsg->sgi_enable;
*((bool *)pBuf) = pAssocInd->sgi_enable;
/* tx stbc */
pBuf = (uint8_t *)&pMsg->tx_stbc;
*((bool *)pBuf) = pAssocInd->tx_stbc;
/* ch_width */
pBuf = (uint8_t *)&pMsg->ch_width;
*((tSirMacHTChannelWidth *)pBuf) = pAssocInd->ch_width;
/* mode */
pBuf = (uint8_t *)&pMsg->mode;
*((enum sir_sme_phy_mode *)pBuf) = pAssocInd->mode;
/* rx stbc */
pBuf = (uint8_t *)&pMsg->rx_stbc;
*((bool *)pBuf) = pAssocInd->rx_stbc;
/* max supported idx */
pBuf = (uint8_t *)&pMsg->max_supp_idx;
*pBuf = pAssocInd->max_supp_idx;
/* max extended idx */
pBuf = (uint8_t *)&pMsg->max_ext_idx;
*pBuf = pAssocInd->max_ext_idx;
/* max ht mcs idx */
pBuf = (uint8_t *)&pMsg->max_mcs_idx;
*pBuf = pAssocInd->max_mcs_idx;
/* vht rx mcs map */
pBuf = (uint8_t *)&pMsg->rx_mcs_map;
*pBuf = pAssocInd->rx_mcs_map;
/* vht tx mcs map */
pBuf = (uint8_t *)&pMsg->tx_mcs_map;
*pBuf = pAssocInd->tx_mcs_map;
msgQ.type = eWNI_SME_UPPER_LAYER_ASSOC_CNF;
msgQ.bodyptr = pMsg;
msgQ.bodyval = 0;
@ -16459,6 +16520,7 @@ QDF_STATUS csr_get_snr(tpAniSirGlobal pMac,
status = csr_roam_get_session_id_from_bssid(pMac, &bssId, &sessionId);
if (!QDF_IS_STATUS_SUCCESS(status)) {
qdf_mem_free(pMsg);
sme_err("Couldn't find session_id for given BSSID");
return status;
}
@ -17208,15 +17270,26 @@ csr_create_roam_scan_offload_request(tpAniSirGlobal mac_ctx,
mac_ctx->roam.configParam.early_stop_scan_min_threshold;
req_buf->early_stop_scan_max_threshold =
mac_ctx->roam.configParam.early_stop_scan_max_threshold;
QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG,
FL("HomeAwayTime=%d EarlyStopFeature Enable=%d, MinThresh=%d, MaxThresh=%d PMK len=%d"),
req_buf->HomeAwayTime, req_buf->early_stop_scan_enable,
req_buf->early_stop_scan_min_threshold,
req_buf->early_stop_scan_max_threshold,
req_buf->pmk_len);
req_buf->roamscan_adaptive_dwell_mode =
mac_ctx->roam.configParam.roamscan_adaptive_dwell_mode;
req_buf->lca_config_params.disallow_duration =
mac_ctx->roam.configParam.disallow_duration;
req_buf->lca_config_params.rssi_channel_penalization =
mac_ctx->roam.configParam.rssi_channel_penalization;
req_buf->lca_config_params.num_disallowed_aps =
mac_ctx->roam.configParam.num_disallowed_aps;
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG,
FL("HomeAwayTime=%d EarlyStopFeature Enable=%d, MinThresh=%d, MaxThresh=%d PMK len=%d disallow_dur=%d rssi_chan_pen=%d num_disallowed_aps=%d"),
req_buf->HomeAwayTime,
req_buf->early_stop_scan_enable,
req_buf->early_stop_scan_min_threshold,
req_buf->early_stop_scan_max_threshold,
req_buf->pmk_len,
req_buf->lca_config_params.disallow_duration,
req_buf->lca_config_params.rssi_channel_penalization,
req_buf->lca_config_params.num_disallowed_aps);
req_buf->RoamOffloadEnabled = csr_roamIsRoamOffloadEnabled(mac_ctx);
req_buf->RoamKeyMgmtOffloadEnabled = session->RoamKeyMgmtOffloadEnabled;
req_buf->pmkid_modes = session->pmkid_modes;
@ -19984,7 +20057,6 @@ static QDF_STATUS csr_process_roam_sync_callback(tpAniSirGlobal mac_ctx,
eCSR_ASSOC_STATE_TYPE_INFRA_ASSOCIATED;
sme_qos_csr_event_ind(mac_ctx, session_id,
SME_QOS_CSR_REASSOC_COMPLETE, &assoc_info);
sme_qos_remove_addts_delts_cmd(mac_ctx, session_id);
roam_info->pBssDesc = bss_desc;
conn_profile->acm_mask = sme_qos_get_acm_mask(mac_ctx,
bss_desc, NULL);

Some files were not shown because too many files have changed in this diff Show more