Lines Matching +full:tmu +full:- +full:range
21 * <<Broadcom-WL-IPTag/Dual:>>
87 #define FTM_INVALID -1
140 /* proxd ftm config-category definition */
149 char *name; /* cmd-name string as cmdline input */
150 wl_proxd_cmd_t cmdid; /* cmd-id */
174 * definition for id-string mapping.
175 * This is used to map an id (can be cmd-id, tlv-id, ....) to a text-string
176 * for debug-display or cmd-log-display
250 /* wl_proxd_event_type_t, text-string */
261 { WL_PROXD_EVENT_RANGE_REQ, "range request" },
264 { WL_PROXD_EVENT_VS_INITIATOR_RPT, "initiator-report " }, /* rx initiator-rpt */
268 { WL_PROXD_EVENT_START_WAIT, "start-wait"}
272 * session-state --> text string mapping
280 { WL_PROXD_SESSION_STATE_USER_WAIT, "user-wait" },
281 { WL_PROXD_SESSION_STATE_SCHED_WAIT, "sched-wait" },
290 * status --> text string mapping
293 /* wl_proxd_status_t, text-string */
319 * time interval unit --> text string mapping
322 /* wl_proxd_tmu_t, text-string */
459 ret = intvl->intvl; in ftm_intvl2nsec()
460 switch (intvl->tmu) { in ftm_intvl2nsec()
465 case WL_PROXD_TMU_PICO_SEC: ret = intvl->intvl / 1000; break; in ftm_intvl2nsec()
475 ret = intvl->intvl; in ftm_intvl2usec()
476 switch (intvl->tmu) { in ftm_intvl2usec()
479 case WL_PROXD_TMU_NANO_SEC: ret = intvl->intvl / 1000; break; in ftm_intvl2usec()
480 case WL_PROXD_TMU_PICO_SEC: ret = intvl->intvl / 1000000; break; in ftm_intvl2usec()
503 if (p_entry->proxd_status == id) { in ftm_get_statusmap_info()
504 return p_entry->rtt_reason; in ftm_get_statusmap_info()
524 if (p_entry->id == id) in ftm_get_strmap_info()
532 * map enum to a text-string for display, this function is called by the following:
535 * For TLV-output log for 'get' commands
536 * ftm_[method|tmu|caps|status|state]_value_to_logstr()
538 * pTable -- point to a 'enum to string' table.
545 return (p_entry->text); in ftm_map_id_to_str()
554 /* ftm cmd-id mapping */
581 * map a ftm cmd-id to a text-string for display
603 /* check if within BCME_xxx error range */ in ftm_status_value_to_logstr()
606 return ftm_bcmerrorstrtable[-bcmerror]; in ftm_status_value_to_logstr()
608 /* otherwise, look for 'proxd ftm status' range */ in ftm_status_value_to_logstr()
612 return p_loginfo->text; in ftm_status_value_to_logstr()
614 /* report for 'out of range' FTM-status error code */ in ftm_status_value_to_logstr()
622 ftm_tmu_value_to_logstr(wl_proxd_tmu_t tmu) in ftm_tmu_value_to_logstr() argument
624 return ftm_map_id_to_str((int32)tmu, in ftm_tmu_value_to_logstr()
631 /* look up 'event-type' from a predefined table */ in ftm_get_event_type_loginfo()
645 * send 'proxd' iovar for all ftm get-related commands
660 __FUNCTION__, p_subcmd_info->cmdid, status)); in rtt_do_get_ioctl()
663 if (p_subcmd_info->cmdid == WL_PROXD_CMD_GET_VERSION) { in rtt_do_get_ioctl()
664 p_subcmd_info->version = ltoh16(p_iovresp->version); in rtt_do_get_ioctl()
665 DHD_RTT(("ftm version: 0x%x\n", ltoh16(p_iovresp->version))); in rtt_do_get_ioctl()
669 tlvs_len = ltoh16(p_iovresp->len) - WL_PROXD_IOV_HDR_SIZE; in rtt_do_get_ioctl()
671 DHD_RTT_ERR(("%s: alert, p_iovresp->len(%d) should not be smaller than %d\n", in rtt_do_get_ioctl()
672 __FUNCTION__, ltoh16(p_iovresp->len), (int) WL_PROXD_IOV_HDR_SIZE)); in rtt_do_get_ioctl()
676 if (tlvs_len > 0 && p_subcmd_info->handler) { in rtt_do_get_ioctl()
678 status = bcm_unpack_xtlv_buf(p_proxd_iov, (uint8 *)p_iovresp->tlvs, in rtt_do_get_ioctl()
679 tlvs_len, BCM_XTLV_OPTION_ALIGN32, p_subcmd_info->handler); in rtt_do_get_ioctl()
694 /* calculate the whole buffer size, including one reserve-tlv entry in the header */ in rtt_alloc_getset_buf()
697 p_proxd_iov = (wl_proxd_iov_t *)MALLOCZ(dhd->osh, proxd_iovsize); in rtt_alloc_getset_buf()
703 /* setup proxd-FTM-method iovar header */ in rtt_alloc_getset_buf()
704 p_proxd_iov->version = htol16(WL_PROXD_API_VERSION); in rtt_alloc_getset_buf()
705 p_proxd_iov->len = htol16(proxd_iovsize); /* caller may adjust it based on #of TLVs */ in rtt_alloc_getset_buf()
706 p_proxd_iov->cmd = htol16(cmdid); in rtt_alloc_getset_buf()
707 p_proxd_iov->method = htol16(method); in rtt_alloc_getset_buf()
708 p_proxd_iov->sid = htol16(session_id); in rtt_alloc_getset_buf()
710 /* initialize the reserved/dummy-TLV in iovar header */ in rtt_alloc_getset_buf()
711 p_tlv = p_proxd_iov->tlvs; in rtt_alloc_getset_buf()
712 p_tlv->id = htol16(WL_PROXD_TLV_ID_NONE); in rtt_alloc_getset_buf()
713 p_tlv->len = htol16(0); in rtt_alloc_getset_buf()
730 __FUNCTION__, method, session_id, p_subcmd_info->cmdid, in dhd_rtt_common_get_handler()
731 ftm_cmdid_to_str(p_subcmd_info->cmdid))); in dhd_rtt_common_get_handler()
734 p_proxd_iov = rtt_alloc_getset_buf(dhd, method, session_id, p_subcmd_info->cmdid, in dhd_rtt_common_get_handler()
745 MFREE(dhd->osh, p_proxd_iov, proxd_iovsize); in dhd_rtt_common_get_handler()
750 * common handler for set-related proxd method commands which require no TLV as input
751 * wl proxd ftm [session-id] <set-subcmd>
753 * wl proxd ftm enable -- to enable ftm
754 * wl proxd ftm disable -- to disable ftm
755 * wl proxd ftm <session-id> start -- to start a specified session
756 * wl proxd ftm <session-id> stop -- to cancel a specified session;
758 * wl proxd ftm <session-id> delete -- to delete a specified session
759 * wl proxd ftm [<session-id>] clear-counters -- to clear counters
760 * wl proxd ftm <session-id> burst-request -- on initiator: to send burst request;
762 * wl proxd ftm <session-id> collect
775 __FUNCTION__, method, session_id, p_subcmd_info->cmdid, in dhd_rtt_common_set_handler()
776 ftm_cmdid_to_str(p_subcmd_info->cmdid))); in dhd_rtt_common_set_handler()
781 p_proxd_iov = rtt_alloc_getset_buf(dhd, method, session_id, p_subcmd_info->cmdid, in dhd_rtt_common_set_handler()
786 /* no TLV to pack, simply issue a set-proxd iovar */ in dhd_rtt_common_set_handler()
794 MFREE(dhd->osh, p_proxd_iov, proxd_iovsize); in dhd_rtt_common_set_handler()
839 p_collect_data_v1->H_RX[i] = ltoh32_ua(&p_collect_data_v1->H_RX[i]); in rtt_collect_event_data_display()
840 DHD_RTT(("\t%u\n", p_collect_data_v1->H_RX[i])); in rtt_collect_event_data_display()
845 p_collect_data_v1->H_LB[i] = ltoh32_ua(&p_collect_data_v1->H_LB[i]); in rtt_collect_event_data_display()
846 DHD_RTT(("\t%u\n", p_collect_data_v1->H_LB[i])); in rtt_collect_event_data_display()
851 DHD_RTT(("\t%u\n", p_collect_data_v1->ri_rr[i])); in rtt_collect_event_data_display()
853 p_collect_data_v1->phy_err_mask = ltoh32_ua(&p_collect_data_v1->phy_err_mask); in rtt_collect_event_data_display()
854 DHD_RTT(("\tphy_err_mask=0x%x\n", p_collect_data_v1->phy_err_mask)); in rtt_collect_event_data_display()
861 p_collect_data_v2->H_RX[i] = ltoh32_ua(&p_collect_data_v2->H_RX[i]); in rtt_collect_event_data_display()
862 DHD_RTT(("\t%u\n", p_collect_data_v2->H_RX[i])); in rtt_collect_event_data_display()
867 p_collect_data_v2->H_LB[i] = ltoh32_ua(&p_collect_data_v2->H_LB[i]); in rtt_collect_event_data_display()
868 DHD_RTT(("\t%u\n", p_collect_data_v2->H_LB[i])); in rtt_collect_event_data_display()
873 DHD_RTT(("\t%u\n", p_collect_data_v2->ri_rr[i])); in rtt_collect_event_data_display()
875 p_collect_data_v2->phy_err_mask = ltoh32_ua(&p_collect_data_v2->phy_err_mask); in rtt_collect_event_data_display()
876 DHD_RTT(("\tphy_err_mask=0x%x\n", p_collect_data_v2->phy_err_mask)); in rtt_collect_event_data_display()
881 switch (p_collect_data_v3->version) { in rtt_collect_event_data_display()
883 if (p_collect_data_v3->length != in rtt_collect_event_data_display()
884 (len - OFFSETOF(wl_proxd_collect_event_data_v3_t, H_LB))) { in rtt_collect_event_data_display()
890 p_collect_data_v3->H_RX[i] = in rtt_collect_event_data_display()
891 ltoh32_ua(&p_collect_data_v3->H_RX[i]); in rtt_collect_event_data_display()
892 DHD_RTT(("\t%u\n", p_collect_data_v3->H_RX[i])); in rtt_collect_event_data_display()
897 p_collect_data_v3->H_LB[i] = in rtt_collect_event_data_display()
898 ltoh32_ua(&p_collect_data_v3->H_LB[i]); in rtt_collect_event_data_display()
899 DHD_RTT(("\t%u\n", p_collect_data_v3->H_LB[i])); in rtt_collect_event_data_display()
904 DHD_RTT(("\t%u\n", p_collect_data_v3->ri_rr[i])); in rtt_collect_event_data_display()
906 p_collect_data_v3->phy_err_mask = in rtt_collect_event_data_display()
907 ltoh32_ua(&p_collect_data_v3->phy_err_mask); in rtt_collect_event_data_display()
908 DHD_RTT(("\tphy_err_mask=0x%x\n", p_collect_data_v3->phy_err_mask)); in rtt_collect_event_data_display()
916 switch (p_collect_data_v4->version) { in rtt_collect_event_data_display()
918 if (p_collect_data_v4->length != in rtt_collect_event_data_display()
919 (len - OFFSETOF(wl_proxd_collect_event_data_v4_t, H_LB))) { in rtt_collect_event_data_display()
925 p_collect_data_v4->H_RX[i] = in rtt_collect_event_data_display()
926 ltoh32_ua(&p_collect_data_v4->H_RX[i]); in rtt_collect_event_data_display()
927 DHD_RTT(("\t%u\n", p_collect_data_v4->H_RX[i])); in rtt_collect_event_data_display()
932 p_collect_data_v4->H_LB[i] = in rtt_collect_event_data_display()
933 ltoh32_ua(&p_collect_data_v4->H_LB[i]); in rtt_collect_event_data_display()
934 DHD_RTT(("\t%u\n", p_collect_data_v4->H_LB[i])); in rtt_collect_event_data_display()
939 DHD_RTT(("\t%u\n", p_collect_data_v4->ri_rr[i])); in rtt_collect_event_data_display()
941 p_collect_data_v4->phy_err_mask = in rtt_collect_event_data_display()
942 ltoh32_ua(&p_collect_data_v4->phy_err_mask); in rtt_collect_event_data_display()
943 DHD_RTT(("\tphy_err_mask=0x%x\n", p_collect_data_v4->phy_err_mask)); in rtt_collect_event_data_display()
965 if (r_v2->version == WL_PROXD_RTT_RESULT_VERSION_2) { in rtt_result_ver()
995 len -= nchar; in rtt_prhex()
1000 len -= nchar; in rtt_prhex()
1050 p_data_info->sid = ltoh16_ua(&p_data_info->sid); in rtt_unpack_xtlv_cbfn()
1051 p_data_info->state = ltoh16_ua(&p_data_info->state); in rtt_unpack_xtlv_cbfn()
1052 p_data_info->status = ltoh32_ua(&p_data_info->status); in rtt_unpack_xtlv_cbfn()
1053 p_data_info->burst_num = ltoh16_ua(&p_data_info->burst_num); in rtt_unpack_xtlv_cbfn()
1054 p_data_info->core_info = ltoh16_ua(&p_data_info->core_info); in rtt_unpack_xtlv_cbfn()
1056 p_data_info->sid, p_data_info->state, in rtt_unpack_xtlv_cbfn()
1057 p_data_info->status, p_data_info->burst_num)); in rtt_unpack_xtlv_cbfn()
1058 DHD_RTT(("\tnum_cores=%u, core=%u\n", (p_data_info->core_info & 0xFF), in rtt_unpack_xtlv_cbfn()
1059 (p_data_info->core_info >> 8u & 0xFF))); in rtt_unpack_xtlv_cbfn()
1112 new_mask = p_option_info->flags; in rtt_handle_config_options()
1115 if (p_option_info->enable) { in rtt_handle_config_options()
1161 switch (p_config_param_info->tlvid) { in rtt_handle_config_general()
1165 p_src_data = &p_config_param_info->data8; in rtt_handle_config_general()
1171 p_src_data = &p_config_param_info->data16; in rtt_handle_config_general()
1178 p_src_data = &p_config_param_info->data32; in rtt_handle_config_general()
1181 case WL_PROXD_TLV_ID_CHANSPEC: /* chanspec_t --> 32bit */ in rtt_handle_config_general()
1182 chanspec = p_config_param_info->chanspec; in rtt_handle_config_general()
1189 p_src_data = &p_config_param_info->mac_addr; in rtt_handle_config_general()
1197 p_src_data = &p_config_param_info->data_intvl; in rtt_handle_config_general()
1206 __FUNCTION__, p_config_param_info->tlvid)); in rtt_handle_config_general()
1211 p_config_param_info->tlvid, src_data_size, (uint8 *)p_src_data, in rtt_handle_config_general()
1262 struct wiphy *wiphy = wdev->wiphy; in dhd_rtt_delete_nan_session()
1268 * is nan-peer. Based on this we will handle the SESSION_END
1269 * event. For nan-peer FTM_SESSION_END event is ignored and handled in
1270 * nan-ranging-cancel or nan-ranging-end event.
1277 struct wiphy *wiphy = wdev->wiphy; in dhd_rtt_is_nan_peer()
1302 setup_in_prog = rtt_status->directed_cfg.directed_setup_status.directed_na_setup_inprog; in dhd_rtt_nan_is_directed_setup_in_prog()
1325 (ranging_inst != rtt_status->directed_cfg.directed_setup_status.rng_inst)) { in dhd_rtt_nan_is_directed_setup_in_prog_with_peer()
1339 rtt_status->directed_cfg.directed_setup_status.directed_na_setup_inprog = inprog; in dhd_rtt_nan_update_directed_setup_inprog()
1342 rtt_status->directed_cfg.directed_setup_status.rng_inst = rng_inst; in dhd_rtt_nan_update_directed_setup_inprog()
1344 rtt_status->directed_cfg.directed_setup_status.rng_inst = NULL; in dhd_rtt_nan_update_directed_setup_inprog()
1355 max_sessions = rtt_status->max_nan_rtt_sessions; in dhd_rtt_nan_directed_sessions_allowed()
1358 max_sessions--; in dhd_rtt_nan_directed_sessions_allowed()
1361 if (rtt_status->directed_cfg.directed_sessions_cnt >= max_sessions) { in dhd_rtt_nan_directed_sessions_allowed()
1374 if ((rtt_status->cur_idx + 1) >= rtt_status->rtt_config.rtt_target_cnt) { in dhd_rtt_nan_all_directed_sessions_triggered()
1389 rtt_status->directed_cfg.directed_sessions_cnt++; in dhd_rtt_nan_update_directed_sessions_cnt()
1391 rtt_status->directed_cfg.directed_sessions_cnt--; in dhd_rtt_nan_update_directed_sessions_cnt()
1409 msg.addr = rtt_target->addr; in dhd_rtt_event_trigger_failure()
1424 struct wiphy *wiphy = wdev->wiphy; in dhd_rtt_nan_start_session()
1457 &rtt_target->addr, NAN_RANGING_ROLE_INITIATOR); in dhd_rtt_nan_start_session()
1463 DHD_RTT(("Trigger nan based range request\n")); in dhd_rtt_nan_start_session()
1469 ranging_inst->range_type = RTT_TYPE_NAN_DIRECTED; in dhd_rtt_nan_start_session()
1470 ranging_inst->range_role = NAN_RANGING_ROLE_INITIATOR; in dhd_rtt_nan_start_session()
1513 bufsize = proxd_iovsize - WL_PROXD_IOV_HDR_SIZE; /* adjust available size for TLVs */ in dhd_rtt_ftm_config()
1514 p_tlv = &p_proxd_iov->tlvs[0]; in dhd_rtt_ftm_config()
1526 all_tlvsize = (bufsize - buf_space_left); in dhd_rtt_ftm_config()
1527 p_proxd_iov->len = htol16(all_tlvsize + WL_PROXD_IOV_HDR_SIZE); in dhd_rtt_ftm_config()
1535 MFREE(dhd->osh, p_proxd_iov, proxd_iovsize); in dhd_rtt_ftm_config()
1584 bw = -1; in dhd_rtt_convert_to_chspec()
1594 return -1; in dhd_rtt_idx_to_burst_duration()
1604 return rtt_status->cur_idx; in dhd_rtt_get_cur_target_idx()
1613 for (idx = start_idx; idx < rtt_status->rtt_config.rtt_target_cnt; idx++) { in dhd_rtt_set_next_target_idx()
1615 if (rtt_status->rtt_config.target_info[idx].disable) { in dhd_rtt_set_next_target_idx()
1619 rtt_status->cur_idx = idx; in dhd_rtt_set_next_target_idx()
1624 if (idx == rtt_status->rtt_config.rtt_target_cnt) { in dhd_rtt_set_next_target_idx()
1626 rtt_status->cur_idx = rtt_status->rtt_config.rtt_target_cnt; in dhd_rtt_set_next_target_idx()
1629 return (int8)rtt_status->cur_idx; in dhd_rtt_set_next_target_idx()
1640 rtt_status->rtt_config.target_list_mode = RNG_TARGET_LIST_MODE_INVALID; in dhd_rtt_set_target_list_mode()
1641 for (idx = rtt_status->start_idx; idx < rtt_status->rtt_config.rtt_target_cnt; idx++) { in dhd_rtt_set_target_list_mode()
1642 rtt_target = &rtt_status->rtt_config.target_info[idx]; in dhd_rtt_set_target_list_mode()
1644 if (rtt_target->disable) { in dhd_rtt_set_target_list_mode()
1647 if (rtt_target->peer == RTT_PEER_NAN) { in dhd_rtt_set_target_list_mode()
1656 rtt_status->rtt_config.target_list_mode = RNG_TARGET_LIST_MODE_MIX; in dhd_rtt_set_target_list_mode()
1658 rtt_status->rtt_config.target_list_mode = RNG_TARGET_LIST_MODE_NAN; in dhd_rtt_set_target_list_mode()
1660 rtt_status->rtt_config.target_list_mode = RNG_TARGET_LIST_MODE_LEGACY; in dhd_rtt_set_target_list_mode()
1681 if (!HAS_11MC_CAP(rtt_status->rtt_capa.proto)) { in dhd_rtt_set_cfg()
1692 cancel_work_sync(&rtt_status->work); in dhd_rtt_set_cfg()
1694 mutex_lock(&rtt_status->rtt_mutex); in dhd_rtt_set_cfg()
1696 if (rtt_status->status != RTT_STOPPED) { in dhd_rtt_set_cfg()
1697 DHD_RTT_ERR(("rtt is already started, status : %d\n", rtt_status->status)); in dhd_rtt_set_cfg()
1701 if (params->rtt_target_cnt > 0) { in dhd_rtt_set_cfg()
1712 memset(rtt_status->rtt_config.target_info, 0, TARGET_INFO_SIZE(RTT_MAX_TARGET_CNT)); in dhd_rtt_set_cfg()
1713 rtt_status->rtt_config.rtt_target_cnt = params->rtt_target_cnt; in dhd_rtt_set_cfg()
1714 memcpy(rtt_status->rtt_config.target_info, in dhd_rtt_set_cfg()
1715 params->target_info, TARGET_INFO_SIZE(params->rtt_target_cnt)); in dhd_rtt_set_cfg()
1716 rtt_status->status = RTT_STARTED; in dhd_rtt_set_cfg()
1717 DHD_RTT_MEM(("dhd_rtt_set_cfg: RTT Started, target_cnt = %d\n", params->rtt_target_cnt)); in dhd_rtt_set_cfg()
1720 rtt_status->start_idx = dhd_rtt_set_next_target_idx(dhd, 0); in dhd_rtt_set_cfg()
1724 if (rtt_status->cur_idx < rtt_status->rtt_config.rtt_target_cnt) { in dhd_rtt_set_cfg()
1726 if (rtt_status->rtt_config.target_list_mode == RNG_TARGET_LIST_MODE_NAN) { in dhd_rtt_set_cfg()
1729 rtt_status->directed_cfg.directed_sessions_cnt = 0; in dhd_rtt_set_cfg()
1736 schedule_delayed_work(&rtt_status->proxd_timeout, in dhd_rtt_set_cfg()
1744 mutex_unlock(&rtt_status->rtt_mutex); in dhd_rtt_set_cfg()
1758 memset_s(&rtt_status->geofence_cfg, sizeof(rtt_status->geofence_cfg), in dhd_rtt_initialize_geofence_cfg()
1759 0, sizeof(rtt_status->geofence_cfg)); in dhd_rtt_initialize_geofence_cfg()
1762 rtt_status->geofence_cfg.cur_target_idx = DHD_RTT_INVALID_TARGET_INDEX; in dhd_rtt_initialize_geofence_cfg()
1763 rtt_status->geofence_cfg.geofence_rtt_interval = DHD_RTT_RETRY_TIMER_INTERVAL_MS; in dhd_rtt_initialize_geofence_cfg()
1764 rtt_status->geofence_cfg.geofence_sessions_cnt = 0; in dhd_rtt_initialize_geofence_cfg()
1766 rtt_status->geofence_cfg.max_geofence_sessions = in dhd_rtt_initialize_geofence_cfg()
1781 *geofence_cont = rtt_status->geofence_cfg.geofence_cont; in dhd_rtt_get_geofence_cont_ind()
1793 rtt_status->geofence_cfg.geofence_cont = geofence_cont; in dhd_rtt_set_geofence_cont_ind()
1795 rtt_status->geofence_cfg.geofence_cont)); in dhd_rtt_set_geofence_cont_ind()
1809 rtt_status->geofence_cfg.geofence_rtt_interval = interval; in dhd_rtt_set_geofence_rtt_interval()
1811 rtt_status->geofence_cfg.geofence_rtt_interval)); in dhd_rtt_set_geofence_rtt_interval()
1821 rtt_geofence_cfg_t* geofence_cfg = &rtt_status->geofence_cfg; in dhd_rtt_get_geofence_max_sessions()
1823 max_sessions = geofence_cfg->max_geofence_sessions; in dhd_rtt_get_geofence_max_sessions()
1826 max_sessions -= 1; in dhd_rtt_get_geofence_max_sessions()
1840 rtt_geofence_cfg_t* geofence_cfg = &rtt_status->geofence_cfg; in dhd_rtt_geofence_sessions_maxed_out()
1843 if (geofence_cfg->geofence_sessions_cnt < in dhd_rtt_geofence_sessions_maxed_out()
1856 rtt_geofence_cfg_t* geofence_cfg = &rtt_status->geofence_cfg; in dhd_rtt_get_geofence_sessions_cnt()
1858 return geofence_cfg->geofence_sessions_cnt; in dhd_rtt_get_geofence_sessions_cnt()
1866 rtt_geofence_cfg_t* geofence_cfg = &rtt_status->geofence_cfg; in dhd_rtt_update_geofence_sessions_cnt()
1875 geofence_cfg->geofence_sessions_cnt++; in dhd_rtt_update_geofence_sessions_cnt()
1882 //ASSERT(geofence_cfg->geofence_sessions_cnt > 0); in dhd_rtt_update_geofence_sessions_cnt()
1883 if (geofence_cfg->geofence_sessions_cnt <= 0) { in dhd_rtt_update_geofence_sessions_cnt()
1888 geofence_cfg->geofence_sessions_cnt--; in dhd_rtt_update_geofence_sessions_cnt()
1893 " ret = %d\n", incr, geofence_cfg->geofence_sessions_cnt, in dhd_rtt_update_geofence_sessions_cnt()
1897 incr, geofence_cfg->geofence_sessions_cnt, ret)); in dhd_rtt_update_geofence_sessions_cnt()
1911 return rtt_status->geofence_cfg.geofence_target_cnt; in dhd_rtt_get_geofence_target_cnt()
1925 if (rtt_status->geofence_cfg.geofence_target_cnt) { in dhd_rtt_get_geofence_target_head()
1926 head = &rtt_status->geofence_cfg.geofence_target_info[0]; in dhd_rtt_get_geofence_target_head()
1942 target_cnt = rtt_status->geofence_cfg.geofence_target_cnt; in dhd_rtt_get_geofence_cur_target_idx()
1947 cur_idx = rtt_status->geofence_cfg.cur_target_idx; in dhd_rtt_get_geofence_cur_target_idx()
1966 target_cnt = rtt_status->geofence_cfg.geofence_target_cnt; in dhd_rtt_set_geofence_cur_target_idx()
1968 rtt_status->geofence_cfg.cur_target_idx = idx; in dhd_rtt_set_geofence_cur_target_idx()
1981 if (rtt_status->geofence_cfg.geofence_target_cnt == 0) { in dhd_rtt_move_geofence_cur_target_idx_to_next()
1983 rtt_status->geofence_cfg.cur_target_idx = in dhd_rtt_move_geofence_cur_target_idx_to_next()
1986 if (delayed_work_pending(&rtt_status->rtt_retry_timer)) { in dhd_rtt_move_geofence_cur_target_idx_to_next()
1987 cancel_delayed_work(&rtt_status->rtt_retry_timer); in dhd_rtt_move_geofence_cur_target_idx_to_next()
1991 rtt_status->geofence_cfg.cur_target_idx++; in dhd_rtt_move_geofence_cur_target_idx_to_next()
1993 if (rtt_status->geofence_cfg.cur_target_idx >= in dhd_rtt_move_geofence_cur_target_idx_to_next()
1994 rtt_status->geofence_cfg.geofence_target_cnt) { in dhd_rtt_move_geofence_cur_target_idx_to_next()
1996 rtt_status->geofence_cfg.cur_target_idx = 0; in dhd_rtt_move_geofence_cur_target_idx_to_next()
2014 cur_target = &rtt_status->geofence_cfg.geofence_target_info[cur_idx]; in dhd_rtt_get_geofence_current_target()
2035 target_cnt = rtt_status->geofence_cfg.geofence_target_cnt; in dhd_rtt_get_geofence_target()
2036 geofence_target_info = rtt_status->geofence_cfg.geofence_target_info; in dhd_rtt_get_geofence_target()
2072 geofence_target_info = dhd_rtt_get_geofence_target(dhd, &target->peer_addr, &index); in dhd_rtt_add_geofence_target()
2079 geofence_target_cnt = rtt_status->geofence_cfg.geofence_target_cnt; in dhd_rtt_add_geofence_target()
2087 geofence_target_info = rtt_status->geofence_cfg.geofence_target_info; in dhd_rtt_add_geofence_target()
2093 rtt_status->geofence_cfg.geofence_target_cnt++; in dhd_rtt_add_geofence_target()
2094 if (rtt_status->geofence_cfg.geofence_target_cnt == 1) { in dhd_rtt_add_geofence_target()
2096 rtt_status->geofence_cfg.cur_target_idx = 0; in dhd_rtt_add_geofence_target()
2100 ", cur_idx = %d, total cnt = %d\n", MAC2STRDBG(&target->peer_addr), in dhd_rtt_add_geofence_target()
2101 rtt_status->geofence_cfg.cur_target_idx, in dhd_rtt_add_geofence_target()
2102 rtt_status->geofence_cfg.geofence_target_cnt)); in dhd_rtt_add_geofence_target()
2158 rtt_status->geofence_cfg.geofence_target_cnt--; in dhd_rtt_remove_geofence_target()
2159 if (rtt_status->geofence_cfg.geofence_target_cnt == 0) { in dhd_rtt_remove_geofence_target()
2160 rtt_status->geofence_cfg.cur_target_idx = in dhd_rtt_remove_geofence_target()
2163 if (rtt_status->geofence_cfg.geofence_target_cnt == in dhd_rtt_remove_geofence_target()
2164 rtt_status->geofence_cfg.cur_target_idx) { in dhd_rtt_remove_geofence_target()
2170 rtt_status->geofence_cfg.cur_target_idx = 0; in dhd_rtt_remove_geofence_target()
2177 rtt_status->geofence_cfg.cur_target_idx, in dhd_rtt_remove_geofence_target()
2178 rtt_status->geofence_cfg.geofence_target_cnt)); in dhd_rtt_remove_geofence_target()
2197 memset_s(&rtt_status->geofence_cfg, sizeof(rtt_geofence_cfg_t), in dhd_rtt_delete_geofence_target_list()
2207 rtt_geofence_cfg_t* geofence_cfg = &rtt_status->geofence_cfg; in dhd_rtt_get_geofence_setup_status()
2210 rng_setup_status = &geofence_cfg->geofence_setup_status; in dhd_rtt_get_geofence_setup_status()
2221 return rng_setup_status->geofence_setup_inprog; in dhd_rtt_is_geofence_setup_inprog()
2235 if (rng_setup_status->geofence_setup_inprog == FALSE) { in dhd_rtt_is_geofence_setup_inprog_with_peer()
2239 if (rng_inst && (rng_inst == rng_setup_status->rng_inst)) { in dhd_rtt_is_geofence_setup_inprog_with_peer()
2263 rng_setup_status->geofence_setup_inprog = inprog; in dhd_rtt_set_geofence_setup_status()
2269 rng_setup_status->rng_inst = rng_inst; in dhd_rtt_set_geofence_setup_status()
2272 rng_setup_status->rng_inst = NULL; in dhd_rtt_set_geofence_setup_status()
2285 rtt_geofence_cfg_t* geofence_cfg = &rtt_status->geofence_cfg; in dhd_rtt_sched_geofencing_target()
2297 rtt_status->rtt_sched_reason, geofence_cfg->geofence_sessions_cnt, in dhd_rtt_sched_geofencing_target()
2298 rtt_status->geofence_cfg.cur_target_idx)); in dhd_rtt_sched_geofencing_target()
2334 &geofence_target_info->peer_addr); in dhd_rtt_sched_geofencing_target()
2337 &geofence_target_info->peer_addr)) { in dhd_rtt_sched_geofencing_target()
2348 &geofence_target_info->peer_addr); in dhd_rtt_sched_geofencing_target()
2351 &geofence_target_info->peer_addr); in dhd_rtt_sched_geofencing_target()
2388 #pragma GCC diagnostic ignored "-Wcast-qual" in dhd_rtt_retry_work()
2395 dhd = rtt_status->dhd; in dhd_rtt_retry_work()
2457 rtt_status->rtt_sched_reason = sched_reason; in dhd_rtt_schedule_rtt_work_thread()
2458 rtt_status->rtt_sched = TRUE; in dhd_rtt_schedule_rtt_work_thread()
2459 schedule_work(&rtt_status->work); in dhd_rtt_schedule_rtt_work_thread()
2478 if (rtt_status->status == RTT_STOPPED) { in dhd_rtt_stop()
2483 mutex_lock(&rtt_status->rtt_mutex); in dhd_rtt_stop()
2485 for (j = 0; j < rtt_status->rtt_config.rtt_target_cnt; j++) { in dhd_rtt_stop()
2486 if (!bcmp(&mac_list[i], &rtt_status->rtt_config.target_info[j].addr, in dhd_rtt_stop()
2488 rtt_status->rtt_config.target_info[j].disable = TRUE; in dhd_rtt_stop()
2492 if (rtt_status->all_cancel) { in dhd_rtt_stop()
2494 rtt_status->status = RTT_STOPPED; in dhd_rtt_stop()
2497 if (!list_empty(&rtt_status->rtt_results_cache)) { in dhd_rtt_stop()
2501 &rtt_status->rtt_results_cache, list) { in dhd_rtt_stop()
2502 list_del(&entry->list); in dhd_rtt_stop()
2505 &entry->result_list, list) { in dhd_rtt_stop()
2506 list_del(&rtt_result->list); in dhd_rtt_stop()
2507 MFREE(dhd->osh, rtt_result, in dhd_rtt_stop()
2510 MFREE(dhd->osh, entry, sizeof(rtt_results_header_t)); in dhd_rtt_stop()
2516 list_for_each_entry(iter, &rtt_status->noti_fn_list, list) { in dhd_rtt_stop()
2518 iter->noti_fn(iter->ctx, &rtt_status->rtt_results_cache); in dhd_rtt_stop()
2521 INIT_LIST_HEAD(&rtt_status->rtt_results_cache); in dhd_rtt_stop()
2523 rtt_status->rtt_config.rtt_target_cnt = 0; in dhd_rtt_stop()
2524 memset(rtt_status->rtt_config.target_info, 0, in dhd_rtt_stop()
2526 rtt_status->cur_idx = 0; in dhd_rtt_stop()
2528 if (delayed_work_pending(&rtt_status->proxd_timeout)) { in dhd_rtt_stop()
2529 cancel_delayed_work(&rtt_status->proxd_timeout); in dhd_rtt_stop()
2537 mutex_unlock(&rtt_status->rtt_mutex); in dhd_rtt_stop()
2556 struct bcm_cfg80211 *cfg = wiphy_priv(ndev->ieee80211_ptr->wiphy); in dhd_rtt_timeout()
2578 if (dhd->memdump_enabled) { in dhd_rtt_timeout()
2580 dhd->memdump_type = DUMP_TYPE_PROXD_TIMEOUT; in dhd_rtt_timeout()
2587 if (rtt_status->rtt_config.target_list_mode == RNG_TARGET_LIST_MODE_NAN) { in dhd_rtt_timeout()
2588 for (idx = rtt_status->start_idx; in dhd_rtt_timeout()
2589 idx < rtt_status->rtt_config.rtt_target_cnt; idx++) { in dhd_rtt_timeout()
2590 rtt_target = &rtt_status->rtt_config.target_info[idx]; in dhd_rtt_timeout()
2591 if ((!rtt_target->disable) && in dhd_rtt_timeout()
2593 NULL, &rtt_target->addr))) { in dhd_rtt_timeout()
2594 if (wl_cfgnan_ranging_is_in_prog_for_peer(cfg, &rtt_target->addr)) { in dhd_rtt_timeout()
2596 &rtt_target->addr); in dhd_rtt_timeout()
2598 &ranging_inst->range_id, in dhd_rtt_timeout()
2601 WL_ERR(("%s:nan range cancel failed ret = %d " in dhd_rtt_timeout()
2606 dhd_rtt_create_failure_result(rtt_status, &rtt_target->addr); in dhd_rtt_timeout()
2611 rtt_status->directed_cfg.directed_setup_status.rng_inst = NULL; in dhd_rtt_timeout()
2612 rtt_status->directed_cfg.directed_setup_status.directed_na_setup_inprog = FALSE; in dhd_rtt_timeout()
2613 rtt_status->directed_cfg.directed_sessions_cnt = 0; in dhd_rtt_timeout()
2618 rtt_target_info = rtt_status->rtt_config.target_info; in dhd_rtt_timeout()
2620 (rtt_status->cur_idx >= rtt_status->rtt_config.rtt_target_cnt)) { in dhd_rtt_timeout()
2623 rtt_target = &rtt_target_info[rtt_status->cur_idx]; in dhd_rtt_timeout()
2625 MAC2STRDBG(&rtt_target->addr))); in dhd_rtt_timeout()
2628 dhd_rtt_create_failure_result(rtt_status, &rtt_target->addr); in dhd_rtt_timeout()
2644 #pragma GCC diagnostic ignored "-Wcast-qual" in dhd_rtt_timeout_work()
2651 dhd = rtt_status->dhd; in dhd_rtt_timeout_work()
2657 mutex_lock(&rtt_status->rtt_mutex); in dhd_rtt_timeout_work()
2659 mutex_unlock(&rtt_status->rtt_mutex); in dhd_rtt_timeout_work()
2671 if (!(rtt_target->bw && rtt_target->preamble)) { in dhd_rtt_set_ftm_config_ratespec()
2674 switch (rtt_target->preamble) { in dhd_rtt_set_ftm_config_ratespec()
2692 rtt_target->preamble)); in dhd_rtt_set_ftm_config_ratespec()
2696 switch (rtt_target->bw) { in dhd_rtt_set_ftm_config_ratespec()
2708 rtt_target->bw)); in dhd_rtt_set_ftm_config_ratespec()
2735 if (!ETHER_ISNULLADDR(rtt_target->local_addr.octet)) { in dhd_rtt_set_ftm_config_param()
2736 ftm_params[*ftm_param_cnt].mac_addr = rtt_target->local_addr; in dhd_rtt_set_ftm_config_param()
2739 bcm_ether_ntoa(&rtt_target->local_addr, eabuf); in dhd_rtt_set_ftm_config_param()
2745 if (!ETHER_ISNULLADDR(rtt_target->addr.octet)) { in dhd_rtt_set_ftm_config_param()
2746 ftm_params[*ftm_param_cnt].mac_addr = rtt_target->addr; in dhd_rtt_set_ftm_config_param()
2749 bcm_ether_ntoa(&rtt_target->addr, eabuf); in dhd_rtt_set_ftm_config_param()
2755 if (rtt_target->chanspec) { in dhd_rtt_set_ftm_config_param()
2757 htol32((uint32)rtt_target->chanspec); in dhd_rtt_set_ftm_config_param()
2760 wf_chspec_ntoa(rtt_target->chanspec, chanbuf); in dhd_rtt_set_ftm_config_param()
2765 /* num-burst */ in dhd_rtt_set_ftm_config_param()
2766 if (rtt_target->num_burst) { in dhd_rtt_set_ftm_config_param()
2767 ftm_params[*ftm_param_cnt].data16 = htol16(rtt_target->num_burst); in dhd_rtt_set_ftm_config_param()
2770 DHD_RTT((">\t num of burst : %d\n", rtt_target->num_burst)); in dhd_rtt_set_ftm_config_param()
2775 rtt_target->num_frames_per_burst = FTM_DEFAULT_CNT_80M; in dhd_rtt_set_ftm_config_param()
2776 if (CHSPEC_IS80(rtt_target->chanspec)) { in dhd_rtt_set_ftm_config_param()
2777 rtt_target->num_frames_per_burst = FTM_DEFAULT_CNT_80M; in dhd_rtt_set_ftm_config_param()
2778 } else if (CHSPEC_IS40(rtt_target->chanspec)) { in dhd_rtt_set_ftm_config_param()
2779 rtt_target->num_frames_per_burst = FTM_DEFAULT_CNT_40M; in dhd_rtt_set_ftm_config_param()
2780 } else if (CHSPEC_IS20(rtt_target->chanspec)) { in dhd_rtt_set_ftm_config_param()
2781 rtt_target->num_frames_per_burst = FTM_DEFAULT_CNT_20M; in dhd_rtt_set_ftm_config_param()
2784 htol16(rtt_target->num_frames_per_burst); in dhd_rtt_set_ftm_config_param()
2789 rtt_target->num_frames_per_burst)); in dhd_rtt_set_ftm_config_param()
2793 if (rtt_target->num_retries_per_ftm) { in dhd_rtt_set_ftm_config_param()
2794 ftm_params[*ftm_param_cnt].data8 = rtt_target->num_retries_per_ftm; in dhd_rtt_set_ftm_config_param()
2798 rtt_target->num_retries_per_ftm)); in dhd_rtt_set_ftm_config_param()
2803 if (rtt_target->num_retries_per_ftmr) { in dhd_rtt_set_ftm_config_param()
2804 ftm_params[*ftm_param_cnt].data8 = rtt_target->num_retries_per_ftmr; in dhd_rtt_set_ftm_config_param()
2809 rtt_target->num_retries_per_ftmr)); in dhd_rtt_set_ftm_config_param()
2813 /* burst-period */ in dhd_rtt_set_ftm_config_param()
2814 if (rtt_target->burst_period) { in dhd_rtt_set_ftm_config_param()
2816 htol32(rtt_target->burst_period); /* ms */ in dhd_rtt_set_ftm_config_param()
2817 ftm_params[*ftm_param_cnt].data_intvl.tmu = WL_PROXD_TMU_MILLI_SEC; in dhd_rtt_set_ftm_config_param()
2820 DHD_RTT((">\t burst period : %d ms\n", rtt_target->burst_period)); in dhd_rtt_set_ftm_config_param()
2824 /* burst-duration */ in dhd_rtt_set_ftm_config_param()
2825 rtt_target->burst_duration = FTM_MAX_BURST_DUR_TMO_MS; in dhd_rtt_set_ftm_config_param()
2826 if (rtt_target->burst_duration) { in dhd_rtt_set_ftm_config_param()
2828 htol32(rtt_target->burst_duration); /* ms */ in dhd_rtt_set_ftm_config_param()
2829 ftm_params[*ftm_param_cnt].data_intvl.tmu = WL_PROXD_TMU_MILLI_SEC; in dhd_rtt_set_ftm_config_param()
2833 rtt_target->burst_duration)); in dhd_rtt_set_ftm_config_param()
2837 /* burst-timeout */ in dhd_rtt_set_ftm_config_param()
2838 rtt_target->burst_timeout = FTM_MAX_BURST_DUR_TMO_MS; in dhd_rtt_set_ftm_config_param()
2839 if (rtt_target->burst_timeout) { in dhd_rtt_set_ftm_config_param()
2841 htol32(rtt_target->burst_timeout); /* ms */ in dhd_rtt_set_ftm_config_param()
2842 ftm_params[*ftm_param_cnt].data_intvl.tmu = WL_PROXD_TMU_MILLI_SEC; in dhd_rtt_set_ftm_config_param()
2846 rtt_target->burst_timeout)); in dhd_rtt_set_ftm_config_param()
2858 /* only burst end for directed nan-rtt target */ in dhd_rtt_set_ftm_config_param()
2859 if (rtt_target && (rtt_target->peer == RTT_PEER_NAN)) { in dhd_rtt_set_ftm_config_param()
2903 if (rtt_status->cur_idx >= rtt_status->rtt_config.rtt_target_cnt) { in dhd_rtt_start()
2906 DHD_RTT(("%s : idx %d is out of range\n", __FUNCTION__, rtt_status->cur_idx)); in dhd_rtt_start()
2907 if (rtt_status->flags == WL_PROXD_SESSION_FLAG_TARGET) { in dhd_rtt_start()
2915 rtt_target = &rtt_status->rtt_config.target_info[rtt_status->cur_idx]; in dhd_rtt_start()
2919 if (ETHER_ISNULLADDR(rtt_target->addr.octet)) { in dhd_rtt_start()
2927 rtt_invalid_reason = dhd_rtt_invalid_states(dev, &rtt_target->addr); in dhd_rtt_start()
2942 rtt_status->status = RTT_ENABLED; in dhd_rtt_start()
2945 if (rtt_target->peer == RTT_PEER_NAN) { in dhd_rtt_start()
2985 if (dhd->wlc_ver_major < RTT_IOV_CUR_ETH_OBSOLETE) { in dhd_rtt_start()
2993 memcpy(rtt_target->local_addr.octet, ioctl_buf, ETHER_ADDR_LEN); in dhd_rtt_start()
3007 /* num-burst */ in dhd_rtt_start()
3023 /* burst-period */ in dhd_rtt_start()
3031 /* burst-duration */ in dhd_rtt_start()
3035 /* burst-timeout */ in dhd_rtt_start()
3043 * For nan-rtt config happens from firmware in dhd_rtt_start()
3062 schedule_delayed_work(&rtt_status->proxd_timeout, in dhd_rtt_start()
3085 rtt_status->rtt_sched_reason)); in dhd_rtt_start()
3086 rtt_status->status = RTT_STOPPED; in dhd_rtt_start()
3090 rtt_status->rtt_sched = FALSE; in dhd_rtt_start()
3108 list_for_each_entry(iter, &rtt_status->noti_fn_list, list) { in dhd_rtt_register_noti_callback()
3110 if (iter->noti_fn == noti_fn) { in dhd_rtt_register_noti_callback()
3114 cb = (struct rtt_noti_callback *)MALLOCZ(dhd->osh, sizeof(struct rtt_noti_callback)); in dhd_rtt_register_noti_callback()
3116 err = -ENOMEM; in dhd_rtt_register_noti_callback()
3119 cb->noti_fn = noti_fn; in dhd_rtt_register_noti_callback()
3120 cb->ctx = ctx; in dhd_rtt_register_noti_callback()
3121 list_add(&cb->list, &rtt_status->noti_fn_list); in dhd_rtt_register_noti_callback()
3139 list_for_each_entry(iter, &rtt_status->noti_fn_list, list) { in dhd_rtt_unregister_noti_callback()
3141 if (iter->noti_fn == noti_fn) { in dhd_rtt_unregister_noti_callback()
3143 list_del(&cb->list); in dhd_rtt_unregister_noti_callback()
3150 MFREE(dhd->osh, cb, sizeof(struct rtt_noti_callback)); in dhd_rtt_unregister_noti_callback()
3226 rtt_report_t *rtt_report = &(rtt_result->report); in dhd_rtt_convert_results_to_host_v1()
3245 flags = ltoh16_ua(&p_data_info->flags); in dhd_rtt_convert_results_to_host_v1()
3248 session_state = ltoh16_ua(&p_data_info->state); in dhd_rtt_convert_results_to_host_v1()
3249 proxd_status = ltoh32_ua(&p_data_info->status); in dhd_rtt_convert_results_to_host_v1()
3250 bcm_ether_ntoa((&(p_data_info->peer)), eabuf); in dhd_rtt_convert_results_to_host_v1()
3259 avg_dist = ltoh32_ua(&p_data_info->avg_dist); in dhd_rtt_convert_results_to_host_v1()
3261 DHD_RTT((">\tavg_dist=-1m, burst_num=%d, valid_measure_cnt=%d\n", in dhd_rtt_convert_results_to_host_v1()
3262 ltoh16_ua(&p_data_info->burst_num), in dhd_rtt_convert_results_to_host_v1()
3263 p_data_info->num_valid_rtt)); /* in a session */ in dhd_rtt_convert_results_to_host_v1()
3270 ltoh16_ua(&p_data_info->burst_num), in dhd_rtt_convert_results_to_host_v1()
3271 p_data_info->num_valid_rtt, in dhd_rtt_convert_results_to_host_v1()
3272 p_data_info->num_ftm)); /* in a session */ in dhd_rtt_convert_results_to_host_v1()
3275 p_sample_avg = &p_data_info->avg_rtt; in dhd_rtt_convert_results_to_host_v1()
3276 ftm_tmu_value_to_logstr(ltoh16_ua(&p_sample_avg->rtt.tmu)); in dhd_rtt_convert_results_to_host_v1()
3278 (int16) ltoh16_ua(&p_sample_avg->rssi), in dhd_rtt_convert_results_to_host_v1()
3279 ltoh32_ua(&p_sample_avg->rtt.intvl), in dhd_rtt_convert_results_to_host_v1()
3280 ftm_tmu_value_to_logstr(ltoh16_ua(&p_sample_avg->rtt.tmu)), in dhd_rtt_convert_results_to_host_v1()
3281 ltoh16_ua(&p_data_info->sd_rtt)/10, ltoh16_ua(&p_data_info->sd_rtt)%10, in dhd_rtt_convert_results_to_host_v1()
3282 ltoh32_ua(&p_sample_avg->ratespec))); in dhd_rtt_convert_results_to_host_v1()
3285 rtt_report->addr = p_data_info->peer; in dhd_rtt_convert_results_to_host_v1()
3287 rtt_report->burst_num = ltoh16_ua(&p_data_info->burst_num); in dhd_rtt_convert_results_to_host_v1()
3289 rtt_report->success_num = p_data_info->num_valid_rtt; in dhd_rtt_convert_results_to_host_v1()
3291 rtt_report->num_per_burst_peer = p_data_info->num_ftm; in dhd_rtt_convert_results_to_host_v1()
3292 rtt_report->negotiated_burst_num = p_data_info->num_ftm; in dhd_rtt_convert_results_to_host_v1()
3294 rtt_report->status = ftm_get_statusmap_info(proxd_status, in dhd_rtt_convert_results_to_host_v1()
3298 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()
3301 ratespec = ltoh32_ua(&p_data_info->avg_rtt.ratespec); in dhd_rtt_convert_results_to_host_v1()
3302 rtt_report->rx_rate = dhd_rtt_convert_rate_to_host(ratespec); in dhd_rtt_convert_results_to_host_v1()
3305 rtt_report->tx_rate = dhd_rtt_convert_rate_to_host(0x2010010); in dhd_rtt_convert_results_to_host_v1()
3307 rtt_report->tx_rate = dhd_rtt_convert_rate_to_host(0xc); in dhd_rtt_convert_results_to_host_v1()
3310 rtt.tmu = ltoh16_ua(&p_data_info->avg_rtt.rtt.tmu); in dhd_rtt_convert_results_to_host_v1()
3311 rtt.intvl = ltoh32_ua(&p_data_info->avg_rtt.rtt.intvl); in dhd_rtt_convert_results_to_host_v1()
3312 rtt_report->rtt = (wifi_timespan)FTM_INTVL2NSEC(&rtt) * 1000; /* nano -> pico seconds */ in dhd_rtt_convert_results_to_host_v1()
3313 rtt_report->rtt_sd = ltoh16_ua(&p_data_info->sd_rtt); /* nano -> 0.1 nano */ in dhd_rtt_convert_results_to_host_v1()
3314 DHD_RTT(("rtt_report->rtt : %llu\n", rtt_report->rtt)); in dhd_rtt_convert_results_to_host_v1()
3315 DHD_RTT(("rtt_report->rssi : %d (0.5db)\n", rtt_report->rssi)); in dhd_rtt_convert_results_to_host_v1()
3319 rtt_report->distance = (avg_dist >> 8) * 1000; /* meter -> mm */ in dhd_rtt_convert_results_to_host_v1()
3320 rtt_report->distance += (avg_dist & 0xff) * 1000 / 256; in dhd_rtt_convert_results_to_host_v1()
3322 rtt_report->distance = FTM_INVALID; in dhd_rtt_convert_results_to_host_v1()
3328 rtt_report->ts = (uint64)TIMESPEC_TO_US(ts); in dhd_rtt_convert_results_to_host_v1()
3333 p_time.intvl = ltoh32_ua(&p_data_info->u.retry_after.intvl); in dhd_rtt_convert_results_to_host_v1()
3334 p_time.tmu = ltoh16_ua(&p_data_info->u.retry_after.tmu); in dhd_rtt_convert_results_to_host_v1()
3335 rtt_report->retry_after_duration = FTM_INTVL2SEC(&p_time); /* s -> s */ in dhd_rtt_convert_results_to_host_v1()
3337 ltoh32_ua(&p_data_info->u.retry_after.intvl), in dhd_rtt_convert_results_to_host_v1()
3338 ftm_tmu_value_to_logstr(ltoh16_ua(&p_data_info->u.retry_after.tmu)))); in dhd_rtt_convert_results_to_host_v1()
3341 p_time.intvl = ltoh32_ua(&p_data_info->u.retry_after.intvl); in dhd_rtt_convert_results_to_host_v1()
3342 p_time.tmu = ltoh16_ua(&p_data_info->u.retry_after.tmu); in dhd_rtt_convert_results_to_host_v1()
3343 rtt_report->burst_duration = FTM_INTVL2MSEC(&p_time); /* s -> ms */ in dhd_rtt_convert_results_to_host_v1()
3345 ltoh32_ua(&p_data_info->u.burst_duration.intvl), in dhd_rtt_convert_results_to_host_v1()
3346 ftm_tmu_value_to_logstr(ltoh16_ua(&p_data_info->u.burst_duration.tmu)))); in dhd_rtt_convert_results_to_host_v1()
3347 DHD_RTT(("rtt_report->burst_duration : %d\n", rtt_report->burst_duration)); in dhd_rtt_convert_results_to_host_v1()
3351 num_rtt = ltoh16_ua(&p_data_info->num_rtt); in dhd_rtt_convert_results_to_host_v1()
3354 p_sample = &p_data_info->rtt[0]; in dhd_rtt_convert_results_to_host_v1()
3364 num_ftm = p_data_info->num_ftm; in dhd_rtt_convert_results_to_host_v1()
3367 rssi = (wl_proxd_rssi_t) ltoh16_ua(&p_sample->rssi); in dhd_rtt_convert_results_to_host_v1()
3368 snr = (wl_proxd_snr_t) ltoh16_ua(&p_sample->snr); in dhd_rtt_convert_results_to_host_v1()
3369 bitflips = (wl_proxd_bitflips_t) ltoh16_ua(&p_sample->bitflips); in dhd_rtt_convert_results_to_host_v1()
3372 ltoh32_ua(&p_sample->tof_phy_error); in dhd_rtt_convert_results_to_host_v1()
3375 ltoh32_ua(&p_sample->tof_tgt_phy_error); in dhd_rtt_convert_results_to_host_v1()
3378 ltoh16_ua(&p_sample->tof_tgt_snr); in dhd_rtt_convert_results_to_host_v1()
3381 ltoh16_ua(&p_sample->tof_tgt_bitflips); in dhd_rtt_convert_results_to_host_v1()
3382 dist = ltoh32_ua(&p_sample->distance); in dhd_rtt_convert_results_to_host_v1()
3384 rssi = -1; in dhd_rtt_convert_results_to_host_v1()
3396 i, p_sample->id, rssi, snr, in dhd_rtt_convert_results_to_host_v1()
3400 ltoh32_ua(&p_sample->rtt.intvl), in dhd_rtt_convert_results_to_host_v1()
3401 ftm_tmu_value_to_logstr(ltoh16_ua(&p_sample->rtt.tmu)), in dhd_rtt_convert_results_to_host_v1()
3402 ftm_status_value_to_logstr(ltoh32_ua(&p_sample->status)), in dhd_rtt_convert_results_to_host_v1()
3403 ftm_frame_types[i % num_ftm], p_sample->coreid)); in dhd_rtt_convert_results_to_host_v1()
3441 rtt_report_t *rtt_report = &(rtt_result->report); in dhd_rtt_convert_results_to_host_v2()
3461 flags = ltoh16_ua(&p_data_info->flags); in dhd_rtt_convert_results_to_host_v2()
3463 session_state = ltoh16_ua(&p_data_info->state); in dhd_rtt_convert_results_to_host_v2()
3464 proxd_status = ltoh32_ua(&p_data_info->status); in dhd_rtt_convert_results_to_host_v2()
3465 bcm_ether_ntoa((&(p_data_info->peer)), eabuf); in dhd_rtt_convert_results_to_host_v2()
3467 if ((proxd_status != BCME_OK) || (p_data_info->num_meas == 0)) { in dhd_rtt_convert_results_to_host_v2()
3473 p_data_info->num_meas, p_data_info->num_valid_rtt, in dhd_rtt_convert_results_to_host_v2()
3474 p_data_info->flags)); in dhd_rtt_convert_results_to_host_v2()
3482 avg_dist = ltoh32_ua(&p_data_info->avg_dist); in dhd_rtt_convert_results_to_host_v2()
3484 DHD_RTT((">\tavg_dist=-1m, burst_num=%d, valid_measure_cnt=%d\n", in dhd_rtt_convert_results_to_host_v2()
3485 ltoh16_ua(&p_data_info->burst_num), in dhd_rtt_convert_results_to_host_v2()
3486 p_data_info->num_valid_rtt)); /* in a session */ in dhd_rtt_convert_results_to_host_v2()
3492 ltoh16_ua(&p_data_info->burst_num), in dhd_rtt_convert_results_to_host_v2()
3493 p_data_info->num_valid_rtt, in dhd_rtt_convert_results_to_host_v2()
3494 p_data_info->num_ftm, p_data_info->num_meas, in dhd_rtt_convert_results_to_host_v2()
3495 p_data_info->flags)); /* in a session */ in dhd_rtt_convert_results_to_host_v2()
3497 rtt_result->rtt_detail.num_ota_meas = p_data_info->num_meas; in dhd_rtt_convert_results_to_host_v2()
3498 rtt_result->rtt_detail.result_flags = p_data_info->flags; in dhd_rtt_convert_results_to_host_v2()
3501 p_sample_avg = &p_data_info->rtt[0]; in dhd_rtt_convert_results_to_host_v2()
3502 ftm_tmu_value_to_logstr(ltoh16_ua(&p_sample_avg->rtt.tmu)); in dhd_rtt_convert_results_to_host_v2()
3505 (int16) ltoh16_ua(&p_sample_avg->rssi), in dhd_rtt_convert_results_to_host_v2()
3506 ltoh32_ua(&p_sample_avg->rtt.intvl), in dhd_rtt_convert_results_to_host_v2()
3507 ftm_tmu_value_to_logstr(ltoh16_ua(&p_sample_avg->rtt.tmu)), in dhd_rtt_convert_results_to_host_v2()
3508 ltoh16_ua(&p_data_info->sd_rtt)/10, ltoh16_ua(&p_data_info->sd_rtt)%10, in dhd_rtt_convert_results_to_host_v2()
3509 ltoh32_ua(&p_sample_avg->ratespec), in dhd_rtt_convert_results_to_host_v2()
3510 ltoh32_ua(&p_sample_avg->chanspec))); in dhd_rtt_convert_results_to_host_v2()
3513 rtt_report->addr = p_data_info->peer; in dhd_rtt_convert_results_to_host_v2()
3516 rtt_report->burst_num = ltoh16_ua(&p_data_info->burst_num); in dhd_rtt_convert_results_to_host_v2()
3519 rtt_report->success_num = p_data_info->num_valid_rtt; in dhd_rtt_convert_results_to_host_v2()
3521 /* num-ftm configured */ in dhd_rtt_convert_results_to_host_v2()
3522 rtt_report->ftm_num = p_data_info->num_ftm; in dhd_rtt_convert_results_to_host_v2()
3525 rtt_report->num_per_burst_peer = p_data_info->num_ftm; in dhd_rtt_convert_results_to_host_v2()
3526 rtt_report->negotiated_burst_num = p_data_info->num_ftm; in dhd_rtt_convert_results_to_host_v2()
3529 rtt_report->status = ftm_get_statusmap_info(proxd_status, in dhd_rtt_convert_results_to_host_v2()
3540 rtt_report->success_num) { in dhd_rtt_convert_results_to_host_v2()
3541 rtt_report->status = RTT_STATUS_SUCCESS; in dhd_rtt_convert_results_to_host_v2()
3545 rtt_report->rssi = ABS((wl_proxd_rssi_t)ltoh16_ua(&p_sample_avg->rssi)) * 2; in dhd_rtt_convert_results_to_host_v2()
3548 ratespec = ltoh32_ua(&p_sample_avg->ratespec); in dhd_rtt_convert_results_to_host_v2()
3549 rtt_report->rx_rate = dhd_rtt_convert_rate_to_host(ratespec); in dhd_rtt_convert_results_to_host_v2()
3553 rtt_report->tx_rate = dhd_rtt_convert_rate_to_host(0x2010010); in dhd_rtt_convert_results_to_host_v2()
3555 rtt_report->tx_rate = dhd_rtt_convert_rate_to_host(0xc); in dhd_rtt_convert_results_to_host_v2()
3559 rtt.tmu = ltoh16_ua(&p_sample_avg->rtt.tmu); in dhd_rtt_convert_results_to_host_v2()
3560 rtt.intvl = ltoh32_ua(&p_sample_avg->rtt.intvl); in dhd_rtt_convert_results_to_host_v2()
3561 rtt_report->rtt = (wifi_timespan)FTM_INTVL2NSEC(&rtt) * 1000; /* nano -> pico seconds */ in dhd_rtt_convert_results_to_host_v2()
3562 rtt_report->rtt_sd = ltoh16_ua(&p_data_info->sd_rtt); /* nano -> 0.1 nano */ in dhd_rtt_convert_results_to_host_v2()
3563 DHD_RTT(("rtt_report->rtt : %llu\n", rtt_report->rtt)); in dhd_rtt_convert_results_to_host_v2()
3564 DHD_RTT(("rtt_report->rssi : %d (0.5db)\n", rtt_report->rssi)); in dhd_rtt_convert_results_to_host_v2()
3568 rtt_report->distance = (avg_dist >> 8) * 1000; /* meter -> mm */ in dhd_rtt_convert_results_to_host_v2()
3569 rtt_report->distance += (avg_dist & 0xff) * 1000 / 256; in dhd_rtt_convert_results_to_host_v2()
3572 * (0.1 * rtt_sd/2 * 10^-9) * C * 1000 in dhd_rtt_convert_results_to_host_v2()
3574 rtt_report->distance_sd = rtt_report->rtt_sd * 15; /* mm */ in dhd_rtt_convert_results_to_host_v2()
3576 rtt_report->distance = FTM_INVALID; in dhd_rtt_convert_results_to_host_v2()
3582 rtt_report->ts = (uint64)TIMESPEC_TO_US(ts); in dhd_rtt_convert_results_to_host_v2()
3587 p_time.intvl = ltoh32_ua(&p_data_info->u.retry_after.intvl); in dhd_rtt_convert_results_to_host_v2()
3588 p_time.tmu = ltoh16_ua(&p_data_info->u.retry_after.tmu); in dhd_rtt_convert_results_to_host_v2()
3589 rtt_report->retry_after_duration = FTM_INTVL2SEC(&p_time); /* s -> s */ in dhd_rtt_convert_results_to_host_v2()
3591 ltoh32_ua(&p_data_info->u.retry_after.intvl), in dhd_rtt_convert_results_to_host_v2()
3592 ftm_tmu_value_to_logstr(ltoh16_ua(&p_data_info->u.retry_after.tmu)))); in dhd_rtt_convert_results_to_host_v2()
3595 p_time.intvl = ltoh32_ua(&p_data_info->u.retry_after.intvl); in dhd_rtt_convert_results_to_host_v2()
3596 p_time.tmu = ltoh16_ua(&p_data_info->u.retry_after.tmu); in dhd_rtt_convert_results_to_host_v2()
3597 rtt_report->burst_duration = FTM_INTVL2MSEC(&p_time); /* s -> ms */ in dhd_rtt_convert_results_to_host_v2()
3599 ltoh32_ua(&p_data_info->u.burst_duration.intvl), in dhd_rtt_convert_results_to_host_v2()
3600 ftm_tmu_value_to_logstr(ltoh16_ua(&p_data_info->u.burst_duration.tmu)))); in dhd_rtt_convert_results_to_host_v2()
3601 DHD_RTT(("rtt_report->burst_duration : %d\n", rtt_report->burst_duration)); in dhd_rtt_convert_results_to_host_v2()
3604 num_rtt = ltoh16_ua(&p_data_info->num_rtt); in dhd_rtt_convert_results_to_host_v2()
3607 p_sample = &p_data_info->rtt[1]; in dhd_rtt_convert_results_to_host_v2()
3617 num_ftm = p_data_info->num_ftm; in dhd_rtt_convert_results_to_host_v2()
3620 rssi = (wl_proxd_rssi_t) ltoh16_ua(&p_sample->rssi); in dhd_rtt_convert_results_to_host_v2()
3621 snr = (wl_proxd_snr_t) ltoh16_ua(&p_sample->snr); in dhd_rtt_convert_results_to_host_v2()
3622 bitflips = (wl_proxd_bitflips_t) ltoh16_ua(&p_sample->bitflips); in dhd_rtt_convert_results_to_host_v2()
3625 ltoh32_ua(&p_sample->tof_phy_error); in dhd_rtt_convert_results_to_host_v2()
3628 ltoh32_ua(&p_sample->tof_tgt_phy_error); in dhd_rtt_convert_results_to_host_v2()
3631 ltoh16_ua(&p_sample->tof_tgt_snr); in dhd_rtt_convert_results_to_host_v2()
3634 ltoh16_ua(&p_sample->tof_tgt_bitflips); in dhd_rtt_convert_results_to_host_v2()
3635 dist = ltoh32_ua(&p_sample->distance); in dhd_rtt_convert_results_to_host_v2()
3636 chanspec = ltoh32_ua(&p_sample->chanspec); in dhd_rtt_convert_results_to_host_v2()
3638 rssi = -1; in dhd_rtt_convert_results_to_host_v2()
3650 i, p_sample->id, rssi, snr, in dhd_rtt_convert_results_to_host_v2()
3654 ltoh32_ua(&p_sample->rtt.intvl), in dhd_rtt_convert_results_to_host_v2()
3655 ftm_tmu_value_to_logstr(ltoh16_ua(&p_sample->rtt.tmu)), in dhd_rtt_convert_results_to_host_v2()
3656 ftm_status_value_to_logstr(ltoh32_ua(&p_sample->status)), in dhd_rtt_convert_results_to_host_v2()
3657 ftm_frame_types[i % num_ftm], p_sample->coreid, in dhd_rtt_convert_results_to_host_v2()
3670 * @For legacy Nan-RTT , this API will be called when
3671 * we are cancelling the nan-ranging session or on
3672 * nan-ranging-end event.
3682 for (idx = rtt_status->start_idx; idx < rtt_status->rtt_config.rtt_target_cnt; idx++) { in dhd_rtt_all_directed_targets_done()
3683 if (!rtt_status->rtt_config.target_info[idx].disable) { in dhd_rtt_all_directed_targets_done()
3685 NULL, &rtt_status->rtt_config.target_info[idx].addr)) { in dhd_rtt_all_directed_targets_done()
3706 struct bcm_cfg80211 *cfg = wiphy_priv(ndev->ieee80211_ptr->wiphy); in dhd_rtt_handle_rtt_session_end()
3713 rtt_status->status = RTT_STOPPED; in dhd_rtt_handle_rtt_session_end()
3716 list_for_each_entry(iter, &rtt_status->noti_fn_list, list) { in dhd_rtt_handle_rtt_session_end()
3717 iter->noti_fn(iter->ctx, &rtt_status->rtt_results_cache); in dhd_rtt_handle_rtt_session_end()
3720 if (!list_empty(&rtt_status->rtt_results_cache)) { in dhd_rtt_handle_rtt_session_end()
3723 &rtt_status->rtt_results_cache, list) { in dhd_rtt_handle_rtt_session_end()
3724 list_del(&entry->list); in dhd_rtt_handle_rtt_session_end()
3727 &entry->result_list, list) { in dhd_rtt_handle_rtt_session_end()
3728 list_del(&rtt_result->list); in dhd_rtt_handle_rtt_session_end()
3729 MFREE(dhd->osh, rtt_result, in dhd_rtt_handle_rtt_session_end()
3732 MFREE(dhd->osh, entry, sizeof(rtt_results_header_t)); in dhd_rtt_handle_rtt_session_end()
3737 INIT_LIST_HEAD(&rtt_status->rtt_results_cache); in dhd_rtt_handle_rtt_session_end()
3739 rtt_status->rtt_config.rtt_target_cnt = 0; in dhd_rtt_handle_rtt_session_end()
3740 memset_s(rtt_status->rtt_config.target_info, TARGET_INFO_SIZE(RTT_MAX_TARGET_CNT), in dhd_rtt_handle_rtt_session_end()
3742 rtt_status->cur_idx = 0; in dhd_rtt_handle_rtt_session_end()
3745 if (delayed_work_pending(&rtt_status->proxd_timeout)) { in dhd_rtt_handle_rtt_session_end()
3746 cancel_delayed_work(&rtt_status->proxd_timeout); in dhd_rtt_handle_rtt_session_end()
3755 if (rtt_status->rtt_config.target_list_mode == RNG_TARGET_LIST_MODE_LEGACY) { in dhd_rtt_handle_rtt_session_end()
3759 if (delayed_work_pending(&rtt_status->proxd_timeout)) { in dhd_rtt_handle_rtt_session_end()
3760 cancel_delayed_work(&rtt_status->proxd_timeout); in dhd_rtt_handle_rtt_session_end()
3763 dhd_rtt_set_next_target_idx(dhd, (rtt_status->cur_idx + 1)); in dhd_rtt_handle_rtt_session_end()
3764 if (rtt_status->cur_idx < rtt_status->rtt_config.rtt_target_cnt) { in dhd_rtt_handle_rtt_session_end()
3767 rtt_status->rtt_sched = TRUE; in dhd_rtt_handle_rtt_session_end()
3768 schedule_work(&rtt_status->work); in dhd_rtt_handle_rtt_session_end()
3772 else if (rtt_status->rtt_config.target_list_mode == RNG_TARGET_LIST_MODE_NAN) { in dhd_rtt_handle_rtt_session_end()
3792 rtt_results_header = (rtt_results_header_t *)MALLOCZ(rtt_status->dhd->osh, in dhd_rtt_create_failure_result()
3795 ret = -ENOMEM; in dhd_rtt_create_failure_result()
3798 rtt_target_info = &rtt_status->rtt_config.target_info[rtt_status->cur_idx]; in dhd_rtt_create_failure_result()
3800 INIT_LIST_HEAD(&rtt_results_header->result_list); in dhd_rtt_create_failure_result()
3802 (void)memcpy_s(&rtt_results_header->peer_mac, in dhd_rtt_create_failure_result()
3804 list_add_tail(&rtt_results_header->list, &rtt_status->rtt_results_cache); in dhd_rtt_create_failure_result()
3807 rtt_result = (rtt_result_t *)MALLOCZ(rtt_status->dhd->osh, in dhd_rtt_create_failure_result()
3810 ret = -ENOMEM; in dhd_rtt_create_failure_result()
3812 MFREE(rtt_status->dhd->osh, rtt_results_header, sizeof(rtt_results_header_t)); in dhd_rtt_create_failure_result()
3816 rtt_result->report.ftm_num = rtt_target_info->num_frames_per_burst; in dhd_rtt_create_failure_result()
3817 rtt_result->report.type = RTT_TWO_WAY; in dhd_rtt_create_failure_result()
3818 DHD_RTT(("report->ftm_num : %d\n", rtt_result->report.ftm_num)); in dhd_rtt_create_failure_result()
3819 rtt_result->report_len = RTT_REPORT_SIZE; in dhd_rtt_create_failure_result()
3820 rtt_result->report.status = RTT_STATUS_FAIL_NO_RSP; in dhd_rtt_create_failure_result()
3822 (void)memcpy_s(&rtt_result->report.addr, ETHER_ADDR_LEN, in dhd_rtt_create_failure_result()
3823 &rtt_target_info->addr, ETHER_ADDR_LEN); in dhd_rtt_create_failure_result()
3824 rtt_result->report.distance = FTM_INVALID; in dhd_rtt_create_failure_result()
3825 list_add_tail(&rtt_result->list, &rtt_results_header->result_list); in dhd_rtt_create_failure_result()
3826 rtt_results_header->result_cnt++; in dhd_rtt_create_failure_result()
3827 rtt_results_header->result_tot_len += rtt_result->report_len; in dhd_rtt_create_failure_result()
3839 list_for_each_entry(entry, &rtt_status->rtt_results_cache, list) { in dhd_rtt_get_report_header()
3841 if (!memcmp(&entry->peer_mac, addr, ETHER_ADDR_LEN)) { in dhd_rtt_get_report_header()
3858 mutex_lock(&rtt_status->rtt_mutex); in dhd_rtt_handle_nan_rtt_session_end()
3866 mutex_unlock(&rtt_status->rtt_mutex); in dhd_rtt_handle_nan_rtt_session_end()
3875 if (rtt_result && (rtt_result->report.success_num != 0)) { in dhd_rtt_is_valid_measurement()
3904 (uint8 *)&proxd_ev_data->tlvs[0], tlvs_len, in dhd_rtt_parse_result_event()
3912 rtt_result->report.type = RTT_TWO_WAY; in dhd_rtt_parse_result_event()
3913 DHD_RTT(("report->ftm_num : %d\n", rtt_result->report.ftm_num)); in dhd_rtt_parse_result_event()
3914 rtt_result->report_len = RTT_REPORT_SIZE; in dhd_rtt_parse_result_event()
3915 rtt_result->detail_len = sizeof(rtt_result->rtt_detail); in dhd_rtt_parse_result_event()
3943 rtt_results_header = (rtt_results_header_t *)MALLOCZ(rtt_status->dhd->osh, in dhd_rtt_handle_directed_rtt_burst_end()
3951 INIT_LIST_HEAD(&rtt_results_header->result_list); in dhd_rtt_handle_directed_rtt_burst_end()
3953 (void)memcpy_s(&rtt_results_header->peer_mac, ETHER_ADDR_LEN, in dhd_rtt_handle_directed_rtt_burst_end()
3955 list_add_tail(&rtt_results_header->list, &rtt_status->rtt_results_cache); in dhd_rtt_handle_directed_rtt_burst_end()
3962 list_add_tail(&rtt_result->list, &rtt_results_header->result_list); in dhd_rtt_handle_directed_rtt_burst_end()
3963 rtt_results_header->result_cnt++; in dhd_rtt_handle_directed_rtt_burst_end()
3964 rtt_results_header->result_tot_len += rtt_result->report_len + in dhd_rtt_handle_directed_rtt_burst_end()
3965 rtt_result->detail_len; in dhd_rtt_handle_directed_rtt_burst_end()
3981 list_del(&rtt_results_header->list); in dhd_rtt_handle_directed_rtt_burst_end()
3982 MFREE(dhd->osh, rtt_results_header, in dhd_rtt_handle_directed_rtt_burst_end()
4003 rtt_status = rtt_result->report.status; in dhd_rtt_nan_range_report()
4005 range_res.dist_mm = rtt_result->report.distance; in dhd_rtt_nan_range_report()
4008 &rtt_result->report.addr, ETHER_ADDR_LEN); in dhd_rtt_nan_range_report()
4027 int burst_status = -1; in dhd_rtt_handle_nan_burst_end()
4030 cfg = wiphy_priv(ndev->ieee80211_ptr->wiphy); in dhd_rtt_handle_nan_burst_end()
4035 mutex_lock(&rtt_status->rtt_mutex); in dhd_rtt_handle_nan_burst_end()
4047 geofence_rtt = (rng_inst->range_type in dhd_rtt_handle_nan_burst_end()
4055 if (rng_inst->range_role == NAN_RANGING_ROLE_RESPONDER) { in dhd_rtt_handle_nan_burst_end()
4070 if (rng_inst->ftm_ssn_retry_count < NAN_RTT_FTM_SSN_RETRIES) { in dhd_rtt_handle_nan_burst_end()
4071 rng_inst->ftm_ssn_retry_count++; in dhd_rtt_handle_nan_burst_end()
4072 ftm_retry_cnt = rng_inst->ftm_ssn_retry_count; in dhd_rtt_handle_nan_burst_end()
4087 if (rtt_status->flags == WL_PROXD_SESSION_FLAG_TARGET) { in dhd_rtt_handle_nan_burst_end()
4095 rtt_result = (rtt_result_t *)MALLOCZ(dhd->osh, sizeof(rtt_result_t)); in dhd_rtt_handle_nan_burst_end()
4109 mutex_unlock(&rtt_status->rtt_mutex); in dhd_rtt_handle_nan_burst_end()
4112 if (rng_inst->range_role == NAN_RANGING_ROLE_INITIATOR) { in dhd_rtt_handle_nan_burst_end()
4116 DHD_RTT_ERR(("nan-rtt: Burst End handling failed err %d is_geofence %d " in dhd_rtt_handle_nan_burst_end()
4120 MFREE(dhd->osh, rtt_result, in dhd_rtt_handle_nan_burst_end()
4150 if (ntoh32_ua((void *)&event->datalen) < OFFSETOF(wl_proxd_event_t, tlvs)) { in dhd_rtt_event_handler()
4152 ntoh32_ua((void *)&event->datalen))); in dhd_rtt_event_handler()
4153 return -EINVAL; in dhd_rtt_event_handler()
4155 event_type = ntoh32_ua((void *)&event->event_type); in dhd_rtt_event_handler()
4158 return -EINVAL; in dhd_rtt_event_handler()
4163 return -EINVAL; in dhd_rtt_event_handler()
4166 version = ltoh16(p_event->version); in dhd_rtt_event_handler()
4168 DHD_RTT_ERR(("ignore non-ftm event version = 0x%0x < WL_PROXD_API_VERSION (0x%x)\n", in dhd_rtt_event_handler()
4173 event_type = (wl_proxd_event_type_t) ltoh16(p_event->type); in dhd_rtt_event_handler()
4176 p_event->type, ntoh16(p_event->type), ltoh16(p_event->type))); in dhd_rtt_event_handler()
4180 ret = -EINVAL; in dhd_rtt_event_handler()
4184 if (ltoh16(p_event->len) < OFFSETOF(wl_proxd_event_t, tlvs)) { in dhd_rtt_event_handler()
4185 DHD_RTT_ERR(("invalid FTM event length:%d\n", ltoh16(p_event->len))); in dhd_rtt_event_handler()
4186 ret = -EINVAL; in dhd_rtt_event_handler()
4189 tlvs_len = ltoh16(p_event->len) - OFFSETOF(wl_proxd_event_t, tlvs); in dhd_rtt_event_handler()
4191 p_loginfo->text, in dhd_rtt_event_handler()
4193 ltoh16(p_event->len), in dhd_rtt_event_handler()
4194 ltoh16(p_event->method), in dhd_rtt_event_handler()
4195 ltoh16(p_event->sid), in dhd_rtt_event_handler()
4200 dhd_rtt_is_nan_peer(dhd, &event->addr)) { in dhd_rtt_event_handler()
4202 ret = dhd_rtt_handle_nan_burst_end(dhd, &event->addr, p_event, tlvs_len); in dhd_rtt_event_handler()
4209 mutex_lock(&rtt_status->rtt_mutex); in dhd_rtt_event_handler()
4214 if (rtt_status->flags == WL_PROXD_SESSION_FLAG_TARGET) { in dhd_rtt_event_handler()
4223 target = &rtt_status->rtt_config.target_info[rtt_status->cur_idx]; in dhd_rtt_event_handler()
4224 if (memcmp(&target->addr, &event->addr, ETHER_ADDR_LEN)) { in dhd_rtt_event_handler()
4226 " expected peer "MACDBG"\n", MAC2STRDBG(&event->addr), in dhd_rtt_event_handler()
4227 MAC2STRDBG(&target->addr))); in dhd_rtt_event_handler()
4236 &rtt_results_header, &event->addr); in dhd_rtt_event_handler()
4252 rtt_result = (rtt_result_t *)MALLOCZ(dhd->osh, sizeof(rtt_result_t)); in dhd_rtt_event_handler()
4254 ret = -ENOMEM; in dhd_rtt_event_handler()
4257 ret = dhd_rtt_handle_directed_rtt_burst_end(dhd, &event->addr, in dhd_rtt_event_handler()
4265 * Free rtt_result irrespectively, for non-cfg, in dhd_rtt_event_handler()
4268 MFREE(dhd->osh, rtt_result, in dhd_rtt_event_handler()
4284 (uint8 *)&p_event->tlvs[0], tlvs_len, in dhd_rtt_event_handler()
4295 dhd_rtt_create_failure_result(rtt_status, &event->addr); in dhd_rtt_event_handler()
4298 MAC2STRDBG(&event->addr))); in dhd_rtt_event_handler()
4327 if (!(buffer = (void *)MALLOCZ(dhd->osh, tlvs_len))) { in dhd_rtt_event_handler()
4328 ret = -ENOMEM; in dhd_rtt_event_handler()
4333 (uint8 *)&p_event->tlvs[0], tlvs_len, in dhd_rtt_event_handler()
4335 MFREE(dhd->osh, buffer, tlvs_len); in dhd_rtt_event_handler()
4347 if (!(buffer = (void *)MALLOCZ(dhd->osh, tlvs_len))) { in dhd_rtt_event_handler()
4348 ret = -ENOMEM; in dhd_rtt_event_handler()
4353 (uint8 *)&p_event->tlvs[0], tlvs_len, in dhd_rtt_event_handler()
4355 MFREE(dhd->osh, buffer, tlvs_len); in dhd_rtt_event_handler()
4370 mutex_unlock(&rtt_status->rtt_mutex); in dhd_rtt_event_handler()
4387 dhd = rtt_status->dhd; in dhd_rtt_work()
4408 if (rtt_status->rtt_capa.proto & RTT_CAP_ONE_WAY) in dhd_rtt_capability()
4409 capa->rtt_one_sided_supported = 1; in dhd_rtt_capability()
4410 if (rtt_status->rtt_capa.proto & RTT_CAP_FTM_WAY) in dhd_rtt_capability()
4411 capa->rtt_ftm_supported = 1; in dhd_rtt_capability()
4413 if (rtt_status->rtt_capa.feature & RTT_FEATURE_LCI) in dhd_rtt_capability()
4414 capa->lci_support = 1; in dhd_rtt_capability()
4415 if (rtt_status->rtt_capa.feature & RTT_FEATURE_LCR) in dhd_rtt_capability()
4416 capa->lcr_support = 1; in dhd_rtt_capability()
4417 if (rtt_status->rtt_capa.feature & RTT_FEATURE_PREAMBLE) in dhd_rtt_capability()
4418 capa->preamble_support = 1; in dhd_rtt_capability()
4419 if (rtt_status->rtt_capa.feature & RTT_FEATURE_BW) in dhd_rtt_capability()
4420 capa->bw_support = 1; in dhd_rtt_capability()
4423 capa->preamble_support = rtt_status->rtt_capa.preamble; in dhd_rtt_capability()
4424 capa->bw_support = rtt_status->rtt_capa.bw; in dhd_rtt_capability()
4446 channel_info->width = WIFI_CHAN_WIDTH_20; in dhd_rtt_avail_channel()
4449 channel_info->width = WIFI_CHAN_WIDTH_40; in dhd_rtt_avail_channel()
4452 channel_info->width = WIFI_CHAN_WIDTH_80; in dhd_rtt_avail_channel()
4457 channel_info->center_freq = in dhd_rtt_avail_channel()
4460 channel_info->center_freq = in dhd_rtt_avail_channel()
4463 if ((channel_info->width == WIFI_CHAN_WIDTH_80) || in dhd_rtt_avail_channel()
4464 (channel_info->width == WIFI_CHAN_WIDTH_40)) { in dhd_rtt_avail_channel()
4466 channel_info->center_freq0 = in dhd_rtt_avail_channel()
4500 channel.width = channel_info->width; in dhd_rtt_enable_responder()
4501 channel.center_freq = channel_info->center_freq; in dhd_rtt_enable_responder()
4502 channel.center_freq0 = channel_info->center_freq; in dhd_rtt_enable_responder()
4517 rtt_status->pm = PM_OFF; in dhd_rtt_enable_responder()
4518 err = wldev_ioctl_get(dev, WLC_GET_PM, &rtt_status->pm, sizeof(rtt_status->pm)); in dhd_rtt_enable_responder()
4519 DHD_RTT(("Current PM value read %d\n", rtt_status->pm)); in dhd_rtt_enable_responder()
4526 rtt_status->pm_restore = FALSE; in dhd_rtt_enable_responder()
4528 rtt_status->pm_restore = TRUE; in dhd_rtt_enable_responder()
4539 rtt_status->status = RTT_ENABLED; in dhd_rtt_enable_responder()
4545 rtt_status->flags = WL_PROXD_SESSION_FLAG_TARGET; in dhd_rtt_enable_responder()
4551 rtt_status->status = RTT_STOPPED; in dhd_rtt_enable_responder()
4555 if (rtt_status->pm_restore) { in dhd_rtt_enable_responder()
4561 rtt_status->pm_restore = FALSE; in dhd_rtt_enable_responder()
4584 rtt_status->status = RTT_STOPPED; in dhd_rtt_cancel_responder()
4585 if (rtt_status->pm_restore) { in dhd_rtt_cancel_responder()
4587 DHD_RTT(("pm_restore =%d \n", rtt_status->pm_restore)); in dhd_rtt_cancel_responder()
4592 rtt_status->pm_restore = FALSE; in dhd_rtt_cancel_responder()
4604 if ((dhd->wlc_ver_major > RTT_PARALLEL_SSNS_SUPPORTED_MAJ_VER) || in dhd_rtt_parallel_nan_rtt_sessions_supported()
4605 ((dhd->wlc_ver_major == RTT_PARALLEL_SSNS_SUPPORTED_MAJ_VER) && in dhd_rtt_parallel_nan_rtt_sessions_supported()
4606 (dhd->wlc_ver_minor >= RTT_PARALLEL_SSNS_SUPPORTED_MIN_VER))) { in dhd_rtt_parallel_nan_rtt_sessions_supported()
4640 dhd->rtt_supported = FALSE; in dhd_rtt_attach()
4641 if (dhd->rtt_state) { in dhd_rtt_attach()
4645 dhd->rtt_state = (rtt_status_info_t *)MALLOCZ(dhd->osh, in dhd_rtt_attach()
4647 if (dhd->rtt_state == NULL) { in dhd_rtt_attach()
4652 bzero(dhd->rtt_state, sizeof(rtt_status_info_t)); in dhd_rtt_attach()
4654 rtt_status->rtt_config.target_info = in dhd_rtt_attach()
4655 (rtt_target_info_t *)MALLOCZ(dhd->osh, in dhd_rtt_attach()
4657 if (rtt_status->rtt_config.target_info == NULL) { in dhd_rtt_attach()
4663 rtt_status->dhd = dhd; in dhd_rtt_attach()
4664 mutex_init(&rtt_status->rtt_mutex); in dhd_rtt_attach()
4665 mutex_init(&rtt_status->geofence_mutex); in dhd_rtt_attach()
4666 INIT_LIST_HEAD(&rtt_status->noti_fn_list); in dhd_rtt_attach()
4667 INIT_LIST_HEAD(&rtt_status->rtt_results_cache); in dhd_rtt_attach()
4668 INIT_WORK(&rtt_status->work, dhd_rtt_work); in dhd_rtt_attach()
4670 INIT_DELAYED_WORK(&rtt_status->proxd_timeout, dhd_rtt_timeout_work); in dhd_rtt_attach()
4673 INIT_DELAYED_WORK(&rtt_status->rtt_retry_timer, dhd_rtt_retry_work); in dhd_rtt_attach()
4677 MFREE(dhd->osh, rtt_status->rtt_config.target_info, in dhd_rtt_attach()
4679 MFREE(dhd->osh, dhd->rtt_state, sizeof(rtt_status_info_t)); in dhd_rtt_attach()
4709 MFREE(dhd->osh, rtt_status->rtt_config.target_info, in dhd_rtt_detach()
4711 MFREE(dhd->osh, dhd->rtt_state, sizeof(rtt_status_info_t)); in dhd_rtt_detach()
4739 dhd->rtt_supported = TRUE; in dhd_rtt_init()
4741 /* rtt_status->rtt_capa.proto |= RTT_CAP_ONE_WAY; */ in dhd_rtt_init()
4742 rtt_status->rtt_capa.proto |= RTT_CAP_FTM_WAY; in dhd_rtt_init()
4745 rtt_status->rtt_capa.feature |= RTT_FEATURE_LCI; in dhd_rtt_init()
4746 rtt_status->rtt_capa.feature |= RTT_FEATURE_LCR; in dhd_rtt_init()
4747 rtt_status->rtt_capa.feature |= RTT_FEATURE_PREAMBLE; in dhd_rtt_init()
4748 rtt_status->rtt_capa.preamble |= RTT_PREAMBLE_VHT; in dhd_rtt_init()
4749 rtt_status->rtt_capa.preamble |= RTT_PREAMBLE_HT; in dhd_rtt_init()
4752 rtt_status->rtt_capa.feature |= RTT_FEATURE_BW; in dhd_rtt_init()
4753 rtt_status->rtt_capa.bw |= RTT_BW_20; in dhd_rtt_init()
4754 rtt_status->rtt_capa.bw |= RTT_BW_40; in dhd_rtt_init()
4755 rtt_status->rtt_capa.bw |= RTT_BW_80; in dhd_rtt_init()
4767 rtt_status->max_nan_rtt_sessions = dhd_rtt_get_max_nan_rtt_sessions_supported(dhd); in dhd_rtt_init()
4770 rtt_status->all_cancel = TRUE; in dhd_rtt_init()
4800 if (delayed_work_pending(&rtt_status->rtt_retry_timer)) { in dhd_rtt_deinit()
4801 cancel_delayed_work_sync(&rtt_status->rtt_retry_timer); in dhd_rtt_deinit()
4805 if (work_pending(&rtt_status->work)) { in dhd_rtt_deinit()
4806 cancel_work_sync(&rtt_status->work); in dhd_rtt_deinit()
4807 rtt_status->rtt_sched = FALSE; in dhd_rtt_deinit()
4810 if (delayed_work_pending(&rtt_status->proxd_timeout)) { in dhd_rtt_deinit()
4811 cancel_delayed_work_sync(&rtt_status->proxd_timeout); in dhd_rtt_deinit()
4819 rtt_status->rtt_config.rtt_target_cnt && in dhd_rtt_deinit()
4820 (rtt_status->cur_idx < rtt_status->rtt_config.rtt_target_cnt)) { in dhd_rtt_deinit()
4822 rtt_target = &rtt_status->rtt_config.target_info[rtt_status->cur_idx]; in dhd_rtt_deinit()
4823 if (rtt_target->peer == RTT_PEER_AP) { in dhd_rtt_deinit()
4829 rtt_status->status = RTT_STOPPED; in dhd_rtt_deinit()
4833 if (!list_empty(&rtt_status->noti_fn_list)) { in dhd_rtt_deinit()
4834 list_for_each_entry_safe(iter, iter2, &rtt_status->noti_fn_list, list) { in dhd_rtt_deinit()
4835 list_del(&iter->list); in dhd_rtt_deinit()
4836 MFREE(dhd->osh, iter, sizeof(struct rtt_noti_callback)); in dhd_rtt_deinit()
4840 if (!list_empty(&rtt_status->rtt_results_cache)) { in dhd_rtt_deinit()
4841 list_for_each_entry_safe(rtt_header, next, &rtt_status->rtt_results_cache, list) { in dhd_rtt_deinit()
4842 list_del(&rtt_header->list); in dhd_rtt_deinit()
4844 &rtt_header->result_list, list) { in dhd_rtt_deinit()
4845 list_del(&rtt_result->list); in dhd_rtt_deinit()
4846 MFREE(dhd->osh, rtt_result, sizeof(rtt_result_t)); in dhd_rtt_deinit()
4848 MFREE(dhd->osh, rtt_header, sizeof(rtt_results_header_t)); in dhd_rtt_deinit()