VirtualBox

source: vbox/trunk/src/VBox/Additions/x11/x11include/xorg-server-1.14.0/misc.h@ 103415

最後變更 在這個檔案從103415是 45134,由 vboxsync 提交於 12 年 前

Additions/X11: build vboxvideo_drv.so for X.Org Server 1.14.

  • 屬性 svn:eol-style 設為 native
檔案大小: 12.4 KB
 
1/***********************************************************
2
3Copyright 1987, 1998 The Open Group
4
5Permission to use, copy, modify, distribute, and sell this software and its
6documentation for any purpose is hereby granted without fee, provided that
7the above copyright notice appear in all copies and that both that
8copyright notice and this permission notice appear in supporting
9documentation.
10
11The above copyright notice and this permission notice shall be included in
12all copies or substantial portions of the Software.
13
14THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
18AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20
21Except as contained in this notice, the name of The Open Group shall not be
22used in advertising or otherwise to promote the sale, use or other dealings
23in this Software without prior written authorization from The Open Group.
24
25Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
26
27 All Rights Reserved
28
29Permission to use, copy, modify, and distribute this software and its
30documentation for any purpose and without fee is hereby granted,
31provided that the above copyright notice appear in all copies and that
32both that copyright notice and this permission notice appear in
33supporting documentation, and that the name of Digital not be
34used in advertising or publicity pertaining to distribution of the
35software without specific, written prior permission.
36
37DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
38ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
39DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
40ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
41WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
42ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
43SOFTWARE.
44
45Copyright 1992, 1993 Data General Corporation;
46Copyright 1992, 1993 OMRON Corporation
47
48Permission to use, copy, modify, distribute, and sell this software and its
49documentation for any purpose is hereby granted without fee, provided that the
50above copyright notice appear in all copies and that both that copyright
51notice and this permission notice appear in supporting documentation, and that
52neither the name OMRON or DATA GENERAL be used in advertising or publicity
53pertaining to distribution of the software without specific, written prior
54permission of the party whose name is to be used. Neither OMRON or
55DATA GENERAL make any representation about the suitability of this software
56for any purpose. It is provided "as is" without express or implied warranty.
57
58OMRON AND DATA GENERAL EACH DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
59SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
60IN NO EVENT SHALL OMRON OR DATA GENERAL BE LIABLE FOR ANY SPECIAL, INDIRECT
61OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
62DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
63TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
64OF THIS SOFTWARE.
65
66******************************************************************/
67#ifndef MISC_H
68#define MISC_H 1
69/*
70 * X internal definitions
71 *
72 */
73
74#include <X11/Xosdefs.h>
75#include <X11/Xfuncproto.h>
76#include <X11/Xmd.h>
77#include <X11/X.h>
78#include <X11/Xdefs.h>
79
80#include <stddef.h>
81#include <stdint.h>
82
83#ifndef MAXSCREENS
84#define MAXSCREENS 16
85#endif
86#ifndef MAXGPUSCREENS
87#define MAXGPUSCREENS 16
88#endif
89#define MAXCLIENTS 256
90#define MAXEXTENSIONS 128
91#define MAXFORMATS 8
92#define MAXDEVICES 40 /* input devices */
93#define GPU_SCREEN_OFFSET 256
94
95/* 128 event opcodes for core + extension events, excluding GE */
96#define MAXEVENTS 128
97#define EXTENSION_EVENT_BASE 64
98#define EXTENSION_BASE 128
99
100typedef uint32_t ATOM;
101
102#ifndef TRUE
103#define TRUE 1
104#define FALSE 0
105#endif
106
107#ifndef _XTYPEDEF_CALLBACKLISTPTR
108typedef struct _CallbackList *CallbackListPtr; /* also in dix.h */
109
110#define _XTYPEDEF_CALLBACKLISTPTR
111#endif
112
113typedef struct _xReq *xReqPtr;
114
115#include "os.h" /* for ALLOCATE_LOCAL and DEALLOCATE_LOCAL */
116#include <X11/Xfuncs.h> /* for bcopy, bzero, and bcmp */
117
118#define NullBox ((BoxPtr)0)
119#define MILLI_PER_MIN (1000 * 60)
120#define MILLI_PER_SECOND (1000)
121
122 /* this next is used with None and ParentRelative to tell
123 PaintWin() what to use to paint the background. Also used
124 in the macro IS_VALID_PIXMAP */
125
126#define USE_BACKGROUND_PIXEL 3
127#define USE_BORDER_PIXEL 3
128
129/* byte swap a 32-bit literal */
130static inline uint32_t
131lswapl(uint32_t x)
132{
133 return ((x & 0xff) << 24) |
134 ((x & 0xff00) << 8) | ((x & 0xff0000) >> 8) | ((x >> 24) & 0xff);
135}
136
137/* byte swap a 16-bit literal */
138static inline uint16_t
139lswaps(uint16_t x)
140{
141 return ((x & 0xff) << 8) | ((x >> 8) & 0xff);
142}
143
144#undef min
145#undef max
146
147#define min(a, b) (((a) < (b)) ? (a) : (b))
148#define max(a, b) (((a) > (b)) ? (a) : (b))
149/* abs() is a function, not a macro; include the file declaring
150 * it in case we haven't done that yet.
151 */
152#include <stdlib.h>
153#define sign(x) ((x) < 0 ? -1 : ((x) > 0 ? 1 : 0))
154/* this assumes b > 0 */
155#define modulus(a, b, d) if (((d) = (a) % (b)) < 0) (d) += (b)
156/*
157 * return the least significant bit in x which is set
158 *
159 * This works on 1's complement and 2's complement machines.
160 * If you care about the extra instruction on 2's complement
161 * machines, change to ((x) & (-(x)))
162 */
163#define lowbit(x) ((x) & (~(x) + 1))
164
165/* XXX Not for modules */
166#include <limits.h>
167#if !defined(MAXSHORT) || !defined(MINSHORT) || \
168 !defined(MAXINT) || !defined(MININT)
169/*
170 * Some implementations #define these through <math.h>, so preclude
171 * #include'ing it later.
172 */
173
174#include <math.h>
175#undef MAXSHORT
176#define MAXSHORT SHRT_MAX
177#undef MINSHORT
178#define MINSHORT SHRT_MIN
179#undef MAXINT
180#define MAXINT INT_MAX
181#undef MININT
182#define MININT INT_MIN
183
184#include <assert.h>
185#include <ctype.h>
186#include <stdio.h> /* for fopen, etc... */
187
188#endif
189
190#ifndef PATH_MAX
191#include <sys/param.h>
192#ifndef PATH_MAX
193#ifdef MAXPATHLEN
194#define PATH_MAX MAXPATHLEN
195#else
196#define PATH_MAX 1024
197#endif
198#endif
199#endif
200
201/**
202 * Calculate the number of bytes needed to hold bits.
203 * @param bits The minimum number of bits needed.
204 * @return The number of bytes needed to hold bits.
205 */
206static inline int
207bits_to_bytes(const int bits)
208{
209 return ((bits + 7) >> 3);
210}
211
212/**
213 * Calculate the number of 4-byte units needed to hold the given number of
214 * bytes.
215 * @param bytes The minimum number of bytes needed.
216 * @return The number of 4-byte units needed to hold bytes.
217 */
218static inline int
219bytes_to_int32(const int bytes)
220{
221 return (((bytes) + 3) >> 2);
222}
223
224/**
225 * Calculate the number of bytes (in multiples of 4) needed to hold bytes.
226 * @param bytes The minimum number of bytes needed.
227 * @return The closest multiple of 4 that is equal or higher than bytes.
228 */
229static inline int
230pad_to_int32(const int bytes)
231{
232 return (((bytes) + 3) & ~3);
233}
234
235/**
236 * Calculate padding needed to bring the number of bytes to an even
237 * multiple of 4.
238 * @param bytes The minimum number of bytes needed.
239 * @return The bytes of padding needed to arrive at the closest multiple of 4
240 * that is equal or higher than bytes.
241 */
242static inline int
243padding_for_int32(const int bytes)
244{
245 return ((-bytes) & 3);
246}
247
248
249extern char **xstrtokenize(const char *str, const char *separators);
250extern void FormatInt64(int64_t num, char *string);
251extern void FormatUInt64(uint64_t num, char *string);
252extern void FormatUInt64Hex(uint64_t num, char *string);
253extern void FormatDouble(double dbl, char *string);
254
255/**
256 * Compare the two version numbers comprising of major.minor.
257 *
258 * @return A value less than 0 if a is less than b, 0 if a is equal to b,
259 * or a value greater than 0
260 */
261static inline int
262version_compare(uint16_t a_major, uint16_t a_minor,
263 uint16_t b_major, uint16_t b_minor)
264{
265 int a, b;
266
267 a = a_major << 16 | a_minor;
268 b = b_major << 16 | b_minor;
269
270 return (a - b);
271}
272
273/* some macros to help swap requests, replies, and events */
274
275#define LengthRestB(stuff) \
276 ((client->req_len << 2) - sizeof(*stuff))
277
278#define LengthRestS(stuff) \
279 ((client->req_len << 1) - (sizeof(*stuff) >> 1))
280
281#define LengthRestL(stuff) \
282 (client->req_len - (sizeof(*stuff) >> 2))
283
284#define SwapRestS(stuff) \
285 SwapShorts((short *)(stuff + 1), LengthRestS(stuff))
286
287#define SwapRestL(stuff) \
288 SwapLongs((CARD32 *)(stuff + 1), LengthRestL(stuff))
289
290#if defined(__GNUC__) && ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
291void __attribute__ ((error("wrong sized variable passed to swap")))
292wrong_size(void);
293#else
294static inline void
295wrong_size(void)
296{
297}
298#endif
299
300#if !(defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)))
301static inline int
302__builtin_constant_p(int x)
303{
304 return 0;
305}
306#endif
307
308/* byte swap a 32-bit value */
309static inline void
310swap_uint32(uint32_t * x)
311{
312 char n = ((char *) x)[0];
313
314 ((char *) x)[0] = ((char *) x)[3];
315 ((char *) x)[3] = n;
316 n = ((char *) x)[1];
317 ((char *) x)[1] = ((char *) x)[2];
318 ((char *) x)[2] = n;
319}
320
321#define swapl(x) do { \
322 if (sizeof(*(x)) != 4) \
323 wrong_size(); \
324 if (__builtin_constant_p((uintptr_t)(x) & 3) && ((uintptr_t)(x) & 3) == 0) \
325 *(x) = lswapl(*(x)); \
326 else \
327 swap_uint32((uint32_t *)(x)); \
328 } while (0)
329
330/* byte swap a 16-bit value */
331static inline void
332swap_uint16(uint16_t * x)
333{
334 char n = ((char *) x)[0];
335
336 ((char *) x)[0] = ((char *) x)[1];
337 ((char *) x)[1] = n;
338}
339
340#define swaps(x) do { \
341 if (sizeof(*(x)) != 2) \
342 wrong_size(); \
343 if (__builtin_constant_p((uintptr_t)(x) & 1) && ((uintptr_t)(x) & 1) == 0) \
344 *(x) = lswaps(*(x)); \
345 else \
346 swap_uint16((uint16_t *)(x)); \
347 } while (0)
348
349/* copy 32-bit value from src to dst byteswapping on the way */
350#define cpswapl(src, dst) do { \
351 if (sizeof((src)) != 4 || sizeof((dst)) != 4) \
352 wrong_size(); \
353 (dst) = lswapl((src)); \
354 } while (0)
355
356/* copy short from src to dst byteswapping on the way */
357#define cpswaps(src, dst) do { \
358 if (sizeof((src)) != 2 || sizeof((dst)) != 2) \
359 wrong_size(); \
360 (dst) = lswaps((src)); \
361 } while (0)
362
363extern _X_EXPORT void SwapLongs(CARD32 *list, unsigned long count);
364
365extern _X_EXPORT void SwapShorts(short *list, unsigned long count);
366
367extern _X_EXPORT void MakePredeclaredAtoms(void);
368
369extern _X_EXPORT int Ones(unsigned long /*mask */ );
370
371typedef struct _xPoint *DDXPointPtr;
372typedef struct pixman_box16 *BoxPtr;
373typedef struct _xEvent *xEventPtr;
374typedef struct _xRectangle *xRectanglePtr;
375typedef struct _GrabRec *GrabPtr;
376
377/* typedefs from other places - duplicated here to minimize the amount
378 * of unnecessary junk that one would normally have to include to get
379 * these symbols defined
380 */
381
382#ifndef _XTYPEDEF_CHARINFOPTR
383typedef struct _CharInfo *CharInfoPtr; /* also in fonts/include/font.h */
384
385#define _XTYPEDEF_CHARINFOPTR
386#endif
387
388extern _X_EXPORT unsigned long globalSerialNumber;
389extern _X_EXPORT unsigned long serverGeneration;
390
391/* Don't use this directly, use BUG_WARN or BUG_WARN_MSG instead */
392#define __BUG_WARN_MSG(cond, with_msg, ...) \
393 do { if (cond) { \
394 ErrorFSigSafe("BUG: triggered 'if (" #cond ")'\n"); \
395 ErrorFSigSafe("BUG: %s:%u in %s()\n", \
396 __FILE__, __LINE__, __func__); \
397 if (with_msg) ErrorFSigSafe(__VA_ARGS__); \
398 xorg_backtrace(); \
399 } } while(0)
400
401#define BUG_WARN_MSG(cond, ...) \
402 __BUG_WARN_MSG(cond, 1, __VA_ARGS__)
403
404#define BUG_WARN(cond) __BUG_WARN_MSG(cond, 0, NULL)
405
406#define BUG_RETURN(cond) \
407 do { if (cond) { __BUG_WARN_MSG(cond, 0, NULL); return; } } while(0)
408
409#define BUG_RETURN_MSG(cond, ...) \
410 do { if (cond) { __BUG_WARN_MSG(cond, 1, __VA_ARGS__); return; } } while(0)
411
412#define BUG_RETURN_VAL(cond, val) \
413 do { if (cond) { __BUG_WARN_MSG(cond, 0, NULL); return (val); } } while(0)
414
415#define BUG_RETURN_VAL_MSG(cond, val, ...) \
416 do { if (cond) { __BUG_WARN_MSG(cond, 1, __VA_ARGS__); return (val); } } while(0)
417
418#endif /* MISC_H */
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette