Lines Matching +full:cmd +full:- +full:timeout +full:- +full:ms
3 /*-
6 * Copyright (c) 2015-2016 Andriy Voskoboinyk <avos@FreeBSD.org>
65 struct r92c_fw_cmd cmd; in r92c_fw_cmd() local
68 KASSERT(len <= sizeof(cmd.msg), in r92c_fw_cmd()
70 __func__, len, sizeof(cmd.msg))); in r92c_fw_cmd()
72 if (!(sc->sc_flags & RTWN_FW_LOADED)) { in r92c_fw_cmd()
81 if (!(rtwn_read_1(sc, R92C_HMETFR) & (1 << sc->fwcur))) in r92c_fw_cmd()
86 device_printf(sc->sc_dev, in r92c_fw_cmd()
90 memset(&cmd, 0, sizeof(cmd)); in r92c_fw_cmd()
91 cmd.id = id; in r92c_fw_cmd()
94 cmd.id |= R92C_CMD_FLAG_EXT; in r92c_fw_cmd()
95 memcpy(cmd.msg, (const uint8_t *)buf + 2, len - 2); in r92c_fw_cmd()
96 memcpy(cmd.msg + 3, buf, 2); in r92c_fw_cmd()
98 memcpy(cmd.msg, buf, len); in r92c_fw_cmd()
102 error = rtwn_write_2(sc, R92C_HMEBOX_EXT(sc->fwcur), in r92c_fw_cmd()
103 *(uint16_t *)((uint8_t *)&cmd + 4)); in r92c_fw_cmd()
107 error = rtwn_write_4(sc, R92C_HMEBOX(sc->fwcur), in r92c_fw_cmd()
108 *(uint32_t *)&cmd); in r92c_fw_cmd()
112 sc->fwcur = (sc->fwcur + 1) % R92C_H2C_NBOX; in r92c_fw_cmd()
169 struct r92c_fw_cmd_macid_cfg cmd; in r92c_send_ra_cmd() local
180 cmd.macid = macid | R92C_CMD_MACID_VALID; in r92c_send_ra_cmd()
182 cmd.macid |= R92C_CMD_MACID_SGI; in r92c_send_ra_cmd()
183 cmd.mask = htole32(mode << 28 | rates); in r92c_send_ra_cmd()
184 error = r92c_fw_cmd(sc, R92C_CMD_MACID_CONFIG, &cmd, sizeof(cmd)); in r92c_send_ra_cmd()
186 device_printf(sc->sc_dev, in r92c_send_ra_cmd()
205 if (sc->node_list[macid] == NULL) { in r92c_init_ra()
212 ni = ieee80211_ref_node(sc->node_list[macid]); in r92c_init_ra()
213 if (ni->ni_flags & IEEE80211_NODE_HT) in r92c_init_ra()
214 rs_ht = &ni->ni_htrates; in r92c_init_ra()
219 * firmware; and for this chipset 2-stream 11n support is enough. in r92c_init_ra()
221 rtwn_get_rates(sc, &ni->ni_rates, rs_ht, &rates, &htrates, &maxrate, 0); in r92c_init_ra()
225 if (sc->sc_ratectl == RTWN_RATECTL_FW) { in r92c_init_ra()
231 /* Re-calculate short-gi based on op mode */ in r92c_init_ra()
232 if (IEEE80211_IS_CHAN_HT40(ni->ni_chan)) in r92c_init_ra()
234 else if (IEEE80211_IS_CHAN_HT20(ni->ni_chan)) in r92c_init_ra()
244 * enabled - the firmware will be controlling this per MACID. in r92c_init_ra()
246 if (sc->sc_ratectl != RTWN_RATECTL_FW) in r92c_init_ra()
256 struct r92c_softc *rs = sc->sc_priv; in r92c_joinbss_rpt()
258 struct r92c_fw_cmd_joinbss_rpt cmd; in r92c_joinbss_rpt() local
260 if (sc->vaps[0] == NULL) /* XXX fix */ in r92c_joinbss_rpt()
263 vap = &sc->vaps[0]->vap; in r92c_joinbss_rpt()
264 if ((vap->iv_state == IEEE80211_S_RUN) ^ in r92c_joinbss_rpt()
265 !(rs->rs_flags & R92C_FLAG_ASSOCIATED)) in r92c_joinbss_rpt()
268 if (rs->rs_flags & R92C_FLAG_ASSOCIATED) { in r92c_joinbss_rpt()
269 cmd.mstatus = R92C_MSTATUS_DISASSOC; in r92c_joinbss_rpt()
270 rs->rs_flags &= ~R92C_FLAG_ASSOCIATED; in r92c_joinbss_rpt()
272 cmd.mstatus = R92C_MSTATUS_ASSOC; in r92c_joinbss_rpt()
273 rs->rs_flags |= R92C_FLAG_ASSOCIATED; in r92c_joinbss_rpt()
276 if (r92c_fw_cmd(sc, R92C_CMD_JOINBSS_RPT, &cmd, sizeof(cmd)) != 0) { in r92c_joinbss_rpt()
277 device_printf(sc->sc_dev, "%s: cannot change media status!\n", in r92c_joinbss_rpt()
311 if (off && vap->iv_state == IEEE80211_S_RUN && in r92c_set_pwrmode()
312 (vap->iv_flags & IEEE80211_F_PMGTON)) in r92c_set_pwrmode()
320 device_printf(sc->sc_dev, in r92c_set_pwrmode()
333 struct r92c_fw_cmd_rssi cmd; in r92c_set_rssi() local
336 cmd.reserved = 0; in r92c_set_rssi()
339 for (i = 0; i < sc->macid_limit; i++) { in r92c_set_rssi()
341 ni = sc->node_list[i]; in r92c_set_rssi()
346 cmd.macid = i; in r92c_set_rssi()
347 cmd.pwdb = rn->avg_pwdb; in r92c_set_rssi()
350 __func__, i, rn->avg_pwdb); in r92c_set_rssi()
353 r92c_fw_cmd(sc, R92C_CMD_RSSI_SETTING, &cmd, sizeof(cmd)); in r92c_set_rssi()
368 if (sc->sc_ratectl != RTWN_RATECTL_NET80211) { in r92c_ratectl_tx_complete()
370 device_printf(sc->sc_dev, "%s called while ratectl = %d!\n", in r92c_ratectl_tx_complete()
371 __func__, sc->sc_ratectl); in r92c_ratectl_tx_complete()
377 device_printf(sc->sc_dev, in r92c_ratectl_tx_complete()
386 __func__, rpt->rptb0, rpt->rptb1, rpt->queue_time_low, in r92c_ratectl_tx_complete()
387 rpt->queue_time_high, rpt->rptb4, rpt->rptb5, rpt->rptb6, in r92c_ratectl_tx_complete()
388 rpt->rptb7); in r92c_ratectl_tx_complete()
390 macid = MS(rpt->rptb5, R92C_RPTB5_MACID); in r92c_ratectl_tx_complete()
391 if (macid > sc->macid_limit) { in r92c_ratectl_tx_complete()
392 device_printf(sc->sc_dev, in r92c_ratectl_tx_complete()
398 ntries = MS(rpt->rptb0, R92C_RPTB0_RETRY_CNT); in r92c_ratectl_tx_complete()
401 ni = sc->node_list[macid]; in r92c_ratectl_tx_complete()
405 (rpt->rptb7 & R92C_RPTB7_PKT_OK) ? "" : " not", in r92c_ratectl_tx_complete()
410 if (rpt->rptb7 & R92C_RPTB7_PKT_OK) in r92c_ratectl_tx_complete()
412 else if (rpt->rptb6 & R92C_RPTB6_RETRY_OVER) in r92c_ratectl_tx_complete()
414 else if (rpt->rptb6 & R92C_RPTB6_LIFE_EXPIRE) in r92c_ratectl_tx_complete()
426 if (sc->sc_tx_n_active > 0 && --sc->sc_tx_n_active <= 1) in r92c_ratectl_tx_complete()
435 struct r92c_softc *rs = sc->sc_priv; in r92c_handle_c2h_task()
441 if (!(sc->sc_flags & RTWN_RUNNING)) in r92c_handle_c2h_task()
450 id = MS(len, R92C_C2H_EVTB0_ID); in r92c_handle_c2h_task()
451 len = MS(len, R92C_C2H_EVTB0_LEN); in r92c_handle_c2h_task()
465 device_printf(sc->sc_dev, in r92c_handle_c2h_task()
476 /* Adjust timeout for next call. */ in r92c_handle_c2h_task()
477 if (rs->rs_c2h_pending != 0) { in r92c_handle_c2h_task()
478 rs->rs_c2h_pending = 0; in r92c_handle_c2h_task()
479 rs->rs_c2h_paused = 0; in r92c_handle_c2h_task()
481 rs->rs_c2h_paused++; in r92c_handle_c2h_task()
483 if (rs->rs_c2h_paused > R92C_TX_PAUSED_THRESHOLD) in r92c_handle_c2h_task()
484 rs->rs_c2h_timeout = hz; in r92c_handle_c2h_task()
486 rs->rs_c2h_timeout = MAX(hz / 100, 1); in r92c_handle_c2h_task()
489 callout_reset(&rs->rs_c2h_report, rs->rs_c2h_timeout, in r92c_handle_c2h_task()