On 17. Oct 2011, at 13:12 , Adrian Chadd wrote: > Author: adrian > Date: Mon Oct 17 13:12:47 2011 > New Revision: 226465 > URL: http://svn.freebsd.org/changeset/base/226465 > > Log: > Fix an issue with 11g beacon frames which looks to be a limitation > on the largest multi-write size. >
Does it compile? I just did a -DKERNFAST recompile and hit: /sys/modules/usb/rum/../../../dev/usb/wlan/if_rum.c: In function 'rum_write_multi': /sys/modules/usb/rum/../../../dev/usb/wlan/if_rum.c:1421: warning: pointer of type 'void *' used in arithmetic > From the submitter: > > == > I looked further into the magic 88-byte threshold after which the bug > occurs. It turns out that figure included the 24-byte tx_desc, and up > to 64 bytes of beacon frame (header+data). > > rum_write_multi doesn't seem happy with writing >64 bytes at a time to > the MAC register. If I break it up into separate calls (e.g. bytes > 0-63, then bytes 64-65, written at the appropriate offset) I see the > proper beacon frames being transmitted now. > == > > Submitted by: Steven Chamberlain <ste...@pyro.eu.org> > MFC after: 3 days > > Modified: > head/sys/dev/usb/wlan/if_rum.c > > Modified: head/sys/dev/usb/wlan/if_rum.c > ============================================================================== > --- head/sys/dev/usb/wlan/if_rum.c Mon Oct 17 13:05:57 2011 > (r226464) > +++ head/sys/dev/usb/wlan/if_rum.c Mon Oct 17 13:12:47 2011 > (r226465) > @@ -1407,20 +1407,25 @@ rum_write_multi(struct rum_softc *sc, ui > { > struct usb_device_request req; > usb_error_t error; > + int offset; > > req.bmRequestType = UT_WRITE_VENDOR_DEVICE; > req.bRequest = RT2573_WRITE_MULTI_MAC; > USETW(req.wValue, 0); > - USETW(req.wIndex, reg); > - USETW(req.wLength, len); > > - error = rum_do_request(sc, &req, buf); > - if (error != 0) { > - device_printf(sc->sc_dev, > - "could not multi write MAC register: %s\n", > - usbd_errstr(error)); > + /* write at most 64 bytes at a time */ > + for (offset = 0; offset < len; offset += 64) { > + USETW(req.wIndex, reg + offset); > + USETW(req.wLength, MIN(len - offset, 64)); > + > + error = rum_do_request(sc, &req, buf + offset); > + if (error != 0) { > + device_printf(sc->sc_dev, > + "could not multi write MAC register: %s\n", > + usbd_errstr(error)); > + return (error); > + } > } > - return (error); > } > > static void -- Bjoern A. Zeeb You have to have visions! Stop bit received. Insert coin for new address family. _______________________________________________ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"