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>