summaryrefslogtreecommitdiff
path: root/sys/arch/amiga/dev/grfioctl.h
blob: 5a2f6f4c6524b4f7f9c7a3a2c907bae219470eca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
/*	$OpenBSD: grfioctl.h,v 1.3 1997/01/16 09:24:29 niklas Exp $	*/
/*	$NetBSD: grfioctl.h,v 1.12 1996/06/03 18:55:08 is Exp $	*/

/*
 * Copyright (c) 1988 University of Utah.
 * Copyright (c) 1990 The Regents of the University of California.
 * All rights reserved.
 *
 * This code is derived from software contributed to Berkeley by
 * the Systems Programming Group of the University of Utah Computer
 * Science Department.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *	This product includes software developed by the University of
 *	California, Berkeley and its contributors.
 * 4. Neither the name of the University nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 * from: Utah $Hdr: grfioctl.h 1.1 90/07/09$
 *
 *	@(#)grfioctl.h	7.2 (Berkeley) 11/4/90
 */


/* these are changeable values, encapsulated in their own structure, so
   no the whole thing has to be copied when setting parameters. */
struct grfdyninfo {
	int	gdi_fbx;			/* frame buffer x offset */
	int	gdi_fby;			/* frame buffer y offset */
	int	gdi_dwidth;		/* displayed part width */
	int	gdi_dheight;		/* displayed part height */
	int	gdi_dx;			/* displayed part x offset */
	int	gdi_dy;			/* displayed part y offset */ 
};

struct	grfinfo {
	caddr_t	gd_regaddr;		/* control registers physaddr */
	int	gd_regsize;		/* control registers size */
	caddr_t	gd_fbaddr;		/* frame buffer physaddr */
	int	gd_fbsize;		/* frame buffer size */
	short	gd_colors;		/* number of colors */
	short	gd_planes;		/* number of planes */

	int	gd_fbwidth;		/* frame buffer width */
	int	gd_fbheight;		/* frame buffer height */

	struct grfdyninfo gd_dyn;	/* everything changable by GRFIOCSINFO */
/* compatibility... */
#define gd_fbx		gd_dyn.gdi_fbx
#define gd_fby		gd_dyn.gdi_fby
#define gd_dwidth 	gd_dyn.gdi_dwidth
#define gd_dheight	gd_dyn.gdi_dheight
#define gd_dx		gd_dyn.gdi_dx
#define gd_dy		gd_dyn.gdi_dy

	/* new for banked pager support */
	int	gd_bank_size;		/* size of a bank (or 0) */
};


/* video mode, should be display-independant, but it might need 
   modifications in the future to really become hardware-independant. */

struct grfvideo_mode {
  u_char  mode_num;		/* index in mode table */
  char	  mode_descr[80];	/* description of mode */
  u_long  pixel_clock;		/* in Hz. */
  u_short disp_width;		/* width of displayed video (incl overscan) */
  u_short disp_height;		/* height "" */
  u_short depth;		/* number of bitplanes resp. bits per pixel */
  u_short hblank_start;		
  u_short hblank_stop;		
  u_short hsync_start;		/* video-parameters, take care not to   */
  u_short hsync_stop;		/* use parameters that violete specs of */
  u_short htotal;		/* your monitor !                       */
  u_short vblank_start;
  u_short vblank_stop;
  u_short vsync_start;
  u_short vsync_stop;
  u_short vtotal;
};


/*
 * BSD ioctls
 */
#define OGRFIOCGINFO	0x40344700		/* to keep compat for a while... */
#define	GRFIOCGINFO	_IOR('G', 0, struct grfinfo) /* get info on device */
#define	GRFIOCON	_IO('G', 1)		/* turn graphics on */
#define	GRFIOCOFF	_IO('G', 2)		/* turn graphics off */
#define GRFIOCMAP	_IOWR('G', 5, int)	/* map in regs+framebuffer */
#define GRFIOCUNMAP	_IOW('G', 6, int)	/* unmap regs+framebuffer */

/* amiga addons */
	/* set info on device */
#define	GRFIOCSINFO	_IOW('G', 40, struct grfdyninfo)
	/* get video_mode. mode_num==0 gets current mode. */
#define GRFGETVMODE	_IOWR('G', 41, struct grfvideo_mode)
	/* set video_mode. */
#define GRFSETVMODE	_IOW('G', 42, int)
	/* get number of configured video modes */
#define GRFGETNUMVM	_IOR('G', 43, int)
	/* toggle between Cirrus and ECS, ill */
#define GRFTOGGLE	_IO('G', 44)
	/* load in a display mode */
#define GRFIOCSETMON	_IOW('G', 45, struct grfvideo_mode)

/*
 * generic framebuffer-related ioctls. These are somewhat
 * similar to SunOS fb-ioctls since I liked them reading
 * thru the X11-server code. 
 */

/*
 * colormap related information. Every grf has an associated
 * colormap. Depending on the capabilities of the hardware, more
 * or less of the information provided may be used.
 * Maxium value of "index" can be deduced from grfinfo->gd_colors.
 */
struct grf_colormap {
  int	 index;	    /* start at red[index],green[index],blue[index] */
  int	 count;	    /* till < red[index+count],... */
  u_char *red;
  u_char *green;
  u_char *blue;
};

/* write the selected slots into the active colormap */
#define GRFIOCPUTCMAP	_IOW('G', 50, struct grf_colormap)

/* retrieve the selected slots from the active colormap */
#define GRFIOCGETCMAP	_IOWR('G', 51, struct grf_colormap)


/*
 * support a possibly available hardware sprite. calls just fail
 * if a given grf doesn't implement hardware sprites.
 */
struct grf_position {
  u_short x, y;		/* 0,0 is upper left corner */
};
#define GRFIOCSSPRITEPOS _IOW('G', 52, struct grf_position)
#define GRFIOCGSPRITEPOS _IOR('G', 53, struct grf_position)

struct grf_spriteinfo {
  u_short  set;
#define GRFSPRSET_ENABLE  (1<<0)
#define GRFSPRSET_POS	  (1<<1)
#define GRFSPRSET_HOT	  (1<<2)
#define GRFSPRSET_CMAP	  (1<<3)
#define GRFSPRSET_SHAPE	  (1<<4)
#define GRFSPRSET_ALL	  0x1f
  u_short  enable;	    /* sprite is displayed if == 1 */
  struct grf_position pos;  /* sprite location */
  struct grf_position hot;  /* sprite hot spot */
  struct grf_colormap cmap; /* colormap for the sprite. */
  struct grf_position size; /* x == width, y == height */
  u_char *image, *mask;	    /* sprite bitmap and mask */
};

#define GRFIOCSSPRITEINF _IOW('G', 54, struct grf_spriteinfo)
#define GRFIOCGSPRITEINF _IOR('G', 55, struct grf_spriteinfo)

/* get maximum sprite size hardware can display */
#define GRFIOCGSPRITEMAX _IOR('G', 56, struct grf_position)


/* support for a BitBlt operation. The op-codes are identical
   to X11 GCs */
#define	GRFBBOPclear		0x0	/* 0 */
#define GRFBBOPand		0x1	/* src AND dst */
#define GRFBBOPandReverse	0x2	/* src AND NOT dst */
#define GRFBBOPcopy		0x3	/* src */
#define GRFBBOPandInverted	0x4	/* NOT src AND dst */
#define	GRFBBOPnoop		0x5	/* dst */
#define GRFBBOPxor		0x6	/* src XOR dst */
#define GRFBBOPor		0x7	/* src OR dst */
#define GRFBBOPnor		0x8	/* NOT src AND NOT dst */
#define GRFBBOPequiv		0x9	/* NOT src XOR dst */
#define GRFBBOPinvert		0xa	/* NOT dst */
#define GRFBBOPorReverse	0xb	/* src OR NOT dst */
#define GRFBBOPcopyInverted	0xc	/* NOT src */
#define GRFBBOPorInverted	0xd	/* NOT src OR dst */
#define GRFBBOPnand		0xe	/* NOT src OR NOT dst */
#define GRFBBOPset		0xf	/* 1 */

struct grf_bitblt {
  u_short op;		/* see above */
  u_short src_x, src_y;	/* upper left corner of source-region */
  u_short dst_x, dst_y;	/* upper left corner of dest-region */
  u_short w, h;		/* width, height of region */
  u_short mask;		/* bitmask to apply */
};

#define GRFIOCBITBLT	_IOW('G', 57, struct grf_bitblt)

/* can't use IOCON/OFF because that would turn ite on */
#define GRFIOCBLANK	_IOW('G', 58, int)

#define GRFIOCBLANK_LIVE	1
#define GRFIOCBLANK_DARK	0