Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 4 Oct 2001 13:32:51 +0100 (BST)
From:      Doug Rabson <dfr@nlsystems.com>
To:        Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp>
Cc:        Doug Rabson <dfr@freebsd.org>, <cvs-committers@freebsd.org>, <cvs-all@freebsd.org>
Subject:   Re: cvs commit: src/sys/dev/acpica acpi.c 
Message-ID:  <20011004132820.D1298-100000@salmon.nlsystems.com>
In-Reply-To: <200110041159.UAA24572@zodiac.mech.utsunomiya-u.ac.jp>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 4 Oct 2001, Kazutaka YOKOTA wrote:

>
> >dfr         2001/10/04 01:31:17 PDT
> >
> >  Modified files:
> >    sys/dev/acpica       acpi.c
> >  Log:
> >  Check the compatible ID as well as the hardware ID in acpi_MatchHid.
> >
> >  Revision  Changes    Path
> >  1.41      +6 -1      src/sys/dev/acpica/acpi.c
>
> I think we had better be careful when matching against compatible IDs.
> We should distinguish the case when the hardware ID matches, and the
> case when the compatible ID matches.
>
> If we don't distinguish the hardware ID match and the compatible ID
> match, the following will happen.
>
> The device X has a hardware PnP ID of XXXYYYY and a compatible ID of
> PNPWWWW.
>
> The device driver A supports PNPWWWW device.
>
> The device driver B supports XXXYYYY device.
>
> When the driver A gets at the device X before the device B does, we
> will have the driver A installed for this device, instead of the
> driver B, which offers specific support for PNPWWWW.
>
> We need to make the probe routine in the device drivers return 0
> (exact match) when the hardware ID exactly matches, and return a
> negative value (lower priority) when the compatible ID matches.

Good point. How do you think we should tackle this? I guess I could add an
argument to acpi_MatchHid which could be used to return a priority value.
Perhaps something like this?

Index: acpi.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/acpica/acpi.c,v
retrieving revision 1.41
diff -u -r1.41 acpi.c
--- acpi.c	2001/10/04 08:31:17	1.41
+++ acpi.c	2001/10/04 12:31:37
@@ -906,7 +906,7 @@
  * Match a HID string against a device
  */
 BOOLEAN
-acpi_MatchHid(device_t dev, char *hid)
+acpi_MatchHid(device_t dev, char *hid, int *prio_return)
 {
     ACPI_HANDLE		h;
     ACPI_DEVICE_INFO	devinfo;
@@ -921,12 +921,16 @@
 	return(FALSE);
     if ((error = AcpiGetObjectInfo(h, &devinfo)) != AE_OK)
 	return(FALSE);
-    if ((devinfo.Valid & ACPI_VALID_HID) && !strcmp(hid, devinfo.HardwareId))
+    if ((devinfo.Valid & ACPI_VALID_HID) && !strcmp(hid, devinfo.HardwareId)) {
+	*prio_return = 0;
 	return(TRUE);
+    }
     if ((error = acpi_EvaluateInteger(h, "_CID", &cid)) != AE_OK)
 	return(FALSE);
-    if (cid == PNP_EISAID(hid))
+    if (cid == PNP_EISAID(hid)) {
+	*prio_return = -1;
 	return(TRUE);
+    }
     return(FALSE);
 }


-- 
Doug Rabson				Mail:  dfr@nlsystems.com
					Phone: +44 20 8348 6160



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20011004132820.D1298-100000>