FreeBSD Bugzilla – Attachment 83473 Details for
Bug 119227
[ubsa] [patch] ubsa buffer is too small; should be tunable
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
file.diff
file.diff (text/plain), 8.77 KB, created by
fulda
on 2008-01-01 13:30:00 UTC
(
hide
)
Description:
file.diff
Filename:
MIME Type:
Creator:
fulda
Created:
2008-01-01 13:30:00 UTC
Size:
8.77 KB
patch
obsolete
>--- ubsa.c.orig Tue Oct 16 11:04:46 2007 >+++ ubsa.c Tue Oct 16 11:05:11 2007 >@@ -25,7 +25,7 @@ > */ > > #include <sys/cdefs.h> >-__FBSDID("$FreeBSD: src/sys/dev/usb/ubsa.c,v 1.17 2005/01/06 01:43:28 imp Exp $"); >+__FBSDID("$FreeBSD: src/sys/dev/usb/ubsa.c,v 1.25 2007/06/09 06:39:43 imp Exp $"); > /*- > * Copyright (c) 2001 The NetBSD Foundation, Inc. > * All rights reserved. >@@ -93,11 +93,9 @@ > > #include <dev/usb/ucomvar.h> > >-#ifdef USB_DEBUG >-Static int ubsadebug = 0; > SYSCTL_NODE(_hw_usb, OID_AUTO, ubsa, CTLFLAG_RW, 0, "USB ubsa"); >-SYSCTL_INT(_hw_usb_ubsa, OID_AUTO, debug, CTLFLAG_RW, >- &ubsadebug, 0, "ubsa debug level"); >+ >+#ifdef USB_DEBUG > > #define DPRINTFN(n, x) do { \ > if (ubsadebug > (n)) \ >@@ -106,6 +104,19 @@ > #else > #define DPRINTFN(n, x) > #endif >+Static int ubsadebug = 0; >+SYSCTL_INT(_hw_usb_ubsa, OID_AUTO, debug, CTLFLAG_RW, >+ &ubsadebug, 0, "ubsa debug level"); >+int ubsaibufsize = 4096; >+int ubsaobufsize = 256; >+TUNABLE_INT("hw.usb.ubsa.ibufsize", &ubsaibufsize); >+TUNABLE_INT("hw.usb.ubsa.obufsize", &ubsaobufsize); >+SYSCTL_INT(_hw_usb_ubsa, OID_AUTO, ibufsize, CTLFLAG_RD, >+ &ubsaibufsize, 0, "ubsa input packet length"); >+SYSCTL_INT(_hw_usb_ubsa, OID_AUTO, obufsize, CTLFLAG_RD, >+ &ubsaobufsize, 0, "ubsa output packet length"); >+#define UBSAIBUFSIZE (ubsaibufsize) >+#define UBSAOBUFSIZE (ubsaobufsize) > #define DPRINTF(x) DPRINTFN(0, x) > > #define UBSA_MODVER 1 /* module version */ >@@ -214,6 +225,8 @@ > uint16_t vendor; > uint16_t product; > } ubsa_products [] = { >+/* AnyData ADU-E100A/H */ >+{ USB_VENDOR_ANYDATA, USB_PRODUCT_ANYDATA_ADU_E100X }, > /* BELKIN F5U103 */ > { USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U103 }, > /* BELKIN F5U120 */ >@@ -224,8 +237,16 @@ > { USB_VENDOR_GOHUBS, USB_PRODUCT_GOHUBS_GOCOM232 }, > /* Peracom */ > { USB_VENDOR_PERACOM, USB_PRODUCT_PERACOM_SERIAL1 }, >- /* Vodafone */ >- { USB_VENDOR_VODAFONE, USB_PRODUCT_VODAFONE_MC3G }, >+/* Novatel Wireless Merlin cards */ >+{ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_U740 }, >+/* Option Vodafone MC3G */ >+{ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_VODAFONEMC3G }, >+/* Option GlobeTrotter 3G */ >+{ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3G }, >+/* Option GlobeTrotter 3G QUAD */ >+{ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3GQUAD }, >+/* Huawei Mobile */ >+{ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_MOBILE }, > { 0, 0 } > }; > >@@ -277,17 +298,13 @@ > usb_config_descriptor_t *cdesc; > usb_interface_descriptor_t *id; > usb_endpoint_descriptor_t *ed; >- char *devinfo; > const char *devname; > usbd_status err; > int i; > > dev = uaa->device; >- devinfo = malloc(1024, M_USBDEV, M_WAITOK); > ucom = &sc->sc_ucom; > >- bzero(sc, sizeof (struct ubsa_softc)); >- > /* > * initialize rts, dtr variables to something > * different from boolean 0, 1 >@@ -295,17 +312,12 @@ > sc->sc_dtr = -1; > sc->sc_rts = -1; > >- usbd_devinfo(dev, 0, devinfo); >- /* USB_ATTACH_SETUP; */ > ucom->sc_dev = self; >- device_set_desc_copy(self, devinfo); >- /* USB_ATTACH_SETUP; */ > > ucom->sc_udev = dev; > ucom->sc_iface = uaa->iface; > >- devname = USBDEVNAME(ucom->sc_dev); >- printf("%s: %s\n", devname, devinfo); >+devname = device_get_nameunit(ucom->sc_dev); > > DPRINTF(("ubsa attach: sc = %p\n", sc)); > >@@ -328,7 +340,7 @@ > > if (cdesc == NULL) { > printf("%s: failed to get configuration descriptor\n", >- USBDEVNAME(ucom->sc_dev)); >+ device_get_nameunit(ucom->sc_dev)); > ucom->sc_dying = 1; > goto error; > } >@@ -352,7 +364,7 @@ > ed = usbd_interface2endpoint_descriptor(ucom->sc_iface, i); > if (ed == NULL) { > printf("%s: no endpoint descriptor for %d\n", >- USBDEVNAME(ucom->sc_dev), i); >+ device_get_nameunit(ucom->sc_dev), i); > ucom->sc_dying = 1; > goto error; > } >@@ -364,17 +376,23 @@ > } else if (UE_GET_DIR(ed->bEndpointAddress) == UE_DIR_IN && > UE_GET_XFERTYPE(ed->bmAttributes) == UE_BULK) { > ucom->sc_bulkin_no = ed->bEndpointAddress; >+if (uaa->product == USB_PRODUCT_ANYDATA_ADU_E100X) >+ucom->sc_ibufsize = UBSAIBUFSIZE; //UGETW(ed->wMaxPacketSize); >+else > ucom->sc_ibufsize = UGETW(ed->wMaxPacketSize); > } else if (UE_GET_DIR(ed->bEndpointAddress) == UE_DIR_OUT && > UE_GET_XFERTYPE(ed->bmAttributes) == UE_BULK) { > ucom->sc_bulkout_no = ed->bEndpointAddress; >+if (uaa->product == USB_PRODUCT_ANYDATA_ADU_E100X) >+ucom->sc_obufsize = UBSAOBUFSIZE; //UGETW(ed->wMaxPacketSize); >+else > ucom->sc_obufsize = UGETW(ed->wMaxPacketSize); > } > } > > if (sc->sc_intr_number == -1) { > printf("%s: Could not find interrupt in\n", >- USBDEVNAME(ucom->sc_dev)); >+ device_get_nameunit(ucom->sc_dev)); > ucom->sc_dying = 1; > goto error; > } >@@ -384,14 +402,14 @@ > > if (ucom->sc_bulkin_no == -1) { > printf("%s: Could not find data bulk in\n", >- USBDEVNAME(ucom->sc_dev)); >+ device_get_nameunit(ucom->sc_dev)); > ucom->sc_dying = 1; > goto error; > } > > if (ucom->sc_bulkout_no == -1) { > printf("%s: Could not find data bulk out\n", >- USBDEVNAME(ucom->sc_dev)); >+ device_get_nameunit(ucom->sc_dev)); > ucom->sc_dying = 1; > goto error; > } >@@ -408,12 +426,9 @@ > > TASK_INIT(&sc->sc_task, 0, ubsa_notify, sc); > ucom_attach(ucom); >- >- free(devinfo, M_USBDEV); > USB_ATTACH_SUCCESS_RETURN; > > error: >- free(devinfo, M_USBDEV); > USB_ATTACH_ERROR_RETURN; > } > >@@ -456,7 +471,7 @@ > err = usbd_do_request(sc->sc_ucom.sc_udev, &req, 0); > if (err) > printf("%s: ubsa_request: %s\n", >- USBDEVNAME(sc->sc_ucom.sc_dev), usbd_errstr(err)); >+ device_get_nameunit(sc->sc_ucom.sc_dev), usbd_errstr(err)); > return (err); > } > >@@ -542,7 +557,7 @@ > default: > printf("%s: ubsa_param: unsupported baudrate, " > "forcing default of 9600\n", >- USBDEVNAME(sc->sc_ucom.sc_dev)); >+ device_get_nameunit(sc->sc_ucom.sc_dev)); > value = B230400 / B9600; > break; > }; >@@ -585,7 +600,7 @@ > default: > printf("%s: ubsa_param: unsupported databits requested, " > "forcing default of 8\n", >- USBDEVNAME(sc->sc_ucom.sc_dev)); >+ device_get_nameunit(sc->sc_ucom.sc_dev)); > value = 3; > } > >@@ -663,7 +678,7 @@ > UBSA_INTR_INTERVAL); > if (err) { > printf("%s: cannot open interrupt pipe (addr %d)\n", >- USBDEVNAME(sc->sc_ucom.sc_dev), >+ device_get_nameunit(sc->sc_ucom.sc_dev), > sc->sc_intr_number); > return (EIO); > } >@@ -688,12 +703,12 @@ > err = usbd_abort_pipe(sc->sc_intr_pipe); > if (err) > printf("%s: abort interrupt pipe failed: %s\n", >- USBDEVNAME(sc->sc_ucom.sc_dev), >+ device_get_nameunit(sc->sc_ucom.sc_dev), > usbd_errstr(err)); > err = usbd_close_pipe(sc->sc_intr_pipe); > if (err) > printf("%s: close interrupt pipe failed: %s\n", >- USBDEVNAME(sc->sc_ucom.sc_dev), >+ device_get_nameunit(sc->sc_ucom.sc_dev), > usbd_errstr(err)); > free(sc->sc_intr_buf, M_USBDEV); > sc->sc_intr_pipe = NULL; >@@ -716,7 +731,7 @@ > return; > > DPRINTF(("%s: ubsa_intr: abnormal status: %s\n", >- USBDEVNAME(sc->sc_ucom.sc_dev), >+ device_get_nameunit(sc->sc_ucom.sc_dev), > usbd_errstr(status))); > usbd_clear_endpoint_stall_async(sc->sc_intr_pipe); > return; >@@ -727,7 +742,7 @@ > sc->sc_msr = buf[3]; > > DPRINTF(("%s: ubsa lsr = 0x%02x, msr = 0x%02x\n", >- USBDEVNAME(sc->sc_ucom.sc_dev), sc->sc_lsr, sc->sc_msr)); >+ device_get_nameunit(sc->sc_ucom.sc_dev), sc->sc_lsr, sc->sc_msr)); > > taskqueue_enqueue(taskqueue_swi_giant, &sc->sc_task); > } >--- usb_quirks.c.orig Tue Oct 16 11:04:46 2007 >+++ usb_quirks.c Tue Oct 16 11:08:30 2007 >@@ -103,6 +103,8 @@ > ANY, { UQ_ASSUME_CM_OVER_DATA }}, > { USB_VENDOR_SUNTAC, USB_PRODUCT_SUNTAC_AS64LX, > 0x100, { UQ_ASSUME_CM_OVER_DATA }}, >+ { USB_VENDOR_SIEMENSMOBILE, USB_PRODUCT_SIEMENSMOBILE_ES75, >+ ANY, { UQ_ASSUME_CM_OVER_DATA }}, > { USB_VENDOR_MOTOROLA2, USB_PRODUCT_MOTOROLA2_A41XV32X, > ANY, { UQ_ASSUME_CM_OVER_DATA }}, > /* Devices which should be ignored by uhid */ >--- usbdevs.orig Tue Oct 16 11:04:46 2007 >+++ usbdevs Tue Oct 16 11:10:24 2007 >@@ -546,6 +546,11 @@ > vendor SITECOM 0x6189 Sitecom > vendor INTEL 0x8086 Intel > vendor HP2 0xf003 Hewlett Packard >+vendor SIEMENSMOBILE 0x0681 SiemensMobile >+vendor ANYDATA 0x16d5 AnyDATA Corporation >+vendor NOVATEL 0x1410 Novatel Wireless >+vendor OPTION 0x0af0 Option >+vendor HUAWEI 0x12d1 Huawei Technologies > > /* > * List of known products. Grouped by vendor. >@@ -1506,6 +1511,16 @@ > > /* Siemens products */ > product SIEMENS SPEEDSTREAM 0x1001 SpeedStream USB >+product SIEMENSMOBILE ES75 0x0034 GSM module MC35 >+ >+/* Option products */ >+product NOVATEL U740 0x1400 Merlin U740 >+product OPTION VODAFONEMC3G 0x5000 Vodafone Mobile Connect 3G datacard >+product OPTION GT3G 0x6000 GlobeTrotter 3G datacard >+product OPTION GT3GQUAD 0x6300 GlobeTrotter 3G QUAD datacard >+product ANYDATA ADU_E100X 0x6501 CDMA 2000 1xRTT/EV-DO USB Modem >+/* HUAWEI products */ >+product HUAWEI MOBILE 0x1001 Huawei Mobile > > /* Sierra Wireless products */ > product SIERRA MC5720 0x0218 MC5720 Wireless Modem
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 119227
: 83473