summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorimp <imp@FreeBSD.org>2001-11-26 00:39:33 +0000
committerimp <imp@FreeBSD.org>2001-11-26 00:39:33 +0000
commitc62822dc9fdc77e8a9a8ee9a26b90811be89f26b (patch)
tree7d09d58f32b8ded66478fd96add26170b8b8e9fa
parentdb87601b0e5b25e1c588971b3a467cdb8a0bfe9a (diff)
downloadFreeBSD-src-c62822dc9fdc77e8a9a8ee9a26b90811be89f26b.zip
FreeBSD-src-c62822dc9fdc77e8a9a8ee9a26b90811be89f26b.tar.gz
First part of patches to make sio grok 16-bit serial cards under
NEWCARD. Other patches may be reqiured to sio to prevent a hang on eject. Also add commented out entries for sio_pccard.c in files.pc98 to match other architectures. Submitted by: yamamoto shigeru-san
-rw-r--r--sys/conf/files.i3862
-rw-r--r--sys/conf/files.pc982
-rw-r--r--sys/dev/sio/sio_pccard.c32
3 files changed, 33 insertions, 3 deletions
diff --git a/sys/conf/files.i386 b/sys/conf/files.i386
index f171d77..ff9a9c0 100644
--- a/sys/conf/files.i386
+++ b/sys/conf/files.i386
@@ -117,7 +117,7 @@ dev/sbni/if_sbni_pci.c optional sbni pci
dev/sio/sio.c optional sio
dev/sio/sio_isa.c optional sio isa
dev/sio/sio_pccard.c optional sio card
-#dev/sio/sio_pccard.c optional sio pccard
+dev/sio/sio_pccard.c optional sio pccard
dev/sio/sio_pci.c optional sio pci
dev/sr/if_sr_isa.c optional sr isa
dev/syscons/apm/apm_saver.c optional apm_saver apm
diff --git a/sys/conf/files.pc98 b/sys/conf/files.pc98
index f063998..fb1cdf8 100644
--- a/sys/conf/files.pc98
+++ b/sys/conf/files.pc98
@@ -399,6 +399,8 @@ pc98/pc98/scgdcrndr.c optional sc gdc
pc98/pc98/scterm-sck.c optional sc
pc98/pc98/scvtbpc98.c optional sc
pc98/pc98/sio.c optional sio
+#pc98/pc98/sio_pccard.c optional card
+#pc98/pc98/sio_pccard.c optional pccard
pc98/pc98/spkr.c optional speaker
pc98/pc98/syscons.c optional sc
pc98/pc98/syscons_pc98.c optional sc
diff --git a/sys/dev/sio/sio_pccard.c b/sys/dev/sio/sio_pccard.c
index 3d15498..c25709d 100644
--- a/sys/dev/sio/sio_pccard.c
+++ b/sys/dev/sio/sio_pccard.c
@@ -40,18 +40,28 @@
#include <machine/resource.h>
#include <sys/timepps.h>
+#include <dev/pccard/pccardreg.h>
+#include <dev/pccard/pccardvar.h>
+#include <dev/pccard/pccarddevs.h>
+
#include <dev/sio/siovar.h>
static int sio_pccard_attach __P((device_t dev));
static int sio_pccard_detach __P((device_t dev));
+static int sio_pccard_match __P((device_t self));
static int sio_pccard_probe __P((device_t dev));
static device_method_t sio_pccard_methods[] = {
/* Device interface */
- DEVMETHOD(device_probe, sio_pccard_probe),
- DEVMETHOD(device_attach, sio_pccard_attach),
+ DEVMETHOD(device_probe, pccard_compat_probe),
+ DEVMETHOD(device_attach, pccard_compat_attach),
DEVMETHOD(device_detach, sio_pccard_detach),
+ /* Card interface */
+ DEVMETHOD(card_compat_match, sio_pccard_match),
+ DEVMETHOD(card_compat_probe, sio_pccard_probe),
+ DEVMETHOD(card_compat_attach, sio_pccard_attach),
+
{ 0, 0 }
};
@@ -62,6 +72,24 @@ static driver_t sio_pccard_driver = {
};
static int
+sio_pccard_match(device_t dev)
+{
+ int error = 0;
+ u_int32_t fcn = PCCARD_FUNCTION_UNSPEC;
+
+ error = pccard_get_function(dev, &fcn);
+ if (error != 0)
+ return (error);
+ /*
+ * If a serial card, we are likely the right driver.
+ */
+ if (fcn == PCCARD_FUNCTION_SERIAL)
+ return (0);
+
+ return(ENXIO);
+}
+
+static int
sio_pccard_probe(dev)
device_t dev;
{
OpenPOWER on IntegriCloud