Explorar el Código

qcacld-3.0: Converge on struct tdls_peer_update_state

As part of the original TDLS componentization the legacy typedef
tTdlsPeerStateParams was replicated as qca-wifi-host-cmn struct
tdls_peer_state_params. Subsequently when the TDLS component was
relocated back to qcacld-3.0 this struct was replicated again as
struct tdls_peer_update_state in the qcacld-3.0 TDLS public structs.
Unfortunately this left the driver with three different data
structures which serve the same purpose. Not only is this pointless,
but due to the way in which these structures are used there is an
implicit requirement that they be exactly identical. Further
complicating matters is the fact that these three structures each have
embedded structs which are also replicated. This approach is very
fragile since any change to any of these structs must be replicated
across the entire set. To align with the converged software
architecture and to improve code maintainability exclusively use the
TDLS public structs.

Change-Id: Id6d44a1bc0fe530957db3d9f9ab948e2af775433
CRs-Fixed: 2400766
Jeff Johnson hace 6 años
padre
commit
517ee49b3a

+ 0 - 56
core/wma/inc/wma_if.h

@@ -23,7 +23,6 @@
 #include "sir_api.h"
 #include "sir_params.h"
 
-
 /*
  * Validate the OS Type being built
  */
@@ -969,61 +968,6 @@ struct set_dtim_params {
 #define DOT11_HT_IE     1
 #define DOT11_VHT_IE    2
 
-#ifdef FEATURE_WLAN_TDLS
-
-#define HAL_TDLS_MAX_SUPP_CHANNELS       128
-#define HAL_TDLS_MAX_SUPP_OPER_CLASSES   32
-
-/**
- * struct tTdlsPeerCapParams - TDLS peer capablities parameters
- * @isPeerResponder: is peer responder or not
- * @peerUapsdQueue: peer uapsd queue
- * @peerMaxSp: peer max SP value
- * @peerBuffStaSupport: peer buffer sta supported or not
- * @peerOffChanSupport: peer offchannel support
- * @peerCurrOperClass: peer current operating class
- * @selfCurrOperClass: self current operating class
- * @peerChanLen: peer channel length
- * @peerChan: peer channel list
- * @peerOperClassLen: peer operating class length
- * @peerOperClass: peer operating class
- * @prefOffChanNum: peer offchannel number
- * @prefOffChanBandwidth: peer offchannel bandwidth
- * @opClassForPrefOffChan: operating class for offchannel
- */
-typedef struct {
-	uint8_t isPeerResponder;
-	uint8_t peerUapsdQueue;
-	uint8_t peerMaxSp;
-	uint8_t peerBuffStaSupport;
-	uint8_t peerOffChanSupport;
-	uint8_t peerCurrOperClass;
-	uint8_t selfCurrOperClass;
-	uint8_t peerChanLen;
-	tSirUpdateChanParam peerChan[HAL_TDLS_MAX_SUPP_CHANNELS];
-	uint8_t peerOperClassLen;
-	uint8_t peerOperClass[HAL_TDLS_MAX_SUPP_OPER_CLASSES];
-	uint8_t prefOffChanNum;
-	uint8_t prefOffChanBandwidth;
-	uint8_t opClassForPrefOffChan;
-} tTdlsPeerCapParams;
-
-/**
- * struct tTdlsPeerStateParams - TDLS peer state parameters
- * @vdevId: vdev id
- * @peerMacAddr: peer mac address
- * @peerCap: peer capabality
- */
-typedef struct sTdlsPeerStateParams {
-	uint32_t vdevId;
-	tSirMacAddr peerMacAddr;
-	uint32_t peerState;
-	tTdlsPeerCapParams peerCap;
-	bool resp_reqd;
-} tTdlsPeerStateParams;
-
-#endif /* FEATURE_WLAN_TDLS */
-
 /**
  * struct del_sta_self_params - Del Sta Self params
  * @session_id: SME Session ID

+ 1 - 2
core/wma/inc/wma_internal.h

@@ -1272,9 +1272,8 @@ QDF_STATUS wma_process_ch_avoid_update_req(tp_wma_handle wma_handle,
 #endif
 
 #ifdef FEATURE_WLAN_TDLS
-
 int wma_update_tdls_peer_state(WMA_HANDLE handle,
-			       tTdlsPeerStateParams *peerStateParams);
+			       struct tdls_peer_update_state *peer_state);
 #endif
 
 void wma_set_vdev_mgmt_rate(tp_wma_handle wma, uint8_t vdev_id);

+ 17 - 17
core/wma/src/wma_dev_if.c

@@ -5241,7 +5241,7 @@ static void wma_add_tdls_sta(tp_wma_handle wma, tpAddStaParams add_sta)
 	uint8_t peer_id;
 	QDF_STATUS status;
 	int32_t ret;
-	tTdlsPeerStateParams *peerStateParams;
+	struct tdls_peer_update_state *peer_state;
 	struct wma_target_req *msg;
 	bool peer_assoc_cnf = false;
 	void *soc = cds_get_context(QDF_MODULE_ID_SOC);
@@ -5304,17 +5304,17 @@ static void wma_add_tdls_sta(tp_wma_handle wma, tpAddStaParams add_sta)
 		WMA_LOGD("%s: addSta, after calling cdp_local_peer_id, staIdx: %d, staMac: %pM",
 			 __func__, add_sta->staIdx, add_sta->staMac);
 
-		peerStateParams = qdf_mem_malloc(sizeof(tTdlsPeerStateParams));
-		if (!peerStateParams) {
+		peer_state = qdf_mem_malloc(sizeof(*peer_state));
+		if (!peer_state) {
 			add_sta->status = QDF_STATUS_E_NOMEM;
 			goto send_rsp;
 		}
 
-		peerStateParams->peerState = WMI_TDLS_PEER_STATE_PEERING;
-		peerStateParams->vdevId = add_sta->smesessionId;
-		qdf_mem_copy(&peerStateParams->peerMacAddr,
+		peer_state->peer_state = WMI_TDLS_PEER_STATE_PEERING;
+		peer_state->vdev_id = add_sta->smesessionId;
+		qdf_mem_copy(&peer_state->peer_macaddr,
 			     &add_sta->staMac, sizeof(tSirMacAddr));
-		wma_update_tdls_peer_state(wma, peerStateParams);
+		wma_update_tdls_peer_state(wma, peer_state);
 	} else {
 		/* its a change sta request * */
 		peer =
@@ -5800,12 +5800,12 @@ send_del_rsp:
  */
 static void wma_del_tdls_sta(tp_wma_handle wma, tpDeleteStaParams del_sta)
 {
-	tTdlsPeerStateParams *peerStateParams;
+	struct tdls_peer_update_state *peer_state;
 	struct wma_target_req *msg;
 	int status;
 
-	peerStateParams = qdf_mem_malloc(sizeof(tTdlsPeerStateParams));
-	if (!peerStateParams) {
+	peer_state = qdf_mem_malloc(sizeof(*peer_state));
+	if (!peer_state) {
 		del_sta->status = QDF_STATUS_E_NOMEM;
 		goto send_del_rsp;
 	}
@@ -5816,17 +5816,17 @@ static void wma_del_tdls_sta(tp_wma_handle wma, tpDeleteStaParams del_sta)
 		goto send_del_rsp;
 	}
 
-	peerStateParams->peerState = TDLS_PEER_STATE_TEARDOWN;
-	peerStateParams->vdevId = del_sta->smesessionId;
-	peerStateParams->resp_reqd = del_sta->respReqd;
-	qdf_mem_copy(&peerStateParams->peerMacAddr,
+	peer_state->peer_state = TDLS_PEER_STATE_TEARDOWN;
+	peer_state->vdev_id = del_sta->smesessionId;
+	peer_state->resp_reqd = del_sta->respReqd;
+	qdf_mem_copy(&peer_state->peer_macaddr,
 		     &del_sta->staMac, sizeof(tSirMacAddr));
 
 	WMA_LOGD("%s: sending tdls_peer_state for peer mac: %pM, peerState: %d",
-		 __func__, peerStateParams->peerMacAddr,
-		 peerStateParams->peerState);
+		 __func__, peer_state->peer_macaddr,
+		 peer_state->peer_state);
 
-	status = wma_update_tdls_peer_state(wma, peerStateParams);
+	status = wma_update_tdls_peer_state(wma, peer_state);
 
 	if (status < 0) {
 		WMA_LOGE("%s: wma_update_tdls_peer_state returned failure",

+ 28 - 26
core/wma/src/wma_features.c

@@ -3989,12 +3989,12 @@ int wma_tdls_event_handler(void *handle, uint8_t *event, uint32_t len)
 /**
  * wma_update_tdls_peer_state() - update TDLS peer state
  * @handle: wma handle
- * @peerStateParams: TDLS peer state params
+ * @peer_state: TDLS peer state params
  *
  * Return: 0 for success or error code
  */
 int wma_update_tdls_peer_state(WMA_HANDLE handle,
-			       tTdlsPeerStateParams *peerStateParams)
+			       struct tdls_peer_update_state *peer_state)
 {
 	tp_wma_handle wma_handle = (tp_wma_handle) handle;
 	uint32_t i;
@@ -4002,9 +4002,12 @@ int wma_update_tdls_peer_state(WMA_HANDLE handle,
 	uint8_t peer_id;
 	void *peer;
 	void *soc = cds_get_context(QDF_MODULE_ID_SOC);
+	struct tdls_peer_params *peer_cap;
 	uint8_t *peer_mac_addr;
 	int ret = 0;
 	uint32_t *ch_mhz = NULL;
+	size_t ch_mhz_len;
+	uint8_t chan_id;
 	bool restore_last_peer = false;
 	QDF_STATUS qdf_status;
 
@@ -4021,32 +4024,31 @@ int wma_update_tdls_peer_state(WMA_HANDLE handle,
 	}
 
 	if (wma_is_roam_synch_in_progress(wma_handle,
-					  peerStateParams->vdevId)) {
+					  peer_state->vdev_id)) {
 		WMA_LOGE("%s: roaming in progress, reject peer update cmd!",
 			 __func__);
 		ret = -EPERM;
 		goto end_tdls_peer_state;
 	}
 
+	peer_cap = &peer_state->peer_cap;
+
 	/* peer capability info is valid only when peer state is connected */
-	if (TDLS_PEER_STATE_CONNECTED != peerStateParams->peerState) {
-		qdf_mem_zero(&peerStateParams->peerCap,
-			     sizeof(tTdlsPeerCapParams));
-	}
+	if (TDLS_PEER_STATE_CONNECTED != peer_state->peer_state)
+		qdf_mem_zero(peer_cap, sizeof(*peer_cap));
 
-	if (peerStateParams->peerCap.peerChanLen) {
-		ch_mhz = qdf_mem_malloc(sizeof(uint32_t) *
-				peerStateParams->peerCap.peerChanLen);
+	if (peer_cap->peer_chanlen) {
+		ch_mhz_len = sizeof(*ch_mhz) * peer_cap->peer_chanlen;
+		ch_mhz = qdf_mem_malloc(ch_mhz_len);
 		if (!ch_mhz) {
 			ret = -ENOMEM;
 			goto end_tdls_peer_state;
 		}
-	}
 
-	for (i = 0; i < peerStateParams->peerCap.peerChanLen; ++i) {
-		ch_mhz[i] =
-			cds_chan_to_freq(peerStateParams->peerCap.peerChan[i].
-					 chanId);
+		for (i = 0; i < peer_cap->peer_chanlen; ++i) {
+			chan_id = peer_cap->peer_chan[i].chan_id;
+			ch_mhz[i] = cds_chan_to_freq(chan_id);
+		}
 	}
 
 	/* Make sure that peer exists before sending peer state cmd*/
@@ -4058,19 +4060,19 @@ int wma_update_tdls_peer_state(WMA_HANDLE handle,
 	}
 
 	peer = cdp_peer_find_by_addr(soc,
-			pdev,
-			peerStateParams->peerMacAddr,
-			&peer_id);
+				     pdev,
+				     peer_state->peer_macaddr,
+				     &peer_id);
 	if (!peer) {
 		WMA_LOGE("%s: Failed to get peer handle using peer mac %pM",
-				__func__, peerStateParams->peerMacAddr);
+				__func__, peer_state->peer_macaddr);
 		ret = -EIO;
 		goto end_tdls_peer_state;
 	}
 
 	if (wmi_unified_update_tdls_peer_state_cmd(wma_handle->wmi_handle,
-			 (void *)peerStateParams,
-			 ch_mhz)) {
+						   peer_state,
+						   ch_mhz)) {
 		WMA_LOGE("%s: failed to send tdls peer update state command",
 			 __func__);
 		ret = -EIO;
@@ -4078,7 +4080,7 @@ int wma_update_tdls_peer_state(WMA_HANDLE handle,
 	}
 
 	/* in case of teardown, remove peer from fw */
-	if (TDLS_PEER_STATE_TEARDOWN == peerStateParams->peerState) {
+	if (TDLS_PEER_STATE_TEARDOWN == peer_state->peer_state) {
 		peer_mac_addr = cdp_peer_get_peer_mac_addr(soc, peer);
 		if (peer_mac_addr == NULL) {
 			WMA_LOGE("peer_mac_addr is NULL");
@@ -4092,9 +4094,9 @@ int wma_update_tdls_peer_state(WMA_HANDLE handle,
 		WMA_LOGD("%s: calling wma_remove_peer for peer " MAC_ADDRESS_STR
 			 " vdevId: %d", __func__,
 			 MAC_ADDR_ARRAY(peer_mac_addr),
-			 peerStateParams->vdevId);
+			 peer_state->vdev_id);
 		qdf_status = wma_remove_peer(wma_handle, peer_mac_addr,
-				peerStateParams->vdevId, peer, false);
+					     peer_state->vdev_id, peer, false);
 		if (QDF_IS_STATUS_ERROR(qdf_status)) {
 			WMA_LOGE(FL("wma_remove_peer failed"));
 			ret = -EINVAL;
@@ -4108,8 +4110,8 @@ int wma_update_tdls_peer_state(WMA_HANDLE handle,
 end_tdls_peer_state:
 	if (ch_mhz)
 		qdf_mem_free(ch_mhz);
-	if (peerStateParams)
-		qdf_mem_free(peerStateParams);
+	if (peer_state)
+		qdf_mem_free(peer_state);
 	return ret;
 }
 #endif /* FEATURE_WLAN_TDLS */

+ 1 - 2
core/wma/src/wma_main.c

@@ -8449,8 +8449,7 @@ static QDF_STATUS wma_mc_process_msg(struct scheduler_msg *msg)
 
 #ifdef FEATURE_WLAN_TDLS
 	case WMA_UPDATE_TDLS_PEER_STATE:
-		wma_update_tdls_peer_state(wma_handle,
-				(tTdlsPeerStateParams *) msg->bodyptr);
+		wma_update_tdls_peer_state(wma_handle, msg->bodyptr);
 		break;
 #endif /* FEATURE_WLAN_TDLS */
 	case WMA_ADD_PERIODIC_TX_PTRN_IND: