b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/*
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Copyright (c) 2000 by Conectiva S.A. (http://www.conectiva.com)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync *
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Permission is hereby granted, free of charge, to any person obtaining a
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * copy of this software and associated documentation files (the "Software"),
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * to deal in the Software without restriction, including without limitation
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * the rights to use, copy, modify, merge, publish, distribute, sublicense,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * and/or sell copies of the Software, and to permit persons to whom the
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Software is furnished to do so, subject to the following conditions:
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync *
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * The above copyright notice and this permission notice shall be included in
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * all copies or substantial portions of the Software.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync *
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * CONECTIVA LINUX BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * SOFTWARE.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync *
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Except as contained in this notice, the name of Conectiva Linux shall
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * not be used in advertising or otherwise to promote the sale, use or other
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * dealings in this Software without prior written authorization from
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Conectiva Linux.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync *
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Author: Paulo César Pereira de Andrade <pcpa@conectiva.com.br>
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync *
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * $XFree86: xc/programs/Xserver/hw/xfree86/xf86cfg/loader.h,v 1.6 2001/07/07 01:43:58 paulo Exp $
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#ifdef USE_MODULES
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#ifndef LOADER_PRIVATE
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#include "config.h"
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#include "stubs.h"
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#else
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#ifndef XFree86LOADER
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define XFree86LOADER /* not really */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define IN_LOADER
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#include "xf86.h"
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#include "xf86str.h"
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#include "xf86Opt.h"
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#include "xf86Module.h"
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#ifndef XINPUT
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define XINPUT
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#include "xf86Xinput.h"
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#include <X11/fonts/fontmod.h>
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#include "loaderProcs.h"
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#include <sym.h>
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#include <xf86_ansic.h>
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncvoid LoaderDefaultFunc(void);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#ifndef _xf86cfg_loader_h
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define _xf86cfg_loader_h
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncvoid xf86cfgLoaderInit(void);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncvoid xf86cfgLoaderInitList(int);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncvoid xf86cfgLoaderFreeList(void);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncint xf86cfgCheckModule(void);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#ifndef LOADER_PRIVATE
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* common/xf86Opt.h */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef struct {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync double freq;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int units;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync} OptFrequency;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef union {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync unsigned long num;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync char * str;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync double realnum;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync Bool xbool;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync OptFrequency freq;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync} ValueUnion;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef enum {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync OPTV_NONE = 0,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync OPTV_INTEGER,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync OPTV_STRING, /* a non-empty string */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync OPTV_ANYSTR, /* Any string, including an empty one */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync OPTV_REAL,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync OPTV_BOOLEAN,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync OPTV_FREQ
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync} OptionValueType;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef enum {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync OPTUNITS_HZ = 1,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync OPTUNITS_KHZ,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync OPTUNITS_MHZ
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync} OptFreqUnits;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef struct {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int token;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync const char* name;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync OptionValueType type;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ValueUnion value;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync Bool found;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync} OptionInfoRec, *OptionInfoPtr;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* fontmod.h */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef void (*InitFont)(void);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef struct {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync InitFont initFunc;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync char * name;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync void *module;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync} FontModule;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncextern FontModule *FontModuleList;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef struct {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int token; /* id of the token */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync const char * name; /* token name */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync} SymTabRec, *SymTabPtr;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif /* !LOADER_PRIVATE */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef enum {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync NullModule = 0,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync VideoModule,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync InputModule,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync GenericModule,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FontRendererModule
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync} ModuleType;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef struct _xf86cfgModuleOptions {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync char *name;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ModuleType type;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync OptionInfoPtr option;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int vendor;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync SymTabPtr chipsets;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync struct _xf86cfgModuleOptions *next;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync} xf86cfgModuleOptions;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncextern xf86cfgModuleOptions *module_options;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* When adding a new code to the LEGEND, also update checkerLegend
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * in loader.c
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncextern char **checkerLegend;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncextern int *checkerErrors;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define CHECKER_OPTIONS_FILE_MISSING 1
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define CHECKER_OPTION_DESCRIPTION_MISSING 2
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define CHECKER_LOAD_FAILED 3
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define CHECKER_RECOGNIZED_AS 4
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define CHECKER_NO_OPTIONS_AVAILABLE 5
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define CHECKER_NO_VENDOR_CHIPSET 6
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define CHECKER_CANNOT_VERIFY_CHIPSET 7
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define CHECKER_OPTION_UNUSED 8
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define CHECKER_NOMATCH_CHIPSET_STRINGS 9
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define CHECKER_CHIPSET_NOT_LISTED 10
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define CHECKER_CHIPSET_NOT_SUPPORTED 11
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define CHECKER_CHIPSET_NO_VENDOR 12
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define CHECKER_NO_CHIPSETS 13
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define CHECKER_FILE_MODULE_NAME_MISMATCH 14
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define CHECKER_LAST_MESSAGE 14
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncextern void CheckMsg(int, char*, ...);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#ifndef LOADER_PRIVATE
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncint LoaderInitializeOptions(void);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif /* USE_MODULES */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif /* _xf86cfg_loader_h */