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