From owner-p4-projects@FreeBSD.ORG Wed Dec 5 19:10:44 2007 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 0355516A41B; Wed, 5 Dec 2007 19:10:44 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A2E4216A417 for ; Wed, 5 Dec 2007 19:10:43 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 954B213C45D for ; Wed, 5 Dec 2007 19:10:43 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id lB5JAhDQ007240 for ; Wed, 5 Dec 2007 19:10:43 GMT (envelope-from hselasky@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id lB5JAhsB007237 for perforce@freebsd.org; Wed, 5 Dec 2007 19:10:43 GMT (envelope-from hselasky@FreeBSD.org) Date: Wed, 5 Dec 2007 19:10:43 GMT Message-Id: <200712051910.lB5JAhsB007237@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky To: Perforce Change Reviews Cc: Subject: PERFORCE change 130284 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 05 Dec 2007 19:10:44 -0000 http://perforce.freebsd.org/chv.cgi?CH=130284 Change 130284 by hselasky@hselasky_laptop001 on 2007/12/05 19:10:08 Workaround for buggy USB devices that have no strings. Affected files ... .. //depot/projects/usb/src/sys/dev/usb/usb_subr.c#66 edit Differences ... ==== //depot/projects/usb/src/sys/dev/usb/usb_subr.c#66 (text+ko) ==== @@ -1471,9 +1471,29 @@ udev->no_strings = 1; } #endif + + /* + * Workaround for buggy USB devices. + * + * It appears that some string-less USB chips will crash and + * disappear if any attempts are made to read any string + * descriptors. + * + * Try to detect such chips by checking the strings in the USB + * device descriptor. If no strings are present there we + * simply disable all USB strings. + */ + + if (udev->ddesc.iManufacturer || + udev->ddesc.iProduct || + udev->ddesc.iSerialNumber) { /* setup language ID */ err = usbreq_get_string_desc(udev, &usb_global_lock, buf, 4, 0, USB_LANGUAGE_TABLE); + } else { + err = USBD_INVAL; + } + if (err || (buf[0] < 4)) { udev->no_strings = 1; } else {