2457 nrate = in->in_txrate;
2458 switch (mod) {
2459 case -1:
2460 if (nrate > 0) {
2461 nrate--;
2462 }
2463 break;
2464 case 1:
2465 if (nrate + 1 < rs->ir_nrates) {
2466 nrate++;
2467 }
2468 break;
2469 }
2470
2471 if (nrate != in->in_txrate)
2472 in->in_txrate = nrate;
2473 rsc->sc_tx_ok = rsc->sc_tx_err = rsc->sc_tx_retr = 0;
2474 mutex_exit(&rsc->sc_genlock);
2475 if (ic->ic_state == IEEE80211_S_RUN)
2476 rsc->sc_ratectl_id = timeout(rtw_rate_ctl, ic,
2477 drv_usectohz(1000000));
2478 }
2479
2480 static int32_t
2481 rtw_new_state(ieee80211com_t *ic, enum ieee80211_state nstate, int arg)
2482 {
2483 rtw_softc_t *rsc = (rtw_softc_t *)ic;
2484 int error;
2485 enum ieee80211_state ostate;
2486
2487 ostate = ic->ic_state;
2488
2489 RTW_DPRINTF(RTW_DEBUG_ATTACH,
2490 "rtw_new_state: ostate:0x%x, nstate:0x%x, opmode:0x%x\n",
2491 ostate, nstate, ic->ic_opmode);
2492
2493
2494 mutex_enter(&rsc->sc_genlock);
2495 if (rsc->sc_scan_id != 0) {
2496 (void) untimeout(rsc->sc_scan_id);
2497 rsc->sc_scan_id = 0;
2516 case IEEE80211_S_SCAN:
2517 RTW_DPRINTF(RTW_DEBUG_ATTACH, "rtw_new_state: S_SCAN\n");
2518 rsc->sc_scan_id = timeout(rtw_next_scan, ic,
2519 drv_usectohz(200000));
2520 rtw_set_nettype(rsc, IEEE80211_M_MONITOR);
2521 break;
2522 case IEEE80211_S_RUN:
2523 RTW_DPRINTF(RTW_DEBUG_ATTACH, "rtw_new_state: S_RUN\n");
2524 switch (ic->ic_opmode) {
2525 case IEEE80211_M_HOSTAP:
2526 case IEEE80211_M_IBSS:
2527 rtw_set_nettype(rsc, IEEE80211_M_MONITOR);
2528 /* TBD */
2529 /*FALLTHROUGH*/
2530 case IEEE80211_M_AHDEMO:
2531 case IEEE80211_M_STA:
2532 RTW_DPRINTF(RTW_DEBUG_ATTACH,
2533 "rtw_new_state: sta\n");
2534 rtw_join_bss(rsc, ic->ic_bss->in_bssid, 0);
2535 rsc->sc_ratectl_id = timeout(rtw_rate_ctl, ic,
2536 drv_usectohz(1000000));
2537 break;
2538 case IEEE80211_M_MONITOR:
2539 break;
2540 }
2541 rtw_set_nettype(rsc, ic->ic_opmode);
2542 break;
2543 case IEEE80211_S_ASSOC:
2544 case IEEE80211_S_AUTH:
2545 break;
2546 }
2547
2548 mutex_exit(&rsc->sc_genlock);
2549 /*
2550 * Invoke the parent method to complete the work.
2551 */
2552 error = rsc->sc_newstate(ic, nstate, arg);
2553
2554 return (error);
2555 }
2556
|
2457 nrate = in->in_txrate;
2458 switch (mod) {
2459 case -1:
2460 if (nrate > 0) {
2461 nrate--;
2462 }
2463 break;
2464 case 1:
2465 if (nrate + 1 < rs->ir_nrates) {
2466 nrate++;
2467 }
2468 break;
2469 }
2470
2471 if (nrate != in->in_txrate)
2472 in->in_txrate = nrate;
2473 rsc->sc_tx_ok = rsc->sc_tx_err = rsc->sc_tx_retr = 0;
2474 mutex_exit(&rsc->sc_genlock);
2475 if (ic->ic_state == IEEE80211_S_RUN)
2476 rsc->sc_ratectl_id = timeout(rtw_rate_ctl, ic,
2477 drv_sectohz(1));
2478 }
2479
2480 static int32_t
2481 rtw_new_state(ieee80211com_t *ic, enum ieee80211_state nstate, int arg)
2482 {
2483 rtw_softc_t *rsc = (rtw_softc_t *)ic;
2484 int error;
2485 enum ieee80211_state ostate;
2486
2487 ostate = ic->ic_state;
2488
2489 RTW_DPRINTF(RTW_DEBUG_ATTACH,
2490 "rtw_new_state: ostate:0x%x, nstate:0x%x, opmode:0x%x\n",
2491 ostate, nstate, ic->ic_opmode);
2492
2493
2494 mutex_enter(&rsc->sc_genlock);
2495 if (rsc->sc_scan_id != 0) {
2496 (void) untimeout(rsc->sc_scan_id);
2497 rsc->sc_scan_id = 0;
2516 case IEEE80211_S_SCAN:
2517 RTW_DPRINTF(RTW_DEBUG_ATTACH, "rtw_new_state: S_SCAN\n");
2518 rsc->sc_scan_id = timeout(rtw_next_scan, ic,
2519 drv_usectohz(200000));
2520 rtw_set_nettype(rsc, IEEE80211_M_MONITOR);
2521 break;
2522 case IEEE80211_S_RUN:
2523 RTW_DPRINTF(RTW_DEBUG_ATTACH, "rtw_new_state: S_RUN\n");
2524 switch (ic->ic_opmode) {
2525 case IEEE80211_M_HOSTAP:
2526 case IEEE80211_M_IBSS:
2527 rtw_set_nettype(rsc, IEEE80211_M_MONITOR);
2528 /* TBD */
2529 /*FALLTHROUGH*/
2530 case IEEE80211_M_AHDEMO:
2531 case IEEE80211_M_STA:
2532 RTW_DPRINTF(RTW_DEBUG_ATTACH,
2533 "rtw_new_state: sta\n");
2534 rtw_join_bss(rsc, ic->ic_bss->in_bssid, 0);
2535 rsc->sc_ratectl_id = timeout(rtw_rate_ctl, ic,
2536 drv_sectohz(1));
2537 break;
2538 case IEEE80211_M_MONITOR:
2539 break;
2540 }
2541 rtw_set_nettype(rsc, ic->ic_opmode);
2542 break;
2543 case IEEE80211_S_ASSOC:
2544 case IEEE80211_S_AUTH:
2545 break;
2546 }
2547
2548 mutex_exit(&rsc->sc_genlock);
2549 /*
2550 * Invoke the parent method to complete the work.
2551 */
2552 error = rsc->sc_newstate(ic, nstate, arg);
2553
2554 return (error);
2555 }
2556
|