Lines Matching +full:tmu +full:- +full:range

6  * Copyright (C) 1999-2017, Broadcom Corporation
27 * <<Broadcom-WL-IPTag/Open:>>
87 #define FTM_INVALID -1
130 /* proxd ftm config-category definition */
139 char *name; /* cmd-name string as cmdline input */
140 wl_proxd_cmd_t cmdid; /* cmd-id */
164 * definition for id-string mapping.
165 * This is used to map an id (can be cmd-id, tlv-id, ....) to a text-string
166 * for debug-display or cmd-log-display
235 /* wl_proxd_event_type_t, text-string */
246 { WL_PROXD_EVENT_RANGE_REQ, "range request" },
249 { WL_PROXD_EVENT_VS_INITIATOR_RPT, "initiator-report " }, /* rx initiator-rpt */
256 * session-state --> text string mapping
264 { WL_PROXD_SESSION_STATE_USER_WAIT, "user-wait" },
265 { WL_PROXD_SESSION_STATE_SCHED_WAIT, "sched-wait" },
274 * status --> text string mapping
277 /* wl_proxd_status_t, text-string */
303 * time interval unit --> text string mapping
306 /* wl_proxd_tmu_t, text-string */
437 ret = intvl->intvl; in ftm_intvl2nsec()
438 switch (intvl->tmu) { in ftm_intvl2nsec()
443 case WL_PROXD_TMU_PICO_SEC: ret = intvl->intvl / 1000; break; in ftm_intvl2nsec()
453 ret = intvl->intvl; in ftm_intvl2usec()
454 switch (intvl->tmu) { in ftm_intvl2usec()
457 case WL_PROXD_TMU_NANO_SEC: ret = intvl->intvl / 1000; break; in ftm_intvl2usec()
458 case WL_PROXD_TMU_PICO_SEC: ret = intvl->intvl / 1000000; break; in ftm_intvl2usec()
481 if (p_entry->proxd_status == id) { in ftm_get_statusmap_info()
482 return p_entry->rtt_reason; in ftm_get_statusmap_info()
502 if (p_entry->id == id) in ftm_get_strmap_info()
510 * map enum to a text-string for display, this function is called by the following:
513 * For TLV-output log for 'get' commands
514 * ftm_[method|tmu|caps|status|state]_value_to_logstr()
516 * pTable -- point to a 'enum to string' table.
523 return (p_entry->text); in ftm_map_id_to_str()
532 /* ftm cmd-id mapping */
559 * map a ftm cmd-id to a text-string for display
581 /* check if within BCME_xxx error range */ in ftm_status_value_to_logstr()
584 return ftm_bcmerrorstrtable[-bcmerror]; in ftm_status_value_to_logstr()
586 /* otherwise, look for 'proxd ftm status' range */ in ftm_status_value_to_logstr()
590 return p_loginfo->text; in ftm_status_value_to_logstr()
592 /* report for 'out of range' FTM-status error code */ in ftm_status_value_to_logstr()
600 ftm_tmu_value_to_logstr(wl_proxd_tmu_t tmu) in ftm_tmu_value_to_logstr() argument
602 return ftm_map_id_to_str((int32)tmu, in ftm_tmu_value_to_logstr()
609 /* look up 'event-type' from a predefined table */ in ftm_get_event_type_loginfo()
623 * send 'proxd' iovar for all ftm get-related commands
638 __FUNCTION__, p_subcmd_info->cmdid, status)); in rtt_do_get_ioctl()
641 if (p_subcmd_info->cmdid == WL_PROXD_CMD_GET_VERSION) { in rtt_do_get_ioctl()
642 p_subcmd_info->version = ltoh16(p_iovresp->version); in rtt_do_get_ioctl()
643 DHD_RTT(("ftm version: 0x%x\n", ltoh16(p_iovresp->version))); in rtt_do_get_ioctl()
647 tlvs_len = ltoh16(p_iovresp->len) - WL_PROXD_IOV_HDR_SIZE; in rtt_do_get_ioctl()
649 DHD_RTT_ERR(("%s: alert, p_iovresp->len(%d) should not be smaller than %d\n", in rtt_do_get_ioctl()
650 __FUNCTION__, ltoh16(p_iovresp->len), (int) WL_PROXD_IOV_HDR_SIZE)); in rtt_do_get_ioctl()
654 if (tlvs_len > 0 && p_subcmd_info->handler) { in rtt_do_get_ioctl()
656 status = bcm_unpack_xtlv_buf(p_proxd_iov, (uint8 *)p_iovresp->tlvs, in rtt_do_get_ioctl()
657 tlvs_len, BCM_XTLV_OPTION_ALIGN32, p_subcmd_info->handler); in rtt_do_get_ioctl()
674 /* calculate the whole buffer size, including one reserve-tlv entry in the header */ in rtt_alloc_getset_buf()
683 /* setup proxd-FTM-method iovar header */ in rtt_alloc_getset_buf()
684 p_proxd_iov->version = htol16(WL_PROXD_API_VERSION); in rtt_alloc_getset_buf()
685 p_proxd_iov->len = htol16(proxd_iovsize); /* caller may adjust it based on #of TLVs */ in rtt_alloc_getset_buf()
686 p_proxd_iov->cmd = htol16(cmdid); in rtt_alloc_getset_buf()
687 p_proxd_iov->method = htol16(method); in rtt_alloc_getset_buf()
688 p_proxd_iov->sid = htol16(session_id); in rtt_alloc_getset_buf()
690 /* initialize the reserved/dummy-TLV in iovar header */ in rtt_alloc_getset_buf()
691 p_tlv = p_proxd_iov->tlvs; in rtt_alloc_getset_buf()
692 p_tlv->id = htol16(WL_PROXD_TLV_ID_NONE); in rtt_alloc_getset_buf()
693 p_tlv->len = htol16(0); in rtt_alloc_getset_buf()
710 __FUNCTION__, method, session_id, p_subcmd_info->cmdid, in dhd_rtt_common_get_handler()
711 ftm_cmdid_to_str(p_subcmd_info->cmdid))); in dhd_rtt_common_get_handler()
714 p_proxd_iov = rtt_alloc_getset_buf(method, session_id, p_subcmd_info->cmdid, in dhd_rtt_common_get_handler()
730 * common handler for set-related proxd method commands which require no TLV as input
731 * wl proxd ftm [session-id] <set-subcmd>
733 * wl proxd ftm enable -- to enable ftm
734 * wl proxd ftm disable -- to disable ftm
735 * wl proxd ftm <session-id> start -- to start a specified session
736 * wl proxd ftm <session-id> stop -- to cancel a specified session;
738 * wl proxd ftm <session-id> delete -- to delete a specified session
739 * wl proxd ftm [<session-id>] clear-counters -- to clear counters
740 * wl proxd ftm <session-id> burst-request -- on initiator: to send burst request;
742 * wl proxd ftm <session-id> collect
755 __FUNCTION__, method, session_id, p_subcmd_info->cmdid, in dhd_rtt_common_set_handler()
756 ftm_cmdid_to_str(p_subcmd_info->cmdid))); in dhd_rtt_common_set_handler()
761 p_proxd_iov = rtt_alloc_getset_buf(method, session_id, p_subcmd_info->cmdid, in dhd_rtt_common_set_handler()
766 /* no TLV to pack, simply issue a set-proxd iovar */ in dhd_rtt_common_set_handler()
816 p_collect_data_v1->H_RX[i] = ltoh32_ua(&p_collect_data_v1->H_RX[i]); in rtt_collect_event_data_display()
817 DHD_RTT(("\t%u\n", p_collect_data_v1->H_RX[i])); in rtt_collect_event_data_display()
822 p_collect_data_v1->H_LB[i] = ltoh32_ua(&p_collect_data_v1->H_LB[i]); in rtt_collect_event_data_display()
823 DHD_RTT(("\t%u\n", p_collect_data_v1->H_LB[i])); in rtt_collect_event_data_display()
828 DHD_RTT(("\t%u\n", p_collect_data_v1->ri_rr[i])); in rtt_collect_event_data_display()
830 p_collect_data_v1->phy_err_mask = ltoh32_ua(&p_collect_data_v1->phy_err_mask); in rtt_collect_event_data_display()
831 DHD_RTT(("\tphy_err_mask=0x%x\n", p_collect_data_v1->phy_err_mask)); in rtt_collect_event_data_display()
838 p_collect_data_v2->H_RX[i] = ltoh32_ua(&p_collect_data_v2->H_RX[i]); in rtt_collect_event_data_display()
839 DHD_RTT(("\t%u\n", p_collect_data_v2->H_RX[i])); in rtt_collect_event_data_display()
844 p_collect_data_v2->H_LB[i] = ltoh32_ua(&p_collect_data_v2->H_LB[i]); in rtt_collect_event_data_display()
845 DHD_RTT(("\t%u\n", p_collect_data_v2->H_LB[i])); in rtt_collect_event_data_display()
850 DHD_RTT(("\t%u\n", p_collect_data_v2->ri_rr[i])); in rtt_collect_event_data_display()
852 p_collect_data_v2->phy_err_mask = ltoh32_ua(&p_collect_data_v2->phy_err_mask); in rtt_collect_event_data_display()
853 DHD_RTT(("\tphy_err_mask=0x%x\n", p_collect_data_v2->phy_err_mask)); in rtt_collect_event_data_display()
858 switch (p_collect_data_v3->version) { in rtt_collect_event_data_display()
860 if (p_collect_data_v3->length != in rtt_collect_event_data_display()
861 (len - OFFSETOF(wl_proxd_collect_event_data_v3_t, H_LB))) { in rtt_collect_event_data_display()
867 p_collect_data_v3->H_RX[i] = in rtt_collect_event_data_display()
868 ltoh32_ua(&p_collect_data_v3->H_RX[i]); in rtt_collect_event_data_display()
869 DHD_RTT(("\t%u\n", p_collect_data_v3->H_RX[i])); in rtt_collect_event_data_display()
874 p_collect_data_v3->H_LB[i] = in rtt_collect_event_data_display()
875 ltoh32_ua(&p_collect_data_v3->H_LB[i]); in rtt_collect_event_data_display()
876 DHD_RTT(("\t%u\n", p_collect_data_v3->H_LB[i])); in rtt_collect_event_data_display()
881 DHD_RTT(("\t%u\n", p_collect_data_v3->ri_rr[i])); in rtt_collect_event_data_display()
883 p_collect_data_v3->phy_err_mask = in rtt_collect_event_data_display()
884 ltoh32_ua(&p_collect_data_v3->phy_err_mask); in rtt_collect_event_data_display()
885 DHD_RTT(("\tphy_err_mask=0x%x\n", p_collect_data_v3->phy_err_mask)); in rtt_collect_event_data_display()
907 if (r_v2->version == WL_PROXD_RTT_RESULT_VERSION_2) { in rtt_result_ver()
937 len -= nchar; in rtt_prhex()
942 len -= nchar; in rtt_prhex()
992 p_data_info->sid = ltoh16_ua(&p_data_info->sid); in rtt_unpack_xtlv_cbfn()
993 p_data_info->state = ltoh16_ua(&p_data_info->state); in rtt_unpack_xtlv_cbfn()
994 p_data_info->status = ltoh32_ua(&p_data_info->status); in rtt_unpack_xtlv_cbfn()
995 p_data_info->burst_num = ltoh16_ua(&p_data_info->burst_num); in rtt_unpack_xtlv_cbfn()
997 p_data_info->sid, p_data_info->state, in rtt_unpack_xtlv_cbfn()
998 p_data_info->status, p_data_info->burst_num)); in rtt_unpack_xtlv_cbfn()
1048 new_mask = p_option_info->flags; in rtt_handle_config_options()
1051 if (p_option_info->enable) { in rtt_handle_config_options()
1097 switch (p_config_param_info->tlvid) { in rtt_handle_config_general()
1101 p_src_data = &p_config_param_info->data8; in rtt_handle_config_general()
1107 p_src_data = &p_config_param_info->data16; in rtt_handle_config_general()
1114 p_src_data = &p_config_param_info->data32; in rtt_handle_config_general()
1117 case WL_PROXD_TLV_ID_CHANSPEC: /* chanspec_t --> 32bit */ in rtt_handle_config_general()
1118 chanspec = p_config_param_info->chanspec; in rtt_handle_config_general()
1125 p_src_data = &p_config_param_info->mac_addr; in rtt_handle_config_general()
1133 p_src_data = &p_config_param_info->data_intvl; in rtt_handle_config_general()
1142 __FUNCTION__, p_config_param_info->tlvid)); in rtt_handle_config_general()
1147 p_config_param_info->tlvid, src_data_size, (uint8 *)p_src_data, in rtt_handle_config_general()
1198 struct wiphy *wiphy = wdev->wiphy; in dhd_rtt_delete_nan_session()
1205 * is nan-peer. Based on this we will handle the SESSION_END
1206 * event. For nan-peer FTM_SESSION_END event is ignored and handled in
1207 * nan-ranging-cancel or nan-ranging-end event.
1215 struct wiphy *wiphy = wdev->wiphy; in dhd_rtt_is_nan_peer()
1220 if (cfg->nan_enable == FALSE || ETHER_ISNULLADDR(peer_mac)) { in dhd_rtt_is_nan_peer()
1244 struct wiphy *wiphy = wdev->wiphy; in dhd_rtt_nan_start_session()
1259 if (!cfg->nan_enable) { /* If nan is not enabled report error */ in dhd_rtt_nan_start_session()
1274 &rtt_target->addr, NAN_RANGING_ROLE_INITIATOR); in dhd_rtt_nan_start_session()
1280 DHD_RTT(("Trigger nan based range request\n")); in dhd_rtt_nan_start_session()
1286 ranging_inst->range_type = RTT_TYPE_NAN_DIRECTED; in dhd_rtt_nan_start_session()
1287 ranging_inst->range_role = NAN_RANGING_ROLE_INITIATOR; in dhd_rtt_nan_start_session()
1289 schedule_delayed_work(&rtt_status->proxd_timeout, in dhd_rtt_nan_start_session()
1294 dhd_rtt_handle_nan_rtt_session_end(dhd, &rtt_target->addr); in dhd_rtt_nan_start_session()
1332 bufsize = proxd_iovsize - WL_PROXD_IOV_HDR_SIZE; /* adjust available size for TLVs */ in dhd_rtt_ftm_config()
1333 p_tlv = &p_proxd_iov->tlvs[0]; in dhd_rtt_ftm_config()
1345 all_tlvsize = (bufsize - buf_space_left); in dhd_rtt_ftm_config()
1346 p_proxd_iov->len = htol16(all_tlvsize + WL_PROXD_IOV_HDR_SIZE); in dhd_rtt_ftm_config()
1403 bw = -1; in dhd_rtt_convert_to_chspec()
1413 return -1; in dhd_rtt_idx_to_burst_duration()
1434 if (!HAS_11MC_CAP(rtt_status->rtt_capa.proto)) { in dhd_rtt_set_cfg()
1442 if (params->rtt_target_cnt > 0) { in dhd_rtt_set_cfg()
1455 mutex_lock(&rtt_status->rtt_mutex); in dhd_rtt_set_cfg()
1456 if (rtt_status->status != RTT_STOPPED) { in dhd_rtt_set_cfg()
1461 memset(rtt_status->rtt_config.target_info, 0, TARGET_INFO_SIZE(RTT_MAX_TARGET_CNT)); in dhd_rtt_set_cfg()
1462 rtt_status->rtt_config.rtt_target_cnt = params->rtt_target_cnt; in dhd_rtt_set_cfg()
1463 memcpy(rtt_status->rtt_config.target_info, in dhd_rtt_set_cfg()
1464 params->target_info, TARGET_INFO_SIZE(params->rtt_target_cnt)); in dhd_rtt_set_cfg()
1465 rtt_status->status = RTT_STARTED; in dhd_rtt_set_cfg()
1466 DHD_RTT_MEM(("dhd_rtt_set_cfg: RTT Started, target_cnt = %d\n", params->rtt_target_cnt)); in dhd_rtt_set_cfg()
1469 for (idx = rtt_status->cur_idx; idx < rtt_status->rtt_config.rtt_target_cnt; idx++) { in dhd_rtt_set_cfg()
1471 if (rtt_status->rtt_config.target_info[idx].disable) { in dhd_rtt_set_cfg()
1475 rtt_status->cur_idx = idx; in dhd_rtt_set_cfg()
1479 if (idx < rtt_status->rtt_config.rtt_target_cnt) { in dhd_rtt_set_cfg()
1480 DHD_RTT(("rtt_status->cur_idx : %d\n", rtt_status->cur_idx)); in dhd_rtt_set_cfg()
1481 rtt_status->rtt_sched_reason = RTT_SCHED_HOST_TRIGGER; in dhd_rtt_set_cfg()
1482 schedule_work(&rtt_status->work); in dhd_rtt_set_cfg()
1485 mutex_unlock(&rtt_status->rtt_mutex); in dhd_rtt_set_cfg()
1489 #define GEOFENCE_RTT_LOCK(rtt_status) mutex_lock(&(rtt_status)->geofence_mutex)
1490 #define GEOFENCE_RTT_UNLOCK(rtt_status) mutex_unlock(&(rtt_status)->geofence_mutex)
1502 rtt_status->geofence_cfg.role_concurr_state = state; in dhd_rtt_set_role_concurrency_state()
1514 return rtt_status->geofence_cfg.role_concurr_state; in dhd_rtt_get_role_concurrency_state()
1524 return rtt_status->geofence_cfg.geofence_target_cnt; in dhd_rtt_get_geofence_target_cnt()
1536 rtt_status->geofence_cfg.rtt_in_progress = state; in dhd_rtt_set_geofence_rtt_state()
1550 return rtt_status->geofence_cfg.rtt_in_progress; in dhd_rtt_get_geofence_rtt_state()
1564 if (rtt_status->geofence_cfg.geofence_target_cnt) { in dhd_rtt_get_geofence_target_head()
1565 head = &rtt_status->geofence_cfg.geofence_target_info[0]; in dhd_rtt_get_geofence_target_head()
1581 target_cnt = rtt_status->geofence_cfg.geofence_target_cnt; in dhd_rtt_get_geofence_cur_target_idx()
1586 cur_idx = rtt_status->geofence_cfg.cur_target_idx; in dhd_rtt_get_geofence_cur_target_idx()
1602 if (rtt_status->geofence_cfg.geofence_target_cnt == 0) { in dhd_rtt_move_geofence_cur_target_idx_to_next()
1604 rtt_status->geofence_cfg.cur_target_idx = in dhd_rtt_move_geofence_cur_target_idx_to_next()
1607 if (delayed_work_pending(&rtt_status->rtt_retry_timer)) { in dhd_rtt_move_geofence_cur_target_idx_to_next()
1608 cancel_delayed_work(&rtt_status->rtt_retry_timer); in dhd_rtt_move_geofence_cur_target_idx_to_next()
1612 rtt_status->geofence_cfg.cur_target_idx++; in dhd_rtt_move_geofence_cur_target_idx_to_next()
1614 if (rtt_status->geofence_cfg.cur_target_idx >= in dhd_rtt_move_geofence_cur_target_idx_to_next()
1615 rtt_status->geofence_cfg.geofence_target_cnt) { in dhd_rtt_move_geofence_cur_target_idx_to_next()
1617 rtt_status->geofence_cfg.cur_target_idx = 0; in dhd_rtt_move_geofence_cur_target_idx_to_next()
1635 cur_target = &rtt_status->geofence_cfg.geofence_target_info[cur_idx]; in dhd_rtt_get_geofence_current_target()
1656 target_cnt = rtt_status->geofence_cfg.geofence_target_cnt; in dhd_rtt_get_geofence_target()
1657 geofence_target_info = rtt_status->geofence_cfg.geofence_target_info; in dhd_rtt_get_geofence_target()
1693 geofence_target_info = dhd_rtt_get_geofence_target(dhd, &target->peer_addr, &index); in dhd_rtt_add_geofence_target()
1700 geofence_target_cnt = rtt_status->geofence_cfg.geofence_target_cnt; in dhd_rtt_add_geofence_target()
1708 geofence_target_info = rtt_status->geofence_cfg.geofence_target_info; in dhd_rtt_add_geofence_target()
1714 rtt_status->geofence_cfg.geofence_target_cnt++; in dhd_rtt_add_geofence_target()
1715 if (rtt_status->geofence_cfg.geofence_target_cnt == 1) { in dhd_rtt_add_geofence_target()
1717 rtt_status->geofence_cfg.cur_target_idx = 0; in dhd_rtt_add_geofence_target()
1769 rtt_status->geofence_cfg.geofence_target_cnt--; in dhd_rtt_remove_geofence_target()
1770 if ((rtt_status->geofence_cfg.geofence_target_cnt == 0) || in dhd_rtt_remove_geofence_target()
1771 (index == rtt_status->geofence_cfg.cur_target_idx)) { in dhd_rtt_remove_geofence_target()
1774 } else if (index < rtt_status->geofence_cfg.cur_target_idx) { in dhd_rtt_remove_geofence_target()
1776 rtt_status->geofence_cfg.cur_target_idx--; in dhd_rtt_remove_geofence_target()
1796 memset_s(&rtt_status->geofence_cfg, sizeof(rtt_geofence_cfg_t), in dhd_rtt_delete_geofence_target_list()
1816 if ((cfg->nan_init_state == FALSE) || in dhd_rtt_sched_geofencing_target()
1817 (cfg->nan_enable == FALSE)) { in dhd_rtt_sched_geofencing_target()
1825 rtt_status->rtt_sched_reason)); in dhd_rtt_sched_geofencing_target()
1842 &geofence_target_info->peer_addr); in dhd_rtt_sched_geofencing_target()
1851 &geofence_target_info->peer_addr); in dhd_rtt_sched_geofencing_target()
1882 &geofence_target->peer_addr, NAN_RANGING_ROLE_INITIATOR); in dhd_rtt_retry()
1904 #pragma GCC diagnostic ignored "-Wcast-qual" in dhd_rtt_retry_work()
1911 dhd = rtt_status->dhd; in dhd_rtt_retry_work()
1920 mutex_lock(&rtt_status->rtt_mutex); in dhd_rtt_retry_work()
1922 mutex_unlock(&rtt_status->rtt_mutex); in dhd_rtt_retry_work()
1975 rtt_status->rtt_sched_reason = sched_reason; in dhd_rtt_schedule_rtt_work_thread()
1976 schedule_work(&rtt_status->work); in dhd_rtt_schedule_rtt_work_thread()
1995 if (rtt_status->status == RTT_STOPPED) { in dhd_rtt_stop()
2000 mutex_lock(&rtt_status->rtt_mutex); in dhd_rtt_stop()
2002 for (j = 0; j < rtt_status->rtt_config.rtt_target_cnt; j++) { in dhd_rtt_stop()
2003 if (!bcmp(&mac_list[i], &rtt_status->rtt_config.target_info[j].addr, in dhd_rtt_stop()
2005 rtt_status->rtt_config.target_info[j].disable = TRUE; in dhd_rtt_stop()
2009 if (rtt_status->all_cancel) { in dhd_rtt_stop()
2011 rtt_status->status = RTT_STOPPED; in dhd_rtt_stop()
2014 if (!list_empty(&rtt_status->rtt_results_cache)) { in dhd_rtt_stop()
2018 &rtt_status->rtt_results_cache, list) { in dhd_rtt_stop()
2019 list_del(&entry->list); in dhd_rtt_stop()
2022 &entry->result_list, list) { in dhd_rtt_stop()
2023 list_del(&rtt_result->list); in dhd_rtt_stop()
2032 list_for_each_entry(iter, &rtt_status->noti_fn_list, list) { in dhd_rtt_stop()
2034 iter->noti_fn(iter->ctx, &rtt_status->rtt_results_cache); in dhd_rtt_stop()
2037 INIT_LIST_HEAD(&rtt_status->rtt_results_cache); in dhd_rtt_stop()
2039 rtt_status->rtt_config.rtt_target_cnt = 0; in dhd_rtt_stop()
2040 memset(rtt_status->rtt_config.target_info, 0, in dhd_rtt_stop()
2042 rtt_status->cur_idx = 0; in dhd_rtt_stop()
2044 if (delayed_work_pending(&rtt_status->proxd_timeout)) { in dhd_rtt_stop()
2045 cancel_delayed_work(&rtt_status->proxd_timeout); in dhd_rtt_stop()
2053 mutex_unlock(&rtt_status->rtt_mutex); in dhd_rtt_stop()
2071 struct bcm_cfg80211 *cfg = wiphy_priv(ndev->ieee80211_ptr->wiphy); in dhd_rtt_timeout()
2092 if (dhd->memdump_enabled) { in dhd_rtt_timeout()
2094 dhd->memdump_type = DUMP_TYPE_PROXD_TIMEOUT; in dhd_rtt_timeout()
2100 rtt_target_info = rtt_status->rtt_config.target_info; in dhd_rtt_timeout()
2102 (rtt_status->cur_idx >= rtt_status->rtt_config.rtt_target_cnt)) { in dhd_rtt_timeout()
2105 rtt_target = &rtt_target_info[rtt_status->cur_idx]; in dhd_rtt_timeout()
2106 WL_ERR(("Proxd timer expired for Target: "MACDBG" \n", MAC2STRDBG(&rtt_target->addr))); in dhd_rtt_timeout()
2108 if (rtt_target->peer == RTT_PEER_NAN) { in dhd_rtt_timeout()
2109 ranging_inst = wl_cfgnan_check_for_ranging(cfg, &rtt_target->addr); in dhd_rtt_timeout()
2113 ret = wl_cfgnan_cancel_ranging(ndev, cfg, ranging_inst->range_id, in dhd_rtt_timeout()
2116 WL_ERR(("%s:nan range cancel failed ret = %d status = %d\n", in dhd_rtt_timeout()
2125 dhd_rtt_create_failure_result(rtt_status, &rtt_target->addr); in dhd_rtt_timeout()
2140 #pragma GCC diagnostic ignored "-Wcast-qual" in dhd_rtt_timeout_work()
2147 dhd = rtt_status->dhd; in dhd_rtt_timeout_work()
2152 mutex_lock(&rtt_status->rtt_mutex); in dhd_rtt_timeout_work()
2154 mutex_unlock(&rtt_status->rtt_mutex); in dhd_rtt_timeout_work()
2189 if (rtt_status->cur_idx >= rtt_status->rtt_config.rtt_target_cnt) { in dhd_rtt_start()
2192 DHD_RTT(("%s : idx %d is out of range\n", __FUNCTION__, rtt_status->cur_idx)); in dhd_rtt_start()
2193 if (rtt_status->flags == WL_PROXD_SESSION_FLAG_TARGET) { in dhd_rtt_start()
2201 rtt_status->pm = PM_OFF; in dhd_rtt_start()
2202 err = wldev_ioctl_get(dev, WLC_GET_PM, &rtt_status->pm, sizeof(rtt_status->pm)); in dhd_rtt_start()
2209 rtt_status->pm_restore = FALSE; in dhd_rtt_start()
2211 rtt_status->pm_restore = TRUE; in dhd_rtt_start()
2215 mutex_lock(&rtt_status->rtt_mutex); in dhd_rtt_start()
2217 rtt_target = &rtt_status->rtt_config.target_info[rtt_status->cur_idx]; in dhd_rtt_start()
2218 mutex_unlock(&rtt_status->rtt_mutex); in dhd_rtt_start()
2221 if (ETHER_ISNULLADDR(rtt_target->addr.octet)) { in dhd_rtt_start()
2229 rtt_invalid_reason = dhd_rtt_invalid_states(dev, &rtt_target->addr); in dhd_rtt_start()
2238 if (rtt_target->peer == RTT_PEER_NAN) { in dhd_rtt_start()
2240 rtt_status->status = RTT_ENABLED; in dhd_rtt_start()
2263 rtt_status->status = RTT_ENABLED; in dhd_rtt_start()
2276 if (dhd->wlc_ver_major < RTT_IOV_CUR_ETH_OBSOLETE) { in dhd_rtt_start()
2284 memcpy(rtt_target->local_addr.octet, ioctl_buf, ETHER_ADDR_LEN); in dhd_rtt_start()
2287 if (!ETHER_ISNULLADDR(rtt_target->local_addr.octet)) { in dhd_rtt_start()
2288 ftm_params[ftm_param_cnt].mac_addr = rtt_target->local_addr; in dhd_rtt_start()
2290 bcm_ether_ntoa(&rtt_target->local_addr, eabuf); in dhd_rtt_start()
2295 if (!ETHER_ISNULLADDR(rtt_target->addr.octet)) { in dhd_rtt_start()
2296 ftm_params[ftm_param_cnt].mac_addr = rtt_target->addr; in dhd_rtt_start()
2298 bcm_ether_ntoa(&rtt_target->addr, eabuf); in dhd_rtt_start()
2302 if (rtt_target->chanspec) { in dhd_rtt_start()
2303 ftm_params[ftm_param_cnt].chanspec = htol32((uint32)rtt_target->chanspec); in dhd_rtt_start()
2305 wf_chspec_ntoa(rtt_target->chanspec, chanbuf); in dhd_rtt_start()
2308 /* num-burst */ in dhd_rtt_start()
2309 if (rtt_target->num_burst) { in dhd_rtt_start()
2310 ftm_params[ftm_param_cnt].data16 = htol16(rtt_target->num_burst); in dhd_rtt_start()
2312 DHD_RTT((">\t num of burst : %d\n", rtt_target->num_burst)); in dhd_rtt_start()
2315 rtt_target->num_frames_per_burst = FTM_DEFAULT_CNT_80M; in dhd_rtt_start()
2316 if (CHSPEC_IS80(rtt_target->chanspec)) { in dhd_rtt_start()
2317 rtt_target->num_frames_per_burst = FTM_DEFAULT_CNT_80M; in dhd_rtt_start()
2318 } else if (CHSPEC_IS40(rtt_target->chanspec)) { in dhd_rtt_start()
2319 rtt_target->num_frames_per_burst = FTM_DEFAULT_CNT_40M; in dhd_rtt_start()
2320 } else if (CHSPEC_IS20(rtt_target->chanspec)) { in dhd_rtt_start()
2321 rtt_target->num_frames_per_burst = FTM_DEFAULT_CNT_20M; in dhd_rtt_start()
2323 ftm_params[ftm_param_cnt].data16 = htol16(rtt_target->num_frames_per_burst); in dhd_rtt_start()
2325 DHD_RTT((">\t number of frame per burst : %d\n", rtt_target->num_frames_per_burst)); in dhd_rtt_start()
2328 if (rtt_target->num_retries_per_ftm) { in dhd_rtt_start()
2329 ftm_params[ftm_param_cnt].data8 = rtt_target->num_retries_per_ftm; in dhd_rtt_start()
2331 DHD_RTT((">\t retry count of FTM : %d\n", rtt_target->num_retries_per_ftm)); in dhd_rtt_start()
2334 if (rtt_target->num_retries_per_ftmr) { in dhd_rtt_start()
2335 ftm_params[ftm_param_cnt].data8 = rtt_target->num_retries_per_ftmr; in dhd_rtt_start()
2337 DHD_RTT((">\t retry count of FTM Req : %d\n", rtt_target->num_retries_per_ftmr)); in dhd_rtt_start()
2339 /* burst-period */ in dhd_rtt_start()
2340 if (rtt_target->burst_period) { in dhd_rtt_start()
2342 htol32(rtt_target->burst_period); /* ms */ in dhd_rtt_start()
2343 ftm_params[ftm_param_cnt].data_intvl.tmu = WL_PROXD_TMU_MILLI_SEC; in dhd_rtt_start()
2345 DHD_RTT((">\t burst period : %d ms\n", rtt_target->burst_period)); in dhd_rtt_start()
2351 /* burst-duration */ in dhd_rtt_start()
2352 rtt_target->burst_duration = FTM_MAX_BURST_DUR_TMO_MS; in dhd_rtt_start()
2353 if (rtt_target->burst_duration) { in dhd_rtt_start()
2355 htol32(rtt_target->burst_duration); /* ms */ in dhd_rtt_start()
2356 ftm_params[ftm_param_cnt].data_intvl.tmu = WL_PROXD_TMU_MILLI_SEC; in dhd_rtt_start()
2359 rtt_target->burst_duration)); in dhd_rtt_start()
2361 /* burst-timeout */ in dhd_rtt_start()
2362 rtt_target->burst_timeout = FTM_MAX_BURST_DUR_TMO_MS; in dhd_rtt_start()
2363 if (rtt_target->burst_timeout) { in dhd_rtt_start()
2365 htol32(rtt_target->burst_timeout); /* ms */ in dhd_rtt_start()
2366 ftm_params[ftm_param_cnt].data_intvl.tmu = WL_PROXD_TMU_MILLI_SEC; in dhd_rtt_start()
2369 rtt_target->burst_timeout)); in dhd_rtt_start()
2372 * For nan-rtt config happens from firmware in dhd_rtt_start()
2378 if (rtt_target->bw && rtt_target->preamble) { in dhd_rtt_start()
2382 switch (rtt_target->preamble) { in dhd_rtt_start()
2400 rtt_target->preamble)); in dhd_rtt_start()
2404 switch (rtt_target->bw) { in dhd_rtt_start()
2415 DHD_RTT(("doesn't support this BW : %d\n", rtt_target->bw)); in dhd_rtt_start()
2437 schedule_delayed_work(&rtt_status->proxd_timeout, in dhd_rtt_start()
2460 rtt_status->rtt_sched_reason)); in dhd_rtt_start()
2461 rtt_status->status = RTT_STOPPED; in dhd_rtt_start()
2464 if (rtt_status->pm_restore) { in dhd_rtt_start()
2467 rtt_status->pm_restore, __FUNCTION__)); in dhd_rtt_start()
2472 rtt_status->pm_restore = FALSE; in dhd_rtt_start()
2493 list_for_each_entry(iter, &rtt_status->noti_fn_list, list) { in dhd_rtt_register_noti_callback()
2495 if (iter->noti_fn == noti_fn) { in dhd_rtt_register_noti_callback()
2501 err = -ENOMEM; in dhd_rtt_register_noti_callback()
2504 cb->noti_fn = noti_fn; in dhd_rtt_register_noti_callback()
2505 cb->ctx = ctx; in dhd_rtt_register_noti_callback()
2506 list_add(&cb->list, &rtt_status->noti_fn_list); in dhd_rtt_register_noti_callback()
2524 list_for_each_entry(iter, &rtt_status->noti_fn_list, list) { in dhd_rtt_unregister_noti_callback()
2526 if (iter->noti_fn == noti_fn) { in dhd_rtt_unregister_noti_callback()
2528 list_del(&cb->list); in dhd_rtt_unregister_noti_callback()
2613 rtt_report_t *rtt_report = &(rtt_result->report); in dhd_rtt_convert_results_to_host_v1()
2632 flags = ltoh16_ua(&p_data_info->flags); in dhd_rtt_convert_results_to_host_v1()
2635 session_state = ltoh16_ua(&p_data_info->state); in dhd_rtt_convert_results_to_host_v1()
2636 proxd_status = ltoh32_ua(&p_data_info->status); in dhd_rtt_convert_results_to_host_v1()
2637 bcm_ether_ntoa((&(p_data_info->peer)), eabuf); in dhd_rtt_convert_results_to_host_v1()
2647 avg_dist = ltoh32_ua(&p_data_info->avg_dist); in dhd_rtt_convert_results_to_host_v1()
2649 DHD_RTT((">\tavg_dist=-1m, burst_num=%d, valid_measure_cnt=%d\n", in dhd_rtt_convert_results_to_host_v1()
2650 ltoh16_ua(&p_data_info->burst_num), in dhd_rtt_convert_results_to_host_v1()
2651 p_data_info->num_valid_rtt)); /* in a session */ in dhd_rtt_convert_results_to_host_v1()
2658 ltoh16_ua(&p_data_info->burst_num), in dhd_rtt_convert_results_to_host_v1()
2659 p_data_info->num_valid_rtt, in dhd_rtt_convert_results_to_host_v1()
2660 p_data_info->num_ftm)); /* in a session */ in dhd_rtt_convert_results_to_host_v1()
2663 p_sample_avg = &p_data_info->avg_rtt; in dhd_rtt_convert_results_to_host_v1()
2664 ftm_tmu_value_to_logstr(ltoh16_ua(&p_sample_avg->rtt.tmu)); in dhd_rtt_convert_results_to_host_v1()
2666 (int16) ltoh16_ua(&p_sample_avg->rssi), in dhd_rtt_convert_results_to_host_v1()
2667 ltoh32_ua(&p_sample_avg->rtt.intvl), in dhd_rtt_convert_results_to_host_v1()
2668 ftm_tmu_value_to_logstr(ltoh16_ua(&p_sample_avg->rtt.tmu)), in dhd_rtt_convert_results_to_host_v1()
2669 ltoh16_ua(&p_data_info->sd_rtt)/10, ltoh16_ua(&p_data_info->sd_rtt)%10, in dhd_rtt_convert_results_to_host_v1()
2670 ltoh32_ua(&p_sample_avg->ratespec))); in dhd_rtt_convert_results_to_host_v1()
2673 rtt_report->addr = p_data_info->peer; in dhd_rtt_convert_results_to_host_v1()
2675 rtt_report->burst_num = ltoh16_ua(&p_data_info->burst_num); in dhd_rtt_convert_results_to_host_v1()
2677 rtt_report->success_num = p_data_info->num_valid_rtt; in dhd_rtt_convert_results_to_host_v1()
2679 rtt_report->num_per_burst_peer = p_data_info->num_ftm; in dhd_rtt_convert_results_to_host_v1()
2680 rtt_report->negotiated_burst_num = p_data_info->num_ftm; in dhd_rtt_convert_results_to_host_v1()
2682 rtt_report->status = ftm_get_statusmap_info(proxd_status, in dhd_rtt_convert_results_to_host_v1()
2686 rtt_report->rssi = ABS((wl_proxd_rssi_t)ltoh16_ua(&p_data_info->avg_rtt.rssi)) * 2; in dhd_rtt_convert_results_to_host_v1()
2689 ratespec = ltoh32_ua(&p_data_info->avg_rtt.ratespec); in dhd_rtt_convert_results_to_host_v1()
2690 rtt_report->rx_rate = dhd_rtt_convert_rate_to_host(ratespec); in dhd_rtt_convert_results_to_host_v1()
2693 rtt_report->tx_rate = dhd_rtt_convert_rate_to_host(0x2010010); in dhd_rtt_convert_results_to_host_v1()
2695 rtt_report->tx_rate = dhd_rtt_convert_rate_to_host(0xc); in dhd_rtt_convert_results_to_host_v1()
2698 rtt.tmu = ltoh16_ua(&p_data_info->avg_rtt.rtt.tmu); in dhd_rtt_convert_results_to_host_v1()
2699 rtt.intvl = ltoh32_ua(&p_data_info->avg_rtt.rtt.intvl); in dhd_rtt_convert_results_to_host_v1()
2700 rtt_report->rtt = (wifi_timespan)FTM_INTVL2NSEC(&rtt) * 1000; /* nano -> pico seconds */ in dhd_rtt_convert_results_to_host_v1()
2701 rtt_report->rtt_sd = ltoh16_ua(&p_data_info->sd_rtt); /* nano -> 0.1 nano */ in dhd_rtt_convert_results_to_host_v1()
2702 DHD_RTT(("rtt_report->rtt : %llu\n", rtt_report->rtt)); in dhd_rtt_convert_results_to_host_v1()
2703 DHD_RTT(("rtt_report->rssi : %d (0.5db)\n", rtt_report->rssi)); in dhd_rtt_convert_results_to_host_v1()
2707 rtt_report->distance = (avg_dist >> 8) * 1000; /* meter -> mm */ in dhd_rtt_convert_results_to_host_v1()
2708 rtt_report->distance += (avg_dist & 0xff) * 1000 / 256; in dhd_rtt_convert_results_to_host_v1()
2710 rtt_report->distance = FTM_INVALID; in dhd_rtt_convert_results_to_host_v1()
2716 rtt_report->ts = (uint64)TIMESPEC_TO_US(ts); in dhd_rtt_convert_results_to_host_v1()
2721 p_time.intvl = ltoh32_ua(&p_data_info->u.retry_after.intvl); in dhd_rtt_convert_results_to_host_v1()
2722 p_time.tmu = ltoh16_ua(&p_data_info->u.retry_after.tmu); in dhd_rtt_convert_results_to_host_v1()
2723 rtt_report->retry_after_duration = FTM_INTVL2SEC(&p_time); /* s -> s */ in dhd_rtt_convert_results_to_host_v1()
2725 ltoh32_ua(&p_data_info->u.retry_after.intvl), in dhd_rtt_convert_results_to_host_v1()
2726 ftm_tmu_value_to_logstr(ltoh16_ua(&p_data_info->u.retry_after.tmu)))); in dhd_rtt_convert_results_to_host_v1()
2729 p_time.intvl = ltoh32_ua(&p_data_info->u.retry_after.intvl); in dhd_rtt_convert_results_to_host_v1()
2730 p_time.tmu = ltoh16_ua(&p_data_info->u.retry_after.tmu); in dhd_rtt_convert_results_to_host_v1()
2731 rtt_report->burst_duration = FTM_INTVL2MSEC(&p_time); /* s -> ms */ in dhd_rtt_convert_results_to_host_v1()
2733 ltoh32_ua(&p_data_info->u.burst_duration.intvl), in dhd_rtt_convert_results_to_host_v1()
2734 ftm_tmu_value_to_logstr(ltoh16_ua(&p_data_info->u.burst_duration.tmu)))); in dhd_rtt_convert_results_to_host_v1()
2735 DHD_RTT(("rtt_report->burst_duration : %d\n", rtt_report->burst_duration)); in dhd_rtt_convert_results_to_host_v1()
2739 num_rtt = ltoh16_ua(&p_data_info->num_rtt); in dhd_rtt_convert_results_to_host_v1()
2742 p_sample = &p_data_info->rtt[0]; in dhd_rtt_convert_results_to_host_v1()
2752 num_ftm = p_data_info->num_ftm; in dhd_rtt_convert_results_to_host_v1()
2755 rssi = (wl_proxd_rssi_t) ltoh16_ua(&p_sample->rssi); in dhd_rtt_convert_results_to_host_v1()
2756 snr = (wl_proxd_snr_t) ltoh16_ua(&p_sample->snr); in dhd_rtt_convert_results_to_host_v1()
2757 bitflips = (wl_proxd_bitflips_t) ltoh16_ua(&p_sample->bitflips); in dhd_rtt_convert_results_to_host_v1()
2760 ltoh32_ua(&p_sample->tof_phy_error); in dhd_rtt_convert_results_to_host_v1()
2763 ltoh32_ua(&p_sample->tof_tgt_phy_error); in dhd_rtt_convert_results_to_host_v1()
2766 ltoh16_ua(&p_sample->tof_tgt_snr); in dhd_rtt_convert_results_to_host_v1()
2769 ltoh16_ua(&p_sample->tof_tgt_bitflips); in dhd_rtt_convert_results_to_host_v1()
2770 dist = ltoh32_ua(&p_sample->distance); in dhd_rtt_convert_results_to_host_v1()
2772 rssi = -1; in dhd_rtt_convert_results_to_host_v1()
2784 i, p_sample->id, rssi, snr, in dhd_rtt_convert_results_to_host_v1()
2788 ltoh32_ua(&p_sample->rtt.intvl), in dhd_rtt_convert_results_to_host_v1()
2789 ftm_tmu_value_to_logstr(ltoh16_ua(&p_sample->rtt.tmu)), in dhd_rtt_convert_results_to_host_v1()
2790 ftm_status_value_to_logstr(ltoh32_ua(&p_sample->status)), in dhd_rtt_convert_results_to_host_v1()
2791 ftm_frame_types[i % num_ftm], p_sample->coreid)); in dhd_rtt_convert_results_to_host_v1()
2831 rtt_report_t *rtt_report = &(rtt_result->report); in dhd_rtt_convert_results_to_host_v2()
2851 flags = ltoh16_ua(&p_data_info->flags); in dhd_rtt_convert_results_to_host_v2()
2853 session_state = ltoh16_ua(&p_data_info->state); in dhd_rtt_convert_results_to_host_v2()
2854 proxd_status = ltoh32_ua(&p_data_info->status); in dhd_rtt_convert_results_to_host_v2()
2855 bcm_ether_ntoa((&(p_data_info->peer)), eabuf); in dhd_rtt_convert_results_to_host_v2()
2863 p_data_info->num_meas, p_data_info->num_valid_rtt, in dhd_rtt_convert_results_to_host_v2()
2864 p_data_info->flags)); in dhd_rtt_convert_results_to_host_v2()
2872 avg_dist = ltoh32_ua(&p_data_info->avg_dist); in dhd_rtt_convert_results_to_host_v2()
2874 DHD_RTT((">\tavg_dist=-1m, burst_num=%d, valid_measure_cnt=%d\n", in dhd_rtt_convert_results_to_host_v2()
2875 ltoh16_ua(&p_data_info->burst_num), in dhd_rtt_convert_results_to_host_v2()
2876 p_data_info->num_valid_rtt)); /* in a session */ in dhd_rtt_convert_results_to_host_v2()
2882 ltoh16_ua(&p_data_info->burst_num), in dhd_rtt_convert_results_to_host_v2()
2883 p_data_info->num_valid_rtt, in dhd_rtt_convert_results_to_host_v2()
2884 p_data_info->num_ftm, p_data_info->num_meas, in dhd_rtt_convert_results_to_host_v2()
2885 p_data_info->flags)); /* in a session */ in dhd_rtt_convert_results_to_host_v2()
2887 rtt_result->rtt_detail.num_ota_meas = p_data_info->num_meas; in dhd_rtt_convert_results_to_host_v2()
2888 rtt_result->rtt_detail.result_flags = p_data_info->flags; in dhd_rtt_convert_results_to_host_v2()
2891 p_sample_avg = &p_data_info->rtt[0]; in dhd_rtt_convert_results_to_host_v2()
2892 ftm_tmu_value_to_logstr(ltoh16_ua(&p_sample_avg->rtt.tmu)); in dhd_rtt_convert_results_to_host_v2()
2895 (int16) ltoh16_ua(&p_sample_avg->rssi), in dhd_rtt_convert_results_to_host_v2()
2896 ltoh32_ua(&p_sample_avg->rtt.intvl), in dhd_rtt_convert_results_to_host_v2()
2897 ftm_tmu_value_to_logstr(ltoh16_ua(&p_sample_avg->rtt.tmu)), in dhd_rtt_convert_results_to_host_v2()
2898 ltoh16_ua(&p_data_info->sd_rtt)/10, ltoh16_ua(&p_data_info->sd_rtt)%10, in dhd_rtt_convert_results_to_host_v2()
2899 ltoh32_ua(&p_sample_avg->ratespec), in dhd_rtt_convert_results_to_host_v2()
2900 ltoh32_ua(&p_sample_avg->chanspec))); in dhd_rtt_convert_results_to_host_v2()
2903 rtt_report->addr = p_data_info->peer; in dhd_rtt_convert_results_to_host_v2()
2906 rtt_report->burst_num = ltoh16_ua(&p_data_info->burst_num); in dhd_rtt_convert_results_to_host_v2()
2909 rtt_report->success_num = p_data_info->num_valid_rtt; in dhd_rtt_convert_results_to_host_v2()
2911 /* num-ftm configured */ in dhd_rtt_convert_results_to_host_v2()
2912 rtt_report->ftm_num = p_data_info->num_ftm; in dhd_rtt_convert_results_to_host_v2()
2915 rtt_report->num_per_burst_peer = p_data_info->num_ftm; in dhd_rtt_convert_results_to_host_v2()
2916 rtt_report->negotiated_burst_num = p_data_info->num_ftm; in dhd_rtt_convert_results_to_host_v2()
2919 rtt_report->status = ftm_get_statusmap_info(proxd_status, in dhd_rtt_convert_results_to_host_v2()
2930 rtt_report->success_num) { in dhd_rtt_convert_results_to_host_v2()
2931 rtt_report->status = RTT_STATUS_SUCCESS; in dhd_rtt_convert_results_to_host_v2()
2935 rtt_report->rssi = ABS((wl_proxd_rssi_t)ltoh16_ua(&p_sample_avg->rssi)) * 2; in dhd_rtt_convert_results_to_host_v2()
2938 ratespec = ltoh32_ua(&p_sample_avg->ratespec); in dhd_rtt_convert_results_to_host_v2()
2939 rtt_report->rx_rate = dhd_rtt_convert_rate_to_host(ratespec); in dhd_rtt_convert_results_to_host_v2()
2943 rtt_report->tx_rate = dhd_rtt_convert_rate_to_host(0x2010010); in dhd_rtt_convert_results_to_host_v2()
2945 rtt_report->tx_rate = dhd_rtt_convert_rate_to_host(0xc); in dhd_rtt_convert_results_to_host_v2()
2949 rtt.tmu = ltoh16_ua(&p_sample_avg->rtt.tmu); in dhd_rtt_convert_results_to_host_v2()
2950 rtt.intvl = ltoh32_ua(&p_sample_avg->rtt.intvl); in dhd_rtt_convert_results_to_host_v2()
2951 rtt_report->rtt = (wifi_timespan)FTM_INTVL2NSEC(&rtt) * 1000; /* nano -> pico seconds */ in dhd_rtt_convert_results_to_host_v2()
2952 rtt_report->rtt_sd = ltoh16_ua(&p_data_info->sd_rtt); /* nano -> 0.1 nano */ in dhd_rtt_convert_results_to_host_v2()
2953 DHD_RTT(("rtt_report->rtt : %llu\n", rtt_report->rtt)); in dhd_rtt_convert_results_to_host_v2()
2954 DHD_RTT(("rtt_report->rssi : %d (0.5db)\n", rtt_report->rssi)); in dhd_rtt_convert_results_to_host_v2()
2958 rtt_report->distance = (avg_dist >> 8) * 1000; /* meter -> mm */ in dhd_rtt_convert_results_to_host_v2()
2959 rtt_report->distance += (avg_dist & 0xff) * 1000 / 256; in dhd_rtt_convert_results_to_host_v2()
2962 * (0.1 * rtt_sd/2 * 10^-9) * C * 1000 in dhd_rtt_convert_results_to_host_v2()
2964 rtt_report->distance_sd = rtt_report->rtt_sd * 15; /* mm */ in dhd_rtt_convert_results_to_host_v2()
2966 rtt_report->distance = FTM_INVALID; in dhd_rtt_convert_results_to_host_v2()
2972 rtt_report->ts = (uint64)TIMESPEC_TO_US(ts); in dhd_rtt_convert_results_to_host_v2()
2977 p_time.intvl = ltoh32_ua(&p_data_info->u.retry_after.intvl); in dhd_rtt_convert_results_to_host_v2()
2978 p_time.tmu = ltoh16_ua(&p_data_info->u.retry_after.tmu); in dhd_rtt_convert_results_to_host_v2()
2979 rtt_report->retry_after_duration = FTM_INTVL2SEC(&p_time); /* s -> s */ in dhd_rtt_convert_results_to_host_v2()
2981 ltoh32_ua(&p_data_info->u.retry_after.intvl), in dhd_rtt_convert_results_to_host_v2()
2982 ftm_tmu_value_to_logstr(ltoh16_ua(&p_data_info->u.retry_after.tmu)))); in dhd_rtt_convert_results_to_host_v2()
2985 p_time.intvl = ltoh32_ua(&p_data_info->u.retry_after.intvl); in dhd_rtt_convert_results_to_host_v2()
2986 p_time.tmu = ltoh16_ua(&p_data_info->u.retry_after.tmu); in dhd_rtt_convert_results_to_host_v2()
2987 rtt_report->burst_duration = FTM_INTVL2MSEC(&p_time); /* s -> ms */ in dhd_rtt_convert_results_to_host_v2()
2989 ltoh32_ua(&p_data_info->u.burst_duration.intvl), in dhd_rtt_convert_results_to_host_v2()
2990 ftm_tmu_value_to_logstr(ltoh16_ua(&p_data_info->u.burst_duration.tmu)))); in dhd_rtt_convert_results_to_host_v2()
2991 DHD_RTT(("rtt_report->burst_duration : %d\n", rtt_report->burst_duration)); in dhd_rtt_convert_results_to_host_v2()
2994 num_rtt = ltoh16_ua(&p_data_info->num_rtt); in dhd_rtt_convert_results_to_host_v2()
2997 p_sample = &p_data_info->rtt[1]; in dhd_rtt_convert_results_to_host_v2()
3007 num_ftm = p_data_info->num_ftm; in dhd_rtt_convert_results_to_host_v2()
3010 rssi = (wl_proxd_rssi_t) ltoh16_ua(&p_sample->rssi); in dhd_rtt_convert_results_to_host_v2()
3011 snr = (wl_proxd_snr_t) ltoh16_ua(&p_sample->snr); in dhd_rtt_convert_results_to_host_v2()
3012 bitflips = (wl_proxd_bitflips_t) ltoh16_ua(&p_sample->bitflips); in dhd_rtt_convert_results_to_host_v2()
3015 ltoh32_ua(&p_sample->tof_phy_error); in dhd_rtt_convert_results_to_host_v2()
3018 ltoh32_ua(&p_sample->tof_tgt_phy_error); in dhd_rtt_convert_results_to_host_v2()
3021 ltoh16_ua(&p_sample->tof_tgt_snr); in dhd_rtt_convert_results_to_host_v2()
3024 ltoh16_ua(&p_sample->tof_tgt_bitflips); in dhd_rtt_convert_results_to_host_v2()
3025 dist = ltoh32_ua(&p_sample->distance); in dhd_rtt_convert_results_to_host_v2()
3026 chanspec = ltoh32_ua(&p_sample->chanspec); in dhd_rtt_convert_results_to_host_v2()
3028 rssi = -1; in dhd_rtt_convert_results_to_host_v2()
3040 i, p_sample->id, rssi, snr, in dhd_rtt_convert_results_to_host_v2()
3044 ltoh32_ua(&p_sample->rtt.intvl), in dhd_rtt_convert_results_to_host_v2()
3045 ftm_tmu_value_to_logstr(ltoh16_ua(&p_sample->rtt.tmu)), in dhd_rtt_convert_results_to_host_v2()
3046 ftm_status_value_to_logstr(ltoh32_ua(&p_sample->status)), in dhd_rtt_convert_results_to_host_v2()
3047 ftm_frame_types[i % num_ftm], p_sample->coreid, in dhd_rtt_convert_results_to_host_v2()
3060 * @For legacy Nan-RTT , this API will be called when
3061 * we are cancelling the nan-ranging session or on
3062 * nan-ranging-end event.
3076 if (delayed_work_pending(&rtt_status->proxd_timeout)) { in dhd_rtt_handle_rtt_session_end()
3077 cancel_delayed_work(&rtt_status->proxd_timeout); in dhd_rtt_handle_rtt_session_end()
3081 for (idx = (rtt_status->cur_idx + 1); in dhd_rtt_handle_rtt_session_end()
3082 idx < rtt_status->rtt_config.rtt_target_cnt; idx++) { in dhd_rtt_handle_rtt_session_end()
3084 if (rtt_status->rtt_config.target_info[idx].disable) { in dhd_rtt_handle_rtt_session_end()
3088 rtt_status->cur_idx = idx; in dhd_rtt_handle_rtt_session_end()
3092 if (idx < rtt_status->rtt_config.rtt_target_cnt) { in dhd_rtt_handle_rtt_session_end()
3095 schedule_work(&rtt_status->work); in dhd_rtt_handle_rtt_session_end()
3098 rtt_status->status = RTT_STOPPED; in dhd_rtt_handle_rtt_session_end()
3101 list_for_each_entry(iter, &rtt_status->noti_fn_list, list) { in dhd_rtt_handle_rtt_session_end()
3102 iter->noti_fn(iter->ctx, &rtt_status->rtt_results_cache); in dhd_rtt_handle_rtt_session_end()
3105 if (!list_empty(&rtt_status->rtt_results_cache)) { in dhd_rtt_handle_rtt_session_end()
3108 &rtt_status->rtt_results_cache, list) { in dhd_rtt_handle_rtt_session_end()
3109 list_del(&entry->list); in dhd_rtt_handle_rtt_session_end()
3112 &entry->result_list, list) { in dhd_rtt_handle_rtt_session_end()
3113 list_del(&rtt_result->list); in dhd_rtt_handle_rtt_session_end()
3121 INIT_LIST_HEAD(&rtt_status->rtt_results_cache); in dhd_rtt_handle_rtt_session_end()
3123 rtt_status->rtt_config.rtt_target_cnt = 0; in dhd_rtt_handle_rtt_session_end()
3124 memset_s(rtt_status->rtt_config.target_info, TARGET_INFO_SIZE(RTT_MAX_TARGET_CNT), in dhd_rtt_handle_rtt_session_end()
3126 rtt_status->cur_idx = 0; in dhd_rtt_handle_rtt_session_end()
3142 rtt_results_header = (rtt_results_header_t *)MALLOCZ(rtt_status->dhd->osh, in dhd_rtt_create_failure_result()
3145 ret = -ENOMEM; in dhd_rtt_create_failure_result()
3148 rtt_target_info = &rtt_status->rtt_config.target_info[rtt_status->cur_idx]; in dhd_rtt_create_failure_result()
3150 INIT_LIST_HEAD(&rtt_results_header->result_list); in dhd_rtt_create_failure_result()
3152 (void)memcpy_s(&rtt_results_header->peer_mac, in dhd_rtt_create_failure_result()
3154 list_add_tail(&rtt_results_header->list, &rtt_status->rtt_results_cache); in dhd_rtt_create_failure_result()
3157 rtt_result = (rtt_result_t *)MALLOCZ(rtt_status->dhd->osh, in dhd_rtt_create_failure_result()
3160 ret = -ENOMEM; in dhd_rtt_create_failure_result()
3165 rtt_result->report.ftm_num = rtt_target_info->num_frames_per_burst; in dhd_rtt_create_failure_result()
3166 rtt_result->report.type = RTT_TWO_WAY; in dhd_rtt_create_failure_result()
3167 DHD_RTT(("report->ftm_num : %d\n", rtt_result->report.ftm_num)); in dhd_rtt_create_failure_result()
3168 rtt_result->report_len = RTT_REPORT_SIZE; in dhd_rtt_create_failure_result()
3169 rtt_result->report.status = RTT_STATUS_FAIL_NO_RSP; in dhd_rtt_create_failure_result()
3171 (void)memcpy_s(&rtt_result->report.addr, ETHER_ADDR_LEN, in dhd_rtt_create_failure_result()
3172 &rtt_target_info->addr, ETHER_ADDR_LEN); in dhd_rtt_create_failure_result()
3173 rtt_result->report.distance = FTM_INVALID; in dhd_rtt_create_failure_result()
3174 list_add_tail(&rtt_result->list, &rtt_results_header->result_list); in dhd_rtt_create_failure_result()
3175 rtt_results_header->result_cnt++; in dhd_rtt_create_failure_result()
3176 rtt_results_header->result_tot_len += rtt_result->report_len; in dhd_rtt_create_failure_result()
3188 list_for_each_entry(entry, &rtt_status->rtt_results_cache, list) { in dhd_rtt_get_report_header()
3190 if (!memcmp(&entry->peer_mac, addr, ETHER_ADDR_LEN)) { in dhd_rtt_get_report_header()
3206 mutex_lock(&rtt_status->rtt_mutex); in dhd_rtt_handle_nan_rtt_session_end()
3213 mutex_unlock(&rtt_status->rtt_mutex); in dhd_rtt_handle_nan_rtt_session_end()
3223 if (rtt_result && (rtt_result->report.success_num != 0)) { in dhd_rtt_is_valid_measurement()
3237 (uint8 *)&proxd_ev_data->tlvs[0], tlvs_len, in dhd_rtt_parse_result_event()
3245 rtt_result->report.type = RTT_TWO_WAY; in dhd_rtt_parse_result_event()
3246 DHD_RTT(("report->ftm_num : %d\n", rtt_result->report.ftm_num)); in dhd_rtt_parse_result_event()
3247 rtt_result->report_len = RTT_REPORT_SIZE; in dhd_rtt_parse_result_event()
3248 rtt_result->detail_len = sizeof(rtt_result->rtt_detail); in dhd_rtt_parse_result_event()
3272 rtt_results_header = (rtt_results_header_t *)MALLOCZ(rtt_status->dhd->osh, in dhd_rtt_handle_directed_rtt_burst_end()
3280 INIT_LIST_HEAD(&rtt_results_header->result_list); in dhd_rtt_handle_directed_rtt_burst_end()
3282 (void)memcpy_s(&rtt_results_header->peer_mac, ETHER_ADDR_LEN, in dhd_rtt_handle_directed_rtt_burst_end()
3284 list_add_tail(&rtt_results_header->list, &rtt_status->rtt_results_cache); in dhd_rtt_handle_directed_rtt_burst_end()
3291 * Add to list, if non-nan RTT (legacy) or in dhd_rtt_handle_directed_rtt_burst_end()
3294 list_add_tail(&rtt_result->list, &rtt_results_header->result_list); in dhd_rtt_handle_directed_rtt_burst_end()
3295 rtt_results_header->result_cnt++; in dhd_rtt_handle_directed_rtt_burst_end()
3296 rtt_results_header->result_tot_len += rtt_result->report_len + in dhd_rtt_handle_directed_rtt_burst_end()
3297 rtt_result->detail_len; in dhd_rtt_handle_directed_rtt_burst_end()
3318 list_del(&rtt_results_header->list); in dhd_rtt_handle_directed_rtt_burst_end()
3333 dhd_pub_t *dhd = (struct dhd_pub *)(cfg->pub); in dhd_rtt_nan_range_report()
3345 range_res.dist_mm = rtt_result->report.distance; in dhd_rtt_nan_range_report()
3348 &rtt_result->report.addr, ETHER_ADDR_LEN); in dhd_rtt_nan_range_report()
3358 &rng_inst->peer_addr, RTT_GEO_SUSPN_RANGE_RES_REPORTED, 0); in dhd_rtt_nan_range_report()
3380 cfg = wiphy_priv(ndev->ieee80211_ptr->wiphy); in dhd_rtt_handle_nan_burst_end()
3385 mutex_lock(&rtt_status->rtt_mutex); in dhd_rtt_handle_nan_burst_end()
3387 if ((cfg->nan_enable == FALSE) || in dhd_rtt_handle_nan_burst_end()
3390 "or nan disable, nan_enable = %d\n", cfg->nan_enable)); in dhd_rtt_handle_nan_burst_end()
3397 is_geofence = (rng_inst->range_type in dhd_rtt_handle_nan_burst_end()
3406 rtt_result = (rtt_result_t *)MALLOCZ(dhd->osh, sizeof(rtt_result_t)); in dhd_rtt_handle_nan_burst_end()
3423 if (rtt_status->flags == WL_PROXD_SESSION_FLAG_TARGET) { in dhd_rtt_handle_nan_burst_end()
3439 mutex_unlock(&rtt_status->rtt_mutex); in dhd_rtt_handle_nan_burst_end()
3473 if (ntoh32_ua((void *)&event->datalen) < OFFSETOF(wl_proxd_event_t, tlvs)) { in dhd_rtt_event_handler()
3475 ntoh32_ua((void *)&event->datalen))); in dhd_rtt_event_handler()
3476 return -EINVAL; in dhd_rtt_event_handler()
3478 event_type = ntoh32_ua((void *)&event->event_type); in dhd_rtt_event_handler()
3481 return -EINVAL; in dhd_rtt_event_handler()
3486 return -EINVAL; in dhd_rtt_event_handler()
3489 version = ltoh16(p_event->version); in dhd_rtt_event_handler()
3491 DHD_RTT_ERR(("ignore non-ftm event version = 0x%0x < WL_PROXD_API_VERSION (0x%x)\n", in dhd_rtt_event_handler()
3496 event_type = (wl_proxd_event_type_t) ltoh16(p_event->type); in dhd_rtt_event_handler()
3499 p_event->type, ntoh16(p_event->type), ltoh16(p_event->type))); in dhd_rtt_event_handler()
3503 ret = -EINVAL; in dhd_rtt_event_handler()
3507 if (ltoh16(p_event->len) < OFFSETOF(wl_proxd_event_t, tlvs)) { in dhd_rtt_event_handler()
3508 DHD_RTT_ERR(("invalid FTM event length:%d\n", ltoh16(p_event->len))); in dhd_rtt_event_handler()
3509 ret = -EINVAL; in dhd_rtt_event_handler()
3512 tlvs_len = ltoh16(p_event->len) - OFFSETOF(wl_proxd_event_t, tlvs); in dhd_rtt_event_handler()
3514 p_loginfo->text, in dhd_rtt_event_handler()
3516 ltoh16(p_event->len), in dhd_rtt_event_handler()
3517 ltoh16(p_event->method), in dhd_rtt_event_handler()
3518 ltoh16(p_event->sid), in dhd_rtt_event_handler()
3523 dhd_rtt_is_nan_peer(dhd, &event->addr)) { in dhd_rtt_event_handler()
3525 ret = dhd_rtt_handle_nan_burst_end(dhd, &event->addr, p_event, tlvs_len); in dhd_rtt_event_handler()
3532 mutex_lock(&rtt_status->rtt_mutex); in dhd_rtt_event_handler()
3537 if (rtt_status->flags == WL_PROXD_SESSION_FLAG_TARGET) { in dhd_rtt_event_handler()
3549 &rtt_results_header, &event->addr); in dhd_rtt_event_handler()
3565 rtt_result = (rtt_result_t *)MALLOCZ(dhd->osh, sizeof(rtt_result_t)); in dhd_rtt_event_handler()
3567 ret = -ENOMEM; in dhd_rtt_event_handler()
3570 ret = dhd_rtt_handle_directed_rtt_burst_end(dhd, &event->addr, in dhd_rtt_event_handler()
3580 if (dhd_rtt_is_nan_peer(dhd, &event->addr)) { in dhd_rtt_event_handler()
3596 (uint8 *)&p_event->tlvs[0], tlvs_len, in dhd_rtt_event_handler()
3607 dhd_rtt_create_failure_result(rtt_status, &event->addr); in dhd_rtt_event_handler()
3638 if (!(buffer = (void *)MALLOCZ(dhd->osh, tlvs_len))) { in dhd_rtt_event_handler()
3639 ret = -ENOMEM; in dhd_rtt_event_handler()
3644 (uint8 *)&p_event->tlvs[0], tlvs_len, in dhd_rtt_event_handler()
3658 if (!(buffer = (void *)MALLOCZ(dhd->osh, tlvs_len))) { in dhd_rtt_event_handler()
3659 ret = -ENOMEM; in dhd_rtt_event_handler()
3664 (uint8 *)&p_event->tlvs[0], tlvs_len, in dhd_rtt_event_handler()
3681 mutex_unlock(&rtt_status->rtt_mutex); in dhd_rtt_event_handler()
3698 dhd = rtt_status->dhd; in dhd_rtt_work()
3719 if (rtt_status->rtt_capa.proto & RTT_CAP_ONE_WAY) in dhd_rtt_capability()
3720 capa->rtt_one_sided_supported = 1; in dhd_rtt_capability()
3721 if (rtt_status->rtt_capa.proto & RTT_CAP_FTM_WAY) in dhd_rtt_capability()
3722 capa->rtt_ftm_supported = 1; in dhd_rtt_capability()
3724 if (rtt_status->rtt_capa.feature & RTT_FEATURE_LCI) in dhd_rtt_capability()
3725 capa->lci_support = 1; in dhd_rtt_capability()
3726 if (rtt_status->rtt_capa.feature & RTT_FEATURE_LCR) in dhd_rtt_capability()
3727 capa->lcr_support = 1; in dhd_rtt_capability()
3728 if (rtt_status->rtt_capa.feature & RTT_FEATURE_PREAMBLE) in dhd_rtt_capability()
3729 capa->preamble_support = 1; in dhd_rtt_capability()
3730 if (rtt_status->rtt_capa.feature & RTT_FEATURE_BW) in dhd_rtt_capability()
3731 capa->bw_support = 1; in dhd_rtt_capability()
3734 capa->preamble_support = rtt_status->rtt_capa.preamble; in dhd_rtt_capability()
3735 capa->bw_support = rtt_status->rtt_capa.bw; in dhd_rtt_capability()
3757 channel_info->width = WIFI_CHAN_WIDTH_20; in dhd_rtt_avail_channel()
3760 channel_info->width = WIFI_CHAN_WIDTH_40; in dhd_rtt_avail_channel()
3763 channel_info->width = WIFI_CHAN_WIDTH_80; in dhd_rtt_avail_channel()
3768 channel_info->center_freq = in dhd_rtt_avail_channel()
3771 channel_info->center_freq = in dhd_rtt_avail_channel()
3774 if ((channel_info->width == WIFI_CHAN_WIDTH_80) || in dhd_rtt_avail_channel()
3775 (channel_info->width == WIFI_CHAN_WIDTH_40)) { in dhd_rtt_avail_channel()
3777 channel_info->center_freq0 = in dhd_rtt_avail_channel()
3811 channel.width = channel_info->width; in dhd_rtt_enable_responder()
3812 channel.center_freq = channel_info->center_freq; in dhd_rtt_enable_responder()
3813 channel.center_freq0 = channel_info->center_freq; in dhd_rtt_enable_responder()
3828 rtt_status->pm = PM_OFF; in dhd_rtt_enable_responder()
3829 err = wldev_ioctl_get(dev, WLC_GET_PM, &rtt_status->pm, sizeof(rtt_status->pm)); in dhd_rtt_enable_responder()
3830 DHD_RTT(("Current PM value read %d\n", rtt_status->pm)); in dhd_rtt_enable_responder()
3837 rtt_status->pm_restore = FALSE; in dhd_rtt_enable_responder()
3839 rtt_status->pm_restore = TRUE; in dhd_rtt_enable_responder()
3850 rtt_status->status = RTT_ENABLED; in dhd_rtt_enable_responder()
3856 rtt_status->flags = WL_PROXD_SESSION_FLAG_TARGET; in dhd_rtt_enable_responder()
3862 rtt_status->status = RTT_STOPPED; in dhd_rtt_enable_responder()
3866 if (rtt_status->pm_restore) { in dhd_rtt_enable_responder()
3872 rtt_status->pm_restore = FALSE; in dhd_rtt_enable_responder()
3895 rtt_status->status = RTT_STOPPED; in dhd_rtt_cancel_responder()
3896 if (rtt_status->pm_restore) { in dhd_rtt_cancel_responder()
3898 DHD_RTT(("pm_restore =%d \n", rtt_status->pm_restore)); in dhd_rtt_cancel_responder()
3903 rtt_status->pm_restore = FALSE; in dhd_rtt_cancel_responder()
3923 if (dhd->rtt_state) { in dhd_rtt_init()
3926 dhd->rtt_state = (rtt_status_info_t *)MALLOCZ(dhd->osh, in dhd_rtt_init()
3928 if (dhd->rtt_state == NULL) { in dhd_rtt_init()
3933 bzero(dhd->rtt_state, sizeof(rtt_status_info_t)); in dhd_rtt_init()
3935 rtt_status->rtt_config.target_info = in dhd_rtt_init()
3936 (rtt_target_info_t *)MALLOCZ(dhd->osh, in dhd_rtt_init()
3938 if (rtt_status->rtt_config.target_info == NULL) { in dhd_rtt_init()
3944 rtt_status->dhd = dhd; in dhd_rtt_init()
3951 /* rtt_status->rtt_capa.proto |= RTT_CAP_ONE_WAY; */ in dhd_rtt_init()
3952 rtt_status->rtt_capa.proto |= RTT_CAP_FTM_WAY; in dhd_rtt_init()
3955 rtt_status->rtt_capa.feature |= RTT_FEATURE_LCI; in dhd_rtt_init()
3956 rtt_status->rtt_capa.feature |= RTT_FEATURE_LCR; in dhd_rtt_init()
3957 rtt_status->rtt_capa.feature |= RTT_FEATURE_PREAMBLE; in dhd_rtt_init()
3958 rtt_status->rtt_capa.preamble |= RTT_PREAMBLE_VHT; in dhd_rtt_init()
3959 rtt_status->rtt_capa.preamble |= RTT_PREAMBLE_HT; in dhd_rtt_init()
3962 rtt_status->rtt_capa.feature |= RTT_FEATURE_BW; in dhd_rtt_init()
3963 rtt_status->rtt_capa.bw |= RTT_BW_20; in dhd_rtt_init()
3964 rtt_status->rtt_capa.bw |= RTT_BW_40; in dhd_rtt_init()
3965 rtt_status->rtt_capa.bw |= RTT_BW_80; in dhd_rtt_init()
3975 rtt_status->all_cancel = TRUE; in dhd_rtt_init()
3976 mutex_init(&rtt_status->rtt_mutex); in dhd_rtt_init()
3977 mutex_init(&rtt_status->geofence_mutex); in dhd_rtt_init()
3978 INIT_LIST_HEAD(&rtt_status->noti_fn_list); in dhd_rtt_init()
3979 INIT_LIST_HEAD(&rtt_status->rtt_results_cache); in dhd_rtt_init()
3980 INIT_WORK(&rtt_status->work, dhd_rtt_work); in dhd_rtt_init()
3982 INIT_DELAYED_WORK(&rtt_status->proxd_timeout, dhd_rtt_timeout_work); in dhd_rtt_init()
3985 INIT_DELAYED_WORK(&rtt_status->rtt_retry_timer, dhd_rtt_retry_work); in dhd_rtt_init()
3987 rtt_status->geofence_cfg.cur_target_idx = DHD_RTT_INVALID_TARGET_INDEX; in dhd_rtt_init()
3997 kfree(rtt_status->rtt_config.target_info); in dhd_rtt_init()
3998 kfree(dhd->rtt_state); in dhd_rtt_init()
4017 rtt_status->status = RTT_STOPPED; in dhd_rtt_deinit()
4021 if (!list_empty(&rtt_status->noti_fn_list)) { in dhd_rtt_deinit()
4022 list_for_each_entry_safe(iter, iter2, &rtt_status->noti_fn_list, list) { in dhd_rtt_deinit()
4023 list_del(&iter->list); in dhd_rtt_deinit()
4028 if (!list_empty(&rtt_status->rtt_results_cache)) { in dhd_rtt_deinit()
4029 list_for_each_entry_safe(rtt_header, next, &rtt_status->rtt_results_cache, list) { in dhd_rtt_deinit()
4030 list_del(&rtt_header->list); in dhd_rtt_deinit()
4032 &rtt_header->result_list, list) { in dhd_rtt_deinit()
4033 list_del(&rtt_result->list); in dhd_rtt_deinit()
4041 kfree(rtt_status->rtt_config.target_info); in dhd_rtt_deinit()
4042 kfree(dhd->rtt_state); in dhd_rtt_deinit()
4043 dhd->rtt_state = NULL; in dhd_rtt_deinit()