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>
