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);