* Copyright (c) 1988 University of Utah.
* Copyright (c) 1990 The Regents of the University of California.
* 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_gb.c 1.13 89/04/11$
* @(#)grf_gb.c 7.1 (Berkeley) %G%
* Graphics routines for the Gatorbox.
* Note: In the context of this system, "gator" and "gatorbox" both refer to
* HP 987x0 graphics systems. "Gator" is not used for high res mono.
* (as in 9837 Gator systems)
#define CRTC_DATA_LENGTH 0x0e
u_char crtc_init_data
[CRTC_DATA_LENGTH
] = {
0x29, 0x20, 0x23, 0x04, 0x30, 0x0b, 0x30,
0x30, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00
* Must point g_display at a grfinfo structure describing the hardware.
* Returns 0 if hardware not present, non-zero ow.
register struct gboxfb
*gbp
;
struct grfinfo
*gi
= &gp
->g_display
;
gbp
= (struct gboxfb
*) addr
;
gi
->gd_regaddr
= (caddr_t
) UNIOV(addr
);
gi
->gd_regsize
= 0x10000;
gi
->gd_fbwidth
= 1024; /* XXX */
gi
->gd_fbheight
= 1024; /* XXX */
fboff
= (gbp
->fbomsb
<< 8) | gbp
->fbolsb
;
gi
->gd_fbaddr
= (caddr_t
) (*(addr
+ fboff
) << 16);
gi
->gd_fbsize
= gi
->gd_fbwidth
* gi
->gd_fbheight
;
gi
->gd_dwidth
= 1024; /* XXX */
gi
->gd_dheight
= 768; /* XXX */
gi
->gd_planes
= 0; /* how do we do this? */
* The minimal register info here is from the Gatorbox X driver.
fbp
= (u_char
*) IOV(gi
->gd_fbaddr
);
gbp
->interrupt
= 4; /** fb_enable ? **/
gbp
->rep_rule
= 3; /* GXcopy */
* Find out how many colors are available by determining
* which planes are installed. That is, write all ones to
* a frame buffer location, see how many ones are read back.
gi
->gd_colors
= *fbp
+ 1;
register struct gboxfb
*gbp
;
for (i
= 0; i
< CRTC_DATA_LENGTH
; i
++) {
gbp
->crtc_data
= crtc_init_data
[i
];
* 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
;
gbp
= (struct gboxfb
*) IOV(gp
->g_display
.gd_regaddr
);