summaryrefslogtreecommitdiff
path: root/chips/screen.h
diff options
context:
space:
mode:
authorThomas Bushnell <thomas@gnu.org>1997-02-25 21:28:37 +0000
committerThomas Bushnell <thomas@gnu.org>1997-02-25 21:28:37 +0000
commitf07a4c844da9f0ecae5bbee1ab94be56505f26f7 (patch)
tree12b07c7e578fc1a5f53dbfde2632408491ff2a70 /chips/screen.h
Initial source
Diffstat (limited to 'chips/screen.h')
-rw-r--r--chips/screen.h289
1 files changed, 289 insertions, 0 deletions
diff --git a/chips/screen.h b/chips/screen.h
new file mode 100644
index 0000000..69154d4
--- /dev/null
+++ b/chips/screen.h
@@ -0,0 +1,289 @@
+/*
+ * Mach Operating System
+ * Copyright (c) 1991,1990,1989 Carnegie Mellon University
+ * All Rights Reserved.
+ *
+ * Permission to use, copy, modify and distribute this software and its
+ * documentation is hereby granted, provided that both the copyright
+ * notice and this permission notice appear in all copies of the
+ * software, derivative works or modified versions, and any portions
+ * thereof, and that both notices appear in supporting documentation.
+ *
+ * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
+ * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
+ * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
+ *
+ * Carnegie Mellon requests users of this software to return to
+ *
+ * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
+ * School of Computer Science
+ * Carnegie Mellon University
+ * Pittsburgh PA 15213-3890
+ *
+ * any improvements or extensions that they make and grant Carnegie Mellon
+ * the rights to redistribute these changes.
+ */
+/*
+ * File: screen.h
+ * Author: Alessandro Forin, Carnegie Mellon University
+ * Date: 9/90
+ *
+ * Definitions for the Generic Screen Driver.
+ */
+
+/*
+ * Most of these structures are defined so that the
+ * resulting structure mapped to user space appears
+ * to be compatible with the one used by the DEC X
+ * servers (pm_info..). Keep it that way and the
+ * X servers will keep on running.
+ */
+
+/*
+ * Generic structures and defines
+ */
+
+/* colors */
+typedef struct {
+ unsigned short red;
+ unsigned short green;
+ unsigned short blue;
+} color_map_t;
+
+typedef struct {
+ short unused;
+ unsigned short index;
+ color_map_t value;
+} color_map_entry_t;
+
+typedef struct {
+ unsigned int Bg_rgb[3];
+ unsigned int Fg_rgb[3];
+} cursor_color_t;
+
+/* generic input event */
+typedef struct {
+ short x; /* x position */
+ short y; /* y position */
+ unsigned int time; /* 1 millisecond units */
+
+ unsigned char type; /* button up/down/raw or motion */
+# define EVT_BUTTON_UP 0
+# define EVT_BUTTON_DOWN 1
+# define EVT_BUTTON_RAW 2
+# define EVT_PTR_MOTION 3
+
+ unsigned char key; /* the key (button only) */
+# define KEY_LEFT_BUTTON 1
+# define KEY_MIDDLE_BUTTON 2
+# define KEY_RIGHT_BUTTON 3
+# define KEY_TBL_LEFT_BUTTON 0
+# define KEY_TBL_FRONT_BUTTON 1
+# define KEY_TBL_RIGHT_BUTTON 2
+# define KEY_TBL_BACK_BUTTON 3
+
+ unsigned char index; /* which instance of device */
+
+ unsigned char device; /* which device */
+# define DEV_NULL 0
+# define DEV_MOUSE 1
+# define DEV_KEYBD 2
+# define DEV_TABLET 3
+# define DEV_AUX 4
+# define DEV_CONSOLE 5
+# define DEV_KNOB 8
+# define DEV_JOYSTICK 9
+
+} screen_event_t;
+
+/* timed coordinate info */
+typedef struct {
+ unsigned int time;
+ short x, y;
+} screen_timed_point_t;
+
+/* queue of input events, and ring of mouse motions track */
+typedef struct {
+ screen_event_t *events;
+ unsigned int q_size;
+ unsigned int q_head;
+ unsigned int q_tail;
+ unsigned long timestamp;
+ screen_timed_point_t *track;
+ unsigned int t_size;
+ unsigned int t_next;
+} screen_evque_t;
+
+/* mouse/cursor position */
+typedef struct {
+ short x;
+ short y;
+} screen_point_t;
+
+/* mouse motion bounding boxes */
+typedef struct {
+ short bottom;
+ short right;
+ short left;
+ short top;
+} screen_rect_t;
+
+/*
+ * Here it is, each field is marked as
+ *
+ * Kset : kernel sets it unconditionally
+ * Kuse : kernel uses it, safely
+ * Kdep : kernel might depend on it
+ */
+typedef struct {
+ screen_evque_t evque; /* Kset, Kuse */
+ short mouse_buttons; /* Kset */
+ screen_point_t xx3 /*tablet*/;
+ short xx4 /*tswitches*/;
+ screen_point_t cursor; /* Kset */
+ short row; /* Kdep */
+ short col; /* Kdep */
+ short max_row; /* Kdep */
+ short max_col; /* Kdep */
+ short max_x; /* Kset */
+ short max_y; /* Kset */
+ short max_cur_x; /* Kdep */
+ short max_cur_y; /* Kdep */
+ int version; /* Kset */
+ union {
+ struct {
+ unsigned char * bitmap; /* Kset */
+ short * x16 /*scanmap*/;
+ short * x17 /*cursorbits*/;
+ short * x18 /*pmaddr*/;
+ unsigned char * planemask; /* Kset */
+ } pm;
+ struct {
+ int x15 /* flags */;
+ int * gram /* Kset */;
+ int * rb_addr /* Kset */;
+ int rb_phys /* Kset */;
+ int rb_size /* Kset */;
+ } gx;
+ } dev_dep_1;
+ screen_point_t mouse_loc; /* Kdep */
+ screen_rect_t mouse_box; /* Kdep */
+ short mouse_threshold;/* Kuse */
+ short mouse_scale; /* Kuse */
+ short min_cur_x; /* Kdep */
+ short min_cur_y; /* Kdep */
+ union {
+ struct {
+ int x26 /*dev_type*/;
+ char * x27 /*framebuffer*/;
+ char * x28 /*volatile struct bt459 *bt459*/;
+ int x29 /*slot*/;
+ char cursor_sprite[1024];/* Kset */
+ unsigned char Bg_color[3]; /* Kset */
+ unsigned char Fg_color[3]; /* Kset */
+ int tablet_scale_x; /* Kuse */
+ int tablet_scale_y; /* Kuse */
+ } pm;
+ struct {
+ char * gxo /* Kset */;
+ char stamp_width /* Kset */;
+ char stamp_height /* Kset */;
+ char nplanes /* Kset */;
+ char x27_4 /* n10_present */;
+ char x28_1 /* dplanes */;
+ char zplanes /* Kset */;
+ char zzplanes /* Kset */;
+ unsigned char cursor_sprite[1024] /* Kuse */;
+ char x285_0 /* padding for next, which was int */;
+ unsigned char Fg_color[4] /* Kuse */;
+ unsigned char Bg_color[4] /* Kuse */;
+ unsigned short cmap_index /* Kuse */;
+ unsigned short cmap_count /* Kuse */;
+ unsigned int colormap[256] /* Kuse */;
+ int * stic_dma_rb /* Kset */;
+ int * stic_reg /* Kset */;
+ int ptpt_phys /* Kdep */;
+ int ptpt_size /* Kdep */;
+ int * ptpt_pgin /* Kset */;
+ } gx;
+ } dev_dep_2;
+ short frame_scanline_width; /* in pixels, Kset */
+ short frame_height; /* in scanlines, Kset */
+ /*
+ * Event queues are allocated right after that
+ */
+#define MAX_EVENTS 64
+#define MAX_TRACK 100
+ screen_event_t event_queue[MAX_EVENTS]; /* Kset */
+ screen_timed_point_t point_track[MAX_TRACK]; /* Kset */
+ /*
+ * Some like it hot
+ */
+ unsigned int event_id;
+ int interrupt_info;
+} user_info_t;
+
+
+/*
+ * Screen get_status codes and arguments
+ */
+#include <sys/ioctl.h>
+
+ /* Get size (and offset) of mapped info */
+#define SCREEN_GET_OFFSETS _IOR('q', 6, unsigned **)
+
+ /* Get screen status flags */
+#define SCREEN_STATUS_FLAGS _IOR('q', 22, int *)
+# define MONO_SCREEN 0x01
+# define COLOR_SCREEN 0x02
+# define SCREEN_BEING_UPDATED 0x04
+
+/*
+ * Screen set_status codes and arguments
+ */
+
+ /* start/stop screen saver, control fading interval */
+#define SCREEN_FADE _IOW('q', 114, int) /* fade screen */
+# define NO_FADE -1
+
+ /* Turn video on/off manually */
+#define SCREEN_ON _IO('q', 10)
+#define SCREEN_OFF _IO('q', 11)
+
+ /* Fixup pointers inside mapped info structure */
+#define SCREEN_ADJ_MAPPED_INFO _IOR('q', 1, user_info_t *)
+
+ /* Initialize anything that needs to, hw-wise */
+#define SCREEN_INIT _IO('q', 4)
+
+ /* Position cursor to a specific spot */
+#define SCREEN_SET_CURSOR _IOW('q', 2, screen_point_t)
+
+ /* Load Bg/Fg colors for cursor */
+#define SCREEN_SET_CURSOR_COLOR _IOW('q', 3, cursor_color_t)
+
+ /* Load cursor sprite, small cursor form */
+typedef unsigned short cursor_sprite_t[32];
+
+#define SCREEN_LOAD_CURSOR _IOW('q', 7, cursor_sprite_t)
+
+ /* Load cursor sprite, large 64x64 cursor form */
+typedef char cursor_sprite_long_t[1024];
+
+#define SCREEN_LOAD_CURSOR_LONG _IOW('q', 13, cursor_sprite_long_t)
+
+ /* Modify a given entry in the color map (VDAC) */
+#define SCREEN_SET_CMAP_ENTRY _IOW('q', 12, color_map_entry_t)
+
+ /* Return some other information about hardware (optional) */
+typedef struct {
+ int frame_width;
+ int frame_height;
+ int frame_visible_width;
+ int frame_visible_height;
+} screen_hw_info_t;
+#define SCREEN_HARDWARE_INFO _IOR('q', 23, screen_hw_info_t)
+
+ /* Screen-dependent, unspecified (and despised) */
+#define SCREEN_HARDWARE_DEP _IO('q', 24)
+