xf86Parser.h revision 7e31ba66
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