Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 21 Sep 2015 01:20:41 -0500
From:      Matthew Grooms <mgrooms@shrew.net>
To:        Adrian Chadd <adrian.chadd@gmail.com>
Cc:        Kevin Lo <kevlo@freebsd.org>, "freebsd-wireless@freebsd.org" <freebsd-wireless@freebsd.org>
Subject:   Re: urtwn and hostap
Message-ID:  <55FFA1B9.8040005@shrew.net>
In-Reply-To: <CAJ-Vmo=mcOx4HON8y94iegzjkYpJc34gEq3hOKhAZwZgnhgyvg@mail.gmail.com>
References:  <55F90187.10809@shrew.net> <55F906CB.9030007@shrew.net> <CAPp9Ormnjpwfk6s5UDei=EUBrmi_Ogapjx1nDTUUN=RTYWwVQA@mail.gmail.com> <CAJ-Vmo=BpM8gCztJm-kBVXY=oRe6vEqS7o5JeSxpUXve4d2chQ@mail.gmail.com> <55F996FD.5060804@shrew.net> <CAJ-VmomwQGDDacpHtSL6W4dXRLAy%2B86piFtHJSMnpZHtyd1A%2Bg@mail.gmail.com> <55FA6022.8090609@shrew.net> <20150917151249.GA68201@ns.kevlo.org> <CAJ-Vmo=gJbUXH4DHco2817PDQ7NJbANHEAAjAzy506wg_rpe6w@mail.gmail.com> <55FAEA82.3060602@shrew.net> <CAJ-Vmo=mcOx4HON8y94iegzjkYpJc34gEq3hOKhAZwZgnhgyvg@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
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 <mgrooms@shrew.net> 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 <kevlo@freebsd.org> 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<STA,HOSTAP,SHSLOT,SHPREAMBLE,MONITOR,WPA1,WPA2,BGSCAN>
>>>>>
>>>>> #ifconfig wlan0 up ssid freebsdap mode 11g channel 1
>>>>> #ifconfig bridge0 create up addm em0 addm wlan0
>>>>>
>>>>> #ifconfig wlan0
>>>>> wlan0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric
>>>>> 0 mtu 1500
>>>>>            ether 00:c3:e1:16:11:32
>>>>>            nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
>>>>>            media: IEEE 802.11 Wireless Ethernet autoselect mode 11g
>>>>> <hostap>
>>>>>            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<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu
>>>>> 1500
>>>>>            ether 02:df:20:d2:42:00
>>>>>            nd6 options=1<PERFORMNUD>
>>>>>            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<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
>>>>>                    ifmaxaddr 0 port 3 priority 128 path cost 370370
>>>>>            member: em0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
>>>>>                    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 <mgrooms@shrew.net>
>>>>>> 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 <vidwer@gmail.com>
>>>>>>>> wrote:
>>>>>>>>> 2015-09-16 8:06 GMT+02:00 Matthew Grooms <mgrooms@shrew.net>:
>>>>>>>>>
>>>>>>>>>> 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--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?55FFA1B9.8040005>