- Massive change of console initialization. Have each model its own
consinit(). - Fix fbconnect() and relatives; 'struct fbinfo' is initialized only once, making sure no extraneous console resolution message is emitted.
This commit is contained in:
parent
8d0ed726af
commit
3aaeaf7331
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: bt478var.h,v 1.6 2000/01/09 03:55:29 simonb Exp $ */
|
||||
/* $NetBSD: bt478var.h,v 1.7 2000/02/03 04:09:12 nisimura Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 1996 The Board of Trustees of The Leland Stanford
|
||||
|
@ -26,4 +26,5 @@ int bt478LoadColorMap __P((struct fbinfo *fi, const u_char *bits,
|
|||
int index, int count));
|
||||
int bt478GetColorMap __P((struct fbinfo *fi, u_char *bits,
|
||||
int index, int count));
|
||||
void bt478CursorColor __P((struct fbinfo *fi, u_int *color));
|
||||
void bt478CursorColor __P((struct fbinfo *fi, unsigned int color[]));
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: cfb.c,v 1.37 2000/01/10 03:24:31 simonb Exp $ */
|
||||
/* $NetBSD: cfb.c,v 1.38 2000/02/03 04:09:13 nisimura Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1992, 1993
|
||||
|
@ -80,10 +80,6 @@
|
|||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#include "fb.h"
|
||||
#include "cfb.h"
|
||||
|
||||
#if NCFB > 0
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/fcntl.h>
|
||||
|
@ -103,6 +99,7 @@
|
|||
*/
|
||||
static struct fbuaccess cfbu;
|
||||
static struct pmax_fbtty cfbfb;
|
||||
static struct fbinfo *cfb_fi;
|
||||
|
||||
/*
|
||||
* Method table for standard framebuffer operations on a CFB.
|
||||
|
@ -119,7 +116,7 @@ struct fbdriver cfb_driver = {
|
|||
bt459CursorColor
|
||||
};
|
||||
|
||||
#define CFB_OFFSET_VRAM 0x0 /* from module's base */
|
||||
#define CFB_OFFSET_VRAM 0x0 /* from module's base */
|
||||
#define CFB_OFFSET_BT459 0x200000 /* Bt459 registers */
|
||||
#define CFB_OFFSET_IREQ 0x300000 /* Interrupt req. control */
|
||||
#define CFB_OFFSET_ROM 0x380000 /* Diagnostic ROM */
|
||||
|
@ -134,12 +131,25 @@ struct fbdriver cfb_driver = {
|
|||
|
||||
static int cfbmatch __P((struct device *, struct cfdata *, void *));
|
||||
static void cfbattach __P((struct device *, struct device *, void *));
|
||||
static int cfbinit __P((struct fbinfo *, caddr_t, int, int));
|
||||
static int cfb_intr __P((void *sc));
|
||||
|
||||
struct cfattach cfb_ca = {
|
||||
sizeof(struct fbsoftc), cfbmatch, cfbattach
|
||||
};
|
||||
|
||||
int
|
||||
cfb_cnattach(addr)
|
||||
paddr_t addr;
|
||||
{
|
||||
struct fbinfo *fi;
|
||||
|
||||
fbcnalloc(&fi);
|
||||
cfbinit(fi, (caddr_t)addr, 0, 1);
|
||||
cfb_fi = fi;
|
||||
return (1);
|
||||
}
|
||||
|
||||
static int
|
||||
cfbmatch(parent, match, aux)
|
||||
struct device *parent;
|
||||
|
@ -148,11 +158,6 @@ cfbmatch(parent, match, aux)
|
|||
{
|
||||
struct tc_attach_args *ta = aux;
|
||||
|
||||
#ifdef FBDRIVER_DOES_ATTACH
|
||||
/* leave configuration to the fb driver */
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
/* make sure that we're looking for this type of device. */
|
||||
if (!TC_BUS_MATCHNAME(ta, "PMAG-BA "))
|
||||
return (0);
|
||||
|
@ -176,12 +181,20 @@ cfbattach(parent, self, aux)
|
|||
int unit = self->dv_unit;
|
||||
struct fbinfo *fi;
|
||||
|
||||
/* Allocate a struct fbinfo and point the softc at it */
|
||||
if (fballoc(base, &fi) == 0 && !cfbinit(fi, base, unit, 0))
|
||||
return;
|
||||
if (cfb_fi)
|
||||
fi = cfb_fi;
|
||||
else {
|
||||
/* Allocate a struct fbinfo and point the softc at it */
|
||||
if (fballoc(&fi) < 0 || cfbinit(fi, base, unit, 0) < 0)
|
||||
return; /* failed */
|
||||
}
|
||||
((struct fbsoftc *)self)->sc_fi = fi;
|
||||
|
||||
if ((((struct fbsoftc *)self)->sc_fi = fi) == NULL)
|
||||
return;
|
||||
printf(": %dx%dx%d%s",
|
||||
fi->fi_type.fb_width,
|
||||
fi->fi_type.fb_height,
|
||||
fi->fi_type.fb_depth,
|
||||
(cfb_fi) ? " console" : "");
|
||||
|
||||
/*
|
||||
* 3MIN does not mask un-established TC option interrupts,
|
||||
|
@ -190,7 +203,6 @@ cfbattach(parent, self, aux)
|
|||
* interrupt handler, which interrupts during vertical-retrace.
|
||||
*/
|
||||
tc_intr_establish(parent, ta->ta_cookie, TC_IPL_NONE, cfb_intr, fi);
|
||||
fbconnect("PMAG-BA", fi, 0);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
|
@ -200,7 +212,7 @@ cfbattach(parent, self, aux)
|
|||
* CFB initialization. This is divorced from cfbattch() so that
|
||||
* a console framebuffer can be initialized early during boot.
|
||||
*/
|
||||
int
|
||||
static int
|
||||
cfbinit(fi, cfbaddr, unit, silent)
|
||||
struct fbinfo *fi;
|
||||
caddr_t cfbaddr;
|
||||
|
@ -258,14 +270,10 @@ cfbinit(fi, cfbaddr, unit, silent)
|
|||
/* Initialize old-style pmax glass-tty screen info. */
|
||||
fi->fi_glasstty = &cfbfb;
|
||||
|
||||
/* Initialize the color map, the screen, and the mouse. */
|
||||
if (tb_kbdmouseconfig(fi)) {
|
||||
printf(" (mouse/keyboard config failed)");
|
||||
return (0);
|
||||
}
|
||||
if (tb_kbdmouseconfig(fi))
|
||||
return (-1);
|
||||
|
||||
/* Connect to the raster-console pseudo-driver */
|
||||
fbconnect("PMAG-BA", fi, silent);
|
||||
fbconnect(fi);
|
||||
return (1);
|
||||
}
|
||||
|
||||
|
@ -294,5 +302,3 @@ cfb_intr(sc)
|
|||
*(int*) (slot_addr + CFB_OFFSET_IREQ) = 0;
|
||||
return (0);
|
||||
}
|
||||
|
||||
#endif /* NCFB */
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: dc.c,v 1.59 2000/01/10 03:24:31 simonb Exp $ */
|
||||
/* $NetBSD: dc.c,v 1.60 2000/02/03 04:09:19 nisimura Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1992, 1993
|
||||
|
@ -39,7 +39,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
|
||||
__KERNEL_RCSID(0, "$NetBSD: dc.c,v 1.59 2000/01/10 03:24:31 simonb Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: dc.c,v 1.60 2000/02/03 04:09:19 nisimura Exp $");
|
||||
|
||||
/*
|
||||
* devDC7085.c --
|
||||
|
@ -192,45 +192,67 @@ static struct consdev dccons = {
|
|||
NULL, NULL, dcGetc, dcPutc, dcPollc, NODEV, CN_REMOTE
|
||||
};
|
||||
|
||||
/*
|
||||
* Special-case code to attach a console.
|
||||
* We were using PROM callbacks for console I/O,
|
||||
* and we just reset the chip under the console.
|
||||
* wire up this driver as console ASAP.
|
||||
*
|
||||
* Must be called at spltty() or higher.
|
||||
*/
|
||||
void
|
||||
dc_consinit(dev, dcaddr)
|
||||
dev_t dev;
|
||||
void *dcaddr;
|
||||
dc_cnattach(addr, line)
|
||||
paddr_t addr;
|
||||
int line;
|
||||
{
|
||||
void *v;
|
||||
dev_t dev;
|
||||
struct dc_softc *sc;
|
||||
dcregs *addr = (dcregs *)dcaddr;
|
||||
|
||||
/* save address in case we're cold */
|
||||
if (cold && dc_cons_addr == 0) {
|
||||
/* called while very cold to initalize console output */
|
||||
dc_cons_addr = addr;
|
||||
sc = &coldcons_softc;
|
||||
sc->dc_pdma[0].p_addr = (void*)addr;
|
||||
sc->dc_pdma[1].p_addr = (void*)addr;
|
||||
sc->dc_pdma[2].p_addr = (void*)addr;
|
||||
sc->dc_pdma[3].p_addr = (void*)addr;
|
||||
} else {
|
||||
/* being called from dcattach() to reset console */
|
||||
sc = dc_cd.cd_devs[DCUNIT(dev)];
|
||||
}
|
||||
if (line == 4)
|
||||
line = DCCOMM_PORT;
|
||||
else if (line == 0)
|
||||
line = 0;
|
||||
else
|
||||
line = DCPRINTER_PORT;
|
||||
|
||||
/* reset chip */
|
||||
dc_reset(addr);
|
||||
dev = makedev(DCDEV, line);
|
||||
v = (void *)MIPS_PHYS_TO_KSEG1(addr);
|
||||
sc = &coldcons_softc;
|
||||
sc->dc_pdma[0].p_addr = v;
|
||||
sc->dc_pdma[1].p_addr = v;
|
||||
sc->dc_pdma[2].p_addr = v;
|
||||
sc->dc_pdma[3].p_addr = v;
|
||||
dc_cons_addr = v;
|
||||
|
||||
dccons.cn_dev = dev;
|
||||
*cn_tab = dccons;
|
||||
sc->dcsoftCAR |= 1 << DCLINE(cn_tab->cn_dev);
|
||||
dc_tty_init(sc, cn_tab->cn_dev);
|
||||
dc_reset(v);
|
||||
dc_tty_init(sc, dev);
|
||||
|
||||
cn_tab = &dccons;
|
||||
cn_tab->cn_pri = CN_REMOTE;
|
||||
cn_tab->cn_dev = dev;
|
||||
}
|
||||
|
||||
#if NRASTERCONSOLE > 0
|
||||
void
|
||||
dckbd_cnattach(addr)
|
||||
paddr_t addr;
|
||||
{
|
||||
void *v;
|
||||
dev_t dev;
|
||||
struct dc_softc *sc;
|
||||
|
||||
dev = makedev(DCDEV, DCKBD_PORT);
|
||||
v = (void *)MIPS_PHYS_TO_KSEG1(addr);
|
||||
sc = &coldcons_softc;
|
||||
sc->dc_pdma[0].p_addr = v;
|
||||
sc->dc_pdma[1].p_addr = v;
|
||||
sc->dc_pdma[2].p_addr = v;
|
||||
sc->dc_pdma[3].p_addr = v;
|
||||
dc_cons_addr = v;
|
||||
|
||||
dc_reset(v);
|
||||
dc_kbd_init(sc, dev);
|
||||
lk_divert(dcGetc, dev);
|
||||
|
||||
cn_tab = &dccons;
|
||||
cn_tab->cn_pri = CN_NORMAL;
|
||||
cn_tab->cn_getc = lk_getc;
|
||||
rcons_indev(cn_tab); /* cn_dev & cn_putc */
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Attach DC7085 (dz-11) device.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: dcvar.h,v 1.8 2000/01/09 03:55:34 simonb Exp $ */
|
||||
/* $NetBSD: dcvar.h,v 1.9 2000/02/03 04:09:13 nisimura Exp $ */
|
||||
|
||||
/*
|
||||
* External declarations from DECstation dc serial driver.
|
||||
|
@ -39,8 +39,6 @@ int dcintr __P((void * xxxunit));
|
|||
* Following declaratios for console code.
|
||||
* XXX should be redesigned to expose less driver internals.
|
||||
*/
|
||||
void dc_consinit __P((dev_t dev, void *dcaddr));
|
||||
int dc_ds_consinit __P((dev_t dev));
|
||||
int dcGetc __P((dev_t dev));
|
||||
void dcPutc __P((dev_t dev, int c));
|
||||
|
||||
|
@ -49,5 +47,8 @@ extern void (*dcDivertXInput) __P((int));
|
|||
extern void (*dcMouseEvent) __P((void *));
|
||||
extern void (*dcMouseButtons) __P((void *));
|
||||
|
||||
void dc_cnattach __P((paddr_t, int));
|
||||
void dckbd_cnattach __P((paddr_t));
|
||||
|
||||
#endif /* _DCVAR_H */
|
||||
#endif /* _KERNEL */
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: dtop.c,v 1.45 2000/01/10 03:24:32 simonb Exp $ */
|
||||
/* $NetBSD: dtop.c,v 1.46 2000/02/03 04:09:20 nisimura Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1992, 1993
|
||||
|
@ -94,7 +94,7 @@ SOFTWARE.
|
|||
********************************************************/
|
||||
|
||||
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
|
||||
__KERNEL_RCSID(0, "$NetBSD: dtop.c,v 1.45 2000/01/10 03:24:32 simonb Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: dtop.c,v 1.46 2000/02/03 04:09:20 nisimura Exp $");
|
||||
|
||||
#include "rasterconsole.h"
|
||||
|
||||
|
@ -202,6 +202,20 @@ static u_char divend[NUMDIVS] = {0xff, 0xa5, 0xbc, 0xbe, 0xb2, 0xaf, 0xa8,
|
|||
*/
|
||||
static u_long keymodes[8] = {0, 0, 0, 0, 0, 0x0003e800, 0, 0};
|
||||
|
||||
struct consdev dtopcons = {
|
||||
NULL, NULL, (void *)dtopKBDGetc, NULL, NULL, NODEV, 0
|
||||
};
|
||||
|
||||
void dtikbd_cnattach __P((void)); /* XXX */
|
||||
|
||||
void
|
||||
dtikbd_cnattach()
|
||||
{
|
||||
cn_tab = &dtopcons;
|
||||
cn_tab->cn_pri = CN_NORMAL;
|
||||
rcons_indev(cn_tab); /* cn_dev & cn_putc */
|
||||
}
|
||||
|
||||
/*
|
||||
* Autoconfiguration data for config.new.
|
||||
* Use the statically-allocated softc until old autoconfig code and
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: mfb.c,v 1.44 2000/01/10 03:24:32 simonb Exp $ */
|
||||
/* $NetBSD: mfb.c,v 1.45 2000/02/03 04:09:14 nisimura Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1992, 1993
|
||||
|
@ -81,11 +81,8 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
|
||||
__KERNEL_RCSID(0, "$NetBSD: mfb.c,v 1.44 2000/01/10 03:24:32 simonb Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: mfb.c,v 1.45 2000/02/03 04:09:14 nisimura Exp $");
|
||||
|
||||
#include "fb.h"
|
||||
#include "mfb.h"
|
||||
#if NMFB > 0
|
||||
#include <sys/param.h>
|
||||
#include <sys/device.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -107,6 +104,7 @@ __KERNEL_RCSID(0, "$NetBSD: mfb.c,v 1.44 2000/01/10 03:24:32 simonb Exp $");
|
|||
*/
|
||||
static struct fbuaccess mfbu;
|
||||
static struct pmax_fbtty mfbfb;
|
||||
static struct fbinfo *mfb_fi;
|
||||
|
||||
static void mfbPosCursor __P((struct fbinfo *fi, int x, int y));
|
||||
|
||||
|
@ -168,7 +166,7 @@ struct fbdriver mfb_driver = {
|
|||
/*
|
||||
* Register offsets
|
||||
*/
|
||||
#define MFB_OFFSET_VRAM 0x200000 /* from module's base */
|
||||
#define MFB_OFFSET_VRAM 0x200000 /* from module's base */
|
||||
#define MFB_OFFSET_BT431 0x180000 /* Bt431 registers */
|
||||
#define MFB_OFFSET_BT455 0x100000 /* Bt455 registers */
|
||||
#define MFB_OFFSET_IREQ 0x080000 /* Interrupt req. control */
|
||||
|
@ -181,12 +179,27 @@ struct fbdriver mfb_driver = {
|
|||
*/
|
||||
static int mfbmatch __P((struct device *, struct cfdata *, void *));
|
||||
static void mfbattach __P((struct device *, struct device *, void *));
|
||||
static int mfbinit __P((struct fbinfo *, caddr_t, int, int));
|
||||
static int mfb_intr __P((void *sc));
|
||||
|
||||
struct cfattach mfb_ca = {
|
||||
sizeof(struct fbinfo), mfbmatch, mfbattach
|
||||
};
|
||||
|
||||
int
|
||||
mfb_cnattach(addr)
|
||||
paddr_t addr;
|
||||
{
|
||||
struct fbinfo *fi;
|
||||
caddr_t base;
|
||||
|
||||
base = (caddr_t)MIPS_PHYS_TO_KSEG1(addr);
|
||||
fbcnalloc(&fi);
|
||||
if (mfbinit(fi, base, 0, 1) < 0)
|
||||
return (0);
|
||||
mfb_fi = fi;
|
||||
return (1);
|
||||
}
|
||||
|
||||
static int
|
||||
mfbmatch(parent, match, aux)
|
||||
|
@ -196,11 +209,6 @@ mfbmatch(parent, match, aux)
|
|||
{
|
||||
struct tc_attach_args *ta = aux;
|
||||
|
||||
#ifdef FBDRIVER_DOES_ATTACH
|
||||
/* leave configuration to the fb driver */
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
/* make sure that we're looking for this type of device. */
|
||||
if (!TC_BUS_MATCHNAME(ta, "PMAG-AA "))
|
||||
return (0);
|
||||
|
@ -219,12 +227,19 @@ mfbattach(parent, self, aux)
|
|||
int unit = self->dv_unit;
|
||||
struct fbinfo *fi;
|
||||
|
||||
/* Allocate a struct fbinfo and point the softc at it */
|
||||
if (fballoc(mfbaddr, &fi) == 0 && !mfbinit(fi, mfbaddr, unit, 0))
|
||||
return;
|
||||
if (mfb_fi)
|
||||
fi = mfb_fi;
|
||||
else {
|
||||
if (fballoc(&fi) < 0 || mfbinit(fi, mfbaddr, unit, 0) < 0)
|
||||
return /* failed */;
|
||||
}
|
||||
((struct fbsoftc *)self)->sc_fi = fi;
|
||||
|
||||
if ((((struct fbsoftc *)self)->sc_fi = fi) == NULL)
|
||||
return;
|
||||
printf(": %dx%dx%d%s",
|
||||
fi->fi_type.fb_width,
|
||||
fi->fi_type.fb_height,
|
||||
fi->fi_type.fb_depth,
|
||||
(mfb_fi) ? " console" : "");
|
||||
|
||||
/*
|
||||
* 3MIN does not mask un-established TC option interrupts,
|
||||
|
@ -233,11 +248,9 @@ mfbattach(parent, self, aux)
|
|||
* interrupt handler, which interrupts during vertical-retrace.
|
||||
*/
|
||||
tc_intr_establish(parent, ta->ta_cookie, TC_IPL_NONE, mfb_intr, fi);
|
||||
fbconnect("PMAG-AA", fi, 0);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Initialization
|
||||
*/
|
||||
|
@ -308,7 +321,7 @@ mfbinit(fi, mfbaddr, unit, silent)
|
|||
* Initialize the color map, the screen, and the mouse.
|
||||
*/
|
||||
if (tb_kbdmouseconfig(fi))
|
||||
return (0);
|
||||
return (-1);
|
||||
|
||||
/*
|
||||
* black-on-white during first initialization of console,
|
||||
|
@ -320,8 +333,8 @@ mfbinit(fi, mfbaddr, unit, silent)
|
|||
/*
|
||||
* Connect to the raster-console pseudo-driver.
|
||||
*/
|
||||
fbconnect("PMAG-AA", fi, silent);
|
||||
return (1);
|
||||
fbconnect(fi);
|
||||
return (0);
|
||||
}
|
||||
|
||||
static u_char cursor_RGB[6]; /* cursor color 2 & 3 */
|
||||
|
@ -790,5 +803,3 @@ mfb_intr(sc)
|
|||
|
||||
return (0);
|
||||
}
|
||||
|
||||
#endif /* NMFB */
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* $NetBSD: mfbvar.h,v 1.4 2000/01/08 01:02:35 simonb Exp $ */
|
||||
/* $NetBSD: mfbvar.h,v 1.5 2000/02/03 04:09:14 nisimura Exp $ */
|
||||
|
||||
/*
|
||||
* Initialize a Turbochannel MFB 1280x1024x1 2-d framebuffer,
|
||||
* so it can be used as a bitmapped glass-tty console device.
|
||||
*/
|
||||
int mfbinit __P((struct fbinfo *fi, caddr_t base, int unit, int silent));
|
||||
int mfb_cnattach __P((paddr_t));
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: pm.c,v 1.32 2000/01/10 03:24:33 simonb Exp $ */
|
||||
/* $NetBSD: pm.c,v 1.33 2000/02/03 04:09:15 nisimura Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1992, 1993
|
||||
|
@ -56,54 +56,46 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
|
||||
__KERNEL_RCSID(0, "$NetBSD: pm.c,v 1.32 2000/01/10 03:24:33 simonb Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: pm.c,v 1.33 2000/02/03 04:09:15 nisimura Exp $");
|
||||
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/device.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/file.h>
|
||||
|
||||
#include <pmax/pmax/kn01.h>
|
||||
#include <pmax/ibus/ibusvar.h>
|
||||
#include <machine/autoconf.h>
|
||||
#include <machine/fbio.h>
|
||||
#include <machine/fbvar.h>
|
||||
#include <machine/locore.h> /* wbflush() */
|
||||
#include <machine/pmioctl.h>
|
||||
|
||||
#include <pmax/dev/bt478var.h>
|
||||
#include <pmax/dev/fbreg.h>
|
||||
#include <pmax/dev/pmvar.h>
|
||||
#include <pmax/dev/pmreg.h>
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* These need to be mapped into user space.
|
||||
*/
|
||||
struct fbuaccess pmu;
|
||||
static u_short curReg; /* copy of PCCRegs.cmdr since it's read only */
|
||||
|
||||
/*
|
||||
* rcons methods and globals.
|
||||
*/
|
||||
struct pmax_fbtty pmfb;
|
||||
static struct fbuaccess pmu;
|
||||
static struct pmax_fbtty pmfb;
|
||||
static struct fbinfo *pm_fi;
|
||||
|
||||
/*
|
||||
* Forward references.
|
||||
*/
|
||||
static int pm_video_on __P ((struct fbinfo *));
|
||||
static int pm_video_off __P ((struct fbinfo *));
|
||||
static void pmInitColorMap __P((struct fbinfo *fi));
|
||||
static void pmLoadCursor __P((struct fbinfo *fi, u_short *ptr));
|
||||
static void pmPosCursor __P((struct fbinfo *fi, int x, int y));
|
||||
#if 0 /* XXX not used */
|
||||
static void pccCursorOn __P((struct fbinfo *fi));
|
||||
#endif
|
||||
static void pmLoadCursor __P((struct fbinfo *fi, u_short *ptr));
|
||||
static void pccCursorOff __P((struct fbinfo *fi));
|
||||
|
||||
static int pm_video_on __P((struct fbinfo *));
|
||||
static int pm_video_off __P((struct fbinfo *));
|
||||
|
||||
/* new-style raster-cons "driver" methods */
|
||||
|
||||
struct fbdriver pm_driver = {
|
||||
static struct fbdriver pm_driver = {
|
||||
pm_video_on,
|
||||
pm_video_off,
|
||||
pmInitColorMap, /* pcc cursor wrapper for bt478InitColorMap */
|
||||
|
@ -114,69 +106,154 @@ struct fbdriver pm_driver = {
|
|||
bt478CursorColor,
|
||||
};
|
||||
|
||||
static int pmmatch __P((struct device *, struct cfdata *, void *));
|
||||
static void pmattach __P((struct device *, struct device *, void *));
|
||||
static int pminit __P((struct fbinfo *, caddr_t, int));
|
||||
|
||||
struct cfattach pm_ds_ca = {
|
||||
sizeof(struct device), pmmatch, pmattach
|
||||
};
|
||||
|
||||
/*
|
||||
* Machine-independent backend to attach a pm device.
|
||||
* assumes the following fields in struct fbinfo *fi have been set
|
||||
* by the MD front-end:
|
||||
*
|
||||
* fi->fi_pixels framebuffer raster memory
|
||||
* fi->fi_vdac vdac register address
|
||||
* fi->fi_base address of programmable cursor chip registers
|
||||
* fi->fi_type.fb_depth 1 (mono) or 8 (colour)
|
||||
* fi->fi_fbu QVSS-compatible user-mapped fbinfo struct
|
||||
*/
|
||||
int
|
||||
pmattach(fi, unit, cold_console_flag)
|
||||
struct fbinfo *fi;
|
||||
int unit;
|
||||
int cold_console_flag;
|
||||
pm_cnattach()
|
||||
{
|
||||
PCCRegs *pcc = (PCCRegs *)fi->fi_base;
|
||||
struct fbinfo *fi;
|
||||
caddr_t base;
|
||||
|
||||
/* check for no frame buffer */
|
||||
if (badaddr((char *)fi->fi_pixels, 4))
|
||||
#if 0
|
||||
ULTRIX does in this way;
|
||||
check the presense of monochrome bit in CSR.
|
||||
if set, there is a monochrome framebuffer
|
||||
if not set, try two write and read cycles of framebuffer to make
|
||||
sure the presense of video memory.
|
||||
#else
|
||||
base = (caddr_t)MIPS_PHYS_TO_KSEG1(KN01_SYS_PCC);
|
||||
if (badaddr(base, 4))
|
||||
return (0);
|
||||
#endif
|
||||
|
||||
fbcnalloc(&fi);
|
||||
if (pminit(fi, base, 0) < 0)
|
||||
return (0);
|
||||
pm_fi = fi;
|
||||
return (1);
|
||||
}
|
||||
|
||||
static int
|
||||
pmmatch(parent, match, aux)
|
||||
struct device *parent;
|
||||
struct cfdata *match;
|
||||
void *aux;
|
||||
{
|
||||
struct ibus_attach_args *ia = aux;
|
||||
caddr_t pmaddr = (caddr_t)ia->ia_addr;
|
||||
|
||||
/* make sure that we're looking for this type of device. */
|
||||
if (strcmp(ia->ia_name, "pm") != 0)
|
||||
return (0);
|
||||
|
||||
/* Fill in the stuff that differs from monochrome to color. */
|
||||
if (fi->fi_type.fb_depth == 1) {
|
||||
if (badaddr(pmaddr, 4))
|
||||
return (0);
|
||||
|
||||
return (1);
|
||||
}
|
||||
|
||||
static void
|
||||
pmattach(parent, self, aux)
|
||||
struct device *parent;
|
||||
struct device *self;
|
||||
void *aux;
|
||||
{
|
||||
struct ibus_attach_args *ia = aux;
|
||||
caddr_t base = (caddr_t)ia->ia_addr;
|
||||
struct fbinfo *fi;
|
||||
|
||||
if (pm_fi)
|
||||
fi = pm_fi;
|
||||
else {
|
||||
if (fballoc(&fi) < 0 || pminit(fi, base, self->dv_unit) < 0)
|
||||
return; /* failed */
|
||||
}
|
||||
((struct fbsoftc *)self)->sc_fi = fi;
|
||||
|
||||
printf(": %dx%dx%d%s",
|
||||
fi->fi_type.fb_width,
|
||||
fi->fi_type.fb_height,
|
||||
fi->fi_type.fb_depth,
|
||||
(pm_fi) ? " console" : "");
|
||||
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
int
|
||||
pminit(fi, base, unit)
|
||||
struct fbinfo *fi;
|
||||
caddr_t base;
|
||||
int unit;
|
||||
{
|
||||
u_int16_t kn01csr;
|
||||
PCCRegs *pcc;
|
||||
|
||||
kn01csr = *(volatile u_int16_t *)MIPS_PHYS_TO_KSEG1(KN01_SYS_CSR);
|
||||
|
||||
fi->fi_unit = unit;
|
||||
fi->fi_pixels = (caddr_t)MIPS_PHYS_TO_KSEG1(KN01_PHYS_FBUF_START);
|
||||
fi->fi_base = base; /* PCC address */
|
||||
fi->fi_vdac = (caddr_t)MIPS_PHYS_TO_KSEG1(KN01_SYS_VDAC);
|
||||
|
||||
if (kn01csr & KN01_CSR_MONO) {
|
||||
fi->fi_type.fb_boardtype = PMAX_FBTYPE_PM_MONO;
|
||||
fi->fi_type.fb_depth = 1;
|
||||
fi->fi_type.fb_cmsize = 0;
|
||||
fi->fi_type.fb_boardtype = PMAX_FBTYPE_PM_MONO;
|
||||
fi->fi_type.fb_size = 0x40000;
|
||||
fi->fi_linebytes = 256;
|
||||
} else {
|
||||
fi->fi_pixelsize = (1024 / 8) * 864;
|
||||
fi->fi_linebytes = 1024 / 8;
|
||||
}
|
||||
else {
|
||||
fi->fi_type.fb_boardtype = PMAX_FBTYPE_PM_COLOR;
|
||||
fi->fi_type.fb_depth = 8;
|
||||
fi->fi_type.fb_cmsize = 256;
|
||||
fi->fi_type.fb_boardtype = PMAX_FBTYPE_PM_COLOR;
|
||||
fi->fi_type.fb_size = 0x100000;
|
||||
fi->fi_pixelsize = 1024 * 864;
|
||||
fi->fi_linebytes = 1024;
|
||||
}
|
||||
|
||||
/* Fill in main frame buffer info struct. */
|
||||
|
||||
fi->fi_driver = &pm_driver;
|
||||
fi->fi_pixelsize =
|
||||
((fi->fi_type.fb_depth == 1) ? 1024 / 8 : 1024) * 864;
|
||||
fi->fi_blanked = 0;
|
||||
fi->fi_type.fb_width = 1024;
|
||||
fi->fi_type.fb_height = 864;
|
||||
|
||||
fi->fi_size = fi->fi_type.fb_size;
|
||||
fi->fi_driver = &pm_driver;
|
||||
fi->fi_blanked = 0;
|
||||
|
||||
/*
|
||||
* Compatibility glue
|
||||
* Set mmap'able address of qvss-compatible user info structure.
|
||||
*
|
||||
* Must be in Uncached space since the fbuaccess structure is
|
||||
* mapped into the user's address space uncached.
|
||||
*
|
||||
* XXX can go away when MI support for d_mmap entrypoints added.
|
||||
*/
|
||||
fi->fi_fbu = (void *)MIPS_PHYS_TO_KSEG1(MIPS_KSEG0_TO_PHYS(&pmu));
|
||||
|
||||
/* This is glass-tty state but it's in the shared structure. Ick. */
|
||||
fi->fi_fbu->scrInfo.max_row = 56;
|
||||
fi->fi_fbu->scrInfo.max_col = 80;
|
||||
|
||||
/* These are non-zero on the kn01 framebuffer. Why? */
|
||||
fi->fi_fbu->scrInfo.min_cur_x = -15;
|
||||
fi->fi_fbu->scrInfo.min_cur_y = -15;
|
||||
|
||||
init_pmaxfbu(fi);
|
||||
|
||||
/*
|
||||
* Initialize old-style glass-tty screen info.
|
||||
*/
|
||||
fi->fi_glasstty = &pmfb;
|
||||
|
||||
|
||||
/*
|
||||
* Initialize the screen.
|
||||
*/
|
||||
pcc->cmdr = PCC_FOPB | PCC_VBHI;
|
||||
/* it's safe to assume serial driver existence in this case */
|
||||
tb_kbdmouseconfig(fi);
|
||||
|
||||
/* Initialize the cursor register on . */
|
||||
/* Turn off the hardware cursor sprite for rcons text mode. */
|
||||
pcc = (PCCRegs *)fi->fi_base;
|
||||
pcc->cmdr = PCC_FOPB | PCC_VBHI;
|
||||
curReg = 0; /* XXX */
|
||||
pccCursorOff(fi);
|
||||
|
||||
|
@ -185,38 +262,11 @@ pmattach(fi, unit, cold_console_flag)
|
|||
*/
|
||||
bt478init(fi);
|
||||
|
||||
/*
|
||||
* Initialize old-style pmax screen info.
|
||||
*/
|
||||
fi->fi_fbu->scrInfo.max_row = 56;
|
||||
fi->fi_fbu->scrInfo.max_col = 80;
|
||||
fbconnect(fi);
|
||||
|
||||
init_pmaxfbu(fi);
|
||||
|
||||
/* These are non-zero on the kn01 framebuffer. Why? */
|
||||
fi->fi_fbu->scrInfo.min_cur_x = -15;
|
||||
fi->fi_fbu->scrInfo.min_cur_y = -15;
|
||||
|
||||
|
||||
#ifdef notanymore
|
||||
bt478InitColorMap(fi); /* done inside bt478init() */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Connect to the raster-console pseudo-driver.
|
||||
*/
|
||||
fi->fi_glasstty = &pmfb; /*XXX*/
|
||||
fbconnect((fi->fi_type.fb_depth == 1) ? "KN01 mfb" : "KN01 cfb",
|
||||
fi, cold_console_flag);
|
||||
|
||||
|
||||
#ifdef fpinitialized
|
||||
fp->initialized = 1;
|
||||
#endif
|
||||
return (1);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* ----------------------------------------------------------------------------
|
||||
*
|
||||
|
@ -275,7 +325,7 @@ pmLoadCursor(fi, cur)
|
|||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
void
|
||||
static void
|
||||
pmPosCursor(fi, x, y)
|
||||
struct fbinfo *fi;
|
||||
int x, y;
|
||||
|
@ -316,7 +366,8 @@ void pccCursorOn(fi)
|
|||
* overlay planes. video output under the cursor sprite is then
|
||||
* determined by the framebuffer contents.
|
||||
*/
|
||||
void pccCursorOff(fi)
|
||||
static void
|
||||
pccCursorOff(fi)
|
||||
struct fbinfo *fi;
|
||||
{
|
||||
PCCRegs *pcc = (PCCRegs *)fi -> fi_base;
|
||||
|
@ -329,7 +380,8 @@ void pccCursorOff(fi)
|
|||
* Initialize colourmap to default values.
|
||||
* The default cursor hardware state is off.
|
||||
*/
|
||||
void pmInitColorMap(fi)
|
||||
void
|
||||
pmInitColorMap(fi)
|
||||
struct fbinfo *fi;
|
||||
{
|
||||
bt478InitColorMap(fi);
|
||||
|
@ -341,7 +393,7 @@ void pmInitColorMap(fi)
|
|||
* Enable the video display.
|
||||
*/
|
||||
static int
|
||||
pm_video_on (fi)
|
||||
pm_video_on(fi)
|
||||
struct fbinfo *fi;
|
||||
{
|
||||
PCCRegs *pcc = (PCCRegs *)fi -> fi_base;
|
||||
|
@ -362,7 +414,8 @@ pm_video_on (fi)
|
|||
* determined by colourmap entry 12 (0x0c), which we set here to
|
||||
* black.
|
||||
*/
|
||||
static int pm_video_off (fi)
|
||||
static int
|
||||
pm_video_off(fi)
|
||||
struct fbinfo *fi;
|
||||
{
|
||||
PCCRegs *pcc = (PCCRegs *)fi -> fi_base;
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
/* $NetBSD: pmvar.h,v 1.7 2000/01/09 03:55:41 simonb Exp $ */
|
||||
/* $NetBSD: pmvar.h,v 1.8 2000/02/03 04:09:15 nisimura Exp $ */
|
||||
|
||||
/*
|
||||
* Initialize a Decstation 3100/2100 baseboard framebuffer,
|
||||
* Initialize a DECstation 3100/2100 baseboard framebuffer,
|
||||
* so it can be used as a bitmapped glass-tty console device.
|
||||
*/
|
||||
int pminit __P((struct fbinfo *fi, caddr_t base, int unit, int silent));
|
||||
int pmattach __P((struct fbinfo *fi, int unit, int silent));
|
||||
int pm_cnattach __P((void));
|
||||
|
||||
extern struct pmax_fbtty pmfb; /* used in dev/pm_ds.c */
|
||||
extern struct fbuaccess pmu; /* used in dev/pm_ds.c */
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: px.c,v 1.27 2000/01/14 02:00:46 ad Exp $ */
|
||||
/* $NetBSD: px.c,v 1.28 2000/02/03 04:09:16 nisimura Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1999 The NetBSD Foundation, Inc.
|
||||
|
@ -43,7 +43,7 @@
|
|||
#endif
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: px.c,v 1.27 2000/01/14 02:00:46 ad Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: px.c,v 1.28 2000/02/03 04:09:16 nisimura Exp $");
|
||||
|
||||
/*
|
||||
* px.c: driver for the DEC TURBOchannel 2D and 3D accelerated framebuffers
|
||||
|
@ -98,6 +98,7 @@ struct px_softc {
|
|||
|
||||
static int px_match __P((struct device *, struct cfdata *, void *));
|
||||
static void px_attach __P((struct device *, struct device *, void *));
|
||||
static int px_init __P((struct fbinfo *, caddr_t, int, int));
|
||||
static int px_intr __P((void *xxx_sc));
|
||||
|
||||
static int32_t *px_alloc_pbuf __P((struct px_info *));
|
||||
|
@ -259,6 +260,17 @@ struct bt459_regs {
|
|||
|
||||
#define PACK_WORD(p, o) ((p)[(o)] | ((p)[(o)+1] << 16))
|
||||
|
||||
int
|
||||
px_cnattach(addr)
|
||||
paddr_t addr;
|
||||
{
|
||||
caddr_t base;
|
||||
base = (caddr_t)TC_PHYS_TO_UNCACHED(addr);
|
||||
if (px_init((struct fbinfo *)1, base, 0, 1) != 1)
|
||||
return (0);
|
||||
return (1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Match a supported board.
|
||||
*/
|
||||
|
@ -333,7 +345,7 @@ px_attach(parent, self, aux)
|
|||
*
|
||||
* XXX use magic number to make sure fi isn't a real struct fbinfo?
|
||||
*/
|
||||
int
|
||||
static int
|
||||
px_init(fi, slotbase, unit, console)
|
||||
struct fbinfo *fi;
|
||||
caddr_t slotbase;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: pxvar.h,v 1.9 2000/01/14 02:00:47 ad Exp $ */
|
||||
/* $NetBSD: pxvar.h,v 1.10 2000/02/03 04:09:17 nisimura Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1999 The NetBSD Foundation, Inc.
|
||||
|
@ -136,9 +136,7 @@ typedef struct px_map {
|
|||
|
||||
#ifdef _KERNEL
|
||||
|
||||
/* XXX ugly hack to make the PX fit for findcons() */
|
||||
struct fbinfo;
|
||||
int px_init __P((struct fbinfo *, char *, int, int));
|
||||
int px_cnattach __P((paddr_t));
|
||||
|
||||
#endif /* _KERNEL */
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: sfb.c,v 1.36 2000/01/10 03:24:34 simonb Exp $ */
|
||||
/* $NetBSD: sfb.c,v 1.37 2000/02/03 04:09:17 nisimura Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1992, 1993
|
||||
|
@ -80,9 +80,6 @@
|
|||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#include "fb.h"
|
||||
#include "sfb.h"
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/device.h>
|
||||
|
@ -108,6 +105,7 @@
|
|||
*/
|
||||
static struct fbuaccess sfbu;
|
||||
static struct pmax_fbtty sfbfb;
|
||||
static struct fbinfo *sfb_fi;
|
||||
|
||||
|
||||
/*
|
||||
|
@ -116,6 +114,7 @@ static struct pmax_fbtty sfbfb;
|
|||
|
||||
static int sfbmatch __P((struct device *, struct cfdata *, void *));
|
||||
static void sfbattach __P((struct device *, struct device *, void *));
|
||||
static int sfbinit __P((struct fbinfo *, caddr_t, int, int));
|
||||
static int sfb_intr __P((void *sc));
|
||||
|
||||
struct cfattach sfb_ca = {
|
||||
|
@ -133,6 +132,20 @@ struct fbdriver sfb_driver = {
|
|||
bt459CursorColor
|
||||
};
|
||||
|
||||
int
|
||||
sfb_cnattach(addr)
|
||||
paddr_t addr;
|
||||
{
|
||||
struct fbinfo *fi;
|
||||
caddr_t base;
|
||||
|
||||
base = (caddr_t)MIPS_PHYS_TO_KSEG1(addr);
|
||||
fbcnalloc(&fi);
|
||||
if (sfbinit(fi, base, 0, 1) < 0)
|
||||
return (0);
|
||||
sfb_fi = fi;
|
||||
return (1);
|
||||
}
|
||||
|
||||
/* match and attach routines cut-and-pasted from cfb */
|
||||
|
||||
|
@ -148,14 +161,6 @@ sfbmatch(parent, match, aux)
|
|||
if (!TC_BUS_MATCHNAME(ta, "PMAGB-BA"))
|
||||
return (0);
|
||||
|
||||
/*
|
||||
* if the TC rom ident matches, assume the VRAM is present too.
|
||||
*/
|
||||
#if 0
|
||||
if (badaddr( ((caddr_t)ta->ta_addr) + SFB_OFFSET_VRAM, 4))
|
||||
return (0);
|
||||
#endif
|
||||
|
||||
return (1);
|
||||
}
|
||||
|
||||
|
@ -174,13 +179,20 @@ sfbattach(parent, self, aux)
|
|||
int unit = self->dv_unit;
|
||||
struct fbinfo *fi;
|
||||
|
||||
/* Allocate a struct fbinfo and point the softc at it */
|
||||
if (fballoc(sfbaddr, &fi) == 0 && !sfbinit(fi, sfbaddr, unit, 0))
|
||||
return;
|
||||
if (sfb_fi)
|
||||
fi = sfb_fi;
|
||||
else {
|
||||
if (fballoc(&fi) < 0 || sfbinit(fi, sfbaddr, unit, 0) < 0)
|
||||
return; /* failed */
|
||||
}
|
||||
((struct fbsoftc *)self)->sc_fi = fi;
|
||||
|
||||
printf(": %dx%dx%d%s",
|
||||
fi->fi_type.fb_width,
|
||||
fi->fi_type.fb_height,
|
||||
fi->fi_type.fb_depth,
|
||||
(sfb_fi) ? " console" : "");
|
||||
|
||||
if ((((struct fbsoftc *)self)->sc_fi = fi) == NULL)
|
||||
return;
|
||||
|
||||
#if 0 /*XXX*/
|
||||
|
||||
/*
|
||||
|
@ -198,7 +210,6 @@ sfbattach(parent, self, aux)
|
|||
* interrupt handler, which interrupts during vertical-retrace.
|
||||
*/
|
||||
tc_intr_establish(parent, ta->ta_cookie, TC_IPL_NONE, sfb_intr, fi);
|
||||
fbconnect ("PMAGB-BA", fi, 0);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
|
@ -206,7 +217,7 @@ sfbattach(parent, self, aux)
|
|||
/*
|
||||
* Initialization
|
||||
*/
|
||||
int
|
||||
static int
|
||||
sfbinit(fi, base, unit, silent)
|
||||
struct fbinfo *fi;
|
||||
char *base;
|
||||
|
@ -288,19 +299,10 @@ sfbinit(fi, base, unit, silent)
|
|||
* Initialize the color map, the screen, and the mouse.
|
||||
*/
|
||||
if (tb_kbdmouseconfig(fi)) {
|
||||
printf(" (mouse/keyboard config failed)");
|
||||
return (0);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
||||
/*sfbInitColorMap();*/ /* done by bt459init() */
|
||||
|
||||
/*
|
||||
* Connect to the raster-console pseudo-driver
|
||||
*/
|
||||
|
||||
fbconnect ("PMAGB-BA", fi, silent);
|
||||
return (1);
|
||||
fbconnect(fi);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* $NetBSD: sfbvar.h,v 1.4 2000/01/08 01:02:36 simonb Exp $ */
|
||||
/* $NetBSD: sfbvar.h,v 1.5 2000/02/03 04:09:18 nisimura Exp $ */
|
||||
|
||||
/*
|
||||
* Initialize a Turbochannel SFB 2-d framebuffer,
|
||||
* so it can be used as a bitmapped glass-tty console device.
|
||||
*/
|
||||
int sfbinit __P((struct fbinfo *fi, caddr_t base, int unit, int silent));
|
||||
int sfb_cnattach __P((paddr_t));
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: xcfb.c,v 1.33 2000/01/10 03:24:34 simonb Exp $ */
|
||||
/* $NetBSD: xcfb.c,v 1.34 2000/02/03 04:09:18 nisimura Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1992, 1993
|
||||
|
@ -80,11 +80,7 @@
|
|||
* v 9.2 90/02/13 22:16:24 shirriff Exp SPRITE (DECWRL)";
|
||||
*/
|
||||
|
||||
#include "fb.h"
|
||||
|
||||
#include "xcfb.h"
|
||||
#include "dtop.h"
|
||||
#if NXCFB > 0
|
||||
#if NDTOP == 0
|
||||
xcfb needs dtop device
|
||||
#else
|
||||
|
@ -98,6 +94,7 @@ xcfb needs dtop device
|
|||
#include <machine/fbio.h>
|
||||
#include <machine/fbvar.h>
|
||||
|
||||
#include <pmax/pmax/maxine.h>
|
||||
#include <pmax/dev/dtopreg.h>
|
||||
#include <pmax/dev/fbreg.h>
|
||||
#include <pmax/dev/ims332.h>
|
||||
|
@ -116,16 +113,11 @@ xcfb needs dtop device
|
|||
* These need to be mapped into user space.
|
||||
*/
|
||||
static struct fbuaccess xcfbu;
|
||||
|
||||
|
||||
/*
|
||||
* rcons methods and globals.
|
||||
*/
|
||||
static struct pmax_fbtty xcfbfb;
|
||||
static struct fbinfo *xcfb_fi;
|
||||
|
||||
#define XCFB_FB_SIZE 0x100000 /* size of raster (mapped into userspace) */
|
||||
|
||||
|
||||
struct fbdriver xcfb_driver = {
|
||||
ims332_video_on,
|
||||
ims332_video_off,
|
||||
|
@ -145,11 +137,26 @@ struct fbdriver xcfb_driver = {
|
|||
|
||||
static int xcfbmatch __P((struct device *, struct cfdata *, void *));
|
||||
static void xcfbattach __P((struct device *, struct device *, void *));
|
||||
static int xcfbinit __P((struct fbinfo *, caddr_t, int, int));
|
||||
|
||||
struct cfattach xcfb_ca = {
|
||||
sizeof(struct device), xcfbmatch, xcfbattach
|
||||
};
|
||||
|
||||
int
|
||||
xcfb_cnattach()
|
||||
{
|
||||
struct fbinfo *fi;
|
||||
caddr_t base;
|
||||
|
||||
base = (caddr_t)MIPS_PHYS_TO_KSEG1(XINE_PHYS_CFB_START);
|
||||
fbcnalloc(&fi);
|
||||
if (xcfbinit(fi, base, 0, 1) < 0)
|
||||
return (0);
|
||||
xcfb_fi = fi;
|
||||
return (1);
|
||||
}
|
||||
|
||||
static int
|
||||
xcfbmatch(parent, match, aux)
|
||||
struct device *parent;
|
||||
|
@ -168,35 +175,36 @@ xcfbmatch(parent, match, aux)
|
|||
|
||||
static void
|
||||
xcfbattach(parent, self, aux)
|
||||
struct device *parent;
|
||||
struct device *self;
|
||||
void *aux;
|
||||
struct device *parent;
|
||||
struct device *self;
|
||||
void *aux;
|
||||
{
|
||||
struct tc_attach_args *ta;
|
||||
struct tc_attach_args *ta = aux;
|
||||
caddr_t base = (caddr_t)ta->ta_addr;
|
||||
int unit = self->dv_unit;
|
||||
struct fbinfo *fi;
|
||||
caddr_t base;
|
||||
|
||||
ta = aux;
|
||||
base = (caddr_t)ta->ta_addr;
|
||||
if (xcfb_fi)
|
||||
fi = xcfb_fi;
|
||||
else {
|
||||
if (fballoc(&fi) < 0 || xcfbinit(fi, base, unit, 1) < 0)
|
||||
return; /* failed */
|
||||
}
|
||||
((struct fbsoftc *)self)->sc_fi = fi;
|
||||
|
||||
/* Allocate a struct fbinfo and point the softc at it */
|
||||
if (fballoc(base, &fi) == 0 && !xcfbinit(fi, base, self->dv_unit, 0))
|
||||
return;
|
||||
printf(": %dx%dx%d%s",
|
||||
fi->fi_type.fb_width,
|
||||
fi->fi_type.fb_height,
|
||||
fi->fi_type.fb_depth,
|
||||
(xcfb_fi) ? " console" : "");
|
||||
|
||||
if ((((struct fbsoftc *)self)->sc_fi = fi) == NULL)
|
||||
return;
|
||||
|
||||
|
||||
/*BUS_INTR_ESTABLISH(ca, xcfbintr, self->dv_unit);*/
|
||||
fbconnect("PMAG-DV", fi, 0);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Initialization
|
||||
*/
|
||||
int
|
||||
static int
|
||||
xcfbinit(fi, base, unit, silent)
|
||||
struct fbinfo *fi;
|
||||
caddr_t base;
|
||||
|
@ -262,23 +270,13 @@ xcfbinit(fi, base, unit, silent)
|
|||
/* Initialize the RAMDAC. */
|
||||
ims332init (fi);
|
||||
|
||||
|
||||
/* Connect serial device(s) */
|
||||
if (tb_kbdmouseconfig(fi)) {
|
||||
printf(" (mouse/keyboard config failed)");
|
||||
return (0);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Connect to the raster-console pseudo-driver
|
||||
*/
|
||||
fbconnect("PMAG-DV", fi, silent);
|
||||
|
||||
#ifdef fpinitialized
|
||||
fp->initialized = 1;
|
||||
#endif
|
||||
return (1);
|
||||
fbconnect(fi);
|
||||
return (0);
|
||||
}
|
||||
|
||||
#endif /* NDTOP */
|
||||
#endif /* NXCFB */
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
/* $NetBSD: xcfbvar.h,v 1.4 1999/12/15 14:36:41 ad Exp $ */
|
||||
/* $NetBSD: xcfbvar.h,v 1.5 2000/02/03 04:09:19 nisimura Exp $ */
|
||||
|
||||
int xcfbinit __P((struct fbinfo *fi, caddr_t base, int unit, int silent));
|
||||
int xcfb_cnattach __P((void));
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: fbvar.h,v 1.10 2000/01/09 15:34:43 ad Exp $ */
|
||||
/* $NetBSD: fbvar.h,v 1.11 2000/02/03 04:09:12 nisimura Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1992, 1993, 1995
|
||||
|
@ -107,12 +107,10 @@ struct fbdriver {
|
|||
|
||||
#ifdef _KERNEL
|
||||
|
||||
#define kbd_docmd(cmd, val) 0 /* For now, do nothing. */
|
||||
#define romgetcursoraddr(xp, yp) 0
|
||||
|
||||
int fballoc __P((caddr_t base, struct fbinfo **fip));
|
||||
void fbattach __P((int n));
|
||||
void fbconnect __P((char *name, struct fbinfo *info, int silent));
|
||||
void fbattach __P((int));
|
||||
void fbcnalloc __P ((struct fbinfo **fip));
|
||||
int fballoc __P ((struct fbinfo **fip));
|
||||
void fbconnect __P ((struct fbinfo *fi));
|
||||
int tcfb_cnattach __P((int prom_slot));
|
||||
|
||||
#endif /* _KERNEL */
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: dec_3100.c,v 1.23 2000/01/14 13:45:23 simonb Exp $ */
|
||||
/* $NetBSD: dec_3100.c,v 1.24 2000/02/03 04:09:04 nisimura Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1998 Jonathan Stone. All rights reserved.
|
||||
|
@ -71,7 +71,7 @@
|
|||
* @(#)machdep.c 8.3 (Berkeley) 1/12/94
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/device.h>
|
||||
|
||||
|
@ -83,9 +83,13 @@
|
|||
|
||||
#include <pmax/pmax/machdep.h>
|
||||
#include <pmax/pmax/kn01.h>
|
||||
#include <pmax/dev/pmvar.h>
|
||||
#include <pmax/dev/dcvar.h>
|
||||
|
||||
#include <pmax/ibus/ibusvar.h>
|
||||
|
||||
#include "rasterconsole.h"
|
||||
#include "pm.h"
|
||||
#include "dc.h"
|
||||
#include "le_pmax.h"
|
||||
#include "sii.h"
|
||||
|
@ -144,7 +148,30 @@ dec_3100_bus_reset()
|
|||
static void
|
||||
dec_3100_cons_init()
|
||||
{
|
||||
/* notyet */
|
||||
int kbd, crt, screen;
|
||||
|
||||
kbd = crt = screen = 0;
|
||||
prom_findcons(&kbd, &crt, &screen);
|
||||
|
||||
if (screen > 0) {
|
||||
#if NRASTERCONSOLE > 0 && NPM > 0
|
||||
if (pm_cnattach() > 0) {
|
||||
dckbd_cnattach(KN01_SYS_DZ);
|
||||
return;
|
||||
}
|
||||
#else
|
||||
printf("No framebuffer device configured: ");
|
||||
printf("using serial console\n");
|
||||
#endif
|
||||
}
|
||||
/*
|
||||
* Delay to allow PROM putchars to complete.
|
||||
* FIFO depth * character time,
|
||||
* character time = (1000000 / (defaultrate / 10))
|
||||
*/
|
||||
DELAY(160000000 / 9600); /* XXX */
|
||||
|
||||
dc_cnattach(KN01_SYS_DZ, kbd);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: dec_3max.c,v 1.23 2000/01/14 13:45:24 simonb Exp $ */
|
||||
/* $NetBSD: dec_3max.c,v 1.24 2000/02/03 04:09:01 nisimura Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1998 Jonathan Stone. All rights reserved.
|
||||
|
@ -73,10 +73,11 @@
|
|||
|
||||
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
|
||||
|
||||
__KERNEL_RCSID(0, "$NetBSD: dec_3max.c,v 1.23 2000/01/14 13:45:24 simonb Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: dec_3max.c,v 1.24 2000/02/03 04:09:01 nisimura Exp $");
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/device.h>
|
||||
|
||||
#include <machine/cpu.h>
|
||||
#include <machine/intr.h>
|
||||
|
@ -88,6 +89,9 @@ __KERNEL_RCSID(0, "$NetBSD: dec_3max.c,v 1.23 2000/01/14 13:45:24 simonb Exp $")
|
|||
#include <pmax/pmax/machdep.h>
|
||||
#include <pmax/pmax/kn02.h>
|
||||
#include <pmax/pmax/memc.h>
|
||||
#include <pmax/dev/dcvar.h>
|
||||
|
||||
#include "rasterconsole.h"
|
||||
|
||||
/*
|
||||
* forward declarations
|
||||
|
@ -169,7 +173,31 @@ dec_3max_bus_reset()
|
|||
static void
|
||||
dec_3max_cons_init()
|
||||
{
|
||||
/* notyet */
|
||||
int kbd, crt, screen;
|
||||
extern int tcfb_cnattach __P((int)); /* XXX */
|
||||
|
||||
kbd = crt = screen = 0;
|
||||
prom_findcons(&kbd, &crt, &screen);
|
||||
|
||||
if (screen > 0) {
|
||||
#if NRASTERCONSOLE > 0
|
||||
if (kbd == 7 && tcfb_cnattach(crt) > 0) {
|
||||
dckbd_cnattach(KN02_SYS_DZ);
|
||||
return;
|
||||
}
|
||||
#else
|
||||
printf("No framebuffer device configured for slot %d: ", crt);
|
||||
printf("using serial console\n");
|
||||
#endif
|
||||
}
|
||||
/*
|
||||
* Delay to allow PROM putchars to complete.
|
||||
* FIFO depth * character time,
|
||||
* character time = (1000000 / (defaultrate / 10))
|
||||
*/
|
||||
DELAY(160000000 / 9600); /* XXX */
|
||||
|
||||
dc_cnattach(KN02_SYS_DZ, kbd);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: dec_3maxplus.c,v 1.34 2000/01/14 13:45:24 simonb Exp $ */
|
||||
/* $NetBSD: dec_3maxplus.c,v 1.35 2000/02/03 04:09:02 nisimura Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1998 Jonathan Stone. All rights reserved.
|
||||
|
@ -73,10 +73,11 @@
|
|||
|
||||
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
|
||||
|
||||
__KERNEL_RCSID(0, "$NetBSD: dec_3maxplus.c,v 1.34 2000/01/14 13:45:24 simonb Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: dec_3maxplus.c,v 1.35 2000/02/03 04:09:02 nisimura Exp $");
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/device.h>
|
||||
|
||||
#include <machine/cpu.h>
|
||||
#include <machine/sysconf.h>
|
||||
|
@ -84,7 +85,6 @@ __KERNEL_RCSID(0, "$NetBSD: dec_3maxplus.c,v 1.34 2000/01/14 13:45:24 simonb Exp
|
|||
#include <mips/mips/mips_mcclock.h> /* mclock CPUspeed estimation */
|
||||
|
||||
/* all these to get ioasic_base */
|
||||
#include <sys/device.h> /* struct cfdata for.. */
|
||||
#include <dev/tc/tcvar.h> /* tc type definitions for.. */
|
||||
#include <dev/tc/ioasicreg.h> /* ioasic interrrupt masks */
|
||||
#include <dev/tc/ioasicvar.h> /* ioasic_base */
|
||||
|
@ -92,6 +92,9 @@ __KERNEL_RCSID(0, "$NetBSD: dec_3maxplus.c,v 1.34 2000/01/14 13:45:24 simonb Exp
|
|||
#include <pmax/pmax/machdep.h>
|
||||
#include <pmax/pmax/kn03.h>
|
||||
#include <pmax/pmax/memc.h>
|
||||
#include <pmax/tc/sccvar.h>
|
||||
|
||||
#include "rasterconsole.h"
|
||||
|
||||
/*
|
||||
* Forward declarations
|
||||
|
@ -203,7 +206,30 @@ dec_3maxplus_bus_reset()
|
|||
static void
|
||||
dec_3maxplus_cons_init()
|
||||
{
|
||||
/* notyet */
|
||||
int kbd, crt, screen;
|
||||
extern int tcfb_cnattach __P((int)); /* XXX */
|
||||
|
||||
kbd = crt = screen = 0;
|
||||
prom_findcons(&kbd, &crt, &screen);
|
||||
|
||||
if (screen > 0) {
|
||||
#if NRASTERCONSOLE > 0
|
||||
if (tcfb_cnattach(crt) > 0) {
|
||||
scc_lk201_cnattach(ioasic_base, 0x180000);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
printf("No framebuffer device configured for slot %d: ", crt);
|
||||
printf("using serial console\n");
|
||||
}
|
||||
/*
|
||||
* Delay to allow PROM putchars to complete.
|
||||
* FIFO depth * character time,
|
||||
* character time = (1000000 / (defaultrate / 10))
|
||||
*/
|
||||
DELAY(160000000 / 9600); /* XXX */
|
||||
|
||||
scc_cnattach(ioasic_base, 0x180000);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: dec_3min.c,v 1.33 2000/01/14 13:45:25 simonb Exp $ */
|
||||
/* $NetBSD: dec_3min.c,v 1.34 2000/02/03 04:09:02 nisimura Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1998 Jonathan Stone. All rights reserved.
|
||||
|
@ -73,11 +73,12 @@
|
|||
|
||||
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
|
||||
|
||||
__KERNEL_RCSID(0, "$NetBSD: dec_3min.c,v 1.33 2000/01/14 13:45:25 simonb Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: dec_3min.c,v 1.34 2000/02/03 04:09:02 nisimura Exp $");
|
||||
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/device.h>
|
||||
|
||||
#include <machine/cpu.h>
|
||||
#include <machine/intr.h>
|
||||
|
@ -86,7 +87,6 @@ __KERNEL_RCSID(0, "$NetBSD: dec_3min.c,v 1.33 2000/01/14 13:45:25 simonb Exp $")
|
|||
#include <mips/mips/mips_mcclock.h> /* mcclock CPUspeed estimation */
|
||||
|
||||
/* all these to get ioasic_base */
|
||||
#include <sys/device.h> /* struct cfdata for.. */
|
||||
#include <dev/tc/tcvar.h> /* tc type definitions for.. */
|
||||
#include <dev/tc/ioasicreg.h> /* ioasic interrrupt masks */
|
||||
#include <dev/tc/ioasicvar.h> /* ioasic_base */
|
||||
|
@ -94,6 +94,9 @@ __KERNEL_RCSID(0, "$NetBSD: dec_3min.c,v 1.33 2000/01/14 13:45:25 simonb Exp $")
|
|||
#include <pmax/pmax/machdep.h>
|
||||
#include <pmax/pmax/kmin.h> /* 3min baseboard addresses */
|
||||
#include <pmax/pmax/memc.h> /* 3min/maxine memory errors */
|
||||
#include <pmax/tc/sccvar.h>
|
||||
|
||||
#include "rasterconsole.h"
|
||||
|
||||
|
||||
/*
|
||||
|
@ -212,7 +215,30 @@ dec_3min_bus_reset()
|
|||
static void
|
||||
dec_3min_cons_init()
|
||||
{
|
||||
/* notyet */
|
||||
int kbd, crt, screen;
|
||||
extern int tcfb_cnattach __P((int)); /* XXX */
|
||||
|
||||
kbd = crt = screen = 0;
|
||||
prom_findcons(&kbd, &crt, &screen);
|
||||
|
||||
if (screen > 0) {
|
||||
#if NRASTERCONSOLE > 0
|
||||
if (tcfb_cnattach(crt) > 0) {
|
||||
scc_lk201_cnattach(ioasic_base, 0x180000);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
printf("No framebuffer device configured for slot %d: ", crt);
|
||||
printf("using serial console\n");
|
||||
}
|
||||
/*
|
||||
* Delay to allow PROM putchars to complete.
|
||||
* FIFO depth * character time,
|
||||
* character time = (1000000 / (defaultrate / 10))
|
||||
*/
|
||||
DELAY(160000000 / 9600); /* XXX */
|
||||
|
||||
scc_cnattach(ioasic_base, 0x180000);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: dec_5100.c,v 1.18 2000/01/14 13:45:25 simonb Exp $ */
|
||||
/* $NetBSD: dec_5100.c,v 1.19 2000/02/03 04:09:04 nisimura Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1998 Jonathan Stone. All rights reserved.
|
||||
|
@ -45,9 +45,12 @@
|
|||
#include <pmax/pmax/machdep.h>
|
||||
#include <pmax/pmax/kn01.h> /* common definitions */
|
||||
#include <pmax/pmax/kn230.h>
|
||||
#include <pmax/dev/dcvar.h>
|
||||
|
||||
#include <pmax/ibus/ibusvar.h>
|
||||
|
||||
#include "rasterconsole.h"
|
||||
|
||||
|
||||
/*
|
||||
* Forward declarations
|
||||
|
@ -112,7 +115,14 @@ dec_5100_bus_reset()
|
|||
static void
|
||||
dec_5100_cons_init()
|
||||
{
|
||||
/* notyet */
|
||||
/*
|
||||
* Delay to allow PROM putchars to complete.
|
||||
* FIFO depth * character time,
|
||||
* character time = (1000000 / (defaultrate / 10))
|
||||
*/
|
||||
DELAY(160000000 / 9600); /* XXX */
|
||||
|
||||
dc_cnattach(KN230_SYS_DZ0, 0);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: dec_maxine.c,v 1.25 2000/01/14 13:45:26 simonb Exp $ */
|
||||
/* $NetBSD: dec_maxine.c,v 1.26 2000/02/03 04:09:03 nisimura Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1998 Jonathan Stone. All rights reserved.
|
||||
|
@ -73,26 +73,30 @@
|
|||
|
||||
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
|
||||
|
||||
__KERNEL_RCSID(0, "$NetBSD: dec_maxine.c,v 1.25 2000/01/14 13:45:26 simonb Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: dec_maxine.c,v 1.26 2000/02/03 04:09:03 nisimura Exp $");
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/device.h>
|
||||
|
||||
#include <machine/cpu.h>
|
||||
#include <machine/intr.h>
|
||||
#include <machine/sysconf.h>
|
||||
#include <mips/mips/mips_mcclock.h>
|
||||
|
||||
#include <mips/mips/mips_mcclock.h> /* mcclock CPUspeed estimation */
|
||||
|
||||
/* all these to get ioasic_base */
|
||||
#include <sys/device.h> /* struct cfdata for.. */
|
||||
#include <dev/tc/tcvar.h> /* tc type definitions for.. */
|
||||
#include <dev/tc/ioasicreg.h> /* ioasic interrrupt masks */
|
||||
#include <dev/tc/ioasicvar.h> /* ioasic_base */
|
||||
#include <dev/tc/tcvar.h>
|
||||
#include <dev/tc/ioasicvar.h>
|
||||
#include <dev/tc/ioasicreg.h>
|
||||
|
||||
#include <pmax/pmax/maxine.h>
|
||||
#include <pmax/pmax/machdep.h>
|
||||
#include <pmax/pmax/maxine.h> /* baseboard addresses (constants) */
|
||||
#include <pmax/pmax/memc.h> /* 3min/maxine memory errors */
|
||||
#include <pmax/pmax/memc.h>
|
||||
|
||||
#include <pmax/dev/xcfbvar.h>
|
||||
#include <pmax/dev/dtopvar.h>
|
||||
#include <pmax/tc/sccvar.h>
|
||||
|
||||
#include "rasterconsole.h"
|
||||
#include "xcfb.h"
|
||||
|
||||
/*
|
||||
* Forward declarations
|
||||
|
@ -191,7 +195,37 @@ dec_maxine_bus_reset()
|
|||
static void
|
||||
dec_maxine_cons_init()
|
||||
{
|
||||
/* notyet */
|
||||
int kbd, crt, screen;
|
||||
extern int tcfb_cnattach __P((int)); /* XXX */
|
||||
|
||||
kbd = crt = screen = 0;
|
||||
prom_findcons(&kbd, &crt, &screen);
|
||||
|
||||
if (screen > 0) {
|
||||
#if NRASTERCONSOLE > 0
|
||||
if (crt == 3) {
|
||||
#if NXCFB > 0
|
||||
xcfb_cnattach();
|
||||
dtikbd_cnattach();
|
||||
return;
|
||||
#endif
|
||||
}
|
||||
else if (tcfb_cnattach(crt) > 0) {
|
||||
dtikbd_cnattach();
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
printf("No framebuffer device configured for slot %d: ", crt);
|
||||
printf("using serial console\n");
|
||||
}
|
||||
/*
|
||||
* Delay to allow PROM putchars to complete.
|
||||
* FIFO depth * character time,
|
||||
* character time = (1000000 / (defaultrate / 10))
|
||||
*/
|
||||
DELAY(160000000 / 9600); /* XXX */
|
||||
|
||||
scc_cnattach(ioasic_base, 0x100000);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: machdep.c,v 1.162 2000/01/19 20:05:47 thorpej Exp $ */
|
||||
/* $NetBSD: machdep.c,v 1.163 2000/02/03 04:09:05 nisimura Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1988 University of Utah.
|
||||
|
@ -43,7 +43,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
|
||||
__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.162 2000/01/19 20:05:47 thorpej Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.163 2000/02/03 04:09:05 nisimura Exp $");
|
||||
|
||||
#include "fs_mfs.h"
|
||||
#include "opt_ddb.h"
|
||||
|
@ -392,6 +392,13 @@ mach_init(argc, argv, code, cv, bim, bip)
|
|||
pmap_bootstrap();
|
||||
}
|
||||
|
||||
void
|
||||
consinit()
|
||||
{
|
||||
|
||||
(*platform.cons_init)();
|
||||
}
|
||||
|
||||
/*
|
||||
* Machine-dependent startup code: allocate memory for variable-sized tables,
|
||||
* initialize cpu.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: scc.c,v 1.62 2000/01/18 12:19:49 simonb Exp $ */
|
||||
/* $NetBSD: scc.c,v 1.63 2000/02/03 04:09:07 nisimura Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1991,1990,1989,1994,1995,1996 Carnegie Mellon University
|
||||
|
@ -66,7 +66,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
|
||||
__KERNEL_RCSID(0, "$NetBSD: scc.c,v 1.62 2000/01/18 12:19:49 simonb Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: scc.c,v 1.63 2000/02/03 04:09:07 nisimura Exp $");
|
||||
|
||||
#include "opt_ddb.h"
|
||||
|
||||
|
@ -252,24 +252,24 @@ static struct consdev scccons = {
|
|||
NULL, NULL, sccGetc, sccPutc, sccPollc, NODEV, 0
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Set up a given unit as a serial console device.
|
||||
* We need console output when cold, and before any device is configured.
|
||||
* Should be callable when cold, to reset the chip and set parameters
|
||||
* for a remote (serial) console or kgdb line.
|
||||
* XXX
|
||||
* As most DECstations only bring out one rs-232 lead from an SCC
|
||||
* to the bulkhead, and use the other for mouse and keyboard, we
|
||||
* only allow one unit per SCC to be console.
|
||||
*/
|
||||
void
|
||||
scc_consinit(dev, sccaddr)
|
||||
dev_t dev;
|
||||
scc_regmap_t *sccaddr;
|
||||
scc_cnattach(base, offset)
|
||||
u_int32_t base;
|
||||
u_int32_t offset;
|
||||
{
|
||||
scc_regmap_t *sccaddr;
|
||||
struct scc_softc *sc;
|
||||
int dev;
|
||||
|
||||
/* XXX XXX XXX */
|
||||
dev = 0;
|
||||
if (systype == DS_3MIN || systype == DS_3MAXPLUS)
|
||||
dev = SCCCOMM3_PORT;
|
||||
else if (systype == DS_MAXINE)
|
||||
dev = SCCCOMM2_PORT;
|
||||
/* XXX XXX XXX */
|
||||
|
||||
sccaddr = (void *)(base + offset);
|
||||
/* Save address in case we're cold. */
|
||||
if (cold && scc_cons_addr == 0) {
|
||||
scc_cons_addr = sccaddr;
|
||||
|
@ -285,12 +285,28 @@ scc_consinit(dev, sccaddr)
|
|||
/* XXX make sure sccreset() called only once for this chip? */
|
||||
sccreset(sc);
|
||||
|
||||
scccons.cn_dev = dev;
|
||||
*cn_tab = scccons;
|
||||
cn_tab = &scccons;
|
||||
cn_tab->cn_dev = makedev(SCCDEV, dev);
|
||||
cn_tab->cn_pri = CN_NORMAL;
|
||||
sc->scc_softCAR |= 1 << SCCLINE(cn_tab->cn_dev);
|
||||
scc_tty_init(sc, cn_tab->cn_dev);
|
||||
}
|
||||
|
||||
void
|
||||
scc_lk201_cnattach(base, offset)
|
||||
u_int32_t base;
|
||||
u_int32_t offset;
|
||||
{
|
||||
dev_t dev;
|
||||
|
||||
dev = makedev(SCCDEV, SCCKBD_PORT);
|
||||
lk_divert(sccGetc, dev);
|
||||
|
||||
cn_tab = &scccons;
|
||||
cn_tab->cn_pri = CN_NORMAL;
|
||||
cn_tab->cn_getc = lk_getc;
|
||||
rcons_indev(cn_tab); /* cn_dev & cn_putc */
|
||||
}
|
||||
|
||||
/*
|
||||
* Test to see if device is present.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: sccvar.h,v 1.6 2000/01/09 23:10:45 ad Exp $ */
|
||||
/* $NetBSD: sccvar.h,v 1.7 2000/02/03 04:09:11 nisimura Exp $ */
|
||||
|
||||
#ifndef _PMAX_TC_SCCVAR_H_
|
||||
#define _PMAX_TC_SCCVAR_H_
|
||||
|
@ -20,15 +20,15 @@
|
|||
#define SCCCOMM3_PORT 0x2
|
||||
#define SCCKBD_PORT 0x3
|
||||
|
||||
struct scc_regmap;
|
||||
|
||||
int sccGetc __P((dev_t));
|
||||
void sccPutc __P((dev_t, int));
|
||||
void scc_consinit __P((dev_t dev, struct scc_regmap *sccaddr));
|
||||
|
||||
/* QVSS-compatible in-kernel X input event parser, pointer tracker */
|
||||
extern void (*sccDivertXInput) __P((int));
|
||||
extern void (*sccMouseEvent) __P((void *));
|
||||
extern void (*sccMouseButtons) __P((void *));
|
||||
|
||||
void scc_cnattach __P((u_int32_t, u_int32_t));
|
||||
void scc_lk201_cnattach __P((u_int32_t, u_int32_t));
|
||||
|
||||
#endif /* !_PMAX_TC_SCCVAR_H_ */
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* $NetBSD: tcbus.c,v 1.7 2000/01/14 13:45:28 simonb Exp $ */
|
||||
/* $NetBSD: tcbus.c,v 1.8 2000/02/03 04:09:07 nisimura Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1999 Tohru Nishimura. All rights reserved.
|
||||
* Copyright (c) 1999, 2000 Tohru Nishimura. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
|
@ -31,7 +31,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
|
||||
__KERNEL_RCSID(0, "$NetBSD: tcbus.c,v 1.7 2000/01/14 13:45:28 simonb Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: tcbus.c,v 1.8 2000/02/03 04:09:07 nisimura Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -195,15 +195,15 @@ tc_ds_intr_disestablish(dev, arg)
|
|||
#include "sfb.h"
|
||||
#include "px.h"
|
||||
|
||||
#include <machine/fbio.h>
|
||||
#include <machine/fbvar.h>
|
||||
#include <machine/pmioctl.h> /* XXX */
|
||||
#include <machine/fbio.h> /* XXX */
|
||||
#include <machine/fbvar.h> /* XXX */
|
||||
#include <pmax/dev/fbreg.h> /* XXX */
|
||||
#include <pmax/dev/cfbvar.h>
|
||||
#include <pmax/dev/mfbvar.h>
|
||||
#include <machine/pmioctl.h> /* XXX shouldn't need this here for pxvar.h */
|
||||
#include <pmax/dev/fbreg.h> /* XXX shouldn't need this here for pxvar.h */
|
||||
#include <pmax/dev/pxreg.h> /* XXX shouldn't need this here for pxvar.h */
|
||||
#include <pmax/dev/pxvar.h>
|
||||
#include <pmax/dev/sfbvar.h>
|
||||
#include <pmax/dev/pxreg.h>
|
||||
#include <pmax/dev/pxvar.h>
|
||||
|
||||
#include <machine/dec_prom.h>
|
||||
|
||||
|
@ -211,9 +211,8 @@ int
|
|||
tcfb_cnattach(slotno)
|
||||
int slotno;
|
||||
{
|
||||
tc_addr_t tcaddr;
|
||||
paddr_t tcaddr;
|
||||
char tcname[TC_ROM_LLEN];
|
||||
struct fbinfo *fi;
|
||||
|
||||
tcaddr = (*callv->_slot_address)(slotno);
|
||||
if (tc_badaddr(tcaddr) || tc_checkslot(tcaddr, tcname) == 0)
|
||||
|
@ -221,32 +220,26 @@ tcfb_cnattach(slotno)
|
|||
|
||||
#if NSFB > 0
|
||||
if (strncmp("PMAGB-BA", tcname, TC_ROM_LLEN) == 0) {
|
||||
fballoc((caddr_t)tcaddr, &fi);
|
||||
sfbinit(fi, (caddr_t)tcaddr, 0, 1);
|
||||
return 1;
|
||||
return sfb_cnattach(tcaddr);
|
||||
}
|
||||
#endif
|
||||
#if NCFB > 0
|
||||
if (strncmp("PMAG-BA ", tcname, TC_ROM_LLEN) == 0) {
|
||||
fballoc((caddr_t)tcaddr, &fi);
|
||||
cfbinit(fi, (caddr_t)tcaddr, 0, 1);
|
||||
return 1;
|
||||
return cfb_cnattach(tcaddr);
|
||||
}
|
||||
#endif
|
||||
#if NMFB > 0
|
||||
if (strncmp("PMAG-AA ", tcname, TC_ROM_LLEN) == 0) {
|
||||
fballoc((caddr_t)tcaddr, &fi);
|
||||
mfbinit(fi, (caddr_t)tcaddr, 0, 1);
|
||||
return 1;
|
||||
return mfb_cnattach(tcaddr);
|
||||
}
|
||||
#endif
|
||||
#if NPX > 0
|
||||
if (strncmp("PMAG-CA ", tcname, TC_ROM_LLEN) == 0
|
||||
|| strncmp("PMAG-DA ", tcname, TC_ROM_LLEN) == 0
|
||||
|| strncmp("PMAG-FA ", tcname, TC_ROM_LLEN) == 0) {
|
||||
fballoc((caddr_t)tcaddr, &fi);
|
||||
px_init(fi, (caddr_t)tcaddr, 0, 1);
|
||||
return 1;
|
||||
int px_cnattach __P((paddr_t)); /* XXX much simpler XXX */
|
||||
|
||||
return px_cnattach(tcaddr);
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue