diff options
| author | Naveen Rawat <nrawat@qca.qualcomm.com> | 2016-07-13 15:54:58 -0700 |
|---|---|---|
| committer | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2016-07-28 14:36:57 +0530 |
| commit | 5c3e2b0254698bf19119e2569376363bc1bd0d2b (patch) | |
| tree | 246d395c97b551fe295c4ef4988374d1088f06dd | |
| parent | a0f5c291b22e41cd3671ace27fcee57aca2e3e55 (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.c | 31 | ||||
| -rw-r--r-- | CORE/MAC/inc/sirApi.h | 6 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/nan/nan_datapath.c | 13 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma_nan_datapath.c | 34 | ||||
| -rw-r--r-- | CORE/SME/src/nan/nan_datapath_api.c | 7 |
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: |
