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
This commit is contained in:
Warner Losh 2001-11-26 00:39:33 +00:00
parent b772be119c
commit f703f3eaee
3 changed files with 33 additions and 3 deletions

View File

@ -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

View File

@ -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

View File

@ -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 }
};
@ -61,6 +71,24 @@ static driver_t sio_pccard_driver = {
sizeof(struct com_s),
};
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;