xref: /csrg-svn/sys/sparc/dev/fb.c (revision 63318)
155105Storek /*
2*63318Sbostic  * Copyright (c) 1992, 1993
3*63318Sbostic  *	The Regents of the University of California.  All rights reserved.
455105Storek  *
555105Storek  * This software was developed by the Computer Systems Engineering group
655105Storek  * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
755105Storek  * contributed to Berkeley.
855105Storek  *
955499Sbostic  * All advertising materials mentioning features or use of this software
1055499Sbostic  * must display the following acknowledgement:
1155499Sbostic  *	This product includes software developed by the University of
1259188Storek  *	California, Lawrence Berkeley Laboratory.
1355499Sbostic  *
1455105Storek  * %sccs.include.redist.c%
1555105Storek  *
16*63318Sbostic  *	@(#)fb.c	8.1 (Berkeley) 06/11/93
1755105Storek  *
1859188Storek  * from: $Header: fb.c,v 1.7 92/11/26 01:12:48 torek Exp $
1955105Storek  */
2055105Storek 
2155105Storek /*
2255105Storek  * /dev/fb (indirect frame buffer driver).  This is gross; we should
2355105Storek  * just build cdevsw[] dynamically.
2455105Storek  */
2555105Storek 
2656536Sbostic #include <sys/param.h>
2756536Sbostic #include <sys/conf.h>
2856536Sbostic #include <sys/device.h>
2956536Sbostic #include <sys/proc.h>
3056536Sbostic #include <sys/fbio.h>
3155105Storek 
3256536Sbostic #include <machine/fbvar.h>
3355105Storek 
3455105Storek static struct fbdevice *devfb;
3555105Storek 
3655105Storek void
fb_unblank()3755105Storek fb_unblank()
3855105Storek {
3955105Storek 
4055105Storek 	if (devfb)
4155105Storek 		(*devfb->fb_driver->fbd_unblank)(devfb->fb_device);
4255105Storek }
4355105Storek 
4455105Storek void
fb_attach(fb)4555105Storek fb_attach(fb)
4655105Storek 	struct fbdevice *fb;
4755105Storek {
4855105Storek 
4955105Storek if (devfb) panic("multiple /dev/fb declarers");
5055105Storek 	devfb = fb;
5155105Storek }
5255105Storek 
5355105Storek int
fbopen(dev,flags,mode,p)5455105Storek fbopen(dev, flags, mode, p)
5555105Storek 	dev_t dev;
5655105Storek 	int flags, mode;
5755105Storek 	struct proc *p;
5855105Storek {
5955105Storek 
6055105Storek 	if (devfb == NULL)
6155105Storek 		return (ENXIO);
6255105Storek 	return (cdevsw[devfb->fb_major].d_open(dev, flags, mode, p));
6355105Storek }
6455105Storek 
6555105Storek int
fbclose(dev,flags,mode,p)6655105Storek fbclose(dev, flags, mode, p)
6755105Storek 	dev_t dev;
6855105Storek 	int flags, mode;
6955105Storek 	struct proc *p;
7055105Storek {
7155105Storek 
7255105Storek 	return (cdevsw[devfb->fb_major].d_close(dev, flags, mode, p));
7355105Storek }
7455105Storek 
7555105Storek int
fbioctl(dev,cmd,data,flags,p)7655105Storek fbioctl(dev, cmd, data, flags, p)
7755105Storek 	dev_t dev;
7855105Storek 	int cmd;
7955105Storek 	caddr_t data;
8055105Storek 	int flags;
8155105Storek 	struct proc *p;
8255105Storek {
8355105Storek 
8455105Storek 	return (cdevsw[devfb->fb_major].d_ioctl(dev, cmd, data, flags, p));
8555105Storek }
8655105Storek 
8755105Storek int
fbmap(dev,off,prot)8855105Storek fbmap(dev, off, prot)
8955105Storek 	dev_t dev;
9055105Storek 	int off, prot;
9155105Storek {
9255105Storek 	int (*map)() = cdevsw[devfb->fb_major].d_mmap;
9355105Storek 
9455105Storek 	if (map == NULL)
9555105Storek 		return (-1);
9655105Storek 	return (map(dev, off, prot));
9755105Storek }
98