1706f2543Smrg/*
2706f2543Smrg * Copyright � 1999 Keith Packard
3706f2543Smrg *
4706f2543Smrg * Permission to use, copy, modify, distribute, and sell this software and its
5706f2543Smrg * documentation for any purpose is hereby granted without fee, provided that
6706f2543Smrg * the above copyright notice appear in all copies and that both that
7706f2543Smrg * copyright notice and this permission notice appear in supporting
8706f2543Smrg * documentation, and that the name of Keith Packard not be used in
9706f2543Smrg * advertising or publicity pertaining to distribution of the software without
10706f2543Smrg * specific, written prior permission.  Keith Packard makes no
11706f2543Smrg * representations about the suitability of this software for any purpose.  It
12706f2543Smrg * is provided "as is" without express or implied warranty.
13706f2543Smrg *
14706f2543Smrg * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
15706f2543Smrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
16706f2543Smrg * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
17706f2543Smrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
18706f2543Smrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
19706f2543Smrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
20706f2543Smrg * PERFORMANCE OF THIS SOFTWARE.
21706f2543Smrg */
22706f2543Smrg
23706f2543Smrg#ifndef _KDRIVE_H_
24706f2543Smrg#define _KDRIVE_H_
25706f2543Smrg
26706f2543Smrg#include <stdio.h>
27706f2543Smrg#include <string.h>
28706f2543Smrg#include <X11/X.h>
29706f2543Smrg#include <X11/Xproto.h>
30706f2543Smrg#include <X11/Xos.h>
31706f2543Smrg#include "scrnintstr.h"
32706f2543Smrg#include "pixmapstr.h"
33706f2543Smrg#include "windowstr.h"
34706f2543Smrg#include "servermd.h"
35706f2543Smrg#include "mibstore.h"
36706f2543Smrg#include "colormapst.h"
37706f2543Smrg#include "gcstruct.h"
38706f2543Smrg#include "input.h"
39706f2543Smrg#include "mipointer.h"
40706f2543Smrg#include "mi.h"
41706f2543Smrg#include "dix.h"
42706f2543Smrg#include "fb.h"
43706f2543Smrg#include "fboverlay.h"
44706f2543Smrg#include "shadow.h"
45706f2543Smrg#include "randrstr.h"
46706f2543Smrg#include "globals.h"
47706f2543Smrg
48706f2543Smrg#include "xkbstr.h"
49706f2543Smrg
50706f2543Smrg#define KD_DPMS_NORMAL	    0
51706f2543Smrg#define KD_DPMS_STANDBY	    1
52706f2543Smrg#define KD_DPMS_SUSPEND	    2
53706f2543Smrg#define KD_DPMS_POWERDOWN   3
54706f2543Smrg#define KD_DPMS_MAX	    KD_DPMS_POWERDOWN
55706f2543Smrg
56706f2543Smrg#define Status int
57706f2543Smrg
58706f2543Smrgtypedef struct _KdCardInfo {
59706f2543Smrg    struct _KdCardFuncs	    *cfuncs;
60706f2543Smrg    void		    *closure;
61706f2543Smrg    void		    *driver;
62706f2543Smrg    struct _KdScreenInfo    *screenList;
63706f2543Smrg    int			    selected;
64706f2543Smrg    struct _KdCardInfo	    *next;
65706f2543Smrg} KdCardInfo;
66706f2543Smrg
67706f2543Smrgextern KdCardInfo	*kdCardInfo;
68706f2543Smrg
69706f2543Smrg/*
70706f2543Smrg * Configuration information per X screen
71706f2543Smrg */
72706f2543Smrgtypedef struct _KdFrameBuffer {
73706f2543Smrg    CARD8	*frameBuffer;
74706f2543Smrg    int		depth;
75706f2543Smrg    int		bitsPerPixel;
76706f2543Smrg    int		pixelStride;
77706f2543Smrg    int		byteStride;
78706f2543Smrg    Bool	shadow;
79706f2543Smrg    unsigned long   visuals;
80706f2543Smrg    Pixel       redMask, greenMask, blueMask;
81706f2543Smrg    void	*closure;
82706f2543Smrg} KdFrameBuffer;
83706f2543Smrg
84706f2543Smrg#define RR_Rotate_All	(RR_Rotate_0|RR_Rotate_90|RR_Rotate_180|RR_Rotate_270)
85706f2543Smrg#define RR_Reflect_All	(RR_Reflect_X|RR_Reflect_Y)
86706f2543Smrg
87706f2543Smrgtypedef struct _KdScreenInfo {
88706f2543Smrg    struct _KdScreenInfo    *next;
89706f2543Smrg    KdCardInfo	*card;
90706f2543Smrg    ScreenPtr	pScreen;
91706f2543Smrg    void	*driver;
92706f2543Smrg    Rotation	randr;	/* rotation and reflection */
93706f2543Smrg    int		width;
94706f2543Smrg    int		height;
95706f2543Smrg    int		rate;
96706f2543Smrg    int		width_mm;
97706f2543Smrg    int		height_mm;
98706f2543Smrg    int		subpixel_order;
99706f2543Smrg    Bool        dumb;
100706f2543Smrg    Bool        softCursor;
101706f2543Smrg    int		mynum;
102706f2543Smrg    DDXPointRec	origin;
103706f2543Smrg    KdFrameBuffer   fb;
104706f2543Smrg} KdScreenInfo;
105706f2543Smrg
106706f2543Smrgtypedef struct _KdCardFuncs {
107706f2543Smrg    Bool	(*cardinit) (KdCardInfo *); /* detect and map device */
108706f2543Smrg    Bool	(*scrinit) (KdScreenInfo *);/* initialize screen information */
109706f2543Smrg    Bool	(*initScreen) (ScreenPtr);  /* initialize ScreenRec */
110706f2543Smrg    Bool	(*finishInitScreen) (ScreenPtr pScreen);
111706f2543Smrg    Bool	(*createRes) (ScreenPtr);   /* create screen resources */
112706f2543Smrg    void	(*preserve) (KdCardInfo *); /* save graphics card state */
113706f2543Smrg    Bool        (*enable) (ScreenPtr);      /* set up for rendering */
114706f2543Smrg    Bool	(*dpms) (ScreenPtr, int);   /* set DPMS screen saver */
115706f2543Smrg    void        (*disable) (ScreenPtr);     /* turn off rendering */
116706f2543Smrg    void	(*restore) (KdCardInfo *);  /* restore graphics card state */
117706f2543Smrg    void	(*scrfini) (KdScreenInfo *);/* close down screen */
118706f2543Smrg    void        (*cardfini) (KdCardInfo *); /* close down */
119706f2543Smrg
120706f2543Smrg    Bool        (*initCursor) (ScreenPtr);      /* detect and map cursor */
121706f2543Smrg    void        (*enableCursor) (ScreenPtr);    /* enable cursor */
122706f2543Smrg    void        (*disableCursor) (ScreenPtr);   /* disable cursor */
123706f2543Smrg    void        (*finiCursor) (ScreenPtr);      /* close down */
124706f2543Smrg    void        (*recolorCursor) (ScreenPtr, int, xColorItem *);
125706f2543Smrg
126706f2543Smrg    Bool        (*initAccel) (ScreenPtr);
127706f2543Smrg    void        (*enableAccel) (ScreenPtr);
128706f2543Smrg    void        (*disableAccel) (ScreenPtr);
129706f2543Smrg    void        (*finiAccel) (ScreenPtr);
130706f2543Smrg
131706f2543Smrg    void        (*getColors) (ScreenPtr, int, xColorItem *);
132706f2543Smrg    void        (*putColors) (ScreenPtr, int, xColorItem *);
133706f2543Smrg
134706f2543Smrg} KdCardFuncs;
135706f2543Smrg
136706f2543Smrg#define KD_MAX_PSEUDO_DEPTH 8
137706f2543Smrg#define KD_MAX_PSEUDO_SIZE	    (1 << KD_MAX_PSEUDO_DEPTH)
138706f2543Smrg
139706f2543Smrgtypedef struct {
140706f2543Smrg    KdScreenInfo    *screen;
141706f2543Smrg    KdCardInfo	    *card;
142706f2543Smrg
143706f2543Smrg    Bool	    enabled;
144706f2543Smrg    Bool	    closed;
145706f2543Smrg    int		    bytesPerPixel;
146706f2543Smrg
147706f2543Smrg    int		    dpmsState;
148706f2543Smrg
149706f2543Smrg    ColormapPtr     pInstalledmap;                    /* current colormap */
150706f2543Smrg    xColorItem      systemPalette[KD_MAX_PSEUDO_SIZE];/* saved windows colors */
151706f2543Smrg
152706f2543Smrg    CreateScreenResourcesProcPtr    CreateScreenResources;
153706f2543Smrg    CloseScreenProcPtr  CloseScreen;
154706f2543Smrg} KdPrivScreenRec, *KdPrivScreenPtr;
155706f2543Smrg
156706f2543Smrgtypedef enum _kdPointerState {
157706f2543Smrg    start,
158706f2543Smrg    button_1_pend,
159706f2543Smrg    button_1_down,
160706f2543Smrg    button_2_down,
161706f2543Smrg    button_3_pend,
162706f2543Smrg    button_3_down,
163706f2543Smrg    synth_2_down_13,
164706f2543Smrg    synth_2_down_3,
165706f2543Smrg    synth_2_down_1,
166706f2543Smrg    num_input_states
167706f2543Smrg} KdPointerState;
168706f2543Smrg
169706f2543Smrg#define KD_MAX_BUTTON  32
170706f2543Smrg
171706f2543Smrg#define KD_KEYBOARD 1
172706f2543Smrg#define KD_MOUSE 2
173706f2543Smrg#define KD_TOUCHSCREEN 3
174706f2543Smrg
175706f2543Smrgtypedef struct _KdPointerInfo KdPointerInfo;
176706f2543Smrg
177706f2543Smrgtypedef struct _KdPointerDriver {
178706f2543Smrg    char                    *name;
179706f2543Smrg    Status                  (*Init)    (KdPointerInfo *);
180706f2543Smrg    Status                  (*Enable)  (KdPointerInfo *);
181706f2543Smrg    void                    (*Disable) (KdPointerInfo *);
182706f2543Smrg    void                    (*Fini)    (KdPointerInfo *);
183706f2543Smrg    struct _KdPointerDriver *next;
184706f2543Smrg} KdPointerDriver;
185706f2543Smrg
186706f2543Smrgstruct _KdPointerInfo {
187706f2543Smrg    DeviceIntPtr          dixdev;
188706f2543Smrg    char                  *name;
189706f2543Smrg    char                  *path;
190706f2543Smrg    char                  *protocol;
191706f2543Smrg    InputOption           *options;
192706f2543Smrg    int                   inputClass;
193706f2543Smrg
194706f2543Smrg    CARD8                 map[KD_MAX_BUTTON + 1];
195706f2543Smrg    int                   nButtons;
196706f2543Smrg    int                   nAxes;
197706f2543Smrg
198706f2543Smrg    Bool                  emulateMiddleButton;
199706f2543Smrg    unsigned long         emulationTimeout;
200706f2543Smrg    int                   emulationDx, emulationDy;
201706f2543Smrg
202706f2543Smrg    Bool                  timeoutPending;
203706f2543Smrg    KdPointerState        mouseState;
204706f2543Smrg    Bool                  eventHeld;
205706f2543Smrg    struct {
206706f2543Smrg        int type;
207706f2543Smrg        int x;
208706f2543Smrg        int y;
209706f2543Smrg        int z;
210706f2543Smrg        int flags;
211706f2543Smrg        int absrel;
212706f2543Smrg    } heldEvent;
213706f2543Smrg    unsigned char         buttonState;
214706f2543Smrg    Bool                  transformCoordinates;
215706f2543Smrg    int                   pressureThreshold;
216706f2543Smrg
217706f2543Smrg    KdPointerDriver       *driver;
218706f2543Smrg    void                  *driverPrivate;
219706f2543Smrg
220706f2543Smrg    struct _KdPointerInfo *next;
221706f2543Smrg};
222706f2543Smrg
223706f2543Smrgextern int KdCurScreen;
224706f2543Smrg
225706f2543Smrgvoid KdAddPointerDriver (KdPointerDriver *driver);
226706f2543Smrgvoid KdRemovePointerDriver (KdPointerDriver *driver);
227706f2543SmrgKdPointerInfo *KdNewPointer (void);
228706f2543Smrgvoid KdFreePointer (KdPointerInfo *);
229706f2543Smrgint KdAddPointer (KdPointerInfo *ki);
230706f2543Smrgint KdAddConfigPointer (char *pointer);
231706f2543Smrgvoid KdRemovePointer (KdPointerInfo *ki);
232706f2543Smrg
233706f2543Smrg
234706f2543Smrg#define KD_KEY_COUNT 248
235706f2543Smrg#define KD_MIN_KEYCODE  8
236706f2543Smrg#define KD_MAX_KEYCODE  255
237706f2543Smrg#define KD_MAX_WIDTH    4
238706f2543Smrg#define KD_MAX_LENGTH   (KD_MAX_KEYCODE - KD_MIN_KEYCODE + 1)
239706f2543Smrg
240706f2543Smrgtypedef struct {
241706f2543Smrg    KeySym modsym;
242706f2543Smrg    int    modbit;
243706f2543Smrg} KdKeySymModsRec;
244706f2543Smrg
245706f2543Smrgtypedef struct _KdKeyboardInfo KdKeyboardInfo;
246706f2543Smrg
247706f2543Smrgtypedef struct _KdKeyboardDriver {
248706f2543Smrg    char                  *name;
249706f2543Smrg    Bool                  (*Init)    (KdKeyboardInfo *);
250706f2543Smrg    Bool                  (*Enable)  (KdKeyboardInfo *);
251706f2543Smrg    void                  (*Leds)    (KdKeyboardInfo *, int);
252706f2543Smrg    void                  (*Bell)    (KdKeyboardInfo *, int, int, int);
253706f2543Smrg    void                  (*Disable) (KdKeyboardInfo *);
254706f2543Smrg    void                  (*Fini)    (KdKeyboardInfo *);
255706f2543Smrg    struct _KdKeyboardDriver *next;
256706f2543Smrg} KdKeyboardDriver;
257706f2543Smrg
258706f2543Smrgstruct _KdKeyboardInfo {
259706f2543Smrg    struct _KdKeyboardInfo *next;
260706f2543Smrg    DeviceIntPtr        dixdev;
261706f2543Smrg    void                *closure;
262706f2543Smrg    char                *name;
263706f2543Smrg    char                *path;
264706f2543Smrg    int                 inputClass;
265706f2543Smrg    char                *xkbRules;
266706f2543Smrg    char                *xkbModel;
267706f2543Smrg    char                *xkbLayout;
268706f2543Smrg    char                *xkbVariant;
269706f2543Smrg    char                *xkbOptions;
270706f2543Smrg    int                 LockLed;
271706f2543Smrg
272706f2543Smrg    int                 minScanCode;
273706f2543Smrg    int                 maxScanCode;
274706f2543Smrg
275706f2543Smrg    int                 leds;
276706f2543Smrg    int                 bellPitch;
277706f2543Smrg    int                 bellDuration;
278706f2543Smrg    InputOption         *options;
279706f2543Smrg
280706f2543Smrg    KdKeyboardDriver    *driver;
281706f2543Smrg    void                *driverPrivate;
282706f2543Smrg};
283706f2543Smrg
284706f2543Smrgvoid KdAddKeyboardDriver (KdKeyboardDriver *driver);
285706f2543Smrgvoid KdRemoveKeyboardDriver (KdKeyboardDriver *driver);
286706f2543SmrgKdKeyboardInfo *KdNewKeyboard (void);
287706f2543Smrgvoid KdFreeKeyboard (KdKeyboardInfo *ki);
288706f2543Smrgint KdAddConfigKeyboard (char *pointer);
289706f2543Smrgint KdAddKeyboard (KdKeyboardInfo *ki);
290706f2543Smrgvoid KdRemoveKeyboard (KdKeyboardInfo *ki);
291706f2543Smrg
292706f2543Smrgtypedef struct _KdOsFuncs {
293706f2543Smrg    int		    (*Init) (void);
294706f2543Smrg    void	    (*Enable) (void);
295706f2543Smrg    Bool	    (*SpecialKey) (KeySym);
296706f2543Smrg    void	    (*Disable) (void);
297706f2543Smrg    void	    (*Fini) (void);
298706f2543Smrg    void	    (*pollEvents) (void);
299706f2543Smrg    void            (*Bell) (int, int, int);
300706f2543Smrg} KdOsFuncs;
301706f2543Smrg
302706f2543Smrgtypedef enum _KdSyncPolarity {
303706f2543Smrg    KdSyncNegative, KdSyncPositive
304706f2543Smrg} KdSyncPolarity;
305706f2543Smrg
306706f2543Smrgtypedef struct _KdMonitorTiming {
307706f2543Smrg    /* label */
308706f2543Smrg    int		    horizontal;
309706f2543Smrg    int		    vertical;
310706f2543Smrg    int		    rate;
311706f2543Smrg    /* pixel clock */
312706f2543Smrg    int		    clock;  /* in KHz */
313706f2543Smrg    /* horizontal timing */
314706f2543Smrg    int		    hfp;    /* front porch */
315706f2543Smrg    int		    hbp;    /* back porch */
316706f2543Smrg    int		    hblank; /* blanking */
317706f2543Smrg    KdSyncPolarity  hpol;   /* polarity */
318706f2543Smrg    /* vertical timing */
319706f2543Smrg    int		    vfp;    /* front porch */
320706f2543Smrg    int		    vbp;    /* back porch */
321706f2543Smrg    int		    vblank; /* blanking */
322706f2543Smrg    KdSyncPolarity  vpol;   /* polarity */
323706f2543Smrg} KdMonitorTiming;
324706f2543Smrg
325706f2543Smrgextern const KdMonitorTiming	kdMonitorTimings[];
326706f2543Smrgextern const int		kdNumMonitorTimings;
327706f2543Smrg
328706f2543Smrgtypedef struct _KdPointerMatrix {
329706f2543Smrg    int	    matrix[2][3];
330706f2543Smrg} KdPointerMatrix;
331706f2543Smrg
332706f2543Smrg/*
333706f2543Smrg * This is the only completely portable way to
334706f2543Smrg * compute this info.
335706f2543Smrg */
336706f2543Smrg
337706f2543Smrg#ifndef BitsPerPixel
338706f2543Smrg#define BitsPerPixel(d) (\
339706f2543Smrg    PixmapWidthPaddingInfo[d].notPower2 ? \
340706f2543Smrg    (PixmapWidthPaddingInfo[d].bytesPerPixel * 8) : \
341706f2543Smrg    ((1 << PixmapWidthPaddingInfo[d].padBytesLog2) * 8 / \
342706f2543Smrg    (PixmapWidthPaddingInfo[d].padRoundUp+1)))
343706f2543Smrg#endif
344706f2543Smrg
345706f2543Smrgextern DevPrivateKeyRec	kdScreenPrivateKeyRec;
346706f2543Smrg#define kdScreenPrivateKey (&kdScreenPrivateKeyRec)
347706f2543Smrg
348706f2543Smrgextern unsigned long	kdGeneration;
349706f2543Smrgextern Bool		kdEnabled;
350706f2543Smrgextern Bool		kdSwitchPending;
351706f2543Smrgextern Bool		kdEmulateMiddleButton;
352706f2543Smrgextern Bool		kdDisableZaphod;
353706f2543Smrgextern Bool		kdAllowZap;
354706f2543Smrgextern int		kdVirtualTerminal;
355706f2543Smrgextern char		*kdSwitchCmd;
356706f2543Smrgextern KdOsFuncs	*kdOsFuncs;
357706f2543Smrg
358706f2543Smrg#define KdGetScreenPriv(pScreen) ((KdPrivScreenPtr) \
359706f2543Smrg    dixLookupPrivate(&(pScreen)->devPrivates, kdScreenPrivateKey))
360706f2543Smrg#define KdSetScreenPriv(pScreen,v) \
361706f2543Smrg    dixSetPrivate(&(pScreen)->devPrivates, kdScreenPrivateKey, v)
362706f2543Smrg#define KdScreenPriv(pScreen) KdPrivScreenPtr pScreenPriv = KdGetScreenPriv(pScreen)
363706f2543Smrg
364706f2543Smrg/* kcmap.c */
365706f2543Smrgvoid
366706f2543SmrgKdSetColormap (ScreenPtr pScreen);
367706f2543Smrg
368706f2543Smrgvoid
369706f2543SmrgKdEnableColormap (ScreenPtr pScreen);
370706f2543Smrg
371706f2543Smrgvoid
372706f2543SmrgKdDisableColormap (ScreenPtr pScreen);
373706f2543Smrg
374706f2543Smrgvoid
375706f2543SmrgKdInstallColormap (ColormapPtr pCmap);
376706f2543Smrg
377706f2543Smrgvoid
378706f2543SmrgKdUninstallColormap (ColormapPtr pCmap);
379706f2543Smrg
380706f2543Smrgint
381706f2543SmrgKdListInstalledColormaps (ScreenPtr pScreen, Colormap *pCmaps);
382706f2543Smrg
383706f2543Smrgvoid
384706f2543SmrgKdStoreColors (ColormapPtr pCmap, int ndef, xColorItem *pdefs);
385706f2543Smrg
386706f2543Smrg/* kdrive.c */
387706f2543Smrgextern miPointerScreenFuncRec kdPointerScreenFuncs;
388706f2543Smrg
389706f2543Smrgvoid
390706f2543SmrgKdSetRootClip (ScreenPtr pScreen, BOOL enable);
391706f2543Smrg
392706f2543Smrgvoid
393706f2543SmrgKdDisableScreen (ScreenPtr pScreen);
394706f2543Smrg
395706f2543Smrgvoid
396706f2543SmrgKdDisableScreens (void);
397706f2543Smrg
398706f2543SmrgBool
399706f2543SmrgKdEnableScreen (ScreenPtr pScreen);
400706f2543Smrg
401706f2543Smrgvoid
402706f2543SmrgKdEnableScreens (void);
403706f2543Smrg
404706f2543Smrgvoid
405706f2543SmrgKdSuspend (void);
406706f2543Smrg
407706f2543Smrgvoid
408706f2543SmrgKdResume (void);
409706f2543Smrg
410706f2543Smrgvoid
411706f2543SmrgKdProcessSwitch (void);
412706f2543Smrg
413706f2543SmrgRotation
414706f2543SmrgKdAddRotation (Rotation a, Rotation b);
415706f2543Smrg
416706f2543SmrgRotation
417706f2543SmrgKdSubRotation (Rotation a, Rotation b);
418706f2543Smrg
419706f2543Smrgvoid
420706f2543SmrgKdParseScreen (KdScreenInfo *screen,
421706f2543Smrg	       char	    *arg);
422706f2543Smrg
423706f2543SmrgKdPointerInfo *
424706f2543SmrgKdParsePointer (char *arg);
425706f2543Smrg
426706f2543SmrgKdKeyboardInfo *
427706f2543SmrgKdParseKeyboard (char *arg);
428706f2543Smrg
429706f2543Smrgchar *
430706f2543SmrgKdParseFindNext (char *cur, char *delim, char *save, char *last);
431706f2543Smrg
432706f2543Smrgvoid
433706f2543SmrgKdParseRgba (char *rgba);
434706f2543Smrg
435706f2543Smrgvoid
436706f2543SmrgKdUseMsg (void);
437706f2543Smrg
438706f2543Smrgint
439706f2543SmrgKdProcessArgument (int argc, char **argv, int i);
440706f2543Smrg
441706f2543Smrgvoid
442706f2543SmrgKdOsInit (KdOsFuncs *pOsFuncs);
443706f2543Smrg
444706f2543Smrgvoid
445706f2543SmrgKdOsAddInputDrivers (void);
446706f2543Smrg
447706f2543SmrgBool
448706f2543SmrgKdAllocatePrivates (ScreenPtr pScreen);
449706f2543Smrg
450706f2543SmrgBool
451706f2543SmrgKdCreateScreenResources (ScreenPtr pScreen);
452706f2543Smrg
453706f2543SmrgBool
454706f2543SmrgKdCloseScreen (int index, ScreenPtr pScreen);
455706f2543Smrg
456706f2543SmrgBool
457706f2543SmrgKdSaveScreen (ScreenPtr pScreen, int on);
458706f2543Smrg
459706f2543SmrgBool
460706f2543SmrgKdScreenInit(int index, ScreenPtr pScreen, int argc, char **argv);
461706f2543Smrg
462706f2543Smrgvoid
463706f2543SmrgKdInitScreen (ScreenInfo    *pScreenInfo,
464706f2543Smrg	      KdScreenInfo  *screen,
465706f2543Smrg	      int	    argc,
466706f2543Smrg	      char	    **argv);
467706f2543Smrg
468706f2543Smrgvoid
469706f2543SmrgKdInitCard (ScreenInfo	    *pScreenInfo,
470706f2543Smrg	    KdCardInfo	    *card,
471706f2543Smrg	    int		    argc,
472706f2543Smrg	    char	    **argv);
473706f2543Smrg
474706f2543Smrgvoid
475706f2543SmrgKdInitOutput (ScreenInfo    *pScreenInfo,
476706f2543Smrg	      int	    argc,
477706f2543Smrg	      char	    **argv);
478706f2543Smrg
479706f2543Smrgvoid
480706f2543SmrgKdSetSubpixelOrder (ScreenPtr pScreen, Rotation randr);
481706f2543Smrg
482706f2543Smrgvoid
483706f2543SmrgKdBacktrace (int signum);
484706f2543Smrg
485706f2543Smrg/* kinfo.c */
486706f2543SmrgKdCardInfo *
487706f2543SmrgKdCardInfoAdd (KdCardFuncs  *funcs,
488706f2543Smrg	       void	    *closure);
489706f2543Smrg
490706f2543SmrgKdCardInfo *
491706f2543SmrgKdCardInfoLast (void);
492706f2543Smrg
493706f2543Smrgvoid
494706f2543SmrgKdCardInfoDispose (KdCardInfo *ci);
495706f2543Smrg
496706f2543SmrgKdScreenInfo *
497706f2543SmrgKdScreenInfoAdd (KdCardInfo *ci);
498706f2543Smrg
499706f2543Smrgvoid
500706f2543SmrgKdScreenInfoDispose (KdScreenInfo *si);
501706f2543Smrg
502706f2543Smrg
503706f2543Smrg/* kinput.c */
504706f2543Smrgvoid
505706f2543SmrgKdInitInput(void);
506706f2543Smrg
507706f2543Smrgvoid
508706f2543SmrgKdAddPointerDriver(KdPointerDriver *);
509706f2543Smrg
510706f2543Smrgvoid
511706f2543SmrgKdAddKeyboardDriver(KdKeyboardDriver *);
512706f2543Smrg
513706f2543SmrgBool
514706f2543SmrgKdRegisterFd (int fd, void (*read) (int fd, void *closure), void *closure);
515706f2543Smrg
516706f2543Smrgvoid
517706f2543SmrgKdUnregisterFds (void *closure, Bool do_close);
518706f2543Smrg
519706f2543Smrgvoid
520706f2543SmrgKdUnregisterFd (void *closure, int fd, Bool do_close);
521706f2543Smrg
522706f2543Smrgvoid
523706f2543SmrgKdEnqueueKeyboardEvent(KdKeyboardInfo *ki, unsigned char scan_code,
524706f2543Smrg                    unsigned char is_up);
525706f2543Smrg
526706f2543Smrg#define KD_BUTTON_1	0x01
527706f2543Smrg#define KD_BUTTON_2	0x02
528706f2543Smrg#define KD_BUTTON_3	0x04
529706f2543Smrg#define KD_BUTTON_4	0x08
530706f2543Smrg#define KD_BUTTON_5	0x10
531706f2543Smrg#define KD_BUTTON_8	0x80
532706f2543Smrg#define KD_MOUSE_DELTA	0x80000000
533706f2543Smrg
534706f2543Smrgvoid
535706f2543SmrgKdEnqueuePointerEvent(KdPointerInfo *pi, unsigned long flags, int rx, int ry,
536706f2543Smrg                      int rz);
537706f2543Smrg
538706f2543Smrgvoid
539706f2543Smrg_KdEnqueuePointerEvent(KdPointerInfo *pi, int type, int x, int y, int z,
540706f2543Smrg                       int b, int absrel, Bool force);
541706f2543Smrg
542706f2543Smrgvoid
543706f2543SmrgKdReleaseAllKeys (void);
544706f2543Smrg
545706f2543Smrgvoid
546706f2543SmrgKdSetLed (KdKeyboardInfo *ki, int led, Bool on);
547706f2543Smrg
548706f2543Smrgvoid
549706f2543SmrgKdSetPointerMatrix (KdPointerMatrix *pointer);
550706f2543Smrg
551706f2543Smrgvoid
552706f2543SmrgKdComputePointerMatrix (KdPointerMatrix *pointer, Rotation randr, int width, int height);
553706f2543Smrg
554706f2543Smrgvoid
555706f2543SmrgKdScreenToPointerCoords (int *x, int *y);
556706f2543Smrg
557706f2543Smrgvoid
558706f2543SmrgKdBlockHandler (int		screen,
559706f2543Smrg		pointer		blockData,
560706f2543Smrg		pointer		timeout,
561706f2543Smrg		pointer		readmask);
562706f2543Smrg
563706f2543Smrgvoid
564706f2543SmrgKdWakeupHandler (int		screen,
565706f2543Smrg		 pointer    	data,
566706f2543Smrg		 unsigned long	result,
567706f2543Smrg		 pointer	readmask);
568706f2543Smrg
569706f2543Smrgvoid
570706f2543SmrgKdDisableInput (void);
571706f2543Smrg
572706f2543Smrgvoid
573706f2543SmrgKdEnableInput (void);
574706f2543Smrg
575706f2543Smrgvoid
576706f2543SmrgProcessInputEvents (void);
577706f2543Smrg
578706f2543Smrgvoid
579706f2543SmrgKdRingBell (KdKeyboardInfo      *ki,
580706f2543Smrg            int                 volume,
581706f2543Smrg            int                 pitch,
582706f2543Smrg            int                 duration);
583706f2543Smrg
584706f2543Smrg/* kmode.c */
585706f2543Smrgconst KdMonitorTiming *
586706f2543SmrgKdFindMode (KdScreenInfo    *screen,
587706f2543Smrg	    Bool	    (*supported) (KdScreenInfo *,
588706f2543Smrg					  const KdMonitorTiming *));
589706f2543Smrg
590706f2543SmrgBool
591706f2543SmrgKdTuneMode (KdScreenInfo    *screen,
592706f2543Smrg	    Bool	    (*usable) (KdScreenInfo *),
593706f2543Smrg	    Bool	    (*supported) (KdScreenInfo *,
594706f2543Smrg					  const KdMonitorTiming *));
595706f2543Smrg
596706f2543Smrg#ifdef RANDR
597706f2543SmrgBool
598706f2543SmrgKdRandRGetInfo (ScreenPtr pScreen,
599706f2543Smrg		int randr,
600706f2543Smrg		Bool (*supported) (ScreenPtr pScreen,
601706f2543Smrg				   const KdMonitorTiming *));
602706f2543Smrg
603706f2543Smrgconst KdMonitorTiming *
604706f2543SmrgKdRandRGetTiming (ScreenPtr	    pScreen,
605706f2543Smrg		  Bool		    (*supported) (ScreenPtr pScreen,
606706f2543Smrg						  const KdMonitorTiming *),
607706f2543Smrg		  int		    rate,
608706f2543Smrg		  RRScreenSizePtr   pSize);
609706f2543Smrg#endif
610706f2543Smrg
611706f2543Smrg/* kshadow.c */
612706f2543SmrgBool
613706f2543SmrgKdShadowFbAlloc (KdScreenInfo *screen, Bool rotate);
614706f2543Smrg
615706f2543Smrgvoid
616706f2543SmrgKdShadowFbFree (KdScreenInfo *screen);
617706f2543Smrg
618706f2543SmrgBool
619706f2543SmrgKdShadowSet (ScreenPtr pScreen, int randr, ShadowUpdateProc update, ShadowWindowProc window);
620706f2543Smrg
621706f2543Smrgvoid
622706f2543SmrgKdShadowUnset (ScreenPtr pScreen);
623706f2543Smrg
624706f2543Smrg/* function prototypes to be implemented by the drivers */
625706f2543Smrgvoid
626706f2543SmrgInitCard (char *name);
627706f2543Smrg
628706f2543Smrg#endif /* _KDRIVE_H_ */
629