/* Set/Get flwo ring priority map */ int dhd_flow_prio_map(dhd_pub_t *dhd, uint8 *map, bool set) { uint8 iovbuf[24]; int ret; if (!set) { ret = dhd_iovar(dhd, 0, "bus:fl_prio_map", NULL, 0, (char *)iovbuf, sizeof(iovbuf), FALSE); if (ret) { DHD_ERROR(("%s: failed to get fl_prio_map\n", __FUNCTION__)); return BCME_ERROR; } *map = iovbuf[0]; return BCME_OK; } ret = dhd_iovar(dhd, 0, "bus:fl_prio_map", (char *)map, sizeof(uint8), NULL, 0, TRUE); if (ret < 0) { DHD_ERROR(("%s: failed to set fl_prio_map \n", __FUNCTION__)); return BCME_ERROR; } return BCME_OK; }
static int dhd_rtt_start(dhd_pub_t *dhd) { int err = BCME_OK; int mpc = 0; int nss, mcs, bw; uint32 rspec = 0; int8 eabuf[ETHER_ADDR_STR_LEN]; int8 chanbuf[CHANSPEC_STR_LEN]; bool set_mpc = FALSE; wl_proxd_iovar_t proxd_iovar; wl_proxd_params_iovar_t proxd_params; wl_proxd_params_iovar_t proxd_tune; wl_proxd_params_tof_method_t *tof_params = &proxd_params.u.tof_params; rtt_status_info_t *rtt_status; rtt_target_info_t *rtt_target; NULL_CHECK(dhd, "dhd is NULL", err); rtt_status = GET_RTTSTATE(dhd); NULL_CHECK(rtt_status, "rtt_status is NULL", err); /* turn off mpc in case of non-associted */ if (!dhd_is_associated(dhd, NULL, NULL)) { err = dhd_iovar(dhd, 0, "mpc", (char *)&mpc, sizeof(mpc), 1); if (err < 0) { DHD_ERROR(("%s : failed to set proxd_tune\n", __FUNCTION__)); goto exit; } set_mpc = TRUE; } if (rtt_status->cur_idx >= rtt_status->rtt_config.rtt_target_cnt) { err = BCME_RANGE; goto exit; } DHD_RTT(("%s enter\n", __FUNCTION__)); bzero(&proxd_tune, sizeof(proxd_tune)); bzero(&proxd_params, sizeof(proxd_params)); mutex_lock(&rtt_status->rtt_mutex); /* Get a target information */ rtt_target = &rtt_status->rtt_config.target_info[rtt_status->cur_idx]; mutex_unlock(&rtt_status->rtt_mutex); /* set role */ proxd_iovar.method = PROXD_TOF_METHOD; proxd_iovar.mode = WL_PROXD_MODE_INITIATOR; /* make sure that proxd is stop */ //dhd_iovar(dhd, 0, "proxd_stop", (char *)NULL, 0, 1); err = dhd_iovar(dhd, 0, "proxd", (char *)&proxd_iovar, sizeof(proxd_iovar), 1); if (err < 0 && err != BCME_BUSY) { DHD_ERROR(("%s : failed to set proxd %d\n", __FUNCTION__, err)); goto exit; } /* mac address */ bcopy(&rtt_target->addr, &tof_params->tgt_mac, ETHER_ADDR_LEN); /* frame count */ if (rtt_target->ftm_cnt > RTT_MAX_FRAME_CNT) rtt_target->ftm_cnt = RTT_MAX_FRAME_CNT; if (rtt_target->ftm_cnt) tof_params->ftm_cnt = htol16(rtt_target->ftm_cnt); else tof_params->ftm_cnt = htol16(DEFAULT_FTM_CNT); if (rtt_target->retry_cnt > RTT_MAX_RETRY_CNT) rtt_target->retry_cnt = RTT_MAX_RETRY_CNT; /* retry count */ if (rtt_target->retry_cnt) tof_params->retry_cnt = htol16(rtt_target->retry_cnt); else tof_params->retry_cnt = htol16(DEFAULT_RETRY_CNT); /* chanspec */ tof_params->chanspec = htol16(rtt_target->chanspec); /* set parameter */ DHD_RTT(("Target addr(Idx %d) %s, Channel : %s for RTT (ftm_cnt %d, rety_cnt : %d)\n", rtt_status->cur_idx, bcm_ether_ntoa((const struct ether_addr *)&rtt_target->addr, eabuf), wf_chspec_ntoa(rtt_target->chanspec, chanbuf), rtt_target->ftm_cnt, rtt_target->retry_cnt)); if (rtt_target->type == RTT_ONE_WAY) { proxd_tune.u.tof_tune.flags = htol32(WL_PROXD_FLAG_ONEWAY); /* report RTT results for initiator */ proxd_tune.u.tof_tune.flags |= htol32(WL_PROXD_FLAG_INITIATOR_RPTRTT); proxd_tune.u.tof_tune.vhtack = 0; tof_params->tx_rate = htol16(WL_RATE_6M); tof_params->vht_rate = htol16((WL_RATE_6M >> 16)); } else { /* RTT TWO WAY */