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