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"

Reply via email to