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 {