Logo Search packages:      
Sourcecode: xserver-xorg-input-synaptics version File versions  Download package

xf86Module.h

/* $XFree86: xc/programs/Xserver/hw/xfree86/common/xf86Module.h,v 1.30 2001/08/13 21:46:50 dawes Exp $ */

/*
 * Copyright (c) 1997-2001 by The XFree86 Project, Inc.
 */

/*
 * This file contains the parts of the loader interface that are visible
 * to modules.  This is the only loader-related header that modules should
 * include.
 *
 * It should include a bare minimum of other headers.
 *
 * Longer term, the module/loader code should probably live directly under
 * Xserver/.
 *
 * XXX This file arguably belongs in xfree86/loader/.
 */

#ifndef _XF86MODULE_H
#define _XF86MODULE_H

#include "misc.h"
#include "xf86Version.h"
#ifndef NULL
#define NULL ((void *)0)
#endif

typedef enum {
    LD_RESOLV_IFDONE          = 0,  /* only check if no more
                                 delays pending */
    LD_RESOLV_NOW       = 1,  /* finish one delay step */
    LD_RESOLV_FORCE           = 2   /* force checking... */
} LoaderResolveOptions;

#define DEFAULT_LIST ((char *)-1)

/* This indicates a special module that doesn't have the usual entry point */
#define EXTERN_MODULE ((pointer)-1)

/* Built-in ABI classes.  These definitions must not be changed. */
#define ABI_CLASS_NONE        NULL
#define ABI_CLASS_ANSIC       "XFree86 ANSI C Emulation"
#define ABI_CLASS_VIDEODRV    "XFree86 Video Driver"
#define ABI_CLASS_XINPUT      "XFree86 XInput driver"
#define ABI_CLASS_EXTENSION   "XFree86 Server Extension"
#define ABI_CLASS_FONT        "XFree86 Font Renderer"

#define ABI_MINOR_MASK        0x0000FFFF
#define ABI_MAJOR_MASK        0xFFFF0000
#define GET_ABI_MINOR(v)      ((v) & ABI_MINOR_MASK)
#define GET_ABI_MAJOR(v)      (((v) & ABI_MAJOR_MASK) >> 16)
#define SET_ABI_VERSION(maj, min) \
            ((((maj) << 16) & ABI_MAJOR_MASK) | ((min) & ABI_MINOR_MASK))

/*
 * ABI versions.  Each version has a major and minor revision.  Modules
 * using lower minor revisions must work with servers of a higher minor
 * revision.  There is no compatibility between different major revisions.
 * Whenever the ABI_ANSIC_VERSION is changed, the others must also be
 * changed.  The minor revision mask is 0x0000FFFF and the major revision
 * mask is 0xFFFF0000.
 */
#define ABI_ANSIC_VERSION     SET_ABI_VERSION(0, 1)
#define ABI_VIDEODRV_VERSION  SET_ABI_VERSION(0, 5)
#define ABI_XINPUT_VERSION    SET_ABI_VERSION(0, 3)
#define ABI_EXTENSION_VERSION SET_ABI_VERSION(0, 1)
#define ABI_FONT_VERSION      SET_ABI_VERSION(0, 3)

#define MODINFOSTRING1  0xef23fdc5
#define MODINFOSTRING2  0x10dc023a

#ifndef MODULEVENDORSTRING
#ifndef __OS2ELF__
#define MODULEVENDORSTRING    "The XFree86 Project"
#else
#define MODULEVENDORSTRING    "The XFree86 Project - XFree86/OS2"
#endif
#endif

/* Error return codes for errmaj.  New codes must only be added at the end. */
typedef enum {
    LDR_NOERROR = 0,
    LDR_NOMEM,          /* memory allocation failed */
    LDR_NOENT,          /* Module file does not exist */
    LDR_NOSUBENT, /* pre-requsite file to be sub-loaded does not exist */
    LDR_NOSPACE,  /* internal module array full */
    LDR_NOMODOPEN,      /* module file could not be opened (check errmin) */
    LDR_UNKTYPE,  /* file is not a recognized module type */
    LDR_NOLOAD,         /* type specific loader failed */
    LDR_ONCEONLY, /* Module should only be loaded once (not an error) */
    LDR_NOPORTOPEN,     /* could not open port (check errmin) */
    LDR_NOHARDWARE,     /* could not query/initialize the hardware device */
    LDR_MISMATCH, /* the module didn't match the spec'd requirments */
    LDR_BADUSAGE, /* LoadModule is called with bad arguments */
    LDR_INVALID,  /* The module doesn't have a valid ModuleData object */
    LDR_BADOS,          /* The module doesn't support the OS */
    LDR_MODSPECIFIC     /* A module-specific error in the SetupProc */
} LoaderErrorCode;

/*
 * Some common module classes.  The moduleclass can be used to identify
 * that modules loaded are of the correct type.  This is a finer
 * classification than the ABI classes even though the default set of
 * classes have the same names.  For example, not all modules that require
 * the video driver ABI are themselves video drivers.
 */
#define MOD_CLASS_NONE        NULL
#define MOD_CLASS_VIDEODRV    "XFree86 Video Driver"
#define MOD_CLASS_XINPUT      "XFree86 XInput Driver"
#define MOD_CLASS_FONT        "XFree86 Font Renderer"
#define MOD_CLASS_EXTENSION   "XFree86 Server Extension"

/* This structure is expected to be returned by the initfunc */
typedef struct {
    const char * modname;     /* name of module, e.g. "foo" */
    const char * vendor;      /* vendor specific string */
    CARD32   _modinfo1_;      /* constant MODINFOSTRING1/2 to find */
    CARD32   _modinfo2_;      /* infoarea with a binary editor or sign tool */
    CARD32   xf86version;     /* contains XF86_VERSION_CURRENT */
    CARD8    majorversion;    /* module-specific major version */
    CARD8    minorversion;    /* module-specific minor version */
    CARD16   patchlevel;      /* module-specific patch level */
    const char * abiclass;    /* ABI class that the module uses */
    CARD32   abiversion;      /* ABI version */
    const char * moduleclass; /* module class description */
    CARD32   checksum[4];     /* contains a digital signature of the */
                        /* version info structure */
} XF86ModuleVersionInfo;

/*
 * This structure can be used to callers of LoadModule and LoadSubModule to
 * specify version and/or ABI requirements.
 */
typedef struct {
    CARD8    majorversion;    /* module-specific major version */
    CARD8    minorversion;    /* moudle-specific minor version */
    CARD16   patchlevel;      /* module-specific patch level */
    const char * abiclass;    /* ABI class that the module uses */
    CARD32   abiversion;      /* ABI version */
    const char * moduleclass; /* module class */
} XF86ModReqInfo;

/* values to indicate unspecified fields in XF86ModReqInfo. */
#define MAJOR_UNSPEC          0xFF
#define MINOR_UNSPEC          0xFF
#define PATCH_UNSPEC          0xFFFF
#define ABI_VERS_UNSPEC       0xFFFFFFFF

#define INITARGS void

typedef void (*InitExtension)(INITARGS);

typedef struct {
    InitExtension initFunc;
    const char *  name;
    Bool          *disablePtr;
    InitExtension setupFunc;  
    const char ** initDependencies;
} ExtensionModule;

extern ExtensionModule *ExtensionModuleList;

/* Prototypes for Loader functions that are exported to modules */
#ifndef IN_LOADER
/* Prototypes with opaque pointers for use by modules */
pointer LoadSubModule(pointer, const char *, const char **,
                  const char **, pointer, const XF86ModReqInfo *,
                  int *, int *);
void UnloadSubModule(pointer);
void LoadFont(pointer);
void UnloadModule (pointer);
#endif
pointer LoaderSymbol(const char *);
char **LoaderListDirs(const char **, const char **);
void LoaderFreeDirList(char **);
void LoaderErrorMsg(const char *, const char *, int, int);
void LoadExtension(ExtensionModule *, Bool);
void LoaderRefSymLists(const char **, ...);
void LoaderRefSymbols(const char *, ...);
void LoaderReqSymLists(const char **, ...);
void LoaderReqSymbols(const char *, ...);
int LoaderCheckUnresolved(int);
void LoaderGetOS(const char **name, int *major, int *minor, int *teeny);

typedef pointer (*ModuleSetupProc)(pointer, pointer, int *, int *);
typedef void (*ModuleTearDownProc)(pointer);
#define MODULESETUPPROTO(func) pointer func(pointer, pointer, int*, int*)
#define MODULETEARDOWNPROTO(func) void func(pointer)

typedef struct {
    XF86ModuleVersionInfo *   vers;
    ModuleSetupProc           setup;
    ModuleTearDownProc        teardown;
} XF86ModuleData;

#endif /* _XF86STR_H */

Generated by  Doxygen 1.6.0   Back to index