1 /*
2 * Copyright (c) 1997-2003 by The XFree86 Project, Inc.
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20 * OTHER DEALINGS IN THE SOFTWARE.
21 *
22 * Except as contained in this notice, the name of the copyright holder(s)
23 * and author(s) shall not be used in advertising or otherwise to promote
24 * the sale, use or other dealings in this Software without prior written
25 * authorization from the copyright holder(s) and author(s).
26 */
27
28 /*
29 * This file contains declarations for public XFree86 functions and variables,
30 * and definitions of public macros.
31 *
32 * "public" means available to video drivers.
33 */
34
35 #ifndef _XF86_H
36 #define _XF86_H
37
38 #ifdef HAVE_XORG_CONFIG_H
39 #include <xorg-config.h>
40 #elif HAVE_DIX_CONFIG_H
41 #include <dix-config.h>
42 #endif
43
44 #include "xf86str.h"
45 #include "xf86Opt.h"
46 #include <X11/Xfuncproto.h>
47 #include <stdarg.h>
48 #ifdef RANDR
49 #include <X11/extensions/randr.h>
50 #endif
51
52 #include "propertyst.h"
53
54 /* General parameters */
55 extern _X_EXPORT int xf86DoConfigure;
56 extern _X_EXPORT int xf86DoShowOptions;
57 extern _X_EXPORT Bool xf86DoConfigurePass1;
58 extern _X_EXPORT Bool xf86ProbeIgnorePrimary;
59 extern _X_EXPORT Bool xorgHWAccess;
60
61 extern _X_EXPORT DevPrivateKeyRec xf86ScreenKeyRec;
62
63 #define xf86ScreenKey (&xf86ScreenKeyRec)
64
65 extern _X_EXPORT ScrnInfoPtr *xf86Screens; /* List of pointers to ScrnInfoRecs */
66 extern _X_EXPORT const unsigned char byte_reversed[256];
67 extern _X_EXPORT Bool fbSlotClaimed;
68
69 #if (defined(__sparc__) || defined(__sparc)) && !defined(__OpenBSD__)
70 extern _X_EXPORT Bool sbusSlotClaimed;
71 #endif
72
73 #if defined(XSERVER_PLATFORM_BUS)
74 extern _X_EXPORT int platformSlotClaimed;
75 #endif
76
77 extern _X_EXPORT confDRIRec xf86ConfigDRI;
78 extern _X_EXPORT Bool xf86DRI2Enabled(void);
79
80 #define XF86SCRNINFO(p) xf86ScreenToScrn(p)
81
82 #define XF86FLIP_PIXELS() \
83 do { \
84 if (xf86GetFlipPixels()) { \
85 pScreen->whitePixel = (pScreen->whitePixel) ? 0 : 1; \
86 pScreen->blackPixel = (pScreen->blackPixel) ? 0 : 1; \
87 } \
88 while (0)
89
90 #define BOOLTOSTRING(b) ((b) ? "TRUE" : "FALSE")
91
92 /* Compatibility functions for pre-input-thread drivers */
xf86BlockSIGIO(void)93 static inline _X_DEPRECATED int xf86BlockSIGIO(void) { input_lock(); return 0; }
xf86UnblockSIGIO(int wasset)94 static inline _X_DEPRECATED void xf86UnblockSIGIO(int wasset) { input_unlock(); }
95
96 /* Function Prototypes */
97 #ifndef _NO_XF86_PROTOTYPES
98
99 /* PCI related */
100 #ifdef XSERVER_LIBPCIACCESS
101 #include <pciaccess.h>
102 extern _X_EXPORT int pciSlotClaimed;
103
104 extern _X_EXPORT Bool xf86CheckPciSlot(const struct pci_device *);
105 extern _X_EXPORT int xf86ClaimPciSlot(struct pci_device *, DriverPtr drvp,
106 int chipset, GDevPtr dev, Bool active);
107 extern _X_EXPORT void xf86UnclaimPciSlot(struct pci_device *, GDevPtr dev);
108 extern _X_EXPORT Bool xf86ParsePciBusString(const char *busID, int *bus,
109 int *device, int *func);
110 extern _X_EXPORT Bool xf86ComparePciBusString(const char *busID, int bus,
111 int device, int func);
112 extern _X_EXPORT Bool xf86IsPrimaryPci(struct pci_device *pPci);
113 extern _X_EXPORT Bool xf86CheckPciMemBase(struct pci_device *pPci,
114 memType base);
115 extern _X_EXPORT struct pci_device *xf86GetPciInfoForEntity(int entityIndex);
116 extern _X_EXPORT int xf86MatchPciInstances(const char *driverName,
117 int vendorID, SymTabPtr chipsets,
118 PciChipsets * PCIchipsets,
119 GDevPtr * devList, int numDevs,
120 DriverPtr drvp, int **foundEntities);
121 extern _X_EXPORT ScrnInfoPtr xf86ConfigPciEntity(ScrnInfoPtr pScrn,
122 int scrnFlag, int entityIndex,
123 PciChipsets * p_chip,
124 void *dummy, EntityProc init,
125 EntityProc enter,
126 EntityProc leave,
127 void *private);
128 #else
129 #define xf86VGAarbiterInit() do {} while (0)
130 #define xf86VGAarbiterFini() do {} while (0)
131 #define xf86VGAarbiterLock(x) do {} while (0)
132 #define xf86VGAarbiterUnlock(x) do {} while (0)
133 #define xf86VGAarbiterScrnInit(x) do {} while (0)
134 #define xf86VGAarbiterDeviceDecodes() do {} while (0)
135 #define xf86VGAarbiterWrapFunctions() do {} while (0)
136 #endif
137
138 /* xf86Bus.c */
139
140 extern _X_EXPORT int xf86GetFbInfoForScreen(int scrnIndex);
141 extern _X_EXPORT int xf86ClaimFbSlot(DriverPtr drvp, int chipset, GDevPtr dev,
142 Bool active);
143 extern _X_EXPORT int xf86ClaimNoSlot(DriverPtr drvp, int chipset, GDevPtr dev,
144 Bool active);
145 extern _X_EXPORT Bool xf86DriverHasEntities(DriverPtr drvp);
146 extern _X_EXPORT void xf86AddEntityToScreen(ScrnInfoPtr pScrn, int entityIndex);
147 extern _X_EXPORT void xf86SetEntityInstanceForScreen(ScrnInfoPtr pScrn,
148 int entityIndex,
149 int instance);
150 extern _X_EXPORT int xf86GetNumEntityInstances(int entityIndex);
151 extern _X_EXPORT GDevPtr xf86GetDevFromEntity(int entityIndex, int instance);
152 extern _X_EXPORT void xf86RemoveEntityFromScreen(ScrnInfoPtr pScrn,
153 int entityIndex);
154 extern _X_EXPORT EntityInfoPtr xf86GetEntityInfo(int entityIndex);
155 extern _X_EXPORT Bool xf86IsEntityPrimary(int entityIndex);
156 extern _X_EXPORT ScrnInfoPtr xf86FindScreenForEntity(int entityIndex);
157
158 extern _X_EXPORT int xf86GetLastScrnFlag(int entityIndex);
159 extern _X_EXPORT void xf86SetLastScrnFlag(int entityIndex, int scrnIndex);
160 extern _X_EXPORT Bool xf86IsEntityShared(int entityIndex);
161 extern _X_EXPORT void xf86SetEntityShared(int entityIndex);
162 extern _X_EXPORT Bool xf86IsEntitySharable(int entityIndex);
163 extern _X_EXPORT void xf86SetEntitySharable(int entityIndex);
164 extern _X_EXPORT Bool xf86IsPrimInitDone(int entityIndex);
165 extern _X_EXPORT void xf86SetPrimInitDone(int entityIndex);
166 extern _X_EXPORT void xf86ClearPrimInitDone(int entityIndex);
167 extern _X_EXPORT int xf86AllocateEntityPrivateIndex(void);
168 extern _X_EXPORT DevUnion *xf86GetEntityPrivate(int entityIndex, int privIndex);
169
170 /* xf86Configure.c */
171 extern _X_EXPORT GDevPtr xf86AddBusDeviceToConfigure(const char *driver,
172 BusType bus, void *busData,
173 int chipset);
174
175 /* xf86Cursor.c */
176
177 extern _X_EXPORT void xf86LockZoom(ScreenPtr pScreen, int lock);
178 extern _X_EXPORT void xf86InitViewport(ScrnInfoPtr pScr);
179 extern _X_EXPORT void xf86SetViewport(ScreenPtr pScreen, int x, int y);
180 extern _X_EXPORT void xf86ZoomViewport(ScreenPtr pScreen, int zoom);
181 extern _X_EXPORT Bool xf86SwitchMode(ScreenPtr pScreen, DisplayModePtr mode);
182 extern _X_EXPORT void *xf86GetPointerScreenFuncs(void);
183 extern _X_EXPORT void xf86InitOrigins(void);
184 extern _X_EXPORT void xf86ReconfigureLayout(void);
185
186 /* xf86DPMS.c */
187
188 extern _X_EXPORT Bool xf86DPMSInit(ScreenPtr pScreen, DPMSSetProcPtr set,
189 int flags);
190
191 /* xf86DGA.c */
192
193 #ifdef XFreeXDGA
194 extern _X_EXPORT Bool DGAInit(ScreenPtr pScreen, DGAFunctionPtr funcs,
195 DGAModePtr modes, int num);
196 extern _X_EXPORT Bool DGAReInitModes(ScreenPtr pScreen, DGAModePtr modes,
197 int num);
198 extern _X_EXPORT xf86SetDGAModeProc xf86SetDGAMode;
199 #endif
200
201 /* xf86Events.c */
202
203 typedef struct _InputInfoRec *InputInfoPtr;
204
205 extern _X_EXPORT void SetTimeSinceLastInputEvent(void);
206 extern _X_EXPORT void *xf86AddInputHandler(int fd, InputHandlerProc proc,
207 void *data);
208 extern _X_EXPORT int xf86RemoveInputHandler(void *handler);
209 extern _X_EXPORT void xf86DisableInputHandler(void *handler);
210 extern _X_EXPORT void xf86EnableInputHandler(void *handler);
211 extern _X_EXPORT void *xf86AddGeneralHandler(int fd, InputHandlerProc proc,
212 void *data);
213 extern _X_EXPORT int xf86RemoveGeneralHandler(void *handler);
214 extern _X_EXPORT void xf86DisableGeneralHandler(void *handler);
215 extern _X_EXPORT void xf86EnableGeneralHandler(void *handler);
216 extern _X_EXPORT InputHandlerProc xf86SetConsoleHandler(InputHandlerProc
217 handler, void *data);
218 extern _X_EXPORT void xf86ProcessActionEvent(ActionEvent action, void *arg);
219 extern _X_EXPORT void xf86PrintBacktrace(void);
220 extern _X_EXPORT Bool xf86VTOwner(void);
221 extern _X_EXPORT void xf86VTLeave(void);
222 extern _X_EXPORT void xf86VTEnter(void);
223 extern _X_EXPORT void xf86EnableInputDeviceForVTSwitch(InputInfoPtr pInfo);
224 extern _X_EXPORT void xf86DisableInputDeviceForVTSwitch(InputInfoPtr pInfo);
225
226 /* xf86Helper.c */
227
228 extern _X_EXPORT void xf86AddDriver(DriverPtr driver, void *module,
229 int flags);
230 extern _X_EXPORT void xf86DeleteDriver(int drvIndex);
231 extern _X_EXPORT ScrnInfoPtr xf86AllocateScreen(DriverPtr drv, int flags);
232 extern _X_EXPORT void xf86DeleteScreen(ScrnInfoPtr pScrn);
233 extern _X_EXPORT int xf86AllocateScrnInfoPrivateIndex(void);
234 extern _X_EXPORT Bool xf86AddPixFormat(ScrnInfoPtr pScrn, int depth, int bpp,
235 int pad);
236 extern _X_EXPORT Bool xf86SetDepthBpp(ScrnInfoPtr scrp, int depth, int bpp,
237 int fbbpp, int depth24flags);
238 extern _X_EXPORT void xf86PrintDepthBpp(ScrnInfoPtr scrp);
239 extern _X_EXPORT Bool xf86SetWeight(ScrnInfoPtr scrp, rgb weight, rgb mask);
240 extern _X_EXPORT Bool xf86SetDefaultVisual(ScrnInfoPtr scrp, int visual);
241 extern _X_EXPORT Bool xf86SetGamma(ScrnInfoPtr scrp, Gamma newGamma);
242 extern _X_EXPORT void xf86SetDpi(ScrnInfoPtr pScrn, int x, int y);
243 extern _X_EXPORT void xf86SetBlackWhitePixels(ScreenPtr pScreen);
244 extern _X_EXPORT void xf86EnableDisableFBAccess(ScrnInfoPtr pScrn, Bool enable);
245 extern _X_EXPORT void
246 xf86VDrvMsgVerb(int scrnIndex, MessageType type, int verb,
247 const char *format, va_list args)
248 _X_ATTRIBUTE_PRINTF(4, 0);
249 extern _X_EXPORT void
250 xf86DrvMsgVerb(int scrnIndex, MessageType type, int verb,
251 const char *format, ...)
252 _X_ATTRIBUTE_PRINTF(4, 5);
253 extern _X_EXPORT void
254 xf86DrvMsg(int scrnIndex, MessageType type, const char *format, ...)
255 _X_ATTRIBUTE_PRINTF(3, 4);
256 extern _X_EXPORT void
257 xf86MsgVerb(MessageType type, int verb, const char *format, ...)
258 _X_ATTRIBUTE_PRINTF(3, 4);
259 extern _X_EXPORT void
260 xf86Msg(MessageType type, const char *format, ...)
261 _X_ATTRIBUTE_PRINTF(2, 3);
262 extern _X_EXPORT void
263 xf86ErrorFVerb(int verb, const char *format, ...)
264 _X_ATTRIBUTE_PRINTF(2, 3);
265 extern _X_EXPORT void
266 xf86ErrorF(const char *format, ...)
267 _X_ATTRIBUTE_PRINTF(1, 2);
268 extern _X_EXPORT const char *
269 xf86TokenToString(SymTabPtr table, int token);
270 extern _X_EXPORT int
271 xf86StringToToken(SymTabPtr table, const char *string);
272 extern _X_EXPORT void
273 xf86ShowClocks(ScrnInfoPtr scrp, MessageType from);
274 extern _X_EXPORT void
275 xf86PrintChipsets(const char *drvname, const char *drvmsg, SymTabPtr chips);
276 extern _X_EXPORT int
277 xf86MatchDevice(const char *drivername, GDevPtr ** driversectlist);
278 extern _X_EXPORT const char *
279 xf86GetVisualName(int visual);
280 extern _X_EXPORT int
281 xf86GetVerbosity(void);
282 extern _X_EXPORT int
283 xf86GetDepth(void);
284 extern _X_EXPORT rgb
285 xf86GetWeight(void);
286 extern _X_EXPORT Gamma
287 xf86GetGamma(void);
288 extern _X_EXPORT Bool
289 xf86GetFlipPixels(void);
290 extern _X_EXPORT const char *
291 xf86GetServerName(void);
292 extern _X_EXPORT Bool
293 xf86ServerIsExiting(void);
294 extern _X_EXPORT Bool
295 xf86ServerIsResetting(void);
296 extern _X_EXPORT Bool
297 xf86ServerIsOnlyDetecting(void);
298 extern _X_EXPORT Bool
299 xf86GetVidModeAllowNonLocal(void);
300 extern _X_EXPORT Bool
301 xf86GetVidModeEnabled(void);
302 extern _X_EXPORT Bool
303 xf86GetModInDevAllowNonLocal(void);
304 extern _X_EXPORT Bool
305 xf86GetModInDevEnabled(void);
306 extern _X_EXPORT Bool
307 xf86GetAllowMouseOpenFail(void);
308 extern _X_EXPORT CARD32
309 xorgGetVersion(void);
310 extern _X_EXPORT CARD32
311 xf86GetModuleVersion(void *module);
312 extern _X_EXPORT void *
313 xf86LoadDrvSubModule(DriverPtr drv, const char *name);
314 extern _X_EXPORT void *
315 xf86LoadSubModule(ScrnInfoPtr pScrn, const char *name);
316 extern _X_EXPORT void *
317 xf86LoadOneModule(const char *name, void *optlist);
318 extern _X_EXPORT void
319 xf86UnloadSubModule(void *mod);
320 extern _X_EXPORT Bool
321 xf86LoaderCheckSymbol(const char *name);
322 extern _X_EXPORT void
323 xf86SetBackingStore(ScreenPtr pScreen);
324 extern _X_EXPORT void
325 xf86SetSilkenMouse(ScreenPtr pScreen);
326 extern _X_EXPORT void *
327 xf86FindXvOptions(ScrnInfoPtr pScrn, int adapt_index, const char *port_name,
328 const char **adaptor_name, void **adaptor_options);
329 extern _X_EXPORT ScrnInfoPtr
330 xf86ConfigFbEntity(ScrnInfoPtr pScrn, int scrnFlag,
331 int entityIndex, EntityProc init,
332 EntityProc enter, EntityProc leave, void *private);
333
334 extern _X_EXPORT Bool
335 xf86IsScreenPrimary(ScrnInfoPtr pScrn);
336 extern _X_EXPORT Bool
337 xf86IsUnblank(int mode);
338
339 /* xf86Init.c */
340
341 extern _X_EXPORT PixmapFormatPtr
342 xf86GetPixFormat(ScrnInfoPtr pScrn, int depth);
343 extern _X_EXPORT int
344 xf86GetBppFromDepth(ScrnInfoPtr pScrn, int depth);
345
346 /* xf86Mode.c */
347
348 extern _X_EXPORT const char *
349 xf86ModeStatusToString(ModeStatus status);
350 extern _X_EXPORT ModeStatus
351 xf86CheckModeForMonitor(DisplayModePtr mode, MonPtr monitor);
352 extern _X_EXPORT ModeStatus
353 xf86CheckModeForDriver(ScrnInfoPtr scrp, DisplayModePtr mode, int flags);
354 extern _X_EXPORT int
355 xf86ValidateModes(ScrnInfoPtr scrp, DisplayModePtr availModes,
356 const char **modeNames, ClockRangePtr clockRanges,
357 int *linePitches, int minPitch, int maxPitch,
358 int minHeight, int maxHeight, int pitchInc,
359 int virtualX, int virtualY, int apertureSize,
360 LookupModeFlags strategy);
361 extern _X_EXPORT void
362 xf86DeleteMode(DisplayModePtr * modeList, DisplayModePtr mode);
363 extern _X_EXPORT void
364 xf86PruneDriverModes(ScrnInfoPtr scrp);
365 extern _X_EXPORT void
366 xf86SetCrtcForModes(ScrnInfoPtr scrp, int adjustFlags);
367 extern _X_EXPORT void
368 xf86PrintModes(ScrnInfoPtr scrp);
369 extern _X_EXPORT void
370 xf86ShowClockRanges(ScrnInfoPtr scrp, ClockRangePtr clockRanges);
371
372 /* xf86Option.c */
373
374 extern _X_EXPORT void
375 xf86CollectOptions(ScrnInfoPtr pScrn, XF86OptionPtr extraOpts);
376
377 /* xf86RandR.c */
378 #ifdef RANDR
379 extern _X_EXPORT Bool
380 xf86RandRInit(ScreenPtr pScreen);
381 extern _X_EXPORT Rotation
382 xf86GetRotation(ScreenPtr pScreen);
383 extern _X_EXPORT Bool
384 xf86RandRSetNewVirtualAndDimensions(ScreenPtr pScreen,
385 int newvirtX, int newvirtY,
386 int newmmWidth, int newmmHeight,
387 Bool resetMode);
388 #endif
389
390 /* xf86Extensions.c */
391 extern void xf86ExtensionInit(void);
392
393 /* convert ScreenPtr to ScrnInfoPtr */
394 extern _X_EXPORT ScrnInfoPtr xf86ScreenToScrn(ScreenPtr pScreen);
395 /* convert ScrnInfoPtr to ScreenPtr */
396 extern _X_EXPORT ScreenPtr xf86ScrnToScreen(ScrnInfoPtr pScrn);
397
398 #endif /* _NO_XF86_PROTOTYPES */
399
400 #define XF86_HAS_SCRN_CONV 1 /* define for drivers to use in api compat */
401
402 #define XF86_SCRN_INTERFACE 1 /* define for drivers to use in api compat */
403
404 /* flags passed to xf86 allocate screen */
405 #define XF86_ALLOCATE_GPU_SCREEN 1
406
407 /* Update the internal total dimensions of all ScreenRecs together */
408 extern _X_EXPORT void
409 xf86UpdateDesktopDimensions(void);
410
411 #endif /* _XF86_H */
412