⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 grf_dv.c

📁 早期freebsd实现
💻 C
字号:
/* * 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 * Science Department. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *	This product includes software developed by the University of *	California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * from: Utah $Hdr: grf_dv.c 1.12 93/08/13$ * *	@(#)grf_dv.c	8.4 (Berkeley) 1/12/94 */#include "grf.h"#if NGRF > 0/* * Graphics routines for the DaVinci, HP98730/98731 Graphics system. */#include <sys/param.h>#include <sys/errno.h>#include <hp/dev/grfioctl.h>#include <hp/dev/grfvar.h>#include <hp300/dev/grf_dvreg.h>#include <machine/cpu.h>/* * Initialize hardware. * Must point g_display at a grfinfo structure describing the hardware. * Returns 0 if hardware not present, non-zero ow. */dv_init(gp, addr)	struct grf_softc *gp;	caddr_t addr;{	register struct dvboxfb *dbp;	struct grfinfo *gi = &gp->g_display;	int fboff;	extern caddr_t sctopa(), iomap();	dbp = (struct dvboxfb *) addr;	if (ISIIOVA(addr))		gi->gd_regaddr = (caddr_t) IIOP(addr);	else		gi->gd_regaddr = sctopa(vatosc(addr));	gi->gd_regsize = 0x20000;	gi->gd_fbwidth = (dbp->fbwmsb << 8) | dbp->fbwlsb;	gi->gd_fbheight = (dbp->fbhmsb << 8) | dbp->fbhlsb;	gi->gd_fbsize = gi->gd_fbwidth * gi->gd_fbheight;	fboff = (dbp->fbomsb << 8) | dbp->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_regkva = addr;		gp->g_fbkva = addr + gi->gd_regsize;	} else {		/*		 * For DIO space we need to map the seperate framebuffer.		 */		gp->g_regkva = addr;		gp->g_fbkva = iomap(gi->gd_fbaddr, gi->gd_fbsize);	}	gi->gd_dwidth = (dbp->dwmsb << 8) | dbp->dwlsb;	gi->gd_dheight = (dbp->dwmsb << 8) | dbp->dwlsb;	gi->gd_planes = 0;	/* ?? */	gi->gd_colors = 256;	dv_reset(dbp);	return(1);}/* *  Magic code herein. */dv_reset(dbp)	register struct dvboxfb *dbp;{  	dbp->reset = 0x80;	DELAY(100);	dbp->interrupt = 0x04;	dbp->en_scan   = 0x01;	dbp->fbwen     = ~0;	dbp->opwen     = ~0;	dbp->fold      = 0x01;	dbp->drive     = 0x01;	dbp->rep_rule  = 0x33;	dbp->alt_rr    = 0x33;	dbp->zrr       = 0x33;	dbp->fbvenp    = 0xFF;	dbp->dispen    = 0x01;	dbp->fbvens    = 0x0;	dbp->fv_trig   = 0x01;	DELAY(100);	dbp->vdrive    = 0x0;	dbp->zconfig   = 0x0;	while (dbp->wbusy & 0x01)	  DELAY(100);	dbp->cmapbank = 0;	dbp->red0   = 0;	dbp->red1   = 0;	dbp->green0 = 0;	dbp->green1 = 0;	dbp->blue0  = 0;	dbp->blue1  = 0;	dbp->panxh   = 0;	dbp->panxl   = 0;	dbp->panyh   = 0;	dbp->panyl   = 0;	dbp->zoom    = 0;	dbp->cdwidth = 0x50;	dbp->chstart = 0x52;	dbp->cvwidth = 0x22;	dbp->pz_trig = 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. */dv_mode(gp, cmd, data)	register struct grf_softc *gp;	int cmd;	caddr_t data;{	register struct dvboxfb *dbp;	int error = 0;	dbp = (struct dvboxfb *) gp->g_regkva;	switch (cmd) {	case GM_GRFON:	  	dbp->dispen = 0x01;	  	break;	case GM_GRFOFF:		break;	case GM_GRFOVON:		dbp->opwen = 0xF;		dbp->drive = 0x10;		break;	case GM_GRFOVOFF:		dbp->opwen = 0;		dbp->drive = 0x01;		break;	/*	 * Remember UVA of mapping for GCDESCRIBE.	 * XXX this should be per-process.	 */	case GM_MAP:		gp->g_data = data;		break;	case GM_UNMAP:		gp->g_data = 0;		break;#ifdef HPUXCOMPAT	case GM_DESCRIBE:	{		struct grf_fbinfo *fi = (struct grf_fbinfo *)data;		struct grfinfo *gi = &gp->g_display;		int i;		/* feed it what HP-UX expects */		fi->id = gi->gd_id;		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->bpp = NBBY;		fi->xlen = (fi->width * fi->bpp) / NBBY;		fi->npl = gi->gd_planes;		fi->bppu = fi->npl;		fi->nplbytes = fi->xlen * ((fi->length * fi->bpp) / NBBY);		bcopy("HP98730", fi->name, 8);		fi->attr = 2;	/* HW block mover */		/*		 * If mapped, return the UVA where mapped.		 */		if (gp->g_data) {			fi->regbase = gp->g_data;			fi->fbbase = fi->regbase + gp->g_display.gd_regsize;		} else {			fi->fbbase = 0;			fi->regbase = 0;		}		for (i = 0; i < 6; i++)			fi->regions[i] = 0;		break;	}#endif	default:		error = EINVAL;		break;	}	return(error);}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -