Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 03 Oct 2002 19:30:27 +0900 (JST)
From:      Mitsuru IWASAKI <iwasaki@jp.FreeBSD.org>
To:        takawata@axe-inc.co.jp
Cc:        current@FreeBSD.ORG, jhb@FreeBSD.ORG, mark@grondar.za
Subject:   Re: PCI brokenness
Message-ID:  <20021003.193027.27010308.iwasaki@jp.FreeBSD.org>
In-Reply-To: <200210030615.PAA28545@axe-inc.co.jp>
References:  <20021003.150228.58374327.iwasaki@jp.FreeBSD.org> <200210030615.PAA28545@axe-inc.co.jp>

next in thread | previous in thread | raw e-mail | index | archive | help
> ># I could be wrong, please correct me :)
> >I think that Libretto 110CT doesn't have PCI-ISA bridge , so no isab,
> >no isa, no isahint (requires isa) w/ acpi enabled.
> 
> Hmmm, \_SB.PCI0.EIO has no _ADR, _HID instead.
> But I think ISA or LPC controller exists in this system.

Adding some device ID to isa_pci.c will solve this?
OK, I enclose dmesg w/ boot -v from mark's first post for convenience.
----
pci0: physical bus=0
found->	vendor=0x1179, dev=0x0601, revid=0x2e
	bus=0, slot=0, func=0
	class=06-00-00, hdrtype=0x00, mfdev=0
	map[10]: type 3, range 32, base fd000000, size 24, enabled
	map[14]: type 1, range 32, base ffc00000, size 21, enabled
	map[18]: type 1, range 32, base ffb00000, size 20, enabled
found->	vendor=0x10c8, dev=0x0004, revid=0x01
	bus=0, slot=4, func=0
	class=03-00-00, hdrtype=0x00, mfdev=0
	intpin=a, irq=255
	map[10]: type 4, range 32, base 00000000, size  5, port disabled
found->	vendor=0x1179, dev=0x0701, revid=0x22
	bus=0, slot=17, func=0
	class=07-80-00, hdrtype=0x00, mfdev=0
	intpin=a, irq=255
found->	vendor=0x1179, dev=0x060f, revid=0x20
	bus=0, slot=19, func=0
	class=06-07-00, hdrtype=0x02, mfdev=1
	intpin=a, irq=255
found->	vendor=0x1179, dev=0x060f, revid=0x20
	bus=0, slot=19, func=1
	class=06-07-00, hdrtype=0x02, mfdev=1
	intpin=b, irq=255
----

> >In legacy case, we have at least isa0 on motherboard even if there
> >is no ISA bridge.  OTOH, we never see isa0 if there is no ISA bridge
> >in ACPI case.
> >Also, most of isa device driver (more than 70!) don't have acpi
> >attachment yet, including some important drivers such as sc0.
> >
> >Hmmm, it's not so simple...
> >How about having acpi_isa bus code so that we have at least isa0
> >on the system w/o ISA bridge ?
> 
> Is that be able multiple multipule isa bus exist in the system?

I'm not sure, but my thought was something like following patches.

Thanks

Index: dev/acpica/acpi.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/acpica/acpi.c,v
retrieving revision 1.75
diff -u -r1.75 acpi.c
--- dev/acpica/acpi.c	6 Sep 2002 17:01:06 -0000	1.75
+++ dev/acpica/acpi.c	3 Oct 2002 10:13:51 -0000
@@ -777,6 +777,10 @@
 	if (ACPI_SUCCESS(AcpiGetHandle(ACPI_ROOT_OBJECT, scopes[i], &parent)))
 	    AcpiWalkNamespace(ACPI_TYPE_ANY, parent, 100, acpi_probe_child, bus, NULL);
 
+    if (devclass_get_device(devclass_find("isa"), 0) == NULL) {
+	device_set_flags(BUS_ADD_CHILD(bus, 0, "isa", 0), 1);
+    }
+
     /*
      * Scan all of the child devices we have created and let them probe/attach.
      */
Index: isa/isa_common.c
===================================================================
RCS file: /home/ncvs/src/sys/isa/isa_common.c,v
retrieving revision 1.31
diff -u -r1.31 isa_common.c
--- isa/isa_common.c	30 Sep 2002 07:56:12 -0000	1.31
+++ isa/isa_common.c	3 Oct 2002 10:13:04 -0000
@@ -1107,6 +1107,60 @@
 	1,			/* no softc */
 };
 
+static int
+acpi_isa_probe(device_t dev)
+{
+
+	if (device_get_flags(dev) == 0) {
+		return (ENXIO);
+	}
+
+	return (isa_probe(dev));
+}
+
+static device_method_t acpi_isa_methods[] = {
+	/* Device interface */
+	DEVMETHOD(device_probe,		acpi_isa_probe),
+	DEVMETHOD(device_attach,	isa_attach),
+	DEVMETHOD(device_detach,	bus_generic_detach),
+	DEVMETHOD(device_shutdown,	bus_generic_shutdown),
+	DEVMETHOD(device_suspend,	bus_generic_suspend),
+	DEVMETHOD(device_resume,	bus_generic_resume),
+
+	/* Bus interface */
+	DEVMETHOD(bus_add_child,	isa_add_child),
+	DEVMETHOD(bus_print_child,	isa_print_child),
+	DEVMETHOD(bus_probe_nomatch,	isa_probe_nomatch),
+	DEVMETHOD(bus_read_ivar,	isa_read_ivar),
+	DEVMETHOD(bus_write_ivar,	isa_write_ivar),
+	DEVMETHOD(bus_child_detached,	isa_child_detached),
+	DEVMETHOD(bus_driver_added,	isa_driver_added),
+	DEVMETHOD(bus_setup_intr,	isa_setup_intr),
+	DEVMETHOD(bus_teardown_intr,	isa_teardown_intr),
+
+	DEVMETHOD(bus_get_resource_list,isa_get_resource_list),
+	DEVMETHOD(bus_alloc_resource,	isa_alloc_resource),
+	DEVMETHOD(bus_release_resource,	isa_release_resource),
+	DEVMETHOD(bus_set_resource,	isa_set_resource),
+	DEVMETHOD(bus_get_resource,	bus_generic_rl_get_resource),
+	DEVMETHOD(bus_delete_resource,	bus_generic_rl_delete_resource),
+	DEVMETHOD(bus_activate_resource, bus_generic_activate_resource),
+	DEVMETHOD(bus_deactivate_resource, bus_generic_deactivate_resource),
+
+	/* ISA interface */
+	DEVMETHOD(isa_add_config,	isa_add_config),
+	DEVMETHOD(isa_set_config_callback, isa_set_config_callback),
+	DEVMETHOD(isa_pnp_probe,	isa_pnp_probe),
+
+	{ 0, 0 }
+};
+
+static driver_t acpi_isa_driver = {
+	"isa",
+	acpi_isa_methods,
+	1,			/* no softc */
+};
+
 /*
  * ISA can be attached to a PCI-ISA bridge or directly to the legacy device.
  */
@@ -1114,4 +1168,5 @@
 DRIVER_MODULE(isa, eisab, isa_driver, isa_devclass, 0, 0);
 #ifdef __i386__
 DRIVER_MODULE(isa, legacy, isa_driver, isa_devclass, 0, 0);
+DRIVER_MODULE(isa, acpi, acpi_isa_driver, isa_devclass, 0, 0);
 #endif

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




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