Module Name:    src
Committed By:   matt
Date:           Fri Jan  7 02:24:49 UTC 2011

Modified Files:
        src/sys/dev/pci [matt-nb5-pq3]: ehci_pci.c usb_pci.h

Log Message:
Deal with multifunction pci devices better in choosing companion devices.


To generate a diff of this commit:
cvs rdiff -u -r1.38.10.1 -r1.38.10.1.4.1 src/sys/dev/pci/ehci_pci.c
cvs rdiff -u -r1.5 -r1.5.26.1 src/sys/dev/pci/usb_pci.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/pci/ehci_pci.c
diff -u src/sys/dev/pci/ehci_pci.c:1.38.10.1 src/sys/dev/pci/ehci_pci.c:1.38.10.1.4.1
--- src/sys/dev/pci/ehci_pci.c:1.38.10.1	Wed Jun 17 20:33:39 2009
+++ src/sys/dev/pci/ehci_pci.c	Fri Jan  7 02:24:49 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: ehci_pci.c,v 1.38.10.1 2009/06/17 20:33:39 bouyer Exp $	*/
+/*	$NetBSD: ehci_pci.c,v 1.38.10.1.4.1 2011/01/07 02:24:49 matt Exp $	*/
 
 /*
  * Copyright (c) 2001, 2002 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ehci_pci.c,v 1.38.10.1 2009/06/17 20:33:39 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ehci_pci.c,v 1.38.10.1.4.1 2011/01/07 02:24:49 matt Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -228,13 +228,17 @@
 	 * Find companion controllers.  According to the spec they always
 	 * have lower function numbers so they should be enumerated already.
 	 */
+	const u_int maxncomp = EHCI_HCS_N_CC(EREAD4(&sc->sc, EHCI_HCSPARAMS));
+	KASSERT(maxncomp <= EHCI_COMPANION_MAX);
 	ncomp = 0;
 	TAILQ_FOREACH(up, &ehci_pci_alldevs, next) {
-		if (up->bus == pa->pa_bus && up->device == pa->pa_device) {
+		if (up->bus == pa->pa_bus && up->device == pa->pa_device
+		    && !up->claimed) {
 			DPRINTF(("ehci_pci_attach: companion %s\n",
 				 device_xname(up->usb)));
 			sc->sc.sc_comps[ncomp++] = up->usb;
-			if (ncomp >= EHCI_COMPANION_MAX)
+			up->claimed = true;
+			if (ncomp == maxncomp)
 				break;
 		}
 	}

Index: src/sys/dev/pci/usb_pci.h
diff -u src/sys/dev/pci/usb_pci.h:1.5 src/sys/dev/pci/usb_pci.h:1.5.26.1
--- src/sys/dev/pci/usb_pci.h:1.5	Mon Apr 28 20:23:55 2008
+++ src/sys/dev/pci/usb_pci.h	Fri Jan  7 02:24:49 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: usb_pci.h,v 1.5 2008/04/28 20:23:55 martin Exp $	*/
+/*	$NetBSD: usb_pci.h,v 1.5.26.1 2011/01/07 02:24:49 matt Exp $	*/
 
 /*
  * Copyright (c) 2001, 2002 The NetBSD Foundation, Inc.
@@ -41,6 +41,7 @@
 	u_int		device;
 	u_int		function;
 	device_t	usb;
+	bool		claimed;
 };
 
 TAILQ_HEAD(usb_pci_alldevs, usb_pci);

Reply via email to