1 /*        $NetBSD: grfioctl.h,v 1.13 2023/01/06 10:28:28 tsutsui Exp $          */
2 
3 /*
4  * Copyright (c) 1988 University of Utah.
5  * Copyright (c) 1990 The Regents of the University of California.
6  * All rights reserved.
7  *
8  * This code is derived from software contributed to Berkeley by
9  * the Systems Programming Group of the University of Utah Computer
10  * Science Department.
11  *
12  * Redistribution and use in source and binary forms, with or without
13  * modification, are permitted provided that the following conditions
14  * are met:
15  * 1. Redistributions of source code must retain the above copyright
16  *    notice, this list of conditions and the following disclaimer.
17  * 2. Redistributions in binary form must reproduce the above copyright
18  *    notice, this list of conditions and the following disclaimer in the
19  *    documentation and/or other materials provided with the distribution.
20  * 3. Neither the name of the University nor the names of its contributors
21  *    may be used to endorse or promote products derived from this software
22  *    without specific prior written permission.
23  *
24  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34  * SUCH DAMAGE.
35  *
36  * from: Utah $Hdr: grfioctl.h 1.1 90/07/09$
37  *
38  *        @(#)grfioctl.h      7.2 (Berkeley) 11/4/90
39  */
40 
41 #ifndef _MACHINE_GRFIOCTL_H_
42 #define _MACHINE_GRFIOCTL_H_
43 
44 #include <sys/ioccom.h>
45 
46 /* these are changeable values, encapsulated in their own structure, so
47    no the whole thing has to be copied when setting parameters. */
48 struct grfdyninfo {
49           int       gdi_fbx;  /* frame buffer x offset      */
50           int       gdi_fby;  /* frame buffer y offset      */
51           int       gdi_dwidth;         /* displayed part width                 */
52           int       gdi_dheight;        /* displayed part height      */
53           int       gdi_dx;             /* displayed part x offset    */
54           int       gdi_dy;             /* displayed part y offset    */
55 };
56 
57 struct    grfinfo {
58           void *    gd_fbaddr;          /* frame buffer linear physaddr         */
59           int       gd_fbsize;          /* frame buffer linear size   */
60           int       gd_linbase;         /* frame buffer linear base   */
61           void *    gd_regaddr;         /* register area physaddr     */
62           int       gd_regsize;         /* register area size                   */
63           void *gd_vgaaddr;   /* vga area physaddr                    */
64           int       gd_vgasize;         /* vga area size              */
65           int       gd_vgabase;         /* vga area base              */
66           short     gd_colors;          /* number of colors           */
67           short     gd_planes;          /* number of planes           */
68 
69           int       gd_fbwidth;         /* frame buffer width                   */
70           int       gd_fbheight;        /* frame buffer height                  */
71 
72           struct grfdyninfo gd_dyn; /* everything changeable by GRFIOCSINFO */
73 /* compatibility... */
74 #define gd_fbx                gd_dyn.gdi_fbx
75 #define gd_fby                gd_dyn.gdi_fby
76 #define gd_dwidth   gd_dyn.gdi_dwidth
77 #define gd_dheight  gd_dyn.gdi_dheight
78 #define gd_dx                 gd_dyn.gdi_dx
79 #define gd_dy                 gd_dyn.gdi_dy
80 
81           /* new for banked pager support */
82           int       gd_bank_size;                 /* size of a bank (or 0) */
83 };
84 
85 
86 /* video mode, should be display-independent, but it might need
87    modifications in the future to really become hardware-independent. */
88 
89 struct grfvideo_mode {
90   u_char  mode_num;           /* index in mode table */
91   char      mode_descr[80];   /* description of mode */
92   u_long  pixel_clock;                  /* in Hz. */
93   u_short disp_width;                   /* width of displayed video (incl overscan) */
94   u_short disp_height;                  /* height "" */
95   u_short depth;              /* number of bitplanes resp. bits per pixel */
96   u_short hblank_start;
97   u_short hblank_stop;
98   u_short hsync_start;                  /* video-parameters, take care not to   */
99   u_short hsync_stop;                   /* use parameters that violete specs of */
100   u_short htotal;             /* your monitor !                       */
101   u_short vblank_start;
102   u_short vblank_stop;
103   u_short vsync_start;
104   u_short vsync_stop;
105   u_short vtotal;
106 };
107 
108 
109 /*
110  * BSD ioctls
111  */
112 #define OGRFIOCGINFO          0x40344700                    /* to keep compat for a while... */
113 #define   GRFIOCGINFO         _IOR('G', 0, struct grfinfo) /* get info on device */
114 #define   GRFIOCON  _IO('G', 1)                   /* turn graphics on */
115 #define   GRFIOCOFF _IO('G', 2)                   /* turn graphics off */
116 #define GRFIOCMAP   _IOWR('G', 5, int)  /* map in regs+framebuffer */
117 #define GRFIOCUNMAP _IOW('G', 6, int)   /* unmap regs+framebuffer */
118 
119 /* amiga addons */
120           /* set info on device */
121 #define   GRFIOCSINFO         _IOW('G', 40, struct grfdyninfo)
122           /* get video_mode. mode_num==0 gets current mode. */
123 #define GRFGETVMODE _IOWR('G', 41, struct grfvideo_mode)
124           /* set video_mode. */
125 #define GRFSETVMODE _IOW('G', 42, int)
126           /* get number of configured video modes */
127 #define GRFGETNUMVM _IOR('G', 43, int)
128 
129 
130 /*
131  * generic framebuffer-related ioctls. These are somewhat
132  * similar to SunOS fb-ioctls since I liked them reading
133  * thru the X11-server code.
134  */
135 
136 /*
137  * colormap related information. Every grf has an associated
138  * colormap. Depending on the capabilities of the hardware, more
139  * or less of the information provided may be used.
140  * Maximum value of "index" can be deduced from grfinfo->gd_colors.
141  */
142 struct grf_colormap {
143   int      index;       /* start at red[index],green[index],blue[index] */
144   int      count;       /* till < red[index+count],... */
145   u_char *red;
146   u_char *green;
147   u_char *blue;
148 };
149 
150 /* write the selected slots into the active colormap */
151 #define GRFIOCPUTCMAP         _IOW('G', 50, struct grf_colormap)
152 
153 /* retrieve the selected slots from the active colormap */
154 #define GRFIOCGETCMAP         _IOWR('G', 51, struct grf_colormap)
155 
156 
157 /*
158  * support a possibly available hardware sprite. calls just fail
159  * if a given grf doesn't implement hardware sprites.
160  */
161 struct grf_position {
162   u_short x, y;               /* 0,0 is upper left corner */
163 };
164 #define GRFIOCSSPRITEPOS _IOW('G', 52, struct grf_position)
165 #define GRFIOCGSPRITEPOS _IOR('G', 53, struct grf_position)
166 
167 struct grf_spriteinfo {
168   u_short  set;
169 #define GRFSPRSET_ENABLE  (1<<0)
170 #define GRFSPRSET_POS           (1<<1)
171 #define GRFSPRSET_HOT           (1<<2)
172 #define GRFSPRSET_CMAP          (1<<3)
173 #define GRFSPRSET_SHAPE         (1<<4)
174 #define GRFSPRSET_ALL           0x1f
175   u_short  enable;      /* sprite is displayed if == 1 */
176   struct grf_position pos;  /* sprite location */
177   struct grf_position hot;  /* sprite hot spot */
178   struct grf_colormap cmap; /* colormap for the sprite. */
179   struct grf_position size; /* x == width, y == height */
180   u_char *image, *mask;           /* sprite bitmap and mask */
181 };
182 
183 #define GRFIOCSSPRITEINF _IOW('G', 54, struct grf_spriteinfo)
184 #define GRFIOCGSPRITEINF _IOR('G', 55, struct grf_spriteinfo)
185 
186 /* get maximum sprite size hardware can display */
187 #define GRFIOCGSPRITEMAX _IOR('G', 56, struct grf_position)
188 
189 
190 /* support for a BitBlt operation. The op-codes are identical
191    to X11 GCs */
192 #define   GRFBBOPclear                  0x0       /* 0 */
193 #define GRFBBOPand            0x1       /* src AND dst */
194 #define GRFBBOPandReverse     0x2       /* src AND NOT dst */
195 #define GRFBBOPcopy           0x3       /* src */
196 #define GRFBBOPandInverted    0x4       /* NOT src AND dst */
197 #define   GRFBBOPnoop                   0x5       /* dst */
198 #define GRFBBOPxor            0x6       /* src XOR dst */
199 #define GRFBBOPor             0x7       /* src OR dst */
200 #define GRFBBOPnor            0x8       /* NOT src AND NOT dst */
201 #define GRFBBOPequiv                    0x9       /* NOT src XOR dst */
202 #define GRFBBOPinvert                   0xa       /* NOT dst */
203 #define GRFBBOPorReverse      0xb       /* src OR NOT dst */
204 #define GRFBBOPcopyInverted   0xc       /* NOT src */
205 #define GRFBBOPorInverted     0xd       /* NOT src OR dst */
206 #define GRFBBOPnand           0xe       /* NOT src OR NOT dst */
207 #define GRFBBOPset            0xf       /* 1 */
208 
209 struct grf_bitblt {
210   u_short op;                 /* see above */
211   u_short src_x, src_y;       /* upper left corner of source-region */
212   u_short dst_x, dst_y;       /* upper left corner of dest-region */
213   u_short w, h;               /* width, height of region */
214   u_short mask;               /* bitmask to apply */
215 };
216 
217 #define GRFIOCBITBLT          _IOR('G', 57, struct grf_bitblt)
218 
219 #endif /* _MACHINE_GRFIOCTL_H_ */
220