Retracting All Current Patches to Sierra.c From Sierra Wireless for Now

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi All, 

We currently have 2 outstanding series of patches waiting to be applied, but after a careful look at the recent additions to the sierra.c driver on the linux-next tree there is no point in following through. Lots of changes have been applied from various authors lately resulting in some broken and missing logic in the driver. Obviously we would like to get it fixed as quickly as possible but for now we are retracting all our outstanding patches. There is no point in having 2 or 3 different parties work on the one driver so we'll stand by until everyone else is done and resubmit our patches later - and fix the broken bits at the same time. If anyone needs a working copy of the driver they can get it from the URL which I've pasted at the end of this email. But note - even this driver has some flaws in the selective suspend area which we are actively working on - thanks to Oliver Neukum for pointing them out! We should have those fixes posted to the URL below shortly. 

Reading beyond this point is optional:

Things started going off the rails with the accidental omission of the patch included at the end of this message (below). That patch - blacklisting - must be included in sierra.c before we release our new direct IP driver called sierra_net.c to kernel.org.


Here's our chronology of _significant_ patches, based on a look at sierra.c's history as it now stands in the linux-next tree, sorry I didn't include actual patch titles in an effort to keep this brief:

April 23rd:	Elina's patch to fix a bug when sending ACM commands to OBEX ports 
		is applied
June 3rd: 	Alan Cox's patch "tty-usb-use-port" is applied but undoes Elina's 
		April 23rd patch
June 4th:	7 of Elina's patches are applied (in sequence but more than 1 
		submission); the patch _included below_ should have been the 8th 
		but it was omitted - I think any of our patches applied after this 
		would be incorrect would they not?
June 4th:	A patch by Andrew Morton was applied to fix a printk warning
June 4th:	4 more of Elina's patches are applied. These are the first 
		four of an 8-patch series. Greg encountered compilation problems 
		when he tried to apply the 5th patch, so further submissions 
		were halted. We were advised to resubmit all 8 to Alan Cox
June 4th:	One patch from Alan Stern is applied to split the shutdown into 
		2 functions. This patch breaks 007/008 from our current series 
		of 8 patches, but that is a moot point now.

URL To Current Sierra.c Driver - 2.6.29 and older:

http://sierrawireless.custhelp.com/app/answers/detail/a_id/500

Best Regards, 

Rory Filer


> -----Original Message-----
> From: Elina Pasheva
> Sent: Wednesday, May 13, 2009 4:42 PM
> To: gregkh@xxxxxxx
> Cc: Elina Pasheva; Rory Filer; linux-usb@xxxxxxxxxxxxxxx
> Subject: [PATCH 004/004] [RESUBMIT2] USB: serial: sierra driver
> interface blacklisting
> 
> Subject: [PATCH 004/004] USB: serial: sierra driver interface
> blacklisting
> From: Elina Pasheva <epasheva@xxxxxxxxxxxxxxxxxx>
> 
> Interface blacklisting is necessary for non-serial interfaces that are
> handled
> by a different driver. The interface blacklisting is implemented in
> sierra
> driver per device. Each device in need of a blacklist has a static
> information
> array kept in the driver. This array contains the interface numbers
> that are
> blacklisted. The pointer for each blacklist array and the length
> of that blacklist are 'bundled' in data structure sierra_iface_info. A
> pointer
> to this information is set in id_table when the device is added to the
> id_table.
> The following is summary of changes we have made to sierra.c driver in
> [PATCH 004/004] dealing with interface blacklisting support:
> - Added data structure sierra_iface_info and function is_blacklisted()
> to support blacklisting
> - Modified sierra_probe() to handle blacklisted interfaces accordingly
> - Improved comments in id_table
> - Added new device in id_table with blacklist interface support
> Signed-off-by: Elina Pasheva <epasheva@xxxxxxxxxxxxxxxxxx>
> ---
> 
>  drivers/usb/serial/sierra.c |   51 ++++++++++++++++++++++++++++++++--
>  1 file changed, 48 insertions(+), 3 deletions(-)
> 
> --- a/drivers/usb/serial/sierra.c	2009-05-13 11:27:17.000000000 -0700
> +++ b/drivers/usb/serial/sierra.c	2009-05-13 15:45:39.000000000 -0700
> @@ -47,6 +47,12 @@
>  static int debug;
>  static int nmea;
> 
> +/* Used in interface blacklisting */
> +struct sierra_iface_info {
> +	const u32 infolen;	/* number of interface numbers on
> blacklist */
> +	const u8  *ifaceinfo;	/* pointer to the array holding the
> numbers */
> +};
> +
>  static int sierra_set_power_state(struct usb_device *udev, __u16
> swiState)
>  {
>  	int result;
> @@ -97,6 +103,23 @@ static int sierra_calc_num_ports(struct
>  	return num_ports;
>  }
> 
> +static int is_blacklisted(const u8 ifnum,
> +				const struct sierra_iface_info *blacklist)
> +{
> +	const u8  *info;
> +	int i;
> +
> +	if (blacklist) {
> +		info = blacklist->ifaceinfo;
> +
> +		for (i = 0; i < blacklist->infolen; i++) {
> +			if (info[i] == ifnum)
> +				return 1;
> +		}
> +	}
> +	return 0;
> +}
> +
>  static int sierra_calc_interface(struct usb_serial *serial)
>  {
>  	int interface;
> @@ -140,9 +163,25 @@ static int sierra_probe(struct usb_seria
>  		usb_set_interface(udev, ifnum, 1);
>  	}
> 
> +	/* ifnum could have changed - by calling usb_set_interface */
> +	ifnum = sierra_calc_interface(serial);
> +
> +	if (is_blacklisted(ifnum,
> +				(struct sierra_iface_info *)id->driver_info)) {
> +		dev_dbg(&serial->dev->dev,
> +			"Ignoring blacklisted interface #%d\n", ifnum);
> +		return -ENODEV;
> +	}
> +
>  	return result;
>  }
> 
> +static const u8 direct_ip_non_serial_ifaces[] = { 7, 8, 9, 10, 11 };
> +static const struct sierra_iface_info direct_ip_interface_blacklist =
> {
> +	.infolen = ARRAY_SIZE(direct_ip_non_serial_ifaces),
> +	.ifaceinfo = direct_ip_non_serial_ifaces,
> +};
> +
>  static struct usb_device_id id_table [] = {
>  	{ USB_DEVICE(0x1199, 0x0017) },	/* Sierra Wireless EM5625 */
>  	{ USB_DEVICE(0x1199, 0x0018) },	/* Sierra Wireless MC5720 */
> @@ -175,9 +214,11 @@ static struct usb_device_id id_table []
>  	{ USB_DEVICE(0x1199, 0x6833) },	/* Sierra Wireless MC8781 */
>  	{ USB_DEVICE(0x1199, 0x683A) },	/* Sierra Wireless MC8785 */
>  	{ USB_DEVICE(0x1199, 0x683B) },	/* Sierra Wireless MC8785
> Composite */
> -	{ USB_DEVICE(0x1199, 0x683C) },	/* Sierra Wireless MC8790 */
> -	{ USB_DEVICE(0x1199, 0x683D) },	/* Sierra Wireless MC8790 */
> -	{ USB_DEVICE(0x1199, 0x683E) },	/* Sierra Wireless MC8790 */
> +	/* Sierra Wireless MC8790, MC8791, MC8792 Composite */
> +	{ USB_DEVICE(0x1199, 0x683C) },
> +	{ USB_DEVICE(0x1199, 0x683D) },	/* Sierra Wireless MC8791
> Composite */
> +	/* Sierra Wireless MC8790, MC8791, MC8792 */
> +	{ USB_DEVICE(0x1199, 0x683E) },
>  	{ USB_DEVICE(0x1199, 0x6850) },	/* Sierra Wireless AirCard
> 880 */
>  	{ USB_DEVICE(0x1199, 0x6851) },	/* Sierra Wireless AirCard
> 881 */
>  	{ USB_DEVICE(0x1199, 0x6852) },	/* Sierra Wireless AirCard
> 880 E */
> @@ -198,6 +239,10 @@ static struct usb_device_id id_table []
>  	{ USB_DEVICE(0x1199, 0x0112) }, /* Sierra Wireless AirCard 580 */
>  	{ USB_DEVICE(0x0F3D, 0x0112) }, /* Airprime/Sierra PC 5220 */
> 
> +	{ USB_DEVICE(0x1199, 0x68A3), 	/* Sierra Wireless Direct IP
> modems */
> +	  .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist
> +	},
> +
>  	{ }
>  };
>  MODULE_DEVICE_TABLE(usb, id_table);
> 

��.n��������+%������w��{.n�����{���)��jg��������ݢj����G�������j:+v���w�m������w�������h�����٥


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux