Skip site navigation (1)Skip section navigation (2)
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>