From owner-freebsd-current@FreeBSD.ORG Mon Jul 11 20:28:18 2005 Return-Path: X-Original-To: freebsd-current@FreeBSD.org Delivered-To: freebsd-current@FreeBSD.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 5A37616A423 for ; Mon, 11 Jul 2005 20:28:18 +0000 (GMT) (envelope-from jhb@FreeBSD.org) Received: from mv.twc.weather.com (mv.twc.weather.com [65.212.71.225]) by mx1.FreeBSD.org (Postfix) with ESMTP id 840A443D48 for ; Mon, 11 Jul 2005 20:28:17 +0000 (GMT) (envelope-from jhb@FreeBSD.org) Received: from [10.50.40.201] (Not Verified[65.202.103.25]) by mv.twc.weather.com with NetIQ MailMarshal (v6, 0, 3, 8) id ; Mon, 11 Jul 2005 16:42:20 -0400 From: John Baldwin To: Harry Coin Date: Mon, 11 Jul 2005 16:26:23 -0400 User-Agent: KMail/1.8 References: <4.3.2.7.2.20050711121036.02caa348@mail.qconline.com> <4.3.2.7.2.20050711135352.01edd3f0@mail.qconline.com> In-Reply-To: <4.3.2.7.2.20050711135352.01edd3f0@mail.qconline.com> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200507111626.25124.jhb@FreeBSD.org> Cc: freebsd-current@FreeBSD.org, Nate Lawson Subject: Re: mss.c pcm fix to ' attach returned 6 ' load failure for v5.x acpi and up X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Jul 2005 20:28:18 -0000 On Monday 11 July 2005 03:03 pm, Harry Coin wrote: > John, > > Here are the results you asked for. You will seein the acpi boot the > isa_get_logicalid(dev) returns 0 for a probe call to the non-pnp routine > mss_probe > > dmesg excerpt ... > mss_probe: bus acpi0 is probing device pcm0 > mss_probe: isa_get_logicalid() returned 0! > mss_probe: no address given, try 0x530 > mss_detect - chip revision 0x0a > mss_detect() - Detected CS4236 > pcm0: port 0x530-0x537 on acpi0 > device_attach: pcm0 attach returned 6 > mss_probe: bus acpi0 is probing device pcm1 > ... > > Here are the changes I made for debugging output to the two probe routines > in mss.c > > static int > mss_probe(device_t dev) > { > u_char tmp, tmpx; > int flags, irq, drq, result = ENXIO, setres = 0; > struct mss_info *mss; > printf("mss_probe: bus %s is probing device > %s\n",device_get_nameunit(device_get_parent(dev)),device_get_nameunit(dev)) >; // result = ISA_PNP_PROBE(device_get_parent(dev), dev, mss_ids); // > if (result!=ENOENT) return ENXIO; /* only continue if the device is not > pnp */ > /* old way- not so good for ACPI: */ > if (isa_get_logicalid(dev)) return ENXIO; > printf("mss_probe: isa_get_logicalid() returned 0!\n"); > .... Ok, let's do this one step at a time. I'll give you a patch for mss.c to try to get some more information. It also looks like your soundcard creates 4 different devices (Game, MPU, etc.) so it may be that mss is not handling your card correctly when it sees all the devices. Also, can you upload your acpidump somewhere and provide a URL? I'm curious if you have ACPI devices like thermal zones that don't have _HID's and only have _CIDs. In fact, here's a patch to fix acpi_get_logicalid() in that case. Give this a try first and let me know if it fixes it. Index: acpi.c =================================================================== RCS file: /usr/cvs/src/sys/dev/acpica/acpi.c,v retrieving revision 1.214 diff -u -r1.214 acpi.c --- acpi.c 3 Jun 2005 20:12:12 -0000 1.214 +++ acpi.c 11 Jul 2005 20:23:14 -0000 @@ -1138,6 +1138,7 @@ ACPI_HANDLE h; ACPI_STATUS error; u_int32_t pnpid; + int i; ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__); @@ -1153,8 +1154,24 @@ goto out; devinfo = (ACPI_DEVICE_INFO *)buf.Pointer; - if ((devinfo->Valid & ACPI_VALID_HID) != 0) + if ((devinfo->Valid & ACPI_VALID_HID) != 0) { pnpid = PNP_EISAID(devinfo->HardwareId.Value); + goto out; + } + + /* + * If we don't have a HID but do have at least one CID, return the first + * CID. This is so that ISA drivers that use isa_get_logicalid() to + * determine if a device is a PnP device or not will work correctly. + */ + if ((devinfo->Valid & ACPI_VALID_CID) != 0) { + for (i = 0; i < devinfo->CompatibilityId.Count; i++) { + if (strncmp(devinfo->CompatibilityId.Id[i].Value, "PNP", 3) != 0) + continue; + pnpid = PNP_EISAID(devinfo->CompatibilityId.Id[i].Value); + goto out; + } + } out: if (buf.Pointer != NULL) -- John Baldwin <>< http://www.FreeBSD.org/~jhb/ "Power Users Use the Power to Serve" = http://www.FreeBSD.org