diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2017-03-30 04:02:02 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2017-03-30 04:02:02 -0700 |
| commit | 2872f99fe1c9ce4c3eeb70778ca63b45653fa6bf (patch) | |
| tree | cc5e3f24a217c87d540487be4b7002869bd403ba | |
| parent | 2718554de8c6197d13630a1c0e53887a998fd69f (diff) | |
| parent | 5dbd50aa9c6f8fa505340f51963ddf16347b2aca (diff) | |
Merge "qcacld-2.0: Add rx TA feature and set TA max duration" into wlan-cld2.driver.lnx.1.0-dev
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_cfg80211.c | 1 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_ocb.c | 19 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_ocb.h | 6 | ||||
| -rw-r--r-- | CORE/MAC/inc/sirApi.h | 2 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limProcessMessageQueue.c | 17 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma_ocb.c | 3 |
6 files changed, 43 insertions, 5 deletions
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index d2efd75c0841..00ab4d24e97f 100644 --- a/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -420,6 +420,7 @@ wlan_hdd_txrx_stypes[NUM_NL80211_IFTYPES] = { [NL80211_IFTYPE_STATION] = { .tx = 0xffff, .rx = BIT(SIR_MAC_MGMT_ACTION) | + BIT(SIR_MAC_MGMT_TIME_ADVERT) | BIT(SIR_MAC_MGMT_PROBE_REQ), }, [NL80211_IFTYPE_AP] = { diff --git a/CORE/HDD/src/wlan_hdd_ocb.c b/CORE/HDD/src/wlan_hdd_ocb.c index 95fde5eca899..7c44a1747b85 100644 --- a/CORE/HDD/src/wlan_hdd_ocb.c +++ b/CORE/HDD/src/wlan_hdd_ocb.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015-2016 The Linux Foundation. All rights reserved. + * Copyright (c) 2015-2017 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -755,6 +755,9 @@ static const struct nla_policy qca_wlan_vendor_ocb_set_config_policy[ [QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_DEF_TX_PARAM] = { .type = NLA_BINARY }, + [QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_TA_MAX_DURATION] = { + .type = NLA_U32 + }, }; static const struct nla_policy qca_wlan_vendor_ocb_set_utc_time_policy[ @@ -901,6 +904,7 @@ static int __wlan_hdd_cfg80211_ocb_set_config(struct wiphy *wiphy, struct nlattr *ndl_active_state_list; uint32_t ndl_active_state_list_len; uint32_t flags = 0; + uint32_t ta_max_duration = 0; void *def_tx_param = NULL; uint32_t def_tx_param_size = 0; int i; @@ -971,6 +975,11 @@ static int __wlan_hdd_cfg80211_ocb_set_config(struct wiphy *wiphy, QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_DEF_TX_PARAM]); } + /* Get the ta max duration. This parameter is optional. */ + if (tb[QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_TA_MAX_DURATION]) + ta_max_duration = nla_get_u32(tb[ + QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_TA_MAX_DURATION]); + config = hdd_ocb_config_new(channel_count, schedule_size, ndl_chan_list_len, ndl_active_state_list_len); @@ -982,6 +991,14 @@ static int __wlan_hdd_cfg80211_ocb_set_config(struct wiphy *wiphy, config->channel_count = channel_count; config->schedule_size = schedule_size; config->flags = flags; + /* + * Set max duration after the last TA received that the local time set + * by TA is synchronous to other communicating OCB STAs. If it expires, + * the OCB STA itself without UTC time source like GPS thinks that the + * local time of itself is not sync to other STAs and stop scheduling + * DSRC channel switch. + */ + config->ta_max_duration = ta_max_duration; config->def_tx_param = def_tx_param; config->def_tx_param_size = def_tx_param_size; diff --git a/CORE/HDD/src/wlan_hdd_ocb.h b/CORE/HDD/src/wlan_hdd_ocb.h index f7172f4c5bc7..535f74005cb8 100644 --- a/CORE/HDD/src/wlan_hdd_ocb.h +++ b/CORE/HDD/src/wlan_hdd_ocb.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015-2016 The Linux Foundation. All rights reserved. + * Copyright (c) 2015-2017 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -96,6 +96,9 @@ struct dot11p_channel_sched { * @QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_DEF_TX_PARAM: * default TX parameters to use in the case that a packet is sent without * a TX control header + * @QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_TA_MAX_DURATION: + * max duration after the last TA received that the local time set + * by TA is synchronous to other communicating OCB STAs */ enum qca_wlan_vendor_attr_ocb_set_config { QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_INVALID = 0, @@ -107,6 +110,7 @@ enum qca_wlan_vendor_attr_ocb_set_config { QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_NDL_ACTIVE_STATE_ARRAY, QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_FLAGS, QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_DEF_TX_PARAM, + QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_TA_MAX_DURATION, QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_AFTER_LAST, QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_MAX = QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_AFTER_LAST - 1, diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h index 990d4885241c..4c2f67525565 100644 --- a/CORE/MAC/inc/sirApi.h +++ b/CORE/MAC/inc/sirApi.h @@ -7104,6 +7104,7 @@ struct sir_ocb_config_sched { * @channel_count: number of channels * @schedule_size: size of the channel schedule * @flags: reserved + * @ta_max_duration: ta max duration after last ta received * @channels: array of OCB channels * @schedule: array of OCB schedule elements * @dcc_ndl_chan_list_len: size of the ndl_chan array @@ -7118,6 +7119,7 @@ struct sir_ocb_config { uint32_t channel_count; uint32_t schedule_size; uint32_t flags; + uint32_t ta_max_duration; struct sir_ocb_config_channel *channels; struct sir_ocb_config_sched *schedule; uint32_t dcc_ndl_chan_list_len; diff --git a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c index 34a869430cb4..641c525708cc 100644 --- a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c +++ b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011-2016 The Linux Foundation. All rights reserved. + * Copyright (c) 2011-2017 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -815,7 +815,10 @@ limHandle80211Frames(tpAniSirGlobal pMac, tpSirMsgQ limMsg, tANI_U8 *pDeferMsg) if((fc.subType != SIR_MAC_MGMT_PROBE_RSP )&& (fc.subType != SIR_MAC_MGMT_BEACON)&& (fc.subType != SIR_MAC_MGMT_PROBE_REQ) - && (fc.subType != SIR_MAC_MGMT_ACTION ) //Public action frame can be received from non-associated stations. + /* TA for 11p DSRC */ + && (fc.subType != SIR_MAC_MGMT_TIME_ADVERT) + /* Public action frame can be received from non-associated STAs */ + && (fc.subType != SIR_MAC_MGMT_ACTION ) ) { @@ -935,6 +938,16 @@ limHandle80211Frames(tpAniSirGlobal pMac, tpSirMsgQ limMsg, tANI_U8 *pDeferMsg) limProcessDeauthFrame(pMac, pRxPacketInfo,psessionEntry); break; + case SIR_MAC_MGMT_TIME_ADVERT: + { + tANI_U32 frameLen = WDA_GET_RX_PAYLOAD_LEN(pRxPacketInfo); + limSendSmeMgmtFrameInd(pMac, SIR_MAC_MGMT_TIME_ADVERT, + (tANI_U8*)pHdr, frameLen + sizeof(tSirMacMgmtHdr), + 0, WDA_GET_RX_CH(pRxPacketInfo), NULL, + WDA_GET_RX_RSSI_RAW(pRxPacketInfo)); + } + break; + case SIR_MAC_MGMT_ACTION: if(psessionEntry == NULL) limProcessActionFrameNoSession(pMac, pRxPacketInfo); diff --git a/CORE/SERVICES/WMA/wma_ocb.c b/CORE/SERVICES/WMA/wma_ocb.c index 2bdfe5102fc7..247ef82c4d8a 100644 --- a/CORE/SERVICES/WMA/wma_ocb.c +++ b/CORE/SERVICES/WMA/wma_ocb.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015-2016 The Linux Foundation. All rights reserved. + * Copyright (c) 2015-2017 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -311,6 +311,7 @@ int wma_ocb_set_config(tp_wma_handle wma_handle, struct sir_ocb_config *config) cmd->channel_count = config->channel_count; cmd->schedule_size = config->schedule_size; cmd->flags = config->flags; + cmd->ta_max_duration = config->ta_max_duration; buf_ptr += sizeof(*cmd); /* Add the wmi_channel info */ |
