It is same as USB driver flow. Do u know the flow?
-----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of [EMAIL PROTECTED] Sent: Tuesday, May 23, 2006 5:11 PM To: linux-usb-devel@lists.sourceforge.net Subject: linux-usb-devel digest, Vol 1 #5630 - 11 msgs Send linux-usb-devel mailing list submissions to linux-usb-devel@lists.sourceforge.net To subscribe or unsubscribe via the World Wide Web, visit https://lists.sourceforge.net/lists/listinfo/linux-usb-devel or, via email, send a message with subject or body 'help' to [EMAIL PROTECTED] You can reach the person managing the list at [EMAIL PROTECTED] When replying, please edit your Subject line so it is more specific than "Re: Contents of linux-usb-devel digest..." Today's Topics: 1. usb: io_edgeport, cleanup to unicode handling (Pete Zaitcev) 2. usb: encapsulate schedule_work, remove double-calling (Pete Zaitcev) 3. usb: Improve Kconfig comment for mct_u232 (Pete Zaitcev) 4. usb: Syntax cleanup for pl2303 (trailing backslash) (Pete Zaitcev) 5. usb serial (Pete Zaitcev) 6. Re: Question about CDC Ethernet/EEM descriptors (Ethan Du) 7. [PATCH] usb-storage: get rid of the timer during URB submission (Franck Bui-Huu) 8. Re: [PATCH] usb-storage: get rid of the timer during URB submission (Franck Bui-Huu) 9. [TEST PATCH] asix.c - Add AX88178 support and fix endian-ness issues (David Hollis) --__--__-- Message: 1 Date: Mon, 22 May 2006 21:49:44 -0700 From: Pete Zaitcev <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Cc: <[EMAIL PROTECTED]>, [EMAIL PROTECTED], [EMAIL PROTECTED], linux-usb-devel@lists.sourceforge.net Organization: Red Hat, Inc. Subject: [linux-usb-devel] usb: io_edgeport, cleanup to unicode handling Clean up the unicode handling in io_edgeport. Make get_string size-limited. Signed-off-by: Pete Zaitcev <[EMAIL PROTECTED]> --- Al & Peter, I'd like you to take a look and let me know if you have any objections. Thanks. -- Pete diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/io_edgeport.c linux-2.6.17-rc2-lem/drivers/usb/serial/io_edgeport.c --- linux-2.6.17-rc2/drivers/usb/serial/io_edgeport.c 2006-04-23 21:06:18.000000000 -0700 +++ linux-2.6.17-rc2-lem/drivers/usb/serial/io_edgeport.c 2006-04-23 21:11:19.000000000 -0700 @@ -142,7 +142,7 @@ struct edgeport_port { /* This structure holds all of the individual device information */ struct edgeport_serial { - char name[MAX_NAME_LEN+1]; /* string name of this device */ + char name[MAX_NAME_LEN+2]; /* string name of this device */ struct edge_manuf_descriptor manuf_descriptor; /* the manufacturer descriptor */ struct edge_boot_descriptor boot_descriptor; /* the boot firmware descriptor */ @@ -270,7 +270,7 @@ static void get_manufacturing_desc (stru static void get_boot_desc (struct edgeport_serial *edge_serial); static void load_application_firmware (struct edgeport_serial *edge_serial); -static void unicode_to_ascii (char *string, __le16 *unicode, int unicode_size); +static void unicode_to_ascii(char *string, int buflen, __le16 *unicode, int unicode_size); // ************************************************************************ @@ -373,7 +373,7 @@ static void update_edgeport_E2PROM (stru * Get string descriptor from device * * * ************************************************************************ / -static int get_string (struct usb_device *dev, int Id, char *string) +static int get_string (struct usb_device *dev, int Id, char *string, int buflen) { struct usb_string_descriptor StringDesc; struct usb_string_descriptor *pStringDesc; @@ -395,7 +395,7 @@ static int get_string (struct usb_device return 0; } - unicode_to_ascii(string, pStringDesc->wData, pStringDesc->bLength/2-1); + unicode_to_ascii(string, buflen, pStringDesc->wData, pStringDesc->bLength/2); kfree(pStringDesc); return strlen(string); @@ -2564,16 +2564,20 @@ static void change_port_settings (struct * ASCII range, but it's only for debugging... * NOTE: expects the unicode in LE format ************************************************************************ ****/ -static void unicode_to_ascii (char *string, __le16 *unicode, int unicode_size) +static void unicode_to_ascii(char *string, int buflen, __le16 *unicode, int unicode_size) { int i; - if (unicode_size <= 0) + if (buflen <= 0) /* never happens, but... */ return; + --buflen; /* space for nul */ - for (i = 0; i < unicode_size; ++i) + for (i = 0; i < unicode_size; i++) { + if (i >= buflen) + break; string[i] = (char)(le16_to_cpu(unicode[i])); - string[unicode_size] = 0x00; + } + string[i] = 0x00; } @@ -2603,11 +2607,17 @@ static void get_manufacturing_desc (stru dbg(" BoardRev: %d", edge_serial->manuf_descriptor.BoardRev); dbg(" NumPorts: %d", edge_serial->manuf_descriptor.NumPorts); dbg(" DescDate: %d/%d/%d", edge_serial->manuf_descriptor.DescDate[0], edge_serial->manuf_descriptor.DescDate[1], edge_serial->manuf_descriptor.DescDate[2]+1900); - unicode_to_ascii (string, edge_serial->manuf_descriptor.SerialNumber, edge_serial->manuf_descriptor.SerNumLength/2-1); + unicode_to_ascii(string, 30, + edge_serial->manuf_descriptor.SerialNumber, + edge_serial->manuf_descriptor.SerNumLength/2); dbg(" SerialNumber: %s", string); - unicode_to_ascii (string, edge_serial->manuf_descriptor.AssemblyNumber, edge_serial->manuf_descriptor.AssemblyNumLength/2-1); + unicode_to_ascii(string, 30, + edge_serial->manuf_descriptor.AssemblyNumber, + edge_serial->manuf_descriptor.AssemblyNumLength/2); dbg(" AssemblyNumber: %s", string); - unicode_to_ascii (string, edge_serial->manuf_descriptor.OemAssyNumber, edge_serial->manuf_descriptor.OemAssyNumLength/2-1); + unicode_to_ascii(string, 30, + edge_serial->manuf_descriptor.OemAssyNumber, + edge_serial->manuf_descriptor.OemAssyNumLength/2); dbg(" OemAssyNumber: %s", string); dbg(" UartType: %d", edge_serial->manuf_descriptor.UartType); dbg(" IonPid: %d", edge_serial->manuf_descriptor.IonPid); @@ -2735,11 +2745,11 @@ static int edge_startup (struct usb_seri usb_set_serial_data(serial, edge_serial); /* get the name for the device from the device */ - if ( (i = get_string(dev, dev->descriptor.iManufacturer, &edge_serial->name[0])) != 0) { - edge_serial->name[i-1] = ' '; - } - - get_string(dev, dev->descriptor.iProduct, &edge_serial->name[i]); + i = get_string(dev, dev->descriptor.iManufacturer, + &edge_serial->name[0], MAX_NAME_LEN+1); + edge_serial->name[i++] = ' '; + get_string(dev, dev->descriptor.iProduct, + &edge_serial->name[i], MAX_NAME_LEN+2 - i); dev_info(&serial->dev->dev, "%s detected\n", edge_serial->name); --__--__-- Message: 2 Date: Mon, 22 May 2006 21:58:49 -0700 From: Pete Zaitcev <[EMAIL PROTECTED]> To: [EMAIL PROTECTED] Cc: linux-usb-devel@lists.sourceforge.net Organization: Red Hat, Inc. Subject: [linux-usb-devel] usb: encapsulate schedule_work, remove double-calling I'm going to throw schedule_work away, it's retarded. But for starters, let's have it encapsulated. Also, generic and whiteheat were both calling usb_serial_port_softint and scheduled work. Only one was necessary. Signed-off-by: Pete Zaitcev <[EMAIL PROTECTED]> --- The double-calling looks like a thinko, or an attempt to achieve lower latency (in which case, a misguided one, IMHO). diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/cyberjack.c linux-2.6.17-rc2-lem/drivers/usb/serial/cyberjack.c --- linux-2.6.17-rc2/drivers/usb/serial/cyberjack.c 2006-03-27 07:45:23.000000000 -0800 +++ linux-2.6.17-rc2-lem/drivers/usb/serial/cyberjack.c 2006-05-22 21:17:16.000000000 -0700 @@ -469,7 +469,7 @@ static void cyberjack_write_bulk_callbac exit: spin_unlock(&priv->lock); - schedule_work(&port->work); + usb_serial_port_softint(port); } static int __init cyberjack_init (void) diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/cypress_m8.c linux-2.6.17-rc2-lem/drivers/usb/serial/cypress_m8.c --- linux-2.6.17-rc2/drivers/usb/serial/cypress_m8.c 2006-04-23 21:06:18.000000000 -0700 +++ linux-2.6.17-rc2-lem/drivers/usb/serial/cypress_m8.c 2006-05-22 21:26:24.000000000 -0700 @@ -824,7 +824,7 @@ send: priv->bytes_out += count; /* do not count the line control and size bytes */ spin_unlock_irqrestore(&priv->lock, flags); - schedule_work(&port->work); + usb_serial_port_softint(port); } /* cypress_send */ diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/empeg.c linux-2.6.17-rc2-lem/drivers/usb/serial/empeg.c --- linux-2.6.17-rc2/drivers/usb/serial/empeg.c 2006-03-27 07:45:23.000000000 -0800 +++ linux-2.6.17-rc2-lem/drivers/usb/serial/empeg.c 2006-05-22 21:26:46.000000000 -0700 @@ -335,7 +335,7 @@ static void empeg_write_bulk_callback (s return; } - schedule_work(&port->work); + usb_serial_port_softint(port); } diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/ftdi_sio.c linux-2.6.17-rc2-lem/drivers/usb/serial/ftdi_sio.c --- linux-2.6.17-rc2/drivers/usb/serial/ftdi_sio.c 2006-04-23 21:06:18.000000000 -0700 +++ linux-2.6.17-rc2-lem/drivers/usb/serial/ftdi_sio.c 2006-05-22 21:27:04.000000000 -0700 @@ -1467,7 +1467,7 @@ static void ftdi_write_bulk_callback (st return; } - schedule_work(&port->work); + usb_serial_port_softint(port); } /* ftdi_write_bulk_callback */ diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/garmin_gps.c linux-2.6.17-rc2-lem/drivers/usb/serial/garmin_gps.c --- linux-2.6.17-rc2/drivers/usb/serial/garmin_gps.c 2006-04-23 21:06:18.000000000 -0700 +++ linux-2.6.17-rc2-lem/drivers/usb/serial/garmin_gps.c 2006-05-22 21:32:38.000000000 -0700 @@ -1012,7 +1012,7 @@ static void garmin_write_bulk_callback ( garmin_data_p->flags |= CLEAR_HALT_REQUIRED; } - schedule_work(&port->work); + usb_serial_port_softint(port); } diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/generic.c linux-2.6.17-rc2-lem/drivers/usb/serial/generic.c --- linux-2.6.17-rc2/drivers/usb/serial/generic.c 2006-03-27 07:45:23.000000000 -0800 +++ linux-2.6.17-rc2-lem/drivers/usb/serial/generic.c 2006-05-22 21:27:20.000000000 -0700 @@ -298,9 +298,7 @@ void usb_serial_generic_write_bulk_callb return; } - usb_serial_port_softint((void *)port); - - schedule_work(&port->work); + usb_serial_port_softint(port); } EXPORT_SYMBOL_GPL(usb_serial_generic_write_bulk_callback); diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/ipaq.c linux-2.6.17-rc2-lem/drivers/usb/serial/ipaq.c --- linux-2.6.17-rc2/drivers/usb/serial/ipaq.c 2006-03-27 07:45:23.000000000 -0800 +++ linux-2.6.17-rc2-lem/drivers/usb/serial/ipaq.c 2006-05-22 21:27:34.000000000 -0700 @@ -870,7 +870,7 @@ static void ipaq_write_bulk_callback(str spin_unlock_irqrestore(&write_list_lock, flags); } - schedule_work(&port->work); + usb_serial_port_softint(port); } static int ipaq_write_room(struct usb_serial_port *port) diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/ipw.c linux-2.6.17-rc2-lem/drivers/usb/serial/ipw.c --- linux-2.6.17-rc2/drivers/usb/serial/ipw.c 2006-03-27 07:45:23.000000000 -0800 +++ linux-2.6.17-rc2-lem/drivers/usb/serial/ipw.c 2006-05-22 21:27:46.000000000 -0700 @@ -376,7 +376,7 @@ static void ipw_write_bulk_callback(stru if (urb->status) dbg("%s - nonzero write bulk status received: %d", __FUNCTION__, urb->status); - schedule_work(&port->work); + usb_serial_port_softint(port); } static int ipw_write(struct usb_serial_port *port, const unsigned char *buf, int count) diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/ir-usb.c linux-2.6.17-rc2-lem/drivers/usb/serial/ir-usb.c --- linux-2.6.17-rc2/drivers/usb/serial/ir-usb.c 2006-04-23 21:06:18.000000000 -0700 +++ linux-2.6.17-rc2-lem/drivers/usb/serial/ir-usb.c 2006-05-22 21:28:09.000000000 -0700 @@ -408,7 +408,7 @@ static void ir_write_bulk_callback (stru urb->actual_length, urb->transfer_buffer); - schedule_work(&port->work); + usb_serial_port_softint(port); } static void ir_read_bulk_callback (struct urb *urb, struct pt_regs *regs) diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/keyspan.c linux-2.6.17-rc2-lem/drivers/usb/serial/keyspan.c --- linux-2.6.17-rc2/drivers/usb/serial/keyspan.c 2006-04-23 21:06:18.000000000 -0700 +++ linux-2.6.17-rc2-lem/drivers/usb/serial/keyspan.c 2006-05-22 21:29:09.000000000 -0700 @@ -481,7 +481,7 @@ static void usa2x_outdat_callback(struct dbg ("%s - urb %d", __FUNCTION__, urb == p_priv->out_urbs[1]); if (port->open_count) - schedule_work(&port->work); + usb_serial_port_softint(port); } static void usa26_inack_callback(struct urb *urb, struct pt_regs *regs) diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/kl5kusb105.c linux-2.6.17-rc2-lem/drivers/usb/serial/kl5kusb105.c --- linux-2.6.17-rc2/drivers/usb/serial/kl5kusb105.c 2006-03-27 07:45:23.000000000 -0800 +++ linux-2.6.17-rc2-lem/drivers/usb/serial/kl5kusb105.c 2006-05-22 21:29:57.000000000 -0700 @@ -569,8 +569,7 @@ static void klsi_105_write_bulk_callback return; } - /* from generic_write_bulk_callback */ - schedule_work(&port->work); + usb_serial_port_softint(port); } /* klsi_105_write_bulk_completion_callback */ diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/omninet.c linux-2.6.17-rc2-lem/drivers/usb/serial/omninet.c --- linux-2.6.17-rc2/drivers/usb/serial/omninet.c 2006-04-23 21:06:18.000000000 -0700 +++ linux-2.6.17-rc2-lem/drivers/usb/serial/omninet.c 2006-05-22 21:30:20.000000000 -0700 @@ -320,7 +320,7 @@ static void omninet_write_bulk_callback return; } - schedule_work(&port->work); + usb_serial_port_softint(port); } diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/option.c linux-2.6.17-rc2-lem/drivers/usb/serial/option.c --- linux-2.6.17-rc2/drivers/usb/serial/option.c 2006-04-23 21:06:18.000000000 -0700 +++ linux-2.6.17-rc2-lem/drivers/usb/serial/option.c 2006-05-22 21:30:59.000000000 -0700 @@ -365,8 +365,7 @@ static void option_outdat_callback(struc port = (struct usb_serial_port *) urb->context; - if (port->open_count) - schedule_work(&port->work); + usb_serial_port_softint(port); } static void option_instat_callback(struct urb *urb, struct pt_regs *regs) diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/pl2303.c linux-2.6.17-rc2-lem/drivers/usb/serial/pl2303.c --- linux-2.6.17-rc2/drivers/usb/serial/pl2303.c 2006-04-23 21:06:18.000000000 -0700 +++ linux-2.6.17-rc2-lem/drivers/usb/serial/pl2303.c 2006-05-22 21:31:15.000000000 -0700 @@ -313,7 +313,7 @@ static void pl2303_send(struct usb_seria // TODO: reschedule pl2303_send } - schedule_work(&port->work); + usb_serial_port_softint(port); } static int pl2303_write_room(struct usb_serial_port *port) diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/usb-serial.c linux-2.6.17-rc2-lem/drivers/usb/serial/usb-serial.c --- linux-2.6.17-rc2/drivers/usb/serial/usb-serial.c 2006-04-23 21:06:18.000000000 -0700 +++ linux-2.6.17-rc2-lem/drivers/usb/serial/usb-serial.c 2006-05-22 21:23:29.000000000 -0700 @@ -521,7 +523,17 @@ exit: return -EINVAL; } -void usb_serial_port_softint(void *private) +/* + * We would be calling tty_wakeup here, but unfortunately some line + * disciplines have an annoying habit of calling tty->write from + * the write wakeup callback (e.g. n_hdlc.c). + */ +void usb_serial_port_softint(struct usb_serial_port *port) +{ + schedule_work(&port->work); +} + +static void usb_serial_port_work(void *private) { struct usb_serial_port *port = private; struct tty_struct *tty; @@ -784,7 +796,7 @@ int usb_serial_probe(struct usb_interfac port->serial = serial; spin_lock_init(&port->lock); mutex_init(&port->mutex); - INIT_WORK(&port->work, usb_serial_port_softint, port); + INIT_WORK(&port->work, usb_serial_port_work, port); serial->port[i] = port; } diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/usb-serial.h linux-2.6.17-rc2-lem/drivers/usb/serial/usb-serial.h --- linux-2.6.17-rc2/drivers/usb/serial/usb-serial.h 2006-04-23 21:06:18.000000000 -0700 +++ linux-2.6.17-rc2-lem/drivers/usb/serial/usb-serial.h 2006-05-22 21:18:47.000000000 -0700 @@ -236,7 +236,7 @@ struct usb_serial_driver { extern int usb_serial_register(struct usb_serial_driver *driver); extern void usb_serial_deregister(struct usb_serial_driver *driver); -extern void usb_serial_port_softint(void *private); +extern void usb_serial_port_softint(struct usb_serial_port *port); extern int usb_serial_probe(struct usb_interface *iface, const struct usb_device_id *id); extern void usb_serial_disconnect(struct usb_interface *iface); diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/visor.c linux-2.6.17-rc2-lem/drivers/usb/serial/visor.c --- linux-2.6.17-rc2/drivers/usb/serial/visor.c 2006-04-23 21:06:18.000000000 -0700 +++ linux-2.6.17-rc2-lem/drivers/usb/serial/visor.c 2006-05-22 21:31:35.000000000 -0700 @@ -480,7 +480,7 @@ static void visor_write_bulk_callback (s --priv->outstanding_urbs; spin_unlock_irqrestore(&priv->lock, flags); - schedule_work(&port->work); + usb_serial_port_softint(port); } diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/whiteheat.c linux-2.6.17-rc2-lem/drivers/usb/serial/whiteheat.c --- linux-2.6.17-rc2/drivers/usb/serial/whiteheat.c 2006-03-27 07:45:23.000000000 -0800 +++ linux-2.6.17-rc2-lem/drivers/usb/serial/whiteheat.c 2006-05-22 21:31:59.000000000 -0700 @@ -1088,9 +1088,7 @@ static void whiteheat_write_callback(str return; } - usb_serial_port_softint((void *)port); - - schedule_work(&port->work); + usb_serial_port_softint(port); } --__--__-- Message: 3 Date: Mon, 22 May 2006 22:02:32 -0700 From: Pete Zaitcev <[EMAIL PROTECTED]> To: [EMAIL PROTECTED] Cc: [EMAIL PROTECTED], linux-usb-devel@lists.sourceforge.net Organization: Red Hat, Inc. Subject: [linux-usb-devel] usb: Improve Kconfig comment for mct_u232 Add a couple of supported devices into the help message. It's a long story... I promised this comment changed to a user long ago, so I'd like to have that promise kept. In reality though, nobody is likely to read this anyway. Signed-off-by: Pete Zaitcev <[EMAIL PROTECTED]> --- linux-2.6.17-rc2/drivers/usb/serial/Kconfig 2006-04-23 21:06:18.000000000 -0700 +++ linux-2.6.17-rc2-lem/drivers/usb/serial/Kconfig 2006-04-23 21:11:19.000000000 -0700 @@ -407,7 +407,7 @@ config USB_SERIAL_MCT_U232 Magic Control Technology Corp. (U232 is one of the model numbers). This driver also works with Sitecom U232-P25 and D-Link DU-H3SP USB - BAY devices. + BAY, Belkin F5U109, and Belkin F5U409 devices. To compile this driver as a module, choose M here: the module will be called mct_u232. --__--__-- Message: 4 Date: Mon, 22 May 2006 22:05:17 -0700 From: Pete Zaitcev <[EMAIL PROTECTED]> To: [EMAIL PROTECTED] Cc: [EMAIL PROTECTED], linux-usb-devel@lists.sourceforge.net Organization: Red Hat, Inc. Subject: [linux-usb-devel] usb: Syntax cleanup for pl2303 (trailing backslash) Remove the silly trailing backslash. Signed-off-by: Pete Zaitcev <[EMAIL PROTECTED]> --- linux-2.6.17-rc2/drivers/usb/serial/pl2303.c 2006-04-23 21:06:18.000000000 -0700 +++ linux-2.6.17-rc2-lem/drivers/usb/serial/pl2303.c 2006-05-22 21:31:15.000000000 -0700 @@ -599,7 +599,7 @@ static void pl2303_close (struct usb_ser unsigned int c_cflag; int bps; long timeout; - wait_queue_t wait; \ + wait_queue_t wait; dbg("%s - port %d", __FUNCTION__, port->number); --__--__-- Message: 5 Date: Mon, 22 May 2006 22:23:39 -0700 From: Pete Zaitcev <[EMAIL PROTECTED]> To: [EMAIL PROTECTED] Cc: linux-usb-devel@lists.sourceforge.net, [EMAIL PROTECTED] Organization: Red Hat, Inc. Subject: [linux-usb-devel] usb serial Hi, Greg: I looked at RMK's UART infrastructure and it seemed a little too fine-grained to me. It does not seem like a good match for things like edgeport and keyspan. So, my enthusiasm about "us" has diminished. Also, remember what kind of pain in the butt was the coexistence of usb-storage and ub, both for me and Matt Dharm. The present situation is different, because "us" would take over usb-serial completely in time, but ub will never take over usb-storage. But even temporarily it's still a pain. I think that the right path going forward is to attempt to salvage usb-serial. Short term, I have a couple more patchlets, awaiting testing: - pl2303 oops on rmmod is a use-after-free caused by the keventd taking its sweet time to process work. A flush_scheduled_work seems to be missing in our disconnect path. - mct_u232 needs a little msleep(), because there's no telling when the device actually finished transmitting. But kill_urb aborts the transmission, so characters are lost. I'm going in for a surgery tomorrow, but I expect them to wake me the same day, so the usb-serial's doom is pretty much sealed regardless. Cheers, -- Pete --__--__-- Message: 6 From: "Ethan Du" <[EMAIL PROTECTED]> To: [EMAIL PROTECTED], linux-usb-devel@lists.sourceforge.net Subject: Re: [linux-usb-devel] Question about CDC Ethernet/EEM descriptors Date: Tue, 23 May 2006 17:33:17 +0800 Dave: Thanks a lot. I still have question here : ) > > > 2. EEM doesn't have specific descriptor, so how could host control those > > broadcast and power filters? > >What filters are you talking about? The EEM spec doesn't provide any >details about such things, so it looks to me like there aren't any ... > For example, in the absence of software bridging, we may not want to transfer multicast packets on the bus. While with software bridging working, we may want all packets transferred. CDC Ethernet use a request "SET_ETHERNET_PACKET_FILTER" to do this. How about EEM? BR. - Ethan _________________________________________________________________ Don't just search. Find. Check out the new MSN Search! http://search.msn.click-url.com/go/onm00200636ave/direct/01/ --__--__-- Message: 7 Date: Tue, 23 May 2006 11:40:54 +0200 Reply-To: Franck Bui-Huu <[EMAIL PROTECTED]> To: Alan Stern <[EMAIL PROTECTED]> CC: Franck Bui-Huu <[EMAIL PROTECTED]>, [EMAIL PROTECTED], David Brownell <[EMAIL PROTECTED]>, USB development list <linux-usb-devel@lists.sourceforge.net> From: Franck Bui-Huu <[EMAIL PROTECTED]> Subject: [linux-usb-devel] [PATCH] usb-storage: get rid of the timer during URB submission and use completion timeout instead of. It also put the task in interruptible state instead of uninterruptible one while waiting for the completion. Signed-off-by: Franck Bui-Huu <[EMAIL PROTECTED]> --- drivers/usb/storage/transport.c | 35 +++++++---------------------------- 1 files changed, 7 insertions(+), 28 deletions(-) 0e7a2a54a4f4e98905c3791c04ab4bc256b20031 drivers/usb/storage/transport.c | 35 +++++++---------------------------- 1 files changed, 7 insertions(+), 28 deletions(-) diff --git a/drivers/usb/storage/transport.c b/drivers/usb/storage/transport.c index 7ca896a..b18db22 100644 --- a/drivers/usb/storage/transport.c +++ b/drivers/usb/storage/transport.c @@ -115,19 +115,6 @@ static void usb_stor_blocking_completion complete(urb_done_ptr); } - -/* This is the timeout handler which will cancel an URB when its timeout - * expires. - */ -static void timeout_handler(unsigned long us_) -{ - struct us_data *us = (struct us_data *) us_; - - if (test_and_clear_bit(US_FLIDX_URB_ACTIVE, &us->flags)) { - US_DEBUGP("Timeout -- cancelling URB\n"); - usb_unlink_urb(us->current_urb); - } -} /* This is the common part of the URB message submission code * @@ -138,7 +125,6 @@ static void timeout_handler(unsigned lon static int usb_stor_msg_common(struct us_data *us, int timeout) { struct completion urb_done; - struct timer_list to_timer; int status; /* don't submit URBs during abort/disconnect processing */ @@ -185,22 +171,15 @@ static int usb_stor_msg_common(struct us } } - /* submit the timeout timer, if a timeout was requested */ - if (timeout > 0) { - init_timer(&to_timer); - to_timer.expires = jiffies + timeout; - to_timer.function = timeout_handler; - to_timer.data = (unsigned long) us; - add_timer(&to_timer); - } - /* wait for the completion of the URB */ - wait_for_completion(&urb_done); - clear_bit(US_FLIDX_URB_ACTIVE, &us->flags); + timeout = wait_for_completion_interruptible_timeout( + &urb_done, timeout ? : MAX_SCHEDULE_TIMEOUT); - /* clean up the timeout timer */ - if (timeout > 0) - del_timer_sync(&to_timer); + if (test_and_clear_bit(US_FLIDX_URB_ACTIVE, &us->flags) && timeout <= 0) { + US_DEBUGP("%s -- cancelling URB\n", + timeout == 0 ? "Timeout" : "Signal"); + usb_unlink_urb(us->current_urb); + } /* return the URB status */ return us->current_urb->status; -- 1.3.3.g8701 --__--__-- Message: 8 Date: Tue, 23 May 2006 12:10:36 +0200 Reply-To: Franck Bui-Huu <[EMAIL PROTECTED]> To: Franck Bui-Huu <[EMAIL PROTECTED]> CC: Alan Stern <[EMAIL PROTECTED]>, [EMAIL PROTECTED], David Brownell <[EMAIL PROTECTED]>, USB development list <linux-usb-devel@lists.sourceforge.net>, [EMAIL PROTECTED] Subject: Re: [linux-usb-devel] [PATCH] usb-storage: get rid of the timer during URB submission From: Franck Bui-Huu <[EMAIL PROTECTED]> Franck Bui-Huu wrote: > /* wait for the completion of the URB */ > - wait_for_completion(&urb_done); > - clear_bit(US_FLIDX_URB_ACTIVE, &us->flags); > + timeout = wait_for_completion_interruptible_timeout( > + &urb_done, timeout ? : MAX_SCHEDULE_TIMEOUT); > > - /* clean up the timeout timer */ > - if (timeout > 0) > - del_timer_sync(&to_timer); > + if (test_and_clear_bit(US_FLIDX_URB_ACTIVE, &us->flags) && timeout <= 0) { Thinking more about it, I'm wondering it the second condition (timeout <= 0) is really needed. Do you think so ? > + US_DEBUGP("%s -- cancelling URB\n", > + timeout == 0 ? "Timeout" : "Signal"); > + usb_unlink_urb(us->current_urb); > + } > > /* return the URB status */ > return us->current_urb->status; --__--__-- Message: 9 From: David Hollis <[EMAIL PROTECTED]> To: Ken Yee <[EMAIL PROTECTED]>, Lon Willett <[EMAIL PROTECTED]>, Alan Hourihane <[EMAIL PROTECTED]>, Jamie Painter <[EMAIL PROTECTED]> Cc: linux-usb-devel@lists.sourceforge.net Date: Tue, 23 May 2006 07:38:11 -0400 Subject: [linux-usb-devel] [TEST PATCH] asix.c - Add AX88178 support and fix endian-ness issues --=-x6I/yARinv9UN4+dgln1 Content-Type: multipart/mixed; boundary="=-+PJR33xIdNuieYWZ4+Tk" --=-+PJR33xIdNuieYWZ4+Tk Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Attached is a patch for testing newly added AX88178 support. For this attempt, I have followed the mechanisms used in the OpenBSD if_axe.c driver instead of using the initialization code provided by ASIX themselves. It's much simpler and seems to function, though my testing has been extremely limited. I have a Buffalo test sample device that seems to be functioning OK on a 10mb link at a hotel. I have not tested it at 100 or 1000 at this time. The LED's do not operate correctly, the 100 and 1000 LED typically stay lit, sometimes they blink. I'm connected at 10MB, so that should be the only light lit. If some of the other folks could give it a try on various speed networks, that would really be helpful. I've tried to include a decent amount of debug info in the initialization and link_reset() functions to help point out issues if any do arise. Things that definitely need some testing: 100MB 1000GB Jumbo Frames - this most likely doesn't work Reconnecting at different speeds, duplexes Give it a try and let me know if it actually works or not. Please do not consider this even remotely production. --=20 David Hollis <[EMAIL PROTECTED]> --=-+PJR33xIdNuieYWZ4+Tk Content-Description: Content-Disposition: inline; filename=asix.c-ax88178_support.patch Content-Type: text/x-patch; charset=UTF-8 Content-Transfer-Encoding: base64 LS0tIGEvbGludXgvZHJpdmVycy91c2IvbmV0L2FzaXguYwkyMDA2LTA1LTEzIDEwOjI2OjU4 LjAw MDAwMDAwMCAtMDQwMA0KKysrIGIvbGludXgvZHJpdmVycy91c2IvbmV0L2FzaXguYwkyMDA2 LTA1 LTIzIDAwOjU3OjEwLjAwMDAwMDAwMCAtMDQwMA0KQEAgLTE5LDggKzE5LDggQEANCiAgKiBG b3Vu ZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAg MDIx MTEtMTMwNyAgVVNBDQogICovDQogDQotLy8gI2RlZmluZQlERUJVRwkJCS8vIGVycm9yIHBh dGgg bWVzc2FnZXMsIGV4dHJhIGluZm8NCi0vLyAjZGVmaW5lCVZFUkJPU0UJCQkvLyBtb3JlOyBz dWNj ZXNzIG1lc3NhZ2VzDQorI2RlZmluZQlERUJVRwkJCS8vIGVycm9yIHBhdGggbWVzc2FnZXMs IGV4 dHJhIGluZm8NCisjZGVmaW5lCVZFUkJPU0UJCQkvLyBtb3JlOyBzdWNjZXNzIG1lc3NhZ2Vz DQog DQogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPg0KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4N CkBAIC00Nyw2ICs0Nyw3IEBADQogI2RlZmluZSBBWF9DTURfV1JJVEVfRUVQUk9NCQkweDBj DQog I2RlZmluZSBBWF9DTURfV1JJVEVfRU5BQkxFCQkweDBkDQogI2RlZmluZSBBWF9DTURfV1JJ VEVf RElTQUJMRQkJMHgwZQ0KKyNkZWZpbmUgQVhfQ01EX1JFQURfUlhfQ1RMCQkweDBmDQogI2Rl Zmlu ZSBBWF9DTURfV1JJVEVfUlhfQ1RMCQkweDEwDQogI2RlZmluZSBBWF9DTURfUkVBRF9JUEcw MTIJ CTB4MTENCiAjZGVmaW5lIEFYX0NNRF9XUklURV9JUEcwCQkweDEyDQpAQCAtMTA1LDYgKzEw Niwx MiBAQA0KIAkgQVg4ODc3Ml9NRURJVU1fVFhfRkNfRU5BQkxFIHwgQVg4ODc3Ml9NRURJVU1f MTAw TUIgfCBcDQogCSBBWDg4NzcyX01FRElVTV9SRVNFUlZFRCB8IEFYODg3NzJfTUVESVVNX1JY X0VO QUJMRSApDQogDQorI2RlZmluZSBBWDg4MTc4X01FRElVTV8xMDBNQgkJMHgwMDAyDQorI2Rl Zmlu ZSBBWDg4MTc4X01FRElVTV9HSUdBQklUCQkweDAxMDANCisjZGVmaW5lIEFYODgxNzhfTUVE SVVN X0ZVTExfRFVQTEVYCTB4MDIwMA0KKw0KKyNkZWZpbmUgQVg4ODE3OF9NRURJVU1fREVGQVVM VAkJ MHgwMzc2DQorDQogI2RlZmluZSBBWF9FRVBST01fTUFHSUMJCQkweGRlYWRiZWVmDQogDQog Lyog VGhpcyBzdHJ1Y3R1cmUgY2Fubm90IGV4Y2VlZCBzaXplb2YodW5zaWduZWQgbG9uZyBbNV0p IEFL QSAyMCBieXRlcyAqLw0KQEAgLTEyOCwxMCArMTM1LDEwIEBAIHN0YXRpYyBpbnQgYXNpeF9y ZWFk X2NtZChzdHJ1Y3QgdXNibmV0ICoNCiAJCXVzYl9yY3ZjdHJscGlwZShkZXYtPnVkZXYsIDAp LA0K IAkJY21kLA0KIAkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9E RVZJ Q0UsDQotCQl2YWx1ZSwNCi0JCWluZGV4LA0KKwkJY3B1X3RvX2xlMTYodmFsdWUpLA0KKwkJ Y3B1 X3RvX2xlMTYoaW5kZXgpLA0KIAkJZGF0YSwNCi0JCXNpemUsDQorCQljcHVfdG9fbGUxNihz aXpl KSwNCiAJCVVTQl9DVFJMX0dFVF9USU1FT1VUKTsNCiB9DQogDQpAQCAtMTQzLDEwICsxNTAs MTAg QEAgc3RhdGljIGludCBhc2l4X3dyaXRlX2NtZChzdHJ1Y3QgdXNibmV0IA0KIAkJdXNiX3Nu ZGN0 cmxwaXBlKGRldi0+dWRldiwgMCksDQogCQljbWQsDQogCQlVU0JfRElSX09VVCB8IFVTQl9U WVBF X1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsDQotCQl2YWx1ZSwNCi0JCWluZGV4LA0KKwkJ Y3B1 X3RvX2xlMTYodmFsdWUpLA0KKwkJY3B1X3RvX2xlMTYoaW5kZXgpLA0KIAkJZGF0YSwNCi0J CXNp emUsDQorCQljcHVfdG9fbGUxNihzaXplKSwNCiAJCVVTQl9DVFJMX1NFVF9USU1FT1VUKTsN CiB9 DQogDQpAQCAtMjEyLDE0ICsyMTksNzAgQEAgc3RhdGljIGludCBhc2l4X3N3X3Jlc2V0KHN0 cnVj dCB1c2JuZXQgKg0KIAlyZXR1cm4gcmV0Ow0KIH0NCiANCitzdGF0aWMgdTE2IGFzaXhfcmVh ZF9y eF9jdGwoc3RydWN0IHVzYm5ldCAqZGV2KQ0KK3sNCisJdTE2IHJldCA9IDA7DQorCXZvaWQg KmJ1 ZjsNCisNCisJYnVmID0ga21hbGxvYygyLCBHRlBfS0VSTkVMKTsNCisJaWYgKCFidWYpDQor CQln b3RvIG91dDE7DQorDQorCWlmICgocmV0ID0gYXNpeF9yZWFkX2NtZChkZXYsIEFYX0NNRF9S RUFE X1JYX0NUTCwNCisJCQkJICAgIDAsIDAsIDIsIGJ1ZikpIDwgMikgew0KKwkJZGV2ZGJnKGRl diwg IkVycm9yIHJlYWRpbmcgUlhfQ1RMIHJlZ2lzdGVyOiAlMDJ4IiwgcmV0KTsNCisJCWdvdG8g b3V0 MjsNCisJfQ0KKwlyZXQgPSBsZTE2X3RvX2NwdSgqKCh1MTYgKilidWYpKTsNCitvdXQyOg0K Kwlr ZnJlZShidWYpOw0KK291dDE6DQorCXJldHVybiByZXQ7DQorfQ0KKw0KIHN0YXRpYyBpbnQg YXNp eF93cml0ZV9yeF9jdGwoc3RydWN0IHVzYm5ldCAqZGV2LCB1MTYgbW9kZSkNCiB7DQogCWlu dCBy ZXQ7DQogDQogCXJldCA9IGFzaXhfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX1JYX0NU TCwg bW9kZSwgMCwgMCwgTlVMTCk7DQogCWlmIChyZXQgPCAwKQ0KLSAgICAgICAgICAgICAgICBk ZXZk YmcoZGV2LCAiRmFpbGVkIHRvIHdyaXRlIFJYX0NUTCBtb2RlOiAlMDJ4IiwgcmV0KTsNCisg ICAg ICAgICAgICAgICAgZGV2ZGJnKGRldiwgIkZhaWxlZCB0byB3cml0ZSBSWF9DVEwgbW9kZSB0 byAw eCUwNHg6ICUwMngiLCANCisJCSAgICAgICBtb2RlLCByZXQpOw0KKw0KKwlyZXR1cm4gcmV0 Ow0K K30NCisNCitzdGF0aWMgdTE2IGFzaXhfcmVhZF9tZWRpdW1fc3RhdHVzKHN0cnVjdCB1c2Ju ZXQg KmRldikNCit7DQorCXUxNiByZXQgPSAwOw0KKwl2b2lkICpidWY7DQorDQorCWJ1ZiA9IGtt YWxs b2MoMiwgR0ZQX0tFUk5FTCk7DQorCWlmICghYnVmKQ0KKwkJZ290byBvdXQxOw0KIA0KKwlp ZiAo KHJldCA9IGFzaXhfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9NRURJVU1fU1RBVFVTLA0K KwkJ CQkgICAgMCwgMCwgMiwgYnVmKSkgPCAyKSB7DQorCQlkZXZkYmcoZGV2LCAiRXJyb3IgcmVh ZGlu ZyBNZWRpdW0gU3RhdHVzIHJlZ2lzdGVyOiAlMDJ4IiwgcmV0KTsNCisJCWdvdG8gb3V0MjsN CisJ fQ0KKwlyZXQgPSBsZTE2X3RvX2NwdSgqKCh1MTYgKilidWYpKTsNCitvdXQyOg0KKwlrZnJl ZShi dWYpOw0KK291dDE6DQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgYXNpeF93 cml0 ZV9ncGlvKHN0cnVjdCB1c2JuZXQgKmRldiwgdTE2IHZhbHVlLCBpbnQgc2xlZXApDQorew0K Kwlp bnQgcmV0Ow0KKw0KKwlyZXQgPSBhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9H UElP UywgdmFsdWUsIDAsIDAsIE5VTEwpOw0KKwlpZiAocmV0IDwgMCkNCisgICAgICAgICAgICAg ICAg ZGV2ZGJnKGRldiwgIkZhaWxlZCB0byB3cml0ZSBHUElPIHZhbHVlIDB4JTA0eDogJTAyeCIs IA0K KwkJICAgICAgIHZhbHVlLCByZXQpOw0KKw0KKwltc2xlZXAoc2xlZXApOw0KIAlyZXR1cm4g cmV0 Ow0KIH0NCiANCkBAIC0zMzQsMTMgKzM5Nyw3IEBAIHN0YXRpYyBpbnQgYXNpeF9tZGlvX3Jl YWQo c3RydWN0IG5ldF9kZXYNCiAJCQkJKF9fdTE2KWxvYywgMiwgKHUxNiAqKSZyZXMpOw0KIAlh c2l4 X3NldF9od19taWkoZGV2KTsNCiANCi0JcmV0dXJuIHJlcyAmIDB4ZmZmZjsNCi19DQotDQot Lyog c2FtZSBhcyBhYm92ZSwgYnV0IGNvbnZlcnRzIHJlc3VsdGluZyB2YWx1ZSB0byBjcHUgYnl0 ZSBv cmRlciAqLw0KLXN0YXRpYyBpbnQgYXNpeF9tZGlvX3JlYWRfbGUoc3RydWN0IG5ldF9kZXZp Y2Ug Km5ldGRldiwgaW50IHBoeV9pZCwgaW50IGxvYykNCi17DQotCXJldHVybiBsZTE2X3RvX2Nw dShh c2l4X21kaW9fcmVhZChuZXRkZXYscGh5X2lkLCBsb2MpKTsNCisJcmV0dXJuIGxlMTZfdG9f Y3B1 KHJlcyAmIDB4ZmZmZik7DQogfQ0KIA0KIHN0YXRpYyB2b2lkDQpAQCAtMzU1LDEzICs0MTIs NiBA QCBhc2l4X21kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRlDQogCWFzaXhfc2V0 X2h3 X21paShkZXYpOw0KIH0NCiANCi0vKiBzYW1lIGFzIGFib3ZlLCBidXQgY29udmVydHMgbmV3 IHZh bHVlIHRvIGxlMTYgYnl0ZSBvcmRlciBiZWZvcmUgd3JpdGluZyAqLw0KLXN0YXRpYyB2b2lk DQot YXNpeF9tZGlvX3dyaXRlX2xlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlf aWQs IGludCBsb2MsIGludCB2YWwpDQotew0KLQlhc2l4X21kaW9fd3JpdGUoIG5ldGRldiwgcGh5 X2lk LCBsb2MsIGNwdV90b19sZTE2KHZhbCkgKTsNCi19DQotDQogc3RhdGljIGludCBheDg4MTcy X2xp bmtfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KQ0KIHsNCiAJdTE2IGxwYTsNCkBAIC0zNzAs OCAr NDIwLDggQEAgc3RhdGljIGludCBheDg4MTcyX2xpbmtfcmVzZXQoc3RydWN0IHVzYg0KIAl1 OCBt b2RlOw0KIA0KIAltb2RlID0gQVhfTUVESVVNX1RYX0FCT1JUX0FMTE9XIHwgQVhfTUVESVVN X0ZM T1dfQ09OVFJPTF9FTjsNCi0JbHBhID0gYXNpeF9tZGlvX3JlYWRfbGUoZGV2LT5uZXQsIGRl di0+ bWlpLnBoeV9pZCwgTUlJX0xQQSk7DQotCWFkdiA9IGFzaXhfbWRpb19yZWFkX2xlKGRldi0+ bmV0 LCBkZXYtPm1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UpOw0KKwlscGEgPSBhc2l4X21kaW9f cmVh ZChkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfTFBBKTsNCisJYWR2ID0gYXNpeF9t ZGlv X3JlYWQoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSk7DQogCXJl cyA9 IG1paV9ud2F5X3Jlc3VsdChscGF8YWR2KTsNCiAJaWYgKHJlcyAmIExQQV9EVVBMRVgpDQog CQlt b2RlIHw9IEFYX01FRElVTV9GVUxMX0RVUExFWDsNCkBAIC01NDQsOCArNTk0LDggQEAgc3Rh dGlj IGludCBheDg4MTcyX2JpbmQoc3RydWN0IHVzYm5ldCAqZA0KIAlkZXYtPm5ldC0+c2V0X211 bHRp Y2FzdF9saXN0ID0gYXNpeF9zZXRfbXVsdGljYXN0Ow0KIAlkZXYtPm5ldC0+ZXRodG9vbF9v cHMg PSAmYXg4ODE3Ml9ldGh0b29sX29wczsNCiANCi0JYXNpeF9tZGlvX3dyaXRlX2xlKGRldi0+ bmV0 LCBkZXYtPm1paS5waHlfaWQsIE1JSV9CTUNSLCBCTUNSX1JFU0VUKTsNCi0JYXNpeF9tZGlv X3dy aXRlX2xlKGRldi0+bmV0LCBkZXYtPm1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UsDQorCWFz aXhf bWRpb193cml0ZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfQk1DUiwgQk1DUl9S RVNF VCk7DQorCWFzaXhfbWRpb193cml0ZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlf QURW RVJUSVNFLA0KIAkJQURWRVJUSVNFX0FMTCB8IEFEVkVSVElTRV9DU01BIHwgQURWRVJUSVNF X1BB VVNFX0NBUCk7DQogCW1paV9ud2F5X3Jlc3RhcnQoJmRldi0+bWlpKTsNCiANCkBAIC01NzMs NiAr NjIzLDcgQEAgc3RhdGljIGludCBheDg4NzcyX2JpbmQoc3RydWN0IHVzYm5ldCAqZA0KIHsN CiAJ aW50IHJldDsNCiAJdm9pZCAqYnVmOw0KKwl1MTYgcnhfY3RsOw0KIA0KIAl1c2JuZXRfZ2V0 X2Vu ZHBvaW50cyhkZXYsaW50Zik7DQogDQpAQCAtNTgzLDExICs2MzQsOSBAQCBzdGF0aWMgaW50 IGF4 ODg3NzJfYmluZChzdHJ1Y3QgdXNibmV0ICpkDQogCQlnb3RvIG91dDE7DQogCX0NCiANCi0J aWYg KChyZXQgPSBhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9HUElPUywNCi0JCQkJ ICAg ICAweDAwQjAsIDAsIDAsIGJ1ZikpIDwgMCkNCisJaWYgKChyZXQgPSBhc2l4X3dyaXRlX2dw aW8o ZGV2LCAweDAwQjAsIDUpKSA8IDApDQogCQlnb3RvIG91dDI7DQogDQotCW1zbGVlcCg1KTsN CiAJ aWYgKChyZXQgPSBhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TV19QSFlfU0VMRUNULA0K IAkJ CQkweDAwMDEsIDAsIDAsIGJ1ZikpIDwgMCkgew0KIAkJZGJnKCJTZWxlY3QgUEhZICMxIGZh aWxl ZDogJWQiLCByZXQpOw0KQEAgLTYwNiw5ICs2NTUsMTQgQEAgc3RhdGljIGludCBheDg4Nzcy X2Jp bmQoc3RydWN0IHVzYm5ldCAqZA0KIAkJZ290byBvdXQyOw0KIA0KIAltc2xlZXAoMTUwKTsN Ci0J aWYgKChyZXQgPSBhc2l4X3dyaXRlX3J4X2N0bChkZXYsIDB4MDApKSA8IDApDQorCXJ4X2N0 bCA9 IGFzaXhfcmVhZF9yeF9jdGwoZGV2KTsNCisJZGJnKCJSWF9DVEwgaXMgMHglMDR4IGFmdGVy IHNv ZnR3YXJlIHJlc2V0IiwgcnhfY3RsKTsNCisJaWYgKChyZXQgPSBhc2l4X3dyaXRlX3J4X2N0 bChk ZXYsIDB4MDAwMCkpIDwgMCkNCiAJCWdvdG8gb3V0MjsNCiANCisJcnhfY3RsID0gYXNpeF9y ZWFk X3J4X2N0bChkZXYpOw0KKwlkYmcoIlJYX0NUTCBpcyAweCUwNHggc2V0dGluZyB0byAweDAw MDAi LCByeF9jdGwpOw0KKw0KIAkvKiBHZXQgdGhlIE1BQyBhZGRyZXNzICovDQogCW1lbXNldChi dWYs IDAsIEVUSF9BTEVOKTsNCiAJaWYgKChyZXQgPSBhc2l4X3JlYWRfY21kKGRldiwgQVg4ODc3 Ml9D TURfUkVBRF9OT0RFX0lELA0KQEAgLTYxOCwxNiArNjcyLDYgQEAgc3RhdGljIGludCBheDg4 Nzcy X2JpbmQoc3RydWN0IHVzYm5ldCAqZA0KIAl9DQogCW1lbWNweShkZXYtPm5ldC0+ZGV2X2Fk ZHIs IGJ1ZiwgRVRIX0FMRU4pOw0KIA0KLQlpZiAoKHJldCA9IGFzaXhfc2V0X3N3X21paShkZXYp KSA8 IDApDQotCQlnb3RvIG91dDI7DQotDQotCWlmICgoKHJldCA9IGFzaXhfcmVhZF9jbWQoZGV2 LCBB WF9DTURfUkVBRF9NSUlfUkVHLA0KLQkgICAgICAJCQkweDAwMTAsIDIsIDIsIGJ1ZikpIDwg MCkN Ci0JCQl8fCAoKigodTE2ICopYnVmKSAhPSAweDAwM2IpKSB7DQotCQlkYmcoIlJlYWQgUEhZ IHJl Z2lzdGVyIDIgbXVzdCBiZSAweDNiMDA6ICVkIiwgcmV0KTsNCi0JCWdvdG8gb3V0MjsNCi0J fQ0K LQ0KIAkvKiBJbml0aWFsaXplIE1JSSBzdHJ1Y3R1cmUgKi8NCiAJZGV2LT5taWkuZGV2ID0g ZGV2 LT5uZXQ7DQogCWRldi0+bWlpLm1kaW9fcmVhZCA9IGFzaXhfbWRpb19yZWFkOw0KQEAgLTYz Nyw2 ICs2ODEsMTIgQEAgc3RhdGljIGludCBheDg4NzcyX2JpbmQoc3RydWN0IHVzYm5ldCAqZA0K IAlk ZXYtPm5ldC0+ZG9faW9jdGwgPSBhc2l4X2lvY3RsOw0KIAlkZXYtPm1paS5waHlfaWQgPSBh c2l4 X2dldF9waHlpZChkZXYpOw0KIA0KKwlpZiAoKHJldCA9IGFzaXhfbWRpb19yZWFkKGRldi0+ bmV0 LA0KKwkJCWRldi0+bWlpLnBoeV9pZCwgTUlJX1BIWVNJRDEpKSAhPSAweDAwM2IpIHsNCisJ CWRi ZygiUmVhZCBQSFlTSUQxIG11c3QgYmUgMHgwMDNiLiAgUmVhZDogJTA0eCIsIHJldCk7DQor CQln b3RvIG91dDI7DQorCX0NCisNCiAJaWYgKChyZXQgPSBhc2l4X3N3X3Jlc2V0KGRldiwgQVhf U1dS RVNFVF9QUkwpKSA8IDApDQogCQlnb3RvIG91dDI7DQogDQpAQCAtNjUwLDggKzcwMCw4IEBA IHN0 YXRpYyBpbnQgYXg4ODc3Ml9iaW5kKHN0cnVjdCB1c2JuZXQgKmQNCiAJZGV2LT5uZXQtPnNl dF9t dWx0aWNhc3RfbGlzdCA9IGFzaXhfc2V0X211bHRpY2FzdDsNCiAJZGV2LT5uZXQtPmV0aHRv b2xf b3BzID0gJmF4ODg3NzJfZXRodG9vbF9vcHM7DQogDQotCWFzaXhfbWRpb193cml0ZV9sZShk ZXYt Pm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfQk1DUiwgQk1DUl9SRVNFVCk7DQotCWFzaXhf bWRp b193cml0ZV9sZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfQURWRVJUSVNFLA0K Kwlh c2l4X21kaW9fd3JpdGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsIEJN Q1Jf UkVTRVQpOw0KKwlhc2l4X21kaW9fd3JpdGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwg TUlJ X0FEVkVSVElTRSwNCiAJCQlBRFZFUlRJU0VfQUxMIHwgQURWRVJUSVNFX0NTTUEpOw0KIAlt aWlf bndheV9yZXN0YXJ0KCZkZXYtPm1paSk7DQogDQpAQCAtNjY3LDEzICs3MTcsMTIwIEBAIHN0 YXRp YyBpbnQgYXg4ODc3Ml9iaW5kKHN0cnVjdCB1c2JuZXQgKmQNCiAJCWRiZygiV3JpdGUgSVBH LElQ RzEsSVBHMiBmYWlsZWQ6ICVkIiwgcmV0KTsNCiAJCWdvdG8gb3V0MjsNCiAJfQ0KLQlpZiAo KHJl dCA9IGFzaXhfc2V0X2h3X21paShkZXYpKSA8IDApDQotCQlnb3RvIG91dDI7DQogDQogCS8q IFNl dCBSWF9DVEwgdG8gZGVmYXVsdCB2YWx1ZXMgd2l0aCAyayBidWZmZXIsIGFuZCBlbmFibGUg Y2Fj dHVzICovDQogCWlmICgocmV0ID0gYXNpeF93cml0ZV9yeF9jdGwoZGV2LCAweDAwODgpKSA8 IDAp DQogCQlnb3RvIG91dDI7DQogDQorCXJ4X2N0bCA9IGFzaXhfcmVhZF9yeF9jdGwoZGV2KTsN CisJ ZGJnKCJSWF9DVEwgaXMgMHglMDR4IGFmdGVyIGFsbCBpbml0aWFsaXphdGlvbnMiLCByeF9j dGwp Ow0KKw0KKwlyeF9jdGwgPSBhc2l4X3JlYWRfbWVkaXVtX3N0YXR1cyhkZXYpOw0KKwlkYmco Ik1l ZGl1bSBTdGF0dXMgaXMgMHglMDR4IGFmdGVyIGFsbCBpbml0aWFsaXphdGlvbnMiLCByeF9j dGwp Ow0KKw0KKwlrZnJlZShidWYpOw0KKw0KKwkvKiBBc2l4IGZyYW1pbmcgcGFja3MgbXVsdGlw bGUg ZXRoIGZyYW1lcyBpbnRvIGEgMksgdXNiIGJ1bGsgdHJhbnNmZXIgKi8NCisJaWYgKGRldi0+ ZHJp dmVyX2luZm8tPmZsYWdzICYgRkxBR19GUkFNSU5HX0FYKSB7DQorCQkvKiBoYXJkX210dSAg aXMg c3RpbGwgdGhlIGRlZmF1bHQgLSB0aGUgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQNCisJCSAg IGp1 bWJvIGV0aCBmcmFtZXMgKi8NCisJCWRldi0+cnhfdXJiX3NpemUgPSAyMDQ4Ow0KKwl9DQor DQor CXJldHVybiAwOw0KKw0KK291dDI6DQorCWtmcmVlKGJ1Zik7DQorb3V0MToNCisJcmV0dXJu IHJl dDsNCit9DQorDQorc3RhdGljIGludCBheDg4MTc4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2 LCBz dHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikNCit7DQorCWludCByZXQ7DQorCXZvaWQgKmJ1 ZjsN CisJdTE2IGVlcHJvbTsNCisJaW50IGdwaW8wID0gMDsNCisJaW50IHBoeW1vZGUgPSAwOw0K Kw0K Kwl1c2JuZXRfZ2V0X2VuZHBvaW50cyhkZXYsaW50Zik7DQorDQorCWJ1ZiA9IGttYWxsb2Mo Niwg R0ZQX0tFUk5FTCk7DQorCWlmKCFidWYpIHsNCisJCWRiZyAoIkNhbm5vdCBhbGxvY2F0ZSBt ZW1v cnkgZm9yIGJ1ZmZlciIpOw0KKwkJcmV0ID0gLUVOT01FTTsNCisJCWdvdG8gb3V0MTsNCisJ fQ0K Kw0KKwlhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9FTkFCTEUsIDAsIDAsIDAs IE5V TEwpOw0KKwlhc2l4X3JlYWRfY21kKGRldiwgQVhfQ01EX1JFQURfRUVQUk9NLCAweDAwMTcs IDAs IDIsICZlZXByb20pOw0KKwlhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9ESVNB QkxF LCAwLCAwLCAwLCBOVUxMKTsNCisNCisJZGJnKCJFRVBST00gaW5kZXggMHgxNyBpcyAweCUw NHgi LCBlZXByb20pOw0KKw0KKwlpZiAoZWVwcm9tID09IDB4ZmZmZikgew0KKwkJcGh5bW9kZSA9 IDA7 DQorCQlncGlvMCA9IDE7DQorCX0gZWxzZSB7DQorCQlwaHltb2RlID0gZWVwcm9tICYgNzsN CisJ CWdwaW8wID0gKGVlcHJvbSAmIDB4ODApID8gMCA6IDE7DQorCX0NCisJZGJnKCJHUElPMDog JWQs IFBoeU1vZGU6ICVkIiwgZ3BpbzAsIHBoeW1vZGUpOw0KKw0KKwlhc2l4X3dyaXRlX2dwaW8o ZGV2 LCAweDAwOGMsIDQwKTsNCisJaWYgKChlZXByb20gPj4gOCkgIT0gMSkgew0KKwkJYXNpeF93 cml0 ZV9ncGlvKGRldiwgMHgwMDNjLCAzMCk7DQorCQlhc2l4X3dyaXRlX2dwaW8oZGV2LCAweDAw MWMs IDMwMCk7DQorCQlhc2l4X3dyaXRlX2dwaW8oZGV2LCAweDAwM2MsIDMwKTsNCisJfSBlbHNl IHsN CisJCWRiZygiZ3BpbyBwaHltb2RlID09IDEgcGF0aCIpOw0KKwkJYXNpeF93cml0ZV9ncGlv KGRl diwgMHgwMDA0LCAzMCk7DQorCQlhc2l4X3dyaXRlX2dwaW8oZGV2LCAweDAwMGMsIDMwKTsN CisJ fQ0KKw0KKwlhc2l4X3N3X3Jlc2V0KGRldiwgMCk7DQorCW1zbGVlcCgxNTApOw0KKw0KKwlh c2l4 X3N3X3Jlc2V0KGRldiwgQVhfU1dSRVNFVF9QUkwgfCBBWF9TV1JFU0VUX0lQUEQpOw0KKwlt c2xl ZXAoMTUwKTsNCisNCisJYXNpeF93cml0ZV9yeF9jdGwoZGV2LCAwKTsNCisNCisJLyogR2V0 IHRo ZSBNQUMgYWRkcmVzcyAqLw0KKwltZW1zZXQoYnVmLCAwLCBFVEhfQUxFTik7DQorCWlmICgo cmV0 ID0gYXNpeF9yZWFkX2NtZChkZXYsIEFYODg3NzJfQ01EX1JFQURfTk9ERV9JRCwNCisJCQkJ MCwg MCwgRVRIX0FMRU4sIGJ1ZikpIDwgMCkgew0KKwkJZGJnKCJGYWlsZWQgdG8gcmVhZCBNQUMg YWRk cmVzczogJWQiLCByZXQpOw0KKwkJZ290byBvdXQyOw0KKwl9DQorCW1lbWNweShkZXYtPm5l dC0+ ZGV2X2FkZHIsIGJ1ZiwgRVRIX0FMRU4pOw0KKw0KKwkvKiBJbml0aWFsaXplIE1JSSBzdHJ1 Y3R1 cmUgKi8NCisJZGV2LT5taWkuZGV2ID0gZGV2LT5uZXQ7DQorCWRldi0+bWlpLm1kaW9fcmVh ZCA9 IGFzaXhfbWRpb19yZWFkOw0KKwlkZXYtPm1paS5tZGlvX3dyaXRlID0gYXNpeF9tZGlvX3dy aXRl Ow0KKwlkZXYtPm1paS5waHlfaWRfbWFzayA9IDB4ZmY7DQorCWRldi0+bWlpLnJlZ19udW1f bWFz ayA9IDB4ZmY7DQorCWRldi0+bWlpLnN1cHBvcnRzX2dtaWkgPSAxOw0KKwlkZXYtPm5ldC0+ ZG9f aW9jdGwgPSBhc2l4X2lvY3RsOw0KKwlkZXYtPm1paS5waHlfaWQgPSBhc2l4X2dldF9waHlp ZChk ZXYpOw0KKwlkZXYtPm5ldC0+c2V0X211bHRpY2FzdF9saXN0ID0gYXNpeF9zZXRfbXVsdGlj YXN0 Ow0KKwlkZXYtPm5ldC0+ZXRodG9vbF9vcHMgPSAmYXg4ODc3Ml9ldGh0b29sX29wczsNCisN CisJ YXNpeF9tZGlvX3dyaXRlKGRldi0+bmV0LCBkZXYtPm1paS5waHlfaWQsIE1JSV9CTUNSLCBC TUNS X1JFU0VUKTsNCisJYXNpeF9tZGlvX3dyaXRlKGRldi0+bmV0LCBkZXYtPm1paS5waHlfaWQs IE1J SV9BRFZFUlRJU0UsDQorCQkJQURWRVJUSVNFX0FMTCB8IEFEVkVSVElTRV9DU01BKTsNCisJ bWlp X253YXlfcmVzdGFydCgmZGV2LT5taWkpOw0KKw0KKwlpZiAoKHJldCA9IGFzaXhfd3JpdGVf Y21k KGRldiwgQVhfQ01EX1dSSVRFX01FRElVTV9NT0RFLA0KKwkJCQlBWDg4MTc4X01FRElVTV9E RUZB VUxULCAwLCAwLCBidWYpKSA8IDApIHsNCisJCWRiZygiV3JpdGUgbWVkaXVtIG1vZGUgcmVn aXN0 ZXI6ICVkIiwgcmV0KTsNCisJCWdvdG8gb3V0MjsNCisJfQ0KKw0KKwlpZiAoKHJldCA9IGFz aXhf d3JpdGVfcnhfY3RsKGRldiwgMHgwMDk4KSkgPCAwKQ0KKwkJZ290byBvdXQyOw0KKw0KIAlr ZnJl ZShidWYpOw0KIA0KIAkvKiBBc2l4IGZyYW1pbmcgcGFja3MgbXVsdGlwbGUgZXRoIGZyYW1l cyBp bnRvIGEgMksgdXNiIGJ1bGsgdHJhbnNmZXIgKi8NCkBAIC03OTQsOCArOTUxLDggQEAgc3Rh dGlj IGludCBheDg4NzcyX2xpbmtfcmVzZXQoc3RydWN0IHVzYg0KIAl1MTYgbW9kZTsNCiANCiAJ bW9k ZSA9IEFYODg3NzJfTUVESVVNX0RFRkFVTFQ7DQotCWxwYSA9IGFzaXhfbWRpb19yZWFkX2xl KGRl di0+bmV0LCBkZXYtPm1paS5waHlfaWQsIE1JSV9MUEEpOw0KLQlhZHYgPSBhc2l4X21kaW9f cmVh ZF9sZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfQURWRVJUSVNFKTsNCisJbHBh ID0g YXNpeF9tZGlvX3JlYWQoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0xQQSk7DQor CWFk diA9IGFzaXhfbWRpb19yZWFkKGRldi0+bmV0LCBkZXYtPm1paS5waHlfaWQsIE1JSV9BRFZF UlRJ U0UpOw0KIAlyZXMgPSBtaWlfbndheV9yZXN1bHQobHBhfGFkdik7DQogDQogCWlmICgocmVz ICYg TFBBX0RVUExFWCkgPT0gMCkNCkBAIC04MDcsNiArOTY0LDQ2IEBAIHN0YXRpYyBpbnQgYXg4 ODc3 Ml9saW5rX3Jlc2V0KHN0cnVjdCB1c2INCiAJcmV0dXJuIDA7DQogfQ0KIA0KK3N0YXRpYyBp bnQg YXg4ODE3OF9saW5rX3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldikNCit7DQorCXUxNiBscGE7 DQor CXUxNiBhZHY7DQorCXUxNiBscGEyOw0KKwlpbnQgbWVkaWE7DQorCWludCBkdXBsZXg7DQor CXUx NiBtb2RlOw0KKw0KKwltaWlfY2hlY2tfbWVkaWEoJmRldi0+bWlpLCAxLCAxKTsNCisNCisJ bW9k ZSA9IEFYODgxNzhfTUVESVVNX0RFRkFVTFQ7DQorDQorCWFkdiA9IGFzaXhfbWRpb19yZWFk KGRl di0+bmV0LCBkZXYtPm1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UpOw0KKwlscGEgPSBhc2l4 X21k aW9fcmVhZChkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfTFBBKTsNCisJbHBhMiA9 IGFz aXhfbWRpb19yZWFkKGRldi0+bmV0LCBkZXYtPm1paS5waHlfaWQsIE1JSV9TVEFUMTAwMCk7 DQor DQorCWRldmRiZyhkZXYsICJheDg4MTc4X2xpbmtfcmVzZXQoKSBscGE9MHglMDR4LCBhZHY9 MHgl MDR4LCBscGEyPTB4JTA0eCIsIGxwYSwgYWR2LCBscGEyKTsNCisNCisJbWVkaWEgPSBtaWlf bndh eV9yZXN1bHQobHBhICYgYWR2KTsNCisJZHVwbGV4ID0gKG1lZGlhICYgQURWRVJUSVNFX0ZV TEwp ID8gMSA6IDA7DQorCWlmIChscGEyICYgTFBBXzEwMDBGVUxMKQ0KKwkJZHVwbGV4ID0gMTsN CisN CisJaWYgKGxwYTIgJiAoTFBBXzEwMDBGVUxMIHwgTFBBXzEwMDBIQUxGKSkNCisJCW1vZGUg Jj0g QVg4ODE3OF9NRURJVU1fR0lHQUJJVDsNCisJZWxzZSBpZiAobWVkaWEgJiAoQURWRVJUSVNF XzEw MEZVTEwgfCBBRFZFUlRJU0VfMTAwSEFMRikpDQorCQltb2RlICY9IEFYODgxNzhfTUVESVVN XzEw ME1COw0KKwllbHNlDQorCQltb2RlICY9IH5BWDg4MTc4X01FRElVTV8xMDBNQjsNCisNCisJ aWYg KCFkdXBsZXgpDQorCQltb2RlICY9IH5BWDg4MTc4X01FRElVTV9GVUxMX0RVUExFWDsNCisN CisJ ZGV2ZGJnKGRldiwgImF4ODgxNzhfbGlua19yZXNldCgpIHNldHRpbmcgbW9kZSB0byAweCUw NHgi LCBtb2RlKTsNCisJYXNpeF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfTUVESVVNX01P REUs IG1vZGUsIDAsIDAsIE5VTEwpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQogc3RhdGljIGNv bnN0 IHN0cnVjdCBkcml2ZXJfaW5mbyBheDg4MTd4X2luZm8gPSB7DQogCS5kZXNjcmlwdGlvbiA9 ICJB U0lYIEFYODgxN3ggVVNCIDIuMCBFdGhlcm5ldCIsDQogCS5iaW5kID0gYXg4ODE3Ml9iaW5k LA0K QEAgLTg1OCw2ICsxMDU1LDE3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8g YXg4 ODc3Ml8NCiAJLnR4X2ZpeHVwID0gYXg4ODc3Ml90eF9maXh1cCwNCiB9Ow0KIA0KK3N0YXRp YyBj b25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gYXg4ODE3OF9pbmZvID0gew0KKwkuZGVzY3JpcHRp b24g PSAiQVNJWCBBWDg4MTc4IFVTQiAyLjAgRXRoZXJuZXQiLA0KKwkuYmluZCA9IGF4ODgxNzhf Ymlu ZCwNCisJLnN0YXR1cyA9IGFzaXhfc3RhdHVzLA0KKwkubGlua19yZXNldCA9IGF4ODgxNzhf bGlu a19yZXNldCwNCisJLnJlc2V0ID0gYXg4ODc3Ml9saW5rX3Jlc2V0LA0KKwkuZmxhZ3MgPSBG TEFH X0VUSEVSIHwgRkxBR19GUkFNSU5HX0FYLA0KKwkucnhfZml4dXAgPSBheDg4NzcyX3J4X2Zp eHVw LA0KKwkudHhfZml4dXAgPSBheDg4NzcyX3R4X2ZpeHVwLA0KK307DQorDQogc3RhdGljIGNv bnN0 IHN0cnVjdCB1c2JfZGV2aWNlX2lkCXByb2R1Y3RzIFtdID0gew0KIHsNCiAJLy8gTGlua3N5 cyBV U0IyMDBNDQpAQCAtOTE5LDYgKzExMjcsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB1c2Jf ZGV2 aWNlX2lkCXByb2R1Yw0KIAkvLyAwUTAgY2FibGUgZXRoZXJuZXQNCiAJVVNCX0RFVklDRSAo MHgx NTU3LCAweDc3MjApLA0KIAkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmF4ODg3 NzJf aW5mbywNCit9LCB7DQorCS8vIEFTSVggQVg4ODE3OCAxMC8xMDAvMTAwMA0KKwlVU0JfREVW SUNF ICgweDBiOTUsIDB4MTc4MCksDQorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAm YXg4 ODE3OF9pbmZvLA0KIH0sDQogCXsgfSwJCS8vIEVORA0KIH07DQo= --=-+PJR33xIdNuieYWZ4+Tk-- --=-x6I/yARinv9UN4+dgln1 Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.3 (GNU/Linux) iD8DBQBEcvQixasLqOyGHncRAqnqAJ0Xu3ep7Q0wMW2j6PUEVfNznpQUCgCeJUx0 oZWZBZCaX5Mlf+l2XLDroA0= =sQnw -----END PGP SIGNATURE----- --=-x6I/yARinv9UN4+dgln1-- --__--__-- _______________________________________________ linux-usb-devel@lists.sourceforge.net To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel End of linux-usb-devel Digest ********************** Legal Disclaimer **************************** "This email may contain confidential and privileged material for the sole use of the intended recipient. Any unauthorized review, use or distribution by others is strictly prohibited. If you have received the message in error, please advise the sender by reply email and delete the message. Thank you." ********************************************************************** ------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid0709&bid&3057&dat1642 _______________________________________________ linux-usb-devel@lists.sourceforge.net To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel