Lines Matching defs:sc

75 atu_usb_request(struct atu_softc *sc, uint8_t type,
95 uret = usb_pipe_ctrl_xfer_wait(sc->sc_udev->dev_default_ph,
108 uret = usb_pipe_ctrl_xfer_wait(sc->sc_udev->dev_default_ph,
119 atu_get_mib(struct atu_softc *sc, uint8_t type, uint8_t size,
122 return atu_usb_request(sc, ATU_VENDOR_IF_IN, 0x033,
127 atu_get_cmd_status(struct atu_softc *sc, uint8_t cmd, uint8_t *status)
134 return atu_usb_request(sc, ATU_VENDOR_IF_IN, 0x22, cmd,
139 atu_get_dfu_state(struct atu_softc *sc)
143 if (atu_usb_request(sc, DFU_GETSTATE, 0, 0, 1, &state))
149 atu_get_opmode(struct atu_softc *sc, uint8_t *mode)
151 return atu_usb_request(sc, ATU_VENDOR_IF_IN, 0x33, 0x0001,
156 atu_get_config(struct atu_softc *sc)
158 struct ieee80211com *ic = &sc->sc_ic;
163 switch (sc->sc_radio) {
169 err = atu_usb_request(sc, ATU_VENDOR_IF_IN, 0x33, 0x0a02,
173 sc->sc_name);
181 err = atu_usb_request(sc, ATU_VENDOR_IF_IN, 0x33, 0x0902,
185 sc->sc_name);
197 atu_wait_completion(struct atu_softc *sc, uint8_t cmd, uint8_t *status)
202 while ((err = atu_get_cmd_status(sc, cmd, statusreq)) == 0) {
211 sc->sc_name, cmd);
222 atu_send_command(struct atu_softc *sc, uint8_t *command, int size)
224 return atu_usb_request(sc, ATU_VENDOR_DEV_OUT, 0x0e, 0x0000,
229 atu_send_mib(struct atu_softc *sc, uint8_t type, uint8_t size,
262 err = atu_usb_request(sc, ATU_VENDOR_DEV_OUT, 0x0e, 0x0000,
267 return (atu_wait_completion(sc, CMD_SET_MIB, NULL));
271 atu_switch_radio(struct atu_softc *sc, boolean_t on)
278 if (sc->sc_radio == RadioIntersil)
281 ostate = ATU_RADIO_ON(sc) ? B_TRUE : B_FALSE;
286 err = atu_send_command(sc, (uint8_t *)&radio,
291 err = atu_wait_completion(sc, radio.Cmd, NULL);
296 sc->sc_flags |= ATU_FLAG_RADIO_ON;
298 sc->sc_flags &= ~ATU_FLAG_RADIO_ON;
305 atu_config(struct atu_softc *sc)
307 struct ieee80211com *ic = &sc->sc_ic;
313 err = atu_send_mib(sc, MIB_MAC_ADDR_STA, ic->ic_macaddr);
316 sc->sc_name);
343 sc->sc_name, k->wk_keylen);
364 err = atu_send_command(sc, (uint8_t *)&cmd, sizeof (cmd));
367 err = atu_wait_completion(sc, CMD_STARTUP, NULL);
371 err = atu_switch_radio(sc, B_TRUE);
375 err = atu_send_mib(sc, MIB_MAC_MGMT_POWER_MODE,
384 atu_start_scan(struct atu_softc *sc)
386 struct ieee80211com *ic = &sc->sc_ic;
390 if (!ATU_RUNNING(sc))
407 err = atu_send_command(sc, (uint8_t *)&scan, sizeof (scan));
410 sc->sc_name);
414 err = atu_wait_completion(sc, CMD_START_SCAN, NULL);
417 sc->sc_name);
425 atu_join(struct atu_softc *sc, struct ieee80211_node *node)
444 join.channel = ieee80211_chan2ieee(&sc->sc_ic, node->in_chan);
448 err = atu_send_command(sc, (uint8_t *)&join, sizeof (join));
451 sc->sc_name);
454 err = atu_wait_completion(sc, CMD_JOIN, &status);
460 sc->sc_name, status);
470 struct atu_softc *sc = (struct atu_softc *)ic;
474 ATU_LOCK(sc);
476 if (sc->sc_scan_timer != 0) {
477 ATU_UNLOCK(sc);
478 (void) untimeout(sc->sc_scan_timer);
479 ATU_LOCK(sc);
480 sc->sc_scan_timer = 0;
491 ATU_UNLOCK(sc);
492 sc->sc_newstate(ic, nstate, arg);
493 ATU_LOCK(sc);
494 if ((err = atu_start_scan(sc)) != 0) {
495 ATU_UNLOCK(sc);
499 sc->sc_scan_timer = timeout(
501 (void *)&sc->sc_ic, 0);
503 ATU_UNLOCK(sc);
514 err = atu_join(sc, ic->ic_bss);
516 ATU_UNLOCK(sc);
527 ATU_UNLOCK(sc);
528 err = sc->sc_newstate(ic, nstate, arg);
534 atu_open_pipes(struct atu_softc *sc)
540 ep = usb_lookup_ep_data(sc->sc_dip, sc->sc_udev, 0, 0, 0,
544 uret = usb_pipe_open(sc->sc_dip, &ep->ep_descr, &policy,
545 USB_FLAGS_SLEEP, &sc->sc_tx_pipe);
549 ep = usb_lookup_ep_data(sc->sc_dip, sc->sc_udev, 0, 0, 0,
553 uret = usb_pipe_open(sc->sc_dip, &ep->ep_descr, &policy,
554 USB_FLAGS_SLEEP, &sc->sc_rx_pipe);
560 if (sc->sc_rx_pipe != NULL) {
561 usb_pipe_close(sc->sc_dip, sc->sc_rx_pipe,
563 sc->sc_rx_pipe = NULL;
566 if (sc->sc_tx_pipe != NULL) {
567 usb_pipe_close(sc->sc_dip, sc->sc_tx_pipe,
569 sc->sc_tx_pipe = NULL;
576 atu_close_pipes(struct atu_softc *sc)
580 if (sc->sc_rx_pipe != NULL) {
581 usb_pipe_reset(sc->sc_dip, sc->sc_rx_pipe, flags, NULL, 0);
582 usb_pipe_close(sc->sc_dip, sc->sc_rx_pipe, flags, NULL, 0);
583 sc->sc_rx_pipe = NULL;
586 if (sc->sc_tx_pipe != NULL) {
587 usb_pipe_reset(sc->sc_dip, sc->sc_tx_pipe, flags, NULL, 0);
588 usb_pipe_close(sc->sc_dip, sc->sc_tx_pipe, flags, NULL, 0);
589 sc->sc_tx_pipe = NULL;
593 static int atu_rx_trigger(struct atu_softc *sc);
599 struct atu_softc *sc = (struct atu_softc *)req->bulk_client_private;
600 struct ieee80211com *ic = &sc->sc_ic;
609 sc->sc_rx_err++;
616 sc->sc_name, len);
617 sc->sc_rx_err++;
625 sc->sc_name, len, pktlen);
626 sc->sc_rx_err++;
643 mutex_enter(&sc->sc_rxlock);
644 sc->rx_queued--;
645 mutex_exit(&sc->sc_rxlock);
647 if (ATU_RUNNING(sc))
648 (void) atu_rx_trigger(sc);
659 struct atu_softc *sc = (struct atu_softc *)req->bulk_client_private;
660 struct ieee80211com *ic = &sc->sc_ic;
666 mutex_enter(&sc->sc_txlock);
667 sc->tx_queued--;
669 if (sc->sc_need_sched) {
670 sc->sc_need_sched = 0;
674 mutex_exit(&sc->sc_txlock);
678 atu_rx_trigger(struct atu_softc *sc)
683 req = usb_alloc_bulk_req(sc->sc_dip, ATU_RX_BUFSZ, USB_FLAGS_SLEEP);
688 req->bulk_client_private = (usb_opaque_t)sc;
696 uret = usb_pipe_bulk_xfer(sc->sc_rx_pipe, req, 0);
702 mutex_enter(&sc->sc_rxlock);
703 sc->rx_queued++;
704 mutex_exit(&sc->sc_rxlock);
710 atu_tx_trigger(struct atu_softc *sc, mblk_t *mp)
715 req = usb_alloc_bulk_req(sc->sc_dip, 0, USB_FLAGS_SLEEP);
721 req->bulk_client_private = (usb_opaque_t)sc;
729 uret = usb_pipe_bulk_xfer(sc->sc_tx_pipe, req, 0);
736 mutex_enter(&sc->sc_txlock);
737 sc->tx_queued++;
738 mutex_exit(&sc->sc_txlock);
744 atu_init_rx_queue(struct atu_softc *sc)
748 mutex_enter(&sc->sc_rxlock);
749 sc->rx_queued = 0;
750 mutex_exit(&sc->sc_rxlock);
753 err = atu_rx_trigger(sc);
762 atu_init_tx_queue(struct atu_softc *sc)
764 mutex_enter(&sc->sc_txlock);
765 sc->tx_queued = 0;
766 mutex_exit(&sc->sc_txlock);
772 struct atu_softc *sc = (struct atu_softc *)ic;
779 mutex_enter(&sc->sc_txlock);
780 if (sc->tx_queued > ATU_TX_LIST_CNT) {
781 sc->sc_tx_nobuf++;
782 mutex_exit(&sc->sc_txlock);
786 mutex_exit(&sc->sc_txlock);
790 sc->sc_tx_nobuf++;
830 err = atu_tx_trigger(sc, m);
846 atu_stop(struct atu_softc *sc)
848 sc->sc_flags &= ~ATU_FLAG_RUNNING;
849 atu_close_pipes(sc);
851 return (atu_switch_radio(sc, B_FALSE));
855 atu_init(struct atu_softc *sc)
859 err = atu_stop(sc);
863 err = atu_open_pipes(sc);
867 err = atu_config(sc);
870 sc->sc_name);
874 atu_init_tx_queue(sc);
876 err = atu_init_rx_queue(sc);
878 cmn_err(CE_WARN, "%s: rx queue init failed\n", sc->sc_name);
882 sc->sc_flags |= ATU_FLAG_RUNNING;
886 (void) atu_stop(sc);
893 struct atu_softc *sc = arg;
894 struct ieee80211com *ic = &sc->sc_ic;
898 ATU_LOCK(sc);
899 if (!ATU_RUNNING(sc)) {
900 ATU_UNLOCK(sc);
904 ATU_UNLOCK(sc);
919 struct atu_softc *sc = arg;
942 if (sc->sc_radio == atu_fw_table[i].atur_type) {
947 state = atu_get_dfu_state(sc);
952 err = atu_usb_request(sc, DFU_GETSTATUS, 0, 0, 6,
956 sc->sc_name);
970 err = atu_usb_request(sc, DFU_DNLOAD, block++, 0,
974 sc->sc_name);
985 cmn_err(CE_WARN, "%s: DFU state error\n", sc->sc_name);
992 sc->sc_name);
998 state = atu_get_dfu_state(sc);
1002 sc->sc_name, state);
1004 err = atu_usb_request(sc, DFU_GETSTATUS, 0, 0, 6, status);
1007 sc->sc_name);
1011 err = atu_usb_request(sc, DFU_REMAP, 0, 0, 0, NULL);
1012 if (err && !(sc->sc_quirk & ATU_QUIRK_NO_REMAP)) {
1013 cmn_err(CE_WARN, "%s: DFU remap failed\n", sc->sc_name);
1031 struct atu_softc *sc = arg;
1036 if (sc->sc_radio == atu_fw_table[i].atur_type) {
1047 err = atu_usb_request(sc, ATU_VENDOR_DEV_OUT, 0x0e,
1051 sc->sc_name);
1060 err = atu_usb_request(sc, ATU_VENDOR_DEV_OUT, 0x0e, 0x0802,
1064 sc->sc_name);
1073 if (sc->sc_quirk & ATU_QUIRK_FW_DELAY)
1080 atu_load_microcode(struct atu_softc *sc, boolean_t attach)
1088 err = atu_get_opmode(sc, &mode);
1097 if (sc->sc_radio != RadioIntersil &&
1098 atu_get_mib(sc, MIB_PHY_CHANNEL, &chan) == 0)
1103 return (atu_dfu_stage2(sc));
1106 err = atu_dfu_stage1(sc);
1110 if (usb_reset_device(sc->sc_dip, reset) != USB_SUCCESS)
1122 struct atu_softc *sc;
1125 sc = ddi_get_soft_state(atu_soft_state_p, ddi_get_instance(dip));
1126 ic = &sc->sc_ic;
1131 ATU_LOCK(sc);
1132 if (sc->sc_scan_timer != 0) {
1133 ATU_UNLOCK(sc);
1134 (void) untimeout(sc->sc_scan_timer);
1135 ATU_LOCK(sc);
1136 sc->sc_scan_timer = 0;
1139 sc->sc_flags &= ~(ATU_FLAG_RUNNING | ATU_FLAG_RADIO_ON);
1140 atu_close_pipes(sc);
1142 ATU_UNLOCK(sc);
1149 struct atu_softc *sc;
1152 sc = ddi_get_soft_state(atu_soft_state_p, ddi_get_instance(dip));
1153 if (usb_check_same_device(sc->sc_dip, NULL, USB_LOG_L2, -1,
1157 ATU_LOCK(sc);
1158 err = atu_load_microcode(sc, B_FALSE);
1160 err = atu_init(sc);
1162 ATU_UNLOCK(sc);
1169 struct atu_softc *sc;
1179 sc = ddi_get_soft_state(atu_soft_state_p,
1181 if (usb_check_same_device(sc->sc_dip, NULL, USB_LOG_L2, -1,
1185 if (atu_load_microcode(sc, B_FALSE) == 0)
1186 (void) atu_init(sc);
1197 sc = ddi_get_soft_state(atu_soft_state_p, instance);
1198 ic = &sc->sc_ic;
1199 sc->sc_dip = dip;
1201 (void) snprintf(sc->sc_name, sizeof (sc->sc_name), "%s%d",
1208 err = usb_get_dev_data(dip, &sc->sc_udev, USB_PARSE_LVL_ALL, 0);
1210 sc->sc_udev = NULL;
1216 if (sc->sc_udev->dev_descr->idVendor == t->atu_vid &&
1217 sc->sc_udev->dev_descr->idProduct == t->atu_pid) {
1218 sc->sc_radio = t->atu_radio;
1219 sc->sc_quirk = t->atu_quirk;
1223 err = atu_load_microcode(sc, B_TRUE);
1225 sc->sc_flags |= ATU_FLAG_REATTACH; /* reattaching */
1230 sc->sc_flags &= ~ATU_FLAG_REATTACH;
1233 err = atu_get_config(sc);
1236 sc->sc_name);
1240 mutex_init(&sc->sc_genlock, NULL, MUTEX_DRIVER, NULL);
1241 mutex_init(&sc->sc_txlock, NULL, MUTEX_DRIVER, NULL);
1242 mutex_init(&sc->sc_rxlock, NULL, MUTEX_DRIVER, NULL);
1248 ic->ic_maxrssi = atu_fw_table[sc->sc_radio].max_rssi;
1260 sc->sc_newstate = ic->ic_newstate;
1275 macp->m_driver = sc;
1289 err = usb_register_hotplug_cbs(sc->sc_dip, atu_disconnect,
1294 err = ddi_create_minor_node(dip, sc->sc_name, S_IFCHR,
1298 sc->sc_name);
1306 mutex_destroy(&sc->sc_genlock);
1307 mutex_destroy(&sc->sc_rxlock);
1308 mutex_destroy(&sc->sc_txlock);
1310 usb_client_detach(sc->sc_dip, sc->sc_udev);
1320 struct atu_softc *sc;
1323 sc = ddi_get_soft_state(atu_soft_state_p, ddi_get_instance(dip));
1329 ieee80211_new_state(&sc->sc_ic, IEEE80211_S_INIT, -1);
1330 ieee80211_stop_watchdog(&sc->sc_ic);
1332 ATU_LOCK(sc);
1333 if (sc->sc_scan_timer != 0) {
1334 ATU_UNLOCK(sc);
1335 (void) untimeout(sc->sc_scan_timer);
1336 ATU_LOCK(sc);
1337 sc->sc_scan_timer = 0;
1339 (void) atu_stop(sc);
1341 ATU_UNLOCK(sc);
1347 if (!ATU_REATTACH(sc)) {
1348 err = mac_disable(sc->sc_ic.ic_mach);
1352 (void) atu_stop(sc);
1355 (void) mac_unregister(sc->sc_ic.ic_mach);
1356 ieee80211_detach(&sc->sc_ic);
1358 mutex_destroy(&sc->sc_genlock);
1359 mutex_destroy(&sc->sc_txlock);
1360 mutex_destroy(&sc->sc_rxlock);
1365 usb_client_detach(dip, sc->sc_udev);
1427 struct atu_softc *sc = (struct atu_softc *)arg;
1430 ATU_LOCK(sc);
1431 err = atu_init(sc);
1433 ATU_UNLOCK(sc);
1440 struct atu_softc *sc = (struct atu_softc *)arg;
1441 struct ieee80211com *ic = &sc->sc_ic;
1446 ATU_LOCK(sc);
1447 if (sc->sc_scan_timer != 0) {
1448 ATU_UNLOCK(sc);
1449 (void) untimeout(sc->sc_scan_timer);
1450 ATU_LOCK(sc);
1451 sc->sc_scan_timer = 0;
1453 (void) atu_stop(sc);
1455 ATU_UNLOCK(sc);
1483 struct atu_softc *sc = (struct atu_softc *)arg;
1484 struct ieee80211com *ic = &sc->sc_ic;
1493 ATU_LOCK(sc);
1494 if (ATU_RUNNING(sc)) {
1495 if (sc->sc_scan_timer != 0) {
1496 ATU_UNLOCK(sc);
1497 (void) untimeout(sc->sc_scan_timer);
1498 ATU_LOCK(sc);
1499 sc->sc_scan_timer = 0;
1501 err = atu_init(sc);
1503 ATU_UNLOCK(sc);
1507 ATU_LOCK(sc);
1510 ATU_UNLOCK(sc);
1518 struct atu_softc *sc = (struct atu_softc *)arg;
1519 struct ieee80211com *ic = &sc->sc_ic;
1528 struct atu_softc *sc = (struct atu_softc *)arg;
1529 struct ieee80211com *ic = &sc->sc_ic;
1537 struct atu_softc *sc = (struct atu_softc *)arg;
1538 struct ieee80211com *ic = &sc->sc_ic;
1545 ATU_LOCK(sc);
1546 if (ATU_RUNNING(sc)) {
1547 if (sc->sc_scan_timer != 0) {
1548 ATU_UNLOCK(sc);
1549 (void) untimeout(sc->sc_scan_timer);
1550 ATU_LOCK(sc);
1551 sc->sc_scan_timer = 0;
1553 err = atu_init(sc);
1555 ATU_UNLOCK(sc);
1559 ATU_LOCK(sc);
1562 ATU_UNLOCK(sc);
1568 struct atu_softc *sc = (struct atu_softc *)arg;
1569 struct ieee80211com *ic = &sc->sc_ic;
1581 mutex_enter(&sc->sc_txlock);
1582 sc->sc_need_sched = 1;
1583 mutex_exit(&sc->sc_txlock);
1597 struct atu_softc *sc = (struct atu_softc *)arg;
1598 ieee80211com_t *ic = &sc->sc_ic;
1601 ATU_LOCK(sc);
1610 *val = sc->sc_tx_nobuf;
1613 *val = sc->sc_rx_nobuf;
1616 *val = sc->sc_rx_err;
1646 ATU_UNLOCK(sc);
1649 ATU_UNLOCK(sc);
1653 ATU_UNLOCK(sc);