Date: Mon, 17 Oct 2011 13:25:53 +0000 From: "Bjoern A. Zeeb" <bzeeb-lists@lists.zabbadoz.net> To: Adrian Chadd <adrian@freebsd.org> Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r226465 - head/sys/dev/usb/wlan Message-ID: <2F05371F-0989-4424-9CCD-A92FB89F9191@lists.zabbadoz.net> In-Reply-To: <201110171312.p9HDCmRu024662@svn.freebsd.org> References: <201110171312.p9HDCmRu024662@svn.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
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 >=20 > Log: > Fix an issue with 11g beacon frames which looks to be a limitation > on the largest multi-write size. >=20 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 > =46rom the submitter: >=20 > =3D=3D > 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). >=20 > 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. > =3D=3D >=20 > Submitted by: Steven Chamberlain <steven@pyro.eu.org> > MFC after: 3 days >=20 > Modified: > head/sys/dev/usb/wlan/if_rum.c >=20 > Modified: head/sys/dev/usb/wlan/if_rum.c > = =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D > --- 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; >=20 > req.bmRequestType =3D UT_WRITE_VENDOR_DEVICE; > req.bRequest =3D RT2573_WRITE_MULTI_MAC; > USETW(req.wValue, 0); > - USETW(req.wIndex, reg); > - USETW(req.wLength, len); >=20 > - error =3D rum_do_request(sc, &req, buf); > - if (error !=3D 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 =3D 0; offset < len; offset +=3D 64) { > + USETW(req.wIndex, reg + offset); > + USETW(req.wLength, MIN(len - offset, 64)); > + > + error =3D rum_do_request(sc, &req, buf + offset); > + if (error !=3D 0) { > + device_printf(sc->sc_dev, > + "could not multi write MAC register: %s\n", > + usbd_errstr(error)); > + return (error); > + } > } > - return (error); > } >=20 > static void --=20 Bjoern A. Zeeb You have to have visions! Stop bit received. Insert coin for new address family.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?2F05371F-0989-4424-9CCD-A92FB89F9191>