Commit | Line | Data |
---|---|---|
a09e091a JB |
1 | /*********************************************************** |
2 | Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. | |
3 | ||
4 | All Rights Reserved | |
5 | ||
6 | Permission to use, copy, modify, and distribute this software and its | |
7 | documentation for any purpose and without fee is hereby granted, | |
8 | provided that the above copyright notice appear in all copies and that | |
9 | both that copyright notice and this permission notice appear in | |
10 | supporting documentation, and that the name of Digital not be | |
11 | used in advertising or publicity pertaining to distribution of the | |
12 | software without specific, written prior permission. | |
13 | ||
14 | DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING | |
15 | ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL | |
16 | DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR | |
17 | ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, | |
18 | WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, | |
19 | ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS | |
20 | SOFTWARE. | |
21 | ||
22 | ******************************************************************/ | |
23 | ||
24 | #ifndef DIXSTRUCT_H | |
25 | #define DIXSTRUCT_H | |
26 | ||
27 | #include "client.h" | |
28 | #include "dix.h" | |
29 | #include "resource.h" | |
30 | #include "cursor.h" | |
31 | #include "gc.h" | |
32 | #include "pixmap.h" | |
33 | #include "privates.h" | |
34 | #include <X11/Xmd.h> | |
35 | ||
36 | /* | |
37 | * direct-mapped hash table, used by resource manager to store | |
38 | * translation from client ids to server addresses. | |
39 | */ | |
40 | ||
41 | extern _X_EXPORT CallbackListPtr ClientStateCallback; | |
42 | ||
43 | typedef struct { | |
44 | ClientPtr client; | |
45 | xConnSetupPrefix *prefix; | |
46 | xConnSetup *setup; | |
47 | } NewClientInfoRec; | |
48 | ||
49 | typedef void (*ReplySwapPtr) (ClientPtr /* pClient */ , | |
50 | int /* size */ , | |
51 | void * /* pbuf */ ); | |
52 | ||
53 | extern _X_EXPORT void | |
54 | ReplyNotSwappd(ClientPtr /* pClient */ , | |
55 | int /* size */ , | |
56 | void * /* pbuf */ ) _X_NORETURN; | |
57 | ||
58 | typedef enum { ClientStateInitial, | |
59 | ClientStateRunning, | |
60 | ClientStateRetained, | |
61 | ClientStateGone | |
62 | } ClientState; | |
63 | ||
64 | typedef struct _saveSet { | |
65 | struct _Window *windowPtr; | |
66 | Bool toRoot; | |
67 | Bool map; | |
68 | } SaveSetElt; | |
69 | #define SaveSetWindow(ss) ((ss).windowPtr) | |
70 | #define SaveSetToRoot(ss) ((ss).toRoot) | |
71 | #define SaveSetShouldMap(ss) ((ss).map) | |
72 | #define SaveSetAssignWindow(ss,w) ((ss).windowPtr = (w)) | |
73 | #define SaveSetAssignToRoot(ss,tr) ((ss).toRoot = (tr)) | |
74 | #define SaveSetAssignMap(ss,m) ((ss).map = (m)) | |
75 | ||
76 | typedef struct _Client { | |
77 | pointer requestBuffer; | |
78 | pointer osPrivate; /* for OS layer, including scheduler */ | |
79 | Mask clientAsMask; | |
80 | short index; | |
81 | unsigned char majorOp, minorOp; | |
82 | unsigned int swapped:1; | |
83 | unsigned int local:1; | |
84 | unsigned int big_requests:1; /* supports large requests */ | |
85 | unsigned int clientGone:1; | |
86 | unsigned int closeDownMode:2; | |
87 | unsigned int clientState:2; | |
88 | signed char smart_priority; | |
89 | short noClientException; /* this client died or needs to be killed */ | |
90 | int priority; | |
91 | ReplySwapPtr pSwapReplyFunc; | |
92 | XID errorValue; | |
93 | int sequence; | |
94 | int ignoreCount; /* count for Attend/IgnoreClient */ | |
95 | int numSaved; | |
96 | SaveSetElt *saveSet; | |
97 | int (**requestVector) (ClientPtr /* pClient */ ); | |
98 | CARD32 req_len; /* length of current request */ | |
99 | unsigned int replyBytesRemaining; | |
100 | PrivateRec *devPrivates; | |
101 | unsigned short xkbClientFlags; | |
102 | unsigned short mapNotifyMask; | |
103 | unsigned short newKeyboardNotifyMask; | |
104 | unsigned short vMajor, vMinor; | |
105 | KeyCode minKC, maxKC; | |
106 | ||
107 | int smart_start_tick; | |
108 | int smart_stop_tick; | |
109 | int smart_check_tick; | |
110 | ||
111 | DeviceIntPtr clientPtr; | |
112 | ClientIdPtr clientIds; | |
113 | #if XTRANS_SEND_FDS | |
114 | int req_fds; | |
115 | #endif | |
116 | } ClientRec; | |
117 | ||
118 | #if XTRANS_SEND_FDS | |
119 | static inline void | |
120 | SetReqFds(ClientPtr client, int req_fds) { | |
121 | if (client->req_fds != 0 && req_fds != client->req_fds) | |
122 | LogMessage(X_ERROR, "Mismatching number of request fds %d != %d\n", req_fds, client->req_fds); | |
123 | client->req_fds = req_fds; | |
124 | } | |
125 | #endif | |
126 | ||
127 | /* | |
128 | * Scheduling interface | |
129 | */ | |
130 | extern _X_EXPORT long SmartScheduleTime; | |
131 | extern _X_EXPORT long SmartScheduleInterval; | |
132 | extern _X_EXPORT long SmartScheduleSlice; | |
133 | extern _X_EXPORT long SmartScheduleMaxSlice; | |
134 | extern _X_EXPORT Bool SmartScheduleDisable; | |
135 | extern _X_EXPORT void | |
136 | SmartScheduleStartTimer(void); | |
137 | extern _X_EXPORT void | |
138 | SmartScheduleStopTimer(void); | |
139 | ||
140 | #define SMART_MAX_PRIORITY (20) | |
141 | #define SMART_MIN_PRIORITY (-20) | |
142 | ||
143 | extern _X_EXPORT void | |
144 | SmartScheduleInit(void); | |
145 | ||
146 | /* This prototype is used pervasively in Xext, dix */ | |
147 | #define DISPATCH_PROC(func) int func(ClientPtr /* client */) | |
148 | ||
149 | typedef struct _WorkQueue { | |
150 | struct _WorkQueue *next; | |
151 | Bool (*function) (ClientPtr /* pClient */ , | |
152 | pointer /* closure */ | |
153 | ); | |
154 | ClientPtr client; | |
155 | pointer closure; | |
156 | } WorkQueueRec; | |
157 | ||
158 | extern _X_EXPORT TimeStamp currentTime; | |
159 | ||
160 | extern _X_EXPORT int | |
161 | CompareTimeStamps(TimeStamp /*a */ , | |
162 | TimeStamp /*b */ ); | |
163 | ||
164 | extern _X_EXPORT TimeStamp | |
165 | ClientTimeToServerTime(CARD32 /*c */ ); | |
166 | ||
167 | typedef struct _CallbackRec { | |
168 | CallbackProcPtr proc; | |
169 | pointer data; | |
170 | Bool deleted; | |
171 | struct _CallbackRec *next; | |
172 | } CallbackRec, *CallbackPtr; | |
173 | ||
174 | typedef struct _CallbackList { | |
175 | int inCallback; | |
176 | Bool deleted; | |
177 | int numDeleted; | |
178 | CallbackPtr list; | |
179 | } CallbackListRec; | |
180 | ||
181 | /* proc vectors */ | |
182 | ||
183 | extern _X_EXPORT int (*InitialVector[3]) (ClientPtr /*client */ ); | |
184 | ||
185 | extern _X_EXPORT int (*ProcVector[256]) (ClientPtr /*client */ ); | |
186 | ||
187 | extern _X_EXPORT int (*SwappedProcVector[256]) (ClientPtr /*client */ ); | |
188 | ||
189 | extern _X_EXPORT ReplySwapPtr ReplySwapVector[256]; | |
190 | ||
191 | extern _X_EXPORT int | |
192 | ProcBadRequest(ClientPtr /*client */ ); | |
193 | ||
194 | #endif /* DIXSTRUCT_H */ |