diff options
| author | Agrawal Ashish <ashishka@codeaurora.org> | 2016-09-04 13:46:15 +0530 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-09-21 17:00:59 -0700 |
| commit | d3f22f6b7f6dc8d7d04767b2dd0c71e36fc70c4d (patch) | |
| tree | 033334faae5c6f25a1d198446f6fa330aad6be6a | |
| parent | d732f74d749bdf2c5ed560d35b6508b859690212 (diff) | |
qcacld-3.0: Update QOS capability of TDLS station/link with Data Path
qcacld-2.0 to qcacld-3.0 propagation
Currently, the QOS capability of the TDLS link is updated
based on the BSS capability. Thus, if the BSS is not QOS
capable, the TDLS link eventually is not considered as QOS capable.
To address this, update the TDLS link with the data path with the
QOS capability based on the TDLS handshake between the peers.
The information of QOS is obtained to the driver through
the change_station callback from the supplicant and thus
the information is updated to the data path accordingly.
Also, this commit advertises that the station is QOS capable
by default in the TDLS setup request /response handshakes.
Change-Id: I6a36fd77b333e66e8c030f5230b4aaaee6d7a00c
CRs-Fixed: 776081
| -rw-r--r-- | core/hdd/inc/wlan_hdd_assoc.h | 2 | ||||
| -rw-r--r-- | core/hdd/inc/wlan_hdd_tdls.h | 2 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_assoc.c | 6 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_tdls.c | 11 | ||||
| -rw-r--r-- | core/sme/inc/csr_api.h | 1 |
5 files changed, 14 insertions, 8 deletions
diff --git a/core/hdd/inc/wlan_hdd_assoc.h b/core/hdd/inc/wlan_hdd_assoc.h index 89d89cadf2ae..549b68d5deef 100644 --- a/core/hdd/inc/wlan_hdd_assoc.h +++ b/core/hdd/inc/wlan_hdd_assoc.h @@ -303,7 +303,7 @@ int hdd_set_csr_auth_type(hdd_adapter_t *pAdapter, eCsrAuthType RSNAuthType); */ QDF_STATUS hdd_roam_register_tdlssta(hdd_adapter_t *pAdapter, const uint8_t *peerMac, uint16_t staId, - uint8_t ucastSig); + uint8_t ucastSig, uint8_t qos); /** * hdd_perform_roam_set_key_complete() - perform set key complete diff --git a/core/hdd/inc/wlan_hdd_tdls.h b/core/hdd/inc/wlan_hdd_tdls.h index 0985d1af6e05..0ce0313a624b 100644 --- a/core/hdd/inc/wlan_hdd_tdls.h +++ b/core/hdd/inc/wlan_hdd_tdls.h @@ -405,6 +405,7 @@ typedef struct { * @spatial_streams: Number of TX/RX spatial streams for TDLS * @reason: reason * @state_change_notification: state change notification + * @qos: QOS capability of TDLS link */ typedef struct _hddTdlsPeer_t { struct list_head node; @@ -437,6 +438,7 @@ typedef struct _hddTdlsPeer_t { uint8_t spatial_streams; tTDLSLinkReason reason; cfg80211_exttdls_callback state_change_notification; + uint8_t qos; } hddTdlsPeer_t; /** diff --git a/core/hdd/src/wlan_hdd_assoc.c b/core/hdd/src/wlan_hdd_assoc.c index a052fcd476d1..1c0f8765a140 100644 --- a/core/hdd/src/wlan_hdd_assoc.c +++ b/core/hdd/src/wlan_hdd_assoc.c @@ -3518,6 +3518,7 @@ roam_roam_connect_status_update_handler(hdd_adapter_t *pAdapter, * @peerMac: pointer to peer MAC address * @staId: station identifier * @ucastSig: unicast signature + * @qos: QOS capability of TDLS station/link * * Construct the staDesc and register with TL the new STA. * This is called as part of ADD_STA in the TDLS setup. @@ -3526,7 +3527,7 @@ roam_roam_connect_status_update_handler(hdd_adapter_t *pAdapter, */ QDF_STATUS hdd_roam_register_tdlssta(hdd_adapter_t *pAdapter, const uint8_t *peerMac, uint16_t staId, - uint8_t ucastSig) + uint8_t ucastSig, uint8_t qos) { QDF_STATUS qdf_status = QDF_STATUS_E_FAILURE; struct ol_txrx_desc_type staDesc = { 0 }; @@ -3539,8 +3540,7 @@ QDF_STATUS hdd_roam_register_tdlssta(hdd_adapter_t *pAdapter, staDesc.sta_id = staId; /* set the QoS field appropriately .. */ - (hdd_wmm_is_active(pAdapter)) ? (staDesc.is_qos_enabled = 1) - : (staDesc.is_qos_enabled = 0); + staDesc.is_qos_enabled = qos; /* Register the vdev transmit and receive functions */ qdf_mem_zero(&txrx_ops, sizeof(txrx_ops)); diff --git a/core/hdd/src/wlan_hdd_tdls.c b/core/hdd/src/wlan_hdd_tdls.c index 816dbf2bad9a..785fd3cb1d32 100644 --- a/core/hdd/src/wlan_hdd_tdls.c +++ b/core/hdd/src/wlan_hdd_tdls.c @@ -1306,6 +1306,7 @@ int wlan_hdd_tdls_set_peer_caps(hdd_adapter_t *pAdapter, curr_peer->supported_oper_classes_len = StaParams->supported_oper_classes_len; + curr_peer->qos = StaParams->capability & CAPABILITIES_QOS_OFFSET; return 0; } @@ -1351,6 +1352,7 @@ int wlan_hdd_tdls_get_link_establish_params(hdd_adapter_t *pAdapter, tdlsLinkEstablishParams->supportedOperClassesLen = curr_peer->supported_oper_classes_len; + tdlsLinkEstablishParams->qos = curr_peer->qos; return 0; } @@ -4459,10 +4461,11 @@ static int __wlan_hdd_cfg80211_tdls_oper(struct wiphy *wiphy, true); /* start TDLS client registration with TL */ status = - hdd_roam_register_tdlssta(pAdapter, peer, - pTdlsPeer->staId, - pTdlsPeer-> - signature); + hdd_roam_register_tdlssta( + pAdapter, peer, + pTdlsPeer->staId, + pTdlsPeer->signature, + tdlsLinkEstablishParams.qos); if (QDF_STATUS_SUCCESS == status) { uint8_t i; diff --git a/core/sme/inc/csr_api.h b/core/sme/inc/csr_api.h index a918aadc49f7..70e175cee25b 100644 --- a/core/sme/inc/csr_api.h +++ b/core/sme/inc/csr_api.h @@ -1564,6 +1564,7 @@ typedef struct tagCsrLinkEstablishParams { uint8_t supportedChannels[SIR_MAC_MAX_SUPP_CHANNELS]; uint8_t supportedOperClassesLen; uint8_t supportedOperClasses[CDS_MAX_SUPP_OPER_CLASSES]; + uint8_t qos; } tCsrTdlsLinkEstablishParams; typedef struct tagCsrTdlsSendMgmt { |
