Browse Source

qcacld-3.0: Delete peer(if needed) in ndp end indication

qcacld-2.0 to qcacld-3.0 propagation

Take action to delete peer in NDP_END Indication, rather than
NDP_END Response event from firmware. Earlier, device initiating
NDP_END will only get NDP_END_Response event from firmware, but
that behavior is changed now and both self and peer device will get
NDP_END_indication with peer map for ndp end.

Change-Id: I7316cc3864052eef4c7bbe9bbac01f0333909c59
CRs-Fixed: 962367
Rakesh Sunki 8 years ago
parent
commit
ae936b6a50

+ 1 - 28
core/hdd/src/wlan_hdd_nan_datapath.c

@@ -1491,10 +1491,7 @@ static void hdd_ndp_end_rsp_handler(hdd_adapter_t *adapter, void *rsp_params)
 	struct sk_buff *vendor_event;
 	hdd_context_t *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
 	struct ndp_end_rsp_event *rsp = rsp_params;
-	struct nan_datapath_ctx *ndp_ctx;
-	uint32_t data_len, i;
-	int idx;
-	hdd_station_ctx_t *sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter);
+	uint32_t data_len;
 
 	ENTER();
 
@@ -1506,30 +1503,6 @@ static void hdd_ndp_end_rsp_handler(hdd_adapter_t *adapter, void *rsp_params)
 	if (0 != wlan_hdd_validate_context(hdd_ctx))
 		return;
 
-	/* adjust active ndp instances per peer */
-	if (rsp->status == NDP_CMD_RSP_STATUS_SUCCESS) {
-		for (i = 0; i < rsp->num_peers; i++) {
-			adapter = hdd_get_adapter_by_vdev(hdd_ctx,
-						rsp->ndp_map[i].vdev_id);
-			if (NULL == adapter) {
-				hdd_err("adapter for vdev_id: %d not found",
-					rsp->ndp_map[i].vdev_id);
-				continue;
-			}
-			sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter);
-			ndp_ctx = WLAN_HDD_GET_NDP_CTX_PTR(adapter);
-			idx = hdd_get_peer_idx(sta_ctx,
-					&rsp->ndp_map[i].peer_ndi_mac_addr);
-			if (idx == INVALID_PEER_IDX)
-				hdd_err("can't find addr: %pM in vdev_id: %d, peer table.",
-					&rsp->ndp_map[i].peer_ndi_mac_addr,
-					rsp->ndp_map[i].vdev_id);
-			else
-				ndp_ctx->active_ndp_sessions[idx] =
-					rsp->ndp_map[i].num_active_ndp_sessions;
-		}
-	}
-
 	data_len = NLMSG_HDRLEN + (4 * NLA_HDRLEN) + (3 * sizeof(uint32_t)) +
 		   sizeof(uint16_t);
 

+ 0 - 6
core/mac/inc/sir_api.h

@@ -6230,18 +6230,12 @@ struct peer_ndp_map {
  * @transaction_id: unique identifier for the request
  * @status: status of operation
  * @reason: reason(opaque to host driver)
- * @num_ndp_terminated: if successful, number of ndp instances terminated
- * @num_peers: number of peers in ndp_map
- * @ndp_map: mapping of NDP instances to peer to VDEV
  *
  */
 struct ndp_end_rsp_event {
 	uint32_t transaction_id;
 	uint32_t status;
 	uint32_t reason;
-	uint32_t num_ndp_terminated;
-	uint32_t num_peers;
-	struct peer_ndp_map ndp_map[];
 };
 
 /**

+ 3 - 10
core/mac/src/pe/nan/nan_datapath.c

@@ -505,17 +505,10 @@ QDF_STATUS lim_handle_ndp_event_message(tpAniSirGlobal mac_ctx, cds_msg_t *msg)
 					msg->bodyval);
 		break;
 	case SIR_HAL_NDP_END_RSP: {
-		struct ndp_end_rsp_event *ndp_end_rsp = msg->bodyptr;
-		uint32_t rsp_len = sizeof(*ndp_end_rsp);
-
-		if (ndp_end_rsp && ndp_end_rsp->ndp_map) {
-			lim_ndp_delete_peers(mac_ctx, ndp_end_rsp->ndp_map,
-					     ndp_end_rsp->num_peers);
-			rsp_len += (ndp_end_rsp->num_peers *
-					sizeof(struct peer_ndp_map));
-		}
 		lim_send_ndp_event_to_sme(mac_ctx, eWNI_SME_NDP_END_RSP,
-				msg->bodyptr, rsp_len, msg->bodyval);
+					  msg->bodyptr,
+					  sizeof(struct ndp_end_rsp_event),
+					  msg->bodyval);
 		break;
 	}
 	case SIR_HAL_NDP_END_IND:

+ 0 - 7
core/sme/src/nan/nan_datapath_api.c

@@ -668,13 +668,6 @@ void sme_ndp_msg_processor(tpAniSirGlobal mac_ctx, cds_msg_t *msg)
 		}
 		release_active_cmd = true;
 		cmd_to_rel = eSmeCommandNdpDataEndInitiatorRequest;
-		/*
-		 * get num of ndp requested to terminated from sme command
-		 * being released
-		 */
-		if (cmd != NULL && cmd_to_rel == cmd->command)
-			roam_info.ndp.ndp_end_rsp_params->num_ndp_terminated =
-				cmd->u.data_end_req->num_ndp_instances;
 		break;
 	}
 	case eWNI_SME_NDP_END_IND:

+ 2 - 33
core/wma/src/wma_nan_datapath.c

@@ -569,9 +569,6 @@ static int wma_ndp_end_response_event_handler(void *handle,
 	struct ndp_end_rsp_event *end_rsp;
 	WMI_NDP_END_RSP_EVENTID_param_tlvs *event;
 	wmi_ndp_end_rsp_event_fixed_param *fixed_params = NULL;
-	wmi_ndp_end_rsp_per_ndi *end_rsp_tlv;
-	uint32_t i;
-	uint32_t len_end_rsp;
 	tp_wma_handle wma_handle = handle;
 
 	event = (WMI_NDP_END_RSP_EVENTID_param_tlvs *) event_info;
@@ -580,9 +577,7 @@ static int wma_ndp_end_response_event_handler(void *handle,
 		 WMI_NDP_END_RSP_EVENTID, fixed_params->transaction_id,
 		 fixed_params->rsp_status, fixed_params->reason_code);
 
-	len_end_rsp = sizeof(*end_rsp) + (event->num_ndp_end_rsp_per_ndi_list *
-						sizeof(struct peer_ndp_map));
-	end_rsp = qdf_mem_malloc(len_end_rsp);
+	end_rsp = qdf_mem_malloc(sizeof(*end_rsp));
 	if (NULL == end_rsp) {
 		WMA_LOGE("malloc failed");
 		pe_msg.bodyval = true;
@@ -590,38 +585,12 @@ static int wma_ndp_end_response_event_handler(void *handle,
 		goto send_ndp_end_rsp;
 	}
 	pe_msg.bodyptr = end_rsp;
-	qdf_mem_zero(end_rsp, len_end_rsp);
+	qdf_mem_zero(end_rsp, sizeof(*end_rsp));
 
 	end_rsp->transaction_id = fixed_params->transaction_id;
 	end_rsp->reason = fixed_params->reason_code;
 	end_rsp->status = fixed_params->rsp_status;
 
-	if (end_rsp->status == NDP_CMD_RSP_STATUS_SUCCESS) {
-		WMA_LOGD(FL("NDP end rsp, num_peers: %d"),
-			event->num_ndp_end_rsp_per_ndi_list);
-		end_rsp->num_peers = event->num_ndp_end_rsp_per_ndi_list;
-		if (end_rsp->num_peers == 0) {
-			WMA_LOGE(FL("num_peers in NDP rsp should not be 0."));
-			end_rsp->status = NDP_CMD_RSP_STATUS_ERROR;
-			end_rsp->reason = NDP_END_FAILED;
-			goto send_ndp_end_rsp;
-		}
-		/* copy per peer response to return path buffer */
-		end_rsp_tlv = event->ndp_end_rsp_per_ndi_list;
-		for (i = 0; i < end_rsp->num_peers; i++) {
-			end_rsp->ndp_map[i].vdev_id = end_rsp_tlv[i].vdev_id;
-			WMI_MAC_ADDR_TO_CHAR_ARRAY(
-				&end_rsp_tlv[i].peer_mac_addr,
-				end_rsp->ndp_map[i].peer_ndi_mac_addr.bytes);
-			end_rsp->ndp_map[i].num_active_ndp_sessions =
-					end_rsp_tlv[i].num_active_ndps_on_ndi;
-			WMA_LOGD(FL("vdev_id: %d, peer_addr: %pM, active_ndp_left: %d"),
-				end_rsp->ndp_map[i].vdev_id,
-				&end_rsp->ndp_map[i].peer_ndi_mac_addr,
-				end_rsp->ndp_map[i].num_active_ndp_sessions);
-		}
-	}
-
 send_ndp_end_rsp:
 	pe_msg.type = SIR_HAL_NDP_END_RSP;
 	status = wma_handle->pe_ndp_event_handler(wma_handle->mac_context,