xref: /csrg-svn/sys/luna68k/dev/fb.c (revision 63192)
157219Sakito /*-
257219Sakito  * Copyright (c) 1988 University of Utah.
357219Sakito  * Copyright (c) 1992 OMRON Corporation.
4*63192Sbostic  * Copyright (c) 1993, 19901992
5*63192Sbostic  *	The Regents of the University of California.  All rights reserved.
657219Sakito  *
757219Sakito  * %sccs.include.redist.c%
857219Sakito  *
957219Sakito  * from: hp/dev/grf.c		7.13 (Berkeley) 7/12/92
1057219Sakito  *
11*63192Sbostic  *	@(#)fb.c	8.1 (Berkeley) 06/10/93
1257219Sakito  */
1357219Sakito 
1457219Sakito /*
1557219Sakito  * fb.c -- frame-buffer device driver
1657219Sakito  *	by A.Fujita, Dec-16-1992
1757219Sakito  */
1857219Sakito 
1957219Sakito #include <sys/param.h>
2057219Sakito #include <sys/proc.h>
2157219Sakito #include <sys/ioctl.h>
2257219Sakito #include <luna68k/dev/fbio.h>
2357219Sakito 
2457772Sakito extern	int hz;
2557772Sakito 
2657772Sakito int	fb_erase_screen();
2757772Sakito 
2857219Sakito volatile struct fb_rfc *rfcPtr = (struct fb_rfc *) 0xB1000000;
2957219Sakito static   struct fb_rfc  rfcVal;
3057219Sakito 
3157219Sakito int
fbopen(dev,flags,mode,p)3257219Sakito fbopen(dev, flags, mode, p)
3357219Sakito 	dev_t dev;
3457219Sakito 	int flags, mode;
3557219Sakito 	struct proc *p;
3657219Sakito {
3757772Sakito 	fb_erase_screen();
3857772Sakito 
3957219Sakito 	return(0);
4057219Sakito }
4157219Sakito 
4257219Sakito int
fbclose(dev,flags,mode,p)4357219Sakito fbclose(dev, flags, mode, p)
4457219Sakito 	dev_t dev;
4557219Sakito 	int flags, mode;
4657219Sakito 	struct proc *p;
4757219Sakito {
4857772Sakito 	fb_adjust(7, -27);
4957772Sakito 
5057772Sakito 	timeout(fb_erase_screen, (caddr_t)0, hz);
5157772Sakito 
5257219Sakito 	return(0);
5357219Sakito }
5457219Sakito 
5557219Sakito int
fbioctl(dev,cmd,data,flags,p)5657219Sakito fbioctl(dev, cmd, data, flags, p)
5757219Sakito 	dev_t dev;
5857219Sakito 	int cmd;
5957219Sakito 	caddr_t data;
6057219Sakito 	int flags;
6157219Sakito 	struct proc *p;
6257219Sakito {
6357219Sakito 	struct fb_rfc *rfcp;
6457219Sakito 	int error;
6557219Sakito 
6657219Sakito 	error = 0;
6757219Sakito 	switch (cmd) {
6857219Sakito 
6957240Sakito 	case FBIOSETRFCT:
7057219Sakito 		*rfcPtr = rfcVal = *((struct fb_rfc *) data);
7157219Sakito 		break;
7257219Sakito 
7357219Sakito 	case FBIOGETRFCT:
7457219Sakito                 *(struct fb_rfc *)data = rfcVal;
7557219Sakito 		break;
7657219Sakito 
7757219Sakito 	default:
7857219Sakito 		error = EINVAL;
7957219Sakito 		break;
8057219Sakito 
8157219Sakito 	}
8257219Sakito 	return(error);
8357219Sakito }
8457219Sakito 
fb_adjust(hcnt,vcnt)8557219Sakito fb_adjust(hcnt, vcnt)
8657219Sakito 	int hcnt, vcnt;
8757219Sakito {
8857219Sakito 	rfcVal.rfc_hcnt = hcnt;			/* shift left   16 dot */
8957219Sakito 	rfcVal.rfc_vcnt = vcnt;			/* shift down    1 dot */
9057219Sakito 
9157219Sakito 	*rfcPtr = rfcVal;
9257219Sakito }
9357219Sakito 
9457772Sakito #define PL_WIDTH	64				/* Plane Width  (long) */
9557772Sakito 
9657772Sakito #define	SB_HIGHT	1024				/* Screen Hight  (Bit) */
9757772Sakito #define SL_WIDTH	40				/* Screen Width (Long) */
9857772Sakito 
9957772Sakito #define SKIP_NEXT_LINE(addr)			( addr += (PL_WIDTH - SL_WIDTH) )
10057772Sakito 
fb_erase_screen()10157772Sakito fb_erase_screen()
10257772Sakito {
10357772Sakito 	volatile register u_long *lp = (u_long *) 0xB1080008;
10457772Sakito 
10557772Sakito 	register int i, j;
10657772Sakito 
10757772Sakito 	for (i = 0; i < SB_HIGHT; i++) {
10857772Sakito 		for (j = 0; j < SL_WIDTH; j++)
10957772Sakito 			*lp++ = 0;
11057772Sakito 		SKIP_NEXT_LINE(lp);
11157772Sakito 	}
11257772Sakito 
11357772Sakito 	return;
11457772Sakito }
11557772Sakito 
11657219Sakito int
fbselect(dev,rw)11757219Sakito fbselect(dev, rw)
11857219Sakito 	dev_t dev;
11957219Sakito 	int rw;
12057219Sakito {
12157219Sakito 	return(0);
12257219Sakito }
12357219Sakito 
12457219Sakito int
fbmap(dev,off,prot)12557219Sakito fbmap(dev, off, prot)
12657219Sakito 	dev_t dev;
12757219Sakito 	int off, prot;
12857219Sakito {
12957219Sakito 	return(((u_int) 0xB10C0000 + off) >> PGSHIFT);
13057219Sakito }
131