Index: usbatm.c =================================================================== RCS file: /home/cvs/usbatm/usbatm.c,v retrieving revision 1.47 diff -u -r1.47 usbatm.c --- usbatm.c 27 May 2005 16:17:23 -0000 1.47 +++ usbatm.c 6 Jul 2005 19:22:42 -0000 @@ -269,7 +269,9 @@ spin_unlock_irqrestore(&channel->lock, flags); - if (unlikely(urb->status)) + if (unlikely(urb->status) && + (!(channel->usbatm->driver->options & IGNORE_ELISEQ) || + urb->status != -EILSEQ )) /* throttle processing in case of an error */ mod_timer(&channel->delay, jiffies + msecs_to_jiffies(THROTTLE_MSECS)); else @@ -1017,7 +1019,10 @@ usbatm_init_channel(&instance->tx_channel); tasklet_init(&instance->rx_channel.tasklet, usbatm_rx_process, (unsigned long)instance); tasklet_init(&instance->tx_channel.tasklet, usbatm_tx_process, (unsigned long)instance); - instance->rx_channel.endpoint = usb_rcvbulkpipe(usb_dev, driver->in); + if (driver->options & USE_ISO) + instance->rx_channel.endpoint = usb_rcvisocpipe(usb_dev, driver->in); + else + instance->rx_channel.endpoint = usb_rcvbulkpipe(usb_dev, driver->in); instance->tx_channel.endpoint = usb_sndbulkpipe(usb_dev, driver->out); instance->rx_channel.stride = ATM_CELL_SIZE + driver->rx_padding; instance->tx_channel.stride = ATM_CELL_SIZE + driver->tx_padding; @@ -1039,7 +1044,15 @@ iso_size = usb_maxpacket(instance->usb_dev, channel->endpoint, 0); iso_size -= iso_size % channel->stride; /* alignment */ BUG_ON(!iso_size); - iso_packets = (channel->buf_size - 1) / iso_size + 1; + if (driver->options & ISO_PACKET_MAX_SIZE) { + /* Some modem have problem when packet size is + * not maxpacket size. + */ + iso_packets = channel->buf_size / iso_size; + channel->buf_size = iso_packets * iso_size; + } + else + iso_packets = (channel->buf_size - 1) / iso_size + 1; } urb = usb_alloc_urb(iso_packets, GFP_KERNEL); Index: usbatm.h =================================================================== RCS file: /home/cvs/usbatm/usbatm.h,v retrieving revision 1.19 diff -u -r1.19 usbatm.h --- usbatm.h 30 May 2005 08:48:13 -0000 1.19 +++ usbatm.h 6 Jul 2005 19:22:42 -0000 @@ -79,6 +79,11 @@ do {} while (0) #endif +/* options */ +#define USE_ISO 0x01 /* use iso pipe for rx data */ +#define IGNORE_ELISEQ 0x02 /* ignore ELISEQ errors */ +#define ISO_PACKET_MAX_SIZE 0x04 /* don't try to use iso packets that + have a size != max_packet_size */ /* mini driver */ @@ -119,6 +124,7 @@ unsigned rx_padding; unsigned tx_padding; + unsigned int options; }; extern int usbatm_usb_probe(struct usb_interface *intf, const struct usb_device_id *id,