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