|
|
1.1 root 1: /*
2: * Copyright (c) 1988 University of Utah.
3: * Copyright (c) 1990 The Regents of the University of California.
4: * All rights reserved.
5: *
6: * This code is derived from software contributed to Berkeley by
7: * the Systems Programming Group of the University of Utah Computer
8: * Science Department.
9: *
10: * Redistribution and use in source and binary forms, with or without
11: * modification, are permitted provided that the following conditions
12: * are met:
13: * 1. Redistributions of source code must retain the above copyright
14: * notice, this list of conditions and the following disclaimer.
15: * 2. Redistributions in binary form must reproduce the above copyright
16: * notice, this list of conditions and the following disclaimer in the
17: * documentation and/or other materials provided with the distribution.
18: * 3. All advertising materials mentioning features or use of this software
19: * must display the following acknowledgement:
20: * This product includes software developed by the University of
21: * California, Berkeley and its contributors.
22: * 4. Neither the name of the University nor the names of its contributors
23: * may be used to endorse or promote products derived from this software
24: * without specific prior written permission.
25: *
26: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
27: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
30: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
31: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
32: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
33: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
35: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36: * SUCH DAMAGE.
37: *
38: * from: Utah $Hdr: grf_rb.c 1.13 91/04/02$
39: *
40: * @(#)grf_rb.c 7.5 (Berkeley) 5/7/91
41: */
42:
43: #include "grf.h"
44: #if NGRF > 0
45:
46: /*
47: * Graphics routines for the Renaissance, HP98720 Graphics system.
48: */
49: #include "sys/param.h"
50: #include "sys/errno.h"
51:
52: #include "grfioctl.h"
53: #include "grfvar.h"
54: #include "grf_rbreg.h"
55:
56: #include "../include/cpu.h"
57:
58: /*
59: * Initialize hardware.
60: * Must point g_display at a grfinfo structure describing the hardware.
61: * Returns 0 if hardware not present, non-zero ow.
62: */
63: rb_init(gp, addr)
64: struct grf_softc *gp;
65: caddr_t addr;
66: {
67: register struct rboxfb *rbp;
68: struct grfinfo *gi = &gp->g_display;
69: int fboff;
70: extern caddr_t sctopa(), iomap();
71:
72: rbp = (struct rboxfb *) addr;
73: if (ISIIOVA(addr))
74: gi->gd_regaddr = (caddr_t) IIOP(addr);
75: else
76: gi->gd_regaddr = sctopa(vatosc(addr));
77: gi->gd_regsize = 0x20000;
78: gi->gd_fbwidth = (rbp->fbwmsb << 8) | rbp->fbwlsb;
79: gi->gd_fbheight = (rbp->fbhmsb << 8) | rbp->fbhlsb;
80: gi->gd_fbsize = gi->gd_fbwidth * gi->gd_fbheight;
81: fboff = (rbp->fbomsb << 8) | rbp->fbolsb;
82: gi->gd_fbaddr = (caddr_t) (*((u_char *)addr + fboff) << 16);
83: if (gi->gd_regaddr >= (caddr_t)DIOIIBASE) {
84: /*
85: * For DIO II space the fbaddr just computed is the offset
86: * from the select code base (regaddr) of the framebuffer.
87: * Hence it is also implicitly the size of the register set.
88: */
89: gi->gd_regsize = (int) gi->gd_fbaddr;
90: gi->gd_fbaddr += (int) gi->gd_regaddr;
91: gp->g_regkva = addr;
92: gp->g_fbkva = addr + gi->gd_regsize;
93: } else {
94: /*
95: * For DIO space we need to map the seperate framebuffer.
96: */
97: gp->g_regkva = addr;
98: gp->g_fbkva = iomap(gi->gd_fbaddr, gi->gd_fbsize);
99: }
100: gi->gd_dwidth = (rbp->dwmsb << 8) | rbp->dwlsb;
101: gi->gd_dheight = (rbp->dwmsb << 8) | rbp->dwlsb;
102: gi->gd_planes = 0; /* ?? */
103: gi->gd_colors = 256;
104: return(1);
105: }
106:
107: /*
108: * Change the mode of the display.
109: * Right now all we can do is grfon/grfoff.
110: * Return a UNIX error number or 0 for success.
111: */
112: rb_mode(gp, cmd)
113: register struct grf_softc *gp;
114: {
115: register struct rboxfb *rbp;
116: int error = 0;
117:
118: rbp = (struct rboxfb *) gp->g_regkva;
119: switch (cmd) {
120: /*
121: * The minimal register info here is from the Renaissance X driver.
122: */
123: case GM_GRFON:
124: case GM_GRFOFF:
125: break;
126: case GM_GRFOVON:
127: rbp->write_enable = 0;
128: rbp->opwen = 0xF;
129: rbp->drive = 0x10;
130: break;
131: case GM_GRFOVOFF:
132: rbp->opwen = 0;
133: rbp->write_enable = 0xffffffff;
134: rbp->drive = 0x01;
135: break;
136: default:
137: error = EINVAL;
138: break;
139: }
140: return(error);
141: }
142:
143: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.