1 /*        $NetBSD: fbvar.h,v 1.13 2016/04/21 18:06:06 macallan Exp $ */
2 
3 /*
4  * Copyright (c) 1992, 1993
5  *        The Regents of the University of California.  All rights reserved.
6  *
7  * This software was developed by the Computer Systems Engineering group
8  * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
9  * contributed to Berkeley.
10  *
11  * All advertising materials mentioning features or use of this software
12  * must display the following acknowledgement:
13  *        This product includes software developed by the University of
14  *        California, Lawrence Berkeley Laboratory.
15  *
16  * Redistribution and use in source and binary forms, with or without
17  * modification, are permitted provided that the following conditions
18  * are met:
19  * 1. Redistributions of source code must retain the above copyright
20  *    notice, this list of conditions and the following disclaimer.
21  * 2. Redistributions in binary form must reproduce the above copyright
22  *    notice, this list of conditions and the following disclaimer in the
23  *    documentation and/or other materials provided with the distribution.
24  * 3. Neither the name of the University nor the names of its contributors
25  *    may be used to endorse or promote products derived from this software
26  *    without specific prior written permission.
27  *
28  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
29  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
30  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
31  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
32  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
33  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
34  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
35  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
36  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
37  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
38  * SUCH DAMAGE.
39  *
40  *        @(#)fbvar.h         8.1 (Berkeley) 6/11/93
41  */
42 
43 /*
44  * Frame buffer variables.  All frame buffer drivers must provide the
45  * following in order to participate.
46  */
47 
48 #include <sys/event.h>
49 
50 #include <dev/rcons/rcons.h>
51 #include <dev/wscons/wsdisplayvar.h>
52 #include <dev/rasops/rasops.h>
53 
54 struct fbdriver {
55           /* device unblank function (force kernel output to display) */
56           void      (*fbd_unblank)(device_t);
57           int       (*fbd_open)(dev_t, int, int, struct lwp *);
58           int       (*fbd_close)(dev_t, int, int, struct lwp *);
59           int       (*fbd_ioctl)(dev_t, u_long, void *, int, struct lwp *);
60           int       (*fbd_poll)(dev_t, int, struct lwp *);
61           paddr_t   (*fbd_mmap)(dev_t, off_t, int);
62           int       (*fbd_kqfilter)(dev_t, struct knote *);
63 #ifdef notyet
64           /*
65            * XXX redundant idea? these can hook into rasops on a per-device
66            * basis like: fb_rinfo.ri_ops.copycols = ....;
67            */
68           void      (*fbd_wrrop)();               /* `write region' rasterop */
69           void      (*fbd_cprop)();               /* `copy region' rasterop */
70           void      (*fbd_clrop)();               /* `clear region' rasterop */
71 #endif
72 };
73 
74 struct fbdevice {
75           int       fb_major;           /* XXX */
76           struct    fbtype fb_type;               /* what it says */
77           void *    fb_pixels;                    /* display RAM */
78           int       fb_linebytes;                 /* bytes per display line */
79 
80           struct    fbdriver *fb_driver;          /* pointer to driver */
81           device_t  fb_device;          /* parameter for fbd_unblank */
82 
83           int       fb_flags;           /* misc. flags */
84 #define   FB_FORCE  0x00000001          /* force device into /dev/fb */
85 #define   FB_PFOUR  0x00010000          /* indicates fb is a pfour fb */
86 #define FB_USERMASK (FB_FORCE)          /* flags that the user can set */
87 
88           volatile u_int32_t *fb_pfour; /* pointer to pfour register */
89 };
90 
91 void      fb_attach(struct fbdevice *, int);
92 void      fb_setsize_obp(struct fbdevice *, int, int, int, int);
93 void      fb_setsize_eeprom(struct fbdevice *, int, int, int);
94 void      fb_setsize_pfour(struct fbdevice *);
95 int       fb_is_console(int);
96 #ifdef RASTERCONSOLE
97 void      fbrcons_init(struct fbdevice *);
98 int       fbrcons_rows(void);
99 int       fbrcons_cols(void);
100 #endif
101 
102 int       fb_pfour_id(volatile void *);
103 int       fb_pfour_get_video(struct fbdevice *);
104 void      fb_pfour_set_video(struct fbdevice *, int);
105