Module Name: src
Committed By: zafer
Date: Sat Mar 29 00:59:05 UTC 2014
Modified Files:
src/sys/dev/usb: if_rum.c
Log Message:
Fix an issue with 11g beacon frames.
>From FreeBSD Rev. 226465
Makes 11g wep, wpa2 and hostap work again.
To generate a diff of this commit:
cvs rdiff -u -r1.47 -r1.48 src/sys/dev/usb/if_rum.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/usb/if_rum.c
diff -u src/sys/dev/usb/if_rum.c:1.47 src/sys/dev/usb/if_rum.c:1.48
--- src/sys/dev/usb/if_rum.c:1.47 Tue Jan 22 12:40:42 2013
+++ src/sys/dev/usb/if_rum.c Sat Mar 29 00:59:05 2014
@@ -1,5 +1,5 @@
/* $OpenBSD: if_rum.c,v 1.40 2006/09/18 16:20:20 damien Exp $ */
-/* $NetBSD: if_rum.c,v 1.47 2013/01/22 12:40:42 jmcneill Exp $ */
+/* $NetBSD: if_rum.c,v 1.48 2014/03/29 00:59:05 zafer Exp $ */
/*-
* Copyright (c) 2005-2007 Damien Bergamini <[email protected]>
@@ -24,7 +24,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_rum.c,v 1.47 2013/01/22 12:40:42 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_rum.c,v 1.48 2014/03/29 00:59:05 zafer Exp $");
#include <sys/param.h>
#include <sys/sockio.h>
@@ -1476,17 +1476,22 @@ rum_write_multi(struct rum_softc *sc, ui
{
usb_device_request_t req;
usbd_status 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 = usbd_do_request(sc->sc_udev, &req, buf);
- if (error != 0) {
- printf("%s: could not multi write MAC register: %s\n",
- device_xname(sc->sc_dev), 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 = usbd_do_request(sc->sc_udev, &req, (char *)buf + offset);
+ if (error != 0) {
+ printf("%s: could not multi write MAC register: %s\n",
+ device_xname(sc->sc_dev), usbd_errstr(error));
+ }
}
}