Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 05 Oct 2001 17:44:09 +0900
From:      Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp>
To:        Doug Rabson <dfr@nlsystems.com>
Cc:        <cvs-committers@freebsd.org>, <cvs-all@freebsd.org>, msmith@freebsd.org, yokota@zodiac.mech.utsunomiya-u.ac.jp
Subject:   Re: cvs commit: src/sys/dev/acpica acpi.c 
Message-ID:  <200110050844.RAA28994@zodiac.mech.utsunomiya-u.ac.jp>
In-Reply-To: Your message of "Thu, 04 Oct 2001 13:32:51 %2B0100." <20011004132820.D1298-100000@salmon.nlsystems.com> 
References:  <20011004132820.D1298-100000@salmon.nlsystems.com> 

next in thread | previous in thread | raw e-mail | index | archive | help
>> >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.
                                               XXXYYYY
>>
>> 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?

Or, make acpi_MatchHid() return 3 values, rather than boolean.

0  for exact match with the 'hardware ID'
1  for no match
-1 for match with the 'compatible' ID

We also need to re-think the implementation of acpi_isa_pnp_probe(),
so that the device driver calling this method can distinguish
match with the hardware ID and the compatible ID.

0      for exact match with the 'hardware' ID
ENXIO  for no match
-1     for match with the 'compatible' ID

# Then, /sys/isa/isa_common.c:isa_pnp_probe() need to be modified too...
# 0      for exact match with the logical ID
# ENXIO  for no match
# ENOENT if the device node doesn't have a logical ID
# -1     for match with the 'compatible' ID

Kazu

>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?200110050844.RAA28994>