Change interface to th `fb' pseudo device to not need the major device
number (a la sun3). Put in new glue for rcons.
This commit is contained in:
parent
b89096d14f
commit
c92d076f5b
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: bwtwo.c,v 1.10 1995/08/29 22:20:01 pk Exp $ */
|
||||
/* $NetBSD: bwtwo.c,v 1.11 1995/09/17 20:43:39 pk Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1992, 1993
|
||||
@ -80,8 +80,14 @@ struct bwtwo_softc {
|
||||
};
|
||||
|
||||
/* autoconfiguration driver */
|
||||
static void bwtwoattach(struct device *, struct device *, void *);
|
||||
static int bwtwomatch(struct device *, void *, void *);
|
||||
static void bwtwoattach __P((struct device *, struct device *, void *));
|
||||
static int bwtwomatch __P((struct device *, void *, void *));
|
||||
int bwtwoopen __P((dev_t, int, int, struct proc *));
|
||||
int bwtwoclose __P((dev_t, int, int, struct proc *));
|
||||
int bwtwoioctl __P((dev_t, u_long, caddr_t, int, struct proc *));
|
||||
int bwtwommap __P((dev_t, int, int));
|
||||
static void bwtwounblank __P((struct device *));
|
||||
|
||||
struct cfdriver bwtwocd =
|
||||
{ NULL, "bwtwo", bwtwomatch, bwtwoattach,
|
||||
DV_DULL, sizeof(struct bwtwo_softc) };
|
||||
@ -89,8 +95,9 @@ struct cfdriver bwtwocd =
|
||||
/* XXX we do not handle frame buffer interrupts (do not know how) */
|
||||
|
||||
/* frame buffer generic driver */
|
||||
static void bwtwounblank(struct device *);
|
||||
static struct fbdriver bwtwofbdriver = { bwtwounblank };
|
||||
static struct fbdriver bwtwofbdriver = {
|
||||
bwtwounblank, bwtwoopen, bwtwoclose, bwtwoioctl, bwtwommap
|
||||
};
|
||||
|
||||
extern int fbnode;
|
||||
extern struct tty *fbconstty;
|
||||
@ -99,8 +106,6 @@ extern int nullop();
|
||||
static int bwtwo_cnputc();
|
||||
static struct bwtwo_softc *bwcons;
|
||||
|
||||
#define BWTWO_MAJOR 27 /* XXX */
|
||||
|
||||
/*
|
||||
* Match a bwtwo.
|
||||
*/
|
||||
@ -143,8 +148,6 @@ bwtwoattach(parent, self, args)
|
||||
int sbus = 1;
|
||||
char *nam;
|
||||
|
||||
sc->sc_fb.fb_major = BWTWO_MAJOR; /* XXX to be removed */
|
||||
|
||||
sc->sc_fb.fb_driver = &bwtwofbdriver;
|
||||
sc->sc_fb.fb_device = &sc->sc_dev;
|
||||
/*
|
||||
@ -263,7 +266,7 @@ bwtwoattach(parent, self, args)
|
||||
#ifdef RCONSOLE
|
||||
/* XXX: doesn't work (??) on Sun 4 yet. */
|
||||
if (cputyp != CPU_SUN4)
|
||||
rcons_init(&sc->sc_fb);
|
||||
fbrcons_init(&sc->sc_fb);
|
||||
#endif
|
||||
} else
|
||||
printf("\n");
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: cgsix.c,v 1.14 1995/08/29 22:26:37 pk Exp $ */
|
||||
/* $NetBSD: cgsix.c,v 1.15 1995/09/17 20:43:43 pk Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1993
|
||||
@ -110,13 +110,20 @@ struct cgsix_softc {
|
||||
/* autoconfiguration driver */
|
||||
static void cgsixattach __P((struct device *, struct device *, void *));
|
||||
static int cgsixmatch __P((struct device *, void *, void *));
|
||||
int cgsixopen __P((dev_t, int, int, struct proc *));
|
||||
int cgsixclose __P((dev_t, int, int, struct proc *));
|
||||
int cgsixioctl __P((dev_t, u_long, caddr_t, int, struct proc *));
|
||||
int cgsixmmap __P((dev_t, int, int));
|
||||
static void cg6_unblank __P((struct device *));
|
||||
|
||||
struct cfdriver cgsixcd =
|
||||
{ NULL, "cgsix", cgsixmatch, cgsixattach,
|
||||
DV_DULL, sizeof(struct cgsix_softc) };
|
||||
|
||||
/* frame buffer generic driver */
|
||||
static void cg6_unblank __P((struct device *));
|
||||
static struct fbdriver cg6_fbdriver = { cg6_unblank };
|
||||
static struct fbdriver cg6_fbdriver = {
|
||||
cg6_unblank, cgsixopen, cgsixclose, cgsixioctl, cgsixmmap
|
||||
};
|
||||
|
||||
/*
|
||||
* Unlike the bw2 and cg3 drivers, we do not need to provide an rconsole
|
||||
@ -125,8 +132,6 @@ static struct fbdriver cg6_fbdriver = { cg6_unblank };
|
||||
|
||||
extern int fbnode;
|
||||
|
||||
#define CGSIX_MAJOR 67 /* XXX */
|
||||
|
||||
static void cg6_reset __P((struct cgsix_softc *));
|
||||
static void cg6_loadcmap __P((struct cgsix_softc *, int, int));
|
||||
static void cg6_loadomap __P((struct cgsix_softc *));
|
||||
@ -174,9 +179,7 @@ cgsixattach(parent, self, args)
|
||||
register volatile struct cg6_layout *p;
|
||||
int sbus = 1;
|
||||
char *nam;
|
||||
extern struct tty *fbconstty;
|
||||
|
||||
sc->sc_fb.fb_major = CGSIX_MAJOR; /* XXX to be removed */
|
||||
extern struct tty *fbconstty;
|
||||
|
||||
sc->sc_fb.fb_driver = &cg6_fbdriver;
|
||||
sc->sc_fb.fb_device = &sc->sc_dev;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: cgthree.c,v 1.13 1995/04/10 07:04:22 mycroft Exp $ */
|
||||
/* $NetBSD: cgthree.c,v 1.14 1995/09/17 20:43:49 pk Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1992, 1993
|
||||
@ -86,14 +86,21 @@ struct cgthree_softc {
|
||||
/* autoconfiguration driver */
|
||||
static void cgthreeattach(struct device *, struct device *, void *);
|
||||
static int cgthreematch(struct device *, void *, void *);
|
||||
int cgthreeopen __P((dev_t, int, int, struct proc *));
|
||||
int cgthreeclose __P((dev_t, int, int, struct proc *));
|
||||
int cgthreeioctl __P((dev_t, u_long, caddr_t, int, struct proc *));
|
||||
int cgthreemmap __P((dev_t, int, int));
|
||||
static void cgthreeunblank(struct device *);
|
||||
|
||||
struct cfdriver cgthreecd = {
|
||||
NULL, "cgthree", cgthreematch, cgthreeattach,
|
||||
DV_DULL, sizeof(struct cgthree_softc)
|
||||
};
|
||||
|
||||
/* frame buffer generic driver */
|
||||
static void cgthreeunblank(struct device *);
|
||||
static struct fbdriver cgthreefbdriver = { cgthreeunblank };
|
||||
static struct fbdriver cgthreefbdriver = {
|
||||
cgthreeunblank, cgthreeopen, cgthreeclose, cgthreeioctl, cgthreemmap
|
||||
};
|
||||
|
||||
extern int fbnode;
|
||||
extern struct tty *fbconstty;
|
||||
@ -103,8 +110,6 @@ static int cgthree_cnputc();
|
||||
|
||||
static void cgthreeloadcmap __P((struct cgthree_softc *, int, int));
|
||||
|
||||
#define CGTHREE_MAJOR 55 /* XXX */
|
||||
|
||||
/*
|
||||
* Match a cgthree.
|
||||
*/
|
||||
@ -142,8 +147,6 @@ cgthreeattach(parent, self, args)
|
||||
int sbus = 1;
|
||||
char *nam;
|
||||
|
||||
sc->sc_fb.fb_major = CGTHREE_MAJOR; /* XXX to be removed */
|
||||
|
||||
sc->sc_fb.fb_driver = &cgthreefbdriver;
|
||||
sc->sc_fb.fb_device = &sc->sc_dev;
|
||||
/*
|
||||
@ -207,7 +210,7 @@ cgthreeattach(parent, self, args)
|
||||
if (isconsole) {
|
||||
printf(" (console)\n");
|
||||
#ifdef RCONSOLE
|
||||
rcons_init(&sc->sc_fb);
|
||||
fbrcons_init(&sc->sc_fb);
|
||||
#endif
|
||||
} else
|
||||
printf("\n");
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: fb.c,v 1.6 1995/04/10 07:04:18 mycroft Exp $ */
|
||||
/* $NetBSD: fb.c,v 1.7 1995/09/17 20:43:45 pk Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1992, 1993
|
||||
@ -85,7 +85,7 @@ fbopen(dev, flags, mode, p)
|
||||
|
||||
if (devfb == NULL)
|
||||
return (ENXIO);
|
||||
return (cdevsw[devfb->fb_major].d_open(dev, flags, mode, p));
|
||||
return (devfb->fb_driver->fbd_open)(dev, flags, mode, p);
|
||||
}
|
||||
|
||||
int
|
||||
@ -95,7 +95,7 @@ fbclose(dev, flags, mode, p)
|
||||
struct proc *p;
|
||||
{
|
||||
|
||||
return (cdevsw[devfb->fb_major].d_close(dev, flags, mode, p));
|
||||
return (devfb->fb_driver->fbd_close)(dev, flags, mode, p);
|
||||
}
|
||||
|
||||
int
|
||||
@ -107,7 +107,7 @@ fbioctl(dev, cmd, data, flags, p)
|
||||
struct proc *p;
|
||||
{
|
||||
|
||||
return (cdevsw[devfb->fb_major].d_ioctl(dev, cmd, data, flags, p));
|
||||
return (devfb->fb_driver->fbd_ioctl)(dev, cmd, data, flags, p);
|
||||
}
|
||||
|
||||
int
|
||||
@ -115,9 +115,67 @@ fbmmap(dev, off, prot)
|
||||
dev_t dev;
|
||||
int off, prot;
|
||||
{
|
||||
int (*map)() = cdevsw[devfb->fb_major].d_mmap;
|
||||
int (*map)__P((dev_t, int, int)) = devfb->fb_driver->fbd_mmap;
|
||||
|
||||
if (map == NULL)
|
||||
return (-1);
|
||||
return (map(dev, off, prot));
|
||||
}
|
||||
|
||||
#ifdef RCONSOLE
|
||||
#include <machine/autoconf.h>
|
||||
#include <machine/kbd.h>
|
||||
|
||||
extern int (*v_putc) __P((int));
|
||||
|
||||
static int
|
||||
a2int(cp, deflt)
|
||||
register char *cp;
|
||||
register int deflt;
|
||||
{
|
||||
register int i = 0;
|
||||
|
||||
if (*cp == '\0')
|
||||
return (deflt);
|
||||
while (*cp != '\0')
|
||||
i = i * 10 + *cp++ - '0';
|
||||
return (i);
|
||||
}
|
||||
|
||||
static void
|
||||
fb_bell(on)
|
||||
int on;
|
||||
{
|
||||
(void)kbd_docmd(on?KBD_CMD_BELL:KBD_CMD_NOBELL, 0);
|
||||
}
|
||||
|
||||
void
|
||||
fbrcons_init(fb)
|
||||
struct fbdevice *fb;
|
||||
{
|
||||
|
||||
/*
|
||||
* Common glue for rconsole initialization
|
||||
* XXX - mostly duplicates values with fbdevice.
|
||||
*/
|
||||
fb->fb_rcons.rc_linebytes = fb->fb_linebytes;
|
||||
fb->fb_rcons.rc_pixels = fb->fb_pixels;
|
||||
fb->fb_rcons.rc_width = fb->fb_type.fb_width;
|
||||
fb->fb_rcons.rc_height = fb->fb_type.fb_height;
|
||||
fb->fb_rcons.rc_depth = fb->fb_type.fb_depth;
|
||||
|
||||
fb->fb_rcons.rc_maxcol =
|
||||
a2int(getpropstring(optionsnode, "screen-#columns"), 80);
|
||||
fb->fb_rcons.rc_maxrow =
|
||||
a2int(getpropstring(optionsnode, "screen-#rows"), 34);
|
||||
|
||||
/* Determine addresses of prom emulator row and column */
|
||||
if (romgetcursoraddr(&fb->fb_rcons.rc_row, &fb->fb_rcons.rc_col))
|
||||
fb->fb_rcons.rc_row = fb->fb_rcons.rc_col = NULL;
|
||||
|
||||
fb->fb_rcons.rc_bell = fb_bell;
|
||||
rcons_init(&fb->fb_rcons);
|
||||
/* Hook up virtual console */
|
||||
v_putc = (int (*) __P((int)))rcons_cnputc;
|
||||
}
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user