Merge branch 'master' of git+ssh://git.freedesktop.org/git/xorg/xserver into pci-rework
Conflicts: hw/xfree86/Makefile.am hw/xfree86/common/xf86AutoConfig.c
This commit is contained in:
commit
69533fc04f
|
@ -66,7 +66,7 @@ BUILTIN_SRCS += $(XINERAMA_SRCS)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Security extension: multi-level security to protect clients from each other
|
# Security extension: multi-level security to protect clients from each other
|
||||||
XCSECURITY_SRCS = security.c
|
XCSECURITY_SRCS = security.c securitysrv.h
|
||||||
if XCSECURITY
|
if XCSECURITY
|
||||||
BUILTIN_SRCS += $(XCSECURITY_SRCS)
|
BUILTIN_SRCS += $(XCSECURITY_SRCS)
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@ dnl Process this file with autoconf to create configure.
|
||||||
AC_PREREQ(2.57)
|
AC_PREREQ(2.57)
|
||||||
dnl This is the not the Xorg version number, it's the server version number.
|
dnl This is the not the Xorg version number, it's the server version number.
|
||||||
dnl Yes, that's weird.
|
dnl Yes, that's weird.
|
||||||
AC_INIT([xorg-server], 1.1.99.2, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
|
AC_INIT([xorg-server], 1.1.99.3, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
|
||||||
AC_CONFIG_SRCDIR([Makefile.am])
|
AC_CONFIG_SRCDIR([Makefile.am])
|
||||||
AM_INIT_AUTOMAKE([dist-bzip2 foreign])
|
AM_INIT_AUTOMAKE([dist-bzip2 foreign])
|
||||||
AM_MAINTAINER_MODE
|
AM_MAINTAINER_MODE
|
||||||
|
@ -1662,7 +1662,6 @@ hw/xfree86/dri/Makefile
|
||||||
hw/xfree86/dummylib/Makefile
|
hw/xfree86/dummylib/Makefile
|
||||||
hw/xfree86/exa/Makefile
|
hw/xfree86/exa/Makefile
|
||||||
hw/xfree86/fbdevhw/Makefile
|
hw/xfree86/fbdevhw/Makefile
|
||||||
hw/xfree86/getconfig/Makefile
|
|
||||||
hw/xfree86/i2c/Makefile
|
hw/xfree86/i2c/Makefile
|
||||||
hw/xfree86/int10/Makefile
|
hw/xfree86/int10/Makefile
|
||||||
hw/xfree86/loader/Makefile
|
hw/xfree86/loader/Makefile
|
||||||
|
|
|
@ -54,7 +54,6 @@ EXTRA_DIST = \
|
||||||
darwinKeyboard.c \
|
darwinKeyboard.c \
|
||||||
darwinKeyboard.h \
|
darwinKeyboard.h \
|
||||||
darwinXinput.c \
|
darwinXinput.c \
|
||||||
iokit/.cvsignore \
|
|
||||||
iokit/xfIOKit.c \
|
iokit/xfIOKit.c \
|
||||||
iokit/xfIOKitCursor.c \
|
iokit/xfIOKitCursor.c \
|
||||||
iokit/xfIOKit.h \
|
iokit/xfIOKit.h \
|
||||||
|
@ -66,11 +65,8 @@ EXTRA_DIST = \
|
||||||
quartz/cr/crFrame.m \
|
quartz/cr/crFrame.m \
|
||||||
quartz/cr/cr.h \
|
quartz/cr/cr.h \
|
||||||
quartz/cr/crScreen.m \
|
quartz/cr/crScreen.m \
|
||||||
quartz/cr/.cvsignore \
|
|
||||||
quartz/cr/XView.h \
|
quartz/cr/XView.h \
|
||||||
quartz/cr/XView.m \
|
quartz/cr/XView.m \
|
||||||
quartz/.cvsignore \
|
|
||||||
quartz/fullscreen/.cvsignore \
|
|
||||||
quartz/fullscreen/fullscreen.c \
|
quartz/fullscreen/fullscreen.c \
|
||||||
quartz/fullscreen/quartzCursor.c \
|
quartz/fullscreen/quartzCursor.c \
|
||||||
quartz/fullscreen/quartzCursor.h \
|
quartz/fullscreen/quartzCursor.h \
|
||||||
|
@ -98,7 +94,6 @@ EXTRA_DIST = \
|
||||||
quartz/XDarwinStartup.c \
|
quartz/XDarwinStartup.c \
|
||||||
quartz/XDarwinStartup.man \
|
quartz/XDarwinStartup.man \
|
||||||
quartz/xpr/appledri.c \
|
quartz/xpr/appledri.c \
|
||||||
quartz/xpr/.cvsignore \
|
|
||||||
quartz/xpr/dri.c \
|
quartz/xpr/dri.c \
|
||||||
quartz/xpr/dri.h \
|
quartz/xpr/dri.h \
|
||||||
quartz/xpr/dristruct.h \
|
quartz/xpr/dristruct.h \
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
/*
|
||||||
** The contents of this file are subject to the GLX Public License Version 1.0
|
** The contents of this file are subject to the GLX Public License Version 1.0
|
||||||
** (the "License"). You may not use this file except in compliance with the
|
** (the "License"). You may not use this file except in compliance with the
|
||||||
** License. You may obtain a copy of the License at Silicon Graphics, Inc.,
|
** License. You may obtain a copy of the License at Silicon Graphics, Inc.,
|
||||||
|
|
|
@ -47,8 +47,6 @@
|
||||||
|
|
||||||
#include "glxserver.h"
|
#include "glxserver.h"
|
||||||
|
|
||||||
#include <xf86_ansic.h>
|
|
||||||
|
|
||||||
#include <windowstr.h>
|
#include <windowstr.h>
|
||||||
|
|
||||||
#include "glxfbconfig.h"
|
#include "glxfbconfig.h"
|
||||||
|
|
|
@ -7,12 +7,12 @@ DOC_SUBDIR = doc
|
||||||
SUBDIRS = common ddc dummylib i2c x86emu int10 fbdevhw os-support parser rac \
|
SUBDIRS = common ddc dummylib i2c x86emu int10 fbdevhw os-support parser rac \
|
||||||
ramdac shadowfb vbe vgahw xaa xf1bpp xf4bpp xf8_16bpp \
|
ramdac shadowfb vbe vgahw xaa xf1bpp xf4bpp xf8_16bpp \
|
||||||
xf8_32bpp loader dixmods exa \
|
xf8_32bpp loader dixmods exa \
|
||||||
$(DRI_SUBDIR) utils $(DOC_SUBDIR) getconfig
|
$(DRI_SUBDIR) utils $(DOC_SUBDIR)
|
||||||
|
|
||||||
DIST_SUBDIRS = common ddc dummylib i2c x86emu int10 fbdevhw os-support \
|
DIST_SUBDIRS = common ddc dummylib i2c x86emu int10 fbdevhw os-support \
|
||||||
parser rac ramdac shadowfb vbe vgahw xaa xf1bpp xf4bpp \
|
parser rac ramdac shadowfb vbe vgahw xaa xf1bpp xf4bpp \
|
||||||
xf8_16bpp xf8_32bpp loader dixmods dri exa \
|
xf8_16bpp xf8_32bpp loader dixmods dri exa \
|
||||||
utils doc getconfig
|
utils doc
|
||||||
|
|
||||||
bin_PROGRAMS = Xorg
|
bin_PROGRAMS = Xorg
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ BUILT_SOURCES = xf86DefModeSet.c
|
||||||
|
|
||||||
AM_LDFLAGS = -r
|
AM_LDFLAGS = -r
|
||||||
libcommon_la_SOURCES = xf86Configure.c xf86Bus.c xf86Config.c \
|
libcommon_la_SOURCES = xf86Configure.c xf86Bus.c xf86Config.c \
|
||||||
xf86Cursor.c xf86DGA.c xf86DPMS.c \
|
xf86Cursor.c xf86cvt.c xf86DGA.c xf86DPMS.c \
|
||||||
xf86DoProbe.c xf86DoScanPci.c xf86Events.c \
|
xf86DoProbe.c xf86DoScanPci.c xf86Events.c \
|
||||||
xf86Globals.c xf86Io.c xf86AutoConfig.c \
|
xf86Globals.c xf86Io.c xf86AutoConfig.c \
|
||||||
xf86MiscExt.c xf86Option.c \
|
xf86MiscExt.c xf86Option.c \
|
||||||
|
|
|
@ -1514,88 +1514,7 @@ inl(unsigned short port)
|
||||||
|
|
||||||
# endif /* ix86 */
|
# endif /* ix86 */
|
||||||
|
|
||||||
# elif defined(__powerpc__) /* && !__GNUC__ */
|
# else /* !GNUC */
|
||||||
/*
|
|
||||||
* NON-GCC PowerPC - Presumed to be PowerMAX OS for now
|
|
||||||
*/
|
|
||||||
# ifndef PowerMAX_OS
|
|
||||||
# error - Non-gcc PowerPC and !PowerMAXOS ???
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# define PPCIO_DEBUG 0
|
|
||||||
# define PPCIO_INLINE 1
|
|
||||||
# define USE_ABS_MACRO 1
|
|
||||||
/*
|
|
||||||
* Use compiler intrinsics to access certain PPC machine instructions
|
|
||||||
*/
|
|
||||||
# define eieio() __inst_eieio()
|
|
||||||
# define stw_brx(val,base,ndx) __inst_sthbrx(val,base,ndx)
|
|
||||||
# define stl_brx(val,base,ndx) __inst_stwbrx(val,base,ndx)
|
|
||||||
# define ldw_brx(base,ndx) __inst_lhbrx(base,ndx)
|
|
||||||
# define ldl_brx(base,ndx) __inst_lwbrx(base,ndx)
|
|
||||||
|
|
||||||
# define ldq_u(p) (*((unsigned long long *)(p)))
|
|
||||||
# define ldl_u(p) (*((unsigned long *)(p)))
|
|
||||||
# define ldw_u(p) (*((unsigned short *)(p)))
|
|
||||||
# define stq_u(v,p) (*(unsigned long long *)(p)) = (v)
|
|
||||||
# define stl_u(v,p) (*(unsigned long *)(p)) = (v)
|
|
||||||
# define stw_u(v,p) (*(unsigned short *)(p)) = (v)
|
|
||||||
# define mem_barrier() eieio()
|
|
||||||
# define write_mem_barrier() eieio()
|
|
||||||
|
|
||||||
extern volatile unsigned char *ioBase;
|
|
||||||
|
|
||||||
# if !defined(abs) && defined(USE_ABS_MACRO)
|
|
||||||
# define abs(x) ((x) >= 0 ? (x) : -(x))
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# undef inb
|
|
||||||
# undef inw
|
|
||||||
# undef inl
|
|
||||||
# undef outb
|
|
||||||
# undef outw
|
|
||||||
# undef outl
|
|
||||||
|
|
||||||
# if PPCIO_DEBUG
|
|
||||||
|
|
||||||
extern void debug_outb(unsigned int a, unsigned char b, int line, char *file);
|
|
||||||
extern void debug_outw(unsigned int a, unsigned short w, int line, char *file);
|
|
||||||
extern void debug_outl(unsigned int a, unsigned int l, int line, char *file);
|
|
||||||
extern unsigned char debug_inb(unsigned int a, int line, char *file);
|
|
||||||
extern unsigned short debug_inw(unsigned int a, int line, char *file);
|
|
||||||
extern unsigned int debug_inl(unsigned int a, int line, char *file);
|
|
||||||
|
|
||||||
# define outb(a,b) debug_outb(a,b, __LINE__, __FILE__)
|
|
||||||
# define outw(a,w) debug_outw(a,w, __LINE__, __FILE__)
|
|
||||||
# define outl(a,l) debug_outl(a,l, __LINE__, __FILE__)
|
|
||||||
# define inb(a) debug_inb(a, __LINE__, __FILE__)
|
|
||||||
# define inw(a) debug_inw(a, __LINE__, __FILE__)
|
|
||||||
# define inl(a) debug_inl(a, __LINE__, __FILE__)
|
|
||||||
|
|
||||||
# else /* !PPCIO_DEBUG */
|
|
||||||
|
|
||||||
extern unsigned char inb(unsigned int a);
|
|
||||||
extern unsigned short inw(unsigned int a);
|
|
||||||
extern unsigned int inl(unsigned int a);
|
|
||||||
|
|
||||||
# if PPCIO_INLINE
|
|
||||||
|
|
||||||
# define outb(a,b) \
|
|
||||||
(*((volatile unsigned char *)(ioBase + (a))) = (b), eieio())
|
|
||||||
# define outw(a,w) (stw_brx((w),ioBase,(a)), eieio())
|
|
||||||
# define outl(a,l) (stl_brx((l),ioBase,(a)), eieio())
|
|
||||||
|
|
||||||
# else /* !PPCIO_INLINE */
|
|
||||||
|
|
||||||
extern void outb(unsigned int a, unsigned char b);
|
|
||||||
extern void outw(unsigned int a, unsigned short w);
|
|
||||||
extern void outl(unsigned int a, unsigned int l);
|
|
||||||
|
|
||||||
# endif /* PPCIO_INLINE */
|
|
||||||
|
|
||||||
# endif /* !PPCIO_DEBUG */
|
|
||||||
|
|
||||||
# else /* !GNUC && !PPC */
|
|
||||||
# if !defined(QNX4)
|
# if !defined(QNX4)
|
||||||
# if defined(__STDC__) && (__STDC__ == 1)
|
# if defined(__STDC__) && (__STDC__ == 1)
|
||||||
# ifndef asm
|
# ifndef asm
|
||||||
|
|
|
@ -187,6 +187,10 @@ void *xf86GetPointerScreenFuncs(void);
|
||||||
void xf86InitOrigins(void);
|
void xf86InitOrigins(void);
|
||||||
void xf86ReconfigureLayout(void);
|
void xf86ReconfigureLayout(void);
|
||||||
|
|
||||||
|
/* xf86cvt.c */
|
||||||
|
DisplayModePtr xf86CVTMode(int HDisplay, int VDisplay, float VRefresh,
|
||||||
|
Bool Reduced, Bool Interlaced);
|
||||||
|
|
||||||
/* xf86DPMS.c */
|
/* xf86DPMS.c */
|
||||||
|
|
||||||
Bool xf86DPMSInit(ScreenPtr pScreen, DPMSSetProcPtr set, int flags);
|
Bool xf86DPMSInit(ScreenPtr pScreen, DPMSSetProcPtr set, int flags);
|
||||||
|
|
|
@ -1,6 +1,3 @@
|
||||||
/* $DHD: xc/programs/Xserver/hw/xfree86/common/xf86AutoConfig.c,v 1.15 2003/09/24 19:39:36 dawes Exp $ */
|
|
||||||
/* $XdotOrg: $ */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright 2003 by David H. Dawes.
|
* Copyright 2003 by David H. Dawes.
|
||||||
* Copyright 2003 by X-Oz Technologies.
|
* Copyright 2003 by X-Oz Technologies.
|
||||||
|
@ -32,7 +29,6 @@
|
||||||
* Author: David Dawes <dawes@XFree86.Org>.
|
* Author: David Dawes <dawes@XFree86.Org>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_XORG_CONFIG_H
|
#ifdef HAVE_XORG_CONFIG_H
|
||||||
#include <xorg-config.h>
|
#include <xorg-config.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -44,9 +40,7 @@
|
||||||
#include "xf86Priv.h"
|
#include "xf86Priv.h"
|
||||||
#include "xf86_OSlib.h"
|
#include "xf86_OSlib.h"
|
||||||
|
|
||||||
/*
|
/* Sections for the default built-in configuration. */
|
||||||
* Sections for the default built-in configuration.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define BUILTIN_MODULE_SECTION \
|
#define BUILTIN_MODULE_SECTION \
|
||||||
"Section \"Module\"\n" \
|
"Section \"Module\"\n" \
|
||||||
|
@ -100,17 +94,6 @@
|
||||||
#define BUILTIN_LAYOUT_SECTION_POST \
|
#define BUILTIN_LAYOUT_SECTION_POST \
|
||||||
"EndSection\n\n"
|
"EndSection\n\n"
|
||||||
|
|
||||||
|
|
||||||
#ifndef GET_CONFIG_CMD
|
|
||||||
#define GET_CONFIG_CMD "getconfig"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef GETCONFIG_DIR
|
|
||||||
#define GETCONFIG_DIR PROJECTROOT "/lib/X11/getconfig"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define GETCONFIG_WHITESPACE " \t\n"
|
|
||||||
|
|
||||||
static const char **builtinConfig = NULL;
|
static const char **builtinConfig = NULL;
|
||||||
static int builtinLines = 0;
|
static int builtinLines = 0;
|
||||||
static const char *deviceList[] = {
|
static const char *deviceList[] = {
|
||||||
|
@ -170,6 +153,61 @@ AppendToConfig(const char *s)
|
||||||
AppendToList(s, &builtinConfig, &builtinLines);
|
AppendToList(s, &builtinConfig, &builtinLines);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
videoPtrToDriverName(pciVideoPtr info)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* things not handled yet:
|
||||||
|
* amd/cyrix/nsc
|
||||||
|
* xgi
|
||||||
|
*/
|
||||||
|
|
||||||
|
switch (info->vendor)
|
||||||
|
{
|
||||||
|
case 0x1142: return "apm";
|
||||||
|
case 0xedd8: return "ark";
|
||||||
|
case 0x1a03: return "ast";
|
||||||
|
case 0x1002: return "ati";
|
||||||
|
case 0x102c: return "chips";
|
||||||
|
case 0x1013: return "cirrus";
|
||||||
|
case 0x8086:
|
||||||
|
if ((info->chipType == 0x00d1) || (info->chipType == 0x7800))
|
||||||
|
return "i740";
|
||||||
|
else return "i810";
|
||||||
|
case 0x102b: return "mga";
|
||||||
|
case 0x10c8: return "neomagic";
|
||||||
|
case 0x105d: return "i128";
|
||||||
|
case 0x10de: case 0x12d2: return "nv";
|
||||||
|
case 0x1163: return "rendition";
|
||||||
|
case 0x5333:
|
||||||
|
switch (info->chipType)
|
||||||
|
{
|
||||||
|
case 0x88d0: case 0x88d1: case 0x88f0: case 0x8811:
|
||||||
|
case 0x8812: case 0x8814: case 0x8901:
|
||||||
|
return "s3";
|
||||||
|
case 0x5631: case 0x883d: case 0x8a01: case 0x8a10:
|
||||||
|
case 0x8c01: case 0x8c03: case 0x8904: case 0x8a13:
|
||||||
|
return "s3virge";
|
||||||
|
default:
|
||||||
|
return "savage";
|
||||||
|
}
|
||||||
|
case 0x1039: return "sis";
|
||||||
|
case 0x126f: return "siliconmotion";
|
||||||
|
case 0x121a:
|
||||||
|
if (info->chipType < 0x0003)
|
||||||
|
return "voodoo";
|
||||||
|
else
|
||||||
|
return "tdfx";
|
||||||
|
case 0x3d3d: return "glint";
|
||||||
|
case 0x1023: return "trident";
|
||||||
|
case 0x100c: return "tseng";
|
||||||
|
case 0x1106: return "via";
|
||||||
|
case 0x15ad: return "vmware";
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
Bool
|
Bool
|
||||||
xf86AutoConfig(void)
|
xf86AutoConfig(void)
|
||||||
{
|
{
|
||||||
|
@ -178,7 +216,6 @@ xf86AutoConfig(void)
|
||||||
struct pci_device ** pciptr;
|
struct pci_device ** pciptr;
|
||||||
struct pci_device * info = NULL;
|
struct pci_device * info = NULL;
|
||||||
char *driver = NULL;
|
char *driver = NULL;
|
||||||
FILE *gp = NULL;
|
|
||||||
ConfigStatus ret;
|
ConfigStatus ret;
|
||||||
|
|
||||||
/* Find the primary device, and get some information about it. */
|
/* Find the primary device, and get some information about it. */
|
||||||
|
@ -195,108 +232,8 @@ xf86AutoConfig(void)
|
||||||
ErrorF("xf86PciVideoInfo is not set\n");
|
ErrorF("xf86PciVideoInfo is not set\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (info) {
|
if (info)
|
||||||
char *tmp;
|
driver = videoPtrToDriverName(info);
|
||||||
char *path = NULL, *a, *b;
|
|
||||||
char *searchPath = NULL;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Look for the getconfig program first in the xf86ModulePath
|
|
||||||
* directories, then in GETCONFIG_DIR, then in BINDIR. If it
|
|
||||||
* isn't found in any of those locations, just use the normal
|
|
||||||
* search path.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (xf86ModulePath) {
|
|
||||||
a = xnfstrdup(xf86ModulePath);
|
|
||||||
b = strtok(a, ",");
|
|
||||||
while (b) {
|
|
||||||
path = xnfrealloc(path,
|
|
||||||
strlen(b) + 1 + strlen(GET_CONFIG_CMD) + 1);
|
|
||||||
sprintf(path, "%s/%s", b, GET_CONFIG_CMD);
|
|
||||||
if (access(path, X_OK) == 0)
|
|
||||||
break;
|
|
||||||
b = strtok(NULL, ",");
|
|
||||||
}
|
|
||||||
if (!b) {
|
|
||||||
xfree(path);
|
|
||||||
path = NULL;
|
|
||||||
}
|
|
||||||
xfree(a);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!path) {
|
|
||||||
path = xnfstrdup(GETCONFIG_DIR "/" GET_CONFIG_CMD);
|
|
||||||
if (access(path, X_OK) != 0) {
|
|
||||||
xfree(path);
|
|
||||||
path = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef BINDIR
|
|
||||||
if (!path) {
|
|
||||||
path = xnfstrdup(BINDIR "/" GET_CONFIG_CMD);
|
|
||||||
if (access(path, X_OK) != 0) {
|
|
||||||
xfree(path);
|
|
||||||
path = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!path)
|
|
||||||
path = xnfstrdup(GET_CONFIG_CMD);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Build up the config file directory search path:
|
|
||||||
*
|
|
||||||
* /etc/X11
|
|
||||||
* PROJECTROOT/etc/X11
|
|
||||||
* xf86ModulePath
|
|
||||||
* PROJECTROOT/lib/X11/getconfig (GETCONFIG_DIR)
|
|
||||||
*/
|
|
||||||
|
|
||||||
searchPath = xnfalloc(strlen("/etc/X11") + 1 +
|
|
||||||
strlen(PROJECTROOT "/etc/X11") + 1 +
|
|
||||||
(xf86ModulePath ? strlen(xf86ModulePath) : 0)
|
|
||||||
+ 1 +
|
|
||||||
strlen(GETCONFIG_DIR) + 1);
|
|
||||||
strcpy(searchPath, "/etc/X11," PROJECTROOT "/etc/X11,");
|
|
||||||
if (xf86ModulePath && *xf86ModulePath) {
|
|
||||||
strcat(searchPath, xf86ModulePath);
|
|
||||||
strcat(searchPath, ",");
|
|
||||||
}
|
|
||||||
strcat(searchPath, GETCONFIG_DIR);
|
|
||||||
|
|
||||||
ErrorF("xf86AutoConfig: Primary PCI is %u@%u:%u:%u\n",
|
|
||||||
info->domain, info->bus, info->dev, info->func);
|
|
||||||
|
|
||||||
snprintf(buf, sizeof(buf), "%s"
|
|
||||||
#ifdef DEBUG
|
|
||||||
" -D"
|
|
||||||
#endif
|
|
||||||
" -X %d"
|
|
||||||
" -I %s"
|
|
||||||
" -v 0x%04x -d 0x%04x -r 0x%02x -s 0x%04x"
|
|
||||||
" -b 0x%04x -c 0x%04x",
|
|
||||||
path,
|
|
||||||
(unsigned int)xorgGetVersion(),
|
|
||||||
searchPath,
|
|
||||||
info->vendor_id, info->device_id, info->revision,
|
|
||||||
info->subvendor_id, info->subdevice_id,
|
|
||||||
info->device_class >> 8);
|
|
||||||
ErrorF("Running \"%s\"\n", buf);
|
|
||||||
gp = Popen(buf, "r");
|
|
||||||
if (gp) {
|
|
||||||
if (fgets(buf, sizeof(buf) - 1, gp)) {
|
|
||||||
buf[strlen(buf) - 1] = '\0';
|
|
||||||
tmp = strtok(buf, GETCONFIG_WHITESPACE);
|
|
||||||
if (tmp)
|
|
||||||
driver = xnfstrdup(tmp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
xfree(path);
|
|
||||||
xfree(searchPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
AppendToConfig(BUILTIN_MODULE_SECTION);
|
AppendToConfig(BUILTIN_MODULE_SECTION);
|
||||||
AppendToConfig(BUILTIN_MONITOR_SECTION);
|
AppendToConfig(BUILTIN_MONITOR_SECTION);
|
||||||
|
@ -307,19 +244,12 @@ xf86AutoConfig(void)
|
||||||
AppendToConfig(buf);
|
AppendToConfig(buf);
|
||||||
ErrorF("New driver is \"%s\"\n", driver);
|
ErrorF("New driver is \"%s\"\n", driver);
|
||||||
buf[0] = '\t';
|
buf[0] = '\t';
|
||||||
while (fgets(buf + 1, sizeof(buf) - 2, gp)) {
|
|
||||||
AppendToConfig(buf);
|
|
||||||
ErrorF("Extra line: %s", buf);
|
|
||||||
}
|
|
||||||
AppendToConfig(BUILTIN_DEVICE_SECTION_POST);
|
AppendToConfig(BUILTIN_DEVICE_SECTION_POST);
|
||||||
snprintf(buf, sizeof(buf), BUILTIN_SCREEN_SECTION,
|
snprintf(buf, sizeof(buf), BUILTIN_SCREEN_SECTION,
|
||||||
driver, 0, driver, 0);
|
driver, 0, driver, 0);
|
||||||
AppendToConfig(buf);
|
AppendToConfig(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gp)
|
|
||||||
Pclose(gp);
|
|
||||||
|
|
||||||
for (p = deviceList; *p; p++) {
|
for (p = deviceList; *p; p++) {
|
||||||
snprintf(buf, sizeof(buf), BUILTIN_DEVICE_SECTION, *p, 0, *p);
|
snprintf(buf, sizeof(buf), BUILTIN_DEVICE_SECTION, *p, 0, *p);
|
||||||
AppendToConfig(buf);
|
AppendToConfig(buf);
|
||||||
|
@ -338,13 +268,6 @@ xf86AutoConfig(void)
|
||||||
}
|
}
|
||||||
AppendToConfig(BUILTIN_LAYOUT_SECTION_POST);
|
AppendToConfig(BUILTIN_LAYOUT_SECTION_POST);
|
||||||
|
|
||||||
#ifdef BUILTIN_EXTRA
|
|
||||||
AppendToConfig(BUILTIN_EXTRA);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (driver)
|
|
||||||
xfree(driver);
|
|
||||||
|
|
||||||
xf86MsgVerb(X_DEFAULT, 0,
|
xf86MsgVerb(X_DEFAULT, 0,
|
||||||
"Using default built-in configuration (%d lines)\n",
|
"Using default built-in configuration (%d lines)\n",
|
||||||
builtinLines);
|
builtinLines);
|
||||||
|
@ -357,11 +280,9 @@ xf86AutoConfig(void)
|
||||||
xf86setBuiltinConfig(builtinConfig);
|
xf86setBuiltinConfig(builtinConfig);
|
||||||
ret = xf86HandleConfigFile(TRUE);
|
ret = xf86HandleConfigFile(TRUE);
|
||||||
FreeConfig();
|
FreeConfig();
|
||||||
switch(ret) {
|
|
||||||
case CONFIG_OK:
|
if (ret != CONFIG_OK)
|
||||||
return TRUE;
|
|
||||||
default:
|
|
||||||
xf86Msg(X_ERROR, "Error parsing the built-in default configuration.\n");
|
xf86Msg(X_ERROR, "Error parsing the built-in default configuration.\n");
|
||||||
return FALSE;
|
|
||||||
}
|
return (ret == CONFIG_OK);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,292 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2005-2006 Luc Verhaegen.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation
|
||||||
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
* and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
* Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||||
|
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||||
|
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
* OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The reason for having this function in a file of its own is
|
||||||
|
* so that ../utils/cvt/cvt can link to it, and that xf86CVTMode
|
||||||
|
* code is shared directly.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "xf86.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Generate a CVT standard mode from HDisplay, VDisplay and VRefresh.
|
||||||
|
*
|
||||||
|
* These calculations are stolen from the CVT calculation spreadsheet written
|
||||||
|
* by Graham Loveridge. He seems to be claiming no copyright and there seems to
|
||||||
|
* be no license attached to this. He apparently just wants to see his name
|
||||||
|
* mentioned.
|
||||||
|
*
|
||||||
|
* This file can be found at http://www.vesa.org/Public/CVT/CVTd6r1.xls
|
||||||
|
*
|
||||||
|
* Comments and structure corresponds to the comments and structure of the xls.
|
||||||
|
* This should ease importing of future changes to the standard (not very
|
||||||
|
* likely though).
|
||||||
|
*
|
||||||
|
* About margins; i'm sure that they are to be the bit between HDisplay and
|
||||||
|
* HBlankStart, HBlankEnd and HTotal, VDisplay and VBlankStart, VBlankEnd and
|
||||||
|
* VTotal, where the overscan colour is shown. FB seems to call _all_ blanking
|
||||||
|
* outside sync "margin" for some reason. Since we prefer seeing proper
|
||||||
|
* blanking instead of the overscan colour, and since the Crtc* values will
|
||||||
|
* probably get altered after us, we will disable margins altogether. With
|
||||||
|
* these calculations, Margins will plainly expand H/VDisplay, and we don't
|
||||||
|
* want that. -- libv
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
_X_EXPORT DisplayModePtr
|
||||||
|
xf86CVTMode(int HDisplay, int VDisplay, float VRefresh, Bool Reduced,
|
||||||
|
Bool Interlaced)
|
||||||
|
{
|
||||||
|
DisplayModeRec *Mode = xnfalloc(sizeof(DisplayModeRec));
|
||||||
|
|
||||||
|
/* 1) top/bottom margin size (% of height) - default: 1.8 */
|
||||||
|
#define CVT_MARGIN_PERCENTAGE 1.8
|
||||||
|
|
||||||
|
/* 2) character cell horizontal granularity (pixels) - default 8 */
|
||||||
|
#define CVT_H_GRANULARITY 8
|
||||||
|
|
||||||
|
/* 4) Minimum vertical porch (lines) - default 3 */
|
||||||
|
#define CVT_MIN_V_PORCH 3
|
||||||
|
|
||||||
|
/* 4) Minimum number of vertical back porch lines - default 6 */
|
||||||
|
#define CVT_MIN_V_BPORCH 6
|
||||||
|
|
||||||
|
/* Pixel Clock step (kHz) */
|
||||||
|
#define CVT_CLOCK_STEP 250
|
||||||
|
|
||||||
|
Bool Margins = FALSE;
|
||||||
|
float VFieldRate, HPeriod;
|
||||||
|
int HDisplayRnd, HMargin;
|
||||||
|
int VDisplayRnd, VMargin, VSync;
|
||||||
|
float Interlace; /* Please rename this */
|
||||||
|
|
||||||
|
memset(Mode, 0, sizeof(DisplayModeRec));
|
||||||
|
|
||||||
|
/* CVT default is 60.0Hz */
|
||||||
|
if (!VRefresh)
|
||||||
|
VRefresh = 60.0;
|
||||||
|
|
||||||
|
/* 1. Required field rate */
|
||||||
|
if (Interlaced)
|
||||||
|
VFieldRate = VRefresh * 2;
|
||||||
|
else
|
||||||
|
VFieldRate = VRefresh;
|
||||||
|
|
||||||
|
/* 2. Horizontal pixels */
|
||||||
|
HDisplayRnd = HDisplay - (HDisplay % CVT_H_GRANULARITY);
|
||||||
|
|
||||||
|
/* 3. Determine left and right borders */
|
||||||
|
if (Margins) {
|
||||||
|
/* right margin is actually exactly the same as left */
|
||||||
|
HMargin = (((float) HDisplayRnd) * CVT_MARGIN_PERCENTAGE / 100.0);
|
||||||
|
HMargin -= HMargin % CVT_H_GRANULARITY;
|
||||||
|
} else
|
||||||
|
HMargin = 0;
|
||||||
|
|
||||||
|
/* 4. Find total active pixels */
|
||||||
|
Mode->HDisplay = HDisplayRnd + 2*HMargin;
|
||||||
|
|
||||||
|
/* 5. Find number of lines per field */
|
||||||
|
if (Interlaced)
|
||||||
|
VDisplayRnd = VDisplay / 2;
|
||||||
|
else
|
||||||
|
VDisplayRnd = VDisplay;
|
||||||
|
|
||||||
|
/* 6. Find top and bottom margins */
|
||||||
|
/* nope. */
|
||||||
|
if (Margins)
|
||||||
|
/* top and bottom margins are equal again. */
|
||||||
|
VMargin = (((float) VDisplayRnd) * CVT_MARGIN_PERCENTAGE / 100.0);
|
||||||
|
else
|
||||||
|
VMargin = 0;
|
||||||
|
|
||||||
|
Mode->VDisplay = VDisplay + 2*VMargin;
|
||||||
|
|
||||||
|
/* 7. Interlace */
|
||||||
|
if (Interlaced)
|
||||||
|
Interlace = 0.5;
|
||||||
|
else
|
||||||
|
Interlace = 0.0;
|
||||||
|
|
||||||
|
/* Determine VSync Width from aspect ratio */
|
||||||
|
if (!(VDisplay % 3) && ((VDisplay * 4 / 3) == HDisplay))
|
||||||
|
VSync = 4;
|
||||||
|
else if (!(VDisplay % 9) && ((VDisplay * 16 / 9) == HDisplay))
|
||||||
|
VSync = 5;
|
||||||
|
else if (!(VDisplay % 10) && ((VDisplay * 16 / 10) == HDisplay))
|
||||||
|
VSync = 6;
|
||||||
|
else if (!(VDisplay % 4) && ((VDisplay * 5 / 4) == HDisplay))
|
||||||
|
VSync = 7;
|
||||||
|
else if (!(VDisplay % 9) && ((VDisplay * 15 / 9) == HDisplay))
|
||||||
|
VSync = 7;
|
||||||
|
else /* Custom */
|
||||||
|
VSync = 10;
|
||||||
|
|
||||||
|
if (!Reduced) { /* simplified GTF calculation */
|
||||||
|
|
||||||
|
/* 4) Minimum time of vertical sync + back porch interval (µs)
|
||||||
|
* default 550.0 */
|
||||||
|
#define CVT_MIN_VSYNC_BP 550.0
|
||||||
|
|
||||||
|
/* 3) Nominal HSync width (% of line period) - default 8 */
|
||||||
|
#define CVT_HSYNC_PERCENTAGE 8
|
||||||
|
|
||||||
|
float HBlankPercentage;
|
||||||
|
int VSyncAndBackPorch, VBackPorch;
|
||||||
|
int HBlank;
|
||||||
|
|
||||||
|
/* 8. Estimated Horizontal period */
|
||||||
|
HPeriod = ((float) (1000000.0 / VFieldRate - CVT_MIN_VSYNC_BP)) /
|
||||||
|
(VDisplayRnd + 2 * VMargin + CVT_MIN_V_PORCH + Interlace);
|
||||||
|
|
||||||
|
/* 9. Find number of lines in sync + backporch */
|
||||||
|
if (((int)(CVT_MIN_VSYNC_BP / HPeriod) + 1) < (VSync + CVT_MIN_V_PORCH))
|
||||||
|
VSyncAndBackPorch = VSync + CVT_MIN_V_PORCH;
|
||||||
|
else
|
||||||
|
VSyncAndBackPorch = (int)(CVT_MIN_VSYNC_BP / HPeriod) + 1;
|
||||||
|
|
||||||
|
/* 10. Find number of lines in back porch */
|
||||||
|
VBackPorch = VSyncAndBackPorch - VSync;
|
||||||
|
|
||||||
|
/* 11. Find total number of lines in vertical field */
|
||||||
|
Mode->VTotal = VDisplayRnd + 2 * VMargin + VSyncAndBackPorch + Interlace
|
||||||
|
+ CVT_MIN_V_PORCH;
|
||||||
|
|
||||||
|
/* 5) Definition of Horizontal blanking time limitation */
|
||||||
|
/* Gradient (%/kHz) - default 600 */
|
||||||
|
#define CVT_M_FACTOR 600
|
||||||
|
|
||||||
|
/* Offset (%) - default 40 */
|
||||||
|
#define CVT_C_FACTOR 40
|
||||||
|
|
||||||
|
/* Blanking time scaling factor - default 128 */
|
||||||
|
#define CVT_K_FACTOR 128
|
||||||
|
|
||||||
|
/* Scaling factor weighting - default 20 */
|
||||||
|
#define CVT_J_FACTOR 20
|
||||||
|
|
||||||
|
#define CVT_M_PRIME CVT_M_FACTOR * CVT_K_FACTOR / 256
|
||||||
|
#define CVT_C_PRIME (CVT_C_FACTOR - CVT_J_FACTOR) * CVT_K_FACTOR / 256 + \
|
||||||
|
CVT_J_FACTOR
|
||||||
|
|
||||||
|
/* 12. Find ideal blanking duty cycle from formula */
|
||||||
|
HBlankPercentage = CVT_C_PRIME - CVT_M_PRIME * HPeriod/1000.0;
|
||||||
|
|
||||||
|
/* 13. Blanking time */
|
||||||
|
if (HBlankPercentage < 20)
|
||||||
|
HBlankPercentage = 20;
|
||||||
|
|
||||||
|
HBlank = Mode->HDisplay * HBlankPercentage/(100.0 - HBlankPercentage);
|
||||||
|
HBlank -= HBlank % (2*CVT_H_GRANULARITY);
|
||||||
|
|
||||||
|
/* 14. Find total number of pixels in a line. */
|
||||||
|
Mode->HTotal = Mode->HDisplay + HBlank;
|
||||||
|
|
||||||
|
/* Fill in HSync values */
|
||||||
|
Mode->HSyncEnd = Mode->HDisplay + HBlank / 2;
|
||||||
|
|
||||||
|
Mode->HSyncStart = Mode->HSyncEnd -
|
||||||
|
(Mode->HTotal * CVT_HSYNC_PERCENTAGE) / 100;
|
||||||
|
Mode->HSyncStart += CVT_H_GRANULARITY -
|
||||||
|
Mode->HSyncStart % CVT_H_GRANULARITY;
|
||||||
|
|
||||||
|
/* Fill in VSync values */
|
||||||
|
Mode->VSyncStart = Mode->VDisplay + CVT_MIN_V_PORCH;
|
||||||
|
Mode->VSyncEnd = Mode->VSyncStart + VSync;
|
||||||
|
|
||||||
|
} else { /* Reduced blanking */
|
||||||
|
/* Minimum vertical blanking interval time (µs) - default 460 */
|
||||||
|
#define CVT_RB_MIN_VBLANK 460.0
|
||||||
|
|
||||||
|
/* Fixed number of clocks for horizontal sync */
|
||||||
|
#define CVT_RB_H_SYNC 32.0
|
||||||
|
|
||||||
|
/* Fixed number of clocks for horizontal blanking */
|
||||||
|
#define CVT_RB_H_BLANK 160.0
|
||||||
|
|
||||||
|
/* Fixed number of lines for vertical front porch - default 3 */
|
||||||
|
#define CVT_RB_VFPORCH 3
|
||||||
|
|
||||||
|
int VBILines;
|
||||||
|
|
||||||
|
/* 8. Estimate Horizontal period. */
|
||||||
|
HPeriod = ((float) (1000000.0 / VFieldRate - CVT_RB_MIN_VBLANK)) /
|
||||||
|
(VDisplayRnd + 2*VMargin);
|
||||||
|
|
||||||
|
/* 9. Find number of lines in vertical blanking */
|
||||||
|
VBILines = ((float) CVT_RB_MIN_VBLANK) / HPeriod + 1;
|
||||||
|
|
||||||
|
/* 10. Check if vertical blanking is sufficient */
|
||||||
|
if (VBILines < (CVT_RB_VFPORCH + VSync + CVT_MIN_V_BPORCH))
|
||||||
|
VBILines = CVT_RB_VFPORCH + VSync + CVT_MIN_V_BPORCH;
|
||||||
|
|
||||||
|
/* 11. Find total number of lines in vertical field */
|
||||||
|
Mode->VTotal = VDisplayRnd + 2 * VMargin + Interlace + VBILines;
|
||||||
|
|
||||||
|
/* 12. Find total number of pixels in a line */
|
||||||
|
Mode->HTotal = Mode->HDisplay + CVT_RB_H_BLANK;
|
||||||
|
|
||||||
|
/* Fill in HSync values */
|
||||||
|
Mode->HSyncEnd = Mode->HDisplay + CVT_RB_H_BLANK / 2;
|
||||||
|
Mode->HSyncStart = Mode->HSyncEnd - CVT_RB_H_SYNC;
|
||||||
|
|
||||||
|
/* Fill in VSync values */
|
||||||
|
Mode->VSyncStart = Mode->VDisplay + CVT_RB_VFPORCH;
|
||||||
|
Mode->VSyncEnd = Mode->VSyncStart + VSync;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 15/13. Find pixel clock frequency (kHz for xf86) */
|
||||||
|
Mode->Clock = Mode->HTotal * 1000.0 / HPeriod;
|
||||||
|
Mode->Clock -= Mode->Clock % CVT_CLOCK_STEP;
|
||||||
|
|
||||||
|
/* 16/14. Find actual Horizontal Frequency (kHz) */
|
||||||
|
Mode->HSync = ((float) Mode->Clock) / ((float) Mode->HTotal);
|
||||||
|
|
||||||
|
/* 17/15. Find actual Field rate */
|
||||||
|
Mode->VRefresh = (1000.0 * ((float) Mode->Clock)) /
|
||||||
|
((float) (Mode->HTotal * Mode->VTotal));
|
||||||
|
|
||||||
|
/* 18/16. Find actual vertical frame frequency */
|
||||||
|
/* ignore - just set the mode flag for interlaced */
|
||||||
|
if (Interlaced)
|
||||||
|
Mode->VTotal *= 2;
|
||||||
|
|
||||||
|
{
|
||||||
|
char Name[256];
|
||||||
|
Name[0] = 0;
|
||||||
|
|
||||||
|
snprintf(Name, 256, "%dx%d", HDisplay, VDisplay);
|
||||||
|
|
||||||
|
Mode->name = xnfalloc(strlen(Name) + 1);
|
||||||
|
memcpy(Mode->name, Name, strlen(Name) + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Reduced)
|
||||||
|
Mode->Flags |= V_PHSYNC | V_NVSYNC;
|
||||||
|
else
|
||||||
|
Mode->Flags |= V_NHSYNC | V_PVSYNC;
|
||||||
|
|
||||||
|
if (Interlaced)
|
||||||
|
Mode->Flags |= V_INTERLACE;
|
||||||
|
|
||||||
|
return Mode;
|
||||||
|
}
|
|
@ -25,4 +25,4 @@ exa.$(DRIVER_MAN_SUFFIX): exa.man
|
||||||
-rm -f exa.$(DRIVER_MAN_SUFFIX)
|
-rm -f exa.$(DRIVER_MAN_SUFFIX)
|
||||||
$(LN_S) exa.man exa.$(DRIVER_MAN_SUFFIX)
|
$(LN_S) exa.man exa.$(DRIVER_MAN_SUFFIX)
|
||||||
|
|
||||||
EXTRA_DIST = exa.man.pre README
|
EXTRA_DIST = exa.man.pre
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
getconfig.1
|
|
||||||
getconfig.1x
|
|
||||||
getconfig.5
|
|
||||||
getconfig.5x
|
|
|
@ -1,56 +0,0 @@
|
||||||
# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
|
|
||||||
#
|
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
# copy of this software and associated documentation files (the
|
|
||||||
# "Software"), to deal in the Software without restriction, including
|
|
||||||
# without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
# distribute, and/or sell copies of the Software, and to permit persons
|
|
||||||
# to whom the Software is furnished to do so, provided that the above
|
|
||||||
# copyright notice(s) and this permission notice appear in all copies of
|
|
||||||
# the Software and that both the above copyright notice(s) and this
|
|
||||||
# permission notice appear in supporting documentation.
|
|
||||||
#
|
|
||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
||||||
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
|
||||||
# OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
|
||||||
# HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL
|
|
||||||
# INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
|
|
||||||
# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
|
||||||
# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
|
|
||||||
# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
#
|
|
||||||
# Except as contained in this notice, the name of a copyright holder
|
|
||||||
# shall not be used in advertising or otherwise to promote the sale, use
|
|
||||||
# or other dealings in this Software without prior written authorization
|
|
||||||
# of the copyright holder.
|
|
||||||
#
|
|
||||||
|
|
||||||
dist_bin_SCRIPTS = getconfig getconfig.pl
|
|
||||||
|
|
||||||
getconfigdir = $(libdir)/X11/getconfig
|
|
||||||
dist_getconfig_DATA = xorg.cfg cfg.sample
|
|
||||||
|
|
||||||
include $(top_srcdir)/cpprules.in
|
|
||||||
|
|
||||||
appmandir = $(APP_MAN_DIR)
|
|
||||||
appman_PRE = getconfig.man
|
|
||||||
appman_DATA = $(appman_PRE:man=@APP_MAN_SUFFIX@)
|
|
||||||
|
|
||||||
filemandir = $(FILE_MAN_DIR)
|
|
||||||
fileman_DATA = getconfig.$(FILE_MAN_SUFFIX)
|
|
||||||
|
|
||||||
getconfig.$(FILE_MAN_SUFFIX): cfg.man
|
|
||||||
-rm -f getconfig.$(FILE_MAN_SUFFIX)
|
|
||||||
$(LN_S) cfg.man getconfig.$(FILE_MAN_SUFFIX)
|
|
||||||
|
|
||||||
SUFFIXES += .$(APP_MAN_SUFFIX) .man
|
|
||||||
|
|
||||||
.man.$(APP_MAN_SUFFIX):
|
|
||||||
-rm -f $@
|
|
||||||
$(LN_S) $< $@
|
|
||||||
|
|
||||||
BUILT_SOURCES = $(appman_PRE)
|
|
||||||
CLEANFILES = $(appman_PRE) $(appman_DATA) $(fileman_DATA) cfg.man
|
|
||||||
|
|
||||||
EXTRA_DIST = cfg.man.pre getconfig.man.pre
|
|
|
@ -1,137 +0,0 @@
|
||||||
.TH getconfig __filemansuffix__ __vendorversion__
|
|
||||||
.SH NAME
|
|
||||||
getconfig - meta configuration files for getconfig(1)
|
|
||||||
.SH SYNOPSIS
|
|
||||||
.B \(**.cfg
|
|
||||||
.SH DESCRIPTION
|
|
||||||
.B getconfig
|
|
||||||
is a programmatic interface that is used by the
|
|
||||||
.B __xservername__
|
|
||||||
server to get configuration information about video hardware when
|
|
||||||
operating without an
|
|
||||||
.B __xconfigfile__
|
|
||||||
file.
|
|
||||||
.PP
|
|
||||||
This implementation of
|
|
||||||
.B getconfig
|
|
||||||
is written in perl. It processes rules from meta-configuration files.
|
|
||||||
All meta-configuration files have a
|
|
||||||
.I .cfg
|
|
||||||
suffix.
|
|
||||||
.PP
|
|
||||||
Lines starting with a pound-sign (#) are comments, and are ignored.
|
|
||||||
Blank lines that consist only of white space are also treated as comments
|
|
||||||
and ignored.
|
|
||||||
.PP
|
|
||||||
The first non-comment line must be a signature string followed by
|
|
||||||
the file format version number. The signature string is
|
|
||||||
.PP
|
|
||||||
.RS 4
|
|
||||||
.nf
|
|
||||||
"Xorg getconfig rules file.\ \ Version: "
|
|
||||||
.fi
|
|
||||||
.RE
|
|
||||||
.PP
|
|
||||||
The currently defined version is "1.0". Files that do not have the
|
|
||||||
correct signature string are ignored.
|
|
||||||
.PP
|
|
||||||
The remaining non-comment lines define rules. The start of a new rule
|
|
||||||
is indicated by a line with no leading white space. Subsequent lines
|
|
||||||
making up a rule must be indented with white space. Logical lines within
|
|
||||||
a rule may be split over multiple physical lines by using the usual
|
|
||||||
continuation convention ('\e' at the end of the line). The first logical
|
|
||||||
line of each rule is a perl expression. It may be any valid perl
|
|
||||||
expression whose evaluated (with 'eval') result may be used as the
|
|
||||||
argument to a perl 'if' statement. The second logical line should be
|
|
||||||
the name of the __xservername__ video driver to use when the rule is true, and
|
|
||||||
subsequent logical lines of each rule, if present, are additional
|
|
||||||
configuration output for the video device's
|
|
||||||
.B __xconfigfile__
|
|
||||||
.B Device
|
|
||||||
section. The driver name and additional lines of configuration information
|
|
||||||
are written to standard output when the rule is chosen as the successful
|
|
||||||
rule.
|
|
||||||
.PP
|
|
||||||
Pseudo rules consisting of perl expressions may be present in the file
|
|
||||||
for the purpose of defining custom perl variables or setting the weight
|
|
||||||
to use for the following rules. Pseudo rules are rules that consist of
|
|
||||||
a single logical line only, and the are never candidates themselves for the
|
|
||||||
successful rule.
|
|
||||||
.PP
|
|
||||||
Several perl variables are pre-defined, and may be used within rules.
|
|
||||||
They include:
|
|
||||||
.PP
|
|
||||||
.RS 4
|
|
||||||
.nf
|
|
||||||
.BR "$vendor " "PCI vendor ID"
|
|
||||||
.BR "$device " "PCI device ID"
|
|
||||||
.BR "$revision " "PCI revision ID"
|
|
||||||
.BR "$subsys " "PCI subsystem ID"
|
|
||||||
.BR "$subsysVendor " "PCI subsystem vendor ID"
|
|
||||||
.BR "$class " "PCI class"
|
|
||||||
.BR "$XorgVersion " "Xorg version, as a 'v' string"
|
|
||||||
.BR "$XorgVersionNumeric " "Xorg numeric version"
|
|
||||||
.BR "$XorgVersionMajor " "Xorg major version"
|
|
||||||
.BR "$XorgVersionMinor " "Xorg minor version"
|
|
||||||
.BR "$XorgVersionPatch " "Xorg patch version"
|
|
||||||
.BR "$XorgVersionSnap " "Xorg snap version"
|
|
||||||
.BR "$weight " "current rule weight"
|
|
||||||
.fi
|
|
||||||
.RE
|
|
||||||
.PP
|
|
||||||
The
|
|
||||||
.B $weight
|
|
||||||
variable determines the weight of the rules as they are processed. The
|
|
||||||
weight for subsequent rules may be set with a pseudo rule that sets or
|
|
||||||
changes the value of
|
|
||||||
.BR $weight .
|
|
||||||
The default weight, and the weight used for built-in rules is 500. The
|
|
||||||
meta-configuration files are processed in an unpredictable order. The
|
|
||||||
weighting of the rules is used to determine their relative priority
|
|
||||||
.PP
|
|
||||||
After processing all of the rules, both built-in and those read from
|
|
||||||
the meta-configuration files, the
|
|
||||||
.B getconfig
|
|
||||||
program chooses as the successful rule the last and highest weighted
|
|
||||||
rule that evaluates to true.
|
|
||||||
.SH FILES
|
|
||||||
.I .cfg
|
|
||||||
files located in the search path. The search path typically specified
|
|
||||||
by the
|
|
||||||
.B __xservername__
|
|
||||||
server is:
|
|
||||||
.PP
|
|
||||||
.RS 4
|
|
||||||
.nf
|
|
||||||
.I /etc/X11
|
|
||||||
.I __projectroot__/etc/X11
|
|
||||||
.I <modulepath>
|
|
||||||
.I __projectroot__/lib/X11/getconfig
|
|
||||||
.fi
|
|
||||||
.RE
|
|
||||||
.PP
|
|
||||||
where
|
|
||||||
.I <modulepath>
|
|
||||||
is the
|
|
||||||
.B __xservername__
|
|
||||||
server's module search path.
|
|
||||||
.PP
|
|
||||||
.TP 30
|
|
||||||
.I __projectroot__/lib/X11/getconfig/xorg.cfg
|
|
||||||
Default rules file that gets installed. This file doesn't contain any
|
|
||||||
rules by default.
|
|
||||||
.TP 30
|
|
||||||
.I __projectroot__/lib/X11/getconfig/cfg.sample
|
|
||||||
A sample rules file that gives some examples of what types of rules can
|
|
||||||
appear in rules files.
|
|
||||||
|
|
||||||
.SH "SEE ALSO"
|
|
||||||
getconfig(1),
|
|
||||||
__xservername__(__appmansuffix__),
|
|
||||||
__xconfigfile__(__filemansuffix__).
|
|
||||||
|
|
||||||
.SH AUTHORS
|
|
||||||
The __xservername__ automatic configuration support and the
|
|
||||||
.B getconfig
|
|
||||||
interface was written by David H. Dawes, with the support of X-Oz
|
|
||||||
Technologies for XFree86.
|
|
|
@ -1,110 +0,0 @@
|
||||||
# $DHD: xc/programs/Xserver/hw/xfree86/getconfig/cfg.sample,v 1.2 2003/09/23 05:12:07 dawes Exp $
|
|
||||||
|
|
||||||
# Some sample Xorg getconfig rules file.
|
|
||||||
|
|
||||||
#
|
|
||||||
# The line below is the getconfig rules file signature, and must be the
|
|
||||||
# first non-blank, non-comment line.
|
|
||||||
#
|
|
||||||
|
|
||||||
Xorg Project getconfig rules file. Version: 1.0
|
|
||||||
|
|
||||||
#
|
|
||||||
# Set the weight for the following rules. This should be set, otherwise
|
|
||||||
# the previously set weight will get used, and you have no idea of knowing
|
|
||||||
# what that might be.
|
|
||||||
#
|
|
||||||
|
|
||||||
$weight = 1000
|
|
||||||
|
|
||||||
#
|
|
||||||
# Rules. Rules consist of a condition (in perl code) followed by
|
|
||||||
# a driver name and optionally some additional strings. The start of a
|
|
||||||
# rule is indicated by a line with no leading white space. Subsequent
|
|
||||||
# lines making up a rule must be indented. Logical lines may be split
|
|
||||||
# over multiple physical lines by using the usual continuation '\'.
|
|
||||||
#
|
|
||||||
# Rules that are not followed by a driver name may be used to do other
|
|
||||||
# things, like setting the weight as above.
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
|
||||||
# Pre-defined variables include:
|
|
||||||
#
|
|
||||||
# $vendor PCI vendor ID
|
|
||||||
# $device PCI device ID
|
|
||||||
# $revision PCI revision ID
|
|
||||||
# $subsys PCI subsystem ID
|
|
||||||
# $subsysVendor PCI subsystem vendor ID
|
|
||||||
# $class PCI class
|
|
||||||
# $XorgVersion Xorg version, as a 'v' string.
|
|
||||||
#
|
|
||||||
# The Xorg version information is also available as the following:
|
|
||||||
#
|
|
||||||
# $XorgVersionNumeric
|
|
||||||
# $XorgVersionMajor
|
|
||||||
# $XorgVersionMinor
|
|
||||||
# $XorgVersionPatch
|
|
||||||
# $XorgVersionSnap
|
|
||||||
#
|
|
||||||
|
|
||||||
# Define a fake vendor ID for some sample rules.
|
|
||||||
|
|
||||||
$novendor = 0x10000
|
|
||||||
$nodevice = 0x10000
|
|
||||||
|
|
||||||
$vendor == $novendor
|
|
||||||
nodriver
|
|
||||||
Option "xx"
|
|
||||||
Videoram 1000
|
|
||||||
|
|
||||||
# A rule with continued lines.
|
|
||||||
|
|
||||||
$vendor == $novendor && \
|
|
||||||
$device == $nodevice
|
|
||||||
nodriver2
|
|
||||||
Option \
|
|
||||||
"yy"
|
|
||||||
|
|
||||||
# Increase the weight of the following rules if the Xorg version is 4.3 or
|
|
||||||
# higher.
|
|
||||||
|
|
||||||
$weight++ if ($XorgVersion ge v4.3)
|
|
||||||
|
|
||||||
$vendor == $novendor
|
|
||||||
nodriver
|
|
||||||
Option "yy"
|
|
||||||
|
|
||||||
#
|
|
||||||
# The weight can be changed at any times, and applies to rules that follow
|
|
||||||
# until changed again.
|
|
||||||
#
|
|
||||||
|
|
||||||
$weight = 100
|
|
||||||
|
|
||||||
$vendor == $novendor && $XorgVersion eq v4.3.2.1
|
|
||||||
nodriver3
|
|
||||||
|
|
||||||
$weight = 600
|
|
||||||
|
|
||||||
#
|
|
||||||
# The following two examples use some real values.
|
|
||||||
#
|
|
||||||
|
|
||||||
# Example: make the default depth 24 for Radeon R200 and RV200 cards.
|
|
||||||
|
|
||||||
$vendor == 0x1002 && \
|
|
||||||
($device >= 0x5148 && $device <= 0x514F || \
|
|
||||||
$device >= 0x5168 && $device <= 0x516C || \
|
|
||||||
$device == 0x4242 || \
|
|
||||||
$device >= 0x5157 && device <= 0x5158)
|
|
||||||
ati
|
|
||||||
Option "DefaultDepth" "24"
|
|
||||||
|
|
||||||
|
|
||||||
# Example: enable DRI for MGA G400
|
|
||||||
|
|
||||||
$vendor == 0x102b && $device == 0x0525
|
|
||||||
mga
|
|
||||||
Option "dri"
|
|
||||||
|
|
|
@ -1,43 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# $XdotOrg$
|
|
||||||
|
|
||||||
#
|
|
||||||
# Copyright 2003 by David H. Dawes.
|
|
||||||
# Copyright 2003 by X-Oz Technologies.
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
# copy of this software and associated documentation files (the "Software"),
|
|
||||||
# to deal in the Software without restriction, including without limitation
|
|
||||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
# and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
# Software is furnished to do so, subject to the following conditions:
|
|
||||||
#
|
|
||||||
# The above copyright notice and this permission notice shall be included in
|
|
||||||
# all copies or substantial portions of the Software.
|
|
||||||
#
|
|
||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
# THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
|
||||||
# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
|
||||||
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
||||||
# OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
#
|
|
||||||
# Except as contained in this notice, the name of the copyright holder(s)
|
|
||||||
# and author(s) shall not be used in advertising or otherwise to promote
|
|
||||||
# the sale, use or other dealings in this Software without prior written
|
|
||||||
# authorization from the copyright holder(s) and author(s).
|
|
||||||
#
|
|
||||||
# Author: David Dawes <dawes@XFree86.Org>.
|
|
||||||
#
|
|
||||||
|
|
||||||
# A simple wrapper to execute the real getconfig program. So long as perl
|
|
||||||
# is in $PATH, we don't need to know where it is this way.
|
|
||||||
|
|
||||||
if echo $0 | grep / >/dev/null 2>&1; then
|
|
||||||
DIR=`dirname $0`/
|
|
||||||
fi
|
|
||||||
|
|
||||||
exec perl ${DIR}getconfig.pl "$@"
|
|
|
@ -1,98 +0,0 @@
|
||||||
.TH getconfig 1 __vendorversion__
|
|
||||||
.SH NAME
|
|
||||||
getconfig - get configuration information for the __xservername__ server
|
|
||||||
.SH SYNOPSIS
|
|
||||||
.B getconfig
|
|
||||||
.RI [ option
|
|
||||||
.IR ... ]
|
|
||||||
.SH DESCRIPTION
|
|
||||||
.B getconfig
|
|
||||||
is a programmatic interface that is used by the
|
|
||||||
.B __xservername__
|
|
||||||
server to get configuration information about video hardware when
|
|
||||||
operating without an
|
|
||||||
.B __xconfigfile__
|
|
||||||
file.
|
|
||||||
.PP
|
|
||||||
This implementation of
|
|
||||||
.B getconfig
|
|
||||||
is written in perl. It processes a prioritized and ordered list of
|
|
||||||
rules supplied internally and from meta-configuration files. The rules
|
|
||||||
are in the form of perl expressions.
|
|
||||||
.B getconfig
|
|
||||||
writes to standard output the __xconfigfile__-style configuration data
|
|
||||||
specified by the last highest priority rule that evaluates to true.
|
|
||||||
Information about the format of the meta-configuration files can be
|
|
||||||
found in the getconfig(__filemansuffix__) manual page.
|
|
||||||
.SH OPTIONS
|
|
||||||
.TP 8
|
|
||||||
.BI \-I " search-path"
|
|
||||||
Specify the search path to use for meta-config files.
|
|
||||||
.I search-path
|
|
||||||
is a comma-separated list of directories to search. Each directory in
|
|
||||||
the search path is searched for files with a
|
|
||||||
.I .cfg
|
|
||||||
suffix. Each such file is opened and checked for a valid signature
|
|
||||||
string. Rules are read from files with a valid signature string and
|
|
||||||
appended to the list of rules to evaluate. If no search path is specified,
|
|
||||||
only the internally supplied configuration rules will be used.
|
|
||||||
.TP 8
|
|
||||||
.B \-D
|
|
||||||
Enable debugging output.
|
|
||||||
.TP 8
|
|
||||||
.B \-V
|
|
||||||
Print out the version information and exit.
|
|
||||||
.TP 8
|
|
||||||
.BI \-X
|
|
||||||
.BI __xservername__-version
|
|
||||||
Specify the __xservername__ version in numeric (integer) form.
|
|
||||||
.TP 8
|
|
||||||
.BI \-b " subsys-id"
|
|
||||||
Specify the PCI subsystem ID of the video device.
|
|
||||||
.TP 8
|
|
||||||
.BI \-c " class"
|
|
||||||
Specify the PCI class of the video device.
|
|
||||||
.TP 8
|
|
||||||
.BI \-d " device-id"
|
|
||||||
Specify the PCI devide ID of the video device.
|
|
||||||
.TP 8
|
|
||||||
.BI \-r " revision"
|
|
||||||
Specify the PCI revision of the video device.
|
|
||||||
.TP 8
|
|
||||||
.BI \-s " subsysvendor-id"
|
|
||||||
Specify the PCI subsystem vendor ID of the video device.
|
|
||||||
.TP 8
|
|
||||||
.BI \-v " vendor-id"
|
|
||||||
Specify the PCI vendor ID of the video device.
|
|
||||||
.SH FILES
|
|
||||||
.I .cfg
|
|
||||||
files located in the search path. The search path typically specified
|
|
||||||
by the
|
|
||||||
.B __xservername__
|
|
||||||
server is:
|
|
||||||
.PP
|
|
||||||
.RS 4
|
|
||||||
.nf
|
|
||||||
.I /etc/X11
|
|
||||||
.I __projectroot__/etc/X11
|
|
||||||
.I <modulepath>
|
|
||||||
.I __projectroot__/lib/X11/getconfig
|
|
||||||
.fi
|
|
||||||
.RE
|
|
||||||
.PP
|
|
||||||
where
|
|
||||||
.I <modulepath>
|
|
||||||
is the
|
|
||||||
.B __xservername__
|
|
||||||
server's module search path.
|
|
||||||
|
|
||||||
.SH "SEE ALSO"
|
|
||||||
getconfig(__filemansuffix__),
|
|
||||||
__xservername__(__appmansuffix__),
|
|
||||||
__xconfigfile__(__filemansuffix__).
|
|
||||||
|
|
||||||
.SH AUTHORS
|
|
||||||
The __xservername__ automatic configuration support and the
|
|
||||||
.B getconfig
|
|
||||||
interface was written by David H. Dawes, with the support of X-Oz
|
|
||||||
Technologies for XFree86.
|
|
|
@ -1,433 +0,0 @@
|
||||||
#!/usr/bin/perl
|
|
||||||
|
|
||||||
# $DHD: xc/programs/Xserver/hw/xfree86/getconfig/getconfig.pl,v 1.13 2003/09/23 05:12:07 dawes Exp $
|
|
||||||
# $XdotOrg: $
|
|
||||||
|
|
||||||
#
|
|
||||||
# Copyright 2003 by David H. Dawes.
|
|
||||||
# Copyright 2003 by X-Oz Technologies.
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
# copy of this software and associated documentation files (the "Software"),
|
|
||||||
# to deal in the Software without restriction, including without limitation
|
|
||||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
# and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
# Software is furnished to do so, subject to the following conditions:
|
|
||||||
#
|
|
||||||
# The above copyright notice and this permission notice shall be included in
|
|
||||||
# all copies or substantial portions of the Software.
|
|
||||||
#
|
|
||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
# THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
|
||||||
# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
|
||||||
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
||||||
# OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
#
|
|
||||||
# Except as contained in this notice, the name of the copyright holder(s)
|
|
||||||
# and author(s) shall not be used in advertising or otherwise to promote
|
|
||||||
# the sale, use or other dealings in this Software without prior written
|
|
||||||
# authorization from the copyright holder(s) and author(s).
|
|
||||||
#
|
|
||||||
# Author: David Dawes <dawes@XFree86.Org>.
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# This script takes PCI id information, compares it against an ordered list
|
|
||||||
# of rules, and prints out the configuration information specified by the
|
|
||||||
# last matching rule.
|
|
||||||
#
|
|
||||||
# This script is called by xf86AutoConfig().
|
|
||||||
#
|
|
||||||
|
|
||||||
# Command line processing.
|
|
||||||
|
|
||||||
$GetconfigVersion = v1.0;
|
|
||||||
|
|
||||||
$debug = 0;
|
|
||||||
|
|
||||||
$myname = $0;
|
|
||||||
$myname =~ s/.*\///;
|
|
||||||
|
|
||||||
$signature = "Xorg Foundation getconfig rules file. Version: ";
|
|
||||||
|
|
||||||
while (@ARGV[0] =~ /^-[A-Za-z]$/) {
|
|
||||||
$f = shift;
|
|
||||||
SWITCH: {
|
|
||||||
if ($f eq "-D") {
|
|
||||||
$debug = 1;
|
|
||||||
last SWITCH;
|
|
||||||
}
|
|
||||||
if ($f eq "-I") {
|
|
||||||
push(@searchPaths, split(/,/, shift));
|
|
||||||
last SWITCH;
|
|
||||||
}
|
|
||||||
if ($f eq "-V") {
|
|
||||||
printf STDERR "$myname: Version %vd.\n", $GetconfigVersion;
|
|
||||||
exit 0;
|
|
||||||
}
|
|
||||||
if ($f eq "-X") {
|
|
||||||
$XorgVersionNumeric = shift;
|
|
||||||
if (!defined($XorgVersionNumeric)) {
|
|
||||||
print STDERR "$myname: -X requires the Xorg version.\n";
|
|
||||||
exit 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($f eq "-b") {
|
|
||||||
$subsys = oct(shift);
|
|
||||||
if (!defined($subsys)) {
|
|
||||||
print STDERR "$myname: -b requires the subsys id.\n";
|
|
||||||
exit 1;
|
|
||||||
}
|
|
||||||
last SWITCH;
|
|
||||||
}
|
|
||||||
if ($f eq "-c") {
|
|
||||||
$class = oct(shift);
|
|
||||||
if (!defined($class)) {
|
|
||||||
print STDERR "$myname: -c requires the class value.\n";
|
|
||||||
exit 1;
|
|
||||||
}
|
|
||||||
last SWITCH;
|
|
||||||
}
|
|
||||||
if ($f eq "-d") {
|
|
||||||
$device = oct(shift);
|
|
||||||
if (!defined($device)) {
|
|
||||||
print STDERR "$myname: -d requires the device id.\n";
|
|
||||||
exit 1;
|
|
||||||
}
|
|
||||||
last SWITCH;
|
|
||||||
}
|
|
||||||
if ($f eq "-r") {
|
|
||||||
$revision = oct(shift);
|
|
||||||
if (!defined($revision)) {
|
|
||||||
print STDERR "$myname: -r requires the device revision.\n";
|
|
||||||
exit 1;
|
|
||||||
}
|
|
||||||
last SWITCH;
|
|
||||||
}
|
|
||||||
if ($f eq "-s") {
|
|
||||||
$subsysVendor = oct(shift);
|
|
||||||
if (!defined($subsysVendor)) {
|
|
||||||
print STDERR "$myname: -s requires the subsysVendor id.\n";
|
|
||||||
exit 1;
|
|
||||||
}
|
|
||||||
last SWITCH;
|
|
||||||
}
|
|
||||||
if ($f eq "-v") {
|
|
||||||
$vendor = oct(shift);
|
|
||||||
if (!defined($vendor)) {
|
|
||||||
print STDERR "$myname: -v requires the vendor id.\n";
|
|
||||||
exit 1;
|
|
||||||
}
|
|
||||||
last SWITCH;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
printf STDERR "$myname: Version %vd.\n", $GetconfigVersion;
|
|
||||||
|
|
||||||
if (defined($XorgVersionNumeric)) {
|
|
||||||
$XorgVersionMajor = $XorgVersionNumeric / 10000000;
|
|
||||||
$XorgVersionMinor = ($XorgVersionNumeric % 10000000) / 100000;
|
|
||||||
$XorgVersionPatch = ($XorgVersionNumeric % 100000) / 1000;
|
|
||||||
$XorgVersionSnapshot = $XorgVersionNumeric % 1000;
|
|
||||||
$XorgVersion = chr($XorgVersionMajor) . chr($XorgVersionMinor) .
|
|
||||||
chr($XorgVersionPatch) . chr($XorgVersionSnapshot);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($debug) {
|
|
||||||
printf STDERR "$myname: Xorg Version: %d, %d.%d.%d.%d, %vd.\n",
|
|
||||||
$XorgVersionNumeric, $XorgVersionMajor, $XorgVersionMinor,
|
|
||||||
$XorgVersionPatch, $XorgVersionSnapshot, $XorgVersion;
|
|
||||||
} else {
|
|
||||||
printf STDERR "$myname: Xorg Version: %vd.\n", $XorgVersion;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# The rules here are just basic vendor ID to driver mappings.
|
|
||||||
# Ideally this is all that would be required. More complicated configuration
|
|
||||||
# rules will be provided in external files.
|
|
||||||
|
|
||||||
# XXX This set of basic rules isn't complete yet.
|
|
||||||
|
|
||||||
@rules = (
|
|
||||||
|
|
||||||
# Set the weight for the built-in rules.
|
|
||||||
['$weight = 500'],
|
|
||||||
|
|
||||||
# APM
|
|
||||||
['$vendor == 0x1142',
|
|
||||||
'apm'],
|
|
||||||
|
|
||||||
# ARK
|
|
||||||
['$vendor == 0xedd8',
|
|
||||||
'apm'],
|
|
||||||
|
|
||||||
# AST
|
|
||||||
['$vendor == 0x1a03',
|
|
||||||
'ast'],
|
|
||||||
|
|
||||||
# ATI
|
|
||||||
['$vendor == 0x1002',
|
|
||||||
'ati'],
|
|
||||||
|
|
||||||
# Chips & Technologies
|
|
||||||
['$vendor == 0x102c',
|
|
||||||
'chips'],
|
|
||||||
|
|
||||||
# Cirrus
|
|
||||||
['$vendor == 0x1013',
|
|
||||||
'cirrus'],
|
|
||||||
|
|
||||||
# Intel
|
|
||||||
['$vendor == 0x8086',
|
|
||||||
'i810'],
|
|
||||||
['$vendor == 0x8086 && ($chipType == 0x00d1 || $chipType == 0x7800)',
|
|
||||||
'i740'],
|
|
||||||
|
|
||||||
# Matrox
|
|
||||||
['$vendor == 0x102b',
|
|
||||||
'mga'],
|
|
||||||
|
|
||||||
# Neomagic
|
|
||||||
['$vendor == 0x10c8',
|
|
||||||
'neomagic'],
|
|
||||||
|
|
||||||
# Number Nine
|
|
||||||
['$vendor == 0x105d',
|
|
||||||
'i128'],
|
|
||||||
|
|
||||||
# NVIDIA
|
|
||||||
['$vendor == 0x10de || $vendor == 0x12d2',
|
|
||||||
'nv'],
|
|
||||||
|
|
||||||
# S3
|
|
||||||
['$vendor == 0x5333 && ($device == 0x88d0 ||' .
|
|
||||||
'$device == 0x88d1 ||' .
|
|
||||||
'$device == 0x88f0 ||' .
|
|
||||||
'$device == 0x8811 ||' .
|
|
||||||
'$device == 0x8812 ||' .
|
|
||||||
'$device == 0x8814 ||' .
|
|
||||||
'$device == 0x8901)',
|
|
||||||
's3'],
|
|
||||||
|
|
||||||
# S3 virge
|
|
||||||
['$vendor == 0x5333 && ($device == 0x5631 ||' .
|
|
||||||
'$device == 0x883d ||' .
|
|
||||||
'$device == 0x8a01 ||' .
|
|
||||||
'$device == 0x8a10 ||' .
|
|
||||||
'$device == 0x8c01 ||' .
|
|
||||||
'$device == 0x8c03 ||' .
|
|
||||||
'$device == 0x8904 ||' .
|
|
||||||
'$device == 0x8a13)',
|
|
||||||
's3virge'],
|
|
||||||
|
|
||||||
# S3 Savage
|
|
||||||
['$vendor == 0x5333 && ($device >= 0x8a20 && $device <= 0x8a22 ||' .
|
|
||||||
'$device == 0x9102 ||' .
|
|
||||||
'$device >= 0x8c10 && $device <= 0x8c13 ||' .
|
|
||||||
'$device == 0x8a25 ||' .
|
|
||||||
'$device == 0x8a26 ||' .
|
|
||||||
'$device >= 0x8d01 && $device <= 0x8d04 ||' .
|
|
||||||
'$device >= 0x8c2a && $device <= 0x8c2f ||' .
|
|
||||||
'$device == 0x8c22 ||' .
|
|
||||||
'$device == 0x8c24 ||' .
|
|
||||||
'$device == 0x8c26)',
|
|
||||||
'savage'],
|
|
||||||
|
|
||||||
# SIS
|
|
||||||
['$vendor == 0x1039',
|
|
||||||
'sis'],
|
|
||||||
|
|
||||||
# SMI
|
|
||||||
['$vendor == 0x126f',
|
|
||||||
'siliconmotion'],
|
|
||||||
|
|
||||||
# 3Dfx
|
|
||||||
['$vendor == 0x121a',
|
|
||||||
'tdfx'],
|
|
||||||
|
|
||||||
# 3Dlabs
|
|
||||||
['$vendor == 0x3d3d',
|
|
||||||
'glint'],
|
|
||||||
|
|
||||||
# Trident
|
|
||||||
['$vendor == 0x1023',
|
|
||||||
'trident'],
|
|
||||||
|
|
||||||
# Tseng Labs
|
|
||||||
['$vendor == 0x100c',
|
|
||||||
'tseng'],
|
|
||||||
|
|
||||||
# VIA
|
|
||||||
['$vendor == 0x1106',
|
|
||||||
'via'],
|
|
||||||
|
|
||||||
# VMware
|
|
||||||
['$vendor == 0x15ad',
|
|
||||||
'vmware'],
|
|
||||||
|
|
||||||
);
|
|
||||||
|
|
||||||
# Reverse the search path list, since the later rules have higher priority
|
|
||||||
# than earlier ones (weighting being equal).
|
|
||||||
|
|
||||||
@searchPaths = reverse(@searchPaths);
|
|
||||||
|
|
||||||
if ($debug) {
|
|
||||||
$i = 0;
|
|
||||||
for $path (@searchPaths) {
|
|
||||||
print STDERR "$myname: Search path $i is: \"$path\".\n";
|
|
||||||
$i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
print STDERR "$myname: ", $#rules + 1, " built-in rule", plural($#rules + 1),
|
|
||||||
".\n";
|
|
||||||
|
|
||||||
for $path (@searchPaths) {
|
|
||||||
while (<$path/*.cfg>) {
|
|
||||||
@tmp = readRulesFile($_);
|
|
||||||
if (defined(@tmp[0])) {
|
|
||||||
push @rules, @tmp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($debug) {
|
|
||||||
$i = 0;
|
|
||||||
for $r (@rules) {
|
|
||||||
print STDERR "$myname: rule $i is: \'@$r\'.\n";
|
|
||||||
$i++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$i = 0;
|
|
||||||
$e = 0;
|
|
||||||
$weight = 0;
|
|
||||||
$w = 0;
|
|
||||||
for $r (@rules) {
|
|
||||||
($cond, $d, @o) = @$r;
|
|
||||||
$result = eval $cond;
|
|
||||||
if ($@) {
|
|
||||||
print STDERR "$myname: Error evaluating rule $i \'$cond\': $@";
|
|
||||||
$e++;
|
|
||||||
}
|
|
||||||
if ($debug) {
|
|
||||||
print STDERR "$myname: rule $i \'$cond\' evaluates to \'$result\'.\n";
|
|
||||||
}
|
|
||||||
if ($result && defined($d) && $weight >= $w) {
|
|
||||||
$driver = $d;
|
|
||||||
@opts = @o;
|
|
||||||
$w = $weight;
|
|
||||||
}
|
|
||||||
$i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
print STDERR "$myname: Evaluated $i rule", plural($i),
|
|
||||||
" with $e error", plural($e), ".\n";
|
|
||||||
|
|
||||||
print STDERR "$myname: Weight of result is $w.\n";
|
|
||||||
|
|
||||||
if ($debug) {
|
|
||||||
if (defined($driver)) {
|
|
||||||
print STDERR "$myname: Driver is \'$driver\'.\n";
|
|
||||||
} else {
|
|
||||||
print STDERR "$myname: No driver.\n";
|
|
||||||
}
|
|
||||||
if (defined(@opts)) {
|
|
||||||
print STDERR "$myname: options are:\n";
|
|
||||||
for $opt (@opts) {
|
|
||||||
print STDERR "\t$opt\n";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
print STDERR "$myname: No options.\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
print "$driver\n";
|
|
||||||
for $opt (@opts) {
|
|
||||||
print "$opt\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
exit 0;
|
|
||||||
|
|
||||||
# Subroutines.
|
|
||||||
|
|
||||||
sub readRulesFile {
|
|
||||||
my ($file) = @_;
|
|
||||||
my $signatureOK = 0;
|
|
||||||
my @r, @tmp;
|
|
||||||
my $line, $cont, $prevcont, $fileversion;
|
|
||||||
|
|
||||||
undef @tmp;
|
|
||||||
undef @r;
|
|
||||||
|
|
||||||
if (open(RF, "<$file")) {
|
|
||||||
$prevcont = 0;
|
|
||||||
while (<RF>) {
|
|
||||||
chop;
|
|
||||||
$line = $_;
|
|
||||||
next if ($line =~ /^#/);
|
|
||||||
next if ($line =~ /^\s*$/);
|
|
||||||
if (!$signatureOK) {
|
|
||||||
if ($line =~ /^$signature(.*)$/) {
|
|
||||||
$fileversion = $1;
|
|
||||||
$signatureOK = 1;
|
|
||||||
print STDERR
|
|
||||||
"$myname: rules file \'$file\' has version $fileversion.\n";
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!$signatureOK) {
|
|
||||||
print STDERR "$myname: file \'$file\' has bad signature.\n";
|
|
||||||
close(RF);
|
|
||||||
last;
|
|
||||||
}
|
|
||||||
$cont = 0;
|
|
||||||
if ($line =~ s/\\\s*$//) {
|
|
||||||
$cont = 1;
|
|
||||||
}
|
|
||||||
if (!$prevcont && $line =~ /^\S+/) {
|
|
||||||
if (defined(@tmp[0])) {
|
|
||||||
push(@r,[@tmp]);
|
|
||||||
}
|
|
||||||
undef @tmp;
|
|
||||||
}
|
|
||||||
if ($prevcont) {
|
|
||||||
push(@tmp, pop(@tmp) . $line);
|
|
||||||
} else {
|
|
||||||
push(@tmp, $line);
|
|
||||||
}
|
|
||||||
$prevcont = $cont;
|
|
||||||
}
|
|
||||||
if (defined(@tmp[0])) {
|
|
||||||
push(@r,[@tmp]);
|
|
||||||
}
|
|
||||||
if (!defined(@r[0])) {
|
|
||||||
print STDERR "$myname: no rules in file \'$file\'.\n";
|
|
||||||
} else {
|
|
||||||
print STDERR "$myname: ", $#r + 1,
|
|
||||||
" rule", plural($#r + 1),
|
|
||||||
" added from file \'$file\'.\n";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
print STDERR "$myname: cannot open file \'$file\'.\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
return @r;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub plural {
|
|
||||||
my ($count) = @_;
|
|
||||||
|
|
||||||
if ($count != 1) {
|
|
||||||
return "s";
|
|
||||||
} else {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,50 +0,0 @@
|
||||||
# $XdotOrg: xc/programs/Xserver/hw/xfree86/getconfig/xorg.cfg,v 1.2 2004/04/23 19:54:01 eich Exp $
|
|
||||||
|
|
||||||
# Base Xorg getconfig rules file.
|
|
||||||
|
|
||||||
#
|
|
||||||
# The line below is the getconfig rules file signature, and must be the
|
|
||||||
# first non-blank, non-comment line.
|
|
||||||
#
|
|
||||||
|
|
||||||
Xorg Foundation getconfig rules file. Version: 1.0
|
|
||||||
|
|
||||||
#
|
|
||||||
# Set the weight for the following rules. This should be set, otherwise
|
|
||||||
# the previously set weight will get used, and you have no idea of knowing
|
|
||||||
# what that might be.
|
|
||||||
#
|
|
||||||
|
|
||||||
$weight = 1000
|
|
||||||
|
|
||||||
#
|
|
||||||
# Rules. Rules consist of a condition (in perl code) followed by
|
|
||||||
# a driver name and optionally some additional strings. The start of a
|
|
||||||
# rule is indicated by a line with no leading white space. subsequent
|
|
||||||
# lines making up a rule must be indented. Logical lines may be split
|
|
||||||
# over multiple physical lines by using the usual continuation '\'.
|
|
||||||
#
|
|
||||||
# Rules that are not followed by a driver name may be used to do other
|
|
||||||
# things, like setting the weight as above.
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
|
||||||
# Pre-defined variables include:
|
|
||||||
#
|
|
||||||
# $vendor PCI vendor ID
|
|
||||||
# $device PCI device ID
|
|
||||||
# $revision PCI revision ID
|
|
||||||
# $subsys PCI subsystem ID
|
|
||||||
# $subsysVendor PCI subsystem vendor ID
|
|
||||||
# $class PCI class
|
|
||||||
# $XorgVersion Xorg version, as a 'v' string.
|
|
||||||
#
|
|
||||||
# The Xorg version information is also available as the following:
|
|
||||||
#
|
|
||||||
# $XorgVersionNumeric
|
|
||||||
# $XorgVersionMajor
|
|
||||||
# $XorgVersionMinor
|
|
||||||
# $XorgVersionPatch
|
|
||||||
# $XorgVersionSnap
|
|
||||||
#
|
|
||||||
|
|
|
@ -30,4 +30,5 @@ libloader_a_SOURCES = \
|
||||||
fontsym.c \
|
fontsym.c \
|
||||||
misym.c \
|
misym.c \
|
||||||
xf86sym.c \
|
xf86sym.c \
|
||||||
|
sym.h \
|
||||||
$(SPARC_SOURCES)
|
$(SPARC_SOURCES)
|
||||||
|
|
|
@ -92,7 +92,6 @@ extern unsigned long LoaderOptions;
|
||||||
|
|
||||||
/* Internal Functions */
|
/* Internal Functions */
|
||||||
void LoaderDuplicateSymbol(const char *, const int);
|
void LoaderDuplicateSymbol(const char *, const int);
|
||||||
int _LoaderHandleUnresolved(char *, char *);
|
|
||||||
char *_LoaderModuleToName(int);
|
char *_LoaderModuleToName(int);
|
||||||
int LoaderOpen(const char *, const char *, int, int *, int *, int *, int);
|
int LoaderOpen(const char *, const char *, int, int *, int *, int *, int);
|
||||||
int LoaderHandleOpen(int);
|
int LoaderHandleOpen(int);
|
||||||
|
|
|
@ -103,8 +103,6 @@ ModuleDescPtr AddSibling(ModuleDescPtr head, ModuleDescPtr new);
|
||||||
void LoaderSetPath(const char *path);
|
void LoaderSetPath(const char *path);
|
||||||
void LoaderSortExtensions(void);
|
void LoaderSortExtensions(void);
|
||||||
|
|
||||||
void LoaderShowStack(void);
|
|
||||||
void *LoaderSymbolHandle(const char *, int);
|
|
||||||
int LoaderUnload(int);
|
int LoaderUnload(int);
|
||||||
unsigned long LoaderGetModuleVersion(ModuleDescPtr mod);
|
unsigned long LoaderGetModuleVersion(ModuleDescPtr mod);
|
||||||
|
|
||||||
|
|
|
@ -357,6 +357,9 @@ _X_HIDDEN void *xfree86LookupTab[] = {
|
||||||
SYMFUNC(xf86AllocateEntityPrivateIndex)
|
SYMFUNC(xf86AllocateEntityPrivateIndex)
|
||||||
SYMFUNC(xf86GetEntityPrivate)
|
SYMFUNC(xf86GetEntityPrivate)
|
||||||
|
|
||||||
|
/* xf86cvt.c */
|
||||||
|
SYMFUNC(xf86CVTMode)
|
||||||
|
|
||||||
/* xf86Configure.c */
|
/* xf86Configure.c */
|
||||||
SYMFUNC(xf86AddDeviceToConfigure)
|
SYMFUNC(xf86AddDeviceToConfigure)
|
||||||
|
|
||||||
|
|
|
@ -31,9 +31,10 @@ bin_PROGRAMS = cvt
|
||||||
INCLUDES = $(XORG_INCS)
|
INCLUDES = $(XORG_INCS)
|
||||||
DUMMYLIB_SRCDIR = $(XFREE86_SRCDIR)/dummylib
|
DUMMYLIB_SRCDIR = $(XFREE86_SRCDIR)/dummylib
|
||||||
|
|
||||||
cvt_SOURCES = cvt.c
|
# gah
|
||||||
|
cvt_SOURCES = cvt.c $(top_srcdir)/hw/xfree86/common/xf86cvt.c
|
||||||
cvt_CFLAGS = $(XORG_CFLAGS)
|
cvt_CFLAGS = $(XORG_CFLAGS)
|
||||||
cvt_LDADD = ../../dummylib/libdummy-nonserver.a
|
cvt_LDADD = $(top_builddir)/hw/xfree86/dummylib/libdummy-nonserver.a
|
||||||
|
|
||||||
man1_MANS = cvt.man
|
man1_MANS = cvt.man
|
||||||
|
|
||||||
|
|
|
@ -25,269 +25,6 @@
|
||||||
|
|
||||||
#include "xf86.h"
|
#include "xf86.h"
|
||||||
|
|
||||||
/*
|
|
||||||
* Generate a CVT standard mode from HDisplay, VDisplay and VRefresh.
|
|
||||||
*
|
|
||||||
* These calculations are stolen from the CVT calculation spreadsheet written
|
|
||||||
* by Graham Loveridge. He seems to be claiming no copyright and there seems to
|
|
||||||
* be no license attached to this. He apparently just wants to see his name
|
|
||||||
* mentioned.
|
|
||||||
*
|
|
||||||
* This file can be found at http://www.vesa.org/Public/CVT/CVTd6r1.xls
|
|
||||||
*
|
|
||||||
* Comments and structure corresponds to the comments and structure of the xls.
|
|
||||||
* This should ease importing of future changes to the standard (not very
|
|
||||||
* likely though).
|
|
||||||
*
|
|
||||||
* About margins; i'm sure that they are to be the bit between HDisplay and
|
|
||||||
* HBlankStart, HBlankEnd and HTotal, VDisplay and VBlankStart, VBlankEnd and
|
|
||||||
* VTotal, where the overscan colour is shown. FB seems to call _all_ blanking
|
|
||||||
* outside sync "margin" for some reason. Since we prefer seeing proper
|
|
||||||
* blanking instead of the overscan colour, and since the Crtc* values will
|
|
||||||
* probably get altered after us, we will disable margins altogether. With
|
|
||||||
* these calculations, Margins will plainly expand H/VDisplay, and we don't
|
|
||||||
* want that. -- libv
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
static DisplayModePtr
|
|
||||||
xf86CVTMode(int HDisplay, int VDisplay, float VRefresh, Bool Reduced,
|
|
||||||
Bool Interlaced)
|
|
||||||
{
|
|
||||||
DisplayModeRec *Mode = xnfalloc(sizeof(DisplayModeRec));
|
|
||||||
|
|
||||||
/* 1) top/bottom margin size (% of height) - default: 1.8 */
|
|
||||||
#define CVT_MARGIN_PERCENTAGE 1.8
|
|
||||||
|
|
||||||
/* 2) character cell horizontal granularity (pixels) - default 8 */
|
|
||||||
#define CVT_H_GRANULARITY 8
|
|
||||||
|
|
||||||
/* 4) Minimum vertical porch (lines) - default 3 */
|
|
||||||
#define CVT_MIN_V_PORCH 3
|
|
||||||
|
|
||||||
/* 4) Minimum number of vertical back porch lines - default 6 */
|
|
||||||
#define CVT_MIN_V_BPORCH 6
|
|
||||||
|
|
||||||
/* Pixel Clock step (kHz) */
|
|
||||||
#define CVT_CLOCK_STEP 250
|
|
||||||
|
|
||||||
Bool Margins = FALSE;
|
|
||||||
float VFieldRate, HPeriod;
|
|
||||||
int HDisplayRnd, HMargin;
|
|
||||||
int VDisplayRnd, VMargin, VSync;
|
|
||||||
float Interlace; /* Please rename this */
|
|
||||||
|
|
||||||
memset(Mode, 0, sizeof(DisplayModeRec));
|
|
||||||
|
|
||||||
/* CVT default is 60.0Hz */
|
|
||||||
if (!VRefresh)
|
|
||||||
VRefresh = 60.0;
|
|
||||||
|
|
||||||
/* 1. Required field rate */
|
|
||||||
if (Interlaced)
|
|
||||||
VFieldRate = VRefresh * 2;
|
|
||||||
else
|
|
||||||
VFieldRate = VRefresh;
|
|
||||||
|
|
||||||
/* 2. Horizontal pixels */
|
|
||||||
HDisplayRnd = HDisplay - (HDisplay % CVT_H_GRANULARITY);
|
|
||||||
|
|
||||||
/* 3. Determine left and right borders */
|
|
||||||
if (Margins) {
|
|
||||||
/* right margin is actually exactly the same as left */
|
|
||||||
HMargin = (((float) HDisplayRnd) * CVT_MARGIN_PERCENTAGE / 100.0);
|
|
||||||
HMargin -= HMargin % CVT_H_GRANULARITY;
|
|
||||||
} else
|
|
||||||
HMargin = 0;
|
|
||||||
|
|
||||||
/* 4. Find total active pixels */
|
|
||||||
Mode->HDisplay = HDisplayRnd + 2*HMargin;
|
|
||||||
|
|
||||||
/* 5. Find number of lines per field */
|
|
||||||
if (Interlaced)
|
|
||||||
VDisplayRnd = VDisplay / 2;
|
|
||||||
else
|
|
||||||
VDisplayRnd = VDisplay;
|
|
||||||
|
|
||||||
/* 6. Find top and bottom margins */
|
|
||||||
/* nope. */
|
|
||||||
if (Margins)
|
|
||||||
/* top and bottom margins are equal again. */
|
|
||||||
VMargin = (((float) VDisplayRnd) * CVT_MARGIN_PERCENTAGE / 100.0);
|
|
||||||
else
|
|
||||||
VMargin = 0;
|
|
||||||
|
|
||||||
Mode->VDisplay = VDisplay + 2*VMargin;
|
|
||||||
|
|
||||||
/* 7. Interlace */
|
|
||||||
if (Interlaced)
|
|
||||||
Interlace = 0.5;
|
|
||||||
else
|
|
||||||
Interlace = 0.0;
|
|
||||||
|
|
||||||
/* Determine VSync Width from aspect ratio */
|
|
||||||
if (!(VDisplay % 3) && ((VDisplay * 4 / 3) == HDisplay))
|
|
||||||
VSync = 4;
|
|
||||||
else if (!(VDisplay % 9) && ((VDisplay * 16 / 9) == HDisplay))
|
|
||||||
VSync = 5;
|
|
||||||
else if (!(VDisplay % 10) && ((VDisplay * 16 / 10) == HDisplay))
|
|
||||||
VSync = 6;
|
|
||||||
else if (!(VDisplay % 4) && ((VDisplay * 5 / 4) == HDisplay))
|
|
||||||
VSync = 7;
|
|
||||||
else if (!(VDisplay % 9) && ((VDisplay * 15 / 9) == HDisplay))
|
|
||||||
VSync = 7;
|
|
||||||
else /* Custom */
|
|
||||||
VSync = 10;
|
|
||||||
|
|
||||||
if (!Reduced) { /* simplified GTF calculation */
|
|
||||||
|
|
||||||
/* 4) Minimum time of vertical sync + back porch interval (µs)
|
|
||||||
* default 550.0 */
|
|
||||||
#define CVT_MIN_VSYNC_BP 550.0
|
|
||||||
|
|
||||||
/* 3) Nominal HSync width (% of line period) - default 8 */
|
|
||||||
#define CVT_HSYNC_PERCENTAGE 8
|
|
||||||
|
|
||||||
float HBlankPercentage;
|
|
||||||
int VSyncAndBackPorch, VBackPorch;
|
|
||||||
int HBlank;
|
|
||||||
|
|
||||||
/* 8. Estimated Horizontal period */
|
|
||||||
HPeriod = ((float) (1000000.0 / VFieldRate - CVT_MIN_VSYNC_BP)) /
|
|
||||||
(VDisplayRnd + 2 * VMargin + CVT_MIN_V_PORCH + Interlace);
|
|
||||||
|
|
||||||
/* 9. Find number of lines in sync + backporch */
|
|
||||||
if (((int)(CVT_MIN_VSYNC_BP / HPeriod) + 1) < (VSync + CVT_MIN_V_PORCH))
|
|
||||||
VSyncAndBackPorch = VSync + CVT_MIN_V_PORCH;
|
|
||||||
else
|
|
||||||
VSyncAndBackPorch = (int)(CVT_MIN_VSYNC_BP / HPeriod) + 1;
|
|
||||||
|
|
||||||
/* 10. Find number of lines in back porch */
|
|
||||||
VBackPorch = VSyncAndBackPorch - VSync;
|
|
||||||
|
|
||||||
/* 11. Find total number of lines in vertical field */
|
|
||||||
Mode->VTotal = VDisplayRnd + 2 * VMargin + VSyncAndBackPorch + Interlace
|
|
||||||
+ CVT_MIN_V_PORCH;
|
|
||||||
|
|
||||||
/* 5) Definition of Horizontal blanking time limitation */
|
|
||||||
/* Gradient (%/kHz) - default 600 */
|
|
||||||
#define CVT_M_FACTOR 600
|
|
||||||
|
|
||||||
/* Offset (%) - default 40 */
|
|
||||||
#define CVT_C_FACTOR 40
|
|
||||||
|
|
||||||
/* Blanking time scaling factor - default 128 */
|
|
||||||
#define CVT_K_FACTOR 128
|
|
||||||
|
|
||||||
/* Scaling factor weighting - default 20 */
|
|
||||||
#define CVT_J_FACTOR 20
|
|
||||||
|
|
||||||
#define CVT_M_PRIME CVT_M_FACTOR * CVT_K_FACTOR / 256
|
|
||||||
#define CVT_C_PRIME (CVT_C_FACTOR - CVT_J_FACTOR) * CVT_K_FACTOR / 256 + \
|
|
||||||
CVT_J_FACTOR
|
|
||||||
|
|
||||||
/* 12. Find ideal blanking duty cycle from formula */
|
|
||||||
HBlankPercentage = CVT_C_PRIME - CVT_M_PRIME * HPeriod/1000.0;
|
|
||||||
|
|
||||||
/* 13. Blanking time */
|
|
||||||
if (HBlankPercentage < 20)
|
|
||||||
HBlankPercentage = 20;
|
|
||||||
|
|
||||||
HBlank = Mode->HDisplay * HBlankPercentage/(100.0 - HBlankPercentage);
|
|
||||||
HBlank -= HBlank % (2*CVT_H_GRANULARITY);
|
|
||||||
|
|
||||||
/* 14. Find total number of pixels in a line. */
|
|
||||||
Mode->HTotal = Mode->HDisplay + HBlank;
|
|
||||||
|
|
||||||
/* Fill in HSync values */
|
|
||||||
Mode->HSyncEnd = Mode->HDisplay + HBlank / 2;
|
|
||||||
|
|
||||||
Mode->HSyncStart = Mode->HSyncEnd -
|
|
||||||
(Mode->HTotal * CVT_HSYNC_PERCENTAGE) / 100;
|
|
||||||
Mode->HSyncStart += CVT_H_GRANULARITY -
|
|
||||||
Mode->HSyncStart % CVT_H_GRANULARITY;
|
|
||||||
|
|
||||||
/* Fill in VSync values */
|
|
||||||
Mode->VSyncStart = Mode->VDisplay + CVT_MIN_V_PORCH;
|
|
||||||
Mode->VSyncEnd = Mode->VSyncStart + VSync;
|
|
||||||
|
|
||||||
} else { /* Reduced blanking */
|
|
||||||
/* Minimum vertical blanking interval time (µs) - default 460 */
|
|
||||||
#define CVT_RB_MIN_VBLANK 460.0
|
|
||||||
|
|
||||||
/* Fixed number of clocks for horizontal sync */
|
|
||||||
#define CVT_RB_H_SYNC 32.0
|
|
||||||
|
|
||||||
/* Fixed number of clocks for horizontal blanking */
|
|
||||||
#define CVT_RB_H_BLANK 160.0
|
|
||||||
|
|
||||||
/* Fixed number of lines for vertical front porch - default 3 */
|
|
||||||
#define CVT_RB_VFPORCH 3
|
|
||||||
|
|
||||||
int VBILines;
|
|
||||||
|
|
||||||
/* 8. Estimate Horizontal period. */
|
|
||||||
HPeriod = ((float) (1000000.0 / VFieldRate - CVT_RB_MIN_VBLANK)) /
|
|
||||||
(VDisplayRnd + 2*VMargin);
|
|
||||||
|
|
||||||
/* 9. Find number of lines in vertical blanking */
|
|
||||||
VBILines = ((float) CVT_RB_MIN_VBLANK) / HPeriod + 1;
|
|
||||||
|
|
||||||
/* 10. Check if vertical blanking is sufficient */
|
|
||||||
if (VBILines < (CVT_RB_VFPORCH + VSync + CVT_MIN_V_BPORCH))
|
|
||||||
VBILines = CVT_RB_VFPORCH + VSync + CVT_MIN_V_BPORCH;
|
|
||||||
|
|
||||||
/* 11. Find total number of lines in vertical field */
|
|
||||||
Mode->VTotal = VDisplayRnd + 2 * VMargin + Interlace + VBILines;
|
|
||||||
|
|
||||||
/* 12. Find total number of pixels in a line */
|
|
||||||
Mode->HTotal = Mode->HDisplay + CVT_RB_H_BLANK;
|
|
||||||
|
|
||||||
/* Fill in HSync values */
|
|
||||||
Mode->HSyncEnd = Mode->HDisplay + CVT_RB_H_BLANK / 2;
|
|
||||||
Mode->HSyncStart = Mode->HSyncEnd - CVT_RB_H_SYNC;
|
|
||||||
|
|
||||||
/* Fill in VSync values */
|
|
||||||
Mode->VSyncStart = Mode->VDisplay + CVT_RB_VFPORCH;
|
|
||||||
Mode->VSyncEnd = Mode->VSyncStart + VSync;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 15/13. Find pixel clock frequency (kHz for xf86) */
|
|
||||||
Mode->Clock = Mode->HTotal * 1000.0 / HPeriod;
|
|
||||||
Mode->Clock -= Mode->Clock % CVT_CLOCK_STEP;
|
|
||||||
|
|
||||||
/* 16/14. Find actual Horizontal Frequency (kHz) */
|
|
||||||
Mode->HSync = ((float) Mode->Clock) / ((float) Mode->HTotal);
|
|
||||||
|
|
||||||
/* 17/15. Find actual Field rate */
|
|
||||||
Mode->VRefresh = (1000.0 * ((float) Mode->Clock)) /
|
|
||||||
((float) (Mode->HTotal * Mode->VTotal));
|
|
||||||
|
|
||||||
/* 18/16. Find actual vertical frame frequency */
|
|
||||||
/* ignore - just set the mode flag for interlaced */
|
|
||||||
if (Interlaced)
|
|
||||||
Mode->VTotal *= 2;
|
|
||||||
|
|
||||||
{
|
|
||||||
char Name[256];
|
|
||||||
Name[0] = 0;
|
|
||||||
|
|
||||||
snprintf(Name, 256, "%dx%d", HDisplay, VDisplay);
|
|
||||||
|
|
||||||
Mode->name = xnfalloc(strlen(Name) + 1);
|
|
||||||
memcpy(Mode->name, Name, strlen(Name) + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Reduced)
|
|
||||||
Mode->Flags |= V_PHSYNC | V_NVSYNC;
|
|
||||||
else
|
|
||||||
Mode->Flags |= V_NHSYNC | V_PVSYNC;
|
|
||||||
|
|
||||||
if (Interlaced)
|
|
||||||
Mode->Flags |= V_INTERLACE;
|
|
||||||
|
|
||||||
return Mode;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Quickly check wether this is a CVT standard mode.
|
* Quickly check wether this is a CVT standard mode.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -17,7 +17,6 @@ dist_xpc_DATA = \
|
||||||
LubalinGraph-Book.pmf \
|
LubalinGraph-Book.pmf \
|
||||||
LubalinGraph-DemiOblique.pmf \
|
LubalinGraph-DemiOblique.pmf \
|
||||||
LubalinGraph-Demi.pmf \
|
LubalinGraph-Demi.pmf \
|
||||||
NewCenturySchlbk-BoldItalic.pmf \
|
|
||||||
NewCenturySchlbk-Bold.pmf \
|
NewCenturySchlbk-Bold.pmf \
|
||||||
NewCenturySchlbk-Italic.pmf \
|
NewCenturySchlbk-Italic.pmf \
|
||||||
NewCenturySchlbk-Roman.pmf \
|
NewCenturySchlbk-Roman.pmf \
|
||||||
|
|
|
@ -30,8 +30,10 @@ DIX_SRCS = \
|
||||||
XKBFILE_SRCS = \
|
XKBFILE_SRCS = \
|
||||||
maprules.c \
|
maprules.c \
|
||||||
xkmread.c \
|
xkmread.c \
|
||||||
|
xkbtext.c \
|
||||||
xkbfmisc.c \
|
xkbfmisc.c \
|
||||||
xkberrs.c
|
xkberrs.c \
|
||||||
|
xkbout.c
|
||||||
|
|
||||||
X11_SRCS = \
|
X11_SRCS = \
|
||||||
XKBMisc.c \
|
XKBMisc.c \
|
||||||
|
|
431
xkb/xkbfmisc.c
431
xkb/xkbfmisc.c
|
@ -48,16 +48,185 @@
|
||||||
#include <X11/extensions/XKBgeom.h>
|
#include <X11/extensions/XKBgeom.h>
|
||||||
#include "xkb.h"
|
#include "xkb.h"
|
||||||
|
|
||||||
|
unsigned
|
||||||
|
_XkbKSCheckCase(KeySym ks)
|
||||||
|
{
|
||||||
|
unsigned set,rtrn;
|
||||||
|
|
||||||
|
set= (ks & (~0xff)) >> 8;
|
||||||
|
rtrn= 0;
|
||||||
|
switch (set) {
|
||||||
|
case 0: /* latin 1 */
|
||||||
|
if (((ks>=XK_A)&&(ks<=XK_Z))||
|
||||||
|
((ks>=XK_Agrave)&&(ks<=XK_THORN)&&(ks!=XK_multiply))) {
|
||||||
|
rtrn|= _XkbKSUpper;
|
||||||
|
}
|
||||||
|
if (((ks>=XK_a)&&(ks<=XK_z))||
|
||||||
|
((ks>=XK_agrave)&&(ks<=XK_ydiaeresis))) {
|
||||||
|
rtrn|= _XkbKSLower;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 1: /* latin 2 */
|
||||||
|
if (((ks>=XK_Aogonek)&&(ks<=XK_Zabovedot)&&(ks!=XK_breve))||
|
||||||
|
((ks>=XK_Racute)&&(ks<=XK_Tcedilla))) {
|
||||||
|
rtrn|= _XkbKSUpper;
|
||||||
|
}
|
||||||
|
if (((ks>=XK_aogonek)&&(ks<=XK_zabovedot)&&(ks!=XK_caron))||
|
||||||
|
((ks>=XK_racute)&&(ks<=XK_tcedilla))) {
|
||||||
|
rtrn|= _XkbKSLower;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2: /* latin 3 */
|
||||||
|
if (((ks>=XK_Hstroke)&&(ks<=XK_Jcircumflex))||
|
||||||
|
((ks>=XK_Cabovedot)&&(ks<=XK_Scircumflex))) {
|
||||||
|
rtrn|= _XkbKSUpper;
|
||||||
|
}
|
||||||
|
if (((ks>=XK_hstroke)&&(ks<=XK_jcircumflex))||
|
||||||
|
((ks>=XK_cabovedot)&&(ks<=XK_scircumflex))) {
|
||||||
|
rtrn|= _XkbKSLower;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 3: /* latin 4 */
|
||||||
|
if (((ks>=XK_Rcedilla)&&(ks<=XK_Tslash))||
|
||||||
|
(ks==XK_ENG)||
|
||||||
|
((ks>=XK_Amacron)&&(ks<=XK_Umacron))) {
|
||||||
|
rtrn|= _XkbKSUpper;
|
||||||
|
}
|
||||||
|
if (((ks>=XK_rcedilla)&&(ks<=XK_tslash))||
|
||||||
|
(ks==XK_eng)||
|
||||||
|
((ks>=XK_amacron)&&(ks<=XK_umacron))) {
|
||||||
|
rtrn|= _XkbKSLower;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 18: /* latin 8 */
|
||||||
|
if ((ks==XK_Babovedot)||
|
||||||
|
((ks>=XK_Dabovedot)&&(ks<=XK_Wacute))||
|
||||||
|
((ks>=XK_Ygrave)&&(ks<=XK_Fabovedot))||
|
||||||
|
(ks==XK_Mabovedot)||
|
||||||
|
(ks==XK_Pabovedot)||
|
||||||
|
(ks==XK_Sabovedot)||
|
||||||
|
(ks==XK_Wdiaeresis)||
|
||||||
|
((ks>=XK_Wcircumflex)&&(ks<=XK_Ycircumflex))) {
|
||||||
|
rtrn|= _XkbKSUpper;
|
||||||
|
}
|
||||||
|
if ((ks==XK_babovedot)||
|
||||||
|
(ks==XK_dabovedot)||
|
||||||
|
(ks==XK_fabovedot)||
|
||||||
|
(ks==XK_mabovedot)||
|
||||||
|
((ks>=XK_wgrave)&&(ks<=XK_wacute))||
|
||||||
|
(ks==XK_ygrave)||
|
||||||
|
((ks>=XK_wdiaeresis)&&(ks<=XK_ycircumflex))) {
|
||||||
|
rtrn|= _XkbKSLower;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 19: /* latin 9 */
|
||||||
|
if ((ks==XK_OE)||(ks==XK_Ydiaeresis)) {
|
||||||
|
rtrn|= _XkbKSUpper;
|
||||||
|
}
|
||||||
|
if (ks==XK_oe) {
|
||||||
|
rtrn|= _XkbKSLower;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return rtrn;
|
||||||
|
}
|
||||||
|
|
||||||
|
/***===================================================================***/
|
||||||
|
|
||||||
|
Bool
|
||||||
|
XkbLookupGroupAndLevel( XkbDescPtr xkb,
|
||||||
|
int key,
|
||||||
|
int * mods_inout,
|
||||||
|
int * grp_inout,
|
||||||
|
int * lvl_rtrn)
|
||||||
|
{
|
||||||
|
int nG,eG;
|
||||||
|
|
||||||
|
if ((!xkb)||(!XkbKeycodeInRange(xkb,key))||(!grp_inout))
|
||||||
|
return False;
|
||||||
|
|
||||||
|
nG= XkbKeyNumGroups(xkb,key);
|
||||||
|
eG= *grp_inout;
|
||||||
|
|
||||||
|
if ( nG==0 ) {
|
||||||
|
*grp_inout= 0;
|
||||||
|
if (lvl_rtrn!=NULL)
|
||||||
|
*lvl_rtrn= 0;
|
||||||
|
return False;
|
||||||
|
}
|
||||||
|
else if ( nG==1 ) {
|
||||||
|
eG= 0;
|
||||||
|
}
|
||||||
|
else if ( eG>=nG ) {
|
||||||
|
unsigned gI= XkbKeyGroupInfo(xkb,key);
|
||||||
|
switch (XkbOutOfRangeGroupAction(gI)) {
|
||||||
|
default:
|
||||||
|
eG %= nG;
|
||||||
|
break;
|
||||||
|
case XkbClampIntoRange:
|
||||||
|
eG = nG-1;
|
||||||
|
break;
|
||||||
|
case XkbRedirectIntoRange:
|
||||||
|
eG = XkbOutOfRangeGroupNumber(gI);
|
||||||
|
if (eG>=nG)
|
||||||
|
eG= 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*grp_inout= eG;
|
||||||
|
if (mods_inout!=NULL) {
|
||||||
|
XkbKeyTypePtr type;
|
||||||
|
int preserve;
|
||||||
|
|
||||||
|
type = XkbKeyKeyType(xkb,key,eG);
|
||||||
|
if (lvl_rtrn!=NULL)
|
||||||
|
*lvl_rtrn= 0;
|
||||||
|
preserve= 0;
|
||||||
|
if (type->map) { /* find the shift level */
|
||||||
|
register int i;
|
||||||
|
register XkbKTMapEntryPtr entry;
|
||||||
|
for (i=0,entry=type->map;i<type->map_count;i++,entry++) {
|
||||||
|
if ((entry->active)&&
|
||||||
|
(((*mods_inout)&type->mods.mask)==entry->mods.mask)){
|
||||||
|
if (lvl_rtrn!=NULL)
|
||||||
|
*lvl_rtrn= entry->level;
|
||||||
|
if (type->preserve)
|
||||||
|
preserve= type->preserve[i].mask;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
(*mods_inout)&= ~(type->mods.mask&(~preserve));
|
||||||
|
}
|
||||||
|
return True;
|
||||||
|
}
|
||||||
|
|
||||||
/***===================================================================***/
|
/***===================================================================***/
|
||||||
|
|
||||||
static Bool
|
static Bool
|
||||||
XkbWriteSectionFromName(FILE *file,char *sectionName,char *name)
|
XkbWriteSectionFromName(FILE *file,char *sectionName,char *name)
|
||||||
{
|
{
|
||||||
fprintf(file," xkb_%-20s { include \"%s\" };\n",sectionName,name);
|
fprintf(file," xkb_%-20s { include \"%s\" };\n",sectionName,name);
|
||||||
ErrorF(" xkb_%-20s { include \"%s\" };\n",sectionName,name);
|
|
||||||
return True;
|
return True;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define NEED_DESC(n) ((!n)||((n)[0]=='+')||((n)[0]=='|')||(strchr((n),'%')))
|
||||||
|
#define COMPLETE(n) ((n)&&(!NEED_DESC(n)))
|
||||||
|
|
||||||
|
/* ARGSUSED */
|
||||||
|
static void
|
||||||
|
_AddIncl( FILE * file,
|
||||||
|
XkbFileInfo * result,
|
||||||
|
Bool topLevel,
|
||||||
|
Bool showImplicit,
|
||||||
|
int index,
|
||||||
|
void * priv)
|
||||||
|
{
|
||||||
|
if ((priv)&&(strcmp((char *)priv,"%")!=0))
|
||||||
|
fprintf(file," include \"%s\"\n",(char *)priv);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Bool
|
Bool
|
||||||
XkbWriteXKBKeymapForNames( FILE * file,
|
XkbWriteXKBKeymapForNames( FILE * file,
|
||||||
XkbComponentNamesPtr names,
|
XkbComponentNamesPtr names,
|
||||||
|
@ -66,29 +235,229 @@ XkbWriteXKBKeymapForNames( FILE * file,
|
||||||
unsigned want,
|
unsigned want,
|
||||||
unsigned need)
|
unsigned need)
|
||||||
{
|
{
|
||||||
if (!names || (!names->keycodes && !names->types && !names->compat &&
|
char * name,*tmp;
|
||||||
!names->symbols && !names->geometry))
|
unsigned complete;
|
||||||
return False;
|
XkbNamesPtr old_names;
|
||||||
|
int multi_section;
|
||||||
|
unsigned wantNames,wantConfig,wantDflts;
|
||||||
|
XkbFileInfo finfo;
|
||||||
|
|
||||||
fprintf(file, "xkb_keymap \"%s\" {\n", names->keymap ? names->keymap :
|
bzero(&finfo,sizeof(XkbFileInfo));
|
||||||
"default");
|
|
||||||
|
|
||||||
if (names->keycodes)
|
complete= 0;
|
||||||
XkbWriteSectionFromName(file, "keycodes", names->keycodes);
|
if ((name=names->keymap)==NULL) name= "default";
|
||||||
if (names->types)
|
if (COMPLETE(names->keycodes)) complete|= XkmKeyNamesMask;
|
||||||
XkbWriteSectionFromName(file, "types", names->types);
|
if (COMPLETE(names->types)) complete|= XkmTypesMask;
|
||||||
if (names->compat)
|
if (COMPLETE(names->compat)) complete|= XkmCompatMapMask;
|
||||||
XkbWriteSectionFromName(file, "compatibility", names->compat);
|
if (COMPLETE(names->symbols)) complete|= XkmSymbolsMask;
|
||||||
if (names->symbols)
|
if (COMPLETE(names->geometry)) complete|= XkmGeometryMask;
|
||||||
XkbWriteSectionFromName(file, "symbols", names->symbols);
|
want|= (complete|need);
|
||||||
if (names->geometry)
|
if (want&XkmSymbolsMask)
|
||||||
XkbWriteSectionFromName(file, "geometry", names->geometry);
|
want|= XkmKeyNamesMask|XkmTypesMask;
|
||||||
|
|
||||||
fprintf(file,"};\n");
|
if (want==0)
|
||||||
|
return False;
|
||||||
|
|
||||||
|
if (xkb!=NULL) {
|
||||||
|
old_names= xkb->names;
|
||||||
|
finfo.type= 0;
|
||||||
|
finfo.defined= 0;
|
||||||
|
finfo.xkb= xkb;
|
||||||
|
if (!XkbDetermineFileType(&finfo,XkbXKBFile,NULL))
|
||||||
|
return False;
|
||||||
|
}
|
||||||
|
else old_names= NULL;
|
||||||
|
|
||||||
|
wantConfig= want&(~complete);
|
||||||
|
if (xkb!=NULL) {
|
||||||
|
if (wantConfig&XkmTypesMask) {
|
||||||
|
if ((!xkb->map) || (xkb->map->num_types<XkbNumRequiredTypes))
|
||||||
|
wantConfig&= ~XkmTypesMask;
|
||||||
|
}
|
||||||
|
if (wantConfig&XkmCompatMapMask) {
|
||||||
|
if ((!xkb->compat) || (xkb->compat->num_si<1))
|
||||||
|
wantConfig&= ~XkmCompatMapMask;
|
||||||
|
}
|
||||||
|
if (wantConfig&XkmSymbolsMask) {
|
||||||
|
if ((!xkb->map) || (!xkb->map->key_sym_map))
|
||||||
|
wantConfig&= ~XkmSymbolsMask;
|
||||||
|
}
|
||||||
|
if (wantConfig&XkmIndicatorsMask) {
|
||||||
|
if (!xkb->indicators)
|
||||||
|
wantConfig&= ~XkmIndicatorsMask;
|
||||||
|
}
|
||||||
|
if (wantConfig&XkmKeyNamesMask) {
|
||||||
|
if ((!xkb->names)||(!xkb->names->keys))
|
||||||
|
wantConfig&= ~XkmKeyNamesMask;
|
||||||
|
}
|
||||||
|
if ((wantConfig&XkmGeometryMask)&&(!xkb->geom))
|
||||||
|
wantConfig&= ~XkmGeometryMask;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
wantConfig= 0;
|
||||||
|
}
|
||||||
|
complete|= wantConfig;
|
||||||
|
|
||||||
|
wantDflts= 0;
|
||||||
|
wantNames= want&(~complete);
|
||||||
|
if ((xkb!=NULL) && (old_names!=NULL)) {
|
||||||
|
if (wantNames&XkmTypesMask) {
|
||||||
|
if (old_names->types!=None) {
|
||||||
|
tmp= XkbAtomGetString(dpy,old_names->types);
|
||||||
|
names->types= _XkbDupString(tmp);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
wantDflts|= XkmTypesMask;
|
||||||
|
}
|
||||||
|
complete|= XkmTypesMask;
|
||||||
|
}
|
||||||
|
if (wantNames&XkmCompatMapMask) {
|
||||||
|
if (old_names->compat!=None) {
|
||||||
|
tmp= XkbAtomGetString(dpy,old_names->compat);
|
||||||
|
names->compat= _XkbDupString(tmp);
|
||||||
|
}
|
||||||
|
else wantDflts|= XkmCompatMapMask;
|
||||||
|
complete|= XkmCompatMapMask;
|
||||||
|
}
|
||||||
|
if (wantNames&XkmSymbolsMask) {
|
||||||
|
if (old_names->symbols==None)
|
||||||
|
return False;
|
||||||
|
tmp= XkbAtomGetString(dpy,old_names->symbols);
|
||||||
|
names->symbols= _XkbDupString(tmp);
|
||||||
|
complete|= XkmSymbolsMask;
|
||||||
|
}
|
||||||
|
if (wantNames&XkmKeyNamesMask) {
|
||||||
|
if (old_names->keycodes!=None) {
|
||||||
|
tmp= XkbAtomGetString(dpy,old_names->keycodes);
|
||||||
|
names->keycodes= _XkbDupString(tmp);
|
||||||
|
}
|
||||||
|
else wantDflts|= XkmKeyNamesMask;
|
||||||
|
complete|= XkmKeyNamesMask;
|
||||||
|
}
|
||||||
|
if (wantNames&XkmGeometryMask) {
|
||||||
|
if (old_names->geometry==None)
|
||||||
|
return False;
|
||||||
|
tmp= XkbAtomGetString(dpy,old_names->geometry);
|
||||||
|
names->geometry= _XkbDupString(tmp);
|
||||||
|
complete|= XkmGeometryMask;
|
||||||
|
wantNames&= ~XkmGeometryMask;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (complete&XkmCompatMapMask)
|
||||||
|
complete|= XkmIndicatorsMask|XkmVirtualModsMask;
|
||||||
|
else if (complete&(XkmSymbolsMask|XkmTypesMask))
|
||||||
|
complete|= XkmVirtualModsMask;
|
||||||
|
if (need & (~complete))
|
||||||
|
return False;
|
||||||
|
if ((complete&XkmSymbolsMask)&&((XkmKeyNamesMask|XkmTypesMask)&(~complete)))
|
||||||
|
return False;
|
||||||
|
|
||||||
|
multi_section= 1;
|
||||||
|
if (((complete&XkmKeymapRequired)==XkmKeymapRequired)&&
|
||||||
|
((complete&(~XkmKeymapLegal))==0)) {
|
||||||
|
fprintf(file,"xkb_keymap \"%s\" {\n",name);
|
||||||
|
}
|
||||||
|
else if (((complete&XkmSemanticsRequired)==XkmSemanticsRequired)&&
|
||||||
|
((complete&(~XkmSemanticsLegal))==0)) {
|
||||||
|
fprintf(file,"xkb_semantics \"%s\" {\n",name);
|
||||||
|
}
|
||||||
|
else if (((complete&XkmLayoutRequired)==XkmLayoutRequired)&&
|
||||||
|
((complete&(~XkmLayoutLegal))==0)) {
|
||||||
|
fprintf(file,"xkb_layout \"%s\" {\n",name);
|
||||||
|
}
|
||||||
|
else if (XkmSingleSection(complete&(~XkmVirtualModsMask))) {
|
||||||
|
multi_section= 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return False;
|
||||||
|
}
|
||||||
|
|
||||||
|
wantNames= complete&(~(wantConfig|wantDflts));
|
||||||
|
name= names->keycodes;
|
||||||
|
if (wantConfig&XkmKeyNamesMask)
|
||||||
|
XkbWriteXKBKeycodes(file,&finfo,False,False,_AddIncl,name);
|
||||||
|
else if (wantDflts&XkmKeyNamesMask)
|
||||||
|
fprintf(stderr,"Default symbols not implemented yet!\n");
|
||||||
|
else if (wantNames&XkmKeyNamesMask)
|
||||||
|
XkbWriteSectionFromName(file,"keycodes",name);
|
||||||
|
|
||||||
|
name= names->types;
|
||||||
|
if (wantConfig&XkmTypesMask)
|
||||||
|
XkbWriteXKBKeyTypes(file,&finfo,False,False,_AddIncl,name);
|
||||||
|
else if (wantDflts&XkmTypesMask)
|
||||||
|
fprintf(stderr,"Default types not implemented yet!\n");
|
||||||
|
else if (wantNames&XkmTypesMask)
|
||||||
|
XkbWriteSectionFromName(file,"types",name);
|
||||||
|
|
||||||
|
name= names->compat;
|
||||||
|
if (wantConfig&XkmCompatMapMask)
|
||||||
|
XkbWriteXKBCompatMap(file,&finfo,False,False,_AddIncl,name);
|
||||||
|
else if (wantDflts&XkmCompatMapMask)
|
||||||
|
fprintf(stderr,"Default interps not implemented yet!\n");
|
||||||
|
else if (wantNames&XkmCompatMapMask)
|
||||||
|
XkbWriteSectionFromName(file,"compatibility",name);
|
||||||
|
|
||||||
|
name= names->symbols;
|
||||||
|
if (wantConfig&XkmSymbolsMask)
|
||||||
|
XkbWriteXKBSymbols(file,&finfo,False,False,_AddIncl,name);
|
||||||
|
else if (wantNames&XkmSymbolsMask)
|
||||||
|
XkbWriteSectionFromName(file,"symbols",name);
|
||||||
|
|
||||||
|
name= names->geometry;
|
||||||
|
if (wantConfig&XkmGeometryMask)
|
||||||
|
XkbWriteXKBGeometry(file,&finfo,False,False,_AddIncl,name);
|
||||||
|
else if (wantNames&XkmGeometryMask)
|
||||||
|
XkbWriteSectionFromName(file,"geometry",name);
|
||||||
|
|
||||||
|
if (multi_section)
|
||||||
|
fprintf(file,"};\n");
|
||||||
return True;
|
return True;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***====================================================================***/
|
||||||
|
|
||||||
|
/*ARGSUSED*/
|
||||||
|
Status
|
||||||
|
XkbMergeFile(XkbDescPtr xkb,XkbFileInfo finfo)
|
||||||
|
{
|
||||||
|
return BadImplementation;
|
||||||
|
}
|
||||||
|
|
||||||
|
/***====================================================================***/
|
||||||
|
|
||||||
|
int
|
||||||
|
XkbFindKeycodeByName(XkbDescPtr xkb,char *name,Bool use_aliases)
|
||||||
|
{
|
||||||
|
register int i;
|
||||||
|
|
||||||
|
if ((!xkb)||(!xkb->names)||(!xkb->names->keys))
|
||||||
|
return 0;
|
||||||
|
for (i=xkb->min_key_code;i<=xkb->max_key_code;i++) {
|
||||||
|
if (strncmp(xkb->names->keys[i].name,name,XkbKeyNameLength)==0)
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
if (!use_aliases)
|
||||||
|
return 0;
|
||||||
|
if (xkb->geom && xkb->geom->key_aliases) {
|
||||||
|
XkbKeyAliasPtr a;
|
||||||
|
a= xkb->geom->key_aliases;
|
||||||
|
for (i=0;i<xkb->geom->num_key_aliases;i++,a++) {
|
||||||
|
if (strncmp(name,a->alias,XkbKeyNameLength)==0)
|
||||||
|
return XkbFindKeycodeByName(xkb,a->real,False);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (xkb->names && xkb->names->key_aliases) {
|
||||||
|
XkbKeyAliasPtr a;
|
||||||
|
a= xkb->names->key_aliases;
|
||||||
|
for (i=0;i<xkb->names->num_key_aliases;i++,a++) {
|
||||||
|
if (strncmp(name,a->alias,XkbKeyNameLength)==0)
|
||||||
|
return XkbFindKeycodeByName(xkb,a->real,False);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
unsigned
|
unsigned
|
||||||
XkbConvertGetByNameComponents(Bool toXkm,unsigned orig)
|
XkbConvertGetByNameComponents(Bool toXkm,unsigned orig)
|
||||||
{
|
{
|
||||||
|
@ -115,6 +484,34 @@ unsigned rtrn;
|
||||||
return rtrn;
|
return rtrn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned
|
||||||
|
XkbConvertXkbComponents(Bool toXkm,unsigned orig)
|
||||||
|
{
|
||||||
|
unsigned rtrn;
|
||||||
|
|
||||||
|
rtrn= 0;
|
||||||
|
if (toXkm) {
|
||||||
|
if (orig&XkbClientMapMask) rtrn|= XkmTypesMask|XkmSymbolsMask;
|
||||||
|
if (orig&XkbServerMapMask) rtrn|= XkmTypesMask|XkmSymbolsMask;
|
||||||
|
if (orig&XkbCompatMapMask) rtrn|= XkmCompatMapMask;
|
||||||
|
if (orig&XkbIndicatorMapMask) rtrn|= XkmIndicatorsMask;
|
||||||
|
if (orig&XkbNamesMask) rtrn|= XkmKeyNamesMask;
|
||||||
|
if (orig&XkbGeometryMask) rtrn|= XkmGeometryMask;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (orig!=0) rtrn|= XkbNamesMask;
|
||||||
|
if (orig&XkmTypesMask) rtrn|= XkbClientMapMask;
|
||||||
|
if (orig&XkmCompatMapMask)
|
||||||
|
rtrn|= XkbCompatMapMask|XkbIndicatorMapMask;
|
||||||
|
if (orig&XkmSymbolsMask) rtrn|=XkbClientMapMask|XkbServerMapMask;
|
||||||
|
if (orig&XkmIndicatorsMask) rtrn|= XkbIndicatorMapMask;
|
||||||
|
if (orig&XkmKeyNamesMask)
|
||||||
|
rtrn|= XkbNamesMask|XkbIndicatorMapMask;
|
||||||
|
if (orig&XkmGeometryMask) rtrn|= XkbGeometryMask;
|
||||||
|
}
|
||||||
|
return rtrn;
|
||||||
|
}
|
||||||
|
|
||||||
Bool
|
Bool
|
||||||
XkbDetermineFileType(XkbFileInfoPtr finfo,int format,int *opts_missing)
|
XkbDetermineFileType(XkbFileInfoPtr finfo,int format,int *opts_missing)
|
||||||
{
|
{
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -167,89 +167,6 @@ int count,nRead=0;
|
||||||
return nRead;
|
return nRead;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned
|
|
||||||
_XkbKSCheckCase(KeySym ks)
|
|
||||||
{
|
|
||||||
unsigned set,rtrn;
|
|
||||||
|
|
||||||
set= (ks & (~0xff)) >> 8;
|
|
||||||
rtrn= 0;
|
|
||||||
switch (set) {
|
|
||||||
case 0: /* latin 1 */
|
|
||||||
if (((ks>=XK_A)&&(ks<=XK_Z))||
|
|
||||||
((ks>=XK_Agrave)&&(ks<=XK_THORN)&&(ks!=XK_multiply))) {
|
|
||||||
rtrn|= _XkbKSUpper;
|
|
||||||
}
|
|
||||||
if (((ks>=XK_a)&&(ks<=XK_z))||
|
|
||||||
((ks>=XK_agrave)&&(ks<=XK_ydiaeresis))) {
|
|
||||||
rtrn|= _XkbKSLower;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 1: /* latin 2 */
|
|
||||||
if (((ks>=XK_Aogonek)&&(ks<=XK_Zabovedot)&&(ks!=XK_breve))||
|
|
||||||
((ks>=XK_Racute)&&(ks<=XK_Tcedilla))) {
|
|
||||||
rtrn|= _XkbKSUpper;
|
|
||||||
}
|
|
||||||
if (((ks>=XK_aogonek)&&(ks<=XK_zabovedot)&&(ks!=XK_caron))||
|
|
||||||
((ks>=XK_racute)&&(ks<=XK_tcedilla))) {
|
|
||||||
rtrn|= _XkbKSLower;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 2: /* latin 3 */
|
|
||||||
if (((ks>=XK_Hstroke)&&(ks<=XK_Jcircumflex))||
|
|
||||||
((ks>=XK_Cabovedot)&&(ks<=XK_Scircumflex))) {
|
|
||||||
rtrn|= _XkbKSUpper;
|
|
||||||
}
|
|
||||||
if (((ks>=XK_hstroke)&&(ks<=XK_jcircumflex))||
|
|
||||||
((ks>=XK_cabovedot)&&(ks<=XK_scircumflex))) {
|
|
||||||
rtrn|= _XkbKSLower;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 3: /* latin 4 */
|
|
||||||
if (((ks>=XK_Rcedilla)&&(ks<=XK_Tslash))||
|
|
||||||
(ks==XK_ENG)||
|
|
||||||
((ks>=XK_Amacron)&&(ks<=XK_Umacron))) {
|
|
||||||
rtrn|= _XkbKSUpper;
|
|
||||||
}
|
|
||||||
if (((ks>=XK_rcedilla)&&(ks<=XK_tslash))||
|
|
||||||
(ks==XK_eng)||
|
|
||||||
((ks>=XK_amacron)&&(ks<=XK_umacron))) {
|
|
||||||
rtrn|= _XkbKSLower;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 18: /* latin 8 */
|
|
||||||
if ((ks==XK_Babovedot)||
|
|
||||||
((ks>=XK_Dabovedot)&&(ks<=XK_Wacute))||
|
|
||||||
((ks>=XK_Ygrave)&&(ks<=XK_Fabovedot))||
|
|
||||||
(ks==XK_Mabovedot)||
|
|
||||||
(ks==XK_Pabovedot)||
|
|
||||||
(ks==XK_Sabovedot)||
|
|
||||||
(ks==XK_Wdiaeresis)||
|
|
||||||
((ks>=XK_Wcircumflex)&&(ks<=XK_Ycircumflex))) {
|
|
||||||
rtrn|= _XkbKSUpper;
|
|
||||||
}
|
|
||||||
if ((ks==XK_babovedot)||
|
|
||||||
(ks==XK_dabovedot)||
|
|
||||||
(ks==XK_fabovedot)||
|
|
||||||
(ks==XK_mabovedot)||
|
|
||||||
((ks>=XK_wgrave)&&(ks<=XK_wacute))||
|
|
||||||
(ks==XK_ygrave)||
|
|
||||||
((ks>=XK_wdiaeresis)&&(ks<=XK_ycircumflex))) {
|
|
||||||
rtrn|= _XkbKSLower;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 19: /* latin 9 */
|
|
||||||
if ((ks==XK_OE)||(ks==XK_Ydiaeresis)) {
|
|
||||||
rtrn|= _XkbKSUpper;
|
|
||||||
}
|
|
||||||
if (ks==XK_oe) {
|
|
||||||
rtrn|= _XkbKSLower;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return rtrn;
|
|
||||||
}
|
|
||||||
|
|
||||||
/***====================================================================***/
|
/***====================================================================***/
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -1251,10 +1168,14 @@ int nRead;
|
||||||
*loaded_rtrn|= XkmGeometryMask;
|
*loaded_rtrn|= XkmGeometryMask;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
_XkbLibError(_XkbErrBadImplementation,
|
||||||
|
XkbConfigText(tmpTOC.type,XkbMessage),0);
|
||||||
nRead= 0;
|
nRead= 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (nRead!=tmpTOC.size) {
|
if (nRead!=tmpTOC.size) {
|
||||||
|
_XkbLibError(_XkbErrBadLength,XkbConfigText(tmpTOC.type,XkbMessage),
|
||||||
|
nRead-tmpTOC.size);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return (nRead>=0);
|
return (nRead>=0);
|
||||||
|
@ -1288,6 +1209,8 @@ char name[100];
|
||||||
return _XkbDupString(name);
|
return _XkbDupString(name);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
_XkbLibError(_XkbErrBadImplementation,
|
||||||
|
XkbConfigText(tmpTOC.type,XkbMessage),0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -1353,6 +1276,8 @@ unsigned which= need|want;
|
||||||
tmp= ReadXkmGeometry(file,result);
|
tmp= ReadXkmGeometry(file,result);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
_XkbLibError(_XkbErrBadImplementation,
|
||||||
|
XkbConfigText(tmpTOC.type,XkbMessage),0);
|
||||||
tmp= 0;
|
tmp= 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1362,7 +1287,8 @@ unsigned which= need|want;
|
||||||
result->defined|= (1<<toc[i].type);
|
result->defined|= (1<<toc[i].type);
|
||||||
}
|
}
|
||||||
if (nRead!=tmpTOC.size) {
|
if (nRead!=tmpTOC.size) {
|
||||||
return 0;
|
_XkbLibError(_XkbErrBadLength,XkbConfigText(tmpTOC.type,XkbMessage),
|
||||||
|
nRead-tmpTOC.size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return which;
|
return which;
|
||||||
|
|
Loading…
Reference in New Issue