summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNaveen Rawat <nrawat@qca.qualcomm.com>2016-07-13 15:54:58 -0700
committerAnjaneedevi Kapparapu <akappa@codeaurora.org>2016-07-28 14:36:57 +0530
commit5c3e2b0254698bf19119e2569376363bc1bd0d2b (patch)
tree246d395c97b551fe295c4ef4988374d1088f06dd
parenta0f5c291b22e41cd3671ace27fcee57aca2e3e55 (diff)
qcacld-2.0: Delete peer(if needed) in ndp end indication
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
-rw-r--r--CORE/HDD/src/wlan_hdd_nan_datapath.c31
-rw-r--r--CORE/MAC/inc/sirApi.h6
-rw-r--r--CORE/MAC/src/pe/nan/nan_datapath.c13
-rw-r--r--CORE/SERVICES/WMA/wma_nan_datapath.c34
-rw-r--r--CORE/SME/src/nan/nan_datapath_api.c7
5 files changed, 6 insertions, 85 deletions
diff --git a/CORE/HDD/src/wlan_hdd_nan_datapath.c b/CORE/HDD/src/wlan_hdd_nan_datapath.c
index 5a28b31c3cb7..62f97f51cb0a 100644
--- a/CORE/HDD/src/wlan_hdd_nan_datapath.c
+++ b/CORE/HDD/src/wlan_hdd_nan_datapath.c
@@ -1526,10 +1526,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();
@@ -1541,32 +1538,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) {
- hddLog(LOGE,
- FL("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)
- hddLog(LOGE,
- FL("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);
diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h
index d051825dc984..b2f372b9d5a9 100644
--- a/CORE/MAC/inc/sirApi.h
+++ b/CORE/MAC/inc/sirApi.h
@@ -7384,18 +7384,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[];
};
/**
diff --git a/CORE/MAC/src/pe/nan/nan_datapath.c b/CORE/MAC/src/pe/nan/nan_datapath.c
index f47f1319fe34..de83345062e1 100644
--- a/CORE/MAC/src/pe/nan/nan_datapath.c
+++ b/CORE/MAC/src/pe/nan/nan_datapath.c
@@ -493,17 +493,10 @@ VOS_STATUS lim_handle_ndp_event_message(tpAniSirGlobal mac_ctx, tpSirMsgQ 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_INDICATION:
diff --git a/CORE/SERVICES/WMA/wma_nan_datapath.c b/CORE/SERVICES/WMA/wma_nan_datapath.c
index 2295f9f485b5..f0d85b639466 100644
--- a/CORE/SERVICES/WMA/wma_nan_datapath.c
+++ b/CORE/SERVICES/WMA/wma_nan_datapath.c
@@ -655,9 +655,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;
event = (WMI_NDP_END_RSP_EVENTID_param_tlvs *) event_info;
fixed_params = (wmi_ndp_end_rsp_event_fixed_param *)event->fixed_param;
@@ -665,9 +662,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 = vos_mem_malloc(len_end_rsp);
+ end_rsp = vos_mem_malloc(sizeof(*end_rsp));
if (NULL == end_rsp) {
WMA_LOGE("malloc failed");
pe_msg.bodyval = true;
@@ -675,37 +670,12 @@ static int wma_ndp_end_response_event_handler(void *handle,
goto send_ndp_end_rsp;
}
pe_msg.bodyptr = end_rsp;
- vos_mem_zero(end_rsp, len_end_rsp);
+ vos_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;
WMA_LOGD(FL("Sending SIR_HAL_NDP_END_RSP msg to PE"));
diff --git a/CORE/SME/src/nan/nan_datapath_api.c b/CORE/SME/src/nan/nan_datapath_api.c
index 47fb63846fe5..2a28d1a30260 100644
--- a/CORE/SME/src/nan/nan_datapath_api.c
+++ b/CORE/SME/src/nan/nan_datapath_api.c
@@ -672,13 +672,6 @@ void sme_ndp_msg_processor(tpAniSirGlobal mac_ctx, vos_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: