Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 23 Jun 2006 15:39:08 +0930
From:      "Daniel O'Connor" <doconnor@gsoft.com.au>
To:        "M. Warner Losh" <imp@bsdimp.com>
Cc:        pieter@degoeje.nl, freebsd-stable@freebsd.org
Subject:   Re: Asus A8V IRQ/serial problems
Message-ID:  <200606231539.09594.doconnor@gsoft.com.au>
In-Reply-To: <20060622.231428.790460912.imp@bsdimp.com>
References:  <200606221424.14380.doconnor@gsoft.com.au> <200606231104.31514.doconnor@gsoft.com.au> <20060622.231428.790460912.imp@bsdimp.com>

next in thread | previous in thread | raw e-mail | index | archive | help
--nextPart5209481.GZX5Gb0luM
Content-Type: multipart/mixed;
  boundary="Boundary-01=_FW4mEsOyYbTAyuJ"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

--Boundary-01=_FW4mEsOyYbTAyuJ
Content-Type: text/plain;
  charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

On Friday 23 June 2006 14:44, M. Warner Losh wrote:
> : I think a better option would be to remove the test in sio.c for the
> : AMD64 case since isa_irq_pending() won't do anything.
>
> I hate #ifdef __amd64__ code.  It is evil and should be avoided.
> Maybe the right answer is to have a separate ACPI probe routine that
> does something similar to the pccard case where we pass 'noprobe =3D 1'
> to the sioprobe routine.  If ACPI says there's a sio there, we don't
> need to probe for it...

That sounds like a good solution! Better than an ifdef for sure :)

How's this diff?
Note that I just mangled the uart ACPI attachment and the sio PCCARD one..

=2D-=20
Daniel O'Connor software and network engineer
for Genesis Software - http://www.gsoft.com.au
"The nice thing about standards is that there
are so many of them to choose from."
  -- Andrew Tanenbaum
GPG Fingerprint - 5596 B766 97C0 0E94 4347 295E E593 DC20 7B3F CE8C

--Boundary-01=_FW4mEsOyYbTAyuJ
Content-Type: text/x-diff;
  charset="iso-8859-1";
  name="sio-acpi.diff"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="sio-acpi.diff"

Index: sys/conf/files
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /usr/CVS-Repository/src/sys/conf/files,v
retrieving revision 1.1104
diff -u -r1.1104 files
=2D-- sys/conf/files	23 Mar 2006 23:06:14 -0000	1.1104
+++ sys/conf/files	23 Jun 2006 05:46:57 -0000
@@ -828,6 +828,7 @@
 dev/si/si_eisa.c		optional si eisa
 dev/si/si_isa.c			optional si isa
 dev/si/si_pci.c			optional si pci
+dev/sio/sio_acpi.c		optional sio acpi
 dev/sio/sio_pccard.c		optional sio pccard
 dev/sio/sio_pci.c		optional sio pci
 dev/sio/sio_puc.c		optional sio puc pci
Index: sys/modules/sio/Makefile
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /usr/CVS-Repository/src/sys/modules/sio/Makefile,v
retrieving revision 1.9
diff -u -r1.9 Makefile
=2D-- sys/modules/sio/Makefile	14 Oct 2005 23:30:15 -0000	1.9
+++ sys/modules/sio/Makefile	23 Jun 2006 05:46:32 -0000
@@ -8,7 +8,7 @@
 KMOD=3D	sio
 SRCS=3D	bus_if.h card_if.h device_if.h isa_if.h pci_if.h \
 	opt_comconsole.h opt_compat.h opt_gdb.h opt_kdb.h opt_sio.h \
=2D	sio.c sio_pccard.c sio_pci.c sio_puc.c pccarddevs.h
+	sio.c sio_acpi.c sio_pccard.c sio_pci.c sio_puc.c pccarddevs.h
 .if ${MACHINE} =3D=3D "pc98"
 SRCS+=3D	sio_cbus.c
 .else
Index: sys/dev/sio/sio_acpi.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: sys/dev/sio/sio_acpi.c
diff -N sys/dev/sio/sio_acpi.c
=2D-- /dev/null	1 Jan 1970 00:00:00 -0000
+++ sys/dev/sio/sio_acpi.c	23 Jun 2006 05:57:03 -0000
@@ -0,0 +1,98 @@
+/*-
+ * Copyright (c) 2006 Daniel O'Connor.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF US=
E,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/bus.h>
+#include <sys/conf.h>
+#include <sys/kernel.h>
+#include <sys/lock.h>
+#include <sys/malloc.h>
+#include <sys/mutex.h>
+#include <sys/module.h>
+#include <sys/tty.h>
+#include <machine/bus.h>
+#include <sys/timepps.h>
+
+#include <dev/sio/siovar.h>
+
+#include <isa/isareg.h>
+#include <isa/isavar.h>
+
+static	int	sio_acpi_attach(device_t dev);
+static	int	sio_acpi_probe(device_t dev);
+
+static device_method_t sio_acpi_methods[] =3D {
+	/* Device interface */
+	DEVMETHOD(device_probe,		sio_acpi_probe),
+	DEVMETHOD(device_attach,	sio_acpi_attach),
+	DEVMETHOD(device_detach,	siodetach),
+
+	{ 0, 0 }
+};
+
+static driver_t sio_acpi_driver =3D {
+	sio_driver_name,
+	sio_acpi_methods,
+	0,
+};
+
+static struct isa_pnp_id sio_acpi_ids[] =3D {
+        {0x0005d041, "Standard PC COM port"},           /* PNP0500 */
+        {0x0105d041, "16550A-compatible COM port"},     /* PNP0501 */
+        {0}
+};
+
+static int
+sio_acpi_probe(dev)
+	device_t	dev;
+{
+	device_t parent;
+=09
+        parent =3D device_get_parent(dev);
+
+        if (!ISA_PNP_PROBE(parent, dev, sio_acpi_ids))
+                return (sioprobe(dev, 0, 0UL, 2));
+
+        /* Add checks for non-ns8250 IDs here. */
+        return (ENXIO);
+
+}
+
+static int
+sio_acpi_attach(dev)
+	device_t	dev;
+{
+	int err;
+=09
+	/* Do not probe IRQ - if ACPI says it's there, it is */
+	if ((err =3D sioprobe(dev, 0, 0UL, 1)) !=3D 0)
+		return (err);
+	return (sioattach(dev, 0, 0UL));
+}
+
+DRIVER_MODULE(sio, acpi, sio_acpi_driver, sio_devclass, 0, 0);
Index: sys/dev/sio/sio_isa.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /usr/CVS-Repository/src/sys/dev/sio/sio_isa.c,v
retrieving revision 1.16
diff -u -r1.16 sio_isa.c
=2D-- sys/dev/sio/sio_isa.c	29 May 2005 04:42:25 -0000	1.16
+++ sys/dev/sio/sio_isa.c	23 Jun 2006 05:46:11 -0000
@@ -167,4 +167,3 @@
 }
=20
 DRIVER_MODULE(sio, isa, sio_isa_driver, sio_devclass, 0, 0);
=2DDRIVER_MODULE(sio, acpi, sio_isa_driver, sio_devclass, 0, 0);
Index: sys/dev/sio/sio.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /usr/CVS-Repository/src/sys/dev/sio/sio.c,v
retrieving revision 1.464
diff -u -r1.464 sio.c
=2D-- sys/dev/sio/sio.c	22 Feb 2006 18:16:25 -0000	1.464
+++ sys/dev/sio/sio.c	23 Jun 2006 06:03:59 -0000
@@ -716,10 +716,12 @@
 	failures[1] =3D sio_getreg(com, com_ier) - IER_ETXRDY;
 	failures[2] =3D sio_getreg(com, com_mcr) - mcr_image;
 	DELAY(10000);		/* Some internal modems need this time */
=2D	irqmap[1] =3D isa_irq_pending();
+	if (noprobe < 2)
+	    irqmap[1] =3D isa_irq_pending();
 	failures[4] =3D (sio_getreg(com, com_iir) & IIR_IMASK) - IIR_TXRDY;
 	DELAY(1000);		/* XXX */
=2D	irqmap[2] =3D isa_irq_pending();
+	if (noprobe < 2)
+	    irqmap[2] =3D isa_irq_pending();
 	failures[6] =3D (sio_getreg(com, com_iir) & IIR_IMASK) - IIR_NOPEND;
=20
 	/*
@@ -735,26 +737,30 @@
 	sio_setreg(com, com_cfcr, CFCR_8BITS);	/* dummy to avoid bus echo */
 	failures[7] =3D sio_getreg(com, com_ier);
 	DELAY(1000);		/* XXX */
=2D	irqmap[3] =3D isa_irq_pending();
+	if (noprobe < 2)
+	    irqmap[3] =3D isa_irq_pending();
 	failures[9] =3D (sio_getreg(com, com_iir) & IIR_IMASK) - IIR_NOPEND;
=20
 	mtx_unlock_spin(&sio_lock);
=20
=2D	irqs =3D irqmap[1] & ~irqmap[0];
=2D	if (bus_get_resource(idev, SYS_RES_IRQ, 0, &xirq, NULL) =3D=3D 0 &&
=2D	    ((1 << xirq) & irqs) =3D=3D 0) {
+	if (noprobe < 2) {
+	    irqs =3D irqmap[1] & ~irqmap[0];
+	    if (bus_get_resource(idev, SYS_RES_IRQ, 0, &xirq, NULL) =3D=3D 0 &&
+		((1 << xirq) & irqs) =3D=3D 0) {
 		printf(
=2D		"sio%d: configured irq %ld not in bitmap of probed irqs %#x\n",
+		    "sio%d: configured irq %ld not in bitmap of probed irqs %#x\n",
 		    device_get_unit(dev), xirq, irqs);
 		printf(
=2D		"sio%d: port may not be enabled\n",
+		    "sio%d: port may not be enabled\n",
 		    device_get_unit(dev));
=2D	}
=2D	if (bootverbose)
+	    }
+
+	    if (bootverbose)
 		printf("sio%d: irq maps: %#x %#x %#x %#x\n",
=2D		    device_get_unit(dev),
=2D		    irqmap[0], irqmap[1], irqmap[2], irqmap[3]);
+		       device_get_unit(dev),
+		       irqmap[0], irqmap[1], irqmap[2], irqmap[3]);
=20
+	}
 	result =3D 0;
 	for (fn =3D 0; fn < sizeof failures; ++fn)
 		if (failures[fn]) {

--Boundary-01=_FW4mEsOyYbTAyuJ--

--nextPart5209481.GZX5Gb0luM
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.2 (FreeBSD)

iD8DBQBEm4WF5ZPcIHs/zowRArSBAJoDdtbVJwMmPwlAH6SKfMJU82lcYgCgpi6X
TUAZixZBbRW3zSBNdGyhym0=
=pTy/
-----END PGP SIGNATURE-----

--nextPart5209481.GZX5Gb0luM--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200606231539.09594.doconnor>