Home | History | Annotate | Line # | Download | only in dev
grf_gv.c revision 1.12.26.1
      1  1.12.26.1       mjf /*	$NetBSD: grf_gv.c,v 1.12.26.1 2008/02/18 21:05:16 mjf Exp $	*/
      2        1.1       oki 
      3        1.1       oki /*
      4        1.1       oki  * Copyright (c) 1990, 1993
      5        1.1       oki  *	The Regents of the University of California.  All rights reserved.
      6        1.1       oki  *
      7        1.1       oki  * This code is derived from software contributed to Berkeley by
      8        1.1       oki  * the Systems Programming Group of the University of Utah Computer
      9        1.1       oki  * Science Department.
     10        1.1       oki  *
     11        1.1       oki  * Redistribution and use in source and binary forms, with or without
     12        1.1       oki  * modification, are permitted provided that the following conditions
     13        1.1       oki  * are met:
     14        1.1       oki  * 1. Redistributions of source code must retain the above copyright
     15        1.1       oki  *    notice, this list of conditions and the following disclaimer.
     16        1.1       oki  * 2. Redistributions in binary form must reproduce the above copyright
     17        1.1       oki  *    notice, this list of conditions and the following disclaimer in the
     18        1.1       oki  *    documentation and/or other materials provided with the distribution.
     19        1.8       agc  * 3. Neither the name of the University nor the names of its contributors
     20        1.8       agc  *    may be used to endorse or promote products derived from this software
     21        1.8       agc  *    without specific prior written permission.
     22        1.8       agc  *
     23        1.8       agc  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     24        1.8       agc  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     25        1.8       agc  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     26        1.8       agc  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     27        1.8       agc  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     28        1.8       agc  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     29        1.8       agc  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     30        1.8       agc  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     31        1.8       agc  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     32        1.8       agc  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     33        1.8       agc  * SUCH DAMAGE.
     34        1.8       agc  *
     35        1.8       agc  * from: Utah $Hdr: grf_tc.c 1.20 93/08/13$
     36        1.8       agc  *
     37        1.8       agc  *	@(#)grf_tc.c	8.4 (Berkeley) 1/12/94
     38        1.8       agc  */
     39        1.8       agc /*
     40        1.8       agc  * Copyright (c) 1988 University of Utah.
     41        1.8       agc  *
     42        1.8       agc  * This code is derived from software contributed to Berkeley by
     43        1.8       agc  * the Systems Programming Group of the University of Utah Computer
     44        1.8       agc  * Science Department.
     45        1.8       agc  *
     46        1.8       agc  * Redistribution and use in source and binary forms, with or without
     47        1.8       agc  * modification, are permitted provided that the following conditions
     48        1.8       agc  * are met:
     49        1.8       agc  * 1. Redistributions of source code must retain the above copyright
     50        1.8       agc  *    notice, this list of conditions and the following disclaimer.
     51        1.8       agc  * 2. Redistributions in binary form must reproduce the above copyright
     52        1.8       agc  *    notice, this list of conditions and the following disclaimer in the
     53        1.8       agc  *    documentation and/or other materials provided with the distribution.
     54        1.1       oki  * 3. All advertising materials mentioning features or use of this software
     55        1.1       oki  *    must display the following acknowledgement:
     56        1.1       oki  *	This product includes software developed by the University of
     57        1.1       oki  *	California, Berkeley and its contributors.
     58        1.1       oki  * 4. Neither the name of the University nor the names of its contributors
     59        1.1       oki  *    may be used to endorse or promote products derived from this software
     60        1.1       oki  *    without specific prior written permission.
     61        1.1       oki  *
     62        1.1       oki  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     63        1.1       oki  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     64        1.1       oki  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     65        1.1       oki  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     66        1.1       oki  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     67        1.1       oki  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     68        1.1       oki  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     69        1.1       oki  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     70        1.1       oki  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     71        1.1       oki  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     72        1.1       oki  * SUCH DAMAGE.
     73        1.1       oki  *
     74        1.1       oki  * from: Utah $Hdr: grf_tc.c 1.20 93/08/13$
     75        1.1       oki  *
     76        1.1       oki  *	@(#)grf_tc.c	8.4 (Berkeley) 1/12/94
     77        1.1       oki  */
     78        1.1       oki 
     79        1.1       oki /*
     80        1.1       oki  * Graphics routines for the X68K native custom chip set.
     81        1.1       oki  */
     82        1.7     lukem 
     83        1.7     lukem #include <sys/cdefs.h>
     84  1.12.26.1       mjf __KERNEL_RCSID(0, "$NetBSD: grf_gv.c,v 1.12.26.1 2008/02/18 21:05:16 mjf Exp $");
     85        1.4   thorpej 
     86        1.1       oki #include <sys/param.h>
     87        1.1       oki #include <sys/device.h>
     88        1.1       oki #include <sys/errno.h>
     89        1.1       oki 
     90        1.5   minoura #include <machine/grfioctl.h>
     91        1.5   minoura 
     92        1.1       oki #include <x68k/dev/grfvar.h>
     93        1.1       oki #include <x68k/x68k/iodevice.h>
     94        1.1       oki 
     95        1.1       oki #include <machine/cpu.h>
     96        1.3       oki 
     97       1.12  christos int gv_init(struct grf_softc *, void *);
     98       1.12  christos int gv_mode(struct grf_softc *, u_long, void *);
     99        1.1       oki 
    100        1.1       oki /* Initialize hardware.
    101        1.1       oki  * Must fill in the grfinfo structure in g_softc.
    102        1.1       oki  * Returns 0 if hardware not present, non-zero ow.
    103        1.1       oki  */
    104        1.2       oki int
    105       1.12  christos gv_init(struct grf_softc *gp, void *addr)
    106        1.1       oki {
    107        1.1       oki 	struct grfinfo *gi = &gp->g_display;
    108        1.1       oki 
    109        1.1       oki 	gi->gd_fbwidth  = 1024;
    110        1.1       oki 	gi->gd_fbheight = 1024;
    111        1.1       oki 	gi->gd_planes  = 4;
    112        1.1       oki 	gi->gd_regaddr = (void *)0x00e80000;
    113        1.1       oki 	gi->gd_regsize = 0x00010000;  /* contains system port */
    114        1.1       oki 	gi->gd_fbaddr  = (void *)0x00c00000;
    115        1.1       oki 	gi->gd_fbsize  = gi->gd_fbwidth * gi->gd_fbheight * 2;
    116        1.1       oki 	gp->g_regkva   = addr;
    117        1.1       oki 	gp->g_fbkva    = addr;
    118        1.1       oki 	switch(IODEVbase->io_sram[0x1d]) {
    119        1.1       oki 	case 18:
    120        1.1       oki 		/*
    121        1.1       oki 		 * mode 18, 24kHz
    122        1.1       oki 		 */
    123        1.1       oki 		gi->gd_dwidth  = 1024;
    124        1.1       oki 		gi->gd_dheight =  848;
    125        1.1       oki 		break;
    126        1.1       oki 	case 19:
    127        1.1       oki 		/*
    128        1.1       oki 		 * mode 19, 31kHz VGA mode
    129        1.1       oki 		 */
    130        1.1       oki 		gi->gd_dwidth  = 640;
    131        1.1       oki 		gi->gd_dheight = 480;
    132        1.1       oki 		break;
    133        1.1       oki 	default:
    134        1.1       oki 		/*
    135        1.1       oki 		 * mode 16, 31kHz (default)
    136        1.1       oki 		 */
    137        1.1       oki 		gi->gd_dwidth  = 768;
    138        1.1       oki 		gi->gd_dheight = 512;
    139        1.1       oki 		break;
    140        1.1       oki 	}
    141        1.1       oki 	gi->gd_colors  = 16;
    142        1.1       oki 
    143        1.9   minoura 	return 1;
    144        1.1       oki }
    145        1.1       oki 
    146        1.1       oki /*
    147        1.1       oki  * Change the mode of the display.
    148        1.1       oki  * Right now all we can do is grfon/grfoff.
    149        1.1       oki  * Return a UNIX error number or 0 for success.
    150        1.1       oki  */
    151        1.1       oki /*ARGSUSED*/
    152        1.2       oki int
    153       1.12  christos gv_mode(struct grf_softc *gp, u_long cmd, void *data)
    154        1.1       oki {
    155        1.1       oki 	int error = 0;
    156        1.1       oki 
    157        1.1       oki 	switch (cmd) {
    158        1.1       oki 	case GM_GRFON:
    159        1.1       oki 	case GM_GRFOFF:
    160        1.1       oki 		break;
    161        1.1       oki 
    162        1.1       oki 	/*
    163        1.1       oki 	 * Remember UVA of mapping for GCDESCRIBE.
    164        1.1       oki 	 * XXX this should be per-process.
    165        1.1       oki 	 */
    166        1.1       oki 	case GM_MAP:
    167        1.1       oki 		gp->g_data = data;
    168        1.1       oki 		break;
    169        1.1       oki 
    170        1.1       oki 	case GM_UNMAP:
    171        1.1       oki 		gp->g_data = 0;
    172        1.1       oki 		break;
    173        1.1       oki 
    174        1.1       oki 	case GM_GRFSETVMODE:
    175        1.1       oki 		if (*(int *)data == 1) {
    176        1.1       oki 			struct grfinfo *gi = &gp->g_display;
    177        1.1       oki 			volatile struct crtc *crtc = &IODEVbase->io_crtc;
    178        1.9   minoura 			/* Reset CRTC, set dwidth and dheight accordingly */
    179        1.1       oki 			crtc->r20 = (crtc->r20 & 0xFF00) | 0x1a;
    180        1.1       oki 			crtc->r08 = 0x1b;
    181        1.1       oki 			crtc->r07 = 0x19c;
    182        1.1       oki 			crtc->r06 = 0x1c;
    183        1.1       oki 			crtc->r05 = 0x02;
    184        1.1       oki 			crtc->r04 = 0x019f;
    185        1.1       oki 			crtc->r03 = 0x9a;
    186        1.1       oki 			crtc->r02 = 0x1a;
    187        1.1       oki 			crtc->r01 = 0x09;
    188        1.1       oki 			crtc->r00 = 0xa4;
    189        1.1       oki 			gi->gd_dwidth = 1024;
    190        1.1       oki 			gi->gd_dheight = 768;
    191        1.1       oki 		}
    192        1.1       oki 		break;
    193        1.1       oki 
    194        1.1       oki 	default:
    195        1.1       oki 		error = EINVAL;
    196        1.1       oki 		break;
    197        1.1       oki 	}
    198        1.9   minoura 	return error;
    199        1.1       oki }
    200