* 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_tc.c 1.13 89/08/25$
* @(#)grf_tc.c 7.1 (Berkeley) %G%
* Graphics routines for TOPCAT frame buffer
* Must fill in the grfinfo structure in g_softc.
* Returns 0 if hardware not present, non-zero ow.
register struct tcboxfb
*tp
= (struct tcboxfb
*) addr
;
struct grfinfo
*gi
= &gp
->g_display
;
#if defined(HP360) || defined(HP370)
if (addr
== (u_char
*)grfregs
)
gi
->gd_regaddr
= (caddr_t
) DIOIIBASE
;
gi
->gd_regaddr
= (caddr_t
) UNIOV(addr
);
gi
->gd_regsize
= 0x10000;
gi
->gd_fbwidth
= (tp
->fbwmsb
<< 8) | tp
->fbwlsb
;
gi
->gd_fbheight
= (tp
->fbhmsb
<< 8) | tp
->fbhlsb
;
fboff
= (tp
->fbomsb
<< 8) | tp
->fbolsb
;
gi
->gd_fbaddr
= (caddr_t
) (*(addr
+ fboff
) << 16);
#if defined(HP360) || defined(HP370)
* For DIO II space addresses offset is relative to the DIO II space.
* XXX: this should apply to all frame buffer types.
if (gi
->gd_regaddr
>= (caddr_t
)DIOIIBASE
)
gi
->gd_fbaddr
+= (int) gi
->gd_regaddr
;
gi
->gd_fbsize
= gi
->gd_fbwidth
* gi
->gd_fbheight
;
gi
->gd_dwidth
= (tp
->dwmsb
<< 8) | tp
->dwlsb
;
gi
->gd_dheight
= (tp
->dhmsb
<< 8) | tp
->dhlsb
;
gi
->gd_planes
= tp
->num_planes
;
gi
->gd_colors
= 1 << gi
->gd_planes
;
if (gi
->gd_colors
== 1) {
fbp
= (u_char
*) IOV(gi
->gd_fbaddr
);
gi
->gd_colors
= *fbp
+ 1;
* Change the mode of the display.
* Right now all we can do is grfon/grfoff.
* Return a UNIX error number or 0 for success.
* Function may not be needed anymore.