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