Date: Mon, 12 Jun 2006 08:33:57 GMT From: Hans Petter Selasky <hselasky@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 99041 for review Message-ID: <200606120833.k5C8Xv1o032654@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=99041 Change 99041 by hselasky@hselasky_mini_itx on 2006/06/12 08:33:23 Use wMaxPacketSize for interrupt endpoints. Affected files ... .. //depot/projects/usb/src/sys/dev/usb/uhid.c#6 edit .. //depot/projects/usb/src/sys/dev/usb/ukbd.c#5 edit .. //depot/projects/usb/src/sys/dev/usb/umodem.c#6 edit .. //depot/projects/usb/src/sys/dev/usb/ums.c#6 edit .. //depot/projects/usb/src/sys/dev/usb/uplcom.c#5 edit .. //depot/projects/usb/src/sys/dev/usb/uvscom.c#6 edit Differences ... ==== //depot/projects/usb/src/sys/dev/usb/uhid.c#6 (text+ko) ==== @@ -137,13 +137,13 @@ tr_transferred: DPRINTF(0, "transferred!\n"); - if (xfer->actlen == sc->sc_isize) { + if (xfer->actlen >= sc->sc_isize) { usb_cdev_put_data(&(sc->sc_cdev), - xfer->buffer, xfer->actlen, 1); + xfer->buffer, sc->sc_isize, 1); } else { /* ignore it */ - DPRINTF(0, "ignored short transfer, %d bytes\n", - xfer->actlen); + DPRINTF(0, "ignored short transfer, " + "%d bytes\n", xfer->actlen); } tr_setup: @@ -153,7 +153,6 @@ USBD_IF_POLL(&(sc->sc_cdev.sc_rdq_free), m); if (m) { - xfer->length = sc->sc_isize; usbd_start_hardware(xfer); } } @@ -310,7 +309,7 @@ .endpoint = -1, /* any */ .direction = UE_DIR_IN, .flags = USBD_SHORT_XFER_OK, - .bufsize = UHID_BSIZE, /* bytes */ + .bufsize = 0, /* use wMaxPacketSize */ .callback = &uhid_intr_callback, }, ==== //depot/projects/usb/src/sys/dev/usb/ukbd.c#5 (text+ko) ==== @@ -570,7 +570,7 @@ .endpoint = -1, /* any */ .direction = UE_DIR_IN, .flags = USBD_SHORT_XFER_OK, - .bufsize = sizeof(struct ukbd_data), /* bytes */ + .bufsize = 0, /* use wMaxPacketSize */ .callback = &ukbd_intr_callback, }, ==== //depot/projects/usb/src/sys/dev/usb/umodem.c#6 (text+ko) ==== @@ -317,7 +317,7 @@ .endpoint = -1, /* any */ .direction = UE_DIR_IN, .flags = USBD_SHORT_XFER_OK, - .bufsize = sizeof(usb_cdc_notification_t), + .bufsize = 0, /* use wMaxPacketSize */ .callback = &umodem_intr_callback, }, @@ -759,6 +759,7 @@ { usb_cdc_notification_t *nbuf = xfer->buffer; struct umodem_softc *sc = xfer->priv_sc; + u_int16_t wLength; USBD_CHECK_STATUS(xfer); @@ -786,9 +787,12 @@ * Set the serial state in ucom driver based on * the bits from the notify message */ - if (UGETW(nbuf->wLength) < 2) { - DPRINTF(0, "Invalid notification length, %d bytes!\n", - UGETW(nbuf->wLength)); + wLength = UGETW(nbuf->wLength); + + if ((wLength < 2) || + ((wLength + 8) < xfer->actlen)) { + DPRINTF(0, "Invalid notification length, " + "%d bytes!\n", wLength); break; } DPRINTF(0, "notify bytes = %02x%02x\n", ==== //depot/projects/usb/src/sys/dev/usb/ums.c#6 (text+ko) ==== @@ -77,7 +77,6 @@ #define MOUSE_FLAGS_MASK (HIO_CONST|HIO_RELATIVE) #define MOUSE_FLAGS (HIO_RELATIVE) -#define UMS_INT_SIZE 64 /* bytes */ #define UMS_BUF_SIZE 8 /* bytes */ #define UMS_IFQ_MAXLEN 50 /* units */ #define UMS_N_TRANSFER 2 /* units */ @@ -310,7 +309,7 @@ .endpoint = -1, /* any */ .direction = UE_DIR_IN, .flags = USBD_SHORT_XFER_OK, - .bufsize = UMS_INT_SIZE, /* bytes */ + .bufsize = 0, /* use wMaxPacketSize */ .callback = &ums_intr_callback, }, @@ -501,14 +500,12 @@ isize = hid_report_size(d_ptr, d_len, hid_input, &sc->sc_iid); - if (isize > UMS_INT_SIZE) { - DPRINTF(0, "cannot handle a report " - "size of %d bytes\n", isize); - goto detach; + if (isize > sc->sc_xfer[0]->length) { + DPRINTF(0, "WARNING: report size, %d bytes, is larger " + "than interrupt size, %d bytes!\n", + isize, sc->sc_xfer[0]->length); } - sc->sc_xfer[0]->length = isize; - free(d_ptr, M_TEMP); #ifdef USB_DEBUG ==== //depot/projects/usb/src/sys/dev/usb/uplcom.c#5 (text+ko) ==== @@ -121,7 +121,6 @@ #define UPLCOM_CONFIG_INDEX 0 #define UPLCOM_IFACE_INDEX 0 #define UPLCOM_SECOND_IFACE_INDEX 1 -#define UPLCOM_INTR_SIZE 64 /* bytes */ #ifndef UPLCOM_INTR_INTERVAL #define UPLCOM_INTR_INTERVAL 0 /* default */ @@ -333,7 +332,7 @@ .endpoint = -1, /* any */ .direction = UE_DIR_IN, .flags = USBD_SHORT_XFER_OK, - .bufsize = UPLCOM_INTR_SIZE, + .bufsize = 0, /* use wMaxPacketSize */ .callback = &uplcom_intr_callback, }, @@ -460,7 +459,6 @@ struct uplcom_softc *sc = device_get_softc(dev); struct usbd_interface *iface; usb_interface_descriptor_t *id; - u_int16_t isize; int error; DPRINTF(10, "\n"); @@ -559,17 +557,6 @@ sc->sc_flag |= UPLCOM_FLAG_WAIT_USB_2; - isize = UGETW(sc->sc_xfer_intr[0]->pipe->edesc->wMaxPacketSize); - - if (isize > UPLCOM_INTR_SIZE) { - DPRINTF(0, "cannot handle an interrupt " - "packet of %d bytes\n", isize); - goto detach; - } - - /* set transfer length */ - sc->sc_xfer_intr[0]->length = isize; - sc->sc_dtr = -1; sc->sc_rts = -1; sc->sc_break = -1; ==== //depot/projects/usb/src/sys/dev/usb/uvscom.c#6 (text+ko) ==== @@ -140,7 +140,6 @@ */ #define UVSCOM_IBUFSIZE 512 /* bytes */ #define UVSCOM_OBUFSIZE 64 /* bytes */ -#define UVSCOM_INTR_SIZE 64 /* bytes */ #ifndef UVSCOM_DEFAULT_OPKTSIZE #define UVSCOM_DEFAULT_OPKTSIZE 8 @@ -298,7 +297,7 @@ .endpoint = -1, /* any */ .direction = UE_DIR_IN, .flags = USBD_SHORT_XFER_OK, - .bufsize = UVSCOM_INTR_SIZE, + .bufsize = 0, /* use wMaxPacketSize */ .callback = &uvscom_intr_callback, }, @@ -414,7 +413,6 @@ struct uvscom_softc *sc = device_get_softc(dev); usb_interface_descriptor_t *id; struct usbd_interface *iface; - u_int16_t isize; int error; if (sc == NULL) { @@ -465,18 +463,6 @@ sc->sc_flag |= UVSCOM_FLAG_WAIT_USB; - - isize = UGETW(sc->sc_xfer[4]->pipe->edesc->wMaxPacketSize); - - if (isize > UVSCOM_INTR_SIZE) { - DPRINTF(0, "cannot handle an interrupt " - "packet of %d bytes\n", isize); - goto detach; - } - - /* set interrupt transfer length */ - sc->sc_xfer[4]->length = isize; - sc->sc_dtr = -1; sc->sc_rts = -1; sc->sc_line_ctrl = UVSCOM_LINE_INIT;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200606120833.k5C8Xv1o032654>