Lines Matching refs:sc

306 rum_read_multi(struct rum_softc *sc, uint16_t reg, void *buf, int len)  in rum_read_multi()  argument
323 err = usb_pipe_ctrl_xfer_wait(sc->sc_udev->dev_default_ph, &req, &mp, in rum_read_multi()
339 rum_read(struct rum_softc *sc, uint16_t reg) in rum_read() argument
343 rum_read_multi(sc, reg, &val, sizeof (val)); in rum_read()
349 rum_write_multi(struct rum_softc *sc, uint16_t reg, void *buf, size_t len) in rum_write_multi() argument
373 err = usb_pipe_ctrl_xfer_wait(sc->sc_udev->dev_default_ph, &req, &mp, in rum_write_multi()
387 rum_write(struct rum_softc *sc, uint16_t reg, uint32_t val) in rum_write() argument
391 rum_write_multi(sc, reg, &tmp, sizeof (tmp)); in rum_write()
397 rum_load_microcode(struct rum_softc *sc) in rum_load_microcode() argument
413 rum_write(sc, reg, UGETDW(ucode)); in rum_load_microcode()
425 err = usb_pipe_ctrl_xfer_wait(sc->sc_udev->dev_default_ph, &req, NULL, in rum_load_microcode()
442 rum_eeprom_read(struct rum_softc *sc, uint16_t addr, void *buf, int len) in rum_eeprom_read() argument
458 err = usb_pipe_ctrl_xfer_wait(sc->sc_udev->dev_default_ph, &req, &mp, in rum_eeprom_read()
477 struct rum_softc *sc = (struct rum_softc *)req->bulk_client_private; in rum_txeof() local
478 struct ieee80211com *ic = &sc->sc_ic; in rum_txeof()
485 sc->tx_queued); in rum_txeof()
488 sc->sc_tx_err++; in rum_txeof()
490 mutex_enter(&sc->tx_lock); in rum_txeof()
492 sc->tx_queued--; in rum_txeof()
493 sc->sc_tx_timer = 0; in rum_txeof()
495 if (sc->sc_need_sched) { in rum_txeof()
496 sc->sc_need_sched = 0; in rum_txeof()
500 mutex_exit(&sc->tx_lock); in rum_txeof()
508 struct rum_softc *sc = (struct rum_softc *)req->bulk_client_private; in rum_rxeof() local
509 struct ieee80211com *ic = &sc->sc_ic; in rum_rxeof()
527 sc->rx_queued); in rum_rxeof()
530 sc->sc_rx_err++; in rum_rxeof()
541 sc->sc_rx_err++; in rum_rxeof()
554 sc->sc_rx_err++; in rum_rxeof()
569 sc->sc_rx_nobuf++; in rum_rxeof()
586 mutex_enter(&sc->rx_lock); in rum_rxeof()
587 sc->rx_queued--; in rum_rxeof()
588 mutex_exit(&sc->rx_lock); in rum_rxeof()
593 if (RAL_IS_RUNNING(sc)) in rum_rxeof()
594 (void) rum_rx_trigger(sc); in rum_rxeof()
681 rum_setup_tx_desc(struct rum_softc *sc, struct rum_tx_desc *desc, in rum_setup_tx_desc() argument
684 struct ieee80211com *ic = &sc->sc_ic; in rum_setup_tx_desc()
728 struct rum_softc *sc = (struct rum_softc *)ic; in rum_send() local
743 if (!RAL_IS_RUNNING(sc)) { in rum_send()
748 mutex_enter(&sc->tx_lock); in rum_send()
750 if (sc->tx_queued > RAL_TX_LIST_COUNT) { in rum_send()
755 sc->sc_need_sched = 1; in rum_send()
757 sc->sc_tx_nobuf++; in rum_send()
784 sc->sc_tx_err++; in rum_send()
797 sc->sc_tx_err++; in rum_send()
827 ic->ic_flags) + sc->sifs; in rum_send()
837 ic->ic_flags) + sc->sifs; in rum_send()
851 rum_setup_tx_desc(sc, desc, flags, 0, pktlen, rate); in rum_send()
868 rv = rum_tx_trigger(sc, m); in rum_send()
884 mutex_exit(&sc->tx_lock); in rum_send()
892 struct rum_softc *sc = (struct rum_softc *)arg; in rum_m_tx() local
893 struct ieee80211com *ic = &sc->sc_ic; in rum_m_tx()
922 rum_bbp_write(struct rum_softc *sc, uint8_t reg, uint8_t val) in rum_bbp_write() argument
928 if (!(rum_read(sc, RT2573_PHY_CSR3) & RT2573_BBP_BUSY)) in rum_bbp_write()
938 rum_write(sc, RT2573_PHY_CSR3, tmp); in rum_bbp_write()
942 rum_bbp_read(struct rum_softc *sc, uint8_t reg) in rum_bbp_read() argument
948 if (!(rum_read(sc, RT2573_PHY_CSR3) & RT2573_BBP_BUSY)) in rum_bbp_read()
957 rum_write(sc, RT2573_PHY_CSR3, val); in rum_bbp_read()
960 val = rum_read(sc, RT2573_PHY_CSR3); in rum_bbp_read()
971 rum_rf_write(struct rum_softc *sc, uint8_t reg, uint32_t val) in rum_rf_write() argument
977 if (!(rum_read(sc, RT2573_PHY_CSR4) & RT2573_RF_BUSY)) in rum_rf_write()
988 rum_write(sc, RT2573_PHY_CSR4, tmp); in rum_rf_write()
991 sc->rf_regs[reg] = val; in rum_rf_write()
997 rum_select_antenna(struct rum_softc *sc) in rum_select_antenna() argument
1002 bbp4 = rum_bbp_read(sc, 4); in rum_select_antenna()
1003 bbp77 = rum_bbp_read(sc, 77); in rum_select_antenna()
1006 tmp = rum_read(sc, RT2573_TXRX_CSR0); in rum_select_antenna()
1007 rum_write(sc, RT2573_TXRX_CSR0, tmp | RT2573_DISABLE_RX); in rum_select_antenna()
1009 rum_bbp_write(sc, 4, bbp4); in rum_select_antenna()
1010 rum_bbp_write(sc, 77, bbp77); in rum_select_antenna()
1012 rum_write(sc, RT2573_TXRX_CSR0, tmp); in rum_select_antenna()
1020 rum_enable_mrr(struct rum_softc *sc) in rum_enable_mrr() argument
1022 struct ieee80211com *ic = &sc->sc_ic; in rum_enable_mrr()
1025 tmp = rum_read(sc, RT2573_TXRX_CSR4); in rum_enable_mrr()
1032 rum_write(sc, RT2573_TXRX_CSR4, tmp); in rum_enable_mrr()
1036 rum_set_txpreamble(struct rum_softc *sc) in rum_set_txpreamble() argument
1040 tmp = rum_read(sc, RT2573_TXRX_CSR4); in rum_set_txpreamble()
1043 if (sc->sc_ic.ic_flags & IEEE80211_F_SHPREAMBLE) in rum_set_txpreamble()
1046 rum_write(sc, RT2573_TXRX_CSR4, tmp); in rum_set_txpreamble()
1050 rum_set_basicrates(struct rum_softc *sc) in rum_set_basicrates() argument
1052 struct ieee80211com *ic = &sc->sc_ic; in rum_set_basicrates()
1057 rum_write(sc, RT2573_TXRX_CSR5, 0x3); in rum_set_basicrates()
1060 rum_write(sc, RT2573_TXRX_CSR5, 0x150); in rum_set_basicrates()
1063 rum_write(sc, RT2573_TXRX_CSR5, 0xf); in rum_set_basicrates()
1072 rum_select_band(struct rum_softc *sc, struct ieee80211_channel *c) in rum_select_band() argument
1084 if ((IEEE80211_IS_CHAN_2GHZ(c) && sc->ext_2ghz_lna) || in rum_select_band()
1085 (IEEE80211_IS_CHAN_5GHZ(c) && sc->ext_5ghz_lna)) { in rum_select_band()
1089 sc->bbp17 = bbp17; in rum_select_band()
1090 rum_bbp_write(sc, 17, bbp17); in rum_select_band()
1091 rum_bbp_write(sc, 96, bbp96); in rum_select_band()
1092 rum_bbp_write(sc, 104, bbp104); in rum_select_band()
1094 if ((IEEE80211_IS_CHAN_2GHZ(c) && sc->ext_2ghz_lna) || in rum_select_band()
1095 (IEEE80211_IS_CHAN_5GHZ(c) && sc->ext_5ghz_lna)) { in rum_select_band()
1096 rum_bbp_write(sc, 75, 0x80); in rum_select_band()
1097 rum_bbp_write(sc, 86, 0x80); in rum_select_band()
1098 rum_bbp_write(sc, 88, 0x80); in rum_select_band()
1101 rum_bbp_write(sc, 35, bbp35); in rum_select_band()
1102 rum_bbp_write(sc, 97, bbp97); in rum_select_band()
1103 rum_bbp_write(sc, 98, bbp98); in rum_select_band()
1105 tmp = rum_read(sc, RT2573_PHY_CSR0); in rum_select_band()
1111 rum_write(sc, RT2573_PHY_CSR0, tmp); in rum_select_band()
1114 sc->sifs = IEEE80211_IS_CHAN_5GHZ(c) ? 16 : 10; in rum_select_band()
1118 rum_set_chan(struct rum_softc *sc, struct ieee80211_channel *c) in rum_set_chan() argument
1120 struct ieee80211com *ic = &sc->sc_ic; in rum_set_chan()
1131 rfprog = (sc->rf_rev == RT2573_RF_5225 || in rum_set_chan()
1132 sc->rf_rev == RT2573_RF_2527) ? rum_rf5225 : rum_rf5226; in rum_set_chan()
1138 power = sc->txpow[i]; in rum_set_chan()
1152 rum_select_band(sc, c); in rum_set_chan()
1153 rum_select_antenna(sc); in rum_set_chan()
1157 rum_rf_write(sc, RT2573_RF1, rfprog[i].r1); in rum_set_chan()
1158 rum_rf_write(sc, RT2573_RF2, rfprog[i].r2); in rum_set_chan()
1159 rum_rf_write(sc, RT2573_RF3, rfprog[i].r3 | power << 7); in rum_set_chan()
1160 rum_rf_write(sc, RT2573_RF4, rfprog[i].r4 | sc->rffreq << 10); in rum_set_chan()
1162 rum_rf_write(sc, RT2573_RF1, rfprog[i].r1); in rum_set_chan()
1163 rum_rf_write(sc, RT2573_RF2, rfprog[i].r2); in rum_set_chan()
1164 rum_rf_write(sc, RT2573_RF3, rfprog[i].r3 | power << 7 | 1); in rum_set_chan()
1165 rum_rf_write(sc, RT2573_RF4, rfprog[i].r4 | sc->rffreq << 10); in rum_set_chan()
1167 rum_rf_write(sc, RT2573_RF1, rfprog[i].r1); in rum_set_chan()
1168 rum_rf_write(sc, RT2573_RF2, rfprog[i].r2); in rum_set_chan()
1169 rum_rf_write(sc, RT2573_RF3, rfprog[i].r3 | power << 7); in rum_set_chan()
1170 rum_rf_write(sc, RT2573_RF4, rfprog[i].r4 | sc->rffreq << 10); in rum_set_chan()
1175 bbp3 = rum_bbp_read(sc, 3); in rum_set_chan()
1178 if (sc->rf_rev == RT2573_RF_5225 || sc->rf_rev == RT2573_RF_2527) in rum_set_chan()
1181 rum_bbp_write(sc, 3, bbp3); in rum_set_chan()
1184 rum_bbp_write(sc, 94, bbp94); in rum_set_chan()
1192 rum_enable_tsf_sync(struct rum_softc *sc) in rum_enable_tsf_sync() argument
1194 struct ieee80211com *ic = &sc->sc_ic; in rum_enable_tsf_sync()
1202 rum_write(sc, RT2573_TXRX_CSR10, 1 << 12 | 8); in rum_enable_tsf_sync()
1205 tmp = rum_read(sc, RT2573_TXRX_CSR9) & 0xff000000; in rum_enable_tsf_sync()
1216 rum_write(sc, RT2573_TXRX_CSR9, tmp); in rum_enable_tsf_sync()
1223 struct rum_softc *sc = (struct rum_softc *)ic; in rum_update_slot() local
1229 tmp = rum_read(sc, RT2573_MAC_CSR9); in rum_update_slot()
1231 rum_write(sc, RT2573_MAC_CSR9, tmp); in rum_update_slot()
1237 rum_set_bssid(struct rum_softc *sc, const uint8_t *bssid) in rum_set_bssid() argument
1242 rum_write(sc, RT2573_MAC_CSR4, tmp); in rum_set_bssid()
1245 rum_write(sc, RT2573_MAC_CSR5, tmp); in rum_set_bssid()
1249 rum_set_macaddr(struct rum_softc *sc, const uint8_t *addr) in rum_set_macaddr() argument
1254 rum_write(sc, RT2573_MAC_CSR2, tmp); in rum_set_macaddr()
1257 rum_write(sc, RT2573_MAC_CSR3, tmp); in rum_set_macaddr()
1264 rum_update_promisc(struct rum_softc *sc) in rum_update_promisc() argument
1268 tmp = rum_read(sc, RT2573_TXRX_CSR0); in rum_update_promisc()
1271 if (!(sc->sc_rcr & RAL_RCR_PROMISC)) in rum_update_promisc()
1274 rum_write(sc, RT2573_TXRX_CSR0, tmp); in rum_update_promisc()
1277 (sc->sc_rcr & RAL_RCR_PROMISC) ? "entering" : "leaving"); in rum_update_promisc()
1293 rum_read_eeprom(struct rum_softc *sc) in rum_read_eeprom() argument
1295 struct ieee80211com *ic = &sc->sc_ic; in rum_read_eeprom()
1299 rum_eeprom_read(sc, RT2573_EEPROM_ADDRESS, ic->ic_macaddr, 6); in rum_read_eeprom()
1301 rum_eeprom_read(sc, RT2573_EEPROM_ANTENNA, &val, 2); in rum_read_eeprom()
1303 sc->rf_rev = (val >> 11) & 0x1f; in rum_read_eeprom()
1304 sc->hw_radio = (val >> 10) & 0x1; in rum_read_eeprom()
1305 sc->rx_ant = (val >> 4) & 0x3; in rum_read_eeprom()
1306 sc->tx_ant = (val >> 2) & 0x3; in rum_read_eeprom()
1307 sc->nb_ant = val & 0x3; in rum_read_eeprom()
1309 ral_debug(RAL_DBG_HW, "RF revision=%d\n", sc->rf_rev); in rum_read_eeprom()
1311 rum_eeprom_read(sc, RT2573_EEPROM_CONFIG2, &val, 2); in rum_read_eeprom()
1313 sc->ext_5ghz_lna = (val >> 6) & 0x1; in rum_read_eeprom()
1314 sc->ext_2ghz_lna = (val >> 4) & 0x1; in rum_read_eeprom()
1317 sc->ext_2ghz_lna, sc->ext_5ghz_lna); in rum_read_eeprom()
1319 rum_eeprom_read(sc, RT2573_EEPROM_RSSI_2GHZ_OFFSET, &val, 2); in rum_read_eeprom()
1322 sc->rssi_2ghz_corr = (int8_t)(val & 0xff); /* signed */ in rum_read_eeprom()
1324 rum_eeprom_read(sc, RT2573_EEPROM_RSSI_5GHZ_OFFSET, &val, 2); in rum_read_eeprom()
1327 sc->rssi_5ghz_corr = (int8_t)(val & 0xff); /* signed */ in rum_read_eeprom()
1330 sc->rssi_2ghz_corr, sc->rssi_5ghz_corr); in rum_read_eeprom()
1332 rum_eeprom_read(sc, RT2573_EEPROM_FREQ_OFFSET, &val, 2); in rum_read_eeprom()
1335 sc->rffreq = val & 0xff; in rum_read_eeprom()
1337 ral_debug(RAL_DBG_HW, "RF freq=%d\n", sc->rffreq); in rum_read_eeprom()
1340 rum_eeprom_read(sc, RT2573_EEPROM_TXPOWER, sc->txpow, 14); in rum_read_eeprom()
1342 (void) memset(sc->txpow + 14, 24, sizeof (sc->txpow) - 14); in rum_read_eeprom()
1345 rum_eeprom_read(sc, RT2573_EEPROM_BBP_BASE, sc->bbp_prom, 2 * 16); in rum_read_eeprom()
1349 rum_bbp_init(struct rum_softc *sc) in rum_bbp_init() argument
1355 const uint8_t val = rum_bbp_read(sc, 0); in rum_bbp_init()
1367 rum_bbp_write(sc, rum_def_bbp[i].reg, rum_def_bbp[i].val); in rum_bbp_init()
1371 if (sc->bbp_prom[i].reg == 0 || sc->bbp_prom[i].reg == 0xff) in rum_bbp_init()
1373 rum_bbp_write(sc, sc->bbp_prom[i].reg, sc->bbp_prom[i].val); in rum_bbp_init()
1386 struct rum_softc *sc = arg; in rum_next_scan() local
1387 struct ieee80211com *ic = &sc->sc_ic; in rum_next_scan()
1396 struct rum_softc *sc = (struct rum_softc *)ic; in rum_newstate() local
1402 RAL_LOCK(sc); in rum_newstate()
1406 if (sc->sc_scan_id != 0) { in rum_newstate()
1407 (void) untimeout(sc->sc_scan_id); in rum_newstate()
1408 sc->sc_scan_id = 0; in rum_newstate()
1411 if (sc->sc_amrr_id != 0) { in rum_newstate()
1412 (void) untimeout(sc->sc_amrr_id); in rum_newstate()
1413 sc->sc_amrr_id = 0; in rum_newstate()
1420 tmp = rum_read(sc, RT2573_TXRX_CSR9); in rum_newstate()
1421 rum_write(sc, RT2573_TXRX_CSR9, tmp & ~0x00ffffff); in rum_newstate()
1426 rum_set_chan(sc, ic->ic_curchan); in rum_newstate()
1427 sc->sc_scan_id = timeout(rum_next_scan, (void *)sc, in rum_newstate()
1428 drv_usectohz(sc->dwelltime * 1000)); in rum_newstate()
1432 rum_set_chan(sc, ic->ic_curchan); in rum_newstate()
1436 rum_set_chan(sc, ic->ic_curchan); in rum_newstate()
1440 rum_set_chan(sc, ic->ic_curchan); in rum_newstate()
1446 rum_enable_mrr(sc); in rum_newstate()
1447 rum_set_txpreamble(sc); in rum_newstate()
1448 rum_set_basicrates(sc); in rum_newstate()
1449 rum_set_bssid(sc, ni->in_bssid); in rum_newstate()
1453 rum_enable_tsf_sync(sc); in rum_newstate()
1458 rum_amrr_start(sc, ni); in rum_newstate()
1462 RAL_UNLOCK(sc); in rum_newstate()
1464 err = sc->sc_newstate(ic, nstate, arg); in rum_newstate()
1475 rum_close_pipes(struct rum_softc *sc) in rum_close_pipes() argument
1479 if (sc->sc_rx_pipeh != NULL) { in rum_close_pipes()
1480 usb_pipe_reset(sc->sc_dev, sc->sc_rx_pipeh, flags, NULL, 0); in rum_close_pipes()
1481 usb_pipe_close(sc->sc_dev, sc->sc_rx_pipeh, flags, NULL, 0); in rum_close_pipes()
1482 sc->sc_rx_pipeh = NULL; in rum_close_pipes()
1485 if (sc->sc_tx_pipeh != NULL) { in rum_close_pipes()
1486 usb_pipe_reset(sc->sc_dev, sc->sc_tx_pipeh, flags, NULL, 0); in rum_close_pipes()
1487 usb_pipe_close(sc->sc_dev, sc->sc_tx_pipeh, flags, NULL, 0); in rum_close_pipes()
1488 sc->sc_tx_pipeh = NULL; in rum_close_pipes()
1493 rum_open_pipes(struct rum_softc *sc) in rum_open_pipes() argument
1499 ep_node = usb_lookup_ep_data(sc->sc_dev, sc->sc_udev, 0, 0, 0, in rum_open_pipes()
1505 if ((err = usb_pipe_open(sc->sc_dev, in rum_open_pipes()
1507 &sc->sc_tx_pipeh)) != USB_SUCCESS) { in rum_open_pipes()
1513 ep_node = usb_lookup_ep_data(sc->sc_dev, sc->sc_udev, 0, 0, 0, in rum_open_pipes()
1519 if ((err = usb_pipe_open(sc->sc_dev, in rum_open_pipes()
1521 &sc->sc_rx_pipeh)) != USB_SUCCESS) { in rum_open_pipes()
1530 if (sc->sc_rx_pipeh != NULL) { in rum_open_pipes()
1531 usb_pipe_close(sc->sc_dev, sc->sc_rx_pipeh, in rum_open_pipes()
1533 sc->sc_rx_pipeh = NULL; in rum_open_pipes()
1536 if (sc->sc_tx_pipeh != NULL) { in rum_open_pipes()
1537 usb_pipe_close(sc->sc_dev, sc->sc_tx_pipeh, in rum_open_pipes()
1539 sc->sc_tx_pipeh = NULL; in rum_open_pipes()
1546 rum_tx_trigger(struct rum_softc *sc, mblk_t *mp) in rum_tx_trigger() argument
1551 sc->sc_tx_timer = RUM_TX_TIMEOUT; in rum_tx_trigger()
1553 req = usb_alloc_bulk_req(sc->sc_dev, 0, USB_FLAGS_SLEEP); in rum_tx_trigger()
1563 req->bulk_client_private = (usb_opaque_t)sc; in rum_tx_trigger()
1571 if ((err = usb_pipe_bulk_xfer(sc->sc_tx_pipeh, req, 0)) in rum_tx_trigger()
1580 sc->tx_queued++; in rum_tx_trigger()
1586 rum_rx_trigger(struct rum_softc *sc) in rum_rx_trigger() argument
1591 req = usb_alloc_bulk_req(sc->sc_dev, RAL_RXBUF_SIZE, USB_FLAGS_SLEEP); in rum_rx_trigger()
1599 req->bulk_client_private = (usb_opaque_t)sc; in rum_rx_trigger()
1608 err = usb_pipe_bulk_xfer(sc->sc_rx_pipeh, req, 0); in rum_rx_trigger()
1618 mutex_enter(&sc->rx_lock); in rum_rx_trigger()
1619 sc->rx_queued++; in rum_rx_trigger()
1620 mutex_exit(&sc->rx_lock); in rum_rx_trigger()
1626 rum_init_tx_queue(struct rum_softc *sc) in rum_init_tx_queue() argument
1628 sc->tx_queued = 0; in rum_init_tx_queue()
1632 rum_init_rx_queue(struct rum_softc *sc) in rum_init_rx_queue() argument
1636 sc->rx_queued = 0; in rum_init_rx_queue()
1639 if (rum_rx_trigger(sc) != 0) { in rum_init_rx_queue()
1648 rum_stop(struct rum_softc *sc) in rum_stop() argument
1650 struct ieee80211com *ic = &sc->sc_ic; in rum_stop()
1656 RAL_LOCK(sc); in rum_stop()
1658 sc->sc_tx_timer = 0; in rum_stop()
1659 sc->sc_flags &= ~RAL_FLAG_RUNNING; /* STOP */ in rum_stop()
1662 tmp = rum_read(sc, RT2573_TXRX_CSR0); in rum_stop()
1663 rum_write(sc, RT2573_TXRX_CSR0, tmp | RT2573_DISABLE_RX); in rum_stop()
1666 rum_write(sc, RT2573_MAC_CSR1, 3); in rum_stop()
1667 rum_write(sc, RT2573_MAC_CSR1, 0); in rum_stop()
1669 rum_close_pipes(sc); in rum_stop()
1671 RAL_UNLOCK(sc); in rum_stop()
1675 rum_init(struct rum_softc *sc) in rum_init() argument
1677 struct ieee80211com *ic = &sc->sc_ic; in rum_init()
1681 rum_stop(sc); in rum_init()
1685 rum_write(sc, rum_def_mac[i].reg, rum_def_mac[i].val); in rum_init()
1688 rum_write(sc, RT2573_MAC_CSR1, 3); in rum_init()
1689 rum_write(sc, RT2573_MAC_CSR1, 0); in rum_init()
1693 if (rum_read(sc, RT2573_MAC_CSR12) & 8) in rum_init()
1695 rum_write(sc, RT2573_MAC_CSR12, 4); /* force wakeup */ in rum_init()
1704 if (rum_bbp_init(sc) != 0) in rum_init()
1708 rum_select_band(sc, ic->ic_curchan); in rum_init()
1709 rum_select_antenna(sc); in rum_init()
1710 rum_set_chan(sc, ic->ic_curchan); in rum_init()
1713 rum_read_multi(sc, RT2573_STA_CSR0, sc->sta, sizeof (sc->sta)); in rum_init()
1715 rum_set_macaddr(sc, ic->ic_macaddr); in rum_init()
1718 rum_write(sc, RT2573_MAC_CSR1, 4); in rum_init()
1720 if (rum_open_pipes(sc) != USB_SUCCESS) { in rum_init()
1726 rum_init_tx_queue(sc); in rum_init()
1728 if (rum_init_rx_queue(sc) != USB_SUCCESS) in rum_init()
1732 tmp = rum_read(sc, RT2573_TXRX_CSR0) & 0xffff; in rum_init()
1739 if (!(sc->sc_rcr & RAL_RCR_PROMISC)) in rum_init()
1743 rum_write(sc, RT2573_TXRX_CSR0, tmp); in rum_init()
1744 sc->sc_flags |= RAL_FLAG_RUNNING; /* RUNNING */ in rum_init()
1748 rum_stop(sc); in rum_init()
1755 struct rum_softc *sc; in rum_disconnect() local
1762 sc = ddi_get_soft_state(rum_soft_state_p, ddi_get_instance(devinfo)); in rum_disconnect()
1763 ASSERT(sc != NULL); in rum_disconnect()
1765 if (!RAL_IS_RUNNING(sc)) /* different device or not inited */ in rum_disconnect()
1768 ic = &sc->sc_ic; in rum_disconnect()
1772 RAL_LOCK(sc); in rum_disconnect()
1774 sc->sc_tx_timer = 0; in rum_disconnect()
1775 sc->sc_flags &= ~RAL_FLAG_RUNNING; /* STOP */ in rum_disconnect()
1777 rum_close_pipes(sc); in rum_disconnect()
1779 RAL_UNLOCK(sc); in rum_disconnect()
1787 struct rum_softc *sc; in rum_reconnect() local
1790 sc = ddi_get_soft_state(rum_soft_state_p, ddi_get_instance(devinfo)); in rum_reconnect()
1791 ASSERT(sc != NULL); in rum_reconnect()
1794 if (usb_check_same_device(sc->sc_dev, NULL, USB_LOG_L2, -1, in rum_reconnect()
1800 err = rum_load_microcode(sc); in rum_reconnect()
1806 err = rum_init(sc); in rum_reconnect()
1812 rum_resume(struct rum_softc *sc) in rum_resume() argument
1817 if (usb_check_same_device(sc->sc_dev, NULL, USB_LOG_L2, -1, in rum_resume()
1823 err = rum_load_microcode(sc); in rum_resume()
1829 (void) rum_init(sc); in rum_resume()
1908 struct rum_softc *sc = (struct rum_softc *)arg; in rum_amrr_timeout() local
1909 struct rum_amrr *amrr = &sc->amrr; in rum_amrr_timeout()
1911 rum_read_multi(sc, RT2573_STA_CSR0, sc->sta, sizeof (sc->sta)); in rum_amrr_timeout()
1914 sc->sc_tx_err += LE_32(sc->sta[5]) >> 16; in rum_amrr_timeout()
1915 sc->sc_tx_retries += ((LE_32(sc->sta[4]) >> 16) + in rum_amrr_timeout()
1916 (LE_32(sc->sta[5]) & 0xffff)); in rum_amrr_timeout()
1919 (LE_32(sc->sta[4]) >> 16) + /* TX one-retry ok count */ in rum_amrr_timeout()
1920 (LE_32(sc->sta[5]) & 0xffff) + /* TX more-retry ok count */ in rum_amrr_timeout()
1921 (LE_32(sc->sta[5]) >> 16); /* TX retry-fail count */ in rum_amrr_timeout()
1925 (LE_32(sc->sta[4]) & 0xffff); /* TX no-retry ok count */ in rum_amrr_timeout()
1927 rum_ratectl(amrr, sc->sc_ic.ic_bss); in rum_amrr_timeout()
1929 sc->sc_amrr_id = timeout(rum_amrr_timeout, (void *)sc, in rum_amrr_timeout()
1934 rum_amrr_start(struct rum_softc *sc, struct ieee80211_node *ni) in rum_amrr_start() argument
1936 struct rum_amrr *amrr = &sc->amrr; in rum_amrr_start()
1940 rum_read_multi(sc, RT2573_STA_CSR0, sc->sta, sizeof (sc->sta)); in rum_amrr_start()
1955 sc->sc_amrr_id = timeout(rum_amrr_timeout, (void *)sc, in rum_amrr_start()
1962 struct rum_softc *sc = arg; in rum_watchdog() local
1963 struct ieee80211com *ic = &sc->sc_ic; in rum_watchdog()
1966 RAL_LOCK(sc); in rum_watchdog()
1969 if (!RAL_IS_RUNNING(sc)) { in rum_watchdog()
1970 RAL_UNLOCK(sc); in rum_watchdog()
1974 if (sc->sc_tx_timer > 0) { in rum_watchdog()
1975 if (--sc->sc_tx_timer == 0) { in rum_watchdog()
1977 RAL_UNLOCK(sc); in rum_watchdog()
1978 (void) rum_init(sc); in rum_watchdog()
1987 RAL_UNLOCK(sc); in rum_watchdog()
1998 struct rum_softc *sc = (struct rum_softc *)arg; in rum_m_start() local
2004 err = rum_init(sc); in rum_m_start()
2009 sc->sc_flags |= RAL_FLAG_RUNNING; /* RUNNING */ in rum_m_start()
2013 rum_stop(sc); in rum_m_start()
2020 struct rum_softc *sc = (struct rum_softc *)arg; in rum_m_stop() local
2022 (void) rum_stop(sc); in rum_m_stop()
2023 sc->sc_flags &= ~RAL_FLAG_RUNNING; /* STOP */ in rum_m_stop()
2029 struct rum_softc *sc = (struct rum_softc *)arg; in rum_m_unicst() local
2030 struct ieee80211com *ic = &sc->sc_ic; in rum_m_unicst()
2036 (void) rum_set_macaddr(sc, (uint8_t *)macaddr); in rum_m_unicst()
2037 (void) rum_init(sc); in rum_m_unicst()
2052 struct rum_softc *sc = (struct rum_softc *)arg; in rum_m_promisc() local
2055 sc->sc_rcr |= RAL_RCR_PROMISC; in rum_m_promisc()
2056 sc->sc_rcr |= RAL_RCR_MULTI; in rum_m_promisc()
2058 sc->sc_rcr &= ~RAL_RCR_PROMISC; in rum_m_promisc()
2059 sc->sc_rcr &= ~RAL_RCR_MULTI; in rum_m_promisc()
2062 rum_update_promisc(sc); in rum_m_promisc()
2073 struct rum_softc *sc = (struct rum_softc *)arg; in rum_m_setprop() local
2074 struct ieee80211com *ic = &sc->sc_ic; in rum_m_setprop()
2079 RAL_LOCK(sc); in rum_m_setprop()
2081 if (RAL_IS_RUNNING(sc)) { in rum_m_setprop()
2082 RAL_UNLOCK(sc); in rum_m_setprop()
2083 (void) rum_init(sc); in rum_m_setprop()
2085 RAL_LOCK(sc); in rum_m_setprop()
2089 RAL_UNLOCK(sc); in rum_m_setprop()
2098 struct rum_softc *sc = (struct rum_softc *)arg; in rum_m_getprop() local
2101 err = ieee80211_getprop(&sc->sc_ic, pr_name, wldp_pr_num, in rum_m_getprop()
2111 struct rum_softc *sc = (struct rum_softc *)arg; in rum_m_propinfo() local
2113 ieee80211_propinfo(&sc->sc_ic, pr_name, wldp_pr_num, prh); in rum_m_propinfo()
2119 struct rum_softc *sc = (struct rum_softc *)arg; in rum_m_ioctl() local
2120 struct ieee80211com *ic = &sc->sc_ic; in rum_m_ioctl()
2124 RAL_LOCK(sc); in rum_m_ioctl()
2126 if (RAL_IS_RUNNING(sc)) { in rum_m_ioctl()
2127 RAL_UNLOCK(sc); in rum_m_ioctl()
2128 (void) rum_init(sc); in rum_m_ioctl()
2130 RAL_LOCK(sc); in rum_m_ioctl()
2133 RAL_UNLOCK(sc); in rum_m_ioctl()
2139 struct rum_softc *sc = (struct rum_softc *)arg; in rum_m_stat() local
2140 ieee80211com_t *ic = &sc->sc_ic; in rum_m_stat()
2144 RAL_LOCK(sc); in rum_m_stat()
2156 *val = sc->sc_tx_nobuf; in rum_m_stat()
2159 *val = sc->sc_rx_nobuf; in rum_m_stat()
2162 *val = sc->sc_rx_err; in rum_m_stat()
2178 *val = sc->sc_tx_err; in rum_m_stat()
2181 *val = sc->sc_tx_retries; in rum_m_stat()
2193 RAL_UNLOCK(sc); in rum_m_stat()
2196 RAL_UNLOCK(sc); in rum_m_stat()
2199 RAL_UNLOCK(sc); in rum_m_stat()
2207 struct rum_softc *sc; in rum_attach() local
2222 sc = ddi_get_soft_state(rum_soft_state_p, in rum_attach()
2224 ASSERT(sc != NULL); in rum_attach()
2225 rum_resume(sc); in rum_attach()
2239 sc = ddi_get_soft_state(rum_soft_state_p, instance); in rum_attach()
2240 ic = (ieee80211com_t *)&sc->sc_ic; in rum_attach()
2241 sc->sc_dev = devinfo; in rum_attach()
2249 if (usb_get_dev_data(devinfo, &sc->sc_udev, in rum_attach()
2251 sc->sc_udev = NULL; in rum_attach()
2255 mutex_init(&sc->sc_genlock, NULL, MUTEX_DRIVER, NULL); in rum_attach()
2256 mutex_init(&sc->tx_lock, NULL, MUTEX_DRIVER, NULL); in rum_attach()
2257 mutex_init(&sc->rx_lock, NULL, MUTEX_DRIVER, NULL); in rum_attach()
2261 if ((tmp = rum_read(sc, RT2573_MAC_CSR0)) != 0) in rum_attach()
2272 rum_read_eeprom(sc); in rum_attach()
2275 tmp, rum_get_rf(sc->rf_rev)); in rum_attach()
2277 err = rum_load_microcode(sc); in rum_attach()
2302 if (sc->rf_rev == RT2573_RF_5225 || sc->rf_rev == RT2573_RF_5226) { in rum_attach()
2349 sc->sc_newstate = ic->ic_newstate; in rum_attach()
2355 sc->sc_rcr = 0; in rum_attach()
2356 sc->dwelltime = 300; in rum_attach()
2357 sc->sc_flags = 0; in rum_attach()
2374 macp->m_driver = sc; in rum_attach()
2418 mutex_destroy(&sc->sc_genlock); in rum_attach()
2419 mutex_destroy(&sc->tx_lock); in rum_attach()
2420 mutex_destroy(&sc->rx_lock); in rum_attach()
2422 usb_client_detach(sc->sc_dev, sc->sc_udev); in rum_attach()
2432 struct rum_softc *sc; in rum_detach() local
2434 sc = ddi_get_soft_state(rum_soft_state_p, ddi_get_instance(devinfo)); in rum_detach()
2435 ASSERT(sc != NULL); in rum_detach()
2441 if (RAL_IS_RUNNING(sc)) in rum_detach()
2442 (void) rum_stop(sc); in rum_detach()
2448 rum_stop(sc); in rum_detach()
2454 if (mac_unregister(sc->sc_ic.ic_mach) != 0) in rum_detach()
2460 ieee80211_detach(&sc->sc_ic); in rum_detach()
2462 mutex_destroy(&sc->sc_genlock); in rum_detach()
2463 mutex_destroy(&sc->tx_lock); in rum_detach()
2464 mutex_destroy(&sc->rx_lock); in rum_detach()
2467 usb_client_detach(devinfo, sc->sc_udev); in rum_detach()
2468 sc->sc_udev = NULL; in rum_detach()