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>