]> git.saurik.com Git - apple/xnu.git/blob - osfmk/ppc/screen.h
dd81dadb3d29d20374c446604375a7c6d4adca1b
[apple/xnu.git] / osfmk / ppc / screen.h
1 /*
2 * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * The contents of this file constitute Original Code as defined in and
7 * are subject to the Apple Public Source License Version 1.1 (the
8 * "License"). You may not use this file except in compliance with the
9 * License. Please obtain a copy of the License at
10 * http://www.apple.com/publicsource and read it before using this file.
11 *
12 * This Original Code and all software distributed under the License are
13 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
17 * License for the specific language governing rights and limitations
18 * under the License.
19 *
20 * @APPLE_LICENSE_HEADER_END@
21 */
22 /*
23 * @OSF_COPYRIGHT@
24 */
25 /*
26 * Mach Operating System
27 * Copyright (c) 1991,1990,1989 Carnegie Mellon University
28 * All Rights Reserved.
29 *
30 * Permission to use, copy, modify and distribute this software and its
31 * documentation is hereby granted, provided that both the copyright
32 * notice and this permission notice appear in all copies of the
33 * software, derivative works or modified versions, and any portions
34 * thereof, and that both notices appear in supporting documentation.
35 *
36 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
37 * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
38 * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
39 *
40 * Carnegie Mellon requests users of this software to return to
41 *
42 * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
43 * School of Computer Science
44 * Carnegie Mellon University
45 * Pittsburgh PA 15213-3890
46 *
47 * any improvements or extensions that they make and grant Carnegie Mellon
48 * the rights to redistribute these changes.
49 */
50 /*
51 */
52 /*
53 * File: screen.h
54 * Author: Alessandro Forin, Carnegie Mellon University
55 * Date: 9/90
56 *
57 * Definitions for the Generic Screen Driver.
58 */
59
60 #ifndef _SCREEN_H_
61 #define _SCREEN_H_
62
63 /*
64 * Most of these structures are defined so that the
65 * resulting structure mapped to user space appears
66 * to be compatible with the one used by the DEC X
67 * servers (pm_info..). Keep it that way and the
68 * X servers will keep on running.
69 */
70
71 /*
72 * Generic structures and defines
73 */
74
75 /* colors */
76 typedef struct {
77 unsigned short red;
78 unsigned short green;
79 unsigned short blue;
80 } color_map_t;
81
82 typedef struct {
83 short unused;
84 unsigned short index;
85 color_map_t value;
86 } color_map_entry_t;
87
88 typedef struct {
89 unsigned int Bg_rgb[3];
90 unsigned int Fg_rgb[3];
91 } cursor_color_t;
92
93 /* generic input event */
94 typedef struct {
95 short x; /* x position */
96 short y; /* y position */
97 unsigned int time; /* 1 millisecond units */
98
99 unsigned char type; /* button up/down/raw or motion */
100 # define EVT_BUTTON_UP 0
101 # define EVT_BUTTON_DOWN 1
102 # define EVT_BUTTON_RAW 2
103 # define EVT_PTR_MOTION 3
104
105 unsigned char key; /* the key (button only) */
106 # define KEY_LEFT_BUTTON 1
107 # define KEY_MIDDLE_BUTTON 2
108 # define KEY_RIGHT_BUTTON 3
109 # define KEY_TBL_LEFT_BUTTON 0
110 # define KEY_TBL_FRONT_BUTTON 1
111 # define KEY_TBL_RIGHT_BUTTON 2
112 # define KEY_TBL_BACK_BUTTON 3
113
114 unsigned char index; /* which instance of device */
115
116 unsigned char device; /* which device */
117 # define DEV_NULL 0
118 # define DEV_MOUSE 1
119 # define DEV_KEYBD 2
120 # define DEV_TABLET 3
121 # define DEV_AUX 4
122 # define DEV_CONSOLE 5
123 # define DEV_KNOB 8
124 # define DEV_JOYSTICK 9
125
126 } screen_event_t;
127
128 /* timed coordinate info */
129 typedef struct {
130 unsigned int time;
131 short x, y;
132 } screen_timed_point_t;
133
134 /* queue of input events, and ring of mouse motions track */
135 typedef struct {
136 screen_event_t *events;
137 unsigned int q_size;
138 unsigned int q_head;
139 unsigned int q_tail;
140 unsigned long timestamp;
141 screen_timed_point_t *track;
142 unsigned int t_size;
143 unsigned int t_next;
144 } screen_evque_t;
145
146 /* mouse/cursor position */
147 typedef struct {
148 short x;
149 short y;
150 } screen_point_t;
151
152 /* mouse motion bounding boxes */
153 typedef struct {
154 short bottom;
155 short right;
156 short left;
157 short top;
158 } screen_rect_t;
159
160 /*
161 * Here it is, each field is marked as
162 *
163 * Kset : kernel sets it unconditionally
164 * Kuse : kernel uses it, safely
165 * Kdep : kernel might depend on it
166 */
167 typedef struct {
168 screen_evque_t evque; /* Kset, Kuse */
169 short mouse_buttons; /* Kset */
170 screen_point_t xx3 /*tablet*/;
171 short xx4 /*tswitches*/;
172 screen_point_t cursor; /* Kset */
173 short row; /* Kdep */
174 short col; /* Kdep */
175 short max_row; /* Kdep */
176 short max_col; /* Kdep */
177 short max_x; /* Kset */
178 short max_y; /* Kset */
179 short max_cur_x; /* Kdep */
180 short max_cur_y; /* Kdep */
181 int version; /* Kset */
182 union {
183 struct {
184 unsigned char * bitmap; /* Kset */
185 short * x16 /*scanmap*/;
186 short * x17 /*cursorbits*/;
187 short * x18 /*pmaddr*/;
188 unsigned char * planemask; /* Kset */
189 } pm;
190 struct {
191 int x15 /* flags */;
192 int * gram /* Kset */;
193 int * rb_addr /* Kset */;
194 int rb_phys /* Kset */;
195 int rb_size /* Kset */;
196 } gx;
197 } dev_dep_1;
198 screen_point_t mouse_loc; /* Kdep */
199 screen_rect_t mouse_box; /* Kdep */
200 short mouse_threshold;/* Kuse */
201 short mouse_scale; /* Kuse */
202 short min_cur_x; /* Kdep */
203 short min_cur_y; /* Kdep */
204 union {
205 struct {
206 int x26 /*dev_type*/;
207 char * x27 /*framebuffer*/;
208 char * x28 /*volatile struct bt459 *bt459*/;
209 int x29 /*slot*/;
210 char cursor_sprite[1024];/* Kset */
211 unsigned char Bg_color[3]; /* Kset */
212 unsigned char Fg_color[3]; /* Kset */
213 int tablet_scale_x; /* Kuse */
214 int tablet_scale_y; /* Kuse */
215 } pm;
216 struct {
217 char * gxo /* Kset */;
218 char stamp_width /* Kset */;
219 char stamp_height /* Kset */;
220 char nplanes /* Kset */;
221 char x27_4 /* n10_present */;
222 char x28_1 /* dplanes */;
223 char zplanes /* Kset */;
224 char zzplanes /* Kset */;
225 unsigned char cursor_sprite[1024] /* Kuse */;
226 char x285_0 /* padding for next, which was int */;
227 unsigned char Fg_color[4] /* Kuse */;
228 unsigned char Bg_color[4] /* Kuse */;
229 unsigned short cmap_index /* Kuse */;
230 unsigned short cmap_count /* Kuse */;
231 unsigned int colormap[256] /* Kuse */;
232 int * stic_dma_rb /* Kset */;
233 int * stic_reg /* Kset */;
234 int ptpt_phys /* Kdep */;
235 int ptpt_size /* Kdep */;
236 int * ptpt_pgin /* Kset */;
237 } gx;
238 } dev_dep_2;
239 short frame_scanline_width; /* in pixels, Kset */
240 short frame_height; /* in scanlines, Kset */
241 /*
242 * Event queues are allocated right after that
243 */
244 #define MAX_EVENTS 64
245 #define MAX_TRACK 100
246 screen_event_t event_queue[MAX_EVENTS]; /* Kset */
247 screen_timed_point_t point_track[MAX_TRACK]; /* Kset */
248 /*
249 * Some like it hot
250 */
251 unsigned int event_id;
252 int interrupt_info;
253 } user_info_t;
254
255
256 /*
257 * Screen get_status codes and arguments
258 */
259 #include <sys/ioctl.h>
260
261 /* Get size (and offset) of mapped info */
262 #define SCREEN_GET_OFFSETS _IOR('q', 6, unsigned **)
263
264 /* Get screen status flags */
265 #define SCREEN_STATUS_FLAGS _IOR('q', 22, int *)
266 # define MONO_SCREEN 0x01
267 # define COLOR_SCREEN 0x02
268 # define SCREEN_BEING_UPDATED 0x04
269
270 /*
271 * Screen set_status codes and arguments
272 */
273
274 /* start/stop screen saver, control fading interval */
275 #define SCREEN_FADE _IOW('q', 114, int) /* fade screen */
276 # define NO_FADE -1
277
278 /* Turn video on/off manually */
279 #define SCREEN_ON _IO('q', 10)
280 #define SCREEN_OFF _IO('q', 11)
281
282 /* Fixup pointers inside mapped info structure */
283 #define SCREEN_ADJ_MAPPED_INFO _IOR('q', 1, user_info_t *)
284
285 /* Initialize anything that needs to, hw-wise */
286 #define SCREEN_INIT _IO('q', 4)
287
288 /* Position cursor to a specific spot */
289 #define SCREEN_SET_CURSOR _IOW('q', 2, screen_point_t)
290
291 /* Load Bg/Fg colors for cursor */
292 #define SCREEN_SET_CURSOR_COLOR _IOW('q', 3, cursor_color_t)
293
294 /* Load cursor sprite, small cursor form */
295 typedef unsigned short cursor_sprite_t[32];
296
297 #define SCREEN_LOAD_CURSOR _IOW('q', 7, cursor_sprite_t)
298
299 /* Load cursor sprite, large 64x64 cursor form */
300 typedef char cursor_sprite_long_t[1024];
301
302 #define SCREEN_LOAD_CURSOR_LONG _IOW('q', 13, cursor_sprite_long_t)
303
304 /* Modify a given entry in the color map (VDAC) */
305 #define SCREEN_SET_CMAP_ENTRY _IOW('q', 12, color_map_entry_t)
306
307 /* Return some other information about hardware (optional) */
308 typedef struct {
309 int frame_width;
310 int frame_height;
311 int frame_visible_width;
312 int frame_visible_height;
313 } screen_hw_info_t;
314 #define SCREEN_HARDWARE_INFO _IOR('q', 23, screen_hw_info_t)
315
316 /* Screen-dependent, unspecified (and despised) */
317 #define SCREEN_HARDWARE_DEP _IO('q', 24)
318
319 #endif /* _SCREEN_H_ */