Deleted Added
full compact
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}