Met vriendelijke groeten, Eric Verdonck Driver Development Option nv, Gaston Geenslaan 14, B-3001 Leuven T: +32 16 311 597 F: +32 16 207 164 E-mail: e.verdonck@xxxxxxxxxx Website: www.option.com Disclaimer:http://www.option.com/company/disclaimer.shtml RPR Leuven 0429.375.448 On 10/09/2013 03:58 PM, Eric Verdonck wrote: > Hi all, > > Thank you very much for your problem report. The line > le16_to_cpu(serial_state_notification->wIndex) != W_INDEX) in the > function "tiocmget_intr_callback" of the hso driver intents to discard > the notification if the notification urb is not coming from the modem > interface. Actually the line discards the urb if the interface number > differs from the hard coded value W_INDEX ( see Table 67: > Class-Specific Notifications of > www.usb.org/developers/devclass_docs/usbcdc11.pdf for the meaning of > wIndex). Depending of the tyoe of device used and/or depending of the > actual configuration of the device the interface number of the modem > port will vary. Therefore I would like to suggest to remove this check > and replace it by a discard if the urb doesn't belong to an interface > with its port_spec set to HSO_PORT_MODEM. This test has the advantage > that it's independend of the actual configuration or type of the modem > device ( see patch below) > > diff --git a/drivers/net/usb/hso.c b/drivers/net/usb/hso.c > index e2dd324..288ec46 100644 > --- a/drivers/net/usb/hso.c > +++ b/drivers/net/usb/hso.c > @@ -1503,7 +1503,7 @@ static void tiocmget_intr_callback(struct urb *urb) > if (serial_state_notification->bmRequestType != BM_REQUEST_TYPE || > serial_state_notification->bNotification != B_NOTIFICATION || > le16_to_cpu(serial_state_notification->wValue) != W_VALUE || > - le16_to_cpu(serial_state_notification->wIndex) != W_INDEX || > + (serial->parent->port_spec & HSO_PORT_MASK) != HSO_PORT_MODEM || > le16_to_cpu(serial_state_notification->wLength) != W_LENGTH) { > dev_warn(&usb->dev, > "hso received invalid serial state notification\n"); > Best regards, > Eric Verdonck > Firmware development engineer > Option nv, Gaston Geenslaan 14, B-3001 Leuven > > T: +32 16 311 597 > F: +32 16 207 164 > E-mail:e.verdonck@xxxxxxxxxx > Website:www.option.com > Disclaimer:http://www.option.com/company/disclaimer.shtml > > RPR Leuven 0429.375.448 > > On 10/09/2013 01:37 PM, Jan Dumon wrote: >> >> >> >> -------- Original Message -------- >> Subject: Fwd: [PATCH 1/1] hso: fix problem with wrong status code >> sent by OPTION GTM601 during RING indication >> Date: Fri, 4 Oct 2013 08:49:46 +0200 >> From: Jan Dumon <J.Dumon@xxxxxxxxxx> >> To: Axel Schollaert <a.schollaert@xxxxxxxxxx> >> >> >> >> >> >> >> -------- Original Message -------- >> Subject: [PATCH 1/1] hso: fix problem with wrong status code sent by >> OPTION GTM601 during RING indication >> Date: Wed, 2 Oct 2013 09:00:18 +0200 >> From: Dr. H. Nikolaus Schaller <hns@xxxxxxxxxxxxx> >> To: Jan Dumon <j.dumon@xxxxxxxxxx> >> CC: Belisko Marek <marek.belisko@xxxxxxxxx>, >> linux-usb@xxxxxxxxxxxxxxx, netdev@xxxxxxxxxxxxxxx, >> linux-kernel@xxxxxxxxxxxxxxx >> >> >> >> Hi Jan, >> >> we are using a GTM601 modem (Firmware 1.7) for a while and have spotted an >> issue that under some conditions the modem sends a packed wIndex over USB >> that is rejected by the hso driver making troubles afterwards. Not rejecting makes >> it work fine. >> >> BR, >> Nikolaus Schaller >> >> --- >> >> From f5c7e15b61f2ce4fe3105ff914f6bfaf5d74af0d Mon Sep 17 00:00:00 2001 >> From: "H. Nikolaus Schaller"<hns@xxxxxxxxxxxxx> >> Date: Thu, 15 Nov 2012 14:40:57 +0100 >> Subject: [PATCH 1/1] hso: fix problem with wrong status code sent by OPTION >> GTM601 during RING indication >> >> It has been observed that the GTM601 with 1.7 firmware sometimes sends a value >> wIndex that has bit 0x04 set instead of being reset as the code expects. So we >> mask it for the error check. >> >> Seehttp://lists.goldelico.com/pipermail/gta04-owner/2012-February/001643.html >> >> Signed-off-by: NeilBrown<neilb@xxxxxxx> >> Signed-off-by: H. Nikolaus Schaller<hns@xxxxxxxxxxxx> >> --- >> drivers/net/usb/hso.c | 3 ++- >> 1 files changed, 2 insertions(+), 1 deletions(-) >> >> diff --git a/drivers/net/usb/hso.c b/drivers/net/usb/hso.c >> index cba1d46..d146e26 100644 >> --- a/drivers/net/usb/hso.c >> +++ b/drivers/net/usb/hso.c >> @@ -1503,7 +1503,8 @@ static void tiocmget_intr_callback(struct urb *urb) >> if (serial_state_notification->bmRequestType != BM_REQUEST_TYPE || >> serial_state_notification->bNotification != B_NOTIFICATION || >> le16_to_cpu(serial_state_notification->wValue) != W_VALUE || >> - le16_to_cpu(serial_state_notification->wIndex) != W_INDEX || >> + (le16_to_cpu(serial_state_notification->wIndex) & ~0x4) != >> + W_INDEX || >> le16_to_cpu(serial_state_notification->wLength) != W_LENGTH) { >> dev_warn(&usb->dev, >> "hso received invalid serial state notification\n"); >> -- >> 1.7.7.4 >> >> >> >> >> >> > ��.n��������+%������w��{.n�����{���)��jg��������ݢj����G�������j:+v���w�m������w�������h�����٥