fix a few mmap bugs. pretend to be a cg3 and implement a hack

to fack the Xsun server to believe that the p9100's framebuffer
is really a cg3's.  So if only colormaps worked, X would be able
to run.
This commit is contained in:
matt 1999-08-01 06:27:00 +00:00
parent 0c41be440f
commit d8f4dbb171
1 changed files with 17 additions and 4 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: p9100.c,v 1.1 1999/08/01 00:23:49 matt Exp $ */
/* $NetBSD: p9100.c,v 1.2 1999/08/01 06:27:00 matt Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@ -222,7 +222,7 @@ p9100_sbus_attach(struct device *parent, struct device *self, void *args)
fb->fb_driver = &p9100fbdriver;
fb->fb_device = &sc->sc_dev;
fb->fb_flags = sc->sc_dev.dv_cfdata->cf_flags & FB_USERMASK;
fb->fb_type.fb_type = FBTYPE_SUN2COLOR;
fb->fb_type.fb_type = FBTYPE_SUN3COLOR;
/*
* When the ROM has mapped in a p9100 display, the address
@ -496,10 +496,23 @@ p9100mmap(dev_t dev, int off, int prot)
if (off < 0)
return (-1);
#define CG3_MMAP_OFFSET 0x04000000
/* Make Xsun think we are a CG3 (SUN3COLOR)
*/
if (off >= CG3_MMAP_OFFSET && off < CG3_MMAP_OFFSET + sc->sc_fb_psize) {
off -= CG3_MMAP_OFFSET;
if (bus_space_mmap(sc->sc_bustag,
sc->sc_fb_btype,
sc->sc_fb_paddr + off,
BUS_SPACE_MAP_LINEAR, &bh))
return (-1);
return ((int)bh);
}
if (off >= sc->sc_fb_psize + sc->sc_ctl_psize + sc->sc_cmd_psize)
return (-1);
if (off <= sc->sc_fb_psize) {
if (off < sc->sc_fb_psize) {
if (bus_space_mmap(sc->sc_bustag,
sc->sc_fb_btype,
sc->sc_fb_paddr + off,
@ -508,7 +521,7 @@ p9100mmap(dev_t dev, int off, int prot)
return ((int)bh);
}
off -= sc->sc_fb_psize;
if (off <= sc->sc_ctl_psize) {
if (off < sc->sc_ctl_psize) {
if (bus_space_mmap(sc->sc_bustag,
sc->sc_ctl_btype,
sc->sc_ctl_paddr + off,