From owner-freebsd-wireless@freebsd.org Mon Sep 21 06:20:40 2015 Return-Path: Delivered-To: freebsd-wireless@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D0903A05E7A for ; Mon, 21 Sep 2015 06:20:40 +0000 (UTC) (envelope-from mgrooms@shrew.net) Received: from mx2.shrew.net (mx2.shrew.net [38.97.5.132]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 7E018127D; Mon, 21 Sep 2015 06:20:40 +0000 (UTC) (envelope-from mgrooms@shrew.net) Received: from mail.shrew.net (mail.shrew.prv [10.24.10.20]) by mx2.shrew.net (8.14.7/8.14.7) with ESMTP id t8L6IUXQ084234; Mon, 21 Sep 2015 01:18:31 -0500 (CDT) (envelope-from mgrooms@shrew.net) Received: from [10.22.200.30] (cpe-72-179-24-154.austin.res.rr.com [72.179.24.154]) by mail.shrew.net (Postfix) with ESMTPSA id F195C18BA77; Mon, 21 Sep 2015 01:18:19 -0500 (CDT) Subject: Re: urtwn and hostap To: Adrian Chadd References: <55F90187.10809@shrew.net> <55F906CB.9030007@shrew.net> <55F996FD.5060804@shrew.net> <55FA6022.8090609@shrew.net> <20150917151249.GA68201@ns.kevlo.org> <55FAEA82.3060602@shrew.net> Cc: Kevin Lo , "freebsd-wireless@freebsd.org" From: Matthew Grooms Message-ID: <55FFA1B9.8040005@shrew.net> Date: Mon, 21 Sep 2015 01:20:41 -0500 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------040409030903030408010304" X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.4.3 (mx2.shrew.net [10.24.10.11]); Mon, 21 Sep 2015 01:18:31 -0500 (CDT) X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: "Discussions of 802.11 stack, tools device driver development." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 21 Sep 2015 06:20:41 -0000 This is a multi-part message in MIME format. --------------040409030903030408010304 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Here is a new patch for the urtwn driver. I basically brought over the changes committed to NetBSD that enabled hostap mode by merging in what appeared to be the relevant differences. I also merged in two changes that looked like they would make monitor mode more useful. The only change I added was to revert the beacon config register back to it's original value when the adapter is switched back to station mode. There are no comments around that particular call in the NetBSD driver so I'm not sure if what I did was correct, it just seemed logical. This patch doesn't manually generate a beacon frame using ieee80211_beacon_alloc so I assume that setting the MSR register using the appropriate value instructs the chip to handle that in hardware. I tested this on both my ESXi VM using USB passthru and my raspberry pi 2. Both appear to work as expected but the connection seemed less stable on the latter. Not sure if my wifi to wifi bridge setup had anything to do with that. Performance testing with the VM did produce much better results than the previous patch. From the perspective of the associated client, it was around 22Mbit down and 6Mbit up. That's pretty close to what I get when associating directly to my hardware AP. This patch is also not limited to enabling hostap support for only the ES variant. It appears to work equally well with my Edimax adapters that use the more popular CUS chip. I'd be happy to deliver a compatible USB adapter to any FreeBSD developer who is willing to take a look at this. :) Thanks again, -Matthew On 9/17/2015 12:11 PM, Adrian Chadd wrote: > hah, make no assumptions about correctness. :) > > Some of these NICs will do hostap mode themselves - you configure them > in hostap mode and they take care of managing beaconing, station > state, power save management, etc. This patch doesn't do that - it's > just treating the NIC as a mostly dumb device and expecting the stack > to do it. > > It's fine as a starting point, as long as the NIC and its firmware is > happy with it. But yes, we do need to figure out how to get the beacon > updates to push new beacon frames into the NIC as required. > > > > -adrian > > > On 17 September 2015 at 09:29, Matthew Grooms wrote: >> I just assumed that the card was doing the right thing with the beacon since >> it was being loaded into a specific queue. Like I said, I'm fumbling around >> here. Ok, I see the NetBSD commit now. It doesn't look anything like the >> patch I was working with. It also doesn't look specific to RTL8188E ... >> >> http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/dev/usb/if_urtwn.c.diff?r1=1.25&r2=1.26&only_with_tag=MAIN >> >> I should have checked NetBSD before hand :/ >> >> -Matthew >> >> >> On 9/17/2015 10:22 AM, Adrian Chadd wrote: >>> I think this patch is missing beacon updates - it just transmits the >>> same beacon over and oveR? >>> >>> >>> -a >>> >>> >>> On 17 September 2015 at 08:12, Kevin Lo wrote: >>>> On Thu, Sep 17, 2015 at 01:39:30AM -0500, Matthew Grooms wrote: >>>>> Seems to behave better now and hostap appears to be working ... >>>>> >>>>> #ifconfig wlan0 create wlandev urtwn0 wlanmode hostap >>>>> #ifconfig wlan0 list caps >>>>> >>>>> drivercaps=2181c401 >>>>> >>>>> #ifconfig wlan0 up ssid freebsdap mode 11g channel 1 >>>>> #ifconfig bridge0 create up addm em0 addm wlan0 >>>>> >>>>> #ifconfig wlan0 >>>>> wlan0: flags=8943 metric >>>>> 0 mtu 1500 >>>>> ether 00:c3:e1:16:11:32 >>>>> nd6 options=29 >>>>> media: IEEE 802.11 Wireless Ethernet autoselect mode 11g >>>>> >>>>> status: running >>>>> ssid freebsdap channel 1 (2412 MHz 11g) bssid >>>>> 00:c3:e1:16:11:32 >>>>> country US authmode OPEN privacy OFF txpower 0 scanvalid 60 >>>>> protmode CTS dtimperiod 1 -dfs >>>>> groups: wlan >>>>> >>>>> #ifconfig bridge0 >>>>> bridge0: flags=8843 metric 0 mtu >>>>> 1500 >>>>> ether 02:df:20:d2:42:00 >>>>> nd6 options=1 >>>>> groups: bridge >>>>> id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15 >>>>> maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200 >>>>> root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0 >>>>> member: wlan0 flags=143 >>>>> ifmaxaddr 0 port 3 priority 128 path cost 370370 >>>>> member: em0 flags=143 >>>>> ifmaxaddr 0 port 1 priority 128 path cost 20000 >>>>> >>>>> The speed leaves a lot to be desired. Throughput for the associated host >>>>> is typically about 2Mbit down and 6Mbit up. I'm assume that's indicative >>>>> of a problem. Occasionally I also see the this message on the console >>>>> when I'm bringing the adapter up ... >>>>> >>>>> wlan0: ieee80211_new_state_locked: pending INIT -> SCAN transition lost >>>>> >>>>> If I down and up the adapter again, it seems to correct itself. Not sure >>>>> what that's all about. I am passing the USB adapter through to a VM >>>>> inside of ESXi to test the patch, so maybe that has something to do with >>>>> these quirks. I'll try to run some tests with the adapter associated to >>>>> a physical AP tomorrow to get a baseline. >>>> I knew OpenBSD had patches about hostap support for urtwn(4), but those >>>> don't look quite right. I think that's why OpenBSD developers didn't >>>> commit them. BTW, NetBSD adopted OpenBSD's patches, I tested it on >>>> NetBSD >>>> about four months ago, the connection was not stable... >>>> >>>>> Thanks, >>>>> >>>>> -Matthew >>>> Kevin >>>> >>>>> On 9/16/2015 11:24 AM, Adrian Chadd wrote: >>>>>> The only one to look at is ath(4). I've not fixed/hacked on any other >>>>>> hostap chips. :) >>>>>> >>>>>> if_ath_beacon.c has the logic - it gets a reference when creating a >>>>>> beacon frame. >>>>>> >>>>>> >>>>>> >>>>>> -adrian >>>>>> >>>>>> >>>>>> On 16 September 2015 at 09:21, Matthew Grooms >>>>>> wrote: >>>>>>> On 9/16/2015 10:58 AM, Adrian Chadd wrote: >>>>>>>> I think the net80211 beacon create routine doesn't allocate a node >>>>>>>> ref. Yeah, it doesn't. You have to do ieee80211_ref_node() after >>>>>>>> calling becaon_create(), and deref it if the tx fails. The TX success >>>>>>>> will free the node ref for you. >>>>>>>> >>>>>>> Got it. I'll take another look at one of the drivers that support >>>>>>> hostap to >>>>>>> make sure I'm following the same pattern. Thanks again for the >>>>>>> feedback! >>>>>>> >>>>>>> -Matthew >>>>>>> >>>>>>> >>>>>>>> -adrian >>>>>>>> >>>>>>>> >>>>>>>> On 16 September 2015 at 04:27, Idwer Vollering >>>>>>>> wrote: >>>>>>>>> 2015-09-16 8:06 GMT+02:00 Matthew Grooms : >>>>>>>>> >>>>>>>>>> It looks like my screenshot got scrubbed. Here is my hopefully >>>>>>>>>> faithful >>>>>>>>>> transcription ... >>>>>>>>>> >>>>>>>>>> Fatal trap 9: general protection fault while in kernel mode >>>>>>>>>> cpuid = 3; apic id = 03 >>>>>>>>>> instruction pointer = 0x20:0xffffffff80a01105 >>>>>>>>>> stack pointer = 0x28:0xfffffe0092fe86f0 >>>>>>>>>> frame pointer = 0x28:0xfffffe0092fe8740 >>>>>>>>>> code segment = base 0x0, limit 0xfffff, type 0x1b >>>>>>>>>> = DPL 0, pres 1, long 1, def32 >>>>>>>>>> 0, gran >>>>>>>>>> 1 >>>>>>>>>> processor eflags = interrupt enabled, resume, IOPL = 0 >>>>>>>>>> current process = 716 (ifconfig) >>>>>>>>>> [thread pid 716 tid 100082 ] >>>>>>>>>> Stopped at __mtx_lock_flags+0x55: movq (%r13),%rax >>>>>>>>>> db> bt >>>>>>>>>> Tracing pid 716 tid 100082 td 0xffffff800512814d0 >>>>>>>>>> __mtx_lock_flags() at __mtx_lock_flags+0x55/frame >>>>>>>>>> 0xfffffe0092fe8740 >>>>>>>>>> ieee80211_free_node() at ieee80211_free_node()_0x38/frame >>>>>>>>>> 0xfffffe0092fe8780 >>>>>>>>>> ieee80211_node_vdetach() at ieee80211_node_vdetach()+0x2d/frame >>>>>>>>>> 0xfffffe0092fe87a0 >>>>>>>>>> ieee80211_vap_detach() at ieee80211_vap_detach()+0x35e/frame >>>>>>>>>> 0xfffffe0092fe87d0 >>>>>>>>>> urtwn_vap_delete() at urtwn_vap_delete()+0xe/frame >>>>>>>>>> 0xfffffe0092fe87f0 >>>>>>>>>> if_clone_destroyif() at if_clone_destroyif()+0x1aa/frame >>>>>>>>>> 0xfffffe0092fe8840 >>>>>>>>>> if_clone_destroy() at if_clone_destroy()0x8e/frame >>>>>>>>>> 0xfffffe0092fe8860 >>>>>>>>>> kern_ioctl() at kern_ioctl()+0x230/frame 0xfffffe0092fe88c0 >>>>>>>>>> sys_ioctl() at sys_ioctl()+0x153/frame 0xfffffe0092fe89a0 >>>>>>>>>> amd64_syscall() at amd64_syscall()+0x282/frame 0xfffffe0092fe8ab0 >>>>>>>>>> Xfast_syscall() at Xfast_syscall()+0xfb/frame 0xfffffe0092fe8ab0 >>>>>>>>>> -- syscall (54, FreeBSD ELF64, sys_ioctl), rip = 0x8011e8c8a, rsp = >>>>>>>>>> 0x7fffffffe2f8, rbp = 0x7fffffffe310 -- >>>>>>>>>> db> >>>>>>>>> Assuming dumpdev="AUTO" is set in /etc/rc.conf, you should have >>>>>>>>> entered 'dump' at the db> blinker :) >>>>>>>>> >>>>>>>>> The trap details are found in /var/crash/, run kgdb: "kgdb >>>>>>>>> /boot/kernel/kernel /var/crash/vmcore.last", then run 'bt' and 'up' >>>>>>>>> at >>>>>>>>> its prompt. >>>>>>>>> >>>>>>>>>> -Matthew >>>>>>>>>> _______________________________________________ >>>>>>>>>> freebsd-wireless@freebsd.org mailing list >>>>>>>>>> https://lists.freebsd.org/mailman/listinfo/freebsd-wireless >>>>>>>>>> To unsubscribe, send any mail to >>>>>>>>>> "freebsd-wireless-unsubscribe@freebsd.org" >>>>>>>>> _______________________________________________ >>>>>>>>> freebsd-wireless@freebsd.org mailing list >>>>>>>>> https://lists.freebsd.org/mailman/listinfo/freebsd-wireless >>>>>>>>> To unsubscribe, send any mail to >>>>>>>>> "freebsd-wireless-unsubscribe@freebsd.org" >>>>>>>> _______________________________________________ >>>>>>>> freebsd-wireless@freebsd.org mailing list >>>>>>>> https://lists.freebsd.org/mailman/listinfo/freebsd-wireless >>>>>>>> To unsubscribe, send any mail to >>>>>>>> "freebsd-wireless-unsubscribe@freebsd.org" >>>>>>> _______________________________________________ >>>>>>> freebsd-wireless@freebsd.org mailing list >>>>>>> https://lists.freebsd.org/mailman/listinfo/freebsd-wireless >>>>>>> To unsubscribe, send any mail to >>>>>>> "freebsd-wireless-unsubscribe@freebsd.org" >>>>> Index: sys/dev/usb/wlan/if_urtwn.c >>>>> =================================================================== >>>>> --- sys/dev/usb/wlan/if_urtwn.c (revision 287342) >>>>> +++ sys/dev/usb/wlan/if_urtwn.c (working copy) >>>>> @@ -181,6 +181,8 @@ >>>>> static struct mbuf * urtwn_rxeof(struct usb_xfer *, struct urtwn_data >>>>> *, >>>>> int *, int8_t *); >>>>> static void urtwn_txeof(struct usb_xfer *, struct urtwn_data >>>>> *); >>>>> +int urtwn_txbcn(struct ieee80211vap *vap, >>>>> + struct ieee80211_node *); >>>>> static int urtwn_alloc_list(struct urtwn_softc *, >>>>> struct urtwn_data[], int, int); >>>>> static int urtwn_alloc_rx_list(struct urtwn_softc *); >>>>> @@ -436,6 +438,10 @@ >>>>> | IEEE80211_C_WPA /* 802.11i */ >>>>> ; >>>>> >>>>> + if (sc->chip & URTWN_CHIP_88E) >>>>> + ic->ic_caps |= >>>>> + IEEE80211_C_HOSTAP; /* HostAp mode supported >>>>> */ >>>>> + >>>>> bands = 0; >>>>> setbit(&bands, IEEE80211_MODE_11B); >>>>> setbit(&bands, IEEE80211_MODE_11G); >>>>> @@ -857,6 +863,39 @@ >>>>> sc->sc_txtimer = 0; >>>>> } >>>>> >>>>> +/* >>>>> + * Push a beacon frame into the chip and check if it was accepted. >>>>> Beacon will >>>>> + * be repeated by the chip every R92C_BCN_INTERVAL. >>>>> + */ >>>>> +int >>>>> +urtwn_txbcn(struct ieee80211vap *vap, struct ieee80211_node *ni) >>>>> +{ >>>>> + struct ieee80211com *ic = ni->ni_ic; >>>>> + struct urtwn_softc *sc = ic->ic_softc; >>>>> + struct urtwn_data *bf; >>>>> + struct mbuf *m; >>>>> + >>>>> + ieee80211_ref_node(ni); >>>>> + m = ieee80211_beacon_alloc(ni, &URTWN_VAP(vap)->bo); >>>>> + >>>>> + bf = urtwn_getbuf(sc); >>>>> + if (bf == NULL) { >>>>> + ieee80211_free_node(ni); >>>>> + m_freem(m); >>>>> + return (ENOBUFS); >>>>> + } >>>>> + >>>>> + if (urtwn_tx_start(sc, ni, m, bf) != 0) { >>>>> + ieee80211_free_node(ni); >>>>> + STAILQ_INSERT_HEAD(&sc->sc_tx_inactive, bf, next); >>>>> + return (EIO); >>>>> + } >>>>> + >>>>> + sc->sc_txtimer = 5; >>>>> + >>>>> + return (0); >>>>> +} >>>>> + >>>>> static void >>>>> urtwn_bulk_tx_callback(struct usb_xfer *xfer, usb_error_t error) >>>>> { >>>>> @@ -1466,6 +1505,7 @@ >>>>> struct ieee80211_node *ni; >>>>> enum ieee80211_state ostate; >>>>> uint32_t reg; >>>>> + int error; >>>>> >>>>> ostate = vap->iv_state; >>>>> DPRINTF("%s -> %s\n", ieee80211_state_name[ostate], >>>>> @@ -1553,23 +1593,68 @@ >>>>> } >>>>> >>>>> ni = ieee80211_ref_node(vap->iv_bss); >>>>> - /* Set media status to 'Associated'. */ >>>>> - reg = urtwn_read_4(sc, R92C_CR); >>>>> - reg = RW(reg, R92C_CR_NETTYPE, R92C_CR_NETTYPE_INFRA); >>>>> - urtwn_write_4(sc, R92C_CR, reg); >>>>> >>>>> - /* Set BSSID. */ >>>>> - urtwn_write_4(sc, R92C_BSSID + 0, >>>>> LE_READ_4(&ni->ni_bssid[0])); >>>>> - urtwn_write_4(sc, R92C_BSSID + 4, >>>>> LE_READ_2(&ni->ni_bssid[4])); >>>>> + if (ic->ic_opmode == IEEE80211_M_STA) { >>>>> + /* Set BSSID. */ >>>>> + urtwn_write_4(sc, R92C_BSSID + 0, >>>>> + LE_READ_4(&ni->ni_bssid[0])); >>>>> + urtwn_write_4(sc, R92C_BSSID + 4, >>>>> + LE_READ_2(&ni->ni_bssid[4])); >>>>> >>>>> - if (ic->ic_curmode == IEEE80211_MODE_11B) >>>>> - urtwn_write_1(sc, R92C_INIRTS_RATE_SEL, 0); >>>>> - else /* 802.11b/g */ >>>>> - urtwn_write_1(sc, R92C_INIRTS_RATE_SEL, 3); >>>>> + if (ic->ic_curmode == IEEE80211_MODE_11B) >>>>> + urtwn_write_1(sc, R92C_INIRTS_RATE_SEL, >>>>> 0); >>>>> + else /* 802.11b/g */ >>>>> + urtwn_write_1(sc, R92C_INIRTS_RATE_SEL, >>>>> 3); >>>>> >>>>> - /* Enable Rx of data frames. */ >>>>> - urtwn_write_2(sc, R92C_RXFLTMAP2, 0xffff); >>>>> + /* Enable Rx of data frames. */ >>>>> + urtwn_write_2(sc, R92C_RXFLTMAP2, 0xffff); >>>>> >>>>> + /* Allow Rx from our BSSID only. */ >>>>> + urtwn_write_4(sc, R92C_RCR, urtwn_read_4(sc, >>>>> R92C_RCR) | >>>>> + R92C_RCR_CBSSID_DATA | R92C_RCR_CBSSID_BCN); >>>>> + >>>>> + /* Set media status to 'Associated'. */ >>>>> + reg = urtwn_read_4(sc, R92C_CR); >>>>> + reg = RW(reg, R92C_CR_NETTYPE, >>>>> R92C_CR_NETTYPE_INFRA); >>>>> + urtwn_write_4(sc, R92C_CR, reg); >>>>> + } >>>>> + >>>>> + if (ic->ic_opmode == IEEE80211_M_HOSTAP) { >>>>> + /* Set media status to 'AP'. */ >>>>> + reg = urtwn_read_4(sc, R92C_CR); >>>>> + reg = RW(reg, R92C_CR_NETTYPE, >>>>> R92C_CR_NETTYPE_AP); >>>>> + urtwn_write_4(sc, R92C_CR, reg); >>>>> + >>>>> + /* Set BSSID. */ >>>>> + urtwn_write_4(sc, R92C_BSSID + 0, >>>>> + LE_READ_4(&ni->ni_bssid[0])); >>>>> + urtwn_write_4(sc, R92C_BSSID + 4, >>>>> + LE_READ_2(&ni->ni_bssid[4])); >>>>> + >>>>> + /* >>>>> + * If 3rd or 4th bits are set to zero chip will >>>>> stop >>>>> + * repeating beacon after first transmission for >>>>> port0 >>>>> + * and port1 respectively. This will cause STAs to >>>>> + * disconnect after short period of time. >>>>> + */ >>>>> + reg = urtwn_read_1(sc, R92C_MBID_NUM); >>>>> + reg |= 0x8; >>>>> + reg |= 0x10; >>>>> + urtwn_write_1(sc, R92C_MBID_NUM, reg); >>>>> + >>>>> + /* Invalidate cam entries */ >>>>> + urtwn_cam_init(sc); >>>>> + >>>>> + /* Set chan/bw */ >>>>> + urtwn_set_chan(sc, ic->ic_curchan, NULL); >>>>> + >>>>> + /* Push beacon frame into the chip */ >>>>> + error = urtwn_txbcn(vap, ni); >>>>> + if (error != 0) >>>>> + printf("%s: unable to push beacon into >>>>> the" >>>>> + " chip\n", >>>>> device_get_nameunit(sc->sc_dev)); >>>>> + } >>>>> + >>>>> /* Flush all AC queues. */ >>>>> urtwn_write_1(sc, R92C_TXPAUSE, 0); >>>>> >>>>> @@ -1576,11 +1661,6 @@ >>>>> /* Set beacon interval. */ >>>>> urtwn_write_2(sc, R92C_BCN_INTERVAL, ni->ni_intval); >>>>> >>>>> - /* Allow Rx from our BSSID only. */ >>>>> - urtwn_write_4(sc, R92C_RCR, >>>>> - urtwn_read_4(sc, R92C_RCR) | >>>>> - R92C_RCR_CBSSID_DATA | R92C_RCR_CBSSID_BCN); >>>>> - >>>>> /* Enable TSF synchronization. */ >>>>> urtwn_tsf_sync_enable(sc); >>>>> >>>>> @@ -1754,7 +1834,7 @@ >>>>> struct ieee80211vap *vap = ni->ni_vap; >>>>> struct usb_xfer *xfer; >>>>> struct r92c_tx_desc *txd; >>>>> - uint8_t raid, type; >>>>> + uint8_t raid, type, subtype; >>>>> uint16_t sum; >>>>> int i, hasqos, xferlen; >>>>> struct usb_xfer *urtwn_pipes[4] = { >>>>> @@ -1771,6 +1851,7 @@ >>>>> */ >>>>> wh = mtod(m0, struct ieee80211_frame *); >>>>> type = wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK; >>>>> + subtype = wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK; >>>>> >>>>> if (wh->i_fc[1] & IEEE80211_FC1_PROTECTED) { >>>>> k = ieee80211_crypto_encap(ni, m0); >>>>> @@ -1819,7 +1900,7 @@ >>>>> if (sc->chip & URTWN_CHIP_88E) { >>>>> txd->txdw1 |= htole32( >>>>> SM(R88E_TXDW1_MACID, URTWN_MACID_BSS) | >>>>> - SM(R92C_TXDW1_QSEL, R92C_TXDW1_QSEL_BE) | >>>>> + SM(R92C_TXDW1_QSEL, R88E_TXDW1_QSEL_BE) | >>>>> SM(R92C_TXDW1_RAID, raid)); >>>>> txd->txdw2 |= htole32(R88E_TXDW2_AGGBK); >>>>> } else { >>>>> @@ -1843,9 +1924,20 @@ >>>>> /* Send data at OFDM54. */ >>>>> txd->txdw5 |= htole32(SM(R92C_TXDW5_DATARATE, 11)); >>>>> } else { >>>>> + /* >>>>> + * If beacon frame is pushed into wrong queue, the chip >>>>> won't >>>>> + * start repeating it. >>>>> + */ >>>>> + if (subtype == IEEE80211_FC0_SUBTYPE_BEACON && >>>>> + sc->chip & URTWN_CHIP_88E) >>>>> + txd->txdw1 |= htole32(SM(R92C_TXDW1_QSEL, >>>>> + R88E_TXDW1_QSEL_MGNT)); >>>>> + else >>>>> + txd->txdw1 |= htole32(SM(R92C_TXDW1_QSEL, >>>>> + R92C_TXDW1_QSEL_MGNT)); >>>>> + >>>>> txd->txdw1 |= htole32( >>>>> SM(R92C_TXDW1_MACID, 0) | >>>>> - SM(R92C_TXDW1_QSEL, R92C_TXDW1_QSEL_MGNT) | >>>>> SM(R92C_TXDW1_RAID, R92C_RAID_11B)); >>>>> >>>>> /* Force CCK1. */ >>>>> Index: sys/dev/usb/wlan/if_urtwnreg.h >>>>> =================================================================== >>>>> --- sys/dev/usb/wlan/if_urtwnreg.h (revision 287342) >>>>> +++ sys/dev/usb/wlan/if_urtwnreg.h (working copy) >>>>> @@ -1019,7 +1019,9 @@ >>>>> #define R92C_TXDW1_QSEL_M 0x00001f00 >>>>> #define R92C_TXDW1_QSEL_S 8 >>>>> #define R92C_TXDW1_QSEL_BE 0x00 >>>>> +#define R88E_TXDW1_QSEL_BE 0x03 >>>>> #define R92C_TXDW1_QSEL_MGNT 0x12 >>>>> +#define R88E_TXDW1_QSEL_MGNT 0x10 >>>>> #define R92C_TXDW1_RAID_M 0x000f0000 >>>>> #define R92C_TXDW1_RAID_S 16 >>>>> #define R92C_TXDW1_CIPHER_M 0x00c00000 >>>>> _______________________________________________ >>>>> freebsd-wireless@freebsd.org mailing list >>>>> https://lists.freebsd.org/mailman/listinfo/freebsd-wireless >>>>> To unsubscribe, send any mail to >>>>> "freebsd-wireless-unsubscribe@freebsd.org" >> --------------040409030903030408010304 Content-Type: text/plain; charset=UTF-8; name="urtwn-hostap.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="urtwn-hostap.diff" SW5kZXg6IHN5cy9kZXYvdXNiL3dsYW4vaWZfdXJ0d24uYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBz eXMvZGV2L3VzYi93bGFuL2lmX3VydHduLmMJKHJldmlzaW9uIDI4NzM0MikKKysrIHN5cy9k ZXYvdXNiL3dsYW4vaWZfdXJ0d24uYwkod29ya2luZyBjb3B5KQpAQCAtNDMwLDYgKzQzMCw3 IEBACiAJaWMtPmljX2NhcHMgPQogCQkgIElFRUU4MDIxMV9DX1NUQQkJLyogc3RhdGlvbiBt b2RlICovCiAJCXwgSUVFRTgwMjExX0NfTU9OSVRPUgkJLyogbW9uaXRvciBtb2RlICovCisJ CXwgSUVFRTgwMjExX0NfSE9TVEFQCQkvKiBob3N0YXAgbW9kZSBzdXBwb3J0ZWQgKi8KIAkJ fCBJRUVFODAyMTFfQ19TSFBSRUFNQkxFCS8qIHNob3J0IHByZWFtYmxlIHN1cHBvcnRlZCAq LwogCQl8IElFRUU4MDIxMV9DX1NIU0xPVAkJLyogc2hvcnQgc2xvdCB0aW1lIHN1cHBvcnRl ZCAqLwogCQl8IElFRUU4MDIxMV9DX0JHU0NBTgkJLyogY2FwYWJsZSBvZiBiZyBzY2Fubmlu ZyAqLwpAQCAtMTQ2Niw2ICsxNDY3LDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5p OwogCWVudW0gaWVlZTgwMjExX3N0YXRlIG9zdGF0ZTsKIAl1aW50MzJfdCByZWc7CisJdV9p bnQ4X3QgbXNyOwogCiAJb3N0YXRlID0gdmFwLT5pdl9zdGF0ZTsKIAlEUFJJTlRGKCIlcyAt PiAlc1xuIiwgaWVlZTgwMjExX3N0YXRlX25hbWVbb3N0YXRlXSwKQEAgLTE1NDcsNiArMTU0 OSwxNiBAQAogCQkJLyogRW5hYmxlIFJ4IG9mIGRhdGEgZnJhbWVzLiAqLwogCQkJdXJ0d25f d3JpdGVfMihzYywgUjkyQ19SWEZMVE1BUDIsIDB4ZmZmZik7CiAKKwkJCS8qIEFsbG93IFJ4 IGZyb20gYW55IEJTU0lELiAqLworCQkJdXJ0d25fd3JpdGVfNChzYywgUjkyQ19SQ1IsCisJ CQkgICAgdXJ0d25fcmVhZF80KHNjLCBSOTJDX1JDUikgJgorCQkJICAgIH4oUjkyQ19SQ1Jf Q0JTU0lEX0RBVEEgfCBSOTJDX1JDUl9DQlNTSURfQkNOKSk7CisKKwkJCS8qIEFjY2VwdCBS eCBkYXRhL2NvbnRyb2wvbWFuYWdlbWVudCBmcmFtZXMgKi8KKwkJCXVydHduX3dyaXRlXzQo c2MsIFI5MkNfUkNSLAorCQkJICAgIHVydHduX3JlYWRfNChzYywgUjkyQ19SQ1IpIHwKKwkJ CSAgICBSOTJDX1JDUl9BREYgfCBSOTJDX1JDUl9BQ0YgfCBSOTJDX1JDUl9BTUYpOworCiAJ CQkvKiBUdXJuIGxpbmsgTEVEIG9uLiAqLwogCQkJdXJ0d25fc2V0X2xlZChzYywgVVJUV05f TEVEX0xJTkssIDEpOwogCQkJYnJlYWs7CkBAIC0xNTUzLDYgKzE1NjUsNyBAQAogCQl9CiAK IAkJbmkgPSBpZWVlODAyMTFfcmVmX25vZGUodmFwLT5pdl9ic3MpOworCiAJCS8qIFNldCBt ZWRpYSBzdGF0dXMgdG8gJ0Fzc29jaWF0ZWQnLiAqLwogCQlyZWcgPSB1cnR3bl9yZWFkXzQo c2MsIFI5MkNfQ1IpOwogCQlyZWcgPSBSVyhyZWcsIFI5MkNfQ1JfTkVUVFlQRSwgUjkyQ19D Ul9ORVRUWVBFX0lORlJBKTsKQEAgLTE1NzYsMTQgKzE1ODksNDggQEAKIAkJLyogU2V0IGJl YWNvbiBpbnRlcnZhbC4gKi8KIAkJdXJ0d25fd3JpdGVfMihzYywgUjkyQ19CQ05fSU5URVJW QUwsIG5pLT5uaV9pbnR2YWwpOwogCi0JCS8qIEFsbG93IFJ4IGZyb20gb3VyIEJTU0lEIG9u bHkuICovCi0JCXVydHduX3dyaXRlXzQoc2MsIFI5MkNfUkNSLAotCQkgICAgdXJ0d25fcmVh ZF80KHNjLCBSOTJDX1JDUikgfAotCQkgICAgUjkyQ19SQ1JfQ0JTU0lEX0RBVEEgfCBSOTJD X1JDUl9DQlNTSURfQkNOKTsKKwkJLyogUmVhZCBjdXJyZW50IE1TUiB2YWx1ZSAqLworCQlt c3IgPSB1cnR3bl9yZWFkXzEoc2MsIFI5MkNfTVNSKTsKKwkJbXNyICY9IFI5MkNfTVNSX01B U0s7CiAKLQkJLyogRW5hYmxlIFRTRiBzeW5jaHJvbml6YXRpb24uICovCi0JCXVydHduX3Rz Zl9zeW5jX2VuYWJsZShzYyk7CisJCWlmICh2YXAtPml2X29wbW9kZSA9PSBJRUVFODAyMTFf TV9TVEEpIHsKKwkJCS8qIFNldCBzdGF0aW9uIG1vZGUgYmVhY29uIHBhcmFtZXRlciA/Pz8g Ki8KKwkJCXVydHduX3dyaXRlXzIoc2MsIFI5MkNfQkNOVENGRywgMHg2NjBmKTsKIAorCQkJ LyogQWxsb3cgUnggZnJvbSBvdXIgQlNTSUQgb25seS4gKi8KKwkJCXVydHduX3dyaXRlXzQo c2MsIFI5MkNfUkNSLAorCQkJICAgIHVydHduX3JlYWRfNChzYywgUjkyQ19SQ1IpIHwKKwkJ CSAgICAgIFI5MkNfUkNSX0NCU1NJRF9EQVRBIHwgUjkyQ19SQ1JfQ0JTU0lEX0JDTik7CisK KwkJCS8qIEVuYWJsZSBUU0Ygc3luY2hyb25pemF0aW9uLiAqLworCQkJdXJ0d25fdHNmX3N5 bmNfZW5hYmxlKHNjKTsKKworCQkJLyogU2V0IGFwcHJvcHJpYXRlIE1TUiBiaXRzICovCisJ CQltc3IgfD0gUjkyQ19NU1JfSU5GUkE7CisJCX0KKwkJaWYgKHZhcC0+aXZfb3Btb2RlID09 SUVFRTgwMjExX01fSE9TVEFQKSB7CisJCQkvKiBTZXQgQVAgbW9kZSBiZWFjb24gcGFyYW1l dGVyID8/PyAqLworCQkJdXJ0d25fd3JpdGVfMihzYywgUjkyQ19CQ05UQ0ZHLCAweDAwMGYp OworCisJCQkvKiBBbGxvdyBSeCBmcm9tIGFueSBCU1NJRC4gKi8KKwkJCXVydHduX3dyaXRl XzQoc2MsIFI5MkNfUkNSLAorCQkJICAgIHVydHduX3JlYWRfNChzYywgUjkyQ19SQ1IpICYK KwkJCSAgICB+KFI5MkNfUkNSX0NCU1NJRF9EQVRBIHwgUjkyQ19SQ1JfQ0JTU0lEX0JDTikp OworCisJCQkvKiBSZXNldCBUU0YgdGltZXIgdG8gemVyby4gKi8KKwkJCXJlZyA9IHVydHdu X3JlYWRfNChzYywgUjkyQ19UQ1IpOworCQkJcmVnICY9IH4weDAxOworCQkJdXJ0d25fd3Jp dGVfNChzYywgUjkyQ19UQ1IsIHJlZyk7CisJCQlyZWcgfD0gMHgwMTsKKwkJCXVydHduX3dy aXRlXzQoc2MsIFI5MkNfVENSLCByZWcpOworCisJCQkvKiBTZXQgYXBwcm9wcmlhdGUgTVNS IGJpdHMgKi8KKwkJCW1zciB8PSBSOTJDX01TUl9JTkZSQTsKKwkJfQorCisJCS8qIFdyaXRl IG1vZGlmaWVkIE1TUiB2YWx1ZSAqLworCQl1cnR3bl93cml0ZV8xKHNjLCBSOTJDX01TUiwg bXNyKTsKKwogCQl1cnR3bl93cml0ZV8xKHNjLCBSOTJDX1NJRlNfQ0NLICsgMSwgMTApOwog CQl1cnR3bl93cml0ZV8xKHNjLCBSOTJDX1NJRlNfT0ZETSArIDEsIDEwKTsKIAkJdXJ0d25f d3JpdGVfMShzYywgUjkyQ19TUEVDX1NJRlMgKyAxLCAxMCk7CkBAIC0xNTk3LDEzICsxNjQ0 LDE3IEBACiAJCQkgICAgbmktPm5pX3JhdGVzLnJzX3JhdGVzW25pLT5uaV9yYXRlcy5yc19u cmF0ZXMtMV07CiAJCWVsc2UKIAkJCXVydHduX3JhX2luaXQoc2MpOworCiAJCS8qIFR1cm4g bGluayBMRUQgb24uICovCiAJCXVydHduX3NldF9sZWQoc2MsIFVSVFdOX0xFRF9MSU5LLCAx KTsKIAotCQlzYy0+YXZnX3B3ZGIgPSAtMTsJLyogUmVzZXQgYXZlcmFnZSBSU1NJLiAqLwor CQkvKiBSZXNldCBhdmVyYWdlIFJTU0kuICovCisJCXNjLT5hdmdfcHdkYiA9IC0xOworCiAJ CS8qIFJlc2V0IHRlbXBlcmF0dXJlIGNhbGlicmF0aW9uIHN0YXRlIG1hY2hpbmUuICovCiAJ CXNjLT50aGNhbF9zdGF0ZSA9IDA7CiAJCXNjLT50aGNhbF9sY3RlbXAgPSAwOworCiAJCWll ZWU4MDIxMV9mcmVlX25vZGUobmkpOwogCQlicmVhazsKIAlkZWZhdWx0OgpJbmRleDogc3lz L2Rldi91c2Ivd2xhbi9pZl91cnR3bnJlZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9kZXYv dXNiL3dsYW4vaWZfdXJ0d25yZWcuaAkocmV2aXNpb24gMjg3MzQyKQorKysgc3lzL2Rldi91 c2Ivd2xhbi9pZl91cnR3bnJlZy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw2ICs5Niw3IEBA CiAjZGVmaW5lIFI5MkNfU1lTX0NGRwkJCTB4MGYwCiAvKiBNQUMgR2VuZXJhbCBDb25maWd1 cmF0aW9uLiAqLwogI2RlZmluZSBSOTJDX0NSCQkJCTB4MTAwCisjZGVmaW5lIFI5MkNfTVNS CQkJMHgxMDIKICNkZWZpbmUgUjkyQ19QQlAJCQkweDEwNAogI2RlZmluZSBSOTJDX1RSWERN QV9DVFJMCQkweDEwYwogI2RlZmluZSBSOTJDX1RSWEZGX0JORFkJCQkweDExNApAQCAtMjAz LDYgKzIwNCw3IEBACiAvKiBXTUFDIENvbmZpZ3VyYXRpb24uICovCiAjZGVmaW5lIFI5MkNf QVBTRF9DVFJMCQkJMHg2MDAKICNkZWZpbmUgUjkyQ19CV09QTU9ERQkJCTB4NjAzCisjZGVm aW5lIFI5MkNfVENSCQkJMHg2MDQKICNkZWZpbmUgUjkyQ19SQ1IJCQkweDYwOAogI2RlZmlu ZSBSOTJDX1JYX0RSVklORk9fU1oJCTB4NjBmCiAjZGVmaW5lIFI5MkNfTUFDSUQJCQkweDYx MApAQCAtMzk0LDYgKzM5NiwxMyBAQAogI2RlZmluZSBSOTJDX0NSX05FVFRZUEVfSU5GUkEJ MgogI2RlZmluZSBSOTJDX0NSX05FVFRZUEVfQVAJMwogCisvKiBCaXRzIGZvciBSOTJDX01T Ui4gKi8KKyNkZWZpbmUgUjkyQ19NU1JfTk9MSU5LCQkweDAwCisjZGVmaW5lIFI5MkNfTVNS X0FESE9DCQkweDAxCisjZGVmaW5lIFI5MkNfTVNSX0lORlJBCQkweDAyCisjZGVmaW5lIFI5 MkNfTVNSX0FQCQkweDAzCisjZGVmaW5lIFI5MkNfTVNSX01BU0sJCSh+UjkyQ19NU1JfQVAp CisKIC8qIEJpdHMgZm9yIFI5MkNfUEJQLiAqLwogI2RlZmluZSBSOTJDX1BCUF9QU1JYX00J CTB4MGYKICNkZWZpbmUgUjkyQ19QQlBfUFNSWF9TCQkwCg== --------------040409030903030408010304--