Bläddra i källkod

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
Agrawal Ashish 8 år sedan
förälder
incheckning
d3f22f6b7f

+ 1 - 1
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

+ 2 - 0
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;
 
 /**

+ 3 - 3
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));

+ 7 - 4
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;
 

+ 1 - 0
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 {