diff options
author | kato <kato@FreeBSD.org> | 1999-04-18 14:42:20 +0000 |
---|---|---|
committer | kato <kato@FreeBSD.org> | 1999-04-18 14:42:20 +0000 |
commit | 6b69df13a813066197b2439adba31c602f84361b (patch) | |
tree | bbea6f8600634a59bff89d96d4e7ac1343174aa3 /sys/pc98/cbus/gdc.c | |
parent | da8f615ce6e7fe473ad98685260ce5fb84a39e75 (diff) | |
download | FreeBSD-src-6b69df13a813066197b2439adba31c602f84361b.zip FreeBSD-src-6b69df13a813066197b2439adba31c602f84361b.tar.gz |
Sync with follwing files:
Path Revision
i386/conf/GENERIC 1.162
i386/conf/Makefile.i386 1.146
i386/conf/files.i386 1.236
i386/conf/options.i386 1.111
i386/i386/machdep.c 1.329
i386/i386/userconfig.c 1.134
i386/isa/fd.c 1.135
i386/isa/if_ed.c 1.151
i386/isa/isa_dam.c 1.1
i386/isa/npx.c 1.67
isa/sio.c 1.224
dev/syscons/syscons.c 1.300
i386/isa/wd.c 1.194
isa/vga_isa.c 1.5
isa/atkbd_isa.c 1.3
isa/syscons_isa.c 1.2
Submitted by: Takahashi Yoshihiro <nyan@wyvern.cc.kogakuin.ac.jp>
Diffstat (limited to 'sys/pc98/cbus/gdc.c')
-rw-r--r-- | sys/pc98/cbus/gdc.c | 76 |
1 files changed, 31 insertions, 45 deletions
diff --git a/sys/pc98/cbus/gdc.c b/sys/pc98/cbus/gdc.c index 6b4ac09..7f4570a 100644 --- a/sys/pc98/cbus/gdc.c +++ b/sys/pc98/cbus/gdc.c @@ -25,7 +25,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: pc98gdc.c,v 1.5 1999/02/06 09:30:19 kato Exp $ + * $Id: pc98gdc.c,v 1.6 1999/03/02 12:34:24 kato Exp $ */ #include "gdc.h" @@ -52,8 +52,7 @@ #include <pc98/pc98/pc98.h> #include <pc98/pc98/pc98_machdep.h> - -#include <i386/isa/isa_device.h> +#include <isa/isavar.h> #define TEXT_GDC IO_GDC1 /* 0x60 */ #define ROW 25 @@ -66,27 +65,36 @@ #define GDC_UNIT(dev) minor(dev) #define GDC_MKMINOR(unit) (unit) -static int gdcprobe(struct isa_device *dev); -static int gdc_attach(struct isa_device *dev); +typedef struct gdc_softc { + video_adapter_t *adp; +} gdc_softc_t; + +#define GDC_SOFTC(unit) \ + ((gdc_softc_t *)devclass_get_softc(gdc_devclass, unit)) + +devclass_t gdc_devclass; + +static int gdcprobe(device_t dev); +static int gdc_attach(device_t dev); -struct isa_driver gdcdriver = { - gdcprobe, - gdc_attach, +static device_method_t gdc_methods[] = { + DEVMETHOD(device_probe, gdcprobe), + DEVMETHOD(device_attach, gdc_attach), + { 0, 0 } +}; + +static driver_t gdcdriver = { DRIVER_NAME, - 0, + gdc_methods, + DRIVER_TYPE_TTY, + sizeof(gdc_softc_t), }; -typedef struct gdc_softc { - video_adapter_t *adp; -} gdc_softc_t; +DRIVER_MODULE(gdc, isa, gdcdriver, gdc_devclass, 0, 0); static int gdc_probe_unit(int unit, gdc_softc_t *sc, int flags); static int gdc_attach_unit(int unit, gdc_softc_t *sc, int flags); -#define GDC_SOFTC(unit) (gdc_softc[unit]) - -static gdc_softc_t *gdc_softc[NGDC]; - #if FB_INSTALL_CDEV static d_open_t gdcopen; @@ -104,44 +112,22 @@ static struct cdevsw vga_cdevsw = { #endif /* FB_INSTALL_CDEV */ static int -gdcprobe(struct isa_device *dev) +gdcprobe(device_t dev) { gdc_softc_t *sc; - int error; - - if (dev->id_unit >= sizeof(gdc_softc)/sizeof(gdc_softc[0])) - return 0; - sc = gdc_softc[dev->id_unit] - = malloc(sizeof(*sc), M_DEVBUF, M_NOWAIT); - if (sc == NULL) - return 0; - - error = gdc_probe_unit(dev->id_unit, sc, dev->id_flags); - if (error) { - gdc_softc[dev->id_unit] = NULL; - free(sc, M_DEVBUF); - return 0; - } - - dev->id_iobase = sc->adp->va_io_base; - dev->id_maddr = (caddr_t)BIOS_PADDRTOVADDR(sc->adp->va_mem_base); - dev->id_msize = sc->adp->va_mem_size; - return sc->adp->va_io_size; + device_set_desc(dev, "Generic GDC"); + sc = device_get_softc(dev); + return gdc_probe_unit(device_get_unit(dev), sc, isa_get_flags(dev)); } static int -gdc_attach(struct isa_device *dev) +gdc_attach(device_t dev) { gdc_softc_t *sc; - if (dev->id_unit >= sizeof(gdc_softc)/sizeof(gdc_softc[0])) - return 0; - sc = gdc_softc[dev->id_unit]; - if (sc == NULL) - return 0; - - return ((gdc_attach_unit(dev->id_unit, sc, dev->id_flags)) ? 0 : 1); + sc = device_get_softc(dev); + return gdc_attach_unit(device_get_unit(dev), sc, isa_get_flags(dev)); } static int |