xref: /csrg-svn/sys/sparc/dev/fb.c (revision 55105)
1*55105Storek /*
2*55105Storek  * Copyright (c) 1992 The Regents of the University of California.
3*55105Storek  * All rights reserved.
4*55105Storek  *
5*55105Storek  * This software was developed by the Computer Systems Engineering group
6*55105Storek  * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
7*55105Storek  * contributed to Berkeley.
8*55105Storek  *
9*55105Storek  * %sccs.include.redist.c%
10*55105Storek  *
11*55105Storek  *	@(#)fb.c	7.1 (Berkeley) 07/13/92
12*55105Storek  *
13*55105Storek  * from: $Header: fb.c,v 1.6 92/06/17 05:35:46 torek Exp $
14*55105Storek  */
15*55105Storek 
16*55105Storek /*
17*55105Storek  * /dev/fb (indirect frame buffer driver).  This is gross; we should
18*55105Storek  * just build cdevsw[] dynamically.
19*55105Storek  */
20*55105Storek 
21*55105Storek #include "sys/param.h"
22*55105Storek #include "sys/conf.h"
23*55105Storek #include "sys/device.h"
24*55105Storek #include "sys/proc.h"
25*55105Storek #include "sys/fbio.h"
26*55105Storek 
27*55105Storek #include "machine/fbvar.h"
28*55105Storek 
29*55105Storek static struct fbdevice *devfb;
30*55105Storek 
31*55105Storek void
32*55105Storek fb_unblank()
33*55105Storek {
34*55105Storek 
35*55105Storek 	if (devfb)
36*55105Storek 		(*devfb->fb_driver->fbd_unblank)(devfb->fb_device);
37*55105Storek }
38*55105Storek 
39*55105Storek void
40*55105Storek fb_attach(fb)
41*55105Storek 	struct fbdevice *fb;
42*55105Storek {
43*55105Storek 
44*55105Storek if (devfb) panic("multiple /dev/fb declarers");
45*55105Storek 	devfb = fb;
46*55105Storek }
47*55105Storek 
48*55105Storek int
49*55105Storek fbopen(dev, flags, mode, p)
50*55105Storek 	dev_t dev;
51*55105Storek 	int flags, mode;
52*55105Storek 	struct proc *p;
53*55105Storek {
54*55105Storek 
55*55105Storek 	if (devfb == NULL)
56*55105Storek 		return (ENXIO);
57*55105Storek 	return (cdevsw[devfb->fb_major].d_open(dev, flags, mode, p));
58*55105Storek }
59*55105Storek 
60*55105Storek int
61*55105Storek fbclose(dev, flags, mode, p)
62*55105Storek 	dev_t dev;
63*55105Storek 	int flags, mode;
64*55105Storek 	struct proc *p;
65*55105Storek {
66*55105Storek 
67*55105Storek 	return (cdevsw[devfb->fb_major].d_close(dev, flags, mode, p));
68*55105Storek }
69*55105Storek 
70*55105Storek int
71*55105Storek fbioctl(dev, cmd, data, flags, p)
72*55105Storek 	dev_t dev;
73*55105Storek 	int cmd;
74*55105Storek 	caddr_t data;
75*55105Storek 	int flags;
76*55105Storek 	struct proc *p;
77*55105Storek {
78*55105Storek 
79*55105Storek 	return (cdevsw[devfb->fb_major].d_ioctl(dev, cmd, data, flags, p));
80*55105Storek }
81*55105Storek 
82*55105Storek int
83*55105Storek fbmap(dev, off, prot)
84*55105Storek 	dev_t dev;
85*55105Storek 	int off, prot;
86*55105Storek {
87*55105Storek 	int (*map)() = cdevsw[devfb->fb_major].d_mmap;
88*55105Storek 
89*55105Storek 	if (map == NULL)
90*55105Storek 		return (-1);
91*55105Storek 	return (map(dev, off, prot));
92*55105Storek }
93