155105Storek /* 255105Storek * Copyright (c) 1992 The Regents of the University of California. 355105Storek * 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 1255499Sbostic * California, Lawrence Berkeley Laboratories. 1355499Sbostic * 1455105Storek * %sccs.include.redist.c% 1555105Storek * 16*56536Sbostic * @(#)fb.c 7.3 (Berkeley) 10/11/92 1755105Storek * 1855105Storek * from: $Header: fb.c,v 1.6 92/06/17 05:35:46 torek Exp $ 1955105Storek */ 2055105Storek 2155105Storek /* 2255105Storek * /dev/fb (indirect frame buffer driver). This is gross; we should 2355105Storek * just build cdevsw[] dynamically. 2455105Storek */ 2555105Storek 26*56536Sbostic #include <sys/param.h> 27*56536Sbostic #include <sys/conf.h> 28*56536Sbostic #include <sys/device.h> 29*56536Sbostic #include <sys/proc.h> 30*56536Sbostic #include <sys/fbio.h> 3155105Storek 32*56536Sbostic #include <machine/fbvar.h> 3355105Storek 3455105Storek static struct fbdevice *devfb; 3555105Storek 3655105Storek void 3755105Storek fb_unblank() 3855105Storek { 3955105Storek 4055105Storek if (devfb) 4155105Storek (*devfb->fb_driver->fbd_unblank)(devfb->fb_device); 4255105Storek } 4355105Storek 4455105Storek void 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 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 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 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 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