cdc_ether: Identify MBM devices by GUID in MDLM descriptor
From: Jonas Sjöquist <[email protected]>
This patch removes vid/pid for Ericsson MBM devices from the whitelist set of devices. The MBM devices are instead identified by GUID.
In order for cdc_ether to handle these devices the GUID in the MDLM descriptor is tested. All MBM devices currently handled by cdc_ether as well as future CDC Ethernet MBM devices can be identified by the GUID.
This is the same solution used in Carl Nordbeck's mbm driver,
http://kerneltrap.org/mailarchive/linux-usb/2008/11/17/4141384/thread
I post this as RFC to get feedback on however cdc_ether is the correct place to do the binding, or if it should be done in a separate driver, e.g. zaurus.
---
drivers/net/usb/cdc_ether.c +39 -74
@@ -64,6 +64,11 @@ static int is_wireless_rndis(struct usb_interface_descriptor *desc)#endif +static const u8 mbm_guid[16 ] = { +0xa3 ,0x17 ,0xa8 ,0x8b ,0x04 ,0x5e ,0x4f ,0x01 , +0xa6 ,0x07 ,0xc0 ,0xff ,0xcb ,0x7e ,0x39 ,0x2a , +}; +/* * probes control interface, claims data interface, collects the bulk * endpoints, activates data interface (if needed), maybe sets MTU.
@@ -79,6 +84,8 @@ int usbnet_generic_cdc_bind(struct usbnet *dev, struct usb_interface *intf)int status;int rndis;struct usb_driver *driver =driver_of (intf); +struct usb_cdc_mdlm_desc *desc =NULL ; +struct usb_cdc_mdlm_detail_desc *detail =NULL ;if (sizeof dev->data <sizeof *info)return -EDOM ;
@@ -229,6 +236,34 @@ int usbnet_generic_cdc_bind(struct usbnet *dev, struct usb_interface *intf)* side link address we were given. */ break ; +case USB_CDC_MDLM_TYPE : +if (desc) { +dev_dbg (&intf->dev,"extra MDLM descriptor\n" ); + goto bad_desc; + } + + desc = (void *)buf; + +if (desc->bLength !=sizeof (*desc)) + goto bad_desc; + +if (memcmp (&desc->bGUID, mbm_guid,16 )) + goto bad_desc; +break ; +case USB_CDC_MDLM_DETAIL_TYPE : +if (detail) { +dev_dbg (&intf->dev,"extra MDLM detail descriptor\n" ); + goto bad_desc; + } + + detail = (void *)buf; + +if (detail->bGuidDescriptorType ==0 ) { +if (detail->bLength < (sizeof (*detail) +1 )) + goto bad_desc; + }else + goto bad_desc; +break ; } next_desc: len -= buf [0 ];/* bLength */
@@ -542,80 +577,10 @@ static const struct usb_device_id products [] = { USB_CDC_PROTO_NONE), .driver_info = (unsigned long) &cdc_info, }, { -/* Ericsson F3507g */ -USB_DEVICE_AND_INTERFACE_INFO (0x0bdb ,0x1900 ,USB_CLASS_COMM , - USB_CDC_SUBCLASS_MDLM, USB_CDC_PROTO_NONE), - .driver_info = (unsigned long ) &mbm_info, -}, { -/* Ericsson F3507g ver. 2 */ -USB_DEVICE_AND_INTERFACE_INFO (0x0bdb ,0x1902 ,USB_CLASS_COMM , -USB_CDC_SUBCLASS_MDLM ,USB_CDC_PROTO_NONE ), - .driver_info = (unsigned long) &mbm_info, -}, { -/* Ericsson F3607gw */ -USB_DEVICE_AND_INTERFACE_INFO (0x0bdb ,0x1904 ,USB_CLASS_COMM , -USB_CDC_SUBCLASS_MDLM ,USB_CDC_PROTO_NONE ), - .driver_info = (unsigned long) &mbm_info, -}, { -/* Ericsson F3607gw ver 2 */ -USB_DEVICE_AND_INTERFACE_INFO (0x0bdb ,0x1905 ,USB_CLASS_COMM , -USB_CDC_SUBCLASS_MDLM ,USB_CDC_PROTO_NONE ), - .driver_info = (unsigned long) &mbm_info, -}, { -/* Ericsson F3607gw ver 3 */ -USB_DEVICE_AND_INTERFACE_INFO (0x0bdb ,0x1906 ,USB_CLASS_COMM , -USB_CDC_SUBCLASS_MDLM ,USB_CDC_PROTO_NONE ), - .driver_info = (unsigned long) &mbm_info, -}, { -/* Ericsson F3307 */ -USB_DEVICE_AND_INTERFACE_INFO (0x0bdb ,0x190a ,USB_CLASS_COMM , -USB_CDC_SUBCLASS_MDLM ,USB_CDC_PROTO_NONE ), - .driver_info = (unsigned long) &mbm_info, -}, { -/* Ericsson F3307 ver 2 */ -USB_DEVICE_AND_INTERFACE_INFO (0x0bdb ,0x1909 ,USB_CLASS_COMM , -USB_CDC_SUBCLASS_MDLM ,USB_CDC_PROTO_NONE ), - .driver_info = (unsigned long) &mbm_info, -}, { -/* Ericsson C3607w */ -USB_DEVICE_AND_INTERFACE_INFO (0x0bdb ,0x1049 ,USB_CLASS_COMM , -USB_CDC_SUBCLASS_MDLM ,USB_CDC_PROTO_NONE ), - .driver_info = (unsigned long) &mbm_info, -}, { -/* Ericsson C3607w ver 2 */ -USB_DEVICE_AND_INTERFACE_INFO (0x0bdb ,0x190b ,USB_CLASS_COMM , -USB_CDC_SUBCLASS_MDLM ,USB_CDC_PROTO_NONE ), - .driver_info = (unsigned long) &mbm_info, -}, { -/* Toshiba F3507g */ -USB_DEVICE_AND_INTERFACE_INFO (0x0930 ,0x130b ,USB_CLASS_COMM , -USB_CDC_SUBCLASS_MDLM ,USB_CDC_PROTO_NONE ), - .driver_info = (unsigned long) &mbm_info, -}, { -/* Toshiba F3607gw */ -USB_DEVICE_AND_INTERFACE_INFO (0x0930 ,0x130c ,USB_CLASS_COMM , -USB_CDC_SUBCLASS_MDLM ,USB_CDC_PROTO_NONE ), - .driver_info = (unsigned long) &mbm_info, -}, { -/* Toshiba F3607gw ver 2 */ -USB_DEVICE_AND_INTERFACE_INFO (0x0930 ,0x1311 ,USB_CLASS_COMM , -USB_CDC_SUBCLASS_MDLM ,USB_CDC_PROTO_NONE ), - .driver_info = (unsigned long) &mbm_info, -}, { -/* Dell F3507g */ -USB_DEVICE_AND_INTERFACE_INFO (0x413c ,0x8147 ,USB_CLASS_COMM , -USB_CDC_SUBCLASS_MDLM ,USB_CDC_PROTO_NONE ), - .driver_info = (unsigned long) &mbm_info, -}, { -/* Dell F3607gw */ -USB_DEVICE_AND_INTERFACE_INFO (0x413c ,0x8183 ,USB_CLASS_COMM , -USB_CDC_SUBCLASS_MDLM ,USB_CDC_PROTO_NONE ), - .driver_info = (unsigned long) &mbm_info, -}, { -/* Dell F3607gw ver 2 */ -USB_DEVICE_AND_INTERFACE_INFO (0x413c ,0x8184 ,USB_CLASS_COMM , -USB_CDC_SUBCLASS_MDLM ,USB_CDC_PROTO_NONE ), - .driver_info = (unsigned long) &mbm_info, + USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_MDLM, + USB_CDC_PROTO_NONE), + .driver_info = (unsigned long)&mbm_info, + }, { }, // END };
David Miller
maintainerFrom: Jonas Sjoquist <[email protected]>
Date: Fri, 23 Apr 2010 13:07:45 +0200
Quoted 9 lines
From: Jonas Sjöquist <[email protected]>
This patch removes vid/pid for Ericsson MBM devices from the whitelist set of devices. The MBM devices are instead identified by GUID.
In order for
cdc_etherto handle these devices the GUID in the MDLM descriptor is tested. All MBM devices currently handled bycdc_etheras well as future CDC Ethernet MBM devices can be identified by the GUID.
Quoted 7 lines
This is the same solution used in Carl Nordbeck's mbm driver,
http://kerneltrap.org/mailarchive/linux-usb/2008/11/17/4141384/threadI post this as RFC to get feedback on however
cdc_etheris the correct place to do the binding, or if it should be done in a separate driver, e.g. zaurus.Signed-off-by Jonas Sjöquist <[email protected]>
Can someone knowledgable with the cdc_ether driver review this change?
Thanks.
Am Mittwoch, 28. April 2010 02:09:59 schrieb David Miller:
Quoted 15 lines
From: Jonas Sjoquist <[email protected]>
Date: Fri, 23 Apr 2010 13:07:45 +0200Quoted 12 lines
From: Jonas Sjöquist <[email protected]>
This patch removes vid/pid for Ericsson MBM devices from the whitelist set of devices. The MBM devices are instead identified by GUID.
In order for
cdc_etherto handle these devices the GUID in the MDLM descriptor is tested. All MBM devices currently handled bycdc_etheras well as future CDC Ethernet MBM devices can be identified by the GUID.This is the same solution used in Carl Nordbeck's mbm driver,
http://kerneltrap.org/mailarchive/linux-usb/2008/11/17/4141384/thread
Quoted 6 lines
Quoted 4 lines
I post this as RFC to get feedback on however
cdc_etheris the correct place to do the binding, or if it should be done in a separate driver, e.g. zaurus.Signed-off-by Jonas Sjöquist <[email protected]>Can someone knowledgable with the
cdc_etherdriver review this change?
The patch looks good.
Regards
Oliver
From: Oliver Neukum <[email protected]>
Date: Wed, 28 Apr 2010 10:51:44 +0200
Quoted 16 lines
Am Mittwoch, 28. April 2010 02:09:59 schrieb David Miller:
Quoted 15 lines
From: Jonas Sjoquist <[email protected]>
Date: Fri, 23 Apr 2010 13:07:45 +0200Quoted 12 lines
From: Jonas Sjöquist <[email protected]>
This patch removes vid/pid for Ericsson MBM devices from the whitelist set of devices. The MBM devices are instead identified by GUID.
In order for
cdc_etherto handle these devices the GUID in the MDLM descriptor is tested. All MBM devices currently handled bycdc_etheras well as future CDC Ethernet MBM devices can be identified by the GUID.This is the same solution used in Carl Nordbeck's mbm driver,
http://kerneltrap.org/mailarchive/linux-usb/2008/11/17/4141384/thread
Quoted 8 lines
Quoted 6 lines
Quoted 4 lines
I post this as RFC to get feedback on however
cdc_etheris the correct place to do the binding, or if it should be done in a separate driver, e.g. zaurus.Signed-off-by Jonas Sjöquist <[email protected]>Can someone knowledgable with the
cdc_etherdriver review this change?The patch looks good.
Applied to net-next-2.6, thanks everyone.