* Copyright (c) 1988 University of Utah.
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
* This code is derived from software contributed to Berkeley by
* the Systems Programming Group of the University of Utah Computer
* %sccs.include.redist.c%
* from: Utah $Hdr: grf_rb.c 1.15 93/08/13$
* @(#)grf_rb.c 8.3 (Berkeley) %G%
* Graphics routines for the Renaissance, HP98720 Graphics system.
#include <hp/dev/grfioctl.h>
#include <hp/dev/grfvar.h>
#include <hp300/dev/grf_rbreg.h>
* Must point g_display at a grfinfo structure describing the hardware.
* Returns 0 if hardware not present, non-zero ow.
register struct rboxfb
*rbp
;
struct grfinfo
*gi
= &gp
->g_display
;
extern caddr_t
sctopa(), iomap();
rbp
= (struct rboxfb
*) addr
;
gi
->gd_regaddr
= (caddr_t
) IIOP(addr
);
gi
->gd_regaddr
= sctopa(vatosc(addr
));
gi
->gd_regsize
= 0x20000;
gi
->gd_fbwidth
= (rbp
->fbwmsb
<< 8) | rbp
->fbwlsb
;
gi
->gd_fbheight
= (rbp
->fbhmsb
<< 8) | rbp
->fbhlsb
;
gi
->gd_fbsize
= gi
->gd_fbwidth
* gi
->gd_fbheight
;
fboff
= (rbp
->fbomsb
<< 8) | rbp
->fbolsb
;
gi
->gd_fbaddr
= (caddr_t
) (*((u_char
*)addr
+ fboff
) << 16);
if (gi
->gd_regaddr
>= (caddr_t
)DIOIIBASE
) {
* For DIO II space the fbaddr just computed is the offset
* from the select code base (regaddr) of the framebuffer.
* Hence it is also implicitly the size of the register set.
gi
->gd_regsize
= (int) gi
->gd_fbaddr
;
gi
->gd_fbaddr
+= (int) gi
->gd_regaddr
;
gp
->g_fbkva
= addr
+ gi
->gd_regsize
;
* For DIO space we need to map the seperate framebuffer.
gp
->g_fbkva
= iomap(gi
->gd_fbaddr
, gi
->gd_fbsize
);
gi
->gd_dwidth
= (rbp
->dwmsb
<< 8) | rbp
->dwlsb
;
gi
->gd_dheight
= (rbp
->dwmsb
<< 8) | rbp
->dwlsb
;
gi
->gd_planes
= 0; /* ?? */
* Change the mode of the display.
* Right now all we can do is grfon/grfoff.
* Return a UNIX error number or 0 for success.
register struct grf_softc
*gp
;
register struct rboxfb
*rbp
;
rbp
= (struct rboxfb
*) gp
->g_regkva
;
* The minimal register info here is from the Renaissance X driver.
rbp
->write_enable
= 0xffffffff;
* Remember UVA of mapping for GCDESCRIBE.
* XXX this should be per-process.
struct grf_fbinfo
*fi
= (struct grf_fbinfo
*)data
;
struct grfinfo
*gi
= &gp
->g_display
;
/* feed it what HP-UX expects */
fi
->mapsize
= gi
->gd_fbsize
;
fi
->dwidth
= gi
->gd_dwidth
;
fi
->dlength
= gi
->gd_dheight
;
fi
->width
= gi
->gd_fbwidth
;
fi
->length
= gi
->gd_fbheight
;
fi
->xlen
= (fi
->width
* fi
->bpp
) / NBBY
;
fi
->nplbytes
= fi
->xlen
* ((fi
->length
* fi
->bpp
) / NBBY
);
bcopy("HP98720", fi
->name
, 8);
fi
->attr
= 2; /* HW block mover */
* If mapped, return the UVA where mapped.
fi
->regbase
= gp
->g_data
;
fi
->fbbase
= fi
->regbase
+ gp
->g_display
.gd_regsize
;