3 * Copyright (c) 1997-2003 by The XFree86 Project, Inc.
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the "Software"),
7 * to deal in the Software without restriction, including without limitation
8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9 * and/or sell copies of the Software, and to permit persons to whom the
10 * Software is furnished to do so, subject to the following conditions:
12 * The above copyright notice and this permission notice shall be included in
13 * all copies or substantial portions of the Software.
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
19 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
20 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
21 * OTHER DEALINGS IN THE SOFTWARE.
23 * Except as contained in this notice, the name of the copyright holder(s)
24 * and author(s) shall not be used in advertising or otherwise to promote
25 * the sale, use or other dealings in this Software without prior written
26 * authorization from the copyright holder(s) and author(s).
30 * This file contains declarations for public XFree86 functions and variables,
31 * and definitions of public macros.
33 * "public" means available to video drivers.
39 #if HAVE_XORG_CONFIG_H
40 #include <xorg-config.h>
41 #elif HAVE_DIX_CONFIG_H
42 #include <dix-config.h>
47 #include <X11/Xfuncproto.h>
50 #include <X11/extensions/randr.h>
53 #include "propertyst.h"
55 /* General parameters */
56 extern int xf86DoConfigure
;
57 extern Bool xf86DoConfigurePass1
;
58 extern int xf86ScreenIndex
; /* Index into pScreen.devPrivates */
59 extern int xf86CreateRootWindowIndex
; /* Index into pScreen.devPrivates */
60 extern int xf86PixmapIndex
;
61 extern ScrnInfoPtr
*xf86Screens
; /* List of pointers to ScrnInfoRecs */
62 extern const unsigned char byte_reversed
[256];
63 extern ScrnInfoPtr xf86CurrentScreen
;
64 extern Bool pciSlotClaimed
;
65 extern Bool isaSlotClaimed
;
66 extern Bool fbSlotClaimed
;
67 #if defined(__sparc__) || defined(__sparc)
68 extern Bool sbusSlotClaimed
;
70 extern confDRIRec xf86ConfigDRI
;
71 extern Bool xf86inSuspend
;
73 #define XF86SCRNINFO(p) ((ScrnInfoPtr)((p)->devPrivates[xf86ScreenIndex].ptr))
75 #define XF86FLIP_PIXELS() \
77 if (xf86GetFlipPixels()) { \
78 pScreen->whitePixel = (pScreen->whitePixel) ? 0 : 1; \
79 pScreen->blackPixel = (pScreen->blackPixel) ? 0 : 1; \
83 #define BOOLTOSTRING(b) ((b) ? "TRUE" : "FALSE")
85 #define PIX24TOBPP(p) (((p) == Pix24Use24) ? 24 : \
86 (((p) == Pix24Use32) ? 32 : 0))
88 /* Function Prototypes */
89 #ifndef _NO_XF86_PROTOTYPES
93 Bool
xf86CheckPciSlot(int bus
, int device
, int func
);
94 int xf86ClaimPciSlot(int bus
, int device
, int func
, DriverPtr drvp
,
95 int chipset
, GDevPtr dev
, Bool active
);
96 Bool
xf86ParsePciBusString(const char *busID
, int *bus
, int *device
,
98 Bool
xf86ComparePciBusString(const char *busID
, int bus
, int device
, int func
);
99 void xf86FormatPciBusNumber(int busnum
, char *buffer
);
100 pciVideoPtr
*xf86GetPciVideoInfo(void);
101 pciConfigPtr
*xf86GetPciConfigInfo(void);
102 void xf86SetPciVideo(pciVideoPtr
, resType
);
103 void xf86PrintResList(int verb
, resPtr list
);
104 resPtr
xf86AddRangesToList(resPtr list
, resRange
*pRange
, int entityIndex
);
105 int xf86ClaimIsaSlot(DriverPtr drvp
, int chipset
, GDevPtr dev
, Bool active
);
106 int xf86GetIsaInfoForScreen(int scrnIndex
);
107 int xf86GetFbInfoForScreen(int scrnIndex
);
108 Bool
xf86ParseIsaBusString(const char *busID
);
109 int xf86ClaimFbSlot(DriverPtr drvp
, int chipset
, GDevPtr dev
, Bool active
);
110 int xf86ClaimNoSlot(DriverPtr drvp
, int chipset
, GDevPtr dev
, Bool active
);
111 void xf86EnableAccess(ScrnInfoPtr pScrn
);
112 void xf86SetCurrentAccess(Bool Enable
, ScrnInfoPtr pScrn
);
113 Bool
xf86IsPrimaryPci(pciVideoPtr pPci
);
114 Bool
xf86IsPrimaryIsa(void);
116 resPtr
xf86AddResToList(resPtr rlist
, resRange
*Range
, int entityIndex
);
117 resPtr
xf86JoinResLists(resPtr rlist1
, resPtr rlist2
);
118 resPtr
xf86DupResList(const resPtr rlist
);
119 void xf86FreeResList(resPtr rlist
);
120 void xf86ClaimFixedResources(resList list
, int entityIndex
);
121 Bool
xf86DriverHasEntities(DriverPtr drvp
);
122 void xf86AddEntityToScreen(ScrnInfoPtr pScrn
, int entityIndex
);
123 void xf86SetEntityInstanceForScreen(ScrnInfoPtr pScrn
, int entityIndex
,
125 int xf86GetNumEntityInstances(int entityIndex
);
126 GDevPtr
xf86GetDevFromEntity(int entityIndex
, int instance
);
127 void xf86RemoveEntityFromScreen(ScrnInfoPtr pScrn
, int entityIndex
);
128 EntityInfoPtr
xf86GetEntityInfo(int entityIndex
);
129 pciVideoPtr
xf86GetPciInfoForEntity(int entityIndex
);
130 int xf86GetPciEntity(int bus
, int dev
, int func
);
131 Bool
xf86SetEntityFuncs(int entityIndex
, EntityProc init
,
132 EntityProc enter
, EntityProc leave
, pointer
);
133 void xf86DeallocateResourcesForEntity(int entityIndex
, unsigned long type
);
134 resPtr
xf86RegisterResources(int entityIndex
, resList list
,
135 unsigned long Access
);
136 Bool
xf86CheckPciMemBase(pciVideoPtr pPci
, memType base
);
137 void xf86SetAccessFuncs(EntityInfoPtr pEnt
, xf86SetAccessFuncPtr funcs
,
138 xf86SetAccessFuncPtr oldFuncs
);
139 Bool
xf86IsEntityPrimary(int entityIndex
);
140 Bool
xf86FixPciResource(int entityIndex
, int prt
, memType alignment
,
142 resPtr
xf86ReallocatePciResources(int entityIndex
, resPtr pRes
);
143 resPtr
xf86SetOperatingState(resList list
, int entityIndex
, int mask
);
144 void xf86EnterServerState(xf86State state
);
145 resRange
xf86GetBlock(unsigned long type
, memType size
,
146 memType window_start
, memType window_end
,
147 memType align_mask
, resPtr avoid
);
148 resRange
xf86GetSparse(unsigned long type
, memType fixed_bits
,
149 memType decode_mask
, memType address_mask
,
151 memType
xf86ChkConflict(resRange
*rgp
, int entityIndex
);
152 Bool
xf86IsPciDevPresent(int bus
, int dev
, int func
);
153 ScrnInfoPtr
xf86FindScreenForEntity(int entityIndex
);
154 Bool
xf86NoSharedResources(int screenIndex
, resType res
);
155 resPtr
xf86FindIntersectOfLists(resPtr l1
, resPtr l2
);
156 pciVideoPtr
xf86FindPciDeviceVendor(CARD16 vendorID
, CARD16 deviceID
,
157 char n
, pciVideoPtr pvp_exclude
);
158 pciVideoPtr
xf86FindPciClass(CARD8 intf
, CARD8 subClass
, CARD16
class,
159 char n
, pciVideoPtr pvp_exclude
);
160 void xf86RegisterStateChangeNotificationCallback(xf86StateChangeNotificationCallbackFunc func
, pointer arg
);
161 Bool
xf86DeregisterStateChangeNotificationCallback(xf86StateChangeNotificationCallbackFunc func
);
163 int xf86GetLastScrnFlag(int entityIndex
);
164 void xf86SetLastScrnFlag(int entityIndex
, int scrnIndex
);
165 Bool
xf86IsEntityShared(int entityIndex
);
166 void xf86SetEntityShared(int entityIndex
);
167 Bool
xf86IsEntitySharable(int entityIndex
);
168 void xf86SetEntitySharable(int entityIndex
);
169 Bool
xf86IsPrimInitDone(int entityIndex
);
170 void xf86SetPrimInitDone(int entityIndex
);
171 void xf86ClearPrimInitDone(int entityIndex
);
172 int xf86AllocateEntityPrivateIndex(void);
173 DevUnion
*xf86GetEntityPrivate(int entityIndex
, int privIndex
);
175 /* xf86Configure.c */
176 GDevPtr
xf86AddBusDeviceToConfigure(const char *driver
, BusType bus
,
177 void *busData
, int chipset
);
178 GDevPtr
xf86AddDeviceToConfigure(const char *driver
, pciVideoPtr pVideo
,
183 void xf86LockZoom(ScreenPtr pScreen
, int lock
);
184 void xf86InitViewport(ScrnInfoPtr pScr
);
185 void xf86SetViewport(ScreenPtr pScreen
, int x
, int y
);
186 void xf86ZoomViewport(ScreenPtr pScreen
, int zoom
);
187 Bool
xf86SwitchMode(ScreenPtr pScreen
, DisplayModePtr mode
);
188 void *xf86GetPointerScreenFuncs(void);
189 void xf86InitOrigins(void);
190 void xf86ReconfigureLayout(void);
193 DisplayModePtr
xf86CVTMode(int HDisplay
, int VDisplay
, float VRefresh
,
194 Bool Reduced
, Bool Interlaced
);
198 Bool
xf86DPMSInit(ScreenPtr pScreen
, DPMSSetProcPtr set
, int flags
);
202 Bool
DGAInit(ScreenPtr pScreen
, DGAFunctionPtr funcs
, DGAModePtr modes
,
204 Bool
DGAReInitModes(ScreenPtr pScreen
, DGAModePtr modes
, int num
);
205 xf86SetDGAModeProc xf86SetDGAMode
;
209 void SetTimeSinceLastInputEvent(void);
210 pointer
xf86AddInputHandler(int fd
, InputHandlerProc proc
, pointer data
);
211 int xf86RemoveInputHandler(pointer handler
);
212 void xf86DisableInputHandler(pointer handler
);
213 void xf86EnableInputHandler(pointer handler
);
214 pointer
xf86AddGeneralHandler(int fd
, InputHandlerProc proc
, pointer data
);
215 int xf86RemoveGeneralHandler(pointer handler
);
216 void xf86DisableGeneralHandler(pointer handler
);
217 void xf86EnableGeneralHandler(pointer handler
);
218 void xf86InterceptSignals(int *signo
);
219 void xf86InterceptSigIll(void (*sigillhandler
)(void));
220 Bool
xf86EnableVTSwitch(Bool
new);
221 Bool
xf86CommonSpecialKey(int key
, Bool down
, int modifiers
);
222 void xf86ProcessActionEvent(ActionEvent action
, void *arg
);
226 void xf86AddDriver(DriverPtr driver
, pointer module
, int flags
);
227 void xf86DeleteDriver(int drvIndex
);
228 ScrnInfoPtr
xf86AllocateScreen(DriverPtr drv
, int flags
);
229 void xf86DeleteScreen(int scrnIndex
, int flags
);
230 int xf86AllocateScrnInfoPrivateIndex(void);
231 Bool
xf86AddPixFormat(ScrnInfoPtr pScrn
, int depth
, int bpp
, int pad
);
232 Bool
xf86SetDepthBpp(ScrnInfoPtr scrp
, int depth
, int bpp
, int fbbpp
,
234 void xf86PrintDepthBpp(ScrnInfoPtr scrp
);
235 Bool
xf86SetWeight(ScrnInfoPtr scrp
, rgb weight
, rgb mask
);
236 Bool
xf86SetDefaultVisual(ScrnInfoPtr scrp
, int visual
);
237 Bool
xf86SetGamma(ScrnInfoPtr scrp
, Gamma newGamma
);
238 void xf86SetDpi(ScrnInfoPtr pScrn
, int x
, int y
);
239 void xf86SetBlackWhitePixels(ScreenPtr pScreen
);
240 void xf86EnableDisableFBAccess(int scrnIndex
, Bool enable
);
241 void xf86VDrvMsgVerb(int scrnIndex
, MessageType type
, int verb
,
242 const char *format
, va_list args
);
243 void xf86DrvMsgVerb(int scrnIndex
, MessageType type
, int verb
,
244 const char *format
, ...) _printf_attribute(4,5);
245 void xf86DrvMsg(int scrnIndex
, MessageType type
, const char *format
, ...)
246 _printf_attribute(3,4);
247 void xf86MsgVerb(MessageType type
, int verb
, const char *format
, ...)
248 _printf_attribute(3,4);
249 void xf86Msg(MessageType type
, const char *format
, ...) _printf_attribute(2,3);
250 void xf86ErrorFVerb(int verb
, const char *format
, ...) _printf_attribute(2,3);
251 void xf86ErrorF(const char *format
, ...) _printf_attribute(1,2);
252 const char *xf86TokenToString(SymTabPtr table
, int token
);
253 int xf86StringToToken(SymTabPtr table
, const char *string
);
254 void xf86ShowClocks(ScrnInfoPtr scrp
, MessageType from
);
255 void xf86PrintChipsets(const char *drvname
, const char *drvmsg
,
257 int xf86MatchDevice(const char *drivername
, GDevPtr
**driversectlist
);
258 int xf86MatchPciInstances(const char *driverName
, int vendorID
,
259 SymTabPtr chipsets
, PciChipsets
*PCIchipsets
,
260 GDevPtr
*devList
, int numDevs
, DriverPtr drvp
,
261 int **foundEntities
);
262 int xf86MatchIsaInstances(const char *driverName
, SymTabPtr chipsets
,
263 IsaChipsets
*ISAchipsets
, DriverPtr drvp
,
264 FindIsaDevProc FindIsaDevice
, GDevPtr
*devList
,
265 int numDevs
, int **foundEntities
);
266 void xf86GetClocks(ScrnInfoPtr pScrn
, int num
,
267 Bool (*ClockFunc
)(ScrnInfoPtr
, int),
268 void (*ProtectRegs
)(ScrnInfoPtr
, Bool
),
269 void (*BlankScreen
)(ScrnInfoPtr
, Bool
),
270 IOADDRESS vertsyncreg
, int maskval
,
271 int knownclkindex
, int knownclkvalue
);
272 void xf86SetPriority(Bool up
);
273 const char *xf86GetVisualName(int visual
);
274 int xf86GetVerbosity(void);
275 Pix24Flags
xf86GetPix24(void);
276 int xf86GetDepth(void);
277 rgb
xf86GetWeight(void);
278 Gamma
xf86GetGamma(void);
279 Bool
xf86GetFlipPixels(void);
280 const char *xf86GetServerName(void);
281 Bool
xf86ServerIsExiting(void);
282 Bool
xf86ServerIsResetting(void);
283 Bool
xf86ServerIsInitialising(void);
284 Bool
xf86ServerIsOnlyDetecting(void);
285 Bool
xf86ServerIsOnlyProbing(void);
286 Bool
xf86CaughtSignal(void);
287 Bool
xf86GetVidModeAllowNonLocal(void);
288 Bool
xf86GetVidModeEnabled(void);
289 Bool
xf86GetModInDevAllowNonLocal(void);
290 Bool
xf86GetModInDevEnabled(void);
291 Bool
xf86GetAllowMouseOpenFail(void);
292 Bool
xf86IsPc98(void);
293 void xf86DisableRandR(void);
294 CARD32
xf86GetVersion(void);
295 CARD32
xorgGetVersion(void);
296 CARD32
xf86GetModuleVersion(pointer module
);
297 pointer
xf86LoadDrvSubModule(DriverPtr drv
, const char *name
);
298 pointer
xf86LoadSubModule(ScrnInfoPtr pScrn
, const char *name
);
299 pointer
xf86LoadOneModule(char *name
, pointer optlist
);
300 void xf86UnloadSubModule(pointer mod
);
301 Bool
xf86LoaderCheckSymbol(const char *name
);
302 void xf86LoaderReqSymLists(const char **, ...);
303 void xf86LoaderReqSymbols(const char *, ...);
304 void xf86LoaderRefSymLists(const char **, ...);
305 void xf86LoaderRefSymbols(const char *, ...);
306 void xf86SetBackingStore(ScreenPtr pScreen
);
307 void xf86SetSilkenMouse(ScreenPtr pScreen
);
308 int xf86NewSerialNumber(WindowPtr p
, pointer unused
);
309 pointer
xf86FindXvOptions(int scrnIndex
, int adapt_index
, char *port_name
,
310 char **adaptor_name
, pointer
*adaptor_options
);
311 void xf86GetOS(const char **name
, int *major
, int *minor
, int *teeny
);
312 ScrnInfoPtr
xf86ConfigPciEntity(ScrnInfoPtr pScrn
, int scrnFlag
,
313 int entityIndex
,PciChipsets
*p_chip
,
314 resList res
, EntityProc init
,
315 EntityProc enter
, EntityProc leave
,
317 ScrnInfoPtr
xf86ConfigIsaEntity(ScrnInfoPtr pScrn
, int scrnFlag
,
318 int entityIndex
, IsaChipsets
*i_chip
,
319 resList res
, EntityProc init
,
320 EntityProc enter
, EntityProc leave
,
322 ScrnInfoPtr
xf86ConfigFbEntity(ScrnInfoPtr pScrn
, int scrnFlag
,
323 int entityIndex
, EntityProc init
,
324 EntityProc enter
, EntityProc leave
,
326 /* Obsolete! don't use */
327 Bool
xf86ConfigActivePciEntity(ScrnInfoPtr pScrn
,
328 int entityIndex
,PciChipsets
*p_chip
,
329 resList res
, EntityProc init
,
330 EntityProc enter
, EntityProc leave
,
332 /* Obsolete! don't use */
333 Bool
xf86ConfigActiveIsaEntity(ScrnInfoPtr pScrn
,
334 int entityIndex
, IsaChipsets
*i_chip
,
335 resList res
, EntityProc init
,
336 EntityProc enter
, EntityProc leave
,
338 void xf86ConfigPciEntityInactive(EntityInfoPtr pEnt
, PciChipsets
*p_chip
,
339 resList res
, EntityProc init
,
340 EntityProc enter
, EntityProc leave
,
342 void xf86ConfigIsaEntityInactive(EntityInfoPtr pEnt
, IsaChipsets
*i_chip
,
343 resList res
, EntityProc init
,
344 EntityProc enter
, EntityProc leave
,
346 void xf86ConfigFbEntityInactive(EntityInfoPtr pEnt
, EntityProc init
,
347 EntityProc enter
, EntityProc leave
,
349 Bool
xf86IsScreenPrimary(int scrnIndex
);
350 int xf86RegisterRootWindowProperty(int ScrnIndex
, Atom property
, Atom type
,
351 int format
, unsigned long len
,
353 Bool
xf86IsUnblank(int mode
);
355 void xf86AddModuleInfo(ModuleInfoPtr info
, pointer module
);
356 void xf86DeleteModuleInfo(int idx
);
360 CARD8
xf86PeekFb8(CARD8
*p
);
361 CARD16
xf86PeekFb16(CARD16
*p
);
362 CARD32
xf86PeekFb32(CARD32
*p
);
363 void xf86PokeFb8(CARD8
*p
, CARD8 v
);
364 void xf86PokeFb16(CARD16
*p
, CARD16 v
);
365 void xf86PokeFb32(CARD16
*p
, CARD32 v
);
366 CARD8
xf86PeekMmio8(pointer Base
, unsigned long Offset
);
367 CARD16
xf86PeekMmio16(pointer Base
, unsigned long Offset
);
368 CARD32
xf86PeekMmio32(pointer Base
, unsigned long Offset
);
369 void xf86PokeMmio8(pointer Base
, unsigned long Offset
, CARD8 v
);
370 void xf86PokeMmio16(pointer Base
, unsigned long Offset
, CARD16 v
);
371 void xf86PokeMmio32(pointer Base
, unsigned long Offset
, CARD32 v
);
376 PixmapFormatPtr
xf86GetPixFormat(ScrnInfoPtr pScrn
, int depth
);
377 int xf86GetBppFromDepth(ScrnInfoPtr pScrn
, int depth
);
381 int xf86GetNearestClock(ScrnInfoPtr scrp
, int freq
, Bool allowDiv2
,
382 int DivFactor
, int MulFactor
, int *divider
);
383 const char *xf86ModeStatusToString(ModeStatus status
);
384 ModeStatus
xf86LookupMode(ScrnInfoPtr scrp
, DisplayModePtr modep
,
385 ClockRangePtr clockRanges
, LookupModeFlags strategy
);
386 ModeStatus
xf86CheckModeForMonitor(DisplayModePtr mode
, MonPtr monitor
);
387 ModeStatus
xf86InitialCheckModeForDriver(ScrnInfoPtr scrp
, DisplayModePtr mode
,
388 ClockRangePtr clockRanges
,
389 LookupModeFlags strategy
,
390 int maxPitch
, int virtualX
,
392 ModeStatus
xf86CheckModeForDriver(ScrnInfoPtr scrp
, DisplayModePtr mode
,
394 int xf86ValidateModes(ScrnInfoPtr scrp
, DisplayModePtr availModes
,
395 char **modeNames
, ClockRangePtr clockRanges
,
396 int *linePitches
, int minPitch
, int maxPitch
,
397 int minHeight
, int maxHeight
, int pitchInc
,
398 int virtualX
, int virtualY
, int apertureSize
,
399 LookupModeFlags strategy
);
400 void xf86DeleteMode(DisplayModePtr
*modeList
, DisplayModePtr mode
);
401 void xf86PruneDriverModes(ScrnInfoPtr scrp
);
402 void xf86SetCrtcForModes(ScrnInfoPtr scrp
, int adjustFlags
);
403 void xf86PrintModes(ScrnInfoPtr scrp
);
404 void xf86ShowClockRanges(ScrnInfoPtr scrp
, ClockRangePtr clockRanges
);
405 double xf86ModeHSync(DisplayModePtr mode
);
406 double xf86ModeVRefresh(DisplayModePtr mode
);
407 void xf86SetModeDefaultName(DisplayModePtr mode
);
408 void xf86SetModeCrtc(DisplayModePtr p
, int adjustFlags
);
409 DisplayModePtr
xf86DuplicateMode(DisplayModePtr pMode
);
410 DisplayModePtr
xf86DuplicateModes(ScrnInfoPtr pScrn
, DisplayModePtr modeList
);
411 Bool
xf86ModesEqual(DisplayModePtr pMode1
, DisplayModePtr pMode2
);
412 void xf86PrintModeline(int scrnIndex
,DisplayModePtr mode
);
413 DisplayModePtr
xf86ModesAdd(DisplayModePtr modes
, DisplayModePtr
new);
417 void xf86CollectOptions(ScrnInfoPtr pScrn
, pointer extraOpts
);
422 Bool
xf86RandRInit (ScreenPtr pScreen
);
423 void xf86RandRSetInitialMode (ScreenPtr pScreen
);
424 Rotation
xf86GetRotation(ScreenPtr pScreen
);
425 Bool
xf86RandRSetNewVirtualAndDimensions(ScreenPtr pScreen
,
426 int newvirtX
, int newvirtY
,
427 int newmmWidth
, int newmmHeight
, Bool resetMode
);
430 /* xf86VidModeExtentionInit.c */
432 Bool
VidModeExtensionInit(ScreenPtr pScreen
);
435 CARD32
xf86GetBuiltinInterfaceVersion(BuiltinInterface iface
, int flag
);
436 Bool
xf86RegisterBuiltinInterfaceVersion(BuiltinInterface iface
,
437 CARD32 version
, int flags
);
440 #endif /* _NO_XF86_PROTOTYPES */