if_ural.c (193073) | if_ural.c (194228) |
---|---|
1/* $FreeBSD: head/sys/dev/usb/wlan/if_ural.c 193073 2009-05-29 23:41:31Z sam $ */ | 1/* $FreeBSD: head/sys/dev/usb/wlan/if_ural.c 194228 2009-06-15 01:02:43Z thompsa $ */ |
2 3/*- 4 * Copyright (c) 2005, 2006 5 * Damien Bergamini <damien.bergamini@free.fr> 6 * 7 * Copyright (c) 2006, 2008 8 * Hans Petter Selasky <hselasky@FreeBSD.org> 9 * --- 6 unchanged lines hidden (view full) --- 16 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 17 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 18 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 19 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 20 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 21 */ 22 23#include <sys/cdefs.h> | 2 3/*- 4 * Copyright (c) 2005, 2006 5 * Damien Bergamini <damien.bergamini@free.fr> 6 * 7 * Copyright (c) 2006, 2008 8 * Hans Petter Selasky <hselasky@FreeBSD.org> 9 * --- 6 unchanged lines hidden (view full) --- 16 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 17 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 18 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 19 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 20 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 21 */ 22 23#include <sys/cdefs.h> |
24__FBSDID("$FreeBSD: head/sys/dev/usb/wlan/if_ural.c 193073 2009-05-29 23:41:31Z sam $"); | 24__FBSDID("$FreeBSD: head/sys/dev/usb/wlan/if_ural.c 194228 2009-06-15 01:02:43Z thompsa $"); |
25 26/*- 27 * Ralink Technology RT2500USB chipset driver 28 * http://www.ralinktech.com/ 29 */ 30 31#include <sys/param.h> 32#include <sys/sockio.h> --- 383 unchanged lines hidden (view full) --- 416 417 if (uaa->usb_mode != USB_MODE_HOST) 418 return (ENXIO); 419 if (uaa->info.bConfigIndex != 0) 420 return (ENXIO); 421 if (uaa->info.bIfaceIndex != RAL_IFACE_INDEX) 422 return (ENXIO); 423 | 25 26/*- 27 * Ralink Technology RT2500USB chipset driver 28 * http://www.ralinktech.com/ 29 */ 30 31#include <sys/param.h> 32#include <sys/sockio.h> --- 383 unchanged lines hidden (view full) --- 416 417 if (uaa->usb_mode != USB_MODE_HOST) 418 return (ENXIO); 419 if (uaa->info.bConfigIndex != 0) 420 return (ENXIO); 421 if (uaa->info.bIfaceIndex != RAL_IFACE_INDEX) 422 return (ENXIO); 423 |
424 return (usb2_lookup_id_by_uaa(ural_devs, sizeof(ural_devs), uaa)); | 424 return (usbd_lookup_id_by_uaa(ural_devs, sizeof(ural_devs), uaa)); |
425} 426 427static int 428ural_attach(device_t self) 429{ 430 struct usb_attach_arg *uaa = device_get_ivars(self); 431 struct ural_softc *sc = device_get_softc(self); 432 struct ifnet *ifp; 433 struct ieee80211com *ic; 434 uint8_t iface_index, bands; 435 int error; 436 | 425} 426 427static int 428ural_attach(device_t self) 429{ 430 struct usb_attach_arg *uaa = device_get_ivars(self); 431 struct ural_softc *sc = device_get_softc(self); 432 struct ifnet *ifp; 433 struct ieee80211com *ic; 434 uint8_t iface_index, bands; 435 int error; 436 |
437 device_set_usb2_desc(self); | 437 device_set_usb_desc(self); |
438 sc->sc_udev = uaa->device; 439 sc->sc_dev = self; 440 441 mtx_init(&sc->sc_mtx, device_get_nameunit(self), 442 MTX_NETWORK_LOCK, MTX_DEF); 443 444 iface_index = RAL_IFACE_INDEX; | 438 sc->sc_udev = uaa->device; 439 sc->sc_dev = self; 440 441 mtx_init(&sc->sc_mtx, device_get_nameunit(self), 442 MTX_NETWORK_LOCK, MTX_DEF); 443 444 iface_index = RAL_IFACE_INDEX; |
445 error = usb2_transfer_setup(uaa->device, | 445 error = usbd_transfer_setup(uaa->device, |
446 &iface_index, sc->sc_xfer, ural_config, 447 URAL_N_TRANSFER, sc, &sc->sc_mtx); 448 if (error) { 449 device_printf(self, "could not allocate USB transfers, " | 446 &iface_index, sc->sc_xfer, ural_config, 447 URAL_N_TRANSFER, sc, &sc->sc_mtx); 448 if (error) { 449 device_printf(self, "could not allocate USB transfers, " |
450 "err=%s\n", usb2_errstr(error)); | 450 "err=%s\n", usbd_errstr(error)); |
451 goto detach; 452 } 453 454 RAL_LOCK(sc); 455 /* retrieve RT2570 rev. no */ 456 sc->asic_rev = ural_read(sc, RAL_MAC_CSR0); 457 458 /* retrieve MAC address and various other things from EEPROM */ --- 74 unchanged lines hidden (view full) --- 533static int 534ural_detach(device_t self) 535{ 536 struct ural_softc *sc = device_get_softc(self); 537 struct ifnet *ifp = sc->sc_ifp; 538 struct ieee80211com *ic; 539 540 /* stop all USB transfers */ | 451 goto detach; 452 } 453 454 RAL_LOCK(sc); 455 /* retrieve RT2570 rev. no */ 456 sc->asic_rev = ural_read(sc, RAL_MAC_CSR0); 457 458 /* retrieve MAC address and various other things from EEPROM */ --- 74 unchanged lines hidden (view full) --- 533static int 534ural_detach(device_t self) 535{ 536 struct ural_softc *sc = device_get_softc(self); 537 struct ifnet *ifp = sc->sc_ifp; 538 struct ieee80211com *ic; 539 540 /* stop all USB transfers */ |
541 usb2_transfer_unsetup(sc->sc_xfer, URAL_N_TRANSFER); | 541 usbd_transfer_unsetup(sc->sc_xfer, URAL_N_TRANSFER); |
542 543 /* free TX list, if any */ 544 RAL_LOCK(sc); 545 ural_unsetup_tx_list(sc); 546 RAL_UNLOCK(sc); 547 548 if (ifp) { 549 ic = ifp->if_l2com; --- 8 unchanged lines hidden (view full) --- 558static usb_error_t 559ural_do_request(struct ural_softc *sc, 560 struct usb_device_request *req, void *data) 561{ 562 usb_error_t err; 563 int ntries = 10; 564 565 while (ntries--) { | 542 543 /* free TX list, if any */ 544 RAL_LOCK(sc); 545 ural_unsetup_tx_list(sc); 546 RAL_UNLOCK(sc); 547 548 if (ifp) { 549 ic = ifp->if_l2com; --- 8 unchanged lines hidden (view full) --- 558static usb_error_t 559ural_do_request(struct ural_softc *sc, 560 struct usb_device_request *req, void *data) 561{ 562 usb_error_t err; 563 int ntries = 10; 564 565 while (ntries--) { |
566 err = usb2_do_request_flags(sc->sc_udev, &sc->sc_mtx, | 566 err = usbd_do_request_flags(sc->sc_udev, &sc->sc_mtx, |
567 req, data, 0, NULL, 250 /* ms */); 568 if (err == 0) 569 break; 570 571 DPRINTFN(1, "Control request failed, %s (retrying)\n", | 567 req, data, 0, NULL, 250 /* ms */); 568 if (err == 0) 569 break; 570 571 DPRINTFN(1, "Control request failed, %s (retrying)\n", |
572 usb2_errstr(err)); | 572 usbd_errstr(err)); |
573 if (ural_pause(sc, hz / 100)) 574 break; 575 } 576 return (err); 577} 578 579static struct ieee80211vap * 580ural_vap_create(struct ieee80211com *ic, --- 15 unchanged lines hidden (view full) --- 596 /* enable s/w bmiss handling for sta mode */ 597 ieee80211_vap_setup(ic, vap, name, unit, opmode, 598 flags | IEEE80211_CLONE_NOBEACONS, bssid, mac); 599 600 /* override state transition machine */ 601 uvp->newstate = vap->iv_newstate; 602 vap->iv_newstate = ural_newstate; 603 | 573 if (ural_pause(sc, hz / 100)) 574 break; 575 } 576 return (err); 577} 578 579static struct ieee80211vap * 580ural_vap_create(struct ieee80211com *ic, --- 15 unchanged lines hidden (view full) --- 596 /* enable s/w bmiss handling for sta mode */ 597 ieee80211_vap_setup(ic, vap, name, unit, opmode, 598 flags | IEEE80211_CLONE_NOBEACONS, bssid, mac); 599 600 /* override state transition machine */ 601 uvp->newstate = vap->iv_newstate; 602 vap->iv_newstate = ural_newstate; 603 |
604 usb2_callout_init_mtx(&uvp->amrr_ch, &sc->sc_mtx, 0); | 604 usb_callout_init_mtx(&uvp->amrr_ch, &sc->sc_mtx, 0); |
605 TASK_INIT(&uvp->amrr_task, 0, ural_amrr_task, uvp); 606 ieee80211_amrr_init(&uvp->amrr, vap, 607 IEEE80211_AMRR_MIN_SUCCESS_THRESHOLD, 608 IEEE80211_AMRR_MAX_SUCCESS_THRESHOLD, 609 1000 /* 1 sec */); 610 611 /* complete setup */ 612 ieee80211_vap_attach(vap, ieee80211_media_change, ieee80211_media_status); 613 ic->ic_opmode = opmode; 614 return vap; 615} 616 617static void 618ural_vap_delete(struct ieee80211vap *vap) 619{ 620 struct ural_vap *uvp = URAL_VAP(vap); 621 struct ieee80211com *ic = vap->iv_ic; 622 | 605 TASK_INIT(&uvp->amrr_task, 0, ural_amrr_task, uvp); 606 ieee80211_amrr_init(&uvp->amrr, vap, 607 IEEE80211_AMRR_MIN_SUCCESS_THRESHOLD, 608 IEEE80211_AMRR_MAX_SUCCESS_THRESHOLD, 609 1000 /* 1 sec */); 610 611 /* complete setup */ 612 ieee80211_vap_attach(vap, ieee80211_media_change, ieee80211_media_status); 613 ic->ic_opmode = opmode; 614 return vap; 615} 616 617static void 618ural_vap_delete(struct ieee80211vap *vap) 619{ 620 struct ural_vap *uvp = URAL_VAP(vap); 621 struct ieee80211com *ic = vap->iv_ic; 622 |
623 usb2_callout_drain(&uvp->amrr_ch); | 623 usb_callout_drain(&uvp->amrr_ch); |
624 ieee80211_draintask(ic, &uvp->amrr_task); 625 ieee80211_amrr_cleanup(&uvp->amrr); 626 ieee80211_vap_detach(vap); 627 free(uvp, M_80211_VAP); 628} 629 630static void 631ural_tx_free(struct ural_tx_data *data, int txerr) --- 70 unchanged lines hidden (view full) --- 702 struct mbuf *m; 703 704 DPRINTF("%s -> %s\n", 705 ieee80211_state_name[vap->iv_state], 706 ieee80211_state_name[nstate]); 707 708 IEEE80211_UNLOCK(ic); 709 RAL_LOCK(sc); | 624 ieee80211_draintask(ic, &uvp->amrr_task); 625 ieee80211_amrr_cleanup(&uvp->amrr); 626 ieee80211_vap_detach(vap); 627 free(uvp, M_80211_VAP); 628} 629 630static void 631ural_tx_free(struct ural_tx_data *data, int txerr) --- 70 unchanged lines hidden (view full) --- 702 struct mbuf *m; 703 704 DPRINTF("%s -> %s\n", 705 ieee80211_state_name[vap->iv_state], 706 ieee80211_state_name[nstate]); 707 708 IEEE80211_UNLOCK(ic); 709 RAL_LOCK(sc); |
710 usb2_callout_stop(&uvp->amrr_ch); | 710 usb_callout_stop(&uvp->amrr_ch); |
711 712 switch (nstate) { 713 case IEEE80211_S_INIT: 714 if (vap->iv_state == IEEE80211_S_RUN) { 715 /* abort TSF synchronization */ 716 ural_write(sc, RAL_TXRX_CSR19, 0); 717 718 /* force tx led to stop blinking */ --- 87 unchanged lines hidden (view full) --- 806 STAILQ_REMOVE_HEAD(&sc->tx_q, next); 807 m = data->m; 808 809 if (m->m_pkthdr.len > (RAL_FRAME_SIZE + RAL_TX_DESC_SIZE)) { 810 DPRINTFN(0, "data overflow, %u bytes\n", 811 m->m_pkthdr.len); 812 m->m_pkthdr.len = (RAL_FRAME_SIZE + RAL_TX_DESC_SIZE); 813 } | 711 712 switch (nstate) { 713 case IEEE80211_S_INIT: 714 if (vap->iv_state == IEEE80211_S_RUN) { 715 /* abort TSF synchronization */ 716 ural_write(sc, RAL_TXRX_CSR19, 0); 717 718 /* force tx led to stop blinking */ --- 87 unchanged lines hidden (view full) --- 806 STAILQ_REMOVE_HEAD(&sc->tx_q, next); 807 m = data->m; 808 809 if (m->m_pkthdr.len > (RAL_FRAME_SIZE + RAL_TX_DESC_SIZE)) { 810 DPRINTFN(0, "data overflow, %u bytes\n", 811 m->m_pkthdr.len); 812 m->m_pkthdr.len = (RAL_FRAME_SIZE + RAL_TX_DESC_SIZE); 813 } |
814 usb2_copy_in(xfer->frbuffers, 0, &data->desc, | 814 usbd_copy_in(xfer->frbuffers, 0, &data->desc, |
815 RAL_TX_DESC_SIZE); | 815 RAL_TX_DESC_SIZE); |
816 usb2_m_copy_in(xfer->frbuffers, RAL_TX_DESC_SIZE, m, 0, | 816 usbd_m_copy_in(xfer->frbuffers, RAL_TX_DESC_SIZE, m, 0, |
817 m->m_pkthdr.len); 818 819 vap = data->ni->ni_vap; 820 if (ieee80211_radiotap_active_vap(vap)) { 821 struct ural_tx_radiotap_header *tap = &sc->sc_txtap; 822 823 tap->wt_flags = 0; 824 tap->wt_rate = data->rate; --- 8 unchanged lines hidden (view full) --- 833 len += 2; 834 835 DPRINTFN(11, "sending frame len=%u xferlen=%u\n", 836 m->m_pkthdr.len, len); 837 838 xfer->frlengths[0] = len; 839 xfer->priv_fifo = data; 840 | 817 m->m_pkthdr.len); 818 819 vap = data->ni->ni_vap; 820 if (ieee80211_radiotap_active_vap(vap)) { 821 struct ural_tx_radiotap_header *tap = &sc->sc_txtap; 822 823 tap->wt_flags = 0; 824 tap->wt_rate = data->rate; --- 8 unchanged lines hidden (view full) --- 833 len += 2; 834 835 DPRINTFN(11, "sending frame len=%u xferlen=%u\n", 836 m->m_pkthdr.len, len); 837 838 xfer->frlengths[0] = len; 839 xfer->priv_fifo = data; 840 |
841 usb2_start_hardware(xfer); | 841 usbd_transfer_submit(xfer); |
842 } 843 break; 844 845 default: /* Error */ 846 DPRINTFN(11, "transfer error, %s\n", | 842 } 843 break; 844 845 default: /* Error */ 846 DPRINTFN(11, "transfer error, %s\n", |
847 usb2_errstr(xfer->error)); | 847 usbd_errstr(xfer->error)); |
848 849 ifp->if_oerrors++; 850 data = xfer->priv_fifo; 851 if (data != NULL) { 852 ural_tx_free(data, xfer->error); 853 xfer->priv_fifo = NULL; 854 } 855 --- 30 unchanged lines hidden (view full) --- 886 DPRINTF("%s: xfer too short %d\n", 887 device_get_nameunit(sc->sc_dev), len); 888 ifp->if_ierrors++; 889 goto tr_setup; 890 } 891 892 len -= RAL_RX_DESC_SIZE; 893 /* rx descriptor is located at the end */ | 848 849 ifp->if_oerrors++; 850 data = xfer->priv_fifo; 851 if (data != NULL) { 852 ural_tx_free(data, xfer->error); 853 xfer->priv_fifo = NULL; 854 } 855 --- 30 unchanged lines hidden (view full) --- 886 DPRINTF("%s: xfer too short %d\n", 887 device_get_nameunit(sc->sc_dev), len); 888 ifp->if_ierrors++; 889 goto tr_setup; 890 } 891 892 len -= RAL_RX_DESC_SIZE; 893 /* rx descriptor is located at the end */ |
894 usb2_copy_out(xfer->frbuffers, len, &sc->sc_rx_desc, | 894 usbd_copy_out(xfer->frbuffers, len, &sc->sc_rx_desc, |
895 RAL_RX_DESC_SIZE); 896 897 rssi = URAL_RSSI(sc->sc_rx_desc.rssi); 898 nf = RAL_NOISE_FLOOR; 899 flags = le32toh(sc->sc_rx_desc.flags); 900 if (flags & (RAL_RX_PHY_ERROR | RAL_RX_CRC_ERROR)) { 901 /* 902 * This should not happen since we did not --- 6 unchanged lines hidden (view full) --- 909 } 910 911 m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); 912 if (m == NULL) { 913 DPRINTF("could not allocate mbuf\n"); 914 ifp->if_ierrors++; 915 goto tr_setup; 916 } | 895 RAL_RX_DESC_SIZE); 896 897 rssi = URAL_RSSI(sc->sc_rx_desc.rssi); 898 nf = RAL_NOISE_FLOOR; 899 flags = le32toh(sc->sc_rx_desc.flags); 900 if (flags & (RAL_RX_PHY_ERROR | RAL_RX_CRC_ERROR)) { 901 /* 902 * This should not happen since we did not --- 6 unchanged lines hidden (view full) --- 909 } 910 911 m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); 912 if (m == NULL) { 913 DPRINTF("could not allocate mbuf\n"); 914 ifp->if_ierrors++; 915 goto tr_setup; 916 } |
917 usb2_copy_out(xfer->frbuffers, 0, mtod(m, uint8_t *), len); | 917 usbd_copy_out(xfer->frbuffers, 0, mtod(m, uint8_t *), len); |
918 919 /* finalize mbuf */ 920 m->m_pkthdr.rcvif = ifp; 921 m->m_pkthdr.len = m->m_len = (flags >> 16) & 0xfff; 922 923 if (ieee80211_radiotap_active(ic)) { 924 struct ural_rx_radiotap_header *tap = &sc->sc_rxtap; 925 --- 8 unchanged lines hidden (view full) --- 934 } 935 /* Strip trailing 802.11 MAC FCS. */ 936 m_adj(m, -IEEE80211_CRC_LEN); 937 938 /* FALLTHROUGH */ 939 case USB_ST_SETUP: 940tr_setup: 941 xfer->frlengths[0] = xfer->max_data_length; | 918 919 /* finalize mbuf */ 920 m->m_pkthdr.rcvif = ifp; 921 m->m_pkthdr.len = m->m_len = (flags >> 16) & 0xfff; 922 923 if (ieee80211_radiotap_active(ic)) { 924 struct ural_rx_radiotap_header *tap = &sc->sc_rxtap; 925 --- 8 unchanged lines hidden (view full) --- 934 } 935 /* Strip trailing 802.11 MAC FCS. */ 936 m_adj(m, -IEEE80211_CRC_LEN); 937 938 /* FALLTHROUGH */ 939 case USB_ST_SETUP: 940tr_setup: 941 xfer->frlengths[0] = xfer->max_data_length; |
942 usb2_start_hardware(xfer); | 942 usbd_transfer_submit(xfer); |
943 944 /* 945 * At the end of a USB callback it is always safe to unlock 946 * the private mutex of a device! That is why we do the 947 * "ieee80211_input" here, and not some lines up! 948 */ 949 if (m) { 950 RAL_UNLOCK(sc); --- 115 unchanged lines hidden (view full) --- 1066 ural_setup_tx_desc(sc, &data->desc, 1067 RAL_TX_IFS_NEWBACKOFF | RAL_TX_TIMESTAMP, m0->m_pkthdr.len, 1068 tp->mgmtrate); 1069 1070 DPRINTFN(10, "sending beacon frame len=%u rate=%u\n", 1071 m0->m_pkthdr.len, tp->mgmtrate); 1072 1073 STAILQ_INSERT_TAIL(&sc->tx_q, data, next); | 943 944 /* 945 * At the end of a USB callback it is always safe to unlock 946 * the private mutex of a device! That is why we do the 947 * "ieee80211_input" here, and not some lines up! 948 */ 949 if (m) { 950 RAL_UNLOCK(sc); --- 115 unchanged lines hidden (view full) --- 1066 ural_setup_tx_desc(sc, &data->desc, 1067 RAL_TX_IFS_NEWBACKOFF | RAL_TX_TIMESTAMP, m0->m_pkthdr.len, 1068 tp->mgmtrate); 1069 1070 DPRINTFN(10, "sending beacon frame len=%u rate=%u\n", 1071 m0->m_pkthdr.len, tp->mgmtrate); 1072 1073 STAILQ_INSERT_TAIL(&sc->tx_q, data, next); |
1074 usb2_transfer_start(sc->sc_xfer[URAL_BULK_WR]); | 1074 usbd_transfer_start(sc->sc_xfer[URAL_BULK_WR]); |
1075 1076 return (0); 1077} 1078 1079static int 1080ural_tx_mgt(struct ural_softc *sc, struct mbuf *m0, struct ieee80211_node *ni) 1081{ 1082 struct ieee80211vap *vap = ni->ni_vap; --- 44 unchanged lines hidden (view full) --- 1127 } 1128 1129 ural_setup_tx_desc(sc, &data->desc, flags, m0->m_pkthdr.len, tp->mgmtrate); 1130 1131 DPRINTFN(10, "sending mgt frame len=%u rate=%u\n", 1132 m0->m_pkthdr.len, tp->mgmtrate); 1133 1134 STAILQ_INSERT_TAIL(&sc->tx_q, data, next); | 1075 1076 return (0); 1077} 1078 1079static int 1080ural_tx_mgt(struct ural_softc *sc, struct mbuf *m0, struct ieee80211_node *ni) 1081{ 1082 struct ieee80211vap *vap = ni->ni_vap; --- 44 unchanged lines hidden (view full) --- 1127 } 1128 1129 ural_setup_tx_desc(sc, &data->desc, flags, m0->m_pkthdr.len, tp->mgmtrate); 1130 1131 DPRINTFN(10, "sending mgt frame len=%u rate=%u\n", 1132 m0->m_pkthdr.len, tp->mgmtrate); 1133 1134 STAILQ_INSERT_TAIL(&sc->tx_q, data, next); |
1135 usb2_transfer_start(sc->sc_xfer[URAL_BULK_WR]); | 1135 usbd_transfer_start(sc->sc_xfer[URAL_BULK_WR]); |
1136 1137 return 0; 1138} 1139 1140static int 1141ural_sendprot(struct ural_softc *sc, 1142 const struct mbuf *m, struct ieee80211_node *ni, int prot, int rate) 1143{ --- 34 unchanged lines hidden (view full) --- 1178 sc->tx_nfree--; 1179 1180 data->m = mprot; 1181 data->ni = ieee80211_ref_node(ni); 1182 data->rate = protrate; 1183 ural_setup_tx_desc(sc, &data->desc, flags, mprot->m_pkthdr.len, protrate); 1184 1185 STAILQ_INSERT_TAIL(&sc->tx_q, data, next); | 1136 1137 return 0; 1138} 1139 1140static int 1141ural_sendprot(struct ural_softc *sc, 1142 const struct mbuf *m, struct ieee80211_node *ni, int prot, int rate) 1143{ --- 34 unchanged lines hidden (view full) --- 1178 sc->tx_nfree--; 1179 1180 data->m = mprot; 1181 data->ni = ieee80211_ref_node(ni); 1182 data->rate = protrate; 1183 ural_setup_tx_desc(sc, &data->desc, flags, mprot->m_pkthdr.len, protrate); 1184 1185 STAILQ_INSERT_TAIL(&sc->tx_q, data, next); |
1186 usb2_transfer_start(sc->sc_xfer[URAL_BULK_WR]); | 1186 usbd_transfer_start(sc->sc_xfer[URAL_BULK_WR]); |
1187 1188 return 0; 1189} 1190 1191static int 1192ural_tx_raw(struct ural_softc *sc, struct mbuf *m0, struct ieee80211_node *ni, 1193 const struct ieee80211_bpf_params *params) 1194{ --- 36 unchanged lines hidden (view full) --- 1231 1232 /* XXX need to setup descriptor ourself */ 1233 ural_setup_tx_desc(sc, &data->desc, flags, m0->m_pkthdr.len, rate); 1234 1235 DPRINTFN(10, "sending raw frame len=%u rate=%u\n", 1236 m0->m_pkthdr.len, rate); 1237 1238 STAILQ_INSERT_TAIL(&sc->tx_q, data, next); | 1187 1188 return 0; 1189} 1190 1191static int 1192ural_tx_raw(struct ural_softc *sc, struct mbuf *m0, struct ieee80211_node *ni, 1193 const struct ieee80211_bpf_params *params) 1194{ --- 36 unchanged lines hidden (view full) --- 1231 1232 /* XXX need to setup descriptor ourself */ 1233 ural_setup_tx_desc(sc, &data->desc, flags, m0->m_pkthdr.len, rate); 1234 1235 DPRINTFN(10, "sending raw frame len=%u rate=%u\n", 1236 m0->m_pkthdr.len, rate); 1237 1238 STAILQ_INSERT_TAIL(&sc->tx_q, data, next); |
1239 usb2_transfer_start(sc->sc_xfer[URAL_BULK_WR]); | 1239 usbd_transfer_start(sc->sc_xfer[URAL_BULK_WR]); |
1240 1241 return 0; 1242} 1243 1244static int 1245ural_tx_data(struct ural_softc *sc, struct mbuf *m0, struct ieee80211_node *ni) 1246{ 1247 struct ieee80211vap *vap = ni->ni_vap; --- 63 unchanged lines hidden (view full) --- 1311 } 1312 1313 ural_setup_tx_desc(sc, &data->desc, flags, m0->m_pkthdr.len, rate); 1314 1315 DPRINTFN(10, "sending data frame len=%u rate=%u\n", 1316 m0->m_pkthdr.len, rate); 1317 1318 STAILQ_INSERT_TAIL(&sc->tx_q, data, next); | 1240 1241 return 0; 1242} 1243 1244static int 1245ural_tx_data(struct ural_softc *sc, struct mbuf *m0, struct ieee80211_node *ni) 1246{ 1247 struct ieee80211vap *vap = ni->ni_vap; --- 63 unchanged lines hidden (view full) --- 1311 } 1312 1313 ural_setup_tx_desc(sc, &data->desc, flags, m0->m_pkthdr.len, rate); 1314 1315 DPRINTFN(10, "sending data frame len=%u rate=%u\n", 1316 m0->m_pkthdr.len, rate); 1317 1318 STAILQ_INSERT_TAIL(&sc->tx_q, data, next); |
1319 usb2_transfer_start(sc->sc_xfer[URAL_BULK_WR]); | 1319 usbd_transfer_start(sc->sc_xfer[URAL_BULK_WR]); |
1320 1321 return 0; 1322} 1323 1324static void 1325ural_start(struct ifnet *ifp) 1326{ 1327 struct ural_softc *sc = ifp->if_softc; --- 70 unchanged lines hidden (view full) --- 1398 req.bRequest = RAL_VENDOR_REQUEST; 1399 USETW(req.wValue, 4); 1400 USETW(req.wIndex, 1); 1401 USETW(req.wLength, 0); 1402 1403 error = ural_do_request(sc, &req, NULL); 1404 if (error != 0) { 1405 device_printf(sc->sc_dev, "could not set test mode: %s\n", | 1320 1321 return 0; 1322} 1323 1324static void 1325ural_start(struct ifnet *ifp) 1326{ 1327 struct ural_softc *sc = ifp->if_softc; --- 70 unchanged lines hidden (view full) --- 1398 req.bRequest = RAL_VENDOR_REQUEST; 1399 USETW(req.wValue, 4); 1400 USETW(req.wIndex, 1); 1401 USETW(req.wLength, 0); 1402 1403 error = ural_do_request(sc, &req, NULL); 1404 if (error != 0) { 1405 device_printf(sc->sc_dev, "could not set test mode: %s\n", |
1406 usb2_errstr(error)); | 1406 usbd_errstr(error)); |
1407 } 1408} 1409 1410static void 1411ural_eeprom_read(struct ural_softc *sc, uint16_t addr, void *buf, int len) 1412{ 1413 struct usb_device_request req; 1414 usb_error_t error; 1415 1416 req.bmRequestType = UT_READ_VENDOR_DEVICE; 1417 req.bRequest = RAL_READ_EEPROM; 1418 USETW(req.wValue, 0); 1419 USETW(req.wIndex, addr); 1420 USETW(req.wLength, len); 1421 1422 error = ural_do_request(sc, &req, buf); 1423 if (error != 0) { 1424 device_printf(sc->sc_dev, "could not read EEPROM: %s\n", | 1407 } 1408} 1409 1410static void 1411ural_eeprom_read(struct ural_softc *sc, uint16_t addr, void *buf, int len) 1412{ 1413 struct usb_device_request req; 1414 usb_error_t error; 1415 1416 req.bmRequestType = UT_READ_VENDOR_DEVICE; 1417 req.bRequest = RAL_READ_EEPROM; 1418 USETW(req.wValue, 0); 1419 USETW(req.wIndex, addr); 1420 USETW(req.wLength, len); 1421 1422 error = ural_do_request(sc, &req, buf); 1423 if (error != 0) { 1424 device_printf(sc->sc_dev, "could not read EEPROM: %s\n", |
1425 usb2_errstr(error)); | 1425 usbd_errstr(error)); |
1426 } 1427} 1428 1429static uint16_t 1430ural_read(struct ural_softc *sc, uint16_t reg) 1431{ 1432 struct usb_device_request req; 1433 usb_error_t error; 1434 uint16_t val; 1435 1436 req.bmRequestType = UT_READ_VENDOR_DEVICE; 1437 req.bRequest = RAL_READ_MAC; 1438 USETW(req.wValue, 0); 1439 USETW(req.wIndex, reg); 1440 USETW(req.wLength, sizeof (uint16_t)); 1441 1442 error = ural_do_request(sc, &req, &val); 1443 if (error != 0) { 1444 device_printf(sc->sc_dev, "could not read MAC register: %s\n", | 1426 } 1427} 1428 1429static uint16_t 1430ural_read(struct ural_softc *sc, uint16_t reg) 1431{ 1432 struct usb_device_request req; 1433 usb_error_t error; 1434 uint16_t val; 1435 1436 req.bmRequestType = UT_READ_VENDOR_DEVICE; 1437 req.bRequest = RAL_READ_MAC; 1438 USETW(req.wValue, 0); 1439 USETW(req.wIndex, reg); 1440 USETW(req.wLength, sizeof (uint16_t)); 1441 1442 error = ural_do_request(sc, &req, &val); 1443 if (error != 0) { 1444 device_printf(sc->sc_dev, "could not read MAC register: %s\n", |
1445 usb2_errstr(error)); | 1445 usbd_errstr(error)); |
1446 return 0; 1447 } 1448 1449 return le16toh(val); 1450} 1451 1452static void 1453ural_read_multi(struct ural_softc *sc, uint16_t reg, void *buf, int len) --- 5 unchanged lines hidden (view full) --- 1459 req.bRequest = RAL_READ_MULTI_MAC; 1460 USETW(req.wValue, 0); 1461 USETW(req.wIndex, reg); 1462 USETW(req.wLength, len); 1463 1464 error = ural_do_request(sc, &req, buf); 1465 if (error != 0) { 1466 device_printf(sc->sc_dev, "could not read MAC register: %s\n", | 1446 return 0; 1447 } 1448 1449 return le16toh(val); 1450} 1451 1452static void 1453ural_read_multi(struct ural_softc *sc, uint16_t reg, void *buf, int len) --- 5 unchanged lines hidden (view full) --- 1459 req.bRequest = RAL_READ_MULTI_MAC; 1460 USETW(req.wValue, 0); 1461 USETW(req.wIndex, reg); 1462 USETW(req.wLength, len); 1463 1464 error = ural_do_request(sc, &req, buf); 1465 if (error != 0) { 1466 device_printf(sc->sc_dev, "could not read MAC register: %s\n", |
1467 usb2_errstr(error)); | 1467 usbd_errstr(error)); |
1468 } 1469} 1470 1471static void 1472ural_write(struct ural_softc *sc, uint16_t reg, uint16_t val) 1473{ 1474 struct usb_device_request req; 1475 usb_error_t error; 1476 1477 req.bmRequestType = UT_WRITE_VENDOR_DEVICE; 1478 req.bRequest = RAL_WRITE_MAC; 1479 USETW(req.wValue, val); 1480 USETW(req.wIndex, reg); 1481 USETW(req.wLength, 0); 1482 1483 error = ural_do_request(sc, &req, NULL); 1484 if (error != 0) { 1485 device_printf(sc->sc_dev, "could not write MAC register: %s\n", | 1468 } 1469} 1470 1471static void 1472ural_write(struct ural_softc *sc, uint16_t reg, uint16_t val) 1473{ 1474 struct usb_device_request req; 1475 usb_error_t error; 1476 1477 req.bmRequestType = UT_WRITE_VENDOR_DEVICE; 1478 req.bRequest = RAL_WRITE_MAC; 1479 USETW(req.wValue, val); 1480 USETW(req.wIndex, reg); 1481 USETW(req.wLength, 0); 1482 1483 error = ural_do_request(sc, &req, NULL); 1484 if (error != 0) { 1485 device_printf(sc->sc_dev, "could not write MAC register: %s\n", |
1486 usb2_errstr(error)); | 1486 usbd_errstr(error)); |
1487 } 1488} 1489 1490static void 1491ural_write_multi(struct ural_softc *sc, uint16_t reg, void *buf, int len) 1492{ 1493 struct usb_device_request req; 1494 usb_error_t error; 1495 1496 req.bmRequestType = UT_WRITE_VENDOR_DEVICE; 1497 req.bRequest = RAL_WRITE_MULTI_MAC; 1498 USETW(req.wValue, 0); 1499 USETW(req.wIndex, reg); 1500 USETW(req.wLength, len); 1501 1502 error = ural_do_request(sc, &req, buf); 1503 if (error != 0) { 1504 device_printf(sc->sc_dev, "could not write MAC register: %s\n", | 1487 } 1488} 1489 1490static void 1491ural_write_multi(struct ural_softc *sc, uint16_t reg, void *buf, int len) 1492{ 1493 struct usb_device_request req; 1494 usb_error_t error; 1495 1496 req.bmRequestType = UT_WRITE_VENDOR_DEVICE; 1497 req.bRequest = RAL_WRITE_MULTI_MAC; 1498 USETW(req.wValue, 0); 1499 USETW(req.wIndex, reg); 1500 USETW(req.wLength, len); 1501 1502 error = ural_do_request(sc, &req, buf); 1503 if (error != 0) { 1504 device_printf(sc->sc_dev, "could not write MAC register: %s\n", |
1505 usb2_errstr(error)); | 1505 usbd_errstr(error)); |
1506 } 1507} 1508 1509static void 1510ural_bbp_write(struct ural_softc *sc, uint8_t reg, uint8_t val) 1511{ 1512 uint16_t tmp; 1513 int ntries; --- 601 unchanged lines hidden (view full) --- 2115 tmp |= RAL_DROP_TODS; 2116 if (!(ifp->if_flags & IFF_PROMISC)) 2117 tmp |= RAL_DROP_NOT_TO_ME; 2118 } 2119 ural_write(sc, RAL_TXRX_CSR2, tmp); 2120 2121 ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; 2122 ifp->if_drv_flags |= IFF_DRV_RUNNING; | 1506 } 1507} 1508 1509static void 1510ural_bbp_write(struct ural_softc *sc, uint8_t reg, uint8_t val) 1511{ 1512 uint16_t tmp; 1513 int ntries; --- 601 unchanged lines hidden (view full) --- 2115 tmp |= RAL_DROP_TODS; 2116 if (!(ifp->if_flags & IFF_PROMISC)) 2117 tmp |= RAL_DROP_NOT_TO_ME; 2118 } 2119 ural_write(sc, RAL_TXRX_CSR2, tmp); 2120 2121 ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; 2122 ifp->if_drv_flags |= IFF_DRV_RUNNING; |
2123 usb2_transfer_set_stall(sc->sc_xfer[URAL_BULK_WR]); 2124 usb2_transfer_start(sc->sc_xfer[URAL_BULK_RD]); | 2123 usbd_transfer_set_stall(sc->sc_xfer[URAL_BULK_WR]); 2124 usbd_transfer_start(sc->sc_xfer[URAL_BULK_RD]); |
2125 return; 2126 2127fail: ural_stop(sc); 2128#undef N 2129} 2130 2131static void 2132ural_init(void *priv) --- 18 unchanged lines hidden (view full) --- 2151 RAL_LOCK_ASSERT(sc, MA_OWNED); 2152 2153 ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE); 2154 2155 /* 2156 * Drain all the transfers, if not already drained: 2157 */ 2158 RAL_UNLOCK(sc); | 2125 return; 2126 2127fail: ural_stop(sc); 2128#undef N 2129} 2130 2131static void 2132ural_init(void *priv) --- 18 unchanged lines hidden (view full) --- 2151 RAL_LOCK_ASSERT(sc, MA_OWNED); 2152 2153 ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE); 2154 2155 /* 2156 * Drain all the transfers, if not already drained: 2157 */ 2158 RAL_UNLOCK(sc); |
2159 usb2_transfer_drain(sc->sc_xfer[URAL_BULK_WR]); 2160 usb2_transfer_drain(sc->sc_xfer[URAL_BULK_RD]); | 2159 usbd_transfer_drain(sc->sc_xfer[URAL_BULK_WR]); 2160 usbd_transfer_drain(sc->sc_xfer[URAL_BULK_RD]); |
2161 RAL_LOCK(sc); 2162 2163 ural_unsetup_tx_list(sc); 2164 2165 /* disable Rx */ 2166 ural_write(sc, RAL_TXRX_CSR2, RAL_DISABLE_RX); 2167 /* reset ASIC and BBP (but won't reset MAC registers!) */ 2168 ural_write(sc, RAL_MAC_CSR1, RAL_RESET_ASIC | RAL_RESET_BBP); --- 60 unchanged lines hidden (view full) --- 2229 struct ieee80211vap *vap = ni->ni_vap; 2230 struct ural_vap *uvp = URAL_VAP(vap); 2231 2232 /* clear statistic registers (STA_CSR0 to STA_CSR10) */ 2233 ural_read_multi(sc, RAL_STA_CSR0, sc->sta, sizeof sc->sta); 2234 2235 ieee80211_amrr_node_init(&uvp->amrr, &URAL_NODE(ni)->amn, ni); 2236 | 2161 RAL_LOCK(sc); 2162 2163 ural_unsetup_tx_list(sc); 2164 2165 /* disable Rx */ 2166 ural_write(sc, RAL_TXRX_CSR2, RAL_DISABLE_RX); 2167 /* reset ASIC and BBP (but won't reset MAC registers!) */ 2168 ural_write(sc, RAL_MAC_CSR1, RAL_RESET_ASIC | RAL_RESET_BBP); --- 60 unchanged lines hidden (view full) --- 2229 struct ieee80211vap *vap = ni->ni_vap; 2230 struct ural_vap *uvp = URAL_VAP(vap); 2231 2232 /* clear statistic registers (STA_CSR0 to STA_CSR10) */ 2233 ural_read_multi(sc, RAL_STA_CSR0, sc->sta, sizeof sc->sta); 2234 2235 ieee80211_amrr_node_init(&uvp->amrr, &URAL_NODE(ni)->amn, ni); 2236 |
2237 usb2_callout_reset(&uvp->amrr_ch, hz, ural_amrr_timeout, uvp); | 2237 usb_callout_reset(&uvp->amrr_ch, hz, ural_amrr_timeout, uvp); |
2238} 2239 2240static void 2241ural_amrr_timeout(void *arg) 2242{ 2243 struct ural_vap *uvp = arg; 2244 struct ieee80211vap *vap = &uvp->vap; 2245 struct ieee80211com *ic = vap->iv_ic; --- 21 unchanged lines hidden (view full) --- 2267 fail = sc->sta[9]; /* TX retry-fail count */ 2268 2269 ieee80211_amrr_tx_update(&URAL_NODE(ni)->amn, 2270 ok+fail, ok, sc->sta[8] + fail); 2271 (void) ieee80211_amrr_choose(ni, &URAL_NODE(ni)->amn); 2272 2273 ifp->if_oerrors += fail; /* count TX retry-fail as Tx errors */ 2274 | 2238} 2239 2240static void 2241ural_amrr_timeout(void *arg) 2242{ 2243 struct ural_vap *uvp = arg; 2244 struct ieee80211vap *vap = &uvp->vap; 2245 struct ieee80211com *ic = vap->iv_ic; --- 21 unchanged lines hidden (view full) --- 2267 fail = sc->sta[9]; /* TX retry-fail count */ 2268 2269 ieee80211_amrr_tx_update(&URAL_NODE(ni)->amn, 2270 ok+fail, ok, sc->sta[8] + fail); 2271 (void) ieee80211_amrr_choose(ni, &URAL_NODE(ni)->amn); 2272 2273 ifp->if_oerrors += fail; /* count TX retry-fail as Tx errors */ 2274 |
2275 usb2_callout_reset(&uvp->amrr_ch, hz, ural_amrr_timeout, uvp); | 2275 usb_callout_reset(&uvp->amrr_ch, hz, ural_amrr_timeout, uvp); |
2276 RAL_UNLOCK(sc); 2277} 2278 2279static int 2280ural_pause(struct ural_softc *sc, int timeout) 2281{ 2282 | 2276 RAL_UNLOCK(sc); 2277} 2278 2279static int 2280ural_pause(struct ural_softc *sc, int timeout) 2281{ 2282 |
2283 usb2_pause_mtx(&sc->sc_mtx, timeout); | 2283 usb_pause_mtx(&sc->sc_mtx, timeout); |
2284 return (0); 2285} | 2284 return (0); 2285} |