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