1/*
2 *
3 * Copyright (c) 1997  Metro Link Incorporated
4 *
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:
11 *
12 * The above copyright notice and this permission notice shall be included in
13 * all copies or substantial portions of the Software.
14 *
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 X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
19 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
20 * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 * SOFTWARE.
22 *
23 * Except as contained in this notice, the name of the Metro Link shall not be
24 * used in advertising or otherwise to promote the sale, use or other dealings
25 * in this Software without prior written authorization from Metro Link.
26 *
27 */
28/*
29 * Copyright (c) 1997-2003 by The XFree86 Project, Inc.
30 *
31 * Permission is hereby granted, free of charge, to any person obtaining a
32 * copy of this software and associated documentation files (the "Software"),
33 * to deal in the Software without restriction, including without limitation
34 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
35 * and/or sell copies of the Software, and to permit persons to whom the
36 * Software is furnished to do so, subject to the following conditions:
37 *
38 * The above copyright notice and this permission notice shall be included in
39 * all copies or substantial portions of the Software.
40 *
41 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
42 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
43 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
44 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
45 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
46 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
47 * OTHER DEALINGS IN THE SOFTWARE.
48 *
49 * Except as contained in this notice, the name of the copyright holder(s)
50 * and author(s) shall not be used in advertising or otherwise to promote
51 * the sale, use or other dealings in this Software without prior written
52 * authorization from the copyright holder(s) and author(s).
53 */
54
55/*
56 * This file contains the external interfaces for the XFree86 configuration
57 * file parser.
58 */
59#ifdef HAVE_XORG_CONFIG_H
60#include <xorg-config.h>
61#endif
62
63#ifndef _xf86Parser_h_
64#define _xf86Parser_h_
65
66#include <X11/Xdefs.h>
67#include "xf86Optrec.h"
68#include "list.h"
69
70#define HAVE_PARSER_DECLS
71
72typedef struct {
73    char *file_logfile;
74    char *file_modulepath;
75    char *file_fontpath;
76    char *file_comment;
77    char *file_xkbdir;
78} XF86ConfFilesRec, *XF86ConfFilesPtr;
79
80/* Values for load_type */
81#define XF86_LOAD_MODULE	0
82#define XF86_LOAD_DRIVER	1
83#define XF86_DISABLE_MODULE	2
84
85typedef struct {
86    GenericListRec list;
87    int load_type;
88    const char *load_name;
89    XF86OptionPtr load_opt;
90    char *load_comment;
91    int ignore;
92} XF86LoadRec, *XF86LoadPtr;
93
94typedef struct {
95    XF86LoadPtr mod_load_lst;
96    XF86LoadPtr mod_disable_lst;
97    char *mod_comment;
98} XF86ConfModuleRec, *XF86ConfModulePtr;
99
100#define CONF_IMPLICIT_KEYBOARD	"Implicit Core Keyboard"
101
102#define CONF_IMPLICIT_POINTER	"Implicit Core Pointer"
103
104#define XF86CONF_PHSYNC    0x0001
105#define XF86CONF_NHSYNC    0x0002
106#define XF86CONF_PVSYNC    0x0004
107#define XF86CONF_NVSYNC    0x0008
108#define XF86CONF_INTERLACE 0x0010
109#define XF86CONF_DBLSCAN   0x0020
110#define XF86CONF_CSYNC     0x0040
111#define XF86CONF_PCSYNC    0x0080
112#define XF86CONF_NCSYNC    0x0100
113#define XF86CONF_HSKEW     0x0200       /* hskew provided */
114#define XF86CONF_BCAST     0x0400
115#define XF86CONF_VSCAN     0x1000
116
117typedef struct {
118    GenericListRec list;
119    const char *ml_identifier;
120    int ml_clock;
121    int ml_hdisplay;
122    int ml_hsyncstart;
123    int ml_hsyncend;
124    int ml_htotal;
125    int ml_vdisplay;
126    int ml_vsyncstart;
127    int ml_vsyncend;
128    int ml_vtotal;
129    int ml_vscan;
130    int ml_flags;
131    int ml_hskew;
132    char *ml_comment;
133} XF86ConfModeLineRec, *XF86ConfModeLinePtr;
134
135typedef struct {
136    GenericListRec list;
137    const char *vp_identifier;
138    XF86OptionPtr vp_option_lst;
139    char *vp_comment;
140} XF86ConfVideoPortRec, *XF86ConfVideoPortPtr;
141
142typedef struct {
143    GenericListRec list;
144    const char *va_identifier;
145    const char *va_vendor;
146    const char *va_board;
147    const char *va_busid;
148    const char *va_driver;
149    XF86OptionPtr va_option_lst;
150    XF86ConfVideoPortPtr va_port_lst;
151    const char *va_fwdref;
152    char *va_comment;
153} XF86ConfVideoAdaptorRec, *XF86ConfVideoAdaptorPtr;
154
155#define CONF_MAX_HSYNC 8
156#define CONF_MAX_VREFRESH 8
157
158typedef struct {
159    float hi, lo;
160} parser_range;
161
162typedef struct {
163    int red, green, blue;
164} parser_rgb;
165
166typedef struct {
167    GenericListRec list;
168    const char *modes_identifier;
169    XF86ConfModeLinePtr mon_modeline_lst;
170    char *modes_comment;
171} XF86ConfModesRec, *XF86ConfModesPtr;
172
173typedef struct {
174    GenericListRec list;
175    const char *ml_modes_str;
176    XF86ConfModesPtr ml_modes;
177} XF86ConfModesLinkRec, *XF86ConfModesLinkPtr;
178
179typedef struct {
180    GenericListRec list;
181    const char *mon_identifier;
182    const char *mon_vendor;
183    char *mon_modelname;
184    int mon_width;              /* in mm */
185    int mon_height;             /* in mm */
186    XF86ConfModeLinePtr mon_modeline_lst;
187    int mon_n_hsync;
188    parser_range mon_hsync[CONF_MAX_HSYNC];
189    int mon_n_vrefresh;
190    parser_range mon_vrefresh[CONF_MAX_VREFRESH];
191    float mon_gamma_red;
192    float mon_gamma_green;
193    float mon_gamma_blue;
194    XF86OptionPtr mon_option_lst;
195    XF86ConfModesLinkPtr mon_modes_sect_lst;
196    char *mon_comment;
197} XF86ConfMonitorRec, *XF86ConfMonitorPtr;
198
199#define CONF_MAXDACSPEEDS 4
200#define CONF_MAXCLOCKS    128
201
202typedef struct {
203    GenericListRec list;
204    const char *dev_identifier;
205    const char *dev_vendor;
206    const char *dev_board;
207    const char *dev_chipset;
208    const char *dev_busid;
209    const char *dev_card;
210    const char *dev_driver;
211    const char *dev_ramdac;
212    int dev_dacSpeeds[CONF_MAXDACSPEEDS];
213    int dev_videoram;
214    unsigned long dev_mem_base;
215    unsigned long dev_io_base;
216    const char *dev_clockchip;
217    int dev_clocks;
218    int dev_clock[CONF_MAXCLOCKS];
219    int dev_chipid;
220    int dev_chiprev;
221    int dev_irq;
222    int dev_screen;
223    XF86OptionPtr dev_option_lst;
224    char *dev_comment;
225    char *match_seat;
226} XF86ConfDeviceRec, *XF86ConfDevicePtr;
227
228typedef struct {
229    GenericListRec list;
230    const char *mode_name;
231} XF86ModeRec, *XF86ModePtr;
232
233typedef struct {
234    GenericListRec list;
235    int disp_frameX0;
236    int disp_frameY0;
237    int disp_virtualX;
238    int disp_virtualY;
239    int disp_depth;
240    int disp_bpp;
241    const char *disp_visual;
242    parser_rgb disp_weight;
243    parser_rgb disp_black;
244    parser_rgb disp_white;
245    XF86ModePtr disp_mode_lst;
246    XF86OptionPtr disp_option_lst;
247    char *disp_comment;
248} XF86ConfDisplayRec, *XF86ConfDisplayPtr;
249
250typedef struct {
251    XF86OptionPtr flg_option_lst;
252    char *flg_comment;
253} XF86ConfFlagsRec, *XF86ConfFlagsPtr;
254
255typedef struct {
256    GenericListRec list;
257    const char *al_adaptor_str;
258    XF86ConfVideoAdaptorPtr al_adaptor;
259} XF86ConfAdaptorLinkRec, *XF86ConfAdaptorLinkPtr;
260
261#define CONF_MAXGPUDEVICES 4
262typedef struct {
263    GenericListRec list;
264    const char *scrn_identifier;
265    const char *scrn_obso_driver;
266    int scrn_defaultdepth;
267    int scrn_defaultbpp;
268    int scrn_defaultfbbpp;
269    const char *scrn_monitor_str;
270    XF86ConfMonitorPtr scrn_monitor;
271    const char *scrn_device_str;
272    XF86ConfDevicePtr scrn_device;
273    XF86ConfAdaptorLinkPtr scrn_adaptor_lst;
274    XF86ConfDisplayPtr scrn_display_lst;
275    XF86OptionPtr scrn_option_lst;
276    char *scrn_comment;
277    int scrn_virtualX, scrn_virtualY;
278    char *match_seat;
279
280    int num_gpu_devices;
281    const char *scrn_gpu_device_str[CONF_MAXGPUDEVICES];
282    XF86ConfDevicePtr scrn_gpu_devices[CONF_MAXGPUDEVICES];
283} XF86ConfScreenRec, *XF86ConfScreenPtr;
284
285typedef struct {
286    GenericListRec list;
287    char *inp_identifier;
288    char *inp_driver;
289    XF86OptionPtr inp_option_lst;
290    char *inp_comment;
291} XF86ConfInputRec, *XF86ConfInputPtr;
292
293typedef struct {
294    GenericListRec list;
295    XF86ConfInputPtr iref_inputdev;
296    char *iref_inputdev_str;
297    XF86OptionPtr iref_option_lst;
298} XF86ConfInputrefRec, *XF86ConfInputrefPtr;
299
300typedef struct {
301    Bool set;
302    Bool val;
303} xf86TriState;
304
305typedef struct {
306    struct xorg_list entry;
307    char **values;
308    Bool is_negated;
309} xf86MatchGroup;
310
311typedef struct {
312    GenericListRec list;
313    char *identifier;
314    char *driver;
315    struct xorg_list match_product;
316    struct xorg_list match_vendor;
317    struct xorg_list match_device;
318    struct xorg_list match_os;
319    struct xorg_list match_pnpid;
320    struct xorg_list match_usbid;
321    struct xorg_list match_driver;
322    struct xorg_list match_tag;
323    struct xorg_list match_layout;
324    xf86TriState is_keyboard;
325    xf86TriState is_pointer;
326    xf86TriState is_joystick;
327    xf86TriState is_tablet;
328    xf86TriState is_tablet_pad;
329    xf86TriState is_touchpad;
330    xf86TriState is_touchscreen;
331    XF86OptionPtr option_lst;
332    char *comment;
333} XF86ConfInputClassRec, *XF86ConfInputClassPtr;
334
335typedef struct {
336    GenericListRec list;
337    char *identifier;
338    char *driver;
339    char *modulepath;
340    struct xorg_list match_driver;
341    XF86OptionPtr option_lst;
342    char *comment;
343} XF86ConfOutputClassRec, *XF86ConfOutputClassPtr;
344
345/* Values for adj_where */
346#define CONF_ADJ_OBSOLETE	-1
347#define CONF_ADJ_ABSOLUTE	0
348#define CONF_ADJ_RIGHTOF	1
349#define CONF_ADJ_LEFTOF		2
350#define CONF_ADJ_ABOVE		3
351#define CONF_ADJ_BELOW		4
352#define CONF_ADJ_RELATIVE	5
353
354typedef struct {
355    GenericListRec list;
356    int adj_scrnum;
357    XF86ConfScreenPtr adj_screen;
358    const char *adj_screen_str;
359    XF86ConfScreenPtr adj_top;
360    const char *adj_top_str;
361    XF86ConfScreenPtr adj_bottom;
362    const char *adj_bottom_str;
363    XF86ConfScreenPtr adj_left;
364    const char *adj_left_str;
365    XF86ConfScreenPtr adj_right;
366    const char *adj_right_str;
367    int adj_where;
368    int adj_x;
369    int adj_y;
370    const char *adj_refscreen;
371} XF86ConfAdjacencyRec, *XF86ConfAdjacencyPtr;
372
373typedef struct {
374    GenericListRec list;
375    const char *inactive_device_str;
376    XF86ConfDevicePtr inactive_device;
377} XF86ConfInactiveRec, *XF86ConfInactivePtr;
378
379typedef struct {
380    GenericListRec list;
381    const char *lay_identifier;
382    XF86ConfAdjacencyPtr lay_adjacency_lst;
383    XF86ConfInactivePtr lay_inactive_lst;
384    XF86ConfInputrefPtr lay_input_lst;
385    XF86OptionPtr lay_option_lst;
386    char *match_seat;
387    char *lay_comment;
388} XF86ConfLayoutRec, *XF86ConfLayoutPtr;
389
390typedef struct {
391    GenericListRec list;
392    const char *vs_name;
393    const char *vs_identifier;
394    XF86OptionPtr vs_option_lst;
395    char *vs_comment;
396} XF86ConfVendSubRec, *XF86ConfVendSubPtr;
397
398typedef struct {
399    GenericListRec list;
400    const char *vnd_identifier;
401    XF86OptionPtr vnd_option_lst;
402    XF86ConfVendSubPtr vnd_sub_lst;
403    char *vnd_comment;
404} XF86ConfVendorRec, *XF86ConfVendorPtr;
405
406typedef struct {
407    const char *dri_group_name;
408    int dri_group;
409    int dri_mode;
410    char *dri_comment;
411} XF86ConfDRIRec, *XF86ConfDRIPtr;
412
413typedef struct {
414    XF86OptionPtr ext_option_lst;
415    char *extensions_comment;
416} XF86ConfExtensionsRec, *XF86ConfExtensionsPtr;
417
418typedef struct {
419    XF86ConfFilesPtr conf_files;
420    XF86ConfModulePtr conf_modules;
421    XF86ConfFlagsPtr conf_flags;
422    XF86ConfVideoAdaptorPtr conf_videoadaptor_lst;
423    XF86ConfModesPtr conf_modes_lst;
424    XF86ConfMonitorPtr conf_monitor_lst;
425    XF86ConfDevicePtr conf_device_lst;
426    XF86ConfScreenPtr conf_screen_lst;
427    XF86ConfInputPtr conf_input_lst;
428    XF86ConfInputClassPtr conf_inputclass_lst;
429    XF86ConfOutputClassPtr conf_outputclass_lst;
430    XF86ConfLayoutPtr conf_layout_lst;
431    XF86ConfVendorPtr conf_vendor_lst;
432    XF86ConfDRIPtr conf_dri;
433    XF86ConfExtensionsPtr conf_extensions;
434    char *conf_comment;
435} XF86ConfigRec, *XF86ConfigPtr;
436
437typedef struct {
438    int token;                  /* id of the token */
439    const char *name;           /* pointer to the LOWERCASED name */
440} xf86ConfigSymTabRec, *xf86ConfigSymTabPtr;
441
442/*
443 * prototypes for public functions
444 */
445extern void xf86initConfigFiles(void);
446extern char *xf86openConfigFile(const char *path, const char *cmdline,
447                                const char *projroot);
448extern char *xf86openConfigDirFiles(const char *path, const char *cmdline,
449                                    const char *projroot);
450extern void xf86setBuiltinConfig(const char *config[]);
451extern XF86ConfigPtr xf86readConfigFile(void);
452extern void xf86closeConfigFile(void);
453extern XF86ConfigPtr xf86allocateConfig(void);
454extern void xf86freeConfig(XF86ConfigPtr p);
455extern int xf86writeConfigFile(const char *, XF86ConfigPtr);
456extern _X_EXPORT XF86ConfDevicePtr xf86findDevice(const char *ident,
457                                                  XF86ConfDevicePtr p);
458extern _X_EXPORT XF86ConfDevicePtr xf86findDeviceByDriver(const char *driver,
459                                                          XF86ConfDevicePtr p);
460extern _X_EXPORT XF86ConfLayoutPtr xf86findLayout(const char *name,
461                                                  XF86ConfLayoutPtr list);
462extern _X_EXPORT XF86ConfMonitorPtr xf86findMonitor(const char *ident,
463                                                    XF86ConfMonitorPtr p);
464extern _X_EXPORT XF86ConfModesPtr xf86findModes(const char *ident,
465                                                XF86ConfModesPtr p);
466extern _X_EXPORT XF86ConfModeLinePtr xf86findModeLine(const char *ident,
467                                                      XF86ConfModeLinePtr p);
468extern _X_EXPORT XF86ConfScreenPtr xf86findScreen(const char *ident,
469                                                  XF86ConfScreenPtr p);
470extern _X_EXPORT XF86ConfInputPtr xf86findInput(const char *ident,
471                                                XF86ConfInputPtr p);
472extern _X_EXPORT XF86ConfInputPtr xf86findInputByDriver(const char *driver,
473                                                        XF86ConfInputPtr p);
474extern _X_EXPORT XF86ConfVideoAdaptorPtr xf86findVideoAdaptor(const char *ident,
475                                                              XF86ConfVideoAdaptorPtr
476                                                              p);
477extern int xf86layoutAddInputDevices(XF86ConfigPtr config,
478                                     XF86ConfLayoutPtr layout);
479
480extern _X_EXPORT GenericListPtr xf86addListItem(GenericListPtr head,
481                                                GenericListPtr c_new);
482extern _X_EXPORT int xf86itemNotSublist(GenericListPtr list_1,
483                                        GenericListPtr list_2);
484
485extern _X_EXPORT int xf86pathIsAbsolute(const char *path);
486extern _X_EXPORT int xf86pathIsSafe(const char *path);
487extern _X_EXPORT char *xf86addComment(char *cur, const char *add);
488extern _X_EXPORT Bool xf86getBoolValue(Bool *val, const char *str);
489
490#endif                          /* _xf86Parser_h_ */
491