--- xorg-server-1.3.0.0.dfsg.orig/composite/Makefile.in +++ xorg-server-1.3.0.0.dfsg/composite/Makefile.in @@ -114,6 +114,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -192,6 +194,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -304,6 +307,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/mi/Makefile.in +++ xorg-server-1.3.0.0.dfsg/mi/Makefile.in @@ -146,6 +146,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -224,6 +226,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -336,6 +339,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/xfixes/Makefile.in +++ xorg-server-1.3.0.0.dfsg/xfixes/Makefile.in @@ -114,6 +114,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -192,6 +194,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -304,6 +307,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/epson/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/epson/Makefile.in @@ -123,6 +123,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -201,6 +203,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -313,6 +316,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/epson/Xepson.man +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/epson/Xepson.man @@ -0,0 +1,26 @@ +.\" $XFree86: xc/programs/Xserver/hw/kdrive/epson/Xepson.man,v 1.5 2001/02/13 21:15:15 dawes Exp $ +.\" +.TH Xepson 1 __vendorversion__ +.SH NAME +Xepson \- Epson 13806 accelerated framebuffer device tiny X server +.SH SYNOPSIS +.B Xepson +.RI [ :display ] +.RI [ option ...] +.SH DESCRIPTION +.B Xepson +is a driver for the Epson LCD 13806 framebuffer. +.B Xepson +is heavily based upon the Kdrive Xfbdev driver, and behaves very similarly, except for accelerated operations targetted at the Epson chip. +.SH OPTIONS +.B Xepson +accepts the common options of the Xkdrive family of servers. Please +see Xkdrive(1). +.SH KEYBOARD +To be written. +.SH SEE ALSO +X(__miscmansuffix__), Xserver(1), Xkdrive(1), xdm(1), xinit(1). +.SH AUTHORS +The +.B Xepson +server was written by Costas Stylianou based on the Xfbdev sources with some contributions from Phil Blundell & Peter Naulls. --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/sis300/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/sis300/Makefile.in @@ -129,6 +129,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -207,6 +209,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -319,6 +322,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/sdl/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/sdl/Makefile.in @@ -117,6 +117,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -195,6 +197,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -307,6 +310,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/via/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/via/Makefile.in @@ -124,6 +124,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -202,6 +204,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -314,6 +317,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/i810/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/i810/Makefile.in @@ -124,6 +124,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -202,6 +204,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -314,6 +317,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/ati/r128_sarea.h +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/ati/r128_sarea.h @@ -0,0 +1,185 @@ +/* + * Copyright 1999, 2000 ATI Technologies Inc., Markham, Ontario, + * Precision Insight, Inc., Cedar Park, Texas, and + * VA Linux Systems Inc., Fremont, California. + * + * 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 on 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 (including the + * next paragraph) 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 + * NON-INFRINGEMENT. IN NO EVENT SHALL ATI, PRECISION INSIGHT, VA LINUX + * SYSTEMS AND/OR THEIR SUPPLIERS 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. + */ + +/* + * Authors: + * Kevin E. Martin + * Gareth Hughes + * + */ + +#ifndef _R128_SAREA_H_ +#define _R128_SAREA_H_ + +/* WARNING: If you change any of these defines, make sure to change the + * defines in the kernel file (r128_drm.h) + */ +#ifndef __R128_SAREA_DEFINES__ +#define __R128_SAREA_DEFINES__ + +/* What needs to be changed for the current vertex buffer? + */ +#define R128_UPLOAD_CONTEXT 0x001 +#define R128_UPLOAD_SETUP 0x002 +#define R128_UPLOAD_TEX0 0x004 +#define R128_UPLOAD_TEX1 0x008 +#define R128_UPLOAD_TEX0IMAGES 0x010 +#define R128_UPLOAD_TEX1IMAGES 0x020 +#define R128_UPLOAD_CORE 0x040 +#define R128_UPLOAD_MASKS 0x080 +#define R128_UPLOAD_WINDOW 0x100 +#define R128_UPLOAD_CLIPRECTS 0x200 /* handled client-side */ +#define R128_REQUIRE_QUIESCENCE 0x400 +#define R128_UPLOAD_ALL 0x7ff + +#define R128_FRONT 0x1 +#define R128_BACK 0x2 +#define R128_DEPTH 0x4 + +/* Primitive types + */ +#define R128_POINTS 0x1 +#define R128_LINES 0x2 +#define R128_LINE_STRIP 0x3 +#define R128_TRIANGLES 0x4 +#define R128_TRIANGLE_FAN 0x5 +#define R128_TRIANGLE_STRIP 0x6 + +/* Vertex/indirect buffer size + */ +#define R128_BUFFER_SIZE 16384 + +/* Byte offsets for indirect buffer data + */ +#define R128_INDEX_PRIM_OFFSET 20 +#define R128_HOSTDATA_BLIT_OFFSET 32 + +/* Keep these small for testing + */ +#define R128_NR_SAREA_CLIPRECTS 12 + +#define R128_NR_CONTEXT_REGS 12 + +#define R128_MAX_TEXTURE_LEVELS 11 +#define R128_MAX_TEXTURE_UNITS 2 + +#endif /* __R128_SAREA_DEFINES__ */ + +typedef struct { + /* Context state - can be written in one large chunk */ + unsigned int dst_pitch_offset_c; + unsigned int dp_gui_master_cntl_c; + unsigned int sc_top_left_c; + unsigned int sc_bottom_right_c; + unsigned int z_offset_c; + unsigned int z_pitch_c; + unsigned int z_sten_cntl_c; + unsigned int tex_cntl_c; + unsigned int misc_3d_state_cntl_reg; + unsigned int texture_clr_cmp_clr_c; + unsigned int texture_clr_cmp_msk_c; + unsigned int fog_color_c; + + /* Texture state */ + unsigned int tex_size_pitch_c; + unsigned int constant_color_c; + + /* Setup state */ + unsigned int pm4_vc_fpu_setup; + unsigned int setup_cntl; + + /* Mask state */ + unsigned int dp_write_mask; + unsigned int sten_ref_mask_c; + unsigned int plane_3d_mask_c; + + /* Window state */ + unsigned int window_xy_offset; + + /* Core state */ + unsigned int scale_3d_cntl; +} r128_context_regs_t; + +/* Setup registers for each texture unit + */ +typedef struct { + unsigned int tex_cntl; + unsigned int tex_combine_cntl; + unsigned int tex_size_pitch; + unsigned int tex_offset[R128_MAX_TEXTURE_LEVELS]; + unsigned int tex_border_color; +} r128_texture_regs_t; + +typedef struct { + /* The channel for communication of state information to the kernel + * on firing a vertex buffer. + */ + r128_context_regs_t ContextState; + r128_texture_regs_t TexState[R128_MAX_TEXTURE_UNITS]; + unsigned int dirty; + unsigned int vertsize; + unsigned int vc_format; + +#ifdef XF86DRI + /* The current cliprects, or a subset thereof. + */ + XF86DRIClipRectRec boxes[R128_NR_SAREA_CLIPRECTS]; + unsigned int nbox; +#endif + + /* Counters for throttling of rendering clients. + */ + unsigned int last_frame; + unsigned int last_dispatch; + + /* Maintain an LRU of contiguous regions of texture space. If you + * think you own a region of texture memory, and it has an age + * different to the one you set, then you are mistaken and it has + * been stolen by another client. If global texAge hasn't changed, + * there is no need to walk the list. + * + * These regions can be used as a proxy for the fine-grained texture + * information of other clients - by maintaining them in the same + * lru which is used to age their own textures, clients have an + * approximate lru for the whole of global texture space, and can + * make informed decisions as to which areas to kick out. There is + * no need to choose whether to kick out your own texture or someone + * else's - simply eject them all in LRU order. + */ + /* Last elt is sentinal */ + drmTextureRegion texList[ATI_NR_TEX_HEAPS][ATI_NR_TEX_REGIONS+1]; + /* last time texture was uploaded */ + unsigned int texAge[ATI_NR_TEX_HEAPS]; + + int ctxOwner; /* last context to upload state */ + int pfAllowPageFlip; /* set by the 2d driver, read by the client */ + int pfCurrentPage; /* set by kernel, read by others */ +} R128SAREAPriv, *R128SAREAPrivPtr; + +#endif --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/ati/ati_dripriv.h +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/ati/ati_dripriv.h @@ -0,0 +1,57 @@ +/* + * Copyright 1999, 2000 ATI Technologies Inc., Markham, Ontario, + * Precision Insight, Inc., Cedar Park, Texas, and + * VA Linux Systems Inc., Fremont, California. + * + * 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 on 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 (including the + * next paragraph) 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 + * NON-INFRINGEMENT. IN NO EVENT SHALL ATI, PRECISION INSIGHT, VA LINUX + * SYSTEMS AND/OR THEIR SUPPLIERS 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. + */ + +/* + * Authors: + * Rickard E. Faith + * Kevin E. Martin + * + */ + +#ifndef _ATI_DRIPRIV_H_ +#define _ATI_DRIPRIV_H_ + +#ifdef GLXEXT +#include "GL/glxint.h" + +extern void GlxSetVisualConfigs(int nconfigs, __GLXvisualConfig *configs, + void **configprivs); +#endif + +typedef struct { + /* Nothing here yet */ + int dummy; +} ATIConfigPrivRec, *ATIConfigPrivPtr; + +typedef struct { + /* Nothing here yet */ + int dummy; +} ATIDRIContextRec, *ATIDRIContextPtr; + +#endif --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/ati/r128_blendtmp.h +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/ati/r128_blendtmp.h @@ -0,0 +1,137 @@ +/* + * $Id$ + * + * Copyright © 2003 Eric Anholt, Anders Carlsson + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Eric Anholt not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Eric Anholt makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * ERIC ANHOLT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL ERIC ANHOLT BE LIABLE FOR 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. + */ +/* $Header$ */ + +#ifdef USE_DMA +#define TAG(x) x##DMA +#define LOCALS RING_LOCALS; \ + (void)atic +#define BEGIN(x) BEGIN_RING(x * 2) +#define OUT_REG(reg, val) OUT_RING_REG(reg, val) +#define END() ADVANCE_RING() +#else +#define TAG(x) x##MMIO +#define LOCALS char *mmio = atic->reg_base +#define BEGIN(x) ATIWaitAvailMMIO(x) +#define OUT_REG(reg, val) MMIO_OUT32(mmio, (reg), (val)) +#define END() +#endif + +static Bool +TAG(R128PrepareBlend)(int op, PicturePtr pSrcPicture, PicturePtr pDstPicture, + PixmapPtr pSrc, PixmapPtr pDst) +{ + KdScreenPriv(pDst->drawable.pScreen); + ATIScreenInfo(pScreenPriv); + ATICardInfo(pScreenPriv); + CARD32 dstDatatype, srcDatatype; + LOCALS; + + accel_atis = atis; + + if (!TAG(ATISetup)(pDst, pSrc)) + return FALSE; + + src_bpp = pSrc->drawable.bitsPerPixel; + is_repeat = pSrcPicture->repeat; + + if (op >= sizeof(R128BlendOp)/sizeof(R128BlendOp[0])) + ATI_FALLBACK(("Unsupported op 0x%x\n", op)); + if (pSrcPicture->repeat && (pSrc->drawable.width != 1 || + pSrc->drawable.height != 1)) + ATI_FALLBACK(("repeat unsupported\n")); + if (pSrcPicture->transform != NULL) + ATI_FALLBACK(("transform unsupported\n")); + if (!R128GetDatatypePict(pDstPicture->format, &dstDatatype)) + ATI_FALLBACK(("Unsupported dest format 0x%x\n", + pDstPicture->format)); + if (!R128GetDatatypePict(pSrcPicture->format, &srcDatatype)) + ATI_FALLBACK(("Unsupported src format 0x%x\n", + pSrcPicture->format)); + + BEGIN(11); + OUT_REG(RADEON_REG_DP_GUI_MASTER_CNTL, + (dstDatatype << 8) | + RADEON_GMC_SRC_DATATYPE_COLOR | + RADEON_GMC_DST_PITCH_OFFSET_CNTL | + RADEON_GMC_CLR_CMP_CNTL_DIS | + RADEON_GMC_AUX_CLIP_DIS | + (ATIBltRop[3] << 16) | + RADEON_GMC_3D_FCN_EN); + OUT_REG(R128_REG_TEX_CNTL_C, R128_TEX_ALPHA_EN | R128_TEX_CACHE_FLUSH); + OUT_REG(R128_REG_PRIM_TEXTURE_COMBINE_CNTL_C, 0); + OUT_REG(R128_REG_SCALE_3D_CNTL, + R128_SCALE_3D_SCALE | + R128BlendOp[op] | + R128_TEX_MAP_ALPHA_IN_TEXTURE); + OUT_REG(R128_REG_SCALE_3D_DATATYPE, srcDatatype); + OUT_REG(R128_REG_SCALE_PITCH, src_pitch / src_bpp); + /* 4.16 fixed point scaling factor? */ + if (is_repeat) { + OUT_REG(R128_REG_SCALE_X_INC, 0); + OUT_REG(R128_REG_SCALE_Y_INC, 0); + } else { + OUT_REG(R128_REG_SCALE_X_INC, 65536); + OUT_REG(R128_REG_SCALE_Y_INC, 65536); + } + OUT_REG(R128_REG_SCALE_HACC, 0x00000000); + OUT_REG(R128_REG_SCALE_VACC, 0x00000000); + OUT_REG(RADEON_REG_DP_CNTL, + RADEON_DST_X_LEFT_TO_RIGHT | RADEON_DST_Y_TOP_TO_BOTTOM ); + END(); + + return TRUE; +} + +static void +TAG(R128Blend)(int srcX, int srcY, int dstX, int dstY, int width, int height) +{ + ATIScreenInfo *atis = accel_atis; + ATICardInfo *atic = atis->atic; + LOCALS; + + if (is_repeat) { + srcX = 0; + srcY = 0; + } + + BEGIN(4); + OUT_REG(R128_REG_SCALE_OFFSET_0, src_offset + srcY * src_pitch + srcX * + (src_bpp >> 3)); + OUT_REG(R128_REG_SCALE_SRC_HEIGHT_WIDTH, (height << 16) | width); + OUT_REG(R128_REG_SCALE_DST_X_Y, (dstX << 16) | dstY); + OUT_REG(R128_REG_SCALE_DST_HEIGHT_WIDTH, (height << 16) | width); + END(); +} + +static void +TAG(R128DoneBlend)(void) +{ +} + +#undef TAG +#undef LOCALS +#undef BEGIN +#undef OUT_REG +#undef END --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/ati/ati_sarea.h +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/ati/ati_sarea.h @@ -0,0 +1,42 @@ + +/* + * $Id$ + * + * Copyright © 2003 Eric Anholt + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Eric Anholt not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Eric Anholt makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * ERIC ANHOLT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL ERIC ANHOLT BE LIABLE FOR 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. + */ +/* $Header$ */ + +#ifndef _ATI_SAREA_H_ +#define _ATI_SAREA_H_ + +/* There are 2 heaps (local/AGP). Each region within a heap is a + * minimum of 64k, and there are at most 64 of them per heap. + */ +#define ATI_CARD_HEAP 0 +#define ATI_GART_HEAP 1 +#define ATI_NR_TEX_HEAPS 2 +#define ATI_NR_TEX_REGIONS 64 +#define ATI_LOG_TEX_GRANULARITY 16 + +#include "r128_sarea.h" +#include "radeon_sarea.h" + +#endif /* _ATI_SAREA_H_ */ --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/ati/r128_common.h +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/ati/r128_common.h @@ -0,0 +1,170 @@ +/* r128_common.h -- common header definitions for R128 2D/3D/DRM suite + * Created: Sun Apr 9 18:16:28 2000 by kevin@precisioninsight.com + * + * Copyright 1999, 2000 Precision Insight, Inc., Cedar Park, Texas. + * Copyright 2002 Tungsten Graphics, Inc., Cedar Park, Texas. + * 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 (including the next + * paragraph) 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 + * PRECISION INSIGHT AND/OR ITS SUPPLIERS 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. + * + * Author: + * Gareth Hughes + * Kevin E. Martin + * + * Converted to common header format: + * Jens Owen + * + * + */ + +#ifndef _R128_COMMON_H_ +#define _R128_COMMON_H_ + +#include "X11/Xmd.h" + +/* + * WARNING: If you change any of these defines, make sure to change + * the kernel include file as well (r128_drm.h) + */ + +/* Driver specific DRM command indices + * NOTE: these are not OS specific, but they are driver specific + */ +#define DRM_R128_INIT 0x00 +#define DRM_R128_CCE_START 0x01 +#define DRM_R128_CCE_STOP 0x02 +#define DRM_R128_CCE_RESET 0x03 +#define DRM_R128_CCE_IDLE 0x04 +#define DRM_R128_UNDEFINED1 0x05 +#define DRM_R128_RESET 0x06 +#define DRM_R128_SWAP 0x07 +#define DRM_R128_CLEAR 0x08 +#define DRM_R128_VERTEX 0x09 +#define DRM_R128_INDICES 0x0a +#define DRM_R128_BLIT 0x0b +#define DRM_R128_DEPTH 0x0c +#define DRM_R128_STIPPLE 0x0d +#define DRM_R128_UNDEFINED2 0x0e +#define DRM_R128_INDIRECT 0x0f +#define DRM_R128_FULLSCREEN 0x10 +#define DRM_R128_CLEAR2 0x11 +#define DRM_R128_GETPARAM 0x12 +#define DRM_R128_FLIP 0x13 + +#define DRM_R128_FRONT_BUFFER 0x1 +#define DRM_R128_BACK_BUFFER 0x2 +#define DRM_R128_DEPTH_BUFFER 0x4 + +typedef struct { + enum { + DRM_R128_INIT_CCE = 0x01, + DRM_R128_CLEANUP_CCE = 0x02 + } func; + unsigned long sarea_priv_offset; + int is_pci; + int cce_mode; + int cce_secure; /* FIXME: Deprecated, we should remove this */ + int ring_size; + int usec_timeout; + + unsigned int fb_bpp; + unsigned int front_offset, front_pitch; + unsigned int back_offset, back_pitch; + unsigned int depth_bpp; + unsigned int depth_offset, depth_pitch; + unsigned int span_offset; + + unsigned long fb_offset; + unsigned long mmio_offset; + unsigned long ring_offset; + unsigned long ring_rptr_offset; + unsigned long buffers_offset; + unsigned long agp_textures_offset; +} drmR128Init; + +typedef struct { + int flush; + int idle; +} drmR128CCEStop; + +typedef struct { + int idx; + int start; + int end; + int discard; +} drmR128Indirect; + +typedef struct { + int idx; + int pitch; + int offset; + int format; + unsigned short x, y; + unsigned short width, height; +} drmR128Blit; + +typedef struct { + enum { + DRM_R128_WRITE_SPAN = 0x01, + DRM_R128_WRITE_PIXELS = 0x02, + DRM_R128_READ_SPAN = 0x03, + DRM_R128_READ_PIXELS = 0x04 + } func; + int n; + int *x; + int *y; + unsigned int *buffer; + unsigned char *mask; +} drmR128Depth; + +typedef struct { + int prim; + int idx; /* Index of vertex buffer */ + int count; /* Number of vertices in buffer */ + int discard; /* Client finished with buffer? */ +} drmR128Vertex; + +typedef struct { + unsigned int *mask; +} drmR128Stipple; + +typedef struct { + unsigned int flags; + unsigned int clear_color; + unsigned int clear_depth; + unsigned int color_mask; + unsigned int depth_mask; +} drmR128Clear; + +typedef struct { + enum { + DRM_R128_INIT_FULLSCREEN = 0x01, + DRM_R128_CLEANUP_FULLSCREEN = 0x02 + } func; +} drmR128Fullscreen; + +typedef struct drm_r128_getparam { + int param; + int *value; +} drmR128GetParam; + +#define R128_PARAM_IRQ_NR 1 + +#endif --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/ati/radeon_common.h +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/ati/radeon_common.h @@ -0,0 +1,460 @@ +/* radeon_common.h -- common header definitions for Radeon 2D/3D/DRM suite + * + * Copyright 2000 VA Linux Systems, Inc., Fremont, California. + * Copyright 2002 Tungsten Graphics, Inc., Cedar Park, Texas. + * 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 (including the next + * paragraph) 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 + * PRECISION INSIGHT AND/OR ITS SUPPLIERS 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. + * + * Author: + * Gareth Hughes + * Kevin E. Martin + * Keith Whitwell + * + * Converted to common header format: + * Jens Owen + * + * + */ + +#ifndef _RADEON_COMMON_H_ +#define _RADEON_COMMON_H_ + +#include + +/* WARNING: If you change any of these defines, make sure to change + * the kernel include file as well (radeon_drm.h) + */ + +/* Driver specific DRM command indices + * NOTE: these are not OS specific, but they are driver specific + */ +#define DRM_RADEON_CP_INIT 0x00 +#define DRM_RADEON_CP_START 0x01 +#define DRM_RADEON_CP_STOP 0x02 +#define DRM_RADEON_CP_RESET 0x03 +#define DRM_RADEON_CP_IDLE 0x04 +#define DRM_RADEON_RESET 0x05 +#define DRM_RADEON_FULLSCREEN 0x06 +#define DRM_RADEON_SWAP 0x07 +#define DRM_RADEON_CLEAR 0x08 +#define DRM_RADEON_VERTEX 0x09 +#define DRM_RADEON_INDICES 0x0a +#define DRM_RADEON_STIPPLE 0x0c +#define DRM_RADEON_INDIRECT 0x0d +#define DRM_RADEON_TEXTURE 0x0e +#define DRM_RADEON_VERTEX2 0x0f +#define DRM_RADEON_CMDBUF 0x10 +#define DRM_RADEON_GETPARAM 0x11 +#define DRM_RADEON_FLIP 0x12 +#define DRM_RADEON_ALLOC 0x13 +#define DRM_RADEON_FREE 0x14 +#define DRM_RADEON_INIT_HEAP 0x15 +#define DRM_RADEON_IRQ_EMIT 0x16 +#define DRM_RADEON_IRQ_WAIT 0x17 +#define DRM_RADEON_CP_RESUME 0x18 +#define DRM_RADEON_SETPARAM 0x19 +#define DRM_RADEON_MAX_DRM_COMMAND_INDEX 0x39 + + +#define RADEON_FRONT 0x1 +#define RADEON_BACK 0x2 +#define RADEON_DEPTH 0x4 +#define RADEON_STENCIL 0x8 + +#define RADEON_CLEAR_X1 0 +#define RADEON_CLEAR_Y1 1 +#define RADEON_CLEAR_X2 2 +#define RADEON_CLEAR_Y2 3 +#define RADEON_CLEAR_DEPTH 4 + + +typedef struct { + enum { + DRM_RADEON_INIT_CP = 0x01, + DRM_RADEON_CLEANUP_CP = 0x02, + DRM_RADEON_INIT_R200_CP = 0x03 + } func; + unsigned long sarea_priv_offset; + int is_pci; + int cp_mode; + int gart_size; + int ring_size; + int usec_timeout; + + unsigned int fb_bpp; + unsigned int front_offset, front_pitch; + unsigned int back_offset, back_pitch; + unsigned int depth_bpp; + unsigned int depth_offset, depth_pitch; + + unsigned long fb_offset; + unsigned long mmio_offset; + unsigned long ring_offset; + unsigned long ring_rptr_offset; + unsigned long buffers_offset; + unsigned long gart_textures_offset; +} drmRadeonInit; + +typedef struct { + int flush; + int idle; +} drmRadeonCPStop; + +typedef struct { + int idx; + int start; + int end; + int discard; +} drmRadeonIndirect; + +typedef union drmRadeonClearR { + float f[5]; + unsigned int ui[5]; +} drmRadeonClearRect; + +typedef struct drmRadeonClearT { + unsigned int flags; + unsigned int clear_color; + unsigned int clear_depth; + unsigned int color_mask; + unsigned int depth_mask; /* misnamed field: should be stencil */ + drmRadeonClearRect *depth_boxes; +} drmRadeonClearType; + +typedef struct drmRadeonFullscreenT { + enum { + RADEON_INIT_FULLSCREEN = 0x01, + RADEON_CLEANUP_FULLSCREEN = 0x02 + } func; +} drmRadeonFullscreenType; + +typedef struct { + unsigned int *mask; +} drmRadeonStipple; + +typedef struct { + unsigned int x; + unsigned int y; + unsigned int width; + unsigned int height; + const void *data; +} drmRadeonTexImage; + +typedef struct { + unsigned int offset; + int pitch; + int format; + int width; /* Texture image coordinates */ + int height; + drmRadeonTexImage *image; +} drmRadeonTexture; + + +#define RADEON_MAX_TEXTURE_UNITS 3 + +/* Layout matches drm_radeon_state_t in linux drm_radeon.h. + */ +typedef struct { + struct { + unsigned int pp_misc; /* 0x1c14 */ + unsigned int pp_fog_color; + unsigned int re_solid_color; + unsigned int rb3d_blendcntl; + unsigned int rb3d_depthoffset; + unsigned int rb3d_depthpitch; + unsigned int rb3d_zstencilcntl; + unsigned int pp_cntl; /* 0x1c38 */ + unsigned int rb3d_cntl; + unsigned int rb3d_coloroffset; + unsigned int re_width_height; + unsigned int rb3d_colorpitch; + } context; + struct { + unsigned int se_cntl; + } setup1; + struct { + unsigned int se_coord_fmt; /* 0x1c50 */ + } vertex; + struct { + unsigned int re_line_pattern; /* 0x1cd0 */ + unsigned int re_line_state; + unsigned int se_line_width; /* 0x1db8 */ + } line; + struct { + unsigned int pp_lum_matrix; /* 0x1d00 */ + unsigned int pp_rot_matrix_0; /* 0x1d58 */ + unsigned int pp_rot_matrix_1; + } bumpmap; + struct { + unsigned int rb3d_stencilrefmask; /* 0x1d7c */ + unsigned int rb3d_ropcntl; + unsigned int rb3d_planemask; + } mask; + struct { + unsigned int se_vport_xscale; /* 0x1d98 */ + unsigned int se_vport_xoffset; + unsigned int se_vport_yscale; + unsigned int se_vport_yoffset; + unsigned int se_vport_zscale; + unsigned int se_vport_zoffset; + } viewport; + struct { + unsigned int se_cntl_status; /* 0x2140 */ + } setup2; + struct { + unsigned int re_top_left; /*ignored*/ /* 0x26c0 */ + unsigned int re_misc; + } misc; + struct { + unsigned int pp_txfilter; + unsigned int pp_txformat; + unsigned int pp_txoffset; + unsigned int pp_txcblend; + unsigned int pp_txablend; + unsigned int pp_tfactor; + unsigned int pp_border_color; + } texture[RADEON_MAX_TEXTURE_UNITS]; + struct { + unsigned int se_zbias_factor; + unsigned int se_zbias_constant; + } zbias; + unsigned int dirty; +} drmRadeonState; + +/* 1.1 vertex ioctl. Used in compatibility modes. + */ +typedef struct { + int prim; + int idx; /* Index of vertex buffer */ + int count; /* Number of vertices in buffer */ + int discard; /* Client finished with buffer? */ +} drmRadeonVertex; + +typedef struct { + unsigned int start; + unsigned int finish; + unsigned int prim:8; + unsigned int stateidx:8; + unsigned int numverts:16; /* overloaded as offset/64 for elt prims */ + unsigned int vc_format; +} drmRadeonPrim; + +typedef struct { + int idx; /* Index of vertex buffer */ + int discard; /* Client finished with buffer? */ + int nr_states; + drmRadeonState *state; + int nr_prims; + drmRadeonPrim *prim; +} drmRadeonVertex2; + +#define RADEON_MAX_STATES 16 +#define RADEON_MAX_PRIMS 64 + +/* Command buffer. Replace with true dma stream? + */ +typedef struct { + int bufsz; + char *buf; + int nbox; + drmClipRect *boxes; +} drmRadeonCmdBuffer; + +/* New style per-packet identifiers for use in cmd_buffer ioctl with + * the RADEON_EMIT_PACKET command. Comments relate new packets to old + * state bits and the packet size: + */ +#define RADEON_EMIT_PP_MISC 0 /* context/7 */ +#define RADEON_EMIT_PP_CNTL 1 /* context/3 */ +#define RADEON_EMIT_RB3D_COLORPITCH 2 /* context/1 */ +#define RADEON_EMIT_RE_LINE_PATTERN 3 /* line/2 */ +#define RADEON_EMIT_SE_LINE_WIDTH 4 /* line/1 */ +#define RADEON_EMIT_PP_LUM_MATRIX 5 /* bumpmap/1 */ +#define RADEON_EMIT_PP_ROT_MATRIX_0 6 /* bumpmap/2 */ +#define RADEON_EMIT_RB3D_STENCILREFMASK 7 /* masks/3 */ +#define RADEON_EMIT_SE_VPORT_XSCALE 8 /* viewport/6 */ +#define RADEON_EMIT_SE_CNTL 9 /* setup/2 */ +#define RADEON_EMIT_SE_CNTL_STATUS 10 /* setup/1 */ +#define RADEON_EMIT_RE_MISC 11 /* misc/1 */ +#define RADEON_EMIT_PP_TXFILTER_0 12 /* tex0/6 */ +#define RADEON_EMIT_PP_BORDER_COLOR_0 13 /* tex0/1 */ +#define RADEON_EMIT_PP_TXFILTER_1 14 /* tex1/6 */ +#define RADEON_EMIT_PP_BORDER_COLOR_1 15 /* tex1/1 */ +#define RADEON_EMIT_PP_TXFILTER_2 16 /* tex2/6 */ +#define RADEON_EMIT_PP_BORDER_COLOR_2 17 /* tex2/1 */ +#define RADEON_EMIT_SE_ZBIAS_FACTOR 18 /* zbias/2 */ +#define RADEON_EMIT_SE_TCL_OUTPUT_VTX_FMT 19 /* tcl/11 */ +#define RADEON_EMIT_SE_TCL_MATERIAL_EMMISSIVE_RED 20 /* material/17 */ +#define R200_EMIT_PP_TXCBLEND_0 21 /* tex0/4 */ +#define R200_EMIT_PP_TXCBLEND_1 22 /* tex1/4 */ +#define R200_EMIT_PP_TXCBLEND_2 23 /* tex2/4 */ +#define R200_EMIT_PP_TXCBLEND_3 24 /* tex3/4 */ +#define R200_EMIT_PP_TXCBLEND_4 25 /* tex4/4 */ +#define R200_EMIT_PP_TXCBLEND_5 26 /* tex5/4 */ +#define R200_EMIT_PP_TXCBLEND_6 27 /* /4 */ +#define R200_EMIT_PP_TXCBLEND_7 28 /* /4 */ +#define R200_EMIT_TCL_LIGHT_MODEL_CTL_0 29 /* tcl/6 */ +#define R200_EMIT_TFACTOR_0 30 /* tf/6 */ +#define R200_EMIT_VTX_FMT_0 31 /* vtx/4 */ +#define R200_EMIT_VAP_CTL 32 /* vap/1 */ +#define R200_EMIT_MATRIX_SELECT_0 33 /* msl/5 */ +#define R200_EMIT_TEX_PROC_CTL_2 34 /* tcg/5 */ +#define R200_EMIT_TCL_UCP_VERT_BLEND_CTL 35 /* tcl/1 */ +#define R200_EMIT_PP_TXFILTER_0 36 /* tex0/6 */ +#define R200_EMIT_PP_TXFILTER_1 37 /* tex1/6 */ +#define R200_EMIT_PP_TXFILTER_2 38 /* tex2/6 */ +#define R200_EMIT_PP_TXFILTER_3 39 /* tex3/6 */ +#define R200_EMIT_PP_TXFILTER_4 40 /* tex4/6 */ +#define R200_EMIT_PP_TXFILTER_5 41 /* tex5/6 */ +#define R200_EMIT_PP_TXOFFSET_0 42 /* tex0/1 */ +#define R200_EMIT_PP_TXOFFSET_1 43 /* tex1/1 */ +#define R200_EMIT_PP_TXOFFSET_2 44 /* tex2/1 */ +#define R200_EMIT_PP_TXOFFSET_3 45 /* tex3/1 */ +#define R200_EMIT_PP_TXOFFSET_4 46 /* tex4/1 */ +#define R200_EMIT_PP_TXOFFSET_5 47 /* tex5/1 */ +#define R200_EMIT_VTE_CNTL 48 /* vte/1 */ +#define R200_EMIT_OUTPUT_VTX_COMP_SEL 49 /* vtx/1 */ +#define R200_EMIT_PP_TAM_DEBUG3 50 /* tam/1 */ +#define R200_EMIT_PP_CNTL_X 51 /* cst/1 */ +#define R200_EMIT_RB3D_DEPTHXY_OFFSET 52 /* cst/1 */ +#define R200_EMIT_RE_AUX_SCISSOR_CNTL 53 /* cst/1 */ +#define R200_EMIT_RE_SCISSOR_TL_0 54 /* cst/2 */ +#define R200_EMIT_RE_SCISSOR_TL_1 55 /* cst/2 */ +#define R200_EMIT_RE_SCISSOR_TL_2 56 /* cst/2 */ +#define R200_EMIT_SE_VAP_CNTL_STATUS 57 /* cst/1 */ +#define R200_EMIT_SE_VTX_STATE_CNTL 58 /* cst/1 */ +#define R200_EMIT_RE_POINTSIZE 59 /* cst/1 */ +#define R200_EMIT_TCL_INPUT_VTX_VECTOR_ADDR_0 60 /* cst/4 */ +#define R200_EMIT_PP_CUBIC_FACES_0 61 +#define R200_EMIT_PP_CUBIC_OFFSETS_0 62 +#define R200_EMIT_PP_CUBIC_FACES_1 63 +#define R200_EMIT_PP_CUBIC_OFFSETS_1 64 +#define R200_EMIT_PP_CUBIC_FACES_2 65 +#define R200_EMIT_PP_CUBIC_OFFSETS_2 66 +#define R200_EMIT_PP_CUBIC_FACES_3 67 +#define R200_EMIT_PP_CUBIC_OFFSETS_3 68 +#define R200_EMIT_PP_CUBIC_FACES_4 69 +#define R200_EMIT_PP_CUBIC_OFFSETS_4 70 +#define R200_EMIT_PP_CUBIC_FACES_5 71 +#define R200_EMIT_PP_CUBIC_OFFSETS_5 72 +#define RADEON_EMIT_PP_TEX_SIZE_0 73 +#define RADEON_EMIT_PP_TEX_SIZE_1 74 +#define RADEON_EMIT_PP_TEX_SIZE_2 75 +#define RADEON_MAX_STATE_PACKETS 76 + + +/* Commands understood by cmd_buffer ioctl. More can be added but + * obviously these can't be removed or changed: + */ +#define RADEON_CMD_PACKET 1 /* emit one of the register packets above */ +#define RADEON_CMD_SCALARS 2 /* emit scalar data */ +#define RADEON_CMD_VECTORS 3 /* emit vector data */ +#define RADEON_CMD_DMA_DISCARD 4 /* discard current dma buf */ +#define RADEON_CMD_PACKET3 5 /* emit hw packet */ +#define RADEON_CMD_PACKET3_CLIP 6 /* emit hw packet wrapped in cliprects */ +#define RADEON_CMD_SCALARS2 7 /* R200 stopgap */ +#define RADEON_CMD_WAIT 8 /* synchronization */ + +typedef union { + int i; + struct { + unsigned char cmd_type, pad0, pad1, pad2; + } header; + struct { + unsigned char cmd_type, packet_id, pad0, pad1; + } packet; + struct { + unsigned char cmd_type, offset, stride, count; + } scalars; + struct { + unsigned char cmd_type, offset, stride, count; + } vectors; + struct { + unsigned char cmd_type, buf_idx, pad0, pad1; + } dma; + struct { + unsigned char cmd_type, flags, pad0, pad1; + } wait; +} drmRadeonCmdHeader; + + +#define RADEON_WAIT_2D 0x1 +#define RADEON_WAIT_3D 0x2 + + +typedef struct drm_radeon_getparam { + int param; + int *value; +} drmRadeonGetParam; + +#define RADEON_PARAM_GART_BUFFER_OFFSET 1 +#define RADEON_PARAM_LAST_FRAME 2 +#define RADEON_PARAM_LAST_DISPATCH 3 +#define RADEON_PARAM_LAST_CLEAR 4 +#define RADEON_PARAM_IRQ_NR 5 +#define RADEON_PARAM_GART_BASE 6 + + +#define RADEON_MEM_REGION_GART 1 +#define RADEON_MEM_REGION_FB 2 + +typedef struct drm_radeon_mem_alloc { + int region; + int alignment; + int size; + int *region_offset; /* offset from start of fb or GART */ +} drmRadeonMemAlloc; + +typedef struct drm_radeon_mem_free { + int region; + int region_offset; +} drmRadeonMemFree; + +typedef struct drm_radeon_mem_init_heap { + int region; + int size; + int start; +} drmRadeonMemInitHeap; + +/* 1.6: Userspace can request & wait on irq's: + */ +typedef struct drm_radeon_irq_emit { + int *irq_seq; +} drmRadeonIrqEmit; + +typedef struct drm_radeon_irq_wait { + int irq_seq; +} drmRadeonIrqWait; + + +/* 1.10: Clients tell the DRM where they think the framebuffer is located in + * the card's address space, via a new generic ioctl to set parameters + */ + +typedef struct drm_radeon_set_param { + unsigned int param; + int64_t value; +} drmRadeonSetParam; + +#define RADEON_SETPARAM_FB_LOCATION 1 + + +#endif --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/ati/ati_dri.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/ati/ati_dri.c @@ -0,0 +1,1141 @@ +/* + * $Id$ + * + * Copyright © 2003 Eric Anholt + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Eric Anholt not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Eric Anholt makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * ERIC ANHOLT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL ERIC ANHOLT BE LIABLE FOR 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. + */ +/* $Header$ */ + +#include + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include "ati.h" +#include "ati_reg.h" +#include "ati_dma.h" +#include "ati_dri.h" +#include "ati_dripriv.h" +#include "sarea.h" +#include "ati_sarea.h" +#include "ati_draw.h" +#include "r128_common.h" +#include "radeon_common.h" +#include "kaa.h" + +/* ?? HACK - for now, put this here... */ +/* ?? Alpha - this may need to be a variable to handle UP1x00 vs TITAN */ +#if defined(__alpha__) +# define DRM_PAGE_SIZE 8192 +#elif defined(__ia64__) +# define DRM_PAGE_SIZE getpagesize() +#else +# define DRM_PAGE_SIZE 4096 +#endif + +#ifdef GLXEXT +/* Initialize the visual configs that are supported by the hardware. + * These are combined with the visual configs that the indirect + * rendering core supports, and the intersection is exported to the + * client. + */ +static Bool ATIInitVisualConfigs(ScreenPtr pScreen) +{ + KdScreenPriv(pScreen); + ATIScreenInfo(pScreenPriv); + int numConfigs = 0; + __GLXvisualConfig *pConfigs = NULL; + ATIConfigPrivPtr pATIConfigs = NULL; + ATIConfigPrivPtr *pATIConfigPtrs = NULL; + int i, accum, stencil, db, use_db; + int depth = pScreenPriv->screen->fb[0].depth; + int bpp = pScreenPriv->screen->fb[0].bitsPerPixel; + + if (depth != 16 && (depth != 24 || bpp != 32)) + ErrorF("DRI GLX unsupported at %d/%d depth/bpp\n", depth, bpp); + + if (atis->depthOffset != 0) + use_db = 1; + else + use_db = 0; + + numConfigs = 4; + if (use_db) + numConfigs *= 2; + + pConfigs = xcalloc(sizeof(__GLXvisualConfig), numConfigs); + pATIConfigs = xcalloc(sizeof(ATIConfigPrivRec), numConfigs); + pATIConfigPtrs = xcalloc(sizeof(ATIConfigPrivPtr), numConfigs); + if (pConfigs == NULL || pATIConfigs == NULL || pATIConfigPtrs == NULL) { + xfree(pConfigs); + xfree(pATIConfigs); + xfree(pATIConfigPtrs); + return FALSE; + } + + i = 0; + for (db = 0; db <= use_db; db++) { + for (accum = 0; accum <= 1; accum++) { + for (stencil = 0; stencil <= 1; stencil++) { + pATIConfigPtrs[i] = &pATIConfigs[i]; + + pConfigs[i].vid = (VisualID)(-1); + pConfigs[i].class = -1; + pConfigs[i].rgba = TRUE; + if (depth == 16) { + pConfigs[i].redSize = 5; + pConfigs[i].greenSize = 6; + pConfigs[i].blueSize = 5; + pConfigs[i].alphaSize = 0; + pConfigs[i].redMask = 0x0000F800; + pConfigs[i].greenMask = 0x000007E0; + pConfigs[i].blueMask = 0x0000001F; + pConfigs[i].alphaMask = 0x00000000; + } else { + pConfigs[i].redSize = 8; + pConfigs[i].greenSize = 8; + pConfigs[i].blueSize = 8; + pConfigs[i].alphaSize = 8; + pConfigs[i].redMask = 0x00FF0000; + pConfigs[i].greenMask = 0x0000FF00; + pConfigs[i].blueMask = 0x000000FF; + pConfigs[i].alphaMask = 0xFF000000; + } + if (accum) { /* Simulated in software */ + pConfigs[i].accumRedSize = 16; + pConfigs[i].accumGreenSize = 16; + pConfigs[i].accumBlueSize = 16; + if (depth == 16) + pConfigs[i].accumAlphaSize = 0; + else + pConfigs[i].accumAlphaSize = 16; + } else { + pConfigs[i].accumRedSize = 0; + pConfigs[i].accumGreenSize = 0; + pConfigs[i].accumBlueSize = 0; + pConfigs[i].accumAlphaSize = 0; + } + if (db) + pConfigs[i].doubleBuffer = TRUE; + else + pConfigs[i].doubleBuffer = FALSE; + pConfigs[i].stereo = FALSE; + if (depth == 16) { + pConfigs[i].bufferSize = 16; + pConfigs[i].depthSize = 16; + if (stencil) + pConfigs[i].stencilSize = 8; + else + pConfigs[i].stencilSize = 0; + } else { + pConfigs[i].bufferSize = 32; + if (stencil) { + pConfigs[i].depthSize = 24; + pConfigs[i].stencilSize = 8; + } else { + pConfigs[i].depthSize = 24; + pConfigs[i].stencilSize = 0; + } + } + pConfigs[i].auxBuffers = 0; + pConfigs[i].level = 0; + if (accum) { + pConfigs[i].visualRating = GLX_SLOW_CONFIG; + } else { + pConfigs[i].visualRating = GLX_NONE; + } + pConfigs[i].transparentPixel = GLX_NONE; + pConfigs[i].transparentRed = 0; + pConfigs[i].transparentGreen = 0; + pConfigs[i].transparentBlue = 0; + pConfigs[i].transparentAlpha = 0; + pConfigs[i].transparentIndex = 0; + i++; + } + } + } + + atis->numVisualConfigs = numConfigs; + atis->pVisualConfigs = pConfigs; + atis->pVisualConfigsPriv = pATIConfigs; + GlxSetVisualConfigs(numConfigs, pConfigs, (void**)pATIConfigPtrs); + return TRUE; +} +#endif /* GLXEXT */ + +static void +ATIDRIInitGARTValues(ScreenPtr pScreen) +{ + KdScreenPriv(pScreen); + ATIScreenInfo(pScreenPriv); + int s, l; + + atis->gartOffset = 0; + + /* Initialize the ring buffer data */ + atis->ringStart = atis->gartOffset; + atis->ringMapSize = atis->ringSize * 1024 * 1024 + DRM_PAGE_SIZE; + + atis->ringReadOffset = atis->ringStart + atis->ringMapSize; + atis->ringReadMapSize = DRM_PAGE_SIZE; + + /* Reserve space for vertex/indirect buffers */ + atis->bufStart = atis->ringReadOffset + atis->ringReadMapSize; + atis->bufMapSize = atis->bufSize * 1024 * 1024; + + /* Reserve the rest for GART textures */ + atis->gartTexStart = atis->bufStart + atis->bufMapSize; + s = (atis->gartSize * 1024 * 1024 - atis->gartTexStart); + l = ATILog2((s-1) / ATI_NR_TEX_REGIONS); + if (l < ATI_LOG_TEX_GRANULARITY) l = ATI_LOG_TEX_GRANULARITY; + atis->gartTexMapSize = (s >> l) << l; + atis->log2GARTTexGran = l; +} + +static int +ATIDRIAddAndMap(int fd, drmHandle offset, drmSize size, + drmMapType type, drmMapFlags flags, drmHandlePtr handle, + drmAddressPtr address, char *desc) +{ + char *name; + + name = (type == DRM_AGP) ? "agp" : "pci"; + + if (drmAddMap(fd, offset, size, type, flags, handle) < 0) { + ErrorF("[%s] Could not add %s mapping\n", name, desc); + return FALSE; + } + ErrorF("[%s] %s handle = 0x%08lx\n", name, desc, *handle); + + if (drmMap(fd, *handle, size, address) < 0) { + ErrorF("[%s] Could not map %s\n", name, desc); + return FALSE; + } + ErrorF("[%s] %s mapped at 0x%08lx\n", name, desc, *address); + + return TRUE; +} + +/* Initialize the AGP state. Request memory for use in AGP space, and + initialize the Rage 128 registers to point to that memory. */ +static Bool +ATIDRIAgpInit(ScreenPtr pScreen) +{ + KdScreenPriv(pScreen); + ATIScreenInfo(pScreenPriv); + ATICardInfo(pScreenPriv); + unsigned char *mmio = atic->reg_base; + unsigned long mode; + int ret; + CARD32 cntl, chunk; + + if (drmAgpAcquire(atic->drmFd) < 0) { + ErrorF("[agp] AGP not available\n"); + return FALSE; + } + + ATIDRIInitGARTValues(pScreen); + + mode = drmAgpGetMode(atic->drmFd); + if (atic->is_radeon) { + mode &= ~RADEON_AGP_MODE_MASK; + mode |= RADEON_AGP_1X_MODE; + } else { + mode &= ~R128_AGP_MODE_MASK; + mode |= R128_AGP_1X_MODE; + } + + if (drmAgpEnable(atic->drmFd, mode) < 0) { + ErrorF("[agp] AGP not enabled\n"); + drmAgpRelease(atic->drmFd); + return FALSE; + } + ErrorF("[agp] Mode 0x%08x selected\n", drmAgpGetMode(atic->drmFd)); + + if ((ret = drmAgpAlloc(atic->drmFd, atis->gartSize * 1024 * 1024, 0, + NULL, &atis->agpMemHandle)) < 0) { + ErrorF("[agp] Out of memory (%d)\n", ret); + drmAgpRelease(atic->drmFd); + return FALSE; + } + ErrorF("[agp] %d kB allocated with handle 0x%08lx\n", + atis->gartSize * 1024, (long)atis->agpMemHandle); + + if (drmAgpBind(atic->drmFd, atis->agpMemHandle, atis->gartOffset) < 0) { + ErrorF("[agp] Could not bind\n"); + drmAgpFree(atic->drmFd, atis->agpMemHandle); + drmAgpRelease(atic->drmFd); + return FALSE; + } + + if (!ATIDRIAddAndMap(atic->drmFd, atis->ringStart, atis->ringMapSize, + DRM_AGP, DRM_READ_ONLY, &atis->ringHandle, + (drmAddressPtr)&atis->ring, "ring")) + return FALSE; + + if (!ATIDRIAddAndMap(atic->drmFd, atis->ringReadOffset, + atis->ringReadMapSize, DRM_AGP, DRM_READ_ONLY, + &atis->ringReadPtrHandle, (drmAddressPtr)&atis->ringReadPtr, + "ring read ptr")) + return FALSE; + + if (!ATIDRIAddAndMap(atic->drmFd, atis->bufStart, atis->bufMapSize, + DRM_AGP, 0, &atis->bufHandle, (drmAddressPtr)&atis->buf, + "vertex/indirect buffers")) + return FALSE; + + if (!ATIDRIAddAndMap(atic->drmFd, atis->gartTexStart, + atis->gartTexMapSize, DRM_AGP, 0, &atis->gartTexHandle, + (drmAddressPtr)&atis->gartTex, "AGP texture map")) + return FALSE; + + if (atic->is_r100) { + /* Workaround for some hardware bugs */ + cntl = MMIO_IN32(mmio, ATI_REG_AGP_CNTL); + MMIO_OUT32(mmio, ATI_REG_AGP_CNTL, cntl | + RADEON_PENDING_SLOTS_VAL | RADEON_PENDING_SLOTS_SEL); + } else if (!atic->is_radeon) { + cntl = MMIO_IN32(mmio, ATI_REG_AGP_CNTL); + cntl &= ~R128_AGP_APER_SIZE_MASK; + switch (atis->gartSize) { + case 256: cntl |= R128_AGP_APER_SIZE_256MB; break; + case 128: cntl |= R128_AGP_APER_SIZE_128MB; break; + case 64: cntl |= R128_AGP_APER_SIZE_64MB; break; + case 32: cntl |= R128_AGP_APER_SIZE_32MB; break; + case 16: cntl |= R128_AGP_APER_SIZE_16MB; break; + case 8: cntl |= R128_AGP_APER_SIZE_8MB; break; + case 4: cntl |= R128_AGP_APER_SIZE_4MB; break; + default: + ErrorF("[agp] Illegal aperture size %d kB\n", atis->gartSize * + 1024); + return FALSE; + } + MMIO_OUT32(mmio, ATI_REG_AGP_CNTL, cntl); + + /* Disable Rage 128 PCIGART registers */ + chunk = MMIO_IN32(mmio, R128_REG_BM_CHUNK_0_VAL); + chunk &= ~(R128_BM_PTR_FORCE_TO_PCI | + R128_BM_PM4_RD_FORCE_TO_PCI | + R128_BM_GLOBAL_FORCE_TO_PCI); + MMIO_OUT32(mmio, R128_REG_BM_CHUNK_0_VAL, chunk); + + /* Ensure AGP GART is used (for now) */ + MMIO_OUT32(mmio, R128_REG_PCI_GART_PAGE, 1); + } + + MMIO_OUT32(mmio, ATI_REG_AGP_BASE, drmAgpBase(atic->drmFd)); + + return TRUE; +} + +static Bool +ATIDRIPciInit(ScreenPtr pScreen) +{ + KdScreenPriv(pScreen); + ATIScreenInfo(pScreenPriv); + ATICardInfo(pScreenPriv); + unsigned char *mmio = atic->reg_base; + CARD32 chunk; + int ret; + + ATIDRIInitGARTValues(pScreen); + + ret = drmScatterGatherAlloc(atic->drmFd, atis->gartSize * 1024 * 1024, + &atis->pciMemHandle); + if (ret < 0) { + ErrorF("[pci] Out of memory (%d)\n", ret); + return FALSE; + } + ErrorF("[pci] %d kB allocated with handle 0x%08lx\n", + atis->gartSize * 1024, (long)atis->pciMemHandle); + + if (!ATIDRIAddAndMap(atic->drmFd, atis->ringStart, atis->ringMapSize, + DRM_SCATTER_GATHER, DRM_READ_ONLY | DRM_LOCKED | DRM_KERNEL, + &atis->ringHandle, (drmAddressPtr)&atis->ring, "ring")) + return FALSE; + + if (!ATIDRIAddAndMap(atic->drmFd, atis->ringReadOffset, + atis->ringReadMapSize, DRM_SCATTER_GATHER, + DRM_READ_ONLY | DRM_LOCKED | DRM_KERNEL, + &atis->ringReadPtrHandle, (drmAddressPtr)&atis->ringReadPtr, + "ring read ptr")) + return FALSE; + + if (!ATIDRIAddAndMap(atic->drmFd, atis->bufStart, atis->bufMapSize, + DRM_SCATTER_GATHER, 0, &atis->bufHandle, (drmAddressPtr)&atis->buf, + "vertex/indirect buffers")) + return FALSE; + + if (!ATIDRIAddAndMap(atic->drmFd, atis->gartTexStart, + atis->gartTexMapSize, DRM_SCATTER_GATHER, 0, &atis->gartTexHandle, + (drmAddressPtr)&atis->gartTex, "PCI texture map")) + return FALSE; + + if (!atic->is_radeon) { + /* Force PCI GART mode */ + chunk = MMIO_IN32(mmio, R128_REG_BM_CHUNK_0_VAL); + chunk |= (R128_BM_PTR_FORCE_TO_PCI | + R128_BM_PM4_RD_FORCE_TO_PCI | R128_BM_GLOBAL_FORCE_TO_PCI); + MMIO_OUT32(mmio, R128_REG_BM_CHUNK_0_VAL, chunk); + /* Ensure PCI GART is used */ + MMIO_OUT32(mmio, R128_REG_PCI_GART_PAGE, 0); + } + return TRUE; +} + + +/* Initialize the kernel data structures. */ +static int +R128DRIKernelInit(ScreenPtr pScreen) +{ + KdScreenPriv(pScreen); + ATIScreenInfo(pScreenPriv); + ATICardInfo(pScreenPriv); + drmR128Init drmInfo; + int bpp = pScreenPriv->screen->fb[0].bitsPerPixel; + + memset(&drmInfo, 0, sizeof(drmR128Init) ); + + drmInfo.func = DRM_R128_INIT_CCE; + drmInfo.sarea_priv_offset = sizeof(XF86DRISAREARec); + drmInfo.is_pci = !atis->using_agp; + drmInfo.cce_mode = R128_PM4_64BM_64VCBM_64INDBM; + drmInfo.cce_secure = TRUE; + drmInfo.ring_size = atis->ringSize * 1024 * 1024; + drmInfo.usec_timeout = atis->DMAusecTimeout; + + drmInfo.front_offset = atis->frontOffset; + drmInfo.front_pitch = atis->frontPitch / (bpp / 8); + drmInfo.back_offset = atis->backOffset; + drmInfo.back_pitch = atis->backPitch / (bpp / 8); + drmInfo.fb_bpp = bpp; + + drmInfo.depth_offset = atis->depthOffset; + drmInfo.depth_pitch = atis->depthPitch / (bpp / 8); + drmInfo.depth_bpp = bpp; + + drmInfo.span_offset = atis->spanOffset; + + drmInfo.fb_offset = atis->fbHandle; + drmInfo.mmio_offset = atis->registerHandle; + drmInfo.ring_offset = atis->ringHandle; + drmInfo.ring_rptr_offset = atis->ringReadPtrHandle; + drmInfo.buffers_offset = atis->bufHandle; + drmInfo.agp_textures_offset = atis->gartTexHandle; + + if (drmCommandWrite(atic->drmFd, DRM_R128_INIT, &drmInfo, + sizeof(drmR128Init)) < 0) + return FALSE; + + return TRUE; +} + +/* Initialize the kernel data structures */ +static int +RadeonDRIKernelInit(ScreenPtr pScreen) +{ + KdScreenPriv(pScreen); + ATIScreenInfo(pScreenPriv); + ATICardInfo(pScreenPriv); + drmRadeonInit drmInfo; + + memset(&drmInfo, 0, sizeof(drmRadeonInit)); + + if (atic->is_r200) + drmInfo.func = DRM_RADEON_INIT_R200_CP; + else + drmInfo.func = DRM_RADEON_INIT_CP; + + drmInfo.sarea_priv_offset = sizeof(XF86DRISAREARec); + drmInfo.is_pci = !atis->using_agp; + drmInfo.cp_mode = RADEON_CSQ_PRIBM_INDBM; + drmInfo.gart_size = atis->gartSize * 1024 * 1024; + drmInfo.ring_size = atis->ringSize * 1024 * 1024; + drmInfo.usec_timeout = atis->DMAusecTimeout; + + drmInfo.front_offset = atis->frontOffset; + drmInfo.front_pitch = atis->frontPitch; + drmInfo.back_offset = atis->backOffset; + drmInfo.back_pitch = atis->backPitch; + drmInfo.fb_bpp = pScreenPriv->screen->fb[0].bitsPerPixel; + drmInfo.depth_offset = atis->depthOffset; + drmInfo.depth_pitch = atis->depthPitch; + drmInfo.depth_bpp = pScreenPriv->screen->fb[0].bitsPerPixel; + + drmInfo.fb_offset = atis->fbHandle; + drmInfo.mmio_offset = atis->registerHandle; + drmInfo.ring_offset = atis->ringHandle; + drmInfo.ring_rptr_offset = atis->ringReadPtrHandle; + drmInfo.buffers_offset = atis->bufHandle; + drmInfo.gart_textures_offset = atis->gartTexHandle; + + if (drmCommandWrite(atic->drmFd, DRM_RADEON_CP_INIT, + &drmInfo, sizeof(drmRadeonInit)) < 0) + return FALSE; + + return TRUE; +} + +/* Add a map for the vertex buffers that will be accessed by any + DRI-based clients. */ +static Bool +ATIDRIBufInit(ScreenPtr pScreen) +{ + KdScreenPriv(pScreen); + ATIScreenInfo(pScreenPriv); + ATICardInfo(pScreenPriv); + int type, size; + + if (atic->is_radeon) + size = RADEON_BUFFER_SIZE; + else + size = R128_BUFFER_SIZE; + + if (atis->using_agp) + type = DRM_AGP_BUFFER; + else + type = DRM_SG_BUFFER; + + /* Initialize vertex buffers */ + atis->bufNumBufs = drmAddBufs(atic->drmFd, atis->bufMapSize / size, + size, type, atis->bufStart); + + if (atis->bufNumBufs <= 0) { + ErrorF("[drm] Could not create vertex/indirect buffers list\n"); + return FALSE; + } + ErrorF("[drm] Added %d %d byte vertex/indirect buffers\n", + atis->bufNumBufs, size); + + atis->buffers = drmMapBufs(atic->drmFd); + if (atis->buffers == NULL) { + ErrorF("[drm] Failed to map vertex/indirect buffers list\n"); + return FALSE; + } + ErrorF("[drm] Mapped %d vertex/indirect buffers\n", + atis->buffers->count); + + return TRUE; +} + +static int +ATIDRIIrqInit(ScreenPtr pScreen) +{ + KdScreenPriv(pScreen); + ATIScreenInfo(pScreenPriv); + ATICardInfo(pScreenPriv); + + if (atis->irqEnabled) + return FALSE; + + atis->irqEnabled = drmCtlInstHandler(atic->drmFd, 0); + + if (!atis->irqEnabled) + return FALSE; + + return TRUE; +} + +static void ATIDRISwapContext(ScreenPtr pScreen, DRISyncType syncType, + DRIContextType oldContextType, void *oldContext, + DRIContextType newContextType, void *newContext) +{ + KdScreenPriv(pScreen); + ATIScreenInfo(pScreenPriv); + + if ((syncType==DRI_3D_SYNC) && (oldContextType==DRI_2D_CONTEXT) && + (newContextType==DRI_2D_CONTEXT)) { + /* Entering from Wakeup */ + kaaMarkSync(pScreen); + } + if ((syncType==DRI_2D_SYNC) && (oldContextType==DRI_NO_CONTEXT) && + (newContextType==DRI_2D_CONTEXT)) { + /* Exiting from Block Handler */ + if (atis->dma_started) + ATIFlushIndirect(atis, 1); + } +} + +static Bool ATIDRIFinishScreenInit(ScreenPtr pScreen); + +/* Initialize the screen-specific data structures for the Radeon or + Rage 128. This is the main entry point to the device-specific + initialization code. It calls device-independent DRI functions to + create the DRI data structures and initialize the DRI state. */ +Bool +ATIDRIScreenInit(ScreenPtr pScreen) +{ + KdScreenPriv(pScreen); + ATIScreenInfo(pScreenPriv); + ATICardInfo(pScreenPriv); + void *scratch_ptr; + int scratch_int; + DRIInfoPtr pDRIInfo; + int devSareaSize; + drmSetVersion sv; + + if (pScreenPriv->screen->fb[0].depth < 16 || + pScreenPriv->screen->fb[0].bitsPerPixel == 24) { + ErrorF("DRI unsupported at this depth/bpp, disabling.\n"); + return FALSE; + } + + atis->agpMode = 1; + atis->gartSize = 8; + atis->ringSize = 1; + atis->bufSize = 2; + atis->gartTexSize = 1; + atis->DMAusecTimeout = 10000; + + if (atic->drmFd < 0) + return FALSE; + + sv.drm_di_major = -1; + sv.drm_dd_major = -1; + drmSetInterfaceVersion(atic->drmFd, &sv); + if (atic->is_radeon) { + if (sv.drm_dd_major != 1 || sv.drm_dd_minor < 6) { + ErrorF("[dri] radeon kernel module version is %d.%d " + "but version 1.6 or greater is needed.\n", + sv.drm_dd_major, sv.drm_dd_minor); + return FALSE; + } + } else { + if (sv.drm_dd_major != 2 || sv.drm_dd_minor < 2) { + ErrorF("[dri] r128 kernel module version is %d.%d " + "but version 2.2 or greater is needed.\n", + sv.drm_dd_major, sv.drm_dd_minor); + return FALSE; + } + } + + /* Create the DRI data structure, and fill it in before calling the + * DRIScreenInit(). + */ + pDRIInfo = DRICreateInfoRec(); + if (pDRIInfo == NULL) + return FALSE; + + atis->pDRIInfo = pDRIInfo; + pDRIInfo->busIdString = atic->busid; + if (atic->is_radeon) { + pDRIInfo->drmDriverName = "radeon"; + if (atic->is_r100) + pDRIInfo->clientDriverName = "radeon"; + else + pDRIInfo->clientDriverName = "r200"; + } else { + pDRIInfo->drmDriverName = "r128"; + pDRIInfo->clientDriverName = "r128"; + } + pDRIInfo->ddxDriverMajorVersion = 4; + pDRIInfo->ddxDriverMinorVersion = 0; + pDRIInfo->ddxDriverPatchVersion = 0; + pDRIInfo->frameBufferPhysicalAddress = + pScreenPriv->card->attr.address[0] & 0xfc000000; + pDRIInfo->frameBufferSize = pScreenPriv->screen->memory_size; + pDRIInfo->frameBufferStride = pScreenPriv->screen->fb[0].byteStride; + pDRIInfo->ddxDrawableTableEntry = SAREA_MAX_DRAWABLES; + pDRIInfo->maxDrawableTableEntry = SAREA_MAX_DRAWABLES; + + /* For now the mapping works by using a fixed size defined + * in the SAREA header + */ + pDRIInfo->SAREASize = SAREA_MAX; + + if (atic->is_radeon) { + pDRIInfo->devPrivateSize = sizeof(RADEONDRIRec); + devSareaSize = sizeof(RADEONSAREAPriv); + } else { + pDRIInfo->devPrivateSize = sizeof(R128DRIRec); + devSareaSize = sizeof(R128SAREAPriv); + } + + if (sizeof(XF86DRISAREARec) + devSareaSize > SAREA_MAX) { + ErrorF("[dri] Data does not fit in SAREA. Disabling DRI.\n"); + return FALSE; + } + + pDRIInfo->devPrivate = xcalloc(pDRIInfo->devPrivateSize, 1); + if (pDRIInfo->devPrivate == NULL) { + DRIDestroyInfoRec(atis->pDRIInfo); + atis->pDRIInfo = NULL; + return FALSE; + } + + pDRIInfo->contextSize = sizeof(ATIDRIContextRec); + + pDRIInfo->SwapContext = ATIDRISwapContext; + /*pDRIInfo->InitBuffers = R128DRIInitBuffers;*/ /* XXX Appears unnecessary */ + /*pDRIInfo->MoveBuffers = R128DRIMoveBuffers;*/ /* XXX Badness */ + pDRIInfo->bufferRequests = DRI_ALL_WINDOWS; + /*pDRIInfo->TransitionTo2d = R128DRITransitionTo2d; + pDRIInfo->TransitionTo3d = R128DRITransitionTo3d; + pDRIInfo->TransitionSingleToMulti3D = R128DRITransitionSingleToMulti3d; + pDRIInfo->TransitionMultiToSingle3D = R128DRITransitionMultiToSingle3d;*/ + + pDRIInfo->createDummyCtx = TRUE; + pDRIInfo->createDummyCtxPriv = FALSE; + + if (!DRIScreenInit(pScreen, pDRIInfo, &atic->drmFd)) { + ErrorF("[dri] DRIScreenInit failed. Disabling DRI.\n"); + xfree(pDRIInfo->devPrivate); + pDRIInfo->devPrivate = NULL; + DRIDestroyInfoRec(pDRIInfo); + pDRIInfo = NULL; + return FALSE; + } + + /* Add a map for the MMIO registers that will be accessed by any + * DRI-based clients. + */ + atis->registerSize = ATI_REG_SIZE(pScreenPriv->screen->card); + if (drmAddMap(atic->drmFd, ATI_REG_BASE(pScreenPriv->screen->card), + atis->registerSize, DRM_REGISTERS, DRM_READ_ONLY, + &atis->registerHandle) < 0) { + ATIDRICloseScreen(pScreen); + return FALSE; + } + ErrorF("[drm] register handle = 0x%08lx\n", atis->registerHandle); + + /* DRIScreenInit adds the frame buffer map, but we need it as well */ + DRIGetDeviceInfo(pScreen, &atis->fbHandle, &scratch_int, &scratch_int, + &scratch_int, &scratch_int, &scratch_ptr); + + /* Initialize AGP */ + atis->using_agp = atic->is_agp; + if (atic->is_agp && !ATIDRIAgpInit(pScreen)) { + atis->using_agp = FALSE; + ErrorF("[agp] AGP failed to initialize; falling back to PCI mode.\n"); + ErrorF("[agp] Make sure your kernel's AGP support is loaded and functioning.\n"); + } + + /* Initialize PCIGART */ + if (!atis->using_agp && !ATIDRIPciInit(pScreen)) { + ATIDRICloseScreen(pScreen); + return FALSE; + } + +#ifdef GLXEXT + if (!ATIInitVisualConfigs(pScreen)) { + ATIDRICloseScreen(pScreen); + return FALSE; + } + ErrorF("[dri] Visual configs initialized\n"); +#endif + + atis->serverContext = DRIGetContext(pScreen); + + return ATIDRIFinishScreenInit(pScreen); +} + +/* Finish initializing the device-dependent DRI state, and call + DRIFinishScreenInit() to complete the device-independent DRI + initialization. */ +static Bool +R128DRIFinishScreenInit(ScreenPtr pScreen) +{ + KdScreenPriv(pScreen); + ATIScreenInfo(pScreenPriv); + R128SAREAPrivPtr pSAREAPriv; + R128DRIPtr pR128DRI; + int bpp = pScreenPriv->screen->fb[0].bitsPerPixel; + + /* Initialize the kernel data structures */ + if (!R128DRIKernelInit(pScreen)) { + ATIDRICloseScreen(pScreen); + return FALSE; + } + + /* Initialize the vertex buffers list */ + if (!ATIDRIBufInit(pScreen)) { + ATIDRICloseScreen(pScreen); + return FALSE; + } + + /* Initialize IRQ */ + ATIDRIIrqInit(pScreen); + + pSAREAPriv = (R128SAREAPrivPtr)DRIGetSAREAPrivate(pScreen); + memset(pSAREAPriv, 0, sizeof(*pSAREAPriv)); + + pR128DRI = (R128DRIPtr)atis->pDRIInfo->devPrivate; + + pR128DRI->deviceID = pScreenPriv->screen->card->attr.deviceID; + pR128DRI->width = pScreenPriv->screen->width; + pR128DRI->height = pScreenPriv->screen->height; + pR128DRI->depth = pScreenPriv->screen->fb[0].depth; + pR128DRI->bpp = pScreenPriv->screen->fb[0].bitsPerPixel; + + pR128DRI->IsPCI = !atis->using_agp; + pR128DRI->AGPMode = atis->agpMode; + + pR128DRI->frontOffset = atis->frontOffset; + pR128DRI->frontPitch = atis->frontPitch / (bpp / 8); + pR128DRI->backOffset = atis->backOffset; + pR128DRI->backPitch = atis->backPitch / (bpp / 8); + pR128DRI->depthOffset = atis->depthOffset; + pR128DRI->depthPitch = atis->depthPitch / (bpp / 8); + pR128DRI->spanOffset = atis->spanOffset; + pR128DRI->textureOffset = atis->textureOffset; + pR128DRI->textureSize = atis->textureSize; + pR128DRI->log2TexGran = atis->log2TexGran; + + pR128DRI->registerHandle = atis->registerHandle; + pR128DRI->registerSize = atis->registerSize; + + pR128DRI->gartTexHandle = atis->gartTexHandle; + pR128DRI->gartTexMapSize = atis->gartTexMapSize; + pR128DRI->log2AGPTexGran = atis->log2GARTTexGran; + pR128DRI->gartTexOffset = atis->gartTexStart; + pR128DRI->sarea_priv_offset = sizeof(XF86DRISAREARec); + + return TRUE; +} + +/* Finish initializing the device-dependent DRI state, and call + * DRIFinishScreenInit() to complete the device-independent DRI + * initialization. + */ +static Bool +RadeonDRIFinishScreenInit(ScreenPtr pScreen) +{ + KdScreenPriv(pScreen); + ATIScreenInfo(pScreenPriv); + ATICardInfo(pScreenPriv); + RADEONSAREAPrivPtr pSAREAPriv; + RADEONDRIPtr pRADEONDRI; + drmRadeonMemInitHeap drmHeap; + + /* Initialize the kernel data structures */ + if (!RadeonDRIKernelInit(pScreen)) { + ATIDRICloseScreen(pScreen); + return FALSE; + } + + /* Initialize the vertex buffers list */ + if (!ATIDRIBufInit(pScreen)) { + ATIDRICloseScreen(pScreen); + return FALSE; + } + + /* Initialize IRQ */ + ATIDRIIrqInit(pScreen); + + drmHeap.region = RADEON_MEM_REGION_GART; + drmHeap.start = 0; + drmHeap.size = atis->gartTexMapSize; + + if (drmCommandWrite(atic->drmFd, DRM_RADEON_INIT_HEAP, &drmHeap, + sizeof(drmHeap))) { + ErrorF("[drm] Failed to initialize GART heap manager\n"); + } + + /* Initialize the SAREA private data structure */ + pSAREAPriv = (RADEONSAREAPrivPtr)DRIGetSAREAPrivate(pScreen); + memset(pSAREAPriv, 0, sizeof(*pSAREAPriv)); + + pRADEONDRI = (RADEONDRIPtr)atis->pDRIInfo->devPrivate; + + pRADEONDRI->deviceID = pScreenPriv->screen->card->attr.deviceID; + pRADEONDRI->width = pScreenPriv->screen->width; + pRADEONDRI->height = pScreenPriv->screen->height; + pRADEONDRI->depth = pScreenPriv->screen->fb[0].depth; + pRADEONDRI->bpp = pScreenPriv->screen->fb[0].bitsPerPixel; + + pRADEONDRI->IsPCI = !atis->using_agp; + pRADEONDRI->AGPMode = atis->agpMode; + + pRADEONDRI->frontOffset = atis->frontOffset; + pRADEONDRI->frontPitch = atis->frontPitch; + pRADEONDRI->backOffset = atis->backOffset; + pRADEONDRI->backPitch = atis->backPitch; + pRADEONDRI->depthOffset = atis->depthOffset; + pRADEONDRI->depthPitch = atis->depthPitch; + pRADEONDRI->textureOffset = atis->textureOffset; + pRADEONDRI->textureSize = atis->textureSize; + pRADEONDRI->log2TexGran = atis->log2TexGran; + + pRADEONDRI->registerHandle = atis->registerHandle; + pRADEONDRI->registerSize = atis->registerSize; + + pRADEONDRI->statusHandle = atis->ringReadPtrHandle; + pRADEONDRI->statusSize = atis->ringReadMapSize; + + pRADEONDRI->gartTexHandle = atis->gartTexHandle; + pRADEONDRI->gartTexMapSize = atis->gartTexMapSize; + pRADEONDRI->log2GARTTexGran = atis->log2GARTTexGran; + pRADEONDRI->gartTexOffset = atis->gartTexStart; + + pRADEONDRI->sarea_priv_offset = sizeof(XF86DRISAREARec); + + return TRUE; +} + +static Bool +ATIDRIFinishScreenInit(ScreenPtr pScreen) +{ + KdScreenPriv(pScreen); + ATIScreenInfo(pScreenPriv); + ATICardInfo (pScreenPriv); + + atis->pDRIInfo->driverSwapMethod = DRI_HIDE_X_CONTEXT; + + /* NOTE: DRIFinishScreenInit must be called before *DRIKernelInit + * because *DRIKernelInit requires that the hardware lock is held by + * the X server, and the first time the hardware lock is grabbed is + * in DRIFinishScreenInit. + */ + if (!DRIFinishScreenInit(pScreen)) { + ATIDRICloseScreen(pScreen); + return FALSE; + } + + if (atic->is_radeon) { + if (!RadeonDRIFinishScreenInit(pScreen)) { + ATIDRICloseScreen(pScreen); + return FALSE; + } + } else { + if (!R128DRIFinishScreenInit(pScreen)) { + ATIDRICloseScreen(pScreen); + return FALSE; + } + } + + return TRUE; +} + +/* The screen is being closed, so clean up any state and free any + resources used by the DRI. */ +void +ATIDRICloseScreen(ScreenPtr pScreen) +{ + KdScreenPriv (pScreen); + ATIScreenInfo (pScreenPriv); + ATICardInfo (pScreenPriv); + drmR128Init drmR128Info; + drmRadeonInit drmRadeonInfo; + + if (atis->indirectBuffer != NULL) { + /* Flush any remaining commands and free indirect buffers. + * Two steps are used because ATIFlushIndirect gets a + * new buffer after discarding. + */ + ATIFlushIndirect(atis, 1); + ATIDRIDispatchIndirect(atis, 1); + xfree(atis->indirectBuffer); + atis->indirectBuffer = NULL; + atis->indirectStart = 0; + } + ATIDRIDMAStop(atis); + + if (atis->irqEnabled) { + drmCtlUninstHandler(atic->drmFd); + atis->irqEnabled = FALSE; + } + + /* De-allocate vertex buffers */ + if (atis->buffers) { + drmUnmapBufs(atis->buffers); + atis->buffers = NULL; + } + + /* De-allocate all kernel resources */ + if (!atic->is_radeon) { + memset(&drmR128Info, 0, sizeof(drmR128Init)); + drmR128Info.func = DRM_R128_CLEANUP_CCE; + drmCommandWrite(atic->drmFd, DRM_R128_INIT, &drmR128Info, + sizeof(drmR128Init)); + } else { + memset(&drmRadeonInfo, 0, sizeof(drmRadeonInfo)); + drmRadeonInfo.func = DRM_RADEON_CLEANUP_CP; + drmCommandWrite(atic->drmFd, DRM_RADEON_CP_INIT, &drmRadeonInfo, + sizeof(drmR128Init)); + } + + /* De-allocate all AGP resources */ + if (atis->gartTex) { + drmUnmap(atis->gartTex, atis->gartTexMapSize); + atis->gartTex = NULL; + } + if (atis->buf) { + drmUnmap(atis->buf, atis->bufMapSize); + atis->buf = NULL; + } + if (atis->ringReadPtr) { + drmUnmap(atis->ringReadPtr, atis->ringReadMapSize); + atis->ringReadPtr = NULL; + } + if (atis->ring) { + drmUnmap(atis->ring, atis->ringMapSize); + atis->ring = NULL; + } + if (atis->agpMemHandle != DRM_AGP_NO_HANDLE) { + drmAgpUnbind(atic->drmFd, atis->agpMemHandle); + drmAgpFree(atic->drmFd, atis->agpMemHandle); + atis->agpMemHandle = DRM_AGP_NO_HANDLE; + drmAgpRelease(atic->drmFd); + } + if (atis->pciMemHandle) { + drmScatterGatherFree(atic->drmFd, atis->pciMemHandle); + atis->pciMemHandle = 0; + } + + /* De-allocate all DRI resources */ + DRICloseScreen(pScreen); + + /* De-allocate all DRI data structures */ + if (atis->pDRIInfo) { + if (atis->pDRIInfo->devPrivate) { + xfree(atis->pDRIInfo->devPrivate); + atis->pDRIInfo->devPrivate = NULL; + } + DRIDestroyInfoRec(atis->pDRIInfo); + atis->pDRIInfo = NULL; + } + +#ifdef GLXEXT + if (atis->pVisualConfigs) { + xfree(atis->pVisualConfigs); + atis->pVisualConfigs = NULL; + } + if (atis->pVisualConfigsPriv) { + xfree(atis->pVisualConfigsPriv); + atis->pVisualConfigsPriv = NULL; + } +#endif /* GLXEXT */ + atic->drmFd = -1; +} + +void +ATIDRIDMAStart(ATIScreenInfo *atis) +{ + ATICardInfo *atic = atis->atic; + int ret; + + if (atic->is_radeon) + ret = drmCommandNone(atic->drmFd, DRM_RADEON_CP_START); + else + ret = drmCommandNone(atic->drmFd, DRM_R128_CCE_START); + + if (ret == 0) + atis->dma_started = TRUE; + else + FatalError("%s: DMA start returned %d\n", __FUNCTION__, ret); +} + +/* Attempts to idle the DMA engine and stops it. Note that the ioctl is the + * same for both R128 and Radeon, so we can just use the name of one of them. + */ +void +ATIDRIDMAStop(ATIScreenInfo *atis) +{ + ATICardInfo *atic = atis->atic; + drmRadeonCPStop stop; + int ret; + + stop.flush = 1; + stop.idle = 1; + ret = drmCommandWrite(atic->drmFd, DRM_RADEON_CP_STOP, &stop, + sizeof(drmRadeonCPStop)); + + if (ret != 0 && errno == EBUSY) { + ErrorF("Failed to idle the DMA engine\n"); + + stop.idle = 0; + ret = drmCommandWrite(atic->drmFd, DRM_RADEON_CP_STOP, &stop, + sizeof(drmRadeonCPStop)); + } + atis->dma_started = FALSE; +} + +void +ATIDRIDMAReset(ATIScreenInfo *atis) +{ + ATICardInfo *atic = atis->atic; + int ret; + + ret = drmCommandNone(atic->drmFd, atic->is_radeon ? + DRM_RADEON_CP_RESET : DRM_R128_CCE_RESET); + + if (ret != 0) + FatalError("Failed to reset CCE/CP\n"); + + atis->dma_started = FALSE; +} + +/* The R128 and Radeon Indirect ioctls differ only in the ioctl number */ +void +ATIDRIDispatchIndirect(ATIScreenInfo *atis, Bool discard) +{ + ATICardInfo *atic = atis->atic; + drmBufPtr buffer = atis->indirectBuffer->drmBuf; + drmR128Indirect indirect; + int cmd; + + indirect.idx = buffer->idx; + indirect.start = atis->indirectStart; + indirect.end = buffer->used; + indirect.discard = discard; + cmd = atic->is_radeon ? DRM_RADEON_INDIRECT : DRM_R128_INDIRECT; + drmCommandWriteRead(atic->drmFd, cmd, &indirect, + sizeof(drmR128Indirect)); +} + +/* Get an indirect buffer for the DMA 2D acceleration commands */ +drmBufPtr +ATIDRIGetBuffer(ATIScreenInfo *atis) +{ + ATICardInfo *atic = atis->atic; + drmDMAReq dma; + drmBufPtr buf = NULL; + int indx = 0, size = 0, ret = 0; + TIMEOUT_LOCALS; + + dma.context = atis->serverContext; + dma.send_count = 0; + dma.send_list = NULL; + dma.send_sizes = NULL; + dma.flags = 0; + dma.request_count = 1; + if (atic->is_radeon) + dma.request_size = RADEON_BUFFER_SIZE; + else + dma.request_size = R128_BUFFER_SIZE; + dma.request_list = &indx; + dma.request_sizes = &size; + dma.granted_count = 0; + + WHILE_NOT_TIMEOUT(.2) { + ret = drmDMA(atic->drmFd, &dma); + if (ret != -EBUSY) + break; + } + if (TIMEDOUT()) + FatalError("Timeout fetching DMA buffer (card hung)\n"); + if (ret != 0) + FatalError("Error fetching DMA buffer: %d\n", ret); + + buf = &atis->buffers->list[indx]; + buf->used = 0; + return buf; +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/ati/ati_drawtmp.h +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/ati/ati_drawtmp.h @@ -0,0 +1,240 @@ +/* + * $Id$ + * + * Copyright © 2003 Eric Anholt + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Eric Anholt not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Eric Anholt makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * ERIC ANHOLT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL ERIC ANHOLT BE LIABLE FOR 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. + */ +/* $Header$ */ + +#ifdef USE_DMA +#define TAG(x) x##DMA +#define LOCALS RING_LOCALS; \ + (void)atic +#define BEGIN(x) BEGIN_RING(x * 2) +#define OUT_REG(reg, val) OUT_RING_REG(reg, val) +#define END() ADVANCE_RING() +#else +#define TAG(x) x##MMIO +#define LOCALS char *mmio = atic->reg_base; \ + (void)atis +#define BEGIN(x) ATIWaitAvailMMIO(x) +#define OUT_REG(reg, val) MMIO_OUT32((mmio), (reg), (val)) +#define END() +#endif + +static Bool +TAG(ATISetup)(PixmapPtr pDst, PixmapPtr pSrc) +{ + KdScreenPriv(pDst->drawable.pScreen); + ATIScreenInfo(pScreenPriv); + ATICardInfo(pScreenPriv); + int dst_offset, dst_pitch; + int bpp = pDst->drawable.bitsPerPixel; + LOCALS; + + accel_atis = atis; + + dst_pitch = pDst->devKind; + dst_offset = ((CARD8 *)pDst->devPrivate.ptr - + pScreenPriv->screen->memory_base); + if ((dst_pitch & (atis->kaa.offscreenPitch - 1)) != 0) + ATI_FALLBACK(("Bad dst pitch 0x%x\n", dst_pitch)); + if ((dst_offset & (atis->kaa.offscreenByteAlign - 1)) != 0) + ATI_FALLBACK(("Bad dst offset 0x%x\n", dst_offset)); + + if (pSrc != NULL) { + src_pitch = pSrc->devKind; + src_offset = ((CARD8 *)pSrc->devPrivate.ptr - + pScreenPriv->screen->memory_base); + if ((src_pitch & (atis->kaa.offscreenPitch - 1)) != 0) + ATI_FALLBACK(("Bad src pitch 0x%x\n", src_pitch)); + if ((src_offset & (atis->kaa.offscreenByteAlign - 1)) != 0) + ATI_FALLBACK(("Bad src offset 0x%x\n", src_offset)); + } + +#ifdef USE_DMA + if (atic->is_radeon && !atic->is_r200) + RadeonSwitchTo2D(); +#endif + BEGIN((pSrc != NULL) ? 3 : 2); + if (atic->is_radeon) { + OUT_REG(RADEON_REG_DST_PITCH_OFFSET, + ((dst_pitch >> 6) << 22) | (dst_offset >> 10)); + if (pSrc != NULL) { + OUT_REG(RADEON_REG_SRC_PITCH_OFFSET, + ((src_pitch >> 6) << 22) | (src_offset >> 10)); + } + } else { + if (is_24bpp) { + dst_pitch *= 3; + src_pitch *= 3; + } + /* R128 pitch is in units of 8 pixels, offset in 32 bytes */ + OUT_REG(RADEON_REG_DST_PITCH_OFFSET, + ((dst_pitch/bpp) << 21) | (dst_offset >> 5)); + if (pSrc != NULL) { + OUT_REG(RADEON_REG_SRC_PITCH_OFFSET, + ((src_pitch/bpp) << 21) | (src_offset >> 5)); + } + } + OUT_REG(RADEON_REG_DEFAULT_SC_BOTTOM_RIGHT, + (RADEON_DEFAULT_SC_RIGHT_MAX | RADEON_DEFAULT_SC_BOTTOM_MAX)); + END(); + + return TRUE; +} + +static Bool +TAG(ATIPrepareSolid)(PixmapPtr pPixmap, int alu, Pixel pm, Pixel fg) +{ + KdScreenPriv(pPixmap->drawable.pScreen); + ATIScreenInfo(pScreenPriv); + ATICardInfo(pScreenPriv); + CARD32 datatype; + LOCALS; + + if (is_24bpp) { + /* Solid fills in fake-24bpp mode only work if the pixel color + * and planemask are all the same byte. + */ + if ((fg & 0xffffff) != (((fg & 0xff) << 16) | ((fg >> 8) & + 0xffff))) + ATI_FALLBACK(("Can't do solid color %d in 24bpp\n")); + if ((pm & 0xffffff) != (((pm & 0xff) << 16) | ((pm >> 8) & + 0xffff))) + ATI_FALLBACK(("Can't do planemask %d in 24bpp\n")); + } + + if (!ATIGetDatatypeBpp(pPixmap->drawable.bitsPerPixel, &datatype)) + return FALSE; + if (!TAG(ATISetup)(pPixmap, NULL)) + return FALSE; + + BEGIN(4); + OUT_REG(RADEON_REG_DP_GUI_MASTER_CNTL, + (datatype << 8) | + RADEON_GMC_CLR_CMP_CNTL_DIS | + RADEON_GMC_AUX_CLIP_DIS | + RADEON_GMC_BRUSH_SOLID_COLOR | + RADEON_GMC_DST_PITCH_OFFSET_CNTL | + RADEON_GMC_SRC_DATATYPE_COLOR | + (ATISolidRop[alu] << 16)); + OUT_REG(RADEON_REG_DP_BRUSH_FRGD_CLR, fg); + OUT_REG(RADEON_REG_DP_WRITE_MASK, pm); + OUT_REG(RADEON_REG_DP_CNTL, RADEON_DST_X_LEFT_TO_RIGHT | + RADEON_DST_Y_TOP_TO_BOTTOM); + END(); + + return TRUE; +} + +static void +TAG(ATISolid)(int x1, int y1, int x2, int y2) +{ + ATIScreenInfo *atis = accel_atis; + ATICardInfo *atic = atis->atic; + LOCALS; + + if (is_24bpp) { + x1 *= 3; + x2 *= 3; + } + BEGIN(2); + OUT_REG(RADEON_REG_DST_Y_X, (y1 << 16) | x1); + OUT_REG(RADEON_REG_DST_WIDTH_HEIGHT, ((x2 - x1) << 16) | (y2 - y1)); + END(); +} + +static Bool +TAG(ATIPrepareCopy)(PixmapPtr pSrc, PixmapPtr pDst, int dx, int dy, int alu, Pixel pm) +{ + KdScreenPriv(pDst->drawable.pScreen); + ATIScreenInfo(pScreenPriv); + ATICardInfo(pScreenPriv); + CARD32 datatype; + LOCALS; + + copydx = dx; + copydy = dy; + + if (is_24bpp && ((pm & 0xffffff) != (((pm & 0xff) << 16) | ((pm >> 8) & + 0xffff)))) + ATI_FALLBACK(("Can't do planemask %d in 24bpp\n")); + + if (!ATIGetDatatypeBpp(pDst->drawable.bitsPerPixel, &datatype)) + return FALSE; + if (!TAG(ATISetup)(pDst, pSrc)) + return FALSE; + + BEGIN(3); + OUT_REG(RADEON_REG_DP_GUI_MASTER_CNTL, + (datatype << 8) | + RADEON_GMC_CLR_CMP_CNTL_DIS | + RADEON_GMC_AUX_CLIP_DIS | + RADEON_GMC_BRUSH_SOLID_COLOR | + RADEON_GMC_SRC_DATATYPE_COLOR | + (ATIBltRop[alu] << 16) | + RADEON_GMC_SRC_PITCH_OFFSET_CNTL | + RADEON_GMC_DST_PITCH_OFFSET_CNTL | + RADEON_DP_SRC_SOURCE_MEMORY); + OUT_REG(RADEON_REG_DP_WRITE_MASK, pm); + OUT_REG(RADEON_REG_DP_CNTL, + (dx >= 0 ? RADEON_DST_X_LEFT_TO_RIGHT : 0) | + (dy >= 0 ? RADEON_DST_Y_TOP_TO_BOTTOM : 0)); + END(); + + return TRUE; +} + +static void +TAG(ATICopy)(int srcX, int srcY, int dstX, int dstY, int w, int h) +{ + ATIScreenInfo *atis = accel_atis; + ATICardInfo *atic = atis->atic; + LOCALS; + + if (is_24bpp) { + srcX *= 3; + dstX *= 3; + w *= 3; + } + + if (copydx < 0) { + srcX += w - 1; + dstX += w - 1; + } + + if (copydy < 0) { + srcY += h - 1; + dstY += h - 1; + } + + BEGIN(3); + OUT_REG(RADEON_REG_SRC_Y_X, (srcY << 16) | srcX); + OUT_REG(RADEON_REG_DST_Y_X, (dstY << 16) | dstX); + OUT_REG(RADEON_REG_DST_HEIGHT_WIDTH, (h << 16) | w); + END(); +} + +#undef TAG +#undef LOCALS +#undef BEGIN +#undef OUT_REG +#undef END --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/ati/radeon_sarea.h +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/ati/radeon_sarea.h @@ -0,0 +1,221 @@ +/* + * Copyright 2000 ATI Technologies Inc., Markham, Ontario, + * VA Linux Systems Inc., Fremont, California. + * + * 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 on 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 (including the + * next paragraph) 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 + * NON-INFRINGEMENT. IN NO EVENT SHALL ATI, VA LINUX SYSTEMS AND/OR + * THEIR SUPPLIERS 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. + */ + +/* + * Authors: + * Kevin E. Martin + * Gareth Hughes + * + */ + +#ifndef _RADEON_SAREA_H_ +#define _RADEON_SAREA_H_ + +/* WARNING: If you change any of these defines, make sure to change the + * defines in the kernel file (radeon_drm.h) + */ +#ifndef __RADEON_SAREA_DEFINES__ +#define __RADEON_SAREA_DEFINES__ + +/* What needs to be changed for the current vertex buffer? */ +#define RADEON_UPLOAD_CONTEXT 0x00000001 +#define RADEON_UPLOAD_VERTFMT 0x00000002 +#define RADEON_UPLOAD_LINE 0x00000004 +#define RADEON_UPLOAD_BUMPMAP 0x00000008 +#define RADEON_UPLOAD_MASKS 0x00000010 +#define RADEON_UPLOAD_VIEWPORT 0x00000020 +#define RADEON_UPLOAD_SETUP 0x00000040 +#define RADEON_UPLOAD_TCL 0x00000080 +#define RADEON_UPLOAD_MISC 0x00000100 +#define RADEON_UPLOAD_TEX0 0x00000200 +#define RADEON_UPLOAD_TEX1 0x00000400 +#define RADEON_UPLOAD_TEX2 0x00000800 +#define RADEON_UPLOAD_TEX0IMAGES 0x00001000 +#define RADEON_UPLOAD_TEX1IMAGES 0x00002000 +#define RADEON_UPLOAD_TEX2IMAGES 0x00004000 +#define RADEON_UPLOAD_CLIPRECTS 0x00008000 /* handled client-side */ +#define RADEON_REQUIRE_QUIESCENCE 0x00010000 +#define RADEON_UPLOAD_ZBIAS 0x00020000 +#define RADEON_UPLOAD_ALL 0x0002ffff +#define RADEON_UPLOAD_CONTEXT_ALL 0x000201ff + +#define RADEON_FRONT 0x1 +#define RADEON_BACK 0x2 +#define RADEON_DEPTH 0x4 +#define RADEON_STENCIL 0x8 + +/* Primitive types */ +#define RADEON_POINTS 0x1 +#define RADEON_LINES 0x2 +#define RADEON_LINE_STRIP 0x3 +#define RADEON_TRIANGLES 0x4 +#define RADEON_TRIANGLE_FAN 0x5 +#define RADEON_TRIANGLE_STRIP 0x6 +#define RADEON_3VTX_POINTS 0x9 +#define RADEON_3VTX_LINES 0xa + +/* Vertex/indirect buffer size */ +#define RADEON_BUFFER_SIZE 65536 + +/* Byte offsets for indirect buffer data */ +#define RADEON_INDEX_PRIM_OFFSET 20 +#define RADEON_HOSTDATA_BLIT_OFFSET 32 + +#define RADEON_SCRATCH_REG_OFFSET 32 + +/* Keep these small for testing */ +#define RADEON_NR_SAREA_CLIPRECTS 12 + +#define RADEON_MAX_TEXTURE_LEVELS 12 +#define RADEON_MAX_TEXTURE_UNITS 3 + +/* Blits have strict offset rules. All blit offset must be aligned on + * a 1K-byte boundary. + */ +#define RADEON_OFFSET_SHIFT 10 +#define RADEON_OFFSET_ALIGN (1 << RADEON_OFFSET_SHIFT) +#define RADEON_OFFSET_MASK (RADEON_OFFSET_ALIGN - 1) + +#endif /* __RADEON_SAREA_DEFINES__ */ + +typedef struct { + unsigned int red; + unsigned int green; + unsigned int blue; + unsigned int alpha; +} radeon_color_regs_t; + +typedef struct { + /* Context state */ + unsigned int pp_misc; + unsigned int pp_fog_color; + unsigned int re_solid_color; + unsigned int rb3d_blendcntl; + unsigned int rb3d_depthoffset; + unsigned int rb3d_depthpitch; + unsigned int rb3d_zstencilcntl; + + unsigned int pp_cntl; + unsigned int rb3d_cntl; + unsigned int rb3d_coloroffset; + unsigned int re_width_height; + unsigned int rb3d_colorpitch; + unsigned int se_cntl; + + /* Vertex format state */ + unsigned int se_coord_fmt; + + /* Line state */ + unsigned int re_line_pattern; + unsigned int re_line_state; + + unsigned int se_line_width; + + /* Bumpmap state */ + unsigned int pp_lum_matrix; + + unsigned int pp_rot_matrix_0; + unsigned int pp_rot_matrix_1; + + /* Mask state */ + unsigned int rb3d_stencilrefmask; + unsigned int rb3d_ropcntl; + unsigned int rb3d_planemask; + + /* Viewport state */ + unsigned int se_vport_xscale; + unsigned int se_vport_xoffset; + unsigned int se_vport_yscale; + unsigned int se_vport_yoffset; + unsigned int se_vport_zscale; + unsigned int se_vport_zoffset; + + /* Setup state */ + unsigned int se_cntl_status; + + /* Misc state */ + unsigned int re_top_left; + unsigned int re_misc; +} radeon_context_regs_t; + +/* Setup registers for each texture unit */ +typedef struct { + unsigned int pp_txfilter; + unsigned int pp_txformat; + unsigned int pp_txoffset; + unsigned int pp_txcblend; + unsigned int pp_txablend; + unsigned int pp_tfactor; + unsigned int pp_border_color; +} radeon_texture_regs_t; + +typedef struct { + /* The channel for communication of state information to the kernel + * on firing a vertex buffer. + */ + radeon_context_regs_t ContextState; + radeon_texture_regs_t TexState[RADEON_MAX_TEXTURE_UNITS]; + unsigned int dirty; + unsigned int vertsize; + unsigned int vc_format; + + /* The current cliprects, or a subset thereof */ + XF86DRIClipRectRec boxes[RADEON_NR_SAREA_CLIPRECTS]; + unsigned int nbox; + + /* Counters for throttling of rendering clients */ + unsigned int last_frame; + unsigned int last_dispatch; + unsigned int last_clear; + + /* Maintain an LRU of contiguous regions of texture space. If you + * think you own a region of texture memory, and it has an age + * different to the one you set, then you are mistaken and it has + * been stolen by another client. If global texAge hasn't changed, + * there is no need to walk the list. + * + * These regions can be used as a proxy for the fine-grained texture + * information of other clients - by maintaining them in the same + * lru which is used to age their own textures, clients have an + * approximate lru for the whole of global texture space, and can + * make informed decisions as to which areas to kick out. There is + * no need to choose whether to kick out your own texture or someone + * else's - simply eject them all in LRU order. + */ + /* Last elt is sentinal */ + drmTextureRegion texList[ATI_NR_TEX_HEAPS][ATI_NR_TEX_REGIONS+1]; + /* last time texture was uploaded */ + unsigned int texAge[ATI_NR_TEX_HEAPS]; + + int ctxOwner; /* last context to upload state */ + int pfAllowPageFlip; /* set by the 2d driver, read by the client */ + int pfCurrentPage; /* set by kernel, read by others */ + int crtc2_base; /* for pageflipping with CloneMode */ +} RADEONSAREAPriv, *RADEONSAREAPrivPtr; + +#endif --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/ati/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/ati/Makefile.in @@ -145,6 +145,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -223,6 +225,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -335,6 +338,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/ati/ati_dri.h +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/ati/ati_dri.h @@ -0,0 +1,100 @@ +/* + * $Id$ + * + * Copyright © 2003 Eric Anholt + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Eric Anholt not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Eric Anholt makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * ERIC ANHOLT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL ERIC ANHOLT BE LIABLE FOR 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. + */ +/* $Header$ */ + +#ifndef _ATI_DRI_H_ +#define _ATI_DRI_H_ + +typedef struct { + /* DRI screen private data */ + int deviceID; /* PCI device ID */ + int width; /* Width in pixels of display */ + int height; /* Height in scanlines of display */ + int depth; /* Depth of display (8, 15, 16, 24) */ + int bpp; /* Bit depth of display (8, 16, 24, 32) */ + + int IsPCI; /* Current card is a PCI card */ + int AGPMode; + + int frontOffset; /* Start of front buffer */ + int frontPitch; + int backOffset; /* Start of shared back buffer */ + int backPitch; + int depthOffset; /* Start of shared depth buffer */ + int depthPitch; + int spanOffset; /* Start of scratch spanline */ + int textureOffset; /* Start of texture data in frame buffer */ + int textureSize; + int log2TexGran; + + /* MMIO register data */ + drmHandle registerHandle; + drmSize registerSize; + + /* CCE AGP Texture data */ + drmHandle gartTexHandle; + drmSize gartTexMapSize; + int log2AGPTexGran; + int gartTexOffset; + unsigned int sarea_priv_offset; +} R128DRIRec, *R128DRIPtr; + +typedef struct { + /* DRI screen private data */ + int deviceID; /* PCI device ID */ + int width; /* Width in pixels of display */ + int height; /* Height in scanlines of display */ + int depth; /* Depth of display (8, 15, 16, 24) */ + int bpp; /* Bit depth of display (8, 16, 24, 32) */ + + int IsPCI; /* Current card is a PCI card */ + int AGPMode; + + int frontOffset; /* Start of front buffer */ + int frontPitch; + int backOffset; /* Start of shared back buffer */ + int backPitch; + int depthOffset; /* Start of shared depth buffer */ + int depthPitch; + int textureOffset; /* Start of texture data in frame buffer */ + int textureSize; + int log2TexGran; + + /* MMIO register data */ + drmHandle registerHandle; + drmSize registerSize; + + /* CP in-memory status information */ + drmHandle statusHandle; + drmSize statusSize; + + /* CP GART Texture data */ + drmHandle gartTexHandle; + drmSize gartTexMapSize; + int log2GARTTexGran; + int gartTexOffset; + unsigned int sarea_priv_offset; +} RADEONDRIRec, *RADEONDRIPtr; + +#endif /* _ATI_DRI_H_ */ --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/src/kcolor.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/src/kcolor.c @@ -0,0 +1,884 @@ +/* + * Id: kcolor.c,v 1.1 1999/11/02 03:54:46 keithp Exp $ + * + * Copyright © 1999 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/kcolor.c,v 1.2 1999/12/30 03:03:05 robin Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "kdrive.h" +#include +#include "os.h" +#include "opaque.h" +#include + +unsigned char +KdToLower (unsigned char a) +{ + if ((a >= XK_A) && (a <= XK_Z)) + return a + (XK_a - XK_A); + else if ((a >= XK_Agrave) && (a <= XK_Odiaeresis)) + return a + (XK_agrave - XK_Agrave); + else if ((a >= XK_Ooblique) && (a <= XK_Thorn)) + return a + (XK_oslash - XK_Ooblique); + else + return a; +} + +int +KdStrCaseCmp (const unsigned char *s1, const unsigned char *s2, int l2) +{ + unsigned char c1, c2; + + for (;;) + { + c1 = KdToLower (*s1++); + if (l2 == 0) + c2 = '\0'; + else + c2 = KdToLower (*s2++); + if (!c1 || !c2) + break; + if (c1 != c2) + break; + l2--; + } + return c2 - c1; +} + +typedef struct _kdNamedColor { + unsigned short red; + unsigned short green; + unsigned short blue; + const unsigned char *name; +} KdNamedColor; + +#define C 0x101 + +const KdNamedColor KdColors[] = { + { 240*C, 248*C, 255*C, "alice blue" }, + { 240*C, 248*C, 255*C, "AliceBlue" }, + { 250*C, 235*C, 215*C, "antique white" }, + { 250*C, 235*C, 215*C, "AntiqueWhite" }, + { 255*C, 239*C, 219*C, "AntiqueWhite1" }, + { 238*C, 223*C, 204*C, "AntiqueWhite2" }, + { 205*C, 192*C, 176*C, "AntiqueWhite3" }, + { 139*C, 131*C, 120*C, "AntiqueWhite4" }, + { 127*C, 255*C, 212*C, "aquamarine" }, + { 127*C, 255*C, 212*C, "aquamarine1" }, + { 118*C, 238*C, 198*C, "aquamarine2" }, + { 102*C, 205*C, 170*C, "aquamarine3" }, + { 69*C, 139*C, 116*C, "aquamarine4" }, + { 240*C, 255*C, 255*C, "azure" }, + { 240*C, 255*C, 255*C, "azure1" }, + { 224*C, 238*C, 238*C, "azure2" }, + { 193*C, 205*C, 205*C, "azure3" }, + { 131*C, 139*C, 139*C, "azure4" }, + { 245*C, 245*C, 220*C, "beige" }, + { 255*C, 228*C, 196*C, "bisque" }, + { 255*C, 228*C, 196*C, "bisque1" }, + { 238*C, 213*C, 183*C, "bisque2" }, + { 205*C, 183*C, 158*C, "bisque3" }, + { 139*C, 125*C, 107*C, "bisque4" }, + { 0*C, 0*C, 0*C, "black" }, + { 255*C, 235*C, 205*C, "blanched almond" }, + { 255*C, 235*C, 205*C, "BlanchedAlmond" }, + { 0*C, 0*C, 255*C, "blue" }, + { 138*C, 43*C, 226*C, "blue violet" }, + { 0*C, 0*C, 255*C, "blue1" }, + { 0*C, 0*C, 238*C, "blue2" }, + { 0*C, 0*C, 205*C, "blue3" }, + { 0*C, 0*C, 139*C, "blue4" }, + { 138*C, 43*C, 226*C, "BlueViolet" }, + { 165*C, 42*C, 42*C, "brown" }, + { 255*C, 64*C, 64*C, "brown1" }, + { 238*C, 59*C, 59*C, "brown2" }, + { 205*C, 51*C, 51*C, "brown3" }, + { 139*C, 35*C, 35*C, "brown4" }, + { 222*C, 184*C, 135*C, "burlywood" }, + { 255*C, 211*C, 155*C, "burlywood1" }, + { 238*C, 197*C, 145*C, "burlywood2" }, + { 205*C, 170*C, 125*C, "burlywood3" }, + { 139*C, 115*C, 85*C, "burlywood4" }, + { 95*C, 158*C, 160*C, "cadet blue" }, + { 95*C, 158*C, 160*C, "CadetBlue" }, + { 152*C, 245*C, 255*C, "CadetBlue1" }, + { 142*C, 229*C, 238*C, "CadetBlue2" }, + { 122*C, 197*C, 205*C, "CadetBlue3" }, + { 83*C, 134*C, 139*C, "CadetBlue4" }, + { 127*C, 255*C, 0*C, "chartreuse" }, + { 127*C, 255*C, 0*C, "chartreuse1" }, + { 118*C, 238*C, 0*C, "chartreuse2" }, + { 102*C, 205*C, 0*C, "chartreuse3" }, + { 69*C, 139*C, 0*C, "chartreuse4" }, + { 210*C, 105*C, 30*C, "chocolate" }, + { 255*C, 127*C, 36*C, "chocolate1" }, + { 238*C, 118*C, 33*C, "chocolate2" }, + { 205*C, 102*C, 29*C, "chocolate3" }, + { 139*C, 69*C, 19*C, "chocolate4" }, + { 255*C, 127*C, 80*C, "coral" }, + { 255*C, 114*C, 86*C, "coral1" }, + { 238*C, 106*C, 80*C, "coral2" }, + { 205*C, 91*C, 69*C, "coral3" }, + { 139*C, 62*C, 47*C, "coral4" }, + { 100*C, 149*C, 237*C, "cornflower blue" }, + { 100*C, 149*C, 237*C, "CornflowerBlue" }, + { 255*C, 248*C, 220*C, "cornsilk" }, + { 255*C, 248*C, 220*C, "cornsilk1" }, + { 238*C, 232*C, 205*C, "cornsilk2" }, + { 205*C, 200*C, 177*C, "cornsilk3" }, + { 139*C, 136*C, 120*C, "cornsilk4" }, + { 0*C, 255*C, 255*C, "cyan" }, + { 0*C, 255*C, 255*C, "cyan1" }, + { 0*C, 238*C, 238*C, "cyan2" }, + { 0*C, 205*C, 205*C, "cyan3" }, + { 0*C, 139*C, 139*C, "cyan4" }, + { 0*C, 0*C, 139*C, "dark blue" }, + { 0*C, 139*C, 139*C, "dark cyan" }, + { 184*C, 134*C, 11*C, "dark goldenrod" }, + { 169*C, 169*C, 169*C, "dark gray" }, + { 0*C, 100*C, 0*C, "dark green" }, + { 169*C, 169*C, 169*C, "dark grey" }, + { 189*C, 183*C, 107*C, "dark khaki" }, + { 139*C, 0*C, 139*C, "dark magenta" }, + { 85*C, 107*C, 47*C, "dark olive green" }, + { 255*C, 140*C, 0*C, "dark orange" }, + { 153*C, 50*C, 204*C, "dark orchid" }, + { 139*C, 0*C, 0*C, "dark red" }, + { 233*C, 150*C, 122*C, "dark salmon" }, + { 143*C, 188*C, 143*C, "dark sea green" }, + { 72*C, 61*C, 139*C, "dark slate blue" }, + { 47*C, 79*C, 79*C, "dark slate gray" }, + { 47*C, 79*C, 79*C, "dark slate grey" }, + { 0*C, 206*C, 209*C, "dark turquoise" }, + { 148*C, 0*C, 211*C, "dark violet" }, + { 0*C, 0*C, 139*C, "DarkBlue" }, + { 0*C, 139*C, 139*C, "DarkCyan" }, + { 184*C, 134*C, 11*C, "DarkGoldenrod" }, + { 255*C, 185*C, 15*C, "DarkGoldenrod1" }, + { 238*C, 173*C, 14*C, "DarkGoldenrod2" }, + { 205*C, 149*C, 12*C, "DarkGoldenrod3" }, + { 139*C, 101*C, 8*C, "DarkGoldenrod4" }, + { 169*C, 169*C, 169*C, "DarkGray" }, + { 0*C, 100*C, 0*C, "DarkGreen" }, + { 169*C, 169*C, 169*C, "DarkGrey" }, + { 189*C, 183*C, 107*C, "DarkKhaki" }, + { 139*C, 0*C, 139*C, "DarkMagenta" }, + { 85*C, 107*C, 47*C, "DarkOliveGreen" }, + { 202*C, 255*C, 112*C, "DarkOliveGreen1" }, + { 188*C, 238*C, 104*C, "DarkOliveGreen2" }, + { 162*C, 205*C, 90*C, "DarkOliveGreen3" }, + { 110*C, 139*C, 61*C, "DarkOliveGreen4" }, + { 255*C, 140*C, 0*C, "DarkOrange" }, + { 255*C, 127*C, 0*C, "DarkOrange1" }, + { 238*C, 118*C, 0*C, "DarkOrange2" }, + { 205*C, 102*C, 0*C, "DarkOrange3" }, + { 139*C, 69*C, 0*C, "DarkOrange4" }, + { 153*C, 50*C, 204*C, "DarkOrchid" }, + { 191*C, 62*C, 255*C, "DarkOrchid1" }, + { 178*C, 58*C, 238*C, "DarkOrchid2" }, + { 154*C, 50*C, 205*C, "DarkOrchid3" }, + { 104*C, 34*C, 139*C, "DarkOrchid4" }, + { 139*C, 0*C, 0*C, "DarkRed" }, + { 233*C, 150*C, 122*C, "DarkSalmon" }, + { 143*C, 188*C, 143*C, "DarkSeaGreen" }, + { 193*C, 255*C, 193*C, "DarkSeaGreen1" }, + { 180*C, 238*C, 180*C, "DarkSeaGreen2" }, + { 155*C, 205*C, 155*C, "DarkSeaGreen3" }, + { 105*C, 139*C, 105*C, "DarkSeaGreen4" }, + { 72*C, 61*C, 139*C, "DarkSlateBlue" }, + { 47*C, 79*C, 79*C, "DarkSlateGray" }, + { 151*C, 255*C, 255*C, "DarkSlateGray1" }, + { 141*C, 238*C, 238*C, "DarkSlateGray2" }, + { 121*C, 205*C, 205*C, "DarkSlateGray3" }, + { 82*C, 139*C, 139*C, "DarkSlateGray4" }, + { 47*C, 79*C, 79*C, "DarkSlateGrey" }, + { 0*C, 206*C, 209*C, "DarkTurquoise" }, + { 148*C, 0*C, 211*C, "DarkViolet" }, + { 255*C, 20*C, 147*C, "deep pink" }, + { 0*C, 191*C, 255*C, "deep sky blue" }, + { 255*C, 20*C, 147*C, "DeepPink" }, + { 255*C, 20*C, 147*C, "DeepPink1" }, + { 238*C, 18*C, 137*C, "DeepPink2" }, + { 205*C, 16*C, 118*C, "DeepPink3" }, + { 139*C, 10*C, 80*C, "DeepPink4" }, + { 0*C, 191*C, 255*C, "DeepSkyBlue" }, + { 0*C, 191*C, 255*C, "DeepSkyBlue1" }, + { 0*C, 178*C, 238*C, "DeepSkyBlue2" }, + { 0*C, 154*C, 205*C, "DeepSkyBlue3" }, + { 0*C, 104*C, 139*C, "DeepSkyBlue4" }, + { 105*C, 105*C, 105*C, "dim gray" }, + { 105*C, 105*C, 105*C, "dim grey" }, + { 105*C, 105*C, 105*C, "DimGray" }, + { 105*C, 105*C, 105*C, "DimGrey" }, + { 30*C, 144*C, 255*C, "dodger blue" }, + { 30*C, 144*C, 255*C, "DodgerBlue" }, + { 30*C, 144*C, 255*C, "DodgerBlue1" }, + { 28*C, 134*C, 238*C, "DodgerBlue2" }, + { 24*C, 116*C, 205*C, "DodgerBlue3" }, + { 16*C, 78*C, 139*C, "DodgerBlue4" }, + { 178*C, 34*C, 34*C, "firebrick" }, + { 255*C, 48*C, 48*C, "firebrick1" }, + { 238*C, 44*C, 44*C, "firebrick2" }, + { 205*C, 38*C, 38*C, "firebrick3" }, + { 139*C, 26*C, 26*C, "firebrick4" }, + { 255*C, 250*C, 240*C, "floral white" }, + { 255*C, 250*C, 240*C, "FloralWhite" }, + { 34*C, 139*C, 34*C, "forest green" }, + { 34*C, 139*C, 34*C, "ForestGreen" }, + { 220*C, 220*C, 220*C, "gainsboro" }, + { 248*C, 248*C, 255*C, "ghost white" }, + { 248*C, 248*C, 255*C, "GhostWhite" }, + { 255*C, 215*C, 0*C, "gold" }, + { 255*C, 215*C, 0*C, "gold1" }, + { 238*C, 201*C, 0*C, "gold2" }, + { 205*C, 173*C, 0*C, "gold3" }, + { 139*C, 117*C, 0*C, "gold4" }, + { 218*C, 165*C, 32*C, "goldenrod" }, + { 255*C, 193*C, 37*C, "goldenrod1" }, + { 238*C, 180*C, 34*C, "goldenrod2" }, + { 205*C, 155*C, 29*C, "goldenrod3" }, + { 139*C, 105*C, 20*C, "goldenrod4" }, + { 190*C, 190*C, 190*C, "gray" }, + { 0*C, 0*C, 0*C, "gray0" }, + { 3*C, 3*C, 3*C, "gray1" }, + { 26*C, 26*C, 26*C, "gray10" }, + { 255*C, 255*C, 255*C, "gray100" }, + { 28*C, 28*C, 28*C, "gray11" }, + { 31*C, 31*C, 31*C, "gray12" }, + { 33*C, 33*C, 33*C, "gray13" }, + { 36*C, 36*C, 36*C, "gray14" }, + { 38*C, 38*C, 38*C, "gray15" }, + { 41*C, 41*C, 41*C, "gray16" }, + { 43*C, 43*C, 43*C, "gray17" }, + { 46*C, 46*C, 46*C, "gray18" }, + { 48*C, 48*C, 48*C, "gray19" }, + { 5*C, 5*C, 5*C, "gray2" }, + { 51*C, 51*C, 51*C, "gray20" }, + { 54*C, 54*C, 54*C, "gray21" }, + { 56*C, 56*C, 56*C, "gray22" }, + { 59*C, 59*C, 59*C, "gray23" }, + { 61*C, 61*C, 61*C, "gray24" }, + { 64*C, 64*C, 64*C, "gray25" }, + { 66*C, 66*C, 66*C, "gray26" }, + { 69*C, 69*C, 69*C, "gray27" }, + { 71*C, 71*C, 71*C, "gray28" }, + { 74*C, 74*C, 74*C, "gray29" }, + { 8*C, 8*C, 8*C, "gray3" }, + { 77*C, 77*C, 77*C, "gray30" }, + { 79*C, 79*C, 79*C, "gray31" }, + { 82*C, 82*C, 82*C, "gray32" }, + { 84*C, 84*C, 84*C, "gray33" }, + { 87*C, 87*C, 87*C, "gray34" }, + { 89*C, 89*C, 89*C, "gray35" }, + { 92*C, 92*C, 92*C, "gray36" }, + { 94*C, 94*C, 94*C, "gray37" }, + { 97*C, 97*C, 97*C, "gray38" }, + { 99*C, 99*C, 99*C, "gray39" }, + { 10*C, 10*C, 10*C, "gray4" }, + { 102*C, 102*C, 102*C, "gray40" }, + { 105*C, 105*C, 105*C, "gray41" }, + { 107*C, 107*C, 107*C, "gray42" }, + { 110*C, 110*C, 110*C, "gray43" }, + { 112*C, 112*C, 112*C, "gray44" }, + { 115*C, 115*C, 115*C, "gray45" }, + { 117*C, 117*C, 117*C, "gray46" }, + { 120*C, 120*C, 120*C, "gray47" }, + { 122*C, 122*C, 122*C, "gray48" }, + { 125*C, 125*C, 125*C, "gray49" }, + { 13*C, 13*C, 13*C, "gray5" }, + { 127*C, 127*C, 127*C, "gray50" }, + { 130*C, 130*C, 130*C, "gray51" }, + { 133*C, 133*C, 133*C, "gray52" }, + { 135*C, 135*C, 135*C, "gray53" }, + { 138*C, 138*C, 138*C, "gray54" }, + { 140*C, 140*C, 140*C, "gray55" }, + { 143*C, 143*C, 143*C, "gray56" }, + { 145*C, 145*C, 145*C, "gray57" }, + { 148*C, 148*C, 148*C, "gray58" }, + { 150*C, 150*C, 150*C, "gray59" }, + { 15*C, 15*C, 15*C, "gray6" }, + { 153*C, 153*C, 153*C, "gray60" }, + { 156*C, 156*C, 156*C, "gray61" }, + { 158*C, 158*C, 158*C, "gray62" }, + { 161*C, 161*C, 161*C, "gray63" }, + { 163*C, 163*C, 163*C, "gray64" }, + { 166*C, 166*C, 166*C, "gray65" }, + { 168*C, 168*C, 168*C, "gray66" }, + { 171*C, 171*C, 171*C, "gray67" }, + { 173*C, 173*C, 173*C, "gray68" }, + { 176*C, 176*C, 176*C, "gray69" }, + { 18*C, 18*C, 18*C, "gray7" }, + { 179*C, 179*C, 179*C, "gray70" }, + { 181*C, 181*C, 181*C, "gray71" }, + { 184*C, 184*C, 184*C, "gray72" }, + { 186*C, 186*C, 186*C, "gray73" }, + { 189*C, 189*C, 189*C, "gray74" }, + { 191*C, 191*C, 191*C, "gray75" }, + { 194*C, 194*C, 194*C, "gray76" }, + { 196*C, 196*C, 196*C, "gray77" }, + { 199*C, 199*C, 199*C, "gray78" }, + { 201*C, 201*C, 201*C, "gray79" }, + { 20*C, 20*C, 20*C, "gray8" }, + { 204*C, 204*C, 204*C, "gray80" }, + { 207*C, 207*C, 207*C, "gray81" }, + { 209*C, 209*C, 209*C, "gray82" }, + { 212*C, 212*C, 212*C, "gray83" }, + { 214*C, 214*C, 214*C, "gray84" }, + { 217*C, 217*C, 217*C, "gray85" }, + { 219*C, 219*C, 219*C, "gray86" }, + { 222*C, 222*C, 222*C, "gray87" }, + { 224*C, 224*C, 224*C, "gray88" }, + { 227*C, 227*C, 227*C, "gray89" }, + { 23*C, 23*C, 23*C, "gray9" }, + { 229*C, 229*C, 229*C, "gray90" }, + { 232*C, 232*C, 232*C, "gray91" }, + { 235*C, 235*C, 235*C, "gray92" }, + { 237*C, 237*C, 237*C, "gray93" }, + { 240*C, 240*C, 240*C, "gray94" }, + { 242*C, 242*C, 242*C, "gray95" }, + { 245*C, 245*C, 245*C, "gray96" }, + { 247*C, 247*C, 247*C, "gray97" }, + { 250*C, 250*C, 250*C, "gray98" }, + { 252*C, 252*C, 252*C, "gray99" }, + { 0*C, 255*C, 0*C, "green" }, + { 173*C, 255*C, 47*C, "green yellow" }, + { 0*C, 255*C, 0*C, "green1" }, + { 0*C, 238*C, 0*C, "green2" }, + { 0*C, 205*C, 0*C, "green3" }, + { 0*C, 139*C, 0*C, "green4" }, + { 173*C, 255*C, 47*C, "GreenYellow" }, + { 190*C, 190*C, 190*C, "grey" }, + { 0*C, 0*C, 0*C, "grey0" }, + { 3*C, 3*C, 3*C, "grey1" }, + { 26*C, 26*C, 26*C, "grey10" }, + { 255*C, 255*C, 255*C, "grey100" }, + { 28*C, 28*C, 28*C, "grey11" }, + { 31*C, 31*C, 31*C, "grey12" }, + { 33*C, 33*C, 33*C, "grey13" }, + { 36*C, 36*C, 36*C, "grey14" }, + { 38*C, 38*C, 38*C, "grey15" }, + { 41*C, 41*C, 41*C, "grey16" }, + { 43*C, 43*C, 43*C, "grey17" }, + { 46*C, 46*C, 46*C, "grey18" }, + { 48*C, 48*C, 48*C, "grey19" }, + { 5*C, 5*C, 5*C, "grey2" }, + { 51*C, 51*C, 51*C, "grey20" }, + { 54*C, 54*C, 54*C, "grey21" }, + { 56*C, 56*C, 56*C, "grey22" }, + { 59*C, 59*C, 59*C, "grey23" }, + { 61*C, 61*C, 61*C, "grey24" }, + { 64*C, 64*C, 64*C, "grey25" }, + { 66*C, 66*C, 66*C, "grey26" }, + { 69*C, 69*C, 69*C, "grey27" }, + { 71*C, 71*C, 71*C, "grey28" }, + { 74*C, 74*C, 74*C, "grey29" }, + { 8*C, 8*C, 8*C, "grey3" }, + { 77*C, 77*C, 77*C, "grey30" }, + { 79*C, 79*C, 79*C, "grey31" }, + { 82*C, 82*C, 82*C, "grey32" }, + { 84*C, 84*C, 84*C, "grey33" }, + { 87*C, 87*C, 87*C, "grey34" }, + { 89*C, 89*C, 89*C, "grey35" }, + { 92*C, 92*C, 92*C, "grey36" }, + { 94*C, 94*C, 94*C, "grey37" }, + { 97*C, 97*C, 97*C, "grey38" }, + { 99*C, 99*C, 99*C, "grey39" }, + { 10*C, 10*C, 10*C, "grey4" }, + { 102*C, 102*C, 102*C, "grey40" }, + { 105*C, 105*C, 105*C, "grey41" }, + { 107*C, 107*C, 107*C, "grey42" }, + { 110*C, 110*C, 110*C, "grey43" }, + { 112*C, 112*C, 112*C, "grey44" }, + { 115*C, 115*C, 115*C, "grey45" }, + { 117*C, 117*C, 117*C, "grey46" }, + { 120*C, 120*C, 120*C, "grey47" }, + { 122*C, 122*C, 122*C, "grey48" }, + { 125*C, 125*C, 125*C, "grey49" }, + { 13*C, 13*C, 13*C, "grey5" }, + { 127*C, 127*C, 127*C, "grey50" }, + { 130*C, 130*C, 130*C, "grey51" }, + { 133*C, 133*C, 133*C, "grey52" }, + { 135*C, 135*C, 135*C, "grey53" }, + { 138*C, 138*C, 138*C, "grey54" }, + { 140*C, 140*C, 140*C, "grey55" }, + { 143*C, 143*C, 143*C, "grey56" }, + { 145*C, 145*C, 145*C, "grey57" }, + { 148*C, 148*C, 148*C, "grey58" }, + { 150*C, 150*C, 150*C, "grey59" }, + { 15*C, 15*C, 15*C, "grey6" }, + { 153*C, 153*C, 153*C, "grey60" }, + { 156*C, 156*C, 156*C, "grey61" }, + { 158*C, 158*C, 158*C, "grey62" }, + { 161*C, 161*C, 161*C, "grey63" }, + { 163*C, 163*C, 163*C, "grey64" }, + { 166*C, 166*C, 166*C, "grey65" }, + { 168*C, 168*C, 168*C, "grey66" }, + { 171*C, 171*C, 171*C, "grey67" }, + { 173*C, 173*C, 173*C, "grey68" }, + { 176*C, 176*C, 176*C, "grey69" }, + { 18*C, 18*C, 18*C, "grey7" }, + { 179*C, 179*C, 179*C, "grey70" }, + { 181*C, 181*C, 181*C, "grey71" }, + { 184*C, 184*C, 184*C, "grey72" }, + { 186*C, 186*C, 186*C, "grey73" }, + { 189*C, 189*C, 189*C, "grey74" }, + { 191*C, 191*C, 191*C, "grey75" }, + { 194*C, 194*C, 194*C, "grey76" }, + { 196*C, 196*C, 196*C, "grey77" }, + { 199*C, 199*C, 199*C, "grey78" }, + { 201*C, 201*C, 201*C, "grey79" }, + { 20*C, 20*C, 20*C, "grey8" }, + { 204*C, 204*C, 204*C, "grey80" }, + { 207*C, 207*C, 207*C, "grey81" }, + { 209*C, 209*C, 209*C, "grey82" }, + { 212*C, 212*C, 212*C, "grey83" }, + { 214*C, 214*C, 214*C, "grey84" }, + { 217*C, 217*C, 217*C, "grey85" }, + { 219*C, 219*C, 219*C, "grey86" }, + { 222*C, 222*C, 222*C, "grey87" }, + { 224*C, 224*C, 224*C, "grey88" }, + { 227*C, 227*C, 227*C, "grey89" }, + { 23*C, 23*C, 23*C, "grey9" }, + { 229*C, 229*C, 229*C, "grey90" }, + { 232*C, 232*C, 232*C, "grey91" }, + { 235*C, 235*C, 235*C, "grey92" }, + { 237*C, 237*C, 237*C, "grey93" }, + { 240*C, 240*C, 240*C, "grey94" }, + { 242*C, 242*C, 242*C, "grey95" }, + { 245*C, 245*C, 245*C, "grey96" }, + { 247*C, 247*C, 247*C, "grey97" }, + { 250*C, 250*C, 250*C, "grey98" }, + { 252*C, 252*C, 252*C, "grey99" }, + { 240*C, 255*C, 240*C, "honeydew" }, + { 240*C, 255*C, 240*C, "honeydew1" }, + { 224*C, 238*C, 224*C, "honeydew2" }, + { 193*C, 205*C, 193*C, "honeydew3" }, + { 131*C, 139*C, 131*C, "honeydew4" }, + { 255*C, 105*C, 180*C, "hot pink" }, + { 255*C, 105*C, 180*C, "HotPink" }, + { 255*C, 110*C, 180*C, "HotPink1" }, + { 238*C, 106*C, 167*C, "HotPink2" }, + { 205*C, 96*C, 144*C, "HotPink3" }, + { 139*C, 58*C, 98*C, "HotPink4" }, + { 205*C, 92*C, 92*C, "indian red" }, + { 205*C, 92*C, 92*C, "IndianRed" }, + { 255*C, 106*C, 106*C, "IndianRed1" }, + { 238*C, 99*C, 99*C, "IndianRed2" }, + { 205*C, 85*C, 85*C, "IndianRed3" }, + { 139*C, 58*C, 58*C, "IndianRed4" }, + { 255*C, 255*C, 240*C, "ivory" }, + { 255*C, 255*C, 240*C, "ivory1" }, + { 238*C, 238*C, 224*C, "ivory2" }, + { 205*C, 205*C, 193*C, "ivory3" }, + { 139*C, 139*C, 131*C, "ivory4" }, + { 240*C, 230*C, 140*C, "khaki" }, + { 255*C, 246*C, 143*C, "khaki1" }, + { 238*C, 230*C, 133*C, "khaki2" }, + { 205*C, 198*C, 115*C, "khaki3" }, + { 139*C, 134*C, 78*C, "khaki4" }, + { 230*C, 230*C, 250*C, "lavender" }, + { 255*C, 240*C, 245*C, "lavender blush" }, + { 255*C, 240*C, 245*C, "LavenderBlush" }, + { 255*C, 240*C, 245*C, "LavenderBlush1" }, + { 238*C, 224*C, 229*C, "LavenderBlush2" }, + { 205*C, 193*C, 197*C, "LavenderBlush3" }, + { 139*C, 131*C, 134*C, "LavenderBlush4" }, + { 124*C, 252*C, 0*C, "lawn green" }, + { 124*C, 252*C, 0*C, "LawnGreen" }, + { 255*C, 250*C, 205*C, "lemon chiffon" }, + { 255*C, 250*C, 205*C, "LemonChiffon" }, + { 255*C, 250*C, 205*C, "LemonChiffon1" }, + { 238*C, 233*C, 191*C, "LemonChiffon2" }, + { 205*C, 201*C, 165*C, "LemonChiffon3" }, + { 139*C, 137*C, 112*C, "LemonChiffon4" }, + { 173*C, 216*C, 230*C, "light blue" }, + { 240*C, 128*C, 128*C, "light coral" }, + { 224*C, 255*C, 255*C, "light cyan" }, + { 238*C, 221*C, 130*C, "light goldenrod" }, + { 250*C, 250*C, 210*C, "light goldenrod yellow" }, + { 211*C, 211*C, 211*C, "light gray" }, + { 144*C, 238*C, 144*C, "light green" }, + { 211*C, 211*C, 211*C, "light grey" }, + { 255*C, 182*C, 193*C, "light pink" }, + { 255*C, 160*C, 122*C, "light salmon" }, + { 32*C, 178*C, 170*C, "light sea green" }, + { 135*C, 206*C, 250*C, "light sky blue" }, + { 132*C, 112*C, 255*C, "light slate blue" }, + { 119*C, 136*C, 153*C, "light slate gray" }, + { 119*C, 136*C, 153*C, "light slate grey" }, + { 176*C, 196*C, 222*C, "light steel blue" }, + { 255*C, 255*C, 224*C, "light yellow" }, + { 173*C, 216*C, 230*C, "LightBlue" }, + { 191*C, 239*C, 255*C, "LightBlue1" }, + { 178*C, 223*C, 238*C, "LightBlue2" }, + { 154*C, 192*C, 205*C, "LightBlue3" }, + { 104*C, 131*C, 139*C, "LightBlue4" }, + { 240*C, 128*C, 128*C, "LightCoral" }, + { 224*C, 255*C, 255*C, "LightCyan" }, + { 224*C, 255*C, 255*C, "LightCyan1" }, + { 209*C, 238*C, 238*C, "LightCyan2" }, + { 180*C, 205*C, 205*C, "LightCyan3" }, + { 122*C, 139*C, 139*C, "LightCyan4" }, + { 238*C, 221*C, 130*C, "LightGoldenrod" }, + { 255*C, 236*C, 139*C, "LightGoldenrod1" }, + { 238*C, 220*C, 130*C, "LightGoldenrod2" }, + { 205*C, 190*C, 112*C, "LightGoldenrod3" }, + { 139*C, 129*C, 76*C, "LightGoldenrod4" }, + { 250*C, 250*C, 210*C, "LightGoldenrodYellow" }, + { 211*C, 211*C, 211*C, "LightGray" }, + { 144*C, 238*C, 144*C, "LightGreen" }, + { 211*C, 211*C, 211*C, "LightGrey" }, + { 255*C, 182*C, 193*C, "LightPink" }, + { 255*C, 174*C, 185*C, "LightPink1" }, + { 238*C, 162*C, 173*C, "LightPink2" }, + { 205*C, 140*C, 149*C, "LightPink3" }, + { 139*C, 95*C, 101*C, "LightPink4" }, + { 255*C, 160*C, 122*C, "LightSalmon" }, + { 255*C, 160*C, 122*C, "LightSalmon1" }, + { 238*C, 149*C, 114*C, "LightSalmon2" }, + { 205*C, 129*C, 98*C, "LightSalmon3" }, + { 139*C, 87*C, 66*C, "LightSalmon4" }, + { 32*C, 178*C, 170*C, "LightSeaGreen" }, + { 135*C, 206*C, 250*C, "LightSkyBlue" }, + { 176*C, 226*C, 255*C, "LightSkyBlue1" }, + { 164*C, 211*C, 238*C, "LightSkyBlue2" }, + { 141*C, 182*C, 205*C, "LightSkyBlue3" }, + { 96*C, 123*C, 139*C, "LightSkyBlue4" }, + { 132*C, 112*C, 255*C, "LightSlateBlue" }, + { 119*C, 136*C, 153*C, "LightSlateGray" }, + { 119*C, 136*C, 153*C, "LightSlateGrey" }, + { 176*C, 196*C, 222*C, "LightSteelBlue" }, + { 202*C, 225*C, 255*C, "LightSteelBlue1" }, + { 188*C, 210*C, 238*C, "LightSteelBlue2" }, + { 162*C, 181*C, 205*C, "LightSteelBlue3" }, + { 110*C, 123*C, 139*C, "LightSteelBlue4" }, + { 255*C, 255*C, 224*C, "LightYellow" }, + { 255*C, 255*C, 224*C, "LightYellow1" }, + { 238*C, 238*C, 209*C, "LightYellow2" }, + { 205*C, 205*C, 180*C, "LightYellow3" }, + { 139*C, 139*C, 122*C, "LightYellow4" }, + { 50*C, 205*C, 50*C, "lime green" }, + { 50*C, 205*C, 50*C, "LimeGreen" }, + { 250*C, 240*C, 230*C, "linen" }, + { 255*C, 0*C, 255*C, "magenta" }, + { 255*C, 0*C, 255*C, "magenta1" }, + { 238*C, 0*C, 238*C, "magenta2" }, + { 205*C, 0*C, 205*C, "magenta3" }, + { 139*C, 0*C, 139*C, "magenta4" }, + { 176*C, 48*C, 96*C, "maroon" }, + { 255*C, 52*C, 179*C, "maroon1" }, + { 238*C, 48*C, 167*C, "maroon2" }, + { 205*C, 41*C, 144*C, "maroon3" }, + { 139*C, 28*C, 98*C, "maroon4" }, + { 102*C, 205*C, 170*C, "medium aquamarine" }, + { 0*C, 0*C, 205*C, "medium blue" }, + { 186*C, 85*C, 211*C, "medium orchid" }, + { 147*C, 112*C, 219*C, "medium purple" }, + { 60*C, 179*C, 113*C, "medium sea green" }, + { 123*C, 104*C, 238*C, "medium slate blue" }, + { 0*C, 250*C, 154*C, "medium spring green" }, + { 72*C, 209*C, 204*C, "medium turquoise" }, + { 199*C, 21*C, 133*C, "medium violet red" }, + { 102*C, 205*C, 170*C, "MediumAquamarine" }, + { 0*C, 0*C, 205*C, "MediumBlue" }, + { 186*C, 85*C, 211*C, "MediumOrchid" }, + { 224*C, 102*C, 255*C, "MediumOrchid1" }, + { 209*C, 95*C, 238*C, "MediumOrchid2" }, + { 180*C, 82*C, 205*C, "MediumOrchid3" }, + { 122*C, 55*C, 139*C, "MediumOrchid4" }, + { 147*C, 112*C, 219*C, "MediumPurple" }, + { 171*C, 130*C, 255*C, "MediumPurple1" }, + { 159*C, 121*C, 238*C, "MediumPurple2" }, + { 137*C, 104*C, 205*C, "MediumPurple3" }, + { 93*C, 71*C, 139*C, "MediumPurple4" }, + { 60*C, 179*C, 113*C, "MediumSeaGreen" }, + { 123*C, 104*C, 238*C, "MediumSlateBlue" }, + { 0*C, 250*C, 154*C, "MediumSpringGreen" }, + { 72*C, 209*C, 204*C, "MediumTurquoise" }, + { 199*C, 21*C, 133*C, "MediumVioletRed" }, + { 25*C, 25*C, 112*C, "midnight blue" }, + { 25*C, 25*C, 112*C, "MidnightBlue" }, + { 245*C, 255*C, 250*C, "mint cream" }, + { 245*C, 255*C, 250*C, "MintCream" }, + { 255*C, 228*C, 225*C, "misty rose" }, + { 255*C, 228*C, 225*C, "MistyRose" }, + { 255*C, 228*C, 225*C, "MistyRose1" }, + { 238*C, 213*C, 210*C, "MistyRose2" }, + { 205*C, 183*C, 181*C, "MistyRose3" }, + { 139*C, 125*C, 123*C, "MistyRose4" }, + { 255*C, 228*C, 181*C, "moccasin" }, + { 255*C, 222*C, 173*C, "navajo white" }, + { 255*C, 222*C, 173*C, "NavajoWhite" }, + { 255*C, 222*C, 173*C, "NavajoWhite1" }, + { 238*C, 207*C, 161*C, "NavajoWhite2" }, + { 205*C, 179*C, 139*C, "NavajoWhite3" }, + { 139*C, 121*C, 94*C, "NavajoWhite4" }, + { 0*C, 0*C, 128*C, "navy" }, + { 0*C, 0*C, 128*C, "navy blue" }, + { 0*C, 0*C, 128*C, "NavyBlue" }, + { 253*C, 245*C, 230*C, "old lace" }, + { 253*C, 245*C, 230*C, "OldLace" }, + { 107*C, 142*C, 35*C, "olive drab" }, + { 107*C, 142*C, 35*C, "OliveDrab" }, + { 192*C, 255*C, 62*C, "OliveDrab1" }, + { 179*C, 238*C, 58*C, "OliveDrab2" }, + { 154*C, 205*C, 50*C, "OliveDrab3" }, + { 105*C, 139*C, 34*C, "OliveDrab4" }, + { 255*C, 165*C, 0*C, "orange" }, + { 255*C, 69*C, 0*C, "orange red" }, + { 255*C, 165*C, 0*C, "orange1" }, + { 238*C, 154*C, 0*C, "orange2" }, + { 205*C, 133*C, 0*C, "orange3" }, + { 139*C, 90*C, 0*C, "orange4" }, + { 255*C, 69*C, 0*C, "OrangeRed" }, + { 255*C, 69*C, 0*C, "OrangeRed1" }, + { 238*C, 64*C, 0*C, "OrangeRed2" }, + { 205*C, 55*C, 0*C, "OrangeRed3" }, + { 139*C, 37*C, 0*C, "OrangeRed4" }, + { 218*C, 112*C, 214*C, "orchid" }, + { 255*C, 131*C, 250*C, "orchid1" }, + { 238*C, 122*C, 233*C, "orchid2" }, + { 205*C, 105*C, 201*C, "orchid3" }, + { 139*C, 71*C, 137*C, "orchid4" }, + { 238*C, 232*C, 170*C, "pale goldenrod" }, + { 152*C, 251*C, 152*C, "pale green" }, + { 175*C, 238*C, 238*C, "pale turquoise" }, + { 219*C, 112*C, 147*C, "pale violet red" }, + { 238*C, 232*C, 170*C, "PaleGoldenrod" }, + { 152*C, 251*C, 152*C, "PaleGreen" }, + { 154*C, 255*C, 154*C, "PaleGreen1" }, + { 144*C, 238*C, 144*C, "PaleGreen2" }, + { 124*C, 205*C, 124*C, "PaleGreen3" }, + { 84*C, 139*C, 84*C, "PaleGreen4" }, + { 175*C, 238*C, 238*C, "PaleTurquoise" }, + { 187*C, 255*C, 255*C, "PaleTurquoise1" }, + { 174*C, 238*C, 238*C, "PaleTurquoise2" }, + { 150*C, 205*C, 205*C, "PaleTurquoise3" }, + { 102*C, 139*C, 139*C, "PaleTurquoise4" }, + { 219*C, 112*C, 147*C, "PaleVioletRed" }, + { 255*C, 130*C, 171*C, "PaleVioletRed1" }, + { 238*C, 121*C, 159*C, "PaleVioletRed2" }, + { 205*C, 104*C, 137*C, "PaleVioletRed3" }, + { 139*C, 71*C, 93*C, "PaleVioletRed4" }, + { 255*C, 239*C, 213*C, "papaya whip" }, + { 255*C, 239*C, 213*C, "PapayaWhip" }, + { 255*C, 218*C, 185*C, "peach puff" }, + { 255*C, 218*C, 185*C, "PeachPuff" }, + { 255*C, 218*C, 185*C, "PeachPuff1" }, + { 238*C, 203*C, 173*C, "PeachPuff2" }, + { 205*C, 175*C, 149*C, "PeachPuff3" }, + { 139*C, 119*C, 101*C, "PeachPuff4" }, + { 205*C, 133*C, 63*C, "peru" }, + { 255*C, 192*C, 203*C, "pink" }, + { 255*C, 181*C, 197*C, "pink1" }, + { 238*C, 169*C, 184*C, "pink2" }, + { 205*C, 145*C, 158*C, "pink3" }, + { 139*C, 99*C, 108*C, "pink4" }, + { 221*C, 160*C, 221*C, "plum" }, + { 255*C, 187*C, 255*C, "plum1" }, + { 238*C, 174*C, 238*C, "plum2" }, + { 205*C, 150*C, 205*C, "plum3" }, + { 139*C, 102*C, 139*C, "plum4" }, + { 176*C, 224*C, 230*C, "powder blue" }, + { 176*C, 224*C, 230*C, "PowderBlue" }, + { 160*C, 32*C, 240*C, "purple" }, + { 155*C, 48*C, 255*C, "purple1" }, + { 145*C, 44*C, 238*C, "purple2" }, + { 125*C, 38*C, 205*C, "purple3" }, + { 85*C, 26*C, 139*C, "purple4" }, + { 255*C, 0*C, 0*C, "red" }, + { 255*C, 0*C, 0*C, "red1" }, + { 238*C, 0*C, 0*C, "red2" }, + { 205*C, 0*C, 0*C, "red3" }, + { 139*C, 0*C, 0*C, "red4" }, + { 188*C, 143*C, 143*C, "rosy brown" }, + { 188*C, 143*C, 143*C, "RosyBrown" }, + { 255*C, 193*C, 193*C, "RosyBrown1" }, + { 238*C, 180*C, 180*C, "RosyBrown2" }, + { 205*C, 155*C, 155*C, "RosyBrown3" }, + { 139*C, 105*C, 105*C, "RosyBrown4" }, + { 65*C, 105*C, 225*C, "royal blue" }, + { 65*C, 105*C, 225*C, "RoyalBlue" }, + { 72*C, 118*C, 255*C, "RoyalBlue1" }, + { 67*C, 110*C, 238*C, "RoyalBlue2" }, + { 58*C, 95*C, 205*C, "RoyalBlue3" }, + { 39*C, 64*C, 139*C, "RoyalBlue4" }, + { 139*C, 69*C, 19*C, "saddle brown" }, + { 139*C, 69*C, 19*C, "SaddleBrown" }, + { 250*C, 128*C, 114*C, "salmon" }, + { 255*C, 140*C, 105*C, "salmon1" }, + { 238*C, 130*C, 98*C, "salmon2" }, + { 205*C, 112*C, 84*C, "salmon3" }, + { 139*C, 76*C, 57*C, "salmon4" }, + { 244*C, 164*C, 96*C, "sandy brown" }, + { 244*C, 164*C, 96*C, "SandyBrown" }, + { 46*C, 139*C, 87*C, "sea green" }, + { 46*C, 139*C, 87*C, "SeaGreen" }, + { 84*C, 255*C, 159*C, "SeaGreen1" }, + { 78*C, 238*C, 148*C, "SeaGreen2" }, + { 67*C, 205*C, 128*C, "SeaGreen3" }, + { 46*C, 139*C, 87*C, "SeaGreen4" }, + { 255*C, 245*C, 238*C, "seashell" }, + { 255*C, 245*C, 238*C, "seashell1" }, + { 238*C, 229*C, 222*C, "seashell2" }, + { 205*C, 197*C, 191*C, "seashell3" }, + { 139*C, 134*C, 130*C, "seashell4" }, + { 160*C, 82*C, 45*C, "sienna" }, + { 255*C, 130*C, 71*C, "sienna1" }, + { 238*C, 121*C, 66*C, "sienna2" }, + { 205*C, 104*C, 57*C, "sienna3" }, + { 139*C, 71*C, 38*C, "sienna4" }, + { 135*C, 206*C, 235*C, "sky blue" }, + { 135*C, 206*C, 235*C, "SkyBlue" }, + { 135*C, 206*C, 255*C, "SkyBlue1" }, + { 126*C, 192*C, 238*C, "SkyBlue2" }, + { 108*C, 166*C, 205*C, "SkyBlue3" }, + { 74*C, 112*C, 139*C, "SkyBlue4" }, + { 106*C, 90*C, 205*C, "slate blue" }, + { 112*C, 128*C, 144*C, "slate gray" }, + { 112*C, 128*C, 144*C, "slate grey" }, + { 106*C, 90*C, 205*C, "SlateBlue" }, + { 131*C, 111*C, 255*C, "SlateBlue1" }, + { 122*C, 103*C, 238*C, "SlateBlue2" }, + { 105*C, 89*C, 205*C, "SlateBlue3" }, + { 71*C, 60*C, 139*C, "SlateBlue4" }, + { 112*C, 128*C, 144*C, "SlateGray" }, + { 198*C, 226*C, 255*C, "SlateGray1" }, + { 185*C, 211*C, 238*C, "SlateGray2" }, + { 159*C, 182*C, 205*C, "SlateGray3" }, + { 108*C, 123*C, 139*C, "SlateGray4" }, + { 112*C, 128*C, 144*C, "SlateGrey" }, + { 255*C, 250*C, 250*C, "snow" }, + { 255*C, 250*C, 250*C, "snow1" }, + { 238*C, 233*C, 233*C, "snow2" }, + { 205*C, 201*C, 201*C, "snow3" }, + { 139*C, 137*C, 137*C, "snow4" }, + { 0*C, 255*C, 127*C, "spring green" }, + { 0*C, 255*C, 127*C, "SpringGreen" }, + { 0*C, 255*C, 127*C, "SpringGreen1" }, + { 0*C, 238*C, 118*C, "SpringGreen2" }, + { 0*C, 205*C, 102*C, "SpringGreen3" }, + { 0*C, 139*C, 69*C, "SpringGreen4" }, + { 70*C, 130*C, 180*C, "steel blue" }, + { 70*C, 130*C, 180*C, "SteelBlue" }, + { 99*C, 184*C, 255*C, "SteelBlue1" }, + { 92*C, 172*C, 238*C, "SteelBlue2" }, + { 79*C, 148*C, 205*C, "SteelBlue3" }, + { 54*C, 100*C, 139*C, "SteelBlue4" }, + { 210*C, 180*C, 140*C, "tan" }, + { 255*C, 165*C, 79*C, "tan1" }, + { 238*C, 154*C, 73*C, "tan2" }, + { 205*C, 133*C, 63*C, "tan3" }, + { 139*C, 90*C, 43*C, "tan4" }, + { 216*C, 191*C, 216*C, "thistle" }, + { 255*C, 225*C, 255*C, "thistle1" }, + { 238*C, 210*C, 238*C, "thistle2" }, + { 205*C, 181*C, 205*C, "thistle3" }, + { 139*C, 123*C, 139*C, "thistle4" }, + { 255*C, 99*C, 71*C, "tomato" }, + { 255*C, 99*C, 71*C, "tomato1" }, + { 238*C, 92*C, 66*C, "tomato2" }, + { 205*C, 79*C, 57*C, "tomato3" }, + { 139*C, 54*C, 38*C, "tomato4" }, + { 64*C, 224*C, 208*C, "turquoise" }, + { 0*C, 245*C, 255*C, "turquoise1" }, + { 0*C, 229*C, 238*C, "turquoise2" }, + { 0*C, 197*C, 205*C, "turquoise3" }, + { 0*C, 134*C, 139*C, "turquoise4" }, + { 238*C, 130*C, 238*C, "violet" }, + { 208*C, 32*C, 144*C, "violet red" }, + { 208*C, 32*C, 144*C, "VioletRed" }, + { 255*C, 62*C, 150*C, "VioletRed1" }, + { 238*C, 58*C, 140*C, "VioletRed2" }, + { 205*C, 50*C, 120*C, "VioletRed3" }, + { 139*C, 34*C, 82*C, "VioletRed4" }, + { 245*C, 222*C, 179*C, "wheat" }, + { 255*C, 231*C, 186*C, "wheat1" }, + { 238*C, 216*C, 174*C, "wheat2" }, + { 205*C, 186*C, 150*C, "wheat3" }, + { 139*C, 126*C, 102*C, "wheat4" }, + { 255*C, 255*C, 255*C, "white" }, + { 245*C, 245*C, 245*C, "white smoke" }, + { 245*C, 245*C, 245*C, "WhiteSmoke" }, + { 255*C, 255*C, 0*C, "yellow" }, + { 154*C, 205*C, 50*C, "yellow green" }, + { 255*C, 255*C, 0*C, "yellow1" }, + { 238*C, 238*C, 0*C, "yellow2" }, + { 205*C, 205*C, 0*C, "yellow3" }, + { 139*C, 139*C, 0*C, "yellow4" }, + { 154*C, 205*C, 50*C, "YellowGreen" } +}; + +#undef C + +#define NUM_KD_COLORS (sizeof (KdColors) / sizeof (KdColors[0])) + +Bool +OsInitColors() +{ + return TRUE; +} + +Bool +OsLookupColor(int screen, + char *s_name, + unsigned int len, + unsigned short *pred, + unsigned short *pgreen, + unsigned short *pblue) +{ + const KdNamedColor *c; + unsigned char *name = (unsigned char *) s_name; + int low, mid, high; + int r; + + low = 0; + high = NUM_KD_COLORS; + while (high - low > 0) + { + mid = (low + high) / 2; + c = &KdColors[mid]; + r = KdStrCaseCmp (c->name, name, len); + if (r == 0) + { + *pred = c->red; + *pgreen = c->green; + *pblue = c->blue; + return TRUE; + } + if (r < 0) + { + if (high == mid) + break; + high = mid; + } + else + { + if (low == mid) + break; + low = mid; + } + } + return FALSE; +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/src/kloadmap.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/src/kloadmap.c @@ -0,0 +1,203 @@ +/* + * Id: kloadmap.c,v 1.1 1999/11/02 03:54:46 keithp Exp $ + * + * Copyright © 1999 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/kloadmap.c,v 1.1 1999/11/19 13:53:50 hohndel Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "kdrive.h" +#include "kkeymap.h" + +#ifdef WINDOWS +#define KM_BUF 1024 +#define KM_EOF -1 + +typedef struct _km_file { + HANDLE handle; + char buf[KM_BUF]; + char *bufptr; + DWORD remain; +} km_file; + +int +km_fill (km_file *kf) +{ + BOOL r; + + NCD_DEBUG ((DEBUG_INIT, "km_fill")); + r = ReadFile (kf->handle, kf->buf, KM_BUF, + &kf->remain, NULL); + NCD_DEBUG ((DEBUG_INIT, "Got %d", kf->remain)); + if (!r || !kf->remain) + return KM_EOF; + kf->bufptr = kf->buf; + --kf->remain; + return *kf->bufptr++; +} + +#define km_getchar(kf) ((kf)->remain-- ? *kf->bufptr++ : km_fill (kf)) +#else +#define km_getchar(kf) getc(kf) +#endif + +BOOL +km_word (km_file *kf, char *buf, int len) +{ + int c; + + for (;;) + { + switch (c = km_getchar (kf)) { + case KM_EOF: + return FALSE; + case ' ': + case '\t': + case '\n': + case '\r': + continue; + } + break; + } + len--; + while (len--) + { + *buf++ = c; + switch (c = km_getchar (kf)) { + case KM_EOF: + case ' ': + case '\t': + case '\n': + case '\r': + *buf++ = '\0'; + return TRUE; + } + } + return FALSE; +} + +BOOL +km_int (km_file *kf, int *r) +{ + char word[64]; + + if (km_word (kf, word, sizeof (word))) + { + *r = strtol (word, NULL, 0); + return TRUE; + } + return FALSE; +} + +WCHAR *winKbdExtensions[] = { + L".xku", + L".xkb" +}; + +#define NUM_KBD_EXTENSIONS (sizeof (winKbdExtensions) / sizeof (winKbdExtensions[0])) + +BOOL +winLoadKeymap (void) +{ + WCHAR file[32 + KL_NAMELENGTH]; + WCHAR name[KL_NAMELENGTH]; + HKL layout; + km_file kf; + int width; + BOOL ret; + KeySym *m; + int scancode; + int w; + int e; + + layout = GetKeyboardLayout (0); + /* + * Pre-build 46 versions of ThinSTAR software return 0 + * for all layouts + */ + if (!layout) + return FALSE; + NCD_DEBUG ((DEBUG_INIT, "Keyboard layout 0x%x", layout)); + for (e = 0; e < NUM_KBD_EXTENSIONS; e++) + { + wstrcpy (file, L"\\Storage Card\\"); + wsprintf (name, TEXT("%08x"), layout); + wstrcat (file, name); + wstrcat (file, winKbdExtensions[e]); + NCD_DEBUG ((DEBUG_INIT, "Loading keymap from %S", file)); + kf.handle = CreateFile (file, + GENERIC_READ, + FILE_SHARE_READ|FILE_SHARE_WRITE, + NULL, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + NULL); + if (kf.handle != INVALID_HANDLE_VALUE) + break; + } + if (kf.handle == INVALID_HANDLE_VALUE) + { + NCD_DEBUG ((DEBUG_INIT, "No such file")); + return FALSE; + } + ret = FALSE; + kf.remain = 0; + /* + * Keymap format: + * + * flags (optional) + * width + * keycode -> keysym array (num_keycodes * width) + */ + if (!km_int (&kf, &width)) + goto bail1; + if (width & KEYMAP_FLAGS) + { + CEKeymapFlags = (unsigned long) width; + if (!km_int (&kf, &width)) + goto bail1; + } + else + CEKeymapFlags = 0; + if (width > MAX_WIDTH) + goto bail1; + NCD_DEBUG ((DEBUG_INIT, "Keymap width %d flags 0x%x", + width, CEKeymapFlags)); + m = CEKeymap; + for (scancode = MIN_SCANCODE; scancode <= MAX_SCANCODE; scancode++) + { + for (w = 0; w < width; w++) + { + if (!km_int (&kf, m)) + break; + m++; + } + if (w != width) + break; + } + CEKeySyms.mapWidth = width; + ret = TRUE; +bail1: + CloseHandle (kf.handle); + return ret; +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/src/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/src/Makefile.in @@ -130,6 +130,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -208,6 +210,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -320,6 +323,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/src/kkeymap.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/src/kkeymap.c @@ -0,0 +1,238 @@ +/* + * Id: kkeymap.c,v 1.1 1999/11/02 03:54:46 keithp Exp $ + * + * Copyright © 1999 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/kkeymap.c,v 1.1 1999/11/19 13:53:49 hohndel Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "kdrive.h" +#include +#include "kkeymap.h" + +/* + * Map scan codes (both regular and synthesized from extended keys) + * to X keysyms + */ + +KeySym kdKeymap[(MAX_SCANCODE - MIN_SCANCODE + 1) * MAX_WIDTH] = { +/* These are directly mapped from DOS scanset 0 */ +/* 1 8 */ XK_Escape, NoSymbol, +/* 2 9 */ XK_1, XK_exclam, +/* 3 10 */ XK_2, XK_at, +/* 4 11 */ XK_3, XK_numbersign, +/* 5 12 */ XK_4, XK_dollar, +/* 6 13 */ XK_5, XK_percent, +/* 7 14 */ XK_6, XK_asciicircum, +/* 8 15 */ XK_7, XK_ampersand, +/* 9 16 */ XK_8, XK_asterisk, +/* 10 17 */ XK_9, XK_parenleft, +/* 11 18 */ XK_0, XK_parenright, +/* 12 19 */ XK_minus, XK_underscore, +/* 13 20 */ XK_equal, XK_plus, +/* 14 21 */ XK_BackSpace, NoSymbol, +/* 15 22 */ XK_Tab, NoSymbol, +/* 16 23 */ XK_Q, NoSymbol, +/* 17 24 */ XK_W, NoSymbol, +/* 18 25 */ XK_E, NoSymbol, +/* 19 26 */ XK_R, NoSymbol, +/* 20 27 */ XK_T, NoSymbol, +/* 21 28 */ XK_Y, NoSymbol, +/* 22 29 */ XK_U, NoSymbol, +/* 23 30 */ XK_I, NoSymbol, +/* 24 31 */ XK_O, NoSymbol, +/* 25 32 */ XK_P, NoSymbol, +/* 26 33 */ XK_bracketleft, XK_braceleft, +/* 27 34 */ XK_bracketright, XK_braceright, +/* 28 35 */ XK_Return, NoSymbol, +/* 29 36 */ XK_Control_L, NoSymbol, +/* 30 37 */ XK_A, NoSymbol, +/* 31 38 */ XK_S, NoSymbol, +/* 32 39 */ XK_D, NoSymbol, +/* 33 40 */ XK_F, NoSymbol, +/* 34 41 */ XK_G, NoSymbol, +/* 35 42 */ XK_H, NoSymbol, +/* 36 43 */ XK_J, NoSymbol, +/* 37 44 */ XK_K, NoSymbol, +/* 38 45 */ XK_L, NoSymbol, +/* 39 46 */ XK_semicolon, XK_colon, +/* 40 47 */ XK_apostrophe, XK_quotedbl, +/* 41 48 */ XK_grave, XK_asciitilde, +/* 42 49 */ XK_Shift_L, NoSymbol, +/* 43 50 */ XK_backslash, XK_bar, +/* 44 51 */ XK_Z, NoSymbol, +/* 45 52 */ XK_X, NoSymbol, +/* 46 53 */ XK_C, NoSymbol, +/* 47 54 */ XK_V, NoSymbol, +/* 48 55 */ XK_B, NoSymbol, +/* 49 56 */ XK_N, NoSymbol, +/* 50 57 */ XK_M, NoSymbol, +/* 51 58 */ XK_comma, XK_less, +/* 52 59 */ XK_period, XK_greater, +/* 53 60 */ XK_slash, XK_question, +/* 54 61 */ XK_Shift_R, NoSymbol, +/* 55 62 */ XK_KP_Multiply, NoSymbol, +/* 56 63 */ XK_Alt_L, XK_Meta_L, +/* 57 64 */ XK_space, NoSymbol, +/* 58 65 */ XK_Caps_Lock, NoSymbol, +/* 59 66 */ XK_F1, NoSymbol, +/* 60 67 */ XK_F2, NoSymbol, +/* 61 68 */ XK_F3, NoSymbol, +/* 62 69 */ XK_F4, NoSymbol, +/* 63 70 */ XK_F5, NoSymbol, +/* 64 71 */ XK_F6, NoSymbol, +/* 65 72 */ XK_F7, NoSymbol, +/* 66 73 */ XK_F8, NoSymbol, +/* 67 74 */ XK_F9, NoSymbol, +/* 68 75 */ XK_F10, NoSymbol, +/* 69 76 */ XK_Break, XK_Pause, +/* 70 77 */ XK_Scroll_Lock, NoSymbol, +/* 71 78 */ XK_KP_Home, XK_KP_7, +/* 72 79 */ XK_KP_Up, XK_KP_8, +/* 73 80 */ XK_KP_Page_Up, XK_KP_9, +/* 74 81 */ XK_KP_Subtract, NoSymbol, +/* 75 82 */ XK_KP_Left, XK_KP_4, +/* 76 83 */ XK_KP_5, NoSymbol, +/* 77 84 */ XK_KP_Right, XK_KP_6, +/* 78 85 */ XK_KP_Add, NoSymbol, +/* 79 86 */ XK_KP_End, XK_KP_1, +/* 80 87 */ XK_KP_Down, XK_KP_2, +/* 81 88 */ XK_KP_Page_Down, XK_KP_3, +/* 82 89 */ XK_KP_Insert, XK_KP_0, +/* 83 90 */ XK_KP_Delete, XK_KP_Decimal, +/* 84 91 */ NoSymbol, NoSymbol, +/* 85 92 */ NoSymbol, NoSymbol, +/* 86 93 */ NoSymbol, NoSymbol, +/* 87 94 */ XK_F11, NoSymbol, +/* 88 95 */ XK_F12, NoSymbol, + +/* These are remapped from the extended set (using ExtendMap) */ + +/* 89 96 */ XK_Control_R, NoSymbol, +/* 90 97 */ XK_KP_Enter, NoSymbol, +/* 91 98 */ XK_KP_Divide, NoSymbol, +/* 92 99 */ XK_Sys_Req, XK_Print, +/* 93 100 */ XK_Alt_R, XK_Meta_R, +/* 94 101 */ XK_Num_Lock, NoSymbol, +/* 95 102 */ XK_Home, NoSymbol, +/* 96 103 */ XK_Up, NoSymbol, +/* 97 104 */ XK_Page_Up, NoSymbol, +/* 98 105 */ XK_Left, NoSymbol, +/* 99 106 */ XK_Right, NoSymbol, +/* 100 107 */ XK_End, NoSymbol, +/* 101 108 */ XK_Down, NoSymbol, +/* 102 109 */ XK_Page_Down, NoSymbol, +/* 103 110 */ XK_Insert, NoSymbol, +/* 104 111 */ XK_Delete, NoSymbol, +/* 105 112 */ XK_Super_L, NoSymbol, +/* 106 113 */ XK_Super_R, NoSymbol, +/* 107 114 */ XK_Menu, NoSymbol, +/* 108 115 */ NoSymbol, NoSymbol, +/* 109 116 */ NoSymbol, NoSymbol, +/* 110 117 */ NoSymbol, NoSymbol, +/* 111 118 */ NoSymbol, NoSymbol, +/* 112 119 */ NoSymbol, NoSymbol, +; + +/* + * Map extended keys to additional scancodes + */ +KdExtendMap kdExtendMap[] = { + 0x1d, 89, /* Control_R */ + 0x1c, 90, /* KP_Enter */ + 0x35, 91, /* KP_Divide */ + 0x37, 92, /* Sys_Req */ + 0x38, 93, /* Alt_R */ + 0x45, 94, /* Num_Lock */ + 0x47, 95, /* Home */ + 0x48, 96, /* Up */ + 0x49, 97, /* Page_Up */ + 0x4b, 98, /* Left */ + 0x4d, 99, /* Right */ + 0x4f, 100, /* End */ + 0x50, 101, /* Down */ + 0x51, 102, /* Page_Down */ + 0x52, 103, /* Insert */ + 0x53, 104, /* Delete */ + 0x5b, 105, /* Super_L (Windows_L) */ + 0x5c, 106, /* Super_R (Windows_R) */ + 0x5d, 107, /* Menu */ + 0x46, 69, /* Break (with control pressed) */ +}; + +#define NUM_EXTEND (sizeof (kdExtendMap)/ sizeof (kdExtendMap[0])) + +int kdNumExtend = NUM_EXTEND; + +/* + * Map keys on Japanese keyboard far from zero back to reasonable values + */ +KdExtendMap kdJapanMap[] = { + 0x70, 108, /* next to Alt key */ + 0x73, 109, /* dash/vbar */ + 0x79, 110, /* right of space bar */ + 0x7b, 111, /* left of space bar */ + 0x7d, 112, /* Yen */ +}; + +#define NUM_JAPAN (sizeof (kdJapanMap)/sizeof (kdJapanMap[0])) + +int kdNumJapan = NUM_JAPAN; + +/* + * List of locking key codes + */ + +CARD8 kdLockMap[] = { + 65, + 101, + 77, +}; + +#define NUM_LOCK (sizeof (kdLockMap) / sizeof (kdLockMap[0])) + +int kdNumLock = NUM_LOCK; + +/* + * Map containing list of keys which the X server makes locking when + * the KEYMAP_LOCKING_ALTGR flag is set in CEKeymapFlags + */ + +CARD8 kdOptionalLockMap[] = { + 100, +}; + +#define NUM_OPTIONAL_LOCK (sizeof (kdOptionalLockMap) / sizeof (kdOptionalLockMap[0])) + +int kdNumOptionalLock = NUM_OPTIONAL_LOCK; + +CARD8 kdModMap[MAP_LENGTH]; + +unsigned long kdKeymapFlags = 0; + +KeySymsRec kdKeySyms = { + kdKeymap, + MIN_KEYCODE, + MAX_KEYCODE, + 2 +}; --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/neomagic/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/neomagic/Makefile.in @@ -130,6 +130,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -208,6 +210,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -320,6 +323,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/sis530/sisdraw.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/sis530/sisdraw.c @@ -0,0 +1,1723 @@ +/* + * Id: sisdraw.c,v 1.1 1999/11/02 08:17:24 keithp Exp $ + * + * Copyright © 1999 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/sis530/sisdraw.c,v 1.5 2000/08/09 17:52:44 keithp Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "sis.h" +#include "sisdraw.h" + +#include "Xmd.h" +#include "gcstruct.h" +#include "scrnintstr.h" +#include "pixmapstr.h" +#include "regionstr.h" +#include "mistruct.h" +#include "fontstruct.h" +#include "dixfontstr.h" +#include "fb.h" +#include "migc.h" +#include "miline.h" + +CARD8 sisPatRop[16] = { + /* GXclear */ 0x00, /* 0 */ + /* GXand */ 0xa0, /* src AND dst */ + /* GXandReverse */ 0x50, /* src AND NOT dst */ + /* GXcopy */ 0xf0, /* src */ + /* GXandInverted*/ 0x0a, /* NOT src AND dst */ + /* GXnoop */ 0xaa, /* dst */ + /* GXxor */ 0x5a, /* src XOR dst */ + /* GXor */ 0xfa, /* src OR dst */ + /* GXnor */ 0x05, /* NOT src AND NOT dst */ + /* GXequiv */ 0xa5, /* NOT src XOR dst */ + /* GXinvert */ 0x55, /* NOT dst */ + /* GXorReverse */ 0xf5, /* src OR NOT dst */ + /* GXcopyInverted*/ 0x0f, /* NOT src */ + /* GXorInverted */ 0xaf, /* NOT src OR dst */ + /* GXnand */ 0x5f, /* NOT src OR NOT dst */ + /* GXset */ 0xff, /* 1 */ +}; + +CARD8 sisBltRop[16] = { + /* GXclear */ 0x00, /* 0 */ + /* GXand */ 0x88, /* src AND dst */ + /* GXandReverse */ 0x44, /* src AND NOT dst */ + /* GXcopy */ 0xcc, /* src */ + /* GXandInverted*/ 0x22, /* NOT src AND dst */ + /* GXnoop */ 0xaa, /* dst */ + /* GXxor */ 0x66, /* src XOR dst */ + /* GXor */ 0xee, /* src OR dst */ + /* GXnor */ 0x11, /* NOT src AND NOT dst */ + /* GXequiv */ 0x99, /* NOT src XOR dst */ + /* GXinvert */ 0x55, /* NOT dst */ + /* GXorReverse */ 0xdd, /* src OR NOT dst */ + /* GXcopyInverted*/ 0x33, /* NOT src */ + /* GXorInverted */ 0xbb, /* NOT src OR dst */ + /* GXnand */ 0x77, /* NOT src OR NOT dst */ + /* GXset */ 0xff, /* 1 */ +}; + +/* Align blts to this boundary or risk trashing an in-progress expand */ +#define SIS_MIN_PATTERN 8 + +/* Do plane bits in this increment to balance CPU and graphics engine */ +#define SIS_PATTERN_INC 1024 + +typedef struct _SisExpand { + SisCardInfo *sisc; + SisScreenInfo *siss; + CARD32 off; + int last; +} SisExpand; + +static void +sisExpandInit (ScreenPtr pScreen, + SisExpand *e) +{ + KdScreenPriv(pScreen); + sisCardInfo(pScreenPriv); + sisScreenInfo(pScreenPriv); + + e->sisc = sisc; + e->siss = siss; + e->off = siss->expand_off; + e->last = 0; +} + +static CARD32 * +sisExpandAlloc (SisExpand *e, + int nb) +{ + SisCardInfo *sisc = e->sisc; + SisScreenInfo *siss = e->siss; + SisPtr sis = sisc->sis; + CARD32 off; + + /* round up to alignment boundary */ + nb = (nb + SIS_MIN_PATTERN-1) & ~(SIS_MIN_PATTERN-1); + + off = e->off + e->last; + if (off + nb > siss->expand_off + siss->expand_len) + { + _sisWaitIdleEmpty (sis); + off = siss->expand_off; + } + e->off = off; + e->last = nb; + return (CARD32 *) (sisc->frameBuffer + off); +} + +void +sisGlyphBltClipped (DrawablePtr pDrawable, + GCPtr pGC, + int x, + int y, + unsigned int nglyph, + CharInfoPtr *ppciInit, + Bool imageBlt) +{ + SetupSis(pDrawable->pScreen); + FbGCPrivPtr fbPriv = fbGetGCPrivate(pGC); + int height; + int width; + int xBack, yBack; + int hBack, wBack; + int nb, bwidth, nl; + FontPtr pfont = pGC->font; + CharInfoPtr pci; + CARD8 *bits8, b; + CARD16 *bits16; + CARD32 *bits32; + BoxPtr extents; + BoxRec bbox; + unsigned char alu; + CARD32 cmd; + SisExpand expand; + CARD32 *dst, d; + int nbytes; + int shift; + int x1, y1, x2, y2; + RegionPtr pClip = fbGetCompositeClip(pGC); + BoxPtr pBox; + int nbox; + int rect_in; + int widthBlt; + CharInfoPtr *ppci; + + x += pDrawable->x; + y += pDrawable->y; + + if (imageBlt) + { + xBack = x; + yBack = y - FONTASCENT(pGC->font); + wBack = 0; + hBack = FONTASCENT(pGC->font) + FONTDESCENT(pGC->font); + if (hBack) + { + height = nglyph; + ppci = ppciInit; + while (height--) + wBack += (*ppci++)->metrics.characterWidth; + } + if (wBack < 0) + { + xBack = xBack + wBack; + wBack = -wBack; + } + if (hBack < 0) + { + yBack = yBack + hBack; + hBack = -hBack; + } + alu = GXcopy; + } + else + { + wBack = 0; + alu = pGC->alu; + } + + if (wBack) + { + _sisSetSolidRect (sis, pGC->bgPixel, GXcopy, cmd); + for (nbox = REGION_NUM_RECTS (pClip), + pBox = REGION_RECTS (pClip); + nbox--; + pBox++) + { + x1 = xBack; + x2 = xBack + wBack; + y1 = yBack; + y2 = yBack + hBack; + if (x1 < pBox->x1) x1 = pBox->x1; + if (x2 > pBox->x2) x2 = pBox->x2; + if (y1 < pBox->y1) y1 = pBox->y1; + if (y2 > pBox->y2) y2 = pBox->y2; + if (x1 < x2 && y1 < y2) + { + _sisRect (sis, x1, y1, x2 - x1, y2 - y1, cmd); + } + } + } + + sisExpandInit (pDrawable->pScreen, &expand); + + sis->u.general.src_fg = pGC->fgPixel; + sis->u.general.src_pitch = 0; + sis->u.general.src_x = 0; + sis->u.general.src_y = 0; + + cmd = (SIS_CMD_ENH_COLOR_EXPAND | + SIS_CMD_SRC_SCREEN | + SIS_CMD_PAT_FG | + (sisBltRop[alu] << 8) | + SIS_CMD_INC_X | + SIS_CMD_INC_Y | + SIS_CMD_RECT_CLIP_ENABLE | + SIS_CMD_TRANSPARENT); + + ppci = ppciInit; + while (nglyph--) + { + pci = *ppci++; + height = pci->metrics.ascent + pci->metrics.descent; + width = pci->metrics.rightSideBearing - pci->metrics.leftSideBearing; + widthBlt = (width + 31) & ~31; + nb = (widthBlt >> 3) * height; + if (nb) + { + x1 = x + pci->metrics.leftSideBearing; + y1 = y - pci->metrics.ascent; + bbox.x1 = x1; + bbox.y1 = y1; + bbox.x2 = x1 + width; + bbox.y2 = y1 + height; + rect_in = RECT_IN_REGION(pGC->pScreen, pClip, &bbox); + if (rect_in != rgnOUT) + { + dst = sisExpandAlloc (&expand, nb); + + sis->u.general.src_base = expand.off; + sis->u.general.dst_x = x1; + sis->u.general.dst_y = y1; + sis->u.general.rect_width = widthBlt; + sis->u.general.rect_height = height; + nb >>= 2; + bits32 = (CARD32 *) pci->bits; + while (nb--) + { + d = *bits32++; + SisInvertBits32 (d); + *dst++ = d; + } + if (rect_in == rgnPART) + { + for (nbox = REGION_NUM_RECTS (pClip), + pBox = REGION_RECTS (pClip); + nbox--; + pBox++) + { + _sisClip (sis, pBox->x1, pBox->y1, pBox->x2, pBox->y2); + sis->u.general.command = cmd; + } + } + else + { + _sisClip (sis, 0, 0, x1+width, pScreenPriv->screen->height); + sis->u.general.command = cmd; + } + } + } + x += pci->metrics.characterWidth; + } + _sisClip (sis, 0, 0, + pScreenPriv->screen->width, pScreenPriv->screen->height); + KdMarkSync (pDrawable->pScreen); +} + +Bool +sisTEGlyphBlt (DrawablePtr pDrawable, + GCPtr pGC, + int xInit, + int yInit, + unsigned int nglyph, + CharInfoPtr *ppci, + Bool imageBlt) +{ + SetupSis(pDrawable->pScreen); + int x, y; + int widthGlyphs, widthGlyph; + int widthBlt; + FbBits depthMask; + int glyphsPer; + FontPtr pfont = pGC->font; + unsigned long *char1, *char2, *char3, *char4, *char5; + CARD8 alu; + CARD32 *dst, tmp; + CARD8 *dst8, *bits8; + int nb; + int bwidth; + CARD32 cmd; + int h; + BoxRec bbox; + SisExpand expand; + int lwTmp, lw; + int extra, n; + + widthGlyph = FONTMAXBOUNDS(pfont,characterWidth); + if (!widthGlyph) + return TRUE; + + h = FONTASCENT(pfont) + FONTDESCENT(pfont); + if (!h) + return TRUE; + + x = xInit + FONTMAXBOUNDS(pfont,leftSideBearing) + pDrawable->x; + y = yInit - FONTASCENT(pfont) + pDrawable->y; + + bbox.x1 = x; + bbox.x2 = x + (widthGlyph * nglyph); + bbox.y1 = y; + bbox.y2 = y + h; + + switch (RECT_IN_REGION(pGC->pScreen, fbGetCompositeClip(pGC), &bbox)) + { + case rgnPART: + if (x < 0 || y < 0) + return FALSE; + sisGlyphBltClipped (pDrawable, pGC, xInit, yInit, nglyph, ppci, imageBlt); + case rgnOUT: + return TRUE; + } + + if (widthGlyph <= 6) + glyphsPer = 5; + else if (widthGlyph <= 8) + glyphsPer = 4; + else if (widthGlyph <= 10) + glyphsPer = 3; + else if (widthGlyph <= 16) + glyphsPer = 2; + else + glyphsPer = 1; + + widthGlyphs = widthGlyph * glyphsPer; + widthBlt = widthGlyphs; + + /* make sure scanlines are 32-bit aligned */ + if (widthGlyphs <= 24) + widthBlt = 25; + + cmd = (SIS_CMD_ENH_COLOR_EXPAND | + SIS_CMD_SRC_SCREEN | + SIS_CMD_PAT_FG | + SIS_CMD_INC_X | + SIS_CMD_INC_Y); + + if (imageBlt) + { + sis->u.general.clip_right = bbox.x2; + cmd |= ((sisBltRop[GXcopy] << 8) | + SIS_CMD_OPAQUE | + SIS_CMD_RECT_CLIP_ENABLE); + } + else + { + cmd |= ((sisBltRop[pGC->alu] << 8) | + SIS_CMD_TRANSPARENT | + SIS_CMD_RECT_CLIP_DISABLE); + } + + sisExpandInit (pDrawable->pScreen, &expand); + + sis->u.general.src_fg = pGC->fgPixel; + sis->u.general.src_bg = pGC->bgPixel; + + bwidth = (widthBlt + 7) >> 3; + + nb = bwidth * h; + +#define LoopIt(count, loadup, fetch) \ + while (nglyph >= count) \ + { \ + nglyph -= count; \ + dst = sisExpandAlloc (&expand, nb); \ + sis->u.general.src_base = expand.off; \ + sis->u.general.src_pitch = 0; \ + sis->u.general.src_x = 0; \ + sis->u.general.src_y = 0; \ + sis->u.general.dst_x = x; \ + sis->u.general.dst_y = y; \ + sis->u.general.rect_width = widthBlt; \ + sis->u.general.rect_height = h; \ + x += widthGlyphs; \ + loadup \ + lwTmp = h; \ + while (lwTmp--) { \ + tmp = fetch; \ + SisInvertBits32(tmp); \ + *dst++ = tmp; \ + } \ + sis->u.general.command = cmd; \ + } + + switch (glyphsPer) { + case 5: + LoopIt(5, + char1 = (unsigned long *) (*ppci++)->bits; + char2 = (unsigned long *) (*ppci++)->bits; + char3 = (unsigned long *) (*ppci++)->bits; + char4 = (unsigned long *) (*ppci++)->bits; + char5 = (unsigned long *) (*ppci++)->bits;, + (*char1++ | ((*char2++ | ((*char3++ | ((*char4++ | (*char5++ + << widthGlyph)) + << widthGlyph)) + << widthGlyph)) + << widthGlyph))); + break; + case 4: + LoopIt(4, + char1 = (unsigned long *) (*ppci++)->bits; + char2 = (unsigned long *) (*ppci++)->bits; + char3 = (unsigned long *) (*ppci++)->bits; + char4 = (unsigned long *) (*ppci++)->bits;, + (*char1++ | ((*char2++ | ((*char3++ | (*char4++ + << widthGlyph)) + << widthGlyph)) + << widthGlyph))); + break; + case 3: + LoopIt(3, + char1 = (unsigned long *) (*ppci++)->bits; + char2 = (unsigned long *) (*ppci++)->bits; + char3 = (unsigned long *) (*ppci++)->bits;, + (*char1++ | ((*char2++ | (*char3++ << widthGlyph)) << widthGlyph))); + break; + case 2: + LoopIt(2, + char1 = (unsigned long *) (*ppci++)->bits; + char2 = (unsigned long *) (*ppci++)->bits;, + (*char1++ | (*char2++ << widthGlyph))); + break; + } + + widthBlt = (widthGlyph + 31) & ~31; + + bwidth = widthBlt >> 3; + + nb = bwidth * h; + + lw = (widthBlt >> 5) * h; + + while (nglyph--) + { + dst = (CARD32 *) sisExpandAlloc (&expand, nb); + char1 = (CARD32 *) (*ppci++)->bits; + sis->u.general.src_base = expand.off; + sis->u.general.src_pitch = 0; + sis->u.general.src_x = 0; + sis->u.general.src_y = 0; + sis->u.general.dst_x = x; + sis->u.general.dst_y = y; + sis->u.general.rect_width = widthBlt; + sis->u.general.rect_height = h; + lwTmp = lw; + while (lwTmp--) + { + tmp = *char1++; + SisInvertBits32 (tmp); + *dst++ = tmp; + } + sis->u.general.command = cmd; + x += widthGlyph; + } + if (imageBlt) + sis->u.general.clip_right = pScreenPriv->screen->width; + KdMarkSync (pDrawable->pScreen); + return TRUE; +} + +Bool +sisGlyphBlt(DrawablePtr pDrawable, + GCPtr pGC, + int x, + int y, + unsigned int nglyph, + CharInfoPtr *ppciInit, + Bool imageBlt) +{ + SetupSis(pDrawable->pScreen); + int height; + int width; + int xBack, yBack; + int hBack, wBack; + int nb, bwidth, nl; + FontPtr pfont = pGC->font; + CharInfoPtr pci; + CARD8 *bits8, b; + CARD16 *bits16; + CARD32 *bits32; + BoxPtr extents; + BoxRec bbox; + CharInfoPtr *ppci; + unsigned char alu; + CARD32 cmd; + SisExpand expand; + CARD32 *dst, d; + int nbytes; + int shift; + + x += pDrawable->x; + y += pDrawable->y; + + /* compute an approximate (but covering) bounding box */ + ppci = ppciInit; + width = 0; + height = nglyph; + while (height--) + width += (*ppci++)->metrics.characterWidth; + if (width < 0) + { + bbox.x1 = x + width; + bbox.x2 = x; + } + else + { + bbox.x1 = x; + bbox.x2 = x + width; + } + width = FONTMINBOUNDS(pfont,leftSideBearing); + if (width < 0) + bbox.x1 += width; + width = FONTMAXBOUNDS(pfont, rightSideBearing) - FONTMINBOUNDS(pfont, characterWidth); + if (width > 0) + bbox.x2 += width; + bbox.y1 = y - FONTMAXBOUNDS(pfont,ascent); + bbox.y2 = y + FONTMAXBOUNDS(pfont,descent); + + switch (RECT_IN_REGION(pGC->pScreen, fbGetCompositeClip(pGC), &bbox)) + { + case rgnPART: + if (bbox.x1 < 0 || bbox.y1 < 0) + return FALSE; + sisGlyphBltClipped (pDrawable, pGC, + x - pDrawable->x, y - pDrawable->y, + nglyph, ppciInit, imageBlt); + case rgnOUT: + return TRUE; + } + + if (imageBlt) + { + xBack = x; + yBack = y - FONTASCENT(pGC->font); + wBack = 0; + hBack = FONTASCENT(pGC->font) + FONTDESCENT(pGC->font); + if (hBack) + { + height = nglyph; + ppci = ppciInit; + while (height--) + wBack += (*ppci++)->metrics.characterWidth; + } + if (wBack < 0) + { + xBack = xBack + wBack; + wBack = -wBack; + } + if (hBack < 0) + { + yBack = yBack + hBack; + hBack = -hBack; + } + alu = GXcopy; + } + else + { + wBack = 0; + alu = pGC->alu; + } + + if (wBack) + { + _sisSetSolidRect (sis, pGC->bgPixel, GXcopy, cmd); + _sisRect (sis, xBack, yBack, wBack, hBack, cmd); + } + + sisExpandInit (pDrawable->pScreen, &expand); + + sis->u.general.src_fg = pGC->fgPixel; + + cmd = (SIS_CMD_ENH_COLOR_EXPAND | + SIS_CMD_SRC_SCREEN | + SIS_CMD_PAT_FG | + (sisBltRop[alu] << 8) | + SIS_CMD_INC_X | + SIS_CMD_INC_Y | + SIS_CMD_RECT_CLIP_DISABLE | + SIS_CMD_TRANSPARENT); + + ppci = ppciInit; + while (nglyph--) + { + pci = *ppci++; + height = pci->metrics.ascent + pci->metrics.descent; + width = pci->metrics.rightSideBearing - pci->metrics.leftSideBearing; + /* + * For glyphs wider than 16 pixels, expand the blt to the nearest multiple + * of 32; this allows the scanlines to be padded to a 32-bit boundary + * instead of requiring byte packing + */ + if (width > 16) + width = (width + 31) & ~31; + bwidth = (width + 7) >> 3; + nb = bwidth * height; + if (nb) + { + dst = sisExpandAlloc (&expand, nb); + + sis->u.general.src_base = expand.off; + sis->u.general.src_pitch = 0; + sis->u.general.src_x = 0; + sis->u.general.src_y = 0; + sis->u.general.dst_x = x + pci->metrics.leftSideBearing; + sis->u.general.dst_y = y - pci->metrics.ascent; + sis->u.general.rect_width = width; + sis->u.general.rect_height = height; + switch (bwidth) { + case 1: + bits8 = (CARD8 *) pci->bits; + while (height >= 4) + { + d = (bits8[0] | (bits8[4] << 8) | + (bits8[8] << 16) | (bits8[12] << 24)); + SisInvertBits32(d); + *dst++ = d; + bits8 += 16; + height -= 4; + } + if (height) + { + switch (height) { + case 3: + d = bits8[0] | (bits8[4] << 8) | (bits8[8] << 16); + break; + case 2: + d = bits8[0] | (bits8[4] << 8); + break; + case 1: + d = bits8[0]; + break; + } + SisInvertBits32(d); + *dst++ = d; + } + break; + case 2: + bits16 = (CARD16 *) pci->bits; + while (height >= 2) + { + d = bits16[0] | (bits16[2] << 16); + SisInvertBits32(d); + *dst++ = d; + bits16 += 4; + height -= 2; + } + if (height) + { + d = bits16[0]; + SisInvertBits32(d); + *dst++ = d; + } + break; + default: + nb >>= 2; + bits32 = (CARD32 *) pci->bits; + while (nb--) + { + d = *bits32++; + SisInvertBits32 (d); + *dst++ = d; + } + } + sis->u.general.command = cmd; + } + x += pci->metrics.characterWidth; + } + KdMarkSync (pDrawable->pScreen); + return TRUE; +} +/* + * Blt glyphs using Sis image transfer register, this does both + * poly glyph blt and image glyph blt (when pglyphBase == 1) + */ + +void +sisPolyGlyphBlt (DrawablePtr pDrawable, + GCPtr pGC, + int x, int y, + unsigned int nglyph, + CharInfoPtr *ppci, + pointer pglyphBase) +{ + FbBits depthMask; + + depthMask = FbFullMask (pDrawable->depth); + if ((pGC->planemask & depthMask) == depthMask && + pGC->fillStyle == FillSolid) + { + if (TERMINALFONT(pGC->font)) + { + if (sisTEGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, FALSE)) + return; + } + else + { + if (sisGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, FALSE)) + return; + } + } + KdCheckPolyGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, pglyphBase); +} + +void +sisImageGlyphBlt (DrawablePtr pDrawable, + GCPtr pGC, + int x, int y, + unsigned int nglyph, + CharInfoPtr *ppci, + pointer pglyphBase) +{ + FbBits depthMask; + + depthMask = FbFullMask (pDrawable->depth); + if ((pGC->planemask & depthMask) == depthMask) + { + if (TERMINALFONT(pGC->font)) + { + if (sisTEGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, TRUE)) + return; + } + else + { + if (sisGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, TRUE)) + return; + } + } + KdCheckImageGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, pglyphBase); +} + +#define sourceInvarient(alu) (((alu) & 3) == (((alu) >> 2) & 3)) + +#define sisPatternDimOk(d) ((d) <= 8 && (((d) & ((d) - 1)) == 0)) + +BOOL +sisFillOk (GCPtr pGC) +{ + FbBits depthMask; + + depthMask = FbFullMask(pGC->depth); + if ((pGC->planemask & depthMask) != depthMask) + return FALSE; + switch (pGC->fillStyle) { + case FillSolid: + return TRUE; + case FillTiled: + return (sisPatternDimOk (pGC->tile.pixmap->drawable.width) && + sisPatternDimOk (pGC->tile.pixmap->drawable.height)); + case FillStippled: + case FillOpaqueStippled: + return (sisPatternDimOk (pGC->stipple->drawable.width) && + sisPatternDimOk (pGC->stipple->drawable.height)); + } +} + +CARD32 +sisStipplePrepare (DrawablePtr pDrawable, GCPtr pGC) +{ + SetupSis(pGC->pScreen); + PixmapPtr pStip = pGC->stipple; + int stipHeight = pStip->drawable.height; + int xRot, yRot; + int rot, stipX, stipY; + FbStip *stip, *stipEnd, bits; + FbStride stipStride; + int stipBpp; + int stipXoff, stipYoff; /* XXX assumed to be zero */ + int y; + CARD32 cmd; + + xRot = pGC->patOrg.x + pDrawable->x; + yRot = pGC->patOrg.y + pDrawable->y; + modulus (- yRot, stipHeight, stipY); + modulus (- xRot, FB_UNIT, stipX); + rot = stipX; + + fbGetStipDrawable (&pStip->drawable, stip, stipStride, stipBpp, stipXoff, stipYoff); + for (y = 0; y < 8; y++) + { + bits = stip[stipY<<1]; + FbRotLeft(bits, rot); + SisInvertBits32(bits); + sis->u.general.mask[y] = (CARD8) bits; + stipY++; + if (stipY == stipHeight) + stipY = 0; + } + sis->u.general.pattern_fg = pGC->fgPixel; + + cmd = (SIS_CMD_BITBLT | + SIS_CMD_SRC_SCREEN | + SIS_CMD_PAT_MONO | + (sisPatRop[pGC->alu] << 8) | + SIS_CMD_INC_X | + SIS_CMD_INC_Y | + SIS_CMD_RECT_CLIP_DISABLE | + SIS_CMD_RECT_CLIP_DONT_MERGE); + if (pGC->fillStyle == FillOpaqueStippled) + { + sis->u.general.pattern_bg = pGC->bgPixel; + cmd |= SIS_CMD_OPAQUE; + } + else + cmd |= SIS_CMD_TRANSPARENT; + return cmd; +} + +CARD32 +sisTilePrepare (PixmapPtr pTile, int xRot, int yRot, CARD8 alu) +{ + SetupSis(pTile->drawable.pScreen); + int tileHeight = pTile->drawable.height; + int tileWidth = pTile->drawable.width; + FbBits *tile; + FbStride tileStride; + int tileBpp; + int tileXoff, tileYoff; /* XXX assumed to be zero */ + + fbGetDrawable (&pTile->drawable, tile, tileStride, tileBpp, tileXoff, tileYoff); + + /* + * Tile the pattern register + */ + fbTile ((FbBits *) sis->u.general.pattern, + (8 * tileBpp) >> FB_SHIFT, + 0, + + 8 * tileBpp, 8, + + tile, + tileStride, + tileWidth * tileBpp, + tileHeight, + GXcopy, FB_ALLONES, tileBpp, + xRot * tileBpp, + yRot); + + return (SIS_CMD_BITBLT | + SIS_CMD_SRC_SCREEN | + SIS_CMD_PAT_PATTERN | + (sisPatRop[alu] << 8) | + SIS_CMD_INC_X | + SIS_CMD_INC_Y | + SIS_CMD_RECT_CLIP_DISABLE | + SIS_CMD_RECT_CLIP_DONT_MERGE); +} + +void +sisFillBoxSolid (DrawablePtr pDrawable, int nBox, BoxPtr pBox, + unsigned long pixel, int alu) +{ + SetupSis(pDrawable->pScreen); + CARD32 cmd; + + _sisSetSolidRect(sis,pixel,alu,cmd); + + while (nBox--) + { + _sisRect(sis,pBox->x1,pBox->y1,pBox->x2-pBox->x1,pBox->y2-pBox->y1,cmd); + pBox++; + } + KdMarkSync (pDrawable->pScreen); +} + +void +sisFillBoxStipple (DrawablePtr pDrawable, GCPtr pGC, + int nBox, BoxPtr pBox) +{ + SetupSis(pDrawable->pScreen); + CARD32 cmd; + + cmd = sisStipplePrepare (pDrawable, pGC); + + while (nBox--) + { + _sisRect(sis,pBox->x1,pBox->y1,pBox->x2-pBox->x1,pBox->y2-pBox->y1,cmd); + pBox++; + } + KdMarkSync (pDrawable->pScreen); +} + +void +sisFillBoxTiled (DrawablePtr pDrawable, + int nBox, BoxPtr pBox, + PixmapPtr pTile, int xRot, int yRot, CARD8 alu) +{ + SetupSis (pDrawable->pScreen); + CARD32 cmd; + + cmd = sisTilePrepare (pTile, xRot, yRot, alu); + + while (nBox--) + { + _sisRect(sis,pBox->x1,pBox->y1,pBox->x2-pBox->x1,pBox->y2-pBox->y1,cmd); + pBox++; + } + KdMarkSync (pDrawable->pScreen); +} + +/* + sisDoBitBlt + ============= + Bit Blit for all window to window blits. +*/ + +void +sisCopyNtoN (DrawablePtr pSrcDrawable, + DrawablePtr pDstDrawable, + GCPtr pGC, + BoxPtr pbox, + int nbox, + int dx, + int dy, + Bool reverse, + Bool upsidedown, + Pixel bitplane, + void *closure) +{ + SetupSis(pDstDrawable->pScreen); + int srcX, srcY, dstX, dstY; + int w, h; + CARD32 flags; + CARD32 cmd; + CARD8 alu; + + if (pGC) + { + alu = pGC->alu; + if (sourceInvarient (pGC->alu)) + { + sisFillBoxSolid (pDstDrawable, nbox, pbox, 0, pGC->alu); + return; + } + } + else + alu = GXcopy; + + _sisSetBlt(sis,alu,cmd); + while (nbox--) + { + w = pbox->x2 - pbox->x1; + h = pbox->y2 - pbox->y1; + flags = 0; + if (reverse) + { + dstX = pbox->x2 - 1; + } + else + { + dstX = pbox->x1; + flags |= SIS_CMD_INC_X; + } + srcX = dstX + dx; + + if (upsidedown) + { + dstY = pbox->y2 - 1; + } + else + { + dstY = pbox->y1; + flags |= SIS_CMD_INC_Y; + } + srcY = dstY + dy; + + _sisBlt (sis, srcX, srcY, dstX, dstY, w, h, cmd|flags); + pbox++; + } + KdMarkSync (pDstDrawable->pScreen); +} + +RegionPtr +sisCopyArea(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC, + int srcx, int srcy, int width, int height, int dstx, int dsty) +{ + KdScreenPriv(pDstDrawable->pScreen); + FbBits depthMask; + + depthMask = FbFullMask (pDstDrawable->depth); + if ((pGC->planemask & depthMask) == depthMask && + pSrcDrawable->type == DRAWABLE_WINDOW && + pDstDrawable->type == DRAWABLE_WINDOW) + { + return fbDoCopy (pSrcDrawable, pDstDrawable, pGC, + srcx, srcy, width, height, + dstx, dsty, sisCopyNtoN, 0, 0); + } + return KdCheckCopyArea (pSrcDrawable, pDstDrawable, pGC, + srcx, srcy, width, height, dstx, dsty); +} + +typedef struct _sis1toNargs { + unsigned long copyPlaneFG, copyPlaneBG; +} sis1toNargs; + +void +_sisStipple (ScreenPtr pScreen, + FbStip *psrcBase, + FbStride widthSrc, + CARD8 alu, + int srcx, + int srcy, + int dstx, + int dsty, + int width, + int height) +{ + SetupSis(pScreen); + FbStip *psrcLine, *psrc; + FbStride widthRest; + FbStip bits, tmp, lastTmp; + int leftShift, rightShift; + int nl, nlMiddle; + int r; + SisExpand expand; + CARD32 *dst; + int hthis; + int hper; + int bwidth; + CARD32 cmd; + + sisExpandInit (pScreen, &expand); + + /* Compute blt address and parameters */ + psrc = psrcBase + srcy * widthSrc + (srcx >> 5); + nlMiddle = (width + 31) >> 5; + leftShift = srcx & 0x1f; + rightShift = 32 - leftShift; + widthRest = widthSrc - nlMiddle; + + cmd = (SIS_CMD_ENH_COLOR_EXPAND | + SIS_CMD_SRC_SCREEN | + SIS_CMD_PAT_FG | + (sisBltRop[alu] << 8) | + SIS_CMD_INC_X | + SIS_CMD_INC_Y | + SIS_CMD_OPAQUE | + SIS_CMD_RECT_CLIP_ENABLE); + + if (leftShift != 0) + widthRest--; + + sis->u.general.src_x = 0; + sis->u.general.src_y = 0; + sis->u.general.dst_x = dstx; + sis->u.general.rect_width = (width + 31) & ~31; + sis->u.general.clip_right = (dstx + width); + + bwidth = nlMiddle << 2; + hper = SIS_PATTERN_INC / bwidth; + if (hper == 0) + hper = 1; + + while (height) + { + hthis = hper; + if (hthis > height) + hthis = height; + dst = sisExpandAlloc (&expand, bwidth * hthis); + sis->u.general.src_base = expand.off; + sis->u.general.dst_y = dsty; + sis->u.general.rect_height = hthis; + + dsty += hthis; + height -= hthis; + + if (leftShift == 0) + { + while (hthis--) + { + nl = nlMiddle; + while (nl--) + { + tmp = *psrc++; + SisInvertBits32(tmp); + *dst++ = tmp; + } + psrc += widthRest; + } + } + else + { + while (hthis--) + { + bits = *psrc++; + nl = nlMiddle; + while (nl--) + { + tmp = FbStipLeft(bits, leftShift); + bits = *psrc++; + tmp |= FbStipRight(bits, rightShift); + SisInvertBits32(tmp); + *dst++ = tmp; + } + psrc += widthRest; + } + } + sis->u.general.command = cmd; + } + sis->u.general.clip_right = pScreenPriv->screen->width; +} + +void +sisCopy1toN (DrawablePtr pSrcDrawable, + DrawablePtr pDstDrawable, + GCPtr pGC, + BoxPtr pbox, + int nbox, + int dx, + int dy, + Bool reverse, + Bool upsidedown, + Pixel bitplane, + void *closure) +{ + SetupSis(pDstDrawable->pScreen); + + sis1toNargs *args = closure; + int dstx, dsty; + FbStip *psrcBase; + FbStride widthSrc; + int srcBpp; + int srcXoff, srcYoff; + + if (sourceInvarient (pGC->alu)) + { + sisFillBoxSolid (pDstDrawable, nbox, pbox, + pGC->bgPixel, pGC->alu); + return; + } + + fbGetStipDrawable (pSrcDrawable, psrcBase, widthSrc, srcBpp, srcXoff, srcYoff); + + sis->u.general.src_fg = args->copyPlaneFG; + sis->u.general.src_bg = args->copyPlaneBG; + + while (nbox--) + { + dstx = pbox->x1; + dsty = pbox->y1; + + _sisStipple (pDstDrawable->pScreen, + psrcBase, widthSrc, + pGC->alu, + dstx + dx - srcXoff, dsty + dy - srcYoff, + dstx, dsty, + pbox->x2 - dstx, pbox->y2 - dsty); + pbox++; + } + KdMarkSync (pDstDrawable->pScreen); +} + +RegionPtr +sisCopyPlane(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC, + int srcx, int srcy, int width, int height, + int dstx, int dsty, unsigned long bitPlane) +{ + KdScreenPriv (pDstDrawable->pScreen); + RegionPtr ret; + sis1toNargs args; + FbBits depthMask; + + depthMask = FbFullMask (pDstDrawable->depth); + if ((pGC->planemask & depthMask) == depthMask && + pDstDrawable->type == DRAWABLE_WINDOW && + pSrcDrawable->depth == 1) + { + args.copyPlaneFG = pGC->fgPixel; + args.copyPlaneBG = pGC->bgPixel; + return fbDoCopy (pSrcDrawable, pDstDrawable, pGC, + srcx, srcy, width, height, + dstx, dsty, sisCopy1toN, bitPlane, &args); + } + return KdCheckCopyPlane(pSrcDrawable, pDstDrawable, pGC, + srcx, srcy, width, height, + dstx, dsty, bitPlane); +} + +void +sisFillSpans (DrawablePtr pDrawable, GCPtr pGC, int n, + DDXPointPtr ppt, int *pwidth, int fSorted) +{ + SetupSis(pDrawable->pScreen); + DDXPointPtr pptFree; + FbGCPrivPtr fbPriv = fbGetGCPrivate(pGC); + int *pwidthFree;/* copies of the pointers to free */ + CARD32 cmd; + int nTmp; + INT16 x, y; + int width; + + if (!sisFillOk (pGC)) + { + KdCheckFillSpans (pDrawable, pGC, n, ppt, pwidth, fSorted); + return; + } + nTmp = n * miFindMaxBand(fbGetCompositeClip(pGC)); + pwidthFree = (int *)ALLOCATE_LOCAL(nTmp * sizeof(int)); + pptFree = (DDXPointRec *)ALLOCATE_LOCAL(nTmp * sizeof(DDXPointRec)); + if(!pptFree || !pwidthFree) + { + if (pptFree) DEALLOCATE_LOCAL(pptFree); + if (pwidthFree) DEALLOCATE_LOCAL(pwidthFree); + return; + } + n = miClipSpans(fbGetCompositeClip(pGC), + ppt, pwidth, n, + pptFree, pwidthFree, fSorted); + pwidth = pwidthFree; + ppt = pptFree; + switch (pGC->fillStyle) { + case FillSolid: + _sisSetSolidRect(sis,pGC->fgPixel,pGC->alu,cmd); + break; + case FillTiled: + cmd = sisTilePrepare (pGC->tile.pixmap, + pGC->patOrg.x + pDrawable->x, + pGC->patOrg.y + pDrawable->y, + pGC->alu); + break; + default: + cmd = sisStipplePrepare (pDrawable, pGC); + break; + } + while (n--) + { + x = ppt->x; + y = ppt->y; + ppt++; + width = *pwidth++; + if (width) + { + _sisRect(sis,x,y,width,1,cmd); + } + } + KdMarkSync (pDrawable->pScreen); + DEALLOCATE_LOCAL(pptFree); + DEALLOCATE_LOCAL(pwidthFree); +} + +#define NUM_STACK_RECTS 1024 + +void +sisPolyFillRect (DrawablePtr pDrawable, GCPtr pGC, + int nrectFill, xRectangle *prectInit) +{ + SetupSis(pDrawable->pScreen); + xRectangle *prect; + RegionPtr prgnClip; + register BoxPtr pbox; + register BoxPtr pboxClipped; + BoxPtr pboxClippedBase; + BoxPtr pextent; + BoxRec stackRects[NUM_STACK_RECTS]; + FbGCPrivPtr fbPriv = fbGetGCPrivate (pGC); + int numRects; + int n; + int xorg, yorg; + int x, y; + + if (!sisFillOk (pGC)) + { + KdCheckPolyFillRect (pDrawable, pGC, nrectFill, prectInit); + return; + } + prgnClip = fbGetCompositeClip(pGC); + xorg = pDrawable->x; + yorg = pDrawable->y; + + if (xorg || yorg) + { + prect = prectInit; + n = nrectFill; + while(n--) + { + prect->x += xorg; + prect->y += yorg; + prect++; + } + } + + prect = prectInit; + + numRects = REGION_NUM_RECTS(prgnClip) * nrectFill; + if (numRects > NUM_STACK_RECTS) + { + pboxClippedBase = (BoxPtr)ALLOCATE_LOCAL(numRects * sizeof(BoxRec)); + if (!pboxClippedBase) + return; + } + else + pboxClippedBase = stackRects; + + pboxClipped = pboxClippedBase; + + if (REGION_NUM_RECTS(prgnClip) == 1) + { + int x1, y1, x2, y2, bx2, by2; + + pextent = REGION_RECTS(prgnClip); + x1 = pextent->x1; + y1 = pextent->y1; + x2 = pextent->x2; + y2 = pextent->y2; + while (nrectFill--) + { + if ((pboxClipped->x1 = prect->x) < x1) + pboxClipped->x1 = x1; + + if ((pboxClipped->y1 = prect->y) < y1) + pboxClipped->y1 = y1; + + bx2 = (int) prect->x + (int) prect->width; + if (bx2 > x2) + bx2 = x2; + pboxClipped->x2 = bx2; + + by2 = (int) prect->y + (int) prect->height; + if (by2 > y2) + by2 = y2; + pboxClipped->y2 = by2; + + prect++; + if ((pboxClipped->x1 < pboxClipped->x2) && + (pboxClipped->y1 < pboxClipped->y2)) + { + pboxClipped++; + } + } + } + else + { + int x1, y1, x2, y2, bx2, by2; + + pextent = REGION_EXTENTS(pGC->pScreen, prgnClip); + x1 = pextent->x1; + y1 = pextent->y1; + x2 = pextent->x2; + y2 = pextent->y2; + while (nrectFill--) + { + BoxRec box; + + if ((box.x1 = prect->x) < x1) + box.x1 = x1; + + if ((box.y1 = prect->y) < y1) + box.y1 = y1; + + bx2 = (int) prect->x + (int) prect->width; + if (bx2 > x2) + bx2 = x2; + box.x2 = bx2; + + by2 = (int) prect->y + (int) prect->height; + if (by2 > y2) + by2 = y2; + box.y2 = by2; + + prect++; + + if ((box.x1 >= box.x2) || (box.y1 >= box.y2)) + continue; + + n = REGION_NUM_RECTS (prgnClip); + pbox = REGION_RECTS(prgnClip); + + /* clip the rectangle to each box in the clip region + this is logically equivalent to calling Intersect() + */ + while(n--) + { + pboxClipped->x1 = max(box.x1, pbox->x1); + pboxClipped->y1 = max(box.y1, pbox->y1); + pboxClipped->x2 = min(box.x2, pbox->x2); + pboxClipped->y2 = min(box.y2, pbox->y2); + pbox++; + + /* see if clipping left anything */ + if(pboxClipped->x1 < pboxClipped->x2 && + pboxClipped->y1 < pboxClipped->y2) + { + pboxClipped++; + } + } + } + } + if (pboxClipped != pboxClippedBase) + { + switch (pGC->fillStyle) { + case FillSolid: + sisFillBoxSolid(pDrawable, + pboxClipped-pboxClippedBase, pboxClippedBase, + pGC->fgPixel, pGC->alu); + break; + case FillTiled: + sisFillBoxTiled(pDrawable, + pboxClipped-pboxClippedBase, pboxClippedBase, + pGC->tile.pixmap, + pGC->patOrg.x + pDrawable->x, + pGC->patOrg.y + pDrawable->y, + pGC->alu); + break; + case FillStippled: + case FillOpaqueStippled: + sisFillBoxStipple (pDrawable, pGC, + pboxClipped-pboxClippedBase, pboxClippedBase); + break; + } + } + if (pboxClippedBase != stackRects) + DEALLOCATE_LOCAL(pboxClippedBase); +} + +static const GCOps sisOps = { + sisFillSpans, + KdCheckSetSpans, + KdCheckPutImage, + sisCopyArea, + sisCopyPlane, + KdCheckPolyPoint, + KdCheckPolylines, + KdCheckPolySegment, + miPolyRectangle, + KdCheckPolyArc, + miFillPolygon, + sisPolyFillRect, + KdCheckPolyFillArc, + miPolyText8, + miPolyText16, + miImageText8, + miImageText16, + sisImageGlyphBlt, + sisPolyGlyphBlt, + KdCheckPushPixels, +}; + +void +sisValidateGC (GCPtr pGC, Mask changes, DrawablePtr pDrawable) +{ + FbGCPrivPtr fbPriv = fbGetGCPrivate(pGC); + + fbValidateGC (pGC, changes, pDrawable); + + if (pDrawable->type == DRAWABLE_WINDOW) + pGC->ops = (GCOps *) &sisOps; + else + pGC->ops = (GCOps *) &kdAsyncPixmapGCOps; +} + +GCFuncs sisGCFuncs = { + sisValidateGC, + miChangeGC, + miCopyGC, + miDestroyGC, + miChangeClip, + miDestroyClip, + miCopyClip +}; + +int +sisCreateGC (GCPtr pGC) +{ + if (!fbCreateGC (pGC)) + return FALSE; + + if (pGC->depth != 1) + pGC->funcs = &sisGCFuncs; + + pGC->ops = (GCOps *) &kdAsyncPixmapGCOps; + + return TRUE; +} + +void +sisCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc) +{ + ScreenPtr pScreen = pWin->drawable.pScreen; + KdScreenPriv(pScreen); + RegionRec rgnDst; + int dx, dy; + WindowPtr pwinRoot; + + pwinRoot = WindowTable[pWin->drawable.pScreen->myNum]; + + dx = ptOldOrg.x - pWin->drawable.x; + dy = ptOldOrg.y - pWin->drawable.y; + REGION_TRANSLATE(pWin->drawable.pScreen, prgnSrc, -dx, -dy); + + REGION_INIT (pWin->drawable.pScreen, &rgnDst, NullBox, 0); + + REGION_INTERSECT(pWin->drawable.pScreen, &rgnDst, &pWin->borderClip, prgnSrc); + + fbCopyRegion ((DrawablePtr)pwinRoot, (DrawablePtr)pwinRoot, + 0, + &rgnDst, dx, dy, sisCopyNtoN, 0, 0); + + REGION_UNINIT(pWin->drawable.pScreen, &rgnDst); +} + +void +sisPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what) +{ + KdScreenPriv(pWin->drawable.pScreen); + PixmapPtr pTile; + + if (!REGION_NUM_RECTS(pRegion)) + return; + switch (what) { + case PW_BACKGROUND: + switch (pWin->backgroundState) { + case None: + return; + case ParentRelative: + do { + pWin = pWin->parent; + } while (pWin->backgroundState == ParentRelative); + (*pWin->drawable.pScreen->PaintWindowBackground)(pWin, pRegion, + what); + return; + case BackgroundPixmap: + pTile = pWin->background.pixmap; + if (sisPatternDimOk (pTile->drawable.width) && + sisPatternDimOk (pTile->drawable.height)) + { + sisFillBoxTiled ((DrawablePtr)pWin, + (int)REGION_NUM_RECTS(pRegion), + REGION_RECTS(pRegion), + pTile, + pWin->drawable.x, pWin->drawable.y, GXcopy); + return; + } + break; + case BackgroundPixel: + sisFillBoxSolid((DrawablePtr)pWin, + (int)REGION_NUM_RECTS(pRegion), + REGION_RECTS(pRegion), + pWin->background.pixel, GXcopy); + return; + } + break; + case PW_BORDER: + if (pWin->borderIsPixel) + { + sisFillBoxSolid((DrawablePtr)pWin, + (int)REGION_NUM_RECTS(pRegion), + REGION_RECTS(pRegion), + pWin->border.pixel, GXcopy); + return; + } + else + { + pTile = pWin->border.pixmap; + if (sisPatternDimOk (pTile->drawable.width) && + sisPatternDimOk (pTile->drawable.height)) + { + sisFillBoxTiled ((DrawablePtr)pWin, + (int)REGION_NUM_RECTS(pRegion), + REGION_RECTS(pRegion), + pTile, + pWin->drawable.x, pWin->drawable.y, GXcopy); + return; + } + } + break; + } + KdCheckPaintWindow (pWin, pRegion, what); +} + +Bool +sisDrawInit (ScreenPtr pScreen) +{ + KdScreenPriv(pScreen); + sisScreenInfo(pScreenPriv); + + /* + * Hook up asynchronous drawing + */ + KdScreenInitAsync (pScreen); + /* + * Replace various fb screen functions + */ + pScreen->CreateGC = sisCreateGC; + pScreen->CopyWindow = sisCopyWindow; + pScreen->PaintWindowBackground = sisPaintWindow; + pScreen->PaintWindowBorder = sisPaintWindow; + + return TRUE; +} + +void +sisDrawEnable (ScreenPtr pScreen) +{ + SetupSis(pScreen); + sisScreenInfo(pScreenPriv); + CARD32 cmd; + CARD32 base; + CARD16 stride; + CARD16 op; + + base = pScreenPriv->screen->fb[0].frameBuffer - sisc->frameBuffer; + stride = pScreenPriv->screen->fb[0].byteStride; +#if 0 + sis->u.general.dst_base = base; + sis->u.general.dst_pitch = stride; + sis->u.general.src_pitch = stride; + sis->u.general._pad0 = stride; + sis->u.general.dst_height = pScreenPriv->screen->height; + _sisClip (sis, 0, 0, + pScreenPriv->screen->width, pScreenPriv->screen->height); + _sisSetSolidRect(sis, pScreen->blackPixel, GXcopy, cmd); + _sisRect (sis, 0, 0, + pScreenPriv->screen->width, pScreenPriv->screen->height, + cmd); +#endif + base = (CARD32) (pScreenPriv->screen->fb[0].frameBuffer); + fprintf (stderr, "src 0x%x\n", sis->u.accel.src_addr); + sis->u.accel.src_addr = (base & 0x3fffff); + fprintf (stderr, "src 0x%x\n", sis->u.accel.src_addr); + sis->u.accel.dst_addr = (base & 0x3fffff); + sis->u.accel.pitch = (stride << 16) | stride; + sis->u.accel.dimension = ((pScreenPriv->screen->height-1) << 16 | + (pScreenPriv->screen->width - 1)); + sis->u.accel.fg = (sisBltRop[GXcopy] << 24) | 0xf800; + sis->u.accel.bg = (sisBltRop[GXcopy] << 24) | 0x00; + +#define sisLEFT2RIGHT 0x10 +#define sisRIGHT2LEFT 0x00 +#define sisTOP2BOTTOM 0x20 +#define sisBOTTOM2TOP 0x00 + +#define sisSRCSYSTEM 0x03 +#define sisSRCVIDEO 0x02 +#define sisSRCFG 0x01 +#define sisSRCBG 0x00 + +#define sisCMDBLT 0x0000 +#define sisCMDBLTMSK 0x0100 +#define sisCMDCOLEXP 0x0200 +#define sisCMDLINE 0x0300 + +#define sisCMDENHCOLEXP 0x2000 + +#define sisXINCREASE 0x10 +#define sisYINCREASE 0x20 +#define sisCLIPENABL 0x40 +#define sisCLIPINTRN 0x80 +#define sisCLIPEXTRN 0x00 + + +#define sisPATREG 0x08 +#define sisPATFG 0x04 +#define sisPATBG 0x00 + +#define sisLASTPIX 0x0800 +#define sisXMAJOR 0x0400 + + op = sisCMDBLT | sisLEFT2RIGHT | sisTOP2BOTTOM | sisSRCFG | sisPATFG; + + sis->u.accel.cmd = op; + + KdMarkSync (pScreen); +} + +void +sisDrawSync (ScreenPtr pScreen) +{ + SetupSis(pScreen); + + _sisWaitIdleEmpty (sis); +} + +void +sisDrawDisable (ScreenPtr pScreen) +{ +} + +void +sisDrawFini (ScreenPtr pScreen) +{ +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/sis530/sis.h +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/sis530/sis.h @@ -0,0 +1,1218 @@ +/* + * Id: sis.h,v 1.1 1999/11/02 08:17:24 keithp Exp $ + * + * Copyright © 1999 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/sis530/sis.h,v 1.4 2000/05/06 22:17:49 keithp Exp $ */ + +#ifndef _SIS_H_ +#define _SIS_H_ +#include "kdrive.h" +#include +#include +#include +#include +#include + +/* + * Linear Addressing 000 0000 - 0ff ffff (16m) + * Image data transfer 100 0000 - 100 7fff (32k) + * Empty 100 8000 - 100 81ff + * MMIO registers 100 8200 - 100 8480 + * + * We don't care about the image transfer or PCI regs, so + * this structure starts at the MMIO regs + */ + +typedef volatile CARD32 VOL32; +typedef volatile CARD16 VOL16; +typedef volatile CARD8 VOL8; + +#define SIS_MMIO_OFFSET 0x8200 + +typedef struct _sis530General { + VOL32 src_base; /* 8200 */ + VOL16 src_pitch; /* 8204 */ + VOL16 _pad0; /* 8206 */ + VOL16 src_y; /* 8208 */ + VOL16 src_x; /* 820a */ + VOL16 dst_y; /* 820c */ + VOL16 dst_x; /* 820e */ + VOL32 dst_base; /* 8210 */ + VOL16 dst_pitch; /* 8214 */ + VOL16 dst_height; /* 8216 */ + VOL16 rect_width; /* 8218 */ + VOL16 rect_height; /* 821a */ + VOL32 pattern_fg; /* 821c */ + VOL32 pattern_bg; /* 8220 */ + VOL32 src_fg; /* 8224 */ + VOL32 src_bg; /* 8228 */ + VOL8 mask[8]; /* 822c */ + VOL16 clip_left; /* 8234 */ + VOL16 clip_top; /* 8236 */ + VOL16 clip_right; /* 8238 */ + VOL16 clip_bottom; /* 823a */ + VOL32 command; /* 823c */ + VOL32 status; /* 8240 */ + VOL8 _pad1[0xbc]; /* 8244 */ + VOL8 pattern[256]; /* 8300 */ + /* 8400 */ +} SisGeneral; + +typedef struct _sis530Line { + VOL8 _pad0[8]; /* 8200 */ + VOL16 x0; /* 8208 */ + VOL16 y0; /* 820a */ + VOL16 x1; /* 820c */ + VOL16 y1; /* 820e */ + VOL32 dst_base; /* 8210 */ + VOL16 dst_pitch; /* 8214 */ + VOL16 dst_height; /* 8216 */ + VOL16 count; /* 8218 */ + VOL16 style_period; /* 821a */ + VOL32 fg; /* 821c */ + VOL32 bg; /* 8220 */ + VOL8 _pad1[8]; /* 8224 */ + VOL32 style0; /* 822c */ + VOL32 style1; /* 8228 */ + VOL16 clip_left; /* 8234 */ + VOL16 clip_top; /* 8236 */ + VOL16 clip_right; /* 8238 */ + VOL16 clip_bottom; /* 823a */ + VOL32 command; /* 823c */ + VOL32 status; /* 8240 */ + VOL8 _pad2[0xbc]; /* 8244 */ + struct { + VOL16 x; + VOL16 y; + } data[96]; /* 8300 */ + /* 8480 */ +} SisLine; + +typedef struct _sis530Transparent { + VOL32 src_base; /* 8200 */ + VOL16 src_pitch; /* 8204 */ + VOL16 _pad0; /* 8206 */ + VOL16 src_y; /* 8208 */ + VOL16 src_x; /* 820a */ + VOL16 dst_y; /* 820c */ + VOL16 dst_x; /* 820e */ + VOL32 dst_base; /* 8210 */ + VOL16 dst_pitch; /* 8214 */ + VOL16 dst_height; /* 8216 */ + VOL16 rect_width; /* 8218 */ + VOL16 rect_height; /* 821a */ + VOL32 dst_key_high; /* 821c */ + VOL32 dst_key_low; /* 8220 */ + VOL32 src_key_high; /* 8224 */ + VOL32 src_key_low; /* 8228 */ + VOL8 _pad1[8]; /* 822c */ + VOL16 clip_left; /* 8234 */ + VOL16 clip_top; /* 8236 */ + VOL16 clip_right; /* 8238 */ + VOL16 clip_bottom; /* 823a */ + VOL32 command; /* 823c */ + VOL32 status; /* 8240 */ + /* 8244 */ +} SisTransparent; + +typedef struct _sis530Multiple { + VOL8 _pad0[8]; /* 8200 */ + VOL16 count; /* 8208 */ + VOL16 y; /* 820a */ + VOL16 x0_start; /* 820c */ + VOL16 x0_end; /* 820e */ + VOL32 dst_base; /* 8210 */ + VOL16 dst_pitch; /* 8214 */ + VOL16 dst_height; /* 8216 */ + VOL8 _pad1[4]; /* 8218 */ + VOL32 fg; /* 821c */ + VOL32 bg; /* 8220 */ + VOL8 _pad2[8]; /* 8224 */ + VOL8 mask[8]; /* 822c */ + VOL16 clip_left; /* 8234 */ + VOL16 clip_top; /* 8236 */ + VOL16 clip_right; /* 8238 */ + VOL16 clip_bottom; /* 823a */ + VOL32 command; /* 823c */ + VOL32 status; /* 8240 */ + VOL16 x1_start; /* 8244 */ + VOL16 x1_end; /* 8246 */ + VOL8 _pad3[0xb8]; /* 8248 */ + VOL8 pattern[64]; /* 8300 */ + struct { + VOL16 x_start; + VOL16 y_end; + } data[80]; /* 8340 */ + /* 8480 */ +} SisMultiple; + +typedef struct _sis530Trapezoid { + VOL8 _pad0[8]; /* 8200 */ + VOL16 height; /* 8208 */ + VOL16 y; /* 820a */ + VOL16 left_x; /* 820c */ + VOL16 right_x; /* 820e */ + VOL32 dst_base; /* 8210 */ + VOL16 dst_pitch; /* 8214 */ + VOL16 dst_height; /* 8216 */ + VOL8 _pad1[4]; /* 8218 */ + VOL32 fg; /* 821c */ + VOL32 bg; /* 8220 */ + VOL8 _pad2[8]; /* 8224 */ + VOL8 mask[8]; /* 822c */ + VOL16 clip_left; /* 8234 */ + VOL16 clip_top; /* 8236 */ + VOL16 clip_right; /* 8238 */ + VOL16 clip_bottom; /* 823a */ + VOL32 command; /* 823c */ + VOL32 status; /* 8240 */ + VOL16 left_dx; /* 8244 */ + VOL16 left_dy; /* 8246 */ + VOL16 right_dx; /* 8248 */ + VOL16 right_dy; /* 824a */ + VOL32 left_error; /* 824c */ + VOL32 right_error; /* 8250 */ + /* 8254 */ +} SisTrapezoid; + +typedef struct _sisAccel { + VOL8 pad[0x80]; /* 8200 */ + VOL32 src_addr; /* 8280 */ + VOL32 dst_addr; /* 8284 */ + VOL32 pitch; /* 8288 */ + VOL32 dimension; /* 828c */ + VOL32 fg; /* 8290 */ + VOL32 bg; /* 8294 */ + + + VOL32 clip_ul; /* 82a0 */ + VOL32 clip_br; /* 82a4 */ + + VOL16 cmd; /* 82aa */ + + VOL8 pattern[256]; /* 82ac */ + +} SisAccel; + +typedef struct _sis530 { + union { + SisGeneral general; + SisLine line; + SisTransparent transparent; + SisMultiple multiple; + SisTrapezoid trapezoid; + SisAccel accel; + } u; +} SisRec, *SisPtr; + +typedef struct _sisCursor { + int width, height; + int xhot, yhot; + Bool has_cursor; + CursorPtr pCursor; +} SisCursor; + +#define SIS_CURSOR_WIDTH 64 +#define SIS_CURSOR_HEIGHT 64 + +typedef struct _sisClock { + CARD32 vclk_numerator; + BOOL vclk_divide_by_2; + CARD32 vclk_denominator; + CARD32 vclk_post_scale; + BOOL vclk_post_scale_2; + BOOL high_speed_dac; +} SisClockRec, *SisClockPtr; + +typedef struct _crtc { + + union { + struct { + CARD8 _io_address_select : 1; + CARD8 _display_ram_enable : 1; + CARD8 _clock_select : 2; + CARD8 : 1; + CARD8 _odd_even_page : 1; + CARD8 _h_sync_polarity : 1; + CARD8 _v_sync_polarity : 1; + } _misc_output_s; + CARD8 _misc_output; + } _misc_output_u; /* 3CC/3C2 */ + +#define misc_output _misc_output_u._misc_output +#define io_address_select _misc_output_u._misc_output_s._io_address_select +#define display_ram_enable _misc_output_u._misc_output_s._display_ram_enable +#define clock_select _misc_output_u._misc_output_s._clock_select +#define odd_even_page _misc_output_u._misc_output_s._odd_even_page +#define h_sync_polarity _misc_output_u._misc_output_s._h_sync_polarity +#define v_sync_polarity _misc_output_u._misc_output_s._v_sync_polarity + + CARD8 h_total_0_7; /* CR0 */ + CARD8 h_display_end_0_7; /* CR1 */ + CARD8 h_blank_start_0_7; /* CR2 */ + union { + struct { + CARD8 _h_blank_end_0_4 : 5; + CARD8 _display_skew : 2; + CARD8 : 1; + } _h_blank_end_s; + CARD8 __h_blank_end; /* CR3 */ + } _h_blank_end_u; +#define h_blank_end_0_4 _h_blank_end_u._h_blank_end_s._h_blank_end_0_4 +#define display_skew _h_blank_end_u._h_blank_end_s._display_skew +#define _h_blank_end _h_blank_end_u.__h_blank_end + + CARD8 h_sync_start_0_7; /* CR4 */ + + union { + struct { + CARD8 _h_sync_end_0_4 : 5; + CARD8 _horizontal_skew : 2; + CARD8 _h_blank_end_5 : 1; + } _h_sync_end_s; + CARD8 __h_sync_end; /* CR5 */ + } _h_sync_end_u; + +#define h_sync_end_0_4 _h_sync_end_u._h_sync_end_s._h_sync_end_0_4 +#define horizontal_skew _h_sync_end_u._h_sync_end_s._horizontal_skew +#define h_blank_end_5 _h_sync_end_u._h_sync_end_s._h_blank_end_5 +#define _h_sync_end _h_sync_end_u.__h_sync_end + + CARD8 v_total_0_7; /* CR6 */ + + union { + struct { + CARD8 _v_total_8 : 1; + CARD8 _v_display_end_8 : 1; + CARD8 _v_retrace_start_8 : 1; + CARD8 _v_blank_start_8 : 1; + CARD8 _line_compare_8 : 1; + CARD8 _v_total_9 : 1; + CARD8 _v_display_end_9 : 1; + CARD8 _v_retrace_start_9 : 1; + } _crtc_overflow_s; + CARD8 _crtc_overflow; /* CR7 */ + } _crtc_overflow_u; + +#define v_total_8 _crtc_overflow_u._crtc_overflow_s._v_total_8 +#define v_display_end_8 _crtc_overflow_u._crtc_overflow_s._v_display_end_8 +#define v_retrace_start_8 _crtc_overflow_u._crtc_overflow_s._v_retrace_start_8 +#define v_blank_start_8 _crtc_overflow_u._crtc_overflow_s._v_blank_start_8 +#define line_compare_8 _crtc_overflow_u._crtc_overflow_s._line_compare_8 +#define v_total_9 _crtc_overflow_u._crtc_overflow_s._v_total_9 +#define v_display_end_9 _crtc_overflow_u._crtc_overflow_s._v_display_end_9 +#define v_retrace_start_9 _crtc_overflow_u._crtc_overflow_s._v_retrace_start_9 +#define crtc_overflow _crtc_overflow_u._crtc_overflow + + CARD8 preset_row_scan; /* CR8 (unused) */ + + union { + struct { + CARD8 ___max_scan_line : 5; + CARD8 _v_blank_start_9 : 1; + CARD8 _line_compare_9 : 1; + CARD8 _double_scan : 1; + } _max_scan_line_s; + CARD8 __max_scan_line; /* CR9 */ + } _max_scan_line_u; + +#define max_scan_line _max_scan_line_u._max_scan_line_s.___max_scan_line +#define v_blank_start_9 _max_scan_line_u._max_scan_line_s._v_blank_start_9 +#define line_compare_9 _max_scan_line_u._max_scan_line_s._line_compare_9 +#define double_scan _max_scan_line_u._max_scan_line_s._double_scan +#define _max_scan_line _max_scan_line_u.__max_scan_line + + CARD8 cursor_start; /* CRA */ + CARD8 cursor_end; /* CRB */ + + CARD8 start_address_8_15; /* CRC */ + CARD8 start_address_0_7; /* CRD */ + + CARD8 text_cursor_15_8; /* CRE */ + CARD8 text_cursor_7_0; /* CRF */ + + CARD8 cursor_loc_high; + CARD8 cursor_loc_low; + + CARD8 v_retrace_start_0_7; /* CR10 */ + union { + struct { + CARD8 _v_retrace_end_0_3 : 4; + CARD8 _clear_v_retrace_int : 1; + CARD8 _disable_v_retrace_int : 1; + CARD8 _refresh_cycle_select : 1; + CARD8 _lock_crtc : 1; + } _v_retrace_end_s; + CARD8 __v_retrace_end; /* CR11 */ + } _v_retrace_end_u; + +#define v_retrace_end_0_3 _v_retrace_end_u._v_retrace_end_s._v_retrace_end_0_3 +#define clear_v_retrace_int _v_retrace_end_u._v_retrace_end_s._clear_v_retrace_int +#define disable_v_retrace_int _v_retrace_end_u._v_retrace_end_s._disable_v_retrace_int +#define refresh_cycle_select _v_retrace_end_u._v_retrace_end_s._refresh_cycle_select +#define lock_crtc _v_retrace_end_u._v_retrace_end_s._lock_crtc +#define _v_retrace_end _v_retrace_end_u.__v_retrace_end + + CARD8 v_display_end_0_7; /* CR12 */ + + CARD8 screen_off_0_7; /* CR13 */ + + union { + struct { + CARD8 ___underline_location : 5; + CARD8 _count_by_four : 1; + CARD8 _doubleword_mode : 1; + CARD8 : 1; + } _underline_location_s; + CARD8 __underline_location; /* CR14 */ + } _underline_location_u; + +#define underline_location _underline_location_u._underline_location_s.___underline_location +#define count_by_four _underline_location_u._underline_location_s._count_by_four +#define doubleword_mode _underline_location_u._underline_location_s._doubleword_mode +#define _underline_location _underline_location_u.__underline_location + + CARD8 v_blank_start_0_7; /* CR15 */ + CARD8 v_blank_end_0_7; /* CR16 */ + + union { + struct { + CARD8 _two_bk_cga : 1; + CARD8 _four_bk_cga : 1; + CARD8 _v_total_double : 1; + CARD8 _count_by_two : 1; + CARD8 : 1; + CARD8 _address_wrap : 1; + CARD8 _byte_mode : 1; + CARD8 _hardware_reset : 1; + } _crtc_mode_s; + CARD8 _crtc_mode; /* CR17 */ + } _crtc_mode_u; + +#define crtc_mode _crtc_mode_u._crtc_mode +#define two_bk_cga _crtc_mode_u._crtc_mode_s._two_bk_cga +#define four_bk_cga _crtc_mode_u._crtc_mode_s._four_bk_cga +#define v_total_double _crtc_mode_u._crtc_mode_s._v_total_double +#define count_by_two _crtc_mode_u._crtc_mode_s._count_by_two +#define address_wrap _crtc_mode_u._crtc_mode_s._address_wrap +#define byte_mode _crtc_mode_u._crtc_mode_s._byte_mode +#define hardware_reset _crtc_mode_u._crtc_mode_s._hardware_reset + + CARD8 line_compare_0_7; /* CR18 (unused) */ + + union { + struct { + CARD8 _graphics_mode_enable : 1; + CARD8 _attribute_byte_mda : 1; + CARD8 _line_graphics_enable : 1; + CARD8 _background_blink : 1; + CARD8 : 1; + CARD8 _pel_panning_compat : 1; + CARD8 _pixel_clock_double : 1; + CARD8 p4_p5_source_select : 1; + } _mode_control_s; + CARD8 _mode_control; + } _mode_control_u; /* AR10 */ + +#define mode_control _mode_control_u._mode_control +#define graphics_mode_enable _mode_control_u._mode_control_s._graphics_mode_enable +#define pixel_clock_double _mode_control_u._mode_control_s._pixel_clock_double + + CARD8 screen_border_color; /* AR11 */ + CARD8 enable_color_plane; /* AR12 */ + CARD8 horizontal_pixel_pan; /* AR13 */ + + union { + struct { + CARD8 _write_mode : 2; + CARD8 : 1; + CARD8 _read_mode : 1; + CARD8 _odd_even_addressing : 1; + CARD8 _shift_register_mode : 1; + CARD8 _color_mode_256 : 1; + CARD8 : 1; + } _mode_register_s; + CARD8 _mode_register; + } _mode_register_u; /* GR5 */ + +#define mode_register _mode_register_u._mode_register +#define color_mode_256 _mode_register_u._mode_register_s._color_mode_256 +#define odd_even_addressing _mode_register_u._mode_register_s._odd_even_addressing + + union { + struct { + CARD8 _graphics_enable : 1; + CARD8 _chain_odd_even : 1; + CARD8 _memory_address_select : 2; + CARD8 : 4; + } _misc_register_s; + CARD8 _misc_register; + } _misc_register_u; /* GR6 */ + +#define misc_register _misc_register_u._misc_register +#define graphics_enable _misc_register_u._misc_register_s._graphics_enable +#define chain_odd_even _misc_register_u._misc_register_s._chain_odd_even +#define memory_address_select _misc_register_u._misc_register_s._memory_address_select + + CARD8 color_dont_care; /* GR7 */ + + union { + struct { + CARD8 _dot_clock_8_9 : 1; + CARD8 : 1; + CARD8 _shifter_load_16 : 1; + CARD8 _dot_clock_divide_2 : 1; + CARD8 _shifter_load_32 : 1; + CARD8 _display_off : 1; + CARD8 : 2; + } _clock_mode_s; + CARD8 _clock_mode; + } _clock_mode_u; /* SR1 */ + +#define clock_mode _clock_mode_u._clock_mode +#define dot_clock_8_9 _clock_mode_u._clock_mode_s._dot_clock_8_9 +#define shifter_load_16 _clock_mode_u._clock_mode_s._shifter_load_16 +#define dot_clock_divide_2 _clock_mode_u._clock_mode_s._dot_clock_divide_2 +#define shifter_load_32 _clock_mode_u._clock_mode_s._shifter_load_32 +#define display_off _clock_mode_u._clock_mode_s._display_off + + CARD8 color_plane_w_enable; /* SR2 */ + + union { + struct { + CARD8 : 1; + CARD8 _extended_memory_size : 1; + CARD8 _odd_even_disable : 1; + CARD8 _chain_4_enable : 1; + CARD8 : 4; + } _memory_mode_s; + CARD8 _memory_mode; + } _memory_mode_u; /* SR4 */ + +#define memory_mode _memory_mode_u._memory_mode +#define extended_memory_sz _memory_mode_u._memory_mode_s._extended_memory_size +#define odd_even_disable _memory_mode_u._memory_mode_s._odd_even_disable +#define chain_4_enable _memory_mode_u._memory_mode_s._chain_4_enable + + union { + struct { + CARD8 _enhanced_text_mode : 1; + CARD8 _enhanced_graphics_mode : 1; + CARD8 _graphics_mode_32k : 1; + CARD8 _graphics_mode_64k : 1; + CARD8 _graphics_mode_true : 1; + CARD8 _graphics_mode_interlaced: 1; + CARD8 _graphics_mode_hw_cursor: 1; + CARD8 _graphics_mode_linear : 1; + } _graphics_mode_s; + CARD8 _graphics_mode; + } _graphics_mode_u; /* SR6 */ + +#define graphics_mode _graphics_mode_u._graphics_mode +#define enhanced_text_mode _graphics_mode_u._graphics_mode_s._enhanced_text_mode +#define enhanced_graphics_mode _graphics_mode_u._graphics_mode_s._enhanced_graphics_mode +#define graphics_mode_32k _graphics_mode_u._graphics_mode_s._graphics_mode_32k +#define graphics_mode_64k _graphics_mode_u._graphics_mode_s._graphics_mode_64k +#define graphics_mode_true _graphics_mode_u._graphics_mode_s._graphics_mode_true +#define graphics_mode_interlaced _graphics_mode_u._graphics_mode_s._graphics_mode_interlaced +#define graphics_mode_hw_cursor _graphics_mode_u._graphics_mode_s._graphics_mode_hw_cursor +#define graphics_mode_linear _graphics_mode_u._graphics_mode_s._graphics_mode_linear + + union { + struct { + CARD8 _external_dac_reference : 1; + CARD8 _high_speed_dac_0 : 1; + CARD8 _direct_color_24bit : 1; + CARD8 _multi_line_prefetch : 1; + CARD8 _extended_video_div_2 : 1; + CARD8 _ramdac_power_save : 1; + CARD8 : 1; + CARD8 _merge_video_fifo : 1; + } _misc_control_0_s; + CARD8 _misc_control_0; + } _misc_control_0_u; /* SR7 */ + +#define misc_control_0 _misc_control_0_u._misc_control_0 +#define external_dac_reference _misc_control_0_u._misc_control_0_s._external_dac_reference +#define high_speed_dac_0 _misc_control_0_u._misc_control_0_s._high_speed_dac_0 +#define direct_color_24bit _misc_control_0_u._misc_control_0_s._direct_color_24bit +#define multi_line_prefetch _misc_control_0_u._misc_control_0_s._multi_line_prefetch +#define extended_video_div_2 _misc_control_0_u._misc_control_0_s._extended_video_div_2 +#define ramdac_power_save _misc_control_0_u._misc_control_0_s._ramdac_power_save +#define merge_video_fifo _misc_control_0_u._misc_control_0_s._merge_video_fifo + + union { + struct { + CARD8 _crt_engine_threshold_high_0_3 : 4; + CARD8 _crt_cpu_threshold_low_0_3 : 4; + } _crt_cpu_threshold_control_0_s; + CARD8 _crt_cpu_threshold_control_0; + } _crt_cpu_threshold_control_0_u; /* SR8 */ + +#define crt_cpu_threshold_control_0 _crt_cpu_threshold_control_0_u._crt_cpu_threshold_control_0 +#define crt_engine_threshold_high_0_3 _crt_cpu_threshold_control_0_u._crt_cpu_threshold_control_0_s._crt_engine_threshold_high_0_3 +#define crt_cpu_threshold_low_0_3 _crt_cpu_threshold_control_0_u._crt_cpu_threshold_control_0_s._crt_cpu_threshold_low_0_3 + + union { + struct { + CARD8 _crt_cpu_threshold_high_0_3 : 4; + CARD8 _ascii_attribute_threshold_0_2 : 3; + CARD8 _true_color_32bpp : 1; + } _crt_cpu_threshold_control_1_s; + CARD8 _crt_cpu_threshold_control_1; + } _crt_cpu_threshold_control_1_u; /* SR9 */ + +#define crt_cpu_threshold_control_1 _crt_cpu_threshold_control_1_u._crt_cpu_threshold_control_1 +#define crt_cpu_threshold_high_0_3 _crt_cpu_threshold_control_1_u._crt_cpu_threshold_control_1_s._crt_cpu_threshold_high_0_3 +#define ascii_attribute_threshold_0_2 _crt_cpu_threshold_control_1_u._crt_cpu_threshold_control_1_s._ascii_attribute_threshold_0_2 +#define true_color_32bpp _crt_cpu_threshold_control_1_u._crt_cpu_threshold_control_1_s._true_color_32bpp + + union { + struct { + CARD8 _v_total_10 : 1; + CARD8 _v_display_end_10 : 1; + CARD8 _v_blank_start_10 : 1; + CARD8 _v_retrace_start_10 : 1; + CARD8 _screen_off_8_11 : 4; + } _extended_crt_overflow_s; + CARD8 _extended_crt_overflow; + } _extended_crt_overflow_u; /* SRA */ + +#define extended_crt_overflow _extended_crt_overflow_u._extended_crt_overflow +#define v_total_10 _extended_crt_overflow_u._extended_crt_overflow_s._v_total_10 +#define v_display_end_10 _extended_crt_overflow_u._extended_crt_overflow_s._v_display_end_10 +#define v_blank_start_10 _extended_crt_overflow_u._extended_crt_overflow_s._v_blank_start_10 +#define v_retrace_start_10 _extended_crt_overflow_u._extended_crt_overflow_s._v_retrace_start_10 +#define screen_off_8_11 _extended_crt_overflow_u._extended_crt_overflow_s._screen_off_8_11 + + union { + struct { + CARD8 _cpu_bitblt_enable : 1; /* enable CPU bitblt */ + CARD8 _packed_16_color_enable : 1; /* 2 pixels per byte? */ + CARD8 _io_gating : 1; /* when write buffer not empty */ + CARD8 _dual_segment_enable : 1; /* ? */ + CARD8 _true_color_modulation : 1; /* ? */ + CARD8 _memory_mapped_mode : 2; /* mmio enable */ + CARD8 _true_color_order : 1; /* 0: RGB 1: BGR */ + } _misc_control_1_s; + CARD8 _misc_control_1; /* SRB */ + } _misc_control_1_u; + +#define misc_control_1 _misc_control_1_u._misc_control_1 +#define cpu_bitblt_enable _misc_control_1_u._misc_control_1_s._cpu_bitblt_enable +#define memory_mapped_mode _misc_control_1_u._misc_control_1_s._memory_mapped_mode +#define true_color_modulation _misc_control_1_u._misc_control_1_s._true_color_modulation +#define true_color_order _misc_control_1_u._misc_control_1_s._true_color_order + + union { + struct { + CARD8 _sync_reset_enable : 1; + CARD8 _memory_configuration : 3; +#define SIS_MEMORY_CONFIG_1M_1BANK 0 +#define SIS_MEMORY_CONFIG_2M_2BANK 1 +#define SIS_MEMORY_CONFIG_4M_2BANK 2 +#define SIS_MEMORY_CONFIG_2M_1BANK 5 +#define SIS_MEMORY_CONFIG_4M_1BANK 6 +#define SIS_MEMORY_CONFIG_8M_2BANK 7 + CARD8 _test_mode_enable : 1; + CARD8 _read_ahead_enable : 1; + CARD8 _text_mode_16bit_enable : 1; + CARD8 _graphics_mode_32bit_enable : 1; + } _misc_control_2_s; + CARD8 _misc_control_2; + } _misc_control_2_u; /* SRC */ + +#define misc_control_2 _misc_control_2_u._misc_control_2 +#define sync_reset_enable _misc_control_2_u._misc_control_2_s._sync_reset_enable +#define memory_configuration _misc_control_2_u._misc_control_2_s._memory_configuration +#define test_mode_enable _misc_control_2_u._misc_control_2_s._test_mode_enable +#define read_ahead_enable _misc_control_2_u._misc_control_2_s._read_ahead_enable +#define text_mode_16bit_enable _misc_control_2_u._misc_control_2_s._text_mode_16bit_enable +#define graphics_mode_32bit_enable _misc_control_2_u._misc_control_2_s._graphics_mode_32bit_enable + + union ddc_and_power_control_u { + struct { + CARD8 _ddc_clk_programming : 1; + CARD8 _ddc_data_programming : 1; + CARD8 : 1; + CARD8 _acpi_enable : 1; + CARD8 _kbd_cursor_activate : 1; + CARD8 _video_memory_activate : 1; + CARD8 _vga_standby : 1; + CARD8 _vga_suspend : 1; + } _ddc_and_power_control_s; + CARD8 _ddc_and_power_control; + } _ddc_and_power_control_u; /* SR11 */ + +#define ddc_and_power_control _ddc_and_power_control_u._ddc_and_power_control +#define ddc_clk_programming _ddc_and_power_control_u._ddc_and_power_control_s._ddc_clk_programming +#define ddc_data_programming _ddc_and_power_control_u._ddc_and_power_control_s._ddc_data_programming +#define acpi_enable _ddc_and_power_control_u._ddc_and_power_control_s._acpi_enable +#define kbd_cursor_activate _ddc_and_power_control_u._ddc_and_power_control_s._kbd_cursor_activate +#define video_memory_activate _ddc_and_power_control_u._ddc_and_power_control_s._video_memory_activate +#define vga_standby _ddc_and_power_control_u._ddc_and_power_control_s._vga_standby +#define vga_suspend _ddc_and_power_control_u._ddc_and_power_control_s._vga_suspend + + union { + struct { + CARD8 _h_total_8 : 1; + CARD8 _h_display_end_8 : 1; + CARD8 _h_blank_start_8 : 1; + CARD8 _h_sync_start_8 : 1; + CARD8 _h_blank_end_6 : 1; + CARD8 _h_retrace_skew : 3; + } _extended_horizontal_overflow_s; + CARD8 _extended_horizontal_overflow; + } _extended_horizontal_overflow_u; /* SR12 */ +#define extended_horizontal_overflow _extended_horizontal_overflow_u._extended_horizontal_overflow +#define h_total_8 _extended_horizontal_overflow_u._extended_horizontal_overflow_s._h_total_8 +#define h_display_end_8 _extended_horizontal_overflow_u._extended_horizontal_overflow_s._h_display_end_8 +#define h_blank_start_8 _extended_horizontal_overflow_u._extended_horizontal_overflow_s._h_blank_start_8 +#define h_sync_start_8 _extended_horizontal_overflow_u._extended_horizontal_overflow_s._h_sync_start_8 +#define h_blank_end_6 _extended_horizontal_overflow_u._extended_horizontal_overflow_s._h_blank_end_6 +#define h_retrace_skew _extended_horizontal_overflow_u._extended_horizontal_overflow_s._h_retrace_skew + + union { + struct { + CARD8 : 6; + CARD8 _vclk_post_scale_2 : 1; + CARD8 _mclk_post_scale_2 : 1; + } _extended_clock_generator_s; + CARD8 _extended_clock_generator; + } _extended_clock_generator_u; /* SR13 */ + +#define extended_clock_generator _extended_clock_generator_u._extended_clock_generator +#define vclk_post_scale_2 _extended_clock_generator_u._extended_clock_generator_s._vclk_post_scale_2 +#define mclk_post_scale_2 _extended_clock_generator_u._extended_clock_generator_s._mclk_post_scale_2 + + CARD8 cursor_0_red; /* SR14 */ + CARD8 cursor_0_green; /* SR15 */ + CARD8 cursor_0_blue; /* SR16 */ + + CARD8 cursor_1_red; /* SR17 */ + CARD8 cursor_1_green; /* SR18 */ + CARD8 cursor_1_blue; /* SR19 */ + + CARD8 cursor_h_start_0_7; /* SR1A */ + union { + struct { + CARD8 _cursor_h_start_8_11 : 4; + CARD8 : 3; + CARD8 _cursor_mmio_enable : 1; + } _cusor_h_start_1_s; + CARD8 _cursor_h_start_1; + } _cursor_h_start_1_u; /* SR1B */ + +#define cursor_h_start_1 _cursor_h_start_1_u._cursor_h_start_1 +#define cursor_h_start_8_11 _cursor_h_start_1_u._cursor_h_start_1_s._cursor_h_start_8_11 + + CARD8 cursor_h_preset_0_5; /* SR1C */ + + CARD8 cursor_v_start_0_7; /* SR1D */ + + union { + struct { + CARD8 _cursor_v_start_8_10 : 3; + CARD8 _cursor_side_pattern : 1; + CARD8 _cursor_pattern : 4; + } _cusor_v_start_1_s; + CARD8 _cursor_v_start_1; + } _cursor_v_start_1_u; /* SR1E */ + +#define cursor_v_start_1 _cursor_v_start_1_u._cursor_v_start_1 + + CARD8 cursor_v_preset_0_5; /* SR1F */ + + CARD8 linear_base_19_26; /* SR20 */ + + union { + struct { + CARD8 _linear_base_27_31 : 5; + CARD8 _linear_aperture : 3; +#define SIS_LINEAR_APERTURE_512K 0 +#define SIS_LINEAR_APERTURE_1M 1 +#define SIS_LINEAR_APERTURE_2M 2 +#define SIS_LINEAR_APERTURE_4M 3 +#define SIS_LINEAR_APERTURE_8M 4 + } _linear_base_1_s; + CARD8 _linear_base_1; + } _linear_base_1_u; /* SR21 */ + +#define linear_base_1 _linear_base_1_u._linear_base_1 +#define linear_base_27_31 _linear_base_1_u._linear_base_1_s._linear_base_27_31 +#define linear_aperture _linear_base_1_u._linear_base_1_s._linear_aperture + + union { + struct { + CARD8 _screen_start_addr_20 : 1; + CARD8 : 3; + CARD8 _continuous_mem_access : 1; + CARD8 : 1; + CARD8 _power_down_dac : 1; + CARD8 : 1; + } _graphics_engine_0_s; + CARD8 _graphics_engine_0; + } _graphics_engine_0_u; /* SR26 */ + +#define graphics_engine_0 _graphics_engine_0_u._graphics_engine_0 + + + union { + struct { + CARD8 _screen_start_addr_16_19: 4; + CARD8 _logical_screen_width : 2; +#define SIS_LOG_SCREEN_WIDTH_1024 0 +#define SIS_LOG_SCREEN_WIDTH_2048 1 +#define SIS_LOG_SCREEN_WIDTH_4096 2 + CARD8 _graphics_prog_enable : 1; + CARD8 _turbo_queue_enable : 1; + } _graphics_engine_1_s; + CARD8 _graphics_engine_1; + } _graphics_engine_1_u; /* SR27 */ + +#define graphics_engine_1 _graphics_engine_1_u._graphics_engine_1 +#define screen_start_addr_16_19 _graphics_engine_1_u._graphics_engine_1_s._screen_start_addr_16_19 +#define logical_screen_width _graphics_engine_1_u._graphics_engine_1_s._logical_screen_width +#define graphics_prog_enable _graphics_engine_1_u._graphics_engine_1_s._graphics_prog_enable +#define turbo_queue_enable _graphics_engine_1_u._graphics_engine_1_s._turbo_queue_enable + + + union { + struct { + CARD8 _mclk_numerator : 7; + CARD8 _mclk_divide_by_2 : 1; + } _internal_mclk_0_s; + CARD8 _internal_mclk_0; + } _internal_mclk_0_u; /* SR28 */ + +#define internal_mclk_0 _internal_mclk_0_u._internal_mclk_0 +#define mclk_numerator _internal_mclk_0_u._internal_mclk_0_s._mclk_numerator +#define mclk_divide_by_2 _internal_mclk_0_u._internal_mclk_0_s._mclk_divide_by_2 + + union { + struct { + CARD8 _mclk_denominator : 5; + CARD8 _mclk_post_scale : 2; +#define SIS_MCLK_POST_SCALE_1 0 +#define SIS_MCLK_POST_SCALE_2 1 +#define SIS_MCLK_POST_SCALE_3 2 +#define SIS_MCLK_POST_SCALE_4 3 + CARD8 _mclk_vco_gain : 1; + } _internal_mclk_1_s; + CARD8 _internal_mclk_1; + } _internal_mclk_1_u; /* SR29 */ + +#define internal_mclk_1 _internal_mclk_1_u._internal_mclk_1 +#define mclk_denominator _internal_mclk_1_u._internal_mclk_1_s._mclk_denominator +#define mclk_post_scale _internal_mclk_1_u._internal_mclk_1_s._mclk_post_scale +#define mclk_vco_gain _internal_mclk_1_u._internal_mclk_1_s._mclk_vco_gain + + union { + struct { + CARD8 _vclk_numerator : 7; + CARD8 _vclk_divide_by_2 : 1; + } _internal_vclk_0_s; + CARD8 _internal_vclk_0; + } _internal_vclk_0_u; /* SR2A */ + +#define internal_vclk_0 _internal_vclk_0_u._internal_vclk_0 +#define vclk_numerator _internal_vclk_0_u._internal_vclk_0_s._vclk_numerator +#define vclk_divide_by_2 _internal_vclk_0_u._internal_vclk_0_s._vclk_divide_by_2 + + union { + struct { + CARD8 _vclk_denominator : 5; + CARD8 _vclk_post_scale : 2; +#define SIS_VCLK_POST_SCALE_1 0 +#define SIS_VCLK_POST_SCALE_2 1 +#define SIS_VCLK_POST_SCALE_3 2 +#define SIS_VCLK_POST_SCALE_4 3 + CARD8 _vclk_vco_gain : 1; + } _internal_vclk_1_s; + CARD8 _internal_vclk_1; + } _internal_vclk_1_u; /* SR2B */ + +#define internal_vclk_1 _internal_vclk_1_u._internal_vclk_1 +#define vclk_denominator _internal_vclk_1_u._internal_vclk_1_s._vclk_denominator +#define vclk_post_scale _internal_vclk_1_u._internal_vclk_1_s._vclk_post_scale +#define vclk_vco_gain _internal_vclk_1_u._internal_vclk_1_s._vclk_vco_gain + + union { + struct { + CARD8 _extended_clock_select : 2; +#define SIS_CLOCK_SELECT_INTERNAL 0 +#define SIS_CLOCK_SELECT_25MHZ 1 +#define SIS_CLOCK_SELECT_28MHZ 2 + CARD8 _disable_line_compare : 1; + CARD8 _disable_pci_read_t_o : 1; + CARD8 _cursor_start_addr_18_21: 4; + } _misc_control_7_s; + CARD8 _misc_control_7; + } _misc_control_7_u; /* SR38 */ + +#define misc_control_7 _misc_control_7_u._misc_control_7 +#define extended_clock_select _misc_control_7_u._misc_control_7_s._extended_clock_select +#define disable_line_compare _misc_control_7_u._misc_control_7_s._disable_line_compare +#define disable_pci_read_t_o _misc_control_7_u._misc_control_7_s._disable_pci_read_t_o +#define cursor_start_addr_18_21 _misc_control_7_u._misc_control_7_s._cursor_start_addr_18_21 + + union { + struct { + CARD8 _high_speed_dclk : 1; + CARD8 _sgram_block_write : 1; + CARD8 _cursor_start_addr_22 : 1; + CARD8 _dram_texture_read : 1; + CARD8 _sgram_16mb : 1; + CARD8 _agp_signal_delay : 2; + CARD8 _dclk_off : 1; + } _misc_control_11_s; + CARD8 _misc_control_11; + } _misc_control_11_u; /* SR3E */ + +#define misc_control_11 _misc_control_11_u._misc_control_11 +#define high_speed_dclk _misc_control_11_u._misc_control_11_s._high_speed_dclk +#define sgram_block_write _misc_control_11_u._misc_control_11_s.__sgram_block_write +#define cursor_start_addr_22 _misc_control_11_u._misc_control_11_s._cursor_start_addr_22 +#define dram_texture_read _misc_control_11_u._misc_control_11_s._dram_texture_read +#define sgram_16mb _misc_control_11_u._misc_control_11_s._sgram_16mb +#define agp_signal_delay _misc_control_11_u._misc_control_11_s._agp_signal_delay +#define dclk_off _misc_control_11_u._misc_control_11_s._dclk_off + + union { + struct { + CARD8 : 1; + CARD8 _flat_panel_low_enable : 1; + CARD8 _crt_cpu_threshold_low_4: 1; + CARD8 _crt_engine_threshold_high_4: 1; + CARD8 _crt_cpu_threshold_high_4 : 1; + CARD8 _crt_threshold_full_control : 2; +#define SIS_CRT_32_STAGE_THRESHOLD 0 +#define SIS_CRT_64_STAGE_THRESHOLD 1 +#define SIS_CRT_63_STAGE_THRESHOLD 2 +#define SIS_CRT_256_STAGE_THRESHOLD 3 + CARD8 _high_speed_dac_1 : 1; + } _misc_control_12_s; + CARD8 _misc_control_12; + } _misc_control_12_u; /* SR3F */ +#define misc_control_12 _misc_control_12_u._misc_control_12 +#define flat_panel_low_enable _misc_control_12_u._misc_control_12_s._flat_panel_low_enable +#define crt_cpu_threshold_low_4 _misc_control_12_u._misc_control_12_s._crt_cpu_threshold_low_4 +#define crt_engine_threshold_high_4 _misc_control_12_u._misc_control_12_s._crt_engine_threshold_high_4 +#define crt_cpu_threshold_high_4 _misc_control_12_u._misc_control_12_s._crt_cpu_threshold_high_4 +#define crt_threshold_full_control _misc_control_12_u._misc_control_12_s._crt_threshold_full_control +#define high_speed_dac_1 _misc_control_12_u._misc_control_12_s._high_speed_dac_1 + + /* computed values */ + CARD16 ge_screen_pitch; + CARD8 bits_per_pixel; + CARD8 depth; + CARD8 double_pixel_mode; + CARD16 pixel_width; +} SisCrtc; + +#define crtc_v_total(crtc) ((crtc)->v_total_0_7 | \ + ((crtc)->v_total_8 << 8) | \ + ((crtc)->v_total_9 << 9) | \ + ((crtc)->v_total_10 << 10)) + +#define crtc_set_v_total(crtc,v) { \ + ((crtc))->v_total_0_7 = (v); \ + ((crtc))->v_total_8 = (v) >> 8; \ + ((crtc))->v_total_9 = (v) >> 9; \ + ((crtc))->v_total_10 = (v) >> 10; \ +} + +#define crtc_v_display_end(crtc) ((crtc)->v_display_end_0_7 | \ + ((crtc)->v_display_end_8 << 8) | \ + ((crtc)->v_display_end_9 << 9) | \ + ((crtc)->v_display_end_10 << 10)) + +#define crtc_set_v_display_end(crtc,v) {\ + ((crtc))->v_display_end_0_7 = (v); \ + ((crtc))->v_display_end_8 = (v) >> 8; \ + ((crtc))->v_display_end_9 = (v) >> 9; \ + ((crtc))->v_display_end_10 = (v) >> 10; \ +} + +#define crtc_v_retrace_start(crtc) ((crtc)->v_retrace_start_0_7 | \ + ((crtc)->v_retrace_start_8 << 8) | \ + ((crtc)->v_retrace_start_9 << 9) | \ + ((crtc)->v_retrace_start_10 << 10)) + +#define crtc_set_v_retrace_start(crtc,v) {\ + ((crtc))->v_retrace_start_0_7 = (v); \ + ((crtc))->v_retrace_start_8 = (v) >> 8; \ + ((crtc))->v_retrace_start_9 = (v) >> 9; \ + ((crtc))->v_retrace_start_10 = (v) >> 10; \ +} + +#define crtc_v_blank_start(crtc) ((crtc)->v_blank_start_0_7 | \ + ((crtc)->v_blank_start_8 << 8) | \ + ((crtc)->v_blank_start_9 << 9) | \ + ((crtc)->v_blank_start_10 << 10)) + +#define crtc_set_v_blank_start(crtc,v) {\ + ((crtc))->v_blank_start_0_7 = (v); \ + ((crtc))->v_blank_start_8 = (v) >> 8; \ + ((crtc))->v_blank_start_9 = (v) >> 9; \ + ((crtc))->v_blank_start_10 = (v) >> 10; \ +} + +#define crtc_h_total(crtc) ((crtc)->h_total_0_7 | \ + ((crtc)->h_total_8 << 8)) + +#define crtc_set_h_total(crtc,v) {\ + ((crtc))->h_total_0_7 = (v); \ + ((crtc))->h_total_8 = (v) >> 8; \ +} + +#define crtc_h_display_end(crtc) ((crtc)->h_display_end_0_7 | \ + ((crtc)->h_display_end_8 << 8)) + +#define crtc_set_h_display_end(crtc,v) {\ + ((crtc))->h_display_end_0_7 = (v); \ + ((crtc))->h_display_end_8 = (v) >> 8; \ +} + +#define crtc_h_blank_start(crtc) ((crtc)->h_blank_start_0_7 | \ + ((crtc)->h_blank_start_8 << 8)) + +#define crtc_set_h_blank_start(crtc,v) {\ + ((crtc))->h_blank_start_0_7 = (v); \ + ((crtc))->h_blank_start_8 = (v) >> 8; \ +} + +#define crtc_h_blank_end(crtc) ((crtc)->h_blank_end_0_4 | \ + ((crtc)->h_blank_end_5 << 5)) + +#define crtc_set_h_blank_end(crtc,v) {\ + ((crtc))->h_blank_end_0_4 = (v); \ + ((crtc))->h_blank_end_5 = (v) >> 5; \ +} + +#define crtc_h_sync_start(crtc) ((crtc)->h_sync_start_0_7 | \ + ((crtc)->h_sync_start_8 << 8)) + +#define crtc_set_h_sync_start(crtc,v) {\ + ((crtc))->h_sync_start_0_7 = (v); \ + ((crtc))->h_sync_start_8 = (v) >> 8; \ +} + +#define crtc_h_sync_end(crtc) ((crtc)->h_sync_end_0_4) + +#define crtc_set_h_sync_end(crtc,v) {\ + ((crtc))->h_sync_end_0_4 = (v); \ +} + +#define crtc_screen_off(crtc) ((crtc)->screen_off_0_7 | \ + ((crtc)->screen_off_8_11 << 8)) + +#define crtc_set_screen_off(crtc,v) {\ + ((crtc))->screen_off_0_7 = (v); \ + ((crtc))->screen_off_8_11 = (v) >> 8; \ +} + +#define crtc_ge_screen_width(crtc) ((crtc)->ge_screen_width_0_1 | \ + ((crtc)->ge_screen_width_2 << 2)) + +#define crtc_set_ge_screen_width(crtc,v) { \ + (crtc)->ge_screen_width_0_1 = (v); \ + (crtc)->ge_screen_width_2 = (v) >> 2; \ +} + +#define crtc_h_start_fifo_fetch(crtc) ((crtc)->h_start_fifo_fetch_0_7 | \ + ((crtc)->h_start_fifo_fetch_8 << 8)) + +#define crtc_set_h_start_fifo_fetch(crtc,v) {\ + (crtc)->h_start_fifo_fetch_0_7 = (v); \ + (crtc)->h_start_fifo_fetch_8 = (v) >> 8; \ +} + +#define crtc_start_address(crtc) ((crtc)->start_address_0_7 | \ + ((crtc)->start_address_8_15 << 8) | \ + ((crtc)->start_address_16_19 << 16)) + +#define crtc_set_start_address(crtc,v) {\ + (crtc)->start_address_0_7 = (v); \ + (crtc)->start_address_8_15 = (v) >> 8; \ + (crtc)->start_address_16_19 = (v) >> 16; \ +} + +#define crtc_line_compare(crtc) ((crtc)->line_compare_0_7 | \ + ((crtc)->line_compare_8 << 8) | \ + ((crtc)->line_compare_9 << 9) | \ + ((crtc)->line_compare_10 << 10)) + +#define crtc_set_line_compare(crtc,v) { \ + ((crtc))->line_compare_0_7 = (v); \ + ((crtc))->line_compare_8 = (v) >> 8; \ + ((crtc))->line_compare_9 = (v) >> 9; \ + ((crtc))->line_compare_10 = (v) >> 10; \ +} + +#define crtc_set_cursor_start_addr(crtc,v) { \ + (crtc)->cursor_start_addr_18_21 = (v) >> 18; \ + (crtc)->cursor_start_addr_22 = (v) >> 22; \ +} + +#define _sisOutb(v,r) outb(v,r) +#define _sisInb(r) inb(r) + +#define SIS_DAC_INDEX_READ 0x47 +#define SIS_DAC_INDEX_WRITE 0x48 +#define SIS_DAC_DATA 0x49 + +#define GetCrtc(sisc,i) _sisReadIndexRegister ((sisc)->io_base+0x54,i) +#define PutCrtc(sisc,i,v) _sisWriteIndexRegister ((sisc)->io_base+0x54,i,v) + +#define GetSrtc(sisc,i) _sisReadIndexRegister ((sisc)->io_base+0x44,i) +#define PutSrtc(sisc,i,v) _sisWriteIndexRegister ((sisc)->io_base+0x44,i,v) + +#define GetArtc(sisc,i) _sisReadArtc ((sisc)->io_base+0x40,i) +#define PutArtc(sisc,i,v) _sisWriteArtc ((sisc)->io_base+0x40,i,v) + +#define GetGrtc(sisc,i) _sisReadIndexRegister ((sisc)->io_base+0x4e,i) +#define PutGrtc(sisc,i,v) _sisWriteIndexRegister ((sisc)->io_base+0x4e,i,v) + +#define _sisWaitVRetrace(sisc) + +#define LockSis(sisc) +#define UnlockSis(sisc) + +typedef struct _sisTiming { + /* label */ + int horizontal; + int vertical; + int rate; + /* horizontal timing */ + int hfp; /* front porch */ + int hbp; /* back porch */ + int hblank; /* blanking */ + /* vertical timing */ + int vfp; /* front porch */ + int vbp; /* back porch */ + int vblank; /* blanking */ +} SisTiming; + +#define SIS_TEXT_SAVE (64*1024) + +typedef struct _sisSave { + CARD8 srb; + CARD8 sr5; + SisCrtc crtc; + CARD8 text_save[SIS_TEXT_SAVE]; +} SisSave; + +typedef struct _sisCardInfo { + SisPtr sis; + int memory; + CARD8 *frameBuffer; + CARD8 *registers; + VOL32 *cpu_bitblt; + CARD32 io_base; + SisSave save; +} SisCardInfo; + +typedef struct _sisScreenInfo { + CARD8 *cursor_base; + CARD32 cursor_off; + CARD8 *expand; + CARD32 expand_off; + int expand_len; + SisCursor cursor; +} SisScreenInfo; + +#define getSisCardInfo(kd) ((SisCardInfo *) ((kd)->card->driver)) +#define sisCardInfo(kd) SisCardInfo *sisc = getSisCardInfo(kd) + +#define getSisScreenInfo(kd) ((SisScreenInfo *) ((kd)->screen->driver)) +#define sisScreenInfo(kd) SisScreenInfo *siss = getSisScreenInfo(kd) + +Bool sisCardInit (KdCardInfo *); +Bool sisScreenInit (KdScreenInfo *); +Bool sisEnable (ScreenPtr pScreen); +void sisDisable (ScreenPtr pScreen); +void sisFini (ScreenPtr pScreen); + +Bool sisCursorInit (ScreenPtr pScreen); +void sisCursorEnable (ScreenPtr pScreen); +void sisCursorDisable (ScreenPtr pScreen); +void sisCursorFini (ScreenPtr pScreen); +void sisRecolorCursor (ScreenPtr pScreen, int ndef, xColorItem *pdefs); + +Bool sisDrawInit (ScreenPtr pScreen); +void sisDrawEnable (ScreenPtr pScreen); +void sisDrawSync (ScreenPtr pScreen); +void sisDrawDisable (ScreenPtr pScreen); +void sisDrawFini (ScreenPtr pScreen); + +void sisGetColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs); +void sisPutColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs); + +void SISInitCard (KdCardAttr *attr); + +CARD8 _sisReadIndexRegister (CARD32 base, CARD8 index); +void _sisWriteIndexRegister (CARD32 base, CARD8 index, CARD8 value); +CARD8 _sisReadArtc (CARD32 base, CARD8 index); +void _sisWriteArtc (CARD32 base, CARD8 index, CARD8 value); + +extern KdCardFuncs sisFuncs; + +/* + * sisclock.c + */ +void +sisGetClock (unsigned long clock, SisCrtc *crtc); + +void +sisEngThresh (SisCrtc *crtc, unsigned long vclk, int bpp); + +/* + * siscurs.c + */ + +Bool +sisCursorInit (ScreenPtr pScreen); + +void +sisCursorEnable (ScreenPtr pScreen); + +void +sisCursorDisable (ScreenPtr pScreen); + +void +sisCursorFini (ScreenPtr pScreen); + +/* sisdraw.c */ +Bool +sisDrawInit (ScreenPtr pScreen); + +void +sisDrawEnable (ScreenPtr pScreen); + +void +sisDrawDisable (ScreenPtr pScreen); + +void +sisDrawFini (ScreenPtr pScreen); + +#endif /* _SIS_H_ */ --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/sis530/sisio.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/sis530/sisio.c @@ -0,0 +1,33 @@ +/* + * Id: sisio.c,v 1.1 1999/11/02 08:17:24 keithp Exp $ + * + * Copyright © 1999 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/sis530/sisio.c,v 1.1 1999/11/19 13:54:00 hohndel Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#ifdef linux +#define extern +#include +#undef extern +#endif --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/sis530/sisclock.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/sis530/sisclock.c @@ -0,0 +1,235 @@ +/* + * Id: sisclock.c,v 1.1 1999/11/02 08:17:24 keithp Exp $ + * + * Copyright © 1999 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/sis530/sisclock.c,v 1.1 1999/11/19 13:53:59 hohndel Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "sis.h" +#include + +#define FREF 14318180 +#define MIN_VCO FREF +#define MAX_VCO 230000000 +#define MAX_PSN 0 /* no pre scaler for this chip */ +#define TOLERANCE 0.01 /* search smallest M and N in this tolerance */ +#define max_VLD 1 + +/* + * Compute clock values given target frequency + */ +void +sisGetClock (unsigned long clock, SisCrtc *crtc) +{ + unsigned char reg7, reg13, reg2a, reg2b; + int M, N, P, VLD; + + int bestM, bestN, bestP, bestPSN, bestVLD; + double bestError, abest = 42.0, bestFout; + + double Fvco, Fout; + double error, aerror; + + double target = (double) clock; + + int M_min = 2; + int M_max = 128; + + int low_N = 2; + int high_N = 32; + int PSN = 1; + + /* + * fd = fref*(Numerator/Denumerator)*(Divider/PostScaler) + * + * M = Numerator [1:128] + * N = DeNumerator [1:32] + * VLD = Divider (Vco Loop Divider) : divide by 1, 2 + * P = Post Scaler : divide by 1, 2, 3, 4 + * PSN = Pre Scaler (Reference Divisor Select) + * + * result in vclk[] + */ + + P = 1; + if (target < MAX_VCO / 2) + P = 2; + if (target < MAX_VCO / 3) + P = 3; + if (target < MAX_VCO / 4) + P = 4; + if (target < MAX_VCO / 6) + P = 6; + if (target < MAX_VCO / 8) + P = 8; + + Fvco = P * target; + + for (N = low_N; N <= high_N; N++) + { + double M_desired = Fvco / FREF * N; + + if (M_desired > M_max * max_VLD) + continue; + + if ( M_desired > M_max ) + { + M = (int)(M_desired / 2 + 0.5); + VLD = 2; + } + else + { + M = (int)(M_desired + 0.5); + VLD = 1; + } + + Fout = (double)FREF * (M * VLD)/(N * P); + error = (target - Fout) / target; + aerror = (error < 0) ? -error : error; + if (aerror < abest) + { + abest = aerror; + bestError = error; + bestM = M; + bestN = N; + bestP = P; + bestPSN = PSN; + bestVLD = VLD; + bestFout = Fout; + } + } + + crtc->vclk_numerator = bestM - 1; + crtc->vclk_divide_by_2 = bestVLD == 2; + + crtc->vclk_denominator = bestN - 1; + switch (bestP) { + case 1: + crtc->vclk_post_scale = SIS_VCLK_POST_SCALE_1; + crtc->vclk_post_scale_2 = 0; + break; + case 2: + crtc->vclk_post_scale = SIS_VCLK_POST_SCALE_2; + crtc->vclk_post_scale_2 = 0; + break; + case 3: + crtc->vclk_post_scale = SIS_VCLK_POST_SCALE_3; + crtc->vclk_post_scale_2 = 0; + break; + case 4: + crtc->vclk_post_scale = SIS_VCLK_POST_SCALE_4; + crtc->vclk_post_scale_2 = 0; + break; + case 6: + crtc->vclk_post_scale = SIS_VCLK_POST_SCALE_3; + crtc->vclk_post_scale_2 = 1; + break; + case 8: + crtc->vclk_post_scale = SIS_VCLK_POST_SCALE_4; + crtc->vclk_post_scale_2 = 1; + break; + } + + crtc->vclk_vco_gain = 1; + + /* + * Don't know how to set mclk for local frame buffer; for + * shared frame buffer, mclk is hardwired to bus speed (100MHz)? + */ +} + +sisCalcMclk (SisCrtc *crtc) +{ + int mclk, Numer, DeNumer; + double Divider, Scalar; + + Numer = crtc->mclk_numerator; + DeNumer = crtc->mclk_denominator; + Divider = crtc->mclk_divide_by_2 ? 2.0 : 1.0; + Scalar = 1.0; + if (crtc->mclk_post_scale_2) + { + switch (crtc->mclk_post_scale) { + case 2: + Scalar = 6.0; + break; + case 3: + Scalar = 8.0; + break; + } + } + else + { + switch (crtc->mclk_post_scale) { + case 0: + Scalar = 1.0; + break; + case 1: + Scalar = 2.0; + break; + case 2: + Scalar = 3.0; + break; + case 3: + Scalar = 4.0; + break; + } + } + + mclk = (int)(FREF*((double)(Numer+1)/(double)(DeNumer+1))*(Divider/Scalar)); + + return(mclk); +} + +#define UMA_FACTOR 60 +#define LFB_FACTOR 30 // Only if local frame buffer +#define SIS_SAYS_SO 0x1F // But how is the performance?? +#define CRT_ENG_THRESH 0x0F // But how is the performance?? +#define BUS_WIDTH 64 +#define DFP_BUS_WIDTH 32 // rumour has it for digital flat panel ?? +#define MEGAHZ (1<<20) + +void +sisEngThresh (SisCrtc *crtc, unsigned long vclk, int bpp) +{ + int threshlow, mclk; + + mclk = sisCalcMclk(crtc) / 1000000; + vclk = vclk / 1000000; + threshlow = ((((UMA_FACTOR*vclk*bpp)/ + (mclk*BUS_WIDTH))+1)/2)+4; + + crtc->crt_cpu_threshold_low_0_3 = threshlow; + crtc->crt_cpu_threshold_low_4 = threshlow >> 4; + + crtc->crt_cpu_threshold_high_0_3 = (SIS_SAYS_SO & 0xf); + crtc->crt_cpu_threshold_high_4 = 0; + + crtc->crt_engine_threshold_high_0_3 = CRT_ENG_THRESH; + crtc->crt_engine_threshold_high_4 = 1; + + crtc->ascii_attribute_threshold_0_2 = (SIS_SAYS_SO >> 4); + + crtc->crt_threshold_full_control = SIS_CRT_64_STAGE_THRESHOLD; +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/sis530/sisstub.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/sis530/sisstub.c @@ -0,0 +1,69 @@ +/* + * Id: sisstub.c,v 1.1 1999/11/02 08:20:07 keithp Exp $ + * + * Copyright 1999 SuSE, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of SuSE not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. SuSE makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + * + * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE + * BE LIABLE FOR 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. + * + * Author: Keith Packard, SuSE, Inc. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/sis530/sisstub.c,v 1.4 2000/08/09 17:52:44 keithp Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "sis.h" + +static const int sisCards[] = { 0x6306, 0x0200 }; + +#define numSisCards (sizeof (sisCards) / sizeof (sisCards[0])) + +void +InitCard (char *name) +{ + KdCardAttr attr; + int i; + + for (i = 0; i < numSisCards; i++) + if (LinuxFindPci (0x1039, sisCards[i], 0, &attr)) + KdCardInfoAdd (&sisFuncs, &attr, (void *) sisCards[i]); +} + +void +InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv) +{ + KdInitOutput (pScreenInfo, argc, argv); +} + +void +InitInput (int argc, char **argv) +{ + KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs); +} + +void +ddxUseMsg (void) +{ + KdUseMsg(); +} + +int +ddxProcessArgument (int argc, char **argv, int i) +{ + return KdProcessArgument (argc, argv, i); +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/sis530/siscurs.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/sis530/siscurs.c @@ -0,0 +1,367 @@ +/* + * Id: siscurs.c,v 1.1 1999/11/02 08:17:24 keithp Exp $ + * + * Copyright © 1999 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/sis530/siscurs.c,v 1.1 1999/11/19 13:53:59 hohndel Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "sis.h" +#include "cursorstr.h" + +#define SetupCursor(s) KdScreenPriv(s); \ + sisCardInfo(pScreenPriv); \ + sisScreenInfo(pScreenPriv); \ + SisPtr sis = sisc->sis; \ + SisCursor *pCurPriv = &siss->cursor + +static void +_sisMoveCursor (ScreenPtr pScreen, int x, int y) +{ + SetupCursor(pScreen); + CARD8 xlow, xhigh, ylow, yhigh; + CARD8 xoff, yoff; + + x -= pCurPriv->xhot; + xoff = 0; + if (x < 0) + { + xoff = -x; + x = 0; + } + y -= pCurPriv->yhot; + yoff = 0; + if (y < 0) + { + yoff = -y; + y = 0; + } + xlow = (CARD8) x; + xhigh = (CARD8) (x >> 8); + ylow = (CARD8) y; + yhigh = (CARD8) (y >> 8); + + PutSrtc (sisc, 0x5, 0x86); + PutSrtc (sisc, 0x1c, xoff & 0x3f); + PutSrtc (sisc, 0x1f, yoff & 0x3f); + + PutSrtc (sisc, 0x1a, xlow); + PutSrtc (sisc, 0x1b, xhigh & 0xf); + + PutSrtc (sisc, 0x1d, ylow); + PutSrtc (sisc, 0x1e, yhigh & 0x7); +} + +static void +sisMoveCursor (ScreenPtr pScreen, int x, int y) +{ + SetupCursor (pScreen); + + if (!pCurPriv->has_cursor) + return; + + if (!pScreenPriv->enabled) + return; + + LockSis(sisc); + _sisMoveCursor (pScreen, x, y); + UnlockSis(sisc); +} + +static void +_sisSetCursorColors (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + CursorPtr pCursor = pCurPriv->pCursor; + /* set foreground */ + PutSrtc (sisc, 0x17, pCursor->foreRed >> 10); + PutSrtc (sisc, 0x18, pCursor->foreGreen >> 10); + PutSrtc (sisc, 0x19, pCursor->foreBlue >> 10); + + /* set background */ + PutSrtc (sisc, 0x14, pCursor->backRed >> 10); + PutSrtc (sisc, 0x15, pCursor->backGreen >> 10); + PutSrtc (sisc, 0x16, pCursor->backBlue >> 10); +} + +static void +sisLoadCursor (ScreenPtr pScreen, int x, int y) +{ + SetupCursor(pScreen); + CursorPtr pCursor = pCurPriv->pCursor; + CursorBitsPtr bits = pCursor->bits; + int w, h; + unsigned short *ram, r; + unsigned char *msk, *mskLine, *src, *srcLine; + unsigned short m, s; + + int i, j; + int cursor_address; + int src_stride, src_width; + + CARD8 sr6; + + /* + * Lock Sis so the cursor doesn't move while we're setting it + */ + LockSis(sisc); + + pCurPriv->pCursor = pCursor; + pCurPriv->xhot = pCursor->bits->xhot; + pCurPriv->yhot = pCursor->bits->yhot; + + /* + * Stick new image into cursor memory + */ + ram = (unsigned short *) siss->cursor_base; + mskLine = (unsigned char *) bits->mask; + srcLine = (unsigned char *) bits->source; + + h = bits->height; + if (h > SIS_CURSOR_HEIGHT) + h = SIS_CURSOR_HEIGHT; + + src_stride = BitmapBytePad(bits->width); /* bytes per line */ + src_width = (bits->width + 7) >> 3; + + for (i = 0; i < SIS_CURSOR_HEIGHT; i++) { + msk = mskLine; + src = srcLine; + mskLine += src_stride; + srcLine += src_stride; + for (j = 0; j < SIS_CURSOR_WIDTH / 8; j++) { + + unsigned short m, s; + + if (i < h && j < src_width) + { + m = *msk++; + s = *src++ & m; + m = ~m; + /* mask off right side */ + if (j == src_width - 1 && (bits->width & 7)) + { + m |= 0xff << (bits->width & 7); + } + } + else + { + m = 0xff; + s = 0x00; + } + + /* + * The SIS530 HW cursor format is: source(AND) bit, + * then a mask(XOR) bit, etc. + * byte swapping in sis530 is: + * abcd ==> cdab + */ + +#define bit(a,n) (((a) >> (n)) & 0x1) + + r = ((bit(m, 0) << 7) | (bit(s, 0) << 6) | + (bit(m, 1) << 5) | (bit(s, 1) << 4) | + (bit(m, 2) << 3) | (bit(s, 2) << 2) | + (bit(m, 3) << 1) | (bit(s, 3) << 0) | + (bit(m, 4) << 15) | (bit(s, 4) << 14) | + (bit(m, 5) << 13) | (bit(s, 5) << 12) | + (bit(m, 6) << 11) | (bit(s, 6) << 10) | + (bit(m, 7) << 9) | (bit(s, 7) << 8)); + + *ram++ = r; + } + } + + /* Set new color */ + _sisSetCursorColors (pScreen); + + /* Move to new position */ + _sisMoveCursor (pScreen, x, y); + + /* Enable cursor */ + sr6 = GetSrtc (sisc, 0x6); + sr6 |= 0x40; + PutSrtc (sisc, 0x6, sr6); + + UnlockSis(sisc); +} + +static void +sisUnloadCursor (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + CARD8 sr6; + + LockSis (sisc); + + /* Disable cursor */ + sr6 = GetSrtc (sisc, 0x6); + sr6 &= ~0x40; + PutSrtc (sisc, 0x6, sr6); + PutSrtc (sisc, 0x1b, 0x00); + + UnlockSis (sisc); +} + +static Bool +sisRealizeCursor (ScreenPtr pScreen, CursorPtr pCursor) +{ + SetupCursor(pScreen); + + if (!pScreenPriv->enabled) + return TRUE; + + /* miRecolorCursor does this */ + if (pCurPriv->pCursor == pCursor) + { + if (pCursor) + { + int x, y; + + miPointerPosition (&x, &y); + sisLoadCursor (pScreen, x, y); + } + } + return TRUE; +} + +static Bool +sisUnrealizeCursor (ScreenPtr pScreen, CursorPtr pCursor) +{ + return TRUE; +} + +static void +sisSetCursor (ScreenPtr pScreen, CursorPtr pCursor, int x, int y) +{ + SetupCursor(pScreen); + + pCurPriv->pCursor = pCursor; + + if (!pScreenPriv->enabled) + return; + + if (pCursor) + sisLoadCursor (pScreen, x, y); + else + sisUnloadCursor (pScreen); +} + +miPointerSpriteFuncRec sisPointerSpriteFuncs = { + sisRealizeCursor, + sisUnrealizeCursor, + sisSetCursor, + sisMoveCursor, +}; + +static void +sisQueryBestSize (int class, + unsigned short *pwidth, unsigned short *pheight, + ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + switch (class) + { + case CursorShape: + if (*pwidth > pCurPriv->width) + *pwidth = pCurPriv->width; + if (*pheight > pCurPriv->height) + *pheight = pCurPriv->height; + if (*pwidth > pScreen->width) + *pwidth = pScreen->width; + if (*pheight > pScreen->height) + *pheight = pScreen->height; + break; + default: + fbQueryBestSize (class, pwidth, pheight, pScreen); + break; + } +} + +Bool +sisCursorInit (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + if (!siss->cursor_base) + { + pCurPriv->has_cursor = FALSE; + return FALSE; + } + + pCurPriv->width = SIS_CURSOR_WIDTH; + pCurPriv->height= SIS_CURSOR_HEIGHT; + pScreen->QueryBestSize = sisQueryBestSize; + miPointerInitialize (pScreen, + &sisPointerSpriteFuncs, + &kdPointerScreenFuncs, + FALSE); + pCurPriv->has_cursor = TRUE; + pCurPriv->pCursor = NULL; + return TRUE; +} + +void +sisCursorEnable (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + if (pCurPriv->has_cursor) + { + if (pCurPriv->pCursor) + { + int x, y; + + miPointerPosition (&x, &y); + sisLoadCursor (pScreen, x, y); + } + else + sisUnloadCursor (pScreen); + } +} + +void +sisCursorDisable (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + if (!pScreenPriv->enabled) + return; + + if (pCurPriv->has_cursor) + { + if (pCurPriv->pCursor) + { + sisUnloadCursor (pScreen); + } + } +} + +void +sisCursorFini (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + pCurPriv->pCursor = NULL; +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/sis530/sis.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/sis530/sis.c @@ -0,0 +1,924 @@ +/* + * Id: sis.c,v 1.1 1999/11/02 08:17:24 keithp Exp $ + * + * Copyright © 1999 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/sis530/sis.c,v 1.4 2000/05/06 22:17:49 keithp Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "sis.h" + +#define MAX_FB_SIZE (4096 * 1024) + +#define MMIO_SIZE (64 * 1024) + +int sisMemoryTable[8] = { + 1, 2, 4, 0, 0, 2, 4, 8 +}; + +Bool +sisCardInit (KdCardInfo *card) +{ + SisCardInfo *sisc; + SisPtr sis; + int size; + CARD8 *registers; + CARD8 *temp_buffer; + CARD8 save_sr5; + + sisc = (SisCardInfo *) xalloc (sizeof (SisCardInfo)); + if (!sisc) + goto bail0; + + sisc->io_base = card->attr.io; + /* + * enable access to SiS ports (no MMIO available) + */ + iopl(3); + save_sr5 = GetSrtc(sisc,0x5); + if (save_sr5 != 0x21) + save_sr5 = 0x86; + PutSrtc(sisc,0x5,0x86); +#if 0 + { + int i; + + for (i = 0; i <= 0x3f; i++) + fprintf (stderr, "SR%02x = %02x\n", i, GetSrtc(sisc,i)); + } +#endif + sisc->memory = sisMemoryTable[GetSrtc(sisc,0xc)&0x7] * 1024 * 1024; + + PutSrtc(sisc,0x5,save_sr5); + + if (!sisc->memory) + { + ErrorF ("Can't detect SiS530 frame buffer\n"); + goto bail1; + } + + /* + * Map frame buffer and MMIO registers + */ + sisc->frameBuffer = KdMapDevice (card->attr.address[0], sisc->memory); + if (!sisc->frameBuffer) + goto bail1; + + sisc->registers = KdMapDevice (card->attr.address[1], MMIO_SIZE); + if (!sisc->registers) + goto bail2; + + /* + * Offset from base of MMIO to registers + */ + sisc->sis = (SisPtr) (sisc->registers + SIS_MMIO_OFFSET); + sisc->cpu_bitblt = (VOL32 *) sisc->registers; + + card->driver = sisc; + + return TRUE; +bail2: + KdUnmapDevice (sisc->frameBuffer, sisc->memory); +bail1: + xfree (sisc); +bail0: + return FALSE; +} + +Bool +sisModeSupported (KdScreenInfo *screen, const KdMonitorTiming *t) +{ + if (t->horizontal != 1600 && + t->horizontal != 1280 && + t->horizontal != 1152 && + t->horizontal != 1024 && + t->horizontal != 800 && + t->horizontal != 640) + return FALSE; + return TRUE; +} + +Bool +sisModeUsable (KdScreenInfo *screen) +{ + KdCardInfo *card = screen->card; + SisCardInfo *sisc = (SisCardInfo *) card->driver; + SisScreenInfo *siss; + int i; + KdMonitorTiming *t; + CARD32 memory; + int byte_width, pixel_width, screen_size; + + if (screen->fb[0].depth >= 24) + { + screen->fb[0].depth = 24; + screen->fb[0].bitsPerPixel = 24; + screen->dumb = TRUE; + } + else if (screen->fb[0].depth >= 16) + { + screen->fb[0].depth = 16; + screen->fb[0].bitsPerPixel = 16; + } + else if (screen->fb[0].depth >= 15) + { + screen->fb[0].depth = 15; + screen->fb[0].bitsPerPixel = 16; + } + else + { + screen->fb[0].depth = 8; + screen->fb[0].bitsPerPixel = 8; + } + byte_width = screen->width * (screen->fb[0].bitsPerPixel >> 3); + pixel_width = screen->width; + screen->fb[0].pixelStride = pixel_width; + screen->fb[0].byteStride = byte_width; + + screen_size = byte_width * screen->height; + + return screen_size <= sisc->memory; +} + +Bool +sisScreenInit (KdScreenInfo *screen) +{ + KdCardInfo *card = screen->card; + SisCardInfo *sisc = (SisCardInfo *) card->driver; + SisScreenInfo *siss; + int i; + const KdMonitorTiming *t; + CARD32 memory; + int byte_width, pixel_width, screen_size; + + siss = (SisScreenInfo *) xalloc (sizeof (SisScreenInfo)); + if (!siss) + return FALSE; + + memset (siss, '\0', sizeof (SisScreenInfo)); + + if (!screen->width || !screen->height) + { + screen->width = 800; + screen->height = 600; + screen->rate = 72; + } + if (!screen->fb[0].depth) + screen->fb[0].depth = 8; + + t = KdFindMode (screen, sisModeSupported); + + screen->rate = t->rate; + screen->width = t->horizontal; + screen->height = t->vertical; + + if (!KdTuneMode (screen, sisModeUsable, sisModeSupported)) + { + xfree (sisc); + return FALSE; + } + + memory = sisc->memory - screen_size; + + screen->fb[0].frameBuffer = sisc->frameBuffer; + + /* + * Cursor lives in the last 16k of memory + */ + if (memory >= 16384 && !screen->softCursor) + { + siss->cursor_base = sisc->frameBuffer + (sisc->memory - 16384); + siss->cursor_off = siss->cursor_base - sisc->frameBuffer; + memory -= 16384; + } + else + { + screen->softCursor = TRUE; + siss->cursor_base = 0; + siss->cursor_off = 0; + } + + if (memory > 8192) + { + siss->expand = screen->fb[0].frameBuffer + screen_size; + siss->expand_off = siss->expand - sisc->frameBuffer; + siss->expand_len = memory; + memory = 0; + } + else + { + siss->expand = 0; + siss->expand_len = 0; + } + + switch (screen->fb[0].depth) { + case 8: + screen->fb[0].visuals = ((1 << StaticGray) | + (1 << GrayScale) | + (1 << StaticColor) | + (1 << PseudoColor) | + (1 << TrueColor) | + (1 << DirectColor)); + screen->fb[0].blueMask = 0x00; + screen->fb[0].greenMask = 0x00; + screen->fb[0].redMask = 0x00; + break; + case 15: + screen->fb[0].visuals = (1 << TrueColor); + screen->fb[0].blueMask = 0x001f; + screen->fb[0].greenMask = 0x03e0; + screen->fb[0].redMask = 0x7c00; + break; + case 16: + screen->fb[0].visuals = (1 << TrueColor); + screen->fb[0].blueMask = 0x001f; + screen->fb[0].greenMask = 0x07e0; + screen->fb[0].redMask = 0xf800; + break; + case 24: + screen->fb[0].visuals = (1 << TrueColor); + screen->fb[0].blueMask = 0x0000ff; + screen->fb[0].greenMask = 0x00ff00; + screen->fb[0].redMask = 0xff0000; + break; + } + + screen->driver = siss; + + return TRUE; +} + +static void +_sisGetCrtc (SisCardInfo *sisc, SisCrtc *crtc) +{ + crtc->misc_output = _sisInb(sisc->io_base+0x4c); + crtc->h_total_0_7 = GetCrtc (sisc, 0x00); + crtc->h_display_end_0_7 = GetCrtc (sisc, 0x01); + crtc->h_blank_start_0_7 = GetCrtc (sisc, 0x02); + crtc->_h_blank_end = GetCrtc (sisc, 0x03); + crtc->h_sync_start_0_7 = GetCrtc (sisc, 0x04); + crtc->_h_sync_end = GetCrtc (sisc, 0x05); + crtc->v_total_0_7 = GetCrtc (sisc, 0x06); + crtc->crtc_overflow = GetCrtc (sisc, 0x07); + crtc->preset_row_scan = GetCrtc (sisc, 0x08); + crtc->_max_scan_line = GetCrtc (sisc, 0x09); + crtc->cursor_start = GetCrtc (sisc, 0x0a); + crtc->cursor_end = GetCrtc (sisc, 0x0a); + crtc->start_address_8_15 = GetCrtc (sisc, 0x0c); + crtc->start_address_0_7 = GetCrtc (sisc, 0x0d); + crtc->text_cursor_15_8 = GetCrtc (sisc, 0x0e); + crtc->text_cursor_7_0 = GetCrtc (sisc, 0x0f); + crtc->v_retrace_start_0_7 = GetCrtc (sisc, 0x10); + crtc->_v_retrace_end = GetCrtc (sisc, 0x11); + crtc->v_display_end_0_7 = GetCrtc (sisc, 0x12); + crtc->screen_off_0_7 = GetCrtc (sisc, 0x13); + crtc->_underline_location = GetCrtc (sisc, 0x14); + crtc->v_blank_start_0_7 = GetCrtc (sisc, 0x15); + crtc->v_blank_end_0_7 = GetCrtc (sisc, 0x16); + crtc->crtc_mode = GetCrtc (sisc, 0x17); + + crtc->line_compare_0_7 = GetCrtc (sisc, 0x18); + + crtc->mode_control = GetArtc (sisc, 0x10); + crtc->screen_border_color = GetArtc (sisc, 0x11); + crtc->enable_color_plane = GetArtc (sisc, 0x12); + crtc->horizontal_pixel_pan = GetArtc (sisc, 0x13); + + crtc->mode_register = GetGrtc (sisc, 0x5); + crtc->misc_register = GetGrtc (sisc, 0x6); + crtc->color_dont_care = GetGrtc (sisc, 0x7); + + crtc->clock_mode = GetSrtc (sisc, 0x1); + crtc->color_plane_w_enable = GetSrtc (sisc, 0x2); + crtc->memory_mode = GetSrtc (sisc, 0x4); + + crtc->graphics_mode = GetSrtc (sisc, 0x6); + crtc->misc_control_0 = GetSrtc (sisc, 0x7); + crtc->crt_cpu_threshold_control_0 = GetSrtc (sisc, 0x8); + crtc->crt_cpu_threshold_control_1 = GetSrtc (sisc, 0x9); + crtc->extended_crt_overflow = GetSrtc (sisc, 0xa); + crtc->misc_control_1 = GetSrtc (sisc, 0xb); + crtc->misc_control_2 = GetSrtc (sisc, 0xc); + + crtc->ddc_and_power_control = GetSrtc (sisc, 0x11); + crtc->extended_horizontal_overflow = GetSrtc (sisc, 0x12); + crtc->extended_clock_generator = GetSrtc (sisc, 0x13); + crtc->cursor_0_red = GetSrtc (sisc, 0x14); + crtc->cursor_0_green = GetSrtc (sisc, 0x15); + crtc->cursor_0_blue = GetSrtc (sisc, 0x16); + crtc->cursor_1_red = GetSrtc (sisc, 0x17); + crtc->cursor_1_green = GetSrtc (sisc, 0x18); + crtc->cursor_1_blue = GetSrtc (sisc, 0x19); + crtc->cursor_h_start_0_7 = GetSrtc (sisc, 0x1a); + crtc->cursor_h_start_1 = GetSrtc (sisc, 0x1b); + crtc->cursor_h_preset_0_5 = GetSrtc (sisc, 0x1c); + crtc->cursor_v_start_0_7 = GetSrtc (sisc, 0x1d); + crtc->cursor_v_start_1 = GetSrtc (sisc, 0x1e); + crtc->cursor_v_preset_0_5 = GetSrtc (sisc, 0x1f); + crtc->linear_base_19_26 = GetSrtc (sisc, 0x20); + crtc->linear_base_1 = GetSrtc (sisc, 0x21); + + crtc->graphics_engine_0 = GetSrtc (sisc, 0x26); + crtc->graphics_engine_1 = GetSrtc (sisc, 0x27); + crtc->internal_mclk_0 = GetSrtc (sisc, 0x28); + crtc->internal_mclk_1 = GetSrtc (sisc, 0x29); + crtc->internal_vclk_0 = GetSrtc (sisc, 0x2A); + crtc->internal_vclk_1 = GetSrtc (sisc, 0x2B); + + crtc->misc_control_7 = GetSrtc (sisc, 0x38); + + crtc->misc_control_11 = GetSrtc (sisc, 0x3E); + crtc->misc_control_12 = GetSrtc (sisc, 0x3F); +} + +static void +_sisSetBlank (SisCardInfo *sisc, Bool blank) +{ + CARD8 clock; + + clock = GetSrtc (sisc, 0x01); + if (blank) + clock |= 0x20; + else + clock &= ~0x20; + PutSrtc (sisc, 0x01, clock); +} + +static void +_sisSetCrtc (SisCardInfo *sisc, SisCrtc *crtc) +{ + _sisSetBlank (sisc, TRUE); + PutCrtc (sisc, 0x00, crtc->h_total_0_7); + PutCrtc (sisc, 0x01, crtc->h_display_end_0_7); + PutCrtc (sisc, 0x02, crtc->h_blank_start_0_7); + PutCrtc (sisc, 0x03, crtc->_h_blank_end); + PutCrtc (sisc, 0x04, crtc->h_sync_start_0_7); + PutCrtc (sisc, 0x05, crtc->_h_sync_end); + PutCrtc (sisc, 0x06, crtc->v_total_0_7); + PutCrtc (sisc, 0x07, crtc->crtc_overflow); + PutCrtc (sisc, 0x08, crtc->preset_row_scan); + PutCrtc (sisc, 0x09, crtc->_max_scan_line); + PutCrtc (sisc, 0x0a, crtc->cursor_start); + PutCrtc (sisc, 0x0b, crtc->cursor_end); + PutCrtc (sisc, 0x0c, crtc->start_address_8_15); + PutCrtc (sisc, 0x0d, crtc->start_address_0_7); + PutCrtc (sisc, 0x0e, crtc->text_cursor_15_8); + PutCrtc (sisc, 0x0f, crtc->text_cursor_7_0); + PutCrtc (sisc, 0x10, crtc->v_retrace_start_0_7); + PutCrtc (sisc, 0x11, crtc->_v_retrace_end); + PutCrtc (sisc, 0x12, crtc->v_display_end_0_7); + PutCrtc (sisc, 0x13, crtc->screen_off_0_7); + PutCrtc (sisc, 0x14, crtc->_underline_location); + PutCrtc (sisc, 0x15, crtc->v_blank_start_0_7); + PutCrtc (sisc, 0x16, crtc->v_blank_end_0_7); + PutCrtc (sisc, 0x17, crtc->crtc_mode); + PutCrtc (sisc, 0x18, crtc->line_compare_0_7); + + PutArtc (sisc, 0x10, crtc->mode_control); + PutArtc (sisc, 0x11, crtc->screen_border_color); + PutArtc (sisc, 0x12, crtc->enable_color_plane); + PutArtc (sisc, 0x13, crtc->horizontal_pixel_pan); + + PutGrtc (sisc, 0x5, crtc->mode_register); + PutGrtc (sisc, 0x6, crtc->misc_register); + PutGrtc (sisc, 0x7, crtc->color_dont_care); + + PutSrtc (sisc, 0x1, crtc->clock_mode | 0x20); + PutSrtc (sisc, 0x2, crtc->color_plane_w_enable); + PutSrtc (sisc, 0x4, crtc->memory_mode); + + PutSrtc (sisc, 0x6, crtc->graphics_mode); + PutSrtc (sisc, 0x7, crtc->misc_control_0); + PutSrtc (sisc, 0x8, crtc->crt_cpu_threshold_control_0); + PutSrtc (sisc, 0x9, crtc->crt_cpu_threshold_control_1); + PutSrtc (sisc, 0xa, crtc->extended_crt_overflow); + PutSrtc (sisc, 0xb, crtc->misc_control_1); + PutSrtc (sisc, 0xc, crtc->misc_control_2); + + PutSrtc (sisc, 0x11, crtc->ddc_and_power_control); + PutSrtc (sisc, 0x12, crtc->extended_horizontal_overflow); + PutSrtc (sisc, 0x13, crtc->extended_clock_generator); + PutSrtc (sisc, 0x14, crtc->cursor_0_red); + PutSrtc (sisc, 0x15, crtc->cursor_0_green); + PutSrtc (sisc, 0x16, crtc->cursor_0_blue); + PutSrtc (sisc, 0x17, crtc->cursor_1_red); + PutSrtc (sisc, 0x18, crtc->cursor_1_green); + PutSrtc (sisc, 0x19, crtc->cursor_1_blue); + PutSrtc (sisc, 0x1a, crtc->cursor_h_start_0_7); + PutSrtc (sisc, 0x1b, crtc->cursor_h_start_1); + PutSrtc (sisc, 0x1c, crtc->cursor_h_preset_0_5); + PutSrtc (sisc, 0x1d, crtc->cursor_v_start_0_7); + PutSrtc (sisc, 0x1e, crtc->cursor_v_start_1); + PutSrtc (sisc, 0x1f, crtc->cursor_v_preset_0_5); + PutSrtc (sisc, 0x20, crtc->linear_base_19_26); + PutSrtc (sisc, 0x21, crtc->linear_base_1); + + PutSrtc (sisc, 0x26, crtc->graphics_engine_0); + PutSrtc (sisc, 0x27, crtc->graphics_engine_1); + PutSrtc (sisc, 0x28, crtc->internal_mclk_0); + PutSrtc (sisc, 0x29, crtc->internal_mclk_1); + PutSrtc (sisc, 0x2A, crtc->internal_vclk_0); + PutSrtc (sisc, 0x2B, crtc->internal_vclk_1); + + PutSrtc (sisc, 0x38, crtc->misc_control_7); + + PutSrtc (sisc, 0x3E, crtc->misc_control_11); + PutSrtc (sisc, 0x3F, crtc->misc_control_12); + +#if 0 + PutCrtc (sisc, 0x5b, 0x27); + PutCrtc (sisc, 0x5c, 0xe1); + PutCrtc (sisc, 0x5d, 0x00); + + PutSrtc (sisc, 0x5a, 0xe6); + PutSrtc (sisc, 0x5d, 0xa1); + PutSrtc (sisc, 0x9a, 0xe6); + PutSrtc (sisc, 0x9d, 0xa1); + PutSrtc (sisc, 0xda, 0xe6); + PutSrtc (sisc, 0xdd, 0x6c); +#endif + + _sisOutb(crtc->misc_output, sisc->io_base+0x42); + + outw (0x3c4, 0x0100); + outw (0x3c4, 0x0300); + + _sisSetBlank (sisc, FALSE); +} + +CARD8 +_sisReadIndexRegister (CARD32 base, CARD8 index) +{ + CARD8 ret; + + _sisOutb (index, base); + ret = _sisInb (base+1); + return ret; +} + +void +_sisWriteIndexRegister (CARD32 base, CARD8 index, CARD8 value) +{ + _sisOutb (index, base); + _sisOutb (value, base+1); +} + +CARD8 +_sisReadArtc (CARD32 base, CARD8 index) +{ + CARD8 ret; + + _sisInb (base+0x1a); + _sisOutb (index,base); + ret = _sisInb (base+1); + _sisInb (base+0x1a); + _sisOutb (0x20,base); + return ret; +} + +void +_sisWriteArtc (CARD32 base, CARD8 index, CARD8 value) +{ + _sisInb (base+0x1a); + _sisOutb (index|0x20,base); + _sisOutb (value,base); + _sisInb (base+0x1a); + _sisOutb (0x20,base); +} + +void +sisPreserve (KdCardInfo *card) +{ + SisCardInfo *sisc = card->driver; + CARD8 *r = sisc->registers; + int a, i, l; + CARD8 line[16]; + CARD8 prev[16]; + BOOL gotone; + + sisc->save.sr5 = GetSrtc(sisc,0x5); + if (sisc->save.sr5 != 0x21) + sisc->save.sr5 = 0x86; + /* unlock extension registers */ + PutSrtc(sisc,0x5,0x86); + /* unlock CRTC registers */ + PutCrtc(sisc,0x11,GetCrtc(sisc,0x11)&~0x80); + /* enable vga */ + _sisOutb(0x1,sisc->io_base+0x43); + + /* enable MMIO access to registers */ + sisc->save.srb = GetSrtc(sisc,0xb); + PutSrtc(sisc, 0xb, sisc->save.srb | 0x60); + _sisGetCrtc (sisc, &sisc->save.crtc); + memcpy (sisc->save.text_save, sisc->frameBuffer, SIS_TEXT_SAVE); +} + +Bool +sisEnable (ScreenPtr pScreen) +{ + KdScreenPriv(pScreen); + KdScreenInfo *screen = pScreenPriv->screen; + KdCardInfo *card = pScreenPriv->card; + SisCardInfo *sisc = card->driver; + SisScreenInfo *siss = screen->driver; + const KdMonitorTiming *t; + SisCrtc crtc; + unsigned long pixel; + + int hactive; + int hblank; + int hfp; + int hbp; + + int vactive; + int vblank; + int vfp; + int vbp; + + int h_total; + int h_display_end; + int h_blank_start; + int h_blank_end; + int h_sync_start; + int h_sync_end; + int h_screen_off; + + int h_adjust; + + int v_total; + int v_retrace_start; + int v_retrace_end; + int v_display_end; + int v_blank_start; + int v_blank_end; + + crtc = sisc->save.crtc; + + t = KdFindMode (screen, sisModeSupported); + + /* CR9 */ + crtc.max_scan_line = 0; + + /* CRA */ + crtc.cursor_start = 0; + + /* CRB */ + crtc.cursor_end = 0; + + /* CRE */ + crtc.text_cursor_15_8 = 0; + + /* CRF */ + crtc.text_cursor_7_0 = 0; + + /* CR11 */ + crtc.disable_v_retrace_int = 1; + + /* CR14 */ + crtc.underline_location = 0; + crtc.count_by_four = 0; + crtc.doubleword_mode = 1; + + /* 3CC/3C2 */ + crtc.io_address_select = 1; + crtc.display_ram_enable = 1; + crtc.clock_select = 3; + + /* SR1 */ + crtc.clock_mode = 0; + crtc.dot_clock_8_9 = 1; + + /* SR2 */ + crtc.color_plane_w_enable = 0xf; + + /* SR4 */ + crtc.memory_mode = 0; + crtc.chain_4_enable = 1; + crtc.odd_even_disable = 1; + crtc.extended_memory_sz = 1; + + /* SR6 */ + crtc.graphics_mode_linear = 1; + crtc.enhanced_graphics_mode = 1; + + /* SR9 */ + crtc.crt_cpu_threshold_control_1 = 0; + + /* SRB */ +#if 0 + crtc.cpu_bitblt_enable = 1; +#endif + crtc.memory_mapped_mode = 3; + + /* SRC */ + crtc.graphics_mode_32bit_enable = 1; + crtc.read_ahead_enable = 1; + + /* SR11 */ + crtc.acpi_enable = 0; + crtc.kbd_cursor_activate = 0; + crtc.video_memory_activate = 0; + crtc.vga_standby = 0; + crtc.vga_suspend = 0; + + crtc.cursor_0_red = 0x3f; + crtc.cursor_0_green = 0x3f; + crtc.cursor_0_blue = 0x3f; + + /* SR20 */ + crtc.linear_base_19_26 = (card->attr.address[0] & 0x07f80000) >> 19; + + /* SR21 */ + crtc.linear_base_27_31 = (card->attr.address[0] & 0xf8000000) >> 27; + crtc.linear_aperture = SIS_LINEAR_APERTURE_4M; + + /* SR27 */ + crtc.logical_screen_width = 3; + crtc.graphics_prog_enable = 1; + + /* SR38 */ + crtc.extended_clock_select = 0; + + /* AR10 */ + crtc.mode_control = 0; + crtc.graphics_mode_enable = 1; + /* AR11 */ + crtc.screen_border_color = 0; + /* AR12 */ + crtc.enable_color_plane = 0xf; + /* AR13 */ + crtc.horizontal_pixel_pan = 0; + + /* GR5 */ + crtc.mode_register = 0; + + /* GR6 */ + crtc.graphics_enable = 1; + crtc.chain_odd_even = 0; + crtc.memory_address_select = 1; + + /* GR7 */ + crtc.color_dont_care = 0xf; + if (siss->cursor_base) + { + crtc_set_cursor_start_addr (&crtc, siss->cursor_off); + crtc.graphics_mode_hw_cursor = 0; + } + + hactive = t->horizontal; + hblank = t->hblank; + hbp = t->hbp; + hfp = t->hfp; + + vactive = t->vertical; + vblank = t->vblank; + vbp = t->vbp; + vfp = t->vfp; + + pixel = (hactive + hblank) * (vactive + vblank) * t->rate; + + switch (screen->fb[0].bitsPerPixel) { + case 8: + hactive /= 8; + hblank /= 8; + hfp /= 8; + hbp /= 8; + + crtc.color_mode_256 = 1; + h_screen_off = hactive; + h_adjust = 1; + + break; + case 16: + hactive /= 8; + hblank /= 8; + hfp /= 8; + hbp /= 8; + + h_screen_off = hactive * 2; + h_adjust = 1; + + crtc.color_mode_256 = 0; + + if (screen->fb[0].depth == 15) + crtc.graphics_mode_32k = 1; + else + crtc.graphics_mode_64k = 1; + break; + case 24: + hactive /= 8; + hblank /= 8; + hfp /= 8; + hbp /= 8; + + h_screen_off = hactive * 3; + h_adjust = 1; + + crtc.color_mode_256 = 0; + + /* SR6 */ + crtc.graphics_mode_true = 1; + /* SR7 */ + crtc.direct_color_24bit = 0; + /* SR9 */ + crtc.true_color_32bpp = 0; + /* SRB */ + crtc.true_color_order = 1; + break; + case 32: + hactive /= 8; + hblank /= 8; + hfp /= 8; + hbp /= 8; + + h_screen_off = hactive * 4; + h_adjust = 1; + + crtc.color_mode_256 = 0; + + /* SR6 */ + crtc.graphics_mode_true = 1; + /* SR7 */ + crtc.direct_color_24bit = 0; + /* SR9 */ + crtc.true_color_32bpp = 1; + /* SRB */ + crtc.true_color_order = 1; + break; + } + + sisGetClock (pixel, &crtc); + + crtc.high_speed_dac_0 = crtc.high_speed_dac_1 = pixel > 135000000; + + sisEngThresh (&crtc, pixel, screen->fb[0].bitsPerPixel); + + /* + * Compute horizontal register values from timings + */ + h_total = hactive + hblank - 5; + h_display_end = hactive - 1; + h_blank_start = h_display_end; + h_blank_end = h_blank_start + hblank; + + h_sync_start = hactive + hfp + h_adjust; + h_sync_end = h_sync_start + hblank - hbp - hfp; + + crtc_set_h_total(&crtc, h_total); + crtc_set_h_display_end (&crtc, h_display_end); + crtc_set_h_blank_start (&crtc, h_blank_start); + crtc_set_h_blank_end (&crtc, h_blank_end); + crtc_set_h_sync_start (&crtc, h_sync_start); + crtc_set_h_sync_end (&crtc, h_sync_end); + crtc_set_screen_off (&crtc, h_screen_off); + + v_total = vactive + vblank - 2; + v_retrace_start = vactive + vfp - 1; + v_retrace_end = v_retrace_start + vblank - vbp - vfp; + v_display_end = vactive - 1; + v_blank_start = vactive - 1; + v_blank_end = v_blank_start + vblank /* - 1 */; + + crtc_set_v_total(&crtc, v_total); + crtc_set_v_retrace_start (&crtc, v_retrace_start); + crtc.v_retrace_end_0_3 = v_retrace_end; + crtc_set_v_display_end (&crtc, v_display_end); + crtc_set_v_blank_start (&crtc, v_blank_start); + crtc.v_blank_end_0_7 = v_blank_end; + +#if 0 + crtc.h_blank_start_0_7 = 0x6a; + crtc._h_blank_end = 0x9a; + crtc.h_sync_start_0_7 = 0x6b; + crtc._h_sync_end = 0x9a; + + crtc.v_retrace_start_0_7 = 0x7d; + crtc._v_retrace_end = 0x23; + crtc.v_blank_start_0_7 = 0x7d; + crtc.v_blank_end_0_7 = 0x84; + + crtc.crt_cpu_threshold_control_0 = 0xdf; /* SR8 */ + crtc.crt_cpu_threshold_control_1 = 0x00; /* SR9 */ + crtc.extended_clock_generator = 0x40; /* SR13 */ + + crtc.cursor_h_start_0_7 = 0x83; + crtc.cursor_v_start_0_7 = 0x6c; + + crtc.internal_vclk_0 = 0x68; + crtc.internal_vclk_1 = 0xc4; + crtc.misc_control_7 = 0x70; +#endif + + _sisSetCrtc (sisc, &crtc); + return TRUE; +} + +Bool +sisDPMS (ScreenPtr pScreen, int mode) +{ + KdScreenPriv(pScreen); + sisCardInfo(pScreenPriv); + union ddc_and_power_control_u _ddc_and_power_control_u; + + ddc_and_power_control = sisc->save.crtc.ddc_and_power_control; + + kbd_cursor_activate = 0; + video_memory_activate = 0; + vga_standby = 0; + vga_suspend = 0; + acpi_enable = 0; + switch (mode) { + case KD_DPMS_NORMAL: + break; + case KD_DPMS_STANDBY: + vga_standby = 1; + break; + case KD_DPMS_SUSPEND: + vga_suspend = 1; + break; + case KD_DPMS_POWERDOWN: + acpi_enable = 1; + break; + } + PutSrtc (sisc, 0x11, ddc_and_power_control); + return TRUE; +} + +void +sisDisable (ScreenPtr pScreen) +{ +} + +void +sisRestore (KdCardInfo *card) +{ + SisCardInfo *sisc = (SisCardInfo *) card->driver; + + memcpy (sisc->frameBuffer, sisc->save.text_save, SIS_TEXT_SAVE); + _sisSetCrtc (sisc, &sisc->save.crtc); + PutSrtc (sisc, 0xb, sisc->save.srb); + PutSrtc (sisc, 0x5, sisc->save.sr5); +} + +void +sisScreenFini (KdScreenInfo *screen) +{ + SisScreenInfo *siss = (SisScreenInfo *) screen->driver; + + xfree (siss); + screen->driver = 0; +} + +void +sisCardFini (KdCardInfo *card) +{ + SisCardInfo *sisc = (SisCardInfo *) card->driver; + + KdUnmapDevice (sisc->frameBuffer, sisc->memory); + KdUnmapDevice (sisc->registers, sizeof (SisRec)); +} + +KdCardFuncs sisFuncs = { + sisCardInit, + sisScreenInit, + 0, + sisPreserve, + sisEnable, + sisDPMS, + sisDisable, + sisRestore, + sisScreenFini, + sisCardFini, + sisCursorInit, + sisCursorEnable, + sisCursorDisable, + sisCursorFini, + 0, + sisDrawInit, + sisDrawEnable, + sisDrawSync, + sisDrawDisable, + sisDrawFini, + sisGetColors, + sisPutColors, +}; --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/sis530/siscmap.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/sis530/siscmap.c @@ -0,0 +1,67 @@ +/* + * Id: siscmap.c,v 1.1 1999/11/02 08:17:24 keithp Exp $ + * + * Copyright © 1999 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/sis530/siscmap.c,v 1.1 1999/11/19 13:53:59 hohndel Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "sis.h" + +void +sisGetColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs) +{ + KdScreenPriv(pScreen); + sisCardInfo(pScreenPriv); + + LockSis (sisc); + while (ndef--) + { + _sisOutb (pdefs->pixel, sisc->io_base+SIS_DAC_INDEX_READ); + pdefs->red = _sisInb (sisc->io_base+SIS_DAC_DATA) << 10; + pdefs->green = _sisInb (sisc->io_base+SIS_DAC_DATA) << 10; + pdefs->blue = _sisInb (sisc->io_base+SIS_DAC_DATA) << 10; + pdefs++; + } + UnlockSis (sisc); +} + +void +sisPutColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs) +{ + KdScreenPriv(pScreen); + sisCardInfo(pScreenPriv); + + LockSis(sisc); + _sisWaitVRetrace (sisc); + while (ndef--) + { + _sisOutb (pdefs->pixel, sisc->io_base+SIS_DAC_INDEX_WRITE); + _sisOutb (pdefs->red >> 10, sisc->io_base+SIS_DAC_DATA); + _sisOutb (pdefs->green >> 10, sisc->io_base+SIS_DAC_DATA); + _sisOutb (pdefs->blue >> 10, sisc->io_base+SIS_DAC_DATA); + pdefs++; + } + UnlockSis(sisc); +} + --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/sis530/sisdraw.h +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/sis530/sisdraw.h @@ -0,0 +1,183 @@ +/* + * Id: sisdraw.h,v 1.1 1999/11/02 08:17:24 keithp Exp $ + * + * Copyright © 1999 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/sis530/sisdraw.h,v 1.1 1999/11/19 13:53:59 hohndel Exp $ */ + +#ifndef _SISDRAW_H_ +#define _SISDRAW_H_ + +#define SetupSis(s) KdScreenPriv(s); \ + sisCardInfo(pScreenPriv); \ + SisPtr sis = sisc->sis + +#define SIS_CMD_BITBLT (0) +#define SIS_CMD_COLOR_EXPAND (1) +#define SIS_CMD_ENH_COLOR_EXPAND (2) +#define SIS_CMD_MULTI_SCANLINE (3) +#define SIS_CMD_LINE (4) +#define SIS_CMD_TRAPEZOID (5) +#define SIS_CMD_TRANSPARENT_BITBLT (6) + +#define SIS_CMD_SRC_SCREEN (0 << 4) +#define SIS_CMD_SRC_CPU (1 << 4) + +#define SIS_CMD_PAT_FG (0 << 6) +#define SIS_CMD_PAT_PATTERN (1 << 6) +#define SIS_CMD_PAT_MONO (2 << 6) + +/* 8->15 rop */ + +#define SIS_CMD_DEC_X (0 << 16) +#define SIS_CMD_INC_X (1 << 16) + +#define SIS_CMD_DEC_Y (0 << 17) +#define SIS_CMD_INC_Y (1 << 17) + +#define SIS_CMD_RECT_CLIP_DISABLE (0 << 18) +#define SIS_CMD_RECT_CLIP_ENABLE (1 << 18) + +#define SIS_CMD_OPAQUE (0 << 20) +#define SIS_CMD_TRANSPARENT (1 << 20) + +#define SIS_CMD_RECT_CLIP_MERGE (0 << 26) +#define SIS_CMD_RECT_CLIP_DONT_MERGE (1 << 26) + +#define SIS_STAT_2D_IDLE (1 << 31) +#define SIS_STAT_3D_IDLE (1 << 30) +#define SIS_STAT_EMPTY (1 << 29) +#define SIS_STAT_CPU_BITBLT (0xf << 24) +#define SIS_STAT_ENH_COLOR_EXPAND (1 << 23) +#define SIS_STAT_AVAIL (0x1fff) + +extern CARD8 sisPatRop[16]; +extern CARD8 sisBltRop[16]; + +#define _sisSetSolidRect(sis,pix,alu,cmd) {\ + (sis)->u.general.pattern_fg = (pix); \ + (cmd) = (SIS_CMD_BITBLT | \ + SIS_CMD_SRC_SCREEN | \ + SIS_CMD_PAT_FG | \ + (sisPatRop[alu] << 8) | \ + SIS_CMD_INC_X | \ + SIS_CMD_INC_Y | \ + SIS_CMD_RECT_CLIP_DISABLE | \ + SIS_CMD_OPAQUE | \ + SIS_CMD_RECT_CLIP_DONT_MERGE); \ +} + +#define _sisClip(sis,x1,y1,x2,y2) { \ + (sis)->u.general.clip_left = (x1); \ + (sis)->u.general.clip_top = (y1); \ + (sis)->u.general.clip_right = (x2); \ + (sis)->u.general.clip_bottom = (y2); \ +} + +#define _sisRect(sis,x,y,w,h,cmd) { \ + (sis)->u.general.dst_x = (x); \ + (sis)->u.general.dst_y = (y); \ + (sis)->u.general.rect_width = (w); \ + (sis)->u.general.rect_height = (h); \ + (sis)->u.general.command = (cmd); \ +} + +#define _sisSetTransparentPlaneBlt(sis, alu, fg, cmd) { \ + (sis)->u.general.src_fg = (fg); \ + (cmd) = (SIS_CMD_ENH_COLOR_EXPAND | \ + SIS_CMD_SRC_CPU | \ + SIS_CMD_PAT_FG | \ + (sisBltRop[alu] << 8) | \ + SIS_CMD_INC_X | \ + SIS_CMD_INC_Y | \ + SIS_CMD_RECT_CLIP_DISABLE | \ + SIS_CMD_TRANSPARENT | \ + SIS_CMD_RECT_CLIP_DONT_MERGE); \ +} + +#define _sisSetOpaquePlaneBlt(sis, alu, fg, bg, cmd) { \ + (sis)->u.general.src_fg = (fg); \ + (sis)->u.general.src_bg = (bg); \ + (cmd) = (SIS_CMD_ENH_COLOR_EXPAND | \ + SIS_CMD_SRC_CPU | \ + SIS_CMD_PAT_FG | \ + (sisBltRop[alu] << 8) | \ + SIS_CMD_INC_X | \ + SIS_CMD_INC_Y | \ + SIS_CMD_RECT_CLIP_DISABLE | \ + SIS_CMD_OPAQUE | \ + SIS_CMD_RECT_CLIP_DONT_MERGE); \ +} + +#define _sisPlaneBlt(sis,x,y,w,h,cmd) _sisSolidRect(sis,x,y,w,h,cmd) + +#define _sisSetBlt(sis,alu,cmd) { \ + (sis)->u.general.src_base = (sis)->u.general.dst_base; \ + (sis)->u.general.src_pitch = (sis)->u.general.dst_pitch; \ + (cmd) = (SIS_CMD_RECT_CLIP_DONT_MERGE |\ + (sisBltRop[alu] << 8) |\ + SIS_CMD_PAT_FG |\ + SIS_CMD_SRC_SCREEN |\ + SIS_CMD_BITBLT); \ +} + +#define _sisBlt(sis,sx,sy,dx,dy,w,h,cmd) { \ + (sis)->u.general.src_x = (sx); \ + (sis)->u.general.src_y = (sy); \ + (sis)->u.general.dst_x = (dx); \ + (sis)->u.general.dst_y = (dy); \ + (sis)->u.general.rect_width = (w); \ + (sis)->u.general.rect_height = (h); \ + (sis)->u.general.command = (cmd); \ +} + +#define SIS_IE (SIS_STAT_2D_IDLE|SIS_STAT_EMPTY) + +#define _sisWaitIdleEmpty(sis) \ + while (((sis)->u.general.status & SIS_IE) != SIS_IE) + +/* + * Ok, so the Sis530 is broken -- it expects bitmaps to come MSB bit order, + * but it's willing to take them in LSB byte order. These macros + * flip bits around without flipping bytes. Instead of using a table + * and burning memory bandwidth, do them in place with the CPU. + */ + +/* The MIPS compiler automatically places these constants in registers */ +#define SisInvertBits32(v) { \ + v = ((v & 0x55555555) << 1) | ((v >> 1) & 0x55555555); \ + v = ((v & 0x33333333) << 2) | ((v >> 2) & 0x33333333); \ + v = ((v & 0x0f0f0f0f) << 4) | ((v >> 4) & 0x0f0f0f0f); \ +} + +#define SisInvertBits16(v) { \ + v = ((v & 0x5555) << 1) | ((v >> 1) & 0x5555); \ + v = ((v & 0x3333) << 2) | ((v >> 2) & 0x3333); \ + v = ((v & 0x0f0f) << 4) | ((v >> 4) & 0x0f0f); \ +} + +#define SisInvertBits8(v) { \ + v = ((v & 0x55) << 1) | ((v >> 1) & 0x55); \ + v = ((v & 0x33) << 2) | ((v >> 2) & 0x33); \ + v = ((v & 0x0f) << 4) | ((v >> 4) & 0x0f); \ +} + +#endif --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/itsy/itsy.h +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/itsy/itsy.h @@ -0,0 +1,42 @@ +/* + * Id: itsy.h,v 1.1 1999/11/02 18:39:28 keithp Exp $ + * + * Copyright © 1999 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/itsy/itsy.h,v 1.1 1999/11/19 13:53:53 hohndel Exp $ */ + +#include "kdrive.h" +#include +#include +#include +#include +#include +#include +#include +#include + +#define FB_HEIGHT 200 +#define FB_WIDTH 320 +#define FB_DEPTH 4 +#define FB_PALETTE_SIZE 16 + +extern KdMouseFuncs itsyTsMouseFuncs; +extern KdKeyboardFuncs itsyKeyboardFuncs; --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/itsy/ts.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/itsy/ts.c @@ -0,0 +1,212 @@ +/* + * Id: ts.c,v 1.1 1999/11/02 18:39:28 keithp Exp $ + * + * Copyright © 1999 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/itsy/ts.c,v 1.1 1999/11/19 13:53:54 hohndel Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#define NEED_EVENTS +#include "itsy.h" +#include +#include "inputstr.h" +#include "Xpoll.h" + +int +itsyTsReadBytes (int fd, char *buf, int len, int min) +{ + int n, tot; + fd_set set; + struct timeval tv; + + tot = 0; + while (len) + { + n = read (fd, buf, len); + if (n > 0) + { + tot += n; + buf += n; + len -= n; + } + if (tot % min == 0) + break; + FD_ZERO (&set); + FD_SET (fd, &set); + tv.tv_sec = 0; + tv.tv_usec = 100 * 1000; + n = select (fd + 1, &set, 0, 0, &tv); + if (n <= 0) + break; + } + return tot; +} + +void +itsyTsRead (int tsPort) +{ + ts_event event; + long buf[3]; + int n; + long pressure; + long x, y; + unsigned long flags; + unsigned long buttons; + + n = itsyTsReadBytes (tsPort, (char *) &event, + sizeof (event), sizeof (event)); + if (n == sizeof (event)) + { + if (event.pressure) + { + flags = KD_BUTTON_1; + x = event.point.x; + y = event.point.y; + } + else + { + flags = KD_MOUSE_DELTA; + x = 0; + y = 0; + } + KdEnqueueMouseEvent (flags, x, y); + } +} + +#if 0 +#define ITSY_DEBUG_LOW 1 + +// +// Touch screen parameters are stored +// in the flash. This code is taken from 'wm1'. +// +void itsySetTouchCalibration (int mou_filedsc, + int xs, int xt, int ys, int yt, int xys) +{ + int k, ibuf[10]; + + ibuf[0] = xs; + ibuf[1] = xt; + ibuf[2] = ys; + ibuf[3] = yt; + ibuf[4] = xys; + if ((k=ioctl(mou_filedsc, TS_SET_CALM, ibuf)) != 0) { + fprintf(stderr, "ERROR: ioctl TS_SET_CALM returns %d\n", k); + } +} + + +int itsyReadFlashBlock(int location, signed char *data, int dbytes) +{ + int offset, bytes; + int flashfd; + + flashfd = open("/dev/flash1", O_RDONLY); + if (flashfd < 0) return(0); + + offset = lseek(flashfd, location, SEEK_SET); + if (offset != location) { + close(flashfd); + return(0); + } + + bytes = read(flashfd, data, dbytes); + if (bytes != dbytes) { + close(flashfd); + return(0); + } + + close(flashfd); + return(1); +} + +/**********************************************************************/ +#define RAMSIZE (0x400000) +#define MONITOR_BLOCKSIZE (32) +/**********************************************************************/ + +/* code for storing calibration into flash */ + +#define CALIBRATE_BLOCKSIZE (32) +#define CALIBRATE_OFFSET (RAMSIZE-MONITOR_BLOCKSIZE-CALIBRATE_BLOCKSIZE) +#define CALIBRATE_MAGIC_NUM (0x0babedee) + + +static int check_if_calibrated_and_set(int mou_filedsc) +{ + signed char cal_data[CALIBRATE_BLOCKSIZE]; + int *iptr; + + if (itsyReadFlashBlock(CALIBRATE_OFFSET, + cal_data, CALIBRATE_BLOCKSIZE) == 0) { + if ( ITSY_DEBUG_LOW ) { + fprintf(stderr,"unable to read calibration data for touch screen\n"); + } + return(0); + } + + iptr = (int *) cal_data; + if (iptr[0] == CALIBRATE_MAGIC_NUM) { + if ( ITSY_DEBUG_LOW ) { + fprintf(stderr,"Calibrating touch screen using %d, %d, %d, %d, %d\n", + iptr[1], iptr[2], iptr[3], iptr[4], iptr[5]); + } + itsySetTouchCalibration(mou_filedsc, iptr[1], iptr[2], iptr[3], iptr[4], iptr[5]); + return(1); + } + else { + if ( ITSY_DEBUG_LOW ) { + fprintf(stderr,"Couldn't calibrate screen\n"); + } + return(0); + } +} +#endif + +int +itsyTsInit (void) +{ + int tsPort; + + tsPort = open ("/dev/ts", 0); + fprintf (stderr, "tsPort %d\n", tsPort); +#if 0 + if (tsPort >= 0) + check_if_calibrated_and_set (tsPort); +#endif + return tsPort; +} + +void +itsyTsFini (int tsPort) +{ + if (tsPort >= 0) + close (tsPort); +} + +KdMouseFuncs itsyTsMouseFuncs = { + itsyTsInit, + itsyTsRead, + itsyTsFini +}; + --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/itsy/itsy.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/itsy/itsy.c @@ -0,0 +1,328 @@ +/* + * Id: itsy.c,v 1.1 1999/11/02 18:39:28 keithp Exp $ + * + * Copyright © 1999 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/itsy/itsy.c,v 1.2 1999/12/30 03:03:09 robin Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "itsy.h" + +/* struct with LCD characteristics defined in fb_brutus.h */ +static struct FbLcdParamsStruct fbLcdParams; +static int fb_d; +static int fbn; +Bool +itsyCardInit (KdCardInfo *card) +{ + int k; + char *fb; + char *pixels; + + if ((fb_d = open("/dev/fbclone", O_RDWR)) < 0) { + perror("Error opening /dev/fb\n"); + return FALSE; + } + if ((k=ioctl(fb_d, FB_LCD_PARAMS, &fbLcdParams)) != 0) { + perror("Error with /dev/fb ioctl FB_LCD_PARAMS call"); + return FALSE; + } + + fb = (char *) mmap ((caddr_t) NULL, fbLcdParams.frameBufferSize, + PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fb_d, 0); + + fprintf (stderr, "fb mapped at 0x%x\n", fb); + if (fb == (char *)-1) { + perror("ERROR: mmap framebuffer fails!"); + return FALSE; + } + + card->driver = fb; + + return TRUE; +} + +Bool +itsyScreenInit (KdScreenInfo *screen) +{ + CARD8 *fb = screen->card->driver; + + screen->width = fbLcdParams.screenSizeH; + screen->height = fbLcdParams.screenSizeV; + screen->depth = fbLcdParams.bitsPerPixel; + screen->bitsPerPixel = fbLcdParams.bitsPerPixel; + screen->byteStride = fbLcdParams.frameBufferSizeH; + screen->pixelStride = (fbLcdParams.frameBufferSizeH * 8 / + fbLcdParams.bitsPerPixel); + fprintf (stderr, "width %d height %d depth %d pstride %d bstride %d\n", + screen->width, screen->height, screen->depth, + screen->pixelStride, screen->byteStride); + screen->dumb = FALSE; + screen->softCursor = TRUE; + screen->blueMask = 0; + screen->greenMask = 0; + screen->redMask = 0; + screen->visuals = 1 << StaticGray; + screen->rate = 72; + screen->frameBuffer = (CARD8 *) (fb + + fbLcdParams.pixelDataOffset + + (fbLcdParams.reserveTopRows * + screen->byteStride)); + fprintf (stderr, "Frame buffer 0x%x\n", screen->frameBuffer); + return TRUE; +} + +static unsigned short itsyIntensity[16] = { + 0xffff, + 0xffff, + 0xedb6, + 0xdb6d, + 0xc924, + 0xb6db, + 0xa492, + 0x9249, + 0x8000, + 0x6db6, + 0x5b6d, + 0x4924, + 0x36db, + 0x2492, + 0x1249, + 0x0000, +}; + +Bool +itsyCreateColormap (ColormapPtr pmap) +{ + int i; + + for (i = 0; i < 16; i++) + { + pmap->red[i].co.local.red = itsyIntensity[i]; + pmap->red[i].co.local.green = itsyIntensity[i]; + pmap->red[i].co.local.blue = itsyIntensity[i]; + } + return TRUE; +} + +Bool +itsyInitScreen (ScreenPtr pScreen) +{ + pScreen->CreateColormap = itsyCreateColormap; + return TRUE; +} + +void +itsyPreserve (KdCardInfo *card) +{ +} + +void +itsyEnable (ScreenPtr pScreen) +{ + KdScreenPriv(pScreen); + + fprintf (stderr, "Enabling LCD display\n"); + /* display it on the LCD */ + ioctl(fb_d, FB_LCD_SHOW, 0); +} + +Bool +itsyDPMS (ScreenPtr pScreen, int mode) +{ + if (mode) + ioctl (fb_d, FB_LCD_OFF, 0); + else + ioctl (fb_d, FB_LCD_ON, 0); + return TRUE; +} + +void +itsyDisable (ScreenPtr pScreen) +{ +/* ioctl (fb_d, FB_LCD_SWITCH, 0); */ +/* fprintf (stderr, "Disabling LCD display\n");*/ +} + +void +itsyRestore (KdCardInfo *card) +{ +} + +void +itsyScreenFini (KdScreenInfo *screen) +{ +} + +void +itsyCardFini (KdCardInfo *card) +{ + int k; + + fprintf (stderr, "Unmapping driver at 0x%x\n", card->driver); + munmap (card->driver, fbLcdParams.frameBufferSize); + fprintf (stderr, "Releasing fbn %d\n", fbn); + /* release it */ + if (ioctl(fb_d, FB_LCD_FREE, fbn) != 0) { + printf("FB_LCD_FREE of %d fails!\n", fbn); + } + close (fb_d); + fprintf (stderr, "itsyFini done\n"); +} + +KdCardFuncs itsyFuncs = { + itsyCardInit, /* cardinit */ + itsyScreenInit, /* scrinit */ + itsyInitScreen, /* initScreen */ + itsyPreserve, /* preserve */ + itsyEnable, /* enable */ + itsyDPMS, /* dpms */ + itsyDisable, /* disable */ + itsyRestore, /* restore */ + itsyScreenFini, /* scrfini */ + itsyCardFini, /* cardfini */ + + 0, /* initCursor */ + 0, /* enableCursor */ + 0, /* disableCursor */ + 0, /* finiCursor */ + 0, /* recolorCursor */ + + 0, /* initAccel */ + 0, /* enableAccel */ + 0, /* disableAccel */ + 0, /* finiAccel */ + + 0, /* getColors */ + 0, /* putColors */ +}; + +void +InitCard (void) +{ + KdCardAttr attr; + + KdCardInfoAdd (&itsyFuncs, &attr, 0); +} + +void +InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv) +{ + KdInitOutput (pScreenInfo, argc, argv); +} + +void +InitInput (int argc, char **argv) +{ + KdInitInput (&itsyTsMouseFuncs, &itsyKeyboardFuncs); +} + +int itsySessionFd = -1; + +int +ItsyOsInit (void) +{ + pid_t sid; + int i; + itsy_session_info info; + + if (itsySessionFd < 0) + { + itsySessionFd = open ("/dev/session", 0); + ErrorF("itsySessionFD %d\n", itsySessionFd); + } + + (void) setsid (); + sid = getsid (0); + ErrorF ("Session ID %d PID %d\n", sid, getpid ()); + info.sid = sid; + strcpy (info.name, "X"); + if (itsySessionFd >= 0) + { + i = ioctl (itsySessionFd, SESSION_SET_INFO, &info); + if (i < 0) + perror ("SESSION_SET_INFO"); + } + return 1; +} + +void +ItsyOsEnable (void) +{ + itsy_session_request req; + int i; + +#define MANAGER_SID_TO_FOREGROUND 2 + + req.operation = MANAGER_SID_TO_FOREGROUND; + req.data = 0; + if (itsySessionFd >= 0) + { + i = ioctl (itsySessionFd, SESSION_MANAGER_REQUEST, &req); + if (i < 0) + perror ("SESSION_MANAGER_REQUEST"); + } +} + +Bool +ItsyOsSpecialKey (KeySym sym) +{ + return FALSE; +} + +void +ItsyOsDisable (void) +{ +} + +void +ItsyOsFini (void) +{ +} + +KdOsFuncs ItsyOsFuncs = { + ItsyOsInit, + ItsyOsEnable, + ItsyOsSpecialKey, + ItsyOsDisable, + ItsyOsFini, + 0 +}; + +void +OsVendorInit (void) +{ + KdOsInit (&ItsyOsFuncs); +} + +void +ddxUseMsg (void) +{ + KdUseMsg(); +} + +int +ddxProcessArgument (int argc, char **argv, int i) +{ + return KdProcessArgument (argc, argv, i); +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/itsy/kbd.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/itsy/kbd.c @@ -0,0 +1,237 @@ +/* + * Id: kbd.c,v 1.1 1999/11/02 18:39:28 keithp Exp $ + * + * Copyright © 1999 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/itsy/kbd.c,v 1.1 1999/11/19 13:53:53 hohndel Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "itsy.h" +#include "kkeymap.h" +#include +#include + +#define ITSY_WIDTH 2 + +KeySym ItsyKeymap[] = { +/* 1 8 */ XK_Escape, NoSymbol, +/* 2 9 */ XK_1, XK_exclam, +/* 3 10 */ XK_2, XK_at, +/* 4 11 */ XK_3, XK_numbersign, +/* 5 12 */ XK_4, XK_dollar, +/* 6 13 */ XK_5, XK_percent, +/* 7 14 */ XK_6, XK_asciicircum, +/* 8 15 */ XK_7, XK_ampersand, +/* 9 16 */ XK_8, XK_asterisk, +/* 10 17 */ XK_9, XK_parenleft, +/* 11 18 */ XK_0, XK_parenright, +/* 12 19 */ XK_minus, XK_underscore, +/* 13 20 */ XK_equal, XK_plus, +/* 14 21 */ XK_BackSpace, NoSymbol, +/* 15 22 */ XK_Tab, NoSymbol, +/* 16 23 */ XK_Q, NoSymbol, +/* 17 24 */ XK_W, NoSymbol, +/* 18 25 */ XK_E, NoSymbol, +/* 19 26 */ XK_R, NoSymbol, +/* 20 27 */ XK_T, NoSymbol, +/* 21 28 */ XK_Y, NoSymbol, +/* 22 29 */ XK_U, NoSymbol, +/* 23 30 */ XK_I, NoSymbol, +/* 24 31 */ XK_O, NoSymbol, +/* 25 32 */ XK_P, NoSymbol, +/* 26 33 */ XK_bracketleft, XK_braceleft, +/* 27 34 */ XK_bracketright, XK_braceright, +/* 28 35 */ XK_Return, NoSymbol, +/* 29 36 */ XK_Control_L, NoSymbol, +/* 30 37 */ XK_A, NoSymbol, +/* 31 38 */ XK_S, NoSymbol, +/* 32 39 */ XK_D, NoSymbol, +/* 33 40 */ XK_F, NoSymbol, +/* 34 41 */ XK_G, NoSymbol, +/* 35 42 */ XK_H, NoSymbol, +/* 36 43 */ XK_J, NoSymbol, +/* 37 44 */ XK_K, NoSymbol, +/* 38 45 */ XK_L, NoSymbol, +/* 39 46 */ XK_semicolon, XK_colon, +/* 40 47 */ XK_apostrophe, XK_quotedbl, +/* 41 48 */ XK_grave, XK_asciitilde, +/* 42 49 */ XK_Shift_L, NoSymbol, +/* 43 50 */ XK_backslash, XK_bar, +/* 44 51 */ XK_Z, NoSymbol, +/* 45 52 */ XK_X, NoSymbol, +/* 46 53 */ XK_C, NoSymbol, +/* 47 54 */ XK_V, NoSymbol, +/* 48 55 */ XK_B, NoSymbol, +/* 49 56 */ XK_N, NoSymbol, +/* 50 57 */ XK_M, NoSymbol, +/* 51 58 */ XK_comma, XK_less, +/* 52 59 */ XK_period, XK_greater, +/* 53 60 */ XK_slash, XK_question, +/* 54 61 */ XK_Shift_R, NoSymbol, +/* 55 62 */ XK_KP_Multiply, NoSymbol, +/* 56 63 */ XK_Alt_L, XK_Meta_L, +/* 57 64 */ XK_space, NoSymbol, +/* 58 65 */ XK_Caps_Lock, NoSymbol, +/* 59 66 */ XK_F1, NoSymbol, +/* 60 67 */ XK_F2, NoSymbol, +/* 61 68 */ XK_F3, NoSymbol, +/* 62 69 */ XK_F4, NoSymbol, +/* 63 70 */ XK_F5, NoSymbol, +/* 64 71 */ XK_F6, NoSymbol, +/* 65 72 */ XK_F7, NoSymbol, +/* 66 73 */ XK_F8, NoSymbol, +/* 67 74 */ XK_F9, NoSymbol, +/* 68 75 */ XK_F10, NoSymbol, +/* 69 76 */ XK_Break, XK_Pause, +/* 70 77 */ XK_Scroll_Lock, NoSymbol, +/* 71 78 */ XK_KP_Home, XK_KP_7, +/* 72 79 */ XK_KP_Up, XK_KP_8, +/* 73 80 */ XK_KP_Page_Up, XK_KP_9, +/* 74 81 */ XK_KP_Subtract, NoSymbol, +/* 75 82 */ XK_KP_Left, XK_KP_4, +/* 76 83 */ XK_KP_5, NoSymbol, +/* 77 84 */ XK_KP_Right, XK_KP_6, +/* 78 85 */ XK_KP_Add, NoSymbol, +/* 79 86 */ XK_KP_End, XK_KP_1, +/* 80 87 */ XK_KP_Down, XK_KP_2, +/* 81 88 */ XK_KP_Page_Down, XK_KP_3, +/* 82 89 */ XK_KP_Insert, XK_KP_0, +/* 83 90 */ XK_KP_Delete, XK_KP_Decimal, +/* 84 91 */ NoSymbol, NoSymbol, +/* 85 92 */ NoSymbol, NoSymbol, +/* 86 93 */ NoSymbol, NoSymbol, +/* 87 94 */ XK_F11, NoSymbol, +/* 88 95 */ XK_F12, NoSymbol, + +/* These are remapped from the extended set (using ExtendMap) */ + +/* 89 96 */ XK_Control_R, NoSymbol, +/* 90 97 */ XK_KP_Enter, NoSymbol, +/* 91 98 */ XK_KP_Divide, NoSymbol, +/* 92 99 */ XK_Sys_Req, XK_Print, +/* 93 100 */ XK_Alt_R, XK_Meta_R, +/* 94 101 */ XK_Num_Lock, NoSymbol, +/* 95 102 */ XK_Home, NoSymbol, +/* 96 103 */ XK_Up, NoSymbol, +/* 97 104 */ XK_Page_Up, NoSymbol, +/* 98 105 */ XK_Left, NoSymbol, +/* 99 106 */ XK_Right, NoSymbol, +/* 100 107 */ XK_End, NoSymbol, +/* 101 108 */ XK_Down, NoSymbol, +/* 102 109 */ XK_Page_Down, NoSymbol, +/* 103 110 */ XK_Insert, NoSymbol, +/* 104 111 */ XK_Delete, NoSymbol, +/* 105 112 */ XK_Super_L, NoSymbol, +/* 106 113 */ XK_Super_R, NoSymbol, +/* 107 114 */ XK_Menu, NoSymbol, + +/* Itsy hardware buttons */ +#define ITSY_BUTTON_FIRST 108 +#define ITSY_BUTTON_LAST 116 + +/* 108 115 */ XK_Next, NoSymbol, /* right button on side */ +/* 109 116 */ XK_Prior, NoSymbol, /* left button on side */ +/* 110 117 */ XK_Up, NoSymbol, /* joypad */ +/* 111 118 */ XK_Down, NoSymbol, +/* 112 119 */ XK_Left, NoSymbol, +/* 113 120 */ XK_Right, NoSymbol, +/* 114 121 */ NoSymbol, NoSymbol, /* left near speaker */ +/* 115 122 */ NoSymbol, NoSymbol, /* right near speaker */ +/* 116 123 */ NoSymbol, NoSymbol, /* tiny button */ +}; + +static unsigned long itsyButtonState; + +void +ItsyKeyboardLoad (void) +{ + KeySym *k; + + itsyButtonState = 0; + kdMinScanCode = 1; + kdKeymapWidth = ITSY_WIDTH; + kdMaxScanCode = (sizeof (ItsyKeymap) / sizeof (ItsyKeymap[0])) / ITSY_WIDTH; + memcpy (kdKeymap, ItsyKeymap, sizeof (ItsyKeymap)); +} + +int +ItsyKeyboardInit (void) +{ + int butPort; + + butPort = open ("/dev/buttons", 0); + fprintf (stderr, "butPort %d\n", butPort); + return butPort; +} + +void +ItsyKeyboardFini (int fd) +{ + if (fd >= 0) + close (fd); +} + +void +ItsyKeyboardRead (int fd) +{ + itsy_buttons_event event; + int b; + unsigned long bit; + unsigned long change; + unsigned long buttons; + + if (read (fd, &event, sizeof (event)) == sizeof (event)) + { + buttons = event.state; + change = buttons ^ itsyButtonState; + if (!change) + return; + for (b = ITSY_BUTTON_FIRST; b <= ITSY_BUTTON_LAST; b++) + { + bit = (1 << (b - ITSY_BUTTON_FIRST)); + if (change & bit) + KdEnqueueKeyboardEvent (b, (buttons & bit) == 0); + } + itsyButtonState = buttons; + } +} + +void +ItsyKeyboardLeds (int leds) +{ +} + +void +ItsyKeyboardBell (int volume, int frequency, int duration) +{ +} + +KdKeyboardFuncs itsyKeyboardFuncs = { + ItsyKeyboardLoad, + ItsyKeyboardInit, + ItsyKeyboardRead, + ItsyKeyboardLeds, + ItsyKeyboardBell, + ItsyKeyboardFini, + 0, +}; --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/trident/trident.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/trident/trident.c @@ -0,0 +1,613 @@ +/* + * Copyright © 1999 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/trident/trident.c,v 1.17 2001/06/03 18:48:19 keithp Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "trident.h" +#include + +#undef TRI_DEBUG + +int trident_clk = 0; +int trident_mclk = 0; + +#define CLOCK 14318 /* KHz */ +#define CLK_N(a,b) (a & 0xff) +#define CLK_M(a,b) ((b) & 0x3f) +#define CLK_K(a,b) (((b) >> 6) & 3) +#define CLK_FREQ(a,b) (((CLK_N(a,b) + 8) * CLOCK) / ((CLK_M(a,b)+2) << CLK_K(a,b))) + +Bool +tridentCardInit (KdCardInfo *card) +{ + int k; + char *pixels; + TridentCardInfo *tridentc; + CARD8 r39; + + tridentc = (TridentCardInfo *) xalloc (sizeof (TridentCardInfo)); + if (!tridentc) + return FALSE; + + iopl (3); + tridentc->cop_base = (CARD8 *) KdMapDevice (TRIDENT_COP_BASE(card), + TRIDENT_COP_SIZE(card)); + + if (tridentc->cop_base) + { + KdSetMappedMode (TRIDENT_COP_BASE(card), + TRIDENT_COP_SIZE(card), + KD_MAPPED_MODE_REGISTERS); + } + tridentc->cop = (Cop *) (tridentc->cop_base + TRIDENT_COP_OFF(card)); + tridentc->mmio = FALSE; + r39 = tridentReadIndex (tridentc, 0x3d4, 0x39); + if (r39 & 1) + { + tridentc->mmio = TRUE; + r39 = tridentReadIndex (tridentc, 0x3d4, 0x39); + if ((r39 & 1) == 0) + { + ErrorF ("Trident: inconsisent IO mapping values\n"); + return FALSE; + } + } + +#ifdef VESA + if (!vesaInitialize (card, &tridentc->vesa)) +#else + if (!fbdevInitialize (card, &tridentc->fb)) +#endif + { + xfree (tridentc); + return FALSE; + } + +#ifdef USE_PCI + tridentc->window = (CARD32 *) (tridentc->cop_base + 0x10000); +#else + tridentc->window = 0; +#endif + card->driver = tridentc; + + return TRUE; +} + +Bool +tridentScreenInit (KdScreenInfo *screen) +{ + TridentCardInfo *tridentc = screen->card->driver; + TridentScreenInfo *tridents; + int screen_size, memory; + + tridents = (TridentScreenInfo *) xalloc (sizeof (TridentScreenInfo)); + if (!tridents) + return FALSE; + memset (tridents, '\0', sizeof (TridentScreenInfo)); +#ifdef VESA + if (!vesaScreenInitialize (screen, &tridents->vesa)) +#else + if (!fbdevScreenInitialize (screen, &tridents->fbdev)) +#endif + { + xfree (tridents); + return FALSE; + } + if (!tridentc->cop) + screen->dumb = TRUE; +#ifdef VESA + if (tridents->vesa.mapping != VESA_LINEAR) + screen->dumb = TRUE; + tridents->screen = tridents->vesa.fb; + memory = tridents->vesa.fb_size; +#else + tridents->screen = tridentc->fb.fb; + memory = (2048 + 512) * 1024; +#endif + screen_size = screen->fb[0].byteStride * screen->height; + if (tridents->screen && memory >= screen_size + 2048) + { + memory -= 2048; + tridents->cursor_base = tridents->screen + memory - 2048; + } + else + tridents->cursor_base = 0; + memory -= screen_size; + if (memory > screen->fb[0].byteStride) + { + tridents->off_screen = tridents->screen + screen_size; + tridents->off_screen_size = memory; + } + else + { + tridents->off_screen = 0; + tridents->off_screen_size = 0; + } + screen->driver = tridents; + return TRUE; +} + +Bool +tridentInitScreen (ScreenPtr pScreen) +{ +#ifdef VESA + return vesaInitScreen (pScreen); +#else + return fbdevInitScreen (pScreen); +#endif +} + +Bool +tridentFinishInitScreen (ScreenPtr pScreen) +{ +#ifdef VESA + return vesaFinishInitScreen (pScreen); +#endif +} + +CARD8 +tridentReadIndex (TridentCardInfo *tridentc, CARD16 port, CARD8 index) +{ + CARD8 value; + + if (tridentc->mmio) + { + tridentc->cop_base[port] = index; + value = tridentc->cop_base[port+1]; + } + else + { + outb (index, port); + value = inb (port+1); + } + return value; +} + +void +tridentWriteIndex (TridentCardInfo *tridentc, CARD16 port, CARD8 index, CARD8 value) +{ + if (tridentc->mmio) + { + tridentc->cop_base[port] = index; + tridentc->cop_base[port+1] = value; + } + else + { + outb (index, port); + outb (value, port+1); + } +} + +CARD8 +tridentReadReg (TridentCardInfo *tridentc, CARD16 port) +{ + CARD8 value; + + if (tridentc->mmio) + { + value = tridentc->cop_base[port]; + } + else + { + value = inb (port); + } + return value; +} + +void +tridentWriteReg (TridentCardInfo *tridentc, CARD16 port, CARD8 value) +{ + if (tridentc->mmio) + { + tridentc->cop_base[port] = value; + } + else + { + outb (value, port); + } +} + + +void +tridentPause () +{ + struct timeval tv; + + tv.tv_sec = 0; + tv.tv_usec = 50 * 1000; + select (1, 0, 0, 0, &tv); +} + +void +tridentPreserve (KdCardInfo *card) +{ + TridentCardInfo *tridentc = card->driver; + +#ifdef VESA + vesaPreserve(card); +#else + fbdevPreserve (card); +#endif + tridentPause (); + tridentc->save.reg_3c4_0e = tridentReadIndex (tridentc, 0x3c4, 0x0e); + tridentc->save.reg_3d4_36 = tridentReadIndex (tridentc, 0x3d4, 0x36); + tridentc->save.reg_3d4_39 = tridentReadIndex (tridentc, 0x3d4, 0x39); + tridentc->save.reg_3d4_62 = tridentReadIndex (tridentc, 0x3d4, 0x62); + tridentc->save.reg_3ce_21 = tridentReadIndex (tridentc, 0x3ce, 0x21); + tridentc->save.reg_3c2 = tridentReadReg (tridentc, 0x3cc); + tridentc->save.reg_3c4_16 = tridentReadIndex (tridentc, 0x3c4, 0x16); + tridentc->save.reg_3c4_17 = tridentReadIndex (tridentc, 0x3c4, 0x17); + tridentc->save.reg_3c4_18 = tridentReadIndex (tridentc, 0x3c4, 0x18); + tridentc->save.reg_3c4_19 = tridentReadIndex (tridentc, 0x3c4, 0x19); + ErrorF ("clk low 0x%x high 0x%x freq %d\n", + tridentc->save.reg_3c4_18, + tridentc->save.reg_3c4_19, + CLK_FREQ(tridentc->save.reg_3c4_18, + tridentc->save.reg_3c4_19)); +#ifdef TRI_DEBUG + fprintf (stderr, "3c4 0e: %02x\n", tridentc->save.reg_3c4_0e); + fprintf (stderr, "3d4 36: %02x\n", tridentc->save.reg_3d4_36); + fprintf (stderr, "3d4 39: %02x\n", tridentc->save.reg_3d4_39); + fprintf (stderr, "3d4 62: %02x\n", tridentc->save.reg_3d4_62); + fprintf (stderr, "3ce 21: %02x\n", tridentc->save.reg_3ce_21); + fflush (stderr); +#endif + tridentPause (); +} + +void +tridentSetCLK(int clock, CARD8 *a, CARD8 *b) +{ + int powerup[4] = { 1,2,4,8 }; + int clock_diff = 750; + int freq, ffreq; + int m, n, k; + int p, q, r, s; + int startn, endn; + int endm, endk; + + p = q = r = s = 0; + + startn = 64; + endn = 255; + endm = 63; + endk = 3; + + freq = clock; + + for (k=0;k<=endk;k++) + for (n=startn;n<=endn;n++) + for (m=1;m<=endm;m++) + { + ffreq = ( ( ((n + 8) * CLOCK) / ((m + 2) * powerup[k]) )); + if ((ffreq > freq - clock_diff) && (ffreq < freq + clock_diff)) + { + clock_diff = (freq > ffreq) ? freq - ffreq : ffreq - freq; + p = n; q = m; r = k; s = ffreq; + } + } + + ErrorF ("ffreq %d clock %d\n", s, clock); + if (s == 0) + { + FatalError("Unable to set programmable clock.\n" + "Frequency %d is not a valid clock.\n" + "Please modify XF86Config for a new clock.\n", + freq); + } + + /* N is all 8bits */ + *a = p; + /* M is first 6bits, with K last 2bits */ + *b = (q & 0x3F) | (r << 6); +} + +void +tridentSetMCLK(int clock, CARD8 *a, CARD8 *b) +{ + int powerup[4] = { 1,2,4,8 }; + int clock_diff = 750; + int freq, ffreq; + int m,n,k; + int p, q, r, s; + int startn, endn; + int endm, endk; + + p = q = r = s = 0; + + startn = 64; + endn = 255; + endm = 63; + endk = 3; + + freq = clock; + + for (k=0;k<=endk;k++) + for (n=startn;n<=endn;n++) + for (m=1;m<=endm;m++) { + ffreq = ((((n+8)*CLOCK)/((m+2)*powerup[k]))); + if ((ffreq > freq - clock_diff) && (ffreq < freq + clock_diff)) + { + clock_diff = (freq > ffreq) ? freq - ffreq : ffreq - freq; + p = n; q = m; r = k; s = ffreq; + } + } + + if (s == 0) + { + FatalError("Unable to set memory clock.\n" + "Frequency %d is not a valid clock.\n" + "Please modify XF86Config for a new clock.\n", + freq); + } + + /* N is all 8bits */ + *a = p; + /* M is first 6bits, with K last 2bits */ + *b = (q & 0x3F) | (r << 6); +} + +void +tridentSetMMIO (TridentCardInfo *tridentc) +{ + int tries; + CARD8 v; + +#ifdef TRI_DEBUG + fprintf (stderr, "Set MMIO\n"); +#endif + /* enable config port writes */ + for (tries = 0; tries < 3; tries++) + { + /* enable direct read when GE busy, enable PCI retries */ + tridentWriteIndex (tridentc, 0x3d4, 0x62, + tridentc->save.reg_3d4_62 | 0x70); + /* make sure the chip is in new mode */ + tridentReadIndex (tridentc, 0x3c4, 0xb); + /* enable access to upper registers */ + tridentWriteIndex (tridentc, 0x3c4, 0xe, + tridentc->save.reg_3c4_0e | 0x80); + v = tridentReadIndex (tridentc, 0x3c4, 0xe); + if (!(v & 0x80)) + { + fprintf (stderr, "Trident GE not enabled 0x%x\n", v); + continue; + } + /* enable screen */ + tridentWriteIndex (tridentc, 0x3ce, 0x21, 0x80); +#ifdef USE_PCI + /* enable burst r/w, enable memory mapped ports */ + tridentWriteIndex (tridentc, 0x3d4, 0x39, 7); + tridentc->mmio = TRUE; + /* reset GE, enable GE, set GE to pci 1 */ + tridentWriteIndex (tridentc, 0x3d4, 0x36, 0x90); +#else + /* enable burst r/w, disable memory mapped ports */ + tridentWriteIndex (tridentc, 0x3d4, 0x39, 0x6); + /* reset GE, enable GE, set GE to 0xbff00 */ + tridentWriteIndex (tridentc, 0x3d4, 0x36, 0x92); +#endif + /* set clock */ + if (trident_clk) + { + CARD8 a, b; + + a = tridentReadIndex (tridentc, 0x3c4, 0x18); + b = tridentReadIndex (tridentc, 0x3c4, 0x19); + ErrorF ("old clock 0x%x 0x%x %d\n", + a, b, CLK_FREQ(a,b)); + tridentSetCLK (trident_clk, &a, &b); + ErrorF ("clk %d-> 0x%x 0x%x %d\n", trident_clk, a, b, + CLK_FREQ(a,b)); +#if 1 + tridentWriteIndex (tridentc, 0x3c4, 0x18, a); + tridentWriteIndex (tridentc, 0x3c4, 0x19, b); +#endif + } + if (trident_mclk) + { + CARD8 a, b; + + tridentSetMCLK (trident_mclk, &a, &b); + ErrorF ("mclk %d -> 0x%x 0x%x\n", trident_mclk, a, b); +#if 0 + tridentWriteIndex (tridentc, 0x3c4, 0x16, a); + tridentWriteIndex (tridentc, 0x3c4, 0x17, b); +#endif + } + if (trident_clk || trident_mclk) + { + CARD8 mode; + + mode = tridentReadReg (tridentc, 0x3cc); + ErrorF ("old mode 0x%x\n", mode); + mode = (mode & 0xf3) | 0x08; + ErrorF ("new mode 0x%x\n", mode); +#if 1 + tridentWriteReg (tridentc, 0x3c2, mode); +#endif + } +#ifdef TRI_DEBUG + fprintf (stderr, "0x36: 0x%02x\n", + tridentReadIndex (tridentc, 0x3d4, 0x36)); +#endif + if (tridentc->cop->status != 0xffffffff) + break; + } +#ifdef TRI_DEBUG + fprintf (stderr, "COP status 0x%x\n", tridentc->cop->status); +#endif + if (tridentc->cop->status == 0xffffffff) + FatalError ("Trident COP not visible\n"); +} + +void +tridentResetMMIO (TridentCardInfo *tridentc) +{ +#ifdef TRI_DEBUG + fprintf (stderr, "Reset MMIO\n"); +#endif + tridentPause (); +#if 0 + tridentWriteIndex (tridentc, 0x3c4, 0x16, tridentc->save.reg_3c4_16); + tridentWriteIndex (tridentc, 0x3c4, 0x17, tridentc->save.reg_3c4_17); +#endif + tridentWriteIndex (tridentc, 0x3c4, 0x18, tridentc->save.reg_3c4_18); + tridentWriteIndex (tridentc, 0x3c4, 0x19, tridentc->save.reg_3c4_19); + tridentWriteReg (tridentc, 0x3c2, tridentc->save.reg_3c2); + tridentPause (); + tridentWriteIndex (tridentc, 0x3ce, 0x21, tridentc->save.reg_3ce_21); + tridentPause (); + tridentWriteIndex (tridentc, 0x3d4, 0x62, tridentc->save.reg_3d4_62); + tridentWriteIndex (tridentc, 0x3d4, 0x39, tridentc->save.reg_3d4_39); + tridentc->mmio = FALSE; + tridentWriteIndex (tridentc, 0x3d4, 0x36, tridentc->save.reg_3d4_36); + tridentWriteIndex (tridentc, 0x3c4, 0x0e, tridentc->save.reg_3c4_0e); + tridentPause (); +} + +Bool +tridentEnable (ScreenPtr pScreen) +{ + KdScreenPriv(pScreen); + TridentCardInfo *tridentc = pScreenPriv->card->driver; + +#ifdef VESA + if (!vesaEnable (pScreen)) + return FALSE; +#else + if (!fbdevEnable (pScreen)) + return FALSE; +#endif + tridentSetMMIO (tridentc); + return TRUE; +} + +void +tridentDisable (ScreenPtr pScreen) +{ +#ifdef VESA + vesaDisable (pScreen); +#else + fbdevDisable (pScreen); +#endif +} + +const CARD8 tridentDPMSModes[4] = { + 0x80, /* KD_DPMS_NORMAL */ + 0x8c, /* KD_DPMS_STANDBY */ + 0x8c, /* KD_DPMS_STANDBY */ + 0x8c, /* KD_DPMS_STANDBY */ +/* 0xb0, /* KD_DPMS_SUSPEND */ +/* 0xbc, /* KD_DPMS_POWERDOWN */ +}; + +Bool +tridentDPMS (ScreenPtr pScreen, int mode) +{ + KdScreenPriv(pScreen); + TridentCardInfo *tridentc = pScreenPriv->card->driver; + + tridentWriteIndex (tridentc, 0x3ce, 0x21, tridentDPMSModes[mode]); + tridentPause (); + return TRUE; +} + +void +tridentRestore (KdCardInfo *card) +{ + TridentCardInfo *tridentc = card->driver; + + tridentResetMMIO (tridentc); +#ifdef VESA + vesaRestore (card); +#else + fbdevRestore (card); +#endif +} + +void +tridentScreenFini (KdScreenInfo *screen) +{ + TridentScreenInfo *tridents = (TridentScreenInfo *) screen->driver; + +#ifdef VESA + vesaScreenFini (screen); +#endif + xfree (tridents); + screen->driver = 0; +} + +void +tridentCardFini (KdCardInfo *card) +{ + TridentCardInfo *tridentc = card->driver; + + if (tridentc->cop_base) + { + KdUnmapDevice ((void *) tridentc->cop_base, TRIDENT_COP_SIZE(card)); + KdResetMappedMode (TRIDENT_COP_BASE(card), + TRIDENT_COP_SIZE(card), + KD_MAPPED_MODE_REGISTERS); + } +#ifdef VESA + vesaCardFini (card); +#else + fbdevCardFini (card); +#endif +} + +KdCardFuncs tridentFuncs = { + tridentCardInit, /* cardinit */ + tridentScreenInit, /* scrinit */ + tridentInitScreen, /* initScreen */ + tridentPreserve, /* preserve */ + tridentEnable, /* enable */ + tridentDPMS, /* dpms */ + tridentDisable, /* disable */ + tridentRestore, /* restore */ + tridentScreenFini, /* scrfini */ + tridentCardFini, /* cardfini */ + + tridentCursorInit, /* initCursor */ + tridentCursorEnable, /* enableCursor */ + tridentCursorDisable, /* disableCursor */ + tridentCursorFini, /* finiCursor */ + tridentRecolorCursor, /* recolorCursor */ + + tridentDrawInit, /* initAccel */ + tridentDrawEnable, /* enableAccel */ + tridentDrawSync, /* syncAccel */ + tridentDrawDisable, /* disableAccel */ + tridentDrawFini, /* finiAccel */ + +#ifdef VESA + vesaGetColors, /* getColors */ + vesaPutColors, /* putColors */ +#else + fbdevGetColors, /* getColors */ + fbdevPutColors, /* putColors */ +#endif + tridentFinishInitScreen /* finishInitScreen */ +}; --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/trident/tridentstub.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/trident/tridentstub.c @@ -0,0 +1,96 @@ +/* + * Id: tridentstub.c,v 1.1 1999/11/02 08:19:15 keithp Exp $ + * + * Copyright 1999 SuSE, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of SuSE not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. SuSE makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + * + * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE + * BE LIABLE FOR 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. + * + * Author: Keith Packard, SuSE, Inc. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/trident/tridentstub.c,v 1.5 2000/11/29 08:42:25 keithp Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "trident.h" + +extern int trident_clk, trident_mclk; + +void +InitCard (char *name) +{ + KdCardAttr attr; + + if (LinuxFindPci (0x1023, 0x9525, 0, &attr)) + KdCardInfoAdd (&tridentFuncs, &attr, 0); +} + +void +InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv) +{ + KdInitOutput (pScreenInfo, argc, argv); +} + +void +InitInput (int argc, char **argv) +{ + KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs); +} + +void +ddxUseMsg (void) +{ +#if 0 + ErrorF("\nTrident Driver Options:\n"); + ErrorF("-clk XXX: what's this?\n"); + ErrorF("-mclk XXX: what's this?\n"); +#endif + KdUseMsg(); +#ifdef VESA + vesaUseMsg() +#endif +} + +int +ddxProcessArgument (int argc, char **argv, int i) +{ + int ret; + + if (!strcmp (argv[i], "-clk")) + { + if (i+1 < argc) + trident_clk = atoi (argv[i+1]); + else + UseMsg (); + return 2; + } + if (!strcmp (argv[i], "-mclk")) + { + if (i+1 < argc) + trident_mclk = atoi (argv[i+1]); + else + UseMsg (); + return 2; + } + +#ifdef VESA + if (!(ret = vesaProcessArgument (argc, argv, i))) +#endif + ret = KdProcessArgument(argc, argv, i); + return ret; +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/trident/trident.h +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/trident/trident.h @@ -0,0 +1,272 @@ +/* + * Id: trident.h,v 1.2 1999/11/02 08:17:24 keithp Exp $ + * + * Copyright © 1999 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/trident/trident.h,v 1.8 2000/10/20 00:19:51 keithp Exp $ */ + +#ifndef _TRIDENT_H_ +#define _TRIDENT_H_ +#ifdef VESA +#include +#else +#include +#endif + +/* + * offset from ioport beginning + */ + +#ifdef USE_PCI +#define TRIDENT_COP_BASE(c) (c->attr.address[1]) +#define TRIDENT_COP_OFF(c) 0x2100 +#define TRIDENT_COP_SIZE(c) 0x20000 +#else +#define TRIDENT_COP_BASE(c) 0xbf000 +#define TRIDENT_COP_OFF(c) 0x00f00 +#define TRIDENT_COP_SIZE(c) (0x2000) +#endif + +typedef volatile CARD8 VOL8; +typedef volatile CARD16 VOL16; +typedef volatile CARD32 VOL32; + +typedef struct _cop { + VOL32 src_start_xy; /* 0x00 */ + VOL32 src_end_xy; /* 0x04 */ + VOL32 dst_start_xy; /* 0x08 */ + VOL32 dst_end_xy; /* 0x0c */ + VOL32 alpha; /* 0x10 */ + CARD8 pad14[0xc]; /* 0x14 */ + VOL32 multi; /* 0x20 */ + +#define COP_MULTI_CLIP_TOP_LEFT 0x10000000 +#define COP_MULTI_DEPTH 0x40000000 +#define COP_MULTI_COLOR_KEY 0x70000000 +#define COP_MULTI_STYLE 0x50000000 +#define COP_MULTI_PATTERN 0x80000000 +#define COP_MULTI_ROP 0x90000000 +#define COP_MULTI_STRIDE 0x60000000 +#define COP_MULTI_Z 0xa0000000 +#define COP_MULTI_ALPHA 0xb0000000 +#define COP_MULTI_TEXTURE 0xd0000000 +#define COP_MULTI_TEXTURE_BOUND 0xe0000000 +#define COP_MULTI_TEXTURE_ADVANCED 0x20000000 +#define COP_MULTI_MASK 0xf0000000 + +#define COP_DEPTH_8 0x00000000 +#define COP_DEPTH_16 0x00000001 +#define COP_DEPTH_24_32 0x00000002 +#define COP_DEPTH_15 0x00000005 +#define COP_DEPTH_DITHER_DISABLE 0x00000008 + + +#define COP_ALPHA_SRC_BLEND_0 0x00000000 +#define COP_ALPHA_SRC_BLEND_1 0x00000001 +#define COP_ALPHA_SRC_BLEND_SRC_C 0x00000002 +#define COP_ALPHA_SRC_BLEND_1_SRC_C 0x00000003 +#define COP_ALPHA_SRC_BLEND_SRC_A 0x00000004 +#define COP_ALPHA_SRC_BLEND_1_SRC_A 0x00000005 +#define COP_ALPHA_SRC_BLEND_DST_A 0x00000006 +#define COP_ALPHA_SRC_BLEND_1_DST_A 0x00000007 +#define COP_ALPHA_SRC_BLEND_DST_C 0x00000008 +#define COP_ALPHA_SRC_BLEND_1_DST_C 0x00000009 +#define COP_ALPHA_SRC_BLEND_SAT 0x0000000A +#define COP_ALPHA_SRC_BLEND_BG 0x0000000B + +#define COP_ALPHA_DST_BLEND_0 0x00000000 +#define COP_ALPHA_DST_BLEND_1 0x00000010 +#define COP_ALPHA_DST_BLEND_SRC_C 0x00000020 +#define COP_ALPHA_DST_BLEND_1_SRC_C 0x00000030 +#define COP_ALPHA_DST_BLEND_SRC_A 0x00000040 +#define COP_ALPHA_DST_BLEND_1_SRC_A 0x00000050 +#define COP_ALPHA_DST_BLEND_DST_A 0x00000060 +#define COP_ALPHA_DST_BLEND_1_DST_A 0x00000070 +#define COP_ALPHA_DST_BLEND_DST_C 0x00000080 +#define COP_ALPHA_DST_BLEND_1_DST_C 0x00000090 +#define COP_ALPHA_DST_BLEND_OTHER 0x000000A0 + +#define COP_ALPHA_RESULT_ALPHA 0x00100000 +#define COP_ALPHA_DEST_ALPHA 0x00200000 +#define COP_ALPHA_SOURCE_ALPHA 0x00400000 +#define COP_ALPHA_WRITE_ENABLE 0x00800000 +#define COP_ALPHA_TEST_ENABLE 0x01000000 +#define COP_ALPHA_BLEND_ENABLE 0x02000000 +#define COP_ALPHA_DEST_VALUE 0x04000000 +#define COP_ALPHA_SOURCE_VALUE 0x08000000 + + VOL32 command; /* 0x24 */ +#define COP_OP_NULL 0x00000000 +#define COP_OP_LINE 0x20000000 +#define COP_OP_BLT 0x80000000 +#define COP_OP_TEXT 0x90000000 +#define COP_OP_POLY 0xb0000000 +#define COP_OP_POLY2 0xe0000000 +#define COP_SCL_EXPAND 0x00800000 +#define COP_SCL_OPAQUE 0x00400000 +#define COP_SCL_REVERSE 0x00200000 +#define COP_SCL_MONO_OFF 0x001c0000 +#define COP_LIT_TEXTURE 0x00004000 +#define COP_BILINEAR 0x00002000 +#define COP_OP_ZBUF 0x00000800 +#define COP_OP_ROP 0x00000400 +#define COP_OP_FG 0x00000200 +#define COP_OP_FB 0x00000080 +#define COP_X_REVERSE 0x00000004 +#define COP_CLIP 0x00000001 + VOL32 texture_format; /* 0x28 */ + CARD8 pad2c[0x4]; /* 0x2c */ + + VOL32 clip_bottom_right; /* 0x30 */ + VOL32 dataIII; /* 0x34 */ + VOL32 dataIV; /* 0x38 */ + CARD8 pad3c[0x8]; /* 0x3c */ + + VOL32 fg; /* 0x44 */ + VOL32 bg; /* 0x48 */ + CARD8 pad4c[0x4]; /* 0x4c */ + + VOL32 pattern_fg; /* 0x50 */ + VOL32 pattern_bg; /* 0x54 */ + CARD8 pad58[0xc]; /* 0x58 */ + + VOL32 status; /* 0x64 */ +#define COP_STATUS_BE_BUSY 0x80000000 +#define COP_STATUS_DPE_BUSY 0x20000000 +#define COP_STATUS_MI_BUSY 0x10000000 +#define COP_STATUS_FIFO_BUSY 0x08000000 +#define COP_STATUS_WB_BUSY 0x00800000 +#define COP_STATUS_Z_FAILED 0x00400000 +#define COP_STATUS_EFFECTIVE 0x00200000 +#define COP_STATUS_LEFT_VIEW 0x00080000 + + CARD8 pad68[0x4]; /* 0x68 */ + + VOL32 src_offset; /* 0x6c */ + VOL32 z_offset; /* 0x70 */ + CARD8 pad74[0x4]; /* 0x74 */ + + VOL32 display_offset; /* 0x78 */ + VOL32 dst_offset; /* 0x7c */ + CARD8 pad80[0x34]; /* 0x80 */ + + VOL32 semaphore; /* 0xb4 */ +} Cop; + +#define TRI_XY(x,y) ((y) << 16 | (x)) + +typedef struct _tridentSave { + CARD8 reg_3c4_0e; /* config port value */ + CARD8 reg_3d4_36; + CARD8 reg_3d4_39; + CARD8 reg_3d4_62; /* GE setup */ + CARD8 reg_3ce_21; /* DPMS */ + CARD8 reg_3c2; /* clock config */ + CARD8 reg_3c4_16; /* MCLKLow */ + CARD8 reg_3c4_17; /* MCLKHigh */ + CARD8 reg_3c4_18; /* ClockLow */ + CARD8 reg_3c4_19; /* ClockHigh */ +} TridentSave; + +typedef struct _tridentCardInfo { +#ifdef VESA + VesaCardPrivRec vesa; +#else + FbdevPriv fb; +#endif + CARD8 *cop_base; + Cop *cop; + CARD32 *window; + CARD32 cop_depth; + CARD32 cop_stride; + Bool mmio; + TridentSave save; +} TridentCardInfo; + +#define getTridentCardInfo(kd) ((TridentCardInfo *) ((kd)->card->driver)) +#define tridentCardInfo(kd) TridentCardInfo *tridentc = getTridentCardInfo(kd) + +typedef struct _tridentCursor { + int width, height; + int xhot, yhot; + Bool has_cursor; + CursorPtr pCursor; + Pixel source, mask; +} TridentCursor; + +#define TRIDENT_CURSOR_WIDTH 64 +#define TRIDENT_CURSOR_HEIGHT 64 + +typedef struct _tridentScreenInfo { +#ifdef VESA + VesaScreenPrivRec vesa; +#else + FbdevScrPriv fbdev; +#endif + CARD8 *cursor_base; + CARD8 *screen; + CARD8 *off_screen; + int off_screen_size; + TridentCursor cursor; +} TridentScreenInfo; + +#define getTridentScreenInfo(kd) ((TridentScreenInfo *) ((kd)->screen->driver)) +#define tridentScreenInfo(kd) TridentScreenInfo *tridents = getTridentScreenInfo(kd) + +Bool +tridentDrawInit (ScreenPtr pScreen); + +void +tridentDrawEnable (ScreenPtr pScreen); + +void +tridentDrawSync (ScreenPtr pScreen); + +void +tridentDrawDisable (ScreenPtr pScreen); + +void +tridentDrawFini (ScreenPtr pScreen); + +CARD8 +tridentReadIndex (TridentCardInfo *tridentc, CARD16 port, CARD8 index); + +void +tridentWriteIndex (TridentCardInfo *tridentc, CARD16 port, CARD8 index, CARD8 value); + +Bool +tridentCursorInit (ScreenPtr pScreen); + +void +tridentCursorEnable (ScreenPtr pScreen); + +void +tridentCursorDisable (ScreenPtr pScreen); + +void +tridentCursorFini (ScreenPtr pScreen); + +void +tridentRecolorCursor (ScreenPtr pScreen, int ndef, xColorItem *pdef); + +extern KdCardFuncs tridentFuncs; + +#endif /* _TRIDENT_H_ */ --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/trident/tridentcurs.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/trident/tridentcurs.c @@ -0,0 +1,392 @@ +/* + * Id: tridentcurs.c,v 1.1 1999/11/02 03:54:47 keithp Exp $ + * + * Copyright © 1999 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/trident/tridentcurs.c,v 1.5 2000/08/29 17:20:15 keithp Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "trident.h" +#include "cursorstr.h" + +#define SetupCursor(s) KdScreenPriv(s); \ + tridentCardInfo(pScreenPriv); \ + tridentScreenInfo(pScreenPriv); \ + TridentCursor *pCurPriv = &tridents->cursor + +static void +_tridentMoveCursor (ScreenPtr pScreen, int x, int y) +{ + SetupCursor(pScreen); + CARD8 xlow, xhigh, ylow, yhigh; + CARD8 xoff, yoff; + + x -= pCurPriv->xhot; + xoff = 0; + if (x < 0) + { + xoff = -x; + x = 0; + } + y -= pCurPriv->yhot; + yoff = 0; + if (y < 0) + { + yoff = -y; + y = 0; + } + xlow = (CARD8) x; + xhigh = (CARD8) (x >> 8); + ylow = (CARD8) y; + yhigh = (CARD8) (y >> 8); + + + /* This is the recommended order to move the cursor */ + + tridentWriteIndex (tridentc, 0x3d4, 0x41, xhigh); + tridentWriteIndex (tridentc, 0x3d4, 0x40, xlow); + tridentWriteIndex (tridentc, 0x3d4, 0x42, ylow); + tridentWriteIndex (tridentc, 0x3d4, 0x46, xoff); + tridentWriteIndex (tridentc, 0x3d4, 0x47, yoff); + tridentWriteIndex (tridentc, 0x3d4, 0x43, yhigh); +} + +static void +tridentMoveCursor (ScreenPtr pScreen, int x, int y) +{ + SetupCursor (pScreen); + + if (!pCurPriv->has_cursor) + return; + + if (!pScreenPriv->enabled) + return; + + _tridentMoveCursor (pScreen, x, y); +} + +static void +tridentAllocCursorColors (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + CursorPtr pCursor = pCurPriv->pCursor; + + KdAllocateCursorPixels (pScreen, 0, pCursor, + &pCurPriv->source, &pCurPriv->mask); + switch (pScreenPriv->screen->fb[0].bitsPerPixel) { + case 4: + pCurPriv->source |= pCurPriv->source << 4; + pCurPriv->mask |= pCurPriv->mask << 4; + case 8: + pCurPriv->source |= pCurPriv->source << 8; + pCurPriv->mask |= pCurPriv->mask << 8; + case 16: + pCurPriv->source |= pCurPriv->source << 16; + pCurPriv->mask |= pCurPriv->mask << 16; + } +} + +static void +tridentSetCursorColors (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + CursorPtr pCursor = pCurPriv->pCursor; + CARD32 fg, bg; + + fg = pCurPriv->source; + bg = pCurPriv->mask; + tridentWriteIndex (tridentc, 0x3d4, 0x48, fg); + tridentWriteIndex (tridentc, 0x3d4, 0x49, fg >> 8); + tridentWriteIndex (tridentc, 0x3d4, 0x4a, fg >> 16); + + tridentWriteIndex (tridentc, 0x3d4, 0x4c, bg); + tridentWriteIndex (tridentc, 0x3d4, 0x4d, bg >> 8); + tridentWriteIndex (tridentc, 0x3d4, 0x4e, bg >> 16); +} + +void +tridentRecolorCursor (ScreenPtr pScreen, int ndef, xColorItem *pdef) +{ + SetupCursor (pScreen); + CursorPtr pCursor = pCurPriv->pCursor; + xColorItem sourceColor, maskColor; + + if (!pCurPriv->has_cursor || !pCursor) + return; + + if (!pScreenPriv->enabled) + return; + + if (pdef) + { + while (ndef) + { + if (pdef->pixel == pCurPriv->source || + pdef->pixel == pCurPriv->mask) + break; + ndef--; + } + if (!ndef) + return; + } + tridentAllocCursorColors (pScreen); + tridentSetCursorColors (pScreen); +} + +#define InvertBits32(v) { \ + v = ((v & 0x55555555) << 1) | ((v >> 1) & 0x55555555); \ + v = ((v & 0x33333333) << 2) | ((v >> 2) & 0x33333333); \ + v = ((v & 0x0f0f0f0f) << 4) | ((v >> 4) & 0x0f0f0f0f); \ +} + +static void +tridentLoadCursor (ScreenPtr pScreen, int x, int y) +{ + SetupCursor(pScreen); + CursorPtr pCursor = pCurPriv->pCursor; + CursorBitsPtr bits = pCursor->bits; + int w, h; + CARD32 *ram, *msk, *mskLine, *src, *srcLine; + int i, j; + int cursor_address; + int lwsrc; + unsigned char ramdac_control_; + CARD32 offset; + + /* + * Allocate new colors + */ + tridentAllocCursorColors (pScreen); + + pCurPriv->pCursor = pCursor; + pCurPriv->xhot = pCursor->bits->xhot; + pCurPriv->yhot = pCursor->bits->yhot; + + /* + * Stick new image into cursor memory + */ + ram = (CARD32 *) tridents->cursor_base; + mskLine = (CARD32 *) bits->mask; + srcLine = (CARD32 *) bits->source; + + h = bits->height; + if (h > TRIDENT_CURSOR_HEIGHT) + h = TRIDENT_CURSOR_HEIGHT; + + lwsrc = BitmapBytePad(bits->width) / 4; /* words per line */ + + for (i = 0; i < TRIDENT_CURSOR_HEIGHT; i++) { + msk = mskLine; + src = srcLine; + mskLine += lwsrc; + srcLine += lwsrc; + for (j = 0; j < TRIDENT_CURSOR_WIDTH / 32; j++) { + + CARD32 m, s; + +#if 1 + if (i < h && j < lwsrc) + { + m = *msk++; + s = *src++; + InvertBits32(m); + InvertBits32(s); + } + else + { + m = 0; + s = 0; + } +#endif + *ram++ = m; + *ram++ = s; + } + } + + /* Set address for cursor bits */ + offset = tridents->cursor_base - (CARD8 *) tridents->screen; + offset >>= 10; + tridentWriteIndex (tridentc, 0x3d4, 0x44, (CARD8) (offset & 0xff)); + tridentWriteIndex (tridentc, 0x3d4, 0x45, (CARD8) (offset >> 8)); + + /* Set new color */ + tridentSetCursorColors (pScreen); + + /* Enable the cursor */ + tridentWriteIndex (tridentc, 0x3d4, 0x50, 0xc1); + + /* Move to new position */ + tridentMoveCursor (pScreen, x, y); +} + +static void +tridentUnloadCursor (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + /* Disable cursor */ + tridentWriteIndex (tridentc, 0x3d4, 0x50, 0); +} + +static Bool +tridentRealizeCursor (ScreenPtr pScreen, CursorPtr pCursor) +{ + SetupCursor(pScreen); + + if (!pScreenPriv->enabled) + return TRUE; + + /* miRecolorCursor does this */ + if (pCurPriv->pCursor == pCursor) + { + if (pCursor) + { + int x, y; + + miPointerPosition (&x, &y); + tridentLoadCursor (pScreen, x, y); + } + } + return TRUE; +} + +static Bool +tridentUnrealizeCursor (ScreenPtr pScreen, CursorPtr pCursor) +{ + return TRUE; +} + +static void +tridentSetCursor (ScreenPtr pScreen, CursorPtr pCursor, int x, int y) +{ + SetupCursor(pScreen); + + pCurPriv->pCursor = pCursor; + + if (!pScreenPriv->enabled) + return; + + if (pCursor) + tridentLoadCursor (pScreen, x, y); + else + tridentUnloadCursor (pScreen); +} + +miPointerSpriteFuncRec tridentPointerSpriteFuncs = { + tridentRealizeCursor, + tridentUnrealizeCursor, + tridentSetCursor, + tridentMoveCursor, +}; + +static void +tridentQueryBestSize (int class, + unsigned short *pwidth, unsigned short *pheight, + ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + switch (class) + { + case CursorShape: + if (*pwidth > pCurPriv->width) + *pwidth = pCurPriv->width; + if (*pheight > pCurPriv->height) + *pheight = pCurPriv->height; + if (*pwidth > pScreen->width) + *pwidth = pScreen->width; + if (*pheight > pScreen->height) + *pheight = pScreen->height; + break; + default: + fbQueryBestSize (class, pwidth, pheight, pScreen); + break; + } +} + +Bool +tridentCursorInit (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + if (!tridents->cursor_base) + { + pCurPriv->has_cursor = FALSE; + return FALSE; + } + + pCurPriv->width = TRIDENT_CURSOR_WIDTH; + pCurPriv->height= TRIDENT_CURSOR_HEIGHT; + pScreen->QueryBestSize = tridentQueryBestSize; + miPointerInitialize (pScreen, + &tridentPointerSpriteFuncs, + &kdPointerScreenFuncs, + FALSE); + pCurPriv->has_cursor = TRUE; + pCurPriv->pCursor = NULL; + return TRUE; +} + +void +tridentCursorEnable (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + if (pCurPriv->has_cursor) + { + if (pCurPriv->pCursor) + { + int x, y; + + miPointerPosition (&x, &y); + tridentLoadCursor (pScreen, x, y); + } + else + tridentUnloadCursor (pScreen); + } +} + +void +tridentCursorDisable (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + if (!pScreenPriv->enabled) + return; + + if (pCurPriv->has_cursor) + { + if (pCurPriv->pCursor) + { + tridentUnloadCursor (pScreen); + } + } +} + +void +tridentCursorFini (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + pCurPriv->pCursor = NULL; +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/trident/tridentdraw.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/trident/tridentdraw.c @@ -0,0 +1,499 @@ +/* + * Id: tridentdraw.c,v 1.1 1999/11/02 03:54:47 keithp Exp $ + * + * Copyright © 1999 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/trident/tridentdraw.c,v 1.10 2001/06/03 18:48:19 keithp Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "trident.h" +#include "tridentdraw.h" + +#include "Xmd.h" +#include "gcstruct.h" +#include "scrnintstr.h" +#include "pixmapstr.h" +#include "regionstr.h" +#include "mistruct.h" +#include "fontstruct.h" +#include "dixfontstr.h" +#include "fb.h" +#include "migc.h" +#include "miline.h" +#include "picturestr.h" + +CARD8 tridentRop[16] = { + /* GXclear */ 0x00, /* 0 */ + /* GXand */ 0x88, /* src AND dst */ + /* GXandReverse */ 0x44, /* src AND NOT dst */ + /* GXcopy */ 0xcc, /* src */ + /* GXandInverted*/ 0x22, /* NOT src AND dst */ + /* GXnoop */ 0xaa, /* dst */ + /* GXxor */ 0x66, /* src XOR dst */ + /* GXor */ 0xee, /* src OR dst */ + /* GXnor */ 0x11, /* NOT src AND NOT dst */ + /* GXequiv */ 0x99, /* NOT src XOR dst */ + /* GXinvert */ 0x55, /* NOT dst */ + /* GXorReverse */ 0xdd, /* src OR NOT dst */ + /* GXcopyInverted*/ 0x33, /* NOT src */ + /* GXorInverted */ 0xbb, /* NOT src OR dst */ + /* GXnand */ 0x77, /* NOT src OR NOT dst */ + /* GXset */ 0xff, /* 1 */ +}; + +#define tridentFillPix(bpp,pixel) {\ + if (bpp == 8) \ + { \ + pixel = pixel & 0xff; \ + pixel = pixel | pixel << 8; \ + } \ + if (bpp <= 16) \ + { \ + pixel = pixel & 0xffff; \ + pixel = pixel | pixel << 16; \ + } \ +} + +static Cop *cop; +static CARD32 cmd; + +Bool +tridentPrepareSolid (DrawablePtr pDrawable, + int alu, + Pixel pm, + Pixel fg) +{ + FbBits depthMask = FbFullMask(pDrawable->depth); + + if ((pm & depthMask) != depthMask) + return FALSE; + else + { + KdScreenPriv(pDrawable->pScreen); + tridentCardInfo(pScreenPriv); + cop = tridentc->cop; + + tridentFillPix(pDrawable->bitsPerPixel,fg); + _tridentInit(cop,tridentc); + _tridentSetSolidRect(cop,fg,alu,cmd); + return TRUE; + } +} + +void +tridentSolid (int x1, int y1, int x2, int y2) +{ + _tridentRect (cop, x1, y1, x2 - 1, y2 - 1, cmd); +} + +void +tridentDoneSolid (void) +{ +} + +Bool +tridentPrepareCopy (DrawablePtr pSrcDrawable, + DrawablePtr pDstDrawable, + int dx, + int dy, + int alu, + Pixel pm) +{ + FbBits depthMask = FbFullMask(pDstDrawable->depth); + + if ((pm & depthMask) == depthMask) + { + KdScreenPriv(pDstDrawable->pScreen); + tridentCardInfo(pScreenPriv); + cop = tridentc->cop; + _tridentInit(cop,tridentc); + cop->multi = COP_MULTI_PATTERN; + cop->multi = COP_MULTI_ROP | tridentRop[alu]; + cmd = COP_OP_BLT | COP_SCL_OPAQUE | COP_OP_ROP | COP_OP_FB; + if (dx < 0 || dy < 0) + cmd |= COP_X_REVERSE; + return TRUE; + } + else + return FALSE; +} + +void +tridentCopy (int srcX, + int srcY, + int dstX, + int dstY, + int w, + int h) +{ + if (cmd & COP_X_REVERSE) + { + cop->src_start_xy = TRI_XY (srcX + w - 1, srcY + h - 1); + cop->src_end_xy = TRI_XY (srcX, srcY); + cop->dst_start_xy = TRI_XY (dstX + w - 1, dstY + h - 1); + cop->dst_end_xy = TRI_XY (dstX, dstY); + } + else + { + cop->src_start_xy = TRI_XY (srcX, srcY); + cop->src_end_xy = TRI_XY (srcX + w - 1, srcY + h - 1); + cop->dst_start_xy = TRI_XY (dstX, dstY); + cop->dst_end_xy = TRI_XY (dstX + w - 1, dstY + h - 1); + } + _tridentWaitDone (cop); + cop->command = cmd; +} + +void +tridentDoneCopy (void) +{ +} + +void +tridentComposite (CARD8 op, + PicturePtr pSrc, + PicturePtr pMask, + PicturePtr pDst, + INT16 xSrc, + INT16 ySrc, + INT16 xMask, + INT16 yMask, + INT16 xDst, + INT16 yDst, + CARD16 width, + CARD16 height) +{ + SetupTrident (pDst->pDrawable->pScreen); + tridentScreenInfo(pScreenPriv); + RegionRec region; + int n; + BoxPtr pbox; + CARD32 rgb; + CARD8 *msk, *mskLine; + FbBits *mskBits; + FbStride mskStride; + int mskBpp; + int mskXoff, mskYoff; + CARD32 *src, *srcLine; + CARD32 *off, *offLine; + FbBits *srcBits; + FbStride srcStride; + int srcXoff, srcYoff; + FbStride offStride; + int srcBpp; + int x_msk, y_msk, x_src, y_src, x_dst, y_dst; + int x2; + int w, h, w_this, h_this, w_remain; + CARD32 *off_screen; + int off_size = tridents->off_screen_size >> 2; + int off_width, off_height; + int stride = pScreenPriv->screen->fb[0].pixelStride; + int mskExtra; + CARD32 off_screen_offset = tridents->off_screen - tridents->screen; + int mode; + +#define MODE_NONE 0 +#define MODE_IMAGE 1 +#define MODE_MASK 2 + + rgb = *((CARD32 *) ((PixmapPtr) (pSrc->pDrawable))->devPrivate.ptr); + if (pMask && + !pMask->repeat && + pMask->format == PICT_a8 && + op == PictOpOver && + pSrc->repeat && + pSrc->pDrawable->width == 1 && + pSrc->pDrawable->height == 1 && + PICT_FORMAT_BPP(pSrc->format) == 32 && + (PICT_FORMAT_A(pSrc->format) == 0 || + (rgb & 0xff000000) == 0xff000000) && + pDst->pDrawable->bitsPerPixel == 32 && + pDst->pDrawable->type == DRAWABLE_WINDOW) + { + mode = MODE_MASK; + } + else if (!pMask && + op == PictOpOver && + !pSrc->repeat && + PICT_FORMAT_A(pSrc->format) == 8 && + PICT_FORMAT_BPP(pSrc->format) == 32 && + pDst->pDrawable->bitsPerPixel == 32 && + pDst->pDrawable->type == DRAWABLE_WINDOW) + { + mode = MODE_IMAGE; + } + else + mode = MODE_NONE; + + if (mode != MODE_NONE) + { + xDst += pDst->pDrawable->x; + yDst += pDst->pDrawable->y; + xSrc += pSrc->pDrawable->x; + ySrc += pSrc->pDrawable->y; + + fbGetDrawable (pSrc->pDrawable, srcBits, srcStride, srcBpp, srcXoff, srcYoff); + + if (pMask) + { + xMask += pMask->pDrawable->x; + yMask += pMask->pDrawable->y; + fbGetDrawable (pMask->pDrawable, mskBits, mskStride, mskBpp, mskXoff, mskYoff); + mskStride = mskStride * sizeof (FbBits) / sizeof (CARD8); + } + + if (!miComputeCompositeRegion (®ion, + pSrc, + pMask, + pDst, + xSrc, + ySrc, + xMask, + yMask, + xDst, + yDst, + width, + height)) + return; + + _tridentInit(cop,tridentc); + + cop->multi = COP_MULTI_PATTERN; + cop->src_offset = off_screen_offset; + + if (mode == MODE_IMAGE) + { + cop->multi = (COP_MULTI_ALPHA | + COP_ALPHA_BLEND_ENABLE | + COP_ALPHA_WRITE_ENABLE | + 0x7 << 16 | + COP_ALPHA_DST_BLEND_1_SRC_A | + COP_ALPHA_SRC_BLEND_1); + } + else + { + rgb &= 0xffffff; + cop->multi = (COP_MULTI_ALPHA | + COP_ALPHA_BLEND_ENABLE | + COP_ALPHA_WRITE_ENABLE | + 0x7 << 16 | + COP_ALPHA_DST_BLEND_1_SRC_A | + COP_ALPHA_SRC_BLEND_SRC_A); + } + + n = REGION_NUM_RECTS (®ion); + pbox = REGION_RECTS (®ion); + + while (n--) + { + h = pbox->y2 - pbox->y1; + w = pbox->x2 - pbox->x1; + + offStride = (w + 7) & ~7; + off_height = off_size / offStride; + if (off_height > h) + off_height = h; + + cop->multi = COP_MULTI_STRIDE | (stride << 16) | offStride; + + y_dst = pbox->y1; + y_src = y_dst - yDst + ySrc; + y_msk = y_dst - yDst + yMask; + + x_dst = pbox->x1; + x_src = x_dst - xDst + xSrc; + x_msk = x_dst - xDst + xMask; + + if (mode == MODE_IMAGE) + srcLine = (CARD32 *) srcBits + (y_src - srcYoff) * srcStride + (x_src - srcXoff); + else + mskLine = (CARD8 *) mskBits + (y_msk - mskYoff) * mskStride + (x_msk - mskXoff); + + while (h) + { + h_this = h; + if (h_this > off_height) + h_this = off_height; + h -= h_this; + + offLine = (CARD32 *) tridents->off_screen; + + _tridentWaitDone(cop); + + cop->dst_start_xy = TRI_XY(x_dst, y_dst); + cop->dst_end_xy = TRI_XY(x_dst + w - 1, y_dst + h_this - 1); + cop->src_start_xy = TRI_XY(0,0); + cop->src_end_xy = TRI_XY(w - 1, h_this - 1); + + if (mode == MODE_IMAGE) + { + while (h_this--) + { + w_remain = w; + src = srcLine; + srcLine += srcStride; + off = offLine; + offLine += offStride; + while (w_remain--) + *off++ = *src++; + } + } + else + { + while (h_this--) + { + w_remain = w; + msk = mskLine; + mskLine += mskStride; + off = offLine; + offLine += offStride; + while (w_remain--) + *off++ = rgb | (*msk++ << 24); + } + } + + cop->command = (COP_OP_BLT | + COP_SCL_OPAQUE | + COP_OP_FB); + } + pbox++; + } + cop->src_offset = 0; + + KdMarkSync (pDst->pDrawable->pScreen); + } + else + { + KdCheckComposite (op, + pSrc, + pMask, + pDst, + xSrc, + ySrc, + xMask, + yMask, + xDst, + yDst, + width, + height); + } +} + +KaaScreenPrivRec tridentKaa = { + tridentPrepareSolid, + tridentSolid, + tridentDoneSolid, + + tridentPrepareCopy, + tridentCopy, + tridentDoneCopy, +}; + +Bool +tridentDrawInit (ScreenPtr pScreen) +{ + SetupTrident(pScreen); + tridentScreenInfo(pScreenPriv); + PictureScreenPtr ps = GetPictureScreen(pScreen); + + if (!kaaDrawInit (pScreen, &tridentKaa)) + return FALSE; + + if (ps && tridents->off_screen) + ps->Composite = tridentComposite; + + return TRUE; +} + +void +tridentDrawEnable (ScreenPtr pScreen) +{ + SetupTrident(pScreen); + CARD32 cmd; + CARD32 base; + CARD16 stride; + CARD32 format; + CARD32 alpha; + int tries; + int nwrite; + + stride = pScreenPriv->screen->fb[0].pixelStride; + switch (pScreenPriv->screen->fb[0].bitsPerPixel) { + case 8: + format = COP_DEPTH_8; + break; + case 16: + format = COP_DEPTH_16; + break; + case 24: + format = COP_DEPTH_24_32; + break; + case 32: + format = COP_DEPTH_24_32; + break; + } + /* + * compute a few things which will be set every time the + * accelerator is used; this avoids problems with APM + */ + tridentc->cop_depth = COP_MULTI_DEPTH | format; + tridentc->cop_stride = COP_MULTI_STRIDE | (stride << 16) | (stride); + +#define NUM_TRIES 100000 + for (tries = 0; tries < NUM_TRIES; tries++) + if (!(cop->status & COP_STATUS_BUSY)) + break; + if (cop->status & COP_STATUS_BUSY) + FatalError ("Can't initialize graphics coprocessor"); + cop->multi = COP_MULTI_CLIP_TOP_LEFT; + cop->multi = COP_MULTI_MASK | 0; + cop->src_offset = 0; + cop->dst_offset = 0; + cop->z_offset = 0; + cop->clip_bottom_right = 0x0fff0fff; + + _tridentInit(cop,tridentc); + _tridentSetSolidRect(cop, pScreen->blackPixel, GXcopy, cmd); + _tridentRect (cop, 0, 0, + pScreenPriv->screen->width, pScreenPriv->screen->height, + cmd); + KdMarkSync (pScreen); +} + +void +tridentDrawDisable (ScreenPtr pScreen) +{ +} + +void +tridentDrawFini (ScreenPtr pScreen) +{ +} + +void +tridentDrawSync (ScreenPtr pScreen) +{ + SetupTrident(pScreen); + + _tridentWaitIdleEmpty(cop); +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/trident/tridentdraw.h +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/trident/tridentdraw.h @@ -0,0 +1,72 @@ +/* + * Id: tridentdraw.h,v 1.1 1999/11/02 03:54:47 keithp Exp $ + * + * Copyright © 1999 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/trident/tridentdraw.h,v 1.2 1999/12/30 03:03:18 robin Exp $ */ + +#ifndef _TRIDENTDRAW_H_ +#define _TRIDENTDRAW_H_ + +#define SetupTrident(s) KdScreenPriv(s); \ + tridentCardInfo(pScreenPriv); \ + Cop *cop = tridentc->cop + +#define TridentAlpha (COP_MULTI_ALPHA|COP_ALPHA_WRITE_ENABLE) + +#define _tridentInit(cop,tridentc) { \ + if ((cop)->status == 0xffffffff) tridentSetMMIO(tridentc); \ + (cop)->multi = (tridentc)->cop_depth; \ + (cop)->multi = (tridentc)->cop_stride; \ + (cop)->multi = TridentAlpha; \ +} \ + +#define _tridentSetSolidRect(cop,pix,alu,cmd) {\ + cop->multi = COP_MULTI_PATTERN; \ + cop->multi = COP_MULTI_ROP | tridentRop[alu]; \ + cop->fg = (pix); \ + cmd = COP_OP_BLT | COP_SCL_OPAQUE | COP_OP_ROP | COP_OP_FG; \ +} + +#define _tridentRect(cop,x1,y1,x2,y2,cmd) { \ + (cop)->dst_start_xy = TRI_XY (x1,y1); \ + (cop)->dst_end_xy = TRI_XY(x2,y2); \ + _tridentWaitDone(cop); \ + (cop)->command = (cmd); \ +} + +#define COP_STATUS_BUSY (COP_STATUS_BE_BUSY | \ + COP_STATUS_DPE_BUSY | \ + COP_STATUS_MI_BUSY) + +#define _tridentWaitDone(cop) { \ + int __q__ = 500000; \ + while (__q__-- && (cop)->status & COP_STATUS_BUSY) \ + ; \ + if (!__q__) \ + (cop)->status = 0; \ +} + +#define _tridentWaitIdleEmpty(cop) _tridentWaitDone(cop) + +#define sourceInvarient(alu) (((alu) & 3) == (((alu) >> 2) & 3)) + +#endif --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/fake/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/fake/Makefile.in @@ -124,6 +124,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -202,6 +204,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -314,6 +317,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/Xkdrive.man +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/Xkdrive.man @@ -0,0 +1,77 @@ +.\" $RCSId: xc/programs/Xserver/hw/kdrive/Xkdrive.man,v 1.3 2001/01/24 00:06:10 dawes Exp $ +.\" +.TH Xkdrive 1 __vendorversion__ +.SH NAME +Xkdrive \- tiny X server +.SH SYNOPSIS +.B Xvesa +.RI [ :display ] +.RI [ option ...] + +.B Xfbdev +.RI [ :display ] +.RI [ option ...] + +.B Xigs +.RI [ :display ] +.RI [ option ...] + +.B Xtrident +.RI [ :display ] +.RI [ option ...] + +.B Xsis530 +.RI [ :display ] +.RI [ option ...] + +.B Xtrio +.RI [ :display ] +.RI [ option ...] + +.B Xitsy +.RI [ :display ] +.RI [ option ...] +.SH DESCRIPTION +.B Xkdrive +is a family of X servers designed to be particularly small. This +manual page describes the common functionality of the +.B Xkdrive +servers; for information on a specific X server, please refer to the +relevant manual page. +.SH OPTIONS +In addition to the standard options accepted by all X servers (see +Xserver(1)), all the +.B Xkdrive +servers accept the following options: +.TP 8 +.B -card \fIpcmcia\fP +use pcmcia card as additional screen. +.TP 8 +.B -dumb +disable hardware acceleration. +.TP 8 +.B -origin \fIX\fP,\fIY\fP +Locates the next screen in the Xinerama virtual screen. +.TP 8 +.B -screen \fIwidth\fBx\fIheight\fR[\fBx\fIdepth\fR[\fBx\fIfreq\fR]]\fR[\fB@\fIrotation\fR]\fB +use a screen of the specified \fIwidth\fP, \fIheight\fP, screen \fIdepth\fP, \fIfrequency\fP, and \fIrotation\fP (0, 90, 180 and 270 are legal values). +.TP 8 +.B -softCursor +disable the hardware cursor. +.TP 8 +.B -videoTest +start the server, pause momentarily, and exit. +.TP 8 +.B -zaphod +disable switching screens by moving the pointer across a screen boundary. +.TP 8 +.B -2button +enable emulation of a middle mouse button by chording. +.TP 8 +.B -3button +disable emulation of a middle mouse button by chording. +.SH SEE ALSO +X(__miscmansuffix__), Xserver(1), xdm(1), xinit(1), Xvesa(1), Xfbdev(1). +.SH AUTHORS +The Xkdrive common core was written by Keith Packard, +and is based on the Sample Implementation of X. --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/linux/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/linux/Makefile.in @@ -123,6 +123,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -201,6 +203,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -313,6 +316,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/vxworks/vxkbd.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/vxworks/vxkbd.c @@ -0,0 +1,265 @@ +/* + * Id: vxkbd.c,v 1.1 1999/11/24 08:35:24 keithp Exp $ + * + * Copyright © 1999 Network Computing Devices, Inc. All rights reserved. + * + * Author: Keith Packard + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "kdrive.h" +#include "kkeymap.h" +#include +#include + +#define VXWORKS_WIDTH 2 + +KeySym VxWorksKeymap[] = { +/*7 f1 */ XK_F1, NoSymbol, +/*8 escape */ XK_Escape, NoSymbol, + NoSymbol, NoSymbol, + NoSymbol, NoSymbol, + NoSymbol, NoSymbol, + NoSymbol, NoSymbol, +/*13 tab */ XK_Tab, NoSymbol, +/*14 ` */ XK_grave, XK_asciitilde, +/*15 f2 */ XK_F2, NoSymbol, + NoSymbol, NoSymbol, +/*17 lctrl */ XK_Control_L, NoSymbol, +/*18 lshift */ XK_Shift_L, NoSymbol, + NoSymbol, NoSymbol, +/*20 lock */ XK_Caps_Lock, NoSymbol, +/*21 q */ XK_Q, NoSymbol, +/*22 1 */ XK_1, XK_exclam, +/*23 f3 */ XK_F3, NoSymbol, + NoSymbol, NoSymbol, +/*25 lalt */ XK_Meta_L, XK_Alt_L, +/*26 z */ XK_Z, NoSymbol, +/*27 s */ XK_S, NoSymbol, +/*28 a */ XK_A, NoSymbol, +/*29 w */ XK_W, NoSymbol, +/*30 2 */ XK_2, XK_at, +/*31 f4 */ XK_F4, NoSymbol, + NoSymbol, NoSymbol, +/*33 c */ XK_C, NoSymbol, +/*34 x */ XK_X, NoSymbol, +/*35 d */ XK_D, NoSymbol, +/*36 e */ XK_E, NoSymbol, +/*37 4 */ XK_4, XK_dollar, +/*38 3 */ XK_3, XK_numbersign, +/*39 f5 */ XK_F5, NoSymbol, + NoSymbol, NoSymbol, +/*41 space */ XK_space, NoSymbol, +/*42 v */ XK_V, NoSymbol, +/*43 f */ XK_F, NoSymbol, +/*44 t */ XK_T, NoSymbol, +/*45 r */ XK_R, NoSymbol, +/*46 5 */ XK_5, XK_percent, +/*47 f6 */ XK_F6, NoSymbol, + NoSymbol, NoSymbol, +/*49 n */ XK_N, NoSymbol, +/*50 b */ XK_B, NoSymbol, +/*51 h */ XK_H, NoSymbol, +/*52 g */ XK_G, NoSymbol, +/*53 y */ XK_Y, NoSymbol, +/*54 6 */ XK_6, XK_asciicircum, +/*55 f7 */ XK_F7, NoSymbol, + NoSymbol, NoSymbol, +/*57 ralt */ XK_Meta_R, XK_Alt_R, +/*58 m */ XK_M, NoSymbol, +/*59 j */ XK_J, NoSymbol, +/*60 u */ XK_U, NoSymbol, +/*61 7 */ XK_7, XK_ampersand, +/*62 8 */ XK_8, XK_asterisk, +/*63 f8 */ XK_F8, NoSymbol, + NoSymbol, NoSymbol, +/*65 , */ XK_comma, XK_less, +/*66 k */ XK_K, NoSymbol, +/*67 i */ XK_I, NoSymbol, +/*68 o */ XK_O, NoSymbol, +/*69 0 */ XK_0, XK_parenright, +/*70 9 */ XK_9, XK_parenleft, +/*71 f9 */ XK_F9, NoSymbol, + NoSymbol, NoSymbol, +/*73 . */ XK_period, XK_greater, +/*74 / */ XK_slash, XK_question, +/*75 l */ XK_L, NoSymbol, +/*76 ; */ XK_semicolon, XK_colon, +/*77 p */ XK_P, NoSymbol, +/*78 - */ XK_minus, XK_underscore, +/*79 f10 */ XK_F10, NoSymbol, + NoSymbol, NoSymbol, + NoSymbol, NoSymbol, +/*82 ' */ XK_apostrophe, XK_quotedbl, + NoSymbol, NoSymbol, +/*84 [ */ XK_bracketleft, XK_braceleft, +/*85 = */ XK_equal, XK_plus, +/*86 f11 */ XK_F11, NoSymbol, +/*87 sysrq */ XK_Sys_Req, XK_Print, +/*88 rctrl */ XK_Control_R, NoSymbol, +/*89 rshift */ XK_Shift_R, NoSymbol, +/*90 enter */ XK_Return, NoSymbol, +/*91 ] */ XK_bracketright, XK_braceright, +/*92 \ */ XK_backslash, XK_bar, + NoSymbol, NoSymbol, +/*94 f12 */ XK_F12, NoSymbol, +/*95 scrolllock*/ XK_Scroll_Lock, NoSymbol, +/*96 down */ XK_Down, NoSymbol, +/*97 left */ XK_Left, NoSymbol, +/*98 pause */ XK_Break, XK_Pause, +/*99 up */ XK_Up, NoSymbol, +/*100 delete */ XK_Delete, NoSymbol, +/*101 end */ XK_End, NoSymbol, +/*102 bs */ XK_BackSpace, NoSymbol, +/*103 insert */ XK_Insert, NoSymbol, + NoSymbol, NoSymbol, +/*105 np 1 */ XK_KP_End, XK_KP_1, +/*106 right */ XK_Right, NoSymbol, +/*107 np 4 */ XK_KP_Left, XK_KP_4, +/*108 np 7 */ XK_KP_Home, XK_KP_7, +/*109 pgdn */ XK_Page_Down, NoSymbol, +/*110 home */ XK_Home, NoSymbol, +/*111 pgup */ XK_Page_Up, NoSymbol, +/*112 np 0 */ XK_KP_Insert, XK_KP_0, +/*113 np . */ XK_KP_Delete, XK_KP_Decimal, +/*114 np 2 */ XK_KP_Down, XK_KP_2, +/*115 np 5 */ XK_KP_5, NoSymbol, +/*116 np 6 */ XK_KP_Right, XK_KP_6, +/*117 np 8 */ XK_KP_Up, XK_KP_8, +/*118 numlock */ XK_Num_Lock, NoSymbol, +/*119 np / */ XK_KP_Divide, NoSymbol, + NoSymbol, NoSymbol, +/*121 np enter */ XK_KP_Enter, NoSymbol, +/*122 np 3 */ XK_KP_Page_Down, XK_KP_3, + NoSymbol, NoSymbol, +/*124 np + */ XK_KP_Add, NoSymbol, +/*125 np 9 */ XK_KP_Page_Up, XK_KP_9, +/*126 np * */ XK_KP_Multiply, NoSymbol, + NoSymbol, NoSymbol, + NoSymbol, NoSymbol, + NoSymbol, NoSymbol, + NoSymbol, NoSymbol, + NoSymbol, NoSymbol, +/*132 np - */ XK_KP_Subtract, NoSymbol, + NoSymbol, NoSymbol, + NoSymbol, NoSymbol, + NoSymbol, NoSymbol, + NoSymbol, NoSymbol, + NoSymbol, NoSymbol, + NoSymbol, NoSymbol, +/*139 lwin */ XK_Super_L, NoSymbol, +/*140 rwin */ XK_Super_R, NoSymbol, +/*141 menu */ XK_Menu, NoSymbol, +}; + +void +VxWorksKeyboardLoad (void) +{ + KeySym *k; + + kdMinScanCode = 7; + kdKeymapWidth = VXWORKS_WIDTH; + kdMaxScanCode = 141; + memcpy (kdKeymap, VxWorksKeymap, sizeof (VxWorksKeymap)); +} + +static int kbdFd = -1; + +#include +#include +#include + +extern KeybdCtrl defaultKeyboardControl; + +static void +VxWorksSetAutorepeat (unsigned char *repeats, Bool on) +{ + int i; + unsigned char mask; + int scan_code; + int key_code; + unsigned char realkc; + + if (on) + { + realkc = 1; + ioctl (kbdFd, KBD_ALL_REPEAT, &realkc); + for (scan_code = 7; scan_code <= 141; scan_code++) + { + key_code = scan_code + 1; + i = key_code >> 3; + mask = 1 << (key_code & 7); + if ((repeats[i] & mask) == 0) + { + realkc = scan_code; + ioctl (kbdFd, KBD_NO_REPEAT, &realkc); + } + } + } + else + { + realkc = 0; + ioctl (kbdFd, KBD_ALL_REPEAT, &realkc); + } +} + +int +VxWorksKeyboardInit (void) +{ + + kbdFd = open ("/dev/kbd", O_RDONLY, 0); + if (kbdFd < 0) + ErrorF ("keyboard open failure %d\n", errno); + VxWorksSetAutorepeat (defaultKeyboardControl.autoRepeats, TRUE); + return -1; +} + +void +VxWorksKeyboardFini (int fd) +{ + if (kbdFd >= 0) + { + close (kbdFd); + kbdFd = -1; + } +} + +void +VxWorksKeyboardRead (int fd) +{ +} + +void +VxWorksKeyboardLeds (int leds) +{ + DeviceIntPtr pKeyboard = (DeviceIntPtr) LookupKeyboardDevice (); + KeybdCtrl *ctrl = &pKeyboard->kbdfeed->ctrl; + led_ioctl_info led_info; + int i; + + VxWorksSetAutorepeat (ctrl->autoRepeats, ctrl->autoRepeat); + for (i = 0; i < 3; i++) + { + led_info.bit_n = 1 << i; + led_info.OFF_or_ON = (leds & (1 << i)) != 0; + led_info.reversed = 0; + ioctl (kbdFd, KBD_SET_LED, &led_info); + } +} + +void +VxWorksKeyboardBell (int volume, int frequency, int duration) +{ +} + +KdKeyboardFuncs VxWorksKeyboardFuncs = { + VxWorksKeyboardLoad, + VxWorksKeyboardInit, + VxWorksKeyboardRead, + VxWorksKeyboardLeds, + VxWorksKeyboardBell, + VxWorksKeyboardFini, + 3, +}; --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/vxworks/vxworks.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/vxworks/vxworks.c @@ -0,0 +1,69 @@ +/* + * Id: vxworks.c,v 1.1 1999/11/24 08:35:24 keithp Exp $ + * + * Copyright © 1999 Network Computing Devices, Inc. All rights reserved. + * + * Author: Keith Packard + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "kdrive.h" +#include + +int +VxWorksInit (void) +{ + return 1; +} + +void +VxWorksEnable (void) +{ +} + +Bool +VxWorksSpecialKey (KeySym sym) +{ + switch (sym) { + case XK_Sys_Req: + download(1, "setup", 0); + return TRUE; + case XK_Break: + download(1, "launcher", 0); + return TRUE; + case XK_Delete: + dispatchException |= DE_REBOOT; + return TRUE; + case XK_BackSpace: + dispatchException |= DE_RESET; + return TRUE; + } + return FALSE; +} + +void +VxWorksDisable (void) +{ +} + +void +VxWorksFini (void) +{ +} + +KdOsFuncs VxWorksFuncs = { + VxWorksInit, + VxWorksEnable, + VxWorksSpecialKey, + VxWorksDisable, + VxWorksFini, + 0 +}; + +void +OsVendorInit (void) +{ + KdOsInit (&VxWorksFuncs); +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/vxworks/vxmouse.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/vxworks/vxmouse.c @@ -0,0 +1,124 @@ +/* + * Id: vxmouse.c,v 1.1 1999/11/24 08:35:24 keithp Exp $ + * + * Copyright © 1999 Network Computing Devices, Inc. All rights reserved. + * + * Author: Keith Packard + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#define NEED_EVENTS +#include +#include +#include "inputstr.h" +#include "scrnintstr.h" +#include "kdrive.h" +#include "Xpoll.h" +#include +#include + +static unsigned long mouseState; + +#define BUTTON1 0x01 +#define BUTTON2 0x02 +#define BUTTON3 0x04 + +#include + +static int mouseFd = -1; + +static eventqueue *eventQueue; + +void +VxMouseRead (int mousePort) +{ + Event ev; + int dx, dy; + unsigned long flags; + unsigned long mask; + int n; + + while (eventQueue->head != eventQueue->tail) + { + ev = *eventQueue->head; + if (eventQueue->head >= &eventQueue->events[eventQueue->size-1]) + eventQueue->head = &eventQueue->events[0]; + else + eventQueue->head++; + switch (ev.e_type) { + case E_BUTTON: + switch (ev.e_device) { + case E_MOUSE: + switch (ev.e_key) { + case BUTTON1: + mask = KD_BUTTON_1; + break; + case BUTTON2: + mask = KD_BUTTON_2; + break; + case BUTTON3: + mask = KD_BUTTON_3; + break; + default: + mask = 0; + break; + } + if (ev.e_direction == E_KBUP) + mouseState &= ~mask; + else + mouseState |= mask; + KdEnqueueMouseEvent (mouseState | KD_MOUSE_DELTA, 0, 0); + break; + case E_DKB: + KdEnqueueKeyboardEvent (ev.e_key, ev.e_direction == E_KBUP); + break; + } + break; + case E_MMOTION: + KdEnqueueMouseEvent (mouseState | KD_MOUSE_DELTA, + ev.e_x, ev.e_y); + break; + } + } +} + +int +VxMouseInit (void) +{ + int mousePort; + unsigned long ev_size; + + mouseState = 0; + mousePort = open ("/dev/xdev", O_RDONLY, 0); + if (mousePort < 0) + ErrorF ("event port open failure %d\n", errno); + mouseFd = open ("/dev/mouse", O_RDONLY, 0); + if (mouseFd < 0) + ErrorF ("mouse open failure %d\n", errno); + if (eventQueue == 0) + { + ioctl (mousePort, EVENT_QUEUE_SMSIZE, &ev_size); + eventQueue = (eventqueue *) smem_get ("event", ev_size, (SM_READ|SM_WRITE)); + } + return mousePort; +} + +void +VxMouseFini (int mousePort) +{ + if (mousePort >= 0) + close (mousePort); + if (mouseFd >= 0) + { + close (mouseFd); + mouseFd = -1; + } +} + +KdMouseFuncs VxWorksMouseFuncs = { + VxMouseInit, + VxMouseRead, + VxMouseFini +}; --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/savage/s3clock.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/savage/s3clock.c @@ -0,0 +1,87 @@ +/* + * Id: s3clock.c,v 1.2 1999/11/02 06:16:29 keithp Exp $ + * + * Copyright 1999 SuSE, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of SuSE not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. SuSE makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + * + * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE + * BE LIABLE FOR 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. + * + * Author: Keith Packard, SuSE, Inc. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/savage/s3clock.c,v 1.3 2000/02/23 20:30:02 dawes Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "s3.h" + +/* + * Clock synthesis: + * + * f_out = f_ref * ((M + 2) / ((N + 2) * (1 << R))) + * + * Constraints: + * + * 1. 135MHz <= f_ref * ((M + 2) / (N + 2)) <= 270 MHz + * 2. N >= 1 + * + * Vertical refresh rate = clock / ((hsize + hblank) * (vsize + vblank)) + * Horizontal refresh rate = clock / (hsize + hblank) + */ + +/* all in kHz */ + +void +s3GetClock (int target, int *Mp, int *Np, int *Rp, int maxM, int maxN, int maxR, int minVco) +{ + int M, N, R, bestM, bestN; + int f_vco, f_out; + int err, abserr, besterr; + + /* + * Compute correct R value to keep VCO in range + */ + for (R = 0; R <= maxR; R++) + { + f_vco = target * (1 << R); + if (f_vco >= minVco) + break; + } + + /* M = f_out / f_ref * ((N + 2) * (1 << R)); */ + besterr = target; + for (N = 1; N <= maxN; N++) + { + M = ((target * (N + 2) * (1 << R) + (S3_CLOCK_REF/2)) + S3_CLOCK_REF/2) / S3_CLOCK_REF - 2; + if (0 <= M && M <= maxM) + { + f_out = S3_CLOCK(M,N,R); + err = target - f_out; + if (err < 0) + err = -err; + if (err < besterr) + { + besterr = err; + bestM = M; + bestN = N; + } + } + } + *Mp = bestM; + *Np = bestN; + *Rp = R; +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/savage/s3.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/savage/s3.c @@ -0,0 +1,1838 @@ +/* + * Id: s3.c,v 1.3 1999/11/02 08:17:24 keithp Exp $ + * + * Copyright 1999 SuSE, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of SuSE not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. SuSE makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + * + * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE + * BE LIABLE FOR 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. + * + * Author: Keith Packard, SuSE, Inc. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/savage/s3.c,v 1.4 2000/05/06 22:17:44 keithp Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "s3.h" + +#define REGISTERS_OFFSET (0x1000000) +#define PACKED_OFFSET (0x8100) +#define IOMAP_OFFSET (0x8000) + +#define S3_MIN_CLOCK 250000 + +static void +_s3SetBlank (S3Ptr s3, S3Vga *s3vga, Bool blank) +{ + CARD8 clock_mode; + + s3SetImm(s3vga, s3_screen_off, blank ? 1 : 0); +} + +Bool +s3CardInit (KdCardInfo *card) +{ + S3CardInfo *s3c; + S3Ptr s3; + S3Vga *s3vga; + int size; + CARD8 *registers; + CARD32 s3FrameBuffer; + CARD32 s3Registers; + CARD8 *temp_buffer; + CARD32 max_memory; + VGA32 save_linear_window_size; + VGA32 save_enable_linear; + VGA32 save_register_lock_2; + VGA32 save_misc_output; + + s3c = (S3CardInfo *) xalloc (sizeof (S3CardInfo)); + if (!s3c) + { + goto bail0; + } + + memset (s3c, '\0', sizeof (S3CardInfo)); + + card->driver = s3c; + +#ifdef VXWORKS + s3c->bios_initialized = 0; +#else + s3c->bios_initialized = 1; +#endif + + if (card->attr.naddr > 1 && card->attr.address[1]) + { + s3FrameBuffer = card->attr.address[1]; + s3Registers = card->attr.address[0]; + max_memory = 32 * 1024 * 1024; + } + else + { + s3FrameBuffer = card->attr.address[0]; + s3Registers = s3FrameBuffer + REGISTERS_OFFSET; + max_memory = 16 * 1024 * 1024; + } + +#ifdef DEBUG + fprintf (stderr, "S3 at 0x%x/0x%x\n", s3Registers, s3FrameBuffer); +#endif + registers = KdMapDevice (s3Registers, + sizeof (S3) + PACKED_OFFSET); + if (!registers) + { + ErrorF ("Can't map s3 device\n"); + goto bail2; + } + s3 = (S3Ptr) (registers + PACKED_OFFSET); + s3c->registers = registers; + s3c->s3 = s3; + + s3vga = &s3c->s3vga; + s3RegInit (s3vga, (VGAVOL8 *) (registers + IOMAP_OFFSET)); + + if (!s3c->bios_initialized) + { + volatile CARD32 *wakeup; + + wakeup = (volatile CARD32 *) (registers + 0x8510); + ErrorF ("Wakeup S3 chip at 0x%x\n", wakeup); + ErrorF ("Wakeup was 0x%x\n", *wakeup); + /* wakeup the chip */ + *(volatile CARD32 *) (registers + 0x8510) = 1; + ErrorF ("Wakeup is 0x%x\n", *wakeup); + } + s3Set (s3vga, s3_io_addr_select, 1); + s3Set (s3vga, s3_enable_ram, 1); + VgaFlush (&s3vga->card); + + save_register_lock_2 = s3Get (s3vga, s3_register_lock_2); + s3SetImm (s3vga, s3_register_lock_2, 0xa0); + save_linear_window_size = s3Get (s3vga, s3_linear_window_size); + save_enable_linear = s3Get (s3vga, s3_enable_linear); + s3Set (s3vga, s3_linear_window_size, 3); + s3Set (s3vga, s3_enable_linear, 1); + VgaFlush (&s3vga->card); + VgaFinish (&s3vga->card); + + /* + * Can't trust S3 register value for frame buffer amount, must compute + */ + temp_buffer = KdMapDevice (s3FrameBuffer, max_memory); + + s3c->memory = KdFrameBufferSize (temp_buffer, max_memory); + + s3Set (s3vga, s3_linear_window_size, save_linear_window_size); + s3Set (s3vga, s3_enable_linear, save_enable_linear); + VgaFlush (&s3vga->card); + s3SetImm (s3vga, s3_register_lock_2, save_register_lock_2); + VgaFinish (&s3vga->card); +#ifdef DEBUG + fprintf (stderr, "Frame buffer 0x%x\n", s3c->memory); +#endif + KdUnmapDevice (temp_buffer, max_memory); + + if (!s3c->memory) + { + ErrorF ("Can't detect s3 frame buffer at 0x%x\n", s3FrameBuffer); + goto bail3; + } + + s3c->frameBuffer = KdMapDevice (s3FrameBuffer, s3c->memory); + if (!s3c->frameBuffer) + { + ErrorF ("Can't map s3 frame buffer\n"); + goto bail3; + } + + card->driver = s3c; + + return TRUE; +bail3: + KdUnmapDevice ((void *) s3, sizeof (S3)); +bail2: +bail1: + xfree (s3c); +bail0: + return FALSE; +} + +Bool +s3ModeSupported (KdScreenInfo *screen, + const KdMonitorTiming *t) +{ + if (screen->fb[1].depth) + { + /* + * Must have at least one true color stream + */ + if (screen->fb[0].depth <= 8 && + screen->fb[1].depth <= 8) + return FALSE; + } + /* make sure the clock isn't too fast */ + if (t->clock > S3_MAX_CLOCK * 2) + return FALSE; + /* width must be a multiple of 16 */ + if (t->horizontal & 0xf) + return FALSE; + return TRUE; +} + +Bool +s3ModeUsable (KdScreenInfo *screen) +{ + KdCardInfo *card = screen->card; + S3CardInfo *s3c = (S3CardInfo *) card->driver; + int screen_size; + int pixel_width; + int byte_width; + int fb; + + screen_size = 0; + for (fb = 0; fb < KD_MAX_FB && screen->fb[fb].depth; fb++) + { + if (screen->fb[fb].depth >= 24) + { + screen->fb[fb].depth = 24; + if (screen->fb[fb].bitsPerPixel != 24) + screen->fb[fb].bitsPerPixel = 32; + } + else if (screen->fb[fb].depth >= 16) + { + screen->fb[fb].depth = 16; + screen->fb[fb].bitsPerPixel = 16; + } + else if (screen->fb[fb].depth >= 15) + { + screen->fb[fb].depth = 15; + screen->fb[fb].bitsPerPixel = 16; + } + else + { + screen->fb[fb].depth = 8; + screen->fb[fb].bitsPerPixel = 8; + } + + /* + * SGRAM requires stride % 64 == 0 + */ + screen->fb[fb].pixelStride = (screen->width + 63) & ~63; + screen->fb[fb].byteStride = screen->fb[fb].pixelStride * (screen->fb[fb].bitsPerPixel >> 3); + screen_size += screen->fb[fb].byteStride * screen->height; + } + + return screen_size <= s3c->memory; +} + +Bool +s3ScreenInit (KdScreenInfo *screen) +{ + KdCardInfo *card = screen->card; + S3CardInfo *s3c = (S3CardInfo *) card->driver; + S3ScreenInfo *s3s; + int memory; + int requested_memory; + int v_total, h_total; + int m, n, r; + int i; + const KdMonitorTiming *t; + int screen_size; + int fb; + int ma; + + s3s = (S3ScreenInfo *) xalloc (sizeof (S3ScreenInfo)); + if (!s3s) + return FALSE; + + memset (s3s, '\0', sizeof (S3ScreenInfo)); + +#ifdef PHOENIX + screen->width = 1152; + screen->height = 900; + screen->rate = 85; + screen->depth = 32; +#endif + if (!screen->width || !screen->height) + { + screen->width = 800; + screen->height = 600; + screen->rate = 72; + } + if (!screen->fb[0].depth) + screen->fb[0].depth = 8; + + t = KdFindMode (screen, s3ModeSupported); + screen->rate = t->rate; + screen->width = t->horizontal; + screen->height = t->vertical; + s3GetClock (t->clock, &m, &n, &r, 511, 127, 4, 250000); +#ifdef DEBUG + fprintf (stderr, "computed %d,%d,%d (%d)\n", + m, n, r, S3_CLOCK(m,n,r)); +#endif +#if 0 + /* + * Can only operate in pixel-doubled mode at 8 or 16 bits per pixel + */ + if (screen->depth > 16 && S3_CLOCK(m,n,r) > S3_MAX_CLOCK) + screen->depth = 16; +#endif + + if (!KdTuneMode (screen, s3ModeUsable, s3ModeSupported)) + { + xfree (s3s); + return FALSE; + } + + s3s->fbmap[2] = -1; + if (screen->fb[1].depth) + { + if (screen->fb[0].bitsPerPixel >= 16) + { + s3s->fbmap[0] = 1; + s3s->fbmap[1] = 0; + } + else + { + s3s->fbmap[0] = 0; + s3s->fbmap[1] = 1; + } + } + else + { + s3s->fbmap[0] = 0; + s3s->fbmap[1] = -1; + } + + screen_size = 0; + for (fb = 0; fb < KD_MAX_FB && screen->fb[fb].depth; fb++) + screen_size += screen->fb[fb].byteStride * screen->height; + + memory = s3c->memory - screen_size; + + /* + * Stick cursor at end of memory + */ + if (memory >= 2048) + { + s3s->cursor_base = s3c->frameBuffer + (s3c->memory - 2048); + memory -= 2048; + } + else + s3s->cursor_base = 0; + + screen_size = 0; + for (ma = 0; s3s->fbmap[ma] >= 0; ma++) + { + fb = s3s->fbmap[ma]; + screen->fb[fb].frameBuffer = s3c->frameBuffer + screen_size; + screen_size += screen->fb[fb].byteStride * screen->height; + + REGION_INIT(pScreen, (&s3s->region[fb]), NullBox, 0); + if (screen->fb[fb].bitsPerPixel == 8) + s3s->fb[ma].chroma_key = 0xff; + else + s3s->fb[ma].chroma_key = 0; + + /* + * Use remaining memory for off-screen storage, but only use + * one piece (either right or bottom). + */ + if (memory >= screen->fb[fb].byteStride * S3_TILE_SIZE) + { + s3s->fb[ma].offscreen = screen->fb[fb].frameBuffer; + s3s->fb[ma].offscreen_x = 0; + s3s->fb[ma].offscreen_y = screen->height; + s3s->fb[ma].offscreen_width = screen->fb[fb].pixelStride; + s3s->fb[ma].offscreen_height = S3_TILE_SIZE; + memory -= s3s->fb[ma].offscreen_height * screen->fb[fb].byteStride; + screen_size += s3s->fb[ma].offscreen_height * screen->fb[fb].byteStride; + } + else + s3s->fb[ma].offscreen = 0; + + switch (screen->fb[fb].depth) { + case 8: + screen->fb[fb].visuals = ((1 << StaticGray) | + (1 << GrayScale) | + (1 << StaticColor) | + (1 << PseudoColor) | + (1 << TrueColor) | + (1 << DirectColor)); + screen->fb[fb].blueMask = 0x00; + screen->fb[fb].greenMask = 0x00; + screen->fb[fb].redMask = 0x00; + break; + case 15: + screen->fb[fb].visuals = (1 << TrueColor); + screen->fb[fb].blueMask = 0x001f; + screen->fb[fb].greenMask = 0x03e0; + screen->fb[fb].redMask = 0x7c00; + break; + case 16: + screen->fb[fb].visuals = (1 << TrueColor); + screen->fb[fb].blueMask = 0x001f; + screen->fb[fb].greenMask = 0x07e0; + screen->fb[fb].redMask = 0xf800; + break; + case 24: + screen->fb[fb].visuals = (1 << TrueColor); + screen->fb[fb].blueMask = 0x0000ff; + screen->fb[fb].greenMask = 0x00ff00; + screen->fb[fb].redMask = 0xff0000; + break; + } + } + + screen->driver = s3s; + + return TRUE; +} + +typedef struct _biosInit { + VGA16 reg; + VGA8 value; +} s3BiosInit; + +s3BiosInit s3BiosReg[] = { + S3_SR +0x15, 0x23, + S3_MISC_OUT, 0x2f, + 0xffff, 1, + S3_SR +0x15, 0x03, + + S3_SR + 0x0, 0x03, + S3_SR + 0x1, 0x00, + S3_SR + 0x2, 0x03, + S3_SR + 0x3, 0x00, + S3_SR + 0x4, 0x02, + S3_SR + 0x5, 0x05, + S3_SR + 0x6, 0x06, + S3_SR + 0x7, 0x07, +/* S3_SR + 0x8, 0x06, */ + S3_SR + 0x9, 0x00, + S3_SR + 0xa, 0x0a, + S3_SR + 0xb, 0x00, + S3_SR + 0xc, 0x0c, + S3_SR + 0xd, 0x00, + S3_SR + 0xe, 0x0e, + S3_SR + 0xf, 0x0f, + +/* S3_SR +0x10, 0x00, */ +/* S3_SR +0x11, 0x0c, */ + S3_SR +0x12, 0x01, + S3_SR +0x13, 0x52, + S3_SR +0x14, 0x00, + +/* S3_SR +0x15, 0x03, */ + + S3_SR +0x16, 0xc5, + S3_SR +0x17, 0xfc, + S3_SR +0x18, 0x40, + S3_SR +0x19, 0x00, + S3_SR +0x1a, 0x01, + S3_SR +0x1b, 0x02, + S3_SR +0x1c, 0x5d, + S3_SR +0x1d, 0x00, + S3_SR +0x1e, 0x00, + S3_SR +0x1f, 0x00, + S3_SR +0x20, 0x20, + S3_SR +0x21, 0x21, + S3_SR +0x22, 0x22, + S3_SR +0x23, 0x23, + S3_SR +0x24, 0x24, + S3_SR +0x25, 0x25, + S3_SR +0x26, 0x26, + S3_SR +0x27, 0x04, + S3_SR +0x28, 0xff, + S3_SR +0x29, 0x00, + S3_SR +0x2a, 0x2a, + S3_SR +0x2b, 0x2b, + S3_SR +0x2c, 0x2c, + S3_SR +0x2d, 0x2d, + S3_SR +0x2e, 0x2e, + S3_SR +0x2f, 0x2f, + S3_SR +0x30, 0x00, + S3_SR +0x31, 0x06, + S3_SR +0x32, 0x41, + S3_SR +0x33, 0x67, + S3_SR +0x34, 0x00, + S3_SR +0x35, 0x00, + S3_SR +0x36, 0x01, + S3_SR +0x37, 0x52, + S3_SR +0x38, 0x5d, + S3_SR +0x39, 0x05, + S3_SR +0x3a, 0x3a, + S3_SR +0x3b, 0x3b, + S3_SR +0x3c, 0x3c, + S3_SR +0x3d, 0x00, + S3_SR +0x3e, 0x3e, + S3_SR +0x3f, 0x00, + S3_SR +0x40, 0x40, + S3_SR +0x41, 0x41, + S3_SR +0x42, 0x42, + S3_SR +0x43, 0x43, + S3_SR +0x44, 0x44, + S3_SR +0x45, 0x45, + S3_SR +0x46, 0x46, + S3_SR +0x47, 0x47, + S3_SR +0x48, 0x48, + S3_SR +0x49, 0x49, + S3_SR +0x4a, 0x4a, + S3_SR +0x4b, 0x4b, + S3_SR +0x4c, 0x4c, + S3_SR +0x4d, 0x4d, + S3_SR +0x4e, 0x4e, + S3_SR +0x4f, 0x4f, + S3_SR +0x50, 0x00, + S3_SR +0x51, 0x00, + S3_SR +0x52, 0x00, + S3_SR +0x53, 0x00, + S3_SR +0x54, 0x00, + S3_SR +0x55, 0x00, + S3_SR +0x56, 0x00, + S3_SR +0x57, 0x00, + S3_SR +0x58, 0x00, + S3_SR +0x59, 0x70, + S3_SR +0x5a, 0x38, + S3_SR +0x5b, 0x08, + S3_SR +0x5c, 0x77, + S3_SR +0x5d, 0x77, + S3_SR +0x5e, 0x00, + S3_SR +0x5f, 0x00, + S3_SR +0x60, 0xff, + S3_SR +0x61, 0xbf, + S3_SR +0x62, 0xff, + S3_SR +0x63, 0xff, + S3_SR +0x64, 0xf7, + S3_SR +0x65, 0xff, + S3_SR +0x66, 0xff, + S3_SR +0x67, 0xff, + S3_SR +0x68, 0xff, + S3_SR +0x69, 0xff, + S3_SR +0x6a, 0xff, + S3_SR +0x6b, 0xff, + S3_SR +0x6c, 0xff, + S3_SR +0x6d, 0xff, + S3_SR +0x6e, 0x9b, + S3_SR +0x6f, 0xbf, + + S3_AR + 0x00, 0x00, + S3_AR + 0x01, 0x01, + S3_AR + 0x02, 0x02, + S3_AR + 0x03, 0x03, + S3_AR + 0x04, 0x04, + S3_AR + 0x05, 0x05, + S3_AR + 0x06, 0x06, + S3_AR + 0x07, 0x07, + S3_AR + 0x08, 0x08, + S3_AR + 0x09, 0x09, + S3_AR + 0x0a, 0x0a, + S3_AR + 0x0b, 0x0b, + S3_AR + 0x0c, 0x0c, + S3_AR + 0x0d, 0x0d, + S3_AR + 0x0e, 0x0e, + S3_AR + 0x0f, 0x0f, + S3_AR + 0x10, 0x05, + S3_AR + 0x11, 0x00, + S3_AR + 0x12, 0x0f, + S3_AR + 0x13, 0x08, + S3_AR + 0x14, 0x00, + + S3_GR + 0x00, 0x00, + S3_GR + 0x01, 0x00, + S3_GR + 0x02, 0x00, + S3_GR + 0x03, 0x00, + S3_GR + 0x04, 0x00, + S3_GR + 0x05, 0x10, + S3_GR + 0x06, 0x0e, + S3_GR + 0x07, 0x00, + + S3_CR + 0x00, 0x5f, + S3_CR + 0x01, 0x4f, + S3_CR + 0x02, 0x50, + S3_CR + 0x03, 0x82, + S3_CR + 0x04, 0x55, + S3_CR + 0x05, 0x81, + S3_CR + 0x06, 0xbf, + S3_CR + 0x07, 0x1f, + S3_CR + 0x08, 0x00, + S3_CR + 0x09, 0x4f, + S3_CR + 0x0a, 0x0d, + S3_CR + 0x0b, 0x0e, + S3_CR + 0x0c, 0x00, + S3_CR + 0x0d, 0x00, + S3_CR + 0x0e, 0x3f, + S3_CR + 0x0f, 0xff, + S3_CR + 0x10, 0x9c, + S3_CR + 0x11, 0x0e, + S3_CR + 0x12, 0x8f, + S3_CR + 0x13, 0x28, + S3_CR + 0x14, 0x1f, + S3_CR + 0x15, 0x96, + S3_CR + 0x16, 0xb9, + S3_CR + 0x17, 0xa3, + S3_CR + 0x18, 0xff, + S3_CR + 0x19, 0xdf, + S3_CR + 0x1a, 0xdf, + S3_CR + 0x1b, 0xdf, + S3_CR + 0x1c, 0xdf, + S3_CR + 0x1d, 0xdf, + S3_CR + 0x1e, 0xdf, + S3_CR + 0x1f, 0xdf, + S3_CR + 0x20, 0xdf, + S3_CR + 0x21, 0x00, +/* S3_CR + 0x22, 0x07, */ + S3_CR + 0x23, 0x00, + S3_CR + 0x24, 0xdf, + S3_CR + 0x25, 0xdf, + S3_CR + 0x26, 0x00, + S3_CR + 0x27, 0xdf, + S3_CR + 0x28, 0xdf, + S3_CR + 0x29, 0xdf, + S3_CR + 0x2a, 0xdf, + S3_CR + 0x2b, 0xdf, + S3_CR + 0x2c, 0xdf, + S3_CR + 0x2d, 0x8a, + S3_CR + 0x2e, 0x22, + S3_CR + 0x2f, 0x02, + S3_CR + 0x30, 0xe1, + S3_CR + 0x31, 0x05, + S3_CR + 0x32, 0x40, + S3_CR + 0x33, 0x08, + S3_CR + 0x34, 0x00, + S3_CR + 0x35, 0x00, + S3_CR + 0x36, 0xbf, + S3_CR + 0x37, 0x9b, +/* S3_CR + 0x38, 0x7b, */ +/* S3_CR + 0x39, 0xb8, */ + S3_CR + 0x3a, 0x45, + S3_CR + 0x3b, 0x5a, + S3_CR + 0x3c, 0x10, + S3_CR + 0x3d, 0x00, + S3_CR + 0x3e, 0xfd, + S3_CR + 0x3f, 0x00, + S3_CR + 0x40, 0x00, + S3_CR + 0x41, 0x92, + S3_CR + 0x42, 0xc0, + S3_CR + 0x43, 0x68, + S3_CR + 0x44, 0xff, + S3_CR + 0x45, 0xe8, + S3_CR + 0x46, 0xff, + S3_CR + 0x47, 0xff, + S3_CR + 0x48, 0xf8, + S3_CR + 0x49, 0xff, + S3_CR + 0x4a, 0xfe, + S3_CR + 0x4b, 0xff, + S3_CR + 0x4c, 0xff, + S3_CR + 0x4d, 0xff, + S3_CR + 0x4e, 0xff, + S3_CR + 0x4f, 0xff, + S3_CR + 0x50, 0x00, + S3_CR + 0x51, 0x00, + S3_CR + 0x52, 0x00, + S3_CR + 0x53, 0x00, + S3_CR + 0x54, 0x00, + S3_CR + 0x55, 0x00, + S3_CR + 0x56, 0x00, + S3_CR + 0x57, 0x00, +#if 0 + S3_CR + 0x58, 0x00, + S3_CR + 0x59, 0xf0, +#endif + S3_CR + 0x5a, 0x00, + S3_CR + 0x5b, 0x00, +#if 0 + S3_CR + 0x5c, 0x00, +#endif + S3_CR + 0x5d, 0x00, + S3_CR + 0x5e, 0x00, + S3_CR + 0x5f, 0x00, + S3_CR + 0x60, 0x09, + S3_CR + 0x61, 0x9d, + S3_CR + 0x62, 0xff, + S3_CR + 0x63, 0x00, + S3_CR + 0x64, 0xfd, + S3_CR + 0x65, 0x04, + S3_CR + 0x66, 0x88, + S3_CR + 0x67, 0x00, + S3_CR + 0x68, 0x7f, + S3_CR + 0x69, 0x00, + S3_CR + 0x6a, 0x00, + S3_CR + 0x6b, 0x00, + S3_CR + 0x6c, 0x00, + S3_CR + 0x6d, 0x11, + S3_CR + 0x6e, 0xff, + S3_CR + 0x6f, 0xfe, + + S3_CR + 0x70, 0x30, + S3_CR + 0x71, 0xc0, + S3_CR + 0x72, 0x07, + S3_CR + 0x73, 0x1f, + S3_CR + 0x74, 0x1f, + S3_CR + 0x75, 0x1f, + S3_CR + 0x76, 0x0f, + S3_CR + 0x77, 0x1f, + S3_CR + 0x78, 0x01, + S3_CR + 0x79, 0x01, + S3_CR + 0x7a, 0x1f, + S3_CR + 0x7b, 0x1f, + S3_CR + 0x7c, 0x17, + S3_CR + 0x7d, 0x17, + S3_CR + 0x7e, 0x17, + S3_CR + 0x7f, 0xfd, + S3_CR + 0x80, 0x00, + S3_CR + 0x81, 0x92, + S3_CR + 0x82, 0x10, + S3_CR + 0x83, 0x07, + S3_CR + 0x84, 0x42, + S3_CR + 0x85, 0x00, + S3_CR + 0x86, 0x00, + S3_CR + 0x87, 0x00, + S3_CR + 0x88, 0x10, + S3_CR + 0x89, 0xfd, + S3_CR + 0x8a, 0xfd, + S3_CR + 0x8b, 0xfd, + S3_CR + 0x8c, 0xfd, + S3_CR + 0x8d, 0xfd, + S3_CR + 0x8e, 0xfd, + S3_CR + 0x8f, 0xfd, + S3_CR + 0x90, 0x00, + S3_CR + 0x91, 0x4f, + S3_CR + 0x92, 0x10, + S3_CR + 0x93, 0x00, + S3_CR + 0x94, 0xfd, + S3_CR + 0x95, 0xfd, + S3_CR + 0x96, 0xfd, + S3_CR + 0x97, 0xfd, + S3_CR + 0x98, 0xfd, + S3_CR + 0x99, 0xff, + S3_CR + 0x9a, 0xfd, + S3_CR + 0x9b, 0xff, + S3_CR + 0x9c, 0xfd, + S3_CR + 0x9d, 0xfd, + S3_CR + 0x9e, 0xfd, + S3_CR + 0x9f, 0xff, + S3_CR + 0xa0, 0x0f, +#if 0 + S3_CR + 0xa1, 0x00, + S3_CR + 0xa2, 0x00, + S3_CR + 0xa3, 0x00, + S3_CR + 0xa4, 0x55, +#endif + S3_CR + 0xa5, 0x09, + S3_CR + 0xa6, 0x20, +#if 0 + S3_CR + 0xa7, 0x00, + S3_CR + 0xa8, 0x00, + S3_CR + 0xa9, 0x00, + S3_CR + 0xaa, 0x00, + S3_CR + 0xab, 0x00, + S3_CR + 0xac, 0x00, + S3_CR + 0xad, 0x00, + S3_CR + 0xae, 0x00, + S3_CR + 0xaf, 0x00, + S3_CR + 0xb0, 0xff, +#endif + S3_CR + 0xb1, 0x0e, +#if 0 + S3_CR + 0xb2, 0x55, + S3_CR + 0xb3, 0x00, + S3_CR + 0xb4, 0x55, + S3_CR + 0xb5, 0x00, + S3_CR + 0xb6, 0x00, +#endif + S3_CR + 0xb7, 0x84, +#if 0 + S3_CR + 0xb8, 0xff, + S3_CR + 0xb9, 0xff, + S3_CR + 0xba, 0xff, + S3_CR + 0xbb, 0xff, + S3_CR + 0xbc, 0xff, + S3_CR + 0xbd, 0xff, + S3_CR + 0xbe, 0xff, + S3_CR + 0xbf, 0xff, +#endif + + S3_SR +0x15, 0x23, + 0xffff, 1, + S3_SR +0x15, 0x03, + 0xffff, 1, +}; + +#define S3_NUM_BIOS_REG (sizeof (s3BiosReg) / sizeof (s3BiosReg[0])) + +typedef struct _bios32Init { + VGA16 offset; + VGA32 value; +} s3Bios32Init; + +s3Bios32Init s3Bios32Reg[] = { + 0x8168, 0x00000000, + 0x816c, 0x00000001, + 0x8170, 0x00000000, + 0x8174, 0x00000000, + 0x8178, 0x00000000, + 0x817c, 0x00000000, +#if 0 + 0x8180, 0x00140000, + 0x8184, 0x00000000, + 0x8188, 0x00000000, + 0x8190, 0x00000000, + 0x8194, 0x00000000, + 0x8198, 0x00000000, + 0x819c, 0x00000000, + 0x81a0, 0x00000000, +#endif + 0x81c0, 0x00000000, + 0x81c4, 0x01fbffff, + 0x81c8, 0x00f7ffbf, + 0x81cc, 0x00f7ff00, + 0x81d0, 0x11ffff7f, + 0x81d4, 0x7fffffdf, + 0x81d8, 0xfdfff9ff, + 0x81e0, 0xfd000000, + 0x81e4, 0x00000000, + 0x81e8, 0x00000000, + 0x81ec, 0x00010000, + 0x81f0, 0x07ff057f, + 0x81f4, 0x07ff07ff, + 0x81f8, 0x00000000, + 0x81fc, 0x00000000, + 0x8200, 0x00000000, + 0x8204, 0x00000000, + 0x8208, 0x33000000, + 0x820c, 0x7f000000, + 0x8210, 0x80000000, + 0x8214, 0x00000000, + 0x8218, 0xffffffff, + 0x8300, 0xff007fef, + 0x8304, 0xfffdf7bf, + 0x8308, 0xfdfffbff, +}; + +#define S3_NUM_BIOS32_REG (sizeof (s3Bios32Reg) / sizeof (s3Bios32Reg[0])) + +/* + * Initialize the card precisely as the bios does + */ +s3DoBiosInit (KdCardInfo *card) +{ + S3CardInfo *s3c = card->driver; + CARD32 *regs = (CARD32 *) s3c->registers; + S3Vga *s3vga = &s3c->s3vga; + int r; + + for (r = 0; r < S3_NUM_BIOS_REG; r++) + { + if (s3BiosReg[r].reg == 0xffff) + sleep (s3BiosReg[r].value); + else + VgaStore (&s3vga->card, s3BiosReg[r].reg, s3BiosReg[r].value); + } + VgaStore (&s3vga->card, S3_SR+0x10, 0x22); + VgaStore (&s3vga->card, S3_SR+0x11, 0x44); + VgaStore (&s3vga->card, S3_SR+0x15, 0x01); + sleep (1); + VgaStore (&s3vga->card, S3_SR+0x15, 0x03); + VgaStore (&s3vga->card, S3_CR+0x6f, 0xff); + VgaStore (&s3vga->card, S3_CR+0x3f, 0x3f); + sleep (1); + VgaStore (&s3vga->card, S3_CR+0x3f, 0x00); + VgaStore (&s3vga->card, S3_CR+0x6f, 0xfe); + VgaInvalidate (&s3vga->card); + for (r = 0; r < S3_NUM_BIOS32_REG; r++) + regs[s3Bios32Reg[r].offset/4] = s3Bios32Reg[r].value; +} + +void +s3Preserve (KdCardInfo *card) +{ + S3CardInfo *s3c = card->driver; + S3Ptr s3 = s3c->s3; + S3Vga *s3vga = &s3c->s3vga; + S3Save *save = &s3c->save; + CARD8 t1, t2; + CARD8 *cursor_base; + CARD8 streams_mode; + + s3Save (s3vga); + if (!s3c->bios_initialized) + s3DoBiosInit (card); + + _s3SetBlank (s3, s3vga, TRUE); + /* + * Preserve the first part of the frame buffer which holds + * the text mode fonts and data + */ + s3Set (s3vga, s3_linear_window_size, 3); + s3Set (s3vga, s3_enable_linear, 1); + VgaFlush (&s3vga->card); + memcpy (save->text_save, s3c->frameBuffer, S3_TEXT_SAVE); + /* + * Preserve graphics engine state + */ + save->alt_mix = s3->alt_mix; + save->write_mask = s3->write_mask; + save->fg = s3->fg; + save->bg = s3->bg; + /* + * Preserve streams processor state + */ + streams_mode = s3Get (s3vga, s3_streams_mode); + s3SetImm (s3vga, s3_streams_mode, 3); + save->global_bitmap_1 = s3->global_bitmap_1; + save->global_bitmap_2 = s3->global_bitmap_2; + save->adv_func_cntl = s3->adv_func_cntl; + save->primary_bitmap_1 = s3->primary_bitmap_1; + save->primary_bitmap_2 = s3->primary_bitmap_2; + save->secondary_bitmap_1 = s3->secondary_bitmap_1; + save->secondary_bitmap_2 = s3->secondary_bitmap_2; + save->primary_stream_control = s3->primary_stream_control; + save->blend_control = s3->blend_control; + save->primary_stream_addr_0 = s3->primary_stream_addr_0; + save->primary_stream_addr_1 = s3->primary_stream_addr_1; + save->primary_stream_stride = s3->primary_stream_stride; + save->primary_stream_xy = s3->primary_stream_xy; + save->primary_stream_size = s3->primary_stream_size; + save->primary_stream_mem = s3->primary_stream_mem; + save->secondary_stream_xy = s3->secondary_stream_xy; + save->secondary_stream_size = s3->secondary_stream_size; + save->streams_fifo = s3->streams_fifo; + s3SetImm (s3vga, s3_streams_mode, streams_mode); + _s3SetBlank (s3, s3vga, FALSE); +} + +/* + * Enable the card for rendering. Manipulate the initial settings + * of the card here. + */ +int s3CpuTimeout, s3AccelTimeout; + +void +s3SetGlobalBitmap (ScreenPtr pScreen, int ma) +{ + KdScreenPriv(pScreen); + s3ScreenInfo (pScreenPriv); + + if (s3s->current_ma != ma) + { + s3CardInfo (pScreenPriv); + S3Vga *s3vga = &s3c->s3vga; + S3Ptr s3 = s3c->s3; + CARD32 gb1, gb2; + int depth; + int length; + KdCheckSync (pScreen); + switch (s3s->fb[ma].accel_bpp) { + case 8: + case 24: + length = 0; + break; + case 16: + length = 1; + break; + case 32: + length = 3; + break; + } + s3SetImm (s3vga, s3_pixel_length, length); + gb1 = s3s->fb[ma].bitmap_offset; + gb2 = ((1 << 0) | + (0 << 2) | + (1 << 3) | + ((s3s->fb[ma].accel_stride >> 4) << 4) | + (s3s->fb[ma].accel_bpp << 16) | + (0 << 24) | + (1 << 28)); + s3->global_bitmap_1 = gb1; + s3->global_bitmap_2 = gb2; + s3->global_bitmap_2 = gb2; + s3s->current_ma = ma; + } +} + +Bool +s3Enable (ScreenPtr pScreen) +{ + KdScreenPriv(pScreen); + KdCardInfo *card = pScreenPriv->card; + KdScreenInfo *screen = pScreenPriv->screen; + s3CardInfo (pScreenPriv); + s3ScreenInfo (pScreenPriv); + + S3Vga *s3vga = &s3c->s3vga; + S3Ptr s3 = s3c->s3; + int hactive, hblank, hfp, hbp; + int vactive, vblank, vfp, vbp; + int hsize; + + int h_total; + int h_display_end; + int h_blank_start; + int h_blank_end; + int h_sync_start; + int h_sync_end; + int h_screen_off; + int h_start_fifo_fetch; + + int primary_stream_l1[KD_MAX_FB]; + + int v_total; + int v_retrace_start; + int v_retrace_end; + int v_display_end; + int v_blank_start; + int v_blank_end; + int v_blank_start_adjust = 0; + int v_blank_end_adjust = 0; + + int h_blank_start_adjust = 0; + int h_blank_end_adjust = 0; + int h_sync_start_adjust = 0; + int h_sync_end_adjust = 0; + int h_start_fifo_fetch_adjust = 0; + int h_sync_extend; + int h_blank_extend; + int i; + CARD16 cursor_address; + const KdMonitorTiming *t; + int m, n, r; + Bool clock_double; + int cpu_timeout; + int accel_timeout; + int bytes_per_ms; + CARD32 control[2]; + int fb; + int ma; + + s3s->primary_depth = screen->fb[s3s->fbmap[0]].depth; + + s3s->use_streams = TRUE; + + t = KdFindMode (screen, s3ModeSupported); + + hfp = t->hfp; + hbp = t->hbp; + hblank = t->hblank; + hactive = t->horizontal; + + vfp = t->vfp; + vbp = t->vbp; + vblank = t->vblank; + vactive = t->vertical; + + + m = s3Get (s3vga, s3_dclk_m); + n = s3Get (s3vga, s3_dclk_n); + r = s3Get (s3vga, s3_dclk_r); +#define DEBUG_CLOCK +#ifdef DEBUG_CLOCK + fprintf (stderr, "old clock %d, %d, %d (%d)\n", m, n, r, S3_CLOCK(m,n,r)); +#endif + clock_double = FALSE; + s3GetClock (t->clock, &m, &n, &r, 511, 127, 4, 250000); + if (S3_CLOCK(m,n,r) > S3_MAX_CLOCK && !s3s->use_streams) + clock_double = TRUE; + s3Set (s3vga, s3_clock_select, 3); + s3Set (s3vga, s3_dclk_m, m); + s3Set (s3vga, s3_dclk_n, n); + s3Set (s3vga, s3_dclk_r, r); +#ifdef DEBUG_CLOCK + fprintf (stderr, "new clock %d, %d, %d (%d)\n", m, n, r, S3_CLOCK(m,n,r)); +#endif + + if (s3s->use_streams) + { + s3Set (s3vga, s3_streams_mode, 3); + s3Set (s3vga, s3_enable_l1_parameter, 1); + } + else + { + s3Set (s3vga, s3_streams_mode, 0); + s3Set (s3vga, s3_enable_l1_parameter, 0); + } + s3Set (s3vga, s3_flat_panel_output_control_1, 0); + s3Set (s3vga, s3_flat_panel_output_control_2, 0); + s3Set (s3vga, s3_select_graphics_mode, 1); + s3Set (s3vga, s3_enable_blinking, 0); + s3Set (s3vga, s3_enable_vga_16bit, 0); + s3Set (s3vga, s3_enhanced_memory_mapping, 1); + s3Set (s3vga, s3_enable_sff, 1); + s3Set (s3vga, s3_enable_2d_access, 1); + s3Set (s3vga, s3_2bk_cga, 1); + s3Set (s3vga, s3_4bk_hga, 1); + s3Set (s3vga, s3_v_total_double, 0); + s3Set (s3vga, s3_address_16k_wrap, 1); + s3Set (s3vga, s3_word_mode, 0); + s3Set (s3vga, s3_byte_mode, 1); + s3Set (s3vga, s3_hardware_reset, 1); + s3Set (s3vga, s3_max_scan_line, 0); + s3Set (s3vga, s3_linear_window_size, 3); + s3Set (s3vga, s3_enable_linear, 1); + s3Set (s3vga, s3_enable_2d_3d, 1); + s3Set (s3vga, s3_refresh_control, 1); + s3Set (s3vga, s3_disable_pci_read_bursts, 0); + s3Set (s3vga, s3_pci_disconnect_enable, 1); + s3Set (s3vga, s3_primary_load_control, 0); + s3Set (s3vga, s3_secondary_load_control, 0); + s3Set (s3vga, s3_pci_retry_enable, 1); + s3Set (s3vga, s3_enable_256, 1); + s3Set (s3vga, s3_border_select, 1); /* eliminate white border */ + s3SetImm (s3vga, s3_lock_palette, 0); /* unlock palette/border regs */ + s3Set (s3vga, s3_disable_v_retrace_int, 1); + if (t->hpol == KdSyncPositive) + s3Set (s3vga, s3_horz_sync_neg, 0); + else + s3Set (s3vga, s3_horz_sync_neg, 1); + if (t->vpol == KdSyncPositive) + s3Set (s3vga, s3_vert_sync_neg, 0); + else + s3Set (s3vga, s3_vert_sync_neg, 1); + + s3Set (s3vga, s3_dot_clock_8, 1); + s3Set (s3vga, s3_enable_write_plane, 0xf); + s3Set (s3vga, s3_extended_memory_access, 1); + s3Set (s3vga, s3_sequential_addressing_mode, 1); + s3Set (s3vga, s3_select_chain_4_mode, 1); + s3Set (s3vga, s3_linear_addressing_control, 1); + + s3Set (s3vga, s3_enable_gamma_correction, 0); + + s3Set (s3vga, s3_enable_8_bit_luts, 1); + + s3Set (s3vga, s3_dclk_invert, 0); + s3Set (s3vga, s3_enable_clock_double, 0); + s3Set (s3vga, s3_dclk_over_2, 0); + + s3Set (s3vga, s3_delay_h_enable, 0); + s3Set (s3vga, s3_sdclk_skew, 0); + + s3Set (s3vga, s3_dac_mask, 0xff); + +#if 0 +#ifdef DEBUG_CLOCK + m = s3Get (s3vga, s3_mclk_m); + n = s3Get (s3vga, s3_mclk_n); + r = s3Get (s3vga, s3_mclk_r); + fprintf (stderr, "old mclk %d, %d, %d (%d)\n", m, n, r, S3_CLOCK(m,n,r)); +#endif + + s3GetClock (125282, &m, &n, &r, 127, 31, 3, 250000); + +#ifdef DEBUG_CLOCK + fprintf (stderr, "new mclk %d, %d, %d (%d)\n", m, n, r,S3_CLOCK(m,n,r)); +#endif + + s3Set (s3vga, s3_mclk_m, m); + s3Set (s3vga, s3_mclk_n, n); + s3Set (s3vga, s3_mclk_r, r); + +#ifdef DEBUG_CLOCK + m = s3Get (s3vga, s3_eclk_m); + n = s3Get (s3vga, s3_eclk_n); + r = s3Get (s3vga, s3_eclk_r); + fprintf (stderr, "old eclk %d, %d, %d (%d)\n", m, n, r, S3_CLOCK(m,n,r)); +#endif + +#define S3_ECLK 125282 + + s3GetClock (S3_ECLK, &m, &n, &r, 127, 31, 3, 250000); + +#ifdef DEBUG_CLOCK + fprintf (stderr, "new eclk %d, %d, %d (%d)\n", m, n, r,S3_CLOCK(m,n,r)); +#endif + + s3Set (s3vga, s3_eclk_m, m); + s3Set (s3vga, s3_eclk_n, n); + s3Set (s3vga, s3_eclk_r, r); +#endif + + /* + * Compute character lengths for horizontal timing values + */ + hactive = screen->width / 8; + hblank /= 8; + hfp /= 8; + hbp /= 8; + /* + * Set pixel size, choose clock doubling mode + */ + + bytes_per_ms = 0; + + for (ma = 0; s3s->fbmap[ma] >= 0; ma++) + { + fb = s3s->fbmap[ma]; + s3s->fb[ma].accel_bpp = screen->fb[fb].bitsPerPixel; + s3s->fb[ma].accel_stride = screen->fb[fb].pixelStride; + s3s->fb[ma].bitmap_offset = screen->fb[fb].frameBuffer - s3c->frameBuffer; + switch (s3s->fb[ma].accel_bpp) { + case 8: + h_screen_off = hactive; + s3Set (s3vga, s3_pixel_length, 0); + s3Set (s3vga, s3_color_mode, 0); + control[ma] = 0; + /* + * Set up for double-pixel mode, switch color modes, + * divide the dclk and delay h blank by 2 dclks + */ + if (clock_double) + { + s3Set (s3vga, s3_color_mode, 1); + s3Set (s3vga, s3_dclk_over_2, 1); + s3Set (s3vga, s3_enable_clock_double, 1); + s3Set (s3vga, s3_h_skew, 1); + h_blank_start_adjust = -3; + h_blank_end_adjust = -4; + s3Set (s3vga, s3_border_select, 0); + } + break; + case 16: + h_screen_off = hactive * 2; + s3Set (s3vga, s3_pixel_length, 1); + if (screen->fb[fb].depth == 15) + control[ma] = 3 << 24; + else + control[ma] = 5 << 24; + if (clock_double) + { + if (screen->fb[fb].depth == 15) + s3Set (s3vga, s3_color_mode, 3); + else + s3Set (s3vga, s3_color_mode, 5); + s3Set (s3vga, s3_dclk_over_2, 1); + s3Set (s3vga, s3_enable_clock_double, 1); + s3Set (s3vga, s3_border_select, 0); + h_blank_start_adjust = 4; + h_blank_end_adjust = -4; + } + else + { + if (screen->fb[fb].depth == 15) + s3Set (s3vga, s3_color_mode, 2); + else + s3Set (s3vga, s3_color_mode, 4); + s3Set (s3vga, s3_dclk_over_2, 0); + s3Set (s3vga, s3_enable_clock_double, 0); + s3Set (s3vga, s3_delay_blank, 0); + } + break; + case 24: + control[ma] = 6 << 24; + h_screen_off = hactive * 3; + s3s->fb[ma].accel_bpp = 8; + s3s->fb[ma].accel_stride = screen->fb[fb].pixelStride * 3; + break; + case 32: + control[ma] = 7 << 24; + h_screen_off = hactive * 4; + s3Set (s3vga, s3_pixel_length, 3); + s3Set (s3vga, s3_color_mode, 0xd); + break; + } + bytes_per_ms += t->clock * (screen->fb[fb].bitsPerPixel / 8); + primary_stream_l1[ma] = (screen->width * screen->fb[fb].bitsPerPixel / (8 * 8)) - 1; + } + + /* + * X server starts frame buffer at top of memory + */ + s3Set (s3vga, s3_start_address, 0); + + /* + * Set various registers to avoid snow on the screen + */ + + fprintf (stderr, "bytes_per_ms %d\n", bytes_per_ms); + fprintf (stderr, "primary 0x%x master 0x%x command 0x%x lpb 0x%x cpu 0x%x 2d 0x%x\n", + s3Get (s3vga, s3_primary_stream_timeout), + s3Get (s3vga, s3_master_control_unit_timeout), + s3Get (s3vga, s3_command_buffer_timeout), + s3Get (s3vga, s3_lpb_timeout), + s3Get (s3vga, s3_cpu_timeout), + s3Get (s3vga, s3_2d_graphics_engine_timeout)); + + /* + * Test: + * accel x11perf -line500 + * cpu x11perf -circle500 + * + * cpu accel + * 1600x1200x32x85 (918000) 1 1 not enough + * 1600x1200x32x75 (810000) 3 2 + * 1600x1200x32x70 (756000) 4 3 + * 1600x1200x32x60 (648000) 6 5 + * + * 1280x1024x32x85 (630000) 6 4 + * 1280x1024x32x75 (540000) a 6 + * 1280x1024x32x60 (432000) 1f a + * + * 1152x900x32x85 (490000) a 6 + * 1152x900x32x75 (433000) 1f 8 + * 1152x900x32x70 (401000) 1f a + * 1152x900x32x66 (380000) 1f a + * + * 1024x768x32x85 (378000) 1f a + * 1024x768x32x75 (315000) 1f b + * 1024x768x32x70 (300000) 1f b + * 1024x768x32x60 (260000) 1f 12 + * + * 800x600x32x85 (225000) 1f 1a + * 800x600x32x72 (200000) 1f 1d + * 800x600x32x75 (198000) 1f 1d + * + * 1600x1200x16x85 (459000) 1f 8 + * 1600x1200x16x75 (405000) 1f a + * 1600x1200x16x70 (378000) 1f b + * 1600x1200x16x60 (324000) 1f f + * + * 1280x1024x16x85 (315000) 1f 12 + * 1280x1024x16x75 (270000) 1f 16 + * 1280x1024x16x60 (216000) 1f 1d + * + * 1600x1200x8x85 (229000) 1f 1f + * + */ + + if (s3CpuTimeout) + { + if (s3CpuTimeout < 0) + cpu_timeout = 0; + else + cpu_timeout = s3CpuTimeout; + if (s3AccelTimeout < 0) + accel_timeout = 0; + else if (s3AccelTimeout) + accel_timeout = s3AccelTimeout; + else + accel_timeout = s3CpuTimeout; + } + else if (bytes_per_ms >= 900000) + { + cpu_timeout = 0x01; + accel_timeout = 0x01; + } + else if (bytes_per_ms >= 800000) + { + cpu_timeout = 0x03; + accel_timeout = 0x02; + } + else if (bytes_per_ms >= 700000) + { + cpu_timeout = 0x04; + accel_timeout = 0x03; + } + else if (bytes_per_ms >= 600000) + { + cpu_timeout = 0x06; + accel_timeout = 0x04; + } + else if (bytes_per_ms >= 475000) + { + cpu_timeout = 0x0a; + accel_timeout = 0x06; + } + else if (bytes_per_ms >= 425000) + { + cpu_timeout = 0x1f; + accel_timeout = 0x8; + } + else if (bytes_per_ms >= 300000) + { + cpu_timeout = 0x1f; + accel_timeout = 0x0a; + } + else if (bytes_per_ms >= 250000) + { + cpu_timeout = 0x1f; + accel_timeout = 0x12; + } + else if (bytes_per_ms >= 200000) + { + cpu_timeout = 0x1f; + accel_timeout = 0x1a; + } + else + { + cpu_timeout = 0x1f; + accel_timeout = 0x1f; + } + + fprintf (stderr, "cpu 0x%x accel 0x%x\n", cpu_timeout, accel_timeout); + + s3Set (s3vga, s3_primary_stream_timeout, 0xc0); + s3Set (s3vga, s3_master_control_unit_timeout, 0xf); + s3Set (s3vga, s3_command_buffer_timeout, 0x1f); + s3Set (s3vga, s3_lpb_timeout, 0xf); + s3Set (s3vga, s3_2d_graphics_engine_timeout, accel_timeout); + s3Set (s3vga, s3_cpu_timeout, cpu_timeout); + + s3Set (s3vga, s3_fifo_fetch_timing, 1); + s3Set (s3vga, s3_fifo_drain_delay, 2); + + /* + * Compute horizontal register values from timings + */ + h_total = hactive + hblank - 5; + h_display_end = hactive - 1; + + h_sync_start = hactive + hfp + h_sync_start_adjust; + h_sync_end = hactive + hblank - hbp + h_sync_end_adjust; + /* + * pad the blank values narrow a bit and use the border_select to + * eliminate the remaining border; don't know why, but it doesn't + * work in the documented fashion + */ + h_blank_start = hactive + 1 + h_blank_start_adjust; + h_blank_end = hactive + hblank - 2 + h_blank_end_adjust; + /* + * The manual says h_total - 5, but the + * bios does differently... + */ + if (screen->width >= 1600) + h_start_fifo_fetch = h_total - 24; + else if (screen->width >= 1280) + h_start_fifo_fetch = h_total - 19; + else if (screen->width >= 1024) + h_start_fifo_fetch = h_total - 14; + else if (screen->width >= 800) + h_start_fifo_fetch = h_total - 10; + else + h_start_fifo_fetch = h_total - 5; + + h_start_fifo_fetch += h_start_fifo_fetch_adjust; + if (h_blank_end - h_blank_start >= 0x40) + h_blank_extend = 1; + else + h_blank_extend = 0; + + if (h_sync_end - h_sync_start >= 0x20) + h_sync_extend = 1; + else + h_sync_extend = 0; + +#ifdef DEBUG + fprintf (stderr, "h_total %d h_display_end %d\n", + h_total, h_display_end); + fprintf (stderr, "h_sync_start %d h_sync_end %d h_sync_extend %d\n", + h_sync_start, h_sync_end, h_sync_extend); + fprintf (stderr, "h_blank_start %d h_blank_end %d h_blank_extend %d\n", + h_blank_start, h_blank_end, h_blank_extend); +#endif + + s3Set (s3vga, s3_h_total, h_total); + s3Set (s3vga, s3_h_display_end, h_display_end); + s3Set (s3vga, s3_h_blank_start, h_blank_start); + s3Set (s3vga, s3_h_blank_end, h_blank_end); + s3Set (s3vga, s3_h_sync_start, h_sync_start); + s3Set (s3vga, s3_h_sync_end, h_sync_end); + s3Set (s3vga, s3_screen_offset, h_screen_off); + s3Set (s3vga, s3_h_start_fifo_fetch, h_start_fifo_fetch); + s3Set (s3vga, s3_h_sync_extend, h_sync_extend); + s3Set (s3vga, s3_h_blank_extend, h_blank_extend); + + s3Set (s3vga, s3_dac_power_saving_disable, 0); + s3Set (s3vga, s3_dac_power_up_time, hactive + hblank); + + s3Set (s3vga, s3_primary_stream_l1, primary_stream_l1[0]); + + s3Set (s3vga, s3_streams_fifo_delay, 0); + + v_total = vactive + vblank - 2; + v_display_end = vactive - 1; + + v_blank_start = vactive - 1 + v_blank_start_adjust; + v_blank_end = v_blank_start + vblank - 1 + v_blank_end_adjust; + + v_retrace_start = vactive + vfp; + v_retrace_end = vactive + vblank - vbp; + + s3Set (s3vga, s3_v_total, v_total); + s3Set (s3vga, s3_v_retrace_start, v_retrace_start); + s3Set (s3vga, s3_v_retrace_end, v_retrace_end); + s3Set (s3vga, s3_v_display_end, v_display_end); + s3Set (s3vga, s3_v_blank_start, v_blank_start); + s3Set (s3vga, s3_v_blank_end, v_blank_end); + + if (vactive >= 1024) + s3Set (s3vga, s3_line_compare, 0x7ff); + else + s3Set (s3vga, s3_line_compare, 0x3ff); + + /* + * Set cursor + */ + if (!screen->softCursor) + { + cursor_address = (s3s->cursor_base - s3c->frameBuffer) / 1024; + + s3Set (s3vga, s3_cursor_address, cursor_address); + s3Set (s3vga, s3_cursor_ms_x11, 0); + s3Set (s3vga, s3_cursor_enable, 1); + } + else + s3Set (s3vga, s3_cursor_enable, 0); + +#define MAKE_GBF(bds,be,stride,bpp,tile) (\ + ((bds) << 0) | \ + ((be) << 3) | \ + ((stride) << 4) | \ + ((bpp) << 16) | \ + ((tile) << 24)) + /* + * Set accelerator + */ + switch (screen->width) { +#if 0 + case 640: s3Set (s3vga, s3_ge_screen_width, 1); break; + case 800: s3Set (s3vga, s3_ge_screen_width, 2); break; + case 1024: s3Set (s3vga, s3_ge_screen_width, 0); break; + case 1152: s3Set (s3vga, s3_ge_screen_width, 4); break; + case 1280: s3Set (s3vga, s3_ge_screen_width, 3); break; + case 1600: s3Set (s3vga, s3_ge_screen_width, 6); break; +#endif + default: + s3Set (s3vga, s3_ge_screen_width, 7); /* use global bitmap descriptor */ + } + +#if 0 + crtc->l_parm_0_7 = screen->width / 4; /* Undocumented. */ +#endif + + /* + * Set DPMS to normal + */ + s3Set (s3vga, s3_hsync_control, 0); + s3Set (s3vga, s3_vsync_control, 0); + + _s3SetBlank (s3, s3vga, TRUE); + if (s3s->use_streams) + s3Set (s3vga, s3_primary_stream_definition, 1); + else + s3Set (s3vga, s3_primary_stream_definition, 0); + + VgaFlush(&s3vga->card); + VgaSetImm (&s3vga->card, s3_clock_load_imm, 1); + VgaSetImm(&s3vga->card, s3_clock_load_imm, 0); + + + if (s3s->use_streams) + { + fb = s3s->fbmap[0]; + s3->primary_stream_control = control[0]; + s3->primary_stream_addr_0 = + s3->primary_stream_addr_1 = s3s->fb[0].bitmap_offset; + s3->primary_stream_stride = screen->fb[fb].byteStride; + s3->primary_stream_xy = (1 << 16) | 1; + s3->primary_stream_size = ((screen->fb[fb].pixelStride - 1) << 16) | screen->height; + s3->primary_stream_mem = (screen->fb[fb].byteStride * screen->height) / 8 - 1; + if (s3s->fbmap[1] >= 0) + { + fb = s3s->fbmap[1]; + s3->blend_control = 5 << 24; + if (s3s->fb[0].accel_bpp == 8) + s3->chroma_key_control = 0x33000000 | s3s->fb[0].chroma_key; + else + s3->chroma_key_control = 0x13010101; + s3->secondary_stream_control = control[1] | screen->width; + s3->secondary_stream_h_scale = (1 << 15); + s3->color_adjustment = 0; + s3->secondary_stream_vscale = (1 << 15); + s3->secondary_stream_vinit = 0; + s3->secondary_stream_mbuf = 0; + s3->secondary_stream_addr_0 = + s3->secondary_stream_addr_1 = s3s->fb[1].bitmap_offset; + s3->secondary_stream_stride = screen->fb[fb].byteStride; + s3->secondary_stream_scount = screen->height; + s3->secondary_stream_xy = (1 << 16) | 1; + s3->secondary_stream_size = ((screen->fb[fb].pixelStride - 1) << 16) | screen->height; + s3->secondary_stream_mem = (1 << 22) | ((screen->fb[fb].byteStride * screen->height) / 8 - 1); + } + else + { + s3->blend_control = 1 << 24; + s3->secondary_stream_xy = 0x07ff07ff; + s3->secondary_stream_size = 0x00010001; + } + s3->streams_fifo = (0x20 << 11) | (0x20 << 5) | 0x2; + } + s3->mult_misc_read_sel = (((1 << 9) | + (1 << 11) | + (0xe << 12)) | + (((0xe << 0) | + (0xf << 12)) << 16)); + + s3->cmd_overflow_buf_ptr = (1 << 3); + s3->bci_power_management = (1 << 9); + s3->adv_func_cntl = (3 << 8) | (1 << 4) | (1 << 2) | 1; + s3->primary_bitmap_1 = 0; + s3->primary_bitmap_2 = 0; + s3->secondary_bitmap_1 = 0; + s3->secondary_bitmap_2 = 0; + s3s->current_ma = -1; + _s3SetBlank (s3, s3vga, FALSE); +#if 0 + { + VGA16 r; + static CARD32 streams[][2] = { + /* PCI registers */ + 0x8000, 0x8024, + 0x802c, 0x8034, + 0x803c, 0x8040, +#if 0 + 0x8080, 0x808c, /* AGP */ +#endif + 0x80dc, 0x80e0, + + /* 2D registers */ + 0x8168, 0x8188, + 0x8190, 0x81a0, + 0x81c0, 0x81d8, + 0x81e0, 0x8218, + 0x8300, 0x8308, + 0x8504, 0x8510, + + /* LPB/VIP registers */ + 0xff00, 0xff18, + 0xff20, 0xff38, + 0xff40, 0xff40, + 0xff70, 0xff78, + 0xff8c, 0xffa0, + +#if 0 + /* 3D registers */ + 0x48508, 0x48508, + 0x48528, 0x48528, + 0x48548, 0x48548, + 0x48584, 0x485f0, +#endif + + /* motion compensation registers */ + 0x48900, 0x48924, +#if 0 + 0x48928, 0x48928, +#endif + + /* Mastered data transfer registers */ + 0x48a00, 0x48a1c, + + /* configuation/status registers */ + 0x48c00, 0x48c18, + 0x48c20, 0x48c24, + 0x48c40, 0x48c50, + 0x48c60, 0x48c64, + + 0, 0, + }; +#ifdef PHOENIX +#undef stderr +#define stderr stdout +#endif + CARD32 *regs = (CARD32 *) s3c->registers; + int i; + CARD32 reg; + + + for (r = S3_SR + 0; r < S3_SR + S3_NSR; r++) + fprintf (stderr, "SR%02x = %02x\n", r-S3_SR, VgaFetch (&s3vga->card, r)); + for (r = S3_GR + 0; r < S3_GR + S3_NGR; r++) + fprintf (stderr, "GR%02x = %02x\n", r-S3_GR, VgaFetch (&s3vga->card, r)); + for (r = S3_AR + 0; r < S3_AR + S3_NAR; r++) + fprintf (stderr, "AR%02x = %02x\n", r-S3_AR, VgaFetch (&s3vga->card, r)); + for (r = S3_CR + 0; r < S3_CR + S3_NCR; r++) + fprintf (stderr, "CR%02x = %02x\n", r-S3_CR, VgaFetch (&s3vga->card, r)); + for (r = S3_DAC + 0; r < S3_DAC + S3_NDAC; r++) + fprintf (stderr, "DAC%02x = %02x\n", r-S3_DAC, VgaFetch (&s3vga->card, r)); + fprintf (stderr, "MISC_OUT = %02x\n", VgaFetch (&s3vga->card, S3_MISC_OUT)); + fprintf (stderr, "INPUT_STATUS = %02x\n", VgaFetch (&s3vga->card, S3_INPUT_STATUS_1)); + + + for (i = 0; streams[i][0]; i++) + { + for (reg = streams[i][0]; reg <= streams[i][1]; reg += 4) + fprintf (stderr, "0x%4x: 0x%08x\n", reg, regs[reg/4]); + } + } +#endif + return TRUE; +} + +void +s3Disable (ScreenPtr pScreen) +{ +} + +void +s3Restore (KdCardInfo *card) +{ + S3CardInfo *s3c = card->driver; + S3Ptr s3 = s3c->s3; + S3Vga *s3vga = &s3c->s3vga; + S3Save *save = &s3c->save; + CARD8 *cursor_base; + CARD8 streams_mode; + + _s3SetBlank (s3, s3vga, TRUE); + /* streams processor state */ + streams_mode = s3Get (s3vga, s3_streams_mode); + s3SetImm (s3vga, s3_streams_mode, 3); + s3->global_bitmap_1 = save->global_bitmap_1; + s3->global_bitmap_2 = save->global_bitmap_2; + s3->adv_func_cntl = save->adv_func_cntl; + s3->primary_bitmap_1 = save->primary_bitmap_1; + s3->primary_bitmap_2 = save->primary_bitmap_2; + s3->secondary_bitmap_1 = save->secondary_bitmap_1; + s3->secondary_bitmap_2 = save->secondary_bitmap_2; + s3->primary_stream_control = save->primary_stream_control; + s3->blend_control = save->blend_control; + s3->primary_stream_addr_0 = save->primary_stream_addr_0; + s3->primary_stream_addr_0 = save->primary_stream_addr_0; + s3->primary_stream_stride = save->primary_stream_stride; + s3->primary_stream_xy = save->primary_stream_xy; + s3->primary_stream_size = save->primary_stream_size; + s3->primary_stream_mem = save->primary_stream_mem; + s3->secondary_stream_xy = save->secondary_stream_xy; + s3->secondary_stream_size = save->secondary_stream_size; + s3->streams_fifo = save->streams_fifo; + s3SetImm (s3vga, s3_streams_mode, streams_mode); + /* graphics engine state */ + s3->alt_mix = save->alt_mix; + s3->write_mask = save->write_mask; + s3->fg = save->fg; + s3->bg = save->bg; + /* XXX should save and restore real values? */ + s3->scissors_tl = 0x00000000; + s3->scissors_br = 0x0fff0fff; + + VgaRestore (&s3vga->card); + s3Set (s3vga, s3_linear_window_size, 3); + s3Set (s3vga, s3_enable_linear, 1); + VgaFlush (&s3vga->card); + memcpy (s3c->frameBuffer, save->text_save, S3_TEXT_SAVE); + s3Reset (s3vga); + _s3SetBlank (s3, s3vga, FALSE); +} + +void +_s3SetSync (S3CardInfo *s3c, int hsync, int vsync) +{ + /* this abuses the macros defined to access the crtc structure */ + S3Ptr s3 = s3c->s3; + S3Vga *s3vga = &s3c->s3vga; + + s3Set (s3vga, s3_hsync_control, hsync); + s3Set (s3vga, s3_vsync_control, vsync); + VgaFlush (&s3vga->card); +} + +Bool +s3DPMS (ScreenPtr pScreen, int mode) +{ + KdScreenPriv(pScreen); + s3CardInfo(pScreenPriv); + S3Vga *s3vga = &s3c->s3vga; + + switch (mode) { + case KD_DPMS_NORMAL: + _s3SetSync (s3c, 0, 0); + _s3SetBlank (s3c->s3, s3vga, FALSE); + break; + case KD_DPMS_STANDBY: + _s3SetBlank (s3c->s3, s3vga, TRUE); + _s3SetSync (s3c, 1, 0); + break; + case KD_DPMS_SUSPEND: + _s3SetBlank (s3c->s3, s3vga, TRUE); + _s3SetSync (s3c, 0, 1); + break; + case KD_DPMS_POWERDOWN: + _s3SetBlank (s3c->s3, s3vga, TRUE); + _s3SetSync (s3c, 1, 1); + break; + } + return TRUE; +} + +Bool +s3InitScreen(ScreenPtr pScreen) +{ + KdScreenPriv(pScreen); + KdCardInfo *card = pScreenPriv->card; + KdScreenInfo *screen = pScreenPriv->screen; + s3CardInfo (pScreenPriv); + s3ScreenInfo (pScreenPriv); + int ma, fb; + + if (screen->fb[1].depth) + { + FbOverlayScrPrivPtr pScrPriv = fbOverlayGetScrPriv(pScreen); + + for (ma = 0; s3s->fbmap[ma] >= 0; ma++) + { + fb = s3s->fbmap[ma]; + pScrPriv->layer[fb].key = s3s->fb[ma].chroma_key; + } + } + return TRUE; +} + +void +s3ScreenFini (KdScreenInfo *screen) +{ + S3ScreenInfo *s3s = (S3ScreenInfo *) screen->driver; + + xfree (s3s); + screen->driver = 0; +} + +void +s3CardFini (KdCardInfo *card) +{ + S3CardInfo *s3c = (S3CardInfo *) card->driver; + + KdUnmapDevice (s3c->frameBuffer, s3c->memory); + KdUnmapDevice (s3c->registers, sizeof (S3) + PACKED_OFFSET); + xfree (s3c); + card->driver = 0; +} + +KdCardFuncs s3Funcs = { + s3CardInit, + s3ScreenInit, + s3InitScreen, + s3Preserve, + s3Enable, + s3DPMS, + s3Disable, + s3Restore, + s3ScreenFini, + s3CardFini, + s3CursorInit, + s3CursorEnable, + s3CursorDisable, + s3CursorFini, + s3RecolorCursor, + s3DrawInit, + s3DrawEnable, + s3DrawSync, + s3DrawDisable, + s3DrawFini, + s3GetColors, + s3PutColors, +}; --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/savage/s3gc.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/savage/s3gc.c @@ -0,0 +1,302 @@ +/* + * Id: s3gc.c,v 1.2 1999/11/02 06:16:29 keithp Exp $ + * + * Copyright 1999 SuSE, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of SuSE not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. SuSE makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + * + * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE + * BE LIABLE FOR 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. + * + * Author: Keith Packard, SuSE, Inc. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/savage/s3gc.c,v 1.3 2000/01/21 01:12:02 dawes Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "s3.h" +#include "s3draw.h" + +#include "Xmd.h" +#include "gcstruct.h" +#include "scrnintstr.h" +#include "pixmapstr.h" +#include "regionstr.h" +#include "mistruct.h" +#include "fontstruct.h" +#include "dixfontstr.h" +#include "migc.h" + +/* + * Common op groups. Common assumptions: + * + * lineWidth 0 + * lineStyle LineSolid + * fillStyle FillSolid + * rop GXcopy + * font <= 32 pixels wide + */ + +/* TE font */ +static const GCOps s3TEOps = { + s3FillSpans, + KdCheckSetSpans, + KdCheckPutImage, + s3CopyArea, + s3CopyPlane, + KdCheckPolyPoint, + s3Polylines, + s3PolySegment, + KdCheckPolyRectangle, + KdCheckPolyArc, + s3FillPoly, + s3PolyFillRect, + s3PolyFillArcSolid, + miPolyText8, + miPolyText16, + miImageText8, + miImageText16, + s3ImageTEGlyphBlt, + s3PolyTEGlyphBlt, + s3PushPixels +}; + +/* Non TE font */ +static const GCOps s3NonTEOps = { + s3FillSpans, + KdCheckSetSpans, + KdCheckPutImage, + s3CopyArea, + s3CopyPlane, + KdCheckPolyPoint, + s3Polylines, + s3PolySegment, + KdCheckPolyRectangle, + KdCheckPolyArc, + s3FillPoly, + s3PolyFillRect, + s3PolyFillArcSolid, + miPolyText8, + miPolyText16, + miImageText8, + miImageText16, + s3ImageGlyphBlt, + s3PolyGlyphBlt, + s3PushPixels +}; + +static GCOps * +s3MatchCommon (DrawablePtr pDraw, GCPtr pGC, FbGCPrivPtr fbPriv) +{ + KdScreenPriv (pDraw->pScreen); + + if (!REGION_NOTEMPTY(pDraw->pScreen,fbGetCompositeClip(pGC))) + { + DRAW_DEBUG ((DEBUG_CLIP, "Empty composite clip, clipping all ops")); + return &kdNoopOps; + } + + if (pDraw->type != DRAWABLE_WINDOW) + return (GCOps *) &kdAsyncPixmapGCOps; + + if (pGC->lineWidth != 0) + return 0; + if (pGC->lineStyle != LineSolid) + return 0; + if (pGC->fillStyle != FillSolid) + return 0; + if (fbPriv->and != 0) + return 0; + if (pGC->font) + { + if (TERMINALFONT(pGC->font)) + return (GCOps *) &s3TEOps; + else + return (GCOps *) &s3NonTEOps; + } + return 0; +} + +void +s3ValidateGC (GCPtr pGC, Mask changes, DrawablePtr pDrawable) +{ + int new_type; /* drawable type has changed */ + int new_origin; + + /* flags for changing the proc vector */ + FbGCPrivPtr fbPriv; + s3PrivGCPtr s3Priv; + int oneRect; + GCOps *newops; + + fbPriv = fbGetGCPrivate(pGC); + s3Priv = s3GetGCPrivate(pGC); + + new_type = FALSE; + new_origin = FALSE; + + /* + * If the type of drawable has changed, fix up accelerated functions + */ + if (s3Priv->type != pDrawable->type) + { + new_type = TRUE; + s3Priv->type = pDrawable->type; + } + + /* + * Check tile/stipple origin + */ + if (pGC->lastWinOrg.x != pDrawable->x || pGC->lastWinOrg.y != pDrawable->y) + new_origin = TRUE; + + /* + * Call down to FB to set clip list and rrop values + */ + + fbValidateGC (pGC, changes, pDrawable); + + /* + * Check accelerated pattern if necessary + */ + if (changes & (GCFillStyle|GCStipple|GCTile)) + s3CheckGCFill (pGC); + else if (s3Priv->pPattern && + (new_origin || changes & (GCTileStipXOrigin|GCTileStipYOrigin))) + s3MoveGCFill (pGC); + + /* + * Try to match common vector + */ + + if (newops = s3MatchCommon (pDrawable, pGC, fbPriv)) + { + if (pGC->ops->devPrivate.val) + miDestroyGCOps (pGC->ops); + pGC->ops = newops; + return; + } + + /* + * No common vector matched, create private ops vector and + * fill it in + */ + if (!pGC->ops->devPrivate.val) + { + /* + * Switch from noop vector by first switching to fb + * vector and fixing it up + */ + if (pGC->ops == &kdNoopOps) + { + pGC->ops = (GCOps *) &kdAsyncPixmapGCOps; + new_type = TRUE; + } + pGC->ops = miCreateGCOps (pGC->ops); + pGC->ops->devPrivate.val = 1; + } + + /* + * Fills + */ + if (new_type || (changes & (GCFillStyle|GCTile|GCStipple))) + { + pGC->ops->FillSpans = KdCheckFillSpans; + pGC->ops->PolyFillRect = KdCheckPolyFillRect; + if (s3Priv->type == DRAWABLE_WINDOW && + (pGC->fillStyle != FillTiled || s3Priv->pPattern)) + { + pGC->ops->FillSpans = s3FillSpans; + pGC->ops->PolyFillRect = s3PolyFillRect; + } + } + + /* + * Blt + */ + if (new_type) + { + pGC->ops->CopyArea = s3CopyArea; + pGC->ops->CopyPlane = s3CopyPlane; + pGC->ops->PushPixels = s3PushPixels; + } + + /* + * Lines + */ + if (new_type || (changes & (GCLineStyle|GCLineWidth|GCFillStyle))) + { + pGC->ops->Polylines = KdCheckPolylines; + pGC->ops->PolySegment = KdCheckPolySegment; + if (pGC->lineStyle == LineSolid && + pGC->lineWidth == 0 && + pGC->fillStyle == FillSolid && + s3Priv->type == DRAWABLE_WINDOW) + { + pGC->ops->Polylines = s3Polylines; + pGC->ops->PolySegment = s3PolySegment; + } + } + + /* + * Polygons + */ + if (new_type || (changes & (GCFillStyle))) + { + pGC->ops->FillPolygon = KdCheckFillPolygon; + if (s3Priv->type == DRAWABLE_WINDOW && + pGC->fillStyle == FillSolid) + { + pGC->ops->FillPolygon = s3FillPoly; + } + } + + /* + * Filled arcs + */ + if (new_type || (changes & GCFillStyle)) + { + pGC->ops->PolyFillArc = KdCheckPolyFillArc; + if (s3Priv->type == DRAWABLE_WINDOW && + pGC->fillStyle == FillSolid) + { + pGC->ops->PolyFillArc = s3PolyFillArcSolid; + } + } + + /* + * Text + */ + if (new_type || (changes & (GCFont|GCFillStyle))) + { + pGC->ops->PolyGlyphBlt = KdCheckPolyGlyphBlt; + pGC->ops->ImageGlyphBlt = KdCheckImageGlyphBlt; + if (s3Priv->type == DRAWABLE_WINDOW && pGC->font) + { + if (pGC->fillStyle == FillSolid) + { + if (TERMINALFONT(pGC->font)) + pGC->ops->PolyGlyphBlt = s3PolyTEGlyphBlt; + else + pGC->ops->PolyGlyphBlt = s3PolyGlyphBlt; + } + if (TERMINALFONT(pGC->font)) + pGC->ops->ImageGlyphBlt = s3ImageTEGlyphBlt; + else + pGC->ops->ImageGlyphBlt = s3ImageGlyphBlt; + } + } +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/savage/s3curs.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/savage/s3curs.c @@ -0,0 +1,433 @@ +/* + * Id: s3curs.c,v 1.2 1999/11/02 06:16:29 keithp Exp $ + * + * Copyright 1999 SuSE, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of SuSE not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. SuSE makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + * + * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE + * BE LIABLE FOR 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. + * + * Author: Keith Packard, SuSE, Inc. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/savage/s3curs.c,v 1.3 2000/02/23 20:30:03 dawes Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "s3.h" +#include "s3draw.h" +#include "cursorstr.h" + +#define SetupCursor(s) KdScreenPriv(s); \ + s3CardInfo(pScreenPriv); \ + s3ScreenInfo(pScreenPriv); \ + S3Ptr s3 = s3c->s3; \ + S3Vga *s3vga = &s3c->s3vga; \ + S3Cursor *pCurPriv = &s3s->cursor + +static void +_s3MoveCursor (ScreenPtr pScreen, int x, int y) +{ + SetupCursor(pScreen); + CARD8 xlow, xhigh, ylow, yhigh; + CARD8 xoff, yoff; + + DRAW_DEBUG ((DEBUG_CURSOR, "s3MoveCursor %d %d", x, y)); + + x -= pCurPriv->xhot; + xoff = 0; + if (x < 0) + { + xoff = -x; + x = 0; + } + y -= pCurPriv->yhot; + yoff = 0; + if (y < 0) + { + yoff = -y; + y = 0; + } + xlow = (CARD8) x; + xhigh = (CARD8) (x >> 8); + ylow = (CARD8) y; + yhigh = (CARD8) (y >> 8); + + + /* This is the recommended order to move the cursor */ + + s3SetImm (s3vga, s3_cursor_xhigh, xhigh); + s3SetImm (s3vga, s3_cursor_xlow, xlow); + s3SetImm (s3vga, s3_cursor_ylow, ylow); + s3SetImm (s3vga, s3_cursor_xoff, xoff); + s3SetImm (s3vga, s3_cursor_yoff, yoff); + s3SetImm (s3vga, s3_cursor_yhigh, yhigh); + + DRAW_DEBUG ((DEBUG_CURSOR, "s3MoveCursor done")); +} + +static void +s3MoveCursor (ScreenPtr pScreen, int x, int y) +{ + SetupCursor (pScreen); + + if (!pCurPriv->has_cursor) + return; + + if (!pScreenPriv->enabled) + return; + + _s3MoveCursor (pScreen, x, y); +} + +#define S3Trunc(c) (((c) >> 8) & 0xff) + +#define S3CursColor(r,g,b) ((S3Trunc(r) << 16) | \ + (S3Trunc(g) << 8) | \ + (S3Trunc(b))) + +static void +s3AllocCursorColors (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + CursorPtr pCursor = pCurPriv->pCursor; + + if (s3s->use_streams) + { + pCurPriv->source = S3CursColor(pCursor->foreRed, + pCursor->foreGreen, + pCursor->foreBlue); + pCurPriv->mask = S3CursColor(pCursor->backRed, + pCursor->backGreen, + pCursor->backBlue); + } + else + { + KdAllocateCursorPixels (pScreen, 0, pCursor, + &pCurPriv->source, &pCurPriv->mask); + switch (pScreenPriv->screen->fb[0].bitsPerPixel) { + case 4: + pCurPriv->source |= pCurPriv->source << 4; + pCurPriv->mask |= pCurPriv->mask << 4; + case 8: + pCurPriv->source |= pCurPriv->source << 8; + pCurPriv->mask |= pCurPriv->mask << 8; + case 16: + pCurPriv->source |= pCurPriv->source << 16; + pCurPriv->mask |= pCurPriv->mask << 16; + } + } +} + +static void +_s3SetCursorColors (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + /* set foreground */ + /* Reset cursor color stack pointers */ + (void) s3GetImm (s3vga, s3_cursor_enable); + s3SetImm (s3vga, s3_cursor_fg, pCurPriv->source); + s3SetImm (s3vga, s3_cursor_fg, pCurPriv->source >> 8); + s3SetImm (s3vga, s3_cursor_fg, pCurPriv->source >> 16); + + /* set background */ + /* Reset cursor color stack pointers */ + (void) s3GetImm (s3vga, s3_cursor_enable); + s3SetImm (s3vga, s3_cursor_bg, pCurPriv->mask); + s3SetImm (s3vga, s3_cursor_bg, pCurPriv->mask >> 8); + s3SetImm (s3vga, s3_cursor_bg, pCurPriv->mask >> 16); +} + +void +s3RecolorCursor (ScreenPtr pScreen, int ndef, xColorItem *pdef) +{ + SetupCursor (pScreen); + CursorPtr pCursor = pCurPriv->pCursor; + xColorItem sourceColor, maskColor; + + if (!pCurPriv->has_cursor || !pCursor) + return; + + if (!pScreenPriv->enabled) + return; + + if (pdef) + { + while (ndef) + { + if (pdef->pixel == pCurPriv->source || + pdef->pixel == pCurPriv->mask) + break; + ndef--; + } + if (!ndef) + return; + } + s3AllocCursorColors (pScreen); + _s3SetCursorColors (pScreen); +} + +static void +s3LoadCursor (ScreenPtr pScreen, int x, int y) +{ + SetupCursor(pScreen); + CursorPtr pCursor = pCurPriv->pCursor; + CursorBitsPtr bits = pCursor->bits; + int w, h; + unsigned char r[2], g[2], b[2]; + unsigned long *ram; + unsigned long *msk, *mskLine, *src, *srcLine; + unsigned long and, xor; + int i, j; + int cursor_address; + int wsrc; + unsigned char ramdac_control_; + + /* + * Allocate new colors + */ + s3AllocCursorColors (pScreen); + + pCurPriv->pCursor = pCursor; + pCurPriv->xhot = pCursor->bits->xhot; + pCurPriv->yhot = pCursor->bits->yhot; + + /* + * Stick new image into cursor memory + */ + ram = (unsigned long *) s3s->cursor_base; + mskLine = (unsigned long *) bits->mask; + srcLine = (unsigned long *) bits->source; + + h = bits->height; + if (h > S3_CURSOR_HEIGHT) + h = S3_CURSOR_HEIGHT; + + wsrc = BitmapBytePad(bits->width) / 4; /* ulongs per line */ + + for (i = 0; i < S3_CURSOR_HEIGHT; i++) { + msk = mskLine; + src = srcLine; + mskLine += wsrc; + srcLine += wsrc; + for (j = 0; j < S3_CURSOR_WIDTH / 32; j++) { + + unsigned long m, s; + + if (i < h && j < wsrc) + { + m = *msk++; + s = *src++; + xor = m & s; + and = ~m; + } + else + { + and = 0xffffffff; + xor = 0x00000000; + } + + S3AdjustBits32(and); + S3AdjustBits32(xor); +#define S3SwapNibbles(x) ((x) = (((x) & 0x0f0f0f0f) << 4 | \ + ((x) >> 4) & 0x0f0f0f0f)) + if (s3s->use_streams) + { + S3SwapNibbles(and); + S3SwapNibbles(xor); + } + *ram++ = (and & 0xffff) | (xor << 16); + *ram++ = (and >> 16) | (xor & 0xffff0000); + } + } + + _s3WaitIdle (s3); + + /* Set new color */ + _s3SetCursorColors (pScreen); + + /* Enable the cursor */ + s3SetImm (s3vga, s3_cursor_ms_x11, 0); + s3SetImm (s3vga, s3_cursor_enable, 1); + + /* Wait for VRetrace to make sure the position is read */ + _s3WaitVRetrace (s3vga); + + /* Move to new position */ + _s3MoveCursor (pScreen, x, y); +} + +static void +s3UnloadCursor (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + /* Disable cursor */ + s3SetImm (s3vga, s3_cursor_enable, 0); +} + +static Bool +s3RealizeCursor (ScreenPtr pScreen, CursorPtr pCursor) +{ + SetupCursor(pScreen); + + if (!pScreenPriv->enabled) + return TRUE; + + /* miRecolorCursor does this */ + if (pCurPriv->pCursor == pCursor) + { + if (pCursor) + { +#ifdef FB_OLD_SCREEN + short x, y; +#else + int x, y; +#endif + + miPointerPosition (&x, &y); + s3LoadCursor (pScreen, x, y); + } + } + return TRUE; +} + +static Bool +s3UnrealizeCursor (ScreenPtr pScreen, CursorPtr pCursor) +{ + return TRUE; +} + +static void +s3SetCursor (ScreenPtr pScreen, CursorPtr pCursor, int x, int y) +{ + SetupCursor(pScreen); + + pCurPriv->pCursor = pCursor; + + if (!pScreenPriv->enabled) + return; + + if (pCursor) + s3LoadCursor (pScreen, x, y); + else + s3UnloadCursor (pScreen); +} + +miPointerSpriteFuncRec s3PointerSpriteFuncs = { + s3RealizeCursor, + s3UnrealizeCursor, + s3SetCursor, + s3MoveCursor, +}; + +static void +s3QueryBestSize (int class, + unsigned short *pwidth, unsigned short *pheight, + ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + switch (class) + { + case CursorShape: + if (*pwidth > pCurPriv->width) + *pwidth = pCurPriv->width; + if (*pheight > pCurPriv->height) + *pheight = pCurPriv->height; + if (*pwidth > pScreen->width) + *pwidth = pScreen->width; + if (*pheight > pScreen->height) + *pheight = pScreen->height; + break; + default: + fbQueryBestSize (class, pwidth, pheight, pScreen); + break; + } +} + +Bool +s3CursorInit (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + if (!s3s->cursor_base) + { + DRAW_DEBUG ((DEBUG_CURSOR,"Not enough screen memory for cursor %d", s3d->memory)); + pCurPriv->has_cursor = FALSE; + return FALSE; + } + + pCurPriv->width = S3_CURSOR_WIDTH; + pCurPriv->height= S3_CURSOR_HEIGHT; + pScreen->QueryBestSize = s3QueryBestSize; + miPointerInitialize (pScreen, + &s3PointerSpriteFuncs, + &kdPointerScreenFuncs, + FALSE); + pCurPriv->has_cursor = TRUE; + pCurPriv->pCursor = NULL; + return TRUE; +} + +void +s3CursorEnable (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + DRAW_DEBUG ((DEBUG_INIT, "s3CursorEnable")); + if (pCurPriv->has_cursor) + { + if (pCurPriv->pCursor) + { +#ifdef FB_OLD_SCREEN + short x, y; +#else + int x, y; +#endif + + miPointerPosition (&x, &y); + s3LoadCursor (pScreen, x, y); + } + else + s3UnloadCursor (pScreen); + } +} + +void +s3CursorDisable (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + if (!pScreenPriv->enabled) + return; + + if (pCurPriv->has_cursor) + { + if (pCurPriv->pCursor) + { + s3UnloadCursor (pScreen); + } + } +} + +void +s3CursorFini (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + pCurPriv->pCursor = NULL; +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/savage/s3draw.h +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/savage/s3draw.h @@ -0,0 +1,471 @@ +/* + * Id: s3draw.h,v 1.2 1999/11/02 06:16:29 keithp Exp $ + * + * Copyright 1999 SuSE, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of SuSE not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. SuSE makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + * + * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE + * BE LIABLE FOR 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. + * + * Author: Keith Packard, SuSE, Inc. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/savage/s3draw.h,v 1.4 2000/05/06 22:17:47 keithp Exp $ */ + +#ifndef _S3DRAW_H_ +#define _S3DRAW_H_ + +extern int s3GCPrivateIndex; +extern int s3WindowPrivateIndex; + +typedef struct _s3Pattern { + S3PatternCache *cache; + int id; + PixmapPtr pPixmap; + int fillStyle; + int xrot, yrot; + unsigned int fore, back; +} s3PatternRec, *s3PatternPtr; + +typedef struct _s3PrivGC { + int type; /* type of drawable validated against */ + int ma; /* stream descriptor */ + s3PatternPtr pPattern; /* pattern */ +} s3PrivGCRec, *s3PrivGCPtr; + +#define s3GetGCPrivate(g) ((s3PrivGCPtr) \ + (g)->devPrivates[s3GCPrivateIndex].ptr) + +#define s3GCPrivate(g) s3PrivGCPtr s3Priv = s3GetGCPrivate(g) + +#define s3GetWindowPrivate(w) ((s3PatternPtr) \ + (w)->devPrivates[s3WindowPrivateIndex].ptr) + +#define s3SetWindowPrivate(w,p) (\ + (w)->devPrivates[s3WindowPrivateIndex].ptr = (pointer) p) + +void _s3LoadPattern (ScreenPtr pScreen, int fb, s3PatternPtr pPattern); + +#define SetupS3(s) KdScreenPriv(s); \ + s3CardInfo(pScreenPriv); \ + S3Ptr s3 = s3c->s3 + +#ifdef S3_SYNC_DEBUG +#define SYNC_DEBUG() fprintf (stderr, "Sync at %s:%d\n", __FILE__,__LINE__) +#else +#define SYNC_DEBUG() +#endif + +#define S3_ASYNC +#ifdef S3_ASYNC +#define CheckSyncS3(s) KdCheckSync(s) +#define MarkSyncS3(s) KdMarkSync(s) +#define RegisterSync(screen) KdScreenInitAsync (screen) +#else +#define CheckSyncS3(s3c) +#define MarkSyncS3(s3c) _s3WaitIdleEmpty(s3c->s3) +#define RegisterSync(screen) +#endif + +#define WIDEN(x) ((unsigned long) (x)) +#define MERGE(a,b) ((WIDEN(a) << 16) | WIDEN(b)) + +#define s3BitmapDescriptor(_stream) ((_stream) + 1) + +#ifdef S3_TRIO +#define s3DrawMap(pDraw) 0 +#define s3SetGlobalBitmap(s,d) +#else +#define s3DrawMap(pDraw) ((pDraw)->depth == \ + getS3ScreenInfo(pScreenPriv)->primary_depth ? 0 : 1) +#endif + +#define s3GCMap(pGC) (s3GetGCPrivate(pGC)->ma) + +/* + * Ok, so the S3 is broken -- it expects bitmaps to come MSB bit order, + * but it's willing to take them in LSB byte order. These macros + * flip bits around without flipping bytes. Instead of using a table + * and burning memory bandwidth, do them in place with the CPU. + */ + +/* The MIPS compiler automatically places these constants in registers */ +#define S3InvertBits32(v) { \ + v = ((v & 0x55555555) << 1) | ((v >> 1) & 0x55555555); \ + v = ((v & 0x33333333) << 2) | ((v >> 2) & 0x33333333); \ + v = ((v & 0x0f0f0f0f) << 4) | ((v >> 4) & 0x0f0f0f0f); \ +} + +#define S3InvertBits16(v) { \ + v = ((v & 0x5555) << 1) | ((v >> 1) & 0x5555); \ + v = ((v & 0x3333) << 2) | ((v >> 2) & 0x3333); \ + v = ((v & 0x0f0f) << 4) | ((v >> 4) & 0x0f0f); \ +} + +#define S3InvertBits8(v) { \ + v = ((v & 0x55) << 1) | ((v >> 1) & 0x55); \ + v = ((v & 0x33) << 2) | ((v >> 2) & 0x33); \ + v = ((v & 0x0f) << 4) | ((v >> 4) & 0x0f); \ +} + +#define S3ByteSwap32(x) ((x) = (((x) >> 24) | \ + (((x) >> 8) & 0xff00) | \ + (((x) << 8) & 0xff0000) | \ + ((x) << 24))) + +#define S3ByteSwap16(x) ((x) = ((x) << 8) | ((x) >> 8)) + +#if BITMAP_BIT_ORDER == LSBFirst +#define S3AdjustBits32(x) S3InvertBits32(x) +#define S3AdjustBits16(x) S3InvertBits16(x) +#else +#define S3AdjustBits32(x) S3ByteSwap32(x) +#define S3AdjustBits16(x) S3ByteSwap16(x) +#endif + +#define _s3WaitSlot(s3) _s3WaitSlots(s3,1) + +#define _s3SetFg(s3,_fg) { \ + DRAW_DEBUG ((DEBUG_REGISTERS, " fg <- 0x%x", _fg));\ + s3->fg = (_fg); \ +} + +#define _s3SetBg(s3,_bg) { \ + DRAW_DEBUG ((DEBUG_REGISTERS, " bg <- 0x%x", _bg));\ + s3->bg = (_bg); \ +} + +#define _s3SetWriteMask(s3,_mask) {\ + DRAW_DEBUG((DEBUG_REGISTERS," write_mask <- 0x%x", _mask)); \ + s3->write_mask = (_mask); \ +} + +#define _s3SetReadMask(s3,_mask) {\ + DRAW_DEBUG((DEBUG_REGISTERS," read_mask <- 0x%x", _mask)); \ + s3->read_mask = (_mask); \ +} + +#define _s3SetPixelControl(s3,_ctl) { \ + DRAW_DEBUG((DEBUG_REGISTERS, " pix_cntl <- 0x%x", PIX_CNTL | (_ctl))); \ + s3->pix_cntl_mult_misc2 = MERGE (CONTROL_MISC2, PIX_CNTL | (_ctl)); \ +} + +#define _s3SetFgMix(s3,_mix) { \ + DRAW_DEBUG((DEBUG_REGISTERS, " fg_mix <- 0x%x", _mix)); \ + s3->enh_fg_mix = (_mix); \ +} + +#define _s3SetBgMix(s3,_mix) { \ + DRAW_DEBUG((DEBUG_REGISTERS, " bg_mix <- 0x%x", _mix)); \ + s3->enh_bg_mix = (_mix); \ +} + +#define _s3SetMix(s3,fg_mix,bg_mix) { \ + DRAW_DEBUG((DEBUG_REGISTERS, " alt_mix <- 0x%x", MERGE(fg_mix,bg_mix))); \ + s3->alt_mix = MERGE(fg_mix,bg_mix); \ +} + +#define _s3SetCur(s3,_x,_y) { \ + DRAW_DEBUG ((DEBUG_REGISTERS, " alt_curxy <- 0x%x", MERGE(_x,_y))); \ + s3->alt_curxy = MERGE(_x,_y); \ +} + +#define _s3SetStep(s3,_x,_y) { \ + DRAW_DEBUG ((DEBUG_REGISTERS, " alt_step <- 0x%x", MERGE(_x,_y))); \ + s3->alt_step = MERGE(_x,_y); \ +} + +#define _s3SetErr(s3,_e) { \ + DRAW_DEBUG ((DEBUG_REGISTERS, " err_term <- 0x%x", _e)); \ + s3->err_term = (_e); \ +} + +#define _s3SetPcnt(s3,_x,_y) { \ + DRAW_DEBUG ((DEBUG_REGISTERS, " alt_pcnt <- 0x%x", MERGE(_x,_y))); \ + s3->alt_pcnt = MERGE(_x,_y); \ +} + +#define _s3SetScissorsTl(s3,t,l) {\ + DRAW_DEBUG ((DEBUG_REGISTERS, " scissors_tl <- 0x%x", MERGE(t,l))); \ + s3->scissors_tl = MERGE(t,l); \ +} + +#define _s3SetScissorsBr(s3,b,r) {\ + DRAW_DEBUG ((DEBUG_REGISTERS, " scissors_br <- 0x%x", MERGE(b,r))); \ + s3->scissors_br = MERGE(b,r); \ +} + +#define _s3CmdWait(s3) + +#define _s3SetCmd(s3,_cmd) { \ + DRAW_DEBUG((DEBUG_REGISTERS, " cmd <- 0x%x", _cmd)); \ + _s3CmdWait(s3); \ + s3->cmd_gp_stat = (_cmd); \ + /* { CARD32 __junk__; __junk__ = s3->cmd_gp_stat; } */ \ +} + +#define _s3SetSolidFill(s3,pix,alu,mask) { \ + DRAW_DEBUG((DEBUG_SET,"set fill 0x%x %d 0x%x",pix,alu,mask)); \ + _s3WaitSlots(s3,4); \ + _s3SetFg (s3, pix); \ + _s3SetWriteMask(s3,mask); \ + _s3SetMix (s3, FSS_FRGDCOL | s3alu[alu], BSS_BKGDCOL | MIX_SRC); \ + _s3SetPixelControl (s3, MIXSEL_FRGDMIX); \ + DRAW_DEBUG((DEBUG_SET," done")); \ +} + +#define _s3SolidRect(s3,x,y,w,h) {\ + DRAW_DEBUG((DEBUG_RENDER,"solid rect %d,%d %dx%d",x,y,w,h)); \ + _s3WaitSlots(s3,3); \ + _s3SetCur(s3, x, y); \ + _s3SetPcnt (s3, (w)-1, (h)-1); \ + _s3SetCmd (s3, CMD_RECT|INC_X|INC_Y|DRAW|WRTDATA); \ + DRAW_DEBUG((DEBUG_RENDER," done")); \ +} + +#define _s3SolidLine(s3,maj,min,len,cmd) { \ + DRAW_DEBUG ((DEBUG_RENDER, "solid line 0x%x 0x%x 0x%x", maj, min, cmd)); \ + _s3WaitSlots(s3,4); \ + _s3SetPcnt(s3, (len), 0); \ + _s3SetStep(s3, 2*((min) - (maj)), 2*(min)); \ + _s3SetErr(s3, 2*(min) - (maj)); \ + _s3SetCmd (s3, CMD_LINE | (cmd) | DRAW | WRTDATA); \ +} + +#define _s3ClipLine(s3,cmd,e1,e2,e,len) {\ + DRAW_DEBUG ((DEBUG_RENDER, "clip line 0x%x 0x%x 0x%x 0x%x 0x%x", cmd,e1,e2,e,len)); \ + _s3WaitSlots(s3, 4); \ + _s3SetPcnt (s3, (len), 0); \ + _s3SetStep (s3, e2, e1); \ + _s3SetErr (s3, e); \ + _s3SetCmd (s3, CMD_LINE | (cmd) | DRAW | WRTDATA); \ +} + +#define _s3SetTile(s3,alu,mask) { \ + DRAW_DEBUG ((DEBUG_SET,"set tile %d 0x%x", alu, mask)); \ + _s3WaitSlots(s3,3); \ + _s3SetWriteMask(s3, mask); \ + _s3SetMix(s3, FSS_BITBLT | s3alu[alu], BSS_BITBLT|s3alu[alu]); \ + _s3SetPixelControl (s3, MIXSEL_FRGDMIX); \ + DRAW_DEBUG((DEBUG_SET," done")); \ +} + +/* + * For some reason, MIX_DST doesn't work in this mode; use MIX_OR with + * an explicit 0 pixel value + */ +#define _s3SetStipple(s3,alu,mask,_fg) {\ + DRAW_DEBUG ((DEBUG_SET,"set stipple 0x%x %d 0x%x", _fg, alu, mask)); \ + _s3WaitSlots(s3,5); \ + _s3SetFg (s3, _fg); \ + _s3SetBg (s3, 0); \ + _s3SetWriteMask(s3,mask); \ + _s3SetMix (s3, FSS_FRGDCOL | s3alu[alu], BSS_BKGDCOL|MIX_OR); \ + _s3SetPixelControl (s3, MIXSEL_EXPBLT); \ + DRAW_DEBUG((DEBUG_SET," done")); \ +} + +#define _s3SetOpaqueStipple(s3,alu,mask,_fg,_bg) {\ + DRAW_DEBUG ((DEBUG_SET,"set opaque stipple 0x%x 0x%x %d 0x%x", _fg, _bg, alu, mask)); \ + _s3WaitSlots(s3,5); \ + _s3SetFg (s3, _fg); \ + _s3SetBg (s3, _bg); \ + _s3SetWriteMask(s3,mask); \ + _s3SetMix (s3, FSS_FRGDCOL | s3alu[alu], BSS_BKGDCOL|s3alu[alu]); \ + _s3SetPixelControl (s3, MIXSEL_EXPBLT); \ + DRAW_DEBUG((DEBUG_SET," done")); \ +} + +#define _s3PatRect(s3,px,py,x,y,w,h) {\ + DRAW_DEBUG ((DEBUG_RENDER, "pat rect %d,%d %dx%d", x,y,w,h)); \ + _s3WaitSlots(s3, 4); \ + _s3SetCur (s3, px, py); \ + _s3SetStep (s3, x, y); \ + _s3SetPcnt (s3, (w)-1, (h)-1); \ + _s3SetCmd (s3, CMD_PATBLT|INC_X|INC_Y|DRAW|PLANAR|WRTDATA); \ + DRAW_DEBUG((DEBUG_RENDER," done")); \ +} + +#define _s3SetBlt(s3,alu,mask) { \ + DRAW_DEBUG ((DEBUG_SET,"set blt %d 0x%x", alu, mask)); \ + _s3WaitSlots(s3,3); \ + _s3SetPixelControl (s3, MIXSEL_FRGDMIX); \ + _s3SetMix(s3, FSS_BITBLT | s3alu[alu], BSS_BITBLT | s3alu[alu]); \ + _s3SetWriteMask(s3, mask); \ + DRAW_DEBUG((DEBUG_SET," done")); \ +} + +#define _s3Blt(s3,_sx,_sy,_dx,_dy,_w,_h,_dir) { \ + DRAW_DEBUG ((DEBUG_RENDER, "blt %d,%d -> %d,%d %dx%d 0x%x", \ + _sx,_sy,_dx,_dy,_w,_h,_dir)); \ + _s3WaitSlots(s3,4); \ + _s3SetCur(s3,_sx,_sy); \ + _s3SetStep(s3,_dx,_dy); \ + _s3SetPcnt(s3,(_w)-1,(_h)-1); \ + _s3SetCmd (s3, CMD_BITBLT | (_dir) | DRAW | WRTDATA); \ + DRAW_DEBUG((DEBUG_RENDER," done")); \ +} + +#define _s3SetOpaquePlaneBlt(s3,alu,mask,_fg,_bg) {\ + DRAW_DEBUG ((DEBUG_SET,"set opaque plane blt 0x%x 0x%x %d 0x%x", \ + _fg, _bg, alu, mask)); \ + /* _s3WaitSlots(s3, 5); */ \ + _s3WaitIdleEmpty (s3); \ + _s3SetFg(s3,_fg); \ + _s3SetBg(s3,_bg); \ + _s3SetWriteMask(s3,mask); \ + _s3SetMix(s3,FSS_FRGDCOL|s3alu[alu], BSS_BKGDCOL|s3alu[alu]); \ + _s3SetPixelControl(s3,MIXSEL_EXPPC); \ + DRAW_DEBUG((DEBUG_SET," done")); \ +} + +#define _s3SetTransparentPlaneBlt(s3,alu,mask,_fg) {\ + DRAW_DEBUG ((DEBUG_SET,"set transparent plane blt 0x%x %d 0x%x", \ + _fg, alu, mask)); \ + /*_s3WaitSlots(s3, 4); */ \ + _s3WaitIdleEmpty (s3); \ + _s3SetFg(s3,_fg); \ + _s3SetWriteMask(s3,mask); \ + _s3SetMix(s3,FSS_FRGDCOL|s3alu[alu], BSS_BKGDCOL|MIX_DST); \ + _s3SetPixelControl(s3,MIXSEL_EXPPC); \ + DRAW_DEBUG((DEBUG_SET," done")); \ +} + +/* Across the plane blt */ +#define _s3PlaneBlt(s3,x,y,w,h) {\ + DRAW_DEBUG ((DEBUG_RENDER, "plane blt %d,%d %dx%d", x,y,w,h)); \ + _s3WaitSlots(s3, 4); \ + _s3SetPixelControl(s3,MIXSEL_EXPPC); \ + _s3SetCur(s3, x, y); \ + _s3SetPcnt (s3, (w)-1, (h)-1); \ + _s3SetCmd (s3, \ + CMD_RECT| /* Fill rectangle */ \ + BYTSEQ| /* LSB byte order */ \ + _32BIT| /* 32 bit data on 32 bit boundaries */ \ + PCDATA| /* Data from CPU */ \ + INC_X|INC_Y| /* X and Y both increasing */ \ + DRAW| /* Draw, not move */ \ + PLANAR| /* multi pixel */ \ + WRTDATA); \ + DRAW_DEBUG((DEBUG_RENDER," done")); \ +} + +#define _s3SetClip(s3,pbox) {\ + DRAW_DEBUG ((DEBUG_SET, "set clip %dx%d -> %dx%d ", \ + pbox->x1, pbox->y1, pbox->x2, pbox->y2)); \ + _s3WaitSlots(s3, 2); \ + _s3SetScissorsTl(s3,(pbox)->x1, (pbox)->y1); \ + _s3SetScissorsBr(s3,(pbox)->x2 - 1, (pbox)->y2 - 1); \ + DRAW_DEBUG((DEBUG_SET," done")); \ +} + +#define _s3ResetClip(s3,pScreen) { \ + DRAW_DEBUG ((DEBUG_SET, "reset clip")); \ + _s3WaitSlots(s3, 2); \ + _s3SetScissorsTl(s3,0,0); \ + _s3SetScissorsBr(s3,pScreen->width - 1, pScreen->height - 1); \ + DRAW_DEBUG((DEBUG_SET," done")); \ +} + +RegionPtr +s3CopyArea(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC, + int srcx, int srcy, int width, int height, int dstx, int dsty); + +RegionPtr +s3CopyPlane(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC, + int srcx, int srcy, int width, int height, + int dstx, int dsty, unsigned long bitPlane); + +void +s3PushPixels (GCPtr pGC, PixmapPtr pBitmap, + DrawablePtr pDrawable, + int w, int h, int x, int y); + +void +s3FillBoxSolid (DrawablePtr pDrawable, int nBox, BoxPtr pBox, + unsigned long pixel, int alu, unsigned long planemask); + +void +s3FillBoxPattern (DrawablePtr pDrawable, int nBox, BoxPtr pBox, + int alu, unsigned long planemask, s3PatternPtr pPattern); + +void +s3PolyFillRect (DrawablePtr pDrawable, GCPtr pGC, + int nrectFill, xRectangle *prectInit); + +void +s3FillSpans (DrawablePtr pDrawable, GCPtr pGC, int n, + DDXPointPtr ppt, int *pwidth, int fSorted); + +void +s3PolyFillArcSolid (DrawablePtr pDraw, GCPtr pGC, int narcs, xArc *parcs); + +void +s3FillPoly (DrawablePtr pDrawable, GCPtr pGC, int shape, + int mode, int count, DDXPointPtr ptsIn); + +void +s3PolyGlyphBlt (DrawablePtr pDrawable, + GCPtr pGC, + int xInit, int y, + unsigned int nglyphInit, + CharInfoPtr *ppciInit, + pointer pglyphBase); + +void +s3ImageGlyphBlt (DrawablePtr pDrawable, + GCPtr pGC, + int x, int y, + unsigned int nglyph, + CharInfoPtr *ppci, + pointer pglyphBase); + +void +s3ImageTEGlyphBlt (DrawablePtr pDrawable, GCPtr pGC, + int xInit, int y, + unsigned int nglyphInit, + CharInfoPtr *ppciInit, + pointer pglyphBase); + +void +s3PolyTEGlyphBlt (DrawablePtr pDrawable, GCPtr pGC, + int x, int y, + unsigned int nglyph, CharInfoPtr *ppci, + pointer pglyphBase); + +void +s3Polylines (DrawablePtr pDrawable, GCPtr pGC, + int mode, int nptInit, DDXPointPtr pptInit); + +void +s3PolySegment (DrawablePtr pDrawable, GCPtr pGC, + int nsegInit, xSegment *pSegInit); + +void +s3FillBoxSolid (DrawablePtr pDrawable, int nBox, BoxPtr pBox, + unsigned long pixel, int alu, unsigned long planemask); + +void s3ValidateGC (GCPtr pGC, Mask changes, DrawablePtr pDrawable); + +void +s3CheckGCFill (GCPtr pGC); + +void +s3MoveGCFill (GCPtr pGC); + +void +s3SyncProc (DrawablePtr pDrawable); + +#endif --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/savage/s3.nick +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/savage/s3.nick @@ -0,0 +1,41 @@ +/* $RCSId: $ */ + +global f_ref = 14318000; + +function s3_clock (m, n, r) +{ + return f_ref * (m + 2) / ((n + 2) * (2 ^ r)); +} + +function s3_near (f1, f2) +{ + return abs (f1 - f2) < f1 / 10; +} + +function s3_clocks (f) +{ + auto m, n, r, ft; + auto dist, min_dist; + auto min_m, min_n, min_r; + + min_dist = f / 5; + for (r = 0; r <= 3; r++) + for (n = 0; n <= 31; n++) + for (m = 0; m <= 127; m++) + { + ft = s3_clock (m, n, r); + if (s3_near (ft, f)) + printf ("m %d n %d r %d = %d\n", + m, n, r, ft); + dist = abs (f - ft); + if (dist < min_dist) + { + min_dist = dist; + min_m = m; + min_n = n; + min_r = r; + } + } + printf ("m %d n %d r %d f %d dist %d\n", + min_m, min_n, min_r, s3_clock(min_m, min_n, min_r), min_dist); +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/savage/s3.h +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/savage/s3.h @@ -0,0 +1,537 @@ +/* + * Id: s3.h,v 1.2 1999/11/02 08:17:24 keithp Exp $ + * + * Copyright 1999 SuSE, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of SuSE not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. SuSE makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + * + * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE + * BE LIABLE FOR 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. + * + * Author: Keith Packard, SuSE, Inc. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/savage/s3.h,v 1.4 2000/05/06 22:17:45 keithp Exp $ */ + +#ifndef _S3_H_ +#define _S3_H_ + +#include "kdrive.h" +#include "s3reg.h" + +/* VESA Approved Register Definitions */ + +/* + * Linear Addressing 000 0000 - 0ff ffff (16m) + * Image data transfer 100 0000 - 100 7fff (32k) + * PCI config 100 8000 - 100 8043 + * Packed enhanced regs 100 8100 - 100 814a + * Streams regs 100 8180 - 100 81ff + * Current Y pos 100 82e8 + * CRT VGA 3b? regs 100 83b0 - 100 83bf + * CRT VGA 3c? regs 100 83c0 - 100 83cf + * CRT VGA 3d? regs 100 83d0 - 100 83df + * Subsystem status (42e8h) 100 8504 + * Advanced function (42e8h) 100 850c + * Enhanced regs 100 86e8 - 100 eeea + * Local peripheral bus 100 ff00 - 100 ff5c + * + * We don't care about the image transfer or PCI regs, so + * this structure starts at the packed enhanced regs + */ + +typedef volatile CARD32 VOL32; +typedef volatile CARD16 VOL16; +typedef volatile CARD8 VOL8; + +typedef volatile struct _s3 { + VOL32 alt_curxy; /* 8100 */ + VOL32 _pad0; /* 8104 */ + VOL32 alt_step; /* 8108 */ + VOL32 _pad1; /* 810c */ + VOL32 err_term; /* 8110 */ + VOL32 _pad2; /* 8114 */ + VOL32 cmd_gp_stat; /* 8118 */ + VOL32 short_stroke; /* 811c */ + VOL32 bg; /* 8120 */ + VOL32 fg; /* 8124 */ + VOL32 write_mask; /* 8128 */ + VOL32 read_mask; /* 812c */ + VOL32 color_cmp; /* 8130 */ + VOL32 alt_mix; /* 8134 */ + VOL32 scissors_tl; /* 8138 */ + VOL32 scissors_br; /* 813c */ +#if 0 + VOL16 pix_cntl; /* 8140 */ + VOL16 mult_misc2; /* 8142 */ +#else + VOL32 pix_cntl_mult_misc2; /* 8140 */ +#endif + VOL32 mult_misc_read_sel; /* 8144 */ + VOL32 alt_pcnt; /* 8148 min_axis_pcnt, maj_axis_pcnt */ + VOL8 _pad3a[0x1c]; /* 814c */ + VOL32 global_bitmap_1; /* 8168 */ + VOL32 global_bitmap_2; /* 816c */ + VOL32 primary_bitmap_1; /* 8170 */ + VOL32 primary_bitmap_2; /* 8174 */ + VOL32 secondary_bitmap_1; /* 8178 */ + VOL32 secondary_bitmap_2; /* 817c */ + VOL32 primary_stream_control; /* 8180 */ + VOL32 chroma_key_control; /* 8184 */ + VOL32 genlocking_control; /* 8188 */ + VOL8 _pad3b[0x4]; /* 818c */ + VOL32 secondary_stream_control; /* 8190 */ + VOL32 chroma_key_upper_bound; /* 8194 */ + VOL32 secondary_stream_h_scale; /* 8198 */ + VOL32 color_adjustment; /* 819c */ + VOL32 blend_control; /* 81a0 */ + VOL8 _pad3c[0x1c]; /* 81a4 */ + VOL32 primary_stream_addr_0; /* 81c0 */ + VOL32 primary_stream_addr_1; /* 81c4 */ + VOL32 primary_stream_stride; /* 81c8 */ + VOL32 secondary_stream_mbuf; /* 81cc */ + VOL32 secondary_stream_addr_0;/* 81d0 */ + VOL32 secondary_stream_addr_1;/* 81d4 */ + VOL32 secondary_stream_stride;/* 81d8 */ + VOL8 _pad81dc[4]; /* 81dc */ + VOL32 secondary_stream_vscale;/* 81e0 */ + VOL32 secondary_stream_vinit; /* 81e4 */ + VOL32 secondary_stream_scount;/* 81e8 */ + VOL32 streams_fifo; /* 81ec */ + VOL32 primary_stream_xy; /* 81f0 */ + VOL32 primary_stream_size; /* 81f4 */ + VOL32 secondary_stream_xy; /* 81f8 */ + VOL32 secondary_stream_size; /* 81fc */ + VOL8 _pad8200[0xe8]; /* 8200 */ + VOL32 cur_y; /* 82e8 */ + VOL8 _pad4[0x14]; /* 82ec */ + VOL32 primary_stream_mem; /* 8300 */ + VOL32 secondary_stream_mem; /* 8304 */ + VOL8 _pad8308[0xD2]; /* 8308 */ + VOL8 input_status_1; /* 83da */ + VOL8 _pad83db[0x131]; /* 83db */ + VOL32 adv_func_cntl; /* 850c */ + VOL8 _pad8510[0x5dd8]; /* 8510 */ + VOL32 pix_trans; /* e2e8 */ + VOL8 _pade2ec[0x3a92c]; /* e2ec */ + VOL32 cmd_overflow_buf_ptr; /* 48c18 */ + VOL8 _pad48c1c[0x8]; /* 48c1c */ + VOL32 bci_power_management; /* 48c24 */ + VOL8 _pad48c28[0x38]; /* 48c28 */ + VOL32 alt_status_0; /* 48c60 */ + VOL32 alt_status_1; /* 48c64 */ +} S3, *S3Ptr; + +#define VGA_STATUS_1_DTM 0x01 +#define VGA_STATUS_1_VSY 0x08 + +#define DAC_MASK 0x03c6 +#define DAC_R_INDEX 0x03c7 +#define DAC_W_INDEX 0x03c8 +#define DAC_DATA 0x03c9 +#define DISP_STAT 0x02e8 +#define H_TOTAL 0x02e8 +#define H_DISP 0x06e8 +#define H_SYNC_STRT 0x0ae8 +#define H_SYNC_WID 0x0ee8 +#define V_TOTAL 0x12e8 +#define V_DISP 0x16e8 +#define V_SYNC_STRT 0x1ae8 +#define V_SYNC_WID 0x1ee8 +#define DISP_CNTL 0x22e8 +#define ADVFUNC_CNTL 0x4ae8 +#define SUBSYS_STAT 0x42e8 +#define SUBSYS_CNTL 0x42e8 +#define ROM_PAGE_SEL 0x46e8 +#define CUR_Y 0x82e8 +#define CUR_X 0x86e8 +#define DESTY_AXSTP 0x8ae8 +#define DESTX_DIASTP 0x8ee8 +#define ERR_TERM 0x92e8 +#define MAJ_AXIS_PCNT 0x96e8 +#define GP_STAT 0x9ae8 +#define CMD 0x9ae8 +#define SHORT_STROKE 0x9ee8 +#define BKGD_COLOR 0xa2e8 +#define FRGD_COLOR 0xa6e8 +#define WRT_MASK 0xaae8 +#define RD_MASK 0xaee8 +#define COLOR_CMP 0xb2e8 +#define BKGD_MIX 0xb6e8 +#define FRGD_MIX 0xbae8 +#define MULTIFUNC_CNTL 0xbee8 +#define MIN_AXIS_PCNT 0x0000 +#define SCISSORS_T 0x1000 +#define SCISSORS_L 0x2000 +#define SCISSORS_B 0x3000 +#define SCISSORS_R 0x4000 +#define MEM_CNTL 0x5000 +#define PATTERN_L 0x8000 +#define PATTERN_H 0x9000 +#define PIX_CNTL 0xa000 +#define CONTROL_MISC2 0xd000 +#define PIX_TRANS 0xe2e8 + +/* Advanced Function Control Regsiter */ +#define CLKSEL 0x0004 +#define DISABPASSTHRU 0x0001 + +/* Graphics Processor Status Register */ + +#define GPNSLOT 13 + +#define GPBUSY_1 0x0080 +#define GPBUSY_2 0x0040 +#define GPBUSY_3 0x0020 +#define GPBUSY_4 0x0010 +#define GPBUSY_5 0x0008 +#define GPBUSY_6 0x0004 +#define GPBUSY_7 0x0002 +#define GPBUSY_8 0x0001 +#define GPBUSY_9 0x8000 +#define GPBUSY_10 0x4000 +#define GPBUSY_11 0x2000 +#define GPBUSY_12 0x1000 +#define GPBUSY_13 0x0800 + +#define GPEMPTY 0x0400 +#define GPBUSY 0x0200 +#define DATDRDY 0x0100 + +/* Command Register */ +#define CMD_NOP 0x0000 +#define CMD_LINE 0x2000 +#define CMD_RECT 0x4000 +#define CMD_RECTV1 0x6000 +#define CMD_RECTV2 0x8000 +#define CMD_LINEAF 0xa000 +#define CMD_BITBLT 0xc000 +#define CMD_PATBLT 0xe000 +#define CMD_OP_MSK 0xe000 +#define BYTSEQ 0x1000 +#define _32BITNOPAD 0x0600 +#define _32BIT 0x0400 +#define _16BIT 0x0200 +#define _8BIT 0x0000 +#define PCDATA 0x0100 +#define INC_Y 0x0080 +#define YMAJAXIS 0x0040 +#define INC_X 0x0020 +#define DRAW 0x0010 +#define LINETYPE 0x0008 +#define LASTPIX 0x0004 /* Draw last pixel in line */ +#define PLANAR 0x0002 +#define WRTDATA 0x0001 + +/* Background Mix Register */ +#define BSS_BKGDCOL 0x0000 +#define BSS_FRGDCOL 0x0020 +#define BSS_PCDATA 0x0040 +#define BSS_BITBLT 0x0060 + +/* Foreground Mix Register */ +#define FSS_BKGDCOL 0x0000 +#define FSS_FRGDCOL 0x0020 +#define FSS_PCDATA 0x0040 +#define FSS_BITBLT 0x0060 + +/* The Mixes */ +#define MIX_MASK 0x001f + +#define MIX_NOT_DST 0x0000 +#define MIX_0 0x0001 +#define MIX_1 0x0002 +#define MIX_DST 0x0003 +#define MIX_NOT_SRC 0x0004 +#define MIX_XOR 0x0005 +#define MIX_XNOR 0x0006 +#define MIX_SRC 0x0007 +#define MIX_NAND 0x0008 +#define MIX_NOT_SRC_OR_DST 0x0009 +#define MIX_SRC_OR_NOT_DST 0x000a +#define MIX_OR 0x000b +#define MIX_AND 0x000c +#define MIX_SRC_AND_NOT_DST 0x000d +#define MIX_NOT_SRC_AND_DST 0x000e +#define MIX_NOR 0x000f + +#define MIX_MIN 0x0010 +#define MIX_DST_MINUS_SRC 0x0011 +#define MIX_SRC_MINUS_DST 0x0012 +#define MIX_PLUS 0x0013 +#define MIX_MAX 0x0014 +#define MIX_HALF__DST_MINUS_SRC 0x0015 +#define MIX_HALF__SRC_MINUS_DST 0x0016 +#define MIX_AVERAGE 0x0017 +#define MIX_DST_MINUS_SRC_SAT 0x0018 +#define MIX_SRC_MINUS_DST_SAT 0x001a +#define MIX_HALF__DST_MINUS_SRC_SAT 0x001c +#define MIX_HALF__SRC_MINUS_DST_SAT 0x001e +#define MIX_AVERAGE_SAT 0x001f + +/* Pixel Control Register */ +#define MIXSEL_FRGDMIX 0x0000 +#define MIXSEL_PATT 0x0040 +#define MIXSEL_EXPPC 0x0080 +#define MIXSEL_EXPBLT 0x00c0 +#define COLCMPOP_F 0x0000 +#define COLCMPOP_T 0x0008 +#define COLCMPOP_GE 0x0010 +#define COLCMPOP_LT 0x0018 +#define COLCMPOP_NE 0x0020 +#define COLCMPOP_EQ 0x0028 +#define COLCMPOP_LE 0x0030 +#define COLCMPOP_GT 0x0038 +#define PLANEMODE 0x0004 + +/* Multifunction Control Misc 8144 */ +#define MISC_DST_BA_0 (0x0 << 0) +#define MISC_DST_BA_1 (0x1 << 0) +#define MISC_DST_BA_2 (0x2 << 0) +#define MISC_DST_BA_3 (0x3 << 0) +#define MISC_SRC_BA_0 (0x0 << 2) +#define MISC_SRC_BA_1 (0x1 << 2) +#define MISC_SRC_BA_2 (0x2 << 2) +#define MISC_SRC_BA_3 (0x3 << 2) +#define MISC_RSF (1 << 4) +#define MISC_EXT_CLIP (1 << 5) +#define MISC_SRC_NE (1 << 7) +#define MISC_ENB_CMP (1 << 8) +#define MISC_32B (1 << 9) +#define MISC_DC (1 << 11) +#define MISC_INDEX_E (0xe << 12) + +#define S3_SAVAGE4_SLOTS 0x0001ffff +#define S3_SAVAGE4_2DI 0x00800000 + +#define _s3WaitLoop(s3,mask,value){ \ + int __loop = 1000000; \ + while (((s3)->alt_status_0 & (mask)) != (value)) \ + if (--__loop == 0) { \ + ErrorF ("savage wait loop failed 0x%x\n", s3->alt_status_0); \ + break; \ + } \ +} + +#define S3_SAVAGE4_ROOM 10 + +#define _s3WaitSlots(s3,n) { \ + int __loop = 1000000; \ + while (((s3)->alt_status_0 & S3_SAVAGE4_SLOTS) >= S3_SAVAGE4_ROOM-(n)) \ + if (--__loop == 0) { \ + ErrorF ("savage wait loop failed 0x%x\n", s3->alt_status_0); \ + break; \ + } \ +} + +#define _s3WaitEmpty(s3) _s3WaitLoop(s3,S3_SAVAGE4_SLOTS, 0) +#define _s3WaitIdleEmpty(s3) _s3WaitLoop(s3,S3_SAVAGE4_SLOTS|S3_SAVAGE4_2DI, S3_SAVAGE4_2DI) +#define _s3WaitIdle(s3) _s3WaitLoop(s3,S3_SAVAGE4_2DI, S3_SAVAGE4_2DI) + +typedef struct _s3Cursor { + int width, height; + int xhot, yhot; + Bool has_cursor; + CursorPtr pCursor; + Pixel source, mask; +} S3Cursor; + +typedef struct _s3PatternCache { + int id; + int x, y; +} S3PatternCache; + +typedef struct _s3Patterns { + S3PatternCache *cache; + int ncache; + int last_used; + int last_id; +} S3Patterns; + +#define S3_CLOCK_REF 14318 /* KHz */ + +#define S3_CLOCK(m,n,r) ((S3_CLOCK_REF * ((m) + 2)) / (((n) + 2) * (1 << (r)))) + +#define S3_MAX_CLOCK 150000 /* KHz */ + +typedef struct _s3Timing { + /* label */ + int horizontal; + int vertical; + int rate; + /* horizontal timing */ + int hfp; /* front porch */ + int hbp; /* back porch */ + int hblank; /* blanking */ + /* vertical timing */ + int vfp; /* front porch */ + int vbp; /* back porch */ + int vblank; /* blanking */ + /* clock values */ + int dac_m; + int dac_n; + int dac_r; +} S3Timing; + +#define S3_TEXT_SAVE (64*1024) + +typedef struct _s3Save { + CARD8 cursor_fg; + CARD8 cursor_bg; + CARD8 lock1; + CARD8 lock2; + CARD8 locksrtc; + CARD8 clock_mode; + CARD32 alt_mix; + CARD32 write_mask; + CARD32 fg; + CARD32 bg; + CARD32 global_bitmap_1; + CARD32 global_bitmap_2; + CARD32 adv_func_cntl; + CARD32 primary_bitmap_1; + CARD32 primary_bitmap_2; + CARD32 secondary_bitmap_1; + CARD32 secondary_bitmap_2; + CARD32 primary_stream_control; + CARD32 blend_control; + CARD32 primary_stream_addr_0; + CARD32 primary_stream_addr_1; + CARD32 primary_stream_stride; + CARD32 primary_stream_xy; + CARD32 primary_stream_size; + CARD32 primary_stream_mem; + CARD32 secondary_stream_xy; + CARD32 secondary_stream_size; + CARD32 streams_fifo; + CARD8 text_save[S3_TEXT_SAVE]; +} S3Save; + +typedef struct _s3CardInfo { + S3Ptr s3; /* pointer to register structure */ + int memory; /* amount of memory */ + CARD8 *frameBuffer; /* pointer to frame buffer */ + CARD8 *registers; /* pointer to register map */ + S3Vga s3vga; + S3Save save; + Bool need_sync; + Bool bios_initialized; /* whether the bios has been run */ +} S3CardInfo; + +typedef struct _s3FbInfo { + CARD8 *offscreen; /* pointer to offscreen area */ + int offscreen_y; /* top y coordinate of offscreen area */ + int offscreen_x; /* top x coordinate of offscreen area */ + int offscreen_width; /* width of offscreen area */ + int offscreen_height; /* height of offscreen area */ + S3Patterns patterns; + CARD32 bitmap_offset; + int accel_stride; + int accel_bpp; + CARD32 chroma_key; +} S3FBInfo; + +typedef struct _s3ScreenInfo { + CARD8 *cursor_base; /* pointer to cursor area */ + S3Cursor cursor; + Bool managing_border; + Bool use_streams; + int primary_depth; + int current_ma; + CARD32 border_pixel; + S3FBInfo fb[KD_MAX_FB]; + RegionRec region[KD_MAX_FB]; + int fbmap[KD_MAX_FB+1]; /* map from fb to stream */ +} S3ScreenInfo; + +#define getS3CardInfo(kd) ((S3CardInfo *) ((kd)->card->driver)) +#define s3CardInfo(kd) S3CardInfo *s3c = getS3CardInfo(kd) + +#define getS3ScreenInfo(kd) ((S3ScreenInfo *) ((kd)->screen->driver)) +#define s3ScreenInfo(kd) S3ScreenInfo *s3s = getS3ScreenInfo(kd) + +Bool s3CardInit (KdCardInfo *); +Bool s3ScreenInit (KdScreenInfo *); +Bool s3Enable (ScreenPtr pScreen); +void s3Disable (ScreenPtr pScreen); +void s3Fini (ScreenPtr pScreen); + +Bool s3CursorInit (ScreenPtr pScreen); +void s3CursorEnable (ScreenPtr pScreen); +void s3CursorDisable (ScreenPtr pScreen); +void s3CursorFini (ScreenPtr pScreen); +void s3RecolorCursor (ScreenPtr pScreen, int ndef, xColorItem *pdefs); + +void s3DumbPaintWindow (WindowPtr pWin, RegionPtr pRegion, int what); +void s3DumbCopyWindow (WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc); + +Bool s3DrawInit (ScreenPtr pScreen); +void s3DrawEnable (ScreenPtr pScreen); +void s3DrawSync (ScreenPtr pScreen); +void s3DrawDisable (ScreenPtr pScreen); +void s3DrawFini (ScreenPtr pScreen); + +void s3GetColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs); +void s3PutColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs); + +void S3InitCard (KdCardAttr *attr); + +void s3GetClock (int target, int *Mp, int *Np, int *Rp, int maxM, int maxN, int maxR, int minVco); + +extern KdCardFuncs s3Funcs; + +/* + * Wait for the begining of the retrace interval + */ + +#define S3_RETRACE_LOOP_CHECK if (++_loop_count > 300000) {\ + DRAW_DEBUG ((DEBUG_FAILURE, "S3 wait loop failed at %s:%d", \ + __FILE__, __LINE__)); \ + break; \ +} + +#define DRAW_DEBUG(a) + +#define _s3WaitVRetrace(s3vga) { \ + int _loop_count; \ + _loop_count = 0; \ + while (s3GetImm(s3vga, s3_vertical_sync_active) != 0) S3_RETRACE_LOOP_CHECK; \ + _loop_count = 0; \ + while (s3GetImm(s3vga, s3_vertical_sync_active) == 0) S3_RETRACE_LOOP_CHECK; \ +} +#define _s3WaitVRetraceFast(s3) { \ + int _loop_count; \ + _loop_count = 0; \ + while (s3->input_status_1 & 8) S3_RETRACE_LOOP_CHECK; \ + _loop_count = 0; \ + while ((s3->input_status_1 & 8) == 0) S3_RETRACE_LOOP_CHECK; \ +} +/* + * Wait for the begining of the retrace interval + */ +#define _s3WaitVRetraceEnd(s3vga) { \ + int _loop_count; \ + _loop_count = 0; \ + while (s3GetImm(s3vga, s3_vertical_sync_active) == 0) S3_RETRACE_LOOP_CHECK; \ + _loop_count = 0; \ + while (s3GetImm(s3vga, s3_vertical_sync_active) != 0) S3_RETRACE_LOOP_CHECK; \ +} + +#define S3_CURSOR_WIDTH 64 +#define S3_CURSOR_HEIGHT 64 +#define S3_CURSOR_SIZE ((S3_CURSOR_WIDTH * S3_CURSOR_HEIGHT + 7) / 8) + +#define S3_TILE_SIZE 8 + +#endif /* _S3_H_ */ --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/savage/s3draw.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/savage/s3draw.c @@ -0,0 +1,3244 @@ +/* + * Id: s3draw.c,v 1.1 1999/11/02 03:54:47 keithp Exp $ + * + * Copyright 1999 SuSE, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of SuSE not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. SuSE makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + * + * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE + * BE LIABLE FOR 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. + * + * Author: Keith Packard, SuSE, Inc. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/savage/s3draw.c,v 1.6 2001/05/29 04:54:11 keithp Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "s3.h" +#include "s3draw.h" + +#include "Xmd.h" +#include "gcstruct.h" +#include "scrnintstr.h" +#include "pixmapstr.h" +#include "regionstr.h" +#include "mistruct.h" +#include "fontstruct.h" +#include "dixfontstr.h" +#include "fb.h" +#include "migc.h" +#include "miline.h" + +/* + * Map X rops to S3 rops + */ + +short s3alu[16] = { + MIX_0, + MIX_AND, + MIX_SRC_AND_NOT_DST, + MIX_SRC, + MIX_NOT_SRC_AND_DST, + MIX_DST, + MIX_XOR, + MIX_OR, + MIX_NOR, + MIX_XNOR, + MIX_NOT_DST, + MIX_SRC_OR_NOT_DST, + MIX_NOT_SRC, + MIX_NOT_SRC_OR_DST, + MIX_NAND, + MIX_1 +}; + +/* + * Handle pixel transfers + */ + +#define BURST +#ifdef BURST +#define PixTransDeclare VOL32 *pix_trans_base = (VOL32 *) (s3c->registers),\ + *pix_trans = pix_trans_base +#define PixTransStart(n) if (pix_trans + (n) > pix_trans_base + 8192) pix_trans = pix_trans_base +#define PixTransStore(t) *pix_trans++ = (t) +#else +#define PixTransDeclare VOL32 *pix_trans = &s3->pix_trans +#define PixTransStart(n) +#define PixTransStore(t) *pix_trans = (t) +#endif + +int s3GCPrivateIndex; +int s3WindowPrivateIndex; +int s3Generation; + +/* + s3DoBitBlt + ============= + Bit Blit for all window to window blits. +*/ + +#define sourceInvarient(alu) (((alu) & 3) == (((alu) >> 2) & 3)) + +void +s3CopyNtoN (DrawablePtr pSrcDrawable, + DrawablePtr pDstDrawable, + GCPtr pGC, + BoxPtr pbox, + int nbox, + int dx, + int dy, + Bool reverse, + Bool upsidedown, + Pixel bitplane, + void *closure) +{ + SetupS3(pDstDrawable->pScreen); + int srcX, srcY, dstX, dstY; + int w, h; + int flags; + + if (sourceInvarient (pGC->alu)) + { + s3FillBoxSolid (pDstDrawable, nbox, pbox, 0, pGC->alu, pGC->planemask); + return; + } + + s3SetGlobalBitmap (pDstDrawable->pScreen, s3GCMap (pGC)); + _s3SetBlt(s3,pGC->alu,pGC->planemask); + DRAW_DEBUG ((DEBUG_RENDER, "s3CopyNtoN alu %d planemask 0x%x", + pGC->alu, pGC->planemask)); + while (nbox--) + { + w = pbox->x2 - pbox->x1; + h = pbox->y2 - pbox->y1; + flags = 0; + if (reverse) + { + dstX = pbox->x2 - 1; + } + else + { + dstX = pbox->x1; + flags |= INC_X; + } + srcX = dstX + dx; + + if (upsidedown) + { + dstY = pbox->y2 - 1; + } + else + { + dstY = pbox->y1; + flags |= INC_Y; + } + srcY = dstY + dy; + + _s3Blt (s3, srcX, srcY, dstX, dstY, w, h, flags); + pbox++; + } + MarkSyncS3 (pSrcDrawable->pScreen); +} + +RegionPtr +s3CopyArea(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC, + int srcx, int srcy, int width, int height, int dstx, int dsty) +{ + SetupS3(pDstDrawable->pScreen); + + if (pSrcDrawable->type == DRAWABLE_WINDOW && + pDstDrawable->type == DRAWABLE_WINDOW) + { + return fbDoCopy (pSrcDrawable, pDstDrawable, pGC, + srcx, srcy, width, height, + dstx, dsty, s3CopyNtoN, 0, 0); + } + return KdCheckCopyArea (pSrcDrawable, pDstDrawable, pGC, + srcx, srcy, width, height, dstx, dsty); +} + +typedef struct _s31toNargs { + unsigned long copyPlaneFG, copyPlaneBG; + Bool opaque; +} s31toNargs; + +void +_s3Stipple (S3CardInfo *s3c, + FbStip *psrcBase, + FbStride widthSrc, + int srcx, + int srcy, + int dstx, + int dsty, + int width, + int height) +{ + S3Ptr s3 = s3c->s3; + FbStip *psrcLine, *psrc; + FbStride widthRest; + FbStip bits, tmp, lastTmp; + int leftShift, rightShift; + int nl, nlMiddle; + int r; + PixTransDeclare; + + /* Compute blt address and parameters */ + psrc = psrcBase + srcy * widthSrc + (srcx >> 5); + nlMiddle = (width + 31) >> 5; + leftShift = srcx & 0x1f; + rightShift = 32 - leftShift; + widthRest = widthSrc - nlMiddle; + + _s3PlaneBlt(s3,dstx,dsty,width,height); + + if (leftShift == 0) + { + while (height--) + { + nl = nlMiddle; + PixTransStart(nl); + while (nl--) + { + tmp = *psrc++; + S3AdjustBits32 (tmp); + PixTransStore (tmp); + } + psrc += widthRest; + } + } + else + { + widthRest--; + while (height--) + { + bits = *psrc++; + nl = nlMiddle; + PixTransStart(nl); + while (nl--) + { + tmp = FbStipLeft(bits, leftShift); + bits = *psrc++; + tmp |= FbStipRight(bits, rightShift); + S3AdjustBits32(tmp); + PixTransStore (tmp); + } + psrc += widthRest; + } + } +} + +void +s3Copy1toN (DrawablePtr pSrcDrawable, + DrawablePtr pDstDrawable, + GCPtr pGC, + BoxPtr pbox, + int nbox, + int dx, + int dy, + Bool reverse, + Bool upsidedown, + Pixel bitplane, + void *closure) +{ + SetupS3(pDstDrawable->pScreen); + + s31toNargs *args = closure; + int dstx, dsty; + FbStip *psrcBase; + FbStride widthSrc; + int srcBpp; + int srcXoff, srcYoff; + + if (args->opaque && sourceInvarient (pGC->alu)) + { + s3FillBoxSolid (pDstDrawable, nbox, pbox, + pGC->bgPixel, pGC->alu, pGC->planemask); + return; + } + + s3SetGlobalBitmap (pDstDrawable->pScreen, s3GCMap (pGC)); + fbGetStipDrawable (pSrcDrawable, psrcBase, widthSrc, srcBpp, srcXoff, srcYoff); + + if (args->opaque) + { + _s3SetOpaquePlaneBlt(s3,pGC->alu,pGC->planemask,args->copyPlaneFG, + args->copyPlaneBG); + } + else + { + _s3SetTransparentPlaneBlt (s3, pGC->alu, + pGC->planemask, args->copyPlaneFG); + } + + while (nbox--) + { + dstx = pbox->x1; + dsty = pbox->y1; + + _s3Stipple (s3c, + psrcBase, widthSrc, + dstx + dx - srcXoff, dsty + dy - srcYoff, + dstx, dsty, + pbox->x2 - dstx, pbox->y2 - dsty); + pbox++; + } + MarkSyncS3 (pDstDrawable->pScreen); +} + +RegionPtr +s3CopyPlane(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC, + int srcx, int srcy, int width, int height, + int dstx, int dsty, unsigned long bitPlane) +{ + SetupS3 (pDstDrawable->pScreen); + RegionPtr ret; + s31toNargs args; + + if (pDstDrawable->type == DRAWABLE_WINDOW && + pSrcDrawable->depth == 1) + { + args.copyPlaneFG = pGC->fgPixel; + args.copyPlaneBG = pGC->bgPixel; + args.opaque = TRUE; + return fbDoCopy (pSrcDrawable, pDstDrawable, pGC, + srcx, srcy, width, height, + dstx, dsty, s3Copy1toN, bitPlane, &args); + } + return KdCheckCopyPlane(pSrcDrawable, pDstDrawable, pGC, + srcx, srcy, width, height, + dstx, dsty, bitPlane); +} + +void +s3PushPixels (GCPtr pGC, PixmapPtr pBitmap, + DrawablePtr pDrawable, + int w, int h, int x, int y) +{ + SetupS3 (pDrawable->pScreen); + s31toNargs args; + + if (pDrawable->type == DRAWABLE_WINDOW && pGC->fillStyle == FillSolid) + { + args.opaque = FALSE; + args.copyPlaneFG = pGC->fgPixel; + (void) fbDoCopy ((DrawablePtr) pBitmap, pDrawable, pGC, + 0, 0, w, h, x, y, s3Copy1toN, 1, &args); + } + else + { + KdCheckPushPixels (pGC, pBitmap, pDrawable, w, h, x, y); + } +} + +void +s3FillBoxSolid (DrawablePtr pDrawable, int nBox, BoxPtr pBox, + unsigned long pixel, int alu, unsigned long planemask) +{ + SetupS3(pDrawable->pScreen); + register int r; + + s3SetGlobalBitmap (pDrawable->pScreen, s3DrawMap (pDrawable)); + _s3SetSolidFill(s3,pixel,alu,planemask); + + while (nBox--) { + _s3SolidRect(s3,pBox->x1,pBox->y1,pBox->x2-pBox->x1,pBox->y2-pBox->y1); + pBox++; + } + MarkSyncS3 (pDrawable->pScreen); +} + +void +_s3SetPattern (ScreenPtr pScreen, int ma, + int alu, unsigned long planemask, s3PatternPtr pPattern) +{ + SetupS3(pScreen); + S3PatternCache *cache; + + _s3LoadPattern (pScreen, ma, pPattern); + cache = pPattern->cache; + + switch (pPattern->fillStyle) { + case FillTiled: + _s3SetTile(s3,alu,planemask); + break; + case FillStippled: + _s3SetStipple(s3,alu,planemask,pPattern->fore); + break; + case FillOpaqueStippled: + _s3SetOpaqueStipple(s3,alu,planemask,pPattern->fore,pPattern->back); + break; + } +} + +void +s3FillBoxPattern (DrawablePtr pDrawable, int nBox, BoxPtr pBox, + int alu, unsigned long planemask, s3PatternPtr pPattern) +{ + SetupS3(pDrawable->pScreen); + S3PatternCache *cache; + int patx, paty; + + s3SetGlobalBitmap (pDrawable->pScreen, s3DrawMap (pDrawable)); + _s3SetPattern (pDrawable->pScreen, s3DrawMap(pDrawable), alu, planemask, pPattern); + cache = pPattern->cache; + while (nBox--) + { + _s3PatRect(s3,cache->x, cache->y, + pBox->x1, pBox->y1, + pBox->x2-pBox->x1, pBox->y2-pBox->y1); + pBox++; + } + MarkSyncS3 (pDrawable->pScreen); +} + +void +s3FillBoxLargeStipple (DrawablePtr pDrawable, GCPtr pGC, + int nBox, BoxPtr pBox) +{ + SetupS3(pDrawable->pScreen); + DrawablePtr pStipple = &pGC->stipple->drawable; + int xRot = pGC->patOrg.x + pDrawable->x; + int yRot = pGC->patOrg.y + pDrawable->y; + FbStip *stip; + FbStride stipStride; + int stipBpp; + int stipXoff, stipYoff; + int stipWidth, stipHeight; + int dstX, dstY, width, height; + + stipWidth = pStipple->width; + stipHeight = pStipple->height; + fbGetStipDrawable (pStipple, stip, stipStride, stipBpp, stipXoff, stipYoff); + + s3SetGlobalBitmap (pDrawable->pScreen, s3DrawMap (pDrawable)); + if (pGC->fillStyle == FillOpaqueStippled) + { + _s3SetOpaquePlaneBlt(s3,pGC->alu,pGC->planemask, + pGC->fgPixel, pGC->bgPixel); + + } + else + { + _s3SetTransparentPlaneBlt(s3,pGC->alu,pGC->planemask, pGC->fgPixel); + } + + while (nBox--) + { + int stipX, stipY, sx; + int widthTmp; + int h, w; + int x, y; + + dstX = pBox->x1; + dstY = pBox->y1; + width = pBox->x2 - pBox->x1; + height = pBox->y2 - pBox->y1; + pBox++; + modulus (dstY - yRot - stipYoff, stipHeight, stipY); + modulus (dstX - xRot - stipXoff, stipWidth, stipX); + y = dstY; + while (height) + { + h = stipHeight - stipY; + if (h > height) + h = height; + height -= h; + widthTmp = width; + x = dstX; + sx = stipX; + while (widthTmp) + { + w = (stipWidth - sx); + if (w > widthTmp) + w = widthTmp; + widthTmp -= w; + _s3Stipple (s3c, + stip, + stipStride, + sx, stipY, + x, y, + w, h); + x += w; + sx = 0; + } + y += h; + stipY = 0; + } + } + MarkSyncS3 (pDrawable->pScreen); +} + +#define NUM_STACK_RECTS 1024 + +void +s3PolyFillRect (DrawablePtr pDrawable, GCPtr pGC, + int nrectFill, xRectangle *prectInit) +{ + s3GCPrivate(pGC); + xRectangle *prect; + RegionPtr prgnClip; + register BoxPtr pbox; + register BoxPtr pboxClipped; + BoxPtr pboxClippedBase; + BoxPtr pextent; + BoxRec stackRects[NUM_STACK_RECTS]; + int numRects; + int n; + int xorg, yorg; + int x, y; + + prgnClip = fbGetCompositeClip(pGC); + xorg = pDrawable->x; + yorg = pDrawable->y; + + if (xorg || yorg) + { + prect = prectInit; + n = nrectFill; + while(n--) + { + prect->x += xorg; + prect->y += yorg; + prect++; + } + } + + prect = prectInit; + + numRects = REGION_NUM_RECTS(prgnClip) * nrectFill; + if (numRects > NUM_STACK_RECTS) + { + pboxClippedBase = (BoxPtr)ALLOCATE_LOCAL(numRects * sizeof(BoxRec)); + if (!pboxClippedBase) + return; + } + else + pboxClippedBase = stackRects; + + pboxClipped = pboxClippedBase; + + if (REGION_NUM_RECTS(prgnClip) == 1) + { + int x1, y1, x2, y2, bx2, by2; + + pextent = REGION_RECTS(prgnClip); + x1 = pextent->x1; + y1 = pextent->y1; + x2 = pextent->x2; + y2 = pextent->y2; + while (nrectFill--) + { + if ((pboxClipped->x1 = prect->x) < x1) + pboxClipped->x1 = x1; + + if ((pboxClipped->y1 = prect->y) < y1) + pboxClipped->y1 = y1; + + bx2 = (int) prect->x + (int) prect->width; + if (bx2 > x2) + bx2 = x2; + pboxClipped->x2 = bx2; + + by2 = (int) prect->y + (int) prect->height; + if (by2 > y2) + by2 = y2; + pboxClipped->y2 = by2; + + prect++; + if ((pboxClipped->x1 < pboxClipped->x2) && + (pboxClipped->y1 < pboxClipped->y2)) + { + pboxClipped++; + } + } + } + else + { + int x1, y1, x2, y2, bx2, by2; + + pextent = REGION_EXTENTS(pGC->pScreen, prgnClip); + x1 = pextent->x1; + y1 = pextent->y1; + x2 = pextent->x2; + y2 = pextent->y2; + while (nrectFill--) + { + BoxRec box; + + if ((box.x1 = prect->x) < x1) + box.x1 = x1; + + if ((box.y1 = prect->y) < y1) + box.y1 = y1; + + bx2 = (int) prect->x + (int) prect->width; + if (bx2 > x2) + bx2 = x2; + box.x2 = bx2; + + by2 = (int) prect->y + (int) prect->height; + if (by2 > y2) + by2 = y2; + box.y2 = by2; + + prect++; + + if ((box.x1 >= box.x2) || (box.y1 >= box.y2)) + continue; + + n = REGION_NUM_RECTS (prgnClip); + pbox = REGION_RECTS(prgnClip); + + /* clip the rectangle to each box in the clip region + this is logically equivalent to calling Intersect() + */ + while(n--) + { + pboxClipped->x1 = max(box.x1, pbox->x1); + pboxClipped->y1 = max(box.y1, pbox->y1); + pboxClipped->x2 = min(box.x2, pbox->x2); + pboxClipped->y2 = min(box.y2, pbox->y2); + pbox++; + + /* see if clipping left anything */ + if(pboxClipped->x1 < pboxClipped->x2 && + pboxClipped->y1 < pboxClipped->y2) + { + pboxClipped++; + } + } + } + } + if (pboxClipped != pboxClippedBase) + { + if (pGC->fillStyle == FillSolid) + s3FillBoxSolid(pDrawable, + pboxClipped-pboxClippedBase, pboxClippedBase, + pGC->fgPixel, pGC->alu, pGC->planemask); + else if (s3Priv->pPattern) + s3FillBoxPattern (pDrawable, + pboxClipped-pboxClippedBase, pboxClippedBase, + pGC->alu, pGC->planemask, + s3Priv->pPattern); + else + s3FillBoxLargeStipple (pDrawable, pGC, + pboxClipped-pboxClippedBase, + pboxClippedBase); + } + if (pboxClippedBase != stackRects) + DEALLOCATE_LOCAL(pboxClippedBase); +} + +void +_s3FillSpanLargeStipple (DrawablePtr pDrawable, GCPtr pGC, + int n, DDXPointPtr ppt, int *pwidth) +{ + SetupS3 (pDrawable->pScreen); + DrawablePtr pStipple = &pGC->stipple->drawable; + int xRot = pGC->patOrg.x + pDrawable->x; + int yRot = pGC->patOrg.y + pDrawable->y; + FbStip *stip; + FbStride stipStride; + int stipBpp; + int stipXoff, stipYoff; + int stipWidth, stipHeight; + int dstX, dstY, width, height; + + s3SetGlobalBitmap (pDrawable->pScreen, s3GCMap (pGC)); + stipWidth = pStipple->width; + stipHeight = pStipple->height; + fbGetStipDrawable (pStipple, stip, stipStride, stipBpp, stipXoff, stipYoff); + if (pGC->fillStyle == FillOpaqueStippled) + { + _s3SetOpaquePlaneBlt(s3,pGC->alu,pGC->planemask, + pGC->fgPixel, pGC->bgPixel); + + } + else + { + _s3SetTransparentPlaneBlt(s3,pGC->alu,pGC->planemask, pGC->fgPixel); + } + while (n--) + { + int stipX, stipY, sx; + int w; + int x, y; + + dstX = ppt->x; + dstY = ppt->y; + ppt++; + width = *pwidth++; + modulus (dstY - yRot - stipYoff, stipHeight, stipY); + modulus (dstX - xRot - stipXoff, stipWidth, stipX); + y = dstY; + x = dstX; + sx = stipX; + while (width) + { + w = (stipWidth - sx); + if (w > width) + w = width; + width -= w; + _s3Stipple (s3c, + stip, + stipStride, + sx, stipY, + x, y, + w, 1); + x += w; + sx = 0; + } + } +} + +void +s3FillSpans (DrawablePtr pDrawable, GCPtr pGC, int n, + DDXPointPtr ppt, int *pwidth, int fSorted) +{ + s3GCPrivate(pGC); + SetupS3(pDrawable->pScreen); + int x, y, x1, y1, x2, y2; + int width; + /* next three parameters are post-clip */ + int nTmp; + int *pwidthFree;/* copies of the pointers to free */ + DDXPointPtr pptFree; + BoxPtr extents; + S3PatternCache *cache; + RegionPtr pClip = fbGetCompositeClip (pGC); + + s3SetGlobalBitmap (pDrawable->pScreen, s3GCMap (pGC)); + if (REGION_NUM_RECTS(pClip) == 1 && + (pGC->fillStyle == FillSolid || s3Priv->pPattern)) + { + extents = REGION_RECTS(pClip); + x1 = extents->x1; + x2 = extents->x2; + y1 = extents->y1; + y2 = extents->y2; + if (pGC->fillStyle == FillSolid) + { + _s3SetSolidFill(s3,pGC->fgPixel,pGC->alu,pGC->planemask); + cache = 0; + } + else + { + _s3SetPattern (pDrawable->pScreen, s3GCMap(pGC), pGC->alu, pGC->planemask, + s3Priv->pPattern); + cache = s3Priv->pPattern->cache; + } + while (n--) + { + y = ppt->y; + if (y1 <= y && y < y2) + { + x = ppt->x; + width = *pwidth; + if (x < x1) + { + width -= (x1 - x); + x = x1; + } + if (x2 < x + width) + width = x2 - x; + if (width > 0) + { + if (cache) + { + _s3PatRect(s3, cache->x, cache->y, x, y, width, 1); + } + else + { + _s3SolidRect(s3,x,y,width,1); + } + } + } + ppt++; + pwidth++; + } + } + else + { + nTmp = n * miFindMaxBand(pClip); + pwidthFree = (int *)ALLOCATE_LOCAL(nTmp * sizeof(int)); + pptFree = (DDXPointRec *)ALLOCATE_LOCAL(nTmp * sizeof(DDXPointRec)); + if(!pptFree || !pwidthFree) + { + if (pptFree) DEALLOCATE_LOCAL(pptFree); + if (pwidthFree) DEALLOCATE_LOCAL(pwidthFree); + return; + } + n = miClipSpans(fbGetCompositeClip(pGC), + ppt, pwidth, n, + pptFree, pwidthFree, fSorted); + pwidth = pwidthFree; + ppt = pptFree; + if (pGC->fillStyle == FillSolid) + { + _s3SetSolidFill(s3,pGC->fgPixel,pGC->alu,pGC->planemask); + while (n--) + { + x = ppt->x; + y = ppt->y; + ppt++; + width = *pwidth++; + if (width) + { + _s3SolidRect(s3,x,y,width,1); + } + } + } + else if (s3Priv->pPattern) + { + _s3SetPattern (pDrawable->pScreen, s3GCMap(pGC), pGC->alu, pGC->planemask, + s3Priv->pPattern); + cache = s3Priv->pPattern->cache; + while (n--) + { + x = ppt->x; + y = ppt->y; + ppt++; + width = *pwidth++; + if (width) + { + _s3PatRect(s3, cache->x, cache->y, x, y, width, 1); + } + } + } + else + { + _s3FillSpanLargeStipple (pDrawable, pGC, n, ppt, pwidth); + } + DEALLOCATE_LOCAL(pptFree); + DEALLOCATE_LOCAL(pwidthFree); + } + MarkSyncS3 (pDrawable->pScreen); +} + +#include "mifillarc.h" + +#define FILLSPAN(s3,y,__x1,__x2) {\ + DRAW_DEBUG ((DEBUG_ARCS, "FILLSPAN %d: %d->%d", y, __x1, __x2)); \ + if ((__x2) >= (__x1)) {\ + _s3SolidRect(s3,(__x1),(y),(__x2)-(__x1)+1,1); \ + } \ +} + +#define FILLSLICESPANS(flip,__y) \ + if (!flip) \ + { \ + FILLSPAN(s3,__y,xl,xr) \ + } \ + else \ + { \ + xc = xorg - x; \ + FILLSPAN(s3, __y, xc, xr) \ + xc += slw - 1; \ + FILLSPAN(s3, __y, xl, xc) \ + } + +static void +_s3FillEllipse (DrawablePtr pDraw, S3Ptr s3, xArc *arc) +{ + KdScreenPriv(pDraw->pScreen); + int x, y, e; + int yk, xk, ym, xm, dx, dy, xorg, yorg; + int y_top, y_bot; + miFillArcRec info; + register int xpos; + int slw; + + s3SetGlobalBitmap (pDraw->pScreen, s3DrawMap (pDraw)); + miFillArcSetup(arc, &info); + MIFILLARCSETUP(); + y_top = pDraw->y + yorg - y; + y_bot = pDraw->y + yorg + y + dy; + xorg += pDraw->x; + while (y) + { + y_top++; + y_bot--; + MIFILLARCSTEP(slw); + if (!slw) + continue; + xpos = xorg - x; + _s3SolidRect (s3,xpos,y_top,slw,1); + if (miFillArcLower(slw)) + _s3SolidRect (s3,xpos,y_bot,slw,1); + } +} + + +static void +_s3FillArcSlice (DrawablePtr pDraw, GCPtr pGC, S3Ptr s3, xArc *arc) +{ + KdScreenPriv(pDraw->pScreen); + int yk, xk, ym, xm, dx, dy, xorg, yorg, slw; + register int x, y, e; + miFillArcRec info; + miArcSliceRec slice; + int xl, xr, xc; + int y_top, y_bot; + + s3SetGlobalBitmap (pDraw->pScreen, s3DrawMap (pDraw)); + DRAW_DEBUG ((DEBUG_ARCS, "slice %dx%d+%d+%d %d->%d", + arc->width, arc->height, arc->x, arc->y, + arc->angle1, arc->angle2)); + miFillArcSetup(arc, &info); + miFillArcSliceSetup(arc, &slice, pGC); + DRAW_DEBUG ((DEBUG_ARCS, "edge1.x %d edge2.x %d", + slice.edge1.x, slice.edge2.x)); + MIFILLARCSETUP(); + DRAW_DEBUG ((DEBUG_ARCS, "xorg %d yorg %d", + xorg, yorg)); + xorg += pDraw->x; + yorg += pDraw->y; + y_top = yorg - y; + y_bot = yorg + y + dy; + slice.edge1.x += pDraw->x; + slice.edge2.x += pDraw->x; + DRAW_DEBUG ((DEBUG_ARCS, "xorg %d y_top %d y_bot %d", + xorg, y_top, y_bot)); + while (y > 0) + { + y_top++; + y_bot--; + MIFILLARCSTEP(slw); + MIARCSLICESTEP(slice.edge1); + MIARCSLICESTEP(slice.edge2); + if (miFillSliceUpper(slice)) + { + MIARCSLICEUPPER(xl, xr, slice, slw); + FILLSLICESPANS(slice.flip_top, y_top); + } + if (miFillSliceLower(slice)) + { + MIARCSLICELOWER(xl, xr, slice, slw); + FILLSLICESPANS(slice.flip_bot, y_bot); + } + } +} + +void +s3PolyFillArcSolid (DrawablePtr pDraw, GCPtr pGC, int narcs, xArc *parcs) +{ + SetupS3(pDraw->pScreen); + xArc *arc; + int i; + int x, y; + BoxRec box; + RegionPtr pClip = fbGetCompositeClip(pGC); + BOOL set; + + set = FALSE; + for (; --narcs >= 0; parcs++) + { + if (miFillArcEmpty(parcs)) + continue; + if (miCanFillArc(parcs)) + { + box.x1 = parcs->x + pDraw->x; + box.y1 = parcs->y + pDraw->y; + box.x2 = box.x1 + (int)parcs->width + 1; + box.y2 = box.y1 + (int)parcs->height + 1; + switch (RECT_IN_REGION(pDraw->pScreen, pClip, &box)) + { + case rgnIN: + if (!set) + { + _s3SetSolidFill (s3, pGC->fgPixel, pGC->alu, pGC->planemask); + set = TRUE; + } + if ((parcs->angle2 >= FULLCIRCLE) || + (parcs->angle2 <= -FULLCIRCLE)) + { + DRAW_DEBUG ((DEBUG_ARCS, "Full circle ellipse %dx%d", + parcs->width, parcs->height)); + _s3FillEllipse (pDraw, s3, parcs); + } + else + { + DRAW_DEBUG ((DEBUG_ARCS, "Partial ellipse %dx%d", + parcs->width, parcs->height)); + _s3FillArcSlice (pDraw, pGC, s3, parcs); + } + /* fall through ... */ + case rgnOUT: + continue; + case rgnPART: + break; + } + } + if (set) + { + MarkSyncS3 (pDraw->pScreen); + set = FALSE; + } + KdCheckPolyFillArc(pDraw, pGC, 1, parcs); + } + if (set) + { + MarkSyncS3 (pDraw->pScreen); + set = FALSE; + } +} + +void +s3FillPoly (DrawablePtr pDrawable, GCPtr pGC, int shape, + int mode, int countInit, DDXPointPtr ptsIn) +{ + SetupS3(pDrawable->pScreen); + int nwidth; + int maxy; + int origin; + int count; + register int vertex1, vertex2; + int c; + RegionPtr pClip = fbGetCompositeClip(pGC); + BoxPtr extents; + int clip; + int y, sy; + int *vertex1p, *vertex2p; + int *endp; + int x1, x2, sx; + int dx1, dx2; + int dy1, dy2; + int e1, e2; + int step1, step2; + int sign1, sign2; + int h; + int l, r; + int nmiddle; + + if (mode == CoordModePrevious || REGION_NUM_RECTS(pClip) != 1) + { + KdCheckFillPolygon (pDrawable, pGC, shape, mode, countInit, ptsIn); + return; + } + + s3SetGlobalBitmap (pDrawable->pScreen, s3GCMap (pGC)); + sy = pDrawable->y; + sx = pDrawable->x; + origin = *((int *) &pDrawable->x); + origin -= (origin & 0x8000) << 1; + extents = &pClip->extents; + vertex1 = *((int *) &extents->x1) - origin; + vertex2 = *((int *) &extents->x2) - origin - 0x00010001; + clip = 0; + + y = 32767; + maxy = 0; + vertex2p = (int *) ptsIn; + endp = vertex2p + countInit; + if (shape == Convex) + { + count = countInit; + while (count--) + { + c = *vertex2p; + clip |= (c - vertex1) | (vertex2 - c); + c = intToY(c); + DRAW_DEBUG ((DEBUG_POLYGON, "Y coordinate %d", c)); + if (c < y) + { + y = c; + vertex1p = vertex2p; + } + vertex2p++; + if (c > maxy) + maxy = c; + } + } + else + { + int yFlip = 0; + dx1 = 1; + x2 = -1; + x1 = -1; + count = countInit; + while (count--) + { + c = *vertex2p; + clip |= (c - vertex1) | (vertex2 - c); + c = intToY(c); + DRAW_DEBUG ((DEBUG_POLYGON, "Y coordinate %d", c)); + if (c < y) + { + y = c; + vertex1p = vertex2p; + } + vertex2p++; + if (c > maxy) + maxy = c; + if (c == x1) + continue; + if (dx1 > 0) + { + if (x2 < 0) + x2 = c; + else + dx2 = dx1 = (c - x1) >> 31; + } + else + if ((c - x1) >> 31 != dx1) + { + dx1 = ~dx1; + yFlip++; + } + x1 = c; + } + x1 = (x2 - c) >> 31; + if (x1 != dx1) + yFlip++; + if (x1 != dx2) + yFlip++; + if (yFlip != 2) + clip = 0x8000; + } + if (y == maxy) + return; + + if (clip & 0x80008000) + { + KdCheckFillPolygon (pDrawable, pGC, shape, mode, countInit, ptsIn); + return; + } + _s3SetSolidFill(s3,pGC->fgPixel,pGC->alu,pGC->planemask); + + vertex2p = vertex1p; + vertex2 = vertex1 = *vertex2p++; + if (vertex2p == endp) + vertex2p = (int *) ptsIn; +#define Setup(c,x,vertex,dx,dy,e,sign,step) {\ + x = intToX(vertex); \ + if (dy = intToY(c) - y) { \ + dx = intToX(c) - x; \ + step = 0; \ + if (dx >= 0) \ + { \ + e = 0; \ + sign = 1; \ + if (dx >= dy) {\ + step = dx / dy; \ + dx = dx % dy; \ + } \ + } \ + else \ + { \ + e = 1 - dy; \ + sign = -1; \ + dx = -dx; \ + if (dx >= dy) { \ + step = - (dx / dy); \ + dx = dx % dy; \ + } \ + } \ + } \ + x += sx; \ + vertex = c; \ +} + +#define Step(x,dx,dy,e,sign,step) {\ + x += step; \ + if ((e += dx) > 0) \ + { \ + x += sign; \ + e -= dy; \ + } \ +} + sy += y; + DRAW_DEBUG ((DEBUG_POLYGON, "Starting polygon at %d", sy)); + for (;;) + { + DRAW_DEBUG ((DEBUG_POLYGON, "vertex1 0x%x vertex2 0x%x y %d vy1 %d vy2 %d", + vertex1, vertex2, + y, intToY(vertex1), intToY (vertex2))); + if (y == intToY(vertex1)) + { + DRAW_DEBUG ((DEBUG_POLYGON, "Find next -- vertext")); + do + { + if (vertex1p == (int *) ptsIn) + vertex1p = endp; + c = *--vertex1p; + Setup (c,x1,vertex1,dx1,dy1,e1,sign1,step1); + DRAW_DEBUG ((DEBUG_POLYGON, "-- vertex 0x%x y %d", + vertex1, intToY(vertex1))); + } while (y >= intToY(vertex1)); + h = dy1; + } + else + { + Step(x1,dx1,dy1,e1,sign1,step1) + h = intToY(vertex1) - y; + } + if (y == intToY(vertex2)) + { + DRAW_DEBUG ((DEBUG_POLYGON, "Find next ++ vertext")); + do + { + c = *vertex2p++; + if (vertex2p == endp) + vertex2p = (int *) ptsIn; + Setup (c,x2,vertex2,dx2,dy2,e2,sign2,step2) + DRAW_DEBUG ((DEBUG_POLYGON, "++ vertex 0x%x y %d", + vertex1, intToY(vertex1))); + } while (y >= intToY(vertex2)); + if (dy2 < h) + h = dy2; + } + else + { + Step(x2,dx2,dy2,e2,sign2,step2) + if ((c = (intToY(vertex2) - y)) < h) + h = c; + } + DRAW_DEBUG ((DEBUG_POLYGON, "This band %d", h)); + /* fill spans for this segment */ + for (;;) + { + nmiddle = x2 - x1; + DRAW_DEBUG ((DEBUG_POLYGON, "This span %d->%d", x1, x2)); + if (nmiddle) + { + l = x1; + if (nmiddle < 0) + { + nmiddle = -nmiddle; + l = x2; + } + _s3SolidRect(s3,l,sy,nmiddle,1); + } + y++; + sy++; + if (!--h) + break; + Step(x1,dx1,dy1,e1,sign1,step1) + Step(x2,dx2,dy2,e2,sign2,step2) + } + if (y == maxy) + break; + } + MarkSyncS3 (pDrawable->pScreen); +} + +void +s3PolyGlyphBltClipped (DrawablePtr pDrawable, + GCPtr pGC, + int x, int y, + unsigned int nglyph, + CharInfoPtr *ppciInit, + pointer pglyphBase) +{ + SetupS3(pDrawable->pScreen); + int h; + int w; + int xBack, yBack; + int hBack, wBack; + int lw; + FontPtr pfont = pGC->font; + CharInfoPtr pci; + unsigned long *bits; + BoxPtr extents; + BoxRec bbox; + CARD32 b; + CharInfoPtr *ppci; + FbGCPrivPtr fbPriv = fbGetGCPrivate(pGC); + RegionPtr pClip = fbGetCompositeClip(pGC); + BoxPtr pBox; + int nbox; + int x1, y1, x2, y2; + unsigned char alu; + Bool set; + PixTransDeclare; + + s3SetGlobalBitmap (pDrawable->pScreen, s3GCMap (pGC)); + x += pDrawable->x; + y += pDrawable->y; + + if (pglyphBase == (pointer) 1) + { + xBack = x; + yBack = y - FONTASCENT(pGC->font); + wBack = 0; + hBack = FONTASCENT(pGC->font) + FONTDESCENT(pGC->font); + if (hBack) + { + h = nglyph; + ppci = ppciInit; + while (h--) + wBack += (*ppci++)->metrics.characterWidth; + } + if (wBack < 0) + { + xBack = xBack + wBack; + wBack = -wBack; + } + if (hBack < 0) + { + yBack = yBack + hBack; + hBack = -hBack; + } + alu = GXcopy; + } + else + { + wBack = 0; + alu = pGC->alu; + } + + if (wBack) + { + _s3SetSolidFill (s3, pGC->bgPixel, GXcopy, pGC->planemask); + for (nbox = REGION_NUM_RECTS (pClip), + pBox = REGION_RECTS (pClip); + nbox--; + pBox++) + { + x1 = xBack; + x2 = xBack + wBack; + y1 = yBack; + y2 = yBack + hBack; + if (x1 < pBox->x1) x1 = pBox->x1; + if (x2 > pBox->x2) x2 = pBox->x2; + if (y1 < pBox->y1) y1 = pBox->y1; + if (y2 > pBox->y2) y2 = pBox->y2; + if (x1 < x2 && y1 < y2) + { + _s3SolidRect (s3, x1, y1, x2 - x1, y2 - y1); + } + } + MarkSyncS3 (pDrawable->pScreen); + } + ppci = ppciInit; + set = FALSE; + while (nglyph--) + { + pci = *ppci++; + h = pci->metrics.ascent + pci->metrics.descent; + w = pci->metrics.rightSideBearing - pci->metrics.leftSideBearing; + x1 = x + pci->metrics.leftSideBearing; + y1 = y - pci->metrics.ascent; + bbox.x1 = x1; + bbox.y1 = y1; + bbox.x2 = x1 + w; + bbox.y2 = y1 + h; + switch (RECT_IN_REGION(pGC->pScreen, pClip, &bbox)) + { + case rgnIN: +#if 1 + lw = h * ((w + 31) >> 5); + if (lw) + { + if (!set) + { + _s3SetTransparentPlaneBlt (s3, alu, pGC->planemask, pGC->fgPixel); + set = TRUE; + } + _s3PlaneBlt(s3, + x + pci->metrics.leftSideBearing, + y - pci->metrics.ascent, + w, h); + bits = (unsigned long *) pci->bits; + PixTransStart (lw); + while (lw--) + { + b = *bits++; + S3AdjustBits32 (b); + PixTransStore(b); + } + MarkSyncS3 (pDrawable->pScreen); + } + break; +#endif + case rgnPART: + set = FALSE; + CheckSyncS3 (pDrawable->pScreen); + fbPutXYImage (pDrawable, + pClip, + fbPriv->fg, + fbPriv->bg, + fbPriv->pm, + alu, + FALSE, + x1, y1, + w, h, + (FbStip *) pci->bits, + (w + 31) >> 5, + 0); + break; + case rgnOUT: + break; + } + x += pci->metrics.characterWidth; + } +} + +/* + * Blt glyphs using S3 image transfer register, this does both + * poly glyph blt and image glyph blt (when pglyphBase == 1) + */ + +void +s3PolyGlyphBlt (DrawablePtr pDrawable, + GCPtr pGC, + int x, int y, + unsigned int nglyph, + CharInfoPtr *ppciInit, + pointer pglyphBase) +{ + SetupS3(pDrawable->pScreen); + int h; + int w; + int xBack, yBack; + int hBack, wBack; + int lw; + FontPtr pfont = pGC->font; + CharInfoPtr pci; + unsigned long *bits; + BoxPtr extents; + BoxRec bbox; + CARD32 b; + CharInfoPtr *ppci; + unsigned char alu; + PixTransDeclare; + + s3SetGlobalBitmap (pDrawable->pScreen, s3GCMap (pGC)); + x += pDrawable->x; + y += pDrawable->y; + + /* compute an approximate (but covering) bounding box */ + ppci = ppciInit; + w = 0; + h = nglyph; + while (h--) + w += (*ppci++)->metrics.characterWidth; + if (w < 0) + { + bbox.x1 = x + w; + bbox.x2 = x; + } + else + { + bbox.x1 = x; + bbox.x2 = x + w; + } + w = FONTMINBOUNDS(pfont,leftSideBearing); + if (w < 0) + bbox.x1 += w; + w = FONTMAXBOUNDS(pfont, rightSideBearing) - FONTMINBOUNDS(pfont, characterWidth); + if (w > 0) + bbox.x2 += w; + bbox.y1 = y - FONTMAXBOUNDS(pfont,ascent); + bbox.y2 = y + FONTMAXBOUNDS(pfont,descent); + + DRAW_DEBUG ((DEBUG_TEXT, "PolyGlyphBlt %d box is %d %d", nglyph, + bbox.x1, bbox.x2)); + switch (RECT_IN_REGION(pGC->pScreen, fbGetCompositeClip(pGC), &bbox)) + { + case rgnIN: + break; + case rgnPART: + s3PolyGlyphBltClipped(pDrawable, pGC, x - pDrawable->x, + y - pDrawable->y, + nglyph, ppciInit, pglyphBase); + case rgnOUT: + return; + } + + if (pglyphBase == (pointer) 1) + { + xBack = x; + yBack = y - FONTASCENT(pGC->font); + wBack = 0; + hBack = FONTASCENT(pGC->font) + FONTDESCENT(pGC->font); + if (hBack) + { + h = nglyph; + ppci = ppciInit; + while (h--) + wBack += (*ppci++)->metrics.characterWidth; + } + if (wBack < 0) + { + xBack = xBack + wBack; + wBack = -wBack; + } + if (hBack < 0) + { + yBack = yBack + hBack; + hBack = -hBack; + } + alu = GXcopy; + } + else + { + wBack = 0; + alu = pGC->alu; + } + + if (wBack) + { + _s3SetSolidFill (s3, pGC->bgPixel, GXcopy, pGC->planemask); + _s3SolidRect (s3, xBack, yBack, wBack, hBack); + } + _s3SetTransparentPlaneBlt (s3, alu, pGC->planemask, pGC->fgPixel); + ppci = ppciInit; + while (nglyph--) + { + pci = *ppci++; + h = pci->metrics.ascent + pci->metrics.descent; + w = pci->metrics.rightSideBearing - pci->metrics.leftSideBearing; + lw = h * ((w + 31) >> 5); + if (lw) + { + _s3PlaneBlt(s3, + x + pci->metrics.leftSideBearing, + y - pci->metrics.ascent, + w, h); + bits = (unsigned long *) pci->bits; + PixTransStart(lw); + while (lw--) + { + b = *bits++; + S3AdjustBits32 (b); + PixTransStore(b); + } + } + x += pci->metrics.characterWidth; + } + MarkSyncS3 (pDrawable->pScreen); +} + +void +s3ImageGlyphBlt (DrawablePtr pDrawable, + GCPtr pGC, + int x, int y, + unsigned int nglyph, + CharInfoPtr *ppci, + pointer pglyphBase) +{ + s3PolyGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, (pointer) 1); +} + +/* + * Blt TE fonts using S3 image transfer. Differs from + * above in that it doesn't need to fill a solid rect for + * the background and it can draw multiple characters at a time + */ + +void +s3ImageTEGlyphBlt (DrawablePtr pDrawable, GCPtr pGC, + int xInit, int yInit, + unsigned int nglyph, + CharInfoPtr *ppci, + pointer pglyphBase) +{ + SetupS3(pDrawable->pScreen); + int x, y; + int h, lw, lwTmp; + int w; + FontPtr pfont = pGC->font; + unsigned long *char1, *char2, *char3, *char4; + int widthGlyphs, widthGlyph; + BoxRec bbox; + CARD32 tmp; + PixTransDeclare; + + s3SetGlobalBitmap (pDrawable->pScreen, s3GCMap (pGC)); + widthGlyph = FONTMAXBOUNDS(pfont,characterWidth); + if (!widthGlyph) + return; + + h = FONTASCENT(pfont) + FONTDESCENT(pfont); + if (!h) + return; + + DRAW_DEBUG ((DEBUG_TEXT, "ImageTEGlyphBlt chars are %d %d", + widthGlyph, h)); + + x = xInit + FONTMAXBOUNDS(pfont,leftSideBearing) + pDrawable->x; + y = yInit - FONTASCENT(pfont) + pDrawable->y; + + bbox.x1 = x; + bbox.x2 = x + (widthGlyph * nglyph); + bbox.y1 = y; + bbox.y2 = y + h; + + switch (RECT_IN_REGION(pGC->pScreen, fbGetCompositeClip(pGC), &bbox)) + { + case rgnIN: + break; + case rgnPART: + if (pglyphBase == (pointer) 1) + pglyphBase = 0; + else + pglyphBase = (pointer) 1; + s3PolyGlyphBltClipped(pDrawable, pGC, + xInit, + yInit, + nglyph, ppci, + pglyphBase); + case rgnOUT: + return; + } + + if (pglyphBase == (pointer) 1) + { + _s3SetTransparentPlaneBlt (s3, pGC->alu, pGC->planemask, pGC->fgPixel); + } + else + { + _s3SetOpaquePlaneBlt (s3, GXcopy, pGC->planemask, pGC->fgPixel, pGC->bgPixel); + } + +#if BITMAP_BIT_ORDER == LSBFirst +#define SHIFT << +#else +#define SHIFT >> +#endif + +#define LoopIt(count, w, loadup, fetch) \ + while (nglyph >= count) \ + { \ + nglyph -= count; \ + _s3PlaneBlt (s3, x, y, w, h); \ + x += w; \ + loadup \ + lwTmp = h; \ + PixTransStart(h); \ + while (lwTmp--) { \ + tmp = fetch; \ + S3AdjustBits32(tmp); \ + PixTransStore(tmp); \ + } \ + } + + if (widthGlyph <= 8) + { + widthGlyphs = widthGlyph << 2; + LoopIt(4, widthGlyphs, + char1 = (unsigned long *) (*ppci++)->bits; + char2 = (unsigned long *) (*ppci++)->bits; + char3 = (unsigned long *) (*ppci++)->bits; + char4 = (unsigned long *) (*ppci++)->bits;, + (*char1++ | ((*char2++ | ((*char3++ | (*char4++ + SHIFT widthGlyph)) + SHIFT widthGlyph)) + SHIFT widthGlyph))) + } + else if (widthGlyph <= 10) + { + widthGlyphs = (widthGlyph << 1) + widthGlyph; + LoopIt(3, widthGlyphs, + char1 = (unsigned long *) (*ppci++)->bits; + char2 = (unsigned long *) (*ppci++)->bits; + char3 = (unsigned long *) (*ppci++)->bits;, + (*char1++ | ((*char2++ | (*char3++ SHIFT widthGlyph)) SHIFT widthGlyph))) + } + else if (widthGlyph <= 16) + { + widthGlyphs = widthGlyph << 1; + LoopIt(2, widthGlyphs, + char1 = (unsigned long *) (*ppci++)->bits; + char2 = (unsigned long *) (*ppci++)->bits;, + (*char1++ | (*char2++ SHIFT widthGlyph))) + } + lw = h * ((widthGlyph + 31) >> 5); + while (nglyph--) + { + _s3PlaneBlt (s3, x, y, widthGlyph, h); + x += widthGlyph; + char1 = (unsigned long *) (*ppci++)->bits; + lwTmp = lw; + PixTransStart(lw); + while (lwTmp--) + { + tmp = *char1++; + S3AdjustBits32(tmp); + PixTransStore(tmp); + } + } + MarkSyncS3 (pDrawable->pScreen); +} + +void +s3PolyTEGlyphBlt (DrawablePtr pDrawable, GCPtr pGC, + int x, int y, + unsigned int nglyph, CharInfoPtr *ppci, + pointer pglyphBase) +{ + s3ImageTEGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, (pointer) 1); +} + +Bool +_s3Segment (DrawablePtr pDrawable, + GCPtr pGC, + int x1, + int y1, + int x2, + int y2, + Bool drawLast, + Bool s3Set) +{ + SetupS3(pDrawable->pScreen); + FbGCPrivPtr pPriv = fbGetGCPrivate(pGC); + RegionPtr pClip = fbGetCompositeClip(pGC); + BoxPtr pBox; + int nBox; + int adx; /* abs values of dx and dy */ + int ady; + int signdx; /* sign of dx and dy */ + int signdy; + int e, e1, e2; /* bresenham error and increments */ + int len; /* length of segment */ + int axis; /* major axis */ + int octant; + int cmd; + unsigned int bias = miGetZeroLineBias(pDrawable->pScreen); + unsigned int oc1; /* outcode of point 1 */ + unsigned int oc2; /* outcode of point 2 */ + + CalcLineDeltas(x1, y1, x2, y2, adx, ady, signdx, signdy, + 1, 1, octant); + + cmd = LASTPIX; + + if (adx > ady) + { + axis = X_AXIS; + e1 = ady << 1; + e2 = e1 - (adx << 1); + e = e1 - adx; + len = adx; + } + else + { + cmd |= YMAJAXIS; + axis = Y_AXIS; + e1 = adx << 1; + e2 = e1 - (ady << 1); + e = e1 - ady; + SetYMajorOctant(octant); + len = ady; + } + + /* S3 line drawing hardware has limited resolution for error terms */ + if (len >= 4096) + { + int dashOff = 0; + + KdCheckSync (pDrawable->pScreen); + fbSegment (pDrawable, pGC, x1, y1, x2, y2, drawLast, &dashOff); + return FALSE; + } + + FIXUP_ERROR (e, octant, bias); + + nBox = REGION_NUM_RECTS (pClip); + pBox = REGION_RECTS (pClip); + + if (signdx > 0) + cmd |= INC_X; + if (signdy > 0) + cmd |= INC_Y; + + /* we have bresenham parameters and two points. + all we have to do now is clip and draw. + */ + + if (drawLast) + len++; + while(nBox--) + { + oc1 = 0; + oc2 = 0; + OUTCODES(oc1, x1, y1, pBox); + OUTCODES(oc2, x2, y2, pBox); + if ((oc1 | oc2) == 0) + { + if (!s3Set) + { + s3SetGlobalBitmap (pDrawable->pScreen, s3GCMap (pGC)); + _s3SetSolidFill (s3, pGC->fgPixel, pGC->alu, pGC->planemask); + s3Set = TRUE; + } + _s3SetCur (s3, x1, y1); + _s3ClipLine (s3, cmd, e1, e2, e, len); + break; + } + else if (oc1 & oc2) + { + pBox++; + } + else + { + int new_x1 = x1, new_y1 = y1, new_x2 = x2, new_y2 = y2; + int clip1 = 0, clip2 = 0; + int clipdx, clipdy; + int err; + + if (miZeroClipLine(pBox->x1, pBox->y1, pBox->x2-1, + pBox->y2-1, + &new_x1, &new_y1, &new_x2, &new_y2, + adx, ady, &clip1, &clip2, + octant, bias, oc1, oc2) == -1) + { + pBox++; + continue; + } + + if (axis == X_AXIS) + len = abs(new_x2 - new_x1); + else + len = abs(new_y2 - new_y1); + if (clip2 != 0 || drawLast) + len++; + if (len) + { + /* unwind bresenham error term to first point */ + err = e; + if (clip1) + { + clipdx = abs(new_x1 - x1); + clipdy = abs(new_y1 - y1); + if (axis == X_AXIS) + err += (e2 - e1) * clipdy + e1 * clipdx; + else + err += (e2 - e1) * clipdx + e1 * clipdy; + } + if (!s3Set) + { + s3SetGlobalBitmap (pDrawable->pScreen, s3GCMap (pGC)); + _s3SetSolidFill (s3, pGC->fgPixel, pGC->alu, pGC->planemask); + s3Set = TRUE; + } + _s3SetCur (s3, new_x1, new_y1); + _s3ClipLine (s3, cmd, e1, e2, err, len); + } + pBox++; + } + } /* while (nBox--) */ + return s3Set; +} + +void +s3Polylines (DrawablePtr pDrawable, GCPtr pGC, + int mode, int npt, DDXPointPtr ppt) +{ + SetupS3(pDrawable->pScreen); + int x, y, nx, ny; + int ox = pDrawable->x, oy = pDrawable->y; + Bool s3Set = FALSE; + + if (!npt) + return; + + x = ppt->x + ox; + y = ppt->y + oy; + while (--npt) + { + ++ppt; + if (mode == CoordModePrevious) + { + nx = x + ppt->x; + ny = y + ppt->y; + } + else + { + nx = ppt->x + ox; + ny = ppt->y + oy; + } + s3Set = _s3Segment (pDrawable, pGC, x, y, nx, ny, + npt == 1 && pGC->capStyle != CapNotLast, + s3Set); + x = nx; + y = ny; + } + if (s3Set) + MarkSyncS3 (pDrawable->pScreen); +} + +void +s3PolySegment (DrawablePtr pDrawable, GCPtr pGC, + int nsegInit, xSegment *pSegInit) +{ + SetupS3(pDrawable->pScreen); + int x, y; + int ox = pDrawable->x, oy = pDrawable->y; + RegionPtr pClip = fbGetCompositeClip (pGC); + BoxPtr pBox; + int nbox; + int nseg; + xSegment *pSeg; + int dx, dy; + int maj, min, len, inc; + int t; + CARD32 cmd; + CARD32 init_cmd; + Bool drawLast; + Bool s3Set = FALSE; + + drawLast = pGC->capStyle != CapNotLast; + + for (nseg = nsegInit, pSeg = pSegInit; nseg--; pSeg++) + { + s3Set = _s3Segment (pDrawable, pGC, pSeg->x1 + ox, pSeg->y1 + oy, + pSeg->x2 + ox, pSeg->y2 + oy, drawLast, s3Set); + + } + if (s3Set) + MarkSyncS3 (pDrawable->pScreen); +} + +/* + * Check to see if a pattern can be painted with the S3 + */ + +#define _s3CheckPatternSize(s) ((s) <= S3_TILE_SIZE && ((s) & ((s) - 1)) == 0) +#define s3CheckPattern(w,h) (_s3CheckPatternSize(w) && _s3CheckPatternSize(h)) + +Bool +s3AllocPattern (ScreenPtr pScreen, + int ma, + PixmapPtr pPixmap, + int xorg, int yorg, + int fillStyle, Pixel fg, Pixel bg, + s3PatternPtr *ppPattern) +{ + KdScreenPriv(pScreen); + s3ScreenInfo(pScreenPriv); + s3PatternPtr pPattern; + + if (s3s->fb[ma].patterns.cache && fillStyle != FillSolid && + s3CheckPattern (pPixmap->drawable.width, pPixmap->drawable.height)) + { + if (!(pPattern = *ppPattern)) + { + pPattern = (s3PatternPtr) xalloc (sizeof (s3PatternRec)); + if (!pPattern) + return FALSE; + *ppPattern = pPattern; + } + + pPattern->cache = 0; + pPattern->id = 0; + pPattern->pPixmap = pPixmap; + pPattern->fillStyle = fillStyle; + pPattern->xrot = (-xorg) & (S3_TILE_SIZE-1); + pPattern->yrot = (-yorg) & (S3_TILE_SIZE-1); + pPattern->fore = fg; + pPattern->back = bg; + return TRUE; + } + else + { + if (*ppPattern) + { + xfree (*ppPattern); + *ppPattern = 0; + } + return FALSE; + } +} + +void +s3CheckGCFill (GCPtr pGC) +{ + s3PrivGCPtr s3Priv = s3GetGCPrivate (pGC); + PixmapPtr pPixmap; + + switch (pGC->fillStyle) { + case FillSolid: + pPixmap = 0; + break; + case FillOpaqueStippled: + case FillStippled: + pPixmap = pGC->stipple; + break; + case FillTiled: + pPixmap = pGC->tile.pixmap; + break; + } + s3AllocPattern (pGC->pScreen, + s3GCMap(pGC), + pPixmap, + pGC->patOrg.x + pGC->lastWinOrg.x, + pGC->patOrg.y + pGC->lastWinOrg.y, + pGC->fillStyle, pGC->fgPixel, pGC->bgPixel, + &s3Priv->pPattern); +} + +void +s3MoveGCFill (GCPtr pGC) +{ + s3PrivGCPtr s3Priv = s3GetGCPrivate (pGC); + int xorg, yorg; + s3PatternPtr pPattern; + + if (pPattern = s3Priv->pPattern) + { + /* + * Reset origin + */ + xorg = pGC->patOrg.x + pGC->lastWinOrg.x; + yorg = pGC->patOrg.y + pGC->lastWinOrg.y; + pPattern->xrot = (-xorg) & (S3_TILE_SIZE - 1); + pPattern->yrot = (-yorg) & (S3_TILE_SIZE - 1); + /* + * Invalidate cache entry + */ + pPattern->id = 0; + pPattern->cache = 0; + } +} + +/* + * S3 Patterns. These are always full-depth images, stored in off-screen + * memory. + */ + +Pixel +s3FetchPatternPixel (s3PatternPtr pPattern, int x, int y) +{ + CARD8 *src; + CARD16 *src16; + CARD32 *src32; + PixmapPtr pPixmap = pPattern->pPixmap; + + x = (x + pPattern->xrot) % pPixmap->drawable.width; + y = (y + pPattern->yrot) % pPixmap->drawable.height; + src = (CARD8 *) pPixmap->devPrivate.ptr + y * pPixmap->devKind; + switch (pPixmap->drawable.bitsPerPixel) { + case 1: + return (src[x>>3] >> (x & 7)) & 1 ? 0xffffffff : 0x00; + case 4: + if (x & 1) + return src[x>>1] >> 4; + else + return src[x>>1] & 0xf; + case 8: + return src[x]; + case 16: + src16 = (CARD16 *) src; + return src16[x]; + case 32: + src32 = (CARD32 *) src; + return src32[x]; + } +} + +/* + * Place pattern image on screen; done with S3 locked + */ +void +_s3PutPattern (ScreenPtr pScreen, int ma, s3PatternPtr pPattern) +{ + SetupS3(pScreen); + s3ScreenInfo(pScreenPriv); + int x, y; + CARD8 *dstLine, *dst8; + CARD16 *dst16; + CARD32 *dst32; + S3PatternCache *cache = pPattern->cache; +#ifdef S3_TRIO + int fb = 0; +#else + int fb = s3s->fbmap[ma]; +#endif + + DRAW_DEBUG ((DEBUG_PATTERN, "_s3PutPattern 0x%x id %d to %d %d", + pPattern, pPattern->id, cache->x, cache->y)); + + dstLine = (pScreenPriv->screen->fb[fb].frameBuffer + + cache->y * pScreenPriv->screen->fb[fb].byteStride + + cache->x * pScreenPriv->bytesPerPixel[fb]); + + CheckSyncS3 (pScreen); + + for (y = 0; y < S3_TILE_SIZE; y++) + { + switch (pScreenPriv->screen->fb[fb].bitsPerPixel) { + case 8: + dst8 = dstLine; + for (x = 0; x < S3_TILE_SIZE; x++) + *dst8++ = s3FetchPatternPixel (pPattern, x, y); + DRAW_DEBUG ((DEBUG_PATTERN, "%c%c%c%c%c%c%c%c", + dstLine[0] ? 'X' : ' ', + dstLine[1] ? 'X' : ' ', + dstLine[2] ? 'X' : ' ', + dstLine[3] ? 'X' : ' ', + dstLine[4] ? 'X' : ' ', + dstLine[5] ? 'X' : ' ', + dstLine[6] ? 'X' : ' ', + dstLine[7] ? 'X' : ' ')); + break; + case 16: + dst16 = (CARD16 *) dstLine; + for (x = 0; x < S3_TILE_SIZE; x++) + *dst16++ = s3FetchPatternPixel (pPattern, x, y); + break; + case 32: + dst32 = (CARD32 *) dstLine; + for (x = 0; x < S3_TILE_SIZE; x++) + *dst32++ = s3FetchPatternPixel (pPattern, x, y); + break; + } + dstLine += pScreenPriv->screen->fb[fb].byteStride; + } +} + +/* + * Load a stipple to off-screen memory; done with S3 locked + */ +void +_s3LoadPattern (ScreenPtr pScreen, int ma, s3PatternPtr pPattern) +{ + SetupS3(pScreen); + s3ScreenInfo(pScreenPriv); + S3PatternCache *cache; + + DRAW_DEBUG((DEBUG_PATTERN, + "s3LoadPattern 0x%x id %d cache 0x%x cacheid %d", + pPattern, pPattern->id, pPattern->cache, + pPattern->cache ? pPattern->cache->id : -1)); + /* + * Check to see if its still loaded + */ + cache = pPattern->cache; + if (cache && cache->id == pPattern->id) + return; + /* + * Lame replacement strategy; assume we'll have plenty of room. + */ + cache = &s3s->fb[ma].patterns.cache[s3s->fb[ma].patterns.last_used]; + if (++s3s->fb[ma].patterns.last_used == s3s->fb[ma].patterns.ncache) + s3s->fb[ma].patterns.last_used = 0; + cache->id = ++s3s->fb[ma].patterns.last_id; + pPattern->id = cache->id; + pPattern->cache = cache; + _s3PutPattern (pScreen, ma, pPattern); +} + +void +s3DestroyGC (GCPtr pGC) +{ + s3PrivGCPtr s3Priv = s3GetGCPrivate (pGC); + + if (s3Priv->pPattern) + xfree (s3Priv->pPattern); + miDestroyGC (pGC); +} + +GCFuncs s3GCFuncs = { + s3ValidateGC, + miChangeGC, + miCopyGC, + s3DestroyGC, + miChangeClip, + miDestroyClip, + miCopyClip +}; + +int +s3CreateGC (GCPtr pGC) +{ + KdScreenPriv(pGC->pScreen); + s3ScreenInfo(pScreenPriv); + s3PrivGCPtr s3Priv; + + if (!fbCreateGC (pGC)) + return FALSE; + + if (pGC->depth != 1) + pGC->funcs = &s3GCFuncs; + + s3Priv = s3GetGCPrivate(pGC); + s3Priv->type = DRAWABLE_PIXMAP; + s3Priv->pPattern = 0; +#ifndef S3_TRIO + if (pGC->depth == s3s->primary_depth) + s3Priv->ma = 0; + else + s3Priv->ma = 1; +#endif + return TRUE; +} + +Bool +s3CreateWindow (WindowPtr pWin) +{ + KdScreenPriv(pWin->drawable.pScreen); + s3ScreenInfo(pScreenPriv); + + pWin->devPrivates[s3WindowPrivateIndex].ptr = 0; + return KdCreateWindow (pWin); +} + +Bool +s3DestroyWindow (WindowPtr pWin) +{ + s3PatternPtr pPattern; + if (pPattern = s3GetWindowPrivate(pWin)) + xfree (pPattern); + return fbDestroyWindow (pWin); +} + +Bool +s3ChangeWindowAttributes (WindowPtr pWin, Mask mask) +{ + KdScreenPriv(pWin->drawable.pScreen); + Bool ret; + s3PatternPtr pPattern; + PixmapPtr pPixmap; + int fillStyle; + + ret = fbChangeWindowAttributes (pWin, mask); + if (mask & CWBackPixmap) + { + if (pWin->backgroundState == BackgroundPixmap) + { + pPixmap = pWin->background.pixmap; + fillStyle = FillTiled; + } + else + { + pPixmap = 0; + fillStyle = FillSolid; + } + pPattern = s3GetWindowPrivate(pWin); + s3AllocPattern (pWin->drawable.pScreen, + s3DrawMap (&pWin->drawable), + pPixmap, + pWin->drawable.x, pWin->drawable.y, + fillStyle, 0, 0, &pPattern); + DRAW_DEBUG ((DEBUG_PAINT_WINDOW, "Background pattern 0x%x pixmap 0x%x style %d", + pPattern, pPixmap, fillStyle)); + s3SetWindowPrivate (pWin, pPattern); + } + return ret; +} + + +#ifndef S3_TRIO +void +s3PaintKey (DrawablePtr pDrawable, + RegionPtr pRegion, + CARD32 pixel, + int fb) +{ + SetupS3 (pDrawable->pScreen); + s3ScreenInfo (pScreenPriv); + int nBox = REGION_NUM_RECTS(pRegion); + BoxPtr pBox = REGION_RECTS(pRegion); + int ma; + + if (!nBox) + return; + + for (ma = 0; s3s->fbmap[ma] >= 0; ma++) + if (s3s->fbmap[ma] == fb) + break; + s3SetGlobalBitmap (pDrawable->pScreen, ma); + _s3SetSolidFill (s3, pixel, GXcopy, 0xffffffff); + while (nBox--) + { + _s3SolidRect(s3,pBox->x1,pBox->y1,pBox->x2-pBox->x1,pBox->y2-pBox->y1); + pBox++; + } + MarkSyncS3 (pDrawable->pScreen); +} +#endif + +void +s3PaintWindow(WindowPtr pWin, RegionPtr pRegion, int what) +{ + SetupS3(pWin->drawable.pScreen); + s3ScreenInfo(pScreenPriv); + s3PatternPtr pPattern; + + DRAW_DEBUG ((DEBUG_PAINT_WINDOW, "s3PaintWindow 0x%x extents %d %d %d %d n %d", + pWin->drawable.id, + pRegion->extents.x1, pRegion->extents.y1, + pRegion->extents.x2, pRegion->extents.y2, + REGION_NUM_RECTS(pRegion))); + if (!REGION_NUM_RECTS(pRegion)) + return; + switch (what) { + case PW_BACKGROUND: + switch (pWin->backgroundState) { + case None: + return; + case ParentRelative: + do { + pWin = pWin->parent; + } while (pWin->backgroundState == ParentRelative); + (*pWin->drawable.pScreen->PaintWindowBackground)(pWin, pRegion, + what); + return; + case BackgroundPixmap: + pPattern = s3GetWindowPrivate(pWin); + if (pPattern) + { + s3FillBoxPattern ((DrawablePtr)pWin, + (int)REGION_NUM_RECTS(pRegion), + REGION_RECTS(pRegion), + GXcopy, ~0, pPattern); + return; + } + break; + case BackgroundPixel: + s3FillBoxSolid((DrawablePtr)pWin, + (int)REGION_NUM_RECTS(pRegion), + REGION_RECTS(pRegion), + pWin->background.pixel, GXcopy, ~0); + return; + } + break; + case PW_BORDER: +#ifndef S3_TRIO + if (s3s->fbmap[1] >= 0) + fbOverlayUpdateLayerRegion (pWin->drawable.pScreen, + fbOverlayWindowLayer (pWin), + pRegion); +#endif + if (pWin->borderIsPixel) + { + s3FillBoxSolid((DrawablePtr)pWin, + (int)REGION_NUM_RECTS(pRegion), + REGION_RECTS(pRegion), + pWin->border.pixel, GXcopy, ~0); + return; + } + break; + } + KdCheckPaintWindow (pWin, pRegion, what); +} + +void +s3CopyWindowProc (DrawablePtr pSrcDrawable, + DrawablePtr pDstDrawable, + GCPtr pGC, + BoxPtr pboxOrig, + int nboxOrig, + int dx, + int dy, + Bool reverse, + Bool upsidedown, + Pixel bitplane, + void *closure) +{ + SetupS3(pDstDrawable->pScreen); + s3ScreenInfo(pScreenPriv); + KdScreenInfo *screen = pScreenPriv->screen; + int srcX, srcY, dstX, dstY; + int x1, x2; + int w, h; + int flags; + int fb = (int) closure; + int ma; + BoxPtr pbox; + int nbox; + int bitsPerPixel; + +#ifdef S3_TRIO + ma = 0; +#else + for (ma = 0; s3s->fbmap[ma] >= 0; ma++) + if (s3s->fbmap[ma] == fb) + break; +#endif + bitsPerPixel = screen->fb[fb].bitsPerPixel; + if (bitsPerPixel == 24) + dx *= 3; + nbox = nboxOrig; + pbox = pboxOrig; + s3SetGlobalBitmap (pDstDrawable->pScreen, ma); + _s3SetBlt(s3,GXcopy,~0); + while (nbox--) + { + x1 = pbox->x1; + x2 = pbox->x2; + if (bitsPerPixel == 24) + { + x1 *= 3; + x2 *= 3; + } + + w = x2 - x1; + h = pbox->y2 - pbox->y1; + flags = 0; + if (reverse) + { + dstX = x2 - 1; + } + else + { + dstX = x1; + flags |= INC_X; + } + srcX = dstX + dx; + + if (upsidedown) + { + dstY = pbox->y2 - 1; + } + else + { + dstY = pbox->y1; + flags |= INC_Y; + } + srcY = dstY + dy; + + _s3Blt (s3, srcX, srcY, dstX, dstY, w, h, flags); + pbox++; + } + MarkSyncS3 (pDstDrawable->pScreen); +} + +void +s3CopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc) +{ + ScreenPtr pScreen = pWin->drawable.pScreen; + KdScreenPriv (pScreen); + s3ScreenInfo (pScreenPriv); + KdScreenInfo *screen = pScreenPriv->screen; + RegionRec rgnDst; + int dx, dy; + WindowPtr pwinRoot; + + pwinRoot = WindowTable[pWin->drawable.pScreen->myNum]; + + dx = ptOldOrg.x - pWin->drawable.x; + dy = ptOldOrg.y - pWin->drawable.y; + + REGION_TRANSLATE(pWin->drawable.pScreen, prgnSrc, -dx, -dy); + + REGION_INIT (pWin->drawable.pScreen, &rgnDst, NullBox, 0); + + REGION_INTERSECT(pWin->drawable.pScreen, &rgnDst, + &pWin->borderClip, prgnSrc); + + fbCopyRegion ((DrawablePtr)pwinRoot, (DrawablePtr)pwinRoot, + 0, + &rgnDst, dx, dy, s3CopyWindowProc, 0, 0); + + REGION_UNINIT(pWin->drawable.pScreen, &rgnDst); +} + +void +s3_24FillBoxSolid (DrawablePtr pDrawable, int nBox, BoxPtr pBox, + unsigned long pixel, int alu, unsigned long planemask) +{ + SetupS3(pDrawable->pScreen); + register int r; + int x1, x2; + + s3SetGlobalBitmap (pDrawable->pScreen, s3DrawMap (pDrawable)); + _s3SetSolidFill(s3,pixel,alu,planemask); + + while (nBox--) { + x1 = pBox->x1 * 3; + x2 = pBox->x2 * 3; + _s3SolidRect(s3,x1,pBox->y1,x2-x1,pBox->y2-pBox->y1); + pBox++; + } + MarkSyncS3 (pDrawable->pScreen); +} + +#define ok24(p) (((p) & 0xffffff) == ((((p) & 0xff) << 16) | (((p) >> 8) & 0xffff))) + +void +s3_24FillSpans (DrawablePtr pDrawable, GCPtr pGC, int n, + DDXPointPtr ppt, int *pwidth, int fSorted) +{ + SetupS3(pDrawable->pScreen); + int x, y, x1, y1, x2, y2; + int width; + /* next three parameters are post-clip */ + int nTmp; + int *pwidthFree;/* copies of the pointers to free */ + DDXPointPtr pptFree; + BoxPtr extents; + RegionPtr pClip = fbGetCompositeClip (pGC); + + if (pGC->fillStyle != FillSolid || !ok24 (pGC->fgPixel) || !ok24(pGC->planemask)) + { + KdCheckFillSpans (pDrawable, pGC, n, ppt, pwidth, fSorted); + return; + } + + s3SetGlobalBitmap (pDrawable->pScreen, s3GCMap (pGC)); + if (REGION_NUM_RECTS(pClip) == 1) + { + extents = REGION_RECTS(pClip); + x1 = extents->x1; + x2 = extents->x2; + y1 = extents->y1; + y2 = extents->y2; + _s3SetSolidFill(s3,pGC->fgPixel,pGC->alu,pGC->planemask); + while (n--) + { + y = ppt->y; + if (y1 <= y && y < y2) + { + x = ppt->x; + width = *pwidth; + if (x < x1) + { + width -= (x1 - x); + x = x1; + } + if (x2 < x + width) + width = x2 - x; + if (width > 0) + { + _s3SolidRect(s3,x*3,y,width*3,1); + } + } + ppt++; + pwidth++; + } + } + else + { + nTmp = n * miFindMaxBand(pClip); + pwidthFree = (int *)ALLOCATE_LOCAL(nTmp * sizeof(int)); + pptFree = (DDXPointRec *)ALLOCATE_LOCAL(nTmp * sizeof(DDXPointRec)); + if(!pptFree || !pwidthFree) + { + if (pptFree) DEALLOCATE_LOCAL(pptFree); + if (pwidthFree) DEALLOCATE_LOCAL(pwidthFree); + return; + } + n = miClipSpans(fbGetCompositeClip(pGC), + ppt, pwidth, n, + pptFree, pwidthFree, fSorted); + pwidth = pwidthFree; + ppt = pptFree; + _s3SetSolidFill(s3,pGC->fgPixel,pGC->alu,pGC->planemask); + while (n--) + { + x = ppt->x; + y = ppt->y; + ppt++; + width = *pwidth++; + if (width) + { + _s3SolidRect(s3,x*3,y,width*3,1); + } + } + DEALLOCATE_LOCAL(pptFree); + DEALLOCATE_LOCAL(pwidthFree); + } + MarkSyncS3 (pDrawable->pScreen); +} + +void +s3_24CopyNtoN (DrawablePtr pSrcDrawable, + DrawablePtr pDstDrawable, + GCPtr pGC, + BoxPtr pbox, + int nbox, + int dx, + int dy, + Bool reverse, + Bool upsidedown, + Pixel bitplane, + void *closure) +{ + SetupS3(pDstDrawable->pScreen); + int srcX, srcY, dstX, dstY; + int w, h; + int flags; + int x1, x2; + + if (sourceInvarient (pGC->alu)) + { + s3_24FillBoxSolid (pDstDrawable, nbox, pbox, 0, pGC->alu, pGC->planemask); + return; + } + + s3SetGlobalBitmap (pDstDrawable->pScreen, s3GCMap (pGC)); + _s3SetBlt(s3,pGC->alu,pGC->planemask); + DRAW_DEBUG ((DEBUG_RENDER, "s3CopyNtoN alu %d planemask 0x%x", + pGC->alu, pGC->planemask)); + dx *= 3; + while (nbox--) + { + x1 = pbox->x1 * 3; + x2 = pbox->x2 * 3; + w = x2 - x1; + h = pbox->y2 - pbox->y1; + flags = 0; + if (reverse) + { + dstX = x2 - 1; + } + else + { + dstX = x1; + flags |= INC_X; + } + srcX = dstX + dx; + + if (upsidedown) + { + dstY = pbox->y2 - 1; + } + else + { + dstY = pbox->y1; + flags |= INC_Y; + } + srcY = dstY + dy; + + _s3Blt (s3, srcX, srcY, dstX, dstY, w, h, flags); + pbox++; + } + MarkSyncS3 (pSrcDrawable->pScreen); +} + +RegionPtr +s3_24CopyArea(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC, + int srcx, int srcy, int width, int height, int dstx, int dsty) +{ + SetupS3(pDstDrawable->pScreen); + + if (pSrcDrawable->type == DRAWABLE_WINDOW && + pDstDrawable->type == DRAWABLE_WINDOW && + ok24(pGC->planemask)) + { + return fbDoCopy (pSrcDrawable, pDstDrawable, pGC, + srcx, srcy, width, height, + dstx, dsty, s3_24CopyNtoN, 0, 0); + } + return KdCheckCopyArea (pSrcDrawable, pDstDrawable, pGC, + srcx, srcy, width, height, dstx, dsty); +} + + +#define NUM_STACK_RECTS 1024 + +void +s3_24PolyFillRect (DrawablePtr pDrawable, GCPtr pGC, + int nrectFill, xRectangle *prectInit) +{ + s3GCPrivate(pGC); + xRectangle *prect; + RegionPtr prgnClip; + register BoxPtr pbox; + register BoxPtr pboxClipped; + BoxPtr pboxClippedBase; + BoxPtr pextent; + BoxRec stackRects[NUM_STACK_RECTS]; + int numRects; + int n; + int xorg, yorg; + int x, y; + + if (pGC->fillStyle != FillSolid || !ok24 (pGC->fgPixel) || !ok24(pGC->planemask)) + { + KdCheckPolyFillRect (pDrawable, pGC, nrectFill, prectInit); + return; + } + + prgnClip = fbGetCompositeClip(pGC); + xorg = pDrawable->x; + yorg = pDrawable->y; + + if (xorg || yorg) + { + prect = prectInit; + n = nrectFill; + while(n--) + { + prect->x += xorg; + prect->y += yorg; + prect++; + } + } + + prect = prectInit; + + numRects = REGION_NUM_RECTS(prgnClip) * nrectFill; + if (numRects > NUM_STACK_RECTS) + { + pboxClippedBase = (BoxPtr)ALLOCATE_LOCAL(numRects * sizeof(BoxRec)); + if (!pboxClippedBase) + return; + } + else + pboxClippedBase = stackRects; + + pboxClipped = pboxClippedBase; + + if (REGION_NUM_RECTS(prgnClip) == 1) + { + int x1, y1, x2, y2, bx2, by2; + + pextent = REGION_RECTS(prgnClip); + x1 = pextent->x1; + y1 = pextent->y1; + x2 = pextent->x2; + y2 = pextent->y2; + while (nrectFill--) + { + if ((pboxClipped->x1 = prect->x) < x1) + pboxClipped->x1 = x1; + + if ((pboxClipped->y1 = prect->y) < y1) + pboxClipped->y1 = y1; + + bx2 = (int) prect->x + (int) prect->width; + if (bx2 > x2) + bx2 = x2; + pboxClipped->x2 = bx2; + + by2 = (int) prect->y + (int) prect->height; + if (by2 > y2) + by2 = y2; + pboxClipped->y2 = by2; + + prect++; + if ((pboxClipped->x1 < pboxClipped->x2) && + (pboxClipped->y1 < pboxClipped->y2)) + { + pboxClipped++; + } + } + } + else + { + int x1, y1, x2, y2, bx2, by2; + + pextent = REGION_EXTENTS(pGC->pScreen, prgnClip); + x1 = pextent->x1; + y1 = pextent->y1; + x2 = pextent->x2; + y2 = pextent->y2; + while (nrectFill--) + { + BoxRec box; + + if ((box.x1 = prect->x) < x1) + box.x1 = x1; + + if ((box.y1 = prect->y) < y1) + box.y1 = y1; + + bx2 = (int) prect->x + (int) prect->width; + if (bx2 > x2) + bx2 = x2; + box.x2 = bx2; + + by2 = (int) prect->y + (int) prect->height; + if (by2 > y2) + by2 = y2; + box.y2 = by2; + + prect++; + + if ((box.x1 >= box.x2) || (box.y1 >= box.y2)) + continue; + + n = REGION_NUM_RECTS (prgnClip); + pbox = REGION_RECTS(prgnClip); + + /* clip the rectangle to each box in the clip region + this is logically equivalent to calling Intersect() + */ + while(n--) + { + pboxClipped->x1 = max(box.x1, pbox->x1); + pboxClipped->y1 = max(box.y1, pbox->y1); + pboxClipped->x2 = min(box.x2, pbox->x2); + pboxClipped->y2 = min(box.y2, pbox->y2); + pbox++; + + /* see if clipping left anything */ + if(pboxClipped->x1 < pboxClipped->x2 && + pboxClipped->y1 < pboxClipped->y2) + { + pboxClipped++; + } + } + } + } + if (pboxClipped != pboxClippedBase) + { + s3_24FillBoxSolid(pDrawable, + pboxClipped-pboxClippedBase, pboxClippedBase, + pGC->fgPixel, pGC->alu, pGC->planemask); + } + if (pboxClippedBase != stackRects) + DEALLOCATE_LOCAL(pboxClippedBase); +} + +void +s3_24SolidBoxClipped (DrawablePtr pDrawable, + RegionPtr pClip, + int x1, + int y1, + int x2, + int y2, + FbBits fg) +{ + SetupS3 (pDrawable->pScreen); + BoxPtr pbox; + int nbox; + int partX1, partX2, partY1, partY2; + + s3SetGlobalBitmap (pDrawable->pScreen, s3DrawMap (pDrawable)); + _s3SetSolidFill(s3,fg,GXcopy,~0); + + for (nbox = REGION_NUM_RECTS(pClip), pbox = REGION_RECTS(pClip); + nbox--; + pbox++) + { + partX1 = pbox->x1; + if (partX1 < x1) + partX1 = x1; + + partX2 = pbox->x2; + if (partX2 > x2) + partX2 = x2; + + if (partX2 <= partX1) + continue; + + partY1 = pbox->y1; + if (partY1 < y1) + partY1 = y1; + + partY2 = pbox->y2; + if (partY2 > y2) + partY2 = y2; + + if (partY2 <= partY1) + continue; + + partX1 *= 3; + partX2 *= 3; + _s3SolidRect(s3,partX1, partY1, partX2-partX1, partY2-partY1); + } + MarkSyncS3(pDrawable->pScreen); +} + +void +s3_24ImageGlyphBlt (DrawablePtr pDrawable, + GCPtr pGC, + int x, + int y, + unsigned int nglyph, + CharInfoPtr *ppciInit, + pointer pglyphBase) +{ + FbGCPrivPtr pPriv = fbGetGCPrivate(pGC); + CharInfoPtr *ppci; + CharInfoPtr pci; + unsigned char *pglyph; /* pointer bits in glyph */ + int gWidth, gHeight; /* width and height of glyph */ + FbStride gStride; /* stride of glyph */ + Bool opaque; + int n; + int gx, gy; + FbBits *dst; + FbStride dstStride; + int dstBpp; + int dstXoff, dstYoff; + FbBits depthMask; + int xBack, widthBack; + int yBack, heightBack; + + depthMask = FbFullMask(pDrawable->depth); + if (!ok24 (pGC->fgPixel) || + !ok24(pGC->bgPixel) || + !ok24(pGC->planemask)) + { + KdCheckImageGlyphBlt(pDrawable, pGC, x, y, nglyph, ppciInit, pglyphBase); + return; + } + fbGetDrawable (pDrawable, dst, dstStride, dstBpp, dstXoff, dstYoff); + + x += pDrawable->x; + y += pDrawable->y; + + ppci = ppciInit; + n = nglyph; + widthBack = 0; + while (n--) + widthBack += (*ppci++)->metrics.characterWidth; + + xBack = x; + if (widthBack < 0) + { + xBack += widthBack; + widthBack = -widthBack; + } + yBack = y - FONTASCENT(pGC->font); + heightBack = FONTASCENT(pGC->font) + FONTDESCENT(pGC->font); + s3_24SolidBoxClipped (pDrawable, + fbGetCompositeClip(pGC), + xBack, + yBack, + xBack + widthBack, + yBack + heightBack, + pPriv->bg); + + KdCheckSync (pDrawable->pScreen); + + ppci = ppciInit; + while (nglyph--) + { + pci = *ppci++; + pglyph = FONTGLYPHBITS(pglyphBase, pci); + gWidth = GLYPHWIDTHPIXELS(pci); + gHeight = GLYPHHEIGHTPIXELS(pci); + if (gWidth && gHeight) + { + gx = x + pci->metrics.leftSideBearing; + gy = y - pci->metrics.ascent; + if (gWidth <= sizeof (FbStip) * 8 && + fbGlyphIn (fbGetCompositeClip(pGC), gx, gy, gWidth, gHeight)) + { + fbGlyph24 (dst + (gy - dstYoff) * dstStride, + dstStride, + dstBpp, + (FbStip *) pglyph, + pPriv->fg, + gx - dstXoff, + gHeight); + } + else + { + gStride = GLYPHWIDTHBYTESPADDED(pci) / sizeof (FbStip); + fbPutXYImage (pDrawable, + fbGetCompositeClip(pGC), + pPriv->fg, + pPriv->bg, + pPriv->pm, + GXcopy, + FALSE, + + gx, + gy, + gWidth, gHeight, + + (FbStip *) pglyph, + gStride, + 0); + } + } + x += pci->metrics.characterWidth; + } +} + +static const GCOps s3_24GCOps = { + s3_24FillSpans, + KdCheckSetSpans, + KdCheckPutImage, + KdCheckCopyArea, + KdCheckCopyPlane, + KdCheckPolyPoint, + KdCheckPolylines, + KdCheckPolySegment, + KdCheckPolyRectangle, + KdCheckPolyArc, + KdCheckFillPolygon, + s3_24PolyFillRect, + KdCheckPolyFillArc, + miPolyText8, + miPolyText16, + miImageText8, + miImageText16, + s3_24ImageGlyphBlt, + KdCheckPolyGlyphBlt, + KdCheckPushPixels, +}; + +void +s3_24ValidateGC (GCPtr pGC, Mask changes, DrawablePtr pDrawable) +{ + if (pDrawable->type != DRAWABLE_WINDOW) + pGC->ops = (GCOps *) &kdAsyncPixmapGCOps; + else + pGC->ops = (GCOps *) &s3_24GCOps; + fbValidateGC (pGC, changes, pDrawable); +} + +GCFuncs s3_24GCFuncs = { + s3_24ValidateGC, + miChangeGC, + miCopyGC, + miDestroyGC, + miChangeClip, + miDestroyClip, + miCopyClip +}; + +Bool +s3_24CreateGC (GCPtr pGC) +{ + if (!fbCreateGC (pGC)) + return FALSE; + + if (pGC->depth != 1) + pGC->funcs = &s3_24GCFuncs; + + return TRUE; +} + +Bool +s3_24CreateWindow(WindowPtr pWin) +{ + return fbCreateWindow (pWin); +} + +void +s3_24PaintWindow(WindowPtr pWin, RegionPtr pRegion, int what) +{ + SetupS3(pWin->drawable.pScreen); + s3PatternPtr pPattern; + + DRAW_DEBUG ((DEBUG_PAINT_WINDOW, "s3PaintWindow 0x%x extents %d %d %d %d n %d", + pWin->drawable.id, + pRegion->extents.x1, pRegion->extents.y1, + pRegion->extents.x2, pRegion->extents.y2, + REGION_NUM_RECTS(pRegion))); + if (!REGION_NUM_RECTS(pRegion)) + return; + switch (what) { + case PW_BACKGROUND: + switch (pWin->backgroundState) { + case None: + return; + case ParentRelative: + do { + pWin = pWin->parent; + } while (pWin->backgroundState == ParentRelative); + (*pWin->drawable.pScreen->PaintWindowBackground)(pWin, pRegion, + what); + return; + case BackgroundPixel: + if (ok24(pWin->background.pixel)) + { + s3_24FillBoxSolid((DrawablePtr)pWin, + (int)REGION_NUM_RECTS(pRegion), + REGION_RECTS(pRegion), + pWin->background.pixel, GXcopy, ~0); + return; + } + } + break; + case PW_BORDER: + if (pWin->borderIsPixel && ok24(pWin->border.pixel)) + { + s3_24FillBoxSolid((DrawablePtr)pWin, + (int)REGION_NUM_RECTS(pRegion), + REGION_RECTS(pRegion), + pWin->border.pixel, GXcopy, ~0); + return; + } + break; + } + KdCheckPaintWindow (pWin, pRegion, what); +} + +Bool +s3DrawInit (ScreenPtr pScreen) +{ + KdScreenPriv(pScreen); + s3ScreenInfo(pScreenPriv); + int ncache_w, ncache_h, ncache; + int px, py; + S3PatternCache *cache; + Bool dumb = FALSE; + int ma; + + switch (pScreenPriv->screen->fb[0].bitsPerPixel) { + case 8: + case 16: + case 32: + break; + case 24: + dumb = TRUE; + break; + default: + return FALSE; + } + /* + * Hook up asynchronous drawing + */ + RegisterSync (pScreen); + /* + * Replace various fb screen functions + */ + if (dumb) + { + pScreen->CreateGC = s3_24CreateGC; + pScreen->CreateWindow = s3_24CreateWindow; + pScreen->PaintWindowBackground = s3_24PaintWindow; + pScreen->PaintWindowBorder = s3_24PaintWindow; + pScreen->CopyWindow = s3CopyWindow; + } + else + { + if (serverGeneration != s3Generation) + { + s3GCPrivateIndex = AllocateGCPrivateIndex (); + s3WindowPrivateIndex = AllocateWindowPrivateIndex (); + s3Generation = serverGeneration; + } + if (!AllocateWindowPrivate(pScreen, s3WindowPrivateIndex, 0)) + return FALSE; + if (!AllocateGCPrivate(pScreen, s3GCPrivateIndex, sizeof (s3PrivGCRec))) + return FALSE; + pScreen->CreateGC = s3CreateGC; + pScreen->CreateWindow = s3CreateWindow; + pScreen->ChangeWindowAttributes = s3ChangeWindowAttributes; + pScreen->DestroyWindow = s3DestroyWindow; + pScreen->PaintWindowBackground = s3PaintWindow; + pScreen->PaintWindowBorder = s3PaintWindow; +#ifndef S3_TRIO + if (pScreenPriv->screen->fb[1].depth) + { + FbOverlayScrPrivPtr pScrPriv = fbOverlayGetScrPriv(pScreen); + + pScrPriv->PaintKey = s3PaintKey; + pScrPriv->CopyWindow = s3CopyWindowProc; + pScreen->CopyWindow = fbOverlayCopyWindow; + } + else +#endif + pScreen->CopyWindow = s3CopyWindow; + + /* + * Initialize patterns + */ +#ifdef S3_TRIO + ma = 0; +#else + for (ma = 0; s3s->fbmap[ma] >= 0; ma++) +#endif + { + ncache_w = s3s->fb[ma].offscreen_width / S3_TILE_SIZE; + ncache_h = s3s->fb[ma].offscreen_height / S3_TILE_SIZE; + ncache = ncache_w * ncache_h; + if (ncache > 64) + ncache = 64; + DRAW_DEBUG ((DEBUG_S3INIT, "ncache_w %d ncache_h %d ncache %d", + ncache_w, ncache_h, ncache)); + s3s->fb[ma].patterns.cache = (S3PatternCache *) xalloc (ncache * sizeof (S3PatternCache)); + if (s3s->fb[ma].patterns.cache) + { + DRAW_DEBUG ((DEBUG_S3INIT, "Have pattern cache")); + s3s->fb[ma].patterns.ncache = ncache; + s3s->fb[ma].patterns.last_used = 0; + s3s->fb[ma].patterns.last_id = 0; + cache = s3s->fb[ma].patterns.cache; + for (py = 0; py < ncache_h && ncache; py++) + for (px = 0; px < ncache_w && ncache; px++) + { + cache->id = 0; + cache->x = s3s->fb[ma].offscreen_x + px * S3_TILE_SIZE; + cache->y = s3s->fb[ma].offscreen_y + py * S3_TILE_SIZE; + cache++; + ncache--; + } + } + } + } + return TRUE; +} + +void +s3DrawEnable (ScreenPtr pScreen) +{ + SetupS3(pScreen); + s3ScreenInfo(pScreenPriv); + int c; + int ma; + + s3SetGlobalBitmap (pScreen, 0); + _s3WaitIdleEmpty (s3); + if (pScreenPriv->screen->fb[0].bitsPerPixel == 24) + { + _s3SetScissorsTl(s3, 0, 0); + _s3SetScissorsBr(s3, pScreenPriv->screen->width*3 - 1, pScreenPriv->screen->height - 1); + _s3SetSolidFill(s3, pScreen->whitePixel, GXcopy, ~0); + _s3SolidRect (s3, 0, 0, pScreenPriv->screen->width*3, pScreenPriv->screen->height); + } + else + { + /* + * Flush pattern cache + */ +#ifdef S3_TRIO + ma = 0; +#else + for (ma = 0; s3s->fbmap[ma] >= 0; ma++) +#endif + { + for (c = 0; c < s3s->fb[ma].patterns.ncache; c++) + s3s->fb[ma].patterns.cache[c].id = 0; + } + + _s3SetScissorsTl(s3, 0, 0); + _s3SetScissorsBr(s3, pScreenPriv->screen->width - 1, pScreenPriv->screen->height - 1); + _s3SetSolidFill(s3, pScreen->blackPixel, GXcopy, ~0); + _s3SolidRect (s3, 0, 0, pScreenPriv->screen->width, pScreenPriv->screen->height); + } + MarkSyncS3 (pScreen); +} + +void +s3DrawDisable (ScreenPtr pScreen) +{ + SetupS3 (pScreen); + _s3WaitIdleEmpty (s3); +} + +void +s3DrawFini (ScreenPtr pScreen) +{ + SetupS3(pScreen); + s3ScreenInfo(pScreenPriv); + int ma; + +#ifdef S3_TRIO + ma = 0; +#else + for (ma = 0; s3s->fbmap[ma] >= 0; ma++) +#endif + { + if (s3s->fb[ma].patterns.cache) + { + xfree (s3s->fb[ma].patterns.cache); + s3s->fb[ma].patterns.cache = 0; + s3s->fb[ma].patterns.ncache = 0; + } + } +} + +void +s3DrawSync (ScreenPtr pScreen) +{ + SetupS3(pScreen); + + _s3WaitIdleEmpty(s3c->s3); +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/savage/s3rtst.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/savage/s3rtst.c @@ -0,0 +1,144 @@ +/* + * Id: s3rtst.c,v 1.1 1999/11/02 03:54:47 keithp Exp $ + * + * Copyright 1999 SuSE, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of SuSE not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. SuSE makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + * + * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE + * BE LIABLE FOR 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. + * + * Author: Keith Packard, SuSE, Inc. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/savage/s3rtst.c,v 1.1 1999/11/19 13:53:57 hohndel Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include "s3reg.h" + +typedef struct { + VgaReg *reg; + char *name; +} NamedVgaReg; + +NamedVgaReg s3VRegs[] = { + s3_h_total, "h_total", + s3_h_display_end, "h_display_end", + s3_h_blank_start, "h_blank_start", + s3_h_blank_end, "h_blank_end", + s3_display_skew, "display_skew", + s3_h_sync_start, "h_sync_start", + s3_h_sync_end, "h_sync_end", + s3_h_skew, "h_skew", + s3_v_total, "v_total", + s3_preset_row_scan, "preset_row_scan", + s3_max_scan_line, "max_scan_line", + s3_start_address, "start_address", + s3_v_retrace_start, "v_retrace_start", + s3_v_retrace_end, "v_retrace_end", + s3_clear_v_retrace_int, "clear_v_retrace_int", + s3_disable_v_retrace_int, "disable_v_retrace_int", + s3_lock_crtc, "lock_crtc", + s3_v_display_end, "v_display_end", + s3_screen_offset, "screen_offset", + s3_count_by_4_mode, "count_by_4_mode", + s3_doubleword_mode, "doubleword_mode", + s3_v_blank_start, "v_blank_start", + s3_v_blank_end, "v_blank_end", + s3_v_total_double, "v_total_double", + s3_word_mode, "word_mode", + s3_byte_mode, "byte_mode", + s3_line_compare, "line_compare", + s3_device_id, "device_id", + s3_revision, "revision", + s3_lock_vert, "lock_vert", + s3_lock_horz, "lock_horz", + s3_io_disable, "io_disable", + s3_mem_size, "mem_size", + s3_register_lock_1 , "register_lock_1 ", + s3_register_lock_2 , "register_lock_2 ", + s3_refresh_control, "refresh_control", + s3_enable_256, "enable_256", + s3_enable_pci_read_bursts, "enable_pci_read_bursts", + s3_h_start_fifo_fetch, "h_start_fifo_fetch", + s3_interlace, "interlace", + s3_old_screen_off_8, "old_screen_off_8", + s3_h_counter_double_mode, "h_counter_double_mode", + s3_hardware_cursor_enable, "hardware_cursor_enable", + s3_hardware_cursor_right, "hardware_cursor_right", + s3_hardware_cursor_x, "hardware_cursor_x", + s3_hardware_cursor_y, "hardware_cursor_y", + s3_hardware_cursor_fg, "hardware_cursor_fg", + s3_cursor_address, "cursor_address", + s3_cursor_start_x, "cursor_start_x", + s3_cursor_start_y, "cursor_start_y", + s3_ge_screen_width, "ge_screen_width", + s3_pixel_length, "pixel_length", + s3_big_endian_linear, "big_endian_linear", + s3_mmio_select, "mmio_select", + s3_mmio_window, "mmio_window", + s3_swap_nibbles, "swap_nibbles", + s3_hardware_cursor_ms_x11, "hardware_cursor_ms_x11", + s3_h_blank_extend, "h_blank_extend", + s3_h_sync_extend, "h_sync_extend", + s3_enable_2d_3d, "enable_2d_3d", + s3_pci_disconnect_enable, "pci_disconnect_enable", + s3_pci_retry_enable, "pci_retry_enable", + s3_color_mode, "color_mode", + s3_screen_off, "screen_off", + s3_unlock_extended_sequencer, "unlock_extended_sequencer", + s3_disable_io_ports, "disable_io_ports", + s3_hsync_control, "hsync_control", + s3_vsync_control, "vsync_control", + s3_mclk_n, "mclk_n", + s3_mclk_r, "mclk_r", + s3_mclk_m, "mclk_m", + s3_dclk_n, "dclk_n", + s3_dclk_r, "dclk_r", + s3_dclk_m, "dclk_m", + s3_mclk_load, "mclk_load", + s3_dclk_load, "dclk_load", + s3_dclk_over_2, "dclk_over_2", + s3_clock_load_imm, "clock_load_imm", + s3_dclk_invert, "dclk_invert", + s3_enable_clock_double, "enable_clock_double", + s3_dclk_double_15_16_invert, "dclk_double_15_16_invert", + s3_enable_gamma_correction, "enable_gamma_correction", + s3_enable_8_bit_luts, "enable_8_bit_luts", + s3_dclk_control, "dclk_control", + s3_vga_dclk_n, "vga_dclk_n", + s3_vga_dclk_r, "vga_dclk_r", + s3_vga_dclk_m1, "vga_dclk_m1", + s3_vga_dclk_m2, "vga_dclk_m2", + s3_vga_clk_select, "vga_clk_select", + s3_clock_select, "clock_select", +}; + +#define NUM_S3_VREGS (sizeof (s3VRegs)/ sizeof (s3VRegs[0])) + +main (int argc, char **argv) +{ + int i; + + iopl(3); + s3SetImm(s3_register_lock_1, 0x48); + s3SetImm(s3_register_lock_2, 0xa0); + s3SetImm(s3_unlock_extended_sequencer, 0x06); + for (i = 0; i < NUM_S3_VREGS; i++) + printf ("%-20.20s %8x\n", s3VRegs[i].name, s3Get (s3VRegs[i].reg)); + s3Restore (); +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/savage/s3cmap.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/savage/s3cmap.c @@ -0,0 +1,125 @@ +/* + * Id: s3cmap.c,v 1.2 1999/11/02 06:16:29 keithp Exp $ + * + * Copyright 1999 SuSE, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of SuSE not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. SuSE makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + * + * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE + * BE LIABLE FOR 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. + * + * Author: Keith Packard, SuSE, Inc. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/savage/s3cmap.c,v 1.4 2000/05/06 22:17:45 keithp Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "s3.h" + +void +s3GetColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs) +{ + KdScreenPriv(pScreen); + s3CardInfo(pScreenPriv); + S3Vga *s3vga = &s3c->s3vga; + + while (ndef--) + { + s3SetImm (s3vga, s3_dac_read_index, pdefs->pixel); + pdefs->red = s3GetImm (s3vga, s3_dac_data) << 8; + pdefs->green = s3GetImm (s3vga, s3_dac_data) << 8; + pdefs->blue = s3GetImm (s3vga, s3_dac_data) << 8; + pdefs++; + } +} + +#ifndef S3_TRIO +#define Shift(v,d) ((d) < 0 ? ((v) >> (-d)) : ((v) << (d))) + +void +s3SetTrueChromaKey (ScreenPtr pScreen, int pfb, xColorItem *pdef) +{ + FbOverlayScrPrivPtr pScrPriv = fbOverlayGetScrPriv(pScreen); + KdScreenPriv(pScreen); + s3ScreenInfo(pScreenPriv); + int fb, ma; + CARD32 key; + int r, g, b; + + for (ma = 0; s3s->fbmap[ma] >= 0; ma++) + { + fb = s3s->fbmap[ma]; + if (fb != pfb && pScreenPriv->screen->fb[fb].redMask) + { + r = KdComputeCmapShift (pScreenPriv->screen->fb[fb].redMask); + g = KdComputeCmapShift (pScreenPriv->screen->fb[fb].greenMask); + b = KdComputeCmapShift (pScreenPriv->screen->fb[fb].blueMask); + key = ((Shift(pdef->red,r) & pScreenPriv->screen->fb[fb].redMask) | + (Shift(pdef->green,g) & pScreenPriv->screen->fb[fb].greenMask) | + (Shift(pdef->blue,b) & pScreenPriv->screen->fb[fb].blueMask)); + if (pScrPriv->layer[fb].key != key) + { + pScrPriv->layer[fb].key = key; + (*pScrPriv->PaintKey) (&pScrPriv->layer[fb].u.run.pixmap->drawable, + &pScrPriv->layer[pfb].u.run.region, + pScrPriv->layer[fb].key, fb); + } + } + } +} +#endif + +void +s3PutColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs) +{ + KdScreenPriv(pScreen); + s3CardInfo(pScreenPriv); + s3ScreenInfo(pScreenPriv); + S3Vga *s3vga = &s3c->s3vga; + xColorItem *chroma = 0; + CARD32 key; + +#if 0 + _s3WaitVRetrace (s3vga); +#else + S3Ptr s3 = s3c->s3; + _s3WaitVRetraceFast(s3); +#endif +#ifndef S3_TRIO + if (pScreenPriv->screen->fb[1].depth) + { + FbOverlayScrPrivPtr pScrPriv = fbOverlayGetScrPriv(pScreen); + key = pScrPriv->layer[fb].key; + } +#endif + else + key = ~0; + while (ndef--) + { + if (pdefs->pixel == key) + chroma = pdefs; + s3SetImm (s3vga, s3_dac_write_index, pdefs->pixel); + s3SetImm (s3vga, s3_dac_data, pdefs->red >> 8); + s3SetImm (s3vga, s3_dac_data, pdefs->green >> 8); + s3SetImm (s3vga, s3_dac_data, pdefs->blue >> 8); + pdefs++; + } +#ifndef S3_TRIO + if (chroma && !pScreenPriv->closed) + s3SetTrueChromaKey (pScreen, fb, chroma); +#endif +} + --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/savage/s3stub.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/savage/s3stub.c @@ -0,0 +1,100 @@ +/* + * Id: s3stub.c,v 1.1 1999/11/02 08:19:15 keithp Exp $ + * + * Copyright 1999 SuSE, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of SuSE not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. SuSE makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + * + * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE + * BE LIABLE FOR 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. + * + * Author: Keith Packard, SuSE, Inc. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/savage/s3stub.c,v 1.3 2000/02/23 20:30:05 dawes Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "s3.h" + +void +InitCard (char *name) +{ + KdCardAttr attr; +#ifdef VXWORKS + attr.naddr = 2; + attr.io = 0; + attr.address[0] = 0xbc000000; /* registers */ + attr.address[1] = 0xba000000; /* frame buffer */ + KdCardInfoAdd (&s3Funcs, &attr, 0); +#else + CARD32 count; + + count = 0; + while (LinuxFindPci (0x5333, 0x8a22, count, &attr)) + { + KdCardInfoAdd (&s3Funcs, &attr, 0); + count++; + } +#endif +} + +void +InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv) +{ + KdInitOutput (pScreenInfo, argc, argv); +} + +void +InitInput (int argc, char **argv) +{ +#ifdef VXWORKS + KdInitInput (&VxWorksMouseFuncs, &VxWorksKeyboardFuncs); +#endif +#ifdef linux + KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs); +#endif +} + +extern int s3CpuTimeout; +extern int s3AccelTimeout; + +void +ddxUseMsg (void) +{ + ErrorF("\nSavage Driver Options:\n"); + ErrorF("-cpu Sets CPU timout\n"); + ErrorF("-accel Sets acceleration timout\n"); + + KdUseMsg(); +} + +int +ddxProcessArgument (int argc, char **argv, int i) +{ + int ret; + + if (!strcmp (argv[i], "-cpu")) + { + s3CpuTimeout = strtol(argv[i+1], NULL, 0); + return 2; + } + if (!strcmp (argv[i], "-accel")) + { + s3AccelTimeout = strtol (argv[i+1], NULL, 0); + return 2; + } + return KdProcessArgument (argc, argv, i); +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/savage/s3reg.h +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/savage/s3reg.h @@ -0,0 +1,230 @@ +/* + * Id: s3reg.h,v 1.1 1999/11/02 03:54:47 keithp Exp $ + * + * Copyright 1999 SuSE, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of SuSE not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. SuSE makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + * + * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE + * BE LIABLE FOR 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. + * + * Author: Keith Packard, SuSE, Inc. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/savage/s3reg.h,v 1.3 2000/02/23 20:30:05 dawes Exp $ */ + +#ifndef _S3REG_H_ +#define _S3REG_H_ + +#include "vga.h" + +#define S3_SR 0 +#define S3_NSR 0x70 +#define S3_GR (S3_SR+S3_NSR) +#define S3_NGR 0x09 +#define S3_AR (S3_GR+S3_NGR) +#define S3_NAR 0x15 +#define S3_CR (S3_AR+S3_NAR) +#define S3_NCR 0xc0 +#define S3_DAC (S3_CR+S3_NCR) +#define S3_NDAC 4 +#define S3_MISC_OUT (S3_DAC + S3_NDAC) +#define S3_INPUT_STATUS_1 (S3_MISC_OUT+1) +#define S3_NREG (S3_INPUT_STATUS_1+1) + +extern VgaReg s3_h_total[]; +extern VgaReg s3_h_display_end[]; +extern VgaReg s3_h_blank_start[]; +extern VgaReg s3_h_blank_end[]; +extern VgaReg s3_display_skew[]; +extern VgaReg s3_h_sync_start[]; +extern VgaReg s3_h_sync_end[]; +extern VgaReg s3_h_skew[]; +extern VgaReg s3_v_total[]; +extern VgaReg s3_preset_row_scan[]; +extern VgaReg s3_max_scan_line[]; +extern VgaReg s3_start_address[]; +extern VgaReg s3_v_retrace_start[]; +extern VgaReg s3_v_retrace_end[]; +extern VgaReg s3_clear_v_retrace_int[]; +extern VgaReg s3_disable_v_retrace_int[]; +extern VgaReg s3_lock_crtc[]; +extern VgaReg s3_v_display_end[]; +extern VgaReg s3_screen_offset[]; +extern VgaReg s3_count_by_4_mode[]; +extern VgaReg s3_doubleword_mode[]; +extern VgaReg s3_v_blank_start[]; +extern VgaReg s3_v_blank_end[]; +extern VgaReg s3_2bk_cga[]; +extern VgaReg s3_4bk_hga[]; +extern VgaReg s3_v_total_double[]; +extern VgaReg s3_address_16k_wrap[]; +extern VgaReg s3_word_mode[]; +extern VgaReg s3_byte_mode[]; +extern VgaReg s3_hardware_reset[]; +extern VgaReg s3_line_compare[]; +extern VgaReg s3_delay_primary_load[]; +extern VgaReg s3_device_id[]; +extern VgaReg s3_revision[]; +extern VgaReg s3_enable_vga_16bit[]; +extern VgaReg s3_enhanced_memory_mapping[]; +extern VgaReg s3_enable_sff[]; +extern VgaReg s3_lock_dac_writes[]; +extern VgaReg s3_border_select[]; +extern VgaReg s3_lock_palette[]; +extern VgaReg s3_lock_vert[]; +extern VgaReg s3_lock_horz[]; +extern VgaReg s3_io_disable[]; +extern VgaReg s3_mem_size[]; +extern VgaReg s3_register_lock_1 []; +extern VgaReg s3_register_lock_2 []; +extern VgaReg s3_refresh_control[]; +extern VgaReg s3_enable_256[]; +extern VgaReg s3_disable_pci_read_bursts[]; +extern VgaReg s3_h_start_fifo_fetch[]; +extern VgaReg s3_enable_2d_access[]; +extern VgaReg s3_interlace[]; +extern VgaReg s3_old_screen_off_8[]; +extern VgaReg s3_h_counter_double_mode[]; +extern VgaReg s3_cursor_enable[]; +extern VgaReg s3_cursor_right[]; +extern VgaReg s3_cursor_xhigh[]; +extern VgaReg s3_cursor_xlow[]; +extern VgaReg s3_cursor_yhigh[]; +extern VgaReg s3_cursor_ylow[]; +extern VgaReg s3_cursor_fg[]; +extern VgaReg s3_cursor_bg[]; +extern VgaReg s3_cursor_address[]; +extern VgaReg s3_cursor_xoff[]; +extern VgaReg s3_cursor_yoff[]; +extern VgaReg s3_ge_screen_width[]; +extern VgaReg s3_pixel_length[]; +extern VgaReg s3_big_endian_linear[]; +extern VgaReg s3_mmio_select[]; +extern VgaReg s3_mmio_window[]; +extern VgaReg s3_swap_nibbles[]; +extern VgaReg s3_cursor_ms_x11[]; +extern VgaReg s3_linear_window_size[]; +extern VgaReg s3_enable_linear[]; +extern VgaReg s3_h_blank_extend[]; +extern VgaReg s3_h_sync_extend[]; +extern VgaReg s3_sdclk_skew[]; +extern VgaReg s3_delay_blank[]; +extern VgaReg s3_delay_h_enable[]; +extern VgaReg s3_enable_2d_3d[]; +extern VgaReg s3_pci_disconnect_enable[]; +extern VgaReg s3_primary_load_control[]; +extern VgaReg s3_secondary_load_control[]; +extern VgaReg s3_pci_retry_enable[]; +extern VgaReg s3_streams_mode[]; +extern VgaReg s3_color_mode[]; +extern VgaReg s3_primary_stream_definition[]; +extern VgaReg s3_primary_stream_timeout[]; +extern VgaReg s3_master_control_unit_timeout[]; +extern VgaReg s3_command_buffer_timeout[]; +extern VgaReg s3_lpb_timeout[]; +extern VgaReg s3_cpu_timeout[]; +extern VgaReg s3_2d_graphics_engine_timeout[]; +extern VgaReg s3_fifo_drain_delay[]; +extern VgaReg s3_fifo_fetch_timing[]; +extern VgaReg s3_dac_power_up_time[]; +extern VgaReg s3_dac_power_saving_disable[]; +extern VgaReg s3_flat_panel_output_control_1[]; +extern VgaReg s3_streams_fifo_delay[]; +extern VgaReg s3_flat_panel_output_control_2[]; +extern VgaReg s3_enable_l1_parameter[]; +extern VgaReg s3_primary_stream_l1[]; + +extern VgaReg s3_dot_clock_8[]; +extern VgaReg s3_screen_off[]; +extern VgaReg s3_enable_write_plane[]; +extern VgaReg s3_extended_memory_access[]; +extern VgaReg s3_sequential_addressing_mode[]; +extern VgaReg s3_select_chain_4_mode[]; + +extern VgaReg s3_unlock_extended_sequencer[]; +extern VgaReg s3_linear_addressing_control[]; +extern VgaReg s3_disable_io_ports[]; +extern VgaReg s3_hsync_control[]; +extern VgaReg s3_vsync_control[]; +extern VgaReg s3_mclk_n[]; +extern VgaReg s3_mclk_r[]; +extern VgaReg s3_mclk_m[]; +extern VgaReg s3_dclk_n[]; +extern VgaReg s3_dclk_r[]; +extern VgaReg s3_dclk_m[]; +extern VgaReg s3_mclk_load[]; +extern VgaReg s3_dclk_load[]; +extern VgaReg s3_dclk_over_2[]; +extern VgaReg s3_clock_load_imm[]; +extern VgaReg s3_dclk_invert[]; +extern VgaReg s3_enable_clock_double[]; +extern VgaReg s3_dclk_double_15_16_invert[]; +extern VgaReg s3_enable_gamma_correction[]; +extern VgaReg s3_enable_8_bit_luts[]; +extern VgaReg s3_dclk_control[]; +extern VgaReg s3_eclk_n[]; +extern VgaReg s3_eclk_r[]; +extern VgaReg s3_eclk_m[]; +extern VgaReg s3_vga_dclk_n[]; +extern VgaReg s3_vga_dclk_r[]; +extern VgaReg s3_vga_dclk_m1[]; +extern VgaReg s3_vga_dclk_m2[]; +extern VgaReg s3_vga_clk_select[]; +extern VgaReg s3_select_graphics_mode[]; +extern VgaReg s3_enable_blinking[]; +extern VgaReg s3_border_color[]; + +extern VgaReg s3_io_addr_select[]; +extern VgaReg s3_enable_ram[]; +extern VgaReg s3_clock_select[]; +extern VgaReg s3_horz_sync_neg[]; +extern VgaReg s3_vert_sync_neg[]; + +extern VgaReg s3_display_mode_inactive[]; +extern VgaReg s3_vertical_sync_active[]; + +extern VgaReg s3_dac_mask[]; +extern VgaReg s3_dac_read_index[]; +extern VgaReg s3_dac_write_index[]; +extern VgaReg s3_dac_data[]; + +#define s3Get(sv,r) VgaGet(&(sv)->card, (r)) +#define s3GetImm(sv,r) VgaGetImm(&(sv)->card, (r)) +#define s3Set(sv,r,v) VgaSet(&(sv)->card, (r), (v)) +#define s3SetImm(sv,r,v) VgaSetImm(&(sv)->card, (r), (v)) + +typedef struct _s3Vga { + VgaCard card; + VgaValue values[S3_NREG]; + VGA32 save_lock_crtc; + VGA32 save_register_lock_1; + VGA32 save_register_lock_2; + VGA32 save_unlock_extended_sequencer; + VGA32 save_lock_dac_writes; + VGA32 save_lock_horz; + VGA32 save_lock_vert; + VGA32 save_dot_clock_8; +} S3Vga; + +void +s3RegInit (S3Vga *s3vga, VGAVOL8 *mmio); + +void +s3Save (S3Vga *s3vga); + +void +s3Reset (S3Vga *s3vga); + +#endif /* _S3REG_H_ */ --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/savage/s3reg.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/savage/s3reg.c @@ -0,0 +1,1304 @@ +/* + * Id: s3reg.c,v 1.1 1999/11/02 03:54:47 keithp Exp $ + * + * Copyright 1999 SuSE, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of SuSE not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. SuSE makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + * + * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE + * BE LIABLE FOR 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. + * + * Author: Keith Packard, SuSE, Inc. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/savage/s3reg.c,v 1.3 2000/02/23 20:30:04 dawes Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "s3reg.h" + +#define CR00 S3_CR+0x00 +#define CR01 S3_CR+0x01 +#define CR02 S3_CR+0x02 +#define CR03 S3_CR+0x03 +#define CR04 S3_CR+0x04 +#define CR05 S3_CR+0x05 +#define CR06 S3_CR+0x06 +#define CR07 S3_CR+0x07 +#define CR08 S3_CR+0x08 +#define CR09 S3_CR+0x09 +#define CR0A S3_CR+0x0A +#define CR0B S3_CR+0x0B +#define CR0C S3_CR+0x0C +#define CR0D S3_CR+0x0D +#define CR0E S3_CR+0x0E +#define CR0F S3_CR+0x0F +#define CR10 S3_CR+0x10 +#define CR11 S3_CR+0x11 +#define CR12 S3_CR+0x12 +#define CR13 S3_CR+0x13 +#define CR14 S3_CR+0x14 +#define CR15 S3_CR+0x15 +#define CR16 S3_CR+0x16 +#define CR17 S3_CR+0x17 +#define CR18 S3_CR+0x18 +#define CR19 S3_CR+0x19 +#define CR1A S3_CR+0x1A +#define CR1B S3_CR+0x1B +#define CR1C S3_CR+0x1C +#define CR1D S3_CR+0x1D +#define CR1E S3_CR+0x1E +#define CR1F S3_CR+0x1F +#define CR20 S3_CR+0x20 +#define CR21 S3_CR+0x21 +#define CR22 S3_CR+0x22 +#define CR23 S3_CR+0x23 +#define CR24 S3_CR+0x24 +#define CR25 S3_CR+0x25 +#define CR26 S3_CR+0x26 +#define CR27 S3_CR+0x27 +#define CR28 S3_CR+0x28 +#define CR29 S3_CR+0x29 +#define CR2A S3_CR+0x2A +#define CR2B S3_CR+0x2B +#define CR2C S3_CR+0x2C +#define CR2D S3_CR+0x2D +#define CR2E S3_CR+0x2E +#define CR2F S3_CR+0x2F +#define CR30 S3_CR+0x30 +#define CR31 S3_CR+0x31 +#define CR32 S3_CR+0x32 +#define CR33 S3_CR+0x33 +#define CR34 S3_CR+0x34 +#define CR35 S3_CR+0x35 +#define CR36 S3_CR+0x36 +#define CR37 S3_CR+0x37 +#define CR38 S3_CR+0x38 +#define CR39 S3_CR+0x39 +#define CR3A S3_CR+0x3A +#define CR3B S3_CR+0x3B +#define CR3C S3_CR+0x3C +#define CR3D S3_CR+0x3D +#define CR3E S3_CR+0x3E +#define CR3F S3_CR+0x3F +#define CR40 S3_CR+0x40 +#define CR41 S3_CR+0x41 +#define CR42 S3_CR+0x42 +#define CR43 S3_CR+0x43 +#define CR44 S3_CR+0x44 +#define CR45 S3_CR+0x45 +#define CR46 S3_CR+0x46 +#define CR47 S3_CR+0x47 +#define CR48 S3_CR+0x48 +#define CR49 S3_CR+0x49 +#define CR4A S3_CR+0x4A +#define CR4B S3_CR+0x4B +#define CR4C S3_CR+0x4C +#define CR4D S3_CR+0x4D +#define CR4E S3_CR+0x4E +#define CR4F S3_CR+0x4F +#define CR50 S3_CR+0x50 +#define CR51 S3_CR+0x51 +#define CR52 S3_CR+0x52 +#define CR53 S3_CR+0x53 +#define CR54 S3_CR+0x54 +#define CR55 S3_CR+0x55 +#define CR56 S3_CR+0x56 +#define CR57 S3_CR+0x57 +#define CR58 S3_CR+0x58 +#define CR59 S3_CR+0x59 +#define CR5A S3_CR+0x5A +#define CR5B S3_CR+0x5B +#define CR5C S3_CR+0x5C +#define CR5D S3_CR+0x5D +#define CR5E S3_CR+0x5E +#define CR5F S3_CR+0x5F +#define CR60 S3_CR+0x60 +#define CR61 S3_CR+0x61 +#define CR62 S3_CR+0x62 +#define CR63 S3_CR+0x63 +#define CR64 S3_CR+0x64 +#define CR65 S3_CR+0x65 +#define CR66 S3_CR+0x66 +#define CR67 S3_CR+0x67 +#define CR68 S3_CR+0x68 +#define CR69 S3_CR+0x69 +#define CR6A S3_CR+0x6A +#define CR6B S3_CR+0x6B +#define CR6C S3_CR+0x6C +#define CR6D S3_CR+0x6D +#define CR6E S3_CR+0x6E +#define CR6F S3_CR+0x6F +#define CR70 S3_CR+0x70 +#define CR71 S3_CR+0x71 +#define CR72 S3_CR+0x72 +#define CR73 S3_CR+0x73 +#define CR74 S3_CR+0x74 +#define CR75 S3_CR+0x75 +#define CR76 S3_CR+0x76 +#define CR77 S3_CR+0x77 +#define CR78 S3_CR+0x78 +#define CR79 S3_CR+0x79 +#define CR7A S3_CR+0x7A +#define CR7B S3_CR+0x7B +#define CR7C S3_CR+0x7C +#define CR7D S3_CR+0x7D +#define CR7E S3_CR+0x7E +#define CR7F S3_CR+0x7F +#define CR80 S3_CR+0x80 +#define CR81 S3_CR+0x81 +#define CR82 S3_CR+0x82 +#define CR83 S3_CR+0x83 +#define CR84 S3_CR+0x84 +#define CR85 S3_CR+0x85 +#define CR86 S3_CR+0x86 +#define CR87 S3_CR+0x87 +#define CR88 S3_CR+0x88 +#define CR89 S3_CR+0x89 +#define CR8A S3_CR+0x8A +#define CR8B S3_CR+0x8B +#define CR8C S3_CR+0x8C +#define CR8D S3_CR+0x8D +#define CR8E S3_CR+0x8E +#define CR8F S3_CR+0x8F +#define CR90 S3_CR+0x90 +#define CR91 S3_CR+0x91 +#define CR92 S3_CR+0x92 +#define CR93 S3_CR+0x93 +#define CR94 S3_CR+0x94 +#define CR95 S3_CR+0x95 +#define CR96 S3_CR+0x96 +#define CR97 S3_CR+0x97 +#define CR98 S3_CR+0x98 +#define CR99 S3_CR+0x99 +#define CR9A S3_CR+0x9A +#define CR9B S3_CR+0x9B +#define CR9C S3_CR+0x9C +#define CR9D S3_CR+0x9D +#define CR9E S3_CR+0x9E +#define CR9F S3_CR+0x9F +#define CRA0 S3_CR+0xA0 +#define CRA1 S3_CR+0xA1 +#define CRA2 S3_CR+0xA2 +#define CRA3 S3_CR+0xA3 +#define CRA4 S3_CR+0xA4 +#define CRA5 S3_CR+0xA5 +#define CRA6 S3_CR+0xA6 +#define CRA7 S3_CR+0xA7 +#define CRA8 S3_CR+0xA8 +#define CRA9 S3_CR+0xA9 +#define CRAA S3_CR+0xAA +#define CRAB S3_CR+0xAB +#define CRAC S3_CR+0xAC +#define CRAD S3_CR+0xAD +#define CRAE S3_CR+0xAE +#define CRAF S3_CR+0xAF +#define CRB0 S3_CR+0xB0 +#define CRB1 S3_CR+0xB1 +#define CRB2 S3_CR+0xB2 +#define CRB3 S3_CR+0xB3 +#define CRB4 S3_CR+0xB4 +#define CRB5 S3_CR+0xB5 +#define CRB6 S3_CR+0xB6 +#define CRB7 S3_CR+0xB7 +#define CRB8 S3_CR+0xB8 +#define CRB9 S3_CR+0xB9 +#define CRBA S3_CR+0xBA +#define CRBB S3_CR+0xBB +#define CRBC S3_CR+0xBC +#define CRBD S3_CR+0xBD +#define CRBE S3_CR+0xBE +#define CRBF S3_CR+0xBF + +#define CR_FIRST CR00 + +VgaReg s3_h_total[] = { + CR00, 0, 8, + CR5D, 0, 1, + CR5F, 0, 2, + VGA_REG_END +}; + +VgaReg s3_h_display_end[] = { + CR01, 0, 8, + CR5D, 1, 1, + CR5F, 2, 2, + VGA_REG_END +}; + +VgaReg s3_h_blank_start[] = { + CR02, 0, 8, + CR5D, 2, 1, + CR5F, 4, 2, + VGA_REG_END +}; + +VgaReg s3_h_blank_end[] = { + CR03, 0, 5, + CR05, 7, 1, + VGA_REG_END +}; + +VgaReg s3_display_skew[] = { + CR03, 5, 2, + VGA_REG_END +}; + +VgaReg s3_h_sync_start[] = { + CR04, 0, 8, + CR5D, 4, 1, + CR5F, 6, 2, + VGA_REG_END +}; + +VgaReg s3_h_sync_end[] = { + CR05, 0, 5, + VGA_REG_END +}; + +VgaReg s3_h_skew[] = { + CR05, 5, 2, + VGA_REG_END +}; + +VgaReg s3_v_total[] = { + CR06, 0, 8, + CR07, 0, 1, + CR07, 5, 1, + CR5E, 0, 1, + VGA_REG_END +}; + +VgaReg s3_preset_row_scan[] = { + CR08, 0, 8, + VGA_REG_END +}; + +VgaReg s3_max_scan_line[] = { + CR09, 0, 5, + VGA_REG_END +}; + +VgaReg s3_start_address[] = { + CR0D, 0, 8, + CR0C, 0, 8, + CR69, 0, 7, + VGA_REG_END +}; + +VgaReg s3_v_retrace_start[] = { + CR10, 0, 8, + CR07, 2, 1, + CR07, 7, 1, + CR5E, 4, 1, + VGA_REG_END +}; + +VgaReg s3_v_retrace_end[] = { + CR11, 0, 4, + VGA_REG_END +}; + +VgaReg s3_clear_v_retrace_int[] = { + CR11, 4, 1, + VGA_REG_END +}; + +VgaReg s3_disable_v_retrace_int[] = { + CR11, 5, 1, + VGA_REG_END +}; + +VgaReg s3_lock_crtc[] = { + CR11, 7, 1, + VGA_REG_END +}; + +VgaReg s3_v_display_end[] = { + CR12, 0, 8, + CR07, 1, 1, + CR07, 6, 1, + CR5E, 1, 1, + VGA_REG_END +}; + +VgaReg s3_screen_offset[] = { + CR13, 0, 8, + CR51, 4, 2, + VGA_REG_END +}; + +VgaReg s3_count_by_4_mode[] = { + CR14, 5, 1, + VGA_REG_END +}; + +VgaReg s3_doubleword_mode[] = { + CR14, 6, 1, + VGA_REG_END +}; + +VgaReg s3_v_blank_start[] = { + CR15, 0, 8, + CR07, 3, 1, + CR09, 5, 1, + CR5E, 2, 1, + VGA_REG_END +}; + +VgaReg s3_v_blank_end[] = { + CR16, 0, 8, + VGA_REG_END +}; + +VgaReg s3_2bk_cga[] = { + CR17, 0, 1, + VGA_REG_END +}; + +VgaReg s3_4bk_hga[] = { + CR17, 1, 1, + VGA_REG_END +}; + +VgaReg s3_v_total_double[] = { + CR17, 2, 1, + VGA_REG_END +}; + +VgaReg s3_word_mode[] = { + CR17, 3, 1, + VGA_REG_END +}; + +VgaReg s3_address_16k_wrap[] = { + CR17, 5, 1, + VGA_REG_END +}; + +VgaReg s3_byte_mode[] = { + CR17, 6, 1, + VGA_REG_END +}; + +VgaReg s3_hardware_reset[] = { + CR17, 7, 1, + VGA_REG_END +}; + +VgaReg s3_line_compare[] = { + CR18, 0, 8, + CR07, 4, 1, + CR09, 6, 1, + CR5E, 6, 1, + VGA_REG_END +}; + +VgaReg s3_delay_primary_load[] = { + CR21, 1, 1, + VGA_REG_END +}; + +VgaReg s3_device_id[] = { + CR2E, 0, 8, + CR2D, 0, 8, + VGA_REG_END +}; + +VgaReg s3_revision[] = { + CR2F, 0, 8, + VGA_REG_END +}; + +VgaReg s3_enable_vga_16bit[] = { + CR31, 2, 1, + VGA_REG_END +}; + +VgaReg s3_enhanced_memory_mapping[] = { + CR31, 3, 1, + VGA_REG_END +}; + +VgaReg s3_lock_dac_writes[] = { + CR33, 4, 1, + VGA_REG_END +}; + +VgaReg s3_border_select[] = { + CR33, 5, 1, + VGA_REG_END +}; + +VgaReg s3_lock_palette[] = { + CR33, 6, 1, + VGA_REG_END +}; + +VgaReg s3_enable_sff[] = { + CR34, 4, 1, + VGA_REG_END +}; + +VgaReg s3_lock_vert[] = { + CR35, 4, 1, + VGA_REG_END +}; + +VgaReg s3_lock_horz[] = { + CR35, 5, 1, + VGA_REG_END +}; + +VgaReg s3_io_disable[] = { + CR36, 4, 1, + VGA_REG_END +}; + +VgaReg s3_mem_size[] = { + CR36, 5, 3, + VGA_REG_END +}; + +VgaReg s3_register_lock_1 [] = { + CR38, 0, 8, /* load with 0x48 */ + VGA_REG_END +}; + +VgaReg s3_register_lock_2 [] = { + CR39, 0, 8, /* load with 0xa0 */ + VGA_REG_END +}; + +VgaReg s3_refresh_control[] = { + CR3A, 0, 2, + VGA_REG_END +}; + +VgaReg s3_enable_256[] = { + CR3A, 4, 1, + VGA_REG_END +}; + +VgaReg s3_disable_pci_read_bursts[] = { + CR3A, 7, 1, + VGA_REG_END +}; + +VgaReg s3_h_start_fifo_fetch[] = { + CR3B, 0, 8, + CR5D, 6, 1, + CR5B, 2, 2, + VGA_REG_END +}; + +VgaReg s3_enable_2d_access[] = { + CR40, 0, 1, + VGA_REG_END +}; + +VgaReg s3_interlace[] = { + CR42, 5, 1, + VGA_REG_END +}; + +VgaReg s3_old_screen_off_8[] = { + CR43, 2, 1, + VGA_REG_END +}; + +VgaReg s3_h_counter_double_mode[] = { + CR43, 7, 1, + VGA_REG_END +}; + +VgaReg s3_cursor_enable[] = { + CR45, 0, 1, + VGA_REG_END +}; + +VgaReg s3_cursor_right[] = { + CR45, 4, 1, + VGA_REG_END +}; + +VgaReg s3_cursor_xhigh[] = { + CR46, 0, 3, + VGA_REG_END +}; + +VgaReg s3_cursor_xlow[] = { + CR47, 0, 8, + VGA_REG_END +}; + +VgaReg s3_cursor_yhigh[] = { + CR48, 0, 3, + VGA_REG_END +}; + +VgaReg s3_cursor_ylow[] = { + CR49, 0, 8, + VGA_REG_END +}; + +VgaReg s3_cursor_fg[] = { + CR4A, 0, 8, + VGA_REG_END +}; + +VgaReg s3_cursor_bg[] = { + CR4B, 0, 8, + VGA_REG_END +}; + +VgaReg s3_cursor_address[] = { + CR4D, 0, 8, + CR4C, 0, 8, + VGA_REG_END +}; + +VgaReg s3_cursor_xoff[] = { + CR4E, 0, 6, + VGA_REG_END +}; + +VgaReg s3_cursor_yoff[] = { + CR4F, 0, 6, + VGA_REG_END +}; + +VgaReg s3_ge_screen_width[] = { + CR50, 6, 2, + CR50, 0, 1, + VGA_REG_END +}; + +VgaReg s3_pixel_length[] = { + CR50, 4, 2, + VGA_REG_END +}; + +VgaReg s3_big_endian_linear[] = { + CR53, 1, 2, + VGA_REG_END +}; + +VgaReg s3_mmio_select[] = { + CR53, 3, 2, + VGA_REG_END +}; + +VgaReg s3_mmio_window[] = { + CR53, 5, 1, + VGA_REG_END +}; + +VgaReg s3_swap_nibbles[] = { + CR53, 6, 1, + VGA_REG_END +}; + +VgaReg s3_cursor_ms_x11[] = { + CR55, 4, 1, + VGA_REG_END +}; + +VgaReg s3_linear_window_size[] = { + CR58, 0, 2, + VGA_REG_END +}; + +VgaReg s3_enable_linear[] = { + CR58, 4, 1, + VGA_REG_END +}; + +VgaReg s3_h_blank_extend[] = { + CR5D, 3, 1, + VGA_REG_END +}; + +VgaReg s3_h_sync_extend[] = { + CR5D, 5, 1, + VGA_REG_END +}; + +VgaReg s3_sdclk_skew[] = { + CR60, 0, 4, + VGA_REG_END +}; + +VgaReg s3_delay_blank[] = { + CR65, 3, 2, + VGA_REG_END +}; + +VgaReg s3_delay_h_enable[] = { + CR65, 6, 2, + CR65, 0, 1, + VGA_REG_END +}; + +VgaReg s3_enable_2d_3d[] = { + CR66, 0, 1, + VGA_REG_END +}; + +VgaReg s3_pci_disconnect_enable[] = { + CR66, 3, 1, + VGA_REG_END +}; + +VgaReg s3_primary_load_control[] = { + CR66, 4, 1, + VGA_REG_END +}; + +VgaReg s3_secondary_load_control[] = { + CR66, 5, 1, + VGA_REG_END +}; + +VgaReg s3_pci_retry_enable[] = { + CR66, 7, 1, + VGA_REG_END +}; + +VgaReg s3_streams_mode[] = { + CR67, 2, 2, + VGA_REG_END +}; + +VgaReg s3_color_mode[] = { + CR67, 4, 4, + VGA_REG_END +}; + +VgaReg s3_primary_stream_definition[] = { + CR69, 7, 1, + VGA_REG_END +}; + +VgaReg s3_primary_stream_timeout[] = { + CR71, 0, 8, + VGA_REG_END +}; + +VgaReg s3_master_control_unit_timeout[] = { + CR74, 0, 8, + VGA_REG_END +}; + +VgaReg s3_command_buffer_timeout[] = { + CR75, 0, 8, + VGA_REG_END +}; + +VgaReg s3_lpb_timeout[] = { + CR76, 0, 8, + VGA_REG_END +}; + +VgaReg s3_cpu_timeout[] = { + CR78, 0, 8, + VGA_REG_END +}; + +VgaReg s3_2d_graphics_engine_timeout[] = { + CR79, 0, 8, + VGA_REG_END +}; + +VgaReg s3_fifo_drain_delay[] = { + CR85, 0, 3, + VGA_REG_END +}; + +VgaReg s3_fifo_fetch_timing[] = { + CR85, 4, 1, + VGA_REG_END +}; + +VgaReg s3_dac_power_up_time[] = { + CR86, 0, 7, + VGA_REG_END +}; + +VgaReg s3_dac_power_saving_disable[] = { + CR86, 7, 1, + VGA_REG_END +}; + +VgaReg s3_flat_panel_output_control_1[] = { + CR90, 3, 1, + VGA_REG_END +}; + +VgaReg s3_streams_fifo_delay[] = { + CR90, 4, 2, + VGA_REG_END +}; + +VgaReg s3_flat_panel_output_control_2[] = { + CR90, 6, 1, + VGA_REG_END +}; + +VgaReg s3_enable_l1_parameter[] = { + CR90, 7, 1, + VGA_REG_END +}; + +VgaReg s3_primary_stream_l1[] = { + CR91, 0, 8, + CR90, 0, 3, + VGA_REG_END +}; + +#define CR_LAST CR91 + +#define SR00 S3_SR+0x00 +#define SR01 S3_SR+0x01 +#define SR02 S3_SR+0x02 +#define SR03 S3_SR+0x03 +#define SR04 S3_SR+0x04 +#define SR05 S3_SR+0x05 +#define SR06 S3_SR+0x06 +#define SR07 S3_SR+0x07 +#define SR08 S3_SR+0x08 +#define SR09 S3_SR+0x09 +#define SR0A S3_SR+0x0A +#define SR0B S3_SR+0x0B +#define SR0C S3_SR+0x0C +#define SR0D S3_SR+0x0D +#define SR0E S3_SR+0x0E +#define SR0F S3_SR+0x0F +#define SR10 S3_SR+0x10 +#define SR11 S3_SR+0x11 +#define SR12 S3_SR+0x12 +#define SR13 S3_SR+0x13 +#define SR14 S3_SR+0x14 +#define SR15 S3_SR+0x15 +#define SR16 S3_SR+0x16 +#define SR17 S3_SR+0x17 +#define SR18 S3_SR+0x18 +#define SR19 S3_SR+0x19 +#define SR1A S3_SR+0x1A +#define SR1B S3_SR+0x1B +#define SR1C S3_SR+0x1C +#define SR1D S3_SR+0x1D +#define SR1E S3_SR+0x1E +#define SR1F S3_SR+0x1F +#define SR20 S3_SR+0x20 +#define SR21 S3_SR+0x21 +#define SR22 S3_SR+0x22 +#define SR23 S3_SR+0x23 +#define SR24 S3_SR+0x24 +#define SR25 S3_SR+0x25 +#define SR26 S3_SR+0x26 +#define SR27 S3_SR+0x27 +#define SR28 S3_SR+0x28 +#define SR29 S3_SR+0x29 +#define SR2A S3_SR+0x2A +#define SR2B S3_SR+0x2B +#define SR2C S3_SR+0x2C +#define SR2D S3_SR+0x2D +#define SR2E S3_SR+0x2E +#define SR2F S3_SR+0x2F +#define SR30 S3_SR+0x30 +#define SR31 S3_SR+0x31 +#define SR32 S3_SR+0x32 +#define SR33 S3_SR+0x33 +#define SR34 S3_SR+0x34 +#define SR35 S3_SR+0x35 +#define SR36 S3_SR+0x36 +#define SR37 S3_SR+0x37 +#define SR38 S3_SR+0x38 +#define SR39 S3_SR+0x39 +#define SR3A S3_SR+0x3A +#define SR3B S3_SR+0x3B +#define SR3C S3_SR+0x3C +#define SR3D S3_SR+0x3D +#define SR3E S3_SR+0x3E +#define SR3F S3_SR+0x3F +#define SR40 S3_SR+0x40 +#define SR41 S3_SR+0x41 +#define SR42 S3_SR+0x42 +#define SR43 S3_SR+0x43 +#define SR44 S3_SR+0x44 +#define SR45 S3_SR+0x45 +#define SR46 S3_SR+0x46 +#define SR47 S3_SR+0x47 +#define SR48 S3_SR+0x48 +#define SR49 S3_SR+0x49 +#define SR4A S3_SR+0x4A +#define SR4B S3_SR+0x4B +#define SR4C S3_SR+0x4C +#define SR4D S3_SR+0x4D +#define SR4E S3_SR+0x4E +#define SR4F S3_SR+0x4F +#define SR50 S3_SR+0x50 +#define SR51 S3_SR+0x51 +#define SR52 S3_SR+0x52 +#define SR53 S3_SR+0x53 +#define SR54 S3_SR+0x54 +#define SR55 S3_SR+0x55 +#define SR56 S3_SR+0x56 +#define SR57 S3_SR+0x57 +#define SR58 S3_SR+0x58 +#define SR59 S3_SR+0x59 +#define SR5A S3_SR+0x5A +#define SR5B S3_SR+0x5B +#define SR5C S3_SR+0x5C +#define SR5D S3_SR+0x5D +#define SR5E S3_SR+0x5E +#define SR5F S3_SR+0x5F +#define SR60 S3_SR+0x60 +#define SR61 S3_SR+0x61 +#define SR62 S3_SR+0x62 +#define SR63 S3_SR+0x63 +#define SR64 S3_SR+0x64 +#define SR65 S3_SR+0x65 +#define SR66 S3_SR+0x66 +#define SR67 S3_SR+0x67 +#define SR68 S3_SR+0x68 +#define SR69 S3_SR+0x69 +#define SR6A S3_SR+0x6A +#define SR6B S3_SR+0x6B +#define SR6C S3_SR+0x6C +#define SR6D S3_SR+0x6D +#define SR6E S3_SR+0x6E +#define SR6F S3_SR+0x6F + +#define SR_FIRST SR02 + +VgaReg s3_dot_clock_8[] = { + SR01, 0, 1, + VGA_REG_END +}; + +VgaReg s3_screen_off[] = { + SR01, 5, 1, + VGA_REG_END +}; + +VgaReg s3_enable_write_plane[] = { + SR02, 0, 4, + VGA_REG_END +}; + +VgaReg s3_extended_memory_access[] = { + SR04, 1, 1, + VGA_REG_END +}; + +VgaReg s3_sequential_addressing_mode[] = { + SR04, 2, 1, + VGA_REG_END +}; + +VgaReg s3_select_chain_4_mode[] = { + SR04, 3, 1, + VGA_REG_END +}; + +VgaReg s3_unlock_extended_sequencer[] = { + SR08, 0, 8, /* write 0x06 */ + VGA_REG_END +}; + +VgaReg s3_linear_addressing_control[] = { + SR09, 0, 1, + VGA_REG_END +}; + +VgaReg s3_disable_io_ports[] = { + SR09, 7, 1, + VGA_REG_END +}; + +VgaReg s3_hsync_control[] = { + SR0D, 4, 2, + VGA_REG_END +}; + +VgaReg s3_vsync_control[] = { + SR0D, 6, 2, + VGA_REG_END +}; + +VgaReg s3_mclk_n[] = { + SR10, 0, 5, + VGA_REG_END +}; + +VgaReg s3_mclk_r[] = { + SR10, 5, 2, + VGA_REG_END +}; + +VgaReg s3_mclk_m[] = { + SR11, 0, 7, + VGA_REG_END +}; + +VgaReg s3_dclk_n[] = { + SR12, 0, 6, + SR29, 4, 1, + VGA_REG_END +}; + +VgaReg s3_dclk_r[] = { + SR12, 6, 2, + SR29, 2, 1, + VGA_REG_END +}; + +VgaReg s3_dclk_m[] = { + SR13, 0, 8, + SR29, 3, 1, + VGA_REG_END +}; + +VgaReg s3_mclk_load[] = { + SR15, 0, 1, + VGA_REG_END +}; + +VgaReg s3_dclk_load[] = { + SR15, 1, 1, + VGA_REG_END +}; + +VgaReg s3_dclk_over_2[] = { + SR15, 4, 1, + VGA_REG_END +}; + +VgaReg s3_clock_load_imm[] = { + SR15, 5, 1, + VGA_REG_END +}; + +VgaReg s3_dclk_invert[] = { + SR15, 6, 1, + VGA_REG_END +}; + +VgaReg s3_enable_clock_double[] = { + SR18, 7, 1, + VGA_REG_END +}; + +VgaReg s3_dclk_double_15_16_invert[] = { + SR1A, 0, 1, + VGA_REG_END +}; + +VgaReg s3_enable_gamma_correction[] = { + SR1B, 3, 1, + VGA_REG_END +}; + +VgaReg s3_enable_8_bit_luts[] = { + SR1B, 4, 1, + VGA_REG_END +}; + +VgaReg s3_dclk_control[] = { + SR1B, 7, 1, + VGA_REG_END +}; + +VgaReg s3_eclk_n[] = { + SR32, 0, 5, + VGA_REG_END +}; + +VgaReg s3_eclk_r[] = { + SR32, 5, 2, + VGA_REG_END +}; + +VgaReg s3_eclk_m[] = { + SR32, 0, 5, + VGA_REG_END +}; + +VgaReg s3_vga_dclk_n[] = { + SR36, 0, 6, + SR39, 4, 1, + VGA_REG_END +}; + +VgaReg s3_vga_dclk_r[] = { + SR36, 6, 2, + SR39, 2, 1, + VGA_REG_END +}; + +VgaReg s3_vga_dclk_m1[] = { + SR37, 0, 8, + SR39, 3, 1, + VGA_REG_END +}; + +VgaReg s3_vga_dclk_m2[] = { + SR38, 0, 8, + SR39, 3, 1, + VGA_REG_END +}; + +VgaReg s3_vga_clk_select[] = { + SR39, 0, 1, + VGA_REG_END +}; + +#define SR_LAST SR39 + +#define AR00 (S3_AR+0x00) +#define AR10 (S3_AR+0x10) +#define AR11 (S3_AR+0x11) +#define AR12 (S3_AR+0x12) +#define AR13 (S3_AR+0x13) +#define AR14 (S3_AR+0x14) + +#define AR_FIRST AR00 + +VgaReg s3_select_graphics_mode[] = { + AR10, 0, 1, + VGA_REG_END +}; + +VgaReg s3_enable_blinking[] = { + AR10, 3, 1, + VGA_REG_END +}; + +VgaReg s3_border_color[] = { + AR11, 0, 8, + VGA_REG_END +}; + +#define AR_LAST AR11 + +VgaReg s3_io_addr_select[] = { + S3_MISC_OUT, 0, 1, + VGA_REG_END +}; + +VgaReg s3_enable_ram[] = { + S3_MISC_OUT, 1, 1, + VGA_REG_END +}; + +VgaReg s3_clock_select[] = { + S3_MISC_OUT, 2, 2, + VGA_REG_END +}; + +VgaReg s3_horz_sync_neg[] = { + S3_MISC_OUT, 6, 1, + VGA_REG_END +}; + +VgaReg s3_vert_sync_neg[] = { + S3_MISC_OUT, 7, 1, + VGA_REG_END +}; + +VgaReg s3_display_mode_inactive[] = { + S3_INPUT_STATUS_1, 0, 1, + VGA_REG_END +}; + +VgaReg s3_vertical_sync_active[] = { + S3_INPUT_STATUS_1, 3, 1, + VGA_REG_END +}; + +VgaReg s3_dac_mask[] = { + S3_DAC + 0, 0, 8, + VGA_REG_END +}; + +VgaReg s3_dac_read_index[] = { + S3_DAC + 1, 0, 8, + VGA_REG_END +}; + +VgaReg s3_dac_write_index[] = { + S3_DAC + 2, 0, 8, + VGA_REG_END +}; + +VgaReg s3_dac_data[] = { + S3_DAC + 3, 0, 8, + VGA_REG_END +}; + +VGA8 +_s3Inb (VgaCard *card, VGA16 port) +{ + VGAVOL8 *reg; + + if (card->closure) + return VgaReadMemb ((VGA32) card->closure + port); + else + return VgaInb (port); +} + +void +_s3Outb (VgaCard *card, VGA8 value, VGA16 port) +{ + if (card->closure) + VgaWriteMemb (value, (VGA32) card->closure + port); + else + VgaOutb (value, port); +} + +void +_s3RegMap (VgaCard *card, VGA16 reg, VgaMap *map, VGABOOL write) +{ + + if (reg < S3_SR + S3_NSR) + { + map->access = VgaAccessIndIo; + map->port = 0x3c4; + map->addr = 0; + map->value = 1; + map->index = reg - S3_SR; + } + else if (reg < S3_GR + S3_NGR) + { + map->access = VgaAccessIndIo; + map->port = 0x3ce; + map->addr = 0; + map->value = 1; + map->index = reg - S3_GR; + } + else if (reg < S3_AR + S3_NAR) + { + reg -= S3_AR; + map->access = VgaAccessDone; + /* reset AFF to index */ + (void) _s3Inb (card, 0x3da); + if (reg >= 16) + reg |= 0x20; + _s3Outb (card, reg, 0x3c0); + if (write) + _s3Outb (card, map->value, 0x3c0); + else + map->value = _s3Inb (card, 0x3c1); + if (!(reg & 0x20)) + { + /* enable video display again */ + (void) _s3Inb (card, 0x3da); + _s3Outb (card, 0x20, 0x3c0); + } + return; + } + else if (reg < S3_CR + S3_NCR) + { + map->access = VgaAccessIndIo; + map->port = 0x3d4; + map->addr = 0; + map->value = 1; + map->index = reg - S3_CR; + } + else if (reg < S3_DAC + S3_NDAC) + { + map->access = VgaAccessIo; + map->port = 0x3c6 + reg - S3_DAC; + } + else switch (reg) { + case S3_MISC_OUT: + map->access = VgaAccessIo; + if (write) + map->port = 0x3c2; + else + map->port = 0x3cc; + break; + case S3_INPUT_STATUS_1: + map->access = VgaAccessIo; + map->port = 0x3da; + break; + } + if (card->closure) + { + map->port = map->port + (VGA32) card->closure; + if (map->access == VgaAccessIo) + map->access = VgaAccessMem; + if (map->access == VgaAccessIndIo) + map->access = VgaAccessIndMem; + } +} + +VgaSave s3Saves[] = { + CR_FIRST, CR18, + CR31, CR_LAST, + SR_FIRST, SR15, + SR18, SR_LAST, + AR_FIRST, AR_LAST, + S3_MISC_OUT, S3_MISC_OUT, + VGA_SAVE_END +}; + +void +s3RegInit (S3Vga *s3vga, VGAVOL8 *mmio) +{ + s3vga->card.map = _s3RegMap; + s3vga->card.closure = (void *) mmio; + s3vga->card.max = S3_NREG; + s3vga->card.values = s3vga->values; + s3vga->card.saves = s3Saves; +} + +void +s3Save (S3Vga *s3vga) +{ + s3vga->save_lock_crtc = s3Get(s3vga, s3_lock_crtc); + s3SetImm (s3vga, s3_lock_crtc, 0); + s3vga->save_register_lock_1 = s3Get (s3vga, s3_register_lock_1); + s3SetImm (s3vga, s3_register_lock_1, 0x48); + s3vga->save_register_lock_2 = s3Get (s3vga, s3_register_lock_2); + s3SetImm (s3vga, s3_register_lock_2, 0xa5); + s3vga->save_unlock_extended_sequencer = s3Get (s3vga, s3_unlock_extended_sequencer); + s3SetImm (s3vga, s3_unlock_extended_sequencer, 0x06); + s3vga->save_lock_horz = s3Get (s3vga, s3_lock_horz); + s3SetImm (s3vga, s3_lock_horz, 0); + s3vga->save_lock_vert = s3Get (s3vga, s3_lock_vert); + s3SetImm (s3vga, s3_lock_vert, 0); + s3vga->save_dot_clock_8 = s3Get (s3vga, s3_dot_clock_8); + VgaPreserve (&s3vga->card); +} + +void +s3Reset (S3Vga *s3vga) +{ + VgaRestore (&s3vga->card); + s3SetImm (s3vga, s3_clock_load_imm, 1); + s3SetImm (s3vga, s3_clock_load_imm, 0); + s3SetImm (s3vga, s3_dot_clock_8, s3vga->save_dot_clock_8); + s3SetImm (s3vga, s3_lock_vert, s3vga->save_lock_vert); + s3SetImm (s3vga, s3_lock_horz, s3vga->save_lock_horz); + s3SetImm (s3vga, s3_lock_dac_writes, s3vga->save_lock_dac_writes); + s3SetImm (s3vga, s3_unlock_extended_sequencer, s3vga->save_unlock_extended_sequencer); + s3SetImm (s3vga, s3_register_lock_2, s3vga->save_register_lock_2); + s3SetImm (s3vga, s3_register_lock_1, s3vga->save_register_lock_1); + s3SetImm (s3vga, s3_lock_crtc, s3vga->save_lock_crtc); + VgaFinish (&s3vga->card); +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/Kdrive.tmpl +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/Kdrive.tmpl @@ -0,0 +1,17 @@ +XCOMM $RCSId: xc/programs/Xserver/hw/kdrive/Kdrive.tmpl,v 1.3tsi Exp $ + +#include + +#if BuildRender +RENDERINCS=-I$(KDRIVE)/../../render +#endif + +#if BuildRandR +RANDRINCS=-I$(KDRIVE)/../../randr +#endif + +KDINCS = -I$(KDRIVE) -I$(XBUILDINCDIR) -I$(FONTINCSRC) \ + -I$(KDRIVE)/../../fb -I$(KDRIVE)/../../mi -I$(KDRIVE)/../../Xext \ + -I$(KDRIVE)/../../miext/shadow -I$(KDRIVE)/../../miext/layer \ + -I$(KDRIVE)/../../include -I$(KDRIVE)/../../os \ + -I$(EXTINCSRC) -I$(XINCLUDESRC) $(RENDERINCS) $(RANDRINCS) --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/r128/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/r128/Makefile.in @@ -124,6 +124,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -202,6 +204,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -314,6 +317,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/igs/igscurs.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/igs/igscurs.c @@ -0,0 +1,347 @@ +/* + * $RCSId: $ + * + * Copyright © 2000 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "igs.h" +#include "cursorstr.h" + +#define SetupCursor(s) KdScreenPriv(s); \ + igsCardInfo(pScreenPriv); \ + igsScreenInfo(pScreenPriv); \ + IgsCursor *pCurPriv = &igss->cursor; \ + IgsVga *igsvga = &igsc->igsvga + +static void +_igsMoveCursor (ScreenPtr pScreen, int x, int y) +{ + SetupCursor(pScreen); + CARD8 xoff, yoff; + + x -= pCurPriv->xhot; + xoff = 0; + if (x < 0) + { + xoff = -x; + x = 0; + } + y -= pCurPriv->yhot; + yoff = 0; + if (y < 0) + { + yoff = -y; + y = 0; + } + + igsSet (igsvga, igs_sprite_x, x); + igsSet (igsvga, igs_sprite_preset_x, xoff); + igsSet (igsvga, igs_sprite_y, y); + igsSet (igsvga, igs_sprite_preset_y, yoff); +} + +static void +igsMoveCursor (ScreenPtr pScreen, int x, int y) +{ + SetupCursor (pScreen); + + if (!pCurPriv->has_cursor) + return; + + if (!pScreenPriv->enabled) + return; + + _igsMoveCursor (pScreen, x, y); + VgaFlush (&igsvga->card); +} + + +static void +igsSetCursorColors (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + CursorPtr pCursor = pCurPriv->pCursor; + + igsSetImm (igsvga, igs_cursor_write_index, 0); + igsSetImm (igsvga, igs_cursor_data, pCursor->backRed >> 8); + igsSetImm (igsvga, igs_cursor_data, pCursor->backGreen >> 8); + igsSetImm (igsvga, igs_cursor_data, pCursor->backBlue >> 8); + igsSetImm (igsvga, igs_cursor_write_index, 1); + igsSetImm (igsvga, igs_cursor_data, pCursor->foreRed >> 8); + igsSetImm (igsvga, igs_cursor_data, pCursor->foreGreen >> 8); + igsSetImm (igsvga, igs_cursor_data, pCursor->foreBlue >> 8); +} + +#if BITMAP_BIT_ORDER == MSBFirst +#define IgsAdjustCursor(v) { \ + v = ((v & 0x55555555) << 1) | ((v >> 1) & 0x55555555); \ + v = ((v & 0x33333333) << 2) | ((v >> 2) & 0x33333333); \ + v = ((v & 0x0f0f0f0f) << 4) | ((v >> 4) & 0x0f0f0f0f); \ + v = ((v & 0x00ff00ff) << 8) | ((v >> 8) & 0x00ff00ff); \ + v = ((v & 0x0000ffff) <<16) | ((v >>16) & 0x0000ffff); \ +} +#else +#define IgsAdjustCursor(v) +#endif + +#define ExplodeBits2(v) (((v) & 1) | (((v) & 2) << 1)) +#define ExplodeBits4(v) ((ExplodeBits2((v) >> 2) << 4) | \ + (ExplodeBits2((v) & 0x3))) +#define ExplodeBits8(v) ((ExplodeBits4((v) >> 4) << 8) | \ + (ExplodeBits4((v) & 0xf))) +#define ExplodeBits16(v) ((ExplodeBits8((v) >> 8) << 16) | \ + (ExplodeBits8((v) & 0xff))) +static void +igsLoadCursor (ScreenPtr pScreen, int x, int y) +{ + SetupCursor(pScreen); + CursorPtr pCursor = pCurPriv->pCursor; + CursorBitsPtr bits = pCursor->bits; + int w, h; + CARD32 *ram, *msk, *mskLine, *src, *srcLine; + int i, j; + int cursor_address; + int lwsrc; + unsigned char ramdac_control_; + CARD32 offset; + CARD32 b0, b1; + + pCurPriv->pCursor = pCursor; + pCurPriv->xhot = pCursor->bits->xhot; + pCurPriv->yhot = pCursor->bits->yhot; + + /* + * Stick new image into cursor memory + */ + ram = (CARD32 *) igss->cursor_base; + mskLine = (CARD32 *) bits->mask; + srcLine = (CARD32 *) bits->source; + + h = bits->height; + if (h > IGS_CURSOR_HEIGHT) + h = IGS_CURSOR_HEIGHT; + + lwsrc = BitmapBytePad(bits->width) / 4; /* words per line */ + + for (i = 0; i < IGS_CURSOR_HEIGHT; i++) { + msk = mskLine; + src = srcLine; + mskLine += lwsrc; + srcLine += lwsrc; + for (j = 0; j < IGS_CURSOR_WIDTH / 32; j++) { + + CARD32 m, s; + + if (i < h && j < lwsrc) + { + m = *msk++; + s = *src++; + IgsAdjustCursor(m); + IgsAdjustCursor(s); + } + else + { + m = 0; + s = 0; + } + s &= m; + m = ~m; + b0 = ExplodeBits16(s&0xffff) | (ExplodeBits16(m&0xffff)<<1); + b1 = ExplodeBits16(s>>16) | (ExplodeBits16(m>>16)<<1); + *ram++ = b0; + *ram++ = b1; + } + } + + /* Set new color */ + igsSetCursorColors (pScreen); + + /* Set address for cursor bits */ + offset = igss->cursor_offset; + offset >>= 10; + igsSet (igsvga, igs_sprite_addr, offset); + + /* Assume TV interpolation off */ + igsSet (igsvga, igs_hcshf, 3); + /* Enable the cursor */ + igsSet (igsvga, igs_sprite_visible, 1); + igsSet (igsvga, igs_sprite_64x64, 1); + /* Move to new position */ + _igsMoveCursor (pScreen, x, y); + + VgaFlush (&igsvga->card); +} + +static void +igsUnloadCursor (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + /* Disable cursor */ + igsSet (igsvga, igs_sprite_visible, 0); + VgaFlush (&igsvga->card); +} + +static Bool +igsRealizeCursor (ScreenPtr pScreen, CursorPtr pCursor) +{ + SetupCursor(pScreen); + + if (!pScreenPriv->enabled) + return TRUE; + + /* miRecolorCursor does this */ + if (pCurPriv->pCursor == pCursor) + { + if (pCursor) + { + int x, y; + + miPointerPosition (&x, &y); + igsLoadCursor (pScreen, x, y); + } + } + return TRUE; +} + +static Bool +igsUnrealizeCursor (ScreenPtr pScreen, CursorPtr pCursor) +{ + return TRUE; +} + +static void +igsSetCursor (ScreenPtr pScreen, CursorPtr pCursor, int x, int y) +{ + SetupCursor(pScreen); + + pCurPriv->pCursor = pCursor; + + if (!pScreenPriv->enabled) + return; + + if (pCursor) + igsLoadCursor (pScreen, x, y); + else + igsUnloadCursor (pScreen); +} + +miPointerSpriteFuncRec igsPointerSpriteFuncs = { + igsRealizeCursor, + igsUnrealizeCursor, + igsSetCursor, + igsMoveCursor, +}; + +static void +igsQueryBestSize (int class, + unsigned short *pwidth, unsigned short *pheight, + ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + switch (class) + { + case CursorShape: + if (*pwidth > pCurPriv->width) + *pwidth = pCurPriv->width; + if (*pheight > pCurPriv->height) + *pheight = pCurPriv->height; + if (*pwidth > pScreen->width) + *pwidth = pScreen->width; + if (*pheight > pScreen->height) + *pheight = pScreen->height; + break; + default: + fbQueryBestSize (class, pwidth, pheight, pScreen); + break; + } +} + +Bool +igsCursorInit (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + if (!igss->cursor_base) + { + pCurPriv->has_cursor = FALSE; + return FALSE; + } + + pCurPriv->width = IGS_CURSOR_WIDTH; + pCurPriv->height= IGS_CURSOR_HEIGHT; + pScreen->QueryBestSize = igsQueryBestSize; + miPointerInitialize (pScreen, + &igsPointerSpriteFuncs, + &kdPointerScreenFuncs, + FALSE); + pCurPriv->has_cursor = TRUE; + pCurPriv->pCursor = NULL; + return TRUE; +} + +void +igsCursorEnable (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + if (pCurPriv->has_cursor) + { + if (pCurPriv->pCursor) + { + int x, y; + + miPointerPosition (&x, &y); + igsLoadCursor (pScreen, x, y); + } + else + igsUnloadCursor (pScreen); + } +} + +void +igsCursorDisable (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + if (!pScreenPriv->enabled) + return; + + if (pCurPriv->has_cursor) + { + if (pCurPriv->pCursor) + { + igsUnloadCursor (pScreen); + } + } +} + +void +igsCursorFini (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + pCurPriv->pCursor = NULL; +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/igs/igsreg.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/igs/igsreg.c @@ -0,0 +1,971 @@ +/* + * $RCSId: $ + * + * Copyright © 2000 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "igsreg.h" +#include + +#define CR00 IGS_CR+0x00 +#define CR01 IGS_CR+0x01 +#define CR02 IGS_CR+0x02 +#define CR03 IGS_CR+0x03 +#define CR04 IGS_CR+0x04 +#define CR05 IGS_CR+0x05 +#define CR06 IGS_CR+0x06 +#define CR07 IGS_CR+0x07 +#define CR08 IGS_CR+0x08 +#define CR09 IGS_CR+0x09 +#define CR0A IGS_CR+0x0A +#define CR0B IGS_CR+0x0B +#define CR0C IGS_CR+0x0C +#define CR0D IGS_CR+0x0D +#define CR0E IGS_CR+0x0E +#define CR0F IGS_CR+0x0F +#define CR10 IGS_CR+0x10 +#define CR11 IGS_CR+0x11 +#define CR12 IGS_CR+0x12 +#define CR13 IGS_CR+0x13 +#define CR14 IGS_CR+0x14 +#define CR15 IGS_CR+0x15 +#define CR16 IGS_CR+0x16 +#define CR17 IGS_CR+0x17 +#define CR18 IGS_CR+0x18 +#define CR19 IGS_CR+0x19 +#define CR1A IGS_CR+0x1A +#define CR1B IGS_CR+0x1B +#define CR1C IGS_CR+0x1C +#define CR1D IGS_CR+0x1D +#define CR1E IGS_CR+0x1E +#define CR1F IGS_CR+0x1F +#define CR20 IGS_CR+0x20 +#define CR21 IGS_CR+0x21 +#define CR22 IGS_CR+0x22 +#define CR23 IGS_CR+0x23 +#define CR24 IGS_CR+0x24 +#define CR25 IGS_CR+0x25 +#define CR26 IGS_CR+0x26 +#define CR27 IGS_CR+0x27 +#define CR28 IGS_CR+0x28 +#define CR29 IGS_CR+0x29 +#define CR2A IGS_CR+0x2A +#define CR2B IGS_CR+0x2B +#define CR2C IGS_CR+0x2C +#define CR2D IGS_CR+0x2D +#define CR2E IGS_CR+0x2E +#define CR2F IGS_CR+0x2F +#define CR30 IGS_CR+0x30 +#define CR31 IGS_CR+0x31 +#define CR32 IGS_CR+0x32 +#define CR33 IGS_CR+0x33 +#define CR34 IGS_CR+0x34 +#define CR35 IGS_CR+0x35 +#define CR36 IGS_CR+0x36 +#define CR37 IGS_CR+0x37 +#define CR38 IGS_CR+0x38 +#define CR39 IGS_CR+0x39 +#define CR3A IGS_CR+0x3A +#define CR3B IGS_CR+0x3B +#define CR3C IGS_CR+0x3C +#define CR3D IGS_CR+0x3D +#define CR3E IGS_CR+0x3E +#define CR3F IGS_CR+0x3F +#define CR40 IGS_CR+0x40 +#define CR41 IGS_CR+0x41 +#define CR42 IGS_CR+0x42 +#define CR43 IGS_CR+0x43 +#define CR44 IGS_CR+0x44 +#define CR45 IGS_CR+0x45 +#define CR46 IGS_CR+0x46 +#define CR47 IGS_CR+0x47 +#define CR48 IGS_CR+0x48 + +#define CR_FIRST CR00 +#define CR_LAST CR48 + +#define SR00 IGS_SR+0x00 +#define SR01 IGS_SR+0x01 +#define SR02 IGS_SR+0x02 +#define SR03 IGS_SR+0x03 +#define SR04 IGS_SR+0x04 + +#define SR_FIRST SR00 +#define SR_LAST SR04 + +#define AR00 IGS_AR+0x00 +#define AR01 IGS_AR+0x01 +#define AR02 IGS_AR+0x02 +#define AR03 IGS_AR+0x03 +#define AR04 IGS_AR+0x04 +#define AR05 IGS_AR+0x05 +#define AR06 IGS_AR+0x06 +#define AR07 IGS_AR+0x07 +#define AR08 IGS_AR+0x08 +#define AR09 IGS_AR+0x09 +#define AR0A IGS_AR+0x0A +#define AR0B IGS_AR+0x0B +#define AR0C IGS_AR+0x0C +#define AR0D IGS_AR+0x0D +#define AR0E IGS_AR+0x0E +#define AR0F IGS_AR+0x0F +#define AR10 IGS_AR+0x10 +#define AR11 IGS_AR+0x11 +#define AR12 IGS_AR+0x12 +#define AR13 IGS_AR+0x13 +#define AR14 IGS_AR+0x14 + +#define AR_FIRST AR00 +#define AR_LAST AR14 + +#define GR00 IGS_GR+0x00 +#define GR01 IGS_GR+0x01 +#define GR02 IGS_GR+0x02 +#define GR03 IGS_GR+0x03 +#define GR04 IGS_GR+0x04 +#define GR05 IGS_GR+0x05 +#define GR06 IGS_GR+0x06 +#define GR07 IGS_GR+0x07 +#define GR08 IGS_GR+0x08 +#define GR09 IGS_GR+0x09 +#define GR0A IGS_GR+0x0A +#define GR0B IGS_GR+0x0B +#define GR0C IGS_GR+0x0C +#define GR0D IGS_GR+0x0D +#define GR0E IGS_GR+0x0E +#define GR0F IGS_GR+0x0F +#define GR10 IGS_GR+0x10 +#define GR11 IGS_GR+0x11 +#define GR12 IGS_GR+0x12 +#define GR13 IGS_GR+0x13 +#define GR14 IGS_GR+0x14 +#define GR15 IGS_GR+0x15 +#define GR16 IGS_GR+0x16 +#define GR17 IGS_GR+0x17 +#define GR18 IGS_GR+0x18 +#define GR19 IGS_GR+0x19 +#define GR1A IGS_GR+0x1A +#define GR1B IGS_GR+0x1B +#define GR1C IGS_GR+0x1C +#define GR1D IGS_GR+0x1D +#define GR1E IGS_GR+0x1E +#define GR1F IGS_GR+0x1F +#define GR20 IGS_GR+0x20 +#define GR21 IGS_GR+0x21 +#define GR22 IGS_GR+0x22 +#define GR23 IGS_GR+0x23 +#define GR24 IGS_GR+0x24 +#define GR25 IGS_GR+0x25 +#define GR26 IGS_GR+0x26 +#define GR27 IGS_GR+0x27 +#define GR28 IGS_GR+0x28 +#define GR29 IGS_GR+0x29 +#define GR2A IGS_GR+0x2A +#define GR2B IGS_GR+0x2B +#define GR2C IGS_GR+0x2C +#define GR2D IGS_GR+0x2D +#define GR2E IGS_GR+0x2E +#define GR2F IGS_GR+0x2F +#define GR30 IGS_GR+0x30 +#define GR31 IGS_GR+0x31 +#define GR32 IGS_GR+0x32 +#define GR33 IGS_GR+0x33 +#define GR34 IGS_GR+0x34 +#define GR35 IGS_GR+0x35 +#define GR36 IGS_GR+0x36 +#define GR37 IGS_GR+0x37 +#define GR38 IGS_GR+0x38 +#define GR39 IGS_GR+0x39 +#define GR3A IGS_GR+0x3A +#define GR3B IGS_GR+0x3B +#define GR3C IGS_GR+0x3C +#define GR3D IGS_GR+0x3D +#define GR3E IGS_GR+0x3E +#define GR3F IGS_GR+0x3F +#define GR40 IGS_GR+0x40 +#define GR41 IGS_GR+0x41 +#define GR42 IGS_GR+0x42 +#define GR43 IGS_GR+0x43 +#define GR44 IGS_GR+0x44 +#define GR45 IGS_GR+0x45 +#define GR46 IGS_GR+0x46 +#define GR47 IGS_GR+0x47 +#define GR48 IGS_GR+0x48 +#define GR49 IGS_GR+0x49 +#define GR4A IGS_GR+0x4A +#define GR4B IGS_GR+0x4B +#define GR4C IGS_GR+0x4C +#define GR4D IGS_GR+0x4D +#define GR4E IGS_GR+0x4E +#define GR4F IGS_GR+0x4F +#define GR50 IGS_GR+0x50 +#define GR51 IGS_GR+0x51 +#define GR52 IGS_GR+0x52 +#define GR53 IGS_GR+0x53 +#define GR54 IGS_GR+0x54 +#define GR55 IGS_GR+0x55 +#define GR56 IGS_GR+0x56 +#define GR57 IGS_GR+0x57 +#define GR58 IGS_GR+0x58 +#define GR59 IGS_GR+0x59 +#define GR5A IGS_GR+0x5A +#define GR5B IGS_GR+0x5B +#define GR5C IGS_GR+0x5C +#define GR5D IGS_GR+0x5D +#define GR5E IGS_GR+0x5E +#define GR5F IGS_GR+0x5F +#define GR60 IGS_GR+0x60 +#define GR61 IGS_GR+0x61 +#define GR62 IGS_GR+0x62 +#define GR63 IGS_GR+0x63 +#define GR64 IGS_GR+0x64 +#define GR65 IGS_GR+0x65 +#define GR66 IGS_GR+0x66 +#define GR67 IGS_GR+0x67 +#define GR68 IGS_GR+0x68 +#define GR69 IGS_GR+0x69 +#define GR6A IGS_GR+0x6A +#define GR6B IGS_GR+0x6B +#define GR6C IGS_GR+0x6C +#define GR6D IGS_GR+0x6D +#define GR6E IGS_GR+0x6E +#define GR6F IGS_GR+0x6F +#define GR70 IGS_GR+0x70 +#define GR71 IGS_GR+0x71 +#define GR72 IGS_GR+0x72 +#define GR73 IGS_GR+0x73 +#define GR74 IGS_GR+0x74 +#define GR75 IGS_GR+0x75 +#define GR76 IGS_GR+0x76 +#define GR77 IGS_GR+0x77 +#define GR78 IGS_GR+0x78 +#define GR79 IGS_GR+0x79 +#define GR7A IGS_GR+0x7A +#define GR7B IGS_GR+0x7B +#define GR7C IGS_GR+0x7C +#define GR7D IGS_GR+0x7D +#define GR7E IGS_GR+0x7E +#define GR7F IGS_GR+0x7F +#define GR80 IGS_GR+0x80 +#define GR81 IGS_GR+0x81 +#define GR82 IGS_GR+0x82 +#define GR83 IGS_GR+0x83 +#define GR84 IGS_GR+0x84 +#define GR85 IGS_GR+0x85 +#define GR86 IGS_GR+0x86 +#define GR87 IGS_GR+0x87 +#define GR88 IGS_GR+0x88 +#define GR89 IGS_GR+0x89 +#define GR8A IGS_GR+0x8A +#define GR8B IGS_GR+0x8B +#define GR8C IGS_GR+0x8C +#define GR8D IGS_GR+0x8D +#define GR8E IGS_GR+0x8E +#define GR8F IGS_GR+0x8F +#define GR90 IGS_GR+0x90 +#define GR91 IGS_GR+0x91 +#define GR92 IGS_GR+0x92 +#define GR93 IGS_GR+0x93 +#define GR94 IGS_GR+0x94 +#define GR95 IGS_GR+0x95 +#define GR96 IGS_GR+0x96 +#define GR97 IGS_GR+0x97 +#define GR98 IGS_GR+0x98 +#define GR99 IGS_GR+0x99 +#define GR9A IGS_GR+0x9A +#define GR9B IGS_GR+0x9B +#define GR9C IGS_GR+0x9C +#define GR9D IGS_GR+0x9D +#define GR9E IGS_GR+0x9E +#define GR9F IGS_GR+0x9F +#define GRA0 IGS_GR+0xA0 +#define GRA1 IGS_GR+0xA1 +#define GRA2 IGS_GR+0xA2 +#define GRA3 IGS_GR+0xA3 +#define GRA4 IGS_GR+0xA4 +#define GRA5 IGS_GR+0xA5 +#define GRA6 IGS_GR+0xA6 +#define GRA7 IGS_GR+0xA7 +#define GRA8 IGS_GR+0xA8 +#define GRA9 IGS_GR+0xA9 +#define GRAA IGS_GR+0xAA +#define GRAB IGS_GR+0xAB +#define GRAC IGS_GR+0xAC +#define GRAD IGS_GR+0xAD +#define GRAE IGS_GR+0xAE +#define GRAF IGS_GR+0xAF +#define GRB0 IGS_GR+0xB0 +#define GRB1 IGS_GR+0xB1 +#define GRB2 IGS_GR+0xB2 +#define GRB3 IGS_GR+0xB3 +#define GRB4 IGS_GR+0xB4 +#define GRB5 IGS_GR+0xB5 +#define GRB6 IGS_GR+0xB6 +#define GRB7 IGS_GR+0xB7 +#define GRB8 IGS_GR+0xB8 +#define GRB9 IGS_GR+0xB9 +#define GRBA IGS_GR+0xBA +#define GRBB IGS_GR+0xBB +#define GRBC IGS_GR+0xBC +#define GRBD IGS_GR+0xBD +#define GRBE IGS_GR+0xBE +#define GRBF IGS_GR+0xBF + +#define GR_FIRST GR00 +#define GR_LAST GRBF + +#define GREX3C IGS_GREX+(0x3c-IGS_GREXBASE) + +VgaReg igs_h_total[] = { + CR00, 0, 8, + VGA_REG_END +}; + +VgaReg igs_h_de_end[] = { + CR01, 0, 8, + VGA_REG_END +}; + +VgaReg igs_h_bstart[] = { + CR02, 0, 8, + VGA_REG_END +}; + +VgaReg igs_h_bend[] = { + CR03, 0, 5, + CR05, 7, 1, + VGA_REG_END +}; + +VgaReg igs_de_skew[] = { + CR03, 5, 2, + VGA_REG_END +}; + +VgaReg igs_ena_vr_access[] = { + CR03, 7, 1, + VGA_REG_END +}; + +VgaReg igs_h_rstart[] = { + CR04, 0, 8, + VGA_REG_END +}; + +VgaReg igs_h_rend[] = { + CR05, 0, 5, + VGA_REG_END +}; + +VgaReg igs_h_rdelay[] = { + CR05, 5, 2, + VGA_REG_END +}; + +VgaReg igs_v_total[] = { + CR06, 0, 8, + CR07, 0, 1, + CR07, 5, 1, + GR11, 0, 1, + VGA_REG_END +}; + +VgaReg igs_v_rstart[] = { + CR10, 0, 8, + CR07, 2, 1, + CR07, 7, 1, + GR11, 2, 1, + VGA_REG_END +}; + +VgaReg igs_v_rend[] = { + CR11, 0, 4, + VGA_REG_END +}; + +VgaReg igs_clear_v_int[] = { + CR11, 4, 1, + VGA_REG_END +}; + +VgaReg igs_disable_v_int[] = { + CR11, 5, 1, + VGA_REG_END +}; + +VgaReg igs_bandwidth[] = { + CR11, 6, 1, + VGA_REG_END +}; + +VgaReg igs_crt_protect[] = { + CR11, 7, 1, + VGA_REG_END +}; + +VgaReg igs_v_de_end[] = { + CR12, 0, 8, + CR07, 1, 1, + CR07, 6, 1, + GR11, 1, 1, + VGA_REG_END +}; + +VgaReg igs_offset[] = { + CR13, 0, 8, + GR15, 4, 2, + VGA_REG_END +}; + +VgaReg igs_v_bstart[] = { + CR15, 0, 8, + CR07, 3, 1, + CR09, 5, 1, + GR11, 3, 1, + VGA_REG_END +}; + +VgaReg igs_v_bend[] = { + CR16, 0, 7, + VGA_REG_END +}; + +VgaReg igs_linecomp[] = { + CR18, 0, 8, + CR07, 4, 1, + CR09, 6, 1, + GR11, 4, 1, + VGA_REG_END +}; + +VgaReg igs_ivideo[] = { + GR11, 5, 1, + VGA_REG_END +}; + +VgaReg igs_num_fetch[] = { + GR14, 0, 8, + GR15, 0, 2, + VGA_REG_END +}; + +VgaReg igs_wcrt0[] = { + CR1F, 0, 1, + VGA_REG_END +}; + +VgaReg igs_wcrt1[] = { + CR1F, 1, 1, + VGA_REG_END +}; + +VgaReg igs_rcrts1[] = { + CR1F, 4, 1, + VGA_REG_END +}; + +VgaReg igs_selwk[] = { + CR1F, 6, 1, + VGA_REG_END +}; + +VgaReg igs_dot_clock_8[] = { + SR01, 0, 1, + VGA_REG_END +}; + +VgaReg igs_screen_off[] = { + SR01, 5, 1, + VGA_REG_END +}; + +VgaReg igs_enable_write_plane[] = { + SR02, 0, 4, + VGA_REG_END +}; + +VgaReg igs_mexhsyn[] = { + GR16, 0, 2, + VGA_REG_END +}; + +VgaReg igs_mexvsyn[] = { + GR16, 2, 2, + VGA_REG_END +}; + +VgaReg igs_pci_burst_write[] = { + GR30, 5, 1, + VGA_REG_END +}; + +VgaReg igs_pci_burst_read[] = { + GR30, 7, 1, + VGA_REG_END +}; + +VgaReg igs_iow_retry[] = { + GREX3C, 0, 1, + VGA_REG_END +}; + +VgaReg igs_mw_retry[] = { + GREX3C, 1, 1, + VGA_REG_END +}; + +VgaReg igs_mr_retry[] = { + GREX3C, 2, 1, + VGA_REG_END +}; + + + +VgaReg igs_biga22en[] = { + GR3D, 4, 1, + VGA_REG_END +}; + +VgaReg igs_biga24en[] = { + GR3D, 5, 1, + VGA_REG_END +}; + +VgaReg igs_biga22force[] = { + GR3D, 6, 1, + VGA_REG_END +}; + +VgaReg igs_bigswap[] = { + GR3F, 0, 6, + VGA_REG_END +}; + +/* #define IGS_BIGSWAP_8 0x3f */ +/* #define IGS_BIGSWAP_16 0x2a */ +/* #define IGS_BIGSWAP_32 0x00 */ + +VgaReg igs_sprite_x[] = { + GR50, 0, 8, + GR51, 0, 3, + VGA_REG_END +}; + +VgaReg igs_sprite_preset_x[] = { + GR52, 0, 6, + VGA_REG_END +}; + +VgaReg igs_sprite_y[] = { + GR53, 0, 8, + GR54, 0, 3, + VGA_REG_END +}; + +VgaReg igs_sprite_preset_y[] = { + GR55, 0, 6, + VGA_REG_END +}; + +VgaReg igs_sprite_visible[] = { + GR56, 0, 1, + VGA_REG_END +}; + +VgaReg igs_sprite_64x64[] = { + GR56, 1, 1, + VGA_REG_END +}; + +VgaReg igs_mgrext[] = { + GR57, 0, 1, + VGA_REG_END +}; + +VgaReg igs_hcshf[] = { + GR57, 4, 2, + VGA_REG_END +}; + +VgaReg igs_mbpfix[] = { + GR57, 6, 2, + VGA_REG_END +}; + +VgaReg igs_overscan_red[] = { + GR58, 0, 8, + VGA_REG_END +}; + +VgaReg igs_overscan_green[] = { + GR59, 0, 8, + VGA_REG_END +}; + +VgaReg igs_overscan_blue[] = { + GR5A, 0, 8, + VGA_REG_END +}; + +VgaReg igs_memgopg[] = { + GR73, 2, 1, + VGA_REG_END +}; + +VgaReg igs_memr2wpg[] = { + GR73, 1, 1, + VGA_REG_END +}; + +VgaReg igs_crtff16[] = { + GR73, 3, 1, + VGA_REG_END +}; + +VgaReg igs_fifomust[] = { + GR74, 0, 5, + VGA_REG_END +}; + +VgaReg igs_fifogen[] = { + GR75, 0, 5, + VGA_REG_END +}; + +VgaReg igs_mode_sel[] = { + GR77, 0, 4, + VGA_REG_END +}; + +/* #define IGS_MODE_TEXT 0 */ +/* #define IGS_MODE_8 1 */ +/* #define IGS_MODE_565 2 */ +/* #define IGS_MODE_5551 6 */ +/* #define IGS_MODE_8888 3 */ +/* #define IGS_MODE_888 4 */ +/* #define IGS_MODE_332 9 */ +/* #define IGS_MODE_4444 10 */ + +VgaReg igs_sprite_addr[] = { + GR7E, 0, 8, + GR7F, 0, 4, + VGA_REG_END +}; + +VgaReg igs_fastmpie[] = { + GR9E, 0, 1, + VGA_REG_END +}; + +VgaReg igs_vclk_m[] = { + GRB0, 0, 8, + GRBA, 0, 3, + VGA_REG_END +}; + +VgaReg igs_vclk_n[] = { + GRB1, 0, 5, + GRBA, 3, 3, + VGA_REG_END +}; + +VgaReg igs_vfsel[] = { + GRB1, 5, 1, + VGA_REG_END +}; + +VgaReg igs_vclk_p[] = { + GRB1, 6, 2, + GRBA, 6, 1, + VGA_REG_END +}; + +VgaReg igs_frqlat[] = { + GRB9, 7, 1, + VGA_REG_END +}; + + +VgaReg igs_dac_mask[] = { + IGS_DAC + 0, 0, 8, + VGA_REG_END +}; + +VgaReg igs_dac_read_index[] = { + IGS_DAC + 1, 0, 8, + VGA_REG_END +}; + +VgaReg igs_dac_write_index[] = { + IGS_DAC + 2, 0, 8, + VGA_REG_END +}; + +VgaReg igs_dac_data[] = { + IGS_DAC + 3, 0, 8, + VGA_REG_END +}; + +VgaReg igs_rampwdn[] = { + IGS_DACEX + 0, 0, 1, + VGA_REG_END +}; + +VgaReg igs_dac6_8[] = { + IGS_DACEX + 0, 1, 1, + VGA_REG_END +}; + +VgaReg igs_ramdacbypass[] = { + IGS_DACEX + 0, 4, 1, + VGA_REG_END +}; + +VgaReg igs_dacpwdn[] = { + IGS_DACEX + 0, 6, 1, + VGA_REG_END +}; + +VgaReg igs_cursor_read_index[] = { + IGS_DACEX + 1, 0, 8, + VGA_REG_END +}; + +VgaReg igs_cursor_write_index[] = { + IGS_DACEX + 2, 0, 8, + VGA_REG_END +}; + +VgaReg igs_cursor_data[] = { + IGS_DACEX + 3, 0, 8, + VGA_REG_END +}; + +VGA8 +_igsInb (VgaCard *card, VGA16 port) +{ + VGAVOL8 *reg; + + if (card->closure) + return VgaReadMemb ((VGA32) card->closure + port); + else + return VgaInb (port); +} + +void +_igsOutb (VgaCard *card, VGA8 value, VGA16 port) +{ + if (card->closure) + VgaWriteMemb (value, (VGA32) card->closure + port); + else + VgaOutb (value, port); +} + +void +_igsRegMap (VgaCard *card, VGA16 reg, VgaMap *map, VGABOOL write) +{ + if (reg < IGS_SR + IGS_NSR) + { + map->access = VgaAccessIndIo; + map->port = 0x3c4; + map->addr = 0; + map->value = 1; + map->index = reg - IGS_SR; + } + else if (reg < IGS_GR + IGS_NGR) + { + map->access = VgaAccessIndIo; + map->port = 0x3ce; + map->addr = 0; + map->value = 1; + map->index = reg - IGS_GR; + } + else if (reg < IGS_GREX + IGS_NGREX) + { + VGA8 gr33; + + map->access = VgaAccessDone; + _igsOutb (card, 0x33, 0x3ce); + gr33 = _igsInb (card, 0x3cf); + _igsOutb (card, gr33 | 0x40, 0x3cf); + _igsOutb (card, IGS_GREXBASE + reg - IGS_GREX, 0x3ce); + if (write) + _igsOutb (card, map->value, 0x3cf); + else + map->value = _igsInb (card, 0x3cf); + _igsOutb (card, 0x33, 0x3ce); + _igsOutb (card, gr33, 0x3cf); + return; + } + else if (reg < IGS_AR + IGS_NAR) + { + reg -= IGS_AR; + map->access = VgaAccessDone; + /* reset AFF to index */ + (void) _igsInb (card, 0x3da); + if (reg >= 16) + reg |= 0x20; + _igsOutb (card, reg, 0x3c0); + if (write) + _igsOutb (card, map->value, 0x3c0); + else + map->value = _igsInb (card, 0x3c1); + if (!(reg & 0x20)) + { + /* enable video display again */ + (void) _igsInb (card, 0x3da); + _igsOutb (card, 0x20, 0x3c0); + } + return; + } + else if (reg < IGS_CR + IGS_NCR) + { + map->access = VgaAccessIndIo; + map->port = 0x3d4; + map->addr = 0; + map->value = 1; + map->index = reg - IGS_CR; + } + else if (reg < IGS_DAC + IGS_NDAC) + { + map->access = VgaAccessIo; + map->port = 0x3c6 + reg - IGS_DAC; + } + else if (reg < IGS_DACEX + IGS_NDACEX) + { + VGA8 gr56; + reg = 0x3c6 + reg - IGS_DACEX; + map->access = VgaAccessDone; + _igsOutb (card, 0x56, 0x3ce); + gr56 = _igsInb (card, 0x3cf); + _igsOutb (card, gr56 | 4, 0x3cf); + if (write) + _igsOutb (card, map->value, reg); + else + map->value = _igsInb (card, reg); + _igsOutb (card, gr56, 0x3cf); + return; + } + else switch (reg) { + case IGS_MISC_OUT: + map->access = VgaAccessIo; + if (write) + map->port = 0x3c2; + else + map->port = 0x3cc; + break; + case IGS_INPUT_STATUS_1: + map->access = VgaAccessIo; + map->port = 0x3da; + break; + } + if (card->closure) + { + map->port = map->port + (VGA32) card->closure; + if (map->access == VgaAccessIo) + map->access = VgaAccessMem; + if (map->access == VgaAccessIndIo) + map->access = VgaAccessIndMem; + } +} + +VgaSave igsSaves[] = { + CR00, CR18, + SR01, SR02, + GR11, GRBA, + IGS_MISC_OUT, IGS_MISC_OUT, + VGA_SAVE_END +}; + +void +igsRegInit (IgsVga *igsvga, VGAVOL8 *mmio) +{ + igsvga->card.map = _igsRegMap; + igsvga->card.closure = (void *) mmio; + igsvga->card.max = IGS_NREG; + igsvga->card.values = igsvga->values; + igsvga->card.saves = igsSaves; +} + +void +igsSave (IgsVga *igsvga) +{ + igsSetImm (igsvga, igs_wcrt0, 1); + igsSetImm (igsvga, igs_wcrt1, 1); + igsSetImm (igsvga, igs_rcrts1, 1); + igsSetImm (igsvga, igs_selwk, 1); + VgaPreserve (&igsvga->card); +} + +void +igsReset (IgsVga *igsvga) +{ + VgaRestore (&igsvga->card); + igsSetImm (igsvga, igs_frqlat, 0); + igsSetImm (igsvga, igs_frqlat, 1); + igsSetImm (igsvga, igs_frqlat, 0); + VgaFinish (&igsvga->card); +} + +char * +igsRegName(char *buf, VGA16 reg) +{ + if (reg < IGS_SR + IGS_NSR) + { + sprintf (buf, " SR%02X", reg - IGS_SR); + } + else if (reg < IGS_GR + IGS_NGR) + { + sprintf (buf, " GR%02X", reg - IGS_GR); + } + else if (reg < IGS_GREX + IGS_NGREX) + { + sprintf (buf, " GRX%02X", reg - IGS_GREX + IGS_GREXBASE); + } + else if (reg < IGS_AR + IGS_NAR) + { + sprintf (buf, " AR%02X", reg - IGS_AR); + } + else if (reg < IGS_CR + IGS_NCR) + { + sprintf (buf, " CR%02X", reg - IGS_CR); + } + else if (reg < IGS_DAC + IGS_NDAC) + { + sprintf (buf, " DAC%02X", reg - IGS_DAC); + } + else if (reg < IGS_DACEX + IGS_NDACEX) + { + sprintf (buf, "DACX%02X", reg - IGS_DACEX); + } + else switch (reg) { + case IGS_MISC_OUT: + sprintf (buf, "MISC_O"); + break; + case IGS_INPUT_STATUS_1: + sprintf (buf, "IN_S_1"); + break; + } + return buf; +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/igs/igs.h +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/igs/igs.h @@ -0,0 +1,329 @@ +/* + * $RCSId: xc/programs/Xserver/hw/kdrive/igs/igs.h,v 1.1 2000/05/06 22:17:43 keithp Exp $ + * + * Copyright © 1999 SuSE, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of SuSE not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. SuSE makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + * + * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE + * BE LIABLE FOR 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. + * + * Author: Keith Packard, SuSE, Inc. + */ + +#ifndef _IGS_H_ +#define _IGS_H_ + +#include "kdrive.h" +#include "igsreg.h" + +extern KdCardFuncs igsFuncs; + +/* + * FB 0x00000000 + * VGA 0x00800000 + * Blt window 0x008a0000 + * Coprocessor 0x008bf000 + */ + +#if BITMAP_BIT_ORDER == MSBFirst +#define IGS_FB 0x00400000 +#else +#define IGS_FB 0x00000000 +#endif +#define IGS_VGA 0x00800000 +#define IGS_COP_DATA 0x008a0000 +#define IGS_COP_DATA_LEN 0x00010000 +#define IGS_COP_OFFSET 0x008bf000 +/* give audio 1/2 meg at end */ +#if 1 +#define IGS_MEM ((4096-512)*1024) +#else +#define IGS_MEM ((4096)*1024) +#endif + +#define IGS_CLOCK_REF 24576 /* KHz */ + +#define IGS_SCALE(p) ((p) ? (2 * (p)) : 1) + +#define IGS_CLOCK(m,n,p) ((IGS_CLOCK_REF * ((m) + 1)) / (((n) + 1) * IGS_SCALE(p))) + +#define IGS_MAX_CLOCK 260000 + +#define IGS_MIN_VCO 115000 + +typedef volatile CARD8 VOL8; +typedef volatile CARD16 VOL16; +typedef volatile CARD32 VOL32; + +typedef struct _Cop5xxx { + VOL8 pad000[0x10]; /* 0x000 */ + + VOL32 control; /* 0x010 */ +#define IGS_CONTROL_HBLTW_RDYZ 0x0100 +#define IGS_CONTROL_MALLWBEPTZ 0x0200 +#define IGS_CONTROL_CMDFF 0x0400 +#define IGS_CONTROL_SOP 0x0800 +#define IGS_CONTROL_OPS 0x1000 +#define IGS_CONTROL_TER 0x2000 +#define IGS_CONTROL_HBACKZ 0x4000 +#define IGS_CONTROL_BUSY 0x8000 + + VOL8 pad014[0x04]; /* 0x014 */ + + VOL32 src1_stride; /* 0x018 */ + + VOL32 format; /* 0x01c */ + +#define IGS_FORMAT_8BPP 0 +#define IGS_FORMAT_16BPP 1 +#define IGS_FORMAT_24BPP 2 +#define IGS_FORMAT_32BPP 3 + + VOL32 bres_error; /* 0x020 */ + VOL32 bres_k1; /* 0x024 */ + VOL32 bres_k2; /* 0x028 */ + VOL8 pad02c[0x1c]; /* 0x02c */ + + VOL32 mix; /* 0x048 */ +#define IGS_MIX_FG 0x00ff +#define IGS_MIX_BG 0xff00 +#define IGS_MAKE_MIX(fg,bg) ((fg) | ((bg) << 8)) + +#define IGS_MIX_ZERO 0x0 +#define IGS_MIX_SRC_AND_DST 0x1 +#define IGS_MIX_SRC_AND_NOT_DST 0x2 +#define IGS_MIX_SRC 0x3 +#define IGS_MIX_NOT_SRC_AND_DST 0x4 +#define IGS_MIX_DST 0x5 +#define IGS_MIX_SRC_XOR_DST 0x6 +#define IGS_MIX_SRC_OR_DST 0x7 +#define IGS_MIX_NOT_SRC_AND_NOT_DST 0x8 +#define IGS_MIX_SRC_XOR_NOT_DST 0x9 +#define IGS_MIX_NOT_DST 0xa +#define IGS_MIX_SRC_OR_NOT_DST 0xb +#define IGS_MIX_NOT_SRC 0xc +#define IGS_MIX_NOT_SRC_OR_DST 0xd +#define IGS_MIX_NOT_SRC_OR_NOT_DST 0xe +#define IGS_MIX_ONE 0xf + + VOL32 colorComp; /* 0x04c */ + VOL32 planemask; /* 0x050 */ + + VOL8 pad054[0x4]; /* 0x054 */ + + VOL32 fg; /* 0x058 */ + VOL32 bg; /* 0x05c */ + VOL32 dim; /* 0x060 */ +#define IGS_MAKE_DIM(w,h) ((w) | ((h) << 16)) + VOL8 pad5[0x0c]; /* 0x064 */ + + VOL32 src1_base_address; /* 0x070 */ + VOL8 pad074[0x04]; /* 0x074 */ + + VOL32 rotate; /* 0x078 */ +#define IGS_MAKE_ROTATE(x,y) ((x) | ((y) << 16)) + VOL32 operation; /* 0x07c */ + +/* OCT[2:0] */ +#define IGS_DRAW_X_MAJOR 0x00000000 +#define IGS_DRAW_Y_MAJOR 0x00000001 +#define IGS_DRAW_T_B 0x00000000 +#define IGS_DRAW_B_T 0x00000002 +#define IGS_DRAW_L_R 0x00000000 +#define IGS_DRAW_R_L 0x00000004 + +/* Draw_Mode[1:0] */ +#define IGS_DRAW_ALL 0x00000000 +#define IGS_DRAW_NOT_FIRST 0x00000010 +#define IGS_DRAW_NOT_LAST 0x00000020 +#define IGS_DRAW_NOT_FIRST_LAST 0x00000030 + +/* TRPS[1:0] */ +#define IGS_TRANS_SRC1 0x00000000 +#define IGS_TRANS_SRC2 0x00000100 +#define IGS_TRANS_DST 0x00000200 +/* TRPS2 Transparent Invert */ +#define IGS_TRANS_INVERT 0x00000400 +/* TRPS3, Transparent Enable */ +#define IGS_TRANS_ENABLE 0x00000800 + +/* PPS[3:0], Pattern Pixel Select */ +#define IGS_PIXEL_TEXT_OPAQUE 0x00001000 +#define IGS_PIXEL_STIP_OPAQUE 0x00002000 +#define IGS_PIXEL_LINE_OPAQUE 0x00003000 +#define IGS_PIXEL_TEXT_TRANS 0x00005000 +#define IGS_PIXEL_STIP_TRANS 0x00006000 +#define IGS_PIXEL_LINE_TRANS 0x00007000 +#define IGS_PIXEL_FG 0x00008000 +#define IGS_PIXEL_TILE 0x00009000 +#define IGS_PIXEL_TILE_OPAQUE 0x0000d000 + +/* HostBltEnable[1:0] */ +#define IGS_HBLT_DISABLE 0x00000000 +#define IGS_HBLT_READ 0x00010000 +#define IGS_HBLT_WRITE_1 0x00020000 +#define IGS_HBLT_WRITE_2 0x00030000 + +/* Src2MapSelect[2:0], Src2 map select mode */ +#define IGS_SRC2_NORMAL 0x00000000 +#define IGS_SRC2_MONO_OPAQUE 0x00100000 +#define IGS_SRC2_FG 0x00200000 +#define IGS_SRC2_MONO_TRANS 0x00500000 + +/* StepFunction[3:0], Step function select */ +#define IGS_STEP_DRAW_AND_STEP 0x04000000 +#define IGS_STEP_LINE_DRAW 0x05000000 +#define IGS_STEP_PXBLT 0x08000000 +#define IGS_STEP_INVERT_PXBLT 0x09000000 +#define IGS_STEP_TERNARY_PXBLT 0x0b000000 + +/* FGS */ +#define IGS_FGS_FG 0x00000000 +#define IGS_FGS_SRC 0x20000000 + +/* BGS */ +#define IGS_BGS_BG 0x00000000 +#define IGS_BGS_SRC 0x80000000 + VOL8 pad080[0x90]; /* 0x080 */ + + VOL32 debug_control; /* 0x110 */ + VOL8 pad114[0x04]; /* 0x114 */ + + VOL32 src2_stride; /* 0x118 */ + VOL8 pad11c[0x14]; /* 0x11c */ + + VOL32 extension; /* 0x130 */ + +#define IGS_BURST_ENABLE 0x01 +#define IGS_STYLE_LINE 0x02 +#define IGS_ADDITIONAL_WAIT 0x04 +#define IGS_BLOCK_COP_REG 0x08 +#define IGS_TURBO_MONO 0x10 +#define IGS_SELECT_SAMPLE 0x40 +#define IGS_MDSBL_RD_B_WR 0x80 +#define IGS_WRMRSTZ 0x100 +#define IGS_TEST_MTST 0x200 + + VOL32 style_line; /* 0x134 */ +#define IGS_MAKE_STILE_LINE(roll_over,inc,pattern,accumulator) \ + ((roll_over) | \ + ((style_line_inc) << 8) | \ + ((style_line_patern) << 16) | \ + ((style_line_accumullator) << 24)) + VOL32 style_line_pattern_index; /* 0x138 */ + + VOL32 mono_burst_total; /* 0x13c */ + VOL8 pad140[0x10]; /* 0x140 */ + + VOL32 pat_x_rotate; /* 0x150 */ + VOL8 pad154[0x1c]; /* 0x154 */ + + VOL32 src1_start; /* 0x170 */ + VOL32 src2_start; /* 0x174 */ + VOL32 dst_start; /* 0x178 */ + VOL8 pad17c[0x9c]; /* 0x17c */ + + VOL32 dst_stride; /* 0x218 */ +} Cop5xxx; + +typedef struct _igsCardInfo { + Cop5xxx *cop; + VOL8 *vga; + VOL32 *copData; + CARD8 *frameBuffer; + IgsVga igsvga; +} IgsCardInfo; + +#define getIgsCardInfo(kd) ((IgsCardInfo *) ((kd)->card->driver)) +#define igsCardInfo(kd) IgsCardInfo *igsc = getIgsCardInfo(kd) + +typedef struct _igsCursor { + int width, height; + int xhot, yhot; + Bool has_cursor; + CursorPtr pCursor; + Pixel source, mask; +} IgsCursor; + +#define IGS_CURSOR_WIDTH 64 +#define IGS_CURSOR_HEIGHT 64 + +typedef struct _igsPattern { + INT32 xrot, yrot; + CARD32 serial_number; + CARD8 *base; + CARD32 offset; +} IgsPattern; + +#define IGS_NUM_PATTERN 8 +#define IGS_PATTERN_WIDTH 8 +#define IGS_PATTERN_HEIGHT 8 + +typedef struct _igsPatternCache { + CARD8 *base; + CARD32 offset; + IgsPattern pattern[IGS_NUM_PATTERN]; + int next; +} IgsPatternCache; + +typedef struct _igsScreenInfo { + CARD8 *cursor_base; + CARD32 cursor_offset; + IgsCursor cursor; + IgsPatternCache tile; + IgsPatternCache stipple; +} IgsScreenInfo; + +#define IgsTileSize(bpp) (IGS_PATTERN_WIDTH*(bpp)/8*IGS_PATTERN_HEIGHT) +#define IgsStippleSize(bpp) (IGS_PATTERN_WIDTH/8*IGS_PATTERN_HEIGHT) + +#define getIgsScreenInfo(kd) ((IgsScreenInfo *) ((kd)->screen->driver)) +#define igsScreenInfo(kd) IgsScreenInfo *igss = getIgsScreenInfo(kd) + +Bool +igsDrawInit (ScreenPtr pScreen); + +void +igsDrawEnable (ScreenPtr pScreen); + +void +igsDrawDisable (ScreenPtr pScreen); + +void +igsDrawSync (ScreenPtr pScreen); + +void +igsDrawFini (ScreenPtr pScreen); + +void +igsGetColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs); + +void +igsPutColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs); + +Bool +igsCursorInit (ScreenPtr pScreen); + +void +igsCursorEnable (ScreenPtr pScreen); + +void +igsCursorDisable (ScreenPtr pScreen); + +void +igsCursorFini (ScreenPtr pScreen); + +#endif /* _IGS_H_ */ --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/igs/igscmap.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/igs/igscmap.c @@ -0,0 +1,64 @@ +/* + * $RCSId: $ + * + * Copyright © 2000 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "igs.h" + +#define IGS_DAC_SHIFT 8 +void +igsGetColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs) +{ + KdScreenPriv(pScreen); + igsCardInfo(pScreenPriv); + IgsVga *igsvga = &igsc->igsvga; + + while (ndef--) + { + igsSetImm (igsvga, igs_dac_read_index, pdefs->pixel); + pdefs->red = igsGetImm (igsvga, igs_dac_data) << IGS_DAC_SHIFT; + pdefs->green = igsGetImm (igsvga, igs_dac_data) << IGS_DAC_SHIFT; + pdefs->blue = igsGetImm (igsvga, igs_dac_data) << IGS_DAC_SHIFT; + pdefs++; + } +} + +void +igsPutColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs) +{ + KdScreenPriv(pScreen); + igsCardInfo(pScreenPriv); + IgsVga *igsvga = &igsc->igsvga; + + while (ndef--) + { + igsSetImm (igsvga, igs_dac_write_index, pdefs->pixel); + igsSetImm (igsvga, igs_dac_data, pdefs->red >> IGS_DAC_SHIFT); + igsSetImm (igsvga, igs_dac_data, pdefs->green >> IGS_DAC_SHIFT); + igsSetImm (igsvga, igs_dac_data, pdefs->blue >> IGS_DAC_SHIFT); + pdefs++; + } +} + --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/igs/igsdraw.h +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/igs/igsdraw.h @@ -0,0 +1,260 @@ +/* + * $RCSId: xc/programs/Xserver/hw/kdrive/igs/igsdraw.h,v 1.1 2000/05/06 22:17:43 keithp Exp $ + * + * Copyright © 2000 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ + +#ifndef _IGSDRAW_H_ +#define _IGSDRAW_H_ + +extern CARD8 igsPatRop[]; + +#define SetupIgs(s) KdScreenPriv(s); \ + igsCardInfo(pScreenPriv); \ + Cop5xxx *cop = igsc->cop; \ + int cop_stride = pScreenPriv->screen->fb[0].pixelStride + +#define _igsWaitLoop(cop,mask,value) { \ + int __loop = 1000000; \ + while (((cop)->control & (mask)) != (value)) { \ + if (--__loop <= 0) { \ + FatalError("Warning: igsWaitLoop 0x%x 0x%x failed\n", mask, value); \ + } \ + } \ +} + +#define _igsWaitDone(cop) _igsWaitLoop(cop, \ + (IGS_CONTROL_BUSY| \ + IGS_CONTROL_MALLWBEPTZ), \ + 0) + +#if 1 +#define _igsWaitFull(cop) _igsWaitLoop(cop, \ + IGS_CONTROL_CMDFF, \ + 0) +#else +#define _igsWaitFull(cop) _igsWaitDone(cop) +#endif + +#define _igsWaitIdleEmpty(cop) _igsWaitDone(cop) +#define _igsWaitHostBltAck(cop) _igsWaitLoop(cop, \ + (IGS_CONTROL_HBACKZ| \ + IGS_CONTROL_CMDFF), \ + 0) + +#define _igsReset(cop) ((cop)->control = 0) + +#define IgsInvertBits32(v) { \ + v = ((v & 0x55555555) << 1) | ((v >> 1) & 0x55555555); \ + v = ((v & 0x33333333) << 2) | ((v >> 2) & 0x33333333); \ + v = ((v & 0x0f0f0f0f) << 4) | ((v >> 4) & 0x0f0f0f0f); \ +} + +#define IgsInvertBits16(v) { \ + v = ((v & 0x5555) << 1) | ((v >> 1) & 0x5555); \ + v = ((v & 0x3333) << 2) | ((v >> 2) & 0x3333); \ + v = ((v & 0x0f0f) << 4) | ((v >> 4) & 0x0f0f); \ +} + +#define IgsInvertBits8(v) { \ + v = ((v & 0x55) << 1) | ((v >> 1) & 0x55); \ + v = ((v & 0x33) << 2) | ((v >> 2) & 0x33); \ + v = ((v & 0x0f) << 4) | ((v >> 4) & 0x0f); \ +} + +#define IgsByteSwap32(x) ((x) = (((x) >> 24) | \ + (((x) >> 8) & 0xff00) | \ + (((x) << 8) & 0xff0000) | \ + ((x) << 24))) + +#define IgsByteSwap16(x) ((x) = ((x) << 8) | ((x) >> 8)) + +#define igsPatternDimOk(d) ((d) <= IGS_PATTERN_WIDTH && (((d) & ((d) - 1)) == 0)) + +#if BITMAP_BIT_ORDER == LSBFirst +#define IgsAdjustBits32(b) IgsInvertBits32(b) +#define IgsAdjustBits16(x) IgsInvertBits16(x) +#else +#define IgsAdjustBits32(x) IgsByteSwap32(x) +#define IgsAdjustBits16(x) IgsByteSwap16(x) +#endif + +#define _igsSetSolidRect(cop,alu,pm,pix,cmd) {\ + _igsWaitFull(cop); \ + (cop)->mix = IGS_MAKE_MIX(alu,alu); \ + (cop)->fg = (pix); \ + (cmd) = (IGS_DRAW_T_B | \ + IGS_DRAW_L_R | \ + IGS_DRAW_ALL | \ + IGS_PIXEL_FG | \ + IGS_HBLT_DISABLE | \ + IGS_SRC2_NORMAL | \ + IGS_STEP_PXBLT | \ + IGS_FGS_FG | \ + IGS_BGS_BG); \ +} + +#define _igsSetTiledRect(cop,alu,pm,base,cmd) {\ + _igsWaitFull(cop); \ + (cop)->mix = IGS_MAKE_MIX(alu,alu); \ + (cop)->src1_stride = IGS_PATTERN_WIDTH - 1; \ + (cop)->src1_start = (base); \ + (cmd) = (IGS_DRAW_T_B | \ + IGS_DRAW_L_R | \ + IGS_DRAW_ALL | \ + IGS_PIXEL_TILE | \ + IGS_HBLT_DISABLE | \ + IGS_SRC2_NORMAL | \ + IGS_STEP_PXBLT | \ + IGS_FGS_SRC | \ + IGS_BGS_BG); \ +} + +#define _igsSetStippledRect(cop,alu,pm,pix,base,cmd) {\ + _igsWaitFull(cop); \ + (cop)->mix = IGS_MAKE_MIX(alu,alu); \ + (cop)->src1_start = (base); \ + (cop)->fg = (pix); \ + (cmd) = (IGS_DRAW_T_B | \ + IGS_DRAW_L_R | \ + IGS_DRAW_ALL | \ + IGS_PIXEL_STIP_TRANS | \ + IGS_HBLT_DISABLE | \ + IGS_SRC2_NORMAL | \ + IGS_STEP_PXBLT | \ + IGS_FGS_FG | \ + IGS_BGS_BG); \ +} + +#define _igsSetOpaqueStippledRect(cop,alu,pm,_fg,_bg,base,cmd) {\ + _igsWaitFull(cop); \ + (cop)->mix = IGS_MAKE_MIX(alu,alu); \ + (cop)->src1_start = (base); \ + (cop)->fg = (_fg); \ + (cop)->bg = (_bg); \ + (cmd) = (IGS_DRAW_T_B | \ + IGS_DRAW_L_R | \ + IGS_DRAW_ALL | \ + IGS_PIXEL_STIP_OPAQUE | \ + IGS_HBLT_DISABLE | \ + IGS_SRC2_NORMAL | \ + IGS_STEP_PXBLT | \ + IGS_FGS_FG | \ + IGS_BGS_BG); \ +} + +#define _igsRect(cop,x,y,w,h,cmd) { \ + _igsWaitFull(cop); \ + (cop)->dst_start = (x) + (y) * (cop_stride); \ + (cop)->dim = IGS_MAKE_DIM(w-1,h-1); \ + (cop)->operation = (cmd); \ +} + +#define _igsPatRect(cop,x,y,w,h,cmd) { \ + _igsWaitFull(cop); \ + (cop)->dst_start = (x) + (y) * (cop_stride); \ + (cop)->rotate = IGS_MAKE_ROTATE(x&7,y&7); \ + (cop)->dim = IGS_MAKE_DIM(w-1,h-1); \ + (cop)->operation = (cmd); \ +} + +#define _igsSetBlt(cop,alu,pm,backwards,upsidedown,cmd) { \ + _igsWaitFull(cop); \ + (cop)->mix = IGS_MAKE_MIX(alu,alu); \ + (cop)->src1_stride = cop_stride - 1; \ + (cmd) = (IGS_DRAW_ALL | \ + IGS_PIXEL_FG | \ + IGS_HBLT_DISABLE | \ + IGS_SRC2_NORMAL | \ + IGS_STEP_PXBLT | \ + IGS_FGS_SRC | \ + IGS_BGS_BG); \ + if (backwards) (cmd) |= IGS_DRAW_R_L; \ + if (upsidedown) (cmd) |= IGS_DRAW_B_T; \ +} + +#if 0 +#define _igsPreparePlaneBlt(cop) { \ + _igsReset(cop); \ + (cop)->dst_stride = cop_stride - 1; \ + (cop)->src1_stride = cop_stride - 1; \ + (cop)->src2_stride = cop_stride - 1; \ + (cop)->format = IGS_FORMAT_16BPP; \ + (cop)->src1_start = 0; \ + (cop)->src2_start = 0; \ +} +#else +#define _igsPreparePlaneBlt(cop) +#endif + +#define _igsSetTransparentPlaneBlt(cop,alu,pm,fg_pix,cmd) { \ + _igsWaitIdleEmpty(cop); \ + _igsPreparePlaneBlt(cop); \ + (cop)->mix = IGS_MAKE_MIX(igsPatRop[alu],igsPatRop[alu]); \ + (cop)->fg = (fg_pix); \ + (cmd) = (IGS_DRAW_T_B | \ + IGS_DRAW_L_R | \ + IGS_DRAW_ALL | \ + IGS_PIXEL_FG | \ + IGS_HBLT_WRITE_2 | \ + IGS_SRC2_MONO_TRANS | \ + IGS_STEP_TERNARY_PXBLT | \ + IGS_FGS_FG | \ + IGS_BGS_BG); \ +} + +#define _igsSetOpaquePlaneBlt(cop,alu,pm,fg_pix,bg_pix,cmd) { \ + _igsWaitIdleEmpty(cop); \ + _igsPreparePlaneBlt(cop); \ + (cop)->mix = IGS_MAKE_MIX(igsPatRop[alu],igsPatRop[alu]); \ + (cop)->fg = (fg_pix); \ + (cop)->bg = (bg_pix); \ + (cmd) = (IGS_DRAW_T_B | \ + IGS_DRAW_L_R | \ + IGS_DRAW_ALL | \ + IGS_PIXEL_FG | \ + IGS_HBLT_WRITE_2 | \ + IGS_SRC2_MONO_OPAQUE | \ + IGS_STEP_TERNARY_PXBLT | \ + IGS_FGS_FG | \ + IGS_BGS_BG); \ +} + +#define _igsPlaneBlt(cop,x,y,w,h,cmd) { \ +/* _igsWaitFull(cop); */ \ + (cop)->dst_start = (x) + (y) * (cop_stride); \ + (cop)->dim = IGS_MAKE_DIM((w)-1,(h)-1); \ + (cop)->operation = (cmd); \ +/* _igsWaitHostBltAck(cop); */ \ +} + +#define _igsBlt(cop,sx,sy,dx,dy,w,h,cmd) { \ + _igsWaitFull(cop); \ + (cop)->dst_start = (dx) + (dy) * cop_stride; \ + (cop)->src1_start = (sx) + (sy) * cop_stride; \ + (cop)->src1_stride = cop_stride - 1; \ + (cop)->dim = IGS_MAKE_DIM(w-1,h-1); \ + (cop)->operation = (cmd); \ +} + +#define sourceInvarient(alu) (((alu) & 3) == (((alu) >> 2) & 3)) + +#endif --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/igs/igsdraw.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/igs/igsdraw.c @@ -0,0 +1,1535 @@ +/* + * $RCSId: xc/programs/Xserver/hw/kdrive/igs/igsdraw.c,v 1.1 2000/05/06 22:17:43 keithp Exp $ + * + * Copyright © 2000 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "igs.h" +#include "igsdraw.h" + +#include "Xmd.h" +#include "gcstruct.h" +#include "scrnintstr.h" +#include "pixmapstr.h" +#include "regionstr.h" +#include "mistruct.h" +#include "fontstruct.h" +#include "dixfontstr.h" +#include "fb.h" +#include "migc.h" +#include "miline.h" + +CARD8 igsPatRop[16] = { + /* GXclear */ 0x00, /* 0 */ + /* GXand */ 0xa0, /* src AND dst */ + /* GXandReverse */ 0x50, /* src AND NOT dst */ + /* GXcopy */ 0xf0, /* src */ + /* GXandInverted*/ 0x0a, /* NOT src AND dst */ + /* GXnoop */ 0xaa, /* dst */ + /* GXxor */ 0x5a, /* src XOR dst */ + /* GXor */ 0xfa, /* src OR dst */ + /* GXnor */ 0x05, /* NOT src AND NOT dst */ + /* GXequiv */ 0xa5, /* NOT src XOR dst */ + /* GXinvert */ 0x55, /* NOT dst */ + /* GXorReverse */ 0xf5, /* src OR NOT dst */ + /* GXcopyInverted*/ 0x0f, /* NOT src */ + /* GXorInverted */ 0xaf, /* NOT src OR dst */ + /* GXnand */ 0x5f, /* NOT src OR NOT dst */ + /* GXset */ 0xff, /* 1 */ +}; + +/* + * Handle pixel transfers + */ + +#define BURST +#ifdef BURST +#define PixTransDeclare VOL32 *pix_trans_base = igsc->copData,\ + *pix_trans = pix_trans_base +#define PixTransStart(n) if (pix_trans + (n) > pix_trans_base + 16384) pix_trans = pix_trans_base +#define PixTransStore(t) *pix_trans++ = (t) +#else +#define PixTransDeclare VOL32 *pix_trans = igsc->copData +#define PixTransStart(n) +#define PixTransStore(t) *pix_trans = (t) +#endif + +static IgsPattern * +igsSetPattern (ScreenPtr pScreen, + PixmapPtr pPixmap, + CARD8 fillStyle, + INT32 xrot, + INT32 yrot) +{ + KdScreenPriv(pScreen); + igsCardInfo(pScreenPriv); + igsScreenInfo(pScreenPriv); + int i; + IgsPatternCache *c; + IgsPattern *p; + + if (fillStyle == FillTiled) + c = &igss->tile; + else + c = &igss->stipple; + for (i = 0; i < IGS_NUM_PATTERN; i++) + { + p = &c->pattern[i]; + if (p->serial_number == pPixmap->drawable.serialNumber && + p->xrot == xrot && + p->yrot == yrot) + { + return p; + } + } + p = &c->pattern[c->next]; + if (++c->next == IGS_NUM_PATTERN) + c->next = 0; + p->serial_number = pPixmap->drawable.serialNumber; + p->xrot = xrot; + p->yrot = yrot; + + if (fillStyle != FillTiled) + { + FbStip *pix; + FbStride pixStride; + int pixBpp; + int pixXoff, pixYoff; + CARD8 tmp[8]; + CARD32 *pat; + int stipX, stipY; + int y; + FbStip bits; + + fbGetStipDrawable (&pPixmap->drawable, pix, pixStride, pixBpp, pixXoff, pixYoff); + + modulus (-yrot - pixYoff, pPixmap->drawable.height, stipY); + modulus (-xrot - pixXoff, FB_UNIT, stipX); + + pat = (CARD32 *) p->base; + + for (y = 0; y < 8; y++) + { + bits = pix[stipY * pixStride]; + FbRotLeft (bits, stipX); + tmp[y] = (CARD8) bits; + stipY++; + if (stipY == pPixmap->drawable.height) + stipY = 0; + } + for (i = 0; i < 2; i++) + { + bits = (tmp[i*4+0] | + (tmp[i*4+1] << 8) | + (tmp[i*4+2] << 16) | + (tmp[i*4+3] << 24)); + IgsAdjustBits32 (bits); + *pat++ = bits; + } + } + else + { + FbBits *pix; + FbStride pixStride; + int pixBpp; + FbBits *pat; + FbStride patStride; + int patBpp; + int patXoff, patYoff; + + fbGetDrawable (&pPixmap->drawable, pix, pixStride, pixBpp, patXoff, patYoff); + + pat = (FbBits *) p->base; + patBpp = pixBpp; + patStride = (patBpp * IGS_PATTERN_WIDTH) / (8 * sizeof (FbBits)); + + fbTile (pat, patStride, 0, + patBpp * IGS_PATTERN_WIDTH, IGS_PATTERN_HEIGHT, + + pix, pixStride, + pPixmap->drawable.width * pixBpp, + pPixmap->drawable.height, + GXcopy, FB_ALLONES, pixBpp, + (xrot - patXoff) * pixBpp, yrot - patYoff); + } + return p; +} + +void +igsFillBoxSolid (DrawablePtr pDrawable, int nBox, BoxPtr pBox, + unsigned long pixel, int alu, unsigned long planemask) +{ + SetupIgs(pDrawable->pScreen); + CARD32 cmd; + + _igsSetSolidRect(cop,alu,planemask,pixel,cmd); + while (nBox--) + { + _igsRect(cop,pBox->x1,pBox->y1,pBox->x2-pBox->x1,pBox->y2-pBox->y1,cmd); + pBox++; + } + KdMarkSync (pDrawable->pScreen); +} + +void +igsFillBoxTiled (DrawablePtr pDrawable, int nBox, BoxPtr pBox, + PixmapPtr pPixmap, int xrot, int yrot, int alu) +{ + SetupIgs(pDrawable->pScreen); + CARD32 cmd; + IgsPattern *p = igsSetPattern (pDrawable->pScreen, + pPixmap, + FillTiled, + xrot, yrot); + + _igsSetTiledRect(cop,alu,planemask,p->offset,cmd); + while (nBox--) + { + _igsPatRect(cop,pBox->x1,pBox->y1,pBox->x2-pBox->x1,pBox->y2-pBox->y1,cmd); + pBox++; + } + KdMarkSync (pDrawable->pScreen); +} + +void +igsFillBoxStippled (DrawablePtr pDrawable, GCPtr pGC, + int nBox, BoxPtr pBox) +{ + SetupIgs(pDrawable->pScreen); + CARD32 cmd; + int xrot = pGC->patOrg.x + pDrawable->x; + int yrot = pGC->patOrg.y + pDrawable->y; + IgsPattern *p = igsSetPattern (pDrawable->pScreen, + pGC->stipple, + pGC->fillStyle, + xrot, yrot); + if (pGC->fillStyle == FillStippled) + { + _igsSetStippledRect (cop,pGC->alu,planemask,pGC->fgPixel,p->offset,cmd); + } + else + { + _igsSetOpaqueStippledRect (cop,pGC->alu,planemask, + pGC->fgPixel,pGC->bgPixel,p->offset,cmd); + } + while (nBox--) + { + _igsPatRect(cop,pBox->x1,pBox->y1,pBox->x2-pBox->x1,pBox->y2-pBox->y1,cmd); + pBox++; + } + KdMarkSync (pDrawable->pScreen); +} + + +void +igsStipple (ScreenPtr pScreen, + CARD32 cmd, + FbStip *psrcBase, + FbStride widthSrc, + int srcx, + int srcy, + int dstx, + int dsty, + int width, + int height) +{ + SetupIgs(pScreen); + FbStip *psrcLine, *psrc; + FbStride widthRest; + FbStip bits, tmp, lastTmp; + int leftShift, rightShift; + int nl, nlMiddle; + int r; + PixTransDeclare; + + /* Compute blt address and parameters */ + psrc = psrcBase + srcy * widthSrc + (srcx >> 5); + nlMiddle = (width + 31) >> 5; + leftShift = srcx & 0x1f; + rightShift = 32 - leftShift; + widthRest = widthSrc - nlMiddle; + + _igsPlaneBlt(cop,dstx,dsty,width,height,cmd); + + if (leftShift == 0) + { + while (height--) + { + nl = nlMiddle; + PixTransStart(nl); + while (nl--) + { + tmp = *psrc++; + IgsAdjustBits32 (tmp); + PixTransStore (tmp); + } + psrc += widthRest; + } + } + else + { + widthRest--; + while (height--) + { + bits = *psrc++; + nl = nlMiddle; + PixTransStart(nl); + while (nl--) + { + tmp = FbStipLeft(bits, leftShift); + bits = *psrc++; + tmp |= FbStipRight(bits, rightShift); + IgsAdjustBits32(tmp); + PixTransStore (tmp); + } + psrc += widthRest; + } + } +} + +void +igsCopyNtoN (DrawablePtr pSrcDrawable, + DrawablePtr pDstDrawable, + GCPtr pGC, + BoxPtr pbox, + int nbox, + int dx, + int dy, + Bool reverse, + Bool upsidedown, + Pixel bitplane, + void *closure) +{ + SetupIgs(pDstDrawable->pScreen); + int srcX, srcY, dstX, dstY; + int w, h; + CARD32 flags; + CARD32 cmd; + CARD8 alu; + + if (pGC) + { + alu = pGC->alu; + if (sourceInvarient (pGC->alu)) + { + igsFillBoxSolid (pDstDrawable, nbox, pbox, 0, pGC->alu, pGC->planemask); + return; + } + } + else + alu = GXcopy; + + _igsSetBlt(cop,alu,pGC->planemask,reverse,upsidedown,cmd); + while (nbox--) + { + w = pbox->x2 - pbox->x1; + h = pbox->y2 - pbox->y1; + if (reverse) + dstX = pbox->x2 - 1; + else + dstX = pbox->x1; + srcX = dstX + dx; + + if (upsidedown) + dstY = pbox->y2 - 1; + else + dstY = pbox->y1; + + srcY = dstY + dy; + + _igsBlt (cop, srcX, srcY, dstX, dstY, w, h, cmd); + pbox++; + } + KdMarkSync (pDstDrawable->pScreen); +} + +RegionPtr +igsCopyArea(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC, + int srcx, int srcy, int width, int height, int dstx, int dsty) +{ + KdScreenPriv(pDstDrawable->pScreen); + FbBits depthMask; + + depthMask = FbFullMask (pDstDrawable->depth); + if ((pGC->planemask & depthMask) == depthMask && + pSrcDrawable->type == DRAWABLE_WINDOW && + pDstDrawable->type == DRAWABLE_WINDOW) + { + return fbDoCopy (pSrcDrawable, pDstDrawable, pGC, + srcx, srcy, width, height, + dstx, dsty, igsCopyNtoN, 0, 0); + } + return KdCheckCopyArea (pSrcDrawable, pDstDrawable, pGC, + srcx, srcy, width, height, dstx, dsty); +} + +typedef struct _igs1toNargs { + unsigned long copyPlaneFG, copyPlaneBG; + Bool opaque; +} igs1toNargs; + +void +igsCopy1toN (DrawablePtr pSrcDrawable, + DrawablePtr pDstDrawable, + GCPtr pGC, + BoxPtr pbox, + int nbox, + int dx, + int dy, + Bool reverse, + Bool upsidedown, + Pixel bitplane, + void *closure) +{ + SetupIgs(pDstDrawable->pScreen); + + igs1toNargs *args = closure; + int dstx, dsty; + FbStip *psrcBase; + FbStride widthSrc; + int srcBpp; + int srcXoff, srcYoff; + CARD32 cmd; + + if (args->opaque && sourceInvarient (pGC->alu)) + { + igsFillBoxSolid (pDstDrawable, nbox, pbox, + pGC->bgPixel, pGC->alu, pGC->planemask); + return; + } + + fbGetStipDrawable (pSrcDrawable, psrcBase, widthSrc, srcBpp, srcXoff, srcYoff); + + if (args->opaque) + { + _igsSetOpaquePlaneBlt (cop, pGC->alu, pGC->planemask, args->copyPlaneFG, + args->copyPlaneBG, cmd); + } + else + { + _igsSetTransparentPlaneBlt (cop, pGC->alu, pGC->planemask, + args->copyPlaneFG, cmd); + } + + while (nbox--) + { + dstx = pbox->x1; + dsty = pbox->y1; + + igsStipple (pDstDrawable->pScreen, cmd, + psrcBase, widthSrc, + dstx + dx - srcXoff, dsty + dy - srcYoff, + dstx, dsty, + pbox->x2 - dstx, pbox->y2 - dsty); + pbox++; + } + KdMarkSync (pDstDrawable->pScreen); +} + +RegionPtr +igsCopyPlane (DrawablePtr pSrcDrawable, + DrawablePtr pDstDrawable, + GCPtr pGC, + int srcx, + int srcy, + int width, + int height, + int dstx, + int dsty, + unsigned long bitPlane) +{ + RegionPtr ret; + igs1toNargs args; + FbBits depthMask; + + depthMask = FbFullMask (pDstDrawable->depth); + if ((pGC->planemask & depthMask) == depthMask && + pDstDrawable->type == DRAWABLE_WINDOW && + pSrcDrawable->depth == 1) + { + args.copyPlaneFG = pGC->fgPixel; + args.copyPlaneBG = pGC->bgPixel; + args.opaque = TRUE; + return fbDoCopy (pSrcDrawable, pDstDrawable, pGC, + srcx, srcy, width, height, + dstx, dsty, igsCopy1toN, bitPlane, &args); + } + return KdCheckCopyPlane(pSrcDrawable, pDstDrawable, pGC, + srcx, srcy, width, height, + dstx, dsty, bitPlane); +} + +#if 0 +/* would you believe this is slower than fb? */ +void +igsPushPixels (GCPtr pGC, + PixmapPtr pBitmap, + DrawablePtr pDrawable, + int w, + int h, + int x, + int y) +{ + igs1toNargs args; + FbBits depthMask; + + depthMask = FbFullMask (pDstDrawable->depth); + if ((pGC->planemask & depthMask) == depthMask && + pDrawable->type == DRAWABLE_WINDOW && + pGC->fillStyle == FillSolid) + { + args.opaque = FALSE; + args.copyPlaneFG = pGC->fgPixel; + (void) fbDoCopy ((DrawablePtr) pBitmap, pDrawable, pGC, + 0, 0, w, h, x, y, igsCopy1toN, 1, &args); + } + else + { + KdCheckPushPixels (pGC, pBitmap, pDrawable, w, h, x, y); + } +} +#else +#define igsPushPixels KdCheckPushPixels +#endif + +BOOL +igsFillOk (GCPtr pGC) +{ + FbBits depthMask; + + depthMask = FbFullMask(pGC->depth); + if ((pGC->planemask & depthMask) != depthMask) + return FALSE; + switch (pGC->fillStyle) { + case FillSolid: + return TRUE; + case FillTiled: + return (igsPatternDimOk (pGC->tile.pixmap->drawable.width) && + igsPatternDimOk (pGC->tile.pixmap->drawable.height)); + case FillStippled: + case FillOpaqueStippled: + return (igsPatternDimOk (pGC->stipple->drawable.width) && + igsPatternDimOk (pGC->stipple->drawable.height)); + } + return FALSE; +} + +void +igsFillSpans (DrawablePtr pDrawable, GCPtr pGC, int n, + DDXPointPtr ppt, int *pwidth, int fSorted) +{ + SetupIgs(pDrawable->pScreen); + DDXPointPtr pptFree; + FbGCPrivPtr fbPriv = fbGetGCPrivate(pGC); + int *pwidthFree;/* copies of the pointers to free */ + CARD32 cmd; + int nTmp; + INT16 x, y; + int width; + IgsPattern *p; + + if (!igsFillOk (pGC)) + { + KdCheckFillSpans (pDrawable, pGC, n, ppt, pwidth, fSorted); + return; + } + nTmp = n * miFindMaxBand(fbGetCompositeClip(pGC)); + pwidthFree = (int *)ALLOCATE_LOCAL(nTmp * sizeof(int)); + pptFree = (DDXPointRec *)ALLOCATE_LOCAL(nTmp * sizeof(DDXPointRec)); + if(!pptFree || !pwidthFree) + { + if (pptFree) DEALLOCATE_LOCAL(pptFree); + if (pwidthFree) DEALLOCATE_LOCAL(pwidthFree); + return; + } + n = miClipSpans(fbGetCompositeClip(pGC), + ppt, pwidth, n, + pptFree, pwidthFree, fSorted); + pwidth = pwidthFree; + ppt = pptFree; + switch (pGC->fillStyle) { + case FillSolid: + _igsSetSolidRect(cop,pGC->alu,pGC->planemask,pGC->fgPixel,cmd); + break; + case FillTiled: + p = igsSetPattern (pDrawable->pScreen, + pGC->tile.pixmap, + FillTiled, + pGC->patOrg.x + pDrawable->x, + pGC->patOrg.y + pDrawable->y); + _igsSetTiledRect (cop,pGC->alu,pGC->planemask,p->offset,cmd); + break; + default: + p = igsSetPattern (pDrawable->pScreen, + pGC->stipple, + pGC->fillStyle, + pGC->patOrg.x + pDrawable->x, + pGC->patOrg.y + pDrawable->y); + if (pGC->fillStyle == FillStippled) + { + _igsSetStippledRect (cop,pGC->alu,pGC->planemask, + pGC->fgPixel,p->offset,cmd); + } + else + { + _igsSetOpaqueStippledRect (cop,pGC->alu,pGC->planemask, + pGC->fgPixel,pGC->bgPixel,p->offset,cmd); + } + break; + } + while (n--) + { + x = ppt->x; + y = ppt->y; + ppt++; + width = *pwidth++; + if (width) + { + _igsPatRect(cop,x,y,width,1,cmd); + } + } + DEALLOCATE_LOCAL(pptFree); + DEALLOCATE_LOCAL(pwidthFree); + KdMarkSync (pDrawable->pScreen); +} + +#define NUM_STACK_RECTS 1024 + +void +igsPolyFillRect (DrawablePtr pDrawable, GCPtr pGC, + int nrectFill, xRectangle *prectInit) +{ + SetupIgs(pDrawable->pScreen); + xRectangle *prect; + RegionPtr prgnClip; + register BoxPtr pbox; + register BoxPtr pboxClipped; + BoxPtr pboxClippedBase; + BoxPtr pextent; + BoxRec stackRects[NUM_STACK_RECTS]; + FbGCPrivPtr fbPriv = fbGetGCPrivate (pGC); + int numRects; + int n; + int xorg, yorg; + int x, y; + + if (!igsFillOk (pGC)) + { + KdCheckPolyFillRect (pDrawable, pGC, nrectFill, prectInit); + return; + } + prgnClip = fbGetCompositeClip (pGC); + xorg = pDrawable->x; + yorg = pDrawable->y; + + if (xorg || yorg) + { + prect = prectInit; + n = nrectFill; + while(n--) + { + prect->x += xorg; + prect->y += yorg; + prect++; + } + } + + prect = prectInit; + + numRects = REGION_NUM_RECTS(prgnClip) * nrectFill; + if (numRects > NUM_STACK_RECTS) + { + pboxClippedBase = (BoxPtr)xalloc(numRects * sizeof(BoxRec)); + if (!pboxClippedBase) + return; + } + else + pboxClippedBase = stackRects; + + pboxClipped = pboxClippedBase; + + if (REGION_NUM_RECTS(prgnClip) == 1) + { + int x1, y1, x2, y2, bx2, by2; + + pextent = REGION_RECTS(prgnClip); + x1 = pextent->x1; + y1 = pextent->y1; + x2 = pextent->x2; + y2 = pextent->y2; + while (nrectFill--) + { + if ((pboxClipped->x1 = prect->x) < x1) + pboxClipped->x1 = x1; + + if ((pboxClipped->y1 = prect->y) < y1) + pboxClipped->y1 = y1; + + bx2 = (int) prect->x + (int) prect->width; + if (bx2 > x2) + bx2 = x2; + pboxClipped->x2 = bx2; + + by2 = (int) prect->y + (int) prect->height; + if (by2 > y2) + by2 = y2; + pboxClipped->y2 = by2; + + prect++; + if ((pboxClipped->x1 < pboxClipped->x2) && + (pboxClipped->y1 < pboxClipped->y2)) + { + pboxClipped++; + } + } + } + else + { + int x1, y1, x2, y2, bx2, by2; + + pextent = REGION_EXTENTS(pGC->pScreen, prgnClip); + x1 = pextent->x1; + y1 = pextent->y1; + x2 = pextent->x2; + y2 = pextent->y2; + while (nrectFill--) + { + BoxRec box; + + if ((box.x1 = prect->x) < x1) + box.x1 = x1; + + if ((box.y1 = prect->y) < y1) + box.y1 = y1; + + bx2 = (int) prect->x + (int) prect->width; + if (bx2 > x2) + bx2 = x2; + box.x2 = bx2; + + by2 = (int) prect->y + (int) prect->height; + if (by2 > y2) + by2 = y2; + box.y2 = by2; + + prect++; + + if ((box.x1 >= box.x2) || (box.y1 >= box.y2)) + continue; + + n = REGION_NUM_RECTS (prgnClip); + pbox = REGION_RECTS(prgnClip); + + /* clip the rectangle to each box in the clip region + this is logically equivalent to calling Intersect() + */ + while(n--) + { + pboxClipped->x1 = max(box.x1, pbox->x1); + pboxClipped->y1 = max(box.y1, pbox->y1); + pboxClipped->x2 = min(box.x2, pbox->x2); + pboxClipped->y2 = min(box.y2, pbox->y2); + pbox++; + + /* see if clipping left anything */ + if(pboxClipped->x1 < pboxClipped->x2 && + pboxClipped->y1 < pboxClipped->y2) + { + pboxClipped++; + } + } + } + } + if (pboxClipped != pboxClippedBase) + { + switch (pGC->fillStyle) { + case FillSolid: + igsFillBoxSolid(pDrawable, + pboxClipped-pboxClippedBase, pboxClippedBase, + pGC->fgPixel, pGC->alu, pGC->planemask); + break; + case FillTiled: + igsFillBoxTiled(pDrawable, + pboxClipped-pboxClippedBase, pboxClippedBase, + pGC->tile.pixmap, + pGC->patOrg.x + pDrawable->x, + pGC->patOrg.y + pDrawable->y, + pGC->alu); + break; + case FillStippled: + case FillOpaqueStippled: + igsFillBoxStippled (pDrawable, pGC, + pboxClipped-pboxClippedBase, pboxClippedBase); + break; + } + } + if (pboxClippedBase != stackRects) + xfree(pboxClippedBase); +} + +int +igsTextInRegion (GCPtr pGC, + int x, + int y, + unsigned int nglyph, + CharInfoPtr *ppci) +{ + int w; + FontPtr pfont = pGC->font; + BoxRec bbox; + + if (FONTCONSTMETRICS(pfont)) + w = FONTMAXBOUNDS(pfont,characterWidth) * nglyph; + else + { + w = 0; + while (nglyph--) + w += (*ppci++)->metrics.characterWidth; + } + if (w < 0) + { + bbox.x1 = x + w; + bbox.x2 = x; + } + else + { + bbox.x1 = x; + bbox.x2 = x + w; + } + w = FONTMINBOUNDS(pfont,leftSideBearing); + if (w < 0) + bbox.x1 += w; + w = FONTMAXBOUNDS(pfont, rightSideBearing) - FONTMINBOUNDS(pfont, characterWidth); + if (w > 0) + bbox.x2 += w; + bbox.y1 = y - FONTMAXBOUNDS(pfont,ascent); + bbox.y2 = y + FONTMAXBOUNDS(pfont,descent); + + return RECT_IN_REGION(pGC->pScreen, fbGetCompositeClip(pGC), &bbox); +} + +void +igsGlyphBltClipped (DrawablePtr pDrawable, + GCPtr pGC, + int x, + int y, + unsigned int nglyph, + CharInfoPtr *ppciInit, + Bool image) +{ + SetupIgs(pDrawable->pScreen); + CARD32 cmd; + int h; + int w; + int xBack, yBack; + int hBack, wBack; + int lw; + FontPtr pfont = pGC->font; + CharInfoPtr pci; + unsigned long *bits; + BoxPtr extents; + BoxRec bbox; + CARD32 b; + CharInfoPtr *ppci; + FbGCPrivPtr fbPriv = fbGetGCPrivate(pGC); + RegionPtr pClip = fbGetCompositeClip(pGC); + BoxPtr pBox; + int nbox; + int x1, y1, x2, y2; + unsigned char alu; + Bool set; + PixTransDeclare; + + if (image) + { + xBack = x; + yBack = y - FONTASCENT(pGC->font); + wBack = 0; + hBack = FONTASCENT(pGC->font) + FONTDESCENT(pGC->font); + if (hBack) + { + h = nglyph; + ppci = ppciInit; + while (h--) + wBack += (*ppci++)->metrics.characterWidth; + } + if (wBack < 0) + { + xBack = xBack + wBack; + wBack = -wBack; + } + if (hBack < 0) + { + yBack = yBack + hBack; + hBack = -hBack; + } + alu = GXcopy; + if (wBack) + { + _igsSetSolidRect (cop, GXcopy, pGC->planemask, pGC->bgPixel, cmd); + for (nbox = REGION_NUM_RECTS (pClip), + pBox = REGION_RECTS (pClip); + nbox--; + pBox++) + { + x1 = xBack; + x2 = xBack + wBack; + y1 = yBack; + y2 = yBack + hBack; + if (x1 < pBox->x1) x1 = pBox->x1; + if (x2 > pBox->x2) x2 = pBox->x2; + if (y1 < pBox->y1) y1 = pBox->y1; + if (y2 > pBox->y2) y2 = pBox->y2; + if (x1 < x2 && y1 < y2) + { + _igsRect (cop, x1, y1, x2 - x1, y2 - y1, cmd); + } + } + KdMarkSync (pDrawable->pScreen); + } + } + else + { + wBack = 0; + alu = pGC->alu; + } + + ppci = ppciInit; + set = FALSE; + while (nglyph--) + { + pci = *ppci++; + h = pci->metrics.ascent + pci->metrics.descent; + w = pci->metrics.rightSideBearing - pci->metrics.leftSideBearing; + x1 = x + pci->metrics.leftSideBearing; + y1 = y - pci->metrics.ascent; + bbox.x1 = x1; + bbox.y1 = y1; + bbox.x2 = x1 + w; + bbox.y2 = y1 + h; + switch (RECT_IN_REGION(pGC->pScreen, pClip, &bbox)) + { + case rgnIN: + lw = h * ((w + 31) >> 5); + if (lw) + { + if (!set) + { + _igsSetTransparentPlaneBlt (cop, alu, pGC->planemask, pGC->fgPixel, cmd); + set = TRUE; + } + _igsPlaneBlt(cop, + x + pci->metrics.leftSideBearing, + y - pci->metrics.ascent, + w, h, cmd); + bits = (unsigned long *) pci->bits; + PixTransStart (lw); + while (lw--) + { + b = *bits++; + IgsAdjustBits32 (b); + PixTransStore(b); + } + KdMarkSync (pDrawable->pScreen); + } + break; + case rgnPART: + set = FALSE; + KdCheckSync (pDrawable->pScreen); + fbPutXYImage (pDrawable, + pClip, + fbPriv->fg, + fbPriv->bg, + fbPriv->pm, + alu, + FALSE, + x1, y1, + w, h, + (FbStip *) pci->bits, + (w + 31) >> 5, + 0); + break; + case rgnOUT: + break; + } + x += pci->metrics.characterWidth; + } +} + +void +igsGlyphBlt (DrawablePtr pDrawable, + GCPtr pGC, + int x, + int y, + unsigned int nglyph, + CharInfoPtr *ppciInit, + Bool image) +{ + SetupIgs(pDrawable->pScreen); + CARD32 cmd; + int h; + int w; + int xBack, yBack; + int hBack, wBack; + int lw; + FontPtr pfont = pGC->font; + CharInfoPtr pci; + unsigned long *bits; + BoxPtr extents; + BoxRec bbox; + CARD32 b; + CharInfoPtr *ppci; + unsigned char alu; + PixTransDeclare; + + /* + * Paint background for image text + */ + if (image) + { + xBack = x; + yBack = y - FONTASCENT(pGC->font); + wBack = 0; + hBack = FONTASCENT(pGC->font) + FONTDESCENT(pGC->font); + if (hBack) + { + h = nglyph; + ppci = ppciInit; + while (h--) + wBack += (*ppci++)->metrics.characterWidth; + } + if (wBack < 0) + { + xBack = xBack + wBack; + wBack = -wBack; + } + if (hBack < 0) + { + yBack = yBack + hBack; + hBack = -hBack; + } + alu = GXcopy; + if (wBack) + { + _igsSetSolidRect (cop, GXcopy, pGC->planemask, pGC->bgPixel, cmd); + _igsRect (cop, xBack, yBack, wBack, hBack, cmd); + } + } + else + { + wBack = 0; + alu = pGC->alu; + } + + _igsSetTransparentPlaneBlt (cop, alu, pGC->planemask, pGC->fgPixel, cmd); + ppci = ppciInit; + while (nglyph--) + { + pci = *ppci++; + h = pci->metrics.ascent + pci->metrics.descent; + w = pci->metrics.rightSideBearing - pci->metrics.leftSideBearing; + lw = h * ((w + 31) >> 5); + if (lw) + { + _igsPlaneBlt(cop, + x + pci->metrics.leftSideBearing, + y - pci->metrics.ascent, + w, h, cmd); + bits = (unsigned long *) pci->bits; + PixTransStart(lw); + while (lw--) + { + b = *bits++; + IgsAdjustBits32 (b); + PixTransStore(b); + } + } + x += pci->metrics.characterWidth; + } + KdMarkSync (pDrawable->pScreen); +} + +void +igsTEGlyphBlt (DrawablePtr pDrawable, + GCPtr pGC, + int xInit, + int yInit, + unsigned int nglyph, + CharInfoPtr *ppci, + Bool image) +{ + SetupIgs(pDrawable->pScreen); + CARD32 cmd; + int x, y; + int h, lw, lwTmp; + int w; + FontPtr pfont = pGC->font; + unsigned long *char1, *char2, *char3, *char4; + int widthGlyphs, widthGlyph; + BoxRec bbox; + CARD32 tmp; + PixTransDeclare; + + widthGlyph = FONTMAXBOUNDS(pfont,characterWidth); + if (!widthGlyph) + return; + + h = FONTASCENT(pfont) + FONTDESCENT(pfont); + if (!h) + return; + + x = xInit + FONTMAXBOUNDS(pfont,leftSideBearing); + y = yInit - FONTASCENT(pfont); + + if (image) + { + _igsSetOpaquePlaneBlt (cop, GXcopy, pGC->planemask, pGC->fgPixel, pGC->bgPixel, cmd); + } + else + { + _igsSetTransparentPlaneBlt (cop, pGC->alu, pGC->planemask, pGC->fgPixel, cmd); + } + +#if BITMAP_BIT_ORDER == LSBFirst +#define SHIFT << +#else +#define SHIFT >> +#endif + +#define LoopIt(count, w, loadup, fetch) \ + while (nglyph >= count) \ + { \ + nglyph -= count; \ + _igsPlaneBlt (cop, x, y, w, h, cmd); \ + x += w; \ + loadup \ + lwTmp = h; \ + PixTransStart(h); \ + while (lwTmp--) { \ + tmp = fetch; \ + IgsAdjustBits32(tmp); \ + PixTransStore(tmp); \ + } \ + } + + if (widthGlyph <= 8) + { + widthGlyphs = widthGlyph << 2; + LoopIt(4, widthGlyphs, + char1 = (unsigned long *) (*ppci++)->bits; + char2 = (unsigned long *) (*ppci++)->bits; + char3 = (unsigned long *) (*ppci++)->bits; + char4 = (unsigned long *) (*ppci++)->bits;, + (*char1++ | ((*char2++ | ((*char3++ | (*char4++ + SHIFT widthGlyph)) + SHIFT widthGlyph)) + SHIFT widthGlyph))) + } + else if (widthGlyph <= 10) + { + widthGlyphs = (widthGlyph << 1) + widthGlyph; + LoopIt(3, widthGlyphs, + char1 = (unsigned long *) (*ppci++)->bits; + char2 = (unsigned long *) (*ppci++)->bits; + char3 = (unsigned long *) (*ppci++)->bits;, + (*char1++ | ((*char2++ | (*char3++ SHIFT widthGlyph)) SHIFT widthGlyph))) + } + else if (widthGlyph <= 16) + { + widthGlyphs = widthGlyph << 1; + LoopIt(2, widthGlyphs, + char1 = (unsigned long *) (*ppci++)->bits; + char2 = (unsigned long *) (*ppci++)->bits;, + (*char1++ | (*char2++ SHIFT widthGlyph))) + } + lw = h * ((widthGlyph + 31) >> 5); + while (nglyph--) + { + _igsPlaneBlt (cop, x, y, widthGlyph, h, cmd); + x += widthGlyph; + char1 = (unsigned long *) (*ppci++)->bits; + lwTmp = lw; + PixTransStart(lw); + while (lwTmp--) + { + tmp = *char1++; + IgsAdjustBits32(tmp); + PixTransStore(tmp); + } + } + KdMarkSync (pDrawable->pScreen); +} + +/* + * Blt glyphs using image transfer window + */ + +void +igsPolyGlyphBlt (DrawablePtr pDrawable, + GCPtr pGC, + int x, + int y, + unsigned int nglyph, + CharInfoPtr *ppci, + pointer pglyphBase) +{ + if (pGC->fillStyle != FillSolid || + fbGetGCPrivate(pGC)->pm != FB_ALLONES) + { + KdCheckPolyGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, pglyphBase); + return; + } + x += pDrawable->x; + y += pDrawable->y; + + switch (igsTextInRegion (pGC, x, y, nglyph, ppci)) { + case rgnIN: + if (TERMINALFONT(pGC->font)) + igsTEGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, FALSE); + else + igsGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, FALSE); + break; + case rgnPART: + igsGlyphBltClipped (pDrawable, pGC, x, y, nglyph, ppci, FALSE); + break; + case rgnOUT: + break; + } +} + +void +igsImageGlyphBlt (DrawablePtr pDrawable, + GCPtr pGC, + int x, int y, + unsigned int nglyph, + CharInfoPtr *ppci, + pointer pglyphBase) +{ + if (fbGetGCPrivate(pGC)->pm != FB_ALLONES) + { + KdCheckImageGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, pglyphBase); + return; + } + x += pDrawable->x; + y += pDrawable->y; + + switch (igsTextInRegion (pGC, x, y, nglyph, ppci)) { + case rgnIN: + if (TERMINALFONT(pGC->font)) + igsTEGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, TRUE); + else + igsGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, TRUE); + break; + case rgnPART: + igsGlyphBltClipped (pDrawable, pGC, x, y, nglyph, ppci, TRUE); + break; + case rgnOUT: + break; + } +} + +static void +igsInvalidatePattern (IgsPatternCache *c, + PixmapPtr pPixmap) +{ + int i; + + if (c->base) + { + for (i = 0; i < IGS_NUM_PATTERN; i++) + { + if (c->pattern[i].serial_number == pPixmap->drawable.serialNumber) + c->pattern[i].serial_number = ~0; + } + } +} + +static void +igsInitPattern (IgsPatternCache *c, int bsize, int psize) +{ + int i; + int boffset; + int poffset; + + for (i = 0; i < IGS_NUM_PATTERN; i++) + { + boffset = i * bsize; + poffset = i * psize; + c->pattern[i].xrot = -1; + c->pattern[i].yrot = -1; + c->pattern[i].serial_number = ~0; + c->pattern[i].offset = c->offset + poffset; + c->pattern[i].base = c->base + boffset; + } + c->next = 0; +} + +static const GCOps igsOps = { + igsFillSpans, + KdCheckSetSpans, + KdCheckPutImage, + igsCopyArea, + igsCopyPlane, + KdCheckPolyPoint, + KdCheckPolylines, + KdCheckPolySegment, + miPolyRectangle, + KdCheckPolyArc, + miFillPolygon, + igsPolyFillRect, + KdCheckPolyFillArc, + miPolyText8, + miPolyText16, + miImageText8, + miImageText16, + igsImageGlyphBlt, + igsPolyGlyphBlt, + igsPushPixels, +}; + +void +igsValidateGC (GCPtr pGC, Mask changes, DrawablePtr pDrawable) +{ + FbGCPrivPtr fbPriv = fbGetGCPrivate(pGC); + + fbValidateGC (pGC, changes, pDrawable); + + if (pDrawable->type == DRAWABLE_WINDOW) + pGC->ops = (GCOps *) &igsOps; + else + pGC->ops = (GCOps *) &fbGCOps; +} + +GCFuncs igsGCFuncs = { + igsValidateGC, + miChangeGC, + miCopyGC, + miDestroyGC, + miChangeClip, + miDestroyClip, + miCopyClip +}; + +int +igsCreateGC (GCPtr pGC) +{ + if (!fbCreateGC (pGC)) + return FALSE; + + if (pGC->depth != 1) + pGC->funcs = &igsGCFuncs; + + return TRUE; +} + +void +igsCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc) +{ + ScreenPtr pScreen = pWin->drawable.pScreen; + KdScreenPriv(pScreen); + RegionRec rgnDst; + int dx, dy; + WindowPtr pwinRoot; + + pwinRoot = WindowTable[pWin->drawable.pScreen->myNum]; + + dx = ptOldOrg.x - pWin->drawable.x; + dy = ptOldOrg.y - pWin->drawable.y; + REGION_TRANSLATE(pWin->drawable.pScreen, prgnSrc, -dx, -dy); + + REGION_INIT (pWin->drawable.pScreen, &rgnDst, NullBox, 0); + + REGION_INTERSECT(pWin->drawable.pScreen, &rgnDst, &pWin->borderClip, prgnSrc); + + fbCopyRegion ((DrawablePtr)pwinRoot, (DrawablePtr)pwinRoot, + 0, + &rgnDst, dx, dy, igsCopyNtoN, 0, 0); + + REGION_UNINIT(pWin->drawable.pScreen, &rgnDst); +} + +void +igsPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what) +{ + KdScreenPriv(pWin->drawable.pScreen); + PixmapPtr pTile; + + if (!REGION_NUM_RECTS(pRegion)) + return; + switch (what) { + case PW_BACKGROUND: + switch (pWin->backgroundState) { + case None: + return; + case ParentRelative: + do { + pWin = pWin->parent; + } while (pWin->backgroundState == ParentRelative); + (*pWin->drawable.pScreen->PaintWindowBackground)(pWin, pRegion, + what); + return; + case BackgroundPixmap: + pTile = pWin->background.pixmap; + if (igsPatternDimOk (pTile->drawable.width) && + igsPatternDimOk (pTile->drawable.height)) + { + igsFillBoxTiled ((DrawablePtr)pWin, + (int)REGION_NUM_RECTS(pRegion), + REGION_RECTS(pRegion), + pTile, + pWin->drawable.x, pWin->drawable.y, GXcopy); + return; + } + break; + case BackgroundPixel: + igsFillBoxSolid((DrawablePtr)pWin, + (int)REGION_NUM_RECTS(pRegion), + REGION_RECTS(pRegion), + pWin->background.pixel, GXcopy, ~0); + return; + } + break; + case PW_BORDER: + if (pWin->borderIsPixel) + { + igsFillBoxSolid((DrawablePtr)pWin, + (int)REGION_NUM_RECTS(pRegion), + REGION_RECTS(pRegion), + pWin->border.pixel, GXcopy, ~0); + return; + } + else + { + pTile = pWin->border.pixmap; + if (igsPatternDimOk (pTile->drawable.width) && + igsPatternDimOk (pTile->drawable.height)) + { + igsFillBoxTiled ((DrawablePtr)pWin, + (int)REGION_NUM_RECTS(pRegion), + REGION_RECTS(pRegion), + pTile, + pWin->drawable.x, pWin->drawable.y, GXcopy); + return; + } + } + break; + } + KdCheckPaintWindow (pWin, pRegion, what); +} + +Bool +igsDrawInit (ScreenPtr pScreen) +{ + KdScreenPriv(pScreen); + igsCardInfo(pScreenPriv); + igsScreenInfo(pScreenPriv); + int i; + int pattern_size; + int boffset, poffset; + + KdScreenInitAsync (pScreen); + + /* + * Replace various fb screen functions + */ + pScreen->CreateGC = igsCreateGC; + pScreen->CopyWindow = igsCopyWindow; + pScreen->PaintWindowBackground = igsPaintWindow; + pScreen->PaintWindowBorder = igsPaintWindow; + + /* + * Initialize patterns + */ + if (igss->tile.base) + { + pattern_size = IgsTileSize(pScreenPriv->screen->fb[0].bitsPerPixel); + igsInitPattern (&igss->tile, + pattern_size, + pattern_size * 8 / pScreenPriv->screen->fb[0].bitsPerPixel); + pattern_size = IgsStippleSize(pScreenPriv->screen->fb[0].bitsPerPixel); + igsInitPattern (&igss->stipple, + pattern_size, + pattern_size * 8 / pScreenPriv->screen->fb[0].bitsPerPixel); + } + return TRUE; +} + +void +igsDrawEnable (ScreenPtr pScreen) +{ + SetupIgs(pScreen); + CARD32 cmd; + CARD32 base; + CARD16 stride; + CARD32 format; + + stride = pScreenPriv->screen->fb[0].pixelStride; + _igsWaitIdleEmpty(cop); + _igsReset(cop); + switch (pScreenPriv->screen->fb[0].bitsPerPixel) { + case 8: + format = IGS_FORMAT_8BPP; + break; + case 16: + format = IGS_FORMAT_16BPP; + break; + case 24: + format = IGS_FORMAT_24BPP; + break; + case 32: + format = IGS_FORMAT_32BPP; + break; + } + cop->format = format; + cop->dst_stride = stride - 1; + cop->src1_stride = stride - 1; + cop->src2_stride = stride - 1; + cop->src1_start = 0; + cop->src2_start = 0; + cop->extension |= IGS_BLOCK_COP_REG | IGS_BURST_ENABLE; + + _igsSetSolidRect(cop, GXcopy, ~0, pScreen->blackPixel, cmd); + _igsRect (cop, 0, 0, + pScreenPriv->screen->width, pScreenPriv->screen->height, + cmd); + _igsWaitIdleEmpty (cop); +} + +void +igsDrawDisable (ScreenPtr pScreen) +{ +} + +void +igsDrawFini (ScreenPtr pScreen) +{ +} + +void +igsDrawSync (ScreenPtr pScreen) +{ + SetupIgs(pScreen); + + _igsWaitIdleEmpty(cop); +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/igs/igsstub.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/igs/igsstub.c @@ -0,0 +1,72 @@ +/* + * $RCSId: xc/programs/Xserver/hw/kdrive/igs/igsstub.c,v 1.2 2000/05/24 23:52:48 keithp Exp $ + * + * Copyright © 2000 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "igs.h" + +void +InitCard (char *name) +{ + KdCardAttr attr; + CARD32 count; + + count = 0; +#ifdef EMBED + attr.address[0] = 0x10000000; /* Adomo Wing video base address */ + attr.io = 0; + attr.naddr = 1; +#else + while (LinuxFindPci (0x10ea, 0x5000, count, &attr)) +#endif + { + KdCardInfoAdd (&igsFuncs, &attr, 0); + count++; + } +} + +void +InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv) +{ + KdInitOutput (pScreenInfo, argc, argv); +} + +void +InitInput (int argc, char **argv) +{ + KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs); +} + +void +ddxUseMsg (void) +{ + KdUseMsg (); +} + +int +ddxProcessArgument (int argc, char **argv, int i) +{ + return KdProcessArgument (argc, argv, i); +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/igs/igsreg.h +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/igs/igsreg.h @@ -0,0 +1,157 @@ +/* + * $RCSId: $ + * + * Copyright © 2000 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ + +#ifndef _IGSREG_H_ +#define _IGSREG_H_ + +#include "vga.h" + +#define IGS_SR 0 +#define IGS_NSR 5 +#define IGS_GR (IGS_SR+IGS_NSR) +#define IGS_NGR 0xC0 +#define IGS_GREX (IGS_GR+IGS_NGR) +#define IGS_GREXBASE 0x3c +#define IGS_NGREX 1 +#define IGS_AR (IGS_GREX+IGS_NGREX) +#define IGS_NAR 0x15 +#define IGS_CR (IGS_AR+IGS_NAR) +#define IGS_NCR 0x48 +#define IGS_DAC (IGS_CR+IGS_NCR) +#define IGS_NDAC 4 +#define IGS_DACEX (IGS_DAC+IGS_NDAC) +#define IGS_NDACEX 4 +#define IGS_MISC_OUT (IGS_DACEX + IGS_NDACEX) +#define IGS_INPUT_STATUS_1 (IGS_MISC_OUT+1) +#define IGS_NREG (IGS_INPUT_STATUS_1+1) + +extern VgaReg igs_h_total[]; +extern VgaReg igs_h_de_end[]; +extern VgaReg igs_h_bstart[]; +extern VgaReg igs_h_bend[]; +extern VgaReg igs_de_skew[]; +extern VgaReg igs_ena_vr_access[]; +extern VgaReg igs_h_rstart[]; +extern VgaReg igs_h_rend[]; +extern VgaReg igs_h_rdelay[]; +extern VgaReg igs_v_total[]; +extern VgaReg igs_v_rstart[]; +extern VgaReg igs_v_rend[]; +extern VgaReg igs_clear_v_int[]; +extern VgaReg igs_disable_v_int[]; +extern VgaReg igs_bandwidth[]; +extern VgaReg igs_crt_protect[]; +extern VgaReg igs_v_de_end[]; +extern VgaReg igs_offset[]; +extern VgaReg igs_v_bstart[]; +extern VgaReg igs_v_bend[]; +extern VgaReg igs_linecomp[]; +extern VgaReg igs_ivideo[]; +extern VgaReg igs_num_fetch[]; +extern VgaReg igs_wcrt0[]; +extern VgaReg igs_wcrt1[]; +extern VgaReg igs_rcrts1[]; +extern VgaReg igs_selwk[]; +extern VgaReg igs_dot_clock_8[]; +extern VgaReg igs_screen_off[]; +extern VgaReg igs_enable_write_plane[]; +extern VgaReg igs_mexhsyn[]; +extern VgaReg igs_mexvsyn[]; +extern VgaReg igs_pci_burst_write[]; +extern VgaReg igs_pci_burst_read[]; +extern VgaReg igs_iow_retry[]; +extern VgaReg igs_mw_retry[]; +extern VgaReg igs_mr_retry[]; +extern VgaReg igs_biga22en[]; +extern VgaReg igs_biga24en[]; +extern VgaReg igs_biga22force[]; +extern VgaReg igs_bigswap[]; +#define IGS_BIGSWAP_8 0x3f +#define IGS_BIGSWAP_16 0x2a +#define IGS_BIGSWAP_32 0x00 +extern VgaReg igs_sprite_x[]; +extern VgaReg igs_sprite_preset_x[]; +extern VgaReg igs_sprite_y[]; +extern VgaReg igs_sprite_preset_y[]; +extern VgaReg igs_sprite_visible[]; +extern VgaReg igs_sprite_64x64[]; +extern VgaReg igs_mgrext[]; +extern VgaReg igs_hcshf[]; +extern VgaReg igs_mbpfix[]; +extern VgaReg igs_overscan_red[]; +extern VgaReg igs_overscan_green[]; +extern VgaReg igs_overscan_blue[]; +extern VgaReg igs_memgopg[]; +extern VgaReg igs_memr2wpg[]; +extern VgaReg igs_crtff16[]; +extern VgaReg igs_fifomust[]; +extern VgaReg igs_fifogen[]; +extern VgaReg igs_mode_sel[]; +#define IGS_MODE_TEXT 0 +#define IGS_MODE_8 1 +#define IGS_MODE_565 2 +#define IGS_MODE_5551 6 +#define IGS_MODE_8888 3 +#define IGS_MODE_888 4 +#define IGS_MODE_332 9 +#define IGS_MODE_4444 10 +extern VgaReg igs_sprite_addr[]; +extern VgaReg igs_fastmpie[]; +extern VgaReg igs_vclk_m[]; +extern VgaReg igs_vclk_n[]; +extern VgaReg igs_vfsel[]; +extern VgaReg igs_vclk_p[]; +extern VgaReg igs_frqlat[]; +extern VgaReg igs_dac_mask[]; +extern VgaReg igs_dac_read_index[]; +extern VgaReg igs_dac_write_index[]; +extern VgaReg igs_dac_data[]; +extern VgaReg igs_rampwdn[]; +extern VgaReg igs_dac6_8[]; +extern VgaReg igs_ramdacbypass[]; +extern VgaReg igs_dacpwdn[]; +extern VgaReg igs_cursor_read_index[]; +extern VgaReg igs_cursor_write_index[]; +extern VgaReg igs_cursor_data[]; + +#define igsGet(sv,r) VgaGet(&(sv)->card, (r)) +#define igsGetImm(sv,r) VgaGetImm(&(sv)->card, (r)) +#define igsSet(sv,r,v) VgaSet(&(sv)->card, (r), (v)) +#define igsSetImm(sv,r,v) VgaSetImm(&(sv)->card, (r), (v)) + +typedef struct _igsVga { + VgaCard card; + VgaValue values[IGS_NREG]; +} IgsVga; + +void +igsRegInit (IgsVga *igsvga, VGAVOL8 *mmio); + +void +igsSave (IgsVga *igsvga); + +void +igsReset (IgsVga *igsvga); + +#endif /* _IGSREG_H_ */ --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/igs/igs.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/igs/igs.c @@ -0,0 +1,669 @@ +/* + * $RCSId: xc/programs/Xserver/hw/kdrive/igs/igs.c,v 1.2 2000/05/24 23:52:47 keithp Exp $ + * + * Copyright © 1999 SuSE, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of SuSE not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. SuSE makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + * + * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE + * BE LIABLE FOR 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. + * + * Author: Keith Packard, SuSE, Inc. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "igs.h" + +Bool +igsCardInit (KdCardInfo *card) +{ + int k; + char *pixels; + IgsCardInfo *igsc; + + igsc = (IgsCardInfo *) xalloc (sizeof (IgsCardInfo)); + if (!igsc) + return FALSE; + + memset (igsc, '\0', sizeof (IgsCardInfo)); + + igsc->frameBuffer = (CARD8 *) KdMapDevice (card->attr.address[0] + + IGS_FB, + IGS_MEM); + + igsc->vga = (VOL8 *) KdMapDevice (card->attr.address[0] + + IGS_VGA, + 64 * 1024); + + igsc->cop = (Cop5xxx *) KdMapDevice (card->attr.address[0] + + IGS_COP_OFFSET, + sizeof (Cop5xxx)); + + igsc->copData = (VOL32 *) KdMapDevice (card->attr.address[0] + + IGS_COP_DATA, + IGS_COP_DATA_LEN); + + igsRegInit (&igsc->igsvga, igsc->vga); + + card->driver = igsc; + + return TRUE; +} + +Bool +igsModeSupported (KdScreenInfo *screen, + const KdMonitorTiming *t) +{ + /* make sure the clock isn't too fast */ + if (t->clock > IGS_MAX_CLOCK) + return FALSE; + /* width must be a multiple of 16 */ + if (t->horizontal & 0xf) + return FALSE; + return TRUE; +} + +Bool +igsModeUsable (KdScreenInfo *screen) +{ + KdCardInfo *card = screen->card; + int screen_size; + int pixel_width; + int byte_width; + int fb = 0; + + screen_size = 0; + if (screen->fb[fb].depth >= 24) + { + screen->fb[fb].depth = 24; + if (screen->fb[fb].bitsPerPixel != 24) + screen->fb[fb].bitsPerPixel = 32; + } + else if (screen->fb[fb].depth >= 16) + { + screen->fb[fb].depth = 16; + screen->fb[fb].bitsPerPixel = 16; + } + else if (screen->fb[fb].depth >= 15) + { + screen->fb[fb].depth = 15; + screen->fb[fb].bitsPerPixel = 16; + } + else if (screen->fb[fb].depth >= 12) + { + screen->fb[fb].depth = 12; + screen->fb[fb].bitsPerPixel = 16; + } + else + { + screen->fb[fb].depth = 8; + screen->fb[fb].bitsPerPixel = 8; + } + + byte_width = screen->width * (screen->fb[fb].bitsPerPixel >> 3); + pixel_width = screen->width; + screen->fb[fb].pixelStride = pixel_width; + screen->fb[fb].byteStride = byte_width; + screen_size += byte_width * screen->height; + + return TRUE; +} + +Bool +igsScreenInit (KdScreenInfo *screen) +{ + IgsCardInfo *igsc = screen->card->driver; + int fb = 0; + IgsScreenInfo *igss; + int screen_size, memory; + int pattern_size; + int tile_size; + int stipple_size; + int poffset, boffset; + const KdMonitorTiming *t; + + if (!screen->width || !screen->height) + { + screen->width = 800; + screen->height = 600; + screen->rate = 72; + } + if (!screen->fb[0].depth) + screen->fb[0].depth = 8; + + t = KdFindMode (screen, igsModeSupported); + + screen->rate = t->rate; + screen->width = t->horizontal; + screen->height = t->vertical; + + if (!KdTuneMode (screen, igsModeUsable, igsModeSupported)) + { + return FALSE; + } + + igss = (IgsScreenInfo *) xalloc (sizeof (IgsScreenInfo)); + if (!igss) + return FALSE; + + memset (igss, '\0', sizeof (IgsScreenInfo)); + + screen_size = screen->fb[fb].byteStride * screen->height; + memory = IGS_MEM; + memory -= screen_size; + if (memory >= 1024) + { + igss->cursor_offset = memory - 1024; +#if BITMAP_BIT_ORDER == MSBFirst + igss->cursor_base = (CARD8 *) KdMapDevice (card->attr.address[0] + + igss->cursor_offset, + 1024); +#else + igss->cursor_base = igsc->frameBuffer + igss->cursor_offset; +#endif + memory -= 1024; + } + else + igss->cursor_base = 0; + + tile_size = IgsTileSize(screen->fb[fb].bitsPerPixel) * IGS_NUM_PATTERN; + stipple_size = IgsStippleSize(screen->fb[fb].bitsPerPixel) * IGS_NUM_PATTERN; + pattern_size = tile_size + stipple_size; + if (memory >= pattern_size) + { + boffset = screen_size; + poffset = boffset * 8 / screen->fb[fb].bitsPerPixel; + igss->tile.offset = poffset; + igss->tile.base = igsc->frameBuffer + boffset; + + boffset = screen_size + tile_size; + poffset = boffset * 8 / screen->fb[fb].bitsPerPixel; + igss->stipple.offset = poffset; + igss->stipple.base = igsc->frameBuffer + boffset; + + memory -= pattern_size; + } + else + { + igss->tile.base = 0; + igss->stipple.base = 0; + } + + switch (screen->fb[fb].depth) { + case 8: + screen->fb[fb].visuals = ((1 << StaticGray) | + (1 << GrayScale) | + (1 << StaticColor) | + (1 << PseudoColor) | + (1 << TrueColor) | + (1 << DirectColor)); + screen->fb[fb].blueMask = 0x00; + screen->fb[fb].greenMask = 0x00; + screen->fb[fb].redMask = 0x00; + break; + case 15: + screen->fb[fb].visuals = (1 << TrueColor); + screen->fb[fb].blueMask = 0x001f; + screen->fb[fb].greenMask = 0x03e0; + screen->fb[fb].redMask = 0x7c00; + break; + case 16: + screen->fb[fb].visuals = (1 << TrueColor); + screen->fb[fb].blueMask = 0x001f; + screen->fb[fb].greenMask = 0x07e0; + screen->fb[fb].redMask = 0xf800; + break; + case 24: + screen->fb[fb].visuals = (1 << TrueColor); + screen->fb[fb].blueMask = 0x0000ff; + screen->fb[fb].greenMask = 0x00ff00; + screen->fb[fb].redMask = 0xff0000; + break; + } + + screen->fb[fb].pixelStride = screen->width; + screen->fb[fb].byteStride = screen->width * (screen->fb[fb].bitsPerPixel >> 3); + screen->fb[fb].frameBuffer = igsc->frameBuffer; + if (!igsc->cop) + screen->dumb = TRUE; + screen->driver = igss; + return TRUE; +} + +Bool +igsInitScreen(ScreenPtr pScreen) +{ + return TRUE; +} + +void +igsPreserve (KdCardInfo *card) +{ + IgsCardInfo *igsc = card->driver; + IgsVga *igsvga = &igsc->igsvga; + + igsSave (igsvga); +} + +void +igsSetBlank (IgsVga *igsvga, Bool blank) +{ + igsSetImm(igsvga, igs_screen_off, blank ? 1 : 0); +} + +void +igsSetSync (IgsCardInfo *igsc, int hsync, int vsync) +{ + IgsVga *igsvga = &igsc->igsvga; + + igsSet (igsvga, igs_mexhsyn, hsync); + igsSet (igsvga, igs_mexvsyn, vsync); + VgaFlush (&igsvga->card); +} + + +/* + * Clock synthesis: + * + * scale = p ? (2 * p) : 1 + * f_out = f_ref * ((M + 1) / ((N + 1) * scale)) + * + * Constraints: + * + * 1. 115MHz <= f_ref * ((M + 1) / (N + 1)) <= 260 MHz + * 2. N >= 1 + * + * Vertical refresh rate = clock / ((hsize + hblank) * (vsize + vblank)) + * Horizontal refresh rate = clock / (hsize + hblank) + */ + +/* all in kHz */ + +void +igsGetClock (int target, int *Mp, int *Np, int *Pp, int maxM, int maxN, int maxP, int minVco) +{ + int M, N, P, bestM, bestN; + int f_vco, f_out; + int err, abserr, besterr; + + /* + * Compute correct P value to keep VCO in range + */ + for (P = 0; P <= maxP; P++) + { + f_vco = target * IGS_SCALE(P); + if (f_vco >= minVco) + break; + } + + /* M = f_out / f_ref * ((N + 1) * IGS_SCALE(P)); */ + besterr = target; + for (N = 1; N <= maxN; N++) + { + M = ((target * (N + 1) * IGS_SCALE(P) + (IGS_CLOCK_REF/2)) + IGS_CLOCK_REF/2) / IGS_CLOCK_REF - 1; + if (0 <= M && M <= maxM) + { + f_out = IGS_CLOCK(M,N,P); + err = target - f_out; + if (err < 0) + err = -err; + if (err < besterr) + { + besterr = err; + bestM = M; + bestN = N; + } + } + } + *Mp = bestM; + *Np = bestN; + *Pp = P; +} + +Bool +igsEnable (ScreenPtr pScreen) +{ + KdScreenPriv(pScreen); + KdCardInfo *card = pScreenPriv->card; + KdScreenInfo *screen = pScreenPriv->screen; + IgsCardInfo *igsc = card->driver; + IgsVga *igsvga = &igsc->igsvga; + const KdMonitorTiming *t; + int hactive, hblank, hfp, hbp; + int vactive, vblank, vfp, vbp; + int hsize; + int fb = 0; + int m, n, r; + int h_total; + int h_display_end; + int h_blank_start; + int h_blank_end; + int h_sync_start; + int h_sync_end; + int h_screen_off; + int v_total; + int v_retrace_start; + int v_retrace_end; + int v_display_end; + int v_blank_start; + int v_blank_end; + int offset; + int num_fetch; + int m_m, m_n, m_r; + + + igsSetBlank (igsvga, TRUE); + + t = KdFindMode (screen, igsModeSupported); + + igsGetClock (t->clock, &m, &n, &r, 2047, 255, 7, IGS_MIN_VCO); + + /* + * Set the chip so that 0x400000 is a big-endian frame buffer + * with the correct byte swapping enabled + */ + igsSet (igsvga, igs_biga22force, 0); + igsSet (igsvga, igs_biga22en, 1); + igsSet (igsvga, igs_biga24en, 1); + /* + * Enable 8-bit DACs + */ + igsSet (igsvga, igs_rampwdn, 0); + igsSet (igsvga, igs_dac6_8, 1); + igsSet (igsvga, igs_dacpwdn, 0); + /* + * Set overscan to black + */ + igsSet (igsvga, igs_overscan_red, 0x00); + igsSet (igsvga, igs_overscan_green, 0x00); + igsSet (igsvga, igs_overscan_blue, 0x00); + /* + * Enable PCI retries + */ + igsSet (igsvga, igs_iow_retry, 1); + igsSet (igsvga, igs_mw_retry, 1); + igsSet (igsvga, igs_mr_retry, 1); + igsSet (igsvga, igs_pci_burst_write, 1); + igsSet (igsvga, igs_pci_burst_read, 1); + /* + * Set FIFO + */ + igsSet (igsvga, igs_memgopg, 1); + igsSet (igsvga, igs_memr2wpg, 0); + igsSet (igsvga, igs_crtff16, 0); + igsSet (igsvga, igs_fifomust, 0xff); + igsSet (igsvga, igs_fifogen, 0xff); + /* + * Enable CRT reg access + */ + igsSetImm (igsvga, igs_ena_vr_access, 1); + igsSetImm (igsvga, igs_crt_protect, 0); + + hfp = t->hfp; + hbp = t->hbp; + hblank = t->hblank; + hactive = t->horizontal; + offset = screen->fb[0].byteStride; + + vfp = t->vfp; + vbp = t->vbp; + vblank = t->vblank; + vactive = t->vertical; + + /* + * Compute character lengths for horizontal timing values + */ + hactive = screen->width / 8; + hblank /= 8; + hfp /= 8; + hbp /= 8; + offset /= 8; + + switch (screen->fb[fb].bitsPerPixel) { + case 8: + igsSet (igsvga, igs_overscan_red, pScreen->blackPixel); + igsSet (igsvga, igs_overscan_green, pScreen->blackPixel); + igsSet (igsvga, igs_overscan_blue, pScreen->blackPixel); + igsSet (igsvga, igs_bigswap, IGS_BIGSWAP_8); + igsSet (igsvga, igs_mode_sel, IGS_MODE_8); + igsSet (igsvga, igs_ramdacbypass, 0); + break; + case 16: + igsSet (igsvga, igs_bigswap, IGS_BIGSWAP_16); + igsSet (igsvga, igs_ramdacbypass, 1); + switch (screen->fb[fb].depth) { + case 12: + igsSet (igsvga, igs_mode_sel, IGS_MODE_4444); + break; + case 15: + igsSet (igsvga, igs_mode_sel, IGS_MODE_5551); + break; + case 16: + igsSet (igsvga, igs_mode_sel, IGS_MODE_565); + break; + } + break; + case 24: + igsSet (igsvga, igs_ramdacbypass, 1); + igsSet (igsvga, igs_bigswap, IGS_BIGSWAP_8); + igsSet (igsvga, igs_mode_sel, IGS_MODE_888); + break; + case 32: + igsSet (igsvga, igs_ramdacbypass, 1); + igsSet (igsvga, igs_bigswap, IGS_BIGSWAP_32); + igsSet (igsvga, igs_mode_sel, IGS_MODE_8888); + break; + } + + /* + * Compute horizontal register values from timings + */ + h_total = hactive + hblank - 5; + h_display_end = hactive - 1; + + h_sync_start = hactive + hfp; + h_sync_end = hactive + hblank - hbp; + /* + * pad the blank values narrow a bit and use the border_select to + * eliminate the remaining border; don't know why, but it doesn't + * work in the documented fashion + */ + h_blank_start = hactive - 1; + h_blank_end = hactive + hblank - 1 - 1; + + num_fetch = (t->horizontal * screen->fb[fb].bitsPerPixel / 64) + 1; + + v_total = vactive + vblank - 2; + v_display_end = vactive - 1; + + v_blank_start = vactive - 1; + v_blank_end = v_blank_start + vblank - 1; + + v_retrace_start = vactive + vfp; + v_retrace_end = vactive + vblank - vbp; + +#if 0 +#define chk(a,b,c) fprintf (stderr, "%20.20s: BIOS %6d X %6d\n", a, igsGet(igsvga, b), c); + + chk("h_total", igs_h_total, h_total); + chk("h_display_end", igs_h_de_end, h_display_end); + chk("h_sync_start", igs_h_rstart, h_sync_start); + chk("h_sync_end", igs_h_rend, h_sync_end&0x1f); + chk("h_blank_start", igs_h_bstart, h_blank_start); + chk("h_blank_end", igs_h_bend, h_blank_end&0x3f); + chk("offset", igs_offset, offset); + chk("num_fetch", igs_num_fetch, num_fetch); + + chk("v_total", igs_v_total, v_total); + chk("v_display_end", igs_v_de_end, v_display_end); + chk("v_blank_start", igs_v_bstart, v_blank_start); + chk("v_blank_end", igs_v_bend, v_blank_end&0xf); + chk("v_retrace_start", igs_v_rstart, v_retrace_start); + chk("v_retrace_end", igs_v_rend, v_retrace_end&0xf); + chk("vclk_m", igs_vclk_m, m); + chk("vclk_n", igs_vclk_n, n); + chk("vclk_p", igs_vclk_p, r); + + fprintf (stderr, "%20.20s: BIOS %6d X %6d\n", "vclk", + IGS_CLOCK(igsGet(igsvga,igs_vclk_m), + igsGet(igsvga,igs_vclk_n), + igsGet(igsvga,igs_vclk_p)), + IGS_CLOCK(m,n,r)); +#endif + igsSet (igsvga, igs_h_total, h_total); + igsSet (igsvga, igs_h_de_end, h_display_end); + igsSet (igsvga, igs_h_rstart, h_sync_start); + igsSet (igsvga, igs_h_rend, h_sync_end); + igsSet (igsvga, igs_h_bstart, h_blank_start); + igsSet (igsvga, igs_h_bend, h_blank_end); + igsSet (igsvga, igs_offset, offset); + igsSet (igsvga, igs_num_fetch, num_fetch); + + igsSet (igsvga, igs_v_total, v_total); + igsSet (igsvga, igs_v_de_end, v_display_end); + igsSet (igsvga, igs_v_bstart, v_blank_start); + igsSet (igsvga, igs_v_bend, v_blank_end&0xf); + igsSet (igsvga, igs_v_rstart, v_retrace_start); + igsSet (igsvga, igs_v_rend, v_retrace_end&0xf); + + igsSet (igsvga, igs_vclk_m, m); + igsSet (igsvga, igs_vclk_n, n); + igsSet (igsvga, igs_vclk_p, r); + igsSet (igsvga, igs_vfsel, IGS_CLOCK(m, n, 0) >= 180000); + VgaFlush (&igsvga->card); + + igsSetImm (igsvga, igs_frqlat, 0); + igsSetImm (igsvga, igs_frqlat, 1); + igsSetImm (igsvga, igs_frqlat, 0); + + igsSetBlank (igsvga, FALSE); +#if 0 +#define dbg(a,b) fprintf(stderr, "%20.20s = 0x%x\n", a, igsGet(igsvga,b)) + +#include "reg.dbg" + + { + VGA16 reg; + char buf[128]; + + for (reg = 0; reg < IGS_NREG; reg++) + fprintf(stderr, "%20.20s = 0x%02x\n", igsRegName(buf, reg), + VgaFetch (&igsvga->card, reg)); + } +#endif + return TRUE; +} + +Bool +igsDPMS (ScreenPtr pScreen, int mode) +{ + KdScreenPriv(pScreen); + IgsCardInfo *igsc = pScreenPriv->card->driver; + IgsVga *igsvga = &igsc->igsvga; + + switch (mode) { + case KD_DPMS_NORMAL: + igsSetSync (igsc, 0, 0); + igsSetBlank (igsvga, FALSE); + break; + case KD_DPMS_STANDBY: + igsSetBlank (igsvga, TRUE); + igsSetSync (igsc, 1, 0); + break; + case KD_DPMS_SUSPEND: + igsSetBlank (igsvga, TRUE); + igsSetSync (igsc, 0, 1); + break; + case KD_DPMS_POWERDOWN: + igsSetBlank (igsvga, TRUE); + igsSetSync (igsc, 1, 1); + break; + } + return TRUE; +} + +void +igsDisable (ScreenPtr pScreen) +{ +} + +void +igsRestore (KdCardInfo *card) +{ + IgsCardInfo *igsc = card->driver; + IgsVga *igsvga = &igsc->igsvga; + + igsReset (igsvga); +} + +void +igsScreenFini (KdScreenInfo *screen) +{ + IgsScreenInfo *igss = (IgsScreenInfo *) screen->driver; + +#if BITMAP_BIT_ORDER == MSBFirst + if (igss->cursor_base) + KdUnmapDevice ((void *) igss->cursor_base, 1024); +#endif + xfree (igss); + screen->driver = 0; +} + +void +igsCardFini (KdCardInfo *card) +{ + IgsCardInfo *igsc = card->driver; + + if (igsc->copData) + KdUnmapDevice ((void *) igsc->copData, IGS_COP_DATA_LEN); + if (igsc->cop) + KdUnmapDevice ((void *) igsc->cop, sizeof (Cop5xxx)); + if (igsc->vga) + KdUnmapDevice ((void *) igsc->vga, 64 * 1024); + if (igsc->frameBuffer) + KdUnmapDevice (igsc->frameBuffer, IGS_MEM); + xfree (igsc); + card->driver = 0; +} + +KdCardFuncs igsFuncs = { + igsCardInit, /* cardinit */ + igsScreenInit, /* scrinit */ + igsInitScreen, + igsPreserve, /* preserve */ + igsEnable, /* enable */ + igsDPMS, /* dpms */ + igsDisable, /* disable */ + igsRestore, /* restore */ + igsScreenFini, /* scrfini */ + igsCardFini, /* cardfini */ + + igsCursorInit, /* initCursor */ + igsCursorEnable, /* enableCursor */ + igsCursorDisable, /* disableCursor */ + igsCursorFini, /* finiCursor */ + 0, /* recolorCursor */ + + igsDrawInit, /* initAccel */ + igsDrawEnable, /* enableAccel */ + igsDrawSync, /* drawSync */ + igsDrawDisable, /* disableAccel */ + igsDrawFini, /* finiAccel */ + + igsGetColors, /* getColors */ + igsPutColors, /* putColors */ +}; --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/smi/smivideo.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/smi/smivideo.c @@ -0,0 +1,1015 @@ +/* + * Copyright © 2001 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ +#ifdef HAVE_CONFIG_H +#include +#endif +#include "mach64.h" + +#include "Xv.h" +#include "../../xfree86/common/fourcc.h" + +#define MAKE_ATOM(a) MakeAtom(a, sizeof(a) - 1, TRUE) + +static Atom xvBrightness, xvSaturation, xvColorKey; + +#define IMAGE_MAX_WIDTH 720 +#define IMAGE_MAX_HEIGHT 576 + +static void +mach64StopVideo(KdScreenInfo *screen, pointer data, Bool exit) +{ + ScreenPtr pScreen = screen->pScreen; + KdScreenPriv(pScreen); + KdCardInfo *card = pScreenPriv->card; + Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver; + Mach64CardInfo *mach64c = (Mach64CardInfo *) card->driver; + Mach64PortPrivPtr pPortPriv = mach64s->pAdaptor->pPortPrivates[0].ptr; + Reg *reg = mach64c->reg; + MediaReg *media = mach64c->media_reg; + + REGION_EMPTY(screen->pScreen, &pPortPriv->clip); + + if (!media) + return; + + if(pPortPriv->videoOn) + { + mach64WaitIdle (reg); + /* wait for buffer to be displayed */ + while (((media->TRIG_CNTL >> 5) & 1) != pPortPriv->currentBuf) + ; + /* wait for buffer to be finished */ + while (((media->TRIG_CNTL >> 6) & 1) != 0) + ; + mach64WaitAvail (reg, 1); + media->OVERLAY_SCALE_CNTL = 0; + pPortPriv->videoOn = FALSE; + mach64WaitIdle (reg); + } +} + +static int +mach64SetPortAttribute(KdScreenInfo *screen, + Atom attribute, + int value, + pointer data) +{ + ScreenPtr pScreen = screen->pScreen; + KdScreenPriv(pScreen); + KdCardInfo *card = pScreenPriv->card; + Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver; + Mach64CardInfo *mach64c = (Mach64CardInfo *) card->driver; + Mach64PortPrivPtr pPortPriv = mach64s->pAdaptor->pPortPrivates[0].ptr; + MediaReg *media = mach64c->media_reg; + + if(attribute == xvBrightness) + { + if(value < -1000) + value = -1000; + if (value > 1000) + value = 1000; + pPortPriv->brightness = value; + } + else if(attribute == xvSaturation) + { + if (value < -1000) + value = -1000; + if (value > 1000) + value = 1000; + pPortPriv->saturation = value; + } + else if(attribute == xvColorKey) + { + if (pPortPriv->colorKey != value) + { + pPortPriv->colorKey = value; + REGION_EMPTY(screen->pScreen, &pPortPriv->clip); + } + } + else + return BadMatch; + + return Success; +} + +static int +mach64GetPortAttribute(KdScreenInfo *screen, + Atom attribute, + int *value, + pointer data) +{ + Mach64PortPrivPtr pPortPriv = (Mach64PortPrivPtr)data; + + if(attribute == xvBrightness) + *value = pPortPriv->brightness; + else if(attribute == xvSaturation) + *value = pPortPriv->saturation; + else if(attribute == xvColorKey) + *value = pPortPriv->colorKey; + else + return BadMatch; + + return Success; +} + +static void +mach64QueryBestSize(KdScreenInfo *screen, + Bool motion, + short vid_w, + short vid_h, + short drw_w, + short drw_h, + unsigned int *p_w, + unsigned int *p_h, + pointer data) +{ + *p_w = drw_w; + *p_h = drw_h; +} + + +static void +mach64CopyPackedData(KdScreenInfo *screen, + unsigned char *buf, + int randr, + int srcPitch, + int dstPitch, + int srcW, + int srcH, + int top, + int left, + int h, + int w) +{ + ScreenPtr pScreen = screen->pScreen; + KdScreenPriv(pScreen); + KdCardInfo *card = pScreenPriv->card; + Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver; + Mach64CardInfo *mach64c = (Mach64CardInfo *) card->driver; + Mach64PortPrivPtr pPortPriv = mach64s->pAdaptor->pPortPrivates[0].ptr; + CARD8 *src, *dst; + int srcDown, srcRight, srcNext; + int p; + + switch (randr & RR_Rotate_All) { + case RR_Rotate_0: + src = buf; + srcDown = srcPitch; + srcRight = 2; + break; + case RR_Rotate_90: + src = buf + (srcH - 1) * 2; + srcDown = -2; + srcRight = srcPitch; + break; + case RR_Rotate_180: + src = buf + srcPitch * (srcH - 1) + (srcW - 1) * 2; + srcDown = -srcPitch; + srcRight = -2; + break; + case RR_Rotate_270: + src = buf + srcPitch * (srcW - 1); + srcDown = 2; + srcRight = -srcPitch; + break; + } + + src = src + top*srcDown + left*srcRight; + + if (pPortPriv->currentBuf == 0) + dst = (CARD8 *) mach64s->vesa.fb + pPortPriv->YBuf0Offset; + else + dst = (CARD8 *) mach64s->vesa.fb + pPortPriv->YBuf1Offset; + + w >>= 1; + srcRight >>= 1; + srcNext = srcRight >> 1; + while(h--) + { + CARD16 *s = (CARD16 *) src; + CARD32 *d = (CARD32 *) dst; + p = w; + while (p--) + { + *d++ = s[0] | (s[srcNext] << 16); + s += srcRight; + } + src += srcPitch; + dst += dstPitch; + } +} + +static void +mach64CopyPlanarData(KdScreenInfo *screen, + unsigned char *buf, + int randr, + int srcPitch, + int srcPitch2, + int dstPitch, /* of chroma */ + int srcW, + int srcH, + int height, + int top, + int left, + int h, + int w, + int id) +{ + ScreenPtr pScreen = screen->pScreen; + KdScreenPriv(pScreen); + KdCardInfo *card = pScreenPriv->card; + Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver; + Mach64CardInfo *mach64c = (Mach64CardInfo *) card->driver; + Mach64PortPrivPtr pPortPriv = mach64s->pAdaptor->pPortPrivates[0].ptr; + int i, j; + CARD8 *src1, *src2, *src3, *dst1; + int srcDown, srcDown2, srcRight, srcRight2, srcNext; + + /* compute source data pointers */ + src1 = buf; + src2 = src1 + height * srcPitch; + src3 = src2 + (height >> 1) * srcPitch2; + switch (randr & RR_Rotate_All) { + case RR_Rotate_0: + srcDown = srcPitch; + srcDown2 = srcPitch2; + srcRight = 2; + srcRight2 = 1; + srcNext = 1; + break; + case RR_Rotate_90: + src1 = src1 + srcH - 1; + src2 = src2 + (srcH >> 1) - 1; + src3 = src3 + (srcH >> 1) - 1; + srcDown = -1; + srcDown2 = -1; + srcRight = srcPitch * 2; + srcRight2 = srcPitch2; + srcNext = srcPitch; + break; + case RR_Rotate_180: + src1 = src1 + srcPitch * (srcH - 1) + (srcW - 1); + src2 = src2 + srcPitch2 * ((srcH >> 1) - 1) + ((srcW >> 1) - 1); + src3 = src3 + srcPitch2 * ((srcH >> 1) - 1) + ((srcW >> 1) - 1); + srcDown = -srcPitch; + srcDown2 = -srcPitch2; + srcRight = -2; + srcRight2 = -1; + srcNext = -1; + break; + case RR_Rotate_270: + src1 = src1 + srcPitch * (srcW - 1); + src2 = src2 + srcPitch2 * ((srcW >> 1) - 1); + src3 = src3 + srcPitch2 * ((srcW >> 1) - 1); + srcDown = 1; + srcDown2 = 1; + srcRight = -srcPitch * 2; + srcRight2 = -srcPitch2; + srcNext = -srcPitch; + break; + } + + /* adjust for origin */ + src1 += top * srcDown + left * srcNext; + src2 += (top >> 1) * srcDown2 + (left >> 1) * srcRight2; + src3 += (top >> 1) * srcDown2 + (left >> 1) * srcRight2; + + if (id == FOURCC_I420) + { + CARD8 *srct = src2; + src2 = src3; + src3 = srct; + } + + if (pPortPriv->currentBuf == 0) + dst1 = (CARD8 *) mach64s->vesa.fb + pPortPriv->YBuf0Offset; + else + dst1 = (CARD8 *) mach64s->vesa.fb + pPortPriv->YBuf1Offset; + + w >>= 1; + for (j = 0; j < h; j++) + { + CARD32 *dst = (CARD32 *) dst1; + CARD8 *s1l = src1; + CARD8 *s1r = src1 + srcNext; + CARD8 *s2 = src2; + CARD8 *s3 = src3; + + for (i = 0; i < w; i++) + { + *dst++ = *s1l | (*s1r << 16) | (*s3 << 8) | (*s2 << 24); + s1l += srcRight; + s1r += srcRight; + s2 += srcRight2; + s3 += srcRight2; + } + src1 += srcDown; + dst1 += dstPitch; + if (j & 1) + { + src2 += srcDown2; + src3 += srcDown2; + } + } +} + +static void +mach64PaintRegion (ScreenPtr pScreen, RegionPtr pRgn, Pixel fg) +{ + WindowPtr pRoot = WindowTable[pScreen->myNum]; + GCPtr pGC; + CARD32 val[2]; + xRectangle *rects, *r; + BoxPtr pBox = REGION_RECTS (pRgn); + int nBox = REGION_NUM_RECTS (pRgn); + + rects = ALLOCATE_LOCAL (nBox * sizeof (xRectangle)); + if (!rects) + goto bail0; + r = rects; + while (nBox--) + { + r->x = pBox->x1; + r->y = pBox->y1; + r->width = pBox->x2 - pBox->x1; + r->height = pBox->y2 - pBox->y1; + r++; + pBox++; + } + + pGC = GetScratchGC (pRoot->drawable.depth, pScreen); + if (!pGC) + goto bail1; + + val[0] = fg; + val[1] = IncludeInferiors; + ChangeGC (pGC, GCForeground|GCSubwindowMode, val); + + ValidateGC (&pRoot->drawable, pGC); + + (*pGC->ops->PolyFillRect) (&pRoot->drawable, pGC, + REGION_NUM_RECTS (pRgn), rects); + + FreeScratchGC (pGC); +bail1: + DEALLOCATE_LOCAL (rects); +bail0: + ; +} + +/* Mach64ClipVideo - + + Takes the dst box in standard X BoxRec form (top and left + edges inclusive, bottom and right exclusive). The new dst + box is returned. The source boundaries are given (x1, y1 + inclusive, x2, y2 exclusive) and returned are the new source + boundaries in 16.16 fixed point. +*/ + +static void +Mach64ClipVideo(BoxPtr dst, + INT32 *x1, + INT32 *x2, + INT32 *y1, + INT32 *y2, + BoxPtr extents, /* extents of the clip region */ + INT32 width, + INT32 height) +{ + INT32 vscale, hscale, delta; + int diff; + + hscale = ((*x2 - *x1) << 16) / (dst->x2 - dst->x1); + vscale = ((*y2 - *y1) << 16) / (dst->y2 - dst->y1); + + *x1 <<= 16; *x2 <<= 16; + *y1 <<= 16; *y2 <<= 16; + + diff = extents->x1 - dst->x1; + if(diff > 0) { + dst->x1 = extents->x1; + *x1 += diff * hscale; + } + diff = dst->x2 - extents->x2; + if(diff > 0) { + dst->x2 = extents->x2; + *x2 -= diff * hscale; + } + diff = extents->y1 - dst->y1; + if(diff > 0) { + dst->y1 = extents->y1; + *y1 += diff * vscale; + } + diff = dst->y2 - extents->y2; + if(diff > 0) { + dst->y2 = extents->y2; + *y2 -= diff * vscale; + } + + if(*x1 < 0) { + diff = (- *x1 + hscale - 1)/ hscale; + dst->x1 += diff; + *x1 += diff * hscale; + } + delta = *x2 - (width << 16); + if(delta > 0) { + diff = (delta + hscale - 1)/ hscale; + dst->x2 -= diff; + *x2 -= diff * hscale; + } + if(*y1 < 0) { + diff = (- *y1 + vscale - 1)/ vscale; + dst->y1 += diff; + *y1 += diff * vscale; + } + delta = *y2 - (height << 16); + if(delta > 0) { + diff = (delta + vscale - 1)/ vscale; + dst->y2 -= diff; + *y2 -= diff * vscale; + } +} + +static void +mach64DisplayVideo(KdScreenInfo *screen, + int id, + int dstPitch, /* of chroma for 4:2:0 */ + int x1, + int y1, + int x2, + int y2, + int dst_x1, + int dst_y1, + int dst_x2, + int dst_y2, + short src_w, + short src_h, + short drw_w, + short drw_h) +{ + ScreenPtr pScreen = screen->pScreen; + KdScreenPriv(pScreen); + KdCardInfo *card = pScreenPriv->card; + Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver; + Mach64CardInfo *mach64c = (Mach64CardInfo *) card->driver; + Mach64PortPrivPtr pPortPriv = mach64s->pAdaptor->pPortPrivates[0].ptr; + Reg *reg = mach64c->reg; + MediaReg *media = mach64c->media_reg; + int xscaleInt, xscaleFract, yscaleInt, yscaleFract; + int xscaleIntUV = 0, xscaleFractUV = 0; + int yscaleIntUV = 0, yscaleFractUV = 0; + int randr = mach64s->vesa.randr; + int HORZ_INC, VERT_INC; + CARD32 SCALER_IN; + CARD32 OVERLAY_SCALE_CNTL; + int tmp; + int left; + int bright; + int sat; + + if (id == FOURCC_UYVY) + SCALER_IN = SCALER_IN_YVYU422; + else + SCALER_IN = SCALER_IN_VYUY422; + + mach64WaitAvail (reg, 4); + + media->VIDEO_FORMAT = SCALER_IN | VIDEO_IN_VYUY422; + + /* color key */ + media->OVERLAY_GRAPHICS_KEY_MSK = (1 << screen->fb[0].depth) - 1; + media->OVERLAY_GRAPHICS_KEY_CLR = pPortPriv->colorKey; + /* set key control to obey only graphics color key */ + media->OVERLAY_KEY_CNTL = 0x50; + + mach64WaitAvail (reg, 9); + media->CAPTURE_DEBUG = 0; + /* no exclusive video region */ + media->OVERLAY_EXCLUSIVE_HORZ = 0; + media->OVERLAY_EXCLUSIVE_VERT = 0; + /* scaling coefficients */ + media->SCALER_H_COEFF0 = 0x00002000; + media->SCALER_H_COEFF1 = 0x0D06200D; + media->SCALER_H_COEFF2 = 0x0D0A1C0D; + media->SCALER_H_COEFF3 = 0x0C0E1A0C; + media->SCALER_H_COEFF4 = 0x0C14140C; + media->SCALER_TEST = 0; + + mach64WaitAvail (reg, 2); + media->OVERLAY_SCALE_CNTL = (SCALE_PIX_EXPAND | + SCALE_GAMMA_BRIGHT | + SCALE_BANDWIDTH | + SCALE_OVERLAY_EN | + SCALE_EN); + + bright = (pPortPriv->brightness * 64 / 1000); + if (bright < -0x40) + bright = -0x40; + if (bright > 0x3f) + bright = 0x3f; + bright = bright & 0x7f; + sat = ((pPortPriv->saturation * 31 + 31000) / 2000); + if (sat > 0x1f) + sat = 0x1f; + if (sat < 0) + sat = 0; + + media->SCALER_COLOUR_CNTL = ((bright << 0) | /* BRIGHTNESS */ + (sat << 8) | /* SATURATION_U */ + (sat << 16) | /* SATURATION_V */ + (0 << 21) | /* SCALER_VERT_ADJ_UV */ + (0 << 28)); /* SCALER_HORZ_ADJ_UV */ + + VERT_INC = (src_h << 12) / drw_h; + HORZ_INC = (src_w << 12) / drw_w; + + mach64WaitAvail (reg, 13); + + /* lock registers to prevent non-atomic update */ + media->OVERLAY_Y_X_START = 0x80000000 | MACH64_YX (dst_x1, dst_y1); + /* ending screen coordinate */ + media->OVERLAY_Y_X_END = 0x80000000 | MACH64_YX (dst_x2, dst_y2); + + media->OVERLAY_SCALE_INC = MACH64_YX(HORZ_INC, VERT_INC); + + media->SCALER_BUF0_OFFSET = pPortPriv->YBuf0Offset; + media->SCALER_BUF1_OFFSET = pPortPriv->YBuf1Offset; + + media->SCALER_BUF0_OFFSET_U = pPortPriv->YBuf0Offset; + media->SCALER_BUF1_OFFSET_U = pPortPriv->YBuf1Offset; + + media->SCALER_BUF0_OFFSET_V = pPortPriv->YBuf0Offset; + media->SCALER_BUF1_OFFSET_V = pPortPriv->YBuf1Offset; + + media->SCALER_BUF_PITCH = dstPitch >> 1; + media->SCALER_HEIGHT_WIDTH = MACH64_YX(src_w - (x1 >> 16), src_h - (y1 >> 16)); + + media->CAPTURE_CONFIG = pPortPriv->currentBuf << 28; + + /* set XY location and unlock */ + media->OVERLAY_Y_X_START = MACH64_YX (dst_x1, dst_y1); +} + +static int +mach64PutImage(KdScreenInfo *screen, + short src_x, + short src_y, + short drw_x, + short drw_y, + short src_w, + short src_h, + short drw_w, + short drw_h, + int id, + unsigned char *buf, + short width, + short height, + Bool sync, + RegionPtr clipBoxes, + pointer data) +{ + KdCardInfo *card = screen->card; + Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver; + Mach64CardInfo *mach64c = (Mach64CardInfo *) card->driver; + Mach64PortPrivPtr pPortPriv = (Mach64PortPrivPtr)data; + Reg *reg = mach64c->reg; + MediaReg *media = mach64c->media_reg; + INT32 x1, x2, y1, y2; + int randr = mach64s->vesa.randr; + int srcPitch, srcPitch2, dstPitch; + int top, left, npixels, nlines, size; + BoxRec dstBox; + int dst_width = width, dst_height = height; + int rot_x1, rot_y1, rot_x2, rot_y2; + int dst_x1, dst_y1, dst_x2, dst_y2; + int rot_src_w, rot_src_h, rot_drw_w, rot_drw_h; + + /* Clip */ + x1 = src_x; + x2 = src_x + src_w; + y1 = src_y; + y2 = src_y + src_h; + + dstBox.x1 = drw_x; + dstBox.x2 = drw_x + drw_w; + dstBox.y1 = drw_y; + dstBox.y2 = drw_y + drw_h; + + Mach64ClipVideo(&dstBox, &x1, &x2, &y1, &y2, + REGION_EXTENTS(pScreen, clipBoxes), width, height); + + if((x1 >= x2) || (y1 >= y2)) + return Success; + + if (!media) + return BadAlloc; + + if (randr & (RR_Rotate_0|RR_Rotate_180)) + { + dst_width = width; + dst_height = height; + rot_src_w = src_w; + rot_src_h = src_h; + rot_drw_w = drw_w; + rot_drw_h = drw_h; + } + else + { + dst_width = height; + dst_height = width; + rot_src_w = src_h; + rot_src_h = src_w; + rot_drw_w = drw_h; + rot_drw_h = drw_w; + } + + switch (randr & RR_Rotate_All) { + case RR_Rotate_0: + dst_x1 = dstBox.x1; + dst_y1 = dstBox.y1; + dst_x2 = dstBox.x2; + dst_y2 = dstBox.y2; + rot_x1 = x1; + rot_y1 = y1; + rot_x2 = x2; + rot_y2 = y2; + break; + case RR_Rotate_90: + dst_x1 = dstBox.y1; + dst_y1 = screen->height - dstBox.x2; + dst_x2 = dstBox.y2; + dst_y2 = screen->height - dstBox.x1; + + rot_x1 = y1; + rot_y1 = (src_w << 16) - x2; + rot_x2 = y2; + rot_y2 = (src_w << 16) - x1; + break; + case RR_Rotate_180: + dst_x1 = screen->width - dstBox.x2; + dst_y1 = screen->height - dstBox.y2; + dst_x2 = screen->width - dstBox.x1; + dst_y2 = screen->height - dstBox.y1; + rot_x1 = (src_w << 16) - x2; + rot_y1 = (src_h << 16) - y2; + rot_x2 = (src_w << 16) - x1; + rot_y2 = (src_h << 16) - y1; + break; + case RR_Rotate_270: + dst_x1 = screen->width - dstBox.y2; + dst_y1 = dstBox.x1; + dst_x2 = screen->width - dstBox.y1; + dst_y2 = dstBox.x2; + rot_x1 = (src_h << 16) - y2; + rot_y1 = x1; + rot_x2 = (src_h << 16) - y1; + rot_y2 = x2; + break; + } + + switch(id) { + case FOURCC_YV12: + case FOURCC_I420: + dstPitch = ((dst_width << 1) + 15) & ~15; + srcPitch = (width + 3) & ~3; + srcPitch2 = ((width >> 1) + 3) & ~3; + size = dstPitch * (int) dst_height; + break; + case FOURCC_UYVY: + case FOURCC_YUY2: + default: + dstPitch = ((dst_width << 1) + 15) & ~15; + srcPitch = (width << 1); + size = dstPitch * (int) dst_height; + break; + } + + pPortPriv->offset = mach64s->off_screen - (CARD8 *) mach64s->vesa.fb; + /* fixup pointers */ + + pPortPriv->YBuf0Offset = pPortPriv->offset; + pPortPriv->YBuf1Offset = pPortPriv->offset + size; + +#if 0 + mach64WaitIdle (reg); + + if (pPortPriv->videoOn) + { + /* wait for buffer to be displayed */ + while (((media->TRIG_CNTL >> 5) & 1) != pPortPriv->currentBuf) + ; + } +#endif + /* + * Use the other buffer + */ + pPortPriv->currentBuf = 1 - pPortPriv->currentBuf; + + /* copy data */ + top = rot_y1 >> 16; + left = (rot_x1 >> 16) & ~1; + npixels = ((((rot_x2 + 0xffff) >> 16) + 1) & ~1) - left; + + switch(id) { + case FOURCC_YV12: + case FOURCC_I420: + top &= ~1; + nlines = ((((rot_y2 + 0xffff) >> 16) + 1) & ~1) - top; + mach64CopyPlanarData(screen, buf, randr, + srcPitch, srcPitch2, dstPitch, + rot_src_w, rot_src_h, height, + top, left, nlines, npixels, id); + break; + case FOURCC_UYVY: + case FOURCC_YUY2: + default: + nlines = ((rot_y2 + 0xffff) >> 16) - top; + mach64CopyPackedData(screen, buf, randr, + srcPitch, dstPitch, + rot_src_w, rot_src_h, + top, left, nlines, + npixels); + break; + } + + mach64DisplayVideo(screen, id, dstPitch, + rot_x1, rot_y1, rot_x2, rot_y2, + dst_x1, dst_y1, + dst_x2, dst_y2, + rot_src_w, rot_src_h, rot_drw_w, rot_drw_h); + + /* update cliplist */ + if (!REGION_EQUAL (screen->pScreen, &pPortPriv->clip, clipBoxes)) + { + REGION_COPY (screen->pScreen, &pPortPriv->clip, clipBoxes); + mach64PaintRegion (screen->pScreen, &pPortPriv->clip, pPortPriv->colorKey); + } + + pPortPriv->videoOn = TRUE; + + return Success; +} + +static int +mach64QueryImageAttributes(KdScreenInfo *screen, + int id, + unsigned short *w, + unsigned short *h, + int *pitches, + int *offsets) +{ + int size, tmp; + + if(*w > IMAGE_MAX_WIDTH) + *w = IMAGE_MAX_WIDTH; + if(*h > IMAGE_MAX_HEIGHT) + *h = IMAGE_MAX_HEIGHT; + + *w = (*w + 1) & ~1; + if(offsets) offsets[0] = 0; + + switch(id) { + case FOURCC_YV12: + case FOURCC_I420: + *h = (*h + 1) & ~1; + size = (*w + 3) & ~3; + if(pitches) + pitches[0] = size; + size *= *h; + if(offsets) + offsets[1] = size; + tmp = ((*w >> 1) + 3) & ~3; + if(pitches) + pitches[1] = pitches[2] = tmp; + tmp *= (*h >> 1); + size += tmp; + if(offsets) + offsets[2] = size; + size += tmp; + break; + case FOURCC_UYVY: + case FOURCC_YUY2: + default: + size = *w << 1; + if(pitches) + pitches[0] = size; + size *= *h; + break; + } + + return size; +} + + +/* client libraries expect an encoding */ +static KdVideoEncodingRec DummyEncoding[1] = +{ + { + 0, + "XV_IMAGE", + IMAGE_MAX_WIDTH, IMAGE_MAX_HEIGHT, + {1, 1} + } +}; + +#define NUM_FORMATS 3 + +static KdVideoFormatRec Formats[NUM_FORMATS] = +{ + {15, TrueColor}, {16, TrueColor}, {24, TrueColor} +}; + +#define NUM_ATTRIBUTES 3 + +static KdAttributeRec Attributes[NUM_ATTRIBUTES] = +{ + {XvSettable | XvGettable, 0, ~0, "XV_COLORKEY"}, + {XvSettable | XvGettable, -1000, 1000, "XV_BRIGHTNESS"}, + {XvSettable | XvGettable, -1000, 1000, "XV_SATURATION"} +}; + +#define NUM_IMAGES 4 + +static KdImageRec Images[NUM_IMAGES] = +{ + XVIMAGE_YUY2, + XVIMAGE_YV12, + XVIMAGE_I420, + XVIMAGE_UYVY +}; + +static void mach64ResetVideo(KdScreenInfo *screen) +{ + ScreenPtr pScreen = screen->pScreen; + KdScreenPriv(pScreen); + KdCardInfo *card = pScreenPriv->card; + Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver; + Mach64CardInfo *mach64c = (Mach64CardInfo *) card->driver; + Mach64PortPrivPtr pPortPriv = mach64s->pAdaptor->pPortPrivates[0].ptr; + MediaReg *media = mach64c->media_reg; + + /* + * Default to maximum image size in YV12 + */ + +} + +static int +mach64ReputImage (KdScreenInfo *screen, + short drw_x, + short drw_y, + RegionPtr clipBoxes, + pointer data) +{ + ScreenPtr pScreen = screen->pScreen; + Mach64PortPrivPtr pPortPriv = (Mach64PortPrivPtr)data; + BoxPtr pOldExtents = REGION_EXTENTS (pScreen, &pPortPriv->clip); + BoxPtr pNewExtents = REGION_EXTENTS (pScreen, clipBoxes); + + if (pOldExtents->x1 == pNewExtents->x1 && + pOldExtents->x2 == pNewExtents->x2 && + pOldExtents->y1 == pNewExtents->y1 && + pOldExtents->y2 == pNewExtents->y2) + { + /* update cliplist */ + if (!REGION_EQUAL (screen->pScreen, &pPortPriv->clip, clipBoxes)) + { + REGION_COPY (screen->pScreen, &pPortPriv->clip, clipBoxes); + mach64PaintRegion (screen->pScreen, &pPortPriv->clip, pPortPriv->colorKey); + } + return Success; + } + return BadMatch; +} + +static KdVideoAdaptorPtr +mach64SetupImageVideo(ScreenPtr pScreen) +{ + KdScreenPriv(pScreen); + mach64CardInfo(pScreenPriv); + mach64ScreenInfo(pScreenPriv); + KdScreenInfo *screen = pScreenPriv->screen; + KdCardInfo *card = pScreenPriv->card; + KdVideoAdaptorPtr adapt; + Mach64PortPrivPtr pPortPriv; + + if(!(adapt = xcalloc(1, sizeof(KdVideoAdaptorRec) + + sizeof(Mach64PortPrivRec) + + sizeof(DevUnion)))) + return NULL; + + adapt->type = XvWindowMask | XvInputMask | XvImageMask; + adapt->flags = VIDEO_OVERLAID_IMAGES | VIDEO_CLIP_TO_VIEWPORT; + adapt->name = "Mach64 Video Overlay"; + adapt->nEncodings = 1; + adapt->pEncodings = DummyEncoding; + adapt->nFormats = NUM_FORMATS; + adapt->pFormats = Formats; + adapt->nPorts = 1; + adapt->pPortPrivates = (DevUnion*)(&adapt[1]); + + pPortPriv = (Mach64PortPrivPtr)(&adapt->pPortPrivates[1]); + + adapt->pPortPrivates[0].ptr = (pointer)(pPortPriv); + adapt->pAttributes = Attributes; + adapt->nImages = NUM_IMAGES; + adapt->nAttributes = NUM_ATTRIBUTES; + adapt->pImages = Images; + adapt->PutVideo = NULL; + adapt->PutStill = NULL; + adapt->GetVideo = NULL; + adapt->GetStill = NULL; + adapt->StopVideo = mach64StopVideo; + adapt->SetPortAttribute = mach64SetPortAttribute; + adapt->GetPortAttribute = mach64GetPortAttribute; + adapt->QueryBestSize = mach64QueryBestSize; + adapt->PutImage = mach64PutImage; + adapt->ReputImage = mach64ReputImage; + adapt->QueryImageAttributes = mach64QueryImageAttributes; + + pPortPriv->colorKey = mach64s->colorKey; + pPortPriv->videoOn = FALSE; + pPortPriv->brightness = 0; + pPortPriv->saturation = 0; + pPortPriv->currentBuf = 0; + + /* gotta uninit this someplace */ + REGION_INIT(pScreen, &pPortPriv->clip, NullBox, 0); + + mach64s->pAdaptor = adapt; + + xvBrightness = MAKE_ATOM("XV_BRIGHTNESS"); + xvSaturation = MAKE_ATOM("XV_SATURATION"); + xvColorKey = MAKE_ATOM("XV_COLORKEY"); + + mach64ResetVideo(screen); + + return adapt; +} + +Bool mach64InitVideo(ScreenPtr pScreen) +{ + KdScreenPriv(pScreen); + KdScreenInfo *screen = pScreenPriv->screen; + KdVideoAdaptorPtr *adaptors, *newAdaptors = NULL; + KdVideoAdaptorPtr newAdaptor = NULL; + int num_adaptors; + KdCardInfo *card = pScreenPriv->card; + Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver; + Mach64CardInfo *mach64c = (Mach64CardInfo *) card->driver; + + if (!mach64c->media_reg) + return FALSE; + + newAdaptor = mach64SetupImageVideo(pScreen); + + num_adaptors = KdXVListGenericAdaptors(screen, &adaptors); + + if(newAdaptor) + { + if(!num_adaptors) + { + num_adaptors = 1; + adaptors = &newAdaptor; + } + else + { + newAdaptors = xalloc((num_adaptors + 1) * + sizeof(KdVideoAdaptorPtr*)); + if(newAdaptors) + { + memcpy(newAdaptors, adaptors, + num_adaptors * sizeof(KdVideoAdaptorPtr)); + newAdaptors[num_adaptors] = newAdaptor; + adaptors = newAdaptors; + num_adaptors++; + } + } + } + + if(num_adaptors) + KdXVScreenInit(pScreen, adaptors, num_adaptors); + + if(newAdaptors) + xfree(newAdaptors); + return TRUE; +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/smi/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/smi/Makefile.in @@ -125,6 +125,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -203,6 +205,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -315,6 +318,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/trio/s3clock.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/trio/s3clock.c @@ -0,0 +1,88 @@ +/* + * Id: s3clock.c,v 1.1 1999/11/02 08:17:24 keithp Exp $ + * + * Copyright © 1999 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/trio/s3clock.c,v 1.2 1999/12/30 03:03:19 robin Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "s3.h" + +/* + * Clock synthesis: + * + * f_out = f_ref * ((M + 2) / ((N + 2) * (1 << R))) + * + * Constraints: + * + * 1. 135MHz <= f_ref * ((M + 2) / (N + 2)) <= 270 MHz + * 2. N >= 1 + * + * Vertical refresh rate = clock / ((hsize + hblank) * (vsize + vblank)) + * Horizontal refresh rate = clock / (hsize + hblank) + */ + +/* all in kHz */ +#define MIN_VCO 180000.0 +#define MAX_VCO 360000.0 + +void +s3GetClock (int target, int *Mp, int *Np, int *Rp, int maxM, int maxN, int maxR) +{ + int M, N, R, bestM, bestN; + int f_vco, f_out; + int err, abserr, besterr; + + /* + * Compute correct R value to keep VCO in range + */ + for (R = 0; R <= maxR; R++) + { + f_vco = target * (1 << R); + if (MIN_VCO <= f_vco && f_vco < MAX_VCO) + break; + } + + /* M = f_out / f_ref * ((N + 2) * (1 << R)); */ + besterr = target; + for (N = 0; N <= maxN; N++) + { + M = (target * (N + 2) * (1 << R) + (S3_CLOCK_REF/2)) / S3_CLOCK_REF - 2; + if (0 <= M && M <= maxM) + { + f_out = S3_CLOCK(M,N,R); + err = target - f_out; + if (err < 0) + err = -err; + if (err < besterr) + { + besterr = err; + bestM = M; + bestN = N; + } + } + } + *Mp = bestM; + *Np = bestN; + *Rp = R; +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/trio/s3.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/trio/s3.c @@ -0,0 +1,1016 @@ +/* + * Id: s3.c,v 1.1 1999/11/02 08:17:24 keithp Exp $ + * + * Copyright © 1999 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/trio/s3.c,v 1.4 2000/05/06 22:17:52 keithp Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "s3.h" + +#define REGISTERS_OFFSET (0x1000000) +#define PACKED_OFFSET (0x8100) + + +CARD8 +_s3ReadIndexRegister (volatile CARD8 *base, CARD8 index) +{ + CARD8 ret; + *base = index; + ret = *(base + 1); + DRAW_DEBUG ((DEBUG_CRTC, " 0x%3x 0x%02x -> 0x%02x", + ((int) base) & 0xfff, index, ret)); + return ret; +} + +void +_s3WriteIndexRegister (volatile CARD8 *base, CARD8 index, CARD8 value) +{ + DRAW_DEBUG ((DEBUG_CRTC, " 0x%3x 0x%02x <- 0x%02x", + ((int) base) & 0xfff, index, value)); + *base = index; + *(base + 1) = value; +} + +/* + * Map the S3 card and detect its configuration. Do not touch the card + */ + +static void +_s3LoadCrtc (S3Ptr s3, S3Crtc *crtc) +{ + crtc->h_total_0_7 = GetCrtc (s3, 0x00); + crtc->h_display_end_0_7 = GetCrtc (s3, 0x01); + crtc->h_blank_start_0_7 = GetCrtc (s3, 0x02); + crtc->_h_blank_end = GetCrtc (s3, 0x03); + crtc->h_sync_start_0_7 = GetCrtc (s3, 0x04); + crtc->_h_sync_end = GetCrtc (s3, 0x05); + crtc->v_total_0_7 = GetCrtc (s3, 0x06); + crtc->crtc_overflow = GetCrtc (s3, 0x07); + crtc->preset_row_scan = GetCrtc (s3, 0x08); + crtc->_max_scan_line = GetCrtc (s3, 0x09); + + crtc->start_address_8_15 = GetCrtc (s3, 0x0c); + crtc->start_address_0_7 = GetCrtc (s3, 0x0d); + + crtc->v_retrace_start_0_7 = GetCrtc (s3, 0x10); + crtc->_v_retrace_end = GetCrtc (s3, 0x11); + crtc->v_display_end_0_7 = GetCrtc (s3, 0x12); + crtc->screen_off_0_7 = GetCrtc (s3, 0x13); + + crtc->v_blank_start_0_7 = GetCrtc (s3, 0x15); + crtc->v_blank_end_0_7 = GetCrtc (s3, 0x16); + + crtc->line_compare_0_7 = GetCrtc (s3, 0x18); + + crtc->memory_configuration = GetCrtc (s3, 0x31); + + crtc->misc_1 = GetCrtc (s3, 0x3a); + crtc->h_start_fifo_fetch_0_7 = GetCrtc (s3, 0x3b); + + crtc->mode_control = GetCrtc (s3, 0x42); + + crtc->hardware_cursor_mode = GetCrtc (s3, 0x45); + crtc->cursor_address_8_15 = GetCrtc (s3, 0x4C); + crtc->cursor_address_0_7 = GetCrtc (s3, 0x4D); + + crtc->extended_system_control_1 = GetCrtc (s3, 0x50); + crtc->extended_system_control_2 = GetCrtc (s3, 0x51); + + crtc->extended_memory_control = GetCrtc (s3, 0x53); + + crtc->extended_ramdac_control = GetCrtc (s3, 0x55); + + crtc->extended_horizontal_overflow = GetCrtc (s3, 0x5d); + crtc->extended_vertical_overflow = GetCrtc (s3, 0x5e); + + crtc->l_parm_0_7 = GetCrtc (s3, 0x62); + + crtc->extended_misc_control = GetCrtc (s3, 0x65); + + crtc->extended_misc_control_2 = GetCrtc (s3, 0x67); + + crtc->configuration_3 = GetCrtc (s3, 0x68); + + crtc->extended_system_control_3 = GetCrtc (s3, 0x69); + + crtc->extended_bios_5 = GetCrtc (s3, 0x6d); + + crtc->extended_sequencer_b = GetSrtc (s3, 0x0b); + crtc->extended_sequencer_d = GetSrtc (s3, 0x0d); + crtc->dclk_value_low = GetSrtc (s3, 0x12); + crtc->dclk_value_high = GetSrtc (s3, 0x13); + crtc->control_2 = GetSrtc (s3, 0x15); + crtc->ramdac_control = GetSrtc (s3, 0x18); + +/* combine values */ + + switch (crtc_ge_screen_width(crtc)) { + case 0: + if (crtc->enable_two_page) + crtc->ge_screen_pitch = 2048; + else + crtc->ge_screen_pitch = 1024; + break; + case 1: + crtc->ge_screen_pitch = 640; + break; + case 2: + /* ignore magic 1600x1200x4 mode */ + crtc->ge_screen_pitch = 800; + break; + case 3: + crtc->ge_screen_pitch = 1280; + break; + case 4: + crtc->ge_screen_pitch = 1152; + break; + case 5: + crtc->ge_screen_pitch = 0; /* reserved */ + break; + case 6: + crtc->ge_screen_pitch = 1600; + break; + case 7: + crtc->ge_screen_pitch = 0; /* reserved */ + break; + } + switch (crtc->pixel_length) { + case 0: + crtc->bits_per_pixel = 8; + crtc->pixel_width = (crtc_h_display_end(crtc) + 1) * 8; + break; + case 1: + crtc->bits_per_pixel = 16; + crtc->pixel_width = (crtc_h_display_end(crtc) + 1) * 4; + break; + case 3: + crtc->bits_per_pixel = 32; + crtc->pixel_width = (crtc_h_display_end(crtc) + 1) * 8; + break; + } + crtc->double_pixel_mode = 0; + switch (crtc->color_mode) { + case 0x0: + crtc->depth = 8; break; + case 0x1: + crtc->depth = 8; crtc->double_pixel_mode = 1; break; + case 0x3: + crtc->depth = 15; break; + case 0x5: + crtc->depth = 16; break; + case 0x7: + crtc->depth = 24; break; /* unused */ + case 0xd: + crtc->depth = 24; break; + } +} + +static void +_s3SetBlank (S3Ptr s3, Bool blank) +{ + CARD8 clock_mode; + + DRAW_DEBUG ((DEBUG_S3INIT, "3c4 at 0x%x\n", &s3->crt_vga_3c4)); + clock_mode = _s3ReadIndexRegister (&s3->crt_vga_3c4, 0x01); + if (blank) + clock_mode |= 0x20; + else + clock_mode &= ~0x20; + _s3WaitVRetrace (s3); + _s3WriteIndexRegister (&s3->crt_vga_3c4, 0x01, clock_mode); + DRAW_DEBUG ((DEBUG_S3INIT, "blank is set to 0x%x", clock_mode)); +} + +static void +_s3SetDepth (S3Ptr s3, S3Crtc *crtc) +{ + CARD8 save_3c2; + _s3SetBlank (s3, TRUE); + PutCrtc(s3, 0x38, 0x48); + PutCrtc(s3, 0x39, 0xA0); + PutCrtc(s3, 0x00, crtc->h_total_0_7); + PutCrtc(s3, 0x01, crtc->h_display_end_0_7); + PutCrtc(s3, 0x02, crtc->h_blank_start_0_7); + PutCrtc(s3, 0x03, crtc->_h_blank_end); + PutCrtc(s3, 0x04, crtc->h_sync_start_0_7); + PutCrtc(s3, 0x05, crtc->_h_sync_end); + PutCrtc(s3, 0x06, crtc->v_total_0_7); + PutCrtc(s3, 0x07, crtc->crtc_overflow); + PutCrtc(s3, 0x09, crtc->_max_scan_line); + PutCrtc(s3, 0x0c, crtc->start_address_8_15); + PutCrtc(s3, 0x0d, crtc->start_address_0_7); + PutCrtc(s3, 0x10, crtc->v_retrace_start_0_7); + PutCrtc(s3, 0x11, crtc->_v_retrace_end); + PutCrtc(s3, 0x12, crtc->v_display_end_0_7); + PutCrtc(s3, 0x13, crtc->screen_off_0_7); + PutCrtc(s3, 0x15, crtc->v_blank_start_0_7); + PutCrtc(s3, 0x16, crtc->v_blank_end_0_7); + PutCrtc(s3, 0x18, crtc->line_compare_0_7); + PutCrtc(s3, 0x31, crtc->memory_configuration); + PutCrtc(s3, 0x3a, crtc->misc_1); + PutCrtc(s3, 0x3b, crtc->h_start_fifo_fetch_0_7); + PutCrtc(s3, 0x42, crtc->mode_control); + PutCrtc(s3, 0x45, crtc->hardware_cursor_mode); + PutCrtc(s3, 0x4c, crtc->cursor_address_8_15); + PutCrtc(s3, 0x4d, crtc->cursor_address_0_7); + PutCrtc(s3, 0x50, crtc->extended_system_control_1); + PutCrtc(s3, 0x51, crtc->extended_system_control_2); + PutCrtc(s3, 0x53, crtc->extended_memory_control); + PutCrtc(s3, 0x55, crtc->extended_ramdac_control); + PutCrtc(s3, 0x5d, crtc->extended_horizontal_overflow); + PutCrtc(s3, 0x5e, crtc->extended_vertical_overflow); + PutCrtc(s3, 0x62, crtc->l_parm_0_7); + PutCrtc(s3, 0x65, crtc->extended_misc_control); + PutCrtc(s3, 0x67, crtc->extended_misc_control_2); + PutCrtc(s3, 0x68, crtc->configuration_3); + PutCrtc(s3, 0x69, crtc->extended_system_control_3); + PutCrtc(s3, 0x6d, crtc->extended_bios_5); + PutCrtc(s3, 0x39, 0x00); + PutCrtc(s3, 0x38, 0x00); + PutSrtc(s3, 0x0b, crtc->extended_sequencer_b); + PutSrtc(s3, 0x0d, crtc->extended_sequencer_d); + /* + * Move new dclk/mclk values into PLL + */ + save_3c2 = s3->crt_vga_3cc; + DRAW_DEBUG ((DEBUG_S3INIT, "save_3c2 0x%x", save_3c2)); + s3->crt_vga_3c2 = save_3c2 | 0x0c; + + PutSrtc(s3, 0x12, crtc->dclk_value_low); + PutSrtc(s3, 0x13, crtc->dclk_value_high); + + DRAW_DEBUG ((DEBUG_S3INIT, "Set PLL load enable, frobbing clk_load...")); + crtc->dfrq_en = 1; + PutSrtc(s3, 0x15, crtc->control_2); + PutSrtc(s3, 0x18, crtc->ramdac_control); + + DRAW_DEBUG ((DEBUG_S3INIT, "Clk load frobbed, restoring 3c2 to 0x%x", save_3c2)); + s3->crt_vga_3c2 = save_3c2; + + DRAW_DEBUG ((DEBUG_S3INIT, "Enabling display")); + _s3SetBlank (s3, FALSE); +} + +void +_s3RestoreCrtc (S3Ptr s3, S3Crtc *crtc) +{ + _s3SetDepth (s3, crtc); +} + +s3Reset (S3CardInfo *s3c) +{ + S3Ptr s3 = s3c->s3; + S3Save *save = &s3c->save; + CARD8 *cursor_base; + + LockS3 (s3c); + + _s3UnlockExt (s3); + + _s3RestoreCrtc (s3, &save->crtc); + + /* set foreground */ + /* Reset cursor color stack pointers */ + (void) GetCrtc(s3, 0x45); + PutCrtc(s3, 0x4a, save->cursor_fg); + /* XXX for deeper screens? */ + + /* set background */ + /* Reset cursor color stack pointers */ + (void) GetCrtc(s3, 0x45); + PutCrtc(s3, 0x4b, save->cursor_bg); + + _s3LockExt (s3); + + /* graphics engine state */ + s3->alt_mix = save->alt_mix; + s3->write_mask = save->write_mask; + s3->fg = save->fg; + s3->bg = save->bg; + /* XXX should save and restore real values? */ + s3->scissors_tl = 0x00000000; + s3->scissors_br = 0x0fff0fff; + + _s3WriteIndexRegister (&s3->crt_vga_3c4, 0x01, save->clock_mode); + PutCrtc(s3, 0x39, save->lock2); + PutCrtc(s3, 0x38, save->lock1); + + UnlockS3 (s3c); +} + +void +s3Save (S3CardInfo *s3c) +{ + S3Ptr s3 = s3c->s3; + S3Save *save = &s3c->save; + S3Crtc newCrtc; + CARD8 t1, t2; + CARD8 *cursor_base; + + LockS3 (s3c); + + save->alt_mix = s3->alt_mix; + save->write_mask = s3->write_mask; + save->fg = s3->fg; + save->bg = s3->bg; + + save->lock1 = GetCrtc(s3, 0x38); + save->lock2 = GetCrtc(s3, 0x39); + save->clock_mode = _s3ReadIndexRegister (&s3->crt_vga_3c4, 0x01); + + _s3UnlockExt (s3); + save->cursor_fg = GetCrtc(s3, 0x4a); + save->cursor_bg = GetCrtc(s3, 0x4b); + + _s3LoadCrtc (s3, &save->crtc); + + _s3LockExt (s3); + + UnlockS3 (s3c); +} +Bool +s3CardInit (KdCardInfo *card) +{ + S3CardInfo *s3c; + S3Ptr s3; + int size; + CARD8 *registers; + CARD32 s3Address = card->attr.address[0]; + CARD8 *temp_buffer; + + DRAW_DEBUG ((DEBUG_S3INIT, "s3CardInit")); + s3c = (S3CardInfo *) xalloc (sizeof (S3CardInfo)); + if (!s3c) + { + DRAW_DEBUG ((DEBUG_FAILURE, "can't alloc s3 card info")); + goto bail0; + } + + memset (s3c, '\0', sizeof (S3CardInfo)); + + card->driver = s3c; + + fprintf (stderr, "S3 at 0x%x\n", s3Address); + registers = KdMapDevice (s3Address + REGISTERS_OFFSET, + sizeof (S3) + PACKED_OFFSET); + if (!registers) + { + ErrorF ("Can't map s3 device\n"); + goto bail2; + } + s3 = (S3Ptr) (registers + PACKED_OFFSET); + s3c->registers = registers; + s3c->s3 = s3; + + s3->crt_vga_3c3 = 1; /* wake up part from deep sleep */ + s3->crt_vga_3c2 = 0x01 | 0x02 | 0x0c; + + s3->crt_vga_3c4 = 0x58; + s3->crt_vga_3c5 = 0x10 | 0x3; + + /* + * Can't trust S3 register value for frame buffer amount, must compute + */ + temp_buffer = KdMapDevice (s3Address, 4096 * 1024); + + s3c->memory = KdFrameBufferSize (temp_buffer, 4096 * 1024); + + DRAW_DEBUG ((DEBUG_S3INIT, "Detected frame buffer %d", s3c->memory)); + + KdUnmapDevice (temp_buffer, 4096 * 1024); + + if (!s3c->memory) + { + ErrorF ("Can't detect s3 frame buffer\n"); + goto bail3; + } + + s3c->frameBuffer = KdMapDevice (s3Address, s3c->memory); + if (!s3c->frameBuffer) + { + ErrorF ("Can't map s3 frame buffer\n"); + goto bail3; + } + + card->driver = s3c; + + return TRUE; +bail3: + KdUnmapDevice ((void *) s3, sizeof (S3)); +bail2: +bail1: + xfree (s3c); +bail0: + return FALSE; +} + +Bool +s3ModeSupported (KdScreenInfo *screen, + const KdMonitorTiming *t) +{ + if (t->horizontal != 1600 && + t->horizontal != 1280 && + t->horizontal != 1152 && + t->horizontal != 1024 && + t->horizontal != 800 && + t->horizontal != 640) + return FALSE; + if (t->clock > S3_MAX_CLOCK * 2) + return FALSE; + return TRUE; +} + +Bool +s3ModeUsable (KdScreenInfo *screen) +{ + KdCardInfo *card = screen->card; + S3CardInfo *s3c = (S3CardInfo *) card->driver; + int screen_size; + int pixel_width; + int byte_width; + + if (screen->fb[0].depth >= 24) + { + screen->fb[0].depth = 24; + screen->fb[0].bitsPerPixel = 32; + } + else if (screen->fb[0].depth >= 16) + { + screen->fb[0].depth = 16; + screen->fb[0].bitsPerPixel = 16; + } + else if (screen->fb[0].depth >= 15) + { + screen->fb[0].depth = 15; + screen->fb[0].bitsPerPixel = 16; + } + else + { + screen->fb[0].depth = 8; + screen->fb[0].bitsPerPixel = 8; + } + + byte_width = screen->width * (screen->fb[0].bitsPerPixel >> 3); + pixel_width = screen->width; + screen->fb[0].pixelStride = pixel_width; + screen->fb[0].byteStride = byte_width; + + screen_size = byte_width * screen->height; + + return screen_size <= s3c->memory; +} + +Bool +s3ScreenInit (KdScreenInfo *screen) +{ + KdCardInfo *card = screen->card; + S3CardInfo *s3c = (S3CardInfo *) card->driver; + S3ScreenInfo *s3s; + int screen_size; + int memory; + int requested_memory; + int v_total, h_total; + int byte_width; + int pixel_width; + int m, n, r; + int i; + const KdMonitorTiming *t; + + DRAW_DEBUG ((DEBUG_S3INIT, "s3ScreenInit")); + s3s = (S3ScreenInfo *) xalloc (sizeof (S3ScreenInfo)); + if (!s3s) + return FALSE; + + memset (s3s, '\0', sizeof (S3ScreenInfo)); + + if (!screen->width || !screen->height) + { + screen->width = 800; + screen->height = 600; + screen->rate = 72; + } + if (!screen->fb[0].depth) + screen->fb[0].depth = 8; + + DRAW_DEBUG ((DEBUG_S3INIT, "Requested parameters %dx%dx%d", + screen->width, screen->height, screen->rate)); + t = KdFindMode (screen, s3ModeSupported); + screen->rate = t->rate; + screen->width = t->horizontal; + screen->height = t->vertical; + s3GetClock (t->clock, &m, &n, &r, 127, 31, 3); +#if 0 + fprintf (stderr, "computed %d,%d,%d (%d) provided %d,%d,%d (%d)\n", + m, n, r, S3_CLOCK(m,n,r), + t->dac_m, t->dac_n, t->dac_r, + S3_CLOCK(t->dac_m, t->dac_n, t->dac_r)); +#endif + /* + * Can only operate in pixel-doubled mode at 8 bits per pixel + */ + if (screen->fb[0].depth > 8 && S3_CLOCK(m,n,r) > S3_MAX_CLOCK) + screen->fb[0].depth = 8; + + if (!KdTuneMode (screen, s3ModeUsable, s3ModeSupported)) + { + xfree (s3s); + return FALSE; + } + + memory = s3c->memory - screen_size; + + /* + * Stick frame buffer at start of memory + */ + screen->fb[0].frameBuffer = s3c->frameBuffer; + + /* + * Stick cursor at end of memory + */ + if (memory >= 2048) + { + s3s->cursor_base = s3c->frameBuffer + (s3c->memory - 2048); + memory -= 2048; + } + else + s3s->cursor_base = 0; + + /* + * Use remaining memory for off-screen storage, but only use + * one piece (either right or bottom). + */ + if (memory >= byte_width * S3_TILE_SIZE) + { + s3s->fb[0].offscreen = s3c->frameBuffer + screen_size; + s3s->fb[0].offscreen_x = 0; + s3s->fb[0].offscreen_y = screen_size / byte_width; + s3s->fb[0].offscreen_width = pixel_width; + s3s->fb[0].offscreen_height = memory / byte_width; + memory -= s3s->fb[0].offscreen_height * byte_width; + } + else if (pixel_width - screen->width >= S3_TILE_SIZE) + { + s3s->fb[0].offscreen = s3c->frameBuffer + screen->width; + s3s->fb[0].offscreen_x = screen->width; + s3s->fb[0].offscreen_y = 0; + s3s->fb[0].offscreen_width = pixel_width - screen->width; + s3s->fb[0].offscreen_height = screen->height; + } + else + s3s->fb[0].offscreen = 0; + + DRAW_DEBUG ((DEBUG_S3INIT, "depth %d bits %d", screen->fb[0].depth, screen->fb[0].bitsPerPixel)); + + DRAW_DEBUG ((DEBUG_S3INIT, "Screen size %dx%d memory %d", + screen->width, screen->height, s3c->memory)); + DRAW_DEBUG ((DEBUG_S3INIT, "frame buffer 0x%x cursor 0x%x offscreen 0x%x", + s3c->frameBuffer, s3s->cursor_base, s3s->offscreen)); + DRAW_DEBUG ((DEBUG_S3INIT, "offscreen %dx%d+%d+%d", + s3s->offscreen_width, s3s->offscreen_height, + s3s->offscreen_x, s3s->offscreen_y)); + + switch (screen->fb[0].depth) { + case 8: + screen->fb[0].visuals = ((1 << StaticGray) | + (1 << GrayScale) | + (1 << StaticColor) | + (1 << PseudoColor) | + (1 << TrueColor) | + (1 << DirectColor)); + screen->fb[0].blueMask = 0x00; + screen->fb[0].greenMask = 0x00; + screen->fb[0].redMask = 0x00; + break; + case 15: + screen->fb[0].visuals = (1 << TrueColor); + screen->fb[0].blueMask = 0x001f; + screen->fb[0].greenMask = 0x03e0; + screen->fb[0].redMask = 0x7c00; + break; + case 16: + screen->fb[0].visuals = (1 << TrueColor); + screen->fb[0].blueMask = 0x001f; + screen->fb[0].greenMask = 0x07e0; + screen->fb[0].redMask = 0xf800; + break; + case 24: + screen->fb[0].visuals = (1 << TrueColor); + screen->fb[0].blueMask = 0x0000ff; + screen->fb[0].greenMask = 0x00ff00; + screen->fb[0].redMask = 0xff0000; + break; + } + + screen->driver = s3s; + + return TRUE; +} + +void +s3Preserve (KdCardInfo *card) +{ + S3CardInfo *s3c = card->driver; + + s3Save (s3c); +} + +/* + * Enable the card for rendering. Manipulate the initial settings + * of the card here. + */ +Bool +s3Enable (ScreenPtr pScreen) +{ + KdScreenPriv(pScreen); + KdCardInfo *card = pScreenPriv->card; + KdScreenInfo *screen = pScreenPriv->screen; + s3CardInfo (pScreenPriv); + s3ScreenInfo (pScreenPriv); + + S3Crtc crtcR, *crtc; + int hactive, hblank, hfp, hbp; + int vactive, vblank, vfp, vbp; + int hsize; + + int h_total; + int h_display_end; + int h_blank_start; + int h_blank_end; + int h_sync_start; + int h_sync_end; + int h_screen_off; + int h_start_fifo_fetch; + + int v_total; + int v_retrace_start; + int v_retrace_end; + int v_display_end; + int v_blank_start; + int v_blank_end; + + int h_adjust; + int h_sync_extend_; + int h_blank_extend_; + int i; + CARD16 cursor_address; + const KdMonitorTiming *t; + int m, n, r; + + DRAW_DEBUG ((DEBUG_S3INIT, "s3Enable")); + + DRAW_DEBUG ((DEBUG_S3INIT, "requested bpp %d current %d", + pScreenPriv->bitsPerPixel, s3c->save.crtc.bits_per_pixel)); + + t = KdFindMode (screen, s3ModeSupported); + + hfp = t->hfp; + hbp = t->hbp; + hblank = t->hblank; + hactive = t->horizontal; + + vfp = t->vfp; + vbp = t->vbp; + vblank = t->vblank; + vactive = t->vertical; + + crtcR = s3c->save.crtc; + crtc = &crtcR; + + s3GetClock (t->clock, &m, &n, &r, 127, 31, 3); + crtc->dclk_pll_m_trio = m; + crtc->dclk_pll_n_trio = n; + crtc->dclk_pll_r_trio = r; + + crtc->alt_refresh_count = 0x02; + crtc->enable_alt_refresh = 1; + crtc->enable_256_or_more = 1; + + DRAW_DEBUG ((DEBUG_S3INIT, "memory_bus_size %d\n", crtc->memory_bus_size)); + crtc->memory_bus_size = 1; + + crtc->dclk_over_2 = 0; + crtc->dclk_invert = 0; + crtc->enable_clock_double = 0; + crtc->delay_blank = 0; + crtc->extended_bios_5 = 0; + /* + * Compute character lengths for horizontal timing values + */ + switch (screen->fb[0].bitsPerPixel) { + case 8: + hactive = screen->width / 8; + hblank /= 8; + hfp /= 8; + hbp /= 8; + h_screen_off = hactive; + crtc->pixel_length = 0; + crtc->color_mode = 0; + /* + * Set up for double-pixel mode, switch color modes, + * divide the dclk and delay h blank by 2 dclks + */ + if (S3_CLOCK(crtc->dclk_pll_m_trio, crtc->dclk_pll_n_trio, + crtc->dclk_pll_r_trio) > S3_MAX_CLOCK) + { + DRAW_DEBUG ((DEBUG_S3INIT, "S3 clock %g > 80MHz, using pixel double mode", + S3_CLOCK(crtc->dclk_pll_m_trio, crtc->dclk_pll_n_trio, + crtc->dclk_pll_r_trio))); + crtc->color_mode = 1; + crtc->dclk_over_2 = 1; + crtc->enable_clock_double = 1; + crtc->delay_blank = 2; + crtc->extended_bios_5 = 2; + } + h_adjust = 1; + break; + case 16: + hactive = screen->width / 4; + hblank /= 4; + hfp /= 4; + hbp /= 4; + h_screen_off = hactive; + crtc->pixel_length = 1; + crtc->extended_bios_5 = 2; + if (crtc->depth == 15) + crtc->color_mode = 3; + else + crtc->color_mode = 5; + h_adjust = 2; + break; + case 32: + hactive = screen->width / 8; + hblank /= 8; + hfp /= 8; + hbp /= 8; + h_screen_off = hactive * 4; + crtc->pixel_length = 3; + crtc->color_mode = 0xd; + h_adjust = 1; + break; + } + + /* + * X server starts frame buffer at top of memory + */ + DRAW_DEBUG ((DEBUG_S3INIT, "Old start address 0x%x\n", + crtc_start_address (crtc))); + crtc_set_start_address (crtc, 0); + + /* + * Compute horizontal register values from timings + */ + h_total = hactive + hblank - 5; + h_display_end = hactive - 1; + h_blank_start = h_display_end; + h_blank_end = h_blank_start + hblank - h_adjust; + h_sync_start = hactive + hfp + h_adjust; + h_sync_end = h_sync_start + hblank - hbp - hfp; + h_start_fifo_fetch = h_total - 5; + + DRAW_DEBUG ((DEBUG_S3INIT, "blank_end 0x%x sync_end 0x%x sync_start 0x%x\n", + h_blank_end, h_sync_end, h_sync_start)); + + if (h_blank_end - h_blank_start > 0x40) + h_blank_extend_ = 1; + else + h_blank_extend_ = 0; + + if (h_sync_end - h_sync_start > 0x20) + h_sync_extend_ = 1; + else + h_sync_extend_ = 0; + + DRAW_DEBUG ((DEBUG_S3INIT, "blank_end 0x%x sync_end 0x%x extend %d\n", + h_blank_end, h_sync_end, h_sync_extend_)); + + crtc_set_h_total(crtc, h_total); + crtc_set_h_display_end (crtc, h_display_end); + crtc_set_h_blank_start (crtc, h_blank_start); + crtc_set_h_blank_end (crtc, h_blank_end); + crtc_set_h_sync_start (crtc, h_sync_start); + crtc_set_h_sync_end (crtc, h_sync_end); + crtc_set_screen_off (crtc, h_screen_off); + crtc_set_h_start_fifo_fetch (crtc, h_start_fifo_fetch); + crtc->h_sync_extend = h_sync_extend_; + crtc->h_blank_extend = h_blank_extend_; + + + v_total = vactive + vblank - 2; + v_retrace_start = vactive + vfp - 1; + v_retrace_end = v_retrace_start + vblank - vbp - 1; + v_display_end = vactive - 1; + v_blank_start = vactive - 1; + v_blank_end = v_blank_start + vblank - 1; + + crtc_set_v_total(crtc, v_total); + crtc_set_v_retrace_start (crtc, v_retrace_start); + crtc->v_retrace_end_0_3 = v_retrace_end; + crtc_set_v_display_end (crtc, v_display_end); + crtc_set_v_blank_start (crtc, v_blank_start); + crtc->v_blank_end_0_7 = v_blank_end; + + /* + * Set cursor + */ + if (!screen->softCursor) + { + cursor_address = (s3s->cursor_base - screen->fb[0].frameBuffer) / 1024; + + crtc->cursor_address_0_7 = cursor_address; + crtc->cursor_address_8_15 = cursor_address >> 8; + crtc->hardware_cursor_ms_x11 = 0; + crtc->hardware_cursor_enable = 1; + } + else + crtc->hardware_cursor_enable = 0; + + /* + * Set accelerator + */ + switch (screen->width) { + case 640: crtc_set_ge_screen_width(crtc,1); break; + case 800: crtc_set_ge_screen_width(crtc,2); break; + case 1024: crtc_set_ge_screen_width(crtc,0); break; + case 1152: crtc_set_ge_screen_width(crtc,4); break; + case 1280: crtc_set_ge_screen_width(crtc,3); break; + case 1600: crtc_set_ge_screen_width(crtc,6); break; + } + + /* + * Set depth values + */ + crtc->bits_per_pixel = screen->fb[0].bitsPerPixel; + crtc->depth = screen->fb[0].depth; + + crtc->l_parm_0_7 = screen->width / 4; /* Undocumented. */ + + crtc->disable_v_retrace_int = 1; /* don't let retrace interrupt */ + + DRAW_DEBUG ((DEBUG_S3INIT, "new h total %d display_end %d", + crtc_h_total(crtc), + crtc_h_display_end(crtc))); + DRAW_DEBUG ((DEBUG_S3INIT, " sync_start %d sync_end %d (%d)", + crtc_h_sync_start(crtc), + crtc_h_sync_end(crtc), h_sync_end)); + + DRAW_DEBUG ((DEBUG_S3INIT, " blank_start %d blank_end %d", + crtc_h_blank_start(crtc), + crtc_h_blank_end(crtc))); + + DRAW_DEBUG ((DEBUG_S3INIT, " screen_off %d start_fifo %d", + crtc_screen_off(crtc), crtc_h_start_fifo_fetch(crtc))); + + DRAW_DEBUG ((DEBUG_S3INIT, " active %d blank %d fp %d bp %d", + hactive, hblank, hfp, hbp)); + + DRAW_DEBUG ((DEBUG_S3INIT, "new v total %d display_end %d", + crtc_v_total(crtc), + crtc_v_display_end(crtc))); + DRAW_DEBUG ((DEBUG_S3INIT, " retrace_start %d retrace_end %d (%d)", + crtc_v_retrace_start(crtc), + crtc->v_retrace_end, + v_retrace_end)); + DRAW_DEBUG ((DEBUG_S3INIT, " blank_start %d blank_end %d", + crtc_v_blank_start(crtc), + crtc->v_blank_end_0_7)); + + DRAW_DEBUG ((DEBUG_S3INIT, " active %d blank %d fp %d bp %d", + vactive, vblank, vfp, vbp)); + + /* + * Set DPMS to normal + */ + crtc->hsync_control = 0; + crtc->vsync_control = 0; + + LockS3 (s3c); + _s3SetDepth (s3c->s3, crtc); + UnlockS3 (s3c); + return TRUE; +} + +void +s3Disable (ScreenPtr pScreen) +{ +} + +void +s3Restore (KdCardInfo *card) +{ + S3CardInfo *s3c = card->driver; + + s3Reset (s3c); +} + +void +_s3SetSync (S3CardInfo *s3c, int hsync, int vsync) +{ + /* this abuses the macros defined to access the crtc structure */ + union extended_sequencer_d_u _extended_sequencer_d_u; + S3Ptr s3 = s3c->s3; + + extended_sequencer_d = s3c->save.crtc.extended_sequencer_d; + hsync_control = hsync; + vsync_control = vsync; + PutSrtc (s3, 0x0d, extended_sequencer_d); +} + +Bool +s3DPMS (ScreenPtr pScreen, int mode) +{ + KdScreenPriv(pScreen); + s3CardInfo(pScreenPriv); + + switch (mode) { + case KD_DPMS_NORMAL: + _s3SetSync (s3c, 0, 0); + _s3SetBlank (s3c->s3, FALSE); + break; + case KD_DPMS_STANDBY: + _s3SetBlank (s3c->s3, TRUE); + _s3SetSync (s3c, 1, 0); + break; + case KD_DPMS_SUSPEND: + _s3SetBlank (s3c->s3, TRUE); + _s3SetSync (s3c, 0, 1); + break; + case KD_DPMS_POWERDOWN: + _s3SetBlank (s3c->s3, TRUE); + _s3SetSync (s3c, 1, 1); + break; + } + return TRUE; +} + +void +s3ScreenFini (KdScreenInfo *screen) +{ + S3ScreenInfo *s3s = (S3ScreenInfo *) screen->driver; + + xfree (s3s); + screen->driver = 0; +} + +void +s3CardFini (KdCardInfo *card) +{ + S3CardInfo *s3c = (S3CardInfo *) card->driver; + + KdUnmapDevice (s3c->frameBuffer, s3c->memory); + KdUnmapDevice (s3c->registers, sizeof (S3) + PACKED_OFFSET); +/* DeleteCriticalSection (&s3c->lock); */ + xfree (s3c); + card->driver = 0; +} + +KdCardFuncs s3Funcs = { + s3CardInit, + s3ScreenInit, + 0, + s3Preserve, + s3Enable, + s3DPMS, + s3Disable, + s3Restore, + s3ScreenFini, + s3CardFini, + s3CursorInit, + s3CursorEnable, + s3CursorDisable, + s3CursorFini, + s3RecolorCursor, + s3DrawInit, + s3DrawEnable, + s3DrawSync, + s3DrawDisable, + s3DrawFini, + s3GetColors, + s3PutColors, +}; + +void +S3InitCard (KdCardAttr *attr) +{ + KdCardInfoAdd (&s3Funcs, attr, 0); +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/trio/s3curs.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/trio/s3curs.c @@ -0,0 +1,419 @@ +/* + * Id: s3curs.c,v 1.1 1999/11/02 08:17:24 keithp Exp $ + * + * Copyright © 1999 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/trio/s3curs.c,v 1.2 1999/12/30 03:03:19 robin Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "s3.h" +#include "s3draw.h" +#include "cursorstr.h" + +#define SetupCursor(s) KdScreenPriv(s); \ + s3CardInfo(pScreenPriv); \ + s3ScreenInfo(pScreenPriv); \ + S3Ptr s3 = s3c->s3; \ + S3Cursor *pCurPriv = &s3s->cursor + +static void +_s3MoveCursor (ScreenPtr pScreen, int x, int y) +{ + SetupCursor(pScreen); + CARD8 xlow, xhigh, ylow, yhigh; + CARD8 xoff, yoff; + + x -= pCurPriv->xhot; + xoff = 0; + if (x < 0) + { + xoff = -x; + x = 0; + } + y -= pCurPriv->yhot; + yoff = 0; + if (y < 0) + { + yoff = -y; + y = 0; + } + xlow = (CARD8) x; + xhigh = (CARD8) (x >> 8); + ylow = (CARD8) y; + yhigh = (CARD8) (y >> 8); + + + /* This is the recommended order to move the cursor */ + + _s3WriteIndexRegister (&s3->crt_vga_3d4, 0x46, xhigh); + _s3WriteIndexRegister (&s3->crt_vga_3d4, 0x47, xlow); + _s3WriteIndexRegister (&s3->crt_vga_3d4, 0x49, ylow); + _s3WriteIndexRegister (&s3->crt_vga_3d4, 0x4e, xoff); + _s3WriteIndexRegister (&s3->crt_vga_3d4, 0x4f, yoff); + _s3WriteIndexRegister (&s3->crt_vga_3d4, 0x48, yhigh); +} + +static void +s3MoveCursor (ScreenPtr pScreen, int x, int y) +{ + SetupCursor (pScreen); + + if (!pCurPriv->has_cursor) + return; + + if (!pScreenPriv->enabled) + return; + + LockS3(s3c); + _s3UnlockExt(s3); + _s3MoveCursor (pScreen, x, y); + _s3LockExt(s3); + UnlockS3(s3c); +} + +static void +s3AllocCursorColors (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + CursorPtr pCursor = pCurPriv->pCursor; + xColorItem sourceColor, maskColor; + + KdAllocateCursorPixels (pScreen, 0, pCursor, + &pCurPriv->source, &pCurPriv->mask); + switch (pScreenPriv->screen->fb[0].bitsPerPixel) { + case 4: + pCurPriv->source |= pCurPriv->source << 4; + pCurPriv->mask |= pCurPriv->mask << 4; + case 8: + pCurPriv->source |= pCurPriv->source << 8; + pCurPriv->mask |= pCurPriv->mask << 8; + case 16: + pCurPriv->source |= pCurPriv->source << 16; + pCurPriv->mask |= pCurPriv->mask << 16; + } +} + +static void +_s3SetCursorColors (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + /* set foreground */ + /* Reset cursor color stack pointers */ + (void) _s3ReadIndexRegister(&s3->crt_vga_3d4, 0x45); + _s3WriteIndexRegister (&s3->crt_vga_3d4, 0x4a, pCurPriv->source); + _s3WriteIndexRegister (&s3->crt_vga_3d4, 0x4a, pCurPriv->source >> 8); + _s3WriteIndexRegister (&s3->crt_vga_3d4, 0x4a, pCurPriv->source >> 16); + + /* set background */ + /* Reset cursor color stack pointers */ + (void) _s3ReadIndexRegister(&s3->crt_vga_3d4, 0x45); + _s3WriteIndexRegister (&s3->crt_vga_3d4, 0x4b, pCurPriv->mask); + _s3WriteIndexRegister (&s3->crt_vga_3d4, 0x4b, pCurPriv->mask >> 8); + _s3WriteIndexRegister (&s3->crt_vga_3d4, 0x4b, pCurPriv->mask >> 16); +} + +void +s3RecolorCursor (ScreenPtr pScreen, int ndef, xColorItem *pdef) +{ + SetupCursor (pScreen); + CursorPtr pCursor = pCurPriv->pCursor; + xColorItem sourceColor, maskColor; + + if (!pCurPriv->has_cursor || !pCursor) + return; + + if (!pScreenPriv->enabled) + return; + + if (pdef) + { + while (ndef) + { + if (pdef->pixel == pCurPriv->source || + pdef->pixel == pCurPriv->mask) + break; + ndef--; + } + if (!ndef) + return; + } + s3AllocCursorColors (pScreen); + LockS3 (s3c); + _s3UnlockExt(s3); + _s3SetCursorColors (pScreen); + _s3LockExt (s3); + UnlockS3 (s3c); +} + +static void +s3LoadCursor (ScreenPtr pScreen, int x, int y) +{ + SetupCursor(pScreen); + CursorPtr pCursor = pCurPriv->pCursor; + CursorBitsPtr bits = pCursor->bits; + int w, h; + unsigned char r[2], g[2], b[2]; + unsigned long *ram; + unsigned long *msk, *mskLine, *src, *srcLine; + unsigned long and, xor; + int i, j; + int cursor_address; + int wsrc; + unsigned char ramdac_control_; + + /* + * Allocate new colors + */ + s3AllocCursorColors (pScreen); + + pCurPriv->pCursor = pCursor; + pCurPriv->xhot = pCursor->bits->xhot; + pCurPriv->yhot = pCursor->bits->yhot; + + /* + * Stick new image into cursor memory + */ + ram = (unsigned long *) s3s->cursor_base; + mskLine = (unsigned long *) bits->mask; + srcLine = (unsigned long *) bits->source; + + h = bits->height; + if (h > S3_CURSOR_HEIGHT) + h = S3_CURSOR_HEIGHT; + + wsrc = BitmapBytePad(bits->width) / 4; /* ulongs per line */ + + for (i = 0; i < S3_CURSOR_HEIGHT; i++) + { + msk = mskLine; + src = srcLine; + mskLine += wsrc; + srcLine += wsrc; + for (j = 0; j < S3_CURSOR_WIDTH / 32; j++) { + + unsigned long m, s; + + if (i < h && j < wsrc) + { + m = *msk++; + s = *src++; + xor = m & s; + and = ~m; + } + else + { + and = 0xffffffff; + xor = 0x00000000; + } + + S3AdjustBits32(and); + S3AdjustBits32(xor); + *ram++ = (and & 0xffff) | (xor << 16); + *ram++ = (and >> 16) | (xor & 0xffff0000); + } + } + + _s3WaitIdle (s3); + _s3UnlockExt (s3); + + /* Set new color */ + _s3SetCursorColors (pScreen); + + /* Enable the cursor */ + _s3WriteIndexRegister (&s3->crt_vga_3d4, 0x45, 0x01); + + /* Wait for VRetrace to make sure the position is read */ + _s3WaitVRetrace (s3); + + /* Move to new position */ + _s3MoveCursor (pScreen, x, y); + + _s3LockExt (s3); + UnlockS3(s3c); +} + +static void +s3UnloadCursor (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + LockS3 (s3c); + _s3UnlockExt(s3); + + /* Disable cursor */ + _s3WriteIndexRegister (&s3->crt_vga_3d4, 0x45, 0); + + _s3LockExt(s3); + UnlockS3 (s3c); +} + +static Bool +s3RealizeCursor (ScreenPtr pScreen, CursorPtr pCursor) +{ + SetupCursor(pScreen); + + if (!pScreenPriv->enabled) + return TRUE; + + /* miRecolorCursor does this */ + if (pCurPriv->pCursor == pCursor) + { + if (pCursor) + { +#ifdef FB_OLD_SCREEN + short x, y; +#else + int x, y; +#endif + + miPointerPosition (&x, &y); + s3LoadCursor (pScreen, x, y); + } + } + return TRUE; +} + +static Bool +s3UnrealizeCursor (ScreenPtr pScreen, CursorPtr pCursor) +{ + return TRUE; +} + +static void +s3SetCursor (ScreenPtr pScreen, CursorPtr pCursor, int x, int y) +{ + SetupCursor(pScreen); + + pCurPriv->pCursor = pCursor; + + if (!pScreenPriv->enabled) + return; + + if (pCursor) + s3LoadCursor (pScreen, x, y); + else + s3UnloadCursor (pScreen); +} + +miPointerSpriteFuncRec s3PointerSpriteFuncs = { + s3RealizeCursor, + s3UnrealizeCursor, + s3SetCursor, + s3MoveCursor, +}; + +static void +s3QueryBestSize (int class, + unsigned short *pwidth, unsigned short *pheight, + ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + switch (class) + { + case CursorShape: + if (*pwidth > pCurPriv->width) + *pwidth = pCurPriv->width; + if (*pheight > pCurPriv->height) + *pheight = pCurPriv->height; + if (*pwidth > pScreen->width) + *pwidth = pScreen->width; + if (*pheight > pScreen->height) + *pheight = pScreen->height; + break; + default: + fbQueryBestSize (class, pwidth, pheight, pScreen); + break; + } +} + +Bool +s3CursorInit (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + if (!s3s->cursor_base) + { + pCurPriv->has_cursor = FALSE; + return FALSE; + } + + pCurPriv->width = S3_CURSOR_WIDTH; + pCurPriv->height= S3_CURSOR_HEIGHT; + pScreen->QueryBestSize = s3QueryBestSize; + miPointerInitialize (pScreen, + &s3PointerSpriteFuncs, + &kdPointerScreenFuncs, + FALSE); + pCurPriv->has_cursor = TRUE; + pCurPriv->pCursor = NULL; + return TRUE; +} + +void +s3CursorEnable (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + if (pCurPriv->has_cursor) + { + if (pCurPriv->pCursor) + { +#ifdef FB_OLD_SCREEN + short x, y; +#else + int x, y; +#endif + + miPointerPosition (&x, &y); + s3LoadCursor (pScreen, x, y); + } + else + s3UnloadCursor (pScreen); + } +} + +void +s3CursorDisable (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + if (!pScreenPriv->enabled) + return; + + if (pCurPriv->has_cursor) + { + if (pCurPriv->pCursor) + { + s3UnloadCursor (pScreen); + } + } +} + +void +s3CursorFini (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + pCurPriv->pCursor = NULL; +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/trio/s3.h +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/trio/s3.h @@ -0,0 +1,1203 @@ +/* + * Id: s3.h,v 1.1 1999/11/02 08:17:24 keithp Exp $ + * + * Copyright © 1999 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/trio/s3.h,v 1.4 2000/05/06 22:17:53 keithp Exp $ */ + +#ifndef _S3_H_ +#define _S3_H_ + +#include "kdrive.h" + +#define PLATFORM 300 + +#define DRAW_DEBUG(a) + +#define DEBUG_S3INIT (DEBUG_ACCEL) +#define DEBUG_CRTC (DEBUG_ACCEL+1) +#define DEBUG_PATTERN (DEBUG_ACCEL+2) +#define DEBUG_RECT (DEBUG_ACCEL+3) +#define DEBUG_PAINT_WINDOW (DEBUG_ACCEL+4) +#define DEBUG_SET (DEBUG_ACCEL+5) +#define DEBUG_RENDER (DEBUG_ACCEL+6) +#define DEBUG_REGISTERS (DEBUG_ACCEL+7) +#define DEBUG_ARCS (DEBUG_ACCEL+8) +#define DEBUG_TEXT (DEBUG_ACCEL+9) +#define DEBUG_POLYGON (DEBUG_ACCEL+10) +#define DEBUG_CLIP (DEBUG_ACCEL+11) + +/* VESA Approved Register Definitions */ + +/* + * Linear Addressing 000 0000 - 0ff ffff (16m) + * Image data transfer 100 0000 - 100 7fff (32k) + * PCI config 100 8000 - 100 8043 + * Packed enhanced regs 100 8100 - 100 814a + * Streams regs 100 8180 - 100 81ff + * Current Y pos 100 82e8 + * CRT VGA 3b? regs 100 83b0 - 100 83bf + * CRT VGA 3c? regs 100 83c0 - 100 83cf + * CRT VGA 3d? regs 100 83d0 - 100 83df + * Subsystem status (42e8h) 100 8504 + * Advanced function (42e8h) 100 850c + * Enhanced regs 100 86e8 - 100 eeea + * Local peripheral bus 100 ff00 - 100 ff5c + * + * We don't care about the image transfer or PCI regs, so + * this structure starts at the packed enhanced regs + */ + +typedef volatile CARD32 VOL32; +typedef volatile CARD16 VOL16; +typedef volatile CARD8 VOL8; + +typedef volatile struct _s3 { + VOL32 alt_curxy; /* 8100 */ + VOL32 _pad0; /* 8104 */ + VOL32 alt_step; /* 8108 */ + VOL32 _pad1; /* 810c */ + VOL32 err_term; /* 8110 */ + VOL32 _pad2; /* 8114 */ + VOL32 cmd_gp_stat; /* 8118 */ + VOL32 short_stroke; /* 811c */ + VOL32 bg; /* 8120 */ + VOL32 fg; /* 8124 */ + VOL32 write_mask; /* 8128 */ + VOL32 read_mask; /* 812c */ + VOL32 color_cmp; /* 8130 */ + VOL32 alt_mix; /* 8134 */ + VOL32 scissors_tl; /* 8138 */ + VOL32 scissors_br; /* 813c */ + VOL32 pix_cntl_mult_misc2; /* 8140 */ + VOL32 mult_misc_read_sel; /* 8144 */ + VOL32 alt_pcnt; /* 8148 min_axis_pcnt, maj_axis_pcnt */ + VOL8 _pad3[0x19c]; /* 814c */ + VOL16 cur_y; /* 82e8 */ + VOL8 _pad4[0xc6]; /* 82ea */ + + VOL8 crt_vga_3b0; /* 83b0 */ + VOL8 crt_vga_3b1; /* 83b1 */ + VOL8 crt_vga_3b2; /* 83b2 */ + VOL8 crt_vga_3b3; /* 83b3 */ + VOL8 crt_vga_3b4; /* 83b4 */ + VOL8 crt_vga_3b5; /* 83b5 */ + VOL8 crt_vga_3b6; /* 83b6 */ + VOL8 crt_vga_3b7; /* 83b7 */ + VOL8 crt_vga_3b8; /* 83b8 */ + VOL8 crt_vga_3b9; /* 83b9 */ + VOL8 crt_vga_3ba; /* 83ba */ + VOL8 crt_vga_3bb; /* 83bb */ + VOL8 crt_vga_3bc; /* 83bc */ + VOL8 crt_vga_3bd; /* 83bd */ + VOL8 crt_vga_3be; /* 83be */ + VOL8 crt_vga_3bf; /* 83bf */ + + VOL8 crt_vga_3c0; /* 83c0 */ + VOL8 crt_vga_3c1; /* 83c1 */ + VOL8 crt_vga_3c2; /* 83c2 */ + VOL8 crt_vga_3c3; /* 83c3 */ + VOL8 crt_vga_3c4; /* 83c4 */ + VOL8 crt_vga_3c5; /* 83c5 */ + VOL8 crt_vga_dac_ad_mk; /* 83c6 */ + VOL8 crt_vga_dac_rd_ad; /* 83c7 */ + VOL8 crt_vga_dac_wt_ad; /* 83c8 */ + VOL8 crt_vga_dac_data; /* 83c9 */ + VOL8 crt_vga_3ca; /* 83ca */ + VOL8 crt_vga_3cb; /* 83cb */ + VOL8 crt_vga_3cc; /* 83cc */ + VOL8 crt_vga_3cd; /* 83cd */ + VOL8 crt_vga_3ce; /* 83ce */ + VOL8 crt_vga_3cf; /* 83cf */ + + VOL8 crt_vga_3d0; /* 83d0 */ + VOL8 crt_vga_3d1; /* 83d1 */ + VOL8 crt_vga_3d2; /* 83d2 */ + VOL8 crt_vga_3d3; /* 83d3 */ + VOL8 crt_vga_3d4; /* 83d4 */ + VOL8 crt_vga_3d5; /* 83d5 */ + VOL8 crt_vga_3d6; /* 83d6 */ + VOL8 crt_vga_3d7; /* 83d7 */ + VOL8 crt_vga_3d8; /* 83d8 */ + VOL8 crt_vga_3d9; /* 83d9 */ + VOL8 crt_vga_status_1; /* 83da */ + VOL8 crt_vga_3db; /* 83db */ + VOL8 crt_vga_3dc; /* 83dc */ + VOL8 crt_vga_3dd; /* 83dd */ + VOL8 crt_vga_3de; /* 83de */ + VOL8 crt_vga_3df; /* 83df */ + + VOL8 _pad5[0x124]; /* 83e0 */ + VOL16 subsys_status; /* 8504 */ + VOL8 _pad6[0x6]; /* 8506 */ + VOL16 adv_control; /* 850c */ + VOL8 _pad7[0x1da]; /* 850e */ + VOL16 cur_x; /* 86e8 */ + VOL8 _pad8[0x3fe]; /* 86ea */ + VOL16 desty_axstp; /* 8ae8 */ + VOL8 _pad9[0x3fe]; /* 8aea */ + VOL16 destx_diastp; /* 8ee8 */ + VOL8 _pad10[0x3fe]; /* 8eea */ + VOL16 enh_err_term; /* 92e8 */ + VOL8 _pad11[0x3fe]; /* 92ea */ + VOL16 maj_axis_pcnt; /* 96e8 */ + VOL8 _pad12[0x3fe]; /* 96ea */ + VOL16 enh_cmd_gp_stat; /* 9ae8 */ + VOL8 _pad13[0x3fe]; /* 9aea */ + VOL16 enh_short_stroke; /* 9ee8 */ + VOL8 _pad14[0x3fe]; /* 9eea */ + VOL16 enh_bg; /* a2e8 */ + VOL8 _pad15[0x3fe]; /* a2ea */ + VOL16 enh_fg; /* a6e8 */ + VOL8 _pad16[0x3fe]; /* a6ea */ + VOL16 enh_wrt_mask; /* aae8 */ + VOL8 _pad17[0x3fe]; /* aaea */ + VOL16 enh_rd_mask; /* aee8 */ + VOL8 _pad18[0x3fe]; /* aeea */ + VOL16 enh_color_cmp; /* b2e8 */ + VOL8 _pad19[0x3fe]; /* b2ea */ + VOL16 enh_bg_mix; /* b6e8 */ + VOL8 _pad20[0x3fe]; /* b6ea */ + VOL16 enh_fg_mix; /* bae8 */ + VOL8 _pad21[0x3fe]; /* baea */ + VOL16 enh_rd_reg_dt; /* bee8 */ + VOL8 _pad22[0x23fe]; /* beea */ + VOL32 pix_trans; /* e2e8 */ +} S3, *S3Ptr; + +#define VGA_STATUS_1_DTM 0x01 +#define VGA_STATUS_1_VSY 0x08 + +#define DAC_MASK 0x03c6 +#define DAC_R_INDEX 0x03c7 +#define DAC_W_INDEX 0x03c8 +#define DAC_DATA 0x03c9 +#define DISP_STAT 0x02e8 +#define H_TOTAL 0x02e8 +#define H_DISP 0x06e8 +#define H_SYNC_STRT 0x0ae8 +#define H_SYNC_WID 0x0ee8 +#define V_TOTAL 0x12e8 +#define V_DISP 0x16e8 +#define V_SYNC_STRT 0x1ae8 +#define V_SYNC_WID 0x1ee8 +#define DISP_CNTL 0x22e8 +#define ADVFUNC_CNTL 0x4ae8 +#define SUBSYS_STAT 0x42e8 +#define SUBSYS_CNTL 0x42e8 +#define ROM_PAGE_SEL 0x46e8 +#define CUR_Y 0x82e8 +#define CUR_X 0x86e8 +#define DESTY_AXSTP 0x8ae8 +#define DESTX_DIASTP 0x8ee8 +#define ERR_TERM 0x92e8 +#define MAJ_AXIS_PCNT 0x96e8 +#define GP_STAT 0x9ae8 +#define CMD 0x9ae8 +#define SHORT_STROKE 0x9ee8 +#define BKGD_COLOR 0xa2e8 +#define FRGD_COLOR 0xa6e8 +#define WRT_MASK 0xaae8 +#define RD_MASK 0xaee8 +#define COLOR_CMP 0xb2e8 +#define BKGD_MIX 0xb6e8 +#define FRGD_MIX 0xbae8 +#define MULTIFUNC_CNTL 0xbee8 +#define MIN_AXIS_PCNT 0x0000 +#define SCISSORS_T 0x1000 +#define SCISSORS_L 0x2000 +#define SCISSORS_B 0x3000 +#define SCISSORS_R 0x4000 +#define MEM_CNTL 0x5000 +#define PATTERN_L 0x8000 +#define PATTERN_H 0x9000 +#define PIX_CNTL 0xa000 +#define CONTROL_MISC2 0xd000 +#define PIX_TRANS 0xe2e8 + +/* Advanced Function Control Regsiter */ +#define CLKSEL 0x0004 +#define DISABPASSTHRU 0x0001 + +/* Graphics Processor Status Register */ + +#define GPNSLOT 13 + +#define GPBUSY_1 0x0080 +#define GPBUSY_2 0x0040 +#define GPBUSY_3 0x0020 +#define GPBUSY_4 0x0010 +#define GPBUSY_5 0x0008 +#define GPBUSY_6 0x0004 +#define GPBUSY_7 0x0002 +#define GPBUSY_8 0x0001 +#define GPBUSY_9 0x8000 +#define GPBUSY_10 0x4000 +#define GPBUSY_11 0x2000 +#define GPBUSY_12 0x1000 +#define GPBUSY_13 0x0800 + +#define GPEMPTY 0x0400 +#define GPBUSY 0x0200 +#define DATDRDY 0x0100 + +/* Command Register */ +#define CMD_NOP 0x0000 +#define CMD_LINE 0x2000 +#define CMD_RECT 0x4000 +#define CMD_RECTV1 0x6000 +#define CMD_RECTV2 0x8000 +#define CMD_LINEAF 0xa000 +#define CMD_BITBLT 0xc000 +#define CMD_PATBLT 0xe000 +#define CMD_OP_MSK 0xe000 +#define BYTSEQ 0x1000 +#define _32BITNOPAD 0x0600 +#define _32BIT 0x0400 +#define _16BIT 0x0200 +#define _8BIT 0x0000 +#define PCDATA 0x0100 +#define INC_Y 0x0080 +#define YMAJAXIS 0x0040 +#define INC_X 0x0020 +#define DRAW 0x0010 +#define LINETYPE 0x0008 +#define LASTPIX 0x0004 /* Draw last pixel in line */ +#define PLANAR 0x0002 +#define WRTDATA 0x0001 + +/* Background Mix Register */ +#define BSS_BKGDCOL 0x0000 +#define BSS_FRGDCOL 0x0020 +#define BSS_PCDATA 0x0040 +#define BSS_BITBLT 0x0060 + +/* Foreground Mix Register */ +#define FSS_BKGDCOL 0x0000 +#define FSS_FRGDCOL 0x0020 +#define FSS_PCDATA 0x0040 +#define FSS_BITBLT 0x0060 + +/* The Mixes */ +#define MIX_MASK 0x001f + +#define MIX_NOT_DST 0x0000 +#define MIX_0 0x0001 +#define MIX_1 0x0002 +#define MIX_DST 0x0003 +#define MIX_NOT_SRC 0x0004 +#define MIX_XOR 0x0005 +#define MIX_XNOR 0x0006 +#define MIX_SRC 0x0007 +#define MIX_NAND 0x0008 +#define MIX_NOT_SRC_OR_DST 0x0009 +#define MIX_SRC_OR_NOT_DST 0x000a +#define MIX_OR 0x000b +#define MIX_AND 0x000c +#define MIX_SRC_AND_NOT_DST 0x000d +#define MIX_NOT_SRC_AND_DST 0x000e +#define MIX_NOR 0x000f + +#define MIX_MIN 0x0010 +#define MIX_DST_MINUS_SRC 0x0011 +#define MIX_SRC_MINUS_DST 0x0012 +#define MIX_PLUS 0x0013 +#define MIX_MAX 0x0014 +#define MIX_HALF__DST_MINUS_SRC 0x0015 +#define MIX_HALF__SRC_MINUS_DST 0x0016 +#define MIX_AVERAGE 0x0017 +#define MIX_DST_MINUS_SRC_SAT 0x0018 +#define MIX_SRC_MINUS_DST_SAT 0x001a +#define MIX_HALF__DST_MINUS_SRC_SAT 0x001c +#define MIX_HALF__SRC_MINUS_DST_SAT 0x001e +#define MIX_AVERAGE_SAT 0x001f + +/* Pixel Control Register */ +#define MIXSEL_FRGDMIX 0x0000 +#define MIXSEL_PATT 0x0040 +#define MIXSEL_EXPPC 0x0080 +#define MIXSEL_EXPBLT 0x00c0 +#define COLCMPOP_F 0x0000 +#define COLCMPOP_T 0x0008 +#define COLCMPOP_GE 0x0010 +#define COLCMPOP_LT 0x0018 +#define COLCMPOP_NE 0x0020 +#define COLCMPOP_EQ 0x0028 +#define COLCMPOP_LE 0x0030 +#define COLCMPOP_GT 0x0038 +#define PLANEMODE 0x0004 + +#define FIFO_SLOTS 13 + +#define GPSLOT(n) (1 << ((n) > 8 ? (15 - ((n) - 9)) : (8 - (n)))) + +/* Wait for n slots to become available */ +#if 0 +#define _s3WaitSlots(s3,n) { \ + DRAW_DEBUG ((DEBUG_CRTC, "_s3WaitSlots 0x%x %d", (s3)->cmd_gp_stat, n)); \ + while (((s3)->cmd_gp_stat & GPSLOT(n)) != 0); \ + DRAW_DEBUG ((DEBUG_CRTC, " s3 0x%x %d slots ready", (s3)->cmd_gp_stat, n)); \ +} +#else +/* let PCI retries solve this problem */ +#define _s3WaitSlots(s3,n) +#endif + +/* Wait until queue is empty */ +#define _s3WaitEmpty(s3) { \ + DRAW_DEBUG ((DEBUG_CRTC, "_s3WaitEmpty 0x%x", (s3)->cmd_gp_stat)); \ + while (!((s3)->cmd_gp_stat & GPEMPTY)) ; \ + DRAW_DEBUG ((DEBUG_CRTC, " s3 empty")); \ +} + +/* Wait until GP is idle and queue is empty */ +#define _s3WaitIdleEmpty(s3) { \ + DRAW_DEBUG ((DEBUG_CRTC, "_s3WaitIdleEmpty 0x%x", (s3)->cmd_gp_stat)); \ + while (((s3)->cmd_gp_stat & (GPBUSY|GPEMPTY)) != GPEMPTY) ; \ + DRAW_DEBUG ((DEBUG_CRTC, " s3 idle empty")); \ +} + +/* Wait until GP is idle */ +#define _s3WaitIdle(s3) { \ + DRAW_DEBUG ((DEBUG_CRTC, "_s3WaitIdle 0x%x", (s3)->cmd_gp_stat)); \ + while ((s3)->cmd_gp_stat & GPBUSY) ; \ + DRAW_DEBUG ((DEBUG_CRTC, " s3 idle")); \ +} + +typedef struct _s3Cursor { + int width, height; + int xhot, yhot; + Bool has_cursor; + CursorPtr pCursor; + Pixel source, mask; +} S3Cursor; + +typedef struct _s3PatternCache { + int id; + int x, y; +} S3PatternCache; + +typedef struct _s3Patterns { + S3PatternCache *cache; + int ncache; + int last_used; + int last_id; +} S3Patterns; + +typedef struct _crtc { + CARD8 h_total_0_7; /* CR0 */ + CARD8 h_display_end_0_7; /* CR1 */ + CARD8 h_blank_start_0_7; /* CR2 */ + union { + struct { + CARD8 _h_blank_end_0_4 : 5; + CARD8 _display_skew : 2; + CARD8 : 1; + } _h_blank_end_s; + CARD8 __h_blank_end; /* CR3 */ + } _h_blank_end_u; +#define h_blank_end_0_4 _h_blank_end_u._h_blank_end_s._h_blank_end_0_4 +#define display_skew _h_blank_end_u._h_blank_end_s._display_skew +#define _h_blank_end _h_blank_end_u.__h_blank_end + + CARD8 h_sync_start_0_7; /* CR4 */ + + union { + struct { + CARD8 _h_sync_end_0_4 : 5; + CARD8 _horizontal_skew : 2; + CARD8 _h_blank_end_5 : 1; + } _h_sync_end_s; + CARD8 __h_sync_end; /* CR5 */ + } _h_sync_end_u; + +#define h_sync_end_0_4 _h_sync_end_u._h_sync_end_s._h_sync_end_0_4 +#define horizontal_skew _h_sync_end_u._h_sync_end_s._horizontal_skew +#define h_blank_end_5 _h_sync_end_u._h_sync_end_s._h_blank_end_5 +#define _h_sync_end _h_sync_end_u.__h_sync_end + + CARD8 v_total_0_7; /* CR6 */ + + union { + struct { + CARD8 _v_total_8 : 1; + CARD8 _v_display_end_8 : 1; + CARD8 _v_retrace_start_8 : 1; + CARD8 _v_blank_start_8 : 1; + CARD8 _line_compare_8 : 1; + CARD8 _v_total_9 : 1; + CARD8 _v_display_end_9 : 1; + CARD8 _v_retrace_start_9 : 1; + } _crtc_overflow_s; + CARD8 _crtc_overflow; /* CR7 */ + } _crtc_overflow_u; + +#define v_total_8 _crtc_overflow_u._crtc_overflow_s._v_total_8 +#define v_display_end_8 _crtc_overflow_u._crtc_overflow_s._v_display_end_8 +#define v_retrace_start_8 _crtc_overflow_u._crtc_overflow_s._v_retrace_start_8 +#define v_blank_start_8 _crtc_overflow_u._crtc_overflow_s._v_blank_start_8 +#define line_compare_8 _crtc_overflow_u._crtc_overflow_s._line_compare_8 +#define v_total_9 _crtc_overflow_u._crtc_overflow_s._v_total_9 +#define v_display_end_9 _crtc_overflow_u._crtc_overflow_s._v_display_end_9 +#define v_retrace_start_9 _crtc_overflow_u._crtc_overflow_s._v_retrace_start_9 +#define crtc_overflow _crtc_overflow_u._crtc_overflow + + CARD8 preset_row_scan; /* CR8 (unused) */ + + union { + struct { + CARD8 _max_scan_line : 5; + CARD8 _v_blank_start_9 : 1; + CARD8 _line_compare_9 : 1; + CARD8 _double_scan : 1; + } _max_scan_line_s; + CARD8 __max_scan_line; /* CR9 */ + } _max_scan_line_u; + +#define max_scan_line _max_scan_line_u._max_scan_line_s._max_scan_line +#define v_blank_start_9 _max_scan_line_u._max_scan_line_s._v_blank_start_9 +#define line_compare_9 _max_scan_line_u._max_scan_line_s._line_compare_9 +#define double_scan _max_scan_line_u._max_scan_line_s._double_scan +#define _max_scan_line _max_scan_line_u.__max_scan_line + + CARD8 cursor_start; + CARD8 cursor_end; + + CARD8 start_address_8_15; /* CRC */ + CARD8 start_address_0_7; /* CRD */ + + CARD8 cursor_loc_high; + CARD8 cursor_loc_low; + + CARD8 v_retrace_start_0_7; /* CR10 */ + union { + struct { + CARD8 _v_retrace_end_0_3 : 4; + CARD8 _clear_v_retrace_int : 1; + CARD8 _disable_v_retrace_int : 1; + CARD8 _refresh_cycle_select : 1; + CARD8 _lock_crtc : 1; + } _v_retrace_end_s; + CARD8 __v_retrace_end; /* CR11 */ + } _v_retrace_end_u; + +#define v_retrace_end_0_3 _v_retrace_end_u._v_retrace_end_s._v_retrace_end_0_3 +#define clear_v_retrace_int _v_retrace_end_u._v_retrace_end_s._clear_v_retrace_int +#define disable_v_retrace_int _v_retrace_end_u._v_retrace_end_s._disable_v_retrace_int +#define refresh_cycle_select _v_retrace_end_u._v_retrace_end_s._refresh_cycle_select +#define lock_crtc _v_retrace_end_u._v_retrace_end_s._lock_crtc +#define _v_retrace_end _v_retrace_end_u.__v_retrace_end + + CARD8 v_display_end_0_7; /* CR12 */ + + CARD8 screen_off_0_7; /* CR13 */ + + union { + struct { + CARD8 _underline_location : 5; + CARD8 _count_by_four : 1; + CARD8 _doubleword_mode : 1; + CARD8 : 1; + } _underline_location_s; + CARD8 __underline_location; /* CR14 (unused) */ + } _underline_location_u; + +#define underline_location _underline_location_u._underline_location_s._underline_location +#define count_by_four _underline_location_u._underline_location_s._count_by_four +#define doubleword_mode _underline_location_u._underline_location_s._doubleword_mode +#define _underline_location _underline_location_u.__underline_location + + CARD8 v_blank_start_0_7; /* CR15 */ + CARD8 v_blank_end_0_7; /* CR16 */ + + union { + struct { + CARD8 _two_bk_cga : 1; + CARD8 _four_bk_cga : 1; + CARD8 _v_total_double : 1; + CARD8 _word_mode : 1; + CARD8 : 1; + CARD8 _address_wrap : 1; + CARD8 _byte_mode : 1; + CARD8 _hardware_reset : 1; + } _crtc_mode_s; + CARD8 _crtc_mode; /* CR17 (unused) */ + } _crtc_mode_u; + + CARD8 line_compare_0_7; /* CR18 (unused) */ + + union { + struct { + CARD8 _enable_base_offset : 1; + CARD8 _enable_two_page : 1; + CARD8 _enable_vga_16_bit : 1; + CARD8 _enhanced_mode_mapping : 1; + CARD8 _old_display_start : 2; + CARD8 _enable_high_speed_text : 1; + CARD8 : 1; + } _memory_configuration_s; + CARD8 _memory_configuration; /* CR31 (unused) */ + } _memory_configuration_u; + +#define memory_configuration _memory_configuration_u._memory_configuration +#define enable_base_offset _memory_configuration_u._memory_configuration_s._enable_base_offset +#define enable_two_page _memory_configuration_u._memory_configuration_s._enable_two_page +#define enable_vga_16_bit _memory_configuration_u._memory_configuration_s._enable_vga_16_bit +#define enhanved_mode_mapping _memory_configuration_u._memory_configuration_s._enhanced_mode_mapping +#define old_display_start _memory_configuration_u._memory_configuration_s._old_display_start +#define enable_high_speed_text _memory_configuration_u._memory_configuration_s._enable_high_speed_text + + union { + struct { + CARD8 _alt_refresh_count : 2; + CARD8 _enable_alt_refresh : 1; + CARD8 _enable_top_memory : 1; + CARD8 _enable_256_or_more : 1; + CARD8 _high_speed_text : 1; + CARD8 : 1; + CARD8 _pci_burst_disabled : 1; + } _misc_1_s; + CARD8 _misc_1; /* CR3A */ + } _misc_1_u; +#define misc_1 _misc_1_u._misc_1 +#define alt_refresh_count _misc_1_u._misc_1_s._alt_refresh_count +#define enable_alt_refresh _misc_1_u._misc_1_s._enable_alt_refresh +#define enable_top_memory _misc_1_u._misc_1_s._enable_top_memory +#define enable_256_or_more _misc_1_u._misc_1_s._enable_256_or_more +#define high_speed_text _misc_1_u._misc_1_s._high_speed_text +#define pci_burst_disabled _misc_1_u._misc_1_s._pci_burst_disabled + + CARD8 h_start_fifo_fetch_0_7; /* CR3B */ + + union { + struct { + CARD8 : 5; + CARD8 interlace : 1; + CARD8 : 2; + } _mode_control_s; + CARD8 _mode_control; /* CR42 */ + } _mode_control_u; + +#define mode_control _mode_control_u._mode_control + + union { + struct { + CARD8 : 2; + CARD8 _old_screen_off_8 : 1; + CARD8 : 4; + CARD8 h_counter_double_mode : 1; + } _extended_mode_s; + CARD8 _extended_mode; /* CR43 (unused) */ + } _extended_mode_u; + +#define extended_mode _extended_mode_u._extended_mode +#define old_screen_off_8 _extended_mode_u._extended_mode_s._old_screen_off_8 + + union { + struct { + CARD8 _hardware_cursor_enable : 1; + CARD8 : 3; + CARD8 _hardware_cursor_right : 1; + CARD8 : 3; + } _hardware_cursor_mode_s; + CARD8 _hardware_cursor_mode; /* CR45 */ + } _hardware_cursor_mode_u; + +#define hardware_cursor_mode _hardware_cursor_mode_u._hardware_cursor_mode +#define hardware_cursor_enable _hardware_cursor_mode_u._hardware_cursor_mode_s._hardware_cursor_enable + + CARD8 cursor_address_8_15; /* CR4C */ + CARD8 cursor_address_0_7; /* CR4D */ + + union { + struct { + CARD8 _ge_screen_width_2 : 1; + CARD8 : 3; + CARD8 _pixel_length : 2; + CARD8 _ge_screen_width_0_1 : 2; + } _extended_system_control_1_s; + CARD8 _extended_system_control_1; /* CR50 */ + } _extended_system_control_1_u; +#define ge_screen_width_2 _extended_system_control_1_u._extended_system_control_1_s._ge_screen_width_2 +#define pixel_length _extended_system_control_1_u._extended_system_control_1_s._pixel_length +#define ge_screen_width_0_1 _extended_system_control_1_u._extended_system_control_1_s._ge_screen_width_0_1 +#define extended_system_control_1 _extended_system_control_1_u._extended_system_control_1 + + union { + struct { + CARD8 : 4; + CARD8 _screen_off_8_9 : 2; + CARD8 : 2; + } _extended_system_control_2_s; + CARD8 _extended_system_control_2; /* CR51 */ + } _extended_system_control_2_u; +#define extended_system_control_2 _extended_system_control_2_u._extended_system_control_2 +#define screen_off_8_9 _extended_system_control_2_u._extended_system_control_2_s._screen_off_8_9 + + union { + struct { + CARD8 : 1; + CARD8 big_endian_linear : 2; + CARD8 mmio_select : 2; + CARD8 mmio_window : 1; + CARD8 swap_nibbles : 1; + CARD8 : 1; + } _extended_memory_control_s; + CARD8 _extended_memory_control; /* CR53 */ + } _extended_memory_control_u; +#define extended_memory_control _extended_memory_control_u._extended_memory_control + + union { + struct { + CARD8 : 2; + CARD8 _enable_gir : 1; + CARD8 : 1; + CARD8 _hardware_cursor_ms_x11 : 1; + CARD8 : 2; + CARD8 _tri_state_off_vclk : 1; + } _extended_ramdac_control_s; + CARD8 _extended_ramdac_control; /* CR55 */ + } _extended_ramdac_control_u; +#define extended_ramdac_control _extended_ramdac_control_u._extended_ramdac_control +#define hardware_cursor_ms_x11 _extended_ramdac_control_u._extended_ramdac_control_s._hardware_cursor_ms_x11 + + + union { + struct { + CARD8 _h_total_8 : 1; + CARD8 _h_display_end_8 : 1; + CARD8 _h_blank_start_8 : 1; + CARD8 _h_blank_extend : 1; /* extend h_blank by 64 */ + CARD8 _h_sync_start_8 : 1; + CARD8 _h_sync_extend : 1; /* extend h_sync by 32 */ + CARD8 _h_start_fifo_fetch_8 : 1; + CARD8 : 1; + } _extended_horizontal_overflow_s; + CARD8 _extended_horizontal_overflow; /* CR5D */ + } _extended_horizontal_overflow_u; +#define extended_horizontal_overflow _extended_horizontal_overflow_u._extended_horizontal_overflow +#define h_total_8 _extended_horizontal_overflow_u._extended_horizontal_overflow_s._h_total_8 +#define h_display_end_8 _extended_horizontal_overflow_u._extended_horizontal_overflow_s._h_display_end_8 +#define h_blank_start_8 _extended_horizontal_overflow_u._extended_horizontal_overflow_s._h_blank_start_8 +#define h_blank_extend _extended_horizontal_overflow_u._extended_horizontal_overflow_s._h_blank_extend +#define h_sync_start_8 _extended_horizontal_overflow_u._extended_horizontal_overflow_s._h_sync_start_8 +#define h_sync_extend _extended_horizontal_overflow_u._extended_horizontal_overflow_s._h_sync_extend +#define h_start_fifo_fetch_8 _extended_horizontal_overflow_u._extended_horizontal_overflow_s._h_start_fifo_fetch_8 + + + union { + struct { + CARD8 _v_total_10 : 1; + CARD8 _v_display_end_10 : 1; + CARD8 _v_blank_start_10 : 1; + CARD8 : 1; + CARD8 _v_retrace_start_10 : 1; + CARD8 : 1; + CARD8 _line_compare_10 : 1; + CARD8 : 1; + } _extended_vertical_overflow_s; + CARD8 _extended_vertical_overflow; /* CR5E */ + } _extended_vertical_overflow_u; +#define extended_vertical_overflow _extended_vertical_overflow_u._extended_vertical_overflow +#define v_total_10 _extended_vertical_overflow_u._extended_vertical_overflow_s._v_total_10 +#define v_display_end_10 _extended_vertical_overflow_u._extended_vertical_overflow_s._v_display_end_10 +#define v_blank_start_10 _extended_vertical_overflow_u._extended_vertical_overflow_s._v_blank_start_10 +#define v_retrace_start_10 _extended_vertical_overflow_u._extended_vertical_overflow_s._v_retrace_start_10 +#define line_compare_10 _extended_vertical_overflow_u._extended_vertical_overflow_s._line_compare_10 + + + CARD8 l_parm_0_7; /* CR62 (undocumented) */ + + union { + struct { + CARD8 : 3; + CARD8 _delay_blank : 2; + CARD8 : 3; + } _extended_misc_control_s; + CARD8 _extended_misc_control; /* CR65 */ + } _extended_misc_control_u; +#define extended_misc_control _extended_misc_control_u._extended_misc_control +#define delay_blank _extended_misc_control_u._extended_misc_control_s._delay_blank + + union { + struct { + CARD8 _v_clock_phase : 1; + CARD8 : 3; + CARD8 _color_mode : 4; + } _extended_misc_control_2_s; + CARD8 _extended_misc_control_2; /* CR67 */ + } _extended_misc_control_2_u; + +#define v_clock_phase _extended_misc_control_2_u._extended_misc_control_2_s._v_clock_phase +#define color_mode _extended_misc_control_2_u._extended_misc_control_2_s._color_mode +#define extended_misc_control_2 _extended_misc_control_2_u._extended_misc_control_2 + + + union { + struct { + CARD8 cas_oe_str : 2; + CARD8 ras_low : 1; + CARD8 ras_precharge : 1; + CARD8 : 3; + CARD8 _memory_bus_size : 1; /* 0 = 32, 1 = 32/64 */ + } _configuration_3_s; + CARD8 _configuration_3; /* CR68 */ + } _configuration_3_u; +#define configuration_3 _configuration_3_u._configuration_3 +#define memory_bus_size _configuration_3_u._configuration_3_s._memory_bus_size + + union { + struct { + CARD8 _start_address_16_19 : 4; + CARD8 : 4; + } _extended_system_control_3_s; + CARD8 _extended_system_control_3; /* CR69 */ + } _extended_system_control_3_u; +#define extended_system_control_3 _extended_system_control_3_u._extended_system_control_3 +#define start_address_16_19 _extended_system_control_3_u._extended_system_control_3_s._start_address_16_19 + + CARD8 extended_bios_5; /* CR6D */ + + union { + struct { + CARD8 dot_clock_vclki : 1; /* testing only */ + CARD8 vclki_with_vafc : 1; /* feature connector */ + CARD8 : 1; + CARD8 bpp_24_mode : 1; /* 24 bpp mode */ + CARD8 alt_color_mode : 4; /* feature connector mode */ + } _extended_sequencer_b_s; + CARD8 _extended_sequencer_b; /* SRB */ + } _extended_sequencer_b_u; + +#define extended_sequencer_b _extended_sequencer_b_u._extended_sequencer_b + + union extended_sequencer_d_u { + struct { + CARD8 enable_feature : 1; + CARD8 lpb_feature : 1; + CARD8 : 2; + CARD8 _hsync_control : 2; + CARD8 _vsync_control : 2; + } _extended_sequencer_d_s; + CARD8 _extended_sequencer_d; + } _extended_sequencer_d_u; + +#define extended_sequencer_d _extended_sequencer_d_u._extended_sequencer_d +#define hsync_control _extended_sequencer_d_u._extended_sequencer_d_s._hsync_control +#define vsync_control _extended_sequencer_d_u._extended_sequencer_d_s._vsync_control + + union { + struct { + CARD8 _dclk_pll_n : 5; + CARD8 _dclk_pll_r : 2; + CARD8 : 1; + } _dclk_value_low_s; + CARD8 _dclk_value_low; /* SR12 */ + } _dclk_value_low_u; + +#define dclk_value_low _dclk_value_low_u._dclk_value_low +#define dclk_pll_n_trio _dclk_value_low_u._dclk_value_low_s._dclk_pll_n +#define dclk_pll_r_trio _dclk_value_low_u._dclk_value_low_s._dclk_pll_r + + union { + struct { + CARD8 _dclk_pll_m : 7; + CARD8 : 1; + } _dclk_value_high_s; + CARD8 _dclk_value_high; /* SR13 */ + } _dclk_value_high_u; + +#define dclk_value_high _dclk_value_high_u._dclk_value_high +#define dclk_pll_m_trio _dclk_value_high_u._dclk_value_high_s._dclk_pll_m + + union { + struct { + CARD8 _mfrq_en : 1; + CARD8 _dfrq_en : 1; + CARD8 _mclk_out : 1; + CARD8 _vclk_out : 1; + CARD8 _dclk_over_2 : 1; + CARD8 _clk_load : 1; + CARD8 _dclk_invert : 1; + CARD8 _ena_2_cycle_write : 1; + } _control_2_s; + CARD8 _control_2; /* SR15 */ + } _control_2_u; + +#define control_2 _control_2_u._control_2 +#define mfrq_en _control_2_u._control_2_s._mfrq_en +#define dfrq_en _control_2_u._control_2_s._dfrq_en +#define mclk_out _control_2_u._control_2_s._mclk_out +#define vclk_out _control_2_u._control_2_s._vclk_out +#define dclk_over_2 _control_2_u._control_2_s._dclk_over_2 +#define clk_load _control_2_u._control_2_s._clk_load +#define dclk_invert _control_2_u._control_2_s._dclk_invert +#define ena_2_cycle_write _control_2_u._control_2_s._ena_2_cycle_write + + union { + struct { + CARD8 : 5; + CARD8 _dac_power_down : 1; + CARD8 _lut_write_control : 1; + CARD8 _enable_clock_double : 1; + } _ramdac_control_s; + CARD8 _ramdac_control; /* SR18 */ + } _ramdac_control_u; + +#define ramdac_control _ramdac_control_u._ramdac_control +#define enable_clock_double _ramdac_control_u._ramdac_control_s._enable_clock_double + + union { + struct { + CARD8 _dclk_pll_n : 6; + CARD8 _dclk_pll_r : 2; + } _dclk_value_low_s; + CARD8 _dclk_value_low; /* SR36 */ + } _dclk_value_low_savage_u; + +#define dclk_value_low_savage _dclk_value_low_savage_u._dclk_value_low +#define dclk_pll_n_savage_0_5 _dclk_value_low_savage_u._dclk_value_low_s._dclk_pll_n +#define dclk_pll_r_savage_0_1 _dclk_value_low_savage_u._dclk_value_low_s._dclk_pll_r + + CARD8 dclk_pll_m0_savage_0_7; /* SR37 */ + CARD8 dclk_pll_m1_savage_0_7; /* SR38 */ + + struct { + CARD8 _dclk_pll_m : 8; + } _dclk_value_high_s_savage; + + union { + struct { + CARD8 _dclk_select : 1; + CARD8 : 1; + CARD8 _dclk_pll_r_2 : 1; + CARD8 _dclk_pll_m_8 : 1; + CARD8 _dclk_pll_n_6 : 1; + CARD8 _pce : 1; + CARD8 _ccg : 1; + CARD8 _csp : 1; + } _extended_seq_39_s; + CARD8 _extended_seq_39; /* SR39 */ + } _extended_seq_39_u; + +#define extended_seq_39 _extended_seq_39_u._extended_seq_39 +#define dclk_pll_select_savage _extended_seq_39_u._extended_seq_39_s._dclk_select +#define dclk_pll_r_savage_2 _extended_seq_39_u._extended_seq_39_s._dclk_pll_r_2 +#define dclk_pll_m_savage_8 _extended_seq_39_u._extended_seq_39_s._dclk_pll_m_8 +#define dclk_pll_n_savage_6 _extended_seq_39_u._extended_seq_39_s._dclk_pll_n_6 + + /* computed values */ + CARD16 ge_screen_pitch; + CARD8 bits_per_pixel; + CARD8 depth; + CARD8 double_pixel_mode; + CARD16 pixel_width; +} S3Crtc; + +#define crtc_v_total(crtc) ((crtc)->v_total_0_7 | \ + ((crtc)->v_total_8 << 8) | \ + ((crtc)->v_total_9 << 9) | \ + ((crtc)->v_total_10 << 10)) + +#define crtc_set_v_total(crtc,v) { \ + ((crtc))->v_total_0_7 = (v); \ + ((crtc))->v_total_8 = (v) >> 8; \ + ((crtc))->v_total_9 = (v) >> 9; \ + ((crtc))->v_total_10 = (v) >> 10; \ +} + +#define crtc_v_display_end(crtc) ((crtc)->v_display_end_0_7 | \ + ((crtc)->v_display_end_8 << 8) | \ + ((crtc)->v_display_end_9 << 9) | \ + ((crtc)->v_display_end_10 << 10)) + +#define crtc_set_v_display_end(crtc,v) {\ + ((crtc))->v_display_end_0_7 = (v); \ + ((crtc))->v_display_end_8 = (v) >> 8; \ + ((crtc))->v_display_end_9 = (v) >> 9; \ + ((crtc))->v_display_end_10 = (v) >> 10; \ +} + +#define crtc_v_retrace_start(crtc) ((crtc)->v_retrace_start_0_7 | \ + ((crtc)->v_retrace_start_8 << 8) | \ + ((crtc)->v_retrace_start_9 << 9) | \ + ((crtc)->v_retrace_start_10 << 10)) + +#define crtc_set_v_retrace_start(crtc,v) {\ + ((crtc))->v_retrace_start_0_7 = (v); \ + ((crtc))->v_retrace_start_8 = (v) >> 8; \ + ((crtc))->v_retrace_start_9 = (v) >> 9; \ + ((crtc))->v_retrace_start_10 = (v) >> 10; \ +} + +#define crtc_v_blank_start(crtc) ((crtc)->v_blank_start_0_7 | \ + ((crtc)->v_blank_start_8 << 8) | \ + ((crtc)->v_blank_start_9 << 9) | \ + ((crtc)->v_blank_start_10 << 10)) + +#define crtc_set_v_blank_start(crtc,v) {\ + ((crtc))->v_blank_start_0_7 = (v); \ + ((crtc))->v_blank_start_8 = (v) >> 8; \ + ((crtc))->v_blank_start_9 = (v) >> 9; \ + ((crtc))->v_blank_start_10 = (v) >> 10; \ +} + +#define crtc_h_total(crtc) ((crtc)->h_total_0_7 | \ + ((crtc)->h_total_8 << 8)) + +#define crtc_set_h_total(crtc,v) {\ + ((crtc))->h_total_0_7 = (v); \ + ((crtc))->h_total_8 = (v) >> 8; \ +} + +#define crtc_h_display_end(crtc) ((crtc)->h_display_end_0_7 | \ + ((crtc)->h_display_end_8 << 8)) + +#define crtc_set_h_display_end(crtc,v) {\ + ((crtc))->h_display_end_0_7 = (v); \ + ((crtc))->h_display_end_8 = (v) >> 8; \ +} + +#define crtc_h_blank_start(crtc) ((crtc)->h_blank_start_0_7 | \ + ((crtc)->h_blank_start_8 << 8)) + +#define crtc_set_h_blank_start(crtc,v) {\ + ((crtc))->h_blank_start_0_7 = (v); \ + ((crtc))->h_blank_start_8 = (v) >> 8; \ +} + +#define crtc_h_blank_end(crtc) ((crtc)->h_blank_end_0_4 | \ + ((crtc)->h_blank_end_5 << 5)) + +#define crtc_set_h_blank_end(crtc,v) {\ + ((crtc))->h_blank_end_0_4 = (v); \ + ((crtc))->h_blank_end_5 = (v) >> 5; \ +} + +#define crtc_h_sync_start(crtc) ((crtc)->h_sync_start_0_7 | \ + ((crtc)->h_sync_start_8 << 8)) + +#define crtc_set_h_sync_start(crtc,v) {\ + ((crtc))->h_sync_start_0_7 = (v); \ + ((crtc))->h_sync_start_8 = (v) >> 8; \ +} + +#define crtc_h_sync_end(crtc) ((crtc)->h_sync_end_0_4) + +#define crtc_set_h_sync_end(crtc,v) {\ + ((crtc))->h_sync_end_0_4 = (v); \ +} + +#define crtc_screen_off(crtc) ((crtc)->screen_off_0_7 | \ + (((crtc)->screen_off_8_9 ? \ + ((crtc))->screen_off_8_9 : \ + ((crtc))->old_screen_off_8) << 8)) + +#define crtc_set_screen_off(crtc,v) {\ + ((crtc))->screen_off_0_7 = (v); \ + ((crtc))->old_screen_off_8 = 0; \ + ((crtc))->screen_off_8_9 = (v) >> 8; \ +} + +#define crtc_ge_screen_width(crtc) ((crtc)->ge_screen_width_0_1 | \ + ((crtc)->ge_screen_width_2 << 2)) + +#define crtc_set_ge_screen_width(crtc,v) { \ + (crtc)->ge_screen_width_0_1 = (v); \ + (crtc)->ge_screen_width_2 = (v) >> 2; \ +} + +#define crtc_h_start_fifo_fetch(crtc) ((crtc)->h_start_fifo_fetch_0_7 | \ + ((crtc)->h_start_fifo_fetch_8 << 8)) + +#define crtc_set_h_start_fifo_fetch(crtc,v) {\ + (crtc)->h_start_fifo_fetch_0_7 = (v); \ + (crtc)->h_start_fifo_fetch_8 = (v) >> 8; \ +} + +#define crtc_start_address(crtc) ((crtc)->start_address_0_7 | \ + ((crtc)->start_address_8_15 << 8) | \ + ((crtc)->start_address_16_19 << 16)) + +#define crtc_set_start_address(crtc,v) {\ + (crtc)->start_address_0_7 = (v); \ + (crtc)->start_address_8_15 = (v) >> 8; \ + (crtc)->start_address_16_19 = (v) >> 16; \ +} + +#define crtc_line_compare(crtc) ((crtc)->line_compare_0_7 | \ + ((crtc)->line_compare_8 << 8) | \ + ((crtc)->line_compare_9 << 9) | \ + ((crtc)->line_compare_10 << 10)) + +#define crtc_set_line_compare(crtc,v) { \ + ((crtc))->line_compare_0_7 = (v); \ + ((crtc))->line_compare_8 = (v) >> 8; \ + ((crtc))->line_compare_9 = (v) >> 9; \ + ((crtc))->line_compare_10 = (v) >> 10; \ +} + + +#define GetCrtc(s3,i) _s3ReadIndexRegister (&(s3)->crt_vga_3d4, (i)) +#define PutCrtc(s3,i,v) _s3WriteIndexRegister (&(s3)->crt_vga_3d4, (i), (v)) + +#define GetSrtc(s3,i) _s3ReadIndexRegister (&(s3)->crt_vga_3c4, (i)) +#define PutSrtc(s3,i,v) _s3WriteIndexRegister (&(s3)->crt_vga_3c4, (i), (v)) + +#define S3_CLOCK_REF 14318 /* KHz */ + +#define S3_CLOCK(m,n,r) (S3_CLOCK_REF * ((m) + 2) / (((n) + 2) * (1 << (r)))) + +#if PLATFORM == 200 +#define S3_MAX_CLOCK 80000 /* KHz */ +#endif +#if PLATFORM == 300 +#define S3_MAX_CLOCK 135000 /* KHz */ +#endif + +typedef struct _s3Save { + CARD8 cursor_fg; + CARD8 cursor_bg; + CARD8 lock1; + CARD8 lock2; + CARD8 locksrtc; + CARD8 clock_mode; + CARD32 alt_mix; + CARD32 write_mask; + CARD32 fg; + CARD32 bg; + S3Crtc crtc; +} S3Save; + +typedef struct _s3CardInfo { + S3Ptr s3; /* pointer to register structure */ + int memory; /* amount of memory */ + CARD8 *frameBuffer; /* pointer to frame buffer */ + CARD8 *registers; /* pointer to register map */ + S3Save save; + Bool savage; + Bool need_sync; +} S3CardInfo; + +typedef struct _s3FbInfo { + CARD8 *offscreen; /* pointer to offscreen area */ + int offscreen_y; /* top y coordinate of offscreen area */ + int offscreen_x; /* top x coordinate of offscreen area */ + int offscreen_width; /* width of offscreen area */ + int offscreen_height; /* height of offscreen area */ + S3Patterns patterns; + CARD32 bitmap_offset; + int accel_stride; + int accel_bpp; +} S3FBInfo; + +typedef struct _s3ScreenInfo { + CARD8 *cursor_base; /* pointer to cursor area */ + S3Cursor cursor; + S3FBInfo fb[1]; +} S3ScreenInfo; + +#define LockS3(s3c) +#define UnlockS3(s3c) + +#define getS3CardInfo(kd) ((S3CardInfo *) ((kd)->card->driver)) +#define s3CardInfo(kd) S3CardInfo *s3c = getS3CardInfo(kd) + +#define getS3ScreenInfo(kd) ((S3ScreenInfo *) ((kd)->screen->driver)) +#define s3ScreenInfo(kd) S3ScreenInfo *s3s = getS3ScreenInfo(kd) + +Bool s3CardInit (KdCardInfo *); +Bool s3ScreenInit (KdScreenInfo *); +Bool s3Enable (ScreenPtr pScreen); +void s3Disable (ScreenPtr pScreen); +void s3Fini (ScreenPtr pScreen); + +Bool s3CursorInit (ScreenPtr pScreen); +void s3CursorEnable (ScreenPtr pScreen); +void s3CursorDisable (ScreenPtr pScreen); +void s3CursorFini (ScreenPtr pScreen); +void s3RecolorCursor (ScreenPtr pScreen, int ndef, xColorItem *pdefs); + +Bool s3DrawInit (ScreenPtr pScreen); +void s3DrawEnable (ScreenPtr pScreen); +void s3DrawSync (ScreenPtr pScreen); +void s3DrawDisable (ScreenPtr pScreen); +void s3DrawFini (ScreenPtr pScreen); + +void s3GetColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs); +void s3PutColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs); + +void S3InitCard (KdCardAttr *attr); + +void s3GetClock (int target, int *Mp, int *Np, int *Rp, int maxM, int maxN, int maxR); + +CARD8 _s3ReadIndexRegister (VOL8 *base, CARD8 index); +void _s3WriteIndexRegister (VOL8 *base, CARD8 index, CARD8 value); + +extern KdCardFuncs s3Funcs; + +/* + * Wait for the begining of the retrace interval + */ + +#define S3_RETRACE_LOOP_CHECK if (++_loop_count > 300000) {\ + DRAW_DEBUG ((DEBUG_FAILURE, "S3 wait loop failed at %s:%d", \ + __FILE__, __LINE__)); \ + break; \ +} + +#define _s3WaitVRetrace(s3) { \ + VOL8 *_status = &s3->crt_vga_status_1; \ + int _loop_count; \ + DRAW_DEBUG ((DEBUG_CRTC, "_s3WaitVRetrace 0x%x", *_status)); \ + _loop_count = 0; \ + while ((*_status & VGA_STATUS_1_VSY) != 0) S3_RETRACE_LOOP_CHECK; \ + _loop_count = 0; \ + while ((*_status & VGA_STATUS_1_VSY) == 0) S3_RETRACE_LOOP_CHECK; \ +} +/* + * Wait for the begining of the retrace interval + */ +#define _s3WaitVRetraceEnd(s3) { \ + VOL8 *_status = &s3->crt_vga_status_1; \ + int _loop_count; \ + DRAW_DEBUG ((DEBUG_CRTC, "_s3WaitVRetraceEnd 0x%x", *_status)); \ + _loop_count = 0; \ + while ((*_status & VGA_STATUS_1_VSY) == 0) S3_RETRACE_LOOP_CHECK; \ + _loop_count = 0; \ + while ((*_status & VGA_STATUS_1_VSY) != 0) S3_RETRACE_LOOP_CHECK; \ +} + +/* + * This extension register must contain a magic bit pattern to enable + * the remaining extended registers + */ + +#define _s3UnlockExt(s3) _s3WriteIndexRegister (&s3->crt_vga_3d4, 0x39, 0xa0) +#define _s3LockExt(s3) _s3WriteIndexRegister (&s3->crt_vga_3d4, 0x39, 0x00) + +#define S3_CURSOR_WIDTH 64 +#define S3_CURSOR_HEIGHT 64 +#define S3_CURSOR_SIZE ((S3_CURSOR_WIDTH * S3_CURSOR_HEIGHT + 7) / 8) + +#define S3_TILE_SIZE 8 + +#endif /* _S3_H_ */ --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/trio/s3cmap.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/trio/s3cmap.c @@ -0,0 +1,73 @@ +/* + * Id: s3cmap.c,v 1.1 1999/11/02 08:17:24 keithp Exp $ + * + * Copyright © 1999 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/trio/s3cmap.c,v 1.1 1999/11/19 13:54:05 hohndel Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "s3.h" + +void +s3GetColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs) +{ + KdScreenPriv(pScreen); + s3CardInfo(pScreenPriv); + S3Ptr s3 = s3c->s3; + VOL8 *dac_rd_ad = &s3->crt_vga_dac_rd_ad; + VOL8 *dac_data = &s3->crt_vga_dac_data; + + LockS3 (s3c); + while (ndef--) + { + *dac_rd_ad = pdefs->pixel; + pdefs->red = *dac_data << 10; + pdefs->green = *dac_data << 10; + pdefs->blue = *dac_data << 10; + pdefs++; + } + UnlockS3(s3c); +} + +void +s3PutColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs) +{ + KdScreenPriv(pScreen); + s3CardInfo(pScreenPriv); + S3Ptr s3 = s3c->s3; + VOL8 *dac_wt_ad = &s3->crt_vga_dac_wt_ad; + VOL8 *dac_data = &s3->crt_vga_dac_data; + + LockS3(s3c); + _s3WaitVRetrace (s3); + while (ndef--) + { + *dac_wt_ad = pdefs->pixel; + *dac_data = pdefs->red >> 10; + *dac_data = pdefs->green >> 10; + *dac_data = pdefs->blue >> 10; + pdefs++; + } + UnlockS3(s3c); +} + --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/trio/s3stub.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/trio/s3stub.c @@ -0,0 +1,68 @@ +/* + * Id: s3stub.c,v 1.1 1999/11/02 08:19:15 keithp Exp $ + * + * Copyright 1999 SuSE, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of SuSE not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. SuSE makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + * + * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE + * BE LIABLE FOR 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. + * + * Author: Keith Packard, SuSE, Inc. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/trio/s3stub.c,v 1.3 2000/02/23 20:30:13 dawes Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "s3.h" + +void +InitCard (char *name) +{ + KdCardAttr attr; + CARD32 count; + + count = 0; + while (LinuxFindPci (0x5333, 0x8904, count, &attr)) + { + KdCardInfoAdd (&s3Funcs, &attr, 0); + count++; + } +} + +void +InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv) +{ + KdInitOutput (pScreenInfo, argc, argv); +} + +void +InitInput (int argc, char **argv) +{ + KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs); +} + +void +ddxUseMsg (void) +{ + KdUseMsg(); +} + +int +ddxProcessArgument (int argc, char **argv, int i) +{ + return KdProcessArgument (argc, argv, i); +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/nvidia/nvidiavideo.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/nvidia/nvidiavideo.c @@ -0,0 +1,1018 @@ +/* + * $Id$ + * + * Copyright © 2003 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "nvidia.h" + +#include +#include "fourcc.h" + +#define MAKE_ATOM(a) MakeAtom(a, sizeof(a) - 1, TRUE) + +static Atom xvBrightness, xvSaturation, xvColorKey; + +#define IMAGE_MAX_WIDTH 720 +#define IMAGE_MAX_HEIGHT 576 + +static void +nvidiaStopVideo(KdScreenInfo *screen, pointer data, Bool exit) +{ + ScreenPtr pScreen = screen->pScreen; + KdScreenPriv(pScreen); + KdCardInfo *card = pScreenPriv->card; + NvidiaScreenInfo *nvidias = (NvidiaScreenInfo *) screen->driver; + NvidiaCardInfo *nvidiac = (NvidiaCardInfo *) card->driver; + NvidiaPortPrivPtr pPortPriv = nvidias->pAdaptor->pPortPrivates[0].ptr; + Reg *reg = nvidiac->reg; + MediaReg *media = nvidiac->media_reg; + + REGION_EMPTY(screen->pScreen, &pPortPriv->clip); + + if (!media) + return; + + if(pPortPriv->videoOn) + { + nvidiaWaitIdle (reg); + /* wait for buffer to be displayed */ + while (((media->TRIG_CNTL >> 5) & 1) != pPortPriv->currentBuf) + ; + /* wait for buffer to be finished */ + while (((media->TRIG_CNTL >> 6) & 1) != 0) + ; + nvidiaWaitAvail (reg, 1); + media->OVERLAY_SCALE_CNTL = 0; + pPortPriv->videoOn = FALSE; + nvidiaWaitIdle (reg); + } +} + +static int +nvidiaSetPortAttribute(KdScreenInfo *screen, + Atom attribute, + int value, + pointer data) +{ + ScreenPtr pScreen = screen->pScreen; + KdScreenPriv(pScreen); + KdCardInfo *card = pScreenPriv->card; + NvidiaScreenInfo *nvidias = (NvidiaScreenInfo *) screen->driver; + NvidiaCardInfo *nvidiac = (NvidiaCardInfo *) card->driver; + NvidiaPortPrivPtr pPortPriv = nvidias->pAdaptor->pPortPrivates[0].ptr; + MediaReg *media = nvidiac->media_reg; + + if(attribute == xvBrightness) + { + if(value < -1000) + value = -1000; + if (value > 1000) + value = 1000; + pPortPriv->brightness = value; + } + else if(attribute == xvSaturation) + { + if (value < -1000) + value = -1000; + if (value > 1000) + value = 1000; + pPortPriv->saturation = value; + } + else if(attribute == xvColorKey) + { + if (pPortPriv->colorKey != value) + { + pPortPriv->colorKey = value; + REGION_EMPTY(screen->pScreen, &pPortPriv->clip); + } + } + else + return BadMatch; + + return Success; +} + +static int +nvidiaGetPortAttribute(KdScreenInfo *screen, + Atom attribute, + int *value, + pointer data) +{ + NvidiaPortPrivPtr pPortPriv = (NvidiaPortPrivPtr)data; + + if(attribute == xvBrightness) + *value = pPortPriv->brightness; + else if(attribute == xvSaturation) + *value = pPortPriv->saturation; + else if(attribute == xvColorKey) + *value = pPortPriv->colorKey; + else + return BadMatch; + + return Success; +} + +static void +nvidiaQueryBestSize(KdScreenInfo *screen, + Bool motion, + short vid_w, + short vid_h, + short drw_w, + short drw_h, + unsigned int *p_w, + unsigned int *p_h, + pointer data) +{ + *p_w = drw_w; + *p_h = drw_h; +} + + +static void +nvidiaCopyPackedData(KdScreenInfo *screen, + unsigned char *buf, + int randr, + int srcPitch, + int dstPitch, + int srcW, + int srcH, + int top, + int left, + int h, + int w) +{ + ScreenPtr pScreen = screen->pScreen; + KdScreenPriv(pScreen); + KdCardInfo *card = pScreenPriv->card; + NvidiaScreenInfo *nvidias = (NvidiaScreenInfo *) screen->driver; + NvidiaCardInfo *nvidiac = (NvidiaCardInfo *) card->driver; + NvidiaPortPrivPtr pPortPriv = nvidias->pAdaptor->pPortPrivates[0].ptr; + CARD8 *src, *dst; + int srcDown, srcRight, srcNext; + int p; + + switch (randr & RR_Rotate_All) { + case RR_Rotate_0: + src = buf; + srcDown = srcPitch; + srcRight = 2; + break; + case RR_Rotate_90: + src = buf + (srcH - 1) * 2; + srcDown = -2; + srcRight = srcPitch; + break; + case RR_Rotate_180: + src = buf + srcPitch * (srcH - 1) + (srcW - 1) * 2; + srcDown = -srcPitch; + srcRight = -2; + break; + case RR_Rotate_270: + src = buf + srcPitch * (srcW - 1); + srcDown = 2; + srcRight = -srcPitch; + break; + } + + src = src + top*srcDown + left*srcRight; + + if (pPortPriv->currentBuf == 0) + dst = (CARD8 *) nvidias->vesa.fb + pPortPriv->YBuf0Offset; + else + dst = (CARD8 *) nvidias->vesa.fb + pPortPriv->YBuf1Offset; + + w >>= 1; + srcRight >>= 1; + srcNext = srcRight >> 1; + while(h--) + { + CARD16 *s = (CARD16 *) src; + CARD32 *d = (CARD32 *) dst; + p = w; + while (p--) + { + *d++ = s[0] | (s[srcNext] << 16); + s += srcRight; + } + src += srcPitch; + dst += dstPitch; + } +} + +static void +nvidiaCopyPlanarData(KdScreenInfo *screen, + unsigned char *buf, + int randr, + int srcPitch, + int srcPitch2, + int dstPitch, /* of chroma */ + int srcW, + int srcH, + int height, + int top, + int left, + int h, + int w, + int id) +{ + ScreenPtr pScreen = screen->pScreen; + KdScreenPriv(pScreen); + KdCardInfo *card = pScreenPriv->card; + NvidiaScreenInfo *nvidias = (NvidiaScreenInfo *) screen->driver; + NvidiaCardInfo *nvidiac = (NvidiaCardInfo *) card->driver; + NvidiaPortPrivPtr pPortPriv = nvidias->pAdaptor->pPortPrivates[0].ptr; + int i, j; + CARD8 *src1, *src2, *src3, *dst1; + int srcDown, srcDown2, srcRight, srcRight2, srcNext; + + /* compute source data pointers */ + src1 = buf; + src2 = src1 + height * srcPitch; + src3 = src2 + (height >> 1) * srcPitch2; + switch (randr & RR_Rotate_All) { + case RR_Rotate_0: + srcDown = srcPitch; + srcDown2 = srcPitch2; + srcRight = 2; + srcRight2 = 1; + srcNext = 1; + break; + case RR_Rotate_90: + src1 = src1 + srcH - 1; + src2 = src2 + (srcH >> 1) - 1; + src3 = src3 + (srcH >> 1) - 1; + srcDown = -1; + srcDown2 = -1; + srcRight = srcPitch * 2; + srcRight2 = srcPitch2; + srcNext = srcPitch; + break; + case RR_Rotate_180: + src1 = src1 + srcPitch * (srcH - 1) + (srcW - 1); + src2 = src2 + srcPitch2 * ((srcH >> 1) - 1) + ((srcW >> 1) - 1); + src3 = src3 + srcPitch2 * ((srcH >> 1) - 1) + ((srcW >> 1) - 1); + srcDown = -srcPitch; + srcDown2 = -srcPitch2; + srcRight = -2; + srcRight2 = -1; + srcNext = -1; + break; + case RR_Rotate_270: + src1 = src1 + srcPitch * (srcW - 1); + src2 = src2 + srcPitch2 * ((srcW >> 1) - 1); + src3 = src3 + srcPitch2 * ((srcW >> 1) - 1); + srcDown = 1; + srcDown2 = 1; + srcRight = -srcPitch * 2; + srcRight2 = -srcPitch2; + srcNext = -srcPitch; + break; + } + + /* adjust for origin */ + src1 += top * srcDown + left * srcNext; + src2 += (top >> 1) * srcDown2 + (left >> 1) * srcRight2; + src3 += (top >> 1) * srcDown2 + (left >> 1) * srcRight2; + + if (id == FOURCC_I420) + { + CARD8 *srct = src2; + src2 = src3; + src3 = srct; + } + + if (pPortPriv->currentBuf == 0) + dst1 = (CARD8 *) nvidias->vesa.fb + pPortPriv->YBuf0Offset; + else + dst1 = (CARD8 *) nvidias->vesa.fb + pPortPriv->YBuf1Offset; + + w >>= 1; + for (j = 0; j < h; j++) + { + CARD32 *dst = (CARD32 *) dst1; + CARD8 *s1l = src1; + CARD8 *s1r = src1 + srcNext; + CARD8 *s2 = src2; + CARD8 *s3 = src3; + + for (i = 0; i < w; i++) + { + *dst++ = *s1l | (*s1r << 16) | (*s3 << 8) | (*s2 << 24); + s1l += srcRight; + s1r += srcRight; + s2 += srcRight2; + s3 += srcRight2; + } + src1 += srcDown; + dst1 += dstPitch; + if (j & 1) + { + src2 += srcDown2; + src3 += srcDown2; + } + } +} + +static void +nvidiaPaintRegion (ScreenPtr pScreen, RegionPtr pRgn, Pixel fg) +{ + WindowPtr pRoot = WindowTable[pScreen->myNum]; + GCPtr pGC; + CARD32 val[2]; + xRectangle *rects, *r; + BoxPtr pBox = REGION_RECTS (pRgn); + int nBox = REGION_NUM_RECTS (pRgn); + + rects = ALLOCATE_LOCAL (nBox * sizeof (xRectangle)); + if (!rects) + goto bail0; + r = rects; + while (nBox--) + { + r->x = pBox->x1; + r->y = pBox->y1; + r->width = pBox->x2 - pBox->x1; + r->height = pBox->y2 - pBox->y1; + r++; + pBox++; + } + + pGC = GetScratchGC (pRoot->drawable.depth, pScreen); + if (!pGC) + goto bail1; + + val[0] = fg; + val[1] = IncludeInferiors; + ChangeGC (pGC, GCForeground|GCSubwindowMode, val); + + ValidateGC (&pRoot->drawable, pGC); + + (*pGC->ops->PolyFillRect) (&pRoot->drawable, pGC, + REGION_NUM_RECTS (pRgn), rects); + + FreeScratchGC (pGC); +bail1: + DEALLOCATE_LOCAL (rects); +bail0: + ; +} + +/* NvidiaClipVideo - + + Takes the dst box in standard X BoxRec form (top and left + edges inclusive, bottom and right exclusive). The new dst + box is returned. The source boundaries are given (x1, y1 + inclusive, x2, y2 exclusive) and returned are the new source + boundaries in 16.16 fixed point. +*/ + +static void +NvidiaClipVideo(BoxPtr dst, + INT32 *x1, + INT32 *x2, + INT32 *y1, + INT32 *y2, + BoxPtr extents, /* extents of the clip region */ + INT32 width, + INT32 height) +{ + INT32 vscale, hscale, delta; + int diff; + + hscale = ((*x2 - *x1) << 16) / (dst->x2 - dst->x1); + vscale = ((*y2 - *y1) << 16) / (dst->y2 - dst->y1); + + *x1 <<= 16; *x2 <<= 16; + *y1 <<= 16; *y2 <<= 16; + + diff = extents->x1 - dst->x1; + if(diff > 0) { + dst->x1 = extents->x1; + *x1 += diff * hscale; + } + diff = dst->x2 - extents->x2; + if(diff > 0) { + dst->x2 = extents->x2; + *x2 -= diff * hscale; + } + diff = extents->y1 - dst->y1; + if(diff > 0) { + dst->y1 = extents->y1; + *y1 += diff * vscale; + } + diff = dst->y2 - extents->y2; + if(diff > 0) { + dst->y2 = extents->y2; + *y2 -= diff * vscale; + } + + if(*x1 < 0) { + diff = (- *x1 + hscale - 1)/ hscale; + dst->x1 += diff; + *x1 += diff * hscale; + } + delta = *x2 - (width << 16); + if(delta > 0) { + diff = (delta + hscale - 1)/ hscale; + dst->x2 -= diff; + *x2 -= diff * hscale; + } + if(*y1 < 0) { + diff = (- *y1 + vscale - 1)/ vscale; + dst->y1 += diff; + *y1 += diff * vscale; + } + delta = *y2 - (height << 16); + if(delta > 0) { + diff = (delta + vscale - 1)/ vscale; + dst->y2 -= diff; + *y2 -= diff * vscale; + } +} + +static void +nvidiaDisplayVideo(KdScreenInfo *screen, + int id, + int dstPitch, /* of chroma for 4:2:0 */ + int x1, + int y1, + int x2, + int y2, + int dst_x1, + int dst_y1, + int dst_x2, + int dst_y2, + short src_w, + short src_h, + short drw_w, + short drw_h) +{ + ScreenPtr pScreen = screen->pScreen; + KdScreenPriv(pScreen); + KdCardInfo *card = pScreenPriv->card; + NvidiaScreenInfo *nvidias = (NvidiaScreenInfo *) screen->driver; + NvidiaCardInfo *nvidiac = (NvidiaCardInfo *) card->driver; + NvidiaPortPrivPtr pPortPriv = nvidias->pAdaptor->pPortPrivates[0].ptr; + Reg *reg = nvidiac->reg; + MediaReg *media = nvidiac->media_reg; + int xscaleInt, xscaleFract, yscaleInt, yscaleFract; + int xscaleIntUV = 0, xscaleFractUV = 0; + int yscaleIntUV = 0, yscaleFractUV = 0; + int randr = nvidias->vesa.randr; + int HORZ_INC, VERT_INC; + CARD32 SCALER_IN; + CARD32 OVERLAY_SCALE_CNTL; + int tmp; + int left; + int bright; + int sat; + + if (id == FOURCC_UYVY) + SCALER_IN = SCALER_IN_YVYU422; + else + SCALER_IN = SCALER_IN_VYUY422; + + nvidiaWaitAvail (reg, 4); + + media->VIDEO_FORMAT = SCALER_IN | VIDEO_IN_VYUY422; + + /* color key */ + media->OVERLAY_GRAPHICS_KEY_MSK = (1 << screen->fb[0].depth) - 1; + media->OVERLAY_GRAPHICS_KEY_CLR = pPortPriv->colorKey; + /* set key control to obey only graphics color key */ + media->OVERLAY_KEY_CNTL = 0x50; + + nvidiaWaitAvail (reg, 9); + media->CAPTURE_DEBUG = 0; + /* no exclusive video region */ + media->OVERLAY_EXCLUSIVE_HORZ = 0; + media->OVERLAY_EXCLUSIVE_VERT = 0; + /* scaling coefficients */ + media->SCALER_H_COEFF0 = 0x00002000; + media->SCALER_H_COEFF1 = 0x0D06200D; + media->SCALER_H_COEFF2 = 0x0D0A1C0D; + media->SCALER_H_COEFF3 = 0x0C0E1A0C; + media->SCALER_H_COEFF4 = 0x0C14140C; + media->SCALER_TEST = 0; + + nvidiaWaitAvail (reg, 2); + media->OVERLAY_SCALE_CNTL = (SCALE_PIX_EXPAND | + SCALE_GAMMA_BRIGHT | + SCALE_BANDWIDTH | + SCALE_OVERLAY_EN | + SCALE_EN); + + bright = (pPortPriv->brightness * 64 / 1000); + if (bright < -0x40) + bright = -0x40; + if (bright > 0x3f) + bright = 0x3f; + bright = bright & 0x7f; + sat = ((pPortPriv->saturation * 31 + 31000) / 2000); + if (sat > 0x1f) + sat = 0x1f; + if (sat < 0) + sat = 0; + + media->SCALER_COLOUR_CNTL = ((bright << 0) | /* BRIGHTNESS */ + (sat << 8) | /* SATURATION_U */ + (sat << 16) | /* SATURATION_V */ + (0 << 21) | /* SCALER_VERT_ADJ_UV */ + (0 << 28)); /* SCALER_HORZ_ADJ_UV */ + + VERT_INC = (src_h << 12) / drw_h; + HORZ_INC = (src_w << 12) / drw_w; + + nvidiaWaitAvail (reg, 13); + + /* lock registers to prevent non-atomic update */ + media->OVERLAY_Y_X_START = 0x80000000 | NVIDIA_YX (dst_x1, dst_y1); + /* ending screen coordinate */ + media->OVERLAY_Y_X_END = 0x80000000 | NVIDIA_YX (dst_x2, dst_y2); + + media->OVERLAY_SCALE_INC = NVIDIA_YX(HORZ_INC, VERT_INC); + + media->SCALER_BUF0_OFFSET = pPortPriv->YBuf0Offset; + media->SCALER_BUF1_OFFSET = pPortPriv->YBuf1Offset; + + media->SCALER_BUF0_OFFSET_U = pPortPriv->YBuf0Offset; + media->SCALER_BUF1_OFFSET_U = pPortPriv->YBuf1Offset; + + media->SCALER_BUF0_OFFSET_V = pPortPriv->YBuf0Offset; + media->SCALER_BUF1_OFFSET_V = pPortPriv->YBuf1Offset; + + media->SCALER_BUF_PITCH = dstPitch >> 1; + media->SCALER_HEIGHT_WIDTH = NVIDIA_YX(src_w - (x1 >> 16), src_h - (y1 >> 16)); + + media->CAPTURE_CONFIG = pPortPriv->currentBuf << 28; + + /* set XY location and unlock */ + media->OVERLAY_Y_X_START = NVIDIA_YX (dst_x1, dst_y1); +} + +static int +nvidiaPutImage(KdScreenInfo *screen, + short src_x, + short src_y, + short drw_x, + short drw_y, + short src_w, + short src_h, + short drw_w, + short drw_h, + int id, + unsigned char *buf, + short width, + short height, + Bool sync, + RegionPtr clipBoxes, + pointer data) +{ + KdCardInfo *card = screen->card; + NvidiaScreenInfo *nvidias = (NvidiaScreenInfo *) screen->driver; + NvidiaCardInfo *nvidiac = (NvidiaCardInfo *) card->driver; + NvidiaPortPrivPtr pPortPriv = (NvidiaPortPrivPtr)data; + Reg *reg = nvidiac->reg; + MediaReg *media = nvidiac->media_reg; + INT32 x1, x2, y1, y2; + int randr = nvidias->vesa.randr; + int srcPitch, srcPitch2, dstPitch; + int top, left, npixels, nlines, size; + BoxRec dstBox; + int dst_width = width, dst_height = height; + int rot_x1, rot_y1, rot_x2, rot_y2; + int dst_x1, dst_y1, dst_x2, dst_y2; + int rot_src_w, rot_src_h, rot_drw_w, rot_drw_h; + + /* Clip */ + x1 = src_x; + x2 = src_x + src_w; + y1 = src_y; + y2 = src_y + src_h; + + dstBox.x1 = drw_x; + dstBox.x2 = drw_x + drw_w; + dstBox.y1 = drw_y; + dstBox.y2 = drw_y + drw_h; + + NvidiaClipVideo(&dstBox, &x1, &x2, &y1, &y2, + REGION_EXTENTS(pScreen, clipBoxes), width, height); + + if((x1 >= x2) || (y1 >= y2)) + return Success; + + if (!media) + return BadAlloc; + + if (randr & (RR_Rotate_0|RR_Rotate_180)) + { + dst_width = width; + dst_height = height; + rot_src_w = src_w; + rot_src_h = src_h; + rot_drw_w = drw_w; + rot_drw_h = drw_h; + } + else + { + dst_width = height; + dst_height = width; + rot_src_w = src_h; + rot_src_h = src_w; + rot_drw_w = drw_h; + rot_drw_h = drw_w; + } + + switch (randr & RR_Rotate_All) { + case RR_Rotate_0: + dst_x1 = dstBox.x1; + dst_y1 = dstBox.y1; + dst_x2 = dstBox.x2; + dst_y2 = dstBox.y2; + rot_x1 = x1; + rot_y1 = y1; + rot_x2 = x2; + rot_y2 = y2; + break; + case RR_Rotate_90: + dst_x1 = dstBox.y1; + dst_y1 = screen->height - dstBox.x2; + dst_x2 = dstBox.y2; + dst_y2 = screen->height - dstBox.x1; + + rot_x1 = y1; + rot_y1 = (src_w << 16) - x2; + rot_x2 = y2; + rot_y2 = (src_w << 16) - x1; + break; + case RR_Rotate_180: + dst_x1 = screen->width - dstBox.x2; + dst_y1 = screen->height - dstBox.y2; + dst_x2 = screen->width - dstBox.x1; + dst_y2 = screen->height - dstBox.y1; + rot_x1 = (src_w << 16) - x2; + rot_y1 = (src_h << 16) - y2; + rot_x2 = (src_w << 16) - x1; + rot_y2 = (src_h << 16) - y1; + break; + case RR_Rotate_270: + dst_x1 = screen->width - dstBox.y2; + dst_y1 = dstBox.x1; + dst_x2 = screen->width - dstBox.y1; + dst_y2 = dstBox.x2; + rot_x1 = (src_h << 16) - y2; + rot_y1 = x1; + rot_x2 = (src_h << 16) - y1; + rot_y2 = x2; + break; + } + + switch(id) { + case FOURCC_YV12: + case FOURCC_I420: + dstPitch = ((dst_width << 1) + 15) & ~15; + srcPitch = (width + 3) & ~3; + srcPitch2 = ((width >> 1) + 3) & ~3; + size = dstPitch * (int) dst_height; + break; + case FOURCC_UYVY: + case FOURCC_YUY2: + default: + dstPitch = ((dst_width << 1) + 15) & ~15; + srcPitch = (width << 1); + size = dstPitch * (int) dst_height; + break; + } + + pPortPriv->offset = nvidias->off_screen - (CARD8 *) nvidias->vesa.fb; + /* fixup pointers */ + + pPortPriv->YBuf0Offset = pPortPriv->offset; + pPortPriv->YBuf1Offset = pPortPriv->offset + size; + +#if 0 + nvidiaWaitIdle (reg); + + if (pPortPriv->videoOn) + { + /* wait for buffer to be displayed */ + while (((media->TRIG_CNTL >> 5) & 1) != pPortPriv->currentBuf) + ; + } +#endif + /* + * Use the other buffer + */ + pPortPriv->currentBuf = 1 - pPortPriv->currentBuf; + + /* copy data */ + top = rot_y1 >> 16; + left = (rot_x1 >> 16) & ~1; + npixels = ((((rot_x2 + 0xffff) >> 16) + 1) & ~1) - left; + + switch(id) { + case FOURCC_YV12: + case FOURCC_I420: + top &= ~1; + nlines = ((((rot_y2 + 0xffff) >> 16) + 1) & ~1) - top; + nvidiaCopyPlanarData(screen, buf, randr, + srcPitch, srcPitch2, dstPitch, + rot_src_w, rot_src_h, height, + top, left, nlines, npixels, id); + break; + case FOURCC_UYVY: + case FOURCC_YUY2: + default: + nlines = ((rot_y2 + 0xffff) >> 16) - top; + nvidiaCopyPackedData(screen, buf, randr, + srcPitch, dstPitch, + rot_src_w, rot_src_h, + top, left, nlines, + npixels); + break; + } + + nvidiaDisplayVideo(screen, id, dstPitch, + rot_x1, rot_y1, rot_x2, rot_y2, + dst_x1, dst_y1, + dst_x2, dst_y2, + rot_src_w, rot_src_h, rot_drw_w, rot_drw_h); + + /* update cliplist */ + if (!REGION_EQUAL (screen->pScreen, &pPortPriv->clip, clipBoxes)) + { + REGION_COPY (screen->pScreen, &pPortPriv->clip, clipBoxes); + nvidiaPaintRegion (screen->pScreen, &pPortPriv->clip, pPortPriv->colorKey); + } + + pPortPriv->videoOn = TRUE; + + return Success; +} + +static int +nvidiaQueryImageAttributes(KdScreenInfo *screen, + int id, + unsigned short *w, + unsigned short *h, + int *pitches, + int *offsets) +{ + int size, tmp; + + if(*w > IMAGE_MAX_WIDTH) + *w = IMAGE_MAX_WIDTH; + if(*h > IMAGE_MAX_HEIGHT) + *h = IMAGE_MAX_HEIGHT; + + *w = (*w + 1) & ~1; + if(offsets) offsets[0] = 0; + + switch(id) { + case FOURCC_YV12: + case FOURCC_I420: + *h = (*h + 1) & ~1; + size = (*w + 3) & ~3; + if(pitches) + pitches[0] = size; + size *= *h; + if(offsets) + offsets[1] = size; + tmp = ((*w >> 1) + 3) & ~3; + if(pitches) + pitches[1] = pitches[2] = tmp; + tmp *= (*h >> 1); + size += tmp; + if(offsets) + offsets[2] = size; + size += tmp; + break; + case FOURCC_UYVY: + case FOURCC_YUY2: + default: + size = *w << 1; + if(pitches) + pitches[0] = size; + size *= *h; + break; + } + + return size; +} + + +/* client libraries expect an encoding */ +static KdVideoEncodingRec DummyEncoding[1] = +{ + { + 0, + "XV_IMAGE", + IMAGE_MAX_WIDTH, IMAGE_MAX_HEIGHT, + {1, 1} + } +}; + +#define NUM_FORMATS 3 + +static KdVideoFormatRec Formats[NUM_FORMATS] = +{ + {15, TrueColor}, {16, TrueColor}, {24, TrueColor} +}; + +#define NUM_ATTRIBUTES 3 + +static KdAttributeRec Attributes[NUM_ATTRIBUTES] = +{ + {XvSettable | XvGettable, 0, ~0, "XV_COLORKEY"}, + {XvSettable | XvGettable, -1000, 1000, "XV_BRIGHTNESS"}, + {XvSettable | XvGettable, -1000, 1000, "XV_SATURATION"} +}; + +#define NUM_IMAGES 4 + +static KdImageRec Images[NUM_IMAGES] = +{ + XVIMAGE_YUY2, + XVIMAGE_YV12, + XVIMAGE_I420, + XVIMAGE_UYVY +}; + +static void nvidiaResetVideo(KdScreenInfo *screen) +{ + ScreenPtr pScreen = screen->pScreen; + KdScreenPriv(pScreen); + KdCardInfo *card = pScreenPriv->card; + NvidiaScreenInfo *nvidias = (NvidiaScreenInfo *) screen->driver; + NvidiaCardInfo *nvidiac = (NvidiaCardInfo *) card->driver; + NvidiaPortPrivPtr pPortPriv = nvidias->pAdaptor->pPortPrivates[0].ptr; + MediaReg *media = nvidiac->media_reg; + + /* + * Default to maximum image size in YV12 + */ + +} + +static int +nvidiaReputImage (KdScreenInfo *screen, + short drw_x, + short drw_y, + RegionPtr clipBoxes, + pointer data) +{ + ScreenPtr pScreen = screen->pScreen; + NvidiaPortPrivPtr pPortPriv = (NvidiaPortPrivPtr)data; + BoxPtr pOldExtents = REGION_EXTENTS (pScreen, &pPortPriv->clip); + BoxPtr pNewExtents = REGION_EXTENTS (pScreen, clipBoxes); + + if (pOldExtents->x1 == pNewExtents->x1 && + pOldExtents->x2 == pNewExtents->x2 && + pOldExtents->y1 == pNewExtents->y1 && + pOldExtents->y2 == pNewExtents->y2) + { + /* update cliplist */ + if (!REGION_EQUAL (screen->pScreen, &pPortPriv->clip, clipBoxes)) + { + REGION_COPY (screen->pScreen, &pPortPriv->clip, clipBoxes); + nvidiaPaintRegion (screen->pScreen, &pPortPriv->clip, pPortPriv->colorKey); + } + return Success; + } + return BadMatch; +} + +static KdVideoAdaptorPtr +nvidiaSetupImageVideo(ScreenPtr pScreen) +{ + KdScreenPriv(pScreen); + nvidiaCardInfo(pScreenPriv); + nvidiaScreenInfo(pScreenPriv); + KdScreenInfo *screen = pScreenPriv->screen; + KdCardInfo *card = pScreenPriv->card; + KdVideoAdaptorPtr adapt; + NvidiaPortPrivPtr pPortPriv; + + if(!(adapt = xcalloc(1, sizeof(KdVideoAdaptorRec) + + sizeof(NvidiaPortPrivRec) + + sizeof(DevUnion)))) + return NULL; + + adapt->type = XvWindowMask | XvInputMask | XvImageMask; + adapt->flags = VIDEO_OVERLAID_IMAGES | VIDEO_CLIP_TO_VIEWPORT; + adapt->name = "Nvidia Video Overlay"; + adapt->nEncodings = 1; + adapt->pEncodings = DummyEncoding; + adapt->nFormats = NUM_FORMATS; + adapt->pFormats = Formats; + adapt->nPorts = 1; + adapt->pPortPrivates = (DevUnion*)(&adapt[1]); + + pPortPriv = (NvidiaPortPrivPtr)(&adapt->pPortPrivates[1]); + + adapt->pPortPrivates[0].ptr = (pointer)(pPortPriv); + adapt->pAttributes = Attributes; + adapt->nImages = NUM_IMAGES; + adapt->nAttributes = NUM_ATTRIBUTES; + adapt->pImages = Images; + adapt->PutVideo = NULL; + adapt->PutStill = NULL; + adapt->GetVideo = NULL; + adapt->GetStill = NULL; + adapt->StopVideo = nvidiaStopVideo; + adapt->SetPortAttribute = nvidiaSetPortAttribute; + adapt->GetPortAttribute = nvidiaGetPortAttribute; + adapt->QueryBestSize = nvidiaQueryBestSize; + adapt->PutImage = nvidiaPutImage; + adapt->ReputImage = nvidiaReputImage; + adapt->QueryImageAttributes = nvidiaQueryImageAttributes; + + pPortPriv->colorKey = nvidias->colorKey; + pPortPriv->videoOn = FALSE; + pPortPriv->brightness = 0; + pPortPriv->saturation = 0; + pPortPriv->currentBuf = 0; + + /* gotta uninit this someplace */ + REGION_INIT(pScreen, &pPortPriv->clip, NullBox, 0); + + nvidias->pAdaptor = adapt; + + xvBrightness = MAKE_ATOM("XV_BRIGHTNESS"); + xvSaturation = MAKE_ATOM("XV_SATURATION"); + xvColorKey = MAKE_ATOM("XV_COLORKEY"); + + nvidiaResetVideo(screen); + + return adapt; +} + +Bool nvidiaInitVideo(ScreenPtr pScreen) +{ + KdScreenPriv(pScreen); + KdScreenInfo *screen = pScreenPriv->screen; + KdVideoAdaptorPtr *adaptors, *newAdaptors = NULL; + KdVideoAdaptorPtr newAdaptor = NULL; + int num_adaptors; + KdCardInfo *card = pScreenPriv->card; + NvidiaScreenInfo *nvidias = (NvidiaScreenInfo *) screen->driver; + NvidiaCardInfo *nvidiac = (NvidiaCardInfo *) card->driver; + + if (!nvidiac->media_reg) + return FALSE; + + newAdaptor = nvidiaSetupImageVideo(pScreen); + + num_adaptors = KdXVListGenericAdaptors(screen, &adaptors); + + if(newAdaptor) + { + if(!num_adaptors) + { + num_adaptors = 1; + adaptors = &newAdaptor; + } + else + { + newAdaptors = xalloc((num_adaptors + 1) * + sizeof(KdVideoAdaptorPtr*)); + if(newAdaptors) + { + memcpy(newAdaptors, adaptors, + num_adaptors * sizeof(KdVideoAdaptorPtr)); + newAdaptors[num_adaptors] = newAdaptor; + adaptors = newAdaptors; + num_adaptors++; + } + } + } + + if(num_adaptors) + KdXVScreenInit(pScreen, adaptors, num_adaptors); + + if(newAdaptors) + xfree(newAdaptors); + return TRUE; +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/nvidia/nvidiacurs.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/nvidia/nvidiacurs.c @@ -0,0 +1,392 @@ +/* + * Id: tridentcurs.c,v 1.1 1999/11/02 03:54:47 keithp Exp $ + * + * Copyright © 1999 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/trident/tridentcurs.c,v 1.6 2000/09/03 05:11:20 keithp Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "trident.h" +#include "cursorstr.h" + +#define SetupCursor(s) KdScreenPriv(s); \ + tridentCardInfo(pScreenPriv); \ + tridentScreenInfo(pScreenPriv); \ + TridentCursor *pCurPriv = &tridents->cursor + +static void +_tridentMoveCursor (ScreenPtr pScreen, int x, int y) +{ + SetupCursor(pScreen); + CARD8 xlow, xhigh, ylow, yhigh; + CARD8 xoff, yoff; + + x -= pCurPriv->xhot; + xoff = 0; + if (x < 0) + { + xoff = -x; + x = 0; + } + y -= pCurPriv->yhot; + yoff = 0; + if (y < 0) + { + yoff = -y; + y = 0; + } + xlow = (CARD8) x; + xhigh = (CARD8) (x >> 8); + ylow = (CARD8) y; + yhigh = (CARD8) (y >> 8); + + + /* This is the recommended order to move the cursor */ + + tridentWriteIndex (tridentc, 0x3d4, 0x41, xhigh); + tridentWriteIndex (tridentc, 0x3d4, 0x40, xlow); + tridentWriteIndex (tridentc, 0x3d4, 0x42, ylow); + tridentWriteIndex (tridentc, 0x3d4, 0x46, xoff); + tridentWriteIndex (tridentc, 0x3d4, 0x47, yoff); + tridentWriteIndex (tridentc, 0x3d4, 0x43, yhigh); +} + +static void +tridentMoveCursor (ScreenPtr pScreen, int x, int y) +{ + SetupCursor (pScreen); + + if (!pCurPriv->has_cursor) + return; + + if (!pScreenPriv->enabled) + return; + + _tridentMoveCursor (pScreen, x, y); +} + +static void +tridentAllocCursorColors (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + CursorPtr pCursor = pCurPriv->pCursor; + + KdAllocateCursorPixels (pScreen, 0, pCursor, + &pCurPriv->source, &pCurPriv->mask); + switch (pScreenPriv->screen->fb[0].bitsPerPixel) { + case 4: + pCurPriv->source |= pCurPriv->source << 4; + pCurPriv->mask |= pCurPriv->mask << 4; + case 8: + pCurPriv->source |= pCurPriv->source << 8; + pCurPriv->mask |= pCurPriv->mask << 8; + case 16: + pCurPriv->source |= pCurPriv->source << 16; + pCurPriv->mask |= pCurPriv->mask << 16; + } +} + +static void +tridentSetCursorColors (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + CursorPtr pCursor = pCurPriv->pCursor; + CARD32 fg, bg; + + fg = pCurPriv->source; + bg = pCurPriv->mask; + tridentWriteIndex (tridentc, 0x3d4, 0x48, fg); + tridentWriteIndex (tridentc, 0x3d4, 0x49, fg >> 8); + tridentWriteIndex (tridentc, 0x3d4, 0x4a, fg >> 16); + + tridentWriteIndex (tridentc, 0x3d4, 0x4c, bg); + tridentWriteIndex (tridentc, 0x3d4, 0x4d, bg >> 8); + tridentWriteIndex (tridentc, 0x3d4, 0x4e, bg >> 16); +} + +void +tridentRecolorCursor (ScreenPtr pScreen, int ndef, xColorItem *pdef) +{ + SetupCursor (pScreen); + CursorPtr pCursor = pCurPriv->pCursor; + xColorItem sourceColor, maskColor; + + if (!pCurPriv->has_cursor || !pCursor) + return; + + if (!pScreenPriv->enabled) + return; + + if (pdef) + { + while (ndef) + { + if (pdef->pixel == pCurPriv->source || + pdef->pixel == pCurPriv->mask) + break; + ndef--; + } + if (!ndef) + return; + } + tridentAllocCursorColors (pScreen); + tridentSetCursorColors (pScreen); +} + +#define InvertBits32(v) { \ + v = ((v & 0x55555555) << 1) | ((v >> 1) & 0x55555555); \ + v = ((v & 0x33333333) << 2) | ((v >> 2) & 0x33333333); \ + v = ((v & 0x0f0f0f0f) << 4) | ((v >> 4) & 0x0f0f0f0f); \ +} + +static void +tridentLoadCursor (ScreenPtr pScreen, int x, int y) +{ + SetupCursor(pScreen); + CursorPtr pCursor = pCurPriv->pCursor; + CursorBitsPtr bits = pCursor->bits; + int w, h; + CARD32 *ram, *msk, *mskLine, *src, *srcLine; + int i, j; + int cursor_address; + int lwsrc; + unsigned char ramdac_control_; + CARD32 offset; + + /* + * Allocate new colors + */ + tridentAllocCursorColors (pScreen); + + pCurPriv->pCursor = pCursor; + pCurPriv->xhot = pCursor->bits->xhot; + pCurPriv->yhot = pCursor->bits->yhot; + + /* + * Stick new image into cursor memory + */ + ram = (CARD32 *) tridents->cursor_base; + mskLine = (CARD32 *) bits->mask; + srcLine = (CARD32 *) bits->source; + + h = bits->height; + if (h > TRIDENT_CURSOR_HEIGHT) + h = TRIDENT_CURSOR_HEIGHT; + + lwsrc = BitmapBytePad(bits->width) / 4; /* words per line */ + + for (i = 0; i < TRIDENT_CURSOR_HEIGHT; i++) { + msk = mskLine; + src = srcLine; + mskLine += lwsrc; + srcLine += lwsrc; + for (j = 0; j < TRIDENT_CURSOR_WIDTH / 32; j++) { + + CARD32 m, s; + +#if 1 + if (i < h && j < lwsrc) + { + m = *msk++; + s = *src++; + InvertBits32(m); + InvertBits32(s); + } + else + { + m = 0; + s = 0; + } +#endif + *ram++ = m; + *ram++ = s; + } + } + + /* Set address for cursor bits */ + offset = tridents->cursor_base - (CARD8 *) tridents->screen; + offset >>= 10; + tridentWriteIndex (tridentc, 0x3d4, 0x44, (CARD8) (offset & 0xff)); + tridentWriteIndex (tridentc, 0x3d4, 0x45, (CARD8) (offset >> 8)); + + /* Set new color */ + tridentSetCursorColors (pScreen); + + /* Enable the cursor */ + tridentWriteIndex (tridentc, 0x3d4, 0x50, 0xc1); + + /* Move to new position */ + tridentMoveCursor (pScreen, x, y); +} + +static void +tridentUnloadCursor (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + /* Disable cursor */ + tridentWriteIndex (tridentc, 0x3d4, 0x50, 0); +} + +static Bool +tridentRealizeCursor (ScreenPtr pScreen, CursorPtr pCursor) +{ + SetupCursor(pScreen); + + if (!pScreenPriv->enabled) + return TRUE; + + /* miRecolorCursor does this */ + if (pCurPriv->pCursor == pCursor) + { + if (pCursor) + { + int x, y; + + miPointerPosition (&x, &y); + tridentLoadCursor (pScreen, x, y); + } + } + return TRUE; +} + +static Bool +tridentUnrealizeCursor (ScreenPtr pScreen, CursorPtr pCursor) +{ + return TRUE; +} + +static void +tridentSetCursor (ScreenPtr pScreen, CursorPtr pCursor, int x, int y) +{ + SetupCursor(pScreen); + + pCurPriv->pCursor = pCursor; + + if (!pScreenPriv->enabled) + return; + + if (pCursor) + tridentLoadCursor (pScreen, x, y); + else + tridentUnloadCursor (pScreen); +} + +miPointerSpriteFuncRec tridentPointerSpriteFuncs = { + tridentRealizeCursor, + tridentUnrealizeCursor, + tridentSetCursor, + tridentMoveCursor, +}; + +static void +tridentQueryBestSize (int class, + unsigned short *pwidth, unsigned short *pheight, + ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + switch (class) + { + case CursorShape: + if (*pwidth > pCurPriv->width) + *pwidth = pCurPriv->width; + if (*pheight > pCurPriv->height) + *pheight = pCurPriv->height; + if (*pwidth > pScreen->width) + *pwidth = pScreen->width; + if (*pheight > pScreen->height) + *pheight = pScreen->height; + break; + default: + fbQueryBestSize (class, pwidth, pheight, pScreen); + break; + } +} + +Bool +tridentCursorInit (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + if (!tridents->cursor_base) + { + pCurPriv->has_cursor = FALSE; + return FALSE; + } + + pCurPriv->width = TRIDENT_CURSOR_WIDTH; + pCurPriv->height= TRIDENT_CURSOR_HEIGHT; + pScreen->QueryBestSize = tridentQueryBestSize; + miPointerInitialize (pScreen, + &tridentPointerSpriteFuncs, + &kdPointerScreenFuncs, + FALSE); + pCurPriv->has_cursor = TRUE; + pCurPriv->pCursor = NULL; + return TRUE; +} + +void +tridentCursorEnable (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + if (pCurPriv->has_cursor) + { + if (pCurPriv->pCursor) + { + int x, y; + + miPointerPosition (&x, &y); + tridentLoadCursor (pScreen, x, y); + } + else + tridentUnloadCursor (pScreen); + } +} + +void +tridentCursorDisable (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + if (!pScreenPriv->enabled) + return; + + if (pCurPriv->has_cursor) + { + if (pCurPriv->pCursor) + { + tridentUnloadCursor (pScreen); + } + } +} + +void +tridentCursorFini (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + pCurPriv->pCursor = NULL; +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/nvidia/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/nvidia/Makefile.in @@ -124,6 +124,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -202,6 +204,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -314,6 +317,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/fbdev/Xfbdev.man +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/fbdev/Xfbdev.man @@ -0,0 +1,28 @@ +.\" $RCSId: xc/programs/Xserver/hw/kdrive/fbdev/Xfbdev.man,v 1.4 2001/01/27 18:20:40 dawes Exp $ +.\" +.TH Xfbdev 1 __vendorversion__ +.SH NAME +Xfbdev \- Linux framebuffer device tiny X server +.SH SYNOPSIS +.B Xfbdev +.RI [ :display ] +.RI [ option ...] +.SH DESCRIPTION +.B Xfbdev +is a generic X server for Linux. +.B Xfbdev +doesn't know about any particular hardware, and uses the framebuffer +provided by the Linux framebuffer device. +.SH OPTIONS +.B Xfbdev +accepts the common options of the Xkdrive family of servers. Please +see Xkdrive(1). +.SH KEYBOARD +To be written. +.SH SEE ALSO +X(__miscmansuffix__), Xserver(1), Xkdrive(1), xdm(1), xinit(1). +.SH AUTHORS +The +.B Xfbdev +server was written by Keith Packard. + --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/fbdev/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/fbdev/Makefile.in @@ -122,6 +122,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -200,6 +202,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -312,6 +315,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/ts300/ts300.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/ts300/ts300.c @@ -0,0 +1,139 @@ +/* + * Id: ts300.c,v 1.1 1999/11/02 08:17:24 keithp Exp $ + * + * Copyright © 1999 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/ts300/ts300.c,v 1.3 2000/02/23 20:30:14 dawes Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "kdrive.h" + +extern KdCardFuncs sisFuncs; +extern KdCardFuncs s3Funcs; + +/* + * Kludgy code to parse the ascii /proc/pci file as the TS300 + * is running a 2.0 kernel + */ +BOOL +HasPCI (char *name, KdCardAttr *attr) +{ + FILE *f; + char line[1024]; + BOOL waiting; + BOOL found = FALSE; + char *mem; + + f = fopen ("/proc/pci", "r"); + if (!f) + return FALSE; + waiting = FALSE; + attr->naddr = 0; + while (fgets (line, sizeof (line), f)) + { + if (waiting) + { + + if (mem = strstr (line, "memory at ")) + { + mem += strlen ("memory at "); + attr->address[attr->naddr++] = strtoul (mem, NULL, 0); + found = TRUE; + } + else if (mem = strstr (line, "I/O at ")) + { + mem += strlen ("I/O at "); + attr->io = strtoul (mem, NULL, 0); + found = TRUE; + } + else if (strstr (line, "Bus") && strstr (line, "device") && + strstr (line, "function")) + break; + } + else if (strstr (line, "VGA compatible controller")) + { + if (strstr (line, name)) + waiting = TRUE; + } + } + fclose (f); + return found; +} + +typedef struct _PCICard { + char *user; + char *name; + KdCardFuncs *funcs; +} PCICard; + +PCICard PCICards[] = { + "sis", "Silicon Integrated Systems", &sisFuncs, + "s3", "S3 Inc.", &s3Funcs, +}; + +#define NUM_PCI_CARDS (sizeof (PCICards) / sizeof (PCICards[0])) + +void +InitCard (char *name) +{ + KdCardInfo *card; + CARD32 fb; + int i; + KdCardAttr attr; + + for (i = 0; i < NUM_PCI_CARDS; i++) + { + if (!name || !strcmp (name, PCICards[i].user)) + { + if (HasPCI (PCICards[i].name, &attr)) + { + KdCardInfoAdd (PCICards[i].funcs, &attr, 0); + return; + } + } + } +} + +void +InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv) +{ + KdInitOutput (pScreenInfo, argc, argv); +} + +void +InitInput (int argc, char **argv) +{ + KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs); +} + +void +ddxUseMsg (void) +{ + KdUseMsg(); +} + +int +ddxProcessArgument (int argc, char **argv, int i) +{ + return KdProcessArgument (argc, argv, i); +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/Makefile.in @@ -103,6 +103,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -181,6 +183,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -293,6 +296,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/ipaq/ipaq.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/ipaq/ipaq.c @@ -0,0 +1,71 @@ +/* + * Copyright © 1999 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + * + * Adapted from ts300.c by Alan Hourihane + * For the Compaq IPAQ handheld, with the HP VGA Out Card (F1252A). + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/ipaq/ipaq.c,v 1.2 2001/05/29 17:47:55 keithp Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "pcmcia.h" + +extern KdCardFuncs pcmciaFuncs; + +void +InitCard (char *name) +{ + KdCardAttr attr; + if (name && !strcmp(name, "pcmcia")) + KdCardInfoAdd (&pcmciaFuncs, &attr, 0); + else + KdCardInfoAdd (&fbdevFuncs, &attr, 0); +} + +void +InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv) +{ + KdInitOutput (pScreenInfo, argc, argv); +} + +void +InitInput (int argc, char **argv) +{ + KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs); +#ifdef TOUCHSCREEN + KdAddMouseDriver (&TsFuncs); +#endif +} + +extern pcmciaDisplayModeRec pcmciaDefaultModes[]; + +void +ddxUseMsg (void) +{ + KdUseMsg(); +} + +int +ddxProcessArgument (int argc, char **argv, int i) +{ + return KdProcessArgument (argc, argv, i); +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/mga/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/mga/Makefile.in @@ -125,6 +125,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -203,6 +205,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -315,6 +318,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/mach64/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/mach64/Makefile.in @@ -126,6 +126,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -204,6 +206,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -316,6 +319,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/mach64/mach64curs.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/mach64/mach64curs.c @@ -0,0 +1,392 @@ +/* + * Id: tridentcurs.c,v 1.1 1999/11/02 03:54:47 keithp Exp $ + * + * Copyright © 1999 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/trident/tridentcurs.c,v 1.6 2000/09/03 05:11:20 keithp Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "trident.h" +#include "cursorstr.h" + +#define SetupCursor(s) KdScreenPriv(s); \ + tridentCardInfo(pScreenPriv); \ + tridentScreenInfo(pScreenPriv); \ + TridentCursor *pCurPriv = &tridents->cursor + +static void +_tridentMoveCursor (ScreenPtr pScreen, int x, int y) +{ + SetupCursor(pScreen); + CARD8 xlow, xhigh, ylow, yhigh; + CARD8 xoff, yoff; + + x -= pCurPriv->xhot; + xoff = 0; + if (x < 0) + { + xoff = -x; + x = 0; + } + y -= pCurPriv->yhot; + yoff = 0; + if (y < 0) + { + yoff = -y; + y = 0; + } + xlow = (CARD8) x; + xhigh = (CARD8) (x >> 8); + ylow = (CARD8) y; + yhigh = (CARD8) (y >> 8); + + + /* This is the recommended order to move the cursor */ + + tridentWriteIndex (tridentc, 0x3d4, 0x41, xhigh); + tridentWriteIndex (tridentc, 0x3d4, 0x40, xlow); + tridentWriteIndex (tridentc, 0x3d4, 0x42, ylow); + tridentWriteIndex (tridentc, 0x3d4, 0x46, xoff); + tridentWriteIndex (tridentc, 0x3d4, 0x47, yoff); + tridentWriteIndex (tridentc, 0x3d4, 0x43, yhigh); +} + +static void +tridentMoveCursor (ScreenPtr pScreen, int x, int y) +{ + SetupCursor (pScreen); + + if (!pCurPriv->has_cursor) + return; + + if (!pScreenPriv->enabled) + return; + + _tridentMoveCursor (pScreen, x, y); +} + +static void +tridentAllocCursorColors (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + CursorPtr pCursor = pCurPriv->pCursor; + + KdAllocateCursorPixels (pScreen, 0, pCursor, + &pCurPriv->source, &pCurPriv->mask); + switch (pScreenPriv->screen->fb[0].bitsPerPixel) { + case 4: + pCurPriv->source |= pCurPriv->source << 4; + pCurPriv->mask |= pCurPriv->mask << 4; + case 8: + pCurPriv->source |= pCurPriv->source << 8; + pCurPriv->mask |= pCurPriv->mask << 8; + case 16: + pCurPriv->source |= pCurPriv->source << 16; + pCurPriv->mask |= pCurPriv->mask << 16; + } +} + +static void +tridentSetCursorColors (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + CursorPtr pCursor = pCurPriv->pCursor; + CARD32 fg, bg; + + fg = pCurPriv->source; + bg = pCurPriv->mask; + tridentWriteIndex (tridentc, 0x3d4, 0x48, fg); + tridentWriteIndex (tridentc, 0x3d4, 0x49, fg >> 8); + tridentWriteIndex (tridentc, 0x3d4, 0x4a, fg >> 16); + + tridentWriteIndex (tridentc, 0x3d4, 0x4c, bg); + tridentWriteIndex (tridentc, 0x3d4, 0x4d, bg >> 8); + tridentWriteIndex (tridentc, 0x3d4, 0x4e, bg >> 16); +} + +void +tridentRecolorCursor (ScreenPtr pScreen, int ndef, xColorItem *pdef) +{ + SetupCursor (pScreen); + CursorPtr pCursor = pCurPriv->pCursor; + xColorItem sourceColor, maskColor; + + if (!pCurPriv->has_cursor || !pCursor) + return; + + if (!pScreenPriv->enabled) + return; + + if (pdef) + { + while (ndef) + { + if (pdef->pixel == pCurPriv->source || + pdef->pixel == pCurPriv->mask) + break; + ndef--; + } + if (!ndef) + return; + } + tridentAllocCursorColors (pScreen); + tridentSetCursorColors (pScreen); +} + +#define InvertBits32(v) { \ + v = ((v & 0x55555555) << 1) | ((v >> 1) & 0x55555555); \ + v = ((v & 0x33333333) << 2) | ((v >> 2) & 0x33333333); \ + v = ((v & 0x0f0f0f0f) << 4) | ((v >> 4) & 0x0f0f0f0f); \ +} + +static void +tridentLoadCursor (ScreenPtr pScreen, int x, int y) +{ + SetupCursor(pScreen); + CursorPtr pCursor = pCurPriv->pCursor; + CursorBitsPtr bits = pCursor->bits; + int w, h; + CARD32 *ram, *msk, *mskLine, *src, *srcLine; + int i, j; + int cursor_address; + int lwsrc; + unsigned char ramdac_control_; + CARD32 offset; + + /* + * Allocate new colors + */ + tridentAllocCursorColors (pScreen); + + pCurPriv->pCursor = pCursor; + pCurPriv->xhot = pCursor->bits->xhot; + pCurPriv->yhot = pCursor->bits->yhot; + + /* + * Stick new image into cursor memory + */ + ram = (CARD32 *) tridents->cursor_base; + mskLine = (CARD32 *) bits->mask; + srcLine = (CARD32 *) bits->source; + + h = bits->height; + if (h > TRIDENT_CURSOR_HEIGHT) + h = TRIDENT_CURSOR_HEIGHT; + + lwsrc = BitmapBytePad(bits->width) / 4; /* words per line */ + + for (i = 0; i < TRIDENT_CURSOR_HEIGHT; i++) { + msk = mskLine; + src = srcLine; + mskLine += lwsrc; + srcLine += lwsrc; + for (j = 0; j < TRIDENT_CURSOR_WIDTH / 32; j++) { + + CARD32 m, s; + +#if 1 + if (i < h && j < lwsrc) + { + m = *msk++; + s = *src++; + InvertBits32(m); + InvertBits32(s); + } + else + { + m = 0; + s = 0; + } +#endif + *ram++ = m; + *ram++ = s; + } + } + + /* Set address for cursor bits */ + offset = tridents->cursor_base - (CARD8 *) tridents->screen; + offset >>= 10; + tridentWriteIndex (tridentc, 0x3d4, 0x44, (CARD8) (offset & 0xff)); + tridentWriteIndex (tridentc, 0x3d4, 0x45, (CARD8) (offset >> 8)); + + /* Set new color */ + tridentSetCursorColors (pScreen); + + /* Enable the cursor */ + tridentWriteIndex (tridentc, 0x3d4, 0x50, 0xc1); + + /* Move to new position */ + tridentMoveCursor (pScreen, x, y); +} + +static void +tridentUnloadCursor (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + /* Disable cursor */ + tridentWriteIndex (tridentc, 0x3d4, 0x50, 0); +} + +static Bool +tridentRealizeCursor (ScreenPtr pScreen, CursorPtr pCursor) +{ + SetupCursor(pScreen); + + if (!pScreenPriv->enabled) + return TRUE; + + /* miRecolorCursor does this */ + if (pCurPriv->pCursor == pCursor) + { + if (pCursor) + { + int x, y; + + miPointerPosition (&x, &y); + tridentLoadCursor (pScreen, x, y); + } + } + return TRUE; +} + +static Bool +tridentUnrealizeCursor (ScreenPtr pScreen, CursorPtr pCursor) +{ + return TRUE; +} + +static void +tridentSetCursor (ScreenPtr pScreen, CursorPtr pCursor, int x, int y) +{ + SetupCursor(pScreen); + + pCurPriv->pCursor = pCursor; + + if (!pScreenPriv->enabled) + return; + + if (pCursor) + tridentLoadCursor (pScreen, x, y); + else + tridentUnloadCursor (pScreen); +} + +miPointerSpriteFuncRec tridentPointerSpriteFuncs = { + tridentRealizeCursor, + tridentUnrealizeCursor, + tridentSetCursor, + tridentMoveCursor, +}; + +static void +tridentQueryBestSize (int class, + unsigned short *pwidth, unsigned short *pheight, + ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + switch (class) + { + case CursorShape: + if (*pwidth > pCurPriv->width) + *pwidth = pCurPriv->width; + if (*pheight > pCurPriv->height) + *pheight = pCurPriv->height; + if (*pwidth > pScreen->width) + *pwidth = pScreen->width; + if (*pheight > pScreen->height) + *pheight = pScreen->height; + break; + default: + fbQueryBestSize (class, pwidth, pheight, pScreen); + break; + } +} + +Bool +tridentCursorInit (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + if (!tridents->cursor_base) + { + pCurPriv->has_cursor = FALSE; + return FALSE; + } + + pCurPriv->width = TRIDENT_CURSOR_WIDTH; + pCurPriv->height= TRIDENT_CURSOR_HEIGHT; + pScreen->QueryBestSize = tridentQueryBestSize; + miPointerInitialize (pScreen, + &tridentPointerSpriteFuncs, + &kdPointerScreenFuncs, + FALSE); + pCurPriv->has_cursor = TRUE; + pCurPriv->pCursor = NULL; + return TRUE; +} + +void +tridentCursorEnable (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + if (pCurPriv->has_cursor) + { + if (pCurPriv->pCursor) + { + int x, y; + + miPointerPosition (&x, &y); + tridentLoadCursor (pScreen, x, y); + } + else + tridentUnloadCursor (pScreen); + } +} + +void +tridentCursorDisable (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + if (!pScreenPriv->enabled) + return; + + if (pCurPriv->has_cursor) + { + if (pCurPriv->pCursor) + { + tridentUnloadCursor (pScreen); + } + } +} + +void +tridentCursorFini (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + pCurPriv->pCursor = NULL; +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/ephyr/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/ephyr/Makefile.in @@ -129,6 +129,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -207,6 +209,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -319,6 +322,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/chips/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/chips/Makefile.in @@ -124,6 +124,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -202,6 +204,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -314,6 +317,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/pcmcia/pcmcia.h +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/pcmcia/pcmcia.h @@ -0,0 +1,268 @@ +/* + * Copyright 2001 by Alan Hourihane, Sychdyn, North Wales, UK. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Alan Hourihane not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Alan Hourihane makes no representations + * about the suitability of this software for any purpose. It is provided + * "as is" without express or implied warranty. + * + * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR 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. + * + * Authors: Alan Hourihane, + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/pcmcia/pcmcia.h,v 1.1 2001/05/23 08:56:09 alanh Exp $ */ + +#ifndef _PCMCIA_H_ +#define _PCMCIA_H_ + +#include + +/* + * offset from ioport beginning + */ + +#define PCMCIA_COP_BASE(c) 0x20000000 +#define PCMCIA_COP_SIZE(c) 0x10000 +#define TRIDENT_COP_OFF(c) 0x2100 + +typedef volatile CARD8 VOL8; +typedef volatile CARD16 VOL16; +typedef volatile CARD32 VOL32; + +typedef struct _cop { + VOL32 src_start_xy; /* 0x00 */ + VOL32 src_end_xy; /* 0x04 */ + VOL32 dst_start_xy; /* 0x08 */ + VOL32 dst_end_xy; /* 0x0c */ + VOL32 alpha; /* 0x10 */ + CARD8 pad14[0xc]; /* 0x14 */ + VOL32 multi; /* 0x20 */ + +#define COP_MULTI_CLIP_TOP_LEFT 0x10000000 +#define COP_MULTI_DEPTH 0x40000000 +#define COP_MULTI_COLOR_KEY 0x70000000 +#define COP_MULTI_STYLE 0x50000000 +#define COP_MULTI_PATTERN 0x80000000 +#define COP_MULTI_ROP 0x90000000 +#define COP_MULTI_STRIDE 0x60000000 +#define COP_MULTI_Z 0xa0000000 +#define COP_MULTI_ALPHA 0xb0000000 +#define COP_MULTI_TEXTURE 0xd0000000 +#define COP_MULTI_TEXTURE_BOUND 0xe0000000 +#define COP_MULTI_TEXTURE_ADVANCED 0x20000000 +#define COP_MULTI_MASK 0xf0000000 + +#define COP_DEPTH_8 0x00000000 +#define COP_DEPTH_16 0x00000001 +#define COP_DEPTH_24_32 0x00000002 +#define COP_DEPTH_15 0x00000005 +#define COP_DEPTH_DITHER_DISABLE 0x00000008 + + +#define COP_ALPHA_SRC_BLEND_0 0x00000000 +#define COP_ALPHA_SRC_BLEND_1 0x00000001 +#define COP_ALPHA_SRC_BLEND_SRC_C 0x00000002 +#define COP_ALPHA_SRC_BLEND_1_SRC_C 0x00000003 +#define COP_ALPHA_SRC_BLEND_SRC_A 0x00000004 +#define COP_ALPHA_SRC_BLEND_1_SRC_A 0x00000005 +#define COP_ALPHA_SRC_BLEND_DST_A 0x00000006 +#define COP_ALPHA_SRC_BLEND_1_DST_A 0x00000007 +#define COP_ALPHA_SRC_BLEND_DST_C 0x00000008 +#define COP_ALPHA_SRC_BLEND_1_DST_C 0x00000009 +#define COP_ALPHA_SRC_BLEND_SAT 0x0000000A +#define COP_ALPHA_SRC_BLEND_BG 0x0000000B + +#define COP_ALPHA_DST_BLEND_0 0x00000000 +#define COP_ALPHA_DST_BLEND_1 0x00000010 +#define COP_ALPHA_DST_BLEND_SRC_C 0x00000020 +#define COP_ALPHA_DST_BLEND_1_SRC_C 0x00000030 +#define COP_ALPHA_DST_BLEND_SRC_A 0x00000040 +#define COP_ALPHA_DST_BLEND_1_SRC_A 0x00000050 +#define COP_ALPHA_DST_BLEND_DST_A 0x00000060 +#define COP_ALPHA_DST_BLEND_1_DST_A 0x00000070 +#define COP_ALPHA_DST_BLEND_DST_C 0x00000080 +#define COP_ALPHA_DST_BLEND_1_DST_C 0x00000090 +#define COP_ALPHA_DST_BLEND_OTHER 0x000000A0 + +#define COP_ALPHA_RESULT_ALPHA 0x00100000 +#define COP_ALPHA_DEST_ALPHA 0x00200000 +#define COP_ALPHA_SOURCE_ALPHA 0x00400000 +#define COP_ALPHA_WRITE_ENABLE 0x00800000 +#define COP_ALPHA_TEST_ENABLE 0x01000000 +#define COP_ALPHA_BLEND_ENABLE 0x02000000 +#define COP_ALPHA_DEST_VALUE 0x04000000 +#define COP_ALPHA_SOURCE_VALUE 0x08000000 + + VOL32 command; /* 0x24 */ +#define COP_OP_NULL 0x00000000 +#define COP_OP_LINE 0x20000000 +#define COP_OP_BLT 0x80000000 +#define COP_OP_TEXT 0x90000000 +#define COP_OP_POLY 0xb0000000 +#define COP_OP_POLY2 0xe0000000 +#define COP_SCL_EXPAND 0x00800000 +#define COP_SCL_OPAQUE 0x00400000 +#define COP_SCL_REVERSE 0x00200000 +#define COP_SCL_MONO_OFF 0x001c0000 +#define COP_LIT_TEXTURE 0x00004000 +#define COP_BILINEAR 0x00002000 +#define COP_OP_ZBUF 0x00000800 +#define COP_OP_ROP 0x00000400 +#define COP_OP_FG 0x00000200 +#define COP_OP_FB 0x00000080 +#define COP_X_REVERSE 0x00000004 +#define COP_CLIP 0x00000001 + VOL32 texture_format; /* 0x28 */ + CARD8 pad2c[0x4]; /* 0x2c */ + + VOL32 clip_bottom_right; /* 0x30 */ + VOL32 dataIII; /* 0x34 */ + VOL32 dataIV; /* 0x38 */ + CARD8 pad3c[0x8]; /* 0x3c */ + + VOL32 fg; /* 0x44 */ + VOL32 bg; /* 0x48 */ + CARD8 pad4c[0x4]; /* 0x4c */ + + VOL32 pattern_fg; /* 0x50 */ + VOL32 pattern_bg; /* 0x54 */ + CARD8 pad58[0xc]; /* 0x58 */ + + VOL32 status; /* 0x64 */ +#define COP_STATUS_BE_BUSY 0x80000000 +#define COP_STATUS_DPE_BUSY 0x20000000 +#define COP_STATUS_MI_BUSY 0x10000000 +#define COP_STATUS_FIFO_BUSY 0x08000000 +#define COP_STATUS_WB_BUSY 0x00800000 +#define COP_STATUS_Z_FAILED 0x00400000 +#define COP_STATUS_EFFECTIVE 0x00200000 +#define COP_STATUS_LEFT_VIEW 0x00080000 + + CARD8 pad68[0x4]; /* 0x68 */ + + VOL32 src_offset; /* 0x6c */ + VOL32 z_offset; /* 0x70 */ + CARD8 pad74[0x4]; /* 0x74 */ + + VOL32 display_offset; /* 0x78 */ + VOL32 dst_offset; /* 0x7c */ + CARD8 pad80[0x34]; /* 0x80 */ + + VOL32 semaphore; /* 0xb4 */ +} Cop; + +#define TRI_XY(x,y) ((y) << 16 | (x)) + +typedef struct _pcmciaCardInfo { + CARD8 *fb; + Bool HP; + CARD32 memory; + CARD8 *cop_base; + Cop *cop; + CARD32 *window; + CARD32 cop_depth; + CARD32 cop_stride; +} pcmciaCardInfo; + +#define getpcmciaCardInfo(kd) ((pcmciaCardInfo *) ((kd)->card->driver)) +#define pcmciaCardInfo(kd) pcmciaCardInfo *pcmciac = getpcmciaCardInfo(kd) + +typedef struct _pcmciaCursor { + int width, height; + int xhot, yhot; + Bool has_cursor; + CursorPtr pCursor; + Pixel source, mask; +} pcmciaCursor; + +#define PCMCIA_CURSOR_WIDTH 64 +#define PCMCIA_CURSOR_HEIGHT 64 + +typedef struct _pcmciaScreenInfo { + CARD8 *cursor_base; + CARD8 *screen; + CARD8 *off_screen; + int off_screen_size; + int randr; + LayerPtr pLayer; + pcmciaCursor cursor; +} pcmciaScreenInfo; + +#define getpcmciaScreenInfo(kd) ((pcmciaScreenInfo *) ((kd)->screen->driver)) +#define pcmciaScreenInfo(kd) pcmciaScreenInfo *pcmcias = getpcmciaScreenInfo(kd) + +Bool +pcmciaDrawInit (ScreenPtr pScreen); + +void +pcmciaDrawEnable (ScreenPtr pScreen); + +void +pcmciaDrawSync (ScreenPtr pScreen); + +void +pcmciaDrawDisable (ScreenPtr pScreen); + +void +pcmciaDrawFini (ScreenPtr pScreen); + +CARD8 +pcmciaReadIndex (pcmciaCardInfo *pcmciac, CARD16 port, CARD8 index); + +void +pcmciaWriteIndex (pcmciaCardInfo *pcmciac, CARD16 port, CARD8 index, CARD8 value); + +void +pcmciaWriteReg (pcmciaCardInfo *pcmciac, CARD16 port, CARD8 value); + +Bool +pcmciaCursorInit (ScreenPtr pScreen); + +void +pcmciaCursorEnable (ScreenPtr pScreen); + +void +pcmciaCursorDisable (ScreenPtr pScreen); + +void +pcmciaCursorFini (ScreenPtr pScreen); + +void +pcmciaRecolorCursor (ScreenPtr pScreen, int ndef, xColorItem *pdef); + +void +pcmciaUpdateRotatePacked (ScreenPtr pScreen, + shadowBufPtr pBuf); + +typedef struct _pcmciaDisplayModeRec { + int Width; + int Height; + int Refresh; + int Clock; /* pixel clock freq */ + int HDisplay; /* horizontal timing */ + int HSyncStart; + int HSyncEnd; + int HTotal; + int HSkew; + int VDisplay; /* vertical timing */ + int VSyncStart; + int VSyncEnd; + int VTotal; + int VScan; + int Flags; +} pcmciaDisplayModeRec, *pcmciaDisplayModePtr; + +extern KdCardFuncs pcmciaFuncs; + +#endif /* _PCMCIA_H_ */ --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/pcmcia/pcmciacurs.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/pcmcia/pcmciacurs.c @@ -0,0 +1,452 @@ +/* + * Copyright 2001 by Alan Hourihane, Sychdyn, North Wales, UK. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Alan Hourihane not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Alan Hourihane makes no representations + * about the suitability of this software for any purpose. It is provided + * "as is" without express or implied warranty. + * + * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR 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. + * + * Authors: Alan Hourihane, + */ +/* $RCSId: $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "pcmcia.h" +#include "cursorstr.h" + +#define SetupCursor(s) KdScreenPriv(s); \ + pcmciaCardInfo(pScreenPriv); \ + pcmciaScreenInfo(pScreenPriv); \ + pcmciaCursor *pCurPriv = &pcmcias->cursor + +static void +_pcmciaMoveCursor (ScreenPtr pScreen, int x, int y) +{ + SetupCursor(pScreen); + CARD8 xlow, xhigh, ylow, yhigh; + CARD8 xoff, yoff; + + x -= pCurPriv->xhot; + xoff = 0; + if (x < 0) + { + xoff = -x; + x = 0; + } + y -= pCurPriv->yhot; + yoff = 0; + if (y < 0) + { + yoff = -y; + y = 0; + } + + /* This is the recommended order to move the cursor */ + if (pcmciac->HP) { + xlow = (CARD8) x; + xhigh = (CARD8) (x >> 8); + ylow = (CARD8) y; + yhigh = (CARD8) (y >> 8); + pcmciaWriteIndex (pcmciac, 0x3d4, 0x40, xlow); + pcmciaWriteIndex (pcmciac, 0x3d4, 0x41, xhigh); + pcmciaWriteIndex (pcmciac, 0x3d4, 0x42, ylow); + pcmciaWriteIndex (pcmciac, 0x3d4, 0x43, yhigh); + pcmciaWriteIndex (pcmciac, 0x3d4, 0x46, xoff); + pcmciaWriteIndex (pcmciac, 0x3d4, 0x47, yoff); + } else { + x >>= 3; + y >>= 3; + xlow = (CARD8) x; + xhigh = (CARD8) (x >> 8); + ylow = (CARD8) y; + yhigh = (CARD8) (y >> 8); + /* Don't be alarmed, yes the upper 3bits of the index are correct */ + pcmciaWriteIndex (pcmciac, 0x3c4, 0x10 | xhigh << 5, xlow); + pcmciaWriteIndex (pcmciac, 0x3c4, 0x11 | yhigh << 5, ylow); + } +} + +static void +pcmciaMoveCursor (ScreenPtr pScreen, int x, int y) +{ + SetupCursor (pScreen); + + if (!pCurPriv->has_cursor) + return; + + if (!pScreenPriv->enabled) + return; + + _pcmciaMoveCursor (pScreen, x, y); +} + +static void +pcmciaAllocCursorColors (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + CursorPtr pCursor = pCurPriv->pCursor; + + KdAllocateCursorPixels (pScreen, 0, pCursor, + &pCurPriv->source, &pCurPriv->mask); + switch (pScreenPriv->screen->fb[0].bitsPerPixel) { + case 4: + pCurPriv->source |= pCurPriv->source << 4; + pCurPriv->mask |= pCurPriv->mask << 4; + case 8: + pCurPriv->source |= pCurPriv->source << 8; + pCurPriv->mask |= pCurPriv->mask << 8; + case 16: + pCurPriv->source |= pCurPriv->source << 16; + pCurPriv->mask |= pCurPriv->mask << 16; + } +} + +static void +pcmciaSetCursorColors (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + CursorPtr pCursor = pCurPriv->pCursor; + CARD32 fg, bg; + + fg = pCurPriv->source; + bg = pCurPriv->mask; + + if (pcmciac->HP) { + /* + * This trident chip uses the palette for it's cursor colors - ouch! + * We enforce it to always stay the black/white colors as we don't + * want it to muck with the overscan color. Tough. Use softCursor + * if you want to change cursor colors. + */ + pcmciaWriteReg (pcmciac, 0x3c8, 0xff); /* DAC 0 */ + pcmciaWriteReg (pcmciac, 0x3c9, 0x00); + pcmciaWriteReg (pcmciac, 0x3c9, 0x00); + pcmciaWriteReg (pcmciac, 0x3c9, 0x00); + pcmciaWriteReg (pcmciac, 0x3c8, 0x00); /* DAC 255 */ + pcmciaWriteReg (pcmciac, 0x3c9, 0x3f); + pcmciaWriteReg (pcmciac, 0x3c9, 0x3f); + pcmciaWriteReg (pcmciac, 0x3c9, 0x3f); + } else { + CARD8 temp; + temp = pcmciaReadIndex(pcmciac, 0x3c4, 0x12); + pcmciaWriteIndex (pcmciac, 0x3c4, 0x12, (temp & 0xFE) | 0x02); + + pcmciaWriteReg (pcmciac, 0x3c8, 0x00); /* DAC 256 */ + pcmciaWriteReg (pcmciac, 0x3c9, fg); + pcmciaWriteReg (pcmciac, 0x3c9, fg >> 8); + pcmciaWriteReg (pcmciac, 0x3c9, fg >> 16); + pcmciaWriteReg (pcmciac, 0x3c8, 0x00); /* DAC 257 */ + pcmciaWriteReg (pcmciac, 0x3c9, bg); + pcmciaWriteReg (pcmciac, 0x3c9, bg >> 8); + pcmciaWriteReg (pcmciac, 0x3c9, bg >> 16); + + pcmciaWriteIndex (pcmciac, 0x3c4, 0x12, temp); + } +} + +void +pcmciaRecolorCursor (ScreenPtr pScreen, int ndef, xColorItem *pdef) +{ + SetupCursor (pScreen); + CursorPtr pCursor = pCurPriv->pCursor; + xColorItem sourceColor, maskColor; + + if (!pCurPriv->has_cursor || !pCursor) + return; + + if (!pScreenPriv->enabled) + return; + + if (pdef) + { + while (ndef) + { + if (pdef->pixel == pCurPriv->source || + pdef->pixel == pCurPriv->mask) + break; + ndef--; + } + if (!ndef) + return; + } + pcmciaAllocCursorColors (pScreen); + pcmciaSetCursorColors (pScreen); +} + +#define InvertBits32(v) { \ + v = ((v & 0x55555555) << 1) | ((v >> 1) & 0x55555555); \ + v = ((v & 0x33333333) << 2) | ((v >> 2) & 0x33333333); \ + v = ((v & 0x0f0f0f0f) << 4) | ((v >> 4) & 0x0f0f0f0f); \ +} + +static void +pcmciaLoadCursor (ScreenPtr pScreen, int x, int y) +{ + SetupCursor(pScreen); + CursorPtr pCursor = pCurPriv->pCursor; + CursorBitsPtr bits = pCursor->bits; + int w, h; + CARD8 *ram; + CARD32 *msk, *mskLine, *src, *srcLine; + int i, j; + int cursor_address; + int lwsrc; + unsigned char ramdac_control_; + CARD32 offset; + + /* + * Allocate new colors + */ + pcmciaAllocCursorColors (pScreen); + + pCurPriv->pCursor = pCursor; + pCurPriv->xhot = pCursor->bits->xhot; + pCurPriv->yhot = pCursor->bits->yhot; + + /* + * Stick new image into cursor memory + */ + if (pcmciac->HP) { + ram = (CARD8 *) pcmcias->cursor_base; + } else { + /* The last bank */ + ram = (CARD8 *) pcmciac->fb; + pcmciaWriteIndex (pcmciac, 0x3ce, 0x09, 0x7f); + pcmciaWriteIndex (pcmciac, 0x3ce, 0x0A, 0x7f); + } + + mskLine = (CARD32 *) bits->mask; + srcLine = (CARD32 *) bits->source; + + h = bits->height; + if (h > PCMCIA_CURSOR_HEIGHT) + h = PCMCIA_CURSOR_HEIGHT; + + lwsrc = BitmapBytePad(bits->width) / 4; + + for (i = 0; i < PCMCIA_CURSOR_HEIGHT; i++) { + msk = mskLine; + src = srcLine; + mskLine += lwsrc; + srcLine += lwsrc; + for (j = 0; j < PCMCIA_CURSOR_WIDTH / 32; j++) { + + CARD32 m, s; + + if (i < h && j < lwsrc) + { + m = *msk++; + s = *src++; + InvertBits32(m); + InvertBits32(s); + } + else + { + m = 0; + s = 0; + } + + /* Do 8bit access */ + *ram++ = (m & 0xff); + *ram++ = (m & 0xff00) >> 8; + *ram++ = (m & 0xff0000) >> 16; + *ram++ = (m & 0xff000000) >> 24; + *ram++ = (s & 0xff); + *ram++ = (s & 0xff00) >> 8; + *ram++ = (s & 0xff0000) >> 16; + *ram++ = (s & 0xff000000) >> 24; + } + } + + /* Set address for cursor bits */ + if (pcmciac->HP) { + offset = pcmcias->cursor_base - (CARD8 *) pcmcias->screen; + offset >>= 10; + pcmciaWriteIndex (pcmciac, 0x3d4, 0x44, (CARD8) (offset & 0xff)); + pcmciaWriteIndex (pcmciac, 0x3d4, 0x45, (CARD8) (offset >> 8)); + } else { + pcmciaWriteIndex (pcmciac, 0x3c4, 0x13, 15); /* ?? */ + } + + /* Set new color */ + pcmciaSetCursorColors (pScreen); + + /* Enable the cursor */ + if (pcmciac->HP) + pcmciaWriteIndex (pcmciac, 0x3d4, 0x50, 0xc1); + else + pcmciaWriteIndex (pcmciac, 0x3c4, 0x12, 0x05); + + /* Move to new position */ + pcmciaMoveCursor (pScreen, x, y); +} + +static void +pcmciaUnloadCursor (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + /* Disable cursor */ + if (pcmciac->HP) + pcmciaWriteIndex (pcmciac, 0x3d4, 0x50, 0); + else + pcmciaWriteIndex (pcmciac, 0x3c4, 0x12, 0); +} + +static Bool +pcmciaRealizeCursor (ScreenPtr pScreen, CursorPtr pCursor) +{ + SetupCursor(pScreen); + + if (!pScreenPriv->enabled) + return TRUE; + + /* miRecolorCursor does this */ + if (pCurPriv->pCursor == pCursor) + { + if (pCursor) + { + int x, y; + + miPointerPosition (&x, &y); + pcmciaLoadCursor (pScreen, x, y); + } + } + return TRUE; +} + +static Bool +pcmciaUnrealizeCursor (ScreenPtr pScreen, CursorPtr pCursor) +{ + return TRUE; +} + +static void +pcmciaSetCursor (ScreenPtr pScreen, CursorPtr pCursor, int x, int y) +{ + SetupCursor(pScreen); + + pCurPriv->pCursor = pCursor; + + if (!pScreenPriv->enabled) + return; + + if (pCursor) + pcmciaLoadCursor (pScreen, x, y); + else + pcmciaUnloadCursor (pScreen); +} + +miPointerSpriteFuncRec pcmciaPointerSpriteFuncs = { + pcmciaRealizeCursor, + pcmciaUnrealizeCursor, + pcmciaSetCursor, + pcmciaMoveCursor, +}; + +static void +pcmciaQueryBestSize (int class, + unsigned short *pwidth, unsigned short *pheight, + ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + switch (class) + { + case CursorShape: + if (*pwidth > pCurPriv->width) + *pwidth = pCurPriv->width; + if (*pheight > pCurPriv->height) + *pheight = pCurPriv->height; + if (*pwidth > pScreen->width) + *pwidth = pScreen->width; + if (*pheight > pScreen->height) + *pheight = pScreen->height; + break; + default: + fbQueryBestSize (class, pwidth, pheight, pScreen); + break; + } +} + +Bool +pcmciaCursorInit (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + if (!pcmcias->cursor_base) + { + pCurPriv->has_cursor = FALSE; + return FALSE; + } + + pCurPriv->width = PCMCIA_CURSOR_WIDTH; + pCurPriv->height= PCMCIA_CURSOR_HEIGHT; + pScreen->QueryBestSize = pcmciaQueryBestSize; + miPointerInitialize (pScreen, + &pcmciaPointerSpriteFuncs, + &kdPointerScreenFuncs, + FALSE); + pCurPriv->has_cursor = TRUE; + pCurPriv->pCursor = NULL; + return TRUE; +} + +void +pcmciaCursorEnable (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + if (pCurPriv->has_cursor) + { + if (pCurPriv->pCursor) + { + int x, y; + + miPointerPosition (&x, &y); + pcmciaLoadCursor (pScreen, x, y); + } + else + pcmciaUnloadCursor (pScreen); + } +} + +void +pcmciaCursorDisable (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + if (!pScreenPriv->enabled) + return; + + if (pCurPriv->has_cursor) + { + if (pCurPriv->pCursor) + { + pcmciaUnloadCursor (pScreen); + } + } +} + +void +pcmciaCursorFini (ScreenPtr pScreen) +{ + SetupCursor (pScreen); + + pCurPriv->pCursor = NULL; +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/pcmcia/pcmciashadow.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/pcmcia/pcmciashadow.c @@ -0,0 +1,200 @@ +/* + * Copyright 2001 by Alan Hourihane, Sychdyn, North Wales, UK. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Alan Hourihane not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Alan Hourihane makes no representations + * about the suitability of this software for any purpose. It is provided + * "as is" without express or implied warranty. + * + * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR 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. + * + * Authors: Alan Hourihane, + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/pcmcia/pcmciashadow.c,v 1.1 2001/05/23 08:56:09 alanh Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include "scrnintstr.h" +#include "windowstr.h" +#include "font.h" +#include "dixfontstr.h" +#include "fontstruct.h" +#include "mi.h" +#include "regionstr.h" +#include "globals.h" +#include "gcstruct.h" +#include "shadow.h" +#include "fb.h" + +void +tridentUpdatePacked (ScreenPtr pScreen, + shadowBufPtr pBuf) +{ + RegionPtr damage = &pBuf->damage; + PixmapPtr pShadow = pBuf->pPixmap; + shadowScrPriv(pScreen); + int nbox = REGION_NUM_RECTS (damage); + BoxPtr pbox = REGION_RECTS (damage); + FbBits *shaBase, *shaLine, *sha; + FbStride shaStride; + int scrBase, scrLine, scr; + int shaBpp; + int shaXoff, shaYoff; /* XXX assumed to be zero */ + int x, y, w, h, width; + int i; + FbBits *winBase, *win; + CARD32 winSize; + + fbGetDrawable (&pShadow->drawable, shaBase, shaStride, shaBpp, shaXoff, shaYoff); + while (nbox--) + { + x = pbox->x1 * shaBpp; + y = pbox->y1; + w = (pbox->x2 - pbox->x1) * shaBpp; + h = pbox->y2 - pbox->y1; + + scrLine = (x >> FB_SHIFT); + shaLine = shaBase + y * shaStride + (x >> FB_SHIFT); + + x &= FB_MASK; + w = (w + x + FB_MASK) >> FB_SHIFT; + + while (h--) + { + winSize = 0; + scrBase = 0; + width = w; + scr = scrLine; + sha = shaLine; + while (width) { + /* how much remains in this window */ + i = scrBase + winSize - scr; + if (i <= 0 || scr < scrBase) + { + winBase = (FbBits *) (*pBuf->window) (pScreen, + y, + scr * sizeof (FbBits), + SHADOW_WINDOW_WRITE, + &winSize, + pBuf->closure); + if(!winBase) + return; + scrBase = scr; + winSize /= sizeof (FbBits); + i = winSize; + } + win = winBase + (scr - scrBase); + if (i > width) + i = width; + width -= i; + scr += i; + { + CARD16 *sha16 = (CARD16*)sha; + CARD16 *win16 = (CARD16*)win; + while (i--) + { + *win16++ = *sha16++; + *win16++ = *sha16++; + } + } + } + shaLine += shaStride; + y++; + } + pbox++; + } +} + +void +cirrusUpdatePacked (ScreenPtr pScreen, + shadowBufPtr pBuf) +{ + RegionPtr damage = &pBuf->damage; + PixmapPtr pShadow = pBuf->pPixmap; + shadowScrPriv(pScreen); + int nbox = REGION_NUM_RECTS (damage); + BoxPtr pbox = REGION_RECTS (damage); + FbBits *shaBase, *shaLine, *sha; + FbStride shaStride; + int scrBase, scrLine, scr; + int shaBpp; + int shaXoff, shaYoff; /* XXX assumed to be zero */ + int x, y, w, h, width; + int i; + FbBits *winBase, *win; + CARD32 winSize; + + fbGetDrawable (&pShadow->drawable, shaBase, shaStride, shaBpp, shaXoff, shaYoff); + while (nbox--) + { + x = pbox->x1 * shaBpp; + y = pbox->y1; + w = (pbox->x2 - pbox->x1) * shaBpp; + h = pbox->y2 - pbox->y1; + + scrLine = (x >> FB_SHIFT); + shaLine = shaBase + y * shaStride + (x >> FB_SHIFT); + + x &= FB_MASK; + w = (w + x + FB_MASK) >> FB_SHIFT; + + while (h--) + { + winSize = 0; + scrBase = 0; + width = w; + scr = scrLine; + sha = shaLine; + while (width) { + /* how much remains in this window */ + i = scrBase + winSize - scr; + if (i <= 0 || scr < scrBase) + { + winBase = (FbBits *) (*pBuf->window) (pScreen, + y, + scr * sizeof (FbBits), + SHADOW_WINDOW_WRITE, + &winSize, + pBuf->closure); + if(!winBase) + return; + scrBase = scr; + winSize /= sizeof (FbBits); + i = winSize; + } + win = winBase + (scr - scrBase); + if (i > width) + i = width; + width -= i; + scr += i; + { + CARD8 *sha8 = (CARD8*)sha; + CARD8 *win8 = (CARD8*)win; + while (i--) + { + *win8++ = *sha8++; + *win8++ = *sha8++; + *win8++ = *sha8++; + *win8++ = *sha8++; + } + } + } + shaLine += shaStride; + y++; + } + pbox++; + } +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/pcmcia/pcmciarotate.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/pcmcia/pcmciarotate.c @@ -0,0 +1,335 @@ +/* + * $RCSId: xc/programs/Xserver/miext/shadow/shrotate.c,v 1.3 2001/07/21 04:13:26 keithp Exp $ + * + * Copyright © 2001 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include "scrnintstr.h" +#include "windowstr.h" +#include "font.h" +#include "dixfontstr.h" +#include "fontstruct.h" +#include "mi.h" +#include "regionstr.h" +#include "globals.h" +#include "gcstruct.h" +#include "shadow.h" +#include "fb.h" + +/* + * These indicate which way the source (shadow) is scanned when + * walking the screen in a particular direction + */ + +#define LEFT_TO_RIGHT 1 +#define RIGHT_TO_LEFT -1 +#define TOP_TO_BOTTOM 2 +#define BOTTOM_TO_TOP -2 + +typedef CARD16 PcBits; +typedef INT32 PcStride; + +#define PC_SHIFT 4 +#define PC_UNIT (1 << PC_SHIFT) +#define PC_HALFUNIT (1 << (PC_SHIFT-1)) +#define PC_MASK (PC_UNIT - 1) +#define PC_ALLONES ((PcBits) -1) + +#define PcScrRight(x,b) FbScrRight(x,b) +#define PcScrLeft(x,b) FbScrLeft(x,b) +#define PcBitsMask(x,w) (PcScrRight(PC_ALLONES,(x) & PC_MASK) & \ + PcScrLeft(PC_ALLONES,(PC_UNIT - ((x) + (w))) & PC_MASK)) + +#define pcGetDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { \ + PixmapPtr _pPix; \ + if ((pDrawable)->type != DRAWABLE_PIXMAP) \ + _pPix = fbGetWindowPixmap(pDrawable); \ + else \ + _pPix = (PixmapPtr) (pDrawable); \ + (pointer) = (PcBits *) _pPix->devPrivate.ptr; \ + (stride) = ((int) _pPix->devKind) / sizeof (PcBits); \ + (bpp) = _pPix->drawable.bitsPerPixel; \ + (xoff) = 0; \ + (yoff) = 0; \ +} + +void +pcmciaUpdateRotatePacked (ScreenPtr pScreen, + shadowBufPtr pBuf) +{ + RegionPtr damage = &pBuf->damage; + PixmapPtr pShadow = pBuf->pPixmap; + int nbox = REGION_NUM_RECTS (damage); + BoxPtr pbox = REGION_RECTS (damage); + PcBits *shaBits; + PcStride shaStride; + int shaBpp; + int shaXoff, shaYoff; + int box_x1, box_x2, box_y1, box_y2; + int sha_x1, sha_y1; + int scr_x1, scr_x2, scr_y1, scr_y2, scr_w, scr_h; + int scr_x, scr_y; + int w; + int pixelsPerBits; + int pixelsMask; + PcStride shaStepOverY, shaStepDownY, shaStepOverX, shaStepDownX; + PcBits *shaLine, *sha; + int shaHeight = pShadow->drawable.height; + int shaWidth = pShadow->drawable.width; + PcBits shaMask; + int shaFirstShift, shaShift; + int o_x_dir; + int o_y_dir; + int x_dir; + int y_dir; + + pcGetDrawable (&pShadow->drawable, shaBits, shaStride, shaBpp, shaXoff, shaYoff); + pixelsPerBits = (sizeof (PcBits) * 8) / shaBpp; + pixelsMask = ~(pixelsPerBits - 1); + shaMask = PcBitsMask (PC_UNIT-shaBpp, shaBpp); + /* + * Compute rotation related constants to walk the shadow + */ + o_x_dir = LEFT_TO_RIGHT; + o_y_dir = TOP_TO_BOTTOM; + if (pBuf->randr & SHADOW_REFLECT_X) + o_x_dir = -o_x_dir; + if (pBuf->randr & SHADOW_REFLECT_Y) + o_y_dir = -o_y_dir; + switch (pBuf->randr & (SHADOW_ROTATE_ALL)) { + case SHADOW_ROTATE_0: /* upper left shadow -> upper left screen */ + default: + x_dir = o_x_dir; + y_dir = o_y_dir; + break; + case SHADOW_ROTATE_90: /* upper right shadow -> upper left screen */ + x_dir = o_y_dir; + y_dir = -o_x_dir; + break; + case SHADOW_ROTATE_180: /* lower right shadow -> upper left screen */ + x_dir = -o_x_dir; + y_dir = -o_y_dir; + break; + case SHADOW_ROTATE_270: /* lower left shadow -> upper left screen */ + x_dir = -o_y_dir; + y_dir = o_x_dir; + break; + } + switch (x_dir) { + case LEFT_TO_RIGHT: + shaStepOverX = shaBpp; + shaStepOverY = 0; + break; + case TOP_TO_BOTTOM: + shaStepOverX = 0; + shaStepOverY = shaStride; + break; + case RIGHT_TO_LEFT: + shaStepOverX = -shaBpp; + shaStepOverY = 0; + break; + case BOTTOM_TO_TOP: + shaStepOverX = 0; + shaStepOverY = -shaStride; + break; + } + switch (y_dir) { + case TOP_TO_BOTTOM: + shaStepDownX = 0; + shaStepDownY = shaStride; + break; + case RIGHT_TO_LEFT: + shaStepDownX = -shaBpp; + shaStepDownY = 0; + break; + case BOTTOM_TO_TOP: + shaStepDownX = 0; + shaStepDownY = -shaStride; + break; + case LEFT_TO_RIGHT: + shaStepDownX = shaBpp; + shaStepDownY = 0; + break; + } + + while (nbox--) + { + box_x1 = pbox->x1; + box_y1 = pbox->y1; + box_x2 = pbox->x2; + box_y2 = pbox->y2; + pbox++; + + /* + * Compute screen and shadow locations for this box + */ + switch (x_dir) { + case LEFT_TO_RIGHT: + scr_x1 = box_x1 & pixelsMask; + scr_x2 = (box_x2 + pixelsPerBits - 1) & pixelsMask; + + sha_x1 = scr_x1; + break; + case TOP_TO_BOTTOM: + scr_x1 = box_y1 & pixelsMask; + scr_x2 = (box_y2 + pixelsPerBits - 1) & pixelsMask; + + sha_y1 = scr_x1; + break; + case RIGHT_TO_LEFT: + scr_x1 = (shaWidth - box_x2) & pixelsMask; + scr_x2 = (shaWidth - box_x1 + pixelsPerBits - 1) & pixelsMask; + + sha_x1 = (shaWidth - scr_x1 - 1); + break; + case BOTTOM_TO_TOP: + scr_x1 = (shaHeight - box_y2) & pixelsMask; + scr_x2 = (shaHeight - box_y1 + pixelsPerBits - 1) & pixelsMask; + + sha_y1 = (shaHeight - scr_x1 - 1); + break; + } + switch (y_dir) { + case TOP_TO_BOTTOM: + scr_y1 = box_y1; + scr_y2 = box_y2; + + sha_y1 = scr_y1; + break; + case RIGHT_TO_LEFT: + scr_y1 = (shaWidth - box_x2); + scr_y2 = (shaWidth - box_x1); + + sha_x1 = box_x2 - 1; + break; + case BOTTOM_TO_TOP: + scr_y1 = shaHeight - box_y2; + scr_y2 = shaHeight - box_y1; + + sha_y1 = box_y2 - 1; + break; + case LEFT_TO_RIGHT: + scr_y1 = box_x1; + scr_y2 = box_x2; + + sha_x1 = box_x1; + break; + } + scr_w = ((scr_x2 - scr_x1) * shaBpp) >> PC_SHIFT; + scr_h = scr_y2 - scr_y1; + scr_y = scr_y1; + + /* shift amount for first pixel on screen */ + shaFirstShift = PC_UNIT - ((sha_x1 * shaBpp) & PC_MASK) - shaBpp; + + /* pointer to shadow data first placed on screen */ + shaLine = (shaBits + + sha_y1 * shaStride + + ((sha_x1 * shaBpp) >> PC_SHIFT)); + + /* + * Copy the bits, always write across the physical frame buffer + * to take advantage of write combining. + */ + while (scr_h--) + { + int p; + PcBits bits; + PcBits *win; + int i; + CARD32 winSize; + + sha = shaLine; + shaShift = shaFirstShift; + w = scr_w; + scr_x = scr_x1 * shaBpp >> PC_SHIFT; + + while (w) + { + /* + * Map some of this line + */ + win = (PcBits *) (*pBuf->window) (pScreen, + scr_y, + scr_x << 1, + SHADOW_WINDOW_WRITE, + &winSize, + pBuf->closure); + i = (winSize >> 1); + if (i > w) + i = w; + w -= i; + scr_x += i; + /* + * Copy the portion of the line mapped + */ + while (i--) + { + bits = 0; + p = pixelsPerBits; + /* + * Build one word of output from multiple inputs + * + * Note that for 90/270 rotations, this will walk + * down the shadow hitting each scanline once. + * This is probably not very efficient. + */ + while (p--) + { + bits = PcScrLeft(bits, shaBpp); + bits |= PcScrRight (*sha, shaShift) & shaMask; + + shaShift -= shaStepOverX; + if (shaShift >= PC_UNIT) + { + shaShift -= PC_UNIT; + sha--; + } + else if (shaShift < 0) + { + shaShift += PC_UNIT; + sha++; + } + sha += shaStepOverY; + } + *win++ = bits; + } + } + scr_y++; + shaFirstShift -= shaStepDownX; + if (shaFirstShift >= PC_UNIT) + { + shaFirstShift -= PC_UNIT; + shaLine--; + } + else if (shaFirstShift < 0) + { + shaFirstShift += PC_UNIT; + shaLine++; + } + shaLine += shaStepDownY; + } + } +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/pcmcia/modes.h +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/pcmcia/modes.h @@ -0,0 +1,66 @@ +/* + * Copyright 2001 by Alan Hourihane, Sychdyn, North Wales, UK. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Alan Hourihane not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Alan Hourihane makes no representations + * about the suitability of this software for any purpose. It is provided + * "as is" without express or implied warranty. + * + * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR 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. + * + * Authors: Alan Hourihane, + */ +/* $RCSId: $ */ + +#define V_NHSYNC 0x01 +#define V_NVSYNC 0x02 +#define V_PHSYNC 0x04 +#define V_PVSYNC 0x08 +#define V_INTERLACE 0x10 + +pcmciaDisplayModeRec pcmciaDefaultModes [] = { +/* 640x400 @ 70Hz (VGA) hsync: 37.9kHz */ + {640, 400, 70 ,31500, 640,672,736,832,0, 400,401,404,445,0, V_NHSYNC | V_PVSYNC}, +/* 640x480 @ 60Hz (Industry standard) hsync: 31.5kHz */ + {640, 480, 60 ,25200, 640,656,752,800,0, 480,490,492,525,0, V_NHSYNC | V_NVSYNC}, +/* 640x480 @ 72Hz (VESA) hsync: 37.9kHz */ + {640, 480, 72 ,31500, 640,664,704,832,0, 480,489,491,520,0, V_NHSYNC | V_NVSYNC}, +/* 640x480 @ 75Hz (VESA) hsync: 37.5kHz */ + {640, 480, 75 ,31500, 640,656,720,840,0, 480,481,484,500,0, V_NHSYNC | V_NVSYNC}, +/* 640x480 @ 85Hz (VESA) hsync: 43.3kHz */ + {640, 480, 85 ,36000, 640,696,752,832,0, 480,481,484,509,0, V_NHSYNC | V_NVSYNC}, +/* 800x600 @ 56Hz (VESA) hsync: 35.2kHz */ + {800, 600, 56 ,36000, 800,824,896,1024,0, 600,601,603,625,0, V_PHSYNC | V_PVSYNC}, +/* 800x600 @ 60Hz (VESA) hsync: 37.9kHz */ + {800, 600, 60 ,40000, 800,840,968,1056,0, 600,601,605,628,0, V_PHSYNC | V_PVSYNC}, +/* 800x600 @ 72Hz (VESA) hsync: 48.1kHz */ + {800, 600, 72 ,50000, 800,856,976,1040,0, 600,637,643,666,0, V_PHSYNC | V_PVSYNC}, +/* 800x600 @ 75Hz (VESA) hsync: 46.9kHz */ + {800, 600, 75 ,49500, 800,816,896,1056,0, 600,601,604,625,0, V_PHSYNC | V_PVSYNC}, +/* 800x600 @ 85Hz (VESA) hsync: 53.7kHz */ + {800, 600, 85 ,56300, 800,832,896,1048,0, 600,601,604,631,0, V_PHSYNC | V_PVSYNC}, +/* 1024x768i @ 43Hz (industry standard) hsync: 35.5kHz */ + {1024, 768, 43 ,44900, 1024,1032,1208,1264,0, 768,768,776,817,0, V_PHSYNC | V_PVSYNC | V_INTERLACE}, +/* 1024x768 @ 60Hz (VESA) hsync: 48.4kHz */ + {1024, 768, 60 ,65000, 1024,1048,1184,1344,0, 768,771,777,806,0, V_NHSYNC | V_NVSYNC}, +/* 1024x768 @ 70Hz (VESA) hsync: 56.5kHz */ + {1024, 768, 70 ,75000, 1024,1048,1184,1328,0, 768,771,777,806,0, V_NHSYNC | V_NVSYNC}, +/* 1024x768 @ 75Hz (VESA) hsync: 60.0kHz */ + {1024, 768, 75 ,78800, 1024,1040,1136,1312,0, 768,769,772,800,0, V_PHSYNC | V_PVSYNC}, +/* 1024x768 @ 85Hz (VESA) hsync: 68.7kHz */ + {1024, 768, 85 ,94500, 1024,1072,1168,1376,0, 768,769,772,808,0, V_PHSYNC | V_PVSYNC}, +/* 1152x864 @ 75Hz (VESA) hsync: 67.5kHz */ + {1152, 864, 75 ,108000, 1152,1216,1344,1600,0, 864,865,868,900,0, V_PHSYNC | V_PVSYNC}, + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} +}; --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/pcmcia/pcmciastub.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/pcmcia/pcmciastub.c @@ -0,0 +1,63 @@ +/* + * Copyright 2001 by Alan Hourihane, Sychdyn, North Wales, UK. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Alan Hourihane not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Alan Hourihane makes no representations + * about the suitability of this software for any purpose. It is provided + * "as is" without express or implied warranty. + * + * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR 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. + * + * Authors: Alan Hourihane, + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/pcmcia/pcmciastub.c,v 1.1 2001/05/23 08:56:09 alanh Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "pcmcia.h" + +void +InitCard (char *name) +{ + KdCardAttr attr; + + KdCardInfoAdd (&pcmciaFuncs, &attr, 0); +} + +void +InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv) +{ + KdInitOutput (pScreenInfo, argc, argv); +} + +void +InitInput (int argc, char **argv) +{ + KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs); +} + +extern pcmciaDisplayModeRec pcmciaDefaultModes[]; + +void +ddxUseMsg (void) +{ + KdUseMsg(); +} + +int +ddxProcessArgument (int argc, char **argv, int i) +{ + return KdProcessArgument (argc, argv, i); +} --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/pcmcia/pcmcia.c +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/pcmcia/pcmcia.c @@ -0,0 +1,1200 @@ +/* + * Copyright 2001 by Alan Hourihane, Sychdyn, North Wales, UK. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Alan Hourihane not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Alan Hourihane makes no representations + * about the suitability of this software for any purpose. It is provided + * "as is" without express or implied warranty. + * + * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR 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. + * + * Authors: Alan Hourihane, + * + * A driver for the following PCMCIA cards... + * Hewlett Packards HP VGA Out (Model F1252A) + * Colorgraphics Voyager VGA + * + * Tested running under a Compaq IPAQ Pocket PC running Linux + */ +/* $RCSId: xc/programs/Xserver/hw/kdrive/pcmcia/pcmcia.c,v 1.6 2002/10/14 18:01:41 keithp Exp $ */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "pcmcia.h" +#define extern +#include +#undef extern + +#define CLOCK 14318 /* KHz */ +#define CLK_N(a,b) (a & 0xff) +#define CLK_M(a,b) ((b) & 0x3f) +#define CLK_K(a,b) (((b) >> 6) & 3) +#define CLK_FREQ(a,b) (((CLK_N(a,b) + 8) * CLOCK) / ((CLK_M(a,b)+2) << CLK_K(a,b))) + +extern void +tridentUpdatePacked (ScreenPtr pScreen, + shadowBufPtr pBuf); +extern void +cirrusUpdatePacked (ScreenPtr pScreen, + shadowBufPtr pBuf); + +static Bool +tridentSetCLK(int clock, CARD8 *a, CARD8 *b); + +static Bool +CirrusFindClock(int freq, int *num_out, int *den_out); + +Bool +pcmciaCardInit (KdCardInfo *card) +{ + pcmciaCardInfo *pcmciac; + CARD8 r9; + + pcmciac = (pcmciaCardInfo *) xalloc (sizeof (pcmciaCardInfo)); + if (!pcmciac) + return FALSE; + + pcmciac->cop_base = (CARD8 *) KdMapDevice (PCMCIA_COP_BASE(card), + PCMCIA_COP_SIZE(card)); + + r9 = pcmciaReadIndex (pcmciac, 0x3c4, 0x09); + /* + * Crude detection.... + * The trident chip has a read only register at 0x09, which returns 0x4. + * If it's not that, we assume the cirrus chip. + * BREAKAGE.! If we have an anonymous PCMCIA card inserted, we could + * potentially smash something here. FIXME ! + */ + if (r9 == 0x04) { + ErrorF("PCMCIA: Found HP VGA card\n"); + pcmciac->HP = TRUE; /* Select HP VGA Out Card */ + } else { + ErrorF("PCMCIA: Found Voyager VGA card\n"); + pcmciac->HP = FALSE; /* Select Voyager VGA Card */ + } + + if (pcmciac->HP) { + /* needed by the accelerator - later */ + pcmciac->cop = (Cop *) (pcmciac->cop_base + TRIDENT_COP_OFF(card)); + } + + /* + * Map frame buffer + */ + if (pcmciac->HP) + pcmciac->fb = KdMapDevice (0x2ce00000, 0x80000); + else + pcmciac->fb = KdMapDevice (0x2c0a0000, 0x10000); /*64K bank switched*/ + + if (!pcmciac->fb) + return FALSE; + + pcmciac->window = 0; + + card->driver = pcmciac; + + return TRUE; +} + +Bool +pcmciaModeSupported (KdScreenInfo *screen, + const KdMonitorTiming *t) +{ + KdCardInfo *card = screen->card; + pcmciaCardInfo *pcmciac = (pcmciaCardInfo *) card->driver; + + if (pcmciac->HP) + { + CARD8 a, b; + if (!tridentSetCLK (t->clock, &a, &b)) + return FALSE; + } + else + { + int a, b; + if (!CirrusFindClock (t->clock, &a, &b)) + return FALSE; + } + + /* width must be a multiple of 16 */ + if (t->horizontal & 0xf) + return FALSE; + return TRUE; +} + +Bool +pcmciaModeUsable (KdScreenInfo *screen) +{ + KdCardInfo *card = screen->card; + pcmciaCardInfo *pcmciac = (pcmciaCardInfo *) card->driver; + int screen_size; + int pixel_width; + int byte_width; + int fb; + + if (screen->fb[0].depth == 8) + screen->fb[0].bitsPerPixel = 8; + else if (screen->fb[0].depth == 15 || screen->fb[0].depth == 16) + screen->fb[0].bitsPerPixel = 16; + else + return FALSE; + + screen_size = 0; + screen->fb[0].pixelStride = screen->width; + screen->fb[0].byteStride = screen->width * (screen->fb[0].bitsPerPixel >>3); + screen->fb[0].frameBuffer = pcmciac->fb; + screen_size = screen->fb[0].byteStride * screen->height; + + return screen_size <= pcmciac->memory; +} + +Bool +pcmciaScreenInit (KdScreenInfo *screen) +{ + pcmciaCardInfo *pcmciac = screen->card->driver; + pcmciaScreenInfo *pcmcias; + int screen_size, memory; + int i; + const KdMonitorTiming *t; + + pcmcias = (pcmciaScreenInfo *) xalloc (sizeof (pcmciaScreenInfo)); + if (!pcmcias) + return FALSE; + memset (pcmcias, '\0', sizeof (pcmciaScreenInfo)); + + /* if (!pcmciac->cop) */ + screen->dumb = TRUE; + + if (screen->fb[0].depth < 8) + screen->fb[0].depth = 8; + + /* default to 16bpp */ + if (!screen->fb[0].depth) + screen->fb[0].depth = 16; + + /* default to 60Hz refresh */ + if (!screen->width || !screen->height) + { + screen->width = 640; + screen->height = 400; + screen->rate = 60; + } + + pcmciac->memory = 512 * 1024; + if (pcmciac->HP && !screen->softCursor && screen->fb[0].depth == 8) + { + /* ack, bail on the HW cursor for everything -- no ARGB falback */ + pcmcias->cursor_base = 0; +#if 0 + /* Let's do hw cursor for the HP card, only in 8bit mode though */ + pcmcias->cursor_base = pcmcias->screen + pcmciac->memory - 4096; + pcmciac->memory -= 4096; +#endif + } + + pcmcias->screen = pcmciac->fb; + screen->driver = pcmcias; + + t = KdFindMode (screen, pcmciaModeSupported); + + screen->rate = t->rate; + screen->width = t->horizontal; + screen->height = t->vertical; + + pcmcias->randr = screen->randr; + + if (!KdTuneMode (screen, pcmciaModeUsable, pcmciaModeSupported)) + { + xfree (pcmcias); + return FALSE; + } + + switch (screen->fb[0].depth) { + case 4: + screen->fb[0].visuals = ((1 << StaticGray) | + (1 << GrayScale) | + (1 << StaticColor)); + screen->fb[0].blueMask = 0x00; + screen->fb[0].greenMask = 0x00; + screen->fb[0].redMask = 0x00; + break; + case 8: + screen->fb[0].visuals = ((1 << StaticGray) | + (1 << GrayScale) | + (1 << StaticColor) | + (1 << PseudoColor) | + (1 << TrueColor) | + (1 << DirectColor)); + screen->fb[0].blueMask = 0x00; + screen->fb[0].greenMask = 0x00; + screen->fb[0].redMask = 0x00; + break; + case 15: + screen->fb[0].visuals = (1 << TrueColor); + screen->fb[0].blueMask = 0x001f; + screen->fb[0].greenMask = 0x03e0; + screen->fb[0].redMask = 0x7c00; + break; + case 16: + screen->fb[0].visuals = (1 << TrueColor); + screen->fb[0].blueMask = 0x001f; + screen->fb[0].greenMask = 0x07e0; + screen->fb[0].redMask = 0xf800; + break; + } + + return TRUE; +} + +void * +tridentWindowLinear (ScreenPtr pScreen, + CARD32 row, + CARD32 offset, + int mode, + CARD32 *size, + void *closure) +{ + KdScreenPriv(pScreen); + pcmciaCardInfo *pcmciac = pScreenPriv->card->driver; + + if (!pScreenPriv->enabled) + return 0; + + *size = pScreenPriv->screen->fb[0].byteStride; + return (CARD8 *) pcmciac->fb + row * pScreenPriv->screen->fb[0].byteStride + offset; +} + +void * +cirrusWindowWindowed (ScreenPtr pScreen, + CARD32 row, + CARD32 offset, + int mode, + CARD32 *size, + void *closure) +{ + KdScreenPriv(pScreen); + pcmciaCardInfo *pcmciac = pScreenPriv->card->driver; + int bank, boffset; + + if (!pScreenPriv->enabled) + return 0; + + bank = (row * pScreenPriv->screen->fb[0].byteStride) / 0x1000; + pcmciaWriteIndex(pcmciac, 0x3ce, 0x0B, 0x0c); + pcmciaWriteIndex(pcmciac, 0x3ce, 0x09, bank); + pcmciaWriteIndex(pcmciac, 0x3ce, 0x0A, bank); + *size = pScreenPriv->screen->fb[0].byteStride; + return (CARD8 *) pcmciac->fb + (row * pScreenPriv->screen->fb[0].byteStride) - (bank * 0x1000) + offset; +} + +LayerPtr +pcmciaLayerCreate (ScreenPtr pScreen) +{ + KdScreenPriv(pScreen); + KdScreenInfo *screen = pScreenPriv->screen; + pcmciaCardInfo *pcmciac = pScreenPriv->card->driver; + pcmciaScreenInfo *pcmcias = (pcmciaScreenInfo *) pScreenPriv->screen->driver; + ShadowUpdateProc update; + ShadowWindowProc window; + PixmapPtr pPixmap; + int kind; + + if (pcmciac->HP) { + window = tridentWindowLinear; + if (pcmcias->randr == RR_Rotate_0) + update = tridentUpdatePacked; + else + update = pcmciaUpdateRotatePacked; + } else { + window = cirrusWindowWindowed; + if (pcmcias->randr == RR_Rotate_0) + update = cirrusUpdatePacked; + else + update = pcmciaUpdateRotatePacked; + } + + if (!update) + abort (); + + kind = LAYER_SHADOW; + pPixmap = 0; + + return LayerCreate (pScreen, kind, screen->fb[0].depth, + pPixmap, update, window, pcmcias->randr, 0); +} + +void +pcmciaConfigureScreen (ScreenPtr pScreen) +{ + KdScreenPriv(pScreen); + KdScreenInfo *screen = pScreenPriv->screen; + FbdevPriv *priv = pScreenPriv->card->driver; + pcmciaScreenInfo *pcmcias = (pcmciaScreenInfo *) screen->driver; + KdMouseMatrix m; + + KdComputeMouseMatrix (&m, pcmcias->randr, + screen->width, screen->height); + + if (m.matrix[0][0]) + { + pScreen->width = screen->width; + pScreen->height = screen->height; + pScreen->mmWidth = screen->width_mm; + pScreen->mmHeight = screen->height_mm; + } + else + { + pScreen->width = screen->height; + pScreen->height = screen->width; + pScreen->mmWidth = screen->height_mm; + pScreen->mmHeight = screen->width_mm; + } + KdSetMouseMatrix (&m); +} + +#ifdef RANDR + +Bool +pcmciaRandRSupported (ScreenPtr pScreen, + const KdMonitorTiming *t) +{ + KdScreenPriv(pScreen); + pcmciaCardInfo *pcmciac = pScreenPriv->card->driver; + KdScreenInfo *screen = pScreenPriv->screen; + int screen_size; + int byteStride; + + /* Make sure the clock is supported */ + if (!pcmciaModeSupported (screen, t)) + return FALSE; + /* Check for sufficient memory */ + byteStride = screen->width * (screen->fb[0].bitsPerPixel >>3); + screen_size = byteStride * screen->height; + + return screen_size <= pcmciac->memory; +} + +Bool +pcmciaRandRGetInfo (ScreenPtr pScreen, Rotation *rotations) +{ + KdScreenPriv(pScreen); + pcmciaScreenInfo *pcmcias = (pcmciaScreenInfo *) pScreenPriv->screen->driver; + + *rotations = (RR_Rotate_0|RR_Rotate_90|RR_Rotate_180|RR_Rotate_270| + RR_Reflect_X|RR_Reflect_Y); + + return KdRandRGetInfo (pScreen, pcmcias->randr, pcmciaRandRSupported); +} + +int +pcmciaLayerAdd (WindowPtr pWin, pointer value) +{ + ScreenPtr pScreen = pWin->drawable.pScreen; + LayerPtr pLayer = (LayerPtr) value; + + if (!LayerWindowAdd (pScreen, pLayer, pWin)) + return WT_STOPWALKING; + + return WT_WALKCHILDREN; +} + +int +pcmciaLayerRemove (WindowPtr pWin, pointer value) +{ + ScreenPtr pScreen = pWin->drawable.pScreen; + LayerPtr pLayer = (LayerPtr) value; + + LayerWindowRemove (pScreen, pLayer, pWin); + + return WT_WALKCHILDREN; +} + +pcmciaRandRSetConfig (ScreenPtr pScreen, + Rotation randr, + int rate, + RRScreenSizePtr pSize) +{ + KdScreenPriv(pScreen); + KdScreenInfo *screen = pScreenPriv->screen; + FbdevPriv *priv = pScreenPriv->card->driver; + pcmciaScreenInfo *pcmcias = (pcmciaScreenInfo *) pScreenPriv->screen->driver; + Bool wasEnabled = pScreenPriv->enabled; + int newwidth, newheight; + LayerPtr pNewLayer; + int kind; + int oldrandr = pcmcias->randr; + PixmapPtr pPixmap; + const KdMonitorTiming *t; + + randr = KdAddRotation (screen->randr, randr); + + t = KdRandRGetTiming (pScreen, pcmciaRandRSupported, rate, pSize); + + if (wasEnabled) + KdDisableScreen (pScreen); + + screen->rate = t->rate; + screen->width = t->horizontal; + screen->height = t->vertical; + + pcmcias->randr = randr; + pcmciaConfigureScreen (pScreen); + + pNewLayer = pcmciaLayerCreate (pScreen); + + if (!pNewLayer) + { + pcmcias->randr = oldrandr; + pcmciaConfigureScreen (pScreen); + if (wasEnabled) + KdEnableScreen (pScreen); + return FALSE; + } + + if (WalkTree (pScreen, pcmciaLayerAdd, (pointer) pNewLayer) == WT_STOPWALKING) + { + WalkTree (pScreen, pcmciaLayerRemove, (pointer) pNewLayer); + LayerDestroy (pScreen, pNewLayer); + pcmcias->randr = oldrandr; + pcmciaConfigureScreen (pScreen); + if (wasEnabled) + KdEnableScreen (pScreen); + return FALSE; + } + WalkTree (pScreen, pcmciaLayerRemove, (pointer) pcmcias->pLayer); + LayerDestroy (pScreen, pcmcias->pLayer); + pcmcias->pLayer = pNewLayer; + if (wasEnabled) + KdEnableScreen (pScreen); + return TRUE; +} + +Bool +pcmciaRandRInit (ScreenPtr pScreen) +{ + rrScrPrivPtr pScrPriv; + + if (!RRScreenInit (pScreen)) + return FALSE; + + pScrPriv = rrGetScrPriv(pScreen); + pScrPriv->rrGetInfo = pcmciaRandRGetInfo; + pScrPriv->rrSetConfig = pcmciaRandRSetConfig; + return TRUE; +} +#endif + +Bool +pcmciaInitScreen (ScreenPtr pScreen) +{ + KdScreenPriv(pScreen); + FbdevPriv *priv = pScreenPriv->card->driver; + pcmciaScreenInfo *pcmcias = (pcmciaScreenInfo *) pScreenPriv->screen->driver; + + if (!LayerStartInit (pScreen)) + return FALSE; + if (!LayerFinishInit (pScreen)) + return FALSE; + + pcmciaConfigureScreen (pScreen); + + pcmcias->pLayer = pcmciaLayerCreate (pScreen); + if (!pcmcias->pLayer) + return FALSE; +#ifdef RANDR + if (!pcmciaRandRInit (pScreen)) + return FALSE; +#endif + return TRUE; +} + +CARD8 +pcmciaReadIndex (pcmciaCardInfo *pcmciac, CARD16 port, CARD8 index) +{ + CARD8 value; + + pcmciac->cop_base[port] = index; + value = pcmciac->cop_base[port+1]; + return value; +} + +void +pcmciaWriteIndex (pcmciaCardInfo *pcmciac, CARD16 port, CARD8 index, CARD8 value) +{ + pcmciac->cop_base[port] = index; + pcmciac->cop_base[port+1] = value; +} + +CARD8 +pcmciaReadReg (pcmciaCardInfo *pcmciac, CARD16 port) +{ + CARD8 value; + + value = pcmciac->cop_base[port]; + + return value; +} + +void +pcmciaWriteReg (pcmciaCardInfo *pcmciac, CARD16 port, CARD8 value) +{ + pcmciac->cop_base[port] = value; +} + + +void +pcmciaPause () +{ + struct timeval tv; + + tv.tv_sec = 0; + tv.tv_usec = 50 * 1000; + select (1, 0, 0, 0, &tv); +} + +void +pcmciaPreserve (KdCardInfo *card) +{ +} + +/* CLOCK_FACTOR is double the osc freq in kHz (osc = 14.31818 MHz) */ +#define CLOCK_FACTOR 28636 + +/* stability constraints for internal VCO -- MAX_VCO also determines the maximum Video pixel clock */ +#define MIN_VCO CLOCK_FACTOR +#define MAX_VCO 111000 + +/* clock in kHz is (numer * CLOCK_FACTOR / (denom & 0x3E)) >> (denom & 1) */ +#define VCOVAL(n, d) \ + ((((n) & 0x7F) * CLOCK_FACTOR / ((d) & 0x3E)) ) + +#define CLOCKVAL(n, d) \ + (VCOVAL(n, d) >> ((d) & 1)) + +static Bool +CirrusFindClock(int freq, int *num_out, int *den_out) +{ + int n; + int num = 0, den = 0; + int mindiff; + + /* + * If max_clock is greater than the MAX_VCO default, ignore + * MAX_VCO. On the other hand, if MAX_VCO is higher than max_clock, + * make use of the higher MAX_VCO value. + */ + + mindiff = freq; + for (n = 0x10; n < 0x7f; n++) { + int d; + for (d = 0x14; d < 0x3f; d++) { + int c, diff; + /* Avoid combinations that can be unstable. */ + if ((VCOVAL(n, d) < MIN_VCO) || (VCOVAL(n, d) > MAX_VCO)) + continue; + c = CLOCKVAL(n, d); + diff = abs(c - freq); + if (diff < mindiff) { + mindiff = diff; + num = n; + den = d; + } + } + } + if (n == 0x80) + return FALSE; + + *num_out = num; + *den_out = den; + + return TRUE; +} + + +static Bool +tridentSetCLK(int clock, CARD8 *a, CARD8 *b) +{ + int powerup[4] = { 1,2,4,8 }; + int clock_diff = 750; + int freq, ffreq; + int m, n, k; + int p, q, r, s; + int startn, endn; + int endm, endk; + + p = q = r = s = 0; + + startn = 0; + endn = 121; + endm = 31; + endk = 1; + + freq = clock; + + for (k=0;k<=endk;k++) + for (n=startn;n<=endn;n++) + for (m=1;m<=endm;m++) + { + ffreq = ( ( ((n + 8) * CLOCK) / ((m + 2) * powerup[k]) )); + if ((ffreq > freq - clock_diff) && (ffreq < freq + clock_diff)) + { + clock_diff = (freq > ffreq) ? freq - ffreq : ffreq - freq; + p = n; q = m; r = k; s = ffreq; + } + } + +#if 0 + ErrorF ("ffreq %d clock %d\n", s, clock); +#endif + if (s == 0) + return FALSE; + + /* N is first 7bits, first M bit is 8th bit */ + *a = ((1 & q) << 7) | p; + /* first 4bits are rest of M, 1bit for K value */ + *b = (((q & 0xFE) >> 1) | (r << 4)); + return TRUE; +} + +Bool +pcmciaEnable (ScreenPtr pScreen) +{ + KdScreenPriv(pScreen); + KdScreenInfo *screen = pScreenPriv->screen; + pcmciaCardInfo *pcmciac = pScreenPriv->card->driver; + pcmciaScreenInfo *pcmcias = (pcmciaScreenInfo *) screen->driver; + int i,j; + unsigned char Sequencer[6]; + unsigned char CRTC[31]; + unsigned char Graphics[9]; + unsigned char Attribute[21]; + unsigned char MiscOutReg; + const KdMonitorTiming *t; + int hactive, hblank, hfp, hbp; + int vactive, vblank, vfp, vbp; + + int h_active; + int h_total; + int h_display_end; + int h_sync_start; + int h_sync_end; + int h_skew = 0; + + int v_active; + int v_total; + int v_sync_start; + int v_sync_end; + int v_skew = 0; + + t = KdFindMode (screen, pcmciaModeSupported); + + hactive = t->horizontal; + hfp = t->hfp; + hbp = t->hbp; + hblank = t->hblank; + + h_active = hactive; + h_sync_start = hactive + hfp; + h_sync_end = hactive + hblank - hbp; + h_total = hactive + hblank; + + vactive = t->vertical; + vfp = t->vfp; + vbp = t->vbp; + vblank = t->vblank; + + v_active = vactive; + v_sync_start = vactive + vfp; + v_sync_end = vactive + vblank - vbp; + v_total = vactive + vblank; + + /* + * compute correct Hsync & Vsync polarity + */ + + MiscOutReg = 0x23; + if (t->hpol == KdSyncNegative) + MiscOutReg |= 0x40; + if (t->vpol == KdSyncNegative) + MiscOutReg |= 0x80; + + /* + * Time Sequencer + */ + if (pScreenPriv->screen->fb[0].depth == 4) + Sequencer[0] = 0x02; + else + Sequencer[0] = 0x00; + Sequencer[1] = 0x01; + Sequencer[2] = 0x0F; + Sequencer[3] = 0x00; /* Font select */ + if (pScreenPriv->screen->fb[0].depth < 8) + Sequencer[4] = 0x06; /* Misc */ + else + Sequencer[4] = 0x0E; /* Misc */ + Sequencer[5] = 0x00; + + /* + * CRTC Controller + */ + CRTC[0] = ((h_total) >> 3) - 5; + CRTC[1] = (hactive >> 3) - 1; + CRTC[2] = ((min(h_sync_start,h_active)) >> 3) - 1; + CRTC[3] = ((((min(h_sync_end,h_total)) >> 3) - 1) & 0x1F) | 0x80; + i = (((h_skew << 2) + 0x10) & ~0x1F); + if (i < 0x80) + CRTC[3] |= i; + CRTC[4] = (h_sync_start >> 3); + CRTC[5] = (((((min(h_sync_end,h_total)) >> 3) - 1) & 0x20) << 2) + | (((h_sync_end >> 3)) & 0x1F); + + CRTC[6] = (v_total - 2) & 0xFF; + CRTC[7] = (((v_total - 2) & 0x100) >> 8) + | (((v_active - 1) & 0x100) >> 7) + | ((v_sync_start & 0x100) >> 6) + | ((((min(v_sync_start,v_active)) - 1) & 0x100) >> 5) + | 0x10 + | (((v_total - 2) & 0x200) >> 4) + | (((v_active - 1) & 0x200) >> 3) + | ((v_sync_start & 0x200) >> 2); + CRTC[8] = 0x00; + CRTC[9] = ((((min(v_sync_start,v_active))-1) & 0x200) >> 4) | 0x40; + CRTC[10] = 0x00; + CRTC[11] = 0x00; + CRTC[12] = 0x00; + CRTC[13] = 0x00; + CRTC[14] = 0x00; + CRTC[15] = 0x00; + CRTC[16] = v_sync_start & 0xFF; + CRTC[17] = (v_sync_end & 0x0F) | 0x20; + CRTC[18] = (v_active - 1) & 0xFF; + if (pScreenPriv->screen->fb[0].depth == 4) + CRTC[19] = pScreenPriv->screen->fb[0].pixelStride >> 4; + else + if (pScreenPriv->screen->fb[0].depth == 8) + CRTC[19] = pScreenPriv->screen->fb[0].pixelStride >> 3; + else + if (pScreenPriv->screen->fb[0].depth == 16 || + pScreenPriv->screen->fb[0].depth == 15) + CRTC[19] = pScreenPriv->screen->fb[0].pixelStride >> 2; + CRTC[20] = 0x00; + CRTC[21] = ((min(v_sync_end,v_active)) - 1) & 0xFF; + CRTC[22] = ((min(v_sync_end,v_active)) - 1) & 0xFF; + if (pScreenPriv->screen->fb[0].depth < 8) + CRTC[23] = 0xE3; + else + CRTC[23] = 0xC3; + CRTC[24] = 0xFF; + CRTC[25] = 0x00; + CRTC[26] = 0x00; +#if 0 + if (!pcmciac->HP) + if (mode.Flags & V_INTERLACE) CRTC[26] |= 0x01; +#endif + if (pcmciac->HP) + CRTC[27] = 0x00; + else + CRTC[27] = 0x22; + CRTC[28] = 0x00; + CRTC[29] = 0x00; + CRTC[30] = 0x80; +#if 0 + if (pcmciac->HP) + if (mode.Flags & V_INTERLACE) CRTC[30] |= 0x04; +#endif + +{ + int nExtBits = 0; + CARD32 ExtBits; + CARD32 ExtBitMask = ((1 << nExtBits) - 1) << 6; + + CRTC[3] = (CRTC[3] & ~0x1F) + | ((((min(h_sync_end,h_total)) >> 3) - 1) & 0x1F); + CRTC[5] = (CRTC[5] & ~0x80) + | (((((min(h_sync_end,h_total)) >> 3) - 1) & 0x20) << 2); + ExtBits = (((min(h_sync_end,h_total)) >> 3) - 1) & ExtBitMask; + + /* First the horizontal case */ + if ((((min(h_sync_end,h_total)) >> 3) == (h_total >> 3))) + { + int i = (CRTC[3] & 0x1F) + | ((CRTC[5] & 0x80) >> 2) + | ExtBits; + if ((i-- > ((((min(h_sync_start,h_active)) >> 3) - 1) + & (0x3F | ExtBitMask))) + && ((min(h_sync_end,h_total)) == h_total)) + i = 0; + CRTC[3] = (CRTC[3] & ~0x1F) | (i & 0x1F); + CRTC[5] = (CRTC[5] & ~0x80) | ((i << 2) & 0x80); + ExtBits = i & ExtBitMask; + } +} +{ + CARD32 ExtBits; + CARD32 ExtBitMask = 0; + /* If width is not known nBits should be 0. In this + * case BitMask is set to 0 so we can check for it. */ + CARD32 BitMask = 0; + int VBlankStart = ((min(v_sync_start,v_active)) - 1) & 0xFF; + CRTC[22] = ((min(v_sync_end,v_total)) - 1) & 0xFF; + ExtBits = ((min(v_sync_end,v_total)) - 1) & ExtBitMask; + + if ((min(v_sync_end,v_total)) == v_total) + /* Null top overscan */ + { + int i = CRTC[22] | ExtBits; + if (((BitMask && ((i & BitMask) > (VBlankStart & BitMask))) + || ((i > VBlankStart) && /* 8-bit case */ + ((i & 0x7F) > (VBlankStart & 0x7F)))) && /* 7-bit case */ + !(CRTC[9] & 0x9F)) /* 1 scanline/row */ + i = 0; + else + i = (i - 1); + CRTC[22] = i & 0xFF; + ExtBits = i & 0xFF00; + } +} + + /* + * Graphics Display Controller + */ + Graphics[0] = 0x00; + Graphics[1] = 0x00; + Graphics[2] = 0x00; + Graphics[3] = 0x00; + Graphics[4] = 0x00; + if (pScreenPriv->screen->fb[0].depth == 4) + Graphics[5] = 0x02; + else + Graphics[5] = 0x40; + Graphics[6] = 0x05; /* only map 64k VGA memory !!!! */ + Graphics[7] = 0x0F; + Graphics[8] = 0xFF; + + Attribute[0] = 0x00; /* standard colormap translation */ + Attribute[1] = 0x01; + Attribute[2] = 0x02; + Attribute[3] = 0x03; + Attribute[4] = 0x04; + Attribute[5] = 0x05; + Attribute[6] = 0x06; + Attribute[7] = 0x07; + Attribute[8] = 0x08; + Attribute[9] = 0x09; + Attribute[10] = 0x0A; + Attribute[11] = 0x0B; + Attribute[12] = 0x0C; + Attribute[13] = 0x0D; + Attribute[14] = 0x0E; + Attribute[15] = 0x0F; + if (pScreenPriv->screen->fb[0].depth == 4) + Attribute[16] = 0x81; + else + Attribute[16] = 0x41; + if (pScreenPriv->screen->fb[0].bitsPerPixel == 16) + Attribute[17] = 0x00; + else + Attribute[17] = 0xFF; + Attribute[18] = 0x0F; + Attribute[19] = 0x00; + Attribute[20] = 0x00; + + /* Wake up the card */ + if (pcmciac->HP) { + pcmciaWriteReg(pcmciac, 0x3c3, 0x1); + pcmciaWriteReg(pcmciac, 0x46e8, 0x10); + } else { + pcmciaWriteReg(pcmciac, 0x105, 0x1); + pcmciaWriteReg(pcmciac, 0x46e8, 0x1f); + pcmciaWriteReg(pcmciac, 0x102, 0x1); + pcmciaWriteReg(pcmciac, 0x46e8, 0xf); + pcmciaWriteReg(pcmciac, 0x3c3, 0x1); + } + + if (pcmciac->HP) { + /* unlock */ + pcmciaWriteIndex(pcmciac, 0x3c4, 0x11, 0x92); + j = pcmciaReadIndex(pcmciac, 0x3c4, 0xb); + pcmciaWriteIndex(pcmciac, 0x3c4, 0xe, 0xc2); + + /* switch on dac */ + pcmciaWriteIndex(pcmciac, 0x3d4, 0x29, 0x24); + /* switch on the accelerator */ + pcmciaWriteIndex(pcmciac, 0x3d4, 0x36, 0x80); + + /* bump up memory clk */ + pcmciaWriteReg(pcmciac, 0x43c6, 0x65); + pcmciaWriteReg(pcmciac, 0x43c7, 0x00); + } else { + /* unlock */ + pcmciaWriteIndex(pcmciac, 0x3c4, 0x06, 0x12); + pcmciaWriteReg(pcmciac, 0x3c2, MiscOutReg); + } + + /* synchronous reset */ + pcmciaWriteIndex(pcmciac, 0x3c4, 0, 0); + + pcmciaWriteReg(pcmciac, 0x3da, 0x10); + + for (i=0;i<6;i++) + pcmciaWriteIndex(pcmciac, 0x3c4, i, Sequencer[i]); + + if (pcmciac->HP) { + /* Stick chip into color mode */ + pcmciaWriteIndex(pcmciac, 0x3ce, 0x2f, 0x06); + /* Switch on Linear addressing */ + pcmciaWriteIndex(pcmciac, 0x3d4, 0x21, 0x2e); + } else { + /* Stick chip into 8bit access mode - ugh! */ + pcmciaWriteIndex(pcmciac, 0x3c4, 0x0F, 0x20); /* 0x26 ? */ + /* reset mclk */ + pcmciaWriteIndex(pcmciac, 0x3c4, 0x1F, 0); + } + + pcmciaWriteIndex(pcmciac, 0x3c4, 0, 0x3); + + for (i=0;i<31;i++) + pcmciaWriteIndex(pcmciac, 0x3d4, i, CRTC[i]); + + for (i=0;i<9;i++) + pcmciaWriteIndex(pcmciac, 0x3ce, i, Graphics[i]); + + j = pcmciaReadReg(pcmciac, 0x3da); + + for (i=0;i<21;i++) { + pcmciaWriteReg(pcmciac, 0x3c0, i); + pcmciaWriteReg(pcmciac, 0x3c0, Attribute[i]); + } + + j = pcmciaReadReg(pcmciac, 0x3da); + pcmciaWriteReg(pcmciac, 0x3c0, 0x20); + + j = pcmciaReadReg(pcmciac, 0x3c8); + j = pcmciaReadReg(pcmciac, 0x3c6); + j = pcmciaReadReg(pcmciac, 0x3c6); + j = pcmciaReadReg(pcmciac, 0x3c6); + j = pcmciaReadReg(pcmciac, 0x3c6); + switch (pScreenPriv->screen->fb[0].depth) { + /* This is here for completeness, when/if we ever do 4bpp */ + case 4: + pcmciaWriteReg(pcmciac, 0x3c6, 0x0); + if (pcmciac->HP) { + pcmciaWriteIndex(pcmciac, 0x3ce, 0x0f, 0x90); + pcmciaWriteIndex(pcmciac, 0x3d4, 0x38, 0x00); + } else + pcmciaWriteIndex(pcmciac, 0x3c4, 0x07, 0x00); + break; + case 8: + pcmciaWriteReg(pcmciac, 0x3c6, 0x0); + if (pcmciac->HP) { + pcmciaWriteIndex(pcmciac, 0x3ce, 0x0f, 0x92); + pcmciaWriteIndex(pcmciac, 0x3d4, 0x38, 0x00); + } else + pcmciaWriteIndex(pcmciac, 0x3c4, 0x07, 0x01); + break; + case 15: + if (pcmciac->HP) { + pcmciaWriteReg(pcmciac, 0x3c6, 0x10); + pcmciaWriteIndex(pcmciac, 0x3ce, 0x0f, 0x9a); + pcmciaWriteIndex(pcmciac, 0x3d4, 0x38, 0x04); + } else { + pcmciaWriteReg(pcmciac, 0x3c6, 0xC0); + pcmciaWriteIndex(pcmciac, 0x3c4, 0x07, 0x03); + } + break; + case 16: + if (pcmciac->HP) { + pcmciaWriteReg(pcmciac, 0x3c6, 0x30); + pcmciaWriteIndex(pcmciac, 0x3ce, 0x0f, 0x9a); + pcmciaWriteIndex(pcmciac, 0x3d4, 0x38, 0x04); + } else { + pcmciaWriteReg(pcmciac, 0x3c6, 0xC1); + pcmciaWriteIndex(pcmciac, 0x3c4, 0x07, 0x03); + } + break; + } + j = pcmciaReadReg(pcmciac, 0x3c8); + + pcmciaWriteReg(pcmciac, 0x3c6, 0xff); + + for (i=0;i<256;i++) { + pcmciaWriteReg(pcmciac, 0x3c8, i); + pcmciaWriteReg(pcmciac, 0x3c9, i); + pcmciaWriteReg(pcmciac, 0x3c9, i); + pcmciaWriteReg(pcmciac, 0x3c9, i); + } + + /* Set the Clock */ + if (pcmciac->HP) { + CARD8 a,b; + int clock = t->clock; + if (pScreenPriv->screen->fb[0].bitsPerPixel == 16) + clock *= 2; + tridentSetCLK(clock, &a, &b); + pcmciaWriteReg(pcmciac, 0x43c8, a); + pcmciaWriteReg(pcmciac, 0x43c9, b); + } else { + int num, den; + unsigned char tmp; + int clock = t->clock; + if (pScreenPriv->screen->fb[0].bitsPerPixel == 16) + clock *= 2; + + CirrusFindClock(clock, &num, &den); + + tmp = pcmciaReadIndex(pcmciac, 0x3c4, 0x0d); + pcmciaWriteIndex(pcmciac, 0x3c4, 0x0d, (tmp & 0x80) | num); + tmp = pcmciaReadIndex(pcmciac, 0x3c4, 0x1d); + pcmciaWriteIndex(pcmciac, 0x3c4, 0x1d, (tmp & 0xc0) | den); + } + pcmciaWriteReg(pcmciac, 0x3c2, MiscOutReg | 0x08); + +#if 1 + for (i=1;i<0x3f;i++) + ErrorF("0x3c4:%02x: 0x%x\n",i,pcmciaReadIndex(pcmciac, 0x3c4, i)); + + ErrorF("\n"); + + for (i=0;i<0x3f;i++) + ErrorF("0x3ce:%02x: 0x%x\n",i,pcmciaReadIndex(pcmciac, 0x3ce, i)); + + ErrorF("\n"); + + for (i=0;i<0x3f;i++) + ErrorF("0x3d4:%02x: 0x%x\n",i,pcmciaReadIndex(pcmciac, 0x3d4, i)); +#endif + + return TRUE; +} + +void +pcmciaDisable (ScreenPtr pScreen) +{ +} + +const CARD8 tridentDPMSModes[4] = { + 0x00, /* KD_DPMS_NORMAL */ + 0x01, /* KD_DPMS_STANDBY */ + 0x02, /* KD_DPMS_SUSPEND */ + 0x03, /* KD_DPMS_POWERDOWN */ +}; + +Bool +pcmciaDPMS (ScreenPtr pScreen, int mode) +{ + KdScreenPriv(pScreen); + pcmciaCardInfo *pcmciac = pScreenPriv->card->driver; + + if (pcmciac->HP) { + pcmciaWriteIndex (pcmciac, 0x3ce, 0x23, tridentDPMSModes[mode]); + pcmciaPause (); + } else { + /* Voyager */ + } + + return TRUE; +} + +void +pcmciaRestore (KdCardInfo *card) +{ +} + +void +pcmciaScreenFini (KdScreenInfo *screen) +{ + pcmciaScreenInfo *pcmcias = (pcmciaScreenInfo *) screen->driver; + + xfree (pcmcias); + screen->driver = 0; +} + +void +pcmciaCardFini (KdCardInfo *card) +{ + pcmciaCardInfo *pcmciac = card->driver; + + if (pcmciac->cop_base) + KdUnmapDevice ((void *) pcmciac->cop_base, PCMCIA_COP_SIZE(card)); +} + +void +pcmciaGetColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs) +{ + KdScreenPriv(pScreen); + pcmciaCardInfo *pcmciac = pScreenPriv->card->driver; + + while (ndef--) + { + pcmciaWriteReg (pcmciac, 0x3C7, pdefs->pixel); + pdefs->red = pcmciaReadReg (pcmciac, 0x3C9) << 10; + pdefs->green = pcmciaReadReg (pcmciac, 0x3C9) << 10; + pdefs->blue = pcmciaReadReg (pcmciac, 0x3C9) << 10; + pdefs++; + } +} + +void +pcmciaPutColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs) +{ + KdScreenPriv(pScreen); + pcmciaCardInfo *pcmciac = pScreenPriv->card->driver; + + while (ndef--) + { + pcmciaWriteReg (pcmciac, 0x3C8, pdefs->pixel); + pcmciaWriteReg (pcmciac, 0x3C9, pdefs->red >> 10); + pcmciaWriteReg (pcmciac, 0x3C9, pdefs->green >> 10); + pcmciaWriteReg (pcmciac, 0x3C9, pdefs->blue >> 10); + pdefs++; + } +} + + +KdCardFuncs pcmciaFuncs = { + pcmciaCardInit, /* cardinit */ + pcmciaScreenInit, /* scrinit */ + pcmciaInitScreen, /* initScreen */ + pcmciaPreserve, /* preserve */ + pcmciaEnable, /* enable */ + pcmciaDPMS, /* dpms */ + pcmciaDisable, /* disable */ + pcmciaRestore, /* restore */ + pcmciaScreenFini, /* scrfini */ + pcmciaCardFini, /* cardfini */ + + pcmciaCursorInit, /* initCursor */ + pcmciaCursorEnable, /* enableCursor */ + pcmciaCursorDisable, /* disableCursor */ + pcmciaCursorFini, /* finiCursor */ + pcmciaRecolorCursor, /* recolorCursor */ + +#if 0 /* not yet */ + pcmciaDrawInit, /* initAccel */ + pcmciaDrawEnable, /* enableAccel */ + pcmciaDrawSync, /* syncAccel */ + pcmciaDrawDisable, /* disableAccel */ + pcmciaDrawFini, /* finiAccel */ +#else + 0, + 0, + 0, + 0, + 0, +#endif + + pcmciaGetColors, /* getColors */ + pcmciaPutColors, /* putColors */ +}; --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/pm2/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/pm2/Makefile.in @@ -123,6 +123,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -201,6 +203,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -313,6 +316,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/vesa/Xvesa.man +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/vesa/Xvesa.man @@ -0,0 +1,105 @@ +.\" $RCSId: xc/programs/Xserver/hw/kdrive/vesa/Xvesa.man,v 1.5 2001/01/24 00:06:10 dawes Exp $ +.TH Xvesa 1 __vendorversion__ +.SH NAME +Xvesa \- VESA Bios Extensions tiny X server +.SH SYNOPSIS +.B Xvesa +.RI [ :display ] +.RI [ option ...] +.SH DESCRIPTION +.B Xvesa +is a generic X server for Linux on the x86 platform. +.B Xvesa +doesn't know about any particular hardware, and sets the video mode by +running the video BIOS in VM86 mode. +.B Xvesa +can use both standard VGA BIOS modes and any modes advertised by a +VESA BIOS if available. + +.B Xvesa +runs untrusted code with full privileges, and is therefore a fairly +insecure X server. +.B Run at your own risk. +.SH OPTIONS +In addition to the normal KDrive server's options (see Xkdrive(1)), +.B Xvesa +accepts the following command line switches: +.TP 8 +.B -mode \fIn\fB +specifies the VESA video mode to use. If mode +.I n +is not supported by your BIOS and hardware, +.B Xvesa +will fail, hang your system, damage your hardware, or cause a global +thermonuclear war; you are on your own. This option overrides any +.B -screen +options. +.TP 8 +.B -listmodes +list all supported video modes. If +.B -force +was specified before +.BR -listmodes , +lists all the modes that your BIOS claims to support, even those that +the +.B Xvesa +server won't be able to use. +.TP 8 +.B -force +disable some sanity checks and use the specified mode even if the +BIOS claims not to support it. +.TP 8 +.B -shadow +use a shadow framebuffer even if it is not strictly necessary. This +may dramatically improve performance on some hardware. +.TP 8 +.B -nolinear +don't use a linear framebuffer even if one is available. You don't +want to use this option. +.TP 8 +.B -swaprgb +pass RGB values in the order that works on broken BIOSes. Use this if +the colours are wrong in PseudoColor and 16 colour modes. +.TP 8 +.B -map-holes +use a contiguous (hole-less) memory map. This fixes a segmentation +violation with some rare BIOSes that violate the VESA specification, +but may cause slightly higher memory usage on systems that overcommit +memory. +.TP 8 +.B -force-text +ignore saved video mode and switch back to regular 25x80 text mode +on server exit or VT switch. +.TP 8 +.B -verbose +emit diagnostic messages during BIOS initialization and teardown. +.SH KEYBOARD +Multiple key presses recognized directly by +.B Xvesa +are: +.TP 8 +.B Ctrl+Alt+Backspace +Immediately kill the server. +.TP 8 +.B Ctrl+Alt+F1...F12 +Switch to virtual console 1 through 12. +.SH BUGS +.B Xvesa +opens all IO ports and runs your VESA BIOS, which may be assumed to be +buggy. Allowing your users to run +.B Xvesa +is probably a security hole. + +.B Xvesa +records the current BIOS mode when it starts and restores that mode on +termination; if the video card has been reprogrammed by another application, +the display will almost certainly be trashed. The alternative of saving and +restoring the complete video card state has proven unreliable on most video +cards. +.SH SEE ALSO +X(__miscmansuffix__), Xserver(1), Xkdrive(1), xdm(1), xinit(1). +.SH AUTHORS +The VESA driver was written by Juliusz Chroboczek who didn't realise +what he was doing until it was too late. Keith Packard then added +support for standard VGA BIOS modes and is especially proud of 320x200 +16 colour mode. --- xorg-server-1.3.0.0.dfsg.orig/hw/kdrive/vesa/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/kdrive/vesa/Makefile.in @@ -123,6 +123,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -201,6 +203,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -313,6 +316,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/dmx/input/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/dmx/input/Makefile.in @@ -135,6 +135,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -213,6 +215,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -325,6 +328,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/dmx/config/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/dmx/config/Makefile.in @@ -146,6 +146,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -224,6 +226,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -336,6 +339,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/dmx/doc/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/dmx/doc/Makefile.in @@ -118,6 +118,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -196,6 +198,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -308,6 +311,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/dmx/examples/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/dmx/examples/Makefile.in @@ -173,6 +173,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -251,6 +253,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -363,6 +366,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/dmx/glxProxy/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/dmx/glxProxy/Makefile.in @@ -121,6 +121,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -199,6 +201,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -311,6 +314,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -570,8 +575,7 @@ renderpixswap.c \ unpack.h -AM_CFLAGS = \ - \ +AM_CFLAGS = @GLX_ARCH_DEFINES@ \ -I$(top_srcdir)/hw/dmx \ -I$(top_srcdir)/include \ -I$(top_srcdir)/GL/include \ --- xorg-server-1.3.0.0.dfsg.orig/hw/dmx/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/dmx/Makefile.in @@ -162,6 +162,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -240,6 +242,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -352,6 +355,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/pcl/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/pcl/Makefile.in @@ -117,6 +117,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -195,6 +197,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -307,6 +310,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/ps/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/ps/Makefile.in @@ -36,8 +36,8 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ -@XP_USE_FREETYPE_TRUE@am__append_1 = -DXP_USE_FREETYPE -@XP_USE_FREETYPE_TRUE@am__append_2 = $(EXTRA_DIST) +@XP_USE_FREETYPE_TRUE@am__append_1 = -DXP_USE_FREETYPE -DUSE_FREETYPE -DXP_ONLY_BLOCKS +@XP_USE_FREETYPE_TRUE@am__append_2 = $(FREETYPE_SRCS) $(TTF2PT1SRCS) subdir = hw/xprint/ps DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -62,15 +62,19 @@ PsImageUtil.c PsInit.c PsLine.c PsMisc.c psout.c psout.h \ PsPixel.c PsPixmap.c PsPolygon.c PsPrint.c PsSpans.c PsText.c \ PsWindow.c PsFTFonts.c psout_ft.c psout_ftpstype1.c \ - psout_ftpstype3.c ttf2pt1wrap.c + psout_ftpstype3.c ft.c pt1.c runt1asm.c ttf2pt1.c am__objects_1 = PsFTFonts.lo psout_ft.lo psout_ftpstype1.lo \ - psout_ftpstype3.lo ttf2pt1wrap.lo -@XP_USE_FREETYPE_TRUE@am__objects_2 = $(am__objects_1) + psout_ftpstype3.lo +@XP_USE_FREETYPE_TRUE@am__objects_2 = ttf2pt1.lo +@XP_USE_FREETYPE_TRUE@am__objects_3 = ft.lo pt1.lo runt1asm.lo \ +@XP_USE_FREETYPE_TRUE@ $(am__objects_2) +@XP_USE_FREETYPE_TRUE@am__objects_4 = $(am__objects_1) \ +@XP_USE_FREETYPE_TRUE@ $(am__objects_3) am_libps_la_OBJECTS = PsArc.lo PsArea.lo PsAttr.lo PsAttVal.lo \ PsCache.lo PsColor.lo PsFonts.lo PsGC.lo PsImageUtil.lo \ PsInit.lo PsLine.lo PsMisc.lo psout.lo PsPixel.lo PsPixmap.lo \ PsPolygon.lo PsPrint.lo PsSpans.lo PsText.lo PsWindow.lo \ - $(am__objects_2) + $(am__objects_4) libps_la_OBJECTS = $(am_libps_la_OBJECTS) DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include depcomp = $(SHELL) $(top_srcdir)/depcomp @@ -128,6 +132,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -206,6 +212,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -318,6 +325,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -554,12 +563,18 @@ PsLine.c PsMisc.c psout.c psout.h PsPixel.c PsPixmap.c \ PsPolygon.c PsPrint.c PsSpans.c PsText.c PsWindow.c \ $(am__append_2) -EXTRA_DIST = PsFTFonts.c \ +FREETYPE_SRCS = PsFTFonts.c \ psout_ft.c \ psout_ftpstype1.c \ - psout_ftpstype3.c \ - ttf2pt1wrap.c + psout_ftpstype3.c +EXTRA_DIST = ttf2pt1wrap.c +@XP_USE_FREETYPE_TRUE@TTF2PT1OURCEDIR = $(top_srcdir)/hw/xprint/extras/ttf2pt1 +@XP_USE_FREETYPE_TRUE@TTF2PT1SRCFILE = ttf2pt1.c +@XP_USE_FREETYPE_TRUE@TTF2PT1OBJFILE = ttf2pt1.o +@XP_USE_FREETYPE_TRUE@TTF2PT1SRCS_EXTRA = pt1.h t1asm.c ttf.h global.h version.h +@XP_USE_FREETYPE_TRUE@TTF2PT1SRCS = ft.c pt1.c runt1asm.c $(TTF2PT1SRCFILE) +@XP_USE_FREETYPE_TRUE@TTF2PT1OBJS = ft.o pt1.o runt1asm.o $(TTF2PT1OBJFILE) all: all-am .SUFFIXES: @@ -631,11 +646,14 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PsSpans.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PsText.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PsWindow.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ft.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/psout.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/psout_ft.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/psout_ftpstype1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/psout_ftpstype3.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ttf2pt1wrap.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pt1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/runt1asm.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ttf2pt1.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @@ -834,6 +852,14 @@ pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-info-am + +@XP_USE_FREETYPE_TRUE@$(TTF2PT1SRCS_EXTRA): +@XP_USE_FREETYPE_TRUE@ -rm -f $@ +@XP_USE_FREETYPE_TRUE@ $(LN_S) $(TTF2PT1OURCEDIR)/$@ + +@XP_USE_FREETYPE_TRUE@$(TTF2PT1SRCS): $(TTF2PT1SRCS_EXTRA) +@XP_USE_FREETYPE_TRUE@ -rm -f $@ +@XP_USE_FREETYPE_TRUE@ $(LN_S) $(TTF2PT1OURCEDIR)/$@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/config/C/print/models/CANONBJ10E-GS/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/config/C/print/models/CANONBJ10E-GS/Makefile.in @@ -106,6 +106,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -184,6 +186,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -296,6 +299,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/config/C/print/models/SPSPARC2/fonts/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/config/C/print/models/SPSPARC2/fonts/Makefile.in @@ -95,6 +95,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -173,6 +175,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -285,6 +288,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/config/C/print/models/SPSPARC2/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/config/C/print/models/SPSPARC2/Makefile.in @@ -115,6 +115,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -193,6 +195,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -305,6 +308,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/config/C/print/models/GSdefault/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/config/C/print/models/GSdefault/Makefile.in @@ -106,6 +106,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -184,6 +186,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -296,6 +299,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/config/C/print/models/HPLJ4050-PS/fonts/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/config/C/print/models/HPLJ4050-PS/fonts/Makefile.in @@ -95,6 +95,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -173,6 +175,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -285,6 +288,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/config/C/print/models/HPLJ4050-PS/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/config/C/print/models/HPLJ4050-PS/Makefile.in @@ -115,6 +115,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -193,6 +195,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -305,6 +308,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/config/C/print/models/HPDJ1600C/fonts/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/config/C/print/models/HPDJ1600C/fonts/Makefile.in @@ -106,6 +106,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -184,6 +186,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -296,6 +299,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/config/C/print/models/HPDJ1600C/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/config/C/print/models/HPDJ1600C/Makefile.in @@ -115,6 +115,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -193,6 +195,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -305,6 +308,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/config/C/print/models/PS2PDFspooldir-GS/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/config/C/print/models/PS2PDFspooldir-GS/Makefile.in @@ -109,6 +109,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -187,6 +189,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -299,6 +302,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/config/C/print/models/PSdefault/fonts/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/config/C/print/models/PSdefault/fonts/Makefile.in @@ -106,6 +106,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -184,6 +186,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -296,6 +299,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/config/C/print/models/PSdefault/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/config/C/print/models/PSdefault/Makefile.in @@ -115,6 +115,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -193,6 +195,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -305,6 +308,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/config/C/print/models/CANONC3200-PS/fonts/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/config/C/print/models/CANONC3200-PS/fonts/Makefile.in @@ -95,6 +95,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -173,6 +175,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -285,6 +288,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/config/C/print/models/CANONC3200-PS/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/config/C/print/models/CANONC3200-PS/Makefile.in @@ -115,6 +115,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -193,6 +195,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -305,6 +308,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/config/C/print/models/HPLJ4family/fonts/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/config/C/print/models/HPLJ4family/fonts/Makefile.in @@ -106,6 +106,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -184,6 +186,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -296,6 +299,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/config/C/print/models/HPLJ4family/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/config/C/print/models/HPLJ4family/Makefile.in @@ -115,6 +115,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -193,6 +195,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -305,6 +308,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/config/C/print/models/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/config/C/print/models/Makefile.in @@ -104,6 +104,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -182,6 +184,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -294,6 +297,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/config/C/print/models/PSspooldir/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/config/C/print/models/PSspooldir/Makefile.in @@ -109,6 +109,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -187,6 +189,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -299,6 +302,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/config/C/print/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/config/C/print/Makefile.in @@ -116,6 +116,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -194,6 +196,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -306,6 +309,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -889,7 +894,7 @@ Xprinters.ghostscript: $(srcdir)/Xprinters - sed < $(srcdir)/Xprinters "s/#Printer xp_pdf_spooldir_tmp_Xprintjobs/Printer xp_pdf_spooldir_tmp_Xprintjobs/" > Xprinters.ghostscript + sed < $(srcdir)/Xprinters "s/#Printer xp_pdf_spooldir_HOME_Xprintjobs/Printer xp_pdf_spooldir_HOME_Xprintjobs/" > Xprinters.ghostscript # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/config/C/print/ddx-config/raster/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/config/C/print/ddx-config/raster/Makefile.in @@ -106,6 +106,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -184,6 +186,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -296,6 +299,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/config/C/print/ddx-config/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/config/C/print/ddx-config/Makefile.in @@ -104,6 +104,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -182,6 +184,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -294,6 +297,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/config/C/print/attributes/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/config/C/print/attributes/Makefile.in @@ -106,6 +106,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -184,6 +186,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -296,6 +299,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/config/C/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/config/C/Makefile.in @@ -104,6 +104,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -182,6 +184,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -294,6 +297,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/config/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/config/Makefile.in @@ -117,6 +117,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -195,6 +197,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -307,6 +310,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/config/en_US/print/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/config/en_US/print/Makefile.in @@ -104,6 +104,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -182,6 +184,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -294,6 +297,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/config/en_US/print/attributes/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/config/en_US/print/attributes/Makefile.in @@ -106,6 +106,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -184,6 +186,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -296,6 +299,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/config/en_US/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/config/en_US/Makefile.in @@ -104,6 +104,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -182,6 +184,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -294,6 +297,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/pcl-mono/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/pcl-mono/Makefile.in @@ -117,6 +117,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -195,6 +197,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -307,6 +310,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/doc/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/doc/Makefile.in @@ -110,6 +110,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -188,6 +190,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -300,6 +303,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = sed +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -531,7 +536,6 @@ appmandir = $(APP_MAN_DIR) appman_PRE = Xprt.man appman_DATA = $(appman_PRE:man=@APP_MAN_SUFFIX@) -SED = sed SUFFIXES = .pre .man .man.pre .$(APP_MAN_SUFFIX) .man # Translate XCOMM into pound sign with sed, rather than passing -DXCOMM=XCOMM --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/etc/profile.d/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/etc/profile.d/Makefile.in @@ -95,6 +95,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -173,6 +175,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -285,6 +288,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/etc/init.d/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/etc/init.d/Makefile.in @@ -100,6 +100,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -178,6 +180,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -290,6 +293,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = sed +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -517,7 +522,6 @@ target_alias = @target_alias@ xglmoduledir = @xglmoduledir@ xpconfigdir = @xpconfigdir@ -SED = sed SUFFIXES = .pre .man .man.pre # Translate XCOMM into pound sign with sed, rather than passing -DXCOMM=XCOMM --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/etc/Xsession.d/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/etc/Xsession.d/Makefile.in @@ -106,6 +106,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -184,6 +186,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -296,6 +299,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/etc/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/etc/Makefile.in @@ -104,6 +104,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -182,6 +184,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -294,6 +297,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/raster/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/raster/Makefile.in @@ -113,6 +113,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -191,6 +193,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -303,6 +306,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xprint/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xprint/Makefile.in @@ -130,6 +130,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -208,6 +210,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -320,6 +323,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xnest/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xnest/Makefile.in @@ -139,6 +139,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -217,6 +219,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -329,6 +332,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = sed +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -613,7 +618,6 @@ screensaver \ Xnest.man.pre -SED = sed SUFFIXES = .pre .man .man.pre .$(APP_MAN_SUFFIX) .man # Translate XCOMM into pound sign with sed, rather than passing -DXCOMM=XCOMM --- xorg-server-1.3.0.0.dfsg.orig/hw/darwin/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/darwin/Makefile.in @@ -95,6 +95,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -173,6 +175,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -285,6 +288,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/vfb/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/vfb/Makefile.in @@ -135,6 +135,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -213,6 +215,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -325,6 +328,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = sed +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -574,7 +579,6 @@ -DXFree86Server \ $(XVFBMODULES_CFLAGS) -SED = sed SUFFIXES = .pre .man .man.pre .$(APP_MAN_SUFFIX) .man # Translate XCOMM into pound sign with sed, rather than passing -DXCOMM=XCOMM --- xorg-server-1.3.0.0.dfsg.orig/hw/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/Makefile.in @@ -103,6 +103,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -181,6 +183,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -293,6 +296,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/os-support/lynxos/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/os-support/lynxos/Makefile.in @@ -95,6 +95,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -173,6 +175,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -285,6 +288,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/os-support/bus/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/os-support/bus/Makefile.in @@ -151,6 +151,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -229,6 +231,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -341,6 +344,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/os-support/hurd/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/os-support/hurd/Makefile.in @@ -116,6 +116,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -194,6 +196,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -306,6 +309,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/os-support/bsd/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/os-support/bsd/Makefile.in @@ -143,6 +143,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -221,6 +223,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -333,6 +336,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/os-support/sysv/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/os-support/sysv/Makefile.in @@ -95,6 +95,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -173,6 +175,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -285,6 +288,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/os-support/linux/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/os-support/linux/Makefile.in @@ -36,8 +36,9 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ -@LNXACPI_TRUE@am__append_1 = -DHAVE_ACPI -@LNXAPM_TRUE@am__append_2 = -DHAVE_APM +@LINUX_ALPHA_TRUE@am__append_1 = libev56.la +@LNXACPI_TRUE@am__append_2 = -DHAVE_ACPI +@LNXAPM_TRUE@am__append_3 = -DHAVE_APM subdir = hw/xfree86/os-support/linux DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -56,7 +57,11 @@ $(top_builddir)/include/kdrive-config.h CONFIG_CLEAN_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) -liblinux_la_LIBADD = +libev56_la_LIBADD = +am__libev56_la_SOURCES_DIST = lnx_ev56.c +@LINUX_ALPHA_TRUE@am_libev56_la_OBJECTS = libev56_la-lnx_ev56.lo +libev56_la_OBJECTS = $(am_libev56_la_OBJECTS) +@LINUX_ALPHA_TRUE@am_libev56_la_rpath = am__liblinux_la_SOURCES_DIST = lnx_init.c lnx_video.c lnx_io.c \ lnx_kbd.c lnx_mouse.c lnx_pci.c lnx_agp.c lnx_kmod.c \ lnx_KbdMap.c $(srcdir)/../shared/bios_mmap.c \ @@ -65,13 +70,13 @@ $(srcdir)/../shared/sigio.c $(srcdir)/../shared/stdResource.c \ $(srcdir)/../shared/libc_wrapper.c \ $(srcdir)/../shared/at_scancode.c lnx_acpi.c lnx_apm.c \ - lnx_ev56.c $(srcdir)/lnx_axp.c $(srcdir)/../shared/xf86Axp.c \ + $(srcdir)/lnx_axp.c $(srcdir)/../shared/xf86Axp.c \ $(srcdir)/lnx_ia64.c $(srcdir)/../shared/ia64Pci.c @LNXACPI_TRUE@am__objects_1 = lnx_acpi.lo lnx_apm.lo @LNXAPM_TRUE@am__objects_2 = lnx_apm.lo @LINUX_ALPHA_FALSE@@LINUX_IA64_TRUE@am__objects_3 = lnx_ia64.lo \ @LINUX_ALPHA_FALSE@@LINUX_IA64_TRUE@ ia64Pci.lo -@LINUX_ALPHA_TRUE@am__objects_3 = lnx_ev56.lo lnx_axp.lo xf86Axp.lo +@LINUX_ALPHA_TRUE@am__objects_3 = lnx_axp.lo xf86Axp.lo am_liblinux_la_OBJECTS = lnx_init.lo lnx_video.lo lnx_io.lo lnx_kbd.lo \ lnx_mouse.lo lnx_pci.lo lnx_agp.lo lnx_kmod.lo lnx_KbdMap.lo \ bios_mmap.lo VTsw_usl.lo std_kbdEv.lo posix_tty.lo vidmem.lo \ @@ -89,8 +94,9 @@ CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(liblinux_la_SOURCES) -DIST_SOURCES = $(am__liblinux_la_SOURCES_DIST) +SOURCES = $(libev56_la_SOURCES) $(liblinux_la_SOURCES) +DIST_SOURCES = $(am__libev56_la_SOURCES_DIST) \ + $(am__liblinux_la_SOURCES_DIST) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) @@ -134,6 +140,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -212,6 +220,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -324,6 +333,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -429,7 +440,7 @@ XORG_BUS_SPARCPCI_TRUE = @XORG_BUS_SPARCPCI_TRUE@ XORG_BUS_SPARC_FALSE = @XORG_BUS_SPARC_FALSE@ XORG_BUS_SPARC_TRUE = @XORG_BUS_SPARC_TRUE@ -XORG_CFLAGS = @XORG_CFLAGS@ $(am__append_1) $(am__append_2) +XORG_CFLAGS = @XORG_CFLAGS@ $(am__append_2) $(am__append_3) XORG_CORE_LIBS = @XORG_CORE_LIBS@ XORG_FALSE = @XORG_FALSE@ XORG_INCS = @XORG_INCS@ @@ -551,14 +562,18 @@ target_alias = @target_alias@ xglmoduledir = @xglmoduledir@ xpconfigdir = @xpconfigdir@ -noinst_LTLIBRARIES = liblinux.la -@LINUX_ALPHA_TRUE@PLATFORM_PCI_SUPPORT = lnx_ev56.c \ +noinst_LTLIBRARIES = liblinux.la $(am__append_1) +@LINUX_ALPHA_TRUE@PLATFORM_PCI_SUPPORT = \ @LINUX_ALPHA_TRUE@ $(srcdir)/lnx_axp.c \ @LINUX_ALPHA_TRUE@ $(srcdir)/../shared/xf86Axp.c @LINUX_IA64_TRUE@PLATFORM_PCI_SUPPORT = $(srcdir)/lnx_ia64.c $(srcdir)/../shared/ia64Pci.c @LINUX_IA64_TRUE@PLATFORM_DEFINES = -DOS_PROBE_PCI_CHIPSET=lnxProbePciChipset @LINUX_IA64_TRUE@PLATFORM_INCLUDES = -I$(srcdir)/../shared +@LINUX_ALPHA_TRUE@libev56_la_CFLAGS = $(AM_CFLAGS) -mcpu=ev56 +@LINUX_ALPHA_TRUE@libev56_la_SOURCES = lnx_ev56.c +@LINUX_ALPHA_TRUE@liblinux_la_LIBADD = libev56.la +@LINUX_ALPHA_TRUE@liblinux_la_DEPENDENCIES = libev56.la @LNXACPI_TRUE@ACPI_SOURCES = lnx_acpi.c lnx_apm.c @LNXAPM_TRUE@APM_SOURCES = lnx_apm.c liblinux_la_SOURCES = lnx_init.c lnx_video.c lnx_io.c lnx_kbd.c lnx_mouse.c \ @@ -634,6 +649,8 @@ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done +libev56.la: $(libev56_la_OBJECTS) $(libev56_la_DEPENDENCIES) + $(LINK) $(am_libev56_la_rpath) $(libev56_la_LDFLAGS) $(libev56_la_OBJECTS) $(libev56_la_LIBADD) $(LIBS) liblinux.la: $(liblinux_la_OBJECTS) $(liblinux_la_DEPENDENCIES) $(LINK) $(liblinux_la_LDFLAGS) $(liblinux_la_OBJECTS) $(liblinux_la_LIBADD) $(LIBS) @@ -648,12 +665,12 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bios_mmap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ia64Pci.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libc_wrapper.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libev56_la-lnx_ev56.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lnx_KbdMap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lnx_acpi.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lnx_agp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lnx_apm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lnx_axp.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lnx_ev56.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lnx_ia64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lnx_init.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lnx_io.Plo@am__quote@ @@ -690,6 +707,13 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< +libev56_la-lnx_ev56.lo: lnx_ev56.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libev56_la_CFLAGS) $(CFLAGS) -MT libev56_la-lnx_ev56.lo -MD -MP -MF "$(DEPDIR)/libev56_la-lnx_ev56.Tpo" -c -o libev56_la-lnx_ev56.lo `test -f 'lnx_ev56.c' || echo '$(srcdir)/'`lnx_ev56.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libev56_la-lnx_ev56.Tpo" "$(DEPDIR)/libev56_la-lnx_ev56.Plo"; else rm -f "$(DEPDIR)/libev56_la-lnx_ev56.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lnx_ev56.c' object='libev56_la-lnx_ev56.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libev56_la_CFLAGS) $(CFLAGS) -c -o libev56_la-lnx_ev56.lo `test -f 'lnx_ev56.c' || echo '$(srcdir)/'`lnx_ev56.c + bios_mmap.lo: $(srcdir)/../shared/bios_mmap.c @am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT bios_mmap.lo -MD -MP -MF "$(DEPDIR)/bios_mmap.Tpo" -c -o bios_mmap.lo `test -f '$(srcdir)/../shared/bios_mmap.c' || echo '$(srcdir)/'`$(srcdir)/../shared/bios_mmap.c; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/bios_mmap.Tpo" "$(DEPDIR)/bios_mmap.Plo"; else rm -f "$(DEPDIR)/bios_mmap.Tpo"; exit 1; fi --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/os-support/misc/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/os-support/misc/Makefile.in @@ -115,6 +115,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -193,6 +195,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -305,6 +308,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/os-support/usl/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/os-support/usl/Makefile.in @@ -95,6 +95,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -173,6 +175,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -285,6 +288,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/os-support/sco/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/os-support/sco/Makefile.in @@ -95,6 +95,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -173,6 +175,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -285,6 +288,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/os-support/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/os-support/Makefile.in @@ -131,6 +131,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -209,6 +211,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -321,6 +324,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/os-support/solaris/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/os-support/solaris/Makefile.in @@ -151,6 +151,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -229,6 +231,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -341,6 +344,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/ramdac/xf86RamDacMod.c +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/ramdac/xf86RamDacMod.c @@ -0,0 +1,46 @@ +/* + * Copyright 1998 by Alan Hourihane, Wigan, England. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Alan Hourihane not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Alan Hourihane makes no representations + * about the suitability of this software for any purpose. It is provided + * "as is" without express or implied warranty. + * + * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR 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. + * + * Authors: Alan Hourihane, + * + * Generic RAMDAC module. + */ + +#ifdef HAVE_XORG_CONFIG_H +#include +#endif + +#include "xf86Module.h" + +static XF86ModuleVersionInfo VersRec = { + "ramdac", + MODULEVENDORSTRING, + MODINFOSTRING1, + MODINFOSTRING2, + XORG_VERSION_CURRENT, + 0, 1, 0, + ABI_CLASS_VIDEODRV, + ABI_VIDEODRV_VERSION, + MOD_CLASS_NONE, + {0, 0, 0, 0} +}; + +_X_EXPORT XF86ModuleData ramdacModuleData = { &VersRec, NULL, NULL }; --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/ramdac/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/ramdac/Makefile.in @@ -128,6 +128,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -206,6 +208,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -318,6 +321,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/xf8_32bpp/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/xf8_32bpp/Makefile.in @@ -128,6 +128,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -206,6 +208,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -318,6 +321,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/i2c/xf86i2cmodule.c +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/i2c/xf86i2cmodule.c @@ -0,0 +1,36 @@ +/* (c) Itai Nahshon + * + * This code is derived from and inspired by the I2C driver + * from the Linux kernel. + * (c) 1998 Gerd Knorr + */ + +#ifdef HAVE_XORG_CONFIG_H +#include +#endif + +#include "xf86Module.h" + +static MODULESETUPPROTO(i2cSetup); + +static XF86ModuleVersionInfo i2cVersRec = +{ + "i2c", + MODULEVENDORSTRING, + MODINFOSTRING1, + MODINFOSTRING2, + XORG_VERSION_CURRENT, + 1, 2, 0, + ABI_CLASS_VIDEODRV, /* This needs the video driver ABI */ + ABI_VIDEODRV_VERSION, + MOD_CLASS_NONE, + {0,0,0,0} +}; + +_X_EXPORT XF86ModuleData i2cModuleData = { &i2cVersRec, i2cSetup, NULL }; + +static pointer +i2cSetup(pointer module, pointer opts, int *errmaj, int *errmin) { +/* ErrorF("i2cSetup\n"); */ + return (pointer)1; +} --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/i2c/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/i2c/Makefile.in @@ -156,6 +156,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -234,6 +236,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -346,6 +349,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/rac/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/rac/Makefile.in @@ -126,6 +126,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -204,6 +206,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -316,6 +319,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/vbe/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/vbe/Makefile.in @@ -125,6 +125,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -203,6 +205,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -315,6 +318,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/vgahw/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/vgahw/Makefile.in @@ -125,6 +125,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -203,6 +205,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -315,6 +318,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/shadowfb/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/shadowfb/Makefile.in @@ -125,6 +125,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -203,6 +205,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -315,6 +318,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/loader/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/loader/Makefile.in @@ -126,6 +126,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -204,6 +206,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -316,6 +319,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/common/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/common/Makefile.in @@ -165,6 +165,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -243,6 +245,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -355,6 +358,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/ddc/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/ddc/Makefile.in @@ -129,6 +129,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -207,6 +209,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -319,6 +322,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/parser/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/parser/Makefile.in @@ -133,6 +133,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -211,6 +213,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -323,6 +326,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/fbdevhw/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/fbdevhw/Makefile.in @@ -135,6 +135,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -213,6 +215,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -325,6 +328,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = sed +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -560,7 +565,6 @@ INCLUDES = $(XORG_INCS) -I$(srcdir)/../i2c AM_CFLAGS = $(XORG_CFLAGS) sdk_HEADERS = fbdevhw.h -SED = sed SUFFIXES = .pre .man .man.pre # Translate XCOMM into pound sign with sed, rather than passing -DXCOMM=XCOMM --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/exa/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/exa/Makefile.in @@ -129,6 +129,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -207,6 +209,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -319,6 +322,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = sed +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -560,7 +565,6 @@ libexa_la_LIBADD = \ ../../../exa/libexa.la -SED = sed SUFFIXES = .pre .man .man.pre # Translate XCOMM into pound sign with sed, rather than passing -DXCOMM=XCOMM --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/dummylib/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/dummylib/Makefile.in @@ -138,6 +138,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -216,6 +218,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -328,6 +331,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/modes/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/modes/Makefile.in @@ -128,6 +128,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -206,6 +208,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -318,6 +321,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/xf1bpp/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/xf1bpp/Makefile.in @@ -137,6 +137,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -215,6 +217,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -327,6 +330,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/utils/cvt/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/utils/cvt/Makefile.in @@ -153,6 +153,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -231,6 +233,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -343,6 +346,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = sed +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -579,7 +584,6 @@ cvt_LDADD = $(top_builddir)/hw/xfree86/dummylib/libdummy-nonserver.a man1_MANS = cvt.man CLEANFILES = $(man1_MANS) -SED = sed SUFFIXES = .pre .man .man.pre # Translate XCOMM into pound sign with sed, rather than passing -DXCOMM=XCOMM --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/utils/pcitweak/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/utils/pcitweak/Makefile.in @@ -160,6 +160,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -238,6 +240,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -350,6 +353,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = sed +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -592,7 +597,6 @@ appmandir = $(APP_MAN_DIR) appman_PRE = pcitweak.man appman_DATA = $(appman_PRE:man=@APP_MAN_SUFFIX@) -SED = sed SUFFIXES = .pre .man .man.pre .$(APP_MAN_SUFFIX) .man # Translate XCOMM into pound sign with sed, rather than passing -DXCOMM=XCOMM --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/utils/kbd_mode/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/utils/kbd_mode/Makefile.in @@ -162,6 +162,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -240,6 +242,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -352,6 +355,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = sed +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -590,7 +595,6 @@ @BUILD_KBD_MODE_TRUE@appman_DATA = $(appman_PRE:man=@APP_MAN_SUFFIX@) @BUILD_KBD_MODE_TRUE@BUILT_SOURCES = $(appman_PRE) @BUILD_KBD_MODE_TRUE@CLEANFILES = $(appman_PRE) $(appman_DATA) -SED = sed SUFFIXES = .pre .man .man.pre .$(APP_MAN_SUFFIX) .man # Translate XCOMM into pound sign with sed, rather than passing -DXCOMM=XCOMM --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/utils/ioport/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/utils/ioport/Makefile.in @@ -146,6 +146,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -224,6 +226,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -336,6 +339,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/utils/gtf/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/utils/gtf/Makefile.in @@ -158,6 +158,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -236,6 +238,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -348,6 +351,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = sed +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -581,7 +586,6 @@ appmandir = $(APP_MAN_DIR) appman_PRE = gtf.man appman_DATA = $(appman_PRE:man=@APP_MAN_SUFFIX@) -SED = sed SUFFIXES = .pre .man .man.pre .$(APP_MAN_SUFFIX) .man # Translate XCOMM into pound sign with sed, rather than passing -DXCOMM=XCOMM --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/utils/xorgcfg/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/utils/xorgcfg/Makefile.in @@ -196,6 +196,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -274,6 +276,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -386,6 +389,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = sed +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -694,7 +699,6 @@ monitor.xpm \ mouse.xpm -SED = sed SUFFIXES = .pre .man .man.pre $(am__append_1) # Translate XCOMM into pound sign with sed, rather than passing -DXCOMM=XCOMM --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/utils/xorgconfig/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/utils/xorgconfig/Makefile.in @@ -161,6 +161,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -239,6 +241,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -351,6 +354,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = sed +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -592,7 +597,6 @@ cards.h \ xorgconfig.c -SED = sed SUFFIXES = .pre .man .man.pre .$(APP_MAN_SUFFIX) .man # Translate XCOMM into pound sign with sed, rather than passing -DXCOMM=XCOMM --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/utils/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/utils/Makefile.in @@ -104,6 +104,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -182,6 +184,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -294,6 +297,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/utils/scanpci/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/utils/scanpci/Makefile.in @@ -161,6 +161,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -239,6 +241,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -351,6 +354,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = sed +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -595,7 +600,6 @@ appmandir = $(APP_MAN_DIR) appman_PRE = scanpci.man appman_DATA = $(appman_PRE:man=@APP_MAN_SUFFIX@) -SED = sed SUFFIXES = .pre .man .man.pre .$(APP_MAN_SUFFIX) .man # Translate XCOMM into pound sign with sed, rather than passing -DXCOMM=XCOMM --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/xf8_16bpp/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/xf8_16bpp/Makefile.in @@ -125,6 +125,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -203,6 +205,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -315,6 +318,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/doc/devel/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/doc/devel/Makefile.in @@ -98,6 +98,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -176,6 +178,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -288,6 +291,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/doc/README.modes +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/doc/README.modes @@ -0,0 +1,474 @@ + Multi-monitor Mode Setting APIs + Keith Packard, SaveScreen and the core X screen saver will be +implemented by disabling outputs and crtcs using their dpms functions. + + void + xf86DPMSSet(ScrnInfoPtr scrn, int mode, int flags) + +Pass this function to xf86DPMSInit and all DPMS mode switching will be +managed by using the dpms functions provided by the Outputs and CRTCs. + + Bool + xf86CrtcScreenInit (ScreenPtr screen) + +This function completes the screen initialization process for the crtc and +output objects. Call it near the end of the ScreenInit function, after the +frame buffer and acceleration layers have been added. + +3.3 EnterVT functions + +Functions used during EnterVT, or whenever the current configuration needs +to be applied to the hardware. + + Bool + xf86SetDesiredModes (ScrnInfoPtr scrn) + +xf86InitialConfiguration selects the desired configuration at PreInit time; +when the server finally hits ScreenInit, xf86SetDesiredModes is used by the +driver to take that configuration and apply it to the hardware. In addition, +successful mode selection at other times updates the configuration that will +be used by this function, so LeaveVT/EnterVT pairs can simply invoke this +and return to the previous configuration. + +3.4 SwitchMode functions + +Functions called from the pScrn->SwitchMode hook, which is used by the +XFree86-VidModeExtension and the keypad mode switch commands. + + Bool + xf86SetSingleMode (ScrnInfoPtr scrn, + DisplayModePtr desired, + Rotation rotation) + +This function applies the specified mode to all active outputs. Which is to +say, it picks reasonable modes for all active outputs, attempting to get the +screen to the specified size while not breaking anything that is currently +working. + +3.7 get_modes functions + +Functions called during output->get_modes to help build lists of modes + + xf86MonPtr + xf86OutputGetEDID (xf86OutputPtr output, I2CBusPtr pDDCBus) + +This returns the EDID data structure for the 'output' using the I2C bus +'pDDCBus'. This has no effect on 'output' itself. + + void + xf86OutputSetEDID (xf86OutputPtr output, xf86MonPtr edid_mon) + +Once the EDID data has been fetched, this call applies the EDID data to the +output object, setting the physical size and also various properties, like +the DDC root window property (when output is the 'compat' output), and the +RandR 1.2 EDID output properties. + + DisplayModePtr + xf86OutputGetEDIDModes (xf86OutputPtr output) + +Given an EDID data structure, this function computes a list of suitable +modes. This function also applies a sequence of 'quirks' during this process +so that the returned modes may not actually match the mode data present in +the EDID data. + +3.6 Other functions + +These remaining functions in the API can be used by the driver as needed. + + Bool + xf86CrtcSetMode (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotation, + int x, int y) + +Applies a mode to a CRTC. All of the outputs which are currently using the +specified CRTC are included in the mode setting process. 'x' and 'y' are the +offset within the frame buffer that the crtc is placed at. No checking is +done in this function to ensure that the mode is usable by the active +outputs. + + void + xf86ProbeOutputModes (ScrnInfoPtr pScrn, int maxX, int maxY) + +This discards the mode lists for all outputs, re-detects monitor presence +and then acquires new mode lists for all monitors which are not disconnected. +Monitor configuration data is used to modify the mode lists returned by the +outputs. 'maxX' and 'maxY' limit the maximum size modes that will be +returned. + + void + xf86SetScrnInfoModes (ScrnInfoPtr pScrn) + +This copies the 'compat' output mode list into the pScrn modes list which is +used by the XFree86-VidModeExtension and the keypad mode switching +operations. The current 'desired' mode for the CRTC associated with the +'compat' output is placed first in this list to indicate the current mode. +Usually, the driver won't need to call this function as +xf86InitialConfiguration will do so automatically, as well as any RandR +functions which reprobe for modes. However, if the driver reprobes for modes +at other times using xf86ProbeOutputModes, this function needs to be called. + + Bool + xf86DiDGAReInit (ScreenPtr pScreen) + +This is similar to xf86SetScrnInfoModes, but it applies the 'compat' output +mode list to the set of modes advertised by the DGA extension; it needs to +be called whenever xf86ProbeOutputModes is invoked. + + void + xf86DisableUnusedFunctions(ScrnInfoPtr pScrn) + +After any sequence of calls using xf86CrtcSetMode, this function cleans up +any leftover Output and CRTC objects by disabling them, saving power. It is +safe to call this whenever the server is running as it only disables objects +which are not currently in use. + +4. CRTC operations + +4.1 CRTC functions + +These functions provide an abstract interface for the CRTC object; most +manipulation of the CRTC object is done through these functions. + + void + crtc->funcs->dpms (xf86CrtcPtr crtc, int mode) + +Where 'mode' is one of DPMSModeOff, DPMSModeSuspend, DPMSModeStandby or +DPMSModeOn. This requests that the crtc go to the specified power state. +When changing power states, the output dpms functions are invoked before the +crtc dpms functions. + + void + crtc->funcs->save (xf86CrtcPtr crtc) + + void + crtc->funcs->restore (xf86CrtcPtr crtc) + +Preserve/restore any register contents related to the CRTC. These are +strictly a convenience for the driver writer; if the existing driver has +fully operation save/restore functions, you need not place any additional +code here. In particular, the server itself never uses this function. + + Bool + crtc->funcs->lock (xf86CrtcPtr crtc) + + void + crtc->funcs->unlock (xf86CrtcPtr crtc) + +These functions are invoked around mode setting operations; the intent is +that DRI locking be done here to prevent DRI applications from manipulating +the hardware while the server is busy changing the output configuration. If +the lock function returns FALSE, the unlock function will not be invoked. + + Bool + crtc->funcs->mode_fixup (xf86CrtcPtr crtc, + DisplayModePtr mode, + DisplayModePtr adjusted_mode) + +This call gives the CRTC a chance to see what mode will be set and to +comment on the mode by changing 'adjusted_mode' as needed. This function +shall not modify the state of the crtc hardware at all. If the CRTC cannot +accept this mode, this function may return FALSE. + + void + crtc->funcs->prepare (xf86CrtcPtr crtc) + +This call is made just before the mode is set to make the hardware ready for +the operation. A usual function to perform here is to disable the crtc so +that mode setting can occur with clocks turned off and outputs deactivated. + + void + crtc->funcs->mode_set (xf86CrtcPtr crtc, + DisplayModePtr mode, + DisplayModePtr adjusted_mode) + +This function applies the specified mode (possibly adjusted by the CRTC +and/or Outputs). + + void + crtc->funcs->commit (xf86CrtcPtr crtc) + +Once the mode has been applied to the CRTC and Outputs, this function is +invoked to let the hardware turn things back on. + + void + crtc->funcs->gamma_set (xf86CrtcPtr crtc, CARD16 *red, + CARD16 *green, CARD16 *blue, int size) + +This function adjusts the gamma ramps for the specified crtc. + + void * + crtc->funcs->shadow_allocate (xf86CrtcPtr crtc, int width, int height) + +This function allocates frame buffer space for a shadow frame buffer. When +allocated, the crtc must scan from the shadow instead of the main frame +buffer. This is used for rotation. The address returned is passed to the +shadow_create function. This function should return NULL on failure. + + PixmapPtr + crtc->funcs->shadow_create (xf86CrtcPtr crtc, void *data, + int width, int height) + +This function creates a pixmap object that will be used as a shadow of the +main frame buffer for CRTCs which are rotated or reflected. 'data' is the +value returned by shadow_allocate. + + void + crtc->funcs->shadow_destroy (xf86CrtcPtr crtc, PixmapPtr pPixmap, + void *data) + +Destroys any associated shadow objects. If pPixmap is NULL, then a pixmap +was not created, but 'data' may still be non-NULL indicating that the shadow +had been allocated. + + void + crtc->funcs->destroy (xf86CrtcPtr crtc) + +When a CRTC is destroyed (which only happens in error cases), this function +can clean up any driver-specific data. + +4.2 CRTC fields + +The CRTC object is not opaque; there are several fields of interest to the +driver writer. + + struct _xf86Crtc { + /** + * Associated ScrnInfo + */ + ScrnInfoPtr scrn; + + /** + * Active state of this CRTC + * + * Set when this CRTC is driving one or more outputs + */ + Bool enabled; + + /** Track whether cursor is within CRTC range */ + Bool cursorInRange; + + /** Track state of cursor associated with this CRTC */ + Bool cursorShown; + + /** + * Active mode + * + * This reflects the mode as set in the CRTC currently + * It will be cleared when the VT is not active or + * during server startup + */ + DisplayModeRec mode; + Rotation rotation; + PixmapPtr rotatedPixmap; + void *rotatedData; + + /** + * Position on screen + * + * Locates this CRTC within the frame buffer + */ + int x, y; + + /** + * Desired mode + * + * This is set to the requested mode, independent of + * whether the VT is active. In particular, it receives + * the startup configured mode and saves the active mode + * on VT switch. + */ + DisplayModeRec desiredMode; + Rotation desiredRotation; + int desiredX, desiredY; + + /** crtc-specific functions */ + const xf86CrtcFuncsRec *funcs; + + /** + * Driver private + * + * Holds driver-private information + */ + void *driver_private; + #ifdef RANDR_12_INTERFACE + /** + * RandR crtc + * + * When RandR 1.2 is available, this + * points at the associated crtc object + */ + RRCrtcPtr randr_crtc; + #else + void *randr_crtc; + #endif + }; + + +5. Output functions. + +6. Configuration + +Because the configuration file syntax is fixed, +this was done by creating new "Driver" section options that hook specific +outputs to specific "Monitor" sections in the file. The option: +section of the form: + + Option "monitor-VGA" "My VGA Monitor" + +connects the VGA output of this driver to the "Monitor" section with +Identifier "My VGA Monitor". All of the usual monitor options can now be +placed in that "Monitor" section and will be applied to the VGA output +configuration. --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/doc/man/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/doc/man/Makefile.in @@ -111,6 +111,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -189,6 +191,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -301,6 +304,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = sed +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -535,7 +540,6 @@ appman_DATA = Xorg.$(APP_MAN_SUFFIX) filemandir = $(FILE_MAN_DIR) fileman_DATA = xorg.conf.$(FILE_MAN_SUFFIX) -SED = sed SUFFIXES = .pre .man .man.pre # Translate XCOMM into pound sign with sed, rather than passing -DXCOMM=XCOMM --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/doc/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/doc/Makefile.in @@ -104,6 +104,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -182,6 +184,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -294,6 +297,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/doc/sgml/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/doc/sgml/Makefile.in @@ -118,6 +118,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -196,6 +198,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -308,6 +311,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/dixmods/extmod/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/dixmods/extmod/Makefile.in @@ -131,6 +131,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -209,6 +211,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -321,6 +324,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/dixmods/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/dixmods/Makefile.in @@ -36,6 +36,7 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +@BUILD_TYPE1_TRUE@am__append_1 = libtype1.la subdir = hw/xfree86/dixmods DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -108,8 +109,10 @@ am_libshadow_la_OBJECTS = shmodule.lo libshadow_la_OBJECTS = $(am_libshadow_la_OBJECTS) libtype1_la_LIBADD = -am_libtype1_la_OBJECTS = type1mod.lo +am__libtype1_la_SOURCES_DIST = type1mod.c +@BUILD_TYPE1_TRUE@am_libtype1_la_OBJECTS = type1mod.lo libtype1_la_OBJECTS = $(am_libtype1_la_OBJECTS) +@BUILD_TYPE1_TRUE@am_libtype1_la_rpath = -rpath $(fontsmoduledir) libxorgxkb_la_DEPENDENCIES = $(top_builddir)/dix/libdix.la am_libxorgxkb_la_OBJECTS = xkbVT.lo xkbPrivate.lo xkbKillSrv.lo libxorgxkb_la_OBJECTS = $(am_libxorgxkb_la_OBJECTS) @@ -142,7 +145,7 @@ $(libfb_la_SOURCES) $(libfreetype_la_SOURCES) \ $(libglx_la_SOURCES) $(libmfb_la_SOURCES) \ $(librecord_la_SOURCES) $(libshadow_la_SOURCES) \ - $(libtype1_la_SOURCES) $(libxorgxkb_la_SOURCES) \ + $(am__libtype1_la_SOURCES_DIST) $(libxorgxkb_la_SOURCES) \ $(libxtrap_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ @@ -194,6 +197,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -272,6 +277,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -384,6 +390,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -630,9 +638,7 @@ $(XTRAPMOD) fontsmoduledir = $(moduledir)/fonts -fontsmodule_LTLIBRARIES = libfreetype.la \ - libtype1.la - +fontsmodule_LTLIBRARIES = libfreetype.la $(am__append_1) AM_CFLAGS = @XORG_CFLAGS@ @DIX_CFLAGS@ INCLUDES = @XORG_INCS@ \ -I$(top_srcdir)/afb \ @@ -680,8 +686,8 @@ libshadow_la_SOURCES = shmodule.c libfreetype_la_LDFLAGS = -avoid-version libfreetype_la_SOURCES = ftmodule.c -libtype1_la_LDFLAGS = -avoid-version -libtype1_la_SOURCES = type1mod.c +@BUILD_TYPE1_TRUE@libtype1_la_LDFLAGS = -avoid-version +@BUILD_TYPE1_TRUE@libtype1_la_SOURCES = type1mod.c libdixmods_la_SOURCES = $(top_srcdir)/mi/miinitext.c libdixmods_la_CFLAGS = -DXFree86LOADER $(AM_CFLAGS) libxorgxkb_la_SOURCES = xkbVT.c xkbPrivate.c xkbKillSrv.c @@ -837,7 +843,7 @@ libshadow.la: $(libshadow_la_OBJECTS) $(libshadow_la_DEPENDENCIES) $(LINK) -rpath $(moduledir) $(libshadow_la_LDFLAGS) $(libshadow_la_OBJECTS) $(libshadow_la_LIBADD) $(LIBS) libtype1.la: $(libtype1_la_OBJECTS) $(libtype1_la_DEPENDENCIES) - $(LINK) -rpath $(fontsmoduledir) $(libtype1_la_LDFLAGS) $(libtype1_la_OBJECTS) $(libtype1_la_LIBADD) $(LIBS) + $(LINK) $(am_libtype1_la_rpath) $(libtype1_la_LDFLAGS) $(libtype1_la_OBJECTS) $(libtype1_la_LIBADD) $(LIBS) libxorgxkb.la: $(libxorgxkb_la_OBJECTS) $(libxorgxkb_la_DEPENDENCIES) $(LINK) $(libxorgxkb_la_LDFLAGS) $(libxorgxkb_la_OBJECTS) $(libxorgxkb_la_LIBADD) $(LIBS) libxtrap.la: $(libxtrap_la_OBJECTS) $(libxtrap_la_DEPENDENCIES) --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/Makefile.in @@ -149,6 +149,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -227,6 +229,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -339,6 +342,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = sed +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -579,7 +584,6 @@ target_alias = @target_alias@ xglmoduledir = @xglmoduledir@ xpconfigdir = @xpconfigdir@ -SED = sed SUFFIXES = .pre .man .man.pre # Translate XCOMM into pound sign with sed, rather than passing -DXCOMM=XCOMM --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/dri/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/dri/Makefile.in @@ -126,6 +126,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -204,6 +206,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -316,6 +319,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/scanpci/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/scanpci/Makefile.in @@ -124,6 +124,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -202,6 +204,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -314,6 +317,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/xf4bpp/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/xf4bpp/Makefile.in @@ -133,6 +133,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -211,6 +213,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -323,6 +326,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/int10/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/int10/Makefile.in @@ -139,6 +139,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -217,6 +219,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -329,6 +332,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/x86emu/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/x86emu/Makefile.in @@ -117,6 +117,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -195,6 +197,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -307,6 +310,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/xaa/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xfree86/xaa/Makefile.in @@ -144,6 +144,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -222,6 +224,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -334,6 +337,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xgl/glx/module/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xgl/glx/module/Makefile.in @@ -123,6 +123,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -201,6 +203,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -313,6 +316,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xgl/glx/xglxinit.c +++ xorg-server-1.3.0.0.dfsg/hw/xgl/glx/xglxinit.c @@ -0,0 +1,172 @@ +/* + * Copyright © 2004 David Reveman + * + * Permission to use, copy, modify, distribute, and sell this software + * and its documentation for any purpose is hereby granted without + * fee, provided that the above copyright notice appear in all copies + * and that both that copyright notice and this permission notice + * appear in supporting documentation, and that the name of + * David Reveman not be used in advertising or publicity pertaining to + * distribution of the software without specific, written prior permission. + * David Reveman makes no representations about the suitability of this + * software for any purpose. It is provided "as is" without express or + * implied warranty. + * + * DAVID REVEMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN + * NO EVENT SHALL DAVID REVEMAN BE LIABLE FOR 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. + * + * Author: David Reveman + */ + +#include "xglx.h" +#include "xglglx.h" + +xglScreenInfoRec xglScreenInfo = { + NULL, 0, 0, 0, 0, 0, + DEFAULT_GEOMETRY_DATA_TYPE, + DEFAULT_GEOMETRY_USAGE, + FALSE, + XGL_DEFAULT_PBO_MASK, + FALSE, + { + { FALSE, FALSE, { 0, 0, 0, 0 } }, + { FALSE, FALSE, { 0, 0, 0, 0 } }, + { FALSE, FALSE, { 0, 0, 0, 0 } }, + { FALSE, FALSE, { 0, 0, 0, 0 } } + } +}; + +#ifdef GLXEXT +static Bool loadGlx = TRUE; + +#ifndef NGLXEXTLOG +static char *glxExtLogFile = 0; +#endif + +#endif + +void +InitOutput (ScreenInfo *pScreenInfo, + int argc, + char **argv) +{ + +#ifdef GLXEXT + if (loadGlx) + { + if (!xglLoadGLXModules ()) + FatalError ("No GLX modules loaded"); + +#ifndef NGLXEXTLOG + if (glxExtLogFile) + { + __xglGLXLogFp = fopen (glxExtLogFile, "w"); + if (!__xglGLXLogFp) + perror ("InitOutput"); + } + else + __xglGLXLogFp = 0; +#endif + + } +#endif + + xglxInitOutput (pScreenInfo, argc, argv); +} + +Bool +LegalModifier (unsigned int key, + DevicePtr pDev) +{ + return xglxLegalModifier (key, pDev); +} + +void +ProcessInputEvents (void) +{ + xglxProcessInputEvents (); +} + +void +InitInput (int argc, + char **argv) +{ + xglxInitInput (argc, argv); +} + +void +ddxUseMsg (void) +{ + ErrorF ("\nXgl usage:\n"); + +#ifdef GLXEXT + ErrorF ("-noglx don't load glx extension\n"); + +#ifndef NGLXEXTLOG + ErrorF ("-glxlog file glx extension log file\n"); +#endif + +#endif + + xglUseMsg (); + ErrorF ("\nXglx usage:\n"); + xglxUseMsg (); +} + +int +ddxProcessArgument (int argc, + char **argv, + int i) +{ + int skip; + +#ifdef GLXEXT + if (!strcmp (argv[i], "-noglx")) + { + loadGlx = FALSE; + return 1; + } + +#ifndef NGLXEXTLOG + else if (!strcmp (argv[i], "-glxlog")) + { + if (++i < argc) + glxExtLogFile = argv[i]; + } +#endif + +#endif + + skip = xglProcessArgument (argc, argv, i); + if (skip) + return skip; + + return xglxProcessArgument (argc, argv, i); +} + +void +AbortDDX (void) +{ + xglxAbort (); +} + +void +ddxGiveUp (void) +{ + xglxGiveUp (); +} + +void +OsVendorInit (void) +{ + xglxOsVendorInit (); +} + +void ddxInitGlobals() +{ +} --- xorg-server-1.3.0.0.dfsg.orig/hw/xgl/glx/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xgl/glx/Makefile.in @@ -119,6 +119,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -197,6 +199,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -309,6 +312,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xgl/egl/module/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xgl/egl/module/Makefile.in @@ -123,6 +123,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -201,6 +203,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -313,6 +316,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xgl/egl/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xgl/egl/Makefile.in @@ -129,6 +129,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -207,6 +209,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -319,6 +322,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xgl/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xgl/Makefile.in @@ -141,6 +141,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -219,6 +221,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -331,6 +334,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xgl/glxext/module/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xgl/glxext/module/Makefile.in @@ -124,6 +124,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -202,6 +204,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -314,6 +317,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xgl/glxext/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xgl/glxext/Makefile.in @@ -120,6 +120,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -198,6 +200,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -310,6 +313,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xwin/winprefslex.c +++ xorg-server-1.3.0.0.dfsg/hw/xwin/winprefslex.c @@ -1,93 +1,32 @@ +/* A lexical scanner generated by flex*/ -#line 3 "winprefslex.c" - -#define YY_INT_ALIGNED short int - -/* A lexical scanner generated by flex */ +/* Scanner skeleton version: + * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $ + */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 -#define YY_FLEX_SUBMINOR_VERSION 33 -#if YY_FLEX_SUBMINOR_VERSION > 0 -#define FLEX_BETA -#endif -/* First, we deal with platform-specific or compiler-specific issues. */ - -/* begin standard C headers. */ #include -#include -#include -#include - -/* end standard C headers. */ - -/* flex integer type definitions */ - -#ifndef FLEXINT_H -#define FLEXINT_H - -/* C99 systems have . Non-C99 systems may or may not. */ - -#if __STDC_VERSION__ >= 199901L - -/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, - * if you want the limit (max/min) macros for int types. - */ -#ifndef __STDC_LIMIT_MACROS -#define __STDC_LIMIT_MACROS 1 -#endif +#include -#include -typedef int8_t flex_int8_t; -typedef uint8_t flex_uint8_t; -typedef int16_t flex_int16_t; -typedef uint16_t flex_uint16_t; -typedef int32_t flex_int32_t; -typedef uint32_t flex_uint32_t; -#else -typedef signed char flex_int8_t; -typedef short int flex_int16_t; -typedef int flex_int32_t; -typedef unsigned char flex_uint8_t; -typedef unsigned short int flex_uint16_t; -typedef unsigned int flex_uint32_t; -#endif /* ! C99 */ -/* Limits of integral types. */ -#ifndef INT8_MIN -#define INT8_MIN (-128) -#endif -#ifndef INT16_MIN -#define INT16_MIN (-32767-1) -#endif -#ifndef INT32_MIN -#define INT32_MIN (-2147483647-1) -#endif -#ifndef INT8_MAX -#define INT8_MAX (127) -#endif -#ifndef INT16_MAX -#define INT16_MAX (32767) -#endif -#ifndef INT32_MAX -#define INT32_MAX (2147483647) -#endif -#ifndef UINT8_MAX -#define UINT8_MAX (255U) -#endif -#ifndef UINT16_MAX -#define UINT16_MAX (65535U) +/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */ +#ifdef c_plusplus +#ifndef __cplusplus +#define __cplusplus #endif -#ifndef UINT32_MAX -#define UINT32_MAX (4294967295U) #endif -#endif /* ! FLEXINT_H */ #ifdef __cplusplus +#include + +/* Use prototypes in function declarations. */ +#define YY_USE_PROTOS + /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST @@ -95,17 +34,34 @@ #if __STDC__ +#define YY_USE_PROTOS #define YY_USE_CONST #endif /* __STDC__ */ #endif /* ! __cplusplus */ +#ifdef __TURBOC__ + #pragma warn -rch + #pragma warn -use +#include +#include +#define YY_USE_CONST +#define YY_USE_PROTOS +#endif + #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif + +#ifdef YY_USE_PROTOS +#define YY_PROTO(proto) proto +#else +#define YY_PROTO(proto) () +#endif + /* Returned upon end-of-file. */ #define YY_NULL 0 @@ -120,88 +76,80 @@ * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ -#define BEGIN (yy_start) = 1 + 2 * +#define BEGIN yy_start = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ -#define YY_START (((yy_start) - 1) / 2) +#define YY_START ((yy_start - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ -#define YY_NEW_FILE yyrestart(yyin ) +#define YY_NEW_FILE yyrestart( yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ -#ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 -#endif - -/* The state buf must be large enough to hold one state per character in the main buffer. - */ -#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) -#ifndef YY_TYPEDEF_YY_BUFFER_STATE -#define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; -#endif extern int yyleng; - extern FILE *yyin, *yyout; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 - /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires - * access to the local variable yy_act. Since yyless() is a macro, it would break - * existing scanners that call yyless() from OUTSIDE yylex. - * One obvious solution it to make yy_act a global. I tried that, and saw - * a 5% performance hit in a non-yylineno scanner, because yy_act is - * normally declared as a register variable-- so it is not worth it. - */ - #define YY_LESS_LINENO(n) \ - do { \ - int yyl;\ - for ( yyl = n; yyl < yyleng; ++yyl )\ - if ( yytext[yyl] == '\n' )\ - --yylineno;\ - }while(0) - -/* Return all but the first "n" matched characters back to the input stream. */ +/* The funky do-while in the following #define is used to turn the definition + * int a single C statement (which needs a semi-colon terminator). This + * avoids problems with code like: + * + * if ( condition_holds ) + * yyless( 5 ); + * else + * do_something_else(); + * + * Prior to using the do-while the compiler would get upset at the + * "else" because it interpreted the "if" statement as being all + * done when it reached the ';' after the yyless() call. + */ + +/* Return all but the first 'n' matched characters back to the input stream. */ + #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ - int yyless_macro_arg = (n); \ - YY_LESS_LINENO(yyless_macro_arg);\ - *yy_cp = (yy_hold_char); \ + *yy_cp = yy_hold_char; \ YY_RESTORE_YY_MORE_OFFSET \ - (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) -#define unput(c) yyunput( c, (yytext_ptr) ) +#define unput(c) yyunput( c, yytext_ptr ) + +/* Some routines like yy_flex_realloc() are emitted as static but are + not called by all lexers. This generates warnings in some compilers, + notably GCC. Arrange to suppress these. */ +#ifdef __GNUC__ +#define YY_MAY_BE_UNUSED __attribute__((unused)) +#else +#define YY_MAY_BE_UNUSED +#endif /* The following is because we cannot portably get our hands on size_t * (without autoconf's help, which isn't available because we want * flex-generated scanners to compile on their own). */ - -#ifndef YY_TYPEDEF_YY_SIZE_T -#define YY_TYPEDEF_YY_SIZE_T typedef unsigned int yy_size_t; -#endif -#ifndef YY_STRUCT_YY_BUFFER_STATE -#define YY_STRUCT_YY_BUFFER_STATE + struct yy_buffer_state { FILE *yy_input_file; @@ -238,16 +186,12 @@ */ int yy_at_bol; - int yy_bs_lineno; /**< The line count. */ - int yy_bs_column; /**< The column count. */ - /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; - #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process @@ -261,38 +205,28 @@ * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 - }; -#endif /* !YY_STRUCT_YY_BUFFER_STATE */ -/* Stack of input buffers. */ -static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ -static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ -static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ +static YY_BUFFER_STATE yy_current_buffer = 0; /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". - * - * Returns the top of the stack, or NULL. */ -#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ - ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ - : NULL) +#define YY_CURRENT_BUFFER yy_current_buffer -/* Same as previous macro, but useful when we know that the buffer stack is not - * NULL or when we need an lvalue. For internal use only. - */ -#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] /* yy_hold_char holds the character lost when yytext is formed. */ static char yy_hold_char; + static int yy_n_chars; /* number of characters read into yy_ch_buf */ + + int yyleng; /* Points to current character in buffer. */ static char *yy_c_buf_p = (char *) 0; -static int yy_init = 0; /* whether we need to initialize */ +static int yy_init = 1; /* whether we need to initialize */ static int yy_start = 0; /* start state number */ /* Flag which is used to allow yywrap()'s to do buffer switches @@ -300,111 +234,111 @@ */ static int yy_did_buffer_switch_on_eof; -void yyrestart (FILE *input_file ); -void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); -YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ); -void yy_delete_buffer (YY_BUFFER_STATE b ); -void yy_flush_buffer (YY_BUFFER_STATE b ); -void yypush_buffer_state (YY_BUFFER_STATE new_buffer ); -void yypop_buffer_state (void ); - -static void yyensure_buffer_stack (void ); -static void yy_load_buffer_state (void ); -static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ); - -#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER ) - -YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ); -YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ); -YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len ); - -void *yyalloc (yy_size_t ); -void *yyrealloc (void *,yy_size_t ); -void yyfree (void * ); +void yyrestart YY_PROTO(( FILE *input_file )); + +void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer )); +void yy_load_buffer_state YY_PROTO(( void )); +YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size )); +void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b )); +void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file )); +void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b )); +#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer ) + +YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size )); +YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str )); +YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len )); + +static void *yy_flex_alloc YY_PROTO(( yy_size_t )); +static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t )) YY_MAY_BE_UNUSED; +static void yy_flex_free YY_PROTO(( void * )); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ - if ( ! YY_CURRENT_BUFFER ){ \ - yyensure_buffer_stack (); \ - YY_CURRENT_BUFFER_LVALUE = \ - yy_create_buffer(yyin,YY_BUF_SIZE ); \ - } \ - YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + if ( ! yy_current_buffer ) \ + yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \ + yy_current_buffer->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ - if ( ! YY_CURRENT_BUFFER ){\ - yyensure_buffer_stack (); \ - YY_CURRENT_BUFFER_LVALUE = \ - yy_create_buffer(yyin,YY_BUF_SIZE ); \ - } \ - YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + if ( ! yy_current_buffer ) \ + yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \ + yy_current_buffer->yy_at_bol = at_bol; \ } -#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) +#define YY_AT_BOL() (yy_current_buffer->yy_at_bol) -/* Begin user sect3 */ +#define YY_USES_REJECT typedef unsigned char YY_CHAR; - FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; - typedef int yy_state_type; - extern int yylineno; - int yylineno = 1; - extern char *yytext; #define yytext_ptr yytext -static yy_state_type yy_get_previous_state (void ); -static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); -static int yy_get_next_buffer (void ); -static void yy_fatal_error (yyconst char msg[] ); +static yy_state_type yy_get_previous_state YY_PROTO(( void )); +static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state )); +static int yy_get_next_buffer YY_PROTO(( void )); +static void yy_fatal_error YY_PROTO(( yyconst char msg[] )); /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ - (yytext_ptr) = yy_bp; \ - yyleng = (size_t) (yy_cp - yy_bp); \ - (yy_hold_char) = *yy_cp; \ + yytext_ptr = yy_bp; \ + yyleng = (int) (yy_cp - yy_bp); \ + yy_hold_char = *yy_cp; \ *yy_cp = '\0'; \ - (yy_c_buf_p) = yy_cp; + yy_c_buf_p = yy_cp; #define YY_NUM_RULES 25 #define YY_END_OF_BUFFER 26 -/* This struct is not used in this scanner, - but its presence is necessary. */ -struct yy_trans_info - { - flex_int32_t yy_verify; - flex_int32_t yy_nxt; - }; -static yyconst flex_int16_t yy_accept[136] = +static yyconst short int yy_acclist[165] = { 0, - 0, 0, 26, 24, 4, 3, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 21, 22, 24, - 4, 24, 0, 24, 0, 1, 1, 24, 24, 24, + 26, 24, 25, 4, 25, 3, 25, 24, 25, 24, + 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, + 25, 24, 25, 24, 25, 24, 25, 24, 25, 21, + 24, 25, 22, 24, 25, 24, 4, 24, 24, 1, + 1, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 23, 24, 23, 24, 2, 2, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 23, 23, 24, 0, 2, 2, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 15, + 24, 24, 5, 24, 24, 24, 24, 24, 24, 24, + 24, 14, 24, 24, 17, 24, 24, 24, 8, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 15, 24, 5, 24, 24, - 24, 24, 24, 24, 24, 14, 24, 17, 24, 24, - 8, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 18, 24, 24, 24, 24, 24, 24, 13, 24, - - 24, 24, 24, 24, 11, 24, 24, 24, 24, 24, - 9, 24, 24, 19, 24, 24, 24, 24, 12, 24, - 24, 24, 24, 24, 20, 16, 7, 24, 24, 24, - 24, 24, 6, 10, 0 + 18, 24, 24, 24, 24, 24, 24, 24, 13, 24, + 24, 24, 24, 24, 24, 11, 24, 24, 24, 24, + 24, 24, 9, 24, 24, 24, 19, 24, 24, 24, + 24, 24, 12, 24, 24, 24, 24, 24, 24, 20, + 24, 16, 24, 7, 24, 24, 24, 24, 24, 24, + 6, 24, 10, 24 + } ; + +static yyconst short int yy_accept[137] = + { 0, + 1, 1, 1, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 20, 22, 24, 26, 28, 30, 33, 36, + 37, 38, 39, 39, 40, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 57, 58, 59, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 82, 83, 85, 86, + 87, 88, 89, 90, 91, 92, 94, 95, 97, 98, + 99, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 113, 114, 115, 116, 117, 118, 119, 121, + + 122, 123, 124, 125, 126, 128, 129, 130, 131, 132, + 133, 135, 136, 137, 139, 140, 141, 142, 143, 145, + 146, 147, 148, 149, 150, 152, 154, 156, 157, 158, + 159, 160, 161, 163, 165, 165 } ; -static yyconst flex_int32_t yy_ec[256] = +static yyconst int yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, @@ -436,14 +370,14 @@ 1, 1, 1, 1, 1 } ; -static yyconst flex_int32_t yy_meta[30] = +static yyconst int yy_meta[30] = { 0, 1, 2, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static yyconst flex_int16_t yy_base[143] = +static yyconst short int yy_base[143] = { 0, 0, 0, 175, 0, 172, 176, 28, 32, 166, 15, 160, 145, 160, 157, 20, 25, 147, 0, 0, 0, @@ -463,7 +397,7 @@ 85, 88 } ; -static yyconst flex_int16_t yy_def[143] = +static yyconst short int yy_def[143] = { 0, 135, 1, 135, 136, 135, 135, 137, 138, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, @@ -483,7 +417,7 @@ 135, 135 } ; -static yyconst flex_int16_t yy_nxt[206] = +static yyconst short int yy_nxt[206] = { 0, 4, 5, 6, 6, 7, 8, 9, 10, 4, 4, 11, 12, 4, 4, 13, 4, 14, 4, 4, 4, @@ -510,7 +444,7 @@ 135, 135, 135, 135, 135 } ; -static yyconst flex_int16_t yy_chk[206] = +static yyconst short int yy_chk[206] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -537,27 +471,22 @@ 135, 135, 135, 135, 135 } ; -/* Table of booleans, true if rule could match eol. */ -static yyconst flex_int32_t yy_rule_can_match_eol[26] = - { 0, -1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, }; - -static yy_state_type yy_last_accepting_state; -static char *yy_last_accepting_cpos; - -extern int yy_flex_debug; -int yy_flex_debug = 0; - -/* The intent behind this definition is that it'll catch - * any uses of REJECT which flex missed. - */ -#define REJECT reject_used_but_not_detected +static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr; +static char *yy_full_match; +static int yy_lp; +#define REJECT \ +{ \ +*yy_cp = yy_hold_char; /* undo effects of setting up yytext */ \ +yy_cp = yy_full_match; /* restore poss. backed-over text */ \ +++yy_lp; \ +goto find_rule; \ +} #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *yytext; #line 1 "winprefslex.l" +#define INITIAL 0 #line 2 "winprefslex.l" /* * Copyright (C) 1994-2000 The XFree86 Project, Inc. All Rights Reserved. @@ -617,23 +546,7 @@ return ptr; } -#line 621 "winprefslex.c" - -#define INITIAL 0 - -#ifndef YY_NO_UNISTD_H -/* Special case for "unistd.h", since it is non-ANSI. We include it way - * down here because we want the user's section 1 to have been scanned first. - * The user has a chance to override it with an option. - */ -#include -#endif - -#ifndef YY_EXTRA_TYPE -#define YY_EXTRA_TYPE void * -#endif - -static int yy_init_globals (void ); +#line 550 "winprefslex.c" /* Macros after this point can all be overridden by user definitions in * section 1. @@ -641,30 +554,65 @@ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus -extern "C" int yywrap (void ); +extern "C" int yywrap YY_PROTO(( void )); #else -extern int yywrap (void ); +extern int yywrap YY_PROTO(( void )); +#endif #endif + +#ifndef YY_NO_UNPUT +static void yyunput YY_PROTO(( int c, char *buf_ptr )); #endif - static void yyunput (int c,char *buf_ptr ); - #ifndef yytext_ptr -static void yy_flex_strncpy (char *,yyconst char *,int ); +static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int )); #endif #ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * ); +static int yy_flex_strlen YY_PROTO(( yyconst char * )); #endif #ifndef YY_NO_INPUT - #ifdef __cplusplus -static int yyinput (void ); +static int yyinput YY_PROTO(( void )); +#else +static int input YY_PROTO(( void )); +#endif +#endif + +#if YY_STACK_USED +static int yy_start_stack_ptr = 0; +static int yy_start_stack_depth = 0; +static int *yy_start_stack = 0; +#ifndef YY_NO_PUSH_STATE +static void yy_push_state YY_PROTO(( int new_state )); +#endif +#ifndef YY_NO_POP_STATE +static void yy_pop_state YY_PROTO(( void )); +#endif +#ifndef YY_NO_TOP_STATE +static int yy_top_state YY_PROTO(( void )); +#endif + #else -static int input (void ); +#define YY_NO_PUSH_STATE 1 +#define YY_NO_POP_STATE 1 +#define YY_NO_TOP_STATE 1 #endif +#ifdef YY_MALLOC_DECL +YY_MALLOC_DECL +#else +#if __STDC__ +#ifndef __cplusplus +#include +#endif +#else +/* Just try to get by without declaring the routines. This will fail + * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int) + * or sizeof(void*) != sizeof(int). + */ +#endif #endif /* Amount of stuff to slurp up with each read. */ @@ -673,6 +621,7 @@ #endif /* Copy whatever the last rule matched to the standard output. */ + #ifndef ECHO /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). @@ -685,10 +634,9 @@ */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ - if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ + if ( yy_current_buffer->yy_is_interactive ) \ { \ - int c = '*'; \ - size_t n; \ + int c = '*', n; \ for ( n = 0; n < max_size && \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ @@ -698,22 +646,9 @@ YY_FATAL_ERROR( "input in flex scanner failed" ); \ result = n; \ } \ - else \ - { \ - errno=0; \ - while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ - { \ - if( errno != EINTR) \ - { \ - YY_FATAL_ERROR( "input in flex scanner failed" ); \ - break; \ - } \ - errno=0; \ - clearerr(yyin); \ - } \ - }\ -\ - + else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \ + && ferror( yyin ) ) \ + YY_FATAL_ERROR( "input in flex scanner failed" ); #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - @@ -734,18 +669,12 @@ #define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) #endif -/* end tables serialization structures and prototypes */ - /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL -#define YY_DECL_IS_OURS 1 - -extern int yylex (void); - -#define YY_DECL int yylex (void) -#endif /* !YY_DECL */ +#define YY_DECL int yylex YY_PROTO(( void )) +#endif /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. @@ -762,28 +691,26 @@ #define YY_RULE_SETUP \ YY_USER_ACTION -/** The main scanner function which does all the work. - */ YY_DECL -{ + { register yy_state_type yy_current_state; - register char *yy_cp, *yy_bp; + register char *yy_cp = NULL, *yy_bp = NULL; register int yy_act; - + #line 64 "winprefslex.l" -#line 776 "winprefslex.c" +#line 703 "winprefslex.c" - if ( !(yy_init) ) + if ( yy_init ) { - (yy_init) = 1; + yy_init = 0; #ifdef YY_USER_INIT YY_USER_INIT; #endif - if ( ! (yy_start) ) - (yy_start) = 1; /* first start state */ + if ( ! yy_start ) + yy_start = 1; /* first start state */ if ( ! yyin ) yyin = stdin; @@ -791,37 +718,32 @@ if ( ! yyout ) yyout = stdout; - if ( ! YY_CURRENT_BUFFER ) { - yyensure_buffer_stack (); - YY_CURRENT_BUFFER_LVALUE = - yy_create_buffer(yyin,YY_BUF_SIZE ); - } + if ( ! yy_current_buffer ) + yy_current_buffer = + yy_create_buffer( yyin, YY_BUF_SIZE ); - yy_load_buffer_state( ); + yy_load_buffer_state(); } while ( 1 ) /* loops until end-of-file is reached */ { - yy_cp = (yy_c_buf_p); + yy_cp = yy_c_buf_p; /* Support of yytext. */ - *yy_cp = (yy_hold_char); + *yy_cp = yy_hold_char; /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; - yy_current_state = (yy_start); + yy_current_state = yy_start; + yy_state_ptr = yy_state_buf; + *yy_state_ptr++ = yy_current_state; yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; - if ( yy_accept[yy_current_state] ) - { - (yy_last_accepting_state) = yy_current_state; - (yy_last_accepting_cpos) = yy_cp; - } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; @@ -829,56 +751,56 @@ yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + *yy_state_ptr++ = yy_current_state; ++yy_cp; } while ( yy_base[yy_current_state] != 176 ); yy_find_action: - yy_act = yy_accept[yy_current_state]; - if ( yy_act == 0 ) - { /* have to back up */ - yy_cp = (yy_last_accepting_cpos); - yy_current_state = (yy_last_accepting_state); - yy_act = yy_accept[yy_current_state]; + yy_current_state = *--yy_state_ptr; + yy_lp = yy_accept[yy_current_state]; +find_rule: /* we branch to this label when backing up */ + for ( ; ; ) /* until we find what rule we matched */ + { + if ( yy_lp && yy_lp < yy_accept[yy_current_state + 1] ) + { + yy_act = yy_acclist[yy_lp]; + { + yy_full_match = yy_cp; + break; + } + } + --yy_cp; + yy_current_state = *--yy_state_ptr; + yy_lp = yy_accept[yy_current_state]; } YY_DO_BEFORE_ACTION; - if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] ) + if ( yy_act != YY_END_OF_BUFFER ) { int yyl; for ( yyl = 0; yyl < yyleng; ++yyl ) if ( yytext[yyl] == '\n' ) - - yylineno++; -; + ++yylineno; } do_action: /* This label is used only to access EOF actions. */ + switch ( yy_act ) { /* beginning of action switch */ - case 0: /* must back up */ - /* undo the effects of YY_DO_BEFORE_ACTION */ - *yy_cp = (yy_hold_char); - yy_cp = (yy_last_accepting_cpos); - yy_current_state = (yy_last_accepting_state); - goto yy_find_action; - case 1: -/* rule 1 can match eol */ YY_RULE_SETUP #line 65 "winprefslex.l" { /* comment */ return NEWLINE; } YY_BREAK case 2: -/* rule 2 can match eol */ YY_RULE_SETUP #line 66 "winprefslex.l" { /* comment */ return NEWLINE; } YY_BREAK case 3: -/* rule 3 can match eol */ YY_RULE_SETUP #line 67 "winprefslex.l" { return NEWLINE; } @@ -996,33 +918,33 @@ #line 92 "winprefslex.l" ECHO; YY_BREAK -#line 1000 "winprefslex.c" -case YY_STATE_EOF(INITIAL): - yyterminate(); +#line 922 "winprefslex.c" + case YY_STATE_EOF(INITIAL): + yyterminate(); case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ - int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; + int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ - *yy_cp = (yy_hold_char); + *yy_cp = yy_hold_char; YY_RESTORE_YY_MORE_OFFSET - if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure - * consistency between YY_CURRENT_BUFFER and our + * consistency between yy_current_buffer and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ - (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; - YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; - YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + yy_n_chars = yy_current_buffer->yy_n_chars; + yy_current_buffer->yy_input_file = yyin; + yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position @@ -1032,13 +954,13 @@ * end-of-buffer state). Contrast this with the test * in input(). */ - if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] ) { /* This was really a NUL. */ yy_state_type yy_next_state; - (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; + yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text; - yy_current_state = yy_get_previous_state( ); + yy_current_state = yy_get_previous_state(); /* Okay, we're now positioned to make the NUL * transition. We couldn't have @@ -1051,30 +973,30 @@ yy_next_state = yy_try_NUL_trans( yy_current_state ); - yy_bp = (yytext_ptr) + YY_MORE_ADJ; + yy_bp = yytext_ptr + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ - yy_cp = ++(yy_c_buf_p); + yy_cp = ++yy_c_buf_p; yy_current_state = yy_next_state; goto yy_match; } else { - yy_cp = (yy_c_buf_p); + yy_cp = yy_c_buf_p; goto yy_find_action; } } - else switch ( yy_get_next_buffer( ) ) + else switch ( yy_get_next_buffer() ) { case EOB_ACT_END_OF_FILE: { - (yy_did_buffer_switch_on_eof) = 0; + yy_did_buffer_switch_on_eof = 0; - if ( yywrap( ) ) + if ( yywrap() ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up @@ -1085,7 +1007,7 @@ * YY_NULL, it'll still work - another * YY_NULL will get returned. */ - (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; + yy_c_buf_p = yytext_ptr + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; @@ -1093,30 +1015,30 @@ else { - if ( ! (yy_did_buffer_switch_on_eof) ) + if ( ! yy_did_buffer_switch_on_eof ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: - (yy_c_buf_p) = - (yytext_ptr) + yy_amount_of_matched_text; + yy_c_buf_p = + yytext_ptr + yy_amount_of_matched_text; - yy_current_state = yy_get_previous_state( ); + yy_current_state = yy_get_previous_state(); - yy_cp = (yy_c_buf_p); - yy_bp = (yytext_ptr) + YY_MORE_ADJ; + yy_cp = yy_c_buf_p; + yy_bp = yytext_ptr + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: - (yy_c_buf_p) = - &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; + yy_c_buf_p = + &yy_current_buffer->yy_ch_buf[yy_n_chars]; - yy_current_state = yy_get_previous_state( ); + yy_current_state = yy_get_previous_state(); - yy_cp = (yy_c_buf_p); - yy_bp = (yytext_ptr) + YY_MORE_ADJ; + yy_cp = yy_c_buf_p; + yy_bp = yytext_ptr + YY_MORE_ADJ; goto yy_find_action; } break; @@ -1127,7 +1049,8 @@ "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ -} /* end of yylex */ + } /* end of yylex */ + /* yy_get_next_buffer - try to read in a new buffer * @@ -1136,20 +1059,21 @@ * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ -static int yy_get_next_buffer (void) -{ - register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; - register char *source = (yytext_ptr); + +static int yy_get_next_buffer() + { + register char *dest = yy_current_buffer->yy_ch_buf; + register char *source = yytext_ptr; register int number_to_move, i; int ret_val; - if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) + if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); - if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + if ( yy_current_buffer->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ - if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) + if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. @@ -1169,30 +1093,34 @@ /* Try to read more data. */ /* First move last chars to start of buffer. */ - number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; + number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); - if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; + yy_current_buffer->yy_n_chars = yy_n_chars = 0; else { - int num_to_read = - YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + int num_to_read = + yy_current_buffer->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ +#ifdef YY_USES_REJECT + YY_FATAL_ERROR( +"input buffer overflow, can't enlarge buffer because scanner uses REJECT" ); +#else /* just a shorter name for the current buffer */ - YY_BUFFER_STATE b = YY_CURRENT_BUFFER; + YY_BUFFER_STATE b = yy_current_buffer; int yy_c_buf_p_offset = - (int) ((yy_c_buf_p) - b->yy_ch_buf); + (int) (yy_c_buf_p - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { @@ -1205,7 +1133,8 @@ b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ - yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); + yy_flex_realloc( (void *) b->yy_ch_buf, + b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ @@ -1215,35 +1144,35 @@ YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); - (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; + yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; - num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + num_to_read = yy_current_buffer->yy_buf_size - number_to_move - 1; - +#endif } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ - YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), - (yy_n_chars), (size_t) num_to_read ); + YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]), + yy_n_chars, num_to_read ); - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + yy_current_buffer->yy_n_chars = yy_n_chars; } - if ( (yy_n_chars) == 0 ) + if ( yy_n_chars == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; - yyrestart(yyin ); + yyrestart( yyin ); } else { ret_val = EOB_ACT_LAST_MATCH; - YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + yy_current_buffer->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } @@ -1251,32 +1180,30 @@ else ret_val = EOB_ACT_CONTINUE_SCAN; - (yy_n_chars) += number_to_move; - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; + yy_n_chars += number_to_move; + yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR; + yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; - (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + yytext_ptr = &yy_current_buffer->yy_ch_buf[0]; return ret_val; -} + } + /* yy_get_previous_state - get the state just before the EOB char was reached */ - static yy_state_type yy_get_previous_state (void) -{ +static yy_state_type yy_get_previous_state() + { register yy_state_type yy_current_state; register char *yy_cp; - - yy_current_state = (yy_start); - for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) + yy_current_state = yy_start; + yy_state_ptr = yy_state_buf; + *yy_state_ptr++ = yy_current_state; + + for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp ) { register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); - if ( yy_accept[yy_current_state] ) - { - (yy_last_accepting_state) = yy_current_state; - (yy_last_accepting_cpos) = yy_cp; - } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; @@ -1284,27 +1211,29 @@ yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + *yy_state_ptr++ = yy_current_state; } return yy_current_state; -} + } + /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ - static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) -{ + +#ifdef YY_USE_PROTOS +static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state ) +#else +static yy_state_type yy_try_NUL_trans( yy_current_state ) +yy_state_type yy_current_state; +#endif + { register int yy_is_jam; - register char *yy_cp = (yy_c_buf_p); register YY_CHAR yy_c = 1; - if ( yy_accept[yy_current_state] ) - { - (yy_last_accepting_state) = yy_current_state; - (yy_last_accepting_cpos) = yy_cp; - } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; @@ -1313,79 +1242,87 @@ } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 135); + if ( ! yy_is_jam ) + *yy_state_ptr++ = yy_current_state; return yy_is_jam ? 0 : yy_current_state; -} + } - static void yyunput (int c, register char * yy_bp ) -{ - register char *yy_cp; - - yy_cp = (yy_c_buf_p); + +#ifndef YY_NO_UNPUT +#ifdef YY_USE_PROTOS +static void yyunput( int c, register char *yy_bp ) +#else +static void yyunput( c, yy_bp ) +int c; +register char *yy_bp; +#endif + { + register char *yy_cp = yy_c_buf_p; /* undo effects of setting up yytext */ - *yy_cp = (yy_hold_char); + *yy_cp = yy_hold_char; - if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ - register int number_to_move = (yy_n_chars) + 2; - register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ - YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; + register int number_to_move = yy_n_chars + 2; + register char *dest = &yy_current_buffer->yy_ch_buf[ + yy_current_buffer->yy_buf_size + 2]; register char *source = - &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; + &yy_current_buffer->yy_ch_buf[number_to_move]; - while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + while ( source > yy_current_buffer->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = - (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + yy_current_buffer->yy_n_chars = + yy_n_chars = yy_current_buffer->yy_buf_size; - if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; - if ( c == '\n' ){ - --yylineno; - } + if ( c == '\n' ) + --yylineno; + + yytext_ptr = yy_bp; + yy_hold_char = *yy_cp; + yy_c_buf_p = yy_cp; + } +#endif /* ifndef YY_NO_UNPUT */ - (yytext_ptr) = yy_bp; - (yy_hold_char) = *yy_cp; - (yy_c_buf_p) = yy_cp; -} #ifndef YY_NO_INPUT #ifdef __cplusplus - static int yyinput (void) +static int yyinput() #else - static int input (void) +static int input() #endif - -{ + { int c; - - *(yy_c_buf_p) = (yy_hold_char); - if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) + *yy_c_buf_p = yy_hold_char; + + if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ - if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] ) /* This was really a NUL. */ - *(yy_c_buf_p) = '\0'; + *yy_c_buf_p = '\0'; else { /* need more input */ - int offset = (yy_c_buf_p) - (yytext_ptr); - ++(yy_c_buf_p); + int offset = yy_c_buf_p - yytext_ptr; + ++yy_c_buf_p; - switch ( yy_get_next_buffer( ) ) + switch ( yy_get_next_buffer() ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() @@ -1399,16 +1336,16 @@ */ /* Reset buffer status. */ - yyrestart(yyin ); + yyrestart( yyin ); - /*FALLTHROUGH*/ + /* fall through */ case EOB_ACT_END_OF_FILE: { - if ( yywrap( ) ) + if ( yywrap() ) return EOF; - if ( ! (yy_did_buffer_switch_on_eof) ) + if ( ! yy_did_buffer_switch_on_eof ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); @@ -1418,97 +1355,92 @@ } case EOB_ACT_CONTINUE_SCAN: - (yy_c_buf_p) = (yytext_ptr) + offset; + yy_c_buf_p = yytext_ptr + offset; break; } } } - c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ - *(yy_c_buf_p) = '\0'; /* preserve yytext */ - (yy_hold_char) = *++(yy_c_buf_p); + c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */ + *yy_c_buf_p = '\0'; /* preserve yytext */ + yy_hold_char = *++yy_c_buf_p; if ( c == '\n' ) - - yylineno++; -; + ++yylineno; return c; -} -#endif /* ifndef YY_NO_INPUT */ + } +#endif /* YY_NO_INPUT */ -/** Immediately switch to a different input stream. - * @param input_file A readable stream. - * - * @note This function does not reset the start condition to @c INITIAL . - */ - void yyrestart (FILE * input_file ) -{ - - if ( ! YY_CURRENT_BUFFER ){ - yyensure_buffer_stack (); - YY_CURRENT_BUFFER_LVALUE = - yy_create_buffer(yyin,YY_BUF_SIZE ); +#ifdef YY_USE_PROTOS +void yyrestart( FILE *input_file ) +#else +void yyrestart( input_file ) +FILE *input_file; +#endif + { + if ( ! yy_current_buffer ) + yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); + + yy_init_buffer( yy_current_buffer, input_file ); + yy_load_buffer_state(); } - yy_init_buffer(YY_CURRENT_BUFFER,input_file ); - yy_load_buffer_state( ); -} -/** Switch to a different input buffer. - * @param new_buffer The new input buffer. - * - */ - void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) -{ - - /* TODO. We should be able to replace this entire function body - * with - * yypop_buffer_state(); - * yypush_buffer_state(new_buffer); - */ - yyensure_buffer_stack (); - if ( YY_CURRENT_BUFFER == new_buffer ) +#ifdef YY_USE_PROTOS +void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) +#else +void yy_switch_to_buffer( new_buffer ) +YY_BUFFER_STATE new_buffer; +#endif + { + if ( yy_current_buffer == new_buffer ) return; - if ( YY_CURRENT_BUFFER ) + if ( yy_current_buffer ) { /* Flush out information for old buffer. */ - *(yy_c_buf_p) = (yy_hold_char); - YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + *yy_c_buf_p = yy_hold_char; + yy_current_buffer->yy_buf_pos = yy_c_buf_p; + yy_current_buffer->yy_n_chars = yy_n_chars; } - YY_CURRENT_BUFFER_LVALUE = new_buffer; - yy_load_buffer_state( ); + yy_current_buffer = new_buffer; + yy_load_buffer_state(); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ - (yy_did_buffer_switch_on_eof) = 1; -} + yy_did_buffer_switch_on_eof = 1; + } -static void yy_load_buffer_state (void) -{ - (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; - (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; - yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; - (yy_hold_char) = *(yy_c_buf_p); -} -/** Allocate and initialize an input buffer state. - * @param file A readable stream. - * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. - * - * @return the allocated buffer state. - */ - YY_BUFFER_STATE yy_create_buffer (FILE * file, int size ) -{ +#ifdef YY_USE_PROTOS +void yy_load_buffer_state( void ) +#else +void yy_load_buffer_state() +#endif + { + yy_n_chars = yy_current_buffer->yy_n_chars; + yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos; + yyin = yy_current_buffer->yy_input_file; + yy_hold_char = *yy_c_buf_p; + } + + +#ifdef YY_USE_PROTOS +YY_BUFFER_STATE yy_create_buffer( FILE *file, int size ) +#else +YY_BUFFER_STATE yy_create_buffer( file, size ) +FILE *file; +int size; +#endif + { YY_BUFFER_STATE b; - - b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); + + b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); @@ -1517,75 +1449,75 @@ /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ - b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 ); + b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; - yy_init_buffer(b,file ); + yy_init_buffer( b, file ); return b; -} + } -/** Destroy the buffer. - * @param b a buffer created with yy_create_buffer() - * - */ - void yy_delete_buffer (YY_BUFFER_STATE b ) -{ - + +#ifdef YY_USE_PROTOS +void yy_delete_buffer( YY_BUFFER_STATE b ) +#else +void yy_delete_buffer( b ) +YY_BUFFER_STATE b; +#endif + { if ( ! b ) return; - if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ - YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + if ( b == yy_current_buffer ) + yy_current_buffer = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) - yyfree((void *) b->yy_ch_buf ); + yy_flex_free( (void *) b->yy_ch_buf ); - yyfree((void *) b ); -} + yy_flex_free( (void *) b ); + } -#ifndef __cplusplus -extern int isatty (int ); -#endif /* __cplusplus */ - -/* Initializes or reinitializes a buffer. - * This function is sometimes called more than once on the same buffer, - * such as during a yyrestart() or at EOF. - */ - static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file ) -{ - int oerrno = errno; - - yy_flush_buffer(b ); + +#ifdef YY_USE_PROTOS +void yy_init_buffer( YY_BUFFER_STATE b, FILE *file ) +#else +void yy_init_buffer( b, file ) +YY_BUFFER_STATE b; +FILE *file; +#endif + + + { + yy_flush_buffer( b ); b->yy_input_file = file; b->yy_fill_buffer = 1; - /* If b is the current buffer, then yy_init_buffer was _probably_ - * called from yyrestart() or through yy_get_next_buffer. - * In that case, we don't want to reset the lineno or column. - */ - if (b != YY_CURRENT_BUFFER){ - b->yy_bs_lineno = 1; - b->yy_bs_column = 0; - } +#if YY_ALWAYS_INTERACTIVE + b->yy_is_interactive = 1; +#else +#if YY_NEVER_INTERACTIVE + b->yy_is_interactive = 0; +#else + b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; +#endif +#endif + } - b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; - - errno = oerrno; -} -/** Discard all buffered characters. On the next scan, YY_INPUT will be called. - * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. - * - */ - void yy_flush_buffer (YY_BUFFER_STATE b ) -{ - if ( ! b ) +#ifdef YY_USE_PROTOS +void yy_flush_buffer( YY_BUFFER_STATE b ) +#else +void yy_flush_buffer( b ) +YY_BUFFER_STATE b; +#endif + + { + if ( ! b ) return; b->yy_n_chars = 0; @@ -1602,121 +1534,29 @@ b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; - if ( b == YY_CURRENT_BUFFER ) - yy_load_buffer_state( ); -} - -/** Pushes the new state onto the stack. The new state becomes - * the current state. This function will allocate the stack - * if necessary. - * @param new_buffer The new state. - * - */ -void yypush_buffer_state (YY_BUFFER_STATE new_buffer ) -{ - if (new_buffer == NULL) - return; - - yyensure_buffer_stack(); - - /* This block is copied from yy_switch_to_buffer. */ - if ( YY_CURRENT_BUFFER ) - { - /* Flush out information for old buffer. */ - *(yy_c_buf_p) = (yy_hold_char); - YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); - } - - /* Only push if top exists. Otherwise, replace top. */ - if (YY_CURRENT_BUFFER) - (yy_buffer_stack_top)++; - YY_CURRENT_BUFFER_LVALUE = new_buffer; - - /* copied from yy_switch_to_buffer. */ - yy_load_buffer_state( ); - (yy_did_buffer_switch_on_eof) = 1; -} - -/** Removes and deletes the top of the stack, if present. - * The next element becomes the new top. - * - */ -void yypop_buffer_state (void) -{ - if (!YY_CURRENT_BUFFER) - return; - - yy_delete_buffer(YY_CURRENT_BUFFER ); - YY_CURRENT_BUFFER_LVALUE = NULL; - if ((yy_buffer_stack_top) > 0) - --(yy_buffer_stack_top); - - if (YY_CURRENT_BUFFER) { - yy_load_buffer_state( ); - (yy_did_buffer_switch_on_eof) = 1; + if ( b == yy_current_buffer ) + yy_load_buffer_state(); } -} -/* Allocates the stack if it does not exist. - * Guarantees space for at least one push. - */ -static void yyensure_buffer_stack (void) -{ - int num_to_alloc; - - if (!(yy_buffer_stack)) { - - /* First allocation is just for 2 elements, since we don't know if this - * scanner will even need a stack. We use 2 instead of 1 to avoid an - * immediate realloc on the next call. - */ - num_to_alloc = 1; - (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc - (num_to_alloc * sizeof(struct yy_buffer_state*) - ); - - memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); - - (yy_buffer_stack_max) = num_to_alloc; - (yy_buffer_stack_top) = 0; - return; - } - - if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ - /* Increase the buffer to prepare for a possible push. */ - int grow_size = 8 /* arbitrary grow size */; - - num_to_alloc = (yy_buffer_stack_max) + grow_size; - (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc - ((yy_buffer_stack), - num_to_alloc * sizeof(struct yy_buffer_state*) - ); - - /* zero only the new slots.*/ - memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); - (yy_buffer_stack_max) = num_to_alloc; - } -} - -/** Setup the input buffer state to scan directly from a user-specified character buffer. - * @param base the character buffer - * @param size the size in bytes of the character buffer - * - * @return the newly allocated buffer state object. - */ -YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) -{ +#ifndef YY_NO_SCAN_BUFFER +#ifdef YY_USE_PROTOS +YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size ) +#else +YY_BUFFER_STATE yy_scan_buffer( base, size ) +char *base; +yy_size_t size; +#endif + { YY_BUFFER_STATE b; - + if ( size < 2 || base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ return 0; - b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); + b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); @@ -1730,51 +1570,56 @@ b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; - yy_switch_to_buffer(b ); + yy_switch_to_buffer( b ); return b; -} + } +#endif -/** Setup the input buffer state to scan a string. The next call to yylex() will - * scan from a @e copy of @a str. - * @param yystr a NUL-terminated string to scan - * - * @return the newly allocated buffer state object. - * @note If you want to scan bytes that may contain NUL values, then use - * yy_scan_bytes() instead. - */ -YY_BUFFER_STATE yy_scan_string (yyconst char * yystr ) -{ - - return yy_scan_bytes(yystr,strlen(yystr) ); -} -/** Setup the input buffer state to scan the given bytes. The next call to yylex() will - * scan from a @e copy of @a bytes. - * @param bytes the byte buffer to scan - * @param len the number of bytes in the buffer pointed to by @a bytes. - * - * @return the newly allocated buffer state object. - */ -YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, int _yybytes_len ) -{ +#ifndef YY_NO_SCAN_STRING +#ifdef YY_USE_PROTOS +YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str ) +#else +YY_BUFFER_STATE yy_scan_string( yy_str ) +yyconst char *yy_str; +#endif + { + int len; + for ( len = 0; yy_str[len]; ++len ) + ; + + return yy_scan_bytes( yy_str, len ); + } +#endif + + +#ifndef YY_NO_SCAN_BYTES +#ifdef YY_USE_PROTOS +YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len ) +#else +YY_BUFFER_STATE yy_scan_bytes( bytes, len ) +yyconst char *bytes; +int len; +#endif + { YY_BUFFER_STATE b; char *buf; yy_size_t n; int i; - + /* Get memory for full buffer, including space for trailing EOB's. */ - n = _yybytes_len + 2; - buf = (char *) yyalloc(n ); + n = len + 2; + buf = (char *) yy_flex_alloc( n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); - for ( i = 0; i < _yybytes_len; ++i ) - buf[i] = yybytes[i]; + for ( i = 0; i < len; ++i ) + buf[i] = bytes[i]; - buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR; - b = yy_scan_buffer(buf,n ); + b = yy_scan_buffer( buf, n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); @@ -1784,199 +1629,148 @@ b->yy_is_our_buffer = 1; return b; -} + } +#endif -#ifndef YY_EXIT_FAILURE -#define YY_EXIT_FAILURE 2 + +#ifndef YY_NO_PUSH_STATE +#ifdef YY_USE_PROTOS +static void yy_push_state( int new_state ) +#else +static void yy_push_state( new_state ) +int new_state; #endif + { + if ( yy_start_stack_ptr >= yy_start_stack_depth ) + { + yy_size_t new_size; -static void yy_fatal_error (yyconst char* msg ) -{ - (void) fprintf( stderr, "%s\n", msg ); - exit( YY_EXIT_FAILURE ); -} + yy_start_stack_depth += YY_START_STACK_INCR; + new_size = yy_start_stack_depth * sizeof( int ); -/* Redefine yyless() so it works in section 3 code. */ + if ( ! yy_start_stack ) + yy_start_stack = (int *) yy_flex_alloc( new_size ); -#undef yyless -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up yytext. */ \ - int yyless_macro_arg = (n); \ - YY_LESS_LINENO(yyless_macro_arg);\ - yytext[yyleng] = (yy_hold_char); \ - (yy_c_buf_p) = yytext + yyless_macro_arg; \ - (yy_hold_char) = *(yy_c_buf_p); \ - *(yy_c_buf_p) = '\0'; \ - yyleng = yyless_macro_arg; \ - } \ - while ( 0 ) + else + yy_start_stack = (int *) yy_flex_realloc( + (void *) yy_start_stack, new_size ); -/* Accessor methods (get/set functions) to struct members. */ + if ( ! yy_start_stack ) + YY_FATAL_ERROR( + "out of memory expanding start-condition stack" ); + } -/** Get the current line number. - * - */ -int yyget_lineno (void) -{ - - return yylineno; -} + yy_start_stack[yy_start_stack_ptr++] = YY_START; -/** Get the input stream. - * - */ -FILE *yyget_in (void) -{ - return yyin; -} + BEGIN(new_state); + } +#endif -/** Get the output stream. - * - */ -FILE *yyget_out (void) -{ - return yyout; -} -/** Get the length of the current token. - * - */ -int yyget_leng (void) -{ - return yyleng; -} +#ifndef YY_NO_POP_STATE +static void yy_pop_state() + { + if ( --yy_start_stack_ptr < 0 ) + YY_FATAL_ERROR( "start-condition stack underflow" ); -/** Get the current token. - * - */ + BEGIN(yy_start_stack[yy_start_stack_ptr]); + } +#endif -char *yyget_text (void) -{ - return yytext; -} -/** Set the current line number. - * @param line_number - * - */ -void yyset_lineno (int line_number ) -{ - - yylineno = line_number; -} +#ifndef YY_NO_TOP_STATE +static int yy_top_state() + { + return yy_start_stack[yy_start_stack_ptr - 1]; + } +#endif -/** Set the input stream. This does not discard the current - * input buffer. - * @param in_str A readable stream. - * - * @see yy_switch_to_buffer - */ -void yyset_in (FILE * in_str ) -{ - yyin = in_str ; -} +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif -void yyset_out (FILE * out_str ) -{ - yyout = out_str ; -} +#ifdef YY_USE_PROTOS +static void yy_fatal_error( yyconst char msg[] ) +#else +static void yy_fatal_error( msg ) +char msg[]; +#endif + { + (void) fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); + } -int yyget_debug (void) -{ - return yy_flex_debug; -} -void yyset_debug (int bdebug ) -{ - yy_flex_debug = bdebug ; -} -static int yy_init_globals (void) -{ - /* Initialization is the same as for the non-reentrant scanner. - * This function is called from yylex_destroy(), so don't allocate here. - */ - - /* We do not touch yylineno unless the option is enabled. */ - yylineno = 1; - - (yy_buffer_stack) = 0; - (yy_buffer_stack_top) = 0; - (yy_buffer_stack_max) = 0; - (yy_c_buf_p) = (char *) 0; - (yy_init) = 0; - (yy_start) = 0; - -/* Defined in main.c */ -#ifdef YY_STDINIT - yyin = stdin; - yyout = stdout; -#else - yyin = (FILE *) 0; - yyout = (FILE *) 0; -#endif - - /* For future reference: Set errno on error, since we are called by - * yylex_init() - */ - return 0; -} +/* Redefine yyless() so it works in section 3 code. */ -/* yylex_destroy is for both reentrant and non-reentrant scanners. */ -int yylex_destroy (void) -{ - - /* Pop the buffer stack, destroying each element. */ - while(YY_CURRENT_BUFFER){ - yy_delete_buffer(YY_CURRENT_BUFFER ); - YY_CURRENT_BUFFER_LVALUE = NULL; - yypop_buffer_state(); - } - - /* Destroy the stack itself. */ - yyfree((yy_buffer_stack) ); - (yy_buffer_stack) = NULL; - - /* Reset the globals. This is important in a non-reentrant scanner so the next time - * yylex() is called, initialization will occur. */ - yy_init_globals( ); +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + yytext[yyleng] = yy_hold_char; \ + yy_c_buf_p = yytext + n; \ + yy_hold_char = *yy_c_buf_p; \ + *yy_c_buf_p = '\0'; \ + yyleng = n; \ + } \ + while ( 0 ) - return 0; -} -/* - * Internal utility routines. - */ +/* Internal utility routines. */ #ifndef yytext_ptr -static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) -{ +#ifdef YY_USE_PROTOS +static void yy_flex_strncpy( char *s1, yyconst char *s2, int n ) +#else +static void yy_flex_strncpy( s1, s2, n ) +char *s1; +yyconst char *s2; +int n; +#endif + { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; -} + } #endif #ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * s ) -{ +#ifdef YY_USE_PROTOS +static int yy_flex_strlen( yyconst char *s ) +#else +static int yy_flex_strlen( s ) +yyconst char *s; +#endif + { register int n; for ( n = 0; s[n]; ++n ) ; return n; -} + } #endif -void *yyalloc (yy_size_t size ) -{ + +#ifdef YY_USE_PROTOS +static void *yy_flex_alloc( yy_size_t size ) +#else +static void *yy_flex_alloc( size ) +yy_size_t size; +#endif + { return (void *) malloc( size ); -} + } -void *yyrealloc (void * ptr, yy_size_t size ) -{ +#ifdef YY_USE_PROTOS +static void *yy_flex_realloc( void *ptr, yy_size_t size ) +#else +static void *yy_flex_realloc( ptr, size ) +void *ptr; +yy_size_t size; +#endif + { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter @@ -1985,19 +1779,28 @@ * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); -} - -void yyfree (void * ptr ) -{ - free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ -} + } -#define YYTABLES_NAME "yytables" +#ifdef YY_USE_PROTOS +static void yy_flex_free( void *ptr ) +#else +static void yy_flex_free( ptr ) +void *ptr; +#endif + { + free( ptr ); + } +#if YY_MAIN +int main() + { + yylex(); + return 0; + } +#endif #line 92 "winprefslex.l" - /* * Run-of-the mill requirement for yacc */ @@ -2021,4 +1824,3 @@ yyparse (); } - --- xorg-server-1.3.0.0.dfsg.orig/hw/xwin/winprefsyacc.h +++ xorg-server-1.3.0.0.dfsg/hw/xwin/winprefsyacc.h @@ -93,7 +93,7 @@ char *sVal; int iVal; } -/* Line 1489 of yacc.c. */ +/* Line 1529 of yacc.c. */ #line 98 "winprefsyacc.h" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ --- xorg-server-1.3.0.0.dfsg.orig/hw/xwin/xlaunch/Makefile +++ xorg-server-1.3.0.0.dfsg/hw/xwin/xlaunch/Makefile @@ -0,0 +1,79 @@ +# +# Copyright (c) 2005 Alexander Gottwald +# +# 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 ABOVE LISTED COPYRIGHT HOLDER(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(s) of the above copyright +# holders shall not be used in advertising or otherwise to promote the sale, +# use or other dealings in this Software without prior written authorization. +# +WINDRES=windres + +TARGET=mingw +#DEBUG_FLAGS=-D_DEBUG + +OS_FLAGS_mingw=-mno-cygwin +OS_FLAGS=$(OS_FLAGS_$(TARGET)) $(DEBUG_FLAGS) + +X11_DIR_$(TARGET)=/usr/X11R6 +X11_DIR_mingw=../../../../../exports +X11_DIR=$(X11_DIR_$(TARGET)) +X11_INCLUDE=-I$(X11_DIR)/include +X11_LIBDIR=-L$(X11_DIR)/lib +X11_LIBS_$(TARGET)=-lX11 +X11_LIBS_mingw=-lX11 -lwsock32 +X11_LIBS=$(X11_LIBS_$(TARGET)) + +PROGRAMFILES:=$(shell cygpath -u $(PROGRAMFILES)) +#MSXML_DIR=$(PROGRAMFILES)/MSXML 4.0 +MSXML_DIR=$(PROGRAMFILES)/Microsoft XML Parser SDK +MSXML_INCLUDE="-I$(MSXML_DIR)/inc" +MSXML_LIBDIR="-L$(MSXML_DIR)/lib" +MSXML_LIBS= + + +CXXFLAGS=-g $(OS_FLAGS) $(X11_INCLUDE) $(MSXML_INCLUDE) +LDFLAGS=-mwindows $(X11_LIBDIR) $(MSXML_LIBDIR) +LIBS=-lcomctl32 -lole32 -loleaut32 $(X11_LIBS) $(MSXML_LIBS) +all:xlaunch.exe +%.res: %.rc + $(WINDRES) -O coff -o $@ $< + +WINDOW_PARTS=window util dialog wizard +WINDOW_OBJECTS=$(foreach file,$(WINDOW_PARTS),window/$(file).o) + +RESOURCES_IMAGES=resources/multiwindow.bmp resources/fullscreen.bmp \ + resources/windowed.bmp resources/nodecoration.bmp + +resources/resources.res: resources/resources.rc resources/resources.h \ + resources/images.rc resources/dialog.rc resources/strings.rc \ + $(RESOURCES_IMAGES) +xlaunch.exe: $(WINDOW_OBJECTS) main.o config.o resources/resources.res + $(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS) + + +window/dialog.o: window/dialog.cc window/dialog.h window/window.h window/util.h +window/frame.o: window/frame.cc window/frame.h window/window.h +window/util.o: window/util.cc window/util.h +window/window.o: window/window.cc window/window.h window/util.h +window/wizard.o: window/wizard.cc window/wizard.h window/dialog.h \ + window/window.h window/util.h +main.o: main.cc window/util.h window/wizard.h window/dialog.h \ + window/window.h resources/resources.h config.h +config.o: config.cc config.h --- xorg-server-1.3.0.0.dfsg.orig/hw/xwin/xlaunch/config.h +++ xorg-server-1.3.0.0.dfsg/hw/xwin/xlaunch/config.h @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2005 Alexander Gottwald + * + * 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 ABOVE LISTED COPYRIGHT HOLDER(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(s) of the above copyright + * holders shall not be used in advertising or otherwise to promote the sale, + * use or other dealings in this Software without prior written authorization. + */ +#ifndef __CONFIG_H__ +#define __CONFIG_H__ + +#include +struct CConfig +{ + enum {MultiWindow, Fullscreen, Windowed, Nodecoration} window; + enum {NoClient, StartProgram, XDMCP} client; + bool local; + std::string display; + std::string protocol; + std::string program; + std::string host; + std::string user; + bool broadcast; + bool indirect; + std::string xdmcp_host; + bool clipboard; + std::string extra_params; +#ifdef _DEBUG + CConfig() : window(MultiWindow), client(StartProgram), local(false), display("1"), + protocol("Putty"), program("xterm"), host("lupus"), user("ago"), + broadcast(false), indirect(false), xdmcp_host("lupus"), + clipboard(true), extra_params() {}; +#else + CConfig() : window(MultiWindow), client(StartProgram), local(false), display("0"), + protocol("Putty"), program("xterm"), host(""), user(""), + broadcast(true), indirect(false), xdmcp_host(""), + clipboard(true), extra_params() {}; +#endif + void Load(const char* filename); + void Save(const char* filename); +}; + +#endif --- xorg-server-1.3.0.0.dfsg.orig/hw/xwin/Makefile.in +++ xorg-server-1.3.0.0.dfsg/hw/xwin/Makefile.in @@ -196,6 +196,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -282,6 +284,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -394,6 +397,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/hw/xwin/winprefsyacc.c +++ xorg-server-1.3.0.0.dfsg/hw/xwin/winprefsyacc.c @@ -218,7 +218,7 @@ char *sVal; int iVal; } -/* Line 187 of yacc.c. */ +/* Line 193 of yacc.c. */ #line 223 "winprefsyacc.c" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ --- xorg-server-1.3.0.0.dfsg.orig/debian/xvfb.install +++ xorg-server-1.3.0.0.dfsg/debian/xvfb.install @@ -0,0 +1,4 @@ +usr/bin/Xvfb +usr/bin/xvfb-run +usr/share/man/man1/xvfb-run.1 +usr/share/man/man1/Xvfb.1 --- xorg-server-1.3.0.0.dfsg.orig/debian/xprint-common.links +++ xorg-server-1.3.0.0.dfsg/debian/xprint-common.links @@ -0,0 +1,5 @@ +etc/Xprint/C/print/attributes usr/share/Xprint/xserver/C/print/attributes +etc/Xprint/C/print/Xprinters usr/share/Xprint/xserver/C/print/Xprinters +etc/Xprint/C/print/ddx-config usr/share/Xprint/xserver/C/print/ddx-config +etc/Xprint/en_US/print/attributes usr/share/Xprint/xserver/en_US/print/attributes +usr/share/Xprint/xserver/README usr/share/doc/xprint-common/README --- xorg-server-1.3.0.0.dfsg.orig/debian/xprint.dirs +++ xorg-server-1.3.0.0.dfsg/debian/xprint.dirs @@ -0,0 +1,3 @@ +usr/share/doc +usr/bin +usr/share/lintian/overrides --- xorg-server-1.3.0.0.dfsg.orig/debian/xprint-common.README.Debian +++ xorg-server-1.3.0.0.dfsg/debian/xprint-common.README.Debian @@ -0,0 +1,82 @@ +xprint for Debian +=========================== + +This package supplies Xprt, the Xprint server. It is able to work with the +mozilla printing system, allowing non-latin characters and MathML to be +printed, among other improvements over the default mozilla printing driver. + + +Running the Xprint server +----------------------- + +The Xprint server is started and stopped via /etc/init.d/xprint, +provided in package xprint-common. + +As of version 0.0.8, Xprint supports TrueType fonts. + +Xprint requires a print server such as lprng or CUPS to be installed. It +uses lpc or lpstat to identify available printers. + +The Xprint server is not registered in /etc/inetd.conf. If you require the use +of the Xprint server across a network, you will be responsible for +this yourself (use update-inetd to register the server). Note that +this question is not the same as using a networked printer via a local +Xprint server. The printers themselves are configured via /etc/cups/printers.conf, +/etc/printcap or similar, independently of Xprint. + + +----------------------------- +Xprint server will not start: +Error: could not open default font 'fixed' + +Some users have reported experiencing this problem, which prevents Xprt from +starting. We have not yet been able to precisely pinpoint the cause of the +problem. It appears to happen when some TrueType fonts are not correctly +installed. It may be that Xprt finds the bad fonts and quits working through +the font list, rather than simply ignoring the bad fonts as it ought to. Hence +Xprt does not manage to get to the font directory in the font list containing +the fixed fonts. + +Some users have reported a workaround in /etc/init.d/xprint: +In line 343, use + "sort -u -r" +instead of + "sort -u" + +This has not been patched in to the package since it does not actually fix +the problem, it simply provides an alternative means of (hopefully) finding a +fixed font, by reversing the order in which font directories are searched. + + + +Running Xprint clients +---------------------- + +Client programs such as mozilla will require the Xprint server to be +identified in variable XPSERVERLIST. This variable is automatically defined +for all X sessions in /etc/X11/Xsession.d/92xprint-xpserverlist.sh. If +required, the value for this variable can be obtained manually using +/etc/init.d/xprint, via "/etc/init.d/xprint get_xpserverlist". + +You may find it helpful to define your default printer, with, for example, + export LPDEST=lp +Unfortunately, default printers set within CUPS are not currently +recognised. + +You can test that Xprt is working by running xplsprinters. +xphelloworld prints a simple test page. Both these test programs are provided +by xprint, along with a handful of others. + + +Printing Problems +----------------- + +If you experience the problem that words are run together on the +printed page with no spaces between them, then please read +README.printing-problems for further instructions. + +This file also describes how to change the printer resolution settings if your +image on paper is printed too large or too small. + + + -- Drew Parsons , 17 Feb 2005 --- xorg-server-1.3.0.0.dfsg.orig/debian/serverminver +++ xorg-server-1.3.0.0.dfsg/debian/serverminver @@ -0,0 +1 @@ +2:1.3.0.0 --- xorg-server-1.3.0.0.dfsg.orig/debian/xprint.manpages +++ xorg-server-1.3.0.0.dfsg/debian/xprint.manpages @@ -0,0 +1 @@ +debian/tmp/usr/share/man/man1/Xprt* --- xorg-server-1.3.0.0.dfsg.orig/debian/xprint-common-overrides +++ xorg-server-1.3.0.0.dfsg/debian/xprint-common-overrides @@ -0,0 +1,2 @@ +# xfonts-encodings is not a font package +xprint-common binary: package-depends-on-an-x-font-package depends: xfonts-encodings --- xorg-server-1.3.0.0.dfsg.orig/debian/xserver-xorg-dev.install +++ xorg-server-1.3.0.0.dfsg/debian/xserver-xorg-dev.install @@ -0,0 +1,3 @@ +usr/include/xorg/* +usr/lib/pkgconfig/xorg-server.pc +usr/share/aclocal/* --- xorg-server-1.3.0.0.dfsg.orig/debian/apport_hook.py +++ xorg-server-1.3.0.0.dfsg/debian/apport_hook.py @@ -0,0 +1,61 @@ +#!/usr/bin/python + +'''Xorg Apport interface + +Copyright (C) 2007 Canonical Ltd. +Author: Bryce Harrington + +This program is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2 of the License, or (at your +option) any later version. See http://www.gnu.org/copyleft/gpl.html for +the full text of the license. +''' + +import os.path +import subprocess + +XORG_CONF = '/etc/X11/xorg.conf' +XORG_LOG = '/var/log/Xorg.0.log' + +def add_info(report): + # xorg.conf + try: + report['XorgConf'] = open(XORG_CONF).read() + except IOError: + pass + + # Xorg.0.log + try: + report['XorgLog'] = open(XORG_LOG).read() + except IOError: + pass + + try: + report['ProcVersion'] = open('/proc/version').read() + except IOError: + pass + + try: + script = subprocess.Popen(['lspci'], stdout=subprocess.PIPE) + report['LsPci'] = script.communicate()[0] + except OSError: + pass + + try: + script = subprocess.Popen(['lspci', '-vmm'], stdout=subprocess.PIPE) + report['LsPciVVM'] = script.communicate()[0] + except OSError: + pass + + try: + script = subprocess.Popen(['lsmod'], stdout=subprocess.PIPE) + report['LsMod'] = script.communicate()[0] + except OSError: + pass + +# TODO: +# +# xrandr --verbose + + --- xorg-server-1.3.0.0.dfsg.orig/debian/rules +++ xorg-server-1.3.0.0.dfsg/debian/rules @@ -0,0 +1,189 @@ +#!/usr/bin/make -f +# debian/rules for the Debian xorg-server package. +# Copyright © 2004 Scott James Remnant +# Copyright © 2005 Daniel Stone +# Copyright © 2005 David Nusinow + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +include debian/xsfbs/xsfbs.mk + +CFLAGS = -Wall -g +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + CFLAGS += -O0 +else + CFLAGS += -O2 +endif +ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) + INSTALL_PROGRAM += -s +endif + +DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH) +DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) +DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) +ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE)) + confflags += --build=$(DEB_HOST_GNU_TYPE) +else + confflags += --build=$(DEB_BUILD_GNU_TYPE) --host=$(DEB_HOST_GNU_TYPE) +endif + +INSTALL=/usr/bin/install + +# disable-static is so we don't get libfoo.a for modules. now if only we could +# kill the .las. +confflags += --disable-static \ + --enable-xorg \ + --with-mesa-source=/usr/share/mesa-source \ + --with-default-font-path="/usr/share/fonts/X11/misc,/usr/share/fonts/X11/cyrillic,/usr/share/fonts/X11/100dpi/:unscaled,/usr/share/fonts/X11/75dpi/:unscaled,/usr/share/fonts/X11/Type1,/usr/share/fonts/X11/100dpi,/usr/share/fonts/X11/75dpi,/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType" \ + --with-serverconfig-path=/etc/X11/xserver \ + --with-rgb-path=/etc/X11/rgb \ + --enable-xtrap \ + --enable-dmx \ + --enable-vfb \ + --enable-kdrive \ + --enable-xephyr \ + --disable-lbx \ + --enable-xprint \ + --enable-freetype \ + --disable-xorgconfig \ + --disable-xorgcfg \ + --with-xkb-path=/usr/share/X11/xkb \ + --with-xkb-output=/var/lib/xkb \ + --enable-xfree86-utils \ + --with-os-name="$(shell uname)" \ + --with-os-vendor="Ubuntu ($(SOURCE_NAME) $(SOURCE_VERSION))" \ + --with-int10=x86emu \ + --disable-type1 + +build: patch build-stamp +build-stamp: + dh_testdir + + mkdir -p obj-$(DEB_BUILD_GNU_TYPE)/GL + cd obj-$(DEB_BUILD_GNU_TYPE) && \ + ../configure --prefix=/usr --mandir=\$${prefix}/share/man \ + --infodir=\$${prefix}/share/info --sysconfdir=/etc \ + --localstatedir=/var $(confflags) CFLAGS="$(CFLAGS)" + cd obj-$(DEB_BUILD_GNU_TYPE) && $(MAKE) + + touch build-stamp + +clean: xsfclean + dh_testdir + dh_testroot + rm -f build-stamp + + rm -f config.cache config.log config.status + rm -f */config.cache */config.log */config.status + rm -f conftest* */conftest* + rm -rf autom4te.cache */autom4te.cache + rm -rf obj-* + # generated file, left over in the upstream tarball + # see https://bugs.freedesktop.org/show_bug.cgi?id=9277 + rm -f hw/xfree86/common/xf86Build.h + # more generated files + rm -f include/dix-config.h include/do-not-use-config.h \ + include/xorg-config.h include/xorg-server.h ylwrap + + dh_clean + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + cd obj-$(DEB_BUILD_GNU_TYPE) && $(MAKE) DESTDIR=$(CURDIR)/debian/tmp install + + # oh, yuck. + find $(CURDIR)/debian/tmp/usr/lib/xorg -type f -name '*.la' | \ + xargs rm -f + + install -m 755 debian/local/xvfb-run debian/tmp/usr/bin + install debian/local/xvfb-run.1 debian/tmp/usr/share/man/man1 + + # something funny going on with Xprinters, will have to sort it out upstream + mv debian/tmp/usr/lib/X11/xserver/C/print/Xprinters.ghostscript debian/tmp/usr/lib/X11/xserver/C/print/Xprinters + + +# stub to start building deb files, used by binary-indep and binary-arch +binary-initial: + dh_testdir + dh_testroot + +# stub to build deb files, used by binary-indep and binary-arch +# (cf. /usr/share/debhelper/dh_make/debianm/rules) +binary-deb: + dh_compress + dh_fixperms + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +# Build architecture-dependent files here. +binary-arch: build install + $(MAKE) -f debian/rules DH_OPTIONS=-a binary-initial + + dh_installdocs -a + dh_installchangelogs -a + dh_install -a --sourcedir=debian/tmp --list-missing -Xusr/share/man/man1/Xprt -Xusr/lib/X11/xserver -Xetc/X11/Xsession.d/92xprint-xpserverlist + $(INSTALL) -d $(CURDIR)/debian/xserver-xorg-dev/usr/share/xserver-xorg + $(INSTALL) -m644 $(CURDIR)/debian/videoabiver \ + $(CURDIR)/debian/xserver-xorg-dev/usr/share/xserver-xorg/videoabiver + $(INSTALL) -m644 $(CURDIR)/debian/inputabiver \ + $(CURDIR)/debian/xserver-xorg-dev/usr/share/xserver-xorg/inputabiver + $(INSTALL) -m644 $(CURDIR)/debian/serverminver \ + $(CURDIR)/debian/xserver-xorg-dev/usr/share/xserver-xorg/serverminver + $(INSTALL) -m 755 -d debian/xserver-xorg-core/usr/share/bug/xserver-xorg-core + $(INSTALL) -m 755 debian/xserver-xorg-core.bug.script debian/xserver-xorg-core/usr/share/bug/xserver-xorg-core/script + dh_installdebconf -a + dh_installman -a + $(INSTALL) -m 644 $(CURDIR)/debian/xprint-overrides $(CURDIR)/debian/xprint/usr/share/lintian/overrides/xprint + # xprint docs are linked to xprint-common + rm -rf debian/xprint/usr/share/doc/xprint + + dh_link -a + dh_strip -a --exclude=usr/lib/xorg/modules \ + --dbg-package=xserver-xorg-core + for i in $$(find debian/xserver-xorg-core/usr/lib/xorg/modules -name "lib*.so"); do \ + mkdir -p $$(dirname debian/xserver-xorg-core-dbg/usr/lib/debug/$${i#*debian/xserver-xorg-core/}) && \ + objcopy --only-keep-debug $$i debian/xserver-xorg-core-dbg/usr/lib/debug/$${i#*debian/xserver-xorg-core/} && \ + objcopy --add-gnu-debuglink=debian/xserver-xorg-core-dbg/usr/lib/debug/$${i#*debian/xserver-xorg-core/} $$i; \ + done +ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) + find debian/xserver-xorg-core/usr/lib/xorg/modules -name "lib*.so" | \ + xargs --no-run-if-empty \ + strip --strip-debug --remove-section=.note --remove-section=.comment +endif + $(MAKE) -f debian/rules DH_OPTIONS=-a binary-deb + + +# Build architecture-independent files here (xprint-common) +binary-indep: build install + $(MAKE) -f debian/rules DH_OPTIONS=-i binary-initial + dh_install -i --sourcedir=debian/tmp --list-missing -Xusr/share/man -Xusr/include/xorg -Xusr/share/aclocal -Xusr/lib/xorg/modules -Xusr/lib/pkgconfig/xorg-server.pc -Xusr/bin -XSecurityPolicy -Xvar/lib/xkb -Xusr/lib/X11/Cards -Xusr/lib/X11/Options + + $(INSTALL) -m 644 $(CURDIR)/debian/xprint-common-overrides $(CURDIR)/debian/xprint-common/usr/share/lintian/overrides/xprint-common + # split Xprint config files so font files do not land in /etc + # (for xprint-common only) + mv debian/xprint-common/usr/share/Xprint/xserver/C/print/attributes debian/xprint-common/etc/Xprint/C/print/attributes + mv debian/xprint-common/usr/share/Xprint/xserver/C/print/Xprinters debian/xprint-common/etc/Xprint/C/print/Xprinters + mv debian/xprint-common/usr/share/Xprint/xserver/C/print/ddx-config debian/xprint-common/etc/Xprint/C/print/ddx-config + mv debian/xprint-common/usr/share/Xprint/xserver/en_US/print/attributes debian/xprint-common/etc/Xprint/en_US/print/attributes + # dh_install cannot rename files, sigh + $(INSTALL) -m 644 $(CURDIR)/debian/xprint-common.default $(CURDIR)/debian/xprint-common/etc/default/xprint + dh_installinit -p xprint-common --name=xprint + + dh_installdocs -i + dh_installchangelogs -i + dh_installdebconf -i + dh_link -i + + $(MAKE) -f debian/rules DH_OPTIONS=-i binary-deb + + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install --- xorg-server-1.3.0.0.dfsg.orig/debian/xdmx.install +++ xorg-server-1.3.0.0.dfsg/debian/xdmx.install @@ -0,0 +1,2 @@ +usr/bin/Xdmx +usr/share/man/man1/Xdmx.1 --- xorg-server-1.3.0.0.dfsg.orig/debian/control +++ xorg-server-1.3.0.0.dfsg/debian/control @@ -0,0 +1,221 @@ +Source: xorg-server +Section: x11 +Priority: optional +Maintainer: Ubuntu Core Developers +XSBC-Original-Maintainer: Debian X Strike Force +Uploaders: David Nusinow , Steve Langasek , Julien Cristau , Drew Parsons +# all the Build-Depends up to x11proto-xf86-dri-dev are for the normal Xorg +# server, and common dependencies for the DIX. +# x11proto-xf86dri-dev and libdrm-dev are for DRI support for the Xorg server. +# x11proto-print-dev and libfreetype6-dev are for Xprint +# everything on is for the DMX and Xnest servers. +Build-Depends: debhelper (>= 4.0.0), pkg-config, bison, flex, + x11proto-bigreqs-dev, x11proto-composite-dev (>= 0.3), x11proto-core-dev, + x11proto-damage-dev (>= 1.1), x11proto-evie-dev, x11proto-fixes-dev (>= 4.0), + x11proto-kb-dev (>= 1.0.3), x11proto-xinerama-dev, x11proto-randr-dev (>= 1.2), + x11proto-record-dev, x11proto-render-dev, x11proto-resource-dev, + x11proto-scrnsaver-dev, x11proto-trap-dev, x11proto-video-dev, + x11proto-xcmisc-dev, x11proto-xext-dev (>= 6.9.99.0-1), + x11proto-xf86bigfont-dev, x11proto-xf86dga-dev, x11proto-xf86misc-dev, + x11proto-xf86vidmode-dev, xtrans-dev, libxau-dev (>= 1:0.99.1-1), + libxdmcp-dev (>= 1:0.99.1-1), libxfont-dev, libfontenc-dev, + libxkbfile-dev (>= 1:0.99.1-1), x11proto-xf86dri-dev, + libdrm-dev (>= 2.3.0) [!hurd-i386], + x11proto-print-dev, libfreetype6-dev, xfonts-utils, + mesa-swx11-source (>= 6.5.3), + x11proto-gl-dev (>= 1.4.8), libgl1-mesa-dev (>= 6.5.1), + libxmuu-dev (>= 1:0.99.1-1), libxext-dev (>= 1:0.99.1-1), + libx11-dev (>= 1:0.99.2-1), libxrender-dev (>= 1:0.9.0-1), + libxi-dev (>= 1:0.99.1-1), x11proto-dmx-dev, quilt, libdmx-dev (>= 1:1.0.1-1), + libxpm-dev (>= 1:3.5.3-1), libxaw7-dev (>= 1:0.99.1-1), + libxt-dev (>= 1:0.99.1-1), libxmu-dev (>= 1:0.99.1-1), + libxtst-dev (>= 1:0.99.1-1), libxres-dev (>= 1:0.99.1-1), + libxfixes-dev (>= 1:3.0.0) +Build-Conflicts: xlibs-static-dev +Standards-Version: 3.7.2.0 +XS-Vcs-Git: git://git.debian.org/git/pkg-xorg/xserver/xorg-server +XS-Vcs-Browser: http://git.debian.org/?p=pkg-xorg/xserver/xorg-server.git + +Package: xserver-xorg-core +Architecture: any +Depends: x11-common (>= 1:7.0.0), ${shlibs:Depends}, ${misc:Depends}, xserver-xorg +Recommends: xkb-data, xfonts-base +Suggests: xfonts-100dpi | xfonts-75dpi, xfonts-scalable +Conflicts: xserver-xorg (<< 6.8.2-38), xserver-xfree86 (<< 1:7.0.0), xserver-common, fglrx-driver (<< 8.37.6), xkb-data (<< 0.9) +Replaces: xserver-xorg (<< 6.8.2-38), xserver-xfree86 (<< 1:7.0.0), xserver-common +Provides: xserver +Description: X.Org X server -- core server + The X.Org X server is an X server for several architectures and operating + systems, which is derived from the XFree86 4.x series of X servers. + . + The X.Org server supports most modern graphics hardware from most vendors, + and supersedes all XFree86 X servers. + . + The X.Org server either needs fonts installed on the local host, or needs to + know of a remote hosts that provides font services (with xfs, for instance). + The former means that fonts packages are mandatory. The latter means that + font packages may be gratuitous. To err on the side of caution, install at + least the xfonts-base, xfonts-100dpi or xfonts-75dpi, and xfonts-scalable + packages. + . + More information about X.Org can be found at: + + + . + This module can be found as the module 'xserver/xorg' at + :pserver:anoncvs@cvs.freedesktop.org:/cvs/xorg + +Package: xserver-xorg-dev +Architecture: any +Depends: ${misc:Depends} +Description: X.Org X server -- development files + This package provides development files for the X.Org ('Xorg') X server. + This is not quite the same as the DDK (Driver Development Kit) from the + XFree86 4.x and X.Org 6.7, 6.8 and 6.9 series of servers; it provides + headers and a pkg-config file for drivers using autotools to build + against. + . + Unless you are developing or building a driver, you probably want + xserver-xorg and/or xserver-xorg-core instead. + . + More information about X.Org can be found at: + + + . + This module can be found as the module 'xserver/xorg' at + :pserver:anoncvs@cvs.freedesktop.org:/cvs/xorg + +Package: xdmx +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: Distributed Multihead X server + Xdmx is a proxy X server that uses one or more other X servers as its + display device(s). It provides multi-head X functionality for displays that + might be located on different machines. Xdmx functions as a front-end X server + that acts as a proxy to a set of back-end X servers. All of the visible + rendering is passed to the back-end X servers. Clients connect to the Xdmx + front-end, and everything appears as it would in a regular multi-head + configuration. If Xinerama is enabled (e.g., with +xinerama on the command + line), the clients see a single large screen. + . + More information about X.Org can be found at: + + + . + This module can be found as the module 'xserver/xorg' at + :pserver:anoncvs@cvs.freedesktop.org:/cvs/xorg + +Package: xdmx-tools +Architecture: any +Depends: xdmx, ${shlibs:Depends}, ${misc:Depends} +Replaces: xdmx (<= 2:1.1.1-10) +Description: Distributed Multihead X tools + This package provides a collection of tools used for administration of + the Xdmx server; see the xdmx package for more information. + . + More information about X.Org can be found at: + + + . + This module can be found as the module 'xserver/xorg' at + :pserver:anoncvs@cvs.freedesktop.org:/cvs/xorg + +Package: xnest +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: Nested X server + Xnest is a nested X server that simply relays all its requests to another + X server, where it runs as a client. This means that it appears as another + window in your current X session. Xnest relies upon its parent X server + for font services. + . + Use of the Xephyr X server instead of Xnest is recommended. + . + More information about X.Org can be found at: + + + . + This module can be found as the module 'xserver/xorg' at + :pserver:anoncvs@cvs.freedesktop.org:/cvs/xorg + +Package: xvfb +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, xauth, xfonts-base +Recommends: xbase-clients +Description: Virtual Framebuffer 'fake' X server + Xvfb provides an X server that can run on machines with no display hardware + and no physical input devices. It emulates a dumb framebuffer using virtual + memory. The primary use of this server was intended to be server testing, + but other novel uses for it have been found, including testing clients + against unusual depths and screen configurations, doing batch processing with + Xvfb as a background rendering engine, load testing, as an aid to porting the + X server to a new platform, and providing an unobtrusive way to run + applications that don't really need an X server but insist on having one + anyway. + . + This package also contains a convenience script called xvfb-run which + simplifies the automated execution of X clients in a virtual server + environment. This convenience script requires the use of the xauth + program. + . + More information about X.Org can be found at: + + + . + This module can be found as the module 'xserver/xorg' at + :pserver:anoncvs@cvs.freedesktop.org:/cvs/xorg + +Package: xserver-xephyr +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Recommends: xbase-clients +Description: Next Generation Nested X Server + xserver-xephyr is an X server that can be run inside another X server, + much like xnest. xephyr though, is based on the kdrive X server, and as a + result it supports newer extensions than xnest, including render and + composite. + +Package: xprint +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, xprint-common, libxfont1 (>= 1:1.1) +Recommends: xprint-utils +Conflicts: xprt (<= 4.3.0.dfsg.1-10) +Description: Xprint - the X11 print system (binary) + Xprint is an advanced printing system which enables X11 applications + to use devices like printers, FAX or create documents in formats like + PostScript, PDF, PCL, etc. + . + This package provides Xprt, the Xprint server compiled from + xprint.mozdev.org, an X.org subproject. Xprint provides superior support + for printing from mozilla, including non-latin characters and MathML. + TrueType fonts are supported. + . + Xprint uses ttf2pt1 internally for some font support. + +Package: xprint-common +Architecture: all +Depends: xbase-clients, xfonts-encodings, x11-common (>= 1:7.0.12), ${shlibs:Depends}, ${misc:Depends} +Recommends: xprint, xfonts-base +Conflicts: xprt-common +Replaces: xprt-common +Description: Xprint - the X11 print system (configuration files) + Xprint is an advanced printing system which enables X11 applications + to use devices like printers, FAX or create documents in formats like + PostScript, PDF, PCL, etc. + . + This package provides the configuration and postscript definition files + required to run Xprt, the Xprint server. Xprt is provided by xprint. + +Package: xserver-xorg-core-dbg +Architecture: any +Depends: xserver-xorg-core (= ${Source-Version}) +Priority: extra +Description: Xorg - the X.Org X server (debugging symbols) + The X.Org X server is an X server for several architectures and operating + systems, which is derived from the XFree86 4.x series of X servers. + . + The X.Org server supports most modern graphics hardware from most vendors, + and supersedes all XFree86 X servers. + . + This package provides debugging symbols for the Xorg X server and associated + modules. --- xorg-server-1.3.0.0.dfsg.orig/debian/xdmx-tools.install +++ xorg-server-1.3.0.0.dfsg/debian/xdmx-tools.install @@ -0,0 +1,7 @@ +usr/bin/dmx* +usr/bin/vdltodmx +usr/bin/xdmx +usr/bin/xdmxconfig +usr/share/man/man1/vdltodmx.1 +usr/share/man/man1/dmxtodmx.1 +usr/share/man/man1/xdmxconfig.1 --- xorg-server-1.3.0.0.dfsg.orig/debian/xnest.install +++ xorg-server-1.3.0.0.dfsg/debian/xnest.install @@ -0,0 +1,2 @@ +usr/bin/Xnest +usr/share/man/man1/Xnest.1 --- xorg-server-1.3.0.0.dfsg.orig/debian/po/fr.po +++ xorg-server-1.3.0.0.dfsg/debian/po/fr.po @@ -0,0 +1,137 @@ +# translation of fr.po to French +# +# Translators, if you are not familiar with the PO format, gettext +# documentation is worth reading, especially sections dedicated to +# this format, e.g. by running: +# info -n '(gettext)PO Files' +# info -n '(gettext)Header Entry' +# +# Some information specific to po-debconf are available at +# /usr/share/doc/po-debconf/README-trans +# or http://www.debian.org/intl/l10n/po-debconf/README-trans +# +# Developers do not need to manually edit POT or PO files. +# +msgid "" +msgstr "" +"Project-Id-Version: xprint-xprintorg 0.0.8.cvs20030508-3\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-16 11:10+1100\n" +"PO-Revision-Date: 2005-03-15 11:04+0100\n" +"Last-Translator: Christian Perrier \n" +"Language-Team: French \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-15\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.9.1\n" + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "Default printer resolution" +msgstr "Résolution par défaut de l'imprimante :" + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "" +"By default Xprint assumes a printer resolution of 600dpi. This should be " +"fine for the majority of printers today." +msgstr "" +"Par défaut, XPrint utilise une résolution d'impression de 600 ppp (points " +"par pouce ou « dpi »). Cette valeur convient pour la majorité des " +"imprimantes actuelles." + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "" +"On certain 1200dpi printers, however, the image might appear squashed in the " +"corner of the page, or it might be blown up too large on 300dpi printers. If " +"you are experiencing these kinds of printing problems, you may want to set " +"the default printer resolution to a more appropriate value. See /usr/share/" +"doc/xprint-common/README.printing-problems.gz for more details." +msgstr "" +"Cependant, un document préparé en 600 ppp apparaîtra trop gros sur une " +"imprimante dont la résolution est de 300 ppp ou trop petit (un quart de page " +"occupée) sur une imprimante à 1200 ppp. Si vous rencontrez ce type de " +"problèmes, vous devriez choisir une valeur plus adaptée comme résolution " +"d'impression. Veuillez consulter le fichier /usr/share/doc/xprint-common/" +"README.printing-problems.gz pour plus d'informations." + +#, fuzzy +#~ msgid "" +#~ "If you are experiencing these kinds of printing problems, you may want to " +#~ "set the default printer resolution to a different value." +#~ msgstr "" +#~ "Si vous rencontrez ce type de problèmes, vous devriez régler la " +#~ "résolution par défaut de l'imprimante à la valeur appropriée." + +#~ msgid "" +#~ "This value is written into the *default-printer-resolution variable in /" +#~ "etc/Xprint/C/print/attributes/document. If you have a more complex setup " +#~ "with different printers, each of different resolutions, then you will " +#~ "need to manually create an entry for each of them separately." +#~ msgstr "" +#~ "Cette valeur sera placée dans la variable *default-printer-resolution " +#~ "dans le fichier /etc/Xprint/C/print/attributes/document. Si vous utilisez " +#~ "plusieurs imprimantes, avec des résolutions différentes, vous devrez " +#~ "alors créer vous-même une entrée différente pour chacune d'elles." + +#~ msgid "" +#~ "The default printer resolution given here should be a number only, " +#~ "without the \"dpi\". That is, type \"300\" or \"1200\" (for example), or " +#~ "just press enter to accept the default value." +#~ msgstr "" +#~ "Veuillez indiquer un nombre, sans l'unité (« ppp »), c'est-à-dire " +#~ "simplement « 300 » ou « 1200 », ou accepter la valeur par défaut." + +#~ msgid "Remove old config files in /etc/Xprint?" +#~ msgstr "" +#~ "Supprimer les fichiers de configuration obsolètes dans /etc/Xprint ?" + +#~ msgid "" +#~ "Configuration files for Xprint, found in /etc/Xprint, are now defined for " +#~ "different locales, so the default paper is set to A4 for most locales, " +#~ "but set to letter paper for the United States (en_US)." +#~ msgstr "" +#~ "Les fichiers de configuration de XPrint, dans /etc/Xprint, sont désormais " +#~ "dépendants des jeux de paramètres régionaux. Ainsi, la taille par défaut " +#~ "du papier est « A4 » pour la majorité des jeux de paramètres régionaux. " +#~ "Elle est en revanche réglée sur « letter » pour les États-Unis d'Amérique " +#~ "(en_US)." + +#~ msgid "" +#~ "The previous config files in /etc/Xprint should be removed. If you have " +#~ "made any local changes to them, those changes should be placed in the new " +#~ "locations." +#~ msgstr "" +#~ "Les anciens fichiers de configuration situés dans /etc/Xprint doivent " +#~ "être effacés. Si vous les avez modifiés, vous devez reporter ces " +#~ "changements dans les nouveaux fichiers." + +#~ msgid "" +#~ "The deprecated config files are:\n" +#~ " - /etc/Xprint/attributes (moved to /etc/Xprint/C/print/" +#~ "attributes\n" +#~ " or /etc/Xprint/en_US/print/attributes)\n" +#~ " - /etc/Xprint/ddx-config (moved to /etc/Xprint/C/print/ddx-" +#~ "config)\n" +#~ " - /etc/Xprint/SecurityPolicy (no longer used)" +#~ msgstr "" +#~ "Les fichiers de configuration obsolètes sont les suivants :\n" +#~ " - /etc/Xprint/attributes déplacé vers\n" +#~ " /etc/Xprint/C/print/attributes ou\n" +#~ " /etc/Xprint/en_US/print/attributes ;\n" +#~ " - /etc/Xprint/ddx-config déplacé vers\n" +#~ " /etc/Xprint/C/print/ddx-config ;\n" +#~ " - /etc/Xprint/SecurityPolicy désormais inutilisé." + +#~ msgid "" +#~ "I recommend you remove these deprecated files, unless you have made " +#~ "specific changes to them, in which case you should move your customised " +#~ "files to their new locations." +#~ msgstr "" +#~ "Il est conseillé d'effacer ces fichiers obsolètes, sauf si vous les avez " +#~ "modifiés. Dans ce cas, vous devriez les déplacer vers leur nouvel " +#~ "emplacement." --- xorg-server-1.3.0.0.dfsg.orig/debian/po/pt_BR.po +++ xorg-server-1.3.0.0.dfsg/debian/po/pt_BR.po @@ -0,0 +1,137 @@ +# +# Translators, if you are not familiar with the PO format, gettext +# documentation is worth reading, especially sections dedicated to +# this format, e.g. by running: +# info -n '(gettext)PO Files' +# info -n '(gettext)Header Entry' +# +# Some information specific to po-debconf are available at +# /usr/share/doc/po-debconf/README-trans +# or http://www.debian.org/intl/l10n/po-debconf/README-trans +# +# Developers do not need to manually edit POT or PO files. +# +msgid "" +msgstr "" +"Project-Id-Version: xprint\n" +"Report-Msgid-Bugs-To: debian-l10n-portuguese@lists.debian.org\n" +"POT-Creation-Date: 2005-03-15 17:50+1100\n" +"PO-Revision-Date: 2005-03-26 09:55-0300\n" +"Last-Translator: André Luís Lopes \n" +"Language-Team: Debian-BR Project \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "Default printer resolution" +msgstr "Resolução padrão de impressoras" + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "" +"By default Xprint assumes a printer resolution of 600dpi. This should be " +"fine for the majority of printers today." +msgstr "" +"Por padrão, o Xprint assume uma resolução de impressão de 600dpi. Essa " +"resolução é adequada para a maioria das impressoras atuais." + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "" +"On certain 1200dpi printers, however, the image might appear squashed in " +"the corner of the page, or it might be blown up too large on 300dpi " +"printers. If you are experiencing these kinds of printing problems, you may " +"want to set the default printer resolution to a more appropriate value. " +"See /usr/share/doc/xprint-common/README.printing-problems.gz for more " +"details." +msgstr "" +"Em certas impressoras com resolução de 1200dpi, porém, imagens podem " +"aparecer achatadas no canto da página ou podem parecer muito grandes " +"em impressoras 300dpi. Caso você esteja tendo esses tipos de problemas " +"de impressão, você pode desejar configurar a resolução padrão da " +"impressora para um valor mais apropriado. Consulte o arquivo " +"/usr/share/doc/xprint-common/README.printing-problems.gz para maiores " +"detalhes." + +#, fuzzy +#~ msgid "" +#~ "If you are experiencing these kinds of printing problems, you may want to " +#~ "set the default printer resolution to a different value." +#~ msgstr "" +#~ "Caso você esteja passando por esses tipos de problemas de impressão, você " +#~ "pode desejar definir a resolução padrão da impressão para um valor que " +#~ "sua impressora possa utilizar." + +#~ msgid "" +#~ "This value is written into the *default-printer-resolution variable in /" +#~ "etc/Xprint/C/print/attributes/document. If you have a more complex setup " +#~ "with different printers, each of different resolutions, then you will " +#~ "need to manually create an entry for each of them separately." +#~ msgstr "" +#~ "Esse valor é escrito na variável *default-printer-resolution em /etc/" +#~ "Xprint/C/print/attributes/document. Caso você possua uma configuração " +#~ "mais complexa com diferentes impressoras, cada uma com diferentes " +#~ "resoluções, você precisará criar manualmente uma entrada para cada uma " +#~ "delas separadamente." + +#~ msgid "" +#~ "The default printer resolution given here should be a number only, " +#~ "without the \"dpi\". That is, type \"300\" or \"1200\" (for example), or " +#~ "just press enter to accept the default value." +#~ msgstr "" +#~ "A resolução padrão da impressora informada aqui deverá ser somente um " +#~ "número, sem o \"dpi\". Isto é, informe \"300\" ou \"1200\" (por exemplo) " +#~ "ou somente pressione Enter para aceitar o valor padrão." + +#~ msgid "Remove old config files in /etc/Xprint?" +#~ msgstr "Remover antifgos arquivos de configuração em /etc/Xprint ?" + +#~ msgid "" +#~ "Configuration files for Xprint, found in /etc/Xprint, are now defined for " +#~ "different locales, so the default paper is set to A4 for most locales, " +#~ "but set to letter paper for the United States (en_US)." +#~ msgstr "" +#~ "Os arquivos de configuração para o Xprint, encontrados em /etc/Xprint, " +#~ "são agora definidos para diferentes locales, portanto o papel padrão está " +#~ "definido como A4 para a maioria dos locales, mas definido papel letra " +#~ "para os Estados Unidos (en_US)." + +#~ msgid "" +#~ "The previous config files in /etc/Xprint should be removed. If you have " +#~ "made any local changes to them, those changes should be placed in the new " +#~ "locations." +#~ msgstr "" +#~ "Os arquivos de configurações anteriores em /etc/Xprint deverão ser " +#~ "removidos. Caso você tenha feito quaisquer mudanças locais nesses " +#~ "arquivos, essas mudanças deverão ser colocadas nos novos locais." + +#~ msgid "" +#~ "The deprecated config files are:\n" +#~ " - /etc/Xprint/attributes (moved to /etc/Xprint/C/print/" +#~ "attributes\n" +#~ " or /etc/Xprint/en_US/print/attributes)\n" +#~ " - /etc/Xprint/ddx-config (moved to /etc/Xprint/C/print/ddx-" +#~ "config)\n" +#~ " - /etc/Xprint/SecurityPolicy (no longer used)" +#~ msgstr "" +#~ "Os arquivos de configuração obsoletos são :\n" +#~ " - /etc/Xprint/attributes (movido para /etc/Xprint/C/print/" +#~ "attributes\n" +#~ " ou /etc/Xprint/en_US/print/attributes)\n" +#~ " - /etc/Xprint/ddx-config (movido para /etc/Xprint/C/print/ddx-" +#~ "config)\n" +#~ " - /etc/Xprint/SecurityPolicy (não é mais usado)" + +#~ msgid "" +#~ "I recommend you remove these deprecated files, unless you have made " +#~ "specific changes to them, in which case you should move your customised " +#~ "files to their new locations." +#~ msgstr "" +#~ "É recomendado que você remova esses arquivos obsoletos, a menos que você " +#~ "tenha feito mudanças específicas nos mesmos. Nese caso você deverá mover " +#~ "seus arquivos personalizados para seus novos locais." --- xorg-server-1.3.0.0.dfsg.orig/debian/po/sv.po +++ xorg-server-1.3.0.0.dfsg/debian/po/sv.po @@ -0,0 +1,51 @@ +# Translators, if you are not familiar with the PO format, gettext +# documentation is worth reading, especially sections dedicated to +# this format, e.g. by running: +# info -n '(gettext)PO Files' +# info -n '(gettext)Header Entry' +# Some information specific to po-debconf are available at +# /usr/share/doc/po-debconf/README-trans +# or http://www.debian.org/intl/l10n/po-debconf/README-trans +# Developers do not need to manually edit POT or PO files. +# , fuzzy +# +# +msgid "" +msgstr "" +"Project-Id-Version: xprint 1:0.1.0.alpha1-12\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-16 11:10+1100\n" +"PO-Revision-Date: 2005-09-29 03:16-0700\n" +"Last-Translator: Daniel Nylander \n" +"Language-Team: Swedish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit" + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "Default printer resolution" +msgstr "Standard skrivarupplösning" + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "" +"By default Xprint assumes a printer resolution of 600dpi. This should be " +"fine for the majority of printers today." +msgstr "" +"Standard tror Xprint att skrivarens upplösning är 600dpi. Detta borde fungera fint för de flesta skrivare idag." + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "" +"On certain 1200dpi printers, however, the image might appear squashed in the " +"corner of the page, or it might be blown up too large on 300dpi printers. If " +"you are experiencing these kinds of printing problems, you may want to set " +"the default printer resolution to a more appropriate value. See /usr/share/" +"doc/xprint-common/README.printing-problems.gz for more details." +msgstr "" +"På vissa 1200dpi skrivare kan dock bilden verka hoptryckt i ett hörn av sidan eller att den blir förstorad på 300dpi skrivare. Om du upplever problem som dessa kan du sätta standard skrivarens upplösning till ett mer lämpligt värde. Se /usr/share/doc/xprint-common/README.printing-problems.gz för mer information." + --- xorg-server-1.3.0.0.dfsg.orig/debian/po/templates.pot +++ xorg-server-1.3.0.0.dfsg/debian/po/templates.pot @@ -0,0 +1,50 @@ +# +# Translators, if you are not familiar with the PO format, gettext +# documentation is worth reading, especially sections dedicated to +# this format, e.g. by running: +# info -n '(gettext)PO Files' +# info -n '(gettext)Header Entry' +# +# Some information specific to po-debconf are available at +# /usr/share/doc/po-debconf/README-trans +# or http://www.debian.org/intl/l10n/po-debconf/README-trans +# +# Developers do not need to manually edit POT or PO files. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-16 11:10+1100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "Default printer resolution" +msgstr "" + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "" +"By default Xprint assumes a printer resolution of 600dpi. This should be " +"fine for the majority of printers today." +msgstr "" + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "" +"On certain 1200dpi printers, however, the image might appear squashed in the " +"corner of the page, or it might be blown up too large on 300dpi printers. If " +"you are experiencing these kinds of printing problems, you may want to set " +"the default printer resolution to a more appropriate value. See /usr/share/" +"doc/xprint-common/README.printing-problems.gz for more details." +msgstr "" --- xorg-server-1.3.0.0.dfsg.orig/debian/po/ja.po +++ xorg-server-1.3.0.0.dfsg/debian/po/ja.po @@ -0,0 +1,58 @@ +# +# Translators, if you are not familiar with the PO format, gettext +# documentation is worth reading, especially sections dedicated to +# this format, e.g. by running: +# info -n '(gettext)PO Files' +# info -n '(gettext)Header Entry' +# +# Some information specific to po-debconf are available at +# /usr/share/doc/po-debconf/README-trans +# or http://www.debian.org/intl/l10n/po-debconf/README-trans +# +# Developers do not need to manually edit POT or PO files. +# +# +msgid "" +msgstr "" +"Project-Id-Version: xprint \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-15 17:50+1100\n" +"PO-Revision-Date: 2005-03-26 16:42+0900\n" +"Last-Translator: Hideki Yamane \n" +"Language-Team: Japanese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=EUC-JP\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "Default printer resolution" +msgstr "¥Ç¥Õ¥©¥ë¥È¤Ç¤Î¥×¥ê¥ó¥¿²òÁüÅ٤ˤĤ¤¤Æ" + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "" +"By default Xprint assumes a printer resolution of 600dpi. This should be " +"fine for the majority of printers today." +msgstr "" +"Xprint ¤Ï¡¢¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¥×¥ê¥ó¥¿¤Î²òÁüÅÙ¤ò 600dpi ¤È¤·¤Æ¤¤¤Þ¤¹¡£¸½ºß¤Î¥×¥ê¥ó" +"¥¿¤Ç¤Ï¡¢¤Û¤È¤ó¤É¤³¤ÎÃͤÇÎɤ¤¤Ç¤·¤ç¤¦¡£" + + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "" +"On certain 1200dpi printers, however, the image might appear squashed in the " +"corner of the page, or it might be blown up too large on 300dpi printers. If " +"you are experiencing these kinds of printing problems, you may want to set " +"the default printer resolution to a more appropriate value. See /usr/share/" +"doc/xprint-common/README.printing-problems.gz for more details." +msgstr "" +"¤·¤«¤·¡¢1200dpi ¸ÇÄê¤Î¥×¥ê¥ó¥¿¤Ç¤Ï°õºþ¤µ¤ì¤¿²èÁü¤Ï¥Ú¡¼¥¸¤Î¶ù¤ËµÍ¤á¤Æ°õºþ¤µ¤ì¤Æ" +"¤·¤Þ¤¤¤Þ¤¹¤·¡¢300dpi ¤Î¥×¥ê¥ó¥¿¤Ç¤ÏÂ礭¤¯¤Ê¤ê¤¹¤®¤Æ¤·¤Þ¤¤¤Þ¤¹¡£¤³¤ÎÍͤʰõºþ²òÁü" +"ÅÙ¤ÎÌäÂê¤ËÁø¶ø¤·¤¿¾ì¹ç¡¢¥×¥ê¥ó¥¿¤Î²òÁüÅÙ¤ò¤è¤êŬÀÚ¤ÊÃͤËÊѹ¹¤·¤¿¤¯¤Ê¤ë¤Ç¤·¤ç¤¦¡£¡£" +"¾ÜºÙ¤Ë¤Ä¤¤¤Æ¤Ï¡¢/usr/share/doc/xprint-common/README.printing-problems.gz ¤ò»²¾È" +"¤·¤Æ¤¯¤À¤µ¤¤¡£" --- xorg-server-1.3.0.0.dfsg.orig/debian/po/ru.po +++ xorg-server-1.3.0.0.dfsg/debian/po/ru.po @@ -0,0 +1,58 @@ +# translation of xprint_1.0.2-1.ru.po to Russian +# +# Translators, if you are not familiar with the PO format, gettext +# documentation is worth reading, especially sections dedicated to +# this format, e.g. by running: +# info -n '(gettext)PO Files' +# info -n '(gettext)Header Entry' +# Some information specific to po-debconf are available at +# /usr/share/doc/po-debconf/README-trans +# or http://www.debian.org/intl/l10n/po-debconf/README-trans# +# Developers do not need to manually edit POT or PO files. +# Yuri Kozlov , 2006. +# +msgid "" +msgstr "" +"Project-Id-Version: xprint_1.0.2-1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-16 11:10+1100\n" +"PO-Revision-Date: 2006-05-31 22:14+0300\n" +"Last-Translator: Yuri Kozlov \n" +"Language-Team: Russian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.9.1\n" + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "Default printer resolution" +msgstr "Разрешение печати Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð½Ñ‚ÐµÑ€Ð° по умолчанию" + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "" +"By default Xprint assumes a printer resolution of 600dpi. This should be " +"fine for the majority of printers today." +msgstr "" +"По умолчанию, Xprint предполагает, что принтер имеет разрешение 600dpi. " +"Ðа ÑегоднÑшний день Ñто значение правильно Ð´Ð»Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð½Ñтва принтеров." + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "" +"On certain 1200dpi printers, however, the image might appear squashed in the " +"corner of the page, or it might be blown up too large on 300dpi printers. If " +"you are experiencing these kinds of printing problems, you may want to set " +"the default printer resolution to a more appropriate value. See /usr/share/" +"doc/xprint-common/README.printing-problems.gz for more details." +msgstr "" +"Однако, на качеÑтвенных принтерах Ñо 1200dpi, изображение может казатьÑÑ " +"Ñжатым по углам Ñтраницы, или может быть Ñлишком огромным на принтерах Ñ " +"300dpi. ЕÑли у Ð²Ð°Ñ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ»Ð¸ подобные проблемы Ñ Ð¿ÐµÑ‡Ð°Ñ‚ÑŒÑŽ, уÑтановите разрешение " +"принтера по умолчанию в более подходÑщее значение. Подробней Ñмотрите в /usr/share/" +"doc/xprint-common/README.printing-problems.gz." + --- xorg-server-1.3.0.0.dfsg.orig/debian/po/gl.po +++ xorg-server-1.3.0.0.dfsg/debian/po/gl.po @@ -0,0 +1,47 @@ +# Galician translation of xprint's debconf templates +# This file is distributed under the same license as the xprint package. +# Jacobo Tarrio , 2007. +# +msgid "" +msgstr "" +"Project-Id-Version: xprint\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-13 20:34+0100\n" +"PO-Revision-Date: 2007-01-24 10:21+0100\n" +"Last-Translator: Jacobo Tarrio \n" +"Language-Team: Galician \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: string +#. Description +#: ../xprint-common.templates:1001 +msgid "Default printer resolution" +msgstr "Resolución de impresión por defecto" + +#. Type: string +#. Description +#: ../xprint-common.templates:1001 +msgid "" +"By default Xprint assumes a printer resolution of 600dpi. This should be " +"fine for the majority of printers today." +msgstr "" +"Por defecto, Xprint supón unha resolución de impresión de 600ppp. Este valor " +"é axeitado para a maioría das impresoras actuais." + +#. Type: string +#. Description +#: ../xprint-common.templates:1001 +msgid "" +"On certain 1200dpi printers, however, the image might appear squashed in the " +"corner of the page, or it might be blown up too large on 300dpi printers. If " +"you are experiencing these kinds of printing problems, you may want to set " +"the default printer resolution to a more appropriate value. See /usr/share/" +"doc/xprint-common/README.printing-problems.gz for more details." +msgstr "" +"Nembargantes, nalgunhas impresoras de 1200ppp a imaxe pode aparecer " +"aplastada nunha esquina da páxina, ou pode aparecer grande de máis en " +"impresoras de 300ppp. Se nota ese tipo de problemas pode cambiar a " +"resolución de impresión a un valor máis axeitado. Consulte /usr/share/doc/" +"xprint-common/README.printing-problems.gz para ter máis detalles." --- xorg-server-1.3.0.0.dfsg.orig/debian/po/POTFILES.in +++ xorg-server-1.3.0.0.dfsg/debian/po/POTFILES.in @@ -0,0 +1 @@ +[type: gettext/rfc822deb] xprint-common.templates --- xorg-server-1.3.0.0.dfsg.orig/debian/po/pt.po +++ xorg-server-1.3.0.0.dfsg/debian/po/pt.po @@ -0,0 +1,50 @@ +# Portuguese translation of xprint debconf messages. +# This file is distributed under the same license as the xprint package. +# Manuel Padilha , 2006. +# +# +msgid "" +msgstr "" +"Project-Id-Version: xprint 1:1.0.2-1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2006-09-09 14:08-0600\n" +"PO-Revision-Date: 2006-09-10 21:49+0100\n" +"Last-Translator: Manuel Padilha \n" +"Language-Team: Native Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit" + +#. Type: string +#. Description +#: ../xprint-common.templates:1001 +msgid "Default printer resolution" +msgstr "Resolução por omissão da impressora" + +#. Type: string +#. Description +#: ../xprint-common.templates:1001 +msgid "" +"By default Xprint assumes a printer resolution of 600dpi. This should be " +"fine for the majority of printers today." +msgstr "" +"O Xprint assume que a resolução por omissão das impressoras é 600dpi. Este " +"valor deve ser correcto para a maior parte das impressoras." + +#. Type: string +#. Description +#: ../xprint-common.templates:1001 +msgid "" +"On certain 1200dpi printers, however, the image might appear squashed in the " +"corner of the page, or it might be blown up too large on 300dpi printers. If " +"you are experiencing these kinds of printing problems, you may want to set " +"the default printer resolution to a more appropriate value. See /usr/share/" +"doc/xprint-common/README.printing-problems.gz for more details." +msgstr "" +"Contudo, em certas impressoras de 1200dpi a imagem pode aparecer esmagada " +"contra o canto da página, ou - em impressoras de 300dpi, exageradamente " +"ampliada. Se estiver a passar por este tipo de dificuldades pode experimentar " +"mudar o valor da resolução por omissão das impressoras para um valor mais " +"apropriado. Pode obter mais informação em /usr/share/doc/xprint-common/" +"README.printing-problems.gz." + --- xorg-server-1.3.0.0.dfsg.orig/debian/po/cs.po +++ xorg-server-1.3.0.0.dfsg/debian/po/cs.po @@ -0,0 +1,56 @@ +# +# Translators, if you are not familiar with the PO format, gettext +# documentation is worth reading, especially sections dedicated to +# this format, e.g. by running: +# info -n '(gettext)PO Files' +# info -n '(gettext)Header Entry' +# +# Some information specific to po-debconf are available at +# /usr/share/doc/po-debconf/README-trans +# or http://www.debian.org/intl/l10n/po-debconf/README-trans +# +# Developers do not need to manually edit POT or PO files. +# +msgid "" +msgstr "" +"Project-Id-Version: xprint-xprintorg\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-16 11:10+1100\n" +"PO-Revision-Date: 2005-03-15 12:32+0100\n" +"Last-Translator: Miroslav Kure \n" +"Language-Team: Czech \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-2\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "Default printer resolution" +msgstr "Výchozí rozli¹ení tiskárny" + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "" +"By default Xprint assumes a printer resolution of 600dpi. This should be " +"fine for the majority of printers today." +msgstr "" +"Xprint implicitnì pøedpokládá rozli¹ení tiskárny 600dpi. To by mìlo " +"vyhovovat vìt¹inì dne¹ních tiskáren." + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "" +"On certain 1200dpi printers, however, the image might appear squashed in the " +"corner of the page, or it might be blown up too large on 300dpi printers. If " +"you are experiencing these kinds of printing problems, you may want to set " +"the default printer resolution to a more appropriate value. See /usr/share/" +"doc/xprint-common/README.printing-problems.gz for more details." +msgstr "" +"Na nìkterých 1200dpi tiskárnách mù¾e obraz vypadat pøíli¹ malý, zatímco na " +"300dpi tiskárnách se mù¾e obraz vytisknout pøíli¹ velký. Pokud zaznamenáte " +"popsané problémy, mìli byste nastavit implicitní rozli¹ení tiskárny na " +"vhodnìj¹í hodnotu. Podrobnosti naleznete v souboru /usr/share/doc/xprint-" +"common/README.printing-problems.gz." --- xorg-server-1.3.0.0.dfsg.orig/debian/po/nl.po +++ xorg-server-1.3.0.0.dfsg/debian/po/nl.po @@ -0,0 +1,59 @@ +# Translation of xprint_1:0.1.0.alpha1-13_templates.po to dutch +# +# Translators, if you are not familiar with the PO format, gettext +# documentation is worth reading, especially sections dedicated to +# this format, e.g. by running: +# info -n '(gettext)PO Files' +# info -n '(gettext)Header Entry' +# Some information specific to po-debconf are available at +# /usr/share/doc/po-debconf/README-trans +# or http://www.debian.org/intl/l10n/po-debconf/README-trans# +# Developers do not need to manually edit POT or PO files. +# +msgid "" +msgstr "" +"Project-Id-Version: xprint_1:0.1.0.alpha1-13_nl\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-16 11:10+1100\n" +"PO-Revision-Date: 2006-04-13 18:20\n" +"Last-Translator: Kurt De Bree \n" +"Language-Team: Nederlands \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.10.2\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "Default printer resolution" +msgstr "Standaard printerresolutie:" + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "" +"By default Xprint assumes a printer resolution of 600dpi. This should be " +"fine for the majority of printers today." +msgstr "" +"Standaard veronderstelt Xprint een printerresolutie van 600dpi. Dit zou " +"voor het merendeel van de hedendaagse printers goed moeten zijn." + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "" +"On certain 1200dpi printers, however, the image might appear squashed in the " +"corner of the page, or it might be blown up too large on 300dpi printers. If " +"you are experiencing these kinds of printing problems, you may want to set " +"the default printer resolution to a more appropriate value. See /usr/share/" +"doc/xprint-common/README.printing-problems.gz for more details." +msgstr "" +"Op bepaalde 1200dpi-printers zou het beeld echter samengedrukt kunnen " +"lijken in de hoek van de pagina, terwijl het op 300dpi-printers te groot " +"zou kunnen worden opgeblazen. Als u dergelijke afdrukproblemen ervaart, kunt u " +"de standaard printerresolutie naar een meer passende waarde veranderen. Zie " +"/usr/share/doc/xprint-common/README.printing-problems.gz voor meer " +"gedetailleerde informatie." + --- xorg-server-1.3.0.0.dfsg.orig/debian/po/da.po +++ xorg-server-1.3.0.0.dfsg/debian/po/da.po @@ -0,0 +1,47 @@ +# Danish translation of the Debconf po-template for xprint-xprintorg. +# Morten Bo Johansen , 2004, 2005. +msgid "" +msgstr "" +"Project-Id-Version: xprint-xprintorg_0.1.0.alpha1-8_da.po\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-15 17:50+1100\n" +"PO-Revision-Date: 2005-03-17 01:15+0100\n" +"Last-Translator: Morten Bo Johansen \n" +"Language-Team: Danish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "Default printer resolution" +msgstr "Printerens standardopløsning" + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "" +"By default Xprint assumes a printer resolution of 600dpi. This should be " +"fine for the majority of printers today." +msgstr "" +"Xprint bruger en opløsning på 600dpi som standard. Dette skulle være " +"passende for de fleste nyere printere." + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "" +"On certain 1200dpi printers, however, the image might appear squashed in " +"the corner of the page, or it might be blown up too large on 300dpi " +"printers. If you are experiencing these kinds of printing problems, you may " +"want to set the default printer resolution to a more appropriate value. " +"See /usr/share/doc/xprint-common/README.printing-problems.gz for more " +"details." +msgstr "" +"På visse printere med en opløsning på 1200dpi kan billedet forekomme " +"sammenpresset i hjørnerne, eller det kan virke overforstørret på printere " +"med en opløsning på 300dpi. Hvis du oplever sådanne udskrivningsproblemer, " +"vil det være en god ide at sætte printerens opløsning til en mere passende " +"værdi. Se /usr/share/doc/xprint-common/README.printing-problems.gz for flere " +"detaljer." --- xorg-server-1.3.0.0.dfsg.orig/debian/po/de.po +++ xorg-server-1.3.0.0.dfsg/debian/po/de.po @@ -0,0 +1,60 @@ +# +# Translators, if you are not familiar with the PO format, gettext +# documentation is worth reading, especially sections dedicated to +# this format, e.g. by running: +# info -n '(gettext)PO Files' +# info -n '(gettext)Header Entry' +# Some information specific to po-debconf are available at +# /usr/share/doc/po-debconf/README-trans +# or http://www.debian.org/intl/l10n/po-debconf/README-trans# +# Developers do not need to manually edit POT or PO files. +# Erik Schanze , 2004, 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: de\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-15 17:50+1100\n" +"PO-Revision-Date: 2005-03-24 23:12+0100\n" +"Last-Translator: Erik Schanze \n" +"Language-Team: German \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.9.1\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "Default printer resolution" +msgstr "Standard-Druckerauflösung" + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "" +"By default Xprint assumes a printer resolution of 600dpi. This should be " +"fine for the majority of printers today." +msgstr "" +"Standardmäßig verwendet Xprint eine Druckerauflösung von 600 DPI. Das " +"funktioniert heutzutage mit den meisten Druckern." + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "" +"On certain 1200dpi printers, however, the image might appear squashed in " +"the corner of the page, or it might be blown up too large on 300dpi " +"printers. If you are experiencing these kinds of printing problems, you may " +"want to set the default printer resolution to a more appropriate value. " +"See /usr/share/doc/xprint-common/README.printing-problems.gz for more " +"details." +msgstr "" +"Trotzdem erscheint der Ausdruck bei bestimmten 1200-DPI-Druckern in die Ecke " +"der Seite gequetscht oder er wird auf 300-DPI-Druckern zu groß dargestellt. " +"Wenn bei Ihnen diese Druck-Probleme auftreten, sollten Sie die " +"Standard-Druckerauflösung auf einen besser passenden Wert setzen. " +"Einzelheiten finden Sie in der Datei " +"/usr/share/doc/xprint-common/README.printing-problems.gz." + --- xorg-server-1.3.0.0.dfsg.orig/debian/po/vi.po +++ xorg-server-1.3.0.0.dfsg/debian/po/vi.po @@ -0,0 +1,42 @@ +# Vietnamese translation for XPrint. +# Copyright © 2005 Free Software Foundation, Inc. +# Clytie Siddall , 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: xprint 1/0.1.0.alpha1-11\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-16 11:10+1100\n" +"PO-Revision-Date: 2005-08-21 20:45+0930\n" +"Last-Translator: Clytie Siddall \n" +"Language-Team: Vietnamese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0\n" +"X-Generator: LocFactoryEditor 1.2.2\n" + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "Default printer resolution" +msgstr "Äá»™ phân giải máy in mặc định" + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "" +"By default Xprint assumes a printer resolution of 600dpi. This should be " +"fine for the majority of printers today." +msgstr "Mặc định là trình Xprint giả sá»­ Ä‘á»™ phân giải là 600 chấm/insÆ¡. Äây nên hữu ích cho phần lá»›n máy in hiện thá»i." + +#. Type: string +#. Description +#: ../xprint-common.templates:4 +msgid "" +"On certain 1200dpi printers, however, the image might appear squashed in the " +"corner of the page, or it might be blown up too large on 300dpi printers. If " +"you are experiencing these kinds of printing problems, you may want to set " +"the default printer resolution to a more appropriate value. See /usr/share/" +"doc/xprint-common/README.printing-problems.gz for more details." +msgstr "Tuy nhiên, trên má»™t số máy in 1200 chấm/insÆ¡ nào đó, có lẽ ảnh sẽ hình nhÆ° bị nén vào góc trang, hoặc nó có lẽ bị bung quá lá»›n trên máy in 300 chấm/insÆ¡. Nếu bạn gặp khó khăn in nhÆ° thế, bạn có thể muốn đặt Ä‘á»™ phân giải máy in mặc định thành má»™t giá trị thích hợp vá»›i máy in bạn. Hãy xem tập tin Äá»c Äi để tìm chi tiết." --- xorg-server-1.3.0.0.dfsg.orig/debian/po/es.po +++ xorg-server-1.3.0.0.dfsg/debian/po/es.po @@ -0,0 +1,40 @@ +# +# +# +msgid "" +msgstr "" +"Project-Id-Version: xprint-es\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2006-12-03 04:35+0100\n" +"PO-Revision-Date: 2006-12-13 23:22+0100\n" +"Last-Translator: Fernando Cerezal López \n" +"Language-Team: Spanish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit" + +#. Type: string +#. Description +#: ../xprint-common.templates:1001 +msgid "Default printer resolution" +msgstr "Resolución predeterminada de la impresora" + +#. Type: string +#. Description +#: ../xprint-common.templates:1001 +msgid "" +"By default Xprint assumes a printer resolution of 600dpi. This should be " +"fine for the majority of printers today." +msgstr "Por omisión, Xprint asume una resolución de impresión de 600 ppp. Esto debería estar bien para la mayoría de las impresoras actuales." + +#. Type: string +#. Description +#: ../xprint-common.templates:1001 +msgid "" +"On certain 1200dpi printers, however, the image might appear squashed in the " +"corner of the page, or it might be blown up too large on 300dpi printers. If " +"you are experiencing these kinds of printing problems, you may want to set " +"the default printer resolution to a more appropriate value. See /usr/share/" +"doc/xprint-common/README.printing-problems.gz for more details." +msgstr "Sin embargo, en ciertas impresoras de 1200 ppp, la imagen puede parecer aplastada en la esquina de la página, o puede parecer demasiado hinchada en impresoras de 300 ppp. Si experimenta este tipo de problemas de impresión, puede que quiera establecer la resolución predeterminada de la impresora a un valor más apropiado. Véase «/usr/share/doc/xprint-common/README.printing-problems.gz» para obtener más detalles." + --- xorg-server-1.3.0.0.dfsg.orig/debian/xprint-common.dirs +++ xorg-server-1.3.0.0.dfsg/debian/xprint-common.dirs @@ -0,0 +1,4 @@ +etc/Xprint/C/print +etc/Xprint/en_US/print +etc/default +usr/share/lintian/overrides --- xorg-server-1.3.0.0.dfsg.orig/debian/changelog +++ xorg-server-1.3.0.0.dfsg/debian/changelog @@ -0,0 +1,1790 @@ +xorg-server (2:1.3.0.0.dfsg-12ubuntu8.4) gutsy-security; urgency=low + + * Fix multiple security issues: + + CVE-2008-2360 - RENDER Extension heap buffer overflow + + CVE-2008-2361 - RENDER Extension crash + + CVE-2008-2362 - RENDER Extension memory corruption + + CVE-2008-1379 - MIT-SHM arbitrary memory read + + CVE-2008-1377 - RECORD and Security extensions memory corruption + + -- Bryce Harrington Wed, 11 Jun 2008 11:43:26 -0700 + +xorg-server (2:1.3.0.0.dfsg-12ubuntu8.3) gutsy-security; urgency=low + + * SECURITY UPDATE: multiple memory corruption flaws. + * Re-applied security patches from 2:1.3.0.0.dfsg-12ubuntu8.1. + * Updated fix_CVE-2007-6429.patch: upstream fixes for bbp < 8 + crash regressions. + * References + http://gitweb.freedesktop.org/?p=xorg/xserver.git;a=commitdiff;h=e9fa7c1c88a8130a48f772c92b186b8b777986b5 + + -- Kees Cook Fri, 18 Jan 2008 11:59:21 -0800 + +xorg-server (2:1.3.0.0.dfsg-12ubuntu8.2) gutsy-security; urgency=low + + * Revert previous security patch since it causes regressions. + (LP: #183969) + + -- Martin Pitt Fri, 18 Jan 2008 15:59:30 +0000 + +xorg-server (2:1.3.0.0.dfsg-12ubuntu8.1) gutsy-security; urgency=low + + * SECURITY UPDATE: multiple memory corruption flaws. + * Added fix_CVE-2007-5958.patch: upstream fix from Matthieu Herrb. + * Added fix_CVE-2007-5760.patch: backported upstream fixes + (bbde5b62a137ba726a747b838d81e92d72c1b42b) for XFree86 Misc extension out + of bounds array index. + * Added fix_CVE-2007-6427.patch: backported upstream fixes + (dd5e0f5cd5f3a87fee86d99c073ffa7cf89b0a27) for Xinput extension memory + corruption. + * Added fix_CVE-2007-6428.patch: backported upstream fixes + (7dc1717ff0f96b99271a912b8948dfce5164d5ad) for TOG-cup extension memory + corruption. + * Added fix_CVE-2007-6429.patch: backported upstream fixes + (6de61f82728df22ea01f9659df6581b87f33f11d) for MIT-SHM and EVI extensions + integer overflows. + * Added fix_CVE-2008-0006.patch: backported upstream fixes + (8e133d96740d010a4fd969a8188e6e71fb2cafe2) for PCF Font parser buffer + overflow. + + -- Kees Cook Thu, 17 Jan 2008 11:20:17 -0800 + +xorg-server (2:1.3.0.0.dfsg-12ubuntu8) gutsy; urgency=low + + * Add 145_glx_visuals_bound_check.patch to fix issue where mesa + incorrectly counts its visuals and can free too many of them during + video mode changes (VT switch, restart, hibernate, etc.) such as + when running Compiz. (closes LP: #127101) + + -- Bryce Harrington Fri, 28 Sep 2007 15:48:08 -0700 + +xorg-server (2:1.3.0.0.dfsg-12ubuntu7) gutsy; urgency=low + + * Drop 143_fedora_xserver-1.3.0-randr12-config-hack.patch + as it causes failure to detect proper resolution on some intel + hardware. (closes LP: #144956) + + -- Bryce Harrington Tue, 25 Sep 2007 14:42:59 -0700 + +xorg-server (2:1.3.0.0.dfsg-12ubuntu6) gutsy; urgency=low + + * Drop 214_Bug_9680-_Remove_bogus_blank_length_limiting_in_xf86SetModeCrtc.patch + as it is causing black bars to appear on screen for i810 users. + (closes LP: #137604 + several dupes) + + -- Bryce Harrington Thu, 20 Sep 2007 14:35:54 -0700 + +xorg-server (2:1.3.0.0.dfsg-12ubuntu5) gutsy; urgency=low + + [ Kees Cook ] + * debian/patches/132_composite-no-clipping.diff: Adjusted WindowRec + structure order and RedirectDraw logic to avoid nvidia crashes + (fixes LP: #130325). + * debian/patches/100_security_fdo-bug-7447.diff: Composite used for + pixmap population on redirect. [CVE-2007-4730] + + -- Bryce Harrington Tue, 18 Sep 2007 17:20:14 -0700 + +xorg-server (2:1.3.0.0.dfsg-12ubuntu4) gutsy; urgency=low + + * debian/patches/133_psb_auto.patch: Add automatic detection of + Poulsbo hardware when running without a Device definition. + * Added some cherry-picked patches from fedora: + - 134_fedorda_xorg-x11-server-1.1.1-vt-activate-is-a-terrible-api.patch: + Fixes race condition where someone does a VT_ACTIVATE + between another ACTIVATE/WAITACTIVE by adding a fail. + (Potentially might address Ubuntu bugs 134478 and/or 134982) + - 135_fedora_xorg-x11-server-1.1.1-xkb-in-xnest.patch: Fixes issue when + starting a session in an xnest nest environment as a different user, + where keyboard map does not get preserved. Removes + NO_HW_ONLY_EXTS check to address this issue. (RedHat bug 193431; + Potentially may address Ubuntu bug 44846) + - 136_fedora_xserver-1.2.0-honor-displaysize.patch: Fixes issue if monitor + width and height have been specified, xserver would override them + with the hsize/vsize detected from DDC. + - 137_fedora_xserver-1.2.0-vfprintf.patch: Fixes typo 'vfprinf' + - 138_fedora_xserver-1.3.0-default-dpi.patch: Changes default dpi to 100. + (Addresses Ubuntu bugs 118745, 107320, many others...) + - 139_fedora_xserver-1.3.0-document-fontpath-correctly.patch: Fixes + document fontpaths shown in the man page. + - 140_fedora_xserver-1.3.0-domain-obiwan.patch: Fixes longstanding bug in + domain support. + - 141_fedora_xserver-1.3.0-edid-quirk-backports.patch: Adds quirk for + Samsung SyncMaster 225BW. + - 142_fedora_xserver-1.3.0-no-pseudocolor-composite.patch: Composite on + 8bpp pseudocolor root windows appears to fail, so just disable it + on anything pseudocolor for safety. + - 143_fedora_xserver-1.3.0-randr12-config-hack.patch: Adds check to use + the screen's xrandr modes if a preferred mode was not specified. + - 144_fedora_xserver-1.3.0-xnest-exposures.patch: Only collect xnest + exposures for xexposes with non-zero height and width. + + -- Bryce Harrington Fri, 7 Sep 2007 14:23:23 -0700 + +xorg-server (2:1.3.0.0.dfsg-12ubuntu3) gutsy; urgency=low + + * Added some cherry-picked patches from xserver 1.3.99: + - 202_Add_quirk_for_Acer_AL1706_monitor_to_force_60hz_refresh.patch: + The Acer AL1706 monitor reports support for 75hz via EDID, but + does not sync when this range is given, so force it to 60hz. + - 205_Bug_10770-_Inputdevs_isnt_a_valid_config_file_keyword.patch: + Fixes typo in config file parser. + - 208_Bug_6620-_Fixed_a_missing_else_in_ATIPseudoDMAInit.patch: + Fixes issue where registers were written twice on R200, sometimes + also putting bad values in atis->cce_pri_size. + - 214_Bug_9680-_Remove_bogus_blank_length_limiting_in_xf86SetModeCrtc.patch: + Fixes situation where when a specific mode is requested by monitor + or user, xorg would tweak it to something incorrect. + - 216_Bug_9041-_Check_the_return_code_in_xf86MapDomainMemory.patch: + Fixes issue where mmap return value was being ignored and failing + to issue fatal error as it should. + - 221_ExaOffscreenMarkUsed-_Dont_crash_when_theres_no_offscreen_memory.patch: + Fixes crash when there is no offscreen memory for EXA. + - 222_Fix_a_crash_when_rotating_the_screen.patch: + Fixes crash when rotating screen with xrandr. + - 223_Fix_bug_8871-scrolling_corruption_with_a_compositing_manager.patch: + Fixes scrolling corruption with composite due to incorrectly + generated GraphicsExposes. + - 224_Fix_calculations_in_x86_emulator_for_the_long_long_case_Andreas_Schwab.patch: + Fixes long long multiplication when in x86 emulator. + - 227_Fix_sync_polarity_on_Samsung_SyncMaster_205BW_monitor.patch: + Adds quirk for Samsung SyncMaster 205BW + - 230_In___glXCreateARGBConfig_insert_the_new_GL_mode_at_the__end__of_the_linked_list.patch: + Fixes insertion order of linked list that can cause GLX clients to + fail when attempting to use the last GLX mode/visual. + - 231_In_dmxBackendMouGetInfo_initialize_the_info-minval_maxval_arrays_to_the_size_of_the_backend_display.patch: + Fixes potential issue in X input where axis clipping code in + GetPointerEvents() constrains the pointer's coordinate range to a + max of 0, causing the mouse to not move. + - 234_Reapply_patch_to_fix_AMD_CPU_detection.patch: + Fixes AMD Geode CPU detection. + - 236_Syncmaster_226_monitor_needs_60Hz_refresh_10545.patch: + Adds quirk for Samsung SyncMaster 226BW. + - 238_Update_pci.ids_to_2007-07-16_snapshot.patch: + Updates our pci ids to support more current hardware. + Remove nvidia ids in extrapci.ids that are now in pci.ids. + Add nvidia ids to extrapci.ids that are in xf86-video-nv but not pci.ids + - 241_XFree86-_Treat_evdev_and_vmmouse_as_mouse_drivers_bug_10512_10559.patch: + Fix issue where a default mouse device gets automatically added + when an evdev or vmmouse section has already been specified. + - 243_exaDriverInit-_Fail_if_pScreenInfo_or_a_member_of_it_is_invalid.patch: + Fix crash in EXA when pScreenInfo or a member of it is invalid. + - 244_fix_an_occasional_crash_in_GetWindowName_bug-_9798.patch: + Fixes crash by adding check of XmbTextPropertyToTextList()'s + return code. + - 245_regenerated_to_fix_bug_10371.patch: + Fixes issue where if DRI is disabled, GL_MAX_TEXTURE_COORDS_ARB + value is not returned correctly from glGetIntegerv(). + + -- Bryce Harrington Fri, 31 Aug 2007 18:36:22 -0700 + +xorg-server (2:1.3.0.0.dfsg-12ubuntu2) gutsy; urgency=low + + * Don't send a configuration change event just because somebody's pressed + a brightness key + + -- Matthew Garrett Sun, 26 Aug 2007 16:17:15 +0100 + +xorg-server (2:1.3.0.0.dfsg-12ubuntu1) gutsy; urgency=low + + * Merge from debian unstable, remaining changes: + - debian/control: + + set Conflicts: xkb-data (<< 0.9), since xkb-path is + different from previous releases + + do not Conflict with xserver-xorg-video + + xvfb Depends on xauth, xfonts-base + + Set Maintainer to Ubuntu Core Developers + - debian/rules: + + --with-os-vendor=Ubuntu + - debian/xserver-xorg-core.install: + + Add ioport, pcitweak, scanpci scripts & man pages + - debian/patches: + + 102_ubuntu_sharevts_load_cpu.patch: + close console fd only when ShareVTs + + 104_fedora_init_origins_fix.patch: + multihead initialization + + 106_ubuntu_fpic_libxf86config.patch: + Add -fPIC to makefiles for xfree86/parser + + 107_fedora_dont_backfill_bg_none.patch + 110_fedora_no_move_damage.patch, + 114_fedora_no_composite_in_xnest.patch, + 120_fedora_disable_offscreen_pixmaps.patch: + further aiglx support + + 119_ubuntu_enable_composite.diff: + enable composite + + 121_only_switch_vt_when_active.diff: + Add a check to prevent the X server from changing the VT when killing + GDM from the console. + + 123_no_composite_for_xvfb_run.patch: + use "-extension Composite" to fix xvfb-run crashing + + 125_glx_remove-stray__GLinterface.diff, + 126_glxproxy_remove-stray__GLinterface.diff, + 127_mesa-6.5.3-compat.diff: + Patches needed to build against newer Mesa. + + 132_composite-no-clipping.diff: + Change the semantics of manual-redirect Composite windows so that + they do not clip sibling or parent drawing. Needed by hildon-desktop + to prevent home applets from clipping. + - debian/apport.py: Add apport hook for automatically attaching + files useful for debugging X crashes: Xorg.0.log, xorg.conf, + lsmod, lspci, and /proc/version + + -- Timo Aaltonen Tue, 21 Aug 2007 22:01:38 +0300 + +xorg-server (2:1.3.0.0.dfsg-12) unstable; urgency=low + + [ Brice Goglin ] + * Add 51_xkb-and-loathing.diff to fix a hang in OpenOffice.org + when opening menus, closes: #433131. + * Install the exa(4) and fbdevhw(4) manpages. + + [ Julien Cristau ] + * Update the xorg.conf(5) manpage to get documentation for RandR 1.2 + options: + + 07_stolen_from_HEAD_xorgconf_manpage.diff: new patch; + + 07_xorgconf_manpage_overhaul.diff dropped; + + 34_xorg.conf_man_typos.patch dropped; + + 05_module_defaults.diff, 94_use_default_font_path.diff: dropped hunks + applying to hw/xfree86/doc/man/xorg.conf.man.pre. + * Add patch 11_define_XFree86Server.diff: XFree86Server needs to be defined + in xorg-server.h and exported to drivers. + * Add patches 125_glx_remove-stray__GLinterface.diff + 126_glxproxy_remove-stray__GLinterface.diff and 127_mesa-6.5.3-compat.diff + to build with mesa >= 6.5.3, and bump build-dependency on + mesa-swx11-source. + * Include the Debian package version in OSVENDOR to make it appear in the + X log. + + -- Julien Cristau Thu, 09 Aug 2007 16:32:14 +0200 + +xorg-server (2:1.3.0.0.dfsg-11) unstable; urgency=low + + * Yet another alpha build fix: also remove the asm/pci.h include from + os-support/linux/lnx_axp.c. Include "lnx.h" and instead. + + -- Julien Cristau Sat, 14 Jul 2007 20:09:35 +0200 + +xorg-server (2:1.3.0.0.dfsg-10) unstable; urgency=medium + + * hw/xfree86/common/compiler.h and declare incompatible + prototypes for outb and friends, so change the patch from -9 to not + #include and rely on declarations in lnx.h itself for the + IOBASE_* macros. + + -- Julien Cristau Sat, 14 Jul 2007 18:06:14 +0200 + +xorg-server (2:1.3.0.0.dfsg-9) unstable; urgency=medium + + * Include instead of in + hw/xfree86/os-support/linux/lnx.h, as the latter isn't exported to + userspace anymore; fixes FTBFS on alpha. Thanks, Steve Langasek! + + -- Julien Cristau Sat, 14 Jul 2007 12:17:10 +0200 + +xorg-server (2:1.3.0.0.dfsg-8) unstable; urgency=medium + + * Medium-urgency upload to get the fix for #428794 in testing faster, + hopefully. + + [ Brice Goglin ] + * Add 47_fbdevhw_magic_numbers.diff: patch by Adam Jackson to keep the + fbdev2xfree_timing() function from changing the pixel clock value if the + fbdev driver claims that it is 0. + + [ Julien Cristau ] + * Don't build the type1 font module. + * Add patch by Alan Coopersmith to map (case-insensitively) the old + "keyboard" input driver to "kbd" (addresses: #428794). I'm not + reassigning the bug to xserver-xorg-core for now so as not to break + testing by letting xserver-xorg-input-keyboard transition before the fixed + xorg-server. + + -- Julien Cristau Sat, 14 Jul 2007 01:48:20 +0200 + +xorg-server (2:1.3.0.0.dfsg-7) unstable; urgency=low + + [ Brice Goglin ] + * Add 40_consolidate_portPriv_pDraw_assignments.diff to avoid a crash + in xf86XVReputVideo (closes: #424899, #431655). + * Add 41_vbe_filter_less.diff to not reject VESA modes early since + xf86ValidateModes should handle them just fine (closes: #424684). + * Add 42_only_run_special_key_behaviours_on_non-XKB.diff to fix special + keys in Xephyr (closes: #415025). + * Add 43_xephyr_crash_at_exit.diff to avoid crashing Xephyr when first + client disconnect (closes: #420421). + + -- Julien Cristau Wed, 04 Jul 2007 23:42:40 +0200 + +xorg-server (2:1.3.0.0.dfsg-6ubuntu3) gutsy; urgency=low + + * debian/patches/series: + - Re-enable 132_composite-no-clipping.diff with fix from upstream + + -- Bryce Harrington Wed, 25 Jul 2007 16:39:29 -0700 + +xorg-server (2:1.3.0.0.dfsg-6ubuntu2) gutsy; urgency=low + + * debian/patches/series: + - don't apply 132_composite-no-clipping.diff for now, it doesn't work + correctly when using compiz + + -- Sebastien Bacher Fri, 13 Jul 2007 17:03:42 +0100 + +xorg-server (2:1.3.0.0.dfsg-6ubuntu1) gutsy; urgency=low + + * Merge from Debian unstable. Remaining Ubuntu changes: + - debian/control: + + set Conflicts: xkb-data (<< 0.9), since xkb-path is + different from previous releases + + do not Conflict with xserver-xorg-video + + xvfb Depends on xauth, xfonts-base + + Set Maintainer to Ubuntu Core Developers + - debian/rules: + + build using -fno-stack-protector + + --with-os-vendor=Ubuntu + - debian/xserver-xorg-core.install: + + Add ioport, pcitweak, scanpci scripts & man pages + - debian/patches: + + 102_ubuntu_sharevts_load_cpu.patch: + close console fd only when ShareVTs + + 104_fedora_init_origins_fix.patch: + multihead initialization + + 106_ubuntu_fpic_libxf86config.patch: + Add -fPIC to makefiles for xfree86/parser + + 107_fedora_dont_backfill_bg_none.patch: + Re-enable to see if it helps with performance regressions. + + 108_fedora_gl_include_inferiors.patch, + 110_fedora_no_move_damage.patch, + 114_fedora_no_composite_in_xnest.patch: + further aiglx support + + 119_ubuntu_enable_composite.diff: + enable composite + + 120_fedora_disable_offscreen_pixmaps.patch: + update to the latest version from Fedora (rev. 1.6, was 1.1) + Despite being a hack, it works and is needed for compositing + managers to work properly. + + 121_only_switch_vt_when_active.diff: + Add a check to prevent the X server from changing the VT when killing + GDM from the console. + + 123_no_composite_for_xvfb_run.patch: + use "-extension Composite" to fix xvfb-run crashing + - 125_glx_remove-stray__GLinterface.diff, + 126_glxproxy_remove-stray__GLinterface.diff, + 127_mesa-6.5.3-compat.diff: + Mesa 6.5.3 build support + * debian/apport.py: Add apport hook for automatically attaching + files useful for debugging X crashes: Xorg.0.log, xorg.conf, + lsmod, lspci, and /proc/version + * debian/patches/132_composite-no-clipping.diff: Change the + semantics of manual-redirect Composite windows so that they do not + clip sibling or parent drawing. Needed by hildon-desktop to prevent + home applets from clipping. + + -- Bryce Harrington Mon, 2 Jul 2007 12:47:44 -0700 + +xorg-server (2:1.3.0.0.dfsg-6) unstable; urgency=low + + * Change fglrx conflict to << 8.37.6 (closes: #424975). + + -- Julien Cristau Fri, 01 Jun 2007 14:58:39 +0200 + +xorg-server (2:1.3.0.0.dfsg-5) unstable; urgency=low + + [ Brice Goglin ] + * Add 24_hurd_ioperm_fix.diff to fix xf86Enable/DisableIO on Hurd with + recent GNU Mach. Thanks Samuel Thibault! + * Add 06_use_proc_instead_of_sysfs_for_pci_domains.diff since sysfs-based + PCI management code is broken at least on sparc and powerpc. + Closes: #422077, #422095. Thanks to Jim Watson for testing! + * Install the Xephyr README, closes: #395888. + * Update 07_xorgconf_manpage_overhaul.diff to drop the reference to the + xorg.conf example which we do not install since Xserver 1.3 does automatic + configuration, the manpage is very well documented, and we generate a + config file during installation. Closes: #222932. + * Fix warning in /etc/init.d/xprint when /usr/lib/X11/fonts does not exist. + Closes: #422352. Thanks Cristian Ionescu-Idbohrn! + * Pull upstream commit 9c80eda826448822328bb678a7d284cc43fffb17 to disable + RandR's fake xinerama geometry when there's more than one protocol screen + (closes: #420679). + + [ Julien Cristau ] + * Add patch to make sure that the ramdac symbols are present in the server + and drivers can use them (closes: #423129). + * xserver-xorg-core Conflicts with fglrx-driver, which broke with 1.3. + We'll need to make this versioned (or drop it) when fglrx is fixed. + + -- Julien Cristau Wed, 16 May 2007 15:17:55 +0200 + +xorg-server (2:1.3.0.0.dfsg-4ubuntu2) gutsy; urgency=low + + * Build-Depend on mesa 6.5.3 + * Apply Mandriva patches to build against mesa 6.5.3 + - 125_glx_remove-stray__GLinterface.diff + - 126_glxproxy_remove-stray__GLinterface.diff + - 127_mesa-6.5.3-compat.diff + + -- Kyle McMartin Sat, 26 May 2007 18:12:35 +0000 + +xorg-server (2:1.3.0.0.dfsg-4ubuntu1) gutsy; urgency=low + + * Merge from Debian unstable. Remaining Ubuntu changes: + - debian/control: + + set Conflicts: xkb-data (<< 0.9), since xkb-path is + different from previous releases + + do not Conflict with xserver-xorg-video + + xvfb Depends on xauth, xfonts-base + + Set Maintainer to Ubuntu Core Developers + - debian/rules: + + build using -fno-stack-protector + + --with-os-vendor=Ubuntu + - debian/xserver-xorg-core.install: + + Add ioport, pcitweak, scanpci scripts & man pages + - debian/patches: + + 102_ubuntu_sharevts_load_cpu.patch: + close console fd only when ShareVTs + + 104_fedora_init_origins_fix.patch: + multihead initialization + + 106_ubuntu_fpic_libxf86config.patch: + Add -fPIC to makefiles for xfree86/parser + + 107_fedora_dont_backfill_bg_none.patch: + Re-enable to see if it helps with performance regressions. + + 108_fedora_gl_include_inferiors.patch, + 110_fedora_no_move_damage.patch, + 114_fedora_no_composite_in_xnest.patch: + further aiglx support + + 119_ubuntu_enable_composite.diff: + enable composite + + 120_fedora_disable_offscreen_pixmaps.patch: + update to the latest version from Fedora (rev. 1.6, was 1.1) + Despite being a hack, it works and is needed for compositing + managers to work properly. + + 121_only_switch_vt_when_active.diff: + Add a check to prevent the X server from changing the VT when killing + GDM from the console. + + 123_no_composite_for_xvfb_run.patch: + use "-extension Composite" to fix xvfb-run crashing + * Drop 124_fix-pdripriv_null_deref.patch. Already fixed in GLX code. + See upstream FDO bug #8537 + + -- Bryce Harrington Mon, 14 May 2007 16:40:03 -0700 + +xorg-server (2:1.3.0.0.dfsg-4) unstable; urgency=low + + * Cherry-pick patch from upstream git to fix security issue in the Xrender + extension: malicious clients can cause a division by zero in the server + (closes: #422936). Reference: CVE-2007-2437. Thanks, Micah Anderson! + + -- Julien Cristau Wed, 09 May 2007 02:11:08 +0200 + +xorg-server (2:1.3.0.0.dfsg-3) unstable; urgency=low + + * Include 94_use_default_font_path.diff. This patch is like Eugene's patch + to always look in the default font path from the past, but now we provide + an option to disable looking in the default font path at runtime. This + will allow people to specify additional font paths in their xorg.conf + without losing their current paths. This will also help avoid people + having ye olde "fixed font" problem. + * Fix compilation warnings for 05_module_defaults.diff. Previously the patch + used a generic pointer for the options record, but now we use the actual + XF86OptionsPtr type. + + -- David Nusinow Thu, 26 Apr 2007 22:39:52 -0400 + +xorg-server (2:1.3.0.0.dfsg-2) unstable; urgency=low + + * Add Brice Goglin's fix for 05_module_defaults.diff, so that it also works + when there is no module section at all. Thanks to Michel Dänzer for + helping also. + + -- David Nusinow Sat, 21 Apr 2007 09:34:12 -0400 + +xorg-server (2:1.3.0.0.dfsg-1) unstable; urgency=low + + * Upload to unstable. + * Add XS-Vcs-* to debian/control. + * Remove non-free file hw/xfree86/doc/README.DRI from the upstream tarball. + * Bump serverminver to 2:1.3.0.0. + + -- Julien Cristau Fri, 20 Apr 2007 07:54:14 +0200 + +xorg-server (2:1.3.0.0-1) experimental; urgency=low + + * New upstream release + + -- David Nusinow Thu, 19 Apr 2007 22:27:05 -0400 + +xorg-server (2:1.2.99.905-3) experimental; urgency=low + + [ Julien Cristau ] + * xvfb now Recommends: xfonts-base (closes: #314598). + + [ David Nusinow ] + * Add 05_module_defaults.diff. This provides default modules loading + capabilities for the server that may be overrided easily. Previously the + server would load a set of default modules, but only if none were + specified in the xorg.conf, or if you didn't have a xorg.conf at all. This + patch provides a default set and you can add only the "Load" instructions + to xorg.conf that you want without losing the defaults. Similarly, if you + don't want to load a module that's loaded by default, you can add + "Disable modulename" to your xorg.conf (see man xorg.conf in this release + for details). See upstream bug #10541 for more. + + -- David Nusinow Sun, 15 Apr 2007 11:17:45 -0400 + +xorg-server (2:1.2.99.905-2) experimental; urgency=low + + * Install the cvt and gtf utilities and their manpages (closes: #414792). + * Build the xserver-xorg-core-dbg package, which contains debugging symbols + for Xorg and /usr/lib/xorg/modules/**/*.so + + -- Julien Cristau Mon, 09 Apr 2007 20:38:22 +0200 + +xorg-server (2:1.2.99.905-1) experimental; urgency=low + + * New upstream release candidate. + + includes fix for CVE-2007-1003: XC-MISC Extension ProcXCMiscGetXIDList() + Memory Corruption. + + -- Julien Cristau Fri, 06 Apr 2007 12:05:40 +0200 + +xorg-server (2:1.2.99.903-1) experimental; urgency=low + + [ Drew Parsons ] + * Add exclude entries to dh_install in debian/rules. + + [ Julien Cristau ] + * Prepare packaging to ship debugging symbols for xserver-xorg-core in + xserver-xorg-core-dbg, but leave it commented out so we can get rc3 in the + archive first. + * New upstream release candidate. + + bump serverminver to 2:1.2.99.903. + + -- Julien Cristau Tue, 27 Mar 2007 07:33:29 +0200 + +xorg-server (2:1.2.99.902-1) experimental; urgency=low + + [ Drew Parsons ] + * Bring xprint back into the xorg fold. + - include existing patches: + - 91_ttf2pt1 allows Xprint to use ttf2pt1 for Type1 font handling + (but extract and apply manually the patch to + hw/xprint/ps/Makefile.am so it may be applied by autoconf) + - 91_ttf2pt1_updates brings ttf2pt1 into the modern X11R7.1 world + - 92_xprint-security-holes-fix.patch places PS/PDF file output + into the user's home directory (~/Xprintjobs), more secure than + a shared /tmp/Xprintjobs + - 93_spooltodir_check_file_exists ensures output filenames are + less than 256 characters in length + - 93_xprint_fonts_fix released references to font names after use. + - enable freetype support for Xprint. + - add descriptions to debian/control and Build-Dependency on + x11proto-print-dev + * Run autoreconf to update changes to hw/xprint/ps/Makefile.am. + + [ Brice Goglin ] + * Apply patch from adrian@smop.co.uk to our xvfb-run wrapper + to check whether Xvfb started ok and fix its cleanup + (closes: #351042). + + [ Julien Cristau ] + * New upstream release candidate. + * Bump serverminver to 2:1.2.99.902. + * Drop patch 42_build_int10_submodules.diff, and use x86emu on all + architectures instead (closes: #410879). + * Refresh patches: + + 12_security_policy_in_etc.diff + + 21_glx_align_fixes.patch + + 23_kfreebsd_support.diff + * Delete a few files generated by configure on clean, since they seem to + have been included in the tarball. + + -- Julien Cristau Thu, 15 Mar 2007 04:28:00 +0100 + +xorg-server (2:1.2.99.901-1) experimental; urgency=low + + * New upstream release candidate. + + Remove patches 24 (hurd support), 35 (randr byteswap) and 43 (set damage + version), applied upstream. + + Bump build-dep on x11proto-randr-dev to >= 1.2, and on + x11proto-damage-dev to >= 1.1. + + -- Julien Cristau Wed, 7 Mar 2007 19:58:53 +0100 + +xorg-server (2:1.2.0-6) experimental; urgency=low + + * Set videoabiver to 1.0, same as in xorg-server 1.1. + + -- Julien Cristau Fri, 2 Mar 2007 16:38:12 +0100 + +xorg-server (2:1.2.0-5) experimental; urgency=low + + * Add input ABI versioning metadata. Rename serverabiver file to + videoabiver, and add inputabiver. Bump serverminver to 2:1.2.0-5 to deal + with this change. + + -- David Nusinow Thu, 1 Mar 2007 22:09:45 -0500 + +xorg-server (2:1.2.0-4) experimental; urgency=low + + [ Julien Cristau ] + * Don't strip modules when DEB_BUILD_OPTIONS contains nostrip. Thanks, + Cyril Brulebois! + + [ David Nusinow ] + * Move serverabiver file to serverminver. Use serverabiver to store the + actual video ABI version number (1.1 right now). This will allow drivers + to automatically generate their Provides: xserver-xorg-video-* line when + built against a particular server version. The rename of the files + is to better denote what they actually are. + * Bump the serverminver to 2:1.2.0-4 because of this change + + -- David Nusinow Wed, 21 Feb 2007 21:53:51 -0500 + +xorg-server (2:1.2.0-3ubuntu8) feisty; urgency=low + + * SECURITY UPDATE: arbitrary code execution with root privs via integer + overflows in MISC-XC. + * Add debian/patches/131_misc_xc_overflows.patch: upstream fixes. + * References + CVE-2007-1003 + + -- Kees Cook Thu, 29 Mar 2007 17:46:44 -0700 + +xorg-server (2:1.2.0-3ubuntu7) feisty; urgency=low + + * debian/patches/120_fedora_disable_offscreen_pixmaps.patch + - update to the latest version from Fedora (rev. 1.6, was 1.1) + + -- Timo Aaltonen Fri, 30 Mar 2007 10:39:01 +0300 + +xorg-server (2:1.2.0-3ubuntu6) feisty; urgency=low + + * debian/{rules,xsfbs/xsfbs.mk,serverminver,inputabiver} + - Import changes from current debian package, needed for the new intel + driver. + - Rename serverabiver to videoabiver, value 1.0. + - Set serverminver as this version. + * debian/patches: + 129_remove_extra_i2c_bittimeout.patch + 130_slow_down_ddc_i2c.patch + - Patches from server-1.3 branch, which make probing the monitor more + robust. + + -- Timo Aaltonen Thu, 29 Mar 2007 00:56:17 +0300 + +xorg-server (2:1.2.0-3ubuntu5) feisty; urgency=low + + * debian/patches/120_fedora_disable_offscreen_pixmaps.diff + - Re-enable. Despite being a hack, it works and is needed for compositing + managers to work properly. (LP: #89189) + + -- Timo Aaltonen Tue, 27 Mar 2007 02:33:31 +0300 + +xorg-server (2:1.2.0-3ubuntu4) feisty; urgency=low + + * debian/patches/107_fedora_dont_backfill_bg_none.patch: + - Re-enable to see if it helps with performance regressions. + * debian/patches/127_check_for_clientgone.patch: + - A fix from upstream. (LP: #60288) + * debian/patches/128_fix_client_privates_leak.patch + - Plug a memory leak. (LP: #92882) + * debian/rules + - Fix a typo in --with-default-font-path. + + -- Timo Aaltonen Sat, 17 Mar 2007 00:38:09 +0200 + +xorg-server (2:1.2.0-3ubuntu3) feisty; urgency=low + + * debian/patches: + - Rename 019_ubuntu_enable_composite.diff to 119_* so that it is in line + with the rest of our patches + - Re-add 126_debian_always_use_default_font_path.diff. This was dropped + by Debian but needed by us since we still have legacy fontpaths in + old configurations, so new paths need to be appended to the list. + + -- Timo Aaltonen Wed, 28 Feb 2007 11:54:18 +0200 + +xorg-server (2:1.2.0-3ubuntu2) feisty; urgency=low + + * debian/control: + - xvfb Depends on xauth, xfonts-base + + -- Sebastien Bacher Tue, 27 Feb 2007 23:31:06 +0100 + +xorg-server (2:1.2.0-3ubuntu1) feisty; urgency=low + + * Don't drop 42_build_int10_submodules.diff, it's useful + * 019_ubuntu_enable_composite.diff: + - enable composite + * debian/control: + - fixed Maintainer email + * debian/xserver-xorg-core.install: + - list ioport, gtf, pcitweak and scanpci + and manpages for scanpci, gtf, pcitweak + + [ Timo Aaltonen ] + * Merge with Debian, remaining changes: + - debian/rules: + + build using -fno-stack-protector + + --with-os-vendor=Ubuntu + - debian/control: + + don't Conflict with xserver-xorg-video + - refreshed and renamed patches + 102_ubuntu_sharevts_load_cpu.patch + 104_fedora_init_origins_fix.patch + 106_ubuntu_fpic_libxf86config.patch + 114_fedora_no_composite_in_xnest.patch + 121_only_switch_vt_when_active.diff + 124_fix-pdripriv_null_deref.patch + - dropped for now: + 42_build_int10_submodules.diff - causes "some regression" + * dropped patches (comments from Michel Daenzer): + - 107_fedora_dont_backfill_bg_none.patch + "Breaks X semantics and thus can't go in upstream. Apps/toolkits + need to be fixed not to use background none windows." + - 108_fedora_gl_include_inferiors.patch + "Breaks GLX semantics and should no longer be necessary now that + the GLX compositing managers default to using the Composite + Overlay Window." + - 120_fedora_disable_offscreen_pixmaps.diff + "Last time I looked at this, it was a gross hack to work around XAA + deficiencies in offscreen pixmap handling, which makes the server + die immediately when trying to use GLX_EXT_texture_from_pixmap + with EXA, due to calling XAA functions without checking it's + active or even loaded." + * debian/control: + - set Conflicts: xkb-data (<< 0.9), since xkb-path is + different from previous releases + * debian/patches/125_randr-version-supported.diff: + - The server supports protocol 1.1, make sure we use it. + + -- Sebastien Bacher Mon, 26 Feb 2007 09:36:38 +0100 + +xorg-server (2:1.2.0-3) experimental; urgency=low + + [ Julien Cristau ] + * Pass --with-os-name and --with-os-vendor to configure. + * Bump serverabiver to 2:1.2.0-1. + * Add patch from upstream git to set the supported damage version from the + server, instead of from the damage headers. xserver 1.2.0 supports damage + 1.0, not 1.1. + + -- Julien Cristau Sat, 17 Feb 2007 12:03:03 +0100 + +xorg-server (2:1.2.0-2) experimental; urgency=low + + * Delete useless debian/substvars. + * Change my email address in debian/control. + * Fix patch 42_build_int10_submodules.diff. The definition of + xf86InitInt10() was moved to int10/helper_exec.c between 1.1.1 and 1.2.0, + so we move it to int10/helper_mem.c, which we build in the main int10 + module, not the vm86 and x86emu submodules. Thanks to Cédric Augonnet and + Brice Goglin for the report and testing. + + -- Julien Cristau Sat, 10 Feb 2007 20:57:57 +0100 + +xorg-server (2:1.2.0-1) experimental; urgency=low + + * New upstream release. + + 40_xorg-xserver-1.1.0-dbe-render.diff dropped. + + 38_GetDrawableAttributes.patch dropped. + + 37_build-mesa-mipmap.patch dropped. + + 33_Xserver_man_typos.patch dropped. + + 24_hurd_support.diff massively reduced. + + 13_debian_add_xkbpath_env_variable.diff refreshed. + + 07_xorgconf_manpage_overhaul.diff updated. + + 42_build_int10_submodules.diff updated. + * Bump build-dep on mesa-swx11-source to >= 6.5.2. + * Version build-dependencies on x11proto-composite-dev and x11proto-kb-dev + to match configure.ac. + * Add build-dep on libxfixes-dev (needed for Xdmx). + + -- Julien Cristau Fri, 9 Feb 2007 20:54:27 +0100 + +xorg-server (2:1.1.99.903-1) experimental; urgency=low + + * New upstream release candidate. + * Forward-port patches: + * 07_xorgconf_manpage_overhaul.diff: refresh + * 12_security_policy_in_etc.diff: refresh + * 21_glx_align_fixes.patch: refresh + * 23_kfreebsd_support.diff: refresh + * 24_hurd_support.diff: refresh + * 34_xorg.conf_man_typos.patch: refresh + * 36_fix_ffs.patch: remove, applied upstream + * Bump build-dependency on libdrm-dev to (>= 2.3.0) because that is the X + server's minimum requirement. + + -- Thierry Reding Sat, 2 Dec 2006 12:44:59 +0100 + +xorg-server (2:1.1.99.902-1) experimental; urgency=low + + * Update to latest upstream release candidate. + * Forward-port patches: + * 02_libvgahw_gcc4_volatile_fix.diff: update + * 04_read_rom_in_chunks.diff: update + * 05_arm_cache_flush.diff: remove, applied upstream + * 06_arm_is_not_x86_and_has_no_vga.diff: remove, applied upstream + * 07_xorgconf_manpage_overhaul.diff: update + * 08_s390_servermd.diff: update + * 09_debian_xserver_rtff.diff: update + * 12_security_policy_in_etc.diff: update + * 13_debian_add_xkbpath_env_variable.diff: update + * 15_symlink_mesa.diff: remove, fixed upstream + * 16_s390_fix.diff: update + * 17_ignoreabi.diff: remove, applied upstream + * 18_execinfo_only_for_backtrace.patch: remove, applied upstream + * 18_execinfo_configured.patch: remove, applied upstream + * 19_configurable_misc_utils.patch: remove, applied upstream + * 20_mesa_6.5.1.diff: remove, applied upstream + * 21_glx_align_fixes.patch: update + * 22_xkb_cycle_3layouts.diff: remove, applied upstream + * 23_kfreebsd_support.diff: update, partially applied upstream + * 24_hurd_support.diff: update, partially applied upstream + * 25_tfp_damage.diff: remove, applied upstream + * 26_aiglx_happy_vt_switch.diff: remove, applied upstream + * 27_aiglx_locking.diff: remove, applied upstream + * 28_mesa_copy_sub_buffer.diff: remove, applied upstream + * 29_mesa_reseed_makefile.diff: remove, fixed upstream + * 30_fix_vmode_switch.diff: remove, fixed upstream + * 31_blocksigio.diff: remove, fixed upstream + * 32_disable_sparc_pci_bridge.diff: update + * 34_xorg.conf_man_typos.patch: update + * 35_randr_byteswap.patch: update + * 36_fix_ffs.patch: update + * 37_Fix-__glXDRIbindTexImage-for-32-bpp-on-big-endian-platforms.diff: + remove, applied upstream + * Upstream no longer ships a changelog, so don't try to install it. + * Add 37_build-mesa-mipmap.patch that adds the missing mipmap.c to libmain's + sources. + * Add 38_GetDrawableAttributes.patch which readds support for the + GetDrawableAttributes extension that's needed for compiz to work properly. + + -- Thierry Reding Fri, 1 Dec 2006 20:32:34 +0100 + +xorg-server (2:1.1.1-21) unstable; urgency=emergency + + * Security update. + * Fix integer overflow in the ProcXCMiscGetXIDList() function in the XC-MISC + extension. Reference: CVE-2007-1003. + + -- Julien Cristau Wed, 04 Apr 2007 00:34:51 +0200 + +xorg-server (2:1.1.1-20) unstable; urgency=low + + * xephyr: Add patch from upstream git to fix memory leak in + ephyrScreenFini(). Thanks, Guillem Jover! + + -- Julien Cristau Tue, 6 Mar 2007 22:20:14 +0100 + +xorg-server (2:1.1.1-19) unstable; urgency=high + + [ Drew Parsons ] + * Removed spurious space in default font line + (/usr/X11R6/lib/X11/fonts/Type1 not "/usr/X11R6/lib/ X11/fonts/Type1") + + [ David Nusinow ] + * Conflict with and replace xserver-common, because that package used to + provide the SecurityPolicy file. This is an RC bugfix because it breaks + upgrades, so it gets a high urgency. Thanks Christian Tsotras and Lionel + Elie Mamane for reporting and it. Closes: #402658 + + -- David Nusinow Wed, 28 Feb 2007 21:48:19 -0500 + +xorg-server (2:1.1.1-18) unstable; urgency=medium + + * Add patch from Fedora to make xephyr work on 64bit architectures + (closes: #405928). + + -- Julien Cristau Fri, 16 Feb 2007 22:20:08 +0100 + +xorg-server (2:1.1.1-17) unstable; urgency=medium + + * Make the int10 module usable on i386 with a 64bit kernel (closes: #409730). + + New patch 42_build_int10_submodules.diff, which allows us to build vm86 + and x86emu as two separate submodules, and make the int10 module itself + fall back to loading x86emu if vm86 calls fail. + + Add workaround for https://bugs.freedesktop.org/show_bug.cgi?id=7299 to + the above patch: move definition of Int10Current from int10/xf86int10.c + to int10/helper_mem.c. + + Drop the part of 39_alpha_build_flags.patch applying to + hw/xfree86/os-support/linux/Makefile.in, and run autoreconf with all + patches applied. + + -- Julien Cristau Wed, 7 Feb 2007 20:37:19 +0100 + +xorg-server (2:1.1.1-16) unstable; urgency=medium + + * New patch 41_xfree86_linux_acpi_fix_tokenizing.diff from upstream git to + fix a crash on acpi events (closes: #409443). + + -- Julien Cristau Sat, 3 Feb 2007 22:56:04 +0100 + +xorg-server (2:1.1.1-15) unstable; urgency=high + + * High-urgency upload for security bugfix. + * New patch 40_xorg-xserver-1.1.0-dbe-render.diff to fix multiple integer + overflows in the dbe and render extensions. + CVE IDs: CVE-2006-6101 CVE-2006-6102 CVE-2006-6103 + * Add myself to Uploaders, and remove Fabio and Branden, with their + permission. They're of course welcome back when they have more time! + + -- Julien Cristau Tue, 9 Jan 2007 15:45:46 +0100 + +xorg-server (2:1.1.1-14) unstable; urgency=high + + * The "let's drop 20 years of build logic and replace it with autoconf in a + single release, trust me, what could go wrong? " release + * High-urgency upload for RC bugfix + * New patch 39_alpha_build_flags.patch: no really, when they said + lnx_ev56.c should be built with -mcpu=ev56, they really meant it. + Closes: #392500. + + -- Steve Langasek Sun, 7 Jan 2007 15:19:08 -0800 + +xorg-server (2:1.1.1-13) unstable; urgency=medium + + [ Julien Cristau ] + * xserver-xorg-core recommends xfonts-base and suggests xfonts-100dpi | + xfonts-75dpi and xfonts-scalable. Also add explanation about fonts to the + long description, stolen from the old xserver-common package (closes: + #400654). + + [ David Nusinow ] + * This is important for upgrades to etch, and has no notable risk, so bump + priority to medium. + + -- David Nusinow Fri, 29 Dec 2006 19:57:51 -0500 + +xorg-server (2:1.1.1-12) unstable; urgency=low + + [ Julien Cristau ] + * Delete hw/xfree86/common/xf86Build.h in debian/rules clean, since it's + wrongly included in the upstream tarball. + + [ David Nusinow ] + * Pull fix for the ignore_abi.diff patch. This one's a major brown bag on my + part. Thanks Michel Dänzer. + * Add 38_wait_for_something_force_timer_reset.diff which forces the server + to reset timers when they've overrun in some cases rather than wait + forever. Patch by Daniel Stone. Thanks Michel Dänzer for pointing the + changes out. Closes: #374026 + + -- David Nusinow Tue, 12 Dec 2006 21:13:20 -0500 + +xorg-server (2:1.1.1-11) unstable; urgency=low + + [ Drew Parsons ] + * Patches 33_Xserver_man_typos.patch and 34_xorg.conf_man_typos.patch + fix minor typos in Xserver and xorg.conf man pages. + Closes: #364556, #308899. + * Add patch 35_randr_byteswap.patch from upstream. Fixes a client/server + byteswapping problem. Closes: #291100. + + [ Julien Cristau ] + * Don't build-depend on libdrm-dev on hurd-i386 (closes: #358015). Thanks, + Samuel Thibault. + * Update hurd support patch (closes: #356300). Thanks, Samuel Thibault. + * Add reportbug script stolen from the monolith, to add the user's config + and log file in every bug report. + * Delete hw/xfree86/common/xf86Build.h from our source tree, so that the + build date is correctly calculated at build time, and not hardcoded to + 07 July 2006. Thanks to Jurij Smakov for noticing. + * Add patch 36_fix_ffs.patch by Jurij Smakov to fix infinite loop in ffs() + if called with an argument of 0 (closes: #395564). + * Add patch 37_Fix-__glXDRIbindTexImage-for-32-bpp-on-big-endian-platforms + from upstream git to fix color issue on big endian platforms + (closes: #392453). Thanks to Michel Dänzer for the patch! + * Fix typo in xvfb-run (closes: #337703). + * Install xdmxconfig and its manpage in xdmx-tools (closes: #393991). + * Add Replaces: xdmx (<= 2:1.1.1-10) to xdmx-tools because of the xmdxconfig + manpage move. + + -- David Nusinow Fri, 24 Nov 2006 15:44:52 -0500 + +xorg-server (2:1.1.1-10) unstable; urgency=low + + [ Denis Barbier ] + * Fix video mode switching. Closes: #391052 + * Fix FTBFS on kfreebsd-i386 and kfreebsd-amd64. Thanks Petr Salinger. + Closes: #363517 + + [ David Nusinow ] + * Add depends on xserver-xorg so that /etc/X11/X gets installed. Thanks + Frans Pop. Closes: #392295 + * Add 31_blocksigio.diff. This patch by Alan Hourihane, and it prevents a + race condition when a driver tries to set the cursor state when the server + is in the middle of switching resolution. Thanks to Frans Pop for + reporting the bug, Michel Dänzer for reading through the backtrace and + diagnosing the problem, and Alan for the final patch. Closes: #390646. + + [ Jurij Smakov ] + * Add 32_disable_sparc_pci_bridge.diff. Disable PCI bridge handling on + sparc, which is broken and causes filesystem corruption (by poking + the PCI bus in the wrong places) on some machines. Closes: #392312. + + [ Drew Parsons ] + * Use __appmansuffix__ not __mansuffix__ in + 03_xnest_manpage_overhaul.diff. Closes: #390599. + * Install upstream ChangeLog. Closes: #365274. + + -- David Nusinow Mon, 16 Oct 2006 21:59:51 -0400 + +xorg-server (2:1.1.1-9) unstable; urgency=low + + [ Jurij Smakov ] + * Add 21_glx_align_fixes.patch to reintroduce the setting of __GLX_ALIGN64 + variable, lost during the modular transition. This setting is essential + for architectures with strong alignment requirements. Patch affects + alpha, sparc, amd64, ia64 and s390, mimicking the behaviour of the + monolithic build. Closes: #388125. + + [ Denis Barbier ] + * Add 22_xkb_cycle_3layouts.diff to fix layout switching when 3 layouts + are present. Thanks Ivan Pascal for the patch. Closes: #345803 + + [ David Nusinow ] + * Add kFreeBSD support patch (23). Thanks to Robert Millan, Petr Salinger, + Daniel Stone, and Michael Banck for input and patch writing. + Closes: #363517 + * Add hurd support patch (24). Thanks Samuel Thibault, Daniel Stone, and + Michael Banck. Closes: #356300 + * Disable the explicit enabling of dri in the configure. The configure + script autodetects whether or not to use this anyway, and enabling it + explicitly breaks the build on hurd. Thanks Samuel Thibault and Michael + Banck. Closes: #358015 + * Add several patches written by Kristian Høgsberg for allowing compiz to + work with AIGLX. These patches were vetted by Theirry Reding with valuable + advice from Michel Dänzer, and feedback from Kristian himself. + - 25_tfp_damage.diff + - 26_aiglx_happy_vt_switch.diff + - 27_aiglx_locking.diff + - 28_mesa_copy_sub_buffer.diff + - 29_mesa_reseed_makefile.diff + - update of 20_mesa_6.5.1.diff + * Remove bizarre wholesale inclusion of another patch in the 23_kbsd patch + + [ Eugene Konev ] + * Use --with-default-font-path instead of --with-fontdir. + * Set RGBPath through --with-rgb-path. + * Drop 11_debian_always_use_default_font_path.diff. + * Drop 14_debian_always_look_in_our_module_path.diff. + * Ship SecurityPolicy in xserver-xorg-core. + + -- David Nusinow Thu, 28 Sep 2006 23:59:35 -0400 + +xorg-server (2:1.1.1-8) unstable; urgency=low + + * Update mesa symlink patch to the latest from HEAD + * Add 20_mesa_6.5.1.diff to allow the server to build with mesa 6.5.1 + * Bump build-dep versions on x11proto-gl to 1.4.8, and mesa to 6.5.1 + + -- David Nusinow Mon, 25 Sep 2006 22:21:37 -0400 + +xorg-server (2:1.1.1-7) unstable; urgency=low + + * Fix s390 build issue. Thanks Bastian Blank for the report and Eugene Konev + for the patch. Closes: #388628. + * Disable build of various utilities that we don't ship anyway. Patch thanks + to Eugene Konev. + + -- David Nusinow Thu, 21 Sep 2006 23:07:16 -0400 + +xorg-server (2:1.1.1-6) unstable; urgency=low + + * Upload 7.1 to unstable. + + [ Drew Parsons ] + * Added SGI FreeB licence to debian/copyright. Closes: #368563. + * Apply upstream patches 18_execinfo_only_for_backtrace.patch, to use + execinfo.h for and only for backtrace. Applied git patch + 5a3488ccac8e5dabd9fc98bc41ef178ead1b2faf directly into configure scripts, + activated with autoreconf. Closes: #363218. + * Only requires build-depends version of x11proto-gl-dev on 1.4.6. + + [ Steve Langasek ] + * Add versioned build-depends on x11proto-fixes-dev (>= 4.0), to + ensure the package is built against the right protocol version. + Closes: #383778. + + -- David Nusinow Mon, 18 Sep 2006 18:30:07 -0400 + +xorg-server (2:1.1.1-5) experimental; urgency=low + + * Fix error in 16_s390_fix.diff caused by my idiot copying. Thanks Yannick + Roehlly and Daniel Stone. + + -- David Nusinow Sun, 27 Aug 2006 23:25:21 +0000 + +xorg-server (2:1.1.1-4) experimental; urgency=low + + [ Drew Parsons ] + * Tighten dependencies between X11R7.1 server and video drivers. + xserver-xorg-core no longer Depends: xserver-xorg-video-all + | xserver-xorg-video but instead Conflicts: xserver-xorg-video. + (closes: #383873) + The dependency on xserver-xorg-video-all | xserver-xorg-video-1.0 is + managed by the xserver-xorg binary package (not included here in + order to avoid circular dependencies). (closes: #362313) + * Likewise remove Depends: xserver-xorg-input-all | xserver-xorg-input + (again, handled by xserver-xorg) to avoid circular dependency with drivers. + + [ David Nusinow ] + * Epoch bump + * Add 17_ignoreabi.diff to allow users to simply set a value in xorg.conf + rather than pass -ignoreABI to the server every time it starts + + -- David Nusinow Wed, 23 Aug 2006 22:03:06 +0000 + +xorg-server (1:1.1.1-3) unstable; urgency=low + + * Add 16_s390_fix.diff to fix FTBFS on s390. Thanks Bastian Blank. + (closes: #362641) + * Bump build-depends version of libgl1-mesa-dev to 6.5.x package we have in + experimental currently + * Bump build-depends version of x11proto-gl-dev to 1.4.7 or greater + + -- David Nusinow Tue, 22 Aug 2006 00:57:31 +0000 + +xorg-server (1:1.1.1-2) experimental; urgency=low + + [ Drew Parsons ] + * Updated mesa-swx11-source build-depends to (>> 6.5.0), required + for xserver 1.1.1. (closes: #383334) + + [ David Nusinow ] + * Enable and ship xephyr + * Hack off the 'x' manpage suffix + * Install Xnest manpage + * Bump policy version to 3.7.2.0. No changes necessary. + + -- David Nusinow Wed, 16 Aug 2006 21:14:44 +0000 + +xorg-server (1:1.1.1-1) experimental; urgency=low + + [ David Nusinow ] + * New upstream release + * Move patch target call so that we don't try and build twice + * Remove obsolete 15_security_allocate_local.diff and + 16_SECURITY_setuid.diff + * Add 15_symlink_mesa.diff + + -- David Nusinow Sun, 6 Aug 2006 16:12:25 +0000 + +xorg-server (2:1.0.2-10) unstable; urgency=low + + * Upload to unstable to fixed messed up last upload which was supposed to go + to experimental. Brown bag o' joy. + + -- David Nusinow Tue, 22 Aug 2006 19:31:08 +0000 + +xorg-server (1:1.1.1-0ubuntu14) feisty; urgency=low + + * Add 'debian/patches/38_Fix-pDRIPriv_NULL_deref.patch': NULL-init DRI + screen private data, thanks to Tormod Volden (LP: #60288). + + -- Kees Cook Sat, 10 Feb 2007 20:27:44 -0800 + +xorg-server (1:1.1.1-0ubuntu13) feisty; urgency=low + + * 19_revert_xkb_change_breaking_XkbGetKeyboard.patch: + - patch from fedora (with extra Makefile.in change), revert change that + broke XkbGetKeyboard() (Ubuntu: #58083) + * 37_Fix-__glXDRIbindTexImage-for-32-bpp-on-big-endian-platforms.diff: + - upstream patch copied from the Debian package, fix blue screen with + compiz on ppc (Ubuntu: #58373) + + -- Sebastien Bacher Fri, 12 Jan 2007 12:17:28 +0100 + +xorg-server (1:1.1.1-0ubuntu12.1) edgy-security; urgency=low + + * SECURITY UPDATE: Arbitrary code execution with root privileges via heap + overflows in DBE and Render extensions. + * Add 'debian/patches/021_ubuntu_dbe-render_overflows.diff' from + upstream + * References + CVE-2006-6101 CVE-2006-6102 CVE-2006-6103 + + -- Kees Cook Mon, 8 Jan 2007 12:45:41 -0800 + +xorg-server (1:1.1.1-0ubuntu12) edgy; urgency=low + + * debian/patches/17_no_composite_for_xvfb.patch: + - fix a crasher by not using composite for Xvfb when using -render + * debian/patches/18_no_composite_for_xvfb_run.patch: + - use "-extension Composite" to fix xvfb-run crashing + + -- Sebastien Bacher Fri, 13 Oct 2006 17:12:49 +0200 + +xorg-server (1:1.1.1-0ubuntu11) edgy; urgency=low + + * debian/patches/16_only_switch_vt_when_active.patch: + Add a check to prevent the X server from changing the VT when killing + GDM from the console. + + -- Ryan Lortie Thu, 21 Sep 2006 01:26:35 -0400 + +xorg-server (1:1.1.1-0ubuntu10) edgy; urgency=low + + * Build xserver-xephyr from xorg-server package. Malone: #57077, #57084 + + -- Tollef Fog Heen Wed, 6 Sep 2006 12:57:32 +0200 + +xorg-server (1:1.1.1-0ubuntu9) edgy; urgency=low + + * Enable composite extension by default + * Add patch from fd.o bugzilla #7916 to avoid aiglx hangs on vt + switches + + -- Matthew Garrett Sat, 26 Aug 2006 03:20:31 +0100 + +xorg-server (1:1.1.1-0ubuntu8) edgy; urgency=low + + * Steal patch from Fedora to allow compiz to trigger the disabling of + XAA off-screen pixmaps + + -- Matthew Garrett Wed, 23 Aug 2006 21:26:08 +0100 + +xorg-server (1:1.1.1-0ubuntu7) edgy; urgency=low + + * (temporarily) Removed Breaks: section from xserver-xorg-core (necessary + until apt-get properly supports this feature) + * Tightened Build-Depends: mesa-swx11-source to >= + 6.5.0.git.20060810-0ubuntu1 + * Tightened Build-Depends of libgl1-mesa-dev to >= + 6.5.0.git.20060810-0ubuntu1 + + -- Rodrigo Parra Novo Tue, 15 Aug 2006 07:26:07 -0300 + +xorg-server (1:1.1.1-0ubuntu6) edgy; urgency=low + + * Tightened Build-Depends of mesa-swx11-source to version 6.5.0.git.20060809 + * Removed patch 003_fedora_root_window_black_pattern.patch (not necessary + for Ubuntu) + + -- Rodrigo Parra Novo Fri, 11 Aug 2006 11:41:29 -0300 + +xorg-server (1:1.1.1-0ubuntu5) edgy; urgency=low + + * Renamed 003_ubuntu_sharevts_load_cpu.patch to + 002_ubuntu_sharevts_load_cpu.patch + * Added 003_fedora_root_window_black_pattern.patch (black background + pattern instead of default X background pattern. Feel free to revert if + you feel strongly against this one) + * Added 005_fdo4320_composite_fastpath.patch and + 016_fdo7482_xdmx_render_fix.patch (upstream bug fixes, bug numbers + annotated on patch names) + * Added 004_fedora_init_origins_fix.patch (multihead initialization) + * Added 006_ubuntu_fpic_libxf86config.patch + * Added 007_fedora_dont_backfill_bg_none.patch + * Added 008_fedora_gl_include_inferiors.patch, + 009_fedora_mesa_copy_sub_buffer.patch, + 010_fedora_no_move_damage.patch, + 012_fedora_tfp_damage.patch and + 014_fedora_no_composite_in_xnest.patch (further aiglx support) + * 011_fedora_pci_scan_fixes.patch (pci scan fixes - testing is needed to + check if an extra upstream patch for pci domains is also necessary) + * Added 015_fedora_sane_default_mode.patch (tweak default mode - please feel + free to revert this patch if you feel strongly against it) + * Added 017_fedora_add_missing_headers_to_sdk.patch + * Added 018_ubuntu_linux_kernel_include_fixes.patch and + 013_ubuntu_symlink_mesa_source.patch (build fixes against current + linux-kernel-modules * mesa-swx11-source - these already existed before, + but were applied directly to the source tree, instead of being quilt + patches) + * Just for reference: debian patch #02 is candidate for removal on next + upload. I'll refrain from removing it now to diminish the chances of this + being a breaks-for-everyone release + * Moved SecurityPolicy example from /usr/share/doc/examples/ to + /usr/share/doc/xserver-xorg-core/ + + -- Rodrigo Parra Novo Mon, 7 Aug 2006 17:21:05 -0300 + +xorg-server (1:1.1.1-0ubuntu4) edgy; urgency=low + + * Added new Breaks: section to xorg-server-core: + xserver-xorg-driver-all, xserver-xorg-driver-apm, + xserver-xorg-driver-ark, xserver-xorg-driver-ati, + xserver-xorg-driver-chips, xserver-xorg-driver-cirrus, + xserver-xorg-driver-cyrix, xserver-xorg-driver-dummy, + xserver-xorg-driver-fbdev, xserver-xorg-driver-glint, + xserver-xorg-driver-i128, xserver-xorg-driver-i740, + xserver-xorg-driver-i810, xserver-xorg-driver-imstt, + xserver-xorg-driver-mga, xserver-xorg-driver-neomagic, + xserver-xorg-driver-newport, xserver-xorg-driver-nsc, + xserver-xorg-driver-nv, xserver-xorg-driver-rendition, + xserver-xorg-driver-s3, xserver-xorg-driver-s3virge, + xserver-xorg-driver-savage, xserver-xorg-driver-siliconmotion, + xserver-xorg-driver-sis, xserver-xorg-driver-sisusb, + xserver-xorg-driver-tdfx, xserver-xorg-driver-tga, + xserver-xorg-driver-trident, xserver-xorg-driver-tseng, + xserver-xorg-driver-v4l, xserver-xorg-driver-vesa, + xserver-xorg-driver-vga, xserver-xorg-driver-via, + xserver-xorg-driver-vmware, xserver-xorg-driver-voodoo, + xserver-xorg-video-all (<< 7.0.22ubuntu7), + xserver-xorg-video-apm (<< 1:1.1.1-0ubuntu1), + xserver-xorg-video-ark (<< 1:0.6.0-0ubuntu1), + xserver-xorg-video-ati (<< 1:6.6.1-0ubuntu1), + xserver-xorg-video-chips (<< 1:1.1.1-0ubuntu1), + xserver-xorg-video-cirrus (<< 1:1.1.0-0ubuntu1), + xserver-xorg-video-cyrix (<< 1:1.1.0-0ubuntu1), + xserver-xorg-video-dummy (<< 1:0.2.0-0ubuntu1), + xserver-xorg-video-fbdev (<< 1:0.3.0-0ubuntu1), + xserver-xorg-video-glint (<< 1:1.1.1-0ubuntu1), + xserver-xorg-video-i128 (<< 1:1.2.0-0ubuntu1), + xserver-xorg-video-i740 (<< 1:1.1.0-0ubuntu1), + xserver-xorg-video-i810 (<< 1:1.6.1-0ubuntu1), + xserver-xorg-video-imstt (<< 1:1.1.0-0ubuntu1), + xserver-xorg-video-mga (<< 1:1.4.1-0ubuntu1), + xserver-xorg-video-neomagic (<< 1:1.1.1-0ubuntu1), + xserver-xorg-video-newport (<< 1:0.2.0-0ubuntu1), + xserver-xorg-video-nsc (<< 1:2.8.1-0ubuntu1), + xserver-xorg-video-nv (<< 1:1.2.0-0ubuntu1), + xserver-xorg-video-rendition (<< 1:4.1.0-0ubuntu1), + xserver-xorg-video-s3 (<< 1:0.4.1-0ubuntu1), + xserver-xorg-video-s3virge (<< 1:1.9.1-0ubuntu1), + xserver-xorg-video-savage (<< 1:2.1.1-0ubuntu1), + xserver-xorg-video-siliconmotion (<< 1:1.4.1-0ubuntu1), + xserver-xorg-video-sis (<< 1:0.9.1-0ubuntu1), + xserver-xorg-video-sisusb (<< 1:0.8.1-0ubuntu1), + xserver-xorg-video-tdfx (<< 1:1.2.1-0ubuntu1), + xserver-xorg-video-tga (<< 1:1.1.0-0ubuntu1), + xserver-xorg-video-trident (<< 1:1.2.1-0ubuntu1), + xserver-xorg-video-tseng (<< 1:1.1.0-0ubuntu1), + xserver-xorg-video-v4l (<< 1:0.1.1-0ubuntu1), + xserver-xorg-video-vesa (<< 1:1.2.1-0ubuntu1), + xserver-xorg-video-vga (<< 1:4.1.0-0ubuntu1), + xserver-xorg-video-via (<< 1:0.2.1-0ubuntu1), + xserver-xorg-video-vmware (<< 1:10.13.0-0ubuntu1), + xserver-xorg-video-voodoo (<< 1:1.1.0-oubuntu1) + + -- Rodrigo Parra Novo Tue, 1 Aug 2006 22:59:55 -0300 + +xorg-server (1:1.1.1-0ubuntu3) edgy; urgency=low + + * Build with -fno-stack-protector (see LP#54650) + + -- Matt Zimmerman Mon, 31 Jul 2006 16:28:59 -0700 + +xorg-server (1:1.1.1-0ubuntu2) edgy; urgency=low + + * (sparc only) removed stale inclusion of asm/kbio.h on + hw/xfree86/os-support/linux/lnx_io.c and + hw/xfree86/os-support/linux/lnx_kbd.c + * Update debian/serverabiver to 1:1.1.1 + + -- Rodrigo Parra Novo Mon, 31 Jul 2006 12:53:22 -0300 + +xorg-server (1:1.1.1-0ubuntu1) edgy; urgency=low + + * New Upstream version + * Changed Build-Depends from mesa-swrast-source to mesa-swx11-source, + following Debian package nomenclature + * Re-did 12_security_policy_in_etc.diff for 1.1.1 + * Dropped 15_security_allocate_local.diff (applied upstream) + * Dropped 16_SECURITY_setuid.diff (applied upstream) + * Dropped 000_ubuntu_fix_read_kernel_mapping.patch (applied upstream) + * Dropped 002_ubuntu_fix_for_certain_intel_chipsets.patch (applied upstream) + * Updated versioned Build-Depends on mesa-swx11-source to version + 6.5.0.cvs.20060725-0ubuntu1 + * Added arrayobj.c, arrayobj.h, bitset.h & rbadaptors.h to + GL/symlink-mesa.sh (linked from mesa-swx11-source) + * Added arrayobj.c to default build target on GL/mesa/main + + -- Rodrigo Parra Novo Tue, 25 Jul 2006 20:06:28 -0300 + +xorg-server (2:1.0.2-10) unstable; urgency=low + + * Upload to unstable to fixed messed up last upload which was supposed to go + to experimental. Brown bag o' joy. + + -- David Nusinow Tue, 22 Aug 2006 19:31:08 +0000 + +xorg-server (1:1.0.2-9) UNRELEASED; urgency=high + + [ Denis Barbier ] + * Fix 13_debian_add_xkbpath_env_variable.diff, XKBPATH environment + variable was not always taken into account. + + [ David Nusinow ] + * Remove two Ubuntu packaging holdovers. Have xvfb recommend xbase-clients + rather than xauth, and have xserver-xorg-core recommend xkb-data rather + than xkeyboard-config. Thanks Sterling MacNay. + * Security update. Fix for setuid privledge escalation vulernabilities. + See http://lists.freedesktop.org/archives/xorg/2006-June/016146.html for + the full advisory. + + [ Jurij Smakov ] + * Stop including the non-existent asm/kbio.h header file in + hw/xfree86/os-support/linux/lnx_{io,kbd}.c to avoid the build failure + on sparc. + + -- David Nusinow Sat, 1 Jul 2006 17:20:45 -0400 + +xorg-server (1:1.0.2-8) unstable; urgency=low + + * Move xserverrc back to xbase-clients. Thanks Benjamin Mesing. + * Add 15_security_allocate_local.diff. This fixes Bug fd.o bug #6642. + Fix buffer overflow in Render. (CVE 2006-1526). Patch by Eric Anholt. + + -- David Nusinow Tue, 2 May 2006 21:47:17 -0400 + +xorg-server (1:1.0.2-7) unstable; urgency=low + + * Ship xserverrc again in /etc/X11/xinit. Thanks Bastian Kleineidam and + Vasilis Vasaitis. (closes: #357713) + + -- David Nusinow Wed, 26 Apr 2006 00:01:16 -0400 + +xorg-server (1:1.0.2-6) unstable; urgency=low + + [ David Nusinow ] + * Use -DNO_INLINE on s390. Thanks Bastian Blank and Julien Cristau. + (closes: #362641) + * Re-add xvfb-run and manpage to xvfb package. Thanks Josselin Mouette and + Jamie Wilkinson. (closes: #363494) + * Add 014_debian_always_look_in_our_module_path.diff. This will cause the + server to always look in the default module path even if they've specified + an alternate path in their xorg.conf file via the ModulePath option. A + note to users: you should remove this part of your xorg.conf unless you + need it, as the server will look in the right place for modules if you + don't specify a location. + * Run dh_install with --list-missing + * Add missing manpages all around. Thanks Roland Mas and Jan Hudec. + (closes: #362489, #364199) + * Actually install apps to xdmx-tools. Thanks Xavier Bestel. + (closes: #356813) + + [ Denis Barbier ] + * Add 13_debian_add_xkbpath_env_variable.diff so that the server takes + the XKBPATH environment variable into account. (closes: #363229) + + -- David Nusinow Sat, 22 Apr 2006 17:06:23 -0400 + +xorg-server (1:1.0.2-5) unstable; urgency=low + + * Add 11_debian_always_use_default_font_path.diff from Eugene Konev. This + patch causes the server to add the default font path to whatever the user + has specified. Right now, that's /usr/share/fonts/X11, as defined on + configure in debian/rules. Thanks Eugene, this will definitely go a long + way. + * Document how to get rid of error loading glcore (and other modules) in + NEWS.Debian. Thanks Matej Vela and others. + * Provide the virtual 'xserver' package. Thanks Steve Langasek and Daniel + Stone. (closes: #362750) + * Add 12_security_policy_in_etc.diff from Eugene Konev. This will allow us + to tell the server on configure to look in /etc/X11/xserver for the + SecurityPolicy file. Thanks Joey Hess and Eugene. (closes: #362246) + + -- David Nusinow Mon, 17 Apr 2006 00:34:08 -0400 + +xorg-server (1:1.0.2-4) unstable; urgency=low + + * Document the need to update paths in xserver-xorg-core's NEWS file. + (closes: #362077, #362244, #362431) + * Make xserver-xorg-core Architecture: any. (closes: #362150) + * Build with --with-fontdir=/usr/share/fonts/X11. Remove + --with-default-font-path option to make this work. Thanks Eugene Konev. + + -- David Nusinow Thu, 13 Apr 2006 23:54:06 -0400 + +xorg-server (1:1.0.2-3) unstable; urgency=low + + * Add build-conflicts on xlibs-static-dev. Thanks Zephaniah E. Hull. + + -- David Nusinow Tue, 11 Apr 2006 18:44:51 -0400 + +xorg-server (1:1.0.2-2) unstable; urgency=low + + * Upload to unstable + * Add versioned build-dep on libdmx-dev. Thanks Frank Lichtenheld. + (closes: #361752) + + -- David Nusinow Mon, 10 Apr 2006 19:34:04 -0400 + +xorg-server (1:1.0.2-1) experimental; urgency=low + + [ David Nusinow ] + * New upstream release. Fixes CVE-2006-0745 + + [ Denis Barbier ] + * Set XKB base path to /usr/share/X11/xkb. + + -- David Nusinow Mon, 20 Mar 2006 21:41:04 -0500 + +xorg-server (1:1.0.2-0ubuntu10) dapper; urgency=low + + * Backport a fix for Intel bridge handling: + debian/patches/002_fix_for_certain_intel_chipsets.patch + (Closes Ubuntu: #29880) + + -- Paul Sladen Sun, 14 May 2006 19:01:32 +0100 + +xorg-server (1:1.0.2-0ubuntu9) dapper; urgency=low + + * Add 1680x1050 60 and 85Hz Modelines. Thanks to Bart Verwilst for the data. + (Closes Ubuntu: #6096) + + -- Fabio M. Di Nitto Fri, 05 May 2006 12:38:22 +0200 + +xorg-server (1:1.0.2-0ubuntu8) dapper; urgency=low + + * Fix "XCB rendertest crashes server": + - Add patch 001-CVE-2006-1526.patch.dpatch. + (CVE-2006-1526) + + -- Fabio M. Di Nitto Wed, 03 May 2006 09:01:09 +0200 + +xorg-server (1:1.0.2-0ubuntu7) dapper; urgency=low + + * Ship again xorg.conf(5) + (Closes Ubuntu: #33703) + + -- Fabio M. Di Nitto Mon, 01 May 2006 13:37:40 +0200 + +xorg-server (1:1.0.2-0ubuntu6) dapper; urgency=low + + * Fix severe internal memory corruption: + - Add patch: 000-fix-read-kernel-mapping.patch.dpatch. + (freedesktop bugzilla: #6472) + + -- Fabio M. Di Nitto Fri, 21 Apr 2006 08:07:33 +0200 + +xorg-server (1:1.0.2-0ubuntu5) dapper; urgency=low + + * Fix CPU load when using -sharevts: + - Add patch: 991_sharevts-load-cpu.patch + (Thanks for the initial patch to Michael Witrant) + (Closes Ubuntu: #33611) + + -- Fabio M. Di Nitto Mon, 10 Apr 2006 13:30:26 +0200 + +xorg-server (1:1.0.2-0ubuntu4) dapper; urgency=low + + * Fix SecurityPolicy path to /etc/X11/xserver/SecurityPolicy + and ship an example. NOTE: this file is NOT installed by default, + the WARNING you see in Xorg.0.log is an harmless WARNING. + Add patch: 990_ubuntu_fix_security_policy_path.patch. + (Close Ubuntu: #31608) + + * Readd manpages to the different packages. + + * Ship again ioport, gtf, pcitweak and scanpci. + (Closes Ubuntu: #37720) + + -- Fabio M. Di Nitto Tue, 04 Apr 2006 16:33:00 +0200 + +xorg-server (1:1.0.2-0ubuntu3) dapper; urgency=low + + * What about shipping xorg-server.m4 to make developer life easier? + + -- Fabio M. Di Nitto Thu, 23 Mar 2006 10:32:55 +0100 + +xorg-server (1:1.0.2-0ubuntu2) dapper; urgency=low + + * xserver-xorg-dev Depends: x11proto-randr-dev. + (Closes Ubuntu: #35594) + + -- Fabio M. Di Nitto Wed, 22 Mar 2006 08:09:46 +0100 + +xorg-server (1:1.0.2-0ubuntu1) dapper; urgency=low + + * New upstream release: + - Drop patches: + + CVE-2006-0745 + + add-missing-sparc-include + + fix-backtrace + + fix-crash-on-null-addr + + * UVF execption granted by mdz. + + -- Fabio M. Di Nitto Tue, 21 Mar 2006 05:39:01 +0100 + +xorg-server (1:1.0.1-2) experimental; urgency=low + + [ David Nusinow ] + * Add versioned dependency on x11-common + * Remove old cruft in our patches directory + * Port patches from trunk + + 030_libvgahw_gcc4_volatile_fix.diff + + general/026_xc_programs_manpage_overhaul.diff + + arm/303_arm_cache_flush.diff + + arm/315_arm_is_not_x86_and_has_no_vga.diff + + general/099e_xorgconf_manpage_overhaul.diff + + s390/500_s390_support.diff + + debian/910_debian_Xserver_RTFF.diff + * add 04_read_rom_in_chunks.diff. This reads PCI ROM in large chunks rather + than one byte at a time. This patch by Alex Williamson and forwarded to us + by Dann Frazier. Thanks to both of them. (closes: #353168) + * Don't build xserver-xorg-core on s390. This means putting all the other + arches as being explicitly listed. Damn !s390. + * Version the conflict with xserver-xfree86 to allow for the transition + package to be installed + * Remove README.DRI, as it is non-free. Add it to prune list. + * Add 10_dont_look_in_home_for_config.diff to prevent looking in a user's + home directory for xorg.conf. Thanks Daniel Stone for the patch. + + -- David Nusinow Sun, 12 Mar 2006 16:18:13 -0500 + +xorg-server (1:1.0.1-1) experimental; urgency=low + + * First upload to Debian + * Add bison and flex to the build-depends + * Define INSTALL in debian/rules + * Add xserver-xorg-core dependency xserver-xorg-video-all | + xserver-xorg-video. The former is a metapackage that depends on all the + video drivers we ship and the latter is a virtual package that each video + driver provides. This scheme will install the metapackage by default but + will permit any single video driver to satsify the dependency. Do the same + thing for the input drivers. + * switch dpatch build-dependency to quilt + * Deal with mesa packaging rename: build-dep on mesa-swrast-source -> + mesa-swx11-source + * Change xserver-core depends to be on x11-common rather than xorg-common + * Have xserver-xorg-dev install the files in /usr/share/aclocal so we get + xorg-server.m4 + * Manually set permissions on serverabiver installation + * Set the default font path to /usr/share/fonts/X11 instead of + /usr/share/X11/fonts. Thanks Eugene Konev. + + -- David Nusinow Mon, 20 Feb 2006 00:18:45 -0500 + +xorg-server (1:1.0.1-0ubuntu8) dapper; urgency=low + + * [SECURITY] Fix CVE-2006-0745. + + -- Fabio M. Di Nitto Tue, 21 Mar 2006 05:33:50 +0100 + +xorg-server (1:1.0.1-0ubuntu7) dapper; urgency=low + + * debian/control: + - xvfb Depends on xfonts-base too, fix pointed by fabbione + + -- Sebastien Bacher Fri, 3 Mar 2006 22:21:56 +0100 + +xorg-server (1:1.0.1-0ubuntu5) dapper; urgency=low + + * Add missing include on sparc. Fix FTBFS. + + -- Fabio M. Di Nitto Wed, 01 Feb 2006 13:45:41 +0100 + +xorg-server (1:1.0.1-0ubuntu4) dapper; urgency=low + + * Backport from upstream HEAD at Daniel's request: + - Add forgotten HAVE_BACKTRACE define, so that we actually get + backtraces when Xorg segfaults. + + -- Colin Watson Fri, 27 Jan 2006 13:47:56 +0000 + +xorg-server (1:1.0.1-0ubuntu3) dapper; urgency=low + + * Depend on x11-common rather than xorg-common and xserver-common + + -- Tollef Fog Heen Wed, 18 Jan 2006 17:13:12 +0100 + +xorg-server (1:1.0.1-0ubuntu2) dapper; urgency=low + + * Add flex to build-deps, fixing FTBFS. + + -- Tollef Fog Heen Wed, 18 Jan 2006 12:34:03 +0100 + +xorg-server (1:1.0.1-0ubuntu1) dapper; urgency=low + + * New upstream release. + + -- Daniel Stone Fri, 6 Jan 2006 08:00:52 +1100 + +xorg-server (1:1.0.0-0ubuntu1) dapper; urgency=low + + * New upstream release. + + fbCompositeGeneral is now around 97.3% less stuffed (closes: + Ubuntu#20286). + + 'Fix' mouse issues in the DIX by adding XFree86Server defines (sigh; + closes: Ubuntu#20200). + + Fix Emulate3Buttons mouse posting (closes: Ubuntu#11308). + * Bump Build-Depends on libxt-dev (appdefaultdir), libdrm-dev (libdrm2), and + mesa-swrast-source (new files). + * Add --with-fontdir and scotch --with-default-font-path to fix font paths + for non-Xorg servers (closes: Ubuntu#20157). + * Fix path to SecurityPolicy and RGB_DB. + * Move update-linux-hardened-support call to xserver-xorg-core postinst + (from xserver-xorg postinst). + * Add patch to os/access.c so we don't crash on a null-addressed interface + (closes: Ubuntu#20414). + + -- Daniel Stone Tue, 13 Dec 2005 07:27:13 +1100 + +xorg-server (1:0.99.3-0ubuntu6) dapper; urgency=low + + * Fix xserver-xorg-dev Depends field to only depend on the headers this + this package actually uses. + * Re-add xvfb-run to xfvb (closes: Ubuntu#20157). + + -- Daniel Stone Mon, 5 Dec 2005 15:04:14 +1100 + +xorg-server (1:0.99.3-0ubuntu5) dapper; urgency=low + + * Add -ffunction-sections where needed + * Depend: xserver-common: needed for dexconf and /usr/X11R6/bin/X + + -- LaMont Jones Sat, 26 Nov 2005 05:15:36 +0000 + +xorg-server (1:0.99.3-0ubuntu4) dapper; urgency=low + + * Add two more dependencies to build the other half of the video drivers: + - x11proto-xext-dev, x11proto-video-dev + + -- Adam Conrad Fri, 25 Nov 2005 02:36:44 +1100 + +xorg-server (1:0.99.3-0ubuntu3) dapper; urgency=low + + * Add a few dependencies to xorg-server-dev as the path of least resistance + to get all the various input and video drivers to build again: + - For the video drivers: x11proto-randr-dev, x11proto-render-dev, + x11proto-fonts-dev, x11proto-xf86dri-dev, libdrm-dev + - For the input drivers: x11proto-core-dev, x11proto-input-dev, + x11proto-randr-dev (why do input drivers want randr?) + + -- Adam Conrad Thu, 24 Nov 2005 18:51:25 +1100 + +xorg-server (1:0.99.3-0ubuntu2) dapper; urgency=low + + * Add missing libfreetype6-dev build-depends. + + -- Daniel Stone Thu, 24 Nov 2005 10:26:44 +1100 + +xorg-server (1:0.99.3-0ubuntu1) dapper; urgency=low + + * New upstream release. + + -- Daniel Stone Mon, 21 Nov 2005 14:13:41 +1100 + +xorg-server (1:0.99.2+cvs.20051025-3) dapper; urgency=low + + * Version mesa-swrast-source Build-Dep to 6.4.0 or higher, so GLcore is a + little less crash-happy (e.g. when moving your glxgears window). + * Export /usr/share/xserver-xorg/serverabiver to xserver-xorg-dev, which + describes the relationship needed from a driver on xserver-xorg-core. + + -- Daniel Stone Fri, 28 Oct 2005 13:00:26 +1000 + +xorg-server (1:0.99.2+cvs.20051025-2) dapper; urgency=low + + * Add Build-Deps on libxaw7-dev, libxmu-dev, libxt-dev, libxpm-dev, + libx11-dev, libxtst-dev, and libxres-dev for DMX utils. + + -- Daniel Stone Wed, 26 Oct 2005 14:34:40 +1000 + +xorg-server (1:0.99.2+cvs.20051025-1) dapper; urgency=low + + * Update to new upstream version. + * All applicable patches have been committed upstream, bar #989 and #990. + + -- Daniel Stone Thu, 20 Oct 2005 10:26:33 +1000 + +xorg-server (1:0.99.0+cvs.20050901-1) breezy; urgency=low + + * First xorg-server release. + + -- Daniel Stone Wed, 6 Jul 2005 15:48:17 +1000 + --- xorg-server-1.3.0.0.dfsg.orig/debian/xprint-common.docs +++ xorg-server-1.3.0.0.dfsg/debian/xprint-common.docs @@ -0,0 +1,2 @@ +debian/xprint.changelog.Debian +debian/README.printing-problems --- xorg-server-1.3.0.0.dfsg.orig/debian/xserver-xephyr.install +++ xorg-server-1.3.0.0.dfsg/debian/xserver-xephyr.install @@ -0,0 +1 @@ +usr/bin/Xephyr --- xorg-server-1.3.0.0.dfsg.orig/debian/xprint-common.xprint.init +++ xorg-server-1.3.0.0.dfsg/debian/xprint-common.xprint.init @@ -0,0 +1,1246 @@ +#!/bin/bash +# +# Copyright 2002-2004 by Roland Mainz . +# +# This script manages the Xprint server side + +# Basic support for IRIX-style "chkconfig" +# chkconfig: 2345 61 61 +# description: Startup/shutdown script for Xprint server(s) + +# Basic support for the Linux Standard Base Specification 1.0.0 +# (Note: The Should-Start/Stop lines are there so that this works in the +# future, when the LSB adopts these. The X-UnitedLinux lines are there +# so that it works right now.) +### BEGIN INIT INFO +# Provides: xprint +# Required-Start: $local_fs $remote_fs $syslog $network +# Required-Stop: $local_fs $remote_fs $syslog +# Should-Start: cups lpd xfs +# Should-Stop: cups lpd xfs +# X-UnitedLinux-Should-Start: cups lpd xfs +# X-UnitedLinux-Should-Stop: cups lpd xfs +# Default-Start: 3 5 +# Default-Stop: 0 1 2 6 +# Description: Startup/shutdown script for Xprint server(s) +### END INIT INFO + + + + +############################################################################ +# +# This script has three main tasks: +# 1. Start Xprint servers ("Xprt") at boot time. +# 2. Shutdown Xprint servers when the machine is being shut down. +# 3. Query the list of available printers. +# +# Additional tasks are: +# 4. Restart ('restart') and conditional restart +# ('condrestart'/'try-restart'|'force-reload') for Linux support +# 5. Wrapping of application call with setting XPSERVERLIST ('wrapper') +# +# Usage: +# - Start Xprint server(s) manually: +# % /etc/init.d/xprint start +# +# - Stop Xprint server(s) manually: +# % /etc/init.d/xprint stop +# +# - Populate $XPSERVERLIST env var (for example as part of a global +# login script like /etc/profile or per-user login scripts like +# $HOME/.profile (sh/ksh/bash)) +# % XPSERVERLIST="`/etc/init.d/xprint get_xpserverlist`" +# % export XPSERVERLIST +# +# Installation: +# Copy this script to /etc/init.d/xprint and make sure that it is +# executable. If your installation is LSB-compliant, then run +# % /usr/lib/lsb/install_initd /etc/init.d/xprint +# to start the service on startup. Otherwise, manually create links +# to the matching run levels. +# Examples: +# - Solaris 2.7/2.8/2.9: +# % cp xprint /etc/init.d/xprint +# % chmod a+rx /etc/init.d/xprint +# % ln /etc/init.d/xprint /etc/rc0.d/K38xprint +# % ln /etc/init.d/xprint /etc/rc1.d/K38xprint +# % ln /etc/init.d/xprint /etc/rc2.d/S81xprint +# % ln /etc/init.d/xprint /etc/rcS.d/K38xprint +# +# - SuSE Linux 7.3 +# % cp xprint /etc/init.d/xprint +# % chmod a+rx /etc/init.d/xprint +# % ln -s ../xprint /etc/init.d/rc3.d/K13xprint +# % ln -s ../xprint /etc/init.d/rc3.d/S12xprint +# % ln -s ../xprint /etc/init.d/rc5.d/K13xprint +# % ln -s ../xprint /etc/init.d/rc5.d/S12xprint +# % ln -s ../xprint /etc/init.d/rc2.d/K13xprint +# % ln -s ../xprint /etc/init.d/rc2.d/S12xprint +# +# - SuSE Linux 6.4: +# % cp xprint /sbin/init.d/xprint +# % chmod a+rx /sbin/init.d/xprint +# % ln -s ../xprint /sbin/init.d/rc2.d/K20xprint +# % ln -s ../xprint /sbin/init.d/rc2.d/S20xprint +# % ln -s ../xprint /sbin/init.d/rc3.d/K20xprint +# % ln -s ../xprint /sbin/init.d/rc3.d/S20xprint +# +# Notes: +# - The Xprint servers must be started _after_ the print +# spooler or the server(s) may refuse to start +# - The script should be readable by all users to ensure that they +# can use the "get_xpserverlist"-option +# +# Custom configuration: +# - Edit the function setup_config() in this script to match your needs +# +# Known bugs/ToDo/Notes: +# - The shell script assumes that a Xserver can be reached via +# "hostname:displaynum" where "hostname" is obtained from +# "/usr/bin/hostname". It may happen that a kernel firewall +# blocks an X connection on the same host (e.g. client && Xserver +# are running on the same host). +# Suggested fix: Fix the firewall config. +# Suggested workaround: Edit this script and replace the use of +# /usr/bin/hostname with "echo 'localhost'". +# +############################################################################ +# + + +############################################################################ + +fatal_error() +{ + echo "${0}: ## FATAL ERROR: ${1}" 1>&2 + exit 1 +} + +error_echo() +{ + echo "${0}: ## ERROR: ${1}" 1>&2 +} + +warning_echo() +{ + echo "${0}: ## WARNING: ${1}" 1>&2 +} + +verbose_echo() +{ + echo "${0}: ${1}" +} + +msg() +{ + echo "${1}" +} + +############################################################################ + + +##debug +# set -x + +# Change current dir to a location which is writeable by everyone +cd /tmp + +# Clear some environment variables +unset TEMP TMPDIR SCREENDIR + +# Set search path for commands +export PATH=/usr/bin:/bin:/usr/sbin:/sbin + + + + +## Try to figure-out where X11 was installed + + + + + + +[ -d /usr/X11/bin ] && XPROJECTROOT=/usr/X11 +[ -d /usr/X11R6/bin ] && XPROJECTROOT=/usr/X11R6 + +# X11R7 now follows FHS, doesn't use it's own separate directory +XPROJECTROOT=/usr + +XPCUSTOMGLUE=DebianGlue # This is used for customizing this script +export XPROJECTROOT XPCUSTOMGLUE + +if [ -z "${XPROJECTROOT}" ] ; then + fatal_error "Unknown XProjectRoot." +fi + +# Set the location of the Xprt binary we want to use. +XPRT_BIN="${XPROJECTROOT}/bin/Xprt" + +# Set the location of the global file where we store the locations +# of the system-wide servers +if [ -d /var/run ] ; then + XP_GLOBAL_SERVERS=/var/run/Xprint_servers +else + XP_GLOBAL_SERVERS=/tmp/.Xprint_servers +fi + +# ${LOGNAME} will not work if user su'ed into another account +export CURRLOGNAME="$(id -u -n)" + +# Set location where we want to store the list of Xprint servers managed +# by this user +# - If we start as "root" use the global file +# - If we start as normal user use a per-user file + +if [ "${CURRLOGNAME}" != "root" -a "${CURRLOGNAME}" != "" ] ; then + XP_PER_USER_SERVERS="/tmp/.Xprint_servers_${CURRLOGNAME}" + XP_SERVERS="${XP_PER_USER_SERVERS}" +else + XP_SERVERS="${XP_GLOBAL_SERVERS}" +fi + +# Set umask that owner can r/w all files and everyone else can read them +umask 022 + +# Bump limit for per-process open files to ensure that Xprt can open many many fonts +ulimit -n 1024 + +############################################################################ + +# Get list of fonts for a given display +get_fontlist_from_display() +{ + ${XPROJECTROOT}/bin/xset -display "${1}" q | + awk "/Font Path:/ { i=1 ; next } i==1 { print \$0 ; i=0 }" | + fontpath2fontlist +} + +# Get list from a fontserver config +get_fontlist_from_xfs_config() +{ + if [ ! -r "${1}" ] ; then + return 0 + fi + + ( + cat "${1}" | + while read -r i ; do + for val in $i; do + case $val in + \#*) break ;; + ?*=*) key="${val%%=*}" ;; + =*) key="${tok}" ;; + *) [ "${key}" = "catalogue" -a "${tok}" != "" ] && echo "${tok}" ;; + esac + tok="${val#*=}" + done + done + ) | tr "," "\n" | fontpath2fontlist +} + +get_fontlist_from_all_xfs_configs() +{ + get_fontlist_from_xfs_config "/etc/openwin/fs/fontserver.cfg" + get_fontlist_from_xfs_config "/usr/openwin/lib/X11/fontserver.cfg" + get_fontlist_from_xfs_config "/etc/X11/fs-xtt/config" + get_fontlist_from_xfs_config "/etc/X11/fs/config" + get_fontlist_from_xfs_config "/etc/X11/xfs/config" + get_fontlist_from_xfs_config "${XPROJECTROOT}/lib/X11/fs/config" +} + +get_fontlist_from_xf86config() +{ + srcxconf="" + + # see xorg.conf(5x) manual page for the list of locations used here + [ "${srcxconf}" = "" -a -f "/etc/X11/xorg.conf" ] && srcxconf="/etc/X11/xorg.conf" + [ "${srcxconf}" = "" -a -f "/usr/X11R6/etc/X11/xorg.conf" ] && srcxconf="/usr/X11R6/etc/X11/xorg.conf" + [ "${srcxconf}" = "" -a -f "/etc/X11/xorg.conf-4" ] && srcxconf="/etc/X11/xorg.conf-4" + [ "${srcxconf}" = "" -a -f "/etc/X11/xorg.conf" ] && srcxconf="/etc/X11/xorg.conf" + [ "${srcxconf}" = "" -a -f "/etc/xorg.conf" ] && srcxconf="/etc/xorg.conf" + [ "${srcxconf}" = "" -a -f "/usr/X11R6/etc/X11/xorg.conf.${hostname}" ] && srcxconf="/usr/X11R6/etc/X11/xorg.conf.${hostname}" + [ "${srcxconf}" = "" -a -f "/usr/X11R6/etc/X11/xorg.conf-4" ] && srcxconf="/usr/X11R6/etc/X11/xorg.conf-4" + [ "${srcxconf}" = "" -a -f "/usr/X11R6/etc/X11/xorg.conf" ] && srcxconf="/usr/X11R6/etc/X11/xorg.conf" + [ "${srcxconf}" = "" -a -f "/usr/X11R6/lib/X11/xorg.conf.${hostname}" ] && srcxconf="/usr/X11R6/lib/X11/xorg.conf.${hostname}" + [ "${srcxconf}" = "" -a -f "/usr/X11R6/lib/X11/xorg.conf-4" ] && srcxconf="/usr/X11R6/lib/X11/xorg.conf-4" + [ "${srcxconf}" = "" -a -f "/usr/X11R6/lib/X11/xorg.conf" ] && srcxconf="/usr/X11R6/lib/X11/xorg.conf" + + # Xfree86 locations + [ "${srcxconf}" = "" -a -f "/etc/X11/XF86Config-4" ] && srcxconf="/etc/X11/XF86Config-4" + [ "${srcxconf}" = "" -a -f "/etc/X11/XF86Config" ] && srcxconf="/etc/X11/XF86Config" + + + if [ "${srcxconf}" = "" ] ; then + return 0 + fi + + currsection="" + cat "${srcxconf}" | + while read i1 i2 i3 i4 ; do + # Strip "\"" from I2 + i2="${i2#\"}" ; i2="${i2%\"}" + + case "${i1}" in + \#*) + continue + ;; + 'Section') + currsection="${i2}" + ;; + 'EndSection') + currsection="" + ;; + 'FontPath') + [ "$currsection" = "Files" ] && echo "${i2%:unscaled}" + ;; + esac + done | egrep -v -i "tcp/|tcp4/|tcp6/|unix/" + + return 0 +} + +get_fontlist_from_defoma() +{ + # Include Debian defoma font directory where relevant + if [ -d "/var/lib/defoma/x-ttcidfont-conf.d/dirs" ] ; then + find "/var/lib/defoma/x-ttcidfont-conf.d/dirs" -name fonts.dir | + while read i ; do echo "${i%/fonts.dir}" ; done + fi +} + +# Get list of system fonts +get_system_fontlist() +{ + ( + get_fontlist_from_defoma + + get_fontlist_from_xf86config + + # Getting font paths from XFS is mainly required for compatibilty to RedHat + get_fontlist_from_all_xfs_configs + + ## List all fonts in all locales installed on this machine + ( + [ -d "/usr/share/fonts" ] && find /usr/share/fonts -name fonts.dir + [ -d "${XPROJECTROOT}/lib/X11/fonts" ] && find "${XPROJECTROOT}/lib/X11/fonts" -name fonts.dir + ) | + while read i ; do echo "${i%/fonts.dir}" ; done + ) | sort -u +} + +# Filter fonts per given extended regular expressions +# (and make sure we filter any model-config fonts - they are managed by Xprt internally) +filter_fontlist() +{ + egrep -- "${1}" | fgrep -v "/models/" | egrep -v -- "${2}" +} + +# Filter font paths with unsupported font types +# (such as CID fonts) +filter_unsupported_fonts() +{ + egrep -v -i "/cid(/$|$)|/csl(/$|$)" +} + +# Validate fontpath +# Only return valid font path entries (note that these entries may +# include non-file stuff like font server references) +validate_fontlist() +{ + while read i ; do + case "${i}" in + # Check if font path entry is a font server... + tcp/''*|tcp4/''*|tcp6/''*|unix/''*) + echo "${i}" + ;; + # ... if not check if the path is accessible + # and has a valid "fonts.dir" index + *) + [ -f "${i}/fonts.dir" ] && echo "${i}" + ;; + esac + done +} + +# Build a comma-seperated list of fonts (font path) from a list of fonts +fontlist2fontpath() +{ + fp="" + read fp; + while read i ; do + fp="${fp},${i}" + done + + echo "$fp" +} + +# Build a list (one item per line) of fonts from a font path +fontpath2fontlist() +{ + while read i ; do + echo "${i}" | tr "," "\n" + done +} + +# Sort scaleable fonts (PS Type1 and TrueType) first in a font list +sort_scaleable_fonts_first() +{ + i="$(fontlist2fontpath)" + # First list PS Type1 fonts... + echo "${i}" | fontpath2fontlist | fgrep "/Type1" + # ... then TrueType fonts ... + echo "${i}" | fontpath2fontlist | egrep -i "/TrueType|/TT(/$|$)|/TTF(/$|$)" + # ... then all others + echo "${i}" | fontpath2fontlist | egrep -v -i "/Type1|/TrueType|/TT(/$|$)|/TTF(/$|$)" +} + +# Check if a X display is used by a Xserver or not +# Known bugs: +# - there is no way in plain bourne shell or bash (see comment about ksh93 +# below) to test if a Xserver sits only on a socket and not on a pipe +# - some Xserver's don't cleanup their stuff in /tmp on exit which may end +# in the problem that we don't detect possible free display numbers +# (one problem is that only ksh93 can do stuff like +# "cat "${lastdisplaynumreturned_store}" + return 0 + fi + done + + # Using "magic" value of 189 here due lack of a better solution + echo "189" + echo "189" >"${lastdisplaynumreturned_store}" + return 0 +} + +# Check if a process exists or not +pexists() +{ + [ "$1" = "" ] && return 1; + + # Use of /proc would be better but not all platforms (like AIX) have procfs + [ "$(ps -p $1 | fgrep $1)" != "" ] && return 0; + return 1 +} + +# Check if there is a spooler running... +is_spooler_running() +{ + # This covers Linux lpd, CUPS, Solaris and AIX 4.x - but what about + # AIX 5.x, HP-UX and IRIX ? + + [ "$(ps -A | egrep 'lpd|lpsched|cupsd|qdaemon' | fgrep -v 'grep')" != "" ] && return 0; + return 1 +} + +# Wait until the spooler system has been started (but not more than 30secs) +wait_for_print_spooler() +{ + for i in 1 2 3 4 5 6 7 8 9 10 ; do + is_spooler_running && return 0; + sleep 3 + done + + return 0 +} + +lock_server_registry() +{ + lock_counter=0 # counts in 1/100s + waiting_for_lock_msg_send="false" + while ! mkdir "${XP_SERVERS}.lock" 2>/dev/null ; do + # print notice after 2 seconds + if [ ${lock_counter} -gt 200 -a "${waiting_for_lock_msg_send}" != "true" ] ; then + echo "${0}: waiting for lock(=${XP_SERVERS}.lock)..." + waiting_for_lock_msg_send="true" + fi + + # tread the lock as "broken" after 20 seconds + if [ ${lock_counter} -gt 2000 ] ; then + echo "${0}: WARNING: lock timeout for lock(=${XP_SERVERS}.lock)." + return 0 + fi + + if [ -x /bin/usleep ] ; then + /bin/usleep 200000 + lock_counter=$((${lock_counter} + 20)) # 20/100s + else + sleep 1 + lock_counter=$((${lock_counter} + 100)) # 100/100s + fi + done +} + +unlock_server_registry() +{ + rmdir "${XP_SERVERS}.lock" +} + +# Kill dead registry locks (silently!) +kill_dead_registry_locks() +{ + rm -Rf "${XP_SERVERS}.lock" +} + +# Start Xprint servers +start_servers() +{ + # Write registry "intro" ... + lock_server_registry + echo "# Xprint server list" >>"${XP_SERVERS}" + echo "# File is for private use for ${0}." >>"${XP_SERVERS}" + echo "# Do not edit, rely on the content or file format." >>"${XP_SERVERS}" + unlock_server_registry + + hostname="$(hostname)" + + default_fontpath="$(get_system_fontlist | fontlist2fontpath)" + default_fontpath_acceptpattern=".*"; + default_fontpath_rejectpattern="_No_Match_"; # Match nothing + + curr=0 + while [ $curr -lt $num_xpstart ] ; do + if [ "${xpstart_remote_server[$curr]}" != "" ] ; then + # Remote Xprt, just put the entry into the registry + lock_server_registry + echo "display=${xpstart_remote_server[$curr]}" >>"${XP_SERVERS}" + unlock_server_registry + else + # Run block in seperate process to avoid that changes to the + # xpstart_* variables affect the next cycle + ( + # Use defaults if there are no special options + [ "${xpstart_fontpath[$curr]}" = "" ] && xpstart_fontpath[$curr]="${default_fontpath}"; + [ "${xpstart_fontpath_acceptpattern[$curr]}" = "" ] && xpstart_fontpath_acceptpattern[$curr]="$default_fontpath_acceptpattern"; + [ "${xpstart_fontpath_rejectpattern[$curr]}" = "" ] && xpstart_fontpath_rejectpattern[$curr]="$default_fontpath_rejectpattern"; + [ "${xpstart_displayid[$curr]}" = "" ] && xpstart_displayid[$curr]="$(FindFreeXDisplayNum)" + [ "${xpstart_logger[$curr]}" = "" ] && xpstart_logger[$curr]="logger -p lpr.notice -t Xprt_${xpstart_displayid[$curr]}"; + [ "${xpstart_logfile[$curr]}" = "" ] && xpstart_logfile[$curr]="/dev/null"; + [ "${xpstart_xprt_binary[$curr]}" = "" ] && xpstart_xprt_binary[$curr]="${XPRT_BIN}"; + if [ "${xpstart_xprt_binary[$curr]}" = "/usr/openwin/bin/Xprt" -o "$(uname -s)" = "SunOS" ] ; then + # Solaris /usr/openwin/bin/Xprt does not support "-nolisten tcp" + # yet nor is it possible to run a Xserver on a unix socket only + # in Solaris since access to the unix domain sockets in + # /tmp/.X11-pipe and /tmp/.X11-unix is restricted to applications + # with group-id "root" (e.g. the Xprt server would need to be + # setgid "root" that plain users can start it listening on a unix + # socket only) + [ "${xpstart_options[$curr]}" = "" ] && xpstart_options[$curr]="-ac -pn" + else + [ "${xpstart_options[$curr]}" = "" ] && xpstart_options[$curr]="-ac -pn -nolisten tcp" + fi + + # Check if the Xprt binary is available + if [ ! -x "${xpstart_xprt_binary[$curr]}" ] ; then + # Debian policy 9.3.2 says just stop quietly here + exit 0 + + error_echo "Can't find \"${xpstart_xprt_binary[$curr]}\"." + exit 1 # exit block + fi + + # Verify and set location of font encodings directory file + if [ "${xpstart_font_encodings_dir[$curr]}" = "" ] ; then + if [ -f "${XPROJECTROOT}/lib/X11/fonts/xf86encodings/encodings.dir" ] ; then + xpstart_font_encodings_dir[$curr]="${XPROJECTROOT}/lib/X11/fonts/xf86encodings/encodings.dir" + elif [ -f "${XPROJECTROOT}/lib/X11/fonts/encodings/encodings.dir" ]; then + xpstart_font_encodings_dir[$curr]="${XPROJECTROOT}/lib/X11/fonts/encodings/encodings.dir" + else + xpstart_font_encodings_dir[$curr]="${XPROJECTROOT}/share/fonts/X11/encodings/encodings.dir"; + fi + fi + + unset FONT_ENCODINGS_DIRECTORY + if [ ! -f "${xpstart_font_encodings_dir[$curr]}" ] ; then + warning_echo "Can't find \"${xpstart_font_encodings_dir[$curr]}\", TrueType font support may not work." + fi + + export FONT_ENCODINGS_DIRECTORY="${xpstart_font_encodings_dir[$curr]}" + + # Generate font path (containing only valid font path elements) + # from input font path and filter expressions + curr_fp=$(echo "${xpstart_fontpath[$curr]}" | + fontpath2fontlist | + filter_fontlist "${xpstart_fontpath_acceptpattern[$curr]}" "${xpstart_fontpath_rejectpattern[$curr]}" | + filter_unsupported_fonts | + sort_scaleable_fonts_first | + validate_fontlist | + fontlist2fontpath) + + # Set Xserver auditing level option + unset curr_audit + if [ "${xpstart_auditlevel[$curr]}" != "" ] ; then + curr_audit="-audit ${xpstart_auditlevel[$curr]}" + fi + + # Set Xprt -XpFile option + unset curr_xpfile + if [ "${xpstart_xpfile[$curr]}" != "" ] ; then + curr_xpfile="-XpFile ${xpstart_xpfile[$curr]}" + fi + + # Set custom XPCONFIGDIR (if there is one) + unset XPCONFIGDIR + if [ "${xpstart_xpconfigdir[$curr]}" != "" ] ; then + export XPCONFIGDIR="${xpstart_xpconfigdir[$curr]}" + fi + + # If someone uses "-nolisten tcp" make sure we do not add a hostname to force local transport + if [ "$(echo "${xpstart_options[$curr]}" | egrep "nolisten.*tcp")" != "" ] ; then + xp_display=":${xpstart_displayid[$curr]}" + else + xp_display="${hostname}:${xpstart_displayid[$curr]}" + fi + + ( + ( + DAEMON_OPTS="${xpstart_options[$curr]} ${curr_xpfile} ${curr_audit} -fp ${curr_fp} :${xpstart_displayid[$curr]}" + + + + PIDFILE=/var/run/Xprt_${curr}.pid + start-stop-daemon --start --background --oknodo --quiet --pidfile ${PIDFILE} --make-pidfile --exec ${xpstart_xprt_binary[$curr]} -- $DAEMON_OPTS + + + server_pid="$(cat ${PIDFILE})" + + # Append the new server to the registry + lock_server_registry + echo "display=${xp_display} display_id=${xpstart_displayid[$curr]} pid=${server_pid}" >>"${XP_SERVERS}" + unlock_server_registry + + ) 2>&1 | while read i ; do echo "$i" | tee -a "${xpstart_logfile[$curr]}" | ${xpstart_logger[$curr]} ; done + ) <&- >&- 2>&- & + ) + fi + + curr=$(($curr + 1)) + done + + # Remove tmp. file created by |FindFreeXDisplayNum()| + rm -f "${lastdisplaynumreturned_store}" + + # Done. + lock_server_registry + echo "# EOF." >>"${XP_SERVERS}" + unlock_server_registry + return 0 +} + + +# Convenience function to check setup and start Xprt server(s) +do_start() +{ + if [ -f "${XP_SERVERS}" ] ; then + numservers="$(do_get_xpserverlist | wc -l)" + if [ ${numservers} -gt 0 ] ; then + verbose_echo "Xprint servers are already running." + return 0 + else + verbose_echo "Old server registry found, cleaning-up..." + do_stop + fi + fi + + # Check if we can write the registry file + touch "${XP_SERVERS}" 2>/dev/null + if [ ! -f "${XP_SERVERS}" ] ; then + error_echo "Cannot create \"${XP_SERVERS}\"." + # exit code 4 = user had insufficient privilege (LSB) + exit 4 + fi + + if ! setup_config ; then + error_echo "setup_config failed." + exit 1 + fi + + # Provide two paths here - one which simply starts the Xprt servers, + # assuming that there is a print spooler already running (or that + # ${XPCONFIG}/C/print/Xprinters provides static print queue entries + # (like for the PSspooldir print model)) and a 2nd path which + # explicitly checks if the print queue daemons are running + if true ; then + msg "Starting Xprint servers: Xprt." + start_servers + else + # Continue in the background if there is no spooler running yet (that + # we don't hold off the boot process nor run in a possible race-condition + # when /etc/init.d/lpd was not called yet but the runlevel script waits + # for us to finish first ... + if is_spooler_running ; then + msg "Starting Xprint servers: Xprt." + start_servers + else + msg "Starting Xprint servers (in the background): Xprt." + (wait_for_print_spooler ; start_servers) & + sleep 5 + fi + fi + + if [ "${CURRLOGNAME}" = "root" -a -d /var/lock/subsys/ ] ; then + touch /var/lock/subsys/xprint + fi +} + +# Convenience function to stop Xprt server(s) +do_stop() +{ + msg "Stopping Xprint servers: Xprt." + + # need to run setup_config to grab values of xpstart_xprt_binary, etc. + if ! setup_config ; then + error_echo "setup_config failed." + exit 1 + fi + + curr=0 + while [ $curr -lt $num_xpstart ] ; do + [ "${xpstart_xprt_binary[$curr]}" = "" ] && xpstart_xprt_binary[$curr]="${XPRT_BIN}"; + PIDFILE=/var/run/Xprt_${curr}.pid + if [ -f ${PIDFILE} ] ; then + start-stop-daemon --stop --oknodo --quiet --pidfile ${PIDFILE} --exec ${xpstart_xprt_binary[$curr]} + + + rm -f ${PIDFILE} + fi + curr=$(($curr + 1)) + done + + lock_server_registry + if [ -f "${XP_SERVERS}" ] ; then + reglist="$(cat "${XP_SERVERS}")" + rm -f "${XP_SERVERS}" + fi + unlock_server_registry + + if [ "${reglist}" != "" ] ; then + echo "${reglist}" | + grep "^display=.*:.* pid=[0-9]*$" | + while read i ; do + ( + eval ${i} + if pexists ${pid} ; then + kill ${pid} + fi + + # Remove the X sockets/pipes which are not in use anymore + # (It would be better if the Xservers would cleanup this + # automatically, but most Xservers do not do that... ;-( + # Note that this will not work on Solaris where applications + # must run with groupid="root" if they want to write into + # /tmp/.X11-unix/ and/or /tmp/.X11-pipe/) + if [ "${display_id}" != "" ] ; then + rm -f "/tmp/.X${display_id}-lock" 2>/dev/null + rm -f "/tmp/.X11-unix/X${display_id}" 2>/dev/null + rm -f "/tmp/.X11-pipe/X${display_id}" 2>/dev/null + fi + ) + done + fi + + if [ "${CURRLOGNAME}" = "root" -a -d /var/lock/subsys/ ] ; then + rm -f /var/lock/subsys/xprint + fi + + # Remove any outstanding (dead) locks and cleanup + rm -f "${XP_SERVERS}" + kill_dead_registry_locks +} + +# Convenience function to obtain a list of available Xprint servers +do_get_xpserverlist() +{ + if [ -f "${XP_PER_USER_SERVERS}" -o -f "${XP_GLOBAL_SERVERS}" ] ; then + xpserverlist=$( + # Enumerate both per-user and global servers (in that order) + ( + [ -f "${XP_PER_USER_SERVERS}" ] && cat "${XP_PER_USER_SERVERS}" + [ -f "${XP_GLOBAL_SERVERS}" ] && cat "${XP_GLOBAL_SERVERS}" + ) | + egrep "^display=.*:.* pid=[0-9]*$|^display=.*:[0-9]*$" | + while read i ; do + ( + pid="none" + eval ${i} + # Check if the Xprt process exists (if possible) + if [ "$pid" != "none" ] ; then + if pexists ${pid} ; then + echo ${display} + fi + else + echo ${display} + fi + ) + done | tr "[\n]" " " + ) + # Only produce output if we have some entries... + [ "${xpserverlist}" != "" ] && echo "${xpserverlist}" + fi +} + +do_restart() +{ + msg "Restarting Xprint server(s): Xprt." + do_stop + sleep 1 + do_start +} + +do_diag() +{ + echo "##### Diag start $(date)." + + # General info + echo "## General info start." + ( + echo "PATH=\"${PATH}\"" + echo "TZ=\"${TZ}\"" + echo "LANG=\"${LANG}\"" + echo "uname -a=\"$(uname -a)\"" + echo "uname -s=\"$(uname -s)\"" + echo "uname -p=\"$(uname -p)\"" + echo "uname -i=\"$(uname -i)\"" + echo "uname -m=\"$(uname -m)\"" + echo "has /etc/SuSE-release ... $([ -f "/etc/SuSE-release" ] && echo "yes" || echo "no")" + echo "has /etc/redhat-release ... $([ -f "/etc/redhat-release" ] && echo "yes" || echo "no")" + echo "has /etc/debian_version ... $([ -f "/etc/debian_version" ] && echo "yes" || echo "no")" + echo "how many Xprt servers are running ...$(ps -ef | fgrep Xprt | fgrep -v "grep" | wc -l)" + ) 2>&1 | while read i ; do echo " $i" ; done + echo "## General info end." + + # Testing font paths + echo "## Testing font paths start." + ( + get_system_fontlist | + filter_unsupported_fonts | + sort_scaleable_fonts_first | + validate_fontlist | while read d ; do + echo "#### Testing \"${d}\" ..." + if [ ! -d "$d" ] ; then + echo "# Error: $d does not exists." + continue + fi + if [ ! -r "$d" ] ; then + echo "# Error: $d not readable." + continue + fi + if [ ! -f "${d}/fonts.dir" ] ; then + echo "# Error: ${d}/fonts.dir not found." + continue + else + if [ ! -r "${d}/fonts.dir" ] ; then + echo "# Error: ${d}/fonts.dir not readable." + continue + fi + fi + if [ -f "${d}/fonts.alias" ] ; then + if [ ! -r "${d}/fonts.alias" ] ; then + echo "# Error: ${d}/fonts.alias not readable." + fi + fi + + if [ "$(cat "${d}/fonts.dir" | fgrep 'cursor')" != "" ] ; then + echo "${d}/fonts.dir has cursor font." + fi + if [ "$(cat "${d}/fonts.dir" | fgrep 'fixed')" != "" ] ; then + echo "${d}/fonts.dir has fixed font." + fi + + if [ -r "${d}/fonts.alias" ] ; then + if [ "$(cat "${d}/fonts.alias" | fgrep 'cursor')" != "" ] ; then + echo "${d}/fonts.alias has cursor font." + fi + if [ "$(cat "${d}/fonts.alias" | fgrep 'fixed')" != "" ] ; then + echo "${d}/fonts.alias has fixed font." + fi + fi + + linenum=0 + cat "${d}/fonts.dir" | while read i1 i2 i3 i4 ; do + linenum=$((${linenum} + 1)) + [ ${linenum} -eq 1 ] && continue + + if [ ! -f "${d}/${i1}" ] ; then + echo "ERROR: ${d}/fonts.dir line ${linenum} has non-exististant font \"${i1}\" (=\"${i1} ${i2} ${i3} ${i4}\")" + fi + done + done + ) 2>&1 | while read i ; do echo " $i" ; done + echo "## Testing font paths end." + + echo "##### Diag End $(date)." +} + +# Set platform-defaults for setup_config() +setup_config_defaults() +{ + curr_num_xpstart="${1}" + + #### Defaults for Linux/Solaris + # Start Xprt using builtin XPCONFIGDIR at a free display numer + # (Solaris(=SunOS5.x)'s /usr/openwin/bin/Xprt supports TrueType fonts, + # therefore we don't need to filter them) + xpstart_fontpath[${curr_num_xpstart}]=""; + xpstart_fontpath_acceptpattern[${curr_num_xpstart}]=".*"; + xpstart_fontpath_rejectpattern[${curr_num_xpstart}]="/Speedo|/F3bitmaps|/F3"; + xpstart_displayid[${curr_num_xpstart}]=""; + xpstart_xpconfigdir[${curr_num_xpstart}]=""; + xpstart_xpfile[${curr_num_xpstart}]=""; + xpstart_auditlevel[${curr_num_xpstart}]="4"; + xpstart_options[${curr_num_xpstart}]=""; + xpstart_logger[${curr_num_xpstart}]=""; + # Check whether we have /dev/stderr (needed for old AIX + old Debian) + if [ -w "/dev/stderr" ] ; then + xpstart_logfile[${curr_num_xpstart}]="/dev/stderr"; + else + xpstart_logfile[${curr_num_xpstart}]="/dev/tty"; + fi + xpstart_xprt_binary[${curr_num_xpstart}]=""; + + # Custom rules for the GISWxprintglue package on Solaris + # (which uses Solaris's /usr/openwin/bin/Xprt but a custom config) + if [ "${XPCUSTOMGLUE}" = "GISWxprintglue" ] ; then + xpstart_xpconfigdir[${curr_num_xpstart}]="/opt/GISWxprintglue/server/etc/XpConfig" + xpstart_xprt_binary[${curr_num_xpstart}]="/usr/openwin/bin/Xprt" + fi + # Custom rules for the GISWxprint package on Solaris + # (which uses both it's own Xprt and a custom config) + if [ "${XPCUSTOMGLUE}" = "GISWxprint" ] ; then + xpstart_xpconfigdir[${curr_num_xpstart}]="/opt/GISWxprint/server/etc/XpConfig" + xpstart_xprt_binary[${curr_num_xpstart}]="/opt/GISWxprint/bin/Xprt" + xpstart_font_encodings_dir[${curr_num_xpstart}]="/opt/GISWxprint/lib/X11/fonts/encodings/encodings.dir" + fi + + ####################################################### + ### + ### Debian Xprint package default configuration + ### + if [ "${XPCUSTOMGLUE}" = "DebianGlue" ] ; then + # Set XPCONFIGDIR=/usr/share/Xprint/xserver + xpstart_xpconfigdir[${curr_num_xpstart}]="/usr/share/Xprint/xserver"; + + # Use fixed display ID (":64"), or else all client programs will have to be + # restarted simply to update XPSERVERLIST to the latest ID when upgrading, + # which would be a nightmare. + xpstart_displayid[${curr_num_xpstart}]=64; + + # Do not send any messages to console + xpstart_logfile[${curr_num_xpstart}]="/dev/null"; + + # By default use binary provided by Debian's "xprt-xprintorg" package + # (=/usr/bin/Xprt), otherwise leave blank (e.g. use script's default + # (=/usr/X11R6/bin/Xprt)) + if [ -x "/usr/bin/Xprt" ] ; then + xpstart_xprt_binary[${curr_num_xpstart}]="/usr/bin/Xprt"; + fi + fi + ### + ### End Debian default configuration + ### + ####################################################### +} + +fetch_etc_initd_xprint_envvars() +{ + curr_num_xpstart="${1}" + + ## Process some $ETC_INITD_XPRINT_* vars after all which may be used by + # a user to override the hardcoded values here when starting Xprt per-user + # (a more flexible way is to provide an own setup config script in + # "~./Xprint_per_user_startup" - see above) + if [ "${ETC_INITD_XPRINT_XPRT_PATH}" != "" ] ; then + xpstart_xprt_binary[${curr_num_xpstart}]="${ETC_INITD_XPRINT_XPRT_PATH}" + fi + if [ "${ETC_INITD_XPRINT_XPCONFIGDIR}" != "" ] ; then + xpstart_xpconfigdir[${curr_num_xpstart}]="${ETC_INITD_XPRINT_XPCONFIGDIR}" + fi + if [ "${ETC_INITD_XPRINT_XPFILE}" != "" ] ; then + xpstart_xpfile[${curr_num_xpstart}]="${ETC_INITD_XPRINT_XPFILE}" + fi + if [ "${ETC_INITD_XPRINT_LOGFILE}" != "" ] ; then + xpstart_logfile[${curr_num_xpstart}]="${ETC_INITD_XPRINT_LOGFILE}" + fi + if [ "${ETC_INITD_XPRINT_DISPLAYID}" != "" ] ; then + xpstart_displayid[${curr_num_xpstart}]="${ETC_INITD_XPRINT_DISPLAYID}" + fi + if [ "${ETC_INITD_XPRINT_FONTPATH}" != "" ] ; then + xpstart_fontpath[${curr_num_xpstart}]="${ETC_INITD_XPRINT_FONTPATH}" + fi + if [ "${ETC_INITD_XPRINT_XPRT_OPTIONS}" != "" ] ; then + xpstart_options[${curr_num_xpstart}]="${ETC_INITD_XPRINT_XPRT_OPTIONS}" + fi + if [ "${ETC_INITD_XPRINT_AUDITLEVEL}" != "" ] ; then + xpstart_auditlevel[${curr_num_xpstart}]="${ETC_INITD_XPRINT_AUDITLEVEL}" + fi + if [ "${ETC_INITD_XPRINT_XF86ENCODINGSDIR}" != "" ] ; then + xpstart_font_encodings_dir[${curr_num_xpstart}]="${ETC_INITD_XPRINT_XF86ENCODINGSDIR}" + fi +} + +############################################################################ +# setup_config() sets the configuration parameters used to start one +# or more Xprint servers ("Xprt"). +# The following variables are used: +# - "num_xpstart" - number of servers to start +# - "xpstart_fontpath[index]" - custom font path. Leave blank if you want +# the platform-specific default +# - "xpstart_fontpath_acceptpattern[index]" - extended regular expression +# (see egrep(1)) used to filter the font path - items only pass this +# filter if they match the pattern (leave blank if you want to filter +# nothing) +# - "xpstart_fontpath_rejectpattern[index]" - extended regular expression +# (see egrep(1)) used to filter the font path - items only pass this +# filter if they do not match the pattern (leave blank if you want to +# filter nothing) +# - "xpstart_font_encodings_dir[index]" - location of "encodings.dir". +# Leave blank to use the default. +# - "xpstart_displayid[index]" - display id to use for the Xprint server +# (leave blank to choose the next available free display id) +# - "xpstart_xpconfigdir[index]" - value for custom XPCONFIGDIR (leave blank +# if you don not want that that XPCONFIGDIR is set at Xprt startup) +# - "xpstart_xpfile[index]" - value used for Xprt's "-XpFile" option (leave +# blank if you do not want to set this option) +# - "xpstart_auditlevel[index]" - set Xserver auditing level (leave blank to +# use no auditing) +# - "xpstart_options[index]" - set further Xprt options (leave blank to set +# no further options) +# - "xpstart_logger[index]" - utility which gets stderr/stdout messages from +# Xprt and sends them to a logging daemon. Leave blank to use /usr/bin/logger +# to send such messages to the lpr.notice syslog) +# - "xpstart_logfile[index]" - log file to append stderr/stdout messages from +# Xprt to. Leave blank to send messages to /dev/null +# - "xpstart_xprt_binary[index]" - set custom Xprt binary (leave blank to use +# the platform-specifc default) +setup_config() +{ + num_xpstart=0; + + if [ "${ETC_INITD_XPRINT_CUSTOM_SETUP_CONFIG}" != "" ] ; then + user_cfg="${ETC_INITD_XPRINT_CUSTOM_SETUP_CONFIG}" + else + user_cfg="${HOME}/.Xprint_per_user_startup" + fi + + # Source per-user ~/.Xprint_per_user_startup file if there is one + # (and do not use the script's defaults below) + if [ -r "${user_cfg}" ] ; then + # Define API version which should be checked by ${HOME}/.Xprint_per_user_startup + # ${HOME}/.Xprint_per_user_startup should bail-out if the version differ + etc_initd_xprint_api_version=2 + + # Source per-user settings script + . "${user_cfg}" + + # done with setting the config for per-user Xprt instances + return 0; + else + # Use /etc/init.d/xprint's builtin config + # Each entry should start with |setup_config_defaults| to pull the + # platform defaults and finish with |num_xpstart=$(($num_xpstart + 1))| + # to end the entry + + # Set platform-defaults + setup_config_defaults "${num_xpstart}" + + ## -- snip -- + + # Admins can put their stuff "in" here... + + ## -- snip -- + + # Override script's builtin values with those a user may set via the + # $ETC_INIITD_XPRINT_* env vars + fetch_etc_initd_xprint_envvars "${num_xpstart}" + + num_xpstart=$((${num_xpstart} + 1)) + + return 0; + fi + + #### Sample 1: + # # Start Xprt on a free display ID with custom XPCONFIGDIR and without + # # Speedo and TrueType fonts + # xpstart_fontpath_rejectpattern[$num_xpstart]="/Speedo|/TrueType|/TT(/$|$)|/TTF(/$|$)"; + # xpstart_xpconfigdir[$num_xpstart]="/home/gisburn/cwork/Xprint/Xprt_config/XpConfig"; + # xpstart_auditlevel[$num_xpstart]="4"; + # xpstart_options[$num_xpstart]="-ac -pn"; + #num_xpstart=$(($num_xpstart + 1)) + + + #### Sample 2: + # # Start Xprt without TrueType fonts on a display 55 with custom + # # XPCONFIGDIR + # xpstart_fontpath_rejectpattern[$num_xpstart]="/TrueType|/TT(/$|$)|/TTF(/$|$)"; + # xpstart_displayid[$num_xpstart]=55; + # xpstart_xpconfigdir[$num_xpstart]="/home/gisburn/cwork/Xprint/Xprt_config/XpConfig"; + # xpstart_auditlevel[$num_xpstart]=4; + # xpstart_options[$num_xpstart]="-ac -pn"; + #num_xpstart=$(($num_xpstart + 1)) + + #### Sample 3: + # # Start Xprt without TrueType fonts on a display 56 with custom + # # XPCONFIGDIR and alternate "Xprinters" file + # xpstart_fontpath_rejectpattern[$num_xpstart]="/TrueType|/TT(/$|$)|/TTF(/$|$)"; + # xpstart_displayid[$num_xpstart]=56; + # xpstart_xpconfigdir[$num_xpstart]="/etc/XpConfig/default"; + # xpstart_xpfile[$num_xpstart]="/etc/XpConfig/default/Xprinters_test2" + # xpstart_auditlevel[$num_xpstart]="4"; + # xpstart_options[$num_xpstart]="-ac -pn"; + # xpstart_xprt_binary[$num_xpstart]=""; + #num_xpstart=$(($num_xpstart + 1)) + + #### Sample 4: + # # Start Xprt with Solaris ISO-8859-7 (greek(="el") locale) fonts on + # # display 57 + # xpstart_fontpath[$num_xpstart]="/usr/openwin/lib/locale/iso_8859_7/X11/fonts/75dpi,/usr/openwin/lib/locale/iso_8859_7/X11/fonts/Type1,/usr/openwin/lib/X11/fonts/misc/"; + # xpstart_fontpath_acceptpattern[$num_xpstart]=""; + # xpstart_fontpath_rejectpattern[$num_xpstart]="_No_Match_"; + # xpstart_displayid[$num_xpstart]="57"; + # xpstart_auditlevel[$num_xpstart]="4"; + # xpstart_options[$num_xpstart]="-ac -pn"; + #num_xpstart=$(($num_xpstart + 1)) + + #### Sample 5: + # # Start Xprt with the font list of an existing Xserver (excluding Speedo fonts) on + # # display 58 + # # Note that this only works within a X session. At system boot time + # # there will be no $DISPLAY to fetch the information from!! + # xpstart_fontpath[$num_xpstart]="$(get_fontlist_from_display ${DISPLAY} | fontlist2fontpath)"; + # xpstart_fontpath_acceptpattern[$num_xpstart]=""; + # xpstart_fontpath_rejectpattern[$num_xpstart]=""; + # xpstart_displayid[$num_xpstart]="58"; + # xpstart_xpconfigdir[$num_xpstart]=""; + # xpstart_auditlevel[$num_xpstart]="4"; + # xpstart_options[$num_xpstart]="-ac -pn"; + # xpstart_xprt_binary[$num_xpstart]=""; + #num_xpstart=$(($num_xpstart + 1)) + + #### Sample 6: + # # List remote Xprt's here + # # (note that there is no test to check whether these DISPLAYs are valid!) + # xpstart_remote_server[$num_xpstart]="sera:12" ; num_xpstart=$(($num_xpstart + 1)) + # xpstart_remote_server[$num_xpstart]="gandalf:19" ; num_xpstart=$(($num_xpstart + 1)) +} + +############################################################################ + +# Main +case "$1" in + ## Start Xprint servers + 'start') + do_start + ;; + + ## Stop Xprint servers + # Note that this does _not_ kill Xprt instances started using this script + # by non-root users + 'stop') + do_stop + ;; + + ## Restart Xprint servers + 'restart') + do_restart + ;; + + ## Reload configuration without stopping and restarting + 'reload') + # not supported + msg "reload not supported, use 'restart' or 'force-reload'" + exit 3 + ;; + + ## Restart Xprint only if it is already running + 'condrestart'|'try-restart'|'force-reload') + # only restart if it is already running + [ -f /var/lock/subsys/xprint ] && do_restart || : + ;; + + ## Get list of all Xprint servers for this user + # (incl. per-user and system-wide instances) + 'get_xpserverlist') + do_get_xpserverlist + ;; + + ## Get status of Xprint servers, RedHat-style + 'status') + x="$(do_get_xpserverlist)" + if [ "${x}" != "" ] ; then + msg "Xprint (${x}) is running..." + exit 0 + else + msg "Xprint is stopped" + exit 3 + fi + ;; + + ## Wrapper + 'wrapper') + cmd="${2}" + [ "${cmd}" = "" ] && fatal_error "No command given." + shift ; shift + export XPSERVERLIST="$(do_get_xpserverlist)" + [ "${XPSERVERLIST}" = "" ] && fatal_error "No Xprint servers found." + exec "${cmd}" "$@" + ;; + + ## Wrapper for "xplsprinters" + 'lsprinters') + [ "${ETC_INITD_XPRINT_XPLSPRINTERS_PATH}" != "" ] && cmd="${ETC_INITD_XPRINT_XPLSPRINTERS_PATH}" + [ ! -x "${cmd}" -a "${XPCUSTOMGLUE}" = "GISWxprintglue" ] && cmd="/opt/GISWxprintglue/bin/xplsprinters" + [ ! -x "${cmd}" -a "${XPCUSTOMGLUE}" = "GISWxprint" ] && cmd="/opt/GISWxprint/bin/xplsprinters" + [ ! -x "${cmd}" -a "${XPROJECTROOT}" != "" ] && cmd="${XPROJECTROOT}/bin/xplsprinters" + [ ! -x "${cmd}" ] && cmd="/usr/bin/xplsprinters" + [ ! -x "${cmd}" ] && cmd="xplsprinters" + + shift + export XPSERVERLIST="$(do_get_xpserverlist)" + [ "${XPSERVERLIST}" = "" ] && fatal_error "No Xprint servers found." + exec "${cmd}" "$@" + ;; + + ## Diagnostics + 'diag') + do_diag + ;; + + ## Print usage + *) + msg "Usage: $0 { start | stop | restart | force-reload | status | condrestart | try-restart | wrapper | lsprinters | get_xpserverlist | diag }" + exit 2 +esac +exit 0 + +# EOF. --- xorg-server-1.3.0.0.dfsg.orig/debian/copyright +++ xorg-server-1.3.0.0.dfsg/debian/copyright @@ -0,0 +1,1103 @@ + Licenses + + The X.Org Foundation + + March 2004 + +1. Introduction + +The X.org Foundation X Window System distribution is a compilation of code +and documentation from many sources. This document is intended primarily as +a guide to the licenses used in the distribution: you must check each file +and/or package for precise redistribution terms. None-the-less, this summary +may be useful to many users. No software incorporating the XFree86 1.1 +license has been incorporated. + +This document is based on the compilation from XFree86. + +2. XFree86 License + +XFree86 code without an explicit copyright is covered by the following copy- +right/license: + +Copyright (C) 1994-2003 The XFree86 Project, 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, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is fur- +nished 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, FIT- +NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON- +NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the XFree86 Project shall not +be used in advertising or otherwise to promote the sale, use or other deal- +ings in this Software without prior written authorization from the XFree86 +Project. + +3. Other Licenses + +Portions of code are covered by the following licenses/copyrights. See indi- +vidual files for the copyright dates. + +3.1 X/MIT Copyrights + +3.1.1 X Consortium + +Copyright (C) X Consortium + +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 fur- +nished 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, FIT- +NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE X +CONSORTIUM 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 X Consortium 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 X Consortium. + +X Window System is a trademark of X Consortium, Inc. + +3.1.2 The Open Group + +Copyright The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that copyright +notice and this permission notice appear in supporting documentation. + +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, FIT- +NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP 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 Open Group 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 Open Group. + +3.2 Berkeley-based copyrights: + +o + +3.2.1 General + +Redistribution and use in source and binary forms, with or without modifica- +tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER- +CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE- +CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTH- +ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. + +3.2.2 UCB/LBL + +Copyright (c) 1993 The Regents of the University of California. All rights +reserved. + +This software was developed by the Computer Systems Engineering group at +Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and contributed to +Berkeley. + +All advertising materials mentioning features or use of this software must +display the following acknowledgement: This product includes software devel- +oped by the University of California, Lawrence Berkeley Laboratory. + +Redistribution and use in source and binary forms, with or without modifica- +tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. All advertising materials mentioning features or use of this software + must display the following acknowledgement: This product includes soft- + ware developed by the University of California, Berkeley and its con- + tributors. + + 4. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DIS- +CLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +3.2.3 The NetBSD Foundation, Inc. + +Copyright (c) 2003 The NetBSD Foundation, Inc. All rights reserved. + +This code is derived from software contributed to The NetBSD Foundation by +Ben Collver + +Redistribution and use in source and binary forms, with or without modifica- +tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. All advertising materials mentioning features or use of this software + must display the following acknowledgement: This product includes soft- + ware developed by the NetBSD Foundation, Inc. and its contributors. + + 4. Neither the name of The NetBSD Foundation nor the names of its con- + tributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSE- +QUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAM- +AGE. + +3.2.4 Theodore Ts'o. + +Copyright Theodore Ts'o, 1994, 1995, 1996, 1997, 1998, 1999. All rights +reserved. + +Redistribution and use in source and binary forms, with or without modifica- +tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + and the entire permission notice in its entirety, including the dis- + claimer of warranties. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. he name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE, ALL OF WHICH ARE HEREBY DISCLAIMED. IN NO +EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE- +CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTH- +ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF NOT +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +3.2.5 Theo de Raadt and Damien Miller + +Copyright (c) 1995,1999 Theo de Raadt. All rights reserved. Copyright (c) +2001-2002 Damien Miller. All rights reserved. + +Redistribution and use in source and binary forms, with or without modifica- +tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER- +CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE- +CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTH- +ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. + +3.2.6 Todd C. Miller + +Copyright (c) 1998 Todd C. Miller + +Permission to use, copy, modify, and distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright +notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND TODD C. MILLER DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MER- +CHANTABILITY AND FITNESS. IN NO EVENT SHALL TODD C. MILLER BE LIABLE FOR ANY +SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CON- +TRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION +WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +3.2.7 Thomas Winischhofer + +Copyright (C) 2001-2004 Thomas Winischhofer + +Redistribution and use in source and binary forms, with or without modifica- +tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESSED OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE- +CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTH- +ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. + +3.3 NVIDIA Corp + +Copyright (c) 1996 NVIDIA, Corp. All rights reserved. + +NOTICE TO USER: The source code is copyrighted under U.S. and international +laws. NVIDIA, Corp. of Sunnyvale, California owns the copyright and as +design patents pending on the design and interface of the NV chips. Users +and possessors of this source code are hereby granted a nonexclusive, roy- +alty-free copyright and design patent license to use this code in individual +and commercial software. + +Any use of this source code must include, in the user documentation and +internal comments to the code, notices to the end user as follows: + +Copyright (c) 1996 NVIDIA, Corp. NVIDIA design patents pending in the U.S. +and foreign countries. + +NVIDIA, CORP. MAKES NO REPRESENTATION ABOUT THE SUITABILITY OF THIS SOURCE +CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WAR- +RANTY OF ANY KIND. NVIDIA, CORP. DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOURCE CODE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA, CORP. BE LIABLE +FOR ANY SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY DAM- +AGES 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 SOURCE CODE. + +3.4 GLX Public License + +GLX PUBLIC LICENSE (Version 1.0 (2/11/99)) ("License") + +Subject to any third party claims, Silicon Graphics, Inc. ("SGI") hereby +grants permission to Recipient (defined below), under Recipient's copyrights +in the Original Software (defined below), to use, copy, modify, merge, pub- +lish, distribute, sublicense and/or sell copies of Subject Software (defined +below), and to permit persons to whom the Subject Software is furnished in +accordance with this License to do the same, subject to all of the following +terms and conditions, which Recipient accepts by engaging in any such use, +copying, modifying, merging, publishing, distributing, sublicensing or sell- +ing: + +1. Definitions. + + (a) "Original Software" means source code of computer software code + which is described in Exhibit A as Original Software. + + (b) "Modifications" means any addition to or deletion from the sub- + stance or structure of either the Original Software or any previous + Modifications. When Subject Software is released as a series of + files, a Modification means (i) any addition to or deletion from + the contents of a file containing Original Software or previous + Modifications and (ii) any new file that contains any part of the + Original Code or previous Modifications. + + (c) "Subject Software" means the Original Software or Modifications + or the combination of the Original Software and Modifications, or + portions of any of the foregoing. + + (d) "Recipient" means an individual or a legal entity exercising + rights under, and complying with all of the terms of, this License. + For legal entities, "Recipient" includes any entity which controls, + is controlled by, or is under common control with Recipient. For + purposes of this definition, "control" of an entity means (a) the + power, direct or indirect, to direct or manage such entity, or (b) + ownership of fifty percent (50%) or more of the outstanding shares + or beneficial ownership of such entity. + +2. Redistribution of Source Code Subject to These Terms. Redistributions of +Subject Software in source code form must retain the notice set forth in +Exhibit A, below, in every file. A copy of this License must be included in +any documentation for such Subject Software where the recipients' rights +relating to Subject Software are described. Recipient may distribute the +source code version of Subject Software under a license of Recipient's +choice, which may contain terms different from this License, provided that +(i) Recipient is in compliance with the terms of this License, and (ii) the +license terms include this Section 2 and Sections 3, 4, 7, 8, 10, 12 and 13 +of this License, which terms may not be modified or superseded by any other +terms of such license. If Recipient distributes the source code version under +a different license Recipient must make it absolutely clear that any terms +which differ from this License are offered by Recipient alone, not by SGI. +Recipient hereby agrees to indemnify SGI for any liability incurred by SGI as +a result of any such terms Recipient offers. + +3. Redistribution in Executable Form. The notice set forth in Exhibit A must +be conspicuously included in any notice in an executable version of Subject +Software, related documentation or collateral in which Recipient describes +the user's rights relating to the Subject Software. Recipient may distribute +the executable version of Subject Software under a license of Recipient's +choice, which may contain terms different from this License, provided that +(i) Recipient is in compliance with the terms of this License, and (ii) the +license terms include this Section 3 and Sections 4, 7, 8, 10, 12 and 13 of +this License, which terms may not be modified or superseded by any other +terms of such license. If Recipient distributes the executable version under +a different license Recipient must make it absolutely clear that any terms +which differ from this License are offered by Recipient alone, not by SGI. +Recipient hereby agrees to indemnify SGI for any liability incurred by SGI as +a result of any such terms Recipient offers. + +4. Termination. This License and the rights granted hereunder will terminate +automatically if Recipient fails to comply with terms herein and fails to +cure such breach within 30 days of the breach. Any sublicense to the Subject +Software which is properly granted shall survive any termination of this +License absent termination by the terms of such sublicense. Provisions which, +by their nature, must remain in effect beyond the termination of this License +shall survive. + +5. No Trademark Rights. This License does not grant any rights to use any +trade name, trademark or service mark whatsoever. No trade name, trademark or +service mark of SGI may be used to endorse or promote products derived from +the Subject Software without prior written permission of SGI. + +6. No Other Rights. This License does not grant any rights with respect to +the OpenGL API or to any software or hardware implementation thereof or to +any other software whatsoever, nor shall any other rights or licenses not +expressly granted hereunder arise by implication, estoppel or otherwise with +respect to the Subject Software. Title to and ownership of the Original Soft- +ware at all times remains with SGI. All rights in the Original Software not +expressly granted under this License are reserved. + +7. Compliance with Laws; Non-Infringement. Recipient shall comply with all +applicable laws and regulations in connection with use and distribution of +the Subject Software, including but not limited to, all export and import +control laws and regulations of the U.S. government and other countries. +Recipient may not distribute Subject Software that (i) in any way infringes +(directly or contributorily) the rights (including patent, copyright, trade +secret, trademark or other intellectual property rights of any kind) of any +other person or entity or (ii) breaches any representation or warranty, +express, implied or statutory, which under any applicable law it might be +deemed to have been distributed. + +8. Claims of Infringement. If Recipient at any time has knowledge of any one +or more third party claims that reproduction, modification, use, distribu- +tion, import or sale of Subject Software (including particular functionality +or code incorporated in Subject Software) infringes the third party's intel- +lectual property rights, Recipient must place in a well-identified web page +bearing the title "LEGAL" a description of each such claim and a description +of the party making each such claim in sufficient detail that a user of the +Subject Software will know whom to contact regarding the claim. Also, upon +gaining such knowledge of any such claim, Recipient must conspicuously +include the URL for such web page in the Exhibit A notice required under Sec- +tions 2 and 3, above, and in the text of any related documentation, license +agreement or collateral in which Recipient describes end user's rights relat- +ing to the Subject Software. If Recipient obtains such knowledge after it +makes Subject Software available to any other person or entity, Recipient +shall take other steps (such as notifying appropriate mailing lists or news- +groups) reasonably calculated to inform those who received the Subject Soft- +ware that new knowledge has been obtained. + +9. DISCLAIMER OF WARRANTY. SUBJECT SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, +WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT +LIMITATION, WARRANTIES THAT THE SUBJECT SOFTWARE IS FREE OF DEFECTS, MER- +CHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON- INFRINGING. SGI ASSUMES NO +RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE. SHOULD ANY SOFTWARE +PROVE DEFECTIVE IN ANY RESPECT, SGI ASSUMES NO COST OR LIABILITY FOR ANY SER- +VICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN +ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY SUBJECT SOFTWARE IS AUTHORIZED +HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +10. LIMITATION OF LIABILITY. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THE- +ORY, WHETHER TORT (INCLUDING, WITHOUT LIMITATION, NEGLIGENCE OR STRICT LIA- +BILITY), CONTRACT, OR OTHERWISE, SHALL SGI OR ANY SGI LICENSOR BE LIABLE FOR +ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY +CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK +STOPPAGE, LOSS OF DATA, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER +COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF +THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY +TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SGI's NEGLIGENCE TO +THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO +NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, +SO THAT EXCLUSION AND LIMITATION MAY NOT APPLY TO RECIPIENT. + +11. Indemnity. Recipient shall be solely responsible for damages arising, +directly or indirectly, out of its utilization of rights under this License. +Recipient will defend, indemnify and hold harmless Silicon Graphics, Inc. +from and against any loss, liability, damages, costs or expenses (including +the payment of reasonable attorneys fees) arising out of Recipient's use, +modification, reproduction and distribution of the Subject Software or out of +any representation or warranty made by Recipient. + +12. U.S. Government End Users. The Subject Software is a "commercial item" +consisting of "commercial computer software" as such terms are defined in +title 48 of the Code of Federal Regulations and all U.S. Government End +Users acquire only the rights set forth in this License and are subject to +the terms of this License. + +13. Miscellaneous. This License represents the complete agreement concerning +subject matter hereof. If any provision of this License is held to be unen- +forceable, such provision shall be reformed so as to achieve as nearly as +possible the same economic effect as the original provision and the remainder +of this License will remain in effect. This License shall be governed by and +construed in accordance with the laws of the United States and the State of +California as applied to agreements entered into and to be performed entirely +within California between California residents. Any litigation relating to +this License shall be subject to the exclusive jurisdiction of the Federal +Courts of the Northern District of California (or, absent subject matter +jurisdiction in such courts, the courts of the State of California), with +venue lying exclusively in Santa Clara County, California, with the losing +party responsible for costs, including without limitation, court costs and +reasonable attorneys fees and expenses. The application of the United Nations +Convention on Contracts for the International Sale of Goods is expressly +excluded. Any law or regulation which provides that the language of a con- +tract shall be construed against the drafter shall not apply to this License. + +Exhibit A + +The contents of this file are subject to Sections 2, 3, 4, 7, 8, 10, 12 and +13 of the GLX Public License Version 1.0 (the "License"). You may not use +this file except in compliance with those sections of the License. You may +obtain a copy of the License at Silicon Graphics, Inc., attn: Legal Services, +2011 N. Shoreline Blvd., Mountain View, CA 94043 or at +http://www.sgi.com/software/opensource/glx/license.html. + +Software distributed under the License is distributed on an "AS IS" basis. +ALL WARRANTIES ARE DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED +WARRANTIES OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR PURPOSE OR OF NON- +INFRINGEMENT. See the License for the specific language governing rights and +limitations under the License. + +The Original Software is GLX version 1.2 source code, released February, +1999. The developer of the Original Software is Silicon Graphics, Inc. Those +portions of the Subject Software created by Silicon Graphics, Inc. are Copy- +right (c) 1991-9 Silicon Graphics, Inc. All Rights Reserved. + +3.5 CID Font Code Public License + +CID FONT CODE PUBLIC LICENSE (Version 1.0 (3/31/99))("License") + +Subject to any applicable third party claims, Silicon Graphics, Inc. ("SGI") +hereby grants permission to Recipient (defined below), under SGI's copyrights +in the Original Software (defined below), to use, copy, modify, merge, pub- +lish, distribute, sublicense and/or sell copies of Subject Software (defined +below) in both source code and executable form, and to permit persons to whom +the Subject Software is furnished in accordance with this License to do the +same, subject to all of the following terms and conditions, which Recipient +accepts by engaging in any such use, copying, modifying, merging, publica- +tion, distributing, sublicensing or selling: + +1. Definitions. + + a. "Original Software" means source code of computer software code + that is described in Exhibit A as Original Software. + + b. "Modifications" means any addition to or deletion from the sub- + stance or structure of either the Original Software or any previous + Modifications. When Subject Software is released as a series of + files, a Modification means (i) any addition to or deletion from + the contents of a file containing Original Software or previous + Modifications and (ii) any new file that contains any part of the + Original Code or previous Modifications. + + c. "Subject Software" means the Original Software or Modifications + or the combination of the Original Software and Modifications, or + portions of any of the foregoing. + + d. "Recipient" means an individual or a legal entity exercising + rights under the terms of this License. For legal entities, "Recip- + ient" includes any entity that controls, is controlled by, or is + under common control with Recipient. For purposes of this defini- + tion, "control" of an entity means (i) the power, direct or indi- + rect, to direct or manage such entity, or (ii) ownership of fifty + percent (50%) or more of the outstanding shares or beneficial own- + ership of such entity. + + e. "Required Notice" means the notice set forth in Exhibit A to + this License. + + f. "Accompanying Technology" means any software or other technology + that is not a Modification and that is distributed or made publicly + available by Recipient with the Subject Software. Separate soft- + ware files that do not contain any Original Software or any previ- + ous Modification shall not be deemed a Modification, even if such + software files are aggregated as part of a product, or in any + medium of storage, with any file that does contain Original Soft- + ware or any previous Modification. + +2. License Terms. All distribution of the Subject Software must be made sub- +ject to the terms of this License. A copy of this License and the Required +Notice must be included in any documentation for Subject Software where +Recipient's rights relating to Subject Software and/or any Accompanying Tech- +nology are described. Distributions of Subject Software in source code form +must also include the Required Notice in every file distributed. In addition, +a ReadMe file entitled "Important Legal Notice" must be distributed with each +distribution of one or more files that incorporate Subject Software. That +file must be included with distributions made in both source code and exe- +cutable form. A copy of the License and the Required Notice must be included +in that file. Recipient may distribute Accompanying Technology under a +license of Recipient's choice, which may contain terms different from this +License, provided that (i) Recipient is in compliance with the terms of this +License, (ii) such other license terms do not modify or supersede the terms +of this License as applicable to the Subject Software, (iii) Recipient hereby +indemnifies SGI for any liability incurred by SGI as a result of the distri- +bution of Accompanying Technology or the use of other license terms. + +3. Termination. This License and the rights granted hereunder will terminate +automatically if Recipient fails to comply with terms herein and fails to +cure such breach within 30 days of the breach. Any sublicense to the Subject +Software that is properly granted shall survive any termination of this +License absent termination by the terms of such sublicense. Provisions which, +by their nature, must remain in effect beyond the termination of this License +shall survive. + +4. Trademark Rights. This License does not grant any rights to use any trade +name, trademark or service mark whatsoever. No trade name, trademark or ser- +vice mark of SGI may be used to endorse or promote products derived from or +incorporating any Subject Software without prior written permission of SGI. + +5. No Other Rights. No rights or licenses not expressly granted hereunder +shall arise by implication, estoppel or otherwise. Title to and ownership of +the Original Software at all times remains with SGI. All rights in the Origi- +nal Software not expressly granted under this License are reserved. + +6. Compliance with Laws; Non-Infringement. Recipient shall comply with all +applicable laws and regulations in connection with use and distribution of +the Subject Software, including but not limited to, all export and import +control laws and regulations of the U.S. government and other countries. +Recipient may not distribute Subject Software that (i) in any way infringes +(directly or contributorily) the rights (including patent, copyright, trade +secret, trademark or other intellectual property rights of any kind) of any +other person or entity, or (ii) breaches any representation or warranty, +express, implied or statutory, which under any applicable law it might be +deemed to have been distributed. + +7. Claims of Infringement. If Recipient at any time has knowledge of any one +or more third party claims that reproduction, modification, use, distribu- +tion, import or sale of Subject Software (including particular functionality +or code incorporated in Subject Software) infringes the third party's intel- +lectual property rights, Recipient must place in a well-identified web page +bearing the title "LEGAL" a description of each such claim and a description +of the party making each such claim in sufficient detail that a user of the +Subject Software will know whom to contact regarding the claim. Also, upon +gaining such knowledge of any such claim, Recipient must conspicuously +include the URL for such web page in the Required Notice, and in the text of +any related documentation, license agreement or collateral in which Recipient +describes end user's rights relating to the Subject Software. If Recipient +obtains such knowledge after it makes Subject Software available to any other +person or entity, Recipient shall take other steps (such as notifying appro- +priate mailing lists or newsgroups) reasonably calculated to provide such +knowledge to those who received the Subject Software. + +8. DISCLAIMER OF WARRANTY. SUBJECT SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, +WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT +LIMITATION, WARRANTIES THAT THE SUBJECT SOFTWARE IS FREE OF DEFECTS, MER- +CHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. SGI ASSUMES NO +RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE. SHOULD ANY SOFTWARE +PROVE DEFECTIVE IN ANY RESPECT, SGI ASSUMES NO COST OR LIABILITY FOR ANY SER- +VICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN +ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY SUBJECT SOFTWARE IS AUTHORIZED +HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +9. LIMITATION OF LIABILITY. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, +WHETHER TORT (INCLUDING, WITHOUT LIMITATION, NEGLIGENCE OR STRICT LIABILITY), +CONTRACT, OR OTHERWISE, SHALL SGI OR ANY SGI LICENSOR 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 SUBJECT SOFTWARE OR +THE USE OR OTHER DEALINGS IN THE SUBJECT SOFTWARE. SOME JURISDICTIONS DO NOT +ALLOW THE EXCLUSION OR LIMITATION OF CERTAIN DAMAGES, SO THIS EXCLUSION AND +LIMITATION MAY NOT APPLY TO RECIPIENT TO THE EXTENT SO DISALLOWED. + +10. Indemnity. Recipient shall be solely responsible for damages arising, +directly or indirectly, out of its utilization of rights under this License. +Recipient will defend, indemnify and hold SGI and its successors and assigns +harmless from and against any loss, liability, damages, costs or expenses +(including the payment of reasonable attorneys fees) arising out of (Recipi- +ent's use, modification, reproduction and distribution of the Subject Soft- +ware or out of any representation or warranty made by Recipient. + +11. U.S. Government End Users. The Subject Software is a "commercial item" +consisting of "commercial computer software" as such terms are defined in +title 48 of the Code of Federal Regulations and all U.S. Government End Users +acquire only the rights set forth in this License and are subject to the +terms of this License. + +12. Miscellaneous. This License represents the complete agreement concerning +subject matter hereof. If any provision of this License is held to be unen- +forceable by any judicial or administrative authority having proper jurisdic- +tion with respect thereto, such provision shall be reformed so as to achieve +as nearly as possible the same economic effect as the original provision and +the remainder of this License will remain in effect. This License shall be +governed by and construed in accordance with the laws of the United States +and the State of California as applied to agreements entered into and to be +performed entirely within California between California residents. Any liti- +gation relating to this License shall be subject to the exclusive jurisdic- +tion of the Federal Courts of the Northern District of California (or, absent +subject matter jurisdiction in such courts, the courts of the State of Cali- +fornia), with venue lying exclusively in Santa Clara County, California, with +the losing party responsible for costs, including without limitation, court +costs and reasonable attorneys fees and expenses. The application of the +United Nations Convention on Contracts for the International Sale of Goods is +expressly excluded. Any law or regulation that provides that the language of +a contract shall be construed against the drafter shall not apply to this +License. + +Exhibit A + +Copyright (c) 1994-1999 Silicon Graphics, Inc. + +The contents of this file are subject to the CID Font Code Public License +Version 1.0 (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., attn: Legal Services, 2011 N. Shoreline Blvd., Mountain View, CA 94043 +or at http://www.sgi.com/software/opensource/cid/license.html + +Software distributed under the License is distributed on an "AS IS" basis. +ALL WARRANTIES ARE DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED +WARRANTIES OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR PURPOSE OR OF NON- +INFRINGEMENT. See the License for the specific language governing rights and +limitations under the License. + +The Original Software (as defined in the License) is CID font code that was +developed by Silicon Graphics, Inc. Those portions of the Subject Software +(as defined in the License) that were created by Silicon Graphics, Inc. are +Copyright (c) 1994-1999 Silicon Graphics, Inc. All Rights Reserved. + +[NOTE: When using this text in connection with Subject Software delivered +solely in object code form, Recipient may replace the words "this file" with +"this software" in both the first and second sentences.] + +3.6 Bitstream Vera Fonts Copyright + +The fonts have a generous copyright, allowing derivative works (as long as +"Bitstream" or "Vera" are not in the names), and full redistribution (so long +as they are not *sold* by themselves). They can be be bundled, redistributed +and sold with any software. + +The fonts are distributed under the following copyright: + +Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is +a trademark of Bitstream, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of the fonts accompanying this license ("Fonts") and associated documentation +files (the "Font Software"), to reproduce and distribute the Font Software, +including without limitation the rights to use, copy, merge, publish, dis- +tribute, and/or sell copies of the Font Software, and to permit persons to +whom the Font Software is furnished to do so, subject to the following condi- +tions: + +The above copyright and trademark notices and this permission notice shall be +included in all copies of one or more of the Font Software typefaces. + +The Font Software may be modified, altered, or added to, and in particular +the designs of glyphs or characters in the Fonts may be modified and addi- +tional glyphs or characters may be added to the Fonts, only if the fonts are +renamed to names not containing either the words "Bitstream" or the word +"Vera". + +This License becomes null and void to the extent applicable to Fonts or Font +Software that has been modified and is distributed under the "Bitstream Vera" +names. + +The Font Software may be sold as part of a larger software package but no +copy of one or more of the Font Software typefaces may be sold by itself. + +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, +TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDA- +TION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GEN- +ERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR +INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFT- +WARE. + +Except as contained in this notice, the names of Gnome, the Gnome Foundation, +and Bitstream Inc., shall not be used in advertising or otherwise to promote +the sale, use or other dealings in this Font Software without prior written +authorization from the Gnome Foundation or Bitstream Inc., respectively. For +further information, contact: fonts at gnome dot org. + +3.7 Bigelow & Holmes Inc and URW++ GmbH Luxi font license + +Luxi fonts copyright (c) 2001 by Bigelow & Holmes Inc. Luxi font instruction +code copyright (c) 2001 by URW++ GmbH. All Rights Reserved. Luxi is a regis- +tered trademark of Bigelow & Holmes Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of these Fonts and associated documentation files (the "Font Software"), to +deal in the Font Software, including without limitation the rights to use, +copy, merge, publish, distribute, sublicense, and/or sell copies of the Font +Software, and to permit persons to whom the Font Software is furnished to do +so, subject to the following conditions: + +The above copyright and trademark notices and this permission notice shall be +included in all copies of one or more of the Font Software. + +The Font Software may not be modified, altered, or added to, and in particu- +lar the designs of glyphs or characters in the Fonts may not be modified nor +may additional glyphs or characters be added to the Fonts. This License +becomes null and void when the Fonts or Font Software have been modified. + +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, +TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BIGELOW & HOLMES INC. OR URW++ +GMBH. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GEN- +ERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR +INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFT- +WARE. + +Except as contained in this notice, the names of Bigelow & Holmes Inc. and +URW++ GmbH. shall not be used in advertising or otherwise to promote the +sale, use or other dealings in this Font Software without prior written +authorization from Bigelow & Holmes Inc. and URW++ GmbH. + +For further information, contact: + +info@urwpp.de or design@bigelowandholmes.com + + $Id: LICENSE,v 1.3 2004/09/03 23:41:21 kem Exp $ + + +======================================================================== +Certain files in this package (e.g. GL/glx/g_*) are covered by the SGI +Free Software License B, Version 1.1, http://oss.sgi.com/projects/FreeB + +SGI FREE SOFTWARE LICENSE B (Version 1.1 [02/22/2000]) +1. Definitions. +1.1. "Additional Notice Provisions" means such additional provisions as appear in the +Notice in Original Code under the heading "Additional Notice Provisions." +1.2. "Covered Code" means the Original Code or Modifications, or any combination thereof. +1.3. "Hardware" means any physical device that accepts input, processes input, stores the +results of processing, and/or provides output. +1.4. "Larger Work" means a work that combines Covered Code or portions thereof with +code not governed by the terms of this License. +1.5. "Licensable" means having the right to grant, to the maximum extent possible, whether +at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein. +1.6. "License" means this document. +1.7. "Licensed Patents" means patent claims Licensable by SGI that are infringed by the use +or sale of Original Code or any Modifications provided by SGI, or any combination thereof. +1.8. "Modifications" means any addition to or deletion from the substance or structure of the +Original Code or any previous Modifications. When Covered Code is released as a series of files, +a Modification is: +A. Any addition to the contents of a file containing Original Code and/or addition to or +deletion from the contents of a file containing previous Modifications. +B. Any new file that contains any part of the Original Code or previous Modifications. +1.9. "Notice" means any notice in Original Code or Covered Code, as required by and in +compliance with this License. +1.10. "Original Code" means source code of computer software code that is described in the +source code Notice required by Exhibit A as Original Code, and updates and error corrections +specifically thereto. +1.11. "Recipient" means an individual or a legal entity exercising rights under, and complying +with all of the terms of, this License or a future version of this License issued under Section 8. +For legal entities, "Recipient" includes any entity that controls, is controlled by, or is under +common control with Recipient. For purposes of this definition, "control" of an entity means (a) +the power, direct or indirect, to direct or manage such entity, or (b) ownership of fifty percent +(50%) or more of the outstanding shares or beneficial ownership of such entity. +1.12. "Recipient Patents" means patent claims Licensable by a Recipient that are infringed by +the use or sale of Original Code or any Modifications provided by SGI, or any combination +thereof. +1.13. "SGI" means Silicon Graphics, Inc. +1.14. "SGI Patents" means patent claims Licensable by SGI other than the Licensed Patents. +2. License Grant and Restrictions. +2.1. SGI License Grant. Subject to the terms of this License and any third party intellectual +property claims, for the duration of intellectual property protections inherent in the Original +Code, SGI hereby grants Recipient a worldwide, royalty-free, non-exclusive license, to do the +following: (i) under copyrights Licensable by SGI, to reproduce, distribute, create derivative +works from, and, to the extent applicable, display and perform the Original Code and/or any +Modifications provided by SGI alone and/or as part of a Larger Work; and (ii) under any +Licensable Patents, to make, have made, use, sell, offer for sale, import and/or otherwise transfer +the Original Code and/or any Modifications provided by SGI. Recipient accepts the terms and +conditions of this License by undertaking any of the aforementioned actions. The patent license +shall apply to the Covered Code if, at the time any related Modification is added, such addition +of the Modification causes such combination to be covered by the Licensed Patents. The patent +license in Section 2.1(ii) shall not apply to any other combinations that include the Modification. +No patent license is provided under SGI Patents for infringements of SGI Patents by +Modifications not provided by SGI or combinations of Original Code and Modifications not +provided by SGI. +2.2. Recipient License Grant. Subject to the terms of this License and any third party +intellectual property claims, Recipient hereby grants SGI and any other Recipients a worldwide, +royalty-free, non-exclusive license, under any Recipient Patents, to make, have made, use, sell, +offer for sale, import and/or otherwise transfer the Original Code and/or any Modifications +provided by SGI. +2.3. No License For Hardware Implementations. The licenses granted in Section 2.1 and +2.2 are not applicable to implementation in Hardware of the algorithms embodied in the Original +Code or any Modifications provided by SGI . +3. Redistributions. +3.1. Retention of Notice/Copy of License. The Notice set forth in Exhibit A, below, must be +conspicuously retained or included in any and all redistributions of Covered Code. For +distributions of the Covered Code in source code form, the Notice must appear in every file that +can include a text comments field; in executable form, the Notice and a copy of this License +must appear in related documentation or collateral where the Recipient's rights relating to +Covered Code are described. Any Additional Notice Provisions which actually appears in the +Original Code must also be retained or included in any and all redistributions of Covered Code. +3.2. Alternative License. Provided that Recipient is in compliance with the terms of this +License, Recipient may, so long as without derogation of any of SGI's rights in and to the +Original Code, distribute the source code and/or executable version(s) of Covered Code under +(1) this License; (2) a license identical to this License but for only such changes as are necessary +in order to clarify Recipient's role as licensor of Modifications; and/or (3) a license of +Recipient's choosing, containing terms different from this License, provided that the license +terms include this Section 3 and Sections 4, 6, 7, 10, 12, and 13, which terms may not be +modified or superseded by any other terms of such license. If Recipient elects to use any license +other than this License, Recipient must make it absolutely clear that any of its terms which differ +from this License are offered by Recipient alone, and not by SGI. It is emphasized that this +License is a limited license, and, regardless of the license form employed by Recipient in +accordance with this Section 3.2, Recipient may relicense only such rights, in Original Code and +Modifications by SGI, as it has actually been granted by SGI in this License. +3.3. Indemnity. Recipient hereby agrees to indemnify SGI for any liability incurred by SGI +as a result of any such alternative license terms Recipient offers. +4. Termination. This License and the rights granted hereunder will terminate automatically +if Recipient breaches any term herein and fails to cure such breach within 30 days thereof. Any +sublicense to the Covered Code that is properly granted shall survive any termination of this +License, absent termination by the terms of such sublicense. Provisions that, by their nature, +must remain in effect beyond the termination of this License, shall survive. +5. No Trademark Or Other Rights. This License does not grant any rights to: (i) any +software apart from the Covered Code, nor shall any other rights or licenses not expressly +granted hereunder arise by implication, estoppel or otherwise with respect to the Covered Code; +(ii) any trade name, trademark or service mark whatsoever, including without limitation any +related right for purposes of endorsement or promotion of products derived from the Covered +Code, without prior written permission of SGI; or (iii) any title to or ownership of the Original +Code, which shall at all times remains with SGI. All rights in the Original Code not expressly +granted under this License are reserved. +6. Compliance with Laws; Non-Infringement. There are various worldwide laws, +regulations, and executive orders applicable to dispositions of Covered Code, including without +limitation export, re-export, and import control laws, regulations, and executive orders, of the +U.S. government and other countries, and Recipient is reminded it is obliged to obey such laws, +regulations, and executive orders. Recipient may not distribute Covered Code that (i) in any way +infringes (directly or contributorily) any intellectual property rights of any kind of any other +person or entity or (ii) breaches any representation or warranty, express, implied or statutory, to +which, under any applicable law, it might be deemed to have been subject. +7. Claims of Infringement. If Recipient learns of any third party claim that any disposition +of Covered Code and/or functionality wholly or partially infringes the third party's intellectual +property rights, Recipient will promptly notify SGI of such claim. +8. Versions of the License. SGI may publish revised and/or new versions of the License +from time to time, each with a distinguishing version number. Once Covered Code has been +published under a particular version of the License, Recipient may, for the duration of the +license, continue to use it under the terms of that version, or choose to use such Covered Code +under the terms of any subsequent version published by SGI. Subject to the provisions of +Sections 3 and 4 of this License, only SGI may modify the terms applicable to Covered Code +created under this License. +9. DISCLAIMER OF WARRANTY. COVERED CODE IS PROVIDED "AS IS." ALL +EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS ARE DISCLAIMED, +INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND +CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A +PARTICULAR PURPOSE, AND NON-INFRINGEMENT. SGI ASSUMES NO RISK AS TO +THE QUALITY AND PERFORMANCE OF THE SOFTWARE. SHOULD THE SOFTWARE +PROVE DEFECTIVE IN ANY RESPECT, SGI ASSUMES NO COST OR LIABILITY FOR +SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY IS AN +ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS +AUTHORIZED HEREUNDER EXCEPT SUBJECT TO THIS DISCLAIMER. +10. LIMITATION OF LIABILITY. UNDER NO CIRCUMSTANCES NOR LEGAL +THEORY, WHETHER TORT (INCLUDING, WITHOUT LIMITATION, NEGLIGENCE OR +STRICT LIABILITY), CONTRACT, OR OTHERWISE, SHALL SGI OR ANY SGI +LICENSOR BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR +CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT +LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, LOSS OF +DATA, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER +COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN +INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF +LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY +RESULTING FROM SGI's NEGLIGENCE TO THE EXTENT APPLICABLE LAW +PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE +EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO +THAT EXCLUSION AND LIMITATION MAY NOT APPLY TO RECIPIENT. +11. Indemnity. Recipient shall be solely responsible for damages arising, directly or +indirectly, out of its utilization of rights under this License. Recipient will defend, indemnify and +hold harmless Silicon Graphics, Inc. from and against any loss, liability, damages, costs or +expenses (including the payment of reasonable attorneys fees) arising out of Recipient's use, +modification, reproduction and distribution of the Covered Code or out of any representation or +warranty made by Recipient. +12. U.S. Government End Users. The Covered Code is a "commercial item" consisting of +"commercial computer software" as such terms are defined in title 48 of the Code of Federal +Regulations and all U.S. Government End Users acquire only the rights set forth in this License +and are subject to the terms of this License. +13. Miscellaneous. This License represents the complete agreement concerning the its +subject matter. If any provision of this License is held to be unenforceable, such provision shall +be reformed so as to achieve as nearly as possible the same legal and economic effect as the +original provision and the remainder of this License will remain in effect. This License shall be +governed by and construed in accordance with the laws of the United States and the State of +California as applied to agreements entered into and to be performed entirely within California +between California residents. Any litigation relating to this License shall be subject to the +exclusive jurisdiction of the Federal Courts of the Northern District of California (or, absent +subject matter jurisdiction in such courts, the courts of the State of California), with venue lying +exclusively in Santa Clara County, California, with the losing party responsible for costs, +including without limitation, court costs and reasonable attorneys fees and expenses. The +application of the United Nations Convention on Contracts for the International Sale of Goods is +expressly excluded. Any law or regulation that provides that the language of a contract shall be +construed against the drafter shall not apply to this License. +Exhibit A +License Applicability. Except to the extent portions of this file are made subject to an +alternative license as permitted in the SGI Free Software License B, Version 1.1 (the "License"), +the contents of this file are subject only to the provisions of 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., attn: Legal Services, 1600 Amphitheatre Parkway, Mountain View, CA 94043- +1351, or at: +http://oss.sgi.com/projects/FreeB +Note that, as provided in the License, the Software is distributed on an "AS IS" basis, with ALL +EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS DISCLAIMED, +INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND +CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A +PARTICULAR PURPOSE, AND NON-INFRINGEMENT. +Original Code. The Original Code is: [name of software, version number, and release date], +developed by Silicon Graphics, Inc. The Original Code is Copyright (c) [dates of first +publication, as appearing in the Notice in the Original Code] Silicon Graphics, Inc. Copyright in +any portions created by third parties is as indicated elsewhere herein. All Rights Reserved. +Additional Notice Provisions: [such additional provisions, if any, as appear in the Notice in the +Original Code under the heading "Additional Notice Provisions"] + + +============================================================================= +Xprint uses ttf2pt1 for Freetype support. + + -- ttf2pt1 licence -- + +The following copyright notice applies to all the files provided +in this distribution unless explicitly noted otherwise +(the most notable exception being t1asm.c). + + Copyright (c) 1997-2002 by the AUTHORS: + Andrew Weeks + Frank M. Siegert + Mark Heath + Thomas Henlich + Sergey Babkin , + Turgut Uyar + Rihardas Hepas + Szalay Tamas + Johan Vromans + Petr Titera + Lei Wang + Chen Xiangyang + Zvezdan Petkovic + Rigel + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. All advertising materials mentioning features or use of this software + must display the following acknowledgement: + This product includes software developed by the TTF2PT1 Project + and its contributors. + + THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + +For the approximate list of the AUTHORS' responsibilities see the +project history. + +Other contributions to the project are: + +Turgut Uyar + The Unicode translation table for the Turkish language. + +Rihardas Hepas + The Unicode translation table for the Baltic languages. + +Szalay Tamas + The Unicode translation table for the Central European languages. + +Johan Vromans + The RPM file. + +Petr Titera + The Unicode map format with names, the forced Unicode option. + +Frank M. Siegert + Port to Windows + +Lei Wang +Chen Xiangyang + Translation maps for Chinese fonts. + +Zvezdan Petkovic + The Unicode translation tables for the Cyrillic alphabet. + +Rigel + Generation of the dvips encoding files, modification to the Chinese maps. + +I. Lee Hetherington + The Type1 assembler (from the package 't1utils'), its full copyright + notice: + Copyright (c) 1992 by I. Lee Hetherington, all rights reserved. + Permission is hereby granted to use, modify, and distribute this program + for any purpose provided this copyright notice and the one below remain + intact. --- xorg-server-1.3.0.0.dfsg.orig/debian/xprint-overrides +++ xorg-server-1.3.0.0.dfsg/debian/xprint-overrides @@ -0,0 +1,2 @@ +# piss-off +xprint binary: description-starts-with-package-name --- xorg-server-1.3.0.0.dfsg.orig/debian/inputabiver +++ xorg-server-1.3.0.0.dfsg/debian/inputabiver @@ -0,0 +1 @@ +0 --- xorg-server-1.3.0.0.dfsg.orig/debian/xsfbs/xsfbs-autoreconf.mk +++ xorg-server-1.3.0.0.dfsg/debian/xsfbs/xsfbs-autoreconf.mk @@ -0,0 +1,150 @@ +#!/usr/bin/make -f +# $Id$ + +# Automagical conversion of autoreconf results into quilt patches. + +# Copyright 2006 Eugene Konev +# +# Licensed under the GNU General Public License, version 2. See the file +# /usr/share/common-licenses/GPL or . + +# The idea behind this is storing changes produced by autoreconf as a +# separate patch on quilt stack (on top of stack actually). +# The only usable target here is 'autoreconf`. Other targets are not +# supposed to be called directly. DO NOT invoke them, unless you know what +# you are doing. +# The autoreconf target will check if files with names in $(RECONF_CHECKFILES) +# were changed during patching (from upstream version or from previously +# autoreconfed version) and call actual autoreconfing if they were. +# The actual autoreconfing target (doautoreconf) WILL FAIL after +# calling autoreconf and pushing changes into quilt stack by design. It +# should never be invoked by automatic build process. +# The proposed use is adding autoreconf into clean's prerequisites before +# xsfclean like: +# - clean: xsfclean +# + clean: autoreconf xsfclean +# This will ensure it is called when you build package with dpkg-buildpackage. + +# This dir will be used for producing diff of autoreconfed tree +RECONF_DIR := xsfautoreconf + +# This files will be checked for changes +RECONF_CHECKFILES += configure.ac Makefile.am + +# This files will not be hardlinked but copied +RECONF_NOLINKFILES += aclocal.m4 + +# This files/dirs will be pruned after autoreconf run +RECONF_PRUNEFILES += autom4te.cache config.h.in~ aclocal.m4~ + +# Internal target. Never invoke directly. +stampdir_target+=check.md5sum +$(STAMP_DIR)/check.md5sum: + dh_testdir + $(MAKE) -f debian/rules prepare + for F in $(RECONF_CHECKFILES); do \ + find . -wholename ./$(STAMP_DIR) -prune -o -name $$F -print | \ + LC_ALL=C sort | xargs --no-run-if-empty md5sum >>$@; \ + done + +# Internal target. Never invoke directly. +$(STAMP_DIR)/clean.md5sum: + dh_testdir + $(MAKE) -f debian/rules unpatch + rm -f $(STAMP_DIR)/check.md5sum + $(MAKE) -f debian/rules $(STAMP_DIR)/check.md5sum + mv $(STAMP_DIR)/check.md5sum $@ + +# Internal target. Never invoke directly. +debian/patches/patched.md5sum: + dh_testdir + [ -f $(STAMP_DIR)/clean.md5sum ] || \ + $(MAKE) -f debian/rules $(STAMP_DIR)/clean.md5sum + + $(MAKE) -f debian/rules patch + rm -f $(STAMP_DIR)/check.md5sum + $(MAKE) -f debian/rules $(STAMP_DIR)/check.md5sum + if ! diff $(STAMP_DIR)/clean.md5sum \ + $(STAMP_DIR)/check.md5sum > /dev/null; then \ + $(MAKE) -f debian/rules doautoreconf; \ + else \ + mv $(STAMP_DIR)/check.md5sum $@; \ + fi + +# Internal target. Never invoke directly. +,PHONY: doautoreconf +doautoreconf: patch + quilt push -a >>$(STAMP_DIR)/log/autoreconf 2>&1 || true + if quilt applied | grep ^autoreconf.diff$$ > /dev/null; then \ + quilt pop -a >>$(STAMP_DIR)/log/autoreconf 2>&1; \ + quilt rename -p autoreconf.diff autoreconf-old.diff \ + >>$(STAMP_DIR)/log/autoreconf 2>&1; \ + quilt delete autoreconf-old.diff >>$(STAMP_DIR)/log/autoreconf 2>&1; \ + quilt push -a >>$(STAMP_DIR)/log/autoreconf 2>&1; \ + fi + + if [ -e $(RECONF_DIR) ]; then \ + echo "ERROR: $(RECONF_DIR) already exists. Cleanup by hand"; \ + exit 1; \ + fi + + mkdir -p $(RECONF_DIR)/before + find . -maxdepth 1 -mindepth 1 ! -wholename ./$(RECONF_DIR) \ + -a ! -wholename ./debian -a ! -wholename ./patches \ + -a ! -wholename ./.pc -a ! -wholename ./$(STAMP_DIR) | \ + xargs -i{} cp -al {} $(RECONF_DIR)/before/ + + for F in $(RECONF_PRUNEFILES); do \ + find $(RECONF_DIR)/before -name $$F -print | \ + xargs --no-run-if-empty rm -r; \ + done + + cp -al $(RECONF_DIR)/before $(RECONF_DIR)/after + + for F in $(RECONF_NOLINKFILES); do \ + find . -wholename ./$(RECONF_DIR) -prune -o -wholename ./debian \ + -prune -o -wholename ./$(STAMP_DIR) -prune -o -name $$F \ + -print | \ + xargs --no-run-if-empty -i{} cp --remove-destination {} \ + $(RECONF_DIR)/after/{}; \ + done + + cd $(RECONF_DIR)/after && autoreconf -v --install && \ + for F in $(RECONF_PRUNEFILES); do \ + find . -name $$F -print | \ + xargs --no-run-if-empty rm -r; \ + done + + cd $(RECONF_DIR) && diff -Nru before after > autoreconf.diff || true + + quilt import $(RECONF_DIR)/autoreconf.diff \ + >>$(STAMP_DIR)/log/autoreconf 2>&1 + + mv $(STAMP_DIR)/check.md5sum debian/patches/patched.md5sum + + rm -r $(RECONF_DIR) && rm -f patches/autoreconf-old.diff + + @echo + @echo "****************************************************************" + @echo " This target is made to fail INTENTIONALLY. It should NEVER " + @echo " be invoked during automatic builds. " + @echo + @echo " This target was invoked because you added/removed/changed " + @echo " patches which modify either configure.ac or Makefile.am and, " + @echo " thus, require autoreconf run. And all autoreconfing should " + @echo " happen before uploading. " + @echo + @echo " (See also debian/xsfbs/xsfbs-autoreconf.mk) " + @echo + @echo " If you see this message, autoreconfing actually SUCCEEDED, " + @echo " and your build should finish successfully, when rerun. " + @echo "****************************************************************" + @echo + exit 1; + +.PHONY: autoreconf +autoreconf: debian/patches/patched.md5sum patch $(STAMP_DIR)/check.md5sum + if ! diff $(STAMP_DIR)/check.md5sum \ + debian/patches/patched.md5sum > /dev/null; then \ + $(MAKE) -f debian/rules doautoreconf; \ + fi --- xorg-server-1.3.0.0.dfsg.orig/debian/xsfbs/xsfbs.sh +++ xorg-server-1.3.0.0.dfsg/debian/xsfbs/xsfbs.sh @@ -0,0 +1,907 @@ +# $Id$ + +# This is the X Strike Force shell library for X Window System package +# maintainer scripts. It serves to define shell functions commonly used by +# such packages, and performs some error checking necessary for proper operation +# of those functions. By itself, it does not "do" much; the maintainer scripts +# invoke the functions defined here to accomplish package installation and +# removal tasks. + +# If you are reading this within a Debian package maintainer script (e.g., +# /var/lib/dpkg)info/PACKAGE.{config,preinst,postinst,prerm,postrm}), you can +# skip past this library by scanning forward in this file to the string +# "GOBSTOPPER". + +SOURCE_VERSION=@SOURCE_VERSION@ +OFFICIAL_BUILD=@OFFICIAL_BUILD@ + +# Use special abnormal exit codes so that problems with this library are more +# easily tracked down. +SHELL_LIB_INTERNAL_ERROR=86 +SHELL_LIB_THROWN_ERROR=74 +SHELL_LIB_USAGE_ERROR=99 + +# old -> new variable names +if [ -z "$DEBUG_XORG_PACKAGE" ] && [ -n "$DEBUG_XFREE86_PACKAGE" ]; then + DEBUG_XORG_PACKAGE="$DEBUG_XFREE86_PACKAGE" +fi +if [ -z "$DEBUG_XORG_DEBCONF" ] && [ -n "$DEBUG_XFREE86_DEBCONF" ]; then + DEBUG_XORG_DEBCONF="$DEBUG_XFREE86_DEBCONF" +fi + +# initial sanity checks +if [ -z "$THIS_PACKAGE" ]; then + cat >&2 < on the World Wide Web for +instructions, read the file /usr/share/doc/debian/bug-reporting.txt from the +"doc-debian" package, or install the "reportbug" package and use the command of +the same name to file a report against version $SOURCE_VERSION of this package. +EOF + exit $SHELL_LIB_USAGE_ERROR +fi + +if [ -z "$THIS_SCRIPT" ]; then + cat >&2 < on the World Wide Web for +instructions, read the file /usr/share/doc/debian/bug-reporting.txt from the +"doc-debian" package, or install the "reportbug" package and use the command of +the same name to file a report against version $SOURCE_VERSION of the +"$THIS_PACKAGE" package. +EOF + exit $SHELL_LIB_USAGE_ERROR +fi + +ARCHITECTURE="$(dpkg --print-installation-architecture)" + +LAPTOP="" +if [ -n "$(which laptop-detect)" ]; then + if laptop-detect >/dev/null; then + LAPTOP=true + fi +fi + +if [ "$1" = "reconfigure" ] || [ -n "$DEBCONF_RECONFIGURE" ]; then + RECONFIGURE="true" +else + RECONFIGURE= +fi + +if ([ "$1" = "install" ] || [ "$1" = "configure" ]) && [ -z "$2" ]; then + FIRSTINST="yes" +fi + +if [ -z "$RECONFIGURE" ] && [ -z "$FIRSTINST" ]; then + UPGRADE="yes" +fi + +trap "message;\ + message \"Received signal. Aborting $THIS_PACKAGE package $THIS_SCRIPT script.\";\ + message;\ + exit 1" HUP INT QUIT TERM + +reject_nondigits () { + # syntax: reject_nondigits [ operand ... ] + # + # scan operands (typically shell variables whose values cannot be trusted) for + # characters other than decimal digits and barf if any are found + while [ -n "$1" ]; do + # does the operand contain anything but digits? + if ! expr "$1" : "[[:digit:]]\+$" > /dev/null 2>&1; then + # can't use die(), because it wraps message() which wraps this function + echo "$THIS_PACKAGE $THIS_SCRIPT error: reject_nondigits() encountered" \ + "possibly malicious garbage \"$1\"" >&2 + exit $SHELL_LIB_THROWN_ERROR + fi + shift + done +} + +reject_whitespace () { + # syntax: reject_whitespace [ operand ] + # + # scan operand (typically a shell variable whose value cannot be trusted) for + # whitespace characters and barf if any are found + if [ -n "$1" ]; then + # does the operand contain any whitespace? + if expr "$1" : "[[:space:]]" > /dev/null 2>&1; then + # can't use die(), because I want to avoid forward references + echo "$THIS_PACKAGE $THIS_SCRIPT error: reject_whitespace() encountered" \ + "possibly malicious garbage \"$1\"" >&2 + exit $SHELL_LIB_THROWN_ERROR + fi + fi +} + +reject_unlikely_path_chars () { + # syntax: reject_unlikely_path_chars [ operand ... ] + # + # scan operands (typically shell variables whose values cannot be trusted) for + # characters unlikely to be seen in a path and which the shell might + # interpret and barf if any are found + while [ -n "$1" ]; do + # does the operand contain any funny characters? + if expr "$1" : '.*[!$&()*;<>?|].*' > /dev/null 2>&1; then + # can't use die(), because I want to avoid forward references + echo "$THIS_PACKAGE $THIS_SCRIPT error: reject_unlikely_path_chars()" \ + "encountered possibly malicious garbage \"$1\"" >&2 + exit $SHELL_LIB_THROWN_ERROR + fi + shift + done +} + +# Query the terminal to establish a default number of columns to use for +# displaying messages to the user. This is used only as a fallback in the +# event the COLUMNS variable is not set. ($COLUMNS can react to SIGWINCH while +# the script is running, and this cannot, only being calculated once.) +DEFCOLUMNS=$(stty size 2> /dev/null | awk '{print $2}') || true +if ! expr "$DEFCOLUMNS" : "[[:digit:]]\+$" > /dev/null 2>&1; then + DEFCOLUMNS=80 +fi + +message () { + # pretty-print messages of arbitrary length + reject_nondigits "$COLUMNS" + echo "$*" | fmt -t -w ${COLUMNS:-$DEFCOLUMNS} >&2 +} + +observe () { + # syntax: observe message ... + # + # issue observational message suitable for logging someday when support for + # it exists in dpkg + if [ -n "$DEBUG_XORG_PACKAGE" ]; then + message "$THIS_PACKAGE $THIS_SCRIPT note: $*" + fi +} + +warn () { + # syntax: warn message ... + # + # issue warning message suitable for logging someday when support for + # it exists in dpkg; also send to standard error + message "$THIS_PACKAGE $THIS_SCRIPT warning: $*" +} + +die () { + # syntax: die message ... + # + # exit script with error message + message "$THIS_PACKAGE $THIS_SCRIPT error: $*" + exit $SHELL_LIB_THROWN_ERROR +} + +internal_error () { + # exit script with error; essentially a "THIS SHOULD NEVER HAPPEN" message + message "internal error: $*" + if [ -n "$OFFICIAL_BUILD" ]; then + message "Please report a bug in the $THIS_SCRIPT script of the" \ + "$THIS_PACKAGE package, version $SOURCE_VERSION to the Debian Bug" \ + "Tracking System. Include all messages above that mention the" \ + "$THIS_PACKAGE package. Visit " \ + " on the World Wide Web for" \ + "instructions, read the file" \ + "/usr/share/doc/debian/bug-reporting.txt from the doc-debian" \ + "package, or install the reportbug package and use the command of" \ + "the same name to file a report." + fi + exit $SHELL_LIB_INTERNAL_ERROR +} + +usage_error () { + message "usage error: $*" + message "Please report a bug in the $THIS_SCRIPT script of the" \ + "$THIS_PACKAGE package, version $SOURCE_VERSION to the Debian Bug" \ + "Tracking System. Include all messages above that mention the" \ + "$THIS_PACKAGE package. Visit " \ + " on the World Wide Web for" \ + "instructions, read the file" \ + "/usr/share/doc/debian/bug-reporting.txt from the doc-debian" \ + "package, or install the reportbug package and use the command of" \ + "the same name to file a report." + exit $SHELL_LIB_USAGE_ERROR +} + + +maplink () { + # returns what symlink should point to; i.e., what the "sane" answer is + # Keep this in sync with the debian/*.links files. + # This is only needed for symlinks to directories. + # + # XXX: Most of these look wrong in the X11R7 world and need to be fixed. + # If we've stopped using this function, fixing it might enable us to re-enable + # it again and catch more errors. + case "$1" in + /etc/X11/xkb/compiled) echo /var/lib/xkb ;; + /etc/X11/xkb/xkbcomp) echo /usr/X11R6/bin/xkbcomp ;; + /usr/X11R6/lib/X11/app-defaults) echo /etc/X11/app-defaults ;; + /usr/X11R6/lib/X11/fs) echo /etc/X11/fs ;; + /usr/X11R6/lib/X11/lbxproxy) echo /etc/X11/lbxproxy ;; + /usr/X11R6/lib/X11/proxymngr) echo /etc/X11/proxymngr ;; + /usr/X11R6/lib/X11/rstart) echo /etc/X11/rstart ;; + /usr/X11R6/lib/X11/twm) echo /etc/X11/twm ;; + /usr/X11R6/lib/X11/xdm) echo /etc/X11/xdm ;; + /usr/X11R6/lib/X11/xinit) echo /etc/X11/xinit ;; + /usr/X11R6/lib/X11/xkb) echo /etc/X11/xkb ;; + /usr/X11R6/lib/X11/xserver) echo /etc/X11/xserver ;; + /usr/X11R6/lib/X11/xsm) echo /etc/X11/xsm ;; + /usr/bin/X11) echo ../X11R6/bin ;; + /usr/bin/rstartd) echo ../X11R6/bin/rstartd ;; + /usr/include/X11) echo ../X11R6/include/X11 ;; + /usr/lib/X11) echo ../X11R6/lib/X11 ;; + *) internal_error "maplink() called with unknown path \"$1\"" ;; + esac +} + +analyze_path () { + # given a supplied set of pathnames, break each one up by directory and do an + # ls -dl on each component, cumulatively; i.e. + # analyze_path /usr/X11R6/bin -> ls -dl /usr /usr/X11R6 /usr/X11R6/bin + # Thanks to Randolph Chung for this clever hack. + + #local f g + + while [ -n "$1" ]; do + reject_whitespace "$1" + _g= + message "Analyzing $1:" + for _f in $(echo "$1" | tr / \ ); do + if [ -e /$_g$_f ]; then + ls -dl /$_g$_f /$_g$_f.dpkg-* 2> /dev/null || true + _g=$_g$_f/ + else + message "/$_g$_f: nonexistent; directory contents of /$_g:" + ls -l /$_g + break + fi + done + shift + done +} + +find_culprits () { + #local f p dpkg_info_dir possible_culprits smoking_guns bad_packages package \ + # msg + + reject_whitespace "$1" + message "Searching for overlapping packages..." + _dpkg_info_dir=/var/lib/dpkg/info + if [ -d $_dpkg_info_dir ]; then + if [ "$(echo $_dpkg_info_dir/*.list)" != "$_dpkg_info_dir/*.list" ]; then + _possible_culprits=$(ls -1 $_dpkg_info_dir/*.list | egrep -v \ + "(xbase-clients|x11-common|xfs|xlibs)") + if [ -n "$_possible_culprits" ]; then + _smoking_guns=$(grep -l "$1" $_possible_culprits || true) + if [ -n "$_smoking_guns" ]; then + _bad_packages=$(printf "\\n") + for f in $_smoking_guns; do + # too bad you can't nest parameter expansion voodoo + p=${f%*.list} # strip off the trailing ".list" + _package=${p##*/} # strip off the directories + _bad_packages=$(printf "%s\n%s" "$_bad_packages" "$_package") + done + _msg=$(cat < /dev/null 2>&1; then + message "The readlink command was not found. Please install version" \ + "1.13.1 or later of the debianutils package." + readlink () { + # returns what symlink in $1 actually points to + perl -e '$l = shift; exit 1 unless -l $l; $r = readlink $l; exit 1 unless $r; print "$r\n"' "$1" + } +fi + +check_symlink () { + # syntax: check_symlink symlink + # + # See if specified symlink points where it is supposed to. Return 0 if it + # does, and 1 if it does not. + # + # Primarily used by check_symlinks_and_warn() and check_symlinks_and_bomb(). + + #local symlink + + # validate arguments + if [ $# -ne 1 ]; then + usage_error "check_symlink() called with wrong number of arguments;" \ + "expected 1, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + _symlink="$1" + + if [ "$(maplink "$_symlink")" = "$(readlink "$_symlink")" ]; then + return 0 + else + return 1 + fi +} + +check_symlinks_and_warn () { + # syntax: check_symlinks_and_warn symlink ... + # + # For each argument, check for symlink sanity, and warn if it isn't sane. + # + # Call this function from a preinst script in the event $1 is "upgrade" or + # "install". + + #local errmsg symlink + + # validate arguments + if [ $# -lt 1 ]; then + usage_error "check_symlinks_and_warn() called with wrong number of" \ + "arguments; expected at least 1, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + while [ -n "$1" ]; do + _symlink="$1" + if [ -L "$_symlink" ]; then + if ! check_symlink "$_symlink"; then + observe "$_symlink symbolic link points to wrong location" \ + "$(readlink "$_symlink"); removing" + rm "$_symlink" + fi + elif [ -e "$_symlink" ]; then + _errmsg="$_symlink exists and is not a symbolic link; this package cannot" + _errmsg="$_errmsg be installed until this" + if [ -f "$_symlink" ]; then + _errmsg="$_errmsg file" + elif [ -d "$_symlink" ]; then + _errmsg="$_errmsg directory" + else + _errmsg="$_errmsg thing" + fi + _errmsg="$_errmsg is removed" + die "$_errmsg" + fi + shift + done +} + +check_symlinks_and_bomb () { + # syntax: check_symlinks_and_bomb symlink ... + # + # For each argument, check for symlink sanity, and bomb if it isn't sane. + # + # Call this function from a postinst script. + + #local problem symlink + + # validate arguments + if [ $# -lt 1 ]; then + usage_error "check_symlinks_and_bomb() called with wrong number of" + "arguments; expected at least 1, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + while [ -n "$1" ]; do + _problem= + _symlink="$1" + if [ -L "$_symlink" ]; then + if ! check_symlink "$_symlink"; then + _problem=yes + warn "$_symlink symbolic link points to wrong location" \ + "$(readlink "$_symlink")" + fi + elif [ -e "$_symlink" ]; then + _problem=yes + warn "$_symlink is not a symbolic link" + else + _problem=yes + warn "$_symlink symbolic link does not exist" + fi + if [ -n "$_problem" ]; then + analyze_path "$_symlink" "$(readlink "$_symlink")" + find_culprits "$_symlink" + die "bad symbolic links on system" + fi + shift + done +} + +font_update () { + # run $UPDATECMDS in $FONTDIRS + + #local dir cmd shortcmd x_font_dir_prefix + + _x_font_dir_prefix="/usr/share/fonts/X11" + + if [ -z "$UPDATECMDS" ]; then + usage_error "font_update() called but \$UPDATECMDS not set" + fi + if [ -z "$FONTDIRS" ]; then + usage_error "font_update() called but \$FONTDIRS not set" + fi + + reject_unlikely_path_chars "$UPDATECMDS" + reject_unlikely_path_chars "$FONTDIRS" + + for _dir in $FONTDIRS; do + if [ -d "$_x_font_dir_prefix/$_dir" ]; then + for _cmd in $UPDATECMDS; do + if which "$_cmd" > /dev/null 2>&1; then + _shortcmd=${_cmd##*/} + observe "running $_shortcmd in $_dir font directory" + _cmd_opts= + if [ "$_shortcmd" = "update-fonts-alias" ]; then + _cmd_opts=--x11r7-layout + fi + if [ "$_shortcmd" = "update-fonts-dir" ]; then + _cmd_opts=--x11r7-layout + fi + if [ "$_shortcmd" = "update-fonts-scale" ]; then + _cmd_opts=--x11r7-layout + fi + $_cmd $_cmd_opts $_dir || warn "$_cmd $_cmd_opts $_dir" \ + "failed; font directory data may not" \ + "be up to date" + else + warn "$_cmd not found; not updating corresponding $_dir font" \ + "directory data" + fi + done + else + warn "$_dir is not a directory; not updating font directory data" + fi + done +} + +remove_conffile_prepare () { + # syntax: remove_conffile_prepare filename official_md5sum ... + # + # Check a conffile "filename" against a list of canonical MD5 checksums. + # If the file's current MD5 checksum matches one of the "official_md5sum" + # operands provided, then prepare the conffile for removal from the system. + # We defer actual deletion until the package is configured so that we can + # roll this operation back if package installation fails. + # + # Call this function from a preinst script in the event $1 is "upgrade" or + # "install" and verify $2 to ensure the package is being upgraded from a + # version (or installed over a version removed-but-not-purged) prior to the + # one in which the conffile was obsoleted. + + #local conffile current_checksum + + # validate arguments + if [ $# -lt 2 ]; then + usage_error "remove_conffile_prepare() called with wrong number of" \ + "arguments; expected at least 2, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + _conffile="$1" + shift + + # does the _conffile even exist? + if [ -e "$_conffile" ]; then + # calculate its checksum + _current_checksum=$(md5sum < "$_conffile" | sed 's/[[:space:]].*//') + # compare it to each supplied checksum + while [ -n "$1" ]; do + if [ "$_current_checksum" = "$1" ]; then + # we found a match; move the confffile and stop looking + observe "preparing obsolete conffile $_conffile for removal" + mv "$_conffile" "$_conffile.$THIS_PACKAGE-tmp" + break + fi + shift + done + fi +} + +remove_conffile_commit () { + # syntax: remove_conffile_commit filename + # + # Complete the removal of a conffile "filename" that has become obsolete. + # + # Call this function from a postinst script after having used + # remove_conffile_prepare() in the preinst. + + #local conffile + + # validate arguments + if [ $# -ne 1 ]; then + usage_error "remove_conffile_commit() called with wrong number of" \ + "arguments; expected 1, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + _conffile="$1" + + # if the temporary file created by remove_conffile_prepare() exists, remove it + if [ -e "$_conffile.$THIS_PACKAGE-tmp" ]; then + observe "committing removal of obsolete conffile $_conffile" + rm "$_conffile.$THIS_PACKAGE-tmp" + fi +} + +remove_conffile_rollback () { + # syntax: remove_conffile_rollback filename + # + # Roll back the removal of a conffile "filename". + # + # Call this function from a postrm script in the event $1 is "abort-upgrade" + # or "abort-install" is after having used remove_conffile_prepare() in the + # preinst. + + #local conffile + + # validate arguments + if [ $# -ne 1 ]; then + usage_error "remove_conffile_rollback() called with wrong number of" \ + "arguments; expected 1, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + _conffile="$1" + + # if the temporary file created by remove_conffile_prepare() exists, move it + # back + if [ -e "$_conffile.$THIS_PACKAGE-tmp" ]; then + observe "rolling back removal of obsolete conffile $_conffile" + mv "$_conffile.$THIS_PACKAGE-tmp" "$_conffile" + fi +} + +replace_conffile_with_symlink_prepare () { + # syntax: replace_conffile_with_symlink_prepare oldfilename newfilename \ + # official_md5sum ... + # + # Check a conffile "oldfilename" against a list of canonical MD5 checksums. + # If the file's current MD5 checksum matches one of the "official_md5sum" + # operands provided, then prepare the conffile for removal from the system. + # We defer actual deletion until the package is configured so that we can + # roll this operation back if package installation fails. Otherwise copy it + # to newfilename and let dpkg handle it through conffiles mechanism. + # + # Call this function from a preinst script in the event $1 is "upgrade" or + # "install" and verify $2 to ensure the package is being upgraded from a + # version (or installed over a version removed-but-not-purged) prior to the + # one in which the conffile was obsoleted. + + #local conffile current_checksum + + # validate arguments + if [ $# -lt 3 ]; then + usage_error "replace_conffile_with_symlink_prepare() called with wrong" \ + " number of arguments; expected at least 3, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + _oldconffile="$1" + shift + _newconffile="$1" + shift + + remove_conffile_prepare "$_oldconffile" "$@" + # If $_oldconffile still exists, then md5sums didn't match. + # Copy it to new one. + if [ -f "$_oldconffile" ]; then + cp "$_oldconffile" "$_newconffile" + fi + +} + +replace_conffile_with_symlink_commit () { + # syntax: replace_conffile_with_symlink_commit oldfilename + # + # Complete the removal of a conffile "oldfilename" that has been + # replaced by a symlink. + # + # Call this function from a postinst script after having used + # replace_conffile_with_symlink_prepare() in the preinst. + + #local conffile + + # validate arguments + if [ $# -ne 1 ]; then + usage_error "replace_conffile_with_symlink_commit() called with wrong" \ + "number of arguments; expected 1, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + _conffile="$1" + + remove_conffile_commit "$_conffile" +} + +replace_conffile_with_symlink_rollback () { + # syntax: replace_conffile_with_symlink_rollback oldfilename newfilename + # + # Roll back the replacing of a conffile "oldfilename" with symlink to + # "newfilename". + # + # Call this function from a postrm script in the event $1 is "abort-upgrade" + # or "abort-install" and verify $2 to ensure the package failed to upgrade + # from a version (or install over a version removed-but-not-purged) prior + # to the one in which the conffile was obsoleted. + # You should have used replace_conffile_with_symlink_prepare() in the + # preinst. + + #local conffile + + # validate arguments + if [ $# -ne 2 ]; then + usage_error "replace_conffile_with_symlink_rollback() called with wrong" \ + "number of arguments; expected 2, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + _oldconffile="$1" + _newconffile="$2" + + remove_conffile_rollback "$_oldconffile" + if [ -f "$_newconffile" ]; then + rm "$_newconffile" + fi +} + +run () { + # syntax: run command [ argument ... ] + # + # Run specified command with optional arguments and report its exit status. + # Useful for commands whose exit status may be nonzero, but still acceptable, + # or commands whose failure is not fatal to us. + # + # NOTE: Do *not* use this function with db_get or db_metaget commands; in + # those cases the return value of the debconf command *must* be checked + # before the string returned by debconf is used for anything. + + #local retval + + # validate arguments + if [ $# -lt 1 ]; then + usage_error "run() called with wrong number of arguments; expected at" \ + "least 1, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + "$@" || _retval=$? + + if [ ${_retval:-0} -ne 0 ]; then + observe "command \"$*\" exited with status $_retval" + fi +} + +register_x_lib_dir_with_ld_so () { + # syntax: register_x_lib_dir_with_ld_so + # + # Configure the dynamic loader ld.so to search /usr/X11R6/lib for shared + # libraries. + # + # Call this function from the postinst script of a package that places a + # shared library in /usr/X11R6/lib, before invoking ldconfig. + + #local dir ldsoconf + + _dir="/usr/X11R6/lib" + _ldsoconf="/etc/ld.so.conf" + + # is the line not already present? + if ! fgrep -qsx "$_dir" "$_ldsoconf"; then + observe "adding $_dir directory to $_ldsoconf" + echo "$_dir" >> "$_ldsoconf" + fi +} + +deregister_x_lib_dir_with_ld_so () { + # syntax: deregister_x_lib_dir_with_ld_so + # + # Configure dynamic loader ld.so to not search /usr/X11R6/lib for shared + # libraries, if and only if no shared libaries remain there. + # + # Call this function from the postrm script of a package that places a shared + # library in /usr/X11R6/lib, in the event "$1" is "remove", and before + # invoking ldconfig. + + #local dir ldsoconf fgrep_status cmp_status + + _dir="/usr/X11R6/lib" + _ldsoconf="/etc/ld.so.conf" + + # is the line present? + if fgrep -qsx "$_dir" "$_ldsoconf"; then + # are there any shared objects in the directory? + if [ "$(echo "$_dir"/lib*.so.*.*)" = "$_dir/lib*.so.*.*" ]; then + # glob expansion produced nothing, so no shared libraries are present + observe "removing $_dir directory from $_ldsoconf" + # rewrite the file (very carefully) + set +e + fgrep -svx "$_dir" "$_ldsoconf" > "$_ldsoconf.dpkg-tmp" + _fgrep_status=$? + set -e + case $_fgrep_status in + 0|1) ;; # we don't actually care if any lines matched or not + *) die "error reading \"$_ldsoconf\"; fgrep exited with status" \ + "$_fgrep_status" ;; + esac + set +e + cmp -s "$_ldsoconf.dpkg-tmp" "$_ldsoconf" + _cmp_status=$? + set -e + case $_cmp_status in + 0) rm "$_ldsoconf.dpkg-tmp" ;; # files are identical + 1) mv "$_ldsoconf.dpkg-tmp" "$_ldsoconf" ;; # files differ + *) die "error comparing \"$_ldsoconf.dpkg-tmp\" to \"$_ldsoconf\";" \ + "cmp exited with status $_cmp_status" ;; + esac + fi + fi +} + +make_symlink_sane () { + # syntax: make_symlink_sane symlink target + # + # Ensure that the symbolic link symlink exists, and points to target. + # + # If symlink does not exist, create it and point it at target. + # + # If symlink exists but is not a symbolic link, back it up. + # + # If symlink exists, is a symbolic link, but points to the wrong location, fix + # it. + # + # If symlink exists, is a symbolic link, and already points to target, do + # nothing. + # + # This function wouldn't be needed if ln had an -I, --idempotent option. + + # Validate arguments. + if [ $# -ne 2 ]; then + usage_error "make_symlink_sane() called with wrong number of arguments;" \ + "expected 2, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + # We could just use the positional parameters as-is, but that makes things + # harder to follow. + #local symlink target + + _symlink="$1" + _target="$2" + + if [ -L "$_symlink" ] && [ "$(readlink "$_symlink")" = "$_target" ]; then + observe "link from $_symlink to $_target already exists" + else + observe "creating symbolic link from $_symlink to $_target" + mkdir -p "${_target%/*}" "${_symlink%/*}" + ln -s -b -S ".dpkg-old" "$_target" "$_symlink" + fi +} + +migrate_dir_to_symlink () { + # syntax: migrate_dir_to_symlink old_location new_location + # + # Per Debian Policy section 6.5.4, "A directory will never be replaced by a + # symbolic link to a directory or vice versa; instead, the existing state + # (symlink or not) will be left alone and dpkg will follow the symlink if + # there is one." + # + # We have to do it ourselves. + # + # This function moves the contents of old_location, a directory, into + # new_location, a directory, then makes old_location a symbolic link to + # new_location. + # + # old_location need not exist, but if it does, it must be a directory (or a + # symlink to a directory). If it is not, it is backed up. If new_location + # exists already and is not a directory, it is backed up. + # + # This function should be called from a package's preinst so that other + # packages unpacked after this one --- but before this package's postinst runs + # --- are unpacked into new_location even if their payloads contain + # old_location filespecs. + + # Validate arguments. + if [ $# -ne 2 ]; then + usage_error "migrate_dir_to_symlink() called with wrong number of" + "arguments; expected 2, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + # We could just use the positional parameters as-is, but that makes things + # harder to follow. + local _new _old + + _old="$1" + _new="$2" + + # Is old location a symlink? + if [ -L "$_old" ]; then + # Does it already point to new location? + if [ "$(readlink "$_old")" = "$_new" ]; then + # Nothing to do; migration has already been done. + observe "migration of $_old to $_new already done" + return 0 + else + # Back it up. + warn "backing up symbolic link $_old as $_old.dpkg-old" + mv -b "$_old" "$_old.dpkg-old" + fi + fi + + # Does old location exist, but is not a directory? + if [ -e "$_old" ] && ! [ -d "$_old" ]; then + # Back it up. + warn "backing up non-directory $_old as $_old.dpkg-old" + mv -b "$_old" "$_old.dpkg-old" + fi + + observe "migrating $_old to $_new" + + # Is new location a symlink? + if [ -L "$_new" ]; then + # Does it point the wrong way, i.e., back to where we're migrating from? + if [ "$(readlink "$_new")" = "$_old" ]; then + # Get rid of it. + observe "removing symbolic link $_new which points to $_old" + rm "$_new" + else + # Back it up. + warn "backing up symbolic link $_new as $_new.dpkg-old" + mv -b "$_new" "$_new.dpkg-old" + fi + fi + + # Does new location exist, but is not a directory? + if [ -e "$_new" ] && ! [ -d "$_new" ]; then + warn "backing up non-directory $_new as $_new.dpkg-old" + mv -b "$_new" "$_new.dpkg-old" + fi + + # Create new directory if it does not yet exist. + if ! [ -e "$_new" ]; then + observe "creating $_new" + mkdir -p "$_new" + fi + + # Copy files in old location to new location. Back up any filenames that + # already exist in the new location with the extension ".dpkg-old". + observe "copying files from $_old to $_new" + if ! (cd "$_old" && cp -a -b -S ".dpkg-old" . "$_new"); then + die "error(s) encountered while copying files from $_old to $_new" + fi + + # Remove files at old location. + observe "removing $_old" + rm -r "$_old" + + # Create symlink from old location to new location. + make_symlink_sane "$_old" "$_new" +} + +# vim:set ai et sw=2 ts=2 tw=80: + +# GOBSTOPPER: The X Strike Force shell library ends here. --- xorg-server-1.3.0.0.dfsg.orig/debian/xsfbs/xsfbs.mk +++ xorg-server-1.3.0.0.dfsg/debian/xsfbs/xsfbs.mk @@ -0,0 +1,388 @@ +#!/usr/bin/make -f + +# Debian X Strike Force Build System (XSFBS): Make portion + +# Copyright 1996 Stephen Early +# Copyright 1997 Mark Eichin +# Copyright 1998-2005, 2007 Branden Robinson +# Copyright 2005 David Nusinow +# +# Licensed under the GNU General Public License, version 2. See the file +# /usr/share/common-licenses/GPL or . + +# Originally by Stephen Early +# Modified by Mark W. Eichin +# Modified by Adam Heath +# Modified by Branden Robinson +# Modified by Fabio Massimo Di Nitto +# Modified by David Nusinow +# Acknowledgements to Manoj Srivastava. + +# Pass $(DH_OPTIONS) into the environment for debhelper's benefit. +export DH_OPTIONS + +# force quilt to not use ~/.quiltrc +QUILT = quilt --quiltrc /dev/null +# force QUILT_PATCHES to the default in case it is exported in the environment +QUILT_PATCHES = patches/ + +# Set up parameters for the upstream build environment. + +# Determine (source) package name from Debian changelog. +SOURCE_NAME:=$(shell dpkg-parsechangelog -ldebian/changelog \ + | grep '^Source:' | awk '{print $$2}') + +# Determine package version from Debian changelog. +SOURCE_VERSION:=$(shell dpkg-parsechangelog -ldebian/changelog \ + | grep '^Version:' | awk '{print $$2}') + +# Determine upstream version number. +UPSTREAM_VERSION:=$(shell echo $(SOURCE_VERSION) | sed 's/-.*//') + +# Determine the source version without the epoch for make-orig-tar-gz +NO_EPOCH_VER:=$(shell echo $(UPSTREAM_VERSION) | sed 's/^.://') + +# Figure out who's building this package. +BUILDER:=$(shell echo $${DEBEMAIL:-$${EMAIL:-$$(echo $$LOGNAME@$$(cat /etc/mailname 2>/dev/null))}}) + +# Find out if this is an official build; an official build has nothing but +# digits, dots, and/or the strings "woody" or "sarge" in the Debian part of the +# version number. Anything else indicates an unofficial build. +OFFICIAL_BUILD:=$(shell VERSION=$(SOURCE_VERSION); if ! expr "$$(echo $${VERSION\#\#*-} | sed 's/\(woody\|sarge\)//g')" : ".*[^0-9.].*" >/dev/null 2>&1; then echo yes; fi) + +# Set up parameters for the Debian build environment. + +# Determine our architecture. +BUILD_ARCH:=$(shell dpkg-architecture -qDEB_BUILD_ARCH) +# Work around some old-time dpkg braindamage. +BUILD_ARCH:=$(subst i486,i386,$(BUILD_ARCH)) +# The DEB_HOST_ARCH variable may be set per the Debian cross-compilation policy. +ifdef DEB_HOST_ARCH + ARCH:=$(DEB_HOST_ARCH) +else + # dpkg-cross sets the ARCH environment variable; if set, use it. + ifdef ARCH + ARCH:=$(ARCH) + else + ARCH:=$(BUILD_ARCH) + endif +endif + +# $(STAMP_DIR) houses stamp files for complex targets. +STAMP_DIR:=stampdir + +# $(SOURCE_DIR) houses one or more source trees. +SOURCE_DIR:=build-tree + +# $(SOURCE_TREE) is the location of the source tree to be compiled. If there +# is more than one, others are found using this name plus a suffix to indicate +# the purpose of the additional tree (e.g., $(SOURCE_TREE)-custom). The +# "setup" target is responsible for creating such trees. +#SOURCE_TREE:=$(SOURCE_DIR)/xc +#FIXME We need to define this in our debian/rules file + +# $(DEBTREEDIR) is where all install rules are told (via $(DESTDIR)) to place +# their files. +DEBTREEDIR:=$(CURDIR)/debian/tmp + +# All "important" targets have four lines: +# 1) A target name that is invoked by a package-building tool or the user. +# This consists of a dependency on a "$(STAMP_DIR)/"-prefixed counterpart. +# 2) A line delcaring 1) as a phony target (".PHONY:"). +# 3) A "$(STAMP_DIR)/"-prefixed target which does the actual work, and may +# depend on other targets. +# 4) A line declaring 3) as a member of the $(stampdir_targets) variable; the +# "$(STAMP_DIR)/" prefix is omitted. +# +# This indirection is needed so that the "stamp" files that signify when a rule +# is done can be located in a separate "stampdir". Recall that make has no way +# to know when a goal has been met for a phony target (like "build" or +# "install"). +# +# At the end of each "$(STAMP_DIR)/" target, be sure to run the command ">$@" +# so that the target will not be run again. Removing the file will make Make +# run the target over. + +# All phony targets should be declared as dependencies of .PHONY, even if they +# do not have "($STAMP_DIR)/"-prefixed counterparts. + +# Define a harmless default rule to keep things from going nuts by accident. +.PHONY: default +default: + +# Set up the $(STAMP_DIR) directory. +.PHONY: stampdir +stampdir_targets+=stampdir +stampdir: $(STAMP_DIR)/stampdir +$(STAMP_DIR)/stampdir: + mkdir $(STAMP_DIR) + >$@ + +# Set up the package build directory as quilt expects to find it. +.PHONY: prepare +stampdir_targets+=prepare +prepare: $(STAMP_DIR)/genscripts $(STAMP_DIR)/prepare $(STAMP_DIR)/patches $(STAMP_DIR)/log +$(STAMP_DIR)/prepare: $(STAMP_DIR)/stampdir + if [ ! -e $(STAMP_DIR)/patches ]; then \ + mkdir $(STAMP_DIR)/patches; \ + ln -s $(STAMP_DIR)/patches .pc; \ + echo 2 >$(STAMP_DIR)/patches/.version; \ + fi; \ + if [ ! -e $(STAMP_DIR)/log ]; then \ + mkdir $(STAMP_DIR)/log; \ + fi; \ + if [ -e debian/patches ] && [ ! -e patches ]; then \ + ln -s debian/patches patches; \ + fi; \ + >$@ + +# Apply all patches to the upstream source. +.PHONY: patch +stampdir_targets+=patch +patch: $(STAMP_DIR)/patch +$(STAMP_DIR)/patch: $(STAMP_DIR)/prepare + if ! [ `which quilt` ]; then \ + echo "Couldn't find quilt. Please install it or add it to the build-depends for this package."; \ + exit 1; \ + fi; \ + if $(QUILT) next >/dev/null 2>&1; then \ + echo -n "Applying patches..."; \ + if $(QUILT) push -a -v >$(STAMP_DIR)/log/patch 2>&1; then \ + cat $(STAMP_DIR)/log/patch; \ + echo "successful."; \ + else \ + cat $(STAMP_DIR)/log/patch; \ + echo "failed! (check $(STAMP_DIR)/log/patch for details)"; \ + exit 1; \ + fi; \ + else \ + echo "No patches to apply"; \ + fi; \ + >$@ + +# Revert all patches to the upstream source. +.PHONY: unpatch +unpatch: + rm -f $(STAMP_DIR)/patch + @echo -n "Unapplying patches..."; \ + if [ -e $(STAMP_DIR)/patches/applied-patches ]; then \ + if $(QUILT) pop -a -v >$(STAMP_DIR)/log/unpatch 2>&1; then \ + cat $(STAMP_DIR)/log/unpatch; \ + echo "successful."; \ + else \ + cat $(STAMP_DIR)/log/unpatch; \ + echo "failed! (check $(STAMP_DIR)/log/unpatch for details)"; \ + exit 1; \ + fi; \ + else \ + echo "nothing to do."; \ + fi + +# Clean the generated maintainer scripts. +.PHONY: cleanscripts +cleanscripts: + rm -f $(STAMP_DIR)/genscripts + rm -f debian/*.config \ + debian/*.postinst \ + debian/*.postrm \ + debian/*.preinst \ + debian/*.prerm + +# Clean the package build tree. +.PHONY: xsfclean +xsfclean: cleanscripts unpatch + dh_testdir + rm -f .pc patches + rm -rf $(STAMP_DIR) $(SOURCE_DIR) + rm -rf imports + dh_clean debian/shlibs.local \ + debian/MANIFEST.$(ARCH) debian/MANIFEST.$(ARCH).new \ + debian/po/pothead + +# Generate the debconf templates POT file header. +debian/po/pothead: debian/po/pothead.in + sed -e 's/SOURCE_VERSION/$(SOURCE_VERSION)/' \ + -e 's/DATE/$(shell date "+%F %X%z"/)' <$< >$@ + +# Update POT and PO files. +.PHONY: updatepo +updatepo: debian/po/pothead + debian/scripts/debconf-updatepo --pot-header=pothead --verbose + +# Use the MANIFEST files to determine whether we're shipping everything we +# expect to ship, and not shipping anything we don't expect to ship. +.PHONY: check-manifest +stampdir_targets+=check-manifest +check-manifest: $(STAMP_DIR)/check-manifest +$(STAMP_DIR)/check-manifest: $(STAMP_DIR)/install + # Compare manifests. + (cd debian/tmp && find -type f | LC_ALL=C sort | cut -c3-) \ + >debian/MANIFEST.$(ARCH).new + # Construct MANIFEST files from MANIFEST.$(ARCH).in and + # MANIFEST.$(ARCH).all or MANIFEST.all. + if expr "$(findstring -DBuildFonts=NO,$(IMAKE_DEFINES))" \ + : "-DBuildFonts=NO" >/dev/null 2>&1; then \ + LC_ALL=C sort -u debian/MANIFEST.$(ARCH).in >debian/MANIFEST.$(ARCH); \ + else \ + if [ -e debian/MANIFEST.$(ARCH).all ]; then \ + LC_ALL=C sort -u debian/MANIFEST.$(ARCH).in debian/MANIFEST.$(ARCH).all >debian/MANIFEST.$(ARCH); \ + else \ + LC_ALL=C sort -u debian/MANIFEST.$(ARCH).in debian/MANIFEST.all >debian/MANIFEST.$(ARCH); \ + fi; \ + fi + # Confirm that the installed file list has not changed. + if [ -e debian/MANIFEST.$(ARCH) ]; then \ + if ! cmp -s debian/MANIFEST.$(ARCH) debian/MANIFEST.$(ARCH).new; then \ + diff -U 0 debian/MANIFEST.$(ARCH) debian/MANIFEST.$(ARCH).new || DIFFSTATUS=$$?; \ + case $${DIFFSTATUS:-0} in \ + 0) ;; \ + 1) if [ -n "$$IGNORE_MANIFEST_CHANGES" ]; then \ + echo 'MANIFEST check failed; ignoring problem because \$$IGNORE_MANIFEST_CHANGES set' >&2; \ + echo 'Please ensure that the package maintainer has an up-to-date version of the' >&2; \ + echo 'MANIFEST.$(ARCH).in file.' >&2; \ + else \ + echo 'MANIFEST check failed; please see debian/README' >&2; \ + exit 1; \ + fi; \ + ;; \ + *) echo "diff reported unexpected exit status $$DIFFSTATUS when performing MANIFEST check" >&2; \ + exit 1; \ + ;; \ + esac; \ + fi; \ + fi + >$@ + +# Because we build (and install) different files depending on whether or not +# any architecture-independent packages are being created, the list of files we +# expect to see will differ; see the discussion of the "build" target above. +.PHONY: check-manifest-arch check-manifest-indep +check-manifest-arch: IMAKE_DEFINES+= -DBuildSpecsDocs=NO -DBuildFonts=NO -DInstallHardcopyDocs=NO +check-manifest-arch: check-manifest +check-manifest-indep: check-manifest + +# Remove files from the upstream source tree that we don't need, or which have +# licensing problems. It must be run before creating the .orig.tar.gz. +# +# Note: This rule is for Debian package maintainers' convenience, and is not +# needed for conventional build scenarios. +.PHONY: prune-upstream-tree +prune-upstream-tree: + # Ensure we're in the correct directory. + dh_testdir + grep -rvh '^#' debian/prune/ | xargs --no-run-if-empty rm -rf + +# Change to what should be the correct directory, ensure it is, and if +# so, create the .orig.tar.gz file. Exclude the debian directory and its +# contents, and any .svn directories and their contents (so that we can safely +# build an .orig.tar.gz from SVN checkout, not just an export). +# +# Note: This rule is for Debian package maintainers' convenience, and is not +# needed for conventional build scenarios. +# +# This rule *IS* the recommended method for creating a new .orig.tar.gz file, +# for the rare situations when one is needed. +.PHONY: make-orig-tar-gz +make-orig-tar-gz: clean prune-upstream-tree + ( cd .. \ + && if [ $(shell basename $(CURDIR)) != $(SOURCE_NAME)-$(NO_EPOCH_VER) ]; then \ + echo "Our current working directory has the wrong name. Renaming..." >&2; \ + mv $(CURDIR) $(SOURCE_NAME)-$(NO_EPOCH_VER); \ + fi; \ + tar --exclude=debian --exclude=debian/* \ + --exclude=.svn --exclude=.svn/* \ + -cf - $(SOURCE_NAME)-$(NO_EPOCH_VER) \ + | gzip -9 >$(SOURCE_NAME)_$(NO_EPOCH_VER).orig.tar.gz; \ + ) + +# Verify that there are no offsets or fuzz in the patches we apply. +# +# Note: This rule is for Debian package maintainers' convenience, and is not +# needed for conventional build scenarios. +.PHONY: patch-audit +patch-audit: prepare unpatch + @echo -n "Auditing patches..."; \ + >$(STAMP_DIR)/log/patch; \ + FUZZY=; \ + while [ -n "$$($(QUILT) next)" ]; do \ + RESULT=$$($(QUILT) push -v | tee -a $(STAMP_DIR)/log/patch | grep ^Hunk | sed 's/^Hunk.*\(succeeded\|FAILED\).*/\1/');\ + case "$$RESULT" in \ + succeeded) \ + echo "fuzzy patch: $$($(QUILT) top)" \ + | tee -a $(STAMP_DIR)/log/$$($(QUILT) top); \ + FUZZY=yes; \ + ;; \ + FAILED) \ + echo "broken patch: $$($(QUILT) next)" \ + | tee -a $(STAMP_DIR)/log/$$($(QUILT) next); \ + exit 1; \ + ;; \ + esac; \ + done; \ + if [ -n "$$FUZZY" ]; then \ + echo "there were fuzzy patches; please fix."; \ + exit 1; \ + else \ + echo "done."; \ + fi + +# Generate the maintainer scripts. +.PHONY: genscripts +stampdir_targets+=genscripts +genscripts: $(STAMP_DIR)/genscripts +$(STAMP_DIR)/genscripts: $(STAMP_DIR)/stampdir + for FILE in debian/*.config.in \ + debian/*.postinst.in \ + debian/*.postrm.in \ + debian/*.preinst.in \ + debian/*.prerm.in; do \ + if [ -e "$$FILE" ]; then \ + MAINTSCRIPT=$$(echo $$FILE | sed 's/.in$$//'); \ + sed -n '1,/^#INCLUDE_SHELL_LIB#$$/p' <$$FILE \ + | sed -e '/^#INCLUDE_SHELL_LIB#$$/d' >$$MAINTSCRIPT.tmp; \ + cat debian/xsfbs/xsfbs.sh >>$$MAINTSCRIPT.tmp; \ + sed -n '/^#INCLUDE_SHELL_LIB#$$/,$$p' <$$FILE \ + | sed -e '/^#INCLUDE_SHELL_LIB#$$/d' >>$$MAINTSCRIPT.tmp; \ + sed -e 's/@SOURCE_VERSION@/$(SOURCE_VERSION)/' \ + -e 's/@OFFICIAL_BUILD@/$(OFFICIAL_BUILD)/' \ + -e 's/@DEFAULT_DCRESOLUTIONS@/$(DEFAULT_DCRESOLUTIONS)/' \ + <$$MAINTSCRIPT.tmp >$$MAINTSCRIPT; \ + rm $$MAINTSCRIPT.tmp; \ + fi; \ + done + # Validate syntax of generated shell scripts. + #sh debian/scripts/validate-posix-sh debian/*.config \ + # debian/*.postinst \ + # debian/*.postrm \ + # debian/*.preinst \ + # debian/*.prerm + >$@ + +# Generate the shlibs.local file. +debian/shlibs.local: + cat debian/*.shlibs >$@ + +SERVERMINVERS = $(shell cat /usr/share/xserver-xorg/serverminver 2>/dev/null) +VIDEOABI = $(shell cat /usr/share/xserver-xorg/videoabiver 2>/dev/null) +INPUTABI = $(shell cat /usr/share/xserver-xorg/inputabiver 2>/dev/null) +SERVER_DEPENDS = xserver-xorg-core (>= $(SERVERMINVERS)) +VIDDRIVER_PROVIDES = xserver-xorg-video-$(VIDEOABI) +INPDRIVER_PROVIDES = xserver-xorg-input-$(INPUTABI) +ifeq ($(PACKAGE),) +PACKAGE=$(shell awk '/^Package:/ { print $$2; exit }' < debian/control) +endif + +.PHONY: serverabi +serverabi: +ifeq ($(SERVERMINVERS),) + @echo error: xserver-xorg-dev needs to be installed + @exit 1 +else + echo "xserver:Depends=$(SERVER_DEPENDS)" >> debian/$(PACKAGE).substvars + echo "xviddriver:Provides=$(VIDDRIVER_PROVIDES)" >> debian/$(PACKAGE).substvars + echo "xinpdriver:Provides=$(INPDRIVER_PROVIDES)" >> debian/$(PACKAGE).substvars +endif + +include debian/xsfbs/xsfbs-autoreconf.mk + +# vim:set noet ai sts=8 sw=8 tw=0: --- xorg-server-1.3.0.0.dfsg.orig/debian/xprint-common.templates +++ xorg-server-1.3.0.0.dfsg/debian/xprint-common.templates @@ -0,0 +1,12 @@ +Template: xprint-common/default_printer_resolution +Type: string +Default: 600 +_Description: Default printer resolution + By default Xprint assumes a printer resolution of 600dpi. This should be fine + for the majority of printers today. + . + On certain 1200dpi printers, however, the image might appear squashed in the + corner of the page, or it might be blown up too large on 300dpi printers. If + you are experiencing these kinds of printing problems, you may want to set + the default printer resolution to a more appropriate value. See + /usr/share/doc/xprint-common/README.printing-problems.gz for more details. --- xorg-server-1.3.0.0.dfsg.orig/debian/xprint.changelog.Debian +++ xorg-server-1.3.0.0.dfsg/debian/xprint.changelog.Debian @@ -0,0 +1,810 @@ +xprint (1:1.1.99.3+git20060910-9) unstable; urgency=low + + * Galician debconf translation. Thanks Jacobo Tarrio. Closes: #408216. + * Patch 60_font_links makes symlinks to font files relative to local + directory, for easier management. Also ensures + NewCenturySchlbk-BoldItalic.pmf is installed. Closes: #412990. + + -- Drew Parsons Sat, 3 Mar 2007 00:32:11 +1100 + +xprint (1:1.1.99.3+git20060910-8) unstable; urgency=low + + * Spanish debconf translation. Thanks Fernando Cereza. Closes: #402984. + + -- Drew Parsons Tue, 2 Jan 2007 22:29:25 +1100 + +xprint (1:1.1.99.3+git20060910-7) unstable; urgency=low + + * Patch 50_byteswap.patch enables Xprint with GLX support on Hurd + and GNU/FreeBSD. Closes: #400869. + + -- Drew Parsons Fri, 1 Dec 2006 14:21:16 +1100 + +xprint (1:1.1.99.3+git20060910-6) unstable; urgency=low + + * Xprint 1.1.99.3 actually Build-Depends: mesa (>= 6.5.1). + Closes: #395519. + + -- Drew Parsons Sun, 12 Nov 2006 14:53:25 +1100 + +xprint (1:1.1.99.3+git20060910-5) unstable; urgency=low + + * Even though --disable-record is used, record is still built. This + is probably a bug in upstream Makefile.am, or possibly recordproto + ought to be added to the REQUIRED_MODULES in configure.ac. + Workaround with Build-Depends: x11proto-record-dev. + + -- Drew Parsons Mon, 2 Oct 2006 14:14:17 +1000 + +xprint (1:1.1.99.3+git20060910-4) unstable; urgency=low + + * Connect tabbed blocks in debian/rules in order to properly disable + dri, Xorg, Xvfb and Xnest at configure step. + * Refine extension dependencies and disables in line with what + Xprint actually supports, as defined in mi/miinitext.c. + + -- Drew Parsons Mon, 2 Oct 2006 02:12:13 +1000 + +xprint (1:1.1.99.3+git20060910-3) unstable; urgency=low + + * Restore OpenGL support. "Because I can". + * Incidentally, bugs fixed previously in experimental can be closed + by using -v with dpkg-buildpackage when next uploading to unstable. + + -- Drew Parsons Sun, 1 Oct 2006 21:03:11 +1000 + +xprint (1:1.1.99.3+git20060910-2) unstable; urgency=low + + * xfixes 4 is now in unstable, so bring the new xprint into unstable + * It really irritates me the way bugs fixed in experimental are not + fully closed when the upload to unstable is made. + Closes: #377659, #384775, #383166, #375125, #369834. + + -- Drew Parsons Wed, 20 Sep 2006 10:21:50 +1000 + +xprint (1:1.1.99.3+git20060910-1) experimental; urgency=low + + * Latest git. + Patches applied upstream: + 80_no_composite + 91_Xprint_README + 91_enforce_bash + 91_install_config + 91_install_etc + 94_man_typoes + * Install manpages via * to avoid defining .1 or .1x. Closes: #383166. + + -- Drew Parsons Sun, 10 Sep 2006 19:21:27 +1000 + +xprint (1:1.1.99.2+git20060627-0.4) experimental; urgency=low + + * Swapped patch 80_check_windowpixmap for 80_no_composite. Composite has + no role in Xprint. + * LSB compliance: force-reload only operates conditionally when Xprt is + already running. Thanks Sven Mueller. Closes: #377659. + * Added Portuguese debconf translation, thanks Rui Branco. Closes: #384775. + * Adjust debian/xprint.manpages to allow for a shifting suffix. + Closes: #383166. + + -- Drew Parsons Sun, 27 Aug 2006 13:51:57 +1000 + +xprint (1:1.1.99.2+git20060627-0.3) experimental; urgency=low + + * Why doesn't dpkg -l damn well report versions correctly? + Build-Depends: libxfont-dev (>=1:1.1) not (>=1.1). + + -- Drew Parsons Tue, 27 Jun 2006 21:04:24 +1000 + +xprint (1:1.1.99.2+git20060627-0.2) experimental; urgency=low + + * Oops should add versioned build-depends on libxfont-dev too. + + -- Drew Parsons Tue, 27 Jun 2006 19:28:03 +1000 + +xprint (1:1.1.99.2+git20060627-0.1) experimental; urgency=low + + * Latest upstream git: Xprint subdirectory moved to hw. + Patches updated accordingly. + * Actually create the patch allowing build with new libxfont (freetype + 2.2) and avoiding a segfault (patch 80_check_windowpixmap). + * Versioned dependencies on x11proto-fixes-dev, libxfont1. Closes: #375125. + * Standards version 3.7.2. + + -- Drew Parsons Tue, 27 Jun 2006 13:31:08 +1000 + +xprint (1:1.1.99.2+git20060614-0.1) experimental; urgency=low + + * New upstream version (including lastest git). + * Russian debconf translation. СпаÑибо Юрию Козлову. Closes: #369834. + * Upload to experimental while we wait for dependencies (libxfont 1.1, + libxfixes 4) to reach unstable. + + -- Drew Parsons Thu, 22 Jun 2006 16:04:40 +1000 + +xprint (1:1.0.2-1) unstable; urgency=low + + * New upstream version (hey! slashdot is good for something after all! + (http://linux.slashdot.org/article.pl?sid=06/05/02/2216235) + * Only include the required ft.h, ftfuncs.h files in ./extras. + + -- Drew Parsons Thu, 4 May 2006 17:46:57 +1000 + +xprint (1:1.0.1-7) unstable; urgency=low + + * Build-Depends: libgl1-mesa-dev|libgl-dev. + + -- Drew Parsons Mon, 1 May 2006 22:58:28 +1000 + +xprint (1:1.0.1-6) unstable; urgency=low + + * I wonder if I should install pbuilder? + * Build-Depends: mesa-common-dev (only needed when compiling with + OpenGL support). Guess what, closes: #365386. + + -- Drew Parsons Mon, 1 May 2006 22:22:40 +1000 + +xprint (1:1.0.1-5) unstable; urgency=low + + * Build-Depends: pkg-config *sigh*. + + -- Drew Parsons Mon, 1 May 2006 17:55:46 +1000 + +xprint (1:1.0.1-4) unstable; urgency=low + + * Added Build-Depends: xutils-dev to get BUILD_LINUXDOC etc defined for + configure.ac. + * Looking more closely at "checking for XSERVERCFLAGS", need to add + Build-Depends: libxau-dev, libxdmcp-dev. + + -- Drew Parsons Mon, 1 May 2006 17:32:46 +1000 + +xprint (1:1.0.1-3) unstable; urgency=low + + * Build-Depends: libtool. Closes: #365386 (again). + + -- Drew Parsons Mon, 1 May 2006 09:31:33 +1000 + +xprint (1:1.0.1-2) unstable; urgency=low + + * Dutch debconf translation. Thanks Kurt De Bree. Closes: #363035. + * Restore dh_installdebconf in debian/rules to get debconf back again. + * Added xprint-common Depends: xfonts-encodings, since /etc/init.d.xprint + expects to be able to find encodings.dir. + * Since /etc/init.d/xprint no longer knows about /usr/X11R6/bin, let + xprint-common Depends on x11-common (>=1:7.0.12) to ensure Xprt is in + /usr/bin (even if it comes from an old package, where it would be + forced to use the /usr/X11R6/bin symlink). Closes: #363245. + * Make /etc/init.d/xprint exit quietly if the Xprt binary can't be found. + Closes: #270054. + * Added Build-Depends: automake1.9. Closes: #365386. + * Standards version 3.7.0. + * Restore xprint-common debconf files lost in X11R7 transition (where did + they disappear to?) + * Added lintian override to xprint-common to not trigger + "package-depends-on-an-x-font-package" on Depends: xfonts-encodings. + + -- Drew Parsons Mon, 1 May 2006 00:35:12 +1000 + +xprint (1:1.0.1-1) unstable; urgency=low + + * Xprint from X11R7! Closes: #360446, #356987, #362884. + * Xprt does not build in Xorg 7.0, hence need CVS (X11R7.1). However CVS + needs xfixes 4 which will not be available in Debian until the XSF + prepares 7.1. So backport patches (relating to build with FreeType + support). + * Please be advised that as a consequence of the above there will be a + degradation of output quality until Debian is able to upgrade to 7.1 + (due end of May). Please hold back from filing bug reports about font + quality until that upgrade has occurred. My apologies for the + inconvenience. + * Build-depends updated to follow modular X11R7. + * Xprint utilities removed (transferred to xprint-utils). + * Set debhelper compatibility version to 5. + * Updated xprint init file to expect encodings.dir in + /usr/share/fonts/X11/encodings. + + -- Drew Parsons Mon, 17 Apr 2006 14:03:06 +1000 + +xprint (1:0.1.0.alpha1-13) unstable; urgency=low + + * Got to actually install the overrides file for it to take effect, dammit. + * Swedish debconf translation. Thanks, Daniel Nylander. Closes: #330651. + * Patch 91_xsession_ifexec: only define XPSERVERLIST in + /etc/X11/Xsession.d/92xprint-xpserverlist if /etc/init.d/xprint is + present and executable. Some administrators may wish to disable xprint + by making the init script non-executable. Closes: #330812. + * Break a circular dependency by downgrading xprint-common's Depends: on + xprint to a Recommends:. Closes: #339928. + * Added a paragraph to README.printing-problems indicating that CUPS + settings may also need to be adjusted if the printer resolution is + mismatched. Closes: #342714. + + -- Drew Parsons Sun, 11 Dec 2005 21:10:52 +1100 + +xprint (1:0.1.0.alpha1-12) unstable; urgency=low + + * Patch 93_init_startstopdaemon has the side effect that some log messages + (errors and warnings) from Xprt are lost, including attempted connections. + Let me know if you want all such messages back again. + * Ditch the xprt and xprt-xprintorg dummy packages. Closes: #322078, #303123. + * Time to start stripping binaries. Closes: #164952. + * Vietnamese debconf translation. Thanks Clytie Siddall. Closes: #324267. + * Added xprint-overrides to ignore pesky lintian warnings. + * Removed 93_check_default_start, since the facility to control rc scripts + is provided elsewhere (see command update-rc.d, or packages rcconf, + sysv-rc-conf or file-rc). This means /etc/default/Xprint is no longer + used. Use the facilities mentioned above if you want Xprint installed + but not to start up by default. + However, it is true that the manner in which Debian handles packages is + only partially implemented. Packages start their daemons using + invoke-rc.d, whose operations may be controlled by /usr/sbin/policy-rc.d + it exists. But it does not exist. Therefore upon upgrade (or + dpkg-reconfigure), the Xprt daemon will be started, even if you have + correctly set the rc symlinks. You will need to stop it by hand + "/etc/init.d/xprint stop" (this only applies to upgrades, your rc + configuration will be honoured at boot). This is a general Debian + problem, for having daemons installed but not running. It is *not* an + Xprint problem. Sorry. See Bug#291766 for further discussion. + + -- Drew Parsons Sat, 10 Sep 2005 00:38:08 +1000 + +xprint (1:0.1.0.alpha1-11) unstable; urgency=low + + * Created patch 93_init_startstopdaemon to use start-stop-daemon to launch + and kill Xprt. It handles backgrounding of the Xprt process, so we + don't get rogue /etc/init.d/xprint processes running alongside Xprt. + Note during stop, we retain kill ${pid} to facilitate compatibility when + upgrading (otherwise the new init script won't have a + /var/run/Xprt_0.pid file to kill when upgrading from the old version). + Closes: #229252, #255240, #313315. + * Patch 94_man_typoes fixes spelling errors. Thanks A. Costa. + Fixed in *.sgml docbook files, propagated to man and html using + docbookconv.sh (also altered to adapt to Debian's current XSLT + structure, accounting for the fact that docbook2man cannot read the sgml + file at the moment). Note there are problems generating the derived doc + files using HasDocBookTools in config/cf/xprint_host.def, so html and + man are generated by hand and included in the patch. + Closes: #306701, #306702. + * New standards version: 3.6.2. + + -- Drew Parsons Sat, 2 Jul 2005 23:05:44 +1000 + +xprint (1:0.1.0.alpha1-10) unstable; urgency=high + + * Reduced the priority of the printer resolution debconf question to + "medium", since the default of 600 is fine for most printers today. + Closes: #298954. + * Reduced the amount of the text in the debconf question. + Closes: #298956, #298959. + * Added new binaries and man pages to xprint.install. + * New patch 92_lib_not_lib64_on_amd64ppc64: ppc64 and amb64 use + /usr/X11R6/lib not /usr/X11R6/lib64. Reported upstream, Xprint bug #2803. + Closes: #301028. + * New patch 91_no_ExecCommand: ExecCommand does not belong in + attributes.{c|h}, and gcc4 complains about it. See Debian bug #301028 and + upstream Xprint bug #2254. + * New patch 93_spooltodir_check_file_exists. Closes: #295139. + * 93_spooltodir_check_file_exists also checks size of file name is not too + long. Closes: #284620. + + -- Drew Parsons Fri, 25 Mar 2005 18:29:49 +1100 + +xprint (1:0.1.0.alpha1-9) unstable; urgency=medium + + * Taking over xprt, which has been expelled from XFree86. + * Take the opportunity the rationalise package naming: + - use "xprint" rather than "xprint-xprintorg". Since the Xprint + development version (known as xprint.xprintorg but hosted at + xprint.mozdev.org) has been accepted as the official X.org development + version, it is now unlikely that the separate domain xprint.org will be + registered. + - xprint contains Xprt and other architecture-dependent binaries + - xprint-common contains architecture-independent files (config files, + including /etc/init.d/xprint) + - xprt and xprt-xprintorg become dummy packages. Closes: #294324. + * Even without Super-Cow powers, this Xprint washes whiter than. + Closes: #275656. + * Add example of different resolutions for different printers to + README.printing-problems. Closes: #293539. + * In xprint-common.postinst, explicitly stop server before letting debhelper + (dh_installinit) start it. This avoids complaints in the situation where + Xprt was started by a simultaneous upgrade of the xprint package. + Closes: #292355. + * For simplicity of maintenance, removed debconf question about old + arrangement of config files. Since Xprint is not in woody, this will not + cause upgrade problems. + * Bump up the epoch to ensure a smooth upgrade of xprt (from + 4.3.0.dfsg.1-10). + + -- Drew Parsons Thu, 17 Feb 2005 21:02:18 +1100 + +xprint-xprintorg (0.1.0.alpha1-8) unstable; urgency=low + + * Updated debconf translations: + - Brazilian (thanks Andre Luis Lopes) + - German (thanks Erik Schanze) + - Czech (thanks Miroslav Kure) + + -- Drew Parsons Sun, 30 Jan 2005 13:16:30 +1100 + +xprint-xprintorg (0.1.0.alpha1-7) unstable; urgency=medium + + * Updated debconf translations: + - Danish, (thanks Morten Bo Johansen) + - Japanese (thanks Hideki Yamane) + - French (thanks Christian Perrier) + + Closes: #291425, #292363, #292459. + + -- Drew Parsons Thu, 27 Jan 2005 19:09:39 +1100 + +xprint-xprintorg (0.1.0.alpha1-6) unstable; urgency=medium + + * Added debconf question to set the default printer resolution. + Closes: #280159. + + -- Drew Parsons Wed, 19 Jan 2005 01:44:29 +1100 + +xprint-xprintorg (0.1.0.alpha1-5) unstable; urgency=high + + * Related to the dash problem again, just remove /bin/sh altogether from + 92xprint-xpserverlist; this should be simpler than changing it to + /bin/bash. Will close #288585 (but leave open pending upstream fix). + Closes: #288844. + + -- Drew Parsons Tue, 11 Jan 2005 19:59:08 +1100 + +xprint-xprintorg (0.1.0.alpha1-4) unstable; urgency=low + + * Force /etc/init.d/xprint to use bash, since there are conflicts with + dash when it is /bin/sh. Patch 91_enforce_bash. Closes: #288630. Also + closes #288585, but I will leave this open as a reminder to upstream to + fix the non-Posix code. + * On a related note, upstream simply no longer asks Linux systems to use ksh + at all, so 91_bash_before_ksh is deprecated. Hence, "test -a" is no + longer used. Closes: #285056, #256241. + * xset is still being used in /etc/init.d/xprint to build the fontlist, so + XPROJECTROOT (or /usr/X11R6/bin) still needs to be defined. + Closes: #282723. + * Removed square brackets around \n, used by tr in /etc/init.d/xprint. + Patch 93_init_tr_fix. Closes: #258419, #264983. + + -- Drew Parsons Wed, 5 Jan 2005 13:59:18 +1100 + +xprint-xprintorg (0.1.0.alpha1-3) unstable; urgency=medium + + * There have been enough positive reports about 1.0alpha1 in experimental + (contrasted with negative reports of the version in sarge), + that I think it is time to get it into unstable and sarge. + * I'll keep the "0.1.0" versioning for now. I'll almost certainly make the + final 1.0 version to be "1.0". + * Added Danish debconf translation. Thanks Morten Bo Johansen. + Closes: #285957. + + -- Drew Parsons Mon, 3 Jan 2005 14:43:04 +1100 + +xprint-xprintorg (0.1.0.alpha1-2) experimental; urgency=low + + * Build-Depends: flex, bison. Closes: #284920. + * amd64 support confirmed. Closes: #278510, #282655. + * I was joking about the cubes rotating on your paper. But the OpenGL + support is real. + + -- Drew Parsons Sun, 12 Dec 2004 00:29:23 +1100 + +xprint-xprintorg (0.1.0.alpha1-1) experimental; urgency=low + + * New upstream version: 1.0alpha1, preview of the forthcoming v1.0. + * Based on X.Org 6.8.2, with innumerable improvements: + - better handling of broken fonts + - OpenGL support (yes, rotating cubes on your printer paper) + - better greyscale support + - generally more stable + - supports amd64 + * Recommended by upstream to go into sarge. + + -- Drew Parsons Tue, 7 Dec 2004 17:47:27 +1100 + +xprint-xprintorg (0.0.9.final.001-9) unstable; urgency=medium + + * Added patch 92_close_std_files to get /etc/init.d/xprint to close the + standard file descriptors (stdin/out/err) when Xprt is invoked. This + solves a number of problems, such as hanging sessions of dpkg-reconfigure, + ssh, chroot. Thanks for the patch, Nicolas Boullis. + Closes: #233260, #265827, #234132. OK, #234132 also refers to the bash + shells, which are still there, but there are other bug reports dealing + with them. + + -- Drew Parsons Tue, 7 Dec 2004 10:03:30 +1100 + +xprint-xprintorg (0.0.9.final.001-8) unstable; urgency=medium + + * Added patch 93_check_default_start, which checks if START_XPRINT=0 in + /etc/default/xprint before starting Xprt. Thanks Anthony DeRobertis. + Closes: #281973. + * Created debian/default to be installed as /etc/default/xprint. + * Suggests: xbase-clients, since xset is used by /etc/init.d/xprint. + Closes: #282723. + + -- Drew Parsons Thu, 2 Dec 2004 19:00:42 +1100 + +xprint-xprintorg (0.0.9.final.001-7) unstable; urgency=medium + + * Added Czech translation for debconf templates. Thanks Miroslav Kure. + Closes: #274073. + * Added Eugeniy Meshcheryakov's patch (93_xprint_fonts_fix) to improve + TrueType font handling. Closes: #272368. + * Added new workaround to README.printing-problems for printing problem + with Debian home page: delete "font.name.serif.x-western" entry from + pref.js. + * Removed Recommends: xprt from xprt-common, since it Depends: on it. + + -- Drew Parsons Fri, 12 Nov 2004 14:37:23 +1100 + +xprint-xprintorg (0.0.9.final.001-6) unstable; urgency=high + + * Added another question to README.printing-problems to address the + problem when the image is printed too large or too small (default + printer resolution in /etc/Xprint/C/print/attributes/document + needs to be adjusted for your printer). Closes: #262958, #267964. + * Removed man page for xpxmhelloworld: binary is not provided. + + -- Drew Parsons Sun, 12 Sep 2004 22:31:15 +1000 + +xprint-xprintorg (0.0.9.final.001-5) unstable; urgency=high + + * README.printing-problems needs to be added to debian/xprt-common.docs. + + -- Drew Parsons Sun, 22 Aug 2004 14:12:13 +1000 + +xprint-xprintorg (0.0.9.final.001-4) unstable; urgency=high + + * Added README.printing-problems, describing the printing problem of + words being run together without spaces. The file suggests two + workarounds (remove Xprint's fonts directories, or add a + firefox/mozilla stylesheet). Thanks to Jan Willem Stumpel for the + CSS workaround and to Yaacov Akiba Slama for the fonts directory + workaround. + * Set urgency to high to get this workaround description into sarge. + + -- Drew Parsons Sun, 22 Aug 2004 12:30:57 +1000 + +xprint-xprintorg (0.0.9.final.001-3) unstable; urgency=low + + * Created patch (91_no_sh_suffix_in_Xsession.d) to not provide .sh + suffix to Xsession.d script. Closes: #264978. + * Added Erik Schanze's German debconf translation. Closes: #264611. + * Added a note to README.Debian concerning the "could not open + default font 'fixed'" problem preventing Xprt from starting, which + has been reported by some users. The bug has not yet been + reproduced on a system which does not already experience it, + making it difficult to fix it properly. A work-around ("sort -u -r" + instead of "sort -u" in /etc/init.d/xprint) is suggested. This + concerns bugs such as #259281, #257731, #259281. Apparently the + 009.001 release did not help. Maybe v010 will get it at last? + + -- Drew Parsons Sun, 15 Aug 2004 18:20:13 +1000 + +xprint-xprintorg (0.0.9.final.001-2) unstable; urgency=low + + * Added Brazilian Portuguese (pt_BR) debconf translation. + Thanks Andre Luis Lopes. Closes: #262554. + * Uses Dwayne C. Litzenberger's patch (92_xprint-security-holes-fix.patch) + to print to file into the user's $HOME directory instead of /tmp. + In subdirectory ../Xprintjobs. Security patch. Closes: #262871. + * xprt-xprintorg includes binaries and manpages for other auxiliary + programs: xprehashprinterlist, xpsimplehelloworld, xpxthelloworld. + The manpage for xpxmhelloworld is omitted since the binary is not built. + The general man page for Xprint is also included. + + -- Drew Parsons Sun, 8 Aug 2004 18:59:52 +1000 + +xprint-xprintorg (0.0.9.final.001-1) unstable; urgency=low + + * Upstream maintenance release v009.001. + - only use basic optimisation on PPC. Closes: #252362, #258844. + - default printer resolution in /usr/share/Xprint/xserver/C/print/attributes/document + is now 600dpi not 300dpi. Closes: #254704, #256175. + - should no longer hang when using CUPS. Closes: #256850. + - /etc/init.d/xprint now has a simpler copyright statement, without + "all rights reserved". Closes: #250887. + - incorporates lpr/CUPS patch (10-lpr-cups). + * Will hopefully deal with a number of TrueType-related font + problems (e.g. #259281, #257731, #259281). Bugs will be closed in + the next upload, pending positive reports from bug reporters. + * Treat /usr/share/Xprint/xserver/C/print/Xprinters as a config file + (place in /etc/). Closes: #258413. + * Patch applied to use bash in preference to ksh. Bug #256241 will + be closed once the '-a' posix issue is appropriately settled. + * Patch 92_lsprinter_path checks command is executable, and adds + test for /usr/bin/xplsprinters. Closes: #257750. + + -- Drew Parsons Mon, 19 Jul 2004 19:29:22 +1000 + +xprint-xprintorg (0.0.9.final-3) unstable; urgency=low + + * Applied patch (92_make_amd64) to enable building on AMD 64. + Closes: #254752. + * Added handling for DEB_BUILD_OPTIONS' noopt (i.e. -O0) in + debian/rules, using the code sample in Policy 10.1. turned on -g + by default (the debug keyword is deprecated, it should always be + on). See bug #252659 (but I think it's not yet passed to Xprint's + imake system). + + -- Drew Parsons Fri, 18 Jun 2004 19:13:09 +1000 + +xprint-xprintorg (0.0.9.final-2) unstable; urgency=low + + * Applied upstream patch to fix some lpr/CUPS problems + (see http://pdx.freedesktop.org/cgi-bin/bugzilla/show_bug.cgi?id=608) + - BugZilla #608 ("Can not print on Debian/CUPS due to error |Xprt_64: + lpr: unable to print file: server-error-not-accepting-jobs|"): + Xprt did setup the list of supplementary group ids, causing print + failure when the the calling user must be a member in a specific + group to be allowed to print. + (patch placed in debian/patches/10-lpr-cups) + + -- Drew Parsons Sun, 9 May 2004 17:41:54 +1000 + +xprint-xprintorg (0.0.9.final-1) unstable; urgency=low + + * v0.9 official release (cvs20040322, released 28 March 2004). + * Rearranged debian/rules to build binary-indep and binary-arch + separately. Closes: #241066. + + -- Drew Parsons Fri, 2 Apr 2004 20:45:33 +1000 + +xprint-xprintorg (0.0.9.cvs20040301-1) unstable; urgency=low + + * New upstream version: v009 release candidate 2. + * Partially addresses the complaints about extra processes alongside the + Xprt daemon: tee no longer invoked for logging. Closes: #224189. + * Users finally convinced me there's no point only having xprt-common + Recommends: xprt-xprintorg. xprt-common is not required for client-only + setups (they only need XPSERVERLIST to be defined, which can be done + without /etc/init.d/xprint. Remember to switch off "-nolisten tcp" in the + Xprt server configuration if you want to do this). So having xprt-common + installed without xprt-xprintorg is not in fact particularly useful, + unless you really want the config files stored on a different host to the + Xprt server, which seems somehow pointless. + So, xprt-common now Depends: xprt-xprintorg ( | xprt). + Closes: #195070, #211002, #238559. + * xprt-common only contains config files, so it should really be + Architecture: all. Why wasn't this noticed before? + + -- Drew Parsons Sat, 20 Mar 2004 17:06:20 +1100 + +xprint-xprintorg (0.0.9.cvs20040216-2) unstable; urgency=low + + * Updated the Japanese debconf translation. Closes: #234254. + * Replaced Build-Depends: xlibs-dev in favour of the new separated + X libraries. + + -- Drew Parsons Wed, 25 Feb 2004 19:54:26 +1100 + +xprint-xprintorg (0.0.9.cvs20040216-1) unstable; urgency=low + + * New upstream version: v009 release candidate 1. + + -- Drew Parsons Sat, 21 Feb 2004 12:02:12 +1100 + +xprint-xprintorg (0.0.9.cvs20040114-3) unstable; urgency=low + + * The "Now He Tells Me" release. + * Build-depends: xutils. This provides mkfontdir, whose absence was the + real cause of the bug I tried to fix in -2. + + -- Drew Parsons Thu, 15 Jan 2004 17:18:09 +1030 + +xprint-xprintorg (0.0.9.cvs20040114-2) unstable; urgency=low + + * Build-depends: lesstif2-dev. In order to compile xpxmhelloworld and allow + the build to proceed. Not that I package xpxmhelloworld, ho-hum. + + -- Drew Parsons Thu, 15 Jan 2004 10:43:56 +1030 + +xprint-xprintorg (0.0.9.cvs20040114-1) unstable; urgency=low + + * New upstream version (0.0.9 gamma) + - fixes handling of missing xft servers (closes: #224952,#226642,#226703). + * Added Japanese template translation. Thanks Hideki Yamane! + Closes: #224180. + + -- Drew Parsons Wed, 14 Jan 2004 17:56:59 +1030 + +xprint-xprintorg (0.0.9.cvs20031220-1) unstable; urgency=low + + * New upstream version (0.0.9 beta). + - new improved font download engine. + - supports OpenType fonts. Closes: #211798, #216813. + - XFree86 config file is used to extract font paths (as well as standard + paths and the defoma directory). + - supports PDF output (find it in /tmp/Xprintjobs). + - improved CUPS support. cupsys-bsd is no longer mandatory (but still + works fine). Closes: #206657. + - uses lockfiles for Xprint servers started via /etc/init.d/xprint. + Closes: #198745. + * xprt-common Recommends: xfonts-base, in order to find encodings.dir. + It is not a strict dependency since the location of the file can be set + as a configuration option in /etc/init.d/xprint. Closes: #217524. + * xprt-xprintorg Provides: xprt. Strictly speaking this is only valid if + we create a virtual package called xprt, but what the hell. + "Future proofing"... ;) Closes: #206655. + + -- Drew Parsons Fri, 5 Dec 2003 23:08:13 +1100 + +xprint-xprintorg (0.0.8.cvs20030508-6) unstable; urgency=low + + * Added defoma directory to font directory in /etc/init.d/xprint. + Closes: #206557. + * Applied upstream patch to improve printer spool (CUPS) handling. + * New standards version 3.6.1. + + -- Drew Parsons Fri, 26 Sep 2003 09:33:31 +1000 + +xprint-xprintorg (0.0.8.cvs20030508-5) unstable; urgency=low + + * Something went awry with the changes in -4, so try again: + - French debconf translation. Closes: #199347. + + -- Drew Parsons Wed, 30 Jul 2003 20:25:03 +1000 + +xprint-xprintorg (0.0.8.cvs20030508-4) unstable; urgency=low + + * Updated upstream patch for /etc/init.d/xprint regarding LSB. + * French debconf translation provided by Christian Perrier. Closes: #199347. + + -- Drew Parsons Mon, 30 Jun 2003 18:49:09 +1000 + +xprint-xprintorg (0.0.8.cvs20030508-3) unstable; urgency=low + + * Applied upstream patch to make /etc/init.d/xprint compliant with LSB. + * Updated debconf template to new po format using debconf-gettextize. + Added Build-Depends: debhelper (>= 4.1.16). Tidied up some spaces and + formatting in template and Description in control. Closes: #198287. + + -- Drew Parsons Sun, 22 Jun 2003 00:45:13 +1000 + +xprint-xprintorg (0.0.8.cvs20030508-2) unstable; urgency=low + + * Identify that Xprt is the server in question during stop/start + messages from /etc/init.d/xprint. Closes: #194694, #196487. + + -- Drew Parsons Sat, 14 Jun 2003 13:37:50 +1000 + +xprint-xprintorg (0.0.8.cvs20030508-1) unstable; urgency=low + + * Final 0.0.8 release. + No significant changes from previous release candidate (mainly fixes for + Solaris). + * Description identifies that TrueType fonts are now supported in 0.0.8. + Closes: #190736. + * New standards version: 3.5.10. + + -- Drew Parsons Sun, 25 May 2003 12:47:06 +1000 + +xprint-xprintorg (0.0.8.cvs20030416-1) unstable; urgency=low + + * New upstream version: v0.0.8 release candidate #2. + * I forgot to mention last time, man pages were recompiled with docbook2man, + gives better results than docbook-to-man. + + -- Drew Parsons Wed, 23 Apr 2003 13:12:31 +1000 + +xprint-xprintorg (0.0.8.cvs20030403-1) unstable; urgency=low + + * New upstream version. + + -- Drew Parsons Sat, 12 Apr 2003 23:49:35 +1000 + +xprint-xprintorg (0.0.8.cvs20030328-2) unstable; urgency=low + + * Added libxaw7-dev to Build-Depends in debian/control. + Closes: #186782, #186785. + + -- Drew Parsons Sun, 30 Mar 2003 09:56:21 +1000 + +xprint-xprintorg (0.0.8.cvs20030328-1) unstable; urgency=low + + * Upstream CVS. "Beta" version for release 0.0.8. + * Upstream changes include: + - Xsession.d script defines XPSERVERLIST for all X sessions, + removing the need to set it in profile files. + Closes: #171174, #177104. + - "-nolisten tcp" is now implemented, allowing for improved network + security when using Xprt. + Note that you may need to reset XPSERVERLIST (possibly by restarting X), + since this improvement requires the Xprt "display" to be given as ":64" + rather than "localhost:64". + Closes: #162023. + - the use of TrueType fonts is now supported. + - man pages are now available for the Xprt and other support binaries. + - size of source tarball now reduced to about 10 MB. + * The Xprint FAQ is always updated fresh from each new upstream tarball. + Closes: #170903. + * The upstream source tarball is now handled using dbs, one of Debian's patch + handling tools. This should facilitate the incorporation of one-off + patches in the future, such as the "-nolisten tcp" patch. + I decided in this context to use the pristine upstream tarball without + modification, rather than removing the www directory from it. The size + of www is not significant. + * Identify use of debhelper v4 via debian/compat. + * Standards version 3.5.9. + + -- Drew Parsons Sat, 29 Mar 2003 02:53:12 +1100 + +xprint-xprintorg (0.0.7.cvs20021203-1) unstable; urgency=low + + * New upstream version (final release for v007). + + -- Drew Parsons Mon, 9 Dec 2002 18:13:38 +1100 + +xprint-xprintorg (0.0.7.cvs20021125-1) unstable; urgency=low + + * New upstream version (final release candidate for v007). + * Standards version 3.5.8. + * Upstream tarball created by make_xprint_tarball (invoked in + debian/rules) for Debian systems now recognises it is building for + Debian and places config files in /usr/share/Xprint, not + /usr/X11R6/lib/X11. debian/xprt-common.install changed accordingly. + * Added link from usr/share/Xprint/xserver/README to + usr/share/doc/xprt-common/README in debian/xprt-common.links. + * xserver/SecurityPolicy no longer exists, remove from + debian/xprt-common.links and debian/rules. + * Added attributes directory for en_US to config files in /etc/Xprint + (allows default paper for en_US to be letter, for everyone else A4). + Altered directory structure in /etc/Xprint to accomodate both C and en_US + locales. Changes made in rules, xprt-common.dirs, xprt-common.links. + Debconf invoked to remove old config files, if user permits it. + * Removed xprt-common.conffiles, since dh_installdeb (v3 and higher) + automatically lists everything in /etc as a conffile. + + -- Drew Parsons Mon, 2 Dec 2002 18:11:04 +1100 + +xprint-xprintorg (0.0.7.cvs20021101-1) unstable; urgency=low + + * New upstream version. + * Debian patches incorporated upstream (thanks Roland!). + * /etc/init.d/xprint now provided in upstream source. + Note that upstream has set the Xprint "display" to :64, not :12. + You may have to refresh shell variable XPSERVERLIST by restarting client + programs such as mozilla or by relogging in again. + * Binary stripping switched off (dh_strip commented out in debian/rules) + by upstream's request, see Debian bug #164952. Only temporary. + + -- Drew Parsons Tue, 5 Nov 2002 08:20:15 +1100 + +xprint-xprintorg (0.0.7.cvs20021004-1) unstable; urgency=low + + * New upstream version. + * Should facilitate build on sparc and mips. + + -- Drew Parsons Tue, 8 Oct 2002 15:24:44 +1000 + +xprint-xprintorg (0.0.7.cvs20020903-3) unstable; urgency=low + + * Change reference in README.Debian from /etc/environment to /etc/profile + for setting variable XPSERVERLIST. + + -- Drew Parsons Mon, 23 Sep 2002 22:38:35 +1000 + +xprint-xprintorg (0.0.7.cvs20020903-2) unstable; urgency=low + + * Moved check for Xprt binary to point where it is invoked in + debian/xprt-common.xprint (i.e. /etc/init.d/xprint). + Depends: on xprt[-xprintorg] should not be required, /etc/init.d/xprint may + complain, but this ought not to affect installation. + Closes: #161824. + + -- Drew Parsons Sun, 22 Sep 2002 11:09:43 +1000 + +xprint-xprintorg (0.0.7.cvs20020903-1) unstable; urgency=low + + * New package. Closes: #149658. + * 0.0.7 release branch from CVS tarball, 3 September 2002. + * Includes modified /etc/init.d/xprint script (v0.2) from + http://mozdev.org/bugs/show_bug.cgi?id=2037 + * Standards Version 3.5.7. + + -- Drew Parsons Sun, 15 Sep 2002 12:33:27 +1000 + --- xorg-server-1.3.0.0.dfsg.orig/debian/xserver-xorg-core.NEWS +++ xorg-server-1.3.0.0.dfsg/debian/xserver-xorg-core.NEWS @@ -0,0 +1,62 @@ +xorg-server (2:1.3.0.0.dfsg-3) unstable; urgency=low + + * The server now includes a patch to always include the font paths + defined at compile-time by default. This will help prevent errors with + finding fonts when a xorg.conf has alternate font paths specified. + + As a result of this, many of the font paths shipped in our default + xorg.conf are obsolete, and may be deleted. If you have no customized + your xorg.conf, a future update to the xserver-xorg package will + re-create the file from your stored preferences. + + If for some reason you do not want the server to look in the default + font paths, you can set the boolean variable "UseDefaultFontPath" to + "False" in the ServerFlags section of your xorg.conf. + + -- David Nusinow Tue, 24 Apr 2007 00:18:04 -0400 + +xorg-server (2:1.2.99.905-3) experimental; urgency=low + + * This server update includes a patch to enable proper module defaults in + the server. A default set of modules will be loaded unless you + specifically specify that they don't load. You may do this in the module + section of your xorg.conf using the "Disable" instruction. Note that + this will only override the default, not an explicit "Load". + + This change will not affect most users, however if you have a customized + xorg.conf in which you comment out "Load" lines to disable modules, you + will want to change those lines so that they are uncommented and say + "Disable" instead of "Load". The most notable example of this is the dri + module, which is now loaded by default. Those who experience crashes + when dri is enabled will want to make this change to ensure that their + system does not begin to crash again. + + -- David Nusinow Sat, 14 Apr 2007 12:41:37 -0400 + +xserver-xorg-core (1:1.0.2-5) unstable; urgency=low + + * Several users have reported an error on load like the following: + + "(EE) Failed to load module "GLcore" (loader failed, 7)" + + To resolve this error and the related ones in the logfile above it, + remove the line to load the glcore module in your /etc/X11/xorg.conf. + Other similar errors about module loading can be resolved the same way. + If you have not customized your config file by hand, you can run the + command "dpkg-reconfigure xserver-xorg" as root to do this for you. + + -- David Nusinow Wed, 12 Apr 2006 19:38:51 -0400 + +xserver-xorg-core (1:1.0.2-3) unstable; urgency=low + + * With the latest updates of Xorg, we have transitioned from X11R6 to + X11R7. Part of this transition involves changing the paths to the + xfonts and the xkb data files, as well as the modules loaded by the X + server. One way to automatically update the paths is to run + "dpkg-reconfigure xserver-xorg" as root and it will automatically + generate a new config file for you. Note that this will currently not + work for people who have customized config files due to a bug, so + you'll have to manually edit your config if you have customized it + previously. + + -- David Nusinow Wed, 12 Apr 2006 19:38:51 -0400 --- xorg-server-1.3.0.0.dfsg.orig/debian/README.printing-problems +++ xorg-server-1.3.0.0.dfsg/debian/README.printing-problems @@ -0,0 +1,162 @@ +Printing Problems +----------------- + +This file is a mini-FAQ for two printing problems: + +Q1) Spaces between words are lost (words run together) + +Q2) Image is too big (font size too large) + OR + Image is too small (only takes up 1/4 of the page) + + +======================================================================= +Q1) Spaces between words are lost (words run together) + +At the time of the release of sarge, there is an unresolved problem +printing certain webpages from firefox using Xprint. The problem has been +reproduced with mozilla-firefox (0.9.3-2) and xprint (0.1.0.alpha1), +although the situation seems to have improved with firefox 1.0.1. + +mozilla proper (mozilla-browser 2:1.7.2-2) does not exhibit the +problem, it prints fine on the package maintainer's system, although +others have unfortunately reported seeing the problem there. + +The symptom of the problem is that spaces between words are lost, +words are printed strung all together. The font may be sans-serif, +where serif font is displayed on screen. + +The problem appears to happen on pages where the font is not +explicitly chosen in the HTML code. An example is Debian's home page, +www.debian.org. Other pages which specify the font to be used do not +seem to be affected. + +There are three known workarounds for the problem. + +1) Only use the default fonts in mozilla/firefox. + + The printing error will start happening if you change font settings + using Edit->Preferences (in particular if you set the serif font). + Changing the setting back again to the default value of "serif" will + not fix the problem. + + This is because setting the font places a "font.name.serif.x-western" + entry into ~/.mozilla/firefox/default.***/prefs.js. Even if the value + of the entry is "serif", it's mere presence will ruin printing. + + The workaround is to manually delete the "font.name.serif.x-western" + entry from prefs.js. + + This seems to fix the problem with the Debian home page, but depending + the page and language you want to print with you might find you will need + to delete other font.name entries as well. + +2) Remove Xprint's own font directory. + + Xprint contains font information in the directory + /usr/share/Xprint/xserver/C/print/models/PSdefault/fonts + If this directory is removed, then firefox prints www.debian.org + with correct spacing between words. The font used is sans-serif. + Xprint obtains information about fonts from other parts of the system. + + Since this workaround has not been fully tested and its consequences + are not fully understood (other locales and printer models in + Xprint link to this directory), the fonts directory will be left + intact for the official release of Xprint in Debian. + + A side-effect is that the date stamps for news entries on + www.debian.org are rendered using sans-serif font, where they + ought to be, I believe, rendered using a monospace font. + + +3) Use default stylesheet settings for firefox. + + User directories for firefox contain sample default style settings + in the chrome directory, at + ~/.firefox/default//chrome/userContent-example.css + This file, userContent-example.css, can be renamed to userContent.css, + and the following style added: + +@media print { + body { + font-family: times, serif; + } + tt, pre { + font-family: courier, monospace; + } +} + + This will instruct firefox to use serif font for the main text of web + pages where the default font is not specified. The spacing between + words will be rendered correctly. + + System administrators wishing to provide this style snippet + automatically to all users will want to make the adjustments in + /usr/lib/mozilla-firefox/defaults/profile/chrome/ + + Note, the same can be done for mozilla proper, if needed. + + +The problem is being tracked on the Debian Bug Tracking System at bugs +#235592 and #251067, and upstream at +http://xprint.freedesktop.org/bugzilla/show_bug.cgi?id=1112 + + +======================================================================== +Q2) Image is too big (font size too large) + OR + Image is too small (only takes up 1/4 of the page) + +This question is a standard Xprint FAQ (Q70). + +The problem means your default printer resolution is set to the wrong +value. The value is set in /etc/Xprint/C/print/attributes/document (or possibly +en_US/print/... rather than C/print/..., depending on your locale): + +*default-printer-resolution: 600 + +The standard default value is set to 600dpi. If your printer can only handle +300dpi, then four pixels (2x2) will be used for every one in your image, making +it print on paper larger than it ought to. The solution is to change the default +resolution to 300. + +Likewise if the default value is set to 300, but your printer can only handle +600dpi, then the pixels will only take up half the space on paper that they are +supposed to, so the image will only occupy a quarter of the page (1/2 x 1/2). +This problem was often reported under previous versions of Xprint, before the +default resolution was set to 600. In the latest version we have made the +assumption that 300dpi printers are today relatively rare, and so have set the +default value to 600. A side-effect is the first problem discussed in the +previous paragraph, for 300dpi-only printers. + +For your convenience, a debconf question has been provided enabling you to set +the default resolution at installation time (or after running +"dpkg-reconfigure xprint-common"). + +Note that these problems do not affect all printers. Some 600dpi printers will +happily render 300dpi images, using a 2x2 block for each pixel in the image to +give a normal physical image size on paper. + +Your printer's resolutions may possibly also need to be set consistently in the +underlying spooler. For instance CUPS settings can usually be accessed at +http://localhost:631/printers (use the "Configure Printer" link). + +If you have different printers which need to be run at different resolutions, +you will need to manually set a value for default-printer-resolution for each printer +separately (that is, for each one which differs from the default value). +See FAQ Q211. For instance, if the printer named "old_printer" needs to run at +300 dpi, while others work at 600dpi, then you need to use: +*default-printer-resolution: 600 +old_printer.default-printer-resolution: 300 + +We can't please everybody all the time! Please set your default resolution +according to your own needs. We hope that in a future version, Xprint will be +able to set these values dynamically from the underlying printing spooler +(CUPS, if not others). Watch http://bugzilla.mozdev.org/show_bug.cgi?id=5517 +for further developments. + + + +Good luck! + +Drew Parsons , 15 Mar 2005. --- xorg-server-1.3.0.0.dfsg.orig/debian/xserver-xorg-core.install +++ xorg-server-1.3.0.0.dfsg/debian/xserver-xorg-core.install @@ -0,0 +1,22 @@ +usr/bin/ioport +usr/bin/pcitweak +usr/bin/scanpci +usr/share/man/man1/pcitweak.1 +usr/share/man/man1/scanpci.1 +etc/X11/xserver/SecurityPolicy +usr/lib/xorg/modules/*.so +usr/lib/xorg/modules/extensions/*.so +usr/lib/xorg/modules/fonts/* +usr/lib/xorg/modules/linux/*.so +usr/lib/xorg/modules/freebsd/*.so +usr/lib/xorg/modules/multimedia/*.so +usr/bin/Xorg +usr/share/man/man1/Xserver.1 +usr/share/man/man1/Xorg.1 +usr/share/man/man4/exa.4 +usr/share/man/man4/fbdevhw.4 +usr/share/man/man5/xorg.conf.5 +usr/bin/cvt +usr/bin/gtf +usr/share/man/man1/cvt.1 +usr/share/man/man1/gtf.1 --- xorg-server-1.3.0.0.dfsg.orig/debian/prune/non-free +++ xorg-server-1.3.0.0.dfsg/debian/prune/non-free @@ -0,0 +1 @@ +hw/xfree86/doc/README.DRI --- xorg-server-1.3.0.0.dfsg.orig/debian/videoabiver +++ xorg-server-1.3.0.0.dfsg/debian/videoabiver @@ -0,0 +1 @@ +1.0 --- xorg-server-1.3.0.0.dfsg.orig/debian/xprint-common.default +++ xorg-server-1.3.0.0.dfsg/debian/xprint-common.default @@ -0,0 +1,10 @@ +# If you do not want Xprint to automatically start, then set START_XPRINT=0 +# By default, START_XPRINT=1, enabling Xprt, the Xprint server, to be started. + +# Note that this can be more effectively done by removing the start-up symlinks +# to /etc/init.d/xprint, e.g. +# rm /etc/rc[1-6].d/*xprint* + +# If you always want Xprint to run, you may safely remove this file. + +START_XPRINT=1 --- xorg-server-1.3.0.0.dfsg.orig/debian/xprint.install +++ xorg-server-1.3.0.0.dfsg/debian/xprint.install @@ -0,0 +1 @@ +usr/bin/Xprt --- xorg-server-1.3.0.0.dfsg.orig/debian/local/xvfb-run.1 +++ xorg-server-1.3.0.0.dfsg/debian/local/xvfb-run.1 @@ -0,0 +1,284 @@ +.\" $Id: xvfb-run.1 2138 2005-01-17 23:40:27Z branden $ +.\" +.\" Copyright 1998-2004 Branden Robinson . +.\" +.\" This is free software; you may redistribute it and/or modify +.\" it under the terms of the GNU General Public License as +.\" published by the Free Software Foundation; either version 2, +.\" or (at your option) any later version. +.\" +.\" This is distributed in the hope that it will be useful, but +.\" WITHOUT ANY WARRANTY; without even the implied warranty of +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +.\" GNU General Public License for more details. +.\" +.\" You should have received a copy of the GNU General Public License with +.\" the Debian operating system, in /usr/share/common-licenses/GPL; if +.\" not, write to the Free Software Foundation, Inc., 59 Temple Place, +.\" Suite 330, Boston, MA 02111-1307 USA +.\" +.\" We need the URL macro from groff's www macro package, but also want +.\" things to work all right for people who don't have it. So we define +.\" our own URL macro and let the www macro package override it if it's +.\" available. +.de URL +\\$2 \(laURL: \\$1 \(ra\\$3 +.. +.if \n[.g] .mso www.tmac +.TH xvfb\-run 1 "2004\-11\-12" "Debian Project" +.SH NAME +xvfb\-run \- run specified X client or command in a virtual X server environment +.SH SYNOPSIS +.B xvfb\-run +[ +.I options +] +.I command +.SH DESCRIPTION +.B xvfb\-run +is a wrapper for the +.BR Xvfb (1x) +command which simplifies the task of running commands (typically an X +client, or a script containing a list of clients to be run) within a virtual +X server environment. +.PP +.B xvfb\-run +sets up an X authority file (or uses an existing user\-specified one), +writes a cookie to it (see +.BR xauth (1x)) +and then starts the +.B Xvfb +X server as a background process. +The process ID of +.B Xvfb +is stored for later use. +The specified +.I command +is then run using the X display corresponding to the +.B Xvfb +server +just started and the X authority file created earlier. +.PP +When the +.I command +exits, its status is saved, the +.B Xvfb +server is killed (using the process ID stored earlier), the X authority +cookie removed, and the authority file deleted (if the user did not specify +one to use). +.B xvfb\-run +then exits with the exit status of +.IR command . +.PP +.B xvfb\-run +requires the +.B xauth +command to function. +.SH OPTIONS +.TP +.B \-a\fR,\fB \-\-auto\-servernum +Try to get a free server number, starting at 99, or the argument to +.BR \-\-server\-num . +.TP +.BI \-e\ file \fR,\fB\ \-\-error\-file= file +Store output from +.B xauth +and +.B Xvfb +in +.IR file . +The default is +.IR /dev/null . +.TP +.BI \-f\ file \fR,\fB\ \-\-auth\-file= file +Store X authentication data in +.IR file . +By default, a temporary directory called +.IR xvfb\-run. PID +(where PID is the process ID of +.B xvfb\-run +itself) is created in the directory specified by the environment variable +.B TMPDIR +(or +.I /tmp +if that variable is null or unset), and the +.BR tempfile (1) +command is used to create a file in that temporary directory called +.IR Xauthority . +.TP +.B \-h\fR,\fB \-\-help +Display a usage message and exit. +.TP +.BI \-n\ servernumber \fR,\fB\ \-\-server\-num= servernumber +Use +.I servernumber +as the server number (but see the +.B \-a\fR,\fB \-\-auto\-servernum +option above). +The default is 99. +.TP +.B \-l\fR,\fB \-\-listen\-tcp +Enable TCP port listening in the X server. +For security reasons (to avoid denial\-of\-service attacks or exploits), +TCP port listening is disabled by default. +.TP +.BI \-p\ protocolname \fR,\fB\ \-\-xauth\-protocol= protocolname +Use +.I protocolname +as the X authority protocol to use. +The default is \(oq.\(cq, which +.B xauth +interprets as its own default protocol, which is MIT\-MAGIC\-COOKIE\-1. +.TP +.BI \-s\ arguments \fR,\fB\ \-\-server\-args= arguments +Pass +.I arguments +to the +.B Xvfb +server. +Be careful to quote any whitespace characters that may occur within +.I arguments +to prevent them from regarded as separators for +.BR xvfb\-run 's +own arguments. +Also, note that specification of \(oq\-nolisten tcp\(cq in +.I arguments +may override the function of +.BR xvfb\-run 's +own +.B \-l\fR,\fB \-\-listen\-tcp +option, and that specification of the server number (e.g., \(oq:1\(cq) may +be ignored because of the way the X server parses its argument list. +Use the +.B xvfb\-run +option +.BI \-n\ servernumber \fR,\fB\ \-\-server\-num= servernumber +to achieve the latter function. +The default is \(oq\-screen 0 640x480x8\(cq. +.TP +.BI \-w\ delay \fR,\fB\ \-\-wait= delay +Wait +.I delay +seconds after launching +.B Xvfb +before attempting to start the specified command. +The default is 3. +.SH ENVIRONMENT +.TP +.B COLUMNS +indicates the width of the terminal device in character cells. +This value is used for formatting diagnostic messages. +If not set, the terminal is queried using +.BR stty (1) +to determine its width. +If that fails, a value of \(oq80\(cq is assumed. +.TP +.B TMPDIR +specifies the directory in which to place +.BR xvfb\-run 's +temporary directory for storage of the X authority file; only used if the +.B \-f +or +.B \-\-auth\-file +options are not specified. +.SH "OUTPUT FILES" +.PP +Unless the +.B \-f +or +.B \-\-auth\-file +options are specified, a temporary +directory and file within it are created (and deleted) to store the X +authority cookies used by the +.B Xvfb +server and client(s) run under it. +See +.BR tempfile (1). +If \-f or \-\-auth\-file are used, then the specified X authority file is +only written to, not created or deleted (though +.B xauth +creates an authority file itself if told to use use that does not already +exist). +.PP +An error file with a user\-specified name is also created if the +.B \-e +or +.B \-\-error\-file +options are specifed; see above. +.SH "EXIT STATUS" +.B xvfb\-run +uses its exit status as well as output to standard error to communicate +diagnostics. +The exit status of \(oq1\(cq is not used, and should be interpreted as failure +of the specified command. +.TP +0 +.B xvfb\-run +only uses this exit status if the +.B \-h\fR,\fB \-\-help +option is given. +In all other situations, this may be interpreted as success of the specified +command. +.TP +2 +No command to run was specified. +.TP +3 +The +.B xauth +command is not available. +.TP +4 +The temporary directory that was going to be used already exists; since +.B xvfb\-run +produces a uniquely named directory, this may indicate an attempt by another +process on the system to exploit a temporary file race condition. +.TP +5 +A problem was encountered while cleaning up the temporary directory. +.TP +6 +A problem was encountered while using +.BR getopt (1) +to parse the command\-line arguments. +.SH EXAMPLES +.TP +.B xvfb\-run \-\-auto\-servernum \-\-server\-num=1 xlogo +runs the +.BR xlogo (1x) +demonstration client inside the +.B Xvfb +X server on the first available server number greater than or equal to 1. +.TP +.B xvfb\-run \-\-server\-args="\-screen 0 1024x768x24" ico \-faces +runs the +.BR ico (1x) +demonstration client (and passes it the +.B \-faces +argument) inside the +.B Xvfb +X server, configured with a root window of 1024 by 768 pixels and a color +depth of 24 bits. +.PP +Note that the demo X clients used in the above examples will not exit on +their own, so they will have to be killed before +.B xvfb\-run +will exit. +.SH BUGS +See +.URL "http://bugs.debian.org/xvfb" "the Debian Bug Tracking System" . +If you wish to report a bug in +.BR xvfb\-run , +please see +.I /usr/share/doc/debian/bug\-reporting.txt +or the +.BR reportbug (1) +command. +.SH AUTHOR +.B xfvb\-run +was written by Branden Robinson and Jeff Licquia with sponsorship from +Progeny Linux Systems. +.SH "SEE ALSO" +.BR Xvfb (1x), +.BR xauth (1x) +.\" vim:set et tw=80: --- xorg-server-1.3.0.0.dfsg.orig/debian/local/xvfb-run +++ xorg-server-1.3.0.0.dfsg/debian/local/xvfb-run @@ -0,0 +1,183 @@ +#!/bin/sh + +# $Id: xvfb-run 2027 2004-11-16 14:54:16Z branden $ + +# This script starts an instance of Xvfb, the "fake" X server, runs a command +# with that server available, and kills the X server when done. The return +# value of the command becomes the return value of this script. +# +# If anyone is using this to build a Debian package, make sure the package +# Build-Depends on xvfb, xbase-clients, and xfonts-base. + +set -e + +PROGNAME=xvfb-run +SERVERNUM=99 +AUTHFILE= +ERRORFILE=/dev/null +STARTWAIT=3 +XVFBARGS="-screen 0 640x480x8" +LISTENTCP="-nolisten tcp" +XAUTHPROTO=. + +# Query the terminal to establish a default number of columns to use for +# displaying messages to the user. This is used only as a fallback in the event +# the COLUMNS variable is not set. ($COLUMNS can react to SIGWINCH while the +# script is running, and this cannot, only being calculated once.) +DEFCOLUMNS=$(stty size 2>/dev/null | awk '{print $2}') || true +if ! expr "$DEFCOLUMNS" : "[[:digit:]]\+$" >/dev/null 2>&1; then + DEFCOLUMNS=80 +fi + +# Display a message, wrapping lines at the terminal width. +message () { + echo "$PROGNAME: $*" | fmt -t -w ${COLUMNS:-$DEFCOLUMNS} +} + +# Display an error message. +error () { + message "error: $*" >&2 +} + +# Display a usage message. +usage () { + if [ -n "$*" ]; then + message "usage error: $*" + fi + cat <"$ERRORFILE" 2>&1 + fi + if [ -n "$XVFB_RUN_TMPDIR" ]; then + if ! rm -r "$XVFB_RUN_TMPDIR"; then + error "problem while cleaning up temporary directory" + exit 5 + fi + fi +} + +# Parse the command line. +ARGS=$(getopt --options +ae:f:hn:lp:s:w: \ + --long auto-servernum,error-file:,auth-file:,help,server-num:,listen-tcp,xauth-protocol:,server-args:,wait: \ + --name "$PROGNAME" -- "$@") +GETOPT_STATUS=$? + +if [ $GETOPT_STATUS -ne 0 ]; then + error "internal error; getopt exited with status $GETOPT_STATUS" + exit 6 +fi + +eval set -- "$ARGS" + +while :; do + case "$1" in + -a|--auto-servernum) SERVERNUM=$(find_free_servernum) ;; + -e|--error-file) ERRORFILE="$2"; shift ;; + -f|--auth-file) AUTHFILE="$2"; shift ;; + -h|--help) SHOWHELP="yes" ;; + -n|--server-num) SERVERNUM="$2"; shift ;; + -l|--listen-tcp) LISTENTCP="" ;; + -p|--xauth-protocol) XAUTHPROTO="$2"; shift ;; + -s|--server-args) XVFBARGS="$2"; shift ;; + -w|--wait) STARTWAIT="$2"; shift ;; + --) shift; break ;; + *) error "internal error; getopt permitted \"$1\" unexpectedly" + exit 6 + ;; + esac + shift +done + +if [ "$SHOWHELP" ]; then + usage + exit 0 +fi + +if [ -z "$*" ]; then + usage "need a command to run" >&2 + exit 2 +fi + +if ! which xauth >/dev/null; then + error "xauth command not found" + exit 3 +fi + +# tidy up after ourselves +trap clean_up EXIT + +# If the user did not specify an X authorization file to use, set up a temporary +# directory to house one. +if [ -z "$AUTHFILE" ]; then + XVFB_RUN_TMPDIR="${TMPDIR:-/tmp}/$PROGNAME.$$" + if ! mkdir -p -m 700 "$XVFB_RUN_TMPDIR"; then + error "temporary directory $XVFB_RUN_TMPDIR already exists" + exit 4 + fi + AUTHFILE=$(tempfile -n "$XVFB_RUN_TMPDIR/Xauthority") +fi + +# Start Xvfb. +MCOOKIE=$(mcookie) +XAUTHORITY=$AUTHFILE xauth add ":$SERVERNUM" "$XAUTHPROTO" "$MCOOKIE" \ + >"$ERRORFILE" 2>&1 +XAUTHORITY=$AUTHFILE Xvfb ":$SERVERNUM" $XVFBARGS $LISTENTCP >"$ERRORFILE" \ + 2>&1 & +XVFBPID=$! +sleep "$STARTWAIT" +if ! kill -0 $XVFBPID 2>/dev/null; then + echo "Xvfb failed to start" >&2 + exit 1 +fi + +# Start the command and save its exit status. +set +e +DISPLAY=:$SERVERNUM XAUTHORITY=$AUTHFILE "$@" 2>&1 +RETVAL=$? +set -e + +# Kill Xvfb now that the command has exited. +kill $XVFBPID + +# Return the executed command's exit status. +exit $RETVAL + +# vim:set ai et sts=4 sw=4 tw=80: --- xorg-server-1.3.0.0.dfsg.orig/debian/xprint.links +++ xorg-server-1.3.0.0.dfsg/debian/xprint.links @@ -0,0 +1 @@ +usr/share/doc/xprint-common usr/share/doc/xprint --- xorg-server-1.3.0.0.dfsg.orig/debian/compat +++ xorg-server-1.3.0.0.dfsg/debian/compat @@ -0,0 +1 @@ +4 --- xorg-server-1.3.0.0.dfsg.orig/debian/xserver-xorg-core.bug.script +++ xorg-server-1.3.0.0.dfsg/debian/xserver-xorg-core.bug.script @@ -0,0 +1,120 @@ +#!/bin/sh + +# $Id$ + +PATH="/sbin:$PATH" +CONFIG_DIR=/etc/X11 +SERVER_SYMLINK="$CONFIG_DIR/X" +XORGCONFIG="$CONFIG_DIR/xorg.conf" +CONFIG_AUX_DIR=/var/lib/x11 +SERVER_SYMLINK_CHECKSUM="$CONFIG_AUX_DIR/${SERVER_SYMLINK##*/}.md5sum" +SERVER_SYMLINK_ROSTER="$CONFIG_AUX_DIR/${SERVER_SYMLINK##*/}.roster" +XORGCONFIG_CHECKSUM="$CONFIG_AUX_DIR/${XORGCONFIG##*/}.md5sum" +XORGCONFIG_ROSTER="$CONFIG_AUX_DIR/${XORGCONFIG##*/}.roster" + +if [ -e "$SERVER_SYMLINK_ROSTER" ]; then + printf "Contents of $SERVER_SYMLINK_ROSTER:\n" >&3 + cat "$SERVER_SYMLINK_ROSTER" >&3 +else + printf "$SERVER_SYMLINK_ROSTER does not exist.\n" >&3 +fi + +printf "\n" >&3 + +if [ -e "$SERVER_SYMLINK" ]; then + if [ -e "$SERVER_SYMLINK_CHECKSUM" ]; then + if [ "$(readlink "$SERVER_SYMLINK" | md5sum)" = \ + "$(cat "$SERVER_SYMLINK_CHECKSUM")" ]; then + printf "%s target unchanged from checksum in %s.\n" \ + "$SERVER_SYMLINK" "$SERVER_SYMLINK_CHECKSUM" >&3 + else + printf "%s target does not match checksum in %s.\n" \ + "$SERVER_SYMLINK" "$SERVER_SYMLINK_CHECKSUM" >&3 + fi + else + printf "$SERVER_SYMLINK_CHECKSUM does not exist.\n" >&3 + fi + printf "\n" >&3 + printf "X server symlink status:\n" >&3 + ls -dl "$SERVER_SYMLINK" >&3 + ls -dl "$(readlink "$SERVER_SYMLINK")" >&3 +else + printf "$SERVER_SYMLINK does not exist.\n" >&3 +fi + +if ! [ -L "$SERVER_SYMLINK" ]; then + printf "$SERVER_SYMLINK is not a symlink.\n" >&3 +fi + +if ! [ -x "$SERVER_SYMLINK" ]; then + printf "$SERVER_SYMLINK is not executable.\n" >&3 +fi + +printf "\n" >&3 + +if [ -e "$XORGCONFIG_ROSTER" ]; then + printf "Contents of $XORGCONFIG_ROSTER:\n" >&3 + cat "$XORGCONFIG_ROSTER" >&3 +else + printf "$XORGCONFIG_ROSTER does not exist.\n" >&3 +fi + +printf "\n" >&3 + +if which lspci > /dev/null 2>&1; then + printf "VGA-compatible devices on PCI bus:\n" >&3 + LC_ALL=C lspci | grep 'VGA compatible controller:' >&3 + LC_ALL=C lspci -n | grep 'Class 0300:' >&3 +else + printf "The lspci command was not found; not including PCI data.\n" >&3 +fi + +printf "\n" >&3 + +if [ -e "$XORGCONFIG" ]; then + if [ -e "$XORGCONFIG_CHECKSUM" ]; then + if [ "$(md5sum "$XORGCONFIG")" = "$(cat "$XORGCONFIG_CHECKSUM")" ]; then + printf "%s unchanged from checksum in %s.\n" "$XORGCONFIG" \ + "$XORGCONFIG_CHECKSUM" >&3 + else + printf "%s does not match checksum in %s.\n" "$XORGCONFIG" \ + "$XORGCONFIG_CHECKSUM" >&3 + fi + else + printf "$XORGCONFIG_CHECKSUM does not exist.\n" >&3 + fi + printf "\n" >&3 + printf "Xorg X server configuration file status:\n" >&3 + ls -dl "$XORGCONFIG" >&3 + printf "\n" >&3 + printf "Contents of $XORGCONFIG:\n" >&3 + iconv -c -t ascii "$XORGCONFIG" >&3 + printf "\n" >&3 +else + printf "$XORGCONFIG does not exist.\n" >&3 +fi + +printf "\n" >&3 + +XORG_LOGS=$(ls -dt /var/log/Xorg.*.log 2>/dev/null) + +if [ -n "$XORG_LOGS" ]; then + printf "Xorg X server log files on system:\n" >&3 + ls -dlrt /var/log/Xorg.*.log >&3 2>/dev/null + printf "\n" >&3 + for LOG in $XORG_LOGS; do + if [ -f "$LOG" ]; then + printf "Contents of most recent Xorg X server log file\n" >&3 + printf "%s:\n" "$LOG" >&3 + cat "$LOG" >&3 + # the log files are large; only show the most recent + break + fi + done +else + printf "No Xorg X server log files found.\n" >&3 +fi + +printf "\n" >&3 + +# vim:set ai et sts=4 sw=4 tw=0: --- xorg-server-1.3.0.0.dfsg.orig/debian/xprint-common.install +++ xorg-server-1.3.0.0.dfsg/debian/xprint-common.install @@ -0,0 +1,2 @@ +usr/lib/X11/xserver usr/share/Xprint +etc/X11/Xsession.d/92xprint-xpserverlist --- xorg-server-1.3.0.0.dfsg.orig/debian/watch +++ xorg-server-1.3.0.0.dfsg/debian/watch @@ -0,0 +1,2 @@ +version=3 +http://xorg.freedesktop.org/releases/individual/xserver/ xorg-server-(.*)\.tar\.gz --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/244_fix_an_occasional_crash_in_GetWindowName_bug-_9798.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/244_fix_an_occasional_crash_in_GetWindowName_bug-_9798.patch @@ -0,0 +1,23 @@ +From: Colin Harrison +Date: Wed, 9 May 2007 15:55:27 +0000 (+0100) +Subject: fix an occasional crash in GetWindowName() (bug: 9798) +X-Git-Tag: xorg-server-1.3.99.0 +X-Git-Url: http://gitweb.freedesktop.org/?p=xorg/xserver.git;a=commitdiff;h=86c4941727f7c673ae6bb88c67443fa25935c7f5 + +fix an occasional crash in GetWindowName() (bug: 9798) +--- + +--- a/hw/xwin/winmultiwindowwm.c ++++ b/hw/xwin/winmultiwindowwm.c +@@ -445,10 +445,7 @@ GetWindowName (Display *pDisplay, Window + } + else + { +- XmbTextPropertyToTextList (pDisplay, &xtpName, &ppList, &nNum); +- +- /* */ +- if (nNum && ppList && *ppList) ++ if (XmbTextPropertyToTextList (pDisplay, &xtpName, &ppList, &nNum) >= Success && nNum > 0 && *ppList) + { + *ppName = strdup (*ppList); + XFreeStringList (ppList); --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/230_In___glXCreateARGBConfig_insert_the_new_GL_mode_at_the__end__of_the_linked_list.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/230_In___glXCreateARGBConfig_insert_the_new_GL_mode_at_the__end__of_the_linked_list.patch @@ -0,0 +1,65 @@ +From: Brian +Date: Wed, 2 May 2007 21:55:40 +0000 (-0600) +Subject: In __glXCreateARGBConfig(), insert the new GL mode at the _end_ of the linked list. +X-Git-Tag: xorg-server-1.3.99.0 +X-Git-Url: http://gitweb.freedesktop.org/?p=xorg/xserver.git;a=commitdiff;h=c1e1d6b98a6708860e5b5f6e21d8d5b1d8ce9075 + +In __glXCreateARGBConfig(), insert the new GL mode at the _end_ of the linked list. + +Previously, the new mode was added at the head of the list. This caused the +positional correspondence between modes and the XMesaVisuals array to be off +by one. The net result was GLX clients failing when they tried to use the +last GLX mode/visual. + +We still have the problem of DRI drivers not being able to use the extra +mode/visual introduced by __glXCreateARGBConfig(). glXCreateContext fails +with BadAlloc if it's attempted. This is also the source of the often- +seen warning "libGL warning: 3D driver claims to not support visual xxx" +Look into fixing that someday... +--- + +--- a/GL/glx/glxcmds.c ++++ b/GL/glx/glxcmds.c +@@ -1019,6 +1019,7 @@ __glXCreateARGBConfig(__GLXscreen *scree + VisualPtr visual; + int i; + ++ /* search for a 32-bit visual */ + visual = NULL; + for (i = 0; i < screen->pScreen->numVisuals; i++) + if (screen->pScreen->visuals[i].nplanes == 32) { +@@ -1037,8 +1038,22 @@ __glXCreateARGBConfig(__GLXscreen *scree + if (modes == NULL) + return; + +- modes->next = screen->modes; +- screen->modes = modes; ++ /* Insert this new mode at the TAIL of the linked list. ++ * Previously, the mode was incorrectly inserted at the head of the ++ * list, causing find_mesa_visual() to be off by one. This would ++ * GLX clients to blow up if they attempted to use the last mode ++ * in the list! ++ */ ++ { ++ __GLcontextModes *prev = NULL, *m; ++ for (m = screen->modes; m; m = m->next) ++ prev = m; ++ if (prev) ++ prev->next = modes; ++ else ++ screen->modes = modes; ++ } ++ + screen->numUsableVisuals++; + screen->numVisuals++; + +@@ -1104,6 +1119,9 @@ int DoGetFBConfigs(__GLXclientState *cl, + } + pGlxScreen = __glXActiveScreens[screen]; + ++ /* Create the "extra" 32bpp ARGB visual, if not already added. ++ * XXX This is questionable place to do so! Re-examine this someday. ++ */ + __glXCreateARGBConfig(pGlxScreen); + + reply.numFBConfigs = pGlxScreen->numUsableVisuals; --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/119_ubuntu_enable_composite.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/119_ubuntu_enable_composite.diff @@ -0,0 +1,11 @@ +--- xorg-server-1.2.0/os/utils.c.orig 2007-02-26 11:08:08.000000000 +0100 ++++ xorg-server-1.2.0/os/utils.c 2007-02-26 11:08:21.000000000 +0100 +@@ -138,7 +138,7 @@ + #ifdef COMPOSITE + /* COMPOSITE is disabled by default for now until the + * interface is stable */ +- #define COMPOSITE_DEFAULT FALSE ++ #define COMPOSITE_DEFAULT TRUE + _X_EXPORT Bool noCompositeExtension = !COMPOSITE_DEFAULT; + #endif + --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/227_Fix_sync_polarity_on_Samsung_SyncMaster_205BW_monitor.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/227_Fix_sync_polarity_on_Samsung_SyncMaster_205BW_monitor.patch @@ -0,0 +1,27 @@ +From: Daniel Ciocea +Date: Sat, 9 Jun 2007 01:12:21 +0000 (-0700) +Subject: Fix sync polarity on Samsung SyncMaster 205BW monitor. +X-Git-Tag: xorg-server-1.3.99.0 +X-Git-Url: http://gitweb.freedesktop.org/?p=xorg/xserver.git;a=commitdiff;h=c079cce9d884ab03f305b3fba4a4e1247c023480 + +Fix sync polarity on Samsung SyncMaster 205BW monitor. + +need to use standard VESA sync polarity instead of the +EDID provided -hsync -vsync values. +--- + +--- a/hw/xfree86/modes/xf86EdidModes.c ++++ b/hw/xfree86/modes/xf86EdidModes.c +@@ -71,7 +71,11 @@ static Bool quirk_dt_sync_hm_vp (int scr + if (memcmp (DDC->vendor.name, "VSC", 4) == 0 && + DDC->vendor.prod_id == 58653) + return TRUE; +- ++ /* Samsung SyncMaster 205BW */ ++ if (memcmp (DDC->vendor.name, "SAM", 4) == 0 && ++ DDC->vendor.prod_id == 541) ++ return TRUE; ++ + return FALSE; + } + --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/fix_CVE-2008-2361.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/fix_CVE-2008-2361.patch @@ -0,0 +1,13 @@ +diff --git a/render/render.c b/render/render.c +index caaa278..b53e878 100644 +--- a/render/render.c ++++ b/render/render.c +@@ -1504,6 +1504,8 @@ ProcRenderCreateCursor (ClientPtr client) + pScreen = pSrc->pDrawable->pScreen; + width = pSrc->pDrawable->width; + height = pSrc->pDrawable->height; ++ if (height && width > UINT32_MAX/(height*sizeof(CARD32))) ++ return BadAlloc; + if ( stuff->x > width + || stuff->y > height ) + return (BadMatch); --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/106_ubuntu_fpic_libxf86config.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/106_ubuntu_fpic_libxf86config.patch @@ -0,0 +1,26 @@ +Index: xorg-server-1.3.0.0.dfsg/hw/xfree86/parser/Makefile.am +=================================================================== +--- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/parser/Makefile.am 2007-02-16 16:03:12.000000000 +0000 ++++ xorg-server-1.3.0.0.dfsg/hw/xfree86/parser/Makefile.am 2007-05-26 18:17:17.000000000 +0000 +@@ -26,7 +26,7 @@ + DRI.c \ + Extensions.c + +-AM_CFLAGS = $(XORG_CFLAGS) ++AM_CFLAGS = $(XORG_CFLAGS) -fPIC + + EXTRA_DIST = \ + Configint.h \ +Index: xorg-server-1.3.0.0.dfsg/hw/xfree86/parser/Makefile.in +=================================================================== +--- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/parser/Makefile.in 2007-05-26 18:11:37.000000000 +0000 ++++ xorg-server-1.3.0.0.dfsg/hw/xfree86/parser/Makefile.in 2007-05-26 18:22:15.000000000 +0000 +@@ -577,7 +375,7 @@ + DRI.c \ + Extensions.c + +-AM_CFLAGS = $(XORG_CFLAGS) ++AM_CFLAGS = $(XORG_CFLAGS) -fPIC + EXTRA_DIST = \ + Configint.h \ + configProcs.h \ --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/05_module_defaults.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/05_module_defaults.diff @@ -0,0 +1,253 @@ +Index: xorg-server/hw/xfree86/common/xf86Config.c +=================================================================== +--- xorg-server.orig/hw/xfree86/common/xf86Config.c 2007-04-26 21:27:35.000000000 -0400 ++++ xorg-server/hw/xfree86/common/xf86Config.c 2007-04-26 22:36:32.000000000 -0400 +@@ -254,6 +254,7 @@ + char *ignore[] = { "GLcore", "speedo", "bitmap", "drm", NULL }; + pointer *optarray; + XF86LoadPtr modp; ++ Bool found; + + /* + * make sure the config file has been parsed and that we have a +@@ -266,35 +267,73 @@ + } + + if (xf86configptr->conf_modules) { +- /* +- * Walk the list of modules in the "Module" section to determine how +- * many we have. +- */ +- modp = xf86configptr->conf_modules->mod_load_lst; +- while (modp) { +- for (i = 0; ignore[i]; i++) { +- if (strcmp(modp->load_name, ignore[i]) == 0) +- modp->ignore = 1; ++ /* Walk the disable list and let people know what we've parsed to ++ * not be loaded ++ */ ++ modp = xf86configptr->conf_modules->mod_disable_lst; ++ while (modp) { ++ xf86Msg(X_WARNING, "\"%s\" will not be loaded unless you've specified it to be loaded elsewhere.\n", modp->load_name); ++ modp = (XF86LoadPtr) modp->list.next; ++ } ++ /* ++ * Walk the default settings table. For each module listed to be ++ * loaded, make sure it's in the mod_load_lst. If it's not, make ++ * sure it's not in the mod_no_load_lst. If it's not disabled, ++ * append it to mod_load_lst ++ */ ++ for (i=0 ; ModuleDefaults[i].name != NULL ; i++) { ++ if (ModuleDefaults[i].toLoad == FALSE) { ++ xf86Msg(X_WARNING, "\"%s\" is not to be loaded by default. Skipping.\n", ModuleDefaults[i].name); ++ continue; + } +- if (!modp->ignore) +- count++; +- modp = (XF86LoadPtr) modp->list.next; +- } ++ found = FALSE; ++ modp = xf86configptr->conf_modules->mod_load_lst; ++ while (modp) { ++ if (strcmp(modp->load_name, ModuleDefaults[i].name) == 0) { ++ found = TRUE; ++ break; ++ } ++ modp = (XF86LoadPtr) modp->list.next; ++ } ++ if (found == FALSE) { ++ modp = xf86configptr->conf_modules->mod_disable_lst; ++ while (modp) { ++ if (strcmp(modp->load_name, ModuleDefaults[i].name) == 0) { ++ found = TRUE; ++ break; ++ } ++ modp = (XF86LoadPtr) modp->list.next; ++ } ++ } ++ if (found == FALSE) { ++ XF86ConfModulePtr ptr = xf86configptr->conf_modules; ++ ptr = xf86addNewLoadDirective(ptr, ModuleDefaults[i].name, XF86_LOAD_MODULE, ModuleDefaults[i].load_opt); ++ } ++ } + } else { + xf86configptr->conf_modules = xnfcalloc(1, sizeof(XF86ConfModuleRec)); ++ for (i=0 ; ModuleDefaults[i].name != NULL ; i++) { ++ if (ModuleDefaults[i].toLoad == TRUE) { ++ XF86ConfModulePtr ptr = xf86configptr->conf_modules; ++ ptr = xf86addNewLoadDirective(ptr, ModuleDefaults[i].name, XF86_LOAD_MODULE, ModuleDefaults[i].load_opt); ++ } ++ } + } + +- if (count == 0) { +- XF86ConfModulePtr ptr = xf86configptr->conf_modules; +- ptr = xf86addNewLoadDirective(ptr, "extmod", XF86_LOAD_MODULE, NULL); +- ptr = xf86addNewLoadDirective(ptr, "dbe", XF86_LOAD_MODULE, NULL); +- ptr = xf86addNewLoadDirective(ptr, "glx", XF86_LOAD_MODULE, NULL); +- ptr = xf86addNewLoadDirective(ptr, "freetype", XF86_LOAD_MODULE, NULL); +- ptr = xf86addNewLoadDirective(ptr, "type1", XF86_LOAD_MODULE, NULL); +- ptr = xf86addNewLoadDirective(ptr, "record", XF86_LOAD_MODULE, NULL); +- ptr = xf86addNewLoadDirective(ptr, "dri", XF86_LOAD_MODULE, NULL); +- count = 7; +- } ++ /* ++ * Walk the list of modules in the "Module" section to determine how ++ * many we have. ++ */ ++ modp = xf86configptr->conf_modules->mod_load_lst; ++ while (modp) { ++ for (i = 0; ignore[i]; i++) { ++ if (strcmp(modp->load_name, ignore[i]) == 0) ++ modp->ignore = 1; ++ } ++ if (!modp->ignore) ++ count++; ++ modp = (XF86LoadPtr) modp->list.next; ++ } + + /* + * allocate the memory and walk the list again to fill in the pointers +@@ -303,22 +342,22 @@ + optarray = xnfalloc((count + 1) * sizeof(pointer)); + count = 0; + if (xf86configptr->conf_modules) { +- modp = xf86configptr->conf_modules->mod_load_lst; +- while (modp) { ++ modp = xf86configptr->conf_modules->mod_load_lst; ++ while (modp) { + if (!modp->ignore) { +- modulearray[count] = modp->load_name; +- optarray[count] = modp->load_opt; +- count++; ++ modulearray[count] = modp->load_name; ++ optarray[count] = modp->load_opt; ++ count++; + } +- modp = (XF86LoadPtr) modp->list.next; +- } ++ modp = (XF86LoadPtr) modp->list.next; ++ } + } + modulearray[count] = NULL; + optarray[count] = NULL; + if (optlist) +- *optlist = optarray; ++ *optlist = optarray; + else +- xfree(optarray); ++ xfree(optarray); + return modulearray; + } + +Index: xorg-server/hw/xfree86/common/xf86Config.h +=================================================================== +--- xorg-server.orig/hw/xfree86/common/xf86Config.h 2007-04-26 21:27:35.000000000 -0400 ++++ xorg-server/hw/xfree86/common/xf86Config.h 2007-04-26 22:17:43.000000000 -0400 +@@ -33,6 +33,8 @@ + #ifndef _xf86_config_h + #define _xf86_config_h + ++#include "xf86Optrec.h" ++ + #ifdef HAVE_PARSER_DECLS + /* + * global structure that holds the result of parsing the config file +@@ -46,6 +48,23 @@ + CONFIG_NOFILE + } ConfigStatus; + ++typedef struct _ModuleDefault { ++ char *name; ++ Bool toLoad; ++ XF86OptionPtr load_opt; ++} ModuleDefault; ++ ++static ModuleDefault ModuleDefaults[] = { ++ {.name = "extmod", .toLoad = TRUE, .load_opt=NULL}, ++ {.name = "dbe", .toLoad = TRUE, .load_opt=NULL}, ++ {.name = "glx", .toLoad = TRUE, .load_opt=NULL}, ++ {.name = "freetype", .toLoad = TRUE, .load_opt=NULL}, ++ {.name = "type1", .toLoad = TRUE, .load_opt=NULL}, ++ {.name = "record", .toLoad = TRUE, .load_opt=NULL}, ++ {.name = "dri", .toLoad = TRUE, .load_opt=NULL}, ++ {.name = NULL, .toLoad = FALSE, .load_opt=NULL} ++}; ++ + /* + * prototypes + */ +Index: xorg-server/hw/xfree86/parser/Module.c +=================================================================== +--- xorg-server.orig/hw/xfree86/parser/Module.c 2007-04-26 21:27:35.000000000 -0400 ++++ xorg-server/hw/xfree86/parser/Module.c 2007-04-26 21:30:53.000000000 -0400 +@@ -76,6 +76,7 @@ + { + {ENDSECTION, "endsection"}, + {LOAD, "load"}, ++ {DISABLE, "disable"}, + {LOAD_DRIVER, "loaddriver"}, + {SUBSECTION, "subsection"}, + {-1, ""}, +@@ -141,6 +142,13 @@ + xf86addNewLoadDirective (ptr->mod_load_lst, val.str, + XF86_LOAD_MODULE, NULL); + break; ++ case DISABLE: ++ if (xf86getSubToken (&(ptr->mod_comment)) != STRING) ++ Error (QUOTE_MSG, "Disable"); ++ ptr->mod_disable_lst = ++ xf86addNewLoadDirective (ptr->mod_disable_lst, val.str, ++ XF86_DISABLE_MODULE, NULL); ++ break; + case LOAD_DRIVER: + if (xf86getSubToken (&(ptr->mod_comment)) != STRING) + Error (QUOTE_MSG, "LoadDriver"); +@@ -257,6 +265,15 @@ + lptr = lptr->list.next; + xf86conffree (prev); + } ++ lptr = ptr->mod_disable_lst; ++ while (lptr) ++ { ++ TestFree (lptr->load_name); ++ TestFree (lptr->load_comment); ++ prev = lptr; ++ lptr = lptr->list.next; ++ xf86conffree (prev); ++ } + TestFree (ptr->mod_comment); + xf86conffree (ptr); + } +Index: xorg-server/hw/xfree86/parser/xf86Parser.h +=================================================================== +--- xorg-server.orig/hw/xfree86/parser/xf86Parser.h 2007-04-26 21:27:35.000000000 -0400 ++++ xorg-server/hw/xfree86/parser/xf86Parser.h 2007-04-26 21:30:53.000000000 -0400 +@@ -82,6 +82,7 @@ + /* Values for load_type */ + #define XF86_LOAD_MODULE 0 + #define XF86_LOAD_DRIVER 1 ++#define XF86_DISABLE_MODULE 2 + + typedef struct + { +@@ -97,6 +98,7 @@ + typedef struct + { + XF86LoadPtr mod_load_lst; ++ XF86LoadPtr mod_disable_lst; + char *mod_comment; + } + XF86ConfModuleRec, *XF86ConfModulePtr; +Index: xorg-server/hw/xfree86/parser/xf86tokens.h +=================================================================== +--- xorg-server.orig/hw/xfree86/parser/xf86tokens.h 2007-04-26 21:27:35.000000000 -0400 ++++ xorg-server/hw/xfree86/parser/xf86tokens.h 2007-04-26 21:30:53.000000000 -0400 +@@ -170,6 +170,7 @@ + /* Module tokens */ + LOAD, + LOAD_DRIVER, ++ DISABLE, + + /* Device tokens */ + DRIVER, --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/45_CVE-2007-2437.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/45_CVE-2007-2437.diff @@ -0,0 +1,37 @@ +From 71fc5b3e9309182978ead676965d65ca93a4e3b9 Mon Sep 17 00:00:00 2001 +From: Keith Packard +Date: Wed, 2 May 2007 11:41:11 +0200 +Subject: [PATCH] Fix for a divide by zero that can be triggered by a malicious client. + +Problem reported by Derek Abdine of rapid7.com. Thanks. +--- + fb/fbtrap.c | 3 +++ + render/renderedge.c | 1 + + 2 files changed, 4 insertions(+), 0 deletions(-) + +Index: xorg-server/fb/fbtrap.c +=================================================================== +--- xorg-server.orig/fb/fbtrap.c 2007-05-09 02:16:04.000000000 +0200 ++++ xorg-server/fb/fbtrap.c 2007-05-09 02:27:10.000000000 +0200 +@@ -115,6 +115,9 @@ + RenderEdge l, r; + xFixed t, b; + ++ if (!xTrapezoidValid (trap)) ++ return; ++ + fbGetDrawable (pPicture->pDrawable, buf, stride, bpp, pxoff, pyoff); + + width = pPicture->pDrawable->width; +Index: xorg-server/render/renderedge.c +=================================================================== +--- xorg-server.orig/render/renderedge.c 2007-05-09 02:16:04.000000000 +0200 ++++ xorg-server/render/renderedge.c 2007-05-09 02:27:10.000000000 +0200 +@@ -143,6 +143,7 @@ + dx = x_bot - x_top; + dy = y_bot - y_top; + e->dy = dy; ++ e->dx = 0; + if (dy) + { + if (dx >= 0) --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/134_fedora_xorg-x11-server-1.1.1-vt-activate-is-a-terrible-api.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/134_fedora_xorg-x11-server-1.1.1-vt-activate-is-a-terrible-api.patch @@ -0,0 +1,37 @@ +--- xorg-server-1.1.1/hw/xfree86/os-support/linux/lnx_init.c.vt-activate 2006-07-05 14:31:41.000000000 -0400 ++++ xorg-server-1.1.1/hw/xfree86/os-support/linux/lnx_init.c 2006-12-14 22:00:25.000000000 -0500 +@@ -248,14 +248,20 @@ + #endif + /* + * now get the VT ++ * ++ * There's a race here, in that if someone else does a VT_ACTIVATE ++ * between our ACTIVATE/WAITACTIVE, we might never get the VT. ++ * So we have to fail in that case. There's really no fixing this, ++ * it's a racy protocol. + */ + if (ioctl(xf86Info.consoleFd, VT_ACTIVATE, xf86Info.vtno) < 0) +- xf86Msg(X_WARNING, "xf86OpenConsole: VT_ACTIVATE failed: %s\n", +- strerror(errno)); ++ FatalError("xf86OpenConsole: VT_ACTIVATE failed: %s\n", ++ strerror(errno)); ++ + + if (ioctl(xf86Info.consoleFd, VT_WAITACTIVE, xf86Info.vtno) < 0) +- xf86Msg(X_WARNING, "xf86OpenConsole: VT_WAITACTIVE failed: %s\n", +- strerror(errno)); ++ FatalError("xf86OpenConsole: VT_WAITACTIVE failed: %s\n", ++ strerror(errno)); + + if (ioctl(xf86Info.consoleFd, VT_GETMODE, &VT) < 0) + FatalError("xf86OpenConsole: VT_GETMODE failed %s\n", +@@ -352,6 +358,9 @@ + if (ioctl(xf86Info.consoleFd, VT_ACTIVATE, activeVT) < 0) + xf86Msg(X_WARNING, "xf86CloseConsole: VT_ACTIVATE failed: %s\n", + strerror(errno)); ++ if (ioctl(xf86Info.consoleFd, VT_WAITACTIVE, activeVT) < 0) ++ xf86Msg(X_WARNING, "xf86CloseConsole: VT_WAITACTIVE failed: %s\n", ++ strerror(errno)); + activeVT = -1; + } + --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/52_avoid_acpi_insanity.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/52_avoid_acpi_insanity.diff @@ -0,0 +1,12 @@ +diff -ur xorg-server-1.3.0.0.dfsg/hw/xfree86/os-support/linux/lnx_acpi.c xorg-server-1.3.0.0.dfsg.new/hw/xfree86/os-support/linux/lnx_acpi.c +--- xorg-server-1.3.0.0.dfsg/hw/xfree86/os-support/linux/lnx_acpi.c 2006-11-16 18:01:25.000000000 +0000 ++++ xorg-server-1.3.0.0.dfsg.new/hw/xfree86/os-support/linux/lnx_acpi.c 2007-08-26 16:14:34.000000000 +0100 +@@ -110,6 +110,8 @@ + case ACPI_VIDEO_NOTIFY_PREV_OUTPUT: + break; + default: ++ /* If it's not a switch notification, send nothing */ ++ return 0; + break; + } + --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/145_glx_visuals_bound_check.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/145_glx_visuals_bound_check.patch @@ -0,0 +1,48 @@ +--- xorg-server-1.3.0.0.dfsg.orig/GL/mesa/X/xf86glx.c 2007-01-30 07:56:27.000000000 +0100 ++++ xorg-server-1.3.0.0.dfsg/GL/mesa/X/xf86glx.c 2007-09-28 16:49:46.000000000 +0200 +@@ -317,7 +319,7 @@ + __GLcontextModes *modes; + XMesaVisual *pXMesaVisual; + int *used; +- int i, j, size; ++ int num_vis, j, size; + + /* Alloc space for the list of XMesa visuals */ + size = screen->base.numVisuals * sizeof(XMesaVisual); +@@ -333,7 +335,7 @@ + used = (int *) xalloc(pScreen->numVisuals * sizeof(int)); + memset(used, 0, pScreen->numVisuals * sizeof(int)); + +- i = 0; ++ num_vis = 0; + for ( modes = screen->base.modes; modes != NULL; modes = modes->next ) { + const int vis_class = _gl_convert_to_x_visual_type( modes->visualType ); + const int nplanes = (modes->rgbBits - modes->alphaBits); +@@ -348,7 +350,8 @@ + !used[j]) { + + /* Create the XMesa visual */ +- pXMesaVisual[i] = ++ assert(num_vis < screen->base.numVisuals); ++ pXMesaVisual[num_vis] = + XMesaCreateVisual(pScreen, + &pVis[j], + modes->rgbMode, +@@ -385,13 +388,15 @@ + FatalError( "Matching visual found, but visualID still -1!\n" ); + } + +- i++; ++ num_vis++; + } + + xfree(used); + +- screen->num_vis = pScreen->numVisuals; ++ screen->num_vis = num_vis; + screen->xm_vis = pXMesaVisual; ++ ++ assert(screen->num_vis <= screen->base.numVisuals); + } + + static __GLXscreen * --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/120_fedora_disable_offscreen_pixmaps.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/120_fedora_disable_offscreen_pixmaps.diff @@ -0,0 +1,59 @@ +diff -urN xorg-server-1.2.0/GL/glx/glxdri.c xorg-server-1.2.0.new/GL/glx/glxdri.c +--- xorg-server-1.2.0/GL/glx/glxdri.c 2007-01-23 07:39:15.000000000 +0200 ++++ xorg-server-1.2.0.new/GL/glx/glxdri.c 2007-03-29 11:49:28.000000000 +0300 +@@ -327,6 +327,21 @@ + int bpp; + GLenum target, format, type; + ++ /* When the GLX_EXT_texture_from_pixmap is used, as it's ++ * implemented here, we want to pull pixmap out of video memory ++ * and into host memory. */ ++ { ++ extern void XAAEvictPixmaps(void); ++ static int evictedPixmaps; ++ ++ if (!evictedPixmaps) { ++ __glXDRIenterServer(); ++ XAAEvictPixmaps(); ++ __glXDRIleaveServer(); ++ evictedPixmaps = TRUE; ++ } ++ } ++ + pixmap = (PixmapPtr) glxPixmap->pDraw; + if (!glxPixmap->pDamage) { + glxPixmap->pDamage = DamageCreate(NULL, NULL, DamageReportNone, +diff -urN xorg-server-1.2.0/hw/xfree86/xaa/xaaInit.c xorg-server-1.2.0.new/hw/xfree86/xaa/xaaInit.c +--- xorg-server-1.2.0/hw/xfree86/xaa/xaaInit.c 2007-01-23 07:39:16.000000000 +0200 ++++ xorg-server-1.2.0.new/hw/xfree86/xaa/xaaInit.c 2007-03-29 11:49:28.000000000 +0300 +@@ -97,6 +97,30 @@ + xfree(infoRec); + } + ++void ++XAAEvictPixmaps(void) ++{ ++ XAAScreenPtr pScreenPriv; ++ XAAInfoRecPtr infoRec; ++ ScreenPtr pScreen; ++ int i; ++ ++ xf86MsgVerb(X_INFO, 3, "XAA: Evicting pixmaps\n"); ++ ++ for (i = 0; i < screenInfo.numScreens; i++) { ++ pScreen = screenInfo.screens[i]; ++ infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen); ++ ++ pScreenPriv = pScreen->devPrivates[XAAScreenIndex].ptr; ++ infoRec = pScreenPriv->AccelInfoRec; ++ ++ infoRec->offscreenDepths = 0; ++ infoRec->Flags &= ~OFFSCREEN_PIXMAPS; ++ ++ XAAMoveOutOffscreenPixmaps(pScreen); ++ XAAInvalidatePixmapCache(pScreen); ++ } ++} + + Bool + XAAInit(ScreenPtr pScreen, XAAInfoRecPtr infoRec) --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/39_alpha_build_flags.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/39_alpha_build_flags.patch @@ -0,0 +1,18 @@ +Index: hw/xfree86/os-support/linux/Makefile.am +=================================================================== +--- hw/xfree86/os-support/linux/Makefile.am.orig 2007-02-04 07:41:11.000000000 +0100 ++++ hw/xfree86/os-support/linux/Makefile.am 2007-02-04 08:12:21.000000000 +0100 +@@ -6,7 +6,12 @@ + PLATFORM_INCLUDES = -I$(srcdir)/../shared + endif + if LINUX_ALPHA +-PLATFORM_PCI_SUPPORT = lnx_ev56.c \ ++noinst_LTLIBRARIES += libev56.la ++libev56_la_CFLAGS = $(AM_CFLAGS) -mcpu=ev56 ++libev56_la_SOURCES = lnx_ev56.c ++liblinux_la_LIBADD = libev56.la ++liblinux_la_DEPENDENCIES = libev56.la ++PLATFORM_PCI_SUPPORT = \ + $(srcdir)/lnx_axp.c \ + $(srcdir)/../shared/xf86Axp.c + endif --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/139_fedora_xserver-1.3.0-document-fontpath-correctly.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/139_fedora_xserver-1.3.0-document-fontpath-correctly.patch @@ -0,0 +1,43 @@ +diff -up xorg-server-1.3.0.0/hw/xfree86/doc/man/xorg.conf.man.pre.jx xorg-server-1.3.0.0/hw/xfree86/doc/man/xorg.conf.man.pre +--- xorg-server-1.3.0.0/hw/xfree86/doc/man/xorg.conf.man.pre.jx 2006-12-22 03:06:49.000000000 -0500 ++++ xorg-server-1.3.0.0/hw/xfree86/doc/man/xorg.conf.man.pre 2007-08-23 15:27:47.000000000 -0400 +@@ -308,11 +308,11 @@ font path elements: + .PP + .RS 4 + .nf +-.I __projectroot__/lib/X11/fonts/misc/ +-.I __projectroot__/lib/X11/fonts/TTF/ +-.I __projectroot__/lib/X11/fonts/Type1/ +-.I __projectroot__/lib/X11/fonts/75dpi/ +-.I __projectroot__/lib/X11/fonts/100dpi/ ++.I __projectroot__/share/X11/fonts/misc/ ++.I __projectroot__/share/X11/fonts/TTF/ ++.I __projectroot__/share/X11/fonts/Type1/ ++.I __projectroot__/share/X11/fonts/75dpi/ ++.I __projectroot__/share/X11/fonts/100dpi/ + .fi + .RE + .PP +@@ -320,14 +320,14 @@ The recommended font path contains the f + .PP + .RS 4 + .nf +-.I __projectroot__/lib/X11/fonts/local/ +-.I __projectroot__/lib/X11/fonts/misc/ +-.I __projectroot__/lib/X11/fonts/75dpi/:unscaled +-.I __projectroot__/lib/X11/fonts/100dpi/:unscaled +-.I __projectroot__/lib/X11/fonts/Type1/ +-.I __projectroot__/lib/X11/fonts/Speedo/ +-.I __projectroot__/lib/X11/fonts/75dpi/ +-.I __projectroot__/lib/X11/fonts/100dpi/ ++.I __projectroot__/share/X11/fonts/local/ ++.I __projectroot__/share/X11/fonts/misc/ ++.I __projectroot__/share/X11/fonts/75dpi/:unscaled ++.I __projectroot__/share/X11/fonts/100dpi/:unscaled ++.I __projectroot__/share/X11/fonts/Type1/ ++.I __projectroot__/share/X11/fonts/Speedo/ ++.I __projectroot__/share/X11/fonts/75dpi/ ++.I __projectroot__/share/X11/fonts/100dpi/ + .fi + .RE + .PP --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/fix_CVE-2007-6429.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/fix_CVE-2007-6429.patch @@ -0,0 +1,217 @@ +commit 6de61f82728df22ea01f9659df6581b87f33f11d +Author: Matthieu Herrb +Date: Thu Jan 17 15:28:42 2008 +0100 + + Fix for CVE-2007-6429 - MIT-SHM and EVI extensions integer overflows. + +commit e9fa7c1c88a8130a48f772c92b186b8b777986b5 +Author: Adam Jackson +Date: Fri Jan 18 14:41:20 2008 -0500 + + CVE-2007-6429: Don't spuriously reject <8bpp shm pixmaps. + + Move size validation after depth validation, and only validate size if + the bpp of the pixmap format is > 8. If bpp < 8 then we're already + protected from overflow by the width and height checks. +Index: xorg-server-1.3.0.0.dfsg/Xext/EVI.c +=================================================================== +--- xorg-server-1.3.0.0.dfsg.orig/Xext/EVI.c 2008-01-18 11:56:59.000000000 -0800 ++++ xorg-server-1.3.0.0.dfsg/Xext/EVI.c 2008-01-18 11:57:53.000000000 -0800 +@@ -34,6 +34,7 @@ + #include + #include "EVIstruct.h" + #include "modinit.h" ++#include "scrnintstr.h" + + #if 0 + static unsigned char XEVIReqCode = 0; +@@ -87,10 +88,22 @@ + { + REQUEST(xEVIGetVisualInfoReq); + xEVIGetVisualInfoReply rep; +- int n, n_conflict, n_info, sz_info, sz_conflict; ++ int i, n, n_conflict, n_info, sz_info, sz_conflict; + VisualID32 *conflict; ++ unsigned int total_visuals = 0; + xExtendedVisualInfo *eviInfo; + int status; ++ ++ /* ++ * do this first, otherwise REQUEST_FIXED_SIZE can overflow. we assume ++ * here that you don't have more than 2^32 visuals over all your screens; ++ * this seems like a safe assumption. ++ */ ++ for (i = 0; i < screenInfo.numScreens; i++) ++ total_visuals += screenInfo.screens[i]->numVisuals; ++ if (stuff->n_visual > total_visuals) ++ return BadValue; ++ + REQUEST_FIXED_SIZE(xEVIGetVisualInfoReq, stuff->n_visual * sz_VisualID32); + status = eviPriv->getVisualInfo((VisualID32 *)&stuff[1], (int)stuff->n_visual, + &eviInfo, &n_info, &conflict, &n_conflict); +Index: xorg-server-1.3.0.0.dfsg/Xext/sampleEVI.c +=================================================================== +--- xorg-server-1.3.0.0.dfsg.orig/Xext/sampleEVI.c 2008-01-18 11:56:59.000000000 -0800 ++++ xorg-server-1.3.0.0.dfsg/Xext/sampleEVI.c 2008-01-18 11:57:53.000000000 -0800 +@@ -35,6 +35,13 @@ + #include + #include "EVIstruct.h" + #include "scrnintstr.h" ++ ++#if HAVE_STDINT_H ++#include ++#elif !defined(UINT32_MAX) ++#define UINT32_MAX 0xffffffffU ++#endif ++ + static int sampleGetVisualInfo( + VisualID32 *visual, + int n_visual, +@@ -43,24 +50,36 @@ + VisualID32 **conflict_rn, + int *n_conflict_rn) + { +- int max_sz_evi = n_visual * sz_xExtendedVisualInfo * screenInfo.numScreens; ++ unsigned int max_sz_evi; + VisualID32 *temp_conflict; + xExtendedVisualInfo *evi; +- int max_visuals = 0, max_sz_conflict, sz_conflict = 0; ++ unsigned int max_visuals = 0, max_sz_conflict, sz_conflict = 0; + register int visualI, scrI, sz_evi = 0, conflictI, n_conflict; +- *evi_rn = evi = (xExtendedVisualInfo *)xalloc(max_sz_evi); +- if (!*evi_rn) +- return BadAlloc; ++ ++ if (n_visual > UINT32_MAX/(sz_xExtendedVisualInfo * screenInfo.numScreens)) ++ return BadAlloc; ++ max_sz_evi = n_visual * sz_xExtendedVisualInfo * screenInfo.numScreens; ++ + for (scrI = 0; scrI < screenInfo.numScreens; scrI++) { + if (screenInfo.screens[scrI]->numVisuals > max_visuals) + max_visuals = screenInfo.screens[scrI]->numVisuals; + } ++ ++ if (n_visual > UINT32_MAX/(sz_VisualID32 * screenInfo.numScreens ++ * max_visuals)) ++ return BadAlloc; + max_sz_conflict = n_visual * sz_VisualID32 * screenInfo.numScreens * max_visuals; ++ ++ *evi_rn = evi = (xExtendedVisualInfo *)xalloc(max_sz_evi); ++ if (!*evi_rn) ++ return BadAlloc; ++ + temp_conflict = (VisualID32 *)xalloc(max_sz_conflict); + if (!temp_conflict) { + xfree(*evi_rn); + return BadAlloc; + } ++ + for (scrI = 0; scrI < screenInfo.numScreens; scrI++) { + for (visualI = 0; visualI < n_visual; visualI++) { + evi[sz_evi].core_visual_id = visual[visualI]; +Index: xorg-server-1.3.0.0.dfsg/Xext/shm.c +=================================================================== +--- xorg-server-1.3.0.0.dfsg.orig/Xext/shm.c 2008-01-18 11:56:59.000000000 -0800 ++++ xorg-server-1.3.0.0.dfsg/Xext/shm.c 2008-01-18 11:58:22.000000000 -0800 +@@ -723,6 +723,8 @@ + int i, j, result; + ShmDescPtr shmdesc; + REQUEST(xShmCreatePixmapReq); ++ unsigned int width, height, depth; ++ unsigned long size; + PanoramiXRes *newPix; + + REQUEST_SIZE_MATCH(xShmCreatePixmapReq); +@@ -732,11 +734,18 @@ + LEGAL_NEW_RESOURCE(stuff->pid, client); + VERIFY_GEOMETRABLE(pDraw, stuff->drawable, client); + VERIFY_SHMPTR(stuff->shmseg, stuff->offset, TRUE, shmdesc, client); +- if (!stuff->width || !stuff->height) ++ ++ width = stuff->width; ++ height = stuff->height; ++ depth = stuff->depth; ++ if (!width || !height || !depth) + { + client->errorValue = 0; + return BadValue; + } ++ if (width > 32767 || height > 32767) ++ return BadAlloc; ++ + if (stuff->depth != 1) + { + pDepth = pDraw->pScreen->allowedDepths; +@@ -746,10 +755,18 @@ + client->errorValue = stuff->depth; + return BadValue; + } ++ + CreatePmap: +- VERIFY_SHMSIZE(shmdesc, stuff->offset, +- PixmapBytePad(stuff->width, stuff->depth) * stuff->height, +- client); ++ size = PixmapBytePad(width, depth) * height; ++ if (sizeof(size) == 4 && BitsPerPixel(depth) > 8) { ++ if (size < width * height) ++ return BadAlloc; ++ /* thankfully, offset is unsigned */ ++ if (stuff->offset + size < size) ++ return BadAlloc; ++ } ++ ++ VERIFY_SHMSIZE(shmdesc, stuff->offset, size, client); + + if(!(newPix = (PanoramiXRes *) xalloc(sizeof(PanoramiXRes)))) + return BadAlloc; +@@ -1047,6 +1064,8 @@ + register int i; + ShmDescPtr shmdesc; + REQUEST(xShmCreatePixmapReq); ++ unsigned int width, height, depth; ++ unsigned long size; + + REQUEST_SIZE_MATCH(xShmCreatePixmapReq); + client->errorValue = stuff->pid; +@@ -1055,11 +1074,18 @@ + LEGAL_NEW_RESOURCE(stuff->pid, client); + VERIFY_GEOMETRABLE(pDraw, stuff->drawable, client); + VERIFY_SHMPTR(stuff->shmseg, stuff->offset, TRUE, shmdesc, client); +- if (!stuff->width || !stuff->height) ++ ++ width = stuff->width; ++ height = stuff->height; ++ depth = stuff->depth; ++ if (!width || !height || !depth) + { + client->errorValue = 0; + return BadValue; + } ++ if (width > 32767 || height > 32767) ++ return BadAlloc; ++ + if (stuff->depth != 1) + { + pDepth = pDraw->pScreen->allowedDepths; +@@ -1069,10 +1095,18 @@ + client->errorValue = stuff->depth; + return BadValue; + } ++ + CreatePmap: +- VERIFY_SHMSIZE(shmdesc, stuff->offset, +- PixmapBytePad(stuff->width, stuff->depth) * stuff->height, +- client); ++ size = PixmapBytePad(width, depth) * height; ++ if (sizeof(size) == 4 && BitsPerPixel(depth) > 8) { ++ if (size < width * height) ++ return BadAlloc; ++ /* thankfully, offset is unsigned */ ++ if (stuff->offset + size < size) ++ return BadAlloc; ++ } ++ ++ VERIFY_SHMSIZE(shmdesc, stuff->offset, size, client); + pMap = (*shmFuncs[pDraw->pScreen->myNum]->CreatePixmap)( + pDraw->pScreen, stuff->width, + stuff->height, stuff->depth, --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/41_vbe_filter_less.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/41_vbe_filter_less.diff @@ -0,0 +1,46 @@ +* Fri Sep 22 2006 Adam Jackson 1.1.1-41.fc6 +- xorg-x11-server-1.1.1-vbe-filter-less.patch: Be gentler about rejecting + VESA modes early, since xf86ValidateModes should handle them just fine. + +http://cvs.fedora.redhat.com/viewcvs/devel/xorg-x11-server/xorg-x11-server-1.1.1-vbe-filter-less.patch?rev=1.1&view=auto +Debian bug #424684 (and maybe #428711) + +Index: xorg-server/hw/xfree86/vbe/vbeModes.c +=================================================================== +--- xorg-server.orig/hw/xfree86/vbe/vbeModes.c 2007-07-05 17:55:24.000000000 +0200 ++++ xorg-server/hw/xfree86/vbe/vbeModes.c 2007-07-05 17:57:01.000000000 +0200 +@@ -152,34 +152,6 @@ + xf86ErrorFVerb(DEBUG_VERB, "*"); + } + +- /* +- * Check if there's a valid monitor mode that this one can be matched +- * up with. The actual matching is done later. +- */ +- if (modeOK) { +- Bool sizeMatch = FALSE; +- modeOK = FALSE; +- for (p = pScrn->monitor->Modes; p != NULL; p = p->next) { +- if ((p->HDisplay != mode->XResolution) || +- (p->VDisplay != mode->YResolution) || +- (p->Flags & (V_INTERLACE | V_DBLSCAN | V_CLKDIV2))) +- continue; +- sizeMatch = TRUE; +- /* XXX could support the various V_ flags */ +- status = xf86CheckModeForMonitor(p, pScrn->monitor); +- if (status == MODE_OK) { +- modeOK = TRUE; +- break; +- } +- } +- if (sizeMatch && !modeOK) { +- xf86DrvMsg(pScrn->scrnIndex, X_INFO, +- "Not using built-in mode \"%dx%d\" (%s)\n", +- mode->XResolution, mode->YResolution, +- xf86ModeStatusToString(status)); +- } +- } +- + xf86ErrorFVerb(DEBUG_VERB, + "Mode: %x (%dx%d)\n", id, mode->XResolution, mode->YResolution); + xf86ErrorFVerb(DEBUG_VERB, --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/09_debian_xserver_rtff.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/09_debian_xserver_rtff.diff @@ -0,0 +1,52 @@ +$Id: 910_debian_Xserver_RTFF.diff 486 2005-08-03 04:51:11Z dnusinow $ + +Give the user a far stronger clue as to what to do when their font configuration +is horribly screwed up; this patch by Branden Robinson. + +Index: dix/main.c +=================================================================== +--- dix/main.c.orig 2006-11-13 19:59:22.000000000 +0100 ++++ dix/main.c 2006-11-26 01:55:13.000000000 +0100 +@@ -407,10 +407,42 @@ + defaultFontPath); + } + if (!SetDefaultFont(defaultTextFont)) ++#ifdef DEBIAN ++ FatalError("could not open default font '%s';\n" ++"the X server's font paths might be misconfigured, remote font server(s)\n" ++"may be unreachable, and/or local fonts may not be installed or are not\n" ++"configured correctly.\n" ++"\n" ++"People inexperienced with the X Window System should have the\n" ++"\"xorg\" package installed.\n" ++"# apt-get install xorg\n" ++"\n" ++"Other useful commands to run include:\n" ++"$ dpkg --status x11-common\n" ++"$ dpkg --status xfonts-base\n" ++"$ zmore /usr/share/doc/x11-common/FAQ.gz", defaultTextFont); ++#else + FatalError("could not open default font '%s'", defaultTextFont); ++#endif + if (!(rootCursor = CreateRootCursor(defaultCursorFont, 0))) ++#ifdef DEBIAN ++ FatalError("could not open default cursor font '%s';\n" ++"the X server's font paths might be misconfigured, remote font server(s)\n" ++"may be unreachable, and/or local fonts may not be installed or are not\n" ++"configured correctly.\n" ++"\n" ++"People inexperienced with the X Window System should have the\n" ++"\"xorg\" package installed.\n" ++"# apt-get install xorg\n" ++"\n" ++"Other useful commands to run include:\n" ++"$ dpkg --status x11-common\n" ++"$ dpkg --status xfonts-base\n" ++"$ zmore /usr/share/doc/x11-common/FAQ.gz", defaultTextFont); ++#else + FatalError("could not open default cursor font '%s'", + defaultCursorFont); ++#endif + #ifdef DPMSExtension + /* check all screens, looking for DPMS Capabilities */ + DPMSCapableFlag = DPMSSupported(); --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/231_In_dmxBackendMouGetInfo_initialize_the_info-minval_maxval_arrays_to_the_size_of_the_backend_display.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/231_In_dmxBackendMouGetInfo_initialize_the_info-minval_maxval_arrays_to_the_size_of_the_backend_display.patch @@ -0,0 +1,34 @@ +From: Brian +Date: Mon, 2 Apr 2007 18:41:30 +0000 (-0600) +Subject: In dmxBackendMouGetInfo() initialize the info->minval[], maxval[] arrays to the size ... +X-Git-Tag: xorg-server-1.3.99.0 +X-Git-Url: http://gitweb.freedesktop.org/?p=xorg/xserver.git;a=commitdiff;h=0aaf28e5633a59563b89a2e42d19fabc84adc3ed + +In dmxBackendMouGetInfo() initialize the info->minval[], maxval[] arrays to the size of the backend display. + +It seems that the changes to X input exposed a problem that wasn't detected +before. The axis clipping code in GetPointerEvents() uses those limits to +constrain the pointer's coordinate range. The max was zero so the pointer +couldn't move. +--- + +--- a/hw/dmx/input/dmxbackend.c ++++ b/hw/dmx/input/dmxbackend.c +@@ -592,12 +592,16 @@ void dmxBackendInit(DevicePtr pDev) + /** Get information about the backend pointer (for initialization). */ + void dmxBackendMouGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info) + { ++ const DMXScreenInfo *dmxScreen = dmxBackendInitPrivate(pDev); ++ + info->buttonClass = 1; + dmxCommonMouGetMap(pDev, info->map, &info->numButtons); + info->valuatorClass = 1; + info->numRelAxes = 2; + info->minval[0] = 0; +- info->maxval[0] = 0; ++ info->minval[1] = 0; ++ info->maxval[0] = dmxScreen->beWidth; ++ info->maxval[1] = dmxScreen->beHeight; + info->res[0] = 1; + info->minres[0] = 0; + info->maxres[0] = 1; --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/32_disable_sparc_pci_bridge.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/32_disable_sparc_pci_bridge.diff @@ -0,0 +1,13 @@ +Index: xorg-server/hw/xfree86/os-support/bus/Pci.h +=================================================================== +--- xorg-server.orig/hw/xfree86/os-support/bus/Pci.h 2006-11-26 02:33:15.000000000 +0100 ++++ xorg-server/hw/xfree86/os-support/bus/Pci.h 2006-11-26 02:55:48.000000000 +0100 +@@ -327,7 +327,7 @@ + # define INCLUDE_XF86_MAP_PCI_MEM + # define INCLUDE_XF86_NO_DOMAIN + # endif +-# if !defined(__FreeBSD__) ++# if !defined(__FreeBSD__) && !defined(linux) + # define ARCH_PCI_PCI_BRIDGE sparcPciPciBridge + # endif + #elif defined(__amd64__) || defined(__amd64) --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/49_map_keyboard_driver_to_kbd.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/49_map_keyboard_driver_to_kbd.diff @@ -0,0 +1,65 @@ +# Copyright 2007 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. +# + +Preserve compatibility with old xorg.conf files that have "keyboard" or +"Keyboard" drivers listed. (Sun bug 6560332) + +https://bugs.freedesktop.org/show_bug.cgi?id=11301 +Debian bug#428794 + +Index: hw/xfree86/common/xf86Init.c +=================================================================== +--- hw/xfree86/common/xf86Init.c.orig 2007-07-14 12:14:29.000000000 +0200 ++++ hw/xfree86/common/xf86Init.c 2007-07-14 12:15:21.000000000 +0200 +@@ -1032,6 +1032,14 @@ + + continue; + } ++#else ++ /* Replace obsolete keyboard driver with kbd */ ++ if (!xf86NameCmp(pDev->driver, "keyboard")) { ++ xf86MsgVerb(X_WARNING, 0, "*** WARNING the legacy keyboard driver \"%s\" is deprecated\n", pDev->driver); ++ xf86MsgVerb(X_WARNING, 0, "*** Using the new \"kbd\" driver for \"%s\".\n", ++ pDev->identifier); ++ strcpy(pDev->driver, "kbd"); ++ } + #endif + + if ((pDrv = MatchInput(pDev)) == NULL) { +@@ -1951,6 +1959,11 @@ + if (name == NULL || *name == '\0') + continue; + ++ /* Replace obsolete keyboard driver with kbd */ ++ if (!xf86NameCmp(name, "keyboard")) { ++ strcpy(name, "kbd"); ++ } ++ + if (optlist) + opt = optlist[i]; + else --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/94_use_default_font_path.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/94_use_default_font_path.diff @@ -0,0 +1,91 @@ +Index: xorg-server/hw/xfree86/common/xf86Config.c +=================================================================== +--- xorg-server.orig/hw/xfree86/common/xf86Config.c 2007-04-24 23:43:28.000000000 -0400 ++++ xorg-server/hw/xfree86/common/xf86Config.c 2007-04-26 21:22:35.000000000 -0400 +@@ -637,16 +637,24 @@ + char *log_buf; + + /* FontPath */ +- + /* Try XF86Config FontPath first */ + if (!xf86fpFlag) { + if (fileconf) { + if (fileconf->file_fontpath) { + char *f = xf86ValidateFontPath(fileconf->file_fontpath); + pathFrom = X_CONFIG; +- if (*f) +- defaultFontPath = f; +- else { ++ if (*f) { ++ if (xf86Info.useDefaultFontPath) { ++ xf86Msg(X_WARNING, "Including the default font path %s.\n", defaultFontPath); ++ char *g = xnfalloc(strlen(defaultFontPath) + strlen(f) + 3); ++ strcpy(g, f); ++ strcat(g, ","); ++ defaultFontPath = strcat(g, defaultFontPath); ++ xfree(f); ++ } else { ++ defaultFontPath = f; ++ } ++ } else { + xf86Msg(X_WARNING, + "FontPath is completely invalid. Using compiled-in default.\n"); + fontPath = NULL; +@@ -812,7 +820,8 @@ + FLAG_HANDLE_SPECIAL_KEYS, + FLAG_RANDR, + FLAG_AIGLX, +- FLAG_IGNORE_ABI ++ FLAG_IGNORE_ABI, ++ FLAG_USE_DEFAULT_FONT_PATH + } FlagValues; + + static OptionInfoRec FlagOptions[] = { +@@ -886,6 +895,8 @@ + {0}, FALSE }, + { FLAG_IGNORE_ABI, "IgnoreABI", OPTV_BOOLEAN, + {0}, FALSE }, ++ { FLAG_USE_DEFAULT_FONT_PATH, "UseDefaultFontPath", OPTV_BOOLEAN, ++ {0}, FALSE }, + { -1, NULL, OPTV_NONE, + {0}, FALSE }, + }; +@@ -1081,6 +1092,13 @@ + xf86Info.aiglxFrom = X_CONFIG; + } + ++ xf86Info.useDefaultFontPath = TRUE; ++ xf86Info.useDefaultFontPathFrom = X_DEFAULT; ++ if (xf86GetOptValBool(FlagOptions, FLAG_USE_DEFAULT_FONT_PATH, &value)) { ++ xf86Info.useDefaultFontPath = value; ++ xf86Info.useDefaultFontPathFrom = X_CONFIG; ++ } ++ + /* Make sure that timers don't overflow CARD32's after multiplying */ + #define MAX_TIME_IN_MIN (0x7fffffff / MILLI_PER_MIN) + +@@ -2814,9 +2832,9 @@ + + /* Now process everything else */ + +- if (!configFiles(xf86configptr->conf_files) || +- !configServerFlags(xf86configptr->conf_flags, ++ if (!configServerFlags(xf86configptr->conf_flags, + xf86ConfigLayout.options) || ++ !configFiles(xf86configptr->conf_files) || + !configExtensions(xf86configptr->conf_extensions) + #ifdef XF86DRI + || !configDRI(xf86configptr->conf_dri) +Index: xorg-server/hw/xfree86/common/xf86Privstr.h +=================================================================== +--- xorg-server.orig/hw/xfree86/common/xf86Privstr.h 2007-04-24 23:43:28.000000000 -0400 ++++ xorg-server/hw/xfree86/common/xf86Privstr.h 2007-04-25 00:44:14.000000000 -0400 +@@ -166,6 +166,8 @@ + MessageType randRFrom; + Bool aiglx; + MessageType aiglxFrom; ++ Bool useDefaultFontPath; ++ MessageType useDefaultFontPathFrom; + Bool ignoreABI; + struct { + Bool disabled; /* enable/disable deactivating --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/16_s390_fix.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/16_s390_fix.diff @@ -0,0 +1,26 @@ +Index: xorg-server/hw/xfree86/os-support/linux/lnx_video.c +=================================================================== +--- xorg-server.orig/hw/xfree86/os-support/linux/lnx_video.c 2006-11-13 19:59:23.000000000 +0100 ++++ xorg-server/hw/xfree86/os-support/linux/lnx_video.c 2006-11-26 02:06:51.000000000 +0100 +@@ -567,7 +567,7 @@ + #endif + } + close(fd); +-#elif !defined(__mc68000__) && !defined(__sparc__) && !defined(__mips__) && !defined(__sh__) && !defined(__hppa__) ++#elif !defined(__mc68000__) && !defined(__sparc__) && !defined(__mips__) && !defined(__sh__) && !defined(__hppa__) && !defined(__s390__) + if (ioperm(0, 1024, 1) || iopl(3)) { + if (errno == ENODEV) + ErrorF("xf86EnableIOPorts: no I/O ports found\n"); +Index: xorg-server/hw/xfree86/common/compiler.h +=================================================================== +--- xorg-server.orig/hw/xfree86/common/compiler.h 2006-11-13 19:59:23.000000000 +0100 ++++ xorg-server/hw/xfree86/common/compiler.h 2006-11-26 02:06:51.000000000 +0100 +@@ -1365,7 +1365,7 @@ + # define write_mem_barrier() /* NOP */ + + # if !defined(__SUNPRO_C) +-# if !defined(FAKEIT) && !defined(__mc68000__) && !defined(__arm__) && !defined(__sh__) && !defined(__hppa__) ++# if !defined(FAKEIT) && !defined(__mc68000__) && !defined(__arm__) && !defined(__sh__) && !defined(__hppa__) && !defined(__s390__) + # ifdef GCCUSESGAS + + /* --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/91_ttf2pt1_updates +++ xorg-server-1.3.0.0.dfsg/debian/patches/91_ttf2pt1_updates @@ -0,0 +1,39 @@ +diff -ruN xserver-old/hw/xprint/extras/ttf2pt1/ft.c xorg-server/hw/xprint/extras/ttf2pt1/ft.c +--- xorg-server-old/hw/xprint/extras/ttf2pt1/ft.c 2006-06-27 13:14:02.000000000 +1000 ++++ xorg-server/hw/xprint/extras/ttf2pt1/ft.c 2006-06-27 13:18:56.000000000 +1000 +@@ -36,15 +36,15 @@ + + #ifdef XP_PSTEXT + #include "os.h" +-#include "Xproto.h" +-#include "font.h" +-#include "fontstruct.h" +-#include "fntfilst.h" +-#include "fontutil.h" +-#include "fontenc.h" +-#include "ft.h" ++#include ++#include ++#include ++#include ++#include ++#include ++#include + #define NOT_IN_FTFUNCS +-#include "ftfuncs.h" ++#include + #endif /* XP_PSTEXT */ + + #include "pt1.h" +diff -ruN xorg-server-old/hw/xprint/extras/ttf2pt1/ttf2pt1.c xorg-server/hw/xprint/extras/ttf2pt1/ttf2pt1.c +--- xorg-server-old/hw/xprint/extras/ttf2pt1/ttf2pt1.c 2006-06-27 13:14:02.000000000 +1000 ++++ xorg-server/hw/xprint/extras/ttf2pt1/ttf2pt1.c 2006-06-27 13:15:49.000000000 +1000 +@@ -1698,7 +1698,7 @@ + + #ifdef XP_PSTEXT + FT_Face xp_pstext_ft_face = NULL; /* used by ft.c */ +-FontPtr xp_xtf = NULL; ++FTFontPtr xp_xtf = NULL; + const char *xp_psfontname = NULL; + unsigned long xp_font_block_offset = 0UL; + --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/221_ExaOffscreenMarkUsed-_Dont_crash_when_theres_no_offscreen_memory.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/221_ExaOffscreenMarkUsed-_Dont_crash_when_theres_no_offscreen_memory.patch @@ -0,0 +1,20 @@ +From: Dodji Seketeli +Date: Tue, 3 Jul 2007 09:00:29 +0000 (+0200) +Subject: ExaOffscreenMarkUsed: Don't crash when there's no offscreen memory. +X-Git-Tag: xorg-server-1.3.99.0 +X-Git-Url: http://gitweb.freedesktop.org/?p=xorg/xserver.git;a=commitdiff;h=2a75c774975b50dd4e71b7dbea7bd65ca2984a43 + +ExaOffscreenMarkUsed: Don't crash when there's no offscreen memory. +--- + +--- a/exa/exa_offscreen.c ++++ b/exa/exa_offscreen.c +@@ -429,7 +429,7 @@ ExaOffscreenMarkUsed (PixmapPtr pPixmap) + ExaScreenPriv (pPixmap->drawable.pScreen); + static int iter = 0; + +- if (!pExaPixmap->area) ++ if (!pExaPixmap || !pExaPixmap->area) + return; + + /* The numbers here are arbitrary. We may want to tune these. */ --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/50_alpha_no_include_asm_pci.h.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/50_alpha_no_include_asm_pci.h.diff @@ -0,0 +1,31 @@ + isn't exported to userspace, and the same defines are +also in lnx.h. +Add unistd.h include for syscall(). + +Index: xorg-server/hw/xfree86/os-support/linux/lnx.h +=================================================================== +--- xorg-server.orig/hw/xfree86/os-support/linux/lnx.h 2007-07-14 19:40:30.000000000 +0200 ++++ xorg-server/hw/xfree86/os-support/linux/lnx.h 2007-07-14 20:03:37.000000000 +0200 +@@ -11,7 +11,6 @@ + + /* new pciconfig_iobase syscall added in 2.2.15 and 2.3.99 */ + # include +-# include + extern long (*_iobase)(unsigned, int, int, int); + + /* +Index: xorg-server/hw/xfree86/os-support/linux/lnx_axp.c +=================================================================== +--- xorg-server.orig/hw/xfree86/os-support/linux/lnx_axp.c 2007-07-14 20:03:46.000000000 +0200 ++++ xorg-server/hw/xfree86/os-support/linux/lnx_axp.c 2007-07-14 20:05:52.000000000 +0200 +@@ -112,8 +112,8 @@ + /* + * pciconfig_iobase wrappers and dynamic i/o selection + */ +-#include +-#include ++#include "lnx.h" ++#include + #include + + /* glibc versions (single hose only) */ --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/06_use_proc_instead_of_sysfs_for_pci_domains.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/06_use_proc_instead_of_sysfs_for_pci_domains.diff @@ -0,0 +1,36 @@ +Upstream commit 56f21bda1ce95741c88c423b60bd709eef26eb12 was supposed to +only avoid multiple scans of the PCI devices, but it actually also added +an "optimization" based on using sysfs files instead of /proc. However, +this code is broken, for instance because there are no ioctl handler on +/sys/bus/pci/devices/*/config files while there some on /proc/bus/pci/* + +It breaks the Xserver on architectures that require such ioctls to scan +the PCI devices and/or deal with PCI domains: +#422077: xserver-xorg: Fatal server error on sparc: xf86MapPciMem failed +#422095: xserver-xorg-core: fails to start on powerpc, no devices detected + +The following patch forces the server to behave as if we were running on +a 2.4 kernel while scanning PCI devices, so that the sysfs code is disabled. + +Upstream doesn't apply this patch since they want to fix the sysfs-code. +See https://bugs.freedesktop.org/show_bug.cgi?id=7248 + +Thanks to Jim Watson for testing! + +--- + hw/xfree86/os-support/bus/linuxPci.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: xorg-server-1.3.0.0.dfsg/hw/xfree86/os-support/bus/linuxPci.c +=================================================================== +--- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/os-support/bus/linuxPci.c 2007-05-10 21:51:55.000000000 +0200 ++++ xorg-server-1.3.0.0.dfsg/hw/xfree86/os-support/bus/linuxPci.c 2007-05-10 21:52:13.000000000 +0200 +@@ -148,7 +148,7 @@ + int domain, bus, dev, func; + char file[64]; + struct stat ignored; +- static int is26 = -1; ++ static int is26 = 0; + + domain = PCI_DOM_FROM_TAG(tag); + bus = PCI_BUS_NO_DOMAIN(PCI_BUS_FROM_TAG(tag)); --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/04_read_rom_in_chunks.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/04_read_rom_in_chunks.diff @@ -0,0 +1,16 @@ +Index: xorg-server/hw/xfree86/os-support/bus/linuxPci.c +=================================================================== +--- xorg-server.orig/hw/xfree86/os-support/bus/linuxPci.c 2006-11-26 01:31:42.000000000 +0100 ++++ xorg-server/hw/xfree86/os-support/bus/linuxPci.c 2006-11-26 01:32:09.000000000 +0100 +@@ -787,8 +787,10 @@ + write(fd, "1", 2); + lseek(fd, 0, SEEK_SET); + ++ len = min(Len, st.st_size); ++ + /* copy the ROM until we hit Len, EOF or read error */ +- for (i = 0; i < Len && read(fd, Buf, 1) > 0; Buf++, i++) ++ for (; len && (size = read(fd, Buf, len)) > 0 ; Buf+=size, len-=size) + ; + + write(fd, "0", 2); --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/144_fedora_xserver-1.3.0-xnest-exposures.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/144_fedora_xserver-1.3.0-xnest-exposures.patch @@ -0,0 +1,20 @@ +--- xorg-server-1.2.99.905/hw/xnest/Events.c.jx 2007-01-31 19:55:51.000000000 -0500 ++++ xorg-server-1.2.99.905/hw/xnest/Events.c 2007-04-09 18:42:51.000000000 -0400 +@@ -85,7 +85,7 @@ + while (XCheckIfEvent(xnestDisplay, &X, xnestExposurePredicate, NULL)) { + pWin = xnestWindowPtr(X.xexpose.window); + +- if (pWin) { ++ if (pWin && X.xexpose.width && X.xexpose.height) { + Box.x1 = pWin->drawable.x + wBorderWidth(pWin) + X.xexpose.x; + Box.y1 = pWin->drawable.y + wBorderWidth(pWin) + X.xexpose.y; + Box.x2 = Box.x1 + X.xexpose.width; +@@ -93,7 +93,7 @@ + + REGION_INIT(pWin->drawable.pScreen, &Rgn, &Box, 1); + +- miWindowExposures(pWin, &Rgn, NullRegion); ++ miSendExposures(pWin, &Rgn, Box.x2, Box.y2); + } + } + } --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/47_fbdevhw_magic_numbers.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/47_fbdevhw_magic_numbers.diff @@ -0,0 +1,17 @@ +* Fri May 11 2007 Adam Jackson 1.3.0.0-5 +- xserver-1.3.0-fbdevhw-magic-numbers.patch: If the fbdev driver claims to + have a zero pixel clock, believe it. Fixes Xen paravirt. (#238451) + +Might fix #422430 + +--- xorg-server-1.3.0.0/./hw/xfree86/fbdevhw/fbdevhw.c.jx 2007-03-26 23:32:36.000000000 -0400 ++++ xorg-server-1.3.0.0/./hw/xfree86/fbdevhw/fbdevhw.c 2007-05-11 15:10:05.000000000 -0400 +@@ -258,7 +258,7 @@ + static void + fbdev2xfree_timing(struct fb_var_screeninfo *var, DisplayModePtr mode) + { +- mode->Clock = var->pixclock ? 1000000000/var->pixclock : 28000000; ++ mode->Clock = var->pixclock ? 1000000000/var->pixclock : 0; + mode->HDisplay = var->xres; + mode->HSyncStart = mode->HDisplay+var->right_margin; + mode->HSyncEnd = mode->HSyncStart+var->hsync_len; --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/21_glx_align_fixes.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/21_glx_align_fixes.patch @@ -0,0 +1,65 @@ +Index: xorg-server/GL/glx/Makefile.am +=================================================================== +--- xorg-server.orig/GL/glx/Makefile.am 2007-03-15 00:57:26.000000000 +0100 ++++ xorg-server/GL/glx/Makefile.am 2007-03-15 00:57:37.000000000 +0100 +@@ -15,7 +15,8 @@ + -I@MESA_SOURCE@/src/mesa/main \ + -DXFree86Server \ + -DNO_LIBCWRAPPER \ +- @GLX_DEFINES@ ++ @GLX_DEFINES@ \ ++ @GLX_ARCH_DEFINES@ + + # none yet + #sdk_HEADERS = +Index: xorg-server/configure.ac +=================================================================== +--- xorg-server.orig/configure.ac 2007-03-15 00:57:26.000000000 +0100 ++++ xorg-server/configure.ac 2007-03-15 00:57:37.000000000 +0100 +@@ -207,6 +207,7 @@ + case $host_os in + *netbsd*) AC_DEFINE(USE_ALPHA_PIO, 1, [NetBSD PIO alpha IO]) ;; + esac ++ GLX_ARCH_DEFINES="-D__GLX_ALIGN64 -mieee" + ;; + arm*) + ARM_VIDEO=yes +@@ -235,6 +236,7 @@ + xorg_loader_sparcmuldiv="yes" + SPARC64_VIDEO=yes + BSD_ARCH_SOURCES="sparc64_video.c ioperm_noop.c" ++ GLX_ARCH_DEFINES="-D__GLX_ALIGN64" + ;; + x86_64*|amd64*) + use_x86_asm="yes" +@@ -248,8 +250,16 @@ + SYS_LIBS=-lamd64 + ;; + esac ++ GLX_ARCH_DEFINES="-D__GLX_ALIGN64" ++ ;; ++ ia64*) ++ GLX_ARCH_DEFINES="-D__GLX_ALIGN64" ++ ;; ++ s390*) ++ GLX_ARCH_DEFINES="-D__GLX_ALIGN64" + ;; + esac ++AC_SUBST(GLX_ARCH_DEFINES) + + dnl BSD *_video.c selection + AM_CONDITIONAL(ALPHA_VIDEO, [test "x$ALPHA_VIDEO" = xyes]) +Index: xorg-server/hw/dmx/glxProxy/Makefile.am +=================================================================== +--- xorg-server.orig/hw/dmx/glxProxy/Makefile.am 2007-03-15 00:57:26.000000000 +0100 ++++ xorg-server/hw/dmx/glxProxy/Makefile.am 2007-03-15 00:57:37.000000000 +0100 +@@ -31,8 +31,7 @@ + renderpixswap.c \ + unpack.h + +-AM_CFLAGS = \ +- \ ++AM_CFLAGS = @GLX_ARCH_DEFINES@ \ + -I$(top_srcdir)/hw/dmx \ + -I$(top_srcdir)/include \ + -I$(top_srcdir)/GL/include \ --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/fix_CVE-2007-5760.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/fix_CVE-2007-5760.patch @@ -0,0 +1,21 @@ +commit bbde5b62a137ba726a747b838d81e92d72c1b42b +Author: Matthieu Herrb +Date: Thu Jan 17 15:26:41 2008 +0100 + + Fix for CVE-2007-5760 - XFree86 Misc extension out of bounds array index + +Index: xorg-server-1.3.0.0.dfsg/hw/xfree86/common/xf86MiscExt.c +=================================================================== +--- xorg-server-1.3.0.0.dfsg.orig/hw/xfree86/common/xf86MiscExt.c 2008-01-17 10:22:19.000000000 -0800 ++++ xorg-server-1.3.0.0.dfsg/hw/xfree86/common/xf86MiscExt.c 2008-01-17 10:22:39.000000000 -0800 +@@ -640,6 +640,10 @@ + + DEBUG_P("MiscExtPassMessage"); + ++ /* should check this in the protocol, but xf86NumScreens isn't exported */ ++ if (scrnIndex >= xf86NumScreens) ++ return BadValue; ++ + if (*pScr->HandleMessage == NULL) + return BadImplementation; + return (*pScr->HandleMessage)(scrnIndex, msgtype, msgval, retstr); --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/91_ttf2pt1 +++ xorg-server-1.3.0.0.dfsg/debian/patches/91_ttf2pt1 @@ -0,0 +1,22165 @@ +diff -ruN xserver-old/hw/xprint/extras/ttf2pt1/bdf.c xserver/hw/xprint/extras/ttf2pt1/bdf.c +--- xserver-old/hw/xprint/extras/ttf2pt1/bdf.c 1970-01-01 10:00:00.000000000 +1000 ++++ xserver/hw/xprint/extras/ttf2pt1/bdf.c 2006-06-27 13:10:26.000000000 +1000 +@@ -0,0 +1,660 @@ ++/* ++ * The font parser for the BDF files ++ * ++ * Copyright (c) 2001 by the TTF2PT1 project ++ * Copyright (c) 2001 by Sergey Babkin ++ * ++ * see COPYRIGHT for the full copyright notice ++ */ ++ ++#include ++#include ++#include ++#include ++#include "pt1.h" ++#include "global.h" ++ ++/* prototypes of call entries */ ++static void openfont(char *fname, char *arg); ++static void closefont( void); ++static int getnglyphs ( void); ++static int glnames( GLYPH *glyph_list); ++static void readglyphs( GLYPH *glyph_list); ++static int glenc( GLYPH *glyph_list, int *encoding, int *unimap); ++static void fnmetrics( struct font_metrics *fm); ++static void glpath( int glyphno, GLYPH *glyph_list); ++static void kerning( GLYPH *glyph_list); ++ ++/* globals */ ++ ++/* front-end descriptor */ ++struct frontsw bdf_sw = { ++ /*name*/ "bdf", ++ /*descr*/ "BDF bitmapped fonts", ++ /*suffix*/ { "bdf" }, ++ /*open*/ openfont, ++ /*close*/ closefont, ++ /*nglyphs*/ getnglyphs, ++ /*glnames*/ glnames, ++ /*glmetrics*/ readglyphs, ++ /*glenc*/ glenc, ++ /*fnmetrics*/ fnmetrics, ++ /*glpath*/ glpath, ++ /*kerning*/ kerning, ++}; ++ ++/* statics */ ++ ++#define MAXLINE 10240 /* maximal line length in the input file */ ++ ++static int lineno; /* line number */ ++ ++#define GETLEN(s) s, (sizeof(s)-1) ++#define LENCMP(str, txt) strncmp(str, txt, sizeof(txt)-1) ++ ++static FILE *bdf_file; ++static int nglyphs; ++static struct font_metrics fmet; ++ ++/* many BDF fonts are of small pixel size, so we better try ++ * to scale them by an integer to keep the dimensions in ++ * whole pixels. However if the size is too big and a non- ++ * integer scaling is needed, we use the standard ttf2pt1's ++ * scaling abilities. ++ */ ++static int pixel_size; ++static int scale; ++static int scale_external; ++ ++static char *slant; ++static char xlfdname[201]; ++static char *spacing; ++static char *charset_reg; ++static char *charset_enc; ++static char *fnwidth; ++static int is_unicode = 0; ++ ++/* tempoary storage for returning data to ttf2pt1 later on request */ ++static int maxenc = 0; ++static int *fontenc; ++static GENTRY **glpaths; ++ ++static int got_glyphs = 0; ++static GLYPH *glyphs; ++static int curgl; ++ ++static int readfile(FILE *f, int (*strfunc)(int len, char *str)); ++ ++/* ++ * Read the file and parse each string with strfunc(), ++ * until strfunc() returns !=0 or the end of file happens. ++ * Returns -1 on EOF or strfunc() returning <0, else 0 ++ */ ++ ++static int ++readfile( ++ FILE *f, ++ int (*strfunc)(int len, char *str) ++) ++{ ++ static char str[MAXLINE]; /* input line, maybe should be dynamic ? */ ++ char *s; ++ int len, c, res; ++ ++ len=0; ++ while(( c=getc(f) )!=EOF) { ++ if(c=='\n') { ++ str[len]=0; ++ ++ res = strfunc(len, str); ++ lineno++; ++ if(res<0) ++ return -1; ++ else if(res!=0) ++ return 0; ++ ++ len=0; ++ } else if(len%d)\n", lineno, MAXLINE-1); ++ exit(1); ++ } ++ } ++ return -1; /* EOF */ ++} ++ ++/* ++ * Parse the header of the font file. ++ * Stop after the line CHARS is encountered. Ignore the unknown lines. ++ */ ++ ++struct line { ++ char *name; /* property name with trailing space */ ++ int namelen; /* length of the name string */ ++ enum { ++ ALLOW_REPEAT = 0x01, /* this property may be repeated in multiple lines */ ++ IS_SEEN = 0x02, /* this property has been seen already */ ++ MUST_SEE = 0x04, /* this property must be seen */ ++ IS_LAST = 0x08 /* this is the last property to be read */ ++ } flags; ++ char *fmt; /* format string for the arguments, NULL means a string arg */ ++ int nvals; /* number of values to be read by sscanf */ ++ void *vp[4]; /* pointers to values to be read */ ++}; ++ ++static struct line header[] = { ++ { GETLEN("FONT "), 0, " %200s", 1, {&xlfdname} }, ++ { GETLEN("SIZE "), MUST_SEE, " %d", 1, {&pixel_size} }, ++ { GETLEN("FONTBOUNDINGBOX "), MUST_SEE, " %hd %hd %hd %hd", 4, ++ {&fmet.bbox[2], &fmet.bbox[3], &fmet.bbox[0], &fmet.bbox[1]} }, ++ { GETLEN("FAMILY_NAME "), MUST_SEE, NULL, 1, {&fmet.name_family} }, ++ { GETLEN("WEIGHT_NAME "), MUST_SEE, NULL, 1, {&fmet.name_style} }, ++ { GETLEN("COPYRIGHT "), 0, NULL, 1, {&fmet.name_copyright} }, ++ { GETLEN("SLANT "), MUST_SEE, NULL, 1, {&slant} }, ++ { GETLEN("SPACING "), 0, NULL, 1, {&spacing} }, ++ { GETLEN("SETWIDTH_NAME "), 0, NULL, 1, {&fnwidth} }, ++ { GETLEN("CHARSET_REGISTRY "), 0, NULL, 1, {&charset_reg} }, ++ { GETLEN("CHARSET_ENCODING "), 0, NULL, 1, {&charset_enc} }, ++ { GETLEN("FONT_ASCENT "), 0, " %hd", 1, {&fmet.ascender} }, ++ { GETLEN("FONT_DESCENT "), 0, " %hd", 1, {&fmet.descender} }, ++ ++ /* these 2 must go in this order for post-processing */ ++ { GETLEN("UNDERLINE_THICKNESS "), 0, " %hd", 1, {&fmet.underline_thickness} }, ++ { GETLEN("UNDERLINE_POSITION "), 0, " %hd", 1, {&fmet.underline_position} }, ++ ++ { GETLEN("CHARS "), MUST_SEE|IS_LAST, " %d", 1, {&nglyphs} }, ++ { NULL, 0, 0 } /* end mark: name==NULL */ ++}; ++ ++static int ++handle_header( ++ int len, ++ char *str ++) ++{ ++ struct line *cl; ++ char *s, *p; ++ int c; ++ ++#if 0 ++ fprintf(stderr, "line: %s\n", str); ++#endif ++ for(cl = header; cl->name != 0; cl++) { ++ if(strncmp(str, cl->name, cl->namelen)) ++ continue; ++#if 0 ++ fprintf(stderr, "match: %s\n", cl->name); ++#endif ++ if(cl->flags & IS_SEEN) { ++ if(cl->flags & ALLOW_REPEAT) ++ continue; ++ ++ fprintf(stderr, "**** input line %d redefines the property %s\n", lineno, cl->name); ++ exit(1); ++ } ++ cl->flags |= IS_SEEN; ++ if(cl->fmt == 0) { ++ s = malloc(len - cl->namelen + 1); ++ if(s == 0) { ++ fprintf (stderr, "****malloc failed %s line %d\n", __FILE__, __LINE__); ++ exit(255); ++ } ++ *((char **)(cl->vp[0])) = s; ++ ++ /* skip until a quote */ ++ for(p = str+cl->namelen; (c = *p)!=0; p++) { ++ if(c == '"') { ++ p++; ++ break; ++ } ++ } ++ for(; (c = *p)!=0; p++) { ++ if(c == '"') { ++ c = *++p; ++ if(c == '"') ++ *s++ = c; ++ else ++ break; ++ } else ++ *s++ = c; ++ } ++ *s = 0; /* end of line */ ++ } else { ++ c = sscanf(str+cl->namelen, cl->fmt, cl->vp[0], cl->vp[1], cl->vp[2], cl->vp[3]); ++ if(c != cl->nvals) { ++ fprintf(stderr, "**** property %s at input line %d must have %d arguments\n", ++ cl->name, lineno, cl->nvals); ++ exit(1); ++ } ++ } ++ if(cl->flags & IS_LAST) ++ return 1; ++ else ++ return 0; ++ } ++ return 0; ++} ++ ++/* ++ * Parse the description of the glyphs ++ */ ++ ++static int ++handle_glyphs( ++ int len, ++ char *str ++) ++{ ++ static int inbmap=0; ++ static char *bmap; ++ static int xsz, ysz, xoff, yoff; ++ static int curln; ++ int i, c; ++ char *p, *plim, *psz; ++ ++ if(!LENCMP(str, "ENDFONT")) { ++ if(curgl < nglyphs) { ++ fprintf(stderr, "**** unexpected end of font file after %d glyphs\n", curgl); ++ exit(1); ++ } else ++ return 1; ++ } ++ if(curgl >= nglyphs) { ++ fprintf(stderr, "**** file contains more glyphs than advertised (%d)\n", nglyphs); ++ exit(1); ++ } ++ if(!LENCMP(str, "STARTCHAR")) { ++ /* sizeof will count \0 instead of ' ' */ ++ for(i=sizeof("STARTCHAR"); str[i] == ' '; i++) ++ {} ++ ++ glyphs[curgl].name = strdup(str + i); ++ if(glyphs[curgl].name == 0) { ++ fprintf (stderr, "****malloc failed %s line %d\n", __FILE__, __LINE__); ++ exit(255); ++ } ++ } else if(!LENCMP(str, "ENCODING")) { ++ if(sscanf(str, "ENCODING %d", &fontenc[curgl])!=1) { ++ fprintf(stderr,"**** weird ENCODING statement at line %d\n", lineno); ++ exit(1); ++ } ++ if(fontenc[curgl] == -1) /* compatibility format */ ++ sscanf(str, "ENCODING -1 %d", &fontenc[curgl]); ++ if(fontenc[curgl] > maxenc) ++ maxenc = fontenc[curgl]; ++ } else if(!LENCMP(str, "DWIDTH")) { ++ if(sscanf(str, "DWIDTH %d %d", &xsz, &ysz)!=2) { ++ fprintf(stderr,"**** weird DWIDTH statement at line %d\n", lineno); ++ exit(1); ++ } ++ glyphs[curgl].width = xsz*scale; ++ } else if(!LENCMP(str, "BBX")) { ++ if(sscanf(str, "BBX %d %d %d %d", &xsz, &ysz, &xoff, &yoff)!=4) { ++ fprintf(stderr,"**** weird BBX statement at line %d\n", lineno); ++ exit(1); ++ } ++ bmap=malloc(xsz*ysz); ++ if(bmap==0) { ++ fprintf (stderr, "****malloc failed %s line %d\n", __FILE__, __LINE__); ++ exit(255); ++ } ++ glyphs[curgl].lsb = -xoff*scale; ++ glyphs[curgl].xMin = -xoff*scale; ++ glyphs[curgl].xMax = (xsz-xoff)*scale; ++ glyphs[curgl].yMin = -yoff*scale; ++ glyphs[curgl].yMax = (ysz-xoff)*scale; ++ } else if(!LENCMP(str, "BITMAP")) { ++ inbmap=1; ++ curln=ysz-1; /* the lowest line has index 0 */ ++ } else if(!LENCMP(str, "ENDCHAR")) { ++ inbmap=0; ++ if(bmap) { ++ glyphs[curgl].lastentry = 0; ++ glyphs[curgl].path = 0; ++ glyphs[curgl].entries = 0; ++ bmp_outline(&glyphs[curgl], scale, bmap, xsz, ysz, xoff, yoff); ++ free(bmap); ++ /* remember in a static table or it will be erased */ ++ glpaths[curgl] = glyphs[curgl].entries; ++ glyphs[curgl].entries = 0; ++ ++ if(glpaths[curgl]) ++ glyphs[curgl].ttf_pathlen = 1; ++ else ++ glyphs[curgl].ttf_pathlen = 0; ++ } ++ curgl++; ++ } else if(inbmap) { ++ if(curln<0) { ++ fprintf(stderr,"**** bitmap is longer than %d lines at line %d\n", ysz, lineno); ++ exit(1); ++ } ++ ++ i=0; ++ p=&bmap[curln*xsz]; psz=p+xsz; ++ while(ilsb = 0; ++ g->width = fmet.bbox[2]; ++ g->xMin = 0; ++ g->yMin = 0; ++ } ++ g = &glyphs[0]; ++ g->name = ".notdef"; ++ g->xMax = fmet.bbox[2]*4/5; ++ g->yMax = fmet.bbox[3]*4/5; ++ g->entries = g->path = g->lastentry = 0; ++ /* make it look as a black square */ ++ fg_rmoveto(g, 0.0, 0.0); ++ fg_rlineto(g, 0.0, (double)g->yMax); ++ fg_rlineto(g, (double)g->xMax, (double)g->yMax); ++ fg_rlineto(g, (double)g->xMax, 0.0); ++ fg_rlineto(g, 0.0, 0.0); ++ g_closepath(g); ++ glpaths[0] = g->entries; ++ g->entries = 0; ++ g->ttf_pathlen = 4; ++ ++ g = &glyphs[1]; ++ g->name = ".null"; ++ g->xMax = g->yMax = 0; ++ g->ttf_pathlen = 0; ++ ++ if(readfile(bdf_file, handle_glyphs) < 0) { ++ fprintf(stderr, "**** file does not contain the ENDFONT line\n"); ++ exit(1); ++ } ++ got_glyphs = 1; ++} ++ ++/* ++ * Open font and prepare to return information to the main driver. ++ * May print error and warning messages. ++ * Exit on error. ++ */ ++ ++static void ++openfont( ++ char *fname, ++ char *arg /* unused now */ ++) ++{ ++ struct line *cl; ++ int i, l; ++ ++ if ((bdf_file = fopen(fname, "r")) == NULL) { ++ fprintf(stderr, "**** Cannot open file '%s'\n", fname); ++ exit(1); ++ } else { ++ WARNING_2 fprintf(stderr, "Processing file %s\n", fname); ++ } ++ ++ lineno = 1; ++ ++ for(cl = header; cl->name != 0; cl++) ++ cl->flags &= ~IS_SEEN; ++ if(readfile(bdf_file, handle_header) < 0) { ++ fprintf(stderr, "**** file does not contain the CHARS definition\n"); ++ exit(1); ++ } ++ for(cl = header; cl->name != 0; cl++) { ++ if( (cl->flags & MUST_SEE) && !(cl->flags & IS_SEEN) ) { ++ fprintf(stderr, "**** mandatory property %sis not found in the input line\n", ++ cl->name); /* cl->name has a space at the end */ ++ exit(1); ++ } ++ ++ /* set a few defaults */ ++ if( !(cl->flags & IS_SEEN) ) { ++ if(cl->vp[0] == &fmet.underline_thickness) { ++ fmet.underline_thickness = 1; ++ } else if(cl->vp[0] == &fmet.underline_position) { ++ fmet.underline_position = fmet.bbox[1] + fmet.underline_thickness ++ - (pixel_size - fmet.bbox[3]); ++ } else if(cl->vp[0] == &fmet.ascender) { ++ fmet.ascender = fmet.bbox[2] + fmet.bbox[0]; ++ } else if(cl->vp[0] == &fmet.descender) { ++ fmet.descender = fmet.bbox[0]; ++ } ++ } ++ } ++ ++ nglyphs += 2; /* add empty glyph and .notdef */ ++ ++ /* postprocessing to compensate for the differences in the metric formats */ ++ fmet.bbox[2] += fmet.bbox[0]; ++ fmet.bbox[3] += fmet.bbox[1]; ++ ++ scale = 1000/pixel_size; /* XXX ? */ ++ if(scale*pixel_size < 950) { ++ scale = 1; ++ scale_external = 1; ++ fmet.units_per_em = pixel_size; ++ } else { ++ scale_external = 0; ++ fmet.units_per_em = scale*pixel_size; ++ ++ fmet.underline_position *= scale; ++ fmet.underline_thickness *= scale; ++ fmet.ascender *= scale; ++ fmet.descender *= scale; ++ for(i=0; i<4; i++) ++ fmet.bbox[i] *= scale; ++ } ++ ++ fmet.italic_angle = 0.0; ++ if(spacing == 0 /* possibly an old font */ ++ || toupper(spacing[0]) != 'P') /* or anything non-proportional */ ++ fmet.is_fixed_pitch = 1; ++ else ++ fmet.is_fixed_pitch = 0; ++ ++ if(fmet.name_copyright==NULL) ++ fmet.name_copyright = ""; ++ ++ /* create the full name */ ++ l = strlen(fmet.name_family) ++ + (fmet.name_style? strlen(fmet.name_style) : 0) ++ + (fnwidth? strlen(fnwidth) : 0) ++ + strlen("Oblique") + 1; ++ ++ if(( fmet.name_full = malloc(l) )==NULL) { ++ fprintf (stderr, "****malloc failed %s line %d\n", __FILE__, __LINE__); ++ exit(255); ++ } ++ strcpy(fmet.name_full, fmet.name_family); ++ if(fnwidth && strcmp(fnwidth, "Normal")) { ++ strcat(fmet.name_full, fnwidth); ++ } ++ if(fmet.name_style && strcmp(fmet.name_style, "Medium")) { ++ strcat(fmet.name_full, fmet.name_style); ++ } ++ switch(toupper(slant[0])) { ++ case 'O': ++ strcat(fmet.name_full, "Oblique"); ++ break; ++ case 'I': ++ strcat(fmet.name_full, "Italic"); ++ break; ++ } ++ ++ fmet.name_ps = fmet.name_full; ++ fmet.name_version = "1.0"; ++ ++ if(charset_reg && charset_enc ++ && !strcmp(charset_reg, "iso10646") && !strcmp(charset_enc, "1")) ++ is_unicode = 1; ++ ++ if(( fontenc = calloc(nglyphs, sizeof *fontenc) )==NULL) { ++ fprintf (stderr, "****malloc failed %s line %d\n", __FILE__, __LINE__); ++ exit(255); ++ } ++ for(i=0; i=0 && e 255) ++ return 2; ++ else ++ return 0; ++} ++ ++/* ++ * Get the font metrics ++ */ ++static void ++fnmetrics( ++ struct font_metrics *fm ++) ++{ ++ *fm = fmet; ++} ++ ++/* ++ * Get the path of contrours for a glyph. ++ */ ++ ++static void ++glpath( ++ int glyphno, ++ GLYPH *glyf_list ++) ++{ ++ readglyphs(glyf_list); ++ glyf_list[glyphno].entries = glpaths[glyphno]; ++ glpaths[glyphno] = 0; ++} ++ ++/* ++ * Get the kerning data. ++ */ ++ ++static void ++kerning( ++ GLYPH *glyph_list ++) ++{ ++ return; /* no kerning in BDF */ ++} +diff -ruN xserver-old/hw/xprint/extras/ttf2pt1/bitmap.c xserver/hw/xprint/extras/ttf2pt1/bitmap.c +--- xserver-old/hw/xprint/extras/ttf2pt1/bitmap.c 1970-01-01 10:00:00.000000000 +1000 ++++ xserver/hw/xprint/extras/ttf2pt1/bitmap.c 2006-06-27 13:10:26.000000000 +1000 +@@ -0,0 +1,2633 @@ ++/* ++ * Handling of the bitmapped glyphs ++ * ++ * Copyright (c) 2001 by the TTF2PT1 project ++ * Copyright (c) 2001 by Sergey Babkin ++ * ++ * see COPYRIGHT for the full copyright notice ++ */ ++ ++#include ++#include ++#include ++#include "pt1.h" ++#include "global.h" ++ ++/* possible values of limits */ ++#define L_NONE 0 /* nothing here */ ++#define L_ON 1 /* black is on up/right */ ++#define L_OFF 2 /* black is on down/left */ ++ ++static int warnedhints = 0; ++ ++ ++#ifdef USE_AUTOTRACE ++#include ++ ++/* ++ * Produce an autotraced outline from a bitmap. ++ * scale - factor to scale the sizes ++ * bmap - array of dots by lines, xsz * ysz ++ * xoff, yoff - offset of the bitmap's lower left corner ++ * from the logical position (0,0) ++ */ ++ ++static void ++autotraced_bmp_outline( ++ GLYPH *g, ++ int scale, ++ char *bmap, ++ int xsz, ++ int ysz, ++ int xoff, ++ int yoff ++) ++{ ++ at_bitmap_type atb; ++ at_splines_type *atsp; ++ at_fitting_opts_type *atoptsp; ++ at_spline_list_type *slp; ++ at_spline_type *sp; ++ int i, j, k; ++ double lastx, lasty; ++ double fscale; ++ char *xbmap; ++ ++ fscale = (double)scale; ++ ++ /* provide a white margin around the bitmap */ ++ xbmap = malloc((ysz+2)*(xsz+2)); ++ if(xbmap == 0) { ++ fprintf (stderr, "****malloc failed %s line %d\n", __FILE__, __LINE__); ++ exit(255); ++ } ++ memset(xbmap, 0, xsz+2); /* top margin */ ++ for(i=0, j=xsz+2; ilength; i++) { ++ slp = &atsp->data[i]; ++#if 0 ++ fprintf(stderr, "%s: contour %d: %d entries clockwise=%d color=%02X%02X%02X\n", ++ g->name, i, slp->length, slp->clockwise, slp->color.r, slp->color.g, slp->color.b); ++#endif ++ if(slp->length == 0) ++ continue; ++#if 0 ++ if(slp->color.r + slp->color.g + slp->color.b == 0) ++ continue; ++#endif ++ fg_rmoveto(g, fscale*(slp->data[0].v[0].x+xoff), fscale*(slp->data[0].v[0].y+yoff)); ++ for(j=0; jlength; j++) { ++#if 0 ++ fprintf(stderr, " "); ++ for(k=0; k<4; k++) ++ fprintf(stderr, "(%g %g) ", ++ fscale*(slp->data[j].v[k].x+xoff), ++ fscale*(ysz-slp->data[j].v[k].y+yoff) ++ ); ++ fprintf(stderr, "\n"); ++#endif ++ fg_rrcurveto(g, ++ fscale*(slp->data[j].v[1].x+xoff), fscale*(slp->data[j].v[1].y+yoff), ++ fscale*(slp->data[j].v[2].x+xoff), fscale*(slp->data[j].v[2].y+yoff), ++ fscale*(slp->data[j].v[3].x+xoff), fscale*(slp->data[j].v[3].y+yoff) ); ++ } ++ g_closepath(g); ++ } ++ ++ at_splines_free(atsp); ++ at_fitting_opts_free(atoptsp); ++ free(xbmap); ++} ++ ++#endif /*USE_AUTOTRACE*/ ++ ++/* an extension of gentry for description of the fragments */ ++typedef struct gex_frag GEX_FRAG; ++struct gex_frag { ++ /* indexes to len, the exact values and order are important */ ++#define GEXFI_NONE -1 ++#define GEXFI_CONVEX 0 ++#define GEXFI_CONCAVE 1 ++#define GEXFI_LINE 2 /* a line with steps varying by +-1 pixel */ ++#define GEXFI_EXACTLINE 3 /* a line with exactly the same steps */ ++#define GEXFI_SERIF 4 /* small serifs at the ends of stemsi - must be last */ ++#define GEXFI_COUNT 5 /* maximal index + 1 */ ++ unsigned short len[GEXFI_COUNT]; /* length of various fragment types starting here */ ++ unsigned short lenback[GEXFI_COUNT]; /* length back to the start of curve */ ++ ++ signed char ixstart; /* index of the frag type that starts here */ ++ signed char ixcont; /* index of the frag type that continues here */ ++ ++ short flags; ++#define GEXFF_HLINE 0x0001 /* the exact line is longer in "horizontal" dimension */ ++#define GEXFF_EXTR 0x0002 /* this gentry is an extremum in some direction */ ++#define GEXFF_CIRC 0x0004 /* the joint at this gentry is for a circular curve */ ++#define GEXFF_DRAWCURVE 0x0008 /* vect[] describes a curve to draw */ ++#define GEXFF_DRAWLINE 0x0010 /* vect[] describes a line to draw */ ++#define GEXFF_SPLIT 0x0020 /* is a result of splitting a line */ ++#define GEXFF_SYMNEXT 0x0040 /* this subfrag is symmetric with next one */ ++#define GEXFF_DONE 0x0080 /* this subfrag has been vectorized */ ++#define GEXFF_LONG 0x0100 /* this gentry is longer than 1 pixel */ ++ ++ unsigned short aidx; /* index of gentry in the array representing the contour */ ++ ++ unsigned short vectlen; /* number of gentries represented by vect[] */ ++ ++ /* coordinates for vectored replacement of this fragment */ ++ /* (already scaled because it's needed for curve approximation) */ ++ double vect[4 /*ref.points*/][2 /*X,Y*/]; ++ ++ double bbox[2 /*X,Y*/]; /* absolute sizes of bounding box of a subfragment */ ++ ++ /* used when splitting the curved frags into subfrags */ ++ GENTRY *prevsub; /* to gentries describing neighboring subfrags */ ++ GENTRY *nextsub; ++ GENTRY *ordersub; /* single-linked list describing the order of calculation */ ++ ++ int sublen; /* length of this subfrag */ ++ /* the symmetry across the subfrags */ ++ int symaxis; /* the symmetry axis, with next subfrag */ ++ int symxlen; /* min length of adjacent symmetric frags */ ++ /* the symmetry within this subfrag (the axis is always diagonal) */ ++ GENTRY *symge; /* symge->i{x,y}3 is the symmetry point of symge==0 if none */ ++ ++}; ++#define X_FRAG(ge) ((GEX_FRAG *)((ge)->ext)) ++ ++/* various interesting tables related to GEX_FRAG */ ++static char *gxf_name[GEXFI_COUNT] = {"Convex", "Concave", "Line", "ExLine", "Serif"}; ++static int gxf_cvk[2] = {-1, 1}; /* coefficients of concaveness */ ++ ++/* ++ * Dump the contents of X_EXT()->len and ->lenback for a contour ++ */ ++static void ++gex_dump_contour( ++ GENTRY *ge, ++ int clen ++) ++{ ++ int i, j; ++ ++ for(j = 0; j < GEXFI_COUNT; j++) { ++ fprintf(stderr, "%-8s", gxf_name[j]); ++ for(i = 0; i < clen; i++, ge = ge->frwd) ++ fprintf(stderr, " %2d", X_FRAG(ge)->len[j]); ++ fprintf(stderr, " %p\n (back) ", ge); ++ for(i = 0; i < clen; i++, ge = ge->frwd) ++ fprintf(stderr, " %2d", X_FRAG(ge)->lenback[j]); ++ fprintf(stderr, "\n"); ++ } ++} ++ ++/* ++ * Calculate values of X_EXT()->lenback[] for all entries in ++ * a contour. The contour is identified by: ++ * ge - any gentry of the contour ++ * clen - contour length ++ */ ++ ++static void ++gex_calc_lenback( ++ GENTRY *ge, ++ int clen ++) ++{ ++ int i, j; ++ int end; ++ GEX_FRAG *f; ++ int len[GEXFI_COUNT]; /* length of the most recent fragment */ ++ int count[GEXFI_COUNT]; /* steps since beginning of the fragment */ ++ ++ for(j = 0; j < GEXFI_COUNT; j++) ++ len[j] = count[j] = 0; ++ ++ end = clen; ++ for(i = 0; i < end; i++, ge = ge->frwd) { ++ f = X_FRAG(ge); ++ for(j = 0; j < GEXFI_COUNT; j++) { ++ if(len[j] != count[j]) { ++ f->lenback[j] = count[j]++; ++ } else ++ f->lenback[j] = 0; ++ if(f->len[j] != 0) { ++ len[j] = f->len[j]; ++ count[j] = 1; /* start with the next gentry */ ++ /* if the fragment will wrap over the start, process to its end */ ++ if(i < clen && i + len[j] > end) ++ end = i + len[j]; ++ } ++ } ++ } ++ gex_dump_contour(ge, clen); ++} ++ ++/* Limit a curve to not exceed the given coordinates ++ * at its given side ++ */ ++ ++static void ++limcurve( ++ double curve[4][2 /*X,Y*/], ++ double lim[2 /*X,Y*/], ++ int where /* 0 - start, 3 - end */ ++) ++{ ++ int other = 3-where; /* the other end */ ++ int sgn[2 /*X,Y*/]; /* sign for comparison */ ++ double t, from, to, nt, t2, nt2, tt[4]; ++ double val[2 /*X,Y*/]; ++ int i; ++ ++ for(i=0; i<2; i++) ++ sgn[i] = fsign(curve[other][i] - curve[where][i]); ++ ++#if 0 ++ fprintf(stderr, " limit (%g,%g)-(%g,%g) at %d by (%g,%g), sgn(%d,%d)\n", ++ curve[0][0], curve[0][1], curve[3][0], curve[3][1], ++ where, lim[0], lim[1], sgn[0], sgn[1]); ++#endif ++ /* a common special case */ ++ if( sgn[0]*(curve[where][0] - lim[0]) >= 0. ++ && sgn[1]*(curve[where][1] - lim[1]) >= 0. ) ++ return; /* nothing to do */ ++ ++ if(other==0) { ++ from = 0.; ++ to = 1.; ++ } else { ++ from = 1.; ++ to = 0.; ++ } ++#if 0 ++ fprintf(stderr, "t="); ++#endif ++ while( fabs(from-to) > 0.00001 ) { ++ t = 0.5 * (from+to); ++ t2 = t*t; ++ nt = 1.-t; ++ nt2 = nt*nt; ++ tt[0] = nt2*nt; ++ tt[1] = 3*nt2*t; ++ tt[2] = 3*nt*t2; ++ tt[3] = t*t2; ++ for(i=0; i<2; i++) ++ val[i] = curve[0][i]*tt[0] + curve[1][i]*tt[1] ++ + curve[2][i]*tt[2] + curve[3][i]*tt[3]; ++#if 0 ++ fprintf(stderr, "%g(%g,%g) ", t, val[0], val[1]); ++#endif ++ if(fabs(val[0] - lim[0]) < 0.1 ++ || fabs(val[1] - lim[1]) < 0.1) ++ break; ++ ++ if(sgn[0] * (val[0] - lim[0]) < 0. ++ || sgn[1] * (val[1] - lim[1]) < 0.) ++ to = t; ++ else ++ from = t; ++ } ++ /* now t is the point of splitting */ ++#define SPLIT(pt1, pt2) ( (pt1) + t*((pt2)-(pt1)) ) /* order is important! */ ++ for(i=0; i<2; i++) { ++ double v11, v12, v13, v21, v22, v31; /* intermediate points */ ++ ++ v11 = SPLIT(curve[0][i], curve[1][i]); ++ v12 = SPLIT(curve[1][i], curve[2][i]); ++ v13 = SPLIT(curve[2][i], curve[3][i]); ++ v21 = SPLIT(v11, v12); ++ v22 = SPLIT(v12, v13); ++ v31 = SPLIT(v21, v22); ++ if(other==0) { ++ curve[1][i] = v11; ++ curve[2][i] = v21; ++ curve[3][i] = fabs(v31 - lim[i]) < 0.1 ? lim[i] : v31; ++ } else { ++ curve[0][i] = fabs(v31 - lim[i]) < 0.1 ? lim[i] : v31; ++ curve[1][i] = v22; ++ curve[2][i] = v13; ++ } ++ } ++#undef SPLIT ++#if 0 ++ fprintf(stderr, "\n"); ++#endif ++} ++ ++/* ++ * Vectorize a subfragment of a curve fragment. All the data has been already ++ * collected by this time ++ */ ++ ++static void ++dosubfrag( ++ GLYPH *g, ++ int fti, /* fragment type index */ ++ GENTRY *firstge, /* first gentry of fragment */ ++ GENTRY *ge, /* first gentry of subfragment */ ++ double fscale ++) ++{ ++ GENTRY *gel, *gei; /* last gentry of this subfrag */ ++ GEX_FRAG *f, *ff, *lf, *pf, *xf; ++ /* maximal amount of space that can be used at the beginning and the end */ ++ double fixfront[2], fixend[2]; /* fixed points - used to show direction */ ++ double mvfront[2], mvend[2]; /* movable points */ ++ double limfront[2], limend[2]; /* limit of movement for movabel points */ ++ double sympt; ++ int outfront, outend; /* the beginning/end is going outwards */ ++ int symfront, symend; /* a ready symmetric fragment is present at front/end */ ++ int drnd[2 /*X,Y*/]; /* size of the round part */ ++ int i, j, a1, a2, ndots; ++ double avg2, max2; /* squared distances */ ++ struct dot_dist *dots, *usedots; ++ ++ ff = X_FRAG(firstge); ++ f = X_FRAG(ge); ++ gel = f->nextsub; ++ lf = X_FRAG(gel); ++ if(f->prevsub != 0) ++ pf = X_FRAG(f->prevsub); ++ else ++ pf = 0; ++ ++ for(i=0; i<2; i++) ++ drnd[i] = gel->bkwd->ipoints[i][2] - ge->ipoints[i][2]; ++ ++ if(f->prevsub==0 && f->ixcont == GEXFI_NONE) { ++ /* nothing to join with : may use the whole length */ ++ for(i = 0; i < 2; i++) ++ limfront[i] = ge->bkwd->ipoints[i][2]; ++ } else { ++ /* limit to a half */ ++ for(i = 0; i < 2; i++) ++ limfront[i] = 0.5 * (ge->ipoints[i][2] + ge->bkwd->ipoints[i][2]); ++ } ++ if( (ge->ix3 == ge->bkwd->ix3) /* vert */ ++ ^ (isign(ge->bkwd->ix3 - ge->frwd->ix3)==isign(ge->bkwd->iy3 - ge->frwd->iy3)) ++ ^ (fti == GEXFI_CONCAVE) /* counter-clockwise */ ) { ++ /* the beginning is not a flat 90-degree end */ ++ outfront = 1; ++ for(i = 0; i < 2; i++) ++ fixfront[i] = ge->frwd->ipoints[i][2]; ++ } else { ++ outfront = 0; ++ for(i = 0; i < 2; i++) ++ fixfront[i] = ge->ipoints[i][2]; ++ } ++ ++ if(lf->nextsub==0 && lf->ixstart == GEXFI_NONE) { ++ /* nothing to join with : may use the whole length */ ++ for(i = 0; i < 2; i++) ++ limend[i] = gel->ipoints[i][2]; ++ } else { ++ /* limit to a half */ ++ for(i = 0; i < 2; i++) ++ limend[i] = 0.5 * (gel->ipoints[i][2] + gel->bkwd->ipoints[i][2]); ++ } ++ gei = gel->bkwd->bkwd; ++ if( (gel->ix3 == gel->bkwd->ix3) /* vert */ ++ ^ (isign(gel->ix3 - gei->ix3)==isign(gel->iy3 - gei->iy3)) ++ ^ (fti == GEXFI_CONVEX) /* clockwise */ ) { ++ /* the end is not a flat 90-degree end */ ++ outend = 1; ++ for(i = 0; i < 2; i++) ++ fixend[i] = gel->bkwd->bkwd->ipoints[i][2]; ++ } else { ++ outend = 0; ++ for(i = 0; i < 2; i++) ++ fixend[i] = gel->bkwd->ipoints[i][2]; ++ } ++ ++ for(i = 0; i < 2; i++) { ++ fixfront[i] *= fscale; ++ limfront[i] *= fscale; ++ fixend[i] *= fscale; ++ limend[i] *= fscale; ++ } ++ ++ fprintf(stderr, " %d out(%d[%d %d %d],%d[%d %d %d]) drnd(%d, %d)\n", ++ fti, ++ outfront, ++ (ge->ix3 == ge->bkwd->ix3), ++ (isign(ge->bkwd->ix3 - ge->frwd->ix3)==isign(ge->bkwd->iy3 - ge->frwd->iy3)), ++ (fti == GEXFI_CONCAVE), ++ outend, ++ (gel->ix3 == gel->bkwd->ix3), ++ (isign(gel->ix3 - gei->ix3)==isign(gel->iy3 - gei->iy3)), ++ (fti == GEXFI_CONVEX), ++ drnd[0], drnd[1]); ++ ++ /* prepare to calculate the distances */ ++ ndots = f->sublen - 1; ++ dots = malloc(sizeof(*dots) * ndots); ++ if(dots == 0) { ++ fprintf (stderr, "****malloc failed %s line %d\n", __FILE__, __LINE__); ++ exit(255); ++ } ++ for(i = 0, gei = ge; i < ndots; i++, gei = gei->frwd) { ++ for(a1 = 0; a1 < 2; a1++) ++ dots[i].p[a1] = fscale * gei->ipoints[a1][2]; ++ } ++ ++ /* see if we can mirror a ready symmetric curve */ ++ ++ /* check symmetry with the fragment before this */ ++ symfront = (pf != 0 && (pf->flags & GEXFF_SYMNEXT) && (pf->flags & GEXFF_DONE) ++ && ( outend && f->sublen <= pf->sublen ++ || ( pf->sublen == f->sublen ++ && (lf->sublen == 0 ++ || ( abs(limfront[0]-limend[0]) >= abs(pf->vect[0][0]-pf->vect[3][0]) ++ && abs(limfront[1]-limend[1]) >= abs(pf->vect[0][1]-pf->vect[3][1]) )) ++ ) ++ ) ++ ); ++ /* check symmetry with the fragment after this */ ++ symend = ( (f->flags & GEXFF_SYMNEXT) && (lf->flags & GEXFF_DONE) ++ && ( outfront && f->sublen <= lf->sublen ++ || ( lf->sublen == f->sublen ++ && (pf == 0 ++ || ( abs(limfront[0]-limend[0]) >= abs(lf->vect[0][0]-lf->vect[3][0]) ++ && abs(limfront[1]-limend[1]) >= abs(lf->vect[0][1]-lf->vect[3][1]) )) ++ ) ++ ) ++ ); ++ if(symfront || symend) { ++ /* mirror the symmetric neighbour subfrag */ ++ if(symfront) { ++ a1 = (ge->ix3 != ge->bkwd->ix3); /* the symmetry axis */ ++ a2 = !a1; /* the other axis (goes along the extremum gentry) */ ++ ++ /* the symmetry point on a2 */ ++ sympt = fscale * 0.5 * (ge->ipoints[a2][2] + ge->bkwd->ipoints[a2][2]); ++ xf = pf; /* the symmetric fragment */ ++ } else { ++ a1 = (gel->ix3 != gel->bkwd->ix3); /* the symmetry axis */ ++ a2 = !a1; /* the other axis (goes along the extremum gentry) */ ++ ++ /* the symmetry point on a2 */ ++ sympt = fscale * 0.5 * (gel->ipoints[a2][2] + gel->bkwd->ipoints[a2][2]); ++ xf = lf; /* the symmetric fragment */ ++ } ++ fprintf(stderr, " sym with %p f=%d(%p) e=%d(%p) a1=%c a2=%c sympt=%g\n", ++ xf, symfront, pf, symend, lf, ++ a1 ? 'Y': 'X', a2 ? 'Y': 'X', sympt ++ ); ++ for(i=0; i<4; i++) { ++ f->vect[3-i][a1] = xf->vect[i][a1]; ++ f->vect[3-i][a2] = sympt - (xf->vect[i][a2]-sympt); ++ } ++ if(symfront) { ++ if(outend || lf->sublen==0) ++ limcurve(f->vect, limend, 3); ++ } else { ++ if(outfront || pf == 0) ++ limcurve(f->vect, limfront, 0); ++ } ++ avg2 = fdotcurvdist2(f->vect, dots, ndots, &max2); ++ fprintf(stderr, " avg=%g max=%g fscale=%g\n", sqrt(avg2), sqrt(max2), fscale); ++ if(max2 <= fscale*fscale) { ++ f->flags |= (GEXFF_DONE | GEXFF_DRAWCURVE); ++ f->vectlen = f->sublen; ++ free(dots); ++ return; ++ } ++ } ++ ++ if( !outfront && !outend && f->symge != 0) { ++ /* a special case: try a circle segment as an approximation */ ++ double lenfront, lenend, len, maxlen; ++ ++ /* coefficient for a Bezier approximation of a circle */ ++#define CIRCLE_FRAC 0.55 ++ ++ a1 = (ge->ix3 == ge->bkwd->ix3); /* get the axis along the front */ ++ a2 = !a1; /* axis along the end */ ++ ++ lenfront = fixfront[a1] - limfront[a1]; ++ lenend = fixend[a2] - limend[a2]; ++ if(fabs(lenfront) < fabs(lenend)) ++ len = fabs(lenfront); ++ else ++ len = fabs(lenend); ++ ++ /* make it go close to the round shape */ ++ switch(f->sublen) { ++ case 2: ++ maxlen = fscale; ++ break; ++ case 4: ++ case 6: ++ maxlen = fscale * 2.; ++ break; ++ default: ++ maxlen = fscale * abs(ge->frwd->frwd->ipoints[a1][2] ++ - ge->ipoints[a1][2]); ++ break; ++ } ++ if(len > maxlen) ++ len = maxlen; ++ ++ mvfront[a1] = fixfront[a1] - fsign(lenfront) * len; ++ mvfront[a2] = limfront[a2]; ++ mvend[a2] = fixend[a2] - fsign(lenend) * len; ++ mvend[a1] = limend[a1]; ++ ++ for(i=0; i<2; i++) { ++ f->vect[0][i] = mvfront[i]; ++ f->vect[3][i] = mvend[i]; ++ } ++ f->vect[1][a1] = mvfront[a1] + CIRCLE_FRAC*(mvend[a1]-mvfront[a1]); ++ f->vect[1][a2] = mvfront[a2]; ++ f->vect[2][a1] = mvend[a1]; ++ f->vect[2][a2] = mvend[a2] + CIRCLE_FRAC*(mvfront[a2]-mvend[a2]); ++ ++ avg2 = fdotcurvdist2(f->vect, dots, ndots, &max2); ++ fprintf(stderr, " avg=%g max=%g fscale=%g\n", sqrt(avg2), sqrt(max2), fscale); ++ if(max2 <= fscale*fscale) { ++ f->flags |= (GEXFF_DONE | GEXFF_DRAWCURVE); ++ f->vectlen = f->sublen; ++ free(dots); ++ return; ++ } ++#undef CIRCLE_FRAC ++ } ++ for(i=0; i<2; i++) { ++ f->vect[0][i] = limfront[i]; ++ f->vect[1][i] = fixfront[i]; ++ f->vect[2][i] = fixend[i]; ++ f->vect[3][i] = limend[i]; ++ } ++ usedots = dots; ++ if(outfront) { ++ usedots++; ndots--; ++ } ++ if(outend) ++ ndots--; ++ if( fcrossrayscv(f->vect, NULL, NULL) == 0) { ++ fprintf(stderr, "**** Internal error: rays must cross but don't at %p-%p\n", ++ ge, gel); ++ fprintf(stderr, " (%g, %g) (%g, %g) (%g, %g) (%g, %g)\n", ++ limfront[0], limfront[1], ++ fixfront[0], fixfront[1], ++ fixend[0], fixend[1], ++ limend[0], limend[1] ++ ); ++ dumppaths(g, NULL, NULL); ++ exit(1); ++ } else { ++ if(ndots != 0) ++ fapproxcurve(f->vect, usedots, ndots); ++ f->flags |= (GEXFF_DONE | GEXFF_DRAWCURVE); ++ f->vectlen = f->sublen; ++ } ++ free(dots); ++} ++ ++/* ++ * Subtract a list of gentries (covered by a fragment of higher ++ * priority) from the set of fragments of a given ++ * type. ++ * ++ * An example is subtraction of the long exact line fragments ++ * from the curve fragments which get overridden. ++ */ ++ ++static void ++frag_subtract( ++ GLYPH *g, ++ GENTRY **age, /* array of gentries for this contour */ ++ int clen, /* length of the contour */ ++ GENTRY *ge, /* first gentry to be subtracted */ ++ int slen, /* number of gentries in the list to be subtracted */ ++ int d /* type of fragments from which to subtract, as in GEXFI_... */ ++) ++{ ++ GENTRY *pge; ++ GEX_FRAG *f, *pf; ++ int len, i, j; ++ ++ f = X_FRAG(ge); ++ len = slen; ++ ++ /* check if we overlap the end of some fragment */ ++ if(f->lenback[d]) { ++ /* chop off the end of conflicting fragment */ ++ len = f->lenback[d]; ++ pge = age[(f->aidx + clen - len)%clen]; ++ pf = X_FRAG(pge); ++ if(pf->len[d] == clen+1 && pf->flags & GEXFF_CIRC) { ++ /* the conflicting fragment is self-connected */ ++ ++ pf->len[d] = 0; ++ /* calculate the new value for lenback */ ++ len = clen+1 - slen; ++ for(pge = ge; len > 0; pge = pge->bkwd, len--) ++ X_FRAG(pge)->lenback[d] = len; ++ /* now pge points to the last entry of the line, ++ * which is also the new first entry of the curve ++ */ ++ X_FRAG(pge)->len[d] = clen+2 - slen; ++ /* clean lenback of gentries covered by the line */ ++ for(pge = ge->frwd, j = slen-1; j > 0; pge = pge->frwd, j--) ++ X_FRAG(pge)->lenback[d] = 0; ++ fprintf(stderr, " cut %s circular frag to %p-%p\n", ++ gxf_name[d], pge, ge); ++ gex_dump_contour(ge, clen); ++ } else { ++ /* when we chop off a piece of fragment, we leave the remaining ++ * piece(s) overlapping with the beginning and possibly the end ++ * of the line fragment under consideration ++ */ ++ fprintf(stderr, " cut %s frag at %p from len=%d to len=%d (end %p)\n", ++ gxf_name[d], pge, pf->len[d], len+1, ge); ++ j = pf->len[d] - len - 1; /* how many gentries are chopped off */ ++ pf->len[d] = len + 1; ++ i = slen - 1; ++ for(pge = ge->frwd; j > 0 && i > 0; j--, i--, pge = pge->frwd) ++ X_FRAG(pge)->lenback[d] = 0; ++ gex_dump_contour(ge, clen); ++ ++ if(j != 0) { ++ /* the conflicting fragment is split in two by this line ++ * fragment, fix up its tail ++ */ ++ ++ fprintf(stderr, " end of %s frag len=%d %p-", ++ gxf_name[d], j+1, pge->bkwd); ++ X_FRAG(pge->bkwd)->len[d] = j+1; /* the overlapping */ ++ for(i = 1; j > 0; j--, i++, pge = pge->frwd) ++ X_FRAG(pge)->lenback[d] = i; ++ fprintf(stderr, "%p\n", pge->bkwd); ++ gex_dump_contour(ge, clen); ++ } ++ } ++ } ++ /* check if we overlap the beginning of some fragments */ ++ i = slen-1; /* getntries remaining to consider */ ++ j = 0; /* gentries remaining in the overlapping fragment */ ++ for(pge = ge; i > 0; i--, pge = pge->frwd) { ++ if(j > 0) { ++ X_FRAG(pge)->lenback[d] = 0; ++ j--; ++ } ++ /* the beginning of one fragment may be the end of another ++ * fragment, in this case if j-- above results in 0, that will ++ * cause it to check the same gentry for the beginning ++ */ ++ if(j == 0) { ++ pf = X_FRAG(pge); ++ j = pf->len[d]; ++ if(j != 0) { ++ fprintf(stderr, " removed %s frag at %p len=%d\n", ++ gxf_name[d], pge, j); ++ gex_dump_contour(ge, clen); ++ pf->len[d] = 0; ++ j--; ++ } ++ } ++ } ++ /* pge points at the last gentry of the line fragment */ ++ if(j > 1) { /* we have the tail of a fragment left */ ++ fprintf(stderr, " end of %s frag len=%d %p-", ++ gxf_name[d], j, pge); ++ X_FRAG(pge)->len[d] = j; /* the overlapping */ ++ for(i = 0; j > 0; j--, i++, pge = pge->frwd) ++ X_FRAG(pge)->lenback[d] = i; ++ fprintf(stderr, "%p\n", pge->bkwd); ++ gex_dump_contour(ge, clen); ++ } else if(j == 1) { ++ X_FRAG(pge)->lenback[d] = 0; ++ } ++} ++ ++/* ++ * Produce an outline from a bitmap. ++ * scale - factor to scale the sizes ++ * bmap - array of dots by lines, xsz * ysz ++ * xoff, yoff - offset of the bitmap's lower left corner ++ * from the logical position (0,0) ++ */ ++ ++void ++bmp_outline( ++ GLYPH *g, ++ int scale, ++ char *bmap, ++ int xsz, ++ int ysz, ++ int xoff, ++ int yoff ++) ++{ ++ char *hlm, *vlm; /* arrays of the limits of outlines */ ++ char *amp; /* map of ambiguous points */ ++ int x, y; ++ char *ip, *op; ++ double fscale; ++ ++ if(xsz==0 || ysz==0) ++ return; ++ ++#ifdef USE_AUTOTRACE ++ if(use_autotrace) { ++ autotraced_bmp_outline(g, scale, bmap, xsz, ysz, xoff, yoff); ++ return; ++ } ++#endif /*USE_AUTOTRACE*/ ++ ++ fscale = (double)scale; ++ g->flags &= ~GF_FLOAT; /* build it as int first */ ++ ++ if(!warnedhints) { ++ warnedhints = 1; ++ if(hints && subhints) { ++ WARNING_2 fprintf(stderr, ++ "Use of hint substitution on bitmap fonts is not recommended\n"); ++ } ++ } ++ ++#if 0 ++ printbmap(bmap, xsz, ysz, xoff, yoff); ++#endif ++ ++ /* now find the outlines */ ++ hlm=calloc( xsz, ysz+1 ); /* horizontal limits */ ++ vlm=calloc( xsz+1, ysz ); /* vertical limits */ ++ amp=calloc( xsz, ysz ); /* ambiguous points */ ++ ++ if(hlm==0 || vlm==0 || amp==0) { ++ fprintf (stderr, "****malloc failed %s line %d\n", __FILE__, __LINE__); ++ exit(255); ++ } ++ ++ /* ++ * hlm and vlm represent a grid of horisontal and ++ * vertical lines. Each pixel is surrounded by the grid ++ * from all the sides. The values of [hv]lm mark the ++ * parts of grid where the pixel value switches from white ++ * to black and back. ++ */ ++ ++ /* find the horizontal limits */ ++ ip=bmap; op=hlm; ++ /* 1st row */ ++ for(x=0; x0; y--) ++ for(x=xsz-1; x>0; x--) { ++ if(bmap[y*xsz+x]) { ++ if( !bmap[y*xsz+x-1] && !bmap[y*xsz-xsz+x] && bmap[y*xsz-xsz+x-1] ) ++ amp[y*xsz+x]=1; ++ } else { ++ if( bmap[y*xsz+x-1] && bmap[y*xsz-xsz+x] && !bmap[y*xsz-xsz+x-1] ) ++ amp[y*xsz+x]=1; ++ } ++ } ++ ++#if 0 ++ printlimits(hlm, vlm, amp, xsz, ysz); ++#endif ++ ++ /* generate the vectored (stepping) outline */ ++ ++ while(1) { ++ int found = 0; ++ int outer; /* flag: this is an outer contour */ ++ int hor, newhor; /* flag: the current contour direction is horizontal */ ++ int dir; /* previous direction of the coordinate, 1 - L_ON, 0 - L_OFF */ ++ int startx, starty; /* start of a contour */ ++ int firstx, firsty; /* start of the current line */ ++ int newx, newy; /* new coordinates to try */ ++ char *lm, val; ++ int maxx, maxy, xor; ++ ++ for(y=ysz; !found && y>0; y--) ++ for(x=0; x L_NONE) ++ goto foundcontour; ++ break; /* have no contours left */ ++ ++ foundcontour: ++ ig_rmoveto(g, x+xoff, y+yoff); /* intermediate as int */ ++ ++ startx = firstx = x; ++ starty = firsty = y; ++ ++ if(hlm[y*xsz+x] == L_OFF) { ++ outer = 1; dir = 0; ++ hlm[y*xsz+x] = -hlm[y*xsz+x]; /* mark as seen */ ++ hor = 1; x++; ++ } else { ++ outer = 0; dir = 0; ++ hor = 0; y--; ++ vlm[y*(xsz+1)+x] = -vlm[y*(xsz+1)+x]; /* mark as seen */ ++ } ++ ++ while(x!=startx || y!=starty) { ++#if 0 ++ printf("trace (%d, %d) outer=%d hor=%d dir=%d\n", x, y, outer, hor, dir); ++#endif ++ ++ /* initialization common for try1 and try2 */ ++ if(hor) { ++ lm = vlm; maxx = xsz+1; maxy = ysz; newhor = 0; ++ } else { ++ lm = hlm; maxx = xsz; maxy = ysz+1; newhor = 1; ++ } ++ xor = (outer ^ hor ^ dir); ++ ++ try1: ++ /* first we try to change axis, to keep the ++ * contour as long as possible ++ */ ++ ++ newx = x; newy = y; ++ if(!hor && (!outer ^ dir)) ++ newx--; ++ if(hor && (!outer ^ dir)) ++ newy--; ++ ++ if(newx < 0 || newx >= maxx || newy < 0 || newy >= maxy) ++ goto try2; ++ ++ if(!xor) ++ val = L_ON; ++ else ++ val = L_OFF; ++#if 0 ++ printf("try 1, want %d have %d at %c(%d, %d)\n", val, lm[newy*maxx + newx], ++ (newhor ? 'h':'v'), newx, newy); ++#endif ++ if( lm[newy*maxx + newx] == val ) ++ goto gotit; ++ ++ try2: ++ /* try to change the axis anyway */ ++ ++ newx = x; newy = y; ++ if(!hor && (outer ^ dir)) ++ newx--; ++ if(hor && (outer ^ dir)) ++ newy--; ++ ++ if(newx < 0 || newx >= maxx || newy < 0 || newy >= maxy) ++ goto try3; ++ ++ if(xor) ++ val = L_ON; ++ else ++ val = L_OFF; ++#if 0 ++ printf("try 2, want %d have %d at %c(%d, %d)\n", val, lm[newy*maxx + newx], ++ (newhor ? 'h':'v'), newx, newy); ++#endif ++ if( lm[newy*maxx + newx] == val ) ++ goto gotit; ++ ++ try3: ++ /* try to continue in the old direction */ ++ ++ if(hor) { ++ lm = hlm; maxx = xsz; maxy = ysz+1; ++ } else { ++ lm = vlm; maxx = xsz+1; maxy = ysz; ++ } ++ newhor = hor; ++ newx = x; newy = y; ++ if(hor && dir) ++ newx--; ++ if(!hor && !dir) ++ newy--; ++ ++ if(newx < 0 || newx >= maxx || newy < 0 || newy >= maxy) ++ goto badtry; ++ ++ if(dir) ++ val = L_ON; ++ else ++ val = L_OFF; ++#if 0 ++ printf("try 3, want %d have %d at %c(%d, %d)\n", val, lm[newy*maxx + newx], ++ (newhor ? 'h':'v'), newx, newy); ++#endif ++ if( lm[newy*maxx + newx] == val ) ++ goto gotit; ++ ++ badtry: ++ fprintf(stderr, "**** Internal error in the contour detection code at (%d, %d)\n", x, y); ++ fprintf(stderr, "glyph='%s' outer=%d hor=%d dir=%d\n", g->name, outer, hor, dir); ++ fflush(stdout); ++ exit(1); ++ ++ gotit: ++ if(hor != newhor) { /* changed direction, end the previous line */ ++ ig_rlineto(g, x+xoff, y+yoff); /* intermediate as int */ ++ firstx = x; firsty = y; ++ } ++ lm[newy*maxx + newx] = -lm[newy*maxx + newx]; ++ hor = newhor; ++ dir = (val == L_ON); ++ if(newhor) ++ x -= (dir<<1)-1; ++ else ++ y += (dir<<1)-1; ++ } ++#if 0 ++ printf("trace (%d, %d) outer=%d hor=%d dir=%d\n", x, y, outer, hor, dir); ++#endif ++ ig_rlineto(g, x+xoff, y+yoff); /* intermediate as int */ ++ g_closepath(g); ++ } ++ ++ ++ /* try to vectorize the curves and sloped lines in the bitmap */ ++ if(vectorize) { ++ GENTRY *ge, *pge, *cge, *loopge; ++ int i; ++ int skip; ++ ++ dumppaths(g, NULL, NULL); ++ ++ /* allocate the extensions */ ++ for(cge=g->entries; cge!=0; cge=cge->next) { ++ cge->ext = calloc(1, sizeof(GEX_FRAG) ); ++ if(cge->ext == 0) { ++ fprintf (stderr, "****malloc failed %s line %d\n", __FILE__, __LINE__); ++ exit(255); ++ } ++ } ++ ++ for(cge=g->entries; cge!=0; cge=cge->next) { ++ if(cge->type != GE_MOVE) ++ continue; ++ ++ /* we've found the beginning of a contour */ ++ { ++ int d, vert, count, stepmore, delaystop; ++ int vdir, hdir, fullvdir, fullhdir, len; ++ int dx, dy, lastdx, lastdy; ++ int k1, k2, reversal, smooth, good; ++ int line[2 /*H,V*/], maxlen[2 /*H,V*/], minlen[2 /*H,V*/]; ++ GENTRY **age; /* array of gentries in a contour */ ++ int clen; /* contour length, size of ths array */ ++ int i, j; ++ GEX_FRAG *f; ++ ++ /* we know that all the contours start at the top-left corner, ++ * so at most it might be before/after the last element of ++ * the last/first fragment ++ */ ++ ++ ge = cge->next; ++ pge = ge->bkwd; ++ if(ge->ix3 == pge->ix3) { /* a vertical line */ ++ /* we want to start always from a horizontal line because ++ * then we always start from top and that is quaranteed to be a ++ * fragment boundary, so move the start point of the contour ++ */ ++ pge->prev->next = pge->next; ++ pge->next->prev = pge->prev; ++ cge->next = pge; ++ pge->prev = cge; ++ pge->next = ge; ++ ge->prev = pge; ++ ge = pge; pge = ge->bkwd; ++ cge->ix3 = pge->ix3; cge->iy3 = pge->iy3; ++ } ++ ++ /* fill the array of gentries */ ++ clen = 1; ++ for(ge = cge->next->frwd; ge != cge->next; ge = ge->frwd) ++ clen++; ++ age = (GENTRY **)malloc(sizeof(*age) * clen); ++ ge = cge->next; ++ count = 0; ++ do { ++ age[count] = ge; ++ X_FRAG(ge)->aidx = count++; ++ ++ /* and by the way find the extremums */ ++ for(i=0; i<2; i++) { ++ if( isign(ge->frwd->ipoints[i][2] - ge->ipoints[i][2]) ++ * isign(ge->bkwd->bkwd->ipoints[i][2] - ge->bkwd->ipoints[i][2]) == 1) { ++ X_FRAG(ge)->flags |= GEXFF_EXTR; ++ fprintf(stderr, " %s extremum at %p\n", (i?"vert":"hor"), ge); ++ } ++ if(abs(ge->ipoints[i][2] - ge->bkwd->ipoints[i][2]) > 1) ++ X_FRAG(ge)->flags |= GEXFF_LONG; ++ } ++ ++ ge = ge->frwd; ++ } while(ge != cge->next); ++ ++ /* Find the serif fragments, looking as either of: ++ * -+ | ++ * | | ++ * +-+ +-+ ++ * | | ++ * +--... +--... ++ * with the thickness of serifs being 1 pixel. We make no ++ * difference between serifs on vertical and horizontal stems. ++ */ ++ ++ ge = cge->next; ++ do { ++ GENTRY *nge; ++ int pdx, pdy, ndx, ndy; ++ ++ /* two gentries of length 1 mean a potential serif */ ++ pge = ge->bkwd; ++ nge = ge->frwd; ++ ++ dx = nge->ix3 - pge->ix3; ++ dy = nge->iy3 - pge->iy3; ++ ++ if(abs(dx) != 1 || abs(dy) != 1) /* 2 small ones */ ++ continue; ++ ++ if( ++ (!(X_FRAG(ge)->flags & GEXFF_EXTR) ++ || !(X_FRAG(ge->bkwd)->flags & GEXFF_EXTR)) ++ && (!(X_FRAG(ge->frwd)->flags & GEXFF_EXTR) ++ || !(X_FRAG(ge->frwd->frwd)->flags & GEXFF_EXTR)) ++ ) ++ continue; /* either side must be a couple of extremums */ ++ ++ pdx = pge->ix3 - pge->bkwd->ix3; ++ pdy = pge->iy3 - pge->bkwd->iy3; ++ ndx = nge->frwd->ix3 - nge->ix3; ++ ndy = nge->frwd->iy3 - nge->iy3; ++ ++ if(pdx*dx + pdy*dy > 0 && ndx*dx + ndy*dy > 0) ++ continue; /* definitely not a serif but a round corner */ ++ ++ if(abs(pdx) + abs(pdy) == 1 || abs(ndx) + abs(ndy) == 1) ++ continue; ++ ++ /* we've found a serif including this and next gentry */ ++ X_FRAG(ge)->len[GEXFI_SERIF] = 2; ++ ++ } while( (ge = ge->frwd) != cge->next ); ++ ++ ++ /* Find the convex and concave fragments, defined as: ++ * convex (clockwise): dy/dx <= dy0/dx0, ++ * or a reversal: dy/dx == - dy0/dx0 && abs(dxthis) == 1 && dy/dx > 0 ++ * concave (counter-clockwise): dy/dx >= dy0/dx0, ++ * or a reversal: dy/dx == - dy0/dx0 && abs(dxthis) == 1 && dy/dx < 0 ++ * ++ * Where dx and dy are measured between the end of this gentry ++ * and the start of the previous one (dx0 and dy0 are the same ++ * thing calculated for the previous gentry and its previous one), ++ * dxthis is between the end and begginning of this gentry. ++ * ++ * A reversal is a situation when the curve changes its direction ++ * along the x axis, so it passes through a momentary vertical ++ * direction. ++ */ ++ for(d = GEXFI_CONVEX; d<= GEXFI_CONCAVE; d++) { ++ ge = cge->next; ++ pge = ge->bkwd; /* the beginning of the fragment */ ++ count = 1; ++ lastdx = pge->ix3 - pge->bkwd->bkwd->ix3; ++ lastdy = pge->iy3 - pge->bkwd->bkwd->iy3; ++ ++#define CHKCURVCONN(ge, msg) do { \ ++ dx = (ge)->ix3 - (ge)->bkwd->bkwd->ix3; \ ++ dy = (ge)->iy3 - (ge)->bkwd->bkwd->iy3; \ ++ if(0 && msg) { \ ++ fprintf(stderr, " %p: dx=%d dy=%d dx0=%d dy0=%d ", \ ++ (ge), dx, dy, lastdx, lastdy); \ ++ } \ ++ k1 = X_FRAG(ge)->flags; \ ++ k2 = X_FRAG((ge)->bkwd)->flags; \ ++ if(0 && msg) { \ ++ fprintf(stderr, "fl=%c%c%c%c ", \ ++ (k1 & GEXFF_EXTR) ? 'X' : '-', \ ++ (k1 & GEXFF_LONG) ? 'L' : '-', \ ++ (k2 & GEXFF_EXTR) ? 'X' : '-', \ ++ (k2 & GEXFF_LONG) ? 'L' : '-' \ ++ ); \ ++ } \ ++ if( (k1 & GEXFF_EXTR) && (k2 & GEXFF_LONG) \ ++ || (k2 & GEXFF_EXTR) && (k1 & GEXFF_LONG) ) { \ ++ smooth = 0; \ ++ good = reversal = -1; /* for debugging */ \ ++ } else { \ ++ k1 = dy * lastdx; \ ++ k2 = lastdy * dx; \ ++ smooth = (abs(dx)==1 || abs(dy)==1); \ ++ good = (k1 - k2)*gxf_cvk[d] >= 0; \ ++ if(smooth && !good) { \ ++ reversal = (k1 == -k2 && abs((ge)->ix3 - (ge)->bkwd->ix3)==1 \ ++ && dy*dx*gxf_cvk[d] < 0); \ ++ } else \ ++ reversal = 0; \ ++ } \ ++ if(0 && msg) { \ ++ fprintf(stderr, "k1=%d k2=%d pge=%p count=%d %s good=%d rev=%d\n", \ ++ k1, k2, pge, count, gxf_name[d], good, reversal); \ ++ } \ ++ } while(0) ++ ++ do { ++ CHKCURVCONN(ge, 1); ++ ++ if(smooth && (good || reversal) ) ++ count++; ++ else { ++ /* can't continue */ ++#if 0 ++ if(count >= 4) { /* worth remembering */ ++ fprintf(stderr, " %s frag %p-%p count=%d\n", gxf_name[d], pge, ge->bkwd, count); ++ } ++#endif ++ X_FRAG(pge)->len[d] = count; ++ if(smooth) { ++ pge = ge->bkwd; ++ count = 2; ++ } else { ++ pge = ge; ++ count = 1; ++ } ++ } ++ lastdx = dx; lastdy = dy; ++ ge = ge->frwd; ++ } while(ge != cge->next); ++ ++ /* see if we can connect the last fragment to the first */ ++ CHKCURVCONN(ge, 1); ++ ++ if(smooth && (good || reversal) ) { ++ /* -1 to avoid ge->bkwd being counted twice */ ++ if( X_FRAG(ge->bkwd)->len[d] >= 2 ) ++ count += X_FRAG(ge->bkwd)->len[d] - 1; ++ else if(count == clen+1) { ++ /* we are joining a circular (closed) curve, check whether it ++ * can be joined at any point or whether it has a discontinuity ++ * at the point where we join it now ++ */ ++ lastdx = dx; lastdy = dy; ++ CHKCURVCONN(ge->frwd, 0); ++ ++ if(smooth && (good || reversal) ) { ++ /* yes, the curve is truly a circular one and can be ++ * joined at any point ++ */ ++ ++#if 0 ++ fprintf(stderr, " found a circular joint point at %p\n", pge); ++#endif ++ /* make sure that in a circular fragment we start from an extremum */ ++ while( ! (X_FRAG(pge)->flags & GEXFF_EXTR) ) ++ pge = pge->frwd; ++ X_FRAG(pge)->flags |= GEXFF_CIRC; ++ } ++ } ++#if 0 ++ fprintf(stderr, " %s joined %p to %p count=%d bk_count=%d\n", gxf_name[d], pge, ge->bkwd, ++ count, X_FRAG(ge->bkwd)->len[d] ); ++#endif ++ X_FRAG(ge->bkwd)->len[d] = 0; ++ } ++ X_FRAG(pge)->len[d] = count; ++#if 0 ++ if(count >= 4) { /* worth remembering */ ++ fprintf(stderr, " %s last frag %p-%p count=%d\n", gxf_name[d], pge, ge->bkwd, count); ++ } ++#endif ++#undef CHKCURVCONN ++ ++ /* do postprocessing */ ++ ge = cge->next; ++ do { ++ f = X_FRAG(ge); ++ len = f->len[d]; ++#if 0 ++ fprintf(stderr, " %p %s len=%d clen=%d\n", ge, gxf_name[d], len, clen); ++#endif ++ if(len < 3) /* get rid of the fragments that are too short */ ++ f->len[d] = 0; ++ else if(len == 3) { ++ /* _ ++ * drop the |_| - shaped fragments, leave alone the _| - shaped ++ * (and even those only if not too short in pixels), ++ * those left alone are further filtered later ++ */ ++ k1 = (ge->ix3 == ge->bkwd->ix3); /* axis of the start */ ++ if(isign(ge->ipoints[k1][2] - ge->bkwd->ipoints[k1][2]) ++ != isign(ge->frwd->ipoints[k1][2] - ge->frwd->frwd->ipoints[k1][2]) ++ && abs(ge->frwd->frwd->ipoints[k1][2] - ge->bkwd->ipoints[k1][2]) > 2) { ++#if 0 ++ fprintf(stderr, " %s frag %p count=%d good shape\n", ++ gxf_name[d], ge, count); ++#endif ++ } else ++ f->len[d] = 0; ++ } else if(len == clen+1) ++ break; /* a closed fragment, nothing else interesting */ ++ else { /* only for open fragments */ ++ GENTRY *gem, *gex, *gei, *ges; ++ ++ ges = ge; /* the start entry */ ++ gem = age[(f->aidx + f->len[d])%clen]; /* entry past the end of the fragment */ ++ ++ gei = ge->frwd; ++ if( (ge->ix3 == ge->bkwd->ix3) /* vert */ ++ ^ (isign(ge->bkwd->ix3 - gei->ix3)==isign(ge->bkwd->iy3 - gei->iy3)) ++ ^ !(d == GEXFI_CONVEX) /* counter-clockwise */ ) { ++ ++#if 0 ++ fprintf(stderr, " %p: %s potential spurious start\n", ge, gxf_name[d]); ++#endif ++ /* the beginning may be a spurious entry */ ++ ++ gex = 0; /* the extremum closest to the beginning - to be found */ ++ for(gei = ge->frwd; gei != gem; gei = gei->frwd) { ++ if(X_FRAG(gei)->flags & GEXFF_EXTR) { ++ gex = gei; ++ break; ++ } ++ } ++ if(gex == 0) ++ gex = gem->bkwd; ++ ++ /* A special case: ignore the spurious ends on small curves that ++ * either enclose an 1-pixel-wide extremum or are 1-pixel deep. ++ * Any 5-or-less-pixel-long curve with extremum 2 steps away ++ * qualifies for that. ++ */ ++ ++ if(len <= 5 && gex == ge->frwd->frwd) { ++ good = 0; ++#if 0 ++ fprintf(stderr, " E"); ++#endif ++ } else { ++ good = 1; /* assume that ge is not spurious */ ++ ++ /* gei goes backwards, gex goes forwards from the extremum */ ++ gei = gex; ++ /* i is the symmetry axis, j is the other axis (X=0 Y=1) */ ++ i = (gex->ix3 != gex->bkwd->ix3); ++ j = !i; ++ for( ; gei!=ge && gex!=gem; gei=gei->bkwd, gex=gex->frwd) { ++ if( gei->bkwd->ipoints[i][2] != gex->ipoints[i][2] ++ || gei->bkwd->ipoints[j][2] - gei->ipoints[j][2] ++ != gex->bkwd->ipoints[j][2] - gex->ipoints[j][2] ++ ) { ++ good = 0; /* no symmetry - must be spurious */ ++#if 0 ++ fprintf(stderr, " M(%p,%p)(%d %d,%d)(%d %d,%d)", ++ gei, gex, ++ i, gei->bkwd->ipoints[i][2], gex->ipoints[i][2], ++ j, gei->bkwd->ipoints[j][2] - gei->ipoints[j][2], ++ gex->bkwd->ipoints[j][2] - gex->ipoints[j][2] ); ++#endif ++ break; ++ } ++ } ++ if(gex == gem) { /* oops, the other side is too short */ ++ good = 0; ++#if 0 ++ fprintf(stderr, " X"); ++#endif ++ } ++ if(good && gei == ge) { ++ if( isign(gei->bkwd->ipoints[j][2] - gei->ipoints[j][2]) ++ != isign(gex->bkwd->ipoints[j][2] - gex->ipoints[j][2]) ) { ++ good = 0; /* oops, goes into another direction */ ++#if 0 ++ fprintf(stderr, " D"); ++#endif ++ } ++ } ++ } ++ if(!good) { /* it is spurious, drop it */ ++#if 0 ++ fprintf(stderr, " %p: %s spurious start\n", ge, gxf_name[d]); ++#endif ++ f->len[d] = 0; ++ ges = ge->frwd; ++ len--; ++ X_FRAG(ges)->len[d] = len; ++ } ++ } ++ ++ gei = gem->bkwd->bkwd->bkwd; ++ if( (gem->ix3 != gem->bkwd->ix3) /* gem->bkwd is vert */ ++ ^ (isign(gem->bkwd->ix3 - gei->ix3)==isign(gem->bkwd->iy3 - gei->iy3)) ++ ^ (d == GEXFI_CONVEX) /* clockwise */ ) { ++ ++#if 0 ++ fprintf(stderr, " %p: %s potential spurious end\n", gem->bkwd, gxf_name[d]); ++#endif ++ /* the end may be a spurious entry */ ++ ++ gex = 0; /* the extremum closest to the end - to be found */ ++ for(gei = gem->bkwd->bkwd; gei != ges->bkwd; gei = gei->bkwd) { ++ if(X_FRAG(gei)->flags & GEXFF_EXTR) { ++ gex = gei; ++ break; ++ } ++ } ++ if(gex == 0) ++ gex = ges; ++ ++ good = 1; /* assume that gem->bkwd is not spurious */ ++ /* gei goes backwards, gex goes forwards from the extremum */ ++ gei = gex; ++ /* i is the symmetry axis, j is the other axis (X=0 Y=1) */ ++ i = (gex->ix3 != gex->bkwd->ix3); ++ j = !i; ++ for( ; gei!=ges->bkwd && gex!=gem->bkwd; gei=gei->bkwd, gex=gex->frwd) { ++ if( gei->bkwd->ipoints[i][2] != gex->ipoints[i][2] ++ || gei->bkwd->ipoints[j][2] - gei->ipoints[j][2] ++ != gex->bkwd->ipoints[j][2] - gex->ipoints[j][2] ++ ) { ++ good = 0; /* no symmetry - must be spurious */ ++#if 0 ++ fprintf(stderr, " M(%p,%p)(%d %d,%d)(%d %d,%d)", ++ gei, gex, ++ i, gei->bkwd->ipoints[i][2], gex->ipoints[i][2], ++ j, gei->bkwd->ipoints[j][2] - gei->ipoints[j][2], ++ gex->bkwd->ipoints[j][2] - gex->ipoints[j][2] ); ++#endif ++ break; ++ } ++ } ++ if(gei == ges->bkwd) { /* oops, the other side is too short */ ++ good = 0; ++#if 0 ++ fprintf(stderr, " X"); ++#endif ++ } ++ if(good && gex == gem->bkwd) { ++ if( isign(gei->bkwd->ipoints[j][2] - gei->ipoints[j][2]) ++ != isign(gex->bkwd->ipoints[j][2] - gex->ipoints[j][2]) ) { ++ good = 0; /* oops, goes into another direction */ ++#if 0 ++ fprintf(stderr, " D"); ++#endif ++ } ++ } ++ if(!good) { /* it is spurious, drop it */ ++#if 0 ++ fprintf(stderr, " %p: %s spurious end\n", gem->bkwd, gxf_name[d]); ++#endif ++ X_FRAG(ges)->len[d] = --len; ++ } ++ } ++ if(len < 4) { ++ X_FRAG(ges)->len[d] = 0; ++#if 0 ++ fprintf(stderr, " %p: %s frag discarded, too small now\n", ge, gxf_name[d]); ++#endif ++ } ++ if(ges != ge) { ++ if(ges == cge->next) ++ break; /* went around the loop */ ++ else { ++ ge = ges->frwd; /* don't look at this fragment twice */ ++ continue; ++ } ++ } ++ } ++ ++ ge = ge->frwd; ++ } while(ge != cge->next); ++ } ++ ++ /* Find the straight line fragments. ++ * Even though the lines are sloped, they are called ++ * "vertical" or "horizontal" according to their longer ++ * dimension. All the steps in the shother dimension must ++ * be 1 pixel long, all the steps in the longer dimension ++ * must be within the difference of 1 pixel. ++ */ ++ for(d = GEXFI_LINE; d<= GEXFI_EXACTLINE; d++) { ++ ge = cge->next; ++ pge = ge->bkwd; /* the beginning of the fragment */ ++ count = 1; ++ delaystop = 0; ++ do { ++ int h; ++ ++ stepmore = 0; ++ hdir = isign(ge->ix3 - ge->bkwd->ix3); ++ vdir = isign(ge->iy3 - ge->bkwd->iy3); ++ vert = (hdir == 0); ++ if(count==1) { ++ /* at this point pge==ge->bkwd */ ++ /* account for the previous gentry, which was !vert */ ++ if(!vert) { /* prev was vertical */ ++ maxlen[0] = minlen[0] = 0; ++ maxlen[1] = minlen[1] = abs(pge->iy3 - pge->bkwd->iy3); ++ line[0] = (maxlen[1] == 1); ++ line[1] = 1; ++ fullhdir = hdir; ++ fullvdir = isign(pge->iy3 - pge->bkwd->iy3); ++ } else { ++ maxlen[0] = minlen[0] = abs(pge->ix3 - pge->bkwd->ix3); ++ maxlen[1] = minlen[1] = 0; ++ line[0] = 1; ++ line[1] = (maxlen[0] == 1); ++ fullhdir = isign(pge->ix3 - pge->bkwd->ix3); ++ fullvdir = vdir; ++ } ++ } ++ h = line[0]; /* remember the prevalent direction */ ++#if 0 ++ fprintf(stderr, " %p: v=%d(%d) h=%d(%d) vl(%d,%d,%d) hl=(%d,%d,%d) %s count=%d ", ++ ge, vdir, fullvdir, hdir, fullhdir, ++ line[1], minlen[1], maxlen[1], ++ line[0], minlen[0], maxlen[0], ++ gxf_name[d], count); ++#endif ++ if(vert) { ++ if(vdir != fullvdir) ++ line[0] = line[1] = 0; ++ len = abs(ge->iy3 - ge->bkwd->iy3); ++ } else { ++ if(hdir != fullhdir) ++ line[0] = line[1] = 0; ++ len = abs(ge->ix3 - ge->bkwd->ix3); ++ } ++#if 0 ++ fprintf(stderr, "len=%d\n", len); ++#endif ++ if(len != 1) /* this is not a continuation in the short dimension */ ++ line[!vert] = 0; ++ ++ /* can it be a continuation in the long dimension ? */ ++ if( line[vert] ) { ++ if(maxlen[vert]==0) ++ maxlen[vert] = minlen[vert] = len; ++ else if(maxlen[vert]==minlen[vert]) { ++ if(d == GEXFI_EXACTLINE) { ++ if(len != maxlen[vert]) ++ line[vert] = 0; /* it can't */ ++ } else if(len < maxlen[vert]) { ++ if(len < minlen[vert]-1) ++ line[vert] = 0; /* it can't */ ++ else ++ minlen[vert] = len; ++ } else { ++ if(len > maxlen[vert]+1) ++ line[vert] = 0; /* it can't */ ++ else ++ maxlen[vert] = len; ++ } ++ } else if(len < minlen[vert] || len > maxlen[vert]) ++ line[vert] = 0; /* it can't */ ++ } ++ ++ if(line[0] == 0 && line[1] == 0) { ++#if 0 ++ if(count >= 3) ++ fprintf(stderr, " %s frag %p-%p count=%d\n", gxf_name[d], pge, ge->bkwd, count); ++#endif ++ X_FRAG(pge)->len[d] = count; ++ if(d == GEXFI_EXACTLINE && h) { ++ X_FRAG(pge)->flags |= GEXFF_HLINE; ++ } ++ if(count == 1) ++ pge = ge; ++ else { ++ stepmore = 1; /* may reconsider the 1st gentry */ ++ pge = ge = ge->bkwd; ++ count = 1; ++ } ++ } else ++ count++; ++ ++ ge = ge->frwd; ++ if(ge == cge->next && !stepmore) ++ delaystop = 1; /* consider the first gentry again */ ++ } while(stepmore || ge != cge->next ^ delaystop); ++ /* see if there is an unfinished line left */ ++ if(count != 1) { ++#if 0 ++ if(count >= 3) ++ fprintf(stderr, " %s frag %p-%p count=%d\n", gxf_name[d], pge, ge->bkwd, count); ++#endif ++ X_FRAG(ge->bkwd->bkwd)->len[d] = 0; ++ X_FRAG(pge)->len[d] = count; ++ } ++ } ++ ++ /* do postprocessing of the lines */ ++#if 0 ++ fprintf(stderr, "Line postprocessing\n"); ++ gex_dump_contour(cge->next, clen); ++#endif ++ ++ /* the non-exact line frags are related to exact line frags sort ++ * of like to individual gentries: two kinds of exact frags ++ * must be interleaved, with one kind having the size of 3 ++ * and the other kind having the size varying within +-2. ++ */ ++ ++ ge = cge->next; ++ do { ++ GEX_FRAG *pf, *lastf1, *lastf2; ++ int len1, len2, fraglen; ++ ++ f = X_FRAG(ge); ++ ++ fraglen = f->len[GEXFI_LINE]; ++ if(fraglen >= 4) { ++ ++ vert = 0; /* vert is a pseudo-directon */ ++ line[0] = line[1] = 1; ++ maxlen[0] = minlen[0] = maxlen[1] = minlen[1] = 0; ++ lastf2 = lastf1 = f; ++ len2 = len1 = 0; ++ for(pge = ge, i = 1; i < fraglen; i++, pge=pge->frwd) { ++ pf = X_FRAG(pge); ++ len = pf->len[GEXFI_EXACTLINE]; ++#if 0 ++ fprintf(stderr, " pge=%p i=%d of %d ge=%p exLen=%d\n", pge, i, ++ f->len[GEXFI_LINE], ge, len); ++#endif ++ len1++; len2++; ++ if(len==0) { ++ continue; ++ } ++ vert = !vert; /* alternate the pseudo-direction */ ++ if(len > 3) ++ line[!vert] = 0; ++ if(maxlen[vert] == 0) ++ maxlen[vert] = minlen[vert] = len; ++ else if(maxlen[vert]-2 >= len && minlen[vert]+2 <= len) { ++ if(len > maxlen[vert]) ++ maxlen[vert] = len; ++ else if(len < minlen[vert]) ++ minlen[vert] = len; ++ } else ++ line[vert] = 0; ++ if(line[0] == 0 && line[1] == 0) { ++#if 0 ++ fprintf(stderr, " Line breaks at %p %c(%d, %d) %c(%d, %d) len=%d fl=%d l2=%d l1=%d\n", ++ pge, (!vert)?'*':' ', minlen[0], maxlen[0], ++ vert?'*':' ', minlen[1], maxlen[1], len, fraglen, len2, len1); ++#endif ++ if(lastf2 != lastf1) { ++ lastf2->len[GEXFI_LINE] = len2-len1; ++ } ++ lastf1->len[GEXFI_LINE] = len1+1; ++ pf->len[GEXFI_LINE] = fraglen+1 - i; ++#if 0 ++ gex_dump_contour(pge, clen); ++#endif ++ ++ /* continue with the line */ ++ vert = 0; /* vert is a pseudo-directon */ ++ line[0] = line[1] = 1; ++ maxlen[0] = minlen[0] = maxlen[1] = minlen[1] = 0; ++ lastf2 = lastf1 = f; ++ len2 = len1 = 0; ++ } else { ++ lastf1 = pf; ++ len1 = 0; ++ } ++ } ++ } ++ ++ ge = ge->frwd; ++ } while(ge != cge->next); ++#if 0 ++ fprintf(stderr, "Line postprocessing part 2\n"); ++ gex_dump_contour(cge->next, clen); ++#endif ++ ++ ge = cge->next; ++ do { ++ f = X_FRAG(ge); ++ ++ if(f->len[GEXFI_LINE] >= 4) { ++ len = f->len[GEXFI_EXACTLINE]; ++ /* if a non-exact line covers precisely two exact lines, ++ * split it ++ */ ++ if(len > 0 && f->len[GEXFI_LINE] >= len+1) { ++ GEX_FRAG *pf; ++ pge = age[(f->aidx + len - 1)%clen]; /* last gentry of exact line */ ++ pf = X_FRAG(pge); ++ if(f->len[GEXFI_LINE] + 1 == len + pf->len[GEXFI_EXACTLINE]) { ++ f->len[GEXFI_LINE] = len; ++ f->flags |= GEXFF_SPLIT; ++ pf->len[GEXFI_LINE] = pf->len[GEXFI_EXACTLINE]; ++ pf->flags |= GEXFF_SPLIT; ++ } ++ } ++ } ++ ++ ge = ge->frwd; ++ } while(ge != cge->next); ++#if 0 ++ fprintf(stderr, "Line postprocessing part 2a\n"); ++ gex_dump_contour(cge->next, clen); ++#endif ++ ge = cge->next; ++ do { ++ f = X_FRAG(ge); ++ ++ /* too small lines are of no interest */ ++ if( (f->flags & GEXFF_SPLIT)==0 && f->len[GEXFI_LINE] < 4) ++ f->len[GEXFI_LINE] = 0; ++ ++ len = f->len[GEXFI_EXACTLINE]; ++ /* too small exact lines are of no interest */ ++ if(len < 3) /* exact lines may be shorter */ ++ f->len[GEXFI_EXACTLINE] = 0; ++ /* get rid of inexact additions to the end of the exact lines */ ++ else if(f->len[GEXFI_LINE] == len+1) ++ f->len[GEXFI_LINE] = len; ++ /* same at the beginning */ ++ else { ++ int diff = X_FRAG(ge->bkwd)->len[GEXFI_LINE] - len; ++ ++ if(diff == 1 || diff == 2) { ++ X_FRAG(ge->bkwd)->len[GEXFI_LINE] = 0; ++ f->len[GEXFI_LINE] = len; ++ } ++ } ++ ++ ge = ge->frwd; ++ } while(ge != cge->next); ++#if 0 ++ fprintf(stderr, "Line postprocessing is completed\n"); ++ gex_dump_contour(cge->next, clen); ++#endif ++ ++ gex_calc_lenback(cge->next, clen); /* prepare data */ ++ ++ /* resolve conflicts between lines and curves */ ++ ++ /* ++ * the short (3-gentry) curve frags must have one of the ends ++ * coinciding with another curve frag of the same type ++ */ ++ ++ for(d = GEXFI_CONVEX; d<= GEXFI_CONCAVE; d++) { ++ ge = cge->next; ++ do { ++ f = X_FRAG(ge); ++ ++ if(f->len[d] == 3) { ++ pge = age[(f->aidx + 2)%clen]; /* last gentry of this frag */ ++ if(f->lenback[d] == 0 && X_FRAG(pge)->len[d] == 0) { ++ fprintf(stderr, " discarded small %s at %p-%p\n", gxf_name[d], ge, pge); ++ f->len[d] = 0; ++ X_FRAG(ge->frwd)->lenback[d] = 0; ++ X_FRAG(ge->frwd->frwd)->lenback[d] = 0; ++ } ++ } ++ ge = ge->frwd; ++ } while(ge != cge->next); ++ } ++ ++ /* the serifs take priority over everything else */ ++ ge = cge->next; ++ do { ++ f = X_FRAG(ge); ++ ++ len = f->len[GEXFI_SERIF]; ++ if(len == 0) ++ continue; ++ ++ if(len != 2) { /* this is used in the code below */ ++ fprintf(stderr, "Internal error at %s line %d: serif frags len is %d\n", ++ __FILE__, __LINE__, len); ++ exit(1); ++ } ++ ++ for(d = 0; d < GEXFI_SERIF; d++) { ++ /* serifs may not have common ends with the other fragments, ++ * this is expressed as extending them by 1 gentry on each side ++ */ ++ frag_subtract(g, age, clen, ge->bkwd, len+2, d); ++ } ++ } while( (ge = ge->frwd) != cge->next); ++ ++ /* ++ * longer exact lines take priority over curves; shorter lines ++ * and inexact lines are resolved with convex/concave conflicts ++ */ ++ ge = cge->next; ++ do { ++ f = X_FRAG(ge); ++ ++ len = f->len[GEXFI_EXACTLINE]; ++ ++ if(len < 6) { /* line is short */ ++ ge = ge->frwd; ++ continue; ++ } ++ ++ fprintf(stderr, " line at %p len=%d\n", ge, f->len[GEXFI_EXACTLINE]); ++ for(d = GEXFI_CONVEX; d<= GEXFI_CONCAVE; d++) { ++ frag_subtract(g, age, clen, ge, len, d); ++ } ++ ++ ge = ge->frwd; ++ } while(ge != cge->next); ++ ++ /* ++ * The exact lines take priority over curves that coincide ++ * with them or extend by only one gentry on either side ++ * (but not both sides). By this time it applies only to the ++ * small exact lines. ++ * ++ * An interesting general case is when a curve matches more ++ * than one exact line going diamond-like. ++ */ ++ ++ ge = cge->next; ++ do { ++ int done, len2; ++ int sharpness; ++ GEX_FRAG *pf; ++ ++ f = X_FRAG(ge); ++ ++ /* "sharpness" shows how a group of exact line frags is connected: if the gentries ++ * of some of them overlap, the curve matching requirement is loosened: it may ++ * extend up to 1 gentry beyond each end of the group of exact line frags ++ * (sharpness=2); otherwise it may extend to only one end (sharpness=1) ++ */ ++ sharpness = 1; ++ ++ len = f->len[GEXFI_EXACTLINE]; ++ if(len >= 4) { ++ while(len < clen) { ++ done = 0; ++ pf = X_FRAG(ge->bkwd); ++ for(d = GEXFI_CONVEX; d<= GEXFI_CONCAVE; d++) { ++ if(f->len[d] == len || f->len[d] == len+1) { ++ ++ fprintf(stderr, " removed %s frag at %p len=%d linelen=%d\n", ++ gxf_name[d], ge, f->len[d], len); ++ pge = ge->frwd; ++ for(i = f->len[d]; i > 1; i--, pge = pge->frwd) ++ X_FRAG(pge)->lenback[d] = 0; ++ f->len[d] = 0; ++ gex_dump_contour(ge, clen); ++ done = 1; ++ } else if(pf->len[d] == len+1 || pf->len[d] == len+sharpness) { ++ fprintf(stderr, " removed %s frag at %p len=%d next linelen=%d\n", ++ gxf_name[d], ge->bkwd, pf->len[d], len); ++ pge = ge; ++ for(i = pf->len[d]; i > 1; i--, pge = pge->frwd) ++ X_FRAG(pge)->lenback[d] = 0; ++ pf->len[d] = 0; ++ gex_dump_contour(ge, clen); ++ done = 1; ++ } ++ } ++ if(done) ++ break; ++ ++ /* is there any chance to match a sequence of exect lines ? */ ++ if(f->len[GEXFI_CONVEX] < len && f->len[GEXFI_CONCAVE] < len ++ && pf->len[GEXFI_CONVEX] < len && pf->len[GEXFI_CONCAVE] < len) ++ break; ++ ++ done = 1; ++ /* check whether the line is connected to another exact line at an extremum */ ++ pge = age[(f->aidx + len - 1)%clen]; /* last gentry of exact line */ ++ len2 = X_FRAG(pge)->len[GEXFI_EXACTLINE]; ++ if(len2 > 0) { ++ if( len2 >= 4 && (X_FRAG(pge)->flags & GEXFF_EXTR) ) { ++ len += len2 - 1; ++ sharpness = 2; ++ done = 0; ++ } ++ } else { ++ /* see if the extremum is between two exact lines */ ++ pge = pge->frwd; ++ if(X_FRAG(pge)->flags & GEXFF_EXTR) { ++ pge = pge->frwd; ++ len2 = X_FRAG(pge)->len[GEXFI_EXACTLINE]; ++ if(len2 >= 4) { ++ len += len2 + 1; ++ done = 0; ++ } ++ } ++ } ++ if(done) ++ break; ++ } ++ } ++ ++ ge = ge->frwd; ++ } while(ge != cge->next); ++ ++ /* ++ * The lines may cover only whole curves (or otherwise empty space), ++ * so cut them where they overlap parts of the curves. If 2 or less ++ * gentries are left in the line, remove the line. ++ * If a line and a curve fully coincide, remove the line. Otherwise ++ * remove the curves that are completely covered by the lines. ++ */ ++ ++ ge = cge->next; ++ do { ++ f = X_FRAG(ge); ++ ++ reconsider_line: ++ len = f->len[GEXFI_LINE]; ++ ++ if(len == 0) { ++ ge = ge->frwd; ++ continue; ++ } ++ ++ if(f->len[GEXFI_CONVEX] >= len ++ || f->len[GEXFI_CONCAVE] >= len) { ++ line_completely_covered: ++ fprintf(stderr, " removed covered Line frag at %p len=%d\n", ++ ge, len); ++ f->len[GEXFI_LINE] = 0; ++ for(pge = ge->frwd; len > 1; len--, pge = pge->frwd) ++ X_FRAG(pge)->lenback[GEXFI_LINE] = 0; ++ gex_dump_contour(ge, clen); ++ ge = ge->frwd; ++ continue; ++ } ++ ++ k1 = 0; /* how much to cut at the front */ ++ for(d = GEXFI_CONVEX; d<= GEXFI_CONCAVE; d++) { ++ if(f->lenback[d]) { ++ pge = age[(f->aidx + clen - f->lenback[d])%clen]; ++ i = X_FRAG(pge)->len[d] - f->lenback[d] - 1; ++ if(i > k1) ++ k1 = i; ++ } ++ } ++ ++ k2 = 0; /* how much to cut at the end */ ++ pge = age[(f->aidx + len)%clen]; /* gentry after the end */ ++ for(d = GEXFI_CONVEX; d<= GEXFI_CONCAVE; d++) { ++ i = X_FRAG(pge)->lenback[d] - 1; ++ if(i > k2) ++ k2 = i; ++ } ++ ++ if(k1+k2 > 0 && k1+k2 >= len-3) { ++ fprintf(stderr, " k1=%d k2=%d\n", k1, k2); ++ goto line_completely_covered; ++ } ++ ++ ++ if(k2 != 0) { /* cut the end */ ++ len -= k2; ++ f->len[GEXFI_LINE] = len; ++ /* pge still points after the end */ ++ for(i = k2, pge = pge->bkwd; i > 0; i--, pge = pge->bkwd) ++ X_FRAG(pge)->lenback[GEXFI_LINE] = 0; ++ } ++ if(k1 != 0) { /* cut the beginning */ ++ len -= k1; ++ f->len[GEXFI_LINE] = 0; ++ for(i = 1, pge = ge->frwd; i < k1; i++, pge = pge->frwd) ++ X_FRAG(pge)->lenback[GEXFI_LINE] = 0; ++ X_FRAG(pge)->len[GEXFI_LINE] = len; ++ for(i = 0; i < len; i++, pge = pge->frwd) ++ X_FRAG(pge)->lenback[GEXFI_LINE] = i; ++ } ++ if(k1 != 0 || k2 != 0) { ++ fprintf(stderr, " cut Line frag at %p by (%d,%d) to len=%d\n", ++ ge, k1, k2, len); ++ gex_dump_contour(ge, clen); ++ ++ goto reconsider_line; /* the line may have to be cut again */ ++ } ++ pge = age[(f->aidx + k1)%clen]; /* new beginning */ ++ good = 1; /* flag: no need do do a debugging dump */ ++ for(i=1; ifrwd) ++ for(d = GEXFI_CONVEX; d<= GEXFI_CONCAVE; d++) { ++ if(X_FRAG(pge)->len[d]) { ++ fprintf(stderr, " removed %s frag at %p len=%d covered by line\n", ++ gxf_name[d], pge, X_FRAG(pge)->len[d], len); ++ good = 0; ++ } ++ X_FRAG(pge)->len[d] = 0; ++ } ++ pge = age[(f->aidx + k1 + 1)%clen]; /* next after new beginning */ ++ for(i=1; ifrwd) ++ for(d = GEXFI_CONVEX; d<= GEXFI_CONCAVE; d++) ++ X_FRAG(pge)->lenback[d] = 0; ++ if(!good) ++ gex_dump_contour(ge, clen); ++ ++ ge = ge->frwd; ++ } while(ge != cge->next); ++ ++ /* Resolve conflicts between curves */ ++ for(d = GEXFI_CONVEX; d<= GEXFI_CONCAVE; d++) { ++ dx = (GEXFI_CONVEX + GEXFI_CONCAVE) - d; /* the other type */ ++ ge = cge->next; ++ do { ++ GENTRY *sge; ++ ++ f = X_FRAG(ge); ++ len = f->len[d]; ++ if(len < 2) { ++ ge = ge->frwd; ++ continue; ++ } ++ sge = ge; /* the start of fragment */ ++ ++ i = f->len[dx]; ++ if(i != 0) { /* two curved frags starting here */ ++ /* should be i!=len because otherwise they would be ++ * covered by an exact line ++ */ ++ if(i > len) { ++ curve_completely_covered: ++ /* remove the convex frag */ ++ fprintf(stderr, " removed %s frag at %p len=%d covered by %s\n", ++ gxf_name[d], ge, len, gxf_name[dx]); ++ f->len[d] = 0; ++ for(pge = ge->frwd, j = 1; j < len; j++, pge = pge->frwd) ++ X_FRAG(pge)->lenback[d] = 0; ++ gex_dump_contour(ge, clen); ++ ++ ge = ge->frwd; /* the frag is gone, nothing more to do */ ++ continue; ++ } else { ++ /* remove the concave frag */ ++ fprintf(stderr, " removed %s frag at %p len=%d covered by %s\n", ++ gxf_name[dx], ge, i, gxf_name[d]); ++ f->len[dx] = 0; ++ for(pge = ge->frwd, j = 1; j < i; j++, pge = pge->frwd) ++ X_FRAG(pge)->lenback[dx] = 0; ++ gex_dump_contour(ge, clen); ++ } ++ } ++ ++ ++ k1 = X_FRAG(ge->frwd)->lenback[dx]; ++ if(k1 != 0) { /* conflict at the front */ ++ GENTRY *gels, *gele, *gei; ++ ++ pge = age[(f->aidx + clen - (k1-1))%clen]; /* first gentry of concave frag */ ++ k2 = X_FRAG(pge)->len[dx]; /* its length */ ++ ++ i = k2 - (k1-1); /* amount of overlap */ ++ if(i > len) ++ i = len; ++ /* i >= 2 by definition */ ++ if(i >= k2-1) { /* covers the other frag - maybe with 1 gentry showing */ ++ fprintf(stderr, " removed %s frag at %p len=%d covered by %s\n", ++ gxf_name[dx], pge, k2, gxf_name[d]); ++ X_FRAG(pge)->len[dx] = 0; ++ for(pge = pge->frwd, j = 1; j < k2; j++, pge = pge->frwd) ++ X_FRAG(pge)->lenback[dx] = 0; ++ if(i >= len-1) { /* covers our frag too - maybe with 1 gentry showing */ ++ /* our frag will be removed as well, prepare a line to replace it */ ++ gels = ge; ++ gele = age[(f->aidx + i - 1)%clen]; ++ fprintf(stderr, " new Line frag at %p-%p len=%d\n", gels, gele, i); ++ X_FRAG(gels)->len[GEXFI_LINE] = i; ++ for(gei = gels->frwd, j = 1; j < i; gei = gei->frwd, j++) ++ X_FRAG(gei)->lenback[GEXFI_LINE] = j; ++ } else { ++ gex_dump_contour(ge, clen); ++ ge = ge->frwd; ++ continue; ++ } ++ } ++ if(i >= len-1) /* covers our frag - maybe with 1 gentry showing */ ++ goto curve_completely_covered; ++ ++ /* XXX need to do something better for the case when a curve frag ++ * is actually nothing but an artifact of two other curves of ++ * the opposite type touching each other, like on the back of "3" ++ */ ++ ++ /* change the overlapping part to a line */ ++ gels = ge; ++ gele = age[(f->aidx + i - 1)%clen]; ++ /* give preference to local extremums */ ++ if(X_FRAG(gels)->flags & GEXFF_EXTR) { ++ gels = gels->frwd; ++ i--; ++ } ++ if(X_FRAG(gele)->flags & GEXFF_EXTR) { ++ gele = gele->bkwd; ++ i--; ++ } ++ if(gels->bkwd == gele) { ++ /* Oops the line became negative. Probably should ++ * never happen but I can't think of any formal reasoning ++ * leading to that, so check just in case. Restore ++ * the previous state. ++ */ ++ gels = gele; gele = gels->frwd; i = 2; ++ } ++ ++ j = X_FRAG(gels)->lenback[dx] + 1; /* new length */ ++ if(j != k2) { ++ X_FRAG(pge)->len[dx] = j; ++ fprintf(stderr, " cut %s frag at %p len=%d to %p len=%d end overlap with %s\n", ++ gxf_name[dx], pge, k2, gels, j, gxf_name[d]); ++ for(gei = gels->frwd; j < k2; gei = gei->frwd, j++) ++ X_FRAG(gei)->lenback[dx] = 0; ++ } ++ ++ if(gele != ge) { ++ sge = gele; ++ f->len[d] = 0; ++ fprintf(stderr, " cut %s frag at %p len=%d ", gxf_name[d], ge, len); ++ len--; ++ for(gei = ge->frwd; gei != gele; gei = gei->frwd, len--) ++ X_FRAG(gei)->lenback[d] = 0; ++ X_FRAG(gele)->len[d] = len; ++ X_FRAG(gele)->lenback[d] = 0; ++ fprintf(stderr, "to %p len=%d start overlap with %s\n", ++ sge, len, gxf_name[dx]); ++ for(gei = gei->frwd, j = 1; j < len; gei = gei->frwd, j++) ++ X_FRAG(gei)->lenback[d] = j; ++ ++ } ++ if(i > 1) { ++ fprintf(stderr, " new Line frag at %p-%p len=%d\n", gels, gele, i); ++ X_FRAG(gels)->len[GEXFI_LINE] = i; ++ for(gei = gels->frwd, j = 1; j < i; gei = gei->frwd, j++) ++ X_FRAG(gei)->lenback[GEXFI_LINE] = j; ++ } ++ gex_dump_contour(ge, clen); ++ } ++ ++ ge = ge->frwd; ++ } while(ge != cge->next); ++ } ++ ++ /* ++ * Assert that there are no conflicts any more and ++ * for each gentry find the fragment types that start ++ * and continue here. ++ */ ++ ge = cge->next; ++ do { ++ f = X_FRAG(ge); ++ dx = GEXFI_NONE; /* type that starts here */ ++ dy = GEXFI_NONE; /* type that goes through here */ ++ /* GEXFI_EXACTLINE and GEXFI_SERIF are auxiliary and don't ++ * generate any actual lines/curves in the result ++ */ ++ for(d = GEXFI_CONVEX; d<= GEXFI_LINE; d++) { ++ if(f->len[d]) { ++ if(dx >= 0) { ++ fprintf(stderr, "**** Internal error in vectorization\n"); ++ fprintf(stderr, "CONFLICT in %s at %p between %s and %s\n", ++ g->name, ge, gxf_name[dx], gxf_name[d]); ++ dumppaths(g, cge->next, cge->next->bkwd); ++ gex_dump_contour(ge, clen); ++ exit(1); ++ } ++ dx = d; ++ } ++ if(f->lenback[d]) { ++ if(dy >= 0) { ++ fprintf(stderr, "**** Internal error in vectorization\n"); ++ fprintf(stderr, "CONFLICT in %s at %p between %s and %s\n", ++ g->name, ge, gxf_name[dy], gxf_name[d]); ++ dumppaths(g, cge->next, cge->next->bkwd); ++ gex_dump_contour(ge, clen); ++ exit(1); ++ } ++ dy = d; ++ } ++ } ++ f->ixstart = dx; ++ f->ixcont = dy; ++ ge = ge->frwd; ++ } while(ge != cge->next); ++ ++ /* ++ * make sure that the contour does not start in the ++ * middle of a fragment ++ */ ++ ge = cge->next; /* old start of the contour */ ++ f = X_FRAG(ge); ++ if(f->ixstart == GEXFI_NONE && f->ixcont != GEXFI_NONE) { ++ /* oops, it's mid-fragment, move the start */ ++ GENTRY *xge; ++ ++ xge = ge->bkwd->next; /* entry following the contour */ ++ ++ /* find the first gentry of this frag */ ++ pge = age[(f->aidx + clen - f->lenback[f->ixcont])%clen]; ++ ++ ge->prev = ge->bkwd; ++ ge->bkwd->next = ge; ++ ++ cge->next = pge; ++ pge->prev = cge; ++ ++ pge->bkwd->next = xge; ++ if(xge) ++ xge->prev = pge->bkwd; ++ ++ cge->ix3 = pge->bkwd->ix3; cge->iy3 = pge->bkwd->iy3; ++ } ++ ++ /* vectorize each fragment separately ++ * make 2 passes: first handle the straight lines, then ++ * the curves to allow the curver to be connected smoothly ++ * to the straights ++ */ ++ ge = cge->next; ++ do { /* pass 1 */ ++ f = X_FRAG(ge); ++ switch(f->ixstart) { ++ case GEXFI_LINE: ++ len = f->len[GEXFI_LINE]; ++ pge = age[(f->aidx + len - 1)%clen]; /* last gentry */ ++ ++ if(ge->iy3 == ge->bkwd->iy3) { /* frag starts and ends horizontally */ ++ k1 = 1/*Y*/ ; /* across the direction of start */ ++ k2 = 0/*X*/ ; /* along the direction of start */ ++ } else { /* frag starts and ends vertically */ ++ k1 = 0/*X*/ ; /* across the direction of start */ ++ k2 = 1/*Y*/ ; /* along the direction of start */ ++ } ++ ++ if(len % 2) { ++ /* odd number of entries in the frag */ ++ double halfstep, halfend; ++ ++ f->vect[0][k1] = fscale * ge->ipoints[k1][2]; ++ f->vect[3][k1] = fscale * pge->ipoints[k1][2]; ++ ++ halfstep = (pge->ipoints[k2][2] - ge->bkwd->ipoints[k2][2]) ++ * 0.5 / ((len+1)/2); ++ if(f->ixcont != GEXFI_NONE) { ++ halfend = (ge->ipoints[k2][2] - ge->bkwd->ipoints[k2][2]) * 0.5; ++ if(fabs(halfstep) < fabs(halfend)) /* must be at least half gentry away */ ++ halfstep = halfend; ++ } ++ if(X_FRAG(pge)->ixstart != GEXFI_NONE) { ++ halfend = (pge->ipoints[k2][2] - pge->bkwd->ipoints[k2][2]) * 0.5; ++ if(fabs(halfstep) < fabs(halfend)) /* must be at least half gentry away */ ++ halfstep = halfend; ++ } ++ f->vect[0][k2] = fscale * (ge->bkwd->ipoints[k2][2] + halfstep); ++ f->vect[3][k2] = fscale * (pge->ipoints[k2][2] - halfstep); ++ } else { ++ /* even number of entries */ ++ double halfstep, halfend; ++ ++ f->vect[0][k1] = fscale * ge->ipoints[k1][2]; ++ halfstep = (pge->ipoints[k2][2] - ge->bkwd->ipoints[k2][2]) ++ * 0.5 / (len/2); ++ if(f->ixcont != GEXFI_NONE) { ++ halfend = (ge->ipoints[k2][2] - ge->bkwd->ipoints[k2][2]) * 0.5; ++ if(fabs(halfstep) < fabs(halfend)) /* must be at least half gentry away */ ++ halfstep = halfend; ++ } ++ f->vect[0][k2] = fscale * (ge->bkwd->ipoints[k2][2] + halfstep); ++ ++ halfstep = (pge->ipoints[k1][2] - ge->bkwd->ipoints[k1][2]) ++ * 0.5 / (len/2); ++ if(X_FRAG(pge)->ixstart != GEXFI_NONE) { ++ halfend = (pge->ipoints[k1][2] - pge->bkwd->ipoints[k1][2]) * 0.5; ++ if(fabs(halfstep) < fabs(halfend)) /* must be at least half gentry away */ ++ halfstep = halfend; ++ } ++ f->vect[3][k1] = fscale * (pge->ipoints[k1][2] - halfstep); ++ f->vect[3][k2] = fscale * pge->ipoints[k2][2]; ++ } ++ f->vectlen = len; ++ f->flags |= GEXFF_DRAWLINE; ++ break; ++ } ++ } while((ge = ge->frwd) != cge->next); ++ ++ ge = cge->next; ++ do { /* pass 2 */ ++ /* data for curves */ ++ GENTRY *firstge, *lastge, *gef, *gel, *gei, *gex; ++ GENTRY *ordhd; /* head of the order list */ ++ GENTRY **ordlast; ++ int nsub; /* number of subfrags */ ++ GEX_FRAG *ff, *lf, *xf; ++ ++ f = X_FRAG(ge); ++ switch(f->ixstart) { ++ case GEXFI_CONVEX: ++ case GEXFI_CONCAVE: ++ len = f->len[f->ixstart]; ++ firstge = ge; ++ lastge = age[(f->aidx + len - 1)%clen]; /* last gentry */ ++ ++ nsub = 0; ++ gex = firstge; ++ xf = X_FRAG(gex); ++ xf->prevsub = 0; ++ xf->sublen = 1; ++ xf->flags &= ~GEXFF_DONE; ++ for(gei = firstge->frwd; gei != lastge; gei = gei->frwd) { ++ xf->sublen++; ++ if(X_FRAG(gei)->flags & GEXFF_EXTR) { ++ xf->nextsub = gei; ++ for(i=0; i<2; i++) ++ xf->bbox[i] = abs(gei->ipoints[i][2] - gex->bkwd->ipoints[i][2]); ++ nsub++; ++ xf = X_FRAG(gei); ++ xf->prevsub = gex; ++ xf->sublen = 1; ++ xf->flags &= ~GEXFF_DONE; ++ gex = gei; ++ } ++ } ++ xf->sublen++; ++ xf->nextsub = gei; ++ for(i=0; i<2; i++) ++ xf->bbox[i] = abs(gei->ipoints[i][2] - gex->bkwd->ipoints[i][2]); ++ nsub++; ++ ff = xf; /* remember the beginning of the last subfrag */ ++ xf = X_FRAG(gei); ++ xf->prevsub = gex; ++ if(firstge != lastge) { ++ xf->nextsub = 0; ++ xf->sublen = 0; ++ ++ /* correct the bounding box of the last and first subfrags for ++ * intersections with other fragments ++ */ ++ if(xf->ixstart != GEXFI_NONE) { ++ /* ff points to the beginning of the last subfrag */ ++ for(i=0; i<2; i++) ++ ff->bbox[i] -= 0.5 * abs(lastge->ipoints[i][2] - lastge->bkwd->ipoints[i][2]); ++ } ++ ff = X_FRAG(firstge); ++ if(ff->ixcont != GEXFI_NONE) { ++ for(i=0; i<2; i++) ++ ff->bbox[i] -= 0.5 * abs(firstge->ipoints[i][2] - firstge->bkwd->ipoints[i][2]); ++ } ++ } ++ ++ fprintf(stderr, " %s frag %p%s nsub=%d\n", gxf_name[f->ixstart], ++ ge, (f->flags&GEXFF_CIRC)?" circular":"", nsub); ++ ++ /* find the symmetry between the subfragments */ ++ for(gef = firstge, count=0; count < nsub; gef = ff->nextsub, count++) { ++ ff = X_FRAG(gef); ++ gex = ff->nextsub; ++ xf = X_FRAG(gex); ++ gel = xf->nextsub; ++ if(gel == 0) { ++ ff->flags &= ~GEXFF_SYMNEXT; ++ break; /* not a circular frag */ ++ } ++ good = 1; /* assume that we have symmetry */ ++ /* gei goes backwards, gex goes forwards from the extremum */ ++ gei = gex; ++ /* i is the symmetry axis, j is the other axis (X=0 Y=1) */ ++ ff->symaxis = i = (gex->ix3 != gex->bkwd->ix3); ++ j = !i; ++ for( ; gei!=gef && gex!=gel; gei=gei->bkwd, gex=gex->frwd) { ++ if( gei->bkwd->ipoints[i][2] != gex->ipoints[i][2] ++ || gei->bkwd->ipoints[j][2] - gei->ipoints[j][2] ++ != gex->bkwd->ipoints[j][2] - gex->ipoints[j][2] ++ ) { ++ good = 0; /* no symmetry */ ++ break; ++ } ++ } ++ if(good) { ++ if( isign(gei->bkwd->ipoints[j][2] - gei->ipoints[j][2]) ++ != isign(gex->bkwd->ipoints[j][2] - gex->ipoints[j][2]) ) { ++ good = 0; /* oops, goes into another direction */ ++ } ++ } ++ if(good) ++ ff->flags |= GEXFF_SYMNEXT; ++ else ++ ff->flags &= ~GEXFF_SYMNEXT; ++ } ++ ++ for(gef = firstge, count=0; count < nsub; gef = ff->nextsub, count++) { ++ ff = X_FRAG(gef); ++ if((ff->flags & GEXFF_SYMNEXT)==0) { ++ ff->symxlen = 0; ++ continue; ++ } ++ gex = ff->prevsub; ++ if(gex == 0 || (X_FRAG(gex)->flags & GEXFF_SYMNEXT)==0) { ++ ff->symxlen = 0; ++ continue; ++ } ++ ff->symxlen = X_FRAG(gex)->sublen; ++ xf = X_FRAG(ff->nextsub); ++ if(xf->sublen < ff->symxlen) ++ ff->symxlen = xf->sublen; ++ } ++ ++ /* find the symmetry inside the subfragments */ ++ for(gef = firstge, count=0; count < nsub; gef = ff->nextsub, count++) { ++ ff = X_FRAG(gef); ++ ++ if(ff->sublen % 2) { ++ /* we must have an even number of gentries for diagonal symmetry */ ++ ff->symge = 0; ++ continue; ++ } ++ ++ /* gei goes forwards from the front */ ++ gei = gef->frwd; ++ /* gex goes backwards from the back */ ++ gex = ff->nextsub->bkwd; ++ ++ /* i is the direction of gei, j is the direction of gex */ ++ i = (gei->iy3 != gei->bkwd->iy3); ++ j = !i; ++ for( ; gei->bkwd != gex; gei=gei->frwd, gex=gex->bkwd) { ++ if( abs(gei->bkwd->ipoints[i][2] - gei->ipoints[i][2]) ++ != abs(gex->bkwd->ipoints[j][2] - gex->ipoints[j][2]) ) ++ break; /* no symmetry */ ++ i = j; ++ j = !j; ++ } ++ if(gei->bkwd == gex) ++ ff->symge = gex; ++ else ++ ff->symge = 0; /* no symmetry */ ++ } ++ ++ /* find the order of calculation: ++ * prefer to start from long fragments that have the longest ++ * neighbours symmetric with them, with all being equal prefer ++ * the fragments that have smaller physical size ++ */ ++ ordhd = 0; ++ for(gef = firstge, count=0; count < nsub; gef = ff->nextsub, count++) { ++ ff = X_FRAG(gef); ++ ++ for(ordlast = &ordhd; *ordlast != 0; ordlast = &xf->ordersub) { ++ xf = X_FRAG(*ordlast); ++ if(ff->sublen > xf->sublen) ++ break; ++ if(ff->sublen < xf->sublen) ++ continue; ++ if(ff->symxlen > xf->symxlen) ++ break; ++ if(ff->symxlen < xf->symxlen) ++ continue; ++ if(ff->bbox[0] < xf->bbox[0] || ff->bbox[1] < xf->bbox[1]) ++ break; ++ } ++ ++ ff->ordersub = *ordlast; ++ *ordlast = gef; ++ } ++ ++ /* vectorize the subfragments */ ++ for(gef = ordhd; gef != 0; gef = ff->ordersub) { ++ ++ /* debugging stuff */ ++ ff = X_FRAG(gef); ++ fprintf(stderr, " %p-%p bbox[%g,%g] sym=%p %s len=%d xlen=%d\n", ++ gef, ff->nextsub, ff->bbox[0], ff->bbox[1], ff->symge, ++ (ff->flags & GEXFF_SYMNEXT) ? "symnext" : "", ++ ff->sublen, ff->symxlen); ++ ++ dosubfrag(g, f->ixstart, firstge, gef, fscale); ++ } ++ ++ break; ++ } ++ } while((ge = ge->frwd) != cge->next); ++ ++ free(age); ++ ++ } ++ ++ } ++ ++ /* all the fragments are found, extract the vectorization */ ++ pge = g->entries; ++ g->entries = g->lastentry = 0; ++ g->flags |= GF_FLOAT; ++ loopge = 0; ++ skip = 0; ++ ++ for(ge = pge; ge != 0; ge = ge->next) { ++ GEX_FRAG *f, *pf; ++ ++ switch(ge->type) { ++ case GE_LINE: ++ f = X_FRAG(ge); ++ if(skip == 0) { ++ if(f->flags & (GEXFF_DRAWLINE|GEXFF_DRAWCURVE)) { ++ /* draw a line to the start point */ ++ fg_rlineto(g, f->vect[0][0], f->vect[0][1]); ++ /* draw the fragment */ ++ if(f->flags & GEXFF_DRAWCURVE) ++ fg_rrcurveto(g, ++ f->vect[1][0], f->vect[1][1], ++ f->vect[2][0], f->vect[2][1], ++ f->vect[3][0], f->vect[3][1]); ++ else ++ fg_rlineto(g, f->vect[3][0], f->vect[3][1]); ++ skip = f->vectlen - 2; ++ } else { ++ fg_rlineto(g, fscale * ge->ix3, fscale * ge->iy3); ++ } ++ } else ++ skip--; ++ break; ++ case GE_MOVE: ++ fg_rmoveto(g, -1e6, -1e6); /* will be fixed by GE_PATH */ ++ skip = 0; ++ /* remember the reference to update it later */ ++ loopge = g->lastentry; ++ break; ++ case GE_PATH: ++ /* update the first MOVE of this contour */ ++ if(loopge) { ++ loopge->fx3 = g->lastentry->fx3; ++ loopge->fy3 = g->lastentry->fy3; ++ loopge = 0; ++ } ++ g_closepath(g); ++ break; ++ } ++ } ++ for(ge = pge; ge != 0; ge = cge) { ++ cge = ge->next; ++ free(ge->ext); ++ free(ge); ++ } ++ dumppaths(g, NULL, NULL); ++ ++ /* end of vectorization logic */ ++ } else { ++ /* convert the data to float */ ++ GENTRY *ge; ++ double x, y; ++ ++ for(ge = g->entries; ge != 0; ge = ge->next) { ++ ge->flags |= GEF_FLOAT; ++ if(ge->type != GE_MOVE && ge->type != GE_LINE) ++ continue; ++ ++ x = fscale * ge->ix3; ++ y = fscale * ge->iy3; ++ ++ ge->fx3 = x; ++ ge->fy3 = y; ++ } ++ g->flags |= GF_FLOAT; ++ } ++ ++ free(hlm); free(vlm); free(amp); ++} ++ ++#if 0 ++/* print out the bitmap */ ++printbmap(bmap, xsz, ysz, xoff, yoff) ++ char *bmap; ++ int xsz, ysz, xoff, yoff; ++{ ++ int x, y; ++ ++ for(y=ysz-1; y>=0; y--) { ++ putchar( (y%10==0) ? y/10+'0' : ' ' ); ++ putchar( y%10+'0' ); ++ for(x=0; x=0; y--) { ++ for(x=0; x> 8))) ++#define ntohl(x) \ ++ ((ULONG)((((ULONG)(x) & 0x000000ffU) << 24) | \ ++ (((ULONG)(x) & 0x0000ff00U) << 8) | \ ++ (((ULONG)(x) & 0x00ff0000U) >> 8) | \ ++ (((ULONG)(x) & 0xff000000U) >> 24))) ++#endif +diff -ruN xserver-old/hw/xprint/extras/ttf2pt1/CHANGES.html xserver/hw/xprint/extras/ttf2pt1/CHANGES.html +--- xserver-old/hw/xprint/extras/ttf2pt1/CHANGES.html 1970-01-01 10:00:00.000000000 +1000 ++++ xserver/hw/xprint/extras/ttf2pt1/CHANGES.html 2006-06-27 13:10:26.000000000 +1000 +@@ -0,0 +1,805 @@ ++ ++ ++ ++TTF2PT1 - CHANGES history ++ ++ ++ ++

++TTF2PT1 - CHANGES history ++

++ ++ ++ ++

++3.4.4-SNAP-030526 ++

++ ++ ++New features: ++
    ++
  • Improved the auto-vectoring (-OV) alrogithm. ++
++ ++Bug fixes: ++
    ++
  • Fix to build all the features on Windows MS C++, by Tomoo Amano. ++
++ ++

++3.4.3 -- December 2, 2002 ++

++ ++ ++New features: ++
    ++
  • scripts/forceiso got an optional argument to select the ++ format of the names for glyphs without standard Latin-1 names. ++
++ ++Bug fixes: ++
    ++
  • Changed the glyph names in scripts/forceiso to match those in ttf2pt1. ++
  • Included the missing directory app/TeX. ++
++ ++

++3.4.2 -- August 30, 2002 ++

++ ++ ++New features: ++
    ++
  • New map for T2A_compat encoding (for Cyrillic LaTeX) by Mikhail ++ Umorin. ++
  • Scripts supporting font conversion for CJK-LaTeX, by Mike Fabian ++ from SuSE. ++
++ ++Bug fixes: ++
    ++
  • Explicit owner/group/permissions are used to install directories. ++
  • In scripts/convert fixed the addition of encoding name to the font ++ name for the external encoding maps, was missing "/" at the start. ++
  • Fixed the divergence between two copies of UniqueID. ++
  • Fixed the recovery after defective empty contours. ++
++ ++

++3.4.1 -- June 13, 2002 ++

++ ++ ++New features: ++
    ++
  • Added Autotrace support for the bitmap fonts (-OZ). It's horrible. ++
  • Added vectorization of bitmap fonts (-OV) - functionally the same thing as ++ autotrace but home-grown. Works mostly decently but still with large ++ space for impprovement. ++
  • Relaxed the conditions for warnings about long glyphs. ++
++ ++Bug fixes: ++
    ++
  • Fix by Rob Kolstad for a crash in the new outline smoothing ++ code (on small thin contours) and diagnostic for another crash. ++
  • Fix by Holger Huesing for a crash on degenerate contours. ++
  • Fix for bitmaps of zero dimensions. ++
  • The BDF reader does not fail on redefintion of the properties. ++
  • Fix for reading of BDF glyphs with 0 size. ++
  • Fix for a hang when guessing the boldness of some fonts. ++
  • Fix by Adriano Konzen for scaling coefficients in composite glyphs. ++
++ ++

++3.4.0 -- November 24, 2001 ++

++ ++ ++New features: ++
    ++
  • Parser for the BDF bitmap fonts. ++
  • Vastly improved the smoothing of the outlines. ++
  • The options are saved as a comment in the output file. ++
  • New script other/showdf for visual comparison of the fonts. ++
  • New option -G to select the file types to generate. ++
  • Creation of the dvips encoding files (by Rigel). ++
  • More glyphs in the Chinese maps (by Rigel). ++
  • Made the assignment of ISO8859/1 glyph names to the glyphs in the ++ fonts without PostScript names in them dependent on the original ++ encoding: no change for the 8-bit encodings, for the Unicode encoding ++ the names are assigned to the glyph with the codes 0-255 in Unicode, ++ and for the other 16-bit encodings the 8859/1 names are not assigned ++ at all. ++
++ ++Bug fixes: ++
    ++
  • Added a check for spaces in the PostScript font name in the FreeType ++ parser. ++
  • Made "-" a valid character in the glyph names. ++
  • Fixed handling of the Unicode names returned by FreeType, though ++ not perfectly. ++
  • Changed the build for FreeType-2.0.4. ++
  • Fixed the handling and printing of bad glyph names. ++
  • Fixed the bug with duplicated glyph names when more than 256 glyphs are ++ extracted from a font that has no PostScript glyph names defined. ++
  • Added ability to map a glyph to more than one code when unisng the ++ native parser (-pttf). ++
++ ++

++3.3.5 -- September 12, 2001 ++

++ ++ ++Packaged by Sergey Babkin. ++

++ ++Bug fixes: ++

    ++
  • Fixed the scaling of Ascender and Descender in the AFM file. ++
  • Fixed the brekage of "-l adobestd". ++
++ ++

++3.3.4 -- June 4, 2001 ++

++ ++ ++Packaged by Sergey Babkin. ++

++ ++New features: ++

    ++
  • Cyrillic (full set of glyphs) language tables (by Zvezdan Petkovic). ++ Now the languages "russian" and "bulgarian" are provided for compatibility ++ only, use the common language "cyrillic" instead. ++
  • More information in FONTS on using Cyrillic fonts with ++ Netscape (by Zvezdan Petkovic) ++
  • In the Netscape print filter added removal of the clipping path command: ++ otherwise Netscape tends to cut off a large piece of the rightmost column ++ of the tables. ++
  • One more script for printing from Netscape (by Zvezdan Petkovic). ++
  • Added selection of the base TTF encoding by pid/eid in the external maps. ++
  • Improved the recognition of substituted stems for intersecting contours. ++
  • Improved the substituted hints to make the horizontal positioning of ++ the points at the same height more uniform at small pixel sizes. ++
  • Made the algorithm for calculation of standard stem widths more ++ selective. ++
  • Added link to the GnuWin32 project. ++
++ ++Bug fixes: ++
    ++
  • TH: Print out metrics of un-encoded glyphs even without "-a" option. ++
  • Added missing "/" in Fontmap generation in convert (by Zvezdan Petkovic). ++
  • Removed unneccessary "\n" in messages in x2gs. ++
  • Removed the broken overoptimisation of "0 0 rmoveto". ++
  • Removed the useless warnings about multiple codes for a glyph. ++
  • Changed the FreeType2 include directory in the Makefile to match the ++ FreeType's default. ++
++ ++

++3.3.3 -- March 4, 2001 ++

++ ++ ++Packaged by Sergey Babkin. ++

++ ++New features: ++

    ++
  • TH: Added printing of front-end parser in the header of the font file. ++
  • Tested build with FreeType 2.0 Release. ++
++ ++Bug fixes: ++
    ++
  • Changed the installation script which on some versions of bash ++ copied all files into the share directory. ++
  • Fixed the close sequences of html2man comments in the HTML files, ++ now they should display correctly with lynx. ++
  • Restored the ability to include un-encoded characters into the ++ customised maps (those with codes over 255). ++
  • Fixed the Unicode mapping of the Cyrillic letters "YO" and "yo" ++ (by Yuri Shemanin). ++
  • Fixed the spurious aborts when the conversion-by-plane function ++ gets called for auto-guessing of encoding. ++
++ ++

++3.3.2 -- November 20, 2000 ++

++ ++ ++Packaged by Sergey Babkin. ++

++ ++New features: ++

    ++
  • Added generation of man pages. ++
  • Added "make install" and "make uninstall". ++
  • Added language option "-l plane". ++
  • In other/showg added better support of comparison files: ++
      ++
    • printing of the comparison file legend; ++
    • guessing of missing glyph names in a comparison file by code; ++
    • bounding boxes of all comparison files are used for page layout. ++
    ++
  • Added ability to use external t1asm instead of compiling it in. ++
  • Renamed the fonts installation guide from INSTALL*html to FONTS*html ++ to avoid confusion with installation of ttf2pt1 itself. ++
++ ++Bug fixes: ++
    ++
  • Removed erroneous extra fclose(pfa_file). ++
  • Fixed random memory corruption that manifested with crash on Linux ++ when converting fonts not containing glyph names. ++
  • Removed from the output file the comments that confused dvips. Changed ++ other/showg to work without them. ++
  • In other/showg added better checks for missing glyphs, now it ++ gives warnings about them and the output file does not crash PostScript. ++
++ ++Other: ++
    ++
  • ttf2pfa is no longer included, people interested in history ++ should look for it in the older versions. ++
++ ++

++3.3.1 -- October 22, 2000 ++

++ ++ ++Packaged by Sergey Babkin. ++

++ ++New features: ++

    ++
  • Added front-end parser based on the FreeType-2 library. See Makefile ++for build instructions. ++
  • Changed the handling of encodings to accomodate the FreeType model. ++
  • Further cleaned up the front-end parser interface. ++
++ ++Bug fixes: ++
    ++
  • Fixed a bug that caused core dump on Alpha machines. ++
  • Fixed a bug in the outline smoothing that occasionally caused core dump. ++
  • Cleaned up warnings from picky compilers ++
  • Fixed more bugs in the Windows port (by Stefan Bauer). ++
  • Fixed the RPM spec file (suggested by Brian Armstrong). ++
++

++ ++

++3.3.0 -- September 22, 2000 ++

++ ++ ++Packaged by Sergey Babkin. ++

++ ++New features: ++

    ++
  • Converted most of the outlines' processing to floating point ++arithmetic. ++
  • Added splitting of curves crossing the quadrant boundaries (no gross ++damage is done any more to the Marvosym font and others like it). ++
  • Added modular interface for front-end font parsers and option to control ++their selection at run time. ++
  • Grouped the outline processing control options into one to reduce the ++options namespace pollution. ++
  • Thomas moved the Chinese maps into a separate module, chinese-maps. ++
  • Thomas added option -V to print version number. In addition, the version ++number is put in the header of the font file. ++
  • Added long option names (suggested by Thomas). ++
  • Added support for multi-level composite glyphs. ++
  • TH: Made <fontname> command-line argument optional; default to <ttf-file> ++with suffix replaced. ++
  • In other/showg added more ways to specify glyphs and the comparison option. ++
++ ++Bug fixes: ++
    ++
  • Fixed the VC++ batch file, added batch file for Cygnus GCC on Windows. ++
  • Removed parentheses from the Version string in AFM files because it does ++not help StarOffice anyway. StarOffice 5.2 has been reported to have this ++bug fixed. Added paragraph on StarOffice in FONTS.html. ++
  • Made messages on the '?' option parameter more meaningful (by Johan Vromans). ++
  • Changed the latin1 encoding table to include the Euro sign, Z and z with ++caron (by Thomas Henlich). ++
  • Improved the smoothing code which occasionally had problems with ++joining curves. Also fixed a few minor bugs in it. ++
++ ++

++3.22 -- May 23, 2000 ++

++ ++ ++Packaged by Sergey Babkin. ++

++ ++New features: ++

    ++
  • Included windows support by Frank Siegert (somewhat amended) ++
  • Added control over verbosity of warnings. ++
  • Added arguments and initialization functions to the language ++translation routines. ++
  • Added support of planes determined by arguments to the external ++maps. ++
  • Added compact external maps format (primarily for Eastern fonts). ++
  • Added external maps for Chinese GBK and Big5 encodings (converted ++from ttf2pfb) as well as maps for other Chinese encodings by Wang Lei. ++
  • Added the idea of buckets to speed up the search in external maps. ++
  • Changed the grouping algorithm for substituted hints: now it creates ++a bit bigger files but requires smaller hint stack when being rendered. ++
  • Added maximal limit of hint stack depth, glyphs requiring bigger ++stack get generation of substituted hints disabled. This makes substituted ++hints safe to use, no more lost glyphs due to hint stack overflow. ++
  • Added the font dump program other/dumpf. ++
  • Changed the testing HTML generator other/lst.pl to use tables. ++
  • Added debugging script other/cntstems.pl to count required hint ++stack depth for the glyphs. ++
++ ++Bug fixes: ++
    ++
  • Fixed printing of UID in script/trans. Changed the auto-generated UID to ++be in range 4000000-4999999 which is reserved by Adobe for private use. ++
  • Fixed handling of "cleartomark" in built-in t1asm. ++
  • Added handling of "can't happen" case in straighten() routine ++which actually happened on strange fonts and caused failure on assertion. ++
  • Made it always include the glyph .notdef in the resulting font. ++
  • Placed the version string in AFM file in parentheses, hopefully ++that would fix the problem with StarOffice. ++
  • Improved the smoothing code which occasionally had problems with ++joining curves. ++
++ ++

++3.21 -- March 1, 2000 ++

++ ++ ++Sergey Babkin: committed the changes by Petr Titera and ++my bugfixes. ++

++ ++New features: ++

    ++
  • New Unicode map format with glyph names, by Petr Titera. ++
  • Option to force the Unicode encoding by Petr Titera ++ (I changed it to work on any MS encoding, not only Symbol). ++
  • Slightly tweaked the calculation of hints, should be better now. ++
++ ++Bug fixes: ++
    ++
  • The unicode-sample.map with description of the map formats ++ was lost in the release process, restored and enhanced. ++
  • Renamed the table ISOLatin1Encoding to Fmt3Encoding to reflect ++ the way it is used. Saved the original one for reference ++ purposes. In the new table renamed "quoteright" to "quotesingle" ++ as Thomas Henlich suggested (and he were right). ++
  • In the ISOLatinEncoding table renamed the glyph "grave" ++ at octal 0140 to "quoteleft", "quotesingle" at octal 047 to ++ "quoteright" to conform to the standard as suggested by ++ Martin Trautner). ++
  • Fixed bug in scripts/trans that corrupted the UniqueID record ++ in the translated fonts. ++
  • Fixed bug in interaction of substituted hints with BlueZones. ++ Now the fonts with hint substitution seem to be always at least ++ not worse than without it (well, when they fit in the X11 ++ file size limit). ++
++ ++ ++

++3.2 -- January 15, 2000 ++

++ ++ ++Sergey Babkin: combined my changes with the changes by ++Thomas Henlich. The result deserves a not-so-minor version ++increase. ++

++ ++New features: ++

    ++
  • Support of the external Unicode re-encoding maps ++ (by Thomas). ++
  • Support for inclusion of all the glyphs from the ++ source file into the resulting file (inspired by ++ Thomas but I re-implemented it to remove the limitation ++ of his implementation: not more than 1024 glyphs). ++
  • The hints substitution. It's an experimental feature ++ yet and needs further work. ++
  • Support for UniqueID and its auto-generation. ++
  • Support for the name-based conversions from Unicode ++ in general and the adobestd "language" in particular. ++
  • Started the split of the source code into multiple ++ files. This needs more work to do it in a cleaner ++ way. ++
  • Better framework for the debugging printout ++ in the converter. ++
  • Utilities to install the fonts in Netscape ++ Navigator/Communicator 4.x. ++
  • Patches for bigger font files in the X11 rasterizer. ++
  • Linux RPM spec-file (by Johan Vromans). ++
  • Added the COPYRIGHT file (BSD-style, as we discussed ++ on the mailing list earlier) and the CHANGES file. ++
  • Creation of the .pfb files from the convert ++ script. ++
  • Changed the .notdef-s in the built-in ++ ISOLatin1Encoding table to some valid names (by Thomas). ++ Thomas also suggested replacing `quoteright' by ++ `quotesingle' but this seems to be against the ++ Adobe ISOLatin1 table. ++
  • New aliases windows-1251 and cp-866 for ++ the Russian encodings: those are expected by Netscape ++ navigator. ++
  • The font comparison program other/cmpf. ++
  • The "magnifying glass" program for glyph outlines: ++ other/showg. ++
  • Other updates of the tools in the `other' subdirectory. ++
  • Added a link to T1LIB in README. ++
  • A few new options in convert.cfg. ++
++ ++Bux fixes: ++
    ++
  • A bug in the outline smoothing code that corrupted some ++ of the fonts (for example, Microsoft Verdana). ++
  • Added explicit `cleartomark' to the end of file, ++ this seems to be compatible with both old and new version ++ of t1asm (suggested by Thomas). ++
  • Added the FontEncoding statement to the AFM files ++ (techincally this was not a bug because this statement ++ is optional but some programs want it). ++
  • A coredump when the converter tried to print a warning ++ (rather ironically) about a weird glyph width. ++
  • Changed the underscores in the font names to dashes (this ++ has been proposed long time ago by Johan Vromans). ++
  • No more glyph names of font names staring with a digit. ++
  • The names of the fonts in font and AFM files are now the ++ same as in the generated Ghostscript Fontmap file.
    ++ Warning: the names in Fontmap have been ++ changed. ++
  • The forceiso script does not corrupt the character ++ and kerning pairs counts any more, and is optional at all. ++
  • Fix for a loop going to 254 instead of 255 (by Thomas). ++
  • Added ':' in the font header (by Thomas). ++
  • A coredump when wrong language name is given (this was ++ also fixed by Thomas but I noticed it too late, after ++ I already fixed it by myself). ++
  • Fixed the links to the Adobe documents in README. ++
++ ++ ++

++3.13 -- October 18, 1999 ++

++ ++ ++Packaged by Sergey Babkin. ++

++ ++New features: ++

    ++
  • New option -v for automatic re-scaling based on the vertical size of the font ++
  • Changed the code to use getopt() instead of a home-made version of it. ++
  • Latin2 language support by Szalay Tamas. ++
++ ++Bux fixes: ++
    ++
  • Fix for the bug that made possible calls of malloc(0). ++
  • Refinement of the option -w to prevent extra wide spacing ++
++ ++

++3.12 -- October 2, 1999 ++

++ ++ ++Packaged by Sergey Babkin. ++

++ ++New features: ++

    ++
  • Added support for the Bulgarian language (actually, for now just an alias ++of Russian). ++
  • Added option -w that tries to make sure that the character widths are not ++too narrow. ++
  • Added the concept of aliased encodings. ++
  • Now the conversion scripts create and install the .afm files too. ++
  • The conversion script removes the intermediate files after installation. ++
  • Added tunables to the conversion script. ++
  • Installation of the Ghostscript fonts can now be done automatically ++together with the X11 fonts. ++
++ ++Bux fixes: ++
    ++
  • (FINALLY!!!) A correct fix for the infamous Red Hat 6.0 stdio "feature". ++
  • A number of little bugs discovered by a picky SGI compiler (well, maybe ++some day I'll try to run it through the UnixWare lint and see what happens). ++
  • A diagnostic message about the empty encodings in the convert script was ++made less cryptic and a bug in the awk sub-script was fixed. ++
  • The .afm creation code now considers the option -t. ++
++ ++

++3.11 -- May 24, 1999 ++

++ ++ ++Packaged by Sergey Babkin. ++

++ ++New features: ++

    ++
  • It includes the Turkish (Latin5, ISO8859/9) ++language support by Turgut Uyar and Baltic (ISO8859/4) languages support by ++Rihardas Hepas. ++
  • Also the installation script got updated: the configuration parameters ++are moved to a separate file and the generated fonts.dir files should now be ++compatible with Xfsft. ++
++ ++

++3.1 -- March 28, 1999 ++

++ ++ ++Packaged by Sergey Babkin. ++

++ ++New features: ++

    ++
  • Improved the interaction of the character-level hints and font-level hints ++
++ ++ ++

++3.0 -- March 6, 1999 ++

++ ++ ++Packaged by Sergey Babkin. ++

++ ++New features: ++

    ++
  • Added HTML documents. ++
++ ++

++3.0beta2 -- February 14, 1999 ++

++ ++ ++Packaged by Sergey Babkin. ++

++ ++New features: ++

    ++
  • Added ability to print the .afm file instead of the font to STDOUT. ++
  • Added the guessing of the /ForceBold parameter that proved to be useful. ++
++ ++Bux fixes: ++
    ++
  • Removed the force-fixed option that proved to be troublesome. ++
++ ++

++3.0beta1 -- December 11, 1998 ++

++ ++ ++By Andrew Weeks. ++

++ ++New features: ++

    ++
  • Added option (passed to t1asm) to create a compressed binary ++version of the font (A PFB file). ++
++ ++Bux fixes: ++
    ++
  • Versions of handle_post and handle_cmap that deal with some ++problems with buggy fonts. ++
  • Minor Bug Fixes. ++
++ ++

++3.0beta-afm -- December 5, 1998 ++

++ ++ ++By Thomas Henlich. ++

++ ++New features: ++

    ++
  • Integration of AFM file creation. ++
++ ++

++3.0beta -- November 15, 1998 ++

++ ++ ++By Sergey Babkin. ++

++ ++New features: ++

    ++
  • Added the auto-calculation of the italic angle. ++
++ ++Bux fixes: ++
    ++
  • Fixed a couple of bugs. ++
++ ++

++3.0alpha -- October 19, 1998 ++

++ ++ ++By Sergey Babkin. ++

++ ++New features: ++

    ++
  • Improved (although still not perfect) handling of ++scaling in composite glyphs ++
  • Automatic correction of outlines to make them more ++smooth (to correct both rounding errors introduced ++during conversion and present in the original font) ++
  • Automatic generation of hints (still has lots of ++space for improvement) ++
  • Automatic generation of BlueValues etc. ++
++ ++Bux fixes: ++
    ++
  • Scaling of fonts to 1000x1000 M-square required by ++Type1 standard ++
  • Printing out the contours in reverse direction, because ++TTF directions are different from Type1 ones (that was ++the major reason why the fonts generated by ++version 2.2 were rendered so badly in small sizes) ++
++ ++

++June 22, 1998 (AKA 2.2) ++

++ ++ ++By Thomas Henlich. ++

++ ++Bux fixes: ++

    ++
  • "width" should be "short int" because otherwise: ++characters with negative widths (e.g. -4) become *very* wide (65532) ++
  • The number of /CharStrings is numglyphs and not numglyphs+1 ++
++ ++

++February 13, 1998 ++

++ ++ ++By Mark Heath. ++

++ ++Bux fixes: ++

    ++
  • An original Bug Reported by Frank, which was just incorrect syntax in the ++Type 1 header, managed to creep back into the Feb 04 Version. This has been ++Fixed in the Feb 13 Version. ++
++ ++

++February 4, 1998 ++

++ ++ ++By Mark Heath. ++

++ ++Bux fixes: ++

    ++
  • A workaround was implemented in ttf2pfa by altering the matrix. I suspect ++I will have to calculate the correct values, as matrix ops are probably not ++allowed in Type 1 format. ++
++ ++ ++

++The older history seems to be lost. ++

++ ++ ++(S.B.: The story how we got the version numbers is rather funny. Initially ++there were no version umbers, the releases were marked by dates. The version ++from June 22 1998 untarred itself into a directory "ttf2pt1-22". When I ++made my changes to it I assumed that this was the version number meaning ++version 2.2. Since Mark asked me to send him a complete archive I supposed ++that I have to bump the version number. And I bumped it to 3.0 because the ++changes were rather extensive. Mark silently agreed and released the new ++version as 3.0. And that's the end of the story about how we got this ++Microsoft-like high version number.) ++ ++ ++ ++ +diff -ruN xserver-old/hw/xprint/extras/ttf2pt1/COPYRIGHT xserver/hw/xprint/extras/ttf2pt1/COPYRIGHT +--- xserver-old/hw/xprint/extras/ttf2pt1/COPYRIGHT 1970-01-01 10:00:00.000000000 +1000 ++++ xserver/hw/xprint/extras/ttf2pt1/COPYRIGHT 2006-06-27 13:10:26.000000000 +1000 +@@ -0,0 +1,87 @@ ++The following copyright notice applies to all the files provided ++in this distribution unless explicitly noted otherwise ++(the most notable exception being t1asm.c). ++ ++ Copyright (c) 1997-2002 by the AUTHORS: ++ Andrew Weeks ++ Frank M. Siegert ++ Mark Heath ++ Thomas Henlich ++ Sergey Babkin , ++ Turgut Uyar ++ Rihardas Hepas ++ Szalay Tamas ++ Johan Vromans ++ Petr Titera ++ Lei Wang ++ Chen Xiangyang ++ Zvezdan Petkovic ++ Rigel ++ All rights reserved. ++ ++ Redistribution and use in source and binary forms, with or without ++ modification, are permitted provided that the following conditions ++ are met: ++ 1. Redistributions of source code must retain the above copyright ++ notice, this list of conditions and the following disclaimer. ++ 2. Redistributions in binary form must reproduce the above copyright ++ notice, this list of conditions and the following disclaimer in the ++ documentation and/or other materials provided with the distribution. ++ 3. All advertising materials mentioning features or use of this software ++ must display the following acknowledgement: ++ This product includes software developed by the TTF2PT1 Project ++ and its contributors. ++ ++ THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ++ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ++ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ++ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE ++ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ++ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ++ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ++ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ++ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ++ SUCH DAMAGE. ++ ++For the approximate list of the AUTHORS' responsibilities see the ++project history. ++ ++Other contributions to the project are: ++ ++Turgut Uyar ++ The Unicode translation table for the Turkish language. ++ ++Rihardas Hepas ++ The Unicode translation table for the Baltic languages. ++ ++Szalay Tamas ++ The Unicode translation table for the Central European languages. ++ ++Johan Vromans ++ The RPM file. ++ ++Petr Titera ++ The Unicode map format with names, the forced Unicode option. ++ ++Frank M. Siegert ++ Port to Windows ++ ++Lei Wang ++Chen Xiangyang ++ Translation maps for Chinese fonts. ++ ++Zvezdan Petkovic ++ The Unicode translation tables for the Cyrillic alphabet. ++ ++Rigel ++ Generation of the dvips encoding files, modification to the Chinese maps. ++ ++I. Lee Hetherington ++ The Type1 assembler (from the package 't1utils'), its full copyright ++ notice: ++ Copyright (c) 1992 by I. Lee Hetherington, all rights reserved. ++ Permission is hereby granted to use, modify, and distribute this program ++ for any purpose provided this copyright notice and the one below remain ++ intact. ++ +diff -ruN xserver-old/hw/xprint/extras/ttf2pt1/cygbuild.sh xserver/hw/xprint/extras/ttf2pt1/cygbuild.sh +--- xserver-old/hw/xprint/extras/ttf2pt1/cygbuild.sh 1970-01-01 10:00:00.000000000 +1000 ++++ xserver/hw/xprint/extras/ttf2pt1/cygbuild.sh 2006-06-27 13:10:26.000000000 +1000 +@@ -0,0 +1,8 @@ ++: ++# this file should be run from Cygnus BASH ++# file to build ttf2pt1 with Cygnus GCC on Windows ++# don't forget to copy CYGWIN1.DLL into C:\WINDOWS ++ ++gcc -o ttf2pt1 -DWINDOWS ttf2pt1.c pt1.c t1asm.c ttf.c -lm ++gcc -o t1asm -DWINDOWS -DSTANDALONE t1asm.c ++ +diff -ruN xserver-old/hw/xprint/extras/ttf2pt1/FONTS.hpux.html xserver/hw/xprint/extras/ttf2pt1/FONTS.hpux.html +--- xserver-old/hw/xprint/extras/ttf2pt1/FONTS.hpux.html 1970-01-01 10:00:00.000000000 +1000 ++++ xserver/hw/xprint/extras/ttf2pt1/FONTS.hpux.html 2006-06-27 13:10:26.000000000 +1000 +@@ -0,0 +1,197 @@ ++ ++ ++ ++How to install new Type1 fonts on an HP-UX 10.20 machine ++ ++ ++ ++Sergey A. Babkin ++
++ ++<babkin@bellatlantic.net> or <sab123@hotmail.com> ++

++ ++ ++

++How to install new Type1 fonts on an HP-UX 10.20 machine ++

++ ++ ++1. Add the font files to /usr/lib/X11/fonts/type1.st/typefaces. ++

++ ++2. Add the font descriptions to ++/usr/lib/X11/fonts/type1.st/typefaces/fonts.scale. Run `mkfontdir' ++in /usr/lib/X11/fonts/type1.st/typefaces. In the descriptions ++you have to specify the font manufacturer as `misc', like: ++

++ ++ ++  -misc-courier-... ++ ++

++ ++3. Copy /usr/lib/X11/fonts/type1.st/typefaces/fonts.dir to ++/usr/lib/X11/fonts/type1.st/licenses/STSYSTEM/DISPLAYS/fonts.dir. ++Better yet, create a symbolic link. ++

++ ++4. For each font encoding you are going to use create a description ++file in /usr/lib/X11/fonts/stadmin/type1/charsets. Of course, if you ++are going to use the same fonts in several encodings, the best way ++would be to create fair descriptions of charsets and really store ++only one encoding in typefaces, all the others will be produced ++automatically. That's not difficult at all. ++But the simplest way is to just copy the file cp.iso8859-1 ++to cp.<your-encoding-name>, like cp.koi8-r. ++

++ ++5. Restart you X server and/or font server. ++

++ ++

++What if you don't have the `root' privileges ? ++

++ ++ ++You still can run the font server and configure your X server ++to get the fonts from it. ++

++ ++Further let's suppose that the name on which you are going ++to run the font server is named `somehost'. Login to it ++and configure the font server. ++

++ ++First, choose some unused port. Numbers around 9000 are a good ++choice. Verify that this port is not used by somebody else ++by entering ++

++ ++

++ netstat -naf inet |grep 9000 ++
++ ++and look what happens. If you get nothing, that's good, this ++port is unused. If you get some lines of data, try abother port. ++

++ ++Go to you home directory $HOME and create some directory for ++your font server, say, $HOME/fs. Copy the directory structure ++of /usr/lib/X11/fonts/type1.st into $HOME/fs, so that in result ++you get $HOME/fs/type1.st/<whatever was there>. Copy the directory ++structure of /usr/lib/X11/fonts/stadmin/type1/charsets into $HOME/fs, ++so that in result you get $HOME/fs/charsets/<whatever was there>. ++Install the new fonts in these directorues as described above. ++

++ ++Then create the fontserver configuration file, say, $HOME/fs/xfs.cfg. ++The sample contents (supposing that my $HOME is equal to /home/babkin) ++is: ++

++ ++ ++


++ ++# font server configuration file ++
++# $XConsortium: config.cpp,v 1.7 91/08/22 11:39:59 rws Exp $ ++
++ ++
++rasterizers = /usr/lib/X11/fs/ufstrast.sl,/usr/lib/X11/fs/iforast.sl ++
++ ++
++clone-self = off ++
++use-syslog = off ++
++catalogue = /home/babkin/fs/type1.st ++
++# in decipoints ++
++default-point-size = 120 ++
++default-resolutions = 100,100,75,75 ++
++port=9000 ++
++error-file=/home/babkin/fs/fs.err ++
++
++ ++

++ ++Then create the script to start your font server, say, $HOME/fs/runme: ++

++ ++ ++


++ ++TYPE1_CODEPAGE_DIR=$HOME/fs/charsets ++
++export TYPE1_CODEPAGE_DIR ++
++kill `ps -ef | grep $HOME/\[f\]s/xfs.cfg | awk '{print $2}'`; ++
++nohup xfs -config $HOME/fs/xfs.cfg & ++
++
++ ++

++ ++Don't forget to make $HOME/fs/runme executable. Then you can ++execute it manually or from you .profile. ++

++ ++After you get your font server running, just execute the following ++command (with proper host name and port number) in your X session ++

++ ++

++ xset fp+ tcp/somehost:9000 ++
++ ++to get the access to your private font server. You can add this ++information to the configuration data of your X server or just ++put it also into your .profile. In the latter case the best way ++to do that would be like: ++

++ ++ ++


++ ++... ++
++$HOME/fs/runme ++
++sleep 2 # give it some time to start ++
++xset fp+ tcp/somehost:9000 ++
++... ++
++
++ ++

++ ++ +diff -ruN xserver-old/hw/xprint/extras/ttf2pt1/FONTS.html xserver/hw/xprint/extras/ttf2pt1/FONTS.html +--- xserver-old/hw/xprint/extras/ttf2pt1/FONTS.html 1970-01-01 10:00:00.000000000 +1000 ++++ xserver/hw/xprint/extras/ttf2pt1/FONTS.html 2006-06-27 13:10:26.000000000 +1000 +@@ -0,0 +1,708 @@ ++ ++ ++ ++The ttf2pt1 font installation guide ++ ++ ++ ++Sergey A. Babkin ++
++ ++<babkin@bellatlantic.net> or <sab123@hotmail.com> ++

++ ++ ++ ++ ++

++THE FONT INSTALLATION GUIDE ++
++for the TTF to Type1 converter and fonts generated by it ++

++ ++ ++There is historically a number of problems with the support of the 8-bit ++character encodings. This installation guide pays a lot of attention ++to the 8-bit issues, because these issues are responsible for the ++most of troubles during the installation of fonts. But they are ++not the only things covered in this guide, so it's worth reading ++even if all you need is plain ASCII. For convenience of reading ++I have marked the paragraphs dealing solely with 8-bit problems ++with characters *8*. ++

++ ++To simplify this installation the distribution package of the ++converter contains a number of scripts written in shell and ++Perl. So, to run them you will need a shell interpreter (Bourne-shell, ++POSIX-shell, Korn-shell are OK, ba-shell is probably also OK but not ++tested yet). The Perl scripts were tested with Perl5 but probably ++should work with Perl4 too. All the scripts are located in the ++`scripts' subdirectory. ++

++ ++This guide considers the following issues of installation of the ++fonts: ++

++ ++ ++

++

++ ++ ++

++X11 ++

++ ++ ++ ++ ++ ++To simplify the conversion a set of scripts is provided with ttf2pt1. ++They are collected in the `scripts' subdirectory. ++

++ ++ ++`Convert' is the master conversion script provided with ttf2pt1. ++When installed into a public directory it's named `ttf2pt1_convert' ++to avoid name collisions with the other programs. ++

++ ++ ++It's called as: ++

++ ++ ++ ++ ++

++ convert [config-file] ++
++ ++ ++If the configuration file is not specified as an argument then the file ++`convert.cfg' in the current directory is used. This file contains ++a set of configuration variables. The distribution contains a sample file ++file `convert.cfg.sample'. Please copy it to `convert.cfg', ++look inside it and change the configuration variables. The more stable ++configuration variables, such as the path names of the scripts and ++encoding files are located in `convert' itself, they are ++automatically updated when installing ttf2pt1. ++

++ ++Put all the TTF fonts you want to convert into some directory (this ++may be just the directory that already contains all the Windows ++fonts on a mounted FAT filesystem). If you have fonts in different ++source encoding then put the fonts in each of the encodings ++into a separate directory. Up to 10 source directories are ++supported. If you (in a rather unlikely case) have more source ++directories then you can make two separate runs of the converter, ++converting up to 10 directories at a time. ++

++ ++The variables in the configuration file are: ++

++ ++ ++ ++SRCDIRS - the list of directories (with absolute paths) with ++ TTF fonts. Each line contains at least 3 fields: the name of the directory, ++ the language of the fonts in it (if you have fonts for different ++ languages you have to put them into the separate directories) and the ++ encoding of the fonts. Again, if you have some of the TTF typefaces in ++ one encoding, and some in another (say, CP-1251 and KOI-8), you have ++ to put them into the separate source directories. Some lines may contain ++ 4 fields. Then the fourth field is the name of the external map to ++ convert the Unicode fonts into the desirable encoding. This map is ++ used instead of the built-in map for the specified language. ++

++ ++*8* ++An interesting thing is that some languages have more than one ++widely used character encodings. For example, the widely used ++encodings for Russian are IBM CP-866 (MS-DOS and Unix), KOI-8 ++(Unix and VAX, also the standard Internet encoding), IBM CP-1251 (MS Windows). ++That's why I have provided the means to generate the converted fonts ++in more than one encoding. See the file encodings/README for ++details about the encoding tables. Actually, if you plan to use ++these fonts with Netscape Navigator better use the aliases ++cp-866 instead of ibm-866 and windows-1251 instead of ibm-1251 ++because that's what Netscape wants. ++

++ ++ ++DSTDIR - directory for the resulting Type1 fonts. Be careful! ++ This directory gets completely wiped out before conversion, ++ so don't use any already existing directory for this purpose. ++

++ ++ ++DSTENC{language} - the list of encodings in which the destination ++ fonts will be generated for each language. Each font of that ++ language will be generated in each of the specified ++ encodings. If you don't want any translation, just specify both ++ SRCENC and DSTENC as iso8859-1 (or if you want any other encoding ++ specified in the fonts.dir, copy the description of 8859-1 with ++ new name and use this new name for SRCENC and DSTENC). ++

++ ++ ++FOUNDRY - the foundry name to be used in the fonts.dir file. I have ++ set it to `fromttf' to avoid name conflicts with any existing font for ++ sure. But this foundry name is not registered in X11 standards and ++ if you want to get the full standard compliance or have a font server ++ that enforces such a compliance, use `misc'. ++

++ ++ ++The next few parameters control the general behavior of the converter. ++They default values are set to something reasonable. ++

++ ++ ++ ++CORRECTWIDTH - if the value is set to YES then use the ++ converter option -w, otherwise don't use it. See the description of ++ this option in the README file. ++

++ ++ ++REMOVET1A - if the value is set to YES then after ++ conversion remove the un-encoded .t1a font files and the ++ intermediate .xpfa font metric files. ++

++ ++ ++INSTALLFONTMAP - a Ghostscript parameter, if the value is set to ++ YES then install the entries for the new fonts ++ right into the main Fontmap file. Otherwise just leave ++ the file Fontmap.ttf in the Ghostscript configuration ++ directory. ++

++ ++ ++HINTSUBST - if the value is set to YES use the option ++ -H, otherwise don't use it. This option enables the ++ hint substitution technique. If you have not installed the X11 patch ++ described above, use this option with great caution. See further ++ description of this option in the README file. ++

++ ++ ++ENFORCEISO - if the value is set to YES then ++ disguise the resulting fonts as the fonts in ISOLatin1 encoding. Historically ++ this was neccessary due to the way the installer scripts created the ++ X11 font configuration files. It is not neccessary any more for this ++ purpose. But if you plan to use these fonts with some other application ++ that expects ISOLatin1 encoding then better enable this option. ++

++ ++ ++ALLGLYPHS - if the value is set to YES then ++ include all the glyphs from the source fonts into the resulting fonts, even ++ if these glyphs are inaccessible. If it's set to NO then ++ include only the glyphs which have codes assigned to them. The glyphs ++ without codes can not be used directly. But some clever programs, ++ such as the Type 1 library from XFree86 3.9 and higher can change ++ the encoding on the fly and use another set of glyphs. If you have not ++ installed the X11 patch described above, use this option with great ++ caution. See further description of the option option -a in the ++ README file. ++

++ ++ ++GENUID - if the value is set to YES then use ++ the option -uA of the converter to generate UniqueIDs for ++ the converted fonts. The standard X11 Type 1 library does not use ++ this ID, so it may only be neccessary for the other applications. ++ The script is clever enough to generate different UniqueID for the ++ same font converted to multiple encodings. Also after conversion it ++ checks all the fonts generacted during the session for duplicated ++ UniqueID and shows those. Still, this does not quarantee that these ++ UniqueIDs won't overlap with some other fonts. The UniqueIDs are ++ generated as hash values from the font names, so it's guaranteed ++ that if the `convert' script runs multiple times it will ++ generate the same UniqueIDs during each run. See further description ++ of this option in the README file. ++

++ ++ ++GENUID - if the value is set to YES then create ++ the .pfb files, otherwise the .pfa files. The .pfb ++ files are more compact but contain binary data, so you may experience some ++ troubles when transferring them through the network. ++

++ ++ ++The following parameters are used to locate the other scripts and ++configuration files. By default the scripts do a bit of guessing for them: ++they search in the ttf2pt1 installation directory if ttf2pt1 ++was installed or otherwise suppose that you are running `convert' with ++`scripts' subdirectory being the current directory. ++

++ ++ ++ ++ENCDIR - directory containing the descriptions of encodings ++
++ ++MAPDIR - directory containing the external map files ++

++ ++ ++Besides that a few parameters are built into the `convert' script itself. ++You probably won't need to change them: ++

++ ++ ++ ++T1ASM, TTF2PT1, TRANS, T1FDIR, FORCEISO - paths to the other script ++

++ ++ ++Also there are a few parameters controlling the installation of ++fonts for Ghostscript. Please look at their description in the ++Ghostscript section of documentation or in the ttf2pt1_x2gs(1) ++manual page before running `convert'. If these parameters are ++set, `convert' will call the `x2gs' script automatically ++to install the newly converted fonts in Ghostscript. ++

++ ++After creating the configuration file run the `convert' script. Look at ++the result and the log file in DSTDIR. ++

++ ++Add the directory with newly converted fonts to the configuration ++of X server or font server. For most of the systems this step is ++very straightforward. For HP-UX it's rather tricky and poorly ++documented, so the file FONTS.hpux gives a short description. ++

++ ++If you don't have the privileges of the root user, you still can ++configure your private font server. Just use some non-standard ++port number (see FONTS.hpux for an example, exept that you won't ++need all the HP-related stuff on any other system). ++

++ ++ ++

++Known Problems ++

++ ++ ++ ++ ++
    ++
  • One catch is that the X11 Type 1 font library has a rather low limit ++ on the font size. Because of this the fonts with more complicated ++ outlines and the enabled hint substitution may not fit into ++ this limit. The same applies to the fonts with very complicated ++ outlines or with very many glyphs (especially the fonts with ++ over 256 glyphs). So you will need to excercise caution with ++ these options if you plan using these fonts with X11. Some vendors ++ such as HP provide the Type 1 implementation licensed from Adobe ++ which should have no such problem. ++

    ++ ++ But there is a solution even for the generic X11. A patch located ++ in the subdirectory `app/X11' fixes this problem as well ++ as some other minor problems. Its description is provided in ++ app/X11/README. ++

    ++ ++ To fix the X11 font library, you have to get the X11 sources. I ++ can recommend the ftp sites of the XFree86 project ftp://ftp.xfree86.org ++ or of the Open Group ftp://ftp.x.org. This patch was made on the sources ++ of XFree86 so you may have better success with applying it to the ++ XFree86 distribution. After you have got the sources, make sure ++ that you can compile them. Then apply the patch as described. ++ Make sure that it was applied properly. Compile the sources again ++ (actually, you need only the fonts library, the fonts server, and ++ possibly the X server). It would be prudent now to save your old ++ font library, font server and, possibly, X server. Then install ++ the new recently compiled versions of these files. Of course, ++ if you know someone who already has compiled these files for the ++ same OS as yours, you can just copy the binary fles from him. ++

    ++ ++ Alas, building the X11 system from the source code is not the ++ easiest thing in the world and if you have no experience it ++ can be quite difficult. In this case just avoid the aforementioned ++ features or check each converted font to make sure that it ++ works properly. ++

    ++ ++

  • The Type1 font library from the standard X11 distribution ++ does not work on HP-UX (at least, up to 10.01). The font server ++ supplied with HP-UX up to 10.01 is also broken. Starting from ++ HP-UX 10.20 (I don't know about 10.10) they supply a proprietary font ++ library and the converted fonts work fine with it, provided that ++ they are configured properly (see the file FONTS.hpux). ++

    ++ ++

  • The fonts.scale files created by the older versions of the ++ ttf2pt1 installation program (up to release 3.1) have conflicted ++ with the language definitions of the Xfsft font server and ++ parts of it included into XFree86. To overcome this incompatibility ++ the never versions creats the fonts.scale file describing all the ++ fonts as belonging to the adobe-fontspecific encoding and ++ the fonts.alias file with the proper names. The drawback of ++ this solution is that xlsfonts gives the list of twice more ++ fonts. But as a side effect the option ENFORCEISO in ++ `convert.cfg' is not required for X11 any more. ++

    ++ ++

  • The conversion script has no support for Eastern multi-plane fonts. ++ Contribution of such a support would be welcome. ++

    ++

++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++

++Ghostscript ++

++ ++ ++ ++ ++ ++ ++The fonts generated with ttf2pt1 work fine with Ghostscript by ++themselves. The script `x2gs' (or `ttf2pt1_x2gs' when installed ++into a public directory, to avoid name conflicts with other ++programs) links the font files from the X11 direcotry into the Ghostscript ++directory and automatically creates the description file (Fontmap) ++in Ghostscript format. ++ ++ ++It's called as: ++

++ ++ ++ ++ ++

++ x2gs [config-file] ++
++ ++ ++If the configuration file is not specified as an argument then the file ++`convert.cfg' in the current directory is used, just like the ++`convert' script does. Indeed, this configuration file is used for ++both scripts. ++

++ ++The Ghostscript-related parameters in the configuration file are: ++

++ ++DSTDIR - the X11 font directory used by `x2gs' as the ++ source of the fonts. This parameter is common with the X11 ++ configuration. ++

++ ++GSDIR - the base directory of Ghostsript. If this ++ parameter is set to an empty string then `convert' won't ++ call `x2gs'. So if you want to get only the X11 fonts ++ installed then set this parameter to an empty string. This ++ directory may vary on various system, so please check your ++ system and set this value accordingly before running the script. ++

++ ++GSFONTDIR - the font directory of Ghostscript. In the standard ++ Ghostscript installation it's a subdirectory of GSDIR ++ but some systems may use completely different directories. ++

++ ++GSCONFDIR - the configuration subdirectory of Ghostscript ++ that contains the Fontmap file. ++

++ ++INSTALLFONTMAP - if the value is set to YES then ++ install the entries for the new fonts right into the main ++ Fontmap file. Otherwise just leave the file Fontmap.ttf ++ in the Ghostscript configuration directory. ++

++ ++ ++After preparing the configuration file run the script. It symbolicaly links ++all the font files and creates the description file Fontmap.ttf in ++GSCONDFIR. After that there are two choices. ++

++ ++If the option INSTALLFONTMAP was set to YES then ++the font descriptions are also automatically installed into the ++master Fontmap file. The script is clever enough to ++detect if it was run multiple times with the same directories ++and if so it replaces the old Fontmap entries with ++the new ones instead of just accumulating all of them. You ++may also run it multiple times for multiple X11 directories ++and all the results will be properly collected in the Fontmap. ++But it's your responsibility to watch that the names of the ++font files don't overlap. If the X11 font directory gets ++renamed then you have to remove its font entries from the ++Fontmap and only after that re-run `x2gs' ++for the new directory. ++

++ ++On the other hand if the option INSTALLFONTMAP was set to ++NO then go to the GSCONFDIR directory and insert the ++contents of Fontmap.ttf into the Fontmap file ++manually. This step may be left manual to make the installation ++a little bit more safe. ++

++ ++After that you may also want to redefine some of the aliases in ++Fontmap to refer to the newly installed fonts. ++But the redefinition of the aliases may be dangerous if the width of ++characters in the new font will be different from the old font. ++Alas, there is no visible solution of this problem yet. ++

++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++

++MS Windows ++

++ ++ ++Ttf2pt1 can be built on Windows either with native compiler or in ++POSIX emulation mode. ++

++ ++Native MS Windows compilers require a different way to build the converter ++instead of the Makefile (their make programs commonly are quite weird ++and limited in capabilities). An example of batch file winbuild.bat ++is provided for MS Visual C/C++. Probably it can be easily adapted for other ++32-bit Windows and DOS compilers. The important part is to define the ++preprocessor symbol WINDOWS during compilation. ++

++ ++Cygnus make almost supports full Makefiles but not quite. Seems ++like its POSIX support is also of the same quality "almost but not quite". ++So another command file cygbuild.sh is provided for Cygnus GNU C, also ++with the preprocessor symbol WINDOWS defined. It is intended to be run from ++the Cygnus BASH shell. To run the programs produced by the Cygnus compiler ++the Cygnus library file CYGWIN1.DLL should be copied first into ++C:\WINDOWS. ++

++ ++To run the accompanying scripts Perl for Windows will be required as well as ++other tools from the Cygnus set. ++

++ ++The Windows support was not particularly tested, so in case of problems with ++building or running the converter please let us know. ++

++ ++The pre-built code (possibly of an older version) of ttf2pt1 for MS Windows is ++available from the GnuWin32 project from ++ ++http://gnuwin32.sourceforge.net/packages/ttf2pt1.htm ++

++ ++ ++

++Netscape Navigator/Communicator ++

++ ++ ++Basically, the biggest problem with Netscape Navigator is that ++it has built-in fixed PostScript font names and built-in fixed ++glyph tables for them. Oh, no, that's two! Let's start over: ++basically the two biggest problems of Netscape Navigator are ++that (one)it has built-in fixed PostScript font names and (two) ++built-in fixed glyph tables for them and (three) it always ++assumes that the fonts have ISOLatin1 encoding. OK, let's ++start over again: basically the three biggest problems of Netscape ++Navigator are that (one) it has built-in fixed PostScript font names, ++(two) built-in fixed glyph tables for them and (three) it always ++assumes that the fonts have ISOLatin1 encoding and (four) it ++does not remember the scaled font size between the sessions. ++You did not expect such a Spanish Inquisition, did you ? (*) ++

++ ++Luckily, we have solutions for all of these problems. They are ++located in the subdirectory `app/netscape' and described ++in app/netscape/README. ++

++ ++ ++  -------
++  *) See Monty Python's Flying Circus, episode 15 ++

++ ++*8* ++

++Netscape and cyrillic fonts
++ ++(courtesy of Zvezdan Petkovic) ++

++ ++If you use TrueType fonts in your X, as I do, and you always get ++KOI8-R encoded pages, then your Netscape does not recognise windows-1251 ++encoding. Microsoft TrueType fonts simply declare all encodings they ++can support including KOI8-R. For some reason, KOI8-R always wins over ++ISO-8859-5 in Netscape under X. If you are reading other cyrillic ++languages besides Russian, you might want to either erase KOI8-R entries ++from the fonts.dir and fonts.scale files, or alternatively fix Netscape. ++I put this line in my .Xdefaults. ++

++ ++

++ Netscape*documentFonts.charset*koi8-r: iso-8859-5 ++
++

++ ++Notice that you can still read Russian sites without trouble because ++Netscape translates KOI8-R to ISO-8859-5 on the fly. I read both Russian ++and Serbian sites with no trouble. ++

++ ++Note: If anybody knows the way to tell Netscape under Unix how to ++recognise {windows,ibm,cp}-1251 encoded fonts, I'd like to hear about that. ++

++ ++ ++

++Linux RPM package ++

++ ++ ++The spec file for the creation of a Linux RPM package is located in ++app/RPM. It has been contributed by Johan Vromans. When ++make all is ran in the main directory it among the other ++things creates the version of itself adapted to Linux in app/RPM, ++you may want to copy that version back to the main directory. ++

++ ++Warning: Please note that the install section is incomplete, and ++the installed scripts won't work until the paths inside them ++are corrected. ++

++ ++ ++

++FrameMaker ++

++ ++ ++The fonts and AFM files generated by the version 3.2 and higher ++should work with Framemaker without problems. The AFM files ++generated by the previous versions of the converter require a ++line added to them: ++

++ ++  EncodingScheme FontSpecific ++

++ ++And the underscores in the font names of the font and AFM files ++generated by the older versions may need to be changed to dashes. ++

++ ++NOTE by Jason Baietto: Ignore the directions in the Frame on-line docs ++that say to put a "serverdict begin 0 exitserver" line in the pfa files. ++Doing this caused both my printer and ghostscript to choke on the resulting ++output from FrameMaker, so I would not advise doing this (though your ++mileage may vary). ++

++ ++ ++

++StarOffice ++

++ ++ ++StarOffice 5.1x has been reported to crash if the .afm file contains ++spaces in the values of such statements as Version, Weight etc. ++These spaces are permitted by the Adobe spec, so this is a problem of ++StarOffice. The easiest way to fix these .afm files for StarOffice ++is to remove spaces in these strings or remove these strings (in case if ++they are optional) at all. This can be done automatically with a sed ++script. It seems that StarOffice 5.2 has this problem fixed, so we decided to ++spend no efforts on providing workarounds for 5.1 with ttf2pt1. ++

++ ++ ++ +diff -ruN xserver-old/hw/xprint/extras/ttf2pt1/ft.c xserver/hw/xprint/extras/ttf2pt1/ft.c +--- xserver-old/hw/xprint/extras/ttf2pt1/ft.c 1970-01-01 10:00:00.000000000 +1000 ++++ xserver/hw/xprint/extras/ttf2pt1/ft.c 2006-06-27 13:10:26.000000000 +1000 +@@ -0,0 +1,808 @@ ++/* ++ * The font parser using the FreeType library version 2. ++ * ++ * see COPYRIGHT ++ * ++ */ ++ ++#ifdef USE_FREETYPE ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include FT_FREETYPE_H ++#include FT_TRUETYPE_TABLES_H ++#include FT_BBOX_H ++#include FT_GLYPH_H ++ ++#include FT_CONFIG_CONFIG_H ++#include FT_CONFIG_OPTIONS_H ++#include FT_ERRORS_H ++#include FT_SYSTEM_H ++#include FT_IMAGE_H ++#include FT_TYPES_H ++#include FT_OUTLINE_H ++#include FT_MODULE_H ++#include FT_RENDER_H ++#include FT_TYPE1_TABLES_H ++#include FT_TRUETYPE_IDS_H ++#include FT_TRUETYPE_TAGS_H ++#include FT_MULTIPLE_MASTERS_H ++#include FT_SFNT_NAMES_H ++ ++#ifdef XP_PSTEXT ++#include "os.h" ++#include "Xproto.h" ++#include "font.h" ++#include "fontstruct.h" ++#include "fntfilst.h" ++#include "fontutil.h" ++#include "fontenc.h" ++#include "ft.h" ++#define NOT_IN_FTFUNCS ++#include "ftfuncs.h" ++#endif /* XP_PSTEXT */ ++ ++#include "pt1.h" ++#include "global.h" ++ ++/* prototypes of call entries */ ++static void openfont(char *fname, char *arg); ++static void closefont( void); ++static int getnglyphs ( void); ++static int glnames( GLYPH *glyph_list); ++static void glmetrics( GLYPH *glyph_list); ++static int glenc( GLYPH *glyph_list, int *encoding, int *unimap); ++static void fnmetrics( struct font_metrics *fm); ++static void glpath( int glyphno, GLYPH *glyph_list); ++static void kerning( GLYPH *glyph_list); ++ ++/* globals */ ++ ++/* front-end descriptor */ ++struct frontsw freetype_sw = { ++ /*name*/ "ft", ++ /*descr*/ "based on the FreeType2 library", ++ /*suffix*/ { "ttf", "ttc", "otf", "otc", "pfa", "pfb" }, ++ /*open*/ openfont, ++ /*close*/ closefont, ++ /*nglyphs*/ getnglyphs, ++ /*glnames*/ glnames, ++ /*glmetrics*/ glmetrics, ++ /*glenc*/ glenc, ++ /*fnmetrics*/ fnmetrics, ++ /*glpath*/ glpath, ++ /*kerning*/ kerning, ++}; ++ ++/* statics */ ++ ++static char * dupcnstring( unsigned char *s, int len); ++ ++#ifndef XP_PSTEXT ++static FT_Library library; ++#endif /* !XP_PSTEXT */ ++static FT_Face face; ++ ++static int enc_type, enc_found; ++ ++/* SFNT functions do not seem to be included by default in FT2beta8 */ ++#define ENABLE_SFNT ++ ++/* ++ * Open font and prepare to return information to the main driver. ++ * May print error and warning messages. ++ * Exit on error. ++ */ ++ ++static void ++openfont( ++ char *fname, ++ char *arg /* unused now */ ++) ++{ ++ FT_Error error; ++ ++#ifdef XP_PSTEXT ++ extern FT_Face xp_pstext_ft_face; ++ extern FT_Library ftypeLibrary; /* defined in xc/lib/font/FreeType/ftfuncs.c */ ++ ++ face = xp_pstext_ft_face; ++#else ++ if( FT_Init_FreeType( &library ) ) { ++ fprintf(stderr, "** FreeType initialization failed\n"); ++ exit(1); ++ } ++ ++ if( error = FT_New_Face( library, fname, 0, &face ) ) { ++ if ( error == FT_Err_Unknown_File_Format ) ++ fprintf(stderr, "**** %s has format unknown to FreeType\n", fname); ++ else ++ fprintf(stderr, "**** Cannot access %s ****\n", fname); ++ exit(1); ++ } ++#endif /* XP_PSTEXT */ ++ ++ if(FT_HAS_FIXED_SIZES(face)) { ++ WARNING_1 fprintf(stderr, "Font contains bitmaps\n"); ++ } ++ if(FT_HAS_MULTIPLE_MASTERS(face)) { ++ WARNING_1 fprintf(stderr, "Font contains multiple masters, using default\n"); ++ } ++ ++ if(ISDBG(FT)) fprintf(stderr," %d units per EM\n", face->units_per_EM); ++ ++ enc_found = 0; ++} ++ ++/* ++ * Close font. ++ * Exit on error. ++ */ ++ ++static void ++closefont( ++ void ++) ++{ ++#ifdef XP_PSTEXT ++ /* NOP */ ++#else ++ if( FT_Done_Face(face) ) { ++ WARNING_1 fprintf(stderr, "Errors when closing the font file, ignored\n"); ++ } ++ if( FT_Done_FreeType(library) ) { ++ WARNING_1 fprintf(stderr, "Errors when stopping FreeType, ignored\n"); ++ } ++#endif /* XP_PSTEXT */ ++} ++ ++/* ++ * Get the number of glyphs in font. ++ */ ++ ++static int ++getnglyphs ( ++ void ++) ++{ ++ if(ISDBG(FT)) fprintf(stderr, "%d glyphs in font\n", face->num_glyphs); ++ return (int)face->num_glyphs; ++} ++ ++/* ++ * Get the names of the glyphs. ++ * Returns 0 if the names were assigned, non-zero if the font ++ * provides no glyph names. ++ */ ++ ++static int ++glnames( ++ GLYPH *glyph_list ++) ++{ ++#define MAX_NAMELEN 1024 ++ ++#ifdef XP_PSTEXT ++ char buf[1024]; ++ long i; ++ FT_Error error; ++ ++#ifdef XP_ONLY_BLOCKS ++ extern unsigned long xp_font_block_offset; ++ extern FTFontPtr xp_xtf; ++ int bc; /* block counter */ ++ ++ ++ /* FixMe: This code should use PsOut_Get_FreeType_Glyph_Name() instead of ++ * duplicating the code ++ */ ++ for( bc = xp_font_block_offset ; bc < (xp_font_block_offset+256) ; bc++ ) { ++ /* Remap X11 font index to FreeType font index */ ++ i = FTRemap(face, &xp_xtf->mapping, bc); ++ ++ if( i >= face->num_glyphs ) ++ continue; ++#else ++ for(i=0; i < face->num_glyphs; i++) { ++#endif /* XP_ONLY_BLOCKS */ ++ if( FT_Has_PS_Glyph_Names(face) ) { ++ error = FT_Get_Glyph_Name(face, i, buf, MAX_NAMELEN); ++ } ++ else ++ { ++ error = -1; ++ } ++ ++ if( error ) { ++ /* Check for unicode mapping ++ * See Adobe document "Unicode and Glyph Names" ++ * (http://partners.adobe.com/asn/tech/type/unicodegn.jsp) ++ */ ++ if( (xp_xtf->mapping.mapping->type == FONT_ENCODING_UNICODE) && ++ (i < 0xFFFE) ) ++ { ++ sprintf(buf, "uni%04lx", i); ++ } ++ else ++ { ++ sprintf(buf, "ch%02lx", i); ++ } ++ } ++ glyph_list[i].name = strdup(buf); ++ if(ISDBG(FT)) fprintf(stderr, "%d has name %s\n", i, buf); ++ if (glyph_list[i].name == NULL) { ++ fprintf (stderr, "****malloc failed %s line %d\n", __FILE__, __LINE__); ++ exit(255); ++ } ++ } ++ ++ return 0; ++#else ++ char bf[1024]; ++ long i; ++ ++ if( ! FT_HAS_GLYPH_NAMES(face) ) { ++ WARNING_1 fprintf(stderr, "Font has no glyph names\n"); ++ return 1; ++ } ++ ++ for(i=0; i < face->num_glyphs; i++) { ++ if( FT_Get_Glyph_Name(face, i, bf, MAX_NAMELEN) || bf[0]==0 ) { ++ sprintf(bf, "_g_%d", i); ++ WARNING_2 fprintf(stderr, ++ "Glyph No. %d has no postscript name, becomes %s\n", i, bf); ++ } ++ glyph_list[i].name = strdup(bf); ++ if(ISDBG(FT)) fprintf(stderr, "%d has name %s\n", i, bf); ++ if (glyph_list[i].name == NULL) { ++ fprintf (stderr, "****malloc failed %s line %d\n", __FILE__, __LINE__); ++ exit(255); ++ } ++ } ++ ++ return 0; ++#endif /* XP_PSTEXT */ ++} ++ ++/* ++ * Get the metrics of the glyphs. ++ */ ++ ++static void ++glmetrics( ++ GLYPH *glyph_list ++) ++{ ++ GLYPH *g; ++ int i; ++ FT_Glyph_Metrics *met; ++ FT_BBox bbox; ++ FT_Glyph gly; ++ ++#ifdef XP_ONLY_BLOCKS ++ extern unsigned long xp_font_block_offset; ++ extern FTFontPtr xp_xtf; ++ int bc; /* block counter */ ++ ++ for( bc = xp_font_block_offset ; bc < (xp_font_block_offset+256) ; bc++ ) { ++ /* Remap X11 font index to FreeType font index */ ++ i = FTRemap(face, &xp_xtf->mapping, bc); ++ ++ if( i >= face->num_glyphs ) ++ continue; ++ ++#else ++ for(i=0; i < face->num_glyphs; i++) { ++#endif /* XP_ONLY_BLOCKS */ ++ g = &(glyph_list[i]); ++ ++ if( FT_Load_Glyph(face, i, FT_LOAD_NO_BITMAP|FT_LOAD_NO_SCALE) ) { ++ fprintf(stderr, "Can't load glyph %s, skipped\n", g->name); ++ continue; ++ } ++ ++ met = &face->glyph->metrics; ++ ++ if(FT_HAS_HORIZONTAL(face)) { ++ g->width = met->horiAdvance; ++ g->lsb = met->horiBearingX; ++ } else { ++ WARNING_2 fprintf(stderr, "Glyph %s has no horizontal metrics, guessed them\n", g->name); ++ g->width = met->width; ++ g->lsb = 0; ++ } ++ ++ if( FT_Get_Glyph(face->glyph, &gly) ) { ++ fprintf(stderr, "Can't access glyph %s bbox, skipped\n", g->name); ++ continue; ++ } ++ ++ FT_Glyph_Get_CBox(gly, ft_glyph_bbox_unscaled, &bbox); ++ g->xMin = bbox.xMin; ++ g->yMin = bbox.yMin; ++ g->xMax = bbox.xMax; ++ g->yMax = bbox.yMax; ++ ++ g->ttf_pathlen = face->glyph->outline.n_points; ++ } ++} ++ ++/* ++ * Get the original encoding of the font. ++ * Returns 1 for if the original encoding is Unicode, 2 if the ++ * original encoding is other 16-bit, 0 if 8-bit. ++ */ ++ ++static int ++glenc( ++ GLYPH *glyph_list, ++ int *encoding, ++ int *unimap ++) ++{ ++#ifdef XP_PSTEXT ++ int i, ++ e; ++ unsigned code; ++ extern FTFontPtr xp_xtf; ++ extern unsigned long xp_font_block_offset; ++ ++ enc_found = 1; ++ enc_type = 0; ++ ++ for(i=0; imapping, xp_font_block_offset+i); ++ ++ if(code == 0) ++ continue; /* .notdef */ ++ ++ encoding[i] = code; ++ } ++ ++ return enc_type; ++#else ++ int i, e; ++ unsigned code; ++ ++ if(ISDBG(FT)) ++ for(e=0; e < face->num_charmaps; e++) { ++ fprintf(stderr, "found encoding pid=%d eid=%d\n", ++ face->charmaps[e]->platform_id, ++ face->charmaps[e]->encoding_id); ++ } ++ ++ if(enc_found) ++ goto populate_map; ++ ++ enc_type = 0; ++ ++ /* first check for an explicit PID/EID */ ++ ++ if(force_pid != -1) { ++ for(e=0; e < face->num_charmaps; e++) { ++ if(face->charmaps[e]->platform_id == force_pid ++ && face->charmaps[e]->encoding_id == force_eid) { ++ WARNING_1 fprintf(stderr, "Found Encoding PID=%d/EID=%d\n", ++ force_pid, force_eid); ++ if( FT_Set_Charmap(face, face->charmaps[e]) ) { ++ fprintf(stderr, "**** Cannot set charmap in FreeType ****\n"); ++ exit(1); ++ } ++ enc_type = 1; ++ goto populate_map; ++ } ++ } ++ fprintf(stderr, "*** TTF encoding table PID=%d/EID=%d not found\n", ++ force_pid, force_eid); ++ exit(1); ++ } ++ ++ /* next check for a direct Adobe mapping */ ++ ++ if(!forcemap) { ++ for(e=0; e < face->num_charmaps; e++) { ++ if(face->charmaps[e]->encoding == ft_encoding_adobe_custom) { ++ WARNING_1 fputs("Found Adobe Custom Encoding\n", stderr); ++ if( FT_Set_Charmap(face, face->charmaps[e]) ) { ++ fprintf(stderr, "**** Cannot set charmap in FreeType ****\n"); ++ exit(1); ++ } ++ goto populate_map; ++ } ++ } ++ } ++ ++ for(e=0; e < face->num_charmaps; e++) { ++ if(face->charmaps[e]->platform_id == 3) { ++ switch(face->charmaps[e]->encoding_id) { ++ case 0: ++ WARNING_1 fputs("Found Symbol Encoding\n", stderr); ++ break; ++ case 1: ++ WARNING_1 fputs("Found Unicode Encoding\n", stderr); ++ enc_type = 1; ++ break; ++ default: ++ WARNING_1 { ++ fprintf(stderr, ++ "****MS Encoding ID %d not supported****\n", ++ face->charmaps[e]->encoding_id); ++ fputs("Treating it like Symbol encoding\n", stderr); ++ } ++ break; ++ } ++ break; ++ } ++ } ++ if(e >= face->num_charmaps) { ++ WARNING_1 fputs("No Microsoft encoding, using first encoding available\n", stderr); ++ e = 0; ++ } ++ ++ if( FT_Set_Charmap(face, face->charmaps[e]) ) { ++ fprintf(stderr, "**** Cannot set charmap in FreeType ****\n"); ++ exit(1); ++ } ++ ++populate_map: ++ enc_found = 1; ++ for(i=0; i=' ' && c!=127) ++ *out++ = c; ++ else if(!warned) { ++ warned=1; ++ WARNING_1 fprintf(stderr, "Some font name strings are in Unicode, may not show properly\n"); ++ } ++ } ++ *out = 0; ++ return res; ++} ++ ++/* ++ * Get the font metrics ++ */ ++static void ++fnmetrics( ++ struct font_metrics *fm ++) ++{ ++ char *str; ++ static char *fieldstocheck[3]; ++#ifdef ENABLE_SFNT ++ FT_SfntName sn; ++#endif /* ENABLE_SFNT */ ++ int i; ++ ++ fm->italic_angle = 0.0; /* FreeType hides the angle */ ++ fm->underline_position = face->underline_position; ++ fm->underline_thickness = face->underline_thickness; ++ fm->is_fixed_pitch = FT_IS_FIXED_WIDTH(face); ++ ++ fm->ascender = face->ascender; ++ fm->descender = face->descender; ++ ++ fm->units_per_em = face->units_per_EM; ++ ++ fm->bbox[0] = face->bbox.xMin; ++ fm->bbox[1] = face->bbox.yMin; ++ fm->bbox[2] = face->bbox.xMax; ++ fm->bbox[3] = face->bbox.yMax; ++ ++#ifdef ENABLE_SFNT ++ if( FT_Get_Sfnt_Name(face, TT_NAME_ID_COPYRIGHT, &sn) ) ++#endif /* ENABLE_SFNT */ ++ fm->name_copyright = ""; ++#ifdef ENABLE_SFNT ++ else ++ fm->name_copyright = dupcnstring(sn.string, sn.string_len); ++#endif /* ENABLE_SFNT */ ++ ++ fm->name_family = face->family_name; ++ ++ fm->name_style = face->style_name; ++ if(fm->name_style == NULL) ++ fm->name_style = ""; ++ ++#ifdef ENABLE_SFNT ++ if( FT_Get_Sfnt_Name(face, TT_NAME_ID_FULL_NAME, &sn) ) ++#endif /* ENABLE_SFNT */ ++ { ++ int len; ++ ++ len = strlen(fm->name_family) + strlen(fm->name_style) + 2; ++ if(( fm->name_full = malloc(len) )==NULL) { ++ fprintf (stderr, "****malloc failed %s line %d\n", __FILE__, __LINE__); ++ exit(255); ++ } ++ strcpy(fm->name_full, fm->name_family); ++ if(strlen(fm->name_style) != 0) { ++ strcat(fm->name_full, " "); ++ strcat(fm->name_full, fm->name_style); ++ } ++ } ++#ifdef ENABLE_SFNT ++ else ++ fm->name_full = dupcnstring(sn.string, sn.string_len); ++#endif /* ENABLE_SFNT */ ++ ++#ifdef ENABLE_SFNT ++ if( FT_Get_Sfnt_Name(face, TT_NAME_ID_VERSION_STRING, &sn) ) ++#endif /* ENABLE_SFNT */ ++ fm->name_version = "1.0"; ++#ifdef ENABLE_SFNT ++ else ++ fm->name_version = dupcnstring(sn.string, sn.string_len); ++#endif /* ENABLE_SFNT */ ++ ++#ifdef XP_PSTEXT ++ { ++ extern const char *xp_psfontname; ++ ++ fm->name_ps = strdup(xp_psfontname); ++ ++ /* Handle the rare case if a family name was not provided by the TTF ++ * font (like Solaris TTF fonts in /usr/openwin/lib/locale/ko.UTF-8/X11/fonts/TrueType, ++ * /usr/openwin/lib/locale/ko/X11/fonts/TrueType) - in this case we ++ * have to generate a family name somehow... */ ++ if(fm->name_family == NULL) ++ fm->name_family = fm->name_ps; ++ } ++#else ++ ++#ifdef ENABLE_SFNT ++ if( FT_Get_Sfnt_Name(face, TT_NAME_ID_PS_NAME , &sn) ) { ++#endif /* ENABLE_SFNT */ ++ if(( fm->name_ps = strdup(fm->name_full) )==NULL) { ++ fprintf (stderr, "****malloc failed %s line %d\n", __FILE__, __LINE__); ++ exit(255); ++ } ++#ifdef ENABLE_SFNT ++ } else ++ fm->name_ps = dupcnstring(sn.string, sn.string_len); ++#endif /* ENABLE_SFNT */ ++ ++#endif /* XP_PSTEXT */ ++ ++ for(i=0; fm->name_ps[i]!=0; i++) ++ if(fm->name_ps[i] == ' ') ++ fm->name_ps[i] = '_'; /* no spaces in the Postscript name *m */ ++ ++ /* guess the boldness from the font names */ ++ fm->force_bold=0; ++ ++ fieldstocheck[0] = fm->name_style; ++ fieldstocheck[1] = fm->name_full; ++ fieldstocheck[2] = fm->name_ps; ++ ++ for(i=0; !fm->force_bold && iforce_bold=1; ++ break; ++ } ++ } ++ } ++} ++ ++/* ++ * Functions to decompose the outlines ++ */ ++ ++static GLYPH *curg; ++static double lastx, lasty; ++ ++static int ++outl_moveto( ++ FT_Vector *to, ++ void *unused ++) ++{ ++ double tox, toy; ++ ++ tox = fscale((double)to->x); toy = fscale((double)to->y); ++ ++ /* FreeType does not do explicit closepath() */ ++ if(curg->lastentry) { ++ g_closepath(curg); ++ } ++ fg_rmoveto(curg, tox, toy); ++ lastx = tox; lasty = toy; ++ ++ return 0; ++} ++ ++static int ++outl_lineto( ++ FT_Vector *to, ++ void *unused ++) ++{ ++ double tox, toy; ++ ++ tox = fscale((double)to->x); toy = fscale((double)to->y); ++ ++ fg_rlineto(curg, tox, toy); ++ lastx = tox; lasty = toy; ++ ++ return 0; ++} ++ ++static int ++outl_conicto( ++ FT_Vector *control1, ++ FT_Vector *to, ++ void *unused ++) ++{ ++ double c1x, c1y, tox, toy; ++ ++ c1x = fscale((double)control1->x); c1y = fscale((double)control1->y); ++ tox = fscale((double)to->x); toy = fscale((double)to->y); ++ ++ fg_rrcurveto(curg, ++ (lastx + 2.0 * c1x) / 3.0, (lasty + 2.0 * c1y) / 3.0, ++ (2.0 * c1x + tox) / 3.0, (2.0 * c1y + toy) / 3.0, ++ tox, toy ); ++ lastx = tox; lasty = toy; ++ ++ return 0; ++} ++ ++static int ++outl_cubicto( ++ FT_Vector *control1, ++ FT_Vector *control2, ++ FT_Vector *to, ++ void *unused ++) ++{ ++ double c1x, c1y, c2x, c2y, tox, toy; ++ ++ c1x = fscale((double)control1->x); c1y = fscale((double)control1->y); ++ c2x = fscale((double)control2->x); c2y = fscale((double)control2->y); ++ tox = fscale((double)to->x); toy = fscale((double)to->y); ++ ++ fg_rrcurveto(curg, c1x, c1y, c2x, c2y, tox, toy); ++ lastx = tox; lasty = toy; ++ ++ return 0; ++} ++ ++static FT_Outline_Funcs ft_outl_funcs = { ++ outl_moveto, ++ outl_lineto, ++ outl_conicto, ++ outl_cubicto, ++ 0, ++ 0 ++}; ++ ++/* ++ * Get the path of contrours for a glyph. ++ */ ++ ++static void ++glpath( ++ int glyphno, ++ GLYPH *glyf_list ++) ++{ ++ FT_Outline *ol; ++ ++ curg = &glyf_list[glyphno]; ++ ++ if( FT_Load_Glyph(face, glyphno, FT_LOAD_NO_BITMAP|FT_LOAD_NO_SCALE|FT_LOAD_NO_HINTING) ++ || face->glyph->format != ft_glyph_format_outline ) { ++ fprintf(stderr, "Can't load glyph %s, skipped\n", curg->name); ++ return; ++ } ++ ++ ol = &face->glyph->outline; ++ lastx = 0.0; lasty = 0.0; ++ ++ if( FT_Outline_Decompose(ol, &ft_outl_funcs, NULL) ) { ++ fprintf(stderr, "Can't decompose outline of glyph %s, skipped\n", curg->name); ++ return; ++ } ++ ++ /* FreeType does not do explicit closepath() */ ++ if(curg->lastentry) { ++ g_closepath(curg); ++ } ++ ++ if(ol->flags & ft_outline_reverse_fill) { ++ assertpath(curg->entries, __FILE__, __LINE__, curg->name); ++ reversepaths(curg); ++ } ++} ++ ++/* ++ * Get the kerning data. ++ */ ++ ++static void ++kerning( ++ GLYPH *glyph_list ++) ++{ ++ int i, j, n; ++ int nglyphs = face->num_glyphs; ++ FT_Vector k; ++ GLYPH *gl; ++ ++ if( nglyphs == 0 || !FT_HAS_KERNING(face) ) { ++ WARNING_1 fputs("No Kerning data\n", stderr); ++ return; ++ } ++ ++ for(i=0; i= 1) ++#define WARNING_2 if(warnlevel >= 2) ++#define WARNING_3 if(warnlevel >= 3) ++#define WARNING_4 if(warnlevel >= 4) ++ ++/* ++ * Bitmap control macros ++ */ ++ ++#define BITMAP_BYTES(size) (((size)+7)>>3) ++#define DEF_BITMAP(name, size) unsigned char name[BITMAP_BYTES(size)] ++#define SET_BITMAP(name, bit) ( name[(bit)>>3] |= (1<<((bit)&7)) ) ++#define CLR_BITMAP(name, bit) ( name[(bit)>>3] &= ~(1<<((bit)&7)) ) ++#define IS_BITMAP(name, bit) ( name[(bit)>>3] & (1<<((bit)&7)) ) ++ ++/* debugging */ ++ ++/* debug flags */ ++#define DEBUG_UNICODE 0x00000001 /* unicode to 8-bit code conversion */ ++#define DEBUG_MAINSTEMS 0x00000002 /* glyph-wide main stem generation */ ++#define DEBUG_SUBSTEMS 0x00000004 /* substituted stem generation */ ++#define DEBUG_STEMS (DEBUG_MAINSTEMS|DEBUG_SUBSTEMS) ++#define DEBUG_REVERSAL 0x00000008 /* reversal of the paths */ ++#define DEBUG_FIXCVDIR 0x00000010 /* fixcvdir() */ ++#define DEBUG_STEMOVERLAP 0x00000020 /* stemoverlap() */ ++#define DEBUG_BLUESTEMS 0x00000040 /* markbluestems() */ ++#define DEBUG_STRAIGHTEN 0x00000080 /* markbluestems() */ ++#define DEBUG_EXTMAP 0x00000100 /* parsing of external map */ ++#define DEBUG_TOINT 0x00000200 /* conversion of path to integer */ ++#define DEBUG_BUILDG 0x00000400 /* building of glyph path */ ++#define DEBUG_QUAD 0x00000800 /* splitting curves by quadrants */ ++#define DEBUG_SQEQ 0x00001000 /* square equation solver */ ++#define DEBUG_COMPOSITE 0x00002000 /* handling of composite glyphs */ ++#define DEBUG_FCONCISE 0x00004000 /* normalization of curves */ ++#define DEBUG_FT 0x00008000 /* FreeType front-end */ ++#define DEBUG_BITMAP 0x00010000 /* conversion from bitmap */ ++#define DEBUG_DISABLED 0x80000000 /* special flag: temporary disable debugging */ ++ ++#if 0 ++/* at what we want to look now */ ++#ifndef DEBUG ++# define DEBUG (DEBUG_BITMAP) ++#endif ++ ++/* uncomment the next line if debugging data is wanted for one glyph only */ ++#define DBG_GLYPH "C118" /* */ ++#endif ++ ++#if 1 ++# define ISDBG(name) (0) ++# define ENABLEDBG(condition) (0) ++# define DISABLEDBG(condition) (0) ++#else ++ extern int debug; /* collection of the flags */ ++/* this ISDBG will only work on ANSI C, not K&R */ ++# define ISDBG(name) ( (debug & DEBUG_DISABLED) ? 0 : (debug & (DEBUG_##name)) ) ++# define ENABLEDBG(condition) ( (condition) ? (debug&=~DEBUG_DISABLED) : 0 ) ++# define DISABLEDBG(condition) ( (condition) ? (debug|=DEBUG_DISABLED) : 0 ) ++#endif ++ ++#ifdef DBG_GLYPH ++# define DBG_TO_GLYPH(g) DISABLEDBG( strcmp( (g)->name, DBG_GLYPH ) ) ++# define DBG_FROM_GLYPH(g) ENABLEDBG(1) ++#else ++# define DBG_TO_GLYPH(g) (0) ++# define DBG_FROM_GLYPH(g) (0) ++#endif ++ ++/* prototypes */ ++int iscale( int val); ++double fscale( double val); ++int unicode_rev_lookup( int unival); ++void bmp_outline( GLYPH *g, int scale, char *bmap, ++ int xsz, int ysz, int xoff, int yoff); ++int isign( int x); ++int fsign( double x); ++ ++/* global metrics for a font */ ++ ++struct font_metrics { ++ /* post */ ++ double italic_angle; ++ short underline_position; ++ short underline_thickness; ++ short is_fixed_pitch; ++ ++ /* hhea */ ++ short ascender; ++ short descender; ++ ++ /* head */ ++ unsigned short units_per_em; ++ short bbox[4]; ++ ++ /* name */ ++ char *name_copyright; ++ char *name_family; ++ char *name_style; ++ char *name_full; ++ char *name_version; ++ char *name_ps; ++ ++ /* other */ ++ int force_bold; ++}; ++ ++/* size of the encoding table - glyphs beyond 255 are actually unnumbered */ ++ ++#define ENCTABSZ 1024 ++ ++/* switch table structure for front-ends */ ++ ++#define MAXSUFFIX 10 ++ ++struct frontsw { ++ char *name; /* name of the front end */ ++ char *descr; /* description of the front end */ ++ char *suffix[MAXSUFFIX]; /* possible file name suffixes */ ++ ++ void (*open)(char *fname, char *arg); /* open font file */ ++ void (*close)(void); /* close font file */ ++ int (*nglyphs)(void); /* get the number of glyphs */ ++ int (*glnames)(GLYPH *glyphs); /* get the names of glyphs */ ++ void (*glmetrics)(GLYPH *glyphs); /* get the metrics of glyphs */ ++ int (*glenc)(GLYPH *glyphs, int *enc, int *unimap); /* get the encoding */ ++ void (*fnmetrics)(struct font_metrics *fm); /* get the font metrics */ ++ void (*glpath)(int glyphno, GLYPH *glyphs); /* get the glyph path */ ++ void (*kerning)(GLYPH *glyph_list); /* extract the kerning data */ ++}; +diff -ruN xserver-old/hw/xprint/extras/ttf2pt1/Makefile xserver/hw/xprint/extras/ttf2pt1/Makefile +--- xserver-old/hw/xprint/extras/ttf2pt1/Makefile 1970-01-01 10:00:00.000000000 +1000 ++++ xserver/hw/xprint/extras/ttf2pt1/Makefile 2006-06-27 13:10:26.000000000 +1000 +@@ -0,0 +1,279 @@ ++ ++# This file should be configured before running `make'. ++# Uncomment or change the values that are relevant for your OS. ++ ++# The preferred C compiler (by default use the OS-specific default value). ++# For BSD/OS, FreeBSD, Linux (all flavors), NetBSD, OpenBSD the default ++# compiler is GNU C. ++# (Note please the politically correct ordering by alphabet ! :-) ++# ++# Use GNU C even if it's not the default compiler ++# ++#CC=gcc ++# ++# Use the standard ANSI C compiler on HP-UX even if it's not default ++# ++#CC=c89 ++ ++# ++# The system-dependent flags for the C compiler ++# ++# Default ++ ++CFLAGS_SYS= -O ++ ++# For GNU C ++# ++#CFLAGS_SYS= -O2 ++# ++# For GNU C with long options support library (Linux etc.) ++# ++#CFLAGS_SYS= -O2 -D_GNU_SOURCE ++# ++# For GNU C on HP-UX/PA-RISC 1.1 ++# ++#CFLAGS_SYS= -O2 -Wa,-w ++# ++# For the standard ANSI C on HP-UX ++# ++#CFLAGS_SYS= +O2 -D_HPUX_SOURCE ++ ++# ++# The system-dependent libraries ++# ++# Defalut (for the BSD-style OSes) ++ ++LIBS_SYS= -lm ++ ++# For SystemV (such as SCO, UnixWare, Solaris, but _NOT_ Linux or HP-UX) ++# ++#LIBS_SYS= -lm -lsocket ++ ++# ++# The flags for C compiler for the FreeType-2 library (disabled by default). ++# This WON'T BUILD with FT2-beta8, use the FreeType release 2.0.4 ++# http://download.sourceforge.net/freetype/freetype-2.0.4.tar.gz ++ ++CFLAGS_FT= ++ ++# To enable use of the FreeType-2 library ++# (if the include and lib directory do not match your installation, ++# modify them), also uncomment LIBS_FT ++# ++#CFLAGS_FT = -DUSE_FREETYPE -I/usr/local/include/freetype2 -I/usr/local/include ++ ++# ++# The FreeType-2 library flags (disabled by default) ++ ++LIBS_FT= ++ ++# To enable use of the FreeType-2 library ++# (if the include and lib directory do not match your installation, ++# modify them), also uncomment CFLAGS_FT ++# ++#LIBS_FT= -L/usr/local/lib -lfreetype ++ ++# ++# The flags for C compiler for the Autotrace library (disabled by default). ++# USE OF THIS FEATURE IS STRONGLY DISCOURAGED, THE BUILT-IN TRACING ++# (AKA VECTORIZATION) PROVIDES MUCH BETTER RESULTS. ++# The tested version is 0.29a (and the fonts produced with it are ++# absolutely not usable). ++# http://download.sourceforge.net/autotrace/autotrace-0.29.tar.gz ++ ++CFLAGS_AT= ++ ++# To enable use of the Autotrace library ++# (if the include and lib directory do not match your installation, ++# modify them), also uncomment LIBS_AT ++# ++#CFLAGS_AT = -DUSE_AUTOTRACE -I/usr/local/include ++ ++# ++# The Autotrace library flags (disabled by default) ++ ++LIBS_AT= ++ ++# To enable use of the Autotrace library ++# (if the include and lib directory do not match your installation, ++# modify them), also uncomment CFLAGS_AT ++# ++#LIBS_AT= -L/usr/local/lib -lautotrace ++ ++# ++# Preference of front-ends if multiple parsers match a file ++# (by default the build-in front-end takes preference over FreeType) ++ ++CFLAGS_PREF= ++ ++# To prefer FreeType (if enabled): ++# ++#CFLAGS_PREF= -DPREFER_FREETYPE ++ ++# Uncomment the second line to not compile t1asm into ttf2pt1 ++CFLAGS_EXTT1ASM= ++#CFLAGS_EXTT1ASM= -DEXTERNAL_T1ASM ++ ++CFLAGS= $(CFLAGS_SYS) $(CFLAGS_FT) $(CFLAGS_AT) $(CFLAGS_PREF) ++LIBS= $(LIBS_SYS) $(LIBS_FT) $(LIBS_AT) ++ ++# Installation-related stuff ++# ++# The base dir for installation and subdirs in it ++INSTDIR = /usr/local ++# for binaries ++BINDIR = $(INSTDIR)/bin ++# for binaries of little general interest ++LIBXDIR = $(INSTDIR)/libexec/ttf2pt1 ++# for scripts, maps/encodings etc. ++SHAREDIR = $(INSTDIR)/share/ttf2pt1 ++MANDIR = $(INSTDIR)/man ++ ++# owner and group of installed files ++OWNER = root ++GROUP = bin ++ ++# After you have configured the Makefile, comment out the following ++# definition: ++warning: docs ++ @echo >&2 ++ @echo " You have to configure the Makefile before running make!" >&2 ++ @echo "(or if you are lazy and hope that it will work as is run \`make all')">&2 ++ @echo >&2 ++ ++DOCS=CHANGES README FONTS FONTS.hpux encodings/README other/README \ ++ app/X11/README app/netscape/README app/TeX/README ++ ++SUBDIRS = app encodings maps scripts other ++TXTFILES = README* FONTS* CHANGES* COPYRIGHT ++ ++MANS1=ttf2pt1.1 ttf2pt1_convert.1 ttf2pt1_x2gs.1 ++MANS=$(MANS1) $(MANS5) ++ ++all: t1asm ttf2pt1 docs mans rpm ++ ++docs: $(DOCS) ++ ++mans: $(MANS) ++ ++clean: ++ rm -f t1asm ttf2pt1 *.o app/RPM/Makefile app/RPM/*.spec *.core core.* core ++ ( cd other && make clean; ) ++ ( cd app/netscape && make clean; ) ++ ++veryclean: clean ++ rm -f $(DOCS) $(MANS) ++ ++rpm: app/RPM/Makefile app/RPM/ttf2pt1.spec ++ ++ttf2pt1.1: README.html ++ scripts/html2man . . app/RPM/Makefile ++ ++app/RPM/ttf2pt1.spec: app/RPM/ttf2pt1.spec.src version.h ++ sed 's/^Version:.*/Version: '`grep TTF2PT1_VERSION version.h| cut -d\" -f2`'/' $@ ++ ++t1asm: t1asm.c ++ $(CC) $(CFLAGS) -o t1asm -DSTANDALONE t1asm.c $(LIBS) ++ ++ttf2pt1.o: ttf2pt1.c ttf.h pt1.h global.h version.h ++ $(CC) $(CFLAGS) -c ttf2pt1.c ++ ++pt1.o: pt1.c ttf.h pt1.h global.h ++ $(CC) $(CFLAGS) -c pt1.c ++ ++ttf.o: ttf.c ttf.h pt1.h global.h ++ $(CC) $(CFLAGS) -c ttf.c ++ ++ft.o: ft.c pt1.h global.h ++ $(CC) $(CFLAGS) -c ft.c ++ ++bdf.o: bdf.c pt1.h global.h ++ $(CC) $(CFLAGS) -c bdf.c ++ ++bitmap.o: bitmap.c pt1.h global.h ++ $(CC) $(CFLAGS) -c bitmap.c ++ ++runt1asm.o: runt1asm.c global.h ++ $(CC) $(CFLAGS) $(CFLAGS_EXTT1ASM) -c runt1asm.c ++ ++ttf2pt1: ttf2pt1.o pt1.o runt1asm.o ttf.o ft.o bdf.o bitmap.o ++ $(CC) $(CFLAGS) -o ttf2pt1 ttf2pt1.o pt1.o runt1asm.o ttf.o ft.o bdf.o bitmap.o $(LIBS) ++ ++CHANGES: CHANGES.html ++ scripts/unhtml CHANGES ++ ++README: README.html ++ scripts/unhtml README ++ ++encodings/README: encodings/README.html ++ scripts/unhtml encodings/README ++ ++other/README: other/README.html ++ scripts/unhtml other/README ++ ++app/X11/README: app/X11/README.html ++ scripts/unhtml app/X11/README ++ ++app/netscape/README: app/netscape/README.html ++ scripts/unhtml app/netscape/README ++ ++app/TeX/README: app/TeX/README.html ++ scripts/unhtml app/TeX/README ++ ++FONTS: FONTS.html ++ scripts/unhtml FONTS ++ ++FONTS.hpux: FONTS.hpux.html ++ scripts/unhtml FONTS.hpux ++ ++install: all ++ scripts/inst_dir $(BINDIR) $(OWNER) $(GROUP) 0755 ++ scripts/inst_dir $(LIBXDIR) $(OWNER) $(GROUP) 0755 ++ scripts/inst_dir $(SHAREDIR) $(OWNER) $(GROUP) 0755 ++ scripts/inst_dir $(MANDIR)/man1 $(OWNER) $(GROUP) 0755 ++ scripts/inst_dir $(MANDIR)/man5 $(OWNER) $(GROUP) 0755 ++ cp -R $(TXTFILES) $(SUBDIRS) $(SHAREDIR) ++ chown -R $(OWNER) $(SHAREDIR) ++ chgrp -R $(GROUP) $(SHAREDIR) ++ chmod -R go-w $(SHAREDIR) ++ scripts/inst_file ttf2pt1 $(BINDIR)/ttf2pt1 $(OWNER) $(GROUP) 0755 ++ [ -f $(BINDIR)/t1asm ] || scripts/inst_file t1asm $(LIBXDIR)/t1asm $(OWNER) $(GROUP) 0755 ++ sed 's|^TTF2PT1_BINDIR=$$|TTF2PT1_BINDIR=$(BINDIR)|;\ ++ s|^TTF2PT1_LIBXDIR=$$|TTF2PT1_LIBXDIR=$(LIBXDIR)|;\ ++ s|^TTF2PT1_SHAREDIR=$$|TTF2PT1_SHAREDIR=$(SHAREDIR)|;' cvt.tmp ++ scripts/inst_file cvt.tmp $(BINDIR)/ttf2pt1_convert $(OWNER) $(GROUP) 0755 ++ scripts/inst_file cvt.tmp $(SHAREDIR)/scripts/convert $(OWNER) $(GROUP) 0755 ++ rm cvt.tmp ++ scripts/inst_file scripts/x2gs $(BINDIR)/ttf2pt1_x2gs $(OWNER) $(GROUP) 0755 ++ for i in $(MANS1); do { \ ++ sed 's|TTF2PT1_BINDIR|$(BINDIR)|;\ ++ s|TTF2PT1_LIBXDIR|$(LIBXDIR)|;\ ++ s|TTF2PT1_SHAREDIR|$(SHAREDIR)|;' <$$i >$(MANDIR)/man1/$$i \ ++ && chown $(OWNER) $(MANDIR)/man1/$$i \ ++ && chgrp $(GROUP) $(MANDIR)/man1/$$i \ ++ && chmod 0644 $(MANDIR)/man1/$$i \ ++ || exit 1; \ ++ } done ++ ++uninstall: ++ rm -f $(BINDIR)/ttf2pt1 $(BINDIR)/ttf2pt1_convert $(BINDIR)/ttf2pt1_x2gs ++ rm -rf $(LIBXDIR) ++ rm -rf $(SHAREDIR) ++ for i in $(MANS1); do { \ ++ rm -f $(MANDIR)/man1/$$i $(MANDIR)/man1/$$i.gz; \ ++ } done ++ ++ ++# targets for automatic generation of releases and snapshots ++ ++snapshot: ++ scripts/mkrel snapshot ++ ++release: ++ scripts/mkrel release +diff -ruN xserver-old/hw/xprint/extras/ttf2pt1/pt1.c xserver/hw/xprint/extras/ttf2pt1/pt1.c +--- xserver-old/hw/xprint/extras/ttf2pt1/pt1.c 1970-01-01 10:00:00.000000000 +1000 ++++ xserver/hw/xprint/extras/ttf2pt1/pt1.c 2006-06-27 13:10:26.000000000 +1000 +@@ -0,0 +1,7374 @@ ++/* ++ * see COPYRIGHT ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#ifndef WINDOWS ++# include ++# include ++#else ++# include "windows.h" ++#endif ++ ++#include "ttf.h" ++#include "pt1.h" ++#include "global.h" ++ ++/* big and small values for comparisons */ ++#define FBIGVAL (1e20) ++#define FEPS (100000./FBIGVAL) ++ ++/* names of the axes */ ++#define X 0 ++#define Y 1 ++ ++/* the GENTRY extension structure used in fforceconcise() */ ++ ++struct gex_con { ++ double d[2 /*X, Y*/]; /* sizes of curve */ ++ double sin2; /* squared sinus of the angle to the next gentry */ ++ double len2; /* squared distance between the endpoints */ ++ ++/* number of reference dots taken from each curve */ ++#define NREFDOTS 3 ++ ++ double dots[NREFDOTS][2]; /* reference dots */ ++ ++ int flags; /* flags for gentry and tits joint to the next gentry */ ++/* a vertical or horizontal line may be in 2 quadrants at once */ ++#define GEXF_QUL 0x00000001 /* in up-left quadrant */ ++#define GEXF_QUR 0x00000002 /* in up-right quadrant */ ++#define GEXF_QDR 0x00000004 /* in down-right quadrant */ ++#define GEXF_QDL 0x00000008 /* in down-left quadrant */ ++#define GEXF_QMASK 0x0000000F /* quadrant mask */ ++ ++/* if a line is nearly vertical or horizontal, we remember that idealized quartant too */ ++#define GEXF_QTO_IDEAL(f) (((f)&0xF)<<4) ++#define GEXF_QFROM_IDEAL(f) (((f)&0xF0)>>4) ++#define GEXF_IDQ_L 0x00000090 /* left */ ++#define GEXF_IDQ_R 0x00000060 /* right */ ++#define GEXF_IDQ_U 0x00000030 /* up */ ++#define GEXF_IDQ_D 0x000000C0 /* down */ ++ ++/* possibly can be joined with conditions: ++ * (in order of increasing preference, the numeric order is important) ++ */ ++#define GEXF_JLINE 0x00000100 /* into one line */ ++#define GEXF_JIGN 0x00000200 /* if one entry's tangent angle is ignored */ ++#define GEXF_JID 0x00000400 /* if one entry is idealized to hor/vert */ ++#define GEXF_JFLAT 0x00000800 /* if one entry is flattened */ ++#define GEXF_JGOOD 0x00001000 /* perfectly, no additional maodifications */ ++ ++#define GEXF_JMASK 0x00001F00 /* the mask of all above */ ++#define GEXF_JCVMASK 0x00001E00 /* the mask of all above except JLINE */ ++ ++/* which entry needs to be modified for conditional joining */ ++#define GEXF_JIGN1 0x00002000 ++#define GEXF_JIGN2 0x00004000 ++#define GEXF_JIGNDIR(dir) (GEXF_JIGN1<<(dir)) ++#define GEXF_JID1 0x00008000 ++#define GEXF_JID2 0x00010000 ++#define GEXF_JIDDIR(dir) (GEXF_JID1<<(dir)) ++#define GEXF_JFLAT1 0x00020000 ++#define GEXF_JFLAT2 0x00040000 ++#define GEXF_JFLATDIR(dir) (GEXF_JFLAT1<<(dir)) ++ ++#define GEXF_VERT 0x00100000 /* is nearly vertical */ ++#define GEXF_HOR 0x00200000 /* is nearly horizontal */ ++#define GEXF_FLAT 0x00400000 /* is nearly flat */ ++ ++#define GEXF_VDOTS 0x01000000 /* the dots are valid */ ++ ++ signed char isd[2 /*X,Y*/]; /* signs of the sizes */ ++}; ++typedef struct gex_con GEX_CON; ++ ++/* convenience macros */ ++#define X_CON(ge) ((GEX_CON *)((ge)->ext)) ++#define X_CON_D(ge) (X_CON(ge)->d) ++#define X_CON_DX(ge) (X_CON(ge)->d[0]) ++#define X_CON_DY(ge) (X_CON(ge)->d[1]) ++#define X_CON_ISD(ge) (X_CON(ge)->isd) ++#define X_CON_ISDX(ge) (X_CON(ge)->isd[0]) ++#define X_CON_ISDY(ge) (X_CON(ge)->isd[1]) ++#define X_CON_SIN2(ge) (X_CON(ge)->sin2) ++#define X_CON_LEN2(ge) (X_CON(ge)->len2) ++#define X_CON_F(ge) (X_CON(ge)->flags) ++ ++/* performance statistics about guessing the concise curves */ ++static int ggoodcv=0, ggoodcvdots=0, gbadcv=0, gbadcvdots=0; ++ ++int stdhw, stdvw; /* dominant stems widths */ ++int stemsnaph[12], stemsnapv[12]; /* most typical stem width */ ++ ++int bluevalues[14]; ++int nblues; ++int otherblues[10]; ++int notherb; ++int bbox[4]; /* the FontBBox array */ ++double italic_angle; ++ ++GLYPH *glyph_list; ++int encoding[ENCTABSZ]; /* inverse of glyph[].char_no */ ++int kerning_pairs = 0; ++ ++/* prototypes */ ++static void fixcvdir( GENTRY * ge, int dir); ++static void fixcvends( GENTRY * ge); ++static int fgetcvdir( GENTRY * ge); ++static int igetcvdir( GENTRY * ge); ++static int fiszigzag( GENTRY *ge); ++static int iiszigzag( GENTRY *ge); ++static GENTRY * freethisge( GENTRY *ge); ++static void addgeafter( GENTRY *oge, GENTRY *nge ); ++static GENTRY * newgentry( int flags); ++static void debugstems( char *name, STEM * hstems, int nhs, STEM * vstems, int nvs); ++static int addbluestems( STEM *s, int n); ++static void sortstems( STEM * s, int n); ++static int stemoverlap( STEM * s1, STEM * s2); ++static int steminblue( STEM *s); ++static void markbluestems( STEM *s, int nold); ++static int joinmainstems( STEM * s, int nold, int useblues); ++static void joinsubstems( STEM * s, short *pairs, int nold, int useblues); ++static void fixendpath( GENTRY *ge); ++static void fdelsmall( GLYPH *g, double minlen); ++static void alloc_gex_con( GENTRY *ge); ++static double fjointsin2( GENTRY *ge1, GENTRY *ge2); ++#if 0 ++static double fcvarea( GENTRY *ge); ++#endif ++static double fcvval( GENTRY *ge, int axis, double t); ++static void fsampledots( GENTRY *ge, double dots[][2], int ndots); ++static void fnormalizege( GENTRY *ge); ++static void fanalyzege( GENTRY *ge); ++static void fanalyzejoint( GENTRY *ge); ++static void fconcisecontour( GLYPH *g, GENTRY *ge); ++static double fclosegap( GENTRY *from, GENTRY *to, int axis, ++ double gap, double *ret); ++ ++int ++isign( ++ int x ++) ++{ ++ if (x > 0) ++ return 1; ++ else if (x < 0) ++ return -1; ++ else ++ return 0; ++} ++ ++int ++fsign( ++ double x ++) ++{ ++ if (x > 0.0) ++ return 1; ++ else if (x < 0.0) ++ return -1; ++ else ++ return 0; ++} ++ ++static GENTRY * ++newgentry( ++ int flags ++) ++{ ++ GENTRY *ge; ++ ++ ge = calloc(1, sizeof(GENTRY)); ++ ++ if (ge == 0) { ++ fprintf(stderr, "***** Memory allocation error *****\n"); ++ exit(255); ++ } ++ ge->stemid = -1; ++ ge->flags = flags; ++ /* the rest is set to 0 by calloc() */ ++ return ge; ++} ++ ++/* ++ * Routines to print out Postscript functions with optimization ++ */ ++ ++void ++rmoveto( ++ int dx, ++ int dy ++) ++{ ++ if (optimize && dx == 0) ++ fprintf(pfa_file, "%d vmoveto\n", dy); ++ else if (optimize && dy == 0) ++ fprintf(pfa_file, "%d hmoveto\n", dx); ++ else ++ fprintf(pfa_file, "%d %d rmoveto\n", dx, dy); ++} ++ ++void ++rlineto( ++ int dx, ++ int dy ++) ++{ ++ if (optimize && dx == 0 && dy == 0) /* for special pathologic ++ * case */ ++ return; ++ else if (optimize && dx == 0) ++ fprintf(pfa_file, "%d vlineto\n", dy); ++ else if (optimize && dy == 0) ++ fprintf(pfa_file, "%d hlineto\n", dx); ++ else ++ fprintf(pfa_file, "%d %d rlineto\n", dx, dy); ++} ++ ++void ++rrcurveto( ++ int dx1, ++ int dy1, ++ int dx2, ++ int dy2, ++ int dx3, ++ int dy3 ++) ++{ ++ /* first two ifs are for crazy cases that occur surprisingly often */ ++ if (optimize && dx1 == 0 && dx2 == 0 && dx3 == 0) ++ rlineto(0, dy1 + dy2 + dy3); ++ else if (optimize && dy1 == 0 && dy2 == 0 && dy3 == 0) ++ rlineto(dx1 + dx2 + dx3, 0); ++ else if (optimize && dy1 == 0 && dx3 == 0) ++ fprintf(pfa_file, "%d %d %d %d hvcurveto\n", ++ dx1, dx2, dy2, dy3); ++ else if (optimize && dx1 == 0 && dy3 == 0) ++ fprintf(pfa_file, "%d %d %d %d vhcurveto\n", ++ dy1, dx2, dy2, dx3); ++ else ++ fprintf(pfa_file, "%d %d %d %d %d %d rrcurveto\n", ++ dx1, dy1, dx2, dy2, dx3, dy3); ++} ++ ++void ++closepath(void) ++{ ++ fprintf(pfa_file, "closepath\n"); ++} ++ ++/* ++ * Many of the path processing routines exist (or will exist) in ++ * both floating-point and integer version. Fimally most of the ++ * processing will go in floating point and the integer processing ++ * will become legacy. ++ * The names of floating routines start with f, names of integer ++ * routines start with i, and those old routines existing in one ++ * version only have no such prefix at all. ++ */ ++ ++/* ++** Routine that checks integrity of the path, for debugging ++*/ ++ ++void ++assertpath( ++ GENTRY * from, ++ char *file, ++ int line, ++ char *name ++) ++{ ++ GENTRY *first, *pe, *ge; ++ int isfloat; ++ ++ if(from==0) ++ return; ++ isfloat = (from->flags & GEF_FLOAT); ++ pe = from->prev; ++ for (ge = from; ge != 0; pe = ge, ge = ge->next) { ++ if( (ge->flags & GEF_FLOAT) ^ isfloat ) { ++ fprintf(stderr, "**! assertpath: called from %s line %d (%s) ****\n", file, line, name); ++ fprintf(stderr, "float flag changes from %s to %s at 0x%p (type %c, prev type %c)\n", ++ (isfloat ? "TRUE" : "FALSE"), (isfloat ? "FALSE" : "TRUE"), ge, ge->type, pe->type); ++ abort(); ++ } ++ if (pe != ge->prev) { ++ fprintf(stderr, "**! assertpath: called from %s line %d (%s) ****\n", file, line, name); ++ fprintf(stderr, "unidirectional chain 0x%x -next-> 0x%x -prev-> 0x%x \n", ++ pe, ge, ge->prev); ++ abort(); ++ } ++ ++ switch(ge->type) { ++ case GE_MOVE: ++ break; ++ case GE_PATH: ++ if (ge->prev == 0) { ++ fprintf(stderr, "**! assertpath: called from %s line %d (%s) ****\n", file, line, name); ++ fprintf(stderr, "empty path at 0x%x \n", ge); ++ abort(); ++ } ++ break; ++ case GE_LINE: ++ case GE_CURVE: ++ if(ge->frwd->bkwd != ge) { ++ fprintf(stderr, "**! assertpath: called from %s line %d (%s) ****\n", file, line, name); ++ fprintf(stderr, "unidirectional chain 0x%x -frwd-> 0x%x -bkwd-> 0x%x \n", ++ ge, ge->frwd, ge->frwd->bkwd); ++ abort(); ++ } ++ if(ge->prev->type == GE_MOVE) { ++ first = ge; ++ if(ge->bkwd->next->type != GE_PATH) { ++ fprintf(stderr, "**! assertpath: called from %s line %d (%s) ****\n", file, line, name); ++ fprintf(stderr, "broken first backlink 0x%x -bkwd-> 0x%x -next-> 0x%x \n", ++ ge, ge->bkwd, ge->bkwd->next); ++ abort(); ++ } ++ } ++ if(ge->next->type == GE_PATH) { ++ if(ge->frwd != first) { ++ fprintf(stderr, "**! assertpath: called from %s line %d (%s) ****\n", file, line, name); ++ fprintf(stderr, "broken loop 0x%x -...-> 0x%x -frwd-> 0x%x \n", ++ first, ge, ge->frwd); ++ abort(); ++ } ++ } ++ break; ++ } ++ ++ } ++} ++ ++void ++assertisfloat( ++ GLYPH *g, ++ char *msg ++) ++{ ++ if( !(g->flags & GF_FLOAT) ) { ++ fprintf(stderr, "**! Glyph %s is not float: %s\n", g->name, msg); ++ abort(); ++ } ++ if(g->lastentry) { ++ if( !(g->lastentry->flags & GEF_FLOAT) ) { ++ fprintf(stderr, "**! Glyphs %s last entry is int: %s\n", g->name, msg); ++ abort(); ++ } ++ } ++} ++ ++void ++assertisint( ++ GLYPH *g, ++ char *msg ++) ++{ ++ if( (g->flags & GF_FLOAT) ) { ++ fprintf(stderr, "**! Glyph %s is not int: %s\n", g->name, msg); ++ abort(); ++ } ++ if(g->lastentry) { ++ if( (g->lastentry->flags & GEF_FLOAT) ) { ++ fprintf(stderr, "**! Glyphs %s last entry is float: %s\n", g->name, msg); ++ abort(); ++ } ++ } ++} ++ ++ ++/* ++ * Routines to save the generated data about glyph ++ */ ++ ++void ++fg_rmoveto( ++ GLYPH * g, ++ double x, ++ double y) ++{ ++ GENTRY *oge; ++ ++ if (ISDBG(BUILDG)) ++ fprintf(stderr, "%s: f rmoveto(%g, %g)\n", g->name, x, y); ++ ++ assertisfloat(g, "adding float MOVE"); ++ ++ if ((oge = g->lastentry) != 0) { ++ if (oge->type == GE_MOVE) { /* just eat up the first move */ ++ oge->fx3 = x; ++ oge->fy3 = y; ++ } else if (oge->type == GE_LINE || oge->type == GE_CURVE) { ++ fprintf(stderr, "Glyph %s: MOVE in middle of path\n", g->name); ++ } else { ++ GENTRY *nge; ++ ++ nge = newgentry(GEF_FLOAT); ++ nge->type = GE_MOVE; ++ nge->fx3 = x; ++ nge->fy3 = y; ++ ++ oge->next = nge; ++ nge->prev = oge; ++ g->lastentry = nge; ++ } ++ } else { ++ GENTRY *nge; ++ ++ nge = newgentry(GEF_FLOAT); ++ nge->type = GE_MOVE; ++ nge->fx3 = x; ++ nge->fy3 = y; ++ nge->bkwd = (GENTRY*)&g->entries; ++ g->entries = g->lastentry = nge; ++ } ++ ++ if (0 && ISDBG(BUILDG)) ++ dumppaths(g, NULL, NULL); ++} ++ ++void ++ig_rmoveto( ++ GLYPH * g, ++ int x, ++ int y) ++{ ++ GENTRY *oge; ++ ++ if (ISDBG(BUILDG)) ++ fprintf(stderr, "%s: i rmoveto(%d, %d)\n", g->name, x, y); ++ ++ assertisint(g, "adding int MOVE"); ++ ++ if ((oge = g->lastentry) != 0) { ++ if (oge->type == GE_MOVE) { /* just eat up the first move */ ++ oge->ix3 = x; ++ oge->iy3 = y; ++ } else if (oge->type == GE_LINE || oge->type == GE_CURVE) { ++ fprintf(stderr, "Glyph %s: MOVE in middle of path, ignored\n", g->name); ++ } else { ++ GENTRY *nge; ++ ++ nge = newgentry(0); ++ nge->type = GE_MOVE; ++ nge->ix3 = x; ++ nge->iy3 = y; ++ ++ oge->next = nge; ++ nge->prev = oge; ++ g->lastentry = nge; ++ } ++ } else { ++ GENTRY *nge; ++ ++ nge = newgentry(0); ++ nge->type = GE_MOVE; ++ nge->ix3 = x; ++ nge->iy3 = y; ++ nge->bkwd = (GENTRY*)&g->entries; ++ g->entries = g->lastentry = nge; ++ } ++ ++} ++ ++void ++fg_rlineto( ++ GLYPH * g, ++ double x, ++ double y) ++{ ++ GENTRY *oge, *nge; ++ ++ if (ISDBG(BUILDG)) ++ fprintf(stderr, "%s: f rlineto(%g, %g)\n", g->name, x, y); ++ ++ assertisfloat(g, "adding float LINE"); ++ ++ nge = newgentry(GEF_FLOAT); ++ nge->type = GE_LINE; ++ nge->fx3 = x; ++ nge->fy3 = y; ++ ++ if ((oge = g->lastentry) != 0) { ++ if (x == oge->fx3 && y == oge->fy3) { /* empty line */ ++ /* ignore it or we will get in troubles later */ ++ free(nge); ++ return; ++ } ++ if (g->path == 0) { ++ g->path = nge; ++ nge->bkwd = nge->frwd = nge; ++ } else { ++ oge->frwd = nge; ++ nge->bkwd = oge; ++ g->path->bkwd = nge; ++ nge->frwd = g->path; ++ } ++ ++ oge->next = nge; ++ nge->prev = oge; ++ g->lastentry = nge; ++ } else { ++ WARNING_1 fprintf(stderr, "Glyph %s: LINE outside of path\n", g->name); ++ free(nge); ++ } ++ ++ if (0 && ISDBG(BUILDG)) ++ dumppaths(g, NULL, NULL); ++} ++ ++void ++ig_rlineto( ++ GLYPH * g, ++ int x, ++ int y) ++{ ++ GENTRY *oge, *nge; ++ ++ if (ISDBG(BUILDG)) ++ fprintf(stderr, "%s: i rlineto(%d, %d)\n", g->name, x, y); ++ ++ assertisint(g, "adding int LINE"); ++ ++ nge = newgentry(0); ++ nge->type = GE_LINE; ++ nge->ix3 = x; ++ nge->iy3 = y; ++ ++ if ((oge = g->lastentry) != 0) { ++ if (x == oge->ix3 && y == oge->iy3) { /* empty line */ ++ /* ignore it or we will get in troubles later */ ++ free(nge); ++ return; ++ } ++ if (g->path == 0) { ++ g->path = nge; ++ nge->bkwd = nge->frwd = nge; ++ } else { ++ oge->frwd = nge; ++ nge->bkwd = oge; ++ g->path->bkwd = nge; ++ nge->frwd = g->path; ++ } ++ ++ oge->next = nge; ++ nge->prev = oge; ++ g->lastentry = nge; ++ } else { ++ WARNING_1 fprintf(stderr, "Glyph %s: LINE outside of path\n", g->name); ++ free(nge); ++ } ++ ++} ++ ++void ++fg_rrcurveto( ++ GLYPH * g, ++ double x1, ++ double y1, ++ double x2, ++ double y2, ++ double x3, ++ double y3) ++{ ++ GENTRY *oge, *nge; ++ ++ oge = g->lastentry; ++ ++ if (ISDBG(BUILDG)) ++ fprintf(stderr, "%s: f rrcurveto(%g, %g, %g, %g, %g, %g)\n" ++ ,g->name, x1, y1, x2, y2, x3, y3); ++ ++ assertisfloat(g, "adding float CURVE"); ++ ++ if (oge && oge->fx3 == x1 && x1 == x2 && x2 == x3) /* check if it's ++ * actually a line */ ++ fg_rlineto(g, x1, y3); ++ else if (oge && oge->fy3 == y1 && y1 == y2 && y2 == y3) ++ fg_rlineto(g, x3, y1); ++ else { ++ nge = newgentry(GEF_FLOAT); ++ nge->type = GE_CURVE; ++ nge->fx1 = x1; ++ nge->fy1 = y1; ++ nge->fx2 = x2; ++ nge->fy2 = y2; ++ nge->fx3 = x3; ++ nge->fy3 = y3; ++ ++ if (oge != 0) { ++ if (x3 == oge->fx3 && y3 == oge->fy3) { ++ free(nge); /* consider this curve empty */ ++ /* ignore it or we will get in troubles later */ ++ return; ++ } ++ if (g->path == 0) { ++ g->path = nge; ++ nge->bkwd = nge->frwd = nge; ++ } else { ++ oge->frwd = nge; ++ nge->bkwd = oge; ++ g->path->bkwd = nge; ++ nge->frwd = g->path; ++ } ++ ++ oge->next = nge; ++ nge->prev = oge; ++ g->lastentry = nge; ++ } else { ++ WARNING_1 fprintf(stderr, "Glyph %s: CURVE outside of path\n", g->name); ++ free(nge); ++ } ++ } ++ ++ if (0 && ISDBG(BUILDG)) ++ dumppaths(g, NULL, NULL); ++} ++ ++void ++ig_rrcurveto( ++ GLYPH * g, ++ int x1, ++ int y1, ++ int x2, ++ int y2, ++ int x3, ++ int y3) ++{ ++ GENTRY *oge, *nge; ++ ++ oge = g->lastentry; ++ ++ if (ISDBG(BUILDG)) ++ fprintf(stderr, "%s: i rrcurveto(%d, %d, %d, %d, %d, %d)\n" ++ ,g->name, x1, y1, x2, y2, x3, y3); ++ ++ assertisint(g, "adding int CURVE"); ++ ++ if (oge && oge->ix3 == x1 && x1 == x2 && x2 == x3) /* check if it's ++ * actually a line */ ++ ig_rlineto(g, x1, y3); ++ else if (oge && oge->iy3 == y1 && y1 == y2 && y2 == y3) ++ ig_rlineto(g, x3, y1); ++ else { ++ nge = newgentry(0); ++ nge->type = GE_CURVE; ++ nge->ix1 = x1; ++ nge->iy1 = y1; ++ nge->ix2 = x2; ++ nge->iy2 = y2; ++ nge->ix3 = x3; ++ nge->iy3 = y3; ++ ++ if (oge != 0) { ++ if (x3 == oge->ix3 && y3 == oge->iy3) { ++ free(nge); /* consider this curve empty */ ++ /* ignore it or we will get in troubles later */ ++ return; ++ } ++ if (g->path == 0) { ++ g->path = nge; ++ nge->bkwd = nge->frwd = nge; ++ } else { ++ oge->frwd = nge; ++ nge->bkwd = oge; ++ g->path->bkwd = nge; ++ nge->frwd = g->path; ++ } ++ ++ oge->next = nge; ++ nge->prev = oge; ++ g->lastentry = nge; ++ } else { ++ WARNING_1 fprintf(stderr, "Glyph %s: CURVE outside of path\n", g->name); ++ free(nge); ++ } ++ } ++} ++ ++void ++g_closepath( ++ GLYPH * g ++) ++{ ++ GENTRY *oge, *nge; ++ ++ if (ISDBG(BUILDG)) ++ fprintf(stderr, "%s: closepath\n", g->name); ++ ++ oge = g->lastentry; ++ ++ if (g->path == 0) { ++ WARNING_1 fprintf(stderr, "Warning: **** closepath on empty path in glyph \"%s\" ****\n", ++ g->name); ++ if (oge == 0) { ++ WARNING_1 fprintf(stderr, "No previois entry\n"); ++ } else { ++ WARNING_1 fprintf(stderr, "Previous entry type: %c\n", oge->type); ++ if (oge->type == GE_MOVE) { ++ g->lastentry = oge->prev; ++ if (oge->prev == 0) ++ g->entries = 0; ++ else ++ g->lastentry->next = 0; ++ free(oge); ++ } ++ } ++ return; ++ } ++ ++ nge = newgentry(oge->flags & GEF_FLOAT); /* keep the same type */ ++ nge->type = GE_PATH; ++ ++ g->path = 0; ++ ++ oge->next = nge; ++ nge->prev = oge; ++ g->lastentry = nge; ++ ++ if (0 && ISDBG(BUILDG)) ++ dumppaths(g, NULL, NULL); ++} ++ ++/* ++ * * SB * Routines to smooth and fix the glyphs ++ */ ++ ++/* ++** we don't want to see the curves with coinciding middle and ++** outer points ++*/ ++ ++static void ++fixcvends( ++ GENTRY * ge ++) ++{ ++ int dx, dy; ++ int x0, y0, x1, y1, x2, y2, x3, y3; ++ ++ if (ge->type != GE_CURVE) ++ return; ++ ++ if(ge->flags & GEF_FLOAT) { ++ fprintf(stderr, "**! fixcvends(0x%x) on floating entry, ABORT\n", ge); ++ abort(); /* dump core */ ++ } ++ ++ x0 = ge->prev->ix3; ++ y0 = ge->prev->iy3; ++ x1 = ge->ix1; ++ y1 = ge->iy1; ++ x2 = ge->ix2; ++ y2 = ge->iy2; ++ x3 = ge->ix3; ++ y3 = ge->iy3; ++ ++ ++ /* look at the start of the curve */ ++ if (x1 == x0 && y1 == y0) { ++ dx = x2 - x1; ++ dy = y2 - y1; ++ ++ if ((dx == 0 && dy == 0) ++ || (x2 == x3 && y2 == y3)) { ++ /* Oops, we actually have a straight line */ ++ /* ++ * if it's small, we hope that it will get optimized ++ * later ++ */ ++ if (abs(x3 - x0) <= 2 || abs(y3 - y0) <= 2) { ++ ge->ix1 = x3; ++ ge->iy1 = y3; ++ ge->ix2 = x0; ++ ge->iy2 = y0; ++ } else {/* just make it a line */ ++ ge->type = GE_LINE; ++ } ++ } else { ++ if (abs(dx) < 4 && abs(dy) < 4) { /* consider it very ++ * small */ ++ ge->ix1 = x2; ++ ge->iy1 = y2; ++ } else if (abs(dx) < 8 && abs(dy) < 8) { /* consider it small */ ++ ge->ix1 += dx / 2; ++ ge->iy1 += dy / 2; ++ } else { ++ ge->ix1 += dx / 4; ++ ge->iy1 += dy / 4; ++ } ++ /* make sure that it's still on the same side */ ++ if (abs(x3 - x0) * abs(dy) < abs(y3 - y0) * abs(dx)) { ++ if (abs(x3 - x0) * abs(ge->iy1 - y0) > abs(y3 - y0) * abs(ge->ix1 - x0)) ++ ge->ix1 += isign(dx); ++ } else { ++ if (abs(x3 - x0) * abs(ge->iy1 - y0) < abs(y3 - y0) * abs(ge->ix1 - x0)) ++ ge->iy1 += isign(dy); ++ } ++ ++ ge->ix2 += (x3 - x2) / 8; ++ ge->iy2 += (y3 - y2) / 8; ++ /* make sure that it's still on the same side */ ++ if (abs(x3 - x0) * abs(y3 - y2) < abs(y3 - y0) * abs(x3 - x2)) { ++ if (abs(x3 - x0) * abs(y3 - ge->iy2) > abs(y3 - y0) * abs(x3 - ge->ix2)) ++ ge->iy1 -= isign(y3 - y2); ++ } else { ++ if (abs(x3 - x0) * abs(y3 - ge->iy2) < abs(y3 - y0) * abs(x3 - ge->ix2)) ++ ge->ix1 -= isign(x3 - x2); ++ } ++ ++ } ++ } else if (x2 == x3 && y2 == y3) { ++ dx = x1 - x2; ++ dy = y1 - y2; ++ ++ if (dx == 0 && dy == 0) { ++ /* Oops, we actually have a straight line */ ++ /* ++ * if it's small, we hope that it will get optimized ++ * later ++ */ ++ if (abs(x3 - x0) <= 2 || abs(y3 - y0) <= 2) { ++ ge->ix1 = x3; ++ ge->iy1 = y3; ++ ge->ix2 = x0; ++ ge->iy2 = y0; ++ } else {/* just make it a line */ ++ ge->type = GE_LINE; ++ } ++ } else { ++ if (abs(dx) < 4 && abs(dy) < 4) { /* consider it very ++ * small */ ++ ge->ix2 = x1; ++ ge->iy2 = y1; ++ } else if (abs(dx) < 8 && abs(dy) < 8) { /* consider it small */ ++ ge->ix2 += dx / 2; ++ ge->iy2 += dy / 2; ++ } else { ++ ge->ix2 += dx / 4; ++ ge->iy2 += dy / 4; ++ } ++ /* make sure that it's still on the same side */ ++ if (abs(x3 - x0) * abs(dy) < abs(y3 - y0) * abs(dx)) { ++ if (abs(x3 - x0) * abs(ge->iy2 - y3) > abs(y3 - y0) * abs(ge->ix2 - x3)) ++ ge->ix2 += isign(dx); ++ } else { ++ if (abs(x3 - x0) * abs(ge->iy2 - y3) < abs(y3 - y0) * abs(ge->ix2 - x3)) ++ ge->iy2 += isign(dy); ++ } ++ ++ ge->ix1 += (x0 - x1) / 8; ++ ge->iy1 += (y0 - y1) / 8; ++ /* make sure that it's still on the same side */ ++ if (abs(x3 - x0) * abs(y0 - y1) < abs(y3 - y0) * abs(x0 - x1)) { ++ if (abs(x3 - x0) * abs(y0 - ge->iy1) > abs(y3 - y0) * abs(x0 - ge->ix1)) ++ ge->iy1 -= isign(y0 - y1); ++ } else { ++ if (abs(x3 - x0) * abs(y0 - ge->iy1) < abs(y3 - y0) * abs(x0 - ge->ix1)) ++ ge->ix1 -= isign(x0 - x1); ++ } ++ ++ } ++ } ++} ++ ++/* ++** After transformations we want to make sure that the resulting ++** curve is going in the same quadrant as the original one, ++** because rounding errors introduced during transformations ++** may make the result completeley wrong. ++** ++** `dir' argument describes the direction of the original curve, ++** it is the superposition of two values for the front and ++** rear ends of curve: ++** ++** >EQUAL - goes over the line connecting the ends ++** =EQUAL - coincides with the line connecting the ends ++** flags & GEF_FLOAT) { ++ fprintf(stderr, "**! fixcvdir(0x%x) on floating entry, ABORT\n", ge); ++ abort(); /* dump core */ ++ } ++ ++ fdir = (dir & CVDIR_FRONT) - CVDIR_FEQUAL; ++ if ((dir & CVDIR_REAR) == CVDIR_RSAME) ++ rdir = fdir; /* we need only isign, exact value doesn't matter */ ++ else ++ rdir = (dir & CVDIR_REAR) - CVDIR_REQUAL; ++ ++ fixcvends(ge); ++ ++ c = isign(ge->ix3 - ge->prev->ix3); /* note the direction of ++ * curve */ ++ d = isign(ge->iy3 - ge->prev->iy3); ++ ++ a = ge->iy3 - ge->prev->iy3; ++ b = ge->ix3 - ge->prev->ix3; ++ kk = fabs(a == 0 ? (b == 0 ? 1. : 100000.) : ((double) b / (double) a)); ++ a = ge->iy1 - ge->prev->iy3; ++ b = ge->ix1 - ge->prev->ix3; ++ kk1 = fabs(a == 0 ? (b == 0 ? 1. : 100000.) : ((double) b / (double) a)); ++ a = ge->iy3 - ge->iy2; ++ b = ge->ix3 - ge->ix2; ++ kk2 = fabs(a == 0 ? (b == 0 ? 1. : 100000.) : ((double) b / (double) a)); ++ ++ changed = 1; ++ while (changed) { ++ if (ISDBG(FIXCVDIR)) { ++ /* for debugging */ ++ fprintf(stderr, "fixcvdir %d %d (%d %d %d %d %d %d) %f %f %f\n", ++ fdir, rdir, ++ ge->ix1 - ge->prev->ix3, ++ ge->iy1 - ge->prev->iy3, ++ ge->ix2 - ge->ix1, ++ ge->iy2 - ge->iy1, ++ ge->ix3 - ge->ix2, ++ ge->iy3 - ge->iy2, ++ kk1, kk, kk2); ++ } ++ changed = 0; ++ ++ if (fdir > 0) { ++ if (kk1 > kk) { /* the front end has problems */ ++ if (c * (ge->ix1 - ge->prev->ix3) > 0) { ++ ge->ix1 -= c; ++ changed = 1; ++ } if (d * (ge->iy2 - ge->iy1) > 0) { ++ ge->iy1 += d; ++ changed = 1; ++ } ++ /* recalculate the coefficients */ ++ a = ge->iy3 - ge->prev->iy3; ++ b = ge->ix3 - ge->prev->ix3; ++ kk = fabs(a == 0 ? (b == 0 ? 1. : 100000.) : ((double) b / (double) a)); ++ a = ge->iy1 - ge->prev->iy3; ++ b = ge->ix1 - ge->prev->ix3; ++ kk1 = fabs(a == 0 ? (b == 0 ? 1. : 100000.) : ((double) b / (double) a)); ++ } ++ } else if (fdir < 0) { ++ if (kk1 < kk) { /* the front end has problems */ ++ if (c * (ge->ix2 - ge->ix1) > 0) { ++ ge->ix1 += c; ++ changed = 1; ++ } if (d * (ge->iy1 - ge->prev->iy3) > 0) { ++ ge->iy1 -= d; ++ changed = 1; ++ } ++ /* recalculate the coefficients */ ++ a = ge->iy1 - ge->prev->iy3; ++ b = ge->ix1 - ge->prev->ix3; ++ kk1 = fabs(a == 0 ? (b == 0 ? 1. : 100000.) : ((double) b / (double) a)); ++ a = ge->iy3 - ge->prev->iy3; ++ b = ge->ix3 - ge->prev->ix3; ++ kk = fabs(a == 0 ? (b == 0 ? 1. : 100000.) : ((double) b / (double) a)); ++ } ++ } ++ if (rdir > 0) { ++ if (kk2 < kk) { /* the rear end has problems */ ++ if (c * (ge->ix2 - ge->ix1) > 0) { ++ ge->ix2 -= c; ++ changed = 1; ++ } if (d * (ge->iy3 - ge->iy2) > 0) { ++ ge->iy2 += d; ++ changed = 1; ++ } ++ /* recalculate the coefficients */ ++ a = ge->iy3 - ge->prev->iy3; ++ b = ge->ix3 - ge->prev->ix3; ++ kk = fabs(a == 0 ? (b == 0 ? 1. : 100000.) : ((double) b / (double) a)); ++ a = ge->iy3 - ge->iy2; ++ b = ge->ix3 - ge->ix2; ++ kk2 = fabs(a == 0 ? (b == 0 ? 1. : 100000.) : ((double) b / (double) a)); ++ } ++ } else if (rdir < 0) { ++ if (kk2 > kk) { /* the rear end has problems */ ++ if (c * (ge->ix3 - ge->ix2) > 0) { ++ ge->ix2 += c; ++ changed = 1; ++ } if (d * (ge->iy2 - ge->iy1) > 0) { ++ ge->iy2 -= d; ++ changed = 1; ++ } ++ /* recalculate the coefficients */ ++ a = ge->iy3 - ge->prev->iy3; ++ b = ge->ix3 - ge->prev->ix3; ++ kk = fabs(a == 0 ? (b == 0 ? 1. : 100000.) : ((double) b / (double) a)); ++ a = ge->iy3 - ge->iy2; ++ b = ge->ix3 - ge->ix2; ++ kk2 = fabs(a == 0 ? (b == 0 ? 1. : 100000.) : ((double) b / (double) a)); ++ } ++ } ++ } ++ fixcvends(ge); ++} ++ ++/* Get the directions of ends of curve for further usage */ ++ ++/* expects that the previous element is also float */ ++ ++static int ++fgetcvdir( ++ GENTRY * ge ++) ++{ ++ double a, b; ++ double k, k1, k2; ++ int dir = 0; ++ ++ if( !(ge->flags & GEF_FLOAT) ) { ++ fprintf(stderr, "**! fgetcvdir(0x%x) on int entry, ABORT\n", ge); ++ abort(); /* dump core */ ++ } ++ ++ a = fabs(ge->fy3 - ge->prev->fy3); ++ b = fabs(ge->fx3 - ge->prev->fx3); ++ k = a < FEPS ? (b < FEPS ? 1. : 100000.) : ( b / a); ++ ++ a = fabs(ge->fy1 - ge->prev->fy3); ++ b = fabs(ge->fx1 - ge->prev->fx3); ++ if(a < FEPS) { ++ if(b < FEPS) { ++ a = fabs(ge->fy2 - ge->prev->fy3); ++ b = fabs(ge->fx2 - ge->prev->fx3); ++ k1 = a < FEPS ? (b < FEPS ? k : 100000.) : ( b / a); ++ } else ++ k1 = FBIGVAL; ++ } else ++ k1 = b / a; ++ ++ a = fabs(ge->fy3 - ge->fy2); ++ b = fabs(ge->fx3 - ge->fx2); ++ if(a < FEPS) { ++ if(b < FEPS) { ++ a = fabs(ge->fy3 - ge->fy1); ++ b = fabs(ge->fx3 - ge->fx1); ++ k2 = a < FEPS ? (b < FEPS ? k : 100000.) : ( b / a); ++ } else ++ k2 = FBIGVAL; ++ } else ++ k2 = b / a; ++ ++ if(fabs(k1-k) < 0.0001) ++ dir |= CVDIR_FEQUAL; ++ else if (k1 < k) ++ dir |= CVDIR_FUP; ++ else ++ dir |= CVDIR_FDOWN; ++ ++ if(fabs(k2-k) < 0.0001) ++ dir |= CVDIR_REQUAL; ++ else if (k2 > k) ++ dir |= CVDIR_RUP; ++ else ++ dir |= CVDIR_RDOWN; ++ ++ return dir; ++} ++ ++ ++/* expects that the previous element is also int */ ++ ++static int ++igetcvdir( ++ GENTRY * ge ++) ++{ ++ int a, b; ++ double k, k1, k2; ++ int dir = 0; ++ ++ if(ge->flags & GEF_FLOAT) { ++ fprintf(stderr, "**! igetcvdir(0x%x) on floating entry, ABORT\n", ge); ++ abort(); /* dump core */ ++ } ++ ++ a = ge->iy3 - ge->prev->iy3; ++ b = ge->ix3 - ge->prev->ix3; ++ k = (a == 0) ? (b == 0 ? 1. : 100000.) : fabs((double) b / (double) a); ++ ++ a = ge->iy1 - ge->prev->iy3; ++ b = ge->ix1 - ge->prev->ix3; ++ if(a == 0) { ++ if(b == 0) { ++ a = ge->iy2 - ge->prev->iy3; ++ b = ge->ix2 - ge->prev->ix3; ++ k1 = (a == 0) ? (b == 0 ? k : 100000.) : fabs((double) b / (double) a); ++ } else ++ k1 = FBIGVAL; ++ } else ++ k1 = fabs((double) b / (double) a); ++ ++ a = ge->iy3 - ge->iy2; ++ b = ge->ix3 - ge->ix2; ++ if(a == 0) { ++ if(b == 0) { ++ a = ge->iy3 - ge->iy1; ++ b = ge->ix3 - ge->ix1; ++ k2 = (a == 0) ? (b == 0 ? k : 100000.) : fabs((double) b / (double) a); ++ } else ++ k2 = FBIGVAL; ++ } else ++ k2 = fabs((double) b / (double) a); ++ ++ if(fabs(k1-k) < 0.0001) ++ dir |= CVDIR_FEQUAL; ++ else if (k1 < k) ++ dir |= CVDIR_FUP; ++ else ++ dir |= CVDIR_FDOWN; ++ ++ if(fabs(k2-k) < 0.0001) ++ dir |= CVDIR_REQUAL; ++ else if (k2 > k) ++ dir |= CVDIR_RUP; ++ else ++ dir |= CVDIR_RDOWN; ++ ++ return dir; ++} ++ ++#if 0 ++/* a function just to test the work of fixcvdir() */ ++static void ++testfixcvdir( ++ GLYPH * g ++) ++{ ++ GENTRY *ge; ++ int dir; ++ ++ for (ge = g->entries; ge != 0; ge = ge->next) { ++ if (ge->type == GE_CURVE) { ++ dir = igetcvdir(ge); ++ fixcvdir(ge, dir); ++ } ++ } ++} ++#endif ++ ++static int ++iround( ++ double val ++) ++{ ++ return (int) (val > 0 ? val + 0.5 : val - 0.5); ++} ++ ++/* for debugging - dump the glyph ++ * mark with a star the entries from start to end inclusive ++ * (start == NULL means don't mark any, end == NULL means to the last) ++ */ ++ ++void ++dumppaths( ++ GLYPH *g, ++ GENTRY *start, ++ GENTRY *end ++) ++{ ++ GENTRY *ge; ++ int i; ++ char mark=' '; ++ ++ fprintf(stderr, "Glyph %s:\n", g->name); ++ ++ /* now do the conversion */ ++ for(ge = g->entries; ge != 0; ge = ge->next) { ++ if(ge == start) ++ mark = '*'; ++ fprintf(stderr, " %c %8x", mark, ge); ++ switch(ge->type) { ++ case GE_MOVE: ++ case GE_LINE: ++ if(ge->flags & GEF_FLOAT) ++ fprintf(stderr," %c float (%g, %g)\n", ge->type, ge->fx3, ge->fy3); ++ else ++ fprintf(stderr," %c int (%d, %d)\n", ge->type, ge->ix3, ge->iy3); ++ break; ++ case GE_CURVE: ++ if(ge->flags & GEF_FLOAT) { ++ fprintf(stderr," C float "); ++ for(i=0; i<3; i++) ++ fprintf(stderr,"(%g, %g) ", ge->fxn[i], ge->fyn[i]); ++ fprintf(stderr,"\n"); ++ } else { ++ fprintf(stderr," C int "); ++ for(i=0; i<3; i++) ++ fprintf(stderr,"(%d, %d) ", ge->ixn[i], ge->iyn[i]); ++ fprintf(stderr,"\n"); ++ } ++ break; ++ default: ++ fprintf(stderr, " %c\n", ge->type); ++ break; ++ } ++ if(ge == end) ++ mark = ' '; ++ } ++} ++ ++/* ++ * Routine that converts all entries in the path from float to int ++ */ ++ ++void ++pathtoint( ++ GLYPH *g ++) ++{ ++ GENTRY *ge; ++ int x[3], y[3]; ++ int i; ++ ++ ++ if(ISDBG(TOINT)) ++ fprintf(stderr, "TOINT: glyph %s\n", g->name); ++ assertisfloat(g, "converting path to int\n"); ++ ++ fdelsmall(g, 1.0); /* get rid of sub-pixel contours */ ++ assertpath(g->entries, __FILE__, __LINE__, g->name); ++ ++ /* 1st pass, collect the directions of the curves: have ++ * to do that in advance, while everyting is float ++ */ ++ for(ge = g->entries; ge != 0; ge = ge->next) { ++ if( !(ge->flags & GEF_FLOAT) ) { ++ fprintf(stderr, "**! glyphs %s has int entry, found in conversion to int\n", ++ g->name); ++ exit(1); ++ } ++ if(ge->type == GE_CURVE) { ++ ge->dir = fgetcvdir(ge); ++ } ++ } ++ ++ /* now do the conversion */ ++ for(ge = g->entries; ge != 0; ge = ge->next) { ++ switch(ge->type) { ++ case GE_MOVE: ++ case GE_LINE: ++ if(ISDBG(TOINT)) ++ fprintf(stderr," %c float x=%g y=%g\n", ge->type, ge->fx3, ge->fy3); ++ x[0] = iround(ge->fx3); ++ y[0] = iround(ge->fy3); ++ for(i=0; i<3; i++) { /* put some valid values everywhere, for convenience */ ++ ge->ixn[i] = x[0]; ++ ge->iyn[i] = y[0]; ++ } ++ if(ISDBG(TOINT)) ++ fprintf(stderr," int x=%d y=%d\n", ge->ix3, ge->iy3); ++ break; ++ case GE_CURVE: ++ if(ISDBG(TOINT)) ++ fprintf(stderr," %c float ", ge->type); ++ ++ for(i=0; i<3; i++) { ++ if(ISDBG(TOINT)) ++ fprintf(stderr,"(%g, %g) ", ge->fxn[i], ge->fyn[i]); ++ x[i] = iround(ge->fxn[i]); ++ y[i] = iround(ge->fyn[i]); ++ } ++ ++ if(ISDBG(TOINT)) ++ fprintf(stderr,"\n int "); ++ ++ for(i=0; i<3; i++) { ++ ge->ixn[i] = x[i]; ++ ge->iyn[i] = y[i]; ++ if(ISDBG(TOINT)) ++ fprintf(stderr,"(%d, %d) ", ge->ixn[i], ge->iyn[i]); ++ } ++ ge->flags &= ~GEF_FLOAT; /* for fixcvdir */ ++ fixcvdir(ge, ge->dir); ++ ++ if(ISDBG(TOINT)) { ++ fprintf(stderr,"\n fixed "); ++ for(i=0; i<3; i++) ++ fprintf(stderr,"(%d, %d) ", ge->ixn[i], ge->iyn[i]); ++ fprintf(stderr,"\n"); ++ } ++ ++ break; ++ } ++ ge->flags &= ~GEF_FLOAT; ++ } ++ g->flags &= ~GF_FLOAT; ++} ++ ++ ++/* check whether we can fix up the curve to change its size by (dx,dy) */ ++/* 0 means NO, 1 means YES */ ++ ++/* for float: if scaling would be under 10% */ ++ ++int ++fcheckcv( ++ GENTRY * ge, ++ double dx, ++ double dy ++) ++{ ++ if( !(ge->flags & GEF_FLOAT) ) { ++ fprintf(stderr, "**! fcheckcv(0x%x) on int entry, ABORT\n", ge); ++ abort(); /* dump core */ ++ } ++ ++ if (ge->type != GE_CURVE) ++ return 0; ++ ++ if( fabs(ge->fx3 - ge->prev->fx3) < fabs(dx) * 10 ) ++ return 0; ++ ++ if( fabs(ge->fy3 - ge->prev->fy3) < fabs(dy) * 10 ) ++ return 0; ++ ++ return 1; ++} ++ ++/* for int: if won't create new zigzags at the ends */ ++ ++int ++icheckcv( ++ GENTRY * ge, ++ int dx, ++ int dy ++) ++{ ++ int xdep, ydep; ++ ++ if(ge->flags & GEF_FLOAT) { ++ fprintf(stderr, "**! icheckcv(0x%x) on floating entry, ABORT\n", ge); ++ abort(); /* dump core */ ++ } ++ ++ if (ge->type != GE_CURVE) ++ return 0; ++ ++ xdep = ge->ix3 - ge->prev->ix3; ++ ydep = ge->iy3 - ge->prev->iy3; ++ ++ if (ge->type == GE_CURVE ++ && (xdep * (xdep + dx)) > 0 ++ && (ydep * (ydep + dy)) > 0) { ++ return 1; ++ } else ++ return 0; ++} ++ ++/* float connect the ends of open contours */ ++ ++void ++fclosepaths( ++ GLYPH * g ++) ++{ ++ GENTRY *ge, *fge, *xge, *nge; ++ int i; ++ ++ assertisfloat(g, "fclosepaths float\n"); ++ ++ for (xge = g->entries; xge != 0; xge = xge->next) { ++ if( xge->type != GE_PATH ) ++ continue; ++ ++ ge = xge->prev; ++ if(ge == 0 || (ge->type != GE_LINE && ge->type!= GE_CURVE)) { ++ fprintf(stderr, "**! Glyph %s got empty path\n", ++ g->name); ++ exit(1); ++ } ++ ++ fge = ge->frwd; ++ if (fge->prev == 0 || fge->prev->type != GE_MOVE) { ++ fprintf(stderr, "**! Glyph %s got strange beginning of path\n", ++ g->name); ++ exit(1); ++ } ++ fge = fge->prev; ++ if (fge->fx3 != ge->fx3 || fge->fy3 != ge->fy3) { ++ /* we have to fix this open path */ ++ ++ WARNING_4 fprintf(stderr, "Glyph %s got path open by dx=%g dy=%g\n", ++ g->name, fge->fx3 - ge->fx3, fge->fy3 - ge->fy3); ++ ++ ++ /* add a new line */ ++ nge = newgentry(GEF_FLOAT); ++ (*nge) = (*ge); ++ nge->fx3 = fge->fx3; ++ nge->fy3 = fge->fy3; ++ nge->type = GE_LINE; ++ ++ addgeafter(ge, nge); ++ ++ if (fabs(ge->fx3 - fge->fx3) <= 2 && fabs(ge->fy3 - fge->fy3) <= 2) { ++ /* ++ * small change, try to get rid of the new entry ++ */ ++ ++ double df[2]; ++ ++ for(i=0; i<2; i++) { ++ df[i] = ge->fpoints[i][2] - fge->fpoints[i][2]; ++ df[i] = fclosegap(nge, nge, i, df[i], NULL); ++ } ++ ++ if(df[0] == 0. && df[1] == 0.) { ++ /* closed gap successfully, remove the added entry */ ++ freethisge(nge); ++ } ++ } ++ } ++ } ++} ++ ++void ++smoothjoints( ++ GLYPH * g ++) ++{ ++ GENTRY *ge, *ne; ++ int dx1, dy1, dx2, dy2, k; ++ int dir; ++ ++ return; /* this stuff seems to create problems */ ++ ++ assertisint(g, "smoothjoints int"); ++ ++ if (g->entries == 0) /* nothing to do */ ++ return; ++ ++ for (ge = g->entries->next; ge != 0; ge = ge->next) { ++ ne = ge->frwd; ++ ++ /* ++ * although there should be no one-line path * and any path ++ * must end with CLOSEPATH, * nobody can say for sure ++ */ ++ ++ if (ge == ne || ne == 0) ++ continue; ++ ++ /* now handle various joints */ ++ ++ if (ge->type == GE_LINE && ne->type == GE_LINE) { ++ dx1 = ge->ix3 - ge->prev->ix3; ++ dy1 = ge->iy3 - ge->prev->iy3; ++ dx2 = ne->ix3 - ge->ix3; ++ dy2 = ne->iy3 - ge->iy3; ++ ++ /* check whether they have the same direction */ ++ /* and the same slope */ ++ /* then we can join them into one line */ ++ ++ if (dx1 * dx2 >= 0 && dy1 * dy2 >= 0 && dx1 * dy2 == dy1 * dx2) { ++ /* extend the previous line */ ++ ge->ix3 = ne->ix3; ++ ge->iy3 = ne->iy3; ++ ++ /* and get rid of the next line */ ++ freethisge(ne); ++ } ++ } else if (ge->type == GE_LINE && ne->type == GE_CURVE) { ++ fixcvends(ne); ++ ++ dx1 = ge->ix3 - ge->prev->ix3; ++ dy1 = ge->iy3 - ge->prev->iy3; ++ dx2 = ne->ix1 - ge->ix3; ++ dy2 = ne->iy1 - ge->iy3; ++ ++ /* if the line is nearly horizontal and we can fix it */ ++ if (dx1 != 0 && 5 * abs(dy1) / abs(dx1) == 0 ++ && icheckcv(ne, 0, -dy1) ++ && abs(dy1) <= 4) { ++ dir = igetcvdir(ne); ++ ge->iy3 -= dy1; ++ ne->iy1 -= dy1; ++ fixcvdir(ne, dir); ++ if (ge->next != ne) ++ ne->prev->iy3 -= dy1; ++ dy1 = 0; ++ } else if (dy1 != 0 && 5 * abs(dx1) / abs(dy1) == 0 ++ && icheckcv(ne, -dx1, 0) ++ && abs(dx1) <= 4) { ++ /* the same but vertical */ ++ dir = igetcvdir(ne); ++ ge->ix3 -= dx1; ++ ne->ix1 -= dx1; ++ fixcvdir(ne, dir); ++ if (ge->next != ne) ++ ne->prev->ix3 -= dx1; ++ dx1 = 0; ++ } ++ /* ++ * if line is horizontal and curve begins nearly ++ * horizontally ++ */ ++ if (dy1 == 0 && dx2 != 0 && 5 * abs(dy2) / abs(dx2) == 0) { ++ dir = igetcvdir(ne); ++ ne->iy1 -= dy2; ++ fixcvdir(ne, dir); ++ dy2 = 0; ++ } else if (dx1 == 0 && dy2 != 0 && 5 * abs(dx2) / abs(dy2) == 0) { ++ /* the same but vertical */ ++ dir = igetcvdir(ne); ++ ne->ix1 -= dx2; ++ fixcvdir(ne, dir); ++ dx2 = 0; ++ } ++ } else if (ge->type == GE_CURVE && ne->type == GE_LINE) { ++ fixcvends(ge); ++ ++ dx1 = ge->ix3 - ge->ix2; ++ dy1 = ge->iy3 - ge->iy2; ++ dx2 = ne->ix3 - ge->ix3; ++ dy2 = ne->iy3 - ge->iy3; ++ ++ /* if the line is nearly horizontal and we can fix it */ ++ if (dx2 != 0 && 5 * abs(dy2) / abs(dx2) == 0 ++ && icheckcv(ge, 0, dy2) ++ && abs(dy2) <= 4) { ++ dir = igetcvdir(ge); ++ ge->iy3 += dy2; ++ ge->iy2 += dy2; ++ fixcvdir(ge, dir); ++ if (ge->next != ne) ++ ne->prev->iy3 += dy2; ++ dy2 = 0; ++ } else if (dy2 != 0 && 5 * abs(dx2) / abs(dy2) == 0 ++ && icheckcv(ge, dx2, 0) ++ && abs(dx2) <= 4) { ++ /* the same but vertical */ ++ dir = igetcvdir(ge); ++ ge->ix3 += dx2; ++ ge->ix2 += dx2; ++ fixcvdir(ge, dir); ++ if (ge->next != ne) ++ ne->prev->ix3 += dx2; ++ dx2 = 0; ++ } ++ /* ++ * if line is horizontal and curve ends nearly ++ * horizontally ++ */ ++ if (dy2 == 0 && dx1 != 0 && 5 * abs(dy1) / abs(dx1) == 0) { ++ dir = igetcvdir(ge); ++ ge->iy2 += dy1; ++ fixcvdir(ge, dir); ++ dy1 = 0; ++ } else if (dx2 == 0 && dy1 != 0 && 5 * abs(dx1) / abs(dy1) == 0) { ++ /* the same but vertical */ ++ dir = igetcvdir(ge); ++ ge->ix2 += dx1; ++ fixcvdir(ge, dir); ++ dx1 = 0; ++ } ++ } else if (ge->type == GE_CURVE && ne->type == GE_CURVE) { ++ fixcvends(ge); ++ fixcvends(ne); ++ ++ dx1 = ge->ix3 - ge->ix2; ++ dy1 = ge->iy3 - ge->iy2; ++ dx2 = ne->ix1 - ge->ix3; ++ dy2 = ne->iy1 - ge->iy3; ++ ++ /* ++ * check if we have a rather smooth joint at extremal ++ * point ++ */ ++ /* left or right extremal point */ ++ if (abs(dx1) <= 4 && abs(dx2) <= 4 ++ && dy1 != 0 && 5 * abs(dx1) / abs(dy1) == 0 ++ && dy2 != 0 && 5 * abs(dx2) / abs(dy2) == 0 ++ && ((ge->iy3 < ge->prev->iy3 && ne->iy3 < ge->iy3) ++ || (ge->iy3 > ge->prev->iy3 && ne->iy3 > ge->iy3)) ++ && (ge->ix3 - ge->prev->ix3) * (ne->ix3 - ge->ix3) < 0 ++ ) { ++ dir = igetcvdir(ge); ++ ge->ix2 += dx1; ++ dx1 = 0; ++ fixcvdir(ge, dir); ++ dir = igetcvdir(ne); ++ ne->ix1 -= dx2; ++ dx2 = 0; ++ fixcvdir(ne, dir); ++ } ++ /* top or down extremal point */ ++ else if (abs(dy1) <= 4 && abs(dy2) <= 4 ++ && dx1 != 0 && 5 * abs(dy1) / abs(dx1) == 0 ++ && dx2 != 0 && 5 * abs(dy2) / abs(dx2) == 0 ++ && ((ge->ix3 < ge->prev->ix3 && ne->ix3 < ge->ix3) ++ || (ge->ix3 > ge->prev->ix3 && ne->ix3 > ge->ix3)) ++ && (ge->iy3 - ge->prev->iy3) * (ne->iy3 - ge->iy3) < 0 ++ ) { ++ dir = igetcvdir(ge); ++ ge->iy2 += dy1; ++ dy1 = 0; ++ fixcvdir(ge, dir); ++ dir = igetcvdir(ne); ++ ne->iy1 -= dy2; ++ dy2 = 0; ++ fixcvdir(ne, dir); ++ } ++ /* or may be we just have a smooth junction */ ++ else if (dx1 * dx2 >= 0 && dy1 * dy2 >= 0 ++ && 10 * abs(k = abs(dx1 * dy2) - abs(dy1 * dx2)) < (abs(dx1 * dy2) + abs(dy1 * dx2))) { ++ int tries[6][4]; ++ int results[6]; ++ int i, b; ++ ++ /* build array of changes we are going to try */ ++ /* uninitalized entries are 0 */ ++ if (k > 0) { ++ static int t1[6][4] = { ++ {0, 0, 0, 0}, ++ {-1, 0, 1, 0}, ++ {-1, 0, 0, 1}, ++ {0, -1, 1, 0}, ++ {0, -1, 0, 1}, ++ {-1, -1, 1, 1}}; ++ memcpy(tries, t1, sizeof tries); ++ } else { ++ static int t1[6][4] = { ++ {0, 0, 0, 0}, ++ {1, 0, -1, 0}, ++ {1, 0, 0, -1}, ++ {0, 1, -1, 0}, ++ {0, 1, 0, -1}, ++ {1, 1, -1, -1}}; ++ memcpy(tries, t1, sizeof tries); ++ } ++ ++ /* now try the changes */ ++ results[0] = abs(k); ++ for (i = 1; i < 6; i++) { ++ results[i] = abs((abs(dx1) + tries[i][0]) * (abs(dy2) + tries[i][1]) - ++ (abs(dy1) + tries[i][2]) * (abs(dx2) + tries[i][3])); ++ } ++ ++ /* and find the best try */ ++ k = abs(k); ++ b = 0; ++ for (i = 1; i < 6; i++) ++ if (results[i] < k) { ++ k = results[i]; ++ b = i; ++ } ++ /* and finally apply it */ ++ if (dx1 < 0) ++ tries[b][0] = -tries[b][0]; ++ if (dy2 < 0) ++ tries[b][1] = -tries[b][1]; ++ if (dy1 < 0) ++ tries[b][2] = -tries[b][2]; ++ if (dx2 < 0) ++ tries[b][3] = -tries[b][3]; ++ ++ dir = igetcvdir(ge); ++ ge->ix2 -= tries[b][0]; ++ ge->iy2 -= tries[b][2]; ++ fixcvdir(ge, dir); ++ dir = igetcvdir(ne); ++ ne->ix1 += tries[b][3]; ++ ne->iy1 += tries[b][1]; ++ fixcvdir(ne, dir); ++ } ++ } ++ } ++} ++ ++/* debugging: print out stems of a glyph */ ++static void ++debugstems( ++ char *name, ++ STEM * hstems, ++ int nhs, ++ STEM * vstems, ++ int nvs ++) ++{ ++ int i; ++ ++ fprintf(pfa_file, "%% %s\n", name); ++ fprintf(pfa_file, "%% %d horizontal stems:\n", nhs); ++ for (i = 0; i < nhs; i++) ++ fprintf(pfa_file, "%% %3d %d (%d...%d) %c %c%c%c%c\n", i, hstems[i].value, ++ hstems[i].from, hstems[i].to, ++ ((hstems[i].flags & ST_UP) ? 'U' : 'D'), ++ ((hstems[i].flags & ST_END) ? 'E' : '-'), ++ ((hstems[i].flags & ST_FLAT) ? 'F' : '-'), ++ ((hstems[i].flags & ST_ZONE) ? 'Z' : ' '), ++ ((hstems[i].flags & ST_TOPZONE) ? 'T' : ' ')); ++ fprintf(pfa_file, "%% %d vertical stems:\n", nvs); ++ for (i = 0; i < nvs; i++) ++ fprintf(pfa_file, "%% %3d %d (%d...%d) %c %c%c\n", i, vstems[i].value, ++ vstems[i].from, vstems[i].to, ++ ((vstems[i].flags & ST_UP) ? 'U' : 'D'), ++ ((vstems[i].flags & ST_END) ? 'E' : '-'), ++ ((vstems[i].flags & ST_FLAT) ? 'F' : '-')); ++} ++ ++/* add pseudo-stems for the limits of the Blue zones to the stem array */ ++static int ++addbluestems( ++ STEM *s, ++ int n ++) ++{ ++ int i; ++ ++ for(i=0; i ++ ((s[j].flags & (ST_ZONE|ST_FLAT|ST_END)) ^ ST_FLAT) ++ ) ++ continue; ++ } else { ++ if( ++ ((s[i].flags & (ST_ZONE|ST_FLAT|ST_END)) ^ ST_FLAT) ++ < ++ ((s[j].flags & (ST_ZONE|ST_FLAT|ST_END)) ^ ST_FLAT) ++ ) ++ continue; ++ } ++ } ++ } ++ x = s[j]; ++ s[j] = s[i]; ++ s[i] = x; ++ } ++} ++ ++/* check whether two stem borders overlap */ ++ ++static int ++stemoverlap( ++ STEM * s1, ++ STEM * s2 ++) ++{ ++ int result; ++ ++ if ((s1->from <= s2->from && s1->to >= s2->from) ++ || (s2->from <= s1->from && s2->to >= s1->from)) ++ result = 1; ++ else ++ result = 0; ++ ++ if (ISDBG(STEMOVERLAP)) ++ fprintf(pfa_file, "%% overlap %d(%d..%d)x%d(%d..%d)=%d\n", ++ s1->value, s1->from, s1->to, s2->value, s2->from, s2->to, result); ++ return result; ++} ++ ++/* ++ * check if the stem [border] is in an appropriate blue zone ++ * (currently not used) ++ */ ++ ++static int ++steminblue( ++ STEM *s ++) ++{ ++ int i, val; ++ ++ val=s->value; ++ if(s->flags & ST_UP) { ++ /* painted size up, look at lower zones */ ++ if(nblues>=2 && val>=bluevalues[0] && val<=bluevalues[1] ) ++ return 1; ++ for(i=0; i=otherblues[i] && val<=otherblues[i+1] ) ++ return 1; ++ } ++ } else { ++ /* painted side down, look at upper zones */ ++ for(i=2; i=bluevalues[i] && val<=bluevalues[i+1] ) ++ return 1; ++ } ++ } ++ ++ return 0; ++} ++ ++/* mark the outermost stem [borders] in the blue zones */ ++ ++static void ++markbluestems( ++ STEM *s, ++ int nold ++) ++{ ++ int i, j, a, b, c; ++ /* ++ * traverse the list of Blue Values, mark the lowest upper ++ * stem in each bottom zone and the topmost lower stem in ++ * each top zone with ST_BLUE ++ */ ++ ++ /* top zones */ ++ for(i=2; i=0; j--) { ++ if( s[j].flags & (ST_ZONE|ST_UP|ST_END) ) ++ continue; ++ c=s[j].value; ++ if(c=0 && s[j].value==c ++ && (s[j].flags & (ST_UP|ST_ZONE))==0 ; j--) ++ s[j].flags |= ST_BLUE; ++ break; ++ } ++ } ++ } ++ /* baseline */ ++ if(nblues>=2) { ++ a=bluevalues[0]; b=bluevalues[1]; ++ for(j=0; jb) /* too high */ ++ break; ++ if(c>=a) { /* found the lowest stem border */ ++ /* mark all the stems with the same value */ ++ if(ISDBG(BLUESTEMS)) ++ fprintf(pfa_file, "%% found U BLUE at %d\n", s[j].value); ++ /* include ST_END values */ ++ while( s[j-1].value==c && (s[j-1].flags & ST_ZONE)==0 ) ++ j--; ++ s[j].flags |= ST_BLUE; ++ for(j++; jb) /* too high */ ++ break; ++ if(c>=a) { /* found the lowest stem border */ ++ /* mark all the stems with the same value */ ++ if(ISDBG(BLUESTEMS)) ++ fprintf(pfa_file, "%% found U BLUE at %d\n", s[j].value); ++ /* include ST_END values */ ++ while( s[j-1].value==c && (s[j-1].flags & ST_ZONE)==0 ) ++ j--; ++ s[j].flags |= ST_BLUE; ++ for(j++; j=b) { /* have no free space */ ++ for(j=nold; j>=b; j--) /* make free space */ ++ s[j]=s[j-1]; ++ b++; ++ nold++; ++ } ++ s[nnew]=s[a]; ++ s[nnew].flags &= ~(ST_UP|ST_BLUE); ++ nnew++; ++ i=b-1; ++ } else { ++ s[nnew++]=s[c]; ++ i=c; /* skip up to this point */ ++ } ++ if (ISDBG(MAINSTEMS)) ++ fprintf(pfa_file, "%% +stem %d...%d U BLUE\n", ++ s[nnew-2].value, s[nnew-1].value); ++ } else { ++ if (nstack >= MAX_STACK) { ++ WARNING_1 fprintf(stderr, "Warning: **** converter's stem stack overflow ****\n"); ++ nstack = 0; ++ } ++ stack[nstack++] = s[i]; ++ } ++ } else if(s[i].flags & ST_BLUE) { ++ /* again, we just HAVE to use this value */ ++ if (readystem) ++ nnew += 2; ++ readystem=0; ++ ++ /* remember the list of Blue zone stems with the same value */ ++ for(a=i, i++; i= 0; i--) { ++ if( (stack[i].flags & ST_UP)==0 ) { ++ if( (stack[i].flags & (ST_ZONE|ST_TOPZONE))==ST_ZONE ) ++ break; ++ else ++ continue; ++ } ++ for(j=a; j=0; j-=2) { ++ if (ISDBG(MAINSTEMS)) ++ fprintf(pfa_file, "%% ?stem %d...%d -- %d\n", ++ s[j].value, s[j+1].value, stack[c].value); ++ if(s[j+1].value < stack[c].value) /* no conflict */ ++ break; ++ if(s[j].flags & ST_BLUE) { ++ /* oops, we don't want to spoil other blue zones */ ++ stack[c].value=s[j+1].value+1; ++ break; ++ } ++ if( (s[j].flags|s[j+1].flags) & ST_END ) { ++ if (ISDBG(MAINSTEMS)) ++ fprintf(pfa_file, "%% -stem %d...%d p=1\n", ++ s[j].value, s[j+1].value); ++ continue; /* pri==1, silently discard it */ ++ } ++ /* we want to discard no nore than 2 stems of pri>=2 */ ++ if( ++readystem > 2 ) { ++ /* change our stem to not conflict */ ++ stack[c].value=s[j+1].value+1; ++ break; ++ } else { ++ if (ISDBG(MAINSTEMS)) ++ fprintf(pfa_file, "%% -stem %d...%d p>=2\n", ++ s[j].value, s[j+1].value); ++ continue; ++ } ++ } ++ nnew=j+2; ++ /* add this stem */ ++ if(nnew>=b-1) { /* have no free space */ ++ for(j=nold; j>=b-1; j--) /* make free space */ ++ s[j]=s[j-1]; ++ b++; ++ nold++; ++ } ++ s[nnew++]=stack[c]; ++ s[nnew++]=s[b-1]; ++ /* clean up the stack */ ++ nstack=sbottom=0; ++ readystem=0; ++ /* set the next position to search */ ++ i=b-1; ++ if (ISDBG(MAINSTEMS)) ++ fprintf(pfa_file, "%% +stem %d...%d D BLUE\n", ++ s[nnew-2].value, s[nnew-1].value); ++ } else if (nstack > 0) { ++ ++ /* ++ * check whether our stem overlaps with anything in ++ * stack ++ */ ++ for (j = nstack - 1; j >= sbottom; j--) { ++ if (s[i].value <= stack[j].value) ++ break; ++ if (stack[j].flags & ST_ZONE) ++ continue; ++ ++ if ((s[i].flags & ST_END) ++ || (stack[j].flags & ST_END)) ++ pri = 1; ++ else if ((s[i].flags & ST_FLAT) ++ || (stack[j].flags & ST_FLAT)) ++ pri = 3; ++ else ++ pri = 2; ++ ++ if ((pri < readystem && s[nnew + 1].value >= stack[j].value) ++ || !stemoverlap(&stack[j], &s[i])) ++ continue; ++ ++ if (readystem > 1 && s[nnew + 1].value < stack[j].value) { ++ nnew += 2; ++ readystem = 0; ++ nlps = 0; ++ } ++ /* ++ * width of the previous stem (if it's ++ * present) ++ */ ++ w1 = s[nnew + 1].value - s[nnew].value; ++ ++ /* width of this stem */ ++ w2 = s[i].value - stack[j].value; ++ ++ if (readystem == 0) { ++ /* nothing yet, just add a new stem */ ++ s[nnew] = stack[j]; ++ s[nnew + 1] = s[i]; ++ readystem = pri; ++ if (pri == 1) ++ nlps = 1; ++ else if (pri == 2) ++ sbottom = j; ++ else { ++ sbottom = j + 1; ++ while (sbottom < nstack ++ && stack[sbottom].value <= stack[j].value) ++ sbottom++; ++ } ++ if (ISDBG(MAINSTEMS)) ++ fprintf(pfa_file, "%% +stem %d...%d p=%d n=%d\n", ++ stack[j].value, s[i].value, pri, nlps); ++ } else if (pri == 1) { ++ if (stack[j].value > s[nnew + 1].value) { ++ /* ++ * doesn't overlap with the ++ * previous one ++ */ ++ nnew += 2; ++ nlps++; ++ s[nnew] = stack[j]; ++ s[nnew + 1] = s[i]; ++ if (ISDBG(MAINSTEMS)) ++ fprintf(pfa_file, "%% +stem %d...%d p=%d n=%d\n", ++ stack[j].value, s[i].value, pri, nlps); ++ } else if (w2 < w1) { ++ /* is narrower */ ++ s[nnew] = stack[j]; ++ s[nnew + 1] = s[i]; ++ if (ISDBG(MAINSTEMS)) ++ fprintf(pfa_file, "%% /stem %d...%d p=%d n=%d %d->%d\n", ++ stack[j].value, s[i].value, pri, nlps, w1, w2); ++ } ++ } else if (pri == 2) { ++ if (readystem == 2) { ++ /* choose the narrower stem */ ++ if (w1 > w2) { ++ s[nnew] = stack[j]; ++ s[nnew + 1] = s[i]; ++ sbottom = j; ++ if (ISDBG(MAINSTEMS)) ++ fprintf(pfa_file, "%% /stem %d...%d p=%d n=%d\n", ++ stack[j].value, s[i].value, pri, nlps); ++ } ++ /* else readystem==1 */ ++ } else if (stack[j].value > s[nnew + 1].value) { ++ /* ++ * value doesn't overlap with ++ * the previous one ++ */ ++ nnew += 2; ++ nlps = 0; ++ s[nnew] = stack[j]; ++ s[nnew + 1] = s[i]; ++ sbottom = j; ++ readystem = pri; ++ if (ISDBG(MAINSTEMS)) ++ fprintf(pfa_file, "%% +stem %d...%d p=%d n=%d\n", ++ stack[j].value, s[i].value, pri, nlps); ++ } else if (nlps == 1 ++ || stack[j].value > s[nnew - 1].value) { ++ /* ++ * we can replace the top ++ * stem ++ */ ++ nlps = 0; ++ s[nnew] = stack[j]; ++ s[nnew + 1] = s[i]; ++ readystem = pri; ++ sbottom = j; ++ if (ISDBG(MAINSTEMS)) ++ fprintf(pfa_file, "%% /stem %d...%d p=%d n=%d\n", ++ stack[j].value, s[i].value, pri, nlps); ++ } ++ } else if (readystem == 3) { /* that means also ++ * pri==3 */ ++ /* choose the narrower stem */ ++ if (w1 > w2) { ++ s[nnew] = stack[j]; ++ s[nnew + 1] = s[i]; ++ sbottom = j + 1; ++ while (sbottom < nstack ++ && stack[sbottom].value <= stack[j].value) ++ sbottom++; ++ if (ISDBG(MAINSTEMS)) ++ fprintf(pfa_file, "%% /stem %d...%d p=%d n=%d\n", ++ stack[j].value, s[i].value, pri, nlps); ++ } ++ } else if (pri == 3) { ++ /* ++ * we can replace as many stems as ++ * neccessary ++ */ ++ nnew += 2; ++ while (nnew > 0 && s[nnew - 1].value >= stack[j].value) { ++ nnew -= 2; ++ if (ISDBG(MAINSTEMS)) ++ fprintf(pfa_file, "%% -stem %d..%d\n", ++ s[nnew].value, s[nnew + 1].value); ++ } ++ nlps = 0; ++ s[nnew] = stack[j]; ++ s[nnew + 1] = s[i]; ++ readystem = pri; ++ sbottom = j + 1; ++ while (sbottom < nstack ++ && stack[sbottom].value <= stack[j].value) ++ sbottom++; ++ if (ISDBG(MAINSTEMS)) ++ fprintf(pfa_file, "%% +stem %d...%d p=%d n=%d\n", ++ stack[j].value, s[i].value, pri, nlps); ++ } ++ } ++ } ++ } ++ if (readystem) ++ nnew += 2; ++ ++ /* change the 1-pixel-wide stems to 20-pixel-wide stems if possible ++ * the constant 20 is recommended in the Type1 manual ++ */ ++ if(useblues) { ++ for(i=0; ii+2 && s[i+2].value0 && s[i-1].value>s[i].value-22) ++ s[i].value=s[i-1].value+2; /* compensate for fuzziness */ ++ else ++ s[i].value-=20; ++ } ++ } ++ } ++ /* make sure that no stem it stretched between ++ * a top zone and a bottom zone ++ */ ++ if(useblues) { ++ for(i=0; i=s[i].value && c<=s[i+1].value && c=2) { ++ c=bluevalues[1]; ++ if( c>=s[i].value && c<=s[i+1].value && c>b ) ++ b=c; ++ } ++ for(j=1; j=s[i].value && c<=s[i+1].value && c>b ) ++ b=c; ++ } ++ if( a!=10000 && b!= -10000 ) { /* it is stretched */ ++ /* split the stem into 2 ghost stems */ ++ for(j=nnew+1; j>i+1; j--) /* make free space */ ++ s[j]=s[j-2]; ++ nnew+=2; ++ ++ if(s[i].value+22 >= a) ++ s[i+1].value=a-2; /* leave space for fuzziness */ ++ else ++ s[i+1].value=s[i].value+20; ++ ++ if(s[i+3].value-22 <= b) ++ s[i+2].value=b+2; /* leave space for fuzziness */ ++ else ++ s[i+2].value=s[i+3].value-20; ++ ++ i+=2; ++ } ++ } ++ } ++ /* look for triple stems */ ++ for (i = 0; i < nnew; i += 2) { ++ if (nnew - i >= 6) { ++ a = s[i].value + s[i + 1].value; ++ b = s[i + 2].value + s[i + 3].value; ++ c = s[i + 4].value + s[i + 5].value; ++ ++ w1 = s[i + 1].value - s[i].value; ++ w2 = s[i + 3].value - s[i + 2].value; ++ w3 = s[i + 5].value - s[i + 4].value; ++ ++ fw = w3 - w1; /* fuzz in width */ ++ fd = ((c - b) - (b - a)); /* fuzz in distance ++ * (doubled) */ ++ ++ /* we are able to handle some fuzz */ ++ /* ++ * it doesn't hurt if the declared stem is a bit ++ * narrower than actual unless it's an edge in ++ * a blue zone ++ */ ++ if (abs(abs(fd) - abs(fw)) * 5 < w2 ++ && abs(fw) * 20 < (w1 + w3)) { /* width dirrerence <10% */ ++ ++ if(useblues) { /* check that we don't disturb any blue stems */ ++ j=c; k=a; ++ if (fw > 0) { ++ if (fd > 0) { ++ if( s[i+5].flags & ST_BLUE ) ++ continue; ++ j -= fw; ++ } else { ++ if( s[i+4].flags & ST_BLUE ) ++ continue; ++ j += fw; ++ } ++ } else if(fw < 0) { ++ if (fd > 0) { ++ if( s[i+1].flags & ST_BLUE ) ++ continue; ++ k -= fw; ++ } else { ++ if( s[i].flags & ST_BLUE ) ++ continue; ++ k += fw; ++ } ++ } ++ pri = ((j - b) - (b - k)); ++ ++ if (pri > 0) { ++ if( s[i+2].flags & ST_BLUE ) ++ continue; ++ } else if(pri < 0) { ++ if( s[i+3].flags & ST_BLUE ) ++ continue; ++ } ++ } ++ ++ /* ++ * first fix up the width of 1st and 3rd ++ * stems ++ */ ++ if (fw > 0) { ++ if (fd > 0) { ++ s[i + 5].value -= fw; ++ c -= fw; ++ } else { ++ s[i + 4].value += fw; ++ c += fw; ++ } ++ } else { ++ if (fd > 0) { ++ s[i + 1].value -= fw; ++ a -= fw; ++ } else { ++ s[i].value += fw; ++ a += fw; ++ } ++ } ++ fd = ((c - b) - (b - a)); ++ ++ if (fd > 0) { ++ s[i + 2].value += abs(fd) / 2; ++ } else { ++ s[i + 3].value -= abs(fd) / 2; ++ } ++ ++ s[i].flags |= ST_3; ++ i += 4; ++ } ++ } ++ } ++ ++ return (nnew & ~1); /* number of lines must be always even */ ++} ++ ++/* ++ * these macros and function allow to set the base stem, ++ * check that it's not empty and subtract another stem ++ * from the base stem (possibly dividing it into multiple parts) ++ */ ++ ++/* pairs for pieces of the base stem */ ++static short xbstem[MAX_STEMS*2]; ++/* index of the last point */ ++static int xblast= -1; ++ ++#define setbasestem(from, to) \ ++ (xbstem[0]=from, xbstem[1]=to, xblast=1) ++#define isbaseempty() (xblast<=0) ++ ++/* returns 1 if was overlapping, 0 otherwise */ ++static int ++subfrombase( ++ int from, ++ int to ++) ++{ ++ int a, b; ++ int i, j; ++ ++ if(isbaseempty()) ++ return 0; ++ ++ /* handle the simple case simply */ ++ if(from > xbstem[xblast] || to < xbstem[0]) ++ return 0; ++ ++ /* the binary search may be more efficient */ ++ /* but for now the linear search is OK */ ++ for(b=1; from > xbstem[b]; b+=2) {} /* result: from <= xbstem[b] */ ++ for(a=xblast-1; to < xbstem[a]; a-=2) {} /* result: to >= xbstem[a] */ ++ ++ /* now the interesting examples are: ++ * (it was hard for me to understand, so I looked at the examples) ++ * 1 ++ * a|-----| |-----|b |-----| |-----| ++ * f|-----|t ++ * 2 ++ * a|-----|b |-----| |-----| |-----| ++ * f|--|t ++ * 3 ++ * a|-----|b |-----| |-----| |-----| ++ * f|-----|t ++ * 4 ++ * |-----|b a|-----| |-----| |-----| ++ * f|------------|t ++ * 5 ++ * |-----| |-----|b |-----| a|-----| ++ * f|-----------------------------|t ++ * 6 ++ * |-----|b |-----| |-----| a|-----| ++ * f|--------------------------------------------------|t ++ * 7 ++ * |-----|b |-----| a|-----| |-----| ++ * f|--------------------------|t ++ */ ++ ++ if(a < b-1) /* hits a gap - example 1 */ ++ return 0; ++ ++ /* now the subtraction itself */ ++ ++ if(a==b-1 && from > xbstem[a] && to < xbstem[b]) { ++ /* overlaps with only one subrange and splits it - example 2 */ ++ j=xblast; i=(xblast+=2); ++ while(j>=b) ++ xbstem[i--]=xbstem[j--]; ++ xbstem[b]=from-1; ++ xbstem[b+1]=to+1; ++ return 1; ++ /* becomes ++ * 2a ++ * a|b || |-----| |-----| |-----| ++ * f|--|t ++ */ ++ } ++ ++ if(xbstem[b-1] < from) { ++ /* cuts the back of this subrange - examples 3, 4, 7 */ ++ xbstem[b] = from-1; ++ b+=2; ++ /* becomes ++ * 3a ++ * a|----| |-----|b |-----| |-----| ++ * f|-----|t ++ * 4a ++ * |---| a|-----|b |-----| |-----| ++ * f|------------|t ++ * 7a ++ * |---| |-----|b a|-----| |-----| ++ * f|--------------------------|t ++ */ ++ } ++ ++ if(xbstem[a+1] > to) { ++ /* cuts the front of this subrange - examples 4a, 5, 7a */ ++ xbstem[a] = to+1; ++ a-=2; ++ /* becomes ++ * 4b ++ * a|---| |---|b |-----| |-----| ++ * f|------------|t ++ * 5b ++ * |-----| |-----|b a|-----| || ++ * f|-----------------------------|t ++ * 7b ++ * |---| a|-----|b || |-----| ++ * f|--------------------------|t ++ */ ++ } ++ ++ if(a < b-1) /* now after modification it hits a gap - examples 3a, 4b */ ++ return 1; /* because we have removed something */ ++ ++ /* now remove the subranges completely covered by the new stem */ ++ /* examples 5b, 6, 7b */ ++ i=b-1; j=a+2; ++ /* positioned as: ++ * 5b i j ++ * |-----| |-----|b a|-----| || ++ * f|-----------------------------|t ++ * 6 i xblast j ++ * |-----|b |-----| |-----| a|-----| ++ * f|--------------------------------------------------|t ++ * 7b i j ++ * |---| a|-----|b || |-----| ++ * f|--------------------------|t ++ */ ++ while(j <= xblast) ++ xbstem[i++]=xbstem[j++]; ++ xblast=i-1; ++ return 1; ++} ++ ++/* for debugging */ ++static void ++printbasestem(void) ++{ ++ int i; ++ ++ printf("( "); ++ for(i=0; i lastpri ++ && ( lastpri==1 || s[j].value-v<20 || (s[x].value-v)*2 >= s[j].value-v ) ) ) { ++ lastpri=pri; ++ x=j; ++ } ++ } ++ } else { ++ for(j=i-1; j>=0; j--) { ++ if(mx[i][j]==0) ++ continue; ++ ++ if( (f | s[j].flags) & ST_END ) ++ pri=1; ++ else if( (f | s[j].flags) & ST_FLAT ) ++ pri=3; ++ else ++ pri=2; ++ ++ if(lastpri==0 ++ || ( pri > lastpri ++ && ( lastpri==1 || v-s[j].value<20 || (v-s[x].value)*2 >= v-s[j].value ) ) ) { ++ lastpri=pri; ++ x=j; ++ } ++ } ++ } ++ if(x== -1 && mx[i][i]) ++ pairs[i]=i; /* a special case */ ++ else ++ pairs[i]=x; ++ } ++ ++ if(ISDBG(SUBSTEMS)) { ++ for(i=0; i0) ++ fprintf(pfa_file, "%% %d...%d (%d x %d)\n", s[i].value, s[j].value, i, j); ++ } ++ } ++} ++ ++/* ++ * Make all the stems originating at the same value get the ++ * same width. Without this the rasterizer may move the dots ++ * randomly up or down by one pixel, and that looks bad. ++ * The prioritisation is the same as in findstemat(). ++ */ ++static void ++uniformstems( ++ STEM * s, ++ short *pairs, ++ int ns ++) ++{ ++ int i, j, from, to, val, dir; ++ int pri, prevpri[2], wd, prevwd[2], prevbest[2]; ++ ++ for(from=0; from prevpri[dir] || wd= 0) { ++ if(ISDBG(SUBSTEMS)) { ++ fprintf(stderr, "at %d (%s %d) pair %d->%d(%d)\n", i, ++ (dir ? "UP":"DOWN"), s[i].value, pairs[i], prevbest[dir], ++ s[prevbest[dir]].value); ++ } ++ pairs[i] = prevbest[dir]; ++ } ++ } ++ } ++} ++ ++/* ++ * Find the best stem in the array at the specified (value, origin), ++ * related to the entry ge. ++ * Returns its index in the array sp, -1 means "none". ++ * prevbest is the result for the other end of the line, we must ++ * find something better than it or leave it as it is. ++ */ ++static int ++findstemat( ++ int value, ++ int origin, ++ GENTRY *ge, ++ STEM *sp, ++ short *pairs, ++ int ns, ++ int prevbest /* -1 means "none" */ ++) ++{ ++ int i, min, max; ++ int v, si; ++ int pri, prevpri; /* priority, 0 = has ST_END, 1 = no ST_END */ ++ int wd, prevwd; /* stem width */ ++ ++ si= -1; /* nothing yet */ ++ ++ /* stems are ordered by value, binary search */ ++ min=0; max=ns; /* min <= i < max */ ++ while( min < max ) { ++ i=(min+max)/2; ++ v=sp[i].value; ++ if(vvalue) ++ max=i; ++ else { ++ si=i; /* temporary value */ ++ break; ++ } ++ } ++ ++ if( si < 0 ) /* found nothing this time */ ++ return prevbest; ++ ++ /* find the priority of the prevbest */ ++ /* we expect that prevbest has a pair */ ++ if(prevbest>=0) { ++ i=pairs[prevbest]; ++ prevpri=1; ++ if( (sp[prevbest].flags | sp[i].flags) & ST_END ) ++ prevpri=0; ++ prevwd=abs(sp[i].value-value); ++ } ++ ++ /* stems are not ordered by origin, so now do the linear search */ ++ ++ while( si>0 && sp[si-1].value==value ) /* find the first one */ ++ si--; ++ ++ for(; siprevpri ++ || (pri==prevpri && prevwd==0) || (wd!=0 && wdprev->ix3; ++ y=ge->prev->iy3; ++ ++ if(*nextvsi == -2) ++ si[SI_VP]=findstemat(x, y, ge, vs, vpairs, nvs, -1); ++ else { ++ si[SI_VP]= *nextvsi; *nextvsi= -2; ++ } ++ if(*nexthsi == -2) ++ si[SI_HP]=findstemat(y, x, ge, hs, hpairs, nhs, -1); ++ else { ++ si[SI_HP]= *nexthsi; *nexthsi= -2; ++ } ++ ++ /* ++ * For the horizontal lines we make sure that both ++ * ends of the line have the same horizontal stem, ++ * and the same thing for vertical lines and stems. ++ * In both cases we enforce the stem for the next entry. ++ * Otherwise unpleasant effects may arise. ++ */ ++ ++ if(ge->type==GE_LINE) { ++ if(ge->ix3==x) { /* vertical line */ ++ *nextvsi=si[SI_VP]=findstemat(x, ge->iy3, ge->frwd, vs, vpairs, nvs, si[SI_VP]); ++ } else if(ge->iy3==y) { /* horizontal line */ ++ *nexthsi=si[SI_HP]=findstemat(y, ge->ix3, ge->frwd, hs, hpairs, nhs, si[SI_HP]); ++ } ++ } ++ ++ if(si[SI_VP]+si[SI_HP] == -2) /* no stems, leave it alone */ ++ return 0; ++ ++ /* build the array of relevant bounds */ ++ nr=0; ++ for(i=0; i< sizeof(si) / sizeof(si[0]); i++) { ++ STEM *sp; ++ short *pairs; ++ int step; ++ int f; ++ int nzones, firstzone, binzone, einzone; ++ int btype, etype; ++ ++ if(si[i] < 0) ++ continue; ++ ++ if(i r[nr].high) { ++ j=r[nr].low; r[nr].low=r[nr].high; r[nr].high=j; ++ step= -1; ++ } else { ++ step=1; ++ } ++ ++ /* handle the interaction with Blue Zones */ ++ ++ if(i>=SI_HP) { /* only for horizontal stems */ ++ if(si[i]==pairs[si[i]]) { ++ /* special case, the outermost stem in the ++ * Blue Zone without a pair, simulate it to 20-pixel ++ */ ++ if(sp[ si[i] ].flags & ST_UP) { ++ r[nr].high+=20; ++ for(j=si[i]+1; j sp[j].value-2) ++ r[nr].high=sp[j].value-2; ++ break; ++ } ++ } else { ++ r[nr].low-=20; ++ for(j=si[i]-1; j>=0; j--) ++ if( (sp[j].flags & (ST_ZONE|ST_TOPZONE)) ++ == (ST_ZONE) ) { ++ if(r[nr].low < sp[j].value+2) ++ r[nr].low=sp[j].value+2; ++ break; ++ } ++ } ++ } ++ ++ /* check that the stem borders don't end up in ++ * different Blue Zones */ ++ f=sp[ si[i] ].flags; ++ nzones=0; einzone=binzone=0; ++ for(j=si[i]; j!=pairs[ si[i] ]; j+=step) { ++ if( (sp[j].flags & ST_ZONE)==0 ) ++ continue; ++ /* if see a zone border going in the same direction */ ++ if( ((f ^ sp[j].flags) & ST_UP)==0 ) { ++ if( ++nzones == 1 ) { ++ firstzone=sp[j].value; /* remember the first one */ ++ etype=sp[j].flags & ST_TOPZONE; ++ } ++ einzone=1; ++ ++ } else { /* the opposite direction */ ++ if(nzones==0) { /* beginning is in a blue zone */ ++ binzone=1; ++ btype=sp[j].flags & ST_TOPZONE; ++ } ++ einzone=0; ++ } ++ } ++ ++ /* beginning and end are in Blue Zones of different types */ ++ if( binzone && einzone && (btype ^ etype)!=0 ) { ++ if( sp[si[i]].flags & ST_UP ) { ++ if(firstzone > r[nr].low+22) ++ r[nr].high=r[nr].low+20; ++ else ++ r[nr].high=firstzone-2; ++ } else { ++ if(firstzone < r[nr].high-22) ++ r[nr].low=r[nr].high-20; ++ else ++ r[nr].low=firstzone+2; ++ } ++ } ++ } ++ ++ if(ISDBG(SUBSTEMS)) ++ fprintf(pfa_file, "%% at(%d,%d)[%d,%d] %d..%d %c (%d x %d)\n", x, y, i, nr, ++ r[nr].low, r[nr].high, r[nr].isvert ? 'v' : 'h', ++ si[i], pairs[si[i]]); ++ ++ nr++; ++ } ++ ++ /* now try to find a group */ ++ conflict=0; /* no conflicts found yet */ ++ for(j=0; j= lb ) { ++ if( r[j].low == lb && r[j].high == hb ) /* coincides */ ++ r[j].already=1; ++ else ++ conflict=1; ++ } ++ ++ if(conflict) ++ break; ++ } ++ ++ if(conflict) { /* nope, check all the groups */ ++ for(j=0; j= lb ) { ++ if( r[j].low == lb && r[j].high == hb ) /* coincides */ ++ r[j].already=1; ++ else ++ conflict=1; ++ } ++ ++ if(conflict) ++ i=egp[grp]-1; /* fast forward to the next group */ ++ } ++ } ++ ++ /* do we have any empty group ? */ ++ if(conflict && grp < NSTEMGRP-1) { ++ grp++; conflict=0; ++ for(j=0; j 0) { ++ for(i=egp[NSTEMGRP-1]-1; i>=egp[grp]; i--) ++ s[i+rexpand]=s[i]; ++ for(i=0; istemid = gssentry_lastgrp = grp; ++ return 0; ++} ++ ++/* ++ * Create the groups of substituted stems from the list. ++ * Each group will be represented by a subroutine in the Subs ++ * array. ++ */ ++ ++static void ++groupsubstems( ++ GLYPH *g, ++ STEM *hs, /* horizontal stems, sorted by value */ ++ short *hpairs, ++ int nhs, ++ STEM *vs, /* vertical stems, sorted by value */ ++ short *vpairs, ++ int nvs ++) ++{ ++ GENTRY *ge; ++ int i, j; ++ ++ /* temporary storage */ ++ STEMBOUNDS s[MAX_STEMS*2]; ++ /* indexes in there, pointing past the end each stem group */ ++ short egp[NSTEMGRP]; ++ ++ int nextvsi, nexthsi; /* -2 means "check by yourself" */ ++ ++ for(i=0; ientries; ge != 0; ge = ge->next) { ++ if(ge->type!=GE_LINE && ge->type!=GE_CURVE) { ++ nextvsi=nexthsi= -2; /* next path is independent */ ++ continue; ++ } ++ ++ if( gssentry(ge, hs, hpairs, nhs, vs, vpairs, nvs, s, egp, &nextvsi, &nexthsi) ) { ++ WARNING_2 fprintf(stderr, "*** glyph %s requires over %d hint subroutines, ignored them\n", ++ g->name, NSTEMGRP); ++ /* it's better to have no substituted hints at all than have only part */ ++ for (ge = g->entries; ge != 0; ge = ge->next) ++ ge->stemid= -1; ++ g->nsg=0; /* just to be safe, already is 0 by initialization */ ++ return; ++ } ++ ++ /* ++ * handle the last vert/horiz line of the path specially, ++ * correct the hint for the first entry of the path ++ */ ++ if(ge->frwd != ge->next && (nextvsi != -2 || nexthsi != -2) ) { ++ if( gssentry(ge->frwd, hs, hpairs, nhs, vs, vpairs, nvs, s, egp, &nextvsi, &nexthsi) ) { ++ WARNING_2 fprintf(stderr, "*** glyph %s requires over %d hint subroutines, ignored them\n", ++ g->name, NSTEMGRP); ++ /* it's better to have no substituted hints at all than have only part */ ++ for (ge = g->entries; ge != 0; ge = ge->next) ++ ge->stemid= -1; ++ g->nsg=0; /* just to be safe, already is 0 by initialization */ ++ return; ++ } ++ } ++ ++ } ++ ++ /* find the index of the first empty group - same as the number of groups */ ++ if(egp[0]>0) { ++ for(i=1; insg=i; ++ } else ++ g->nsg=0; ++ ++ if(ISDBG(SUBSTEMS)) { ++ fprintf(pfa_file, "%% %d substem groups (%d %d %d)\n", g->nsg, ++ g->nsg>1 ? egp[g->nsg-2] : -1, ++ g->nsg>0 ? egp[g->nsg-1] : -1, ++ g->nsgnsg] : -1 ); ++ j=0; ++ for(i=0; insg; i++) { ++ fprintf(pfa_file, "%% grp %3d: ", i); ++ for(; jnsg==1) { /* it would be the same as the main stems */ ++ /* so erase it */ ++ for (ge = g->entries; ge != 0; ge = ge->next) ++ ge->stemid= -1; ++ g->nsg=0; ++ } ++ ++ if(g->nsg>0) { ++ if( (g->nsbs=malloc(g->nsg * sizeof (egp[0]))) == 0 ) { ++ fprintf(stderr, "**** not enough memory for substituted hints ****\n"); ++ exit(255); ++ } ++ memmove(g->nsbs, egp, g->nsg * sizeof(short)); ++ if( (g->sbstems=malloc(egp[g->nsg-1] * sizeof (s[0]))) == 0 ) { ++ fprintf(stderr, "**** not enough memory for substituted hints ****\n"); ++ exit(255); ++ } ++ memmove(g->sbstems, s, egp[g->nsg-1] * sizeof(s[0])); ++ } ++} ++ ++void ++buildstems( ++ GLYPH * g ++) ++{ ++ STEM hs[MAX_STEMS], vs[MAX_STEMS]; /* temporary working ++ * storage */ ++ short hs_pairs[MAX_STEMS], vs_pairs[MAX_STEMS]; /* best pairs for these stems */ ++ STEM *sp; ++ GENTRY *ge, *nge, *pge; ++ int nx, ny; ++ int ovalue; ++ int totals, grp, lastgrp; ++ ++ assertisint(g, "buildstems int"); ++ ++ g->nhs = g->nvs = 0; ++ memset(hs, 0, sizeof hs); ++ memset(vs, 0, sizeof vs); ++ ++ /* first search the whole character for possible stem points */ ++ ++ for (ge = g->entries; ge != 0; ge = ge->next) { ++ if (ge->type == GE_CURVE) { ++ ++ /* ++ * SURPRISE! ++ * We consider the stems bound by the ++ * H/V ends of the curves as flat ones. ++ * ++ * But we don't include the point on the ++ * other end into the range. ++ */ ++ ++ /* first check the beginning of curve */ ++ /* if it is horizontal, add a hstem */ ++ if (ge->iy1 == ge->prev->iy3) { ++ hs[g->nhs].value = ge->iy1; ++ ++ if (ge->ix1 < ge->prev->ix3) ++ hs[g->nhs].flags = ST_FLAT | ST_UP; ++ else ++ hs[g->nhs].flags = ST_FLAT; ++ ++ hs[g->nhs].origin = ge->prev->ix3; ++ hs[g->nhs].ge = ge; ++ ++ if (ge->ix1 < ge->prev->ix3) { ++ hs[g->nhs].from = ge->ix1+1; ++ hs[g->nhs].to = ge->prev->ix3; ++ if(hs[g->nhs].from > hs[g->nhs].to) ++ hs[g->nhs].from--; ++ } else { ++ hs[g->nhs].from = ge->prev->ix3; ++ hs[g->nhs].to = ge->ix1-1; ++ if(hs[g->nhs].from > hs[g->nhs].to) ++ hs[g->nhs].to++; ++ } ++ if (ge->ix1 != ge->prev->ix3) ++ g->nhs++; ++ } ++ /* if it is vertical, add a vstem */ ++ else if (ge->ix1 == ge->prev->ix3) { ++ vs[g->nvs].value = ge->ix1; ++ ++ if (ge->iy1 > ge->prev->iy3) ++ vs[g->nvs].flags = ST_FLAT | ST_UP; ++ else ++ vs[g->nvs].flags = ST_FLAT; ++ ++ vs[g->nvs].origin = ge->prev->iy3; ++ vs[g->nvs].ge = ge; ++ ++ if (ge->iy1 < ge->prev->iy3) { ++ vs[g->nvs].from = ge->iy1+1; ++ vs[g->nvs].to = ge->prev->iy3; ++ if(vs[g->nvs].from > vs[g->nvs].to) ++ vs[g->nvs].from--; ++ } else { ++ vs[g->nvs].from = ge->prev->iy3; ++ vs[g->nvs].to = ge->iy1-1; ++ if(vs[g->nvs].from > vs[g->nvs].to) ++ vs[g->nvs].to++; ++ } ++ ++ if (ge->iy1 != ge->prev->iy3) ++ g->nvs++; ++ } ++ /* then check the end of curve */ ++ /* if it is horizontal, add a hstem */ ++ if (ge->iy3 == ge->iy2) { ++ hs[g->nhs].value = ge->iy3; ++ ++ if (ge->ix3 < ge->ix2) ++ hs[g->nhs].flags = ST_FLAT | ST_UP; ++ else ++ hs[g->nhs].flags = ST_FLAT; ++ ++ hs[g->nhs].origin = ge->ix3; ++ hs[g->nhs].ge = ge->frwd; ++ ++ if (ge->ix3 < ge->ix2) { ++ hs[g->nhs].from = ge->ix3; ++ hs[g->nhs].to = ge->ix2-1; ++ if( hs[g->nhs].from > hs[g->nhs].to ) ++ hs[g->nhs].to++; ++ } else { ++ hs[g->nhs].from = ge->ix2+1; ++ hs[g->nhs].to = ge->ix3; ++ if( hs[g->nhs].from > hs[g->nhs].to ) ++ hs[g->nhs].from--; ++ } ++ ++ if (ge->ix3 != ge->ix2) ++ g->nhs++; ++ } ++ /* if it is vertical, add a vstem */ ++ else if (ge->ix3 == ge->ix2) { ++ vs[g->nvs].value = ge->ix3; ++ ++ if (ge->iy3 > ge->iy2) ++ vs[g->nvs].flags = ST_FLAT | ST_UP; ++ else ++ vs[g->nvs].flags = ST_FLAT; ++ ++ vs[g->nvs].origin = ge->iy3; ++ vs[g->nvs].ge = ge->frwd; ++ ++ if (ge->iy3 < ge->iy2) { ++ vs[g->nvs].from = ge->iy3; ++ vs[g->nvs].to = ge->iy2-1; ++ if( vs[g->nvs].from > vs[g->nvs].to ) ++ vs[g->nvs].to++; ++ } else { ++ vs[g->nvs].from = ge->iy2+1; ++ vs[g->nvs].to = ge->iy3; ++ if( vs[g->nvs].from > vs[g->nvs].to ) ++ vs[g->nvs].from--; ++ } ++ ++ if (ge->iy3 != ge->iy2) ++ g->nvs++; ++ } else { ++ ++ /* ++ * check the end of curve for a not smooth ++ * local extremum ++ */ ++ nge = ge->frwd; ++ ++ if (nge == 0) ++ continue; ++ else if (nge->type == GE_LINE) { ++ nx = nge->ix3; ++ ny = nge->iy3; ++ } else if (nge->type == GE_CURVE) { ++ nx = nge->ix1; ++ ny = nge->iy1; ++ } else ++ continue; ++ ++ /* check for vertical extremums */ ++ if ((ge->iy3 > ge->iy2 && ge->iy3 > ny) ++ || (ge->iy3 < ge->iy2 && ge->iy3 < ny)) { ++ hs[g->nhs].value = ge->iy3; ++ hs[g->nhs].from ++ = hs[g->nhs].to ++ = hs[g->nhs].origin = ge->ix3; ++ hs[g->nhs].ge = ge->frwd; ++ ++ if (ge->ix3 < ge->ix2 ++ || nx < ge->ix3) ++ hs[g->nhs].flags = ST_UP; ++ else ++ hs[g->nhs].flags = 0; ++ ++ if (ge->ix3 != ge->ix2 || nx != ge->ix3) ++ g->nhs++; ++ } ++ /* ++ * the same point may be both horizontal and ++ * vertical extremum ++ */ ++ /* check for horizontal extremums */ ++ if ((ge->ix3 > ge->ix2 && ge->ix3 > nx) ++ || (ge->ix3 < ge->ix2 && ge->ix3 < nx)) { ++ vs[g->nvs].value = ge->ix3; ++ vs[g->nvs].from ++ = vs[g->nvs].to ++ = vs[g->nvs].origin = ge->iy3; ++ vs[g->nvs].ge = ge->frwd; ++ ++ if (ge->iy3 > ge->iy2 ++ || ny > ge->iy3) ++ vs[g->nvs].flags = ST_UP; ++ else ++ vs[g->nvs].flags = 0; ++ ++ if (ge->iy3 != ge->iy2 || ny != ge->iy3) ++ g->nvs++; ++ } ++ } ++ ++ } else if (ge->type == GE_LINE) { ++ nge = ge->frwd; ++ ++ /* if it is horizontal, add a hstem */ ++ /* and the ends as vstems if they brace the line */ ++ if (ge->iy3 == ge->prev->iy3 ++ && ge->ix3 != ge->prev->ix3) { ++ hs[g->nhs].value = ge->iy3; ++ if (ge->ix3 < ge->prev->ix3) { ++ hs[g->nhs].flags = ST_FLAT | ST_UP; ++ hs[g->nhs].from = ge->ix3; ++ hs[g->nhs].to = ge->prev->ix3; ++ } else { ++ hs[g->nhs].flags = ST_FLAT; ++ hs[g->nhs].from = ge->prev->ix3; ++ hs[g->nhs].to = ge->ix3; ++ } ++ hs[g->nhs].origin = ge->ix3; ++ hs[g->nhs].ge = ge->frwd; ++ ++ pge = ge->bkwd; ++ ++ /* add beginning as vstem */ ++ vs[g->nvs].value = pge->ix3; ++ vs[g->nvs].origin ++ = vs[g->nvs].from ++ = vs[g->nvs].to = pge->iy3; ++ vs[g->nvs].ge = ge; ++ ++ if(pge->type==GE_CURVE) ++ ovalue=pge->iy2; ++ else ++ ovalue=pge->prev->iy3; ++ ++ if (pge->iy3 > ovalue) ++ vs[g->nvs].flags = ST_UP | ST_END; ++ else if (pge->iy3 < ovalue) ++ vs[g->nvs].flags = ST_END; ++ else ++ vs[g->nvs].flags = 0; ++ ++ if( vs[g->nvs].flags != 0 ) ++ g->nvs++; ++ ++ /* add end as vstem */ ++ vs[g->nvs].value = ge->ix3; ++ vs[g->nvs].origin ++ = vs[g->nvs].from ++ = vs[g->nvs].to = ge->iy3; ++ vs[g->nvs].ge = ge->frwd; ++ ++ if(nge->type==GE_CURVE) ++ ovalue=nge->iy1; ++ else ++ ovalue=nge->iy3; ++ ++ if (ovalue > ge->iy3) ++ vs[g->nvs].flags = ST_UP | ST_END; ++ else if (ovalue < ge->iy3) ++ vs[g->nvs].flags = ST_END; ++ else ++ vs[g->nvs].flags = 0; ++ ++ if( vs[g->nvs].flags != 0 ) ++ g->nvs++; ++ ++ g->nhs++; ++ } ++ /* if it is vertical, add a vstem */ ++ /* and the ends as hstems if they brace the line */ ++ else if (ge->ix3 == ge->prev->ix3 ++ && ge->iy3 != ge->prev->iy3) { ++ vs[g->nvs].value = ge->ix3; ++ if (ge->iy3 > ge->prev->iy3) { ++ vs[g->nvs].flags = ST_FLAT | ST_UP; ++ vs[g->nvs].from = ge->prev->iy3; ++ vs[g->nvs].to = ge->iy3; ++ } else { ++ vs[g->nvs].flags = ST_FLAT; ++ vs[g->nvs].from = ge->iy3; ++ vs[g->nvs].to = ge->prev->iy3; ++ } ++ vs[g->nvs].origin = ge->iy3; ++ vs[g->nvs].ge = ge->frwd; ++ ++ pge = ge->bkwd; ++ ++ /* add beginning as hstem */ ++ hs[g->nhs].value = pge->iy3; ++ hs[g->nhs].origin ++ = hs[g->nhs].from ++ = hs[g->nhs].to = pge->ix3; ++ hs[g->nhs].ge = ge; ++ ++ if(pge->type==GE_CURVE) ++ ovalue=pge->ix2; ++ else ++ ovalue=pge->prev->ix3; ++ ++ if (pge->ix3 < ovalue) ++ hs[g->nhs].flags = ST_UP | ST_END; ++ else if (pge->ix3 > ovalue) ++ hs[g->nhs].flags = ST_END; ++ else ++ hs[g->nhs].flags = 0; ++ ++ if( hs[g->nhs].flags != 0 ) ++ g->nhs++; ++ ++ /* add end as hstem */ ++ hs[g->nhs].value = ge->iy3; ++ hs[g->nhs].origin ++ = hs[g->nhs].from ++ = hs[g->nhs].to = ge->ix3; ++ hs[g->nhs].ge = ge->frwd; ++ ++ if(nge->type==GE_CURVE) ++ ovalue=nge->ix1; ++ else ++ ovalue=nge->ix3; ++ ++ if (ovalue < ge->ix3) ++ hs[g->nhs].flags = ST_UP | ST_END; ++ else if (ovalue > ge->ix3) ++ hs[g->nhs].flags = ST_END; ++ else ++ hs[g->nhs].flags = 0; ++ ++ if( hs[g->nhs].flags != 0 ) ++ g->nhs++; ++ ++ g->nvs++; ++ } ++ /* ++ * check the end of line for a not smooth local ++ * extremum ++ */ ++ nge = ge->frwd; ++ ++ if (nge == 0) ++ continue; ++ else if (nge->type == GE_LINE) { ++ nx = nge->ix3; ++ ny = nge->iy3; ++ } else if (nge->type == GE_CURVE) { ++ nx = nge->ix1; ++ ny = nge->iy1; ++ } else ++ continue; ++ ++ /* check for vertical extremums */ ++ if ((ge->iy3 > ge->prev->iy3 && ge->iy3 > ny) ++ || (ge->iy3 < ge->prev->iy3 && ge->iy3 < ny)) { ++ hs[g->nhs].value = ge->iy3; ++ hs[g->nhs].from ++ = hs[g->nhs].to ++ = hs[g->nhs].origin = ge->ix3; ++ hs[g->nhs].ge = ge->frwd; ++ ++ if (ge->ix3 < ge->prev->ix3 ++ || nx < ge->ix3) ++ hs[g->nhs].flags = ST_UP; ++ else ++ hs[g->nhs].flags = 0; ++ ++ if (ge->ix3 != ge->prev->ix3 || nx != ge->ix3) ++ g->nhs++; ++ } ++ /* ++ * the same point may be both horizontal and vertical ++ * extremum ++ */ ++ /* check for horizontal extremums */ ++ if ((ge->ix3 > ge->prev->ix3 && ge->ix3 > nx) ++ || (ge->ix3 < ge->prev->ix3 && ge->ix3 < nx)) { ++ vs[g->nvs].value = ge->ix3; ++ vs[g->nvs].from ++ = vs[g->nvs].to ++ = vs[g->nvs].origin = ge->iy3; ++ vs[g->nvs].ge = ge->frwd; ++ ++ if (ge->iy3 > ge->prev->iy3 ++ || ny > ge->iy3) ++ vs[g->nvs].flags = ST_UP; ++ else ++ vs[g->nvs].flags = 0; ++ ++ if (ge->iy3 != ge->prev->iy3 || ny != ge->iy3) ++ g->nvs++; ++ } ++ } ++ } ++ ++ g->nhs=addbluestems(hs, g->nhs); ++ sortstems(hs, g->nhs); ++ sortstems(vs, g->nvs); ++ ++ if (ISDBG(STEMS)) ++ debugstems(g->name, hs, g->nhs, vs, g->nvs); ++ ++ /* find the stems interacting with the Blue Zones */ ++ markbluestems(hs, g->nhs); ++ ++ if(subhints) { ++ if (ISDBG(SUBSTEMS)) ++ fprintf(pfa_file, "%% %s: joining subst horizontal stems\n", g->name); ++ joinsubstems(hs, hs_pairs, g->nhs, 1); ++ uniformstems(hs, hs_pairs, g->nhs); ++ ++ if (ISDBG(SUBSTEMS)) ++ fprintf(pfa_file, "%% %s: joining subst vertical stems\n", g->name); ++ joinsubstems(vs, vs_pairs, g->nvs, 0); ++ ++ groupsubstems(g, hs, hs_pairs, g->nhs, vs, vs_pairs, g->nvs); ++ } ++ ++ if (ISDBG(MAINSTEMS)) ++ fprintf(pfa_file, "%% %s: joining main horizontal stems\n", g->name); ++ g->nhs = joinmainstems(hs, g->nhs, 1); ++ if (ISDBG(MAINSTEMS)) ++ fprintf(pfa_file, "%% %s: joining main vertical stems\n", g->name); ++ g->nvs = joinmainstems(vs, g->nvs, 0); ++ ++ if (ISDBG(MAINSTEMS)) ++ debugstems(g->name, hs, g->nhs, vs, g->nvs); ++ ++ if(g->nhs > 0) { ++ if ((sp = malloc(sizeof(STEM) * g->nhs)) == 0) { ++ fprintf(stderr, "**** not enough memory for hints ****\n"); ++ exit(255); ++ } ++ g->hstems = sp; ++ memcpy(sp, hs, sizeof(STEM) * g->nhs); ++ } else ++ g->hstems = 0; ++ ++ if(g->nvs > 0) { ++ if ((sp = malloc(sizeof(STEM) * g->nvs)) == 0) { ++ fprintf(stderr, "**** not enough memory for hints ****\n"); ++ exit(255); ++ } ++ g->vstems = sp; ++ memcpy(sp, vs, sizeof(STEM) * g->nvs); ++ } else ++ g->vstems = 0; ++ ++ /* now check that the stems won't overflow the interpreter's stem stack: ++ * some interpreters (like X11) push the stems on each change into ++ * stack and pop them only after the whole glyphs is completed. ++ */ ++ ++ totals = (g->nhs+g->nvs) / 2; /* we count whole stems, not halves */ ++ lastgrp = -1; ++ ++ for (ge = g->entries; ge != 0; ge = ge->next) { ++ grp=ge->stemid; ++ if(grp >= 0 && grp != lastgrp) { ++ if(grp==0) ++ totals += g->nsbs[0]; ++ else ++ totals += g->nsbs[grp] - g->nsbs[grp-1]; ++ ++ lastgrp = grp; ++ } ++ } ++ ++ /* be on the safe side, check for >= , not > */ ++ if(totals >= max_stemdepth) { /* oops, too deep */ ++ WARNING_2 { ++ fprintf(stderr, "Warning: glyph %s needs hint stack depth %d\n", g->name, totals); ++ fprintf(stderr, " (limit %d): removed the substituted hints from it\n", max_stemdepth); ++ } ++ if(g->nsg > 0) { ++ for (ge = g->entries; ge != 0; ge = ge->next) ++ ge->stemid = -1; ++ free(g->sbstems); g->sbstems = 0; ++ free(g->nsbs); g->nsbs = 0; ++ g->nsg = 0; ++ } ++ } ++ ++ /* now check if there are too many main stems */ ++ totals = (g->nhs+g->nvs) / 2; /* we count whole stems, not halves */ ++ if(totals >= max_stemdepth) { ++ /* even worse, too much of non-substituted stems */ ++ WARNING_2 { ++ fprintf(stderr, "Warning: glyph %s has %d main hints\n", g->name, totals); ++ fprintf(stderr, " (limit %d): removed the hints from it\n", max_stemdepth); ++ } ++ if(g->vstems) { ++ free(g->vstems); g->vstems = 0; g->nvs = 0; ++ } ++ if(g->hstems) { ++ free(g->hstems); g->hstems = 0; g->nhs = 0; ++ } ++ } ++} ++ ++/* convert weird curves that are close to lines into lines. ++*/ ++ ++void ++fstraighten( ++ GLYPH * g ++) ++{ ++ GENTRY *ge, *pge, *nge, *ige; ++ double df; ++ int dir; ++ double iln, oln; ++ int svdir, i, o; ++ ++ for (ige = g->entries; ige != 0; ige = ige->next) { ++ if (ige->type != GE_CURVE) ++ continue; ++ ++ ge = ige; ++ pge = ge->bkwd; ++ nge = ge->frwd; ++ ++ df = 0.; ++ ++ /* look for vertical then horizontal */ ++ for(i=0; i<2; i++) { ++ o = !i; /* other axis */ ++ ++ iln = fabs(ge->fpoints[i][2] - pge->fpoints[i][2]); ++ oln = fabs(ge->fpoints[o][2] - pge->fpoints[o][2]); ++ /* ++ * if current curve is almost a vertical line, and it ++ * doesn't begin or end horizontally (and the prev/next ++ * line doesn't join smoothly ?) ++ */ ++ if( oln < 1. ++ || ge->fpoints[o][2] == ge->fpoints[o][1] ++ || ge->fpoints[o][0] == pge->fpoints[o][2] ++ || iln > 2. ++ || (iln > 1. && iln/oln > 0.1) ) ++ continue; ++ ++ ++ if(ISDBG(STRAIGHTEN)) ++ fprintf(stderr,"** straighten almost %s\n", (i? "horizontal":"vertical")); ++ ++ df = ge->fpoints[i][2] - pge->fpoints[i][2]; ++ dir = fsign(ge->fpoints[o][2] - pge->fpoints[o][2]); ++ ge->type = GE_LINE; ++ ++ /* ++ * suck in all the sequence of such almost lines ++ * going in the same direction but not deviating ++ * too far from vertical ++ */ ++ iln = fabs(nge->fpoints[i][2] - ge->fpoints[i][2]); ++ oln = nge->fpoints[o][2] - ge->fpoints[o][2]; ++ ++ while (fabs(df) <= 5 && nge->type == GE_CURVE ++ && dir == fsign(oln) /* that also gives oln != 0 */ ++ && iln <= 2. ++ && ( iln <= 1. || iln/fabs(oln) <= 0.1 ) ) { ++ ge->fx3 = nge->fx3; ++ ge->fy3 = nge->fy3; ++ ++ if(ISDBG(STRAIGHTEN)) ++ fprintf(stderr,"** straighten collapsing %s\n", (i? "horizontal":"vertical")); ++ freethisge(nge); ++ fixendpath(ge); ++ pge = ge->bkwd; ++ nge = ge->frwd; ++ ++ df = ge->fpoints[i][2] - pge->fpoints[i][2]; ++ ++ iln = fabs(nge->fpoints[i][2] - ge->fpoints[i][2]); ++ oln = nge->fpoints[o][2] - ge->fpoints[o][2]; ++ } ++ ++ /* now check what do we have as previous/next line */ ++ ++ if(ge != pge) { ++ if( pge->type == GE_LINE && pge->fpoints[i][2] == pge->prev->fpoints[i][2] ++ && fabs(pge->fpoints[o][2] != pge->prev->fpoints[o][2]) ) { ++ if(ISDBG(STRAIGHTEN)) fprintf(stderr,"** straighten join with previous 0x%x 0x%x\n", pge, ge); ++ /* join the previous line with current */ ++ pge->fx3 = ge->fx3; ++ pge->fy3 = ge->fy3; ++ ++ ige = freethisge(ge)->prev; /* keep the iterator valid */ ++ ge = pge; ++ fixendpath(ge); ++ pge = ge->bkwd; ++ } ++ } ++ ++ if(ge != nge) { ++ if (nge->type == GE_LINE && nge->fpoints[i][2] == ge->fpoints[i][2] ++ && fabs(nge->fpoints[o][2] != ge->fpoints[o][2]) ) { ++ if(ISDBG(STRAIGHTEN)) fprintf(stderr,"** straighten join with next 0x%x 0x%x\n", ge, nge); ++ /* join the next line with current */ ++ ge->fx3 = nge->fx3; ++ ge->fy3 = nge->fy3; ++ ++ freethisge(nge); ++ fixendpath(ge); ++ pge = ge->bkwd; ++ nge = ge->frwd; ++ ++ } ++ } ++ ++ if(ge != pge) { ++ /* try to align the lines if neccessary */ ++ if(df != 0.) ++ fclosegap(ge, ge, i, df, NULL); ++ } else { ++ /* contour consists of only one line, get rid of it */ ++ ige = freethisge(ge); /* keep the iterator valid */ ++ if(ige == 0) /* this was the last contour */ ++ return; ++ ige = ige->prev; ++ } ++ ++ break; /* don't bother looking at the other axis */ ++ } ++ } ++} ++ ++/* solve a square equation, ++ * returns the number of solutions found, the solutions ++ * are stored in res which should point to array of two doubles. ++ * min and max limit the area for solutions ++ */ ++ ++static int ++fsqequation( ++ double a, ++ double b, ++ double c, ++ double *res, ++ double min, ++ double max ++) ++{ ++ double D; ++ int n; ++ ++ if(ISDBG(SQEQ)) fprintf(stderr, "sqeq(%g,%g,%g) [%g;%g]\n", a, b, c, min, max); ++ ++ if(fabs(a) < 0.000001) { /* if a linear equation */ ++ n=0; ++ if(fabs(b) < 0.000001) /* not an equation at all */ ++ return 0; ++ res[0] = -c/b; ++ if(ISDBG(SQEQ)) fprintf(stderr, "sqeq: linear t=%g\n", res[0]); ++ if(res[0] >= min && res[0] <= max) ++ n++; ++ return n; ++ } ++ ++ D = b*b - 4.0*a*c; ++ if(ISDBG(SQEQ)) fprintf(stderr, "sqeq: D=%g\n", D); ++ if(D<0) ++ return 0; ++ ++ D = sqrt(D); ++ ++ n=0; ++ res[0] = (-b+D) / (2*a); ++ if(ISDBG(SQEQ)) fprintf(stderr, "sqeq: t1=%g\n", res[0]); ++ if(res[0] >= min && res[0] <= max) ++ n++; ++ ++ res[n] = (-b-D) / (2*a); ++ if(ISDBG(SQEQ)) fprintf(stderr, "sqeq: t2=%g\n", res[n]); ++ if(res[n] >= min && res[n] <= max) ++ n++; ++ ++ /* return 2nd solution only if it's different enough */ ++ if(n==2 && fabs(res[0]-res[1])<0.000001) ++ n=1; ++ ++ return n; ++} ++ ++/* check that the curves don't cross quadrant boundary */ ++/* (float) */ ++ ++/* ++ Here we make sure that the curve does not continue past ++ horizontal or vertical extremums. The horizontal points are ++ explained, vertical points are by analogy. ++ ++ The horizontal points are where the derivative ++ dy/dx is equal to 0. But the Bezier curves are defined by ++ parametric formulas ++ x=fx(t) ++ y=fy(t) ++ so finding this derivative is complicated. ++ Also even if we find some point (x,y) splitting at this point ++ is far not obvious. Fortunately we can use dy/dt = 0 instead, ++ this gets to a rather simple square equation and splitting ++ at a known value of t is simple. ++ ++ The formulas are: ++ ++ y = A*(1-t)^3 + 3*B*(1-t)^2*t + 3*C*(1-t)*t^2 + D*t^3 ++ y = (-A+3*B-3*C+D)*t^3 + (3*A-6*B+3*C)*t^2 + (-3*A+3*B)*t + A ++ dy/dt = 3*(-A+3*B-3*C+D)*t^2 + 2*(3*A-6*B+3*C)*t + (-3*A+3*B) ++ */ ++ ++void ++ffixquadrants( ++ GLYPH *g ++) ++{ ++ GENTRY *ge, *nge; ++ int i, j, np, oldnp; ++ double sp[5]; /* split points, last one empty */ ++ char dir[5]; /* for debugging, direction by which split happened */ ++ double a, b, *pts; /* points of a curve */ ++ ++ for (ge = g->entries; ge != 0; ge = ge->next) { ++ if (ge->type != GE_CURVE) ++ continue; ++ ++ doagain: ++ np = 0; /* no split points yet */ ++ if(ISDBG(QUAD)) { ++ fprintf(stderr, "%s: trying 0x%x (%g %g) (%g %g) (%g %g) (%g %g)\n ", g->name, ++ ge, ge->prev->fx3, ge->prev->fy3, ge->fx1, ge->fy1, ge->fx2, ge->fy2, ++ ge->fx3, ge->fy3); ++ } ++ for(i=0; i<2; i++) { /* first for x then for y */ ++ /* find the cooridnates of control points */ ++ a = ge->prev->fpoints[i][2]; ++ pts = &ge->fpoints[i][0]; ++ ++ oldnp = np; ++ np += fsqequation( ++ 3.0*(-a + 3.0*pts[0] - 3.0*pts[1] + pts[2]), ++ 6.0*(a - 2.0*pts[0] + pts[1]), ++ 3.0*(-a + pts[0]), ++ &sp[np], ++ 0.0, 1.0); /* XXX range is [0;1] */ ++ ++ if(np == oldnp) ++ continue; ++ ++ if(ISDBG(QUAD)) ++ fprintf(stderr, "%s: 0x%x: %d pts(%c): ", ++ g->name, ge, np-oldnp, i? 'y':'x'); ++ ++ /* remove points that are too close to the ends ++ * because hor/vert ends are permitted, also ++ * if the split point is VERY close to the ends ++ * but not exactly then just flatten it and check again. ++ */ ++ for(j = oldnp; jfpoints[i][0] != ge->prev->fpoints[i][2]) { ++ ge->fpoints[i][0] = ge->prev->fpoints[i][2]; ++ if(ISDBG(QUAD)) fprintf(stderr, "flattened at front\n"); ++ goto doagain; ++ } ++ if( ge->fpoints[i][1] != ge->fpoints[i][0] ++ && fsign(ge->fpoints[i][2] - ge->fpoints[i][1]) ++ != fsign(ge->fpoints[i][1] - ge->fpoints[i][0]) ) { ++ ge->fpoints[i][1] = ge->fpoints[i][0]; ++ if(ISDBG(QUAD)) fprintf(stderr, "flattened zigzag at front\n"); ++ goto doagain; ++ } ++ sp[j] = sp[j+1]; np--; j--; ++ if(ISDBG(QUAD)) fprintf(stderr, "(front flat) "); ++ } else if(sp[j] > 0.97) { /* rear end of curve */ ++ if(ge->fpoints[i][1] != ge->fpoints[i][2]) { ++ ge->fpoints[i][1] = ge->fpoints[i][2]; ++ if(ISDBG(QUAD)) fprintf(stderr, "flattened at rear\n"); ++ goto doagain; ++ } ++ if( ge->fpoints[i][0] != ge->fpoints[i][1] ++ && fsign(ge->prev->fpoints[i][2] - ge->fpoints[i][0]) ++ != fsign(ge->fpoints[i][0] - ge->fpoints[i][1]) ) { ++ ge->fpoints[i][0] = ge->fpoints[i][1]; ++ if(ISDBG(QUAD)) fprintf(stderr, "flattened zigzag at rear\n"); ++ goto doagain; ++ } ++ sp[j] = sp[j+1]; np--; j--; ++ if(ISDBG(QUAD)) fprintf(stderr, "(rear flat) "); ++ } ++ } ++ if(ISDBG(QUAD)) fprintf(stderr, "\n"); ++ } ++ ++ if(np==0) /* no split points, leave it alone */ ++ continue; ++ ++ if(ISDBG(QUAD)) { ++ fprintf(stderr, "%s: splitting 0x%x (%g %g) (%g %g) (%g %g) (%g %g) at %d points\n ", g->name, ++ ge, ge->prev->fx3, ge->prev->fy3, ge->fx1, ge->fy1, ge->fx2, ge->fy2, ++ ge->fx3, ge->fy3, np); ++ for(i=0; i sp[j]) { ++ a = sp[i]; sp[i] = sp[j]; sp[j] = a; ++ } ++ ++ /* now finally do the split on each point */ ++ for(j=0; jfpoints[i][0]; /* get the middle points */ ++ b = ge->fpoints[i][1]; ++ ++ /* calculate new internal points */ ++ c = SPLIT(a, b); ++ ++ ge->fpoints[i][0] = SPLIT(ge->prev->fpoints[i][2], a); ++ ge->fpoints[i][1] = SPLIT(ge->fpoints[i][0], c); ++ ++ nge->fpoints[i][1] = SPLIT(b, nge->fpoints[i][2]); ++ nge->fpoints[i][0] = SPLIT(c, nge->fpoints[i][1]); ++ ++ ge->fpoints[i][2] = SPLIT(ge->fpoints[i][1], ++ + nge->fpoints[i][0]); ++ } ++#undef SPLIT ++ ++ addgeafter(ge, nge); ++ ++ /* go to the next part, adjust remaining points */ ++ ge = nge; ++ for(i=j+1; itype != GE_CURVE) ++ return 0; ++ ++ a = ge->iy2 - ge->iy1; ++ b = ge->ix2 - ge->ix1; ++ if(a == 0) { ++ if(b == 0) { ++ return 0; ++ } else ++ k = FBIGVAL; ++ } else ++ k = fabs((double) b / (double) a); ++ ++ a = ge->iy1 - ge->prev->iy3; ++ b = ge->ix1 - ge->prev->ix3; ++ if(a == 0) { ++ if(b == 0) { ++ return 0; ++ } else ++ k1 = FBIGVAL; ++ } else ++ k1 = fabs((double) b / (double) a); ++ ++ a = ge->iy3 - ge->iy2; ++ b = ge->ix3 - ge->ix2; ++ if(a == 0) { ++ if(b == 0) { ++ return 0; ++ } else ++ k2 = FBIGVAL; ++ } else ++ k2 = fabs((double) b / (double) a); ++ ++ /* if the curve is not a zigzag */ ++ if ((k1+0.0001 >= k && k2 <= k+0.0001) || (k1 <= k+0.0001 && k2+0.0001 >= k)) ++ return 0; ++ else ++ return 1; ++} ++ ++/* check if a curve is a zigzag - floating */ ++ ++static int ++fiszigzag( ++ GENTRY *ge ++) ++{ ++ double k, k1, k2; ++ double a, b; ++ ++ if (ge->type != GE_CURVE) ++ return 0; ++ ++ a = fabs(ge->fy2 - ge->fy1); ++ b = fabs(ge->fx2 - ge->fx1); ++ if(a < FEPS) { ++ if(b < FEPS) { ++ return 0; ++ } else ++ k = FBIGVAL; ++ } else ++ k = b / a; ++ ++ a = fabs(ge->fy1 - ge->prev->fy3); ++ b = fabs(ge->fx1 - ge->prev->fx3); ++ if(a < FEPS) { ++ if(b < FEPS) { ++ return 0; ++ } else ++ k1 = FBIGVAL; ++ } else ++ k1 = b / a; ++ ++ a = fabs(ge->fy3 - ge->fy2); ++ b = fabs(ge->fx3 - ge->fx2); ++ if(a < FEPS) { ++ if(b < FEPS) { ++ return 0; ++ } else ++ k2 = FBIGVAL; ++ } else ++ k2 = b / a; ++ ++ /* if the curve is not a zigzag */ ++ if ((k1+0.0001 >= k && k2 <= k+0.0001) || (k1 <= k+0.0001 && k2+0.0001 >= k)) ++ return 0; ++ else ++ return 1; ++} ++ ++/* split the zigzag-like curves into two parts */ ++ ++void ++fsplitzigzags( ++ GLYPH * g ++) ++{ ++ GENTRY *ge, *nge; ++ double a, b, c, d; ++ ++ assertisfloat(g, "splitting zigzags"); ++ for (ge = g->entries; ge != 0; ge = ge->next) { ++ if (ge->type != GE_CURVE) ++ continue; ++ ++ /* if the curve is not a zigzag */ ++ if ( !fiszigzag(ge) ) { ++ continue; ++ } ++ ++ if(ISDBG(FCONCISE)) { ++ double maxsc1, maxsc2; ++ fprintf(stderr, "split a zigzag "); ++ fnormalizege(ge); ++ if( fcrossraysge(ge, ge, &maxsc1, &maxsc2, NULL) ) { ++ fprintf(stderr, "sc1=%g sc2=%g\n", maxsc1, maxsc2); ++ } else { ++ fprintf(stderr, "(rays don't cross)\n"); ++ } ++ } ++ /* split the curve by t=0.5 */ ++ nge = newgentry(GEF_FLOAT); ++ (*nge) = (*ge); ++ nge->type = GE_CURVE; ++ ++ a = ge->prev->fx3; ++ b = ge->fx1; ++ c = ge->fx2; ++ d = ge->fx3; ++ nge->fx3 = d; ++ nge->fx2 = (c + d) / 2.; ++ nge->fx1 = (b + 2. * c + d) / 4.; ++ ge->fx3 = (a + b * 3. + c * 3. + d) / 8.; ++ ge->fx2 = (a + 2. * b + c) / 4.; ++ ge->fx1 = (a + b) / 2.; ++ ++ a = ge->prev->fy3; ++ b = ge->fy1; ++ c = ge->fy2; ++ d = ge->fy3; ++ nge->fy3 = d; ++ nge->fy2 = (c + d) / 2.; ++ nge->fy1 = (b + 2. * c + d) / 4.; ++ ge->fy3 = (a + b * 3. + c * 3. + d) / 8.; ++ ge->fy2 = (a + 2. * b + c) / 4.; ++ ge->fy1 = (a + b) / 2.; ++ ++ addgeafter(ge, nge); ++ ++ if(ISDBG(FCONCISE)) { ++ dumppaths(g, ge, nge); ++ } ++ } ++} ++ ++/* free this GENTRY, returns what was ge->next ++ * (ge must be of type GE_LINE or GE_CURVE) ++ * works on both float and int entries ++ */ ++ ++static GENTRY * ++freethisge( ++ GENTRY *ge ++) ++{ ++ GENTRY *xge; ++ ++ if (ge->bkwd != ge->prev) { ++ /* at beginning of the contour */ ++ ++ xge = ge->bkwd; ++ if(xge == ge) { /* was the only line in contour */ ++ /* remove the contour completely */ ++ /* prev is GE_MOVE, next is GE_PATH, remove them all */ ++ ++ /* may be the first contour, then ->bkwd points to ge->entries */ ++ if(ge->prev->prev == 0) ++ *(GENTRY **)(ge->prev->bkwd) = ge->next->next; ++ else ++ ge->prev->prev->next = ge->next->next; ++ ++ if(ge->next->next) { ++ ge->next->next->prev = ge->prev->prev; ++ ge->next->next->bkwd = ge->prev->bkwd; ++ } ++ ++ xge = ge->next->next; ++ free(ge->prev); free(ge->next); free(ge); ++ return xge; ++ } ++ ++ /* move the start point of the contour */ ++ if(ge->flags & GEF_FLOAT) { ++ ge->prev->fx3 = xge->fx3; ++ ge->prev->fy3 = xge->fy3; ++ } else { ++ ge->prev->ix3 = xge->ix3; ++ ge->prev->iy3 = xge->iy3; ++ } ++ } else if(ge->frwd != ge->next) { ++ /* at end of the contour */ ++ ++ xge = ge->frwd->prev; ++ /* move the start point of the contour */ ++ if(ge->flags & GEF_FLOAT) { ++ xge->fx3 = ge->bkwd->fx3; ++ xge->fy3 = ge->bkwd->fy3; ++ } else { ++ xge->ix3 = ge->bkwd->ix3; ++ xge->iy3 = ge->bkwd->iy3; ++ } ++ } ++ ++ ge->prev->next = ge->next; ++ ge->next->prev = ge->prev; ++ ge->bkwd->frwd = ge->frwd; ++ ge->frwd->bkwd = ge->bkwd; ++ ++ xge = ge->next; ++ free(ge); ++ return xge; ++} ++ ++/* inserts a new gentry (LINE or CURVE) after another (MOVE ++ * or LINE or CURVE) ++ * corrects the first GE_MOVE if neccessary ++ */ ++ ++static void ++addgeafter( ++ GENTRY *oge, /* after this */ ++ GENTRY *nge /* insert this */ ++) ++{ ++ if(oge->type == GE_MOVE) { ++ /* insert before next */ ++ if(oge->next->type == GE_PATH) { ++ /* first and only GENTRY in path */ ++ nge->frwd = nge->bkwd = nge; ++ } else { ++ nge->frwd = oge->next; ++ nge->bkwd = oge->next->bkwd; ++ oge->next->bkwd->frwd = nge; ++ oge->next->bkwd = nge; ++ } ++ } else { ++ nge->frwd = oge->frwd; ++ nge->bkwd = oge; ++ oge->frwd->bkwd = nge; ++ oge->frwd = nge; ++ } ++ ++ nge->next = oge->next; ++ nge->prev = oge; ++ oge->next->prev = nge; ++ oge->next = nge; ++ ++ if(nge->frwd->prev->type == GE_MOVE) { ++ /* fix up the GE_MOVE entry */ ++ if(nge->flags & GEF_FLOAT) { ++ nge->frwd->prev->fx3 = nge->fx3; ++ nge->frwd->prev->fy3 = nge->fy3; ++ } else { ++ nge->frwd->prev->ix3 = nge->ix3; ++ nge->frwd->prev->iy3 = nge->iy3; ++ } ++ } ++} ++ ++/* ++ * Check if this GENTRY happens to be at the end of path ++ * and fix the first MOVETO accordingly ++ * handles both int and float ++ */ ++ ++static void ++fixendpath( ++ GENTRY *ge ++) ++{ ++ GENTRY *mge; ++ ++ mge = ge->frwd->prev; ++ if(mge->type == GE_MOVE) { ++ if(ge->flags & GEF_FLOAT) { ++ mge->fx3 = ge->fx3; ++ mge->fy3 = ge->fy3; ++ } else { ++ mge->ix3 = ge->ix3; ++ mge->iy3 = ge->iy3; ++ } ++ } ++} ++ ++/* ++ * This function adjusts the rest of path (the part from...to is NOT changed) ++ * to cover the specified gap by the specified axis (0 - X, 1 - Y). ++ * Gap is counted in direction (end_of_to - beginning_of_from). ++ * Returns by how much the gap was not closed (0.0 if it was fully closed). ++ * Ret contains by how much the first and last points of [from...to] ++ * were moved to bring them in consistence to the rest of the path. ++ * If ret==NULL then this info is not returned. ++ */ ++ ++static double ++fclosegap( ++ GENTRY *from, ++ GENTRY *to, ++ int axis, ++ double gap, ++ double *ret ++) ++{ ++#define TIMESLARGER 10. /* how many times larger must be a curve to not change too much */ ++ double rm[2]; ++ double oldpos[2]; ++ double times, limit, df, dx; ++ int j, k; ++ GENTRY *xge, *pge, *nge, *bge[2]; ++ ++ /* remember the old points to calculate ret */ ++ oldpos[0] = from->prev->fpoints[axis][2]; ++ oldpos[1] = to->fpoints[axis][2]; ++ ++ rm[0] = rm[1] = gap / 2. ; ++ ++ bge[0] = from; /* this is convenient for iterations */ ++ bge[1] = to; ++ ++ /* first try to modify large curves but if have none then settle for small */ ++ for(times = (TIMESLARGER-1); times > 0.1; times /= 2. ) { ++ ++ if(rm[0]+rm[1] == 0.) ++ break; ++ ++ /* iterate in both directions, backwards then forwards */ ++ for(j = 0; j<2; j++) { ++ ++ if(rm[j] == 0.) /* if this direction is exhausted */ ++ continue; ++ ++ limit = fabs(rm[j]) * (1.+times); ++ ++ for(xge = bge[j]->cntr[j]; xge != bge[!j]; xge = xge->cntr[j]) { ++ dx = xge->fpoints[axis][2] - xge->prev->fpoints[axis][2]; ++ df = fabs(dx) - limit; ++ if( df <= FEPS ) /* curve is too small to change */ ++ continue; ++ ++ if( df >= fabs(rm[j]) ) ++ df = rm[j]; ++ else ++ df *= fsign(rm[j]); /* we may cover this part of rm */ ++ ++ rm[j] -= df; ++ limit = fabs(rm[j]) * (1.+times); ++ ++ if(xge->type == GE_CURVE) { /* correct internal points */ ++ double scale = ((dx+df) / dx) - 1.; ++ double base; ++ ++ if(j) ++ base = xge->fpoints[axis][2]; ++ else ++ base = xge->prev->fpoints[axis][2]; ++ ++ for(k = 0; k<2; k++) ++ xge->fpoints[axis][k] += scale * ++ (xge->fpoints[axis][k] - base); ++ } ++ ++ /* move all the intermediate lines */ ++ if(j) { ++ df = -df; /* absolute direction */ ++ pge = bge[1]->bkwd; ++ nge = xge->bkwd; ++ } else { ++ xge->fpoints[axis][2] += df; ++ pge = bge[0]; ++ nge = xge->frwd; ++ } ++ while(nge != pge) { ++ if(nge->type == GE_CURVE) { ++ nge->fpoints[axis][0] +=df; ++ nge->fpoints[axis][1] +=df; ++ } ++ nge->fpoints[axis][2] += df; ++ if(nge->next != nge->frwd) { /* last entry of contour */ ++ nge->frwd->prev->fpoints[axis][2] += df; ++ } ++ nge = nge->cntr[!j]; ++ } ++ ++ if(rm[j] == 0.) ++ break; ++ } ++ } ++ } ++ ++ /* find the difference */ ++ oldpos[0] -= from->prev->fpoints[axis][2]; ++ oldpos[1] -= to->fpoints[axis][2]; ++ ++ if(ret) { ++ ret[0] = oldpos[0] - from->prev->fpoints[axis][2]; ++ ret[1] = oldpos[1] - to->fpoints[axis][2]; ++ } ++ ++#if 0 ++ if( rm[0]+rm[1] != gap - oldpos[1] + oldpos[0]) { ++ fprintf(stderr, "** gap=%g rm[0]=%g rm[1]=%g o[0]=%g o[1]=%g rg=%g og=%g\n", ++ gap, rm[0], rm[1], oldpos[0], oldpos[1], rm[0]+rm[1], ++ gap - oldpos[1] + oldpos[0]); ++ } ++#endif ++ ++ return rm[0]+rm[1]; ++#undef TIMESLARGER ++} ++ ++/* remove the lines or curves smaller or equal to the size limit */ ++ ++static void ++fdelsmall( ++ GLYPH *g, ++ double minlen ++) ++{ ++ GENTRY *ge, *nge, *pge, *xge, *next; ++ int i, k; ++ double dx, dy, d2, d2m; ++ double minlen2; ++#define TIMESLARGER 10. /* how much larger must be a curve to not change too much */ ++ ++ minlen2 = minlen*minlen; ++ ++ for (ge = g->entries; ge != 0; ge = next) { ++ next = ge->next; ++ ++ if (ge->type != GE_CURVE && ge->type != GE_LINE) ++ continue; ++ ++ d2m = 0; ++ for(i= (ge->type==GE_CURVE? 0: 2); i<3; i++) { ++ dx = ge->fxn[i] - ge->prev->fx3; ++ dy = ge->fyn[i] - ge->prev->fy3; ++ d2 = dx*dx + dy*dy; ++ if(d2m < d2) ++ d2m = d2; ++ } ++ ++ if( d2m > minlen2 ) { /* line is not too small */ ++ /* XXX add more normalization here */ ++ continue; ++ } ++ ++ /* if the line is too small */ ++ ++ /* check forwards if we have a whole sequence of them */ ++ nge = ge; ++ for(xge = ge->frwd; xge != ge; xge = xge->frwd) { ++ d2m = 0; ++ for(i= (xge->type==GE_CURVE? 0: 2); i<3; i++) { ++ dx = xge->fxn[i] - xge->prev->fx3; ++ dy = xge->fyn[i] - xge->prev->fy3; ++ d2 = dx*dx + dy*dy; ++ if(d2m < d2) ++ d2m = d2; ++ } ++ if( d2m > minlen2 ) /* line is not too small */ ++ break; ++ nge = xge; ++ if(next == nge) /* move the next step past this sequence */ ++ next = next->next; ++ } ++ ++ /* check backwards if we have a whole sequence of them */ ++ pge = ge; ++ for(xge = ge->bkwd; xge != ge; xge = xge->bkwd) { ++ d2m = 0; ++ for(i= (xge->type==GE_CURVE? 0: 2); i<3; i++) { ++ dx = xge->fxn[i] - xge->prev->fx3; ++ dy = xge->fyn[i] - xge->prev->fy3; ++ d2 = dx*dx + dy*dy; ++ if(d2m < d2) ++ d2m = d2; ++ } ++ if( d2m > minlen2 ) /* line is not too small */ ++ break; ++ pge = xge; ++ } ++ ++ /* now we have a sequence of small fragments in pge...nge (inclusive) */ ++ ++ if(ISDBG(FCONCISE)) { ++ fprintf(stderr, "glyph %s has very small fragments(%x..%x..%x)\n", ++ g->name, pge, ge, nge); ++ dumppaths(g, pge, nge); ++ } ++ ++ /* reduce whole sequence to one part and remember the middle point */ ++ if(pge != nge) { ++ while(1) { ++ xge = pge->frwd; ++ if(xge == nge) { ++ pge->fx1 = pge->fx2 = pge->fx3; ++ pge->fx3 = nge->fx3; ++ pge->fy1 = pge->fy2 = pge->fy3; ++ pge->fy3 = nge->fy3; ++ pge->type = GE_CURVE; ++ freethisge(nge); ++ break; ++ } ++ if(xge == nge->bkwd) { ++ pge->fx1 = pge->fx2 = (pge->fx3+xge->fx3)/2.; ++ pge->fx3 = nge->fx3; ++ pge->fy1 = pge->fy2 = (pge->fy3+xge->fy3)/2.; ++ pge->fy3 = nge->fy3; ++ pge->type = GE_CURVE; ++ freethisge(nge); ++ freethisge(xge); ++ break; ++ } ++ freethisge(pge); pge = xge; ++ xge = nge->bkwd; freethisge(nge); nge = xge; ++ } ++ } ++ ge = pge; ++ ++ /* check if the whole sequence is small */ ++ dx = ge->fx3 - ge->prev->fx3; ++ dy = ge->fy3 - ge->prev->fy3; ++ d2 = dx*dx + dy*dy; ++ ++ if( d2 > minlen2 ) { /* no, it is not */ ++ double b, d; ++ ++ WARNING_3 fprintf(stderr, "glyph %s had a sequence of fragments < %g points each, reduced to one curve\n", ++ g->name, minlen); ++ ++ /* check that we did not create a monstrosity spanning quadrants */ ++ if(fsign(ge->fx1 - ge->prev->fx1) * fsign(ge->fx3 - ge->fx1) < 0 ++ || fsign(ge->fy1 - ge->prev->fy1) * fsign(ge->fy3 - ge->fy1) < 0 ) { ++ /* yes, we did; are both parts of this thing big enough ? */ ++ dx = ge->fx1 - ge->prev->fx3; ++ dy = ge->fy1 - ge->prev->fy3; ++ d2 = dx*dx + dy*dy; ++ ++ dx = ge->fx3 - ge->fx1; ++ dy = ge->fy3 - ge->fy1; ++ d2m = dx*dx + dy*dy; ++ ++ if(d2 > minlen2 && d2m > minlen2) { /* make two straights */ ++ nge = newgentry(GEF_FLOAT); ++ *nge = *ge; ++ ++ for(i=0; i<2; i++) { ++ ge->fpoints[i][2] = ge->fpoints[i][0]; ++ b = nge->fpoints[i][0]; ++ d = nge->fpoints[i][2] - b; ++ nge->fpoints[i][0] = b + 0.1*d; ++ nge->fpoints[i][1] = b + 0.9*d; ++ } ++ } ++ for(i=0; i<2; i++) { /* make one straight or first of two straights */ ++ b = ge->prev->fpoints[i][2]; ++ d = ge->fpoints[i][2] - b; ++ ge->fpoints[i][0] = b + 0.1*d; ++ ge->fpoints[i][1] = b + 0.9*d; ++ } ++ } ++ continue; ++ } ++ ++ if(ge->frwd == ge) { /* points to itself, just remove the path completely */ ++ WARNING_3 fprintf(stderr, "glyph %s had a path made of fragments < %g points each, removed\n", ++ g->name, minlen); ++ ++ next = freethisge(ge); ++ continue; ++ } ++ ++ /* now close the gap by x and y */ ++ for(i=0; i<2; i++) { ++ double gap; ++ ++ gap = ge->fpoints[i][2] - ge->prev->fpoints[i][2]; ++ if( fclosegap(ge, ge, i, gap, NULL) != 0.0 ) { ++ double scale, base; ++ ++ /* not good, as the last resort just scale the next line */ ++ gap = ge->fpoints[i][2] - ge->prev->fpoints[i][2]; ++ ++ if(ISDBG(FCONCISE)) ++ fprintf(stderr, " last resort on %c: closing next by %g\n", ++ (i==0 ? 'x' : 'y'), gap); ++ ++ nge = ge->frwd; ++ base = nge->fpoints[i][2]; ++ dx = ge->fpoints[i][2] - base; ++ if(fabs(dx) < FEPS) ++ continue; ++ ++ scale = ((dx-gap) / dx); ++ ++ if(nge->type == GE_CURVE) ++ for(k = 0; k<2; k++) ++ nge->fpoints[i][k] = base + ++ scale * (nge->fpoints[i][k] - base); ++ ++ ge->fpoints[i][2] -= gap; ++ } ++ } ++ ++ /* OK, the gap is closed - remove this useless GENTRY */ ++ freethisge(ge); ++ } ++#undef TIMESLARGER ++} ++ ++/* find the point where two rays continuing vectors cross ++ * returns 1 if they cross, 0 if they don't ++ * If they cross optionally (if the pointers are not NULL) returns ++ * the maximal scales for both vectors and also optionally the point ++ * where the rays cross (twice). ++ * Expects that the curves are normalized. ++ * ++ * For convenience there are 2 front-end functions taking ++ * arguments in different formats ++ */ ++ ++struct ray { ++ double x1, y1, x2, y2; ++ int isvert; ++ double k, b; /* lines are represented as y = k*x + b */ ++ double *maxp; ++}; ++static struct ray ray[3]; ++ ++/* the back-end doing the actual work ++ * the rays are defined in the static array ray[] ++ */ ++ ++static int ++fcrossraysxx( ++ double crossdot[2][2] ++) ++{ ++ double x, y, max; ++ int i; ++ ++ for(i=0; i<2; i++) { ++ if(ray[i].x1 == ray[i].x2) ++ ray[i].isvert = 1; ++ else { ++ ray[i].isvert = 0; ++ ray[i].k = (ray[i].y2 - ray[i].y1) / (ray[i].x2 - ray[i].x1); ++ ray[i].b = ray[i].y2 - ray[i].k * ray[i].x2; ++ } ++ } ++ ++ if(ray[0].isvert && ray[1].isvert) { ++ if(ISDBG(FCONCISE)) fprintf(stderr, "crossrays: both vertical\n"); ++ return 0; /* both vertical, don't cross */ ++ } ++ ++ if(ray[1].isvert) { ++ ray[2] = ray[0]; /* exchange them */ ++ ray[0] = ray[1]; ++ ray[1] = ray[2]; ++ } ++ ++ if(ray[0].isvert) { ++ x = ray[0].x1; ++ } else { ++ if( fabs(ray[0].k - ray[1].k) < FEPS) { ++ if(ISDBG(FCONCISE)) fprintf(stderr, "crossrays: parallel lines, k = %g, %g\n", ++ ray[0].k, ray[1].k); ++ return 0; /* parallel lines */ ++ } ++ x = (ray[1].b - ray[0].b) / (ray[0].k - ray[1].k) ; ++ } ++ y = ray[1].k * x + ray[1].b; ++ ++ for(i=0; i<2; i++) { ++ if(ray[i].isvert) ++ max = (y - ray[i].y1) / (ray[i].y2 - ray[i].y1); ++ else ++ max = (x - ray[i].x1) / (ray[i].x2 - ray[i].x1); ++ /* check if wrong sides of rays cross */ ++ if( max < 0 ) { ++ if(ISDBG(FCONCISE)) fprintf(stderr, "crossrays: %c scale=%g @(%g,%g) (%g,%g)<-(%g,%g)\n", ++ (i?'Y':'X'), max, x, y, ray[i].x2, ray[i].y2, ray[i].x1, ray[i].y1); ++ return 0; ++ } ++ if(ray[i].maxp) ++ *ray[i].maxp = max; ++ } ++ if(crossdot != 0) { ++ crossdot[0][0] = crossdot[1][0] = x; ++ crossdot[0][1] = crossdot[1][1] = y; ++ } ++ return 1; ++} ++ ++/* the front-end getting the arguments from 4 dots defining ++ * a curve in the same format as for fapproxcurve(): ++ * rays are defined as beginning and end of the curve, ++ * the crossdot is inserted as the two middle dots of the curve ++ */ ++ ++int ++fcrossrayscv( ++ double curve[4][2 /*X,Y*/], ++ double *max1, ++ double *max2 ++) ++{ ++ ray[0].x1 = curve[0][X]; ++ ray[0].y1 = curve[0][Y]; ++ ray[0].x2 = curve[1][X]; ++ ray[0].y2 = curve[1][Y]; ++ ray[0].maxp = max1; ++ ++ ray[1].x1 = curve[2][X]; ++ ray[1].y1 = curve[2][Y]; ++ ray[1].x2 = curve[3][X]; ++ ray[1].y2 = curve[3][Y]; ++ ray[1].maxp = max2; ++ ++ return fcrossraysxx(&curve[1]); ++} ++ ++/* the front-end getting the arguments from gentries: ++ * rays are defined as beginning of curve1 and end of curve 2 ++ */ ++ ++int ++fcrossraysge( ++ GENTRY *ge1, ++ GENTRY *ge2, ++ double *max1, ++ double *max2, ++ double crossdot[2][2] ++) ++{ ++ ray[0].x1 = ge1->prev->fx3; ++ ray[0].y1 = ge1->prev->fy3; ++ ray[0].x2 = ge1->fpoints[X][ge1->ftg]; ++ ray[0].y2 = ge1->fpoints[Y][ge1->ftg]; ++ ray[0].maxp = max1; ++ ++ ray[1].x1 = ge2->fx3; ++ ray[1].y1 = ge2->fy3; ++ if(ge2->rtg < 0) { ++ ray[1].x2 = ge2->prev->fx3; ++ ray[1].y2 = ge2->prev->fy3; ++ } else { ++ ray[1].x2 = ge2->fpoints[X][ge2->rtg]; ++ ray[1].y2 = ge2->fpoints[Y][ge2->rtg]; ++ } ++ ray[1].maxp = max2; ++ ++ return fcrossraysxx(crossdot); ++} ++ ++/* debugging printout functions */ ++ ++#if defined(DEBUG_DOTSEG) || defined(DEBUG_DOTCURVE) || defined(DEBUG_APPROXCV) ++ ++/* for debugging */ ++static ++printdot( ++ double dot[2] ++) ++{ ++ fprintf(stderr, "(%g,%g)", dot[0], dot[1]); ++} ++ ++static ++printseg( ++ double seg[2][2] ++) ++{ ++ putc('[', stderr); ++ printdot(seg[0]); ++ putc(' ', stderr); ++ printdot(seg[1]); ++ putc(']', stderr); ++} ++ ++#endif /* DEBUG_* */ ++ ++/* ++ * Find squared distance from a dot to a line segment ++ */ ++ ++double ++fdotsegdist2( ++ double seg[2][2 /*X,Y*/], ++ double dot[2 /*X,Y*/] ++) ++{ ++#define x1 seg[0][X] ++#define y1 seg[0][Y] ++#define x2 seg[1][X] ++#define y2 seg[1][Y] ++#define xdot dot[X] ++#define ydot dot[Y] ++ ++ double dx, dy; /* segment dimensions */ ++ double kline, bline; /* segment line formula is y=k*x+b */ ++ double kperp, bperp; /* perpendicular from the dot to the line */ ++ double xcross, ycross; /* where the perpendicular crosses the segment */ ++ ++/* handle the situation where the nearest point of the segment is its end */ ++#define HANDLE_LIMITS(less12, lesscr1, lesscr2) \ ++ if( less12 ) { \ ++ if( lesscr1 ) { \ ++ xcross = x1; \ ++ ycross = y1; \ ++ } else if( !(lesscr2) ) { \ ++ xcross = x2; \ ++ ycross = y2; \ ++ } \ ++ } else { \ ++ if( !(lesscr1) ) { \ ++ xcross = x1; \ ++ ycross = y1; \ ++ } else if( lesscr2 ) { \ ++ xcross = x2; \ ++ ycross = y2; \ ++ } \ ++ } \ ++ /* end of macro */ ++ ++ ++ dx = x2 - x1; ++ dy = y2 - y1; ++ ++ if(fabs(dx) < FEPS) { ++ /* special case - vertical line */ ++#ifdef DEBUG_DOTSEG ++ printf("vertical line!\n"); ++#endif ++ xcross = x1; ++ ycross = ydot; ++ HANDLE_LIMITS( y1 < y2, ycross < y1, ycross < y2); ++ } else if(fabs(dy) < FEPS) { ++ /* special case - horizontal line */ ++#ifdef DEBUG_DOTSEG ++ printf("horizontal line!\n"); ++#endif ++ xcross = xdot; ++ ycross = y1; ++ HANDLE_LIMITS( x1 < x2, xcross < x1, xcross < x2) ++ } else { ++ kline = dy/dx; ++ bline = y1 - x1*kline; ++ kperp = -1./kline; ++ bperp = ydot - xdot*kperp; ++ ++ xcross = (bline-bperp) / (kperp-kline); ++ ycross = kline*xcross + bline; ++ ++ HANDLE_LIMITS( x1 < x2, xcross < x1, xcross < x2) ++ } ++#ifdef DEBUG_DOTSEG ++ printf("crossover at (%g,%g)\n", xcross, ycross); ++#endif ++ ++ dx = xdot-xcross; ++ dy = ydot-ycross; ++ return dx*dx+dy*dy; ++#undef x1 ++#undef y1 ++#undef x2 ++#undef y2 ++#undef xdot ++#undef ydot ++#undef HANDLE_LIMITS ++} ++ ++/* find the weighted quadratic average for the distance of a set ++ * of dots from the curve; also fills out the individual distances ++ * for each dot; if maxp!=NULL then returns the maximal squared ++ * distance in there ++ */ ++ ++double ++fdotcurvdist2( ++ double curve[4][2 /*X,Y*/ ], ++ struct dot_dist *dots, ++ int ndots, /* number of entries in dots */ ++ double *maxp ++) ++{ ++ /* a curve is approximated by this many straight segments */ ++#define NAPSECT 16 ++ /* a curve is divided into this many sections with equal weight each */ ++#define NWSECT 4 ++ /* table of coefficients for finding the dots on the curve */ ++ /* tt[0] is left unused */ ++ static double tt[NAPSECT][4]; ++ static int havett = 0; /* flag: tt is initialized */ ++ /* dots on the curve */ ++ double cvd[NAPSECT+1][2 /*X,Y*/]; ++ /* sums by sections */ ++ double sum[NWSECT]; ++ /* counts by sections */ ++ double count[NWSECT]; ++ int d, i, j; ++ int id1, id2; ++ double dist1, dist2, dist3, dx, dy, x, y; ++ double max = 0.; ++ ++ if(!havett) { ++ double t, nt, t2, nt2, step; ++ ++ havett++; ++ step = 1. / NAPSECT; ++ t = 0; ++ for(i=1; iid1+1; i--) { ++ dx = x - cvd[i][X]; ++ dy = y - cvd[i][Y]; ++ dist3 = dx*dx + dy*dy; ++#ifdef DEBUG_DOTCURVE ++ printf(" dot %d ",i); printdot(cvd[i]); printf(" dist=%g\n", sqrt(dist3)); ++#endif ++ if(dist3 < dist2) { ++ dist2 = dist3; ++ id2 = i; ++ } else ++ break; ++ } ++ ++ /* now find which of the local minimums is smaller */ ++ if(dist2 < dist1) { ++ id1 = id2; ++ } ++ } ++ ++ /* the nearest segment must include the nearest dot */ ++ if(id1==0) { ++ dots[d].seg = 0; ++ dots[d].dist2 = fdotsegdist2(&cvd[0], dots[d].p); ++ } else if(id1==NAPSECT) { ++ dots[d].seg = NAPSECT-1; ++ dots[d].dist2 = fdotsegdist2(&cvd[NAPSECT-1], dots[d].p); ++ } else { ++ dist1 = fdotsegdist2(&cvd[id1], dots[d].p); ++ dist2 = fdotsegdist2(&cvd[id1-1], dots[d].p); ++ if(dist2 < dist1) { ++ dots[d].seg = id1-1; ++ dots[d].dist2 = dist2; ++ } else { ++ dots[d].seg = id1; ++ dots[d].dist2 = dist1; ++ } ++ } ++ ++ i = dots[d].seg % NWSECT; ++ sum[i] += dots[d].dist2; ++ if(dots[d].dist2 > max) ++ max = dots[d].dist2; ++ count[i]++; ++#ifdef DEBUG_DOTCURVE ++ printf(" best seg %d sect %d dist=%g\n", dots[d].seg, i, sqrt(dots[d].dist2)); ++#endif ++ } ++ ++ /* calculate the weighted average */ ++ id1=0; ++ dist1=0.; ++ for(i=0; irtg < 0) { ++ d[1][X] = ge1->fx3 - ge1->prev->fx3; ++ d[1][Y] = ge1->fy3 - ge1->prev->fy3; ++ } else { ++ d[1][X] = ge1->fx3 - ge1->fpoints[X][ge1->rtg]; ++ d[1][Y] = ge1->fy3 - ge1->fpoints[Y][ge1->rtg]; ++ } ++ d[2][X] = ge2->fpoints[X][ge2->ftg] - ge2->prev->fx3; ++ d[2][Y] = ge2->fpoints[Y][ge2->ftg] - ge2->prev->fy3; ++ ++ len1 = sqrt( d[1][X]*d[1][X] + d[1][Y]*d[1][Y] ); ++ len2 = sqrt( d[2][X]*d[2][X] + d[2][Y]*d[2][Y] ); ++ /* scale the 2nd segment to the length of 1 ++ * and to make sure that the 1st segment is longer scale it to ++ * the length of 2 and extend to the same distance backwards ++ */ ++ scale1 = 2./len1; ++ scale2 = 1./len2; ++ ++ for(axis=0; axis <2; axis++) { ++ d[0][axis] = -( d[1][axis] *= scale1 ); ++ d[2][axis] *= scale2; ++ } ++ return fdotsegdist2(d, d[2]); ++} ++ ++#if 0 ++/* find the area covered by the curve ++ * (limited by the projections to the X axis) ++ */ ++ ++static double ++fcvarea( ++ GENTRY *ge ++) ++{ ++ double Ly, My, Ny, Py, Qx, Rx, Sx; ++ double area; ++ ++ /* y = Ly*t^3 + My*t^2 + Ny*t + Py */ ++ Ly = -ge->prev->fy3 + 3*(ge->fy1 - ge->fy2) + ge->fy3; ++ My = 3*ge->prev->fy3 - 6*ge->fy1 + 3*ge->fy2; ++ Ny = 3*(-ge->prev->fy3 + ge->fy1); ++ Py = ge->prev->fy3; ++ ++ /* dx/dt = Qx*t^2 + Rx*t + Sx */ ++ Qx = 3*(-ge->prev->fx3 + 3*(ge->fx1 - ge->fx2) + ge->fx3); ++ Rx = 6*(ge->prev->fx3 - 2*ge->fx1 + ge->fx2); ++ Sx = 3*(-ge->prev->fx3 + ge->fx1); ++ ++ /* area is integral[from 0 to 1]( y(t) * dx(t)/dt *dt) */ ++ area = 1./6.*(Ly*Qx) + 1./5.*(Ly*Rx + My*Qx) ++ + 1./4.*(Ly*Sx + My*Rx + Ny*Qx) + 1./3.*(My*Sx + Ny*Rx + Py*Qx) ++ + 1./2.*(Ny*Sx + Py*Rx) + Py*Sx; ++ ++ return area; ++} ++#endif ++ ++/* find the value of point on the curve at the given parameter t, ++ * along the given axis (0 - X, 1 - Y). ++ */ ++ ++static double ++fcvval( ++ GENTRY *ge, ++ int axis, ++ double t ++) ++{ ++ double t2, mt, mt2; ++ ++ /* val = A*(1-t)^3 + 3*B*(1-t)^2*t + 3*C*(1-t)*t^2 + D*t^3 */ ++ t2 = t*t; ++ mt = 1-t; ++ mt2 = mt*mt; ++ ++ return ge->prev->fpoints[axis][2]*mt2*mt ++ + 3*(ge->fpoints[axis][0]*mt2*t + ge->fpoints[axis][1]*mt*t2) ++ + ge->fpoints[axis][2]*t*t2; ++} ++ ++/* ++ * Find ndots equally spaced dots on a curve or line and fill ++ * their coordinates into the dots array ++ */ ++ ++static void ++fsampledots( ++ GENTRY *ge, ++ double dots[][2], /* the dots to fill */ ++ int ndots ++) ++{ ++ int i, axis; ++ double t, nf, dx, d[2]; ++ ++ nf = ndots+1; ++ if(ge->type == GE_CURVE) { ++ for(i=0; ifx3 - ge->prev->fx3; ++ d[1] = ge->fy3 - ge->prev->fy3; ++ for(i=0; iprev->fpoints[axis][2] ++ + t*d[axis]; ++ } ++ } ++} ++ ++/* ++ * Allocate a structure gex_con ++ */ ++ ++static void ++alloc_gex_con( ++ GENTRY *ge ++) ++{ ++ ge->ext = (void*)calloc(1, sizeof(GEX_CON)); ++ if(ge->ext == 0) { ++ fprintf (stderr, "****malloc failed %s line %d\n", __FILE__, __LINE__); ++ exit(255); ++ } ++} ++ ++/* ++ * Normalize a gentry for fforceconcise() : find the points that ++ * can be used to calculate the tangents. ++ */ ++ ++static void ++fnormalizege( ++ GENTRY *ge ++) ++{ ++ int midsame, frontsame, rearsame; ++ ++ if(ge->type == GE_LINE) { ++ ge->ftg = 2; ++ ge->rtg = -1; ++ } else { /* assume it's a curve */ ++ midsame = (fabs(ge->fx1-ge->fx2)fy1-ge->fy2)fx1-ge->prev->fx3)fy1-ge->prev->fy3)fx3-ge->fx2)fy3-ge->fy2)ftg = 2; ++ ge->rtg = -1; ++ } else { ++ if(frontsame) { ++ ge->ftg = 1; ++ } else { ++ ge->ftg = 0; ++ } ++ if(rearsame) { ++ ge->rtg = 0; ++ } else { ++ ge->rtg = 1; ++ } ++ } ++ } ++} ++ ++/* various definition for the processing of outlines */ ++ ++/* maximal average quadratic distance from the original curve ++ * (in dots) to consider the joined curve good ++ */ ++#define CVEPS 1.5 ++#define CVEPS2 (CVEPS*CVEPS) ++/* squared sinus of the maximal angle that we consider a smooth joint */ ++#define SMOOTHSIN2 0.25 /* 0.25==sin(30 degrees)^2 */ ++/* squared line length that we consider small */ ++#define SMALL_LINE2 (15.*15.) ++/* how many times a curve must be bigger than a line to join, squared */ ++#define TIMES_LINE2 (3.*3.) ++ ++/* ++ * Normalize and analyse a gentry for fforceconcise() and fill out the gex_con ++ * structure ++ */ ++ ++static void ++fanalyzege( ++ GENTRY *ge ++) ++{ ++ int i, ix, iy; ++ double avsd2, dots[3][2 /*X,Y*/]; ++ GEX_CON *gex; ++ ++ gex = X_CON(ge); ++ memset(gex, 0, sizeof *gex); ++ ++ gex->len2 = 0; ++ for(i=0; i<2; i++) { ++ avsd2 = gex->d[i] = ge->fpoints[i][2] - ge->prev->fpoints[i][2]; ++ gex->len2 += avsd2*avsd2; ++ } ++ gex->sin2 = fjointsin2(ge, ge->frwd); ++ if(ge->type == GE_CURVE) { ++ ge->dir = fgetcvdir(ge); ++ for(i=0; i<2; i++) { ++ dots[0][i] = ge->prev->fpoints[i][2]; ++ dots[1][i] = ge->fpoints[i][2]; ++ dots[2][i] = fcvval(ge, i, 0.5); ++ } ++ avsd2 = fdotsegdist2(dots, dots[2]); ++ if(avsd2 <= CVEPS2) { ++ gex->flags |= GEXF_FLAT; ++ } ++ } else { ++ ge->dir = CVDIR_FEQUAL|CVDIR_REQUAL; ++ gex->flags |= GEXF_FLAT; ++ } ++ if(gex->flags & GEXF_FLAT) { ++ if( fabs(gex->d[X]) > FEPS && fabs(gex->d[Y]) < 5. ++ && fabs(gex->d[Y] / gex->d[X]) < 0.2) ++ gex->flags |= GEXF_HOR; ++ else if( fabs(gex->d[Y]) > FEPS && fabs(gex->d[X]) < 5. ++ && fabs(gex->d[X] / gex->d[Y]) < 0.2) ++ gex->flags |= GEXF_VERT; ++ } ++ ix = gex->isd[X] = fsign(gex->d[X]); ++ iy = gex->isd[Y] = fsign(gex->d[Y]); ++ if(ix <= 0) { ++ if(iy <= 0) ++ gex->flags |= GEXF_QDL; ++ if(iy >= 0) ++ gex->flags |= GEXF_QUL; ++ if(gex->flags & GEXF_HOR) ++ gex->flags |= GEXF_IDQ_L; ++ } ++ if(ix >= 0) { ++ if(iy <= 0) ++ gex->flags |= GEXF_QDR; ++ if(iy >= 0) ++ gex->flags |= GEXF_QUR; ++ if(gex->flags & GEXF_HOR) ++ gex->flags |= GEXF_IDQ_R; ++ } ++ if(gex->flags & GEXF_VERT) { ++ if(iy <= 0) { ++ gex->flags |= GEXF_IDQ_U; ++ } else { /* supposedly there is no 0-sized entry */ ++ gex->flags |= GEXF_IDQ_D; ++ } ++ } ++} ++ ++/* ++ * Analyse a joint between this and following gentry for fforceconcise() ++ * and fill out the corresponding parts of the gex_con structure ++ * Bothe entries must be analyzed first. ++ */ ++ ++static void ++fanalyzejoint( ++ GENTRY *ge ++) ++{ ++ GENTRY *nge = ge->frwd; ++ GENTRY tge; ++ GEX_CON *gex, *ngex; ++ double avsd2, dots[3][2 /*X,Y*/]; ++ int i; ++ ++ gex = X_CON(ge); ngex = X_CON(nge); ++ ++ /* look if they can be joined honestly */ ++ ++ /* if any is flat, they should join smoothly */ ++ if( (gex->flags & GEXF_FLAT || ngex->flags & GEXF_FLAT) ++ && gex->sin2 > SMOOTHSIN2) ++ goto try_flatboth; ++ ++ if(ge->type == GE_LINE) { ++ if(nge->type == GE_LINE) { ++ if(gex->len2 > SMALL_LINE2 || ngex->len2 > SMALL_LINE2) ++ goto try_flatboth; ++ } else { ++ if(gex->len2*TIMES_LINE2 > ngex->len2) ++ goto try_flatboth; ++ } ++ } else if(nge->type == GE_LINE) { ++ if(ngex->len2*TIMES_LINE2 > gex->len2) ++ goto try_flatboth; ++ } ++ ++ /* if curve changes direction */ ++ if( gex->isd[X]*ngex->isd[X]<0 || gex->isd[Y]*ngex->isd[Y]<0) ++ goto try_idealone; ++ ++ /* if would create a zigzag */ ++ if( ((ge->dir&CVDIR_FRONT)-CVDIR_FEQUAL) * ((nge->dir&CVDIR_REAR)-CVDIR_REQUAL) < 0 ) ++ goto try_flatone; ++ ++ if( fcrossraysge(ge, nge, NULL, NULL, NULL) ) ++ gex->flags |= GEXF_JGOOD; ++ ++try_flatone: ++ /* look if they can be joined by flatting out one of the entries */ ++ ++ /* at this point we know that the general direction of the ++ * gentries is OK ++ */ ++ ++ if( gex->flags & GEXF_FLAT ) { ++ tge = *ge; ++ tge.fx1 = tge.fx3; ++ tge.fy1 = tge.fy3; ++ fnormalizege(&tge); ++ if( fcrossraysge(&tge, nge, NULL, NULL, NULL) ) ++ gex->flags |= GEXF_JFLAT|GEXF_JFLAT1; ++ } ++ if( ngex->flags & GEXF_FLAT ) { ++ tge = *nge; ++ tge.fx2 = ge->fx3; ++ tge.fy2 = ge->fy3; ++ fnormalizege(&tge); ++ if( fcrossraysge(ge, &tge, NULL, NULL, NULL) ) ++ gex->flags |= GEXF_JFLAT|GEXF_JFLAT2; ++ } ++ ++try_idealone: ++ /* look if one of the entries can be brought to an idealized ++ * horizontal or vertical position and then joined ++ */ ++ if( gex->flags & GEXF_HOR && gex->isd[X]*ngex->isd[X]>=0 ) { ++ tge = *ge; ++ tge.fx1 = tge.fx3; ++ tge.fy1 = ge->prev->fy3; /* force horizontal */ ++ fnormalizege(&tge); ++ if( fcrossraysge(&tge, nge, NULL, NULL, NULL) ) ++ gex->flags |= GEXF_JID|GEXF_JID1; ++ } else if( gex->flags & GEXF_VERT && gex->isd[Y]*ngex->isd[Y]>=0 ) { ++ tge = *ge; ++ tge.fx1 = ge->prev->fx3; /* force vertical */ ++ tge.fy1 = tge.fy3; ++ fnormalizege(&tge); ++ if( fcrossraysge(&tge, nge, NULL, NULL, NULL) ) ++ gex->flags |= GEXF_JID|GEXF_JID1; ++ } ++ if( ngex->flags & GEXF_HOR && gex->isd[X]*ngex->isd[X]>=0 ) { ++ tge = *nge; ++ tge.fx2 = ge->fx3; ++ tge.fy2 = nge->fy3; /* force horizontal */ ++ fnormalizege(&tge); ++ if( fcrossraysge(ge, &tge, NULL, NULL, NULL) ) ++ gex->flags |= GEXF_JID|GEXF_JID2; ++ } else if( ngex->flags & GEXF_VERT && gex->isd[Y]*ngex->isd[Y]>=0 ) { ++ tge = *nge; ++ tge.fx2 = nge->fx3; /* force vertical */ ++ tge.fy2 = ge->fy3; ++ fnormalizege(&tge); ++ if( fcrossraysge(ge, &tge, NULL, NULL, NULL) ) ++ gex->flags |= GEXF_JID|GEXF_JID2; ++ } ++ ++try_flatboth: ++ /* look if we can change them to one line */ ++ if(gex->flags & GEXF_FLAT && ngex->flags & GEXF_FLAT) { ++ for(i=0; i<2; i++) { ++ dots[0][i] = ge->prev->fpoints[i][2]; ++ dots[1][i] = nge->fpoints[i][2]; ++ dots[2][i] = ge->fpoints[i][2]; ++ } ++ if( fdotsegdist2(dots, dots[2]) <= CVEPS2) ++ gex->flags |= GEXF_JLINE; ++ } ++} ++ ++/* ++ * Force conciseness of one contour in the glyph, ++ * the contour is indicated by one entry from it. ++ */ ++ ++static void ++fconcisecontour( ++ GLYPH *g, ++ GENTRY *startge ++) ++{ ++/* initial maximal number of dots to be used as reference */ ++#define MAXDOTS ((NREFDOTS+1)*12) ++ ++ GENTRY *ge, *pge, *nge, *ige; ++ GEX_CON *gex, *pgex, *ngex, *nngex; ++ GENTRY tpge, tnge; ++ int quad, qq, i, j, ndots, maxdots; ++ int found[2]; ++ int joinmask, pflag, nflag; ++ struct dot_dist *dots; ++ double avsd2, maxd2, eps2; ++ double apcv[4][2]; ++ ++ if(startge == 0) { ++ fprintf(stderr, "WARNING: assertion in %s line %d, please report it to the ttf2pt1 project\n", ++ __FILE__, __LINE__); ++ fprintf(stderr, "Strange contour in glyph %s\n", g->name); ++ dumppaths(g, NULL, NULL); ++ return; ++ } ++ ++ if(startge->type != GE_CURVE && startge->type != GE_LINE) ++ return; /* probably a degenerate contour */ ++ ++ if(ISDBG(FCONCISE)) ++ fprintf(stderr, "processing contour 0x%p of glyph %s\n", startge, g->name); ++ ++ maxdots = MAXDOTS; ++ dots = (struct dot_dist *)malloc(sizeof(*dots)*maxdots); ++ if(dots == NULL) { ++ fprintf (stderr, "****malloc failed %s line %d\n", __FILE__, __LINE__); ++ exit(255); ++ } ++ ++ ge = startge; ++ joinmask = GEXF_JGOOD; ++ while(1) { ++ restart: ++ gex = X_CON(ge); ++ if((gex->flags & GEXF_JMASK) > ((joinmask<<1)-1)) { ++ if(ISDBG(FCONCISE)) ++ fprintf(stderr, "found higher flag (%x>%x) at 0x%p\n", ++ gex->flags & GEXF_JMASK, ((joinmask<<1)-1), ge); ++ joinmask <<= 1; ++ startge = ge; /* have to redo the pass */ ++ continue; ++ } ++ if(( gex->flags & joinmask )==0) ++ goto next; ++ ++ /* if we happen to be in the middle of a string of ++ * joinable entries, find its beginning ++ */ ++ if( gex->flags & (GEXF_JCVMASK^GEXF_JID) ) ++ quad = gex->flags & X_CON_F(ge->frwd) & GEXF_QMASK; ++ else if( gex->flags & GEXF_JID2 ) ++ quad = gex->flags & GEXF_QFROM_IDEAL(X_CON_F(ge->frwd)) & GEXF_QMASK; ++ else /* must be GEXF_JID1 */ ++ quad = GEXF_QFROM_IDEAL(gex->flags) & X_CON_F(ge->frwd) & GEXF_QMASK; ++ ++ pge = ge; ++ pgex = X_CON(pge->bkwd); ++ ++ if(ISDBG(FCONCISE)) ++ fprintf(stderr, "ge %p prev -> 0x%p ", ge, pge); ++ ++ while(pgex->flags & GEXF_JCVMASK) { ++ if( !(pgex->flags & ((GEXF_JCVMASK^GEXF_JID)|GEXF_JID2)) ) ++ qq = GEXF_QFROM_IDEAL(pgex->flags); ++ else ++ qq = pgex->flags & GEXF_QMASK; ++ ++ if(ISDBG(FCONCISE)) ++ fprintf(stderr, "(%x?%x)", quad, qq); ++ ++ if( !(quad & qq) ) { ++ if( !(X_CON_F(pge) & (GEXF_JCVMASK^GEXF_JID)) ++ && pgex->flags & (GEXF_JCVMASK^GEXF_JID) ) { ++ /* the previos entry is definitely a better match */ ++ if(pge == ge) { ++ if(ISDBG(FCONCISE)) ++ fprintf(stderr, "\nprev is a better match at %p\n", pge); ++ startge = ge; ++ goto next; ++ } else ++ pge = pge->frwd; ++ } ++ break; ++ } ++ ++ quad &= qq; ++ pge = pge->bkwd; ++ pgex = X_CON(pge->bkwd); ++ if(ISDBG(FCONCISE)) ++ fprintf(stderr, "0x%p ", pge); ++ } ++ ++ /* collect as many entries for joining as possible */ ++ nge = ge->frwd; ++ ngex = X_CON(nge); ++ nngex = X_CON(nge->frwd); ++ ++ if(ISDBG(FCONCISE)) ++ fprintf(stderr, ": 0x%x\nnext -> 0x%p ", pge, nge); ++ ++ while(ngex->flags & GEXF_JCVMASK) { ++ if( !(ngex->flags & ((GEXF_JCVMASK^GEXF_JID)|GEXF_JID1)) ) ++ qq = GEXF_QFROM_IDEAL(nngex->flags); ++ else ++ qq = nngex->flags & GEXF_QMASK; ++ ++ if(ISDBG(FCONCISE)) ++ fprintf(stderr, "(%x?%x)", quad, qq); ++ if( !(quad & qq) ) { ++ if( !(X_CON_F(nge->bkwd) & (GEXF_JCVMASK^GEXF_JID)) ++ && ngex->flags & (GEXF_JCVMASK^GEXF_JID) ) { ++ /* the next-next entry is definitely a better match */ ++ if(nge == ge->frwd) { ++ if(ISDBG(FCONCISE)) ++ fprintf(stderr, "\nnext %x is a better match than %x at %p (jmask %x)\n", ++ ngex->flags & GEXF_JCVMASK, gex->flags & GEXF_JCVMASK, nge, joinmask); ++ goto next; ++ } else ++ nge = nge->bkwd; ++ } ++ break; ++ } ++ ++ quad &= qq; ++ nge = nge->frwd; ++ ngex = nngex; ++ nngex = X_CON(nge->frwd); ++ if(ISDBG(FCONCISE)) ++ fprintf(stderr, "0x%p ", nge); ++ } ++ ++ if(ISDBG(FCONCISE)) ++ fprintf(stderr, ": 0x%x\n", nge); ++ ++ /* XXX add splitting of last entries if neccessary */ ++ ++ /* make sure that all the reference dots are valid */ ++ for(ige = pge; ige != nge->frwd; ige = ige->frwd) { ++ nngex = X_CON(ige); ++ if( !(nngex->flags & GEXF_VDOTS) ) { ++ fsampledots(ige, nngex->dots, NREFDOTS); ++ nngex->flags |= GEXF_VDOTS; ++ } ++ } ++ ++ /* do the actual joining */ ++ while(1) { ++ pgex = X_CON(pge); ++ ngex = X_CON(nge->bkwd); ++ /* now the segments to be joined are pge...nge */ ++ ++ ndots = 0; ++ for(ige = pge; ige != nge->frwd; ige = ige->frwd) { ++ if(maxdots < ndots+(NREFDOTS+1)) { ++ maxdots += MAXDOTS; ++ dots = (struct dot_dist *)realloc((void *)dots, sizeof(*dots)*maxdots); ++ if(dots == NULL) { ++ fprintf (stderr, "****malloc failed %s line %d\n", __FILE__, __LINE__); ++ exit(255); ++ } ++ } ++ nngex = X_CON(ige); ++ for(i=0; idots[i][j]; ++ ndots++; ++ } ++ for(j=0; j<2; j++) ++ dots[ndots].p[j] = ige->fpoints[j][2]; ++ ndots++; ++ } ++ ndots--; /* the last point is not interesting */ ++ ++ tpge = *pge; ++ pflag = pgex->flags; ++ if(pflag & (GEXF_JGOOD|GEXF_JFLAT2|GEXF_JID2)) { ++ /* nothing */ ++ } else if(pflag & GEXF_JFLAT) { ++ tpge.fx1 = tpge.fx3; ++ tpge.fy1 = tpge.fy3; ++ } else if(pflag & GEXF_JID) { ++ if(pflag & GEXF_HOR) ++ tpge.fy1 = tpge.bkwd->fy3; ++ else ++ tpge.fx1 = tpge.bkwd->fx3; ++ } ++ ++ tnge = *nge; ++ nflag = ngex->flags; ++ if(nflag & (GEXF_JGOOD|GEXF_JFLAT1|GEXF_JID) ++ && !(nflag & GEXF_JID2)) { ++ /* nothing */ ++ } else if(nflag & GEXF_JFLAT) { ++ tnge.fx2 = tnge.bkwd->fx3; ++ tnge.fy2 = tnge.bkwd->fy3; ++ } else if(nflag & GEXF_JID) { ++ if(X_CON_F(nge) & GEXF_HOR) ++ tnge.fy2 = tnge.fy3; ++ else ++ tnge.fx2 = tnge.fx3; ++ } ++ ++ fnormalizege(&tpge); ++ fnormalizege(&tnge); ++ if( fcrossraysge(&tpge, &tnge, NULL, NULL, &apcv[1]) ) { ++ apcv[0][X] = tpge.bkwd->fx3; ++ apcv[0][Y] = tpge.bkwd->fy3; ++ /* apcv[1] and apcv[2] were filled by fcrossraysge() */ ++ apcv[3][X] = tnge.fx3; ++ apcv[3][Y] = tnge.fy3; ++ ++ /* calculate the precision depending on the smaller dimension of the curve */ ++ maxd2 = apcv[3][X]-apcv[0][X]; ++ maxd2 *= maxd2; ++ eps2 = apcv[3][Y]-apcv[0][Y]; ++ eps2 *= eps2; ++ if(maxd2 < eps2) ++ eps2 = maxd2; ++ eps2 *= (CVEPS2*4.) / (400.*400.); ++ if(eps2 < CVEPS2) ++ eps2 = CVEPS2; ++ else if(eps2 > CVEPS2*4.) ++ eps2 = CVEPS2*4.; ++ ++ fapproxcurve(apcv, dots, ndots); ++ ++ avsd2 = fdotcurvdist2(apcv, dots, ndots, &maxd2); ++ if(ISDBG(FCONCISE)) ++ fprintf(stderr, "avsd = %g, maxd = %g, ", sqrt(avsd2), sqrt(maxd2)); ++ if(avsd2 <= eps2 && maxd2 <= eps2*2.) { ++ /* we've guessed a curve that is close enough */ ++ ggoodcv++; ggoodcvdots += ndots; ++ ++ if(ISDBG(FCONCISE)) { ++ fprintf(stderr, "in %s joined %p-%p to ", g->name, pge, nge); ++ for(i=0; i<4; i++) { ++ fprintf(stderr, " (%g, %g)", apcv[i][X], apcv[i][Y]); ++ } ++ fprintf(stderr, " from\n"); ++ dumppaths(g, pge, nge); ++ } ++ for(i=0; i<3; i++) { ++ pge->fxn[i] = apcv[i+1][X]; ++ pge->fyn[i] = apcv[i+1][Y]; ++ } ++ pge->type = GE_CURVE; ++ ge = pge; ++ for(ige = pge->frwd; ; ige = pge->frwd) { ++ if(ige == pge) { ++ fprintf(stderr, "WARNING: assertion in %s line %d, please report it to the ttf2pt1 project\n", ++ __FILE__, __LINE__); ++ free(dots); ++ return; ++ } ++ if(startge == ige) ++ startge = pge; ++ free(ige->ext); ++ freethisge(ige); ++ if(ige == nge) ++ break; ++ } ++ fnormalizege(ge); ++ if(ISDBG(FCONCISE)) { ++ fprintf(stderr, "normalized "); ++ for(i=0; i<3; i++) { ++ fprintf(stderr, " (%g, %g)", ge->fpoints[X][i], ge->fpoints[Y][i]); ++ } ++ fprintf(stderr, "\n"); ++ } ++ fanalyzege(ge); ++ fanalyzejoint(ge); ++ fanalyzege(ge->bkwd); ++ fanalyzejoint(ge->bkwd); ++ ++ /* the results of this join will have to be reconsidered */ ++ startge = ge = ge->frwd; ++ goto restart; ++ } else { ++ gbadcv++; gbadcvdots += ndots; ++ } ++ } ++ ++ /* if we're down to 2 entries then the join has failed */ ++ if(pge->frwd == nge) { ++ pgex->flags &= ~joinmask; ++ if(ISDBG(FCONCISE)) ++ fprintf(stderr, "no match\n"); ++ goto next; ++ } ++ ++ /* reduce the number of entries by dropping one at some end, ++ * should never drop the original ge from the range ++ */ ++ ++ if(nge->bkwd == ge ++ || (pge != ge && (pgex->flags & GEXF_JCVMASK) <= (ngex->flags & GEXF_JCVMASK)) ) { ++ pge = pge->frwd; ++ } else { ++ nge = nge->bkwd; ++ } ++ if(ISDBG(FCONCISE)) ++ fprintf(stderr, "next try: %p to %p\n", pge, nge); ++ } ++ ++next: ++ ge = ge->frwd; ++ if(ge == startge) { ++ joinmask = (joinmask >> 1) & GEXF_JCVMASK; ++ if(joinmask == 0) ++ break; ++ } ++ } ++ ++ /* join flat segments into lines */ ++ /* here ge==startge */ ++ while(1) { ++ gex = X_CON(ge); ++ if( !(gex->flags & GEXF_JLINE) ) ++ goto next2; ++ ++ ndots = 0; ++ dots[ndots].p[X] = ge->fx3; ++ dots[ndots].p[Y] = ge->fy3; ++ ndots++; ++ ++ pge = ge->bkwd; ++ nge = ge->frwd; ++ ++ if(ISDBG(FCONCISE)) ++ fprintf(stderr, "joining LINE from %p-%p\n", ge, nge); ++ ++ while(pge!=nge) { ++ pgex = X_CON(pge); ++ ngex = X_CON(nge); ++ if(ISDBG(FCONCISE)) ++ fprintf(stderr, "(p=%p/%x n=0x%x/%x) ", pge, pgex->flags & GEXF_JLINE, ++ nge, ngex->flags & GEXF_JLINE); ++ if( !((pgex->flags | ngex->flags) & GEXF_JLINE) ) { ++ if(ISDBG(FCONCISE)) ++ fprintf(stderr, "(end p=%p n=%p) ", pge, nge); ++ break; ++ } ++ ++ if(maxdots < ndots+2) { ++ maxdots += MAXDOTS; ++ dots = (struct dot_dist *)realloc((void *)dots, sizeof(*dots)*maxdots); ++ if(dots == NULL) { ++ fprintf (stderr, "****malloc failed %s line %d\n", __FILE__, __LINE__); ++ exit(255); ++ } ++ } ++ if( pgex->flags & GEXF_JLINE ) { ++ for(i=0; i<2; i++) { ++ apcv[0][i] = pge->bkwd->fpoints[i][2]; ++ apcv[1][i] = nge->fpoints[i][2]; ++ dots[ndots].p[i] = pge->fpoints[i][2]; ++ } ++ ndots++; ++ for(i=0; i CVEPS2) ++ break; ++ } ++ if(iflags &= ~GEXF_JLINE; ++ } else { ++ pge = pge->bkwd; ++ if(pge == nge) { ++ if(ISDBG(FCONCISE)) ++ fprintf(stderr, "intersected at prev %p ", pge); ++ break; /* oops, tried to self-intersect */ ++ } ++ } ++ } else if(ISDBG(FCONCISE)) ++ fprintf(stderr, "(p=%p) ", pge); ++ ++ if( ngex->flags & GEXF_JLINE ) { ++ for(i=0; i<2; i++) { ++ apcv[0][i] = pge->fpoints[i][2]; /* pge points before the 1st segment */ ++ apcv[1][i] = nge->frwd->fpoints[i][2]; ++ dots[ndots].p[i] = nge->fpoints[i][2]; ++ } ++ ndots++; ++ for(i=0; i CVEPS2) ++ break; ++ } ++ if(ifrwd); ++ ndots--; ++ ngex->flags &= ~GEXF_JLINE; ++ } else { ++ nge = nge->frwd; ++ } ++ } else if(ISDBG(FCONCISE)) ++ fprintf(stderr, "(n=%p) ", nge); ++ } ++ ++ pge = pge->frwd; /* now the limits are pge...nge inclusive */ ++ if(pge == nge) /* a deeply perversive contour */ ++ break; ++ ++ if(ISDBG(FCONCISE)) { ++ fprintf(stderr, "\nin %s joined LINE %p-%p from\n", g->name, pge, nge); ++ dumppaths(g, pge, nge); ++ } ++ pge->type = GE_LINE; ++ for(i=0; i<2; i++) { ++ pge->fpoints[i][2] = nge->fpoints[i][2]; ++ } ++ fnormalizege(pge); ++ X_CON_F(pge) &= ~GEXF_JLINE; ++ ++ ge = pge; ++ for(ige = pge->frwd; ; ige = pge->frwd) { ++ if(ige == pge) { ++ fprintf(stderr, "WARNING: assertion in %s line %d, please report it to the ttf2pt1 project\n", ++ __FILE__, __LINE__); ++ free(dots); ++ return; ++ } ++ if(startge == ige) ++ startge = pge; ++ free(ige->ext); ++ freethisge(ige); ++ if(ige == nge) ++ break; ++ } ++next2: ++ ge = ge->frwd; ++ if(ge == startge) ++ break; ++ } ++ ++ free(dots); ++} ++ ++/* force conciseness: substitute 2 or more curves going in the ++** same quadrant with one curve ++** in floating point ++*/ ++ ++void ++fforceconcise( ++ GLYPH * g ++) ++{ ++ ++ GENTRY *ge, *nge, *endge, *xge; ++ ++ assertisfloat(g, "enforcing conciseness"); ++ ++ fdelsmall(g, 0.05); ++ assertpath(g->entries, __FILE__, __LINE__, g->name); ++ ++ if(ISDBG(FCONCISE)) ++ dumppaths(g, NULL, NULL); ++ ++ /* collect more information about each gentry and their joints */ ++ for (ge = g->entries; ge != 0; ge = ge->next) ++ if (ge->type == GE_CURVE || ge->type == GE_LINE) ++ fnormalizege(ge); ++ ++ for (ge = g->entries; ge != 0; ge = ge->next) ++ if (ge->type == GE_CURVE || ge->type == GE_LINE) { ++ alloc_gex_con(ge); ++ fanalyzege(ge); ++ } ++ ++ /* see what we can do about joining */ ++ for (ge = g->entries; ge != 0; ge = ge->next) ++ if (ge->type == GE_CURVE || ge->type == GE_LINE) ++ fanalyzejoint(ge); ++ ++ /* now do the joining */ ++ for (ge = g->entries; ge != 0; ge = ge->next) ++ if(ge->type == GE_MOVE) ++ fconcisecontour(g, ge->next); ++ ++ for (ge = g->entries; ge != 0; ge = ge->next) ++ if (ge->type == GE_CURVE || ge->type == GE_LINE) ++ free(ge->ext); ++} ++ ++void ++print_glyph( ++ int glyphno ++) ++{ ++ GLYPH *g; ++ GENTRY *ge; ++ int x = 0, y = 0; ++ int i; ++ int grp, lastgrp= -1; ++ ++ if(ISDBG(FCONCISE) && glyphno == 0) { ++ fprintf(stderr, "Guessed curves: bad %d/%d good %d/%d\n", ++ gbadcv, gbadcvdots, ggoodcv, ggoodcvdots); ++ } ++ ++ g = &glyph_list[glyphno]; ++ ++ fprintf(pfa_file, "/%s { \n", g->name); ++ ++ /* consider widths >MAXLEGALWIDTH as bugs */ ++ if( g->scaledwidth <= MAXLEGALWIDTH ) { ++ fprintf(pfa_file, "0 %d hsbw\n", g->scaledwidth); ++ } else { ++ fprintf(pfa_file, "0 1000 hsbw\n"); ++ WARNING_2 fprintf(stderr, "glyph %s: width %d seems to be buggy, set to 1000\n", ++ g->name, g->scaledwidth); ++ } ++ ++#if 0 ++ fprintf(pfa_file, "%% contours: "); ++ for (i = 0; i < g->ncontours; i++) ++ fprintf(pfa_file, "%s(%d,%d) ", (g->contours[i].direction == DIR_OUTER ? "out" : "in"), ++ g->contours[i].xofmin, g->contours[i].ymin); ++ fprintf(pfa_file, "\n"); ++ ++ if (g->rymin < 5000) ++ fprintf(pfa_file, "%d lower%s\n", g->rymin, (g->flatymin ? "flat" : "curve")); ++ if (g->rymax > -5000) ++ fprintf(pfa_file, "%d upper%s\n", g->rymax, (g->flatymax ? "flat" : "curve")); ++#endif ++ ++ if (g->hstems) ++ for (i = 0; i < g->nhs; i += 2) { ++ if (g->hstems[i].flags & ST_3) { ++ fprintf(pfa_file, "%d %d %d %d %d %d hstem3\n", ++ g->hstems[i].value, ++ g->hstems[i + 1].value - g->hstems[i].value, ++ g->hstems[i + 2].value, ++ g->hstems[i + 3].value - g->hstems[i + 2].value, ++ g->hstems[i + 4].value, ++ g->hstems[i + 5].value - g->hstems[i + 4].value ++ ); ++ i += 4; ++ } else { ++ fprintf(pfa_file, "%d %d hstem\n", g->hstems[i].value, ++ g->hstems[i + 1].value - g->hstems[i].value); ++ } ++ } ++ ++ if (g->vstems) ++ for (i = 0; i < g->nvs; i += 2) { ++ if (g->vstems[i].flags & ST_3) { ++ fprintf(pfa_file, "%d %d %d %d %d %d vstem3\n", ++ g->vstems[i].value, ++ g->vstems[i + 1].value - g->vstems[i].value, ++ g->vstems[i + 2].value, ++ g->vstems[i + 3].value - g->vstems[i + 2].value, ++ g->vstems[i + 4].value, ++ g->vstems[i + 5].value - g->vstems[i + 4].value ++ ); ++ i += 4; ++ } else { ++ fprintf(pfa_file, "%d %d vstem\n", g->vstems[i].value, ++ g->vstems[i + 1].value - g->vstems[i].value); ++ } ++ } ++ ++ for (ge = g->entries; ge != 0; ge = ge->next) { ++ if(g->nsg>0) { ++ grp=ge->stemid; ++ if(grp >= 0 && grp != lastgrp) { ++ fprintf(pfa_file, "%d 4 callsubr\n", grp+g->firstsubr); ++ lastgrp=grp; ++ } ++ } ++ ++ switch (ge->type) { ++ case GE_MOVE: ++ if (absolute) ++ fprintf(pfa_file, "%d %d amoveto\n", ge->ix3, ge->iy3); ++ else ++ rmoveto(ge->ix3 - x, ge->iy3 - y); ++ if (0) ++ fprintf(stderr, "Glyph %s: print moveto(%d, %d)\n", ++ g->name, ge->ix3, ge->iy3); ++ x = ge->ix3; ++ y = ge->iy3; ++ break; ++ case GE_LINE: ++ if (absolute) ++ fprintf(pfa_file, "%d %d alineto\n", ge->ix3, ge->iy3); ++ else ++ rlineto(ge->ix3 - x, ge->iy3 - y); ++ x = ge->ix3; ++ y = ge->iy3; ++ break; ++ case GE_CURVE: ++ if (absolute) ++ fprintf(pfa_file, "%d %d %d %d %d %d arcurveto\n", ++ ge->ix1, ge->iy1, ge->ix2, ge->iy2, ge->ix3, ge->iy3); ++ else ++ rrcurveto(ge->ix1 - x, ge->iy1 - y, ++ ge->ix2 - ge->ix1, ge->iy2 - ge->iy1, ++ ge->ix3 - ge->ix2, ge->iy3 - ge->iy2); ++ x = ge->ix3; ++ y = ge->iy3; ++ break; ++ case GE_PATH: ++ closepath(); ++ break; ++ default: ++ WARNING_1 fprintf(stderr, "**** Glyph %s: unknown entry type '%c'\n", ++ g->name, ge->type); ++ break; ++ } ++ } ++ ++ fprintf(pfa_file, "endchar } ND\n"); ++} ++ ++/* print the subroutines for this glyph, returns the number of them */ ++int ++print_glyph_subs( ++ int glyphno, ++ int startid /* start numbering subroutines from this id */ ++) ++{ ++ GLYPH *g; ++ int i, grp; ++ ++ g = &glyph_list[glyphno]; ++ ++ if(!hints || !subhints || g->nsg<1) ++ return 0; ++ ++ g->firstsubr=startid; ++ ++#if 0 ++ fprintf(pfa_file, "%% %s %d\n", g->name, g->nsg); ++#endif ++ for(grp=0; grpnsg; grp++) { ++ fprintf(pfa_file, "dup %d {\n", startid++); ++ for(i= (grp==0)? 0 : g->nsbs[grp-1]; insbs[grp]; i++) ++ fprintf(pfa_file, "\t%d %d %cstem\n", g->sbstems[i].low, ++ g->sbstems[i].high-g->sbstems[i].low, ++ g->sbstems[i].isvert ? 'v' : 'h'); ++ fprintf(pfa_file, "\treturn\n\t} NP\n"); ++ } ++ ++ return g->nsg; ++} ++ ++void ++print_glyph_metrics( ++ int code, ++ int glyphno ++) ++{ ++ GLYPH *g; ++ ++ g = &glyph_list[glyphno]; ++ ++ if(transform) ++ fprintf(afm_file, "C %d ; WX %d ; N %s ; B %d %d %d %d ;\n", ++ code, g->scaledwidth, g->name, ++ iscale(g->xMin), iscale(g->yMin), iscale(g->xMax), iscale(g->yMax)); ++ else ++ fprintf(afm_file, "C %d ; WX %d ; N %s ; B %d %d %d %d ;\n", ++ code, g->scaledwidth, g->name, ++ g->xMin, g->yMin, g->xMax, g->yMax); ++} ++ ++/* ++ SB: ++ An important note about the BlueValues. ++ ++ The Adobe documentation says that the maximal width of a Blue zone ++ is connected to the value of BlueScale, which is by default 0.039625. ++ The BlueScale value defines, at which point size the overshoot ++ suppression be disabled. ++ ++ The formula for it that is given in the manual is: ++ ++ BlueScale=point_size/240, for a 300dpi device ++ ++ that makes us wonder what is this 240 standing for. Incidentally ++ 240=72*1000/300, where 72 is the relation between inches and points, ++ 1000 is the size of the glyph matrix, and 300dpi is the resolution of ++ the output device. Knowing that we can recalculate the formula for ++ the font size in pixels rather than points: ++ ++ BlueScale=pixel_size/1000 ++ ++ That looks a lot simpler than the original formula, does not it ? ++ And the limitation about the maximal width of zone also looks ++ a lot simpler after the transformation: ++ ++ max_width < 1000/pixel_size ++ ++ that ensures that even at the maximal pixel size when the overshoot ++ suppression is disabled the zone width will be less than one pixel. ++ This is important, failure to comply to this limit will result in ++ really ugly fonts (been there, done that). But knowing the formula ++ for the pixel width, we see that in fact we can use the maximal width ++ of 24, not 23 as specified in the manual. ++ ++*/ ++ ++#define MAXBLUEWIDTH (24) ++ ++/* ++ * Find the indexes of the most frequent values ++ * in the hystogram, sort them in ascending order, and save which one ++ * was the best one (if asked). ++ * Returns the number of values found (may be less than maximal because ++ * we ignore the zero values) ++ */ ++ ++#define MAXHYST (2000) /* size of the hystogram */ ++#define HYSTBASE 500 ++ ++static int ++besthyst( ++ int *hyst, /* the hystogram */ ++ int base, /* the base point of the hystogram */ ++ int *best, /* the array for indexes of best values */ ++ int nbest, /* its allocated size */ ++ int width, /* minimal difference between indexes */ ++ int *bestindp /* returned top point */ ++) ++{ ++ unsigned char hused[MAXHYST / 8 + 1]; ++ int i, max, j, w, last = 0; ++ int nf = 0; ++ ++ width--; ++ ++ memset(hused, 0 , sizeof hused); ++ ++ max = 1; ++ for (i = 0; i < nbest && max != 0; i++) { ++ best[i] = 0; ++ max = 0; ++ for (j = 1; j < MAXHYST - 1; j++) { ++ w = hyst[j]; ++ ++ if (w > max && (hused[j>>3] & (1 << (j & 0x07))) == 0) { ++ best[i] = j; ++ max = w; ++ } ++ } ++ if (max != 0) { ++ if (max < last/2) { ++ /* do not pick the too low values */ ++ break; ++ } ++ for (j = best[i] - width; j <= best[i] + width; j++) { ++ if (j >= 0 && j < MAXHYST) ++ hused[j >> 3] |= (1 << (j & 0x07)); ++ } ++ last = max; ++ best[i] -= base; ++ nf = i + 1; ++ } ++ } ++ ++ if (bestindp) ++ *bestindp = best[0]; ++ ++ /* sort the indexes in ascending order */ ++ for (i = 0; i < nf; i++) { ++ for (j = i + 1; j < nf; j++) ++ if (best[j] < best[i]) { ++ w = best[i]; ++ best[i] = best[j]; ++ best[j] = w; ++ } ++ } ++ ++ return nf; ++} ++ ++/* ++ * Find the next best Blue zone in the hystogram. ++ * Return the weight of the found zone. ++ */ ++ ++static int ++bestblue( ++ short *zhyst, /* the zones hystogram */ ++ short *physt, /* the points hystogram */ ++ short *ozhyst, /* the other zones hystogram */ ++ int *bluetab /* where to put the found zone */ ++) ++{ ++ int i, j, w, max, ind, first, last; ++ ++ /* find the highest point in the zones hystogram */ ++ /* if we have a plateau, take its center */ ++ /* if we have multiple peaks, take the first one */ ++ ++ max = -1; ++ first = last = -10; ++ for (i = 0; i <= MAXHYST - MAXBLUEWIDTH; i++) { ++ w = zhyst[i]; ++ if (w > max) { ++ first = last = i; ++ max = w; ++ } else if (w == max) { ++ if (last == i - 1) ++ last = i; ++ } ++ } ++ ind = (first + last) / 2; ++ ++ if (max == 0) /* no zones left */ ++ return 0; ++ ++ /* now we reuse `first' and `last' as inclusive borders of the zone */ ++ first = ind; ++ last = ind + (MAXBLUEWIDTH - 1); ++ ++ /* our maximal width is far too big, so we try to make it narrower */ ++ w = max; ++ j = (w & 1); /* a pseudo-random bit */ ++ while (1) { ++ while (physt[first] == 0) ++ first++; ++ while (physt[last] == 0) ++ last--; ++ if (last - first < (MAXBLUEWIDTH * 2 / 3) || (max - w) * 10 > max) ++ break; ++ ++ if (physt[first] < physt[last] ++ || (physt[first] == physt[last] && j)) { ++ if (physt[first] * 20 > w) /* if weight is >5%, ++ * stop */ ++ break; ++ w -= physt[first]; ++ first++; ++ j = 0; ++ } else { ++ if (physt[last] * 20 > w) /* if weight is >5%, ++ * stop */ ++ break; ++ w -= physt[last]; ++ last--; ++ j = 1; ++ } ++ } ++ ++ /* save our zone */ ++ bluetab[0] = first - HYSTBASE; ++ bluetab[1] = last - HYSTBASE; ++ ++ /* invalidate all the zones overlapping with this one */ ++ /* the constant of 2 is determined by the default value of BlueFuzz */ ++ for (i = first - (MAXBLUEWIDTH - 1) - 2; i <= last + 2; i++) ++ if (i >= 0 && i < MAXHYST) { ++ zhyst[i] = 0; ++ ozhyst[i] = 0; ++ } ++ return w; ++} ++ ++/* ++ * Try to find the Blue Values, bounding box and italic angle ++ */ ++ ++void ++findblues(void) ++{ ++ /* hystograms for upper and lower zones */ ++ short hystl[MAXHYST]; ++ short hystu[MAXHYST]; ++ short zuhyst[MAXHYST]; ++ short zlhyst[MAXHYST]; ++ int nchars; ++ int i, j, k, w, max; ++ GENTRY *ge; ++ GLYPH *g; ++ double ang; ++ ++ /* find the lowest and highest points of glyphs */ ++ /* and by the way build the values for FontBBox */ ++ /* and build the hystogram for the ItalicAngle */ ++ ++ /* re-use hystl for the hystogram of italic angle */ ++ ++ bbox[0] = bbox[1] = 5000; ++ bbox[2] = bbox[3] = -5000; ++ ++ for (i = 0; i < MAXHYST; i++) ++ hystl[i] = 0; ++ ++ nchars = 0; ++ ++ for (i = 0, g = glyph_list; i < numglyphs; i++, g++) { ++ if (g->flags & GF_USED) { ++ nchars++; ++ ++ g->rymin = 5000; ++ g->rymax = -5000; ++ for (ge = g->entries; ge != 0; ge = ge->next) { ++ if (ge->type == GE_LINE) { ++ ++ j = ge->iy3 - ge->prev->iy3; ++ k = ge->ix3 - ge->prev->ix3; ++ if (j > 0) ++ ang = atan2(-k, j) * 180.0 / M_PI; ++ else ++ ang = atan2(k, -j) * 180.0 / M_PI; ++ ++ k /= 100; ++ j /= 100; ++ if (ang > -45.0 && ang < 45.0) { ++ /* ++ * be careful to not overflow ++ * the counter ++ */ ++ hystl[HYSTBASE + (int) (ang * 10.0)] += (k * k + j * j) / 4; ++ } ++ if (ge->iy3 == ge->prev->iy3) { ++ if (ge->iy3 <= g->rymin) { ++ g->rymin = ge->iy3; ++ g->flatymin = 1; ++ } ++ if (ge->iy3 >= g->rymax) { ++ g->rymax = ge->iy3; ++ g->flatymax = 1; ++ } ++ } else { ++ if (ge->iy3 < g->rymin) { ++ g->rymin = ge->iy3; ++ g->flatymin = 0; ++ } ++ if (ge->iy3 > g->rymax) { ++ g->rymax = ge->iy3; ++ g->flatymax = 0; ++ } ++ } ++ } else if (ge->type == GE_CURVE) { ++ if (ge->iy3 < g->rymin) { ++ g->rymin = ge->iy3; ++ g->flatymin = 0; ++ } ++ if (ge->iy3 > g->rymax) { ++ g->rymax = ge->iy3; ++ g->flatymax = 0; ++ } ++ } ++ if (ge->type == GE_LINE || ge->type == GE_CURVE) { ++ if (ge->ix3 < bbox[0]) ++ bbox[0] = ge->ix3; ++ if (ge->ix3 > bbox[2]) ++ bbox[2] = ge->ix3; ++ if (ge->iy3 < bbox[1]) ++ bbox[1] = ge->iy3; ++ if (ge->iy3 > bbox[3]) ++ bbox[3] = ge->iy3; ++ } ++ } ++ } ++ } ++ ++ /* get the most popular angle */ ++ max = 0; ++ w = 0; ++ for (i = 0; i < MAXHYST; i++) { ++ if (hystl[i] > w) { ++ w = hystl[i]; ++ max = i; ++ } ++ } ++ ang = (double) (max - HYSTBASE) / 10.0; ++ WARNING_2 fprintf(stderr, "Guessed italic angle: %f\n", ang); ++ if (italic_angle == 0.0) ++ italic_angle = ang; ++ ++ /* build the hystogram of the lower points */ ++ for (i = 0; i < MAXHYST; i++) ++ hystl[i] = 0; ++ ++ for (i = 0, g = glyph_list; i < numglyphs; i++, g++) { ++ if ((g->flags & GF_USED) ++ && g->rymin + HYSTBASE >= 0 && g->rymin < MAXHYST - HYSTBASE) { ++ hystl[g->rymin + HYSTBASE]++; ++ } ++ } ++ ++ /* build the hystogram of the upper points */ ++ for (i = 0; i < MAXHYST; i++) ++ hystu[i] = 0; ++ ++ for (i = 0, g = glyph_list; i < numglyphs; i++, g++) { ++ if ((g->flags & GF_USED) ++ && g->rymax + HYSTBASE >= 0 && g->rymax < MAXHYST - HYSTBASE) { ++ hystu[g->rymax + HYSTBASE]++; ++ } ++ } ++ ++ /* build the hystogram of all the possible lower zones with max width */ ++ for (i = 0; i < MAXHYST; i++) ++ zlhyst[i] = 0; ++ ++ for (i = 0; i <= MAXHYST - MAXBLUEWIDTH; i++) { ++ for (j = 0; j < MAXBLUEWIDTH; j++) ++ zlhyst[i] += hystl[i + j]; ++ } ++ ++ /* build the hystogram of all the possible upper zones with max width */ ++ for (i = 0; i < MAXHYST; i++) ++ zuhyst[i] = 0; ++ ++ for (i = 0; i <= MAXHYST - MAXBLUEWIDTH; i++) { ++ for (j = 0; j < MAXBLUEWIDTH; j++) ++ zuhyst[i] += hystu[i + j]; ++ } ++ ++ /* find the baseline */ ++ w = bestblue(zlhyst, hystl, zuhyst, &bluevalues[0]); ++ if (0) ++ fprintf(stderr, "BaselineBlue zone %d%% %d...%d\n", w * 100 / nchars, ++ bluevalues[0], bluevalues[1]); ++ ++ if (w == 0) /* no baseline, something weird */ ++ return; ++ ++ /* find the upper zones */ ++ for (nblues = 2; nblues < 14; nblues += 2) { ++ w = bestblue(zuhyst, hystu, zlhyst, &bluevalues[nblues]); ++ ++ if (0) ++ fprintf(stderr, "Blue zone %d%% %d...%d\n", w * 100 / nchars, ++ bluevalues[nblues], bluevalues[nblues+1]); ++ ++ if (w * 20 < nchars) ++ break; /* don't save this zone */ ++ } ++ ++ /* find the lower zones */ ++ for (notherb = 0; notherb < 10; notherb += 2) { ++ w = bestblue(zlhyst, hystl, zuhyst, &otherblues[notherb]); ++ ++ if (0) ++ fprintf(stderr, "OtherBlue zone %d%% %d...%d\n", w * 100 / nchars, ++ otherblues[notherb], otherblues[notherb+1]); ++ ++ ++ if (w * 20 < nchars) ++ break; /* don't save this zone */ ++ } ++ ++} ++ ++/* ++ * Find the actual width of the glyph and modify the ++ * description to reflect it. Not guaranteed to do ++ * any good, may make character spacing too wide. ++ */ ++ ++void ++docorrectwidth(void) ++{ ++ int i; ++ GENTRY *ge; ++ GLYPH *g; ++ int xmin, xmax; ++ int maxwidth, minsp; ++ ++ /* enforce this minimal spacing, ++ * we limit the amount of the enforced spacing to avoid ++ * spacing the bold wonts too widely ++ */ ++ minsp = (stdhw>60 || stdhw<10)? 60 : stdhw; ++ ++ for (i = 0, g = glyph_list; i < numglyphs; i++, g++) { ++ g->oldwidth=g->scaledwidth; /* save the old width, will need for AFM */ ++ ++ if (correctwidth && g->flags & GF_USED) { ++ xmin = 5000; ++ xmax = -5000; ++ for (ge = g->entries; ge != 0; ge = ge->next) { ++ if (ge->type != GE_LINE && ge->type != GE_CURVE) ++ continue; ++ ++ if (ge->ix3 <= xmin) { ++ xmin = ge->ix3; ++ } ++ if (ge->ix3 >= xmax) { ++ xmax = ge->ix3; ++ } ++ } ++ ++ maxwidth=xmax+minsp; ++ if( g->scaledwidth < maxwidth ) { ++ g->scaledwidth = maxwidth; ++ WARNING_3 fprintf(stderr, "glyph %s: extended from %d to %d\n", ++ g->name, g->oldwidth, g->scaledwidth ); ++ } ++ } ++ } ++ ++} ++ ++/* ++ * Try to find the typical stem widths ++ */ ++ ++void ++stemstatistics(void) ++{ ++#define MINDIST 10 /* minimal distance between the widths */ ++ int hyst[MAXHYST+MINDIST*2]; ++ int best[12]; ++ int i, j, k, w; ++ int nchars; ++ int ns; ++ STEM *s; ++ GLYPH *g; ++ ++ /* start with typical stem width */ ++ ++ nchars=0; ++ ++ /* build the hystogram of horizontal stem widths */ ++ memset(hyst, 0, sizeof hyst); ++ ++ for (i = 0, g = glyph_list; i < numglyphs; i++, g++) { ++ if (g->flags & GF_USED) { ++ nchars++; ++ s = g->hstems; ++ for (j = 0; j < g->nhs; j += 2) { ++ if ((s[j].flags | s[j + 1].flags) & ST_END) ++ continue; ++ w = s[j + 1].value - s[j].value+1; ++ if(w==20) /* split stems should not be counted */ ++ continue; ++ if (w > 0 && w < MAXHYST - 1) { ++ /* ++ * handle some fuzz present in ++ * converted fonts ++ */ ++ hyst[w+MINDIST] += MINDIST-1; ++ for(k=1; kflags & GF_USED) { ++ s = g->vstems; ++ for (j = 0; j < g->nvs; j += 2) { ++ if ((s[j].flags | s[j + 1].flags) & ST_END) ++ continue; ++ w = s[j + 1].value - s[j].value+1; ++ if (w > 0 && w < MAXHYST - 1) { ++ /* ++ * handle some fuzz present in ++ * converted fonts ++ */ ++ hyst[w+MINDIST] += MINDIST-1; ++ for(k=1; knext) { ++ if(ge->type == GE_LINE || ge->type == GE_CURVE) { ++ if (ISDBG(REVERSAL)) ++ fprintf(stderr, "reverse path 0x%x <- 0x%x, 0x%x\n", ge, ge->prev, ge->bkwd); ++ ++ /* cut out the path itself */ ++ pge = ge->prev; /* GE_MOVE */ ++ if (pge == 0) { ++ fprintf(stderr, "**! No MOVE before line !!! Fatal. ****\n"); ++ exit(1); ++ } ++ nge = ge->bkwd->next; /* GE_PATH */ ++ pge->next = nge; ++ nge->prev = pge; ++ ge->bkwd->next = 0; /* mark end of chain */ ++ ++ /* remember the starting point */ ++ if(ge->flags & GEF_FLOAT) { ++ flast[0] = pge->fx3; ++ flast[1] = pge->fy3; ++ } else { ++ ilast[0] = pge->ix3; ++ ilast[1] = pge->iy3; ++ } ++ ++ /* then reinsert them in backwards order */ ++ for(cur = ge; cur != 0; cur = next ) { ++ next = cur->next; /* or addgeafter() will screw it up */ ++ if(cur->flags & GEF_FLOAT) { ++ for(i=0; i<2; i++) { ++ /* reverse the direction of path element */ ++ f = cur->fpoints[i][0]; ++ cur->fpoints[i][0] = cur->fpoints[i][1]; ++ cur->fpoints[i][1] = f; ++ f = flast[i]; ++ flast[i] = cur->fpoints[i][2]; ++ cur->fpoints[i][2] = f; ++ } ++ } else { ++ for(i=0; i<2; i++) { ++ /* reverse the direction of path element */ ++ n = cur->ipoints[i][0]; ++ cur->ipoints[i][0] = cur->ipoints[i][1]; ++ cur->ipoints[i][1] = n; ++ n = ilast[i]; ++ ilast[i] = cur->ipoints[i][2]; ++ cur->ipoints[i][2] = n; ++ } ++ } ++ addgeafter(pge, cur); ++ } ++ ++ /* restore the starting point */ ++ if(ge->flags & GEF_FLOAT) { ++ pge->fx3 = flast[0]; ++ pge->fy3 = flast[1]; ++ } else { ++ pge->ix3 = ilast[0]; ++ pge->iy3 = ilast[1]; ++ } ++ ++ ge = nge; ++ } ++ ++ } ++} ++ ++void ++reversepaths( ++ GLYPH * g ++) ++{ ++ reversepathsfromto(g->entries, NULL); ++} ++ ++/* add a kerning pair information, scales the value */ ++ ++void ++addkernpair( ++ unsigned id1, ++ unsigned id2, ++ int unscval ++) ++{ ++ static unsigned char *bits = 0; ++ static int lastid; ++ GLYPH *g = &glyph_list[id1]; ++ int i, n; ++ struct kern *p; ++ ++ if(unscval == 0 || id1 >= numglyphs || id2 >= numglyphs) ++ return; ++ ++ if( (glyph_list[id1].flags & GF_USED)==0 ++ || (glyph_list[id2].flags & GF_USED)==0 ) ++ return; ++ ++ if(bits == 0) { ++ bits = calloc( BITMAP_BYTES(numglyphs), 1); ++ if (bits == NULL) { ++ fprintf (stderr, "****malloc failed %s line %d\n", __FILE__, __LINE__); ++ exit(255); ++ } ++ lastid = id1; ++ } ++ ++ if(lastid != id1) { ++ /* refill the bitmap cache */ ++ memset(bits, 0,BITMAP_BYTES(numglyphs)); ++ p = g->kern; ++ for(i=g->kerncount; i>0; i--) { ++ n = (p++)->id; ++ SET_BITMAP(bits, n); ++ } ++ lastid = id1; ++ } ++ ++ if(IS_BITMAP(bits, id2)) ++ return; /* duplicate */ ++ ++ if(g->kerncount <= g->kernalloc) { ++ g->kernalloc += 8; ++ p = realloc(g->kern, sizeof(struct kern) * g->kernalloc); ++ if(p == 0) { ++ fprintf (stderr, "** realloc failed, kerning data will be incomplete\n"); ++ } ++ g->kern = p; ++ } ++ ++ SET_BITMAP(bits, id2); ++ p = &g->kern[g->kerncount]; ++ p->id = id2; ++ p->val = iscale(unscval) - (g->scaledwidth - g->oldwidth); ++ g->kerncount++; ++ kerning_pairs++; ++} ++ ++/* print out the kerning information */ ++ ++void ++print_kerning( ++ FILE *afm_file ++) ++{ ++ int i, j, n; ++ GLYPH *g; ++ struct kern *p; ++ ++ if( kerning_pairs == 0 ) ++ return; ++ ++ fprintf(afm_file, "StartKernData\n"); ++ fprintf(afm_file, "StartKernPairs %hd\n", kerning_pairs); ++ ++ for(i=0; iflags & GF_USED) ==0) ++ continue; ++ p = g->kern; ++ for(j=g->kerncount; j>0; j--, p++) { ++ fprintf(afm_file, "KPX %s %s %d\n", g->name, ++ glyph_list[ p->id ].name, p->val ); ++ } ++ } ++ ++ fprintf(afm_file, "EndKernPairs\n"); ++ fprintf(afm_file, "EndKernData\n"); ++} ++ ++ ++#if 0 ++ ++/* ++** This function is commented out because the information ++** collected by it is not used anywhere else yet. Now ++** it only collects the directions of contours. And the ++** direction of contours gets fixed already in draw_glyf(). ++** ++*********************************************** ++** ++** Here we expect that the paths are already closed. ++** We also expect that the contours do not intersect ++** and that curves doesn't cross any border of quadrant. ++** ++** Find which contours go inside which and what is ++** their proper direction. Then fix the direction ++** to make it right. ++** ++*/ ++ ++#define MAXCONT 1000 ++ ++void ++fixcontours( ++ GLYPH * g ++) ++{ ++ CONTOUR cont[MAXCONT]; ++ short ymax[MAXCONT]; /* the highest point */ ++ short xofmax[MAXCONT]; /* X-coordinate of any point ++ * at ymax */ ++ short ymin[MAXCONT]; /* the lowest point */ ++ short xofmin[MAXCONT]; /* X-coordinate of any point ++ * at ymin */ ++ short count[MAXCONT]; /* count of lines */ ++ char dir[MAXCONT]; /* in which direction they must go */ ++ GENTRY *start[MAXCONT], *minptr[MAXCONT], *maxptr[MAXCONT]; ++ int ncont; ++ int i; ++ int dx1, dy1, dx2, dy2; ++ GENTRY *ge, *nge; ++ ++ /* find the contours and their most upper/lower points */ ++ ncont = 0; ++ ymax[0] = -5000; ++ ymin[0] = 5000; ++ for (ge = g->entries; ge != 0; ge = ge->next) { ++ if (ge->type == GE_LINE || ge->type == GE_CURVE) { ++ if (ge->iy3 > ymax[ncont]) { ++ ymax[ncont] = ge->iy3; ++ xofmax[ncont] = ge->ix3; ++ maxptr[ncont] = ge; ++ } ++ if (ge->iy3 < ymin[ncont]) { ++ ymin[ncont] = ge->iy3; ++ xofmin[ncont] = ge->ix3; ++ minptr[ncont] = ge; ++ } ++ } ++ if (ge->frwd != ge->next) { ++ start[ncont++] = ge->frwd; ++ ymax[ncont] = -5000; ++ ymin[ncont] = 5000; ++ } ++ } ++ ++ /* determine the directions of contours */ ++ for (i = 0; i < ncont; i++) { ++ ge = minptr[i]; ++ nge = ge->frwd; ++ ++ if (ge->type == GE_CURVE) { ++ dx1 = ge->ix3 - ge->ix2; ++ dy1 = ge->iy3 - ge->iy2; ++ ++ if (dx1 == 0 && dy1 == 0) { /* a pathological case */ ++ dx1 = ge->ix3 - ge->ix1; ++ dy1 = ge->iy3 - ge->iy1; ++ } ++ if (dx1 == 0 && dy1 == 0) { /* a more pathological ++ * case */ ++ dx1 = ge->ix3 - ge->prev->ix3; ++ dy1 = ge->iy3 - ge->prev->iy3; ++ } ++ } else { ++ dx1 = ge->ix3 - ge->prev->ix3; ++ dy1 = ge->iy3 - ge->prev->iy3; ++ } ++ if (nge->type == GE_CURVE) { ++ dx2 = ge->ix3 - nge->ix1; ++ dy2 = ge->iy3 - nge->iy1; ++ if (dx1 == 0 && dy1 == 0) { /* a pathological case */ ++ dx2 = ge->ix3 - nge->ix2; ++ dy2 = ge->iy3 - nge->iy2; ++ } ++ if (dx1 == 0 && dy1 == 0) { /* a more pathological ++ * case */ ++ dx2 = ge->ix3 - nge->ix3; ++ dy2 = ge->iy3 - nge->iy3; ++ } ++ } else { ++ dx2 = ge->ix3 - nge->ix3; ++ dy2 = ge->iy3 - nge->iy3; ++ } ++ ++ /* compare angles */ ++ cont[i].direction = DIR_INNER; ++ if (dy1 == 0) { ++ if (dx1 < 0) ++ cont[i].direction = DIR_OUTER; ++ } else if (dy2 == 0) { ++ if (dx2 > 0) ++ cont[i].direction = DIR_OUTER; ++ } else if (dx2 * dy1 < dx1 * dy2) ++ cont[i].direction = DIR_OUTER; ++ ++ cont[i].ymin = ymin[i]; ++ cont[i].xofmin = xofmin[i]; ++ } ++ ++ /* save the information that may be needed further */ ++ g->ncontours = ncont; ++ if (ncont > 0) { ++ g->contours = malloc(sizeof(CONTOUR) * ncont); ++ if (g->contours == 0) { ++ fprintf(stderr, "***** Memory allocation error *****\n"); ++ exit(255); ++ } ++ memcpy(g->contours, cont, sizeof(CONTOUR) * ncont); ++ } ++} ++ ++#endif ++ ++/* ++ * ++ */ ++ +diff -ruN xserver-old/hw/xprint/extras/ttf2pt1/pt1.h xserver/hw/xprint/extras/ttf2pt1/pt1.h +--- xserver-old/hw/xprint/extras/ttf2pt1/pt1.h 1970-01-01 10:00:00.000000000 +1000 ++++ xserver/hw/xprint/extras/ttf2pt1/pt1.h 2006-06-27 13:10:26.000000000 +1000 +@@ -0,0 +1,257 @@ ++/* ++ * see COPYRIGHT ++ */ ++ ++ ++/* glyph entry, one drawing command */ ++typedef struct gentry { ++ /* this list links all GENTRYs of a GLYPH sequentially */ ++ struct gentry *next; /* double linked list */ ++ struct gentry *prev; ++ ++ /* this list links all GENTRYs of one contour - ++ * of types GE_LINE and GE_CURVE only ++ * bkwd is also reused: in the very first entry (normally ++ * of type GE_MOVE) it points to g->entries ++ */ ++ struct gentry *cntr[2]; /* double-linked circular list */ ++/* convenience handles */ ++#define bkwd cntr[0] ++#define frwd cntr[1] ++ ++ /* various extended structures used at some stage of transformation */ ++ void *ext; ++ ++ union { ++ struct { ++ int val[2][3]; /* integer values */ ++ } i; ++ struct { ++ double val[2][3]; /* floating values */ ++ } f; ++ } points; /* absolute values, NOT deltas */ ++/* convenience handles */ ++#define ipoints points.i.val ++#define fpoints points.f.val ++#define ixn ipoints[0] ++#define iyn ipoints[1] ++#define fxn fpoints[0] ++#define fyn fpoints[1] ++#define ix1 ixn[0] ++#define ix2 ixn[1] ++#define ix3 ixn[2] ++#define iy1 iyn[0] ++#define iy2 iyn[1] ++#define iy3 iyn[2] ++#define fx1 fxn[0] ++#define fx2 fxn[1] ++#define fx3 fxn[2] ++#define fy1 fyn[0] ++#define fy2 fyn[1] ++#define fy3 fyn[2] ++ ++ char flags; ++#define GEF_FLOAT 0x02 /* entry contains floating point data */ ++#define GEF_LINE 0x04 /* entry looks like a line even if it's a curve */ ++ ++ unsigned char dir; /* used to temporarily store the values for ++ * the directions of the ends of curves */ ++/* front end */ ++#define CVDIR_FUP 0x02 /* goes over the line connecting the ends */ ++#define CVDIR_FEQUAL 0x01 /* coincides with the line connecting the ++ * ends */ ++#define CVDIR_FDOWN 0x00 /* goes under the line connecting the ends */ ++#define CVDIR_FRONT 0x0F /* mask of all front directions */ ++/* rear end */ ++#define CVDIR_RSAME 0x30 /* is the same as for the front end */ ++#define CVDIR_RUP 0x20 /* goes over the line connecting the ends */ ++#define CVDIR_REQUAL 0x10 /* coincides with the line connecting the ++ * ends */ ++#define CVDIR_RDOWN 0x00 /* goes under the line connecting the ends */ ++#define CVDIR_REAR 0xF0 /* mask of all rear directions */ ++ ++ signed char stemid; /* connection to the substituted stem group */ ++ char type; ++#define GE_HSBW 'B' ++#define GE_MOVE 'M' ++#define GE_LINE 'L' ++#define GE_CURVE 'C' ++#define GE_PATH 'P' ++ ++ /* indexes of the points to be used for calculation of the tangents */ ++ signed char ftg; /* front tangent */ ++ signed char rtg; /* rear tangent, -1 means "idx 2 of the previous entry" */ ++} GENTRY; ++ ++/* stem structure, describes one [hv]stem */ ++/* acually, it describes one border of a stem */ ++/* the whole stem is a pair of these structures */ ++ ++typedef struct stem { ++ short value; /* value of X or Y coordinate */ ++ short origin; /* point of origin for curve stems */ ++ GENTRY *ge; /* entry that has (value, origin) as its first dot */ ++ /* also for all the stems the couple (value, origin) ++ * is used to determine whether a stem is relevant for a ++ * line, it's considered revelant if this tuple is ++ * equal to any of the ends of the line. ++ * ge is also used to resolve ambiguity if there is more than ++ * one line going through certain pointi, it is used to ++ * distinguish these lines. ++ */ ++ ++ short from, to; /* values of other coordinate between ++ * which this stem is valid */ ++ ++ short flags; ++ /* ordering of ST_END, ST_FLAT, ST_ZONE is IMPORTANT for sorting */ ++#define ST_END 0x01 /* end of line, lowest priority */ ++#define ST_FLAT 0x02 /* stem is defined by a flat line, not a ++ * curve */ ++#define ST_ZONE 0x04 /* pseudo-stem, the limit of a blue zone */ ++#define ST_UP 0x08 /* the black area is to up or right from ++ * value */ ++#define ST_3 0x20 /* first stem of [hv]stem3 */ ++#define ST_BLUE 0x40 /* stem is in blue zone */ ++#define ST_TOPZONE 0x80 /* 1 - top zone, 0 - bottom zone */ ++#define ST_VERT 0x100 /* vertical stem (used in substitutions) */ ++} STEM; ++ ++#define MAX_STEMS 2000 /* we can't have more stems than path ++ * elements (or hope so) */ ++#define NSTEMGRP 50 /* maximal number of the substituted stem groups */ ++ ++/* structure for economical representation of the ++ * substituted stems ++ */ ++ ++typedef struct stembounds { ++ short low; /* low bound */ ++ short high; /* high bound */ ++ char isvert; /* 1 - vertical, 0 - horizontal */ ++ char already; /* temp. flag: is aleready included */ ++} STEMBOUNDS; ++ ++struct kern { ++ unsigned id; /* ID of the second glyph */ ++ int val; /* kerning value */ ++}; ++ ++typedef struct contour { ++ short ymin, xofmin; ++ short inside; /* inside which contour */ ++ char direction; ++#define DIR_OUTER 1 ++#define DIR_INNER 0 ++} CONTOUR; ++ ++typedef struct glyph { ++ int char_no;/* Encoding of glyph */ ++ int orig_code;/* code of glyph in the font's original encoding */ ++ char *name; /* Postscript name of glyph */ ++ int xMin, yMin, xMax, yMax; /* values from TTF dictionary */ ++ int lsb; /* left sidebearing */ ++ int ttf_pathlen; /* total length of TTF paths */ ++ short width; ++ short flags; ++#define GF_USED 0x0001 /* whether is this glyph used in T1 font */ ++#define GF_FLOAT 0x0002 /* thys glyph contains floating point entries */ ++ ++ GENTRY *entries;/* doube linked list of entries */ ++ GENTRY *lastentry; /* the last inserted entry */ ++ GENTRY *path; /* beggining of the last path */ ++ int oldwidth; /* actually also scaled */ ++ int scaledwidth; ++#define MAXLEGALWIDTH 10000 ++ ++ struct kern *kern; /* kerning data */ ++ int kerncount; /* number of kerning pairs */ ++ int kernalloc; /* for how many pairs we have space */ ++ ++ STEM *hstems; /* global horiz. and vert. stems */ ++ STEM *vstems; ++ int nhs, nvs; /* numbers of stems */ ++ ++ STEMBOUNDS *sbstems; /* substituted stems for all the groups */ ++ short *nsbs; /* indexes of the group ends in the common array */ ++ int nsg; /* actual number of the stem groups */ ++ int firstsubr; /* first substistuted stems subroutine number */ ++ ++ CONTOUR *contours; /* it is not used now */ ++ int ncontours; ++ ++ int rymin, rymax; /* real values */ ++ /* do we have flat surfaces on top/bottom */ ++ char flatymin, flatymax; ++ ++} GLYPH; ++ ++/* description of a dot for calculation of its distance to a curve */ ++ ++struct dot_dist { ++ double p[2 /*X,Y*/]; /* coordinates of a dot */ ++ double dist2; /* squared distance from the dot to the curve */ ++ short seg; /* the closest segment of the curve */ ++}; ++ ++extern int stdhw, stdvw; /* dominant stems widths */ ++extern int stemsnaph[12], stemsnapv[12]; /* most typical stem width */ ++ ++extern int bluevalues[14]; ++extern int nblues; ++extern int otherblues[10]; ++extern int notherb; ++extern int bbox[4]; /* the FontBBox array */ ++extern double italic_angle; ++ ++extern GLYPH *glyph_list; ++extern int encoding[]; /* inverse of glyph[].char_no */ ++ ++/* prototypes of functions */ ++void rmoveto( int dx, int dy); ++void rlineto( int dx, int dy); ++void rrcurveto( int dx1, int dy1, int dx2, int dy2, int dx3, int dy3); ++void assertpath( GENTRY * from, char *file, int line, char *name); ++ ++void fg_rmoveto( GLYPH * g, double x, double y); ++void ig_rmoveto( GLYPH * g, int x, int y); ++void fg_rlineto( GLYPH * g, double x, double y); ++void ig_rlineto( GLYPH * g, int x, int y); ++void fg_rrcurveto( GLYPH * g, double x1, double y1, ++ double x2, double y2, double x3, double y3); ++void ig_rrcurveto( GLYPH * g, int x1, int y1, ++ int x2, int y2, int x3, int y3); ++void g_closepath( GLYPH * g); ++ ++void pathtoint( GLYPH *g); ++void ffixquadrants( GLYPH *g); ++void flattencurves( GLYPH * g); ++int checkcv( GENTRY * ge, int dx, int dy); ++void iclosepaths( GLYPH * g); ++void fclosepaths( GLYPH * g); ++void smoothjoints( GLYPH * g); ++void buildstems( GLYPH * g); ++void fstraighten( GLYPH * g); ++void istraighten( GLYPH * g, int zigonly); ++void isplitzigzags( GLYPH * g); ++void fsplitzigzags( GLYPH * g); ++void fforceconcise( GLYPH * g); ++void iforceconcise( GLYPH * g); ++void reversepathsfromto( GENTRY * from, GENTRY * to); ++void reversepaths( GLYPH * g); ++void dumppaths( GLYPH * g, GENTRY *start, GENTRY *end); ++void print_glyph( int glyphno); ++int print_glyph_subs( int glyphno, int startid); ++void print_glyph_metrics( int code, int glyphno); ++void findblues(void); ++void stemstatistics(void); ++void docorrectwidth(void); ++void addkernpair( unsigned id1, unsigned id2, int unscval); ++void print_kerning( FILE *afm_file); ++ ++int fcrossrayscv( double curve[4][2], double *max1, double *max2); ++int fcrossraysge( GENTRY *ge1, GENTRY *ge2, double *max1, double *max2, ++ double crossdot[2][2]); ++double fdotsegdist2( double seg[2][2], double dot[2]); ++double fdotcurvdist2( double curve[4][2], struct dot_dist *dots, int ndots, double *maxp); ++void fapproxcurve( double cv[4][2], struct dot_dist *dots, int ndots); +diff -ruN xserver-old/hw/xprint/extras/ttf2pt1/README.FIRST xserver/hw/xprint/extras/ttf2pt1/README.FIRST +--- xserver-old/hw/xprint/extras/ttf2pt1/README.FIRST 1970-01-01 10:00:00.000000000 +1000 ++++ xserver/hw/xprint/extras/ttf2pt1/README.FIRST 2006-06-27 13:10:26.000000000 +1000 +@@ -0,0 +1,4 @@ ++To get the plain-text README and installation guides run: ++ ++ make docs ++ +diff -ruN xserver-old/hw/xprint/extras/ttf2pt1/README.html xserver/hw/xprint/extras/ttf2pt1/README.html +--- xserver-old/hw/xprint/extras/ttf2pt1/README.html 1970-01-01 10:00:00.000000000 +1000 ++++ xserver/hw/xprint/extras/ttf2pt1/README.html 2006-06-27 13:10:26.000000000 +1000 +@@ -0,0 +1,1182 @@ ++ ++ ++ ++TTF2PT1 - A True Type to PostScript Type 1 Converter ++ ++ ++ ++ ++

++ ++TTF2PT1 - A True Type to PostScript Type 1 Font Converter ++ ++

++ ++ ++ ++[ ++
++ ++ Based on ttf2pfa by Andrew Weeks, and help from Frank Siegert. ++
++ Modification by Mark Heath. ++
++ Further modification by Sergey Babkin. ++
++ The Type1 assembler by I. Lee Hetherington with modifications by ++ Kai-Uwe Herbing. ++ ++
++] ++
++

++ ++Ever wanted to install a particular font on your XServer but only could find ++the font you are after in True Type Format? ++

++ ++Ever asked comp.fonts for a True Type to Type 1 converter and got a List ++of Commercial software that doesn't run on your Operating System? ++

++ ++Well, this program should be the answer. This program is written in C (so it ++should be portable) and therefore should run on any OS. The only limitation ++is that the program requires some method of converting Big endian integers into ++local host integers so the network functions ntohs and ntohl are used. These ++can be replaced by macros if your platform doesn't have them. ++Of course the target platform requires a C compiler and command line ability. ++

++ ++ ++Ttf2pt1 is a font converter from the True Type format (and some other formats ++supported by the FreeType library as well) to the Adobe Type1 format. ++

++ ++The versions 3.0 and later got rather extensive post-processing algorithm that ++brings the converted fonts to the requirements of the Type1 standard, tries to ++correct the rounding errors introduced during conversions and some simple ++kinds of bugs that are typical for the public domain TTF fonts. It ++also generates the hints that enable much better rendering of fonts in ++small sizes that are typical for the computer displays. But everything ++has its price, and some of the optimizations may not work well for certain ++fonts. That's why the options were added to the converter, to control ++the performed optimizations. ++

++ ++ ++The converter is simple to run, just: ++

++ ++ ++

++ ttf2pt1 [-options] ttffont.ttf [Fontname] ++
++or ++
++ ttf2pt1 [-options] ttffont.ttf - ++
++ ++

++ ++ ++The first variant creates the file Fontname.pfa (or Fontname.pfb if the ++option '-b' was used) with the converted font and Fontname.afm with the ++font metrics, the second one prints the font or another file (if the option ++'-G' was used) on the standard output from where it can be immediately ++piped through some filter. If no Fontname is specified for the first ++variant, the name is generated from ttffont by replacing the .ttf ++filename suffix. ++

++ ++Most of the time no options are neccessary (with a possible exception ++of '-e'). But if there are some troubles with the resulting font, they ++may be used to control the conversion. ++The options are: ++

++ ++ ++ ++-a - Include all the glyphs from the source file into the converted ++ file. If this option is not specified then only the glyphs that have ++ been assigned some encoding are included, because the rest of glyphs ++ would be inaccessible anyway and would only consume the disk space. ++ But some applications are clever enough to change the encoding on ++ the fly and thus use the other glyphs, in this case they could ++ benefit from using this option. But there is a catch: the X11 library ++ has rather low limit for the font size. Including more glyphs increases ++ the file size and thus increases the chance of hitting this limit. ++ See app/X11/README for the description of a ++ patch to X11 which fixes this problem. ++

++ ++ ++-b - Encode the resulting font to produce a ready .pfb file. ++

++ ++ ++-d suboptions - Debugging options. The suboptions are: ++

++ ++

++ a - Print out the absolute coordinates of dots in outlines. Such ++ a font can not be used by any program (that's why this option is ++ incompatible with '-e') but it has proven to be a valuable debuging ++ information. ++

++ ++ r - Do not reverse the direction of outlines. The TTF fonts have ++ the standard direction of outlines opposite to the Type1 fonts. So ++ they should be reversed during proper conversion. This option ++ may be used for debugging or to handle a TTF font with wrong ++ direction of outlines (possibly, converted in a broken way from ++ a Type1 font). The first signs of the wrong direction are the ++ letters like "P" or "B" without the unpainted "holes" inside. ++

++

++ ++ ++-e - Assemble the resulting font to produce a ready .pfa file. ++ ++ [ S.B.: Personally I don't think that this option is particularly useful. ++ The same result may be achieved by piping the unassembled data ++ through t1asm, the Type 1 assembler. And, anyways, it's good to ++ have the t1utils package handy. But Mark and many users think that ++ this functionality is good and it took not much time to add this option. ] ++ ++

++ ++ ++-F - Force the Unicode encoding: any type of MS encoding specified ++ in the font is ignored and the font is treated like it has Unicode ++ encoding. WARNING: this option is intended for buggy fonts ++ which actually are in Unicode but are marked as something else. The ++ effect on the other fonts is unpredictable. ++

++ ++ ++-G suboptions - File generation options. The suboptions may be lowercase ++ or uppercase, the lowercase ones disable the generation of particular ++ files, the corresponding uppercase suboptions enable the generation of the ++ same kind of files. If the result of ttf2pt1 is requested to be printed on ++ the standard output, the last enabling suboption of -G determines ++ which file will be written to the standard output and the rest of files ++ will be discarded. For example, -G A will request the AFM file. ++ The suboptions to disable/enable the generation of the files are: ++

++ ++

++ f/F - The font file. Depending on the other options this file ++ will have one of the suffixes .t1a, .pfa or .pfb. If the conversion result ++ is requested on the standard output ('-' is used as the output file name) ++ then the font file will also be written there by default, if not overwritten ++ by another suboption of -G. ++ Default: enabled ++

++ ++ a/A - The Adobe font metrics file (.afm). ++ Default: enabled ++

++ ++ e/E - The dvips encoding file (.enc). ++ Default: disabled ++

++ ++

++ ++ ++-l language[+argument] - Extract the fonts for the specified language from a ++ multi-language Unicode font. If this option is not used the converter ++ tries to guess the language by the values of the shell variable LANG. ++ If it is not able to guess the language by LANG it tries all the ++ languages in the order they are listed. ++

++ ++ After the plus sign an optional argument for the language extractor ++ may be specified. The format of the argument is absolutely up to ++ the particular language converter. The primary purpose of the ++ argument is to support selection of planes for the multi-plane ++ Eastern encodings but it can also be used in any other way. The ++ language extractor may decide to add the plane name in some form ++ to the name of the resulting font. None of the currently supported ++ languages make any use of the argument yet. ++

++ ++ As of now the following languages are supported: ++
++   latin1 - for all the languages using the Latin-1 encoding ++
++   latin2 - for the Central European languages ++
++   latin4 - for the Baltic languages ++
++   latin5 - for the Turkish language ++
++   cyrillic - for the languages with Cyrillic alphabet ++
++   russian - historic synonym for cyrillic ++
++   bulgarian - historic synonym for cyrillic ++
++   adobestd - for the AdobeStandard encoding used by TeX ++
++   plane+argument - to select one plane from a multi-byte encoding ++

++ ++ The argument of the "plane" language may be in one of three forms: ++

++   plane+pid=<pid>,eid=<eid> ++
++   plane+pid=<pid>,eid=<eid>,<plane_number> ++
++   plane+<plane_number> ++

++ ++ Pid (TTF platform id) and eid (TTF encoding id) select a particular ++ TTF encoding table in the original font. They are specified as decimal ++ numbers. If this particular encoding table is not present in the font ++ file then the conversion fails. The native ("ttf") front-end parser supports ++ only pid=3 (Windows platform), the FreeType-based ("ft") front-end supports ++ any platform. If pid/eid is not specified then the TTF encoding table is ++ determined as usual: Unicode encoding if it's first or an 8-bit encoding ++ if not (and for an 8-bit encoding the plane number is silently ignored). ++ To prevent the converter from falling back to an 8-bit encoding, specify ++ the Unicode pid/eid value explicitly. ++

++ ++ Plane_number is a hexadecimal (if starts with "0x") or decimal number. ++ It gives the values of upper bytes for which 256 characters will be ++ selected. If not specified, defaults to 0. It is also used as a font ++ name suffix (the leading "0x" is not included into the suffix). ++

++ ++ ++ NOTE: ++ ++ It seems that many Eastern fonts use features of the TTF format that are ++ not supported by the ttf2pt1's built-in front-end parser. Because of ++ this for now we recommend using the FreeType-based parser (option ++ '-p ft') with the "plane" language. ++

++ ++ ++ ++ ++ NOTE: ++ You may notice that the language names are not uniform: some are the ++ names of particular languages and some are names of encodings. This ++ is because of the different approaches. The original idea was to ++ implement a conversion from Unicode to the appropriate Windows ++ encoding for a given language. And then use the translation tables ++ to generate the fonts in whatever final encodings are needed. This ++ would allow to pile together the Unicode fonts and the non-Unicode ++ Windows fonts for that language and let the program to sort them out ++ automatically. And then generate fonts in all the possible encodings ++ for that language. An example of this approach is the Russian language ++ support. But if there is no multiplicity of encodings used for some ++ languages and if the non-Unicode fonts are not considered important ++ by the users, another way would be simpler to implement: just provide ++ only one table for extraction of the target encoding from Unicode ++ and don't bother with the translation tables. The latin* "languages" ++ are examples of this approach. If somebody feels that he needs the ++ Type1 fonts both in Latin-* and Windows encodings he or she is absolutely ++ welcome to submit the code to implement it. ++

++ ++ WARNING: ++ Some of the glyphs included into the AdobeStandard encoding are not ++ included into the Unicode standard. The most typical examples of such ++ glyphs are ligatures like 'fi', 'fl' etc. Because of this the font ++ designers may place them at various places. The converter tries to ++ do its best, if the glyphs have honest Adobe names and/or are ++ placed at the same codes as in the Microsoft fonts they will be ++ picked up. Otherwise a possible solution is to use the option '-L' ++ with an external map. ++

++ ++ ++-L file[+[pid=<pid>,eid=<eid>,][plane]] - Extract the fonts for the specified ++ language from a multi-language font using the map from this file. This is ++ rather like the option '-l' but the encoding map is not ++ compiled into the program, it's taken from that file, so it's ++ easy to edit. Examples of such files are provided in ++ maps/adobe-standard-encoding.map, CP1250.map. (NOTE: ++ the 'standard encoding' map does not include all the glyphs of the ++ AdobeStandard encoding, it's provided only as an example.) The ++ description of the supported map formats is in the file ++ maps/unicode-sample.map. ++

++ ++ Likewise to '-l', an argument may be specified after the map file ++ name. But in this case the argument has fixed meaning: it selects the ++ original TTF encoding table (the syntax is the same as in '-l plane') ++ and/or a plane of the map file. The plane name also gets added after dash ++ to the font name. The plane is a concept used in the Eastern fonts with big ++ number of glyphs: one TTF font gets divided into multiple Type1 fonts, ++ each containing one plane of up to 256 glyphs. But with a little ++ creativity this concept may be used for other purposes of combining ++ multiple translation maps into one file. To extract multiple planes ++ from a TTF font ttf2pt1 must be run multiple times, each time with ++ a different plane name specified. ++

++ ++ The default original TTF encoding table used for the option '-L' is ++ Unicode. The map files may include directives to specify different original ++ TTF encodings. However if the pid/eid pair is specified with ++ it overrides any original encoding specified in the map file. ++

++ ++ ++-m type=value - Set maximal or minimal limits of resources. ++ These limits control the the font generation by limiting the resources ++ that the font is permitted to require from the PostScript interpreter. ++ The currently supported types of limits are: ++

++ ++

++ h - the maximal hint stack depth for the substituted hints. ++ The default value is 128, according to the limitation in X11. This seems to ++ be the lowest (and thus the safest) widespread value. To display the ++ hint stack depth required by each glyph in a .t1a file use the script ++ scripts/cntstems.pl. ++

++

++ ++ ++-O suboptions - Outline processing options. The suboptions ++ may be lowercase or uppercase, the lowercase ones disable the features, ++ the corresponding uppercase suboptions enable the same features. ++ The suboptions to disable/enable features are: ++

++ ++

++ b/B - Guessing of the ForceBold parameter. This parameter helps ++ the Type1 engine to rasterize the bold fonts properly at small sizes. ++ But the algorithm used to guess the proper value of this flag makes ++ that guess based solely on the font name. In rare cases that may cause ++ errors, in these cases you may want to disable this guessing. ++ Default: enabled ++

++ ++ h/H - Autogeneration of hints. The really complex outlines ++ may confuse the algorithm, so theoretically it may be useful ++ sometimes to disable them. Although up to now it seems that ++ even bad hints are better than no hints at all. ++ Default: enabled ++

++ ++ u/U - Hint substitution. Hint substitution is a technique ++ permitting generation of more detailed hints for the rasterizer. It allows ++ to use different sets of hints for different parts of a glyph and change ++ these sets as neccessary during rasterization (that's why "substituted"). ++ So it should improve the quality of the fonts rendered at small sizes. ++ But there are two catches: First, the X11 library has rather low limit for ++ the font size. More detailed hints increase the file size and thus increase ++ the chance of hitting this limit (that does not mean that you shall hit it ++ but you may if your fonts are particularly big). This is especially ++ probable for Unicode fonts converted with option '-a', so you may want to ++ use '-a' together with '-Ou'. See app/X11/README for the description of ++ a patch to X11 which fixes this problem. Second, some rasterizers (again, ++ X11 is the typical example) have a limitation for total number of hints ++ used when drawing a glyph (also known as the hint stack depth). If that ++ stack overflows the glyph is ignored. Starting from version 3.22 ttf2pt1 ++ uses algorithms to minimizing this depth, with the trade-off of slightly ++ bigger font files. The glyphs which still exceed the limit set by option ++ '-mh' have all the substituted hints removed and only base hints left. ++ The algorithms seem to have been refined far enough to make the fonts with ++ substituted hints look better than the fonts without them or at least the ++ same. Still if the original fonts are not well-designed the detailed ++ hinting may emphasize the defects of the design, such as non-even thickness ++ of lines. So provided that you are not afraid of the X11 bug the best idea ++ would be to generate a font with this feature and without it, then compare ++ the results using the program other/cmpf (see the description ++ in other/README) and decide which one looks better. ++ Default: enabled ++

++ ++ o/O - Space optimization of the outlines' code. This kind of optimization ++ never hurts, and the only reason to disable this feature is for comparison ++ of the generated fonts with the fonts generated by the previous versions of ++ converter. Well, it _almost_ never hurts. As it turned out there exist ++ some brain-damaged printers which don't understand it. Actually this ++ feature does not change the outlines at all. The Type 1 font manual ++ provides a set of redundant operators that make font description shorter, ++ such as '10 hlineto' instead of '0 10 rlineto' to describe a horizontal ++ line. This feature enables use of these operators. ++ Default: enabled ++

++ ++ s/S - Smoothing of outlines. If the font is broken in some ++ way (even the ones that are not easily noticeable), such smoothing ++ may break it further. So disabling this feature is the first thing to be ++ tried if some font looks odd. But with smoothing off the hint generation ++ algorithms may not work properly too. ++ Default: enabled ++

++ ++ t/T - Auto-scaling to the 1000x1000 Type1 standard matrix. The ++ TTF fonts are described in terms of an arbitrary matrix up to ++ 4000x4000. The converted fonts must be scaled to conform to ++ the Type1 standard. But the scaling introduces additional rounding ++ errors, so it may be curious sometimes to look at the font in its ++ original scale. ++ Default: enabled ++

++ ++ v/V - Do vectorization on the bitmap fonts. Functionally ++ "vectorization" is the same thing as "autotracing", a different word is ++ used purely to differentiate it from the Autotrace library. It tries to ++ produce nice smooth outlines from bitmaps. This feature is still a work ++ in progress though the results are already mostly decent. ++ Default: disabled ++

++ ++ w/W - Glyphs' width corection. This option is designed to be ++ used on broken fonts which specify too narrow widths for the ++ letters. You can tell that a font can benefit from this option ++ if you see that the characters are smashed together without ++ any whitespace between them. This option causes the converter ++ to set the character widths to the actual width of this character ++ plus the width of a typical vertical stem. But on the other hand ++ the well-designed fonts may have characters that look better if ++ their widths are set slightly narrower. Such well-designed fonts ++ will benefit from disabling this feature. You may want to convert ++ a font with and without this feature, compare the results and ++ select the better one. This feature may be used only on proportional ++ fonts, it has no effect on the fixed-width fonts. ++ Default: disabled ++

++ ++ z/Z - Use the Autotrace library on the bitmap fonts. The results ++ are horrible and the use of this option is not recommended. This option is ++ present for experimental purposes. It may change or be removed in the ++ future. The working tracing can be achieved with option -OV. ++ Default: disabled ++

++

++ ++ ++-p parser_name - Use the specified front-end parser to read the font file. ++ If this option is not used, ttf2pt1 selects the parser automatically based ++ on the suffix of the font file name, it uses the first parser in its ++ list that supports this font type. Now two parsers are supported: ++

++ ++   ttf - built-in parser for the ttf files (suffix .ttf) ++
++   bdf - built-in parser for the BDF files (suffix .bdf) ++
++   ft - parser based on the FreeType-2 library (suffixes .ttf, ++ .otf, .pfa, .pfb) ++

++ ++ The parser ft is NOT linked in by default. See Makefile ++ for instructions how to enable it. We do no support this parser on ++ Windows: probably it will work but nobody tried and nobody knows how ++ to build it. ++

++ ++ The conversion of the bitmap fonts (such as BDF) is simplistic yet, ++ producing jagged outlines. When converting such fonts, it might be ++ a good idea to turn off the hint substitution (using option -Ou) ++ because the hints produced will be huge but not adding much to the ++ quality of the fonts. ++

++ ++ ++-u number - Mark the font with this value as its ++ UniqueID. The UniqueID is used by the printers with the hard disks ++ to cache the rasterized characters and thus significantly ++ speed-up the printing. Some of those printers just can't ++ store the fonts without UniqueID on their disk.The problem ++ is that the ID is supposed to be unique, as it name says. And ++ there is no easy way to create a guaranteed unique ID. Adobe specifies ++ the range 4000000-4999999 for private IDs but still it's difficult ++ to guarantee the uniqueness within it. So if you don't really need the ++ UniqueID don't use it, it's optional. Luckily there are a few millions of ++ possible IDs, so the chances of collision are rather low. ++ If instead of the number a special value 'A' is given ++ then the converter generates the value of UniqueID automatically, ++ as a hash of the font name. (NOTE: in the version 3.22 the ++ algorithm for autogeneration of UniqueID was changed to fit the values ++ into the Adobe-spacified range. This means that if UniqueIDs were used ++ then the printer's cache may need to be flushed before replacing the ++ fonts converted by an old version with fonts converted by a newer version). ++ A simple way to find if any of the fonts in a given directory have ++ duplicated UniqueIDs is to use the command: ++

++ ++   cat *.pf[ab] | grep UniqueID | sort | uniq -c | grep -v ' 1 ' ++

++ ++ Or if you use scripts/convert it will do that for you automatically ++ plus it will also give the exact list of files with duplicate UIDs. ++

++ ++ ++-v size - Re-scale the font to get the size of a typical uppercase ++ letter somewhere around the specified size. Actually, it re-scales ++ the whole font to get the size of one language-dependent letter to be ++ at least of the specified size. Now this letter is "A" in all the ++ supported languages. The size is specified in the points of the ++ Type 1 coordinate grids, the maximal value is 1000. This is an ++ experimental option and should be used with caution. It tries to ++ increase the visible font size for a given point size and thus make ++ the font more readable. But if overused it may cause the fonts to ++ look out of scale. As of now the interesting values of size for ++ this option seem to be located mostly between 600 and 850. This ++ re-scaling may be quite useful but needs more experience to ++ understand the balance of its effects. ++

++ ++ ++-W level - Select the verbosity level of the warnings. ++ Currently the levels from 0 to 4 are supported. Level 0 means no warnings ++ at all, level 4 means all the possible warnings. The default level is 3. ++ Other levels may be added in the future, so using the level number 99 is ++ recommended to get all the possible warnings. Going below level 2 is ++ not generally recommended because you may miss valuable information about ++ the problems with the fonts being converted. ++

++ ++ ++Obsolete option: ++-A - Print the font metrics (.afm file) instead of the font on STDOUT. ++ Use -GA instead. ++

++ ++ ++Very obsolete option: ++
++ The algorithm that implemented the forced fixed width had major ++ flaws, so it was disabled. The code is still in the program and ++ some day it will be refined and returned back. Meanwhile the ++ option name '-f' was reused for another option. The old version was: ++
++-f - Don't try to force the fixed width of font. Normally the converter ++ considers the fonts in which the glyph width deviates by not more ++ than 5% as buggy fixed width fonts and forces them to have really ++ fixed width. If this is undesirable, it can be disabled by this option. ++

++ ++ ++The .pfa font format supposes that the description of the characters ++is binary encoded and encrypted. This converter does not encode or ++encrypt the data by default, you have to specify the option '-e' ++or use the t1asm program to assemble (that means, encode and ++encrypt) the font program. The t1asm program that is included with ++the converter is actually a part of the t1utils package, rather old ++version of which may be obtained from ++

++ ++

++ ++ http://ttf2pt1.sourceforge.net/t1utils.tar.gz ++ ++
++

++ ++Note that t1asm from the old version of that package won't work properly ++with the files generated by ttf2pt1 version 3.20 and later. Please use ++t1asm packaged with ttf2pt1 or from the new version t1utils ++instead. For a newer version of t1utils please look at ++

++ ++

++ ++ http://www.lcdf.org/~eddietwo/type/ ++ ++
++

++ ++ ++ ++So, the following command lines: ++

++ ++

++ ttf2pt1 -e ttffont.ttf t1font ++
++ ttf2pt1 ttffont.ttf - | t1asm >t1font.pfa ++
++

++ ++represent two ways to get a working font. The benefit of the second form ++is that other filters may be applied to the font between the converter ++and assembler. ++

++ ++ ++

++Installation and deinstallation of the converter ++

++ ++ ++The converter may be easily installed systemwide with ++ ++
++ make install ++
++ ++and uninstalled with ++ ++
++ make uninstall ++
++ ++By default the Makefile is configured to install in the hierarchy ++of directory /usr/local. This destination directory as well as ++the structure of the hierarchy may be changed by editing the Makefile. ++ ++

++Installation of the fonts ++

++ ++ ++Running the converter manually becomes somewhat boring if it has to ++be applied to a few hundreds of fonts and then you have to generate the ++fonts.scale and/or Fontmap files. The FONTS file describes how to use ++the supplied scripts to handle such cases easily. It also discusses ++the installation of the fonts for a few widespread programs. ++

++ ++

++Other utilities ++

++ ++ ++A few other small interesting programs that allow a cloase look at ++the fonts are located in the subdirectory 'other'. They ++are described shortly in others/README. ++

++ ++

++Optional packages ++

++ ++ ++Some auxiliary files are not needed by everyone and are big enough that ++moving them to a separate package speeds up the downloads of the main ++package significantly. As of now we have one such optional package: ++

++ ++  ttf2pt1-chinese - contains the Chinese conversion maps ++

++ ++The general versioning policy for the optional packages is the following: ++These packages may have no direct dependency on the ttf2pt1 version. ++But they may be updated in future, as well as some versions of optional ++packages may have dependencies on certain versions of ttf2pt1. ++To avoid unneccessary extra releases on one hand and keep the updates in ++sync with the ttf2pt1 itself on the other hand, a new version of an optional ++package will be released only if there are any changes to it and it will be ++given the same version number as ttf2pt1 released at the same time. So not ++every release of ttf2pt1 would have a corresponding release of all optional ++packages. For example, to get the correct version of optional packages for an ++imaginary release 8.3.4 of ttf2pt1 you would need to look for optional ++packages of the highest version not higher than (but possibly equal to) 8.3.4. ++

++ ++

++TO DO: ++

++ ++ ++
    ++
  • Improve hinting. ++
  • Improve the auto-tracing of bitmaps. ++
  • Implement the family-level hints. ++
  • Add generation of CID-fonts. ++
  • Handle the composite glyphs with relative base points. ++
  • Preserve the relative width of stems during scaling to 1000x1000 matrix. ++
  • Add support for bitmap TTF fonts. ++
  • Implement better support of Asian encodings. ++
  • Implement automatic creation of ligatures. ++
++ ++

++TROUBLESHOOTING AND BUG REPORTS ++

++ ++ ++ ++ ++Have problems with conversion of some font ? The converter dumps core ? Or your ++printer refuses to understand the converted fonts ? Or some characters are ++missing ? Or some characters look strange ? ++

++ ++Send the bug reports to the ttf2pt1 development mailing list at ++ttf2pt1-devel@lists.sourceforge.net. ++

++ ++Try to collect more information about the problem and include it into ++the bug report. (Of course, even better if you would provide a ready ++fix, but just a detailed bug report is also good). Provide detailed ++information about your problem, this will speed up the response greatly. ++Don't just write "this font looks strange after conversion" but describe ++what's exactly wrong with it: for example, what characters look wrong ++and what exactly is wrong about their look. Providing a link to the ++original font file would be also a good idea. Try to do a little ++troublehooting and report its result. This not only would help with ++the fix but may also give you a temporary work-around for the bug. ++

++ ++First, enable full warnings with option '-W99', save them to ++a file and read carefully. Sometimes the prolem is with a not implemented ++feature which is reported in the warnings. Still, reporting about such ++problems may be a good idea: some features were missed to cut corners, ++in hope that no real font is using them. So a report about a font using ++such a feature may motivate someone to implement it. Of course, you ++may be the most motivated person: after all, you are the one wishing ++to convert that font. ;-) Seriously, the philosophy "scrath your own itch" ++seems to be the strongest moving force behind the Open Source software. ++

++ ++The next step is playing with the options. This serves a dual purpose: ++on one hand, it helps to localize the bug, on the other hand you may be ++able to get a working version of the font for the meantime while the ++bug is being fixed. The typical options to try out are: first '-Ou', if ++it does not help then '-Os', then '-Oh', then '-Oo'. ++They are described in a bit more detail above. Try them one by one ++and in combinations. See if with them the resulting fonts look better. ++

++ ++On some fonts ttf2pt1 just crashes. Commonly that happens because the ++font being converted is highly defective (although sometimes the bug ++is in ttf2pt1 itself). In any case it should not crash, so the reports ++about such cases will help to handle these defects properly in future. ++

++ ++We try to respond to the bug reports in a timely fashion but alas, this ++may not always be possible, especially if the problem is complex. ++This is a volunteer project and its resources are limited. Because ++of this we would appreciate bug reports as detailed as possible, ++and we would appreciate the ready fixes and contributions even more. ++

++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++

++CONTACTS ++

++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ttf2pt1-announce@lists.sourceforge.net ++
++ The mailing list with announcements about ttf2pt1. It is a moderated mailing ++ with extremely low traffic. Everyone is encouraged to subscribe to keep in ++ touch with the current status of project. To subscribe use the Web interface ++ at http://lists.sourceforge.net/mailman/listinfo/ttf2pt1-announce. ++ If you have only e-mail access to the Net then send a subscribe request to ++ the development mailing list ttf2pt1-devel@lists.sourceforge.net and somebody ++ will help you with subscription. ++

++ ++ ++ ++ttf2pt1-devel@lists.sourceforge.net ++
++ ++ttf2pt1-users@lists.sourceforge.net ++
++ The ttf2pt1 mailing lists for development and users issues. They have not ++ that much traffic either. To subscribe use the Web interface at ++ http://lists.sourceforge.net/mailman/listinfo/ttf2pt1-devel ++ and http://lists.sourceforge.net/mailman/listinfo/ttf2pt1-users. ++ If you have only e-mail access to the Net then send a subscribe request to ++ the development mailing list ttf2pt1-devel@lists.sourceforge.net and somebody ++ will help you with subscription. ++

++ ++ ++ ++mheath@netspace.net.au ++
++ Mark Heath ++

++ ++ ++A.Weeks@mcc.ac.uk ++
++ Andrew Weeks ++

++ ++ ++babkin@users.sourceforge.net (preferred)
++ ++sab123@hotmail.com ++
++ ++http://members.bellatlantic.net/~babkin ++
++ Sergey Babkin ++

++ ++

++SEE ALSO ++

++ ++ ++ ++ ++ ++http://ttf2pt1.sourceforge.net ++
++ The main page of the project. ++

++ ++ ++http://www.netspace.net.au/~mheath/ttf2pt1/ ++
++ The old main page of the project. ++

++ ++ ++ ++ ++http://sourceforge.net/projects/gnuwin32 ++
++ Precompiled binaries for Windows. ++

++ ++ ++http://www.lcdf.org/~eddietwo/type/ ++
++ The home page of the Type 1 utilities package. ++

++ ++ ++http://www.rightbrain.com/pages/books.html ++
++ The first book about PostScript on the Web, "Thinking in PostScript". ++

++ ++ ++http://fonts.apple.com/TTRefMan/index.html ++
++ The True Type reference manual. ++

++ ++ ++http://partners.adobe.com/asn/developer/PDFS/TN/PLRM.pdf ++
++ Adobe PostScript reference manual. ++

++ ++ ++http://partners.adobe.com/asn/developer/PDFS/TN/T1_SPEC.PDF ++
++ Specification of the Type 1 font format. ++

++ ++ ++http://partners.adobe.com/asn/developer/PDFS/TN/5015.Type1_Supp.pdf ++
++ The Type 1 font format supplement. ++

++ ++ ++http://partners.adobe.com/asn/developer/PDFS/TN/5004.AFM_Spec.pdf ++
++ Specification of the Adobe font metrics file format. ++

++ ++ ++http://www.cs.wpi.edu/~matt/courses/cs563/talks/surface/bez_surf.html ++
++ ++http://www.cs.wpi.edu/~matt/courses/cs563/talks/curves.html ++
++ Information about the Bezier curves. ++

++ ++ ++http://www.neuroinformatik.ruhr-uni-bochum.de/ini/PEOPLE/rmz/t1lib/t1lib.html ++
++ A stand-alone library supporting the Type1 fonts. Is neccessary ++ to compile the programs other/cmpf and other/dmpf. ++

++ ++ ++http://www.freetype.org ++
++ A library supporting the TTF fonts. Also many useful TTF programs ++ are included with it. ++

++ ++ ++http://heliotrope.homestead.com/files/printsoft.html ++
++ Moses Gold's collection of links to printing software. ++

++ ++ ++http://linuxartist.org/fonts/ ++
++ Collection of font-related links. ++

++ ++


++
++ ++ ++Following is the Readme of ttf2pfa (true type to type 3 font converter) It ++covers other issues regarding the use of this software. Please note that ++although ttf2pfa is a public domain software, ttf2pt1 ++is instead covered by an Open Source license. See the COPYRIGHT ++file for details. ++

++ ++Please note also that ttf2pfa has not been maintained for a long time. ++All of its functionality has been integrated into ttf2pt1 and all the ++development moved to ttf2pt1, including Andrew Weeks, the author of ++ttf2pfa. Ttf2pfa is provided for historical reasons only. Please use ++ttf2pt1 instead. ++ ++


++ ++ ++

++True Type to Postscript Font converter ++

++ ++ ++My mind is still reeling from the discovery that I was able to write ++this program. What it does is it reads a Microsoft TrueType font and ++creates a Postscript font. '_A_ postscript font', that is, not necessarily ++the same font, you understand, but a fair imitation. ++

++ ++Run it like this: ++

++ ++

++ ttf2pfa fontfile.ttf fontname ++
++

++ ++The first parameter is the truetype filename, the second is a stem for ++the output file names. The program will create a fontname.pfa containing ++the Postscript font and a fontname.afm containing the metrics. ++

++ ++The motivation behind this is that in Linux if you do not have a ++Postscript printer, but only some other printer, you can only print ++Postscript by using Ghostscript. But the fonts that come with ++Ghostscript are very poor (they are converted from bitmaps and look ++rather lumpy). This is rather frustrating as the PC running Linux ++probably has MS-Windows as well and will therefore have truetype fonts, ++but which are quite useless with Linux, X or Ghostscript. ++

++ ++The program has been tested on over a hundred different TrueType fonts ++from various sources, and seems to work fairly well. The converted ++characters look OK, and the program doesn't seem to crash any more. I'm ++not sure about the AFM files though, as I have no means to test them. ++

++ ++The fonts generated will not work with X, as the font rasterizer that ++comes with X only copes with Type 1 fonts. If I have the time I may ++modify ttf2pfa to generate Type 1s. ++

++ ++

++Copyright issues ++

++ ++ ++I am putting this program into the public domain, so don't bother ++sending me any money, I'd only have to declare it for income tax. ++

++ ++Copyright on fonts, however, is a difficult legal question. Any ++copyright statements found in a font will be preserved in the output. ++Whether you are entitled to translate them at all I don't know. ++

++ ++If you have a license to run a software package, like say MS-Windows, on ++your PC, then you probably have a right to use any part of it, including ++fonts, on that PC, even if not using that package for its intended ++purpose. ++

++ ++I am not a lawyer, however, so this is not a legal opinion, and may be ++garbage. ++

++ ++There shouldn't be a any problem with public domain fonts. ++

++ ++

++About the Program ++

++ ++ ++It was written in C on a IBM PC running Linux. ++

++ ++The TrueType format was originally developed by Apple for the MAC, which ++has opposite endianness to the PC, so to ensure compatibility 16 and 32 ++bit fields are the wrong way round from the PC's point of view. This is ++the reason for all the 'ntohs' and 'ntohl' calls. Doing it this way ++means the program will also work on big-endian machines like Suns. ++

++ ++I doubt whether it will work on a DOS-based PC though. ++

++ ++The program produces what technically are Type 3 rather than Type 1 ++fonts. They are not compressed or encrypted and are plain text. This is ++so I (and you) can see what's going on, and (if you're a Postscript guru ++and really want to) can alter the outlines. ++

++ ++I only translate the outlines, not the 'instructions' that come with ++them. This latter task is probably virtually impossible anyway. TrueType ++outlines are B-splines rather than the Bezier curves that Postscript ++uses. I believe that my conversion algorithm is reasonably correct, if ++nothing else because the characters look right. ++

++ ++

++Problems that may occur ++

++ ++ ++Most seriously, very complex characters (with lots of outline segments) ++can make Ghostscript releases 2.x.x fail with a 'limitcheck' error. It ++is possible that this may happen with some older Postscript printers as ++well. Such characters will be flagged by the program and there are ++basically two things you can do. First is to edit the .pfa file to ++simplify or remove the offending character. This is not really ++recommended. The second is to use Ghostscript release 3, if you can get ++it. This has much larger limits and does not seem to have any problems ++with complex characters. ++

++ ++Then there are buggy fonts (yes, a font can have bugs). I try to deal ++with these in as sane a manner as possible, but it's not always ++possible. ++

++ ++

++Encodings ++

++ ++ ++A postscript font must have a 256 element array, called an encoding, ++each element of which is a name, which is also the name of a procedure ++contained within the font. The 'BuildChar' command takes a byte and uses ++it to index the encoding array to find a character name, and then looks ++that up in the font's procedure table find the commands to draw the ++glyph. However, not all characters need be in the encoding array. Those ++that are not cannot be drawn (at least not using 'show'), however it is ++possible to 're-encode' the font to enable these characters. There are ++several standard encodings: Adobe's original, ISO-Latin1 and Symbol ++being the most commonly encountered. ++

++ ++TrueType fonts are organised differently. As well as the glyph ++descriptions there are a number of tables. One of these is a mapping ++from a character set into the glyph array, and another is a mapping from ++the glyph array into a set of Postscript character names. The problems ++are: ++

++ 1) Microsoft uses Unicode, a 16-bit system, to encode the font. ++
++ 2) that more than one glyph is given the same Postscript name. ++

++ ++I deal with (1) by assuming a Latin1 encoding. The MS-Windows and ++Unicode character sets are both supersets of ISO-8859-1. This usually ++means that most characters will be properly encoded, but you should be ++warned that some software may assume that fonts have an Adobe encoding. ++Symbol, or Dingbat, fonts are in fact less of a problem, as they have ++private encodings starting at 0xF000. It is easy to just lose the top ++byte. ++

++ ++Postscript fonts can be re-encoded, either manually, or by software. ++Groff, for example, generates postscript that re-encodes fonts with the ++Adobe encoding. The problem here is that not all characters in the Adobe ++set are in the MS-Windows set. In particular there are no fi and fl ++ligatures. This means that conversions of the versions of ++Times-New-Roman and Arial that come with MS-Windows cannot be used ++blindly as replacements for Adobe Times-Roman and Helvetica. You can get ++expanded versions of MS fonts from Microsoft's web site which do contain ++these ligatures (and a lot else besides). ++

++ ++I deal with (2) by creating new character names. This can be error-prone ++because I do not know which of them is the correct glyph to give the ++name to. Some (buggy) fonts have large numbers of blank glyphs, all with ++the same name. ++

++ ++(almost every TrueType font has three glyphs called .notdef, one of them ++is usually an empty square shape, one has no outline and has zero width, ++and one has no outline and a positive width. This example is not really ++a problem with well formed fonts since the .notdef characters are only ++used for unprintable characters, which shouldn't occur in your documents ++anyway). ++

++ ++ +diff -ruN xserver-old/hw/xprint/extras/ttf2pt1/runt1asm.c xserver/hw/xprint/extras/ttf2pt1/runt1asm.c +--- xserver-old/hw/xprint/extras/ttf2pt1/runt1asm.c 1970-01-01 10:00:00.000000000 +1000 ++++ xserver/hw/xprint/extras/ttf2pt1/runt1asm.c 2006-06-27 13:10:26.000000000 +1000 +@@ -0,0 +1,61 @@ ++/* ++ * Wrap-around code to either compile in t1asm or call it externally ++ * ++ * Copyright (C) 2000 by Sergey Babkin ++ * Copyright (C) 2000 by The TTF2PT1 Project ++ * ++ * See COPYRIGHT for full license ++ */ ++ ++#ifdef EXTERNAL_T1ASM ++ ++#include ++#include ++ ++FILE *ifp; ++FILE *ofp; ++ ++int ++runt1asm( ++ int pfbflag ++) ++{ ++ char *cmd; ++ int id, od; ++ int error; ++ ++ /* first make a copy in case some of then is already stdin/stdout */ ++ if(( id = dup(fileno(ifp)) )<0) { ++ perror("** Re-opening input file for t1asm"); ++ exit(1); ++ } ++ if(( od = dup(fileno(ofp)) )<0) { ++ perror("** Re-opening output file for t1asm"); ++ exit(1); ++ } ++ fclose(ifp); fclose(ofp); ++ close(0); ++ if(( dup(id) )!=0) { ++ perror("** Re-directing input file for t1asm"); ++ exit(1); ++ } ++ close(1); ++ if(( dup(od) )!=1) { ++ perror("** Re-directing output file for t1asm"); ++ exit(1); ++ } ++ close(id); close(od); ++ ++ if(pfbflag) ++ error = execlp("t1asm", "t1asm", "-b", NULL); ++ else ++ error = execlp("t1asm", "t1asm", NULL); ++ ++ perror("** Calling t1asm"); ++ ++ exit(1); ++} ++ ++#else ++# include "t1asm.c" ++#endif +diff -ruN xserver-old/hw/xprint/extras/ttf2pt1/t1asm.c xserver/hw/xprint/extras/ttf2pt1/t1asm.c +--- xserver-old/hw/xprint/extras/ttf2pt1/t1asm.c 1970-01-01 10:00:00.000000000 +1000 ++++ xserver/hw/xprint/extras/ttf2pt1/t1asm.c 2006-06-27 13:10:26.000000000 +1000 +@@ -0,0 +1,606 @@ ++/* t1asm ++ * ++ * This program `assembles' Adobe Type-1 font programs in pseudo-PostScript ++ * form into either PFB or PFA format. The human readable/editable input is ++ * charstring- and eexec-encrypted as specified in the `Adobe Type 1 Font ++ * Format' version 1.1 (the `black book'). There is a companion program, ++ * t1disasm, which `disassembles' PFB and PFA files into a pseudo-PostScript ++ * file. ++ * ++ * Copyright (c) 1992 by I. Lee Hetherington, all rights reserved. ++ * ++ * Permission is hereby granted to use, modify, and distribute this program ++ * for any purpose provided this copyright notice and the one below remain ++ * intact. ++ * ++ * I. Lee Hetherington (ilh@lcs.mit.edu) ++ * ++ * Revision 1.2 92/05/22 11:54:45 ilh ++ * Fixed bug where integers larger than 32000 could not be encoded in ++ * charstrings. Now integer range is correct for four-byte ++ * twos-complement integers: -(1<<31) <= i <= (1<<31)-1. Bug detected by ++ * Piet Tutelaers (rcpt@urc.tue.nl). ++ * ++ * Revision 1.1 92/05/22 11:48:46 ilh ++ * initial version ++ * ++ * Ported to Microsoft C/C++ Compiler and MS-DOS operating system by ++ * Kai-Uwe Herbing (herbing@netmbx.netmbx.de) on June 12, 1992. Code ++ * specific to the MS-DOS version is encapsulated with #ifdef _MSDOS ++ * ... #endif, where _MSDOS is an identifier, which is automatically ++ * defined, if you compile with the Microsoft C/C++ Compiler. ++ * ++ */ ++ ++#ifndef lint ++static char copyright[] = ++ "@(#) Copyright (c) 1992 by I. Lee Hetherington, all rights reserved."; ++#ifdef _MSDOS ++static char portnotice[] = ++ "@(#) Ported to MS-DOS by Kai-Uwe Herbing (herbing@netmbx.netmbx.de)."; ++#endif ++#endif ++ ++/* Note: this is ANSI C. */ ++ ++#ifdef _MSDOS ++ #include ++ #include ++ #include ++#endif ++#include ++#include ++#include ++#include ++#include ++ ++#ifdef WINDOWS ++# ifdef STANDALONE ++# define WINDOWS_FUNCTIONS ++# include "windows.h" ++# endif ++#endif ++ ++/* int32 must be at least 32-bit and uint16 must be at least 16-bit */ ++#ifndef AIXV3 ++#if INT_MAX >= 0x7FFFFFFFUL ++typedef int int32; ++#else ++typedef long int32; ++#endif ++#endif /* !AIXV3 */ ++#if USHRT_MAX >= 0xFFFFUL ++typedef unsigned short uint16; ++#else ++typedef unsigned int uint16; ++#endif ++ ++#define LINESIZE 256 ++ ++#define MAXBLOCKLEN ((1L<<17)-6) ++#define MINBLOCKLEN ((1L<<8)-6) ++ ++#define MARKER 128 ++#define ASCII 1 ++#define BINARY 2 ++#define DONE 3 ++ ++typedef unsigned char byte; ++ ++/* must be visible from outside */ ++FILE *ifp; ++FILE *ofp; ++ ++/* flags */ ++static int pfb = 0; ++static int active = 0; ++static int start_charstring = 0; ++static int in_eexec = 0; ++ ++static char line[LINESIZE]; ++ ++/* lenIV and charstring start command */ ++static int lenIV = 4; ++static char cs_start[10]; ++ ++/* for charstring buffering */ ++static byte charstring_buf[65535]; ++static byte *charstring_bp; ++ ++/* for PFB block buffering */ ++static byte blockbuf[MAXBLOCKLEN]; ++static int32 blocklen = MAXBLOCKLEN; ++static int32 blockpos = -1; ++static int blocktyp = ASCII; ++ ++/* decryption stuff */ ++static uint16 er, cr; ++static uint16 c1 = 52845, c2 = 22719; ++ ++/* table of charstring commands */ ++static struct command { ++ char *name; ++ int one, two; ++} command_table[] = { ++ { "callothersubr", 12, 16 }, ++ { "callsubr", 10, -1 }, ++ { "closepath", 9, -1 }, ++ { "div", 12, 12 }, ++ { "dotsection", 12, 0 }, ++ { "endchar", 14, -1 }, ++ { "hlineto", 6, -1 }, ++ { "hmoveto", 22, -1 }, ++ { "hsbw", 13, -1 }, ++ { "hstem", 1, -1 }, ++ { "hstem3", 12, 2 }, ++ { "hvcurveto", 31, -1 }, ++ { "pop", 12, 17 }, ++ { "return", 11, -1 }, ++ { "rlineto", 5, -1 }, ++ { "rmoveto", 21, -1 }, ++ { "rrcurveto", 8, -1 }, ++ { "sbw", 12, 7 }, ++ { "seac", 12, 6 }, ++ { "setcurrentpoint", 12, 33 }, ++ { "vhcurveto", 30, -1 }, ++ { "vlineto", 7, -1 }, ++ { "vmoveto", 4, -1 }, ++ { "vstem", 3, -1 }, ++ { "vstem3", 12, 1 }, ++}; /* alphabetical */ ++ ++/* Two separate encryption functions because eexec and charstring encryption ++ must proceed in parallel. */ ++ ++static byte eencrypt(byte plain) ++{ ++ byte cipher; ++ ++ cipher = (byte) (plain ^ (er >> 8)); ++ er = (uint16) ((cipher + er) * c1 + c2); ++ return cipher; ++} ++ ++static byte cencrypt(byte plain) ++{ ++ byte cipher; ++ ++ cipher = (byte) (plain ^ (cr >> 8)); ++ cr = (uint16) ((cipher + cr) * c1 + c2); ++ return cipher; ++} ++ ++/* This function flushes a buffered PFB block. */ ++ ++static void output_block() ++{ ++ int32 i; ++ ++ /* output four-byte block length */ ++ fputc((int) (blockpos & 0xff), ofp); ++ fputc((int) ((blockpos >> 8) & 0xff), ofp); ++ fputc((int) ((blockpos >> 16) & 0xff), ofp); ++ fputc((int) ((blockpos >> 24) & 0xff), ofp); ++ ++ /* output block data */ ++ for (i = 0; i < blockpos; i++) ++ fputc(blockbuf[i], ofp); ++ ++ /* mark block buffer empty and uninitialized */ ++ blockpos = -1; ++} ++ ++/* This function outputs a single byte. If output is in PFB format then output ++ is buffered through blockbuf[]. If output is in PFA format, then output ++ will be hexadecimal if in_eexec is set, ASCII otherwise. */ ++ ++static void output_byte(byte b) ++{ ++ static char *hexchar = "0123456789ABCDEF"; ++ static int hexcol = 0; ++ ++ if (pfb) { ++ /* PFB */ ++ if (blockpos < 0) { ++ fputc(MARKER, ofp); ++ fputc(blocktyp, ofp); ++ blockpos = 0; ++ } ++ blockbuf[blockpos++] = b; ++ if (blockpos == blocklen) ++ output_block(); ++ } else { ++ /* PFA */ ++ if (in_eexec) { ++ /* trim hexadecimal lines to 64 columns */ ++ if (hexcol >= 64) { ++ fputc('\n', ofp); ++ hexcol = 0; ++ } ++ fputc(hexchar[(b >> 4) & 0xf], ofp); ++ fputc(hexchar[b & 0xf], ofp); ++ hexcol += 2; ++ } else { ++ fputc(b, ofp); ++ } ++ } ++} ++ ++/* This function outputs a byte through possible eexec encryption. */ ++ ++static void eexec_byte(byte b) ++{ ++ if (in_eexec) ++ output_byte(eencrypt(b)); ++ else ++ output_byte(b); ++} ++ ++/* This function outputs a null-terminated string through possible eexec ++ encryption. */ ++ ++static void eexec_string(char *string) ++{ ++ while (*string) ++ eexec_byte((byte) *string++); ++} ++ ++/* This function gets ready for the eexec-encrypted data. If output is in ++ PFB format then flush current ASCII block and get ready for binary block. ++ We start encryption with four random (zero) bytes. */ ++ ++static void eexec_start() ++{ ++ eexec_string(line); ++ if (pfb) { ++ output_block(); ++ blocktyp = BINARY; ++ } ++ ++ in_eexec = 1; ++ er = 55665; ++ eexec_byte(0); ++ eexec_byte(0); ++ eexec_byte(0); ++ eexec_byte(0); ++} ++ ++/* This function wraps-up the eexec-encrypted data. ++ If output is in PFB format then this entails flushing binary block and ++ starting an ASCII block. */ ++ ++static void eexec_end() ++{ ++ int i, j; ++ ++ if (pfb) { ++ output_block(); ++ blocktyp = ASCII; ++ } else { ++ fputc('\n', ofp); ++ } ++ in_eexec = 0; ++ for (i = 0; i < 8; i++) { ++ for (j = 0; j < 64; j++) ++ eexec_byte('0'); ++ eexec_byte('\n'); ++ } ++#if 0 ++ eexec_string("cleartomark\n"); ++#endif ++} ++ ++/* This function writes ASCII trailer. ++ If output is in PFB format then this entails flushing binary block and ++ starting an ASCII block. */ ++ ++static void file_end() ++{ ++ if (pfb) { ++ output_block(); ++ fputc(MARKER, ofp); ++ fputc(DONE, ofp); ++ } ++} ++/* This function returns an input line of characters. A line is terminated by ++ length (including terminating null) greater than LINESIZE, a newline \n, or ++ when active (looking for charstrings) by '{'. When terminated by a newline ++ the newline is put into line[]. When terminated by '{', the '{' is not put ++ into line[], and the flag start_charstring is set to 1. */ ++ ++static void t1asm_getline() ++{ ++ int c; ++ char *p = line; ++ int comment = 0; ++ ++ start_charstring = 0; ++ while (p < line + LINESIZE) { ++ c = fgetc(ifp); ++ if (c == EOF) ++ break; ++ if (c == '%') ++ comment = 1; ++ if (active && !comment && c == '{') { ++ start_charstring = 1; ++ break; ++ } ++ *p++ = (char) c; ++ if (c == '\n') ++ break; ++ } ++ *p = '\0'; ++} ++ ++/* This function is used by the binary search, bsearch(), for command names in ++ the command table. */ ++ ++static int command_compare(const void *key, const void *item) ++{ ++ return strcmp((char *) key, ((struct command *) item)->name); ++} ++ ++/* This function returns 1 if the string is an integer and 0 otherwise. */ ++ ++static int is_integer(char *string) ++{ ++ if (isdigit(string[0]) || string[0] == '-' || string[0] == '+') { ++ while (*++string && isdigit(*string)) ++ ; /* deliberately empty */ ++ if (!*string) ++ return 1; ++ } ++ return 0; ++} ++ ++/* This function initializes charstring encryption. Note that this is called ++ at the beginning of every charstring. */ ++ ++static void charstring_start() ++{ ++ int i; ++ ++ charstring_bp = charstring_buf; ++ cr = 4330; ++ for (i = 0; i < lenIV; i++) ++ *charstring_bp++ = cencrypt((byte) 0); ++} ++ ++/* This function encrypts and buffers a single byte of charstring data. */ ++ ++static void charstring_byte(int v) ++{ ++ byte b = (byte) (v & 0xff); ++ ++ if (charstring_bp - charstring_buf > sizeof(charstring_buf)) { ++ fprintf(stderr, "error: charstring_buf full (%d bytes)\n", ++ sizeof(charstring_buf)); ++ exit(1); ++ } ++ *charstring_bp++ = cencrypt(b); ++} ++ ++/* This function outputs buffered, encrypted charstring data through possible ++ eexec encryption. */ ++ ++static void charstring_end() ++{ ++ byte *bp; ++ ++ sprintf(line, "%d ", charstring_bp - charstring_buf); ++ eexec_string(line); ++ sprintf(line, "%s ", cs_start); ++ eexec_string(line); ++ for (bp = charstring_buf; bp < charstring_bp; bp++) ++ eexec_byte(*bp); ++} ++ ++/* This function generates the charstring representation of an integer. */ ++ ++static void charstring_int(int num) ++{ ++ int x; ++ ++ if (num >= -107 && num <= 107) { ++ charstring_byte(num + 139); ++ } else if (num >= 108 && num <= 1131) { ++ x = num - 108; ++ charstring_byte(x / 256 + 247); ++ charstring_byte(x % 256); ++ } else if (num >= -1131 && num <= -108) { ++ x = abs(num) - 108; ++ charstring_byte(x / 256 + 251); ++ charstring_byte(x % 256); ++ } else if (num >= (-2147483647-1) && num <= 2147483647) { ++ charstring_byte(255); ++ charstring_byte(num >> 24); ++ charstring_byte(num >> 16); ++ charstring_byte(num >> 8); ++ charstring_byte(num); ++ } else { ++ fprintf(stderr, ++ "error: cannot format the integer %d, too large\n", num); ++ exit(1); ++ } ++} ++ ++/* This function parses an entire charstring into integers and commands, ++ outputting bytes through the charstring buffer. */ ++ ++static void parse_charstring() ++{ ++ struct command *cp; ++ ++ charstring_start(); ++ while (fscanf(ifp, "%s", line) == 1) { ++ if (line[0] == '%') { ++ /* eat comment to end of line */ ++ while (fgetc(ifp) != '\n' && !feof(ifp)) ++ ; /* deliberately empty */ ++ continue; ++ } ++ if (line[0] == '}') ++ break; ++ if (is_integer(line)) { ++ charstring_int(atoi(line)); ++ } else { ++ cp = (struct command *) ++ bsearch((void *) line, (void *) command_table, ++ sizeof(command_table) / sizeof(struct command), ++ sizeof(struct command), ++ command_compare); ++ if (cp) { ++ charstring_byte(cp->one); ++ if (cp->two >= 0) ++ charstring_byte(cp->two); ++ } else { ++ fprintf(stderr, "error: cannot use `%s' in charstring\n",line); ++ exit(1); ++ } ++ } ++ } ++ charstring_end(); ++} ++ ++static void usage() ++{ ++ fprintf(stderr, ++ "usage: t1asm [-b] [-l block-length] [input [output]]\n"); ++ fprintf(stderr, ++ "\n-b means output in PFB format, otherwise PFA format.\n"); ++ fprintf(stderr, ++ "The block length applies to the length of blocks in the\n"); ++ fprintf(stderr, ++ "PFB output file; the default is to use the largest possible.\n"); ++ exit(1); ++} ++ ++static void print_banner() ++{ ++ static char rcs_revision[] = ""; /* removed RCS */ ++ static char revision[20]; ++ ++ if (sscanf(rcs_revision, "$Revision: %19s", revision) != 1) ++ revision[0] = '\0'; ++ fprintf(stderr, "This is t1asm %s.\n", revision); ++} ++ ++#ifdef STANDALONE ++int main(int argc, char **argv) ++{ ++ char *p, *q, *r; ++ int c; ++ ++ extern char *optarg; ++ extern int optind; ++ ++ ifp = stdin; ++ ofp = stdout; ++ ++ print_banner(); ++ ++ /* interpret command line arguments using getopt */ ++ while ((c = getopt(argc, argv, "bl:")) != -1) ++ switch (c) { ++ case 'b': ++ pfb = 1; ++ break; ++ case 'l': ++ blocklen = atoi(optarg); ++ if (blocklen < MINBLOCKLEN) { ++ blocklen = MINBLOCKLEN; ++ fprintf(stderr, ++ "warning: using minimum block length of %d\n", ++ blocklen); ++ } else if (blocklen > MAXBLOCKLEN) { ++ blocklen = MAXBLOCKLEN; ++ fprintf(stderr, ++ "warning: using maximum block length of %d\n", ++ blocklen); ++ } ++ break; ++ default: ++ usage(); ++ break; ++ } ++ if (argc - optind > 2) ++ usage(); ++ ++ /* possibly open input & output files */ ++ if (argc - optind >= 1) { ++ ifp = fopen(argv[optind], "r"); ++ if (!ifp) { ++ fprintf(stderr, "error: cannot open %s for reading\n", argv[1]); ++ exit(1); ++ } ++ } ++ if (argc - optind >= 2) { ++ ofp = fopen(argv[optind + 1], "w"); ++ if (!ofp) { ++ fprintf(stderr, "error: cannot open %s for writing\n", argv[2]); ++ exit(1); ++ } ++ } ++ ++#else ++int runt1asm(int pfbflag) ++{ ++ char *p, *q, *r; ++ ++ pfb = pfbflag; ++#endif ++ ++ #ifdef _MSDOS ++ /* If we are processing a PFB (binary) output */ ++ /* file, we must set its file mode to binary. */ ++ if (pfb) ++ _setmode(_fileno(ofp), _O_BINARY); ++ #endif ++ ++ /* Finally, we loop until no more input. Some special things to look for ++ are the `currentfile eexec' line, the beginning of the `/Subrs' ++ definition, the definition of `/lenIV', and the definition of the ++ charstring start command which has `...string currentfile...' in it. */ ++ ++ while (!feof(ifp) && !ferror(ifp)) { ++ t1asm_getline(); ++ if (strcmp(line, "currentfile eexec\n") == 0) { ++ eexec_start(); ++ continue; ++ } else if (strstr(line, "/Subrs") && isspace(line[6])) { ++ active = 1; ++ } else if ((p = strstr(line, "/lenIV"))) { ++ sscanf(p, "%*s %d", &lenIV); ++ } else if ((p = strstr(line, "string currentfile"))) { ++ /* locate the name of the charstring start command */ ++ *p = '\0'; /* damage line[] */ ++ q = strrchr(line, '/'); ++ if (q) { ++ r = cs_start; ++ ++q; ++ while (!isspace(*q) && *q != '{') ++ *r++ = *q++; ++ *r = '\0'; ++ } ++ *p = 's'; /* repair line[] */ ++ } ++ /* output line data */ ++ eexec_string(line); ++ if ((p = strstr(line, "currentfile closefile"))) { ++ eexec_end(); ++ } ++ if (start_charstring) { ++ if (!cs_start[0]) { ++ fprintf(stderr, "error: couldn't find charstring start command\n"); ++ exit(1); ++ } ++ parse_charstring(); ++ } ++ } ++ file_end(); ++ ++ fclose(ifp); ++ fclose(ofp); ++ ++ return 0; ++} +diff -ruN xserver-old/hw/xprint/extras/ttf2pt1/ttf2pt1.1 xserver/hw/xprint/extras/ttf2pt1/ttf2pt1.1 +--- xserver-old/hw/xprint/extras/ttf2pt1/ttf2pt1.1 1970-01-01 10:00:00.000000000 +1000 ++++ xserver/hw/xprint/extras/ttf2pt1/ttf2pt1.1 2006-06-27 13:10:26.000000000 +1000 +@@ -0,0 +1,828 @@ ++.rn '' }` ++''' $RCSfile$$Revision$$Date$ ++''' ++''' $Log$ ++''' Revision 1.1.4.1 2004/04/21 10:03:13 gisburn ++''' Fix for http://pdx.freedesktop.org/cgi-bin/bugzilla/show_bug.cgi?id=530 - Land XPRINT branch on XORG-CURRENT ++''' ++''' Revision 1.1 2003/06/04 00:33:54 roland ++''' Fix for http://xprint.mozdev.org/bugs/show_bug.cgi?id=3846 - RFE: Upload Freetype --> PS Type1 font converter "ttf2pt1" ... ++''' ++''' ++.de Sh ++.br ++.if t .Sp ++.ne 5 ++.PP ++\fB\\$1\fR ++.PP ++.. ++.de Sp ++.if t .sp .5v ++.if n .sp ++.. ++.de Ip ++.br ++.ie \\n(.$>=3 .ne \\$3 ++.el .ne 3 ++.IP "\\$1" \\$2 ++.. ++.de Vb ++.ft CW ++.nf ++.ne \\$1 ++.. ++.de Ve ++.ft R ++ ++.fi ++.. ++''' ++''' ++''' Set up \*(-- to give an unbreakable dash; ++''' string Tr holds user defined translation string. ++''' Bell System Logo is used as a dummy character. ++''' ++.tr \(*W-|\(bv\*(Tr ++.ie n \{\ ++.ds -- \(*W- ++.ds PI pi ++.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch ++.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch ++.ds L" "" ++.ds R" "" ++''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of ++''' \*(L" and \*(R", except that they are used on ".xx" lines, ++''' such as .IP and .SH, which do another additional levels of ++''' double-quote interpretation ++.ds M" """ ++.ds S" """ ++.ds N" """"" ++.ds T" """"" ++.ds L' ' ++.ds R' ' ++.ds M' ' ++.ds S' ' ++.ds N' ' ++.ds T' ' ++'br\} ++.el\{\ ++.ds -- \(em\| ++.tr \*(Tr ++.ds L" `` ++.ds R" '' ++.ds M" `` ++.ds S" '' ++.ds N" `` ++.ds T" '' ++.ds L' ` ++.ds R' ' ++.ds M' ` ++.ds S' ' ++.ds N' ` ++.ds T' ' ++.ds PI \(*p ++'br\} ++.\" If the F register is turned on, we'll generate ++.\" index entries out stderr for the following things: ++.\" TH Title ++.\" SH Header ++.\" Sh Subsection ++.\" Ip Item ++.\" X<> Xref (embedded ++.\" Of course, you have to process the output yourself ++.\" in some meaninful fashion. ++.if \nF \{ ++.de IX ++.tm Index:\\$1\t\\n%\t"\\$2" ++.. ++.nr % 0 ++.rr F ++.\} ++.TH TTF2PT1 1 "version 3.4.4-SNAP-030526" "May 26, 2003" "TTF2PT1 Font Converter" ++.UC ++.if n .hy 0 ++.if n .na ++.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' ++.de CQ \" put $1 in typewriter font ++.ft CW ++'if n "\c ++'if t \\&\\$1\c ++'if n \\&\\$1\c ++'if n \&" ++\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7 ++'.ft R ++.. ++.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2 ++. \" AM - accent mark definitions ++.bd B 3 ++. \" fudge factors for nroff and troff ++.if n \{\ ++. ds #H 0 ++. ds #V .8m ++. ds #F .3m ++. ds #[ \f1 ++. ds #] \fP ++.\} ++.if t \{\ ++. ds #H ((1u-(\\\\n(.fu%2u))*.13m) ++. ds #V .6m ++. ds #F 0 ++. ds #[ \& ++. ds #] \& ++.\} ++. \" simple accents for nroff and troff ++.if n \{\ ++. ds ' \& ++. ds ` \& ++. ds ^ \& ++. ds , \& ++. ds ~ ~ ++. ds ? ? ++. ds ! ! ++. ds / ++. ds q ++.\} ++.if t \{\ ++. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" ++. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' ++. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' ++. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' ++. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' ++. ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10' ++. ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m' ++. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' ++. ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10' ++.\} ++. \" troff and (daisy-wheel) nroff accents ++.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' ++.ds 8 \h'\*(#H'\(*b\h'-\*(#H' ++.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#] ++.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u' ++.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u' ++.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#] ++.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] ++.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' ++.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' ++.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] ++.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] ++.ds ae a\h'-(\w'a'u*4/10)'e ++.ds Ae A\h'-(\w'A'u*4/10)'E ++.ds oe o\h'-(\w'o'u*4/10)'e ++.ds Oe O\h'-(\w'O'u*4/10)'E ++. \" corrections for vroff ++.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' ++.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' ++. \" for low resolution devices (crt and lpr) ++.if \n(.H>23 .if \n(.V>19 \ ++\{\ ++. ds : e ++. ds 8 ss ++. ds v \h'-1'\o'\(aa\(ga' ++. ds _ \h'-1'^ ++. ds . \h'-1'. ++. ds 3 3 ++. ds o a ++. ds d- d\h'-1'\(ga ++. ds D- D\h'-1'\(hy ++. ds th \o'bp' ++. ds Th \o'LP' ++. ds ae ae ++. ds Ae AE ++. ds oe oe ++. ds Oe OE ++.\} ++.rm #[ #] #H #V #F C ++.SH "NAME" ++TTF2PT1 \- A True Type to PostScript Type 1 Font Converter ++.SH "SYNOPSIS" ++\f(CWttf2pt1 \fI[-options] ttffont.ttf [Fontname]\fR\fR ++.PP ++or ++.PP ++\f(CWttf2pt1 \fI[-options] ttffont.ttf -\fR\fR ++.SH "DESCRIPTION" ++Ttf2pt1 is a font converter from the True Type format (and some other formats ++supported by the FreeType library as well) to the Adobe Type1 format. ++.PP ++The versions 3.0 and later got rather extensive post-processing algorithm that ++brings the converted fonts to the requirements of the Type1 standard, tries to ++correct the rounding errors introduced during conversions and some simple ++kinds of bugs that are typical for the public domain TTF fonts. It ++also generates the hints that enable much better rendering of fonts in ++small sizes that are typical for the computer displays. But everything ++has its price, and some of the optimizations may not work well for certain ++fonts. That's why the options were added to the converter, to control ++the performed optimizations. ++.SH "OPTIONS" ++The first variant creates the file \f(CWFontname.pfa\fR (or \f(CWFontname.pfb\fR if the ++option \*(L'\fB\-b\fR\*(R' was used) with the converted font and \f(CWFontname.afm\fR with the ++font metrics, the second one prints the font or another file (if the option ++\&\*(R'\fB\-G\fR\*(R' was used) on the standard output from where it can be immediately ++piped through some filter. If no \f(CWFontname\fR is specified for the first ++variant, the name is generated from \f(CWttffont\fR by replacing the \f(CW.ttf\fR ++filename suffix. ++.PP ++Most of the time no options are neccessary (with a possible exception ++of \*(L'\fB\-e\fR'). But if there are some troubles with the resulting font, they ++may be used to control the conversion. ++The \fBoptions\fR are: ++.Ip "\(bu" 2 ++\f(CW\fB-a\fR\fR \- Include all the glyphs from the source file into the converted ++file. If this option is not specified then only the glyphs that have ++been assigned some encoding are included, because the rest of glyphs ++would be inaccessible anyway and would only consume the disk space. ++But some applications are clever enough to change the encoding on ++the fly and thus use the other glyphs, in this case they could ++benefit from using this option. But there is a catch: the X11 library ++has rather low limit for the font size. Including more glyphs increases ++the file size and thus increases the chance of hitting this limit. ++See \f(CWapp/X11/README\fR for the description of a ++patch to X11 which fixes this problem. ++.Ip "\(bu" 2 ++\f(CW\fB-b\fR\fR \- Encode the resulting font to produce a ready \f(CW.pfb\fR file. ++.Ip "\(bu" 2 ++\f(CW\fB-d \fIsuboptions\fR\fR\fR \- Debugging options. The suboptions are: ++.Sp ++\f(CW\fBa\fR\fR \- Print out the absolute coordinates of dots in outlines. Such ++a font can not be used by any program (that's why this option is ++incompatible with \*(L'\fB\-e\fR') but it has proven to be a valuable debuging ++information. ++.Sp ++\f(CW\fBr\fR\fR \- Do not reverse the direction of outlines. The \s-1TTF\s0 fonts have ++the standard direction of outlines opposite to the Type1 fonts. So ++they should be reversed during proper conversion. This option ++may be used for debugging or to handle a \s-1TTF\s0 font with wrong ++direction of outlines (possibly, converted in a broken way from ++a Type1 font). The first signs of the wrong direction are the ++letters like \*(L"P\*(R" or \*(L"B\*(R" without the unpainted \*(L"holes\*(R" inside. ++.Ip "\(bu" 2 ++\f(CW\fB-e\fR\fR \- Assemble the resulting font to produce a ready \f(CW.pfa\fR file. ++.Sp ++[ S.B.: Personally I don't think that this option is particularly useful. ++The same result may be achieved by piping the unassembled data ++through t1asm, the Type 1 assembler. And, anyways, it's good to ++have the t1utils package handy. But Mark and many users think that ++this functionality is good and it took not much time to add this option. ] ++.Ip "\(bu" 2 ++\f(CW\fB-F\fR\fR \- Force the Unicode encoding: any type of \s-1MS\s0 encoding specified ++in the font is ignored and the font is treated like it has Unicode ++encoding. \fB\s-1WARNING\s0:\fR this option is intended for buggy fonts ++which actually are in Unicode but are marked as something else. The ++effect on the other fonts is unpredictable. ++.Ip "\(bu" 2 ++\f(CW\fB-G \fIsuboptions\fR\fR\fR \- File generation options. The suboptions may be lowercase ++or uppercase, the lowercase ones disable the generation of particular ++files, the corresponding uppercase suboptions enable the generation of the ++same kind of files. If the result of ttf2pt1 is requested to be printed on ++the standard output, the last enabling suboption of \fB\-G\fR determines ++which file will be written to the standard output and the rest of files ++will be discarded. For example, \fB\-G A\fR will request the \s-1AFM\s0 file. ++The suboptions to disable/enable the generation of the files are: ++.Sp ++\f(CW\fBf/F\fR\fR \- The font file. Depending on the other options this file ++will have one of the suffixes \f(CW.t1a\fR, \f(CW.pfa\fR or \f(CW.pfb\fR. If the conversion result ++is requested on the standard output ('\f(CW-\fR\*(R' is used as the output file name) ++then the font file will also be written there by default, if not overwritten ++by another suboption of \fB\-G\fR. ++\fBDefault: enabled\fR ++.Sp ++\f(CW\fBa/A\fR\fR \- The Adobe font metrics file (\f(CW.afm\fR). ++\fBDefault: enabled\fR ++.Sp ++\f(CW\fBe/E\fR\fR \- The dvips encoding file (\f(CW.enc\fR). ++\fBDefault: disabled\fR ++.Ip "\(bu" 2 ++\f(CW\fB-l \fIlanguage\fR[+\fIargument\fR]\fR\fR \- Extract the fonts for the specified language from a ++multi-language Unicode font. If this option is not used the converter ++tries to guess the language by the values of the shell variable \s-1LANG\s0. ++If it is not able to guess the language by \s-1LANG\s0 it tries all the ++languages in the order they are listed. ++.Sp ++After the plus sign an optional argument for the language extractor ++may be specified. The format of the argument is absolutely up to ++the particular language converter. The primary purpose of the ++argument is to support selection of planes for the multi-plane ++Eastern encodings but it can also be used in any other way. The ++language extractor may decide to add the plane name in some form ++to the name of the resulting font. None of the currently supported ++languages make any use of the argument yet. ++.Sp ++As of now the following languages are supported: ++.Sp ++\ \ \f(CWlatin1\fR \- for all the languages using the Latin-1 encoding ++.Sp ++\ \ \f(CWlatin2\fR \- for the Central European languages ++.Sp ++\ \ \f(CWlatin4\fR \- for the Baltic languages ++.Sp ++\ \ \f(CWlatin5\fR \- for the Turkish language ++.Sp ++\ \ \f(CWcyrillic\fR \- for the languages with Cyrillic alphabet ++.Sp ++\ \ \f(CWrussian\fR \- historic synonym for cyrillic ++.Sp ++\ \ \f(CWbulgarian\fR \- historic synonym for cyrillic ++.Sp ++\ \ \f(CWadobestd\fR \- for the AdobeStandard encoding used by TeX ++.Sp ++\ \ \f(CWplane+\fIargument\fR\fR \- to select one plane from a multi-byte encoding ++.Sp ++The argument of the \*(L"\f(CWplane\fR\*(R" language may be in one of three forms: ++.Sp ++\ \ \f(CWplane+\fBpid=\fR\fI\fR\fB,eid=\fR\fI\fR\fR ++.Sp ++\ \ \f(CWplane+\fBpid=\fR\fI\fR\fB,eid=\fR\fI\fR\fB,\fR\fI\fR\fR ++.Sp ++\ \ \f(CWplane+\fI\fR\fR ++.Sp ++Pid (\s-1TTF\s0 platform id) and eid (\s-1TTF\s0 encoding id) select a particular ++\s-1TTF\s0 encoding table in the original font. They are specified as decimal ++numbers. If this particular encoding table is not present in the font ++file then the conversion fails. The native ("ttf") front-end parser supports ++only pid=3 (Windows platform), the FreeType-based ("ft") front-end supports ++any platform. If pid/eid is not specified then the \s-1TTF\s0 encoding table is ++determined as usual: Unicode encoding if it's first or an 8-bit encoding ++if not (and for an 8-bit encoding the plane number is silently ignored). ++To prevent the converter from falling back to an 8-bit encoding, specify ++the Unicode pid/eid value explicitly. ++.Sp ++Plane_number is a hexadecimal (if starts with \*(L"\fB0x\fR") or decimal number. ++It gives the values of upper bytes for which 256 characters will be ++selected. If not specified, defaults to 0. It is also used as a font ++name suffix (the leading \*(L"0x\*(R" is not included into the suffix). ++.Sp ++\fB\s-1NOTE\s0:\fR ++You may notice that the language names are not uniform: some are the ++names of particular languages and some are names of encodings. This ++is because of the different approaches. The original idea was to ++implement a conversion from Unicode to the appropriate Windows ++encoding for a given language. And then use the translation tables ++to generate the fonts in whatever final encodings are needed. This ++would allow to pile together the Unicode fonts and the non-Unicode ++Windows fonts for that language and let the program to sort them out ++automatically. And then generate fonts in all the possible encodings ++for that language. An example of this approach is the Russian language ++support. But if there is no multiplicity of encodings used for some ++languages and if the non-Unicode fonts are not considered important ++by the users, another way would be simpler to implement: just provide ++only one table for extraction of the target encoding from Unicode ++and don't bother with the translation tables. The latin* \*(L"languages\*(R" ++are examples of this approach. If somebody feels that he needs the ++Type1 fonts both in Latin-* and Windows encodings he or she is absolutely ++welcome to submit the code to implement it. ++.Sp ++\fB\s-1WARNING\s0:\fR ++Some of the glyphs included into the AdobeStandard encoding are not ++included into the Unicode standard. The most typical examples of such ++glyphs are ligatures like \*(L'fi\*(R', \*(L'fl\*(R' etc. Because of this the font ++designers may place them at various places. The converter tries to ++do its best, if the glyphs have honest Adobe names and/or are ++placed at the same codes as in the Microsoft fonts they will be ++picked up. Otherwise a possible solution is to use the option \*(L'\fB\-L\fR\*(R' ++with an external map. ++.Ip "\(bu" 2 ++\f(CW\fB-L \fIfile\fR[+[pid=\fI\fR,eid=\fI\fR,][\fIplane\fR]]\fR\fR \- Extract the fonts for the specified ++language from a multi-language font using the map from this file. This is ++rather like the option \*(L'\fB\-l\fR\*(R' but the encoding map is not ++compiled into the program, it's taken from that file, so it's ++easy to edit. Examples of such files are provided in ++\f(CWmaps/adobe-standard-encoding.map\fR, \f(CWCP1250.map\fR. (\fB\s-1NOTE\s0:\fR ++the \*(L'standard encoding\*(R' map does not include all the glyphs of the ++AdobeStandard encoding, it's provided only as an example.) The ++description of the supported map formats is in the file ++\f(CWmaps/unicode-sample.map\fR. ++.Sp ++Likewise to \*(L'\fB\-l\fR\*(R', an argument may be specified after the map file ++name. But in this case the argument has fixed meaning: it selects the ++original \s-1TTF\s0 encoding table (the syntax is the same as in \*(L'\fB\-l plane\fR') ++and/or a plane of the map file. The plane name also gets added after dash ++to the font name. The plane is a concept used in the Eastern fonts with big ++number of glyphs: one \s-1TTF\s0 font gets divided into multiple Type1 fonts, ++each containing one plane of up to 256 glyphs. But with a little ++creativity this concept may be used for other purposes of combining ++multiple translation maps into one file. To extract multiple planes ++from a \s-1TTF\s0 font \f(CWttf2pt1\fR must be run multiple times, each time with ++a different plane name specified. ++.Sp ++The default original \s-1TTF\s0 encoding table used for the option \*(L'\fB\-L\fR\*(R' is ++Unicode. The map files may include directives to specify different original ++\s-1TTF\s0 encodings. However if the pid/eid pair is specified with ++it overrides any original encoding specified in the map file. ++.Ip "\(bu" 2 ++\f(CW\fB-m \fItype\fR=\fIvalue\fR\fR\fR \- Set maximal or minimal limits of resources. ++These limits control the the font generation by limiting the resources ++that the font is permitted to require from the PostScript interpreter. ++The currently supported types of limits are: ++.Sp ++\f(CW\fBh\fR\fR \- the maximal hint stack depth for the substituted hints. ++The default value is 128, according to the limitation in X11. This seems to ++be the lowest (and thus the safest) widespread value. To display the ++hint stack depth required by each glyph in a \f(CW.t1a\fR file use the script ++\f(CWscripts/cntstems.pl\fR. ++.Ip "\(bu" 2 ++\f(CW\fB-O \fIsuboptions\fR\fR\fR \- Outline processing options. The suboptions ++may be lowercase or uppercase, the lowercase ones disable the features, ++the corresponding uppercase suboptions enable the same features. ++The suboptions to disable/enable features are: ++.Sp ++\f(CW\fBb/B\fR\fR \- Guessing of the ForceBold parameter. This parameter helps ++the Type1 engine to rasterize the bold fonts properly at small sizes. ++But the algorithm used to guess the proper value of this flag makes ++that guess based solely on the font name. In rare cases that may cause ++errors, in these cases you may want to disable this guessing. ++\fBDefault: enabled\fR ++.Sp ++\f(CW\fBh/H\fR\fR \- Autogeneration of hints. The really complex outlines ++may confuse the algorithm, so theoretically it may be useful ++sometimes to disable them. Although up to now it seems that ++even bad hints are better than no hints at all. ++\fBDefault: enabled\fR ++.Sp ++\f(CW\fBu/U\fR\fR \- Hint substitution. Hint substitution is a technique ++permitting generation of more detailed hints for the rasterizer. It allows ++to use different sets of hints for different parts of a glyph and change ++these sets as neccessary during rasterization (that's why \*(L"substituted"). ++So it should improve the quality of the fonts rendered at small sizes. ++But there are two catches: First, the X11 library has rather low limit for ++the font size. More detailed hints increase the file size and thus increase ++the chance of hitting this limit (that does not mean that you shall hit it ++but you may if your fonts are particularly big). This is especially ++probable for Unicode fonts converted with option \*(L'\fB\-a\fR\*(R', so you may want to ++use \*(L'\fB\-a\fR\*(R' together with \*(L'\fB\-Ou\fR\*(R'. See \f(CWapp/X11/README\fR for the description of ++a patch to X11 which fixes this problem. Second, some rasterizers (again, ++X11 is the typical example) have a limitation for total number of hints ++used when drawing a glyph (also known as the hint stack depth). If that ++stack overflows the glyph is ignored. Starting from version 3.22 \f(CWttf2pt1\fR ++uses algorithms to minimizing this depth, with the trade-off of slightly ++bigger font files. The glyphs which still exceed the limit set by option ++\&\*(R'\fB\-mh\fR\*(R' have all the substituted hints removed and only base hints left. ++The algorithms seem to have been refined far enough to make the fonts with ++substituted hints look better than the fonts without them or at least the ++same. Still if the original fonts are not well-designed the detailed ++hinting may emphasize the defects of the design, such as non-even thickness ++of lines. So provided that you are not afraid of the X11 bug the best idea ++would be to generate a font with this feature and without it, then compare ++the results using the program \f(CWother/cmpf\fR (see the description ++in \f(CWother/README\fR) and decide which one looks better. ++\fBDefault: enabled\fR ++.Sp ++\f(CW\fBo/O\fR\fR \- Space optimization of the outlines\*(R' code. This kind of optimization ++never hurts, and the only reason to disable this feature is for comparison ++of the generated fonts with the fonts generated by the previous versions of ++converter. Well, it _almost_ never hurts. As it turned out there exist ++some brain-damaged printers which don't understand it. Actually this ++feature does not change the outlines at all. The Type 1 font manual ++provides a set of redundant operators that make font description shorter, ++such as \*(L'10 hlineto\*(R' instead of \*(L'0 10 rlineto\*(R' to describe a horizontal ++line. This feature enables use of these operators. ++\fBDefault: enabled\fR ++.Sp ++\f(CW\fBs/S\fR\fR \- Smoothing of outlines. If the font is broken in some ++way (even the ones that are not easily noticeable), such smoothing ++may break it further. So disabling this feature is the first thing to be ++tried if some font looks odd. But with smoothing off the hint generation ++algorithms may not work properly too. ++\fBDefault: enabled\fR ++.Sp ++\f(CW\fBt/T\fR\fR \- Auto-scaling to the 1000x1000 Type1 standard matrix. The ++\s-1TTF\s0 fonts are described in terms of an arbitrary matrix up to ++4000x4000. The converted fonts must be scaled to conform to ++the Type1 standard. But the scaling introduces additional rounding ++errors, so it may be curious sometimes to look at the font in its ++original scale. ++\fBDefault: enabled\fR ++.Sp ++\f(CW\fBv/V\fR\fR \- Do vectorization on the bitmap fonts. Functionally ++\*(L"vectorization\*(R" is the same thing as \*(L"autotracing\*(R", a different word is ++used purely to differentiate it from the Autotrace library. It tries to ++produce nice smooth outlines from bitmaps. This feature is still a work ++in progress though the results are already mostly decent. ++\fBDefault: disabled\fR ++.Sp ++\f(CW\fBw/W\fR\fR \- Glyphs\*(R' width corection. This option is designed to be ++used on broken fonts which specify too narrow widths for the ++letters. You can tell that a font can benefit from this option ++if you see that the characters are smashed together without ++any whitespace between them. This option causes the converter ++to set the character widths to the actual width of this character ++plus the width of a typical vertical stem. But on the other hand ++the well-designed fonts may have characters that look better if ++their widths are set slightly narrower. Such well-designed fonts ++will benefit from disabling this feature. You may want to convert ++a font with and without this feature, compare the results and ++select the better one. This feature may be used only on proportional ++fonts, it has no effect on the fixed-width fonts. ++\fBDefault: disabled\fR ++.Sp ++\f(CW\fBz/Z\fR\fR \- Use the Autotrace library on the bitmap fonts. The results ++are horrible and \fBthe use of this option is not recommended\fR. This option is ++present for experimental purposes. It may change or be removed in the ++future. The working tracing can be achieved with option \f(CW\fB-OV\fR\fR. ++\fBDefault: disabled\fR ++.Ip "\(bu" 2 ++\f(CW\fB-p \fIparser_name\fR\fR\fR \- Use the specified front-end parser to read the font file. ++If this option is not used, ttf2pt1 selects the parser automatically based ++on the suffix of the font file name, it uses the first parser in its ++list that supports this font type. Now two parsers are supported: ++.Sp ++\ \ \f(CWttf\fR \- built-in parser for the ttf files (suffix \f(CW.ttf\fR) ++.Sp ++\ \ \f(CWbdf\fR \- built-in parser for the \s-1BDF\s0 files (suffix \f(CW.bdf\fR) ++.Sp ++\ \ \f(CWft\fR \- parser based on the FreeType-2 library (suffixes \f(CW.ttf\fR, ++\&\f(CW.otf\fR, \f(CW.pfa\fR, \f(CW.pfb\fR) ++.Sp ++The parser \f(CWft\fR is \fB\s-1NOT\s0\fR linked in by default. See \f(CWMakefile\fR ++for instructions how to enable it. We do no support this parser on ++Windows: probably it will work but nobody tried and nobody knows how ++to build it. ++.Sp ++The conversion of the bitmap fonts (such as \s-1BDF\s0) is simplistic yet, ++producing jagged outlines. When converting such fonts, it might be ++a good idea to turn off the hint substitution (using option \fB\-Ou\fR) ++because the hints produced will be huge but not adding much to the ++quality of the fonts. ++.Ip "\(bu" 2 ++\f(CW\fB-u \fInumber\fR\fR\fR \- Mark the font with this value as its ++UniqueID. The UniqueID is used by the printers with the hard disks ++to cache the rasterized characters and thus significantly ++speed-up the printing. Some of those printers just can't ++store the fonts without UniqueID on their disk.The problem ++is that the \s-1ID\s0 is supposed to be unique, as it name says. And ++there is no easy way to create a guaranteed unique \s-1ID\s0. Adobe specifies ++the range 4000000-4999999 for private IDs but still it's difficult ++to guarantee the uniqueness within it. So if you don't really need the ++UniqueID don't use it, it's optional. Luckily there are a few millions of ++possible IDs, so the chances of collision are rather low. ++If instead of the number a special value \*(L'\f(CW\fBA\fR\fR\*(R' is given ++then the converter generates the value of UniqueID automatically, ++as a hash of the font name. (\fB\s-1NOTE\s0:\fR in the version 3.22 the ++algorithm for autogeneration of UniqueID was changed to fit the values ++into the Adobe-spacified range. This means that if UniqueIDs were used ++then the printer's cache may need to be flushed before replacing the ++fonts converted by an old version with fonts converted by a newer version). ++A simple way to find if any of the fonts in a given directory have ++duplicated UniqueIDs is to use the command: ++.Sp ++\f(CW\ \ cat *.pf[ab] | grep UniqueID | sort | uniq -c | grep -v ' 1 '\fR ++.Sp ++Or if you use \f(CWscripts/convert\fR it will do that for you automatically ++plus it will also give the exact list of files with duplicate UIDs. ++.Ip "\(bu" 2 ++\f(CW\fB-v \fIsize\fR\fR\fR \- Re-scale the font to get the size of a typical uppercase ++letter somewhere around the specified size. Actually, it re-scales ++the whole font to get the size of one language-dependent letter to be ++at least of the specified size. Now this letter is \*(L"A\*(R" in all the ++supported languages. The size is specified in the points of the ++Type 1 coordinate grids, the maximal value is 1000. This is an ++experimental option and should be used with caution. It tries to ++increase the visible font size for a given point size and thus make ++the font more readable. But if overused it may cause the fonts to ++look out of scale. As of now the interesting values of size for ++this option seem to be located mostly between 600 and 850. This ++re-scaling may be quite useful but needs more experience to ++understand the balance of its effects. ++.Ip "\(bu" 2 ++\f(CW\fB-W \fIlevel\fR\fR\fR \- Select the verbosity level of the warnings. ++Currently the levels from 0 to 4 are supported. Level 0 means no warnings ++at all, level 4 means all the possible warnings. The default level is 3. ++Other levels may be added in the future, so using the level number 99 is ++recommended to get all the possible warnings. Going below level 2 is ++not generally recommended because you may miss valuable information about ++the problems with the fonts being converted. ++.Ip "\(bu" 2 ++\fBObsolete option:\fR ++\f(CW\fB-A\fR\fR \- Print the font metrics (.afm file) instead of the font on \s-1STDOUT\s0. ++Use \fB\-\s-1GA\s0\fR instead. ++.Ip "\(bu" 2 ++\fBVery obsolete option:\fR ++.Sp ++The algorithm that implemented the forced fixed width had major ++flaws, so it was disabled. The code is still in the program and ++some day it will be refined and returned back. Meanwhile the ++option name \*(L'\fB\-f\fR\*(R' was reused for another option. The old version was: ++.Sp ++\f(CW\fB-f\fR\fR \- Don't try to force the fixed width of font. Normally the converter ++considers the fonts in which the glyph width deviates by not more ++than 5% as buggy fixed width fonts and forces them to have really ++fixed width. If this is undesirable, it can be disabled by this option. ++.PP ++The \f(CW.pfa\fR font format supposes that the description of the characters ++is binary encoded and encrypted. This converter does not encode or ++encrypt the data by default, you have to specify the option \*(L'\fB\-e\fR\*(R' ++or use the \f(CWt1asm\fR program to assemble (that means, encode and ++encrypt) the font program. The \f(CWt1asm\fR program that is included with ++the converter is actually a part of the \f(CWt1utils\fR package, rather old ++version of which may be obtained from ++.PP ++http://ttf2pt1.sourceforge.net/t1utils.tar.gz ++.PP ++Note that \f(CWt1asm\fR from the old version of that package won't work properly ++with the files generated by \f(CWttf2pt1\fR version 3.20 and later. Please use ++\f(CWt1asm\fR packaged with \f(CWttf2pt1\fR or from the new version \f(CWt1utils\fR ++instead. For a newer version of \f(CWt1utils\fR please look at ++.PP ++http://www.lcdf.org/~eddietwo/type/ ++.SH "EXAMPLES" ++So, the following command lines: ++.PP ++\f(CWttf2pt1 -e ttffont.ttf t1font\fR ++.PP ++\f(CWttf2pt1 ttffont.ttf - | t1asm >t1font.pfa\fR ++.PP ++represent two ways to get a working font. The benefit of the second form ++is that other filters may be applied to the font between the converter ++and assembler. ++.SH "FILES" ++.Ip "\(bu" 2 ++\s-1TTF2PT1_LIBXDIR/\s0t1asm ++.Ip "\(bu" 2 ++\s-1TTF2PT1_SHAREDIR\s0/* ++.Ip "\(bu" 2 ++\s-1TTF2PT1_SHAREDIR/\s0scripts/* ++.Ip "\(bu" 2 ++\s-1TTF2PT1_SHAREDIR/\s0other/* ++.Ip "\(bu" 2 ++\s-1TTF2PT1_SHAREDIR/README\s0 ++.Ip "\(bu" 2 ++\s-1TTF2PT1_SHAREDIR/FONTS\s0 ++.SH "SEE ALSO" ++.Ip "\(bu" 4 ++the \fIttf2pt1_convert(1)\fR manpage ++.Ip "\(bu" 4 ++the \fIttf2pt1_x2gs(1)\fR manpage ++.Ip "\(bu" 4 ++the \fIt1asm(1)\fR manpage ++.Ip "\(bu" 4 ++ttf2pt1-announce@lists.sourceforge.net ++.Sp ++The mailing list with announcements about ttf2pt1. It is a moderated mailing ++with extremely low traffic. Everyone is encouraged to subscribe to keep in ++touch with the current status of project. To subscribe use the Web interface ++at http://lists.sourceforge.net/mailman/listinfo/ttf2pt1-announce. ++If you have only e-mail access to the Net then send a subscribe request to ++the development mailing list ttf2pt1-devel@lists.sourceforge.net and somebody ++will help you with subscription. ++.Ip "\(bu" 4 ++ttf2pt1-devel@lists.sourceforge.net ++.Sp ++ttf2pt1-users@lists.sourceforge.net ++.Sp ++The ttf2pt1 mailing lists for development and users issues. They have not ++that much traffic either. To subscribe use the Web interface at ++http://lists.sourceforge.net/mailman/listinfo/ttf2pt1-devel ++and http://lists.sourceforge.net/mailman/listinfo/ttf2pt1-users. ++If you have only e-mail access to the Net then send a subscribe request to ++the development mailing list ttf2pt1-devel@lists.sourceforge.net and somebody ++will help you with subscription. ++.Ip "\(bu" 4 ++http://ttf2pt1.sourceforge.net ++.Sp ++The main page of the project. ++.Sp ++http://www.netspace.net.au/~mheath/ttf2pt1/ ++.Sp ++The old main page of the project. ++.SH "BUGS" ++It seems that many Eastern fonts use features of the TTF format that are ++not supported by the ttf2pt1's built-in front-end parser. Because of ++this for now we recommend using the FreeType-based parser (option ++\&\*(R'\fB\-p ft\fR') with the \*(L"\f(CWplane\fR\*(R" language. ++.Sh "Troubleshooting and bug reports" ++Have problems with conversion of some font ? The converter dumps core ? Or your ++printer refuses to understand the converted fonts ? Or some characters are ++missing ? Or some characters look strange ? ++.PP ++Send the bug reports to the ttf2pt1 development mailing list at ++ttf2pt1-devel@lists.sourceforge.net. ++.PP ++Try to collect more information about the problem and include it into ++the bug report. (Of course, even better if you would provide a ready ++fix, but just a detailed bug report is also good). Provide detailed ++information about your problem, this will speed up the response greatly. ++Don't just write \*(L"this font looks strange after conversion\*(R" but describe ++what's exactly wrong with it: for example, what characters look wrong ++and what exactly is wrong about their look. Providing a link to the ++original font file would be also a good idea. Try to do a little ++troublehooting and report its result. This not only would help with ++the fix but may also give you a temporary work-around for the bug. ++.PP ++First, enable full warnings with option \*(L'\fB\-W99\fR\*(R', save them to ++a file and read carefully. Sometimes the prolem is with a not implemented ++feature which is reported in the warnings. Still, reporting about such ++problems may be a good idea: some features were missed to cut corners, ++in hope that no real font is using them. So a report about a font using ++such a feature may motivate someone to implement it. Of course, you ++may be the most motivated person: after all, you are the one wishing ++to convert that font. ;\-) Seriously, the philosophy \*(L"scrath your own itch\*(R" ++seems to be the strongest moving force behind the Open Source software. ++.PP ++The next step is playing with the options. This serves a dual purpose: ++on one hand, it helps to localize the bug, on the other hand you may be ++able to get a working version of the font for the meantime while the ++bug is being fixed. The typical options to try out are: first \*(L'\fB\-Ou\fR\*(R', if ++it does not help then \*(L'\fB\-Os\fR\*(R', then \*(L'\fB\-Oh\fR\*(R', then \*(L'\fB\-Oo\fR\*(R'. ++They are described in a bit more detail above. Try them one by one ++and in combinations. See if with them the resulting fonts look better. ++.PP ++On some fonts ttf2pt1 just crashes. Commonly that happens because the ++font being converted is highly defective (although sometimes the bug ++is in ttf2pt1 itself). In any case it should not crash, so the reports ++about such cases will help to handle these defects properly in future. ++.PP ++We try to respond to the bug reports in a timely fashion but alas, this ++may not always be possible, especially if the problem is complex. ++This is a volunteer project and its resources are limited. Because ++of this we would appreciate bug reports as detailed as possible, ++and we would appreciate the ready fixes and contributions even more. ++.SH "HISTORY" ++Based on ttf2pfa by Andrew Weeks, and help from Frank Siegert. ++.PP ++Modification by Mark Heath. ++.PP ++Further modification by Sergey Babkin. ++.PP ++The Type1 assembler by I. Lee Hetherington with modifications by ++Kai-Uwe Herbing. ++ ++.rn }` '' ++.IX Title "TTF2PT1 1" ++.IX Name "TTF2PT1 - A True Type to PostScript Type 1 Font Converter" ++ ++.IX Header "NAME" ++ ++.IX Header "SYNOPSIS" ++ ++.IX Header "DESCRIPTION" ++ ++.IX Header "OPTIONS" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Header "EXAMPLES" ++ ++.IX Header "FILES" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Header "SEE ALSO" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Header "BUGS" ++ ++.IX Subsection "Troubleshooting and bug reports" ++ ++.IX Header "HISTORY" ++ +diff -ruN xserver-old/hw/xprint/extras/ttf2pt1/ttf2pt1.c xserver/hw/xprint/extras/ttf2pt1/ttf2pt1.c +--- xserver-old/hw/xprint/extras/ttf2pt1/ttf2pt1.c 1970-01-01 10:00:00.000000000 +1000 ++++ xserver/hw/xprint/extras/ttf2pt1/ttf2pt1.c 2006-06-27 13:10:26.000000000 +1000 +@@ -0,0 +1,2722 @@ ++/* ++ * True Type Font to Adobe Type 1 font converter ++ * By Mark Heath ++ * Based on ttf2pfa by Andrew Weeks ++ * With help from Frank M. Siegert ++ * ++ * see COPYRIGHT for full copyright notice ++ * ++*********************************************************************** ++ * ++ * Sergey Babkin , ++ * ++ * Added post-processing of resulting outline to correct the errors ++ * both introduced during conversion and present in the original font, ++ * autogeneration of hints (has yet to be improved though) and BlueValues, ++ * scaling to 1000x1000 matrix, option to print the result on STDOUT, ++ * support of Unicode to CP1251 conversion, optimization of the ++ * resulting font code by space (that improves the speed too). Excluded ++ * the glyphs that are unaccessible through the encoding table from ++ * the output file. Added the built-in Type1 assembler (taken from ++ * the `t1utils' package). ++ * ++*********************************************************************** ++ * ++ * Thomas Henlich ++ * ++ * Added generation of .afm file (font metrics) ++ * Read encoding information from encoding description file ++ * Fixed bug in error message about unknown language ('-l' option) ++ * Added `:' after %%!PS-AdobeFont-1.0 ++ * changed unused entries in ISOLatin1Encoding[] from .notdef to c127,c128... ++ * ++*********************************************************************** ++ * ++ * Thomas Henlich ++ * ++ * Added generation of .afm file (font metrics) ++ * ++*********************************************************************** ++ * ++ * Bug Fixes: ++************************************************************************ ++ * ++ * Sun, 21 Jun 1998 Thomas Henlich ++ * 1. "width" should be "short int" because otherwise: ++ * characters with negative widths (e.g. -4) become *very* wide (65532) ++ * 2. the number of /CharStrings is numglyphs and not numglyphs+1 ++ * ++*********************************************************************** ++ * ++ * ++ * ++ * The resultant font file produced by this program still needs to be ran ++ * through t1asm (from the t1utils archive) to produce a completely valid ++ * font. ++ * ++ */ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#ifdef _GNU_SOURCE ++#include ++#endif ++ ++#ifndef WINDOWS ++# include ++# include ++# define BITBUCKET "/dev/null" ++# include ++#else ++# define WINDOWS_FUNCTIONS /* ask to define functions - in one file only */ ++# include "windows.h" ++# define BITBUCKET "NUL" ++# define snprintf _snprintf ++#endif ++ ++#ifdef XP_PSTEXT ++#include ++#include FT_FREETYPE_H ++#include FT_TRUETYPE_TABLES_H ++#include FT_BBOX_H ++#include FT_GLYPH_H ++ ++#include FT_CONFIG_CONFIG_H ++#include FT_CONFIG_OPTIONS_H ++#include FT_ERRORS_H ++#include FT_SYSTEM_H ++#include FT_IMAGE_H ++#include FT_TYPES_H ++#include FT_OUTLINE_H ++#include FT_MODULE_H ++#include FT_RENDER_H ++#include FT_TYPE1_TABLES_H ++#include FT_TRUETYPE_IDS_H ++#include FT_TRUETYPE_TAGS_H ++#include FT_MULTIPLE_MASTERS_H ++#include FT_SFNT_NAMES_H ++ ++#include "os.h" ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#define NOT_IN_FTFUNCS ++#include ++#endif /* XP_PSTEXT */ ++ ++#include "pt1.h" ++#include "global.h" ++#include "version.h" ++ ++/* globals */ ++ ++/* table of front-ends */ ++ ++#ifdef USE_TTF ++extern struct frontsw ttf_sw; ++#endif /* USE_TTF */ ++#ifdef USE_BDF ++extern struct frontsw bdf_sw; ++#endif /* USE_BDF */ ++#if defined(USE_FREETYPE) ++ extern struct frontsw freetype_sw; ++#endif ++ ++struct frontsw *frontswtab[] = { ++#ifdef USE_BDF ++ &bdf_sw, ++#endif /* USE_BDF */ ++#if defined(USE_FREETYPE) && defined(PREFER_FREETYPE) ++ &freetype_sw, ++#endif ++#ifdef USE_TTF ++ &ttf_sw, ++#endif /* USE_TTF */ ++#if defined(USE_FREETYPE) && !defined(PREFER_FREETYPE) ++ &freetype_sw, ++#endif ++ NULL /* end of table */ ++}; ++ ++struct frontsw *cursw=0; /* the active front end */ ++char *front_arg=""; /* optional argument */ ++ ++/* options */ ++int encode = 0; /* encode the resulting file */ ++int pfbflag = 0; /* produce compressed file */ ++int wantafm=0; /* want to see .afm instead of .t1a on stdout */ ++int correctvsize=0; /* try to correct the vertical size of characters */ ++int wantuid = 0; /* user wants UniqueID entry in the font */ ++int allglyphs = 0; /* convert all glyphs, not only 256 of them */ ++int warnlevel = 3; /* the level of permitted warnings */ ++int forcemap = 0; /* do mapping even on non-Unicode fonts */ ++/* options - maximal limits */ ++int max_stemdepth = 128; /* maximal depth of stem stack in interpreter (128 - limit from X11) */ ++/* options - debugging */ ++int absolute = 0; /* print out in absolute values */ ++int reverse = 1; /* reverse font to Type1 path directions */ ++/* options - suboptions of Outline Processing, defaults are set in table */ ++int optimize; /* enables space optimization */ ++int smooth; /* enable smoothing of outlines */ ++int transform; /* enables transformation to 1000x1000 matrix */ ++int hints; /* enables autogeneration of hints */ ++int subhints; /* enables autogeneration of substituted hints */ ++int trybold; /* try to guess whether the font is bold */ ++int correctwidth; /* try to correct the character width */ ++int vectorize; /* vectorize the bitmaps */ ++int use_autotrace; /* use the autotrace library on bitmap */ ++/* options - suboptions of File Generation, defaults are set in table */ ++int gen_pfa; /* generate the font file */ ++int gen_afm; /* generate the metrics file */ ++int gen_dvienc; /* generate the dvips encoding file */ ++ ++/* not quite options to select a particular source encoding */ ++int force_pid = -1; /* specific platform id */ ++int force_eid = -1; /* specific encoding id */ ++ ++/* structure to define the sub-option lists controlled by the ++ * case: uppercase enables them, lowercase disables ++ */ ++struct subo_case { ++ char disbl; /* character to disable - enforced lowercase */ ++ char enbl; /* character to enable - auto-set as toupper(disbl) */ ++ int *valp; /* pointer to the actual variable containing value */ ++ int dflt; /* default value */ ++ char *descr; /* description */ ++}; ++ ++#ifdef DEBUG ++int debug = DEBUG; /* debugging flag */ ++#else ++int debug = 0; ++#endif /* DEBUG */ ++ ++FILE *null_file, *pfa_file, *afm_file, *dvienc_file; ++int numglyphs; ++struct font_metrics fontm; ++ ++/* non-globals */ ++static char *strUID = 0; /* user-supplied UniqueID */ ++static unsigned long numUID; /* auto-generated UniqueID */ ++ ++static int ps_fmt_3 = 0; ++static double scale_factor, original_scale_factor; ++ ++static char *glyph_rename[ENCTABSZ]; ++ ++/* the names assigned if the original font ++ * does not specify any ++ */ ++ ++static char *Fmt3Encoding[256] = { ++ "c0", "c1", "c2", "c3", ++ "c4", "c5", "c6", "c7", ++ "c8", "c9", "c10", "c11", ++ "c12", "CR", "c14", "c15", ++ "c16", "c17", "c18", "c19", ++ "c20", "c21", "c22", "c23", ++ "c24", "c25", "c26", "c27", ++ "c28", "c29", "c30", "c31", ++ "space", "exclam", "quotedbl", "numbersign", ++ "dollar", "percent", "ampersand", "quotesingle", ++ "parenleft", "parenright", "asterisk", "plus", ++ "comma", "hyphen", "period", "slash", ++ "zero", "one", "two", "three", ++ "four", "five", "six", "seven", ++ "eight", "nine", "colon", "semicolon", ++ "less", "equal", "greater", "question", ++ "at", "A", "B", "C", ++ "D", "E", "F", "G", ++ "H", "I", "J", "K", ++ "L", "M", "N", "O", ++ "P", "Q", "R", "S", ++ "T", "U", "V", "W", ++ "X", "Y", "Z", "bracketleft", ++ "backslash", "bracketright", "asciicircum", "underscore", ++ "grave", "a", "b", "c", ++ "d", "e", "f", "g", ++ "h", "i", "j", "k", ++ "l", "m", "n", "o", ++ "p", "q", "r", "s", ++ "t", "u", "v", "w", ++ "x", "y", "z", "braceleft", ++ "bar", "braceright", "asciitilde", "c127", ++ "c128", "c129", "quotesinglbase", "florin", ++ "quotedblbase", "ellipsis", "dagger", "daggerdbl", ++ "circumflex", "perthousand", "Scaron", "guilsinglleft", ++ "OE", "c141", "c142", "c143", ++ "c144", "quoteleft", "quoteright", "quotedblleft", ++ "quotedblright", "bullet", "endash", "emdash", ++ "tilde", "trademark", "scaron", "guilsinglright", ++ "oe", "c157", "c158", "Ydieresis", ++ "nbspace", "exclamdown", "cent", "sterling", ++ "currency", "yen", "brokenbar", "section", ++ "dieresis", "copyright", "ordfeminine", "guillemotleft", ++ "logicalnot", "sfthyphen", "registered", "macron", ++ "degree", "plusminus", "twosuperior", "threesuperior", ++ "acute", "mu", "paragraph", "periodcentered", ++ "cedilla", "onesuperior", "ordmasculine", "guillemotright", ++ "onequarter", "onehalf", "threequarters", "questiondown", ++ "Agrave", "Aacute", "Acircumflex", "Atilde", ++ "Adieresis", "Aring", "AE", "Ccedilla", ++ "Egrave", "Eacute", "Ecircumflex", "Edieresis", ++ "Igrave", "Iacute", "Icircumflex", "Idieresis", ++ "Eth", "Ntilde", "Ograve", "Oacute", ++ "Ocircumflex", "Otilde", "Odieresis", "multiply", ++ "Oslash", "Ugrave", "Uacute", "Ucircumflex", ++ "Udieresis", "Yacute", "Thorn", "germandbls", ++ "agrave", "aacute", "acircumflex", "atilde", ++ "adieresis", "aring", "ae", "ccedilla", ++ "egrave", "eacute", "ecircumflex", "edieresis", ++ "igrave", "iacute", "icircumflex", "idieresis", ++ "eth", "ntilde", "ograve", "oacute", ++ "ocircumflex", "otilde", "odieresis", "divide", ++ "oslash", "ugrave", "uacute", "ucircumflex", ++ "udieresis", "yacute", "thorn", "ydieresis" ++}; ++ ++#ifdef notdef /* { */ ++/* This table is not used anywhere in the code ++ * so it's ifdef-ed out by default but left in ++ * the source code for reference purposes (and ++ * possibly for future use) ++ */ ++ ++static char *ISOLatin1Encoding[256] = { ++ ".null", ".notdef", ".notdef", ".notdef", ++ ".notdef", ".notdef", ".notdef", ".notdef", ++ ".notdef", ".notdef", ".notdef", ".notdef", ++ ".notdef", "CR", ".notdef", ".notdef", ++ ".notdef", ".notdef", ".notdef", ".notdef", ++ ".notdef", ".notdef", ".notdef", ".notdef", ++ ".notdef", ".notdef", ".notdef", ".notdef", ++ ".notdef", ".notdef", ".notdef", ".notdef", ++ "space", "exclam", "quotedbl", "numbersign", ++ "dollar", "percent", "ampersand", "quoteright", ++ "parenleft", "parenright", "asterisk", "plus", ++ "comma", "hyphen", "period", "slash", ++ "zero", "one", "two", "three", ++ "four", "five", "six", "seven", ++ "eight", "nine", "colon", "semicolon", ++ "less", "equal", "greater", "question", ++ "at", "A", "B", "C", ++ "D", "E", "F", "G", ++ "H", "I", "J", "K", ++ "L", "M", "N", "O", ++ "P", "Q", "R", "S", ++ "T", "U", "V", "W", ++ "X", "Y", "Z", "bracketleft", ++ "backslash", "bracketright", "asciicircum", "underscore", ++ "grave", "a", "b", "c", ++ "d", "e", "f", "g", ++ "h", "i", "j", "k", ++ "l", "m", "n", "o", ++ "p", "q", "r", "s", ++ "t", "u", "v", "w", ++ "x", "y", "z", "braceleft", ++ "bar", "braceright", "asciitilde", "c127", ++ "c128", "c129", "quotesinglbase", "florin", ++ "quotedblbase", "ellipsis", "dagger", "daggerdbl", ++ "circumflex", "perthousand", "Scaron", "guilsinglleft", ++ "OE", "c141", "c142", "c143", ++ "c144", "quoteleft", "quoteright", "quotedblleft", ++ "quotedblright", "bullet", "endash", "emdash", ++ "tilde", "trademark", "scaron", "guilsinglright", ++ "oe", "c157", "c158", "Ydieresis", ++ "nbspace", "exclamdown", "cent", "sterling", ++ "currency", "yen", "brokenbar", "section", ++ "dieresis", "copyright", "ordfeminine", "guillemotleft", ++ "logicalnot", "sfthyphen", "registered", "macron", ++ "degree", "plusminus", "twosuperior", "threesuperior", ++ "acute", "mu", "paragraph", "periodcentered", ++ "cedilla", "onesuperior", "ordmasculine", "guillemotright", ++ "onequarter", "onehalf", "threequarters", "questiondown", ++ "Agrave", "Aacute", "Acircumflex", "Atilde", ++ "Adieresis", "Aring", "AE", "Ccedilla", ++ "Egrave", "Eacute", "Ecircumflex", "Edieresis", ++ "Igrave", "Iacute", "Icircumflex", "Idieresis", ++ "Eth", "Ntilde", "Ograve", "Oacute", ++ "Ocircumflex", "Otilde", "Odieresis", "multiply", ++ "Oslash", "Ugrave", "Uacute", "Ucircumflex", ++ "Udieresis", "Yacute", "Thorn", "germandbls", ++ "agrave", "aacute", "acircumflex", "atilde", ++ "adieresis", "aring", "ae", "ccedilla", ++ "egrave", "eacute", "ecircumflex", "edieresis", ++ "igrave", "iacute", "icircumflex", "idieresis", ++ "eth", "ntilde", "ograve", "oacute", ++ "ocircumflex", "otilde", "odieresis", "divide", ++ "oslash", "ugrave", "uacute", "ucircumflex", ++ "udieresis", "yacute", "thorn", "ydieresis" ++}; ++ ++#endif /* } notdef */ ++ ++static char *adobe_StandardEncoding[256] = { ++ ".notdef", ".notdef", ".notdef", ".notdef", ++ ".notdef", ".notdef", ".notdef", ".notdef", ++ ".notdef", ".notdef", ".notdef", ".notdef", ++ ".notdef", ".notdef", ".notdef", ".notdef", ++ ".notdef", ".notdef", ".notdef", ".notdef", ++ ".notdef", ".notdef", ".notdef", ".notdef", ++ ".notdef", ".notdef", ".notdef", ".notdef", ++ ".notdef", ".notdef", ".notdef", ".notdef", ++ "space", "exclam", "quotedbl", "numbersign", ++ "dollar", "percent", "ampersand", "quoteright", ++ "parenleft", "parenright", "asterisk", "plus", ++ "comma", "hyphen", "period", "slash", ++ "zero", "one", "two", "three", ++ "four", "five", "six", "seven", ++ "eight", "nine", "colon", "semicolon", ++ "less", "equal", "greater", "question", ++ "at", "A", "B", "C", "D", "E", "F", "G", ++ "H", "I", "J", "K", "L", "M", "N", "O", ++ "P", "Q", "R", "S", "T", "U", "V", "W", ++ "X", "Y", "Z", "bracketleft", ++ "backslash", "bracketright", "asciicircum", "underscore", ++ "quoteleft", "a", "b", "c", "d", "e", "f", "g", ++ "h", "i", "j", "k", "l", "m", "n", "o", ++ "p", "q", "r", "s", "t", "u", "v", "w", ++ "x", "y", "z", "braceleft", ++ "bar", "braceright", "asciitilde", ".notdef", ++ ".notdef", ".notdef", ".notdef", ".notdef", ++ ".notdef", ".notdef", ".notdef", ".notdef", ++ ".notdef", ".notdef", ".notdef", ".notdef", ++ ".notdef", ".notdef", ".notdef", ".notdef", ++ ".notdef", ".notdef", ".notdef", ".notdef", ++ ".notdef", ".notdef", ".notdef", ".notdef", ++ ".notdef", ".notdef", ".notdef", ".notdef", ++ ".notdef", ".notdef", ".notdef", ".notdef", ++ ".notdef", "exclamdown", "cent", "sterling", ++ "fraction", "yen", "florin", "section", ++ "currency", "quotesingle", "quotedblleft", "guillemotleft", ++ "guilsinglleft", "guilsinglright", "fi", "fl", ++ ".notdef", "endash", "dagger", "daggerdbl", ++ "periodcentered", ".notdef", "paragraph", "bullet", ++ "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", ++ "ellipsis", "perthousand", ".notdef", "questiondown", ++ ".notdef", "grave", "acute", "circumflex", ++ "tilde", "macron", "breve", "dotaccent", ++ "dieresis", ".notdef", "ring", "cedilla", ++ ".notdef", "hungarumlaut", "ogonek", "caron", ++ "emdash", ".notdef", ".notdef", ".notdef", ++ ".notdef", ".notdef", ".notdef", ".notdef", ++ ".notdef", ".notdef", ".notdef", ".notdef", ++ ".notdef", ".notdef", ".notdef", ".notdef", ++ ".notdef", "AE", ".notdef", "ordfeminine", ++ ".notdef", ".notdef", ".notdef", ".notdef", ++ "Lslash", "Oslash", "OE", "ordmasculine", ++ ".notdef", ".notdef", ".notdef", ".notdef", ++ ".notdef", "ae", ".notdef", ".notdef", ++ ".notdef", "dotlessi", ".notdef", ".notdef", ++ "lslash", "oslash", "oe", "germandbls", ++ ".notdef", ".notdef", ".notdef", ".notdef" ++}; ++ ++/* ++ * Decription of the supported conversions from Unicode ++ * ++ * SB ++ * Yes, I know that the compiled-in conversion is stupid but ++ * it is simple to implement and allows not to worry about the ++ * filesystem context. After all, the source is always available ++ * and adding another language to it is easy. ++ * ++ * The language name is expected to be the same as the subdirectory name ++ * in the `encodings' directory (for possible future extensions). ++ * The primary use of the aliases is for guessing based on the current ++ * locale. ++ */ ++ ++#define MAXUNIALIAS 10 ++#define MAXUNITABLES 3 ++ ++/* the character used as the language argument separator */ ++#define LANG_ARG_SEP '+' ++ ++ ++/* ++ * Types of language-related routines. Arguments are: ++ * name is the glyph name ++ * arg is the user-specified language-dependent argument ++ * which can for example select the subfont plane for Eastern fonts. ++ * If none is supplied by user then an empty string ("") is passed. ++ * If no language is specified by user and auto-guessing happens ++ * then NULL is passed. ++ * when shows if the conversion by name was called before conversion by ++ * map or after (it's called twice) ++ */ ++ ++/* type of the Unicode map initialization routine */ ++typedef void uni_init_t(char *arg); ++ ++/* type of Unicode converter-by-name function ++ * it's called for each glyph twice: one time for each glyph ++ * before doing conversion by map and one time after ++ */ ++typedef int uni_conv_t(char *name, char *arg, int when); ++#define UNICONV_BYNAME_BEFORE 0 ++#define UNICONV_BYNAME_AFTER 1 ++ ++struct uni_language { ++ uni_init_t *init[MAXUNITABLES]; /* map initialization routines */ ++ uni_conv_t *convbyname; /* the name-based conversion function */ ++ char *name; /* the language name */ ++ char *descr; /* description */ ++ char *alias[MAXUNIALIAS]; /* aliases of the language name */ ++ int sample_upper; /* code of some uppercase character for correctvsize() */ ++}; ++ ++/* the converter routines have an option of adding this suffix to the font name */ ++static char *uni_font_name_suffix = ""; /* empty by default */ ++/* this buffer may be used to store the suffix */ ++#define UNI_MAX_SUFFIX_LEN 100 ++static char uni_suffix_buf[UNI_MAX_SUFFIX_LEN+1]; ++ ++/* ++ * Prototypes of the conversion routines ++ */ ++ ++static uni_init_t unicode_latin1; ++static uni_init_t unicode_latin2; ++static uni_init_t unicode_latin4; ++static uni_init_t unicode_latin5; ++static uni_init_t unicode_cyrillic; ++static uni_init_t unicode_adobestd; ++static uni_init_t unicode_plane; ++static uni_conv_t unicode_adobestd_byname; ++ ++static uni_init_t unicode_init_user; ++ ++/* ++ * The order of descriptions is important: if we can't guess the ++ * language we just call all the conversion routines in order until ++ * we find one that understands this glyph. ++ */ ++static struct uni_language uni_lang[]= { ++ /* pseudo-language for all the languages using Latin1 */ ++ { ++ { unicode_latin1 }, ++ 0, /* no name-based mapping */ ++ "latin1", ++ "works for most of the Western languages", ++ { "en_", "de_", "fr_", "nl_", "no_", "da_", "it_" }, ++ 'A' ++ }, ++ { /* by Szalay Tamas */ ++ { unicode_latin2 }, ++ 0, /* no name-based mapping */ ++ "latin2", ++ "works for Central European languages", ++ { "hu_","pl_","cz_","si_","sk_" }, ++ 'A' ++ }, ++ { /* by Rièardas Èepas */ ++ { unicode_latin4 }, ++ 0, /* no name-based mapping */ ++ "latin4", ++ "works for Baltic languages", ++ { "lt_", "lv_" }, /* doubt about ee_ */ ++ 'A' ++ }, ++ { /* by Turgut Uyar */ ++ { unicode_latin5 }, ++ 0, /* no name-based mapping */ ++ "latin5", ++ "for Turkish", ++ { "tr_" }, ++ 'A' ++ }, ++ { /* by Zvezdan Petkovic */ ++ { unicode_cyrillic, unicode_latin1 }, ++ 0, /* no name-based mapping */ ++ "cyrillic", ++ "in Windows encoding", ++ { "bg_", "be_", "mk_", "ru_", "sr_", "su_", "uk_" }, ++ 'A' ++ }, ++ { ++ { unicode_cyrillic, unicode_latin1 }, ++ 0, /* no name-based mapping */ ++ "russian", ++ "obsolete, use cyrillic instead", ++ { 0 }, ++ 'A' ++ }, ++ { ++ { unicode_cyrillic, unicode_latin1 }, ++ 0, /* no name-based mapping */ ++ "bulgarian", ++ "obsolete, use cyrillic instead", ++ { 0 }, ++ 'A' ++ }, ++ { ++ { unicode_adobestd }, ++ unicode_adobestd_byname, ++ "adobestd", ++ "Adobe Standard, expected by TeX", ++ { NULL }, ++ 'A' ++ }, ++ { ++ { unicode_plane }, ++ 0, /* no name-based mapping */ ++ "plane", ++ "one plane of Unicode or other multi-byte encoding as is", ++ { NULL }, ++ 0 /* no easy way to predict the capital letters */ ++ }, ++}; ++ ++static struct uni_language uni_lang_user = { ++ { unicode_init_user }, ++ 0, /* no name-based mapping */ ++ 0, /* no name */ ++ 0, /* no description */ ++ { 0 }, ++ 0 /* no sample */ ++}; ++ ++static struct uni_language *uni_lang_selected=0; /* 0 means "unknown, try all" */ ++static int uni_sample='A'; /* sample of an uppercase character */ ++static char *uni_lang_arg=""; /* user-supplied language-dependent argument */ ++ ++extern int runt1asm(int); ++ ++/* ++ * user-defined loadable maps ++ */ ++ ++ ++/* The idea begind buckets is to avoid comparing every code with all ENCTABSZ codes in table. ++ * All the 16-bit unicode space is divided between a number of equal-sized buckets. ++ * Initially all the buckets are marked with 0. Then if any code in the bucket is ++ * used it's marked with 1. Later during translation we check the code's bucket first ++ * and it it's 0 then return failure right away. This may be useful for ++ * Chinese fonts with many thousands of glyphs. ++ */ ++ ++#define BUCKET_ID_BITS 11 ++#define MARK_UNI_BUCKET(unicode) SET_BITMAP(uni_user_buckets, (unicode)>>(16-BUCKET_ID_BITS)) ++#define IS_UNI_BUCKET(unicode) IS_BITMAP(uni_user_buckets, (unicode)>>(16-BUCKET_ID_BITS)) ++ ++static DEF_BITMAP(uni_user_buckets, 1< UNI_MAX_SUFFIX_LEN-1) ++ arg = NULL; ++ else { ++ sprintf(uni_suffix_buf, "-%s", arg); ++ uni_font_name_suffix = uni_suffix_buf; ++ } ++ } ++ ++ /* now read in the encoding description file, if requested */ ++ if ((unicode_map_file = fopen(path, "r")) == NULL) { ++ fprintf(stderr, "**** Cannot access map file '%s' ****\n", path); ++ exit(1); ++ } ++ ++ sawplane = 0; ++ if(arg==NULL) ++ enabled = found = 1; ++ else ++ enabled = found = 0; ++ ++ lineno=0; curpos=0; ++ while (fgets (buffer, UNIBFSZ, unicode_map_file) != NULL) { ++ char name[UNIBFSZ]; ++ ++ lineno++; ++ ++ if(sscanf(buffer, "plane %s", name)==1) { ++ sawplane = 1; ++ if(arg == 0) { ++ fprintf(stderr, "**** map file '%s' requires plane name\n", path); ++ fprintf(stderr, "for example:\n"); ++ fprintf(stderr, " ttf2pt1 -L %s%c[pid=N,eid=N,]%s ...\n", ++ path, LANG_ARG_SEP, name); ++ fprintf(stderr, "to select plane '%s'\n", name); ++ exit(1); ++ } ++ if( !strcmp(arg, name) ) { ++ enabled = found = 1; ++ curpos = 0; ++ } else { ++ enabled = 0; ++ if(found) /* no need to read further */ ++ break; ++ } ++ continue; ++ } ++ ++ if(sscanf(buffer, "id %d %d", &pid, &eid)==2) { ++ if( !overid /* only if the user has not overriden */ ++ && (enabled || !sawplane) ) { ++ force_pid = pid; force_eid = eid; ++ forcemap = 1; ++ } ++ continue; ++ } ++ ++ if( !enabled ) ++ continue; /* skip to the next plane */ ++ ++ if( sscanf(buffer, "at %i", &curpos) == 1 ) { ++ if(curpos > 255) { ++ fprintf(stderr, "**** map file '%s' line %d: code over 255\n", path, lineno); ++ exit(1); ++ } ++ if(ISDBG(EXTMAP)) fprintf(stderr, "=== at 0x%x\n", curpos); ++ continue; ++ } ++ ++ /* try the format of Roman Czyborra's files */ ++ if ( sscanf (buffer, " =%x U+%4x", &code, &unicode) == 2 ++ /* try the format of Linux locale charmap file */ ++ || sscanf (buffer, " <%*s /x%x ", &code, &unicode) == 2 ) { ++ if (code < ENCTABSZ) { ++ if(code >= enctabsz) enctabsz=code+1; ++ unicode_map[code] = unicode; ++ glyph_rename[code] = NULL; ++ } ++ } ++ /* try the format with glyph renaming */ ++ else if (sscanf (buffer, " !%x U+%4x %128s", &code, ++ &unicode, name) == 3) { ++ if (code < ENCTABSZ) { ++ if(code >= enctabsz) enctabsz=code+1; ++ unicode_map[code] = unicode; ++ glyph_rename[code] = strdup(name); ++ } ++ } ++ /* try the compact sequence format */ ++ else if( (n=sscanf(buffer, " %i%n", &unicode, &cnt)) == 1 ) { ++ p = buffer; ++ do { ++ if(curpos > 255) { ++ fprintf(stderr, "**** map file '%s' line %d: code over 255 for unicode 0x%x\n", ++ path, lineno, unicode); ++ exit(1); ++ } ++ if(ISDBG(EXTMAP)) fprintf(stderr, "=== 0x%d -> 0x%x\n", curpos, unicode); ++ unicode_map[curpos++] = unicode; ++ p += cnt; ++ if( sscanf(p, " %[,-]%n", &next,&cnt) == 1 ) { ++ if(ISDBG(EXTMAP)) fprintf(stderr, "=== next: '%c'\n", next); ++ p += cnt; ++ if( next == '-' ) { /* range */ ++ if ( sscanf(p, " %i%n", &unicode2, &cnt) != 1 ) { ++ fprintf(stderr, "**** map file '%s' line %d: missing end of range\n", path, lineno); ++ exit(1); ++ } ++ p += cnt; ++ if(ISDBG(EXTMAP)) fprintf(stderr, "=== range 0x%x to 0x%x\n", unicode, unicode2); ++ for(unicode++; unicode <= unicode2; unicode++) { ++ if(curpos > 255) { ++ fprintf(stderr, "**** map file '%s' line %d: code over 255 in unicode range ...-0x%x\n", ++ path, lineno, unicode2); ++ exit(1); ++ } ++ if(ISDBG(EXTMAP)) fprintf(stderr, "=== 0x%x -> 0x%x\n", curpos, unicode); ++ unicode_map[curpos++] = unicode; ++ } ++ } ++ } ++ } while ( sscanf(p, " %i%n", &unicode, &cnt) == 1 ); ++ } ++ ++ } ++ ++ fclose (unicode_map_file); ++ ++ if( !found ) { ++ fprintf(stderr, "**** map file '%s' has no plane '%s'\n", path, arg); ++ exit(1); ++ } ++ ++ if(unicode_map['A'] == 'A') ++ uni_sample = 'A'; /* seems to be compatible with Latin */ ++ else ++ uni_sample = 0; /* don't make any assumptions */ ++} ++ ++/* ++ * by Zvezdan Petkovic ++ */ ++static void ++unicode_cyrillic( ++ char *arg ++) ++{ ++ int i; ++ static unsigned int cyrillic_unicode_map[] = { ++ 0x0402, 0x0403, 0x201a, 0x0453, 0x201e, 0x2026, 0x2020, 0x2021, /* 80 */ ++ 0x20ac, 0x2030, 0x0409, 0x2039, 0x040a, 0x040c, 0x040b, 0x040f, /* 88 */ ++ 0x0452, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, /* 90 */ ++ 0x02dc, 0x2122, 0x0459, 0x203a, 0x045a, 0x045c, 0x045b, 0x045f, /* 98 */ ++ 0x00a0, 0x040e, 0x045e, 0x0408, 0x00a4, 0x0490, 0x00a6, 0x00a7, /* A0 */ ++ 0x0401, 0x00a9, 0x0404, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x0407, /* A8 */ ++ 0x00b0, 0x00b1, 0x0406, 0x0456, 0x0491, 0x00b5, 0x00b6, 0x00b7, /* B0 */ ++ 0x0451, 0x2116, 0x0454, 0x00bb, 0x0458, 0x0405, 0x0455, 0x0457, /* B8 */ ++ }; ++ ++ for(i=0; i<=0x7F; i++) ++ unicode_map[i] = i; ++ ++ for(i=0x80; i<=0xBF; i++) ++ unicode_map[i] = cyrillic_unicode_map[i-0x80]; ++ ++ for(i=0xC0; i<=0xFF; i++) ++ unicode_map[i] = i+0x350; ++ ++} ++ ++static void ++unicode_latin1( ++ char *arg ++) ++{ ++ int i; ++ static unsigned int latin1_unicode_map[] = { ++ 0x20ac, -1, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, /* 80 */ ++ 0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0x008d, 0x017d, 0x008f, /* 88 */ ++ 0x0090, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, /* 90 */ ++ 0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0x009d, 0x017e, 0x0178, /* 98 */ ++ }; ++ ++ for(i=0; i<=0x7F; i++) ++ unicode_map[i] = i; ++ ++ for(i=0x80; i<=0x9F; i++) ++ unicode_map[i] = latin1_unicode_map[i-0x80]; ++ ++ for(i=0xA0; i<=0xFF; i++) ++ unicode_map[i] = i; ++} ++ ++static void ++unicode_adobestd( ++ char *arg ++) ++{ ++ int i; ++ static unsigned int adobestd_unicode_map[] = { ++ -1, 0x00a1, 0x00a2, 0x00a3, 0x2215, 0x00a5, 0x0192, 0x00a7, /* A0 */ ++ 0x00a4, 0x0027, 0x201c, 0x00ab, 0x2039, 0x203a, 0xfb01, 0xfb02, /* A8 */ ++ -1, 0x2013, 0x2020, 0x2021, 0x2219, -1, 0x00b6, 0x2022, /* B0 */ ++ 0x201a, 0x201e, 0x201d, 0x00bb, 0x2026, 0x2030, -1, 0x00bf, /* B8 */ ++ -1, 0x0060, 0x00b4, 0x02c6, 0x02dc, 0x02c9, 0x02d8, 0x02d9, /* C0 */ ++ 0x00a8, -1, 0x02da, 0x00b8, -1, 0x02dd, 0x02db, 0x02c7, /* C8 */ ++ 0x2014, -1, -1, -1, -1, -1, -1, -1, /* D0 */ ++ -1, -1, -1, -1, -1, -1, -1, -1, /* D8 */ ++ -1, 0x00c6, -1, 0x00aa, -1, -1, -1, -1, /* E0 */ ++ 0x0141, 0x00d8, 0x0152, 0x00ba, -1, -1, -1, -1, /* E8 */ ++ -1, 0x00e6, -1, -1, -1, 0x0131, -1, -1, /* F0 */ ++ 0x0142, 0x00f8, 0x0153, 0x00df, -1, -1, -1, -1, /* F8 */ ++ }; ++ ++ for(i=0; i<=0x7F; i++) ++ unicode_map[i] = i; ++ ++ unicode_map[0x27] = 0x2019; ++ unicode_map[0x60] = -1; ++ ++ /* 0x80 to 0x9F is a hole */ ++ ++ for(i=0xA0; i<=0xFF; i++) ++ unicode_map[i] = adobestd_unicode_map[i-0xA0]; ++} ++ ++/* ++ * Not all of the Adobe glyphs are in the Unicode ++ * standard maps, so the font creators have ++ * different ideas about their codes. Because ++ * of this we try to map based on the glyph ++ * names instead of Unicode codes. If there are ++ * no glyph names (ps_fmt_3!=0) we fall back ++ * to the code-based scheme. ++ */ ++ ++static int ++unicode_adobestd_byname( ++ char *name, ++ char *arg, ++ int where ++) ++{ ++ int i; ++ ++ /* names always take precedence over codes */ ++ if(where == UNICONV_BYNAME_AFTER) ++ return -1; ++ ++ for(i=32; i<256; i++) { ++ if(!strcmp(name, adobe_StandardEncoding[i])) ++ return i; ++ } ++ return -1; ++ ++} ++ ++static void ++unicode_latin2( ++ char *arg ++) ++{ ++ int i; ++ static unsigned int latin2_unicode_map[] = { ++ 0x00a0, 0x0104, 0x02d8, 0x0141, 0x00a4, 0x013d, 0x015a, 0x00a7, /* A0 */ ++ 0x00a8, 0x0160, 0x015e, 0x0164, 0x0179, 0x00ad, 0x017d, 0x017b, /* A8 */ ++ 0x00b0, 0x0105, 0x02db, 0x0142, 0x00b4, 0x013e, 0x015b, 0x02c7, /* B0 */ ++ 0x00b8, 0x0161, 0x015f, 0x0165, 0x017a, 0x02dd, 0x017e, 0x017c, /* B8 */ ++ 0x0154, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0139, 0x0106, 0x00c7, /* C0 */ ++ 0x010c, 0x00c9, 0x0118, 0x00cb, 0x011a, 0x00cd, 0x00ce, 0x010e, /* C8 */ ++ 0x0110, 0x0143, 0x0147, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x00d7, /* D0 */ ++ 0x0158, 0x016e, 0x00da, 0x0170, 0x00dc, 0x00dd, 0x0162, 0x00df, /* D8 */ ++ 0x0155, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x013a, 0x0107, 0x00e7, /* E0 */ ++ 0x010d, 0x00e9, 0x0119, 0x00eb, 0x011b, 0x00ed, 0x00ee, 0x010f, /* E8 */ ++ 0x0111, 0x0144, 0x0148, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x00f7, /* F0 */ ++ 0x0159, 0x016f, 0x00fa, 0x0171, 0x00fc, 0x00fd, 0x0163, 0x02d9, /* F8 */ ++ }; ++ ++ for(i=0; i<=0x7E; i++) ++ unicode_map[i] = i; ++ ++ /* 7F-9F are unused */ ++ ++ for(i=0xA0; i<=0xFF; i++) ++ unicode_map[i] = latin2_unicode_map[i-0xA0]; ++} ++ ++static void ++unicode_latin4( ++ char *arg ++) ++{ ++ int i; ++ static unsigned int latin4_unicode_map[] = { ++ 0x0080, 0x0081, 0x201a, 0x0192, -1, 0x2026, 0x2020, 0x2021, /* 80 */ ++ 0x02c6, 0x2030, -1, 0x2039, 0x0152, 0x008d, 0x008e, 0x008f, /* 88 */ ++ 0x201e, 0x201c, 0x2019, -1, 0x201d, 0x2022, 0x2013, 0x2014, /* 90 */ ++ 0x02dc, 0x2122, -1, 0x203a, 0x0153, 0x009d, 0x009e, 0x0178, /* 98 */ ++ 0x00a0, 0x0104, 0x0138, 0x0156, 0x00a4, 0x0128, 0x013b, 0x00a7, /* A0 */ ++ 0x00a8, 0x0160, 0x0112, 0x0122, 0x0166, 0x00ad, 0x017d, 0x00af, /* A8 */ ++ 0x00b0, 0x0105, 0x02db, 0x0157, 0x00b4, 0x0129, 0x013c, 0x02c7, /* B0 */ ++ 0x00b8, 0x0161, 0x0113, 0x0123, 0x0167, 0x014a, 0x017e, 0x014b, /* B8 */ ++ 0x0100, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x012e, /* C0 */ ++ 0x010c, 0x00c9, 0x0118, 0x00cb, 0x0116, 0x00cd, 0x00ce, 0x012a, /* C8 */ ++ 0x0110, 0x0145, 0x014c, 0x0136, 0x00d4, 0x00d5, 0x00d6, 0x00d7, /* D0 */ ++ 0x00d8, 0x0172, 0x00da, 0x00db, 0x00dc, 0x0168, 0x016a, 0x00df, /* D8 */ ++ 0x0101, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x012f, /* E0 */ ++ 0x010d, 0x00e9, 0x0119, 0x00eb, 0x0117, 0x00ed, 0x00ee, 0x012b, /* E8 */ ++ 0x0111, 0x0146, 0x014d, 0x0137, 0x00f4, 0x00f5, 0x00f6, 0x00f7, /* F0 */ ++ 0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x0169, 0x016b, 0x02d9, /* F8 */ ++ }; ++ ++ for(i=0; i<=0x7F; i++) ++ unicode_map[i] = i; ++ ++ for(i=0x80; i<=0xFF; i++) ++ unicode_map[i] = latin4_unicode_map[i-0x80]; ++ ++#if 0 /* for documentation purposes only */ ++ case 0x201e: return 0x90; /* these two quotes are a hack only */ ++ case 0x201c: return 0x91; /* these two quotes are a hack only */ ++ case 0x00A0: return 0xA0; /* NO-BREAK SPACE */ ++ case 0x0104: return 0xA1; /* LATIN CAPITAL LETTER A WITH OGONEK */ ++ case 0x0138: return 0xA2; /* LATIN SMALL LETTER KRA */ ++ case 0x0156: return 0xA3; /* LATIN CAPITAL LETTER R WITH CEDILLA */ ++ case 0x00A4: return 0xA4; /* CURRENCY SIGN */ ++ case 0x0128: return 0xA5; /* LATIN CAPITAL LETTER I WITH TILDE */ ++ case 0x013B: return 0xA6; /* LATIN CAPITAL LETTER L WITH CEDILLA */ ++ case 0x00A7: return 0xA7; /* SECTION SIGN */ ++ case 0x00A8: return 0xA8; /* DIAERESIS */ ++ case 0x0160: return 0xA9; /* LATIN CAPITAL LETTER S WITH CARON */ ++ case 0x0112: return 0xAA; /* LATIN CAPITAL LETTER E WITH MACRON */ ++ case 0x0122: return 0xAB; /* LATIN CAPITAL LETTER G WITH CEDILLA */ ++ case 0x0166: return 0xAC; /* LATIN CAPITAL LETTER T WITH STROKE */ ++ case 0x00AD: return 0xAD; /* SOFT HYPHEN */ ++ case 0x017D: return 0xAE; /* LATIN CAPITAL LETTER Z WITH CARON */ ++ case 0x00AF: return 0xAF; /* MACRON */ ++ case 0x00B0: return 0xB0; /* DEGREE SIGN */ ++ case 0x0105: return 0xB1; /* LATIN SMALL LETTER A WITH OGONEK */ ++ case 0x02DB: return 0xB2; /* OGONEK */ ++ case 0x0157: return 0xB3; /* LATIN SMALL LETTER R WITH CEDILLA */ ++ case 0x00B4: return 0xB4; /* ACUTE ACCENT */ ++ case 0x0129: return 0xB5; /* LATIN SMALL LETTER I WITH TILDE */ ++ case 0x013C: return 0xB6; /* LATIN SMALL LETTER L WITH CEDILLA */ ++ case 0x02C7: return 0xB7; /* CARON */ ++ case 0x00B8: return 0xB8; /* CEDILLA */ ++ case 0x0161: return 0xB9; /* LATIN SMALL LETTER S WITH CARON */ ++ case 0x0113: return 0xBA; /* LATIN SMALL LETTER E WITH MACRON */ ++ case 0x0123: return 0xBB; /* LATIN SMALL LETTER G WITH CEDILLA */ ++ case 0x0167: return 0xBC; /* LATIN SMALL LETTER T WITH STROKE */ ++ case 0x014A: return 0xBD; /* LATIN CAPITAL LETTER ENG */ ++ case 0x017E: return 0xBE; /* LATIN SMALL LETTER Z WITH CARON */ ++ case 0x014B: return 0xBF; /* LATIN SMALL LETTER ENG */ ++ case 0x0100: return 0xC0; /* LATIN CAPITAL LETTER A WITH MACRON */ ++ case 0x00C1: return 0xC1; /* LATIN CAPITAL LETTER A WITH ACUTE */ ++ case 0x00C2: return 0xC2; /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX */ ++ case 0x00C3: return 0xC3; /* LATIN CAPITAL LETTER A WITH TILDE */ ++ case 0x00C4: return 0xC4; /* LATIN CAPITAL LETTER A WITH DIAERESIS */ ++ case 0x00C5: return 0xC5; /* LATIN CAPITAL LETTER A WITH RING ABOVE */ ++ case 0x00C6: return 0xC6; /* LATIN CAPITAL LIGATURE AE */ ++ case 0x012E: return 0xC7; /* LATIN CAPITAL LETTER I WITH OGONEK */ ++ case 0x010C: return 0xC8; /* LATIN CAPITAL LETTER C WITH CARON */ ++ case 0x00C9: return 0xC9; /* LATIN CAPITAL LETTER E WITH ACUTE */ ++ case 0x0118: return 0xCA; /* LATIN CAPITAL LETTER E WITH OGONEK */ ++ case 0x00CB: return 0xCB; /* LATIN CAPITAL LETTER E WITH DIAERESIS */ ++ case 0x0116: return 0xCC; /* LATIN CAPITAL LETTER E WITH DOT ABOVE */ ++ case 0x00CD: return 0xCD; /* LATIN CAPITAL LETTER I WITH ACUTE */ ++ case 0x00CE: return 0xCE; /* LATIN CAPITAL LETTER I WITH CIRCUMFLEX */ ++ case 0x012A: return 0xCF; /* LATIN CAPITAL LETTER I WITH MACRON */ ++ case 0x0110: return 0xD0; /* LATIN CAPITAL LETTER D WITH STROKE */ ++ case 0x0145: return 0xD1; /* LATIN CAPITAL LETTER N WITH CEDILLA */ ++ case 0x014C: return 0xD2; /* LATIN CAPITAL LETTER O WITH MACRON */ ++ case 0x0136: return 0xD3; /* LATIN CAPITAL LETTER K WITH CEDILLA */ ++ case 0x00D4: return 0xD4; /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX */ ++ case 0x00D5: return 0xD5; /* LATIN CAPITAL LETTER O WITH TILDE */ ++ case 0x00D6: return 0xD6; /* LATIN CAPITAL LETTER O WITH DIAERESIS */ ++ case 0x00D7: return 0xD7; /* MULTIPLICATION SIGN */ ++ case 0x00D8: return 0xD8; /* LATIN CAPITAL LETTER O WITH STROKE */ ++ case 0x0172: return 0xD9; /* LATIN CAPITAL LETTER U WITH OGONEK */ ++ case 0x00DA: return 0xDA; /* LATIN CAPITAL LETTER U WITH ACUTE */ ++ case 0x00DB: return 0xDB; /* LATIN CAPITAL LETTER U WITH CIRCUMFLEX */ ++ case 0x00DC: return 0xDC; /* LATIN CAPITAL LETTER U WITH DIAERESIS */ ++ case 0x0168: return 0xDD; /* LATIN CAPITAL LETTER U WITH TILDE */ ++ case 0x016A: return 0xDE; /* LATIN CAPITAL LETTER U WITH MACRON */ ++ case 0x00DF: return 0xDF; /* LATIN SMALL LETTER SHARP S */ ++ case 0x0101: return 0xE0; /* LATIN SMALL LETTER A WITH MACRON */ ++ case 0x00E1: return 0xE1; /* LATIN SMALL LETTER A WITH ACUTE */ ++ case 0x00E2: return 0xE2; /* LATIN SMALL LETTER A WITH CIRCUMFLEX */ ++ case 0x00E3: return 0xE3; /* LATIN SMALL LETTER A WITH TILDE */ ++ case 0x00E4: return 0xE4; /* LATIN SMALL LETTER A WITH DIAERESIS */ ++ case 0x00E5: return 0xE5; /* LATIN SMALL LETTER A WITH RING ABOVE */ ++ case 0x00E6: return 0xE6; /* LATIN SMALL LIGATURE AE */ ++ case 0x012F: return 0xE7; /* LATIN SMALL LETTER I WITH OGONEK */ ++ case 0x010D: return 0xE8; /* LATIN SMALL LETTER C WITH CARON */ ++ case 0x00E9: return 0xE9; /* LATIN SMALL LETTER E WITH ACUTE */ ++ case 0x0119: return 0xEA; /* LATIN SMALL LETTER E WITH OGONEK */ ++ case 0x00EB: return 0xEB; /* LATIN SMALL LETTER E WITH DIAERESIS */ ++ case 0x0117: return 0xEC; /* LATIN SMALL LETTER E WITH DOT ABOVE */ ++ case 0x00ED: return 0xED; /* LATIN SMALL LETTER I WITH ACUTE */ ++ case 0x00EE: return 0xEE; /* LATIN SMALL LETTER I WITH CIRCUMFLEX */ ++ case 0x012B: return 0xEF; /* LATIN SMALL LETTER I WITH MACRON */ ++ case 0x0111: return 0xF0; /* LATIN SMALL LETTER D WITH STROKE */ ++ case 0x0146: return 0xF1; /* LATIN SMALL LETTER N WITH CEDILLA */ ++ case 0x014D: return 0xF2; /* LATIN SMALL LETTER O WITH MACRON */ ++ case 0x0137: return 0xF3; /* LATIN SMALL LETTER K WITH CEDILLA */ ++ case 0x00F4: return 0xF4; /* LATIN SMALL LETTER O WITH CIRCUMFLEX */ ++ case 0x00F5: return 0xF5; /* LATIN SMALL LETTER O WITH TILDE */ ++ case 0x00F6: return 0xF6; /* LATIN SMALL LETTER O WITH DIAERESIS */ ++ case 0x00F7: return 0xF7; /* DIVISION SIGN */ ++ case 0x00F8: return 0xF8; /* LATIN SMALL LETTER O WITH STROKE */ ++ case 0x0173: return 0xF9; /* LATIN SMALL LETTER U WITH OGONEK */ ++ case 0x00FA: return 0xFA; /* LATIN SMALL LETTER U WITH ACUTE */ ++ case 0x00FB: return 0xFB; /* LATIN SMALL LETTER U WITH CIRCUMFLEX */ ++ case 0x00FC: return 0xFC; /* LATIN SMALL LETTER U WITH DIAERESIS */ ++ case 0x0169: return 0xFD; /* LATIN SMALL LETTER U WITH TILDE */ ++ case 0x016B: return 0xFE; /* LATIN SMALL LETTER U WITH MACRON */ ++ case 0x02D9: return 0xFF; /* DOT ABOVE */ ++#endif ++} ++ ++static void ++unicode_latin5( ++ char *arg ++) ++{ ++ int i; ++ static unsigned int latin5_unicode_map1[] = { ++ 0x0080, 0x0081, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, /* 80 */ ++ 0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0x008d, 0x008e, 0x008f, /* 88 */ ++ 0x0090, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, /* 90 */ ++ 0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0x009d, 0x009e, 0x0178, /* 98 */ ++ }; ++ static unsigned int latin5_unicode_map2[] = { ++ 0x011e, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, /* D0 */ ++ 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0130, 0x015e, 0x00df, /* D8 */ ++ 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, /* E0 direct */ ++ 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, /* E8 direct */ ++ 0x011f, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, /* F0 */ ++ 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0131, 0x015f, 0x00ff, /* F8 */ ++ }; ++ ++ for(i=0; i<=0x7F; i++) ++ unicode_map[i] = i; ++ ++ for(i=0x80; i<=0x9F; i++) ++ unicode_map[i] = latin5_unicode_map1[i-0x80]; ++ ++ for(i=0xA0; i<=0xCF; i++) ++ unicode_map[i] = i; ++ ++ for(i=0xD0; i<=0xFF; i++) ++ unicode_map[i] = latin5_unicode_map2[i-0xD0]; ++} ++ ++/* a way to select one 256-character plane from Unicode ++ * or other multi-byte encoding ++ */ ++ ++static void ++unicode_plane( ++ char *arg ++) ++{ ++ static unsigned plane; ++ int nchars; ++ int c1, c2, i; ++ ++ if(uni_lang_selected == 0) ++ return; /* don't participate in auto-guessing */ ++ ++ plane = 0; force_pid = force_eid = -1; ++ ++ c1 = sscanf(arg, "pid=%d,eid=%d%n", &force_pid, &force_eid, &nchars); ++ if(c1 == 2) { ++ arg += nchars; ++ if(*arg == ',') ++ arg++; ++ } ++ if(arg[0] == '0' && (arg[1]=='x' || arg[1]=='X') ) { ++ arg += 2; ++ c2 = sscanf(arg, "%x", &plane); ++ } else { ++ c2 = sscanf(arg, "%d", &plane); ++ } ++ ++ if( (c1!=2 && c1!=0) || (c1==0 && c2==0) ) { ++ fprintf(stderr, "**** option -l plane expects one of the following formats:\n"); ++ fprintf(stderr, " -l plane+0xNN - select hexadecimal number of plane of Unicode\n"); ++ fprintf(stderr, " -l plane+NN - select decimal number of plane of Unicode\n"); ++ fprintf(stderr, " -l plane+pid=N,eid=N - select plane 0 of specified encoding\n"); ++ fprintf(stderr, " -l plane+pid=N,eid=N,0xNN - select hex plane of TTF encoding with this PID/EID\n"); ++ fprintf(stderr, " -l plane+pid=N,eid=N,NN - select decimal plane of TTF encoding with this PID/EID\n"); ++ exit(1); ++ } ++ ++ if(c2!=0) { ++ if(strlen(arg) > sizeof(uni_suffix_buf)-2) { ++ fprintf(stderr, "**** plane number is too large\n"); ++ } ++ ++ sprintf(uni_suffix_buf, "-%s", arg); ++ uni_font_name_suffix = uni_suffix_buf; ++ } else { ++ uni_font_name_suffix = ""; ++ } ++ ++ plane <<= 8; ++ for(i=0; i<=0xFF; i++) ++ unicode_map[i] = plane | i; ++} ++ ++/* look up the 8-bit code by unicode */ ++ ++int ++unicode_rev_lookup( ++ int unival ++) ++{ ++ int res; ++ ++ if( ! IS_UNI_BUCKET(unival) ) ++ return -1; ++ ++ for (res = 0; res < enctabsz; res++) ++ if (unicode_map[res] == unival) ++ return res; ++ return -1; ++} ++ ++/* mark the buckets for quick lookup */ ++ ++static void ++unicode_prepare_buckets( ++ void ++) ++{ ++ int i; ++ ++ memset(uni_user_buckets, 0, sizeof uni_user_buckets); ++ for(i=0; i 126) { ++ sprintf(res+i, "\\x%02X", c); ++ i+=4; ++ } else { ++ res[i++] = c; ++ } ++ } ++ if(*s != 0) { ++ res[i++] = '.'; ++ res[i++] = '.'; ++ res[i++] = '.'; ++ } ++ res[i++] = 0; ++ return res; ++} ++ ++/* ++ * Scale the values according to the scale_factor ++ */ ++ ++double ++fscale( ++ double val ++) ++{ ++ return scale_factor * val; ++} ++ ++int ++iscale( ++ int val ++) ++{ ++ return (int) (val > 0 ? scale_factor * val + 0.5 ++ : scale_factor * val - 0.5); ++} ++ ++/* ++ * Try to force fixed width of characters ++ */ ++ ++static void ++alignwidths(void) ++{ ++ int i; ++ int n = 0, avg, max = 0, min = 3000, sum = 0, x; ++ ++ for (i = 0; i < numglyphs; i++) { ++ if (glyph_list[i].flags & GF_USED) { ++ x = glyph_list[i].width; ++ ++ if (x != 0) { ++ if (x < min) ++ min = x; ++ if (x > max) ++ max = x; ++ ++ sum += x; ++ n++; ++ } ++ } ++ } ++ ++ if (n == 0) ++ return; ++ ++ avg = sum / n; ++ ++ WARNING_3 fprintf(stderr, "widths: max=%d avg=%d min=%d\n", max, avg, min); ++ ++ /* if less than 5% variation from average */ ++ /* force fixed width */ ++ if (20 * (avg - min) < avg && 20 * (max - avg) < avg) { ++ for (i = 0; i < numglyphs; i++) { ++ if (glyph_list[i].flags & GF_USED) ++ glyph_list[i].width = avg; ++ } ++ fontm.is_fixed_pitch = 1; ++ } ++} ++ ++static void ++convert_glyf( ++ int glyphno ++) ++{ ++ GLYPH *g; ++ int ncurves; ++ ++ g = &glyph_list[glyphno]; ++ ++ ++ g->scaledwidth = iscale(g->width); ++ ++ g->entries = 0; ++ g->lastentry = 0; ++ g->path = 0; ++ if (g->ttf_pathlen != 0) { ++ cursw->glpath(glyphno, glyph_list); ++ g->lastentry = 0; ++ ++ if(ISDBG(BUILDG)) ++ dumppaths(g, NULL, NULL); ++ ++ assertpath(g->entries, __FILE__, __LINE__, g->name); ++ ++ fclosepaths(g); ++ assertpath(g->entries, __FILE__, __LINE__, g->name); ++ ++ /* float processing */ ++ if(smooth) { ++ ffixquadrants(g); ++ assertpath(g->entries, __FILE__, __LINE__, g->name); ++ ++ fsplitzigzags(g); ++ assertpath(g->entries, __FILE__, __LINE__, g->name); ++ ++ fforceconcise(g); ++ assertpath(g->entries, __FILE__, __LINE__, g->name); ++ ++ fstraighten(g); ++ assertpath(g->entries, __FILE__, __LINE__, g->name); ++ } ++ ++ pathtoint(g); ++ /* all processing past this point expects integer path */ ++ assertpath(g->entries, __FILE__, __LINE__, g->name); ++ ++#if 0 ++ fixcontours(g); ++ testfixcvdir(g); ++#endif ++ ++ /* int processing */ ++ if (smooth) { ++ smoothjoints(g); ++ assertpath(g->entries, __FILE__, __LINE__, g->name); ++ } ++ ++ ncurves = 0; ++ { ++ GENTRY *ge; ++ for(ge = g->entries; ge; ge = ge->next) ++ ncurves++; ++ } ++ if (ncurves > 200) { ++ WARNING_3 fprintf(stderr, ++ "** Glyph %s is too long, may display incorrectly\n", ++ g->name); ++ } ++ } else { ++ /* for buildstems */ ++ g->flags &= ~GF_FLOAT; ++ } ++} ++ ++static void ++handle_gnames(void) ++{ ++ int i, n, found, c, type; ++ ++ /* get the names from the font file */ ++ ps_fmt_3 = cursw->glnames(glyph_list); ++ ++/* These checks are not required by Xprt's PS DDX... */ ++#ifndef XP_PSTEXT ++ /* check for names with wrong characters */ ++ for (n = 0; n < numglyphs; n++) { ++ int c; ++ for (i = 0; (c = glyph_list[n].name[i]) != 0; i++) { ++ if (!(isalnum(c) || c == '.' || c == '_' || c == '-') ++ || i==0 && isdigit(c)) { /* must not start with a digit */ ++ WARNING_3 fprintf(stderr, "Glyph %d %s (%s), ", ++ n, isdigit(c) ? "name starts with a digit" : ++ "has bad characters in name", ++ nametoprint(glyph_list[n].name)); ++ glyph_list[n].name = malloc(16); ++ sprintf(glyph_list[n].name, "_b_%d", n); ++ WARNING_3 fprintf(stderr, "changing to %s\n", glyph_list[n].name); ++ break; ++ } ++ } ++ } ++ ++ if( !ps_fmt_3 ) { ++ /* check for duplicate names */ ++ for (n = 0; n < numglyphs; n++) { ++ found = 0; ++ for (i = 0; i < n && !found; i++) { ++ if (strcmp(glyph_list[i].name, glyph_list[n].name) == 0) { ++ if (( glyph_list[n].name = malloc(16) )==0) { ++ fprintf (stderr, "****malloc failed %s line %d\n", __FILE__, __LINE__); ++ exit(255); ++ } ++ sprintf(glyph_list[n].name, "_d_%d", n); ++ ++ /* if the font has no names in it (what the native parser ++ * recognises as ps_fmt_3), FreeType returns all the ++ * names as .notdef, so don't complain in this case ++ */ ++ if(strcmp(glyph_list[i].name, ".notdef")) { ++ WARNING_3 fprintf(stderr, ++ "Glyph %d has the same name as %d: (%s), changing to %s\n", ++ n, i, ++ glyph_list[i].name, ++ glyph_list[n].name); ++ } ++ found = 1; ++ } ++ } ++ } ++ ++ } ++#endif /* !XP_PSTEXT */ ++ ++ /* start the encoding stuff */ ++ for (i = 0; i < ENCTABSZ; i++) { ++ encoding[i] = -1; ++ } ++ ++ /* do the 1st round of encoding by name */ ++ if(!ps_fmt_3 && uni_lang_selected && uni_lang_selected->convbyname) { ++ for (n = 0; n < numglyphs; n++) { ++ c = uni_lang_selected->convbyname(glyph_list[n].name, ++ uni_lang_arg, UNICONV_BYNAME_BEFORE); ++ if(c>=0 && cinit[i]; i++) { ++ for (n = 0; n < ENCTABSZ; n++) ++ unicode_map[n] = -1; ++ uni_lang_selected->init[i](uni_lang_arg); ++ unicode_prepare_buckets(); ++ type = cursw->glenc(glyph_list, encoding, unicode_map); ++ if( type == 0 ) ++ /* if we have an 8-bit encoding we don't need more tries */ ++ break; ++ } ++ } else { ++ /* language is unknown, try the first table of each */ ++ for(i=0; i < sizeof uni_lang/(sizeof uni_lang[0]); i++) { ++ if(uni_lang[i].init[0] == NULL) ++ continue; ++ for (n = 0; n < ENCTABSZ; n++) ++ unicode_map[n] = -1; ++ uni_lang[i].init[0](uni_lang_arg); ++ unicode_prepare_buckets(); ++ type = cursw->glenc(glyph_list, encoding, unicode_map); ++ if( type == 0 ) ++ /* if we have an 8-bit encoding we don't need more tries */ ++ break; ++ } ++ } ++ ++ if (ps_fmt_3) { ++ /* get rid of the old names, they are all "UNKNOWN" anyawy */ ++ for (i = 0; i < numglyphs; i++) { ++ glyph_list[i].name = 0; ++ } ++ if(type == 0) { ++ /* 8-bit - give 8859/1 names to the first 256 glyphs */ ++ for (i = 0; i < 256; i++) { /* here 256, not ENCTABSZ */ ++ if (encoding[i] > 0) { ++ glyph_list[encoding[i]].name = Fmt3Encoding[i]; ++ } ++ } ++ } else if(type == 1) { ++ /* Unicode - give 8859/1 names to the first 256 glyphs of Unicode */ ++ for (n = 0; n < 256; n++) { /* here 256, not ENCTABSZ */ ++ i = unicode_rev_lookup(n); ++ if (i>=0 && encoding[i] > 0) { ++ glyph_list[encoding[i]].name = Fmt3Encoding[i]; ++ } ++ } ++ } /* for other types of encodings just give generated names */ ++ /* assign unique names to the rest of the glyphs */ ++ for (i = 0; i < numglyphs; i++) { ++ if (glyph_list[i].name == 0) { ++ if (( glyph_list[i].name = malloc(16) )==0) { ++ fprintf (stderr, "****malloc failed %s line %d\n", __FILE__, __LINE__); ++ exit(255); ++ } ++ sprintf(glyph_list[i].name, "_d_%d", i); ++ } ++ } ++ } ++ ++ /* do the 2nd round of encoding by name */ ++ if(uni_lang_selected && uni_lang_selected->convbyname) { ++ for (n = 0; n < numglyphs; n++) { ++ c = uni_lang_selected->convbyname(glyph_list[n].name, ++ uni_lang_arg, UNICONV_BYNAME_AFTER); ++ if(c>=0 && c 0) ++ glyph_list[0].name = ".notdef"; ++ if(numglyphs > 1) ++ glyph_list[1].name = ".null"; ++#endif /* !XP_PSTEXT */ ++ ++ for (i = 0; i < ENCTABSZ; i++) { ++ if ((encoding[i] != 0) && glyph_rename[i]) { ++ glyph_list[encoding[i]].name = glyph_rename[i]; ++ } ++ } ++} ++ ++static void ++usage(void) ++{ ++ ++#ifdef XP_PSTEXT ++ fputs("ft2pt1: Internal startup error\n", stderr); ++#else ++ ++#ifdef _GNU_SOURCE ++# define fplop(txt) fputs(txt, stderr); ++#else ++# define fplop(txt) ++#endif ++ ++ fputs("Use:\n", stderr); ++ fputs("ttf2pt1 [-] [-l language | -L file] []\n", stderr); ++ fputs(" or\n", stderr); ++ fputs("ttf2pt1 [-] [-l language | -L file] -\n", stderr); ++ fputs(" or\n", stderr); ++ fputs("ttf2pt1 [-] [-l language | -L file] - | t1asm > \n", stderr); ++ ++ fplop("\n"); ++ fplop("This build supports both short and long option names,\n"); ++ fplop("the long options are listed before corresponding short ones\n"); ++ ++ fplop(" --all-glyphs\n"); ++ fputs(" -a - include all glyphs, even those not in the encoding table\n", stderr); ++ fplop(" --pfb\n"); ++ fputs(" -b - produce a compressed .pfb file\n", stderr); ++ fplop(" --debug dbg_suboptions\n"); ++ fputs(" -d dbg_suboptions - debugging options, run ttf2pt1 -d? for help\n", stderr); ++ fplop(" --encode\n"); ++ fputs(" -e - produce a fully encoded .pfa file\n", stderr); ++ fplop(" --force-unicode\n"); ++ fputs(" -F - force use of Unicode encoding even if other MS encoding detected\n", stderr); ++ fplop(" --generate suboptions\n"); ++ fputs(" -G suboptions - control the file generation, run ttf2pt1 -G? for help\n", stderr); ++ fplop(" --language language\n"); ++ fputs(" -l language - convert Unicode to specified language, run ttf2pt1 -l? for list\n", stderr); ++ fplop(" --language-map file\n"); ++ fputs(" -L file - convert Unicode according to encoding description file\n", stderr); ++ fplop(" --limit =\n"); ++ fputs(" -m = - set maximal limit of given type to value, types:\n", stderr); ++ fputs(" h - maximal hint stack depth in the PostScript interpreter\n", stderr); ++ fplop(" --processing suboptions\n"); ++ fputs(" -O suboptions - control outline processing, run ttf2pt1 -O? for help\n", stderr); ++ fplop(" --parser name\n"); ++ fputs(" -p name - use specific front-end parser, run ttf2pt1 -p? for list\n", stderr); ++ fplop(" --uid id\n"); ++ fputs(" -u id - use this UniqueID, -u A means autogeneration\n", stderr); ++ fplop(" --vertical-autoscale size\n"); ++ fputs(" -v size - scale the font to make uppercase letters >size/1000 high\n", stderr); ++ fplop(" --version\n"); ++ fputs(" -V - print ttf2pt1 version number\n", stderr); ++ fplop(" --warning number\n"); ++ fputs(" -W number - set the level of permitted warnings (0 - disable)\n", stderr); ++ fputs("Obsolete options (will be removed in future releases):\n", stderr); ++ fplop(" --afm\n"); ++ fputs(" -A - write the .afm file to STDOUT instead of the font, now -GA\n", stderr); ++ fputs(" -f - don't try to guess the value of the ForceBold hint, now -Ob\n", stderr); ++ fputs(" -h - disable autogeneration of hints, now -Oh\n", stderr); ++ fputs(" -H - disable hint substitution, now -Ou\n", stderr); ++ fputs(" -o - disable outline optimization, now -Oo\n", stderr); ++ fputs(" -s - disable outline smoothing, now -Os\n", stderr); ++ fputs(" -t - disable auto-scaling to 1000x1000 standard matrix, now -Ot\n", stderr); ++ fputs(" -w - correct the glyph widths (use only for buggy fonts), now -OW\n", stderr); ++ fputs("With no , write to with suffix replaced.\n", stderr); ++ fputs("The last '-' means 'use STDOUT'.\n", stderr); ++ ++#undef fplop ++ ++#endif /* XP_PSTEXT */ ++} ++ ++static void ++printversion(void) ++{ ++ fprintf(stderr, "ttf2pt1 %s\n", TTF2PT1_VERSION); ++} ++ ++/* initialize a table of suboptions */ ++static void ++init_subo_tbl( ++ struct subo_case *tbl ++) ++{ ++ int i; ++ ++ for(i=0; tbl[i].disbl != 0; i++) { ++ tbl[i].disbl = tolower(tbl[i].disbl); ++ tbl[i].enbl = toupper(tbl[i].disbl); ++ *(tbl[i].valp) = tbl[i].dflt; ++ } ++} ++ ++/* print the default value of the suboptions */ ++static void ++print_subo_dflt( ++ FILE *f, ++ struct subo_case *tbl ++) ++{ ++ int i; ++ ++ for(i=0; tbl[i].disbl != 0; i++) { ++ if(tbl[i].dflt) ++ putc(tbl[i].enbl, f); ++ else ++ putc(tbl[i].disbl, f); ++ } ++} ++ ++/* print the usage message for the suboptions */ ++static void ++print_subo_usage( ++ FILE *f, ++ struct subo_case *tbl ++) ++{ ++#ifdef XP_PSTEXT ++ fputs("ft2pt1: Internal startup error\n", stderr); ++#else ++ int i; ++ ++ fprintf(f,"The lowercase suboptions disable features, corresponding\n"); ++ fprintf(f,"uppercase suboptions enable them. The supported suboptions,\n"); ++ fprintf(f,"their default states and the features they control are:\n"); ++ for(i=0; tbl[i].disbl != 0; i++) { ++ fprintf(f," %c/%c - [%s] %s\n", tbl[i].disbl, tbl[i].enbl, ++ tbl[i].dflt ? "enabled" : "disabled", tbl[i].descr); ++ } ++#endif /* XP_PSTEXT */ ++} ++ ++/* find and set the entry according to suboption, ++ * return the found entry (or if not found return NULL) ++ */ ++struct subo_case * ++set_subo( ++ struct subo_case *tbl, ++ int subopt ++) ++{ ++ int i; ++ ++ for(i=0; tbl[i].disbl != 0; i++) { ++ if(subopt == tbl[i].disbl) { ++ *(tbl[i].valp) = 0; ++ return &tbl[i]; ++ } else if(subopt == tbl[i].enbl) { ++ *(tbl[i].valp) = 1; ++ return &tbl[i]; ++ } ++ } ++ return NULL; ++} ++ ++ ++#ifdef XP_PSTEXT ++FT_Face xp_pstext_ft_face = NULL; /* used by ft.c */ ++FontPtr xp_xtf = NULL; ++const char *xp_psfontname = NULL; ++unsigned long xp_font_block_offset = 0UL; ++ ++int ++ft2pt1_main( ++ int argc, ++ char **argv, ++ FTFontPtr tf, ++ const char *download_psfontname, ++ unsigned long download_font_block_offset ++) ++#else ++int ++main( ++ int argc, ++ char **argv ++) ++#endif /* XP_PSTEXT */ ++{ ++ long i, j; ++ time_t now; ++ char filename[4096]; ++ int c,nchars,nmetrics; ++ int ws; ++ int forcebold= -1; /* -1 means "don't know" */ ++ char *lang; ++ int oc; ++ int subid; ++ char *cmdline; ++#ifdef _GNU_SOURCE ++# define ttf2pt1_getopt(a, b, c, d, e) getopt_long(a, b, c, d, e) ++ static struct option longopts[] = { ++ { "afm", 0, NULL, 'A' }, ++ { "all-glyphs", 0, NULL, 'a' }, ++ { "pfb", 0, NULL, 'b' }, ++ { "debug", 1, NULL, 'd' }, ++ { "encode", 0, NULL, 'e' }, ++ { "force-unicode", 0, NULL, 'F' }, ++ { "generate", 1, NULL, 'G' }, ++ { "language", 1, NULL, 'l' }, ++ { "language-map", 1, NULL, 'L' }, ++ { "limit", 1, NULL, 'm' }, ++ { "processing", 1, NULL, 'O' }, ++ { "parser", 1, NULL, 'p' }, ++ { "uid", 1, NULL, 'u' }, ++ { "vertical-autoscale", 1, NULL, 'v' }, ++ { "version", 0, NULL, 'V' }, ++ { "warning", 1, NULL, 'W' }, ++ { NULL, 0, NULL, 0 } ++ }; ++#else ++# define ttf2pt1_getopt(a, b, c, d, e) getopt(a, b, c) ++#endif ++ /* table of Outline Processing (may think also as Optimization) options */ ++ static struct subo_case opotbl[] = { ++ { 'b', 0/*auto-set*/, &trybold, 1, "guessing of the ForceBold hint" }, ++ { 'h', 0/*auto-set*/, &hints, 1, "autogeneration of hints" }, ++ { 'u', 0/*auto-set*/, &subhints, 1, "hint substitution technique" }, ++ { 'o', 0/*auto-set*/, &optimize, 1, "space optimization of font files" }, ++ { 's', 0/*auto-set*/, &smooth, 1, "smoothing and repair of outlines" }, ++ { 't', 0/*auto-set*/, &transform, 1, "auto-scaling to the standard matrix 1000x1000" }, ++ { 'w', 0/*auto-set*/, &correctwidth, 0, "correct the glyph widths (use only for buggy fonts)" }, ++ { 'v', 0/*auto-set*/, &vectorize, 0, "vectorize (trace) the bitmaps" }, ++#ifdef USE_AUTOTRACE ++ { 'z', 0/*auto-set*/, &use_autotrace, 0, "use the autotrace library on bitmaps (works badly)" }, ++#endif /*USE_AUTOTRACE*/ ++ { 0, 0, 0, 0, 0} /* terminator */ ++ }; ++ /* table of the File Generation options */ ++ static struct subo_case fgotbl[] = { ++ { 'f', 0/*auto-set*/, &gen_pfa, 1, "generate the font file (.t1a, .pfa or .pfb)" }, ++ { 'a', 0/*auto-set*/, &gen_afm, 1, "generate the Adobe metrics file (.afm)" }, ++ { 'e', 0/*auto-set*/, &gen_dvienc, 0, "generate the dvips encoding file (.enc)" }, ++ { 0, 0, 0, 0, 0} /* terminator */ ++ }; ++ int *genlast = NULL; ++ ++#ifdef XP_PSTEXT ++ xp_pstext_ft_face = tf->instance->face->face; ++ xp_xtf = tf; ++ xp_psfontname = download_psfontname; ++ xp_font_block_offset = download_font_block_offset; ++#endif /* XP_PSTEXT */ ++ ++ init_subo_tbl(opotbl); /* initialize sub-options of -O */ ++ init_subo_tbl(fgotbl); /* initialize sub-options of -G */ ++ ++ /* save the command line for the record ++ * (we don't bother about escaping the shell special characters) ++ */ ++ ++ j = 0; ++ for(i=1; ivalp) ) ++ genlast = s->valp; ++ } ++ break; ++ } ++ case 'h': ++ fputs("Warning: option -h is obsolete, use -Oh instead\n", stderr); ++ hints = 0; ++ break; ++ case 'H': ++ fputs("Warning: meaning of option -H has been changed to its opposite\n", stderr); ++ fputs("Warning: option -H is obsolete, use -Ou instead\n", stderr); ++ subhints = 0; ++ break; ++ case 'f': ++ fputs("Warning: option -f is obsolete, use -Ob instead\n", stderr); ++ trybold = 0; ++ break; ++ case 'w': ++ fputs("Warning: option -w is obsolete, use -OW instead\n", stderr); ++ correctwidth = 1; ++ break; ++ case 'u': ++ if(wantuid) { ++ fprintf(stderr, "**** UniqueID may be specified only once ****\n"); ++ exit(1); ++ } ++ wantuid = 1; ++ if(optarg[0]=='A' && optarg[1]==0) ++ strUID=0; /* will be generated automatically */ ++ else { ++ strUID=optarg; ++ for(i=0; optarg[i]!=0; i++) ++ if( !isdigit(optarg[i]) ) { ++ fprintf(stderr, "**** UniqueID must be numeric or A for automatic ****\n"); ++ exit(1); ++ } ++ } ++ break; ++ case 'v': ++ correctvsize = atoi(optarg); ++ if(correctvsize <= 0 && correctvsize > 1000) { ++ fprintf(stderr, "**** wrong vsize '%d', ignored ****\n", correctvsize); ++ correctvsize=0; ++ } ++ break; ++ case 'p': ++ if(cursw!=0) { ++ fprintf(stderr, "**** only one front-end parser be used ****\n"); ++ exit(1); ++ } ++ ++ { /* separate parser from parser-specific argument */ ++ char *p = strchr(optarg, LANG_ARG_SEP); ++ if(p != 0) { ++ *p = 0; ++ front_arg = p+1; ++ } else ++ front_arg = ""; ++ } ++ for(i=0; frontswtab[i] != NULL; i++) ++ if( !strcmp(frontswtab[i]->name, optarg) ) { ++ cursw = frontswtab[i]; ++ break; ++ } ++ ++ if(cursw==0) { ++ if (strcmp(optarg, "?")) ++ fprintf(stderr, "**** unknown front-end parser '%s' ****\n", optarg); ++ fputs("the following front-ends are supported now:\n", stderr); ++ for(i=0; frontswtab[i] != NULL; i++) { ++ fprintf(stderr," %s (%s)\n file suffixes: ", ++ frontswtab[i]->name, ++ frontswtab[i]->descr ? frontswtab[i]->descr : "no description" ++ ); ++ for(j=0; jsuffix[j]) ++ fprintf(stderr, "%s ", frontswtab[i]->suffix[j]); ++ fprintf(stderr, "\n"); ++ } ++ exit(1); ++ } ++ break; ++ case 'l': ++ if(uni_lang_selected!=0) { ++ fprintf(stderr, "**** only one language option may be used ****\n"); ++ exit(1); ++ } ++ ++ { /* separate language from language-specific argument */ ++ char *p = strchr(optarg, LANG_ARG_SEP); ++ if(p != 0) { ++ *p = 0; ++ uni_lang_arg = p+1; ++ } else ++ uni_lang_arg = ""; ++ } ++ for(i=0; i < sizeof uni_lang/(sizeof uni_lang[0]); i++) ++ if( !strcmp(uni_lang[i].name, optarg) ) { ++ uni_lang_selected = &uni_lang[i]; ++ uni_sample = uni_lang[i].sample_upper; ++ break; ++ } ++ ++ if(uni_lang_selected==0) { ++ if (strcmp(optarg, "?")) ++ fprintf(stderr, "**** unknown language '%s' ****\n", optarg); ++ fputs(" the following languages are supported now:\n", stderr); ++ for(i=0; i < sizeof uni_lang/(sizeof uni_lang[0]); i++) ++ fprintf(stderr," %s (%s)\n", ++ uni_lang[i].name, ++ uni_lang[i].descr ? uni_lang[i].descr : "no description" ++ ); ++ exit(1); ++ } ++ break; ++ case 'L': ++ if(uni_lang_selected!=0) { ++ fprintf(stderr, "**** only one language option may be used ****\n"); ++ exit(1); ++ } ++ uni_lang_selected = &uni_lang_user; ++ uni_lang_arg = optarg; ++ break; ++ case 'V': ++ printversion(); ++ exit(0); ++ break; ++ default: ++ usage(); ++ exit(1); ++ break; ++ } ++ } ++ argc-=optind-1; /* the rest of code counts from argv[0] */ ++ argv+=optind-1; ++ ++ if (absolute && encode) { ++ fprintf(stderr, "**** options -a and -e are incompatible ****\n"); ++ exit(1); ++ } ++ if ((argc != 2) && (argc != 3)) { ++ usage(); ++ exit(1); ++ } ++ ++ /* try to guess the language by the locale used */ ++ if(uni_lang_selected==0 && (lang=getenv("LANG"))!=0 ) { ++ for(i=0; i < sizeof uni_lang/sizeof(struct uni_language); i++) { ++ if( !strncmp(uni_lang[i].name, lang, strlen(uni_lang[i].name)) ) { ++ uni_lang_selected = &uni_lang[i]; ++ goto got_a_language; ++ } ++ } ++ /* no full name ? try aliases */ ++ for(i=0; i < sizeof uni_lang/sizeof(struct uni_language); i++) { ++ for(c=0; csuffix[j] ++ && !strcmp(p, frontswtab[i]->suffix[j]) ) { ++ cursw = frontswtab[i]; ++ WARNING_1 fprintf(stderr, "Auto-detected front-end parser '%s'\n", ++ cursw->name); ++ WARNING_1 fprintf(stderr, " (use ttf2pt1 -p? to get the full list of available front-ends)\n"); ++ break; ++ } ++ } ++ free(s); ++ } ++ ++ if(cursw==0) { ++ cursw = frontswtab[0]; ++ WARNING_1 fprintf(stderr, "Can't detect front-end parser, using '%s' by default\n", ++ cursw->name); ++ WARNING_1 fprintf(stderr, " (use ttf2pt1 -p? to get the full list of available front-ends)\n"); ++ } ++ } ++ ++ /* open the input file */ ++ cursw->open(argv[1], front_arg); ++ ++ /* Get base name of output file (if not specified) ++ * by removing (known) suffixes ++ */ ++ if (argc == 2) { ++ char *p; ++ argv[2] = strdup (argv[1]); ++ p = strrchr(argv[2], '.'); ++ if (p != NULL) ++ for (j = 0; (j < MAXSUFFIX) && (cursw->suffix[j]); j++) ++ if (!strcmp(p+1, cursw->suffix[j])) { ++ *p = '\0'; ++ break; ++ } ++ } ++ ++ if ((null_file = fopen(BITBUCKET, "w")) == NULL) { ++ fprintf(stderr, "**** Cannot open %s ****\n", ++ BITBUCKET); ++ exit(1); ++ } ++ ++ if (argv[2][0] == '-' && argv[2][1] == 0) { ++#ifdef WINDOWS ++ if(encode) { ++ fprintf(stderr, "**** can't write encoded file to stdout ***\n"); ++ exit(1); ++ } ++#endif /* WINDOWS */ ++ pfa_file = afm_file = dvienc_file = null_file; ++ ++ if(wantafm || genlast == &gen_afm) { /* print .afm instead of .pfa */ ++ afm_file=stdout; ++ } else if(genlast == &gen_dvienc) { /* print .enc instead of .pfa */ ++ dvienc_file=stdout; ++ } else { ++ pfa_file=stdout; ++ } ++ } else { ++#ifndef WINDOWS ++ snprintf(filename, sizeof filename, "%s.%s", argv[2], encode ? (pfbflag ? "pfb" : "pfa") : "t1a" ); ++#else /* WINDOWS */ ++ snprintf(filename, sizeof filename, "%s.t1a", argv[2]); ++#endif /* WINDOWS */ ++ if(gen_pfa) { ++ if ((pfa_file = fopen(filename, "w+b")) == NULL) { ++ fprintf(stderr, "**** Cannot create %s ****\n", filename); ++ exit(1); ++ } else { ++ WARNING_2 fprintf(stderr, "Creating file %s\n", filename); ++ } ++ } else ++ pfa_file = null_file; ++ ++ if(gen_afm) { ++ snprintf(filename, sizeof filename, "%s.afm", argv[2]) ; ++ if ((afm_file = fopen(filename, "w+")) == NULL) { ++ fprintf(stderr, "**** Cannot create %s ****\n", filename); ++ exit(1); ++ } ++ } else ++ afm_file = null_file; ++ ++ if(gen_dvienc) { ++ snprintf(filename, sizeof filename, "%s.enc", argv[2]) ; ++ if ((dvienc_file = fopen(filename, "w+")) == NULL) { ++ fprintf(stderr, "**** Cannot create %s ****\n", filename); ++ exit(1); ++ } ++ } else ++ dvienc_file = null_file; ++ } ++ ++ /* ++ * Now check whether we want a fully encoded .pfa file ++ */ ++#ifndef WINDOWS ++ if (encode && pfa_file != null_file) { ++ int p[2]; ++ extern FILE *ifp, *ofp; /* from t1asm.c */ ++ ++ ifp=stdin; ++ ofp=stdout; ++ ++ if (pipe(p) < 0) { ++ perror("**** Cannot create pipe ****\n"); ++ exit(1); ++ } ++ ofp = pfa_file; ++ ifp = fdopen(p[0], "r"); ++ if (ifp == NULL) { ++ perror("**** Cannot use pipe for reading ****\n"); ++ exit(1); ++ } ++ pfa_file = fdopen(p[1], "w"); ++ if (pfa_file == NULL) { ++ perror("**** Cannot use pipe for writing ****\n"); ++ exit(1); ++ } ++ switch (fork()) { ++ case -1: ++ perror("**** Cannot fork the assembler process ****\n"); ++ exit(1); ++ case 0: /* child */ ++ fclose(pfa_file); ++ exit(runt1asm(pfbflag)); ++ default: /* parent */ ++ fclose(ifp); fclose(ofp); ++ } ++ } ++#endif /* WINDOWS */ ++ ++ numglyphs = cursw->nglyphs(); ++ ++ WARNING_3 fprintf(stderr, "numglyphs = %d\n", numglyphs); ++ ++ glyph_list = (GLYPH *) calloc(numglyphs, sizeof(GLYPH)); ++ ++ /* initialize non-0 fields */ ++ for (i = 0; i < numglyphs; i++) { ++ GLYPH *g; ++ ++ g = &glyph_list[i]; ++ g->char_no = -1; ++ g->orig_code = -1; ++ g->name = "UNKNOWN"; ++ g->flags = GF_FLOAT; /* we start with float representation */ ++ } ++ ++ handle_gnames(); ++ ++ cursw->glmetrics(glyph_list); ++ cursw->fnmetrics(&fontm); ++ ++ original_scale_factor = 1000.0 / (double) fontm.units_per_em; ++ ++ if(transform == 0) ++ scale_factor = 1.0; /* don't transform */ ++ else ++ scale_factor = original_scale_factor; ++ ++ if(correctvsize && uni_sample!=0) { /* only for known languages */ ++ /* try to adjust the scale factor to make a typical ++ * uppercase character of hight at least (correctvsize), this ++ * may improve the appearance of the font but also ++ * make it weird, use with caution ++ */ ++ int ysz; ++ ++ ysz = iscale(glyph_list[encoding[uni_sample]].yMax); ++ if( yszmapping, i); ++ ++ if( ftindex < numglyphs ) { ++ glyph_list[ftindex].flags |= GF_USED; ++ } ++ } ++ ++ /* also always include .notdef */ ++ { ++ int notdef_found = FALSE; ++ ++ for (i = 0; i < numglyphs; i++) { ++ if(!strcmp(glyph_list[i].name, ".notdef")) { ++ glyph_list[i].flags |= GF_USED; ++ notdef_found = TRUE; ++ break; ++ } ++ } ++ ++ if( !notdef_found ) ++ { ++ /* No ".notdef" found ? ++ * Then copy outlines of char 0 to the first "free" slot and make ++ * it our ".notdef" char. ++ */ ++ for (i = 0; i < numglyphs; i++) { ++ if((glyph_list[i].flags & GF_USED) == 0) { ++ glyph_list[i] = glyph_list[0]; ++ glyph_list[i].flags |= GF_USED; ++ glyph_list[i].name = ".notdef"; ++ notdef_found = TRUE; ++ break; ++ } ++ } ++ } ++ ++ if( !notdef_found ) ++ { ++ /* This shoudl never happen... */ ++ fprintf(stderr, "ft2pt1: '.notdef' missing in generated font.\n"); ++ } ++ } ++#else ++ if(allglyphs) { ++ for (i = 0; i < numglyphs; i++) { ++ glyph_list[i].flags |= GF_USED; ++ } ++ } else { ++ for (i = 0; i < ENCTABSZ; i++) { ++ glyph_list[encoding[i]].flags |= GF_USED; ++ } ++ ++ /* also always include .notdef */ ++ for (i = 0; i < numglyphs; i++) ++ if(!strcmp(glyph_list[i].name, ".notdef")) { ++ glyph_list[i].flags |= GF_USED; ++ break; ++ } ++ } ++#endif /* XP_ONLY_BLOCKS */ ++ ++ for (i = 0; i < numglyphs; i++) { ++ if (glyph_list[i].flags & GF_USED) { ++ DBG_TO_GLYPH(&glyph_list[i]); ++ convert_glyf(i); ++ DBG_FROM_GLYPH(&glyph_list[i]); ++ } ++ } ++ ++ italic_angle = fontm.italic_angle; ++ ++ if (italic_angle > 45.0 || italic_angle < -45.0) ++ italic_angle = 0.0; /* consider buggy */ ++ ++ if (hints) { ++ findblues(); ++ for (i = 0; i < numglyphs; i++) { ++ if (glyph_list[i].flags & GF_USED) { ++ DBG_TO_GLYPH(&glyph_list[i]); ++ buildstems(&glyph_list[i]); ++ assertpath(glyph_list[i].entries, __FILE__, __LINE__, glyph_list[i].name); ++ DBG_FROM_GLYPH(&glyph_list[i]); ++ } ++ } ++ stemstatistics(); ++ } else { ++ for(i=0; i<4; i++) ++ bbox[i] = iscale(fontm.bbox[i]); ++ } ++ /* don't touch the width of fixed width fonts */ ++ if( fontm.is_fixed_pitch ) ++ correctwidth=0; ++ docorrectwidth(); /* checks correctwidth inside */ ++ if (reverse) ++ for (i = 0; i < numglyphs; i++) { ++ if (glyph_list[i].flags & GF_USED) { ++ DBG_TO_GLYPH(&glyph_list[i]); ++ reversepaths(&glyph_list[i]); ++ assertpath(glyph_list[i].entries, __FILE__, __LINE__, glyph_list[i].name); ++ DBG_FROM_GLYPH(&glyph_list[i]); ++ } ++ } ++ ++ ++#if 0 ++ /* ++ ** It seems to bring troubles. The problem is that some ++ ** styles of the font may be recognized as fixed-width ++ ** while other styles of the same font as proportional. ++ ** So it's better to be commented out yet. ++ */ ++ if (tryfixed) ++ alignwidths(); ++#endif ++ ++ if(trybold) { ++ forcebold = fontm.force_bold; ++ } ++ ++#ifdef XP_PSTEXT ++ fprintf(pfa_file, "%%!PS-AdobeFont-1.0: %s\n", fontm.name_ps); ++#else ++ fprintf(pfa_file, "%%!PS-AdobeFont-1.0: %s %s\n", fontm.name_ps, fontm.name_copyright); ++ time(&now); ++ fprintf(pfa_file, "%%%%CreationDate: %s", ctime(&now)); ++ fprintf(pfa_file, "%% Converted by ttf2pt1 %s/%s\n", TTF2PT1_VERSION, cursw->name); ++ fprintf(pfa_file, "%% Args: %s\n", cmdline); ++ fprintf(pfa_file, "%%%%EndComments\n"); ++#endif /* XP_PSTEXT */ ++ fprintf(pfa_file, "12 dict begin\n/FontInfo 9 dict dup begin\n"); ++ ++ WARNING_3 fprintf(stderr, "FontName %s%s\n", fontm.name_ps, uni_font_name_suffix); ++ ++ ++ fprintf(pfa_file, " /version (%s) readonly def\n", fontm.name_version); ++ ++ fprintf(pfa_file, " /Notice (%s) readonly def\n", fontm.name_copyright); ++ ++ fprintf(pfa_file, " /FullName (%s) readonly def\n", fontm.name_full); ++ fprintf(pfa_file, " /FamilyName (%s) readonly def\n", fontm.name_family); ++ ++ if(wantuid) { ++ if(strUID) ++ fprintf(pfa_file, " /UniqueID %s def\n", strUID); ++ else { ++ numUID=0; ++ for(i=0; fontm.name_full[i]!=0; i++) { ++ numUID *= 37; /* magic number, good for hash */ ++ numUID += fontm.name_full[i]-' '; ++ /* if the name is long the first chars ++ * may be lost forever, so re-insert ++ * them thus making kind of CRC ++ */ ++ numUID += (numUID>>24) & 0xFF; ++ } ++ /* the range for private UIDs is 4 000 000 - 4 999 999 */ ++ fprintf(pfa_file, " /UniqueID %lu def\n", numUID%1000000+4000000); ++ } ++ } ++ ++ fprintf(pfa_file, " /Weight (%s) readonly def\n", fontm.name_style); ++ ++ fprintf(pfa_file, " /ItalicAngle %f def\n", italic_angle); ++ fprintf(pfa_file, " /isFixedPitch %s def\n", ++ fontm.is_fixed_pitch ? "true" : "false"); ++ ++ /* we don't print out the unused glyphs */ ++ nchars = 0; ++ for (i = 0; i < numglyphs; i++) { ++ if (glyph_list[i].flags & GF_USED) { ++ nchars++; ++ } ++ } ++ ++ fprintf(afm_file, "StartFontMetrics 4.1\n"); ++ fprintf(afm_file, "FontName %s%s\n", fontm.name_ps, uni_font_name_suffix); ++ fprintf(afm_file, "FullName %s\n", fontm.name_full); ++ fprintf(afm_file, "Notice %s\n", fontm.name_copyright); ++ fprintf(afm_file, "EncodingScheme FontSpecific\n"); ++ fprintf(afm_file, "FamilyName %s\n", fontm.name_family); ++ fprintf(afm_file, "Weight %s\n", fontm.name_style); ++ fprintf(afm_file, "Version %s\n", fontm.name_version); ++ fprintf(afm_file, "Characters %d\n", nchars); ++ fprintf(afm_file, "ItalicAngle %.1f\n", italic_angle); ++ ++ fprintf(afm_file, "Ascender %d\n", iscale(fontm.ascender)); ++ fprintf(afm_file, "Descender %d\n", iscale(fontm.descender)); ++ ++ fprintf(pfa_file, " /UnderlinePosition %d def\n", ++ iscale(fontm.underline_position)); ++ ++ fprintf(pfa_file, " /UnderlineThickness %hd def\n", ++ iscale(fontm.underline_thickness)); ++ ++ fprintf(pfa_file, "end readonly def\n"); ++ ++ fprintf(afm_file, "UnderlineThickness %d\n", ++ iscale(fontm.underline_thickness)); ++ ++ fprintf(afm_file, "UnderlinePosition %d\n", ++ iscale(fontm.underline_position)); ++ ++ fprintf(afm_file, "IsFixedPitch %s\n", ++ fontm.is_fixed_pitch ? "true" : "false"); ++ fprintf(afm_file, "FontBBox %d %d %d %d\n", ++ bbox[0], bbox[1], bbox[2], bbox[3]); ++ ++ fprintf(pfa_file, "/FontName /%s%s def\n", fontm.name_ps, uni_font_name_suffix); ++ fprintf(pfa_file, "/PaintType 0 def\n/StrokeWidth 0 def\n"); ++ /* I'm not sure if these are fixed */ ++ fprintf(pfa_file, "/FontType 1 def\n"); ++ ++ if (transform) { ++ fprintf(pfa_file, "/FontMatrix [0.001 0 0 0.001 0 0] def\n"); ++ } else { ++ fprintf(pfa_file, "/FontMatrix [%9.7f 0 0 %9.7f 0 0] def\n", ++ original_scale_factor / 1000.0, original_scale_factor / 1000.0); ++ } ++ ++ fprintf(pfa_file, "/FontBBox {%d %d %d %d} readonly def\n", ++ bbox[0], bbox[1], bbox[2], bbox[3]); ++ ++ fprintf(pfa_file, "/Encoding 256 array\n"); ++ /* determine number of elements for metrics table */ ++ nmetrics = 256; ++ for (i = 0; i < numglyphs; i++) { ++ if( glyph_list[i].flags & GF_USED ++ && glyph_list[i].char_no == -1 ) { ++ nmetrics++; ++ } ++ } ++ fprintf(afm_file, "StartCharMetrics %d\n", nmetrics); ++ ++ fprintf(dvienc_file, "/%s%sEncoding [\n", ++ fontm.name_ps, uni_font_name_suffix); ++ ++#ifdef XP_PSTEXT ++ { ++ int linewidth = 0; ++ for (i = 0; i < 256; i++) { /* here 256, not ENCTABSZ */ ++ linewidth += strlen(glyph_list[encoding[i]].name) + 14 + 8; ++ fprintf(pfa_file, "dup %d /%s put%s", ++ i, ++ glyph_list[encoding[i]].name, ++ (linewidth > 70 || i == 255)?(linewidth = 0, "\n"):("\t")); ++ if( glyph_list[encoding[i]].flags & GF_USED ) { ++ print_glyph_metrics(i, encoding[i]); ++ } ++ if (encoding[i]) ++ fprintf (dvienc_file, "/index0x%04X\n", encoding[i]); ++ else ++ fprintf (dvienc_file, "/.notdef\n"); ++ } ++ } ++#else ++ for (i = 0; i < 256; i++) { /* here 256, not ENCTABSZ */ ++ fprintf(pfa_file, ++ "dup %d /%s put\n", i, glyph_list[encoding[i]].name); ++ if( glyph_list[encoding[i]].flags & GF_USED ) { ++ print_glyph_metrics(i, encoding[i]); ++ } ++ if (encoding[i]) ++ fprintf (dvienc_file, "/index0x%04X\n", encoding[i]); ++ else ++ fprintf (dvienc_file, "/.notdef\n"); ++ } ++#endif /* XP_PSTEXT */ ++ /* print the metrics for glyphs not in encoding table */ ++ for(i=0; ikerning(glyph_list); ++ print_kerning(afm_file); ++ } ++ ++ fprintf(afm_file, "EndFontMetrics\n"); ++ if(afm_file != null_file) ++ fclose(afm_file); ++ ++ fprintf(dvienc_file, "] def\n"); ++ if(dvienc_file != null_file) ++ fclose(dvienc_file); ++ ++ WARNING_1 fprintf(stderr, "Finished - font files created\n"); ++ ++ cursw->close(); ++ ++#ifndef WINDOWS ++ while (wait(&ws) > 0) { ++ } ++#else ++ if (encode && pfa_file != null_file) { ++ extern FILE *ifp, *ofp; /* from t1asm.c */ ++ ++ snprintf(filename, sizeof filename, "%s.%s", argv[2], pfbflag ? "pfb" : "pfa" ); ++ ++ if ((ofp = fopen(filename, "w+b")) == NULL) { ++ fprintf(stderr, "**** Cannot create %s ****\n", filename); ++ exit(1); ++ } else { ++ WARNING_2 fprintf(stderr, "Creating file %s\n", filename); ++ } ++ ++ snprintf(filename, sizeof filename, "%s.t1a", argv[2]); ++ ++ if ((ifp = fopen(filename, "rb")) == NULL) { ++ fprintf(stderr, "**** Cannot read %s ****\n", filename); ++ exit(1); ++ } else { ++ WARNING_2 fprintf(stderr, "Converting file %s\n", filename); ++ } ++ ++ runt1asm(pfbflag); ++ ++ WARNING_2 fprintf(stderr, "Removing file %s\n", filename); ++ if(unlink(filename) < 0) ++ WARNING_1 fprintf(stderr, "Unable to remove file %s\n", filename); ++ } ++#endif /* WINDOWS */ ++ ++ fclose(null_file); ++ return 0; ++} +diff -ruN xserver-old/hw/xprint/extras/ttf2pt1/ttf2pt1_convert.1 xserver/hw/xprint/extras/ttf2pt1/ttf2pt1_convert.1 +--- xserver-old/hw/xprint/extras/ttf2pt1/ttf2pt1_convert.1 1970-01-01 10:00:00.000000000 +1000 ++++ xserver/hw/xprint/extras/ttf2pt1/ttf2pt1_convert.1 2006-06-27 13:10:26.000000000 +1000 +@@ -0,0 +1,512 @@ ++.rn '' }` ++''' $RCSfile$$Revision$$Date$ ++''' ++''' $Log$ ++''' Revision 1.1.4.1 2004/04/21 10:03:13 gisburn ++''' Fix for http://pdx.freedesktop.org/cgi-bin/bugzilla/show_bug.cgi?id=530 - Land XPRINT branch on XORG-CURRENT ++''' ++''' Revision 1.1 2003/06/04 00:33:54 roland ++''' Fix for http://xprint.mozdev.org/bugs/show_bug.cgi?id=3846 - RFE: Upload Freetype --> PS Type1 font converter "ttf2pt1" ... ++''' ++''' ++.de Sh ++.br ++.if t .Sp ++.ne 5 ++.PP ++\fB\\$1\fR ++.PP ++.. ++.de Sp ++.if t .sp .5v ++.if n .sp ++.. ++.de Ip ++.br ++.ie \\n(.$>=3 .ne \\$3 ++.el .ne 3 ++.IP "\\$1" \\$2 ++.. ++.de Vb ++.ft CW ++.nf ++.ne \\$1 ++.. ++.de Ve ++.ft R ++ ++.fi ++.. ++''' ++''' ++''' Set up \*(-- to give an unbreakable dash; ++''' string Tr holds user defined translation string. ++''' Bell System Logo is used as a dummy character. ++''' ++.tr \(*W-|\(bv\*(Tr ++.ie n \{\ ++.ds -- \(*W- ++.ds PI pi ++.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch ++.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch ++.ds L" "" ++.ds R" "" ++''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of ++''' \*(L" and \*(R", except that they are used on ".xx" lines, ++''' such as .IP and .SH, which do another additional levels of ++''' double-quote interpretation ++.ds M" """ ++.ds S" """ ++.ds N" """"" ++.ds T" """"" ++.ds L' ' ++.ds R' ' ++.ds M' ' ++.ds S' ' ++.ds N' ' ++.ds T' ' ++'br\} ++.el\{\ ++.ds -- \(em\| ++.tr \*(Tr ++.ds L" `` ++.ds R" '' ++.ds M" `` ++.ds S" '' ++.ds N" `` ++.ds T" '' ++.ds L' ` ++.ds R' ' ++.ds M' ` ++.ds S' ' ++.ds N' ` ++.ds T' ' ++.ds PI \(*p ++'br\} ++.\" If the F register is turned on, we'll generate ++.\" index entries out stderr for the following things: ++.\" TH Title ++.\" SH Header ++.\" Sh Subsection ++.\" Ip Item ++.\" X<> Xref (embedded ++.\" Of course, you have to process the output yourself ++.\" in some meaninful fashion. ++.if \nF \{ ++.de IX ++.tm Index:\\$1\t\\n%\t"\\$2" ++.. ++.nr % 0 ++.rr F ++.\} ++.TH TTF2PT1_CONVERT 1 "version 3.4.4-SNAP-030526" "May 26, 2003" "TTF2PT1 Font Converter" ++.UC ++.if n .hy 0 ++.if n .na ++.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' ++.de CQ \" put $1 in typewriter font ++.ft CW ++'if n "\c ++'if t \\&\\$1\c ++'if n \\&\\$1\c ++'if n \&" ++\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7 ++'.ft R ++.. ++.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2 ++. \" AM - accent mark definitions ++.bd B 3 ++. \" fudge factors for nroff and troff ++.if n \{\ ++. ds #H 0 ++. ds #V .8m ++. ds #F .3m ++. ds #[ \f1 ++. ds #] \fP ++.\} ++.if t \{\ ++. ds #H ((1u-(\\\\n(.fu%2u))*.13m) ++. ds #V .6m ++. ds #F 0 ++. ds #[ \& ++. ds #] \& ++.\} ++. \" simple accents for nroff and troff ++.if n \{\ ++. ds ' \& ++. ds ` \& ++. ds ^ \& ++. ds , \& ++. ds ~ ~ ++. ds ? ? ++. ds ! ! ++. ds / ++. ds q ++.\} ++.if t \{\ ++. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" ++. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' ++. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' ++. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' ++. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' ++. ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10' ++. ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m' ++. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' ++. ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10' ++.\} ++. \" troff and (daisy-wheel) nroff accents ++.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' ++.ds 8 \h'\*(#H'\(*b\h'-\*(#H' ++.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#] ++.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u' ++.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u' ++.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#] ++.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] ++.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' ++.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' ++.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] ++.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] ++.ds ae a\h'-(\w'a'u*4/10)'e ++.ds Ae A\h'-(\w'A'u*4/10)'E ++.ds oe o\h'-(\w'o'u*4/10)'e ++.ds Oe O\h'-(\w'O'u*4/10)'E ++. \" corrections for vroff ++.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' ++.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' ++. \" for low resolution devices (crt and lpr) ++.if \n(.H>23 .if \n(.V>19 \ ++\{\ ++. ds : e ++. ds 8 ss ++. ds v \h'-1'\o'\(aa\(ga' ++. ds _ \h'-1'^ ++. ds . \h'-1'. ++. ds 3 3 ++. ds o a ++. ds d- d\h'-1'\(ga ++. ds D- D\h'-1'\(hy ++. ds th \o'bp' ++. ds Th \o'LP' ++. ds ae ae ++. ds Ae AE ++. ds oe oe ++. ds Oe OE ++.\} ++.rm #[ #] #H #V #F C ++.SH "NAME" ++\fBttf2pt1_convert\fR \- convenience font conversion script ++.SH "SYNOPSIS" ++ttf2pt1_convert \fB[config-file]\fR ++.SH "DESCRIPTION" ++`\fBConvert\fR\*(R' is the master conversion script provided with ttf2pt1. ++When installed into a public directory it's named `\fBttf2pt1_convert\fR\*(R' ++to avoid name collisions with the other programs. ++.PP ++If the configuration file is not specified as an argument then the file ++`\f(CWconvert.cfg\fR\*(R' in the current directory is used. This file contains ++a set of configuration variables. The distribution contains a sample file ++file `\f(CWconvert.cfg.sample\fR\*(R'. Please copy it to `\f(CWconvert.cfg\fR\*(R', ++look inside it and change the configuration variables. The more stable ++configuration variables, such as the path names of the scripts and ++encoding files are located in `\f(CWconvert\fR\*(R' itself, they are ++automatically updated when installing \fBttf2pt1\fR. ++.PP ++Put all the TTF fonts you want to convert into some directory (this ++may be just the directory that already contains all the Windows ++fonts on a mounted FAT filesystem). If you have fonts in different ++source encoding then put the fonts in each of the encodings ++into a separate directory. Up to 10 source directories are ++supported. If you (in a rather unlikely case) have more source ++directories then you can make two separate runs of the converter, ++converting up to 10 directories at a time. ++.PP ++The variables in the configuration file are: ++.Ip "\(bu" 2 ++\fB\f(CWSRCDIRS\fR\fR \- the list of directories (with absolute paths) with ++\s-1TTF\s0 fonts. Each line contains at least 3 fields: the name of the directory, ++the language of the fonts in it (if you have fonts for different ++languages you have to put them into the separate directories) and the ++encoding of the fonts. Again, if you have some of the \s-1TTF\s0 typefaces in ++one encoding, and some in another (say, \s-1CP\s0\-1251 and \s-1KOI\s0\-8), you have ++to put them into the separate source directories. Some lines may contain ++4 fields. Then the fourth field is the name of the external map to ++convert the Unicode fonts into the desirable encoding. This map is ++used instead of the built-in map for the specified language. ++.Sp ++*8* ++An interesting thing is that some languages have more than one ++widely used character encodings. For example, the widely used ++encodings for Russian are \s-1IBM\s0 \s-1CP\s0\-866 (\s-1MS\s0\-\s-1DOS\s0 and Unix), \s-1KOI\s0\-8 ++(Unix and \s-1VAX\s0, also the standard Internet encoding), \s-1IBM\s0 \s-1CP\s0\-1251 (\s-1MS\s0 Windows). ++That's why I have provided the means to generate the converted fonts ++in more than one encoding. See the file encodings/\s-1README\s0 for ++details about the encoding tables. Actually, if you plan to use ++these fonts with Netscape Navigator better use the aliases ++cp-866 instead of ibm-866 and windows-1251 instead of ibm-1251 ++because that's what Netscape wants. ++.Ip "\(bu" 2 ++\fB\f(CWDSTDIR\fR\fR \- directory for the resulting Type1 fonts. Be careful! ++This directory gets completely wiped out before conversion, ++so don't use any already existing directory for this purpose. ++.Ip "\(bu" 2 ++\fB\f(CWDSTENC\fI{language}\fR\fR\fR \- the list of encodings in which the destination ++fonts will be generated for each language. Each font of that ++language will be generated in each of the specified ++encodings. If you don't want any translation, just specify both ++\f(CWSRCENC\fR and \f(CWDSTENC\fR as iso8859-1 (or if you want any other encoding ++specified in the fonts.dir, copy the description of 8859-1 with ++new name and use this new name for \f(CWSRCENC\fR and \f(CWDSTENC\fR). ++.Ip "\(bu" 2 ++\fB\f(CWFOUNDRY\fR\fR \- the foundry name to be used in the fonts.dir file. I have ++set it to `fromttf\*(R' to avoid name conflicts with any existing font for ++sure. But this foundry name is not registered in X11 standards and ++if you want to get the full standard compliance or have a font server ++that enforces such a compliance, use `misc\*(R'. ++.PP ++The next few parameters control the general behavior of the converter. ++They default values are set to something reasonable. ++.Ip "\(bu" 2 ++\fB\f(CWCORRECTWIDTH\fR\fR \- if the value is set to \fB\f(CWYES\fR\fR then use the ++converter option \f(CW\fB-w\fR\fR, otherwise don't use it. See the description of ++this option in the \s-1README\s0 file. ++.Ip "\(bu" 2 ++\fB\f(CWREMOVET1A\fR\fR \- if the value is set to \fB\f(CWYES\fR\fR then after ++conversion remove the un-encoded \f(CW.t1a\fR font files and the ++intermediate \f(CW.xpfa\fR font metric files. ++.Ip "\(bu" 2 ++\fB\f(CWINSTALLFONTMAP\fR\fR \- a Ghostscript parameter, if the value is set to ++\fB\f(CWYES\fR\fR then install the entries for the new fonts ++right into the main \f(CWFontmap\fR file. Otherwise just leave ++the file \f(CWFontmap.ttf\fR in the Ghostscript configuration ++directory. ++.Ip "\(bu" 2 ++\fB\f(CWHINTSUBST\fR\fR \- if the value is set to \fB\f(CWYES\fR\fR use the option ++\f(CW\fB-H\fR\fR, otherwise don't use it. This option enables the ++hint substitution technique. If you have not installed the X11 patch ++described above, use this option with great caution. See further ++description of this option in the \s-1README\s0 file. ++.Ip "\(bu" 2 ++\fB\f(CWENFORCEISO\fR\fR \- if the value is set to \fB\f(CWYES\fR\fR then ++disguise the resulting fonts as the fonts in ISOLatin1 encoding. Historically ++this was neccessary due to the way the installer scripts created the ++X11 font configuration files. It is not neccessary any more for this ++purpose. But if you plan to use these fonts with some other application ++that expects ISOLatin1 encoding then better enable this option. ++.Ip "\(bu" 2 ++\fB\f(CWALLGLYPHS\fR\fR \- if the value is set to \fB\f(CWYES\fR\fR then ++include all the glyphs from the source fonts into the resulting fonts, even ++if these glyphs are inaccessible. If it's set to \fB\f(CWNO\fR\fR then ++include only the glyphs which have codes assigned to them. The glyphs ++without codes can not be used directly. But some clever programs, ++such as the Type 1 library from XFree86 3.9 and higher can change ++the encoding on the fly and use another set of glyphs. If you have not ++installed the X11 patch described above, use this option with great ++caution. See further description of the option option \f(CW\fB-a\fR\fR in the ++\s-1README\s0 file. ++.Ip "\(bu" 2 ++\fB\f(CWGENUID\fR\fR \- if the value is set to \fB\f(CWYES\fR\fR then use ++the option \f(CW\fB-uA\fR\fR of the converter to generate UniqueIDs for ++the converted fonts. The standard X11 Type 1 library does not use ++this \s-1ID\s0, so it may only be neccessary for the other applications. ++The script is clever enough to generate different UniqueID for the ++same font converted to multiple encodings. Also after conversion it ++checks all the fonts generacted during the session for duplicated ++UniqueID and shows those. Still, this does not quarantee that these ++UniqueIDs won't overlap with some other fonts. The UniqueIDs are ++generated as hash values from the font names, so it's guaranteed ++that if the `\f(CWconvert\fR\*(R' script runs multiple times it will ++generate the same UniqueIDs during each run. See further description ++of this option in the \s-1README\s0 file. ++.Ip "\(bu" 2 ++\fB\f(CWGENUID\fR\fR \- if the value is set to \fB\f(CWYES\fR\fR then create ++the \f(CW.pfb\fR files, otherwise the \f(CW.pfa\fR files. The \f(CW.pfb\fR ++files are more compact but contain binary data, so you may experience some ++troubles when transferring them through the network. ++.PP ++The following parameters are used to locate the other scripts and ++configuration files. By default the scripts do a bit of guessing for them: ++they search in the \fBttf2pt1\fR installation directory if \fBttf2pt1\fR ++was installed or otherwise suppose that you are running `\f(CWconvert\fR\*(R' with ++`\f(CWscripts\fR\*(R' subdirectory being the current directory. ++.Ip "\(bu" 2 ++\fB\f(CWENCDIR\fR\fR \- directory containing the descriptions of encodings ++.Ip "\(bu" 2 ++\fB\f(CWMAPDIR\fR\fR \- directory containing the external map files ++.PP ++Besides that a few parameters are built into the `\f(CWconvert\fR\*(R' script itself. ++You probably won't need to change them: ++.Ip "\(bu" 2 ++\f(CW\fBT1ASM\fR\fR, \f(CW\fBTTF2PT1\fR\fR, \f(CW\fBTRANS\fR\fR, \f(CW\fBT1FDIR\fR\fR, \f(CW\fBFORCEISO\fR\fR \- paths to the other script ++.PP ++Also there are a few parameters controlling the installation of ++fonts for Ghostscript. Please look at their description in the ++Ghostscript section of documentation or in the \fBttf2pt1_x2gs(1)\fR ++manual page before running `\f(CWconvert\fR\*(R'. If these parameters are ++set, `\f(CWconvert\fR\*(R' will call the `\f(CWx2gs\fR\*(R' script automatically ++to install the newly converted fonts in Ghostscript. ++.PP ++After creating the configuration file run the `\f(CWconvert\fR\*(R' script. Look at ++the result and the log file in \f(CWDSTDIR\fR. ++.PP ++Add the directory with newly converted fonts to the configuration ++of X server or font server. For most of the systems this step is ++very straightforward. For \s-1HP\s0\-\s-1UX\s0 it's rather tricky and poorly ++documented, so the file \s-1FONTS\s0.hpux gives a short description. ++.PP ++If you don't have the privileges of the root user, you still can ++configure your private font server. Just use some non-standard ++port number (see \s-1FONTS\s0.hpux for an example, exept that you won't ++need all the \s-1HP\s0\-related stuff on any other system). ++.SH "FILES" ++.Ip "\(bu" 2 ++\s-1TTF2PT1_SHAREDIR/\s0scripts/convert.cfg.sample ++.Ip "\(bu" 2 ++\s-1TTF2PT1_SHAREDIR/\s0scripts/* ++.Ip "\(bu" 2 ++\s-1TTF2PT1_SHAREDIR/README\s0 ++.Ip "\(bu" 2 ++\s-1TTF2PT1_SHAREDIR/FONTS\s0 ++.Ip "\(bu" 2 ++\s-1TTF2PT1_SHAREDIR\s0/* ++.Ip "\(bu" 2 ++\s-1TTF2PT1_BINDIR/\s0ttf2pt1 ++.SH "SEE ALSO" ++.Ip "\(bu" 4 ++the \fIttf2pt1(1)\fR manpage ++.Ip "\(bu" 4 ++the \fIttf2pt1_x2gs(1)\fR manpage ++.Ip "\(bu" 4 ++the \fIt1asm(1)\fR manpage ++.SH "BUGS" ++.Sh "Known problems" ++.Ip "\(bu" 4 ++One catch is that the X11 Type 1 font library has a rather low limit ++on the font size. Because of this the fonts with more complicated ++outlines and the enabled hint substitution may not fit into ++this limit. The same applies to the fonts with very complicated ++outlines or with very many glyphs (especially the fonts with ++over 256 glyphs). So you will need to excercise caution with ++these options if you plan using these fonts with X11. Some vendors ++such as \s-1HP\s0 provide the Type 1 implementation licensed from Adobe ++which should have no such problem. ++.Sp ++But there is a solution even for the generic X11. A patch located ++in the subdirectory `\f(CWapp/X11\fR\*(R' fixes this problem as well ++as some other minor problems. Its description is provided in ++app/X11/\s-1README\s0. ++.Sp ++To fix the X11 font library, you have to get the X11 sources. I ++can recommend the ftp sites of the XFree86 project ftp://ftp.xfree86.org ++or of the Open Group ftp://ftp.x.org. This patch was made on the sources ++of XFree86 so you may have better success with applying it to the ++XFree86 distribution. After you have got the sources, make sure ++that you can compile them. Then apply the patch as described. ++Make sure that it was applied properly. Compile the sources again ++(actually, you need only the fonts library, the fonts server, and ++possibly the X server). It would be prudent now to save your old ++font library, font server and, possibly, X server. Then install ++the new recently compiled versions of these files. Of course, ++if you know someone who already has compiled these files for the ++same \s-1OS\s0 as yours, you can just copy the binary fles from him. ++.Sp ++Alas, building the X11 system from the source code is not the ++easiest thing in the world and if you have no experience it ++can be quite difficult. In this case just avoid the aforementioned ++features or check each converted font to make sure that it ++works properly. ++.Ip "\(bu" 4 ++The Type1 font library from the standard X11 distribution ++does not work on \s-1HP\s0\-\s-1UX\s0 (at least, up to 10.01). The font server ++supplied with \s-1HP\s0\-\s-1UX\s0 up to 10.01 is also broken. Starting from ++\s-1HP\s0\-\s-1UX\s0 10.20 (I don't know about 10.10) they supply a proprietary font ++library and the converted fonts work fine with it, provided that ++they are configured properly (see the file \s-1FONTS\s0.hpux). ++.Ip "\(bu" 4 ++The \f(CWfonts.scale\fR files created by the older versions of the ++\f(CWttf2pt1\fR installation program (up to release 3.1) have conflicted ++with the language definitions of the \f(CWXfsft\fR font server and ++parts of it included into XFree86. To overcome this incompatibility ++the never versions creats the \f(CWfonts.scale\fR file describing all the ++fonts as belonging to the \f(CWadobe-fontspecific\fR encoding and ++the \f(CWfonts.alias\fR file with the proper names. The drawback of ++this solution is that \f(CWxlsfonts\fR gives the list of twice more ++fonts. But as a side effect the option \f(CW\fBENFORCEISO\fR\fR in ++`\f(CWconvert.cfg\fR\*(R' is not required for X11 any more. ++.Ip "\(bu" 4 ++The conversion script has no support for Eastern multi-plane fonts. ++Contribution of such a support would be welcome. ++ ++.rn }` '' ++.IX Title "TTF2PT1_CONVERT 1" ++.IX Name "B - convenience font conversion script" ++ ++.IX Header "NAME" ++ ++.IX Header "SYNOPSIS" ++ ++.IX Header "DESCRIPTION" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Header "FILES" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Header "SEE ALSO" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Header "BUGS" ++ ++.IX Subsection "Known problems" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ +diff -ruN xserver-old/hw/xprint/extras/ttf2pt1/ttf2pt1_x2gs.1 xserver/hw/xprint/extras/ttf2pt1/ttf2pt1_x2gs.1 +--- xserver-old/hw/xprint/extras/ttf2pt1/ttf2pt1_x2gs.1 1970-01-01 10:00:00.000000000 +1000 ++++ xserver/hw/xprint/extras/ttf2pt1/ttf2pt1_x2gs.1 2006-06-27 13:10:26.000000000 +1000 +@@ -0,0 +1,319 @@ ++.rn '' }` ++''' $RCSfile$$Revision$$Date$ ++''' ++''' $Log$ ++''' Revision 1.1.4.1 2004/04/21 10:03:13 gisburn ++''' Fix for http://pdx.freedesktop.org/cgi-bin/bugzilla/show_bug.cgi?id=530 - Land XPRINT branch on XORG-CURRENT ++''' ++''' Revision 1.1 2003/06/04 00:33:54 roland ++''' Fix for http://xprint.mozdev.org/bugs/show_bug.cgi?id=3846 - RFE: Upload Freetype --> PS Type1 font converter "ttf2pt1" ... ++''' ++''' ++.de Sh ++.br ++.if t .Sp ++.ne 5 ++.PP ++\fB\\$1\fR ++.PP ++.. ++.de Sp ++.if t .sp .5v ++.if n .sp ++.. ++.de Ip ++.br ++.ie \\n(.$>=3 .ne \\$3 ++.el .ne 3 ++.IP "\\$1" \\$2 ++.. ++.de Vb ++.ft CW ++.nf ++.ne \\$1 ++.. ++.de Ve ++.ft R ++ ++.fi ++.. ++''' ++''' ++''' Set up \*(-- to give an unbreakable dash; ++''' string Tr holds user defined translation string. ++''' Bell System Logo is used as a dummy character. ++''' ++.tr \(*W-|\(bv\*(Tr ++.ie n \{\ ++.ds -- \(*W- ++.ds PI pi ++.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch ++.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch ++.ds L" "" ++.ds R" "" ++''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of ++''' \*(L" and \*(R", except that they are used on ".xx" lines, ++''' such as .IP and .SH, which do another additional levels of ++''' double-quote interpretation ++.ds M" """ ++.ds S" """ ++.ds N" """"" ++.ds T" """"" ++.ds L' ' ++.ds R' ' ++.ds M' ' ++.ds S' ' ++.ds N' ' ++.ds T' ' ++'br\} ++.el\{\ ++.ds -- \(em\| ++.tr \*(Tr ++.ds L" `` ++.ds R" '' ++.ds M" `` ++.ds S" '' ++.ds N" `` ++.ds T" '' ++.ds L' ` ++.ds R' ' ++.ds M' ` ++.ds S' ' ++.ds N' ` ++.ds T' ' ++.ds PI \(*p ++'br\} ++.\" If the F register is turned on, we'll generate ++.\" index entries out stderr for the following things: ++.\" TH Title ++.\" SH Header ++.\" Sh Subsection ++.\" Ip Item ++.\" X<> Xref (embedded ++.\" Of course, you have to process the output yourself ++.\" in some meaninful fashion. ++.if \nF \{ ++.de IX ++.tm Index:\\$1\t\\n%\t"\\$2" ++.. ++.nr % 0 ++.rr F ++.\} ++.TH TTF2PT1_X2GS 1 "version 3.4.4-SNAP-030526" "May 26, 2003" "TTF2PT1 Font Converter" ++.UC ++.if n .hy 0 ++.if n .na ++.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' ++.de CQ \" put $1 in typewriter font ++.ft CW ++'if n "\c ++'if t \\&\\$1\c ++'if n \\&\\$1\c ++'if n \&" ++\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7 ++'.ft R ++.. ++.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2 ++. \" AM - accent mark definitions ++.bd B 3 ++. \" fudge factors for nroff and troff ++.if n \{\ ++. ds #H 0 ++. ds #V .8m ++. ds #F .3m ++. ds #[ \f1 ++. ds #] \fP ++.\} ++.if t \{\ ++. ds #H ((1u-(\\\\n(.fu%2u))*.13m) ++. ds #V .6m ++. ds #F 0 ++. ds #[ \& ++. ds #] \& ++.\} ++. \" simple accents for nroff and troff ++.if n \{\ ++. ds ' \& ++. ds ` \& ++. ds ^ \& ++. ds , \& ++. ds ~ ~ ++. ds ? ? ++. ds ! ! ++. ds / ++. ds q ++.\} ++.if t \{\ ++. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" ++. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' ++. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' ++. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' ++. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' ++. ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10' ++. ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m' ++. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' ++. ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10' ++.\} ++. \" troff and (daisy-wheel) nroff accents ++.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' ++.ds 8 \h'\*(#H'\(*b\h'-\*(#H' ++.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#] ++.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u' ++.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u' ++.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#] ++.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] ++.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' ++.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' ++.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] ++.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] ++.ds ae a\h'-(\w'a'u*4/10)'e ++.ds Ae A\h'-(\w'A'u*4/10)'E ++.ds oe o\h'-(\w'o'u*4/10)'e ++.ds Oe O\h'-(\w'O'u*4/10)'E ++. \" corrections for vroff ++.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' ++.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' ++. \" for low resolution devices (crt and lpr) ++.if \n(.H>23 .if \n(.V>19 \ ++\{\ ++. ds : e ++. ds 8 ss ++. ds v \h'-1'\o'\(aa\(ga' ++. ds _ \h'-1'^ ++. ds . \h'-1'. ++. ds 3 3 ++. ds o a ++. ds d- d\h'-1'\(ga ++. ds D- D\h'-1'\(hy ++. ds th \o'bp' ++. ds Th \o'LP' ++. ds ae ae ++. ds Ae AE ++. ds oe oe ++. ds Oe OE ++.\} ++.rm #[ #] #H #V #F C ++.SH "NAME" ++\fBttf2pt1_x2gs\fR \- font installer for Ghostscript ++.SH "SYNOPSIS" ++ttf2pt1_x2gs \fB[config-file]\fR ++.SH "DESCRIPTION" ++The fonts generated with \fBttf2pt1\fR work fine with Ghostscript by ++themselves. The script `\fBx2gs\fR\*(R' (or `\fBttf2pt1_x2gs\fR\*(R' when installed ++into a public directory, to avoid name conflicts with other ++programs) links the font files from the X11 direcotry into the Ghostscript ++directory and automatically creates the description file (\f(CWFontmap\fR) ++in Ghostscript format. ++.PP ++If the configuration file is not specified as an argument then the file ++`\f(CWconvert.cfg\fR\*(R' in the current directory is used, just like the ++`\f(CWconvert\fR\*(R' script does. Indeed, this configuration file is used for ++both scripts. ++.PP ++The Ghostscript-related parameters in the configuration file are: ++.PP ++\fB\f(CWDSTDIR\fR\fR \- the X11 font directory used by `\f(CWx2gs\fR\*(R' as the ++source of the fonts. This parameter is common with the X11 ++configuration. ++.PP ++\fB\f(CWGSDIR\fR\fR \- the base directory of Ghostsript. If this ++parameter is set to an empty string then `\f(CWconvert\fR\*(R' won't ++call `\f(CWx2gs\fR\*(R'. So if you want to get only the X11 fonts ++installed then set this parameter to an empty string. This ++directory may vary on various system, so please check your ++system and set this value accordingly before running the script. ++.PP ++\fB\f(CWGSFONTDIR\fR\fR \- the font directory of Ghostscript. In the standard ++Ghostscript installation it's a subdirectory of \f(CWGSDIR\fR ++but some systems may use completely different directories. ++.PP ++\fB\f(CWGSCONFDIR\fR\fR \- the configuration subdirectory of Ghostscript ++that contains the \f(CWFontmap\fR file. ++.PP ++\fB\f(CWINSTALLFONTMAP\fR\fR \- if the value is set to \fB\f(CWYES\fR\fR then ++install the entries for the new fonts right into the main ++\f(CWFontmap\fR file. Otherwise just leave the file \f(CWFontmap.ttf\fR ++in the Ghostscript configuration directory. ++.PP ++After preparing the configuration file run the script. It symbolicaly links ++all the font files and creates the description file \f(CWFontmap.ttf\fR in ++\f(CWGSCONDFIR\fR. After that there are two choices. ++.PP ++If the option \f(CWINSTALLFONTMAP\fR was set to \f(CWYES\fR then ++the font descriptions are also automatically installed into the ++master \f(CWFontmap\fR file. The script is clever enough to ++detect if it was run multiple times with the same directories ++and if so it replaces the old \f(CWFontmap\fR entries with ++the new ones instead of just accumulating all of them. You ++may also run it multiple times for multiple X11 directories ++and all the results will be properly collected in the \f(CWFontmap\fR. ++But it's your responsibility to watch that the names of the ++font files don't overlap. If the X11 font directory gets ++renamed then you have to remove its font entries from the ++\f(CWFontmap\fR and only after that re-run `\f(CWx2gs\fR\*(R' ++for the new directory. ++.PP ++On the other hand if the option \f(CWINSTALLFONTMAP\fR was set to ++\f(CWNO\fR then go to the \f(CWGSCONFDIR\fR directory and insert the ++contents of \f(CWFontmap.ttf\fR into the \f(CWFontmap\fR file ++manually. This step may be left manual to make the installation ++a little bit more safe. ++.PP ++After that you may also want to redefine some of the aliases in ++\f(CWFontmap\fR to refer to the newly installed fonts. ++But the redefinition of the aliases may be dangerous if the width of ++characters in the new font will be different from the old font. ++Alas, there is no visible solution of this problem yet. ++.SH "FILES" ++.Ip "\(bu" 2 ++\s-1TTF2PT1_SHAREDIR/\s0scripts/convert.cfg.sample ++.Ip "\(bu" 2 ++\s-1TTF2PT1_SHAREDIR/\s0scripts/* ++.Ip "\(bu" 2 ++\s-1TTF2PT1_SHAREDIR/README\s0 ++.Ip "\(bu" 2 ++\s-1TTF2PT1_SHAREDIR/FONTS\s0 ++.Ip "\(bu" 2 ++\s-1TTF2PT1_SHAREDIR\s0/* ++.Ip "\(bu" 2 ++\s-1TTF2PT1_BINDIR/\s0ttf2pt1 ++.SH "SEE ALSO" ++.Ip "\(bu" 4 ++the \fIttf2pt1(1)\fR manpage ++.Ip "\(bu" 4 ++the \fIttf2pt1_convert(1)\fR manpage ++.Ip "\(bu" 4 ++the \fIt1asm(1)\fR manpage ++ ++.rn }` '' ++.IX Title "TTF2PT1_X2GS 1" ++.IX Name "B - font installer for Ghostscript" ++ ++.IX Header "NAME" ++ ++.IX Header "SYNOPSIS" ++ ++.IX Header "DESCRIPTION" ++ ++.IX Header "FILES" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Header "SEE ALSO" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ ++.IX Item "\(bu" ++ +diff -ruN xserver-old/hw/xprint/extras/ttf2pt1/ttf.c xserver/hw/xprint/extras/ttf2pt1/ttf.c +--- xserver-old/hw/xprint/extras/ttf2pt1/ttf.c 1970-01-01 10:00:00.000000000 +1000 ++++ xserver/hw/xprint/extras/ttf2pt1/ttf.c 2006-06-27 13:10:26.000000000 +1000 +@@ -0,0 +1,1480 @@ ++/* ++ * True Type Font to Adobe Type 1 font converter ++ * By Mark Heath ++ * Based on ttf2pfa by Andrew Weeks ++ * With help from Frank M. Siegert ++ * ++ * see COPYRIGHT ++ * ++ */ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#ifndef WINDOWS ++# include ++# include ++#else ++# include "windows.h" ++#endif ++ ++#include "ttf.h" ++#include "pt1.h" ++#include "global.h" ++ ++/* prototypes of call entries */ ++static void openfont(char *fname, char *arg); ++static void closefont( void); ++static int getnglyphs ( void); ++static int glnames( GLYPH *glyph_list); ++static void glmetrics( GLYPH *glyph_list); ++static int glenc( GLYPH *glyph_list, int *encoding, int *unimap); ++static void fnmetrics( struct font_metrics *fm); ++static void glpath( int glyphno, GLYPH *glyph_list); ++static void kerning( GLYPH *glyph_list); ++ ++/* globals */ ++ ++/* front-end descriptor */ ++struct frontsw ttf_sw = { ++ /*name*/ "ttf", ++ /*descr*/ "built-in TTF support", ++ /*suffix*/ { "ttf" }, ++ /*open*/ openfont, ++ /*close*/ closefont, ++ /*nglyphs*/ getnglyphs, ++ /*glnames*/ glnames, ++ /*glmetrics*/ glmetrics, ++ /*glenc*/ glenc, ++ /*fnmetrics*/ fnmetrics, ++ /*glpath*/ glpath, ++ /*kerning*/ kerning, ++}; ++ ++/* statics */ ++ ++static FILE *ttf_file; ++static int ttf_nglyphs, long_offsets; ++ ++static TTF_DIRECTORY *directory; ++static TTF_DIR_ENTRY *dir_entry; ++static char *filebuffer; ++static char *filebuffer_end; ++static TTF_NAME *name_table = NULL; ++static TTF_NAME_REC *name_record; ++static TTF_HEAD *head_table = NULL; ++static TTF_HHEA *hhea_table = NULL; ++static TTF_KERN *kern_table = NULL; ++static TTF_CMAP *cmap_table = NULL; ++static LONGHORMETRIC *hmtx_table = NULL; ++static TTF_GLYF *glyf_table; ++static BYTE *glyf_start = NULL; ++static TTF_MAXP *maxp_table = NULL; ++static TTF_POST_HEAD *post_table = NULL; ++static union { ++ USHORT *sp; ++ ULONG *lp; ++} loca_table; ++#define short_loca_table loca_table.sp ++#define long_loca_table loca_table.lp ++ ++static short cmap_n_segs; ++static USHORT *cmap_seg_start, *cmap_seg_end; ++static short *cmap_idDelta, *cmap_idRangeOffset; ++static TTF_CMAP_FMT0 *encoding0; ++static int enc_type; ++ ++static char name_buffer[2000]; ++static char *name_fields[8]; ++ ++static int enc_found_ms, enc_found_mac; ++ ++static char *mac_glyph_names[258] = { ++ ".notdef", ".null", "CR", ++ "space", "exclam", "quotedbl", "numbersign", ++ "dollar", "percent", "ampersand", "quotesingle", ++ "parenleft", "parenright", "asterisk", "plus", ++ "comma", "hyphen", "period", "slash", ++ "zero", "one", "two", "three", ++ "four", "five", "six", "seven", ++ "eight", "nine", "colon", "semicolon", ++ "less", "equal", "greater", "question", ++ "at", "A", "B", "C", ++ "D", "E", "F", "G", ++ "H", "I", "J", "K", ++ "L", "M", "N", "O", ++ "P", "Q", "R", "S", ++ "T", "U", "V", "W", ++ "X", "Y", "Z", "bracketleft", ++ "backslash", "bracketright", "asciicircum", "underscore", ++ "grave", "a", "b", "c", ++ "d", "e", "f", "g", ++ "h", "i", "j", "k", ++ "l", "m", "n", "o", ++ "p", "q", "r", "s", ++ "t", "u", "v", "w", ++ "x", "y", "z", "braceleft", ++ "bar", "braceright", "asciitilde", "Adieresis", ++ "Aring", "Ccedilla", "Eacute", "Ntilde", ++ "Odieresis", "Udieresis", "aacute", "agrave", ++ "acircumflex", "adieresis", "atilde", "aring", ++ "ccedilla", "eacute", "egrave", "ecircumflex", ++ "edieresis", "iacute", "igrave", "icircumflex", ++ "idieresis", "ntilde", "oacute", "ograve", ++ "ocircumflex", "odieresis", "otilde", "uacute", ++ "ugrave", "ucircumflex", "udieresis", "dagger", ++ "degree", "cent", "sterling", "section", ++ "bullet", "paragraph", "germandbls", "registered", ++ "copyright", "trademark", "acute", "dieresis", ++ "notequal", "AE", "Oslash", "infinity", ++ "plusminus", "lessequal", "greaterequal", "yen", ++ "mu", "partialdiff", "summation", "product", ++ "pi", "integral", "ordfeminine", "ordmasculine", ++ "Omega", "ae", "oslash", "questiondown", ++ "exclamdown", "logicalnot", "radical", "florin", ++ "approxequal", "increment", "guillemotleft", "guillemotright", ++ "ellipsis", "nbspace", "Agrave", "Atilde", ++ "Otilde", "OE", "oe", "endash", ++ "emdash", "quotedblleft", "quotedblright", "quoteleft", ++ "quoteright", "divide", "lozenge", "ydieresis", ++ "Ydieresis", "fraction", "currency", "guilsinglleft", ++ "guilsinglright", "fi", "fl", "daggerdbl", ++ "periodcentered", "quotesinglbase", "quotedblbase", "perthousand", ++ "Acircumflex", "Ecircumflex", "Aacute", "Edieresis", ++ "Egrave", "Iacute", "Icircumflex", "Idieresis", ++ "Igrave", "Oacute", "Ocircumflex", "applelogo", ++ "Ograve", "Uacute", "Ucircumflex", "Ugrave", ++ "dotlessi", "circumflex", "tilde", "macron", ++ "breve", "dotaccent", "ring", "cedilla", ++ "hungarumlaut", "ogonek", "caron", "Lslash", ++ "lslash", "Scaron", "scaron", "Zcaron", ++ "zcaron", "brokenbar", "Eth", "eth", ++ "Yacute", "yacute", "Thorn", "thorn", ++ "minus", "multiply", "onesuperior", "twosuperior", ++ "threesuperior", "onehalf", "onequarter", "threequarters", ++ "franc", "Gbreve", "gbreve", "Idot", ++ "Scedilla", "scedilla", "Cacute", "cacute", ++ "Ccaron", "ccaron", "dmacron" ++}; ++ ++/* other prototypes */ ++static void draw_composite_glyf( GLYPH *g, GLYPH *glyph_list, int glyphno, ++ double *matrix, int level); ++static void draw_simple_glyf( GLYPH *g, GLYPH *glyph_list, int glyphno, ++ double *matrix); ++static double f2dot14( short x); ++ ++/* get the TTF description table address and length for this index */ ++ ++static void ++get_glyf_table( ++ int glyphno, ++ TTF_GLYF **tab, ++ int *len ++) ++{ ++ if(tab!=NULL) { ++ if (long_offsets) { ++ *tab = (TTF_GLYF *) (glyf_start + ntohl(long_loca_table[glyphno])); ++ } else { ++ *tab = (TTF_GLYF *) (glyf_start + (ntohs(short_loca_table[glyphno]) << 1)); ++ } ++ } ++ if(len!=NULL) { ++ if (long_offsets) { ++ *len = ntohl(long_loca_table[glyphno + 1]) - ntohl(long_loca_table[glyphno]); ++ } else { ++ *len = (ntohs(short_loca_table[glyphno + 1]) - ntohs(short_loca_table[glyphno])) << 1; ++ } ++ } ++} ++ ++static void ++handle_name(void) ++{ ++ int j, k, lang, len, platform; ++ char *p, *string_area; ++ char *nbp = name_buffer; ++ int found3 = 0; ++ ++ string_area = (char *) name_table + ntohs(name_table->offset); ++ name_record = &(name_table->nameRecords); ++ ++ for (j = 0; j < 8; j++) { ++ name_fields[j] = ""; ++ } ++ ++ for (j = 0; j < ntohs(name_table->numberOfNameRecords); j++) { ++ ++ platform = ntohs(name_record->platformID); ++ ++ if (platform == 3) { ++ ++ found3 = 1; ++ lang = ntohs(name_record->languageID) & 0xff; ++ len = ntohs(name_record->stringLength); ++ if (lang == 0 || lang == 9) { ++ k = ntohs(name_record->nameID); ++ if (k < 8) { ++ name_fields[k] = nbp; ++ ++ p = string_area + ntohs(name_record->stringOffset); ++ for (k = 0; k < len; k++) { ++ if (p[k] != '\0') { ++ if (p[k] == '(') { ++ *nbp = '['; ++ } else if (p[k] == ')') { ++ *nbp = ']'; ++ } else { ++ *nbp = p[k]; ++ } ++ nbp++; ++ } ++ } ++ *nbp = '\0'; ++ nbp++; ++ } ++ } ++ } ++ name_record++; ++ } ++ ++ string_area = (char *) name_table + ntohs(name_table->offset); ++ name_record = &(name_table->nameRecords); ++ ++ if (!found3) { ++ for (j = 0; j < ntohs(name_table->numberOfNameRecords); j++) { ++ ++ platform = ntohs(name_record->platformID); ++ ++ if (platform == 1) { ++ ++ found3 = 1; ++ lang = ntohs(name_record->languageID) & 0xff; ++ len = ntohs(name_record->stringLength); ++ if (lang == 0 || lang == 9) { ++ k = ntohs(name_record->nameID); ++ if (k < 8) { ++ name_fields[k] = nbp; ++ ++ p = string_area + ntohs(name_record->stringOffset); ++ for (k = 0; k < len; k++) { ++ if (p[k] != '\0') { ++ if (p[k] == '(') { ++ *nbp = '['; ++ } else if (p[k] == ')') { ++ *nbp = ']'; ++ } else { ++ *nbp = p[k]; ++ } ++ nbp++; ++ } ++ } ++ *nbp = '\0'; ++ nbp++; ++ } ++ } ++ } ++ name_record++; ++ } ++ } ++ if (!found3) { ++ fprintf(stderr, "**** Cannot decode font name fields ****\n"); ++ exit(1); ++ } ++ if (name_fields[4][0] == 0) { /* Full Name empty, use Family Name */ ++ name_fields[4] = name_fields[1]; ++ } ++ if (name_fields[6][0] == 0) { /* Font Name empty, use Full Name */ ++ name_fields[6] = name_fields[4]; ++ if (name_fields[6][0] == 0) { /* oops, empty again */ ++ WARNING_1 fprintf(stderr, "Font name is unknown, setting to \"Unknown\"\n"); ++ name_fields[6] = "Unknown"; ++ } ++ } ++ p = name_fields[6]; ++ /* must not start with a digit */ ++ if(isdigit(*p)) ++ *p+= 'A'-'0'; /* change to a letter */ ++ while (*p != '\0') { ++ if (!isalnum(*p) || *p=='_') { ++ *p = '-'; ++ } ++ p++; ++ } ++} ++ ++static void ++handle_head(void) ++{ ++ long_offsets = ntohs(head_table->indexToLocFormat); ++ if (long_offsets != 0 && long_offsets != 1) { ++ fprintf(stderr, "**** indexToLocFormat wrong ****\n"); ++ exit(1); ++ } ++} ++ ++/* limit the recursion level to avoid cycles */ ++#define MAX_COMPOSITE_LEVEL 20 ++ ++static void ++draw_composite_glyf( ++ GLYPH *g, ++ GLYPH *glyph_list, ++ int glyphno, ++ double *orgmatrix, ++ int level ++) ++{ ++ int len; ++ short ncontours; ++ USHORT flagbyte, glyphindex; ++ double arg1, arg2; ++ BYTE *ptr; ++ char *bptr; ++ SHORT *sptr; ++ double matrix[6], newmatrix[6]; ++ ++ get_glyf_table(glyphno, &glyf_table, &len); ++ ++ if(len<=0) /* nothing to do */ ++ return; ++ ++ ncontours = ntohs(glyf_table->numberOfContours); ++ if (ncontours >= 0) { /* simple case */ ++ draw_simple_glyf(g, glyph_list, glyphno, orgmatrix); ++ return; ++ } ++ ++ if(ISDBG(COMPOSITE) && level ==0) ++ fprintf(stderr, "* %s [ %.2f %.2f %.2f %.2f %.2f %.2f ]\n", g->name, ++ orgmatrix[0], orgmatrix[1], orgmatrix[2], orgmatrix[3], ++ orgmatrix[4], orgmatrix[5]); ++ ++ /* complex case */ ++ if(level >= MAX_COMPOSITE_LEVEL) { ++ WARNING_1 fprintf(stderr, ++ "*** Glyph %s: stopped (possibly infinite) recursion at depth %d\n", ++ g->name, level); ++ return; ++ } ++ ++ ptr = ((BYTE *) glyf_table + sizeof(TTF_GLYF)); ++ sptr = (SHORT *) ptr; ++ do { ++ flagbyte = ntohs(*sptr); ++ sptr++; ++ glyphindex = ntohs(*sptr); ++ sptr++; ++ ++ if (flagbyte & ARG_1_AND_2_ARE_WORDS) { ++ arg1 = (short)ntohs(*sptr); ++ sptr++; ++ arg2 = (short)ntohs(*sptr); ++ sptr++; ++ } else { ++ bptr = (char *) sptr; ++ arg1 = (signed char) bptr[0]; ++ arg2 = (signed char) bptr[1]; ++ sptr++; ++ } ++ matrix[1] = matrix[2] = 0.0; ++ ++ if (flagbyte & WE_HAVE_A_SCALE) { ++ matrix[0] = matrix[3] = f2dot14(*sptr); ++ sptr++; ++ } else if (flagbyte & WE_HAVE_AN_X_AND_Y_SCALE) { ++ matrix[0] = f2dot14(*sptr); ++ sptr++; ++ matrix[3] = f2dot14(*sptr); ++ sptr++; ++ } else if (flagbyte & WE_HAVE_A_TWO_BY_TWO) { ++ matrix[0] = f2dot14(*sptr); ++ sptr++; ++ matrix[2] = f2dot14(*sptr); ++ sptr++; ++ matrix[1] = f2dot14(*sptr); ++ sptr++; ++ matrix[3] = f2dot14(*sptr); ++ sptr++; ++ } else { ++ matrix[0] = matrix[3] = 1.0; ++ } ++ ++ /* ++ * See * ++ * http://fonts.apple.com/TTRefMan/RM06/Chap6g ++ * lyf.html * matrix[0,1,2,3,4,5]=a,b,c,d,m,n ++ */ ++ ++ if (fabs(matrix[0]) > fabs(matrix[1])) ++ matrix[4] = fabs(matrix[0]); ++ else ++ matrix[4] = fabs(matrix[1]); ++ if (fabs(fabs(matrix[0]) - fabs(matrix[2])) <= 33. / 65536.) ++ matrix[4] *= 2.0; ++ ++ if (fabs(matrix[2]) > fabs(matrix[3])) ++ matrix[5] = fabs(matrix[2]); ++ else ++ matrix[5] = fabs(matrix[3]); ++ if (fabs(fabs(matrix[2]) - fabs(matrix[3])) <= 33. / 65536.) ++ matrix[5] *= 2.0; ++ ++ /* ++ * fprintf (stderr,"Matrix Opp %hd ++ * %hd\n",arg1,arg2); ++ */ ++#if 0 ++ fprintf(stderr, "Matrix: %f %f %f %f %f %f\n", ++ matrix[0], matrix[1], matrix[2], matrix[3], ++ matrix[4], matrix[5]); ++ fprintf(stderr, "Offset: %f %f (%s)\n", ++ arg1, arg2, ++ ((flagbyte & ARGS_ARE_XY_VALUES) ? "XY" : "index")); ++#endif ++ ++ if (flagbyte & ARGS_ARE_XY_VALUES) { ++ matrix[4] *= arg1; ++ matrix[5] *= arg2; ++ } else { ++ WARNING_1 fprintf(stderr, ++ "*** Glyph %s: reusing scale from another glyph is unsupported\n", ++ g->name); ++ /* ++ * must extract values from a glyph ++ * but it seems to be too much pain ++ * and it's not clear now that it ++ * would be really used in any ++ * interesting font ++ */ ++ } ++ ++ /* at this point arg1,arg2 contain what logically should be matrix[4,5] */ ++ ++ /* combine matrices */ ++ ++ newmatrix[0] = orgmatrix[0]*matrix[0] + orgmatrix[2]*matrix[1]; ++ newmatrix[1] = orgmatrix[0]*matrix[2] + orgmatrix[2]*matrix[3]; ++ ++ newmatrix[2] = orgmatrix[1]*matrix[0] + orgmatrix[3]*matrix[1]; ++ newmatrix[3] = orgmatrix[1]*matrix[2] + orgmatrix[3]*matrix[3]; ++ ++ newmatrix[4] = orgmatrix[0]*matrix[4] + orgmatrix[2]*matrix[5] + orgmatrix[4]; ++ newmatrix[5] = orgmatrix[1]*matrix[4] + orgmatrix[3]*matrix[5] + orgmatrix[5]; ++ ++ if(ISDBG(COMPOSITE)) { ++ fprintf(stderr, "%*c+-> %2d %s [ %.2f %.2f %.2f %.2f %.2f %.2f ]\n", ++ level+1, ' ', level, glyph_list[glyphindex].name, ++ matrix[0], matrix[1], matrix[2], matrix[3], ++ matrix[4], matrix[5]); ++ fprintf(stderr, "%*c = [ %.2f %.2f %.2f %.2f %.2f %.2f ]\n", ++ level+1, ' ', ++ newmatrix[0], newmatrix[1], newmatrix[2], newmatrix[3], ++ newmatrix[4], newmatrix[5]); ++ } ++ draw_composite_glyf(g, glyph_list, glyphindex, newmatrix, level+1); ++ ++ } while (flagbyte & MORE_COMPONENTS); ++} ++ ++static void ++draw_simple_glyf( ++ GLYPH *g, ++ GLYPH *glyph_list, ++ int glyphno, ++ double *matrix ++) ++{ ++ int i, j, k, k1, len, first, cs, ce; ++ /* We assume that hsbw always sets to(0, 0) */ ++ double xlast = 0, ylast = 0; ++ int finished, nguide, contour_start, contour_end; ++ short ncontours, n_inst, last_point; ++ USHORT *contour_end_pt; ++ BYTE *ptr; ++#define GLYFSZ 2000 ++ short xabs[GLYFSZ], yabs[GLYFSZ], xrel[GLYFSZ], yrel[GLYFSZ]; ++ double xcoord[GLYFSZ], ycoord[GLYFSZ]; ++ BYTE flags[GLYFSZ]; ++ double tx, ty; ++ int needreverse = 0; /* transformation may require ++ * that */ ++ GENTRY *lge; ++ ++ lge = g->lastentry; ++ ++ get_glyf_table(glyphno, &glyf_table, &len); ++ ++ if (len <= 0) { ++ WARNING_1 fprintf(stderr, ++ "**** Composite glyph %s refers to non-existent glyph %s, ignored\n", ++ g->name, ++ glyph_list[glyphno].name); ++ return; ++ } ++ ncontours = ntohs(glyf_table->numberOfContours); ++ if (ncontours < 0) { ++ WARNING_1 fprintf(stderr, ++ "**** Composite glyph %s refers to composite glyph %s, ignored\n", ++ g->name, ++ glyph_list[glyphno].name); ++ return; ++ } ++ contour_end_pt = (USHORT *) ((char *) glyf_table + sizeof(TTF_GLYF)); ++ ++ last_point = ntohs(contour_end_pt[ncontours - 1]); ++ n_inst = ntohs(contour_end_pt[ncontours]); ++ ++ ptr = ((BYTE *) contour_end_pt) + (ncontours << 1) + n_inst + 2; ++ j = k = 0; ++ while (k <= last_point) { ++ flags[k] = ptr[j]; ++ ++ if (ptr[j] & REPEAT) { ++ for (k1 = 0; k1 < ptr[j + 1]; k1++) { ++ k++; ++ flags[k] = ptr[j]; ++ } ++ j++; ++ } ++ j++; ++ k++; ++ } ++ ++ for (k = 0; k <= last_point; k++) { ++ if (flags[k] & XSHORT) { ++ if (flags[k] & XSAME) { ++ xrel[k] = ptr[j]; ++ } else { ++ xrel[k] = -ptr[j]; ++ } ++ j++; ++ } else if (flags[k] & XSAME) { ++ xrel[k] = 0.0; ++ } else { ++ xrel[k] = (short)( ptr[j] * 256 + ptr[j + 1] ); ++ j += 2; ++ } ++ if (k == 0) { ++ xabs[k] = xrel[k]; ++ } else { ++ xabs[k] = xrel[k] + xabs[k - 1]; ++ } ++ ++ } ++ ++ for (k = 0; k <= last_point; k++) { ++ if (flags[k] & YSHORT) { ++ if (flags[k] & YSAME) { ++ yrel[k] = ptr[j]; ++ } else { ++ yrel[k] = -ptr[j]; ++ } ++ j++; ++ } else if (flags[k] & YSAME) { ++ yrel[k] = 0; ++ } else { ++ yrel[k] = ptr[j] * 256 + ptr[j + 1]; ++ j += 2; ++ } ++ if (k == 0) { ++ yabs[k] = yrel[k]; ++ } else { ++ yabs[k] = yrel[k] + yabs[k - 1]; ++ } ++ } ++ ++ if (matrix) { ++ for (i = 0; i <= last_point; i++) { ++ tx = xabs[i]; ++ ty = yabs[i]; ++ xcoord[i] = fscale(matrix[0] * tx + matrix[2] * ty + matrix[4]); ++ ycoord[i] = fscale(matrix[1] * tx + matrix[3] * ty + matrix[5]); ++ } ++ } else { ++ for (i = 0; i <= last_point; i++) { ++ xcoord[i] = fscale(xabs[i]); ++ ycoord[i] = fscale(yabs[i]); ++ } ++ } ++ ++ i = j = 0; ++ first = 1; ++ ++ while (i <= ntohs(contour_end_pt[ncontours - 1])) { ++ contour_end = ntohs(contour_end_pt[j]); ++ ++ if (first) { ++ fg_rmoveto(g, xcoord[i], ycoord[i]); ++ xlast = xcoord[i]; ++ ylast = ycoord[i]; ++ contour_start = i; ++ first = 0; ++ } else if (flags[i] & ONOROFF) { ++ fg_rlineto(g, xcoord[i], ycoord[i]); ++ xlast = xcoord[i]; ++ ylast = ycoord[i]; ++ } else { ++ cs = i - 1; ++ finished = nguide = 0; ++ while (!finished) { ++ if (i == contour_end + 1) { ++ ce = contour_start; ++ finished = 1; ++ } else if (flags[i] & ONOROFF) { ++ ce = i; ++ finished = 1; ++ } else { ++ i++; ++ nguide++; ++ } ++ } ++ ++ switch (nguide) { ++ case 0: ++ fg_rlineto(g, xcoord[ce], ycoord[ce]); ++ xlast = xcoord[ce]; ++ ylast = ycoord[ce]; ++ break; ++ ++ case 1: ++ fg_rrcurveto(g, ++ (xcoord[cs] + 2.0 * xcoord[cs + 1]) / 3.0, ++ (ycoord[cs] + 2.0 * ycoord[cs + 1]) / 3.0, ++ (2.0 * xcoord[cs + 1] + xcoord[ce]) / 3.0, ++ (2.0 * ycoord[cs + 1] + ycoord[ce]) / 3.0, ++ xcoord[ce], ++ ycoord[ce] ++ ); ++ xlast = xcoord[ce]; ++ ylast = ycoord[ce]; ++ ++ break; ++ ++ case 2: ++ fg_rrcurveto(g, ++ (-xcoord[cs] + 4.0 * xcoord[cs + 1]) / 3.0, ++ (-ycoord[cs] + 4.0 * ycoord[cs + 1]) / 3.0, ++ (4.0 * xcoord[cs + 2] - xcoord[ce]) / 3.0, ++ (4.0 * ycoord[cs + 2] - ycoord[ce]) / 3.0, ++ xcoord[ce], ++ ycoord[ce] ++ ); ++ xlast = xcoord[ce]; ++ ylast = ycoord[ce]; ++ break; ++ ++ case 3: ++ fg_rrcurveto(g, ++ (xcoord[cs] + 2.0 * xcoord[cs + 1]) / 3.0, ++ (ycoord[cs] + 2.0 * ycoord[cs + 1]) / 3.0, ++ (5.0 * xcoord[cs + 1] + xcoord[cs + 2]) / 6.0, ++ (5.0 * ycoord[cs + 1] + ycoord[cs + 2]) / 6.0, ++ (xcoord[cs + 1] + xcoord[cs + 2]) / 2.0, ++ (ycoord[cs + 1] + ycoord[cs + 2]) / 2.0 ++ ); ++ ++ fg_rrcurveto(g, ++ (xcoord[cs + 1] + 5.0 * xcoord[cs + 2]) / 6.0, ++ (ycoord[cs + 1] + 5.0 * ycoord[cs + 2]) / 6.0, ++ (5.0 * xcoord[cs + 2] + xcoord[cs + 3]) / 6.0, ++ (5.0 * ycoord[cs + 2] + ycoord[cs + 3]) / 6.0, ++ (xcoord[cs + 3] + xcoord[cs + 2]) / 2.0, ++ (ycoord[cs + 3] + ycoord[cs + 2]) / 2.0 ++ ); ++ ++ fg_rrcurveto(g, ++ (xcoord[cs + 2] + 5.0 * xcoord[cs + 3]) / 6.0, ++ (ycoord[cs + 2] + 5.0 * ycoord[cs + 3]) / 6.0, ++ (2.0 * xcoord[cs + 3] + xcoord[ce]) / 3.0, ++ (2.0 * ycoord[cs + 3] + ycoord[ce]) / 3.0, ++ xcoord[ce], ++ ycoord[ce] ++ ); ++ ylast = ycoord[ce]; ++ xlast = xcoord[ce]; ++ ++ break; ++ ++ default: ++ k1 = cs + nguide; ++ fg_rrcurveto(g, ++ (xcoord[cs] + 2.0 * xcoord[cs + 1]) / 3.0, ++ (ycoord[cs] + 2.0 * ycoord[cs + 1]) / 3.0, ++ (5.0 * xcoord[cs + 1] + xcoord[cs + 2]) / 6.0, ++ (5.0 * ycoord[cs + 1] + ycoord[cs + 2]) / 6.0, ++ (xcoord[cs + 1] + xcoord[cs + 2]) / 2.0, ++ (ycoord[cs + 1] + ycoord[cs + 2]) / 2.0 ++ ); ++ ++ for (k = cs + 2; k <= k1 - 1; k++) { ++ fg_rrcurveto(g, ++ (xcoord[k - 1] + 5.0 * xcoord[k]) / 6.0, ++ (ycoord[k - 1] + 5.0 * ycoord[k]) / 6.0, ++ (5.0 * xcoord[k] + xcoord[k + 1]) / 6.0, ++ (5.0 * ycoord[k] + ycoord[k + 1]) / 6.0, ++ (xcoord[k] + xcoord[k + 1]) / 2.0, ++ (ycoord[k] + ycoord[k + 1]) / 2.0 ++ ); ++ ++ } ++ ++ fg_rrcurveto(g, ++ (xcoord[k1 - 1] + 5.0 * xcoord[k1]) / 6.0, ++ (ycoord[k1 - 1] + 5.0 * ycoord[k1]) / 6.0, ++ (2.0 * xcoord[k1] + xcoord[ce]) / 3.0, ++ (2.0 * ycoord[k1] + ycoord[ce]) / 3.0, ++ xcoord[ce], ++ ycoord[ce] ++ ); ++ xlast = xcoord[ce]; ++ ylast = ycoord[ce]; ++ ++ break; ++ } ++ } ++ if (i >= contour_end) { ++ g_closepath(g); ++ first = 1; ++ i = contour_end + 1; ++ j++; ++ } else { ++ i++; ++ } ++ } ++ ++ if (matrix) { ++ /* guess whether do we need to reverse the results */ ++ ++ double x[3], y[3]; ++ int max = 0, from, to; ++ ++ /* transform a triangle going in proper direction */ ++ /* ++ * the origin of triangle is in (0,0) so we know it in ++ * advance ++ */ ++ ++ x[0] = y[0] = 0; ++ x[1] = matrix[0] * 0 + matrix[2] * 300; ++ y[1] = matrix[1] * 0 + matrix[3] * 300; ++ x[2] = matrix[0] * 300 + matrix[2] * 0; ++ y[2] = matrix[1] * 300 + matrix[3] * 0; ++ ++ /* then find the topmost point */ ++ for (i = 0; i < 3; i++) ++ if (y[i] > y[max]) ++ max = i; ++ from = (max + 3 - 1) % 3; ++ to = (max + 1) % 3; ++ ++ needreverse = 0; ++ ++ /* special cases for horizontal lines */ ++ if (y[max] == y[from]) { ++ if (x[max] < y[from]) ++ needreverse = 1; ++ } else if (y[to] == y[from]) { ++ if (x[to] < x[max]) ++ needreverse = 1; ++ } else { /* generic case */ ++ if ((x[to] - x[max]) * (y[max] - y[from]) ++ > (x[max] - x[from]) * (y[to] - y[max])) ++ needreverse = 1; ++ } ++ ++ if (needreverse) { ++ if (lge) { ++ assertpath(lge->next, __FILE__, __LINE__, g->name); ++ reversepathsfromto(lge->next, NULL); ++ } else { ++ assertpath(g->entries, __FILE__, __LINE__, g->name); ++ reversepaths(g); ++ } ++ } ++ } ++} ++ ++static double ++f2dot14( ++ short x ++) ++{ ++ short y = ntohs(x); ++ return (y >> 14) + ((y & 0x3fff) / 16384.0); ++} ++ ++ ++/* check that the pointer points within the file */ ++/* returns 0 if pointer is good, 1 if bad */ ++static int ++badpointer( ++ void *ptr ++) ++{ ++ return (ptr < (void *)filebuffer || ptr >= (void *)filebuffer_end); ++} ++ ++/* ++ * Externally accessible methods ++ */ ++ ++/* ++ * Open font and prepare to return information to the main driver. ++ * May print error and warning messages. ++ * Exit on error. ++ */ ++ ++static void ++openfont( ++ char *fname, ++ char *arg /* unused now */ ++) ++{ ++ int i, j; ++ struct stat statbuf; ++ static struct { ++ void **tbpp; /* pointer to pointer to the table */ ++ char name[5]; /* table name */ ++ char optional; /* flag: table may be missing */ ++ } tables[] = { ++ { (void **)&name_table, "name", 0 }, ++ { (void **)&head_table, "head", 0 }, ++ { (void **)&hhea_table, "hhea", 0 }, ++ { (void **)&post_table, "post", 0 }, ++ { (void **)&glyf_start, "glyf", 0 }, ++ { (void **)&cmap_table, "cmap", 0 }, ++ { (void **)&kern_table, "kern", 1 }, ++ { (void **)&maxp_table, "maxp", 0 }, ++ { (void **)&hmtx_table, "hmtx", 0 }, ++ { (void **)&long_loca_table, "loca", 0 }, ++ { NULL, "", 0 } /* end of table */ ++ }; ++ ++ if (stat(fname, &statbuf) == -1) { ++ fprintf(stderr, "**** Cannot access %s ****\n", fname); ++ exit(1); ++ } ++ if ((filebuffer = malloc(statbuf.st_size)) == NULL) { ++ fprintf(stderr, "**** Cannot malloc space for file ****\n"); ++ exit(1); ++ } ++ ++ filebuffer_end = filebuffer + statbuf.st_size; ++ ++ if ((ttf_file = fopen(fname, "rb")) == NULL) { ++ fprintf(stderr, "**** Cannot open file '%s'\n", fname); ++ exit(1); ++ } else { ++ WARNING_2 fprintf(stderr, "Processing file %s\n", fname); ++ } ++ ++ if (fread(filebuffer, 1, statbuf.st_size, ttf_file) != statbuf.st_size) { ++ fprintf(stderr, "**** Could not read whole file \n"); ++ exit(1); ++ } ++ fclose(ttf_file); ++ ++ directory = (TTF_DIRECTORY *) filebuffer; ++ ++ if (ntohl(directory->sfntVersion) != 0x00010000) { ++ fprintf(stderr, ++ "**** Unknown File Version number [%x], or not a TrueType file\n", ++ directory->sfntVersion); ++ exit(1); ++ } ++ ++ /* clear the tables */ ++ for(j=0; tables[j].tbpp != NULL; j++) ++ *(tables[j].tbpp) = NULL; ++ ++ dir_entry = &(directory->list); ++ ++ for (i = 0; i < ntohs(directory->numTables); i++) { ++ ++ for(j=0; tables[j].tbpp != NULL; j++) ++ if (memcmp(dir_entry->tag, tables[j].name, 4) == 0) { ++ *(tables[j].tbpp) = (void *) (filebuffer + ntohl(dir_entry->offset)); ++ break; ++ } ++ ++ if (memcmp(dir_entry->tag, "EBDT", 4) == 0 || ++ memcmp(dir_entry->tag, "EBLC", 4) == 0 || ++ memcmp(dir_entry->tag, "EBSC", 4) == 0) { ++ WARNING_1 fprintf(stderr, "Font contains bitmaps\n"); ++ } ++ dir_entry++; ++ } ++ ++ for(j=0; tables[j].tbpp != NULL; j++) ++ if(!tables[j].optional && badpointer( *(tables[j].tbpp) )) { ++ fprintf(stderr, "**** File contains no required table '%s'\n", tables[j].name); ++ exit(1); ++ } ++ ++ handle_name(); ++ ++ handle_head(); ++ ++ ttf_nglyphs = ntohs(maxp_table->numGlyphs); ++ ++ enc_found_ms = enc_found_mac = 0; ++} ++ ++/* ++ * Close font. ++ * Exit on error. ++ */ ++ ++static void ++closefont( ++ void ++) ++{ ++ return; /* empty operation */ ++} ++ ++/* ++ * Get the number of glyphs in font. ++ */ ++ ++static int ++getnglyphs ( ++ void ++) ++{ ++ return ttf_nglyphs; ++} ++ ++/* ++ * Get the names of the glyphs. ++ * Returns 0 if the names were assigned, non-zero if the font ++ * provides no glyph names. ++ */ ++ ++static int ++glnames( ++ GLYPH *glyph_list ++) ++{ ++ int i, len, n, npost; ++ unsigned int format; ++ USHORT *name_index; ++ char *ptr, *p; ++ char **ps_name_ptr = (char **) malloc(ttf_nglyphs * sizeof(char *)); ++ int n_ps_names; ++ int ps_fmt_3 = 0; ++ ++ format = ntohl(post_table->formatType); ++ ++ if (format == 0x00010000) { ++ for (i = 0; i < 258 && i < ttf_nglyphs; i++) { ++ glyph_list[i].name = mac_glyph_names[i]; ++ } ++ } else if (format == 0x00020000) { ++ npost = ntohs(post_table->numGlyphs); ++ if (ttf_nglyphs != npost) { ++ /* This is an error in the font, but we can now cope */ ++ WARNING_1 fprintf(stderr, "**** Postscript table size mismatch %d/%d ****\n", ++ npost, ttf_nglyphs); ++ } ++ n_ps_names = 0; ++ name_index = &(post_table->glyphNameIndex); ++ ++ /* This checks the integrity of the post table */ ++ for (i=0; i n_ps_names + 257) { ++ n_ps_names = n - 257; ++ } ++ } ++ ++ ptr = (char *) post_table + 34 + (ttf_nglyphs << 1); ++ i = 0; ++ while (*ptr > 0 && i < n_ps_names) { ++ len = *ptr; ++ /* previously the program wrote nulls into the table. If the table ++ was corrupt, this could put zeroes anywhere, leading to obscure bugs, ++ so now I malloc space for the names. Yes it is much less efficient */ ++ ++ if ((p = malloc(len+1)) == NULL) { ++ fprintf (stderr, "****malloc failed %s line %d\n", __FILE__, __LINE__); ++ exit(255); ++ } ++ ++ ps_name_ptr[i] = p; ++ strncpy(p, ptr+1, len); ++ p[len] = '\0'; ++ i ++; ++ ptr += len + 1; ++ } ++ ++ if (i != n_ps_names) ++ { ++ WARNING_2 fprintf (stderr, "** Postscript Name mismatch %d != %d **\n", ++ i, n_ps_names); ++ n_ps_names = i; ++ } ++ ++ /* ++ * for (i=0; inumGlyphs); ++ for (i = 0; i < ttf_nglyphs; i++) { ++ glyph_list[i].name = mac_glyph_names[i + ptr[i]]; ++ } ++ } else { ++ fprintf(stderr, ++ "**** Postscript table in wrong format %x ****\n", ++ format); ++ exit(1); ++ } ++ ++ return ps_fmt_3; ++} ++ ++/* ++ * Get the metrics of the glyphs. ++ */ ++ ++static void ++glmetrics( ++ GLYPH *glyph_list ++) ++{ ++ int i; ++ int n_hmetrics = ntohs(hhea_table->numberOfHMetrics); ++ GLYPH *g; ++ LONGHORMETRIC *hmtx_entry = hmtx_table; ++ FWORD *lsblist; ++ ++ for (i = 0; i < n_hmetrics; i++) { ++ g = &(glyph_list[i]); ++ g->width = ntohs(hmtx_entry->advanceWidth); ++ g->lsb = ntohs(hmtx_entry->lsb); ++ hmtx_entry++; ++ } ++ ++ lsblist = (FWORD *) hmtx_entry; ++ hmtx_entry--; ++ ++ for (i = n_hmetrics; i < ttf_nglyphs; i++) { ++ g = &(glyph_list[i]); ++ g->width = ntohs(hmtx_entry->advanceWidth); ++ g->lsb = ntohs(lsblist[i - n_hmetrics]); ++ } ++ ++ for (i = 0; i < ttf_nglyphs; i++) { ++ g = &(glyph_list[i]); ++ get_glyf_table(i, &glyf_table, &g->ttf_pathlen); ++ ++ g->xMin = (short)ntohs(glyf_table->xMin); ++ g->xMax = (short)ntohs(glyf_table->xMax); ++ g->yMin = (short)ntohs(glyf_table->yMin); ++ g->yMax = (short)ntohs(glyf_table->yMax); ++ } ++ ++} ++ ++ ++static void ++handle_ms_encoding( ++ GLYPH *glyph_list, ++ int *encoding, ++ int *unimap ++) ++{ ++ int j, k, kk, set_ok; ++ USHORT start, end, ro; ++ short delta, n; ++ ++ for (j = 0; j < cmap_n_segs - 1; j++) { ++ start = ntohs(cmap_seg_start[j]); ++ end = ntohs(cmap_seg_end[j]); ++ delta = ntohs(cmap_idDelta[j]); ++ ro = ntohs(cmap_idRangeOffset[j]); ++ ++ for (k = start; k <= end; k++) { ++ if (ro == 0) { ++ n = k + delta; ++ } else { ++ n = ntohs(*((ro >> 1) + (k - start) + ++ &(cmap_idRangeOffset[j]))); ++ if (delta != 0) ++ { ++ /* Not exactly sure how to deal with this circumstance, ++ I suspect it never occurs */ ++ n += delta; ++ fprintf (stderr, ++ "rangeoffset and delta both non-zero - %d/%d", ++ ro, delta); ++ } ++ } ++ if(n<0 || n>=ttf_nglyphs) { ++ WARNING_1 fprintf(stderr, "Font contains a broken glyph code mapping, ignored\n"); ++ continue; ++ } ++ if (glyph_list[n].orig_code != -1) { ++#if 0 ++ if (strcmp(glyph_list[n].name, ".notdef") != 0) { ++ WARNING_2 fprintf(stderr, ++ "Glyph %s has >= two encodings (A), %4.4x & %4.4x\n", ++ glyph_list[n].name, ++ glyph_list[n].orig_code, ++ k); ++ } ++#endif ++ set_ok = 0; ++ } else { ++ set_ok = 1; ++ } ++ if (enc_type==1 || forcemap) { ++ kk = unicode_rev_lookup(k); ++ if(ISDBG(UNICODE)) ++ fprintf(stderr, "Unicode %s - 0x%04x\n",glyph_list[n].name,k); ++ if (set_ok) { ++ glyph_list[n].orig_code = k; ++ /* glyph_list[n].char_no = kk; */ ++ } ++ if (kk >= 0 && kk < ENCTABSZ && encoding[kk] == -1) ++ encoding[kk] = n; ++ } else { ++ if ((k & 0xff00) == 0xf000) { ++ if( encoding[k & 0x00ff] == -1 ) { ++ encoding[k & 0x00ff] = n; ++ if (set_ok) { ++ /* glyph_list[n].char_no = k & 0x00ff; */ ++ glyph_list[n].orig_code = k; ++ } ++ } ++ } else { ++ if (set_ok) { ++ /* glyph_list[n].char_no = k; */ ++ glyph_list[n].orig_code = k; ++ } ++ WARNING_2 fprintf(stderr, ++ "Glyph %s has non-symbol encoding %4.4x\n", ++ glyph_list[n].name, ++ k & 0xffff); ++ /* ++ * just use the code ++ * as it is ++ */ ++ if ((k & ~0xff) == 0 && encoding[k] == -1 ) ++ encoding[k] = n; ++ } ++ } ++ } ++ } ++} ++ ++static void ++handle_mac_encoding( ++ GLYPH *glyph_list, ++ int *encoding, ++ int *unimap ++) ++{ ++ short n; ++ int j, size; ++ ++ size = ntohs(encoding0->length) - 6; ++ for (j = 0; j < size; j++) { ++ n = encoding0->glyphIdArray[j]; ++ if (glyph_list[n].char_no != -1) { ++ WARNING_2 fprintf(stderr, ++ "Glyph %s has >= two encodings (B), %4.4x & %4.4x\n", ++ glyph_list[n].name, ++ glyph_list[n].char_no, ++ j); ++ } else { ++ if (j < ENCTABSZ) { ++ if(encoding[j] == -1) { ++ glyph_list[n].char_no = j; ++ encoding[j] = n; ++ } ++ } ++ } ++ } ++} ++ ++/* ++ * Get the original encoding of the font. ++ * Returns 1 for if the original encoding is Unicode, 2 if the ++ * original encoding is other 16-bit, 0 if 8-bit. ++ */ ++ ++static int ++glenc( ++ GLYPH *glyph_list, ++ int *encoding, ++ int *unimap ++) ++{ ++ int num_tables = ntohs(cmap_table->numberOfEncodingTables); ++ BYTE *ptr; ++ int i, format, offset, seg_c2, found; ++ int platform, encoding_id; ++ TTF_CMAP_ENTRY *table_entry; ++ TTF_CMAP_FMT4 *encoding4; ++ ++ if(enc_found_ms) { ++ handle_ms_encoding(glyph_list, encoding, unimap); ++ return enc_type; ++ } else if(enc_found_mac) { ++ handle_mac_encoding(glyph_list, encoding, unimap); ++ return 0; ++ } ++ ++ if(force_pid != -1 && force_pid != 3) { ++ fputs("*** Only platform ID == 3 is supported\n", stderr); ++ exit(1); ++ } ++ ++ enc_type = 0; ++ found = 0; ++ ++ for (i = 0; i < num_tables && !found; i++) { ++ table_entry = &(cmap_table->encodingTable[i]); ++ offset = ntohl(table_entry->offset); ++ encoding4 = (TTF_CMAP_FMT4 *) ((BYTE *) cmap_table + offset); ++ format = ntohs(encoding4->format); ++ platform = ntohs(table_entry->platformID); ++ encoding_id = ntohs(table_entry->encodingID); ++ ++ if (platform == 3 && format == 4) { ++ if(force_pid == 3) { ++ if(encoding_id != force_eid) ++ continue; ++ WARNING_1 fprintf(stderr, "Found Encoding PID=%d/EID=%d\n", ++ force_pid, force_eid); ++ enc_type = 1; ++ } else { ++ switch (encoding_id) { ++ case 0: ++ WARNING_1 fputs("Found Symbol Encoding\n", stderr); ++ break; ++ case 1: ++ WARNING_1 fputs("Found Unicode Encoding\n", stderr); ++ enc_type = 1; ++ break; ++ default: ++ WARNING_1 { ++ fprintf(stderr, ++ "****MS Encoding ID %d not supported****\n", ++ encoding_id); ++ fputs("Treating it like Symbol encoding\n", stderr); ++ } ++ break; ++ } ++ } ++ ++ found = 1; ++ seg_c2 = ntohs(encoding4->segCountX2); ++ cmap_n_segs = seg_c2 >> 1; ++ ptr = (BYTE *) encoding4 + 14; ++ cmap_seg_end = (USHORT *) ptr; ++ cmap_seg_start = (USHORT *) (ptr + seg_c2 + 2); ++ cmap_idDelta = (short *) (ptr + (seg_c2 * 2) + 2); ++ cmap_idRangeOffset = (short *) (ptr + (seg_c2 * 3) + 2); ++ enc_found_ms = 1; ++ ++ handle_ms_encoding(glyph_list, encoding, unimap); ++ } ++ } ++ ++ if (!found) { ++ if(force_pid != -1) { ++ fprintf(stderr, "*** TTF encoding table PID=%d/EID=%d not found\n", ++ force_pid, force_eid); ++ exit(1); ++ } ++ ++ WARNING_1 fputs("No Microsoft encoding, looking for MAC encoding\n", stderr); ++ for (i = 0; i < num_tables && !found; i++) { ++ table_entry = &(cmap_table->encodingTable[i]); ++ offset = ntohl(table_entry->offset); ++ encoding0 = (TTF_CMAP_FMT0 *) ((BYTE *) cmap_table + offset); ++ format = ntohs(encoding0->format); ++ platform = ntohs(table_entry->platformID); ++ encoding_id = ntohs(table_entry->encodingID); ++ ++ if (format == 0) { ++ found = 1; ++ enc_found_mac = 1; ++ ++ handle_mac_encoding(glyph_list, encoding, unimap); ++ } ++ } ++ } ++ if (!found) { ++ fprintf(stderr, "**** No Recognised Encoding Table ****\n"); ++ exit(1); ++ } ++ ++ return enc_type; ++} ++ ++/* ++ * Get the font metrics ++ */ ++static void ++fnmetrics( ++ struct font_metrics *fm ++) ++{ ++ char *str; ++ static int fieldstocheck[]= {2,4,6}; ++ int i, j, len; ++ ++ fm->italic_angle = (short) (ntohs(post_table->italicAngle.upper)) + ++ ((short) ntohs(post_table->italicAngle.lower) / 65536.0); ++ fm->underline_position = (short) ntohs(post_table->underlinePosition); ++ fm->underline_thickness = (short) ntohs(post_table->underlineThickness); ++ fm->is_fixed_pitch = ntohl(post_table->isFixedPitch); ++ ++ fm->ascender = (short)ntohs(hhea_table->ascender); ++ fm->descender = (short)ntohs(hhea_table->descender); ++ ++ fm->units_per_em = ntohs(head_table->unitsPerEm); ++ ++ fm->bbox[0] = (short) ntohs(head_table->xMin); ++ fm->bbox[1] = (short) ntohs(head_table->yMin); ++ fm->bbox[2] = (short) ntohs(head_table->xMax); ++ fm->bbox[3] = (short) ntohs(head_table->yMax); ++ ++ fm->name_copyright = name_fields[0]; ++ fm->name_family = name_fields[1]; ++ fm->name_style = name_fields[2]; ++ fm->name_full = name_fields[4]; ++ fm->name_version = name_fields[5]; ++ fm->name_ps = name_fields[6]; ++ ++ /* guess the boldness from the font names */ ++ fm->force_bold=0; ++ ++ for(i=0; !fm->force_bold && i= len || !islower(str[j+4])) ++ ) { ++ fm->force_bold=1; ++ break; ++ } ++ } ++ } ++} ++ ++/* ++ * Get the path of contrours for a glyph. ++ */ ++ ++static void ++glpath( ++ int glyphno, ++ GLYPH *glyf_list ++) ++{ ++ double matrix[6]; ++ GLYPH *g; ++ ++ g = &glyph_list[glyphno]; ++ ++ matrix[0] = matrix[3] = 1.0; ++ matrix[1] = matrix[2] = matrix[4] = matrix[5] = 0.0; ++ draw_composite_glyf(g, glyf_list, glyphno, matrix, 0 /*level*/); ++} ++ ++/* ++ * Get the kerning data. ++ */ ++ ++static void ++kerning( ++ GLYPH *glyph_list ++) ++{ ++ TTF_KERN_SUB *subtable; ++ TTF_KERN_ENTRY *kern_entry; ++ int i, j; ++ int ntables; ++ int npairs; ++ char *ptr; ++ ++ if(kern_table == NULL) { ++ WARNING_1 fputs("No Kerning data\n", stderr); ++ return; ++ } ++ if(badpointer(kern_table)) { ++ fputs("**** Defective Kerning table, ignored\n", stderr); ++ return; ++ } ++ ++ ntables = ntohs(kern_table->nTables); ++ ptr = (char *) kern_table + 4; ++ ++ for (i = 0; i < ntables; i++) { ++ subtable = (TTF_KERN_SUB *) ptr; ++ if ((ntohs(subtable->coverage) & 0xff00) == 0) { ++ npairs = (short) ntohs(subtable->nPairs); ++ kern_entry = (TTF_KERN_ENTRY *) (ptr + sizeof(TTF_KERN_SUB)); ++ ++ kern_entry = (TTF_KERN_ENTRY *) (ptr + sizeof(TTF_KERN_SUB)); ++ for (j = 0; j < npairs; j++) { ++ if( kern_entry->value != 0) ++ addkernpair(ntohs(kern_entry->left), ++ ntohs(kern_entry->right), (short)ntohs(kern_entry->value)); ++ kern_entry++; ++ } ++ } ++ ptr += subtable->length; ++ } ++} ++ +diff -ruN xserver-old/hw/xprint/extras/ttf2pt1/ttf.h xserver/hw/xprint/extras/ttf2pt1/ttf.h +--- xserver-old/hw/xprint/extras/ttf2pt1/ttf.h 1970-01-01 10:00:00.000000000 +1000 ++++ xserver/hw/xprint/extras/ttf2pt1/ttf.h 2006-06-27 13:10:26.000000000 +1000 +@@ -0,0 +1,183 @@ ++/* ++ * see COPYRIGHT ++ */ ++ ++/* these definitions are mostly taken from Microsoft's True Type ++ documentation. ++*/ ++ ++#ifdef XP_PSTEXT ++typedef unsigned char BYTE; ++typedef signed char CHAR; ++typedef unsigned short USHORT; ++typedef signed short SHORT; ++typedef unsigned int ULONG; ++typedef signed int LONG; ++typedef SHORT FWORD; ++typedef USHORT UFWORD; ++#else ++#define BYTE unsigned char ++#define CHAR signed char ++#define USHORT unsigned short ++#define SHORT signed short ++#define ULONG unsigned int ++#define LONG signed int ++#define FWORD SHORT ++#define UFWORD USHORT ++#endif /* XP_PSTEXT */ ++ ++#define ONOROFF 0x01 ++#define XSHORT 0x02 ++#define YSHORT 0x04 ++#define REPEAT 0x08 ++#define XSAME 0x10 ++#define YSAME 0x20 ++ ++#define ARG_1_AND_2_ARE_WORDS 0x0001 ++#define ARGS_ARE_XY_VALUES 0x0002 ++#define XY_BOUND_TO_GRID 0x0004 ++#define WE_HAVE_A_SCALE 0x0008 ++#define MORE_COMPONENTS 0x0020 ++#define WE_HAVE_AN_X_AND_Y_SCALE 0x0040 ++#define WE_HAVE_A_TWO_BY_TWO 0x0080 ++#define WE_HAVE_INSTRUCTIONS 0x0100 ++#define USE_MY_METRICS 0x0200 ++ ++typedef struct short_2 { ++ SHORT upper; ++ USHORT lower; ++} FIXED ; ++ ++typedef struct longhormetric { ++ UFWORD advanceWidth; ++ FWORD lsb; ++} LONGHORMETRIC; ++ ++typedef struct ttf_hhea { ++ BYTE version[4]; ++ SHORT ascender, descender, lineGap; ++ USHORT advnaceWidthMax; ++ SHORT minLSB, minRSB, xMaxExtent; ++ SHORT caretSlopeRise, caretSlopeRun; ++ SHORT reserved[5]; ++ SHORT metricDataFormat; ++ USHORT numberOfHMetrics; ++} TTF_HHEA; ++ ++typedef struct ttf_dir_entry { ++ char tag[4]; ++ ULONG checksum; ++ ULONG offset; ++ ULONG length; ++} TTF_DIR_ENTRY ; ++ ++typedef struct ttf_directory { ++ ULONG sfntVersion; ++ USHORT numTables; ++ USHORT searchRange; ++ USHORT entrySelector; ++ USHORT rangeShift; ++ TTF_DIR_ENTRY list; ++} TTF_DIRECTORY ; ++ ++typedef struct ttf_name_rec { ++ USHORT platformID; ++ USHORT encodingID; ++ USHORT languageID; ++ USHORT nameID; ++ USHORT stringLength; ++ USHORT stringOffset; ++} TTF_NAME_REC; ++ ++typedef struct ttf_name { ++ USHORT format; ++ USHORT numberOfNameRecords; ++ USHORT offset; ++ TTF_NAME_REC nameRecords; ++} TTF_NAME ; ++ ++typedef struct ttf_head { ++ ULONG version; ++ ULONG fontRevision; ++ ULONG checksumAdjust; ++ ULONG magicNo; ++ USHORT flags; ++ USHORT unitsPerEm; ++ BYTE created[8]; ++ BYTE modified[8]; ++ FWORD xMin, yMin, xMax, yMax; ++ USHORT macStyle, lowestRecPPEM; ++ SHORT fontDirection, indexToLocFormat, glyphDataFormat; ++} TTF_HEAD ; ++ ++typedef struct ttf_kern { ++ USHORT version, nTables; ++} TTF_KERN ; ++ ++typedef struct ttf_kern_sub { ++ USHORT version, length, coverage; ++ USHORT nPairs, searchRange, entrySelector, rangeShift; ++} TTF_KERN_SUB; ++ ++typedef struct ttf_kern_entry { ++ USHORT left, right; ++ FWORD value; ++} TTF_KERN_ENTRY; ++ ++typedef struct ttf_cmap_fmt0 { ++ USHORT format; ++ USHORT length; ++ USHORT version; ++ BYTE glyphIdArray[256]; ++} TTF_CMAP_FMT0; ++ ++typedef struct ttf_cmap_fmt4 { ++ USHORT format; ++ USHORT length; ++ USHORT version; ++ USHORT segCountX2; ++ USHORT searchRange; ++ USHORT entrySelector; ++ USHORT rangeShift; ++} TTF_CMAP_FMT4; ++ ++typedef struct ttf_cmap_entry { ++ USHORT platformID; ++ USHORT encodingID; ++ ULONG offset; ++} TTF_CMAP_ENTRY; ++ ++typedef struct ttf_cmap { ++ USHORT version; ++ USHORT numberOfEncodingTables; ++ TTF_CMAP_ENTRY encodingTable[1]; ++} TTF_CMAP ; ++ ++typedef struct ttf_glyf { ++ SHORT numberOfContours; ++ FWORD xMin, yMin, xMax, yMax; ++} TTF_GLYF ; ++ ++typedef struct ttf_maxp { ++ ULONG version; ++ USHORT numGlyphs, maxPoints, maxContours; ++ USHORT maxCompositePoints, maxCompositeContours; ++ USHORT maxZones, maxTwilightPoints, maxStorage; ++ USHORT maxFunctionDefs, maxInstructionsDefs; ++ USHORT maxSizeOfInstructions, maxComponentElements; ++ USHORT maxComponentDepth; ++} TTF_MAXP ; ++ ++typedef struct ttf_post_head { ++ ULONG formatType; ++ FIXED italicAngle; ++ FWORD underlinePosition; ++ FWORD underlineThickness; ++ ULONG isFixedPitch; ++ ULONG minMemType42; ++ ULONG maxMemType42; ++ ULONG minMemType1; ++ ULONG maxMemType1; ++ USHORT numGlyphs; ++ USHORT glyphNameIndex; ++} TTF_POST_HEAD ; +diff -ruN xserver-old/hw/xprint/extras/ttf2pt1/version.h xserver/hw/xprint/extras/ttf2pt1/version.h +--- xserver-old/hw/xprint/extras/ttf2pt1/version.h 1970-01-01 10:00:00.000000000 +1000 ++++ xserver/hw/xprint/extras/ttf2pt1/version.h 2006-06-27 13:10:26.000000000 +1000 +@@ -0,0 +1,7 @@ ++/* ++ * see COPYRIGHT ++ */ ++ ++ ++/* version number */ ++#define TTF2PT1_VERSION "3.4.4-SNAP-030526" +diff -ruN xserver-old/hw/xprint/extras/ttf2pt1/winbuild.bat xserver/hw/xprint/extras/ttf2pt1/winbuild.bat +--- xserver-old/hw/xprint/extras/ttf2pt1/winbuild.bat 1970-01-01 10:00:00.000000000 +1000 ++++ xserver/hw/xprint/extras/ttf2pt1/winbuild.bat 2006-06-27 13:10:26.000000000 +1000 +@@ -0,0 +1,11 @@ ++rem file to build ttf2pt1 with Visual C++ ++ ++cl -DWINDOWS -c bdf.c ++cl -DWINDOWS -c ttf2pt1.c ++cl -DWINDOWS -c pt1.c ++cl -DWINDOWS -c ttf.c ++cl -DWINDOWS -c t1asm.c ++cl -DWINDOWS -c bitmap.c ++cl -o ttf2pt1 ttf2pt1.obj pt1.obj t1asm.obj ttf.obj bdf.obj bitmap.obj ++cl -o t1asm -DWINDOWS -DSTANDALONE t1asm.c ++ +diff -ruN xserver-old/hw/xprint/extras/ttf2pt1/windows.h xserver/hw/xprint/extras/ttf2pt1/windows.h +--- xserver-old/hw/xprint/extras/ttf2pt1/windows.h 1970-01-01 10:00:00.000000000 +1000 ++++ xserver/hw/xprint/extras/ttf2pt1/windows.h 2006-06-27 13:10:26.000000000 +1000 +@@ -0,0 +1,93 @@ ++/* ++ * Implementation of things missing in Windows ++ */ ++ ++#ifndef M_PI ++#define M_PI 3.14159265358979323846 ++#endif ++ ++#undef ntohs ++#undef ntohl ++#undef htonl ++ ++#ifdef WINDOWS_FUNCTIONS ++/* byte order */ ++ ++static unsigned short StoM(unsigned short inv) { ++ union iconv { ++ unsigned short ui; ++ unsigned char uc[2]; ++ } *inp, outv; ++ ++ inp = (union iconv *)&inv; ++ ++ outv.uc[0] = inp->uc[1]; ++ outv.uc[1] = inp->uc[0]; ++ ++ return (outv.ui); ++} ++ ++static unsigned int ItoM(unsigned int inv) { ++ union iconv { ++ unsigned int ui; ++ unsigned char uc[4]; ++ } *inp, outv; ++ ++ inp = (union iconv *)&inv; ++ ++ outv.uc[0] = inp->uc[3]; ++ outv.uc[1] = inp->uc[2]; ++ outv.uc[2] = inp->uc[1]; ++ outv.uc[3] = inp->uc[0]; ++ ++ return (outv.ui); ++} ++ ++unsigned short ntohs(unsigned short inv) { return StoM(inv); } ++unsigned long ntohl(unsigned long inv) { return ItoM(inv); } ++unsigned long htonl(unsigned long inv) { return ItoM(inv); } ++ ++char *optarg; ++int optind=1; ++ ++char getopt(int argc, char **argv, char *args) { ++ int n,nlen=strlen(args),nLen=0; ++ char nCmd; ++ ++ if (argv[optind] && *argv[optind]=='-') { ++ nCmd=*((argv[optind]+1)); ++ ++ for (n=0;n +Date: Thu, 26 Apr 2007 16:41:01 +0000 (-0400) +Subject: Fix bug 8871 - scrolling corruption with a compositing manager +X-Git-Tag: xorg-server-1.3.99.0 +X-Git-Url: http://gitweb.freedesktop.org/?p=xorg/xserver.git;a=commitdiff;h=4fe918b38553133c27e5ae672e5c43984a9bbaea + +Fix bug 8871 - scrolling corruption with a compositing manager + +Call miHandleExposures() in CopyArea/CopyPlane explicitly in cw to +generate GraphicsExposes correctly. +--- + +--- a/miext/cw/cw_ops.c ++++ b/miext/cw/cw_ops.c +@@ -30,6 +30,7 @@ + #include "gcstruct.h" + #include "pixmapstr.h" + #include "cw.h" ++#include "mi.h" + + #define SETUP_BACKING_DST(_pDst, _pGC) \ + cwGCPtr pGCPrivate = getCwGC (_pGC); \ +@@ -185,7 +186,7 @@ cwCopyArea(DrawablePtr pSrc, DrawablePtr + int w, int h, int dstx, int dsty) + { + int odstx, odsty; +- RegionPtr exposed = NULL; ++ int osrcx, osrcy; + SETUP_BACKING_DST(pDst, pGC); + SETUP_BACKING_SRC(pSrc, pGC); + +@@ -193,19 +194,20 @@ cwCopyArea(DrawablePtr pSrc, DrawablePtr + + odstx = dstx; + odsty = dsty; ++ osrcx = srcx; ++ osrcy = srcy; + CW_OFFSET_XY_DST(dstx, dsty); + CW_OFFSET_XY_SRC(srcx, srcy); + +- exposed = (*pBackingGC->ops->CopyArea)(pBackingSrc, pBackingDst, +- pBackingGC, srcx, srcy, w, h, +- dstx, dsty); +- +- if (exposed != NULL) +- REGION_TRANSLATE(pDst->pScreen, exposed, odstx - dstx, odsty - dsty); +- ++ (*pBackingGC->ops->CopyArea)(pBackingSrc, pBackingDst, ++ pBackingGC, srcx, srcy, w, h, ++ dstx, dsty); ++ + EPILOGUE(pGC); + +- return exposed; ++ return miHandleExposures(pSrc, pDst, pGC, ++ osrcx, osrcy, w, h, ++ odstx, odsty, 0); + } + + static RegionPtr +@@ -213,7 +215,7 @@ cwCopyPlane(DrawablePtr pSrc, DrawablePt + int w, int h, int dstx, int dsty, unsigned long plane) + { + int odstx, odsty; +- RegionPtr exposed = NULL; ++ int osrcx, osrcy; + SETUP_BACKING_DST(pDst, pGC); + SETUP_BACKING_SRC(pSrc, pGC); + +@@ -221,19 +223,20 @@ cwCopyPlane(DrawablePtr pSrc, DrawablePt + + odstx = dstx; + odsty = dsty; ++ osrcx = srcx; ++ osrcy = srcy; + CW_OFFSET_XY_DST(dstx, dsty); + CW_OFFSET_XY_SRC(srcx, srcy); + +- exposed = (*pBackingGC->ops->CopyPlane)(pBackingSrc, pBackingDst, +- pBackingGC, srcx, srcy, w, h, +- dstx, dsty, plane); +- +- if (exposed != NULL) +- REGION_TRANSLATE(pDst->pScreen, exposed, odstx - dstx, odsty - dsty); ++ (*pBackingGC->ops->CopyPlane)(pBackingSrc, pBackingDst, ++ pBackingGC, srcx, srcy, w, h, ++ dstx, dsty, plane); + + EPILOGUE(pGC); + +- return exposed; ++ return miHandleExposures(pSrc, pDst, pGC, ++ osrcx, osrcy, w, h, ++ odstx, odsty, plane); + } + + static void --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/fix_CVE-2008-2360.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/fix_CVE-2008-2360.patch @@ -0,0 +1,32 @@ +diff --git a/render/glyph.c b/render/glyph.c +index 583a52b..42ae65d 100644 +--- a/render/glyph.c ++++ b/render/glyph.c +@@ -42,6 +42,12 @@ + #include "picturestr.h" + #include "glyphstr.h" + ++#if HAVE_STDINT_H ++#include ++#elif !defined(UINT32_MAX) ++#define UINT32_MAX 0xffffffffU ++#endif ++ + /* + * From Knuth -- a good choice for hash/rehash values is p, p-2 where + * p and p-2 are both prime. These tables are sized to have an extra 10% +@@ -626,8 +632,12 @@ AllocateGlyph (xGlyphInfo *gi, int fdepth) + int size; + GlyphPtr glyph; + int i; +- +- size = gi->height * PixmapBytePad (gi->width, glyphDepths[fdepth]); ++ size_t padded_width; ++ ++ padded_width = PixmapBytePad (gi->width, glyphDepths[fdepth]); ++ if (gi->height && padded_width > (UINT32_MAX - sizeof(GlyphRec))/gi->height) ++ return 0; ++ size = gi->height * padded_width; + glyph = (GlyphPtr) xalloc (size + sizeof (GlyphRec)); + if (!glyph) + return 0; --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/132_composite-no-clipping.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/132_composite-no-clipping.diff @@ -0,0 +1,406 @@ +Our fine mail archiving software throws away attachments, so here's an +inline version of the patch. Again, this patch changes the semantics of +manual-redirect Composite windows so that they do not clip sibling or +parent drawing. This allows parents to draw composited windows without +using IncludeInferiors mode, as well as having Expose events delivered +to the parent in regions covered by manual redirect composited children. + +[Note: this is taken from http://people.via.ecp.fr/~jobi/xserver-xephyr/, +with some descriptive text from the original patch at: +http://lists.freedesktop.org/archives/xorg/2007-March/022668.html +-- bryce] + +# On branch server-1.3-branch +# Changes to be committed: +# (use "git reset HEAD ..." to unstage) +# +# modified: composite/compalloc.c +# modified: composite/compwindow.c +# modified: dix/window.c +# modified: include/windowstr.h +# modified: mi/mivaltree.c +# +Index: xorg-server-1.3.0.0.dfsg/composite/compalloc.c +=================================================================== +--- xorg-server-1.3.0.0.dfsg.orig/composite/compalloc.c 2007-09-13 10:52:53.000000000 -0700 ++++ xorg-server-1.3.0.0.dfsg/composite/compalloc.c 2007-09-13 10:53:04.000000000 -0700 +@@ -206,7 +206,7 @@ + EnableMapUnmapEvents (pWin); + } + +- if (pWin->redirectDraw) ++ if (pWin->redirectDraw != RedirectDrawNone) + compFreePixmap (pWin); + + if (cw->damage) +@@ -218,7 +218,7 @@ + xfree (cw); + } + else if (cw->update == CompositeRedirectAutomatic && +- !cw->damageRegistered && pWin->redirectDraw) ++ !cw->damageRegistered && pWin->redirectDraw != RedirectDrawNone) + { + DamageRegister (&pWin->drawable, cw->damage); + cw->damageRegistered = TRUE; +@@ -511,6 +511,13 @@ + if (!pPixmap) + return FALSE; + pWin->redirectDraw = TRUE; ++ if (cw->update == CompositeRedirectAutomatic) { ++ pWin->redirectType = RedirectDrawAutomatic; ++ } ++ else { ++ pWin->redirectType = RedirectDrawManual; ++ } ++ + compSetPixmap (pWin, pPixmap); + cw->oldx = COMP_ORIGIN_INVALID; + cw->oldy = COMP_ORIGIN_INVALID; +@@ -545,7 +552,7 @@ + REGION_COPY (pScreen, &pWin->borderClip, &cw->borderClip); + pRedirectPixmap = (*pScreen->GetWindowPixmap) (pWin); + pParentPixmap = (*pScreen->GetWindowPixmap) (pWin->parent); +- pWin->redirectDraw = FALSE; ++ pWin->redirectDraw = RedirectDrawNone; + compSetPixmap (pWin, pParentPixmap); + (*pScreen->DestroyPixmap) (pRedirectPixmap); + } +@@ -566,7 +573,7 @@ + int pix_x, pix_y; + int pix_w, pix_h; + +- assert (cw && pWin->redirectDraw); ++ assert (cw && pWin->redirectDraw != RedirectDrawNone); + cw->oldx = pOld->screen_x; + cw->oldy = pOld->screen_y; + pix_x = draw_x - bw; +Index: xorg-server-1.3.0.0.dfsg/composite/compwindow.c +=================================================================== +--- xorg-server-1.3.0.0.dfsg.orig/composite/compwindow.c 2007-09-13 10:52:53.000000000 -0700 ++++ xorg-server-1.3.0.0.dfsg/composite/compwindow.c 2007-09-13 10:52:53.000000000 -0700 +@@ -59,10 +59,10 @@ + + if (!pWin->parent) + { +- assert (!pWin->redirectDraw); ++ assert (pWin->redirectDraw == RedirectDrawNone); + assert (pWinPixmap == pScreenPixmap); + } +- else if (pWin->redirectDraw) ++ else if (pWin->redirectDraw != RedirectDrawNone) + { + assert (pWinPixmap != pParentPixmap); + assert (pWinPixmap != pScreenPixmap); +@@ -113,7 +113,7 @@ + CompPixmapVisitPtr pVisit = (CompPixmapVisitPtr) data; + ScreenPtr pScreen = pWindow->drawable.pScreen; + +- if (pWindow != pVisit->pWindow && pWindow->redirectDraw) ++ if (pWindow != pVisit->pWindow && pWindow->redirectDraw != RedirectDrawNone) + return WT_DONTWALKCHILDREN; + (*pScreen->SetWindowPixmap) (pWindow, pVisit->pPixmap); + /* +@@ -157,7 +157,7 @@ + } + } + +- if (should != pWin->redirectDraw) ++ if (should != (pWin->redirectDraw != RedirectDrawNone)) + { + if (should) + return compAllocPixmap (pWin); +@@ -331,7 +331,7 @@ + CompScreenPtr cs = GetCompScreen (pScreen); + + compCheckTree (pScreen); +- if (pWin->redirectDraw) ++ if (pWin->redirectDraw != RedirectDrawNone) + { + WindowPtr pParent; + int draw_x, draw_y; +@@ -355,7 +355,7 @@ + cs->MoveWindow = pScreen->MoveWindow; + pScreen->MoveWindow = compMoveWindow; + +- if (pWin->redirectDraw) ++ if (pWin->redirectDraw != RedirectDrawNone) + { + CompWindowPtr cw = GetCompWindow (pWin); + if (cw->pOldPixmap) +@@ -376,7 +376,7 @@ + CompScreenPtr cs = GetCompScreen (pScreen); + + compCheckTree (pScreen); +- if (pWin->redirectDraw) ++ if (pWin->redirectDraw != RedirectDrawNone) + { + WindowPtr pParent; + int draw_x, draw_y; +@@ -397,7 +397,7 @@ + (*pScreen->ResizeWindow) (pWin, x, y, w, h, pSib); + cs->ResizeWindow = pScreen->ResizeWindow; + pScreen->ResizeWindow = compResizeWindow; +- if (pWin->redirectDraw) ++ if (pWin->redirectDraw != RedirectDrawNone) + { + CompWindowPtr cw = GetCompWindow (pWin); + if (cw->pOldPixmap) +@@ -416,7 +416,7 @@ + CompScreenPtr cs = GetCompScreen (pScreen); + + compCheckTree (pScreen); +- if (pWin->redirectDraw) ++ if (pWin->redirectDraw != RedirectDrawNone) + { + WindowPtr pParent; + int draw_x, draw_y; +@@ -438,7 +438,7 @@ + (*pScreen->ChangeBorderWidth) (pWin, bw); + cs->ChangeBorderWidth = pScreen->ChangeBorderWidth; + pScreen->ChangeBorderWidth = compChangeBorderWidth; +- if (pWin->redirectDraw) ++ if (pWin->redirectDraw != RedirectDrawNone) + { + CompWindowPtr cw = GetCompWindow (pWin); + if (cw->pOldPixmap) +@@ -482,7 +482,7 @@ + /* + * Reset pixmap pointers as appropriate + */ +- if (pWin->parent && !pWin->redirectDraw) ++ if (pWin->parent && pWin->redirectDraw == RedirectDrawNone) + compSetPixmap (pWin, (*pScreen->GetWindowPixmap) (pWin->parent)); + /* + * Call down to next function +@@ -501,7 +501,7 @@ + CompScreenPtr cs = GetCompScreen (pScreen); + int dx = 0, dy = 0; + +- if (pWin->redirectDraw) ++ if (pWin->redirectDraw != RedirectDrawNone) + { + PixmapPtr pPixmap = (*pScreen->GetWindowPixmap) (pWin); + CompWindowPtr cw = GetCompWindow (pWin); +@@ -629,7 +629,7 @@ + while ((csw = GetCompSubwindows (pWin))) + FreeResource (csw->clients->id, RT_NONE); + +- if (pWin->redirectDraw) ++ if (pWin->redirectDraw != RedirectDrawNone) + compFreePixmap (pWin); + ret = (*pScreen->DestroyWindow) (pWin); + cs->DestroyWindow = pScreen->DestroyWindow; +@@ -774,7 +774,7 @@ + + for (pChild = pWin->lastChild; pChild; pChild = pChild->prevSib) + compWindowUpdate (pChild); +- if (pWin->redirectDraw) ++ if (pWin->redirectDraw != RedirectDrawNone) + { + CompWindowPtr cw = GetCompWindow(pWin); + +Index: xorg-server-1.3.0.0.dfsg/dix/window.c +=================================================================== +--- xorg-server-1.3.0.0.dfsg.orig/dix/window.c 2007-09-13 10:23:04.000000000 -0700 ++++ xorg-server-1.3.0.0.dfsg/dix/window.c 2007-09-13 10:52:53.000000000 -0700 +@@ -303,7 +303,7 @@ + pWin->dstBuffer = DBE_FRONT_BUFFER; + #endif + #ifdef COMPOSITE +- pWin->redirectDraw = 0; ++ pWin->redirectDraw = RedirectDrawNone; + #endif + } + +@@ -1681,10 +1681,14 @@ + SetWinSize (register WindowPtr pWin) + { + #ifdef COMPOSITE +- if (pWin->redirectDraw) ++ if (pWin->redirectDraw != RedirectDrawNone) + { + BoxRec box; + ++ /* ++ * Redirected clients get clip list equal to their ++ * own geometry, not clipped to their parent ++ */ + box.x1 = pWin->drawable.x; + box.y1 = pWin->drawable.y; + box.x2 = pWin->drawable.x + pWin->drawable.width; +@@ -1723,10 +1727,14 @@ + if (HasBorder (pWin)) { + bw = wBorderWidth (pWin); + #ifdef COMPOSITE +- if (pWin->redirectDraw) ++ if (pWin->redirectDraw != RedirectDrawNone) + { + BoxRec box; + ++ /* ++ * Redirected clients get clip list equal to their ++ * own geometry, not clipped to their parent ++ */ + box.x1 = pWin->drawable.x - bw; + box.y1 = pWin->drawable.y - bw; + box.x2 = pWin->drawable.x + pWin->drawable.width + bw; +Index: xorg-server-1.3.0.0.dfsg/include/windowstr.h +=================================================================== +--- xorg-server-1.3.0.0.dfsg.orig/include/windowstr.h 2007-09-13 10:23:04.000000000 -0700 ++++ xorg-server-1.3.0.0.dfsg/include/windowstr.h 2007-09-13 10:52:53.000000000 -0700 +@@ -94,6 +94,33 @@ + #define BackgroundPixel 2L + #define BackgroundPixmap 3L + ++/* ++ * The redirectDraw field can have one of three values: ++ * ++ * RedirectDrawNone ++ * A normal window; painted into the same pixmap as the parent ++ * and clipping parent and siblings to its geometry. These ++ * windows get a clip list equal to the intersection of their ++ * geometry with the parent geometry, minus the geometry ++ * of overlapping None and Clipped siblings. ++ * RedirectDrawAutomatic ++ * A redirected window which clips parent and sibling drawing. ++ * Contents for these windows are manage inside the server. ++ * These windows get an internal clip list equal to their ++ * geometry. ++ * RedirectDrawManual ++ * A redirected window which does not clip parent and sibling ++ * drawing; the window must be represented within the parent ++ * geometry by the client performing the redirection management. ++ * Contents for these windows are managed outside the server. ++ * These windows get an internal clip list equal to their ++ * geometry. ++ */ ++ ++#define RedirectDrawNone 0 ++#define RedirectDrawAutomatic 0 ++#define RedirectDrawManual 1 ++ + typedef struct _Window { + DrawableRec drawable; + WindowPtr parent; /* ancestor chain */ +@@ -139,6 +166,9 @@ + unsigned redirectDraw:1; /* rendering is redirected from here */ + #endif + DevUnion *devPrivates; ++#ifdef COMPOSITE ++ unsigned redirectType:1; /* Automatic or Manual */ ++#endif + } WindowRec; + + /* +Index: xorg-server-1.3.0.0.dfsg/mi/mivaltree.c +=================================================================== +--- xorg-server-1.3.0.0.dfsg.orig/mi/mivaltree.c 2007-09-13 10:23:04.000000000 -0700 ++++ xorg-server-1.3.0.0.dfsg/mi/mivaltree.c 2007-09-13 10:52:53.000000000 -0700 +@@ -179,6 +179,17 @@ + miGetRedirectBorderClipProc = getBorderClip; + } + ++/* ++ * Manual redirected windows are treated as transparent; they do not obscure ++ * siblings or parent windows ++ */ ++ ++#ifdef COMPOSITE ++#define TreatAsTransparent(w) ((w)->redirectDraw && (w)->redirectType == RedirectDrawManual) ++#else ++#define TreatAsTransparent(w) FALSE ++#endif ++ + #define HasParentRelativeBorder(w) (!(w)->borderIsPixel && \ + HasBorder(w) && \ + (w)->backgroundState == ParentRelative) +@@ -241,7 +252,7 @@ + /* + * In redirected drawing case, reset universe to borderSize + */ +- if (pParent->redirectDraw) ++ if (pParent->redirectDraw != RedirectDrawNone) + { + if (miSetRedirectBorderClipProc) + (*miSetRedirectBorderClipProc) (pParent, universe); +@@ -432,7 +443,7 @@ + { + for (; pChild; pChild = pChild->nextSib) + { +- if (pChild->viewable) ++ if (pChild->viewable && !TreatAsTransparent(pChild)) + REGION_APPEND( pScreen, &childUnion, &pChild->borderSize); + } + } +@@ -440,7 +451,7 @@ + { + for (pChild = pParent->lastChild; pChild; pChild = pChild->prevSib) + { +- if (pChild->viewable) ++ if (pChild->viewable && !TreatAsTransparent(pChild)) + REGION_APPEND( pScreen, &childUnion, &pChild->borderSize); + } + } +@@ -472,7 +483,7 @@ + * from the current universe, thus denying its space to any + * other sibling. + */ +- if (overlap) ++ if (overlap && !TreatAsTransparent (pChild)) + REGION_SUBTRACT( pScreen, universe, universe, + &pChild->borderSize); + } +@@ -644,7 +655,7 @@ + + for (pWin = pParent->firstChild; pWin != pChild; pWin = pWin->nextSib) + { +- if (pWin->viewable) ++ if (pWin->viewable && !TreatAsTransparent (pWin)) + REGION_SUBTRACT (pScreen, &totalClip, &totalClip, &pWin->borderSize); + } + for (pWin = pChild; pWin; pWin = pWin->nextSib) +@@ -666,7 +677,7 @@ + { + RegionPtr pBorderClip = &pWin->borderClip; + #ifdef COMPOSITE +- if (pWin->redirectDraw && miGetRedirectBorderClipProc) ++ if (pWin->redirectDraw != RedirectDrawNone && miGetRedirectBorderClipProc) + pBorderClip = (*miGetRedirectBorderClipProc)(pWin); + #endif + REGION_APPEND( pScreen, &totalClip, pBorderClip ); +@@ -685,7 +696,7 @@ + { + RegionPtr pBorderClip = &pWin->borderClip; + #ifdef COMPOSITE +- if (pWin->redirectDraw && miGetRedirectBorderClipProc) ++ if (pWin->redirectDraw != RedirectDrawNone && miGetRedirectBorderClipProc) + pBorderClip = (*miGetRedirectBorderClipProc)(pWin); + #endif + REGION_APPEND( pScreen, &totalClip, pBorderClip ); +@@ -724,7 +735,7 @@ + if (forward) + { + for (pWin = pChild; pWin; pWin = pWin->nextSib) +- if (pWin->valdata && pWin->viewable) ++ if (pWin->valdata && pWin->viewable && !TreatAsTransparent (pWin)) + REGION_APPEND( pScreen, &childUnion, + &pWin->borderSize); + } +@@ -733,7 +744,7 @@ + pWin = pParent->lastChild; + while (1) + { +- if (pWin->valdata && pWin->viewable) ++ if (pWin->valdata && pWin->viewable && !TreatAsTransparent (pWin)) + REGION_APPEND( pScreen, &childUnion, + &pWin->borderSize); + if (pWin == pChild) +@@ -757,7 +768,7 @@ + &totalClip, + &pWin->borderSize); + miComputeClips (pWin, pScreen, &childClip, kind, &exposed); +- if (overlap) ++ if (overlap && !TreatAsTransparent (pWin)) + { + REGION_SUBTRACT( pScreen, &totalClip, + &totalClip, --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/245_regenerated_to_fix_bug_10371.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/245_regenerated_to_fix_bug_10371.patch @@ -0,0 +1,38 @@ +From: Brian +Date: Sat, 7 Apr 2007 18:41:57 +0000 (-0600) +Subject: regenerated to fix bug 10371 +X-Git-Tag: xorg-server-1.3.99.0 +X-Git-Url: http://gitweb.freedesktop.org/?p=xorg/xserver.git;a=commitdiff;h=0a6ac992363343487dfe0a0fc985ea55bd448382 + +regenerated to fix bug 10371 +--- + +--- a/GL/glx/indirect_size_get.c ++++ b/GL/glx/indirect_size_get.c +@@ -639,7 +639,7 @@ __glGetBooleanv_size(GLenum e) + case GL_PROGRAM_ERROR_POSITION_ARB: + case GL_DEPTH_CLAMP_NV: + case GL_NUM_COMPRESSED_TEXTURE_FORMATS: +-/* case GL_NUM_TEXTURE_COMPRESSED_FORMATS_ARB:*/ ++/* case GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB:*/ + case GL_MAX_VERTEX_UNITS_ARB: + case GL_ACTIVE_VERTEX_UNITS_ARB: + case GL_WEIGHT_SUM_UNITY_ARB: +@@ -699,6 +699,8 @@ __glGetBooleanv_size(GLenum e) + /* case GL_POINT_SPRITE_NV:*/ + case GL_POINT_SPRITE_R_MODE_NV: + case GL_MAX_VERTEX_ATTRIBS_ARB: ++ case GL_MAX_TEXTURE_COORDS_ARB: ++ case GL_MAX_TEXTURE_IMAGE_UNITS_ARB: + case GL_DEPTH_BOUNDS_TEST_EXT: + case GL_STENCIL_TEST_TWO_SIDE_EXT: + case GL_ACTIVE_STENCIL_FACE_EXT: +@@ -1005,8 +1007,6 @@ __glGetProgramivARB_size(GLenum e) + case GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB: + case GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB: + case GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB: +- case GL_MAX_TEXTURE_COORDS_ARB: +- case GL_MAX_TEXTURE_IMAGE_UNITS_ARB: + case GL_PROGRAM_FORMAT_ARB: + case GL_PROGRAM_INSTRUCTIONS_ARB: + case GL_MAX_PROGRAM_INSTRUCTIONS_ARB: --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/133_psb_auto.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/133_psb_auto.patch @@ -0,0 +1,28 @@ +This patch adds autodetection support for the Poulsbo ("psb") driver +needed by moblin.org for the Intel mobile chipset. Rather than add an +else if, I restructured things with a case statement to make it conform +in style to the savage driver section. + +Bryce Harrington 23-Aug-2007 + +--- xorg-server-1.3.0.0.dfsg-12ubuntu1/hw/xfree86/common/xf86AutoConfig.c.orig 2007-08-23 10:05:57.000000000 -0700 ++++ xorg-server-1.3.0.0.dfsg-12ubuntu1/hw/xfree86/common/xf86AutoConfig.c 2007-08-23 10:13:43.000000000 -0700 +@@ -173,9 +173,15 @@ videoPtrToDriverName(pciVideoPtr info) + case 0x102c: return "chips"; + case 0x1013: return "cirrus"; + case 0x8086: +- if ((info->chipType == 0x00d1) || (info->chipType == 0x7800)) +- return "i740"; +- else return "i810"; ++ switch (info->chipType) ++ { ++ case 0x00d1: case 0x7800: ++ return "i740"; ++ case 0x8108: ++ return "psb"; ++ default: ++ return "i810"; ++ } + case 0x102b: return "mga"; + case 0x10c8: return "neomagic"; + case 0x105d: return "i128"; --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/107_fedora_dont_backfill_bg_none.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/107_fedora_dont_backfill_bg_none.patch @@ -0,0 +1,23 @@ +Disable backfilling of windows created with bg=none, which otherwise +would force a framebuffer readback. + +Index: xorg-server-1.2.0/composite/compalloc.c +=================================================================== +--- foo/composite/compalloc.c.orig 2007-09-18 18:16:24.000000000 -0700 ++++ foo/composite/compalloc.c 2007-09-18 18:16:48.000000000 -0700 +@@ -471,6 +471,7 @@ compNewPixmap (WindowPtr pWin, int x, in + pPixmap->screen_x = x; + pPixmap->screen_y = y; + ++#if 0 + if (pParent->drawable.depth == pWin->drawable.depth) + { + GCPtr pGC = GetScratchGC (pWin->drawable.depth, pScreen); +@@ -529,6 +530,7 @@ compNewPixmap (WindowPtr pWin, int x, in + if (pDstPicture) + FreePicture (pDstPicture, 0); + } ++#endif + return pPixmap; + } + --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/114_fedora_no_composite_in_xnest.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/114_fedora_no_composite_in_xnest.patch @@ -0,0 +1,17 @@ +Index: xorg-server-1.2.0/hw/xnest/Args.c +=================================================================== +--- xorg-server-1.2.0.orig/hw/xnest/Args.c 2007-01-23 07:39:16.000000000 +0200 ++++ xorg-server-1.2.0/hw/xnest/Args.c 2007-02-08 16:03:15.000000000 +0200 +@@ -50,9 +50,12 @@ + Bool xnestDoDirectColormaps = False; + Window xnestParentWindow = 0; + ++/* XXX terrible hack */ ++extern Bool noCompositeExtension; + /* ddxInitGlobals - called by |InitGlobals| from os/util.c */ + void ddxInitGlobals(void) + { ++ noCompositeExtension = TRUE; + } + + int --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/23_kfreebsd_support.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/23_kfreebsd_support.diff @@ -0,0 +1,39 @@ +Index: xorg-server/configure.ac +=================================================================== +--- xorg-server.orig/configure.ac 2007-03-15 00:57:37.000000000 +0100 ++++ xorg-server/configure.ac 2007-03-15 00:57:41.000000000 +0100 +@@ -1515,7 +1515,11 @@ + + AC_CHECK_HEADERS([sys/vm86.h sys/io.h]) + if test "$ac_cv_header_sys_vm86_h" = yes; then +- AC_DEFINE(KDRIVEVESA, 1, [Build VESA-based kdrive servers]) ++ case $host_os in ++ kfreebsd*-gnu) kdrivevesa=no ;; ++ *) AC_DEFINE(KDRIVEVESA, 1, [Build VESA-based kdrive servers]) ++ kdrivevesa=yes;; ++ esac + fi + + AC_CHECK_HEADERS([linux/fb.h]) +@@ -1571,7 +1575,7 @@ + AM_CONDITIONAL(KDRIVELINUX, [test "x$KDRIVELINUX" = xyes]) + AM_CONDITIONAL(TSLIB, [test "x$HAVE_TSLIB" = xyes]) + AM_CONDITIONAL(H3600_TS, false) +-AM_CONDITIONAL(KDRIVEVESA, [test x"$ac_cv_header_sys_vm86_h" = xyes]) ++AM_CONDITIONAL(KDRIVEVESA, [test x"$kdrivevesa" = xyes]) + AM_CONDITIONAL(KDRIVEFBDEV, [test x"$ac_cv_header_linux_fb_h" = xyes]) + + # Xephyr needs nanosleep() which is in librt on Solaris +Index: xorg-server/hw/kdrive/linux/agp.c +=================================================================== +--- xorg-server.orig/hw/kdrive/linux/agp.c 2007-03-15 00:57:26.000000000 +0100 ++++ xorg-server/hw/kdrive/linux/agp.c 2007-03-15 00:57:41.000000000 +0100 +@@ -65,7 +65,7 @@ + + #include + +-#elif defined(__FreeBSD__) ++#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) + #include + #include + #endif --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/03_xnest_manpage_overhaul.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/03_xnest_manpage_overhaul.diff @@ -0,0 +1,653 @@ +Index: xorg-server-X11R7.0-1.0.1/hw/xnest/Xnest.man.pre +=================================================================== +--- xorg-server-X11R7.0-1.0.1.orig/hw/xnest/Xnest.man.pre 2006-01-04 23:07:24.000000000 -0500 ++++ xorg-server-X11R7.0-1.0.1/hw/xnest/Xnest.man.pre 2006-02-26 21:29:59.000000000 -0500 +@@ -1,6 +1,6 @@ + .\" $Xorg: Xnest.man,v 1.3 2000/08/17 19:53:28 cpqbld Exp $ + .\" Copyright (c) 1993, 1994 X Consortium +-.\" ++.\" + .\" 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 +@@ -8,10 +8,10 @@ + .\" 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. +@@ -19,7 +19,7 @@ + .\" 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 X Consortium shall + .\" not be used in advertising or otherwise to promote the sale, use or + .\" other dealings in this Software without prior written authorization +@@ -27,238 +27,402 @@ + .\" + .\" $XFree86: xc/programs/Xserver/hw/xnest/Xnest.man,v 1.6 2001/01/27 18:21:00 dawes Exp $ + .\" +-.TH XNEST 1 __xorgversion__ ++.TH Xnest __appmansuffix__ __xorgversion__ + .SH NAME + Xnest \- a nested X server + .SH SYNOPSIS + .B Xnest +-[-options] ++[ ++.I options ++] + .SH DESCRIPTION +-\fIXnest\fP is a client and a server. \fIXnest\fP is a client of the +-real server which manages windows and graphics requests on its behalf. +-\fIXnest\fP is a server to its own clients. \fIXnest\fP manages +-windows and graphics requests on their behalf. To these clients +-\fIXnest\fP appears to be a conventional server. ++.B Xnest ++is both an X client and an X server. ++.B Xnest ++is a client of the real server which manages windows and graphics requests on ++its behalf. ++.B Xnest ++is a server to its own clients. ++.B Xnest ++manages windows and graphics requests on their behalf. ++To these clients, ++.B Xnest ++appears to be a conventional server. + .SH OPTIONS +-\fIXnest\fP supports all standard options of the sample server +-implementation. For more details, please see the manual page on your +-system for \fIXserver\fP. The following additional arguments are +-supported as well. +-.TP 4 +-.B \-display \fIstring\fP ++.B Xnest ++supports all standard options of the sample server implementation. ++For more details, please see ++.BR Xserver (__appmansuffix__). ++The following additional arguments are supported as well. ++.TP ++.BI "\-display " string + This option specifies the display name of the real server that +-\fIXnest\fP should try to connect with. If it is not provided on the +-command line \fIXnest\fP will read the \fIDISPLAY\fP environment +-variable in order to find out the same information. +-.TP 4 ++.B Xnest ++should try to connect to. ++If it is not provided on the command line, ++.B Xnest ++will read the ++.I DISPLAY ++environment variable in order to find out this information. ++.TP + .B \-sync +-This option tells \fIXnest\fP to synchronize its window and graphics +-operations with the real server. This is a useful option for +-debugging, but it will slow down the performance considerably. It +-should not be used unless absolutely necessary. +-.TP 4 ++This option tells ++.B Xnest ++to synchronize its window and graphics operations with the real server. ++This is a useful option for debugging, but it will slow down ++.BR Xnest 's ++performance considerably. ++It should not be used unless absolutely necessary. ++.TP + .B \-full +-This option tells \fIXnest\fP to utilize full regeneration of real +-server objects and reopen a new connection to the real server each +-time the nested server regenerates. The sample server implementation +-regenerates all objects in the server when the last client of this +-server terminates. When this happens, \fIXnest\fP by default +-maintains the same top level window and the same real server +-connection in each new generation. If the user selects full +-regeneration, even the top level window and the connection to the real +-server will be regenerated for each server generation. +-.TP 4 +-.B \-class \fIstring\fP ++This option tells ++.B Xnest ++to utilize full regeneration of real server objects and reopen a new connection ++to the real server each time the nested server regenerates. ++The sample server implementation regenerates all objects in the server when the ++last client of this server terminates. ++When this happens, ++.B Xnest ++by default maintains the same top-level window and the same real server ++connection in each new generation. ++If the user selects full regeneration, even the top-level window and the ++connection to the real server will be regenerated for each server generation. ++.TP ++.BI "\-class " string + This option specifies the default visual class of the nested server. +-It is similar to the \fI-cc\fP option from the set of standard options +-except that it will accept a string rather than a number for the +-visual class specification. The string must be one of the following +-six values: \fIStaticGray\fP, \fIGrayScale\fP, \fIStaticColor\fP, +-\fIPseudoColor\fP, \fITrueColor\fP, or \fIDirectColor\fP. If both, +-\fI-class\fP and \fI-cc\fP options are specified, the last instance of +-either option assumes precedence. The class of the default visual of +-the nested server need not be the same as the class of the default +-visual of the real server; although, it has to be supported by the +-real server. See \fIxdpyinfo\fP for a list of supported visual +-classes on the real server before starting \fIXnest\fP. If the user +-chooses a static class, all the colors in the default colormap will be +-preallocated. If the user chooses a dynamic class, colors in the +-default colormap will be available to individual clients for +-allocation. +-.TP 4 +-.B \-depth \fIint\fP ++It is similar to the ++.B \-cc ++option from the set of standard options except that it will accept a string ++rather than a number for the visual class specification. ++The ++.I string ++must be one of the following six values: ++.BR StaticGray , ++.BR GrayScale , ++.BR StaticColor , ++.BR PseudoColor , ++.BR TrueColor , ++or ++.BR DirectColor . ++If both the ++.B \-class ++and ++.B \-cc ++options are specified, the last instance of either option takes precedence. ++The class of the default visual of the nested server need not be the same as the ++class of the default visual of the real server, but it must be supported by the ++real server. ++Use ++.BR xdpyinfo (__appmansuffix__) ++to obtain a list of supported visual classes on the real server before starting ++.BR Xnest . ++If the user chooses a static class, all the colors in the default color map will ++be preallocated. ++If the user chooses a dynamic class, colors in the default color map will be ++available to individual clients for allocation. ++.TP ++.BI "\-depth " int + This option specifies the default visual depth of the nested server. +-The depth of the default visual of the nested server need not be the +-same as the depth of the default visual of the real server; although, +-it has to be supported by the real server. See \fIxdpyinfo\fP for a +-list of supported visual depths on the real server before starting +-\fIXnest\fP. +-.TP 4 ++The depth of the default visual of the nested server need not be the same as the ++depth of the default visual of the real server, but it must be supported by the ++real server. ++Use ++.BR xdpyinfo (__appmansuffix__) ++to obtain a list of supported visual depths on the real server before starting ++.BR Xnest . ++.TP + .B \-sss +-This option tells \fIXnest\fP to use the software screen saver. By +-default \fIXnest\fP will use the screen saver that corresponds to the +-hardware screen saver in the real server. Of course, even this screen +-saver is software generated since \fIXnest\fP does not control any +-actual hardware. However, it is treated as a hardware screen saver +-within the sample server code. +-.TP 4 +-.B \-geometry \fIWxH+X+Y\fP +-This option specifies geometry parameters for the top level +-\fIXnest\fP windows. These windows corresponds to the root windows of +-the nested server. The width and height specified with this option +-will be the maximum width and height of each top level \fIXnest\fP +-window. \fIXnest\fP will allow the user to make any top level window +-smaller, but it will not actually change the size of the nested server +-root window. As of yet, there is no mechanism within the sample +-server implementation to change the size of the root window after +-screen initialization. In order to do so, one would probably need to +-extend the X protocol. Therefore, it is not likely that this will be +-available any time soon. If this option is not specified \fIXnest\fP +-will choose width and height to be 3/4 of the dimensions of the root +-window of the real server. +-.TP 4 +-.B \-bw \fIint\fP +-This option specifies the border width of the top level \fIXnest\fP +-window. The integer parameter must be a positive number. The default +-border width is 1. +-.TP 4 +-.B \-name \fIstring\fP +-This option specifies the name of the top level \fIXnest\fP window. ++This option tells ++.B Xnest ++to use the software screen saver. ++By default, ++.B Xnest ++will use the screen saver that corresponds to the hardware screen saver in the ++real server. ++Of course, even this screen saver is software-generated since ++.B Xnest ++does not control any actual hardware. ++However, it is treated as a hardware screen saver within the sample server code. ++.TP ++.B \-geometry \fIW\fBx\fIH\fB+\fIX\fB+\fIY\fP ++This option specifies the geometry parameters for the top-level ++.B Xnest ++window. ++See \(lqGEOMETRY SPECIFICATIONS\(rq in ++.BR X (__miscmansuffix__) ++for a discusson of this option's syntax. ++This window corresponds to the root window of the nested server. ++The width ++.I W ++and height ++.I H ++specified with this option will be the maximum width and height of each ++top-level ++.B Xnest ++window. ++.B Xnest ++will allow the user to make any top-level window smaller, but it will not ++actually change the size of the nested server root window. ++.B Xnest ++does not yet support the RANDR extension for resizing, rotation, and reflection ++of the root window. ++If this option is not specified, ++.B Xnest ++will choose ++.I W ++and ++.I H ++to be 3/4ths the dimensions of the root window of the real server. ++.TP ++.BI "\-bw " int ++This option specifies the border width of the top-level ++.B Xnest ++window. ++The integer parameter ++.I int ++must be positive. ++The default border width is 1. ++.TP ++.BI "\-name " string ++This option specifies the name of the top-level ++.B Xnest ++window as ++.IR string . + The default value is the program name. +-.TP 4 +-.B \-scrns \fIint\fP +-This option specifies the number of screens to create in the nested +-server. For each screen, \fIXnest\fP will create a separate top level +-window. Each screen is referenced by the number after the dot in the +-client display name specification. For example, \fIxterm -display +-:1.1\fP will open an \fIxterm\fP client in the nested server with the +-display number \fI:1\fP on the second screen. The number of screens +-is limited by the hard coded constant in the server sample code which +-is usually 3. +-.TP 4 ++.TP ++.BI "\-scrns " int ++This option specifies the number of screens to create in the nested server. ++For each screen, ++.B Xnest ++will create a separate top-level window. ++Each screen is referenced by the number after the dot in the client display name ++specification. ++For example, ++.B xterm \-display :1.1 ++will open an ++.BR xterm (__appmansuffix__) ++client in the nested server with the display number ++.B :1 ++on the second screen. ++The number of screens is limited by the hard-coded constant in the server sample ++code, which is usually 3. ++.TP + .B \-install +-This option tells \fIXnest\fP to do its own colormap installation by +-bypassing the real window manager. For it to work properly the user +-will probably have to temporarily quit the real window manager. By +-default \fIXnest\fP will keep the nested client window whose colormap +-should be installed in the real server in the +-\fIWM\_COLORMAP\_WINDOWS\fP property of the top level \fIXnest\fP +-window. If this colormap is of the same visual type as the root +-window of the nested server, \fIXnest\fP will associate this colormap +-with the top level \fIXnest\fP window as well. Since this does not +-have to be the case, window managers should look primarily at the +-\fIWM\_COLORMAP\_WINDOWS\fP property rather than the colormap +-associated with the top level \fIXnest\fP window. Unfortunately, +-window managers are not very good at doing that yet so this option +-might come in handy. +-.TP 4 +-.B \-parent \fIwindow_id\fP +-This option tells \fIXnest\fP to use the \fIwindow_id\fP as the +-root window instead of creating a window. This option is used +-by the xrx xnestplugin. +-.SH USAGE +-Starting up \fIXnest\fP is as simple as starting up \fIxclock\fP from +-a terminal emulator. If a user wishes to run \fIXnest\fP on the same +-workstation as the real server, it is important that the nested server +-is given its own listening socket address. Therefore, if there is a +-server already running on the user's workstation, \fIXnest\fP will +-have to be started up with a new display number. Since there is +-usually no more than one server running on a workstation, specifying +-\fIXnest :1\fP on the command line will be sufficient for most users. +-For each server running on the workstation the display number needs to +-be incremented by one. Thus, if you wish to start another +-\fIXnest\fP, you will need to type \fIXnest :2\fP on the command line. +-.PP +-To run clients in the nested server each client needs to be given the +-same display number as the nested server. For example, \fIxterm +--display :1\fP will start up an \fIxterm\fP in the first nested server +-and \fIxterm -display :2\fP will start an \fIxterm\fP in the second +-nested server from the example above. Additional clients can be +-started from these \fIxterm\fPs in each nested server. +-.SH XNEST AS A CLIENT +-\fIXnest\fP behaves and looks to the real server and other real +-clients as another real client. It is a rather demanding client, +-however, since almost any window or graphics request from a nested +-client will result in a window or graphics request from \fIXnest\fP to +-the real server. Therefore, it is desirable that \fIXnest\fP and the +-real server are on a local network, or even better, on the same +-machine. As of now, \fIXnest\fP assumes that the real server supports +-the shape extension. There is no way to turn off this assumption +-dynamically. \fIXnest\fP can be compiled without the shape extension +-built in, and in that case the real server need not support it. The +-dynamic shape extension selection support should be considered in +-further development of \fIXnest\fP. +-.PP +-Since \fIXnest\fP need not use the same default visual as the the real +-server, the top level window of the \fIXnest\fP client always has its +-own colormap. This implies that other windows' colors will not be +-displayed properly while the keyboard or pointer focus is in the +-\fIXnest\fP window, unless the real server has support for more than +-one installed colormap at any time. The colormap associated with the +-top window of the \fIXnest\fP client need not be the appropriate +-colormap that the nested server wants installed in the real server. +-In the case that a nested client attempts to install a colormap of a +-different visual from the default visual of the nested server, +-\fIXnest\fP will put the top window of this nested client and all +-other top windows of the nested clients that use the same colormap +-into the \fIWM\_COLORMAP\_WINDOWS\fP property of the top level +-\fIXnest\fP window on the real server. Thus, it is important that the +-real window manager that manages the \fIXnest\fP top level window +-looks at the \fIWM\_COLORMAP\_WINDOWS\fP property rather than the +-colormap associated with the top level \fIXnest\fP window. Since most +-window managers appear to not implement this convention properly as of +-yet, \fIXnest\fP can optionally do direct installation of colormaps +-into the real server bypassing the real window manager. If the user +-chooses this option, it is usually necessary to temporarily disable +-the real window manager since it will interfere with the \fIXnest\fP +-scheme of colormap installation. +-.PP +-Keyboard and pointer control procedures of the nested server change +-the keyboard and pointer control parameters of the real server. +-Therefore, after \fIXnest\fP is started up, it will change the +-keyboard and pointer controls of the real server to its own internal +-defaults. Perhaps there should be a command line option to tell +-\fIXnest\fP to inherit the keyboard and pointer control parameters +-from the real server rather than imposing its own. This is a future +-consideration. +-.SH XNEST AS A SERVER +-\fIXnest\fP as a server looks exactly like a real server to its own +-clients. For the clients there is no way of telling if they are +-running on a real or a nested server. +-.PP +-As already mentioned, \fIXnest\fP is a very user friendly server when +-it comes to customization. \fIXnest\fP will pick up a number of +-command line arguments that can configure its default visual class and +-depth, number of screens, etc. In the future, \fIXnest\fP should read +-a customization input file to provide even greater freedom and +-simplicity in selecting the desired layout. Unfortunately, there is +-no support for backing store and save under as of yet, but this should +-also be considered in the future development of \fIXnest\fP. ++This option tells ++.B Xnest ++to do its own color map installation by bypassing the real window manager. ++For it to work properly, the user will probably have to temporarily quit the ++real window manager. ++By default, ++.B Xnest ++will keep the nested client window whose color map should be installed in the ++real server in the ++.I WM_COLORMAP_WINDOWS ++property of the top-level ++.B Xnest ++window. ++If this color map is of the same visual type as the root window of the nested ++server, ++.B Xnest ++will associate this color map with the top-level ++.B Xnest ++window as well. ++Since this does not have to be the case, window managers should look primarily ++at the ++.I WM_COLORMAP_WINDOWS ++property rather than the color map associated with the top-level ++.B Xnest ++window. ++.\" Is the following still true? This sentence is several years old. ++Unfortunately, window managers are not very good at doing that yet so this ++option might come in handy. ++.TP ++.BI "\-parent " window_id ++This option tells ++.B Xnest ++to use ++.I window_id ++as the root window instead of creating a window. ++.\" XRX is dead, dead, dead. ++.\" This option is used by the xrx xnestplugin. ++.SH "EXTENDED DESCRIPTION" ++Starting up ++.B Xnest ++is just as simple as starting up ++.BR xclock (__appmansuffix__) ++from a terminal emulator. ++If a user wishes to run ++.B Xnest ++on the same ++workstation as the real server, it is important that the nested server is given ++its own listening socket address. ++Therefore, if there is a server already running on the user's workstation, ++.B Xnest ++will have to be started up with a new display number. ++Since there is usually no more than one server running on a workstation, ++specifying ++.RB \(oq "Xnest :1" \(cq ++on the command line will be sufficient for most users. ++For each server running on the workstation, the display number needs to be ++incremented by one. ++Thus, if you wish to start another ++.BR Xnest , ++you will need to type ++.RB \(oq "Xnest :2" \(cq ++on the command line. ++.PP ++To run clients in the nested server, each client needs to be given the same ++display number as the nested server. ++For example, ++.RB \(oq "xterm \-display :1" \(cq ++will start up an ++.B xterm ++process in the first nested server ++and ++.RB \(oq "xterm \-display :2" \(cq ++will start an ++.B xterm ++in the second nested server from the example above. ++Additional clients can be started from these ++.BR xterm s ++in each nested server. ++.SS "Xnest as a client" ++.B Xnest ++behaves and looks to the real server and other real clients as another real ++client. ++It is a rather demanding client, however, since almost any window or graphics ++request from a nested client will result in a window or graphics request from ++.B Xnest ++to the real server. ++Therefore, it is desirable that ++.B Xnest ++and the real server are on a local network, or even better, on the same machine. ++.B Xnest ++assumes that the real server supports the SHAPE extension. ++There is no way to turn off this assumption dynamically. ++.B Xnest ++can be compiled without the SHAPE extension built in, in which case the real ++server need not support it. ++Dynamic SHAPE extension selection support may be considered in further ++development of ++.BR Xnest . ++.PP ++Since ++.B Xnest ++need not use the same default visual as the the real server, the top-level ++window of the ++.B Xnest ++client always has its own color map. ++This implies that other windows' colors will not be displayed properly while the ++keyboard or pointer focus is in the ++.B Xnest ++window, unless the real server has support for more than one installed color map ++at any time. ++The color map associated with the top window of the ++.B Xnest ++client need not be the appropriate color map that the nested server wants ++installed in the real server. ++In the case that a nested client attempts to install a color map of a different ++visual from the default visual of the nested server, ++.B Xnest ++will put the top window of this nested client and all other top windows of the ++nested clients that use the same color map into the ++.I WM_COLORMAP_WINDOWS ++property of the top-level ++.B Xnest ++window on the real server. ++Thus, it is important that the real window manager that manages the ++.B Xnest ++top-level window looks at the ++.I WM_COLORMAP_WINDOWS ++property rather than the color map associated with the top-level ++.B Xnest ++window. ++Since most window managers don't yet appear to implement this convention ++properly, ++.B Xnest ++can optionally do direct installation of color maps into the real server ++bypassing the real window manager. ++If the user chooses this option, it is usually necessary to temporarily disable ++the real window manager since it will interfere with the ++.B Xnest ++scheme of color map installation. ++.PP ++Keyboard and pointer control procedures of the nested server change the keyboard ++and pointer control parameters of the real server. ++Therefore, after ++.B Xnest ++is started up, it will change the keyboard and pointer controls of the real ++server to its own internal defaults. ++.SS "Xnest as a server" ++.B Xnest ++as a server looks exactly like a real server to its own clients. ++For the clients, there is no way of telling if they are running on a real or a ++nested server. ++.PP ++As already mentioned, ++.B Xnest ++is a very user-friendly server when it comes to customization. ++.B Xnest ++will pick up a number of command-line arguments that can configure its default ++visual class and depth, number of screens, etc. + .PP + The only apparent intricacy from the users' perspective about using +-\fIXnest\fP as a server is the selection of fonts. \fIXnest\fP +-manages fonts by loading them locally and then passing the font name +-to the real server and asking it to load that font remotely. This +-approach avoids the overload of sending the glyph bits across the +-network for every text operation, although it is really a bug. The +-proper implementation of fonts should be moved into the \fIos\fP +-layer. The consequence of this approach is that the user will have to +-worry about two different font paths - a local one for the nested +-server and a remote one for the real server - since \fIXnest\fP does +-not propagate its font path to the real server. The reason for this +-is because real and nested servers need not run on the same file +-system which makes the two font paths mutually incompatible. Thus, if +-there is a font in the local font path of the nested server, there is +-no guarantee that this font exists in the remote font path of the real +-server. \fIXlsfonts\fP client, if run on the nested server will list +-fonts in the local font path and if run on the real server will list +-fonts in the remote font path. Before a font can be successfully +-opened by the nested server it has to exist in local and remote font +-paths. It is the users' responsibility to make sure that this is the +-case. ++.B Xnest ++as a server is the selection of fonts. ++.B Xnest ++manages fonts by loading them locally and then passing the font name to the real ++server and asking it to load that font remotely. ++This approach avoids the overload of sending the glyph bits across the network ++for every text operation, although it is really a bug. ++The consequence of this approach is that the user will have to worry about two ++different font paths \(em a local one for the nested server and a remote one for ++the real server \(em since ++.B Xnest ++does not propagate its font path to the real server. ++The reason for this is because real and nested servers need not run on the same ++file system which makes the two font paths mutually incompatible. ++Thus, if there is a font in the local font path of the nested server, there is ++no guarantee that this font exists in the remote font path of the real server. ++The ++.BR xlsfonts (__appmansuffix__) ++client, if run on the nested server, will list fonts in the local font path and, ++if run on the real server, will list fonts in the remote font path. ++Before a font can be successfully opened by the nested server, it has to exist ++in local and remote font paths. ++It is the users' responsibility to make sure that this is the case. ++.SH "FUTURE DIRECTIONS" ++Make dynamic the requirement for the SHAPE extension in the real server, rather ++than having to recompile ++.B Xnest ++to turn this requirement on and off. ++.PP ++Perhaps there should be a command-line option to tell ++.B Xnest ++to inherit the keyboard and pointer control parameters from the real server ++rather than imposing its own. ++.PP ++.B Xnest ++should read a customization input file to provide even greater freedom and ++simplicity in selecting the desired layout. ++.PP ++There is no support for backing store and save unders, but this should also be ++considered. ++.PP ++.\" Is the following still true now that client-side font rendering is ++.\" considered the way to go? ++The proper implementation of fonts should be moved into the ++.I os ++layer. + .SH BUGS +-Won't run well on servers supporting different visual depths. +-Still crashes randomly. Probably has some memory leaks. ++Doesn't run well on servers supporting different visual depths. ++.PP ++Still crashes randomly. ++.PP ++Probably has some memory leaks. + .SH AUTHOR + Davor Matic, MIT X Consortium +- ++.SH "SEE ALSO" ++.BR Xserver (__appmansuffix__), ++.BR xdpyinfo (__appmansuffix__), ++.BR X (__miscmansuffix__) --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/121_only_switch_vt_when_active.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/121_only_switch_vt_when_active.diff @@ -0,0 +1,31 @@ +diff -urP xorg-server-1.1.1/hw/xfree86/os-support/linux/lnx_init.c xorg-server-1.1.1+/hw/xfree86/os-support/linux/lnx_init.c +--- xorg-server-1.1.1/hw/xfree86/os-support/linux/lnx_init.c 2006-07-05 14:31:41.000000000 -0400 ++++ xorg-server-1.1.1+/hw/xfree86/os-support/linux/lnx_init.c 2006-09-21 01:23:57.000000000 -0400 +@@ -345,10 +345,25 @@ + + if (VTSwitch) + { ++ struct vt_stat vts; ++ + /* +- * Perform a switch back to the active VT when we were started ++ * Perform a switch back to the active VT when we were started. ++ * We cannot rely on vtSema to determine if the server was the ++ * active VT at the time of shutdown since it has already been ++ * released. Instead, we manually check the current VT and ++ * compare it with the VT we were running on. + */ +- if (activeVT >= 0) { ++ if (ioctl(xf86Info.consoleFd, VT_GETSTATE, &vts) < 0) ++ { ++ /* If this failed, fall back to old behaviour ++ * of always switching. */ ++ xf86Msg(X_WARNING,"xf86OpenConsole: VT_GETSTATE failed: %s\n", ++ strerror(errno)); ++ vts.v_active = xf86Info.vtno; ++ } ++ ++ if (activeVT >= 0 && vts.v_active == xf86Info.vtno) { + if (ioctl(xf86Info.consoleFd, VT_ACTIVATE, activeVT) < 0) + xf86Msg(X_WARNING, "xf86CloseConsole: VT_ACTIVATE failed: %s\n", + strerror(errno)); --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/51_xkb-and-loathing.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/51_xkb-and-loathing.diff @@ -0,0 +1,46 @@ +* Mon Apr 30 2007 Adam Jackson 1.3.0.0-3 +- xserver-1.3.0-xkb-and-loathing.patch: Ignore (not just block) SIGALRM + around calls to Popen()/Pclose(). Fixes a hang in openoffice when + opening menus. + +http://cvs.fedora.redhat.com/viewcvs/devel/xorg-x11-server/xserver-1.3.0-xkb-and-loathing.patch?view=markup +https://bugs.freedesktop.org/show_bug.cgi?id=10525 + +Fixes #433131 + +--- xorg-server-1.3.0.0/os/utils.c.jx 2007-04-25 13:28:05.000000000 -0400 ++++ xorg-server-1.3.0.0/os/utils.c 2007-04-30 14:33:04.000000000 -0400 +@@ -1726,6 +1726,8 @@ + int pid; + } *pidlist; + ++static sighandler_t old_alarm = NULL; /* XXX horrible awful hack */ ++ + pointer + Popen(char *command, char *type) + { +@@ -1747,11 +1749,15 @@ + return NULL; + } + ++ /* Ignore the smart scheduler while this is going on */ ++ old_alarm = signal(SIGALRM, SIG_IGN); ++ + switch (pid = fork()) { + case -1: /* error */ + close(pdes[0]); + close(pdes[1]); + xfree(cur); ++ signal(SIGALRM, old_alarm); + return NULL; + case 0: /* child */ + if (setgid(getgid()) == -1) +@@ -1927,6 +1933,8 @@ + /* allow EINTR again */ + OsReleaseSignals (); + ++ signal(SIGALRM, old_alarm); ++ + return pid == -1 ? -1 : pstat; + } + --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/229_GL-_Update_for_Mesa_changes.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/229_GL-_Update_for_Mesa_changes.patch @@ -0,0 +1,20 @@ +From: Daniel Stone +Date: Wed, 28 Mar 2007 10:03:32 +0000 (+0300) +Subject: GL: Update for Mesa changes +X-Git-Tag: xorg-server-1.3.99.0 +X-Git-Url: http://gitweb.freedesktop.org/?p=xorg/xserver.git;a=commitdiff;h=85220446359a75ea2c359b418b4051c04eea739c + +GL: Update for Mesa changes +Added s_fragprog.c to fix the build. +--- + +--- a/GL/mesa/swrast/Makefile.am ++++ b/GL/mesa/swrast/Makefile.am +@@ -34,6 +34,7 @@ nodist_libswrast_la_SOURCES = s_aaline.c + s_drawpix.c \ + s_feedback.c \ + s_fog.c \ ++ s_fragprog.c \ + s_imaging.c \ + s_lines.c \ + s_logic.c \ --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/18_execinfo_configured.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/18_execinfo_configured.patch @@ -0,0 +1,29 @@ +From: Daniel Stone +Date: Sat, 12 Aug 2006 16:25:06 +0000 (+0300) +Subject: configure.ac: fix execinfo.h test (Debian #363218) +X-Git-Url: http://gitweb.freedesktop.org/?p=xorg/xserver.git;a=commitdiff;h=5a3488ccac8e5dabd9fc98bc41ef178ead1b2faf + +configure.ac: fix execinfo.h test (Debian #363218) +Define HAVE_EXECINFO_H as well as HAVE_BACKTRACE, when we find execinfo.h. +--- + +--- a/configure.ac ++++ b/configure.ac +@@ -174,6 +174,7 @@ dnl glibc backtrace support check (hw/xf + AC_CHECK_HEADER([execinfo.h],[ + AC_CHECK_LIB(c, backtrace, [ + AC_DEFINE(HAVE_BACKTRACE, 1, [Has backtrace support]) ++ AC_DEFINE(HAVE_EXECINFO_H, 1, [Have execinfo.h]) + ])] + ) + +--- a/include/xorg-config.h.in ++++ b/include/xorg-config.h.in +@@ -109,4 +109,7 @@ + /* Name of the period field in struct kbd_repeat */ + #undef LNX_KBD_PERIOD_NAME + ++/* Have execinfo.h */ ++#undef HAVE_EXECINFO_H ++ + #endif /* _XORG_CONFIG_H_ */ --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/10_dont_look_in_home_for_config.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/10_dont_look_in_home_for_config.diff @@ -0,0 +1,10 @@ +--- hw/xfree86/common/xf86Config.c.orig 2006-03-11 20:19:59.000000000 +0200 ++++ hw/xfree86/common/xf86Config.c 2006-03-11 20:20:04.000000000 +0200 +@@ -98,7 +98,6 @@ + "/etc/X11/%R," "%P/etc/X11/%R," \ + "%E," "%F," \ + "/etc/X11/%F," "%P/etc/X11/%F," \ +- "%D/%X," \ + "/etc/X11/%X-%M," "/etc/X11/%X," "/etc/%X," \ + "%P/etc/X11/%X.%H," "%P/etc/X11/%X-%M," \ + "%P/etc/X11/%X," \ --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/202_Add_quirk_for_Acer_AL1706_monitor_to_force_60hz_refresh.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/202_Add_quirk_for_Acer_AL1706_monitor_to_force_60hz_refresh.patch @@ -0,0 +1,28 @@ +From: Keith Packard +Date: Fri, 13 Apr 2007 18:04:29 +0000 (-0300) +Subject: Add quirk for Acer AL1706 monitor to force 60hz refresh. +X-Git-Tag: xorg-server-1.3.99.0 +X-Git-Url: http://gitweb.freedesktop.org/?p=xorg/xserver.git;a=commitdiff;h=cc4eb1c7ea1bace7ed69cfd80c99d22933282ae1 + +Add quirk for Acer AL1706 monitor to force 60hz refresh. + +This Acer monitor reports support for 75hz refresh via EDID, and yet when +that rate is delivered, the monitor does not sync and reports out of range. +Use the existing 60hz quirk for this monitor. +(cherry picked from commit 1328a288e9030a472a915077160f090d1afd4126) +--- + +--- a/hw/xfree86/modes/xf86EdidModes.c ++++ b/hw/xfree86/modes/xf86EdidModes.c +@@ -82,6 +82,11 @@ static Bool quirk_prefer_large_60 (int s + DDC->vendor.prod_id == 1516) + return TRUE; + ++ /* Acer AL1706 */ ++ if (memcmp (DDC->vendor.name, "ACR", 4) == 0 && ++ DDC->vendor.prod_id == 44358) ++ return TRUE; ++ + return FALSE; + } + --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/92_xprint-security-holes-fix.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/92_xprint-security-holes-fix.patch @@ -0,0 +1,158 @@ +diff -ruN xorg-server-1.0.2-old/hw/xprint/config/C/print/attributes/printer xorg-server-1.0.2/hw/xprint/config/C/print/attributes/printer +--- xorg-server-old/hw/xprint/config/C/print/attributes/printer 2004-04-24 04:46:58.000000000 +1000 ++++ xorg-server/hw/xprint/config/C/print/attributes/printer 2006-04-14 21:38:06.000000000 +1000 +@@ -22,19 +22,18 @@ + + + # Sample entry for the "PSspooldir" model +-# Just add a printer called "xp_ps_spooldir_tmp_Xprintjobs" to "Xprinters" ++# Just add a printer called "xp_ps_spooldir_HOME_Xprintjobs" to "Xprinters" + # and you will get an extra printer which files the PostScript jobs +-# in the "/tmp/Xprintjobs/" directory. +-xp_ps_spooldir_tmp_Xprintjobs.xp-model-identifier: PSspooldir ++# in the "$HOME/Xprintjobs/" directory. ++xp_ps_spooldir_HOME_Xprintjobs.xp-model-identifier: PSspooldir + + # Sample entry for the "PS2PDFspooldir-GS" model +-# Just add a printer called "xp_pdf_spooldir_tmp_Xprintjobs" to "Xprinters" ++# Just add a printer called "xp_pdf_spooldir_HOME_Xprintjobs" to "Xprinters" + # and you will get an extra printer which convertes the PostScript jobs +-# to PDF using "ps2pdf" and files them into the "/tmp/Xprintjobs/" directory. ++# to PDF using "ps2pdf" and files them into the "$HOME/Xprintjobs/" directory. + # NOTE: Future versions of Xprint will use the PDF DDX instead directly + # instead of relying on GhostScript/ps2pdf... +-xp_pdf_spooldir_tmp_Xprintjobs.xp-model-identifier: PS2PDFspooldir-GS +- ++xp_pdf_spooldir_HOME_Xprintjobs.xp-model-identifier: PS2PDFspooldir-GS + + # IMPORTANT EXAMPLES + # +diff -ruN xorg-server-old/hw/xprint/config/C/print/Makefile.am xorg-server/hw/xprint/config/C/print/Makefile.am +--- xorg-server-old/hw/xprint/config/C/print/Makefile.am 2005-09-29 06:38:42.000000000 +1000 ++++ xorg-server/hw/xprint/config/C/print/Makefile.am 2006-04-14 21:41:10.000000000 +1000 +@@ -4,7 +4,7 @@ + + + Xprinters.ghostscript: $(srcdir)/Xprinters +- sed < $(srcdir)/Xprinters "s/#Printer xp_pdf_spooldir_tmp_Xprintjobs/Printer xp_pdf_spooldir_tmp_Xprintjobs/" > Xprinters.ghostscript ++ sed < $(srcdir)/Xprinters "s/#Printer xp_pdf_spooldir_HOME_Xprintjobs/Printer xp_pdf_spooldir_HOME_Xprintjobs/" > Xprinters.ghostscript + + + +diff -ruN xorg-server-old/hw/xprint/config/C/print/models/PS2PDFspooldir-GS/model-config xorg-server/hw/xprint/config/C/print/models/PS2PDFspooldir-GS/model-config +--- xorg-server-old/hw/xprint/config/C/print/models/PS2PDFspooldir-GS/model-config 2004-04-24 04:52:27.000000000 +1000 ++++ xorg-server/hw/xprint/config/C/print/models/PS2PDFspooldir-GS/model-config 2006-04-14 21:50:19.000000000 +1000 +@@ -20,7 +20,7 @@ + # + # Attributes supported for this printer model + *content-orientations-supported: portrait landscape reverse-portrait reverse-landscape +-*descriptor: PDF job spool dir /tmp/Xprintjobs ++*descriptor: PDF job spool dir $HOME/Xprintjobs + *document-formats-supported: {POSTSCRIPT 2} + *input-trays-supported: + *medium-source-sizes-supported: \ +@@ -45,7 +45,7 @@ + } + + *plexes-supported: simplex duplex tumble +-*printer-model: "PDF job spool dir /tmp/Xprintjobs" ++*printer-model: "PDF job spool dir $HOME/Xprintjobs" + # 75, 100, 120, 150, 180, 200, 240, 300, 360, 400, 600, 720, + # 940, 1200 and 2440 are supported DPI values, we limit it here + # to some common values: +@@ -60,7 +60,7 @@ + # Note that "%xpconfigdir%" is currently only supported in Xprt servers build + # from xprint.mozdev.org sources, other platforms have replace it with the + # absolute path name to the script +-*xp-spooler-command: %xpconfigdir%/C/print/models/PS2PDFspooldir-GS/ps2pdf_spooltodir.sh -d /tmp/Xprintjobs -s .pdf -u 077 -p %printer-name% -c %copy-count% -t %job-name% -o "%options%" ++*xp-spooler-command: %xpconfigdir%/C/print/models/PS2PDFspooldir-GS/ps2pdf_spooltodir.sh -s .pdf -u 077 -p %printer-name% -c %copy-count% -t %job-name% -o "%options%" + + # NOTE: xp-psddx-* attributes are EXPERIMENTAL for now. + # xp-psddx-download-fonts defines which fonts should be downloaded as outlines +diff -ruN xorg-server-old/hw/xprint/config/C/print/models/PS2PDFspooldir-GS/ps2pdf_spooltodir.sh xorg-server/hw/xprint/config/C/print/models/PS2PDFspooldir-GS/ps2pdf_spooltodir.sh +--- xorg-server-old/hw/xprint/config/C/print/models/PS2PDFspooldir-GS/ps2pdf_spooltodir.sh 2004-04-24 04:52:27.000000000 +1000 ++++ xorg-server/hw/xprint/config/C/print/models/PS2PDFspooldir-GS/ps2pdf_spooltodir.sh 2006-04-14 21:53:19.000000000 +1000 +@@ -3,7 +3,7 @@ + export PATH + + verbose_msgs="false" +-DEFAULT_SPOOLDIR=/tmp/Xprintjobs ++DEFAULT_SPOOLDIR=`perl -e '@x = getpwuid($>); print $x[7]'`/Xprintjobs + + usage() + { +@@ -74,7 +74,6 @@ + + if [ ! -d "${DEFAULT_SPOOLDIR}" ] ; then + mkdir "${DEFAULT_SPOOLDIR}" +- chmod a+rwxt "${DEFAULT_SPOOLDIR}" + fi + + if [ "${permmask}" != "" ] ; then +diff -ruN xorg-server-old/hw/xprint/config/C/print/models/PSspooldir/model-config xorg-server/hw/xprint/config/C/print/models/PSspooldir/model-config +--- xorg-server-old/hw/xprint/config/C/print/models/PSspooldir/model-config 2004-04-24 04:54:16.000000000 +1000 ++++ xorg-server/hw/xprint/config/C/print/models/PSspooldir/model-config 2006-04-14 21:57:02.000000000 +1000 +@@ -19,7 +19,7 @@ + # + # Attributes supported for this printer model + *content-orientations-supported: portrait landscape reverse-portrait reverse-landscape +-*descriptor: PostScript job spool dir /tmp/Xprintjobs ++*descriptor: PostScript job spool dir $HOME/Xprintjobs + *document-formats-supported: {POSTSCRIPT 2} + *input-trays-supported: + *medium-source-sizes-supported: \ +@@ -44,7 +44,7 @@ + } + + *plexes-supported: simplex duplex tumble +-*printer-model: "PostScript job spool dir /tmp/Xprintjobs" ++*printer-model: "PostScript job spool dir $HOME/Xprintjobs" + # 75, 100, 120, 150, 180, 200, 240, 300, 360, 400, 600, 720, + # 940, 1200 and 2440 are supported DPI values, we limit it here + # to some common values: +@@ -59,7 +59,7 @@ + # Note that "%xpconfigdir%" is currently only supported in Xprt servers build + # from xprint.mozdev.org sources, other platforms have replace it with the + # absolute path name to the script +-*xp-spooler-command: %xpconfigdir%/C/print/models/PSspooldir/spooltodir.sh -d /tmp/Xprintjobs -s .ps -u 077 -p %printer-name% -c %copy-count% -t %job-name% -o "%options%" ++*xp-spooler-command: %xpconfigdir%/C/print/models/PSspooldir/spooltodir.sh -s .ps -u 077 -p %printer-name% -c %copy-count% -t %job-name% -o "%options%" + + # NOTE: xp-psddx-* attributes are EXPERIMENTAL for now. + # xp-psddx-download-fonts defines which fonts should be downloaded as outlines +diff -ruN xorg-server-old/hw/xprint/config/C/print/models/PSspooldir/spooltodir.sh xorg-server/hw/xprint/config/C/print/models/PSspooldir/spooltodir.sh +--- xorg-server-old/hw/xprint/config/C/print/models/PSspooldir/spooltodir.sh 2004-04-24 04:54:16.000000000 +1000 ++++ xorg-server/hw/xprint/config/C/print/models/PSspooldir/spooltodir.sh 2006-04-14 21:58:06.000000000 +1000 +@@ -3,7 +3,7 @@ + export PATH + + verbose_msgs="false" +-DEFAULT_SPOOLDIR=/tmp/Xprintjobs ++DEFAULT_SPOOLDIR=`perl -e '@x = getpwuid($>); print $x[7]'`/Xprintjobs + + usage() + { +@@ -74,7 +74,6 @@ + + if [ ! -d "${DEFAULT_SPOOLDIR}" ] ; then + mkdir "${DEFAULT_SPOOLDIR}" +- chmod a+rwxt "${DEFAULT_SPOOLDIR}" + fi + + if [ "${permmask}" != "" ] ; then +diff -ruN xorg-server-old/hw/xprint/config/C/print/Xprinters xorg-server/hw/xprint/config/C/print/Xprinters +--- xorg-server-old/hw/xprint/config/C/print/Xprinters 2004-04-24 04:46:31.000000000 +1000 ++++ xorg-server/hw/xprint/config/C/print/Xprinters 2006-04-14 22:04:56.000000000 +1000 +@@ -30,10 +30,10 @@ + + ######################################################################## + # Preconfigured entry for the PSspooldir model +-# (which sends jobs to /tmp/Xprintjobs instead to a physical printer) ++# (which sends jobs to $HOME/Xprintjobs instead to a physical printer) + ######################################################################## +-#Printer xp_pdf_spooldir_tmp_Xprintjobs +-Printer xp_ps_spooldir_tmp_Xprintjobs ++#Printer xp_pdf_spooldir_HOME_Xprintjobs ++Printer xp_ps_spooldir_HOME_Xprintjobs + + ######################################################################## + # Add individual printers to the list of printers managed by the --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/02_libvgahw_gcc4_volatile_fix.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/02_libvgahw_gcc4_volatile_fix.diff @@ -0,0 +1,70 @@ +gcc4 has issues with libvgahw.a. This patch is a workaround stolen from +https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=161242 (by Olivier +Baudron). See also Debian #318218 and bugs merged to it + +Index: xorg-server/hw/xfree86/vgahw/vgaHW.c +=================================================================== +--- xorg-server.orig/hw/xfree86/vgahw/vgaHW.c 2006-11-26 01:24:48.000000000 +0100 ++++ xorg-server/hw/xfree86/vgahw/vgaHW.c 2006-11-26 01:25:44.000000000 +0100 +@@ -434,12 +434,16 @@ + static void + mmioWriteAttr(vgaHWPtr hwp, CARD8 index, CARD8 value) + { ++ volatile CARD8 tmp; ++ + if (hwp->paletteEnabled) + index &= ~0x20; + else + index |= 0x20; + +- (void) minb(hwp->IOBase + VGA_IN_STAT_1_OFFSET); ++ /* gcc-4.0 -O2 is broken : needs a volatile assignment */ ++ tmp = minb(hwp->IOBase + VGA_IN_STAT_1_OFFSET); ++ + moutb(VGA_ATTR_INDEX, index); + moutb(VGA_ATTR_DATA_W, value); + } +@@ -447,12 +451,16 @@ + static CARD8 + mmioReadAttr(vgaHWPtr hwp, CARD8 index) + { ++ volatile CARD8 tmp; ++ + if (hwp->paletteEnabled) + index &= ~0x20; + else + index |= 0x20; + +- (void) minb(hwp->IOBase + VGA_IN_STAT_1_OFFSET); ++ /* gcc-4.0 -O2 is broken : needs a volatile assignment */ ++ tmp = minb(hwp->IOBase + VGA_IN_STAT_1_OFFSET); ++ + moutb(VGA_ATTR_INDEX, index); + return minb(VGA_ATTR_DATA_R); + } +@@ -472,7 +480,11 @@ + static void + mmioEnablePalette(vgaHWPtr hwp) + { +- (void) minb(hwp->IOBase + VGA_IN_STAT_1_OFFSET); ++ volatile CARD8 tmp; ++ ++ /* gcc-4.0 -O2 is broken : needs a volatile assignment */ ++ tmp = minb(hwp->IOBase + VGA_IN_STAT_1_OFFSET); ++ + moutb(VGA_ATTR_INDEX, 0x00); + hwp->paletteEnabled = TRUE; + } +@@ -480,7 +492,11 @@ + static void + mmioDisablePalette(vgaHWPtr hwp) + { +- (void) minb(hwp->IOBase + VGA_IN_STAT_1_OFFSET); ++ volatile CARD8 tmp; ++ ++ /* gcc-4.0 -O2 is broken : needs a volatile assignment */ ++ tmp = minb(hwp->IOBase + VGA_IN_STAT_1_OFFSET); ++ + moutb(VGA_ATTR_INDEX, 0x20); + hwp->paletteEnabled = FALSE; + } --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/fix_CVE-2008-1377.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/fix_CVE-2008-1377.patch @@ -0,0 +1,88 @@ +diff --git a/Xext/security.c b/Xext/security.c +index ba057de..f34c463 100644 +--- a/Xext/security.c ++++ b/Xext/security.c +@@ -651,15 +651,19 @@ SProcSecurityGenerateAuthorization( + register char n; + CARD32 *values; + unsigned long nvalues; ++ int values_offset; + + swaps(&stuff->length, n); + REQUEST_AT_LEAST_SIZE(xSecurityGenerateAuthorizationReq); + swaps(&stuff->nbytesAuthProto, n); + swaps(&stuff->nbytesAuthData, n); + swapl(&stuff->valueMask, n); +- values = (CARD32 *)(&stuff[1]) + +- ((stuff->nbytesAuthProto + (unsigned)3) >> 2) + +- ((stuff->nbytesAuthData + (unsigned)3) >> 2); ++ values_offset = ((stuff->nbytesAuthProto + (unsigned)3) >> 2) + ++ ((stuff->nbytesAuthData + (unsigned)3) >> 2); ++ if (values_offset > ++ stuff->length - (sz_xSecurityGenerateAuthorizationReq >> 2)) ++ return BadLength; ++ values = (CARD32 *)(&stuff[1]) + values_offset; + nvalues = (((CARD32 *)stuff) + stuff->length) - values; + SwapLongs(values, nvalues); + return ProcSecurityGenerateAuthorization(client); +diff --git a/record/record.c b/record/record.c +index 0ed8f84..9a166d6 100644 +--- a/record/record.c ++++ b/record/record.c +@@ -2656,7 +2656,7 @@ SProcRecordQueryVersion(ClientPtr client) + } /* SProcRecordQueryVersion */ + + +-static void ++static int + SwapCreateRegister(xRecordRegisterClientsReq *stuff) + { + register char n; +@@ -2667,11 +2667,17 @@ SwapCreateRegister(xRecordRegisterClientsReq *stuff) + swapl(&stuff->nClients, n); + swapl(&stuff->nRanges, n); + pClientID = (XID *)&stuff[1]; ++ if (stuff->nClients > stuff->length - (sz_xRecordRegisterClientsReq >> 2)) ++ return BadLength; + for (i = 0; i < stuff->nClients; i++, pClientID++) + { + swapl(pClientID, n); + } ++ if (stuff->nRanges > stuff->length - (sz_xRecordRegisterClientsReq >> 2) ++ - stuff->nClients) ++ return BadLength; + RecordSwapRanges((xRecordRange *)pClientID, stuff->nRanges); ++ return Success; + } /* SwapCreateRegister */ + + +@@ -2679,11 +2685,13 @@ static int + SProcRecordCreateContext(ClientPtr client) + { + REQUEST(xRecordCreateContextReq); ++ int status; + register char n; + + swaps(&stuff->length, n); + REQUEST_AT_LEAST_SIZE(xRecordCreateContextReq); +- SwapCreateRegister((pointer)stuff); ++ if ((status = SwapCreateRegister((pointer)stuff)) != Success) ++ return status; + return ProcRecordCreateContext(client); + } /* SProcRecordCreateContext */ + +@@ -2692,11 +2700,13 @@ static int + SProcRecordRegisterClients(ClientPtr client) + { + REQUEST(xRecordRegisterClientsReq); ++ int status; + register char n; + + swaps(&stuff->length, n); + REQUEST_AT_LEAST_SIZE(xRecordRegisterClientsReq); +- SwapCreateRegister((pointer)stuff); ++ if ((status = SwapCreateRegister((pointer)stuff)) != Success) ++ return status; + return ProcRecordRegisterClients(client); + } /* SProcRecordRegisterClients */ + --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/fix_CVE-2008-0006.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/fix_CVE-2008-0006.patch @@ -0,0 +1,24 @@ +commit 8e133d96740d010a4fd969a8188e6e71fb2cafe2 +Author: Matthieu Herrb +Date: Thu Jan 17 15:29:06 2008 +0100 + + Fix for CVE-2008-0006 - PCF Font parser buffer overflow. + +Index: xorg-server-1.3.0.0.dfsg/dix/dixfonts.c +=================================================================== +--- xorg-server-1.3.0.0.dfsg.orig/dix/dixfonts.c 2008-01-17 10:34:17.000000000 -0800 ++++ xorg-server-1.3.0.0.dfsg/dix/dixfonts.c 2008-01-17 10:34:22.000000000 -0800 +@@ -329,6 +329,13 @@ + err = BadFontName; + goto bail; + } ++ /* check values for firstCol, lastCol, firstRow, and lastRow */ ++ if (pfont->info.firstCol > pfont->info.lastCol || ++ pfont->info.firstRow > pfont->info.lastRow || ++ pfont->info.lastCol - pfont->info.firstCol > 255) { ++ err = AllocError; ++ goto bail; ++ } + if (!pfont->fpe) + pfont->fpe = fpe; + pfont->refcnt++; --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/138_fedora_xserver-1.3.0-default-dpi.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/138_fedora_xserver-1.3.0-default-dpi.patch @@ -0,0 +1,12 @@ +diff -up xorg-server-1.3.0.0/hw/xfree86/common/xf86Priv.h.jx xorg-server-1.3.0.0/hw/xfree86/common/xf86Priv.h +--- xorg-server-1.3.0.0/hw/xfree86/common/xf86Priv.h.jx 2006-11-16 13:01:24.000000000 -0500 ++++ xorg-server-1.3.0.0/hw/xfree86/common/xf86Priv.h 2007-08-09 16:55:02.000000000 -0400 +@@ -120,7 +120,7 @@ extern RootWinPropPtr *xf86RegisteredPro + #define DEFAULT_LOG_VERBOSE 3 + #endif + #ifndef DEFAULT_DPI +-#define DEFAULT_DPI 75 ++#define DEFAULT_DPI 100 + #endif + + #define DEFAULT_UNRESOLVED TRUE --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/236_Syncmaster_226_monitor_needs_60Hz_refresh_10545.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/236_Syncmaster_226_monitor_needs_60Hz_refresh_10545.patch @@ -0,0 +1,36 @@ +From: Erik Andrén +Date: Wed, 18 Apr 2007 04:34:47 +0000 (-0700) +Subject: Syncmaster 226 monitor needs 60Hz refresh (#10545). +X-Git-Tag: xorg-server-1.3.99.0 +X-Git-Url: http://gitweb.freedesktop.org/?p=xorg/xserver.git;a=commitdiff;h=53fb42e65c2b2ff58a4a324b7f05cff8a587720a + +Syncmaster 226 monitor needs 60Hz refresh (#10545). + +I've managed to solve my own bug (#10545) by applying the following +patch to the xserver. + +Please apply. + + +This monitor is "Vista Certified". I wonder if this is a pure coincidence... + + +With kind regards +Erik Andrén +(cherry picked from commit a63704f14a1d97b9a00fef6fa290e74e51b9732b) +--- + +--- a/hw/xfree86/modes/xf86EdidModes.c ++++ b/hw/xfree86/modes/xf86EdidModes.c +@@ -86,6 +86,11 @@ static Bool quirk_prefer_large_60 (int s + if (memcmp (DDC->vendor.name, "ACR", 4) == 0 && + DDC->vendor.prod_id == 44358) + return TRUE; ++ ++ /* Samsung SyncMaster 226BW */ ++ if (memcmp (DDC->vendor.name, "SAM", 4) == 0 && ++ DDC->vendor.prod_id == 638) ++ return TRUE; + + return FALSE; + } --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/11_define_XFree86Server.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/11_define_XFree86Server.diff @@ -0,0 +1,15 @@ +Some drivers need XFree86Server defined. +Not submitted upstream. + +Index: xorg-server/include/xorg-server.h.in +=================================================================== +--- xorg-server.orig/include/xorg-server.h.in 2007-07-24 20:57:34.000000000 +0200 ++++ xorg-server/include/xorg-server.h.in 2007-07-24 21:12:36.000000000 +0200 +@@ -238,4 +238,7 @@ + /* Loadable XFree86 server awesomeness */ + #undef XFree86LOADER + ++/* Some drivers need that */ ++#undef XFree86Server ++ + #endif /* _XORG_SERVER_H_ */ --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/100_security_fdo-bug-7447.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/100_security_fdo-bug-7447.diff @@ -0,0 +1,135 @@ +>From f98dfec79dadb70fa7bba84e7335f92b3a73dc02 Mon Sep 17 00:00:00 2001 +From: Keith Packard +Date: Sat, 1 Sep 2007 21:14:22 -0700 +Subject: [PATCH] [COMPOSITE] Composite used for pixmap population on redirect. (Bug #7447) + +compNewPixmap copies bits from the parent window to the redirected child +pixmap to populate the pixmap with reasonable data. It cannot always use +CopyArea as that only works across matching depths. Use Composite when +the depths do not match. +--- + composite/compalloc.c | 73 ++++++++++++++++++++++++++++++++++++------------ + composite/compint.h | 3 ++ + composite/compwindow.c | 2 +- + 3 files changed, 59 insertions(+), 19 deletions(-) + +Index: xorg-server/composite/compalloc.c +=================================================================== +--- xorg-server.orig/composite/compalloc.c 2007-09-04 03:07:03.000000000 +0200 ++++ xorg-server/composite/compalloc.c 2007-09-04 03:08:13.000000000 +0200 +@@ -462,7 +462,6 @@ + ScreenPtr pScreen = pWin->drawable.pScreen; + WindowPtr pParent = pWin->parent; + PixmapPtr pPixmap; +- GCPtr pGC; + + pPixmap = (*pScreen->CreatePixmap) (pScreen, w, h, pWin->drawable.depth); + +@@ -472,25 +471,63 @@ + pPixmap->screen_x = x; + pPixmap->screen_y = y; + +- pGC = GetScratchGC (pWin->drawable.depth, pScreen); +- +- /* +- * Copy bits from the parent into the new pixmap so that it will +- * have "reasonable" contents in case for background None areas. +- */ +- if (pGC) ++ if (pParent->drawable.depth == pWin->drawable.depth) + { +- XID val = IncludeInferiors; ++ GCPtr pGC = GetScratchGC (pWin->drawable.depth, pScreen); + +- ValidateGC(&pPixmap->drawable, pGC); +- dixChangeGC (serverClient, pGC, GCSubwindowMode, &val, NULL); +- (*pGC->ops->CopyArea) (&pParent->drawable, +- &pPixmap->drawable, +- pGC, +- x - pParent->drawable.x, +- y - pParent->drawable.y, +- w, h, 0, 0); +- FreeScratchGC (pGC); ++ /* ++ * Copy bits from the parent into the new pixmap so that it will ++ * have "reasonable" contents in case for background None areas. ++ */ ++ if (pGC) ++ { ++ XID val = IncludeInferiors; ++ ++ ValidateGC(&pPixmap->drawable, pGC); ++ dixChangeGC (serverClient, pGC, GCSubwindowMode, &val, NULL); ++ (*pGC->ops->CopyArea) (&pParent->drawable, ++ &pPixmap->drawable, ++ pGC, ++ x - pParent->drawable.x, ++ y - pParent->drawable.y, ++ w, h, 0, 0); ++ FreeScratchGC (pGC); ++ } ++ } ++ else ++ { ++ PictFormatPtr pSrcFormat = compWindowFormat (pParent); ++ PictFormatPtr pDstFormat = compWindowFormat (pWin); ++ XID inferiors = IncludeInferiors; ++ int error; ++ ++ PicturePtr pSrcPicture = CreatePicture (None, ++ &pParent->drawable, ++ pSrcFormat, ++ CPSubwindowMode, ++ &inferiors, ++ serverClient, &error); ++ ++ PicturePtr pDstPicture = CreatePicture (None, ++ &pPixmap->drawable, ++ pDstFormat, ++ 0, 0, ++ serverClient, &error); ++ ++ if (pSrcPicture && pDstPicture) ++ { ++ CompositePicture (PictOpSrc, ++ pSrcPicture, ++ NULL, ++ pDstPicture, ++ x - pParent->drawable.x, ++ y - pParent->drawable.y, ++ 0, 0, 0, 0, w, h); ++ } ++ if (pSrcPicture) ++ FreePicture (pSrcPicture, 0); ++ if (pDstPicture) ++ FreePicture (pDstPicture, 0); + } + return pPixmap; + } +Index: xorg-server/composite/compint.h +=================================================================== +--- xorg-server.orig/composite/compint.h 2007-09-04 03:07:03.000000000 +0200 ++++ xorg-server/composite/compint.h 2007-09-04 03:08:13.000000000 +0200 +@@ -238,6 +238,9 @@ + #define compCheckTree(s) + #endif + ++PictFormatPtr ++compWindowFormat (WindowPtr pWin); ++ + void + compSetPixmap (WindowPtr pWin, PixmapPtr pPixmap); + +Index: xorg-server/composite/compwindow.c +=================================================================== +--- xorg-server.orig/composite/compwindow.c 2007-09-04 03:07:03.000000000 +0200 ++++ xorg-server/composite/compwindow.c 2007-09-04 03:08:13.000000000 +0200 +@@ -686,7 +686,7 @@ + return 0; + } + +-static PictFormatPtr ++PictFormatPtr + compWindowFormat (WindowPtr pWin) + { + ScreenPtr pScreen = pWin->drawable.pScreen; --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/12_security_policy_in_etc.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/12_security_policy_in_etc.diff @@ -0,0 +1,34 @@ +Index: xorg-server/configure.ac +=================================================================== +--- xorg-server.orig/configure.ac 2007-03-15 00:46:31.000000000 +0100 ++++ xorg-server/configure.ac 2007-03-15 00:57:26.000000000 +0100 +@@ -388,6 +388,9 @@ + AC_ARG_WITH(rgb-path, AS_HELP_STRING([--with-rgb-path=PATH], [Path to RGB database (default: ${datadir}/X11/rgb)]), + [ RGBPATH="$withval" ], + [ RGBPATH="${datadir}/X11/rgb" ]) ++AC_ARG_WITH(serverconfig-path, AS_HELP_STRING([--with-serverconfig-path=PATH], [Path to server config (default: ${libdir}/xserver)]), ++ [ SERVERCONFIG="$withval" ], ++ [ SERVERCONFIG="${libdir}/xserver" ]) + AC_ARG_WITH(dri-driver-path, AS_HELP_STRING([--with-dri-driver-path=PATH], [Path to DRI drivers (default: ${libdir}/dri)]), + [ DRI_DRIVER_PATH="$withval" ], + [ DRI_DRIVER_PATH="${libdir}/dri" ]) +@@ -827,6 +830,7 @@ + + AC_DEFINE_DIR(COMPILEDDEFAULTFONTPATH, FONTPATH, [Default font path]) + AC_DEFINE_DIR(RGB_DB, RGBPATH, [Default RGB path]) ++AC_DEFINE_DIR(SERVERCONFIGdir, SERVERCONFIG, [Server config path]) + AC_DEFINE_DIR(BASE_FONT_PATH, FONTDIR, [Default base font path]) + AC_DEFINE_DIR(DRI_DRIVER_PATH, DRI_DRIVER_PATH, [Default DRI driver path]) + AC_DEFINE_UNQUOTED(XVENDORNAME, ["$VENDOR_STRING"], [Vendor name]) +Index: xorg-server/Xext/Makefile.am +=================================================================== +--- xorg-server.orig/Xext/Makefile.am 2007-03-15 00:09:12.000000000 +0100 ++++ xorg-server/Xext/Makefile.am 2007-03-15 00:57:02.000000000 +0100 +@@ -34,7 +34,6 @@ + xcmisc.c + + # Extra configuration files ship with some extensions +-SERVERCONFIGdir = $(libdir)/xserver + SERVERCONFIG_DATA = + + # Optional sources included if extension enabled by configure.ac rules --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/44_fedora-xephyr-keysym-madness.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/44_fedora-xephyr-keysym-madness.diff @@ -0,0 +1,24 @@ +--- xorg-server-1.2.0/hw/kdrive/ephyr/hostx.c.xephyr-keysym 2007-01-22 22:13:14.000000000 -0500 ++++ xorg-server-1.2.0/hw/kdrive/ephyr/hostx.c 2007-01-29 17:58:00.000000000 -0500 +@@ -77,9 +77,10 @@ + + static int HostXWantDamageDebug = 0; + +-extern KeySym EphyrKeymap[]; ++/* these two need to be 32-bits. do not say KeySym, that way lies madness */ ++extern unsigned int EphyrKeymap[]; ++extern unsigned int kdKeymap[]; + +-extern KeySym kdKeymap[]; + extern int kdMinScanCode; + extern int kdMaxScanCode; + extern int kdMinKeyCode; +@@ -662,7 +663,7 @@ + void + hostx_load_keymap(void) + { +- KeySym *keymap; ++ unsigned int *keymap; + int host_width, min_keycode, max_keycode, width; + int i,j; + --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/238_Update_pci.ids_to_2007-07-16_snapshot.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/238_Update_pci.ids_to_2007-07-16_snapshot.patch @@ -0,0 +1,24062 @@ +From: Alan Coopersmith +Date: Tue, 17 Jul 2007 00:25:59 +0000 (-0700) +Subject: Update pci.ids to 2007-07-16 snapshot +X-Git-Tag: xorg-server-1.3.99.0 +X-Git-Url: http://gitweb.freedesktop.org/?p=xorg/xserver.git;a=commitdiff;h=bbe7ce10fa93017374d7a4611427b70a22d7507a + +Update pci.ids to 2007-07-16 snapshot + +Remove nvidia ids in extrapci.ids that are now in pci.ids +Add nvidia ids to extrapci.ids that are in xf86-video-nv but not pci.ids +--- + +--- a/hw/xfree86/scanpci/extrapci.ids ++++ b/hw/xfree86/scanpci/extrapci.ids +@@ -37,7 +37,23 @@ + + # Some NVIDIA cards that are not in the master pci.ids file yet. + 10de " +- 0147 GeForce 6700 XL +- 0160 GeForce 6500 +- 0169 GeForce 6250 ++ 0095 GeForce 7800 SLI ++ 0194 GeForce 8800 Ultra ++ 0399 GeForce Go 7600 GT ++ 039a Quadro NVS 300M ++ 0400 GeForce 8600 GTS ++ 0402 GeForce 8600 GT ++ 0407 GeForce 8600M GT ++ 040b Quadro NVS 320M ++ 0421 GeForce 8500 GT ++ 0422 GeForce 8400 GS ++ 0423 GeForce 8300 GS ++ 0425 GeForce 8600M GS ++ 0426 GeForce 8400M GT ++ 0427 GeForce 8400M GS ++ 0428 GeForce 8400M G ++ 0429 Quadro NVS 140M ++ 042a Quadro NVS 130M ++ 042b Quadro NVS 135M ++ + +--- a/hw/xfree86/scanpci/pci.ids ++++ b/hw/xfree86/scanpci/pci.ids +@@ -11,7 +11,7 @@ + # This file can be distributed under either the GNU General Public License + # (version 2 or higher) or the 3-clause BSD License. + # +-# Daily snapshot on Thu 2007-01-18 02:05:01 ++# Daily snapshot on Mon 2007-07-16 01:05:02 + # + + # Vendors, devices and subsystems. Please keep sorted. +@@ -65,6 +65,7 @@ + # SpeedStream is Efficient Networks, Inc, a Siemens Company + 02ac SpeedStream + 1012 1012 PCMCIA 10/100 Ethernet Card [RTL81xx] ++02e0 XFX Pine Group Inc + 0315 SK-Electronics Co., Ltd. + 0357 TTTech AG + 000a TTP-Monitoring Card V2.0 +@@ -82,6 +83,8 @@ + 0109 F5U409-CU USB/Serial Portable Adapter + 7050 F5D7050 802.11g Wireless USB Adapter + 705c F5D7050 v4 ++058f Alcor Micro Corporation ++ 9254 AU9254 (4-port USB hub) + 05a9 OmniVision + 8519 OV519 series + 05e3 CyberDoor +@@ -111,6 +114,7 @@ + 010e Innovage Mini Digital Camera + 010f SDC-300 Webcam + 2468 CIF Single Chip ++ 2600 PAC7311 + 2603 Philips Webcam SPC500NC + 2608 Maxell MaxCam RotaWeb + 09c1 Arris +@@ -141,6 +145,7 @@ + 0001 PCI to EISA Bridge + 0002 PCI to ISA Bridge + 0046 Smart Array 64xx ++ 0e11 4091 Smart Array 6i + 0e11 409a Smart Array 641 + 0e11 409b Smart Array 642 + 0e11 409c Smart Array 6400 +@@ -326,9 +331,11 @@ + 0041 53C1035ZC PCI-X Fusion-MPT Dual Ultra320 SCSI + 0050 SAS1064 PCI-X Fusion-MPT SAS + 0054 SAS1068 PCI-X Fusion-MPT SAS ++ 1028 1f09 PowerEdge 860 SAS 5i/R + 0055 SAS1068 PCI-X Fusion-MPT SAS + 1033 8336 SAS1068 +- 0056 SAS1064E PCI-Express Fusion-MPT SAS ++ 0056 SAS1064ET PCI-Express Fusion-MPT SAS ++ 0057 M1064E MegaRAID SAS + 0058 SAS1068E PCI-Express Fusion-MPT SAS + 005a SAS1066E PCI-Express Fusion-MPT SAS + 005c SAS1064A PCI-X Fusion-MPT SAS +@@ -341,16 +348,21 @@ + 1000 1010 MegaRAID SATA 350-8ELP + 1000 1011 MegaRAID SATA 350-4ELP + 1000 1012 MegaRAID SAS 8704ELP ++ 1000 1016 MegaRAID SAS 8880EM2 + 1014 0363 MegaRAID SAS PCI Express ROMB + 1014 0364 SystemX MegaRAID SAS 8808E + 1014 0365 SystemX MegaRAID SAS 8884E ++ 1014 0379 SystemX MegaRAID SAS 8880EM2 + 1028 1f0a PERC 6/E Adapter RAID Controller + 1028 1f0b PERC 6/i Adapter RAID Controller + 1028 1f0c PERC 6/i Integrated RAID Controller + 1028 1f0d CERC 6/i Adapter RAID Controller +- 1028 1f11 CERC 6/i Adapter RAID Controller ++ 1028 1f11 CERC 6/i Integrated RAID Controller + 1043 824d MegaRAID SAS PCI Express ROMB + 1170 002f MegaRAID SAS PCI Express ROMB ++ 8086 1006 RAID Controller SRCSAS28EP ++ 8086 100a RAID Controller SRCSAS28EV ++ 8086 1010 RAID Controller SRCSATA28E + 8086 34cc Integrated RAID Controller SROMBSAS28E + 8086 34cd Integrated RAID Controller SROMBSAS28E + 0062 SAS1078 PCI-Express Fusion-MPT SAS +@@ -453,10 +465,10 @@ + 1002 ATI Technologies Inc + 3150 M24 1P [Radeon Mobility X600] + 3152 M22 [Radeon Mobility X300] +- 3154 M24 1T [FireGL M24 GL] ++ 3154 M24GL [Mobility FireGL V3200] + 3e50 RV380 0x3e50 [Radeon X600] + 3e54 RV380 0x3e54 [FireGL V3200] +- 3e70 RV380 [Radeon X600] Secondary ++ 3e70 RV380 [Radeon X600] (Secondary) + 4136 Radeon IGP 320 M + 4137 Radeon IGP330/340/350 + 4144 R300 AD [Radeon 9500 Pro] +@@ -466,18 +478,18 @@ + 4148 R350 AH [Radeon 9800] + 4149 R350 AI [Radeon 9800] + 414a R350 AJ [Radeon 9800] +- 414b R350 AK [Fire GL X2] ++ 414b R350 AK [FireGL X2] + 4150 RV350 AP [Radeon 9600] + 1002 0002 R9600 Pro primary (Asus OEM for HP) + 1002 0003 R9600 Pro secondary (Asus OEM for HP) + 1002 4722 All-in-Wonder 2006 AGP Edition +- 1458 4024 Giga-Byte GV-R96128D Primary ++ 1458 4024 Giga-Byte GV-R96128D (Primary) + 148c 2064 PowerColor R96A-C3N + 148c 2066 PowerColor R96A-C3N + 174b 7c19 Sapphire Atlantis Radeon 9600 Pro +- 174b 7c29 GC-R9600PRO Primary [Sapphire] ++ 174b 7c29 GC-R9600PRO [Sapphire] (Primary) + 17ee 2002 Radeon 9600 256Mb Primary +- 18bc 0101 GC-R9600PRO Primary ++ 18bc 0101 GC-R9600PRO (Primary) + 4151 RV350 AQ [Radeon 9600] + 1043 c004 A9600SE + 4152 RV350 AR [Radeon 9600] +@@ -490,10 +502,10 @@ + 4153 RV350 AS [Radeon 9550] + 1043 010c A9550GE/TD + 1462 932c 865PE Neo2-V (MS-6788) mainboard +- 4154 RV350 AT [Fire GL T2] +- 4155 RV350 AU [Fire GL T2] +- 4156 RV350 AV [Fire GL T2] +- 4157 RV350 AW [Fire GL T2] ++ 4154 RV350 AT [FireGL T2] ++ 4155 RV350 AU [FireGL T2] ++ 4156 RV350 AV [FireGL T2] ++ 4157 RV350 AW [FireGL T2] + 4158 68800AX [Mach32] + 4164 R300 AD [Radeon 9500 Pro] (Secondary) + 4165 R300 AE [Radeon 9700 Pro] (Secondary) +@@ -502,11 +514,11 @@ + 4170 RV350 AP [Radeon 9600] (Secondary) + 1002 0003 R9600 Pro secondary (Asus OEM for HP) + 1002 4723 All-in-Wonder 2006 AGP Edition (Secondary) +- 1458 4025 Giga-Byte GV-R96128D Secondary ++ 1458 4025 Giga-Byte GV-R96128D (Secondary) + 148c 2067 PowerColor R96A-C3N (Secondary) +- 174b 7c28 GC-R9600PRO Secondary [Sapphire] +- 17ee 2003 Radeon 9600 256Mb Secondary +- 18bc 0100 GC-R9600PRO Secondary ++ 174b 7c28 GC-R9600PRO [Sapphire] (Secondary) ++ 17ee 2003 Radeon 9600 256Mb (Secondary) ++ 18bc 0100 GC-R9600PRO (Secondary) + 4171 RV350 AQ [Radeon 9600] (Secondary) + 1043 c005 A9600SE (Secondary) + 4172 RV350 AR [Radeon 9600] (Secondary) +@@ -533,16 +545,18 @@ + 4345 EHCI USB Controller + 4347 OHCI USB Controller #1 + 4348 OHCI USB Controller #2 +- 4349 ATI Dual Channel Bus Master PCI IDE Controller ++ 4349 Dual Channel Bus Master PCI IDE Controller + 434d IXP AC'97 Modem +- 4353 ATI SMBus ++ 4353 SMBus + 4354 215CT [Mach64 CT] + 4358 210888CX [Mach64 CX] +- 4363 ATI SMBus +- 436e ATI 436E Serial ATA Controller ++ 4363 SMBus ++ 436e 436E Serial ATA Controller + 4370 IXP SB400 AC'97 Audio Controller + 1025 0079 Aspire 5024WLMMi ++ 1025 0091 Aspire 5032WXMi + 103c 308b MX6125 ++ 105b 0c81 Realtek ALC 653 + 107b 0300 MX6421 + 4371 IXP SB400 PCI-PCI Bridge + 103c 308b MX6125 +@@ -557,19 +571,19 @@ + 4375 IXP SB400 USB Host Controller + 1025 0080 Aspire 5024WLMMi + 103c 308b MX6125 +- 4376 Standard Dual Channel PCI IDE Controller ATI ++ 4376 Standard Dual Channel PCI IDE Controller + 1025 0080 Aspire 5024WLMMi + 103c 308b MX6125 + 4377 IXP SB400 PCI-ISA Bridge + 1025 0080 Aspire 5024WLMi + 103c 308b MX6125 +- 4378 ATI SB400 - AC'97 Modem Controller ++ 4378 SB400 AC'97 Modem Controller + 1025 0080 Aspire 5024WLMMi + 103c 308b MX6125 +- 4379 ATI 4379 Serial ATA Controller +- 437a ATI 437A Serial ATA Controller +- 1002 4379 ATI 4379 Serial ATA Controller +- 1002 437a ATI 437A Serial ATA Controller ++ 4379 4379 Serial ATA Controller ++ 437a 437A Serial ATA Controller ++ 1002 4379 4379 Serial ATA Controller ++ 1002 437a 437A Serial ATA Controller + 14f1 8800 Leadtek WinFast TV2000XP Expert + 437b SB450 HDA Audio + 1734 10b8 Realtek High Definition Audio +@@ -741,6 +755,7 @@ + 1014 0517 ThinkPad T30 + 1028 00e6 Radeon Mobility M7 LW (Dell Inspiron 8100) + 1028 012a Latitude C640 ++ 1043 1622 Mobility Radeon M7 (L3C/S) + 144d c006 Radeon Mobility M7 LW in vpr Matrix 170B4 + 4c58 Radeon RV200 LX [Mobility FireGL 7800 M7] + 4c59 Radeon Mobility M6 LY +@@ -754,9 +769,10 @@ + 4c64 Radeon R250 Ld [Radeon Mobility 9000 M9] + 4c65 Radeon R250 Le [Radeon Mobility 9000 M9] + 4c66 Radeon R250 [Mobility FireGL 9000] ++ 1014 054d Thinkpad T41 + 4c67 Radeon R250 Lg [Radeon Mobility 9000 M9] + # Secondary chip to the Lf +- 4c6e Radeon R250 Ln [Radeon Mobility 9000 M9] [Secondary] ++ 4c6e Radeon R250 Ln [Radeon Mobility 9000 M9] (Secondary) + 4d46 Rage Mobility M4 AGP + 4d4c Rage Mobility M4 AGP + 4e44 Radeon R300 ND [Radeon 9700 Pro] +@@ -770,7 +786,7 @@ + 4e48 Radeon R350 [Radeon 9800 Pro] + 4e49 Radeon R350 [Radeon 9800] + 4e4a RV350 NJ [Radeon 9800 XT] +- 4e4b R350 NK [Fire GL X2] ++ 4e4b R350 NK [FireGL X2] + 4e50 RV350 [Mobility Radeon 9600 M10] + 1025 005a TravelMate 290 + 103c 088c NC8000 laptop +@@ -793,7 +809,7 @@ + 4e68 Radeon R350 [Radeon 9800 Pro] (Secondary) + 4e69 Radeon R350 [Radeon 9800] (Secondary) + 4e6a RV350 NJ [Radeon 9800 XT] (Secondary) +- 1002 4e71 ATI Technologies Inc M10 NQ [Radeon Mobility 9600] ++ 1002 4e71 M10 NQ [Radeon Mobility 9600] + 4e71 M10 NQ [Radeon Mobility 9600] (Secondary) + 4f72 RV250 [Radeon 9000 Series] + 4f73 Radeon RV250 [Radeon 9000 Series] (Secondary) +@@ -891,7 +907,7 @@ + 1002 0908 XVR-100 (supplied by Sun) + # The IBM card doubles as an ATI PCI video adapter + 1014 029a Remote Supervisor Adapter II (RSA2) +- 1014 02c8 IBM eServer xSeries server mainboard ++ 1014 02c8 eServer xSeries server mainboard + 1028 019a PowerEdge SC1425 + 103c 1292 Radeon 7000 + 1458 4002 RV100 QY [RADEON 7000 PRO MAYA AV Series] +@@ -956,7 +972,8 @@ + 5453 Rage 128 Pro Ultra TS + 5454 Rage 128 Pro Ultra TT + 5455 Rage 128 Pro Ultra TU +- 5460 M22 [Radeon Mobility M300] ++ 5460 M22 [Mobility Radeon X300] ++ 1775 1100 CR11/VR11 Single Board Computer + 5462 M24 [Radeon Mobility X600] + 5464 M22 [FireGL GL] + 5548 R423 UH [Radeon X800 (PCIE)] +@@ -965,18 +982,18 @@ + 554b R423 UK [Radeon X800SE (PCIE)] + 554d R430 [Radeon X800 XL] (PCIe) + 554f R430 [Radeon X800 (PCIE)] +- 5550 R423 [Fire GL V7100] ++ 5550 R423 [FireGL V7100] + 5551 R423 [FireGL V5100 (PCIE)] + 5552 R423 UR [FireGL V5100 (PCIE)] + 5554 R423 UT [FireGL V7100 (PCIE)] +- 5569 R423 UI [Radeon X800PRO (PCIE)] Secondary ++ 5569 R423 UI [Radeon X800PRO (PCIE)] (Secondary) + 556b Radeon R423 UK (PCIE) [X800 SE] (Secondary) +- 556d R430 [Radeon X800 XL] (PCIe) Secondary +- 556f R430 [Radeon X800 (PCIE) Secondary] +- 5571 R423GL-SE ATI FIREGL V5100 PCI-EX Secondary ++ 556d R430 [Radeon X800 XL] (PCIe) (Secondary) ++ 556f R430 [Radeon X800] (PCIE) (Secondary) ++ 5571 R423GL-SE [FireGL V5100 (PCIE)] (Secondary) + 564a M26 [Mobility FireGL V5000] + 564b M26 [Mobility FireGL V5000] +- 564f M26 [Radeon Mobility X700 XL] (PCIE) ++ 564f M26 [Radeon Mobility X700 XL (PCIE)] + 5652 M26 [Radeon Mobility X700] + 5653 Radeon Mobility X700 (PCIE) + 1025 0080 Aspire 5024WLMi +@@ -992,6 +1009,7 @@ + 5835 RS300M AGP [Radeon Mobility 9100IGP] + 5838 Radeon 9100 IGP AGP Bridge + 5940 RV280 [Radeon 9200 PRO] (Secondary) ++ 17af 2021 Excalibur Radeon 9250 (Secondary) + 5941 RV280 [Radeon 9200] (Secondary) + 1458 4019 Gigabyte Radeon 9200 + 174b 7c12 Sapphire Radeon 9200 +@@ -1001,14 +1019,15 @@ + 5950 RS480 Host Bridge + 1025 0080 Aspire 5024WLMMi + 103c 308b MX6125 +- 5951 ATI Radeon Xpress 200 (RS480/RS482/RX480/RX482) Chipset - Host bridge ++ 5951 Radeon Xpress 200 (RS480/RS482/RX480/RX482) Chipset - Host bridge + 5952 RD580 [CrossFire Xpress 3200] Chipset Host Bridge + 5954 RS480 [Radeon Xpress 200G Series] + 1002 5954 RV370 [Radeon Xpress 200G Series] +- 5955 ATI Radeon XPRESS 200M 5955 (PCIE) +- 1002 5955 RS480 0x5955 [ATI Radeon XPRESS 200M 5955 (PCIE)] ++ 5955 Radeon XPRESS 200M 5955 (PCIE) ++ 1002 5955 RS480 0x5955 [Radeon XPRESS 200M 5955 (PCIE)] + 103c 308b MX6125 + 5960 RV280 [Radeon 9200 PRO] ++ 17af 2020 Excalibur Radeon 9250 + 5961 RV280 [Radeon 9200] + 1002 2f72 All-in-Wonder 9200 Series + 1019 4c30 Radeon 9200 VIVO +@@ -1021,7 +1040,7 @@ + 18bc 0053 Radeon 9200 Game Buster VIVO + 5962 RV280 [Radeon 9200] + 5964 RV280 [Radeon 9200 SE] +- 1002 5964 ATI Radeon 9200 SE, 64-bit 128MB DDR, 200/166MHz ++ 1002 5964 Radeon 9200 SE, 64-bit 128MB DDR, 200/166MHz + 1043 c006 ASUS Radeon 9200 SE / TD / 128M + 1458 4018 Radeon 9200 SE + 1458 4032 Radeon 9200 SE 128MB +@@ -1071,6 +1090,7 @@ + 5d44 RV280 [Radeon 9200 SE] (Secondary) + 1458 4019 Radeon 9200 SE (Secondary) + 1458 4032 Radeon 9200 SE 128MB ++ 147b 6190 R9200SE-DT (Secondary) + 174b 7c12 Sapphire Radeon 9200 SE (Secondary) + 1787 5965 Excalibur 9200SE VIVO 128M (Secondary) + 17af 2013 Radeon 9200 SE Excalibur (Secondary) +@@ -1082,8 +1102,8 @@ + 5d4d R480 [Radeon X850XT Platinum (PCIE)] + 5d4f R480 [Radeon X800 GTO (PCIE)] + 5d52 R480 [Radeon X850XT (PCIE)] (Primary) +- 1002 0b12 PowerColor X850XT PCIe Primary +- 1002 0b13 PowerColor X850XT PCIe Secondary ++ 1002 0b12 PowerColor X850XT PCIe (Primary) ++ 1002 0b13 PowerColor X850XT PCIe (Secondary) + 5d57 R423 5F57 [Radeon X800XT (PCIE)] + 5d6d R480 [Radeon X850XT Platinum (PCIE)] (Secondary) + 5d6f R480 [Radeon X800 GTO (PCIE)] (Secondary) +@@ -1097,7 +1117,7 @@ + 5e4d RV410 [Radeon X700 (PCIE)] + 148c 2116 PowerColor Bravo X700 + 5e4f RV410 [Radeon X700] +- 5e6b RV410 [Radeon X700 Pro (PCIE)] Secondary ++ 5e6b RV410 [Radeon X700 Pro (PCIE)] (Secondary) + 5e6d RV410 [Radeon X700 (PCIE)] (Secondary) + 148c 2117 PowerColor Bravo X700 + 5f57 R423 [Radeon X800XT (PCIE)] +@@ -1106,7 +1126,7 @@ + 7100 R520 [Radeon X1800] + 7102 M58 [Radeon Mobility X1800] + 7103 M58 [Mobility FireGL V7200] +- 7104 R520 GL ATI FireGL V7200 Primary ++ 7104 R520GL [FireGL V7200] (Primary) + 7105 R520 [FireGL] + 7106 M58 [Mobility FireGL V7100] + 7108 M58 [Radeon Mobility X1800] +@@ -1117,66 +1137,69 @@ + 710b R520 [Radeon X1800] + 710c R520 [Radeon X1800] + 7120 R520 [Radeon X1800] (Secondary) +- 7124 R520 GL ATI FireGL V7200 Secondary ++ 7124 R520GL [FireGL V7200] (Secondary) + 7129 R520 [Radeon X1800] (Secondary) + 1002 0323 All-in-Wonder X1800XL (Secondary) + 1002 0d03 Radeon X1800 CrossFire Edition (Secondary) + 7140 RV515 [Radeon X1600] +- 7142 RV515 PRO [ATI Radeon X1300/X1550 Series] ++ 7142 RV515 PRO [Radeon X1300/X1550 Series] + 1002 0322 All-in-Wonder 2006 PCI-E Edition + 7143 RV505 [Radeon X1550 Series] + 7145 Radeon Mobility X1400 + 7146 RV515 [Radeon X1300] + 1002 0322 All-in-Wonder 2006 PCI-E Edition + 7147 RV505 [Radeon X1550 64-bit] +- 7149 M52 [ATI Mobility Radeon X1300] +- 714a M52 [ATI Mobility Radeon X1300] +- 714b M52 [ATI Mobility Radeon X1300] +- 714c M52 [ATI Mobility Radeon X1300] ++ 7149 M52 [Mobility Radeon X1300] ++ 714a M52 [Mobility Radeon X1300] ++ 714b M52 [Mobility Radeon X1300] ++ 714c M52 [Mobility Radeon X1300] + 714d RV515 [Radeon X1300] +- 714e RV515 [Radeon X1300] +- 7152 RV515 GL ATI FireGL V3300 Primary ++ 714e RV515LE [Radeon X1300] ++ 7152 RV515GL [FireGL V3300] (Primary) + 7153 RV515GL [FireGL V3350] + 715e RV515 [Radeon X1300] + 715f RV505 CE [Radeon X1550 64-bit] +- 7162 RV515 PRO [ATI Radeon X1300/X1550 Series Secondary] ++ 7162 RV515 PRO [Radeon X1300/X1550 Series] (Secondary) + 1002 0323 All-in-Wonder 2006 PCI-E Edition (Secondary) + 7166 RV515 [Radeon X1300] (Secondary) + 1002 0323 All-in-Wonder 2006 PCI-E Edition (Secondary) +- 7172 RV515 GL ATI FireGL V3300 Secondary +- 7173 RV515GL [FireGL V3350 Secondary] +- 7180 RV516 [ATI Radeon X1300/X1550 Series] +- 7181 RV516 XT Radeon X1600 Series Primary +- 7183 RV516 [ATI Radeon X1300/X1550 Series] +- 7187 RV516 [ATI Radeon X1300/X1550 Series] +- 7188 M64-S [ATI Mobility Radeon X2300] +- 718a ATI Mobility Radeon X2300 +- 718c M62CSP64 [ATI Mobility Radeon X1350] +- 718d M64CSP128 [ATI Mobility Radeon X1450] ++ 716e RV515LE [Radeon X1300] Secondary ++ 7172 RV515GL [FireGL V3300] (Secondary) ++ 7173 RV515GL [FireGL V3350] (Secondary) ++ 7180 RV516 [Radeon X1300/X1550 Series] ++ 7181 RV516 XT Radeon X1600 Series (Primary) ++ 7183 RV516 [Radeon X1300/X1550 Series] ++ 7187 RV516 [Radeon X1300/X1550 Series] ++ 7188 M64-S [Mobility Radeon X2300] ++ 718a Mobility Radeon X2300 ++ 718c M62CSP64 [Mobility Radeon X1350] ++ 718d M64CSP128 [Mobility Radeon X1450] + 7193 RV516 [Radeon X1550 Series] + 719b FireMV 2250 + 719f RV516LE [Radeon X1550 64-bit] +- 71a0 RV516 [ATI Radeon X1300/X1550 Series Secondary] +- 71a1 RV516 XT Radeon X1600 Series Secondary +- 71a3 RV516 [ATI Radeon X1300 Pro Secondary] +- 71a7 RV516 [ATI Radeon X1300/X1550 Series Secondary] +- 71bb FireMV 2250 Secondary ++ 71a0 RV516 [Radeon X1300/X1550 Series] (Secondary) ++ 71a1 RV516 XT Radeon X1600 Series (Secondary) ++ 71a3 RV516 [Radeon X1300 Pro] (Secondary) ++ 71a7 RV516 [Radeon X1300/X1550 Series] (Secondary) ++ 71bb FireMV 2250 (Secondary) + 71c0 RV530 [Radeon X1600] + 71c2 RV530 [Radeon X1600] +- 71c4 M56GL [ATI Mobility FireGL V5200] ++ 71c4 M56GL [Mobility FireGL V5200] + 17aa 2007 ThinkPad T60p + 71c5 M56P [Radeon Mobility X1600] +- 71c6 RV530LE [Radeon X1600] ++ 71c6 RV530LE [Radeon X1600/X1650 PRO] + 71c7 RV535 [Radeon X1650 Series] + 71ce RV530LE [Radeon X1600] +- 71d5 M66-P ATI Mobility Radeon X1700 +- 71d6 M66-XT ATI Mobility Radeon X1700 ++ 71d4 M56GL [Mobility FireGL V5250] ++ 71d5 M66-P [Mobility Radeon X1700] ++ 71d6 M66-XT [Mobility Radeon X1700] + 71de RV530LE [Radeon X1600] + 71e0 RV530 [Radeon X1600] (Secondary) + 71e2 RV530 [Radeon X1600] (Secondary) ++ 71e6 RV530LE [Radeon X1650 PRO] (Secondary) + 71e7 RV535 [Radeon X1650 Series] +- 7210 M71 [ATI Mobility Radeon X2100] +- 7211 M71 [ATI Mobility Radeon X2100 Secondary] ++ 7210 M71 [Mobility Radeon X2100] ++ 7211 M71 [Mobility Radeon X2100] (Secondary) + 7240 R580 [Radeon X1900] + 7241 R580 [Radeon X1900] + 7242 R580 [Radeon X1900] +@@ -1186,32 +1209,33 @@ + 7246 R580 [Radeon X1900] + 7247 R580 [Radeon X1900] + 7248 R580 [Radeon X1900] +- 7249 R580 [Radeon X1900 XT] Primary ++ 7249 R580 [Radeon X1900 XT] (Primary) + 724a R580 [Radeon X1900] + 724b R580 [Radeon X1900] +- 1002 0b12 Radeon X1900 Primary Display Device +- 1002 0b13 Radeon X1900 Secondary Display Device ++ 1002 0b12 Radeon X1900 (Primary) ++ 1002 0b13 Radeon X1900 (Secondary) + 724c R580 [Radeon X1900] + 724d R580 [Radeon X1900] + 724e R580 [AMD Stream Processor] +- 7269 R580 [Radeon X1900 XT] Secondary ++ 7269 R580 [Radeon X1900 XT] (Secondary) + 726b R580 [Radeon X1900] +- 726e R580 [AMD Stream Processor Secondary] +- 7280 ATI Radeon X1950 Pro Primary (PCIE) +- 7288 ATI Radeon X1950 GT +- 7291 ATI Radeon X1650 XT Primary (PCIE) ++ 726e R580 [AMD Stream Processor] (Secondary) ++ 7280 Radeon X1950 Pro (Primary) (PCIE) ++ 7288 Radeon X1950 GT ++ 7291 Radeon X1650 XT (Primary) (PCIE) + 7293 Radeon X1650 Series +- 72a0 ATI Radeon X1950 Pro Secondary (PCIE) +- 72a8 ATI Radeon X1950 GT Secondary +- 72b1 ATI Radeon X1650 XT Secondary (PCIE) +- 72b3 ATI Radeon X1650 Series Secondary ++ 72a0 Radeon X1950 Pro (Secondary) (PCIE) ++ 72a8 Radeon X1950 GT (Secondary) ++ 72b1 Radeon X1650 XT (Secondary) (PCIE) ++ 72b3 Radeon X1650 Series (Secondary) + 7833 Radeon 9100 IGP Host Bridge + 7834 Radeon 9100 PRO IGP + 7835 Radeon Mobility 9200 IGP + 7838 Radeon 9100 IGP PCI/AGP Bridge +- 791e ATI Radeon Xpress 1200 Series +- 791f ATI Radeon Xpress 1200 Series +- 793f ATI Radeon Xpress 1200 Series Secondary ++ 7919 Radeon X1200 Series Audio Controller ++ 791e Radeon X1200 Series ++ 791f Radeon X1200 Series ++ 793f Radeon X1200 Series (Secondary) + 7c37 RV350 AQ [Radeon 9600 SE] + cab0 AGP Bridge [IGP 320M] + cab2 RS200/RS200M AGP Bridge [IGP 340M] +@@ -1285,13 +1309,18 @@ + 0035 DP83065 [Saturn] 10/100/1000 Ethernet Controller + 0500 SCx200 Bridge + 0501 SCx200 SMI +- 0502 SCx200 IDE +- 0503 SCx200 Audio ++ 0502 SCx200, SC1100 IDE controller ++ 100b 0502 IDE Controller ++ 0503 SCx200, SC1100 Audio Controller ++ 100b 0503 XpressAudio controller + 0504 SCx200 Video + 0505 SCx200 XBus + 0510 SC1100 Bridge +- 0511 SC1100 SMI ++ 100b 0500 GPIO and LPC support bridge ++ 0511 SC1100 SMI & ACPI ++ 100b 0501 SC1100 SMI & ACPI bridge + 0515 SC1100 XBus ++ 100b 0505 SC1100 PCI to XBus bridge + d001 87410 IDE + 100c Tseng Labs Inc + 3202 ET4000/W32p rev A +@@ -1518,7 +1547,7 @@ + 009f PCI 4758 Cryptographic Accelerator + 00a5 ATM Controller (1410a500) + 00a6 ATM 155MBPS MM Controller (1410a600) +- 00b7 256-bit Graphics Rasterizer [Fire GL1] ++ 00b7 256-bit Graphics Rasterizer [FireGL1] + 1092 00b8 FireGL1 AGP 32Mb + 00b8 GXT2000P Graphics Adapter + 00be ATM 622MBPS Controller (1410be00) +@@ -1552,6 +1581,9 @@ + 1014 0259 ServeRAID-5i + 01c1 64bit/66MHz PCI ATM 155 UTP + 01e6 Cryptographic Accelerator ++ 01ef PowerPC 440GP PCI Bridge ++ 1734 102b PCEAS PCI-X Dual Port ESCON Adapter ++ 1734 10f8 PCEAT PCI-Express Dual Port ESCON Adapter + 01ff 10/100 Mbps Ethernet + 0219 Multiport Serial Adapter + 1014 021a Dual RVX +@@ -1572,9 +1604,12 @@ + 02bd Obsidian chipset SCSI controller + 1014 02c1 PCI-X DDR 3Gb SAS Adapter (572A/572C) + 1014 02c2 PCI-X DDR 3Gb SAS RAID Adapter (572B/571D) ++ 1014 0338 PCI-X266 Auxiliary Cache Adapter (575C) + 0302 Winnipeg PCI-X Host Bridge + 0308 CalIOC2 PCI-E Root Port + 0314 ZISC 036 Neural accelerator card ++ 0339 Obsidian-E PCI-E SCSI controller ++ 1014 0360 PCI-E Auxiliary Cache Adapter (57B7) + 3022 QLA3022 Network Adapter + 4022 QLA3022 Network Adapter + ffff MPIC-2 interrupt controller +@@ -1586,6 +1621,10 @@ + 1019 Elitegroup Computer Systems + 101a AT&T GIS (NCR) + 0005 100VG ethernet ++ 1dc1 Bynet ++ 101a 0019 BIC2M ++ 101a 001f BIC4M ++ 101a 0ece BYA4M + 101b Vitesse Semiconductor + 101c Western Digital + 0193 33C193A +@@ -1632,6 +1671,16 @@ + 1101 K8 [Athlon64/Opteron] Address Map + 1102 K8 [Athlon64/Opteron] DRAM Controller + 1103 K8 [Athlon64/Opteron] Miscellaneous Control ++ 1200 Family 10h [Opteron, Athlon64, Sempron] HyperTransport Configuration ++ 1201 Family 10h [Opteron, Athlon64, Sempron] Address Map ++ 1202 Family 10h [Opteron, Athlon64, Sempron] DRAM Controller ++ 1203 Family 10h [Opteron, Athlon64, Sempron] Miscellaneous Control ++ 1204 Family 10h [Opteron, Athlon64, Sempron] Link Control ++ 1300 Family 11h HyperTransport Configuration ++ 1301 Family 11h Address Map ++ 1302 Family 11h DRAM Controller ++ 1303 Family 11h Miscellaneous Control ++ 1304 Family 11h Link Control + 2000 79c970 [PCnet32 LANCE] + 1014 2000 NetFinity 10/100 Fast Ethernet + 1022 2000 PCnet - Fast 79C971 +@@ -1661,8 +1710,7 @@ + 2003 Am 1771 MBW [Alchemy] + 2020 53c974 [PCscsi] + 2040 79c974 +-# CS5536 [Geode companion] Host Bridge +- 2080 Conrad Kostecki ++ 2080 CS5536 [Geode companion] Host Bridge + 2081 Geode LX Video + 2082 Geode LX AES Security Block + 208f CS5536 GeodeLink PCI South Bridge +@@ -1881,7 +1929,7 @@ + 0015 PowerEdge Expandable RAID controller 5i + 1028 1f01 PERC 5/E Adapter RAID Controller + 1028 1f02 PERC 5/i Adapter RAID Controller +- 1f03 PERC 5/i ++ 1028 1f03 PERC 5/i Adapter RAID Controller + 1029 Siemens Nixdorf IS + 102a LSI Logic + 0000 HYDRA +@@ -2037,6 +2085,7 @@ + 2538 Millenium P650 PCIe + 102b 08c7 Millennium P650 PCIe 128MB + 102b 0907 Millennium P650 PCIe 64MB ++ 102b 0947 Parhelia APVe + 102b 1047 Millennium P650 LP PCIe 128MB + 102b 1087 Millennium P650 LP PCIe 64MB + 102b 2538 Parhelia APVe +@@ -2179,6 +2228,7 @@ + 0180 RAID bus controller 180 SATA/PATA [SiS] + 0181 SATA + 0182 182 SATA/RAID Controller ++ 1734 1095 D2030-A1 + 0186 AHCI Controller (0106) + 0190 190 Gigabit Ethernet Adapter + 0191 191 Gigabit Ethernet Adapter +@@ -2222,6 +2272,7 @@ + 0755 755 Host + 0760 760/M760 Host + 0761 761/M761 Host ++ 1734 1099 D2030-A1 Motherboard + 0900 SiS900 PCI Fast Ethernet + 1019 0a14 K7S5A motherboard + 1039 0900 SiS900 10/100 Ethernet Adapter +@@ -2250,6 +2301,7 @@ + 1039 5513 SiS5513 EIDE Controller (A,B step) + 1043 8035 CUSI-FX motherboard + 1462 7010 MS-6701 motherboard ++ 1734 1095 D2030-A1 Motherboard + 5517 5517 + 5571 5571 + 5581 5581 Pentium Chipset +@@ -2276,6 +2328,9 @@ + 1569 6326 SiS6326 GUI Accelerator + 6330 661/741/760 PCI/AGP or 662/761Gx PCIE VGA Display Adapter + 1039 6330 [M]661xX/[M]741[GX]/[M]760 PCI/AGP VGA Adapter ++ 1043 8113 SiS Real 256E (ASUS P5S800-VM motherboard) ++ 1458 d000 SiS661FX GUI 2D/3D Accelerator ++ 1734 1099 D2030-A1 + 6350 770/670 PCIE VGA Display Adapter + 6351 771/671 PCIE VGA Display Adapter + 7001 USB 1.0 Controller +@@ -2283,14 +2338,17 @@ + 1039 7000 Onboard USB Controller + 1462 5470 K7SOM+ 5.2C Motherboard + 1462 7010 MS-6701 motherboard ++ 1734 1095 D2030-A1 Motherboard + 7002 USB 2.0 Controller + 1462 7010 MS-6701 motherboard + 1509 7002 Onboard USB Controller ++ 1734 1095 D2030-A1 + 7007 FireWire Controller + 1462 701d MS-6701 + 7012 AC'97 Sound Controller + 1462 7010 MS-6701 motherboard + 15bd 1001 DFI 661FX motherboard ++ 1734 109f D2030-A1 Motherboard + # There are may be different modem codecs here (Intel537 compatible and incompatible) + 7013 AC'97 Modem Controller + 7016 SiS7016 PCI Fast Ethernet Adapter +@@ -2302,6 +2360,7 @@ + 1025 000e SiS PCI Audio Accelerator + 1025 0018 SiS PCI Audio Accelerator + 1039 7018 SiS PCI Audio Accelerator ++ 1043 1453 SiS PCI Audio Accelerator + 1043 800b SiS PCI Audio Accelerator + 1054 7018 SiS PCI Audio Accelerator + 107d 5330 SiS PCI Audio Accelerator +@@ -2379,6 +2438,7 @@ + 12fa BCM4306 802.11b/g Wireless LAN Controller + 1302 RMP-3 Shared Memory Driver + 1303 RMP-3 (Remote Management Processor) ++ 1361 BCM4312 802.11a/b/g WLAN Controller + 2910 E2910A PCIBus Exerciser + 2925 E2925A 32 Bit, 33 MHzPCI Exerciser & Analyzer + 3080 Pavilion ze2028ea +@@ -2387,6 +2447,11 @@ + 3220 Smart Array P600 + 103c 3225 3 Gb/s SAS RAID + 3230 Smart Array Controller ++ 103c 3223 Smart Array P800 ++ 103c 3234 P400 SAS Controller ++ 103c 3235 P400i SAS Controller ++ 103c 3237 E500 SAS Controller ++ 3238 Smart Array E200i (SAS Controller) + 4030 zx2 System Bus Adapter + 4031 zx2 I/O Controller + 4037 PCIe Local Bus Adapter +@@ -2714,7 +2779,7 @@ + ac56 PCI1510 PC card Cardbus Controller + 1014 0512 Thinkpad R50e model 1634 + 1014 0528 ThinkPad R40e (2684-HVG) Cardbus Controller +- 17aa 2012 Thinkpad R60e model 0657 ++ 17aa 2012 ThinkPad T60/R60 series + ac60 PCI2040 PCI to DSP Bridge Controller + 175c 5100 ASI51xx Audio Adapter + 175c 6100 ASI61xx Audio Adapter +@@ -2764,6 +2829,8 @@ + 1052 ?Young Micro Systems + 1053 Young Micro Systems + 1054 Hitachi, Ltd ++ 3011 ColdFusion 3e Chipset Processor to I/O Controller ++ 3012 ColdFusion 3e Chipset Memory Controller Hub + 1055 Efar Microsystems + 9130 SLC90E66 [Victory66] IDE + 9460 SLC90E66 [Victory66] ISA +@@ -2782,6 +2849,8 @@ + 0012 MPC8548 [PowerQUICC III] + 0100 MC145575 [HFC-PCI] + 0431 KTI829c 100VG ++ 1073 Nokia N770 ++ 1219 Nokia N800 + 1801 DSP56301 Digital Signal Processor + 14fb 0101 Transas Radar Imitator Board [RIM] + 14fb 0102 Transas Radar Imitator Board [RIM-2] +@@ -2858,7 +2927,7 @@ + 1059 Teknor Industrial Computers Inc + 105a Promise Technology, Inc. + 0d30 PDC20265 (FastTrak100 Lite/Ultra100) +- 1043 8042 ASUS AV7266-E South Bridge Promise RAID ++ 1043 8042 AV7266-E South Bridge Promise RAID + 105a 4d33 Ultra100 + 0d38 20263 + 105a 4d39 Fasttrak66 +@@ -2916,13 +2985,15 @@ + 7275 PDC20277 (SBFastTrak133 Lite) + 8002 SATAII150 SX8 + 8350 80333 [SuperTrak EX8350/EX16350], 80331 [SuperTrak EX8300/EX16300] +- 8650 IOP1348 [SuperTrak EX4650/EX8650/EX8654] ++ 8650 81348 [SuperTrak EX4650/EX8650/EX8654/EX4650EL] + 105a 4600 SuperTrak EX4650 ++ 105a 4610 SuperTrak EX4650EL + 105a 8601 SuperTrak EX8650 + 105a 8602 SuperTrak EX8654 + c350 80333 [SuperTrak EX12350] + e350 80333 [SuperTrak EX24350] + 105b Foxconn International, Inc. ++ 0c4d SiS AC'97 Sound Controller + 105c Wipro Infotech Limited + 105d Number 9 Computer Company + 2309 Imagine 128 +@@ -3267,12 +3338,16 @@ + 1648 [bge] Gigabit Ethernet + 2bad GEM + 5000 Simba Advanced PCI Bridge ++ 108e 5000 Netra AX1105-500 + 5043 SunPCI Co-processor ++ 676e SunPCiIII ++ 7063 SunPCiII / SunPCiIIpro + 8000 Psycho PCI Bus Module + 8001 Schizo PCI Bus Module + 8002 Schizo+ PCI Bus Module + a000 Ultra IIi + a001 Ultra IIe ++ 108e a001 Netra AX1105-500 + a801 Tomatillo PCI Bus Module + abba Cassini 10/100/1000 + 108f Systemsoft +@@ -3598,11 +3673,15 @@ + 1147 VScom 020 2 port parallel adaptor + 2540 IXXAT CAN-Interface PC-I 04/PCI + 2724 Thales PCSM Security Card ++ 6520 PCI6520 PCI-X to PCI-X bridge + 6540 PCI6540/6466 PCI-PCI bridge (transparent mode) ++ 1775 1100 CR11 Single Board Computer + 4c53 10e0 PSL09 PrPMC + 6541 PCI6540/6466 PCI-PCI bridge (non-transparent mode, primary side) ++ 1775 1100 CR11 Single Board Computer + 4c53 10e0 PSL09 PrPMC + 6542 PCI6540/6466 PCI-PCI bridge (non-transparent mode, secondary side) ++ 1775 1100 CR11 Single Board Computer + 4c53 10e0 PSL09 PrPMC + 8111 PEX 8111 PCI Express-to-PCI Bridge + 8114 PEX 8114 PCI Express-to-PCI/PCI-X Bridge +@@ -3672,14 +3751,16 @@ + 12c7 4001 Intel Dialogic DM/V960-4T1 PCI + 12d9 0002 PCI Prosody Card rev 1.5 + 14b4 d100 Dektec DTA-100 ++ 14b4 d114 Dektec DTA-120 + 16df 0011 PIKA PrimeNet MM PCI + 16df 0012 PIKA PrimeNet MM cPCI 8 + 16df 0013 PIKA PrimeNet MM cPCI 8 (without CAS Signaling) + 16df 0014 PIKA PrimeNet MM cPCI 4 + 16df 0015 PIKA Daytona MM + 16df 0016 PIKA InLine MM +- 9056 Francois ++ 9056 9056 PCI I/O Accelerator + 10b5 2979 CellinkBlade 11 - CPCI board VoATM AAL1 ++ 14b4 d140 Dektec DTA-140 + 9060 9060 + 906d 9060SD + 125c 0640 Aries 16000P +@@ -3731,6 +3812,7 @@ + 0910 3C910-A01 + 1006 MINI PCI type 3B Data Fax Modem + 1007 Mini PCI 56k Winmodem ++ 10b7 615b Mini PCI 56K Modem + 10b7 615c Mini PCI 56K Modem + 1201 3c982-TXM 10/100baseTX Dual Port A [Hydra] + 1202 3c982-TXM 10/100baseTX Dual Port B [Hydra] +@@ -3819,9 +3901,10 @@ + 9200 3c905C-TX/TX-M [Tornado] + 1028 0095 3C920 Integrated Fast Ethernet Controller + 1028 0097 3C920 Integrated Fast Ethernet Controller ++ 1028 00b4 OptiPlex GX110 + 1028 00fe Optiplex GX240 + 1028 012a 3C920 Integrated Fast Ethernet Controller [Latitude C640] +- 10b7 1000 3C905C-TX Fast Etherlink for PC Management NIC ++ 10b7 1000 3C905CX-TX/TX-M Fast Etherlink for PC Management NIC + 10b7 7000 10/100 Mini PCI Ethernet Adapter + 10f1 2466 Tiger MPX S2466 (3C920 Integrated Fast Ethernet Controller) + 9201 3C920B-EMB Integrated Fast Ethernet Controller [Tornado] +@@ -4157,8 +4240,8 @@ + 1102 1029 3D Blaster RIVA TNT2 Ultra + 1102 102f 3D Blaster RIVA TNT2 Ultra + 14af 5820 Maxi Gamer Xentor 32 +- 002a NV5 [Riva TnT2] +- 002b NV5 [Riva TnT2] ++ 002a NV5 [Riva TNT2] ++ 002b NV5 [Riva TNT2] + 002c NV6 [Vanta/Vanta LT] + 1043 0200 AGP-V3800 Combat SDRAM + 1043 0201 AGP-V3800 Combat +@@ -4196,7 +4279,7 @@ + 0041 NV40 [GeForce 6800] + 1043 817b V9999 Gamer Edition + 0042 NV40.2 [GeForce 6800 LE] +- 0043 NV40.3 ++ 0043 NV40.3 [GeForce 6800 XE] + 0044 NV40 [GeForce 6800 XT] + 0045 NV40 [GeForce 6800 GT] + 0046 NV40 [GeForce 6800 GT] +@@ -4207,52 +4290,54 @@ + 004d NV40GL [Quadro FX 4000] + 004e NV40GL [Quadro FX 4000] + 0050 CK804 ISA Bridge +- 1043 815a K8N4-E Mainboard ++ 1043 815a K8N4-E or A8N-E Mainboard + 1458 0c11 GA-K8N Ultra-9 Mainboard + 1462 7100 MSI K8N Diamond + 147b 1c1a KN8-Ultra Mainboard + 0051 CK804 ISA Bridge + 0052 CK804 SMBus +- 1043 815a K8N4-E Mainboard ++ 1043 815a K8N4-E or A8N-E Mainboard + 1458 0c11 GA-K8N Ultra-9 Mainboard + 1462 7100 MSI K8N Diamond + 147b 1c1a KN8-Ultra Mainboard + 0053 CK804 IDE +- 1043 815a K8N4-E Mainboard ++ 1043 815a K8N4-E or A8N-E Mainboard + 1458 5002 GA-K8N Ultra-9 Mainboard + 1462 7100 MSI K8N Diamond + 147b 1c1a KN8-Ultra Mainboard + 0054 CK804 Serial ATA Controller ++ 1043 815a A8N-E Mainboard + 1458 b003 GA-K8N Ultra-9 Mainboard + 1462 7100 MSI K8N Diamond + 147b 1c1a KN8-Ultra Mainboard + 0055 CK804 Serial ATA Controller +- 1043 815a K8N4-E Mainboard ++ 1043 815a K8N4-E or A8N-E Mainboard + 1458 b003 GA-K8N Ultra-9 Mainboard + 147b 1c1a KN8-Ultra Mainboard + 0056 CK804 Ethernet Controller + 0057 CK804 Ethernet Controller +- 1043 8141 K8N4-E Mainboard ++ 1043 8141 K8N4-E or A8N-E Mainboard + 1458 e000 GA-K8N Ultra-9 Mainboard + 1462 7100 MSI K8N Diamond + 147b 1c1a KN8-Ultra Mainboard + 0058 CK804 AC'97 Modem + 0059 CK804 AC'97 Audio Controller +- 1043 812a K8N4-E Mainboard ++ 1043 812a K8N4-E or A8N-E Mainboard + 147b 1c1a KN8-Ultra Mainboard + 005a CK804 USB Controller +- 1043 815a K8N4-E Mainboard ++ 1043 815a K8N4-E or A8N-E Mainboard + 1458 5004 GA-K8N Ultra-9 Mainboard + 1462 7100 MSI K8N Diamond + 147b 1c1a KN8-Ultra Mainboard + 005b CK804 USB Controller +- 1043 815a K8N4-E Mainboard ++ 1043 815a K8N4-E or A8N-E Mainboard + 1458 5004 GA-K8N Ultra-9 Mainboard + 1462 7100 MSI K8N Diamond + 147b 1c1a KN8-Ultra Mainboard + 005c CK804 PCI Bridge + 005d CK804 PCIE Bridge + 005e CK804 Memory Controller ++ 1043 815a A8N-E Mainboard + 10f1 2891 Thunder K8SRE Mainboard + 1458 5000 GA-K8N Ultra-9 Mainboard + 1462 7100 MSI K8N Diamond +@@ -4301,15 +4386,15 @@ + 0091 G70 [GeForce 7800 GTX] + 0092 G70 [GeForce 7800 GT] + 0093 G70 [GeForce 7800 GS] +- 0098 GeForce Go 7800 +- 0099 GE Force Go 7800 GTX +- 009d G70GL [Quadro FX4500] ++ 0098 G70 [GeForce Go 7800] ++ 0099 G70 [GeForce Go 7800 GTX] ++ 009d G70GL [Quadro FX 4500] + 00a0 NV5 [Aladdin TNT2] + 14af 5810 Maxi Gamer Xentor + 00c0 NV41 [GeForce 6800 GS] + 00c1 NV41.1 [GeForce 6800] + 00c2 NV41.2 [GeForce 6800 LE] +- 00c3 NV42 [Geforce 6800 XT] ++ 00c3 NV42 [GeForce 6800 XT] + 00c8 NV41.8 [GeForce Go 6800] + 00c9 NV41.9 [GeForce Go 6800 Ultra] + 00cc NV41 [Quadro FX Go1400] +@@ -4329,59 +4414,70 @@ + 00da nForce3 Audio + 00dd nForce3 PCI Bridge + 00df CK8S Ethernet Controller ++ 1043 80a7 K8N-E + 105b 0c43 Winfast NF3250K8AA + 147b 1c0b NF8 Mainboard + 00e0 nForce3 250Gb LPC Bridge ++ 1043 813f K8N-E + 10de 0c11 Winfast NF3250K8AA + 1462 7030 K8N Neo-FSR v2.0 + 147b 1c0b NF8 Mainboard + 00e1 nForce3 250Gb Host Bridge ++ 1043 813f K8N-E + 1462 7030 K8N Neo-FSR v2.0 + 147b 1c0b NF8 Mainboard + 00e2 nForce3 250Gb AGP Host to PCI Bridge + 00e3 CK8S Serial ATA Controller (v2.5) ++ 1043 813f K8N-E + 105b 0c43 Winfast NF3250K8AA + 147b 1c0b NF8 Mainboard + 00e4 nForce 250Gb PCI System Management ++ 1043 813f K8N-E + 105b 0c43 Winfast NF3250K8AA + 1462 7030 K8N Neo-FSR v2.0 + 147b 1c0b NF8 Mainboard + 00e5 CK8S Parallel ATA Controller (v2.5) ++ 1043 813f K8N-E + 105b 0c43 Winfast NF3250K8AA + 1462 7030 K8N Neo-FSR v2.0 + 147b 1c0b NF8 Mainboard + 00e6 CK8S Ethernet Controller + 00e7 CK8S USB Controller ++ 1043 813f K8N-E + 105b 0c43 Winfast NF3250K8AA + 1462 7030 K8N Neo-FSR v2.0 + 147b 1c0b NF8 Mainboard + 00e8 nForce3 EHCI USB 2.0 Controller ++ 1043 813f K8N-E + 105b 0c43 Winfast NF3250K8AA + 1462 7030 K8N Neo-FSR v2.0 + 147b 1c0b NF8 Mainboard + 00ea nForce3 250Gb AC'97 Audio Controller ++ 1043 819d K8N-E + 105b 0c43 Winfast NF3250K8AA ++ 1462 b010 K8N Neo-FSR v2.0 + 147b 1c0b NF8 Mainboard + 00ed nForce3 250Gb PCI-to-PCI Bridge + 00ee CK8S Serial ATA Controller (v2.5) +- 00f0 NV40 [GeForce 6800/GeForce 6800 Ultra] +- 00f1 NV43 [GeForce 6600/GeForce 6600 GT] ++ 00f0 NV40 [GeForce 6800 Ultra] ++ 00f1 NV43 [GeForce 6600 GT] + 1043 81a6 N6600GT TD 128M AGP ++ 1458 3150 GV-N66T128VP + 1682 2119 GeForce 6600 GT AGP 128MB DDR3 DUAL DVI TV +- 00f2 NV43 [GeForce 6600/GeForce 6600 GT] ++ 00f2 NV43 [GeForce 6600] + 1682 211c GeForce 6600 256MB DDR DUAL DVI TV + 00f3 NV43 [GeForce 6200] + 00f4 NV43 [GeForce 6600 LE] + 00f5 G70 [GeForce 7800 GS] +- 00f6 NV43 [GeForce 6600 GS] ++ 00f6 NV43 [GeForce 6800 GS] + 1682 217e XFX GeForce 6800 XTreme 256MB DDR3 AGP + 00f8 NV45GL [Quadro FX 3400/4400] +- 00f9 NV40 [GeForce 6800 Ultra/GeForce 6800 GT] ++ 00f9 NV45 [GeForce 6800 GTO] + 1682 2120 GEFORCE 6800 GT PCI-E + 00fa NV36 [GeForce PCX 5750] + 00fb NV35 [GeForce PCX 5900] + 00fc NV37GL [Quadro FX 330/GeForce PCX 5300] +- 00fd NV37GL [Quadro FX 330/Quadro NVS280] ++ 00fd NV37GL [Quadro PCI-E Series] + 00fe NV38GL [Quadro FX 1300] + 00ff NV18 [GeForce PCX 4300] + 0100 NV10 [GeForce 256 SDR] +@@ -4410,6 +4506,7 @@ + 1048 0c4b GLoria II-64 Pro DVII + 0110 NV11 [GeForce2 MX/MX 400] + 1043 4015 AGP-V7100 Pro ++ 1043 4021 V7100 Deluxe Combo + 1043 4031 V7100 Pro with TV output + 1048 0c60 Gladiac MX + 1048 0c61 Gladiac 511PCI +@@ -4422,20 +4519,23 @@ + 1462 8817 MSI GeForce2 MX400 Pro32S [MS-8817] + 14af 7102 3D Prophet II MX + 14af 7103 3D Prophet II MX Dual-Display +- 0111 NV11DDR [GeForce2 MX 100 DDR/200 DDR] ++ 0111 NV11DDR [GeForce2 MX200] + 0112 NV11 [GeForce2 Go] + 0113 NV11GL [Quadro2 MXR/EX/Go] + 0140 NV43 [GeForce 6600 GT] + 0141 NV43 [GeForce 6600] ++ 1043 81b0 EN6600 Silencer + 1458 3124 GV-NX66128DP Turbo Force Edition +- 0142 NV43 [GeForce 6600 PCIe] ++ 0142 NV43 [GeForce 6600 LE] ++ 0143 NV43 [GeForce 6600 VE] + 0144 NV43 [GeForce Go 6600] + 0145 NV43 [GeForce 6610 XL] + 0146 NV43 [Geforce Go 6600TE/6200TE] ++ 0147 GeForce 6700 XL + 0148 NV43 [GeForce Go 6600] + 0149 NV43 [GeForce Go 6600 GT] + 014a Quadro NVS 440 +- 014c Quadro FX 550 ++ 014c Quadro FX 540 MXM + 014d NV18GL [Quadro FX 550] + 014e NV43GL [Quadro FX 540] + 014f NV43 [GeForce 6200] +@@ -4453,14 +4553,17 @@ + 0152 NV15BR [GeForce2 Ultra, Bladerunner] + 1048 0c56 GLADIAC Ultra + 0153 NV15GL [Quadro2 Pro] ++ 0160 GeForce 6500 + 0161 NV44 [GeForce 6200 TurboCache(TM)] +- 0162 NV44 [GeForce 6200 SE TurboCache (TM)] ++ 0162 NV44 [GeForce 6200SE TurboCache (TM)] + 0163 NV44 [GeForce 6200 LE] + 0164 NV44 [GeForce Go 6200] + 0165 NV44 [Quadro NVS 285] + 0166 NV43 [GeForce Go 6400] +- 0167 GeForce Go 6200 TurboCache +- 0168 NV43 [GeForce Go 6200 TurboCache] ++ 0167 NV43 [GeForce Go 6200/6400] ++ 0168 NV43 [GeForce Go 6200/6400] ++ 0169 GeForce 6250 ++ 016a GeForce 7100 GS + 0170 NV17 [GeForce4 MX 460] + 0171 NV17 [GeForce4 MX 440] + 10b0 0002 Gainward Pro/600 TV +@@ -4478,9 +4581,9 @@ + 4c53 1090 Cx9 / Vx9 mainboard + 0177 NV17 [GeForce4 460 Go] + 0178 NV17GL [Quadro4 550 XGL] +- 0179 NV17 [GeForce4 420 Go 32M] ++ 0179 NV17 [GeForce4 440 Go 64M] + 10de 0179 GeForce4 MX (Mac) +- 017a NV17GL [Quadro4 200/400 NVS] ++ 017a NV17GL [Quadro NVS] + 017b NV17GL [Quadro4 550 XGL] + 017c NV17GL [Quadro4 500 GoGL] + 017d NV17 [GeForce4 410 Go 16M] +@@ -4493,14 +4596,19 @@ + 147b 8f0d Siluro GF4 MX-8X + 0182 NV18 [GeForce4 MX 440SE AGP 8x] + 0183 NV18 [GeForce4 MX 420 AGP 8x] +- 0185 NV18 [GeForce4 MX 4000 AGP 8x] ++ 0184 NV18 [GeForce4 MX] ++ 0185 NV18 [GeForce4 MX 4000] + 0186 NV18M [GeForce4 448 Go] + 0187 NV18M [GeForce4 488 Go] + 0188 NV18GL [Quadro4 580 XGL] +- 018a NV18GL [Quadro4 NVS AGP 8x] ++ 018a NV18GL [Quadro NVS with AGP8X] + 018b NV18GL [Quadro4 380 XGL] +- 018c Quadro NVS 50 PCI ++ 018c NV18GL [Quadro NVS 50 PCI] + 018d NV18M [GeForce4 448 Go] ++ 0191 G80 [GeForce 8800 GTX] ++ 0193 G80 [GeForce 8800 GTS] ++ 019d G80 [Quadro FX 5600] ++ 019e G80 [Quadro FX 4600] + 01a0 NVCrush11 [GeForce2 MX Integrated Graphics] + 01a4 nForce CPU bridge + 01ab nForce 420 Memory Controller (DDR) +@@ -4516,15 +4624,18 @@ + 01c1 nForce AC'97 Modem Controller + 01c2 nForce USB Controller + 01c3 nForce Ethernet Controller +- 01d1 GeForce 7300 LE ++ 01d1 G72 [GeForce 7300 LE] + 1462 0345 7300LE PCI Express Graphics Adapter ++ 01d3 G72 [GeForce 7300 SE] + 01d6 GeForce Go 7200 +- 01d7 Quadro NVS 110M / GeForce Go 7300 +- 01d8 GeForce Go 7400 +- 01da Quadro NVS 110M +- 01de Quadro FX 350 ++ 01d7 G72M [Quadro NVS 110M/GeForce Go 7300] ++ 01d8 G72M [GeForce Go 7400] ++ 01da G72M [Quadro NVS 110M] ++ 01dc G72GL [Quadro FX 350M] ++ 01dd G72 [GeForce 7500 LE] ++ 01de G72GL [Quadro FX 350] + 10de 01dc Quadro FX Go350M +- 01df GeForce 7300 GS ++ 01df G71 [GeForce 7300 GS] + 01e0 nForce2 AGP (different version?) + 147b 1c09 NV7 Motherboard + 01e8 nForce2 AGP +@@ -4555,15 +4666,20 @@ + 0215 NV40 [GeForce 6800 GT] + 0218 NV40 [GeForce 6800 XT] + 0221 NV44A [GeForce 6200] ++ 3842 a341 256A8N341DX ++ 0222 GeForce 6200 A-LE + 0240 C51PV [GeForce 6150] ++ 1043 81cd A8N-VM CSM + 1462 7207 K8NGM2 series +- 0241 C51 PCI Express Bridge ++ 0241 C51 [GeForce 6150 LE] + 0242 C51G [GeForce 6100] + 0243 C51 PCI Express Bridge +- 0244 C51 PCI Express Bridge +- 0245 C51 PCI Express Bridge ++ 0244 C51 [Geforce 6150 Go] ++ 10de 0244 C51 [Geforce 6150 Go] ++ 0245 C51 [Quadro NVS 210S/GeForce 6150LE] + 0246 C51 PCI Express Bridge +- 0247 C51 PCI Express Bridge ++ 0247 MCP51 PCI-X GeForce Go 6100 ++ 1043 1382 MCP51 PCI-X GeForce Go 6100 + 0248 C51 PCI Express Bridge + 0249 C51 PCI Express Bridge + 024a C51 PCI Express Bridge +@@ -4583,37 +4699,53 @@ + 0259 NV25GL [Quadro4 750 XGL] + 025b NV25GL [Quadro4 700 XGL] + 0260 MCP51 LPC Bridge ++ 1043 81bc A8N-VM CSM Mainboard ++ 1458 5001 GA-M55plus-S3G + 1462 7207 K8NGM2 series + 0261 MCP51 LPC Bridge + 0262 MCP51 LPC Bridge + 0263 MCP51 LPC Bridge + 0264 MCP51 SMBus ++ 1043 81bc A8N-VM CSM Mainboard + 1462 7207 K8NGM2 series + 0265 MCP51 IDE ++ 1043 81bc A8N-VM CSM Mainboard + 1462 7207 K8NGM2 series + 0266 MCP51 Serial ATA Controller ++ 1043 81bc A8N-VM CSM Mainboard + 1462 7207 K8NGM2 series + 0267 MCP51 Serial ATA Controller ++ 1043 81bc A8N-VM CSM Mainboard + 1462 7207 K8NGM2 series + 0268 MCP51 Ethernet Controller + 0269 MCP51 Ethernet Controller ++ 1043 8141 A8N-VM CSM Mainboard + 1462 7207 K8NGM2 series + 026a MCP51 MCI + 026b MCP51 AC97 Audio Controller + 026c MCP51 High Definition Audio ++ 10de cb84 A8N-VM CSM Mainboard + 1462 7207 K8NGM2 series + 026d MCP51 USB Controller ++ 1043 81bc A8N-VM CSM Mainboard + 1462 7207 K8NGM2 series + 026e MCP51 USB Controller ++ 1043 81bc A8N-VM CSM Mainboard + 1462 7207 K8NGM2 series + 026f MCP51 PCI Bridge + 0270 MCP51 Host Bridge ++ 1043 81bc A8N-VM CSM Mainboard ++ 1458 5001 GA-M55plus-S3G + 1462 7207 K8NGM2 series + 0271 MCP51 PMU + 0272 MCP51 Memory Controller 0 + 027e C51 Memory Controller 2 ++ 1043 81cd A8N-VM CSM Mainboard ++ 1458 5000 GA-M55plus-S3G + 1462 7207 K8NGM2 series + 027f C51 Memory Controller 3 ++ 1043 81cd A8N-VM CSM Mainboard ++ 1458 5000 GA-M55plus-S3G + 1462 7207 K8NGM2 series + 0280 NV28 [GeForce4 Ti 4800] + 0281 NV28 [GeForce4 Ti 4200 AGP 8x] +@@ -4621,24 +4753,34 @@ + 0286 NV28 [GeForce4 Ti 4200 Go AGP 8x] + 0288 NV28GL [Quadro4 980 XGL] + 0289 NV28GL [Quadro4 780 XGL] +- 028c NV28GLM [Quadro4 700 GoGL] +- 0290 GeForce 7900 GTX +- 0291 GeForce 7900 GT +- 0292 GeForce 7900 GS ++ 028c NV28GLM [Quadro4 Go700] ++ 0290 G71 [GeForce 7900 GTX] ++ 0291 G71 [GeForce 7900 GT/GTO] ++ 10de 042b NX7900GTO-T2D512E [7900 GTO] ++ 0292 G71 [GeForce 7900 GS] ++ 0293 G71 [GeForce 7900 GX2] ++ 0294 G71 [GeForce 7950 GX2] ++ 0295 G71 [GeForce 7950 GT] ++ 107d 2a68 WinFast PX7950GT TDH ++ 0297 GeForce Go 7950 GTX + 0298 GeForce Go 7900 GS + 0299 GeForce Go 7900 GTX + 029a G71 [Quadro FX 2500M] + 029b G71 [Quadro FX 1500M] +- 029c Quadro FX 5500 +- 029d Quadro FX 3500 +- 029e Quadro FX 1500 +- 029f Quadro FX 4500 X2 ++ 029c G71 [Quadro FX 5500] ++ 029d G71GL [Quadro FX 3500] ++ 029e G71 [Quadro FX 1500] ++ 029f G70 [Quadro FX 4500 X2] + # Xbox Graphics Processing Unit (Integrated). GeForce3 derivative (NV20 < NV2A < NV25). + 02a0 NV2A [XGPU] +- 02e1 GeForce 7600 GS ++ 02e0 GeForce 7600 GT ++ 02e1 G73 [GeForce 7600 GS] ++ 02e2 GeForce 7300 GT + 02f0 C51 Host Bridge ++ 1043 81cd A8N-VM CSM Mainboard + 1462 7207 K8NGM2 series + 02f1 C51 Host Bridge ++ 1458 5000 GA-M55plus-S3G + 02f2 C51 Host Bridge + 02f3 C51 Host Bridge + 02f4 C51 Host Bridge +@@ -4646,17 +4788,27 @@ + 02f6 C51 Host Bridge + 02f7 C51 Host Bridge + 02f8 C51 Memory Controller 5 ++ 1043 81cd A8N-VM CSM Mainboard ++ 1458 5000 GA-M55plus-S3G + 1462 7207 K8NGM2 series + 02f9 C51 Memory Controller 4 ++ 1043 81cd A8N-VM CSM Mainboard ++ 1458 5000 GA-M55plus-S3G + 1462 7207 K8NGM2 series + 02fa C51 Memory Controller 0 ++ 1043 81cd A8N-VM CSM Mainboard ++ 1458 5000 GA-M55plus-S3G + 1462 7207 K8NGM2 series + 02fb C51 PCI Express Bridge + 02fc C51 PCI Express Bridge + 02fd C51 PCI Express Bridge + 02fe C51 Memory Controller 1 ++ 1043 81cd A8N-VM CSM Mainboard ++ 1458 5000 GA-M55plus-S3G + 1462 7207 K8NGM2 series + 02ff C51 Host Bridge ++ 1043 81cd A8N-VM CSM Mainboard ++ 1458 5000 GA-M55plus-S3G + 1462 7207 K8NGM2 series + 0300 NV30 [GeForce FX] + 0301 NV30 [GeForce FX 5800 Ultra] +@@ -4672,17 +4824,18 @@ + 0317 NV31M Pro + 031a NV31M [GeForce FX Go5600] + 031b NV31M [GeForce FX Go5650] +- 031c NVIDIA Quadro FX Go700 ++ 031c Quadro FX Go700 + 031d NV31GLM + 031e NV31GLM Pro + 031f NV31GLM Pro + 0320 NV34 [GeForce FX 5200] + 0321 NV34 [GeForce FX 5200 Ultra] + 0322 NV34 [GeForce FX 5200] ++ 1043 02fb V9250 Magic + 1462 9171 MS-8917 (FX5200-T128) + 1462 9360 MS-8936 (FX5200-T128) + 0323 NV34 [GeForce FX 5200LE] +- 0324 NV34M [GeForce FX Go5200] ++ 0324 NV34M [GeForce FX Go5200 64M] + 1028 0196 Inspiron 5160 + 1071 8160 MIM2000 + 0325 NV34M [GeForce FX Go5250] +@@ -4704,6 +4857,7 @@ + 0338 NV35GL [Quadro FX 3000] + 033f NV35GL [Quadro FX 700] + 0341 NV36.1 [GeForce FX 5700 Ultra] ++ 1462 9380 MS-8938 (FX5700U-TD128) + 0342 NV36.2 [GeForce FX 5700] + 0343 NV36 [GeForce FX 5700LE] + 0344 NV36.4 [GeForce FX 5700VE] +@@ -4741,14 +4895,23 @@ + 0377 MCP55 PCI Express bridge + 0378 MCP55 PCI Express bridge + 037a MCP55 Memory Controller ++ 037c G70 [GeForce 7800 GS] (rev a2) + 037e MCP55 SATA Controller + 037f MCP55 SATA Controller ++ 0390 GeForce 7650 GS + 0391 G70 [GeForce 7600 GT] ++ 1458 3427 GV-NX76T128D-RH + 0392 G70 [GeForce 7600 GS] + 1462 0622 NX7600GS-T2D256EH + 0393 G70 [GeForce 7300 GT] ++ 0394 G70 [GeForce 7600 LE] ++ 0395 G70 [GeForce 7300 GT] ++ 0397 GeForce Go 7700 + 0398 G70 [GeForce Go 7600] +- 039e Quadro FX 560 ++ 1025 006c Acer 9814 WKMI ++ 039b GeForce Go 7900 SE ++ 039c Quadro FX 550M ++ 039e G73GL [Quadro FX 560] + 03a0 C55 Host Bridge + 03a1 C55 Host Bridge + 03a2 C55 Host Bridge +@@ -4835,8 +4998,13 @@ + 045d MCP65 SATA Controller + 045e MCP65 SATA Controller + 045f MCP65 SATA Controller ++ 055c MCP67 High Definition Audio ++ 055d MCP67 High Definition Audio ++ c615 G70 [GeForce 7600 GT] + 10df Emulex Corporation + 1ae5 LP6000 Fibre Channel Host Adapter ++ f011 Saturn: LightPulse Fibre Channel Host Adapter ++ f015 Saturn: LightPulse Fibre Channel Host Adapter + f085 LP850 Fibre Channel Host Adapter + f095 LP952 Fibre Channel Host Adapter + f098 LP982 Fibre Channel Host Adapter +@@ -4848,6 +5016,7 @@ + f0e1 Zephyr LightPulse Fibre Channel Host Adapter + f0e5 Zephyr LightPulse Fibre Channel Host Adapter + f0f5 Neptune LightPulse Fibre Channel Host Adapter ++ f100 Saturn-X: LightPulse Fibre Channel Host Adapter + f700 LP7000 Fibre Channel Host Adapter + f701 LP7000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2) + f800 LP8000 Fibre Channel Host Adapter +@@ -4862,6 +5031,7 @@ + fc00 Thor-X LightPulse Fibre Channel Host Adapter + fc10 Helios-X LightPulse Fibre Channel Host Adapter + fc20 Zephyr-X LightPulse Fibre Channel Host Adapter ++ fc40 Saturn-X: LightPulse Fibre Channel Host Adapter + fd00 Helios-X LightPulse Fibre Channel Host Adapter + fe00 Zephyr-X LightPulse Fibre Channel Host Adapter + ff00 Neptune LightPulse Fibre Channel Host Adapter +@@ -4882,6 +5052,7 @@ + 0000 CA91C042 [Universe] + 0108 Tsi108 Host Bridge for Single PowerPC + 0148 Tsi148 [Tempe] ++ 1775 1100 VR11 Single Board Computer + 0860 CA91C860 [QSpan] + 0862 CA91C862A [QSpan-II] + 8260 CA91L8200B [Dual PCI PowerSpan II] +@@ -4906,10 +5077,12 @@ + 80d7 PCI-9112 + 80d9 PCI-9118 + 80da PCI-9812 ++ 80fc APCI1500 Signal processing controller (16 dig. inputs + 16 dig. outputs) + 811a PCI-IEEE1355-DS-DE Interface + 814c Fastcom ESCC-PCI (Commtech, Inc.) + 8170 S5933 [Matchmaker] (Chipset Development Tool) + 81e6 Multimedia video controller ++ 828d APCI3001 Signal processing controller (up to 16 analog inputs) + 8291 Fastcom 232/8-PCI (Commtech, Inc.) + 82c4 Fastcom 422/4-PCI (Commtech, Inc.) + 82c5 Fastcom 422/2-PCI (Commtech, Inc.) +@@ -4918,6 +5091,8 @@ + 82ca Fastcom 232/4-PCI (Commtech, Inc.) + 82db AJA HDNTV HD SDI Framestore + 82e2 Fastcom DIO24H-PCI (Commtech, Inc.) ++ 8406 PCIcanx/PCIcan CAN interface [Kvaser AB] ++ 8407 PCIcan II CAN interface (A1021, PCB-07, PCB-08) [Kvaser AB] + 8851 S5933 on Innes Corp FM Radio Capture card + 10e9 Alps Electric Co., Ltd. + 10ea Intergraphics Systems +@@ -4936,8 +5111,15 @@ + 8111 Twist3 Frame Grabber + 10ec Realtek Semiconductor Co., Ltd. + 0139 Zonet Zen3200 +- 0883 High Definition Audio ++ 0260 Realtek 260 High Definition Audio ++ 0261 Realtek 261 High Definition Audio ++ 0280 Realtek 280 High Definition Audio ++ 0861 Realtek 861 High Definition Audio ++ 0862 Realtek 862 High Definition Audio ++ 0880 Realtek 880 High Definition Audio ++ 0883 Realtek 883 High Definition Audio + 1025 1605 TravelMate 5600 series ++ 0888 Realtek 888 High Definition Audio + 8029 RTL-8029(AS) + 10b8 2011 EZ-Card (SMC1208) + 10ec 8029 RTL-8029(AS) +@@ -4955,10 +5137,12 @@ + 1025 8920 ALN-325 + 1025 8921 ALN-325 + 103c 006a NX9500 ++ 1043 1045 L8400B or L3C/S notebook + 1043 8109 P5P800-MX Mainboard + 1071 8160 MIM2000 + 10bd 0320 EP-320X-R + 10ec 8139 RT8139 ++ 10f7 8338 Panasonic CF-Y5 laptop + 1113 ec01 FNC-0107TX + 1186 1300 DFE-538TX + 1186 1320 SN5200 +@@ -4969,6 +5153,7 @@ + 1429 d010 ND010 + 1432 9130 EN-9130TX + 1436 8139 RT8139 ++ 144d c00c P30/P35 notebook + 1458 e000 GA-7VM400M/7VT600 Motherboard + 1462 788c 865PE Neo2-V Mainboard + 146c 1439 FE-1439TX +@@ -4977,6 +5162,7 @@ + 149c 139a LFE-8139ATX + 149c 8139 LFE-8139TX + 14cb 0200 LNR-100 Family 10/100 Base-TX Ethernet ++ 1565 2300 P4TSV Onboard LAN (RTL8100B) + 1695 9001 Onboard RTL8101L 10/100 MBit + 1799 5000 F5D5000 PCI Card/Desktop Network PCI Card + 1904 8139 RTL8139D Fast Ethernet Adapter +@@ -4984,14 +5170,19 @@ + 8e2e 7000 KF-230TX + 8e2e 7100 KF-230TX/2 + a0a0 0007 ALN-325C +- 8167 RTL-8169SC Gigabit Ethernet ++ 8167 RTL-8110SC/8169SC Gigabit Ethernet ++ 1462 235c P965 Neo MS-7235 mainboard + 8168 RTL8111/8168B PCI Express Gigabit Ethernet controller + 8169 RTL-8169 Gigabit Ethernet + 1025 0079 Aspire 5024WLMi + 1259 c107 CG-LAPCIGT + 1371 434e ProG-2000L + 1458 e000 GA-8I915ME-G Mainboard ++ 1462 030c K8N Neo-FSR v2.0 mainboard + 1462 702c K8T NEO 2 motherboard ++ 1462 7094 K8T Neo2-F V2.0 ++ 1734 1091 D2030-A1 ++ a0a0 0449 AK86-L motherboard + 8180 RTL8180L 802.11b MAC + 8185 RTL-8185 IEEE 802.11a/b/g Wireless LAN Controller + 8197 SmartLAN56 56K Modem +@@ -5010,6 +5201,7 @@ + 3fc4 RME Digi9652 (Hammerfall) + 3fc5 RME Hammerfall DSP + 3fc6 RME Hammerfall DSP MADI ++ 8380 Ellips ProfiXpress Profibus Master + 8381 Ellips Santos Frame Grabber + d154 Copley Controls CAN card (PCI-CAN-02) + 10ef Racore Computer Products, Inc. +@@ -5071,8 +5263,10 @@ + 1102 0051 SB0090 Audigy Player + 1102 0053 SB0090 Audigy Player/OEM + 1102 0058 SB0090 Audigy Player/OEM ++ 1102 1002 SB Audigy2 ZS + 1102 1007 SB0240 Audigy 2 Platinum 6.1 + 1102 2002 SB Audigy 2 ZS (SB0350) ++ 1102 4001 E-MU 1010 + 0005 SB X-Fi + 1102 0021 X-Fi Platinum + 1102 1003 X-Fi XtremeMusic +@@ -5116,13 +5310,16 @@ + 0003 HPT343/345/346/363 + 0004 HPT366/368/370/370A/372/372N + 1103 0001 HPT370A ++ 1103 0003 HPT343 / HPT345 / HPT363 UDMA33 + 1103 0004 HPT366 UDMA66 (r1) / HPT368 UDMA66 (r2) / HPT370 UDMA100 (r3) / HPT370 UDMA100 RAID (r4) + 1103 0005 HPT370 UDMA100 ++ 1103 0006 HPT302/302N + 0005 HPT372A/372N + 0006 HPT302/302N + 0007 HPT371/371N + 0008 HPT374 + 0009 HPT372N ++ 2340 RocketRAID 2340 16 Port SATA-II Controller + 1104 RasterOps Corp. + 1105 Sigma Designs, Inc. + 1105 REALmagic Xcard MPEG 1/2/3/4 DVD Decoder +@@ -5140,7 +5337,7 @@ + 1106 VIA Technologies, Inc. + 0102 Embedded VIA Ethernet Controller + 0130 VT6305 1394.A Controller +-# Wrong ID found on Jetway K8M8MS ++ 0198 P4X600 Host Bridge + 0204 K8M800 Host Bridge + 0208 PT890 Host Bridge + 0238 K8T890 Host Bridge +@@ -5166,6 +5363,7 @@ + 0340 PT900 Host Bridge + 0351 VT3351 Host Bridge + 0364 P4M900 Host Bridge ++ 1043 81ce P5VD2-VM mothervoard + 0391 VT8371 [KX133] + 0501 VT8501 [Apollo MVP4] + 0505 VT82C505 +@@ -5183,6 +5381,8 @@ + 1297 f641 FX41 motherboard + 1458 5002 GA-7VAX Mainboard + 1462 7020 K8T NEO 2 motherboard ++ 1462 7094 K8T Neo2-F V2.0 ++ 1462 7181 K8MM3-V mainboard + 147b 1407 KV8-MAX3 motherboard + 1849 0571 K7VT2/K7VT6 motherboard + 0576 VT82C576 3V [Apollo Master] +@@ -5240,6 +5440,7 @@ + 1364 P4M900 Host Bridge + 1571 VT82C576M/VT82C586 + 1595 VT82C595/97 [Apollo VP2/97] ++ 2106 VIA Rhine Family Fast Ethernet Adapter (VT6105) + 2204 K8M800 Host Bridge + 2208 PT890 Host Bridge + 2238 K8T890 Host Bridge +@@ -5275,6 +5476,8 @@ + 1179 0001 Magnia Z310 + 1458 5004 GA-7VAX Mainboard + 1462 7020 K8T NEO 2 motherboard ++ 1462 7094 K8T Neo2-F V2.0 ++ 1462 7181 K8MM3-V mainboard + 147b 1407 KV8-MAX3 motherboard + 182d 201d CN-029 USB2.0 4 port PCI Card + 1849 3038 K7VT6 +@@ -5284,8 +5487,9 @@ + 1106 0100 VT86C100A Fast Ethernet Adapter + 1186 1400 DFE-530TX rev A + 3044 IEEE 1394 Host Controller ++ 0010 0001 IEEE 1394 4port DCST 1394-3+1B + 1025 005a TravelMate 290 +- 1043 808a A8V Deluxe ++ 1043 808a A8V Deluxe or A8N-VM CSM Mainboard + 1458 1000 GA-7VT600-1394 Motherboard + 1462 207d K8NGM2 series motherboard + 1462 702d K8T NEO 2 motherboard +@@ -5318,24 +5522,30 @@ + 1043 80a1 A7V8X-X Motherboard + 1043 80b0 A7V600/K8V-X/K8V Deluxe motherboard (ADI AD1980 codec [SoundMAX]) + 1043 812a A8V Deluxe motherboard (Realtek ALC850 codec) ++ 10ec 8168 High Definition Audio + 1106 3059 L7VMM2 Motherboard + 1106 4161 K7VT2 motherboard + 1106 4170 PCPartner P4M800-8237R Motherboard + 1106 4552 Soyo KT-600 Dragon Plus (Realtek ALC 650) + 1297 c160 FX41 motherboard (Realtek ALC650 codec) ++ 1413 147b KV8 Pro motherboard onboard audio + 1458 a002 GA-7VAX Onboard Audio (Realtek ALC650) + 1462 0080 K8T NEO 2 motherboard + 1462 3800 KT266 onboard audio ++ 1462 7181 K8MM3-V mainboard + 147b 1407 KV8-MAX3 motherboard ++ 1849 0850 ASRock 775Dual-880 Pro onboard audio (Realtek ALC850) + 1849 9761 K7VT6 motherboard + 4005 4710 MSI K7T266 Pro2-RU (MSI-6380 v2) onboard audio (Realtek/ALC 200/200P) + a0a0 01b6 AK77-8XN onboard audio ++ a0a0 0342 AK86-L motherboard + 3065 VT6102 [Rhine-II] + 1043 80a1 A7V8X-X Motherboard + 1106 0102 VT6102 [Rhine II] Embeded Ethernet Controller on VT8235 + 1186 1400 DFE-530TX rev A + 1186 1401 DFE-530TX rev B + 13b9 1421 LD-10/100AL PCI Fast Ethernet Adapter (rev.B) ++ 1462 7181 K8MM3-V mainboard + 147b 1c09 NV7 Motherboard + 1695 3005 VT6103 + 1695 300c Realtek ALC655 sound chip +@@ -5361,6 +5571,8 @@ + 1297 f641 FX41 motherboard + 1458 5004 GA-7VAX Mainboard + 1462 7020 K8T NEO 2 motherboard ++ 1462 7094 K8T Neo2-F V2.0 ++ 1462 7181 K8MM3-V mainboard + 147b 1407 KV8-MAX3 motherboard + 182d 201d CN-029 USB 2.0 4 port PCI Card + 1849 3104 K7VT6 motherboard +@@ -5385,10 +5597,13 @@ + 1043 80ed A7V600/K8V Deluxe/K8V-X/A8V Deluxe motherboard + 1458 b003 GA-7VM400AM(F) Motherboard + 1462 7020 K8T Neo 2 Motherboard ++ 1462 7094 K8T Neo2-F V2.0 + 147b 1407 KV8-MAX3 motherboard + 147b 1408 KV7 + 1849 3149 K7VT6 motherboard ++ a0a0 04ad AK86-L motherboard + 3156 P/KN266 Host Bridge ++ 3157 CX700M2 UniChrome PRO II Graphics + 3164 VT6410 ATA133 RAID controller + 1043 80f4 P4P800 Mainboard Deluxe ATX + 1462 7028 915P/G Neo2 +@@ -5416,10 +5631,11 @@ + 3218 K8T800M Host Bridge + 3227 VT8237 ISA bridge [KT600/K8T800/K8T890 South] + 1043 80ed A7V600/K8V-X/A8V Deluxe motherboard +- 1106 3227 DFI KT600-AL Motherboard ++ 1106 3227 DFI KT600-AL / Soltek SL-B9D-FGR Motherboard + 1458 5001 GA-7VT600 Motherboard + 147b 1407 KV8-MAX3 motherboard + 1849 3227 K7VT4 motherboard ++ 3230 K8M890 [Chrome9] Integrated Video + 3238 K8T890 Host Bridge + 3249 VT6421 IDE RAID Controller + 324a CX700 PCI to PCI Bridge +@@ -5427,6 +5643,7 @@ + 324e CX700 Internal Module Bus + 3258 PT880 Host Bridge + 3259 CN400/PM880 Host Bridge ++ 3260 VIA Chrome9 HC IGP + 3269 KT880 Host Bridge + 3282 K8T800Pro Host Bridge + 3287 VT8251 PCI to ISA Bridge +@@ -5438,10 +5655,13 @@ + 3336 K8M890CE Host Bridge + 3337 VT8237A PCI to ISA Bridge + 3340 PT900 Host Bridge ++ 3343 UniChrome Pro IGP [VIA P4M890 Chipset] + 3344 UniChrome Pro IGP + 3349 VT8251 AHCI/SATA 4-Port Controller + 3351 VT3351 Host Bridge + 3364 P4M900 Host Bridge ++ 3371 Chrome9 HC IGP ++ 3372 VT8237S PCI to ISA Bridge + 337a VT8237A PCI to PCI Bridge + 337b VT8237A Host Bridge + 4149 VIA VT6420 (ATA133) Controller +@@ -5468,13 +5688,16 @@ + 5238 K8T890 I/O APIC Interrupt Controller + 5290 K8M890 I/O APIC Interrupt Controller + 5308 PT894 I/O APIC Interrupt Controller ++ 5324 CX700M2 IDE + 5327 P4M890 I/O APIC Interrupt Controller + 5336 K8M890CE I/O APIC Interrupt Controller + 5340 PT900 I/O APIC Interrupt Controller + 5351 VT3351 I/O APIC Interrupt Controller + 5364 P4M900 I/O APIC Interrupt Controller + 6100 VT85C100A [Rhine II] ++ 6287 SATA RAID Controller + 6327 P4M890 Security Device ++ 6364 P4M900 Security Device + 7204 K8M800 Host Bridge + 7205 VT8378 [S3 UniChrome] Integrated Video + 1458 d000 Gigabyte GA-7VM400(A)M(F) Motherboard +@@ -5634,11 +5857,7 @@ + 000a GDT 6115/6515 + 000b GDT 6125/6525 + 000c GDT 6535 +- 000d GDT 6555 +- 0010 GDT 6115/6515 +- 0011 GDT 6125/6525 +- 0012 GDT 6535 +- 0013 GDT 6555/6555-ECC ++ 000d GDT 6555/6555-ECC + 0100 GDT 6117RP/6517RP + 0101 GDT 6127RP/6527RP + 0102 GDT 6537RP +@@ -5695,6 +5914,7 @@ + 0261 GDT 7529RN/7629RN + 02ff GDT MAXRP + 0300 GDT NEWRX ++ 0301 GDT NEWRX2 + 111a Efficient Networks, Inc + 0000 155P-MF1 (FPGA) + 0002 155P-MF1 (ASIC) +@@ -5752,7 +5972,9 @@ + 1130 Computervision + 1131 Philips Semiconductors + 1561 USB 1.1 Host Controller ++ 1775 c200 C2K onboard USB 1.1 host controller + 1562 USB 2.0 Host Controller ++ 1775 c200 C2K onboard USB 2.0 host controller + 3400 SmartPCI56(UCB1500) 56K Modem + 5400 TriMedia TM1000/1100 + 5402 TriMedia TM-1300 +@@ -5779,6 +6001,7 @@ + 1043 4843 ASUS TV-FM 7133 + 1043 4845 TV-FM 7135 + 1043 4862 P7131 Dual ++ 1131 0000 KWorld V-Stream Studio TV Terminator + 1131 2001 Proteus Pro [philips reference design] + 1131 2018 Tiger reference design + 1131 4ee9 MonsterTV Mobile +@@ -5790,13 +6013,16 @@ + 1435 7330 VFG7330 + 1435 7350 VFG7350 + 1461 1044 AVerTVHD MCE A180 ++ 1461 a14b AVerTV Studio 509 + 1461 f31f Avermedia AVerTV GO 007 FM + 1462 6231 TV@Anywhere plus + 1489 0214 LifeView FlyTV Platinum FM + 14c0 1212 LifeView FlyTV Platinum Mini2 + 153b 1160 Cinergy 250 PCI TV + 153b 1162 Terratec Cinergy 400 mobile ++ 17de 7350 ATSC 110 Digital / Analog HDTV Tuner + 185b c100 VideoMate TV ++ 185b c900 VideoMate T750 + 5168 0306 LifeView FlyDVB-T DUO + 5168 0319 LifeView FlyDVB Trio + 5168 0502 LifeView FlyDVB-T Duo CardBus +@@ -5857,10 +6083,14 @@ + 13c2 100c Technotrend-Budget/Hauppauge WinTV-NOVA-CI DVB card + 13c2 100f Technotrend-Budget/Hauppauge WinTV-NOVA-CI DVB card + 13c2 1011 Technotrend-Budget/Hauppauge WinTV-NOVA-T DVB card ++ 13c2 1012 DVB T-1500 + 13c2 1013 SATELCO Multimedia DVB + 13c2 1016 WinTV-NOVA-SE DVB card ++ 13c2 1018 DVB S-1401 ++ 13c2 1019 S2-3200 + 13c2 1102 Technotrend/Hauppauge DVB card rev2.1 + 153b 1156 Terratec Cynergy 1200C ++ 1894 0020 KNC One DVB-C V1.0 + 9730 SAA9730 Integrated Multimedia and Peripheral Controller + 1131 0000 Integrated Multimedia and Peripheral Controller + 1132 Mitel Corp. +@@ -5935,6 +6165,7 @@ + 1133 e028 Diva Server Analog-8P + e02a Diva Server IPM-300 + e02c Diva Server IPM-600 ++ e032 Diva BRI-2 PCIe r1 + 1134 Mercury Computer Systems + 0001 Raceway Bridge + 0002 Dual PCI to RapidIO Bridge +@@ -6077,6 +6308,7 @@ + 000d SyncPort 2-Port (x.25/FR) + 0011 AccelePort 8r EIA-232 (IBM) + 0012 AccelePort 8r EIA-422 ++ 0013 AccelePort Xr + 0014 AccelePort 8r EIA-422 + 0015 AccelePort Xem + 0016 AccelePort EPC/X +@@ -6199,13 +6431,13 @@ + 0015 CMIC-GC Host Bridge + 0016 CMIC-GC Host Bridge + 0017 GCNB-LE Host Bridge +- 0036 HT1000 PCI/PCI-X bridge ++ 0036 BCM5785 [HT1000] PCI/PCI-X Bridge + 0101 CIOB-X2 PCI-X I/O Bridge + 0103 EPB PCI-Express to PCI-X Bridge +- 0104 HT1000 PCI/PCI-X bridge ++ 0104 BCM5785 [HT1000] PCI/PCI-X Bridge + 0110 CIOB-E I/O Bridge with Gigabit Ethernet +- 0130 HT2000 PCI-X bridge +- 0132 HT2000 PCI-Express bridge ++ 0130 BCM5780 [HT2000] PCI-X bridge ++ 0132 BCM5780 [HT2000] PCI-Express Bridge + 1166 0132 HT2000 PCI-Express bridge + 0140 HT2100 PCI-Express Bridge + 0141 HT2100 PCI-Express Bridge +@@ -6216,34 +6448,37 @@ + 4c53 1080 CT8 mainboard + 0203 CSB6 South Bridge + 1734 1012 Primergy RX300 +- 0205 HT1000 Legacy South Bridge ++ 0205 BCM5785 [HT1000] Legacy South Bridge + 0211 OSB4 IDE Controller + 0212 CSB5 IDE Controller ++ 1028 810b PowerEdge 2550 + 4c53 1080 CT8 mainboard + 0213 CSB6 RAID/IDE Controller + 1028 4134 PowerEdge 600SC + 1028 c134 Poweredge SC600 + 1734 1012 Primergy RX300 +- 0214 HT1000 Legacy IDE controller ++ 0214 BCM5785 [HT1000] IDE + 0217 CSB6 IDE Controller + 1028 4134 Poweredge SC600 + 0220 OSB4/CSB5 OHCI USB Controller + 4c53 1080 CT8 mainboard + 0221 CSB6 OHCI USB Controller + 1734 1012 Primergy RX300 +- 0223 HT1000 USB Controller ++ 0223 BCM5785 [HT1000] USB + 0225 CSB5 LPC bridge + 0227 GCLE-2 Host Bridge + 1734 1012 Primergy RX300 + 0230 CSB5 LPC bridge + 4c53 1080 CT8 mainboard +- 0234 HT1000 LPC Bridge ++ 0234 BCM5785 [HT1000] LPC ++ 0235 BCM5785 [HT1000] XIOAPIC0-2 ++ 0238 BCM5785 [HT1000] WDTimer + 0240 K2 SATA + 0241 RAIDCore RC4000 + 0242 RAIDCore BC4000 +- 024a BCM5785 (HT1000) SATA Native SATA Mode +-# The device starts as 024a, and changes to 024b if set to PATA mode in BIOS +- 024b BCM5785 (HT1000) PATA/IDE Mode ++ 024a BCM5785 [HT1000] SATA (Native SATA Mode) ++# The device starts as 024A, and changes to 024B if set to PATA mode in BIOS ++ 024b BCM5785 [HT1000] SATA (PATA/IDE Mode) + 1167 Mutoh Industries Inc + 1168 Thine Electronics Inc + 1169 Centre for Development of Advanced Computing +@@ -6303,12 +6538,15 @@ + 144d c006 vpr Matrix 170B4 CardBus bridge + 0476 RL5c476 II + 1014 0185 ThinkPad A/T/X Series ++ 1028 014f Latitude X300 laptop + 1028 0188 Inspiron 6000 laptop + 1043 1967 V6800V + 1043 1987 Asus A4K and Z81K notebooks, possibly others ( mid-2005 machines ) + 104d 80df Vaio PCG-FX403 + 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP +- 144d c00c P35 notebook ++ 104d 814e VAIO GRZ390Z ++ 10f7 8338 Panasonic CF-Y5 laptop ++ 144d c00c P30/P35 notebook + 14ef 0220 PCD-RP-220S + 17aa 201c Thinkpad X60s + 0477 RL5c477 +@@ -6322,8 +6560,9 @@ + 144d c006 vpr Matrix 170B4 + 0552 R5C552 IEEE 1394 Controller + 1014 0511 ThinkPad A/T/X Series ++ 1028 014f Latitude X300 laptop + 1028 0188 Inspiron 6000 laptop +- 144d c00c P35 notebook ++ 144d c00c P30/P35 notebook + 17aa 201e Thinkpad X60s + 0554 R5C554 + 0575 R5C575 SD Bus Host Adapter +@@ -6338,8 +6577,10 @@ + 1028 0188 Inspiron 6000 laptop + 1028 01a2 Inspiron 9200 + 1043 1967 ASUS V6800V ++ 10f7 8338 Panasonic CF-Y5 laptop + 144d c018 X20 IV + 17aa 201d Thinkpad X60s ++ 0832 R5C832 IEEE 1394 Controller + 0841 R5C841 CardBus/SD/SDIO/MMC/MS/MSPro/xD/IEEE1394 + 0852 xD-Picture Card Controller + 1043 1967 V6800V +@@ -6350,7 +6591,7 @@ + 1186 D-Link System Inc + 0100 DC21041 + 1002 DL10050 Sundance Ethernet +- 1186 1002 DFE-550TX ++ 1186 1002 DFE-550TX/FX + 1186 1012 DFE-580TX + 1025 AirPlus Xtreme G DWL-G650 Adapter + 1026 AirXpert DWL-AG650 Wireless Cardbus Adapter +@@ -6468,11 +6709,14 @@ + # Nee Galileo Technology, Inc. + 11ab Marvell Technology Group Ltd. + 0146 GT-64010/64010A System Controller ++ 0f53 88E6318 Link Street network controller ++ 11ab MV88SE614x SATA II PCI-E controller + 138f W8300 802.11 Adapter (rev 07) + 1fa6 Marvell W8300 802.11 Adapter + 1fa7 88W8310 and 88W8000G [Libertas] 802.11g client chipset + 1faa 88w8335 [Libertas] 802.11b/g Wireless + 1385 4e00 WG511 v2 54MBit/ Wireless PC-Card ++ 2a01 88W8335 [Libertas] 802.11b/g Wireless + 4320 88E8001 Gigabit Ethernet Controller + 1019 0f38 Marvell 88E8001 Gigabit Ethernet Controller (ECS) + 1019 8001 Marvell 88E8001 Gigabit Ethernet Controller (ECS) +@@ -6500,6 +6744,7 @@ + 4345 88E8022 PCI-X IPMI Gigabit Ethernet Controller + 4346 88E8061 PCI-E IPMI Gigabit Ethernet Controller + 4347 88E8062 PCI-E IPMI Gigabit Ethernet Controller ++ 4c53 10d0 Telum ASLP10 PrAMC Gigabit Ethernet + 4350 88E8035 PCI-E Fast Ethernet Controller + 1179 0001 Marvell 88E8035 Fast Ethernet Controller (Toshiba) + 11ab 3521 Marvell RDK-8035 +@@ -6592,6 +6837,7 @@ + 270f 2801 Marvell 88E8053 Gigabit Ethernet Controller (Chaintech) + a0a0 0506 Marvell 88E8053 Gigabit Ethernet Controller (Aopen) + 4363 88E8055 PCI-E Gigabit Ethernet Controller ++ 4364 88E8056 PCI-E Gigabit Ethernet Controller + 4611 GT-64115 System Controller + 4620 GT-64120/64120A/64121A System Controller + 4801 GT-48001 +@@ -6602,8 +6848,13 @@ + 5081 MV88SX5081 8-port SATA I PCI-X Controller + 6041 MV88SX6041 4-port SATA II PCI-X Controller + 6081 MV88SX6081 8-port SATA II PCI-X Controller ++ 6101 88SE6101 single-port PATA133 interface ++ 6141 88SE614x SATA II PCI-E controller ++ 6145 88SE6145 SATA II PCI-E controller ++ 6450 64560 System Controller + 6460 MV64360/64361/64362 System Controller + 6480 MV64460/64461/64462 System Controller ++ 1775 c200 C2K CompactPCI single board computer + 6485 MV64460/64461/64462 System Controller, Revision B + f003 GT-64010 Primary Image Piranha Image Generator + 11ac Canon Information Systems Research Aust. +@@ -6642,6 +6893,12 @@ + 0001 NP-PCI + 11bd Pinnacle Systems Inc. + 002e PCTV 40i ++ 0040 Royal TS Function 1 ++ 11bd 0044 PCTV 2000i Dual DVB-T Pro PCI Tuner 1 ++ 0041 RoyalTS Function 2 ++ 11bd 0044 PCTV 2000i Dual DVB-T Pro PCI Tuner 2 ++ 0042 Royal TS Function 3 ++ 11bd 0044 PCTV 2000i Dual DVB-T Pro PCI Common + bede AV/DV Studio Capture Card + 11be International Microcircuits Inc + 11bf Astrodesign, Inc. +@@ -6754,6 +7011,8 @@ + 048c V.92 56K WinModem + # InPorte Home Internal 56k Modem/fax/answering machine/SMS Features + 048f V.92 56k WinModem ++ 1040 HDA softmodem ++ 2600 StarPro26XX family (SP2601, SP2603, SP2612) DSP + 5801 USB + 5802 USS-312 USB Controller + 5803 USS-344S USB Controller +@@ -6804,10 +7063,15 @@ + 11d2 Intercom Inc. + 11d3 Trancell Systems Inc + 11d4 Analog Devices ++ 0078 AD1986HD sound chip + 1535 Blackfin BF535 processor + 1805 SM56 PCI modem + 1889 AD1889 sound chip ++ 1981 AD1981HD sound chip ++ 1983 AD1983HD sound chip + 1986 AD1986A sound chip ++ 11d4 1986 Lenovo N100 B9G ++ 198b AD1988B Sound Chip + 5340 AD1881 sound chip + 11d5 Ikon Corporation + 0115 10115 +@@ -6981,6 +7245,7 @@ + 7223 OZ711M3/MC3 4-in-1 MemoryCardBus Controller + 103c 088c NC8000 laptop + 103c 0890 NC6000 laptop ++ 10cf 11c4 Lifebook P5020D Laptop + 7233 OZ711MP3/MS3 4-in-1 MemoryCardBus Controller + 1218 Hybricon Corp. + 1219 First Virtual Corporation +@@ -7205,6 +7470,7 @@ + 125d 0428 ES56ST-PI Data Fax Modem + 125d 0429 ES56SV-PI Data Fax Modem + 147a c001 ES56-PI Data Fax Modem ++ 148d 1030 HCF WV-PI56 [ESS ES56-PI Data Fax Modem] + 14fe 0428 ES56-PI Data Fax Modem + 14fe 0429 ES56-PI Data Fax Modem + 125e Specialvideo Engineering SRL +@@ -7219,6 +7485,7 @@ + 1668 0414 HWP01170-01 802.11b PCI Wireless Adapter + 16a5 1601 AIR.mate PC-400 PCI Wireless LAN Adapter + 1737 3874 WMP11 Wireless 802.11b PCI Adapter ++ 8086 2510 M3AWEB Wireless 802.11b MiniPCI Adapter + 8086 2513 Wireless 802.11b MiniPCI Adapter + 3886 ISL3886 [Prism Javelin/Prism Xbow] + 17cf 0037 XG-901 and clones Wireless Adapter +@@ -7227,6 +7494,7 @@ + 10b8 2835 SMC2835W Wireless Cardbus Adapter + 10b8 a835 SMC2835W V2 Wireless Cardbus Adapter + 1113 4203 WN4201B ++ 1113 8201 T-Com T-Sinus 154pcicard Wireless PCI Adapter + 1113 ee03 SMC2802W V2 Wireless PCI Adapter [ISL3886] + 1113 ee08 SMC2835W V3 EU Wireless Cardbus Adapter + 1186 3202 DWL-G650 A1 Wireless Adapter +@@ -7489,9 +7757,11 @@ + 9132 Ethernet 100/10 MBit + 1283 Integrated Technology Express, Inc. + 673a IT8330G +- 8211 ITE 8211F Single Channel UDMA 133 (ASUS 8211 (ITE IT8212 ATA RAID Controller)) ++ 8152 IT8152F/G Advanced RISC-to-PCI Companion Chip ++ 8211 ITE 8211F Single Channel UDMA 133 + 1043 8138 P5GD1-VW Mainboard +- 8212 IT/ITE8212 Dual channel ATA RAID controller (PCI version seems to be IT8212, embedded seems to be ITE8212) ++# PCI version seems to be IT8212, embedded seems to be ITE8212 ++ 8212 IT/ITE8212 Dual channel ATA RAID controller + 1283 0001 IT/ITE8212 Dual channel ATA RAID controller + 8330 IT8330G + 8872 IT8874F PCI Dual Serial Port Controller +@@ -7522,6 +7792,7 @@ + 1290 Sord Computer Corporation + 1291 NCS Computer Italia + 1292 Tritech Microelectronics Inc ++ fc02 Pyramid3D TR25202 + 1293 Media Reality Technology + 1294 Rhetorex, Inc. + 1295 Imagenation Corporation +@@ -7549,8 +7820,12 @@ + 12a9 Xiotech Corporation + 12aa SDL Communications, Inc. + 12ab Yuan Yuan Enterprise Co., Ltd. ++ 0000 MPG160/Kuroutoshikou ITVC15-STVLP + 0002 AU8830 [Vortex2] Based Sound Card With A3D Support ++ 2300 Club-3D Zap TV2100 + 3000 MPG-200C PCI DVD Decoder Card ++ fff3 MPG600/Kuroutoshikou ITVC16-STVLP ++ ffff MPG600/Kuroutoshikou ITVC16-STVLP + 12ac Measurex Corporation + 12ad Multidata GmbH + 12ae Alteon Networks Inc. +@@ -7692,6 +7967,7 @@ + 12d6 Analogic Corp + 12d7 Biotronic SRL + 12d8 Pericom Semiconductor ++ 01a7 PI7C21P100 PCI to PCI Bridge + 8150 PCI to PCI Bridge + 12d9 Aculab PLC + 0002 PCI Prosody +@@ -7930,7 +8206,7 @@ + 132c Micrel Inc + 132d Integrated Silicon Solution, Inc. + 1330 MMC Networks +-1331 Radisys Corp. ++1331 RadiSys Corporation + 0030 ENP-2611 + 8200 82600 Host Bridge + 8201 82600 IDE +@@ -8075,6 +8351,8 @@ + 0038 Silicom Quad port Copper Ethernet PCI-E Intel based Bypass Server Adapter + 0039 Silicom Dual port Fiber-SX Ethernet PCI-E Intel based Bypass Server Adapter + 003a Silicom Dual port Fiber-LX Ethernet PCI-E Intel based Bypass Server Adapter ++ 003b Silicom Dual port Fiber Ethernet PMC Intel based Bypass Server Adapter (PMCX2BPFI) ++ 003c Silicom Dual port Copper Ethernet PCI-X BGE based Bypass Server Adapter (PXG2BPRB) + 1375 Argosystems Inc + 1376 LMC + 1377 Electronic Equipment Production & Distribution GmbH +@@ -8105,9 +8383,10 @@ + 1384 Reality Simulation Systems Inc + 1385 Netgear + 0013 WG311T 108 Mbps Wireless PCI Adapter +- 311a GA511 Gigabit Ethernet +- 4100 802.11b Wireless Adapter (MA301) +- 4105 MA311 802.11b wireless adapter ++ 006b WA301 802.11b Wireless PCI Adapter ++ 311a GA311 Gigabit Ethernet PCI Adapter ++ 4100 MA301 802.11b Wireless PCI Adapter ++ 4105 MA311 802.11b Wireless PCI Adapter + 4251 WG111T 108 Mbps Wireless USB 2.0 Adapter + 4400 WAG511 802.11a/b/g Dual Band Wireless PC Card + 4600 WAG511 802.11a/b/g Dual Band Wireless PC Card +@@ -8127,7 +8406,7 @@ + 630a GA630 Gigabit Ethernet + 6b00 WG311v3 54 Mbps Wireless PCI Adapter + 6d00 WPNT511 RangeMax 240 Mbps Wireless PC Card +- 7b00 WN511B RangeMax Next 280 Mbps Wireless PC Card ++ 7b00 WN511B RangeMax Next 270 Mbps Wireless PC Card + 7c00 WN511T RangeMax Next 300 Mbps Wireless PC Card + 7d00 WN311B RangeMax Next 270 Mbps Wireless PCI Adapter + 7e00 WN311T RangeMax Next 300 Mbps Wireless PCI Adapter +@@ -8150,6 +8429,7 @@ + 1040 Smartio C104H/PCI + 1141 Industrio CP-114 + 1680 Smartio C168H/PCI ++ 1681 CP-168U V2 Smart Serial Board (8-port RS-232) + 2040 Intellio CP-204J + 2180 Intellio C218 Turbo PCI + 3200 Intellio C320 Turbo PCI +@@ -8162,12 +8442,16 @@ + 08b4 ISDN network Controller [HFC-4S] + 1397 b520 HFC-4S [IOB4ST] + 1397 b540 HFC-4S [Swyx 4xS0 SX2 QuadBri] ++ 1397 b556 HFC-4S [Junghanns DuoDBRI] + 16b8 ISDN network Controller [HFC-8S] + 2bd0 ISDN network controller [HFC-PCI] + 0675 1704 ISDN Adapter (PCI Bus, D, C) + 0675 1708 ISDN Adapter (PCI Bus, D, C, ACPI) + 1397 2bd0 ISDN Board + e4bf 1000 CI1-1-Harp ++ 30b1 ISDN network Controller [HFC-E1] ++ b700 ISDN network controller PrimuX S0 [HFC-PCI] ++ f001 GSM Network Controller [HFC-4GSM] + 1398 Clarion co. Ltd + 1399 Rios systems Co Ltd + 139a Alacritech Inc +@@ -8194,6 +8478,7 @@ + 001d 7956 Security Processor + 0020 7955 Security Processor + 0026 8155 Security Processor ++ 002e 9630 Compression Processor + 13a4 Rascom Inc + 13a5 Audio Digital Imaging Inc + 13a6 Videonics Inc +@@ -8236,6 +8521,7 @@ + 13c1 1001 7xxx/8xxx-series PATA/SATA-RAID + 1002 9xxx-series SATA-RAID + 1003 9550SX SATA-RAID ++ 1004 9650SE SATA-II RAID + 13c2 Technotrend Systemtechnik GmbH + 000e Technotrend/Hauppauge DVB card rev2.3 + 13c3 Janz Computer AG +@@ -8264,6 +8550,7 @@ + ab08 21x4x DEC-Tulip compatible 10/100 Ethernet + 13d2 Shark Multimedia Inc + 13d3 IMC Networks ++ 3219 DTV-DVB 7049A DVB-T USB Stick + 13d4 Graphics Microsystems Inc + 13d5 Media 100 Inc + 13d6 K.I. Technology Co Ltd +@@ -8298,7 +8585,7 @@ + 13f0 Sundance Technology Inc / IC Plus Corp + 0200 IC Plus IP100A Integrated 10/100 Ethernet MAC + PHY + 0201 ST201 Sundance Ethernet +- 1023 IC Plus IP1000 Family Gigabit Ethernet ++ 1023 IP1000 Family Gigabit Ethernet + 13f1 Oce' - Technologies B.V. + 13f2 Ford Microelectronics Inc + 13f3 Mcdata Corporation +@@ -8319,6 +8606,7 @@ + 13f6 0111 CMI8738/C3DX PCI Audio Device + 1681 a000 Gamesurround MUSE XL + 0211 CM8738 ++ 9880 CM9880 + 13f7 Wildfire Communications + 13f8 Ad Lib Multimedia Inc + 13f9 NTT Advanced Technology Corp. +@@ -8461,6 +8749,7 @@ + 1424 Videoserver Connections + 1425 Chelsio Communications Inc + 000b T210 Protocol Engine ++ 000c T204 Protocol Engine + 1426 Storage Technology Corp. + 1427 Better On-Line Solutions + 1428 Edec Co Ltd +@@ -8534,6 +8823,7 @@ + 1457 Nuera Communications Inc + 1458 Giga-byte Technology + 0c11 K8NS Pro Mainboard ++ 9001 GC-PTV-TAF Hybrid TV card + e911 GN-WIAG02 + 1459 DOOIN Electronics + 145a Escalate Networks Inc +@@ -8545,6 +8835,9 @@ + 0001 NextMove PCI + 1460 DYNARC INC + 1461 Avermedia Technologies Inc ++ a3ce M179 ++ a3cf M179 ++ a836 M115 DVB-T, PAL/SECAM/NTSC Tuner + f436 AVerTV Hybrid+FM + 1462 Micro-Star International Co., Ltd. + 5501 nVidia NV15DDR [GeForce2 Ti] +@@ -8552,6 +8845,8 @@ + 6825 PCI Card wireless 11g [PC54G] + 6834 RaLink RT2500 802.11g [PC54G2] + 7125 K8N motherboard ++ 7235 P965 Neo MS-7235 mainboard ++ 7242 K9AGM RS485 Motherboard + 8725 NVIDIA NV25 [GeForce4 Ti 4600] VGA Adapter + 9000 NVIDIA NV28 [GeForce4 Ti 4800] VGA Adapter + 9110 GeFORCE FX5200 +@@ -8560,6 +8855,7 @@ + 9510 Radeon 9600XT + 9511 Radeon 9600XT + 9591 nVidia Corporation NV36 [GeForce FX 5700LE] ++ b834 Wireless 11g Turbo G PCI card [MSI PC60G] + 1463 Fast Corporation + 1464 Interactive Circuits & Systems Ltd + 1465 GN NETTEST Telecom DIV. +@@ -8764,8 +9060,11 @@ + 0811 Sentry5 External Interface Core + 0816 BCM3302 Sentry5 MIPS32 CPU + 1600 NetXtreme BCM5752 Gigabit Ethernet PCI Express ++ 103c 3015 PCIe LAN on Motherboard + 107b 5048 E4500 Onboard + 1601 NetXtreme BCM5752M Gigabit Ethernet PCI Express ++ 1639 NetXtreme II BCM5709 Gigabit Ethernet ++ 163a NetXtreme II BCM5709S Gigabit Ethernet + 1644 NetXtreme BCM5700 Gigabit Ethernet + 1014 0277 Broadcom Vigil B5700 1000Base-T + 1028 00d1 Broadcom BCM5700 +@@ -8853,12 +9152,16 @@ + 103c 7031 NC320T PCIe Gigabit Server Adapter + 103c 7032 NC320i PCIe Gigabit Server Adapter + 1734 1061 Primergy RX300 S2 ++ 165a NetXtreme BCM5722 Gigabit Ethernet PCI Express ++ 103c 7051 NC105i PCIe Gigabit Server Adapter ++ 103c 7052 NC105T PCIe Gigabit Server Adapter + 165d NetXtreme BCM5705M Gigabit Ethernet + 1028 865d Latitude D400 + 165e NetXtreme BCM5705M_2 Gigabit Ethernet + 103c 088c NC8000 laptop + 103c 0890 NC6000 laptop + 103c 099c NX6110/NC6120 ++ 10cf 1279 LifeBook E8010D + 1668 NetXtreme BCM5714 Gigabit Ethernet + 103c 7039 NC324i PCIe Dual Port Gigabit Server Adapter + 1669 NetXtreme 5714S Gigabit Ethernet +@@ -8867,6 +9170,7 @@ + 166e 570x 10/100 Integrated Controller + 1672 NetXtreme BCM5754M Gigabit Ethernet PCI Express + 1673 NetXtreme BCM5755M Gigabit Ethernet PCI Express ++ 1674 NetXtreme BCM5756ME Gigabit Ethernet PCI Express + 1677 NetXtreme BCM5751 Gigabit Ethernet PCI Express + 1028 0179 Optiplex GX280 + 1028 0182 Latitude D610 +@@ -8884,6 +9188,7 @@ + 167d NetXtreme BCM5751M Gigabit Ethernet PCI Express + 17aa 2081 Thinkpad R60e model 0657 + 167e NetXtreme BCM5751F Fast Ethernet PCI Express ++ 167f NetLink BCM5787F Fast Ethernet PCI Express + 1693 NetLink BCM5787M Gigabit Ethernet PCI Express + 1696 NetXtreme BCM5782 Gigabit Ethernet + 103c 12bc d530 CMT (DG746A) +@@ -8892,6 +9197,7 @@ + 169b NetLink BCM5787 Gigabit Ethernet PCI Express + 169c NetXtreme BCM5788 Gigabit Ethernet + 103c 308b MX6125 ++ 103c 30a1 NC2400 + 169d NetLink BCM5789 Gigabit Ethernet PCI Express + 16a6 NetXtreme BCM5702X Gigabit Ethernet + 0e11 00bb NC7760 Gigabit Server Adapter (PCI-X, 10/100/1000-T) +@@ -8913,6 +9219,7 @@ + 103c 3102 NC370F MultifuNCtion Gigabit Server Adapter + 16ac NetXtreme II BCM5708S Gigabit Ethernet + 103c 1706 NC373m Multifunction Gigabit Server Adapter ++ 103c 7038 NC373i PCI Express Multifunction Gigabit Server Adapter + 103c 703b NC373i Integrated Multifunction Gigabit Server Adapter + 103c 703d NC373F PCI Express Multifunction Gigabit Server Adapter + 16c6 NetXtreme BCM5702A3 Gigabit Ethernet +@@ -8933,15 +9240,19 @@ + 170c BCM4401-B0 100Base-TX + 1028 0188 Inspiron 6000 laptop + 1028 0196 Inspiron 5160 ++ 1028 01af Inspiron 6400 + 103c 099c NX6110/NC6120 + 170d NetXtreme BCM5901 100Base-TX + 1014 0545 ThinkPad R40e (2684-HVG) builtin ethernet controller + 170e NetXtreme BCM5901 100Base-TX ++ 1712 NetLink BCM5906 Fast Ethernet PCI Express ++ 1713 NetLink BCM5906M Fast Ethernet PCI Express + 3352 BCM3352 + 3360 BCM3360 + 4210 BCM4210 iLine10 HomePNA 2.0 + 4211 BCM4211 iLine10 HomePNA 2.0 + V.90 56k modem + 4212 BCM4212 v.90 56k modem ++ 4220 802-11b/g Wireless PCI controller, packaged as a Linksys WPC54G ver 1.2 PCMCIA card + 4301 BCM4303 802.11b Wireless LAN Controller + 1028 0407 TrueMobile 1180 Onboard WLAN + 1043 0120 WL-103b Wireless LAN PC Card +@@ -8949,18 +9260,19 @@ + 4306 BCM4307 Ethernet Controller + 4307 BCM4307 802.11b Wireless LAN Controller + 4310 BCM4310 Chipcommon I/OController +- 4311 Dell Wireless 1390 WLAN Mini-PCI Card +- 4312 BCM4310 UART ++ 4311 BCM94311MCG wlan mini-PCI ++ 4312 BCM4312 802.11a/b/g + 4313 BCM4310 Ethernet Controller + 4315 BCM4310 USB Controller + 4318 BCM4318 [AirForce One 54g] 802.11g Wireless LAN Controller + 103c 1356 MX6125 + 1043 120f A6U notebook embedded card +- 1468 0311 Aspire 3022WLMi, 5024WLMi ++ 1468 0311 Aspire 3022WLMi, 5024WLMi, 5020 + 1468 0312 TravelMate 2410 + 14e4 0449 Gateway 7510GX + 14e4 4318 WPC54G version 3 [Wireless-G Notebook Adapter] 802.11g Wireless Lan Controller + 16ec 0119 U.S.Robotics Wireless MAXg PC Card ++ 1737 0042 WMP54GS version 1.1 [Wireless-G PCI Adapter] 802.11g w/SpeedBooster + 1737 0048 WPC54G-EU version 3 [Wireless-G Notebook Adapter] + 4319 BCM4311 [AirForce 54g] 802.11a/b/g PCI Express Transceiver + 4320 BCM4306 802.11b/g Wireless LAN Controller +@@ -8973,6 +9285,7 @@ + 106b 004e AirPort Extreme + 1154 0330 Buffalo WLI2-PCI-G54S High Speed Mode Wireless Desktop Adapter + 144f 7050 eMachines M6805 802.11g Built-in Wireless ++ 144f 7051 Sonnet Aria Extreme PCI + 14e4 4320 Linksys WMP54G PCI + 1737 4320 WPC54G + 1799 7001 Belkin F5D7001 High-Speed Mode Wireless G Network Card +@@ -8989,6 +9302,7 @@ + 1414 0004 Wireless PCI Adapter MN-730 + 4326 BCM4307 Chipcommon I/O Controller? + 4329 BCM43XG ++ 4344 EDGE/GPRS data and 802.11b/g combo cardbus [GC89] + 4401 BCM4401 100Base-T + 103c 08b0 tc1100 tablet + 1043 80a8 A7V8X motherboard +@@ -9032,6 +9346,8 @@ + 5690 BCM5690 12-port Multi-Layer Gigabit Ethernet Switch + 5691 BCM5691 GE/10GE 8+2 Gigabit Ethernet Switch Controller + 5692 BCM5692 12-port Multi-Layer Gigabit Ethernet Switch ++ 5695 BCM5695 12-port + HiGig Multi-Layer Gigabit Ethernet Switch ++ 5698 BCM5698 12-port Multi-Layer Gigabit Ethernet Switch + 5820 BCM5820 Crypto Accelerator + 5821 BCM5821 Crypto Accelerator + 5822 BCM5822 Crypto Accelerator +@@ -9109,6 +9425,7 @@ + 1066 HCF 56k Data/Fax/Voice/Spkp Modem + 122d 4033 Dell Athena - MDP3900V-U + 1085 HCF V90 56k Data/Fax/Voice/Spkp PCI Modem ++ 10b6 CX06834-11 HCF V.92 56k Data/Fax/Voice/Spkp Modem + 1433 HCF 56k Data/Fax Modem + 1434 HCF 56k Data/Fax/Voice Modem + 1435 HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem +@@ -9190,6 +9507,7 @@ + 2465 HSF 56k Data/Fax/Voice/Spkp (w/HS) Modem (Mob SmartDAA) + 2466 HSF 56k Data/Fax/Voice/Spkp Modem (Mob SmartDAA) + 2bfa HDAudio Soft Data Fax Modem with SmartCP ++ 1025 0009 Aspire 5622WLMi + 2f00 HSF 56k HSFi Modem + 13e0 8d84 IBM HSFi V.90 + 13e0 8d85 Compaq Stinger +@@ -9197,6 +9515,9 @@ + 2f02 HSF 56k HSFi Data/Fax + 2f11 HSF 56k HSFi Modem + 2f20 HSF 56k Data/Fax Modem ++ 2f30 HSF 56k Data/Fax Modem ++ 5045 HDAUDIO with SmartCP ++ 5047 High Definition Audio [Waikiki] + 8234 RS8234 ATM SAR Controller [ServiceSAR Plus] + 8800 CX23880/1/2/3 PCI Video and Audio Decoder + 0070 2801 Hauppauge WinTV 28xxx (Roslyn) models +@@ -9246,6 +9567,7 @@ + 0070 9002 Nova-T DVB-T Model 909 + 1043 4823 ASUS PVR-416 + 107d 663c Leadtek PVR 2000 ++ 107d 665f WinFast DTV1000-T + 14f1 0187 Conexant DVB-T reference design + 17de 08a1 XPert DVB-T PCI BDA DVBT 23880 Transport Stream Capture + 17de 08a6 KWorld/VStream XPert DVB-T +@@ -9365,6 +9687,14 @@ + 1522 2500 RockForceF4 4 Port V.34 Super-G3 Fax Modem + 1522 2600 RockForceD8 8 Port V.90 Data Modem + 1522 2700 RockForceF8 8 Port V.34 Super-G3 Fax Modem ++ 1522 3000 IQ Express D1 - 1 Port V.92 Data Modem ++ 1522 3100 IQ Express F1 - 1 Port V.34 Super-G3 Fax Modem ++ 1522 3200 IQ Express D2 - 2 Port V.92 Data Modem ++ 1522 3300 IQ Express F2 - 2 Port V.34 Super-G3 Fax Modem ++ 1522 3400 IQ Express D4 - 4 Port V.92 Data Modem ++ 1522 3500 IQ Express F4 - 4 Port V.34 Super-G3 Fax Modem ++ 1522 3c00 IQ Express D8 - 8 Port V.92 Data Modem ++ 1522 3d00 IQ Express F8 - 8 Port V.34 Super-G3 Fax Modem + 1523 MUSIC Semiconductors + 1524 ENE Technology Inc + 0510 CB710 Memory Card Reader Controller +@@ -9372,6 +9702,7 @@ + 0520 FLASH memory: ENE Technology Inc: + 0530 ENE PCI Memory Stick Card Reader Controller + 0550 ENE PCI Secure Digital Card Reader Controller ++ 0551 SD/MMC Card Reader Controller + 0610 PCI Smart Card Reader Controller + 1211 CB1211 Cardbus Controller + 1225 CB1225 Cardbus Controller +@@ -9402,6 +9733,7 @@ + 1533 BALTIMORE + 1534 ROAD Corp + 1535 EVERGREEN Technologies Inc ++1536 ACTIS Computer + 1537 DATALEX COMMUNCATIONS + 1538 ARALION Inc + 0303 ARS106S Ultra ATA 133/100/66 Host Controller +@@ -9521,6 +9853,9 @@ + 158e Lara Technology Inc + 158f Ditect Coop + 1590 3pardata Inc ++ 0001 Eagle Cluster Manager ++ 0002 Osprey Cluster Manager ++ a01d FC044X Fibre Channel HBA + 1591 ARN + 1592 Syba Tech Ltd + 0781 Multi-IO Card +@@ -9566,6 +9901,7 @@ + 15b1 Source Technology Inc + 15b2 Mosaid Technologies Inc + 15b3 Mellanox Technologies ++ 0191 MT25408 [ConnectX IB SDR Flash Recovery] + 5274 MT21108 InfiniBridge + 5a44 MT23108 InfiniHost + 5a45 MT23108 [Infinihost HCA Flash Recovery] +@@ -9575,11 +9911,19 @@ + 6278 MT25208 InfiniHost III Ex (Tavor compatibility mode) + 6279 MT25208 [InfiniHost III Ex HCA Flash Recovery] + 6282 MT25208 InfiniHost III Ex ++ 6340 MT25408 [ConnectX IB SDR] ++ 634a MT25418 [ConnectX IB DDR] ++ 6354 MT25428 [ConnectX IB QDR] ++ 6368 MT25448 [ConnectX EN 10GigE] + 15b4 CCI/TRIAD + 15b5 Cimetrics Inc + 15b6 Texas Memory Systems Inc + 15b7 Sandisk Corp + 15b8 ADDI-DATA GmbH ++ 1003 APCI1032 SP controller (32 digi inputs w/ opto coupler) ++ 1005 APCI2200 SP controller (8/16 digi outputs (relay)) ++ 100a APCI1696 SP controller (96 TTL I/Os) ++ 3001 APCI3501 SP controller (analog output board) + 15b9 Maestro Digital Communications + 15ba Impacct Technology Corp + 15bb Portwell Inc +@@ -9628,6 +9972,7 @@ + 15e0 Cacheflow Inc + 15e1 Voice Technologies Group Inc + 15e2 Quicknet Technologies Inc ++ 0500 PhoneJack-PCI + 15e3 Networth Technologies Inc + 15e4 VSN Systemen BV + 15e5 Valley technologies Inc +@@ -9685,6 +10030,8 @@ + 8410 RTL81xx Fast Ethernet + 1629 Kongsberg Spacetec AS + 1003 Format synchronizer v3.0 ++ 1006 Format synchronizer, model 10500 ++ 1007 Format synchronizer, model 21000 + 2002 Fast Universal Data Output + # This seems to occur on their 802.11b Wireless card WMP-11 + 1637 Linksys +@@ -9753,35 +10100,54 @@ + 168c 2042 Engenius 5354MP Plus ARIES2 a/b/g MiniPCI Adapter + 168c 2051 TRENDnet TEW-443PI Wireless PCI Adapter + 16ab 7302 Trust Speedshare Turbo Pro Wireless PCI Adapter ++ 17cf 0042 Z-COMAX Highpower XG-622H (400mw) 802.11b/g mini-PCI Adapter ++ 185f 1012 CM9 Wireless a/b/g MiniPCI Adapter + 185f 2012 Wistron NeWeb WLAN a+b+g model CB9 + 001a AR5005G 802.11abg NIC ++ 1052 168c Sweex Wireless Lan PC Card 54Mbps + 1113 ee20 SMC Wireless CardBus Adapter 802.11g (SMCWCB-G EU) + 1113 ee24 SMC Wireless PCI Card WPCI-G + 1186 3a15 D-Link AirPlus G DWL-G630 Wireless Cardbus Adapter(rev.D) + 1186 3a16 D-Link AirPlus G DWL-G510 Wireless PCI Adapter(rev.B) + 1186 3a23 D-Link AirPlus G DWL-G520+A Wireless PCI Adapter + 1186 3a24 D-Link AirPlus G DWL-G650+A Wireless Cardbus Adapter ++ 1186 3b08 AirPlus G DWL-G630 + 168c 001a Belkin FD7000 + 168c 1052 TP-Link TL-WN510G Wireless CardBus Adapter ++ 168c 2052 Compex Wireless 802.11 b/g MiniPCI Adapter, Rev A1 [WLM54G] + 001b AR5006X 802.11abg NIC + 1186 3a19 D-Link AirPremier AG DWL-AG660 Wireless Cardbus Adapter + 1186 3a22 D-Link AirPremier AG DWL-AG530 Wireless PCI Adapter ++ 1458 e901 GN-WI01HT Wireless a/b/g MiniPCI Adapter ++ 168c 001b Wireless LAN PCI LiteOn + 168c 2062 EnGenius EMP-8602 (400mw) or Compex WLM54AG (SuperAG) + 168c 2063 EnGenius EMP-8602 (400mw) or Compex WLM54AG ++ 185f 1600 DCMA-82 High Power WLAN 802.11a/b/g mini-PCI Module (Super A/G, eXtended Range, 400mW) ++ a727 6804 Wireless 11a/b/g PC Card with XJACK(r) Antenna ++ 001c AR5006EG 802.11 b/g Wireless PCI Express Adapter + 0020 AR5005VL 802.11bg Wireless NIC ++ 0023 AR5416 802.11a/b/g/n Wireless PCI Adapter ++ 0024 AR5418 802.11a/b/g/n Wireless PCI Express Adapter + 1014 AR5212 802.11abg NIC + 1014 058a ThinkPad 11a/b/g Wireless LAN Mini Express Adapter (AR5BXB6) ++ 3b08 D-Link AirPlus G DWL-G630 + 1695 EPoX Computer Co., Ltd. + 169c Netcell Corporation + 0044 Revolution Storage Processing Card ++# The right ID is 196d, but they got it nibble-swapped in 2202. ++169d Club-3D VB (Wrong ID) ++ 3306 ZAP TV 2202 + 16a5 Tekram Technology Co.,Ltd. + 16ab Global Sun Technology Inc + 1100 GL24110P + 1101 PLX9052 PCMCIA-to-PCI Wireless LAN + 1102 PCMCIA-to-PCI Wireless Network Bridge + 8501 WL-8305 Wireless LAN PCI Adapter +-16ae Safenet Inc +- 1141 SafeXcel-1141 ++16ae SafeNet Inc ++ 0001 SafeXcel 1140 ++ 000a SafeXcel 1841 ++ 1141 SafeXcel 1141 ++ 1841 SafeXcel 1842 + 16af SparkLAN Communications, Inc. + 16b4 Aspex Semiconductor Ltd + 16b8 Sonnet Technologies, Inc. +@@ -9795,12 +10161,47 @@ + 16cd Densitron Technologies + 16ce Roland Corp. + 16d5 Acromag, Inc. ++ 0504 PMC-DX504 Reconfigurable FPGA with LVDS I/O ++ 0520 PMC520 Serial Communication, 232 Octal ++ 0521 PMC521 Serial Communication, 422/485 Octal ++ 1020 PMC-AX1020 Reconfigurable FPGA with A/D & D/A ++ 1065 PMC-AX1065 Reconfigurable FPGA with A/D & D/A ++ 2004 PMC-DX2004 Reconfigurable FPGA with LVDS I/O ++ 2020 PMC-AX2020 Reconfigurable FPGA with A/D & D/A ++ 2065 PMC-AX2065 Reconfigurable FPGA with A/D & D/A ++ 3020 PMC-AX3020 Reconfigurable FPGA with A/D & D/A ++ 3065 PMC-AX3065 Reconfigurable FPGA with A/D & D/A ++ 4243 PMC424, APC424, AcPC424 Digital I/O and Counter Timer Module ++ 4248 PMC464, APC464, AcPC464 Digital I/O and Counter Timer Module ++ 424b PMC-DX2002 Reconfigurable FPGA with Differential I/O ++ 4253 PMC-DX503 Reconfigurable FPGA with TTL and Differential I/O ++ 4312 PMC-CX1002 Reconfigurable Conduction-Cooled FPGA Virtex-II with Differential I/O ++ 4313 PMC-CX1003 Reconfigurable Conduction-Cooled FPGA Virtex-II with CMOS and Differential I/O ++ 4322 PMC-CX2002 Reconfigurable Conduction-Cooled FPGA Virtex-II with Differential I/O ++ 4323 PMC-CX2003 Reconfigurable Conduction-Cooled FPGA Virtex-II with CMOS and Differential I/O ++ 4350 PMC-DX501 Reconfigurable Digital I/O Module ++ 4353 PMC-DX2003 Reconfigurable FPGA with TTL and Differential I/O ++ 4357 PMC-DX502 Reconfigurable Differential I/O Module ++ 4457 PMC730, APC730, AcPC730 Multifunction Module ++ 464d PMC408 32-Channel Digital Input/Output Module ++ 4850 PMC220-16 12-Bit Analog Output Module ++ 4a42 PMC483, APC483, AcPC483 Counter Timer Module ++ 4a50 PMC484, APC484, AcPC484 Counter Timer Module ++ 4a56 PMC230 16-Bit Analog Output Module ++ 4b47 PMC330, APC330, AcPC330 Analog Input Module, 16-bit A/D ++ 4c40 PMC-LX40 Reconfigurable Virtex-4 FPGA with plug-in I/O ++ 4c60 PMC-LX60 Reconfigurable Virtex-4 FPGA with plug-in I/O ++ 4d4d PMC341, APC341, AcPC341 Analog Input Module, Simultaneous Sample & Hold + 4d4e PMC482, APC482, AcPC482 Counter Timer Board ++ 524d PMC-DX2001 Reconfigurable FPGA with TTL I/O ++ 5335 PMC-SX35 Reconfigurable Virtex-4 FPGA with plug-in I/O ++ 5456 PMC470 48-Channel Digital Input/Output Module + 16df PIKA Technologies Inc. + 16e3 European Space Agency + 1e0f LEON2FT Processor + 16e5 Intellon Corp. + 6000 INT6000 Ethernet-to-Powerline Bridge [HomePlug AV] ++ 6300 INT6300 Ethernet-to-Powerline Bridge [HomePlug AV] + 16ec U.S. Robotics + 00ff USR997900 10/100 Mbps PCI Network Card + 0116 USR997902 10/100/1000 Mbps PCI Network Card +@@ -9824,9 +10225,11 @@ + 13c8 AEP SureWare Runner 1000V3 + 1734 Fujitsu Siemens Computer GmbH + 1078 Amilo Pro v2010 ++ 1085 Celsius M450 + 1737 Linksys + 0013 WMP54G Wireless Pci Card + 0015 WMP54GS Wireless Pci Card ++ 0029 WPG54G ver. 4 PCI Card + 1032 Gigabit Network Adapter + 1737 0015 EG1032 v2 Instant Gigabit Network Adapter + 1737 0024 EG1032 v3 Instant Gigabit Network Adapter +@@ -9848,6 +10251,7 @@ + 175c AudioScience Inc + 175e Sanera Systems, Inc. + 1775 SBS Technologies ++177d Cavium Networks + 1787 Hightech Information System Ltd. + # also used by Struck Innovative Systeme for joint developments + 1796 Research Centre Juelich +@@ -9906,6 +10310,7 @@ + 5832 Xframe II 10Gbps Ethernet + 10a9 8021 Single Port 10 Gigabit Ethernet II (PCI-X, Fiber) + 17db Cray Inc ++ 0101 XT Series [Seastar] 3D Toroidal Router + 17de KWorld Computer Co. Ltd. + 17e4 Sectra AB + 0001 KK671 Cardbus encryption board +@@ -9916,6 +10321,12 @@ + 0021 EN2210 [c.Link] MoCA Network Controller (Coax) + 17ee Connect Components Ltd + 17f2 Albatron Corp. ++17f3 RDC Semiconductor, Inc. ++ 6020 R6020 North Bridge ++ 6030 R6030 ISA Bridge ++ 6040 R6040 MAC Controller ++ 6060 R6060 USB 1.1 Controller ++ 6061 R6061 USB 2.0 Controller + 17fe Linksys, A Division of Cisco Systems + 2120 WMP11v4 802.11b PCI card + 2220 [AirConn] INPROCOMM IPN 2220 Wireless LAN Adapter (rev 01) +@@ -9939,6 +10350,7 @@ + 1371 0020 CWP-854 Wireless-G PCI Adapter + 1458 e381 GN-WMKG 802.11b/g Wireless CardBus Adapter + 1458 e931 GN-WIKG 802.11b/g mini-PCI Adapter ++ 1462 6833 Unknown 802.11g mini-PCI Adapter + 1462 6835 Wireless 11G CardBus CB54G2 + 1737 0032 WMP54G 2.0 PCI Adapter + 1799 700a F5D7000 Wireless G Desktop Network Card +@@ -9947,13 +10359,18 @@ + 0301 RT2561/RT61 802.11g PCI + 1186 3c08 DWL-G630 Rev E + 1186 3c09 DWL-G510 Rev C ++ 13d1 abe3 miniPCI Pluscom 802.11 a/b/g ++ 1458 e934 GN-WP01GS + 1737 0055 WMP54G ver 4.1 + 0302 RT2561/RT61 rev B 802.11g + 1186 3c08 DWL-G630 Rev E + 1186 3c09 DWL-G510 Rev C ++ 1462 b834 PC54G3 Wireless 11g PCI Card + 0401 Ralink RT2600 802.11 MIMO ++ e932 RT2560F 802.11 b/g PCI + 1820 InfiniCon Systems Inc. + 1822 Twinhan Technology Co. Ltd ++ 0001 Twinhan VisionPlus DVB [card=113] + 4e35 Mantis DTV PCI Bridge Controller [Ver 1.0] + 182d SiteCom Europe BV + # HFC-based ISDN card +@@ -9983,6 +10400,12 @@ + 5a46 MT23108 InfiniHost HCA bridge + 6278 MT25208 InfiniHost III Ex (Tavor compatibility mode) + 6282 MT25208 InfiniHost III Ex ++186c Humusoft ++ 0614 MF614 multifunction I/O card ++1876 L-3 Communications ++ a101 VigraWATCH PCI ++ a102 VigraWATCH PMC ++ a103 Vigra I/O + 187e ZyXEL Communication Corporation + 3403 ZyAir G-110 802.11g + 340e M-302 802.11g XtremeMIMO +@@ -10009,9 +10432,10 @@ + # Nee Octigabay System + 18c8 Cray Inc + 18c9 ARVOO Engineering BV +-18ca XGI - Xabre Graphics Inc ++18ca XGI Technology Inc. (eXtreme Graphics Innovation) + 0020 Volari Z7 + 0040 Volari V3XT/V5/V8 ++ 0047 Volari 8300 (chip: XP10, codename: XG47) + 18d2 Sitecom + # Sitecom HFC-S based ISDN controller card DC-105v2 + 3069 DC-105v2 ISDN controller +@@ -10050,7 +10474,8 @@ + 0100 A104d QUAD T1/E1 AFT card + 0300 A101 single-port T1/E1 + 0400 A104u Quad T1/E1 AFT +-1924 Level 5 Networks Inc. ++# nee Level 5 Networks ++1924 Solarflare Communications + 192e TransDimension + 1931 Option N.V. + 000c Qualcomm MSM6275 UMTS chip +@@ -10073,31 +10498,46 @@ + 0086 MPC8343E + 0087 MPC8343 + 1958 Faster Technology, LLC. ++1959 PA Semi, Inc + 1966 Orad Hi-Tec Systems + 1975 DVG64 family + 1969 Attansic Technology Corp. + 1048 L1 Gigabit Ethernet Adapter ++ 2048 L2 100 Mbit Ethernet Adapter + 196a Sensory Networks Inc. + 0101 NodalCore C-1000 Content Classification Accelerator + 0102 NodalCore C-2000 Content Classification Accelerator ++ 0105 NodalCore C-3000 Content Classification Accelerator + 196d Club-3D BV ++1971 AGEIA Technologies, Inc. ++ 1011 Physics Processing Unit [PhysX] ++ 1043 0001 PhysX P1 + 197b JMicron Technologies, Inc. + 2360 JMicron 20360/20363 AHCI Controller + 2361 JMB361 AHCI/IDE ++ 1462 7235 P965 Neo MS-7235 mainboard + 2363 JMicron 20360/20363 AHCI Controller + 2365 JMB365 AHCI/IDE + 2366 JMB366 AHCI/IDE ++ 2368 JMB368 IDE controller ++1982 Distant Early Warning Communications Inc ++ 1600 OX16C954 HOST-A ++ 16ff OX16C954 HOST-B + 1989 Montilio Inc. + 0001 RapidFile Bridge + 8001 RapidFile + 1993 Innominate Security Technologies AG + 199a Pulse-LINK, Inc. ++19a2 ServerEngines LLC ++ 0200 BladeEngine 10Gb PCI-E iSCSI adapter ++ 0201 BladeEngine 10Gb PCI-E Network Adpater + 19a8 DAQDATA GmbH + 19ac Kasten Chase Applied Research + 0001 ACA2400 Crypto Accelerator + 19ae Progeny Systems Corporation + 0520 4135 HFT Interface Controller + 19d4 Quixant Limited ++19de Pico Computing + 19e2 Vector Informatik GmbH + 19e7 NET (Network Equipment Technologies) + 1001 STIX DSP Card +@@ -10107,11 +10547,25 @@ + 1005 STIX - 4 Port FXS Card + 1a03 ASPEED Technology, Inc. + 2000 AST2000 ++1a07 Kvaser AB ++ 0006 CAN interface PC104+ HS/HS ++ 0007 CAN interface PCIcanx II HS or HS/HS + 1a08 Sierra semiconductor + 0000 SC15064 + 1a1d GFaI e.V. ++ 1a17 Meta Networks MTP-1G IDPS NIC ++1a22 Ambric Inc. + 1a29 Fortinet, Inc. + 1a51 Hectronic AB ++1a5d Celoxica ++1a71 XenSource, Inc. ++1a73 Violin Memory, Inc ++ 0001 Mozart [Memory Appliance 1010] ++1a77 Lightfleet Corporation ++1a78 Virident Systems Inc. ++1a8c Verigy Pte. Ltd. ++ 1100 E8001-66443 PCI Express CIC ++1ab9 Espia Srl + 1b13 Jaton Corp + 1c1c Symphony + 0001 82C101 +@@ -10150,6 +10604,7 @@ + 0014 HiNT HC4 PCI to ISDN bridge, Network controller + 0020 HB6 Universal PCI-PCI bridge (transparent mode) + 0021 HB6 Universal PCI-PCI bridge (non-transparent mode) ++ 1775 c200 C2K CompactPCI interface bridge + 1775 ce90 CE9 + 4c53 1050 CT7 mainboard + 4c53 1080 CT8 mainboard +@@ -10235,6 +10690,11 @@ + 4710 ALC200/200P + 4033 Addtron Technology Co, Inc. + 1360 RTL8139 Ethernet ++4040 NetXen Incorporated ++ 0001 NXB-10GXSR 10 Gigabit Ethernet PCIe Adapter with SR-XFP optical interface ++ 0002 NXB-10GCX4 10 Gigabit Ethernet PCIe Adapter with CX4 copper interface ++ 0003 NXB-4GCU Quad Gigabit Ethernet PCIe Adapter with 1000-BASE-T interface ++ 0004 BladeCenter-H 10 Gigabit Ethernet High Speed Daughter Card + 4143 Digital Equipment Corp + 4144 Alpha Data + 0044 ADM-XRCIIPro +@@ -10242,6 +10702,7 @@ + 0100 AladdinCARD + 0200 CPC + 4321 Tata Power Strategic Electronics Division ++434e CAST Navigation LLC + 4444 Internext Compression Inc + 0016 iTVC16 (CX23416) MPEG-2 Encoder + 0070 0003 WinTV PVR 250 +@@ -10299,6 +10760,8 @@ + 4d51 MediaQ Inc. + 0200 MQ-200 + 4d54 Microtechnica Co Ltd ++4d56 MATRIX VISION GmbH ++ 0000 Altera Cyclone II CameraLink Frame Grabber [mvHYPERION-CLe] + 4ddc ILC Data Device Corp + 0100 DD-42924I5-300 (ARINC 429 Data Bus) + 0801 BU-65570I1 MIL-STD-1553 Test and Simulation +@@ -10371,6 +10834,7 @@ + 8903 Trio 3D business multimedia + 8904 Trio 64 3D + 1014 00db Integrated Trio3D ++ 4843 314a Terminator 128/3D GLH + 5333 8904 86C365 Trio3D AGP + 8905 Trio 64V+ family + 8906 Trio 64V+ family +@@ -10455,6 +10919,8 @@ + 8d02 VT8636A [ProSavage KN133] AGP4X VGA Controller (TwisterK) + 8d03 VT8751 [ProSavageDDR P4M266] + 8d04 VT8375 [ProSavage8 KM266/KL266] ++ 8e48 Chrome S27 PCIE ++ 5333 0130 Chrome S27 256M DDR2 + 9102 86C410 Savage 2000 + 1092 5932 Viper II Z200 + 1092 5934 Viper II Z200 +@@ -10469,6 +10935,7 @@ + 0350 TL880-based HDTV/ATSC tuner + 5455 Technische University Berlin + 4458 S5933 ++5456 GoTView + 5519 Cnet Technologies, Inc. + 5544 Dunord Technologies + 0001 I-30xx Scanner Interface +@@ -10478,6 +10945,8 @@ + 3132 OpenSwitch12 + 5700 Netpower + 5851 Exacq Technologies ++5853 XenSource, Inc. ++ 0001 Xen Platform Device + 6356 UltraStor + 6374 c't Magazin fuer Computertechnik + 6773 GPPCI +@@ -10555,14 +11024,15 @@ + # (bi-interleave 1) + 0537 E8870SP Interleave registers 2 and 3 + 0600 RAID Controller ++ 8086 0136 SRCU31L + 8086 01af SRCZCR + 8086 01c1 ICP Vortex GDT8546RZ + 8086 01f7 SCRU32 + # uninitialized SRCU32 RAID Controller + 061f 80303 I/O Processor +- 0960 80960RP [i960 RP Microprocessor/Bridge] +- 0962 80960RM [i960RM Bridge] +- 0964 80960RP [i960 RP Microprocessor/Bridge] ++ 0960 80960RP (i960RP) Microprocessor/Bridge ++ 0962 80960RM (i960RM) Bridge ++ 0964 80960RP (i960RP) Microprocessor/Bridge + 1000 82542 Gigabit Ethernet Controller + 0e11 b0df NC6132 Gigabit Ethernet Adapter (1000-SX) + 0e11 b0e0 NC6133 Gigabit Ethernet Adapter (1000-LX) +@@ -10586,6 +11056,7 @@ + 8086 2004 PRO/1000 T Server Adapter + 1008 82544EI Gigabit Ethernet Controller (Copper) + 1014 0269 iSeries 1000/100/10 Ethernet Adapter ++ 1028 011b PowerEdge 2550 + 1028 011c PRO/1000 XT Network Connection + 8086 1107 PRO/1000 XT Server Adapter + 8086 2107 PRO/1000 XT Server Adapter +@@ -10712,7 +11183,8 @@ + 103b 82801DB PRO/100 VM (LOM) Ethernet Controller + 103c 82801DB PRO/100 VM (CNR) Ethernet Controller + 103d 82801DB PRO/100 VE (MOB) Ethernet Controller +- 1014 0522 Thinkpad R50e model 1634 ++ 1014 0522 Thinkpad R40 model 2681 ++ 8086 103d 82562EZ 10/100 Ethernet Controller + 103e 82801DB PRO/100 VM (MOB) Ethernet Controller + 1040 536EP Data Fax Modem + 16be 1040 V.9X DSP Data Fax Modem +@@ -10720,11 +11192,13 @@ + 103c 08b0 tc1100 tablet + 8086 2522 Samsung P30 integrated WLAN + 8086 2527 MIM2000/Centrino ++ 8086 2561 Dell Latitude D800 + 8086 2581 Toshiba Satellite M10 + 1048 PRO/10GbE LR Server Adapter + 8086 a01f PRO/10GbE LR Server Adapter + 8086 a11f PRO/10GbE LR Server Adapter + 1049 82566MM Gigabit Network Connection ++ 17aa 20b9 Lenovo Thinkpad T61 + 104a 82566DM Gigabit Network Connection + 104b 82566DC Gigabit Network Connection + 104c 82562V 10/100 Network Connection +@@ -10746,6 +11220,7 @@ + 105b 82546GB Gigabit Ethernet Controller (Copper) + 105e 82571EB Gigabit Ethernet Controller + 103c 7044 NC360T PCI Express Dual Port Gigabit Server Adapter ++ 1775 1100 CR11/VR11 Single Board Computer + 1775 6003 Telum GE-QT + 8086 005e PRO/1000 PT Dual Port Server Connection + 8086 105e PRO/1000 PT Dual Port Network Connection +@@ -10847,6 +11322,7 @@ + 17aa 2001 ThinkPad T60 + 17aa 207e Thinkpad X60s + 8086 109a PRO/1000 PL Network Connection ++ 8086 309c DeskTop Board D945GTP + 109b 82546GB PRO/1000 GF Quad Port Server Adapter + 109e 82597EX 10GbE Ethernet Controller + 8086 a01f PRO/10GbE CX4 Server Adapter +@@ -10856,6 +11332,7 @@ + 10a4 82571EB Gigabit Ethernet Controller + 8086 10a4 PRO/1000 PT Quad Port Server Adapter + 8086 11a4 PRO/1000 PT Quad Port Server Adapter ++ 10a5 82571EB PRO/1000 PF Quad Port Server Adapter + 10b0 82573L PRO/1000 PL Network Connection + 10b2 82573V PRO/1000 PM Network Connection + 10b3 82573E PRO/1000 PM Network Connection +@@ -10864,6 +11341,7 @@ + 103c 3109 NC340T PCI-X Quad-port Gigabit Server Adapter + 8086 1099 PRO/1000 GT Quad Port Server Adapter + 8086 1199 PRO/1000 GT Quad Port Server Adapter ++ 10b6 82598 10GbE PCI-Express Ethernet Controller + 10b9 82572EI Gigabit Ethernet Controller (Copper) + 8086 1083 PRO/1000 PT Desktop Adapter + 8086 1093 PRO/1000 PT Desktop Adapter +@@ -10872,8 +11350,16 @@ + 10bc 82571EB Gigabit Ethernet Controller (Copper) + 8086 10bc PRO/1000 PT Quad Port LP Server Adapter + 8086 11bc PRO/1000 PT Quad Port LP Server Adapter ++ 10bd 82566DM-2 Gigabit Network Connection ++ 10c0 82562V-2 10/100 Network Connection ++ 10c2 82562G-2 10/100 Network Connection ++ 10c3 82562GT-2 10/100 Network Connection + 10c4 82562GT 10/100 Network Connection + 10c5 82562G 10/100 Network Connection ++ 10c6 82598AF DUAL PORT 10GbE PCI-Express Ethernet Controller ++ 10c7 82598AF SINGLE PORT 10GbE PCI-Express Ethernet Controller ++ 10d9 82571EB Dual Port Gigabit Mezzanine Adapter ++ 10da 82571EB Quad Port Gigabit Mezzanine Adapter + 1107 PRO/1000 MF Server Adapter (LX) + 1130 82815 815 Chipset Host Bridge and Memory Controller Hub + 1025 1016 Travelmate 612 TX +@@ -10882,7 +11368,7 @@ + 8086 4532 D815EEA2 mainboard + 8086 4557 D815EGEW Mainboard + 1131 82815 815 Chipset AGP Bridge +- 1132 82815 CGC [Chipset Graphics Controller] ++ 1132 82815 Chipset Graphics Controller (CGC) + 1025 1016 Travelmate 612 TX + 104d 80df Vaio PCG-FX403 + 8086 4532 D815EEA2 Mainboard +@@ -10904,8 +11390,7 @@ + 1226 82596 PRO/10 PCI + 1227 82865 EtherExpress PRO/100A + 1228 82556 EtherExpress PRO/100 Smart +-# the revision field differentiates between them (1-3 is 82557, 4-5 is 82558, 6-8 is 82559, 9 is 82559ER) +- 1229 82557/8/9 [Ethernet Pro 100] ++ 1229 82557/8/9 Ethernet Pro 100 + 0e11 3001 82559 Fast Ethernet LOM with Alert on LAN* + 0e11 3002 82559 Fast Ethernet LOM with Alert on LAN* + 0e11 3003 82559 Fast Ethernet LOM with Alert on LAN* +@@ -10974,6 +11459,7 @@ + 144d 2501 SEM-2000 MiniPCI LAN Adapter + 144d 2502 SEM-2100IL MiniPCI LAN Adapter + 1668 1100 EtherExpress PRO/100B (TX) (MiniPCI Ethernet+Modem) ++ 1775 1100 CR11/VR11 Single Board Computer + 1775 ce90 CE9 + 4c53 1080 CT8 mainboard + 4c53 10e0 PSL09 PrPMC +@@ -10985,8 +11471,7 @@ + 8086 0006 82557 10/100 with Wake on LAN + 8086 0007 82558 10/100 Adapter + 8086 0008 82558 10/100 with Wake on LAN +-# 8086:0009 revision 5, 82558B based +- 8086 0009 PRO/100+ PCI (TP) ++ 8086 0009 82558B PRO/100+ PCI (TP) + 8086 000a EtherExpress PRO/100+ Management Adapter + 8086 000b EtherExpress PRO/100+ + 8086 000c EtherExpress PRO/100+ Management Adapter +@@ -11089,7 +11574,7 @@ + 15d9 3480 P4DP6 + 4c53 1090 Cx9/Vx9 mainboard + 1462 82870P2 P64H2 Hot Plug Controller +- 1960 80960RP [i960RP Microprocessor] ++ 1960 80960RP (i960RP) Microprocessor + 101e 0431 MegaRAID 431 RAID Controller + 101e 0438 MegaRAID 438 Ultra2 LVD RAID Controller + 101e 0466 MegaRAID 466 Express Plus RAID Controller +@@ -11114,44 +11599,45 @@ + e4bf 1020 CU2-QUARTET + e4bf 1040 CU1-CHORUS + e4bf 3100 CX1-BAND +- 1962 80960RM [i960RM Microprocessor] ++ 1962 80960RM (i960RM) Microprocessor + 105a 0000 SuperTrak SX6000 I2O CPU +- 1a21 82840 840 (Carmel) Chipset Host Bridge (Hub A) +- 1a23 82840 840 (Carmel) Chipset AGP Bridge +- 1a24 82840 840 (Carmel) Chipset PCI Bridge (Hub B) +- 1a30 82845 845 (Brookdale) Chipset Host Bridge ++ 1a21 82840 840 [Carmel] Chipset Host Bridge (Hub A) ++ 1a23 82840 840 [Carmel] Chipset AGP Bridge ++ 1a24 82840 840 [Carmel] Chipset PCI Bridge (Hub B) ++ 1a30 82845 845 [Brookdale] Chipset Host Bridge + 1028 010e Optiplex GX240 +- 1a31 82845 845 (Brookdale) Chipset AGP Bridge ++ 1a31 82845 845 [Brookdale] Chipset AGP Bridge + 1a38 5000 Series Chipset DMA Engine + 1a48 PRO/10GbE SR Server Adapter + 1b48 82597EX 10GbE Ethernet Controller + 8086 a01f PRO/10GbE LR Server Adapter + 8086 a11f PRO/10GbE LR Server Adapter + 2410 82801AA ISA Bridge (LPC) +- 2411 82801AA IDE +- 2412 82801AA USB +- 2413 82801AA SMBus +- 2415 82801AA AC'97 Audio ++ 2411 82801AA IDE Controller ++ 2412 82801AA USB Controller ++ 2413 82801AA SMBus Controller ++ 2415 82801AA AC'97 Audio Controller + 1028 0095 Precision Workstation 220 Integrated Digital Audio ++ 1028 00b4 OptiPlex GX110 + 110a 0051 Activy 2xx + 11d4 0040 SoundMAX Integrated Digital Audio + 11d4 0048 SoundMAX Integrated Digital Audio + 11d4 5340 SoundMAX Integrated Digital Audio + 1734 1025 Activy 3xx +- 2416 82801AA AC'97 Modem ++ 2416 82801AA AC'97 Modem Controller + 2418 82801AA PCI Bridge + 2420 82801AB ISA Bridge (LPC) +- 2421 82801AB IDE +- 2422 82801AB USB +- 2423 82801AB SMBus +- 2425 82801AB AC'97 Audio ++ 2421 82801AB IDE Controller ++ 2422 82801AB USB Controller ++ 2423 82801AB SMBus Controller ++ 2425 82801AB AC'97 Audio Controller + 11d4 0040 SoundMAX Integrated Digital Audio + 11d4 0048 SoundMAX Integrated Digital Audio +- 2426 82801AB AC'97 Modem ++ 2426 82801AB AC'97 Modem Controller + 2428 82801AB PCI Bridge + 2440 82801BA ISA Bridge (LPC) + 8086 5744 S845WD1-E +- 2442 82801BA/BAM USB (Hub #1) ++ 2442 82801BA/BAM USB Controller #1 + 1014 01c6 Netvista A40/A40p + 1025 1016 Travelmate 612 TX + 1028 00c7 Dimension 8100 +@@ -11162,7 +11648,7 @@ + 8086 4532 D815EEA2 mainboard + 8086 4557 D815EGEW Mainboard + 8086 5744 S845WD1-E mainboard +- 2443 82801BA/BAM SMBus ++ 2443 82801BA/BAM SMBus Controller + 1014 01c6 Netvista A40/A40p + 1025 1016 Travelmate 612 TX + 1028 00c7 Dimension 8100 +@@ -11173,7 +11659,7 @@ + 8086 4532 D815EEA2 mainboard + 8086 4557 D815EGEW Mainboard + 8086 5744 S845WD1-E mainboard +- 2444 82801BA/BAM USB (Hub #2) ++ 2444 82801BA/BAM USB Controller #1 + 1025 1016 Travelmate 612 TX + 1028 00c7 Dimension 8100 + 1028 010e Optiplex GX240 +@@ -11182,7 +11668,7 @@ + 147b 0507 TH7II-RAID + 8086 4532 D815EEA2 mainboard + 8086 5744 S845WD1-E mainboard +- 2445 82801BA/BAM AC'97 Audio ++ 2445 82801BA/BAM AC'97 Audio Controller + 0e11 000b Compaq Deskpro EN Audio + 0e11 0088 Evo D500 + 1014 01c6 Netvista A40/A40p +@@ -11191,10 +11677,12 @@ + 1462 3370 STAC9721 AC + 147b 0507 TH7II-RAID + 8086 4557 D815EGEW Mainboard +- 2446 82801BA/BAM AC'97 Modem ++ 2446 82801BA/BAM AC'97 Modem Controller + 1025 1016 Travelmate 612 TX + 104d 80df Vaio PCG-FX403 + 2448 82801 Mobile PCI Bridge ++# (rev d3) (prog-if (rev d3) (prog-if 01 [Subtractive decode]) ++ 103c 0934 HP Compaq nw8240 Mobile Workstation + 103c 099c NX6110/NC6120 + 144d c00c P30 notebook + 1734 1055 Amilo M1420 +@@ -11229,10 +11717,10 @@ + 8086 3016 EtherExpress PRO/100 P Mobile Combo + 8086 3017 EtherExpress PRO/100 P Mobile + 8086 3018 EtherExpress PRO/100 +- 244a 82801BAM IDE U100 ++ 244a 82801BAM IDE U100 Controller + 1025 1016 Travelmate 612TX + 104d 80df Vaio PCG-FX403 +- 244b 82801BA IDE U100 ++ 244b 82801BA IDE U100 Controller + 1014 01c6 Netvista A40/A40p + 1028 00c7 Dimension 8100 + 1028 010e Optiplex GX240 +@@ -11245,14 +11733,14 @@ + 244e 82801 PCI Bridge + 1014 0267 NetVista A30p + 2450 82801E ISA Bridge (LPC) +- 2452 82801E USB +- 2453 82801E SMBus ++ 2452 82801E USB Controller ++ 2453 82801E SMBus Controller + 2459 82801E Ethernet Controller 0 +- 245b 82801E IDE U100 ++ 245b 82801E IDE U100 Controller + 245d 82801E Ethernet Controller 1 + 245e 82801E PCI Bridge + 2480 82801CA LPC Interface Controller +- 2482 82801CA/CAM USB (Hub #1) ++ 2482 82801CA/CAM USB Controller #1 + 0e11 0030 Evo N600c + 1014 0220 ThinkPad A/T/X Series + 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP +@@ -11265,7 +11753,7 @@ + 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP + 15d9 3480 P4DP6 + 8086 1958 vpr Matrix 170B4 +- 2484 82801CA/CAM USB (Hub #2) ++ 2484 82801CA/CAM USB Controller #2 + 0e11 0030 Evo N600c + 1014 0220 ThinkPad A/T/X Series + 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP +@@ -11276,6 +11764,9 @@ + 1014 0222 ThinkPad T23 (2647-4MG) or A30/A30p (2652/2653) + 1014 0508 ThinkPad T30 + 1014 051c ThinkPad A/T/X Series ++ 1043 1583 L3C (SPDIF) ++ 1043 1623 L2B (no SPDIF) ++ 1043 1643 L3F + 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP + 144d c006 vpr Matrix 170B4 + 2486 82801CA/CAM AC'97 Modem Controller +@@ -11287,13 +11778,13 @@ + 134d 4c21 Dell Inspiron 2100 internal modem + 144d 2115 vpr Matrix 170B4 internal modem + 14f1 5421 MD56ORD V.92 MDC Modem +- 2487 82801CA/CAM USB (Hub #3) ++ 2487 82801CA/CAM USB Controller #3 + 0e11 0030 Evo N600c + 1014 0220 ThinkPad A/T/X Series + 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP + 15d9 3480 P4DP6 + 8086 1958 vpr Matrix 170B4 +- 248a 82801CAM IDE U100 ++ 248a 82801CAM IDE U100 Controller + 0e11 0030 Evo N600c + 1014 0220 ThinkPad A/T/X Series + 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP +@@ -11308,7 +11799,7 @@ + 24c1 82801DBL (ICH4-L) IDE Controller + 24c2 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1 + 1014 0267 NetVista A30p +- 1014 052d Thinkpad R50e model 1634 ++ 1014 052d ThinkPad + 1025 005a TravelMate 290 + 1028 0126 Optiplex GX260 + 1028 0163 Latitude D505 +@@ -11317,31 +11808,38 @@ + 103c 0890 NC6000 laptop + 103c 08b0 tc1100 tablet + 1071 8160 MIM2000 +- 144d c00c P30 notebook ++ 144d c00c P30/P35 notebook + 1462 5800 845PE Max (MS-6580) + 1509 2990 Averatec 5110H laptop + 1734 1004 D1451 Mainboard (SCENIC N300, i845GV) + 1734 1055 Amilo M1420 + 4c53 1090 Cx9 / Vx9 mainboard ++ 8086 24c2 Latitude X300 + 8086 4541 Latitude D400 ++ e4bf 0cc9 CC9-SAMBA ++ e4bf 0cd2 CD2-BEBOP + 24c3 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) SMBus Controller + 1014 0267 NetVista A30p +- 1014 052d Thinkpad R50e model 1634 ++ 1014 052d ThinkPad + 1025 005a TravelMate 290 + 1028 0126 Optiplex GX260 ++ 1028 014f Latitude X300 + 103c 088c NC8000 laptop + 103c 0890 NC6000 laptop + 103c 08b0 tc1100 tablet + 1071 8160 MIM2000 ++ 144d c005 Samsung X10 Laptop + 144d c00c P30/P35 notebook + 1458 24c2 GA-8PE667 Ultra + 1462 5800 845PE Max (MS-6580) + 1734 1004 D1451 Mainboard (SCENIC N300, i845GV) + 1734 1055 Amilo M1420 + 4c53 1090 Cx9 / Vx9 mainboard ++ e4bf 0cc9 CC9-SAMBA ++ e4bf 0cd2 CD2-BEBOP + 24c4 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #2 + 1014 0267 NetVista A30p +- 1014 052d Thinkpad R50e model 1634 ++ 1014 052d ThinkPad + 1025 005a TravelMate 290 + 1028 0126 Optiplex GX260 + 1028 0163 Latitude D505 +@@ -11350,30 +11848,40 @@ + 103c 0890 NC6000 laptop + 103c 08b0 tc1100 tablet + 1071 8160 MIM2000 +- 144d c00c P30 notebook ++ 144d c00c P30/P35 notebook + 1462 5800 845PE Max (MS-6580) + 1509 2990 Averatec 5110H + 1734 1004 D1451 Mainboard (SCENIC N300, i845GV) + 4c53 1090 Cx9 / Vx9 mainboard ++ 8086 24c2 Latitude X300 + 8086 4541 Latitude D400 ++ e4bf 0cc9 CC9-SAMBA ++ e4bf 0cd2 CD2-BEBOP + 24c5 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Audio Controller + 0e11 00b8 Analog Devices Inc. codec [SoundMAX] + 1014 0267 NetVista A30p ++ 1014 0537 ThinkPad T41 + 1014 055f Thinkpad R50e model 1634 + 1025 005a TravelMate 290 + 1028 0139 Latitude D400 ++ 1028 014f Latitude X300 + 1028 0163 Latitude D505 + 1028 0196 Inspiron 5160 + 103c 088c NC8000 laptop + 103c 0890 NC6000 laptop + 103c 08b0 tc1100 tablet + 1071 8160 MIM2000 +- 144d c00c P30 notebook ++ 144d c005 Samsung X10 Laptop ++ 144d c00c P30/P35 notebook + 1458 a002 GA-8PE667 Ultra + 1462 5800 845PE Max (MS-6580) + 1734 1005 D1451 (SCENIC N300, i845GV) Sigmatel STAC9750T + 1734 1055 Amilo M1420 ++ 8086 24c5 Dell Dimension 2400 ++ a002 1458 Realtek AC'97 codec [ALC655] + 24c6 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Modem Controller ++ 1014 0524 Thinkpad T41 ++ 1014 0525 ThinkPad + 1014 0559 Thinkpad R50e model 1634 + 1025 003c Aspire 2001WLCi (Compal CL50 motherboard) implementation + 1025 005a TravelMate 290 +@@ -11382,10 +11890,11 @@ + 103c 0890 NC6000 laptop + 103c 08b0 tc1100 tablet + 1071 8160 MIM2000 +- 144d c00c P30 notebook ++ 144d 2115 Samsung X10 Laptop ++ 144d c00c P30/P35 notebook + 24c7 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3 + 1014 0267 NetVista A30p +- 1014 052d Thinkpad R50e model 1634 ++ 1014 052d ThinkPad + 1025 005a TravelMate 290 + 1028 0126 Optiplex GX260 + 1028 0163 Latitude D505 +@@ -11394,22 +11903,26 @@ + 103c 0890 NC6000 laptop + 103c 08b0 tc1100 tablet + 1071 8160 MIM2000 +- 144d c00c P30 notebook ++ 144d c00c P30/P35 notebook + 1462 5800 845PE Max (MS-6580) + 1509 2990 Averatec 5110H + 1734 1004 D1451 Mainboard (SCENIC N300, i845GV) + 4c53 1090 Cx9 / Vx9 mainboard ++ 8086 24c2 Latitude X300 + 8086 4541 Latitude D400 ++ e4bf 0cc9 CC9-SAMBA ++ e4bf 0cd2 CD2-BEBOP + 24ca 82801DBM (ICH4-M) IDE Controller +- 1014 052d Thinkpad R50e model 1634 ++ 1014 052d ThinkPad + 1025 005a TravelMate 290 ++ 1028 014f Latitude X300 + 1028 0163 Latitude D505 + 1028 0196 Inspiron 5160 + 103c 088c NC8000 laptop + 103c 0890 NC6000 laptop + 103c 08b0 tc1100 tablet + 1071 8160 MIM2000 +- 144d c00c P30 notebook ++ 144d c00c P30/P35 notebook + 1734 1055 Amilo M1420 + 8086 4541 Latitude D400 + 24cb 82801DB (ICH4) IDE Controller +@@ -11419,12 +11932,14 @@ + 1462 5800 845PE Max (MS-6580) + 1734 1004 D1451 Mainboard (SCENIC N300, i845GV) + 4c53 1090 Cx9 / Vx9 mainboard ++ e4bf 0cc9 CC9-SAMBA ++ e4bf 0cd2 CD2-BEBOP + 24cc 82801DBM (ICH4-M) LPC Interface Bridge + 144d c00c P30 notebook + 1734 1055 Amilo M1420 + 24cd 82801DB/DBM (ICH4/ICH4-M) USB2 EHCI Controller + 1014 0267 NetVista A30p +- 1014 052e Thinkpad R50e model 1634 ++ 1014 052e ThinkPad + 1025 005a TravelMate 290 + 1028 011d Latitude D600 + 1028 0126 Optiplex GX260 +@@ -11436,12 +11951,15 @@ + 103c 08b0 tc1100 tablet + 1071 8160 MIM2000 + 1179 ff00 Satellite 2430 +- 144d c00c P30 notebook ++ 144d c00c P30/P35 notebook + 1462 3981 845PE Max (MS-6580) + 1509 1968 Averatec 5110H + 1734 1004 D1451 Mainboard (SCENIC N300, i845GV) + 1734 1055 Amilo M1420 + 4c53 1090 Cx9 / Vx9 mainboard ++ 8086 24c2 Latitude X300 ++ e4bf 0cc9 CC9-SAMBA ++ e4bf 0cd2 CD2-BEBOP + 24d0 82801EB/ER (ICH5/ICH5R) LPC Interface Bridge + 24d1 82801EB (ICH5) SATA Controller + 1028 0169 Precision 470 +@@ -11450,13 +11968,15 @@ + 1043 80a6 P4P800 SE Mainboard + 1458 24d1 GA-8IPE1000 Pro2 motherboard (865PE) + 1462 7280 865PE Neo2 (MS-6728) ++ 1565 5200 P4TSV Motherboard (865G) + 15d9 4580 P4SCE Mainboard + 8086 3427 S875WP1-E mainboard + 8086 4246 Desktop Board D865GBF + 8086 4c43 Desktop Board D865GLC + 8086 524c D865PERL mainboard + 24d2 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #1 +- 1014 02ed xSeries server mainboard ++ 1014 02dd eServer xSeries server mainboard ++ 1014 02ed eServer xSeries server mainboard + 1028 0169 Precision 470 + 1028 0183 PowerEdge 1800 + 1028 019a PowerEdge SC1425 +@@ -11465,6 +11985,7 @@ + 1043 80a6 P5P800-MX Mainboard + 1458 24d2 GA-8IPE1000/8KNXP motherboard + 1462 7280 865PE Neo2 (MS-6728) ++ 1565 3101 P4TSV Motherboard (865G) + 15d9 4580 P4SCE Mainboard + 1734 101c Primergy RX300 S2 + 8086 3427 S875WP1-E mainboard +@@ -11472,13 +11993,15 @@ + 8086 4c43 Desktop Board D865GLC + 8086 524c D865PERL mainboard + 24d3 82801EB/ER (ICH5/ICH5R) SMBus Controller +- 1014 02ed xSeries server mainboard ++ 1014 02dd eServer xSeries server mainboard ++ 1014 02ed eServer xSeries server mainboard + 1028 0156 Precision 360 + 1028 0169 Precision 470 + 103c 12bc d330 uT + 1043 80a6 P4P800 Mainboard + 1458 24d2 GA-8IPE1000 Pro2 motherboard (865PE) + 1462 7280 865PE Neo2 (MS-6728) ++ 1565 3101 P4TSV Motherboard (865G) + 15d9 4580 P4SCE Mainboard + 1734 101c Primergy RX300 S2 + 8086 3427 S875WP1-E mainboard +@@ -11486,7 +12009,8 @@ + 8086 4c43 Desktop Board D865GLC + 8086 524c D865PERL mainboard + 24d4 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #2 +- 1014 02ed xSeries server mainboard ++ 1014 02dd eServer xSeries server mainboard ++ 1014 02ed eServer xSeries server mainboard + 1028 0169 Precision 470 + 1028 0183 PowerEdge 1800 + 1028 019a PowerEdge SC1425 +@@ -11495,6 +12019,7 @@ + 1043 80a6 P5P800-MX Mainboard + 1458 24d2 GA-8IPE1000 Pro2 motherboard (865PE) + 1462 7280 865PE Neo2 (MS-6728) ++ 1565 3101 P4TSV Motherboard (865G) + 15d9 4580 P4SCE Mainboard + 1734 101c Primergy RX300 S2 + 8086 3427 S875WP1-E mainboard +@@ -11526,6 +12051,7 @@ + 1043 80a6 P5P800-MX Mainboard + 1458 24d2 GA-8IPE1000 Pro2 motherboard (865PE) + 1462 7280 865PE Neo2 (MS-6728) ++ 1565 3101 P4TSV Motherboard (865G) + 15d9 4580 P4SCE Mainboard + 1734 101c Primergy RX300 S2 + 8086 3427 S875WP1-E mainboard +@@ -11533,7 +12059,8 @@ + 8086 4c43 Desktop Board D865GLC + 8086 524c D865PERL mainboard + 24db 82801EB/ER (ICH5/ICH5R) IDE Controller +- 1014 02ed xSeries server mainboard ++ 1014 02dd eServer xSeries server mainboard ++ 1014 02ed eServer xSeries server mainboard + 1028 0169 Precision 470 + 1028 019a PowerEdge SC1425 + 103c 006a NX9500 +@@ -11542,6 +12069,7 @@ + 1458 24d2 GA-8IPE1000 Pro2 motherboard (865PE) + 1462 7280 865PE Neo2 (MS-6728) + 1462 7580 MSI 875P ++ 1565 3101 P4TSV Motherboard (865G) + 15d9 4580 P4SCE Mainboard + 1734 101c Primergy RX300 S2 + 8086 24db P4C800 Mainboard +@@ -11551,7 +12079,8 @@ + 8086 524c D865PERL mainboard + 24dc 82801EB (ICH5) LPC Interface Bridge + 24dd 82801EB/ER (ICH5/ICH5R) USB2 EHCI Controller +- 1014 02ed xSeries server mainboard ++ 1014 02dd eServer xSeries server mainboard ++ 1014 02ed eServer xSeries server mainboard + 1028 0169 Precision 470 + 1028 0183 PowerEdge 1800 + 1028 019a PowerEdge SC1425 +@@ -11570,6 +12099,7 @@ + 1043 80a6 P5P800-MX Mainboard + 1458 24d2 GA-8IPE1000 Pro2 motherboard (865PE) + 1462 7280 865PE Neo2 (MS-6728) ++ 1565 3101 P4TSV Motherboard (865G) + 15d9 4580 P4SCE Mainboard + 1734 101c Primergy RX300 S2 + 8086 3427 S875WP1-E mainboard +@@ -11623,6 +12153,7 @@ + 2562 82845G/GL[Brookdale-G]/GE Chipset Integrated Graphics Device + 0e11 00b9 Evo D510 SFF + 1014 0267 NetVista A30p ++ 1734 1003 D1521 Mainboard (Fujitsu-Siemens) + 1734 1004 D1451 Mainboard (SCENIC N300, i845GV) + 2570 82865G/PE/P DRAM Controller/Host-Hub Interface + 103c 006a NX9500 +@@ -11656,6 +12187,7 @@ + 1043 2582 P5GD1-VW Mainboard + 1458 2582 GA-8I915ME-G Mainboard + 1734 105b Scenic W620 ++ 1849 2582 ASRock P4Dual-915GL + 2584 82925X/XE Memory Controller Hub + 2585 82925X/XE PCI Express Root Port + 2588 E7220/E7221 Memory Controller Hub +@@ -11663,64 +12195,85 @@ + 258a E7221 Integrated Graphics Controller + 2590 Mobile 915GM/PM/GMS/910GML Express Processor to DRAM Controller + 1028 0182 Dell Latidude C610 ++# (rev 03) ++ 103c 0934 HP Compaq nw8240 Mobile Workstation + 103c 099c NX6110/NC6120 ++ 104d 81b7 Vaio VGN-S3XP + a304 81b7 Vaio VGN-S3XP ++ e4bf 0ccd CCD-CALYPSO ++ e4bf 0cd3 CD3-JIVE ++ e4bf 58b1 XB1 + 2591 Mobile 915GM/PM Express PCI Express Root Port ++# (rev 03) (prog-if 00 [Normal decode]) ++ 103c 0934 HP Compaq nw8240 Mobile Workstation + 2592 Mobile 915GM/GMS/910GML Express Graphics Controller + 103c 099c NX6110/NC6120 + 103c 308a NC6220 + 1043 1881 GMA 900 915GM Integrated Graphics ++ e4bf 0ccd CCD-CALYPSO ++ e4bf 0cd3 CD3-JIVE ++ e4bf 58b1 XB1 + 25a1 6300ESB LPC Interface Controller + 25a2 6300ESB PATA Storage Controller + 1775 10d0 V5D Single Board Computer IDE ++ 1775 1100 CR11/VR11 Single Board Computer + 1775 ce90 CE9 + 4c53 10b0 CL9 mainboard + 4c53 10e0 PSL09 PrPMC + 25a3 6300ESB SATA Storage Controller ++ 1775 1100 CR11/VR11 Single Board Computer + 1775 ce90 CE9 + 4c53 10b0 CL9 mainboard + 4c53 10d0 Telum ASLP10 Processor AMC + 4c53 10e0 PSL09 PrPMC + 25a4 6300ESB SMBus Controller + 1775 10d0 V5D Single Board Computer ++ 1775 1100 CR11/VR11 Single Board Computer + 1775 ce90 CE9 + 4c53 10b0 CL9 mainboard + 4c53 10d0 Telum ASLP10 Processor AMC + 4c53 10e0 PSL09 PrPMC + 25a6 6300ESB AC'97 Audio Controller ++ 1775 1100 CR11/VR11 Single Board Computer + 1775 ce90 CE9 + 4c53 10b0 CL9 mainboard + 25a7 6300ESB AC'97 Modem Controller + 25a9 6300ESB USB Universal Host Controller + 1775 10d0 V5D Single Board Computer USB ++ 1775 1100 CR11/VR11 Single Board Computer + 1775 ce90 CE9 + 4c53 10b0 CL9 mainboard + 4c53 10d0 Telum ASLP10 Processor AMC + 4c53 10e0 PSL09 PrPMC + 25aa 6300ESB USB Universal Host Controller ++ 1775 1100 CR11/VR11 Single Board Computer + 1775 ce90 CE9 + 4c53 10b0 CL9 mainboard + 4c53 10e0 PSL09 PrPMC + 25ab 6300ESB Watchdog Timer + 1775 10d0 V5D Single Board Computer ++ 1775 1100 CR11/VR11 Single Board Computer + 1775 ce90 CE9 + 4c53 10b0 CL9 mainboard + 4c53 10d0 Telum ASLP10 Processor AMC + 4c53 10e0 PSL09 PrPMC + 25ac 6300ESB I/O Advanced Programmable Interrupt Controller + 1775 10d0 V5D Single Board Computer ++ 1775 1100 CR11/VR11 Single Board Computer + 1775 ce90 CE9 + 4c53 10b0 CL9 mainboard + 4c53 10d0 Telum ASLP10 Processor AMC + 4c53 10e0 PSL09 PrPMC + 25ad 6300ESB USB2 Enhanced Host Controller + 1775 10d0 V5D Single Board Computer USB 2.0 ++ 1775 1100 CR11/VR11 Single Board Computer + 1775 ce90 CE9 + 4c53 10b0 CL9 mainboard + 4c53 10d0 Telum ASLP10 Processor AMC + 4c53 10e0 PSL09 PrPMC + 25ae 6300ESB 64-bit PCI-X Bridge + 25b0 6300ESB SATA RAID Controller ++ 1775 1100 CR11/VR11 Single Board Computer + 4c53 10d0 Telum ASLP10 Processor AMC + 4c53 10e0 PSL09 PrPMC + 25c0 5000X Chipset Memory Controller Hub +@@ -11779,7 +12332,12 @@ + 2640 82801FB/FR (ICH6/ICH6R) LPC Interface Bridge + 1462 7028 915P/G Neo2 + 1734 105c Scenic W620 ++ e4bf 0ccd CCD-CALYPSO ++ e4bf 0cd3 CD3-JIVE ++ e4bf 58b1 XB1 + 2641 82801FBM (ICH6M) LPC Interface Bridge ++# (rev 03) ++ 103c 0934 HP Compaq nw8240 Mobile Workstation + 103c 099c NX6110/NC6120 + 2642 82801FW/FRW (ICH6W/ICH6RW) LPC Interface Bridge + 2651 82801FB/FW (ICH6/ICH6W) SATA Controller +@@ -11787,30 +12345,48 @@ + 1043 2601 P5GD1-VW Mainboard + 1734 105c Scenic W620 + 8086 4147 D915GAG Motherboard ++ e4bf 0ccd CCD-CALYPSO ++ e4bf 0cd3 CD3-JIVE ++ e4bf 58b1 XB1 + 2652 82801FR/FRW (ICH6R/ICH6RW) SATA Controller + 1462 7028 915P/G Neo2 + 2653 82801FBM (ICH6M) SATA Controller + 2658 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #1 + 1028 0179 Optiplex GX280 ++# (rev 03) (prog-if 00 [UHCI]) ++ 103c 0934 HP Compaq nw8240 Mobile Workstation + 103c 099c NX6110/NC6120 + 1043 80a6 P5GD1-VW Mainboard + 1458 2558 GA-8I915ME-G Mainboard + 1462 7028 915P/G Neo2 + 1734 105c Scenic W620 ++ e4bf 0ccd CCD-CALYPSO ++ e4bf 0cd3 CD3-JIVE ++ e4bf 58b1 XB1 + 2659 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #2 + 1028 0179 Optiplex GX280 ++# (prog-if 00 [UHCI]) ++ 103c 0934 HP Compaq nw8240 Mobile Workstation + 103c 099c NX6110/NC6120 + 1043 80a6 P5GD1-VW Mainboard + 1458 2659 GA-8I915ME-G Mainboard + 1462 7028 915P/G Neo2 + 1734 105c Scenic W620 ++ e4bf 0ccd CCD-CALYPSO ++ e4bf 0cd3 CD3-JIVE ++ e4bf 58b1 XB1 + 265a 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #3 + 1028 0179 Optiplex GX280 ++# (prog-if 00 [UHCI]) ++ 103c 0934 HP Compaq nw8240 Mobile Workstation + 103c 099c NX6110/NC6120 + 1043 80a6 P5GD1-VW Mainboard + 1458 265a GA-8I915ME-G Mainboard + 1462 7028 915P/G Neo2 + 1734 105c Scenic W620 ++ e4bf 0ccd CCD-CALYPSO ++ e4bf 0cd3 CD3-JIVE ++ e4bf 58b1 XB1 + 265b 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #4 + 1028 0179 Optiplex GX280 + 103c 099c NX6110/NC6120 +@@ -11818,19 +12394,43 @@ + 1458 265a GA-8I915ME-G Mainboard + 1462 7028 915P/G Neo2 + 1734 105c Scenic W620 ++ e4bf 0ccd CCD-CALYPSO ++ e4bf 0cd3 CD3-JIVE ++ e4bf 58b1 XB1 + 265c 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB2 EHCI Controller + 1028 0179 Optiplex GX280 ++# (rev 03) (prog-if 20 [EHCI]) ++ 103c 0934 HP Compaq nw8240 Mobile Workstation + 103c 099c NX6110/NC6120 + 1043 80a6 P5GD1-VW Mainboard + 1458 5006 GA-8I915ME-G Mainboard + 1462 7028 915P/G Neo2 + 1734 105c Scenic W620 + 8086 265c Dimension 3100 ++ e4bf 0ccd CCD-CALYPSO ++ e4bf 0cd3 CD3-JIVE ++ e4bf 58b1 XB1 + 2660 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 1 ++# (rev 03) (prog-if 00 [Normal decode]) ++ 103c 0934 HP Compaq nw8240 Mobile Workstation + 103c 099c NX6110/NC6120 ++ e4bf 0ccd CCD-CALYPSO ++ e4bf 0cd3 CD3-JIVE ++ e4bf 58b1 XB1 + 2662 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 2 ++# (rev 03) (prog-if 00 [Normal decode]) ++ 103c 0934 HP Compaq nw8240 Mobile Workstation ++ e4bf 0ccd CCD-CALYPSO ++ e4bf 0cd3 CD3-JIVE ++ e4bf 58b1 XB1 + 2664 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 3 ++ e4bf 0ccd CCD-CALYPSO ++ e4bf 0cd3 CD3-JIVE ++ e4bf 58b1 XB1 + 2666 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 4 ++ e4bf 0ccd CCD-CALYPSO ++ e4bf 0cd3 CD3-JIVE ++ e4bf 58b1 XB1 + 2668 82801FB/FBM/FR/FW/FRW (ICH6 Family) High Definition Audio Controller + # based on the PTGD1-LA motherboard + 103c 2a09 PufferM-UL8E +@@ -11841,15 +12441,22 @@ + 1458 266a GA-8I915ME-G Mainboard + 1462 7028 915P/G Neo2 + 1734 105c Scenic W620 ++ e4bf 0ccd CCD-CALYPSO ++ e4bf 0cd3 CD3-JIVE ++ e4bf 58b1 XB1 + 266c 82801FB/FBM/FR/FW/FRW (ICH6 Family) LAN Controller + 266d 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Modem Controller + 1025 006a Conexant AC'97 CoDec (in Acer TravelMate 2410 serie laptop) ++# (rev 03) (prog-if 00 [Generic]) ++ 103c 0934 HP Compaq nw8240 Mobile Workstation + 103c 099c NX6110/NC6120 + 266e 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Audio Controller + 1025 006a Realtek ALC 655 codec (in Acer TravelMate 2410 serie laptop) + 1028 0179 Optiplex GX280 + 1028 0182 Latitude D610 Laptop + 1028 0188 Inspiron 6000 laptop ++# (rev 03) ++ 103c 0934 HP Compaq nw8240 Mobile Workstation + 103c 0944 Compaq NC6220 + 103c 099c NX6110/NC6120 + 103c 3006 DC7100 SFF(DX878AV) +@@ -11857,16 +12464,21 @@ + 152d 0745 Packard Bell A8550 Laptop + 1734 105a Scenic W620 + 266f 82801FB/FBM/FR/FW/FRW (ICH6 Family) IDE Controller ++# (rev 03) (prog-if 8a [Master SecP PriP]) ++ 103c 0934 HP Compaq nw8240 Mobile Workstation + 103c 099c NX6110/NC6120 + 1043 80a6 P5GD1-VW Mainboard + 1458 266f GA-8I915ME-G Mainboard + 1462 7028 915P/G Neo2 + 1734 105c Scenic W620 ++ e4bf 0ccd CCD-CALYPSO ++ e4bf 0cd3 CD3-JIVE ++ e4bf 58b1 XB1 + 2670 631xESB/632xESB/3100 Chipset LPC Interface Controller +- 2680 631xESB/632xESB/3100 Chipset SATA Storage Controller IDE +- 2681 631xESB/632xESB SATA Storage Controller AHCI +- 2682 631xESB/632xESB SATA Storage Controller RAID +- 2683 631xESB/632xESB SATA Storage Controller RAID ++ 2680 631xESB/632xESB/3100 Chipset SATA IDE Controller ++ 2681 631xESB/632xESB SATA AHCI Controller ++ 2682 631xESB/632xESB SATA RAID Controller ++ 2683 631xESB/632xESB SATA RAID Controller + 2688 631xESB/632xESB/3100 Chipset UHCI USB Controller #1 + 2689 631xESB/632xESB/3100 Chipset UHCI USB Controller #2 + 268a 631xESB/632xESB/3100 Chipset UHCI USB Controller #3 +@@ -11894,6 +12506,7 @@ + 2779 E7230/3000/3010 PCI Express Root Port + 277a 82975X/3010 PCI Express Root Port + 277c 82975X Memory Controller Hub ++ 1043 8178 P5WDG2 WS Professional motherboard + 277d 82975X PCI Express Root Port + 2782 82915G Integrated Graphics Controller + 1043 2582 P5GD1-VW Mainboard +@@ -11901,17 +12514,22 @@ + 2792 Mobile 915GM/GMS/910GML Express Graphics Controller + 103c 099c NX6110/NC6120 + 1043 1881 GMA 900 915GM Integrated Graphics +- 27a0 Mobile 945GM/PM/GMS/940GML and 945GT Express Memory Controller Hub ++ e4bf 0ccd CCD-CALYPSO ++ e4bf 0cd3 CD3-JIVE ++ e4bf 58b1 XB1 ++ 27a0 Mobile 945GM/PM/GMS, 943/940GML and 945GT Express Memory Controller Hub ++ 1025 006c 9814 WKMI + 103c 30a1 NC2400 + 17aa 2017 Thinkpad R60e model 0657 +- 27a1 Mobile 945GM/PM/GMS/940GML and 945GT Express PCI Express Root Port +- 27a2 Mobile 945GM/GMS/940GML Express Integrated Graphics Controller ++ 27a1 Mobile 945GM/PM/GMS, 943/940GML and 945GT Express PCI Express Root Port ++ 27a2 Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller + 103c 30a1 NC2400 + 17aa 201a Thinkpad R60e model 0657 +- 27a6 Mobile 945GM/GMS/940GML Express Integrated Graphics Controller ++ 27a6 Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller + 103c 30a1 NC2400 + 17aa 201a Thinkpad R60e model 0657 + 27b0 82801GH (ICH7DH) LPC Interface Bridge ++ 8086 544e DeskTop Board D945GTP + 27b8 82801GB/GR (ICH7 Family) LPC Interface Bridge + 107b 5048 E4500 + 8086 544e DeskTop Board D945GTP +@@ -11920,36 +12538,45 @@ + 10f7 8338 Panasonic CF-Y5 laptop + 17aa 2009 ThinkPad T60/R60 series + 27bd 82801GHM (ICH7-M DH) LPC Interface Bridge +- 27c0 82801GB/GR/GH (ICH7 Family) Serial ATA Storage Controller IDE ++ 1025 006c 9814 WKMI ++ 27c0 82801GB/GR/GH (ICH7 Family) SATA IDE Controller + 107b 5048 E4500 ++ 1462 7236 945P Neo3-F Rev. 2.2 motherboard ++ 8086 544e DeskTop Board D945GTP ++ 27c1 82801GR/GH (ICH7 Family) SATA AHCI Controller ++ 27c3 82801GR/GH (ICH7 Family) SATA RAID Controller + 8086 544e DeskTop Board D945GTP +- 27c1 82801GR/GH (ICH7 Family) Serial ATA Storage Controller AHCI +- 27c3 82801GR/GH (ICH7 Family) Serial ATA Storage Controller RAID +- 27c4 82801GBM/GHM (ICH7 Family) Serial ATA Storage Controller IDE +- 27c5 82801GBM/GHM (ICH7 Family) Serial ATA Storage Controller AHCI ++ 27c4 82801GBM/GHM (ICH7 Family) SATA IDE Controller ++ 1025 006c 9814 WKMI ++ 27c5 82801GBM/GHM (ICH7 Family) SATA AHCI Controller + 17aa 200d Thinkpad R60e model 0657 +- 27c6 82801GHM (ICH7-M DH) Serial ATA Storage Controller RAID +- 27c8 82801G (ICH7 Family) USB UHCI #1 ++ 27c6 82801GHM (ICH7-M DH) SATA RAID Controller ++ 27c8 82801G (ICH7 Family) USB UHCI Controller #1 ++ 1025 006c 9814 WKMI + 103c 30a1 NC2400 + 107b 5048 E4500 + 17aa 200a ThinkPad T60/R60 series + 8086 544e DeskTop Board D945GTP +- 27c9 82801G (ICH7 Family) USB UHCI #2 ++ 27c9 82801G (ICH7 Family) USB UHCI Controller #2 ++ 1025 006c 9814 WKMI + 103c 30a1 NC2400 + 107b 5048 E4500 + 17aa 200a ThinkPad T60/R60 series + 8086 544e DeskTop Board D945GTP +- 27ca 82801G (ICH7 Family) USB UHCI #3 ++ 27ca 82801G (ICH7 Family) USB UHCI Controller #3 ++ 1025 006c 9814 WKMI + 103c 30a1 NC2400 + 107b 5048 E4500 + 17aa 200a ThinkPad T60/R60 series + 8086 544e DeskTop Board D945GTP +- 27cb 82801G (ICH7 Family) USB UHCI #4 ++ 27cb 82801G (ICH7 Family) USB UHCI Controller #4 ++ 1025 006c 9814 WKMI + 103c 30a1 NC2400 + 107b 5048 E4500 + 17aa 200a ThinkPad T60/R60 series + 8086 544e DeskTop Board D945GTP + 27cc 82801G (ICH7 Family) USB2 EHCI Controller ++ 1025 006c 9814 WKMI + 103c 30a1 NC2400 + 17aa 200b ThinkPad T60/R60 series + 8086 544e DeskTop Board D945GTP +@@ -11958,14 +12585,19 @@ + 27d4 82801G (ICH7 Family) PCI Express Port 3 + 27d6 82801G (ICH7 Family) PCI Express Port 4 + 27d8 82801G (ICH7 Family) High Definition Audio Controller ++ 1025 006c 9814 WKMI + 103c 30a1 NC2400 ++ 1043 13c4 Asus G2P + 107b 5048 E4500 + 10f7 8338 Panasonic CF-Y5 laptop +- 1179 ff31 Toshiba America Information Systems:AC97 Data Fax SoftModem with SmartCP ++ 1179 ff31 AC97 Data Fax SoftModem with SmartCP + 152d 0753 Softmodem + 1734 10ad Conexant softmodem SmartCP + 17aa 2010 ThinkPad T60/R60 series ++ 17aa 3802 Lenovo 3000 C200 audio [Realtek ALC861VD] ++ 8086 1112 DeskTop Board D945GTP + 27da 82801G (ICH7 Family) SMBus Controller ++ 1025 006c 9814 WKMI + 10f7 8338 Panasonic CF-Y5 laptop + 17aa 200f ThinkPad T60/R60 series + 8086 544e DeskTop Board D945GTP +@@ -11973,6 +12605,7 @@ + 8086 308d DeskTop Board D945GTP + 27dd 82801G (ICH7 Family) AC'97 Modem Controller + 27de 82801G (ICH7 Family) AC'97 Audio Controller ++ 1462 7267 Realtek ALC883 Audio Controller + 27df 82801G (ICH7 Family) IDE Controller + 103c 30a1 NC2400 + 107b 5048 E4500 +@@ -11982,31 +12615,34 @@ + 27e0 82801GR/GH/GHM (ICH7 Family) PCI Express Port 5 + 27e2 82801GR/GH/GHM (ICH7 Family) PCI Express Port 6 + 2810 82801HB/HR (ICH8/R) LPC Interface Controller +- 2811 Mobile LPC Interface Controller ++ 2811 82801HBM (ICH8M-E) LPC Interface Controller + 2812 82801HH (ICH8DH) LPC Interface Controller + 2814 82801HO (ICH8DO) LPC Interface Controller +- 2815 Mobile LPC Interface Controller ++ 2815 82801HEM (ICH8M) LPC Interface Controller + 2820 82801H (ICH8 Family) 4 port SATA IDE Controller + 1462 7235 P965 Neo MS-7235 mainboard + 2821 82801HR/HO/HH (ICH8R/DO/DH) 6 port SATA AHCI Controller +- 2822 82801HR/HO/HH (ICH8R/DO/DH) SATA RAID Controller ++ 2822 82801 SATA RAID Controller + 2824 82801HB (ICH8) 4 port SATA AHCI Controller + 2825 82801H (ICH8 Family) 2 port SATA IDE Controller + 1462 7235 P965 Neo MS-7235 mainboard +- 2828 Mobile SATA IDE Controller +- 2829 Mobile SATA AHCI Controller +- 282a Mobile SATA RAID Controller +- 2830 82801H (ICH8 Family) USB UHCI #1 ++ 2828 82801HBM/HEM (ICH8M/ICH8M-E) SATA IDE Controller ++ 2829 82801HBM/HEM (ICH8M/ICH8M-E) SATA AHCI Controller ++ 282a Mobile 82801 SATA RAID Controller ++ 2830 82801H (ICH8 Family) USB UHCI Controller #1 + 1462 7235 P965 Neo MS-7235 mainboard +- 2831 82801H (ICH8 Family) USB UHCI #2 ++ 2831 82801H (ICH8 Family) USB UHCI Controller #2 + 1462 7235 P965 Neo MS-7235 mainboard +- 2832 82801H (ICH8 Family) USB UHCI #3 +- 2834 82801H (ICH8 Family) USB UHCI #4 ++ 2832 82801H (ICH8 Family) USB UHCI Controller #3 ++ 2834 82801H (ICH8 Family) USB UHCI Contoller #4 + 1462 7235 P965 Neo MS-7235 mainboard +- 2835 82801H (ICH8 Family) USB UHCI #5 +- 2836 82801H (ICH8 Family) USB2 EHCI #1 ++ 17aa 20aa Lenovo Thinkpad T61 ++ 2835 82801H (ICH8 Family) USB UHCI Controller #5 ++ 17aa 20aa Lenovo Thinkpad T60 ++ 2836 82801H (ICH8 Family) USB2 EHCI Controller #1 + 1462 7235 P965 Neo MS-7235 mainboard +- 283a 82801H (ICH8 Family) USB2 EHCI #2 ++ 283a 82801H (ICH8 Family) USB2 EHCI Controller #2 ++ 17aa 20ab Lenovo Thinkpad T61 + 283e 82801H (ICH8 Family) SMBus Controller + 1462 7235 P965 Neo MS-7235 mainboard + 283f 82801H (ICH8 Family) PCI Express Port 1 +@@ -12016,36 +12652,45 @@ + 2847 82801H (ICH8 Family) PCI Express Port 5 + 2849 82801H (ICH8 Family) PCI Express Port 6 + 284b 82801H (ICH8 Family) HD Audio Controller ++ 17aa 20ac Lenovo Thinkpad T61 + 284f 82801H (ICH8 Family) Thermal Reporting Device +- 2850 Mobile IDE Controller +- 2910 LPC Interface Controller +- 2920 4 port SATA IDE Controller +- 2921 2 port SATA IDE Controller +- 2922 6 port SATA AHCI Controller +- 2923 4 port SATA AHCI Controller +- 2925 SATA RAID Controller +- 2926 2 port SATA IDE Controller ++ 2850 82801HBM/HEM (ICH8M/ICH8M-E) IDE Controller ++ 2911 LPC Interface Controller ++ 2912 82801IH (ICH9DH) LPC Interface Controller ++ 2914 LPC Interface Controller ++ 2916 82801IR (ICH9R) LPC Interface Controller ++ 2917 Mobile LPC Controller ++ 2918 82801IB (ICH9) LPC Interface Controller ++ 2919 Mobile LPC Controller ++ 2920 82801IR/IO/IH (ICH9R/DO/DH) 4 port SATA IDE Controller ++ 2921 82801I (ICH9 Family) 2 port SATA IDE Controller ++ 2922 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA AHCI Controller ++ 2923 82801I (ICH9 Family) 4 port SATA AHCI Controller ++ 2925 82801IR/IO (ICH9R//DO) SATA RAID Controller ++ 2926 82801I (ICH9 Family) 2 port SATA IDE Controller + 2928 Mobile 2 port SATA IDE Controller ++ 2929 Mobile SATA AHCI Controller ++ 292c Mobile SATA RAID Controller + 292d Mobile 2 port SATA IDE Controller + 292e Mobile 1 port SATA IDE Controller +- 2930 SMBus Controller +- 2932 Thermal Subsystem +- 2934 USB UHCI Controller #1 +- 2935 USB UHCI Controller #2 +- 2936 USB UHCI Controller #3 +- 2937 USB UHCI Controller #4 +- 2938 USB UHCI Controller #5 +- 2939 USB UHCI Controller #6 +- 293a USB2 EHCI Controller #1 +- 293c USB2 EHCI Controller #2 +- 293e HD Audio Controller +- 2940 PCI Express Port 1 +- 2942 PCI Express Port 2 +- 2944 PCI Express Port 3 +- 2946 PCI Express Port 4 +- 2948 PCI Express Port 5 +- 294a PCI Express Port 6 +- 294c Gigabit Ethernet Controller ++ 2930 82801I (ICH9 Family) SMBus Controller ++ 2932 82801I (ICH9 Family) Thermal Subsystem ++ 2934 82801I (ICH9 Family) USB UHCI Controller #1 ++ 2935 82801I (ICH9 Family) USB UHCI Controller #2 ++ 2936 82801I (ICH9 Family) USB UHCI Controller #3 ++ 2937 82801I (ICH9 Family) USB UHCI Controller #4 ++ 2938 82801I (ICH9 Family) USB UHCI Controller #5 ++ 2939 82801I (ICH9 Family) USB UHCI Controller #6 ++ 293a 82801I (ICH9 Family) USB2 EHCI Controller #1 ++ 293c 82801I (ICH9 Family) USB2 EHCI Controller #2 ++ 293e 82801I (ICH9 Family) HD Audio Controller ++ 2940 82801I (ICH9 Family) PCI Express Port 1 ++ 2942 82801I (ICH9 Family) PCI Express Port 2 ++ 2944 82801I (ICH9 Family) PCI Express Port 3 ++ 2946 82801I (ICH9 Family) PCI Express Port 4 ++ 2948 82801I (ICH9 Family) PCI Express Port 5 ++ 294a 82801I (ICH9 Family) PCI Express Port 6 ++ 294c 82801I (ICH9 Family) Gigabit Ethernet Controller + 2970 82946GZ/PL/GL Memory Controller Hub + 2971 82946GZ/PL/GL PCI Express Root Port + 2972 82946GZ/GL Integrated Graphics Controller +@@ -12066,8 +12711,10 @@ + 2996 82Q963/Q965 PT IDER Controller + 2997 82Q963/Q965 KT Controller + 29a0 82P965/G965 Memory Controller Hub ++ 1462 7276 MS-7276 [G965MDH] + 29a1 82P965/G965 PCI Express Root Port + 29a2 82G965 Integrated Graphics Controller ++ 1462 7276 MS-7276 [G965MDH] + 29a3 82G965 Integrated Graphics Controller + 29a4 82P965/G965 HECI Controller + 29a5 82P965/G965 HECI Controller +@@ -12077,52 +12724,68 @@ + 29b1 PCI Express Root Port + 29b2 Integrated Graphics Controller + 29b3 Integrated Graphics Controller +- 29b4 HECI Controller +- 29b5 HECI Controller ++ 29b4 MEI Controller ++ 29b5 MEI Controller + 29b6 PT IDER Controller + 29b7 Serial KT Controller +- 29c0 DRAM Controller +- 29c1 PCI Express Root Port +- 29c2 Integrated Graphics Controller +- 29c3 Integrated Graphics Controller +- 29c4 HECI Controller +- 29c5 HECI Controller +- 29c6 PT IDER Controller +- 29c7 Serial KT Controller ++ 29c0 82G33/G31/P35 Express DRAM Controller ++ 29c1 82G33/G31/P35 Express PCI Express Root Port ++ 29c2 82G33/G31 Express Integrated Graphics Controller ++ 29c3 82G33/G31 Express Integrated Graphics Controller ++ 29c4 82G33/G31/P35 Express MEI Controller ++ 29c5 82G33/G31/P35 Express MEI Controller ++ 29c6 82G33/G31/P35 Express PT IDER Controller ++ 29c7 82G33/G31/P35 Express Serial KT Controller + 29cf Virtual HECI Controller ++ 29d0 DRAM Controller ++ 29d1 PCI Express Root Port ++ 29d2 Integrated Graphics Controller ++ 29d3 Integrated Graphics Controller ++ 29d4 MEI Controller ++ 29d5 MEI Controller ++ 29d6 PT IDER Controller ++ 29d7 Serial KT Controller + 29e0 DRAM Controller + 29e1 Host-Primary PCI Express Bridge +- 29e4 HECI Controller +- 29e5 HECI Controller ++ 29e4 MEI Controller ++ 29e5 MEI Controller + 29e6 PT IDER Controller + 29e7 Serial KT Controller + 29e9 Host-Secondary PCI Express Bridge + 29f0 Server DRAM Controller + 29f1 Server Host-Primary PCI Express Bridge +- 29f4 Server HECI Controller +- 29f5 Server HECI Controller ++ 29f4 Server MEI Controller ++ 29f5 Server MEI Controller + 29f6 Server PT IDER Controller + 29f7 Server Serial KT Controller + 29f9 Server Host-Secondary PCI Express Bridge +- 2a00 Mobile Memory Controller Hub +- 2a01 Mobile PCI Express Root Port +- 2a02 Mobile Integrated Graphics Controller +- 2a03 Mobile Integrated Graphics Controller +- 2a04 Mobile HECI Controller +- 2a05 Mobile HECI Controller +- 2a06 Mobile PT IDER Controller +- 2a07 Mobile KT Controller +- 3092 Integrated RAID ++ 2a00 Mobile PM965/GM965/GL960 Memory Controller Hub ++ 17aa 20b1 Lenovo Thinkpad T61 ++ 2a01 Mobile PM965/GM965/GL960 PCI Express Root Port ++ 2a02 Mobile GM965/GL960 Integrated Graphics Controller ++ 2a03 Mobile GM965/GL960 Integrated Graphics Controller ++ 2a04 Mobile PM965/GM965 MEI Controller ++ 2a05 Mobile PM965/GM965 MEI Controller ++ 2a06 Mobile PM965/GM965 PT IDER Controller ++ 2a07 Mobile PM965/GM965 KT Controller + 3200 GD31244 PCI-X SATA HBA + 1775 c200 C2K onboard SATA host bus adapter ++ 3313 IOP348 I/O Processor (SL8e) in IOC Mode SAS/SATA ++ 331b IOP348 I/O Processor (SL8x) in IOC Mode SAS/SATA ++ 3331 IOC340 I/O Controller (VV8e) SAS/SATA ++ 3339 IOC340 I/O Controller (VV8x) SAS/SATA + 3340 82855PM Processor to I/O Controller ++ 1014 0529 Thinkpad T41 + 1025 005a TravelMate 290 + 103c 088c NC8000 laptop + 103c 0890 NC6000 laptop + 103c 08b0 tc1100 tablet +- 144d c00c P30 notebook ++ 144d c00c P30/P35 notebook + 3341 82855PM Processor to AGP Controller + 144d c00c P30 notebook ++ 3363 IOC340 I/O Controller in IOC Mode SAS/SATA ++ 33c3 IOP348 I/O Processor (SL8De) in IOC Mode SAS/SATA ++ 33cb IOP348 I/O Processor (SL8Dx) in IOC Mode SAS/SATA + 3500 6311ESB/6321ESB PCI Express Upstream Port + 3501 6310ESB PCI Express Upstream Port + 3504 6311ESB/6321ESB I/OxAPIC Interrupt Controller +@@ -12146,6 +12809,7 @@ + 3580 82852/82855 GM/GME/PM/GMV Processor to I/O Controller + 1014 055c Thinkpad R50e model 1634 + 1028 0139 Latitude D400 ++ 1028 014f Latitude X300 + 1028 0163 Latitude D505 + 1028 0196 Inspiron 5160 + 1734 1055 Amilo M1420 +@@ -12153,19 +12817,25 @@ + 1775 ce90 CE9 + 4c53 10b0 CL9 mainboard + 4c53 10e0 PSL09 PrPMC ++ e4bf 0cc9 CC9-SAMBA ++ e4bf 0cd2 CD2-BEBOP + 3581 82852/82855 GM/GME/PM/GMV Processor to AGP Controller + 1734 1055 Amilo M1420 + 3582 82852/855GM Integrated Graphics Device + 1014 0562 Thinkpad R50e model 1634 + 1028 0139 Latitude D400 ++ 1028 014f Latitude X300 + 1028 0163 Latitude D505 + 1775 10d0 V5D Single Board Computer VGA + 1775 ce90 CE9 + 4c53 10b0 CL9 mainboard + 4c53 10e0 PSL09 PrPMC ++ e4bf 0cc9 CC9-SAMBA ++ e4bf 0cd2 CD2-BEBOP + 3584 82852/82855 GM/GME/PM/GMV Processor to I/O Controller + 1014 055d Thinkpad R50e model 1634 + 1028 0139 Latitude D400 ++ 1028 014f Latitude X300 + 1028 0163 Latitude D505 + 1028 0196 Inspiron 5160 + 1734 1055 Amilo M1420 +@@ -12176,6 +12846,7 @@ + 3585 82852/82855 GM/GME/PM/GMV Processor to I/O Controller + 1014 055e Thinkpad R50e model 1634 + 1028 0139 Latitude D400 ++ 1028 014f Latitude X300 + 1028 0163 Latitude D505 + 1028 0196 Inspiron 5160 + 1734 1055 Amilo M1420 +@@ -12184,23 +12855,32 @@ + 4c53 10b0 CL9 mainboard + 4c53 10e0 PSL09 PrPMC + 3590 E7520 Memory Controller Hub ++ 1014 02dd eServer xSeries server mainboard + 1028 019a PowerEdge SC1425 + 1734 103e Primergy RX300 S2 ++ 1775 1100 CR11/VR11 Single Board Computer + 4c53 10d0 Telum ASLP10 Processor AMC + 3591 E7525/E7520 Error Reporting Registers ++ 1014 02dd eServer xSeries server mainboard + 1028 0169 Precision 470 + 4c53 10d0 Telum ASLP10 Processor AMC + 3592 E7320 Memory Controller Hub + 3593 E7320 Error Reporting Registers + 3594 E7520 DMA Controller ++ 1775 1100 CR11/VR11 Single Board Computer + 4c53 10d0 Telum ASLP10 Processor AMC + 3595 E7525/E7520/E7320 PCI Express Port A ++ 1775 1100 CR11/VR11 Single Board Computer + 3596 E7525/E7520/E7320 PCI Express Port A1 + 3597 E7525/E7520 PCI Express Port B ++ 1775 1100 CR11/VR11 Single Board Computer + 3598 E7520 PCI Express Port B1 ++ 1775 1100 CR11/VR11 Single Board Computer + 3599 E7520 PCI Express Port C ++ 1775 1100 CR11/VR11 Single Board Computer + 359a E7520 PCI Express Port C1 + 359b E7525/E7520/E7320 Extended Configuration Registers ++ 1014 02dd eServer xSeries server mainboard + 359e E7525 Memory Controller Hub + 1028 0169 Precision 470 + 35b0 3100 Chipset Memory I/O Controller Hub +@@ -12224,6 +12904,8 @@ + 360f Server FBD Branch 0 Registers + 3610 Server FBD Branch 1 Registers + 4000 Memory Controller Hub ++ 4001 Memory Controller Hub ++ 4003 Memory Controller Hub + 4008 Memory Controller Hub + 4010 Memory Controller Hub + 4021 PCI Express Port 1 +@@ -12243,7 +12925,8 @@ + 4035 FBD Registers + 4036 FBD Registers + 4220 PRO/Wireless 2200BG Network Connection +- 2731 8086 WLAN-Adapter ++# (rev 05) ++ 103c 12f6 HP Compaq nw8240 Mobile Workstation + 8086 2731 Samsung P35 integrated WLAN + 4222 PRO/Wireless 3945ABG Network Connection + 8086 1005 PRO/Wireless 3945BG Network Connection +@@ -12255,11 +12938,47 @@ + 4227 PRO/Wireless 3945ABG Network Connection + 8086 1011 Thinkpad X60s, R60e model 0657 + 8086 1014 PRO/Wireless 3945BG Network Connection ++ 4229 PRO/Wireless 4965 AG or AGN Network Connection ++ 4230 PRO/Wireless 4965 AG or AGN Network Connection ++ 8086 1110 Lenovo Thinkpad T61 ++ 444e Turbo Memory Controller + 5001 Pro/DSL 2100 Modem ++ 5020 Memory Controller Hub ++ 5021 DRAM Error Reporting Registers ++ 5023 EDMA Controller ++ 5024 PCI Express Port PEA0 ++ 5025 PCI Express Port PEA1 ++ 5028 S-ATA IDE ++ 5029 S-ATA AHCI ++ 502a S-ATA RAID0/1 ++ 502b S-ATA Reserved ++ 5031 LPC Bus ++ 5032 SMBus Controller ++ 5033 USB 1.1 Controller ++ 5035 USB 2.0 Controller ++ 5037 PCI-PCI Bridge (transparent mode) ++ 5039 Controller Area Network (CAN) interface #1 ++ 503a Controller Area Network (CAN) interface #2 ++ 503b Synchronous Serial Port (SPP) ++ 503c IEEE 1588 Hardware Assist ++ 503d Local Expansion Bus ++ 503e Global Control Unit (GCU) ++ 5040 Gigabit Ethernet MAC ++ 5041 Gigabit Ethernet MAC ++ 5042 Gigabit Ethernet MAC ++ 5043 Gigabit Ethernet MAC ++ 5044 Gigabit Ethernet MAC ++ 5045 Gigabit Ethernet MAC ++ 5046 Gigabit Ethernet MAC ++ 5047 Gigabit Ethernet MAC ++ 5048 Gigabit Ethernet MAC ++ 5049 Gigabit Ethernet MAC ++ 504a Gigabit Ethernet MAC ++ 504b Gigabit Ethernet MAC + 5200 EtherExpress PRO/100 Intelligent Server + 5201 EtherExpress PRO/100 Intelligent Server + 8086 0001 EtherExpress PRO/100 Server Ethernet Adapter +- 530d 80310 IOP [IO Processor] ++ 530d 80310 (IOP) IO Processor + 65c0 Memory Controller Hub + 65e2 PCI Express x4 Port 2 + 65e3 PCI Express x4 Port 3 +@@ -12292,17 +13011,19 @@ + 15ad 1976 virtualHW v3 + 7113 82371AB/EB/MB PIIX4 ACPI + 15ad 1976 virtualHW v3 +- 7120 82810 GMCH [Graphics Memory Controller Hub] ++ 7120 82810 GMCH (Graphics Memory Controller Hub) + 4c53 1040 CL7 mainboard + 4c53 1060 PC7 mainboard +- 7121 82810 CGC [Chipset Graphics Controller] ++ 7121 82810 (CGC) Chipset Graphics Controller + 4c53 1040 CL7 mainboard + 4c53 1060 PC7 mainboard + 8086 4341 Cayman (CA810) Mainboard +- 7122 82810 DC-100 GMCH [Graphics Memory Controller Hub] +- 7123 82810 DC-100 CGC [Chipset Graphics Controller] +- 7124 82810E DC-133 GMCH [Graphics Memory Controller Hub] +- 7125 82810E DC-133 CGC [Chipset Graphics Controller] ++ 7122 82810 DC-100 (GMCH) Graphics Memory Controller Hub ++ 7123 82810 DC-100 (CGC) Chipset Graphics Controller ++ 7124 82810E DC-133 (GMCH) Graphics Memory Controller Hub ++ 1028 00b4 OptiPlex GX110 ++ 7125 82810E DC-133 (CGC) Chipset Graphics Controller ++ 1028 00b4 OptiPlex GX110 + 7126 82810 DC-133 System and Graphics Controller + 7128 82810-M DC-100 System and Graphics Controller + 712a 82810-M DC-133 System and Graphics Controller +@@ -12352,6 +13073,7 @@ + 10b4 202f Lightspeed 740 + 8086 0000 Terminator 2x/i + 8086 0100 Intel740 Graphics Accelerator ++ 8002 Trusted Execution Technology Registers + 84c4 450KX/GX [Orion] - 82454KX/GX PCI bridge + 84c5 450KX/GX [Orion] - 82453KX/GX Memory controller + 84ca 450NX - 82451NX Memory & I/O Controller +@@ -12386,6 +13108,13 @@ + 4c53 1050 CT7 mainboard + 4c53 1051 CE7 mainboard + e4bf 1000 CC8-1-BLUES ++80ee InnoTek Systemberatung GmbH ++ beef VirtualBox Graphics Adapter ++ cafe VirtualBox Guest Service ++8384 Sigmatel ++ 7618 High Definition Audio Codec ++ 7670 9770 High Definition Audio ++ 7672 9772 High Definition Audio + 8401 TRENDware International Inc. + 8686 ScaleMP + 1010 vSMPowered system controller [vSMP CTL] +@@ -12548,6 +13277,8 @@ + 008f AIC-7892P U160/m + 1179 0001 Magnia Z310 + 15d9 9005 Onboard SCSI Host Adapter ++ 0092 AVC-2010 [VideoH!] ++ 0093 AVC-2410 [VideoH!] + 00c0 AHA-3960D / AIC-7899A U160/m + 0e11 f620 Compaq 64-Bit/66MHz Dual Channel Wide Ultra3 SCSI Adapter + 9005 f620 AHA-3960D U160/m +@@ -12577,6 +13308,13 @@ + 1028 0287 PowerEdge Expandable RAID Controller 320/DC + 1028 0291 CERC SATA RAID 2 PCI SATA 6ch (DellCorsair) + 103c 3227 AAR-2610SA ++ 108e 0286 STK RAID INT ++ 108e 0287 STK RAID EXT ++ 108e 7aac STK RAID REM ++ 15d9 02b5 AOC-USAS-S4i ++ 15d9 02b6 AOC-USAS-S8i ++ 15d9 02c9 AOC-USAS-S4iR ++ 15d9 02ca AOC-USAS-S8iR + 17aa 0286 Legend S220 (Legend Crusader) + 17aa 0287 Legend S230 (Legend Vulcan) + 9005 0285 2200S (Vulcan) +@@ -12596,12 +13334,31 @@ + 9005 0294 ESD SO-DIMM PCI-X SATA ZCR (Prowler) + 9005 0296 ASR-2240S + 9005 0297 ASR-4005SAS +- 9005 0298 ASR-4000SAS ++ 9005 0298 ASR-4000 + 9005 0299 ASR-4800SAS + 9005 029a 4805SAS ++ 9005 02a4 ICP ICP9085LI ++ 9005 02a5 ICP ICP5085BR + 9005 02b5 ASR5800 + 9005 02b6 ASR5805 + 9005 02b7 ASR5808 ++ 9005 02b8 ICP5445SL ++ 9005 02b9 ICP5085SL ++ 9005 02ba ICP5805SL ++ 9005 02bb 3405 ++ 9005 02bc 3805 ++ 9005 02bd 31205 ++ 9005 02be 31605 ++ 9005 02bf ICP ICP5045BL ++ 9005 02c0 ICP ICP5085BL ++ 9005 02c1 ICP ICP5125BR ++ 9005 02c2 ICP ICP5165BR ++ 9005 02c3 51205 ++ 9005 02c4 51605 ++ 9005 02c5 ICP ICP5125SL ++ 9005 02c6 ICP ICP5165SL ++ 9005 02c7 3085 ++ 9005 02c8 ICP5805BL + 0286 AAC-RAID (Rocket) + 1014 034d 8s + 1014 9540 ServeRAID 8k/8k-l4 +@@ -12615,17 +13372,17 @@ + 9005 029f ICP ICP9014R0 + 9005 02a0 ICP ICP9047MA + 9005 02a1 ICP ICP9087MA +- 9005 02a2 3800SAS ++ 9005 02a2 3800 + 9005 02a3 ICP ICP5445AU + 9005 02a4 ICP ICP9085LI + 9005 02a5 ICP ICP5085BR + 9005 02a6 ICP9067MA +- 9005 02a7 3805SAS +- 9005 02a8 3400SAS ++ 9005 02a7 3805 ++ 9005 02a8 3400 + 9005 02a9 ICP ICP5085AU + 9005 02aa ICP ICP5045AU +- 9005 02ac 1800SAS +- 9005 02b3 ASR-2400SAS ++ 9005 02ac 1800 ++ 9005 02b3 2400 + 9005 02b4 ICP ICP5045AL + 9005 0800 Callisto + 0410 AIC-9410W SAS (Razor HBA RAID) +@@ -12648,6 +13405,7 @@ + 1014 02c2 PCI-X DDR 3Gb SAS RAID Adapter (572B/572D) + 0503 Scamp chipset SCSI controller + 1014 02bf Quad Channel PCI-X DDR U320 SCSI RAID Adapter (571E) ++ 1014 02c3 PCI-X DDR 3Gb SAS RAID Adapter (572F) + 1014 02d5 Quad Channel PCI-X DDR U320 SCSI RAID Adapter (571F) + 0910 AUA-3100B + 091e AUA-3100B +@@ -12663,8 +13421,11 @@ + 8015 ASC-39320B U320 + 8016 ASC-39320A U320 + 8017 ASC-29320ALP U320 ++ 9005 0044 ASC-29320ALP PCIx U320 ++ 9005 0045 ASC-29320LPE PCIe U320 + 801c ASC-39320D U320 + 801d AIC-7902B U320 ++ 1014 02cc ServeRAID 7e + 801e AIC-7901A U320 + 801f AIC-7902 U320 + 1734 1011 Primergy RX300 +@@ -12680,6 +13441,7 @@ + 8097 ASC-29320ALP U320 w/HostRAID + 809c ASC-39320D(B) U320 w/HostRAID + 809d AIC-7902(B) U320 w/HostRAID ++ 1014 02cc ServeRAID 7e + 809e AIC-7901A U320 w/HostRAID + 809f AIC-7902 U320 w/HostRAID + 907f Atronics +@@ -12740,13 +13502,15 @@ cddd Tyzx, Inc. + 0101 DeepSea 1 High Speed Stereo Vision Frame Grabber + 0200 DeepSea 2 High Speed Stereo Vision Frame Grabber + d161 Digium, Inc. +- 0205 Wildcard TE205P +- 0210 Wildcard TE210P +- 0405 Wildcard TE405P Quad-Span togglable E1/T1/J1 card 5.0v +- 0406 Wildcard TE406P Quad-Span togglable E1/T1/J1 echo cancellation card 5.0v +- 0410 Wildcard TE410P Quad-Span togglable E1/T1/J1 card 3.3v +- 0411 Wildcard TE411P Quad-Span togglable E1/T1/J1 echo cancellation card 3.3v +- 2400 Wildcard TDM2400P ++ 0120 Wildcard TE120P single-span T1/E1/J1 card ++ 0205 Wildcard TE205P dual-span T1/E1/J1 card 5.0V ++ 0210 Wildcard TE210P dual-span T1/E1/J1 card 3.3V ++ 0405 Wildcard TE405P quad-span T1/E1/J1 card 5.0V ++ 0410 Wildcard TE410P quad-span T1/E1/J1 card 3.3V ++ 0800 Wildcard TDM800P 8-port analog card ++ 2400 Wildcard TDM2400P 24-port analog card ++ 3400 Wildcard TC400P transcoder base card ++ b410 Wildcard B410 quad-BRI card + d4d4 Dy4 Systems Inc + 0601 PCI Mezzanine Card + d531 I+ME ACTIA GmbH +--- a/hw/xfree86/scanpci/xf86PciStdIds.h ++++ b/hw/xfree86/scanpci/xf86PciStdIds.h +@@ -97,6 +97,9 @@ static const char pci_vendor_02ac[] = "S + static const char pci_device_02ac_1012[] = "1012 PCMCIA 10/100 Ethernet Card [RTL81xx]"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const char pci_vendor_02e0[] = "XFX Pine Group Inc"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_0315[] = "SK-Electronics Co., Ltd."; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -130,6 +133,10 @@ static const char pci_device_050d_7050[] + static const char pci_device_050d_705c[] = "F5D7050 v4"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const char pci_vendor_058f[] = "Alcor Micro Corporation"; ++static const char pci_device_058f_9254[] = "AU9254 (4-port USB hub)"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_05a9[] = "OmniVision"; + static const char pci_device_05a9_8519[] = "OV519 series"; + #endif +@@ -182,6 +189,7 @@ static const char pci_vendor_093a[] = "P + static const char pci_device_093a_010e[] = "Innovage Mini Digital Camera"; + static const char pci_device_093a_010f[] = "SDC-300 Webcam"; + static const char pci_device_093a_2468[] = "CIF Single Chip"; ++static const char pci_device_093a_2600[] = "PAC7311"; + static const char pci_device_093a_2603[] = "Philips Webcam SPC500NC"; + static const char pci_device_093a_2608[] = "Maxell MaxCam RotaWeb"; + #endif +@@ -226,6 +234,9 @@ static const char pci_device_0e11_0001[] + static const char pci_device_0e11_0002[] = "PCI to ISA Bridge"; + static const char pci_device_0e11_0046[] = "Smart Array 64xx"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_0e11_0046_0e11_4091[] = "Smart Array 6i"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_0e11_0046_0e11_409a[] = "Smart Array 641"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -576,13 +587,19 @@ static const char pci_subsys_1000_0040_1 + static const char pci_device_1000_0041[] = "53C1035ZC PCI-X Fusion-MPT Dual Ultra320 SCSI"; + static const char pci_device_1000_0050[] = "SAS1064 PCI-X Fusion-MPT SAS"; + static const char pci_device_1000_0054[] = "SAS1068 PCI-X Fusion-MPT SAS"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1000_0054_1028_1f09[] = "PowerEdge 860 SAS 5i/R"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_device_1000_0055[] = "SAS1068 PCI-X Fusion-MPT SAS"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1000_0055_1033_8336[] = "SAS1068"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +-static const char pci_device_1000_0056[] = "SAS1064E PCI-Express Fusion-MPT SAS"; ++static const char pci_device_1000_0056[] = "SAS1064ET PCI-Express Fusion-MPT SAS"; ++static const char pci_device_1000_0057[] = "M1064E MegaRAID SAS"; + static const char pci_device_1000_0058[] = "SAS1068E PCI-Express Fusion-MPT SAS"; + static const char pci_device_1000_005a[] = "SAS1066E PCI-Express Fusion-MPT SAS"; + static const char pci_device_1000_005c[] = "SAS1064A PCI-X Fusion-MPT SAS"; +@@ -610,6 +627,9 @@ static const char pci_subsys_1000_0060_1 + static const char pci_subsys_1000_0060_1000_1012[] = "MegaRAID SAS 8704ELP"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1000_0060_1000_1016[] = "MegaRAID SAS 8880EM2"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1000_0060_1014_0363[] = "MegaRAID SAS PCI Express ROMB"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -618,6 +638,9 @@ static const char pci_subsys_1000_0060_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1000_0060_1014_0365[] = "SystemX MegaRAID SAS 8884E"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1000_0060_1014_0379[] = "SystemX MegaRAID SAS 8880EM2"; ++#endif + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1000_0060_1028_1f0a[] = "PERC 6/E Adapter RAID Controller"; +@@ -640,7 +663,7 @@ static const char pci_subsys_1000_0060_1 + #ifdef VENDOR_INCLUDE_NONVIDEO + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_1000_0060_1028_1f11[] = "CERC 6/i Adapter RAID Controller"; ++static const char pci_subsys_1000_0060_1028_1f11[] = "CERC 6/i Integrated RAID Controller"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + #ifdef INIT_SUBSYS_INFO +@@ -651,6 +674,21 @@ static const char pci_subsys_1000_0060_1 + #endif + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1000_0060_8086_1006[] = "RAID Controller SRCSAS28EP"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1000_0060_8086_100a[] = "RAID Controller SRCSAS28EV"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1000_0060_8086_1010[] = "RAID Controller SRCSATA28E"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1000_0060_8086_34cc[] = "Integrated RAID Controller SROMBSAS28E"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -936,10 +974,10 @@ static const char pci_device_1001_9100[] + static const char pci_vendor_1002[] = "ATI Technologies Inc"; + static const char pci_device_1002_3150[] = "M24 1P [Radeon Mobility X600]"; + static const char pci_device_1002_3152[] = "M22 [Radeon Mobility X300]"; +-static const char pci_device_1002_3154[] = "M24 1T [FireGL M24 GL]"; ++static const char pci_device_1002_3154[] = "M24GL [Mobility FireGL V3200]"; + static const char pci_device_1002_3e50[] = "RV380 0x3e50 [Radeon X600]"; + static const char pci_device_1002_3e54[] = "RV380 0x3e54 [FireGL V3200]"; +-static const char pci_device_1002_3e70[] = "RV380 [Radeon X600] Secondary"; ++static const char pci_device_1002_3e70[] = "RV380 [Radeon X600] (Secondary)"; + static const char pci_device_1002_4136[] = "Radeon IGP 320 M"; + static const char pci_device_1002_4137[] = "Radeon IGP330/340/350"; + static const char pci_device_1002_4144[] = "R300 AD [Radeon 9500 Pro]"; +@@ -949,7 +987,7 @@ static const char pci_device_1002_4147[] + static const char pci_device_1002_4148[] = "R350 AH [Radeon 9800]"; + static const char pci_device_1002_4149[] = "R350 AI [Radeon 9800]"; + static const char pci_device_1002_414a[] = "R350 AJ [Radeon 9800]"; +-static const char pci_device_1002_414b[] = "R350 AK [Fire GL X2]"; ++static const char pci_device_1002_414b[] = "R350 AK [FireGL X2]"; + static const char pci_device_1002_4150[] = "RV350 AP [Radeon 9600]"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1002_4150_1002_0002[] = "R9600 Pro primary (Asus OEM for HP)"; +@@ -961,7 +999,7 @@ static const char pci_subsys_1002_4150_1 + static const char pci_subsys_1002_4150_1002_4722[] = "All-in-Wonder 2006 AGP Edition"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_1002_4150_1458_4024[] = "Giga-Byte GV-R96128D Primary"; ++static const char pci_subsys_1002_4150_1458_4024[] = "Giga-Byte GV-R96128D (Primary)"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1002_4150_148c_2064[] = "PowerColor R96A-C3N"; +@@ -973,13 +1011,13 @@ static const char pci_subsys_1002_4150_1 + static const char pci_subsys_1002_4150_174b_7c19[] = "Sapphire Atlantis Radeon 9600 Pro"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_1002_4150_174b_7c29[] = "GC-R9600PRO Primary [Sapphire]"; ++static const char pci_subsys_1002_4150_174b_7c29[] = "GC-R9600PRO [Sapphire] (Primary)"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1002_4150_17ee_2002[] = "Radeon 9600 256Mb Primary"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_1002_4150_18bc_0101[] = "GC-R9600PRO Primary"; ++static const char pci_subsys_1002_4150_18bc_0101[] = "GC-R9600PRO (Primary)"; + #endif + static const char pci_device_1002_4151[] = "RV350 AQ [Radeon 9600]"; + #ifdef INIT_SUBSYS_INFO +@@ -1011,10 +1049,10 @@ static const char pci_subsys_1002_4153_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1002_4153_1462_932c[] = "865PE Neo2-V (MS-6788) mainboard"; + #endif +-static const char pci_device_1002_4154[] = "RV350 AT [Fire GL T2]"; +-static const char pci_device_1002_4155[] = "RV350 AU [Fire GL T2]"; +-static const char pci_device_1002_4156[] = "RV350 AV [Fire GL T2]"; +-static const char pci_device_1002_4157[] = "RV350 AW [Fire GL T2]"; ++static const char pci_device_1002_4154[] = "RV350 AT [FireGL T2]"; ++static const char pci_device_1002_4155[] = "RV350 AU [FireGL T2]"; ++static const char pci_device_1002_4156[] = "RV350 AV [FireGL T2]"; ++static const char pci_device_1002_4157[] = "RV350 AW [FireGL T2]"; + static const char pci_device_1002_4158[] = "68800AX [Mach32]"; + static const char pci_device_1002_4164[] = "R300 AD [Radeon 9500 Pro] (Secondary)"; + static const char pci_device_1002_4165[] = "R300 AE [Radeon 9700 Pro] (Secondary)"; +@@ -1028,19 +1066,19 @@ static const char pci_subsys_1002_4170_1 + static const char pci_subsys_1002_4170_1002_4723[] = "All-in-Wonder 2006 AGP Edition (Secondary)"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_1002_4170_1458_4025[] = "Giga-Byte GV-R96128D Secondary"; ++static const char pci_subsys_1002_4170_1458_4025[] = "Giga-Byte GV-R96128D (Secondary)"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1002_4170_148c_2067[] = "PowerColor R96A-C3N (Secondary)"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_1002_4170_174b_7c28[] = "GC-R9600PRO Secondary [Sapphire]"; ++static const char pci_subsys_1002_4170_174b_7c28[] = "GC-R9600PRO [Sapphire] (Secondary)"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_1002_4170_17ee_2003[] = "Radeon 9600 256Mb Secondary"; ++static const char pci_subsys_1002_4170_17ee_2003[] = "Radeon 9600 256Mb (Secondary)"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_1002_4170_18bc_0100[] = "GC-R9600PRO Secondary"; ++static const char pci_subsys_1002_4170_18bc_0100[] = "GC-R9600PRO (Secondary)"; + #endif + static const char pci_device_1002_4171[] = "RV350 AQ [Radeon 9600] (Secondary)"; + #ifdef INIT_SUBSYS_INFO +@@ -1096,21 +1134,27 @@ static const char pci_device_1002_4341[] + static const char pci_device_1002_4345[] = "EHCI USB Controller"; + static const char pci_device_1002_4347[] = "OHCI USB Controller #1"; + static const char pci_device_1002_4348[] = "OHCI USB Controller #2"; +-static const char pci_device_1002_4349[] = "ATI Dual Channel Bus Master PCI IDE Controller"; ++static const char pci_device_1002_4349[] = "Dual Channel Bus Master PCI IDE Controller"; + static const char pci_device_1002_434d[] = "IXP AC'97 Modem"; +-static const char pci_device_1002_4353[] = "ATI SMBus"; ++static const char pci_device_1002_4353[] = "SMBus"; + static const char pci_device_1002_4354[] = "215CT [Mach64 CT]"; + static const char pci_device_1002_4358[] = "210888CX [Mach64 CX]"; +-static const char pci_device_1002_4363[] = "ATI SMBus"; +-static const char pci_device_1002_436e[] = "ATI 436E Serial ATA Controller"; ++static const char pci_device_1002_4363[] = "SMBus"; ++static const char pci_device_1002_436e[] = "436E Serial ATA Controller"; + static const char pci_device_1002_4370[] = "IXP SB400 AC'97 Audio Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1002_4370_1025_0079[] = "Aspire 5024WLMMi"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1002_4370_1025_0091[] = "Aspire 5032WXMi"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1002_4370_103c_308b[] = "MX6125"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1002_4370_105b_0c81[] = "Realtek ALC 653"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1002_4370_107b_0300[] = "MX6421"; + #endif + static const char pci_device_1002_4371[] = "IXP SB400 PCI-PCI Bridge"; +@@ -1142,7 +1186,7 @@ static const char pci_subsys_1002_4375_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1002_4375_103c_308b[] = "MX6125"; + #endif +-static const char pci_device_1002_4376[] = "Standard Dual Channel PCI IDE Controller ATI"; ++static const char pci_device_1002_4376[] = "Standard Dual Channel PCI IDE Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1002_4376_1025_0080[] = "Aspire 5024WLMMi"; + #endif +@@ -1156,20 +1200,20 @@ static const char pci_subsys_1002_4377_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1002_4377_103c_308b[] = "MX6125"; + #endif +-static const char pci_device_1002_4378[] = "ATI SB400 - AC'97 Modem Controller"; ++static const char pci_device_1002_4378[] = "SB400 AC'97 Modem Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1002_4378_1025_0080[] = "Aspire 5024WLMMi"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1002_4378_103c_308b[] = "MX6125"; + #endif +-static const char pci_device_1002_4379[] = "ATI 4379 Serial ATA Controller"; +-static const char pci_device_1002_437a[] = "ATI 437A Serial ATA Controller"; ++static const char pci_device_1002_4379[] = "4379 Serial ATA Controller"; ++static const char pci_device_1002_437a[] = "437A Serial ATA Controller"; + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_1002_437a_1002_4379[] = "ATI 4379 Serial ATA Controller"; ++static const char pci_subsys_1002_437a_1002_4379[] = "4379 Serial ATA Controller"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_1002_437a_1002_437a[] = "ATI 437A Serial ATA Controller"; ++static const char pci_subsys_1002_437a_1002_437a[] = "437A Serial ATA Controller"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1002_437a_14f1_8800[] = "Leadtek WinFast TV2000XP Expert"; +@@ -1531,6 +1575,9 @@ static const char pci_subsys_1002_4c57_1 + static const char pci_subsys_1002_4c57_1028_012a[] = "Latitude C640"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1002_4c57_1043_1622[] = "Mobility Radeon M7 (L3C/S)"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1002_4c57_144d_c006[] = "Radeon Mobility M7 LW in vpr Matrix 170B4"; + #endif + static const char pci_device_1002_4c58[] = "Radeon RV200 LX [Mobility FireGL 7800 M7]"; +@@ -1557,8 +1604,11 @@ static const char pci_device_1002_4c5a[] + static const char pci_device_1002_4c64[] = "Radeon R250 Ld [Radeon Mobility 9000 M9]"; + static const char pci_device_1002_4c65[] = "Radeon R250 Le [Radeon Mobility 9000 M9]"; + static const char pci_device_1002_4c66[] = "Radeon R250 [Mobility FireGL 9000]"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1002_4c66_1014_054d[] = "Thinkpad T41"; ++#endif + static const char pci_device_1002_4c67[] = "Radeon R250 Lg [Radeon Mobility 9000 M9]"; +-static const char pci_device_1002_4c6e[] = "Radeon R250 Ln [Radeon Mobility 9000 M9] [Secondary]"; ++static const char pci_device_1002_4c6e[] = "Radeon R250 Ln [Radeon Mobility 9000 M9] (Secondary)"; + static const char pci_device_1002_4d46[] = "Rage Mobility M4 AGP"; + static const char pci_device_1002_4d4c[] = "Rage Mobility M4 AGP"; + static const char pci_device_1002_4e44[] = "Radeon R300 ND [Radeon 9700 Pro]"; +@@ -1580,7 +1630,7 @@ static const char pci_device_1002_4e47[] + static const char pci_device_1002_4e48[] = "Radeon R350 [Radeon 9800 Pro]"; + static const char pci_device_1002_4e49[] = "Radeon R350 [Radeon 9800]"; + static const char pci_device_1002_4e4a[] = "RV350 NJ [Radeon 9800 XT]"; +-static const char pci_device_1002_4e4b[] = "R350 NK [Fire GL X2]"; ++static const char pci_device_1002_4e4b[] = "R350 NK [FireGL X2]"; + static const char pci_device_1002_4e50[] = "RV350 [Mobility Radeon 9600 M10]"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1002_4e50_1025_005a[] = "TravelMate 290"; +@@ -1622,7 +1672,7 @@ static const char pci_device_1002_4e68[] + static const char pci_device_1002_4e69[] = "Radeon R350 [Radeon 9800] (Secondary)"; + static const char pci_device_1002_4e6a[] = "RV350 NJ [Radeon 9800 XT] (Secondary)"; + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_1002_4e6a_1002_4e71[] = "ATI Technologies Inc M10 NQ [Radeon Mobility 9600]"; ++static const char pci_subsys_1002_4e6a_1002_4e71[] = "M10 NQ [Radeon Mobility 9600]"; + #endif + static const char pci_device_1002_4e71[] = "M10 NQ [Radeon Mobility 9600] (Secondary)"; + static const char pci_device_1002_4f72[] = "RV250 [Radeon 9000 Series]"; +@@ -1825,7 +1875,7 @@ static const char pci_subsys_1002_5159_1 + static const char pci_subsys_1002_5159_1014_029a[] = "Remote Supervisor Adapter II (RSA2)"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_1002_5159_1014_02c8[] = "IBM eServer xSeries server mainboard"; ++static const char pci_subsys_1002_5159_1014_02c8[] = "eServer xSeries server mainboard"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1002_5159_1028_019a[] = "PowerEdge SC1425"; +@@ -1960,7 +2010,10 @@ static const char pci_subsys_1002_5452_1 + static const char pci_device_1002_5453[] = "Rage 128 Pro Ultra TS"; + static const char pci_device_1002_5454[] = "Rage 128 Pro Ultra TT"; + static const char pci_device_1002_5455[] = "Rage 128 Pro Ultra TU"; +-static const char pci_device_1002_5460[] = "M22 [Radeon Mobility M300]"; ++static const char pci_device_1002_5460[] = "M22 [Mobility Radeon X300]"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1002_5460_1775_1100[] = "CR11/VR11 Single Board Computer"; ++#endif + static const char pci_device_1002_5462[] = "M24 [Radeon Mobility X600]"; + static const char pci_device_1002_5464[] = "M22 [FireGL GL]"; + static const char pci_device_1002_5548[] = "R423 UH [Radeon X800 (PCIE)]"; +@@ -1969,18 +2022,18 @@ static const char pci_device_1002_554a[] + static const char pci_device_1002_554b[] = "R423 UK [Radeon X800SE (PCIE)]"; + static const char pci_device_1002_554d[] = "R430 [Radeon X800 XL] (PCIe)"; + static const char pci_device_1002_554f[] = "R430 [Radeon X800 (PCIE)]"; +-static const char pci_device_1002_5550[] = "R423 [Fire GL V7100]"; ++static const char pci_device_1002_5550[] = "R423 [FireGL V7100]"; + static const char pci_device_1002_5551[] = "R423 [FireGL V5100 (PCIE)]"; + static const char pci_device_1002_5552[] = "R423 UR [FireGL V5100 (PCIE)]"; + static const char pci_device_1002_5554[] = "R423 UT [FireGL V7100 (PCIE)]"; +-static const char pci_device_1002_5569[] = "R423 UI [Radeon X800PRO (PCIE)] Secondary"; ++static const char pci_device_1002_5569[] = "R423 UI [Radeon X800PRO (PCIE)] (Secondary)"; + static const char pci_device_1002_556b[] = "Radeon R423 UK (PCIE) [X800 SE] (Secondary)"; +-static const char pci_device_1002_556d[] = "R430 [Radeon X800 XL] (PCIe) Secondary"; +-static const char pci_device_1002_556f[] = "R430 [Radeon X800 (PCIE) Secondary]"; +-static const char pci_device_1002_5571[] = "R423GL-SE ATI FIREGL V5100 PCI-EX Secondary"; ++static const char pci_device_1002_556d[] = "R430 [Radeon X800 XL] (PCIe) (Secondary)"; ++static const char pci_device_1002_556f[] = "R430 [Radeon X800] (PCIE) (Secondary)"; ++static const char pci_device_1002_5571[] = "R423GL-SE [FireGL V5100 (PCIE)] (Secondary)"; + static const char pci_device_1002_564a[] = "M26 [Mobility FireGL V5000]"; + static const char pci_device_1002_564b[] = "M26 [Mobility FireGL V5000]"; +-static const char pci_device_1002_564f[] = "M26 [Radeon Mobility X700 XL] (PCIE)"; ++static const char pci_device_1002_564f[] = "M26 [Radeon Mobility X700 XL (PCIE)]"; + static const char pci_device_1002_5652[] = "M26 [Radeon Mobility X700]"; + static const char pci_device_1002_5653[] = "Radeon Mobility X700 (PCIE)"; + #ifdef INIT_SUBSYS_INFO +@@ -2000,6 +2053,9 @@ static const char pci_device_1002_5834[] + static const char pci_device_1002_5835[] = "RS300M AGP [Radeon Mobility 9100IGP]"; + static const char pci_device_1002_5838[] = "Radeon 9100 IGP AGP Bridge"; + static const char pci_device_1002_5940[] = "RV280 [Radeon 9200 PRO] (Secondary)"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1002_5940_17af_2021[] = "Excalibur Radeon 9250 (Secondary)"; ++#endif + static const char pci_device_1002_5941[] = "RV280 [Radeon 9200] (Secondary)"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1002_5941_1458_4019[] = "Gigabyte Radeon 9200"; +@@ -2021,20 +2077,23 @@ static const char pci_subsys_1002_5950_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1002_5950_103c_308b[] = "MX6125"; + #endif +-static const char pci_device_1002_5951[] = "ATI Radeon Xpress 200 (RS480/RS482/RX480/RX482) Chipset - Host bridge"; ++static const char pci_device_1002_5951[] = "Radeon Xpress 200 (RS480/RS482/RX480/RX482) Chipset - Host bridge"; + static const char pci_device_1002_5952[] = "RD580 [CrossFire Xpress 3200] Chipset Host Bridge"; + static const char pci_device_1002_5954[] = "RS480 [Radeon Xpress 200G Series]"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1002_5954_1002_5954[] = "RV370 [Radeon Xpress 200G Series]"; + #endif +-static const char pci_device_1002_5955[] = "ATI Radeon XPRESS 200M 5955 (PCIE)"; ++static const char pci_device_1002_5955[] = "Radeon XPRESS 200M 5955 (PCIE)"; + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_1002_5955_1002_5955[] = "RS480 0x5955 [ATI Radeon XPRESS 200M 5955 (PCIE)]"; ++static const char pci_subsys_1002_5955_1002_5955[] = "RS480 0x5955 [Radeon XPRESS 200M 5955 (PCIE)]"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1002_5955_103c_308b[] = "MX6125"; + #endif + static const char pci_device_1002_5960[] = "RV280 [Radeon 9200 PRO]"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1002_5960_17af_2020[] = "Excalibur Radeon 9250"; ++#endif + static const char pci_device_1002_5961[] = "RV280 [Radeon 9200]"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1002_5961_1002_2f72[] = "All-in-Wonder 9200 Series"; +@@ -2066,7 +2125,7 @@ static const char pci_subsys_1002_5961_1 + static const char pci_device_1002_5962[] = "RV280 [Radeon 9200]"; + static const char pci_device_1002_5964[] = "RV280 [Radeon 9200 SE]"; + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_1002_5964_1002_5964[] = "ATI Radeon 9200 SE, 64-bit 128MB DDR, 200/166MHz"; ++static const char pci_subsys_1002_5964_1002_5964[] = "Radeon 9200 SE, 64-bit 128MB DDR, 200/166MHz"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1002_5964_1043_c006[] = "ASUS Radeon 9200 SE / TD / 128M"; +@@ -2158,6 +2217,9 @@ static const char pci_subsys_1002_5d44_1 + static const char pci_subsys_1002_5d44_1458_4032[] = "Radeon 9200 SE 128MB"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1002_5d44_147b_6190[] = "R9200SE-DT (Secondary)"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1002_5d44_174b_7c12[] = "Sapphire Radeon 9200 SE (Secondary)"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -2179,10 +2241,10 @@ static const char pci_device_1002_5d4d[] + static const char pci_device_1002_5d4f[] = "R480 [Radeon X800 GTO (PCIE)]"; + static const char pci_device_1002_5d52[] = "R480 [Radeon X850XT (PCIE)] (Primary)"; + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_1002_5d52_1002_0b12[] = "PowerColor X850XT PCIe Primary"; ++static const char pci_subsys_1002_5d52_1002_0b12[] = "PowerColor X850XT PCIe (Primary)"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_1002_5d52_1002_0b13[] = "PowerColor X850XT PCIe Secondary"; ++static const char pci_subsys_1002_5d52_1002_0b13[] = "PowerColor X850XT PCIe (Secondary)"; + #endif + static const char pci_device_1002_5d57[] = "R423 5F57 [Radeon X800XT (PCIE)]"; + static const char pci_device_1002_5d6d[] = "R480 [Radeon X850XT Platinum (PCIE)] (Secondary)"; +@@ -2199,7 +2261,7 @@ static const char pci_device_1002_5e4d[] + static const char pci_subsys_1002_5e4d_148c_2116[] = "PowerColor Bravo X700"; + #endif + static const char pci_device_1002_5e4f[] = "RV410 [Radeon X700]"; +-static const char pci_device_1002_5e6b[] = "RV410 [Radeon X700 Pro (PCIE)] Secondary"; ++static const char pci_device_1002_5e6b[] = "RV410 [Radeon X700 Pro (PCIE)] (Secondary)"; + static const char pci_device_1002_5e6d[] = "RV410 [Radeon X700 (PCIE)] (Secondary)"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1002_5e6d_148c_2117[] = "PowerColor Bravo X700"; +@@ -2210,7 +2272,7 @@ static const char pci_device_1002_7010[] + static const char pci_device_1002_7100[] = "R520 [Radeon X1800]"; + static const char pci_device_1002_7102[] = "M58 [Radeon Mobility X1800]"; + static const char pci_device_1002_7103[] = "M58 [Mobility FireGL V7200]"; +-static const char pci_device_1002_7104[] = "R520 GL ATI FireGL V7200 Primary"; ++static const char pci_device_1002_7104[] = "R520GL [FireGL V7200] (Primary)"; + static const char pci_device_1002_7105[] = "R520 [FireGL]"; + static const char pci_device_1002_7106[] = "M58 [Mobility FireGL V7100]"; + static const char pci_device_1002_7108[] = "M58 [Radeon Mobility X1800]"; +@@ -2225,7 +2287,7 @@ static const char pci_device_1002_710a[] + static const char pci_device_1002_710b[] = "R520 [Radeon X1800]"; + static const char pci_device_1002_710c[] = "R520 [Radeon X1800]"; + static const char pci_device_1002_7120[] = "R520 [Radeon X1800] (Secondary)"; +-static const char pci_device_1002_7124[] = "R520 GL ATI FireGL V7200 Secondary"; ++static const char pci_device_1002_7124[] = "R520GL [FireGL V7200] (Secondary)"; + static const char pci_device_1002_7129[] = "R520 [Radeon X1800] (Secondary)"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1002_7129_1002_0323[] = "All-in-Wonder X1800XL (Secondary)"; +@@ -2234,7 +2296,7 @@ static const char pci_subsys_1002_7129_1 + static const char pci_subsys_1002_7129_1002_0d03[] = "Radeon X1800 CrossFire Edition (Secondary)"; + #endif + static const char pci_device_1002_7140[] = "RV515 [Radeon X1600]"; +-static const char pci_device_1002_7142[] = "RV515 PRO [ATI Radeon X1300/X1550 Series]"; ++static const char pci_device_1002_7142[] = "RV515 PRO [Radeon X1300/X1550 Series]"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1002_7142_1002_0322[] = "All-in-Wonder 2006 PCI-E Edition"; + #endif +@@ -2245,17 +2307,17 @@ static const char pci_device_1002_7146[] + static const char pci_subsys_1002_7146_1002_0322[] = "All-in-Wonder 2006 PCI-E Edition"; + #endif + static const char pci_device_1002_7147[] = "RV505 [Radeon X1550 64-bit]"; +-static const char pci_device_1002_7149[] = "M52 [ATI Mobility Radeon X1300]"; +-static const char pci_device_1002_714a[] = "M52 [ATI Mobility Radeon X1300]"; +-static const char pci_device_1002_714b[] = "M52 [ATI Mobility Radeon X1300]"; +-static const char pci_device_1002_714c[] = "M52 [ATI Mobility Radeon X1300]"; ++static const char pci_device_1002_7149[] = "M52 [Mobility Radeon X1300]"; ++static const char pci_device_1002_714a[] = "M52 [Mobility Radeon X1300]"; ++static const char pci_device_1002_714b[] = "M52 [Mobility Radeon X1300]"; ++static const char pci_device_1002_714c[] = "M52 [Mobility Radeon X1300]"; + static const char pci_device_1002_714d[] = "RV515 [Radeon X1300]"; +-static const char pci_device_1002_714e[] = "RV515 [Radeon X1300]"; +-static const char pci_device_1002_7152[] = "RV515 GL ATI FireGL V3300 Primary"; ++static const char pci_device_1002_714e[] = "RV515LE [Radeon X1300]"; ++static const char pci_device_1002_7152[] = "RV515GL [FireGL V3300] (Primary)"; + static const char pci_device_1002_7153[] = "RV515GL [FireGL V3350]"; + static const char pci_device_1002_715e[] = "RV515 [Radeon X1300]"; + static const char pci_device_1002_715f[] = "RV505 CE [Radeon X1550 64-bit]"; +-static const char pci_device_1002_7162[] = "RV515 PRO [ATI Radeon X1300/X1550 Series Secondary]"; ++static const char pci_device_1002_7162[] = "RV515 PRO [Radeon X1300/X1550 Series] (Secondary)"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1002_7162_1002_0323[] = "All-in-Wonder 2006 PCI-E Edition (Secondary)"; + #endif +@@ -2263,42 +2325,45 @@ static const char pci_device_1002_7166[] + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1002_7166_1002_0323[] = "All-in-Wonder 2006 PCI-E Edition (Secondary)"; + #endif +-static const char pci_device_1002_7172[] = "RV515 GL ATI FireGL V3300 Secondary"; +-static const char pci_device_1002_7173[] = "RV515GL [FireGL V3350 Secondary]"; +-static const char pci_device_1002_7180[] = "RV516 [ATI Radeon X1300/X1550 Series]"; +-static const char pci_device_1002_7181[] = "RV516 XT Radeon X1600 Series Primary"; +-static const char pci_device_1002_7183[] = "RV516 [ATI Radeon X1300/X1550 Series]"; +-static const char pci_device_1002_7187[] = "RV516 [ATI Radeon X1300/X1550 Series]"; +-static const char pci_device_1002_7188[] = "M64-S [ATI Mobility Radeon X2300]"; +-static const char pci_device_1002_718a[] = "ATI Mobility Radeon X2300"; +-static const char pci_device_1002_718c[] = "M62CSP64 [ATI Mobility Radeon X1350]"; +-static const char pci_device_1002_718d[] = "M64CSP128 [ATI Mobility Radeon X1450]"; ++static const char pci_device_1002_716e[] = "RV515LE [Radeon X1300] Secondary"; ++static const char pci_device_1002_7172[] = "RV515GL [FireGL V3300] (Secondary)"; ++static const char pci_device_1002_7173[] = "RV515GL [FireGL V3350] (Secondary)"; ++static const char pci_device_1002_7180[] = "RV516 [Radeon X1300/X1550 Series]"; ++static const char pci_device_1002_7181[] = "RV516 XT Radeon X1600 Series (Primary)"; ++static const char pci_device_1002_7183[] = "RV516 [Radeon X1300/X1550 Series]"; ++static const char pci_device_1002_7187[] = "RV516 [Radeon X1300/X1550 Series]"; ++static const char pci_device_1002_7188[] = "M64-S [Mobility Radeon X2300]"; ++static const char pci_device_1002_718a[] = "Mobility Radeon X2300"; ++static const char pci_device_1002_718c[] = "M62CSP64 [Mobility Radeon X1350]"; ++static const char pci_device_1002_718d[] = "M64CSP128 [Mobility Radeon X1450]"; + static const char pci_device_1002_7193[] = "RV516 [Radeon X1550 Series]"; + static const char pci_device_1002_719b[] = "FireMV 2250"; + static const char pci_device_1002_719f[] = "RV516LE [Radeon X1550 64-bit]"; +-static const char pci_device_1002_71a0[] = "RV516 [ATI Radeon X1300/X1550 Series Secondary]"; +-static const char pci_device_1002_71a1[] = "RV516 XT Radeon X1600 Series Secondary"; +-static const char pci_device_1002_71a3[] = "RV516 [ATI Radeon X1300 Pro Secondary]"; +-static const char pci_device_1002_71a7[] = "RV516 [ATI Radeon X1300/X1550 Series Secondary]"; +-static const char pci_device_1002_71bb[] = "FireMV 2250 Secondary"; ++static const char pci_device_1002_71a0[] = "RV516 [Radeon X1300/X1550 Series] (Secondary)"; ++static const char pci_device_1002_71a1[] = "RV516 XT Radeon X1600 Series (Secondary)"; ++static const char pci_device_1002_71a3[] = "RV516 [Radeon X1300 Pro] (Secondary)"; ++static const char pci_device_1002_71a7[] = "RV516 [Radeon X1300/X1550 Series] (Secondary)"; ++static const char pci_device_1002_71bb[] = "FireMV 2250 (Secondary)"; + static const char pci_device_1002_71c0[] = "RV530 [Radeon X1600]"; + static const char pci_device_1002_71c2[] = "RV530 [Radeon X1600]"; +-static const char pci_device_1002_71c4[] = "M56GL [ATI Mobility FireGL V5200]"; ++static const char pci_device_1002_71c4[] = "M56GL [Mobility FireGL V5200]"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1002_71c4_17aa_2007[] = "ThinkPad T60p"; + #endif + static const char pci_device_1002_71c5[] = "M56P [Radeon Mobility X1600]"; +-static const char pci_device_1002_71c6[] = "RV530LE [Radeon X1600]"; ++static const char pci_device_1002_71c6[] = "RV530LE [Radeon X1600/X1650 PRO]"; + static const char pci_device_1002_71c7[] = "RV535 [Radeon X1650 Series]"; + static const char pci_device_1002_71ce[] = "RV530LE [Radeon X1600]"; +-static const char pci_device_1002_71d5[] = "M66-P ATI Mobility Radeon X1700"; +-static const char pci_device_1002_71d6[] = "M66-XT ATI Mobility Radeon X1700"; ++static const char pci_device_1002_71d4[] = "M56GL [Mobility FireGL V5250]"; ++static const char pci_device_1002_71d5[] = "M66-P [Mobility Radeon X1700]"; ++static const char pci_device_1002_71d6[] = "M66-XT [Mobility Radeon X1700]"; + static const char pci_device_1002_71de[] = "RV530LE [Radeon X1600]"; + static const char pci_device_1002_71e0[] = "RV530 [Radeon X1600] (Secondary)"; + static const char pci_device_1002_71e2[] = "RV530 [Radeon X1600] (Secondary)"; ++static const char pci_device_1002_71e6[] = "RV530LE [Radeon X1650 PRO] (Secondary)"; + static const char pci_device_1002_71e7[] = "RV535 [Radeon X1650 Series]"; +-static const char pci_device_1002_7210[] = "M71 [ATI Mobility Radeon X2100]"; +-static const char pci_device_1002_7211[] = "M71 [ATI Mobility Radeon X2100 Secondary]"; ++static const char pci_device_1002_7210[] = "M71 [Mobility Radeon X2100]"; ++static const char pci_device_1002_7211[] = "M71 [Mobility Radeon X2100] (Secondary)"; + static const char pci_device_1002_7240[] = "R580 [Radeon X1900]"; + static const char pci_device_1002_7241[] = "R580 [Radeon X1900]"; + static const char pci_device_1002_7242[] = "R580 [Radeon X1900]"; +@@ -2308,36 +2373,37 @@ static const char pci_device_1002_7245[] + static const char pci_device_1002_7246[] = "R580 [Radeon X1900]"; + static const char pci_device_1002_7247[] = "R580 [Radeon X1900]"; + static const char pci_device_1002_7248[] = "R580 [Radeon X1900]"; +-static const char pci_device_1002_7249[] = "R580 [Radeon X1900 XT] Primary"; ++static const char pci_device_1002_7249[] = "R580 [Radeon X1900 XT] (Primary)"; + static const char pci_device_1002_724a[] = "R580 [Radeon X1900]"; + static const char pci_device_1002_724b[] = "R580 [Radeon X1900]"; + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_1002_724b_1002_0b12[] = "Radeon X1900 Primary Display Device"; ++static const char pci_subsys_1002_724b_1002_0b12[] = "Radeon X1900 (Primary)"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_1002_724b_1002_0b13[] = "Radeon X1900 Secondary Display Device"; ++static const char pci_subsys_1002_724b_1002_0b13[] = "Radeon X1900 (Secondary)"; + #endif + static const char pci_device_1002_724c[] = "R580 [Radeon X1900]"; + static const char pci_device_1002_724d[] = "R580 [Radeon X1900]"; + static const char pci_device_1002_724e[] = "R580 [AMD Stream Processor]"; +-static const char pci_device_1002_7269[] = "R580 [Radeon X1900 XT] Secondary"; ++static const char pci_device_1002_7269[] = "R580 [Radeon X1900 XT] (Secondary)"; + static const char pci_device_1002_726b[] = "R580 [Radeon X1900]"; +-static const char pci_device_1002_726e[] = "R580 [AMD Stream Processor Secondary]"; +-static const char pci_device_1002_7280[] = "ATI Radeon X1950 Pro Primary (PCIE)"; +-static const char pci_device_1002_7288[] = "ATI Radeon X1950 GT"; +-static const char pci_device_1002_7291[] = "ATI Radeon X1650 XT Primary (PCIE)"; ++static const char pci_device_1002_726e[] = "R580 [AMD Stream Processor] (Secondary)"; ++static const char pci_device_1002_7280[] = "Radeon X1950 Pro (Primary) (PCIE)"; ++static const char pci_device_1002_7288[] = "Radeon X1950 GT"; ++static const char pci_device_1002_7291[] = "Radeon X1650 XT (Primary) (PCIE)"; + static const char pci_device_1002_7293[] = "Radeon X1650 Series"; +-static const char pci_device_1002_72a0[] = "ATI Radeon X1950 Pro Secondary (PCIE)"; +-static const char pci_device_1002_72a8[] = "ATI Radeon X1950 GT Secondary"; +-static const char pci_device_1002_72b1[] = "ATI Radeon X1650 XT Secondary (PCIE)"; +-static const char pci_device_1002_72b3[] = "ATI Radeon X1650 Series Secondary"; ++static const char pci_device_1002_72a0[] = "Radeon X1950 Pro (Secondary) (PCIE)"; ++static const char pci_device_1002_72a8[] = "Radeon X1950 GT (Secondary)"; ++static const char pci_device_1002_72b1[] = "Radeon X1650 XT (Secondary) (PCIE)"; ++static const char pci_device_1002_72b3[] = "Radeon X1650 Series (Secondary)"; + static const char pci_device_1002_7833[] = "Radeon 9100 IGP Host Bridge"; + static const char pci_device_1002_7834[] = "Radeon 9100 PRO IGP"; + static const char pci_device_1002_7835[] = "Radeon Mobility 9200 IGP"; + static const char pci_device_1002_7838[] = "Radeon 9100 IGP PCI/AGP Bridge"; +-static const char pci_device_1002_791e[] = "ATI Radeon Xpress 1200 Series"; +-static const char pci_device_1002_791f[] = "ATI Radeon Xpress 1200 Series"; +-static const char pci_device_1002_793f[] = "ATI Radeon Xpress 1200 Series Secondary"; ++static const char pci_device_1002_7919[] = "Radeon X1200 Series Audio Controller"; ++static const char pci_device_1002_791e[] = "Radeon X1200 Series"; ++static const char pci_device_1002_791f[] = "Radeon X1200 Series"; ++static const char pci_device_1002_793f[] = "Radeon X1200 Series (Secondary)"; + static const char pci_device_1002_7c37[] = "RV350 AQ [Radeon 9600 SE]"; + static const char pci_device_1002_cab0[] = "AGP Bridge [IGP 320M]"; + static const char pci_device_1002_cab2[] = "RS200/RS200M AGP Bridge [IGP 340M]"; +@@ -2447,13 +2513,28 @@ static const char pci_device_100b_0030[] + static const char pci_device_100b_0035[] = "DP83065 [Saturn] 10/100/1000 Ethernet Controller"; + static const char pci_device_100b_0500[] = "SCx200 Bridge"; + static const char pci_device_100b_0501[] = "SCx200 SMI"; +-static const char pci_device_100b_0502[] = "SCx200 IDE"; +-static const char pci_device_100b_0503[] = "SCx200 Audio"; ++static const char pci_device_100b_0502[] = "SCx200, SC1100 IDE controller"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_100b_0502_100b_0502[] = "IDE Controller"; ++#endif ++static const char pci_device_100b_0503[] = "SCx200, SC1100 Audio Controller"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_100b_0503_100b_0503[] = "XpressAudio controller"; ++#endif + static const char pci_device_100b_0504[] = "SCx200 Video"; + static const char pci_device_100b_0505[] = "SCx200 XBus"; + static const char pci_device_100b_0510[] = "SC1100 Bridge"; +-static const char pci_device_100b_0511[] = "SC1100 SMI"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_100b_0510_100b_0500[] = "GPIO and LPC support bridge"; ++#endif ++static const char pci_device_100b_0511[] = "SC1100 SMI & ACPI"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_100b_0511_100b_0501[] = "SC1100 SMI & ACPI bridge"; ++#endif + static const char pci_device_100b_0515[] = "SC1100 XBus"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_100b_0515_100b_0505[] = "SC1100 PCI to XBus bridge"; ++#endif + static const char pci_device_100b_d001[] = "87410 IDE"; + static const char pci_vendor_100c[] = "Tseng Labs Inc"; + static const char pci_device_100c_3202[] = "ET4000/W32p rev A"; +@@ -2900,7 +2981,7 @@ static const char pci_subsys_1014_0096_1 + static const char pci_device_1014_009f[] = "PCI 4758 Cryptographic Accelerator"; + static const char pci_device_1014_00a5[] = "ATM Controller (1410a500)"; + static const char pci_device_1014_00a6[] = "ATM 155MBPS MM Controller (1410a600)"; +-static const char pci_device_1014_00b7[] = "256-bit Graphics Rasterizer [Fire GL1]"; ++static const char pci_device_1014_00b7[] = "256-bit Graphics Rasterizer [FireGL1]"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1014_00b7_1092_00b8[] = "FireGL1 AGP 32Mb"; +@@ -2960,6 +3041,13 @@ static const char pci_subsys_1014_01bd_1 + #endif + static const char pci_device_1014_01c1[] = "64bit/66MHz PCI ATM 155 UTP"; + static const char pci_device_1014_01e6[] = "Cryptographic Accelerator"; ++static const char pci_device_1014_01ef[] = "PowerPC 440GP PCI Bridge"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1014_01ef_1734_102b[] = "PCEAS PCI-X Dual Port ESCON Adapter"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1014_01ef_1734_10f8[] = "PCEAT PCI-Express Dual Port ESCON Adapter"; ++#endif + static const char pci_device_1014_01ff[] = "10/100 Mbps Ethernet"; + static const char pci_device_1014_0219[] = "Multiport Serial Adapter"; + #ifdef INIT_SUBSYS_INFO +@@ -2998,9 +3086,16 @@ static const char pci_subsys_1014_02bd_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1014_02bd_1014_02c2[] = "PCI-X DDR 3Gb SAS RAID Adapter (572B/571D)"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1014_02bd_1014_0338[] = "PCI-X266 Auxiliary Cache Adapter (575C)"; ++#endif + static const char pci_device_1014_0302[] = "Winnipeg PCI-X Host Bridge"; + static const char pci_device_1014_0308[] = "CalIOC2 PCI-E Root Port"; + static const char pci_device_1014_0314[] = "ZISC 036 Neural accelerator card"; ++static const char pci_device_1014_0339[] = "Obsidian-E PCI-E SCSI controller"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1014_0339_1014_0360[] = "PCI-E Auxiliary Cache Adapter (57B7)"; ++#endif + static const char pci_device_1014_3022[] = "QLA3022 Network Adapter"; + static const char pci_device_1014_4022[] = "QLA3022 Network Adapter"; + static const char pci_device_1014_ffff[] = "MPIC-2 interrupt controller"; +@@ -3024,6 +3119,16 @@ static const char pci_vendor_1019[] = "E + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_101a[] = "AT&T GIS (NCR)"; + static const char pci_device_101a_0005[] = "100VG ethernet"; ++static const char pci_device_101a_1dc1[] = "Bynet"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_101a_1dc1_101a_0019[] = "BIC2M"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_101a_1dc1_101a_001f[] = "BIC4M"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_101a_1dc1_101a_0ece[] = "BYA4M"; ++#endif + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_101b[] = "Vitesse Semiconductor"; +@@ -3121,6 +3226,16 @@ static const char pci_device_1022_1100[] + static const char pci_device_1022_1101[] = "K8 [Athlon64/Opteron] Address Map"; + static const char pci_device_1022_1102[] = "K8 [Athlon64/Opteron] DRAM Controller"; + static const char pci_device_1022_1103[] = "K8 [Athlon64/Opteron] Miscellaneous Control"; ++static const char pci_device_1022_1200[] = "Family 10h [Opteron, Athlon64, Sempron] HyperTransport Configuration"; ++static const char pci_device_1022_1201[] = "Family 10h [Opteron, Athlon64, Sempron] Address Map"; ++static const char pci_device_1022_1202[] = "Family 10h [Opteron, Athlon64, Sempron] DRAM Controller"; ++static const char pci_device_1022_1203[] = "Family 10h [Opteron, Athlon64, Sempron] Miscellaneous Control"; ++static const char pci_device_1022_1204[] = "Family 10h [Opteron, Athlon64, Sempron] Link Control"; ++static const char pci_device_1022_1300[] = "Family 11h HyperTransport Configuration"; ++static const char pci_device_1022_1301[] = "Family 11h Address Map"; ++static const char pci_device_1022_1302[] = "Family 11h DRAM Controller"; ++static const char pci_device_1022_1303[] = "Family 11h Miscellaneous Control"; ++static const char pci_device_1022_1304[] = "Family 11h Link Control"; + static const char pci_device_1022_2000[] = "79c970 [PCnet32 LANCE]"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1022_2000_1014_2000[] = "NetFinity 10/100 Fast Ethernet"; +@@ -3198,7 +3313,7 @@ static const char pci_subsys_1022_2001_1 + static const char pci_device_1022_2003[] = "Am 1771 MBW [Alchemy]"; + static const char pci_device_1022_2020[] = "53c974 [PCscsi]"; + static const char pci_device_1022_2040[] = "79c974"; +-static const char pci_device_1022_2080[] = "Conrad Kostecki"; ++static const char pci_device_1022_2080[] = "CS5536 [Geode companion] Host Bridge"; + static const char pci_device_1022_2081[] = "Geode LX Video"; + static const char pci_device_1022_2082[] = "Geode LX AES Security Block"; + static const char pci_device_1022_208f[] = "CS5536 GeodeLink PCI South Bridge"; +@@ -3500,7 +3615,9 @@ static const char pci_subsys_1028_0015_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1028_0015_1028_1f02[] = "PERC 5/i Adapter RAID Controller"; + #endif +-static const char pci_device_1028_1f03[] = "PERC 5/i"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1028_0015_1028_1f03[] = "PERC 5/i Adapter RAID Controller"; ++#endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1029[] = "Siemens Nixdorf IS"; + #endif +@@ -3916,6 +4033,9 @@ static const char pci_subsys_102b_2538_1 + static const char pci_subsys_102b_2538_102b_0907[] = "Millennium P650 PCIe 64MB"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_102b_2538_102b_0947[] = "Parhelia APVe"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_102b_2538_102b_1047[] = "Millennium P650 LP PCIe 128MB"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -4157,6 +4277,9 @@ static const char pci_device_1039_0018[] + static const char pci_device_1039_0180[] = "RAID bus controller 180 SATA/PATA [SiS]"; + static const char pci_device_1039_0181[] = "SATA"; + static const char pci_device_1039_0182[] = "182 SATA/RAID Controller"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1039_0182_1734_1095[] = "D2030-A1"; ++#endif + static const char pci_device_1039_0186[] = "AHCI Controller (0106)"; + static const char pci_device_1039_0190[] = "190 Gigabit Ethernet Adapter"; + static const char pci_device_1039_0191[] = "191 Gigabit Ethernet Adapter"; +@@ -4204,6 +4327,9 @@ static const char pci_device_1039_0746[] + static const char pci_device_1039_0755[] = "755 Host"; + static const char pci_device_1039_0760[] = "760/M760 Host"; + static const char pci_device_1039_0761[] = "761/M761 Host"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1039_0761_1734_1099[] = "D2030-A1 Motherboard"; ++#endif + static const char pci_device_1039_0900[] = "SiS900 PCI Fast Ethernet"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1039_0900_1019_0a14[] = "K7S5A motherboard"; +@@ -4248,6 +4374,9 @@ static const char pci_subsys_1039_5513_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1039_5513_1462_7010[] = "MS-6701 motherboard"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1039_5513_1734_1095[] = "D2030-A1 Motherboard"; ++#endif + static const char pci_device_1039_5517[] = "5517"; + static const char pci_device_1039_5571[] = "5571"; + static const char pci_device_1039_5581[] = "5581 Pentium Chipset"; +@@ -4294,6 +4423,15 @@ static const char pci_device_1039_6330[] + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1039_6330_1039_6330[] = "[M]661xX/[M]741[GX]/[M]760 PCI/AGP VGA Adapter"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1039_6330_1043_8113[] = "SiS Real 256E (ASUS P5S800-VM motherboard)"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1039_6330_1458_d000[] = "SiS661FX GUI 2D/3D Accelerator"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1039_6330_1734_1099[] = "D2030-A1"; ++#endif + static const char pci_device_1039_6350[] = "770/670 PCIE VGA Display Adapter"; + static const char pci_device_1039_6351[] = "771/671 PCIE VGA Display Adapter"; + static const char pci_device_1039_7001[] = "USB 1.0 Controller"; +@@ -4309,6 +4447,9 @@ static const char pci_subsys_1039_7001_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1039_7001_1462_7010[] = "MS-6701 motherboard"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1039_7001_1734_1095[] = "D2030-A1 Motherboard"; ++#endif + static const char pci_device_1039_7002[] = "USB 2.0 Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1039_7002_1462_7010[] = "MS-6701 motherboard"; +@@ -4316,6 +4457,9 @@ static const char pci_subsys_1039_7002_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1039_7002_1509_7002[] = "Onboard USB Controller"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1039_7002_1734_1095[] = "D2030-A1"; ++#endif + static const char pci_device_1039_7007[] = "FireWire Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1039_7007_1462_701d[] = "MS-6701"; +@@ -4327,6 +4471,9 @@ static const char pci_subsys_1039_7012_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1039_7012_15bd_1001[] = "DFI 661FX motherboard"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1039_7012_1734_109f[] = "D2030-A1 Motherboard"; ++#endif + static const char pci_device_1039_7013[] = "AC'97 Modem Controller"; + static const char pci_device_1039_7016[] = "SiS7016 PCI Fast Ethernet Adapter"; + #ifdef INIT_SUBSYS_INFO +@@ -4352,6 +4499,9 @@ static const char pci_subsys_1039_7018_1 + static const char pci_subsys_1039_7018_1039_7018[] = "SiS PCI Audio Accelerator"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1039_7018_1043_1453[] = "SiS PCI Audio Accelerator"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1039_7018_1043_800b[] = "SiS PCI Audio Accelerator"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -4498,6 +4648,7 @@ static const char pci_device_103c_12f8[] + static const char pci_device_103c_12fa[] = "BCM4306 802.11b/g Wireless LAN Controller"; + static const char pci_device_103c_1302[] = "RMP-3 Shared Memory Driver"; + static const char pci_device_103c_1303[] = "RMP-3 (Remote Management Processor)"; ++static const char pci_device_103c_1361[] = "BCM4312 802.11a/b/g WLAN Controller"; + static const char pci_device_103c_2910[] = "E2910A PCIBus Exerciser"; + static const char pci_device_103c_2925[] = "E2925A 32 Bit, 33 MHzPCI Exerciser & Analyzer"; + static const char pci_device_103c_3080[] = "Pavilion ze2028ea"; +@@ -4508,6 +4659,19 @@ static const char pci_device_103c_3220[] + static const char pci_subsys_103c_3220_103c_3225[] = "3 Gb/s SAS RAID"; + #endif + static const char pci_device_103c_3230[] = "Smart Array Controller"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_103c_3230_103c_3223[] = "Smart Array P800"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_103c_3230_103c_3234[] = "P400 SAS Controller"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_103c_3230_103c_3235[] = "P400i SAS Controller"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_103c_3230_103c_3237[] = "E500 SAS Controller"; ++#endif ++static const char pci_device_103c_3238[] = "Smart Array E200i (SAS Controller)"; + static const char pci_device_103c_4030[] = "zx2 System Bus Adapter"; + static const char pci_device_103c_4031[] = "zx2 I/O Controller"; + static const char pci_device_103c_4037[] = "PCIe Local Bus Adapter"; +@@ -5165,7 +5329,7 @@ static const char pci_subsys_104c_ac56_1 + static const char pci_subsys_104c_ac56_1014_0528[] = "ThinkPad R40e (2684-HVG) Cardbus Controller"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_104c_ac56_17aa_2012[] = "Thinkpad R60e model 0657"; ++static const char pci_subsys_104c_ac56_17aa_2012[] = "ThinkPad T60/R60 series"; + #endif + static const char pci_device_104c_ac60[] = "PCI2040 PCI to DSP Bridge Controller"; + #ifdef INIT_SUBSYS_INFO +@@ -5253,6 +5417,8 @@ static const char pci_vendor_1053[] = "Y + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1054[] = "Hitachi, Ltd"; ++static const char pci_device_1054_3011[] = "ColdFusion 3e Chipset Processor to I/O Controller"; ++static const char pci_device_1054_3012[] = "ColdFusion 3e Chipset Memory Controller Hub"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1055[] = "Efar Microsystems"; +@@ -5275,6 +5441,8 @@ static const char pci_device_1057_0009[] + static const char pci_device_1057_0012[] = "MPC8548 [PowerQUICC III]"; + static const char pci_device_1057_0100[] = "MC145575 [HFC-PCI]"; + static const char pci_device_1057_0431[] = "KTI829c 100VG"; ++static const char pci_device_1057_1073[] = "Nokia N770"; ++static const char pci_device_1057_1219[] = "Nokia N800"; + static const char pci_device_1057_1801[] = "DSP56301 Digital Signal Processor"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1057_1801_14fb_0101[] = "Transas Radar Imitator Board [RIM]"; +@@ -5463,7 +5631,7 @@ static const char pci_vendor_1059[] = "T + static const char pci_vendor_105a[] = "Promise Technology, Inc."; + static const char pci_device_105a_0d30[] = "PDC20265 (FastTrak100 Lite/Ultra100)"; + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_105a_0d30_1043_8042[] = "ASUS AV7266-E South Bridge Promise RAID"; ++static const char pci_subsys_105a_0d30_1043_8042[] = "AV7266-E South Bridge Promise RAID"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_105a_0d30_105a_4d33[] = "Ultra100"; +@@ -5568,11 +5736,14 @@ static const char pci_device_105a_6629[] + static const char pci_device_105a_7275[] = "PDC20277 (SBFastTrak133 Lite)"; + static const char pci_device_105a_8002[] = "SATAII150 SX8"; + static const char pci_device_105a_8350[] = "80333 [SuperTrak EX8350/EX16350], 80331 [SuperTrak EX8300/EX16300]"; +-static const char pci_device_105a_8650[] = "IOP1348 [SuperTrak EX4650/EX8650/EX8654]"; ++static const char pci_device_105a_8650[] = "81348 [SuperTrak EX4650/EX8650/EX8654/EX4650EL]"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_105a_8650_105a_4600[] = "SuperTrak EX4650"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_105a_8650_105a_4610[] = "SuperTrak EX4650EL"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_105a_8650_105a_8601[] = "SuperTrak EX8650"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -5583,6 +5754,7 @@ static const char pci_device_105a_e350[] + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_105b[] = "Foxconn International, Inc."; ++static const char pci_device_105b_0c4d[] = "SiS AC'97 Sound Controller"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_105c[] = "Wipro Infotech Limited"; +@@ -6173,12 +6345,20 @@ static const char pci_device_108e_1103[] + static const char pci_device_108e_1648[] = "[bge] Gigabit Ethernet"; + static const char pci_device_108e_2bad[] = "GEM"; + static const char pci_device_108e_5000[] = "Simba Advanced PCI Bridge"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_108e_5000_108e_5000[] = "Netra AX1105-500"; ++#endif + static const char pci_device_108e_5043[] = "SunPCI Co-processor"; ++static const char pci_device_108e_676e[] = "SunPCiIII"; ++static const char pci_device_108e_7063[] = "SunPCiII / SunPCiIIpro"; + static const char pci_device_108e_8000[] = "Psycho PCI Bus Module"; + static const char pci_device_108e_8001[] = "Schizo PCI Bus Module"; + static const char pci_device_108e_8002[] = "Schizo+ PCI Bus Module"; + static const char pci_device_108e_a000[] = "Ultra IIi"; + static const char pci_device_108e_a001[] = "Ultra IIe"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_108e_a001_108e_a001[] = "Netra AX1105-500"; ++#endif + static const char pci_device_108e_a801[] = "Tomatillo PCI Bus Module"; + static const char pci_device_108e_abba[] = "Cassini 10/100/1000"; + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -6840,16 +7020,26 @@ static const char pci_device_10b5_1146[] + static const char pci_device_10b5_1147[] = "VScom 020 2 port parallel adaptor"; + static const char pci_device_10b5_2540[] = "IXXAT CAN-Interface PC-I 04/PCI"; + static const char pci_device_10b5_2724[] = "Thales PCSM Security Card"; ++static const char pci_device_10b5_6520[] = "PCI6520 PCI-X to PCI-X bridge"; + static const char pci_device_10b5_6540[] = "PCI6540/6466 PCI-PCI bridge (transparent mode)"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10b5_6540_1775_1100[] = "CR11 Single Board Computer"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10b5_6540_4c53_10e0[] = "PSL09 PrPMC"; + #endif + static const char pci_device_10b5_6541[] = "PCI6540/6466 PCI-PCI bridge (non-transparent mode, primary side)"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10b5_6541_1775_1100[] = "CR11 Single Board Computer"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10b5_6541_4c53_10e0[] = "PSL09 PrPMC"; + #endif + static const char pci_device_10b5_6542[] = "PCI6540/6466 PCI-PCI bridge (non-transparent mode, secondary side)"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10b5_6542_1775_1100[] = "CR11 Single Board Computer"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10b5_6542_4c53_10e0[] = "PSL09 PrPMC"; + #endif + static const char pci_device_10b5_8111[] = "PEX 8111 PCI Express-to-PCI Bridge"; +@@ -7041,6 +7231,9 @@ static const char pci_subsys_10b5_9054_1 + static const char pci_subsys_10b5_9054_14b4_d100[] = "Dektec DTA-100"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10b5_9054_14b4_d114[] = "Dektec DTA-120"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10b5_9054_16df_0011[] = "PIKA PrimeNet MM PCI"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -7058,10 +7251,13 @@ static const char pci_subsys_10b5_9054_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10b5_9054_16df_0016[] = "PIKA InLine MM"; + #endif +-static const char pci_device_10b5_9056[] = "Francois"; ++static const char pci_device_10b5_9056[] = "9056 PCI I/O Accelerator"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10b5_9056_10b5_2979[] = "CellinkBlade 11 - CPCI board VoATM AAL1"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10b5_9056_14b4_d140[] = "Dektec DTA-140"; ++#endif + static const char pci_device_10b5_9060[] = "9060"; + static const char pci_device_10b5_906d[] = "9060SD"; + #ifdef INIT_SUBSYS_INFO +@@ -7174,6 +7370,9 @@ static const char pci_device_10b7_0910[] + static const char pci_device_10b7_1006[] = "MINI PCI type 3B Data Fax Modem"; + static const char pci_device_10b7_1007[] = "Mini PCI 56k Winmodem"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10b7_1007_10b7_615b[] = "Mini PCI 56K Modem"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10b7_1007_10b7_615c[] = "Mini PCI 56K Modem"; + #endif + static const char pci_device_10b7_1201[] = "3c982-TXM 10/100baseTX Dual Port A [Hydra]"; +@@ -7389,6 +7588,11 @@ static const char pci_subsys_10b7_9200_1 + #ifdef VENDOR_INCLUDE_NONVIDEO + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10b7_9200_1028_00b4[] = "OptiPlex GX110"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10b7_9200_1028_00fe[] = "Optiplex GX240"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -7398,7 +7602,7 @@ static const char pci_subsys_10b7_9200_1 + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_10b7_9200_10b7_1000[] = "3C905C-TX Fast Etherlink for PC Management NIC"; ++static const char pci_subsys_10b7_9200_10b7_1000[] = "3C905CX-TX/TX-M Fast Etherlink for PC Management NIC"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10b7_9200_10b7_7000[] = "10/100 Mini PCI Ethernet Adapter"; +@@ -8108,8 +8312,8 @@ static const char pci_subsys_10de_0029_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_0029_14af_5820[] = "Maxi Gamer Xentor 32"; + #endif +-static const char pci_device_10de_002a[] = "NV5 [Riva TnT2]"; +-static const char pci_device_10de_002b[] = "NV5 [Riva TnT2]"; ++static const char pci_device_10de_002a[] = "NV5 [Riva TNT2]"; ++static const char pci_device_10de_002b[] = "NV5 [Riva TNT2]"; + static const char pci_device_10de_002c[] = "NV6 [Vanta/Vanta LT]"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_002c_1043_0200[] = "AGP-V3800 Combat SDRAM"; +@@ -8187,7 +8391,7 @@ static const char pci_device_10de_0041[] + static const char pci_subsys_10de_0041_1043_817b[] = "V9999 Gamer Edition"; + #endif + static const char pci_device_10de_0042[] = "NV40.2 [GeForce 6800 LE]"; +-static const char pci_device_10de_0043[] = "NV40.3"; ++static const char pci_device_10de_0043[] = "NV40.3 [GeForce 6800 XE]"; + static const char pci_device_10de_0044[] = "NV40 [GeForce 6800 XT]"; + static const char pci_device_10de_0045[] = "NV40 [GeForce 6800 GT]"; + static const char pci_device_10de_0046[] = "NV40 [GeForce 6800 GT]"; +@@ -8201,7 +8405,7 @@ static const char pci_device_10de_004d[] + static const char pci_device_10de_004e[] = "NV40GL [Quadro FX 4000]"; + static const char pci_device_10de_0050[] = "CK804 ISA Bridge"; + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_10de_0050_1043_815a[] = "K8N4-E Mainboard"; ++static const char pci_subsys_10de_0050_1043_815a[] = "K8N4-E or A8N-E Mainboard"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_0050_1458_0c11[] = "GA-K8N Ultra-9 Mainboard"; +@@ -8215,7 +8419,7 @@ static const char pci_subsys_10de_0050_1 + static const char pci_device_10de_0051[] = "CK804 ISA Bridge"; + static const char pci_device_10de_0052[] = "CK804 SMBus"; + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_10de_0052_1043_815a[] = "K8N4-E Mainboard"; ++static const char pci_subsys_10de_0052_1043_815a[] = "K8N4-E or A8N-E Mainboard"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_0052_1458_0c11[] = "GA-K8N Ultra-9 Mainboard"; +@@ -8228,7 +8432,7 @@ static const char pci_subsys_10de_0052_1 + #endif + static const char pci_device_10de_0053[] = "CK804 IDE"; + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_10de_0053_1043_815a[] = "K8N4-E Mainboard"; ++static const char pci_subsys_10de_0053_1043_815a[] = "K8N4-E or A8N-E Mainboard"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_0053_1458_5002[] = "GA-K8N Ultra-9 Mainboard"; +@@ -8241,6 +8445,9 @@ static const char pci_subsys_10de_0053_1 + #endif + static const char pci_device_10de_0054[] = "CK804 Serial ATA Controller"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_0054_1043_815a[] = "A8N-E Mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_0054_1458_b003[] = "GA-K8N Ultra-9 Mainboard"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -8251,7 +8458,7 @@ static const char pci_subsys_10de_0054_1 + #endif + static const char pci_device_10de_0055[] = "CK804 Serial ATA Controller"; + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_10de_0055_1043_815a[] = "K8N4-E Mainboard"; ++static const char pci_subsys_10de_0055_1043_815a[] = "K8N4-E or A8N-E Mainboard"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_0055_1458_b003[] = "GA-K8N Ultra-9 Mainboard"; +@@ -8262,7 +8469,7 @@ static const char pci_subsys_10de_0055_1 + static const char pci_device_10de_0056[] = "CK804 Ethernet Controller"; + static const char pci_device_10de_0057[] = "CK804 Ethernet Controller"; + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_10de_0057_1043_8141[] = "K8N4-E Mainboard"; ++static const char pci_subsys_10de_0057_1043_8141[] = "K8N4-E or A8N-E Mainboard"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_0057_1458_e000[] = "GA-K8N Ultra-9 Mainboard"; +@@ -8276,14 +8483,14 @@ static const char pci_subsys_10de_0057_1 + static const char pci_device_10de_0058[] = "CK804 AC'97 Modem"; + static const char pci_device_10de_0059[] = "CK804 AC'97 Audio Controller"; + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_10de_0059_1043_812a[] = "K8N4-E Mainboard"; ++static const char pci_subsys_10de_0059_1043_812a[] = "K8N4-E or A8N-E Mainboard"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_0059_147b_1c1a[] = "KN8-Ultra Mainboard"; + #endif + static const char pci_device_10de_005a[] = "CK804 USB Controller"; + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_10de_005a_1043_815a[] = "K8N4-E Mainboard"; ++static const char pci_subsys_10de_005a_1043_815a[] = "K8N4-E or A8N-E Mainboard"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_005a_1458_5004[] = "GA-K8N Ultra-9 Mainboard"; +@@ -8296,7 +8503,7 @@ static const char pci_subsys_10de_005a_1 + #endif + static const char pci_device_10de_005b[] = "CK804 USB Controller"; + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_10de_005b_1043_815a[] = "K8N4-E Mainboard"; ++static const char pci_subsys_10de_005b_1043_815a[] = "K8N4-E or A8N-E Mainboard"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_005b_1458_5004[] = "GA-K8N Ultra-9 Mainboard"; +@@ -8311,6 +8518,9 @@ static const char pci_device_10de_005c[] + static const char pci_device_10de_005d[] = "CK804 PCIE Bridge"; + static const char pci_device_10de_005e[] = "CK804 Memory Controller"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_005e_1043_815a[] = "A8N-E Mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_005e_10f1_2891[] = "Thunder K8SRE Mainboard"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -8402,9 +8612,10 @@ static const char pci_device_10de_0090[] + static const char pci_device_10de_0091[] = "G70 [GeForce 7800 GTX]"; + static const char pci_device_10de_0092[] = "G70 [GeForce 7800 GT]"; + static const char pci_device_10de_0093[] = "G70 [GeForce 7800 GS]"; +-static const char pci_device_10de_0098[] = "GeForce Go 7800"; +-static const char pci_device_10de_0099[] = "GE Force Go 7800 GTX"; +-static const char pci_device_10de_009d[] = "G70GL [Quadro FX4500]"; ++static const char pci_device_10de_0095[] = "GeForce 7800 SLI"; ++static const char pci_device_10de_0098[] = "G70 [GeForce Go 7800]"; ++static const char pci_device_10de_0099[] = "G70 [GeForce Go 7800 GTX]"; ++static const char pci_device_10de_009d[] = "G70GL [Quadro FX 4500]"; + static const char pci_device_10de_00a0[] = "NV5 [Aladdin TNT2]"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_00a0_14af_5810[] = "Maxi Gamer Xentor"; +@@ -8412,7 +8623,7 @@ static const char pci_subsys_10de_00a0_1 + static const char pci_device_10de_00c0[] = "NV41 [GeForce 6800 GS]"; + static const char pci_device_10de_00c1[] = "NV41.1 [GeForce 6800]"; + static const char pci_device_10de_00c2[] = "NV41.2 [GeForce 6800 LE]"; +-static const char pci_device_10de_00c3[] = "NV42 [Geforce 6800 XT]"; ++static const char pci_device_10de_00c3[] = "NV42 [GeForce 6800 XT]"; + static const char pci_device_10de_00c8[] = "NV41.8 [GeForce Go 6800]"; + static const char pci_device_10de_00c9[] = "NV41.9 [GeForce Go 6800 Ultra]"; + static const char pci_device_10de_00cc[] = "NV41 [Quadro FX Go1400]"; +@@ -8435,6 +8646,9 @@ static const char pci_device_10de_00da[] + static const char pci_device_10de_00dd[] = "nForce3 PCI Bridge"; + static const char pci_device_10de_00df[] = "CK8S Ethernet Controller"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_00df_1043_80a7[] = "K8N-E"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_00df_105b_0c43[] = "Winfast NF3250K8AA"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -8442,6 +8656,9 @@ static const char pci_subsys_10de_00df_1 + #endif + static const char pci_device_10de_00e0[] = "nForce3 250Gb LPC Bridge"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_00e0_1043_813f[] = "K8N-E"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_00e0_10de_0c11[] = "Winfast NF3250K8AA"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -8452,6 +8669,9 @@ static const char pci_subsys_10de_00e0_1 + #endif + static const char pci_device_10de_00e1[] = "nForce3 250Gb Host Bridge"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_00e1_1043_813f[] = "K8N-E"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_00e1_1462_7030[] = "K8N Neo-FSR v2.0"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -8460,6 +8680,9 @@ static const char pci_subsys_10de_00e1_1 + static const char pci_device_10de_00e2[] = "nForce3 250Gb AGP Host to PCI Bridge"; + static const char pci_device_10de_00e3[] = "CK8S Serial ATA Controller (v2.5)"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_00e3_1043_813f[] = "K8N-E"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_00e3_105b_0c43[] = "Winfast NF3250K8AA"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -8467,6 +8690,9 @@ static const char pci_subsys_10de_00e3_1 + #endif + static const char pci_device_10de_00e4[] = "nForce 250Gb PCI System Management"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_00e4_1043_813f[] = "K8N-E"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_00e4_105b_0c43[] = "Winfast NF3250K8AA"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -8477,6 +8703,9 @@ static const char pci_subsys_10de_00e4_1 + #endif + static const char pci_device_10de_00e5[] = "CK8S Parallel ATA Controller (v2.5)"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_00e5_1043_813f[] = "K8N-E"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_00e5_105b_0c43[] = "Winfast NF3250K8AA"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -8488,6 +8717,9 @@ static const char pci_subsys_10de_00e5_1 + static const char pci_device_10de_00e6[] = "CK8S Ethernet Controller"; + static const char pci_device_10de_00e7[] = "CK8S USB Controller"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_00e7_1043_813f[] = "K8N-E"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_00e7_105b_0c43[] = "Winfast NF3250K8AA"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -8498,6 +8730,9 @@ static const char pci_subsys_10de_00e7_1 + #endif + static const char pci_device_10de_00e8[] = "nForce3 EHCI USB 2.0 Controller"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_00e8_1043_813f[] = "K8N-E"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_00e8_105b_0c43[] = "Winfast NF3250K8AA"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -8508,41 +8743,50 @@ static const char pci_subsys_10de_00e8_1 + #endif + static const char pci_device_10de_00ea[] = "nForce3 250Gb AC'97 Audio Controller"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_00ea_1043_819d[] = "K8N-E"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_00ea_105b_0c43[] = "Winfast NF3250K8AA"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_00ea_1462_b010[] = "K8N Neo-FSR v2.0"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_00ea_147b_1c0b[] = "NF8 Mainboard"; + #endif + static const char pci_device_10de_00ed[] = "nForce3 250Gb PCI-to-PCI Bridge"; + static const char pci_device_10de_00ee[] = "CK8S Serial ATA Controller (v2.5)"; +-static const char pci_device_10de_00f0[] = "NV40 [GeForce 6800/GeForce 6800 Ultra]"; +-static const char pci_device_10de_00f1[] = "NV43 [GeForce 6600/GeForce 6600 GT]"; ++static const char pci_device_10de_00f0[] = "NV40 [GeForce 6800 Ultra]"; ++static const char pci_device_10de_00f1[] = "NV43 [GeForce 6600 GT]"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_00f1_1043_81a6[] = "N6600GT TD 128M AGP"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_00f1_1458_3150[] = "GV-N66T128VP"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_00f1_1682_2119[] = "GeForce 6600 GT AGP 128MB DDR3 DUAL DVI TV"; + #endif +-static const char pci_device_10de_00f2[] = "NV43 [GeForce 6600/GeForce 6600 GT]"; ++static const char pci_device_10de_00f2[] = "NV43 [GeForce 6600]"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_00f2_1682_211c[] = "GeForce 6600 256MB DDR DUAL DVI TV"; + #endif + static const char pci_device_10de_00f3[] = "NV43 [GeForce 6200]"; + static const char pci_device_10de_00f4[] = "NV43 [GeForce 6600 LE]"; + static const char pci_device_10de_00f5[] = "G70 [GeForce 7800 GS]"; +-static const char pci_device_10de_00f6[] = "NV43 [GeForce 6600 GS]"; ++static const char pci_device_10de_00f6[] = "NV43 [GeForce 6800 GS]"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_00f6_1682_217e[] = "XFX GeForce 6800 XTreme 256MB DDR3 AGP"; + #endif + static const char pci_device_10de_00f8[] = "NV45GL [Quadro FX 3400/4400]"; +-static const char pci_device_10de_00f9[] = "NV40 [GeForce 6800 Ultra/GeForce 6800 GT]"; ++static const char pci_device_10de_00f9[] = "NV45 [GeForce 6800 GTO]"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_00f9_1682_2120[] = "GEFORCE 6800 GT PCI-E"; + #endif + static const char pci_device_10de_00fa[] = "NV36 [GeForce PCX 5750]"; + static const char pci_device_10de_00fb[] = "NV35 [GeForce PCX 5900]"; + static const char pci_device_10de_00fc[] = "NV37GL [Quadro FX 330/GeForce PCX 5300]"; +-static const char pci_device_10de_00fd[] = "NV37GL [Quadro FX 330/Quadro NVS280]"; ++static const char pci_device_10de_00fd[] = "NV37GL [Quadro PCI-E Series]"; + static const char pci_device_10de_00fe[] = "NV38GL [Quadro FX 1300]"; + static const char pci_device_10de_00ff[] = "NV18 [GeForce PCX 4300]"; + static const char pci_device_10de_0100[] = "NV10 [GeForce 256 SDR]"; +@@ -8616,6 +8860,9 @@ static const char pci_device_10de_0110[] + static const char pci_subsys_10de_0110_1043_4015[] = "AGP-V7100 Pro"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_0110_1043_4021[] = "V7100 Deluxe Combo"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_0110_1043_4031[] = "V7100 Pro with TV output"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -8651,15 +8898,19 @@ static const char pci_subsys_10de_0110_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_0110_14af_7103[] = "3D Prophet II MX Dual-Display"; + #endif +-static const char pci_device_10de_0111[] = "NV11DDR [GeForce2 MX 100 DDR/200 DDR]"; ++static const char pci_device_10de_0111[] = "NV11DDR [GeForce2 MX200]"; + static const char pci_device_10de_0112[] = "NV11 [GeForce2 Go]"; + static const char pci_device_10de_0113[] = "NV11GL [Quadro2 MXR/EX/Go]"; + static const char pci_device_10de_0140[] = "NV43 [GeForce 6600 GT]"; + static const char pci_device_10de_0141[] = "NV43 [GeForce 6600]"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_0141_1043_81b0[] = "EN6600 Silencer"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_0141_1458_3124[] = "GV-NX66128DP Turbo Force Edition"; + #endif +-static const char pci_device_10de_0142[] = "NV43 [GeForce 6600 PCIe]"; ++static const char pci_device_10de_0142[] = "NV43 [GeForce 6600 LE]"; ++static const char pci_device_10de_0143[] = "NV43 [GeForce 6600 VE]"; + static const char pci_device_10de_0144[] = "NV43 [GeForce Go 6600]"; + static const char pci_device_10de_0145[] = "NV43 [GeForce 6610 XL]"; + static const char pci_device_10de_0146[] = "NV43 [Geforce Go 6600TE/6200TE]"; +@@ -8667,7 +8918,7 @@ static const char pci_device_10de_0147[] + static const char pci_device_10de_0148[] = "NV43 [GeForce Go 6600]"; + static const char pci_device_10de_0149[] = "NV43 [GeForce Go 6600 GT]"; + static const char pci_device_10de_014a[] = "Quadro NVS 440"; +-static const char pci_device_10de_014c[] = "Quadro FX 550"; ++static const char pci_device_10de_014c[] = "Quadro FX 540 MXM"; + static const char pci_device_10de_014d[] = "NV18GL [Quadro FX 550]"; + static const char pci_device_10de_014e[] = "NV43GL [Quadro FX 540]"; + static const char pci_device_10de_014f[] = "NV43 [GeForce 6200]"; +@@ -8707,14 +8958,15 @@ static const char pci_subsys_10de_0152_1 + static const char pci_device_10de_0153[] = "NV15GL [Quadro2 Pro]"; + static const char pci_device_10de_0160[] = "GeForce 6500"; + static const char pci_device_10de_0161[] = "NV44 [GeForce 6200 TurboCache(TM)]"; +-static const char pci_device_10de_0162[] = "NV44 [GeForce 6200 SE TurboCache (TM)]"; ++static const char pci_device_10de_0162[] = "NV44 [GeForce 6200SE TurboCache (TM)]"; + static const char pci_device_10de_0163[] = "NV44 [GeForce 6200 LE]"; + static const char pci_device_10de_0164[] = "NV44 [GeForce Go 6200]"; + static const char pci_device_10de_0165[] = "NV44 [Quadro NVS 285]"; + static const char pci_device_10de_0166[] = "NV43 [GeForce Go 6400]"; +-static const char pci_device_10de_0167[] = "GeForce Go 6200 TurboCache"; +-static const char pci_device_10de_0168[] = "NV43 [GeForce Go 6200 TurboCache]"; ++static const char pci_device_10de_0167[] = "NV43 [GeForce Go 6200/6400]"; ++static const char pci_device_10de_0168[] = "NV43 [GeForce Go 6200/6400]"; + static const char pci_device_10de_0169[] = "GeForce 6250"; ++static const char pci_device_10de_016a[] = "GeForce 7100 GS"; + static const char pci_device_10de_0170[] = "NV17 [GeForce4 MX 460]"; + static const char pci_device_10de_0171[] = "NV17 [GeForce4 MX 440]"; + #ifdef INIT_SUBSYS_INFO +@@ -8748,11 +9000,11 @@ static const char pci_subsys_10de_0176_4 + #endif + static const char pci_device_10de_0177[] = "NV17 [GeForce4 460 Go]"; + static const char pci_device_10de_0178[] = "NV17GL [Quadro4 550 XGL]"; +-static const char pci_device_10de_0179[] = "NV17 [GeForce4 420 Go 32M]"; ++static const char pci_device_10de_0179[] = "NV17 [GeForce4 440 Go 64M]"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_0179_10de_0179[] = "GeForce4 MX (Mac)"; + #endif +-static const char pci_device_10de_017a[] = "NV17GL [Quadro4 200/400 NVS]"; ++static const char pci_device_10de_017a[] = "NV17GL [Quadro NVS]"; + static const char pci_device_10de_017b[] = "NV17GL [Quadro4 550 XGL]"; + static const char pci_device_10de_017c[] = "NV17GL [Quadro4 500 GoGL]"; + static const char pci_device_10de_017d[] = "NV17 [GeForce4 410 Go 16M]"; +@@ -8777,14 +9029,20 @@ static const char pci_subsys_10de_0181_1 + #endif + static const char pci_device_10de_0182[] = "NV18 [GeForce4 MX 440SE AGP 8x]"; + static const char pci_device_10de_0183[] = "NV18 [GeForce4 MX 420 AGP 8x]"; +-static const char pci_device_10de_0185[] = "NV18 [GeForce4 MX 4000 AGP 8x]"; ++static const char pci_device_10de_0184[] = "NV18 [GeForce4 MX]"; ++static const char pci_device_10de_0185[] = "NV18 [GeForce4 MX 4000]"; + static const char pci_device_10de_0186[] = "NV18M [GeForce4 448 Go]"; + static const char pci_device_10de_0187[] = "NV18M [GeForce4 488 Go]"; + static const char pci_device_10de_0188[] = "NV18GL [Quadro4 580 XGL]"; +-static const char pci_device_10de_018a[] = "NV18GL [Quadro4 NVS AGP 8x]"; ++static const char pci_device_10de_018a[] = "NV18GL [Quadro NVS with AGP8X]"; + static const char pci_device_10de_018b[] = "NV18GL [Quadro4 380 XGL]"; +-static const char pci_device_10de_018c[] = "Quadro NVS 50 PCI"; ++static const char pci_device_10de_018c[] = "NV18GL [Quadro NVS 50 PCI]"; + static const char pci_device_10de_018d[] = "NV18M [GeForce4 448 Go]"; ++static const char pci_device_10de_0191[] = "G80 [GeForce 8800 GTX]"; ++static const char pci_device_10de_0193[] = "G80 [GeForce 8800 GTS]"; ++static const char pci_device_10de_0194[] = "GeForce 8800 Ultra"; ++static const char pci_device_10de_019d[] = "G80 [Quadro FX 5600]"; ++static const char pci_device_10de_019e[] = "G80 [Quadro FX 4600]"; + static const char pci_device_10de_01a0[] = "NVCrush11 [GeForce2 MX Integrated Graphics]"; + static const char pci_device_10de_01a4[] = "nForce CPU bridge"; + static const char pci_device_10de_01ab[] = "nForce 420 Memory Controller (DDR)"; +@@ -8800,19 +9058,22 @@ static const char pci_device_10de_01bc[] + static const char pci_device_10de_01c1[] = "nForce AC'97 Modem Controller"; + static const char pci_device_10de_01c2[] = "nForce USB Controller"; + static const char pci_device_10de_01c3[] = "nForce Ethernet Controller"; +-static const char pci_device_10de_01d1[] = "GeForce 7300 LE"; ++static const char pci_device_10de_01d1[] = "G72 [GeForce 7300 LE]"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_01d1_1462_0345[] = "7300LE PCI Express Graphics Adapter"; + #endif ++static const char pci_device_10de_01d3[] = "G72 [GeForce 7300 SE]"; + static const char pci_device_10de_01d6[] = "GeForce Go 7200"; +-static const char pci_device_10de_01d7[] = "Quadro NVS 110M / GeForce Go 7300"; +-static const char pci_device_10de_01d8[] = "GeForce Go 7400"; +-static const char pci_device_10de_01da[] = "Quadro NVS 110M"; +-static const char pci_device_10de_01de[] = "Quadro FX 350"; ++static const char pci_device_10de_01d7[] = "G72M [Quadro NVS 110M/GeForce Go 7300]"; ++static const char pci_device_10de_01d8[] = "G72M [GeForce Go 7400]"; ++static const char pci_device_10de_01da[] = "G72M [Quadro NVS 110M]"; ++static const char pci_device_10de_01dc[] = "G72GL [Quadro FX 350M]"; ++static const char pci_device_10de_01dd[] = "G72 [GeForce 7500 LE]"; ++static const char pci_device_10de_01de[] = "G72GL [Quadro FX 350]"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_01de_10de_01dc[] = "Quadro FX Go350M"; + #endif +-static const char pci_device_10de_01df[] = "GeForce 7300 GS"; ++static const char pci_device_10de_01df[] = "G71 [GeForce 7300 GS]"; + static const char pci_device_10de_01e0[] = "nForce2 AGP (different version?)"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_01e0_147b_1c09[] = "NV7 Motherboard"; +@@ -8867,17 +9128,30 @@ static const char pci_device_10de_0212[] + static const char pci_device_10de_0215[] = "NV40 [GeForce 6800 GT]"; + static const char pci_device_10de_0218[] = "NV40 [GeForce 6800 XT]"; + static const char pci_device_10de_0221[] = "NV44A [GeForce 6200]"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_0221_3842_a341[] = "256A8N341DX"; ++#endif ++static const char pci_device_10de_0222[] = "GeForce 6200 A-LE"; + static const char pci_device_10de_0240[] = "C51PV [GeForce 6150]"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_0240_1043_81cd[] = "A8N-VM CSM"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_0240_1462_7207[] = "K8NGM2 series"; + #endif +-static const char pci_device_10de_0241[] = "C51 PCI Express Bridge"; ++static const char pci_device_10de_0241[] = "C51 [GeForce 6150 LE]"; + static const char pci_device_10de_0242[] = "C51G [GeForce 6100]"; + static const char pci_device_10de_0243[] = "C51 PCI Express Bridge"; +-static const char pci_device_10de_0244[] = "C51 PCI Express Bridge"; +-static const char pci_device_10de_0245[] = "C51 PCI Express Bridge"; ++static const char pci_device_10de_0244[] = "C51 [Geforce 6150 Go]"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_0244_10de_0244[] = "C51 [Geforce 6150 Go]"; ++#endif ++static const char pci_device_10de_0245[] = "C51 [Quadro NVS 210S/GeForce 6150LE]"; + static const char pci_device_10de_0246[] = "C51 PCI Express Bridge"; +-static const char pci_device_10de_0247[] = "C51 PCI Express Bridge"; ++static const char pci_device_10de_0247[] = "MCP51 PCI-X GeForce Go 6100"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_0247_1043_1382[] = "MCP51 PCI-X GeForce Go 6100"; ++#endif + static const char pci_device_10de_0248[] = "C51 PCI Express Bridge"; + static const char pci_device_10de_0249[] = "C51 PCI Express Bridge"; + static const char pci_device_10de_024a[] = "C51 PCI Express Bridge"; +@@ -8904,6 +9178,12 @@ static const char pci_device_10de_0259[] + static const char pci_device_10de_025b[] = "NV25GL [Quadro4 700 XGL]"; + static const char pci_device_10de_0260[] = "MCP51 LPC Bridge"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_0260_1043_81bc[] = "A8N-VM CSM Mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_0260_1458_5001[] = "GA-M55plus-S3G"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_0260_1462_7207[] = "K8NGM2 series"; + #endif + static const char pci_device_10de_0261[] = "MCP51 LPC Bridge"; +@@ -8911,52 +9191,94 @@ static const char pci_device_10de_0262[] + static const char pci_device_10de_0263[] = "MCP51 LPC Bridge"; + static const char pci_device_10de_0264[] = "MCP51 SMBus"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_0264_1043_81bc[] = "A8N-VM CSM Mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_0264_1462_7207[] = "K8NGM2 series"; + #endif + static const char pci_device_10de_0265[] = "MCP51 IDE"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_0265_1043_81bc[] = "A8N-VM CSM Mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_0265_1462_7207[] = "K8NGM2 series"; + #endif + static const char pci_device_10de_0266[] = "MCP51 Serial ATA Controller"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_0266_1043_81bc[] = "A8N-VM CSM Mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_0266_1462_7207[] = "K8NGM2 series"; + #endif + static const char pci_device_10de_0267[] = "MCP51 Serial ATA Controller"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_0267_1043_81bc[] = "A8N-VM CSM Mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_0267_1462_7207[] = "K8NGM2 series"; + #endif + static const char pci_device_10de_0268[] = "MCP51 Ethernet Controller"; + static const char pci_device_10de_0269[] = "MCP51 Ethernet Controller"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_0269_1043_8141[] = "A8N-VM CSM Mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_0269_1462_7207[] = "K8NGM2 series"; + #endif + static const char pci_device_10de_026a[] = "MCP51 MCI"; + static const char pci_device_10de_026b[] = "MCP51 AC97 Audio Controller"; + static const char pci_device_10de_026c[] = "MCP51 High Definition Audio"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_026c_10de_cb84[] = "A8N-VM CSM Mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_026c_1462_7207[] = "K8NGM2 series"; + #endif + static const char pci_device_10de_026d[] = "MCP51 USB Controller"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_026d_1043_81bc[] = "A8N-VM CSM Mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_026d_1462_7207[] = "K8NGM2 series"; + #endif + static const char pci_device_10de_026e[] = "MCP51 USB Controller"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_026e_1043_81bc[] = "A8N-VM CSM Mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_026e_1462_7207[] = "K8NGM2 series"; + #endif + static const char pci_device_10de_026f[] = "MCP51 PCI Bridge"; + static const char pci_device_10de_0270[] = "MCP51 Host Bridge"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_0270_1043_81bc[] = "A8N-VM CSM Mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_0270_1458_5001[] = "GA-M55plus-S3G"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_0270_1462_7207[] = "K8NGM2 series"; + #endif + static const char pci_device_10de_0271[] = "MCP51 PMU"; + static const char pci_device_10de_0272[] = "MCP51 Memory Controller 0"; + static const char pci_device_10de_027e[] = "C51 Memory Controller 2"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_027e_1043_81cd[] = "A8N-VM CSM Mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_027e_1458_5000[] = "GA-M55plus-S3G"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_027e_1462_7207[] = "K8NGM2 series"; + #endif + static const char pci_device_10de_027f[] = "C51 Memory Controller 3"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_027f_1043_81cd[] = "A8N-VM CSM Mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_027f_1458_5000[] = "GA-M55plus-S3G"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_027f_1462_7207[] = "K8NGM2 series"; + #endif + static const char pci_device_10de_0280[] = "NV28 [GeForce4 Ti 4800]"; +@@ -8965,25 +9287,43 @@ static const char pci_device_10de_0282[] + static const char pci_device_10de_0286[] = "NV28 [GeForce4 Ti 4200 Go AGP 8x]"; + static const char pci_device_10de_0288[] = "NV28GL [Quadro4 980 XGL]"; + static const char pci_device_10de_0289[] = "NV28GL [Quadro4 780 XGL]"; +-static const char pci_device_10de_028c[] = "NV28GLM [Quadro4 700 GoGL]"; +-static const char pci_device_10de_0290[] = "GeForce 7900 GTX"; +-static const char pci_device_10de_0291[] = "GeForce 7900 GT"; +-static const char pci_device_10de_0292[] = "GeForce 7900 GS"; ++static const char pci_device_10de_028c[] = "NV28GLM [Quadro4 Go700]"; ++static const char pci_device_10de_0290[] = "G71 [GeForce 7900 GTX]"; ++static const char pci_device_10de_0291[] = "G71 [GeForce 7900 GT/GTO]"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_0291_10de_042b[] = "NX7900GTO-T2D512E [7900 GTO]"; ++#endif ++static const char pci_device_10de_0292[] = "G71 [GeForce 7900 GS]"; ++static const char pci_device_10de_0293[] = "G71 [GeForce 7900 GX2]"; ++static const char pci_device_10de_0294[] = "G71 [GeForce 7950 GX2]"; ++static const char pci_device_10de_0295[] = "G71 [GeForce 7950 GT]"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_0295_107d_2a68[] = "WinFast PX7950GT TDH"; ++#endif ++static const char pci_device_10de_0297[] = "GeForce Go 7950 GTX"; + static const char pci_device_10de_0298[] = "GeForce Go 7900 GS"; + static const char pci_device_10de_0299[] = "GeForce Go 7900 GTX"; + static const char pci_device_10de_029a[] = "G71 [Quadro FX 2500M]"; + static const char pci_device_10de_029b[] = "G71 [Quadro FX 1500M]"; +-static const char pci_device_10de_029c[] = "Quadro FX 5500"; +-static const char pci_device_10de_029d[] = "Quadro FX 3500"; +-static const char pci_device_10de_029e[] = "Quadro FX 1500"; +-static const char pci_device_10de_029f[] = "Quadro FX 4500 X2"; ++static const char pci_device_10de_029c[] = "G71 [Quadro FX 5500]"; ++static const char pci_device_10de_029d[] = "G71GL [Quadro FX 3500]"; ++static const char pci_device_10de_029e[] = "G71 [Quadro FX 1500]"; ++static const char pci_device_10de_029f[] = "G70 [Quadro FX 4500 X2]"; + static const char pci_device_10de_02a0[] = "NV2A [XGPU]"; +-static const char pci_device_10de_02e1[] = "GeForce 7600 GS"; ++static const char pci_device_10de_02e0[] = "GeForce 7600 GT"; ++static const char pci_device_10de_02e1[] = "G73 [GeForce 7600 GS]"; ++static const char pci_device_10de_02e2[] = "GeForce 7300 GT"; + static const char pci_device_10de_02f0[] = "C51 Host Bridge"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_02f0_1043_81cd[] = "A8N-VM CSM Mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_02f0_1462_7207[] = "K8NGM2 series"; + #endif + static const char pci_device_10de_02f1[] = "C51 Host Bridge"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_02f1_1458_5000[] = "GA-M55plus-S3G"; ++#endif + static const char pci_device_10de_02f2[] = "C51 Host Bridge"; + static const char pci_device_10de_02f3[] = "C51 Host Bridge"; + static const char pci_device_10de_02f4[] = "C51 Host Bridge"; +@@ -8992,14 +9332,32 @@ static const char pci_device_10de_02f6[] + static const char pci_device_10de_02f7[] = "C51 Host Bridge"; + static const char pci_device_10de_02f8[] = "C51 Memory Controller 5"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_02f8_1043_81cd[] = "A8N-VM CSM Mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_02f8_1458_5000[] = "GA-M55plus-S3G"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_02f8_1462_7207[] = "K8NGM2 series"; + #endif + static const char pci_device_10de_02f9[] = "C51 Memory Controller 4"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_02f9_1043_81cd[] = "A8N-VM CSM Mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_02f9_1458_5000[] = "GA-M55plus-S3G"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_02f9_1462_7207[] = "K8NGM2 series"; + #endif + static const char pci_device_10de_02fa[] = "C51 Memory Controller 0"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_02fa_1043_81cd[] = "A8N-VM CSM Mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_02fa_1458_5000[] = "GA-M55plus-S3G"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_02fa_1462_7207[] = "K8NGM2 series"; + #endif + static const char pci_device_10de_02fb[] = "C51 PCI Express Bridge"; +@@ -9007,10 +9365,22 @@ static const char pci_device_10de_02fc[] + static const char pci_device_10de_02fd[] = "C51 PCI Express Bridge"; + static const char pci_device_10de_02fe[] = "C51 Memory Controller 1"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_02fe_1043_81cd[] = "A8N-VM CSM Mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_02fe_1458_5000[] = "GA-M55plus-S3G"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_02fe_1462_7207[] = "K8NGM2 series"; + #endif + static const char pci_device_10de_02ff[] = "C51 Host Bridge"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_02ff_1043_81cd[] = "A8N-VM CSM Mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_02ff_1458_5000[] = "GA-M55plus-S3G"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_02ff_1462_7207[] = "K8NGM2 series"; + #endif + static const char pci_device_10de_0300[] = "NV30 [GeForce FX]"; +@@ -9029,7 +9399,7 @@ static const char pci_device_10de_0316[] + static const char pci_device_10de_0317[] = "NV31M Pro"; + static const char pci_device_10de_031a[] = "NV31M [GeForce FX Go5600]"; + static const char pci_device_10de_031b[] = "NV31M [GeForce FX Go5650]"; +-static const char pci_device_10de_031c[] = "NVIDIA Quadro FX Go700"; ++static const char pci_device_10de_031c[] = "Quadro FX Go700"; + static const char pci_device_10de_031d[] = "NV31GLM"; + static const char pci_device_10de_031e[] = "NV31GLM Pro"; + static const char pci_device_10de_031f[] = "NV31GLM Pro"; +@@ -9037,13 +9407,16 @@ static const char pci_device_10de_0320[] + static const char pci_device_10de_0321[] = "NV34 [GeForce FX 5200 Ultra]"; + static const char pci_device_10de_0322[] = "NV34 [GeForce FX 5200]"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_0322_1043_02fb[] = "V9250 Magic"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_0322_1462_9171[] = "MS-8917 (FX5200-T128)"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_0322_1462_9360[] = "MS-8936 (FX5200-T128)"; + #endif + static const char pci_device_10de_0323[] = "NV34 [GeForce FX 5200LE]"; +-static const char pci_device_10de_0324[] = "NV34M [GeForce FX Go5200]"; ++static const char pci_device_10de_0324[] = "NV34M [GeForce FX Go5200 64M]"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_0324_1028_0196[] = "Inspiron 5160"; + #endif +@@ -9071,6 +9444,9 @@ static const char pci_device_10de_0334[] + static const char pci_device_10de_0338[] = "NV35GL [Quadro FX 3000]"; + static const char pci_device_10de_033f[] = "NV35GL [Quadro FX 700]"; + static const char pci_device_10de_0341[] = "NV36.1 [GeForce FX 5700 Ultra]"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_0341_1462_9380[] = "MS-8938 (FX5700U-TD128)"; ++#endif + static const char pci_device_10de_0342[] = "NV36.2 [GeForce FX 5700]"; + static const char pci_device_10de_0343[] = "NV36 [GeForce FX 5700LE]"; + static const char pci_device_10de_0344[] = "NV36.4 [GeForce FX 5700VE]"; +@@ -9110,16 +9486,31 @@ static const char pci_device_10de_0376[] + static const char pci_device_10de_0377[] = "MCP55 PCI Express bridge"; + static const char pci_device_10de_0378[] = "MCP55 PCI Express bridge"; + static const char pci_device_10de_037a[] = "MCP55 Memory Controller"; ++static const char pci_device_10de_037c[] = "G70 [GeForce 7800 GS] (rev a2)"; + static const char pci_device_10de_037e[] = "MCP55 SATA Controller"; + static const char pci_device_10de_037f[] = "MCP55 SATA Controller"; ++static const char pci_device_10de_0390[] = "GeForce 7650 GS"; + static const char pci_device_10de_0391[] = "G70 [GeForce 7600 GT]"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_0391_1458_3427[] = "GV-NX76T128D-RH"; ++#endif + static const char pci_device_10de_0392[] = "G70 [GeForce 7600 GS]"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10de_0392_1462_0622[] = "NX7600GS-T2D256EH"; + #endif + static const char pci_device_10de_0393[] = "G70 [GeForce 7300 GT]"; ++static const char pci_device_10de_0394[] = "G70 [GeForce 7600 LE]"; ++static const char pci_device_10de_0395[] = "G70 [GeForce 7300 GT]"; ++static const char pci_device_10de_0397[] = "GeForce Go 7700"; + static const char pci_device_10de_0398[] = "G70 [GeForce Go 7600]"; +-static const char pci_device_10de_039e[] = "Quadro FX 560"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10de_0398_1025_006c[] = "Acer 9814 WKMI"; ++#endif ++static const char pci_device_10de_0399[] = "GeForce Go 7600 GT"; ++static const char pci_device_10de_039a[] = "Quadro NVS 300M"; ++static const char pci_device_10de_039b[] = "GeForce Go 7900 SE"; ++static const char pci_device_10de_039c[] = "Quadro FX 550M"; ++static const char pci_device_10de_039e[] = "G73GL [Quadro FX 560]"; + static const char pci_device_10de_03a0[] = "C55 Host Bridge"; + static const char pci_device_10de_03a1[] = "C55 Host Bridge"; + static const char pci_device_10de_03a2[] = "C55 Host Bridge"; +@@ -9175,6 +9566,20 @@ static const char pci_device_10de_03f4[] + static const char pci_device_10de_03f5[] = "MCP61 Memory Controller"; + static const char pci_device_10de_03f6[] = "MCP61 SATA Controller"; + static const char pci_device_10de_03f7[] = "MCP61 SATA Controller"; ++static const char pci_device_10de_0400[] = "GeForce 8600 GTS"; ++static const char pci_device_10de_0402[] = "GeForce 8600 GT"; ++static const char pci_device_10de_0407[] = "GeForce 8600M GT"; ++static const char pci_device_10de_040b[] = "Quadro NVS 320M"; ++static const char pci_device_10de_0421[] = "GeForce 8500 GT"; ++static const char pci_device_10de_0422[] = "GeForce 8400 GS"; ++static const char pci_device_10de_0423[] = "GeForce 8300 GS"; ++static const char pci_device_10de_0425[] = "GeForce 8600M GS"; ++static const char pci_device_10de_0426[] = "GeForce 8400M GT"; ++static const char pci_device_10de_0427[] = "GeForce 8400M GS"; ++static const char pci_device_10de_0428[] = "GeForce 8400M G"; ++static const char pci_device_10de_0429[] = "Quadro NVS 140M"; ++static const char pci_device_10de_042a[] = "Quadro NVS 130M"; ++static const char pci_device_10de_042b[] = "Quadro NVS 135M"; + static const char pci_device_10de_0440[] = "MCP65 LPC Bridge"; + static const char pci_device_10de_0441[] = "MCP65 LPC Bridge"; + static const char pci_device_10de_0442[] = "MCP65 LPC Bridge"; +@@ -9206,9 +9611,14 @@ static const char pci_device_10de_045c[] + static const char pci_device_10de_045d[] = "MCP65 SATA Controller"; + static const char pci_device_10de_045e[] = "MCP65 SATA Controller"; + static const char pci_device_10de_045f[] = "MCP65 SATA Controller"; ++static const char pci_device_10de_055c[] = "MCP67 High Definition Audio"; ++static const char pci_device_10de_055d[] = "MCP67 High Definition Audio"; ++static const char pci_device_10de_c615[] = "G70 [GeForce 7600 GT]"; + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_10df[] = "Emulex Corporation"; + static const char pci_device_10df_1ae5[] = "LP6000 Fibre Channel Host Adapter"; ++static const char pci_device_10df_f011[] = "Saturn: LightPulse Fibre Channel Host Adapter"; ++static const char pci_device_10df_f015[] = "Saturn: LightPulse Fibre Channel Host Adapter"; + static const char pci_device_10df_f085[] = "LP850 Fibre Channel Host Adapter"; + static const char pci_device_10df_f095[] = "LP952 Fibre Channel Host Adapter"; + static const char pci_device_10df_f098[] = "LP982 Fibre Channel Host Adapter"; +@@ -9220,6 +9630,7 @@ static const char pci_device_10df_f0d5[] + static const char pci_device_10df_f0e1[] = "Zephyr LightPulse Fibre Channel Host Adapter"; + static const char pci_device_10df_f0e5[] = "Zephyr LightPulse Fibre Channel Host Adapter"; + static const char pci_device_10df_f0f5[] = "Neptune LightPulse Fibre Channel Host Adapter"; ++static const char pci_device_10df_f100[] = "Saturn-X: LightPulse Fibre Channel Host Adapter"; + static const char pci_device_10df_f700[] = "LP7000 Fibre Channel Host Adapter"; + static const char pci_device_10df_f701[] = "LP7000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2)"; + static const char pci_device_10df_f800[] = "LP8000 Fibre Channel Host Adapter"; +@@ -9234,6 +9645,7 @@ static const char pci_device_10df_fb00[] + static const char pci_device_10df_fc00[] = "Thor-X LightPulse Fibre Channel Host Adapter"; + static const char pci_device_10df_fc10[] = "Helios-X LightPulse Fibre Channel Host Adapter"; + static const char pci_device_10df_fc20[] = "Zephyr-X LightPulse Fibre Channel Host Adapter"; ++static const char pci_device_10df_fc40[] = "Saturn-X: LightPulse Fibre Channel Host Adapter"; + static const char pci_device_10df_fd00[] = "Helios-X LightPulse Fibre Channel Host Adapter"; + static const char pci_device_10df_fe00[] = "Zephyr-X LightPulse Fibre Channel Host Adapter"; + static const char pci_device_10df_ff00[] = "Neptune LightPulse Fibre Channel Host Adapter"; +@@ -9262,6 +9674,9 @@ static const char pci_vendor_10e3[] = "T + static const char pci_device_10e3_0000[] = "CA91C042 [Universe]"; + static const char pci_device_10e3_0108[] = "Tsi108 Host Bridge for Single PowerPC"; + static const char pci_device_10e3_0148[] = "Tsi148 [Tempe]"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10e3_0148_1775_1100[] = "VR11 Single Board Computer"; ++#endif + static const char pci_device_10e3_0860[] = "CA91C860 [QSpan]"; + static const char pci_device_10e3_0862[] = "CA91C862A [QSpan-II]"; + static const char pci_device_10e3_8260[] = "CA91L8200B [Dual PCI PowerSpan II]"; +@@ -9296,10 +9711,12 @@ static const char pci_device_10e8_809c[] + static const char pci_device_10e8_80d7[] = "PCI-9112"; + static const char pci_device_10e8_80d9[] = "PCI-9118"; + static const char pci_device_10e8_80da[] = "PCI-9812"; ++static const char pci_device_10e8_80fc[] = "APCI1500 Signal processing controller (16 dig. inputs + 16 dig. outputs)"; + static const char pci_device_10e8_811a[] = "PCI-IEEE1355-DS-DE Interface"; + static const char pci_device_10e8_814c[] = "Fastcom ESCC-PCI (Commtech, Inc.)"; + static const char pci_device_10e8_8170[] = "S5933 [Matchmaker] (Chipset Development Tool)"; + static const char pci_device_10e8_81e6[] = "Multimedia video controller"; ++static const char pci_device_10e8_828d[] = "APCI3001 Signal processing controller (up to 16 analog inputs)"; + static const char pci_device_10e8_8291[] = "Fastcom 232/8-PCI (Commtech, Inc.)"; + static const char pci_device_10e8_82c4[] = "Fastcom 422/4-PCI (Commtech, Inc.)"; + static const char pci_device_10e8_82c5[] = "Fastcom 422/2-PCI (Commtech, Inc.)"; +@@ -9308,6 +9725,8 @@ static const char pci_device_10e8_82c7[] + static const char pci_device_10e8_82ca[] = "Fastcom 232/4-PCI (Commtech, Inc.)"; + static const char pci_device_10e8_82db[] = "AJA HDNTV HD SDI Framestore"; + static const char pci_device_10e8_82e2[] = "Fastcom DIO24H-PCI (Commtech, Inc.)"; ++static const char pci_device_10e8_8406[] = "PCIcanx/PCIcan CAN interface [Kvaser AB]"; ++static const char pci_device_10e8_8407[] = "PCIcan II CAN interface (A1021, PCB-07, PCB-08) [Kvaser AB]"; + static const char pci_device_10e8_8851[] = "S5933 on Innes Corp FM Radio Capture card"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -9331,12 +9750,19 @@ static const char pci_device_10eb_8111[] + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_10ec[] = "Realtek Semiconductor Co., Ltd."; + static const char pci_device_10ec_0139[] = "Zonet Zen3200"; +-static const char pci_device_10ec_0883[] = "High Definition Audio"; ++static const char pci_device_10ec_0260[] = "Realtek 260 High Definition Audio"; ++static const char pci_device_10ec_0261[] = "Realtek 261 High Definition Audio"; ++static const char pci_device_10ec_0280[] = "Realtek 280 High Definition Audio"; ++static const char pci_device_10ec_0861[] = "Realtek 861 High Definition Audio"; ++static const char pci_device_10ec_0862[] = "Realtek 862 High Definition Audio"; ++static const char pci_device_10ec_0880[] = "Realtek 880 High Definition Audio"; ++static const char pci_device_10ec_0883[] = "Realtek 883 High Definition Audio"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10ec_0883_1025_1605[] = "TravelMate 5600 series"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const char pci_device_10ec_0888[] = "Realtek 888 High Definition Audio"; + static const char pci_device_10ec_8029[] = "RTL-8029(AS)"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10ec_8029_10b8_2011[] = "EZ-Card (SMC1208)"; +@@ -9387,6 +9813,9 @@ static const char pci_subsys_10ec_8139_1 + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10ec_8139_1043_1045[] = "L8400B or L3C/S notebook"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10ec_8139_1043_8109[] = "P5P800-MX Mainboard"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -9399,6 +9828,9 @@ static const char pci_subsys_10ec_8139_1 + static const char pci_subsys_10ec_8139_10ec_8139[] = "RT8139"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10ec_8139_10f7_8338[] = "Panasonic CF-Y5 laptop"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10ec_8139_1113_ec01[] = "FNC-0107TX"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -9429,6 +9861,9 @@ static const char pci_subsys_10ec_8139_1 + static const char pci_subsys_10ec_8139_1436_8139[] = "RT8139"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10ec_8139_144d_c00c[] = "P30/P35 notebook"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10ec_8139_1458_e000[] = "GA-7VM400M/7VT600 Motherboard"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -9453,6 +9888,9 @@ static const char pci_subsys_10ec_8139_1 + static const char pci_subsys_10ec_8139_14cb_0200[] = "LNR-100 Family 10/100 Base-TX Ethernet"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10ec_8139_1565_2300[] = "P4TSV Onboard LAN (RTL8100B)"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10ec_8139_1695_9001[] = "Onboard RTL8101L 10/100 MBit"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -9473,7 +9911,10 @@ static const char pci_subsys_10ec_8139_8 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10ec_8139_a0a0_0007[] = "ALN-325C"; + #endif +-static const char pci_device_10ec_8167[] = "RTL-8169SC Gigabit Ethernet"; ++static const char pci_device_10ec_8167[] = "RTL-8110SC/8169SC Gigabit Ethernet"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10ec_8167_1462_235c[] = "P965 Neo MS-7235 mainboard"; ++#endif + static const char pci_device_10ec_8168[] = "RTL8111/8168B PCI Express Gigabit Ethernet controller"; + static const char pci_device_10ec_8169[] = "RTL-8169 Gigabit Ethernet"; + #endif +@@ -9491,8 +9932,20 @@ static const char pci_subsys_10ec_8169_1 + static const char pci_subsys_10ec_8169_1458_e000[] = "GA-8I915ME-G Mainboard"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10ec_8169_1462_030c[] = "K8N Neo-FSR v2.0 mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_10ec_8169_1462_702c[] = "K8T NEO 2 motherboard"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10ec_8169_1462_7094[] = "K8T Neo2-F V2.0"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10ec_8169_1734_1091[] = "D2030-A1"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_10ec_8169_a0a0_0449[] = "AK86-L motherboard"; ++#endif + static const char pci_device_10ec_8180[] = "RTL8180L 802.11b MAC"; + static const char pci_device_10ec_8185[] = "RTL-8185 IEEE 802.11a/b/g Wireless LAN Controller"; + static const char pci_device_10ec_8197[] = "SmartLAN56 56K Modem"; +@@ -9515,6 +9968,7 @@ static const char pci_device_10ee_3fc3[] + static const char pci_device_10ee_3fc4[] = "RME Digi9652 (Hammerfall)"; + static const char pci_device_10ee_3fc5[] = "RME Hammerfall DSP"; + static const char pci_device_10ee_3fc6[] = "RME Hammerfall DSP MADI"; ++static const char pci_device_10ee_8380[] = "Ellips ProfiXpress Profibus Master"; + static const char pci_device_10ee_8381[] = "Ellips Santos Frame Grabber"; + static const char pci_device_10ee_d154[] = "Copley Controls CAN card (PCI-CAN-02)"; + #endif +@@ -9660,11 +10114,17 @@ static const char pci_subsys_1102_0004_1 + static const char pci_subsys_1102_0004_1102_0058[] = "SB0090 Audigy Player/OEM"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1102_0004_1102_1002[] = "SB Audigy2 ZS"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1102_0004_1102_1007[] = "SB0240 Audigy 2 Platinum 6.1"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1102_0004_1102_2002[] = "SB Audigy 2 ZS (SB0350)"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1102_0004_1102_4001[] = "E-MU 1010"; ++#endif + static const char pci_device_1102_0005[] = "SB X-Fi"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1102_0005_1102_0021[] = "X-Fi Platinum"; +@@ -9771,16 +10231,23 @@ static const char pci_device_1103_0004[] + static const char pci_subsys_1103_0004_1103_0001[] = "HPT370A"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1103_0004_1103_0003[] = "HPT343 / HPT345 / HPT363 UDMA33"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1103_0004_1103_0004[] = "HPT366 UDMA66 (r1) / HPT368 UDMA66 (r2) / HPT370 UDMA100 (r3) / HPT370 UDMA100 RAID (r4)"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1103_0004_1103_0005[] = "HPT370 UDMA100"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1103_0004_1103_0006[] = "HPT302/302N"; ++#endif + static const char pci_device_1103_0005[] = "HPT372A/372N"; + static const char pci_device_1103_0006[] = "HPT302/302N"; + static const char pci_device_1103_0007[] = "HPT371/371N"; + static const char pci_device_1103_0008[] = "HPT374"; + static const char pci_device_1103_0009[] = "HPT372N"; ++static const char pci_device_1103_2340[] = "RocketRAID 2340 16 Port SATA-II Controller"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1104[] = "RasterOps Corp."; +@@ -9808,6 +10275,7 @@ static const char pci_device_1105_8486[] + static const char pci_vendor_1106[] = "VIA Technologies, Inc."; + static const char pci_device_1106_0102[] = "Embedded VIA Ethernet Controller"; + static const char pci_device_1106_0130[] = "VT6305 1394.A Controller"; ++static const char pci_device_1106_0198[] = "P4X600 Host Bridge"; + static const char pci_device_1106_0204[] = "K8M800 Host Bridge"; + static const char pci_device_1106_0208[] = "PT890 Host Bridge"; + static const char pci_device_1106_0238[] = "K8T890 Host Bridge"; +@@ -9845,6 +10313,9 @@ static const char pci_device_1106_0336[] + static const char pci_device_1106_0340[] = "PT900 Host Bridge"; + static const char pci_device_1106_0351[] = "VT3351 Host Bridge"; + static const char pci_device_1106_0364[] = "P4M900 Host Bridge"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1106_0364_1043_81ce[] = "P5VD2-VM mothervoard"; ++#endif + static const char pci_device_1106_0391[] = "VT8371 [KX133]"; + static const char pci_device_1106_0501[] = "VT8501 [Apollo MVP4]"; + static const char pci_device_1106_0505[] = "VT82C505"; +@@ -9884,6 +10355,12 @@ static const char pci_subsys_1106_0571_1 + static const char pci_subsys_1106_0571_1462_7020[] = "K8T NEO 2 motherboard"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1106_0571_1462_7094[] = "K8T Neo2-F V2.0"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1106_0571_1462_7181[] = "K8MM3-V mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1106_0571_147b_1407[] = "KV8-MAX3 motherboard"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -9978,6 +10455,7 @@ static const char pci_device_1106_1351[] + static const char pci_device_1106_1364[] = "P4M900 Host Bridge"; + static const char pci_device_1106_1571[] = "VT82C576M/VT82C586"; + static const char pci_device_1106_1595[] = "VT82C595/97 [Apollo VP2/97]"; ++static const char pci_device_1106_2106[] = "VIA Rhine Family Fast Ethernet Adapter (VT6105)"; + static const char pci_device_1106_2204[] = "K8M800 Host Bridge"; + static const char pci_device_1106_2208[] = "PT890 Host Bridge"; + static const char pci_device_1106_2238[] = "K8T890 Host Bridge"; +@@ -10034,6 +10512,12 @@ static const char pci_subsys_1106_3038_1 + static const char pci_subsys_1106_3038_1462_7020[] = "K8T NEO 2 motherboard"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1106_3038_1462_7094[] = "K8T Neo2-F V2.0"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1106_3038_1462_7181[] = "K8MM3-V mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1106_3038_147b_1407[] = "KV8-MAX3 motherboard"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -10054,13 +10538,16 @@ static const char pci_subsys_1106_3043_1 + static const char pci_subsys_1106_3043_1186_1400[] = "DFE-530TX rev A"; + #endif + static const char pci_device_1106_3044[] = "IEEE 1394 Host Controller"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1106_3044_0010_0001[] = "IEEE 1394 4port DCST 1394-3+1B"; ++#endif + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1106_3044_1025_005a[] = "TravelMate 290"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_1106_3044_1043_808a[] = "A8V Deluxe"; ++static const char pci_subsys_1106_3044_1043_808a[] = "A8V Deluxe or A8N-VM CSM Mainboard"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1106_3044_1458_1000[] = "GA-7VT600-1394 Motherboard"; +@@ -10151,6 +10638,9 @@ static const char pci_subsys_1106_3059_1 + static const char pci_subsys_1106_3059_1043_812a[] = "A8V Deluxe motherboard (Realtek ALC850 codec)"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1106_3059_10ec_8168[] = "High Definition Audio"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1106_3059_1106_3059[] = "L7VMM2 Motherboard"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -10166,6 +10656,9 @@ static const char pci_subsys_1106_3059_1 + static const char pci_subsys_1106_3059_1297_c160[] = "FX41 motherboard (Realtek ALC650 codec)"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1106_3059_1413_147b[] = "KV8 Pro motherboard onboard audio"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1106_3059_1458_a002[] = "GA-7VAX Onboard Audio (Realtek ALC650)"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -10175,9 +10668,15 @@ static const char pci_subsys_1106_3059_1 + static const char pci_subsys_1106_3059_1462_3800[] = "KT266 onboard audio"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1106_3059_1462_7181[] = "K8MM3-V mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1106_3059_147b_1407[] = "KV8-MAX3 motherboard"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1106_3059_1849_0850[] = "ASRock 775Dual-880 Pro onboard audio (Realtek ALC850)"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1106_3059_1849_9761[] = "K7VT6 motherboard"; + #endif + #endif +@@ -10188,6 +10687,9 @@ static const char pci_subsys_1106_3059_4 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1106_3059_a0a0_01b6[] = "AK77-8XN onboard audio"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1106_3059_a0a0_0342[] = "AK86-L motherboard"; ++#endif + static const char pci_device_1106_3065[] = "VT6102 [Rhine-II]"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1106_3065_1043_80a1[] = "A7V8X-X Motherboard"; +@@ -10205,6 +10707,9 @@ static const char pci_subsys_1106_3065_1 + static const char pci_subsys_1106_3065_13b9_1421[] = "LD-10/100AL PCI Fast Ethernet Adapter (rev.B)"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1106_3065_1462_7181[] = "K8MM3-V mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1106_3065_147b_1c09[] = "NV7 Motherboard"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -10261,6 +10766,12 @@ static const char pci_subsys_1106_3104_1 + static const char pci_subsys_1106_3104_1462_7020[] = "K8T NEO 2 motherboard"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1106_3104_1462_7094[] = "K8T Neo2-F V2.0"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1106_3104_1462_7181[] = "K8MM3-V mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1106_3104_147b_1407[] = "KV8-MAX3 motherboard"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -10303,6 +10814,9 @@ static const char pci_subsys_1106_3149_1 + static const char pci_subsys_1106_3149_1462_7020[] = "K8T Neo 2 Motherboard"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1106_3149_1462_7094[] = "K8T Neo2-F V2.0"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1106_3149_147b_1407[] = "KV8-MAX3 motherboard"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -10311,7 +10825,11 @@ static const char pci_subsys_1106_3149_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1106_3149_1849_3149[] = "K7VT6 motherboard"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1106_3149_a0a0_04ad[] = "AK86-L motherboard"; ++#endif + static const char pci_device_1106_3156[] = "P/KN266 Host Bridge"; ++static const char pci_device_1106_3157[] = "CX700M2 UniChrome PRO II Graphics"; + static const char pci_device_1106_3164[] = "VT6410 ATA133 RAID controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1106_3164_1043_80f4[] = "P4P800 Mainboard Deluxe ATX"; +@@ -10370,7 +10888,7 @@ static const char pci_device_1106_3227[] + static const char pci_subsys_1106_3227_1043_80ed[] = "A7V600/K8V-X/A8V Deluxe motherboard"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_1106_3227_1106_3227[] = "DFI KT600-AL Motherboard"; ++static const char pci_subsys_1106_3227_1106_3227[] = "DFI KT600-AL / Soltek SL-B9D-FGR Motherboard"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1106_3227_1458_5001[] = "GA-7VT600 Motherboard"; +@@ -10381,6 +10899,7 @@ static const char pci_subsys_1106_3227_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1106_3227_1849_3227[] = "K7VT4 motherboard"; + #endif ++static const char pci_device_1106_3230[] = "K8M890 [Chrome9] Integrated Video"; + static const char pci_device_1106_3238[] = "K8T890 Host Bridge"; + static const char pci_device_1106_3249[] = "VT6421 IDE RAID Controller"; + static const char pci_device_1106_324a[] = "CX700 PCI to PCI Bridge"; +@@ -10388,6 +10907,7 @@ static const char pci_device_1106_324b[] + static const char pci_device_1106_324e[] = "CX700 Internal Module Bus"; + static const char pci_device_1106_3258[] = "PT880 Host Bridge"; + static const char pci_device_1106_3259[] = "CN400/PM880 Host Bridge"; ++static const char pci_device_1106_3260[] = "VIA Chrome9 HC IGP"; + static const char pci_device_1106_3269[] = "KT880 Host Bridge"; + static const char pci_device_1106_3282[] = "K8T800Pro Host Bridge"; + static const char pci_device_1106_3287[] = "VT8251 PCI to ISA Bridge"; +@@ -10399,10 +10919,13 @@ static const char pci_device_1106_3327[] + static const char pci_device_1106_3336[] = "K8M890CE Host Bridge"; + static const char pci_device_1106_3337[] = "VT8237A PCI to ISA Bridge"; + static const char pci_device_1106_3340[] = "PT900 Host Bridge"; ++static const char pci_device_1106_3343[] = "UniChrome Pro IGP [VIA P4M890 Chipset]"; + static const char pci_device_1106_3344[] = "UniChrome Pro IGP"; + static const char pci_device_1106_3349[] = "VT8251 AHCI/SATA 4-Port Controller"; + static const char pci_device_1106_3351[] = "VT3351 Host Bridge"; + static const char pci_device_1106_3364[] = "P4M900 Host Bridge"; ++static const char pci_device_1106_3371[] = "Chrome9 HC IGP"; ++static const char pci_device_1106_3372[] = "VT8237S PCI to ISA Bridge"; + static const char pci_device_1106_337a[] = "VT8237A PCI to PCI Bridge"; + static const char pci_device_1106_337b[] = "VT8237A Host Bridge"; + static const char pci_device_1106_4149[] = "VIA VT6420 (ATA133) Controller"; +@@ -10429,13 +10952,16 @@ static const char pci_device_1106_5208[] + static const char pci_device_1106_5238[] = "K8T890 I/O APIC Interrupt Controller"; + static const char pci_device_1106_5290[] = "K8M890 I/O APIC Interrupt Controller"; + static const char pci_device_1106_5308[] = "PT894 I/O APIC Interrupt Controller"; ++static const char pci_device_1106_5324[] = "CX700M2 IDE"; + static const char pci_device_1106_5327[] = "P4M890 I/O APIC Interrupt Controller"; + static const char pci_device_1106_5336[] = "K8M890CE I/O APIC Interrupt Controller"; + static const char pci_device_1106_5340[] = "PT900 I/O APIC Interrupt Controller"; + static const char pci_device_1106_5351[] = "VT3351 I/O APIC Interrupt Controller"; + static const char pci_device_1106_5364[] = "P4M900 I/O APIC Interrupt Controller"; + static const char pci_device_1106_6100[] = "VT85C100A [Rhine II]"; ++static const char pci_device_1106_6287[] = "SATA RAID Controller"; + static const char pci_device_1106_6327[] = "P4M890 Security Device"; ++static const char pci_device_1106_6364[] = "P4M900 Security Device"; + static const char pci_device_1106_7204[] = "K8M800 Host Bridge"; + static const char pci_device_1106_7205[] = "VT8378 [S3 UniChrome] Integrated Video"; + #ifdef INIT_SUBSYS_INFO +@@ -10649,11 +11175,7 @@ static const char pci_device_1119_0009[] + static const char pci_device_1119_000a[] = "GDT 6115/6515"; + static const char pci_device_1119_000b[] = "GDT 6125/6525"; + static const char pci_device_1119_000c[] = "GDT 6535"; +-static const char pci_device_1119_000d[] = "GDT 6555"; +-static const char pci_device_1119_0010[] = "GDT 6115/6515"; +-static const char pci_device_1119_0011[] = "GDT 6125/6525"; +-static const char pci_device_1119_0012[] = "GDT 6535"; +-static const char pci_device_1119_0013[] = "GDT 6555/6555-ECC"; ++static const char pci_device_1119_000d[] = "GDT 6555/6555-ECC"; + static const char pci_device_1119_0100[] = "GDT 6117RP/6517RP"; + static const char pci_device_1119_0101[] = "GDT 6127RP/6527RP"; + static const char pci_device_1119_0102[] = "GDT 6537RP"; +@@ -10710,6 +11232,7 @@ static const char pci_device_1119_0260[] + static const char pci_device_1119_0261[] = "GDT 7529RN/7629RN"; + static const char pci_device_1119_02ff[] = "GDT MAXRP"; + static const char pci_device_1119_0300[] = "GDT NEWRX"; ++static const char pci_device_1119_0301[] = "GDT NEWRX2"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_111a[] = "Efficient Networks, Inc"; +@@ -10833,7 +11356,13 @@ static const char pci_vendor_1130[] = "C + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1131[] = "Philips Semiconductors"; + static const char pci_device_1131_1561[] = "USB 1.1 Host Controller"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1131_1561_1775_c200[] = "C2K onboard USB 1.1 host controller"; ++#endif + static const char pci_device_1131_1562[] = "USB 2.0 Host Controller"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1131_1562_1775_c200[] = "C2K onboard USB 2.0 host controller"; ++#endif + static const char pci_device_1131_3400[] = "SmartPCI56(UCB1500) 56K Modem"; + static const char pci_device_1131_5400[] = "TriMedia TM1000/1100"; + static const char pci_device_1131_5402[] = "TriMedia TM-1300"; +@@ -10901,6 +11430,9 @@ static const char pci_subsys_1131_7133_1 + static const char pci_subsys_1131_7133_1043_4862[] = "P7131 Dual"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1131_7133_1131_0000[] = "KWorld V-Stream Studio TV Terminator"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1131_7133_1131_2001[] = "Proteus Pro [philips reference design]"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -10934,6 +11466,9 @@ static const char pci_subsys_1131_7133_1 + static const char pci_subsys_1131_7133_1461_1044[] = "AVerTVHD MCE A180"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1131_7133_1461_a14b[] = "AVerTV Studio 509"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1131_7133_1461_f31f[] = "Avermedia AVerTV GO 007 FM"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -10952,9 +11487,15 @@ static const char pci_subsys_1131_7133_1 + static const char pci_subsys_1131_7133_153b_1162[] = "Terratec Cinergy 400 mobile"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1131_7133_17de_7350[] = "ATSC 110 Digital / Analog HDTV Tuner"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1131_7133_185b_c100[] = "VideoMate TV"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1131_7133_185b_c900[] = "VideoMate T750"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1131_7133_5168_0306[] = "LifeView FlyDVB-T DUO"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -11129,17 +11670,29 @@ static const char pci_subsys_1131_7146_1 + static const char pci_subsys_1131_7146_13c2_1011[] = "Technotrend-Budget/Hauppauge WinTV-NOVA-T DVB card"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1131_7146_13c2_1012[] = "DVB T-1500"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1131_7146_13c2_1013[] = "SATELCO Multimedia DVB"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1131_7146_13c2_1016[] = "WinTV-NOVA-SE DVB card"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1131_7146_13c2_1018[] = "DVB S-1401"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1131_7146_13c2_1019[] = "S2-3200"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1131_7146_13c2_1102[] = "Technotrend/Hauppauge DVB card rev2.1"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1131_7146_153b_1156[] = "Terratec Cynergy 1200C"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1131_7146_1894_0020[] = "KNC One DVB-C V1.0"; ++#endif + static const char pci_device_1131_9730[] = "SAA9730 Integrated Multimedia and Peripheral Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1131_9730_1131_0000[] = "Integrated Multimedia and Peripheral Controller"; +@@ -11270,6 +11823,7 @@ static const char pci_subsys_1133_e028_1 + #endif + static const char pci_device_1133_e02a[] = "Diva Server IPM-300"; + static const char pci_device_1133_e02c[] = "Diva Server IPM-600"; ++static const char pci_device_1133_e032[] = "Diva BRI-2 PCIe r1"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1134[] = "Mercury Computer Systems"; +@@ -11591,6 +12145,7 @@ static const char pci_device_114f_000c[] + static const char pci_device_114f_000d[] = "SyncPort 2-Port (x.25/FR)"; + static const char pci_device_114f_0011[] = "AccelePort 8r EIA-232 (IBM)"; + static const char pci_device_114f_0012[] = "AccelePort 8r EIA-422"; ++static const char pci_device_114f_0013[] = "AccelePort Xr"; + static const char pci_device_114f_0014[] = "AccelePort 8r EIA-422"; + static const char pci_device_114f_0015[] = "AccelePort Xem"; + static const char pci_device_114f_0016[] = "AccelePort EPC/X"; +@@ -11830,13 +12385,13 @@ static const char pci_device_1166_0014[] + static const char pci_device_1166_0015[] = "CMIC-GC Host Bridge"; + static const char pci_device_1166_0016[] = "CMIC-GC Host Bridge"; + static const char pci_device_1166_0017[] = "GCNB-LE Host Bridge"; +-static const char pci_device_1166_0036[] = "HT1000 PCI/PCI-X bridge"; ++static const char pci_device_1166_0036[] = "BCM5785 [HT1000] PCI/PCI-X Bridge"; + static const char pci_device_1166_0101[] = "CIOB-X2 PCI-X I/O Bridge"; + static const char pci_device_1166_0103[] = "EPB PCI-Express to PCI-X Bridge"; +-static const char pci_device_1166_0104[] = "HT1000 PCI/PCI-X bridge"; ++static const char pci_device_1166_0104[] = "BCM5785 [HT1000] PCI/PCI-X Bridge"; + static const char pci_device_1166_0110[] = "CIOB-E I/O Bridge with Gigabit Ethernet"; +-static const char pci_device_1166_0130[] = "HT2000 PCI-X bridge"; +-static const char pci_device_1166_0132[] = "HT2000 PCI-Express bridge"; ++static const char pci_device_1166_0130[] = "BCM5780 [HT2000] PCI-X bridge"; ++static const char pci_device_1166_0132[] = "BCM5780 [HT2000] PCI-Express Bridge"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1166_0132_1166_0132[] = "HT2000 PCI-Express bridge"; + #endif +@@ -11853,9 +12408,14 @@ static const char pci_device_1166_0203[] + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1166_0203_1734_1012[] = "Primergy RX300"; + #endif +-static const char pci_device_1166_0205[] = "HT1000 Legacy South Bridge"; ++static const char pci_device_1166_0205[] = "BCM5785 [HT1000] Legacy South Bridge"; + static const char pci_device_1166_0211[] = "OSB4 IDE Controller"; + static const char pci_device_1166_0212[] = "CSB5 IDE Controller"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1166_0212_1028_810b[] = "PowerEdge 2550"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1166_0212_4c53_1080[] = "CT8 mainboard"; + #endif +@@ -11873,7 +12433,7 @@ static const char pci_subsys_1166_0213_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1166_0213_1734_1012[] = "Primergy RX300"; + #endif +-static const char pci_device_1166_0214[] = "HT1000 Legacy IDE controller"; ++static const char pci_device_1166_0214[] = "BCM5785 [HT1000] IDE"; + static const char pci_device_1166_0217[] = "CSB6 IDE Controller"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -11888,7 +12448,7 @@ static const char pci_device_1166_0221[] + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1166_0221_1734_1012[] = "Primergy RX300"; + #endif +-static const char pci_device_1166_0223[] = "HT1000 USB Controller"; ++static const char pci_device_1166_0223[] = "BCM5785 [HT1000] USB"; + static const char pci_device_1166_0225[] = "CSB5 LPC bridge"; + static const char pci_device_1166_0227[] = "GCLE-2 Host Bridge"; + #ifdef INIT_SUBSYS_INFO +@@ -11898,12 +12458,14 @@ static const char pci_device_1166_0230[] + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1166_0230_4c53_1080[] = "CT8 mainboard"; + #endif +-static const char pci_device_1166_0234[] = "HT1000 LPC Bridge"; ++static const char pci_device_1166_0234[] = "BCM5785 [HT1000] LPC"; ++static const char pci_device_1166_0235[] = "BCM5785 [HT1000] XIOAPIC0-2"; ++static const char pci_device_1166_0238[] = "BCM5785 [HT1000] WDTimer"; + static const char pci_device_1166_0240[] = "K2 SATA"; + static const char pci_device_1166_0241[] = "RAIDCore RC4000"; + static const char pci_device_1166_0242[] = "RAIDCore BC4000"; +-static const char pci_device_1166_024a[] = "BCM5785 (HT1000) SATA Native SATA Mode"; +-static const char pci_device_1166_024b[] = "BCM5785 (HT1000) PATA/IDE Mode"; ++static const char pci_device_1166_024a[] = "BCM5785 [HT1000] SATA (Native SATA Mode)"; ++static const char pci_device_1166_024b[] = "BCM5785 [HT1000] SATA (PATA/IDE Mode)"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1167[] = "Mutoh Industries Inc"; +@@ -12030,6 +12592,11 @@ static const char pci_subsys_1180_0476_1 + #endif + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1180_0476_1028_014f[] = "Latitude X300 laptop"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1180_0476_1028_0188[] = "Inspiron 6000 laptop"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -12049,8 +12616,16 @@ static const char pci_subsys_1180_0476_1 + static const char pci_subsys_1180_0476_104d_80e7[] = "VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1180_0476_104d_814e[] = "VAIO GRZ390Z"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1180_0476_10f7_8338[] = "Panasonic CF-Y5 laptop"; ++#endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_1180_0476_144d_c00c[] = "P35 notebook"; ++static const char pci_subsys_1180_0476_144d_c00c[] = "P30/P35 notebook"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1180_0476_14ef_0220[] = "PCD-RP-220S"; +@@ -12081,11 +12656,16 @@ static const char pci_subsys_1180_0552_1 + #endif + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1180_0552_1028_014f[] = "Latitude X300 laptop"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1180_0552_1028_0188[] = "Inspiron 6000 laptop"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_1180_0552_144d_c00c[] = "P35 notebook"; ++static const char pci_subsys_1180_0552_144d_c00c[] = "P30/P35 notebook"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1180_0552_17aa_201e[] = "Thinkpad X60s"; +@@ -12122,11 +12702,15 @@ static const char pci_subsys_1180_0822_1 + static const char pci_subsys_1180_0822_1043_1967[] = "ASUS V6800V"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1180_0822_10f7_8338[] = "Panasonic CF-Y5 laptop"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1180_0822_144d_c018[] = "X20 IV"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1180_0822_17aa_201d[] = "Thinkpad X60s"; + #endif ++static const char pci_device_1180_0832[] = "R5C832 IEEE 1394 Controller"; + static const char pci_device_1180_0841[] = "R5C841 CardBus/SD/SDIO/MMC/MS/MSPro/xD/IEEE1394"; + static const char pci_device_1180_0852[] = "xD-Picture Card Controller"; + #ifdef INIT_SUBSYS_INFO +@@ -12150,7 +12734,7 @@ static const char pci_vendor_1186[] = "D + static const char pci_device_1186_0100[] = "DC21041"; + static const char pci_device_1186_1002[] = "DL10050 Sundance Ethernet"; + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_1186_1002_1186_1002[] = "DFE-550TX"; ++static const char pci_subsys_1186_1002_1186_1002[] = "DFE-550TX/FX"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1186_1002_1186_1012[] = "DFE-580TX"; +@@ -12351,6 +12935,8 @@ static const char pci_vendor_11aa[] = "A + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_11ab[] = "Marvell Technology Group Ltd."; + static const char pci_device_11ab_0146[] = "GT-64010/64010A System Controller"; ++static const char pci_device_11ab_0f53[] = "88E6318 Link Street network controller"; ++static const char pci_device_11ab_11ab[] = "MV88SE614x SATA II PCI-E controller"; + static const char pci_device_11ab_138f[] = "W8300 802.11 Adapter (rev 07)"; + static const char pci_device_11ab_1fa6[] = "Marvell W8300 802.11 Adapter"; + static const char pci_device_11ab_1fa7[] = "88W8310 and 88W8000G [Libertas] 802.11g client chipset"; +@@ -12358,6 +12944,7 @@ static const char pci_device_11ab_1faa[] + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_11ab_1faa_1385_4e00[] = "WG511 v2 54MBit/ Wireless PC-Card"; + #endif ++static const char pci_device_11ab_2a01[] = "88W8335 [Libertas] 802.11b/g Wireless"; + static const char pci_device_11ab_4320[] = "88E8001 Gigabit Ethernet Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_11ab_4320_1019_0f38[] = "Marvell 88E8001 Gigabit Ethernet Controller (ECS)"; +@@ -12421,6 +13008,9 @@ static const char pci_device_11ab_4344[] + static const char pci_device_11ab_4345[] = "88E8022 PCI-X IPMI Gigabit Ethernet Controller"; + static const char pci_device_11ab_4346[] = "88E8061 PCI-E IPMI Gigabit Ethernet Controller"; + static const char pci_device_11ab_4347[] = "88E8062 PCI-E IPMI Gigabit Ethernet Controller"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_11ab_4347_4c53_10d0[] = "Telum ASLP10 PrAMC Gigabit Ethernet"; ++#endif + static const char pci_device_11ab_4350[] = "88E8035 PCI-E Fast Ethernet Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_11ab_4350_1179_0001[] = "Marvell 88E8035 Fast Ethernet Controller (Toshiba)"; +@@ -12689,6 +13279,7 @@ static const char pci_subsys_11ab_4362_2 + static const char pci_subsys_11ab_4362_a0a0_0506[] = "Marvell 88E8053 Gigabit Ethernet Controller (Aopen)"; + #endif + static const char pci_device_11ab_4363[] = "88E8055 PCI-E Gigabit Ethernet Controller"; ++static const char pci_device_11ab_4364[] = "88E8056 PCI-E Gigabit Ethernet Controller"; + static const char pci_device_11ab_4611[] = "GT-64115 System Controller"; + static const char pci_device_11ab_4620[] = "GT-64120/64120A/64121A System Controller"; + static const char pci_device_11ab_4801[] = "GT-48001"; +@@ -12699,8 +13290,15 @@ static const char pci_device_11ab_5080[] + static const char pci_device_11ab_5081[] = "MV88SX5081 8-port SATA I PCI-X Controller"; + static const char pci_device_11ab_6041[] = "MV88SX6041 4-port SATA II PCI-X Controller"; + static const char pci_device_11ab_6081[] = "MV88SX6081 8-port SATA II PCI-X Controller"; ++static const char pci_device_11ab_6101[] = "88SE6101 single-port PATA133 interface"; ++static const char pci_device_11ab_6141[] = "88SE614x SATA II PCI-E controller"; ++static const char pci_device_11ab_6145[] = "88SE6145 SATA II PCI-E controller"; ++static const char pci_device_11ab_6450[] = "64560 System Controller"; + static const char pci_device_11ab_6460[] = "MV64360/64361/64362 System Controller"; + static const char pci_device_11ab_6480[] = "MV64460/64461/64462 System Controller"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_11ab_6480_1775_c200[] = "C2K CompactPCI single board computer"; ++#endif + static const char pci_device_11ab_6485[] = "MV64460/64461/64462 System Controller, Revision B"; + static const char pci_device_11ab_f003[] = "GT-64010 Primary Image Piranha Image Generator"; + #endif +@@ -12787,6 +13385,18 @@ static const char pci_device_11bc_0001[] + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_11bd[] = "Pinnacle Systems Inc."; + static const char pci_device_11bd_002e[] = "PCTV 40i"; ++static const char pci_device_11bd_0040[] = "Royal TS Function 1"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_11bd_0040_11bd_0044[] = "PCTV 2000i Dual DVB-T Pro PCI Tuner 1"; ++#endif ++static const char pci_device_11bd_0041[] = "RoyalTS Function 2"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_11bd_0041_11bd_0044[] = "PCTV 2000i Dual DVB-T Pro PCI Tuner 2"; ++#endif ++static const char pci_device_11bd_0042[] = "Royal TS Function 3"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_11bd_0042_11bd_0044[] = "PCTV 2000i Dual DVB-T Pro PCI Common"; ++#endif + static const char pci_device_11bd_bede[] = "AV/DV Studio Capture Card"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -13070,6 +13680,8 @@ static const char pci_device_11c1_0462[] + static const char pci_device_11c1_0480[] = "Venus Modem (V90, 56KFlex)"; + static const char pci_device_11c1_048c[] = "V.92 56K WinModem"; + static const char pci_device_11c1_048f[] = "V.92 56k WinModem"; ++static const char pci_device_11c1_1040[] = "HDA softmodem"; ++static const char pci_device_11c1_2600[] = "StarPro26XX family (SP2601, SP2603, SP2612) DSP"; + static const char pci_device_11c1_5801[] = "USB"; + static const char pci_device_11c1_5802[] = "USS-312 USB Controller"; + static const char pci_device_11c1_5803[] = "USS-344S USB Controller"; +@@ -13180,10 +13792,17 @@ static const char pci_vendor_11d3[] = "T + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_11d4[] = "Analog Devices"; ++static const char pci_device_11d4_0078[] = "AD1986HD sound chip"; + static const char pci_device_11d4_1535[] = "Blackfin BF535 processor"; + static const char pci_device_11d4_1805[] = "SM56 PCI modem"; + static const char pci_device_11d4_1889[] = "AD1889 sound chip"; ++static const char pci_device_11d4_1981[] = "AD1981HD sound chip"; ++static const char pci_device_11d4_1983[] = "AD1983HD sound chip"; + static const char pci_device_11d4_1986[] = "AD1986A sound chip"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_11d4_1986_11d4_1986[] = "Lenovo N100 B9G"; ++#endif ++static const char pci_device_11d4_198b[] = "AD1988B Sound Chip"; + static const char pci_device_11d4_5340[] = "AD1881 sound chip"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -13545,6 +14164,9 @@ static const char pci_subsys_1217_7223_1 + static const char pci_subsys_1217_7223_103c_0890[] = "NC6000 laptop"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1217_7223_10cf_11c4[] = "Lifebook P5020D Laptop"; ++#endif + static const char pci_device_1217_7233[] = "OZ711MP3/MS3 4-in-1 MemoryCardBus Controller"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -14072,6 +14694,9 @@ static const char pci_subsys_125d_2898_1 + static const char pci_subsys_125d_2898_147a_c001[] = "ES56-PI Data Fax Modem"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_125d_2898_148d_1030[] = "HCF WV-PI56 [ESS ES56-PI Data Fax Modem]"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_125d_2898_14fe_0428[] = "ES56-PI Data Fax Modem"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -14111,6 +14736,11 @@ static const char pci_subsys_1260_3873_1 + #endif + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1260_3873_8086_2510[] = "M3AWEB Wireless 802.11b MiniPCI Adapter"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1260_3873_8086_2513[] = "Wireless 802.11b MiniPCI Adapter"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -14132,6 +14762,9 @@ static const char pci_subsys_1260_3890_1 + static const char pci_subsys_1260_3890_1113_4203[] = "WN4201B"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1260_3890_1113_8201[] = "T-Com T-Sinus 154pcicard Wireless PCI Adapter"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1260_3890_1113_ee03[] = "SMC2802W V2 Wireless PCI Adapter [ISL3886]"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -14850,11 +15483,12 @@ static const char pci_device_1282_9132[] + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1283[] = "Integrated Technology Express, Inc."; + static const char pci_device_1283_673a[] = "IT8330G"; +-static const char pci_device_1283_8211[] = "ITE 8211F Single Channel UDMA 133 (ASUS 8211 (ITE IT8212 ATA RAID Controller))"; ++static const char pci_device_1283_8152[] = "IT8152F/G Advanced RISC-to-PCI Companion Chip"; ++static const char pci_device_1283_8211[] = "ITE 8211F Single Channel UDMA 133"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1283_8211_1043_8138[] = "P5GD1-VW Mainboard"; + #endif +-static const char pci_device_1283_8212[] = "IT/ITE8212 Dual channel ATA RAID controller (PCI version seems to be IT8212, embedded seems to be ITE8212)"; ++static const char pci_device_1283_8212[] = "IT/ITE8212 Dual channel ATA RAID controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1283_8212_1283_0001[] = "IT/ITE8212 Dual channel ATA RAID controller"; + #endif +@@ -14916,6 +15550,7 @@ static const char pci_vendor_1290[] = "S + static const char pci_vendor_1291[] = "NCS Computer Italia"; + #endif + static const char pci_vendor_1292[] = "Tritech Microelectronics Inc"; ++static const char pci_device_1292_fc02[] = "Pyramid3D TR25202"; + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1293[] = "Media Reality Technology"; + #endif +@@ -14992,8 +15627,12 @@ static const char pci_vendor_12aa[] = "S + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_12ab[] = "Yuan Yuan Enterprise Co., Ltd."; ++static const char pci_device_12ab_0000[] = "MPG160/Kuroutoshikou ITVC15-STVLP"; + static const char pci_device_12ab_0002[] = "AU8830 [Vortex2] Based Sound Card With A3D Support"; ++static const char pci_device_12ab_2300[] = "Club-3D Zap TV2100"; + static const char pci_device_12ab_3000[] = "MPG-200C PCI DVD Decoder Card"; ++static const char pci_device_12ab_fff3[] = "MPG600/Kuroutoshikou ITVC16-STVLP"; ++static const char pci_device_12ab_ffff[] = "MPG600/Kuroutoshikou ITVC16-STVLP"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_12ac[] = "Measurex Corporation"; +@@ -15302,6 +15941,7 @@ static const char pci_vendor_12d7[] = "B + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_12d8[] = "Pericom Semiconductor"; ++static const char pci_device_12d8_01a7[] = "PI7C21P100 PCI to PCI Bridge"; + static const char pci_device_12d8_8150[] = "PCI to PCI Bridge"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -15805,7 +16445,7 @@ static const char pci_vendor_132d[] = "I + static const char pci_vendor_1330[] = "MMC Networks"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +-static const char pci_vendor_1331[] = "Radisys Corp."; ++static const char pci_vendor_1331[] = "RadiSys Corporation"; + static const char pci_device_1331_0030[] = "ENP-2611"; + static const char pci_device_1331_8200[] = "82600 Host Bridge"; + static const char pci_device_1331_8201[] = "82600 IDE"; +@@ -16070,6 +16710,8 @@ static const char pci_device_1374_0037[] + static const char pci_device_1374_0038[] = "Silicom Quad port Copper Ethernet PCI-E Intel based Bypass Server Adapter"; + static const char pci_device_1374_0039[] = "Silicom Dual port Fiber-SX Ethernet PCI-E Intel based Bypass Server Adapter"; + static const char pci_device_1374_003a[] = "Silicom Dual port Fiber-LX Ethernet PCI-E Intel based Bypass Server Adapter"; ++static const char pci_device_1374_003b[] = "Silicom Dual port Fiber Ethernet PMC Intel based Bypass Server Adapter (PMCX2BPFI)"; ++static const char pci_device_1374_003c[] = "Silicom Dual port Copper Ethernet PCI-X BGE based Bypass Server Adapter (PXG2BPRB)"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1375[] = "Argosystems Inc"; +@@ -16134,9 +16776,10 @@ static const char pci_vendor_1384[] = "R + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1385[] = "Netgear"; + static const char pci_device_1385_0013[] = "WG311T 108 Mbps Wireless PCI Adapter"; +-static const char pci_device_1385_311a[] = "GA511 Gigabit Ethernet"; +-static const char pci_device_1385_4100[] = "802.11b Wireless Adapter (MA301)"; +-static const char pci_device_1385_4105[] = "MA311 802.11b wireless adapter"; ++static const char pci_device_1385_006b[] = "WA301 802.11b Wireless PCI Adapter"; ++static const char pci_device_1385_311a[] = "GA311 Gigabit Ethernet PCI Adapter"; ++static const char pci_device_1385_4100[] = "MA301 802.11b Wireless PCI Adapter"; ++static const char pci_device_1385_4105[] = "MA311 802.11b Wireless PCI Adapter"; + static const char pci_device_1385_4251[] = "WG111T 108 Mbps Wireless USB 2.0 Adapter"; + static const char pci_device_1385_4400[] = "WAG511 802.11a/b/g Dual Band Wireless PC Card"; + static const char pci_device_1385_4600[] = "WAG511 802.11a/b/g Dual Band Wireless PC Card"; +@@ -16156,7 +16799,7 @@ static const char pci_device_1385_622a[] + static const char pci_device_1385_630a[] = "GA630 Gigabit Ethernet"; + static const char pci_device_1385_6b00[] = "WG311v3 54 Mbps Wireless PCI Adapter"; + static const char pci_device_1385_6d00[] = "WPNT511 RangeMax 240 Mbps Wireless PC Card"; +-static const char pci_device_1385_7b00[] = "WN511B RangeMax Next 280 Mbps Wireless PC Card"; ++static const char pci_device_1385_7b00[] = "WN511B RangeMax Next 270 Mbps Wireless PC Card"; + static const char pci_device_1385_7c00[] = "WN511T RangeMax Next 300 Mbps Wireless PC Card"; + static const char pci_device_1385_7d00[] = "WN311B RangeMax Next 270 Mbps Wireless PCI Adapter"; + static const char pci_device_1385_7e00[] = "WN311T RangeMax Next 300 Mbps Wireless PCI Adapter"; +@@ -16207,6 +16850,7 @@ static const char pci_vendor_1393[] = "M + static const char pci_device_1393_1040[] = "Smartio C104H/PCI"; + static const char pci_device_1393_1141[] = "Industrio CP-114"; + static const char pci_device_1393_1680[] = "Smartio C168H/PCI"; ++static const char pci_device_1393_1681[] = "CP-168U V2 Smart Serial Board (8-port RS-232)"; + static const char pci_device_1393_2040[] = "Intellio CP-204J"; + static const char pci_device_1393_2180[] = "Intellio C218 Turbo PCI"; + static const char pci_device_1393_3200[] = "Intellio C320 Turbo PCI"; +@@ -16233,6 +16877,9 @@ static const char pci_subsys_1397_08b4_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1397_08b4_1397_b540[] = "HFC-4S [Swyx 4xS0 SX2 QuadBri]"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1397_08b4_1397_b556[] = "HFC-4S [Junghanns DuoDBRI]"; ++#endif + static const char pci_device_1397_16b8[] = "ISDN network Controller [HFC-8S]"; + static const char pci_device_1397_2bd0[] = "ISDN network controller [HFC-PCI]"; + #ifdef INIT_SUBSYS_INFO +@@ -16247,6 +16894,9 @@ static const char pci_subsys_1397_2bd0_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1397_2bd0_e4bf_1000[] = "CI1-1-Harp"; + #endif ++static const char pci_device_1397_30b1[] = "ISDN network Controller [HFC-E1]"; ++static const char pci_device_1397_b700[] = "ISDN network controller PrimuX S0 [HFC-PCI]"; ++static const char pci_device_1397_f001[] = "GSM Network Controller [HFC-4GSM]"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1398[] = "Clarion co. Ltd"; +@@ -16297,6 +16947,7 @@ static const char pci_device_13a3_0018[] + static const char pci_device_13a3_001d[] = "7956 Security Processor"; + static const char pci_device_13a3_0020[] = "7955 Security Processor"; + static const char pci_device_13a3_0026[] = "8155 Security Processor"; ++static const char pci_device_13a3_002e[] = "9630 Compression Processor"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_13a4[] = "Rascom Inc"; +@@ -16401,6 +17052,7 @@ static const char pci_subsys_13c1_1001_1 + #endif + static const char pci_device_13c1_1002[] = "9xxx-series SATA-RAID"; + static const char pci_device_13c1_1003[] = "9550SX SATA-RAID"; ++static const char pci_device_13c1_1004[] = "9650SE SATA-II RAID"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_13c2[] = "Technotrend Systemtechnik GmbH"; +@@ -16465,6 +17117,7 @@ static const char pci_vendor_13d2[] = "S + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_13d3[] = "IMC Networks"; ++static const char pci_device_13d3_3219[] = "DTV-DVB 7049A DVB-T USB Stick"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_13d4[] = "Graphics Microsystems Inc"; +@@ -16559,7 +17212,7 @@ static const char pci_vendor_13ef[] = "C + static const char pci_vendor_13f0[] = "Sundance Technology Inc / IC Plus Corp"; + static const char pci_device_13f0_0200[] = "IC Plus IP100A Integrated 10/100 Ethernet MAC + PHY"; + static const char pci_device_13f0_0201[] = "ST201 Sundance Ethernet"; +-static const char pci_device_13f0_1023[] = "IC Plus IP1000 Family Gigabit Ethernet"; ++static const char pci_device_13f0_1023[] = "IP1000 Family Gigabit Ethernet"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_13f1[] = "Oce' - Technologies B.V."; +@@ -16608,6 +17261,7 @@ static const char pci_subsys_13f6_0111_1 + static const char pci_subsys_13f6_0111_1681_a000[] = "Gamesurround MUSE XL"; + #endif + static const char pci_device_13f6_0211[] = "CM8738"; ++static const char pci_device_13f6_9880[] = "CM9880"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_13f7[] = "Wildfire Communications"; +@@ -16930,6 +17584,7 @@ static const char pci_vendor_1424[] = "V + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1425[] = "Chelsio Communications Inc"; + static const char pci_device_1425_000b[] = "T210 Protocol Engine"; ++static const char pci_device_1425_000c[] = "T204 Protocol Engine"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1426[] = "Storage Technology Corp."; +@@ -17100,6 +17755,7 @@ static const char pci_vendor_1457[] = "N + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1458[] = "Giga-byte Technology"; + static const char pci_device_1458_0c11[] = "K8NS Pro Mainboard"; ++static const char pci_device_1458_9001[] = "GC-PTV-TAF Hybrid TV card"; + static const char pci_device_1458_e911[] = "GN-WIAG02"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -17129,6 +17785,9 @@ static const char pci_vendor_1460[] = "D + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1461[] = "Avermedia Technologies Inc"; ++static const char pci_device_1461_a3ce[] = "M179"; ++static const char pci_device_1461_a3cf[] = "M179"; ++static const char pci_device_1461_a836[] = "M115 DVB-T, PAL/SECAM/NTSC Tuner"; + static const char pci_device_1461_f436[] = "AVerTV Hybrid+FM"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -17138,6 +17797,8 @@ static const char pci_device_1462_6819[] + static const char pci_device_1462_6825[] = "PCI Card wireless 11g [PC54G]"; + static const char pci_device_1462_6834[] = "RaLink RT2500 802.11g [PC54G2]"; + static const char pci_device_1462_7125[] = "K8N motherboard"; ++static const char pci_device_1462_7235[] = "P965 Neo MS-7235 mainboard"; ++static const char pci_device_1462_7242[] = "K9AGM RS485 Motherboard"; + static const char pci_device_1462_8725[] = "NVIDIA NV25 [GeForce4 Ti 4600] VGA Adapter"; + static const char pci_device_1462_9000[] = "NVIDIA NV28 [GeForce4 Ti 4800] VGA Adapter"; + static const char pci_device_1462_9110[] = "GeFORCE FX5200"; +@@ -17146,6 +17807,7 @@ static const char pci_device_1462_9123[] + static const char pci_device_1462_9510[] = "Radeon 9600XT"; + static const char pci_device_1462_9511[] = "Radeon 9600XT"; + static const char pci_device_1462_9591[] = "nVidia Corporation NV36 [GeForce FX 5700LE]"; ++static const char pci_device_1462_b834[] = "Wireless 11g Turbo G PCI card [MSI PC60G]"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1463[] = "Fast Corporation"; +@@ -17611,10 +18273,17 @@ static const char pci_device_14e4_080f[] + static const char pci_device_14e4_0811[] = "Sentry5 External Interface Core"; + static const char pci_device_14e4_0816[] = "BCM3302 Sentry5 MIPS32 CPU"; + static const char pci_device_14e4_1600[] = "NetXtreme BCM5752 Gigabit Ethernet PCI Express"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_14e4_1600_103c_3015[] = "PCIe LAN on Motherboard"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_14e4_1600_107b_5048[] = "E4500 Onboard"; + #endif + static const char pci_device_14e4_1601[] = "NetXtreme BCM5752M Gigabit Ethernet PCI Express"; ++static const char pci_device_14e4_1639[] = "NetXtreme II BCM5709 Gigabit Ethernet"; ++static const char pci_device_14e4_163a[] = "NetXtreme II BCM5709S Gigabit Ethernet"; + static const char pci_device_14e4_1644[] = "NetXtreme BCM5700 Gigabit Ethernet"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_14e4_1644_1014_0277[] = "Broadcom Vigil B5700 1000Base-T"; +@@ -17920,6 +18589,17 @@ static const char pci_subsys_14e4_1659_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_14e4_1659_1734_1061[] = "Primergy RX300 S2"; + #endif ++static const char pci_device_14e4_165a[] = "NetXtreme BCM5722 Gigabit Ethernet PCI Express"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_14e4_165a_103c_7051[] = "NC105i PCIe Gigabit Server Adapter"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_14e4_165a_103c_7052[] = "NC105T PCIe Gigabit Server Adapter"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_device_14e4_165d[] = "NetXtreme BCM5705M Gigabit Ethernet"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -17942,6 +18622,9 @@ static const char pci_subsys_14e4_165e_1 + static const char pci_subsys_14e4_165e_103c_099c[] = "NX6110/NC6120"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_14e4_165e_10cf_1279[] = "LifeBook E8010D"; ++#endif + static const char pci_device_14e4_1668[] = "NetXtreme BCM5714 Gigabit Ethernet"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -17954,6 +18637,7 @@ static const char pci_device_14e4_166b[] + static const char pci_device_14e4_166e[] = "570x 10/100 Integrated Controller"; + static const char pci_device_14e4_1672[] = "NetXtreme BCM5754M Gigabit Ethernet PCI Express"; + static const char pci_device_14e4_1673[] = "NetXtreme BCM5755M Gigabit Ethernet PCI Express"; ++static const char pci_device_14e4_1674[] = "NetXtreme BCM5756ME Gigabit Ethernet PCI Express"; + static const char pci_device_14e4_1677[] = "NetXtreme BCM5751 Gigabit Ethernet PCI Express"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -18007,6 +18691,7 @@ static const char pci_device_14e4_167d[] + static const char pci_subsys_14e4_167d_17aa_2081[] = "Thinkpad R60e model 0657"; + #endif + static const char pci_device_14e4_167e[] = "NetXtreme BCM5751F Fast Ethernet PCI Express"; ++static const char pci_device_14e4_167f[] = "NetLink BCM5787F Fast Ethernet PCI Express"; + static const char pci_device_14e4_1693[] = "NetLink BCM5787M Gigabit Ethernet PCI Express"; + static const char pci_device_14e4_1696[] = "NetXtreme BCM5782 Gigabit Ethernet"; + #endif +@@ -18025,6 +18710,11 @@ static const char pci_device_14e4_169c[] + static const char pci_subsys_14e4_169c_103c_308b[] = "MX6125"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_14e4_169c_103c_30a1[] = "NC2400"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_device_14e4_169d[] = "NetLink BCM5789 Gigabit Ethernet PCI Express"; + static const char pci_device_14e4_16a6[] = "NetXtreme BCM5702X Gigabit Ethernet"; + #endif +@@ -18090,6 +18780,11 @@ static const char pci_subsys_14e4_16ac_1 + #ifdef VENDOR_INCLUDE_NONVIDEO + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_14e4_16ac_103c_7038[] = "NC373i PCI Express Multifunction Gigabit Server Adapter"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_14e4_16ac_103c_703b[] = "NC373i Integrated Multifunction Gigabit Server Adapter"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -18152,6 +18847,11 @@ static const char pci_subsys_14e4_170c_1 + #ifdef VENDOR_INCLUDE_NONVIDEO + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_14e4_170c_1028_01af[] = "Inspiron 6400"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_14e4_170c_103c_099c[] = "NX6110/NC6120"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -18160,11 +18860,14 @@ static const char pci_device_14e4_170d[] + static const char pci_subsys_14e4_170d_1014_0545[] = "ThinkPad R40e (2684-HVG) builtin ethernet controller"; + #endif + static const char pci_device_14e4_170e[] = "NetXtreme BCM5901 100Base-TX"; ++static const char pci_device_14e4_1712[] = "NetLink BCM5906 Fast Ethernet PCI Express"; ++static const char pci_device_14e4_1713[] = "NetLink BCM5906M Fast Ethernet PCI Express"; + static const char pci_device_14e4_3352[] = "BCM3352"; + static const char pci_device_14e4_3360[] = "BCM3360"; + static const char pci_device_14e4_4210[] = "BCM4210 iLine10 HomePNA 2.0"; + static const char pci_device_14e4_4211[] = "BCM4211 iLine10 HomePNA 2.0 + V.90 56k modem"; + static const char pci_device_14e4_4212[] = "BCM4212 v.90 56k modem"; ++static const char pci_device_14e4_4220[] = "802-11b/g Wireless PCI controller, packaged as a Linksys WPC54G ver 1.2 PCMCIA card"; + static const char pci_device_14e4_4301[] = "BCM4303 802.11b Wireless LAN Controller"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -18178,8 +18881,8 @@ static const char pci_device_14e4_4305[] + static const char pci_device_14e4_4306[] = "BCM4307 Ethernet Controller"; + static const char pci_device_14e4_4307[] = "BCM4307 802.11b Wireless LAN Controller"; + static const char pci_device_14e4_4310[] = "BCM4310 Chipcommon I/OController"; +-static const char pci_device_14e4_4311[] = "Dell Wireless 1390 WLAN Mini-PCI Card"; +-static const char pci_device_14e4_4312[] = "BCM4310 UART"; ++static const char pci_device_14e4_4311[] = "BCM94311MCG wlan mini-PCI"; ++static const char pci_device_14e4_4312[] = "BCM4312 802.11a/b/g"; + static const char pci_device_14e4_4313[] = "BCM4310 Ethernet Controller"; + static const char pci_device_14e4_4315[] = "BCM4310 USB Controller"; + static const char pci_device_14e4_4318[] = "BCM4318 [AirForce One 54g] 802.11g Wireless LAN Controller"; +@@ -18192,7 +18895,7 @@ static const char pci_subsys_14e4_4318_1 + static const char pci_subsys_14e4_4318_1043_120f[] = "A6U notebook embedded card"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_14e4_4318_1468_0311[] = "Aspire 3022WLMi, 5024WLMi"; ++static const char pci_subsys_14e4_4318_1468_0311[] = "Aspire 3022WLMi, 5024WLMi, 5020"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_14e4_4318_1468_0312[] = "TravelMate 2410"; +@@ -18207,6 +18910,9 @@ static const char pci_subsys_14e4_4318_1 + static const char pci_subsys_14e4_4318_16ec_0119[] = "U.S.Robotics Wireless MAXg PC Card"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_14e4_4318_1737_0042[] = "WMP54GS version 1.1 [Wireless-G PCI Adapter] 802.11g w/SpeedBooster"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_14e4_4318_1737_0048[] = "WPC54G-EU version 3 [Wireless-G Notebook Adapter]"; + #endif + static const char pci_device_14e4_4319[] = "BCM4311 [AirForce 54g] 802.11a/b/g PCI Express Transceiver"; +@@ -18249,6 +18955,9 @@ static const char pci_subsys_14e4_4320_1 + static const char pci_subsys_14e4_4320_144f_7050[] = "eMachines M6805 802.11g Built-in Wireless"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_14e4_4320_144f_7051[] = "Sonnet Aria Extreme PCI"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_14e4_4320_14e4_4320[] = "Linksys WMP54G PCI"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -18288,6 +18997,7 @@ static const char pci_subsys_14e4_4325_1 + #endif + static const char pci_device_14e4_4326[] = "BCM4307 Chipcommon I/O Controller?"; + static const char pci_device_14e4_4329[] = "BCM43XG"; ++static const char pci_device_14e4_4344[] = "EDGE/GPRS data and 802.11b/g combo cardbus [GC89]"; + static const char pci_device_14e4_4401[] = "BCM4401 100Base-T"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -18337,6 +19047,8 @@ static const char pci_device_14e4_5680[] + static const char pci_device_14e4_5690[] = "BCM5690 12-port Multi-Layer Gigabit Ethernet Switch"; + static const char pci_device_14e4_5691[] = "BCM5691 GE/10GE 8+2 Gigabit Ethernet Switch Controller"; + static const char pci_device_14e4_5692[] = "BCM5692 12-port Multi-Layer Gigabit Ethernet Switch"; ++static const char pci_device_14e4_5695[] = "BCM5695 12-port + HiGig Multi-Layer Gigabit Ethernet Switch"; ++static const char pci_device_14e4_5698[] = "BCM5698 12-port Multi-Layer Gigabit Ethernet Switch"; + static const char pci_device_14e4_5820[] = "BCM5820 Crypto Accelerator"; + static const char pci_device_14e4_5821[] = "BCM5821 Crypto Accelerator"; + static const char pci_device_14e4_5822[] = "BCM5822 Crypto Accelerator"; +@@ -18496,6 +19208,7 @@ static const char pci_device_14f1_1066[] + static const char pci_subsys_14f1_1066_122d_4033[] = "Dell Athena - MDP3900V-U"; + #endif + static const char pci_device_14f1_1085[] = "HCF V90 56k Data/Fax/Voice/Spkp PCI Modem"; ++static const char pci_device_14f1_10b6[] = "CX06834-11 HCF V.92 56k Data/Fax/Voice/Spkp Modem"; + static const char pci_device_14f1_1433[] = "HCF 56k Data/Fax Modem"; + static const char pci_device_14f1_1434[] = "HCF 56k Data/Fax/Voice Modem"; + static const char pci_device_14f1_1435[] = "HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem"; +@@ -18649,6 +19362,11 @@ static const char pci_device_14f1_2464[] + static const char pci_device_14f1_2465[] = "HSF 56k Data/Fax/Voice/Spkp (w/HS) Modem (Mob SmartDAA)"; + static const char pci_device_14f1_2466[] = "HSF 56k Data/Fax/Voice/Spkp Modem (Mob SmartDAA)"; + static const char pci_device_14f1_2bfa[] = "HDAudio Soft Data Fax Modem with SmartCP"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_14f1_2bfa_1025_0009[] = "Aspire 5622WLMi"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_device_14f1_2f00[] = "HSF 56k HSFi Modem"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_14f1_2f00_13e0_8d84[] = "IBM HSFi V.90"; +@@ -18662,6 +19380,9 @@ static const char pci_subsys_14f1_2f00_1 + static const char pci_device_14f1_2f02[] = "HSF 56k HSFi Data/Fax"; + static const char pci_device_14f1_2f11[] = "HSF 56k HSFi Modem"; + static const char pci_device_14f1_2f20[] = "HSF 56k Data/Fax Modem"; ++static const char pci_device_14f1_2f30[] = "HSF 56k Data/Fax Modem"; ++static const char pci_device_14f1_5045[] = "HDAUDIO with SmartCP"; ++static const char pci_device_14f1_5047[] = "High Definition Audio [Waikiki]"; + static const char pci_device_14f1_8234[] = "RS8234 ATM SAR Controller [ServiceSAR Plus]"; + static const char pci_device_14f1_8800[] = "CX23880/1/2/3 PCI Video and Audio Decoder"; + #ifdef INIT_SUBSYS_INFO +@@ -18806,6 +19527,9 @@ static const char pci_subsys_14f1_8802_1 + static const char pci_subsys_14f1_8802_107d_663c[] = "Leadtek PVR 2000"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_14f1_8802_107d_665f[] = "WinFast DTV1000-T"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_14f1_8802_14f1_0187[] = "Conexant DVB-T reference design"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -19091,6 +19815,30 @@ static const char pci_subsys_1522_0100_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1522_0100_1522_2700[] = "RockForceF8 8 Port V.34 Super-G3 Fax Modem"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1522_0100_1522_3000[] = "IQ Express D1 - 1 Port V.92 Data Modem"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1522_0100_1522_3100[] = "IQ Express F1 - 1 Port V.34 Super-G3 Fax Modem"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1522_0100_1522_3200[] = "IQ Express D2 - 2 Port V.92 Data Modem"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1522_0100_1522_3300[] = "IQ Express F2 - 2 Port V.34 Super-G3 Fax Modem"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1522_0100_1522_3400[] = "IQ Express D4 - 4 Port V.92 Data Modem"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1522_0100_1522_3500[] = "IQ Express F4 - 4 Port V.34 Super-G3 Fax Modem"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1522_0100_1522_3c00[] = "IQ Express D8 - 8 Port V.92 Data Modem"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1522_0100_1522_3d00[] = "IQ Express F8 - 8 Port V.34 Super-G3 Fax Modem"; ++#endif + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1523[] = "MUSIC Semiconductors"; +@@ -19106,6 +19854,7 @@ static const char pci_subsys_1524_0510_1 + static const char pci_device_1524_0520[] = "FLASH memory: ENE Technology Inc:"; + static const char pci_device_1524_0530[] = "ENE PCI Memory Stick Card Reader Controller"; + static const char pci_device_1524_0550[] = "ENE PCI Secure Digital Card Reader Controller"; ++static const char pci_device_1524_0551[] = "SD/MMC Card Reader Controller"; + static const char pci_device_1524_0610[] = "PCI Smart Card Reader Controller"; + static const char pci_device_1524_1211[] = "CB1211 Cardbus Controller"; + static const char pci_device_1524_1225[] = "CB1225 Cardbus Controller"; +@@ -19184,6 +19933,9 @@ static const char pci_vendor_1534[] = "R + static const char pci_vendor_1535[] = "EVERGREEN Technologies Inc"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const char pci_vendor_1536[] = "ACTIS Computer"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1537[] = "DATALEX COMMUNCATIONS"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -19478,6 +20230,9 @@ static const char pci_vendor_158f[] = "D + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1590[] = "3pardata Inc"; ++static const char pci_device_1590_0001[] = "Eagle Cluster Manager"; ++static const char pci_device_1590_0002[] = "Osprey Cluster Manager"; ++static const char pci_device_1590_a01d[] = "FC044X Fibre Channel HBA"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1591[] = "ARN"; +@@ -19587,6 +20342,7 @@ static const char pci_vendor_15b2[] = "M + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_15b3[] = "Mellanox Technologies"; ++static const char pci_device_15b3_0191[] = "MT25408 [ConnectX IB SDR Flash Recovery]"; + static const char pci_device_15b3_5274[] = "MT21108 InfiniBridge"; + static const char pci_device_15b3_5a44[] = "MT23108 InfiniHost"; + static const char pci_device_15b3_5a45[] = "MT23108 [Infinihost HCA Flash Recovery]"; +@@ -19596,6 +20352,10 @@ static const char pci_device_15b3_6274[] + static const char pci_device_15b3_6278[] = "MT25208 InfiniHost III Ex (Tavor compatibility mode)"; + static const char pci_device_15b3_6279[] = "MT25208 [InfiniHost III Ex HCA Flash Recovery]"; + static const char pci_device_15b3_6282[] = "MT25208 InfiniHost III Ex"; ++static const char pci_device_15b3_6340[] = "MT25408 [ConnectX IB SDR]"; ++static const char pci_device_15b3_634a[] = "MT25418 [ConnectX IB DDR]"; ++static const char pci_device_15b3_6354[] = "MT25428 [ConnectX IB QDR]"; ++static const char pci_device_15b3_6368[] = "MT25448 [ConnectX EN 10GigE]"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_15b4[] = "CCI/TRIAD"; +@@ -19611,6 +20371,10 @@ static const char pci_vendor_15b7[] = "S + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_15b8[] = "ADDI-DATA GmbH"; ++static const char pci_device_15b8_1003[] = "APCI1032 SP controller (32 digi inputs w/ opto coupler)"; ++static const char pci_device_15b8_1005[] = "APCI2200 SP controller (8/16 digi outputs (relay))"; ++static const char pci_device_15b8_100a[] = "APCI1696 SP controller (96 TTL I/Os)"; ++static const char pci_device_15b8_3001[] = "APCI3501 SP controller (analog output board)"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_15b9[] = "Maestro Digital Communications"; +@@ -19741,6 +20505,7 @@ static const char pci_vendor_15e1[] = "V + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_15e2[] = "Quicknet Technologies Inc"; ++static const char pci_device_15e2_0500[] = "PhoneJack-PCI"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_15e3[] = "Networth Technologies Inc"; +@@ -19886,6 +20651,8 @@ static const char pci_device_1626_8410[] + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1629[] = "Kongsberg Spacetec AS"; + static const char pci_device_1629_1003[] = "Format synchronizer v3.0"; ++static const char pci_device_1629_1006[] = "Format synchronizer, model 10500"; ++static const char pci_device_1629_1007[] = "Format synchronizer, model 21000"; + static const char pci_device_1629_2002[] = "Fast Universal Data Output"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -20039,10 +20806,19 @@ static const char pci_subsys_168c_0013_1 + static const char pci_subsys_168c_0013_16ab_7302[] = "Trust Speedshare Turbo Pro Wireless PCI Adapter"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_168c_0013_17cf_0042[] = "Z-COMAX Highpower XG-622H (400mw) 802.11b/g mini-PCI Adapter"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_168c_0013_185f_1012[] = "CM9 Wireless a/b/g MiniPCI Adapter"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_168c_0013_185f_2012[] = "Wistron NeWeb WLAN a+b+g model CB9"; + #endif + static const char pci_device_168c_001a[] = "AR5005G 802.11abg NIC"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_168c_001a_1052_168c[] = "Sweex Wireless Lan PC Card 54Mbps"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_168c_001a_1113_ee20[] = "SMC Wireless CardBus Adapter 802.11g (SMCWCB-G EU)"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -20061,11 +20837,17 @@ static const char pci_subsys_168c_001a_1 + static const char pci_subsys_168c_001a_1186_3a24[] = "D-Link AirPlus G DWL-G650+A Wireless Cardbus Adapter"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_168c_001a_1186_3b08[] = "AirPlus G DWL-G630"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_168c_001a_168c_001a[] = "Belkin FD7000"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_168c_001a_168c_1052[] = "TP-Link TL-WN510G Wireless CardBus Adapter"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_168c_001a_168c_2052[] = "Compex Wireless 802.11 b/g MiniPCI Adapter, Rev A1 [WLM54G]"; ++#endif + static const char pci_device_168c_001b[] = "AR5006X 802.11abg NIC"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_168c_001b_1186_3a19[] = "D-Link AirPremier AG DWL-AG660 Wireless Cardbus Adapter"; +@@ -20074,16 +20856,32 @@ static const char pci_subsys_168c_001b_1 + static const char pci_subsys_168c_001b_1186_3a22[] = "D-Link AirPremier AG DWL-AG530 Wireless PCI Adapter"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_168c_001b_1458_e901[] = "GN-WI01HT Wireless a/b/g MiniPCI Adapter"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_168c_001b_168c_001b[] = "Wireless LAN PCI LiteOn"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_168c_001b_168c_2062[] = "EnGenius EMP-8602 (400mw) or Compex WLM54AG (SuperAG)"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_168c_001b_168c_2063[] = "EnGenius EMP-8602 (400mw) or Compex WLM54AG"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_168c_001b_185f_1600[] = "DCMA-82 High Power WLAN 802.11a/b/g mini-PCI Module (Super A/G, eXtended Range, 400mW)"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_168c_001b_a727_6804[] = "Wireless 11a/b/g PC Card with XJACK(r) Antenna"; ++#endif ++static const char pci_device_168c_001c[] = "AR5006EG 802.11 b/g Wireless PCI Express Adapter"; + static const char pci_device_168c_0020[] = "AR5005VL 802.11bg Wireless NIC"; ++static const char pci_device_168c_0023[] = "AR5416 802.11a/b/g/n Wireless PCI Adapter"; ++static const char pci_device_168c_0024[] = "AR5418 802.11a/b/g/n Wireless PCI Express Adapter"; + static const char pci_device_168c_1014[] = "AR5212 802.11abg NIC"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_168c_1014_1014_058a[] = "ThinkPad 11a/b/g Wireless LAN Mini Express Adapter (AR5BXB6)"; + #endif ++static const char pci_device_168c_3b08[] = "D-Link AirPlus G DWL-G630"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1695[] = "EPoX Computer Co., Ltd."; +@@ -20093,6 +20891,10 @@ static const char pci_vendor_169c[] = "N + static const char pci_device_169c_0044[] = "Revolution Storage Processing Card"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const char pci_vendor_169d[] = "Club-3D VB (Wrong ID)"; ++static const char pci_device_169d_3306[] = "ZAP TV 2202"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_16a5[] = "Tekram Technology Co.,Ltd."; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -20103,8 +20905,11 @@ static const char pci_device_16ab_1102[] + static const char pci_device_16ab_8501[] = "WL-8305 Wireless LAN PCI Adapter"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +-static const char pci_vendor_16ae[] = "Safenet Inc"; +-static const char pci_device_16ae_1141[] = "SafeXcel-1141"; ++static const char pci_vendor_16ae[] = "SafeNet Inc"; ++static const char pci_device_16ae_0001[] = "SafeXcel 1140"; ++static const char pci_device_16ae_000a[] = "SafeXcel 1841"; ++static const char pci_device_16ae_1141[] = "SafeXcel 1141"; ++static const char pci_device_16ae_1841[] = "SafeXcel 1842"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_16af[] = "SparkLAN Communications, Inc."; +@@ -20140,7 +20945,41 @@ static const char pci_vendor_16ce[] = "R + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_16d5[] = "Acromag, Inc."; ++static const char pci_device_16d5_0504[] = "PMC-DX504 Reconfigurable FPGA with LVDS I/O"; ++static const char pci_device_16d5_0520[] = "PMC520 Serial Communication, 232 Octal"; ++static const char pci_device_16d5_0521[] = "PMC521 Serial Communication, 422/485 Octal"; ++static const char pci_device_16d5_1020[] = "PMC-AX1020 Reconfigurable FPGA with A/D & D/A"; ++static const char pci_device_16d5_1065[] = "PMC-AX1065 Reconfigurable FPGA with A/D & D/A"; ++static const char pci_device_16d5_2004[] = "PMC-DX2004 Reconfigurable FPGA with LVDS I/O"; ++static const char pci_device_16d5_2020[] = "PMC-AX2020 Reconfigurable FPGA with A/D & D/A"; ++static const char pci_device_16d5_2065[] = "PMC-AX2065 Reconfigurable FPGA with A/D & D/A"; ++static const char pci_device_16d5_3020[] = "PMC-AX3020 Reconfigurable FPGA with A/D & D/A"; ++static const char pci_device_16d5_3065[] = "PMC-AX3065 Reconfigurable FPGA with A/D & D/A"; ++static const char pci_device_16d5_4243[] = "PMC424, APC424, AcPC424 Digital I/O and Counter Timer Module"; ++static const char pci_device_16d5_4248[] = "PMC464, APC464, AcPC464 Digital I/O and Counter Timer Module"; ++static const char pci_device_16d5_424b[] = "PMC-DX2002 Reconfigurable FPGA with Differential I/O"; ++static const char pci_device_16d5_4253[] = "PMC-DX503 Reconfigurable FPGA with TTL and Differential I/O"; ++static const char pci_device_16d5_4312[] = "PMC-CX1002 Reconfigurable Conduction-Cooled FPGA Virtex-II with Differential I/O"; ++static const char pci_device_16d5_4313[] = "PMC-CX1003 Reconfigurable Conduction-Cooled FPGA Virtex-II with CMOS and Differential I/O"; ++static const char pci_device_16d5_4322[] = "PMC-CX2002 Reconfigurable Conduction-Cooled FPGA Virtex-II with Differential I/O"; ++static const char pci_device_16d5_4323[] = "PMC-CX2003 Reconfigurable Conduction-Cooled FPGA Virtex-II with CMOS and Differential I/O"; ++static const char pci_device_16d5_4350[] = "PMC-DX501 Reconfigurable Digital I/O Module"; ++static const char pci_device_16d5_4353[] = "PMC-DX2003 Reconfigurable FPGA with TTL and Differential I/O"; ++static const char pci_device_16d5_4357[] = "PMC-DX502 Reconfigurable Differential I/O Module"; ++static const char pci_device_16d5_4457[] = "PMC730, APC730, AcPC730 Multifunction Module"; ++static const char pci_device_16d5_464d[] = "PMC408 32-Channel Digital Input/Output Module"; ++static const char pci_device_16d5_4850[] = "PMC220-16 12-Bit Analog Output Module"; ++static const char pci_device_16d5_4a42[] = "PMC483, APC483, AcPC483 Counter Timer Module"; ++static const char pci_device_16d5_4a50[] = "PMC484, APC484, AcPC484 Counter Timer Module"; ++static const char pci_device_16d5_4a56[] = "PMC230 16-Bit Analog Output Module"; ++static const char pci_device_16d5_4b47[] = "PMC330, APC330, AcPC330 Analog Input Module, 16-bit A/D"; ++static const char pci_device_16d5_4c40[] = "PMC-LX40 Reconfigurable Virtex-4 FPGA with plug-in I/O"; ++static const char pci_device_16d5_4c60[] = "PMC-LX60 Reconfigurable Virtex-4 FPGA with plug-in I/O"; ++static const char pci_device_16d5_4d4d[] = "PMC341, APC341, AcPC341 Analog Input Module, Simultaneous Sample & Hold"; + static const char pci_device_16d5_4d4e[] = "PMC482, APC482, AcPC482 Counter Timer Board"; ++static const char pci_device_16d5_524d[] = "PMC-DX2001 Reconfigurable FPGA with TTL I/O"; ++static const char pci_device_16d5_5335[] = "PMC-SX35 Reconfigurable Virtex-4 FPGA with plug-in I/O"; ++static const char pci_device_16d5_5456[] = "PMC470 48-Channel Digital Input/Output Module"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_16df[] = "PIKA Technologies Inc."; +@@ -20152,6 +20991,7 @@ static const char pci_device_16e3_1e0f[] + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_16e5[] = "Intellon Corp."; + static const char pci_device_16e5_6000[] = "INT6000 Ethernet-to-Powerline Bridge [HomePlug AV]"; ++static const char pci_device_16e5_6300[] = "INT6300 Ethernet-to-Powerline Bridge [HomePlug AV]"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_16ec[] = "U.S. Robotics"; +@@ -20198,11 +21038,13 @@ static const char pci_device_172a_13c8[] + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1734[] = "Fujitsu Siemens Computer GmbH"; + static const char pci_device_1734_1078[] = "Amilo Pro v2010"; ++static const char pci_device_1734_1085[] = "Celsius M450"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1737[] = "Linksys"; + static const char pci_device_1737_0013[] = "WMP54G Wireless Pci Card"; + static const char pci_device_1737_0015[] = "WMP54GS Wireless Pci Card"; ++static const char pci_device_1737_0029[] = "WPG54G ver. 4 PCI Card"; + static const char pci_device_1737_1032[] = "Gigabit Network Adapter"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1737_1032_1737_0015[] = "EG1032 v2 Instant Gigabit Network Adapter"; +@@ -20250,6 +21092,9 @@ static const char pci_vendor_175e[] = "S + static const char pci_vendor_1775[] = "SBS Technologies"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const char pci_vendor_177d[] = "Cavium Networks"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1787[] = "Hightech Information System Ltd."; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -20351,6 +21196,7 @@ static const char pci_subsys_17d5_5832_1 + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_17db[] = "Cray Inc"; ++static const char pci_device_17db_0101[] = "XT Series [Seastar] 3D Toroidal Router"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_17de[] = "KWorld Computer Co. Ltd."; +@@ -20373,6 +21219,14 @@ static const char pci_vendor_17ee[] = "C + static const char pci_vendor_17f2[] = "Albatron Corp."; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const char pci_vendor_17f3[] = "RDC Semiconductor, Inc."; ++static const char pci_device_17f3_6020[] = "R6020 North Bridge"; ++static const char pci_device_17f3_6030[] = "R6030 ISA Bridge"; ++static const char pci_device_17f3_6040[] = "R6040 MAC Controller"; ++static const char pci_device_17f3_6060[] = "R6060 USB 1.1 Controller"; ++static const char pci_device_17f3_6061[] = "R6061 USB 2.0 Controller"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_17fe[] = "Linksys, A Division of Cisco Systems"; + static const char pci_device_17fe_2120[] = "WMP11v4 802.11b PCI card"; + static const char pci_device_17fe_2220[] = "[AirConn] INPROCOMM IPN 2220 Wireless LAN Adapter (rev 01)"; +@@ -20427,6 +21281,9 @@ static const char pci_subsys_1814_0201_1 + static const char pci_subsys_1814_0201_1458_e931[] = "GN-WIKG 802.11b/g mini-PCI Adapter"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1814_0201_1462_6833[] = "Unknown 802.11g mini-PCI Adapter"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1814_0201_1462_6835[] = "Wireless 11G CardBus CB54G2"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -20449,6 +21306,12 @@ static const char pci_subsys_1814_0301_1 + static const char pci_subsys_1814_0301_1186_3c09[] = "DWL-G510 Rev C"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1814_0301_13d1_abe3[] = "miniPCI Pluscom 802.11 a/b/g"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1814_0301_1458_e934[] = "GN-WP01GS"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1814_0301_1737_0055[] = "WMP54G ver 4.1"; + #endif + static const char pci_device_1814_0302[] = "RT2561/RT61 rev B 802.11g"; +@@ -20458,13 +21321,18 @@ static const char pci_subsys_1814_0302_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_1814_0302_1186_3c09[] = "DWL-G510 Rev C"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1814_0302_1462_b834[] = "PC54G3 Wireless 11g PCI Card"; ++#endif + static const char pci_device_1814_0401[] = "Ralink RT2600 802.11 MIMO"; ++static const char pci_device_1814_e932[] = "RT2560F 802.11 b/g PCI"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1820[] = "InfiniCon Systems Inc."; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1822[] = "Twinhan Technology Co. Ltd"; ++static const char pci_device_1822_0001[] = "Twinhan VisionPlus DVB [card=113]"; + static const char pci_device_1822_4e35[] = "Mantis DTV PCI Bridge Controller [Ver 1.0]"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -20523,6 +21391,16 @@ static const char pci_device_1867_6278[] + static const char pci_device_1867_6282[] = "MT25208 InfiniHost III Ex"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const char pci_vendor_186c[] = "Humusoft"; ++static const char pci_device_186c_0614[] = "MF614 multifunction I/O card"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const char pci_vendor_1876[] = "L-3 Communications"; ++static const char pci_device_1876_a101[] = "VigraWATCH PCI"; ++static const char pci_device_1876_a102[] = "VigraWATCH PMC"; ++static const char pci_device_1876_a103[] = "Vigra I/O"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_187e[] = "ZyXEL Communication Corporation"; + static const char pci_device_187e_3403[] = "ZyAir G-110 802.11g"; + static const char pci_device_187e_340e[] = "M-302 802.11g XtremeMIMO"; +@@ -20576,9 +21454,10 @@ static const char pci_vendor_18c8[] = "C + static const char pci_vendor_18c9[] = "ARVOO Engineering BV"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +-static const char pci_vendor_18ca[] = "XGI - Xabre Graphics Inc"; ++static const char pci_vendor_18ca[] = "XGI Technology Inc. (eXtreme Graphics Innovation)"; + static const char pci_device_18ca_0020[] = "Volari Z7"; + static const char pci_device_18ca_0040[] = "Volari V3XT/V5/V8"; ++static const char pci_device_18ca_0047[] = "Volari 8300 (chip: XP10, codename: XG47)"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_18d2[] = "Sitecom"; +@@ -20652,7 +21531,7 @@ static const char pci_device_1923_0300[] + static const char pci_device_1923_0400[] = "A104u Quad T1/E1 AFT"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +-static const char pci_vendor_1924[] = "Level 5 Networks Inc."; ++static const char pci_vendor_1924[] = "Solarflare Communications"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_192e[] = "TransDimension"; +@@ -20689,28 +21568,49 @@ static const char pci_device_1957_0087[] + static const char pci_vendor_1958[] = "Faster Technology, LLC."; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const char pci_vendor_1959[] = "PA Semi, Inc"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1966[] = "Orad Hi-Tec Systems"; + static const char pci_device_1966_1975[] = "DVG64 family"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1969[] = "Attansic Technology Corp."; + static const char pci_device_1969_1048[] = "L1 Gigabit Ethernet Adapter"; ++static const char pci_device_1969_2048[] = "L2 100 Mbit Ethernet Adapter"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_196a[] = "Sensory Networks Inc."; + static const char pci_device_196a_0101[] = "NodalCore C-1000 Content Classification Accelerator"; + static const char pci_device_196a_0102[] = "NodalCore C-2000 Content Classification Accelerator"; ++static const char pci_device_196a_0105[] = "NodalCore C-3000 Content Classification Accelerator"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_196d[] = "Club-3D BV"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const char pci_vendor_1971[] = "AGEIA Technologies, Inc."; ++static const char pci_device_1971_1011[] = "Physics Processing Unit [PhysX]"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_1971_1011_1043_0001[] = "PhysX P1"; ++#endif ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_197b[] = "JMicron Technologies, Inc."; + static const char pci_device_197b_2360[] = "JMicron 20360/20363 AHCI Controller"; + static const char pci_device_197b_2361[] = "JMB361 AHCI/IDE"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_197b_2361_1462_7235[] = "P965 Neo MS-7235 mainboard"; ++#endif + static const char pci_device_197b_2363[] = "JMicron 20360/20363 AHCI Controller"; + static const char pci_device_197b_2365[] = "JMB365 AHCI/IDE"; + static const char pci_device_197b_2366[] = "JMB366 AHCI/IDE"; ++static const char pci_device_197b_2368[] = "JMB368 IDE controller"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const char pci_vendor_1982[] = "Distant Early Warning Communications Inc"; ++static const char pci_device_1982_1600[] = "OX16C954 HOST-A"; ++static const char pci_device_1982_16ff[] = "OX16C954 HOST-B"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1989[] = "Montilio Inc."; +@@ -20724,6 +21624,11 @@ static const char pci_vendor_1993[] = "I + static const char pci_vendor_199a[] = "Pulse-LINK, Inc."; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const char pci_vendor_19a2[] = "ServerEngines LLC"; ++static const char pci_device_19a2_0200[] = "BladeEngine 10Gb PCI-E iSCSI adapter"; ++static const char pci_device_19a2_0201[] = "BladeEngine 10Gb PCI-E Network Adpater"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_19a8[] = "DAQDATA GmbH"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -20738,6 +21643,9 @@ static const char pci_device_19ae_0520[] + static const char pci_vendor_19d4[] = "Quixant Limited"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const char pci_vendor_19de[] = "Pico Computing"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_19e2[] = "Vector Informatik GmbH"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -20751,11 +21659,20 @@ static const char pci_device_19e7_1005[] + static const char pci_vendor_1a03[] = "ASPEED Technology, Inc."; + static const char pci_device_1a03_2000[] = "AST2000"; + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const char pci_vendor_1a07[] = "Kvaser AB"; ++static const char pci_device_1a07_0006[] = "CAN interface PC104+ HS/HS"; ++static const char pci_device_1a07_0007[] = "CAN interface PCIcanx II HS or HS/HS"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1a08[] = "Sierra semiconductor"; + static const char pci_device_1a08_0000[] = "SC15064"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1a1d[] = "GFaI e.V."; ++static const char pci_device_1a1d_1a17[] = "Meta Networks MTP-1G IDPS NIC"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const char pci_vendor_1a22[] = "Ambric Inc."; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1a29[] = "Fortinet, Inc."; +@@ -20764,6 +21681,29 @@ static const char pci_vendor_1a29[] = "F + static const char pci_vendor_1a51[] = "Hectronic AB"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const char pci_vendor_1a5d[] = "Celoxica"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const char pci_vendor_1a71[] = "XenSource, Inc."; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const char pci_vendor_1a73[] = "Violin Memory, Inc"; ++static const char pci_device_1a73_0001[] = "Mozart [Memory Appliance 1010]"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const char pci_vendor_1a77[] = "Lightfleet Corporation"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const char pci_vendor_1a78[] = "Virident Systems Inc."; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const char pci_vendor_1a8c[] = "Verigy Pte. Ltd."; ++static const char pci_device_1a8c_1100[] = "E8001-66443 PCI Express CIC"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const char pci_vendor_1ab9[] = "Espia Srl"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_1b13[] = "Jaton Corp"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -20844,6 +21784,9 @@ static const char pci_device_3388_0014[] + static const char pci_device_3388_0020[] = "HB6 Universal PCI-PCI bridge (transparent mode)"; + static const char pci_device_3388_0021[] = "HB6 Universal PCI-PCI bridge (non-transparent mode)"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_3388_0021_1775_c200[] = "C2K CompactPCI interface bridge"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_3388_0021_1775_ce90[] = "CE9"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -21000,6 +21943,13 @@ static const char pci_vendor_4033[] = "A + static const char pci_device_4033_1360[] = "RTL8139 Ethernet"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const char pci_vendor_4040[] = "NetXen Incorporated"; ++static const char pci_device_4040_0001[] = "NXB-10GXSR 10 Gigabit Ethernet PCIe Adapter with SR-XFP optical interface"; ++static const char pci_device_4040_0002[] = "NXB-10GCX4 10 Gigabit Ethernet PCIe Adapter with CX4 copper interface"; ++static const char pci_device_4040_0003[] = "NXB-4GCU Quad Gigabit Ethernet PCIe Adapter with 1000-BASE-T interface"; ++static const char pci_device_4040_0004[] = "BladeCenter-H 10 Gigabit Ethernet High Speed Daughter Card"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_4143[] = "Digital Equipment Corp"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -21015,6 +21965,9 @@ static const char pci_device_416c_0200[] + static const char pci_vendor_4321[] = "Tata Power Strategic Electronics Division"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const char pci_vendor_434e[] = "CAST Navigation LLC"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_4444[] = "Internext Compression Inc"; + static const char pci_device_4444_0016[] = "iTVC16 (CX23416) MPEG-2 Encoder"; + #ifdef INIT_SUBSYS_INFO +@@ -21168,6 +22121,10 @@ static const char pci_device_4d51_0200[] + static const char pci_vendor_4d54[] = "Microtechnica Co Ltd"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const char pci_vendor_4d56[] = "MATRIX VISION GmbH"; ++static const char pci_device_4d56_0000[] = "Altera Cyclone II CameraLink Frame Grabber [mvHYPERION-CLe]"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_4ddc[] = "ILC Data Device Corp"; + static const char pci_device_4ddc_0100[] = "DD-42924I5-300 (ARINC 429 Data Bus)"; + static const char pci_device_4ddc_0801[] = "BU-65570I1 MIL-STD-1553 Test and Simulation"; +@@ -21262,6 +22219,9 @@ static const char pci_device_5333_8904[] + static const char pci_subsys_5333_8904_1014_00db[] = "Integrated Trio3D"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_5333_8904_4843_314a[] = "Terminator 128/3D GLH"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_5333_8904_5333_8904[] = "86C365 Trio3D AGP"; + #endif + static const char pci_device_5333_8905[] = "Trio 64V+ family"; +@@ -21431,6 +22391,10 @@ static const char pci_device_5333_8d01[] + static const char pci_device_5333_8d02[] = "VT8636A [ProSavage KN133] AGP4X VGA Controller (TwisterK)"; + static const char pci_device_5333_8d03[] = "VT8751 [ProSavageDDR P4M266]"; + static const char pci_device_5333_8d04[] = "VT8375 [ProSavage8 KM266/KL266]"; ++static const char pci_device_5333_8e48[] = "Chrome S27 PCIE"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_5333_8e48_5333_0130[] = "Chrome S27 256M DDR2"; ++#endif + static const char pci_device_5333_9102[] = "86C410 Savage 2000"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_5333_9102_1092_5932[] = "Viper II Z200"; +@@ -21466,6 +22430,9 @@ static const char pci_vendor_5455[] = "T + static const char pci_device_5455_4458[] = "S5933"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const char pci_vendor_5456[] = "GoTView"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_5519[] = "Cnet Technologies, Inc."; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -21487,6 +22454,10 @@ static const char pci_vendor_5700[] = "N + static const char pci_vendor_5851[] = "Exacq Technologies"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const char pci_vendor_5853[] = "XenSource, Inc."; ++static const char pci_device_5853_0001[] = "Xen Platform Device"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_6356[] = "UltraStor"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -21579,6 +22550,9 @@ static const char pci_device_8086_0536[] + static const char pci_device_8086_0537[] = "E8870SP Interleave registers 2 and 3"; + static const char pci_device_8086_0600[] = "RAID Controller"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_0600_8086_0136[] = "SRCU31L"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_0600_8086_01af[] = "SRCZCR"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -21588,9 +22562,9 @@ static const char pci_subsys_8086_0600_8 + static const char pci_subsys_8086_0600_8086_01f7[] = "SCRU32"; + #endif + static const char pci_device_8086_061f[] = "80303 I/O Processor"; +-static const char pci_device_8086_0960[] = "80960RP [i960 RP Microprocessor/Bridge]"; +-static const char pci_device_8086_0962[] = "80960RM [i960RM Bridge]"; +-static const char pci_device_8086_0964[] = "80960RP [i960 RP Microprocessor/Bridge]"; ++static const char pci_device_8086_0960[] = "80960RP (i960RP) Microprocessor/Bridge"; ++static const char pci_device_8086_0962[] = "80960RM (i960RM) Bridge"; ++static const char pci_device_8086_0964[] = "80960RP (i960RP) Microprocessor/Bridge"; + static const char pci_device_8086_1000[] = "82542 Gigabit Ethernet Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_1000_0e11_b0df[] = "NC6132 Gigabit Ethernet Adapter (1000-SX)"; +@@ -21651,6 +22625,9 @@ static const char pci_device_8086_1008[] + static const char pci_subsys_8086_1008_1014_0269[] = "iSeries 1000/100/10 Ethernet Adapter"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_1008_1028_011b[] = "PowerEdge 2550"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_1008_1028_011c[] = "PRO/1000 XT Network Connection"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -21955,7 +22932,10 @@ static const char pci_device_8086_103b[] + static const char pci_device_8086_103c[] = "82801DB PRO/100 VM (CNR) Ethernet Controller"; + static const char pci_device_8086_103d[] = "82801DB PRO/100 VE (MOB) Ethernet Controller"; + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_8086_103d_1014_0522[] = "Thinkpad R50e model 1634"; ++static const char pci_subsys_8086_103d_1014_0522[] = "Thinkpad R40 model 2681"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_103d_8086_103d[] = "82562EZ 10/100 Ethernet Controller"; + #endif + static const char pci_device_8086_103e[] = "82801DB PRO/100 VM (MOB) Ethernet Controller"; + static const char pci_device_8086_1040[] = "536EP Data Fax Modem"; +@@ -21973,6 +22953,9 @@ static const char pci_subsys_8086_1043_8 + static const char pci_subsys_8086_1043_8086_2527[] = "MIM2000/Centrino"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_1043_8086_2561[] = "Dell Latitude D800"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_1043_8086_2581[] = "Toshiba Satellite M10"; + #endif + static const char pci_device_8086_1048[] = "PRO/10GbE LR Server Adapter"; +@@ -21983,6 +22966,9 @@ static const char pci_subsys_8086_1048_8 + static const char pci_subsys_8086_1048_8086_a11f[] = "PRO/10GbE LR Server Adapter"; + #endif + static const char pci_device_8086_1049[] = "82566MM Gigabit Network Connection"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_1049_17aa_20b9[] = "Lenovo Thinkpad T61"; ++#endif + static const char pci_device_8086_104a[] = "82566DM Gigabit Network Connection"; + static const char pci_device_8086_104b[] = "82566DC Gigabit Network Connection"; + static const char pci_device_8086_104c[] = "82562V 10/100 Network Connection"; +@@ -22017,6 +23003,9 @@ static const char pci_device_8086_105e[] + static const char pci_subsys_8086_105e_103c_7044[] = "NC360T PCI Express Dual Port Gigabit Server Adapter"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_105e_1775_1100[] = "CR11/VR11 Single Board Computer"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_105e_1775_6003[] = "Telum GE-QT"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -22229,6 +23218,9 @@ static const char pci_subsys_8086_109a_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_109a_8086_109a[] = "PRO/1000 PL Network Connection"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_109a_8086_309c[] = "DeskTop Board D945GTP"; ++#endif + static const char pci_device_8086_109b[] = "82546GB PRO/1000 GF Quad Port Server Adapter"; + static const char pci_device_8086_109e[] = "82597EX 10GbE Ethernet Controller"; + #ifdef INIT_SUBSYS_INFO +@@ -22246,6 +23238,7 @@ static const char pci_subsys_8086_10a4_8 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_10a4_8086_11a4[] = "PRO/1000 PT Quad Port Server Adapter"; + #endif ++static const char pci_device_8086_10a5[] = "82571EB PRO/1000 PF Quad Port Server Adapter"; + static const char pci_device_8086_10b0[] = "82573L PRO/1000 PL Network Connection"; + static const char pci_device_8086_10b2[] = "82573V PRO/1000 PM Network Connection"; + static const char pci_device_8086_10b3[] = "82573E PRO/1000 PM Network Connection"; +@@ -22260,6 +23253,7 @@ static const char pci_subsys_8086_10b5_8 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_10b5_8086_1199[] = "PRO/1000 GT Quad Port Server Adapter"; + #endif ++static const char pci_device_8086_10b6[] = "82598 10GbE PCI-Express Ethernet Controller"; + static const char pci_device_8086_10b9[] = "82572EI Gigabit Ethernet Controller (Copper)"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_10b9_8086_1083[] = "PRO/1000 PT Desktop Adapter"; +@@ -22276,8 +23270,16 @@ static const char pci_subsys_8086_10bc_8 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_10bc_8086_11bc[] = "PRO/1000 PT Quad Port LP Server Adapter"; + #endif ++static const char pci_device_8086_10bd[] = "82566DM-2 Gigabit Network Connection"; ++static const char pci_device_8086_10c0[] = "82562V-2 10/100 Network Connection"; ++static const char pci_device_8086_10c2[] = "82562G-2 10/100 Network Connection"; ++static const char pci_device_8086_10c3[] = "82562GT-2 10/100 Network Connection"; + static const char pci_device_8086_10c4[] = "82562GT 10/100 Network Connection"; + static const char pci_device_8086_10c5[] = "82562G 10/100 Network Connection"; ++static const char pci_device_8086_10c6[] = "82598AF DUAL PORT 10GbE PCI-Express Ethernet Controller"; ++static const char pci_device_8086_10c7[] = "82598AF SINGLE PORT 10GbE PCI-Express Ethernet Controller"; ++static const char pci_device_8086_10d9[] = "82571EB Dual Port Gigabit Mezzanine Adapter"; ++static const char pci_device_8086_10da[] = "82571EB Quad Port Gigabit Mezzanine Adapter"; + static const char pci_device_8086_1107[] = "PRO/1000 MF Server Adapter (LX)"; + static const char pci_device_8086_1130[] = "82815 815 Chipset Host Bridge and Memory Controller Hub"; + #ifdef INIT_SUBSYS_INFO +@@ -22296,7 +23298,7 @@ static const char pci_subsys_8086_1130_8 + static const char pci_subsys_8086_1130_8086_4557[] = "D815EGEW Mainboard"; + #endif + static const char pci_device_8086_1131[] = "82815 815 Chipset AGP Bridge"; +-static const char pci_device_8086_1132[] = "82815 CGC [Chipset Graphics Controller]"; ++static const char pci_device_8086_1132[] = "82815 Chipset Graphics Controller (CGC)"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_1132_1025_1016[] = "Travelmate 612 TX"; + #endif +@@ -22338,7 +23340,7 @@ static const char pci_device_8086_1225[] + static const char pci_device_8086_1226[] = "82596 PRO/10 PCI"; + static const char pci_device_8086_1227[] = "82865 EtherExpress PRO/100A"; + static const char pci_device_8086_1228[] = "82556 EtherExpress PRO/100 Smart"; +-static const char pci_device_8086_1229[] = "82557/8/9 [Ethernet Pro 100]"; ++static const char pci_device_8086_1229[] = "82557/8/9 Ethernet Pro 100"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_1229_0e11_3001[] = "82559 Fast Ethernet LOM with Alert on LAN*"; + #endif +@@ -22544,6 +23546,9 @@ static const char pci_subsys_8086_1229_1 + static const char pci_subsys_8086_1229_1668_1100[] = "EtherExpress PRO/100B (TX) (MiniPCI Ethernet+Modem)"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_1229_1775_1100[] = "CR11/VR11 Single Board Computer"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_1229_1775_ce90[] = "CE9"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -22577,7 +23582,7 @@ static const char pci_subsys_8086_1229_8 + static const char pci_subsys_8086_1229_8086_0008[] = "82558 10/100 with Wake on LAN"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_8086_1229_8086_0009[] = "PRO/100+ PCI (TP)"; ++static const char pci_subsys_8086_1229_8086_0009[] = "82558B PRO/100+ PCI (TP)"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_1229_8086_000a[] = "EtherExpress PRO/100+ Management Adapter"; +@@ -22843,7 +23848,7 @@ static const char pci_subsys_8086_1461_1 + static const char pci_subsys_8086_1461_4c53_1090[] = "Cx9/Vx9 mainboard"; + #endif + static const char pci_device_8086_1462[] = "82870P2 P64H2 Hot Plug Controller"; +-static const char pci_device_8086_1960[] = "80960RP [i960RP Microprocessor]"; ++static const char pci_device_8086_1960[] = "80960RP (i960RP) Microprocessor"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_1960_101e_0431[] = "MegaRAID 431 RAID Controller"; + #endif +@@ -22916,18 +23921,18 @@ static const char pci_subsys_8086_1960_e + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_1960_e4bf_3100[] = "CX1-BAND"; + #endif +-static const char pci_device_8086_1962[] = "80960RM [i960RM Microprocessor]"; ++static const char pci_device_8086_1962[] = "80960RM (i960RM) Microprocessor"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_1962_105a_0000[] = "SuperTrak SX6000 I2O CPU"; + #endif +-static const char pci_device_8086_1a21[] = "82840 840 (Carmel) Chipset Host Bridge (Hub A)"; +-static const char pci_device_8086_1a23[] = "82840 840 (Carmel) Chipset AGP Bridge"; +-static const char pci_device_8086_1a24[] = "82840 840 (Carmel) Chipset PCI Bridge (Hub B)"; +-static const char pci_device_8086_1a30[] = "82845 845 (Brookdale) Chipset Host Bridge"; ++static const char pci_device_8086_1a21[] = "82840 840 [Carmel] Chipset Host Bridge (Hub A)"; ++static const char pci_device_8086_1a23[] = "82840 840 [Carmel] Chipset AGP Bridge"; ++static const char pci_device_8086_1a24[] = "82840 840 [Carmel] Chipset PCI Bridge (Hub B)"; ++static const char pci_device_8086_1a30[] = "82845 845 [Brookdale] Chipset Host Bridge"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_1a30_1028_010e[] = "Optiplex GX240"; + #endif +-static const char pci_device_8086_1a31[] = "82845 845 (Brookdale) Chipset AGP Bridge"; ++static const char pci_device_8086_1a31[] = "82845 845 [Brookdale] Chipset AGP Bridge"; + static const char pci_device_8086_1a38[] = "5000 Series Chipset DMA Engine"; + static const char pci_device_8086_1a48[] = "PRO/10GbE SR Server Adapter"; + static const char pci_device_8086_1b48[] = "82597EX 10GbE Ethernet Controller"; +@@ -22938,14 +23943,17 @@ static const char pci_subsys_8086_1b48_8 + static const char pci_subsys_8086_1b48_8086_a11f[] = "PRO/10GbE LR Server Adapter"; + #endif + static const char pci_device_8086_2410[] = "82801AA ISA Bridge (LPC)"; +-static const char pci_device_8086_2411[] = "82801AA IDE"; +-static const char pci_device_8086_2412[] = "82801AA USB"; +-static const char pci_device_8086_2413[] = "82801AA SMBus"; +-static const char pci_device_8086_2415[] = "82801AA AC'97 Audio"; ++static const char pci_device_8086_2411[] = "82801AA IDE Controller"; ++static const char pci_device_8086_2412[] = "82801AA USB Controller"; ++static const char pci_device_8086_2413[] = "82801AA SMBus Controller"; ++static const char pci_device_8086_2415[] = "82801AA AC'97 Audio Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2415_1028_0095[] = "Precision Workstation 220 Integrated Digital Audio"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2415_1028_00b4[] = "OptiPlex GX110"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2415_110a_0051[] = "Activy 2xx"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -22960,26 +23968,26 @@ static const char pci_subsys_8086_2415_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2415_1734_1025[] = "Activy 3xx"; + #endif +-static const char pci_device_8086_2416[] = "82801AA AC'97 Modem"; ++static const char pci_device_8086_2416[] = "82801AA AC'97 Modem Controller"; + static const char pci_device_8086_2418[] = "82801AA PCI Bridge"; + static const char pci_device_8086_2420[] = "82801AB ISA Bridge (LPC)"; +-static const char pci_device_8086_2421[] = "82801AB IDE"; +-static const char pci_device_8086_2422[] = "82801AB USB"; +-static const char pci_device_8086_2423[] = "82801AB SMBus"; +-static const char pci_device_8086_2425[] = "82801AB AC'97 Audio"; ++static const char pci_device_8086_2421[] = "82801AB IDE Controller"; ++static const char pci_device_8086_2422[] = "82801AB USB Controller"; ++static const char pci_device_8086_2423[] = "82801AB SMBus Controller"; ++static const char pci_device_8086_2425[] = "82801AB AC'97 Audio Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2425_11d4_0040[] = "SoundMAX Integrated Digital Audio"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2425_11d4_0048[] = "SoundMAX Integrated Digital Audio"; + #endif +-static const char pci_device_8086_2426[] = "82801AB AC'97 Modem"; ++static const char pci_device_8086_2426[] = "82801AB AC'97 Modem Controller"; + static const char pci_device_8086_2428[] = "82801AB PCI Bridge"; + static const char pci_device_8086_2440[] = "82801BA ISA Bridge (LPC)"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2440_8086_5744[] = "S845WD1-E"; + #endif +-static const char pci_device_8086_2442[] = "82801BA/BAM USB (Hub #1)"; ++static const char pci_device_8086_2442[] = "82801BA/BAM USB Controller #1"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2442_1014_01c6[] = "Netvista A40/A40p"; + #endif +@@ -23010,7 +24018,7 @@ static const char pci_subsys_8086_2442_8 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2442_8086_5744[] = "S845WD1-E mainboard"; + #endif +-static const char pci_device_8086_2443[] = "82801BA/BAM SMBus"; ++static const char pci_device_8086_2443[] = "82801BA/BAM SMBus Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2443_1014_01c6[] = "Netvista A40/A40p"; + #endif +@@ -23041,7 +24049,7 @@ static const char pci_subsys_8086_2443_8 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2443_8086_5744[] = "S845WD1-E mainboard"; + #endif +-static const char pci_device_8086_2444[] = "82801BA/BAM USB (Hub #2)"; ++static const char pci_device_8086_2444[] = "82801BA/BAM USB Controller #1"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2444_1025_1016[] = "Travelmate 612 TX"; + #endif +@@ -23066,7 +24074,7 @@ static const char pci_subsys_8086_2444_8 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2444_8086_5744[] = "S845WD1-E mainboard"; + #endif +-static const char pci_device_8086_2445[] = "82801BA/BAM AC'97 Audio"; ++static const char pci_device_8086_2445[] = "82801BA/BAM AC'97 Audio Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2445_0e11_000b[] = "Compaq Deskpro EN Audio"; + #endif +@@ -23091,7 +24099,7 @@ static const char pci_subsys_8086_2445_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2445_8086_4557[] = "D815EGEW Mainboard"; + #endif +-static const char pci_device_8086_2446[] = "82801BA/BAM AC'97 Modem"; ++static const char pci_device_8086_2446[] = "82801BA/BAM AC'97 Modem Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2446_1025_1016[] = "Travelmate 612 TX"; + #endif +@@ -23100,6 +24108,9 @@ static const char pci_subsys_8086_2446_1 + #endif + static const char pci_device_8086_2448[] = "82801 Mobile PCI Bridge"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2448_103c_0934[] = "HP Compaq nw8240 Mobile Workstation"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2448_103c_099c[] = "NX6110/NC6120"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -23199,14 +24210,14 @@ static const char pci_subsys_8086_2449_8 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2449_8086_3018[] = "EtherExpress PRO/100"; + #endif +-static const char pci_device_8086_244a[] = "82801BAM IDE U100"; ++static const char pci_device_8086_244a[] = "82801BAM IDE U100 Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_244a_1025_1016[] = "Travelmate 612TX"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_244a_104d_80df[] = "Vaio PCG-FX403"; + #endif +-static const char pci_device_8086_244b[] = "82801BA IDE U100"; ++static const char pci_device_8086_244b[] = "82801BA IDE U100 Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_244b_1014_01c6[] = "Netvista A40/A40p"; + #endif +@@ -23237,14 +24248,14 @@ static const char pci_device_8086_244e[] + static const char pci_subsys_8086_244e_1014_0267[] = "NetVista A30p"; + #endif + static const char pci_device_8086_2450[] = "82801E ISA Bridge (LPC)"; +-static const char pci_device_8086_2452[] = "82801E USB"; +-static const char pci_device_8086_2453[] = "82801E SMBus"; ++static const char pci_device_8086_2452[] = "82801E USB Controller"; ++static const char pci_device_8086_2453[] = "82801E SMBus Controller"; + static const char pci_device_8086_2459[] = "82801E Ethernet Controller 0"; +-static const char pci_device_8086_245b[] = "82801E IDE U100"; ++static const char pci_device_8086_245b[] = "82801E IDE U100 Controller"; + static const char pci_device_8086_245d[] = "82801E Ethernet Controller 1"; + static const char pci_device_8086_245e[] = "82801E PCI Bridge"; + static const char pci_device_8086_2480[] = "82801CA LPC Interface Controller"; +-static const char pci_device_8086_2482[] = "82801CA/CAM USB (Hub #1)"; ++static const char pci_device_8086_2482[] = "82801CA/CAM USB Controller #1"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2482_0e11_0030[] = "Evo N600c"; + #endif +@@ -23279,7 +24290,7 @@ static const char pci_subsys_8086_2483_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2483_8086_1958[] = "vpr Matrix 170B4"; + #endif +-static const char pci_device_8086_2484[] = "82801CA/CAM USB (Hub #2)"; ++static const char pci_device_8086_2484[] = "82801CA/CAM USB Controller #2"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2484_0e11_0030[] = "Evo N600c"; + #endif +@@ -23309,6 +24320,15 @@ static const char pci_subsys_8086_2485_1 + static const char pci_subsys_8086_2485_1014_051c[] = "ThinkPad A/T/X Series"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2485_1043_1583[] = "L3C (SPDIF)"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2485_1043_1623[] = "L2B (no SPDIF)"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2485_1043_1643[] = "L3F"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2485_104d_80e7[] = "VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -23339,7 +24359,7 @@ static const char pci_subsys_8086_2486_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2486_14f1_5421[] = "MD56ORD V.92 MDC Modem"; + #endif +-static const char pci_device_8086_2487[] = "82801CA/CAM USB (Hub #3)"; ++static const char pci_device_8086_2487[] = "82801CA/CAM USB Controller #3"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2487_0e11_0030[] = "Evo N600c"; + #endif +@@ -23355,7 +24375,7 @@ static const char pci_subsys_8086_2487_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2487_8086_1958[] = "vpr Matrix 170B4"; + #endif +-static const char pci_device_8086_248a[] = "82801CAM IDE U100"; ++static const char pci_device_8086_248a[] = "82801CAM IDE U100 Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_248a_0e11_0030[] = "Evo N600c"; + #endif +@@ -23389,7 +24409,7 @@ static const char pci_device_8086_24c2[] + static const char pci_subsys_8086_24c2_1014_0267[] = "NetVista A30p"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_8086_24c2_1014_052d[] = "Thinkpad R50e model 1634"; ++static const char pci_subsys_8086_24c2_1014_052d[] = "ThinkPad"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24c2_1025_005a[] = "TravelMate 290"; +@@ -23416,7 +24436,7 @@ static const char pci_subsys_8086_24c2_1 + static const char pci_subsys_8086_24c2_1071_8160[] = "MIM2000"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_8086_24c2_144d_c00c[] = "P30 notebook"; ++static const char pci_subsys_8086_24c2_144d_c00c[] = "P30/P35 notebook"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24c2_1462_5800[] = "845PE Max (MS-6580)"; +@@ -23434,14 +24454,23 @@ static const char pci_subsys_8086_24c2_1 + static const char pci_subsys_8086_24c2_4c53_1090[] = "Cx9 / Vx9 mainboard"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24c2_8086_24c2[] = "Latitude X300"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24c2_8086_4541[] = "Latitude D400"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24c2_e4bf_0cc9[] = "CC9-SAMBA"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24c2_e4bf_0cd2[] = "CD2-BEBOP"; ++#endif + static const char pci_device_8086_24c3[] = "82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) SMBus Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24c3_1014_0267[] = "NetVista A30p"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_8086_24c3_1014_052d[] = "Thinkpad R50e model 1634"; ++static const char pci_subsys_8086_24c3_1014_052d[] = "ThinkPad"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24c3_1025_005a[] = "TravelMate 290"; +@@ -23450,6 +24479,9 @@ static const char pci_subsys_8086_24c3_1 + static const char pci_subsys_8086_24c3_1028_0126[] = "Optiplex GX260"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24c3_1028_014f[] = "Latitude X300"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24c3_103c_088c[] = "NC8000 laptop"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -23462,6 +24494,9 @@ static const char pci_subsys_8086_24c3_1 + static const char pci_subsys_8086_24c3_1071_8160[] = "MIM2000"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24c3_144d_c005[] = "Samsung X10 Laptop"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24c3_144d_c00c[] = "P30/P35 notebook"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -23479,12 +24514,18 @@ static const char pci_subsys_8086_24c3_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24c3_4c53_1090[] = "Cx9 / Vx9 mainboard"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24c3_e4bf_0cc9[] = "CC9-SAMBA"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24c3_e4bf_0cd2[] = "CD2-BEBOP"; ++#endif + static const char pci_device_8086_24c4[] = "82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #2"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24c4_1014_0267[] = "NetVista A30p"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_8086_24c4_1014_052d[] = "Thinkpad R50e model 1634"; ++static const char pci_subsys_8086_24c4_1014_052d[] = "ThinkPad"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24c4_1025_005a[] = "TravelMate 290"; +@@ -23511,7 +24552,7 @@ static const char pci_subsys_8086_24c4_1 + static const char pci_subsys_8086_24c4_1071_8160[] = "MIM2000"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_8086_24c4_144d_c00c[] = "P30 notebook"; ++static const char pci_subsys_8086_24c4_144d_c00c[] = "P30/P35 notebook"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24c4_1462_5800[] = "845PE Max (MS-6580)"; +@@ -23526,8 +24567,17 @@ static const char pci_subsys_8086_24c4_1 + static const char pci_subsys_8086_24c4_4c53_1090[] = "Cx9 / Vx9 mainboard"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24c4_8086_24c2[] = "Latitude X300"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24c4_8086_4541[] = "Latitude D400"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24c4_e4bf_0cc9[] = "CC9-SAMBA"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24c4_e4bf_0cd2[] = "CD2-BEBOP"; ++#endif + static const char pci_device_8086_24c5[] = "82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Audio Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24c5_0e11_00b8[] = "Analog Devices Inc. codec [SoundMAX]"; +@@ -23536,6 +24586,9 @@ static const char pci_subsys_8086_24c5_0 + static const char pci_subsys_8086_24c5_1014_0267[] = "NetVista A30p"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24c5_1014_0537[] = "ThinkPad T41"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24c5_1014_055f[] = "Thinkpad R50e model 1634"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -23545,6 +24598,9 @@ static const char pci_subsys_8086_24c5_1 + static const char pci_subsys_8086_24c5_1028_0139[] = "Latitude D400"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24c5_1028_014f[] = "Latitude X300"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24c5_1028_0163[] = "Latitude D505"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -23563,7 +24619,10 @@ static const char pci_subsys_8086_24c5_1 + static const char pci_subsys_8086_24c5_1071_8160[] = "MIM2000"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_8086_24c5_144d_c00c[] = "P30 notebook"; ++static const char pci_subsys_8086_24c5_144d_c005[] = "Samsung X10 Laptop"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24c5_144d_c00c[] = "P30/P35 notebook"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24c5_1458_a002[] = "GA-8PE667 Ultra"; +@@ -23577,8 +24636,20 @@ static const char pci_subsys_8086_24c5_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24c5_1734_1055[] = "Amilo M1420"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24c5_8086_24c5[] = "Dell Dimension 2400"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24c5_a002_1458[] = "Realtek AC'97 codec [ALC655]"; ++#endif + static const char pci_device_8086_24c6[] = "82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Modem Controller"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24c6_1014_0524[] = "Thinkpad T41"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24c6_1014_0525[] = "ThinkPad"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24c6_1014_0559[] = "Thinkpad R50e model 1634"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -23603,14 +24674,17 @@ static const char pci_subsys_8086_24c6_1 + static const char pci_subsys_8086_24c6_1071_8160[] = "MIM2000"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_8086_24c6_144d_c00c[] = "P30 notebook"; ++static const char pci_subsys_8086_24c6_144d_2115[] = "Samsung X10 Laptop"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24c6_144d_c00c[] = "P30/P35 notebook"; + #endif + static const char pci_device_8086_24c7[] = "82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24c7_1014_0267[] = "NetVista A30p"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_8086_24c7_1014_052d[] = "Thinkpad R50e model 1634"; ++static const char pci_subsys_8086_24c7_1014_052d[] = "ThinkPad"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24c7_1025_005a[] = "TravelMate 290"; +@@ -23637,7 +24711,7 @@ static const char pci_subsys_8086_24c7_1 + static const char pci_subsys_8086_24c7_1071_8160[] = "MIM2000"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_8086_24c7_144d_c00c[] = "P30 notebook"; ++static const char pci_subsys_8086_24c7_144d_c00c[] = "P30/P35 notebook"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24c7_1462_5800[] = "845PE Max (MS-6580)"; +@@ -23652,16 +24726,28 @@ static const char pci_subsys_8086_24c7_1 + static const char pci_subsys_8086_24c7_4c53_1090[] = "Cx9 / Vx9 mainboard"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24c7_8086_24c2[] = "Latitude X300"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24c7_8086_4541[] = "Latitude D400"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24c7_e4bf_0cc9[] = "CC9-SAMBA"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24c7_e4bf_0cd2[] = "CD2-BEBOP"; ++#endif + static const char pci_device_8086_24ca[] = "82801DBM (ICH4-M) IDE Controller"; + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_8086_24ca_1014_052d[] = "Thinkpad R50e model 1634"; ++static const char pci_subsys_8086_24ca_1014_052d[] = "ThinkPad"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24ca_1025_005a[] = "TravelMate 290"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24ca_1028_014f[] = "Latitude X300"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24ca_1028_0163[] = "Latitude D505"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -23680,7 +24766,7 @@ static const char pci_subsys_8086_24ca_1 + static const char pci_subsys_8086_24ca_1071_8160[] = "MIM2000"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_8086_24ca_144d_c00c[] = "P30 notebook"; ++static const char pci_subsys_8086_24ca_144d_c00c[] = "P30/P35 notebook"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24ca_1734_1055[] = "Amilo M1420"; +@@ -23707,6 +24793,12 @@ static const char pci_subsys_8086_24cb_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24cb_4c53_1090[] = "Cx9 / Vx9 mainboard"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24cb_e4bf_0cc9[] = "CC9-SAMBA"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24cb_e4bf_0cd2[] = "CD2-BEBOP"; ++#endif + static const char pci_device_8086_24cc[] = "82801DBM (ICH4-M) LPC Interface Bridge"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24cc_144d_c00c[] = "P30 notebook"; +@@ -23719,7 +24811,7 @@ static const char pci_device_8086_24cd[] + static const char pci_subsys_8086_24cd_1014_0267[] = "NetVista A30p"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_8086_24cd_1014_052e[] = "Thinkpad R50e model 1634"; ++static const char pci_subsys_8086_24cd_1014_052e[] = "ThinkPad"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24cd_1025_005a[] = "TravelMate 290"; +@@ -23755,7 +24847,7 @@ static const char pci_subsys_8086_24cd_1 + static const char pci_subsys_8086_24cd_1179_ff00[] = "Satellite 2430"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_8086_24cd_144d_c00c[] = "P30 notebook"; ++static const char pci_subsys_8086_24cd_144d_c00c[] = "P30/P35 notebook"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24cd_1462_3981[] = "845PE Max (MS-6580)"; +@@ -23772,6 +24864,15 @@ static const char pci_subsys_8086_24cd_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24cd_4c53_1090[] = "Cx9 / Vx9 mainboard"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24cd_8086_24c2[] = "Latitude X300"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24cd_e4bf_0cc9[] = "CC9-SAMBA"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24cd_e4bf_0cd2[] = "CD2-BEBOP"; ++#endif + static const char pci_device_8086_24d0[] = "82801EB/ER (ICH5/ICH5R) LPC Interface Bridge"; + static const char pci_device_8086_24d1[] = "82801EB (ICH5) SATA Controller"; + #ifdef INIT_SUBSYS_INFO +@@ -23793,6 +24894,9 @@ static const char pci_subsys_8086_24d1_1 + static const char pci_subsys_8086_24d1_1462_7280[] = "865PE Neo2 (MS-6728)"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24d1_1565_5200[] = "P4TSV Motherboard (865G)"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24d1_15d9_4580[] = "P4SCE Mainboard"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -23809,7 +24913,10 @@ static const char pci_subsys_8086_24d1_8 + #endif + static const char pci_device_8086_24d2[] = "82801EB/ER (ICH5/ICH5R) USB UHCI Controller #1"; + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_8086_24d2_1014_02ed[] = "xSeries server mainboard"; ++static const char pci_subsys_8086_24d2_1014_02dd[] = "eServer xSeries server mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24d2_1014_02ed[] = "eServer xSeries server mainboard"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24d2_1028_0169[] = "Precision 470"; +@@ -23836,6 +24943,9 @@ static const char pci_subsys_8086_24d2_1 + static const char pci_subsys_8086_24d2_1462_7280[] = "865PE Neo2 (MS-6728)"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24d2_1565_3101[] = "P4TSV Motherboard (865G)"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24d2_15d9_4580[] = "P4SCE Mainboard"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -23855,7 +24965,10 @@ static const char pci_subsys_8086_24d2_8 + #endif + static const char pci_device_8086_24d3[] = "82801EB/ER (ICH5/ICH5R) SMBus Controller"; + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_8086_24d3_1014_02ed[] = "xSeries server mainboard"; ++static const char pci_subsys_8086_24d3_1014_02dd[] = "eServer xSeries server mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24d3_1014_02ed[] = "eServer xSeries server mainboard"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24d3_1028_0156[] = "Precision 360"; +@@ -23876,6 +24989,9 @@ static const char pci_subsys_8086_24d3_1 + static const char pci_subsys_8086_24d3_1462_7280[] = "865PE Neo2 (MS-6728)"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24d3_1565_3101[] = "P4TSV Motherboard (865G)"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24d3_15d9_4580[] = "P4SCE Mainboard"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -23895,7 +25011,10 @@ static const char pci_subsys_8086_24d3_8 + #endif + static const char pci_device_8086_24d4[] = "82801EB/ER (ICH5/ICH5R) USB UHCI Controller #2"; + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_8086_24d4_1014_02ed[] = "xSeries server mainboard"; ++static const char pci_subsys_8086_24d4_1014_02dd[] = "eServer xSeries server mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24d4_1014_02ed[] = "eServer xSeries server mainboard"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24d4_1028_0169[] = "Precision 470"; +@@ -23922,6 +25041,9 @@ static const char pci_subsys_8086_24d4_1 + static const char pci_subsys_8086_24d4_1462_7280[] = "865PE Neo2 (MS-6728)"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24d4_1565_3101[] = "P4TSV Motherboard (865G)"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24d4_15d9_4580[] = "P4SCE Mainboard"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -24009,6 +25131,9 @@ static const char pci_subsys_8086_24d7_1 + static const char pci_subsys_8086_24d7_1462_7280[] = "865PE Neo2 (MS-6728)"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24d7_1565_3101[] = "P4TSV Motherboard (865G)"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24d7_15d9_4580[] = "P4SCE Mainboard"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -24028,7 +25153,10 @@ static const char pci_subsys_8086_24d7_8 + #endif + static const char pci_device_8086_24db[] = "82801EB/ER (ICH5/ICH5R) IDE Controller"; + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_8086_24db_1014_02ed[] = "xSeries server mainboard"; ++static const char pci_subsys_8086_24db_1014_02dd[] = "eServer xSeries server mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24db_1014_02ed[] = "eServer xSeries server mainboard"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24db_1028_0169[] = "Precision 470"; +@@ -24055,6 +25183,9 @@ static const char pci_subsys_8086_24db_1 + static const char pci_subsys_8086_24db_1462_7580[] = "MSI 875P"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24db_1565_3101[] = "P4TSV Motherboard (865G)"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24db_15d9_4580[] = "P4SCE Mainboard"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -24078,7 +25209,10 @@ static const char pci_subsys_8086_24db_8 + static const char pci_device_8086_24dc[] = "82801EB (ICH5) LPC Interface Bridge"; + static const char pci_device_8086_24dd[] = "82801EB/ER (ICH5/ICH5R) USB2 EHCI Controller"; + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_8086_24dd_1014_02ed[] = "xSeries server mainboard"; ++static const char pci_subsys_8086_24dd_1014_02dd[] = "eServer xSeries server mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24dd_1014_02ed[] = "eServer xSeries server mainboard"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24dd_1028_0169[] = "Precision 470"; +@@ -24133,6 +25267,9 @@ static const char pci_subsys_8086_24de_1 + static const char pci_subsys_8086_24de_1462_7280[] = "865PE Neo2 (MS-6728)"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_24de_1565_3101[] = "P4TSV Motherboard (865G)"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_24de_15d9_4580[] = "P4SCE Mainboard"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -24232,6 +25369,9 @@ static const char pci_subsys_8086_2562_0 + static const char pci_subsys_8086_2562_1014_0267[] = "NetVista A30p"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2562_1734_1003[] = "D1521 Mainboard (Fujitsu-Siemens)"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2562_1734_1004[] = "D1451 Mainboard (SCENIC N300, i845GV)"; + #endif + static const char pci_device_8086_2570[] = "82865G/PE/P DRAM Controller/Host-Hub Interface"; +@@ -24306,6 +25446,9 @@ static const char pci_subsys_8086_2582_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2582_1734_105b[] = "Scenic W620"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2582_1849_2582[] = "ASRock P4Dual-915GL"; ++#endif + static const char pci_device_8086_2584[] = "82925X/XE Memory Controller Hub"; + static const char pci_device_8086_2585[] = "82925X/XE PCI Express Root Port"; + static const char pci_device_8086_2588[] = "E7220/E7221 Memory Controller Hub"; +@@ -24316,12 +25459,30 @@ static const char pci_device_8086_2590[] + static const char pci_subsys_8086_2590_1028_0182[] = "Dell Latidude C610"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2590_103c_0934[] = "HP Compaq nw8240 Mobile Workstation"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2590_103c_099c[] = "NX6110/NC6120"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2590_104d_81b7[] = "Vaio VGN-S3XP"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2590_a304_81b7[] = "Vaio VGN-S3XP"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2590_e4bf_0ccd[] = "CCD-CALYPSO"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2590_e4bf_0cd3[] = "CD3-JIVE"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2590_e4bf_58b1[] = "XB1"; ++#endif + static const char pci_device_8086_2591[] = "Mobile 915GM/PM Express PCI Express Root Port"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2591_103c_0934[] = "HP Compaq nw8240 Mobile Workstation"; ++#endif + static const char pci_device_8086_2592[] = "Mobile 915GM/GMS/910GML Express Graphics Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2592_103c_099c[] = "NX6110/NC6120"; +@@ -24332,12 +25493,24 @@ static const char pci_subsys_8086_2592_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2592_1043_1881[] = "GMA 900 915GM Integrated Graphics"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2592_e4bf_0ccd[] = "CCD-CALYPSO"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2592_e4bf_0cd3[] = "CD3-JIVE"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2592_e4bf_58b1[] = "XB1"; ++#endif + static const char pci_device_8086_25a1[] = "6300ESB LPC Interface Controller"; + static const char pci_device_8086_25a2[] = "6300ESB PATA Storage Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_25a2_1775_10d0[] = "V5D Single Board Computer IDE"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_25a2_1775_1100[] = "CR11/VR11 Single Board Computer"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_25a2_1775_ce90[] = "CE9"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -24348,6 +25521,9 @@ static const char pci_subsys_8086_25a2_4 + #endif + static const char pci_device_8086_25a3[] = "6300ESB SATA Storage Controller"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_25a3_1775_1100[] = "CR11/VR11 Single Board Computer"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_25a3_1775_ce90[] = "CE9"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -24364,6 +25540,9 @@ static const char pci_device_8086_25a4[] + static const char pci_subsys_8086_25a4_1775_10d0[] = "V5D Single Board Computer"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_25a4_1775_1100[] = "CR11/VR11 Single Board Computer"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_25a4_1775_ce90[] = "CE9"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -24377,6 +25556,9 @@ static const char pci_subsys_8086_25a4_4 + #endif + static const char pci_device_8086_25a6[] = "6300ESB AC'97 Audio Controller"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_25a6_1775_1100[] = "CR11/VR11 Single Board Computer"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_25a6_1775_ce90[] = "CE9"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -24388,6 +25570,9 @@ static const char pci_device_8086_25a9[] + static const char pci_subsys_8086_25a9_1775_10d0[] = "V5D Single Board Computer USB"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_25a9_1775_1100[] = "CR11/VR11 Single Board Computer"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_25a9_1775_ce90[] = "CE9"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -24401,6 +25586,9 @@ static const char pci_subsys_8086_25a9_4 + #endif + static const char pci_device_8086_25aa[] = "6300ESB USB Universal Host Controller"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_25aa_1775_1100[] = "CR11/VR11 Single Board Computer"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_25aa_1775_ce90[] = "CE9"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -24414,6 +25602,9 @@ static const char pci_device_8086_25ab[] + static const char pci_subsys_8086_25ab_1775_10d0[] = "V5D Single Board Computer"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_25ab_1775_1100[] = "CR11/VR11 Single Board Computer"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_25ab_1775_ce90[] = "CE9"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -24430,6 +25621,9 @@ static const char pci_device_8086_25ac[] + static const char pci_subsys_8086_25ac_1775_10d0[] = "V5D Single Board Computer"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_25ac_1775_1100[] = "CR11/VR11 Single Board Computer"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_25ac_1775_ce90[] = "CE9"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -24446,6 +25640,9 @@ static const char pci_device_8086_25ad[] + static const char pci_subsys_8086_25ad_1775_10d0[] = "V5D Single Board Computer USB 2.0"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_25ad_1775_1100[] = "CR11/VR11 Single Board Computer"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_25ad_1775_ce90[] = "CE9"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -24460,6 +25657,9 @@ static const char pci_subsys_8086_25ad_4 + static const char pci_device_8086_25ae[] = "6300ESB 64-bit PCI-X Bridge"; + static const char pci_device_8086_25b0[] = "6300ESB SATA RAID Controller"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_25b0_1775_1100[] = "CR11/VR11 Single Board Computer"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_25b0_4c53_10d0[] = "Telum ASLP10 Processor AMC"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -24525,8 +25725,20 @@ static const char pci_subsys_8086_2640_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2640_1734_105c[] = "Scenic W620"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2640_e4bf_0ccd[] = "CCD-CALYPSO"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2640_e4bf_0cd3[] = "CD3-JIVE"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2640_e4bf_58b1[] = "XB1"; ++#endif + static const char pci_device_8086_2641[] = "82801FBM (ICH6M) LPC Interface Bridge"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2641_103c_0934[] = "HP Compaq nw8240 Mobile Workstation"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2641_103c_099c[] = "NX6110/NC6120"; + #endif + static const char pci_device_8086_2642[] = "82801FW/FRW (ICH6W/ICH6RW) LPC Interface Bridge"; +@@ -24543,6 +25755,15 @@ static const char pci_subsys_8086_2651_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2651_8086_4147[] = "D915GAG Motherboard"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2651_e4bf_0ccd[] = "CCD-CALYPSO"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2651_e4bf_0cd3[] = "CD3-JIVE"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2651_e4bf_58b1[] = "XB1"; ++#endif + static const char pci_device_8086_2652[] = "82801FR/FRW (ICH6R/ICH6RW) SATA Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2652_1462_7028[] = "915P/G Neo2"; +@@ -24553,6 +25774,9 @@ static const char pci_device_8086_2658[] + static const char pci_subsys_8086_2658_1028_0179[] = "Optiplex GX280"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2658_103c_0934[] = "HP Compaq nw8240 Mobile Workstation"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2658_103c_099c[] = "NX6110/NC6120"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -24567,11 +25791,23 @@ static const char pci_subsys_8086_2658_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2658_1734_105c[] = "Scenic W620"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2658_e4bf_0ccd[] = "CCD-CALYPSO"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2658_e4bf_0cd3[] = "CD3-JIVE"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2658_e4bf_58b1[] = "XB1"; ++#endif + static const char pci_device_8086_2659[] = "82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #2"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2659_1028_0179[] = "Optiplex GX280"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2659_103c_0934[] = "HP Compaq nw8240 Mobile Workstation"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2659_103c_099c[] = "NX6110/NC6120"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -24586,11 +25822,23 @@ static const char pci_subsys_8086_2659_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2659_1734_105c[] = "Scenic W620"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2659_e4bf_0ccd[] = "CCD-CALYPSO"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2659_e4bf_0cd3[] = "CD3-JIVE"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2659_e4bf_58b1[] = "XB1"; ++#endif + static const char pci_device_8086_265a[] = "82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #3"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_265a_1028_0179[] = "Optiplex GX280"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_265a_103c_0934[] = "HP Compaq nw8240 Mobile Workstation"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_265a_103c_099c[] = "NX6110/NC6120"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -24605,6 +25853,15 @@ static const char pci_subsys_8086_265a_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_265a_1734_105c[] = "Scenic W620"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_265a_e4bf_0ccd[] = "CCD-CALYPSO"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_265a_e4bf_0cd3[] = "CD3-JIVE"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_265a_e4bf_58b1[] = "XB1"; ++#endif + static const char pci_device_8086_265b[] = "82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #4"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_265b_1028_0179[] = "Optiplex GX280"; +@@ -24624,11 +25881,23 @@ static const char pci_subsys_8086_265b_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_265b_1734_105c[] = "Scenic W620"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_265b_e4bf_0ccd[] = "CCD-CALYPSO"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_265b_e4bf_0cd3[] = "CD3-JIVE"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_265b_e4bf_58b1[] = "XB1"; ++#endif + static const char pci_device_8086_265c[] = "82801FB/FBM/FR/FW/FRW (ICH6 Family) USB2 EHCI Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_265c_1028_0179[] = "Optiplex GX280"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_265c_103c_0934[] = "HP Compaq nw8240 Mobile Workstation"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_265c_103c_099c[] = "NX6110/NC6120"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -24646,13 +25915,64 @@ static const char pci_subsys_8086_265c_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_265c_8086_265c[] = "Dimension 3100"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_265c_e4bf_0ccd[] = "CCD-CALYPSO"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_265c_e4bf_0cd3[] = "CD3-JIVE"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_265c_e4bf_58b1[] = "XB1"; ++#endif + static const char pci_device_8086_2660[] = "82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 1"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2660_103c_0934[] = "HP Compaq nw8240 Mobile Workstation"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2660_103c_099c[] = "NX6110/NC6120"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2660_e4bf_0ccd[] = "CCD-CALYPSO"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2660_e4bf_0cd3[] = "CD3-JIVE"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2660_e4bf_58b1[] = "XB1"; ++#endif + static const char pci_device_8086_2662[] = "82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 2"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2662_103c_0934[] = "HP Compaq nw8240 Mobile Workstation"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2662_e4bf_0ccd[] = "CCD-CALYPSO"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2662_e4bf_0cd3[] = "CD3-JIVE"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2662_e4bf_58b1[] = "XB1"; ++#endif + static const char pci_device_8086_2664[] = "82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 3"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2664_e4bf_0ccd[] = "CCD-CALYPSO"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2664_e4bf_0cd3[] = "CD3-JIVE"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2664_e4bf_58b1[] = "XB1"; ++#endif + static const char pci_device_8086_2666[] = "82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 4"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2666_e4bf_0ccd[] = "CCD-CALYPSO"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2666_e4bf_0cd3[] = "CD3-JIVE"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2666_e4bf_58b1[] = "XB1"; ++#endif + static const char pci_device_8086_2668[] = "82801FB/FBM/FR/FW/FRW (ICH6 Family) High Definition Audio Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2668_103c_2a09[] = "PufferM-UL8E"; +@@ -24676,12 +25996,24 @@ static const char pci_subsys_8086_266a_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_266a_1734_105c[] = "Scenic W620"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_266a_e4bf_0ccd[] = "CCD-CALYPSO"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_266a_e4bf_0cd3[] = "CD3-JIVE"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_266a_e4bf_58b1[] = "XB1"; ++#endif + static const char pci_device_8086_266c[] = "82801FB/FBM/FR/FW/FRW (ICH6 Family) LAN Controller"; + static const char pci_device_8086_266d[] = "82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Modem Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_266d_1025_006a[] = "Conexant AC'97 CoDec (in Acer TravelMate 2410 serie laptop)"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_266d_103c_0934[] = "HP Compaq nw8240 Mobile Workstation"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_266d_103c_099c[] = "NX6110/NC6120"; + #endif + static const char pci_device_8086_266e[] = "82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Audio Controller"; +@@ -24698,6 +26030,9 @@ static const char pci_subsys_8086_266e_1 + static const char pci_subsys_8086_266e_1028_0188[] = "Inspiron 6000 laptop"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_266e_103c_0934[] = "HP Compaq nw8240 Mobile Workstation"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_266e_103c_0944[] = "Compaq NC6220"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -24717,6 +26052,9 @@ static const char pci_subsys_8086_266e_1 + #endif + static const char pci_device_8086_266f[] = "82801FB/FBM/FR/FW/FRW (ICH6 Family) IDE Controller"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_266f_103c_0934[] = "HP Compaq nw8240 Mobile Workstation"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_266f_103c_099c[] = "NX6110/NC6120"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -24731,11 +26069,20 @@ static const char pci_subsys_8086_266f_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_266f_1734_105c[] = "Scenic W620"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_266f_e4bf_0ccd[] = "CCD-CALYPSO"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_266f_e4bf_0cd3[] = "CD3-JIVE"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_266f_e4bf_58b1[] = "XB1"; ++#endif + static const char pci_device_8086_2670[] = "631xESB/632xESB/3100 Chipset LPC Interface Controller"; +-static const char pci_device_8086_2680[] = "631xESB/632xESB/3100 Chipset SATA Storage Controller IDE"; +-static const char pci_device_8086_2681[] = "631xESB/632xESB SATA Storage Controller AHCI"; +-static const char pci_device_8086_2682[] = "631xESB/632xESB SATA Storage Controller RAID"; +-static const char pci_device_8086_2683[] = "631xESB/632xESB SATA Storage Controller RAID"; ++static const char pci_device_8086_2680[] = "631xESB/632xESB/3100 Chipset SATA IDE Controller"; ++static const char pci_device_8086_2681[] = "631xESB/632xESB SATA AHCI Controller"; ++static const char pci_device_8086_2682[] = "631xESB/632xESB SATA RAID Controller"; ++static const char pci_device_8086_2683[] = "631xESB/632xESB SATA RAID Controller"; + static const char pci_device_8086_2688[] = "631xESB/632xESB/3100 Chipset UHCI USB Controller #1"; + static const char pci_device_8086_2689[] = "631xESB/632xESB/3100 Chipset UHCI USB Controller #2"; + static const char pci_device_8086_268a[] = "631xESB/632xESB/3100 Chipset UHCI USB Controller #3"; +@@ -24769,6 +26116,9 @@ static const char pci_device_8086_2778[] + static const char pci_device_8086_2779[] = "E7230/3000/3010 PCI Express Root Port"; + static const char pci_device_8086_277a[] = "82975X/3010 PCI Express Root Port"; + static const char pci_device_8086_277c[] = "82975X Memory Controller Hub"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_277c_1043_8178[] = "P5WDG2 WS Professional motherboard"; ++#endif + static const char pci_device_8086_277d[] = "82975X PCI Express Root Port"; + static const char pci_device_8086_2782[] = "82915G Integrated Graphics Controller"; + #ifdef INIT_SUBSYS_INFO +@@ -24784,22 +26134,34 @@ static const char pci_subsys_8086_2792_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2792_1043_1881[] = "GMA 900 915GM Integrated Graphics"; + #endif +-static const char pci_device_8086_27a0[] = "Mobile 945GM/PM/GMS/940GML and 945GT Express Memory Controller Hub"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2792_e4bf_0ccd[] = "CCD-CALYPSO"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2792_e4bf_0cd3[] = "CD3-JIVE"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2792_e4bf_58b1[] = "XB1"; ++#endif ++static const char pci_device_8086_27a0[] = "Mobile 945GM/PM/GMS, 943/940GML and 945GT Express Memory Controller Hub"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_27a0_1025_006c[] = "9814 WKMI"; ++#endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_27a0_103c_30a1[] = "NC2400"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_27a0_17aa_2017[] = "Thinkpad R60e model 0657"; + #endif +-static const char pci_device_8086_27a1[] = "Mobile 945GM/PM/GMS/940GML and 945GT Express PCI Express Root Port"; +-static const char pci_device_8086_27a2[] = "Mobile 945GM/GMS/940GML Express Integrated Graphics Controller"; ++static const char pci_device_8086_27a1[] = "Mobile 945GM/PM/GMS, 943/940GML and 945GT Express PCI Express Root Port"; ++static const char pci_device_8086_27a2[] = "Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_27a2_103c_30a1[] = "NC2400"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_27a2_17aa_201a[] = "Thinkpad R60e model 0657"; + #endif +-static const char pci_device_8086_27a6[] = "Mobile 945GM/GMS/940GML Express Integrated Graphics Controller"; ++static const char pci_device_8086_27a6[] = "Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_27a6_103c_30a1[] = "NC2400"; + #endif +@@ -24807,6 +26169,9 @@ static const char pci_subsys_8086_27a6_1 + static const char pci_subsys_8086_27a6_17aa_201a[] = "Thinkpad R60e model 0657"; + #endif + static const char pci_device_8086_27b0[] = "82801GH (ICH7DH) LPC Interface Bridge"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_27b0_8086_544e[] = "DeskTop Board D945GTP"; ++#endif + static const char pci_device_8086_27b8[] = "82801GB/GR (ICH7 Family) LPC Interface Bridge"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_27b8_107b_5048[] = "E4500"; +@@ -24825,22 +26190,37 @@ static const char pci_subsys_8086_27b9_1 + static const char pci_subsys_8086_27b9_17aa_2009[] = "ThinkPad T60/R60 series"; + #endif + static const char pci_device_8086_27bd[] = "82801GHM (ICH7-M DH) LPC Interface Bridge"; +-static const char pci_device_8086_27c0[] = "82801GB/GR/GH (ICH7 Family) Serial ATA Storage Controller IDE"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_27bd_1025_006c[] = "9814 WKMI"; ++#endif ++static const char pci_device_8086_27c0[] = "82801GB/GR/GH (ICH7 Family) SATA IDE Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_27c0_107b_5048[] = "E4500"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_27c0_1462_7236[] = "945P Neo3-F Rev. 2.2 motherboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_27c0_8086_544e[] = "DeskTop Board D945GTP"; + #endif +-static const char pci_device_8086_27c1[] = "82801GR/GH (ICH7 Family) Serial ATA Storage Controller AHCI"; +-static const char pci_device_8086_27c3[] = "82801GR/GH (ICH7 Family) Serial ATA Storage Controller RAID"; +-static const char pci_device_8086_27c4[] = "82801GBM/GHM (ICH7 Family) Serial ATA Storage Controller IDE"; +-static const char pci_device_8086_27c5[] = "82801GBM/GHM (ICH7 Family) Serial ATA Storage Controller AHCI"; ++static const char pci_device_8086_27c1[] = "82801GR/GH (ICH7 Family) SATA AHCI Controller"; ++static const char pci_device_8086_27c3[] = "82801GR/GH (ICH7 Family) SATA RAID Controller"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_27c3_8086_544e[] = "DeskTop Board D945GTP"; ++#endif ++static const char pci_device_8086_27c4[] = "82801GBM/GHM (ICH7 Family) SATA IDE Controller"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_27c4_1025_006c[] = "9814 WKMI"; ++#endif ++static const char pci_device_8086_27c5[] = "82801GBM/GHM (ICH7 Family) SATA AHCI Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_27c5_17aa_200d[] = "Thinkpad R60e model 0657"; + #endif +-static const char pci_device_8086_27c6[] = "82801GHM (ICH7-M DH) Serial ATA Storage Controller RAID"; +-static const char pci_device_8086_27c8[] = "82801G (ICH7 Family) USB UHCI #1"; ++static const char pci_device_8086_27c6[] = "82801GHM (ICH7-M DH) SATA RAID Controller"; ++static const char pci_device_8086_27c8[] = "82801G (ICH7 Family) USB UHCI Controller #1"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_27c8_1025_006c[] = "9814 WKMI"; ++#endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_27c8_103c_30a1[] = "NC2400"; + #endif +@@ -24853,7 +26233,10 @@ static const char pci_subsys_8086_27c8_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_27c8_8086_544e[] = "DeskTop Board D945GTP"; + #endif +-static const char pci_device_8086_27c9[] = "82801G (ICH7 Family) USB UHCI #2"; ++static const char pci_device_8086_27c9[] = "82801G (ICH7 Family) USB UHCI Controller #2"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_27c9_1025_006c[] = "9814 WKMI"; ++#endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_27c9_103c_30a1[] = "NC2400"; + #endif +@@ -24866,7 +26249,10 @@ static const char pci_subsys_8086_27c9_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_27c9_8086_544e[] = "DeskTop Board D945GTP"; + #endif +-static const char pci_device_8086_27ca[] = "82801G (ICH7 Family) USB UHCI #3"; ++static const char pci_device_8086_27ca[] = "82801G (ICH7 Family) USB UHCI Controller #3"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_27ca_1025_006c[] = "9814 WKMI"; ++#endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_27ca_103c_30a1[] = "NC2400"; + #endif +@@ -24879,7 +26265,10 @@ static const char pci_subsys_8086_27ca_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_27ca_8086_544e[] = "DeskTop Board D945GTP"; + #endif +-static const char pci_device_8086_27cb[] = "82801G (ICH7 Family) USB UHCI #4"; ++static const char pci_device_8086_27cb[] = "82801G (ICH7 Family) USB UHCI Controller #4"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_27cb_1025_006c[] = "9814 WKMI"; ++#endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_27cb_103c_30a1[] = "NC2400"; + #endif +@@ -24894,6 +26283,9 @@ static const char pci_subsys_8086_27cb_8 + #endif + static const char pci_device_8086_27cc[] = "82801G (ICH7 Family) USB2 EHCI Controller"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_27cc_1025_006c[] = "9814 WKMI"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_27cc_103c_30a1[] = "NC2400"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -24908,16 +26300,22 @@ static const char pci_device_8086_27d4[] + static const char pci_device_8086_27d6[] = "82801G (ICH7 Family) PCI Express Port 4"; + static const char pci_device_8086_27d8[] = "82801G (ICH7 Family) High Definition Audio Controller"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_27d8_1025_006c[] = "9814 WKMI"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_27d8_103c_30a1[] = "NC2400"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_27d8_1043_13c4[] = "Asus G2P"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_27d8_107b_5048[] = "E4500"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_27d8_10f7_8338[] = "Panasonic CF-Y5 laptop"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_8086_27d8_1179_ff31[] = "Toshiba America Information Systems:AC97 Data Fax SoftModem with SmartCP"; ++static const char pci_subsys_8086_27d8_1179_ff31[] = "AC97 Data Fax SoftModem with SmartCP"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_27d8_152d_0753[] = "Softmodem"; +@@ -24928,8 +26326,17 @@ static const char pci_subsys_8086_27d8_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_27d8_17aa_2010[] = "ThinkPad T60/R60 series"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_27d8_17aa_3802[] = "Lenovo 3000 C200 audio [Realtek ALC861VD]"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_27d8_8086_1112[] = "DeskTop Board D945GTP"; ++#endif + static const char pci_device_8086_27da[] = "82801G (ICH7 Family) SMBus Controller"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_27da_1025_006c[] = "9814 WKMI"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_27da_10f7_8338[] = "Panasonic CF-Y5 laptop"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -24944,6 +26351,9 @@ static const char pci_subsys_8086_27dc_8 + #endif + static const char pci_device_8086_27dd[] = "82801G (ICH7 Family) AC'97 Modem Controller"; + static const char pci_device_8086_27de[] = "82801G (ICH7 Family) AC'97 Audio Controller"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_27de_1462_7267[] = "Realtek ALC883 Audio Controller"; ++#endif + static const char pci_device_8086_27df[] = "82801G (ICH7 Family) IDE Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_27df_103c_30a1[] = "NC2400"; +@@ -24963,43 +26373,52 @@ static const char pci_subsys_8086_27df_8 + static const char pci_device_8086_27e0[] = "82801GR/GH/GHM (ICH7 Family) PCI Express Port 5"; + static const char pci_device_8086_27e2[] = "82801GR/GH/GHM (ICH7 Family) PCI Express Port 6"; + static const char pci_device_8086_2810[] = "82801HB/HR (ICH8/R) LPC Interface Controller"; +-static const char pci_device_8086_2811[] = "Mobile LPC Interface Controller"; ++static const char pci_device_8086_2811[] = "82801HBM (ICH8M-E) LPC Interface Controller"; + static const char pci_device_8086_2812[] = "82801HH (ICH8DH) LPC Interface Controller"; + static const char pci_device_8086_2814[] = "82801HO (ICH8DO) LPC Interface Controller"; +-static const char pci_device_8086_2815[] = "Mobile LPC Interface Controller"; ++static const char pci_device_8086_2815[] = "82801HEM (ICH8M) LPC Interface Controller"; + static const char pci_device_8086_2820[] = "82801H (ICH8 Family) 4 port SATA IDE Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2820_1462_7235[] = "P965 Neo MS-7235 mainboard"; + #endif + static const char pci_device_8086_2821[] = "82801HR/HO/HH (ICH8R/DO/DH) 6 port SATA AHCI Controller"; +-static const char pci_device_8086_2822[] = "82801HR/HO/HH (ICH8R/DO/DH) SATA RAID Controller"; ++static const char pci_device_8086_2822[] = "82801 SATA RAID Controller"; + static const char pci_device_8086_2824[] = "82801HB (ICH8) 4 port SATA AHCI Controller"; + static const char pci_device_8086_2825[] = "82801H (ICH8 Family) 2 port SATA IDE Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2825_1462_7235[] = "P965 Neo MS-7235 mainboard"; + #endif +-static const char pci_device_8086_2828[] = "Mobile SATA IDE Controller"; +-static const char pci_device_8086_2829[] = "Mobile SATA AHCI Controller"; +-static const char pci_device_8086_282a[] = "Mobile SATA RAID Controller"; +-static const char pci_device_8086_2830[] = "82801H (ICH8 Family) USB UHCI #1"; ++static const char pci_device_8086_2828[] = "82801HBM/HEM (ICH8M/ICH8M-E) SATA IDE Controller"; ++static const char pci_device_8086_2829[] = "82801HBM/HEM (ICH8M/ICH8M-E) SATA AHCI Controller"; ++static const char pci_device_8086_282a[] = "Mobile 82801 SATA RAID Controller"; ++static const char pci_device_8086_2830[] = "82801H (ICH8 Family) USB UHCI Controller #1"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2830_1462_7235[] = "P965 Neo MS-7235 mainboard"; + #endif +-static const char pci_device_8086_2831[] = "82801H (ICH8 Family) USB UHCI #2"; ++static const char pci_device_8086_2831[] = "82801H (ICH8 Family) USB UHCI Controller #2"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2831_1462_7235[] = "P965 Neo MS-7235 mainboard"; + #endif +-static const char pci_device_8086_2832[] = "82801H (ICH8 Family) USB UHCI #3"; +-static const char pci_device_8086_2834[] = "82801H (ICH8 Family) USB UHCI #4"; ++static const char pci_device_8086_2832[] = "82801H (ICH8 Family) USB UHCI Controller #3"; ++static const char pci_device_8086_2834[] = "82801H (ICH8 Family) USB UHCI Contoller #4"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2834_1462_7235[] = "P965 Neo MS-7235 mainboard"; + #endif +-static const char pci_device_8086_2835[] = "82801H (ICH8 Family) USB UHCI #5"; +-static const char pci_device_8086_2836[] = "82801H (ICH8 Family) USB2 EHCI #1"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2834_17aa_20aa[] = "Lenovo Thinkpad T61"; ++#endif ++static const char pci_device_8086_2835[] = "82801H (ICH8 Family) USB UHCI Controller #5"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2835_17aa_20aa[] = "Lenovo Thinkpad T60"; ++#endif ++static const char pci_device_8086_2836[] = "82801H (ICH8 Family) USB2 EHCI Controller #1"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_2836_1462_7235[] = "P965 Neo MS-7235 mainboard"; + #endif +-static const char pci_device_8086_283a[] = "82801H (ICH8 Family) USB2 EHCI #2"; ++static const char pci_device_8086_283a[] = "82801H (ICH8 Family) USB2 EHCI Controller #2"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_283a_17aa_20ab[] = "Lenovo Thinkpad T61"; ++#endif + static const char pci_device_8086_283e[] = "82801H (ICH8 Family) SMBus Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_283e_1462_7235[] = "P965 Neo MS-7235 mainboard"; +@@ -25011,36 +26430,47 @@ static const char pci_device_8086_2845[] + static const char pci_device_8086_2847[] = "82801H (ICH8 Family) PCI Express Port 5"; + static const char pci_device_8086_2849[] = "82801H (ICH8 Family) PCI Express Port 6"; + static const char pci_device_8086_284b[] = "82801H (ICH8 Family) HD Audio Controller"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_284b_17aa_20ac[] = "Lenovo Thinkpad T61"; ++#endif + static const char pci_device_8086_284f[] = "82801H (ICH8 Family) Thermal Reporting Device"; +-static const char pci_device_8086_2850[] = "Mobile IDE Controller"; +-static const char pci_device_8086_2910[] = "LPC Interface Controller"; +-static const char pci_device_8086_2920[] = "4 port SATA IDE Controller"; +-static const char pci_device_8086_2921[] = "2 port SATA IDE Controller"; +-static const char pci_device_8086_2922[] = "6 port SATA AHCI Controller"; +-static const char pci_device_8086_2923[] = "4 port SATA AHCI Controller"; +-static const char pci_device_8086_2925[] = "SATA RAID Controller"; +-static const char pci_device_8086_2926[] = "2 port SATA IDE Controller"; ++static const char pci_device_8086_2850[] = "82801HBM/HEM (ICH8M/ICH8M-E) IDE Controller"; ++static const char pci_device_8086_2911[] = "LPC Interface Controller"; ++static const char pci_device_8086_2912[] = "82801IH (ICH9DH) LPC Interface Controller"; ++static const char pci_device_8086_2914[] = "LPC Interface Controller"; ++static const char pci_device_8086_2916[] = "82801IR (ICH9R) LPC Interface Controller"; ++static const char pci_device_8086_2917[] = "Mobile LPC Controller"; ++static const char pci_device_8086_2918[] = "82801IB (ICH9) LPC Interface Controller"; ++static const char pci_device_8086_2919[] = "Mobile LPC Controller"; ++static const char pci_device_8086_2920[] = "82801IR/IO/IH (ICH9R/DO/DH) 4 port SATA IDE Controller"; ++static const char pci_device_8086_2921[] = "82801I (ICH9 Family) 2 port SATA IDE Controller"; ++static const char pci_device_8086_2922[] = "82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA AHCI Controller"; ++static const char pci_device_8086_2923[] = "82801I (ICH9 Family) 4 port SATA AHCI Controller"; ++static const char pci_device_8086_2925[] = "82801IR/IO (ICH9R//DO) SATA RAID Controller"; ++static const char pci_device_8086_2926[] = "82801I (ICH9 Family) 2 port SATA IDE Controller"; + static const char pci_device_8086_2928[] = "Mobile 2 port SATA IDE Controller"; ++static const char pci_device_8086_2929[] = "Mobile SATA AHCI Controller"; ++static const char pci_device_8086_292c[] = "Mobile SATA RAID Controller"; + static const char pci_device_8086_292d[] = "Mobile 2 port SATA IDE Controller"; + static const char pci_device_8086_292e[] = "Mobile 1 port SATA IDE Controller"; +-static const char pci_device_8086_2930[] = "SMBus Controller"; +-static const char pci_device_8086_2932[] = "Thermal Subsystem"; +-static const char pci_device_8086_2934[] = "USB UHCI Controller #1"; +-static const char pci_device_8086_2935[] = "USB UHCI Controller #2"; +-static const char pci_device_8086_2936[] = "USB UHCI Controller #3"; +-static const char pci_device_8086_2937[] = "USB UHCI Controller #4"; +-static const char pci_device_8086_2938[] = "USB UHCI Controller #5"; +-static const char pci_device_8086_2939[] = "USB UHCI Controller #6"; +-static const char pci_device_8086_293a[] = "USB2 EHCI Controller #1"; +-static const char pci_device_8086_293c[] = "USB2 EHCI Controller #2"; +-static const char pci_device_8086_293e[] = "HD Audio Controller"; +-static const char pci_device_8086_2940[] = "PCI Express Port 1"; +-static const char pci_device_8086_2942[] = "PCI Express Port 2"; +-static const char pci_device_8086_2944[] = "PCI Express Port 3"; +-static const char pci_device_8086_2946[] = "PCI Express Port 4"; +-static const char pci_device_8086_2948[] = "PCI Express Port 5"; +-static const char pci_device_8086_294a[] = "PCI Express Port 6"; +-static const char pci_device_8086_294c[] = "Gigabit Ethernet Controller"; ++static const char pci_device_8086_2930[] = "82801I (ICH9 Family) SMBus Controller"; ++static const char pci_device_8086_2932[] = "82801I (ICH9 Family) Thermal Subsystem"; ++static const char pci_device_8086_2934[] = "82801I (ICH9 Family) USB UHCI Controller #1"; ++static const char pci_device_8086_2935[] = "82801I (ICH9 Family) USB UHCI Controller #2"; ++static const char pci_device_8086_2936[] = "82801I (ICH9 Family) USB UHCI Controller #3"; ++static const char pci_device_8086_2937[] = "82801I (ICH9 Family) USB UHCI Controller #4"; ++static const char pci_device_8086_2938[] = "82801I (ICH9 Family) USB UHCI Controller #5"; ++static const char pci_device_8086_2939[] = "82801I (ICH9 Family) USB UHCI Controller #6"; ++static const char pci_device_8086_293a[] = "82801I (ICH9 Family) USB2 EHCI Controller #1"; ++static const char pci_device_8086_293c[] = "82801I (ICH9 Family) USB2 EHCI Controller #2"; ++static const char pci_device_8086_293e[] = "82801I (ICH9 Family) HD Audio Controller"; ++static const char pci_device_8086_2940[] = "82801I (ICH9 Family) PCI Express Port 1"; ++static const char pci_device_8086_2942[] = "82801I (ICH9 Family) PCI Express Port 2"; ++static const char pci_device_8086_2944[] = "82801I (ICH9 Family) PCI Express Port 3"; ++static const char pci_device_8086_2946[] = "82801I (ICH9 Family) PCI Express Port 4"; ++static const char pci_device_8086_2948[] = "82801I (ICH9 Family) PCI Express Port 5"; ++static const char pci_device_8086_294a[] = "82801I (ICH9 Family) PCI Express Port 6"; ++static const char pci_device_8086_294c[] = "82801I (ICH9 Family) Gigabit Ethernet Controller"; + static const char pci_device_8086_2970[] = "82946GZ/PL/GL Memory Controller Hub"; + static const char pci_device_8086_2971[] = "82946GZ/PL/GL PCI Express Root Port"; + static const char pci_device_8086_2972[] = "82946GZ/GL Integrated Graphics Controller"; +@@ -25061,8 +26491,14 @@ static const char pci_device_8086_2995[] + static const char pci_device_8086_2996[] = "82Q963/Q965 PT IDER Controller"; + static const char pci_device_8086_2997[] = "82Q963/Q965 KT Controller"; + static const char pci_device_8086_29a0[] = "82P965/G965 Memory Controller Hub"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_29a0_1462_7276[] = "MS-7276 [G965MDH]"; ++#endif + static const char pci_device_8086_29a1[] = "82P965/G965 PCI Express Root Port"; + static const char pci_device_8086_29a2[] = "82G965 Integrated Graphics Controller"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_29a2_1462_7276[] = "MS-7276 [G965MDH]"; ++#endif + static const char pci_device_8086_29a3[] = "82G965 Integrated Graphics Controller"; + static const char pci_device_8086_29a4[] = "82P965/G965 HECI Controller"; + static const char pci_device_8086_29a5[] = "82P965/G965 HECI Controller"; +@@ -25072,48 +26508,65 @@ static const char pci_device_8086_29b0[] + static const char pci_device_8086_29b1[] = "PCI Express Root Port"; + static const char pci_device_8086_29b2[] = "Integrated Graphics Controller"; + static const char pci_device_8086_29b3[] = "Integrated Graphics Controller"; +-static const char pci_device_8086_29b4[] = "HECI Controller"; +-static const char pci_device_8086_29b5[] = "HECI Controller"; ++static const char pci_device_8086_29b4[] = "MEI Controller"; ++static const char pci_device_8086_29b5[] = "MEI Controller"; + static const char pci_device_8086_29b6[] = "PT IDER Controller"; + static const char pci_device_8086_29b7[] = "Serial KT Controller"; +-static const char pci_device_8086_29c0[] = "DRAM Controller"; +-static const char pci_device_8086_29c1[] = "PCI Express Root Port"; +-static const char pci_device_8086_29c2[] = "Integrated Graphics Controller"; +-static const char pci_device_8086_29c3[] = "Integrated Graphics Controller"; +-static const char pci_device_8086_29c4[] = "HECI Controller"; +-static const char pci_device_8086_29c5[] = "HECI Controller"; +-static const char pci_device_8086_29c6[] = "PT IDER Controller"; +-static const char pci_device_8086_29c7[] = "Serial KT Controller"; ++static const char pci_device_8086_29c0[] = "82G33/G31/P35 Express DRAM Controller"; ++static const char pci_device_8086_29c1[] = "82G33/G31/P35 Express PCI Express Root Port"; ++static const char pci_device_8086_29c2[] = "82G33/G31 Express Integrated Graphics Controller"; ++static const char pci_device_8086_29c3[] = "82G33/G31 Express Integrated Graphics Controller"; ++static const char pci_device_8086_29c4[] = "82G33/G31/P35 Express MEI Controller"; ++static const char pci_device_8086_29c5[] = "82G33/G31/P35 Express MEI Controller"; ++static const char pci_device_8086_29c6[] = "82G33/G31/P35 Express PT IDER Controller"; ++static const char pci_device_8086_29c7[] = "82G33/G31/P35 Express Serial KT Controller"; + static const char pci_device_8086_29cf[] = "Virtual HECI Controller"; ++static const char pci_device_8086_29d0[] = "DRAM Controller"; ++static const char pci_device_8086_29d1[] = "PCI Express Root Port"; ++static const char pci_device_8086_29d2[] = "Integrated Graphics Controller"; ++static const char pci_device_8086_29d3[] = "Integrated Graphics Controller"; ++static const char pci_device_8086_29d4[] = "MEI Controller"; ++static const char pci_device_8086_29d5[] = "MEI Controller"; ++static const char pci_device_8086_29d6[] = "PT IDER Controller"; ++static const char pci_device_8086_29d7[] = "Serial KT Controller"; + static const char pci_device_8086_29e0[] = "DRAM Controller"; + static const char pci_device_8086_29e1[] = "Host-Primary PCI Express Bridge"; +-static const char pci_device_8086_29e4[] = "HECI Controller"; +-static const char pci_device_8086_29e5[] = "HECI Controller"; ++static const char pci_device_8086_29e4[] = "MEI Controller"; ++static const char pci_device_8086_29e5[] = "MEI Controller"; + static const char pci_device_8086_29e6[] = "PT IDER Controller"; + static const char pci_device_8086_29e7[] = "Serial KT Controller"; + static const char pci_device_8086_29e9[] = "Host-Secondary PCI Express Bridge"; + static const char pci_device_8086_29f0[] = "Server DRAM Controller"; + static const char pci_device_8086_29f1[] = "Server Host-Primary PCI Express Bridge"; +-static const char pci_device_8086_29f4[] = "Server HECI Controller"; +-static const char pci_device_8086_29f5[] = "Server HECI Controller"; ++static const char pci_device_8086_29f4[] = "Server MEI Controller"; ++static const char pci_device_8086_29f5[] = "Server MEI Controller"; + static const char pci_device_8086_29f6[] = "Server PT IDER Controller"; + static const char pci_device_8086_29f7[] = "Server Serial KT Controller"; + static const char pci_device_8086_29f9[] = "Server Host-Secondary PCI Express Bridge"; +-static const char pci_device_8086_2a00[] = "Mobile Memory Controller Hub"; +-static const char pci_device_8086_2a01[] = "Mobile PCI Express Root Port"; +-static const char pci_device_8086_2a02[] = "Mobile Integrated Graphics Controller"; +-static const char pci_device_8086_2a03[] = "Mobile Integrated Graphics Controller"; +-static const char pci_device_8086_2a04[] = "Mobile HECI Controller"; +-static const char pci_device_8086_2a05[] = "Mobile HECI Controller"; +-static const char pci_device_8086_2a06[] = "Mobile PT IDER Controller"; +-static const char pci_device_8086_2a07[] = "Mobile KT Controller"; +-static const char pci_device_8086_3092[] = "Integrated RAID"; ++static const char pci_device_8086_2a00[] = "Mobile PM965/GM965/GL960 Memory Controller Hub"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_2a00_17aa_20b1[] = "Lenovo Thinkpad T61"; ++#endif ++static const char pci_device_8086_2a01[] = "Mobile PM965/GM965/GL960 PCI Express Root Port"; ++static const char pci_device_8086_2a02[] = "Mobile GM965/GL960 Integrated Graphics Controller"; ++static const char pci_device_8086_2a03[] = "Mobile GM965/GL960 Integrated Graphics Controller"; ++static const char pci_device_8086_2a04[] = "Mobile PM965/GM965 MEI Controller"; ++static const char pci_device_8086_2a05[] = "Mobile PM965/GM965 MEI Controller"; ++static const char pci_device_8086_2a06[] = "Mobile PM965/GM965 PT IDER Controller"; ++static const char pci_device_8086_2a07[] = "Mobile PM965/GM965 KT Controller"; + static const char pci_device_8086_3200[] = "GD31244 PCI-X SATA HBA"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_3200_1775_c200[] = "C2K onboard SATA host bus adapter"; + #endif ++static const char pci_device_8086_3313[] = "IOP348 I/O Processor (SL8e) in IOC Mode SAS/SATA"; ++static const char pci_device_8086_331b[] = "IOP348 I/O Processor (SL8x) in IOC Mode SAS/SATA"; ++static const char pci_device_8086_3331[] = "IOC340 I/O Controller (VV8e) SAS/SATA"; ++static const char pci_device_8086_3339[] = "IOC340 I/O Controller (VV8x) SAS/SATA"; + static const char pci_device_8086_3340[] = "82855PM Processor to I/O Controller"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_3340_1014_0529[] = "Thinkpad T41"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_3340_1025_005a[] = "TravelMate 290"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -25126,12 +26579,15 @@ static const char pci_subsys_8086_3340_1 + static const char pci_subsys_8086_3340_103c_08b0[] = "tc1100 tablet"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_8086_3340_144d_c00c[] = "P30 notebook"; ++static const char pci_subsys_8086_3340_144d_c00c[] = "P30/P35 notebook"; + #endif + static const char pci_device_8086_3341[] = "82855PM Processor to AGP Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_3341_144d_c00c[] = "P30 notebook"; + #endif ++static const char pci_device_8086_3363[] = "IOC340 I/O Controller in IOC Mode SAS/SATA"; ++static const char pci_device_8086_33c3[] = "IOP348 I/O Processor (SL8De) in IOC Mode SAS/SATA"; ++static const char pci_device_8086_33cb[] = "IOP348 I/O Processor (SL8Dx) in IOC Mode SAS/SATA"; + static const char pci_device_8086_3500[] = "6311ESB/6321ESB PCI Express Upstream Port"; + static const char pci_device_8086_3501[] = "6310ESB PCI Express Upstream Port"; + static const char pci_device_8086_3504[] = "6311ESB/6321ESB I/OxAPIC Interrupt Controller"; +@@ -25168,6 +26624,9 @@ static const char pci_subsys_8086_3580_1 + static const char pci_subsys_8086_3580_1028_0139[] = "Latitude D400"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_3580_1028_014f[] = "Latitude X300"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_3580_1028_0163[] = "Latitude D505"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -25188,6 +26647,12 @@ static const char pci_subsys_8086_3580_4 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_3580_4c53_10e0[] = "PSL09 PrPMC"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_3580_e4bf_0cc9[] = "CC9-SAMBA"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_3580_e4bf_0cd2[] = "CD2-BEBOP"; ++#endif + static const char pci_device_8086_3581[] = "82852/82855 GM/GME/PM/GMV Processor to AGP Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_3581_1734_1055[] = "Amilo M1420"; +@@ -25200,6 +26665,9 @@ static const char pci_subsys_8086_3582_1 + static const char pci_subsys_8086_3582_1028_0139[] = "Latitude D400"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_3582_1028_014f[] = "Latitude X300"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_3582_1028_0163[] = "Latitude D505"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -25214,6 +26682,12 @@ static const char pci_subsys_8086_3582_4 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_3582_4c53_10e0[] = "PSL09 PrPMC"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_3582_e4bf_0cc9[] = "CC9-SAMBA"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_3582_e4bf_0cd2[] = "CD2-BEBOP"; ++#endif + static const char pci_device_8086_3584[] = "82852/82855 GM/GME/PM/GMV Processor to I/O Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_3584_1014_055d[] = "Thinkpad R50e model 1634"; +@@ -25222,6 +26696,9 @@ static const char pci_subsys_8086_3584_1 + static const char pci_subsys_8086_3584_1028_0139[] = "Latitude D400"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_3584_1028_014f[] = "Latitude X300"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_3584_1028_0163[] = "Latitude D505"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -25250,6 +26727,9 @@ static const char pci_subsys_8086_3585_1 + static const char pci_subsys_8086_3585_1028_0139[] = "Latitude D400"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_3585_1028_014f[] = "Latitude X300"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_3585_1028_0163[] = "Latitude D505"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -25272,16 +26752,25 @@ static const char pci_subsys_8086_3585_4 + #endif + static const char pci_device_8086_3590[] = "E7520 Memory Controller Hub"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_3590_1014_02dd[] = "eServer xSeries server mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_3590_1028_019a[] = "PowerEdge SC1425"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_3590_1734_103e[] = "Primergy RX300 S2"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_3590_1775_1100[] = "CR11/VR11 Single Board Computer"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_3590_4c53_10d0[] = "Telum ASLP10 Processor AMC"; + #endif + static const char pci_device_8086_3591[] = "E7525/E7520 Error Reporting Registers"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_3591_1014_02dd[] = "eServer xSeries server mainboard"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_3591_1028_0169[] = "Precision 470"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -25291,15 +26780,33 @@ static const char pci_device_8086_3592[] + static const char pci_device_8086_3593[] = "E7320 Error Reporting Registers"; + static const char pci_device_8086_3594[] = "E7520 DMA Controller"; + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_3594_1775_1100[] = "CR11/VR11 Single Board Computer"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_3594_4c53_10d0[] = "Telum ASLP10 Processor AMC"; + #endif + static const char pci_device_8086_3595[] = "E7525/E7520/E7320 PCI Express Port A"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_3595_1775_1100[] = "CR11/VR11 Single Board Computer"; ++#endif + static const char pci_device_8086_3596[] = "E7525/E7520/E7320 PCI Express Port A1"; + static const char pci_device_8086_3597[] = "E7525/E7520 PCI Express Port B"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_3597_1775_1100[] = "CR11/VR11 Single Board Computer"; ++#endif + static const char pci_device_8086_3598[] = "E7520 PCI Express Port B1"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_3598_1775_1100[] = "CR11/VR11 Single Board Computer"; ++#endif + static const char pci_device_8086_3599[] = "E7520 PCI Express Port C"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_3599_1775_1100[] = "CR11/VR11 Single Board Computer"; ++#endif + static const char pci_device_8086_359a[] = "E7520 PCI Express Port C1"; + static const char pci_device_8086_359b[] = "E7525/E7520/E7320 Extended Configuration Registers"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_359b_1014_02dd[] = "eServer xSeries server mainboard"; ++#endif + static const char pci_device_8086_359e[] = "E7525 Memory Controller Hub"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_359e_1028_0169[] = "Precision 470"; +@@ -25325,6 +26832,8 @@ static const char pci_device_8086_360e[] + static const char pci_device_8086_360f[] = "Server FBD Branch 0 Registers"; + static const char pci_device_8086_3610[] = "Server FBD Branch 1 Registers"; + static const char pci_device_8086_4000[] = "Memory Controller Hub"; ++static const char pci_device_8086_4001[] = "Memory Controller Hub"; ++static const char pci_device_8086_4003[] = "Memory Controller Hub"; + static const char pci_device_8086_4008[] = "Memory Controller Hub"; + static const char pci_device_8086_4010[] = "Memory Controller Hub"; + static const char pci_device_8086_4021[] = "PCI Express Port 1"; +@@ -25345,7 +26854,7 @@ static const char pci_device_8086_4035[] + static const char pci_device_8086_4036[] = "FBD Registers"; + static const char pci_device_8086_4220[] = "PRO/Wireless 2200BG Network Connection"; + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_8086_4220_2731_8086[] = "WLAN-Adapter"; ++static const char pci_subsys_8086_4220_103c_12f6[] = "HP Compaq nw8240 Mobile Workstation"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_4220_8086_2731[] = "Samsung P35 integrated WLAN"; +@@ -25372,13 +26881,51 @@ static const char pci_subsys_8086_4227_8 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_4227_8086_1014[] = "PRO/Wireless 3945BG Network Connection"; + #endif ++static const char pci_device_8086_4229[] = "PRO/Wireless 4965 AG or AGN Network Connection"; ++static const char pci_device_8086_4230[] = "PRO/Wireless 4965 AG or AGN Network Connection"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_4230_8086_1110[] = "Lenovo Thinkpad T61"; ++#endif ++static const char pci_device_8086_444e[] = "Turbo Memory Controller"; + static const char pci_device_8086_5001[] = "Pro/DSL 2100 Modem"; ++static const char pci_device_8086_5020[] = "Memory Controller Hub"; ++static const char pci_device_8086_5021[] = "DRAM Error Reporting Registers"; ++static const char pci_device_8086_5023[] = "EDMA Controller"; ++static const char pci_device_8086_5024[] = "PCI Express Port PEA0"; ++static const char pci_device_8086_5025[] = "PCI Express Port PEA1"; ++static const char pci_device_8086_5028[] = "S-ATA IDE"; ++static const char pci_device_8086_5029[] = "S-ATA AHCI"; ++static const char pci_device_8086_502a[] = "S-ATA RAID0/1"; ++static const char pci_device_8086_502b[] = "S-ATA Reserved"; ++static const char pci_device_8086_5031[] = "LPC Bus"; ++static const char pci_device_8086_5032[] = "SMBus Controller"; ++static const char pci_device_8086_5033[] = "USB 1.1 Controller"; ++static const char pci_device_8086_5035[] = "USB 2.0 Controller"; ++static const char pci_device_8086_5037[] = "PCI-PCI Bridge (transparent mode)"; ++static const char pci_device_8086_5039[] = "Controller Area Network (CAN) interface #1"; ++static const char pci_device_8086_503a[] = "Controller Area Network (CAN) interface #2"; ++static const char pci_device_8086_503b[] = "Synchronous Serial Port (SPP)"; ++static const char pci_device_8086_503c[] = "IEEE 1588 Hardware Assist"; ++static const char pci_device_8086_503d[] = "Local Expansion Bus"; ++static const char pci_device_8086_503e[] = "Global Control Unit (GCU)"; ++static const char pci_device_8086_5040[] = "Gigabit Ethernet MAC"; ++static const char pci_device_8086_5041[] = "Gigabit Ethernet MAC"; ++static const char pci_device_8086_5042[] = "Gigabit Ethernet MAC"; ++static const char pci_device_8086_5043[] = "Gigabit Ethernet MAC"; ++static const char pci_device_8086_5044[] = "Gigabit Ethernet MAC"; ++static const char pci_device_8086_5045[] = "Gigabit Ethernet MAC"; ++static const char pci_device_8086_5046[] = "Gigabit Ethernet MAC"; ++static const char pci_device_8086_5047[] = "Gigabit Ethernet MAC"; ++static const char pci_device_8086_5048[] = "Gigabit Ethernet MAC"; ++static const char pci_device_8086_5049[] = "Gigabit Ethernet MAC"; ++static const char pci_device_8086_504a[] = "Gigabit Ethernet MAC"; ++static const char pci_device_8086_504b[] = "Gigabit Ethernet MAC"; + static const char pci_device_8086_5200[] = "EtherExpress PRO/100 Intelligent Server"; + static const char pci_device_8086_5201[] = "EtherExpress PRO/100 Intelligent Server"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_5201_8086_0001[] = "EtherExpress PRO/100 Server Ethernet Adapter"; + #endif +-static const char pci_device_8086_530d[] = "80310 IOP [IO Processor]"; ++static const char pci_device_8086_530d[] = "80310 (IOP) IO Processor"; + static const char pci_device_8086_65c0[] = "Memory Controller Hub"; + static const char pci_device_8086_65e2[] = "PCI Express x4 Port 2"; + static const char pci_device_8086_65e3[] = "PCI Express x4 Port 3"; +@@ -25419,14 +26966,14 @@ static const char pci_device_8086_7113[] + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_7113_15ad_1976[] = "virtualHW v3"; + #endif +-static const char pci_device_8086_7120[] = "82810 GMCH [Graphics Memory Controller Hub]"; ++static const char pci_device_8086_7120[] = "82810 GMCH (Graphics Memory Controller Hub)"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_7120_4c53_1040[] = "CL7 mainboard"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_7120_4c53_1060[] = "PC7 mainboard"; + #endif +-static const char pci_device_8086_7121[] = "82810 CGC [Chipset Graphics Controller]"; ++static const char pci_device_8086_7121[] = "82810 (CGC) Chipset Graphics Controller"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_7121_4c53_1040[] = "CL7 mainboard"; + #endif +@@ -25436,10 +26983,16 @@ static const char pci_subsys_8086_7121_4 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_7121_8086_4341[] = "Cayman (CA810) Mainboard"; + #endif +-static const char pci_device_8086_7122[] = "82810 DC-100 GMCH [Graphics Memory Controller Hub]"; +-static const char pci_device_8086_7123[] = "82810 DC-100 CGC [Chipset Graphics Controller]"; +-static const char pci_device_8086_7124[] = "82810E DC-133 GMCH [Graphics Memory Controller Hub]"; +-static const char pci_device_8086_7125[] = "82810E DC-133 CGC [Chipset Graphics Controller]"; ++static const char pci_device_8086_7122[] = "82810 DC-100 (GMCH) Graphics Memory Controller Hub"; ++static const char pci_device_8086_7123[] = "82810 DC-100 (CGC) Chipset Graphics Controller"; ++static const char pci_device_8086_7124[] = "82810E DC-133 (GMCH) Graphics Memory Controller Hub"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_7124_1028_00b4[] = "OptiPlex GX110"; ++#endif ++static const char pci_device_8086_7125[] = "82810E DC-133 (CGC) Chipset Graphics Controller"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_8086_7125_1028_00b4[] = "OptiPlex GX110"; ++#endif + static const char pci_device_8086_7126[] = "82810 DC-133 System and Graphics Controller"; + static const char pci_device_8086_7128[] = "82810-M DC-100 System and Graphics Controller"; + static const char pci_device_8086_712a[] = "82810-M DC-133 System and Graphics Controller"; +@@ -25541,6 +27094,7 @@ static const char pci_subsys_8086_7800_8 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_8086_7800_8086_0100[] = "Intel740 Graphics Accelerator"; + #endif ++static const char pci_device_8086_8002[] = "Trusted Execution Technology Registers"; + static const char pci_device_8086_84c4[] = "450KX/GX [Orion] - 82454KX/GX PCI bridge"; + static const char pci_device_8086_84c5[] = "450KX/GX [Orion] - 82453KX/GX Memory controller"; + static const char pci_device_8086_84ca[] = "450NX - 82451NX Memory & I/O Controller"; +@@ -25593,6 +27147,17 @@ static const char pci_subsys_8086_b555_4 + static const char pci_subsys_8086_b555_e4bf_1000[] = "CC8-1-BLUES"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const char pci_vendor_80ee[] = "InnoTek Systemberatung GmbH"; ++static const char pci_device_80ee_beef[] = "VirtualBox Graphics Adapter"; ++static const char pci_device_80ee_cafe[] = "VirtualBox Guest Service"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const char pci_vendor_8384[] = "Sigmatel"; ++static const char pci_device_8384_7618[] = "High Definition Audio Codec"; ++static const char pci_device_8384_7670[] = "9770 High Definition Audio"; ++static const char pci_device_8384_7672[] = "9772 High Definition Audio"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_8401[] = "TRENDware International Inc."; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -25882,6 +27447,8 @@ static const char pci_subsys_9005_008f_1 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_9005_008f_15d9_9005[] = "Onboard SCSI Host Adapter"; + #endif ++static const char pci_device_9005_0092[] = "AVC-2010 [VideoH!]"; ++static const char pci_device_9005_0093[] = "AVC-2410 [VideoH!]"; + static const char pci_device_9005_00c0[] = "AHA-3960D / AIC-7899A U160/m"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -25967,6 +27534,33 @@ static const char pci_subsys_9005_0285_1 + static const char pci_subsys_9005_0285_103c_3227[] = "AAR-2610SA"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_9005_0285_108e_0286[] = "STK RAID INT"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_9005_0285_108e_0287[] = "STK RAID EXT"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_9005_0285_108e_7aac[] = "STK RAID REM"; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_9005_0285_15d9_02b5[] = "AOC-USAS-S4i"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_9005_0285_15d9_02b6[] = "AOC-USAS-S8i"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_9005_0285_15d9_02c9[] = "AOC-USAS-S4iR"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_9005_0285_15d9_02ca[] = "AOC-USAS-S8iR"; ++#endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_9005_0285_17aa_0286[] = "Legend S220 (Legend Crusader)"; + #endif +@@ -26019,7 +27613,7 @@ static const char pci_subsys_9005_0285_9 + static const char pci_subsys_9005_0285_9005_0297[] = "ASR-4005SAS"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_9005_0285_9005_0298[] = "ASR-4000SAS"; ++static const char pci_subsys_9005_0285_9005_0298[] = "ASR-4000"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_9005_0285_9005_0299[] = "ASR-4800SAS"; +@@ -26028,6 +27622,12 @@ static const char pci_subsys_9005_0285_9 + static const char pci_subsys_9005_0285_9005_029a[] = "4805SAS"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_9005_0285_9005_02a4[] = "ICP ICP9085LI"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_9005_0285_9005_02a5[] = "ICP ICP5085BR"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_9005_0285_9005_02b5[] = "ASR5800"; + #endif + #ifdef INIT_SUBSYS_INFO +@@ -26036,6 +27636,57 @@ static const char pci_subsys_9005_0285_9 + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_9005_0285_9005_02b7[] = "ASR5808"; + #endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_9005_0285_9005_02b8[] = "ICP5445SL"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_9005_0285_9005_02b9[] = "ICP5085SL"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_9005_0285_9005_02ba[] = "ICP5805SL"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_9005_0285_9005_02bb[] = "3405"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_9005_0285_9005_02bc[] = "3805"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_9005_0285_9005_02bd[] = "31205"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_9005_0285_9005_02be[] = "31605"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_9005_0285_9005_02bf[] = "ICP ICP5045BL"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_9005_0285_9005_02c0[] = "ICP ICP5085BL"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_9005_0285_9005_02c1[] = "ICP ICP5125BR"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_9005_0285_9005_02c2[] = "ICP ICP5165BR"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_9005_0285_9005_02c3[] = "51205"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_9005_0285_9005_02c4[] = "51605"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_9005_0285_9005_02c5[] = "ICP ICP5125SL"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_9005_0285_9005_02c6[] = "ICP ICP5165SL"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_9005_0285_9005_02c7[] = "3085"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_9005_0285_9005_02c8[] = "ICP5805BL"; ++#endif + static const char pci_device_9005_0286[] = "AAC-RAID (Rocket)"; + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_9005_0286_1014_034d[] = "8s"; +@@ -26074,7 +27725,7 @@ static const char pci_subsys_9005_0286_9 + static const char pci_subsys_9005_0286_9005_02a1[] = "ICP ICP9087MA"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_9005_0286_9005_02a2[] = "3800SAS"; ++static const char pci_subsys_9005_0286_9005_02a2[] = "3800"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_9005_0286_9005_02a3[] = "ICP ICP5445AU"; +@@ -26089,10 +27740,10 @@ static const char pci_subsys_9005_0286_9 + static const char pci_subsys_9005_0286_9005_02a6[] = "ICP9067MA"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_9005_0286_9005_02a7[] = "3805SAS"; ++static const char pci_subsys_9005_0286_9005_02a7[] = "3805"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_9005_0286_9005_02a8[] = "3400SAS"; ++static const char pci_subsys_9005_0286_9005_02a8[] = "3400"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_9005_0286_9005_02a9[] = "ICP ICP5085AU"; +@@ -26101,10 +27752,10 @@ static const char pci_subsys_9005_0286_9 + static const char pci_subsys_9005_0286_9005_02aa[] = "ICP ICP5045AU"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_9005_0286_9005_02ac[] = "1800SAS"; ++static const char pci_subsys_9005_0286_9005_02ac[] = "1800"; + #endif + #ifdef INIT_SUBSYS_INFO +-static const char pci_subsys_9005_0286_9005_02b3[] = "ASR-2400SAS"; ++static const char pci_subsys_9005_0286_9005_02b3[] = "2400"; + #endif + #ifdef INIT_SUBSYS_INFO + static const char pci_subsys_9005_0286_9005_02b4[] = "ICP ICP5045AL"; +@@ -26153,6 +27804,9 @@ static const char pci_device_9005_0503[] + static const char pci_subsys_9005_0503_1014_02bf[] = "Quad Channel PCI-X DDR U320 SCSI RAID Adapter (571E)"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_9005_0503_1014_02c3[] = "PCI-X DDR 3Gb SAS RAID Adapter (572F)"; ++#endif ++#ifdef INIT_SUBSYS_INFO + static const char pci_subsys_9005_0503_1014_02d5[] = "Quad Channel PCI-X DDR U320 SCSI RAID Adapter (571F)"; + #endif + static const char pci_device_9005_0910[] = "AUA-3100B"; +@@ -26175,8 +27829,17 @@ static const char pci_device_9005_8014[] + static const char pci_device_9005_8015[] = "ASC-39320B U320"; + static const char pci_device_9005_8016[] = "ASC-39320A U320"; + static const char pci_device_9005_8017[] = "ASC-29320ALP U320"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_9005_8017_9005_0044[] = "ASC-29320ALP PCIx U320"; ++#endif ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_9005_8017_9005_0045[] = "ASC-29320LPE PCIe U320"; ++#endif + static const char pci_device_9005_801c[] = "ASC-39320D U320"; + static const char pci_device_9005_801d[] = "AIC-7902B U320"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_9005_801d_1014_02cc[] = "ServeRAID 7e"; ++#endif + static const char pci_device_9005_801e[] = "AIC-7901A U320"; + static const char pci_device_9005_801f[] = "AIC-7902 U320"; + #ifdef INIT_SUBSYS_INFO +@@ -26194,6 +27857,9 @@ static const char pci_device_9005_8096[] + static const char pci_device_9005_8097[] = "ASC-29320ALP U320 w/HostRAID"; + static const char pci_device_9005_809c[] = "ASC-39320D(B) U320 w/HostRAID"; + static const char pci_device_9005_809d[] = "AIC-7902(B) U320 w/HostRAID"; ++#ifdef INIT_SUBSYS_INFO ++static const char pci_subsys_9005_809d_1014_02cc[] = "ServeRAID 7e"; ++#endif + static const char pci_device_9005_809e[] = "AIC-7901A U320 w/HostRAID"; + static const char pci_device_9005_809f[] = "AIC-7902 U320 w/HostRAID"; + #endif +@@ -26326,13 +27992,15 @@ static const char pci_device_cddd_0200[] + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_d161[] = "Digium, Inc."; +-static const char pci_device_d161_0205[] = "Wildcard TE205P"; +-static const char pci_device_d161_0210[] = "Wildcard TE210P"; +-static const char pci_device_d161_0405[] = "Wildcard TE405P Quad-Span togglable E1/T1/J1 card 5.0v"; +-static const char pci_device_d161_0406[] = "Wildcard TE406P Quad-Span togglable E1/T1/J1 echo cancellation card 5.0v"; +-static const char pci_device_d161_0410[] = "Wildcard TE410P Quad-Span togglable E1/T1/J1 card 3.3v"; +-static const char pci_device_d161_0411[] = "Wildcard TE411P Quad-Span togglable E1/T1/J1 echo cancellation card 3.3v"; +-static const char pci_device_d161_2400[] = "Wildcard TDM2400P"; ++static const char pci_device_d161_0120[] = "Wildcard TE120P single-span T1/E1/J1 card"; ++static const char pci_device_d161_0205[] = "Wildcard TE205P dual-span T1/E1/J1 card 5.0V"; ++static const char pci_device_d161_0210[] = "Wildcard TE210P dual-span T1/E1/J1 card 3.3V"; ++static const char pci_device_d161_0405[] = "Wildcard TE405P quad-span T1/E1/J1 card 5.0V"; ++static const char pci_device_d161_0410[] = "Wildcard TE410P quad-span T1/E1/J1 card 3.3V"; ++static const char pci_device_d161_0800[] = "Wildcard TDM800P 8-port analog card"; ++static const char pci_device_d161_2400[] = "Wildcard TDM2400P 24-port analog card"; ++static const char pci_device_d161_3400[] = "Wildcard TC400P transcoder base card"; ++static const char pci_device_d161_b410[] = "Wildcard B410 quad-BRI card"; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const char pci_vendor_d4d4[] = "Dy4 Systems Inc"; +@@ -26471,6 +28139,10 @@ static const char pci_device_fffe_0710[] + static const char pci_vendor_ffff[] = "Illegal Vendor ID"; + #endif + #ifdef INIT_SUBSYS_INFO ++static const pciSubsystemInfo pci_ss_info_0e11_0046_0e11_4091 = ++ {0x0e11, 0x4091, pci_subsys_0e11_0046_0e11_4091, 0}; ++#undef pci_ss_info_0e11_4091 ++#define pci_ss_info_0e11_4091 pci_ss_info_0e11_0046_0e11_4091 + static const pciSubsystemInfo pci_ss_info_0e11_0046_0e11_409a = + {0x0e11, 0x409a, pci_subsys_0e11_0046_0e11_409a, 0}; + #undef pci_ss_info_0e11_409a +@@ -26763,6 +28435,12 @@ static const pciSubsystemInfo pci_ss_inf + #undef pci_ss_info_1000_0066 + #define pci_ss_info_1000_0066 pci_ss_info_1000_0040_1000_0066 + #endif ++static const pciSubsystemInfo pci_ss_info_1000_0054_1028_1f09 = ++ {0x1028, 0x1f09, pci_subsys_1000_0054_1028_1f09, 0}; ++#undef pci_ss_info_1028_1f09 ++#define pci_ss_info_1028_1f09 pci_ss_info_1000_0054_1028_1f09 ++#ifdef VENDOR_INCLUDE_NONVIDEO ++#endif + static const pciSubsystemInfo pci_ss_info_1000_0055_1033_8336 = + {0x1033, 0x8336, pci_subsys_1000_0055_1033_8336, 0}; + #undef pci_ss_info_1033_8336 +@@ -26796,6 +28474,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1000, 0x1012, pci_subsys_1000_0060_1000_1012, 0}; + #undef pci_ss_info_1000_1012 + #define pci_ss_info_1000_1012 pci_ss_info_1000_0060_1000_1012 ++static const pciSubsystemInfo pci_ss_info_1000_0060_1000_1016 = ++ {0x1000, 0x1016, pci_subsys_1000_0060_1000_1016, 0}; ++#undef pci_ss_info_1000_1016 ++#define pci_ss_info_1000_1016 pci_ss_info_1000_0060_1000_1016 + static const pciSubsystemInfo pci_ss_info_1000_0060_1014_0363 = + {0x1014, 0x0363, pci_subsys_1000_0060_1014_0363, 0}; + #undef pci_ss_info_1014_0363 +@@ -26808,6 +28490,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1014, 0x0365, pci_subsys_1000_0060_1014_0365, 0}; + #undef pci_ss_info_1014_0365 + #define pci_ss_info_1014_0365 pci_ss_info_1000_0060_1014_0365 ++static const pciSubsystemInfo pci_ss_info_1000_0060_1014_0379 = ++ {0x1014, 0x0379, pci_subsys_1000_0060_1014_0379, 0}; ++#undef pci_ss_info_1014_0379 ++#define pci_ss_info_1014_0379 pci_ss_info_1000_0060_1014_0379 + #endif + static const pciSubsystemInfo pci_ss_info_1000_0060_1028_1f0a = + {0x1028, 0x1f0a, pci_subsys_1000_0060_1028_1f0a, 0}; +@@ -26847,6 +28533,24 @@ static const pciSubsystemInfo pci_ss_inf + #undef pci_ss_info_1170_002f + #define pci_ss_info_1170_002f pci_ss_info_1000_0060_1170_002f + #endif ++static const pciSubsystemInfo pci_ss_info_1000_0060_8086_1006 = ++ {0x8086, 0x1006, pci_subsys_1000_0060_8086_1006, 0}; ++#undef pci_ss_info_8086_1006 ++#define pci_ss_info_8086_1006 pci_ss_info_1000_0060_8086_1006 ++#ifdef VENDOR_INCLUDE_NONVIDEO ++#endif ++static const pciSubsystemInfo pci_ss_info_1000_0060_8086_100a = ++ {0x8086, 0x100a, pci_subsys_1000_0060_8086_100a, 0}; ++#undef pci_ss_info_8086_100a ++#define pci_ss_info_8086_100a pci_ss_info_1000_0060_8086_100a ++#ifdef VENDOR_INCLUDE_NONVIDEO ++#endif ++static const pciSubsystemInfo pci_ss_info_1000_0060_8086_1010 = ++ {0x8086, 0x1010, pci_subsys_1000_0060_8086_1010, 0}; ++#undef pci_ss_info_8086_1010 ++#define pci_ss_info_8086_1010 pci_ss_info_1000_0060_8086_1010 ++#ifdef VENDOR_INCLUDE_NONVIDEO ++#endif + static const pciSubsystemInfo pci_ss_info_1000_0060_8086_34cc = + {0x8086, 0x34cc, pci_subsys_1000_0060_8086_34cc, 0}; + #undef pci_ss_info_8086_34cc +@@ -27315,10 +29019,18 @@ static const pciSubsystemInfo pci_ss_inf + {0x1025, 0x0079, pci_subsys_1002_4370_1025_0079, 0}; + #undef pci_ss_info_1025_0079 + #define pci_ss_info_1025_0079 pci_ss_info_1002_4370_1025_0079 ++static const pciSubsystemInfo pci_ss_info_1002_4370_1025_0091 = ++ {0x1025, 0x0091, pci_subsys_1002_4370_1025_0091, 0}; ++#undef pci_ss_info_1025_0091 ++#define pci_ss_info_1025_0091 pci_ss_info_1002_4370_1025_0091 + static const pciSubsystemInfo pci_ss_info_1002_4370_103c_308b = + {0x103c, 0x308b, pci_subsys_1002_4370_103c_308b, 0}; + #undef pci_ss_info_103c_308b + #define pci_ss_info_103c_308b pci_ss_info_1002_4370_103c_308b ++static const pciSubsystemInfo pci_ss_info_1002_4370_105b_0c81 = ++ {0x105b, 0x0c81, pci_subsys_1002_4370_105b_0c81, 0}; ++#undef pci_ss_info_105b_0c81 ++#define pci_ss_info_105b_0c81 pci_ss_info_1002_4370_105b_0c81 + static const pciSubsystemInfo pci_ss_info_1002_4370_107b_0300 = + {0x107b, 0x0300, pci_subsys_1002_4370_107b_0300, 0}; + #undef pci_ss_info_107b_0300 +@@ -27763,6 +29475,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1028, 0x012a, pci_subsys_1002_4c57_1028_012a, 0}; + #undef pci_ss_info_1028_012a + #define pci_ss_info_1028_012a pci_ss_info_1002_4c57_1028_012a ++static const pciSubsystemInfo pci_ss_info_1002_4c57_1043_1622 = ++ {0x1043, 0x1622, pci_subsys_1002_4c57_1043_1622, 0}; ++#undef pci_ss_info_1043_1622 ++#define pci_ss_info_1043_1622 pci_ss_info_1002_4c57_1043_1622 + static const pciSubsystemInfo pci_ss_info_1002_4c57_144d_c006 = + {0x144d, 0xc006, pci_subsys_1002_4c57_144d_c006, 0}; + #undef pci_ss_info_144d_c006 +@@ -27791,6 +29507,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1509, 0x1930, pci_subsys_1002_4c59_1509_1930, 0}; + #undef pci_ss_info_1509_1930 + #define pci_ss_info_1509_1930 pci_ss_info_1002_4c59_1509_1930 ++static const pciSubsystemInfo pci_ss_info_1002_4c66_1014_054d = ++ {0x1014, 0x054d, pci_subsys_1002_4c66_1014_054d, 0}; ++#undef pci_ss_info_1014_054d ++#define pci_ss_info_1014_054d pci_ss_info_1002_4c66_1014_054d + static const pciSubsystemInfo pci_ss_info_1002_4e44_1002_515e = + {0x1002, 0x515e, pci_subsys_1002_4e44_1002_515e, 0}; + #undef pci_ss_info_1002_515e +@@ -28199,6 +29919,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x103c, 0x1279, pci_subsys_1002_5452_103c_1279, 0}; + #undef pci_ss_info_103c_1279 + #define pci_ss_info_103c_1279 pci_ss_info_1002_5452_103c_1279 ++static const pciSubsystemInfo pci_ss_info_1002_5460_1775_1100 = ++ {0x1775, 0x1100, pci_subsys_1002_5460_1775_1100, 0}; ++#undef pci_ss_info_1775_1100 ++#define pci_ss_info_1775_1100 pci_ss_info_1002_5460_1775_1100 + static const pciSubsystemInfo pci_ss_info_1002_5653_1025_0080 = + {0x1025, 0x0080, pci_subsys_1002_5653_1025_0080, 0}; + #undef pci_ss_info_1025_0080 +@@ -28207,6 +29931,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1002, 0x5654, pci_subsys_1002_5654_1002_5654, 0}; + #undef pci_ss_info_1002_5654 + #define pci_ss_info_1002_5654 pci_ss_info_1002_5654_1002_5654 ++static const pciSubsystemInfo pci_ss_info_1002_5940_17af_2021 = ++ {0x17af, 0x2021, pci_subsys_1002_5940_17af_2021, 0}; ++#undef pci_ss_info_17af_2021 ++#define pci_ss_info_17af_2021 pci_ss_info_1002_5940_17af_2021 + static const pciSubsystemInfo pci_ss_info_1002_5941_1458_4019 = + {0x1458, 0x4019, pci_subsys_1002_5941_1458_4019, 0}; + #undef pci_ss_info_1458_4019 +@@ -28243,6 +29971,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x103c, 0x308b, pci_subsys_1002_5955_103c_308b, 0}; + #undef pci_ss_info_103c_308b + #define pci_ss_info_103c_308b pci_ss_info_1002_5955_103c_308b ++static const pciSubsystemInfo pci_ss_info_1002_5960_17af_2020 = ++ {0x17af, 0x2020, pci_subsys_1002_5960_17af_2020, 0}; ++#undef pci_ss_info_17af_2020 ++#define pci_ss_info_17af_2020 pci_ss_info_1002_5960_17af_2020 + static const pciSubsystemInfo pci_ss_info_1002_5961_1002_2f72 = + {0x1002, 0x2f72, pci_subsys_1002_5961_1002_2f72, 0}; + #undef pci_ss_info_1002_2f72 +@@ -28367,6 +30099,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1458, 0x4032, pci_subsys_1002_5d44_1458_4032, 0}; + #undef pci_ss_info_1458_4032 + #define pci_ss_info_1458_4032 pci_ss_info_1002_5d44_1458_4032 ++static const pciSubsystemInfo pci_ss_info_1002_5d44_147b_6190 = ++ {0x147b, 0x6190, pci_subsys_1002_5d44_147b_6190, 0}; ++#undef pci_ss_info_147b_6190 ++#define pci_ss_info_147b_6190 pci_ss_info_1002_5d44_147b_6190 + static const pciSubsystemInfo pci_ss_info_1002_5d44_174b_7c12 = + {0x174b, 0x7c12, pci_subsys_1002_5d44_174b_7c12, 0}; + #undef pci_ss_info_174b_7c12 +@@ -28497,6 +30233,26 @@ static const pciSubsystemInfo pci_ss_inf + {0x1385, 0xf311, pci_subsys_100b_0020_1385_f311, 0}; + #undef pci_ss_info_1385_f311 + #define pci_ss_info_1385_f311 pci_ss_info_100b_0020_1385_f311 ++static const pciSubsystemInfo pci_ss_info_100b_0502_100b_0502 = ++ {0x100b, 0x0502, pci_subsys_100b_0502_100b_0502, 0}; ++#undef pci_ss_info_100b_0502 ++#define pci_ss_info_100b_0502 pci_ss_info_100b_0502_100b_0502 ++static const pciSubsystemInfo pci_ss_info_100b_0503_100b_0503 = ++ {0x100b, 0x0503, pci_subsys_100b_0503_100b_0503, 0}; ++#undef pci_ss_info_100b_0503 ++#define pci_ss_info_100b_0503 pci_ss_info_100b_0503_100b_0503 ++static const pciSubsystemInfo pci_ss_info_100b_0510_100b_0500 = ++ {0x100b, 0x0500, pci_subsys_100b_0510_100b_0500, 0}; ++#undef pci_ss_info_100b_0500 ++#define pci_ss_info_100b_0500 pci_ss_info_100b_0510_100b_0500 ++static const pciSubsystemInfo pci_ss_info_100b_0511_100b_0501 = ++ {0x100b, 0x0501, pci_subsys_100b_0511_100b_0501, 0}; ++#undef pci_ss_info_100b_0501 ++#define pci_ss_info_100b_0501 pci_ss_info_100b_0511_100b_0501 ++static const pciSubsystemInfo pci_ss_info_100b_0515_100b_0505 = ++ {0x100b, 0x0505, pci_subsys_100b_0515_100b_0505, 0}; ++#undef pci_ss_info_100b_0505 ++#define pci_ss_info_100b_0505 pci_ss_info_100b_0515_100b_0505 + static const pciSubsystemInfo pci_ss_info_1011_0009_1025_0310 = + {0x1025, 0x0310, pci_subsys_1011_0009_1025_0310, 0}; + #undef pci_ss_info_1025_0310 +@@ -28980,6 +30736,14 @@ static const pciSubsystemInfo pci_ss_inf + {0x1014, 0x0259, pci_subsys_1014_01bd_1014_0259, 0}; + #undef pci_ss_info_1014_0259 + #define pci_ss_info_1014_0259 pci_ss_info_1014_01bd_1014_0259 ++static const pciSubsystemInfo pci_ss_info_1014_01ef_1734_102b = ++ {0x1734, 0x102b, pci_subsys_1014_01ef_1734_102b, 0}; ++#undef pci_ss_info_1734_102b ++#define pci_ss_info_1734_102b pci_ss_info_1014_01ef_1734_102b ++static const pciSubsystemInfo pci_ss_info_1014_01ef_1734_10f8 = ++ {0x1734, 0x10f8, pci_subsys_1014_01ef_1734_10f8, 0}; ++#undef pci_ss_info_1734_10f8 ++#define pci_ss_info_1734_10f8 pci_ss_info_1014_01ef_1734_10f8 + static const pciSubsystemInfo pci_ss_info_1014_0219_1014_021a = + {0x1014, 0x021a, pci_subsys_1014_0219_1014_021a, 0}; + #undef pci_ss_info_1014_021a +@@ -29016,6 +30780,28 @@ static const pciSubsystemInfo pci_ss_inf + {0x1014, 0x02c2, pci_subsys_1014_02bd_1014_02c2, 0}; + #undef pci_ss_info_1014_02c2 + #define pci_ss_info_1014_02c2 pci_ss_info_1014_02bd_1014_02c2 ++static const pciSubsystemInfo pci_ss_info_1014_02bd_1014_0338 = ++ {0x1014, 0x0338, pci_subsys_1014_02bd_1014_0338, 0}; ++#undef pci_ss_info_1014_0338 ++#define pci_ss_info_1014_0338 pci_ss_info_1014_02bd_1014_0338 ++static const pciSubsystemInfo pci_ss_info_1014_0339_1014_0360 = ++ {0x1014, 0x0360, pci_subsys_1014_0339_1014_0360, 0}; ++#undef pci_ss_info_1014_0360 ++#define pci_ss_info_1014_0360 pci_ss_info_1014_0339_1014_0360 ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciSubsystemInfo pci_ss_info_101a_1dc1_101a_0019 = ++ {0x101a, 0x0019, pci_subsys_101a_1dc1_101a_0019, 0}; ++#undef pci_ss_info_101a_0019 ++#define pci_ss_info_101a_0019 pci_ss_info_101a_1dc1_101a_0019 ++static const pciSubsystemInfo pci_ss_info_101a_1dc1_101a_001f = ++ {0x101a, 0x001f, pci_subsys_101a_1dc1_101a_001f, 0}; ++#undef pci_ss_info_101a_001f ++#define pci_ss_info_101a_001f pci_ss_info_101a_1dc1_101a_001f ++static const pciSubsystemInfo pci_ss_info_101a_1dc1_101a_0ece = ++ {0x101a, 0x0ece, pci_subsys_101a_1dc1_101a_0ece, 0}; ++#undef pci_ss_info_101a_0ece ++#define pci_ss_info_101a_0ece pci_ss_info_101a_1dc1_101a_0ece + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo pci_ss_info_101e_1960_101e_0471 = +@@ -29345,6 +31131,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1028, 0x1f02, pci_subsys_1028_0015_1028_1f02, 0}; + #undef pci_ss_info_1028_1f02 + #define pci_ss_info_1028_1f02 pci_ss_info_1028_0015_1028_1f02 ++static const pciSubsystemInfo pci_ss_info_1028_0015_1028_1f03 = ++ {0x1028, 0x1f03, pci_subsys_1028_0015_1028_1f03, 0}; ++#undef pci_ss_info_1028_1f03 ++#define pci_ss_info_1028_1f03 pci_ss_info_1028_0015_1028_1f03 + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo pci_ss_info_102a_001f_9005_000f = + {0x9005, 0x000f, pci_subsys_102a_001f_9005_000f, 0}; +@@ -29853,6 +31643,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x102b, 0x0907, pci_subsys_102b_2538_102b_0907, 0}; + #undef pci_ss_info_102b_0907 + #define pci_ss_info_102b_0907 pci_ss_info_102b_2538_102b_0907 ++static const pciSubsystemInfo pci_ss_info_102b_2538_102b_0947 = ++ {0x102b, 0x0947, pci_subsys_102b_2538_102b_0947, 0}; ++#undef pci_ss_info_102b_0947 ++#define pci_ss_info_102b_0947 pci_ss_info_102b_2538_102b_0947 + static const pciSubsystemInfo pci_ss_info_102b_2538_102b_1047 = + {0x102b, 0x1047, pci_subsys_102b_2538_102b_1047, 0}; + #undef pci_ss_info_102b_1047 +@@ -30015,6 +31809,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x807d, 0x1043, pci_subsys_1033_00e0_807d_1043, 0}; + #undef pci_ss_info_807d_1043 + #define pci_ss_info_807d_1043 pci_ss_info_1033_00e0_807d_1043 ++static const pciSubsystemInfo pci_ss_info_1039_0182_1734_1095 = ++ {0x1734, 0x1095, pci_subsys_1039_0182_1734_1095, 0}; ++#undef pci_ss_info_1734_1095 ++#define pci_ss_info_1734_1095 pci_ss_info_1039_0182_1734_1095 + static const pciSubsystemInfo pci_ss_info_1039_0200_1039_0000 = + {0x1039, 0x0000, pci_subsys_1039_0200_1039_0000, 0}; + #undef pci_ss_info_1039_0000 +@@ -30023,6 +31821,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x107d, 0x2720, pci_subsys_1039_0300_107d_2720, 0}; + #undef pci_ss_info_107d_2720 + #define pci_ss_info_107d_2720 pci_ss_info_1039_0300_107d_2720 ++static const pciSubsystemInfo pci_ss_info_1039_0761_1734_1099 = ++ {0x1734, 0x1099, pci_subsys_1039_0761_1734_1099, 0}; ++#undef pci_ss_info_1734_1099 ++#define pci_ss_info_1734_1099 pci_ss_info_1039_0761_1734_1099 + static const pciSubsystemInfo pci_ss_info_1039_0900_1019_0a14 = + {0x1019, 0x0a14, pci_subsys_1039_0900_1019_0a14, 0}; + #undef pci_ss_info_1019_0a14 +@@ -30055,6 +31857,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1462, 0x7010, pci_subsys_1039_5513_1462_7010, 0}; + #undef pci_ss_info_1462_7010 + #define pci_ss_info_1462_7010 pci_ss_info_1039_5513_1462_7010 ++static const pciSubsystemInfo pci_ss_info_1039_5513_1734_1095 = ++ {0x1734, 0x1095, pci_subsys_1039_5513_1734_1095, 0}; ++#undef pci_ss_info_1734_1095 ++#define pci_ss_info_1734_1095 pci_ss_info_1039_5513_1734_1095 + static const pciSubsystemInfo pci_ss_info_1039_6300_1019_0970 = + {0x1019, 0x0970, pci_subsys_1039_6300_1019_0970, 0}; + #undef pci_ss_info_1019_0970 +@@ -30095,6 +31901,18 @@ static const pciSubsystemInfo pci_ss_inf + {0x1039, 0x6330, pci_subsys_1039_6330_1039_6330, 0}; + #undef pci_ss_info_1039_6330 + #define pci_ss_info_1039_6330 pci_ss_info_1039_6330_1039_6330 ++static const pciSubsystemInfo pci_ss_info_1039_6330_1043_8113 = ++ {0x1043, 0x8113, pci_subsys_1039_6330_1043_8113, 0}; ++#undef pci_ss_info_1043_8113 ++#define pci_ss_info_1043_8113 pci_ss_info_1039_6330_1043_8113 ++static const pciSubsystemInfo pci_ss_info_1039_6330_1458_d000 = ++ {0x1458, 0xd000, pci_subsys_1039_6330_1458_d000, 0}; ++#undef pci_ss_info_1458_d000 ++#define pci_ss_info_1458_d000 pci_ss_info_1039_6330_1458_d000 ++static const pciSubsystemInfo pci_ss_info_1039_6330_1734_1099 = ++ {0x1734, 0x1099, pci_subsys_1039_6330_1734_1099, 0}; ++#undef pci_ss_info_1734_1099 ++#define pci_ss_info_1734_1099 pci_ss_info_1039_6330_1734_1099 + static const pciSubsystemInfo pci_ss_info_1039_7001_1019_0a14 = + {0x1019, 0x0a14, pci_subsys_1039_7001_1019_0a14, 0}; + #undef pci_ss_info_1019_0a14 +@@ -30111,6 +31929,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1462, 0x7010, pci_subsys_1039_7001_1462_7010, 0}; + #undef pci_ss_info_1462_7010 + #define pci_ss_info_1462_7010 pci_ss_info_1039_7001_1462_7010 ++static const pciSubsystemInfo pci_ss_info_1039_7001_1734_1095 = ++ {0x1734, 0x1095, pci_subsys_1039_7001_1734_1095, 0}; ++#undef pci_ss_info_1734_1095 ++#define pci_ss_info_1734_1095 pci_ss_info_1039_7001_1734_1095 + static const pciSubsystemInfo pci_ss_info_1039_7002_1462_7010 = + {0x1462, 0x7010, pci_subsys_1039_7002_1462_7010, 0}; + #undef pci_ss_info_1462_7010 +@@ -30119,6 +31941,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1509, 0x7002, pci_subsys_1039_7002_1509_7002, 0}; + #undef pci_ss_info_1509_7002 + #define pci_ss_info_1509_7002 pci_ss_info_1039_7002_1509_7002 ++static const pciSubsystemInfo pci_ss_info_1039_7002_1734_1095 = ++ {0x1734, 0x1095, pci_subsys_1039_7002_1734_1095, 0}; ++#undef pci_ss_info_1734_1095 ++#define pci_ss_info_1734_1095 pci_ss_info_1039_7002_1734_1095 + static const pciSubsystemInfo pci_ss_info_1039_7007_1462_701d = + {0x1462, 0x701d, pci_subsys_1039_7007_1462_701d, 0}; + #undef pci_ss_info_1462_701d +@@ -30131,6 +31957,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x15bd, 0x1001, pci_subsys_1039_7012_15bd_1001, 0}; + #undef pci_ss_info_15bd_1001 + #define pci_ss_info_15bd_1001 pci_ss_info_1039_7012_15bd_1001 ++static const pciSubsystemInfo pci_ss_info_1039_7012_1734_109f = ++ {0x1734, 0x109f, pci_subsys_1039_7012_1734_109f, 0}; ++#undef pci_ss_info_1734_109f ++#define pci_ss_info_1734_109f pci_ss_info_1039_7012_1734_109f + static const pciSubsystemInfo pci_ss_info_1039_7016_1039_7016 = + {0x1039, 0x7016, pci_subsys_1039_7016_1039_7016, 0}; + #undef pci_ss_info_1039_7016 +@@ -30159,6 +31989,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1039, 0x7018, pci_subsys_1039_7018_1039_7018, 0}; + #undef pci_ss_info_1039_7018 + #define pci_ss_info_1039_7018 pci_ss_info_1039_7018_1039_7018 ++static const pciSubsystemInfo pci_ss_info_1039_7018_1043_1453 = ++ {0x1043, 0x1453, pci_subsys_1039_7018_1043_1453, 0}; ++#undef pci_ss_info_1043_1453 ++#define pci_ss_info_1043_1453 pci_ss_info_1039_7018_1043_1453 + static const pciSubsystemInfo pci_ss_info_1039_7018_1043_800b = + {0x1043, 0x800b, pci_subsys_1039_7018_1043_800b, 0}; + #undef pci_ss_info_1043_800b +@@ -30295,6 +32129,22 @@ static const pciSubsystemInfo pci_ss_inf + {0x103c, 0x3225, pci_subsys_103c_3220_103c_3225, 0}; + #undef pci_ss_info_103c_3225 + #define pci_ss_info_103c_3225 pci_ss_info_103c_3220_103c_3225 ++static const pciSubsystemInfo pci_ss_info_103c_3230_103c_3223 = ++ {0x103c, 0x3223, pci_subsys_103c_3230_103c_3223, 0}; ++#undef pci_ss_info_103c_3223 ++#define pci_ss_info_103c_3223 pci_ss_info_103c_3230_103c_3223 ++static const pciSubsystemInfo pci_ss_info_103c_3230_103c_3234 = ++ {0x103c, 0x3234, pci_subsys_103c_3230_103c_3234, 0}; ++#undef pci_ss_info_103c_3234 ++#define pci_ss_info_103c_3234 pci_ss_info_103c_3230_103c_3234 ++static const pciSubsystemInfo pci_ss_info_103c_3230_103c_3235 = ++ {0x103c, 0x3235, pci_subsys_103c_3230_103c_3235, 0}; ++#undef pci_ss_info_103c_3235 ++#define pci_ss_info_103c_3235 pci_ss_info_103c_3230_103c_3235 ++static const pciSubsystemInfo pci_ss_info_103c_3230_103c_3237 = ++ {0x103c, 0x3237, pci_subsys_103c_3230_103c_3237, 0}; ++#undef pci_ss_info_103c_3237 ++#define pci_ss_info_103c_3237 pci_ss_info_103c_3230_103c_3237 + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo pci_ss_info_1043_0675_0675_1704 = + {0x0675, 0x1704, pci_subsys_1043_0675_0675_1704, 0}; +@@ -31276,6 +33126,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x105a, 0x4600, pci_subsys_105a_8650_105a_4600, 0}; + #undef pci_ss_info_105a_4600 + #define pci_ss_info_105a_4600 pci_ss_info_105a_8650_105a_4600 ++static const pciSubsystemInfo pci_ss_info_105a_8650_105a_4610 = ++ {0x105a, 0x4610, pci_subsys_105a_8650_105a_4610, 0}; ++#undef pci_ss_info_105a_4610 ++#define pci_ss_info_105a_4610 pci_ss_info_105a_8650_105a_4610 + static const pciSubsystemInfo pci_ss_info_105a_8650_105a_8601 = + {0x105a, 0x8601, pci_subsys_105a_8650_105a_8601, 0}; + #undef pci_ss_info_105a_8601 +@@ -31591,6 +33445,14 @@ static const pciSubsystemInfo pci_ss_inf + #undef pci_ss_info_108d_0017 + #define pci_ss_info_108d_0017 pci_ss_info_108d_0019_108d_0017 + #endif ++static const pciSubsystemInfo pci_ss_info_108e_5000_108e_5000 = ++ {0x108e, 0x5000, pci_subsys_108e_5000_108e_5000, 0}; ++#undef pci_ss_info_108e_5000 ++#define pci_ss_info_108e_5000 pci_ss_info_108e_5000_108e_5000 ++static const pciSubsystemInfo pci_ss_info_108e_a001_108e_a001 = ++ {0x108e, 0xa001, pci_subsys_108e_a001_108e_a001, 0}; ++#undef pci_ss_info_108e_a001 ++#define pci_ss_info_108e_a001 pci_ss_info_108e_a001_108e_a001 + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo pci_ss_info_1095_0648_1043_8025 = + {0x1043, 0x8025, pci_subsys_1095_0648_1043_8025, 0}; +@@ -32122,14 +33984,26 @@ static const pciSubsystemInfo pci_ss_inf + #define pci_ss_info_10b4_237e pci_ss_info_10b4_1b1d_10b4_237e + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciSubsystemInfo pci_ss_info_10b5_6540_1775_1100 = ++ {0x1775, 0x1100, pci_subsys_10b5_6540_1775_1100, 0}; ++#undef pci_ss_info_1775_1100 ++#define pci_ss_info_1775_1100 pci_ss_info_10b5_6540_1775_1100 + static const pciSubsystemInfo pci_ss_info_10b5_6540_4c53_10e0 = + {0x4c53, 0x10e0, pci_subsys_10b5_6540_4c53_10e0, 0}; + #undef pci_ss_info_4c53_10e0 + #define pci_ss_info_4c53_10e0 pci_ss_info_10b5_6540_4c53_10e0 ++static const pciSubsystemInfo pci_ss_info_10b5_6541_1775_1100 = ++ {0x1775, 0x1100, pci_subsys_10b5_6541_1775_1100, 0}; ++#undef pci_ss_info_1775_1100 ++#define pci_ss_info_1775_1100 pci_ss_info_10b5_6541_1775_1100 + static const pciSubsystemInfo pci_ss_info_10b5_6541_4c53_10e0 = + {0x4c53, 0x10e0, pci_subsys_10b5_6541_4c53_10e0, 0}; + #undef pci_ss_info_4c53_10e0 + #define pci_ss_info_4c53_10e0 pci_ss_info_10b5_6541_4c53_10e0 ++static const pciSubsystemInfo pci_ss_info_10b5_6542_1775_1100 = ++ {0x1775, 0x1100, pci_subsys_10b5_6542_1775_1100, 0}; ++#undef pci_ss_info_1775_1100 ++#define pci_ss_info_1775_1100 pci_ss_info_10b5_6542_1775_1100 + static const pciSubsystemInfo pci_ss_info_10b5_6542_4c53_10e0 = + {0x4c53, 0x10e0, pci_subsys_10b5_6542_4c53_10e0, 0}; + #undef pci_ss_info_4c53_10e0 +@@ -32374,6 +34248,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x14b4, 0xd100, pci_subsys_10b5_9054_14b4_d100, 0}; + #undef pci_ss_info_14b4_d100 + #define pci_ss_info_14b4_d100 pci_ss_info_10b5_9054_14b4_d100 ++static const pciSubsystemInfo pci_ss_info_10b5_9054_14b4_d114 = ++ {0x14b4, 0xd114, pci_subsys_10b5_9054_14b4_d114, 0}; ++#undef pci_ss_info_14b4_d114 ++#define pci_ss_info_14b4_d114 pci_ss_info_10b5_9054_14b4_d114 + static const pciSubsystemInfo pci_ss_info_10b5_9054_16df_0011 = + {0x16df, 0x0011, pci_subsys_10b5_9054_16df_0011, 0}; + #undef pci_ss_info_16df_0011 +@@ -32402,6 +34280,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x10b5, 0x2979, pci_subsys_10b5_9056_10b5_2979, 0}; + #undef pci_ss_info_10b5_2979 + #define pci_ss_info_10b5_2979 pci_ss_info_10b5_9056_10b5_2979 ++static const pciSubsystemInfo pci_ss_info_10b5_9056_14b4_d140 = ++ {0x14b4, 0xd140, pci_subsys_10b5_9056_14b4_d140, 0}; ++#undef pci_ss_info_14b4_d140 ++#define pci_ss_info_14b4_d140 pci_ss_info_10b5_9056_14b4_d140 + static const pciSubsystemInfo pci_ss_info_10b5_906d_125c_0640 = + {0x125c, 0x0640, pci_subsys_10b5_906d_125c_0640, 0}; + #undef pci_ss_info_125c_0640 +@@ -32512,6 +34394,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x10b7, 0x2031, pci_subsys_10b7_0013_10b7_2031, 0}; + #undef pci_ss_info_10b7_2031 + #define pci_ss_info_10b7_2031 pci_ss_info_10b7_0013_10b7_2031 ++static const pciSubsystemInfo pci_ss_info_10b7_1007_10b7_615b = ++ {0x10b7, 0x615b, pci_subsys_10b7_1007_10b7_615b, 0}; ++#undef pci_ss_info_10b7_615b ++#define pci_ss_info_10b7_615b pci_ss_info_10b7_1007_10b7_615b + static const pciSubsystemInfo pci_ss_info_10b7_1007_10b7_615c = + {0x10b7, 0x615c, pci_subsys_10b7_1007_10b7_615c, 0}; + #undef pci_ss_info_10b7_615c +@@ -32721,6 +34607,12 @@ static const pciSubsystemInfo pci_ss_inf + #define pci_ss_info_1028_0097 pci_ss_info_10b7_9200_1028_0097 + #ifdef VENDOR_INCLUDE_NONVIDEO + #endif ++static const pciSubsystemInfo pci_ss_info_10b7_9200_1028_00b4 = ++ {0x1028, 0x00b4, pci_subsys_10b7_9200_1028_00b4, 0}; ++#undef pci_ss_info_1028_00b4 ++#define pci_ss_info_1028_00b4 pci_ss_info_10b7_9200_1028_00b4 ++#ifdef VENDOR_INCLUDE_NONVIDEO ++#endif + static const pciSubsystemInfo pci_ss_info_10b7_9200_1028_00fe = + {0x1028, 0x00fe, pci_subsys_10b7_9200_1028_00fe, 0}; + #undef pci_ss_info_1028_00fe +@@ -33469,6 +35361,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x147b, 0x1c1a, pci_subsys_10de_0053_147b_1c1a, 0}; + #undef pci_ss_info_147b_1c1a + #define pci_ss_info_147b_1c1a pci_ss_info_10de_0053_147b_1c1a ++static const pciSubsystemInfo pci_ss_info_10de_0054_1043_815a = ++ {0x1043, 0x815a, pci_subsys_10de_0054_1043_815a, 0}; ++#undef pci_ss_info_1043_815a ++#define pci_ss_info_1043_815a pci_ss_info_10de_0054_1043_815a + static const pciSubsystemInfo pci_ss_info_10de_0054_1458_b003 = + {0x1458, 0xb003, pci_subsys_10de_0054_1458_b003, 0}; + #undef pci_ss_info_1458_b003 +@@ -33549,6 +35445,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x147b, 0x1c1a, pci_subsys_10de_005b_147b_1c1a, 0}; + #undef pci_ss_info_147b_1c1a + #define pci_ss_info_147b_1c1a pci_ss_info_10de_005b_147b_1c1a ++static const pciSubsystemInfo pci_ss_info_10de_005e_1043_815a = ++ {0x1043, 0x815a, pci_subsys_10de_005e_1043_815a, 0}; ++#undef pci_ss_info_1043_815a ++#define pci_ss_info_1043_815a pci_ss_info_10de_005e_1043_815a + static const pciSubsystemInfo pci_ss_info_10de_005e_10f1_2891 = + {0x10f1, 0x2891, pci_subsys_10de_005e_10f1_2891, 0}; + #undef pci_ss_info_10f1_2891 +@@ -33645,6 +35545,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x10de, 0x029b, pci_subsys_10de_00cd_10de_029b, 0}; + #undef pci_ss_info_10de_029b + #define pci_ss_info_10de_029b pci_ss_info_10de_00cd_10de_029b ++static const pciSubsystemInfo pci_ss_info_10de_00df_1043_80a7 = ++ {0x1043, 0x80a7, pci_subsys_10de_00df_1043_80a7, 0}; ++#undef pci_ss_info_1043_80a7 ++#define pci_ss_info_1043_80a7 pci_ss_info_10de_00df_1043_80a7 + static const pciSubsystemInfo pci_ss_info_10de_00df_105b_0c43 = + {0x105b, 0x0c43, pci_subsys_10de_00df_105b_0c43, 0}; + #undef pci_ss_info_105b_0c43 +@@ -33653,6 +35557,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x147b, 0x1c0b, pci_subsys_10de_00df_147b_1c0b, 0}; + #undef pci_ss_info_147b_1c0b + #define pci_ss_info_147b_1c0b pci_ss_info_10de_00df_147b_1c0b ++static const pciSubsystemInfo pci_ss_info_10de_00e0_1043_813f = ++ {0x1043, 0x813f, pci_subsys_10de_00e0_1043_813f, 0}; ++#undef pci_ss_info_1043_813f ++#define pci_ss_info_1043_813f pci_ss_info_10de_00e0_1043_813f + static const pciSubsystemInfo pci_ss_info_10de_00e0_10de_0c11 = + {0x10de, 0x0c11, pci_subsys_10de_00e0_10de_0c11, 0}; + #undef pci_ss_info_10de_0c11 +@@ -33665,6 +35573,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x147b, 0x1c0b, pci_subsys_10de_00e0_147b_1c0b, 0}; + #undef pci_ss_info_147b_1c0b + #define pci_ss_info_147b_1c0b pci_ss_info_10de_00e0_147b_1c0b ++static const pciSubsystemInfo pci_ss_info_10de_00e1_1043_813f = ++ {0x1043, 0x813f, pci_subsys_10de_00e1_1043_813f, 0}; ++#undef pci_ss_info_1043_813f ++#define pci_ss_info_1043_813f pci_ss_info_10de_00e1_1043_813f + static const pciSubsystemInfo pci_ss_info_10de_00e1_1462_7030 = + {0x1462, 0x7030, pci_subsys_10de_00e1_1462_7030, 0}; + #undef pci_ss_info_1462_7030 +@@ -33673,6 +35585,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x147b, 0x1c0b, pci_subsys_10de_00e1_147b_1c0b, 0}; + #undef pci_ss_info_147b_1c0b + #define pci_ss_info_147b_1c0b pci_ss_info_10de_00e1_147b_1c0b ++static const pciSubsystemInfo pci_ss_info_10de_00e3_1043_813f = ++ {0x1043, 0x813f, pci_subsys_10de_00e3_1043_813f, 0}; ++#undef pci_ss_info_1043_813f ++#define pci_ss_info_1043_813f pci_ss_info_10de_00e3_1043_813f + static const pciSubsystemInfo pci_ss_info_10de_00e3_105b_0c43 = + {0x105b, 0x0c43, pci_subsys_10de_00e3_105b_0c43, 0}; + #undef pci_ss_info_105b_0c43 +@@ -33681,6 +35597,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x147b, 0x1c0b, pci_subsys_10de_00e3_147b_1c0b, 0}; + #undef pci_ss_info_147b_1c0b + #define pci_ss_info_147b_1c0b pci_ss_info_10de_00e3_147b_1c0b ++static const pciSubsystemInfo pci_ss_info_10de_00e4_1043_813f = ++ {0x1043, 0x813f, pci_subsys_10de_00e4_1043_813f, 0}; ++#undef pci_ss_info_1043_813f ++#define pci_ss_info_1043_813f pci_ss_info_10de_00e4_1043_813f + static const pciSubsystemInfo pci_ss_info_10de_00e4_105b_0c43 = + {0x105b, 0x0c43, pci_subsys_10de_00e4_105b_0c43, 0}; + #undef pci_ss_info_105b_0c43 +@@ -33693,6 +35613,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x147b, 0x1c0b, pci_subsys_10de_00e4_147b_1c0b, 0}; + #undef pci_ss_info_147b_1c0b + #define pci_ss_info_147b_1c0b pci_ss_info_10de_00e4_147b_1c0b ++static const pciSubsystemInfo pci_ss_info_10de_00e5_1043_813f = ++ {0x1043, 0x813f, pci_subsys_10de_00e5_1043_813f, 0}; ++#undef pci_ss_info_1043_813f ++#define pci_ss_info_1043_813f pci_ss_info_10de_00e5_1043_813f + static const pciSubsystemInfo pci_ss_info_10de_00e5_105b_0c43 = + {0x105b, 0x0c43, pci_subsys_10de_00e5_105b_0c43, 0}; + #undef pci_ss_info_105b_0c43 +@@ -33705,6 +35629,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x147b, 0x1c0b, pci_subsys_10de_00e5_147b_1c0b, 0}; + #undef pci_ss_info_147b_1c0b + #define pci_ss_info_147b_1c0b pci_ss_info_10de_00e5_147b_1c0b ++static const pciSubsystemInfo pci_ss_info_10de_00e7_1043_813f = ++ {0x1043, 0x813f, pci_subsys_10de_00e7_1043_813f, 0}; ++#undef pci_ss_info_1043_813f ++#define pci_ss_info_1043_813f pci_ss_info_10de_00e7_1043_813f + static const pciSubsystemInfo pci_ss_info_10de_00e7_105b_0c43 = + {0x105b, 0x0c43, pci_subsys_10de_00e7_105b_0c43, 0}; + #undef pci_ss_info_105b_0c43 +@@ -33717,6 +35645,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x147b, 0x1c0b, pci_subsys_10de_00e7_147b_1c0b, 0}; + #undef pci_ss_info_147b_1c0b + #define pci_ss_info_147b_1c0b pci_ss_info_10de_00e7_147b_1c0b ++static const pciSubsystemInfo pci_ss_info_10de_00e8_1043_813f = ++ {0x1043, 0x813f, pci_subsys_10de_00e8_1043_813f, 0}; ++#undef pci_ss_info_1043_813f ++#define pci_ss_info_1043_813f pci_ss_info_10de_00e8_1043_813f + static const pciSubsystemInfo pci_ss_info_10de_00e8_105b_0c43 = + {0x105b, 0x0c43, pci_subsys_10de_00e8_105b_0c43, 0}; + #undef pci_ss_info_105b_0c43 +@@ -33729,10 +35661,18 @@ static const pciSubsystemInfo pci_ss_inf + {0x147b, 0x1c0b, pci_subsys_10de_00e8_147b_1c0b, 0}; + #undef pci_ss_info_147b_1c0b + #define pci_ss_info_147b_1c0b pci_ss_info_10de_00e8_147b_1c0b ++static const pciSubsystemInfo pci_ss_info_10de_00ea_1043_819d = ++ {0x1043, 0x819d, pci_subsys_10de_00ea_1043_819d, 0}; ++#undef pci_ss_info_1043_819d ++#define pci_ss_info_1043_819d pci_ss_info_10de_00ea_1043_819d + static const pciSubsystemInfo pci_ss_info_10de_00ea_105b_0c43 = + {0x105b, 0x0c43, pci_subsys_10de_00ea_105b_0c43, 0}; + #undef pci_ss_info_105b_0c43 + #define pci_ss_info_105b_0c43 pci_ss_info_10de_00ea_105b_0c43 ++static const pciSubsystemInfo pci_ss_info_10de_00ea_1462_b010 = ++ {0x1462, 0xb010, pci_subsys_10de_00ea_1462_b010, 0}; ++#undef pci_ss_info_1462_b010 ++#define pci_ss_info_1462_b010 pci_ss_info_10de_00ea_1462_b010 + static const pciSubsystemInfo pci_ss_info_10de_00ea_147b_1c0b = + {0x147b, 0x1c0b, pci_subsys_10de_00ea_147b_1c0b, 0}; + #undef pci_ss_info_147b_1c0b +@@ -33741,6 +35681,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1043, 0x81a6, pci_subsys_10de_00f1_1043_81a6, 0}; + #undef pci_ss_info_1043_81a6 + #define pci_ss_info_1043_81a6 pci_ss_info_10de_00f1_1043_81a6 ++static const pciSubsystemInfo pci_ss_info_10de_00f1_1458_3150 = ++ {0x1458, 0x3150, pci_subsys_10de_00f1_1458_3150, 0}; ++#undef pci_ss_info_1458_3150 ++#define pci_ss_info_1458_3150 pci_ss_info_10de_00f1_1458_3150 + static const pciSubsystemInfo pci_ss_info_10de_00f1_1682_2119 = + {0x1682, 0x2119, pci_subsys_10de_00f1_1682_2119, 0}; + #undef pci_ss_info_1682_2119 +@@ -33845,6 +35789,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1043, 0x4015, pci_subsys_10de_0110_1043_4015, 0}; + #undef pci_ss_info_1043_4015 + #define pci_ss_info_1043_4015 pci_ss_info_10de_0110_1043_4015 ++static const pciSubsystemInfo pci_ss_info_10de_0110_1043_4021 = ++ {0x1043, 0x4021, pci_subsys_10de_0110_1043_4021, 0}; ++#undef pci_ss_info_1043_4021 ++#define pci_ss_info_1043_4021 pci_ss_info_10de_0110_1043_4021 + static const pciSubsystemInfo pci_ss_info_10de_0110_1043_4031 = + {0x1043, 0x4031, pci_subsys_10de_0110_1043_4031, 0}; + #undef pci_ss_info_1043_4031 +@@ -33893,6 +35841,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x14af, 0x7103, pci_subsys_10de_0110_14af_7103, 0}; + #undef pci_ss_info_14af_7103 + #define pci_ss_info_14af_7103 pci_ss_info_10de_0110_14af_7103 ++static const pciSubsystemInfo pci_ss_info_10de_0141_1043_81b0 = ++ {0x1043, 0x81b0, pci_subsys_10de_0141_1043_81b0, 0}; ++#undef pci_ss_info_1043_81b0 ++#define pci_ss_info_1043_81b0 pci_ss_info_10de_0141_1043_81b0 + static const pciSubsystemInfo pci_ss_info_10de_0141_1458_3124 = + {0x1458, 0x3124, pci_subsys_10de_0141_1458_3124, 0}; + #undef pci_ss_info_1458_3124 +@@ -34053,10 +36005,26 @@ static const pciSubsystemInfo pci_ss_inf + {0x1545, 0x002f, pci_subsys_10de_0202_1545_002f, 0}; + #undef pci_ss_info_1545_002f + #define pci_ss_info_1545_002f pci_ss_info_10de_0202_1545_002f ++static const pciSubsystemInfo pci_ss_info_10de_0221_3842_a341 = ++ {0x3842, 0xa341, pci_subsys_10de_0221_3842_a341, 0}; ++#undef pci_ss_info_3842_a341 ++#define pci_ss_info_3842_a341 pci_ss_info_10de_0221_3842_a341 ++static const pciSubsystemInfo pci_ss_info_10de_0240_1043_81cd = ++ {0x1043, 0x81cd, pci_subsys_10de_0240_1043_81cd, 0}; ++#undef pci_ss_info_1043_81cd ++#define pci_ss_info_1043_81cd pci_ss_info_10de_0240_1043_81cd + static const pciSubsystemInfo pci_ss_info_10de_0240_1462_7207 = + {0x1462, 0x7207, pci_subsys_10de_0240_1462_7207, 0}; + #undef pci_ss_info_1462_7207 + #define pci_ss_info_1462_7207 pci_ss_info_10de_0240_1462_7207 ++static const pciSubsystemInfo pci_ss_info_10de_0244_10de_0244 = ++ {0x10de, 0x0244, pci_subsys_10de_0244_10de_0244, 0}; ++#undef pci_ss_info_10de_0244 ++#define pci_ss_info_10de_0244 pci_ss_info_10de_0244_10de_0244 ++static const pciSubsystemInfo pci_ss_info_10de_0247_1043_1382 = ++ {0x1043, 0x1382, pci_subsys_10de_0247_1043_1382, 0}; ++#undef pci_ss_info_1043_1382 ++#define pci_ss_info_1043_1382 pci_ss_info_10de_0247_1043_1382 + static const pciSubsystemInfo pci_ss_info_10de_0251_1043_8023 = + {0x1043, 0x8023, pci_subsys_10de_0251_1043_8023, 0}; + #undef pci_ss_info_1043_8023 +@@ -34069,74 +36037,194 @@ static const pciSubsystemInfo pci_ss_inf + {0x147b, 0x8f09, pci_subsys_10de_0253_147b_8f09, 0}; + #undef pci_ss_info_147b_8f09 + #define pci_ss_info_147b_8f09 pci_ss_info_10de_0253_147b_8f09 ++static const pciSubsystemInfo pci_ss_info_10de_0260_1043_81bc = ++ {0x1043, 0x81bc, pci_subsys_10de_0260_1043_81bc, 0}; ++#undef pci_ss_info_1043_81bc ++#define pci_ss_info_1043_81bc pci_ss_info_10de_0260_1043_81bc ++static const pciSubsystemInfo pci_ss_info_10de_0260_1458_5001 = ++ {0x1458, 0x5001, pci_subsys_10de_0260_1458_5001, 0}; ++#undef pci_ss_info_1458_5001 ++#define pci_ss_info_1458_5001 pci_ss_info_10de_0260_1458_5001 + static const pciSubsystemInfo pci_ss_info_10de_0260_1462_7207 = + {0x1462, 0x7207, pci_subsys_10de_0260_1462_7207, 0}; + #undef pci_ss_info_1462_7207 + #define pci_ss_info_1462_7207 pci_ss_info_10de_0260_1462_7207 ++static const pciSubsystemInfo pci_ss_info_10de_0264_1043_81bc = ++ {0x1043, 0x81bc, pci_subsys_10de_0264_1043_81bc, 0}; ++#undef pci_ss_info_1043_81bc ++#define pci_ss_info_1043_81bc pci_ss_info_10de_0264_1043_81bc + static const pciSubsystemInfo pci_ss_info_10de_0264_1462_7207 = + {0x1462, 0x7207, pci_subsys_10de_0264_1462_7207, 0}; + #undef pci_ss_info_1462_7207 + #define pci_ss_info_1462_7207 pci_ss_info_10de_0264_1462_7207 ++static const pciSubsystemInfo pci_ss_info_10de_0265_1043_81bc = ++ {0x1043, 0x81bc, pci_subsys_10de_0265_1043_81bc, 0}; ++#undef pci_ss_info_1043_81bc ++#define pci_ss_info_1043_81bc pci_ss_info_10de_0265_1043_81bc + static const pciSubsystemInfo pci_ss_info_10de_0265_1462_7207 = + {0x1462, 0x7207, pci_subsys_10de_0265_1462_7207, 0}; + #undef pci_ss_info_1462_7207 + #define pci_ss_info_1462_7207 pci_ss_info_10de_0265_1462_7207 ++static const pciSubsystemInfo pci_ss_info_10de_0266_1043_81bc = ++ {0x1043, 0x81bc, pci_subsys_10de_0266_1043_81bc, 0}; ++#undef pci_ss_info_1043_81bc ++#define pci_ss_info_1043_81bc pci_ss_info_10de_0266_1043_81bc + static const pciSubsystemInfo pci_ss_info_10de_0266_1462_7207 = + {0x1462, 0x7207, pci_subsys_10de_0266_1462_7207, 0}; + #undef pci_ss_info_1462_7207 + #define pci_ss_info_1462_7207 pci_ss_info_10de_0266_1462_7207 ++static const pciSubsystemInfo pci_ss_info_10de_0267_1043_81bc = ++ {0x1043, 0x81bc, pci_subsys_10de_0267_1043_81bc, 0}; ++#undef pci_ss_info_1043_81bc ++#define pci_ss_info_1043_81bc pci_ss_info_10de_0267_1043_81bc + static const pciSubsystemInfo pci_ss_info_10de_0267_1462_7207 = + {0x1462, 0x7207, pci_subsys_10de_0267_1462_7207, 0}; + #undef pci_ss_info_1462_7207 + #define pci_ss_info_1462_7207 pci_ss_info_10de_0267_1462_7207 ++static const pciSubsystemInfo pci_ss_info_10de_0269_1043_8141 = ++ {0x1043, 0x8141, pci_subsys_10de_0269_1043_8141, 0}; ++#undef pci_ss_info_1043_8141 ++#define pci_ss_info_1043_8141 pci_ss_info_10de_0269_1043_8141 + static const pciSubsystemInfo pci_ss_info_10de_0269_1462_7207 = + {0x1462, 0x7207, pci_subsys_10de_0269_1462_7207, 0}; + #undef pci_ss_info_1462_7207 + #define pci_ss_info_1462_7207 pci_ss_info_10de_0269_1462_7207 ++static const pciSubsystemInfo pci_ss_info_10de_026c_10de_cb84 = ++ {0x10de, 0xcb84, pci_subsys_10de_026c_10de_cb84, 0}; ++#undef pci_ss_info_10de_cb84 ++#define pci_ss_info_10de_cb84 pci_ss_info_10de_026c_10de_cb84 + static const pciSubsystemInfo pci_ss_info_10de_026c_1462_7207 = + {0x1462, 0x7207, pci_subsys_10de_026c_1462_7207, 0}; + #undef pci_ss_info_1462_7207 + #define pci_ss_info_1462_7207 pci_ss_info_10de_026c_1462_7207 ++static const pciSubsystemInfo pci_ss_info_10de_026d_1043_81bc = ++ {0x1043, 0x81bc, pci_subsys_10de_026d_1043_81bc, 0}; ++#undef pci_ss_info_1043_81bc ++#define pci_ss_info_1043_81bc pci_ss_info_10de_026d_1043_81bc + static const pciSubsystemInfo pci_ss_info_10de_026d_1462_7207 = + {0x1462, 0x7207, pci_subsys_10de_026d_1462_7207, 0}; + #undef pci_ss_info_1462_7207 + #define pci_ss_info_1462_7207 pci_ss_info_10de_026d_1462_7207 ++static const pciSubsystemInfo pci_ss_info_10de_026e_1043_81bc = ++ {0x1043, 0x81bc, pci_subsys_10de_026e_1043_81bc, 0}; ++#undef pci_ss_info_1043_81bc ++#define pci_ss_info_1043_81bc pci_ss_info_10de_026e_1043_81bc + static const pciSubsystemInfo pci_ss_info_10de_026e_1462_7207 = + {0x1462, 0x7207, pci_subsys_10de_026e_1462_7207, 0}; + #undef pci_ss_info_1462_7207 + #define pci_ss_info_1462_7207 pci_ss_info_10de_026e_1462_7207 ++static const pciSubsystemInfo pci_ss_info_10de_0270_1043_81bc = ++ {0x1043, 0x81bc, pci_subsys_10de_0270_1043_81bc, 0}; ++#undef pci_ss_info_1043_81bc ++#define pci_ss_info_1043_81bc pci_ss_info_10de_0270_1043_81bc ++static const pciSubsystemInfo pci_ss_info_10de_0270_1458_5001 = ++ {0x1458, 0x5001, pci_subsys_10de_0270_1458_5001, 0}; ++#undef pci_ss_info_1458_5001 ++#define pci_ss_info_1458_5001 pci_ss_info_10de_0270_1458_5001 + static const pciSubsystemInfo pci_ss_info_10de_0270_1462_7207 = + {0x1462, 0x7207, pci_subsys_10de_0270_1462_7207, 0}; + #undef pci_ss_info_1462_7207 + #define pci_ss_info_1462_7207 pci_ss_info_10de_0270_1462_7207 ++static const pciSubsystemInfo pci_ss_info_10de_027e_1043_81cd = ++ {0x1043, 0x81cd, pci_subsys_10de_027e_1043_81cd, 0}; ++#undef pci_ss_info_1043_81cd ++#define pci_ss_info_1043_81cd pci_ss_info_10de_027e_1043_81cd ++static const pciSubsystemInfo pci_ss_info_10de_027e_1458_5000 = ++ {0x1458, 0x5000, pci_subsys_10de_027e_1458_5000, 0}; ++#undef pci_ss_info_1458_5000 ++#define pci_ss_info_1458_5000 pci_ss_info_10de_027e_1458_5000 + static const pciSubsystemInfo pci_ss_info_10de_027e_1462_7207 = + {0x1462, 0x7207, pci_subsys_10de_027e_1462_7207, 0}; + #undef pci_ss_info_1462_7207 + #define pci_ss_info_1462_7207 pci_ss_info_10de_027e_1462_7207 ++static const pciSubsystemInfo pci_ss_info_10de_027f_1043_81cd = ++ {0x1043, 0x81cd, pci_subsys_10de_027f_1043_81cd, 0}; ++#undef pci_ss_info_1043_81cd ++#define pci_ss_info_1043_81cd pci_ss_info_10de_027f_1043_81cd ++static const pciSubsystemInfo pci_ss_info_10de_027f_1458_5000 = ++ {0x1458, 0x5000, pci_subsys_10de_027f_1458_5000, 0}; ++#undef pci_ss_info_1458_5000 ++#define pci_ss_info_1458_5000 pci_ss_info_10de_027f_1458_5000 + static const pciSubsystemInfo pci_ss_info_10de_027f_1462_7207 = + {0x1462, 0x7207, pci_subsys_10de_027f_1462_7207, 0}; + #undef pci_ss_info_1462_7207 + #define pci_ss_info_1462_7207 pci_ss_info_10de_027f_1462_7207 ++static const pciSubsystemInfo pci_ss_info_10de_0291_10de_042b = ++ {0x10de, 0x042b, pci_subsys_10de_0291_10de_042b, 0}; ++#undef pci_ss_info_10de_042b ++#define pci_ss_info_10de_042b pci_ss_info_10de_0291_10de_042b ++static const pciSubsystemInfo pci_ss_info_10de_0295_107d_2a68 = ++ {0x107d, 0x2a68, pci_subsys_10de_0295_107d_2a68, 0}; ++#undef pci_ss_info_107d_2a68 ++#define pci_ss_info_107d_2a68 pci_ss_info_10de_0295_107d_2a68 ++static const pciSubsystemInfo pci_ss_info_10de_02f0_1043_81cd = ++ {0x1043, 0x81cd, pci_subsys_10de_02f0_1043_81cd, 0}; ++#undef pci_ss_info_1043_81cd ++#define pci_ss_info_1043_81cd pci_ss_info_10de_02f0_1043_81cd + static const pciSubsystemInfo pci_ss_info_10de_02f0_1462_7207 = + {0x1462, 0x7207, pci_subsys_10de_02f0_1462_7207, 0}; + #undef pci_ss_info_1462_7207 + #define pci_ss_info_1462_7207 pci_ss_info_10de_02f0_1462_7207 ++static const pciSubsystemInfo pci_ss_info_10de_02f1_1458_5000 = ++ {0x1458, 0x5000, pci_subsys_10de_02f1_1458_5000, 0}; ++#undef pci_ss_info_1458_5000 ++#define pci_ss_info_1458_5000 pci_ss_info_10de_02f1_1458_5000 ++static const pciSubsystemInfo pci_ss_info_10de_02f8_1043_81cd = ++ {0x1043, 0x81cd, pci_subsys_10de_02f8_1043_81cd, 0}; ++#undef pci_ss_info_1043_81cd ++#define pci_ss_info_1043_81cd pci_ss_info_10de_02f8_1043_81cd ++static const pciSubsystemInfo pci_ss_info_10de_02f8_1458_5000 = ++ {0x1458, 0x5000, pci_subsys_10de_02f8_1458_5000, 0}; ++#undef pci_ss_info_1458_5000 ++#define pci_ss_info_1458_5000 pci_ss_info_10de_02f8_1458_5000 + static const pciSubsystemInfo pci_ss_info_10de_02f8_1462_7207 = + {0x1462, 0x7207, pci_subsys_10de_02f8_1462_7207, 0}; + #undef pci_ss_info_1462_7207 + #define pci_ss_info_1462_7207 pci_ss_info_10de_02f8_1462_7207 ++static const pciSubsystemInfo pci_ss_info_10de_02f9_1043_81cd = ++ {0x1043, 0x81cd, pci_subsys_10de_02f9_1043_81cd, 0}; ++#undef pci_ss_info_1043_81cd ++#define pci_ss_info_1043_81cd pci_ss_info_10de_02f9_1043_81cd ++static const pciSubsystemInfo pci_ss_info_10de_02f9_1458_5000 = ++ {0x1458, 0x5000, pci_subsys_10de_02f9_1458_5000, 0}; ++#undef pci_ss_info_1458_5000 ++#define pci_ss_info_1458_5000 pci_ss_info_10de_02f9_1458_5000 + static const pciSubsystemInfo pci_ss_info_10de_02f9_1462_7207 = + {0x1462, 0x7207, pci_subsys_10de_02f9_1462_7207, 0}; + #undef pci_ss_info_1462_7207 + #define pci_ss_info_1462_7207 pci_ss_info_10de_02f9_1462_7207 ++static const pciSubsystemInfo pci_ss_info_10de_02fa_1043_81cd = ++ {0x1043, 0x81cd, pci_subsys_10de_02fa_1043_81cd, 0}; ++#undef pci_ss_info_1043_81cd ++#define pci_ss_info_1043_81cd pci_ss_info_10de_02fa_1043_81cd ++static const pciSubsystemInfo pci_ss_info_10de_02fa_1458_5000 = ++ {0x1458, 0x5000, pci_subsys_10de_02fa_1458_5000, 0}; ++#undef pci_ss_info_1458_5000 ++#define pci_ss_info_1458_5000 pci_ss_info_10de_02fa_1458_5000 + static const pciSubsystemInfo pci_ss_info_10de_02fa_1462_7207 = + {0x1462, 0x7207, pci_subsys_10de_02fa_1462_7207, 0}; + #undef pci_ss_info_1462_7207 + #define pci_ss_info_1462_7207 pci_ss_info_10de_02fa_1462_7207 ++static const pciSubsystemInfo pci_ss_info_10de_02fe_1043_81cd = ++ {0x1043, 0x81cd, pci_subsys_10de_02fe_1043_81cd, 0}; ++#undef pci_ss_info_1043_81cd ++#define pci_ss_info_1043_81cd pci_ss_info_10de_02fe_1043_81cd ++static const pciSubsystemInfo pci_ss_info_10de_02fe_1458_5000 = ++ {0x1458, 0x5000, pci_subsys_10de_02fe_1458_5000, 0}; ++#undef pci_ss_info_1458_5000 ++#define pci_ss_info_1458_5000 pci_ss_info_10de_02fe_1458_5000 + static const pciSubsystemInfo pci_ss_info_10de_02fe_1462_7207 = + {0x1462, 0x7207, pci_subsys_10de_02fe_1462_7207, 0}; + #undef pci_ss_info_1462_7207 + #define pci_ss_info_1462_7207 pci_ss_info_10de_02fe_1462_7207 ++static const pciSubsystemInfo pci_ss_info_10de_02ff_1043_81cd = ++ {0x1043, 0x81cd, pci_subsys_10de_02ff_1043_81cd, 0}; ++#undef pci_ss_info_1043_81cd ++#define pci_ss_info_1043_81cd pci_ss_info_10de_02ff_1043_81cd ++static const pciSubsystemInfo pci_ss_info_10de_02ff_1458_5000 = ++ {0x1458, 0x5000, pci_subsys_10de_02ff_1458_5000, 0}; ++#undef pci_ss_info_1458_5000 ++#define pci_ss_info_1458_5000 pci_ss_info_10de_02ff_1458_5000 + static const pciSubsystemInfo pci_ss_info_10de_02ff_1462_7207 = + {0x1462, 0x7207, pci_subsys_10de_02ff_1462_7207, 0}; + #undef pci_ss_info_1462_7207 +@@ -34145,6 +36233,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1043, 0x814a, pci_subsys_10de_0314_1043_814a, 0}; + #undef pci_ss_info_1043_814a + #define pci_ss_info_1043_814a pci_ss_info_10de_0314_1043_814a ++static const pciSubsystemInfo pci_ss_info_10de_0322_1043_02fb = ++ {0x1043, 0x02fb, pci_subsys_10de_0322_1043_02fb, 0}; ++#undef pci_ss_info_1043_02fb ++#define pci_ss_info_1043_02fb pci_ss_info_10de_0322_1043_02fb + static const pciSubsystemInfo pci_ss_info_10de_0322_1462_9171 = + {0x1462, 0x9171, pci_subsys_10de_0322_1462_9171, 0}; + #undef pci_ss_info_1462_9171 +@@ -34165,14 +36257,26 @@ static const pciSubsystemInfo pci_ss_inf + {0x1043, 0x8145, pci_subsys_10de_0331_1043_8145, 0}; + #undef pci_ss_info_1043_8145 + #define pci_ss_info_1043_8145 pci_ss_info_10de_0331_1043_8145 ++static const pciSubsystemInfo pci_ss_info_10de_0341_1462_9380 = ++ {0x1462, 0x9380, pci_subsys_10de_0341_1462_9380, 0}; ++#undef pci_ss_info_1462_9380 ++#define pci_ss_info_1462_9380 pci_ss_info_10de_0341_1462_9380 + static const pciSubsystemInfo pci_ss_info_10de_0347_103c_006a = + {0x103c, 0x006a, pci_subsys_10de_0347_103c_006a, 0}; + #undef pci_ss_info_103c_006a + #define pci_ss_info_103c_006a pci_ss_info_10de_0347_103c_006a ++static const pciSubsystemInfo pci_ss_info_10de_0391_1458_3427 = ++ {0x1458, 0x3427, pci_subsys_10de_0391_1458_3427, 0}; ++#undef pci_ss_info_1458_3427 ++#define pci_ss_info_1458_3427 pci_ss_info_10de_0391_1458_3427 + static const pciSubsystemInfo pci_ss_info_10de_0392_1462_0622 = + {0x1462, 0x0622, pci_subsys_10de_0392_1462_0622, 0}; + #undef pci_ss_info_1462_0622 + #define pci_ss_info_1462_0622 pci_ss_info_10de_0392_1462_0622 ++static const pciSubsystemInfo pci_ss_info_10de_0398_1025_006c = ++ {0x1025, 0x006c, pci_subsys_10de_0398_1025_006c, 0}; ++#undef pci_ss_info_1025_006c ++#define pci_ss_info_1025_006c pci_ss_info_10de_0398_1025_006c + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo pci_ss_info_10e1_0391_10e1_0391 = + {0x10e1, 0x0391, pci_subsys_10e1_0391_10e1_0391, 0}; +@@ -34180,6 +36284,12 @@ static const pciSubsystemInfo pci_ss_inf + #define pci_ss_info_10e1_0391 pci_ss_info_10e1_0391_10e1_0391 + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciSubsystemInfo pci_ss_info_10e3_0148_1775_1100 = ++ {0x1775, 0x1100, pci_subsys_10e3_0148_1775_1100, 0}; ++#undef pci_ss_info_1775_1100 ++#define pci_ss_info_1775_1100 pci_ss_info_10e3_0148_1775_1100 ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + #endif + static const pciSubsystemInfo pci_ss_info_10ec_0883_1025_1605 = + {0x1025, 0x1605, pci_subsys_10ec_0883_1025_1605, 0}; +@@ -34242,6 +36352,10 @@ static const pciSubsystemInfo pci_ss_inf + #undef pci_ss_info_103c_006a + #define pci_ss_info_103c_006a pci_ss_info_10ec_8139_103c_006a + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciSubsystemInfo pci_ss_info_10ec_8139_1043_1045 = ++ {0x1043, 0x1045, pci_subsys_10ec_8139_1043_1045, 0}; ++#undef pci_ss_info_1043_1045 ++#define pci_ss_info_1043_1045 pci_ss_info_10ec_8139_1043_1045 + static const pciSubsystemInfo pci_ss_info_10ec_8139_1043_8109 = + {0x1043, 0x8109, pci_subsys_10ec_8139_1043_8109, 0}; + #undef pci_ss_info_1043_8109 +@@ -34258,6 +36372,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x10ec, 0x8139, pci_subsys_10ec_8139_10ec_8139, 0}; + #undef pci_ss_info_10ec_8139 + #define pci_ss_info_10ec_8139 pci_ss_info_10ec_8139_10ec_8139 ++static const pciSubsystemInfo pci_ss_info_10ec_8139_10f7_8338 = ++ {0x10f7, 0x8338, pci_subsys_10ec_8139_10f7_8338, 0}; ++#undef pci_ss_info_10f7_8338 ++#define pci_ss_info_10f7_8338 pci_ss_info_10ec_8139_10f7_8338 + static const pciSubsystemInfo pci_ss_info_10ec_8139_1113_ec01 = + {0x1113, 0xec01, pci_subsys_10ec_8139_1113_ec01, 0}; + #undef pci_ss_info_1113_ec01 +@@ -34298,6 +36416,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1436, 0x8139, pci_subsys_10ec_8139_1436_8139, 0}; + #undef pci_ss_info_1436_8139 + #define pci_ss_info_1436_8139 pci_ss_info_10ec_8139_1436_8139 ++static const pciSubsystemInfo pci_ss_info_10ec_8139_144d_c00c = ++ {0x144d, 0xc00c, pci_subsys_10ec_8139_144d_c00c, 0}; ++#undef pci_ss_info_144d_c00c ++#define pci_ss_info_144d_c00c pci_ss_info_10ec_8139_144d_c00c + static const pciSubsystemInfo pci_ss_info_10ec_8139_1458_e000 = + {0x1458, 0xe000, pci_subsys_10ec_8139_1458_e000, 0}; + #undef pci_ss_info_1458_e000 +@@ -34330,6 +36452,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x14cb, 0x0200, pci_subsys_10ec_8139_14cb_0200, 0}; + #undef pci_ss_info_14cb_0200 + #define pci_ss_info_14cb_0200 pci_ss_info_10ec_8139_14cb_0200 ++static const pciSubsystemInfo pci_ss_info_10ec_8139_1565_2300 = ++ {0x1565, 0x2300, pci_subsys_10ec_8139_1565_2300, 0}; ++#undef pci_ss_info_1565_2300 ++#define pci_ss_info_1565_2300 pci_ss_info_10ec_8139_1565_2300 + static const pciSubsystemInfo pci_ss_info_10ec_8139_1695_9001 = + {0x1695, 0x9001, pci_subsys_10ec_8139_1695_9001, 0}; + #undef pci_ss_info_1695_9001 +@@ -34358,6 +36484,10 @@ static const pciSubsystemInfo pci_ss_inf + {0xa0a0, 0x0007, pci_subsys_10ec_8139_a0a0_0007, 0}; + #undef pci_ss_info_a0a0_0007 + #define pci_ss_info_a0a0_0007 pci_ss_info_10ec_8139_a0a0_0007 ++static const pciSubsystemInfo pci_ss_info_10ec_8167_1462_235c = ++ {0x1462, 0x235c, pci_subsys_10ec_8167_1462_235c, 0}; ++#undef pci_ss_info_1462_235c ++#define pci_ss_info_1462_235c pci_ss_info_10ec_8167_1462_235c + #endif + static const pciSubsystemInfo pci_ss_info_10ec_8169_1025_0079 = + {0x1025, 0x0079, pci_subsys_10ec_8169_1025_0079, 0}; +@@ -34376,10 +36506,26 @@ static const pciSubsystemInfo pci_ss_inf + {0x1458, 0xe000, pci_subsys_10ec_8169_1458_e000, 0}; + #undef pci_ss_info_1458_e000 + #define pci_ss_info_1458_e000 pci_ss_info_10ec_8169_1458_e000 ++static const pciSubsystemInfo pci_ss_info_10ec_8169_1462_030c = ++ {0x1462, 0x030c, pci_subsys_10ec_8169_1462_030c, 0}; ++#undef pci_ss_info_1462_030c ++#define pci_ss_info_1462_030c pci_ss_info_10ec_8169_1462_030c + static const pciSubsystemInfo pci_ss_info_10ec_8169_1462_702c = + {0x1462, 0x702c, pci_subsys_10ec_8169_1462_702c, 0}; + #undef pci_ss_info_1462_702c + #define pci_ss_info_1462_702c pci_ss_info_10ec_8169_1462_702c ++static const pciSubsystemInfo pci_ss_info_10ec_8169_1462_7094 = ++ {0x1462, 0x7094, pci_subsys_10ec_8169_1462_7094, 0}; ++#undef pci_ss_info_1462_7094 ++#define pci_ss_info_1462_7094 pci_ss_info_10ec_8169_1462_7094 ++static const pciSubsystemInfo pci_ss_info_10ec_8169_1734_1091 = ++ {0x1734, 0x1091, pci_subsys_10ec_8169_1734_1091, 0}; ++#undef pci_ss_info_1734_1091 ++#define pci_ss_info_1734_1091 pci_ss_info_10ec_8169_1734_1091 ++static const pciSubsystemInfo pci_ss_info_10ec_8169_a0a0_0449 = ++ {0xa0a0, 0x0449, pci_subsys_10ec_8169_a0a0_0449, 0}; ++#undef pci_ss_info_a0a0_0449 ++#define pci_ss_info_a0a0_0449 pci_ss_info_10ec_8169_a0a0_0449 + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo pci_ss_info_1102_0002_1102_0020 = +@@ -34470,6 +36616,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1102, 0x0058, pci_subsys_1102_0004_1102_0058, 0}; + #undef pci_ss_info_1102_0058 + #define pci_ss_info_1102_0058 pci_ss_info_1102_0004_1102_0058 ++static const pciSubsystemInfo pci_ss_info_1102_0004_1102_1002 = ++ {0x1102, 0x1002, pci_subsys_1102_0004_1102_1002, 0}; ++#undef pci_ss_info_1102_1002 ++#define pci_ss_info_1102_1002 pci_ss_info_1102_0004_1102_1002 + static const pciSubsystemInfo pci_ss_info_1102_0004_1102_1007 = + {0x1102, 0x1007, pci_subsys_1102_0004_1102_1007, 0}; + #undef pci_ss_info_1102_1007 +@@ -34478,6 +36628,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1102, 0x2002, pci_subsys_1102_0004_1102_2002, 0}; + #undef pci_ss_info_1102_2002 + #define pci_ss_info_1102_2002 pci_ss_info_1102_0004_1102_2002 ++static const pciSubsystemInfo pci_ss_info_1102_0004_1102_4001 = ++ {0x1102, 0x4001, pci_subsys_1102_0004_1102_4001, 0}; ++#undef pci_ss_info_1102_4001 ++#define pci_ss_info_1102_4001 pci_ss_info_1102_0004_1102_4001 + static const pciSubsystemInfo pci_ss_info_1102_0005_1102_0021 = + {0x1102, 0x0021, pci_subsys_1102_0005_1102_0021, 0}; + #undef pci_ss_info_1102_0021 +@@ -34598,6 +36752,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1103, 0x0001, pci_subsys_1103_0004_1103_0001, 0}; + #undef pci_ss_info_1103_0001 + #define pci_ss_info_1103_0001 pci_ss_info_1103_0004_1103_0001 ++static const pciSubsystemInfo pci_ss_info_1103_0004_1103_0003 = ++ {0x1103, 0x0003, pci_subsys_1103_0004_1103_0003, 0}; ++#undef pci_ss_info_1103_0003 ++#define pci_ss_info_1103_0003 pci_ss_info_1103_0004_1103_0003 + static const pciSubsystemInfo pci_ss_info_1103_0004_1103_0004 = + {0x1103, 0x0004, pci_subsys_1103_0004_1103_0004, 0}; + #undef pci_ss_info_1103_0004 +@@ -34606,6 +36764,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1103, 0x0005, pci_subsys_1103_0004_1103_0005, 0}; + #undef pci_ss_info_1103_0005 + #define pci_ss_info_1103_0005 pci_ss_info_1103_0004_1103_0005 ++static const pciSubsystemInfo pci_ss_info_1103_0004_1103_0006 = ++ {0x1103, 0x0006, pci_subsys_1103_0004_1103_0006, 0}; ++#undef pci_ss_info_1103_0006 ++#define pci_ss_info_1103_0006 pci_ss_info_1103_0004_1103_0006 + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo pci_ss_info_1105_8475_1105_0001 = +@@ -34642,6 +36804,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x147b, 0xa401, pci_subsys_1106_0305_147b_a401, 0}; + #undef pci_ss_info_147b_a401 + #define pci_ss_info_147b_a401 pci_ss_info_1106_0305_147b_a401 ++static const pciSubsystemInfo pci_ss_info_1106_0364_1043_81ce = ++ {0x1043, 0x81ce, pci_subsys_1106_0364_1043_81ce, 0}; ++#undef pci_ss_info_1043_81ce ++#define pci_ss_info_1043_81ce pci_ss_info_1106_0364_1043_81ce + static const pciSubsystemInfo pci_ss_info_1106_0571_1019_0985 = + {0x1019, 0x0985, pci_subsys_1106_0571_1019_0985, 0}; + #undef pci_ss_info_1019_0985 +@@ -34686,6 +36852,14 @@ static const pciSubsystemInfo pci_ss_inf + {0x1462, 0x7020, pci_subsys_1106_0571_1462_7020, 0}; + #undef pci_ss_info_1462_7020 + #define pci_ss_info_1462_7020 pci_ss_info_1106_0571_1462_7020 ++static const pciSubsystemInfo pci_ss_info_1106_0571_1462_7094 = ++ {0x1462, 0x7094, pci_subsys_1106_0571_1462_7094, 0}; ++#undef pci_ss_info_1462_7094 ++#define pci_ss_info_1462_7094 pci_ss_info_1106_0571_1462_7094 ++static const pciSubsystemInfo pci_ss_info_1106_0571_1462_7181 = ++ {0x1462, 0x7181, pci_subsys_1106_0571_1462_7181, 0}; ++#undef pci_ss_info_1462_7181 ++#define pci_ss_info_1462_7181 pci_ss_info_1106_0571_1462_7181 + static const pciSubsystemInfo pci_ss_info_1106_0571_147b_1407 = + {0x147b, 0x1407, pci_subsys_1106_0571_147b_1407, 0}; + #undef pci_ss_info_147b_1407 +@@ -34802,6 +36976,14 @@ static const pciSubsystemInfo pci_ss_inf + {0x1462, 0x7020, pci_subsys_1106_3038_1462_7020, 0}; + #undef pci_ss_info_1462_7020 + #define pci_ss_info_1462_7020 pci_ss_info_1106_3038_1462_7020 ++static const pciSubsystemInfo pci_ss_info_1106_3038_1462_7094 = ++ {0x1462, 0x7094, pci_subsys_1106_3038_1462_7094, 0}; ++#undef pci_ss_info_1462_7094 ++#define pci_ss_info_1462_7094 pci_ss_info_1106_3038_1462_7094 ++static const pciSubsystemInfo pci_ss_info_1106_3038_1462_7181 = ++ {0x1462, 0x7181, pci_subsys_1106_3038_1462_7181, 0}; ++#undef pci_ss_info_1462_7181 ++#define pci_ss_info_1462_7181 pci_ss_info_1106_3038_1462_7181 + static const pciSubsystemInfo pci_ss_info_1106_3038_147b_1407 = + {0x147b, 0x1407, pci_subsys_1106_3038_147b_1407, 0}; + #undef pci_ss_info_147b_1407 +@@ -34826,6 +37008,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1186, 0x1400, pci_subsys_1106_3043_1186_1400, 0}; + #undef pci_ss_info_1186_1400 + #define pci_ss_info_1186_1400 pci_ss_info_1106_3043_1186_1400 ++static const pciSubsystemInfo pci_ss_info_1106_3044_0010_0001 = ++ {0x0010, 0x0001, pci_subsys_1106_3044_0010_0001, 0}; ++#undef pci_ss_info_0010_0001 ++#define pci_ss_info_0010_0001 pci_ss_info_1106_3044_0010_0001 + #endif + static const pciSubsystemInfo pci_ss_info_1106_3044_1025_005a = + {0x1025, 0x005a, pci_subsys_1106_3044_1025_005a, 0}; +@@ -34944,6 +37130,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1043, 0x812a, pci_subsys_1106_3059_1043_812a, 0}; + #undef pci_ss_info_1043_812a + #define pci_ss_info_1043_812a pci_ss_info_1106_3059_1043_812a ++static const pciSubsystemInfo pci_ss_info_1106_3059_10ec_8168 = ++ {0x10ec, 0x8168, pci_subsys_1106_3059_10ec_8168, 0}; ++#undef pci_ss_info_10ec_8168 ++#define pci_ss_info_10ec_8168 pci_ss_info_1106_3059_10ec_8168 + static const pciSubsystemInfo pci_ss_info_1106_3059_1106_3059 = + {0x1106, 0x3059, pci_subsys_1106_3059_1106_3059, 0}; + #undef pci_ss_info_1106_3059 +@@ -34964,6 +37154,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1297, 0xc160, pci_subsys_1106_3059_1297_c160, 0}; + #undef pci_ss_info_1297_c160 + #define pci_ss_info_1297_c160 pci_ss_info_1106_3059_1297_c160 ++static const pciSubsystemInfo pci_ss_info_1106_3059_1413_147b = ++ {0x1413, 0x147b, pci_subsys_1106_3059_1413_147b, 0}; ++#undef pci_ss_info_1413_147b ++#define pci_ss_info_1413_147b pci_ss_info_1106_3059_1413_147b + static const pciSubsystemInfo pci_ss_info_1106_3059_1458_a002 = + {0x1458, 0xa002, pci_subsys_1106_3059_1458_a002, 0}; + #undef pci_ss_info_1458_a002 +@@ -34976,10 +37170,18 @@ static const pciSubsystemInfo pci_ss_inf + {0x1462, 0x3800, pci_subsys_1106_3059_1462_3800, 0}; + #undef pci_ss_info_1462_3800 + #define pci_ss_info_1462_3800 pci_ss_info_1106_3059_1462_3800 ++static const pciSubsystemInfo pci_ss_info_1106_3059_1462_7181 = ++ {0x1462, 0x7181, pci_subsys_1106_3059_1462_7181, 0}; ++#undef pci_ss_info_1462_7181 ++#define pci_ss_info_1462_7181 pci_ss_info_1106_3059_1462_7181 + static const pciSubsystemInfo pci_ss_info_1106_3059_147b_1407 = + {0x147b, 0x1407, pci_subsys_1106_3059_147b_1407, 0}; + #undef pci_ss_info_147b_1407 + #define pci_ss_info_147b_1407 pci_ss_info_1106_3059_147b_1407 ++static const pciSubsystemInfo pci_ss_info_1106_3059_1849_0850 = ++ {0x1849, 0x0850, pci_subsys_1106_3059_1849_0850, 0}; ++#undef pci_ss_info_1849_0850 ++#define pci_ss_info_1849_0850 pci_ss_info_1106_3059_1849_0850 + static const pciSubsystemInfo pci_ss_info_1106_3059_1849_9761 = + {0x1849, 0x9761, pci_subsys_1106_3059_1849_9761, 0}; + #undef pci_ss_info_1849_9761 +@@ -34994,6 +37196,10 @@ static const pciSubsystemInfo pci_ss_inf + {0xa0a0, 0x01b6, pci_subsys_1106_3059_a0a0_01b6, 0}; + #undef pci_ss_info_a0a0_01b6 + #define pci_ss_info_a0a0_01b6 pci_ss_info_1106_3059_a0a0_01b6 ++static const pciSubsystemInfo pci_ss_info_1106_3059_a0a0_0342 = ++ {0xa0a0, 0x0342, pci_subsys_1106_3059_a0a0_0342, 0}; ++#undef pci_ss_info_a0a0_0342 ++#define pci_ss_info_a0a0_0342 pci_ss_info_1106_3059_a0a0_0342 + static const pciSubsystemInfo pci_ss_info_1106_3065_1043_80a1 = + {0x1043, 0x80a1, pci_subsys_1106_3065_1043_80a1, 0}; + #undef pci_ss_info_1043_80a1 +@@ -35014,6 +37220,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x13b9, 0x1421, pci_subsys_1106_3065_13b9_1421, 0}; + #undef pci_ss_info_13b9_1421 + #define pci_ss_info_13b9_1421 pci_ss_info_1106_3065_13b9_1421 ++static const pciSubsystemInfo pci_ss_info_1106_3065_1462_7181 = ++ {0x1462, 0x7181, pci_subsys_1106_3065_1462_7181, 0}; ++#undef pci_ss_info_1462_7181 ++#define pci_ss_info_1462_7181 pci_ss_info_1106_3065_1462_7181 + static const pciSubsystemInfo pci_ss_info_1106_3065_147b_1c09 = + {0x147b, 0x1c09, pci_subsys_1106_3065_147b_1c09, 0}; + #undef pci_ss_info_147b_1c09 +@@ -35078,6 +37288,14 @@ static const pciSubsystemInfo pci_ss_inf + {0x1462, 0x7020, pci_subsys_1106_3104_1462_7020, 0}; + #undef pci_ss_info_1462_7020 + #define pci_ss_info_1462_7020 pci_ss_info_1106_3104_1462_7020 ++static const pciSubsystemInfo pci_ss_info_1106_3104_1462_7094 = ++ {0x1462, 0x7094, pci_subsys_1106_3104_1462_7094, 0}; ++#undef pci_ss_info_1462_7094 ++#define pci_ss_info_1462_7094 pci_ss_info_1106_3104_1462_7094 ++static const pciSubsystemInfo pci_ss_info_1106_3104_1462_7181 = ++ {0x1462, 0x7181, pci_subsys_1106_3104_1462_7181, 0}; ++#undef pci_ss_info_1462_7181 ++#define pci_ss_info_1462_7181 pci_ss_info_1106_3104_1462_7181 + static const pciSubsystemInfo pci_ss_info_1106_3104_147b_1407 = + {0x147b, 0x1407, pci_subsys_1106_3104_147b_1407, 0}; + #undef pci_ss_info_147b_1407 +@@ -35114,6 +37332,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1462, 0x7020, pci_subsys_1106_3149_1462_7020, 0}; + #undef pci_ss_info_1462_7020 + #define pci_ss_info_1462_7020 pci_ss_info_1106_3149_1462_7020 ++static const pciSubsystemInfo pci_ss_info_1106_3149_1462_7094 = ++ {0x1462, 0x7094, pci_subsys_1106_3149_1462_7094, 0}; ++#undef pci_ss_info_1462_7094 ++#define pci_ss_info_1462_7094 pci_ss_info_1106_3149_1462_7094 + static const pciSubsystemInfo pci_ss_info_1106_3149_147b_1407 = + {0x147b, 0x1407, pci_subsys_1106_3149_147b_1407, 0}; + #undef pci_ss_info_147b_1407 +@@ -35126,6 +37348,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1849, 0x3149, pci_subsys_1106_3149_1849_3149, 0}; + #undef pci_ss_info_1849_3149 + #define pci_ss_info_1849_3149 pci_ss_info_1106_3149_1849_3149 ++static const pciSubsystemInfo pci_ss_info_1106_3149_a0a0_04ad = ++ {0xa0a0, 0x04ad, pci_subsys_1106_3149_a0a0_04ad, 0}; ++#undef pci_ss_info_a0a0_04ad ++#define pci_ss_info_a0a0_04ad pci_ss_info_1106_3149_a0a0_04ad + static const pciSubsystemInfo pci_ss_info_1106_3164_1043_80f4 = + {0x1043, 0x80f4, pci_subsys_1106_3164_1043_80f4, 0}; + #undef pci_ss_info_1043_80f4 +@@ -35284,6 +37510,14 @@ static const pciSubsystemInfo pci_ss_inf + #define pci_ss_info_1127_0400 pci_ss_info_1127_0400_1127_0400 + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciSubsystemInfo pci_ss_info_1131_1561_1775_c200 = ++ {0x1775, 0xc200, pci_subsys_1131_1561_1775_c200, 0}; ++#undef pci_ss_info_1775_c200 ++#define pci_ss_info_1775_c200 pci_ss_info_1131_1561_1775_c200 ++static const pciSubsystemInfo pci_ss_info_1131_1562_1775_c200 = ++ {0x1775, 0xc200, pci_subsys_1131_1562_1775_c200, 0}; ++#undef pci_ss_info_1775_c200 ++#define pci_ss_info_1775_c200 pci_ss_info_1131_1562_1775_c200 + static const pciSubsystemInfo pci_ss_info_1131_5402_1244_0f00 = + {0x1244, 0x0f00, pci_subsys_1131_5402_1244_0f00, 0}; + #undef pci_ss_info_1244_0f00 +@@ -35362,6 +37596,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1043, 0x4862, pci_subsys_1131_7133_1043_4862, 0}; + #undef pci_ss_info_1043_4862 + #define pci_ss_info_1043_4862 pci_ss_info_1131_7133_1043_4862 ++static const pciSubsystemInfo pci_ss_info_1131_7133_1131_0000 = ++ {0x1131, 0x0000, pci_subsys_1131_7133_1131_0000, 0}; ++#undef pci_ss_info_1131_0000 ++#define pci_ss_info_1131_0000 pci_ss_info_1131_7133_1131_0000 + static const pciSubsystemInfo pci_ss_info_1131_7133_1131_2001 = + {0x1131, 0x2001, pci_subsys_1131_7133_1131_2001, 0}; + #undef pci_ss_info_1131_2001 +@@ -35406,6 +37644,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1461, 0x1044, pci_subsys_1131_7133_1461_1044, 0}; + #undef pci_ss_info_1461_1044 + #define pci_ss_info_1461_1044 pci_ss_info_1131_7133_1461_1044 ++static const pciSubsystemInfo pci_ss_info_1131_7133_1461_a14b = ++ {0x1461, 0xa14b, pci_subsys_1131_7133_1461_a14b, 0}; ++#undef pci_ss_info_1461_a14b ++#define pci_ss_info_1461_a14b pci_ss_info_1131_7133_1461_a14b + static const pciSubsystemInfo pci_ss_info_1131_7133_1461_f31f = + {0x1461, 0xf31f, pci_subsys_1131_7133_1461_f31f, 0}; + #undef pci_ss_info_1461_f31f +@@ -35430,10 +37672,18 @@ static const pciSubsystemInfo pci_ss_inf + {0x153b, 0x1162, pci_subsys_1131_7133_153b_1162, 0}; + #undef pci_ss_info_153b_1162 + #define pci_ss_info_153b_1162 pci_ss_info_1131_7133_153b_1162 ++static const pciSubsystemInfo pci_ss_info_1131_7133_17de_7350 = ++ {0x17de, 0x7350, pci_subsys_1131_7133_17de_7350, 0}; ++#undef pci_ss_info_17de_7350 ++#define pci_ss_info_17de_7350 pci_ss_info_1131_7133_17de_7350 + static const pciSubsystemInfo pci_ss_info_1131_7133_185b_c100 = + {0x185b, 0xc100, pci_subsys_1131_7133_185b_c100, 0}; + #undef pci_ss_info_185b_c100 + #define pci_ss_info_185b_c100 pci_ss_info_1131_7133_185b_c100 ++static const pciSubsystemInfo pci_ss_info_1131_7133_185b_c900 = ++ {0x185b, 0xc900, pci_subsys_1131_7133_185b_c900, 0}; ++#undef pci_ss_info_185b_c900 ++#define pci_ss_info_185b_c900 pci_ss_info_1131_7133_185b_c900 + static const pciSubsystemInfo pci_ss_info_1131_7133_5168_0306 = + {0x5168, 0x0306, pci_subsys_1131_7133_5168_0306, 0}; + #undef pci_ss_info_5168_0306 +@@ -35662,6 +37912,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x13c2, 0x1011, pci_subsys_1131_7146_13c2_1011, 0}; + #undef pci_ss_info_13c2_1011 + #define pci_ss_info_13c2_1011 pci_ss_info_1131_7146_13c2_1011 ++static const pciSubsystemInfo pci_ss_info_1131_7146_13c2_1012 = ++ {0x13c2, 0x1012, pci_subsys_1131_7146_13c2_1012, 0}; ++#undef pci_ss_info_13c2_1012 ++#define pci_ss_info_13c2_1012 pci_ss_info_1131_7146_13c2_1012 + static const pciSubsystemInfo pci_ss_info_1131_7146_13c2_1013 = + {0x13c2, 0x1013, pci_subsys_1131_7146_13c2_1013, 0}; + #undef pci_ss_info_13c2_1013 +@@ -35670,6 +37924,14 @@ static const pciSubsystemInfo pci_ss_inf + {0x13c2, 0x1016, pci_subsys_1131_7146_13c2_1016, 0}; + #undef pci_ss_info_13c2_1016 + #define pci_ss_info_13c2_1016 pci_ss_info_1131_7146_13c2_1016 ++static const pciSubsystemInfo pci_ss_info_1131_7146_13c2_1018 = ++ {0x13c2, 0x1018, pci_subsys_1131_7146_13c2_1018, 0}; ++#undef pci_ss_info_13c2_1018 ++#define pci_ss_info_13c2_1018 pci_ss_info_1131_7146_13c2_1018 ++static const pciSubsystemInfo pci_ss_info_1131_7146_13c2_1019 = ++ {0x13c2, 0x1019, pci_subsys_1131_7146_13c2_1019, 0}; ++#undef pci_ss_info_13c2_1019 ++#define pci_ss_info_13c2_1019 pci_ss_info_1131_7146_13c2_1019 + static const pciSubsystemInfo pci_ss_info_1131_7146_13c2_1102 = + {0x13c2, 0x1102, pci_subsys_1131_7146_13c2_1102, 0}; + #undef pci_ss_info_13c2_1102 +@@ -35678,6 +37940,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x153b, 0x1156, pci_subsys_1131_7146_153b_1156, 0}; + #undef pci_ss_info_153b_1156 + #define pci_ss_info_153b_1156 pci_ss_info_1131_7146_153b_1156 ++static const pciSubsystemInfo pci_ss_info_1131_7146_1894_0020 = ++ {0x1894, 0x0020, pci_subsys_1131_7146_1894_0020, 0}; ++#undef pci_ss_info_1894_0020 ++#define pci_ss_info_1894_0020 pci_ss_info_1131_7146_1894_0020 + static const pciSubsystemInfo pci_ss_info_1131_9730_1131_0000 = + {0x1131, 0x0000, pci_subsys_1131_9730_1131_0000, 0}; + #undef pci_ss_info_1131_0000 +@@ -36188,6 +38454,12 @@ static const pciSubsystemInfo pci_ss_inf + {0x1734, 0x1012, pci_subsys_1166_0203_1734_1012, 0}; + #undef pci_ss_info_1734_1012 + #define pci_ss_info_1734_1012 pci_ss_info_1166_0203_1734_1012 ++#endif ++static const pciSubsystemInfo pci_ss_info_1166_0212_1028_810b = ++ {0x1028, 0x810b, pci_subsys_1166_0212_1028_810b, 0}; ++#undef pci_ss_info_1028_810b ++#define pci_ss_info_1028_810b pci_ss_info_1166_0212_1028_810b ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo pci_ss_info_1166_0212_4c53_1080 = + {0x4c53, 0x1080, pci_subsys_1166_0212_4c53_1080, 0}; + #undef pci_ss_info_4c53_1080 +@@ -36265,6 +38537,12 @@ static const pciSubsystemInfo pci_ss_inf + #undef pci_ss_info_1014_0185 + #define pci_ss_info_1014_0185 pci_ss_info_1180_0476_1014_0185 + #endif ++static const pciSubsystemInfo pci_ss_info_1180_0476_1028_014f = ++ {0x1028, 0x014f, pci_subsys_1180_0476_1028_014f, 0}; ++#undef pci_ss_info_1028_014f ++#define pci_ss_info_1028_014f pci_ss_info_1180_0476_1028_014f ++#ifdef VENDOR_INCLUDE_NONVIDEO ++#endif + static const pciSubsystemInfo pci_ss_info_1180_0476_1028_0188 = + {0x1028, 0x0188, pci_subsys_1180_0476_1028_0188, 0}; + #undef pci_ss_info_1028_0188 +@@ -36290,6 +38568,16 @@ static const pciSubsystemInfo pci_ss_inf + #undef pci_ss_info_104d_80e7 + #define pci_ss_info_104d_80e7 pci_ss_info_1180_0476_104d_80e7 + #ifdef VENDOR_INCLUDE_NONVIDEO ++#endif ++static const pciSubsystemInfo pci_ss_info_1180_0476_104d_814e = ++ {0x104d, 0x814e, pci_subsys_1180_0476_104d_814e, 0}; ++#undef pci_ss_info_104d_814e ++#define pci_ss_info_104d_814e pci_ss_info_1180_0476_104d_814e ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciSubsystemInfo pci_ss_info_1180_0476_10f7_8338 = ++ {0x10f7, 0x8338, pci_subsys_1180_0476_10f7_8338, 0}; ++#undef pci_ss_info_10f7_8338 ++#define pci_ss_info_10f7_8338 pci_ss_info_1180_0476_10f7_8338 + static const pciSubsystemInfo pci_ss_info_1180_0476_144d_c00c = + {0x144d, 0xc00c, pci_subsys_1180_0476_144d_c00c, 0}; + #undef pci_ss_info_144d_c00c +@@ -36323,6 +38611,12 @@ static const pciSubsystemInfo pci_ss_inf + #undef pci_ss_info_1014_0511 + #define pci_ss_info_1014_0511 pci_ss_info_1180_0552_1014_0511 + #endif ++static const pciSubsystemInfo pci_ss_info_1180_0552_1028_014f = ++ {0x1028, 0x014f, pci_subsys_1180_0552_1028_014f, 0}; ++#undef pci_ss_info_1028_014f ++#define pci_ss_info_1028_014f pci_ss_info_1180_0552_1028_014f ++#ifdef VENDOR_INCLUDE_NONVIDEO ++#endif + static const pciSubsystemInfo pci_ss_info_1180_0552_1028_0188 = + {0x1028, 0x0188, pci_subsys_1180_0552_1028_0188, 0}; + #undef pci_ss_info_1028_0188 +@@ -36368,6 +38662,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1043, 0x1967, pci_subsys_1180_0822_1043_1967, 0}; + #undef pci_ss_info_1043_1967 + #define pci_ss_info_1043_1967 pci_ss_info_1180_0822_1043_1967 ++static const pciSubsystemInfo pci_ss_info_1180_0822_10f7_8338 = ++ {0x10f7, 0x8338, pci_subsys_1180_0822_10f7_8338, 0}; ++#undef pci_ss_info_10f7_8338 ++#define pci_ss_info_10f7_8338 pci_ss_info_1180_0822_10f7_8338 + static const pciSubsystemInfo pci_ss_info_1180_0822_144d_c018 = + {0x144d, 0xc018, pci_subsys_1180_0822_144d_c018, 0}; + #undef pci_ss_info_144d_c018 +@@ -36484,6 +38782,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x270f, 0x2803, pci_subsys_11ab_4320_270f_2803, 0}; + #undef pci_ss_info_270f_2803 + #define pci_ss_info_270f_2803 pci_ss_info_11ab_4320_270f_2803 ++static const pciSubsystemInfo pci_ss_info_11ab_4347_4c53_10d0 = ++ {0x4c53, 0x10d0, pci_subsys_11ab_4347_4c53_10d0, 0}; ++#undef pci_ss_info_4c53_10d0 ++#define pci_ss_info_4c53_10d0 pci_ss_info_11ab_4347_4c53_10d0 + static const pciSubsystemInfo pci_ss_info_11ab_4350_1179_0001 = + {0x1179, 0x0001, pci_subsys_11ab_4350_1179_0001, 0}; + #undef pci_ss_info_1179_0001 +@@ -36830,6 +39132,10 @@ static const pciSubsystemInfo pci_ss_inf + {0xa0a0, 0x0506, pci_subsys_11ab_4362_a0a0_0506, 0}; + #undef pci_ss_info_a0a0_0506 + #define pci_ss_info_a0a0_0506 pci_ss_info_11ab_4362_a0a0_0506 ++static const pciSubsystemInfo pci_ss_info_11ab_6480_1775_c200 = ++ {0x1775, 0xc200, pci_subsys_11ab_6480_1775_c200, 0}; ++#undef pci_ss_info_1775_c200 ++#define pci_ss_info_1775_c200 pci_ss_info_11ab_6480_1775_c200 + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo pci_ss_info_11ad_0002_11ad_0002 = +@@ -36858,6 +39164,20 @@ static const pciSubsystemInfo pci_ss_inf + #define pci_ss_info_11ad_c001 pci_ss_info_11ad_c115_11ad_c001 + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciSubsystemInfo pci_ss_info_11bd_0040_11bd_0044 = ++ {0x11bd, 0x0044, pci_subsys_11bd_0040_11bd_0044, 0}; ++#undef pci_ss_info_11bd_0044 ++#define pci_ss_info_11bd_0044 pci_ss_info_11bd_0040_11bd_0044 ++static const pciSubsystemInfo pci_ss_info_11bd_0041_11bd_0044 = ++ {0x11bd, 0x0044, pci_subsys_11bd_0041_11bd_0044, 0}; ++#undef pci_ss_info_11bd_0044 ++#define pci_ss_info_11bd_0044 pci_ss_info_11bd_0041_11bd_0044 ++static const pciSubsystemInfo pci_ss_info_11bd_0042_11bd_0044 = ++ {0x11bd, 0x0044, pci_subsys_11bd_0042_11bd_0044, 0}; ++#undef pci_ss_info_11bd_0044 ++#define pci_ss_info_11bd_0044 pci_ss_info_11bd_0042_11bd_0044 ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + #endif + static const pciSubsystemInfo pci_ss_info_11c1_0440_1033_8015 = + {0x1033, 0x8015, pci_subsys_11c1_0440_1033_8015, 0}; +@@ -37212,6 +39532,12 @@ static const pciSubsystemInfo pci_ss_inf + #define pci_ss_info_11cb_b008 pci_ss_info_11cb_2000_11cb_b008 + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciSubsystemInfo pci_ss_info_11d4_1986_11d4_1986 = ++ {0x11d4, 0x1986, pci_subsys_11d4_1986_11d4_1986, 0}; ++#undef pci_ss_info_11d4_1986 ++#define pci_ss_info_11d4_1986 pci_ss_info_11d4_1986_11d4_1986 ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + #endif + static const pciSubsystemInfo pci_ss_info_11de_6057_1031_7efe = + {0x1031, 0x7efe, pci_subsys_11de_6057_1031_7efe, 0}; +@@ -37316,6 +39642,10 @@ static const pciSubsystemInfo pci_ss_inf + #undef pci_ss_info_103c_0890 + #define pci_ss_info_103c_0890 pci_ss_info_1217_7223_103c_0890 + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciSubsystemInfo pci_ss_info_1217_7223_10cf_11c4 = ++ {0x10cf, 0x11c4, pci_subsys_1217_7223_10cf_11c4, 0}; ++#undef pci_ss_info_10cf_11c4 ++#define pci_ss_info_10cf_11c4 pci_ss_info_1217_7223_10cf_11c4 + #endif + static const pciSubsystemInfo pci_ss_info_121a_0003_1092_0003 = + {0x1092, 0x0003, pci_subsys_121a_0003_1092_0003, 0}; +@@ -37646,6 +39976,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x147a, 0xc001, pci_subsys_125d_2898_147a_c001, 0}; + #undef pci_ss_info_147a_c001 + #define pci_ss_info_147a_c001 pci_ss_info_125d_2898_147a_c001 ++static const pciSubsystemInfo pci_ss_info_125d_2898_148d_1030 = ++ {0x148d, 0x1030, pci_subsys_125d_2898_148d_1030, 0}; ++#undef pci_ss_info_148d_1030 ++#define pci_ss_info_148d_1030 pci_ss_info_125d_2898_148d_1030 + static const pciSubsystemInfo pci_ss_info_125d_2898_14fe_0428 = + {0x14fe, 0x0428, pci_subsys_125d_2898_14fe_0428, 0}; + #undef pci_ss_info_14fe_0428 +@@ -37685,6 +40019,12 @@ static const pciSubsystemInfo pci_ss_inf + #undef pci_ss_info_1737_3874 + #define pci_ss_info_1737_3874 pci_ss_info_1260_3873_1737_3874 + #endif ++static const pciSubsystemInfo pci_ss_info_1260_3873_8086_2510 = ++ {0x8086, 0x2510, pci_subsys_1260_3873_8086_2510, 0}; ++#undef pci_ss_info_8086_2510 ++#define pci_ss_info_8086_2510 pci_ss_info_1260_3873_8086_2510 ++#ifdef VENDOR_INCLUDE_NONVIDEO ++#endif + static const pciSubsystemInfo pci_ss_info_1260_3873_8086_2513 = + {0x8086, 0x2513, pci_subsys_1260_3873_8086_2513, 0}; + #undef pci_ss_info_8086_2513 +@@ -37710,6 +40050,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1113, 0x4203, pci_subsys_1260_3890_1113_4203, 0}; + #undef pci_ss_info_1113_4203 + #define pci_ss_info_1113_4203 pci_ss_info_1260_3890_1113_4203 ++static const pciSubsystemInfo pci_ss_info_1260_3890_1113_8201 = ++ {0x1113, 0x8201, pci_subsys_1260_3890_1113_8201, 0}; ++#undef pci_ss_info_1113_8201 ++#define pci_ss_info_1113_8201 pci_ss_info_1260_3890_1113_8201 + static const pciSubsystemInfo pci_ss_info_1260_3890_1113_ee03 = + {0x1113, 0xee03, pci_subsys_1260_3890_1113_ee03, 0}; + #undef pci_ss_info_1113_ee03 +@@ -38830,6 +41174,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1397, 0xb540, pci_subsys_1397_08b4_1397_b540, 0}; + #undef pci_ss_info_1397_b540 + #define pci_ss_info_1397_b540 pci_ss_info_1397_08b4_1397_b540 ++static const pciSubsystemInfo pci_ss_info_1397_08b4_1397_b556 = ++ {0x1397, 0xb556, pci_subsys_1397_08b4_1397_b556, 0}; ++#undef pci_ss_info_1397_b556 ++#define pci_ss_info_1397_b556 pci_ss_info_1397_08b4_1397_b556 + static const pciSubsystemInfo pci_ss_info_1397_2bd0_0675_1704 = + {0x0675, 0x1704, pci_subsys_1397_2bd0_0675_1704, 0}; + #undef pci_ss_info_0675_1704 +@@ -39092,6 +41440,12 @@ static const pciSubsystemInfo pci_ss_inf + #ifdef VENDOR_INCLUDE_NONVIDEO + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++#endif ++static const pciSubsystemInfo pci_ss_info_14e4_1600_103c_3015 = ++ {0x103c, 0x3015, pci_subsys_14e4_1600_103c_3015, 0}; ++#undef pci_ss_info_103c_3015 ++#define pci_ss_info_103c_3015 pci_ss_info_14e4_1600_103c_3015 ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo pci_ss_info_14e4_1600_107b_5048 = + {0x107b, 0x5048, pci_subsys_14e4_1600_107b_5048, 0}; + #undef pci_ss_info_107b_5048 +@@ -39467,6 +41821,18 @@ static const pciSubsystemInfo pci_ss_inf + #undef pci_ss_info_1734_1061 + #define pci_ss_info_1734_1061 pci_ss_info_14e4_1659_1734_1061 + #endif ++static const pciSubsystemInfo pci_ss_info_14e4_165a_103c_7051 = ++ {0x103c, 0x7051, pci_subsys_14e4_165a_103c_7051, 0}; ++#undef pci_ss_info_103c_7051 ++#define pci_ss_info_103c_7051 pci_ss_info_14e4_165a_103c_7051 ++#ifdef VENDOR_INCLUDE_NONVIDEO ++#endif ++static const pciSubsystemInfo pci_ss_info_14e4_165a_103c_7052 = ++ {0x103c, 0x7052, pci_subsys_14e4_165a_103c_7052, 0}; ++#undef pci_ss_info_103c_7052 ++#define pci_ss_info_103c_7052 pci_ss_info_14e4_165a_103c_7052 ++#ifdef VENDOR_INCLUDE_NONVIDEO ++#endif + static const pciSubsystemInfo pci_ss_info_14e4_165d_1028_865d = + {0x1028, 0x865d, pci_subsys_14e4_165d_1028_865d, 0}; + #undef pci_ss_info_1028_865d +@@ -39490,6 +41856,10 @@ static const pciSubsystemInfo pci_ss_inf + #undef pci_ss_info_103c_099c + #define pci_ss_info_103c_099c pci_ss_info_14e4_165e_103c_099c + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciSubsystemInfo pci_ss_info_14e4_165e_10cf_1279 = ++ {0x10cf, 0x1279, pci_subsys_14e4_165e_10cf_1279, 0}; ++#undef pci_ss_info_10cf_1279 ++#define pci_ss_info_10cf_1279 pci_ss_info_14e4_165e_10cf_1279 + #endif + static const pciSubsystemInfo pci_ss_info_14e4_1668_103c_7039 = + {0x103c, 0x7039, pci_subsys_14e4_1668_103c_7039, 0}; +@@ -39569,6 +41939,12 @@ static const pciSubsystemInfo pci_ss_inf + #define pci_ss_info_103c_308b pci_ss_info_14e4_169c_103c_308b + #ifdef VENDOR_INCLUDE_NONVIDEO + #endif ++static const pciSubsystemInfo pci_ss_info_14e4_169c_103c_30a1 = ++ {0x103c, 0x30a1, pci_subsys_14e4_169c_103c_30a1, 0}; ++#undef pci_ss_info_103c_30a1 ++#define pci_ss_info_103c_30a1 pci_ss_info_14e4_169c_103c_30a1 ++#ifdef VENDOR_INCLUDE_NONVIDEO ++#endif + static const pciSubsystemInfo pci_ss_info_14e4_16a6_0e11_00bb = + {0x0e11, 0x00bb, pci_subsys_14e4_16a6_0e11_00bb, 0}; + #undef pci_ss_info_0e11_00bb +@@ -39641,6 +42017,12 @@ static const pciSubsystemInfo pci_ss_inf + #define pci_ss_info_103c_1706 pci_ss_info_14e4_16ac_103c_1706 + #ifdef VENDOR_INCLUDE_NONVIDEO + #endif ++static const pciSubsystemInfo pci_ss_info_14e4_16ac_103c_7038 = ++ {0x103c, 0x7038, pci_subsys_14e4_16ac_103c_7038, 0}; ++#undef pci_ss_info_103c_7038 ++#define pci_ss_info_103c_7038 pci_ss_info_14e4_16ac_103c_7038 ++#ifdef VENDOR_INCLUDE_NONVIDEO ++#endif + static const pciSubsystemInfo pci_ss_info_14e4_16ac_103c_703b = + {0x103c, 0x703b, pci_subsys_14e4_16ac_103c_703b, 0}; + #undef pci_ss_info_103c_703b +@@ -39709,6 +42091,12 @@ static const pciSubsystemInfo pci_ss_inf + #define pci_ss_info_1028_0196 pci_ss_info_14e4_170c_1028_0196 + #ifdef VENDOR_INCLUDE_NONVIDEO + #endif ++static const pciSubsystemInfo pci_ss_info_14e4_170c_1028_01af = ++ {0x1028, 0x01af, pci_subsys_14e4_170c_1028_01af, 0}; ++#undef pci_ss_info_1028_01af ++#define pci_ss_info_1028_01af pci_ss_info_14e4_170c_1028_01af ++#ifdef VENDOR_INCLUDE_NONVIDEO ++#endif + static const pciSubsystemInfo pci_ss_info_14e4_170c_103c_099c = + {0x103c, 0x099c, pci_subsys_14e4_170c_103c_099c, 0}; + #undef pci_ss_info_103c_099c +@@ -39758,6 +42146,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x16ec, 0x0119, pci_subsys_14e4_4318_16ec_0119, 0}; + #undef pci_ss_info_16ec_0119 + #define pci_ss_info_16ec_0119 pci_ss_info_14e4_4318_16ec_0119 ++static const pciSubsystemInfo pci_ss_info_14e4_4318_1737_0042 = ++ {0x1737, 0x0042, pci_subsys_14e4_4318_1737_0042, 0}; ++#undef pci_ss_info_1737_0042 ++#define pci_ss_info_1737_0042 pci_ss_info_14e4_4318_1737_0042 + static const pciSubsystemInfo pci_ss_info_14e4_4318_1737_0048 = + {0x1737, 0x0048, pci_subsys_14e4_4318_1737_0048, 0}; + #undef pci_ss_info_1737_0048 +@@ -39808,6 +42200,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x144f, 0x7050, pci_subsys_14e4_4320_144f_7050, 0}; + #undef pci_ss_info_144f_7050 + #define pci_ss_info_144f_7050 pci_ss_info_14e4_4320_144f_7050 ++static const pciSubsystemInfo pci_ss_info_14e4_4320_144f_7051 = ++ {0x144f, 0x7051, pci_subsys_14e4_4320_144f_7051, 0}; ++#undef pci_ss_info_144f_7051 ++#define pci_ss_info_144f_7051 pci_ss_info_14e4_4320_144f_7051 + static const pciSubsystemInfo pci_ss_info_14e4_4320_14e4_4320 = + {0x14e4, 0x4320, pci_subsys_14e4_4320_14e4_4320, 0}; + #undef pci_ss_info_14e4_4320 +@@ -40090,6 +42486,12 @@ static const pciSubsystemInfo pci_ss_inf + #undef pci_ss_info_104d_8097 + #define pci_ss_info_104d_8097 pci_ss_info_14f1_2443_104d_8097 + #ifdef VENDOR_INCLUDE_NONVIDEO ++#endif ++static const pciSubsystemInfo pci_ss_info_14f1_2bfa_1025_0009 = ++ {0x1025, 0x0009, pci_subsys_14f1_2bfa_1025_0009, 0}; ++#undef pci_ss_info_1025_0009 ++#define pci_ss_info_1025_0009 pci_ss_info_14f1_2bfa_1025_0009 ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo pci_ss_info_14f1_2f00_13e0_8d84 = + {0x13e0, 0x8d84, pci_subsys_14f1_2f00_13e0_8d84, 0}; + #undef pci_ss_info_13e0_8d84 +@@ -40286,6 +42688,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x107d, 0x663c, pci_subsys_14f1_8802_107d_663c, 0}; + #undef pci_ss_info_107d_663c + #define pci_ss_info_107d_663c pci_ss_info_14f1_8802_107d_663c ++static const pciSubsystemInfo pci_ss_info_14f1_8802_107d_665f = ++ {0x107d, 0x665f, pci_subsys_14f1_8802_107d_665f, 0}; ++#undef pci_ss_info_107d_665f ++#define pci_ss_info_107d_665f pci_ss_info_14f1_8802_107d_665f + static const pciSubsystemInfo pci_ss_info_14f1_8802_14f1_0187 = + {0x14f1, 0x0187, pci_subsys_14f1_8802_14f1_0187, 0}; + #undef pci_ss_info_14f1_0187 +@@ -40430,6 +42836,38 @@ static const pciSubsystemInfo pci_ss_inf + {0x1522, 0x2700, pci_subsys_1522_0100_1522_2700, 0}; + #undef pci_ss_info_1522_2700 + #define pci_ss_info_1522_2700 pci_ss_info_1522_0100_1522_2700 ++static const pciSubsystemInfo pci_ss_info_1522_0100_1522_3000 = ++ {0x1522, 0x3000, pci_subsys_1522_0100_1522_3000, 0}; ++#undef pci_ss_info_1522_3000 ++#define pci_ss_info_1522_3000 pci_ss_info_1522_0100_1522_3000 ++static const pciSubsystemInfo pci_ss_info_1522_0100_1522_3100 = ++ {0x1522, 0x3100, pci_subsys_1522_0100_1522_3100, 0}; ++#undef pci_ss_info_1522_3100 ++#define pci_ss_info_1522_3100 pci_ss_info_1522_0100_1522_3100 ++static const pciSubsystemInfo pci_ss_info_1522_0100_1522_3200 = ++ {0x1522, 0x3200, pci_subsys_1522_0100_1522_3200, 0}; ++#undef pci_ss_info_1522_3200 ++#define pci_ss_info_1522_3200 pci_ss_info_1522_0100_1522_3200 ++static const pciSubsystemInfo pci_ss_info_1522_0100_1522_3300 = ++ {0x1522, 0x3300, pci_subsys_1522_0100_1522_3300, 0}; ++#undef pci_ss_info_1522_3300 ++#define pci_ss_info_1522_3300 pci_ss_info_1522_0100_1522_3300 ++static const pciSubsystemInfo pci_ss_info_1522_0100_1522_3400 = ++ {0x1522, 0x3400, pci_subsys_1522_0100_1522_3400, 0}; ++#undef pci_ss_info_1522_3400 ++#define pci_ss_info_1522_3400 pci_ss_info_1522_0100_1522_3400 ++static const pciSubsystemInfo pci_ss_info_1522_0100_1522_3500 = ++ {0x1522, 0x3500, pci_subsys_1522_0100_1522_3500, 0}; ++#undef pci_ss_info_1522_3500 ++#define pci_ss_info_1522_3500 pci_ss_info_1522_0100_1522_3500 ++static const pciSubsystemInfo pci_ss_info_1522_0100_1522_3c00 = ++ {0x1522, 0x3c00, pci_subsys_1522_0100_1522_3c00, 0}; ++#undef pci_ss_info_1522_3c00 ++#define pci_ss_info_1522_3c00 pci_ss_info_1522_0100_1522_3c00 ++static const pciSubsystemInfo pci_ss_info_1522_0100_1522_3d00 = ++ {0x1522, 0x3d00, pci_subsys_1522_0100_1522_3d00, 0}; ++#undef pci_ss_info_1522_3d00 ++#define pci_ss_info_1522_3d00 pci_ss_info_1522_0100_1522_3d00 + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + #endif +@@ -40564,10 +43002,22 @@ static const pciSubsystemInfo pci_ss_inf + {0x16ab, 0x7302, pci_subsys_168c_0013_16ab_7302, 0}; + #undef pci_ss_info_16ab_7302 + #define pci_ss_info_16ab_7302 pci_ss_info_168c_0013_16ab_7302 ++static const pciSubsystemInfo pci_ss_info_168c_0013_17cf_0042 = ++ {0x17cf, 0x0042, pci_subsys_168c_0013_17cf_0042, 0}; ++#undef pci_ss_info_17cf_0042 ++#define pci_ss_info_17cf_0042 pci_ss_info_168c_0013_17cf_0042 ++static const pciSubsystemInfo pci_ss_info_168c_0013_185f_1012 = ++ {0x185f, 0x1012, pci_subsys_168c_0013_185f_1012, 0}; ++#undef pci_ss_info_185f_1012 ++#define pci_ss_info_185f_1012 pci_ss_info_168c_0013_185f_1012 + static const pciSubsystemInfo pci_ss_info_168c_0013_185f_2012 = + {0x185f, 0x2012, pci_subsys_168c_0013_185f_2012, 0}; + #undef pci_ss_info_185f_2012 + #define pci_ss_info_185f_2012 pci_ss_info_168c_0013_185f_2012 ++static const pciSubsystemInfo pci_ss_info_168c_001a_1052_168c = ++ {0x1052, 0x168c, pci_subsys_168c_001a_1052_168c, 0}; ++#undef pci_ss_info_1052_168c ++#define pci_ss_info_1052_168c pci_ss_info_168c_001a_1052_168c + static const pciSubsystemInfo pci_ss_info_168c_001a_1113_ee20 = + {0x1113, 0xee20, pci_subsys_168c_001a_1113_ee20, 0}; + #undef pci_ss_info_1113_ee20 +@@ -40592,6 +43042,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1186, 0x3a24, pci_subsys_168c_001a_1186_3a24, 0}; + #undef pci_ss_info_1186_3a24 + #define pci_ss_info_1186_3a24 pci_ss_info_168c_001a_1186_3a24 ++static const pciSubsystemInfo pci_ss_info_168c_001a_1186_3b08 = ++ {0x1186, 0x3b08, pci_subsys_168c_001a_1186_3b08, 0}; ++#undef pci_ss_info_1186_3b08 ++#define pci_ss_info_1186_3b08 pci_ss_info_168c_001a_1186_3b08 + static const pciSubsystemInfo pci_ss_info_168c_001a_168c_001a = + {0x168c, 0x001a, pci_subsys_168c_001a_168c_001a, 0}; + #undef pci_ss_info_168c_001a +@@ -40600,6 +43054,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x168c, 0x1052, pci_subsys_168c_001a_168c_1052, 0}; + #undef pci_ss_info_168c_1052 + #define pci_ss_info_168c_1052 pci_ss_info_168c_001a_168c_1052 ++static const pciSubsystemInfo pci_ss_info_168c_001a_168c_2052 = ++ {0x168c, 0x2052, pci_subsys_168c_001a_168c_2052, 0}; ++#undef pci_ss_info_168c_2052 ++#define pci_ss_info_168c_2052 pci_ss_info_168c_001a_168c_2052 + static const pciSubsystemInfo pci_ss_info_168c_001b_1186_3a19 = + {0x1186, 0x3a19, pci_subsys_168c_001b_1186_3a19, 0}; + #undef pci_ss_info_1186_3a19 +@@ -40608,6 +43066,14 @@ static const pciSubsystemInfo pci_ss_inf + {0x1186, 0x3a22, pci_subsys_168c_001b_1186_3a22, 0}; + #undef pci_ss_info_1186_3a22 + #define pci_ss_info_1186_3a22 pci_ss_info_168c_001b_1186_3a22 ++static const pciSubsystemInfo pci_ss_info_168c_001b_1458_e901 = ++ {0x1458, 0xe901, pci_subsys_168c_001b_1458_e901, 0}; ++#undef pci_ss_info_1458_e901 ++#define pci_ss_info_1458_e901 pci_ss_info_168c_001b_1458_e901 ++static const pciSubsystemInfo pci_ss_info_168c_001b_168c_001b = ++ {0x168c, 0x001b, pci_subsys_168c_001b_168c_001b, 0}; ++#undef pci_ss_info_168c_001b ++#define pci_ss_info_168c_001b pci_ss_info_168c_001b_168c_001b + static const pciSubsystemInfo pci_ss_info_168c_001b_168c_2062 = + {0x168c, 0x2062, pci_subsys_168c_001b_168c_2062, 0}; + #undef pci_ss_info_168c_2062 +@@ -40616,6 +43082,14 @@ static const pciSubsystemInfo pci_ss_inf + {0x168c, 0x2063, pci_subsys_168c_001b_168c_2063, 0}; + #undef pci_ss_info_168c_2063 + #define pci_ss_info_168c_2063 pci_ss_info_168c_001b_168c_2063 ++static const pciSubsystemInfo pci_ss_info_168c_001b_185f_1600 = ++ {0x185f, 0x1600, pci_subsys_168c_001b_185f_1600, 0}; ++#undef pci_ss_info_185f_1600 ++#define pci_ss_info_185f_1600 pci_ss_info_168c_001b_185f_1600 ++static const pciSubsystemInfo pci_ss_info_168c_001b_a727_6804 = ++ {0xa727, 0x6804, pci_subsys_168c_001b_a727_6804, 0}; ++#undef pci_ss_info_a727_6804 ++#define pci_ss_info_a727_6804 pci_ss_info_168c_001b_a727_6804 + static const pciSubsystemInfo pci_ss_info_168c_1014_1014_058a = + {0x1014, 0x058a, pci_subsys_168c_1014_1014_058a, 0}; + #undef pci_ss_info_1014_058a +@@ -40710,6 +43184,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1458, 0xe931, pci_subsys_1814_0201_1458_e931, 0}; + #undef pci_ss_info_1458_e931 + #define pci_ss_info_1458_e931 pci_ss_info_1814_0201_1458_e931 ++static const pciSubsystemInfo pci_ss_info_1814_0201_1462_6833 = ++ {0x1462, 0x6833, pci_subsys_1814_0201_1462_6833, 0}; ++#undef pci_ss_info_1462_6833 ++#define pci_ss_info_1462_6833 pci_ss_info_1814_0201_1462_6833 + static const pciSubsystemInfo pci_ss_info_1814_0201_1462_6835 = + {0x1462, 0x6835, pci_subsys_1814_0201_1462_6835, 0}; + #undef pci_ss_info_1462_6835 +@@ -40738,6 +43216,14 @@ static const pciSubsystemInfo pci_ss_inf + {0x1186, 0x3c09, pci_subsys_1814_0301_1186_3c09, 0}; + #undef pci_ss_info_1186_3c09 + #define pci_ss_info_1186_3c09 pci_ss_info_1814_0301_1186_3c09 ++static const pciSubsystemInfo pci_ss_info_1814_0301_13d1_abe3 = ++ {0x13d1, 0xabe3, pci_subsys_1814_0301_13d1_abe3, 0}; ++#undef pci_ss_info_13d1_abe3 ++#define pci_ss_info_13d1_abe3 pci_ss_info_1814_0301_13d1_abe3 ++static const pciSubsystemInfo pci_ss_info_1814_0301_1458_e934 = ++ {0x1458, 0xe934, pci_subsys_1814_0301_1458_e934, 0}; ++#undef pci_ss_info_1458_e934 ++#define pci_ss_info_1458_e934 pci_ss_info_1814_0301_1458_e934 + static const pciSubsystemInfo pci_ss_info_1814_0301_1737_0055 = + {0x1737, 0x0055, pci_subsys_1814_0301_1737_0055, 0}; + #undef pci_ss_info_1737_0055 +@@ -40750,6 +43236,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1186, 0x3c09, pci_subsys_1814_0302_1186_3c09, 0}; + #undef pci_ss_info_1186_3c09 + #define pci_ss_info_1186_3c09 pci_ss_info_1814_0302_1186_3c09 ++static const pciSubsystemInfo pci_ss_info_1814_0302_1462_b834 = ++ {0x1462, 0xb834, pci_subsys_1814_0302_1462_b834, 0}; ++#undef pci_ss_info_1462_b834 ++#define pci_ss_info_1462_b834 pci_ss_info_1814_0302_1462_b834 + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo pci_ss_info_18ec_c006_18ec_d001 = +@@ -40786,6 +43276,22 @@ static const pciSubsystemInfo pci_ss_inf + #define pci_ss_info_18ec_d004 pci_ss_info_18ec_c058_18ec_d004 + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciSubsystemInfo pci_ss_info_1971_1011_1043_0001 = ++ {0x1043, 0x0001, pci_subsys_1971_1011_1043_0001, 0}; ++#undef pci_ss_info_1043_0001 ++#define pci_ss_info_1043_0001 pci_ss_info_1971_1011_1043_0001 ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciSubsystemInfo pci_ss_info_197b_2361_1462_7235 = ++ {0x1462, 0x7235, pci_subsys_197b_2361_1462_7235, 0}; ++#undef pci_ss_info_1462_7235 ++#define pci_ss_info_1462_7235 pci_ss_info_197b_2361_1462_7235 ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciSubsystemInfo pci_ss_info_3388_0021_1775_c200 = ++ {0x1775, 0xc200, pci_subsys_3388_0021_1775_c200, 0}; ++#undef pci_ss_info_1775_c200 ++#define pci_ss_info_1775_c200 pci_ss_info_3388_0021_1775_c200 + static const pciSubsystemInfo pci_ss_info_3388_0021_1775_ce90 = + {0x1775, 0xce90, pci_subsys_3388_0021_1775_ce90, 0}; + #undef pci_ss_info_1775_ce90 +@@ -41053,6 +43559,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1014, 0x00db, pci_subsys_5333_8904_1014_00db, 0}; + #undef pci_ss_info_1014_00db + #define pci_ss_info_1014_00db pci_ss_info_5333_8904_1014_00db ++static const pciSubsystemInfo pci_ss_info_5333_8904_4843_314a = ++ {0x4843, 0x314a, pci_subsys_5333_8904_4843_314a, 0}; ++#undef pci_ss_info_4843_314a ++#define pci_ss_info_4843_314a pci_ss_info_5333_8904_4843_314a + static const pciSubsystemInfo pci_ss_info_5333_8904_5333_8904 = + {0x5333, 0x8904, pci_subsys_5333_8904_5333_8904, 0}; + #undef pci_ss_info_5333_8904 +@@ -41225,6 +43735,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1014, 0x01fc, pci_subsys_5333_8c2e_1014_01fc, 0}; + #undef pci_ss_info_1014_01fc + #define pci_ss_info_1014_01fc pci_ss_info_5333_8c2e_1014_01fc ++static const pciSubsystemInfo pci_ss_info_5333_8e48_5333_0130 = ++ {0x5333, 0x0130, pci_subsys_5333_8e48_5333_0130, 0}; ++#undef pci_ss_info_5333_0130 ++#define pci_ss_info_5333_0130 pci_ss_info_5333_8e48_5333_0130 + static const pciSubsystemInfo pci_ss_info_5333_9102_1092_5932 = + {0x1092, 0x5932, pci_subsys_5333_9102_1092_5932, 0}; + #undef pci_ss_info_1092_5932 +@@ -41257,6 +43771,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1092, 0x5a57, pci_subsys_5333_9102_1092_5a57, 0}; + #undef pci_ss_info_1092_5a57 + #define pci_ss_info_1092_5a57 pci_ss_info_5333_9102_1092_5a57 ++static const pciSubsystemInfo pci_ss_info_8086_0600_8086_0136 = ++ {0x8086, 0x0136, pci_subsys_8086_0600_8086_0136, 0}; ++#undef pci_ss_info_8086_0136 ++#define pci_ss_info_8086_0136 pci_ss_info_8086_0600_8086_0136 + static const pciSubsystemInfo pci_ss_info_8086_0600_8086_01af = + {0x8086, 0x01af, pci_subsys_8086_0600_8086_01af, 0}; + #undef pci_ss_info_8086_01af +@@ -41341,6 +43859,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1014, 0x0269, pci_subsys_8086_1008_1014_0269, 0}; + #undef pci_ss_info_1014_0269 + #define pci_ss_info_1014_0269 pci_ss_info_8086_1008_1014_0269 ++static const pciSubsystemInfo pci_ss_info_8086_1008_1028_011b = ++ {0x1028, 0x011b, pci_subsys_8086_1008_1028_011b, 0}; ++#undef pci_ss_info_1028_011b ++#define pci_ss_info_1028_011b pci_ss_info_8086_1008_1028_011b + static const pciSubsystemInfo pci_ss_info_8086_1008_1028_011c = + {0x1028, 0x011c, pci_subsys_8086_1008_1028_011c, 0}; + #undef pci_ss_info_1028_011c +@@ -41701,6 +44223,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1014, 0x0522, pci_subsys_8086_103d_1014_0522, 0}; + #undef pci_ss_info_1014_0522 + #define pci_ss_info_1014_0522 pci_ss_info_8086_103d_1014_0522 ++static const pciSubsystemInfo pci_ss_info_8086_103d_8086_103d = ++ {0x8086, 0x103d, pci_subsys_8086_103d_8086_103d, 0}; ++#undef pci_ss_info_8086_103d ++#define pci_ss_info_8086_103d pci_ss_info_8086_103d_8086_103d + static const pciSubsystemInfo pci_ss_info_8086_1040_16be_1040 = + {0x16be, 0x1040, pci_subsys_8086_1040_16be_1040, 0}; + #undef pci_ss_info_16be_1040 +@@ -41717,6 +44243,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x8086, 0x2527, pci_subsys_8086_1043_8086_2527, 0}; + #undef pci_ss_info_8086_2527 + #define pci_ss_info_8086_2527 pci_ss_info_8086_1043_8086_2527 ++static const pciSubsystemInfo pci_ss_info_8086_1043_8086_2561 = ++ {0x8086, 0x2561, pci_subsys_8086_1043_8086_2561, 0}; ++#undef pci_ss_info_8086_2561 ++#define pci_ss_info_8086_2561 pci_ss_info_8086_1043_8086_2561 + static const pciSubsystemInfo pci_ss_info_8086_1043_8086_2581 = + {0x8086, 0x2581, pci_subsys_8086_1043_8086_2581, 0}; + #undef pci_ss_info_8086_2581 +@@ -41729,6 +44259,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x8086, 0xa11f, pci_subsys_8086_1048_8086_a11f, 0}; + #undef pci_ss_info_8086_a11f + #define pci_ss_info_8086_a11f pci_ss_info_8086_1048_8086_a11f ++static const pciSubsystemInfo pci_ss_info_8086_1049_17aa_20b9 = ++ {0x17aa, 0x20b9, pci_subsys_8086_1049_17aa_20b9, 0}; ++#undef pci_ss_info_17aa_20b9 ++#define pci_ss_info_17aa_20b9 pci_ss_info_8086_1049_17aa_20b9 + static const pciSubsystemInfo pci_ss_info_8086_1050_1462_728c = + {0x1462, 0x728c, pci_subsys_8086_1050_1462_728c, 0}; + #undef pci_ss_info_1462_728c +@@ -41753,6 +44287,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x103c, 0x7044, pci_subsys_8086_105e_103c_7044, 0}; + #undef pci_ss_info_103c_7044 + #define pci_ss_info_103c_7044 pci_ss_info_8086_105e_103c_7044 ++static const pciSubsystemInfo pci_ss_info_8086_105e_1775_1100 = ++ {0x1775, 0x1100, pci_subsys_8086_105e_1775_1100, 0}; ++#undef pci_ss_info_1775_1100 ++#define pci_ss_info_1775_1100 pci_ss_info_8086_105e_1775_1100 + static const pciSubsystemInfo pci_ss_info_8086_105e_1775_6003 = + {0x1775, 0x6003, pci_subsys_8086_105e_1775_6003, 0}; + #undef pci_ss_info_1775_6003 +@@ -41977,6 +44515,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x8086, 0x109a, pci_subsys_8086_109a_8086_109a, 0}; + #undef pci_ss_info_8086_109a + #define pci_ss_info_8086_109a pci_ss_info_8086_109a_8086_109a ++static const pciSubsystemInfo pci_ss_info_8086_109a_8086_309c = ++ {0x8086, 0x309c, pci_subsys_8086_109a_8086_309c, 0}; ++#undef pci_ss_info_8086_309c ++#define pci_ss_info_8086_309c pci_ss_info_8086_109a_8086_309c + static const pciSubsystemInfo pci_ss_info_8086_109e_8086_a01f = + {0x8086, 0xa01f, pci_subsys_8086_109e_8086_a01f, 0}; + #undef pci_ss_info_8086_a01f +@@ -42353,6 +44895,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1668, 0x1100, pci_subsys_8086_1229_1668_1100, 0}; + #undef pci_ss_info_1668_1100 + #define pci_ss_info_1668_1100 pci_ss_info_8086_1229_1668_1100 ++static const pciSubsystemInfo pci_ss_info_8086_1229_1775_1100 = ++ {0x1775, 0x1100, pci_subsys_8086_1229_1775_1100, 0}; ++#undef pci_ss_info_1775_1100 ++#define pci_ss_info_1775_1100 pci_ss_info_8086_1229_1775_1100 + static const pciSubsystemInfo pci_ss_info_8086_1229_1775_ce90 = + {0x1775, 0xce90, pci_subsys_8086_1229_1775_ce90, 0}; + #undef pci_ss_info_1775_ce90 +@@ -42841,6 +45387,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1028, 0x0095, pci_subsys_8086_2415_1028_0095, 0}; + #undef pci_ss_info_1028_0095 + #define pci_ss_info_1028_0095 pci_ss_info_8086_2415_1028_0095 ++static const pciSubsystemInfo pci_ss_info_8086_2415_1028_00b4 = ++ {0x1028, 0x00b4, pci_subsys_8086_2415_1028_00b4, 0}; ++#undef pci_ss_info_1028_00b4 ++#define pci_ss_info_1028_00b4 pci_ss_info_8086_2415_1028_00b4 + static const pciSubsystemInfo pci_ss_info_8086_2415_110a_0051 = + {0x110a, 0x0051, pci_subsys_8086_2415_110a_0051, 0}; + #undef pci_ss_info_110a_0051 +@@ -43025,6 +45575,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x104d, 0x80df, pci_subsys_8086_2446_104d_80df, 0}; + #undef pci_ss_info_104d_80df + #define pci_ss_info_104d_80df pci_ss_info_8086_2446_104d_80df ++static const pciSubsystemInfo pci_ss_info_8086_2448_103c_0934 = ++ {0x103c, 0x0934, pci_subsys_8086_2448_103c_0934, 0}; ++#undef pci_ss_info_103c_0934 ++#define pci_ss_info_103c_0934 pci_ss_info_8086_2448_103c_0934 + static const pciSubsystemInfo pci_ss_info_8086_2448_103c_099c = + {0x103c, 0x099c, pci_subsys_8086_2448_103c_099c, 0}; + #undef pci_ss_info_103c_099c +@@ -43281,6 +45835,18 @@ static const pciSubsystemInfo pci_ss_inf + {0x1014, 0x051c, pci_subsys_8086_2485_1014_051c, 0}; + #undef pci_ss_info_1014_051c + #define pci_ss_info_1014_051c pci_ss_info_8086_2485_1014_051c ++static const pciSubsystemInfo pci_ss_info_8086_2485_1043_1583 = ++ {0x1043, 0x1583, pci_subsys_8086_2485_1043_1583, 0}; ++#undef pci_ss_info_1043_1583 ++#define pci_ss_info_1043_1583 pci_ss_info_8086_2485_1043_1583 ++static const pciSubsystemInfo pci_ss_info_8086_2485_1043_1623 = ++ {0x1043, 0x1623, pci_subsys_8086_2485_1043_1623, 0}; ++#undef pci_ss_info_1043_1623 ++#define pci_ss_info_1043_1623 pci_ss_info_8086_2485_1043_1623 ++static const pciSubsystemInfo pci_ss_info_8086_2485_1043_1643 = ++ {0x1043, 0x1643, pci_subsys_8086_2485_1043_1643, 0}; ++#undef pci_ss_info_1043_1643 ++#define pci_ss_info_1043_1643 pci_ss_info_8086_2485_1043_1643 + static const pciSubsystemInfo pci_ss_info_8086_2485_104d_80e7 = + {0x104d, 0x80e7, pci_subsys_8086_2485_104d_80e7, 0}; + #undef pci_ss_info_104d_80e7 +@@ -43437,10 +46003,22 @@ static const pciSubsystemInfo pci_ss_inf + {0x4c53, 0x1090, pci_subsys_8086_24c2_4c53_1090, 0}; + #undef pci_ss_info_4c53_1090 + #define pci_ss_info_4c53_1090 pci_ss_info_8086_24c2_4c53_1090 ++static const pciSubsystemInfo pci_ss_info_8086_24c2_8086_24c2 = ++ {0x8086, 0x24c2, pci_subsys_8086_24c2_8086_24c2, 0}; ++#undef pci_ss_info_8086_24c2 ++#define pci_ss_info_8086_24c2 pci_ss_info_8086_24c2_8086_24c2 + static const pciSubsystemInfo pci_ss_info_8086_24c2_8086_4541 = + {0x8086, 0x4541, pci_subsys_8086_24c2_8086_4541, 0}; + #undef pci_ss_info_8086_4541 + #define pci_ss_info_8086_4541 pci_ss_info_8086_24c2_8086_4541 ++static const pciSubsystemInfo pci_ss_info_8086_24c2_e4bf_0cc9 = ++ {0xe4bf, 0x0cc9, pci_subsys_8086_24c2_e4bf_0cc9, 0}; ++#undef pci_ss_info_e4bf_0cc9 ++#define pci_ss_info_e4bf_0cc9 pci_ss_info_8086_24c2_e4bf_0cc9 ++static const pciSubsystemInfo pci_ss_info_8086_24c2_e4bf_0cd2 = ++ {0xe4bf, 0x0cd2, pci_subsys_8086_24c2_e4bf_0cd2, 0}; ++#undef pci_ss_info_e4bf_0cd2 ++#define pci_ss_info_e4bf_0cd2 pci_ss_info_8086_24c2_e4bf_0cd2 + static const pciSubsystemInfo pci_ss_info_8086_24c3_1014_0267 = + {0x1014, 0x0267, pci_subsys_8086_24c3_1014_0267, 0}; + #undef pci_ss_info_1014_0267 +@@ -43457,6 +46035,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1028, 0x0126, pci_subsys_8086_24c3_1028_0126, 0}; + #undef pci_ss_info_1028_0126 + #define pci_ss_info_1028_0126 pci_ss_info_8086_24c3_1028_0126 ++static const pciSubsystemInfo pci_ss_info_8086_24c3_1028_014f = ++ {0x1028, 0x014f, pci_subsys_8086_24c3_1028_014f, 0}; ++#undef pci_ss_info_1028_014f ++#define pci_ss_info_1028_014f pci_ss_info_8086_24c3_1028_014f + static const pciSubsystemInfo pci_ss_info_8086_24c3_103c_088c = + {0x103c, 0x088c, pci_subsys_8086_24c3_103c_088c, 0}; + #undef pci_ss_info_103c_088c +@@ -43473,6 +46055,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1071, 0x8160, pci_subsys_8086_24c3_1071_8160, 0}; + #undef pci_ss_info_1071_8160 + #define pci_ss_info_1071_8160 pci_ss_info_8086_24c3_1071_8160 ++static const pciSubsystemInfo pci_ss_info_8086_24c3_144d_c005 = ++ {0x144d, 0xc005, pci_subsys_8086_24c3_144d_c005, 0}; ++#undef pci_ss_info_144d_c005 ++#define pci_ss_info_144d_c005 pci_ss_info_8086_24c3_144d_c005 + static const pciSubsystemInfo pci_ss_info_8086_24c3_144d_c00c = + {0x144d, 0xc00c, pci_subsys_8086_24c3_144d_c00c, 0}; + #undef pci_ss_info_144d_c00c +@@ -43497,6 +46083,14 @@ static const pciSubsystemInfo pci_ss_inf + {0x4c53, 0x1090, pci_subsys_8086_24c3_4c53_1090, 0}; + #undef pci_ss_info_4c53_1090 + #define pci_ss_info_4c53_1090 pci_ss_info_8086_24c3_4c53_1090 ++static const pciSubsystemInfo pci_ss_info_8086_24c3_e4bf_0cc9 = ++ {0xe4bf, 0x0cc9, pci_subsys_8086_24c3_e4bf_0cc9, 0}; ++#undef pci_ss_info_e4bf_0cc9 ++#define pci_ss_info_e4bf_0cc9 pci_ss_info_8086_24c3_e4bf_0cc9 ++static const pciSubsystemInfo pci_ss_info_8086_24c3_e4bf_0cd2 = ++ {0xe4bf, 0x0cd2, pci_subsys_8086_24c3_e4bf_0cd2, 0}; ++#undef pci_ss_info_e4bf_0cd2 ++#define pci_ss_info_e4bf_0cd2 pci_ss_info_8086_24c3_e4bf_0cd2 + static const pciSubsystemInfo pci_ss_info_8086_24c4_1014_0267 = + {0x1014, 0x0267, pci_subsys_8086_24c4_1014_0267, 0}; + #undef pci_ss_info_1014_0267 +@@ -43557,10 +46151,22 @@ static const pciSubsystemInfo pci_ss_inf + {0x4c53, 0x1090, pci_subsys_8086_24c4_4c53_1090, 0}; + #undef pci_ss_info_4c53_1090 + #define pci_ss_info_4c53_1090 pci_ss_info_8086_24c4_4c53_1090 ++static const pciSubsystemInfo pci_ss_info_8086_24c4_8086_24c2 = ++ {0x8086, 0x24c2, pci_subsys_8086_24c4_8086_24c2, 0}; ++#undef pci_ss_info_8086_24c2 ++#define pci_ss_info_8086_24c2 pci_ss_info_8086_24c4_8086_24c2 + static const pciSubsystemInfo pci_ss_info_8086_24c4_8086_4541 = + {0x8086, 0x4541, pci_subsys_8086_24c4_8086_4541, 0}; + #undef pci_ss_info_8086_4541 + #define pci_ss_info_8086_4541 pci_ss_info_8086_24c4_8086_4541 ++static const pciSubsystemInfo pci_ss_info_8086_24c4_e4bf_0cc9 = ++ {0xe4bf, 0x0cc9, pci_subsys_8086_24c4_e4bf_0cc9, 0}; ++#undef pci_ss_info_e4bf_0cc9 ++#define pci_ss_info_e4bf_0cc9 pci_ss_info_8086_24c4_e4bf_0cc9 ++static const pciSubsystemInfo pci_ss_info_8086_24c4_e4bf_0cd2 = ++ {0xe4bf, 0x0cd2, pci_subsys_8086_24c4_e4bf_0cd2, 0}; ++#undef pci_ss_info_e4bf_0cd2 ++#define pci_ss_info_e4bf_0cd2 pci_ss_info_8086_24c4_e4bf_0cd2 + static const pciSubsystemInfo pci_ss_info_8086_24c5_0e11_00b8 = + {0x0e11, 0x00b8, pci_subsys_8086_24c5_0e11_00b8, 0}; + #undef pci_ss_info_0e11_00b8 +@@ -43569,6 +46175,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1014, 0x0267, pci_subsys_8086_24c5_1014_0267, 0}; + #undef pci_ss_info_1014_0267 + #define pci_ss_info_1014_0267 pci_ss_info_8086_24c5_1014_0267 ++static const pciSubsystemInfo pci_ss_info_8086_24c5_1014_0537 = ++ {0x1014, 0x0537, pci_subsys_8086_24c5_1014_0537, 0}; ++#undef pci_ss_info_1014_0537 ++#define pci_ss_info_1014_0537 pci_ss_info_8086_24c5_1014_0537 + static const pciSubsystemInfo pci_ss_info_8086_24c5_1014_055f = + {0x1014, 0x055f, pci_subsys_8086_24c5_1014_055f, 0}; + #undef pci_ss_info_1014_055f +@@ -43581,6 +46191,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1028, 0x0139, pci_subsys_8086_24c5_1028_0139, 0}; + #undef pci_ss_info_1028_0139 + #define pci_ss_info_1028_0139 pci_ss_info_8086_24c5_1028_0139 ++static const pciSubsystemInfo pci_ss_info_8086_24c5_1028_014f = ++ {0x1028, 0x014f, pci_subsys_8086_24c5_1028_014f, 0}; ++#undef pci_ss_info_1028_014f ++#define pci_ss_info_1028_014f pci_ss_info_8086_24c5_1028_014f + static const pciSubsystemInfo pci_ss_info_8086_24c5_1028_0163 = + {0x1028, 0x0163, pci_subsys_8086_24c5_1028_0163, 0}; + #undef pci_ss_info_1028_0163 +@@ -43605,6 +46219,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1071, 0x8160, pci_subsys_8086_24c5_1071_8160, 0}; + #undef pci_ss_info_1071_8160 + #define pci_ss_info_1071_8160 pci_ss_info_8086_24c5_1071_8160 ++static const pciSubsystemInfo pci_ss_info_8086_24c5_144d_c005 = ++ {0x144d, 0xc005, pci_subsys_8086_24c5_144d_c005, 0}; ++#undef pci_ss_info_144d_c005 ++#define pci_ss_info_144d_c005 pci_ss_info_8086_24c5_144d_c005 + static const pciSubsystemInfo pci_ss_info_8086_24c5_144d_c00c = + {0x144d, 0xc00c, pci_subsys_8086_24c5_144d_c00c, 0}; + #undef pci_ss_info_144d_c00c +@@ -43625,6 +46243,22 @@ static const pciSubsystemInfo pci_ss_inf + {0x1734, 0x1055, pci_subsys_8086_24c5_1734_1055, 0}; + #undef pci_ss_info_1734_1055 + #define pci_ss_info_1734_1055 pci_ss_info_8086_24c5_1734_1055 ++static const pciSubsystemInfo pci_ss_info_8086_24c5_8086_24c5 = ++ {0x8086, 0x24c5, pci_subsys_8086_24c5_8086_24c5, 0}; ++#undef pci_ss_info_8086_24c5 ++#define pci_ss_info_8086_24c5 pci_ss_info_8086_24c5_8086_24c5 ++static const pciSubsystemInfo pci_ss_info_8086_24c5_a002_1458 = ++ {0xa002, 0x1458, pci_subsys_8086_24c5_a002_1458, 0}; ++#undef pci_ss_info_a002_1458 ++#define pci_ss_info_a002_1458 pci_ss_info_8086_24c5_a002_1458 ++static const pciSubsystemInfo pci_ss_info_8086_24c6_1014_0524 = ++ {0x1014, 0x0524, pci_subsys_8086_24c6_1014_0524, 0}; ++#undef pci_ss_info_1014_0524 ++#define pci_ss_info_1014_0524 pci_ss_info_8086_24c6_1014_0524 ++static const pciSubsystemInfo pci_ss_info_8086_24c6_1014_0525 = ++ {0x1014, 0x0525, pci_subsys_8086_24c6_1014_0525, 0}; ++#undef pci_ss_info_1014_0525 ++#define pci_ss_info_1014_0525 pci_ss_info_8086_24c6_1014_0525 + static const pciSubsystemInfo pci_ss_info_8086_24c6_1014_0559 = + {0x1014, 0x0559, pci_subsys_8086_24c6_1014_0559, 0}; + #undef pci_ss_info_1014_0559 +@@ -43657,6 +46291,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1071, 0x8160, pci_subsys_8086_24c6_1071_8160, 0}; + #undef pci_ss_info_1071_8160 + #define pci_ss_info_1071_8160 pci_ss_info_8086_24c6_1071_8160 ++static const pciSubsystemInfo pci_ss_info_8086_24c6_144d_2115 = ++ {0x144d, 0x2115, pci_subsys_8086_24c6_144d_2115, 0}; ++#undef pci_ss_info_144d_2115 ++#define pci_ss_info_144d_2115 pci_ss_info_8086_24c6_144d_2115 + static const pciSubsystemInfo pci_ss_info_8086_24c6_144d_c00c = + {0x144d, 0xc00c, pci_subsys_8086_24c6_144d_c00c, 0}; + #undef pci_ss_info_144d_c00c +@@ -43721,10 +46359,22 @@ static const pciSubsystemInfo pci_ss_inf + {0x4c53, 0x1090, pci_subsys_8086_24c7_4c53_1090, 0}; + #undef pci_ss_info_4c53_1090 + #define pci_ss_info_4c53_1090 pci_ss_info_8086_24c7_4c53_1090 ++static const pciSubsystemInfo pci_ss_info_8086_24c7_8086_24c2 = ++ {0x8086, 0x24c2, pci_subsys_8086_24c7_8086_24c2, 0}; ++#undef pci_ss_info_8086_24c2 ++#define pci_ss_info_8086_24c2 pci_ss_info_8086_24c7_8086_24c2 + static const pciSubsystemInfo pci_ss_info_8086_24c7_8086_4541 = + {0x8086, 0x4541, pci_subsys_8086_24c7_8086_4541, 0}; + #undef pci_ss_info_8086_4541 + #define pci_ss_info_8086_4541 pci_ss_info_8086_24c7_8086_4541 ++static const pciSubsystemInfo pci_ss_info_8086_24c7_e4bf_0cc9 = ++ {0xe4bf, 0x0cc9, pci_subsys_8086_24c7_e4bf_0cc9, 0}; ++#undef pci_ss_info_e4bf_0cc9 ++#define pci_ss_info_e4bf_0cc9 pci_ss_info_8086_24c7_e4bf_0cc9 ++static const pciSubsystemInfo pci_ss_info_8086_24c7_e4bf_0cd2 = ++ {0xe4bf, 0x0cd2, pci_subsys_8086_24c7_e4bf_0cd2, 0}; ++#undef pci_ss_info_e4bf_0cd2 ++#define pci_ss_info_e4bf_0cd2 pci_ss_info_8086_24c7_e4bf_0cd2 + static const pciSubsystemInfo pci_ss_info_8086_24ca_1014_052d = + {0x1014, 0x052d, pci_subsys_8086_24ca_1014_052d, 0}; + #undef pci_ss_info_1014_052d +@@ -43733,6 +46383,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1025, 0x005a, pci_subsys_8086_24ca_1025_005a, 0}; + #undef pci_ss_info_1025_005a + #define pci_ss_info_1025_005a pci_ss_info_8086_24ca_1025_005a ++static const pciSubsystemInfo pci_ss_info_8086_24ca_1028_014f = ++ {0x1028, 0x014f, pci_subsys_8086_24ca_1028_014f, 0}; ++#undef pci_ss_info_1028_014f ++#define pci_ss_info_1028_014f pci_ss_info_8086_24ca_1028_014f + static const pciSubsystemInfo pci_ss_info_8086_24ca_1028_0163 = + {0x1028, 0x0163, pci_subsys_8086_24ca_1028_0163, 0}; + #undef pci_ss_info_1028_0163 +@@ -43793,6 +46447,14 @@ static const pciSubsystemInfo pci_ss_inf + {0x4c53, 0x1090, pci_subsys_8086_24cb_4c53_1090, 0}; + #undef pci_ss_info_4c53_1090 + #define pci_ss_info_4c53_1090 pci_ss_info_8086_24cb_4c53_1090 ++static const pciSubsystemInfo pci_ss_info_8086_24cb_e4bf_0cc9 = ++ {0xe4bf, 0x0cc9, pci_subsys_8086_24cb_e4bf_0cc9, 0}; ++#undef pci_ss_info_e4bf_0cc9 ++#define pci_ss_info_e4bf_0cc9 pci_ss_info_8086_24cb_e4bf_0cc9 ++static const pciSubsystemInfo pci_ss_info_8086_24cb_e4bf_0cd2 = ++ {0xe4bf, 0x0cd2, pci_subsys_8086_24cb_e4bf_0cd2, 0}; ++#undef pci_ss_info_e4bf_0cd2 ++#define pci_ss_info_e4bf_0cd2 pci_ss_info_8086_24cb_e4bf_0cd2 + static const pciSubsystemInfo pci_ss_info_8086_24cc_144d_c00c = + {0x144d, 0xc00c, pci_subsys_8086_24cc_144d_c00c, 0}; + #undef pci_ss_info_144d_c00c +@@ -43877,6 +46539,18 @@ static const pciSubsystemInfo pci_ss_inf + {0x4c53, 0x1090, pci_subsys_8086_24cd_4c53_1090, 0}; + #undef pci_ss_info_4c53_1090 + #define pci_ss_info_4c53_1090 pci_ss_info_8086_24cd_4c53_1090 ++static const pciSubsystemInfo pci_ss_info_8086_24cd_8086_24c2 = ++ {0x8086, 0x24c2, pci_subsys_8086_24cd_8086_24c2, 0}; ++#undef pci_ss_info_8086_24c2 ++#define pci_ss_info_8086_24c2 pci_ss_info_8086_24cd_8086_24c2 ++static const pciSubsystemInfo pci_ss_info_8086_24cd_e4bf_0cc9 = ++ {0xe4bf, 0x0cc9, pci_subsys_8086_24cd_e4bf_0cc9, 0}; ++#undef pci_ss_info_e4bf_0cc9 ++#define pci_ss_info_e4bf_0cc9 pci_ss_info_8086_24cd_e4bf_0cc9 ++static const pciSubsystemInfo pci_ss_info_8086_24cd_e4bf_0cd2 = ++ {0xe4bf, 0x0cd2, pci_subsys_8086_24cd_e4bf_0cd2, 0}; ++#undef pci_ss_info_e4bf_0cd2 ++#define pci_ss_info_e4bf_0cd2 pci_ss_info_8086_24cd_e4bf_0cd2 + static const pciSubsystemInfo pci_ss_info_8086_24d1_1028_0169 = + {0x1028, 0x0169, pci_subsys_8086_24d1_1028_0169, 0}; + #undef pci_ss_info_1028_0169 +@@ -43901,6 +46575,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1462, 0x7280, pci_subsys_8086_24d1_1462_7280, 0}; + #undef pci_ss_info_1462_7280 + #define pci_ss_info_1462_7280 pci_ss_info_8086_24d1_1462_7280 ++static const pciSubsystemInfo pci_ss_info_8086_24d1_1565_5200 = ++ {0x1565, 0x5200, pci_subsys_8086_24d1_1565_5200, 0}; ++#undef pci_ss_info_1565_5200 ++#define pci_ss_info_1565_5200 pci_ss_info_8086_24d1_1565_5200 + static const pciSubsystemInfo pci_ss_info_8086_24d1_15d9_4580 = + {0x15d9, 0x4580, pci_subsys_8086_24d1_15d9_4580, 0}; + #undef pci_ss_info_15d9_4580 +@@ -43921,6 +46599,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x8086, 0x524c, pci_subsys_8086_24d1_8086_524c, 0}; + #undef pci_ss_info_8086_524c + #define pci_ss_info_8086_524c pci_ss_info_8086_24d1_8086_524c ++static const pciSubsystemInfo pci_ss_info_8086_24d2_1014_02dd = ++ {0x1014, 0x02dd, pci_subsys_8086_24d2_1014_02dd, 0}; ++#undef pci_ss_info_1014_02dd ++#define pci_ss_info_1014_02dd pci_ss_info_8086_24d2_1014_02dd + static const pciSubsystemInfo pci_ss_info_8086_24d2_1014_02ed = + {0x1014, 0x02ed, pci_subsys_8086_24d2_1014_02ed, 0}; + #undef pci_ss_info_1014_02ed +@@ -43957,6 +46639,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1462, 0x7280, pci_subsys_8086_24d2_1462_7280, 0}; + #undef pci_ss_info_1462_7280 + #define pci_ss_info_1462_7280 pci_ss_info_8086_24d2_1462_7280 ++static const pciSubsystemInfo pci_ss_info_8086_24d2_1565_3101 = ++ {0x1565, 0x3101, pci_subsys_8086_24d2_1565_3101, 0}; ++#undef pci_ss_info_1565_3101 ++#define pci_ss_info_1565_3101 pci_ss_info_8086_24d2_1565_3101 + static const pciSubsystemInfo pci_ss_info_8086_24d2_15d9_4580 = + {0x15d9, 0x4580, pci_subsys_8086_24d2_15d9_4580, 0}; + #undef pci_ss_info_15d9_4580 +@@ -43981,6 +46667,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x8086, 0x524c, pci_subsys_8086_24d2_8086_524c, 0}; + #undef pci_ss_info_8086_524c + #define pci_ss_info_8086_524c pci_ss_info_8086_24d2_8086_524c ++static const pciSubsystemInfo pci_ss_info_8086_24d3_1014_02dd = ++ {0x1014, 0x02dd, pci_subsys_8086_24d3_1014_02dd, 0}; ++#undef pci_ss_info_1014_02dd ++#define pci_ss_info_1014_02dd pci_ss_info_8086_24d3_1014_02dd + static const pciSubsystemInfo pci_ss_info_8086_24d3_1014_02ed = + {0x1014, 0x02ed, pci_subsys_8086_24d3_1014_02ed, 0}; + #undef pci_ss_info_1014_02ed +@@ -44009,6 +46699,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1462, 0x7280, pci_subsys_8086_24d3_1462_7280, 0}; + #undef pci_ss_info_1462_7280 + #define pci_ss_info_1462_7280 pci_ss_info_8086_24d3_1462_7280 ++static const pciSubsystemInfo pci_ss_info_8086_24d3_1565_3101 = ++ {0x1565, 0x3101, pci_subsys_8086_24d3_1565_3101, 0}; ++#undef pci_ss_info_1565_3101 ++#define pci_ss_info_1565_3101 pci_ss_info_8086_24d3_1565_3101 + static const pciSubsystemInfo pci_ss_info_8086_24d3_15d9_4580 = + {0x15d9, 0x4580, pci_subsys_8086_24d3_15d9_4580, 0}; + #undef pci_ss_info_15d9_4580 +@@ -44033,6 +46727,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x8086, 0x524c, pci_subsys_8086_24d3_8086_524c, 0}; + #undef pci_ss_info_8086_524c + #define pci_ss_info_8086_524c pci_ss_info_8086_24d3_8086_524c ++static const pciSubsystemInfo pci_ss_info_8086_24d4_1014_02dd = ++ {0x1014, 0x02dd, pci_subsys_8086_24d4_1014_02dd, 0}; ++#undef pci_ss_info_1014_02dd ++#define pci_ss_info_1014_02dd pci_ss_info_8086_24d4_1014_02dd + static const pciSubsystemInfo pci_ss_info_8086_24d4_1014_02ed = + {0x1014, 0x02ed, pci_subsys_8086_24d4_1014_02ed, 0}; + #undef pci_ss_info_1014_02ed +@@ -44069,6 +46767,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1462, 0x7280, pci_subsys_8086_24d4_1462_7280, 0}; + #undef pci_ss_info_1462_7280 + #define pci_ss_info_1462_7280 pci_ss_info_8086_24d4_1462_7280 ++static const pciSubsystemInfo pci_ss_info_8086_24d4_1565_3101 = ++ {0x1565, 0x3101, pci_subsys_8086_24d4_1565_3101, 0}; ++#undef pci_ss_info_1565_3101 ++#define pci_ss_info_1565_3101 pci_ss_info_8086_24d4_1565_3101 + static const pciSubsystemInfo pci_ss_info_8086_24d4_15d9_4580 = + {0x15d9, 0x4580, pci_subsys_8086_24d4_15d9_4580, 0}; + #undef pci_ss_info_15d9_4580 +@@ -44181,6 +46883,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1462, 0x7280, pci_subsys_8086_24d7_1462_7280, 0}; + #undef pci_ss_info_1462_7280 + #define pci_ss_info_1462_7280 pci_ss_info_8086_24d7_1462_7280 ++static const pciSubsystemInfo pci_ss_info_8086_24d7_1565_3101 = ++ {0x1565, 0x3101, pci_subsys_8086_24d7_1565_3101, 0}; ++#undef pci_ss_info_1565_3101 ++#define pci_ss_info_1565_3101 pci_ss_info_8086_24d7_1565_3101 + static const pciSubsystemInfo pci_ss_info_8086_24d7_15d9_4580 = + {0x15d9, 0x4580, pci_subsys_8086_24d7_15d9_4580, 0}; + #undef pci_ss_info_15d9_4580 +@@ -44205,6 +46911,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x8086, 0x524c, pci_subsys_8086_24d7_8086_524c, 0}; + #undef pci_ss_info_8086_524c + #define pci_ss_info_8086_524c pci_ss_info_8086_24d7_8086_524c ++static const pciSubsystemInfo pci_ss_info_8086_24db_1014_02dd = ++ {0x1014, 0x02dd, pci_subsys_8086_24db_1014_02dd, 0}; ++#undef pci_ss_info_1014_02dd ++#define pci_ss_info_1014_02dd pci_ss_info_8086_24db_1014_02dd + static const pciSubsystemInfo pci_ss_info_8086_24db_1014_02ed = + {0x1014, 0x02ed, pci_subsys_8086_24db_1014_02ed, 0}; + #undef pci_ss_info_1014_02ed +@@ -44241,6 +46951,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1462, 0x7580, pci_subsys_8086_24db_1462_7580, 0}; + #undef pci_ss_info_1462_7580 + #define pci_ss_info_1462_7580 pci_ss_info_8086_24db_1462_7580 ++static const pciSubsystemInfo pci_ss_info_8086_24db_1565_3101 = ++ {0x1565, 0x3101, pci_subsys_8086_24db_1565_3101, 0}; ++#undef pci_ss_info_1565_3101 ++#define pci_ss_info_1565_3101 pci_ss_info_8086_24db_1565_3101 + static const pciSubsystemInfo pci_ss_info_8086_24db_15d9_4580 = + {0x15d9, 0x4580, pci_subsys_8086_24db_15d9_4580, 0}; + #undef pci_ss_info_15d9_4580 +@@ -44269,6 +46983,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x8086, 0x524c, pci_subsys_8086_24db_8086_524c, 0}; + #undef pci_ss_info_8086_524c + #define pci_ss_info_8086_524c pci_ss_info_8086_24db_8086_524c ++static const pciSubsystemInfo pci_ss_info_8086_24dd_1014_02dd = ++ {0x1014, 0x02dd, pci_subsys_8086_24dd_1014_02dd, 0}; ++#undef pci_ss_info_1014_02dd ++#define pci_ss_info_1014_02dd pci_ss_info_8086_24dd_1014_02dd + static const pciSubsystemInfo pci_ss_info_8086_24dd_1014_02ed = + {0x1014, 0x02ed, pci_subsys_8086_24dd_1014_02ed, 0}; + #undef pci_ss_info_1014_02ed +@@ -44341,6 +47059,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1462, 0x7280, pci_subsys_8086_24de_1462_7280, 0}; + #undef pci_ss_info_1462_7280 + #define pci_ss_info_1462_7280 pci_ss_info_8086_24de_1462_7280 ++static const pciSubsystemInfo pci_ss_info_8086_24de_1565_3101 = ++ {0x1565, 0x3101, pci_subsys_8086_24de_1565_3101, 0}; ++#undef pci_ss_info_1565_3101 ++#define pci_ss_info_1565_3101 pci_ss_info_8086_24de_1565_3101 + static const pciSubsystemInfo pci_ss_info_8086_24de_15d9_4580 = + {0x15d9, 0x4580, pci_subsys_8086_24de_15d9_4580, 0}; + #undef pci_ss_info_15d9_4580 +@@ -44433,6 +47155,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1014, 0x0267, pci_subsys_8086_2562_1014_0267, 0}; + #undef pci_ss_info_1014_0267 + #define pci_ss_info_1014_0267 pci_ss_info_8086_2562_1014_0267 ++static const pciSubsystemInfo pci_ss_info_8086_2562_1734_1003 = ++ {0x1734, 0x1003, pci_subsys_8086_2562_1734_1003, 0}; ++#undef pci_ss_info_1734_1003 ++#define pci_ss_info_1734_1003 pci_ss_info_8086_2562_1734_1003 + static const pciSubsystemInfo pci_ss_info_8086_2562_1734_1004 = + {0x1734, 0x1004, pci_subsys_8086_2562_1734_1004, 0}; + #undef pci_ss_info_1734_1004 +@@ -44517,18 +47243,46 @@ static const pciSubsystemInfo pci_ss_inf + {0x1734, 0x105b, pci_subsys_8086_2582_1734_105b, 0}; + #undef pci_ss_info_1734_105b + #define pci_ss_info_1734_105b pci_ss_info_8086_2582_1734_105b ++static const pciSubsystemInfo pci_ss_info_8086_2582_1849_2582 = ++ {0x1849, 0x2582, pci_subsys_8086_2582_1849_2582, 0}; ++#undef pci_ss_info_1849_2582 ++#define pci_ss_info_1849_2582 pci_ss_info_8086_2582_1849_2582 + static const pciSubsystemInfo pci_ss_info_8086_2590_1028_0182 = + {0x1028, 0x0182, pci_subsys_8086_2590_1028_0182, 0}; + #undef pci_ss_info_1028_0182 + #define pci_ss_info_1028_0182 pci_ss_info_8086_2590_1028_0182 ++static const pciSubsystemInfo pci_ss_info_8086_2590_103c_0934 = ++ {0x103c, 0x0934, pci_subsys_8086_2590_103c_0934, 0}; ++#undef pci_ss_info_103c_0934 ++#define pci_ss_info_103c_0934 pci_ss_info_8086_2590_103c_0934 + static const pciSubsystemInfo pci_ss_info_8086_2590_103c_099c = + {0x103c, 0x099c, pci_subsys_8086_2590_103c_099c, 0}; + #undef pci_ss_info_103c_099c + #define pci_ss_info_103c_099c pci_ss_info_8086_2590_103c_099c ++static const pciSubsystemInfo pci_ss_info_8086_2590_104d_81b7 = ++ {0x104d, 0x81b7, pci_subsys_8086_2590_104d_81b7, 0}; ++#undef pci_ss_info_104d_81b7 ++#define pci_ss_info_104d_81b7 pci_ss_info_8086_2590_104d_81b7 + static const pciSubsystemInfo pci_ss_info_8086_2590_a304_81b7 = + {0xa304, 0x81b7, pci_subsys_8086_2590_a304_81b7, 0}; + #undef pci_ss_info_a304_81b7 + #define pci_ss_info_a304_81b7 pci_ss_info_8086_2590_a304_81b7 ++static const pciSubsystemInfo pci_ss_info_8086_2590_e4bf_0ccd = ++ {0xe4bf, 0x0ccd, pci_subsys_8086_2590_e4bf_0ccd, 0}; ++#undef pci_ss_info_e4bf_0ccd ++#define pci_ss_info_e4bf_0ccd pci_ss_info_8086_2590_e4bf_0ccd ++static const pciSubsystemInfo pci_ss_info_8086_2590_e4bf_0cd3 = ++ {0xe4bf, 0x0cd3, pci_subsys_8086_2590_e4bf_0cd3, 0}; ++#undef pci_ss_info_e4bf_0cd3 ++#define pci_ss_info_e4bf_0cd3 pci_ss_info_8086_2590_e4bf_0cd3 ++static const pciSubsystemInfo pci_ss_info_8086_2590_e4bf_58b1 = ++ {0xe4bf, 0x58b1, pci_subsys_8086_2590_e4bf_58b1, 0}; ++#undef pci_ss_info_e4bf_58b1 ++#define pci_ss_info_e4bf_58b1 pci_ss_info_8086_2590_e4bf_58b1 ++static const pciSubsystemInfo pci_ss_info_8086_2591_103c_0934 = ++ {0x103c, 0x0934, pci_subsys_8086_2591_103c_0934, 0}; ++#undef pci_ss_info_103c_0934 ++#define pci_ss_info_103c_0934 pci_ss_info_8086_2591_103c_0934 + static const pciSubsystemInfo pci_ss_info_8086_2592_103c_099c = + {0x103c, 0x099c, pci_subsys_8086_2592_103c_099c, 0}; + #undef pci_ss_info_103c_099c +@@ -44541,10 +47295,26 @@ static const pciSubsystemInfo pci_ss_inf + {0x1043, 0x1881, pci_subsys_8086_2592_1043_1881, 0}; + #undef pci_ss_info_1043_1881 + #define pci_ss_info_1043_1881 pci_ss_info_8086_2592_1043_1881 ++static const pciSubsystemInfo pci_ss_info_8086_2592_e4bf_0ccd = ++ {0xe4bf, 0x0ccd, pci_subsys_8086_2592_e4bf_0ccd, 0}; ++#undef pci_ss_info_e4bf_0ccd ++#define pci_ss_info_e4bf_0ccd pci_ss_info_8086_2592_e4bf_0ccd ++static const pciSubsystemInfo pci_ss_info_8086_2592_e4bf_0cd3 = ++ {0xe4bf, 0x0cd3, pci_subsys_8086_2592_e4bf_0cd3, 0}; ++#undef pci_ss_info_e4bf_0cd3 ++#define pci_ss_info_e4bf_0cd3 pci_ss_info_8086_2592_e4bf_0cd3 ++static const pciSubsystemInfo pci_ss_info_8086_2592_e4bf_58b1 = ++ {0xe4bf, 0x58b1, pci_subsys_8086_2592_e4bf_58b1, 0}; ++#undef pci_ss_info_e4bf_58b1 ++#define pci_ss_info_e4bf_58b1 pci_ss_info_8086_2592_e4bf_58b1 + static const pciSubsystemInfo pci_ss_info_8086_25a2_1775_10d0 = + {0x1775, 0x10d0, pci_subsys_8086_25a2_1775_10d0, 0}; + #undef pci_ss_info_1775_10d0 + #define pci_ss_info_1775_10d0 pci_ss_info_8086_25a2_1775_10d0 ++static const pciSubsystemInfo pci_ss_info_8086_25a2_1775_1100 = ++ {0x1775, 0x1100, pci_subsys_8086_25a2_1775_1100, 0}; ++#undef pci_ss_info_1775_1100 ++#define pci_ss_info_1775_1100 pci_ss_info_8086_25a2_1775_1100 + static const pciSubsystemInfo pci_ss_info_8086_25a2_1775_ce90 = + {0x1775, 0xce90, pci_subsys_8086_25a2_1775_ce90, 0}; + #undef pci_ss_info_1775_ce90 +@@ -44557,6 +47327,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x4c53, 0x10e0, pci_subsys_8086_25a2_4c53_10e0, 0}; + #undef pci_ss_info_4c53_10e0 + #define pci_ss_info_4c53_10e0 pci_ss_info_8086_25a2_4c53_10e0 ++static const pciSubsystemInfo pci_ss_info_8086_25a3_1775_1100 = ++ {0x1775, 0x1100, pci_subsys_8086_25a3_1775_1100, 0}; ++#undef pci_ss_info_1775_1100 ++#define pci_ss_info_1775_1100 pci_ss_info_8086_25a3_1775_1100 + static const pciSubsystemInfo pci_ss_info_8086_25a3_1775_ce90 = + {0x1775, 0xce90, pci_subsys_8086_25a3_1775_ce90, 0}; + #undef pci_ss_info_1775_ce90 +@@ -44577,6 +47351,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1775, 0x10d0, pci_subsys_8086_25a4_1775_10d0, 0}; + #undef pci_ss_info_1775_10d0 + #define pci_ss_info_1775_10d0 pci_ss_info_8086_25a4_1775_10d0 ++static const pciSubsystemInfo pci_ss_info_8086_25a4_1775_1100 = ++ {0x1775, 0x1100, pci_subsys_8086_25a4_1775_1100, 0}; ++#undef pci_ss_info_1775_1100 ++#define pci_ss_info_1775_1100 pci_ss_info_8086_25a4_1775_1100 + static const pciSubsystemInfo pci_ss_info_8086_25a4_1775_ce90 = + {0x1775, 0xce90, pci_subsys_8086_25a4_1775_ce90, 0}; + #undef pci_ss_info_1775_ce90 +@@ -44593,6 +47371,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x4c53, 0x10e0, pci_subsys_8086_25a4_4c53_10e0, 0}; + #undef pci_ss_info_4c53_10e0 + #define pci_ss_info_4c53_10e0 pci_ss_info_8086_25a4_4c53_10e0 ++static const pciSubsystemInfo pci_ss_info_8086_25a6_1775_1100 = ++ {0x1775, 0x1100, pci_subsys_8086_25a6_1775_1100, 0}; ++#undef pci_ss_info_1775_1100 ++#define pci_ss_info_1775_1100 pci_ss_info_8086_25a6_1775_1100 + static const pciSubsystemInfo pci_ss_info_8086_25a6_1775_ce90 = + {0x1775, 0xce90, pci_subsys_8086_25a6_1775_ce90, 0}; + #undef pci_ss_info_1775_ce90 +@@ -44605,6 +47387,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1775, 0x10d0, pci_subsys_8086_25a9_1775_10d0, 0}; + #undef pci_ss_info_1775_10d0 + #define pci_ss_info_1775_10d0 pci_ss_info_8086_25a9_1775_10d0 ++static const pciSubsystemInfo pci_ss_info_8086_25a9_1775_1100 = ++ {0x1775, 0x1100, pci_subsys_8086_25a9_1775_1100, 0}; ++#undef pci_ss_info_1775_1100 ++#define pci_ss_info_1775_1100 pci_ss_info_8086_25a9_1775_1100 + static const pciSubsystemInfo pci_ss_info_8086_25a9_1775_ce90 = + {0x1775, 0xce90, pci_subsys_8086_25a9_1775_ce90, 0}; + #undef pci_ss_info_1775_ce90 +@@ -44621,6 +47407,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x4c53, 0x10e0, pci_subsys_8086_25a9_4c53_10e0, 0}; + #undef pci_ss_info_4c53_10e0 + #define pci_ss_info_4c53_10e0 pci_ss_info_8086_25a9_4c53_10e0 ++static const pciSubsystemInfo pci_ss_info_8086_25aa_1775_1100 = ++ {0x1775, 0x1100, pci_subsys_8086_25aa_1775_1100, 0}; ++#undef pci_ss_info_1775_1100 ++#define pci_ss_info_1775_1100 pci_ss_info_8086_25aa_1775_1100 + static const pciSubsystemInfo pci_ss_info_8086_25aa_1775_ce90 = + {0x1775, 0xce90, pci_subsys_8086_25aa_1775_ce90, 0}; + #undef pci_ss_info_1775_ce90 +@@ -44637,6 +47427,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1775, 0x10d0, pci_subsys_8086_25ab_1775_10d0, 0}; + #undef pci_ss_info_1775_10d0 + #define pci_ss_info_1775_10d0 pci_ss_info_8086_25ab_1775_10d0 ++static const pciSubsystemInfo pci_ss_info_8086_25ab_1775_1100 = ++ {0x1775, 0x1100, pci_subsys_8086_25ab_1775_1100, 0}; ++#undef pci_ss_info_1775_1100 ++#define pci_ss_info_1775_1100 pci_ss_info_8086_25ab_1775_1100 + static const pciSubsystemInfo pci_ss_info_8086_25ab_1775_ce90 = + {0x1775, 0xce90, pci_subsys_8086_25ab_1775_ce90, 0}; + #undef pci_ss_info_1775_ce90 +@@ -44657,6 +47451,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1775, 0x10d0, pci_subsys_8086_25ac_1775_10d0, 0}; + #undef pci_ss_info_1775_10d0 + #define pci_ss_info_1775_10d0 pci_ss_info_8086_25ac_1775_10d0 ++static const pciSubsystemInfo pci_ss_info_8086_25ac_1775_1100 = ++ {0x1775, 0x1100, pci_subsys_8086_25ac_1775_1100, 0}; ++#undef pci_ss_info_1775_1100 ++#define pci_ss_info_1775_1100 pci_ss_info_8086_25ac_1775_1100 + static const pciSubsystemInfo pci_ss_info_8086_25ac_1775_ce90 = + {0x1775, 0xce90, pci_subsys_8086_25ac_1775_ce90, 0}; + #undef pci_ss_info_1775_ce90 +@@ -44677,6 +47475,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1775, 0x10d0, pci_subsys_8086_25ad_1775_10d0, 0}; + #undef pci_ss_info_1775_10d0 + #define pci_ss_info_1775_10d0 pci_ss_info_8086_25ad_1775_10d0 ++static const pciSubsystemInfo pci_ss_info_8086_25ad_1775_1100 = ++ {0x1775, 0x1100, pci_subsys_8086_25ad_1775_1100, 0}; ++#undef pci_ss_info_1775_1100 ++#define pci_ss_info_1775_1100 pci_ss_info_8086_25ad_1775_1100 + static const pciSubsystemInfo pci_ss_info_8086_25ad_1775_ce90 = + {0x1775, 0xce90, pci_subsys_8086_25ad_1775_ce90, 0}; + #undef pci_ss_info_1775_ce90 +@@ -44693,6 +47495,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x4c53, 0x10e0, pci_subsys_8086_25ad_4c53_10e0, 0}; + #undef pci_ss_info_4c53_10e0 + #define pci_ss_info_4c53_10e0 pci_ss_info_8086_25ad_4c53_10e0 ++static const pciSubsystemInfo pci_ss_info_8086_25b0_1775_1100 = ++ {0x1775, 0x1100, pci_subsys_8086_25b0_1775_1100, 0}; ++#undef pci_ss_info_1775_1100 ++#define pci_ss_info_1775_1100 pci_ss_info_8086_25b0_1775_1100 + static const pciSubsystemInfo pci_ss_info_8086_25b0_4c53_10d0 = + {0x4c53, 0x10d0, pci_subsys_8086_25b0_4c53_10d0, 0}; + #undef pci_ss_info_4c53_10d0 +@@ -44709,6 +47515,22 @@ static const pciSubsystemInfo pci_ss_inf + {0x1734, 0x105c, pci_subsys_8086_2640_1734_105c, 0}; + #undef pci_ss_info_1734_105c + #define pci_ss_info_1734_105c pci_ss_info_8086_2640_1734_105c ++static const pciSubsystemInfo pci_ss_info_8086_2640_e4bf_0ccd = ++ {0xe4bf, 0x0ccd, pci_subsys_8086_2640_e4bf_0ccd, 0}; ++#undef pci_ss_info_e4bf_0ccd ++#define pci_ss_info_e4bf_0ccd pci_ss_info_8086_2640_e4bf_0ccd ++static const pciSubsystemInfo pci_ss_info_8086_2640_e4bf_0cd3 = ++ {0xe4bf, 0x0cd3, pci_subsys_8086_2640_e4bf_0cd3, 0}; ++#undef pci_ss_info_e4bf_0cd3 ++#define pci_ss_info_e4bf_0cd3 pci_ss_info_8086_2640_e4bf_0cd3 ++static const pciSubsystemInfo pci_ss_info_8086_2640_e4bf_58b1 = ++ {0xe4bf, 0x58b1, pci_subsys_8086_2640_e4bf_58b1, 0}; ++#undef pci_ss_info_e4bf_58b1 ++#define pci_ss_info_e4bf_58b1 pci_ss_info_8086_2640_e4bf_58b1 ++static const pciSubsystemInfo pci_ss_info_8086_2641_103c_0934 = ++ {0x103c, 0x0934, pci_subsys_8086_2641_103c_0934, 0}; ++#undef pci_ss_info_103c_0934 ++#define pci_ss_info_103c_0934 pci_ss_info_8086_2641_103c_0934 + static const pciSubsystemInfo pci_ss_info_8086_2641_103c_099c = + {0x103c, 0x099c, pci_subsys_8086_2641_103c_099c, 0}; + #undef pci_ss_info_103c_099c +@@ -44729,6 +47551,18 @@ static const pciSubsystemInfo pci_ss_inf + {0x8086, 0x4147, pci_subsys_8086_2651_8086_4147, 0}; + #undef pci_ss_info_8086_4147 + #define pci_ss_info_8086_4147 pci_ss_info_8086_2651_8086_4147 ++static const pciSubsystemInfo pci_ss_info_8086_2651_e4bf_0ccd = ++ {0xe4bf, 0x0ccd, pci_subsys_8086_2651_e4bf_0ccd, 0}; ++#undef pci_ss_info_e4bf_0ccd ++#define pci_ss_info_e4bf_0ccd pci_ss_info_8086_2651_e4bf_0ccd ++static const pciSubsystemInfo pci_ss_info_8086_2651_e4bf_0cd3 = ++ {0xe4bf, 0x0cd3, pci_subsys_8086_2651_e4bf_0cd3, 0}; ++#undef pci_ss_info_e4bf_0cd3 ++#define pci_ss_info_e4bf_0cd3 pci_ss_info_8086_2651_e4bf_0cd3 ++static const pciSubsystemInfo pci_ss_info_8086_2651_e4bf_58b1 = ++ {0xe4bf, 0x58b1, pci_subsys_8086_2651_e4bf_58b1, 0}; ++#undef pci_ss_info_e4bf_58b1 ++#define pci_ss_info_e4bf_58b1 pci_ss_info_8086_2651_e4bf_58b1 + static const pciSubsystemInfo pci_ss_info_8086_2652_1462_7028 = + {0x1462, 0x7028, pci_subsys_8086_2652_1462_7028, 0}; + #undef pci_ss_info_1462_7028 +@@ -44737,6 +47571,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1028, 0x0179, pci_subsys_8086_2658_1028_0179, 0}; + #undef pci_ss_info_1028_0179 + #define pci_ss_info_1028_0179 pci_ss_info_8086_2658_1028_0179 ++static const pciSubsystemInfo pci_ss_info_8086_2658_103c_0934 = ++ {0x103c, 0x0934, pci_subsys_8086_2658_103c_0934, 0}; ++#undef pci_ss_info_103c_0934 ++#define pci_ss_info_103c_0934 pci_ss_info_8086_2658_103c_0934 + static const pciSubsystemInfo pci_ss_info_8086_2658_103c_099c = + {0x103c, 0x099c, pci_subsys_8086_2658_103c_099c, 0}; + #undef pci_ss_info_103c_099c +@@ -44757,10 +47595,26 @@ static const pciSubsystemInfo pci_ss_inf + {0x1734, 0x105c, pci_subsys_8086_2658_1734_105c, 0}; + #undef pci_ss_info_1734_105c + #define pci_ss_info_1734_105c pci_ss_info_8086_2658_1734_105c ++static const pciSubsystemInfo pci_ss_info_8086_2658_e4bf_0ccd = ++ {0xe4bf, 0x0ccd, pci_subsys_8086_2658_e4bf_0ccd, 0}; ++#undef pci_ss_info_e4bf_0ccd ++#define pci_ss_info_e4bf_0ccd pci_ss_info_8086_2658_e4bf_0ccd ++static const pciSubsystemInfo pci_ss_info_8086_2658_e4bf_0cd3 = ++ {0xe4bf, 0x0cd3, pci_subsys_8086_2658_e4bf_0cd3, 0}; ++#undef pci_ss_info_e4bf_0cd3 ++#define pci_ss_info_e4bf_0cd3 pci_ss_info_8086_2658_e4bf_0cd3 ++static const pciSubsystemInfo pci_ss_info_8086_2658_e4bf_58b1 = ++ {0xe4bf, 0x58b1, pci_subsys_8086_2658_e4bf_58b1, 0}; ++#undef pci_ss_info_e4bf_58b1 ++#define pci_ss_info_e4bf_58b1 pci_ss_info_8086_2658_e4bf_58b1 + static const pciSubsystemInfo pci_ss_info_8086_2659_1028_0179 = + {0x1028, 0x0179, pci_subsys_8086_2659_1028_0179, 0}; + #undef pci_ss_info_1028_0179 + #define pci_ss_info_1028_0179 pci_ss_info_8086_2659_1028_0179 ++static const pciSubsystemInfo pci_ss_info_8086_2659_103c_0934 = ++ {0x103c, 0x0934, pci_subsys_8086_2659_103c_0934, 0}; ++#undef pci_ss_info_103c_0934 ++#define pci_ss_info_103c_0934 pci_ss_info_8086_2659_103c_0934 + static const pciSubsystemInfo pci_ss_info_8086_2659_103c_099c = + {0x103c, 0x099c, pci_subsys_8086_2659_103c_099c, 0}; + #undef pci_ss_info_103c_099c +@@ -44781,10 +47635,26 @@ static const pciSubsystemInfo pci_ss_inf + {0x1734, 0x105c, pci_subsys_8086_2659_1734_105c, 0}; + #undef pci_ss_info_1734_105c + #define pci_ss_info_1734_105c pci_ss_info_8086_2659_1734_105c ++static const pciSubsystemInfo pci_ss_info_8086_2659_e4bf_0ccd = ++ {0xe4bf, 0x0ccd, pci_subsys_8086_2659_e4bf_0ccd, 0}; ++#undef pci_ss_info_e4bf_0ccd ++#define pci_ss_info_e4bf_0ccd pci_ss_info_8086_2659_e4bf_0ccd ++static const pciSubsystemInfo pci_ss_info_8086_2659_e4bf_0cd3 = ++ {0xe4bf, 0x0cd3, pci_subsys_8086_2659_e4bf_0cd3, 0}; ++#undef pci_ss_info_e4bf_0cd3 ++#define pci_ss_info_e4bf_0cd3 pci_ss_info_8086_2659_e4bf_0cd3 ++static const pciSubsystemInfo pci_ss_info_8086_2659_e4bf_58b1 = ++ {0xe4bf, 0x58b1, pci_subsys_8086_2659_e4bf_58b1, 0}; ++#undef pci_ss_info_e4bf_58b1 ++#define pci_ss_info_e4bf_58b1 pci_ss_info_8086_2659_e4bf_58b1 + static const pciSubsystemInfo pci_ss_info_8086_265a_1028_0179 = + {0x1028, 0x0179, pci_subsys_8086_265a_1028_0179, 0}; + #undef pci_ss_info_1028_0179 + #define pci_ss_info_1028_0179 pci_ss_info_8086_265a_1028_0179 ++static const pciSubsystemInfo pci_ss_info_8086_265a_103c_0934 = ++ {0x103c, 0x0934, pci_subsys_8086_265a_103c_0934, 0}; ++#undef pci_ss_info_103c_0934 ++#define pci_ss_info_103c_0934 pci_ss_info_8086_265a_103c_0934 + static const pciSubsystemInfo pci_ss_info_8086_265a_103c_099c = + {0x103c, 0x099c, pci_subsys_8086_265a_103c_099c, 0}; + #undef pci_ss_info_103c_099c +@@ -44805,6 +47675,18 @@ static const pciSubsystemInfo pci_ss_inf + {0x1734, 0x105c, pci_subsys_8086_265a_1734_105c, 0}; + #undef pci_ss_info_1734_105c + #define pci_ss_info_1734_105c pci_ss_info_8086_265a_1734_105c ++static const pciSubsystemInfo pci_ss_info_8086_265a_e4bf_0ccd = ++ {0xe4bf, 0x0ccd, pci_subsys_8086_265a_e4bf_0ccd, 0}; ++#undef pci_ss_info_e4bf_0ccd ++#define pci_ss_info_e4bf_0ccd pci_ss_info_8086_265a_e4bf_0ccd ++static const pciSubsystemInfo pci_ss_info_8086_265a_e4bf_0cd3 = ++ {0xe4bf, 0x0cd3, pci_subsys_8086_265a_e4bf_0cd3, 0}; ++#undef pci_ss_info_e4bf_0cd3 ++#define pci_ss_info_e4bf_0cd3 pci_ss_info_8086_265a_e4bf_0cd3 ++static const pciSubsystemInfo pci_ss_info_8086_265a_e4bf_58b1 = ++ {0xe4bf, 0x58b1, pci_subsys_8086_265a_e4bf_58b1, 0}; ++#undef pci_ss_info_e4bf_58b1 ++#define pci_ss_info_e4bf_58b1 pci_ss_info_8086_265a_e4bf_58b1 + static const pciSubsystemInfo pci_ss_info_8086_265b_1028_0179 = + {0x1028, 0x0179, pci_subsys_8086_265b_1028_0179, 0}; + #undef pci_ss_info_1028_0179 +@@ -44829,10 +47711,26 @@ static const pciSubsystemInfo pci_ss_inf + {0x1734, 0x105c, pci_subsys_8086_265b_1734_105c, 0}; + #undef pci_ss_info_1734_105c + #define pci_ss_info_1734_105c pci_ss_info_8086_265b_1734_105c ++static const pciSubsystemInfo pci_ss_info_8086_265b_e4bf_0ccd = ++ {0xe4bf, 0x0ccd, pci_subsys_8086_265b_e4bf_0ccd, 0}; ++#undef pci_ss_info_e4bf_0ccd ++#define pci_ss_info_e4bf_0ccd pci_ss_info_8086_265b_e4bf_0ccd ++static const pciSubsystemInfo pci_ss_info_8086_265b_e4bf_0cd3 = ++ {0xe4bf, 0x0cd3, pci_subsys_8086_265b_e4bf_0cd3, 0}; ++#undef pci_ss_info_e4bf_0cd3 ++#define pci_ss_info_e4bf_0cd3 pci_ss_info_8086_265b_e4bf_0cd3 ++static const pciSubsystemInfo pci_ss_info_8086_265b_e4bf_58b1 = ++ {0xe4bf, 0x58b1, pci_subsys_8086_265b_e4bf_58b1, 0}; ++#undef pci_ss_info_e4bf_58b1 ++#define pci_ss_info_e4bf_58b1 pci_ss_info_8086_265b_e4bf_58b1 + static const pciSubsystemInfo pci_ss_info_8086_265c_1028_0179 = + {0x1028, 0x0179, pci_subsys_8086_265c_1028_0179, 0}; + #undef pci_ss_info_1028_0179 + #define pci_ss_info_1028_0179 pci_ss_info_8086_265c_1028_0179 ++static const pciSubsystemInfo pci_ss_info_8086_265c_103c_0934 = ++ {0x103c, 0x0934, pci_subsys_8086_265c_103c_0934, 0}; ++#undef pci_ss_info_103c_0934 ++#define pci_ss_info_103c_0934 pci_ss_info_8086_265c_103c_0934 + static const pciSubsystemInfo pci_ss_info_8086_265c_103c_099c = + {0x103c, 0x099c, pci_subsys_8086_265c_103c_099c, 0}; + #undef pci_ss_info_103c_099c +@@ -44857,10 +47755,78 @@ static const pciSubsystemInfo pci_ss_inf + {0x8086, 0x265c, pci_subsys_8086_265c_8086_265c, 0}; + #undef pci_ss_info_8086_265c + #define pci_ss_info_8086_265c pci_ss_info_8086_265c_8086_265c ++static const pciSubsystemInfo pci_ss_info_8086_265c_e4bf_0ccd = ++ {0xe4bf, 0x0ccd, pci_subsys_8086_265c_e4bf_0ccd, 0}; ++#undef pci_ss_info_e4bf_0ccd ++#define pci_ss_info_e4bf_0ccd pci_ss_info_8086_265c_e4bf_0ccd ++static const pciSubsystemInfo pci_ss_info_8086_265c_e4bf_0cd3 = ++ {0xe4bf, 0x0cd3, pci_subsys_8086_265c_e4bf_0cd3, 0}; ++#undef pci_ss_info_e4bf_0cd3 ++#define pci_ss_info_e4bf_0cd3 pci_ss_info_8086_265c_e4bf_0cd3 ++static const pciSubsystemInfo pci_ss_info_8086_265c_e4bf_58b1 = ++ {0xe4bf, 0x58b1, pci_subsys_8086_265c_e4bf_58b1, 0}; ++#undef pci_ss_info_e4bf_58b1 ++#define pci_ss_info_e4bf_58b1 pci_ss_info_8086_265c_e4bf_58b1 ++static const pciSubsystemInfo pci_ss_info_8086_2660_103c_0934 = ++ {0x103c, 0x0934, pci_subsys_8086_2660_103c_0934, 0}; ++#undef pci_ss_info_103c_0934 ++#define pci_ss_info_103c_0934 pci_ss_info_8086_2660_103c_0934 + static const pciSubsystemInfo pci_ss_info_8086_2660_103c_099c = + {0x103c, 0x099c, pci_subsys_8086_2660_103c_099c, 0}; + #undef pci_ss_info_103c_099c + #define pci_ss_info_103c_099c pci_ss_info_8086_2660_103c_099c ++static const pciSubsystemInfo pci_ss_info_8086_2660_e4bf_0ccd = ++ {0xe4bf, 0x0ccd, pci_subsys_8086_2660_e4bf_0ccd, 0}; ++#undef pci_ss_info_e4bf_0ccd ++#define pci_ss_info_e4bf_0ccd pci_ss_info_8086_2660_e4bf_0ccd ++static const pciSubsystemInfo pci_ss_info_8086_2660_e4bf_0cd3 = ++ {0xe4bf, 0x0cd3, pci_subsys_8086_2660_e4bf_0cd3, 0}; ++#undef pci_ss_info_e4bf_0cd3 ++#define pci_ss_info_e4bf_0cd3 pci_ss_info_8086_2660_e4bf_0cd3 ++static const pciSubsystemInfo pci_ss_info_8086_2660_e4bf_58b1 = ++ {0xe4bf, 0x58b1, pci_subsys_8086_2660_e4bf_58b1, 0}; ++#undef pci_ss_info_e4bf_58b1 ++#define pci_ss_info_e4bf_58b1 pci_ss_info_8086_2660_e4bf_58b1 ++static const pciSubsystemInfo pci_ss_info_8086_2662_103c_0934 = ++ {0x103c, 0x0934, pci_subsys_8086_2662_103c_0934, 0}; ++#undef pci_ss_info_103c_0934 ++#define pci_ss_info_103c_0934 pci_ss_info_8086_2662_103c_0934 ++static const pciSubsystemInfo pci_ss_info_8086_2662_e4bf_0ccd = ++ {0xe4bf, 0x0ccd, pci_subsys_8086_2662_e4bf_0ccd, 0}; ++#undef pci_ss_info_e4bf_0ccd ++#define pci_ss_info_e4bf_0ccd pci_ss_info_8086_2662_e4bf_0ccd ++static const pciSubsystemInfo pci_ss_info_8086_2662_e4bf_0cd3 = ++ {0xe4bf, 0x0cd3, pci_subsys_8086_2662_e4bf_0cd3, 0}; ++#undef pci_ss_info_e4bf_0cd3 ++#define pci_ss_info_e4bf_0cd3 pci_ss_info_8086_2662_e4bf_0cd3 ++static const pciSubsystemInfo pci_ss_info_8086_2662_e4bf_58b1 = ++ {0xe4bf, 0x58b1, pci_subsys_8086_2662_e4bf_58b1, 0}; ++#undef pci_ss_info_e4bf_58b1 ++#define pci_ss_info_e4bf_58b1 pci_ss_info_8086_2662_e4bf_58b1 ++static const pciSubsystemInfo pci_ss_info_8086_2664_e4bf_0ccd = ++ {0xe4bf, 0x0ccd, pci_subsys_8086_2664_e4bf_0ccd, 0}; ++#undef pci_ss_info_e4bf_0ccd ++#define pci_ss_info_e4bf_0ccd pci_ss_info_8086_2664_e4bf_0ccd ++static const pciSubsystemInfo pci_ss_info_8086_2664_e4bf_0cd3 = ++ {0xe4bf, 0x0cd3, pci_subsys_8086_2664_e4bf_0cd3, 0}; ++#undef pci_ss_info_e4bf_0cd3 ++#define pci_ss_info_e4bf_0cd3 pci_ss_info_8086_2664_e4bf_0cd3 ++static const pciSubsystemInfo pci_ss_info_8086_2664_e4bf_58b1 = ++ {0xe4bf, 0x58b1, pci_subsys_8086_2664_e4bf_58b1, 0}; ++#undef pci_ss_info_e4bf_58b1 ++#define pci_ss_info_e4bf_58b1 pci_ss_info_8086_2664_e4bf_58b1 ++static const pciSubsystemInfo pci_ss_info_8086_2666_e4bf_0ccd = ++ {0xe4bf, 0x0ccd, pci_subsys_8086_2666_e4bf_0ccd, 0}; ++#undef pci_ss_info_e4bf_0ccd ++#define pci_ss_info_e4bf_0ccd pci_ss_info_8086_2666_e4bf_0ccd ++static const pciSubsystemInfo pci_ss_info_8086_2666_e4bf_0cd3 = ++ {0xe4bf, 0x0cd3, pci_subsys_8086_2666_e4bf_0cd3, 0}; ++#undef pci_ss_info_e4bf_0cd3 ++#define pci_ss_info_e4bf_0cd3 pci_ss_info_8086_2666_e4bf_0cd3 ++static const pciSubsystemInfo pci_ss_info_8086_2666_e4bf_58b1 = ++ {0xe4bf, 0x58b1, pci_subsys_8086_2666_e4bf_58b1, 0}; ++#undef pci_ss_info_e4bf_58b1 ++#define pci_ss_info_e4bf_58b1 pci_ss_info_8086_2666_e4bf_58b1 + static const pciSubsystemInfo pci_ss_info_8086_2668_103c_2a09 = + {0x103c, 0x2a09, pci_subsys_8086_2668_103c_2a09, 0}; + #undef pci_ss_info_103c_2a09 +@@ -44889,10 +47855,26 @@ static const pciSubsystemInfo pci_ss_inf + {0x1734, 0x105c, pci_subsys_8086_266a_1734_105c, 0}; + #undef pci_ss_info_1734_105c + #define pci_ss_info_1734_105c pci_ss_info_8086_266a_1734_105c ++static const pciSubsystemInfo pci_ss_info_8086_266a_e4bf_0ccd = ++ {0xe4bf, 0x0ccd, pci_subsys_8086_266a_e4bf_0ccd, 0}; ++#undef pci_ss_info_e4bf_0ccd ++#define pci_ss_info_e4bf_0ccd pci_ss_info_8086_266a_e4bf_0ccd ++static const pciSubsystemInfo pci_ss_info_8086_266a_e4bf_0cd3 = ++ {0xe4bf, 0x0cd3, pci_subsys_8086_266a_e4bf_0cd3, 0}; ++#undef pci_ss_info_e4bf_0cd3 ++#define pci_ss_info_e4bf_0cd3 pci_ss_info_8086_266a_e4bf_0cd3 ++static const pciSubsystemInfo pci_ss_info_8086_266a_e4bf_58b1 = ++ {0xe4bf, 0x58b1, pci_subsys_8086_266a_e4bf_58b1, 0}; ++#undef pci_ss_info_e4bf_58b1 ++#define pci_ss_info_e4bf_58b1 pci_ss_info_8086_266a_e4bf_58b1 + static const pciSubsystemInfo pci_ss_info_8086_266d_1025_006a = + {0x1025, 0x006a, pci_subsys_8086_266d_1025_006a, 0}; + #undef pci_ss_info_1025_006a + #define pci_ss_info_1025_006a pci_ss_info_8086_266d_1025_006a ++static const pciSubsystemInfo pci_ss_info_8086_266d_103c_0934 = ++ {0x103c, 0x0934, pci_subsys_8086_266d_103c_0934, 0}; ++#undef pci_ss_info_103c_0934 ++#define pci_ss_info_103c_0934 pci_ss_info_8086_266d_103c_0934 + static const pciSubsystemInfo pci_ss_info_8086_266d_103c_099c = + {0x103c, 0x099c, pci_subsys_8086_266d_103c_099c, 0}; + #undef pci_ss_info_103c_099c +@@ -44913,6 +47895,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1028, 0x0188, pci_subsys_8086_266e_1028_0188, 0}; + #undef pci_ss_info_1028_0188 + #define pci_ss_info_1028_0188 pci_ss_info_8086_266e_1028_0188 ++static const pciSubsystemInfo pci_ss_info_8086_266e_103c_0934 = ++ {0x103c, 0x0934, pci_subsys_8086_266e_103c_0934, 0}; ++#undef pci_ss_info_103c_0934 ++#define pci_ss_info_103c_0934 pci_ss_info_8086_266e_103c_0934 + static const pciSubsystemInfo pci_ss_info_8086_266e_103c_0944 = + {0x103c, 0x0944, pci_subsys_8086_266e_103c_0944, 0}; + #undef pci_ss_info_103c_0944 +@@ -44937,6 +47923,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1734, 0x105a, pci_subsys_8086_266e_1734_105a, 0}; + #undef pci_ss_info_1734_105a + #define pci_ss_info_1734_105a pci_ss_info_8086_266e_1734_105a ++static const pciSubsystemInfo pci_ss_info_8086_266f_103c_0934 = ++ {0x103c, 0x0934, pci_subsys_8086_266f_103c_0934, 0}; ++#undef pci_ss_info_103c_0934 ++#define pci_ss_info_103c_0934 pci_ss_info_8086_266f_103c_0934 + static const pciSubsystemInfo pci_ss_info_8086_266f_103c_099c = + {0x103c, 0x099c, pci_subsys_8086_266f_103c_099c, 0}; + #undef pci_ss_info_103c_099c +@@ -44957,6 +47947,18 @@ static const pciSubsystemInfo pci_ss_inf + {0x1734, 0x105c, pci_subsys_8086_266f_1734_105c, 0}; + #undef pci_ss_info_1734_105c + #define pci_ss_info_1734_105c pci_ss_info_8086_266f_1734_105c ++static const pciSubsystemInfo pci_ss_info_8086_266f_e4bf_0ccd = ++ {0xe4bf, 0x0ccd, pci_subsys_8086_266f_e4bf_0ccd, 0}; ++#undef pci_ss_info_e4bf_0ccd ++#define pci_ss_info_e4bf_0ccd pci_ss_info_8086_266f_e4bf_0ccd ++static const pciSubsystemInfo pci_ss_info_8086_266f_e4bf_0cd3 = ++ {0xe4bf, 0x0cd3, pci_subsys_8086_266f_e4bf_0cd3, 0}; ++#undef pci_ss_info_e4bf_0cd3 ++#define pci_ss_info_e4bf_0cd3 pci_ss_info_8086_266f_e4bf_0cd3 ++static const pciSubsystemInfo pci_ss_info_8086_266f_e4bf_58b1 = ++ {0xe4bf, 0x58b1, pci_subsys_8086_266f_e4bf_58b1, 0}; ++#undef pci_ss_info_e4bf_58b1 ++#define pci_ss_info_e4bf_58b1 pci_ss_info_8086_266f_e4bf_58b1 + static const pciSubsystemInfo pci_ss_info_8086_2770_107b_5048 = + {0x107b, 0x5048, pci_subsys_8086_2770_107b_5048, 0}; + #undef pci_ss_info_107b_5048 +@@ -44969,6 +47971,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x8086, 0x544e, pci_subsys_8086_2772_8086_544e, 0}; + #undef pci_ss_info_8086_544e + #define pci_ss_info_8086_544e pci_ss_info_8086_2772_8086_544e ++static const pciSubsystemInfo pci_ss_info_8086_277c_1043_8178 = ++ {0x1043, 0x8178, pci_subsys_8086_277c_1043_8178, 0}; ++#undef pci_ss_info_1043_8178 ++#define pci_ss_info_1043_8178 pci_ss_info_8086_277c_1043_8178 + static const pciSubsystemInfo pci_ss_info_8086_2782_1043_2582 = + {0x1043, 0x2582, pci_subsys_8086_2782_1043_2582, 0}; + #undef pci_ss_info_1043_2582 +@@ -44985,6 +47991,22 @@ static const pciSubsystemInfo pci_ss_inf + {0x1043, 0x1881, pci_subsys_8086_2792_1043_1881, 0}; + #undef pci_ss_info_1043_1881 + #define pci_ss_info_1043_1881 pci_ss_info_8086_2792_1043_1881 ++static const pciSubsystemInfo pci_ss_info_8086_2792_e4bf_0ccd = ++ {0xe4bf, 0x0ccd, pci_subsys_8086_2792_e4bf_0ccd, 0}; ++#undef pci_ss_info_e4bf_0ccd ++#define pci_ss_info_e4bf_0ccd pci_ss_info_8086_2792_e4bf_0ccd ++static const pciSubsystemInfo pci_ss_info_8086_2792_e4bf_0cd3 = ++ {0xe4bf, 0x0cd3, pci_subsys_8086_2792_e4bf_0cd3, 0}; ++#undef pci_ss_info_e4bf_0cd3 ++#define pci_ss_info_e4bf_0cd3 pci_ss_info_8086_2792_e4bf_0cd3 ++static const pciSubsystemInfo pci_ss_info_8086_2792_e4bf_58b1 = ++ {0xe4bf, 0x58b1, pci_subsys_8086_2792_e4bf_58b1, 0}; ++#undef pci_ss_info_e4bf_58b1 ++#define pci_ss_info_e4bf_58b1 pci_ss_info_8086_2792_e4bf_58b1 ++static const pciSubsystemInfo pci_ss_info_8086_27a0_1025_006c = ++ {0x1025, 0x006c, pci_subsys_8086_27a0_1025_006c, 0}; ++#undef pci_ss_info_1025_006c ++#define pci_ss_info_1025_006c pci_ss_info_8086_27a0_1025_006c + static const pciSubsystemInfo pci_ss_info_8086_27a0_103c_30a1 = + {0x103c, 0x30a1, pci_subsys_8086_27a0_103c_30a1, 0}; + #undef pci_ss_info_103c_30a1 +@@ -45009,6 +48031,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x17aa, 0x201a, pci_subsys_8086_27a6_17aa_201a, 0}; + #undef pci_ss_info_17aa_201a + #define pci_ss_info_17aa_201a pci_ss_info_8086_27a6_17aa_201a ++static const pciSubsystemInfo pci_ss_info_8086_27b0_8086_544e = ++ {0x8086, 0x544e, pci_subsys_8086_27b0_8086_544e, 0}; ++#undef pci_ss_info_8086_544e ++#define pci_ss_info_8086_544e pci_ss_info_8086_27b0_8086_544e + static const pciSubsystemInfo pci_ss_info_8086_27b8_107b_5048 = + {0x107b, 0x5048, pci_subsys_8086_27b8_107b_5048, 0}; + #undef pci_ss_info_107b_5048 +@@ -45029,18 +48055,38 @@ static const pciSubsystemInfo pci_ss_inf + {0x17aa, 0x2009, pci_subsys_8086_27b9_17aa_2009, 0}; + #undef pci_ss_info_17aa_2009 + #define pci_ss_info_17aa_2009 pci_ss_info_8086_27b9_17aa_2009 ++static const pciSubsystemInfo pci_ss_info_8086_27bd_1025_006c = ++ {0x1025, 0x006c, pci_subsys_8086_27bd_1025_006c, 0}; ++#undef pci_ss_info_1025_006c ++#define pci_ss_info_1025_006c pci_ss_info_8086_27bd_1025_006c + static const pciSubsystemInfo pci_ss_info_8086_27c0_107b_5048 = + {0x107b, 0x5048, pci_subsys_8086_27c0_107b_5048, 0}; + #undef pci_ss_info_107b_5048 + #define pci_ss_info_107b_5048 pci_ss_info_8086_27c0_107b_5048 ++static const pciSubsystemInfo pci_ss_info_8086_27c0_1462_7236 = ++ {0x1462, 0x7236, pci_subsys_8086_27c0_1462_7236, 0}; ++#undef pci_ss_info_1462_7236 ++#define pci_ss_info_1462_7236 pci_ss_info_8086_27c0_1462_7236 + static const pciSubsystemInfo pci_ss_info_8086_27c0_8086_544e = + {0x8086, 0x544e, pci_subsys_8086_27c0_8086_544e, 0}; + #undef pci_ss_info_8086_544e + #define pci_ss_info_8086_544e pci_ss_info_8086_27c0_8086_544e ++static const pciSubsystemInfo pci_ss_info_8086_27c3_8086_544e = ++ {0x8086, 0x544e, pci_subsys_8086_27c3_8086_544e, 0}; ++#undef pci_ss_info_8086_544e ++#define pci_ss_info_8086_544e pci_ss_info_8086_27c3_8086_544e ++static const pciSubsystemInfo pci_ss_info_8086_27c4_1025_006c = ++ {0x1025, 0x006c, pci_subsys_8086_27c4_1025_006c, 0}; ++#undef pci_ss_info_1025_006c ++#define pci_ss_info_1025_006c pci_ss_info_8086_27c4_1025_006c + static const pciSubsystemInfo pci_ss_info_8086_27c5_17aa_200d = + {0x17aa, 0x200d, pci_subsys_8086_27c5_17aa_200d, 0}; + #undef pci_ss_info_17aa_200d + #define pci_ss_info_17aa_200d pci_ss_info_8086_27c5_17aa_200d ++static const pciSubsystemInfo pci_ss_info_8086_27c8_1025_006c = ++ {0x1025, 0x006c, pci_subsys_8086_27c8_1025_006c, 0}; ++#undef pci_ss_info_1025_006c ++#define pci_ss_info_1025_006c pci_ss_info_8086_27c8_1025_006c + static const pciSubsystemInfo pci_ss_info_8086_27c8_103c_30a1 = + {0x103c, 0x30a1, pci_subsys_8086_27c8_103c_30a1, 0}; + #undef pci_ss_info_103c_30a1 +@@ -45057,6 +48103,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x8086, 0x544e, pci_subsys_8086_27c8_8086_544e, 0}; + #undef pci_ss_info_8086_544e + #define pci_ss_info_8086_544e pci_ss_info_8086_27c8_8086_544e ++static const pciSubsystemInfo pci_ss_info_8086_27c9_1025_006c = ++ {0x1025, 0x006c, pci_subsys_8086_27c9_1025_006c, 0}; ++#undef pci_ss_info_1025_006c ++#define pci_ss_info_1025_006c pci_ss_info_8086_27c9_1025_006c + static const pciSubsystemInfo pci_ss_info_8086_27c9_103c_30a1 = + {0x103c, 0x30a1, pci_subsys_8086_27c9_103c_30a1, 0}; + #undef pci_ss_info_103c_30a1 +@@ -45073,6 +48123,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x8086, 0x544e, pci_subsys_8086_27c9_8086_544e, 0}; + #undef pci_ss_info_8086_544e + #define pci_ss_info_8086_544e pci_ss_info_8086_27c9_8086_544e ++static const pciSubsystemInfo pci_ss_info_8086_27ca_1025_006c = ++ {0x1025, 0x006c, pci_subsys_8086_27ca_1025_006c, 0}; ++#undef pci_ss_info_1025_006c ++#define pci_ss_info_1025_006c pci_ss_info_8086_27ca_1025_006c + static const pciSubsystemInfo pci_ss_info_8086_27ca_103c_30a1 = + {0x103c, 0x30a1, pci_subsys_8086_27ca_103c_30a1, 0}; + #undef pci_ss_info_103c_30a1 +@@ -45089,6 +48143,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x8086, 0x544e, pci_subsys_8086_27ca_8086_544e, 0}; + #undef pci_ss_info_8086_544e + #define pci_ss_info_8086_544e pci_ss_info_8086_27ca_8086_544e ++static const pciSubsystemInfo pci_ss_info_8086_27cb_1025_006c = ++ {0x1025, 0x006c, pci_subsys_8086_27cb_1025_006c, 0}; ++#undef pci_ss_info_1025_006c ++#define pci_ss_info_1025_006c pci_ss_info_8086_27cb_1025_006c + static const pciSubsystemInfo pci_ss_info_8086_27cb_103c_30a1 = + {0x103c, 0x30a1, pci_subsys_8086_27cb_103c_30a1, 0}; + #undef pci_ss_info_103c_30a1 +@@ -45105,6 +48163,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x8086, 0x544e, pci_subsys_8086_27cb_8086_544e, 0}; + #undef pci_ss_info_8086_544e + #define pci_ss_info_8086_544e pci_ss_info_8086_27cb_8086_544e ++static const pciSubsystemInfo pci_ss_info_8086_27cc_1025_006c = ++ {0x1025, 0x006c, pci_subsys_8086_27cc_1025_006c, 0}; ++#undef pci_ss_info_1025_006c ++#define pci_ss_info_1025_006c pci_ss_info_8086_27cc_1025_006c + static const pciSubsystemInfo pci_ss_info_8086_27cc_103c_30a1 = + {0x103c, 0x30a1, pci_subsys_8086_27cc_103c_30a1, 0}; + #undef pci_ss_info_103c_30a1 +@@ -45117,10 +48179,18 @@ static const pciSubsystemInfo pci_ss_inf + {0x8086, 0x544e, pci_subsys_8086_27cc_8086_544e, 0}; + #undef pci_ss_info_8086_544e + #define pci_ss_info_8086_544e pci_ss_info_8086_27cc_8086_544e ++static const pciSubsystemInfo pci_ss_info_8086_27d8_1025_006c = ++ {0x1025, 0x006c, pci_subsys_8086_27d8_1025_006c, 0}; ++#undef pci_ss_info_1025_006c ++#define pci_ss_info_1025_006c pci_ss_info_8086_27d8_1025_006c + static const pciSubsystemInfo pci_ss_info_8086_27d8_103c_30a1 = + {0x103c, 0x30a1, pci_subsys_8086_27d8_103c_30a1, 0}; + #undef pci_ss_info_103c_30a1 + #define pci_ss_info_103c_30a1 pci_ss_info_8086_27d8_103c_30a1 ++static const pciSubsystemInfo pci_ss_info_8086_27d8_1043_13c4 = ++ {0x1043, 0x13c4, pci_subsys_8086_27d8_1043_13c4, 0}; ++#undef pci_ss_info_1043_13c4 ++#define pci_ss_info_1043_13c4 pci_ss_info_8086_27d8_1043_13c4 + static const pciSubsystemInfo pci_ss_info_8086_27d8_107b_5048 = + {0x107b, 0x5048, pci_subsys_8086_27d8_107b_5048, 0}; + #undef pci_ss_info_107b_5048 +@@ -45145,6 +48215,18 @@ static const pciSubsystemInfo pci_ss_inf + {0x17aa, 0x2010, pci_subsys_8086_27d8_17aa_2010, 0}; + #undef pci_ss_info_17aa_2010 + #define pci_ss_info_17aa_2010 pci_ss_info_8086_27d8_17aa_2010 ++static const pciSubsystemInfo pci_ss_info_8086_27d8_17aa_3802 = ++ {0x17aa, 0x3802, pci_subsys_8086_27d8_17aa_3802, 0}; ++#undef pci_ss_info_17aa_3802 ++#define pci_ss_info_17aa_3802 pci_ss_info_8086_27d8_17aa_3802 ++static const pciSubsystemInfo pci_ss_info_8086_27d8_8086_1112 = ++ {0x8086, 0x1112, pci_subsys_8086_27d8_8086_1112, 0}; ++#undef pci_ss_info_8086_1112 ++#define pci_ss_info_8086_1112 pci_ss_info_8086_27d8_8086_1112 ++static const pciSubsystemInfo pci_ss_info_8086_27da_1025_006c = ++ {0x1025, 0x006c, pci_subsys_8086_27da_1025_006c, 0}; ++#undef pci_ss_info_1025_006c ++#define pci_ss_info_1025_006c pci_ss_info_8086_27da_1025_006c + static const pciSubsystemInfo pci_ss_info_8086_27da_10f7_8338 = + {0x10f7, 0x8338, pci_subsys_8086_27da_10f7_8338, 0}; + #undef pci_ss_info_10f7_8338 +@@ -45161,6 +48243,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x8086, 0x308d, pci_subsys_8086_27dc_8086_308d, 0}; + #undef pci_ss_info_8086_308d + #define pci_ss_info_8086_308d pci_ss_info_8086_27dc_8086_308d ++static const pciSubsystemInfo pci_ss_info_8086_27de_1462_7267 = ++ {0x1462, 0x7267, pci_subsys_8086_27de_1462_7267, 0}; ++#undef pci_ss_info_1462_7267 ++#define pci_ss_info_1462_7267 pci_ss_info_8086_27de_1462_7267 + static const pciSubsystemInfo pci_ss_info_8086_27df_103c_30a1 = + {0x103c, 0x30a1, pci_subsys_8086_27df_103c_30a1, 0}; + #undef pci_ss_info_103c_30a1 +@@ -45201,18 +48287,50 @@ static const pciSubsystemInfo pci_ss_inf + {0x1462, 0x7235, pci_subsys_8086_2834_1462_7235, 0}; + #undef pci_ss_info_1462_7235 + #define pci_ss_info_1462_7235 pci_ss_info_8086_2834_1462_7235 ++static const pciSubsystemInfo pci_ss_info_8086_2834_17aa_20aa = ++ {0x17aa, 0x20aa, pci_subsys_8086_2834_17aa_20aa, 0}; ++#undef pci_ss_info_17aa_20aa ++#define pci_ss_info_17aa_20aa pci_ss_info_8086_2834_17aa_20aa ++static const pciSubsystemInfo pci_ss_info_8086_2835_17aa_20aa = ++ {0x17aa, 0x20aa, pci_subsys_8086_2835_17aa_20aa, 0}; ++#undef pci_ss_info_17aa_20aa ++#define pci_ss_info_17aa_20aa pci_ss_info_8086_2835_17aa_20aa + static const pciSubsystemInfo pci_ss_info_8086_2836_1462_7235 = + {0x1462, 0x7235, pci_subsys_8086_2836_1462_7235, 0}; + #undef pci_ss_info_1462_7235 + #define pci_ss_info_1462_7235 pci_ss_info_8086_2836_1462_7235 ++static const pciSubsystemInfo pci_ss_info_8086_283a_17aa_20ab = ++ {0x17aa, 0x20ab, pci_subsys_8086_283a_17aa_20ab, 0}; ++#undef pci_ss_info_17aa_20ab ++#define pci_ss_info_17aa_20ab pci_ss_info_8086_283a_17aa_20ab + static const pciSubsystemInfo pci_ss_info_8086_283e_1462_7235 = + {0x1462, 0x7235, pci_subsys_8086_283e_1462_7235, 0}; + #undef pci_ss_info_1462_7235 + #define pci_ss_info_1462_7235 pci_ss_info_8086_283e_1462_7235 ++static const pciSubsystemInfo pci_ss_info_8086_284b_17aa_20ac = ++ {0x17aa, 0x20ac, pci_subsys_8086_284b_17aa_20ac, 0}; ++#undef pci_ss_info_17aa_20ac ++#define pci_ss_info_17aa_20ac pci_ss_info_8086_284b_17aa_20ac ++static const pciSubsystemInfo pci_ss_info_8086_29a0_1462_7276 = ++ {0x1462, 0x7276, pci_subsys_8086_29a0_1462_7276, 0}; ++#undef pci_ss_info_1462_7276 ++#define pci_ss_info_1462_7276 pci_ss_info_8086_29a0_1462_7276 ++static const pciSubsystemInfo pci_ss_info_8086_29a2_1462_7276 = ++ {0x1462, 0x7276, pci_subsys_8086_29a2_1462_7276, 0}; ++#undef pci_ss_info_1462_7276 ++#define pci_ss_info_1462_7276 pci_ss_info_8086_29a2_1462_7276 ++static const pciSubsystemInfo pci_ss_info_8086_2a00_17aa_20b1 = ++ {0x17aa, 0x20b1, pci_subsys_8086_2a00_17aa_20b1, 0}; ++#undef pci_ss_info_17aa_20b1 ++#define pci_ss_info_17aa_20b1 pci_ss_info_8086_2a00_17aa_20b1 + static const pciSubsystemInfo pci_ss_info_8086_3200_1775_c200 = + {0x1775, 0xc200, pci_subsys_8086_3200_1775_c200, 0}; + #undef pci_ss_info_1775_c200 + #define pci_ss_info_1775_c200 pci_ss_info_8086_3200_1775_c200 ++static const pciSubsystemInfo pci_ss_info_8086_3340_1014_0529 = ++ {0x1014, 0x0529, pci_subsys_8086_3340_1014_0529, 0}; ++#undef pci_ss_info_1014_0529 ++#define pci_ss_info_1014_0529 pci_ss_info_8086_3340_1014_0529 + static const pciSubsystemInfo pci_ss_info_8086_3340_1025_005a = + {0x1025, 0x005a, pci_subsys_8086_3340_1025_005a, 0}; + #undef pci_ss_info_1025_005a +@@ -45261,6 +48379,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1028, 0x0139, pci_subsys_8086_3580_1028_0139, 0}; + #undef pci_ss_info_1028_0139 + #define pci_ss_info_1028_0139 pci_ss_info_8086_3580_1028_0139 ++static const pciSubsystemInfo pci_ss_info_8086_3580_1028_014f = ++ {0x1028, 0x014f, pci_subsys_8086_3580_1028_014f, 0}; ++#undef pci_ss_info_1028_014f ++#define pci_ss_info_1028_014f pci_ss_info_8086_3580_1028_014f + static const pciSubsystemInfo pci_ss_info_8086_3580_1028_0163 = + {0x1028, 0x0163, pci_subsys_8086_3580_1028_0163, 0}; + #undef pci_ss_info_1028_0163 +@@ -45289,6 +48411,14 @@ static const pciSubsystemInfo pci_ss_inf + {0x4c53, 0x10e0, pci_subsys_8086_3580_4c53_10e0, 0}; + #undef pci_ss_info_4c53_10e0 + #define pci_ss_info_4c53_10e0 pci_ss_info_8086_3580_4c53_10e0 ++static const pciSubsystemInfo pci_ss_info_8086_3580_e4bf_0cc9 = ++ {0xe4bf, 0x0cc9, pci_subsys_8086_3580_e4bf_0cc9, 0}; ++#undef pci_ss_info_e4bf_0cc9 ++#define pci_ss_info_e4bf_0cc9 pci_ss_info_8086_3580_e4bf_0cc9 ++static const pciSubsystemInfo pci_ss_info_8086_3580_e4bf_0cd2 = ++ {0xe4bf, 0x0cd2, pci_subsys_8086_3580_e4bf_0cd2, 0}; ++#undef pci_ss_info_e4bf_0cd2 ++#define pci_ss_info_e4bf_0cd2 pci_ss_info_8086_3580_e4bf_0cd2 + static const pciSubsystemInfo pci_ss_info_8086_3581_1734_1055 = + {0x1734, 0x1055, pci_subsys_8086_3581_1734_1055, 0}; + #undef pci_ss_info_1734_1055 +@@ -45301,6 +48431,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1028, 0x0139, pci_subsys_8086_3582_1028_0139, 0}; + #undef pci_ss_info_1028_0139 + #define pci_ss_info_1028_0139 pci_ss_info_8086_3582_1028_0139 ++static const pciSubsystemInfo pci_ss_info_8086_3582_1028_014f = ++ {0x1028, 0x014f, pci_subsys_8086_3582_1028_014f, 0}; ++#undef pci_ss_info_1028_014f ++#define pci_ss_info_1028_014f pci_ss_info_8086_3582_1028_014f + static const pciSubsystemInfo pci_ss_info_8086_3582_1028_0163 = + {0x1028, 0x0163, pci_subsys_8086_3582_1028_0163, 0}; + #undef pci_ss_info_1028_0163 +@@ -45321,6 +48455,14 @@ static const pciSubsystemInfo pci_ss_inf + {0x4c53, 0x10e0, pci_subsys_8086_3582_4c53_10e0, 0}; + #undef pci_ss_info_4c53_10e0 + #define pci_ss_info_4c53_10e0 pci_ss_info_8086_3582_4c53_10e0 ++static const pciSubsystemInfo pci_ss_info_8086_3582_e4bf_0cc9 = ++ {0xe4bf, 0x0cc9, pci_subsys_8086_3582_e4bf_0cc9, 0}; ++#undef pci_ss_info_e4bf_0cc9 ++#define pci_ss_info_e4bf_0cc9 pci_ss_info_8086_3582_e4bf_0cc9 ++static const pciSubsystemInfo pci_ss_info_8086_3582_e4bf_0cd2 = ++ {0xe4bf, 0x0cd2, pci_subsys_8086_3582_e4bf_0cd2, 0}; ++#undef pci_ss_info_e4bf_0cd2 ++#define pci_ss_info_e4bf_0cd2 pci_ss_info_8086_3582_e4bf_0cd2 + static const pciSubsystemInfo pci_ss_info_8086_3584_1014_055d = + {0x1014, 0x055d, pci_subsys_8086_3584_1014_055d, 0}; + #undef pci_ss_info_1014_055d +@@ -45329,6 +48471,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1028, 0x0139, pci_subsys_8086_3584_1028_0139, 0}; + #undef pci_ss_info_1028_0139 + #define pci_ss_info_1028_0139 pci_ss_info_8086_3584_1028_0139 ++static const pciSubsystemInfo pci_ss_info_8086_3584_1028_014f = ++ {0x1028, 0x014f, pci_subsys_8086_3584_1028_014f, 0}; ++#undef pci_ss_info_1028_014f ++#define pci_ss_info_1028_014f pci_ss_info_8086_3584_1028_014f + static const pciSubsystemInfo pci_ss_info_8086_3584_1028_0163 = + {0x1028, 0x0163, pci_subsys_8086_3584_1028_0163, 0}; + #undef pci_ss_info_1028_0163 +@@ -45365,6 +48511,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1028, 0x0139, pci_subsys_8086_3585_1028_0139, 0}; + #undef pci_ss_info_1028_0139 + #define pci_ss_info_1028_0139 pci_ss_info_8086_3585_1028_0139 ++static const pciSubsystemInfo pci_ss_info_8086_3585_1028_014f = ++ {0x1028, 0x014f, pci_subsys_8086_3585_1028_014f, 0}; ++#undef pci_ss_info_1028_014f ++#define pci_ss_info_1028_014f pci_ss_info_8086_3585_1028_014f + static const pciSubsystemInfo pci_ss_info_8086_3585_1028_0163 = + {0x1028, 0x0163, pci_subsys_8086_3585_1028_0163, 0}; + #undef pci_ss_info_1028_0163 +@@ -45393,6 +48543,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x4c53, 0x10e0, pci_subsys_8086_3585_4c53_10e0, 0}; + #undef pci_ss_info_4c53_10e0 + #define pci_ss_info_4c53_10e0 pci_ss_info_8086_3585_4c53_10e0 ++static const pciSubsystemInfo pci_ss_info_8086_3590_1014_02dd = ++ {0x1014, 0x02dd, pci_subsys_8086_3590_1014_02dd, 0}; ++#undef pci_ss_info_1014_02dd ++#define pci_ss_info_1014_02dd pci_ss_info_8086_3590_1014_02dd + static const pciSubsystemInfo pci_ss_info_8086_3590_1028_019a = + {0x1028, 0x019a, pci_subsys_8086_3590_1028_019a, 0}; + #undef pci_ss_info_1028_019a +@@ -45401,10 +48555,18 @@ static const pciSubsystemInfo pci_ss_inf + {0x1734, 0x103e, pci_subsys_8086_3590_1734_103e, 0}; + #undef pci_ss_info_1734_103e + #define pci_ss_info_1734_103e pci_ss_info_8086_3590_1734_103e ++static const pciSubsystemInfo pci_ss_info_8086_3590_1775_1100 = ++ {0x1775, 0x1100, pci_subsys_8086_3590_1775_1100, 0}; ++#undef pci_ss_info_1775_1100 ++#define pci_ss_info_1775_1100 pci_ss_info_8086_3590_1775_1100 + static const pciSubsystemInfo pci_ss_info_8086_3590_4c53_10d0 = + {0x4c53, 0x10d0, pci_subsys_8086_3590_4c53_10d0, 0}; + #undef pci_ss_info_4c53_10d0 + #define pci_ss_info_4c53_10d0 pci_ss_info_8086_3590_4c53_10d0 ++static const pciSubsystemInfo pci_ss_info_8086_3591_1014_02dd = ++ {0x1014, 0x02dd, pci_subsys_8086_3591_1014_02dd, 0}; ++#undef pci_ss_info_1014_02dd ++#define pci_ss_info_1014_02dd pci_ss_info_8086_3591_1014_02dd + static const pciSubsystemInfo pci_ss_info_8086_3591_1028_0169 = + {0x1028, 0x0169, pci_subsys_8086_3591_1028_0169, 0}; + #undef pci_ss_info_1028_0169 +@@ -45413,18 +48575,42 @@ static const pciSubsystemInfo pci_ss_inf + {0x4c53, 0x10d0, pci_subsys_8086_3591_4c53_10d0, 0}; + #undef pci_ss_info_4c53_10d0 + #define pci_ss_info_4c53_10d0 pci_ss_info_8086_3591_4c53_10d0 ++static const pciSubsystemInfo pci_ss_info_8086_3594_1775_1100 = ++ {0x1775, 0x1100, pci_subsys_8086_3594_1775_1100, 0}; ++#undef pci_ss_info_1775_1100 ++#define pci_ss_info_1775_1100 pci_ss_info_8086_3594_1775_1100 + static const pciSubsystemInfo pci_ss_info_8086_3594_4c53_10d0 = + {0x4c53, 0x10d0, pci_subsys_8086_3594_4c53_10d0, 0}; + #undef pci_ss_info_4c53_10d0 + #define pci_ss_info_4c53_10d0 pci_ss_info_8086_3594_4c53_10d0 ++static const pciSubsystemInfo pci_ss_info_8086_3595_1775_1100 = ++ {0x1775, 0x1100, pci_subsys_8086_3595_1775_1100, 0}; ++#undef pci_ss_info_1775_1100 ++#define pci_ss_info_1775_1100 pci_ss_info_8086_3595_1775_1100 ++static const pciSubsystemInfo pci_ss_info_8086_3597_1775_1100 = ++ {0x1775, 0x1100, pci_subsys_8086_3597_1775_1100, 0}; ++#undef pci_ss_info_1775_1100 ++#define pci_ss_info_1775_1100 pci_ss_info_8086_3597_1775_1100 ++static const pciSubsystemInfo pci_ss_info_8086_3598_1775_1100 = ++ {0x1775, 0x1100, pci_subsys_8086_3598_1775_1100, 0}; ++#undef pci_ss_info_1775_1100 ++#define pci_ss_info_1775_1100 pci_ss_info_8086_3598_1775_1100 ++static const pciSubsystemInfo pci_ss_info_8086_3599_1775_1100 = ++ {0x1775, 0x1100, pci_subsys_8086_3599_1775_1100, 0}; ++#undef pci_ss_info_1775_1100 ++#define pci_ss_info_1775_1100 pci_ss_info_8086_3599_1775_1100 ++static const pciSubsystemInfo pci_ss_info_8086_359b_1014_02dd = ++ {0x1014, 0x02dd, pci_subsys_8086_359b_1014_02dd, 0}; ++#undef pci_ss_info_1014_02dd ++#define pci_ss_info_1014_02dd pci_ss_info_8086_359b_1014_02dd + static const pciSubsystemInfo pci_ss_info_8086_359e_1028_0169 = + {0x1028, 0x0169, pci_subsys_8086_359e_1028_0169, 0}; + #undef pci_ss_info_1028_0169 + #define pci_ss_info_1028_0169 pci_ss_info_8086_359e_1028_0169 +-static const pciSubsystemInfo pci_ss_info_8086_4220_2731_8086 = +- {0x2731, 0x8086, pci_subsys_8086_4220_2731_8086, 0}; +-#undef pci_ss_info_2731_8086 +-#define pci_ss_info_2731_8086 pci_ss_info_8086_4220_2731_8086 ++static const pciSubsystemInfo pci_ss_info_8086_4220_103c_12f6 = ++ {0x103c, 0x12f6, pci_subsys_8086_4220_103c_12f6, 0}; ++#undef pci_ss_info_103c_12f6 ++#define pci_ss_info_103c_12f6 pci_ss_info_8086_4220_103c_12f6 + static const pciSubsystemInfo pci_ss_info_8086_4220_8086_2731 = + {0x8086, 0x2731, pci_subsys_8086_4220_8086_2731, 0}; + #undef pci_ss_info_8086_2731 +@@ -45453,6 +48639,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x8086, 0x1014, pci_subsys_8086_4227_8086_1014, 0}; + #undef pci_ss_info_8086_1014 + #define pci_ss_info_8086_1014 pci_ss_info_8086_4227_8086_1014 ++static const pciSubsystemInfo pci_ss_info_8086_4230_8086_1110 = ++ {0x8086, 0x1110, pci_subsys_8086_4230_8086_1110, 0}; ++#undef pci_ss_info_8086_1110 ++#define pci_ss_info_8086_1110 pci_ss_info_8086_4230_8086_1110 + static const pciSubsystemInfo pci_ss_info_8086_5201_8086_0001 = + {0x8086, 0x0001, pci_subsys_8086_5201_8086_0001, 0}; + #undef pci_ss_info_8086_0001 +@@ -45493,6 +48683,14 @@ static const pciSubsystemInfo pci_ss_inf + {0x8086, 0x4341, pci_subsys_8086_7121_8086_4341, 0}; + #undef pci_ss_info_8086_4341 + #define pci_ss_info_8086_4341 pci_ss_info_8086_7121_8086_4341 ++static const pciSubsystemInfo pci_ss_info_8086_7124_1028_00b4 = ++ {0x1028, 0x00b4, pci_subsys_8086_7124_1028_00b4, 0}; ++#undef pci_ss_info_1028_00b4 ++#define pci_ss_info_1028_00b4 pci_ss_info_8086_7124_1028_00b4 ++static const pciSubsystemInfo pci_ss_info_8086_7125_1028_00b4 = ++ {0x1028, 0x00b4, pci_subsys_8086_7125_1028_00b4, 0}; ++#undef pci_ss_info_1028_00b4 ++#define pci_ss_info_1028_00b4 pci_ss_info_8086_7125_1028_00b4 + static const pciSubsystemInfo pci_ss_info_8086_7190_0e11_0500 = + {0x0e11, 0x0500, pci_subsys_8086_7190_0e11_0500, 0}; + #undef pci_ss_info_0e11_0500 +@@ -45942,6 +49140,40 @@ static const pciSubsystemInfo pci_ss_inf + #undef pci_ss_info_103c_3227 + #define pci_ss_info_103c_3227 pci_ss_info_9005_0285_103c_3227 + #ifdef VENDOR_INCLUDE_NONVIDEO ++#endif ++static const pciSubsystemInfo pci_ss_info_9005_0285_108e_0286 = ++ {0x108e, 0x0286, pci_subsys_9005_0285_108e_0286, 0}; ++#undef pci_ss_info_108e_0286 ++#define pci_ss_info_108e_0286 pci_ss_info_9005_0285_108e_0286 ++#ifdef VENDOR_INCLUDE_NONVIDEO ++#endif ++static const pciSubsystemInfo pci_ss_info_9005_0285_108e_0287 = ++ {0x108e, 0x0287, pci_subsys_9005_0285_108e_0287, 0}; ++#undef pci_ss_info_108e_0287 ++#define pci_ss_info_108e_0287 pci_ss_info_9005_0285_108e_0287 ++#ifdef VENDOR_INCLUDE_NONVIDEO ++#endif ++static const pciSubsystemInfo pci_ss_info_9005_0285_108e_7aac = ++ {0x108e, 0x7aac, pci_subsys_9005_0285_108e_7aac, 0}; ++#undef pci_ss_info_108e_7aac ++#define pci_ss_info_108e_7aac pci_ss_info_9005_0285_108e_7aac ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciSubsystemInfo pci_ss_info_9005_0285_15d9_02b5 = ++ {0x15d9, 0x02b5, pci_subsys_9005_0285_15d9_02b5, 0}; ++#undef pci_ss_info_15d9_02b5 ++#define pci_ss_info_15d9_02b5 pci_ss_info_9005_0285_15d9_02b5 ++static const pciSubsystemInfo pci_ss_info_9005_0285_15d9_02b6 = ++ {0x15d9, 0x02b6, pci_subsys_9005_0285_15d9_02b6, 0}; ++#undef pci_ss_info_15d9_02b6 ++#define pci_ss_info_15d9_02b6 pci_ss_info_9005_0285_15d9_02b6 ++static const pciSubsystemInfo pci_ss_info_9005_0285_15d9_02c9 = ++ {0x15d9, 0x02c9, pci_subsys_9005_0285_15d9_02c9, 0}; ++#undef pci_ss_info_15d9_02c9 ++#define pci_ss_info_15d9_02c9 pci_ss_info_9005_0285_15d9_02c9 ++static const pciSubsystemInfo pci_ss_info_9005_0285_15d9_02ca = ++ {0x15d9, 0x02ca, pci_subsys_9005_0285_15d9_02ca, 0}; ++#undef pci_ss_info_15d9_02ca ++#define pci_ss_info_15d9_02ca pci_ss_info_9005_0285_15d9_02ca + static const pciSubsystemInfo pci_ss_info_9005_0285_17aa_0286 = + {0x17aa, 0x0286, pci_subsys_9005_0285_17aa_0286, 0}; + #undef pci_ss_info_17aa_0286 +@@ -46022,6 +49254,14 @@ static const pciSubsystemInfo pci_ss_inf + {0x9005, 0x029a, pci_subsys_9005_0285_9005_029a, 0}; + #undef pci_ss_info_9005_029a + #define pci_ss_info_9005_029a pci_ss_info_9005_0285_9005_029a ++static const pciSubsystemInfo pci_ss_info_9005_0285_9005_02a4 = ++ {0x9005, 0x02a4, pci_subsys_9005_0285_9005_02a4, 0}; ++#undef pci_ss_info_9005_02a4 ++#define pci_ss_info_9005_02a4 pci_ss_info_9005_0285_9005_02a4 ++static const pciSubsystemInfo pci_ss_info_9005_0285_9005_02a5 = ++ {0x9005, 0x02a5, pci_subsys_9005_0285_9005_02a5, 0}; ++#undef pci_ss_info_9005_02a5 ++#define pci_ss_info_9005_02a5 pci_ss_info_9005_0285_9005_02a5 + static const pciSubsystemInfo pci_ss_info_9005_0285_9005_02b5 = + {0x9005, 0x02b5, pci_subsys_9005_0285_9005_02b5, 0}; + #undef pci_ss_info_9005_02b5 +@@ -46034,6 +49274,74 @@ static const pciSubsystemInfo pci_ss_inf + {0x9005, 0x02b7, pci_subsys_9005_0285_9005_02b7, 0}; + #undef pci_ss_info_9005_02b7 + #define pci_ss_info_9005_02b7 pci_ss_info_9005_0285_9005_02b7 ++static const pciSubsystemInfo pci_ss_info_9005_0285_9005_02b8 = ++ {0x9005, 0x02b8, pci_subsys_9005_0285_9005_02b8, 0}; ++#undef pci_ss_info_9005_02b8 ++#define pci_ss_info_9005_02b8 pci_ss_info_9005_0285_9005_02b8 ++static const pciSubsystemInfo pci_ss_info_9005_0285_9005_02b9 = ++ {0x9005, 0x02b9, pci_subsys_9005_0285_9005_02b9, 0}; ++#undef pci_ss_info_9005_02b9 ++#define pci_ss_info_9005_02b9 pci_ss_info_9005_0285_9005_02b9 ++static const pciSubsystemInfo pci_ss_info_9005_0285_9005_02ba = ++ {0x9005, 0x02ba, pci_subsys_9005_0285_9005_02ba, 0}; ++#undef pci_ss_info_9005_02ba ++#define pci_ss_info_9005_02ba pci_ss_info_9005_0285_9005_02ba ++static const pciSubsystemInfo pci_ss_info_9005_0285_9005_02bb = ++ {0x9005, 0x02bb, pci_subsys_9005_0285_9005_02bb, 0}; ++#undef pci_ss_info_9005_02bb ++#define pci_ss_info_9005_02bb pci_ss_info_9005_0285_9005_02bb ++static const pciSubsystemInfo pci_ss_info_9005_0285_9005_02bc = ++ {0x9005, 0x02bc, pci_subsys_9005_0285_9005_02bc, 0}; ++#undef pci_ss_info_9005_02bc ++#define pci_ss_info_9005_02bc pci_ss_info_9005_0285_9005_02bc ++static const pciSubsystemInfo pci_ss_info_9005_0285_9005_02bd = ++ {0x9005, 0x02bd, pci_subsys_9005_0285_9005_02bd, 0}; ++#undef pci_ss_info_9005_02bd ++#define pci_ss_info_9005_02bd pci_ss_info_9005_0285_9005_02bd ++static const pciSubsystemInfo pci_ss_info_9005_0285_9005_02be = ++ {0x9005, 0x02be, pci_subsys_9005_0285_9005_02be, 0}; ++#undef pci_ss_info_9005_02be ++#define pci_ss_info_9005_02be pci_ss_info_9005_0285_9005_02be ++static const pciSubsystemInfo pci_ss_info_9005_0285_9005_02bf = ++ {0x9005, 0x02bf, pci_subsys_9005_0285_9005_02bf, 0}; ++#undef pci_ss_info_9005_02bf ++#define pci_ss_info_9005_02bf pci_ss_info_9005_0285_9005_02bf ++static const pciSubsystemInfo pci_ss_info_9005_0285_9005_02c0 = ++ {0x9005, 0x02c0, pci_subsys_9005_0285_9005_02c0, 0}; ++#undef pci_ss_info_9005_02c0 ++#define pci_ss_info_9005_02c0 pci_ss_info_9005_0285_9005_02c0 ++static const pciSubsystemInfo pci_ss_info_9005_0285_9005_02c1 = ++ {0x9005, 0x02c1, pci_subsys_9005_0285_9005_02c1, 0}; ++#undef pci_ss_info_9005_02c1 ++#define pci_ss_info_9005_02c1 pci_ss_info_9005_0285_9005_02c1 ++static const pciSubsystemInfo pci_ss_info_9005_0285_9005_02c2 = ++ {0x9005, 0x02c2, pci_subsys_9005_0285_9005_02c2, 0}; ++#undef pci_ss_info_9005_02c2 ++#define pci_ss_info_9005_02c2 pci_ss_info_9005_0285_9005_02c2 ++static const pciSubsystemInfo pci_ss_info_9005_0285_9005_02c3 = ++ {0x9005, 0x02c3, pci_subsys_9005_0285_9005_02c3, 0}; ++#undef pci_ss_info_9005_02c3 ++#define pci_ss_info_9005_02c3 pci_ss_info_9005_0285_9005_02c3 ++static const pciSubsystemInfo pci_ss_info_9005_0285_9005_02c4 = ++ {0x9005, 0x02c4, pci_subsys_9005_0285_9005_02c4, 0}; ++#undef pci_ss_info_9005_02c4 ++#define pci_ss_info_9005_02c4 pci_ss_info_9005_0285_9005_02c4 ++static const pciSubsystemInfo pci_ss_info_9005_0285_9005_02c5 = ++ {0x9005, 0x02c5, pci_subsys_9005_0285_9005_02c5, 0}; ++#undef pci_ss_info_9005_02c5 ++#define pci_ss_info_9005_02c5 pci_ss_info_9005_0285_9005_02c5 ++static const pciSubsystemInfo pci_ss_info_9005_0285_9005_02c6 = ++ {0x9005, 0x02c6, pci_subsys_9005_0285_9005_02c6, 0}; ++#undef pci_ss_info_9005_02c6 ++#define pci_ss_info_9005_02c6 pci_ss_info_9005_0285_9005_02c6 ++static const pciSubsystemInfo pci_ss_info_9005_0285_9005_02c7 = ++ {0x9005, 0x02c7, pci_subsys_9005_0285_9005_02c7, 0}; ++#undef pci_ss_info_9005_02c7 ++#define pci_ss_info_9005_02c7 pci_ss_info_9005_0285_9005_02c7 ++static const pciSubsystemInfo pci_ss_info_9005_0285_9005_02c8 = ++ {0x9005, 0x02c8, pci_subsys_9005_0285_9005_02c8, 0}; ++#undef pci_ss_info_9005_02c8 ++#define pci_ss_info_9005_02c8 pci_ss_info_9005_0285_9005_02c8 + static const pciSubsystemInfo pci_ss_info_9005_0286_1014_034d = + {0x1014, 0x034d, pci_subsys_9005_0286_1014_034d, 0}; + #undef pci_ss_info_1014_034d +@@ -46174,6 +49482,10 @@ static const pciSubsystemInfo pci_ss_inf + {0x1014, 0x02bf, pci_subsys_9005_0503_1014_02bf, 0}; + #undef pci_ss_info_1014_02bf + #define pci_ss_info_1014_02bf pci_ss_info_9005_0503_1014_02bf ++static const pciSubsystemInfo pci_ss_info_9005_0503_1014_02c3 = ++ {0x1014, 0x02c3, pci_subsys_9005_0503_1014_02c3, 0}; ++#undef pci_ss_info_1014_02c3 ++#define pci_ss_info_1014_02c3 pci_ss_info_9005_0503_1014_02c3 + static const pciSubsystemInfo pci_ss_info_9005_0503_1014_02d5 = + {0x1014, 0x02d5, pci_subsys_9005_0503_1014_02d5, 0}; + #undef pci_ss_info_1014_02d5 +@@ -46188,10 +49500,26 @@ static const pciSubsystemInfo pci_ss_inf + {0x9005, 0x0041, pci_subsys_9005_8011_9005_0041, 0}; + #undef pci_ss_info_9005_0041 + #define pci_ss_info_9005_0041 pci_ss_info_9005_8011_9005_0041 ++static const pciSubsystemInfo pci_ss_info_9005_8017_9005_0044 = ++ {0x9005, 0x0044, pci_subsys_9005_8017_9005_0044, 0}; ++#undef pci_ss_info_9005_0044 ++#define pci_ss_info_9005_0044 pci_ss_info_9005_8017_9005_0044 ++static const pciSubsystemInfo pci_ss_info_9005_8017_9005_0045 = ++ {0x9005, 0x0045, pci_subsys_9005_8017_9005_0045, 0}; ++#undef pci_ss_info_9005_0045 ++#define pci_ss_info_9005_0045 pci_ss_info_9005_8017_9005_0045 ++static const pciSubsystemInfo pci_ss_info_9005_801d_1014_02cc = ++ {0x1014, 0x02cc, pci_subsys_9005_801d_1014_02cc, 0}; ++#undef pci_ss_info_1014_02cc ++#define pci_ss_info_1014_02cc pci_ss_info_9005_801d_1014_02cc + static const pciSubsystemInfo pci_ss_info_9005_801f_1734_1011 = + {0x1734, 0x1011, pci_subsys_9005_801f_1734_1011, 0}; + #undef pci_ss_info_1734_1011 + #define pci_ss_info_1734_1011 pci_ss_info_9005_801f_1734_1011 ++static const pciSubsystemInfo pci_ss_info_9005_809d_1014_02cc = ++ {0x1014, 0x02cc, pci_subsys_9005_809d_1014_02cc, 0}; ++#undef pci_ss_info_1014_02cc ++#define pci_ss_info_1014_02cc pci_ss_info_9005_809d_1014_02cc + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo pci_ss_info_9710_9815_1000_0020 = +@@ -46269,6 +49597,7 @@ static const pciSubsystemInfo pci_ss_inf + #define pci_ss_list_050d_0109 NULL + #define pci_ss_list_050d_7050 NULL + #define pci_ss_list_050d_705c NULL ++#define pci_ss_list_058f_9254 NULL + #define pci_ss_list_05a9_8519 NULL + #define pci_ss_list_05e3_0701 NULL + #define pci_ss_list_066f_3410 NULL +@@ -46284,6 +49613,7 @@ static const pciSubsystemInfo pci_ss_inf + #define pci_ss_list_093a_010e NULL + #define pci_ss_list_093a_010f NULL + #define pci_ss_list_093a_2468 NULL ++#define pci_ss_list_093a_2600 NULL + #define pci_ss_list_093a_2603 NULL + #define pci_ss_list_093a_2608 NULL + #define pci_ss_list_09c1_0704 NULL +@@ -46307,6 +49637,7 @@ static const pciSubsystemInfo pci_ss_inf + #define pci_ss_list_0e11_0001 NULL + #define pci_ss_list_0e11_0002 NULL + static const pciSubsystemInfo *pci_ss_list_0e11_0046[] = { ++ &pci_ss_info_0e11_0046_0e11_4091, + &pci_ss_info_0e11_0046_0e11_409a, + &pci_ss_info_0e11_0046_0e11_409b, + &pci_ss_info_0e11_0046_0e11_409c, +@@ -46525,12 +49856,16 @@ static const pciSubsystemInfo *pci_ss_li + }; + #define pci_ss_list_1000_0041 NULL + #define pci_ss_list_1000_0050 NULL +-#define pci_ss_list_1000_0054 NULL ++static const pciSubsystemInfo *pci_ss_list_1000_0054[] = { ++ &pci_ss_info_1000_0054_1028_1f09, ++ NULL ++}; + static const pciSubsystemInfo *pci_ss_list_1000_0055[] = { + &pci_ss_info_1000_0055_1033_8336, + NULL + }; + #define pci_ss_list_1000_0056 NULL ++#define pci_ss_list_1000_0057 NULL + #define pci_ss_list_1000_0058 NULL + #define pci_ss_list_1000_005a NULL + #define pci_ss_list_1000_005c NULL +@@ -46543,9 +49878,11 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1000_0060_1000_1010, + &pci_ss_info_1000_0060_1000_1011, + &pci_ss_info_1000_0060_1000_1012, ++ &pci_ss_info_1000_0060_1000_1016, + &pci_ss_info_1000_0060_1014_0363, + &pci_ss_info_1000_0060_1014_0364, + &pci_ss_info_1000_0060_1014_0365, ++ &pci_ss_info_1000_0060_1014_0379, + &pci_ss_info_1000_0060_1028_1f0a, + &pci_ss_info_1000_0060_1028_1f0b, + &pci_ss_info_1000_0060_1028_1f0c, +@@ -46553,6 +49890,9 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1000_0060_1028_1f11, + &pci_ss_info_1000_0060_1043_824d, + &pci_ss_info_1000_0060_1170_002f, ++ &pci_ss_info_1000_0060_8086_1006, ++ &pci_ss_info_1000_0060_8086_100a, ++ &pci_ss_info_1000_0060_8086_1010, + &pci_ss_info_1000_0060_8086_34cc, + &pci_ss_info_1000_0060_8086_34cd, + NULL +@@ -46789,7 +50129,9 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1002_436e NULL + static const pciSubsystemInfo *pci_ss_list_1002_4370[] = { + &pci_ss_info_1002_4370_1025_0079, ++ &pci_ss_info_1002_4370_1025_0091, + &pci_ss_info_1002_4370_103c_308b, ++ &pci_ss_info_1002_4370_105b_0c81, + &pci_ss_info_1002_4370_107b_0300, + NULL + }; +@@ -47048,6 +50390,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1002_4c57_1014_0517, + &pci_ss_info_1002_4c57_1028_00e6, + &pci_ss_info_1002_4c57_1028_012a, ++ &pci_ss_info_1002_4c57_1043_1622, + &pci_ss_info_1002_4c57_144d_c006, + NULL + }; +@@ -47064,7 +50407,10 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1002_4c5a NULL + #define pci_ss_list_1002_4c64 NULL + #define pci_ss_list_1002_4c65 NULL +-#define pci_ss_list_1002_4c66 NULL ++static const pciSubsystemInfo *pci_ss_list_1002_4c66[] = { ++ &pci_ss_info_1002_4c66_1014_054d, ++ NULL ++}; + #define pci_ss_list_1002_4c67 NULL + #define pci_ss_list_1002_4c6e NULL + #define pci_ss_list_1002_4d46 NULL +@@ -47308,7 +50654,10 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1002_5453 NULL + #define pci_ss_list_1002_5454 NULL + #define pci_ss_list_1002_5455 NULL +-#define pci_ss_list_1002_5460 NULL ++static const pciSubsystemInfo *pci_ss_list_1002_5460[] = { ++ &pci_ss_info_1002_5460_1775_1100, ++ NULL ++}; + #define pci_ss_list_1002_5462 NULL + #define pci_ss_list_1002_5464 NULL + #define pci_ss_list_1002_5548 NULL +@@ -47347,7 +50696,10 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1002_5834 NULL + #define pci_ss_list_1002_5835 NULL + #define pci_ss_list_1002_5838 NULL +-#define pci_ss_list_1002_5940 NULL ++static const pciSubsystemInfo *pci_ss_list_1002_5940[] = { ++ &pci_ss_info_1002_5940_17af_2021, ++ NULL ++}; + static const pciSubsystemInfo *pci_ss_list_1002_5941[] = { + &pci_ss_info_1002_5941_1458_4019, + &pci_ss_info_1002_5941_174b_7c12, +@@ -47372,7 +50724,10 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1002_5955_103c_308b, + NULL + }; +-#define pci_ss_list_1002_5960 NULL ++static const pciSubsystemInfo *pci_ss_list_1002_5960[] = { ++ &pci_ss_info_1002_5960_17af_2020, ++ NULL ++}; + static const pciSubsystemInfo *pci_ss_list_1002_5961[] = { + &pci_ss_info_1002_5961_1002_2f72, + &pci_ss_info_1002_5961_1019_4c30, +@@ -47443,6 +50798,7 @@ static const pciSubsystemInfo *pci_ss_li + static const pciSubsystemInfo *pci_ss_list_1002_5d44[] = { + &pci_ss_info_1002_5d44_1458_4019, + &pci_ss_info_1002_5d44_1458_4032, ++ &pci_ss_info_1002_5d44_147b_6190, + &pci_ss_info_1002_5d44_174b_7c12, + &pci_ss_info_1002_5d44_1787_5965, + &pci_ss_info_1002_5d44_17af_2013, +@@ -47535,6 +50891,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1002_7166_1002_0323, + NULL + }; ++#define pci_ss_list_1002_716e NULL + #define pci_ss_list_1002_7172 NULL + #define pci_ss_list_1002_7173 NULL + #define pci_ss_list_1002_7180 NULL +@@ -47563,11 +50920,13 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1002_71c6 NULL + #define pci_ss_list_1002_71c7 NULL + #define pci_ss_list_1002_71ce NULL ++#define pci_ss_list_1002_71d4 NULL + #define pci_ss_list_1002_71d5 NULL + #define pci_ss_list_1002_71d6 NULL + #define pci_ss_list_1002_71de NULL + #define pci_ss_list_1002_71e0 NULL + #define pci_ss_list_1002_71e2 NULL ++#define pci_ss_list_1002_71e6 NULL + #define pci_ss_list_1002_71e7 NULL + #define pci_ss_list_1002_7210 NULL + #define pci_ss_list_1002_7211 NULL +@@ -47605,6 +50964,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1002_7834 NULL + #define pci_ss_list_1002_7835 NULL + #define pci_ss_list_1002_7838 NULL ++#define pci_ss_list_1002_7919 NULL + #define pci_ss_list_1002_791e NULL + #define pci_ss_list_1002_791f NULL + #define pci_ss_list_1002_793f NULL +@@ -47683,13 +51043,28 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_100b_0035 NULL + #define pci_ss_list_100b_0500 NULL + #define pci_ss_list_100b_0501 NULL +-#define pci_ss_list_100b_0502 NULL +-#define pci_ss_list_100b_0503 NULL ++static const pciSubsystemInfo *pci_ss_list_100b_0502[] = { ++ &pci_ss_info_100b_0502_100b_0502, ++ NULL ++}; ++static const pciSubsystemInfo *pci_ss_list_100b_0503[] = { ++ &pci_ss_info_100b_0503_100b_0503, ++ NULL ++}; + #define pci_ss_list_100b_0504 NULL + #define pci_ss_list_100b_0505 NULL +-#define pci_ss_list_100b_0510 NULL +-#define pci_ss_list_100b_0511 NULL +-#define pci_ss_list_100b_0515 NULL ++static const pciSubsystemInfo *pci_ss_list_100b_0510[] = { ++ &pci_ss_info_100b_0510_100b_0500, ++ NULL ++}; ++static const pciSubsystemInfo *pci_ss_list_100b_0511[] = { ++ &pci_ss_info_100b_0511_100b_0501, ++ NULL ++}; ++static const pciSubsystemInfo *pci_ss_list_100b_0515[] = { ++ &pci_ss_info_100b_0515_100b_0505, ++ NULL ++}; + #define pci_ss_list_100b_d001 NULL + #define pci_ss_list_100c_3202 NULL + #define pci_ss_list_100c_3205 NULL +@@ -47986,6 +51361,11 @@ static const pciSubsystemInfo *pci_ss_li + }; + #define pci_ss_list_1014_01c1 NULL + #define pci_ss_list_1014_01e6 NULL ++static const pciSubsystemInfo *pci_ss_list_1014_01ef[] = { ++ &pci_ss_info_1014_01ef_1734_102b, ++ &pci_ss_info_1014_01ef_1734_10f8, ++ NULL ++}; + #define pci_ss_list_1014_01ff NULL + static const pciSubsystemInfo *pci_ss_list_1014_0219[] = { + &pci_ss_info_1014_0219_1014_021a, +@@ -48010,17 +51390,30 @@ static const pciSubsystemInfo *pci_ss_li + static const pciSubsystemInfo *pci_ss_list_1014_02bd[] = { + &pci_ss_info_1014_02bd_1014_02c1, + &pci_ss_info_1014_02bd_1014_02c2, ++ &pci_ss_info_1014_02bd_1014_0338, + NULL + }; + #define pci_ss_list_1014_0302 NULL + #define pci_ss_list_1014_0308 NULL + #define pci_ss_list_1014_0314 NULL ++static const pciSubsystemInfo *pci_ss_list_1014_0339[] = { ++ &pci_ss_info_1014_0339_1014_0360, ++ NULL ++}; + #define pci_ss_list_1014_3022 NULL + #define pci_ss_list_1014_4022 NULL + #define pci_ss_list_1014_ffff NULL + #endif + #define pci_ss_list_1017_5343 NULL + #define pci_ss_list_101a_0005 NULL ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciSubsystemInfo *pci_ss_list_101a_1dc1[] = { ++ &pci_ss_info_101a_1dc1_101a_0019, ++ &pci_ss_info_101a_1dc1_101a_001f, ++ &pci_ss_info_101a_1dc1_101a_0ece, ++ NULL ++}; ++#endif + #define pci_ss_list_101c_0193 NULL + #define pci_ss_list_101c_0196 NULL + #define pci_ss_list_101c_0197 NULL +@@ -48066,6 +51459,16 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1022_1101 NULL + #define pci_ss_list_1022_1102 NULL + #define pci_ss_list_1022_1103 NULL ++#define pci_ss_list_1022_1200 NULL ++#define pci_ss_list_1022_1201 NULL ++#define pci_ss_list_1022_1202 NULL ++#define pci_ss_list_1022_1203 NULL ++#define pci_ss_list_1022_1204 NULL ++#define pci_ss_list_1022_1300 NULL ++#define pci_ss_list_1022_1301 NULL ++#define pci_ss_list_1022_1302 NULL ++#define pci_ss_list_1022_1303 NULL ++#define pci_ss_list_1022_1304 NULL + static const pciSubsystemInfo *pci_ss_list_1022_2000[] = { + &pci_ss_info_1022_2000_1014_2000, + &pci_ss_info_1022_2000_1022_2000, +@@ -48367,9 +51770,9 @@ static const pciSubsystemInfo *pci_ss_li + static const pciSubsystemInfo *pci_ss_list_1028_0015[] = { + &pci_ss_info_1028_0015_1028_1f01, + &pci_ss_info_1028_0015_1028_1f02, ++ &pci_ss_info_1028_0015_1028_1f03, + NULL + }; +-#define pci_ss_list_1028_1f03 NULL + #define pci_ss_list_102a_0000 NULL + #define pci_ss_list_102a_0010 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -48551,6 +51954,7 @@ static const pciSubsystemInfo *pci_ss_li + static const pciSubsystemInfo *pci_ss_list_102b_2538[] = { + &pci_ss_info_102b_2538_102b_08c7, + &pci_ss_info_102b_2538_102b_0907, ++ &pci_ss_info_102b_2538_102b_0947, + &pci_ss_info_102b_2538_102b_1047, + &pci_ss_info_102b_2538_102b_1087, + &pci_ss_info_102b_2538_102b_2538, +@@ -48700,7 +52104,10 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1039_0018 NULL + #define pci_ss_list_1039_0180 NULL + #define pci_ss_list_1039_0181 NULL +-#define pci_ss_list_1039_0182 NULL ++static const pciSubsystemInfo *pci_ss_list_1039_0182[] = { ++ &pci_ss_info_1039_0182_1734_1095, ++ NULL ++}; + #define pci_ss_list_1039_0186 NULL + #define pci_ss_list_1039_0190 NULL + #define pci_ss_list_1039_0191 NULL +@@ -48747,7 +52154,10 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1039_0746 NULL + #define pci_ss_list_1039_0755 NULL + #define pci_ss_list_1039_0760 NULL +-#define pci_ss_list_1039_0761 NULL ++static const pciSubsystemInfo *pci_ss_list_1039_0761[] = { ++ &pci_ss_info_1039_0761_1734_1099, ++ NULL ++}; + static const pciSubsystemInfo *pci_ss_list_1039_0900[] = { + &pci_ss_info_1039_0900_1019_0a14, + &pci_ss_info_1039_0900_1039_0900, +@@ -48778,6 +52188,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1039_5513_1039_5513, + &pci_ss_info_1039_5513_1043_8035, + &pci_ss_info_1039_5513_1462_7010, ++ &pci_ss_info_1039_5513_1734_1095, + NULL + }; + #define pci_ss_list_1039_5517 NULL +@@ -48812,6 +52223,9 @@ static const pciSubsystemInfo *pci_ss_li + }; + static const pciSubsystemInfo *pci_ss_list_1039_6330[] = { + &pci_ss_info_1039_6330_1039_6330, ++ &pci_ss_info_1039_6330_1043_8113, ++ &pci_ss_info_1039_6330_1458_d000, ++ &pci_ss_info_1039_6330_1734_1099, + NULL + }; + #define pci_ss_list_1039_6350 NULL +@@ -48821,11 +52235,13 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1039_7001_1039_7000, + &pci_ss_info_1039_7001_1462_5470, + &pci_ss_info_1039_7001_1462_7010, ++ &pci_ss_info_1039_7001_1734_1095, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_1039_7002[] = { + &pci_ss_info_1039_7002_1462_7010, + &pci_ss_info_1039_7002_1509_7002, ++ &pci_ss_info_1039_7002_1734_1095, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_1039_7007[] = { +@@ -48835,6 +52251,7 @@ static const pciSubsystemInfo *pci_ss_li + static const pciSubsystemInfo *pci_ss_list_1039_7012[] = { + &pci_ss_info_1039_7012_1462_7010, + &pci_ss_info_1039_7012_15bd_1001, ++ &pci_ss_info_1039_7012_1734_109f, + NULL + }; + #define pci_ss_list_1039_7013 NULL +@@ -48849,6 +52266,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1039_7018_1025_000e, + &pci_ss_info_1039_7018_1025_0018, + &pci_ss_info_1039_7018_1039_7018, ++ &pci_ss_info_1039_7018_1043_1453, + &pci_ss_info_1039_7018_1043_800b, + &pci_ss_info_1039_7018_1054_7018, + &pci_ss_info_1039_7018_107d_5330, +@@ -48933,6 +52351,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_103c_12fa NULL + #define pci_ss_list_103c_1302 NULL + #define pci_ss_list_103c_1303 NULL ++#define pci_ss_list_103c_1361 NULL + #define pci_ss_list_103c_2910 NULL + #define pci_ss_list_103c_2925 NULL + #define pci_ss_list_103c_3080 NULL +@@ -48942,7 +52361,14 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_103c_3220_103c_3225, + NULL + }; +-#define pci_ss_list_103c_3230 NULL ++static const pciSubsystemInfo *pci_ss_list_103c_3230[] = { ++ &pci_ss_info_103c_3230_103c_3223, ++ &pci_ss_info_103c_3230_103c_3234, ++ &pci_ss_info_103c_3230_103c_3235, ++ &pci_ss_info_103c_3230_103c_3237, ++ NULL ++}; ++#define pci_ss_list_103c_3238 NULL + #define pci_ss_list_103c_4030 NULL + #define pci_ss_list_103c_4031 NULL + #define pci_ss_list_103c_4037 NULL +@@ -49396,6 +52822,8 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1050_9922 NULL + #define pci_ss_list_1050_9970 NULL + #endif ++#define pci_ss_list_1054_3011 NULL ++#define pci_ss_list_1054_3012 NULL + #define pci_ss_list_1055_9130 NULL + #define pci_ss_list_1055_9460 NULL + #define pci_ss_list_1055_9462 NULL +@@ -49410,6 +52838,8 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1057_0012 NULL + #define pci_ss_list_1057_0100 NULL + #define pci_ss_list_1057_0431 NULL ++#define pci_ss_list_1057_1073 NULL ++#define pci_ss_list_1057_1219 NULL + static const pciSubsystemInfo *pci_ss_list_1057_1801[] = { + &pci_ss_info_1057_1801_14fb_0101, + &pci_ss_info_1057_1801_14fb_0102, +@@ -49576,6 +53006,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_105a_8350 NULL + static const pciSubsystemInfo *pci_ss_list_105a_8650[] = { + &pci_ss_info_105a_8650_105a_4600, ++ &pci_ss_info_105a_8650_105a_4610, + &pci_ss_info_105a_8650_105a_8601, + &pci_ss_info_105a_8650_105a_8602, + NULL +@@ -49583,6 +53014,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_105a_c350 NULL + #define pci_ss_list_105a_e350 NULL + #endif ++#define pci_ss_list_105b_0c4d NULL + #define pci_ss_list_105d_2309 NULL + static const pciSubsystemInfo *pci_ss_list_105d_2339[] = { + &pci_ss_info_105d_2339_105d_0000, +@@ -49937,13 +53369,21 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_108e_1103 NULL + #define pci_ss_list_108e_1648 NULL + #define pci_ss_list_108e_2bad NULL +-#define pci_ss_list_108e_5000 NULL ++static const pciSubsystemInfo *pci_ss_list_108e_5000[] = { ++ &pci_ss_info_108e_5000_108e_5000, ++ NULL ++}; + #define pci_ss_list_108e_5043 NULL ++#define pci_ss_list_108e_676e NULL ++#define pci_ss_list_108e_7063 NULL + #define pci_ss_list_108e_8000 NULL + #define pci_ss_list_108e_8001 NULL + #define pci_ss_list_108e_8002 NULL + #define pci_ss_list_108e_a000 NULL +-#define pci_ss_list_108e_a001 NULL ++static const pciSubsystemInfo *pci_ss_list_108e_a001[] = { ++ &pci_ss_info_108e_a001_108e_a001, ++ NULL ++}; + #define pci_ss_list_108e_a801 NULL + #define pci_ss_list_108e_abba NULL + #define pci_ss_list_1091_0020 NULL +@@ -50269,16 +53709,20 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_10b5_1147 NULL + #define pci_ss_list_10b5_2540 NULL + #define pci_ss_list_10b5_2724 NULL ++#define pci_ss_list_10b5_6520 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo *pci_ss_list_10b5_6540[] = { ++ &pci_ss_info_10b5_6540_1775_1100, + &pci_ss_info_10b5_6540_4c53_10e0, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_10b5_6541[] = { ++ &pci_ss_info_10b5_6541_1775_1100, + &pci_ss_info_10b5_6541_4c53_10e0, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_10b5_6542[] = { ++ &pci_ss_info_10b5_6542_1775_1100, + &pci_ss_info_10b5_6542_4c53_10e0, + NULL + }; +@@ -50354,6 +53798,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_10b5_9054_12c7_4001, + &pci_ss_info_10b5_9054_12d9_0002, + &pci_ss_info_10b5_9054_14b4_d100, ++ &pci_ss_info_10b5_9054_14b4_d114, + &pci_ss_info_10b5_9054_16df_0011, + &pci_ss_info_10b5_9054_16df_0012, + &pci_ss_info_10b5_9054_16df_0013, +@@ -50364,6 +53809,7 @@ static const pciSubsystemInfo *pci_ss_li + }; + static const pciSubsystemInfo *pci_ss_list_10b5_9056[] = { + &pci_ss_info_10b5_9056_10b5_2979, ++ &pci_ss_info_10b5_9056_14b4_d140, + NULL + }; + #define pci_ss_list_10b5_9060 NULL +@@ -50443,6 +53889,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_10b7_0910 NULL + #define pci_ss_list_10b7_1006 NULL + static const pciSubsystemInfo *pci_ss_list_10b7_1007[] = { ++ &pci_ss_info_10b7_1007_10b7_615b, + &pci_ss_info_10b7_1007_10b7_615c, + NULL + }; +@@ -50563,6 +54010,7 @@ static const pciSubsystemInfo *pci_ss_li + static const pciSubsystemInfo *pci_ss_list_10b7_9200[] = { + &pci_ss_info_10b7_9200_1028_0095, + &pci_ss_info_10b7_9200_1028_0097, ++ &pci_ss_info_10b7_9200_1028_00b4, + &pci_ss_info_10b7_9200_1028_00fe, + &pci_ss_info_10b7_9200_1028_012a, + &pci_ss_info_10b7_9200_10b7_1000, +@@ -51004,6 +54452,7 @@ static const pciSubsystemInfo *pci_ss_li + NULL + }; + static const pciSubsystemInfo *pci_ss_list_10de_0054[] = { ++ &pci_ss_info_10de_0054_1043_815a, + &pci_ss_info_10de_0054_1458_b003, + &pci_ss_info_10de_0054_1462_7100, + &pci_ss_info_10de_0054_147b_1c1a, +@@ -51046,6 +54495,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_10de_005c NULL + #define pci_ss_list_10de_005d NULL + static const pciSubsystemInfo *pci_ss_list_10de_005e[] = { ++ &pci_ss_info_10de_005e_1043_815a, + &pci_ss_info_10de_005e_10f1_2891, + &pci_ss_info_10de_005e_1458_5000, + &pci_ss_info_10de_005e_1462_7100, +@@ -51126,6 +54576,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_10de_0091 NULL + #define pci_ss_list_10de_0092 NULL + #define pci_ss_list_10de_0093 NULL ++#define pci_ss_list_10de_0095 NULL + #define pci_ss_list_10de_0098 NULL + #define pci_ss_list_10de_0099 NULL + #define pci_ss_list_10de_009d NULL +@@ -51158,34 +54609,40 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_10de_00da NULL + #define pci_ss_list_10de_00dd NULL + static const pciSubsystemInfo *pci_ss_list_10de_00df[] = { ++ &pci_ss_info_10de_00df_1043_80a7, + &pci_ss_info_10de_00df_105b_0c43, + &pci_ss_info_10de_00df_147b_1c0b, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_10de_00e0[] = { ++ &pci_ss_info_10de_00e0_1043_813f, + &pci_ss_info_10de_00e0_10de_0c11, + &pci_ss_info_10de_00e0_1462_7030, + &pci_ss_info_10de_00e0_147b_1c0b, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_10de_00e1[] = { ++ &pci_ss_info_10de_00e1_1043_813f, + &pci_ss_info_10de_00e1_1462_7030, + &pci_ss_info_10de_00e1_147b_1c0b, + NULL + }; + #define pci_ss_list_10de_00e2 NULL + static const pciSubsystemInfo *pci_ss_list_10de_00e3[] = { ++ &pci_ss_info_10de_00e3_1043_813f, + &pci_ss_info_10de_00e3_105b_0c43, + &pci_ss_info_10de_00e3_147b_1c0b, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_10de_00e4[] = { ++ &pci_ss_info_10de_00e4_1043_813f, + &pci_ss_info_10de_00e4_105b_0c43, + &pci_ss_info_10de_00e4_1462_7030, + &pci_ss_info_10de_00e4_147b_1c0b, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_10de_00e5[] = { ++ &pci_ss_info_10de_00e5_1043_813f, + &pci_ss_info_10de_00e5_105b_0c43, + &pci_ss_info_10de_00e5_1462_7030, + &pci_ss_info_10de_00e5_147b_1c0b, +@@ -51193,19 +54650,23 @@ static const pciSubsystemInfo *pci_ss_li + }; + #define pci_ss_list_10de_00e6 NULL + static const pciSubsystemInfo *pci_ss_list_10de_00e7[] = { ++ &pci_ss_info_10de_00e7_1043_813f, + &pci_ss_info_10de_00e7_105b_0c43, + &pci_ss_info_10de_00e7_1462_7030, + &pci_ss_info_10de_00e7_147b_1c0b, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_10de_00e8[] = { ++ &pci_ss_info_10de_00e8_1043_813f, + &pci_ss_info_10de_00e8_105b_0c43, + &pci_ss_info_10de_00e8_1462_7030, + &pci_ss_info_10de_00e8_147b_1c0b, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_10de_00ea[] = { ++ &pci_ss_info_10de_00ea_1043_819d, + &pci_ss_info_10de_00ea_105b_0c43, ++ &pci_ss_info_10de_00ea_1462_b010, + &pci_ss_info_10de_00ea_147b_1c0b, + NULL + }; +@@ -51214,6 +54675,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_10de_00f0 NULL + static const pciSubsystemInfo *pci_ss_list_10de_00f1[] = { + &pci_ss_info_10de_00f1_1043_81a6, ++ &pci_ss_info_10de_00f1_1458_3150, + &pci_ss_info_10de_00f1_1682_2119, + NULL + }; +@@ -51271,6 +54733,7 @@ static const pciSubsystemInfo *pci_ss_li + }; + static const pciSubsystemInfo *pci_ss_list_10de_0110[] = { + &pci_ss_info_10de_0110_1043_4015, ++ &pci_ss_info_10de_0110_1043_4021, + &pci_ss_info_10de_0110_1043_4031, + &pci_ss_info_10de_0110_1048_0c60, + &pci_ss_info_10de_0110_1048_0c61, +@@ -51290,10 +54753,12 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_10de_0113 NULL + #define pci_ss_list_10de_0140 NULL + static const pciSubsystemInfo *pci_ss_list_10de_0141[] = { ++ &pci_ss_info_10de_0141_1043_81b0, + &pci_ss_info_10de_0141_1458_3124, + NULL + }; + #define pci_ss_list_10de_0142 NULL ++#define pci_ss_list_10de_0143 NULL + #define pci_ss_list_10de_0144 NULL + #define pci_ss_list_10de_0145 NULL + #define pci_ss_list_10de_0146 NULL +@@ -51335,6 +54800,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_10de_0167 NULL + #define pci_ss_list_10de_0168 NULL + #define pci_ss_list_10de_0169 NULL ++#define pci_ss_list_10de_016a NULL + #define pci_ss_list_10de_0170 NULL + static const pciSubsystemInfo *pci_ss_list_10de_0171[] = { + &pci_ss_info_10de_0171_10b0_0002, +@@ -51375,6 +54841,7 @@ static const pciSubsystemInfo *pci_ss_li + }; + #define pci_ss_list_10de_0182 NULL + #define pci_ss_list_10de_0183 NULL ++#define pci_ss_list_10de_0184 NULL + #define pci_ss_list_10de_0185 NULL + #define pci_ss_list_10de_0186 NULL + #define pci_ss_list_10de_0187 NULL +@@ -51383,6 +54850,11 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_10de_018b NULL + #define pci_ss_list_10de_018c NULL + #define pci_ss_list_10de_018d NULL ++#define pci_ss_list_10de_0191 NULL ++#define pci_ss_list_10de_0193 NULL ++#define pci_ss_list_10de_0194 NULL ++#define pci_ss_list_10de_019d NULL ++#define pci_ss_list_10de_019e NULL + #define pci_ss_list_10de_01a0 NULL + #define pci_ss_list_10de_01a4 NULL + #define pci_ss_list_10de_01ab NULL +@@ -51402,10 +54874,13 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_10de_01d1_1462_0345, + NULL + }; ++#define pci_ss_list_10de_01d3 NULL + #define pci_ss_list_10de_01d6 NULL + #define pci_ss_list_10de_01d7 NULL + #define pci_ss_list_10de_01d8 NULL + #define pci_ss_list_10de_01da NULL ++#define pci_ss_list_10de_01dc NULL ++#define pci_ss_list_10de_01dd NULL + static const pciSubsystemInfo *pci_ss_list_10de_01de[] = { + &pci_ss_info_10de_01de_10de_01dc, + NULL +@@ -51460,18 +54935,29 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_10de_0212 NULL + #define pci_ss_list_10de_0215 NULL + #define pci_ss_list_10de_0218 NULL +-#define pci_ss_list_10de_0221 NULL ++static const pciSubsystemInfo *pci_ss_list_10de_0221[] = { ++ &pci_ss_info_10de_0221_3842_a341, ++ NULL ++}; ++#define pci_ss_list_10de_0222 NULL + static const pciSubsystemInfo *pci_ss_list_10de_0240[] = { ++ &pci_ss_info_10de_0240_1043_81cd, + &pci_ss_info_10de_0240_1462_7207, + NULL + }; + #define pci_ss_list_10de_0241 NULL + #define pci_ss_list_10de_0242 NULL + #define pci_ss_list_10de_0243 NULL +-#define pci_ss_list_10de_0244 NULL +-#define pci_ss_list_10de_0245 NULL ++static const pciSubsystemInfo *pci_ss_list_10de_0244[] = { ++ &pci_ss_info_10de_0244_10de_0244, ++ NULL ++}; ++#define pci_ss_list_10de_0245 NULL + #define pci_ss_list_10de_0246 NULL +-#define pci_ss_list_10de_0247 NULL ++static const pciSubsystemInfo *pci_ss_list_10de_0247[] = { ++ &pci_ss_info_10de_0247_1043_1382, ++ NULL ++}; + #define pci_ss_list_10de_0248 NULL + #define pci_ss_list_10de_0249 NULL + #define pci_ss_list_10de_024a NULL +@@ -51495,6 +54981,8 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_10de_0259 NULL + #define pci_ss_list_10de_025b NULL + static const pciSubsystemInfo *pci_ss_list_10de_0260[] = { ++ &pci_ss_info_10de_0260_1043_81bc, ++ &pci_ss_info_10de_0260_1458_5001, + &pci_ss_info_10de_0260_1462_7207, + NULL + }; +@@ -51502,52 +54990,66 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_10de_0262 NULL + #define pci_ss_list_10de_0263 NULL + static const pciSubsystemInfo *pci_ss_list_10de_0264[] = { ++ &pci_ss_info_10de_0264_1043_81bc, + &pci_ss_info_10de_0264_1462_7207, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_10de_0265[] = { ++ &pci_ss_info_10de_0265_1043_81bc, + &pci_ss_info_10de_0265_1462_7207, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_10de_0266[] = { ++ &pci_ss_info_10de_0266_1043_81bc, + &pci_ss_info_10de_0266_1462_7207, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_10de_0267[] = { ++ &pci_ss_info_10de_0267_1043_81bc, + &pci_ss_info_10de_0267_1462_7207, + NULL + }; + #define pci_ss_list_10de_0268 NULL + static const pciSubsystemInfo *pci_ss_list_10de_0269[] = { ++ &pci_ss_info_10de_0269_1043_8141, + &pci_ss_info_10de_0269_1462_7207, + NULL + }; + #define pci_ss_list_10de_026a NULL + #define pci_ss_list_10de_026b NULL + static const pciSubsystemInfo *pci_ss_list_10de_026c[] = { ++ &pci_ss_info_10de_026c_10de_cb84, + &pci_ss_info_10de_026c_1462_7207, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_10de_026d[] = { ++ &pci_ss_info_10de_026d_1043_81bc, + &pci_ss_info_10de_026d_1462_7207, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_10de_026e[] = { ++ &pci_ss_info_10de_026e_1043_81bc, + &pci_ss_info_10de_026e_1462_7207, + NULL + }; + #define pci_ss_list_10de_026f NULL + static const pciSubsystemInfo *pci_ss_list_10de_0270[] = { ++ &pci_ss_info_10de_0270_1043_81bc, ++ &pci_ss_info_10de_0270_1458_5001, + &pci_ss_info_10de_0270_1462_7207, + NULL + }; + #define pci_ss_list_10de_0271 NULL + #define pci_ss_list_10de_0272 NULL + static const pciSubsystemInfo *pci_ss_list_10de_027e[] = { ++ &pci_ss_info_10de_027e_1043_81cd, ++ &pci_ss_info_10de_027e_1458_5000, + &pci_ss_info_10de_027e_1462_7207, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_10de_027f[] = { ++ &pci_ss_info_10de_027f_1043_81cd, ++ &pci_ss_info_10de_027f_1458_5000, + &pci_ss_info_10de_027f_1462_7207, + NULL + }; +@@ -51559,8 +55061,18 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_10de_0289 NULL + #define pci_ss_list_10de_028c NULL + #define pci_ss_list_10de_0290 NULL +-#define pci_ss_list_10de_0291 NULL ++static const pciSubsystemInfo *pci_ss_list_10de_0291[] = { ++ &pci_ss_info_10de_0291_10de_042b, ++ NULL ++}; + #define pci_ss_list_10de_0292 NULL ++#define pci_ss_list_10de_0293 NULL ++#define pci_ss_list_10de_0294 NULL ++static const pciSubsystemInfo *pci_ss_list_10de_0295[] = { ++ &pci_ss_info_10de_0295_107d_2a68, ++ NULL ++}; ++#define pci_ss_list_10de_0297 NULL + #define pci_ss_list_10de_0298 NULL + #define pci_ss_list_10de_0299 NULL + #define pci_ss_list_10de_029a NULL +@@ -51570,12 +55082,18 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_10de_029e NULL + #define pci_ss_list_10de_029f NULL + #define pci_ss_list_10de_02a0 NULL ++#define pci_ss_list_10de_02e0 NULL + #define pci_ss_list_10de_02e1 NULL ++#define pci_ss_list_10de_02e2 NULL + static const pciSubsystemInfo *pci_ss_list_10de_02f0[] = { ++ &pci_ss_info_10de_02f0_1043_81cd, + &pci_ss_info_10de_02f0_1462_7207, + NULL + }; +-#define pci_ss_list_10de_02f1 NULL ++static const pciSubsystemInfo *pci_ss_list_10de_02f1[] = { ++ &pci_ss_info_10de_02f1_1458_5000, ++ NULL ++}; + #define pci_ss_list_10de_02f2 NULL + #define pci_ss_list_10de_02f3 NULL + #define pci_ss_list_10de_02f4 NULL +@@ -51583,14 +55101,20 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_10de_02f6 NULL + #define pci_ss_list_10de_02f7 NULL + static const pciSubsystemInfo *pci_ss_list_10de_02f8[] = { ++ &pci_ss_info_10de_02f8_1043_81cd, ++ &pci_ss_info_10de_02f8_1458_5000, + &pci_ss_info_10de_02f8_1462_7207, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_10de_02f9[] = { ++ &pci_ss_info_10de_02f9_1043_81cd, ++ &pci_ss_info_10de_02f9_1458_5000, + &pci_ss_info_10de_02f9_1462_7207, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_10de_02fa[] = { ++ &pci_ss_info_10de_02fa_1043_81cd, ++ &pci_ss_info_10de_02fa_1458_5000, + &pci_ss_info_10de_02fa_1462_7207, + NULL + }; +@@ -51598,10 +55122,14 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_10de_02fc NULL + #define pci_ss_list_10de_02fd NULL + static const pciSubsystemInfo *pci_ss_list_10de_02fe[] = { ++ &pci_ss_info_10de_02fe_1043_81cd, ++ &pci_ss_info_10de_02fe_1458_5000, + &pci_ss_info_10de_02fe_1462_7207, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_10de_02ff[] = { ++ &pci_ss_info_10de_02ff_1043_81cd, ++ &pci_ss_info_10de_02ff_1458_5000, + &pci_ss_info_10de_02ff_1462_7207, + NULL + }; +@@ -51628,6 +55156,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_10de_0320 NULL + #define pci_ss_list_10de_0321 NULL + static const pciSubsystemInfo *pci_ss_list_10de_0322[] = { ++ &pci_ss_info_10de_0322_1043_02fb, + &pci_ss_info_10de_0322_1462_9171, + &pci_ss_info_10de_0322_1462_9360, + NULL +@@ -51658,7 +55187,10 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_10de_0334 NULL + #define pci_ss_list_10de_0338 NULL + #define pci_ss_list_10de_033f NULL +-#define pci_ss_list_10de_0341 NULL ++static const pciSubsystemInfo *pci_ss_list_10de_0341[] = { ++ &pci_ss_info_10de_0341_1462_9380, ++ NULL ++}; + #define pci_ss_list_10de_0342 NULL + #define pci_ss_list_10de_0343 NULL + #define pci_ss_list_10de_0344 NULL +@@ -51698,15 +55230,30 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_10de_0377 NULL + #define pci_ss_list_10de_0378 NULL + #define pci_ss_list_10de_037a NULL ++#define pci_ss_list_10de_037c NULL + #define pci_ss_list_10de_037e NULL + #define pci_ss_list_10de_037f NULL +-#define pci_ss_list_10de_0391 NULL ++#define pci_ss_list_10de_0390 NULL ++static const pciSubsystemInfo *pci_ss_list_10de_0391[] = { ++ &pci_ss_info_10de_0391_1458_3427, ++ NULL ++}; + static const pciSubsystemInfo *pci_ss_list_10de_0392[] = { + &pci_ss_info_10de_0392_1462_0622, + NULL + }; + #define pci_ss_list_10de_0393 NULL +-#define pci_ss_list_10de_0398 NULL ++#define pci_ss_list_10de_0394 NULL ++#define pci_ss_list_10de_0395 NULL ++#define pci_ss_list_10de_0397 NULL ++static const pciSubsystemInfo *pci_ss_list_10de_0398[] = { ++ &pci_ss_info_10de_0398_1025_006c, ++ NULL ++}; ++#define pci_ss_list_10de_0399 NULL ++#define pci_ss_list_10de_039a NULL ++#define pci_ss_list_10de_039b NULL ++#define pci_ss_list_10de_039c NULL + #define pci_ss_list_10de_039e NULL + #define pci_ss_list_10de_03a0 NULL + #define pci_ss_list_10de_03a1 NULL +@@ -51763,6 +55310,20 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_10de_03f5 NULL + #define pci_ss_list_10de_03f6 NULL + #define pci_ss_list_10de_03f7 NULL ++#define pci_ss_list_10de_0400 NULL ++#define pci_ss_list_10de_0402 NULL ++#define pci_ss_list_10de_0407 NULL ++#define pci_ss_list_10de_040b NULL ++#define pci_ss_list_10de_0421 NULL ++#define pci_ss_list_10de_0422 NULL ++#define pci_ss_list_10de_0423 NULL ++#define pci_ss_list_10de_0425 NULL ++#define pci_ss_list_10de_0426 NULL ++#define pci_ss_list_10de_0427 NULL ++#define pci_ss_list_10de_0428 NULL ++#define pci_ss_list_10de_0429 NULL ++#define pci_ss_list_10de_042a NULL ++#define pci_ss_list_10de_042b NULL + #define pci_ss_list_10de_0440 NULL + #define pci_ss_list_10de_0441 NULL + #define pci_ss_list_10de_0442 NULL +@@ -51794,7 +55355,12 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_10de_045d NULL + #define pci_ss_list_10de_045e NULL + #define pci_ss_list_10de_045f NULL ++#define pci_ss_list_10de_055c NULL ++#define pci_ss_list_10de_055d NULL ++#define pci_ss_list_10de_c615 NULL + #define pci_ss_list_10df_1ae5 NULL ++#define pci_ss_list_10df_f011 NULL ++#define pci_ss_list_10df_f015 NULL + #define pci_ss_list_10df_f085 NULL + #define pci_ss_list_10df_f095 NULL + #define pci_ss_list_10df_f098 NULL +@@ -51806,6 +55372,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_10df_f0e1 NULL + #define pci_ss_list_10df_f0e5 NULL + #define pci_ss_list_10df_f0f5 NULL ++#define pci_ss_list_10df_f100 NULL + #define pci_ss_list_10df_f700 NULL + #define pci_ss_list_10df_f701 NULL + #define pci_ss_list_10df_f800 NULL +@@ -51820,6 +55387,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_10df_fc00 NULL + #define pci_ss_list_10df_fc10 NULL + #define pci_ss_list_10df_fc20 NULL ++#define pci_ss_list_10df_fc40 NULL + #define pci_ss_list_10df_fd00 NULL + #define pci_ss_list_10df_fe00 NULL + #define pci_ss_list_10df_ff00 NULL +@@ -51839,12 +55407,17 @@ static const pciSubsystemInfo *pci_ss_li + #endif + #define pci_ss_list_10e3_0000 NULL + #define pci_ss_list_10e3_0108 NULL +-#define pci_ss_list_10e3_0148 NULL ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciSubsystemInfo *pci_ss_list_10e3_0148[] = { ++ &pci_ss_info_10e3_0148_1775_1100, ++ NULL ++}; + #define pci_ss_list_10e3_0860 NULL + #define pci_ss_list_10e3_0862 NULL + #define pci_ss_list_10e3_8260 NULL + #define pci_ss_list_10e3_8261 NULL + #define pci_ss_list_10e3_a108 NULL ++#endif + #define pci_ss_list_10e4_8029 NULL + #define pci_ss_list_10e8_1072 NULL + #define pci_ss_list_10e8_2011 NULL +@@ -51859,10 +55432,12 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_10e8_80d7 NULL + #define pci_ss_list_10e8_80d9 NULL + #define pci_ss_list_10e8_80da NULL ++#define pci_ss_list_10e8_80fc NULL + #define pci_ss_list_10e8_811a NULL + #define pci_ss_list_10e8_814c NULL + #define pci_ss_list_10e8_8170 NULL + #define pci_ss_list_10e8_81e6 NULL ++#define pci_ss_list_10e8_828d NULL + #define pci_ss_list_10e8_8291 NULL + #define pci_ss_list_10e8_82c4 NULL + #define pci_ss_list_10e8_82c5 NULL +@@ -51871,6 +55446,8 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_10e8_82ca NULL + #define pci_ss_list_10e8_82db NULL + #define pci_ss_list_10e8_82e2 NULL ++#define pci_ss_list_10e8_8406 NULL ++#define pci_ss_list_10e8_8407 NULL + #define pci_ss_list_10e8_8851 NULL + #define pci_ss_list_10ea_1680 NULL + #define pci_ss_list_10ea_1682 NULL +@@ -51884,11 +55461,18 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_10eb_0101 NULL + #define pci_ss_list_10eb_8111 NULL + #define pci_ss_list_10ec_0139 NULL ++#define pci_ss_list_10ec_0260 NULL ++#define pci_ss_list_10ec_0261 NULL ++#define pci_ss_list_10ec_0280 NULL ++#define pci_ss_list_10ec_0861 NULL ++#define pci_ss_list_10ec_0862 NULL ++#define pci_ss_list_10ec_0880 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo *pci_ss_list_10ec_0883[] = { + &pci_ss_info_10ec_0883_1025_1605, + NULL + }; ++#define pci_ss_list_10ec_0888 NULL + static const pciSubsystemInfo *pci_ss_list_10ec_8029[] = { + &pci_ss_info_10ec_8029_10b8_2011, + &pci_ss_info_10ec_8029_10ec_8029, +@@ -51912,10 +55496,12 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_10ec_8139_1025_8920, + &pci_ss_info_10ec_8139_1025_8921, + &pci_ss_info_10ec_8139_103c_006a, ++ &pci_ss_info_10ec_8139_1043_1045, + &pci_ss_info_10ec_8139_1043_8109, + &pci_ss_info_10ec_8139_1071_8160, + &pci_ss_info_10ec_8139_10bd_0320, + &pci_ss_info_10ec_8139_10ec_8139, ++ &pci_ss_info_10ec_8139_10f7_8338, + &pci_ss_info_10ec_8139_1113_ec01, + &pci_ss_info_10ec_8139_1186_1300, + &pci_ss_info_10ec_8139_1186_1320, +@@ -51926,6 +55512,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_10ec_8139_1429_d010, + &pci_ss_info_10ec_8139_1432_9130, + &pci_ss_info_10ec_8139_1436_8139, ++ &pci_ss_info_10ec_8139_144d_c00c, + &pci_ss_info_10ec_8139_1458_e000, + &pci_ss_info_10ec_8139_1462_788c, + &pci_ss_info_10ec_8139_146c_1439, +@@ -51934,6 +55521,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_10ec_8139_149c_139a, + &pci_ss_info_10ec_8139_149c_8139, + &pci_ss_info_10ec_8139_14cb_0200, ++ &pci_ss_info_10ec_8139_1565_2300, + &pci_ss_info_10ec_8139_1695_9001, + &pci_ss_info_10ec_8139_1799_5000, + &pci_ss_info_10ec_8139_1904_8139, +@@ -51943,14 +55531,21 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_10ec_8139_a0a0_0007, + NULL + }; +-#define pci_ss_list_10ec_8167 NULL ++static const pciSubsystemInfo *pci_ss_list_10ec_8167[] = { ++ &pci_ss_info_10ec_8167_1462_235c, ++ NULL ++}; + #define pci_ss_list_10ec_8168 NULL + static const pciSubsystemInfo *pci_ss_list_10ec_8169[] = { + &pci_ss_info_10ec_8169_1025_0079, + &pci_ss_info_10ec_8169_1259_c107, + &pci_ss_info_10ec_8169_1371_434e, + &pci_ss_info_10ec_8169_1458_e000, ++ &pci_ss_info_10ec_8169_1462_030c, + &pci_ss_info_10ec_8169_1462_702c, ++ &pci_ss_info_10ec_8169_1462_7094, ++ &pci_ss_info_10ec_8169_1734_1091, ++ &pci_ss_info_10ec_8169_a0a0_0449, + NULL + }; + #define pci_ss_list_10ec_8180 NULL +@@ -51970,6 +55565,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_10ee_3fc4 NULL + #define pci_ss_list_10ee_3fc5 NULL + #define pci_ss_list_10ee_3fc6 NULL ++#define pci_ss_list_10ee_8380 NULL + #define pci_ss_list_10ee_8381 NULL + #define pci_ss_list_10ee_d154 NULL + #define pci_ss_list_10ef_8154 NULL +@@ -52013,8 +55609,10 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1102_0004_1102_0051, + &pci_ss_info_1102_0004_1102_0053, + &pci_ss_info_1102_0004_1102_0058, ++ &pci_ss_info_1102_0004_1102_1002, + &pci_ss_info_1102_0004_1102_1007, + &pci_ss_info_1102_0004_1102_2002, ++ &pci_ss_info_1102_0004_1102_4001, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_1102_0005[] = { +@@ -52077,8 +55675,10 @@ static const pciSubsystemInfo *pci_ss_li + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo *pci_ss_list_1103_0004[] = { + &pci_ss_info_1103_0004_1103_0001, ++ &pci_ss_info_1103_0004_1103_0003, + &pci_ss_info_1103_0004_1103_0004, + &pci_ss_info_1103_0004_1103_0005, ++ &pci_ss_info_1103_0004_1103_0006, + NULL + }; + #define pci_ss_list_1103_0005 NULL +@@ -52086,6 +55686,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1103_0007 NULL + #define pci_ss_list_1103_0008 NULL + #define pci_ss_list_1103_0009 NULL ++#define pci_ss_list_1103_2340 NULL + #endif + #define pci_ss_list_1105_1105 NULL + #define pci_ss_list_1105_8300 NULL +@@ -52107,6 +55708,7 @@ static const pciSubsystemInfo *pci_ss_li + #endif + #define pci_ss_list_1106_0102 NULL + #define pci_ss_list_1106_0130 NULL ++#define pci_ss_list_1106_0198 NULL + #define pci_ss_list_1106_0204 NULL + #define pci_ss_list_1106_0208 NULL + #define pci_ss_list_1106_0238 NULL +@@ -52136,7 +55738,10 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1106_0336 NULL + #define pci_ss_list_1106_0340 NULL + #define pci_ss_list_1106_0351 NULL +-#define pci_ss_list_1106_0364 NULL ++static const pciSubsystemInfo *pci_ss_list_1106_0364[] = { ++ &pci_ss_info_1106_0364_1043_81ce, ++ NULL ++}; + #define pci_ss_list_1106_0391 NULL + #define pci_ss_list_1106_0501 NULL + #define pci_ss_list_1106_0505 NULL +@@ -52153,6 +55758,8 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1106_0571_1297_f641, + &pci_ss_info_1106_0571_1458_5002, + &pci_ss_info_1106_0571_1462_7020, ++ &pci_ss_info_1106_0571_1462_7094, ++ &pci_ss_info_1106_0571_1462_7181, + &pci_ss_info_1106_0571_147b_1407, + &pci_ss_info_1106_0571_1849_0571, + NULL +@@ -52222,6 +55829,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1106_1364 NULL + #define pci_ss_list_1106_1571 NULL + #define pci_ss_list_1106_1595 NULL ++#define pci_ss_list_1106_2106 NULL + #define pci_ss_list_1106_2204 NULL + #define pci_ss_list_1106_2208 NULL + #define pci_ss_list_1106_2238 NULL +@@ -52257,6 +55865,8 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1106_3038_1179_0001, + &pci_ss_info_1106_3038_1458_5004, + &pci_ss_info_1106_3038_1462_7020, ++ &pci_ss_info_1106_3038_1462_7094, ++ &pci_ss_info_1106_3038_1462_7181, + &pci_ss_info_1106_3038_147b_1407, + &pci_ss_info_1106_3038_182d_201d, + &pci_ss_info_1106_3038_1849_3038, +@@ -52270,6 +55880,7 @@ static const pciSubsystemInfo *pci_ss_li + NULL + }; + static const pciSubsystemInfo *pci_ss_list_1106_3044[] = { ++ &pci_ss_info_1106_3044_0010_0001, + &pci_ss_info_1106_3044_1025_005a, + &pci_ss_info_1106_3044_1043_808a, + &pci_ss_info_1106_3044_1458_1000, +@@ -52310,18 +55921,23 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1106_3059_1043_80a1, + &pci_ss_info_1106_3059_1043_80b0, + &pci_ss_info_1106_3059_1043_812a, ++ &pci_ss_info_1106_3059_10ec_8168, + &pci_ss_info_1106_3059_1106_3059, + &pci_ss_info_1106_3059_1106_4161, + &pci_ss_info_1106_3059_1106_4170, + &pci_ss_info_1106_3059_1106_4552, + &pci_ss_info_1106_3059_1297_c160, ++ &pci_ss_info_1106_3059_1413_147b, + &pci_ss_info_1106_3059_1458_a002, + &pci_ss_info_1106_3059_1462_0080, + &pci_ss_info_1106_3059_1462_3800, ++ &pci_ss_info_1106_3059_1462_7181, + &pci_ss_info_1106_3059_147b_1407, ++ &pci_ss_info_1106_3059_1849_0850, + &pci_ss_info_1106_3059_1849_9761, + &pci_ss_info_1106_3059_4005_4710, + &pci_ss_info_1106_3059_a0a0_01b6, ++ &pci_ss_info_1106_3059_a0a0_0342, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_1106_3065[] = { +@@ -52330,6 +55946,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1106_3065_1186_1400, + &pci_ss_info_1106_3065_1186_1401, + &pci_ss_info_1106_3065_13b9_1421, ++ &pci_ss_info_1106_3065_1462_7181, + &pci_ss_info_1106_3065_147b_1c09, + &pci_ss_info_1106_3065_1695_3005, + &pci_ss_info_1106_3065_1695_300c, +@@ -52362,6 +55979,8 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1106_3104_1297_f641, + &pci_ss_info_1106_3104_1458_5004, + &pci_ss_info_1106_3104_1462_7020, ++ &pci_ss_info_1106_3104_1462_7094, ++ &pci_ss_info_1106_3104_1462_7181, + &pci_ss_info_1106_3104_147b_1407, + &pci_ss_info_1106_3104_182d_201d, + &pci_ss_info_1106_3104_1849_3104, +@@ -52394,12 +56013,15 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1106_3149_1043_80ed, + &pci_ss_info_1106_3149_1458_b003, + &pci_ss_info_1106_3149_1462_7020, ++ &pci_ss_info_1106_3149_1462_7094, + &pci_ss_info_1106_3149_147b_1407, + &pci_ss_info_1106_3149_147b_1408, + &pci_ss_info_1106_3149_1849_3149, ++ &pci_ss_info_1106_3149_a0a0_04ad, + NULL + }; + #define pci_ss_list_1106_3156 NULL ++#define pci_ss_list_1106_3157 NULL + static const pciSubsystemInfo *pci_ss_list_1106_3164[] = { + &pci_ss_info_1106_3164_1043_80f4, + &pci_ss_info_1106_3164_1462_7028, +@@ -52443,6 +56065,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1106_3227_1849_3227, + NULL + }; ++#define pci_ss_list_1106_3230 NULL + #define pci_ss_list_1106_3238 NULL + #define pci_ss_list_1106_3249 NULL + #define pci_ss_list_1106_324a NULL +@@ -52450,6 +56073,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1106_324e NULL + #define pci_ss_list_1106_3258 NULL + #define pci_ss_list_1106_3259 NULL ++#define pci_ss_list_1106_3260 NULL + #define pci_ss_list_1106_3269 NULL + #define pci_ss_list_1106_3282 NULL + #define pci_ss_list_1106_3287 NULL +@@ -52461,10 +56085,13 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1106_3336 NULL + #define pci_ss_list_1106_3337 NULL + #define pci_ss_list_1106_3340 NULL ++#define pci_ss_list_1106_3343 NULL + #define pci_ss_list_1106_3344 NULL + #define pci_ss_list_1106_3349 NULL + #define pci_ss_list_1106_3351 NULL + #define pci_ss_list_1106_3364 NULL ++#define pci_ss_list_1106_3371 NULL ++#define pci_ss_list_1106_3372 NULL + #define pci_ss_list_1106_337a NULL + #define pci_ss_list_1106_337b NULL + #define pci_ss_list_1106_4149 NULL +@@ -52491,13 +56118,16 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1106_5238 NULL + #define pci_ss_list_1106_5290 NULL + #define pci_ss_list_1106_5308 NULL ++#define pci_ss_list_1106_5324 NULL + #define pci_ss_list_1106_5327 NULL + #define pci_ss_list_1106_5336 NULL + #define pci_ss_list_1106_5340 NULL + #define pci_ss_list_1106_5351 NULL + #define pci_ss_list_1106_5364 NULL + #define pci_ss_list_1106_6100 NULL ++#define pci_ss_list_1106_6287 NULL + #define pci_ss_list_1106_6327 NULL ++#define pci_ss_list_1106_6364 NULL + #define pci_ss_list_1106_7204 NULL + static const pciSubsystemInfo *pci_ss_list_1106_7205[] = { + &pci_ss_info_1106_7205_1458_d000, +@@ -52652,10 +56282,6 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1119_000b NULL + #define pci_ss_list_1119_000c NULL + #define pci_ss_list_1119_000d NULL +-#define pci_ss_list_1119_0010 NULL +-#define pci_ss_list_1119_0011 NULL +-#define pci_ss_list_1119_0012 NULL +-#define pci_ss_list_1119_0013 NULL + #define pci_ss_list_1119_0100 NULL + #define pci_ss_list_1119_0101 NULL + #define pci_ss_list_1119_0102 NULL +@@ -52712,6 +56338,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1119_0261 NULL + #define pci_ss_list_1119_02ff NULL + #define pci_ss_list_1119_0300 NULL ++#define pci_ss_list_1119_0301 NULL + #define pci_ss_list_111a_0000 NULL + #define pci_ss_list_111a_0002 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -52757,11 +56384,17 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_112f_0000 NULL + #define pci_ss_list_112f_0001 NULL + #define pci_ss_list_112f_0008 NULL +-#define pci_ss_list_1131_1561 NULL +-#define pci_ss_list_1131_1562 NULL ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciSubsystemInfo *pci_ss_list_1131_1561[] = { ++ &pci_ss_info_1131_1561_1775_c200, ++ NULL ++}; ++static const pciSubsystemInfo *pci_ss_list_1131_1562[] = { ++ &pci_ss_info_1131_1562_1775_c200, ++ NULL ++}; + #define pci_ss_list_1131_3400 NULL + #define pci_ss_list_1131_5400 NULL +-#ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo *pci_ss_list_1131_5402[] = { + &pci_ss_info_1131_5402_1244_0f00, + NULL +@@ -52790,6 +56423,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1131_7133_1043_4843, + &pci_ss_info_1131_7133_1043_4845, + &pci_ss_info_1131_7133_1043_4862, ++ &pci_ss_info_1131_7133_1131_0000, + &pci_ss_info_1131_7133_1131_2001, + &pci_ss_info_1131_7133_1131_2018, + &pci_ss_info_1131_7133_1131_4ee9, +@@ -52801,13 +56435,16 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1131_7133_1435_7330, + &pci_ss_info_1131_7133_1435_7350, + &pci_ss_info_1131_7133_1461_1044, ++ &pci_ss_info_1131_7133_1461_a14b, + &pci_ss_info_1131_7133_1461_f31f, + &pci_ss_info_1131_7133_1462_6231, + &pci_ss_info_1131_7133_1489_0214, + &pci_ss_info_1131_7133_14c0_1212, + &pci_ss_info_1131_7133_153b_1160, + &pci_ss_info_1131_7133_153b_1162, ++ &pci_ss_info_1131_7133_17de_7350, + &pci_ss_info_1131_7133_185b_c100, ++ &pci_ss_info_1131_7133_185b_c900, + &pci_ss_info_1131_7133_5168_0306, + &pci_ss_info_1131_7133_5168_0319, + &pci_ss_info_1131_7133_5168_0502, +@@ -52872,10 +56509,14 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1131_7146_13c2_100c, + &pci_ss_info_1131_7146_13c2_100f, + &pci_ss_info_1131_7146_13c2_1011, ++ &pci_ss_info_1131_7146_13c2_1012, + &pci_ss_info_1131_7146_13c2_1013, + &pci_ss_info_1131_7146_13c2_1016, ++ &pci_ss_info_1131_7146_13c2_1018, ++ &pci_ss_info_1131_7146_13c2_1019, + &pci_ss_info_1131_7146_13c2_1102, + &pci_ss_info_1131_7146_153b_1156, ++ &pci_ss_info_1131_7146_1894_0020, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_1131_9730[] = { +@@ -52974,6 +56615,7 @@ static const pciSubsystemInfo *pci_ss_li + }; + #define pci_ss_list_1133_e02a NULL + #define pci_ss_list_1133_e02c NULL ++#define pci_ss_list_1133_e032 NULL + #endif + #define pci_ss_list_1134_0001 NULL + #define pci_ss_list_1134_0002 NULL +@@ -53098,6 +56740,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_114f_000d NULL + #define pci_ss_list_114f_0011 NULL + #define pci_ss_list_114f_0012 NULL ++#define pci_ss_list_114f_0013 NULL + #define pci_ss_list_114f_0014 NULL + #define pci_ss_list_114f_0015 NULL + #define pci_ss_list_114f_0016 NULL +@@ -53247,6 +56890,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1166_0205 NULL + #define pci_ss_list_1166_0211 NULL + static const pciSubsystemInfo *pci_ss_list_1166_0212[] = { ++ &pci_ss_info_1166_0212_1028_810b, + &pci_ss_info_1166_0212_4c53_1080, + NULL + }; +@@ -53280,6 +56924,8 @@ static const pciSubsystemInfo *pci_ss_li + NULL + }; + #define pci_ss_list_1166_0234 NULL ++#define pci_ss_list_1166_0235 NULL ++#define pci_ss_list_1166_0238 NULL + #define pci_ss_list_1166_0240 NULL + #define pci_ss_list_1166_0241 NULL + #define pci_ss_list_1166_0242 NULL +@@ -53333,11 +56979,14 @@ static const pciSubsystemInfo *pci_ss_li + }; + static const pciSubsystemInfo *pci_ss_list_1180_0476[] = { + &pci_ss_info_1180_0476_1014_0185, ++ &pci_ss_info_1180_0476_1028_014f, + &pci_ss_info_1180_0476_1028_0188, + &pci_ss_info_1180_0476_1043_1967, + &pci_ss_info_1180_0476_1043_1987, + &pci_ss_info_1180_0476_104d_80df, + &pci_ss_info_1180_0476_104d_80e7, ++ &pci_ss_info_1180_0476_104d_814e, ++ &pci_ss_info_1180_0476_10f7_8338, + &pci_ss_info_1180_0476_144d_c00c, + &pci_ss_info_1180_0476_14ef_0220, + &pci_ss_info_1180_0476_17aa_201c, +@@ -53360,6 +57009,7 @@ static const pciSubsystemInfo *pci_ss_li + }; + static const pciSubsystemInfo *pci_ss_list_1180_0552[] = { + &pci_ss_info_1180_0552_1014_0511, ++ &pci_ss_info_1180_0552_1028_014f, + &pci_ss_info_1180_0552_1028_0188, + &pci_ss_info_1180_0552_144d_c00c, + &pci_ss_info_1180_0552_17aa_201e, +@@ -53380,10 +57030,12 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1180_0822_1028_0188, + &pci_ss_info_1180_0822_1028_01a2, + &pci_ss_info_1180_0822_1043_1967, ++ &pci_ss_info_1180_0822_10f7_8338, + &pci_ss_info_1180_0822_144d_c018, + &pci_ss_info_1180_0822_17aa_201d, + NULL + }; ++#define pci_ss_list_1180_0832 NULL + #define pci_ss_list_1180_0841 NULL + static const pciSubsystemInfo *pci_ss_list_1180_0852[] = { + &pci_ss_info_1180_0852_1043_1967, +@@ -53479,6 +57131,8 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_119e_0003 NULL + #define pci_ss_list_11a9_4240 NULL + #define pci_ss_list_11ab_0146 NULL ++#define pci_ss_list_11ab_0f53 NULL ++#define pci_ss_list_11ab_11ab NULL + #define pci_ss_list_11ab_138f NULL + #define pci_ss_list_11ab_1fa6 NULL + #define pci_ss_list_11ab_1fa7 NULL +@@ -53487,6 +57141,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_11ab_1faa_1385_4e00, + NULL + }; ++#define pci_ss_list_11ab_2a01 NULL + static const pciSubsystemInfo *pci_ss_list_11ab_4320[] = { + &pci_ss_info_11ab_4320_1019_0f38, + &pci_ss_info_11ab_4320_1019_8001, +@@ -53515,7 +57170,10 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_11ab_4344 NULL + #define pci_ss_list_11ab_4345 NULL + #define pci_ss_list_11ab_4346 NULL +-#define pci_ss_list_11ab_4347 NULL ++static const pciSubsystemInfo *pci_ss_list_11ab_4347[] = { ++ &pci_ss_info_11ab_4347_4c53_10d0, ++ NULL ++}; + static const pciSubsystemInfo *pci_ss_list_11ab_4350[] = { + &pci_ss_info_11ab_4350_1179_0001, + &pci_ss_info_11ab_4350_11ab_3521, +@@ -53618,6 +57276,7 @@ static const pciSubsystemInfo *pci_ss_li + NULL + }; + #define pci_ss_list_11ab_4363 NULL ++#define pci_ss_list_11ab_4364 NULL + #define pci_ss_list_11ab_4611 NULL + #define pci_ss_list_11ab_4620 NULL + #define pci_ss_list_11ab_4801 NULL +@@ -53628,8 +57287,15 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_11ab_5081 NULL + #define pci_ss_list_11ab_6041 NULL + #define pci_ss_list_11ab_6081 NULL ++#define pci_ss_list_11ab_6101 NULL ++#define pci_ss_list_11ab_6141 NULL ++#define pci_ss_list_11ab_6145 NULL ++#define pci_ss_list_11ab_6450 NULL + #define pci_ss_list_11ab_6460 NULL +-#define pci_ss_list_11ab_6480 NULL ++static const pciSubsystemInfo *pci_ss_list_11ab_6480[] = { ++ &pci_ss_info_11ab_6480_1775_c200, ++ NULL ++}; + #define pci_ss_list_11ab_6485 NULL + #define pci_ss_list_11ab_f003 NULL + #endif +@@ -53657,7 +57323,21 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_11b9_c0ed NULL + #define pci_ss_list_11bc_0001 NULL + #define pci_ss_list_11bd_002e NULL ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciSubsystemInfo *pci_ss_list_11bd_0040[] = { ++ &pci_ss_info_11bd_0040_11bd_0044, ++ NULL ++}; ++static const pciSubsystemInfo *pci_ss_list_11bd_0041[] = { ++ &pci_ss_info_11bd_0041_11bd_0044, ++ NULL ++}; ++static const pciSubsystemInfo *pci_ss_list_11bd_0042[] = { ++ &pci_ss_info_11bd_0042_11bd_0044, ++ NULL ++}; + #define pci_ss_list_11bd_bede NULL ++#endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo *pci_ss_list_11c1_0440[] = { + &pci_ss_info_11c1_0440_1033_8015, +@@ -53779,6 +57459,8 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_11c1_0480 NULL + #define pci_ss_list_11c1_048c NULL + #define pci_ss_list_11c1_048f NULL ++#define pci_ss_list_11c1_1040 NULL ++#define pci_ss_list_11c1_2600 NULL + #define pci_ss_list_11c1_5801 NULL + #define pci_ss_list_11c1_5802 NULL + #define pci_ss_list_11c1_5803 NULL +@@ -53823,11 +57505,20 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_11cb_8000 NULL + #endif + #define pci_ss_list_11d1_01f7 NULL ++#define pci_ss_list_11d4_0078 NULL + #define pci_ss_list_11d4_1535 NULL + #define pci_ss_list_11d4_1805 NULL + #define pci_ss_list_11d4_1889 NULL +-#define pci_ss_list_11d4_1986 NULL ++#define pci_ss_list_11d4_1981 NULL ++#define pci_ss_list_11d4_1983 NULL ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciSubsystemInfo *pci_ss_list_11d4_1986[] = { ++ &pci_ss_info_11d4_1986_11d4_1986, ++ NULL ++}; ++#define pci_ss_list_11d4_198b NULL + #define pci_ss_list_11d4_5340 NULL ++#endif + #define pci_ss_list_11d5_0115 NULL + #define pci_ss_list_11d5_0117 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -53957,6 +57648,7 @@ static const pciSubsystemInfo *pci_ss_li + static const pciSubsystemInfo *pci_ss_list_1217_7223[] = { + &pci_ss_info_1217_7223_103c_088c, + &pci_ss_info_1217_7223_103c_0890, ++ &pci_ss_info_1217_7223_10cf_11c4, + NULL + }; + #define pci_ss_list_1217_7233 NULL +@@ -54161,6 +57853,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_125d_2898_125d_0428, + &pci_ss_info_125d_2898_125d_0429, + &pci_ss_info_125d_2898_147a_c001, ++ &pci_ss_info_125d_2898_148d_1030, + &pci_ss_info_125d_2898_14fe_0428, + &pci_ss_info_125d_2898_14fe_0429, + NULL +@@ -54178,6 +57871,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1260_3873_1668_0414, + &pci_ss_info_1260_3873_16a5_1601, + &pci_ss_info_1260_3873_1737_3874, ++ &pci_ss_info_1260_3873_8086_2510, + &pci_ss_info_1260_3873_8086_2513, + NULL + }; +@@ -54190,6 +57884,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1260_3890_10b8_2835, + &pci_ss_info_1260_3890_10b8_a835, + &pci_ss_info_1260_3890_1113_4203, ++ &pci_ss_info_1260_3890_1113_8201, + &pci_ss_info_1260_3890_1113_ee03, + &pci_ss_info_1260_3890_1113_ee08, + &pci_ss_info_1260_3890_1186_3202, +@@ -54467,6 +58162,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1282_9102 NULL + #define pci_ss_list_1282_9132 NULL + #define pci_ss_list_1283_673a NULL ++#define pci_ss_list_1283_8152 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo *pci_ss_list_1283_8211[] = { + &pci_ss_info_1283_8211_1043_8138, +@@ -54491,10 +58187,15 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_128e_000a NULL + #define pci_ss_list_128e_000b NULL + #define pci_ss_list_128e_000c NULL ++#define pci_ss_list_1292_fc02 NULL + #define pci_ss_list_129a_0615 NULL + #define pci_ss_list_12a3_8105 NULL ++#define pci_ss_list_12ab_0000 NULL + #define pci_ss_list_12ab_0002 NULL ++#define pci_ss_list_12ab_2300 NULL + #define pci_ss_list_12ab_3000 NULL ++#define pci_ss_list_12ab_fff3 NULL ++#define pci_ss_list_12ab_ffff NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo *pci_ss_list_12ae_0001[] = { + &pci_ss_info_12ae_0001_1014_0104, +@@ -54610,6 +58311,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_12d4_0200 NULL + #define pci_ss_list_12d5_0003 NULL + #define pci_ss_list_12d5_1000 NULL ++#define pci_ss_list_12d8_01a7 NULL + #define pci_ss_list_12d8_8150 NULL + #define pci_ss_list_12d9_0002 NULL + #define pci_ss_list_12d9_0004 NULL +@@ -54897,6 +58599,8 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1374_0038 NULL + #define pci_ss_list_1374_0039 NULL + #define pci_ss_list_1374_003a NULL ++#define pci_ss_list_1374_003b NULL ++#define pci_ss_list_1374_003c NULL + #define pci_ss_list_137a_0001 NULL + #define pci_ss_list_1382_0001 NULL + #define pci_ss_list_1382_2008 NULL +@@ -54910,6 +58614,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1382_4248 NULL + #define pci_ss_list_1382_4424 NULL + #define pci_ss_list_1385_0013 NULL ++#define pci_ss_list_1385_006b NULL + #define pci_ss_list_1385_311a NULL + #define pci_ss_list_1385_4100 NULL + #define pci_ss_list_1385_4105 NULL +@@ -54941,6 +58646,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1393_1040 NULL + #define pci_ss_list_1393_1141 NULL + #define pci_ss_list_1393_1680 NULL ++#define pci_ss_list_1393_1681 NULL + #define pci_ss_list_1393_2040 NULL + #define pci_ss_list_1393_2180 NULL + #define pci_ss_list_1393_3200 NULL +@@ -54954,6 +58660,7 @@ static const pciSubsystemInfo *pci_ss_li + static const pciSubsystemInfo *pci_ss_list_1397_08b4[] = { + &pci_ss_info_1397_08b4_1397_b520, + &pci_ss_info_1397_08b4_1397_b540, ++ &pci_ss_info_1397_08b4_1397_b556, + NULL + }; + #define pci_ss_list_1397_16b8 NULL +@@ -54964,6 +58671,9 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1397_2bd0_e4bf_1000, + NULL + }; ++#define pci_ss_list_1397_30b1 NULL ++#define pci_ss_list_1397_b700 NULL ++#define pci_ss_list_1397_f001 NULL + #endif + #define pci_ss_list_139a_0001 NULL + #define pci_ss_list_139a_0003 NULL +@@ -54979,6 +58689,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_13a3_001d NULL + #define pci_ss_list_13a3_0020 NULL + #define pci_ss_list_13a3_0026 NULL ++#define pci_ss_list_13a3_002e NULL + #define pci_ss_list_13a8_0152 NULL + #define pci_ss_list_13a8_0154 NULL + #define pci_ss_list_13a8_0158 NULL +@@ -54994,6 +58705,7 @@ static const pciSubsystemInfo *pci_ss_li + }; + #define pci_ss_list_13c1_1002 NULL + #define pci_ss_list_13c1_1003 NULL ++#define pci_ss_list_13c1_1004 NULL + #endif + #define pci_ss_list_13c2_000e NULL + #define pci_ss_list_13c6_0520 NULL +@@ -55005,6 +58717,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_13d1_ab03 NULL + #define pci_ss_list_13d1_ab06 NULL + #define pci_ss_list_13d1_ab08 NULL ++#define pci_ss_list_13d3_3219 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo *pci_ss_list_13df_0001[] = { + &pci_ss_info_13df_0001_13df_0001, +@@ -55036,6 +58749,7 @@ static const pciSubsystemInfo *pci_ss_li + NULL + }; + #define pci_ss_list_13f6_0211 NULL ++#define pci_ss_list_13f6_9880 NULL + #endif + #define pci_ss_list_13fe_1240 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -55149,6 +58863,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1420_8002 NULL + #define pci_ss_list_1420_8003 NULL + #define pci_ss_list_1425_000b NULL ++#define pci_ss_list_1425_000c NULL + #define pci_ss_list_142e_4020 NULL + #define pci_ss_list_142e_4337 NULL + #define pci_ss_list_1432_9130 NULL +@@ -55172,14 +58887,20 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_144a_9114 NULL + #define pci_ss_list_144d_c00c NULL + #define pci_ss_list_1458_0c11 NULL ++#define pci_ss_list_1458_9001 NULL + #define pci_ss_list_1458_e911 NULL + #define pci_ss_list_145f_0001 NULL ++#define pci_ss_list_1461_a3ce NULL ++#define pci_ss_list_1461_a3cf NULL ++#define pci_ss_list_1461_a836 NULL + #define pci_ss_list_1461_f436 NULL + #define pci_ss_list_1462_5501 NULL + #define pci_ss_list_1462_6819 NULL + #define pci_ss_list_1462_6825 NULL + #define pci_ss_list_1462_6834 NULL + #define pci_ss_list_1462_7125 NULL ++#define pci_ss_list_1462_7235 NULL ++#define pci_ss_list_1462_7242 NULL + #define pci_ss_list_1462_8725 NULL + #define pci_ss_list_1462_9000 NULL + #define pci_ss_list_1462_9110 NULL +@@ -55188,6 +58909,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1462_9510 NULL + #define pci_ss_list_1462_9511 NULL + #define pci_ss_list_1462_9591 NULL ++#define pci_ss_list_1462_b834 NULL + #define pci_ss_list_146c_1430 NULL + #define pci_ss_list_148d_1003 NULL + #define pci_ss_list_1497_1497 NULL +@@ -55267,10 +58989,13 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_14e4_0816 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo *pci_ss_list_14e4_1600[] = { ++ &pci_ss_info_14e4_1600_103c_3015, + &pci_ss_info_14e4_1600_107b_5048, + NULL + }; + #define pci_ss_list_14e4_1601 NULL ++#define pci_ss_list_14e4_1639 NULL ++#define pci_ss_list_14e4_163a NULL + static const pciSubsystemInfo *pci_ss_list_14e4_1644[] = { + &pci_ss_info_14e4_1644_1014_0277, + &pci_ss_info_14e4_1644_1028_00d1, +@@ -55378,6 +59103,11 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_14e4_1659_1734_1061, + NULL + }; ++static const pciSubsystemInfo *pci_ss_list_14e4_165a[] = { ++ &pci_ss_info_14e4_165a_103c_7051, ++ &pci_ss_info_14e4_165a_103c_7052, ++ NULL ++}; + static const pciSubsystemInfo *pci_ss_list_14e4_165d[] = { + &pci_ss_info_14e4_165d_1028_865d, + NULL +@@ -55386,6 +59116,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_14e4_165e_103c_088c, + &pci_ss_info_14e4_165e_103c_0890, + &pci_ss_info_14e4_165e_103c_099c, ++ &pci_ss_info_14e4_165e_10cf_1279, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_14e4_1668[] = { +@@ -55398,6 +59129,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_14e4_166e NULL + #define pci_ss_list_14e4_1672 NULL + #define pci_ss_list_14e4_1673 NULL ++#define pci_ss_list_14e4_1674 NULL + static const pciSubsystemInfo *pci_ss_list_14e4_1677[] = { + &pci_ss_info_14e4_1677_1028_0179, + &pci_ss_info_14e4_1677_1028_0182, +@@ -55421,6 +59153,7 @@ static const pciSubsystemInfo *pci_ss_li + NULL + }; + #define pci_ss_list_14e4_167e NULL ++#define pci_ss_list_14e4_167f NULL + #define pci_ss_list_14e4_1693 NULL + static const pciSubsystemInfo *pci_ss_list_14e4_1696[] = { + &pci_ss_info_14e4_1696_103c_12bc, +@@ -55431,6 +59164,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_14e4_169b NULL + static const pciSubsystemInfo *pci_ss_list_14e4_169c[] = { + &pci_ss_info_14e4_169c_103c_308b, ++ &pci_ss_info_14e4_169c_103c_30a1, + NULL + }; + #define pci_ss_list_14e4_169d NULL +@@ -55462,6 +59196,7 @@ static const pciSubsystemInfo *pci_ss_li + }; + static const pciSubsystemInfo *pci_ss_list_14e4_16ac[] = { + &pci_ss_info_14e4_16ac_103c_1706, ++ &pci_ss_info_14e4_16ac_103c_7038, + &pci_ss_info_14e4_16ac_103c_703b, + &pci_ss_info_14e4_16ac_103c_703d, + NULL +@@ -55488,6 +59223,7 @@ static const pciSubsystemInfo *pci_ss_li + static const pciSubsystemInfo *pci_ss_list_14e4_170c[] = { + &pci_ss_info_14e4_170c_1028_0188, + &pci_ss_info_14e4_170c_1028_0196, ++ &pci_ss_info_14e4_170c_1028_01af, + &pci_ss_info_14e4_170c_103c_099c, + NULL + }; +@@ -55496,11 +59232,14 @@ static const pciSubsystemInfo *pci_ss_li + NULL + }; + #define pci_ss_list_14e4_170e NULL ++#define pci_ss_list_14e4_1712 NULL ++#define pci_ss_list_14e4_1713 NULL + #define pci_ss_list_14e4_3352 NULL + #define pci_ss_list_14e4_3360 NULL + #define pci_ss_list_14e4_4210 NULL + #define pci_ss_list_14e4_4211 NULL + #define pci_ss_list_14e4_4212 NULL ++#define pci_ss_list_14e4_4220 NULL + static const pciSubsystemInfo *pci_ss_list_14e4_4301[] = { + &pci_ss_info_14e4_4301_1028_0407, + &pci_ss_info_14e4_4301_1043_0120, +@@ -55522,6 +59261,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_14e4_4318_14e4_0449, + &pci_ss_info_14e4_4318_14e4_4318, + &pci_ss_info_14e4_4318_16ec_0119, ++ &pci_ss_info_14e4_4318_1737_0042, + &pci_ss_info_14e4_4318_1737_0048, + NULL + }; +@@ -55536,6 +59276,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_14e4_4320_106b_004e, + &pci_ss_info_14e4_4320_1154_0330, + &pci_ss_info_14e4_4320_144f_7050, ++ &pci_ss_info_14e4_4320_144f_7051, + &pci_ss_info_14e4_4320_14e4_4320, + &pci_ss_info_14e4_4320_1737_4320, + &pci_ss_info_14e4_4320_1799_7001, +@@ -55558,6 +59299,7 @@ static const pciSubsystemInfo *pci_ss_li + }; + #define pci_ss_list_14e4_4326 NULL + #define pci_ss_list_14e4_4329 NULL ++#define pci_ss_list_14e4_4344 NULL + static const pciSubsystemInfo *pci_ss_list_14e4_4401[] = { + &pci_ss_info_14e4_4401_103c_08b0, + &pci_ss_info_14e4_4401_1043_80a8, +@@ -55603,6 +59345,8 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_14e4_5690 NULL + #define pci_ss_list_14e4_5691 NULL + #define pci_ss_list_14e4_5692 NULL ++#define pci_ss_list_14e4_5695 NULL ++#define pci_ss_list_14e4_5698 NULL + #define pci_ss_list_14e4_5820 NULL + #define pci_ss_list_14e4_5821 NULL + #define pci_ss_list_14e4_5822 NULL +@@ -55677,6 +59421,7 @@ static const pciSubsystemInfo *pci_ss_li + NULL + }; + #define pci_ss_list_14f1_1085 NULL ++#define pci_ss_list_14f1_10b6 NULL + #define pci_ss_list_14f1_1433 NULL + #define pci_ss_list_14f1_1434 NULL + #define pci_ss_list_14f1_1435 NULL +@@ -55773,7 +59518,10 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_14f1_2464 NULL + #define pci_ss_list_14f1_2465 NULL + #define pci_ss_list_14f1_2466 NULL +-#define pci_ss_list_14f1_2bfa NULL ++static const pciSubsystemInfo *pci_ss_list_14f1_2bfa[] = { ++ &pci_ss_info_14f1_2bfa_1025_0009, ++ NULL ++}; + static const pciSubsystemInfo *pci_ss_list_14f1_2f00[] = { + &pci_ss_info_14f1_2f00_13e0_8d84, + &pci_ss_info_14f1_2f00_13e0_8d85, +@@ -55783,6 +59531,9 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_14f1_2f02 NULL + #define pci_ss_list_14f1_2f11 NULL + #define pci_ss_list_14f1_2f20 NULL ++#define pci_ss_list_14f1_2f30 NULL ++#define pci_ss_list_14f1_5045 NULL ++#define pci_ss_list_14f1_5047 NULL + #define pci_ss_list_14f1_8234 NULL + static const pciSubsystemInfo *pci_ss_list_14f1_8800[] = { + &pci_ss_info_14f1_8800_0070_2801, +@@ -55836,6 +59587,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_14f1_8802_0070_9002, + &pci_ss_info_14f1_8802_1043_4823, + &pci_ss_info_14f1_8802_107d_663c, ++ &pci_ss_info_14f1_8802_107d_665f, + &pci_ss_info_14f1_8802_14f1_0187, + &pci_ss_info_14f1_8802_17de_08a1, + &pci_ss_info_14f1_8802_17de_08a6, +@@ -55917,6 +59669,14 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1522_0100_1522_2500, + &pci_ss_info_1522_0100_1522_2600, + &pci_ss_info_1522_0100_1522_2700, ++ &pci_ss_info_1522_0100_1522_3000, ++ &pci_ss_info_1522_0100_1522_3100, ++ &pci_ss_info_1522_0100_1522_3200, ++ &pci_ss_info_1522_0100_1522_3300, ++ &pci_ss_info_1522_0100_1522_3400, ++ &pci_ss_info_1522_0100_1522_3500, ++ &pci_ss_info_1522_0100_1522_3c00, ++ &pci_ss_info_1522_0100_1522_3d00, + NULL + }; + #endif +@@ -55928,6 +59688,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1524_0520 NULL + #define pci_ss_list_1524_0530 NULL + #define pci_ss_list_1524_0550 NULL ++#define pci_ss_list_1524_0551 NULL + #define pci_ss_list_1524_0610 NULL + #define pci_ss_list_1524_1211 NULL + #define pci_ss_list_1524_1225 NULL +@@ -55975,6 +59736,9 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1571_a206 NULL + #define pci_ss_list_1578_5615 NULL + #define pci_ss_list_157c_8001 NULL ++#define pci_ss_list_1590_0001 NULL ++#define pci_ss_list_1590_0002 NULL ++#define pci_ss_list_1590_a01d NULL + #define pci_ss_list_1592_0781 NULL + #define pci_ss_list_1592_0782 NULL + #define pci_ss_list_1592_0783 NULL +@@ -55987,6 +59751,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_15ad_0405 NULL + #define pci_ss_list_15ad_0710 NULL + #define pci_ss_list_15ad_0720 NULL ++#define pci_ss_list_15b3_0191 NULL + #define pci_ss_list_15b3_5274 NULL + #define pci_ss_list_15b3_5a44 NULL + #define pci_ss_list_15b3_5a45 NULL +@@ -55996,6 +59761,14 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_15b3_6278 NULL + #define pci_ss_list_15b3_6279 NULL + #define pci_ss_list_15b3_6282 NULL ++#define pci_ss_list_15b3_6340 NULL ++#define pci_ss_list_15b3_634a NULL ++#define pci_ss_list_15b3_6354 NULL ++#define pci_ss_list_15b3_6368 NULL ++#define pci_ss_list_15b8_1003 NULL ++#define pci_ss_list_15b8_1005 NULL ++#define pci_ss_list_15b8_100a NULL ++#define pci_ss_list_15b8_3001 NULL + #define pci_ss_list_15bc_1100 NULL + #define pci_ss_list_15bc_2922 NULL + #define pci_ss_list_15bc_2928 NULL +@@ -56003,6 +59776,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_15c5_8010 NULL + #define pci_ss_list_15c7_0349 NULL + #define pci_ss_list_15dc_0001 NULL ++#define pci_ss_list_15e2_0500 NULL + #define pci_ss_list_15e8_0130 NULL + #define pci_ss_list_15e9_1841 NULL + #define pci_ss_list_15ec_3101 NULL +@@ -56016,6 +59790,8 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1619_2610 NULL + #define pci_ss_list_1626_8410 NULL + #define pci_ss_list_1629_1003 NULL ++#define pci_ss_list_1629_1006 NULL ++#define pci_ss_list_1629_1007 NULL + #define pci_ss_list_1629_2002 NULL + #define pci_ss_list_1637_3874 NULL + #define pci_ss_list_1638_1100 NULL +@@ -56070,44 +59846,96 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_168c_0013_168c_2042, + &pci_ss_info_168c_0013_168c_2051, + &pci_ss_info_168c_0013_16ab_7302, ++ &pci_ss_info_168c_0013_17cf_0042, ++ &pci_ss_info_168c_0013_185f_1012, + &pci_ss_info_168c_0013_185f_2012, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_168c_001a[] = { ++ &pci_ss_info_168c_001a_1052_168c, + &pci_ss_info_168c_001a_1113_ee20, + &pci_ss_info_168c_001a_1113_ee24, + &pci_ss_info_168c_001a_1186_3a15, + &pci_ss_info_168c_001a_1186_3a16, + &pci_ss_info_168c_001a_1186_3a23, + &pci_ss_info_168c_001a_1186_3a24, ++ &pci_ss_info_168c_001a_1186_3b08, + &pci_ss_info_168c_001a_168c_001a, + &pci_ss_info_168c_001a_168c_1052, ++ &pci_ss_info_168c_001a_168c_2052, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_168c_001b[] = { + &pci_ss_info_168c_001b_1186_3a19, + &pci_ss_info_168c_001b_1186_3a22, ++ &pci_ss_info_168c_001b_1458_e901, ++ &pci_ss_info_168c_001b_168c_001b, + &pci_ss_info_168c_001b_168c_2062, + &pci_ss_info_168c_001b_168c_2063, ++ &pci_ss_info_168c_001b_185f_1600, ++ &pci_ss_info_168c_001b_a727_6804, + NULL + }; ++#define pci_ss_list_168c_001c NULL + #define pci_ss_list_168c_0020 NULL ++#define pci_ss_list_168c_0023 NULL ++#define pci_ss_list_168c_0024 NULL + static const pciSubsystemInfo *pci_ss_list_168c_1014[] = { + &pci_ss_info_168c_1014_1014_058a, + NULL + }; ++#define pci_ss_list_168c_3b08 NULL + #endif + #define pci_ss_list_169c_0044 NULL ++#define pci_ss_list_169d_3306 NULL + #define pci_ss_list_16ab_1100 NULL + #define pci_ss_list_16ab_1101 NULL + #define pci_ss_list_16ab_1102 NULL + #define pci_ss_list_16ab_8501 NULL ++#define pci_ss_list_16ae_0001 NULL ++#define pci_ss_list_16ae_000a NULL + #define pci_ss_list_16ae_1141 NULL ++#define pci_ss_list_16ae_1841 NULL + #define pci_ss_list_16c6_8695 NULL + #define pci_ss_list_16ca_0001 NULL ++#define pci_ss_list_16d5_0504 NULL ++#define pci_ss_list_16d5_0520 NULL ++#define pci_ss_list_16d5_0521 NULL ++#define pci_ss_list_16d5_1020 NULL ++#define pci_ss_list_16d5_1065 NULL ++#define pci_ss_list_16d5_2004 NULL ++#define pci_ss_list_16d5_2020 NULL ++#define pci_ss_list_16d5_2065 NULL ++#define pci_ss_list_16d5_3020 NULL ++#define pci_ss_list_16d5_3065 NULL ++#define pci_ss_list_16d5_4243 NULL ++#define pci_ss_list_16d5_4248 NULL ++#define pci_ss_list_16d5_424b NULL ++#define pci_ss_list_16d5_4253 NULL ++#define pci_ss_list_16d5_4312 NULL ++#define pci_ss_list_16d5_4313 NULL ++#define pci_ss_list_16d5_4322 NULL ++#define pci_ss_list_16d5_4323 NULL ++#define pci_ss_list_16d5_4350 NULL ++#define pci_ss_list_16d5_4353 NULL ++#define pci_ss_list_16d5_4357 NULL ++#define pci_ss_list_16d5_4457 NULL ++#define pci_ss_list_16d5_464d NULL ++#define pci_ss_list_16d5_4850 NULL ++#define pci_ss_list_16d5_4a42 NULL ++#define pci_ss_list_16d5_4a50 NULL ++#define pci_ss_list_16d5_4a56 NULL ++#define pci_ss_list_16d5_4b47 NULL ++#define pci_ss_list_16d5_4c40 NULL ++#define pci_ss_list_16d5_4c60 NULL ++#define pci_ss_list_16d5_4d4d NULL + #define pci_ss_list_16d5_4d4e NULL ++#define pci_ss_list_16d5_524d NULL ++#define pci_ss_list_16d5_5335 NULL ++#define pci_ss_list_16d5_5456 NULL + #define pci_ss_list_16e3_1e0f NULL + #define pci_ss_list_16e5_6000 NULL ++#define pci_ss_list_16e5_6300 NULL + #define pci_ss_list_16ec_00ff NULL + #define pci_ss_list_16ec_0116 NULL + #define pci_ss_list_16ec_2f00 NULL +@@ -56118,8 +59946,10 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1725_7174 NULL + #define pci_ss_list_172a_13c8 NULL + #define pci_ss_list_1734_1078 NULL ++#define pci_ss_list_1734_1085 NULL + #define pci_ss_list_1737_0013 NULL + #define pci_ss_list_1737_0015 NULL ++#define pci_ss_list_1737_0029 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo *pci_ss_list_1737_1032[] = { + &pci_ss_info_1737_1032_1737_0015, +@@ -56188,11 +60018,17 @@ static const pciSubsystemInfo *pci_ss_li + NULL + }; + #endif ++#define pci_ss_list_17db_0101 NULL + #define pci_ss_list_17e4_0001 NULL + #define pci_ss_list_17e4_0002 NULL + #define pci_ss_list_17e6_0010 NULL + #define pci_ss_list_17e6_0011 NULL + #define pci_ss_list_17e6_0021 NULL ++#define pci_ss_list_17f3_6020 NULL ++#define pci_ss_list_17f3_6030 NULL ++#define pci_ss_list_17f3_6040 NULL ++#define pci_ss_list_17f3_6060 NULL ++#define pci_ss_list_17f3_6061 NULL + #define pci_ss_list_17fe_2120 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo *pci_ss_list_17fe_2220[] = { +@@ -56224,6 +60060,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1814_0201_1371_0020, + &pci_ss_info_1814_0201_1458_e381, + &pci_ss_info_1814_0201_1458_e931, ++ &pci_ss_info_1814_0201_1462_6833, + &pci_ss_info_1814_0201_1462_6835, + &pci_ss_info_1814_0201_1737_0032, + &pci_ss_info_1814_0201_1799_700a, +@@ -56234,16 +60071,21 @@ static const pciSubsystemInfo *pci_ss_li + static const pciSubsystemInfo *pci_ss_list_1814_0301[] = { + &pci_ss_info_1814_0301_1186_3c08, + &pci_ss_info_1814_0301_1186_3c09, ++ &pci_ss_info_1814_0301_13d1_abe3, ++ &pci_ss_info_1814_0301_1458_e934, + &pci_ss_info_1814_0301_1737_0055, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_1814_0302[] = { + &pci_ss_info_1814_0302_1186_3c08, + &pci_ss_info_1814_0302_1186_3c09, ++ &pci_ss_info_1814_0302_1462_b834, + NULL + }; + #define pci_ss_list_1814_0401 NULL ++#define pci_ss_list_1814_e932 NULL + #endif ++#define pci_ss_list_1822_0001 NULL + #define pci_ss_list_1822_4e35 NULL + #define pci_ss_list_182d_3069 NULL + #define pci_ss_list_182d_9790 NULL +@@ -56258,6 +60100,10 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1867_5a46 NULL + #define pci_ss_list_1867_6278 NULL + #define pci_ss_list_1867_6282 NULL ++#define pci_ss_list_186c_0614 NULL ++#define pci_ss_list_1876_a101 NULL ++#define pci_ss_list_1876_a102 NULL ++#define pci_ss_list_1876_a103 NULL + #define pci_ss_list_187e_3403 NULL + #define pci_ss_list_187e_340e NULL + #define pci_ss_list_1888_0301 NULL +@@ -56271,6 +60117,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_18b8_b001 NULL + #define pci_ss_list_18ca_0020 NULL + #define pci_ss_list_18ca_0040 NULL ++#define pci_ss_list_18ca_0047 NULL + #define pci_ss_list_18d2_3069 NULL + #define pci_ss_list_18dd_4c6f NULL + #define pci_ss_list_18e6_0001 NULL +@@ -56323,15 +60170,33 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1957_0087 NULL + #define pci_ss_list_1966_1975 NULL + #define pci_ss_list_1969_1048 NULL ++#define pci_ss_list_1969_2048 NULL + #define pci_ss_list_196a_0101 NULL + #define pci_ss_list_196a_0102 NULL ++#define pci_ss_list_196a_0105 NULL ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciSubsystemInfo *pci_ss_list_1971_1011[] = { ++ &pci_ss_info_1971_1011_1043_0001, ++ NULL ++}; ++#endif + #define pci_ss_list_197b_2360 NULL +-#define pci_ss_list_197b_2361 NULL ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciSubsystemInfo *pci_ss_list_197b_2361[] = { ++ &pci_ss_info_197b_2361_1462_7235, ++ NULL ++}; + #define pci_ss_list_197b_2363 NULL + #define pci_ss_list_197b_2365 NULL + #define pci_ss_list_197b_2366 NULL ++#define pci_ss_list_197b_2368 NULL ++#endif ++#define pci_ss_list_1982_1600 NULL ++#define pci_ss_list_1982_16ff NULL + #define pci_ss_list_1989_0001 NULL + #define pci_ss_list_1989_8001 NULL ++#define pci_ss_list_19a2_0200 NULL ++#define pci_ss_list_19a2_0201 NULL + #define pci_ss_list_19ac_0001 NULL + #define pci_ss_list_19ae_0520 NULL + #define pci_ss_list_19e7_1001 NULL +@@ -56340,7 +60205,12 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_19e7_1004 NULL + #define pci_ss_list_19e7_1005 NULL + #define pci_ss_list_1a03_2000 NULL ++#define pci_ss_list_1a07_0006 NULL ++#define pci_ss_list_1a07_0007 NULL + #define pci_ss_list_1a08_0000 NULL ++#define pci_ss_list_1a1d_1a17 NULL ++#define pci_ss_list_1a73_0001 NULL ++#define pci_ss_list_1a8c_1100 NULL + #define pci_ss_list_1c1c_0001 NULL + #define pci_ss_list_1d44_a400 NULL + #define pci_ss_list_1de1_0391 NULL +@@ -56357,6 +60227,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_3388_0020 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo *pci_ss_list_3388_0021[] = { ++ &pci_ss_info_3388_0021_1775_c200, + &pci_ss_info_3388_0021_1775_ce90, + &pci_ss_info_3388_0021_4c53_1050, + &pci_ss_info_3388_0021_4c53_1080, +@@ -56460,6 +60331,10 @@ static const pciSubsystemInfo *pci_ss_li + }; + #define pci_ss_list_4005_4710 NULL + #define pci_ss_list_4033_1360 NULL ++#define pci_ss_list_4040_0001 NULL ++#define pci_ss_list_4040_0002 NULL ++#define pci_ss_list_4040_0003 NULL ++#define pci_ss_list_4040_0004 NULL + #define pci_ss_list_4144_0044 NULL + #define pci_ss_list_416c_0100 NULL + #define pci_ss_list_416c_0200 NULL +@@ -56519,6 +60394,7 @@ static const pciSubsystemInfo *pci_ss_li + }; + #endif + #define pci_ss_list_4d51_0200 NULL ++#define pci_ss_list_4d56_0000 NULL + #define pci_ss_list_4ddc_0100 NULL + #define pci_ss_list_4ddc_0801 NULL + #define pci_ss_list_4ddc_0802 NULL +@@ -56586,6 +60462,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_5333_8903 NULL + static const pciSubsystemInfo *pci_ss_list_5333_8904[] = { + &pci_ss_info_5333_8904_1014_00db, ++ &pci_ss_info_5333_8904_4843_314a, + &pci_ss_info_5333_8904_5333_8904, + NULL + }; +@@ -56692,6 +60569,10 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_5333_8d02 NULL + #define pci_ss_list_5333_8d03 NULL + #define pci_ss_list_5333_8d04 NULL ++static const pciSubsystemInfo *pci_ss_list_5333_8e48[] = { ++ &pci_ss_info_5333_8e48_5333_0130, ++ NULL ++}; + static const pciSubsystemInfo *pci_ss_list_5333_9102[] = { + &pci_ss_info_5333_9102_1092_5932, + &pci_ss_info_5333_9102_1092_5934, +@@ -56709,6 +60590,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_5544_0001 NULL + #define pci_ss_list_5555_0003 NULL + #define pci_ss_list_5654_3132 NULL ++#define pci_ss_list_5853_0001 NULL + #define pci_ss_list_6374_6773 NULL + #define pci_ss_list_6666_0001 NULL + #define pci_ss_list_6666_0002 NULL +@@ -56770,6 +60652,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_8086_0536 NULL + #define pci_ss_list_8086_0537 NULL + static const pciSubsystemInfo *pci_ss_list_8086_0600[] = { ++ &pci_ss_info_8086_0600_8086_0136, + &pci_ss_info_8086_0600_8086_01af, + &pci_ss_info_8086_0600_8086_01c1, + &pci_ss_info_8086_0600_8086_01f7, +@@ -56810,6 +60693,7 @@ static const pciSubsystemInfo *pci_ss_li + }; + static const pciSubsystemInfo *pci_ss_list_8086_1008[] = { + &pci_ss_info_8086_1008_1014_0269, ++ &pci_ss_info_8086_1008_1028_011b, + &pci_ss_info_8086_1008_1028_011c, + &pci_ss_info_8086_1008_8086_1107, + &pci_ss_info_8086_1008_8086_2107, +@@ -56987,6 +60871,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_8086_103c NULL + static const pciSubsystemInfo *pci_ss_list_8086_103d[] = { + &pci_ss_info_8086_103d_1014_0522, ++ &pci_ss_info_8086_103d_8086_103d, + NULL + }; + #define pci_ss_list_8086_103e NULL +@@ -56998,6 +60883,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_1043_103c_08b0, + &pci_ss_info_8086_1043_8086_2522, + &pci_ss_info_8086_1043_8086_2527, ++ &pci_ss_info_8086_1043_8086_2561, + &pci_ss_info_8086_1043_8086_2581, + NULL + }; +@@ -57006,7 +60892,10 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_1048_8086_a11f, + NULL + }; +-#define pci_ss_list_8086_1049 NULL ++static const pciSubsystemInfo *pci_ss_list_8086_1049[] = { ++ &pci_ss_info_8086_1049_17aa_20b9, ++ NULL ++}; + #define pci_ss_list_8086_104a NULL + #define pci_ss_list_8086_104b NULL + #define pci_ss_list_8086_104c NULL +@@ -57030,6 +60919,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_8086_105b NULL + static const pciSubsystemInfo *pci_ss_list_8086_105e[] = { + &pci_ss_info_8086_105e_103c_7044, ++ &pci_ss_info_8086_105e_1775_1100, + &pci_ss_info_8086_105e_1775_6003, + &pci_ss_info_8086_105e_8086_005e, + &pci_ss_info_8086_105e_8086_105e, +@@ -57163,6 +61053,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_109a_17aa_2001, + &pci_ss_info_8086_109a_17aa_207e, + &pci_ss_info_8086_109a_8086_109a, ++ &pci_ss_info_8086_109a_8086_309c, + NULL + }; + #define pci_ss_list_8086_109b NULL +@@ -57178,6 +61069,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_10a4_8086_11a4, + NULL + }; ++#define pci_ss_list_8086_10a5 NULL + #define pci_ss_list_8086_10b0 NULL + #define pci_ss_list_8086_10b2 NULL + #define pci_ss_list_8086_10b3 NULL +@@ -57188,6 +61080,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_10b5_8086_1199, + NULL + }; ++#define pci_ss_list_8086_10b6 NULL + static const pciSubsystemInfo *pci_ss_list_8086_10b9[] = { + &pci_ss_info_8086_10b9_8086_1083, + &pci_ss_info_8086_10b9_8086_1093, +@@ -57200,8 +61093,16 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_10bc_8086_11bc, + NULL + }; ++#define pci_ss_list_8086_10bd NULL ++#define pci_ss_list_8086_10c0 NULL ++#define pci_ss_list_8086_10c2 NULL ++#define pci_ss_list_8086_10c3 NULL + #define pci_ss_list_8086_10c4 NULL + #define pci_ss_list_8086_10c5 NULL ++#define pci_ss_list_8086_10c6 NULL ++#define pci_ss_list_8086_10c7 NULL ++#define pci_ss_list_8086_10d9 NULL ++#define pci_ss_list_8086_10da NULL + #define pci_ss_list_8086_1107 NULL + static const pciSubsystemInfo *pci_ss_list_8086_1130[] = { + &pci_ss_info_8086_1130_1025_1016, +@@ -57311,6 +61212,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_1229_144d_2501, + &pci_ss_info_8086_1229_144d_2502, + &pci_ss_info_8086_1229_1668_1100, ++ &pci_ss_info_8086_1229_1775_1100, + &pci_ss_info_8086_1229_1775_ce90, + &pci_ss_info_8086_1229_4c53_1080, + &pci_ss_info_8086_1229_4c53_10e0, +@@ -57483,6 +61385,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_8086_2413 NULL + static const pciSubsystemInfo *pci_ss_list_8086_2415[] = { + &pci_ss_info_8086_2415_1028_0095, ++ &pci_ss_info_8086_2415_1028_00b4, + &pci_ss_info_8086_2415_110a_0051, + &pci_ss_info_8086_2415_11d4_0040, + &pci_ss_info_8086_2415_11d4_0048, +@@ -57561,6 +61464,7 @@ static const pciSubsystemInfo *pci_ss_li + NULL + }; + static const pciSubsystemInfo *pci_ss_list_8086_2448[] = { ++ &pci_ss_info_8086_2448_103c_0934, + &pci_ss_info_8086_2448_103c_099c, + &pci_ss_info_8086_2448_144d_c00c, + &pci_ss_info_8086_2448_1734_1055, +@@ -57658,6 +61562,9 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_2485_1014_0222, + &pci_ss_info_8086_2485_1014_0508, + &pci_ss_info_8086_2485_1014_051c, ++ &pci_ss_info_8086_2485_1043_1583, ++ &pci_ss_info_8086_2485_1043_1623, ++ &pci_ss_info_8086_2485_1043_1643, + &pci_ss_info_8086_2485_104d_80e7, + &pci_ss_info_8086_2485_144d_c006, + NULL +@@ -57717,7 +61624,10 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_24c2_1734_1004, + &pci_ss_info_8086_24c2_1734_1055, + &pci_ss_info_8086_24c2_4c53_1090, ++ &pci_ss_info_8086_24c2_8086_24c2, + &pci_ss_info_8086_24c2_8086_4541, ++ &pci_ss_info_8086_24c2_e4bf_0cc9, ++ &pci_ss_info_8086_24c2_e4bf_0cd2, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_8086_24c3[] = { +@@ -57725,16 +61635,20 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_24c3_1014_052d, + &pci_ss_info_8086_24c3_1025_005a, + &pci_ss_info_8086_24c3_1028_0126, ++ &pci_ss_info_8086_24c3_1028_014f, + &pci_ss_info_8086_24c3_103c_088c, + &pci_ss_info_8086_24c3_103c_0890, + &pci_ss_info_8086_24c3_103c_08b0, + &pci_ss_info_8086_24c3_1071_8160, ++ &pci_ss_info_8086_24c3_144d_c005, + &pci_ss_info_8086_24c3_144d_c00c, + &pci_ss_info_8086_24c3_1458_24c2, + &pci_ss_info_8086_24c3_1462_5800, + &pci_ss_info_8086_24c3_1734_1004, + &pci_ss_info_8086_24c3_1734_1055, + &pci_ss_info_8086_24c3_4c53_1090, ++ &pci_ss_info_8086_24c3_e4bf_0cc9, ++ &pci_ss_info_8086_24c3_e4bf_0cd2, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_8086_24c4[] = { +@@ -57753,29 +61667,39 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_24c4_1509_2990, + &pci_ss_info_8086_24c4_1734_1004, + &pci_ss_info_8086_24c4_4c53_1090, ++ &pci_ss_info_8086_24c4_8086_24c2, + &pci_ss_info_8086_24c4_8086_4541, ++ &pci_ss_info_8086_24c4_e4bf_0cc9, ++ &pci_ss_info_8086_24c4_e4bf_0cd2, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_8086_24c5[] = { + &pci_ss_info_8086_24c5_0e11_00b8, + &pci_ss_info_8086_24c5_1014_0267, ++ &pci_ss_info_8086_24c5_1014_0537, + &pci_ss_info_8086_24c5_1014_055f, + &pci_ss_info_8086_24c5_1025_005a, + &pci_ss_info_8086_24c5_1028_0139, ++ &pci_ss_info_8086_24c5_1028_014f, + &pci_ss_info_8086_24c5_1028_0163, + &pci_ss_info_8086_24c5_1028_0196, + &pci_ss_info_8086_24c5_103c_088c, + &pci_ss_info_8086_24c5_103c_0890, + &pci_ss_info_8086_24c5_103c_08b0, + &pci_ss_info_8086_24c5_1071_8160, ++ &pci_ss_info_8086_24c5_144d_c005, + &pci_ss_info_8086_24c5_144d_c00c, + &pci_ss_info_8086_24c5_1458_a002, + &pci_ss_info_8086_24c5_1462_5800, + &pci_ss_info_8086_24c5_1734_1005, + &pci_ss_info_8086_24c5_1734_1055, ++ &pci_ss_info_8086_24c5_8086_24c5, ++ &pci_ss_info_8086_24c5_a002_1458, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_8086_24c6[] = { ++ &pci_ss_info_8086_24c6_1014_0524, ++ &pci_ss_info_8086_24c6_1014_0525, + &pci_ss_info_8086_24c6_1014_0559, + &pci_ss_info_8086_24c6_1025_003c, + &pci_ss_info_8086_24c6_1025_005a, +@@ -57784,6 +61708,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_24c6_103c_0890, + &pci_ss_info_8086_24c6_103c_08b0, + &pci_ss_info_8086_24c6_1071_8160, ++ &pci_ss_info_8086_24c6_144d_2115, + &pci_ss_info_8086_24c6_144d_c00c, + NULL + }; +@@ -57803,12 +61728,16 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_24c7_1509_2990, + &pci_ss_info_8086_24c7_1734_1004, + &pci_ss_info_8086_24c7_4c53_1090, ++ &pci_ss_info_8086_24c7_8086_24c2, + &pci_ss_info_8086_24c7_8086_4541, ++ &pci_ss_info_8086_24c7_e4bf_0cc9, ++ &pci_ss_info_8086_24c7_e4bf_0cd2, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_8086_24ca[] = { + &pci_ss_info_8086_24ca_1014_052d, + &pci_ss_info_8086_24ca_1025_005a, ++ &pci_ss_info_8086_24ca_1028_014f, + &pci_ss_info_8086_24ca_1028_0163, + &pci_ss_info_8086_24ca_1028_0196, + &pci_ss_info_8086_24ca_103c_088c, +@@ -57827,6 +61756,8 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_24cb_1462_5800, + &pci_ss_info_8086_24cb_1734_1004, + &pci_ss_info_8086_24cb_4c53_1090, ++ &pci_ss_info_8086_24cb_e4bf_0cc9, ++ &pci_ss_info_8086_24cb_e4bf_0cd2, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_8086_24cc[] = { +@@ -57854,6 +61785,9 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_24cd_1734_1004, + &pci_ss_info_8086_24cd_1734_1055, + &pci_ss_info_8086_24cd_4c53_1090, ++ &pci_ss_info_8086_24cd_8086_24c2, ++ &pci_ss_info_8086_24cd_e4bf_0cc9, ++ &pci_ss_info_8086_24cd_e4bf_0cd2, + NULL + }; + #define pci_ss_list_8086_24d0 NULL +@@ -57864,6 +61798,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_24d1_1043_80a6, + &pci_ss_info_8086_24d1_1458_24d1, + &pci_ss_info_8086_24d1_1462_7280, ++ &pci_ss_info_8086_24d1_1565_5200, + &pci_ss_info_8086_24d1_15d9_4580, + &pci_ss_info_8086_24d1_8086_3427, + &pci_ss_info_8086_24d1_8086_4246, +@@ -57872,6 +61807,7 @@ static const pciSubsystemInfo *pci_ss_li + NULL + }; + static const pciSubsystemInfo *pci_ss_list_8086_24d2[] = { ++ &pci_ss_info_8086_24d2_1014_02dd, + &pci_ss_info_8086_24d2_1014_02ed, + &pci_ss_info_8086_24d2_1028_0169, + &pci_ss_info_8086_24d2_1028_0183, +@@ -57881,6 +61817,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_24d2_1043_80a6, + &pci_ss_info_8086_24d2_1458_24d2, + &pci_ss_info_8086_24d2_1462_7280, ++ &pci_ss_info_8086_24d2_1565_3101, + &pci_ss_info_8086_24d2_15d9_4580, + &pci_ss_info_8086_24d2_1734_101c, + &pci_ss_info_8086_24d2_8086_3427, +@@ -57890,6 +61827,7 @@ static const pciSubsystemInfo *pci_ss_li + NULL + }; + static const pciSubsystemInfo *pci_ss_list_8086_24d3[] = { ++ &pci_ss_info_8086_24d3_1014_02dd, + &pci_ss_info_8086_24d3_1014_02ed, + &pci_ss_info_8086_24d3_1028_0156, + &pci_ss_info_8086_24d3_1028_0169, +@@ -57897,6 +61835,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_24d3_1043_80a6, + &pci_ss_info_8086_24d3_1458_24d2, + &pci_ss_info_8086_24d3_1462_7280, ++ &pci_ss_info_8086_24d3_1565_3101, + &pci_ss_info_8086_24d3_15d9_4580, + &pci_ss_info_8086_24d3_1734_101c, + &pci_ss_info_8086_24d3_8086_3427, +@@ -57906,6 +61845,7 @@ static const pciSubsystemInfo *pci_ss_li + NULL + }; + static const pciSubsystemInfo *pci_ss_list_8086_24d4[] = { ++ &pci_ss_info_8086_24d4_1014_02dd, + &pci_ss_info_8086_24d4_1014_02ed, + &pci_ss_info_8086_24d4_1028_0169, + &pci_ss_info_8086_24d4_1028_0183, +@@ -57915,6 +61855,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_24d4_1043_80a6, + &pci_ss_info_8086_24d4_1458_24d2, + &pci_ss_info_8086_24d4_1462_7280, ++ &pci_ss_info_8086_24d4_1565_3101, + &pci_ss_info_8086_24d4_15d9_4580, + &pci_ss_info_8086_24d4_1734_101c, + &pci_ss_info_8086_24d4_8086_3427, +@@ -57952,6 +61893,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_24d7_1043_80a6, + &pci_ss_info_8086_24d7_1458_24d2, + &pci_ss_info_8086_24d7_1462_7280, ++ &pci_ss_info_8086_24d7_1565_3101, + &pci_ss_info_8086_24d7_15d9_4580, + &pci_ss_info_8086_24d7_1734_101c, + &pci_ss_info_8086_24d7_8086_3427, +@@ -57961,6 +61903,7 @@ static const pciSubsystemInfo *pci_ss_li + NULL + }; + static const pciSubsystemInfo *pci_ss_list_8086_24db[] = { ++ &pci_ss_info_8086_24db_1014_02dd, + &pci_ss_info_8086_24db_1014_02ed, + &pci_ss_info_8086_24db_1028_0169, + &pci_ss_info_8086_24db_1028_019a, +@@ -57970,6 +61913,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_24db_1458_24d2, + &pci_ss_info_8086_24db_1462_7280, + &pci_ss_info_8086_24db_1462_7580, ++ &pci_ss_info_8086_24db_1565_3101, + &pci_ss_info_8086_24db_15d9_4580, + &pci_ss_info_8086_24db_1734_101c, + &pci_ss_info_8086_24db_8086_24db, +@@ -57981,6 +61925,7 @@ static const pciSubsystemInfo *pci_ss_li + }; + #define pci_ss_list_8086_24dc NULL + static const pciSubsystemInfo *pci_ss_list_8086_24dd[] = { ++ &pci_ss_info_8086_24dd_1014_02dd, + &pci_ss_info_8086_24dd_1014_02ed, + &pci_ss_info_8086_24dd_1028_0169, + &pci_ss_info_8086_24dd_1028_0183, +@@ -58002,6 +61947,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_24de_1043_80a6, + &pci_ss_info_8086_24de_1458_24d2, + &pci_ss_info_8086_24de_1462_7280, ++ &pci_ss_info_8086_24de_1565_3101, + &pci_ss_info_8086_24de_15d9_4580, + &pci_ss_info_8086_24de_1734_101c, + &pci_ss_info_8086_24de_8086_3427, +@@ -58073,6 +62019,7 @@ static const pciSubsystemInfo *pci_ss_li + static const pciSubsystemInfo *pci_ss_list_8086_2562[] = { + &pci_ss_info_8086_2562_0e11_00b9, + &pci_ss_info_8086_2562_1014_0267, ++ &pci_ss_info_8086_2562_1734_1003, + &pci_ss_info_8086_2562_1734_1004, + NULL + }; +@@ -58116,6 +62063,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_2582_1043_2582, + &pci_ss_info_8086_2582_1458_2582, + &pci_ss_info_8086_2582_1734_105b, ++ &pci_ss_info_8086_2582_1849_2582, + NULL + }; + #define pci_ss_list_8086_2584 NULL +@@ -58125,26 +62073,39 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_8086_258a NULL + static const pciSubsystemInfo *pci_ss_list_8086_2590[] = { + &pci_ss_info_8086_2590_1028_0182, ++ &pci_ss_info_8086_2590_103c_0934, + &pci_ss_info_8086_2590_103c_099c, ++ &pci_ss_info_8086_2590_104d_81b7, + &pci_ss_info_8086_2590_a304_81b7, ++ &pci_ss_info_8086_2590_e4bf_0ccd, ++ &pci_ss_info_8086_2590_e4bf_0cd3, ++ &pci_ss_info_8086_2590_e4bf_58b1, ++ NULL ++}; ++static const pciSubsystemInfo *pci_ss_list_8086_2591[] = { ++ &pci_ss_info_8086_2591_103c_0934, + NULL + }; +-#define pci_ss_list_8086_2591 NULL + static const pciSubsystemInfo *pci_ss_list_8086_2592[] = { + &pci_ss_info_8086_2592_103c_099c, + &pci_ss_info_8086_2592_103c_308a, + &pci_ss_info_8086_2592_1043_1881, ++ &pci_ss_info_8086_2592_e4bf_0ccd, ++ &pci_ss_info_8086_2592_e4bf_0cd3, ++ &pci_ss_info_8086_2592_e4bf_58b1, + NULL + }; + #define pci_ss_list_8086_25a1 NULL + static const pciSubsystemInfo *pci_ss_list_8086_25a2[] = { + &pci_ss_info_8086_25a2_1775_10d0, ++ &pci_ss_info_8086_25a2_1775_1100, + &pci_ss_info_8086_25a2_1775_ce90, + &pci_ss_info_8086_25a2_4c53_10b0, + &pci_ss_info_8086_25a2_4c53_10e0, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_8086_25a3[] = { ++ &pci_ss_info_8086_25a3_1775_1100, + &pci_ss_info_8086_25a3_1775_ce90, + &pci_ss_info_8086_25a3_4c53_10b0, + &pci_ss_info_8086_25a3_4c53_10d0, +@@ -58153,6 +62114,7 @@ static const pciSubsystemInfo *pci_ss_li + }; + static const pciSubsystemInfo *pci_ss_list_8086_25a4[] = { + &pci_ss_info_8086_25a4_1775_10d0, ++ &pci_ss_info_8086_25a4_1775_1100, + &pci_ss_info_8086_25a4_1775_ce90, + &pci_ss_info_8086_25a4_4c53_10b0, + &pci_ss_info_8086_25a4_4c53_10d0, +@@ -58160,6 +62122,7 @@ static const pciSubsystemInfo *pci_ss_li + NULL + }; + static const pciSubsystemInfo *pci_ss_list_8086_25a6[] = { ++ &pci_ss_info_8086_25a6_1775_1100, + &pci_ss_info_8086_25a6_1775_ce90, + &pci_ss_info_8086_25a6_4c53_10b0, + NULL +@@ -58167,6 +62130,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_8086_25a7 NULL + static const pciSubsystemInfo *pci_ss_list_8086_25a9[] = { + &pci_ss_info_8086_25a9_1775_10d0, ++ &pci_ss_info_8086_25a9_1775_1100, + &pci_ss_info_8086_25a9_1775_ce90, + &pci_ss_info_8086_25a9_4c53_10b0, + &pci_ss_info_8086_25a9_4c53_10d0, +@@ -58174,6 +62138,7 @@ static const pciSubsystemInfo *pci_ss_li + NULL + }; + static const pciSubsystemInfo *pci_ss_list_8086_25aa[] = { ++ &pci_ss_info_8086_25aa_1775_1100, + &pci_ss_info_8086_25aa_1775_ce90, + &pci_ss_info_8086_25aa_4c53_10b0, + &pci_ss_info_8086_25aa_4c53_10e0, +@@ -58181,6 +62146,7 @@ static const pciSubsystemInfo *pci_ss_li + }; + static const pciSubsystemInfo *pci_ss_list_8086_25ab[] = { + &pci_ss_info_8086_25ab_1775_10d0, ++ &pci_ss_info_8086_25ab_1775_1100, + &pci_ss_info_8086_25ab_1775_ce90, + &pci_ss_info_8086_25ab_4c53_10b0, + &pci_ss_info_8086_25ab_4c53_10d0, +@@ -58189,6 +62155,7 @@ static const pciSubsystemInfo *pci_ss_li + }; + static const pciSubsystemInfo *pci_ss_list_8086_25ac[] = { + &pci_ss_info_8086_25ac_1775_10d0, ++ &pci_ss_info_8086_25ac_1775_1100, + &pci_ss_info_8086_25ac_1775_ce90, + &pci_ss_info_8086_25ac_4c53_10b0, + &pci_ss_info_8086_25ac_4c53_10d0, +@@ -58197,6 +62164,7 @@ static const pciSubsystemInfo *pci_ss_li + }; + static const pciSubsystemInfo *pci_ss_list_8086_25ad[] = { + &pci_ss_info_8086_25ad_1775_10d0, ++ &pci_ss_info_8086_25ad_1775_1100, + &pci_ss_info_8086_25ad_1775_ce90, + &pci_ss_info_8086_25ad_4c53_10b0, + &pci_ss_info_8086_25ad_4c53_10d0, +@@ -58205,6 +62173,7 @@ static const pciSubsystemInfo *pci_ss_li + }; + #define pci_ss_list_8086_25ae NULL + static const pciSubsystemInfo *pci_ss_list_8086_25b0[] = { ++ &pci_ss_info_8086_25b0_1775_1100, + &pci_ss_info_8086_25b0_4c53_10d0, + &pci_ss_info_8086_25b0_4c53_10e0, + NULL +@@ -58265,9 +62234,13 @@ static const pciSubsystemInfo *pci_ss_li + static const pciSubsystemInfo *pci_ss_list_8086_2640[] = { + &pci_ss_info_8086_2640_1462_7028, + &pci_ss_info_8086_2640_1734_105c, ++ &pci_ss_info_8086_2640_e4bf_0ccd, ++ &pci_ss_info_8086_2640_e4bf_0cd3, ++ &pci_ss_info_8086_2640_e4bf_58b1, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_8086_2641[] = { ++ &pci_ss_info_8086_2641_103c_0934, + &pci_ss_info_8086_2641_103c_099c, + NULL + }; +@@ -58277,6 +62250,9 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_2651_1043_2601, + &pci_ss_info_8086_2651_1734_105c, + &pci_ss_info_8086_2651_8086_4147, ++ &pci_ss_info_8086_2651_e4bf_0ccd, ++ &pci_ss_info_8086_2651_e4bf_0cd3, ++ &pci_ss_info_8086_2651_e4bf_58b1, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_8086_2652[] = { +@@ -58286,29 +62262,41 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_8086_2653 NULL + static const pciSubsystemInfo *pci_ss_list_8086_2658[] = { + &pci_ss_info_8086_2658_1028_0179, ++ &pci_ss_info_8086_2658_103c_0934, + &pci_ss_info_8086_2658_103c_099c, + &pci_ss_info_8086_2658_1043_80a6, + &pci_ss_info_8086_2658_1458_2558, + &pci_ss_info_8086_2658_1462_7028, + &pci_ss_info_8086_2658_1734_105c, ++ &pci_ss_info_8086_2658_e4bf_0ccd, ++ &pci_ss_info_8086_2658_e4bf_0cd3, ++ &pci_ss_info_8086_2658_e4bf_58b1, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_8086_2659[] = { + &pci_ss_info_8086_2659_1028_0179, ++ &pci_ss_info_8086_2659_103c_0934, + &pci_ss_info_8086_2659_103c_099c, + &pci_ss_info_8086_2659_1043_80a6, + &pci_ss_info_8086_2659_1458_2659, + &pci_ss_info_8086_2659_1462_7028, + &pci_ss_info_8086_2659_1734_105c, ++ &pci_ss_info_8086_2659_e4bf_0ccd, ++ &pci_ss_info_8086_2659_e4bf_0cd3, ++ &pci_ss_info_8086_2659_e4bf_58b1, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_8086_265a[] = { + &pci_ss_info_8086_265a_1028_0179, ++ &pci_ss_info_8086_265a_103c_0934, + &pci_ss_info_8086_265a_103c_099c, + &pci_ss_info_8086_265a_1043_80a6, + &pci_ss_info_8086_265a_1458_265a, + &pci_ss_info_8086_265a_1462_7028, + &pci_ss_info_8086_265a_1734_105c, ++ &pci_ss_info_8086_265a_e4bf_0ccd, ++ &pci_ss_info_8086_265a_e4bf_0cd3, ++ &pci_ss_info_8086_265a_e4bf_58b1, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_8086_265b[] = { +@@ -58318,25 +62306,52 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_265b_1458_265a, + &pci_ss_info_8086_265b_1462_7028, + &pci_ss_info_8086_265b_1734_105c, ++ &pci_ss_info_8086_265b_e4bf_0ccd, ++ &pci_ss_info_8086_265b_e4bf_0cd3, ++ &pci_ss_info_8086_265b_e4bf_58b1, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_8086_265c[] = { + &pci_ss_info_8086_265c_1028_0179, ++ &pci_ss_info_8086_265c_103c_0934, + &pci_ss_info_8086_265c_103c_099c, + &pci_ss_info_8086_265c_1043_80a6, + &pci_ss_info_8086_265c_1458_5006, + &pci_ss_info_8086_265c_1462_7028, + &pci_ss_info_8086_265c_1734_105c, + &pci_ss_info_8086_265c_8086_265c, ++ &pci_ss_info_8086_265c_e4bf_0ccd, ++ &pci_ss_info_8086_265c_e4bf_0cd3, ++ &pci_ss_info_8086_265c_e4bf_58b1, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_8086_2660[] = { ++ &pci_ss_info_8086_2660_103c_0934, + &pci_ss_info_8086_2660_103c_099c, ++ &pci_ss_info_8086_2660_e4bf_0ccd, ++ &pci_ss_info_8086_2660_e4bf_0cd3, ++ &pci_ss_info_8086_2660_e4bf_58b1, ++ NULL ++}; ++static const pciSubsystemInfo *pci_ss_list_8086_2662[] = { ++ &pci_ss_info_8086_2662_103c_0934, ++ &pci_ss_info_8086_2662_e4bf_0ccd, ++ &pci_ss_info_8086_2662_e4bf_0cd3, ++ &pci_ss_info_8086_2662_e4bf_58b1, ++ NULL ++}; ++static const pciSubsystemInfo *pci_ss_list_8086_2664[] = { ++ &pci_ss_info_8086_2664_e4bf_0ccd, ++ &pci_ss_info_8086_2664_e4bf_0cd3, ++ &pci_ss_info_8086_2664_e4bf_58b1, ++ NULL ++}; ++static const pciSubsystemInfo *pci_ss_list_8086_2666[] = { ++ &pci_ss_info_8086_2666_e4bf_0ccd, ++ &pci_ss_info_8086_2666_e4bf_0cd3, ++ &pci_ss_info_8086_2666_e4bf_58b1, + NULL + }; +-#define pci_ss_list_8086_2662 NULL +-#define pci_ss_list_8086_2664 NULL +-#define pci_ss_list_8086_2666 NULL + static const pciSubsystemInfo *pci_ss_list_8086_2668[] = { + &pci_ss_info_8086_2668_103c_2a09, + &pci_ss_info_8086_2668_1043_814e, +@@ -58348,11 +62363,15 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_266a_1458_266a, + &pci_ss_info_8086_266a_1462_7028, + &pci_ss_info_8086_266a_1734_105c, ++ &pci_ss_info_8086_266a_e4bf_0ccd, ++ &pci_ss_info_8086_266a_e4bf_0cd3, ++ &pci_ss_info_8086_266a_e4bf_58b1, + NULL + }; + #define pci_ss_list_8086_266c NULL + static const pciSubsystemInfo *pci_ss_list_8086_266d[] = { + &pci_ss_info_8086_266d_1025_006a, ++ &pci_ss_info_8086_266d_103c_0934, + &pci_ss_info_8086_266d_103c_099c, + NULL + }; +@@ -58361,6 +62380,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_266e_1028_0179, + &pci_ss_info_8086_266e_1028_0182, + &pci_ss_info_8086_266e_1028_0188, ++ &pci_ss_info_8086_266e_103c_0934, + &pci_ss_info_8086_266e_103c_0944, + &pci_ss_info_8086_266e_103c_099c, + &pci_ss_info_8086_266e_103c_3006, +@@ -58370,11 +62390,15 @@ static const pciSubsystemInfo *pci_ss_li + NULL + }; + static const pciSubsystemInfo *pci_ss_list_8086_266f[] = { ++ &pci_ss_info_8086_266f_103c_0934, + &pci_ss_info_8086_266f_103c_099c, + &pci_ss_info_8086_266f_1043_80a6, + &pci_ss_info_8086_266f_1458_266f, + &pci_ss_info_8086_266f_1462_7028, + &pci_ss_info_8086_266f_1734_105c, ++ &pci_ss_info_8086_266f_e4bf_0ccd, ++ &pci_ss_info_8086_266f_e4bf_0cd3, ++ &pci_ss_info_8086_266f_e4bf_58b1, + NULL + }; + #define pci_ss_list_8086_2670 NULL +@@ -58412,7 +62436,10 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_8086_2778 NULL + #define pci_ss_list_8086_2779 NULL + #define pci_ss_list_8086_277a NULL +-#define pci_ss_list_8086_277c NULL ++static const pciSubsystemInfo *pci_ss_list_8086_277c[] = { ++ &pci_ss_info_8086_277c_1043_8178, ++ NULL ++}; + #define pci_ss_list_8086_277d NULL + static const pciSubsystemInfo *pci_ss_list_8086_2782[] = { + &pci_ss_info_8086_2782_1043_2582, +@@ -58422,9 +62449,13 @@ static const pciSubsystemInfo *pci_ss_li + static const pciSubsystemInfo *pci_ss_list_8086_2792[] = { + &pci_ss_info_8086_2792_103c_099c, + &pci_ss_info_8086_2792_1043_1881, ++ &pci_ss_info_8086_2792_e4bf_0ccd, ++ &pci_ss_info_8086_2792_e4bf_0cd3, ++ &pci_ss_info_8086_2792_e4bf_58b1, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_8086_27a0[] = { ++ &pci_ss_info_8086_27a0_1025_006c, + &pci_ss_info_8086_27a0_103c_30a1, + &pci_ss_info_8086_27a0_17aa_2017, + NULL +@@ -58440,7 +62471,10 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_27a6_17aa_201a, + NULL + }; +-#define pci_ss_list_8086_27b0 NULL ++static const pciSubsystemInfo *pci_ss_list_8086_27b0[] = { ++ &pci_ss_info_8086_27b0_8086_544e, ++ NULL ++}; + static const pciSubsystemInfo *pci_ss_list_8086_27b8[] = { + &pci_ss_info_8086_27b8_107b_5048, + &pci_ss_info_8086_27b8_8086_544e, +@@ -58452,21 +62486,32 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_27b9_17aa_2009, + NULL + }; +-#define pci_ss_list_8086_27bd NULL ++static const pciSubsystemInfo *pci_ss_list_8086_27bd[] = { ++ &pci_ss_info_8086_27bd_1025_006c, ++ NULL ++}; + static const pciSubsystemInfo *pci_ss_list_8086_27c0[] = { + &pci_ss_info_8086_27c0_107b_5048, ++ &pci_ss_info_8086_27c0_1462_7236, + &pci_ss_info_8086_27c0_8086_544e, + NULL + }; + #define pci_ss_list_8086_27c1 NULL +-#define pci_ss_list_8086_27c3 NULL +-#define pci_ss_list_8086_27c4 NULL ++static const pciSubsystemInfo *pci_ss_list_8086_27c3[] = { ++ &pci_ss_info_8086_27c3_8086_544e, ++ NULL ++}; ++static const pciSubsystemInfo *pci_ss_list_8086_27c4[] = { ++ &pci_ss_info_8086_27c4_1025_006c, ++ NULL ++}; + static const pciSubsystemInfo *pci_ss_list_8086_27c5[] = { + &pci_ss_info_8086_27c5_17aa_200d, + NULL + }; + #define pci_ss_list_8086_27c6 NULL + static const pciSubsystemInfo *pci_ss_list_8086_27c8[] = { ++ &pci_ss_info_8086_27c8_1025_006c, + &pci_ss_info_8086_27c8_103c_30a1, + &pci_ss_info_8086_27c8_107b_5048, + &pci_ss_info_8086_27c8_17aa_200a, +@@ -58474,6 +62519,7 @@ static const pciSubsystemInfo *pci_ss_li + NULL + }; + static const pciSubsystemInfo *pci_ss_list_8086_27c9[] = { ++ &pci_ss_info_8086_27c9_1025_006c, + &pci_ss_info_8086_27c9_103c_30a1, + &pci_ss_info_8086_27c9_107b_5048, + &pci_ss_info_8086_27c9_17aa_200a, +@@ -58481,6 +62527,7 @@ static const pciSubsystemInfo *pci_ss_li + NULL + }; + static const pciSubsystemInfo *pci_ss_list_8086_27ca[] = { ++ &pci_ss_info_8086_27ca_1025_006c, + &pci_ss_info_8086_27ca_103c_30a1, + &pci_ss_info_8086_27ca_107b_5048, + &pci_ss_info_8086_27ca_17aa_200a, +@@ -58488,6 +62535,7 @@ static const pciSubsystemInfo *pci_ss_li + NULL + }; + static const pciSubsystemInfo *pci_ss_list_8086_27cb[] = { ++ &pci_ss_info_8086_27cb_1025_006c, + &pci_ss_info_8086_27cb_103c_30a1, + &pci_ss_info_8086_27cb_107b_5048, + &pci_ss_info_8086_27cb_17aa_200a, +@@ -58495,6 +62543,7 @@ static const pciSubsystemInfo *pci_ss_li + NULL + }; + static const pciSubsystemInfo *pci_ss_list_8086_27cc[] = { ++ &pci_ss_info_8086_27cc_1025_006c, + &pci_ss_info_8086_27cc_103c_30a1, + &pci_ss_info_8086_27cc_17aa_200b, + &pci_ss_info_8086_27cc_8086_544e, +@@ -58505,16 +62554,21 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_8086_27d4 NULL + #define pci_ss_list_8086_27d6 NULL + static const pciSubsystemInfo *pci_ss_list_8086_27d8[] = { ++ &pci_ss_info_8086_27d8_1025_006c, + &pci_ss_info_8086_27d8_103c_30a1, ++ &pci_ss_info_8086_27d8_1043_13c4, + &pci_ss_info_8086_27d8_107b_5048, + &pci_ss_info_8086_27d8_10f7_8338, + &pci_ss_info_8086_27d8_1179_ff31, + &pci_ss_info_8086_27d8_152d_0753, + &pci_ss_info_8086_27d8_1734_10ad, + &pci_ss_info_8086_27d8_17aa_2010, ++ &pci_ss_info_8086_27d8_17aa_3802, ++ &pci_ss_info_8086_27d8_8086_1112, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_8086_27da[] = { ++ &pci_ss_info_8086_27da_1025_006c, + &pci_ss_info_8086_27da_10f7_8338, + &pci_ss_info_8086_27da_17aa_200f, + &pci_ss_info_8086_27da_8086_544e, +@@ -58525,7 +62579,10 @@ static const pciSubsystemInfo *pci_ss_li + NULL + }; + #define pci_ss_list_8086_27dd NULL +-#define pci_ss_list_8086_27de NULL ++static const pciSubsystemInfo *pci_ss_list_8086_27de[] = { ++ &pci_ss_info_8086_27de_1462_7267, ++ NULL ++}; + static const pciSubsystemInfo *pci_ss_list_8086_27df[] = { + &pci_ss_info_8086_27df_103c_30a1, + &pci_ss_info_8086_27df_107b_5048, +@@ -58566,14 +62623,21 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_8086_2832 NULL + static const pciSubsystemInfo *pci_ss_list_8086_2834[] = { + &pci_ss_info_8086_2834_1462_7235, ++ &pci_ss_info_8086_2834_17aa_20aa, ++ NULL ++}; ++static const pciSubsystemInfo *pci_ss_list_8086_2835[] = { ++ &pci_ss_info_8086_2835_17aa_20aa, + NULL + }; +-#define pci_ss_list_8086_2835 NULL + static const pciSubsystemInfo *pci_ss_list_8086_2836[] = { + &pci_ss_info_8086_2836_1462_7235, + NULL + }; +-#define pci_ss_list_8086_283a NULL ++static const pciSubsystemInfo *pci_ss_list_8086_283a[] = { ++ &pci_ss_info_8086_283a_17aa_20ab, ++ NULL ++}; + static const pciSubsystemInfo *pci_ss_list_8086_283e[] = { + &pci_ss_info_8086_283e_1462_7235, + NULL +@@ -58584,10 +62648,19 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_8086_2845 NULL + #define pci_ss_list_8086_2847 NULL + #define pci_ss_list_8086_2849 NULL +-#define pci_ss_list_8086_284b NULL ++static const pciSubsystemInfo *pci_ss_list_8086_284b[] = { ++ &pci_ss_info_8086_284b_17aa_20ac, ++ NULL ++}; + #define pci_ss_list_8086_284f NULL + #define pci_ss_list_8086_2850 NULL +-#define pci_ss_list_8086_2910 NULL ++#define pci_ss_list_8086_2911 NULL ++#define pci_ss_list_8086_2912 NULL ++#define pci_ss_list_8086_2914 NULL ++#define pci_ss_list_8086_2916 NULL ++#define pci_ss_list_8086_2917 NULL ++#define pci_ss_list_8086_2918 NULL ++#define pci_ss_list_8086_2919 NULL + #define pci_ss_list_8086_2920 NULL + #define pci_ss_list_8086_2921 NULL + #define pci_ss_list_8086_2922 NULL +@@ -58595,6 +62668,8 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_8086_2925 NULL + #define pci_ss_list_8086_2926 NULL + #define pci_ss_list_8086_2928 NULL ++#define pci_ss_list_8086_2929 NULL ++#define pci_ss_list_8086_292c NULL + #define pci_ss_list_8086_292d NULL + #define pci_ss_list_8086_292e NULL + #define pci_ss_list_8086_2930 NULL +@@ -58634,9 +62709,15 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_8086_2995 NULL + #define pci_ss_list_8086_2996 NULL + #define pci_ss_list_8086_2997 NULL +-#define pci_ss_list_8086_29a0 NULL ++static const pciSubsystemInfo *pci_ss_list_8086_29a0[] = { ++ &pci_ss_info_8086_29a0_1462_7276, ++ NULL ++}; + #define pci_ss_list_8086_29a1 NULL +-#define pci_ss_list_8086_29a2 NULL ++static const pciSubsystemInfo *pci_ss_list_8086_29a2[] = { ++ &pci_ss_info_8086_29a2_1462_7276, ++ NULL ++}; + #define pci_ss_list_8086_29a3 NULL + #define pci_ss_list_8086_29a4 NULL + #define pci_ss_list_8086_29a5 NULL +@@ -58659,6 +62740,14 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_8086_29c6 NULL + #define pci_ss_list_8086_29c7 NULL + #define pci_ss_list_8086_29cf NULL ++#define pci_ss_list_8086_29d0 NULL ++#define pci_ss_list_8086_29d1 NULL ++#define pci_ss_list_8086_29d2 NULL ++#define pci_ss_list_8086_29d3 NULL ++#define pci_ss_list_8086_29d4 NULL ++#define pci_ss_list_8086_29d5 NULL ++#define pci_ss_list_8086_29d6 NULL ++#define pci_ss_list_8086_29d7 NULL + #define pci_ss_list_8086_29e0 NULL + #define pci_ss_list_8086_29e1 NULL + #define pci_ss_list_8086_29e4 NULL +@@ -58673,7 +62762,10 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_8086_29f6 NULL + #define pci_ss_list_8086_29f7 NULL + #define pci_ss_list_8086_29f9 NULL +-#define pci_ss_list_8086_2a00 NULL ++static const pciSubsystemInfo *pci_ss_list_8086_2a00[] = { ++ &pci_ss_info_8086_2a00_17aa_20b1, ++ NULL ++}; + #define pci_ss_list_8086_2a01 NULL + #define pci_ss_list_8086_2a02 NULL + #define pci_ss_list_8086_2a03 NULL +@@ -58681,12 +62773,16 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_8086_2a05 NULL + #define pci_ss_list_8086_2a06 NULL + #define pci_ss_list_8086_2a07 NULL +-#define pci_ss_list_8086_3092 NULL + static const pciSubsystemInfo *pci_ss_list_8086_3200[] = { + &pci_ss_info_8086_3200_1775_c200, + NULL + }; ++#define pci_ss_list_8086_3313 NULL ++#define pci_ss_list_8086_331b NULL ++#define pci_ss_list_8086_3331 NULL ++#define pci_ss_list_8086_3339 NULL + static const pciSubsystemInfo *pci_ss_list_8086_3340[] = { ++ &pci_ss_info_8086_3340_1014_0529, + &pci_ss_info_8086_3340_1025_005a, + &pci_ss_info_8086_3340_103c_088c, + &pci_ss_info_8086_3340_103c_0890, +@@ -58698,6 +62794,9 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_3341_144d_c00c, + NULL + }; ++#define pci_ss_list_8086_3363 NULL ++#define pci_ss_list_8086_33c3 NULL ++#define pci_ss_list_8086_33cb NULL + #define pci_ss_list_8086_3500 NULL + #define pci_ss_list_8086_3501 NULL + #define pci_ss_list_8086_3504 NULL +@@ -58725,6 +62824,7 @@ static const pciSubsystemInfo *pci_ss_li + static const pciSubsystemInfo *pci_ss_list_8086_3580[] = { + &pci_ss_info_8086_3580_1014_055c, + &pci_ss_info_8086_3580_1028_0139, ++ &pci_ss_info_8086_3580_1028_014f, + &pci_ss_info_8086_3580_1028_0163, + &pci_ss_info_8086_3580_1028_0196, + &pci_ss_info_8086_3580_1734_1055, +@@ -58732,6 +62832,8 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_3580_1775_ce90, + &pci_ss_info_8086_3580_4c53_10b0, + &pci_ss_info_8086_3580_4c53_10e0, ++ &pci_ss_info_8086_3580_e4bf_0cc9, ++ &pci_ss_info_8086_3580_e4bf_0cd2, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_8086_3581[] = { +@@ -58741,16 +62843,20 @@ static const pciSubsystemInfo *pci_ss_li + static const pciSubsystemInfo *pci_ss_list_8086_3582[] = { + &pci_ss_info_8086_3582_1014_0562, + &pci_ss_info_8086_3582_1028_0139, ++ &pci_ss_info_8086_3582_1028_014f, + &pci_ss_info_8086_3582_1028_0163, + &pci_ss_info_8086_3582_1775_10d0, + &pci_ss_info_8086_3582_1775_ce90, + &pci_ss_info_8086_3582_4c53_10b0, + &pci_ss_info_8086_3582_4c53_10e0, ++ &pci_ss_info_8086_3582_e4bf_0cc9, ++ &pci_ss_info_8086_3582_e4bf_0cd2, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_8086_3584[] = { + &pci_ss_info_8086_3584_1014_055d, + &pci_ss_info_8086_3584_1028_0139, ++ &pci_ss_info_8086_3584_1028_014f, + &pci_ss_info_8086_3584_1028_0163, + &pci_ss_info_8086_3584_1028_0196, + &pci_ss_info_8086_3584_1734_1055, +@@ -58763,6 +62869,7 @@ static const pciSubsystemInfo *pci_ss_li + static const pciSubsystemInfo *pci_ss_list_8086_3585[] = { + &pci_ss_info_8086_3585_1014_055e, + &pci_ss_info_8086_3585_1028_0139, ++ &pci_ss_info_8086_3585_1028_014f, + &pci_ss_info_8086_3585_1028_0163, + &pci_ss_info_8086_3585_1028_0196, + &pci_ss_info_8086_3585_1734_1055, +@@ -58773,12 +62880,15 @@ static const pciSubsystemInfo *pci_ss_li + NULL + }; + static const pciSubsystemInfo *pci_ss_list_8086_3590[] = { ++ &pci_ss_info_8086_3590_1014_02dd, + &pci_ss_info_8086_3590_1028_019a, + &pci_ss_info_8086_3590_1734_103e, ++ &pci_ss_info_8086_3590_1775_1100, + &pci_ss_info_8086_3590_4c53_10d0, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_8086_3591[] = { ++ &pci_ss_info_8086_3591_1014_02dd, + &pci_ss_info_8086_3591_1028_0169, + &pci_ss_info_8086_3591_4c53_10d0, + NULL +@@ -58786,16 +62896,32 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_8086_3592 NULL + #define pci_ss_list_8086_3593 NULL + static const pciSubsystemInfo *pci_ss_list_8086_3594[] = { ++ &pci_ss_info_8086_3594_1775_1100, + &pci_ss_info_8086_3594_4c53_10d0, + NULL + }; +-#define pci_ss_list_8086_3595 NULL ++static const pciSubsystemInfo *pci_ss_list_8086_3595[] = { ++ &pci_ss_info_8086_3595_1775_1100, ++ NULL ++}; + #define pci_ss_list_8086_3596 NULL +-#define pci_ss_list_8086_3597 NULL +-#define pci_ss_list_8086_3598 NULL +-#define pci_ss_list_8086_3599 NULL ++static const pciSubsystemInfo *pci_ss_list_8086_3597[] = { ++ &pci_ss_info_8086_3597_1775_1100, ++ NULL ++}; ++static const pciSubsystemInfo *pci_ss_list_8086_3598[] = { ++ &pci_ss_info_8086_3598_1775_1100, ++ NULL ++}; ++static const pciSubsystemInfo *pci_ss_list_8086_3599[] = { ++ &pci_ss_info_8086_3599_1775_1100, ++ NULL ++}; + #define pci_ss_list_8086_359a NULL +-#define pci_ss_list_8086_359b NULL ++static const pciSubsystemInfo *pci_ss_list_8086_359b[] = { ++ &pci_ss_info_8086_359b_1014_02dd, ++ NULL ++}; + static const pciSubsystemInfo *pci_ss_list_8086_359e[] = { + &pci_ss_info_8086_359e_1028_0169, + NULL +@@ -58821,6 +62947,8 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_8086_360f NULL + #define pci_ss_list_8086_3610 NULL + #define pci_ss_list_8086_4000 NULL ++#define pci_ss_list_8086_4001 NULL ++#define pci_ss_list_8086_4003 NULL + #define pci_ss_list_8086_4008 NULL + #define pci_ss_list_8086_4010 NULL + #define pci_ss_list_8086_4021 NULL +@@ -58840,7 +62968,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_8086_4035 NULL + #define pci_ss_list_8086_4036 NULL + static const pciSubsystemInfo *pci_ss_list_8086_4220[] = { +- &pci_ss_info_8086_4220_2731_8086, ++ &pci_ss_info_8086_4220_103c_12f6, + &pci_ss_info_8086_4220_8086_2731, + NULL + }; +@@ -58860,7 +62988,45 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_4227_8086_1014, + NULL + }; ++#define pci_ss_list_8086_4229 NULL ++static const pciSubsystemInfo *pci_ss_list_8086_4230[] = { ++ &pci_ss_info_8086_4230_8086_1110, ++ NULL ++}; ++#define pci_ss_list_8086_444e NULL + #define pci_ss_list_8086_5001 NULL ++#define pci_ss_list_8086_5020 NULL ++#define pci_ss_list_8086_5021 NULL ++#define pci_ss_list_8086_5023 NULL ++#define pci_ss_list_8086_5024 NULL ++#define pci_ss_list_8086_5025 NULL ++#define pci_ss_list_8086_5028 NULL ++#define pci_ss_list_8086_5029 NULL ++#define pci_ss_list_8086_502a NULL ++#define pci_ss_list_8086_502b NULL ++#define pci_ss_list_8086_5031 NULL ++#define pci_ss_list_8086_5032 NULL ++#define pci_ss_list_8086_5033 NULL ++#define pci_ss_list_8086_5035 NULL ++#define pci_ss_list_8086_5037 NULL ++#define pci_ss_list_8086_5039 NULL ++#define pci_ss_list_8086_503a NULL ++#define pci_ss_list_8086_503b NULL ++#define pci_ss_list_8086_503c NULL ++#define pci_ss_list_8086_503d NULL ++#define pci_ss_list_8086_503e NULL ++#define pci_ss_list_8086_5040 NULL ++#define pci_ss_list_8086_5041 NULL ++#define pci_ss_list_8086_5042 NULL ++#define pci_ss_list_8086_5043 NULL ++#define pci_ss_list_8086_5044 NULL ++#define pci_ss_list_8086_5045 NULL ++#define pci_ss_list_8086_5046 NULL ++#define pci_ss_list_8086_5047 NULL ++#define pci_ss_list_8086_5048 NULL ++#define pci_ss_list_8086_5049 NULL ++#define pci_ss_list_8086_504a NULL ++#define pci_ss_list_8086_504b NULL + #define pci_ss_list_8086_5200 NULL + static const pciSubsystemInfo *pci_ss_list_8086_5201[] = { + &pci_ss_info_8086_5201_8086_0001, +@@ -58920,8 +63086,14 @@ static const pciSubsystemInfo *pci_ss_li + }; + #define pci_ss_list_8086_7122 NULL + #define pci_ss_list_8086_7123 NULL +-#define pci_ss_list_8086_7124 NULL +-#define pci_ss_list_8086_7125 NULL ++static const pciSubsystemInfo *pci_ss_list_8086_7124[] = { ++ &pci_ss_info_8086_7124_1028_00b4, ++ NULL ++}; ++static const pciSubsystemInfo *pci_ss_list_8086_7125[] = { ++ &pci_ss_info_8086_7125_1028_00b4, ++ NULL ++}; + #define pci_ss_list_8086_7126 NULL + #define pci_ss_list_8086_7128 NULL + #define pci_ss_list_8086_712a NULL +@@ -58987,6 +63159,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_7800_8086_0100, + NULL + }; ++#define pci_ss_list_8086_8002 NULL + #define pci_ss_list_8086_84c4 NULL + #define pci_ss_list_8086_84c5 NULL + #define pci_ss_list_8086_84ca NULL +@@ -59024,6 +63197,11 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_b555_e4bf_1000, + NULL + }; ++#define pci_ss_list_80ee_beef NULL ++#define pci_ss_list_80ee_cafe NULL ++#define pci_ss_list_8384_7618 NULL ++#define pci_ss_list_8384_7670 NULL ++#define pci_ss_list_8384_7672 NULL + #define pci_ss_list_8686_1010 NULL + #define pci_ss_list_8800_2008 NULL + #define pci_ss_list_8c4a_1980 NULL +@@ -59217,6 +63395,8 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_9005_008f_15d9_9005, + NULL + }; ++#define pci_ss_list_9005_0092 NULL ++#define pci_ss_list_9005_0093 NULL + static const pciSubsystemInfo *pci_ss_list_9005_00c0[] = { + &pci_ss_info_9005_00c0_0e11_f620, + &pci_ss_info_9005_00c0_9005_f620, +@@ -59258,6 +63438,13 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_9005_0285_1028_0287, + &pci_ss_info_9005_0285_1028_0291, + &pci_ss_info_9005_0285_103c_3227, ++ &pci_ss_info_9005_0285_108e_0286, ++ &pci_ss_info_9005_0285_108e_0287, ++ &pci_ss_info_9005_0285_108e_7aac, ++ &pci_ss_info_9005_0285_15d9_02b5, ++ &pci_ss_info_9005_0285_15d9_02b6, ++ &pci_ss_info_9005_0285_15d9_02c9, ++ &pci_ss_info_9005_0285_15d9_02ca, + &pci_ss_info_9005_0285_17aa_0286, + &pci_ss_info_9005_0285_17aa_0287, + &pci_ss_info_9005_0285_9005_0285, +@@ -59278,9 +63465,28 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_9005_0285_9005_0298, + &pci_ss_info_9005_0285_9005_0299, + &pci_ss_info_9005_0285_9005_029a, ++ &pci_ss_info_9005_0285_9005_02a4, ++ &pci_ss_info_9005_0285_9005_02a5, + &pci_ss_info_9005_0285_9005_02b5, + &pci_ss_info_9005_0285_9005_02b6, + &pci_ss_info_9005_0285_9005_02b7, ++ &pci_ss_info_9005_0285_9005_02b8, ++ &pci_ss_info_9005_0285_9005_02b9, ++ &pci_ss_info_9005_0285_9005_02ba, ++ &pci_ss_info_9005_0285_9005_02bb, ++ &pci_ss_info_9005_0285_9005_02bc, ++ &pci_ss_info_9005_0285_9005_02bd, ++ &pci_ss_info_9005_0285_9005_02be, ++ &pci_ss_info_9005_0285_9005_02bf, ++ &pci_ss_info_9005_0285_9005_02c0, ++ &pci_ss_info_9005_0285_9005_02c1, ++ &pci_ss_info_9005_0285_9005_02c2, ++ &pci_ss_info_9005_0285_9005_02c3, ++ &pci_ss_info_9005_0285_9005_02c4, ++ &pci_ss_info_9005_0285_9005_02c5, ++ &pci_ss_info_9005_0285_9005_02c6, ++ &pci_ss_info_9005_0285_9005_02c7, ++ &pci_ss_info_9005_0285_9005_02c8, + NULL + }; + static const pciSubsystemInfo *pci_ss_list_9005_0286[] = { +@@ -59343,6 +63549,7 @@ static const pciSubsystemInfo *pci_ss_li + }; + static const pciSubsystemInfo *pci_ss_list_9005_0503[] = { + &pci_ss_info_9005_0503_1014_02bf, ++ &pci_ss_info_9005_0503_1014_02c3, + &pci_ss_info_9005_0503_1014_02d5, + NULL + }; +@@ -59361,9 +63568,16 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_9005_8014 NULL + #define pci_ss_list_9005_8015 NULL + #define pci_ss_list_9005_8016 NULL +-#define pci_ss_list_9005_8017 NULL ++static const pciSubsystemInfo *pci_ss_list_9005_8017[] = { ++ &pci_ss_info_9005_8017_9005_0044, ++ &pci_ss_info_9005_8017_9005_0045, ++ NULL ++}; + #define pci_ss_list_9005_801c NULL +-#define pci_ss_list_9005_801d NULL ++static const pciSubsystemInfo *pci_ss_list_9005_801d[] = { ++ &pci_ss_info_9005_801d_1014_02cc, ++ NULL ++}; + #define pci_ss_list_9005_801e NULL + static const pciSubsystemInfo *pci_ss_list_9005_801f[] = { + &pci_ss_info_9005_801f_1734_1011, +@@ -59380,7 +63594,10 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_9005_8096 NULL + #define pci_ss_list_9005_8097 NULL + #define pci_ss_list_9005_809c NULL +-#define pci_ss_list_9005_809d NULL ++static const pciSubsystemInfo *pci_ss_list_9005_809d[] = { ++ &pci_ss_info_9005_809d_1014_02cc, ++ NULL ++}; + #define pci_ss_list_9005_809e NULL + #define pci_ss_list_9005_809f NULL + #endif +@@ -59419,13 +63636,15 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_cafe_0003 NULL + #define pci_ss_list_cddd_0101 NULL + #define pci_ss_list_cddd_0200 NULL ++#define pci_ss_list_d161_0120 NULL + #define pci_ss_list_d161_0205 NULL + #define pci_ss_list_d161_0210 NULL + #define pci_ss_list_d161_0405 NULL +-#define pci_ss_list_d161_0406 NULL + #define pci_ss_list_d161_0410 NULL +-#define pci_ss_list_d161_0411 NULL ++#define pci_ss_list_d161_0800 NULL + #define pci_ss_list_d161_2400 NULL ++#define pci_ss_list_d161_3400 NULL ++#define pci_ss_list_d161_b410 NULL + #define pci_ss_list_d4d4_0601 NULL + #define pci_ss_list_deaf_9050 NULL + #define pci_ss_list_deaf_9051 NULL +@@ -59563,6 +63782,7 @@ static const pciSubsystemInfo *pci_ss_li + #endif + #define pci_ss_list_0291 NULL + #define pci_ss_list_02ac NULL ++#define pci_ss_list_02e0 NULL + #define pci_ss_list_0315 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo *pci_ss_list_0357[] = { +@@ -59576,6 +63796,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_0482 NULL + #define pci_ss_list_04cf NULL + #define pci_ss_list_050d NULL ++#define pci_ss_list_058f NULL + #define pci_ss_list_05a9 NULL + #define pci_ss_list_05e3 NULL + #define pci_ss_list_066f NULL +@@ -59667,6 +63888,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_0e11_4080, + &pci_ss_info_0e11_4082, + &pci_ss_info_0e11_4083, ++ &pci_ss_info_0e11_4091, + &pci_ss_info_0e11_409a, + &pci_ss_info_0e11_409b, + &pci_ss_info_0e11_409c, +@@ -59765,6 +63987,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1000_1010, + &pci_ss_info_1000_1011, + &pci_ss_info_1000_1012, ++ &pci_ss_info_1000_1016, + &pci_ss_info_1000_1020, + &pci_ss_info_1000_2004, + &pci_ss_info_1000_2005, +@@ -59887,7 +64110,14 @@ static const pciSubsystemInfo *pci_ss_li + NULL + }; + #endif +-#define pci_ss_list_100b NULL ++static const pciSubsystemInfo *pci_ss_list_100b[] = { ++ &pci_ss_info_100b_0500, ++ &pci_ss_info_100b_0501, ++ &pci_ss_info_100b_0502, ++ &pci_ss_info_100b_0503, ++ &pci_ss_info_100b_0505, ++ NULL ++}; + #define pci_ss_list_100c NULL + #define pci_ss_list_100d NULL + #define pci_ss_list_100e NULL +@@ -60018,18 +64248,24 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1014_02c0, + &pci_ss_info_1014_02c1, + &pci_ss_info_1014_02c2, ++ &pci_ss_info_1014_02c3, + &pci_ss_info_1014_02c6, + &pci_ss_info_1014_02c8, ++ &pci_ss_info_1014_02cc, + &pci_ss_info_1014_02d3, + &pci_ss_info_1014_02d4, + &pci_ss_info_1014_02d5, ++ &pci_ss_info_1014_02dd, + &pci_ss_info_1014_02ed, + &pci_ss_info_1014_02f2, + &pci_ss_info_1014_030d, ++ &pci_ss_info_1014_0338, + &pci_ss_info_1014_034d, ++ &pci_ss_info_1014_0360, + &pci_ss_info_1014_0363, + &pci_ss_info_1014_0364, + &pci_ss_info_1014_0365, ++ &pci_ss_info_1014_0379, + &pci_ss_info_1014_0502, + &pci_ss_info_1014_0503, + &pci_ss_info_1014_0506, +@@ -60043,11 +64279,15 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1014_051a, + &pci_ss_info_1014_051c, + &pci_ss_info_1014_0522, ++ &pci_ss_info_1014_0524, ++ &pci_ss_info_1014_0525, + &pci_ss_info_1014_0528, ++ &pci_ss_info_1014_0529, + &pci_ss_info_1014_052c, + &pci_ss_info_1014_052d, + &pci_ss_info_1014_052e, + &pci_ss_info_1014_0535, ++ &pci_ss_info_1014_0537, + &pci_ss_info_1014_053a, + &pci_ss_info_1014_053b, + &pci_ss_info_1014_053c, +@@ -60056,6 +64296,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1014_0540, + &pci_ss_info_1014_0545, + &pci_ss_info_1014_0549, ++ &pci_ss_info_1014_054d, + &pci_ss_info_1014_0556, + &pci_ss_info_1014_0559, + &pci_ss_info_1014_055c, +@@ -60108,7 +64349,14 @@ static const pciSubsystemInfo *pci_ss_li + NULL + }; + #endif +-#define pci_ss_list_101a NULL ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciSubsystemInfo *pci_ss_list_101a[] = { ++ &pci_ss_info_101a_0019, ++ &pci_ss_info_101a_001f, ++ &pci_ss_info_101a_0ece, ++ NULL ++}; ++#endif + #define pci_ss_list_101b NULL + #define pci_ss_list_101c NULL + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -60157,14 +64405,17 @@ static const pciSubsystemInfo *pci_ss_li + }; + #define pci_ss_list_1024 NULL + static const pciSubsystemInfo *pci_ss_list_1025[] = { ++ &pci_ss_info_1025_0009, + &pci_ss_info_1025_000e, + &pci_ss_info_1025_0018, + &pci_ss_info_1025_003c, + &pci_ss_info_1025_004d, + &pci_ss_info_1025_005a, + &pci_ss_info_1025_006a, ++ &pci_ss_info_1025_006c, + &pci_ss_info_1025_0079, + &pci_ss_info_1025_0080, ++ &pci_ss_info_1025_0091, + &pci_ss_info_1025_0310, + &pci_ss_info_1025_0315, + &pci_ss_info_1025_1003, +@@ -60213,6 +64464,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1028_009b, + &pci_ss_info_1028_00aa, + &pci_ss_info_1028_00b1, ++ &pci_ss_info_1028_00b4, + &pci_ss_info_1028_00bb, + &pci_ss_info_1028_00c5, + &pci_ss_info_1028_00c7, +@@ -60238,6 +64490,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1028_0149, + &pci_ss_info_1028_014a, + &pci_ss_info_1028_014e, ++ &pci_ss_info_1028_014f, + &pci_ss_info_1028_0151, + &pci_ss_info_1028_0156, + &pci_ss_info_1028_0163, +@@ -60259,6 +64512,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1028_019d, + &pci_ss_info_1028_01a2, + &pci_ss_info_1028_01ad, ++ &pci_ss_info_1028_01af, + &pci_ss_info_1028_0287, + &pci_ss_info_1028_0291, + &pci_ss_info_1028_0407, +@@ -60277,6 +64531,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1028_1f01, + &pci_ss_info_1028_1f02, + &pci_ss_info_1028_1f03, ++ &pci_ss_info_1028_1f09, + &pci_ss_info_1028_1f0a, + &pci_ss_info_1028_1f0b, + &pci_ss_info_1028_1f0c, +@@ -60285,6 +64540,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1028_4082, + &pci_ss_info_1028_4134, + &pci_ss_info_1028_8082, ++ &pci_ss_info_1028_810b, + &pci_ss_info_1028_865d, + &pci_ss_info_1028_c082, + &pci_ss_info_1028_c134, +@@ -60310,6 +64566,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_102b_0850, + &pci_ss_info_102b_08c7, + &pci_ss_info_102b_0907, ++ &pci_ss_info_102b_0947, + &pci_ss_info_102b_0d41, + &pci_ss_info_102b_0d42, + &pci_ss_info_102b_0d43, +@@ -60486,6 +64743,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_103c_088c, + &pci_ss_info_103c_0890, + &pci_ss_info_103c_08b0, ++ &pci_ss_info_103c_0934, + &pci_ss_info_103c_0944, + &pci_ss_info_103c_099c, + &pci_ss_info_103c_1040, +@@ -60540,6 +64798,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_103c_12d7, + &pci_ss_info_103c_12dd, + &pci_ss_info_103c_12f4, ++ &pci_ss_info_103c_12f6, + &pci_ss_info_103c_12fa, + &pci_ss_info_103c_1300, + &pci_ss_info_103c_1301, +@@ -60552,6 +64811,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_103c_2a09, + &pci_ss_info_103c_2a0d, + &pci_ss_info_103c_3006, ++ &pci_ss_info_103c_3015, + &pci_ss_info_103c_3070, + &pci_ss_info_103c_308a, + &pci_ss_info_103c_308b, +@@ -60562,9 +64822,13 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_103c_3102, + &pci_ss_info_103c_3103, + &pci_ss_info_103c_3109, ++ &pci_ss_info_103c_3223, + &pci_ss_info_103c_3225, + &pci_ss_info_103c_3226, + &pci_ss_info_103c_3227, ++ &pci_ss_info_103c_3234, ++ &pci_ss_info_103c_3235, ++ &pci_ss_info_103c_3237, + &pci_ss_info_103c_60e7, + &pci_ss_info_103c_7031, + &pci_ss_info_103c_7032, +@@ -60575,6 +64839,8 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_103c_703c, + &pci_ss_info_103c_703d, + &pci_ss_info_103c_7044, ++ &pci_ss_info_103c_7051, ++ &pci_ss_info_103c_7052, + &pci_ss_info_103c_def1, + NULL + }; +@@ -60596,6 +64862,7 @@ static const pciSubsystemInfo *pci_ss_li + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo *pci_ss_list_1043[] = { ++ &pci_ss_info_1043_0001, + &pci_ss_info_1043_002a, + &pci_ss_info_1043_010c, + &pci_ss_info_1043_010d, +@@ -60606,12 +64873,21 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1043_0202, + &pci_ss_info_1043_0205, + &pci_ss_info_1043_0210, ++ &pci_ss_info_1043_02fb, + &pci_ss_info_1043_032e, + &pci_ss_info_1043_0c11, + &pci_ss_info_1043_100f, ++ &pci_ss_info_1043_1045, + &pci_ss_info_1043_1106, + &pci_ss_info_1043_120f, + &pci_ss_info_1043_130f, ++ &pci_ss_info_1043_1382, ++ &pci_ss_info_1043_13c4, ++ &pci_ss_info_1043_1453, ++ &pci_ss_info_1043_1583, ++ &pci_ss_info_1043_1622, ++ &pci_ss_info_1043_1623, ++ &pci_ss_info_1043_1643, + &pci_ss_info_1043_1702, + &pci_ss_info_1043_1703, + &pci_ss_info_1043_1707, +@@ -60628,6 +64904,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1043_400b, + &pci_ss_info_1043_4015, + &pci_ss_info_1043_4016, ++ &pci_ss_info_1043_4021, + &pci_ss_info_1043_402f, + &pci_ss_info_1043_4031, + &pci_ss_info_1043_405b, +@@ -60684,10 +64961,12 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1043_80f8, + &pci_ss_info_1043_8109, + &pci_ss_info_1043_810f, ++ &pci_ss_info_1043_8113, + &pci_ss_info_1043_811a, + &pci_ss_info_1043_812a, + &pci_ss_info_1043_8134, + &pci_ss_info_1043_8138, ++ &pci_ss_info_1043_813f, + &pci_ss_info_1043_8141, + &pci_ss_info_1043_8142, + &pci_ss_info_1043_8145, +@@ -60695,8 +64974,14 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1043_814e, + &pci_ss_info_1043_815a, + &pci_ss_info_1043_815b, ++ &pci_ss_info_1043_8178, + &pci_ss_info_1043_817b, ++ &pci_ss_info_1043_819d, + &pci_ss_info_1043_81a6, ++ &pci_ss_info_1043_81b0, ++ &pci_ss_info_1043_81bc, ++ &pci_ss_info_1043_81cd, ++ &pci_ss_info_1043_81ce, + &pci_ss_info_1043_824d, + &pci_ss_info_1043_c002, + &pci_ss_info_1043_c003, +@@ -60842,6 +65127,8 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_104d_810f, + &pci_ss_info_104d_813c, + &pci_ss_info_104d_8140, ++ &pci_ss_info_104d_814e, ++ &pci_ss_info_104d_81b7, + &pci_ss_info_104d_830b, + NULL + }; +@@ -60855,7 +65142,12 @@ static const pciSubsystemInfo *pci_ss_li + }; + #endif + #define pci_ss_list_1051 NULL +-#define pci_ss_list_1052 NULL ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciSubsystemInfo *pci_ss_list_1052[] = { ++ &pci_ss_info_1052_168c, ++ NULL ++}; ++#endif + #define pci_ss_list_1053 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo *pci_ss_list_1054[] = { +@@ -60893,6 +65185,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_105a_1275, + &pci_ss_info_105a_2168, + &pci_ss_info_105a_4600, ++ &pci_ss_info_105a_4610, + &pci_ss_info_105a_4d30, + &pci_ss_info_105a_4d33, + &pci_ss_info_105a_4d39, +@@ -60908,6 +65201,7 @@ static const pciSubsystemInfo *pci_ss_li + static const pciSubsystemInfo *pci_ss_list_105b[] = { + &pci_ss_info_105b_0c19, + &pci_ss_info_105b_0c43, ++ &pci_ss_info_105b_0c81, + NULL + }; + #endif +@@ -61042,6 +65336,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_107d_2840, + &pci_ss_info_107d_2842, + &pci_ss_info_107d_2896, ++ &pci_ss_info_107d_2a68, + &pci_ss_info_107d_5330, + &pci_ss_info_107d_5350, + &pci_ss_info_107d_6606, +@@ -61085,7 +65380,12 @@ static const pciSubsystemInfo *pci_ss_li + }; + #endif + static const pciSubsystemInfo *pci_ss_list_108e[] = { ++ &pci_ss_info_108e_0286, ++ &pci_ss_info_108e_0287, + &pci_ss_info_108e_10cf, ++ &pci_ss_info_108e_5000, ++ &pci_ss_info_108e_7aac, ++ &pci_ss_info_108e_a001, + NULL + }; + #define pci_ss_list_108f NULL +@@ -61350,6 +65650,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_10b7_5a57, + &pci_ss_info_10b7_5b57, + &pci_ss_info_10b7_5c57, ++ &pci_ss_info_10b7_615b, + &pci_ss_info_10b7_615c, + &pci_ss_info_10b7_6556, + &pci_ss_info_10b7_656a, +@@ -61474,6 +65775,8 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_10cf_10b4, + &pci_ss_info_10cf_1115, + &pci_ss_info_10cf_1143, ++ &pci_ss_info_10cf_11c4, ++ &pci_ss_info_10cf_1279, + NULL + }; + #endif +@@ -61502,8 +65805,11 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_10de_00a1, + &pci_ss_info_10de_0179, + &pci_ss_info_10de_01dc, ++ &pci_ss_info_10de_0244, + &pci_ss_info_10de_029b, ++ &pci_ss_info_10de_042b, + &pci_ss_info_10de_0c11, ++ &pci_ss_info_10de_cb84, + NULL + }; + #define pci_ss_list_10df NULL +@@ -61531,6 +65837,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_10ec_8129, + &pci_ss_info_10ec_8138, + &pci_ss_info_10ec_8139, ++ &pci_ss_info_10ec_8168, + NULL + }; + #endif +@@ -61654,8 +65961,10 @@ static const pciSubsystemInfo *pci_ss_li + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo *pci_ss_list_1103[] = { + &pci_ss_info_1103_0001, ++ &pci_ss_info_1103_0003, + &pci_ss_info_1103_0004, + &pci_ss_info_1103_0005, ++ &pci_ss_info_1103_0006, + NULL + }; + #endif +@@ -61738,6 +66047,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1113_2220, + &pci_ss_info_1113_2242, + &pci_ss_info_1113_4203, ++ &pci_ss_info_1113_8201, + &pci_ss_info_1113_9211, + &pci_ss_info_1113_d301, + &pci_ss_info_1113_ec01, +@@ -62088,6 +66398,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1186_3b01, + &pci_ss_info_1186_3b04, + &pci_ss_info_1186_3b05, ++ &pci_ss_info_1186_3b08, + &pci_ss_info_1186_3c08, + &pci_ss_info_1186_3c09, + &pci_ss_info_1186_4c00, +@@ -62197,6 +66508,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_11bd_002b, + &pci_ss_info_11bd_002d, + &pci_ss_info_11bd_002e, ++ &pci_ss_info_11bd_0044, + NULL + }; + #endif +@@ -62243,6 +66555,7 @@ static const pciSubsystemInfo *pci_ss_li + static const pciSubsystemInfo *pci_ss_list_11d4[] = { + &pci_ss_info_11d4_0040, + &pci_ss_info_11d4_0048, ++ &pci_ss_info_11d4_1986, + &pci_ss_info_11d4_5340, + NULL + }; +@@ -63109,6 +67422,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1397_3137, + &pci_ss_info_1397_b520, + &pci_ss_info_1397_b540, ++ &pci_ss_info_1397_b556, + NULL + }; + #endif +@@ -63201,8 +67515,11 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_13c2_100c, + &pci_ss_info_13c2_100f, + &pci_ss_info_13c2_1011, ++ &pci_ss_info_13c2_1012, + &pci_ss_info_13c2_1013, + &pci_ss_info_13c2_1016, ++ &pci_ss_info_13c2_1018, ++ &pci_ss_info_13c2_1019, + &pci_ss_info_13c2_1102, + NULL + }; +@@ -63255,6 +67572,7 @@ static const pciSubsystemInfo *pci_ss_li + static const pciSubsystemInfo *pci_ss_list_13d1[] = { + &pci_ss_info_13d1_ab01, + &pci_ss_info_13d1_aba0, ++ &pci_ss_info_13d1_abe3, + &pci_ss_info_13d1_ac11, + &pci_ss_info_13d1_ac12, + NULL +@@ -63431,7 +67749,12 @@ static const pciSubsystemInfo *pci_ss_li + NULL + }; + #endif +-#define pci_ss_list_1413 NULL ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciSubsystemInfo *pci_ss_list_1413[] = { ++ &pci_ss_info_1413_147b, ++ NULL ++}; ++#endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo *pci_ss_list_1414[] = { + &pci_ss_info_1414_0003, +@@ -63561,6 +67884,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_144d_c000, + &pci_ss_info_144d_c001, + &pci_ss_info_144d_c003, ++ &pci_ss_info_144d_c005, + &pci_ss_info_144d_c006, + &pci_ss_info_144d_c00c, + &pci_ss_info_144d_c018, +@@ -63589,6 +67913,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_144f_3000, + &pci_ss_info_144f_4005, + &pci_ss_info_144f_7050, ++ &pci_ss_info_144f_7051, + NULL + }; + #endif +@@ -63621,6 +67946,8 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1458_266a, + &pci_ss_info_1458_266f, + &pci_ss_info_1458_3124, ++ &pci_ss_info_1458_3150, ++ &pci_ss_info_1458_3427, + &pci_ss_info_1458_4000, + &pci_ss_info_1458_4002, + &pci_ss_info_1458_4018, +@@ -63641,8 +67968,10 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1458_d000, + &pci_ss_info_1458_e000, + &pci_ss_info_1458_e381, ++ &pci_ss_info_1458_e901, + &pci_ss_info_1458_e911, + &pci_ss_info_1458_e931, ++ &pci_ss_info_1458_e934, + NULL + }; + #endif +@@ -63671,6 +68000,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1461_2c00, + &pci_ss_info_1461_8011, + &pci_ss_info_1461_9715, ++ &pci_ss_info_1461_a14b, + &pci_ss_info_1461_a3ce, + &pci_ss_info_1461_a3cf, + &pci_ss_info_1461_a70a, +@@ -63684,6 +68014,7 @@ static const pciSubsystemInfo *pci_ss_li + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo *pci_ss_list_1462[] = { + &pci_ss_info_1462_0080, ++ &pci_ss_info_1462_030c, + &pci_ss_info_1462_0311, + &pci_ss_info_1462_0345, + &pci_ss_info_1462_0400, +@@ -63695,6 +68026,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1462_0900, + &pci_ss_info_1462_1009, + &pci_ss_info_1462_207d, ++ &pci_ss_info_1462_235c, + &pci_ss_info_1462_3091, + &pci_ss_info_1462_309e, + &pci_ss_info_1462_3300, +@@ -63717,6 +68049,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1462_6822, + &pci_ss_info_1462_6828, + &pci_ss_info_1462_6830, ++ &pci_ss_info_1462_6833, + &pci_ss_info_1462_6835, + &pci_ss_info_1462_6880, + &pci_ss_info_1462_6900, +@@ -63732,9 +68065,14 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1462_702d, + &pci_ss_info_1462_702e, + &pci_ss_info_1462_7030, ++ &pci_ss_info_1462_7094, + &pci_ss_info_1462_7100, ++ &pci_ss_info_1462_7181, + &pci_ss_info_1462_7207, + &pci_ss_info_1462_7235, ++ &pci_ss_info_1462_7236, ++ &pci_ss_info_1462_7267, ++ &pci_ss_info_1462_7276, + &pci_ss_info_1462_7280, + &pci_ss_info_1462_728c, + &pci_ss_info_1462_7580, +@@ -63753,7 +68091,10 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1462_932c, + &pci_ss_info_1462_9350, + &pci_ss_info_1462_9360, ++ &pci_ss_info_1462_9380, + &pci_ss_info_1462_971d, ++ &pci_ss_info_1462_b010, ++ &pci_ss_info_1462_b834, + NULL + }; + #endif +@@ -63818,6 +68159,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_147b_1c09, + &pci_ss_info_147b_1c0b, + &pci_ss_info_147b_1c1a, ++ &pci_ss_info_147b_6190, + &pci_ss_info_147b_6191, + &pci_ss_info_147b_8f00, + &pci_ss_info_147b_8f09, +@@ -63875,7 +68217,12 @@ static const pciSubsystemInfo *pci_ss_li + NULL + }; + #endif +-#define pci_ss_list_148d NULL ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciSubsystemInfo *pci_ss_list_148d[] = { ++ &pci_ss_info_148d_1030, ++ NULL ++}; ++#endif + #define pci_ss_list_148e NULL + #define pci_ss_list_148f NULL + #define pci_ss_list_1490 NULL +@@ -63967,6 +68314,8 @@ static const pciSubsystemInfo *pci_ss_li + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo *pci_ss_list_14b4[] = { + &pci_ss_info_14b4_d100, ++ &pci_ss_info_14b4_d114, ++ &pci_ss_info_14b4_d140, + NULL + }; + #endif +@@ -64254,6 +68603,14 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1522_2500, + &pci_ss_info_1522_2600, + &pci_ss_info_1522_2700, ++ &pci_ss_info_1522_3000, ++ &pci_ss_info_1522_3100, ++ &pci_ss_info_1522_3200, ++ &pci_ss_info_1522_3300, ++ &pci_ss_info_1522_3400, ++ &pci_ss_info_1522_3500, ++ &pci_ss_info_1522_3c00, ++ &pci_ss_info_1522_3d00, + NULL + }; + #endif +@@ -64288,6 +68645,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1533 NULL + #define pci_ss_list_1534 NULL + #define pci_ss_list_1535 NULL ++#define pci_ss_list_1536 NULL + #define pci_ss_list_1537 NULL + #define pci_ss_list_1538 NULL + #define pci_ss_list_1539 NULL +@@ -64396,7 +68754,14 @@ static const pciSubsystemInfo *pci_ss_li + }; + #endif + #define pci_ss_list_1564 NULL +-#define pci_ss_list_1565 NULL ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciSubsystemInfo *pci_ss_list_1565[] = { ++ &pci_ss_info_1565_2300, ++ &pci_ss_info_1565_3101, ++ &pci_ss_info_1565_5200, ++ NULL ++}; ++#endif + #define pci_ss_list_1566 NULL + #define pci_ss_list_1567 NULL + #define pci_ss_list_1568 NULL +@@ -64545,6 +68910,10 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_15d8 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo *pci_ss_list_15d9[] = { ++ &pci_ss_info_15d9_02b5, ++ &pci_ss_info_15d9_02b6, ++ &pci_ss_info_15d9_02c9, ++ &pci_ss_info_15d9_02ca, + &pci_ss_info_15d9_3480, + &pci_ss_info_15d9_4580, + &pci_ss_info_15d9_9005, +@@ -64697,6 +69066,7 @@ static const pciSubsystemInfo *pci_ss_li + static const pciSubsystemInfo *pci_ss_list_168c[] = { + &pci_ss_info_168c_0013, + &pci_ss_info_168c_001a, ++ &pci_ss_info_168c_001b, + &pci_ss_info_168c_1025, + &pci_ss_info_168c_1027, + &pci_ss_info_168c_1042, +@@ -64705,6 +69075,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_168c_2041, + &pci_ss_info_168c_2042, + &pci_ss_info_168c_2051, ++ &pci_ss_info_168c_2052, + &pci_ss_info_168c_2062, + &pci_ss_info_168c_2063, + NULL +@@ -64721,6 +69092,7 @@ static const pciSubsystemInfo *pci_ss_li + }; + #endif + #define pci_ss_list_169c NULL ++#define pci_ss_list_169d NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo *pci_ss_list_16a5[] = { + &pci_ss_info_16a5_1601, +@@ -64805,6 +69177,7 @@ static const pciSubsystemInfo *pci_ss_li + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo *pci_ss_list_1734[] = { + &pci_ss_info_1734_007a, ++ &pci_ss_info_1734_1003, + &pci_ss_info_1734_1004, + &pci_ss_info_1734_1005, + &pci_ss_info_1734_100b, +@@ -64813,6 +69186,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1734_1012, + &pci_ss_info_1734_101c, + &pci_ss_info_1734_1025, ++ &pci_ss_info_1734_102b, + &pci_ss_info_1734_103e, + &pci_ss_info_1734_1052, + &pci_ss_info_1734_1055, +@@ -64824,9 +69198,14 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1734_1065, + &pci_ss_info_1734_106c, + &pci_ss_info_1734_1081, ++ &pci_ss_info_1734_1091, ++ &pci_ss_info_1734_1095, ++ &pci_ss_info_1734_1099, ++ &pci_ss_info_1734_109f, + &pci_ss_info_1734_10a3, + &pci_ss_info_1734_10ad, + &pci_ss_info_1734_10b8, ++ &pci_ss_info_1734_10f8, + NULL + }; + #endif +@@ -64837,6 +69216,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_1737_0024, + &pci_ss_info_1737_0032, + &pci_ss_info_1737_0033, ++ &pci_ss_info_1737_0042, + &pci_ss_info_1737_0048, + &pci_ss_info_1737_0055, + &pci_ss_info_1737_3874, +@@ -64890,12 +69270,14 @@ static const pciSubsystemInfo *pci_ss_li + static const pciSubsystemInfo *pci_ss_list_1775[] = { + &pci_ss_info_1775_10d0, + &pci_ss_info_1775_10d1, ++ &pci_ss_info_1775_1100, + &pci_ss_info_1775_6003, + &pci_ss_info_1775_c200, + &pci_ss_info_1775_ce90, + NULL + }; + #endif ++#define pci_ss_list_177d NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo *pci_ss_list_1787[] = { + &pci_ss_info_1787_0202, +@@ -64944,6 +69326,12 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_17aa_201e, + &pci_ss_info_17aa_207e, + &pci_ss_info_17aa_2081, ++ &pci_ss_info_17aa_20aa, ++ &pci_ss_info_17aa_20ab, ++ &pci_ss_info_17aa_20ac, ++ &pci_ss_info_17aa_20b1, ++ &pci_ss_info_17aa_20b9, ++ &pci_ss_info_17aa_3802, + NULL + }; + #endif +@@ -64956,6 +69344,8 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_17af_200d, + &pci_ss_info_17af_2012, + &pci_ss_info_17af_2013, ++ &pci_ss_info_17af_2020, ++ &pci_ss_info_17af_2021, + NULL + }; + #endif +@@ -64970,6 +69360,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_17cf_0014, + &pci_ss_info_17cf_0020, + &pci_ss_info_17cf_0037, ++ &pci_ss_info_17cf_0042, + NULL + }; + #endif +@@ -64981,6 +69372,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_17de_08a1, + &pci_ss_info_17de_08a6, + &pci_ss_info_17de_08b2, ++ &pci_ss_info_17de_7350, + &pci_ss_info_17de_a8a6, + NULL + }; +@@ -65002,6 +69394,7 @@ static const pciSubsystemInfo *pci_ss_li + NULL + }; + #endif ++#define pci_ss_list_17f3 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo *pci_ss_list_17fe[] = { + &pci_ss_info_17fe_2220, +@@ -65042,6 +69435,8 @@ static const pciSubsystemInfo *pci_ss_li + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo *pci_ss_list_1849[] = { + &pci_ss_info_1849_0571, ++ &pci_ss_info_1849_0850, ++ &pci_ss_info_1849_2582, + &pci_ss_info_1849_3038, + &pci_ss_info_1849_3065, + &pci_ss_info_1849_3099, +@@ -65112,7 +69507,9 @@ static const pciSubsystemInfo *pci_ss_li + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo *pci_ss_list_185f[] = { ++ &pci_ss_info_185f_1012, + &pci_ss_info_185f_1220, ++ &pci_ss_info_185f_1600, + &pci_ss_info_185f_2012, + &pci_ss_info_185f_22a0, + NULL +@@ -65120,6 +69517,8 @@ static const pciSubsystemInfo *pci_ss_li + #endif + #define pci_ss_list_1864 NULL + #define pci_ss_list_1867 NULL ++#define pci_ss_list_186c NULL ++#define pci_ss_list_1876 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo *pci_ss_list_187e[] = { + &pci_ss_info_187e_3406, +@@ -65138,6 +69537,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_1890 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo *pci_ss_list_1894[] = { ++ &pci_ss_info_1894_0020, + &pci_ss_info_1894_a006, + &pci_ss_info_1894_fe01, + NULL +@@ -65216,6 +69616,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_194a NULL + #define pci_ss_list_1957 NULL + #define pci_ss_list_1958 NULL ++#define pci_ss_list_1959 NULL + #define pci_ss_list_1966 NULL + #define pci_ss_list_1969 NULL + #define pci_ss_list_196a NULL +@@ -65226,7 +69627,9 @@ static const pciSubsystemInfo *pci_ss_li + NULL + }; + #endif ++#define pci_ss_list_1971 NULL + #define pci_ss_list_197b NULL ++#define pci_ss_list_1982 NULL + #define pci_ss_list_1989 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo *pci_ss_list_1993[] = { +@@ -65237,17 +69640,28 @@ static const pciSubsystemInfo *pci_ss_li + }; + #endif + #define pci_ss_list_199a NULL ++#define pci_ss_list_19a2 NULL + #define pci_ss_list_19a8 NULL + #define pci_ss_list_19ac NULL + #define pci_ss_list_19ae NULL + #define pci_ss_list_19d4 NULL ++#define pci_ss_list_19de NULL + #define pci_ss_list_19e2 NULL + #define pci_ss_list_19e7 NULL + #define pci_ss_list_1a03 NULL ++#define pci_ss_list_1a07 NULL + #define pci_ss_list_1a08 NULL + #define pci_ss_list_1a1d NULL ++#define pci_ss_list_1a22 NULL + #define pci_ss_list_1a29 NULL + #define pci_ss_list_1a51 NULL ++#define pci_ss_list_1a5d NULL ++#define pci_ss_list_1a71 NULL ++#define pci_ss_list_1a73 NULL ++#define pci_ss_list_1a77 NULL ++#define pci_ss_list_1a78 NULL ++#define pci_ss_list_1a8c NULL ++#define pci_ss_list_1ab9 NULL + #define pci_ss_list_1b13 NULL + #define pci_ss_list_1c1c NULL + #define pci_ss_list_1d44 NULL +@@ -65321,7 +69735,12 @@ static const pciSubsystemInfo *pci_ss_li + #endif + #define pci_ss_list_3411 NULL + #define pci_ss_list_3513 NULL +-#define pci_ss_list_3842 NULL ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciSubsystemInfo *pci_ss_list_3842[] = { ++ &pci_ss_info_3842_a341, ++ NULL ++}; ++#endif + #define pci_ss_list_38ef NULL + static const pciSubsystemInfo *pci_ss_list_3d3d[] = { + &pci_ss_info_3d3d_0100, +@@ -65343,16 +69762,21 @@ static const pciSubsystemInfo *pci_ss_li + NULL + }; + #define pci_ss_list_4033 NULL ++#define pci_ss_list_4040 NULL + #define pci_ss_list_4143 NULL + #define pci_ss_list_4144 NULL + #define pci_ss_list_416c NULL + #define pci_ss_list_4321 NULL ++#define pci_ss_list_434e NULL + #define pci_ss_list_4444 NULL + #define pci_ss_list_4468 NULL + #define pci_ss_list_4594 NULL + #define pci_ss_list_45fb NULL + #define pci_ss_list_4680 NULL +-#define pci_ss_list_4843 NULL ++static const pciSubsystemInfo *pci_ss_list_4843[] = { ++ &pci_ss_info_4843_314a, ++ NULL ++}; + #define pci_ss_list_4916 NULL + #define pci_ss_list_4943 NULL + #define pci_ss_list_494f NULL +@@ -65396,6 +69820,7 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_4ca1 NULL + #define pci_ss_list_4d51 NULL + #define pci_ss_list_4d54 NULL ++#define pci_ss_list_4d56 NULL + #define pci_ss_list_4ddc NULL + #define pci_ss_list_5046 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -65426,6 +69851,7 @@ static const pciSubsystemInfo *pci_ss_li + #endif + #define pci_ss_list_5301 NULL + static const pciSubsystemInfo *pci_ss_list_5333[] = { ++ &pci_ss_info_5333_0130, + &pci_ss_info_5333_8100, + &pci_ss_info_5333_8110, + &pci_ss_info_5333_8125, +@@ -65445,6 +69871,7 @@ static const pciSubsystemInfo *pci_ss_li + }; + #define pci_ss_list_544c NULL + #define pci_ss_list_5455 NULL ++#define pci_ss_list_5456 NULL + #define pci_ss_list_5519 NULL + #define pci_ss_list_5544 NULL + #define pci_ss_list_5555 NULL +@@ -65458,6 +69885,7 @@ static const pciSubsystemInfo *pci_ss_li + #endif + #define pci_ss_list_5700 NULL + #define pci_ss_list_5851 NULL ++#define pci_ss_list_5853 NULL + #define pci_ss_list_6356 NULL + #define pci_ss_list_6374 NULL + #define pci_ss_list_6409 NULL +@@ -65519,6 +69947,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_0079, + &pci_ss_info_8086_007b, + &pci_ss_info_8086_0100, ++ &pci_ss_info_8086_0136, + &pci_ss_info_8086_01af, + &pci_ss_info_8086_01c1, + &pci_ss_info_8086_01f7, +@@ -65532,8 +69961,11 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_1003, + &pci_ss_info_8086_1004, + &pci_ss_info_8086_1005, ++ &pci_ss_info_8086_1006, + &pci_ss_info_8086_1009, ++ &pci_ss_info_8086_100a, + &pci_ss_info_8086_100c, ++ &pci_ss_info_8086_1010, + &pci_ss_info_8086_1011, + &pci_ss_info_8086_1012, + &pci_ss_info_8086_1013, +@@ -65550,6 +69982,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_1028, + &pci_ss_info_8086_1030, + &pci_ss_info_8086_1034, ++ &pci_ss_info_8086_103d, + &pci_ss_info_8086_1040, + &pci_ss_info_8086_1041, + &pci_ss_info_8086_1042, +@@ -65581,6 +70014,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_1107, + &pci_ss_info_8086_1109, + &pci_ss_info_8086_110d, ++ &pci_ss_info_8086_1110, + &pci_ss_info_8086_1112, + &pci_ss_info_8086_1113, + &pci_ss_info_8086_115e, +@@ -65645,10 +70079,14 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_2411, + &pci_ss_info_8086_2412, + &pci_ss_info_8086_2413, ++ &pci_ss_info_8086_24c2, ++ &pci_ss_info_8086_24c5, + &pci_ss_info_8086_24db, ++ &pci_ss_info_8086_2510, + &pci_ss_info_8086_2513, + &pci_ss_info_8086_2522, + &pci_ss_info_8086_2527, ++ &pci_ss_info_8086_2561, + &pci_ss_info_8086_2581, + &pci_ss_info_8086_265c, + &pci_ss_info_8086_2731, +@@ -65674,6 +70112,7 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_302f, + &pci_ss_info_8086_3063, + &pci_ss_info_8086_308d, ++ &pci_ss_info_8086_309c, + &pci_ss_info_8086_3108, + &pci_ss_info_8086_3411, + &pci_ss_info_8086_3424, +@@ -65720,6 +70159,8 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_8086_e002, + NULL + }; ++#define pci_ss_list_80ee NULL ++#define pci_ss_list_8384 NULL + #define pci_ss_list_8401 NULL + #define pci_ss_list_8686 NULL + #define pci_ss_list_8800 NULL +@@ -65781,6 +70222,8 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_9005_0003, + &pci_ss_info_9005_000f, + &pci_ss_info_9005_0041, ++ &pci_ss_info_9005_0044, ++ &pci_ss_info_9005_0045, + &pci_ss_info_9005_0092, + &pci_ss_info_9005_0093, + &pci_ss_info_9005_0106, +@@ -65829,6 +70272,23 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_9005_02b5, + &pci_ss_info_9005_02b6, + &pci_ss_info_9005_02b7, ++ &pci_ss_info_9005_02b8, ++ &pci_ss_info_9005_02b9, ++ &pci_ss_info_9005_02ba, ++ &pci_ss_info_9005_02bb, ++ &pci_ss_info_9005_02bc, ++ &pci_ss_info_9005_02bd, ++ &pci_ss_info_9005_02be, ++ &pci_ss_info_9005_02bf, ++ &pci_ss_info_9005_02c0, ++ &pci_ss_info_9005_02c1, ++ &pci_ss_info_9005_02c2, ++ &pci_ss_info_9005_02c3, ++ &pci_ss_info_9005_02c4, ++ &pci_ss_info_9005_02c5, ++ &pci_ss_info_9005_02c6, ++ &pci_ss_info_9005_02c7, ++ &pci_ss_info_9005_02c8, + &pci_ss_info_9005_0364, + &pci_ss_info_9005_0365, + &pci_ss_info_9005_0410, +@@ -65871,12 +70331,15 @@ static const pciSubsystemInfo *pci_ss_li + &pci_ss_info_a0a0_01b6, + &pci_ss_info_a0a0_0304, + &pci_ss_info_a0a0_0306, ++ &pci_ss_info_a0a0_0342, + &pci_ss_info_a0a0_03b2, + &pci_ss_info_a0a0_03b4, + &pci_ss_info_a0a0_03b5, + &pci_ss_info_a0a0_03b9, + &pci_ss_info_a0a0_03ba, + &pci_ss_info_a0a0_03bb, ++ &pci_ss_info_a0a0_0449, ++ &pci_ss_info_a0a0_04ad, + &pci_ss_info_a0a0_0506, + &pci_ss_info_a0a0_0509, + NULL +@@ -65892,7 +70355,12 @@ static const pciSubsystemInfo *pci_ss_li + NULL + }; + #endif +-#define pci_ss_list_a727 NULL ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciSubsystemInfo *pci_ss_list_a727[] = { ++ &pci_ss_info_a727_6804, ++ NULL ++}; ++#endif + #define pci_ss_list_aa42 NULL + #define pci_ss_list_ac1e NULL + #define pci_ss_list_ac3d NULL +@@ -65956,11 +70424,16 @@ static const pciSubsystemInfo *pci_ss_li + #define pci_ss_list_e159 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciSubsystemInfo *pci_ss_list_e4bf[] = { ++ &pci_ss_info_e4bf_0cc9, ++ &pci_ss_info_e4bf_0ccd, ++ &pci_ss_info_e4bf_0cd2, ++ &pci_ss_info_e4bf_0cd3, + &pci_ss_info_e4bf_1000, + &pci_ss_info_e4bf_1010, + &pci_ss_info_e4bf_1020, + &pci_ss_info_e4bf_1040, + &pci_ss_info_e4bf_3100, ++ &pci_ss_info_e4bf_58b1, + NULL + }; + #endif +@@ -66300,6 +70773,17 @@ static const pciDeviceInfo pci_dev_info_ + }; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_058f_9254 = { ++ 0x9254, pci_device_058f_9254, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_058f_9254, ++#else ++ NULL, ++#endif ++ 0 ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_05a9_8519 = { + 0x8519, pci_device_05a9_8519, + #ifdef INIT_SUBSYS_INFO +@@ -66449,6 +70933,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_093a_2600 = { ++ 0x2600, pci_device_093a_2600, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_093a_2600, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_093a_2603 = { + 0x2603, pci_device_093a_2603, + #ifdef INIT_SUBSYS_INFO +@@ -67721,6 +72214,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1000_0057 = { ++ 0x0057, pci_device_1000_0057, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1000_0057, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_1000_0058 = { + 0x0058, pci_device_1000_0058, + #ifdef INIT_SUBSYS_INFO +@@ -71396,6 +75898,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1002_716e = { ++ 0x716e, pci_device_1002_716e, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1002_716e, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_1002_7172 = { + 0x7172, pci_device_1002_7172, + #ifdef INIT_SUBSYS_INFO +@@ -71621,6 +76132,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1002_71d4 = { ++ 0x71d4, pci_device_1002_71d4, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1002_71d4, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_1002_71d5 = { + 0x71d5, pci_device_1002_71d5, + #ifdef INIT_SUBSYS_INFO +@@ -71666,6 +76186,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1002_71e6 = { ++ 0x71e6, pci_device_1002_71e6, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1002_71e6, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_1002_71e7 = { + 0x71e7, pci_device_1002_71e7, + #ifdef INIT_SUBSYS_INFO +@@ -71963,6 +76492,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1002_7919 = { ++ 0x7919, pci_device_1002_7919, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1002_7919, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_1002_791e = { + 0x791e, pci_device_1002_791e, + #ifdef INIT_SUBSYS_INFO +@@ -73714,6 +78252,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1014_01ef = { ++ 0x01ef, pci_device_1014_01ef, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1014_01ef, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_1014_01ff = { + 0x01ff, pci_device_1014_01ff, + #ifdef INIT_SUBSYS_INFO +@@ -73840,6 +78387,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1014_0339 = { ++ 0x0339, pci_device_1014_0339, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1014_0339, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_1014_3022 = { + 0x3022, pci_device_1014_3022, + #ifdef INIT_SUBSYS_INFO +@@ -73889,6 +78445,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_101a_1dc1 = { ++ 0x1dc1, pci_device_101a_1dc1, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_101a_1dc1, ++#else ++ NULL, ++#endif ++ 0 ++}; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_101c_0193 = { +@@ -74119,6 +78684,96 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1022_1200 = { ++ 0x1200, pci_device_1022_1200, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1022_1200, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_1022_1201 = { ++ 0x1201, pci_device_1022_1201, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1022_1201, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_1022_1202 = { ++ 0x1202, pci_device_1022_1202, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1022_1202, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_1022_1203 = { ++ 0x1203, pci_device_1022_1203, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1022_1203, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_1022_1204 = { ++ 0x1204, pci_device_1022_1204, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1022_1204, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_1022_1300 = { ++ 0x1300, pci_device_1022_1300, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1022_1300, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_1022_1301 = { ++ 0x1301, pci_device_1022_1301, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1022_1301, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_1022_1302 = { ++ 0x1302, pci_device_1022_1302, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1022_1302, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_1022_1303 = { ++ 0x1303, pci_device_1022_1303, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1022_1303, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_1022_1304 = { ++ 0x1304, pci_device_1022_1304, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1022_1304, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_1022_2000 = { + 0x2000, pci_device_1022_2000, + #ifdef INIT_SUBSYS_INFO +@@ -75721,15 +80376,6 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; +-static const pciDeviceInfo pci_dev_info_1028_1f03 = { +- 0x1f03, pci_device_1028_1f03, +-#ifdef INIT_SUBSYS_INFO +- pci_ss_list_1028_1f03, +-#else +- NULL, +-#endif +- 0 +-}; + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_102a_0000 = { + 0x0000, pci_device_102a_0000, +@@ -77907,6 +82553,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_103c_1361 = { ++ 0x1361, pci_device_103c_1361, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_103c_1361, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_103c_2910 = { + 0x2910, pci_device_103c_2910, + #ifdef INIT_SUBSYS_INFO +@@ -77970,6 +82625,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_103c_3238 = { ++ 0x3238, pci_device_103c_3238, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_103c_3238, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_103c_4030 = { + 0x4030, pci_device_103c_4030, + #ifdef INIT_SUBSYS_INFO +@@ -79668,6 +84332,26 @@ static const pciDeviceInfo pci_dev_info_ + }; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_1054_3011 = { ++ 0x3011, pci_device_1054_3011, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1054_3011, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_1054_3012 = { ++ 0x3012, pci_device_1054_3012, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1054_3012, ++#else ++ NULL, ++#endif ++ 0 ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_1055_9130 = { + 0x9130, pci_device_1055_9130, + #ifdef INIT_SUBSYS_INFO +@@ -79795,6 +84479,24 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1057_1073 = { ++ 0x1073, pci_device_1057_1073, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1057_1073, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_1057_1219 = { ++ 0x1219, pci_device_1057_1219, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1057_1219, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_1057_1801 = { + 0x1801, pci_device_1057_1801, + #ifdef INIT_SUBSYS_INFO +@@ -80328,6 +85030,17 @@ static const pciDeviceInfo pci_dev_info_ + 0 + }; + #endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_105b_0c4d = { ++ 0x0c4d, pci_device_105b_0c4d, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_105b_0c4d, ++#else ++ NULL, ++#endif ++ 0 ++}; ++#endif + static const pciDeviceInfo pci_dev_info_105d_2309 = { + 0x2309, pci_device_105d_2309, + #ifdef INIT_SUBSYS_INFO +@@ -82364,6 +87077,24 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_108e_676e = { ++ 0x676e, pci_device_108e_676e, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_108e_676e, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_108e_7063 = { ++ 0x7063, pci_device_108e_7063, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_108e_7063, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_108e_8000 = { + 0x8000, pci_device_108e_8000, + #ifdef INIT_SUBSYS_INFO +@@ -83827,6 +88558,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_10b5_6520 = { ++ 0x6520, pci_device_10b5_6520, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10b5_6520, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_10b5_6540 = { + 0x6540, pci_device_10b5_6540, + #ifdef INIT_SUBSYS_INFO +@@ -86574,6 +91314,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_10de_0095 = { ++ 0x0095, pci_device_10de_0095, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_0095, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_10de_0098 = { + 0x0098, pci_device_10de_0098, + #ifdef INIT_SUBSYS_INFO +@@ -87141,6 +91890,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_10de_0143 = { ++ 0x0143, pci_device_10de_0143, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_0143, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_10de_0144 = { + 0x0144, pci_device_10de_0144, + #ifdef INIT_SUBSYS_INFO +@@ -87366,6 +92124,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_10de_016a = { ++ 0x016a, pci_device_10de_016a, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_016a, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_10de_0170 = { + 0x0170, pci_device_10de_0170, + #ifdef INIT_SUBSYS_INFO +@@ -87519,6 +92286,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_10de_0184 = { ++ 0x0184, pci_device_10de_0184, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_0184, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_10de_0185 = { + 0x0185, pci_device_10de_0185, + #ifdef INIT_SUBSYS_INFO +@@ -87591,6 +92367,51 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_10de_0191 = { ++ 0x0191, pci_device_10de_0191, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_0191, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10de_0193 = { ++ 0x0193, pci_device_10de_0193, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_0193, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10de_0194 = { ++ 0x0194, pci_device_10de_0194, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_0194, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10de_019d = { ++ 0x019d, pci_device_10de_019d, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_019d, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10de_019e = { ++ 0x019e, pci_device_10de_019e, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_019e, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_10de_01a0 = { + 0x01a0, pci_device_10de_01a0, + #ifdef INIT_SUBSYS_INFO +@@ -87735,6 +92556,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_10de_01d3 = { ++ 0x01d3, pci_device_10de_01d3, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_01d3, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_10de_01d6 = { + 0x01d6, pci_device_10de_01d6, + #ifdef INIT_SUBSYS_INFO +@@ -87771,6 +92601,24 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_10de_01dc = { ++ 0x01dc, pci_device_10de_01dc, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_01dc, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10de_01dd = { ++ 0x01dd, pci_device_10de_01dd, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_01dd, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_10de_01de = { + 0x01de, pci_device_10de_01de, + #ifdef INIT_SUBSYS_INFO +@@ -87951,6 +92799,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_10de_0222 = { ++ 0x0222, pci_device_10de_0222, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_0222, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_10de_0240 = { + 0x0240, pci_device_10de_0240, + #ifdef INIT_SUBSYS_INFO +@@ -88437,6 +93294,42 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_10de_0293 = { ++ 0x0293, pci_device_10de_0293, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_0293, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10de_0294 = { ++ 0x0294, pci_device_10de_0294, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_0294, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10de_0295 = { ++ 0x0295, pci_device_10de_0295, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_0295, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10de_0297 = { ++ 0x0297, pci_device_10de_0297, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_0297, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_10de_0298 = { + 0x0298, pci_device_10de_0298, + #ifdef INIT_SUBSYS_INFO +@@ -88518,6 +93411,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_10de_02e0 = { ++ 0x02e0, pci_device_10de_02e0, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_02e0, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_10de_02e1 = { + 0x02e1, pci_device_10de_02e1, + #ifdef INIT_SUBSYS_INFO +@@ -88527,6 +93429,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_10de_02e2 = { ++ 0x02e2, pci_device_10de_02e2, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_02e2, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_10de_02f0 = { + 0x02f0, pci_device_10de_02f0, + #ifdef INIT_SUBSYS_INFO +@@ -89355,6 +94266,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_10de_037c = { ++ 0x037c, pci_device_10de_037c, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_037c, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_10de_037e = { + 0x037e, pci_device_10de_037e, + #ifdef INIT_SUBSYS_INFO +@@ -89373,6 +94293,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_10de_0390 = { ++ 0x0390, pci_device_10de_0390, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_0390, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_10de_0391 = { + 0x0391, pci_device_10de_0391, + #ifdef INIT_SUBSYS_INFO +@@ -89400,6 +94329,33 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_10de_0394 = { ++ 0x0394, pci_device_10de_0394, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_0394, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10de_0395 = { ++ 0x0395, pci_device_10de_0395, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_0395, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10de_0397 = { ++ 0x0397, pci_device_10de_0397, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_0397, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_10de_0398 = { + 0x0398, pci_device_10de_0398, + #ifdef INIT_SUBSYS_INFO +@@ -89409,6 +94365,42 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_10de_0399 = { ++ 0x0399, pci_device_10de_0399, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_0399, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10de_039a = { ++ 0x039a, pci_device_10de_039a, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_039a, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10de_039b = { ++ 0x039b, pci_device_10de_039b, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_039b, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10de_039c = { ++ 0x039c, pci_device_10de_039c, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_039c, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_10de_039e = { + 0x039e, pci_device_10de_039e, + #ifdef INIT_SUBSYS_INFO +@@ -89913,6 +94905,132 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_10de_0400 = { ++ 0x0400, pci_device_10de_0400, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_0400, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10de_0402 = { ++ 0x0402, pci_device_10de_0402, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_0402, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10de_0407 = { ++ 0x0407, pci_device_10de_0407, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_0407, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10de_040b = { ++ 0x040b, pci_device_10de_040b, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_040b, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10de_0421 = { ++ 0x0421, pci_device_10de_0421, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_0421, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10de_0422 = { ++ 0x0422, pci_device_10de_0422, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_0422, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10de_0423 = { ++ 0x0423, pci_device_10de_0423, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_0423, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10de_0425 = { ++ 0x0425, pci_device_10de_0425, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_0425, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10de_0426 = { ++ 0x0426, pci_device_10de_0426, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_0426, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10de_0427 = { ++ 0x0427, pci_device_10de_0427, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_0427, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10de_0428 = { ++ 0x0428, pci_device_10de_0428, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_0428, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10de_0429 = { ++ 0x0429, pci_device_10de_0429, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_0429, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10de_042a = { ++ 0x042a, pci_device_10de_042a, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_042a, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10de_042b = { ++ 0x042b, pci_device_10de_042b, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_042b, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_10de_0440 = { + 0x0440, pci_device_10de_0440, + #ifdef INIT_SUBSYS_INFO +@@ -90192,6 +95310,33 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_10de_055c = { ++ 0x055c, pci_device_10de_055c, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_055c, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10de_055d = { ++ 0x055d, pci_device_10de_055d, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_055d, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10de_c615 = { ++ 0xc615, pci_device_10de_c615, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10de_c615, ++#else ++ NULL, ++#endif ++ 0 ++}; + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_10df_1ae5 = { + 0x1ae5, pci_device_10df_1ae5, +@@ -90202,6 +95347,24 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_10df_f011 = { ++ 0xf011, pci_device_10df_f011, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10df_f011, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10df_f015 = { ++ 0xf015, pci_device_10df_f015, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10df_f015, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_10df_f085 = { + 0xf085, pci_device_10df_f085, + #ifdef INIT_SUBSYS_INFO +@@ -90301,6 +95464,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_10df_f100 = { ++ 0xf100, pci_device_10df_f100, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10df_f100, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_10df_f700 = { + 0xf700, pci_device_10df_f700, + #ifdef INIT_SUBSYS_INFO +@@ -90427,6 +95599,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_10df_fc40 = { ++ 0xfc40, pci_device_10df_fc40, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10df_fc40, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_10df_fd00 = { + 0xfd00, pci_device_10df_fd00, + #ifdef INIT_SUBSYS_INFO +@@ -90741,6 +95922,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_10e8_80fc = { ++ 0x80fc, pci_device_10e8_80fc, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10e8_80fc, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_10e8_811a = { + 0x811a, pci_device_10e8_811a, + #ifdef INIT_SUBSYS_INFO +@@ -90777,6 +95967,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_10e8_828d = { ++ 0x828d, pci_device_10e8_828d, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10e8_828d, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_10e8_8291 = { + 0x8291, pci_device_10e8_8291, + #ifdef INIT_SUBSYS_INFO +@@ -90849,6 +96048,24 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_10e8_8406 = { ++ 0x8406, pci_device_10e8_8406, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10e8_8406, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10e8_8407 = { ++ 0x8407, pci_device_10e8_8407, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10e8_8407, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_10e8_8851 = { + 0x8851, pci_device_10e8_8851, + #ifdef INIT_SUBSYS_INFO +@@ -90970,6 +96187,60 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_10ec_0260 = { ++ 0x0260, pci_device_10ec_0260, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10ec_0260, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10ec_0261 = { ++ 0x0261, pci_device_10ec_0261, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10ec_0261, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10ec_0280 = { ++ 0x0280, pci_device_10ec_0280, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10ec_0280, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10ec_0861 = { ++ 0x0861, pci_device_10ec_0861, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10ec_0861, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10ec_0862 = { ++ 0x0862, pci_device_10ec_0862, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10ec_0862, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_10ec_0880 = { ++ 0x0880, pci_device_10ec_0880, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10ec_0880, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_10ec_0883 = { + 0x0883, pci_device_10ec_0883, + #ifdef INIT_SUBSYS_INFO +@@ -90979,6 +96250,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_10ec_0888 = { ++ 0x0888, pci_device_10ec_0888, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10ec_0888, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_10ec_8029 = { + 0x8029, pci_device_10ec_8029, + #ifdef INIT_SUBSYS_INFO +@@ -91199,6 +96479,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_10ee_8380 = { ++ 0x8380, pci_device_10ee_8380, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_10ee_8380, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_10ee_8381 = { + 0x8381, pci_device_10ee_8381, + #ifdef INIT_SUBSYS_INFO +@@ -91541,6 +96830,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1103_2340 = { ++ 0x2340, pci_device_1103_2340, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1103_2340, ++#else ++ NULL, ++#endif ++ 0 ++}; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_1105_1105 = { +@@ -91653,6 +96951,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1106_0198 = { ++ 0x0198, pci_device_1106_0198, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1106_0198, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_1106_0204 = { + 0x0204, pci_device_1106_0204, + #ifdef INIT_SUBSYS_INFO +@@ -92211,6 +97518,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1106_2106 = { ++ 0x2106, pci_device_1106_2106, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1106_2106, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_1106_2204 = { + 0x2204, pci_device_1106_2204, + #ifdef INIT_SUBSYS_INFO +@@ -92742,6 +98058,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1106_3157 = { ++ 0x3157, pci_device_1106_3157, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1106_3157, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_1106_3164 = { + 0x3164, pci_device_1106_3164, + #ifdef INIT_SUBSYS_INFO +@@ -92850,6 +98175,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1106_3230 = { ++ 0x3230, pci_device_1106_3230, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1106_3230, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_1106_3238 = { + 0x3238, pci_device_1106_3238, + #ifdef INIT_SUBSYS_INFO +@@ -92913,6 +98247,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1106_3260 = { ++ 0x3260, pci_device_1106_3260, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1106_3260, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_1106_3269 = { + 0x3269, pci_device_1106_3269, + #ifdef INIT_SUBSYS_INFO +@@ -93012,6 +98355,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1106_3343 = { ++ 0x3343, pci_device_1106_3343, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1106_3343, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_1106_3344 = { + 0x3344, pci_device_1106_3344, + #ifdef INIT_SUBSYS_INFO +@@ -93048,6 +98400,24 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1106_3371 = { ++ 0x3371, pci_device_1106_3371, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1106_3371, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_1106_3372 = { ++ 0x3372, pci_device_1106_3372, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1106_3372, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_1106_337a = { + 0x337a, pci_device_1106_337a, + #ifdef INIT_SUBSYS_INFO +@@ -93282,6 +98652,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1106_5324 = { ++ 0x5324, pci_device_1106_5324, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1106_5324, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_1106_5327 = { + 0x5327, pci_device_1106_5327, + #ifdef INIT_SUBSYS_INFO +@@ -93336,6 +98715,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1106_6287 = { ++ 0x6287, pci_device_1106_6287, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1106_6287, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_1106_6327 = { + 0x6327, pci_device_1106_6327, + #ifdef INIT_SUBSYS_INFO +@@ -93345,6 +98733,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1106_6364 = { ++ 0x6364, pci_device_1106_6364, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1106_6364, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_1106_7204 = { + 0x7204, pci_device_1106_7204, + #ifdef INIT_SUBSYS_INFO +@@ -94548,42 +99945,6 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; +-static const pciDeviceInfo pci_dev_info_1119_0010 = { +- 0x0010, pci_device_1119_0010, +-#ifdef INIT_SUBSYS_INFO +- pci_ss_list_1119_0010, +-#else +- NULL, +-#endif +- 0 +-}; +-static const pciDeviceInfo pci_dev_info_1119_0011 = { +- 0x0011, pci_device_1119_0011, +-#ifdef INIT_SUBSYS_INFO +- pci_ss_list_1119_0011, +-#else +- NULL, +-#endif +- 0 +-}; +-static const pciDeviceInfo pci_dev_info_1119_0012 = { +- 0x0012, pci_device_1119_0012, +-#ifdef INIT_SUBSYS_INFO +- pci_ss_list_1119_0012, +-#else +- NULL, +-#endif +- 0 +-}; +-static const pciDeviceInfo pci_dev_info_1119_0013 = { +- 0x0013, pci_device_1119_0013, +-#ifdef INIT_SUBSYS_INFO +- pci_ss_list_1119_0013, +-#else +- NULL, +-#endif +- 0 +-}; + static const pciDeviceInfo pci_dev_info_1119_0100 = { + 0x0100, pci_device_1119_0100, + #ifdef INIT_SUBSYS_INFO +@@ -95088,6 +100449,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1119_0301 = { ++ 0x0301, pci_device_1119_0301, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1119_0301, ++#else ++ NULL, ++#endif ++ 0 ++}; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_111a_0000 = { +@@ -95835,6 +101205,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1133_e032 = { ++ 0xe032, pci_device_1133_e032, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1133_e032, ++#else ++ NULL, ++#endif ++ 0 ++}; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_1134_0001 = { +@@ -96352,6 +101731,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_114f_0013 = { ++ 0x0013, pci_device_114f_0013, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_114f_0013, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_114f_0014 = { + 0x0014, pci_device_114f_0014, + #ifdef INIT_SUBSYS_INFO +@@ -97181,6 +102569,24 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1166_0235 = { ++ 0x0235, pci_device_1166_0235, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1166_0235, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_1166_0238 = { ++ 0x0238, pci_device_1166_0238, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1166_0238, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_1166_0240 = { + 0x0240, pci_device_1166_0240, + #ifdef INIT_SUBSYS_INFO +@@ -97569,6 +102975,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1180_0832 = { ++ 0x0832, pci_device_1180_0832, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1180_0832, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_1180_0841 = { + 0x0841, pci_device_1180_0841, + #ifdef INIT_SUBSYS_INFO +@@ -98284,6 +103699,24 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_11ab_0f53 = { ++ 0x0f53, pci_device_11ab_0f53, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_11ab_0f53, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_11ab_11ab = { ++ 0x11ab, pci_device_11ab_11ab, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_11ab_11ab, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_11ab_138f = { + 0x138f, pci_device_11ab_138f, + #ifdef INIT_SUBSYS_INFO +@@ -98320,6 +103753,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_11ab_2a01 = { ++ 0x2a01, pci_device_11ab_2a01, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_11ab_2a01, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_11ab_4320 = { + 0x4320, pci_device_11ab_4320, + #ifdef INIT_SUBSYS_INFO +@@ -98464,6 +103906,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_11ab_4364 = { ++ 0x4364, pci_device_11ab_4364, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_11ab_4364, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_11ab_4611 = { + 0x4611, pci_device_11ab_4611, + #ifdef INIT_SUBSYS_INFO +@@ -98554,6 +104005,42 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_11ab_6101 = { ++ 0x6101, pci_device_11ab_6101, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_11ab_6101, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_11ab_6141 = { ++ 0x6141, pci_device_11ab_6141, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_11ab_6141, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_11ab_6145 = { ++ 0x6145, pci_device_11ab_6145, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_11ab_6145, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_11ab_6450 = { ++ 0x6450, pci_device_11ab_6450, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_11ab_6450, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_11ab_6460 = { + 0x6460, pci_device_11ab_6460, + #ifdef INIT_SUBSYS_INFO +@@ -98712,6 +104199,33 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_11bd_0040 = { ++ 0x0040, pci_device_11bd_0040, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_11bd_0040, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_11bd_0041 = { ++ 0x0041, pci_device_11bd_0041, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_11bd_0041, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_11bd_0042 = { ++ 0x0042, pci_device_11bd_0042, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_11bd_0042, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_11bd_bede = { + 0xbede, pci_device_11bd_bede, + #ifdef INIT_SUBSYS_INFO +@@ -99020,6 +104534,24 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_11c1_1040 = { ++ 0x1040, pci_device_11c1_1040, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_11c1_1040, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_11c1_2600 = { ++ 0x2600, pci_device_11c1_2600, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_11c1_2600, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_11c1_5801 = { + 0x5801, pci_device_11c1_5801, + #ifdef INIT_SUBSYS_INFO +@@ -99219,6 +104751,15 @@ static const pciDeviceInfo pci_dev_info_ + }; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_11d4_0078 = { ++ 0x0078, pci_device_11d4_0078, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_11d4_0078, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_11d4_1535 = { + 0x1535, pci_device_11d4_1535, + #ifdef INIT_SUBSYS_INFO +@@ -99246,6 +104787,24 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_11d4_1981 = { ++ 0x1981, pci_device_11d4_1981, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_11d4_1981, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_11d4_1983 = { ++ 0x1983, pci_device_11d4_1983, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_11d4_1983, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_11d4_1986 = { + 0x1986, pci_device_11d4_1986, + #ifdef INIT_SUBSYS_INFO +@@ -99255,6 +104814,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_11d4_198b = { ++ 0x198b, pci_device_11d4_198b, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_11d4_198b, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_11d4_5340 = { + 0x5340, pci_device_11d4_5340, + #ifdef INIT_SUBSYS_INFO +@@ -101440,6 +107008,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1283_8152 = { ++ 0x8152, pci_device_1283_8152, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1283_8152, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_1283_8211 = { + 0x8211, pci_device_1283_8211, + #ifdef INIT_SUBSYS_INFO +@@ -101593,6 +107170,15 @@ static const pciDeviceInfo pci_dev_info_ + 0 + }; + #endif ++static const pciDeviceInfo pci_dev_info_1292_fc02 = { ++ 0xfc02, pci_device_1292_fc02, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1292_fc02, ++#else ++ NULL, ++#endif ++ 0 ++}; + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_129a_0615 = { + 0x0615, pci_device_129a_0615, +@@ -101616,6 +107202,15 @@ static const pciDeviceInfo pci_dev_info_ + }; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_12ab_0000 = { ++ 0x0000, pci_device_12ab_0000, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_12ab_0000, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_12ab_0002 = { + 0x0002, pci_device_12ab_0002, + #ifdef INIT_SUBSYS_INFO +@@ -101625,6 +107220,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_12ab_2300 = { ++ 0x2300, pci_device_12ab_2300, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_12ab_2300, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_12ab_3000 = { + 0x3000, pci_device_12ab_3000, + #ifdef INIT_SUBSYS_INFO +@@ -101634,6 +107238,24 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_12ab_fff3 = { ++ 0xfff3, pci_device_12ab_fff3, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_12ab_fff3, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_12ab_ffff = { ++ 0xffff, pci_device_12ab_ffff, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_12ab_ffff, ++#else ++ NULL, ++#endif ++ 0 ++}; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_12ae_0001 = { +@@ -102147,6 +107769,15 @@ static const pciDeviceInfo pci_dev_info_ + }; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_12d8_01a7 = { ++ 0x01a7, pci_device_12d8_01a7, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_12d8_01a7, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_12d8_8150 = { + 0x8150, pci_device_12d8_8150, + #ifdef INIT_SUBSYS_INFO +@@ -104022,6 +109653,24 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1374_003b = { ++ 0x003b, pci_device_1374_003b, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1374_003b, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_1374_003c = { ++ 0x003c, pci_device_1374_003c, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1374_003c, ++#else ++ NULL, ++#endif ++ 0 ++}; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_137a_0001 = { +@@ -104145,6 +109794,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1385_006b = { ++ 0x006b, pci_device_1385_006b, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1385_006b, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_1385_311a = { + 0x311a, pci_device_1385_311a, + #ifdef INIT_SUBSYS_INFO +@@ -104428,6 +110086,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1393_1681 = { ++ 0x1681, pci_device_1393_1681, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1393_1681, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_1393_2040 = { + 0x2040, pci_device_1393_2040, + #ifdef INIT_SUBSYS_INFO +@@ -104495,30 +110162,28 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; +-#endif +-#ifdef VENDOR_INCLUDE_NONVIDEO +-static const pciDeviceInfo pci_dev_info_139a_0001 = { +- 0x0001, pci_device_139a_0001, ++static const pciDeviceInfo pci_dev_info_1397_30b1 = { ++ 0x30b1, pci_device_1397_30b1, + #ifdef INIT_SUBSYS_INFO +- pci_ss_list_139a_0001, ++ pci_ss_list_1397_30b1, + #else + NULL, + #endif + 0 + }; +-static const pciDeviceInfo pci_dev_info_139a_0003 = { +- 0x0003, pci_device_139a_0003, ++static const pciDeviceInfo pci_dev_info_1397_b700 = { ++ 0xb700, pci_device_1397_b700, + #ifdef INIT_SUBSYS_INFO +- pci_ss_list_139a_0003, ++ pci_ss_list_1397_b700, + #else + NULL, + #endif + 0 + }; +-static const pciDeviceInfo pci_dev_info_139a_0005 = { +- 0x0005, pci_device_139a_0005, ++static const pciDeviceInfo pci_dev_info_1397_f001 = { ++ 0xf001, pci_device_1397_f001, + #ifdef INIT_SUBSYS_INFO +- pci_ss_list_139a_0005, ++ pci_ss_list_1397_f001, + #else + NULL, + #endif +@@ -104526,10 +110191,39 @@ static const pciDeviceInfo pci_dev_info_ + }; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +-static const pciDeviceInfo pci_dev_info_13a3_0005 = { +- 0x0005, pci_device_13a3_0005, ++static const pciDeviceInfo pci_dev_info_139a_0001 = { ++ 0x0001, pci_device_139a_0001, + #ifdef INIT_SUBSYS_INFO +- pci_ss_list_13a3_0005, ++ pci_ss_list_139a_0001, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_139a_0003 = { ++ 0x0003, pci_device_139a_0003, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_139a_0003, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_139a_0005 = { ++ 0x0005, pci_device_139a_0005, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_139a_0005, ++#else ++ NULL, ++#endif ++ 0 ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_13a3_0005 = { ++ 0x0005, pci_device_13a3_0005, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_13a3_0005, + #else + NULL, + #endif +@@ -104625,6 +110319,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_13a3_002e = { ++ 0x002e, pci_device_13a3_002e, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_13a3_002e, ++#else ++ NULL, ++#endif ++ 0 ++}; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_13a8_0152 = { +@@ -104730,6 +110433,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_13c1_1004 = { ++ 0x1004, pci_device_13c1_1004, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_13c1_1004, ++#else ++ NULL, ++#endif ++ 0 ++}; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_13c2_000e = { +@@ -104830,6 +110542,17 @@ static const pciDeviceInfo pci_dev_info_ + }; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_13d3_3219 = { ++ 0x3219, pci_device_13d3_3219, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_13d3_3219, ++#else ++ NULL, ++#endif ++ 0 ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_13df_0001 = { + 0x0001, pci_device_13df_0001, + #ifdef INIT_SUBSYS_INFO +@@ -104937,6 +110660,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_13f6_9880 = { ++ 0x9880, pci_device_13f6_9880, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_13f6_9880, ++#else ++ NULL, ++#endif ++ 0 ++}; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_13fe_1240 = { +@@ -105367,6 +111099,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1425_000c = { ++ 0x000c, pci_device_1425_000c, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1425_000c, ++#else ++ NULL, ++#endif ++ 0 ++}; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_142e_4020 = { +@@ -105586,6 +111327,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1458_9001 = { ++ 0x9001, pci_device_1458_9001, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1458_9001, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_1458_e911 = { + 0xe911, pci_device_1458_e911, + #ifdef INIT_SUBSYS_INFO +@@ -105608,6 +111358,33 @@ static const pciDeviceInfo pci_dev_info_ + }; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_1461_a3ce = { ++ 0xa3ce, pci_device_1461_a3ce, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1461_a3ce, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_1461_a3cf = { ++ 0xa3cf, pci_device_1461_a3cf, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1461_a3cf, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_1461_a836 = { ++ 0xa836, pci_device_1461_a836, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1461_a836, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_1461_f436 = { + 0xf436, pci_device_1461_f436, + #ifdef INIT_SUBSYS_INFO +@@ -105664,6 +111441,24 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1462_7235 = { ++ 0x7235, pci_device_1462_7235, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1462_7235, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_1462_7242 = { ++ 0x7242, pci_device_1462_7242, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1462_7242, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_1462_8725 = { + 0x8725, pci_device_1462_8725, + #ifdef INIT_SUBSYS_INFO +@@ -105736,6 +111531,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1462_b834 = { ++ 0xb834, pci_device_1462_b834, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1462_b834, ++#else ++ NULL, ++#endif ++ 0 ++}; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_146c_1430 = { +@@ -106436,6 +112240,24 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_14e4_1639 = { ++ 0x1639, pci_device_14e4_1639, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_14e4_1639, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_14e4_163a = { ++ 0x163a, pci_device_14e4_163a, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_14e4_163a, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_14e4_1644 = { + 0x1644, pci_device_14e4_1644, + #ifdef INIT_SUBSYS_INFO +@@ -106535,6 +112357,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_14e4_165a = { ++ 0x165a, pci_device_14e4_165a, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_14e4_165a, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_14e4_165d = { + 0x165d, pci_device_14e4_165d, + #ifdef INIT_SUBSYS_INFO +@@ -106616,6 +112447,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_14e4_1674 = { ++ 0x1674, pci_device_14e4_1674, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_14e4_1674, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_14e4_1677 = { + 0x1677, pci_device_14e4_1677, + #ifdef INIT_SUBSYS_INFO +@@ -106679,6 +112519,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_14e4_167f = { ++ 0x167f, pci_device_14e4_167f, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_14e4_167f, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_14e4_1693 = { + 0x1693, pci_device_14e4_1693, + #ifdef INIT_SUBSYS_INFO +@@ -106859,6 +112708,24 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_14e4_1712 = { ++ 0x1712, pci_device_14e4_1712, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_14e4_1712, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_14e4_1713 = { ++ 0x1713, pci_device_14e4_1713, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_14e4_1713, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_14e4_3352 = { + 0x3352, pci_device_14e4_3352, + #ifdef INIT_SUBSYS_INFO +@@ -106904,6 +112771,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_14e4_4220 = { ++ 0x4220, pci_device_14e4_4220, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_14e4_4220, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_14e4_4301 = { + 0x4301, pci_device_14e4_4301, + #ifdef INIT_SUBSYS_INFO +@@ -107066,6 +112942,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_14e4_4344 = { ++ 0x4344, pci_device_14e4_4344, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_14e4_4344, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_14e4_4401 = { + 0x4401, pci_device_14e4_4401, + #ifdef INIT_SUBSYS_INFO +@@ -107435,6 +113320,24 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_14e4_5695 = { ++ 0x5695, pci_device_14e4_5695, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_14e4_5695, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_14e4_5698 = { ++ 0x5698, pci_device_14e4_5698, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_14e4_5698, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_14e4_5820 = { + 0x5820, pci_device_14e4_5820, + #ifdef INIT_SUBSYS_INFO +@@ -107781,6 +113684,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_14f1_10b6 = { ++ 0x10b6, pci_device_14f1_10b6, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_14f1_10b6, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_14f1_1433 = { + 0x1433, pci_device_14f1_1433, + #ifdef INIT_SUBSYS_INFO +@@ -108339,6 +114251,33 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_14f1_2f30 = { ++ 0x2f30, pci_device_14f1_2f30, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_14f1_2f30, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_14f1_5045 = { ++ 0x5045, pci_device_14f1_5045, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_14f1_5045, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_14f1_5047 = { ++ 0x5047, pci_device_14f1_5047, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_14f1_5047, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_14f1_8234 = { + 0x8234, pci_device_14f1_8234, + #ifdef INIT_SUBSYS_INFO +@@ -108741,6 +114680,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1524_0551 = { ++ 0x0551, pci_device_1524_0551, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1524_0551, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_1524_0610 = { + 0x0610, pci_device_1524_0610, + #ifdef INIT_SUBSYS_INFO +@@ -109112,6 +115060,35 @@ static const pciDeviceInfo pci_dev_info_ + }; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_1590_0001 = { ++ 0x0001, pci_device_1590_0001, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1590_0001, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_1590_0002 = { ++ 0x0002, pci_device_1590_0002, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1590_0002, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_1590_a01d = { ++ 0xa01d, pci_device_1590_a01d, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1590_a01d, ++#else ++ NULL, ++#endif ++ 0 ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_1592_0781 = { + 0x0781, pci_device_1592_0781, + #ifdef INIT_SUBSYS_INFO +@@ -109224,6 +115201,15 @@ static const pciDeviceInfo pci_dev_info_ + 0 + }; + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_15b3_0191 = { ++ 0x0191, pci_device_15b3_0191, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_15b3_0191, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_15b3_5274 = { + 0x5274, pci_device_15b3_5274, + #ifdef INIT_SUBSYS_INFO +@@ -109305,6 +115291,80 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_15b3_6340 = { ++ 0x6340, pci_device_15b3_6340, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_15b3_6340, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_15b3_634a = { ++ 0x634a, pci_device_15b3_634a, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_15b3_634a, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_15b3_6354 = { ++ 0x6354, pci_device_15b3_6354, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_15b3_6354, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_15b3_6368 = { ++ 0x6368, pci_device_15b3_6368, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_15b3_6368, ++#else ++ NULL, ++#endif ++ 0 ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_15b8_1003 = { ++ 0x1003, pci_device_15b8_1003, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_15b8_1003, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_15b8_1005 = { ++ 0x1005, pci_device_15b8_1005, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_15b8_1005, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_15b8_100a = { ++ 0x100a, pci_device_15b8_100a, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_15b8_100a, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_15b8_3001 = { ++ 0x3001, pci_device_15b8_3001, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_15b8_3001, ++#else ++ NULL, ++#endif ++ 0 ++}; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_15bc_1100 = { +@@ -109378,6 +115438,17 @@ static const pciDeviceInfo pci_dev_info_ + }; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_15e2_0500 = { ++ 0x0500, pci_device_15e2_0500, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_15e2_0500, ++#else ++ NULL, ++#endif ++ 0 ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_15e8_0130 = { + 0x0130, pci_device_15e8_0130, + #ifdef INIT_SUBSYS_INFO +@@ -109505,6 +115576,24 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1629_1006 = { ++ 0x1006, pci_device_1629_1006, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1629_1006, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_1629_1007 = { ++ 0x1007, pci_device_1629_1007, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1629_1007, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_1629_2002 = { + 0x2002, pci_device_1629_2002, + #ifdef INIT_SUBSYS_INFO +@@ -109756,6 +115845,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_168c_001c = { ++ 0x001c, pci_device_168c_001c, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_168c_001c, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_168c_0020 = { + 0x0020, pci_device_168c_0020, + #ifdef INIT_SUBSYS_INFO +@@ -109765,6 +115863,24 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_168c_0023 = { ++ 0x0023, pci_device_168c_0023, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_168c_0023, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_168c_0024 = { ++ 0x0024, pci_device_168c_0024, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_168c_0024, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_168c_1014 = { + 0x1014, pci_device_168c_1014, + #ifdef INIT_SUBSYS_INFO +@@ -109774,6 +115890,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_168c_3b08 = { ++ 0x3b08, pci_device_168c_3b08, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_168c_3b08, ++#else ++ NULL, ++#endif ++ 0 ++}; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_169c_0044 = { +@@ -109787,6 +115912,17 @@ static const pciDeviceInfo pci_dev_info_ + }; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_169d_3306 = { ++ 0x3306, pci_device_169d_3306, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_169d_3306, ++#else ++ NULL, ++#endif ++ 0 ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_16ab_1100 = { + 0x1100, pci_device_16ab_1100, + #ifdef INIT_SUBSYS_INFO +@@ -109825,6 +115961,24 @@ static const pciDeviceInfo pci_dev_info_ + }; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_16ae_0001 = { ++ 0x0001, pci_device_16ae_0001, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16ae_0001, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16ae_000a = { ++ 0x000a, pci_device_16ae_000a, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16ae_000a, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_16ae_1141 = { + 0x1141, pci_device_16ae_1141, + #ifdef INIT_SUBSYS_INFO +@@ -109834,6 +115988,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_16ae_1841 = { ++ 0x1841, pci_device_16ae_1841, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16ae_1841, ++#else ++ NULL, ++#endif ++ 0 ++}; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_16c6_8695 = { +@@ -109858,6 +116021,285 @@ static const pciDeviceInfo pci_dev_info_ + }; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_16d5_0504 = { ++ 0x0504, pci_device_16d5_0504, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_0504, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16d5_0520 = { ++ 0x0520, pci_device_16d5_0520, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_0520, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16d5_0521 = { ++ 0x0521, pci_device_16d5_0521, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_0521, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16d5_1020 = { ++ 0x1020, pci_device_16d5_1020, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_1020, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16d5_1065 = { ++ 0x1065, pci_device_16d5_1065, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_1065, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16d5_2004 = { ++ 0x2004, pci_device_16d5_2004, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_2004, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16d5_2020 = { ++ 0x2020, pci_device_16d5_2020, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_2020, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16d5_2065 = { ++ 0x2065, pci_device_16d5_2065, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_2065, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16d5_3020 = { ++ 0x3020, pci_device_16d5_3020, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_3020, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16d5_3065 = { ++ 0x3065, pci_device_16d5_3065, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_3065, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16d5_4243 = { ++ 0x4243, pci_device_16d5_4243, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_4243, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16d5_4248 = { ++ 0x4248, pci_device_16d5_4248, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_4248, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16d5_424b = { ++ 0x424b, pci_device_16d5_424b, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_424b, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16d5_4253 = { ++ 0x4253, pci_device_16d5_4253, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_4253, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16d5_4312 = { ++ 0x4312, pci_device_16d5_4312, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_4312, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16d5_4313 = { ++ 0x4313, pci_device_16d5_4313, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_4313, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16d5_4322 = { ++ 0x4322, pci_device_16d5_4322, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_4322, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16d5_4323 = { ++ 0x4323, pci_device_16d5_4323, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_4323, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16d5_4350 = { ++ 0x4350, pci_device_16d5_4350, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_4350, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16d5_4353 = { ++ 0x4353, pci_device_16d5_4353, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_4353, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16d5_4357 = { ++ 0x4357, pci_device_16d5_4357, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_4357, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16d5_4457 = { ++ 0x4457, pci_device_16d5_4457, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_4457, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16d5_464d = { ++ 0x464d, pci_device_16d5_464d, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_464d, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16d5_4850 = { ++ 0x4850, pci_device_16d5_4850, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_4850, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16d5_4a42 = { ++ 0x4a42, pci_device_16d5_4a42, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_4a42, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16d5_4a50 = { ++ 0x4a50, pci_device_16d5_4a50, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_4a50, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16d5_4a56 = { ++ 0x4a56, pci_device_16d5_4a56, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_4a56, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16d5_4b47 = { ++ 0x4b47, pci_device_16d5_4b47, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_4b47, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16d5_4c40 = { ++ 0x4c40, pci_device_16d5_4c40, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_4c40, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16d5_4c60 = { ++ 0x4c60, pci_device_16d5_4c60, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_4c60, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16d5_4d4d = { ++ 0x4d4d, pci_device_16d5_4d4d, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_4d4d, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_16d5_4d4e = { + 0x4d4e, pci_device_16d5_4d4e, + #ifdef INIT_SUBSYS_INFO +@@ -109867,6 +116309,33 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_16d5_524d = { ++ 0x524d, pci_device_16d5_524d, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_524d, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16d5_5335 = { ++ 0x5335, pci_device_16d5_5335, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_5335, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_16d5_5456 = { ++ 0x5456, pci_device_16d5_5456, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16d5_5456, ++#else ++ NULL, ++#endif ++ 0 ++}; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_16e3_1e0f = { +@@ -109889,6 +116358,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_16e5_6300 = { ++ 0x6300, pci_device_16e5_6300, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_16e5_6300, ++#else ++ NULL, ++#endif ++ 0 ++}; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_16ec_00ff = { +@@ -109993,6 +116471,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1734_1085 = { ++ 0x1085, pci_device_1734_1085, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1734_1085, ++#else ++ NULL, ++#endif ++ 0 ++}; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_1737_0013 = { +@@ -110013,6 +116500,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1737_0029 = { ++ 0x0029, pci_device_1737_0029, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1737_0029, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_1737_1032 = { + 0x1032, pci_device_1737_1032, + #ifdef INIT_SUBSYS_INFO +@@ -110435,6 +116931,17 @@ static const pciDeviceInfo pci_dev_info_ + }; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_17db_0101 = { ++ 0x0101, pci_device_17db_0101, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_17db_0101, ++#else ++ NULL, ++#endif ++ 0 ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_17e4_0001 = { + 0x0001, pci_device_17e4_0001, + #ifdef INIT_SUBSYS_INFO +@@ -110484,6 +116991,53 @@ static const pciDeviceInfo pci_dev_info_ + }; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_17f3_6020 = { ++ 0x6020, pci_device_17f3_6020, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_17f3_6020, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_17f3_6030 = { ++ 0x6030, pci_device_17f3_6030, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_17f3_6030, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_17f3_6040 = { ++ 0x6040, pci_device_17f3_6040, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_17f3_6040, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_17f3_6060 = { ++ 0x6060, pci_device_17f3_6060, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_17f3_6060, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_17f3_6061 = { ++ 0x6061, pci_device_17f3_6061, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_17f3_6061, ++#else ++ NULL, ++#endif ++ 0 ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_17fe_2120 = { + 0x2120, pci_device_17fe_2120, + #ifdef INIT_SUBSYS_INFO +@@ -110578,8 +117132,26 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1814_e932 = { ++ 0xe932, pci_device_1814_e932, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1814_e932, ++#else ++ NULL, ++#endif ++ 0 ++}; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_1822_0001 = { ++ 0x0001, pci_device_1822_0001, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1822_0001, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_1822_4e35 = { + 0x4e35, pci_device_1822_4e35, + #ifdef INIT_SUBSYS_INFO +@@ -110718,6 +117290,46 @@ static const pciDeviceInfo pci_dev_info_ + }; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_186c_0614 = { ++ 0x0614, pci_device_186c_0614, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_186c_0614, ++#else ++ NULL, ++#endif ++ 0 ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_1876_a101 = { ++ 0xa101, pci_device_1876_a101, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1876_a101, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_1876_a102 = { ++ 0xa102, pci_device_1876_a102, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1876_a102, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_1876_a103 = { ++ 0xa103, pci_device_1876_a103, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1876_a103, ++#else ++ NULL, ++#endif ++ 0 ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_187e_3403 = { + 0x3403, pci_device_187e_3403, + #ifdef INIT_SUBSYS_INFO +@@ -110843,6 +117455,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_18ca_0047 = { ++ 0x0047, pci_device_18ca_0047, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_18ca_0047, ++#else ++ NULL, ++#endif ++ 0 ++}; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_18d2_3069 = { +@@ -111213,6 +117834,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_1969_2048 = { ++ 0x2048, pci_device_1969_2048, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1969_2048, ++#else ++ NULL, ++#endif ++ 0 ++}; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_196a_0101 = { +@@ -111233,6 +117863,26 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_196a_0105 = { ++ 0x0105, pci_device_196a_0105, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_196a_0105, ++#else ++ NULL, ++#endif ++ 0 ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_1971_1011 = { ++ 0x1011, pci_device_1971_1011, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1971_1011, ++#else ++ NULL, ++#endif ++ 0 ++}; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_197b_2360 = { +@@ -111280,6 +117930,35 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_197b_2368 = { ++ 0x2368, pci_device_197b_2368, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_197b_2368, ++#else ++ NULL, ++#endif ++ 0 ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_1982_1600 = { ++ 0x1600, pci_device_1982_1600, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1982_1600, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_1982_16ff = { ++ 0x16ff, pci_device_1982_16ff, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1982_16ff, ++#else ++ NULL, ++#endif ++ 0 ++}; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_1989_0001 = { +@@ -111302,6 +117981,26 @@ static const pciDeviceInfo pci_dev_info_ + }; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_19a2_0200 = { ++ 0x0200, pci_device_19a2_0200, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_19a2_0200, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_19a2_0201 = { ++ 0x0201, pci_device_19a2_0201, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_19a2_0201, ++#else ++ NULL, ++#endif ++ 0 ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_19ac_0001 = { + 0x0001, pci_device_19ac_0001, + #ifdef INIT_SUBSYS_INFO +@@ -111380,6 +118079,26 @@ static const pciDeviceInfo pci_dev_info_ + 0 + }; + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_1a07_0006 = { ++ 0x0006, pci_device_1a07_0006, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1a07_0006, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_1a07_0007 = { ++ 0x0007, pci_device_1a07_0007, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1a07_0007, ++#else ++ NULL, ++#endif ++ 0 ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_1a08_0000 = { + 0x0000, pci_device_1a08_0000, + #ifdef INIT_SUBSYS_INFO +@@ -111391,6 +118110,39 @@ static const pciDeviceInfo pci_dev_info_ + }; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_1a1d_1a17 = { ++ 0x1a17, pci_device_1a1d_1a17, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1a1d_1a17, ++#else ++ NULL, ++#endif ++ 0 ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_1a73_0001 = { ++ 0x0001, pci_device_1a73_0001, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1a73_0001, ++#else ++ NULL, ++#endif ++ 0 ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_1a8c_1100 = { ++ 0x1100, pci_device_1a8c_1100, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_1a8c_1100, ++#else ++ NULL, ++#endif ++ 0 ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_1c1c_0001 = { + 0x0001, pci_device_1c1c_0001, + #ifdef INIT_SUBSYS_INFO +@@ -111978,6 +118730,44 @@ static const pciDeviceInfo pci_dev_info_ + }; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_4040_0001 = { ++ 0x0001, pci_device_4040_0001, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_4040_0001, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_4040_0002 = { ++ 0x0002, pci_device_4040_0002, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_4040_0002, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_4040_0003 = { ++ 0x0003, pci_device_4040_0003, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_4040_0003, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_4040_0004 = { ++ 0x0004, pci_device_4040_0004, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_4040_0004, ++#else ++ NULL, ++#endif ++ 0 ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_4144_0044 = { + 0x0044, pci_device_4144_0044, + #ifdef INIT_SUBSYS_INFO +@@ -112093,6 +118883,17 @@ static const pciDeviceInfo pci_dev_info_ + }; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_4d56_0000 = { ++ 0x0000, pci_device_4d56_0000, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_4d56_0000, ++#else ++ NULL, ++#endif ++ 0 ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_4ddc_0100 = { + 0x0100, pci_device_4ddc_0100, + #ifdef INIT_SUBSYS_INFO +@@ -113013,6 +119814,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_5333_8e48 = { ++ 0x8e48, pci_device_5333_8e48, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_5333_8e48, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_5333_9102 = { + 0x9102, pci_device_5333_9102, + #ifdef INIT_SUBSYS_INFO +@@ -113087,6 +119897,17 @@ static const pciDeviceInfo pci_dev_info_ + }; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_5853_0001 = { ++ 0x0001, pci_device_5853_0001, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_5853_0001, ++#else ++ NULL, ++#endif ++ 0 ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_6374_6773 = { + 0x6773, pci_device_6374_6773, + #ifdef INIT_SUBSYS_INFO +@@ -114687,6 +121508,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_8086_10a5 = { ++ 0x10a5, pci_device_8086_10a5, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_10a5, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_8086_10b0 = { + 0x10b0, pci_device_8086_10b0, + #ifdef INIT_SUBSYS_INFO +@@ -114732,6 +121562,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_8086_10b6 = { ++ 0x10b6, pci_device_8086_10b6, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_10b6, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_8086_10b9 = { + 0x10b9, pci_device_8086_10b9, + #ifdef INIT_SUBSYS_INFO +@@ -114768,6 +121607,42 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_8086_10bd = { ++ 0x10bd, pci_device_8086_10bd, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_10bd, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_10c0 = { ++ 0x10c0, pci_device_8086_10c0, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_10c0, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_10c2 = { ++ 0x10c2, pci_device_8086_10c2, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_10c2, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_10c3 = { ++ 0x10c3, pci_device_8086_10c3, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_10c3, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_8086_10c4 = { + 0x10c4, pci_device_8086_10c4, + #ifdef INIT_SUBSYS_INFO +@@ -114786,6 +121661,42 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_8086_10c6 = { ++ 0x10c6, pci_device_8086_10c6, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_10c6, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_10c7 = { ++ 0x10c7, pci_device_8086_10c7, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_10c7, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_10d9 = { ++ 0x10d9, pci_device_8086_10d9, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_10d9, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_10da = { ++ 0x10da, pci_device_8086_10da, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_10da, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_8086_1107 = { + 0x1107, pci_device_8086_1107, + #ifdef INIT_SUBSYS_INFO +@@ -117882,10 +124793,64 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; +-static const pciDeviceInfo pci_dev_info_8086_2910 = { +- 0x2910, pci_device_8086_2910, ++static const pciDeviceInfo pci_dev_info_8086_2911 = { ++ 0x2911, pci_device_8086_2911, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_2911, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_2912 = { ++ 0x2912, pci_device_8086_2912, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_2912, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_2914 = { ++ 0x2914, pci_device_8086_2914, + #ifdef INIT_SUBSYS_INFO +- pci_ss_list_8086_2910, ++ pci_ss_list_8086_2914, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_2916 = { ++ 0x2916, pci_device_8086_2916, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_2916, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_2917 = { ++ 0x2917, pci_device_8086_2917, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_2917, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_2918 = { ++ 0x2918, pci_device_8086_2918, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_2918, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_2919 = { ++ 0x2919, pci_device_8086_2919, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_2919, + #else + NULL, + #endif +@@ -117954,6 +124919,24 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_8086_2929 = { ++ 0x2929, pci_device_8086_2929, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_2929, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_292c = { ++ 0x292c, pci_device_8086_292c, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_292c, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_8086_292d = { + 0x292d, pci_device_8086_292d, + #ifdef INIT_SUBSYS_INFO +@@ -118530,6 +125513,78 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_8086_29d0 = { ++ 0x29d0, pci_device_8086_29d0, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_29d0, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_29d1 = { ++ 0x29d1, pci_device_8086_29d1, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_29d1, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_29d2 = { ++ 0x29d2, pci_device_8086_29d2, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_29d2, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_29d3 = { ++ 0x29d3, pci_device_8086_29d3, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_29d3, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_29d4 = { ++ 0x29d4, pci_device_8086_29d4, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_29d4, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_29d5 = { ++ 0x29d5, pci_device_8086_29d5, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_29d5, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_29d6 = { ++ 0x29d6, pci_device_8086_29d6, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_29d6, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_29d7 = { ++ 0x29d7, pci_device_8086_29d7, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_29d7, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_8086_29e0 = { + 0x29e0, pci_device_8086_29e0, + #ifdef INIT_SUBSYS_INFO +@@ -118728,19 +125783,46 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; +-static const pciDeviceInfo pci_dev_info_8086_3092 = { +- 0x3092, pci_device_8086_3092, ++static const pciDeviceInfo pci_dev_info_8086_3200 = { ++ 0x3200, pci_device_8086_3200, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_3200, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_3313 = { ++ 0x3313, pci_device_8086_3313, + #ifdef INIT_SUBSYS_INFO +- pci_ss_list_8086_3092, ++ pci_ss_list_8086_3313, + #else + NULL, + #endif + 0 + }; +-static const pciDeviceInfo pci_dev_info_8086_3200 = { +- 0x3200, pci_device_8086_3200, ++static const pciDeviceInfo pci_dev_info_8086_331b = { ++ 0x331b, pci_device_8086_331b, + #ifdef INIT_SUBSYS_INFO +- pci_ss_list_8086_3200, ++ pci_ss_list_8086_331b, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_3331 = { ++ 0x3331, pci_device_8086_3331, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_3331, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_3339 = { ++ 0x3339, pci_device_8086_3339, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_3339, + #else + NULL, + #endif +@@ -118764,6 +125846,33 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_8086_3363 = { ++ 0x3363, pci_device_8086_3363, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_3363, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_33c3 = { ++ 0x33c3, pci_device_8086_33c3, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_33c3, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_33cb = { ++ 0x33cb, pci_device_8086_33cb, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_33cb, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_8086_3500 = { + 0x3500, pci_device_8086_3500, + #ifdef INIT_SUBSYS_INFO +@@ -119259,6 +126368,24 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_8086_4001 = { ++ 0x4001, pci_device_8086_4001, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_4001, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_4003 = { ++ 0x4003, pci_device_8086_4003, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_4003, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_8086_4008 = { + 0x4008, pci_device_8086_4008, + #ifdef INIT_SUBSYS_INFO +@@ -119466,6 +126593,33 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_8086_4229 = { ++ 0x4229, pci_device_8086_4229, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_4229, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_4230 = { ++ 0x4230, pci_device_8086_4230, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_4230, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_444e = { ++ 0x444e, pci_device_8086_444e, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_444e, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_8086_5001 = { + 0x5001, pci_device_8086_5001, + #ifdef INIT_SUBSYS_INFO +@@ -119475,6 +126629,294 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_8086_5020 = { ++ 0x5020, pci_device_8086_5020, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_5020, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_5021 = { ++ 0x5021, pci_device_8086_5021, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_5021, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_5023 = { ++ 0x5023, pci_device_8086_5023, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_5023, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_5024 = { ++ 0x5024, pci_device_8086_5024, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_5024, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_5025 = { ++ 0x5025, pci_device_8086_5025, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_5025, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_5028 = { ++ 0x5028, pci_device_8086_5028, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_5028, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_5029 = { ++ 0x5029, pci_device_8086_5029, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_5029, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_502a = { ++ 0x502a, pci_device_8086_502a, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_502a, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_502b = { ++ 0x502b, pci_device_8086_502b, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_502b, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_5031 = { ++ 0x5031, pci_device_8086_5031, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_5031, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_5032 = { ++ 0x5032, pci_device_8086_5032, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_5032, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_5033 = { ++ 0x5033, pci_device_8086_5033, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_5033, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_5035 = { ++ 0x5035, pci_device_8086_5035, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_5035, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_5037 = { ++ 0x5037, pci_device_8086_5037, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_5037, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_5039 = { ++ 0x5039, pci_device_8086_5039, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_5039, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_503a = { ++ 0x503a, pci_device_8086_503a, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_503a, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_503b = { ++ 0x503b, pci_device_8086_503b, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_503b, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_503c = { ++ 0x503c, pci_device_8086_503c, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_503c, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_503d = { ++ 0x503d, pci_device_8086_503d, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_503d, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_503e = { ++ 0x503e, pci_device_8086_503e, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_503e, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_5040 = { ++ 0x5040, pci_device_8086_5040, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_5040, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_5041 = { ++ 0x5041, pci_device_8086_5041, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_5041, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_5042 = { ++ 0x5042, pci_device_8086_5042, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_5042, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_5043 = { ++ 0x5043, pci_device_8086_5043, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_5043, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_5044 = { ++ 0x5044, pci_device_8086_5044, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_5044, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_5045 = { ++ 0x5045, pci_device_8086_5045, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_5045, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_5046 = { ++ 0x5046, pci_device_8086_5046, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_5046, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_5047 = { ++ 0x5047, pci_device_8086_5047, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_5047, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_5048 = { ++ 0x5048, pci_device_8086_5048, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_5048, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_5049 = { ++ 0x5049, pci_device_8086_5049, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_5049, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_504a = { ++ 0x504a, pci_device_8086_504a, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_504a, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8086_504b = { ++ 0x504b, pci_device_8086_504b, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_504b, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_8086_5200 = { + 0x5200, pci_device_8086_5200, + #ifdef INIT_SUBSYS_INFO +@@ -120015,6 +127457,15 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_8086_8002 = { ++ 0x8002, pci_device_8086_8002, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8086_8002, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_8086_84c4 = { + 0x84c4, pci_device_8086_84c4, + #ifdef INIT_SUBSYS_INFO +@@ -120232,6 +127683,55 @@ static const pciDeviceInfo pci_dev_info_ + 0 + }; + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_80ee_beef = { ++ 0xbeef, pci_device_80ee_beef, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_80ee_beef, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_80ee_cafe = { ++ 0xcafe, pci_device_80ee_cafe, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_80ee_cafe, ++#else ++ NULL, ++#endif ++ 0 ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_8384_7618 = { ++ 0x7618, pci_device_8384_7618, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8384_7618, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8384_7670 = { ++ 0x7670, pci_device_8384_7670, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8384_7670, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_8384_7672 = { ++ 0x7672, pci_device_8384_7672, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_8384_7672, ++#else ++ NULL, ++#endif ++ 0 ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_8686_1010 = { + 0x1010, pci_device_8686_1010, + #ifdef INIT_SUBSYS_INFO +@@ -121115,6 +128615,24 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_9005_0092 = { ++ 0x0092, pci_device_9005_0092, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_9005_0092, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_9005_0093 = { ++ 0x0093, pci_device_9005_0093, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_9005_0093, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_9005_00c0 = { + 0x00c0, pci_device_9005_00c0, + #ifdef INIT_SUBSYS_INFO +@@ -121776,6 +129294,15 @@ static const pciDeviceInfo pci_dev_info_ + }; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo pci_dev_info_d161_0120 = { ++ 0x0120, pci_device_d161_0120, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_d161_0120, ++#else ++ NULL, ++#endif ++ 0 ++}; + static const pciDeviceInfo pci_dev_info_d161_0205 = { + 0x0205, pci_device_d161_0205, + #ifdef INIT_SUBSYS_INFO +@@ -121803,15 +129330,6 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; +-static const pciDeviceInfo pci_dev_info_d161_0406 = { +- 0x0406, pci_device_d161_0406, +-#ifdef INIT_SUBSYS_INFO +- pci_ss_list_d161_0406, +-#else +- NULL, +-#endif +- 0 +-}; + static const pciDeviceInfo pci_dev_info_d161_0410 = { + 0x0410, pci_device_d161_0410, + #ifdef INIT_SUBSYS_INFO +@@ -121821,10 +129339,10 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; +-static const pciDeviceInfo pci_dev_info_d161_0411 = { +- 0x0411, pci_device_d161_0411, ++static const pciDeviceInfo pci_dev_info_d161_0800 = { ++ 0x0800, pci_device_d161_0800, + #ifdef INIT_SUBSYS_INFO +- pci_ss_list_d161_0411, ++ pci_ss_list_d161_0800, + #else + NULL, + #endif +@@ -121839,6 +129357,24 @@ static const pciDeviceInfo pci_dev_info_ + #endif + 0 + }; ++static const pciDeviceInfo pci_dev_info_d161_3400 = { ++ 0x3400, pci_device_d161_3400, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_d161_3400, ++#else ++ NULL, ++#endif ++ 0 ++}; ++static const pciDeviceInfo pci_dev_info_d161_b410 = { ++ 0xb410, pci_device_d161_b410, ++#ifdef INIT_SUBSYS_INFO ++ pci_ss_list_d161_b410, ++#else ++ NULL, ++#endif ++ 0 ++}; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo pci_dev_info_d4d4_0601 = { +@@ -122376,6 +129912,7 @@ static const pciDeviceInfo *pci_dev_list + NULL + }; + #endif ++#define pci_dev_list_02e0 NULL + #define pci_dev_list_0315 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_0357[] = { +@@ -122414,6 +129951,12 @@ static const pciDeviceInfo *pci_dev_list + }; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo *pci_dev_list_058f[] = { ++ &pci_dev_info_058f_9254, ++ NULL ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_05a9[] = { + &pci_dev_info_05a9_8519, + NULL +@@ -122470,6 +130013,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_093a_010e, + &pci_dev_info_093a_010f, + &pci_dev_info_093a_2468, ++ &pci_dev_info_093a_2600, + &pci_dev_info_093a_2603, + &pci_dev_info_093a_2608, + NULL +@@ -122647,6 +130191,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_1000_0054, + &pci_dev_info_1000_0055, + &pci_dev_info_1000_0056, ++ &pci_dev_info_1000_0057, + &pci_dev_info_1000_0058, + &pci_dev_info_1000_005a, + &pci_dev_info_1000_005c, +@@ -123064,6 +130609,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_1002_715f, + &pci_dev_info_1002_7162, + &pci_dev_info_1002_7166, ++ &pci_dev_info_1002_716e, + &pci_dev_info_1002_7172, + &pci_dev_info_1002_7173, + &pci_dev_info_1002_7180, +@@ -123089,11 +130635,13 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_1002_71c6, + &pci_dev_info_1002_71c7, + &pci_dev_info_1002_71ce, ++ &pci_dev_info_1002_71d4, + &pci_dev_info_1002_71d5, + &pci_dev_info_1002_71d6, + &pci_dev_info_1002_71de, + &pci_dev_info_1002_71e0, + &pci_dev_info_1002_71e2, ++ &pci_dev_info_1002_71e6, + &pci_dev_info_1002_71e7, + &pci_dev_info_1002_7210, + &pci_dev_info_1002_7211, +@@ -123127,6 +130675,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_1002_7834, + &pci_dev_info_1002_7835, + &pci_dev_info_1002_7838, ++ &pci_dev_info_1002_7919, + &pci_dev_info_1002_791e, + &pci_dev_info_1002_791f, + &pci_dev_info_1002_793f, +@@ -123360,6 +130909,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_1014_01bd, + &pci_dev_info_1014_01c1, + &pci_dev_info_1014_01e6, ++ &pci_dev_info_1014_01ef, + &pci_dev_info_1014_01ff, + &pci_dev_info_1014_0219, + &pci_dev_info_1014_021b, +@@ -123374,6 +130924,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_1014_0302, + &pci_dev_info_1014_0308, + &pci_dev_info_1014_0314, ++ &pci_dev_info_1014_0339, + &pci_dev_info_1014_3022, + &pci_dev_info_1014_4022, + &pci_dev_info_1014_ffff, +@@ -123393,6 +130944,7 @@ static const pciDeviceInfo *pci_dev_list + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_101a[] = { + &pci_dev_info_101a_0005, ++ &pci_dev_info_101a_1dc1, + NULL + }; + #endif +@@ -123436,6 +130988,16 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_1022_1101, + &pci_dev_info_1022_1102, + &pci_dev_info_1022_1103, ++ &pci_dev_info_1022_1200, ++ &pci_dev_info_1022_1201, ++ &pci_dev_info_1022_1202, ++ &pci_dev_info_1022_1203, ++ &pci_dev_info_1022_1204, ++ &pci_dev_info_1022_1300, ++ &pci_dev_info_1022_1301, ++ &pci_dev_info_1022_1302, ++ &pci_dev_info_1022_1303, ++ &pci_dev_info_1022_1304, + &pci_dev_info_1022_2000, + &pci_dev_info_1022_2001, + &pci_dev_info_1022_2003, +@@ -123624,7 +131186,6 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_1028_0013, + &pci_dev_info_1028_0014, + &pci_dev_info_1028_0015, +- &pci_dev_info_1028_1f03, + NULL + }; + #define pci_dev_list_1029 NULL +@@ -123914,6 +131475,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_103c_12fa, + &pci_dev_info_103c_1302, + &pci_dev_info_103c_1303, ++ &pci_dev_info_103c_1361, + &pci_dev_info_103c_2910, + &pci_dev_info_103c_2925, + &pci_dev_info_103c_3080, +@@ -123921,6 +131483,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_103c_30b5, + &pci_dev_info_103c_3220, + &pci_dev_info_103c_3230, ++ &pci_dev_info_103c_3238, + &pci_dev_info_103c_4030, + &pci_dev_info_103c_4031, + &pci_dev_info_103c_4037, +@@ -124168,7 +131731,13 @@ static const pciDeviceInfo *pci_dev_list + #define pci_dev_list_1051 NULL + #define pci_dev_list_1052 NULL + #define pci_dev_list_1053 NULL +-#define pci_dev_list_1054 NULL ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo *pci_dev_list_1054[] = { ++ &pci_dev_info_1054_3011, ++ &pci_dev_info_1054_3012, ++ NULL ++}; ++#endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_1055[] = { + &pci_dev_info_1055_9130, +@@ -124190,6 +131759,8 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_1057_0012, + &pci_dev_info_1057_0100, + &pci_dev_info_1057_0431, ++ &pci_dev_info_1057_1073, ++ &pci_dev_info_1057_1219, + &pci_dev_info_1057_1801, + &pci_dev_info_1057_18c0, + &pci_dev_info_1057_18c1, +@@ -124258,7 +131829,12 @@ static const pciDeviceInfo *pci_dev_list + NULL + }; + #endif +-#define pci_dev_list_105b NULL ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo *pci_dev_list_105b[] = { ++ &pci_dev_info_105b_0c4d, ++ NULL ++}; ++#endif + #define pci_dev_list_105c NULL + static const pciDeviceInfo *pci_dev_list_105d[] = { + &pci_dev_info_105d_2309, +@@ -124611,6 +132187,8 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_108e_2bad, + &pci_dev_info_108e_5000, + &pci_dev_info_108e_5043, ++ &pci_dev_info_108e_676e, ++ &pci_dev_info_108e_7063, + &pci_dev_info_108e_8000, + &pci_dev_info_108e_8001, + &pci_dev_info_108e_8002, +@@ -124861,6 +132439,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_10b5_1147, + &pci_dev_info_10b5_2540, + &pci_dev_info_10b5_2724, ++ &pci_dev_info_10b5_6520, + &pci_dev_info_10b5_6540, + &pci_dev_info_10b5_6541, + &pci_dev_info_10b5_6542, +@@ -125264,6 +132843,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_10de_0091, + &pci_dev_info_10de_0092, + &pci_dev_info_10de_0093, ++ &pci_dev_info_10de_0095, + &pci_dev_info_10de_0098, + &pci_dev_info_10de_0099, + &pci_dev_info_10de_009d, +@@ -125327,6 +132907,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_10de_0140, + &pci_dev_info_10de_0141, + &pci_dev_info_10de_0142, ++ &pci_dev_info_10de_0143, + &pci_dev_info_10de_0144, + &pci_dev_info_10de_0145, + &pci_dev_info_10de_0146, +@@ -125352,6 +132933,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_10de_0167, + &pci_dev_info_10de_0168, + &pci_dev_info_10de_0169, ++ &pci_dev_info_10de_016a, + &pci_dev_info_10de_0170, + &pci_dev_info_10de_0171, + &pci_dev_info_10de_0172, +@@ -125369,6 +132951,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_10de_0181, + &pci_dev_info_10de_0182, + &pci_dev_info_10de_0183, ++ &pci_dev_info_10de_0184, + &pci_dev_info_10de_0185, + &pci_dev_info_10de_0186, + &pci_dev_info_10de_0187, +@@ -125377,6 +132960,11 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_10de_018b, + &pci_dev_info_10de_018c, + &pci_dev_info_10de_018d, ++ &pci_dev_info_10de_0191, ++ &pci_dev_info_10de_0193, ++ &pci_dev_info_10de_0194, ++ &pci_dev_info_10de_019d, ++ &pci_dev_info_10de_019e, + &pci_dev_info_10de_01a0, + &pci_dev_info_10de_01a4, + &pci_dev_info_10de_01ab, +@@ -125393,10 +132981,13 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_10de_01c2, + &pci_dev_info_10de_01c3, + &pci_dev_info_10de_01d1, ++ &pci_dev_info_10de_01d3, + &pci_dev_info_10de_01d6, + &pci_dev_info_10de_01d7, + &pci_dev_info_10de_01d8, + &pci_dev_info_10de_01da, ++ &pci_dev_info_10de_01dc, ++ &pci_dev_info_10de_01dd, + &pci_dev_info_10de_01de, + &pci_dev_info_10de_01df, + &pci_dev_info_10de_01e0, +@@ -125417,6 +133008,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_10de_0215, + &pci_dev_info_10de_0218, + &pci_dev_info_10de_0221, ++ &pci_dev_info_10de_0222, + &pci_dev_info_10de_0240, + &pci_dev_info_10de_0241, + &pci_dev_info_10de_0242, +@@ -125471,6 +133063,10 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_10de_0290, + &pci_dev_info_10de_0291, + &pci_dev_info_10de_0292, ++ &pci_dev_info_10de_0293, ++ &pci_dev_info_10de_0294, ++ &pci_dev_info_10de_0295, ++ &pci_dev_info_10de_0297, + &pci_dev_info_10de_0298, + &pci_dev_info_10de_0299, + &pci_dev_info_10de_029a, +@@ -125480,7 +133076,9 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_10de_029e, + &pci_dev_info_10de_029f, + &pci_dev_info_10de_02a0, ++ &pci_dev_info_10de_02e0, + &pci_dev_info_10de_02e1, ++ &pci_dev_info_10de_02e2, + &pci_dev_info_10de_02f0, + &pci_dev_info_10de_02f1, + &pci_dev_info_10de_02f2, +@@ -125573,12 +133171,21 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_10de_0377, + &pci_dev_info_10de_0378, + &pci_dev_info_10de_037a, ++ &pci_dev_info_10de_037c, + &pci_dev_info_10de_037e, + &pci_dev_info_10de_037f, ++ &pci_dev_info_10de_0390, + &pci_dev_info_10de_0391, + &pci_dev_info_10de_0392, + &pci_dev_info_10de_0393, ++ &pci_dev_info_10de_0394, ++ &pci_dev_info_10de_0395, ++ &pci_dev_info_10de_0397, + &pci_dev_info_10de_0398, ++ &pci_dev_info_10de_0399, ++ &pci_dev_info_10de_039a, ++ &pci_dev_info_10de_039b, ++ &pci_dev_info_10de_039c, + &pci_dev_info_10de_039e, + &pci_dev_info_10de_03a0, + &pci_dev_info_10de_03a1, +@@ -125635,6 +133242,20 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_10de_03f5, + &pci_dev_info_10de_03f6, + &pci_dev_info_10de_03f7, ++ &pci_dev_info_10de_0400, ++ &pci_dev_info_10de_0402, ++ &pci_dev_info_10de_0407, ++ &pci_dev_info_10de_040b, ++ &pci_dev_info_10de_0421, ++ &pci_dev_info_10de_0422, ++ &pci_dev_info_10de_0423, ++ &pci_dev_info_10de_0425, ++ &pci_dev_info_10de_0426, ++ &pci_dev_info_10de_0427, ++ &pci_dev_info_10de_0428, ++ &pci_dev_info_10de_0429, ++ &pci_dev_info_10de_042a, ++ &pci_dev_info_10de_042b, + &pci_dev_info_10de_0440, + &pci_dev_info_10de_0441, + &pci_dev_info_10de_0442, +@@ -125666,11 +133287,16 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_10de_045d, + &pci_dev_info_10de_045e, + &pci_dev_info_10de_045f, ++ &pci_dev_info_10de_055c, ++ &pci_dev_info_10de_055d, ++ &pci_dev_info_10de_c615, + NULL + }; + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_10df[] = { + &pci_dev_info_10df_1ae5, ++ &pci_dev_info_10df_f011, ++ &pci_dev_info_10df_f015, + &pci_dev_info_10df_f085, + &pci_dev_info_10df_f095, + &pci_dev_info_10df_f098, +@@ -125682,6 +133308,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_10df_f0e1, + &pci_dev_info_10df_f0e5, + &pci_dev_info_10df_f0f5, ++ &pci_dev_info_10df_f100, + &pci_dev_info_10df_f700, + &pci_dev_info_10df_f701, + &pci_dev_info_10df_f800, +@@ -125696,6 +133323,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_10df_fc00, + &pci_dev_info_10df_fc10, + &pci_dev_info_10df_fc20, ++ &pci_dev_info_10df_fc40, + &pci_dev_info_10df_fd00, + &pci_dev_info_10df_fe00, + &pci_dev_info_10df_ff00, +@@ -125757,10 +133385,12 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_10e8_80d7, + &pci_dev_info_10e8_80d9, + &pci_dev_info_10e8_80da, ++ &pci_dev_info_10e8_80fc, + &pci_dev_info_10e8_811a, + &pci_dev_info_10e8_814c, + &pci_dev_info_10e8_8170, + &pci_dev_info_10e8_81e6, ++ &pci_dev_info_10e8_828d, + &pci_dev_info_10e8_8291, + &pci_dev_info_10e8_82c4, + &pci_dev_info_10e8_82c5, +@@ -125769,6 +133399,8 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_10e8_82ca, + &pci_dev_info_10e8_82db, + &pci_dev_info_10e8_82e2, ++ &pci_dev_info_10e8_8406, ++ &pci_dev_info_10e8_8407, + &pci_dev_info_10e8_8851, + NULL + }; +@@ -125796,7 +133428,14 @@ static const pciDeviceInfo *pci_dev_list + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_10ec[] = { + &pci_dev_info_10ec_0139, ++ &pci_dev_info_10ec_0260, ++ &pci_dev_info_10ec_0261, ++ &pci_dev_info_10ec_0280, ++ &pci_dev_info_10ec_0861, ++ &pci_dev_info_10ec_0862, ++ &pci_dev_info_10ec_0880, + &pci_dev_info_10ec_0883, ++ &pci_dev_info_10ec_0888, + &pci_dev_info_10ec_8029, + &pci_dev_info_10ec_8129, + &pci_dev_info_10ec_8136, +@@ -125831,6 +133470,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_10ee_3fc4, + &pci_dev_info_10ee_3fc5, + &pci_dev_info_10ee_3fc6, ++ &pci_dev_info_10ee_8380, + &pci_dev_info_10ee_8381, + &pci_dev_info_10ee_d154, + NULL +@@ -125924,6 +133564,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_1103_0007, + &pci_dev_info_1103_0008, + &pci_dev_info_1103_0009, ++ &pci_dev_info_1103_2340, + NULL + }; + #endif +@@ -125947,6 +133588,7 @@ static const pciDeviceInfo *pci_dev_list + static const pciDeviceInfo *pci_dev_list_1106[] = { + &pci_dev_info_1106_0102, + &pci_dev_info_1106_0130, ++ &pci_dev_info_1106_0198, + &pci_dev_info_1106_0204, + &pci_dev_info_1106_0208, + &pci_dev_info_1106_0238, +@@ -126009,6 +133651,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_1106_1364, + &pci_dev_info_1106_1571, + &pci_dev_info_1106_1595, ++ &pci_dev_info_1106_2106, + &pci_dev_info_1106_2204, + &pci_dev_info_1106_2208, + &pci_dev_info_1106_2238, +@@ -126068,6 +133711,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_1106_3148, + &pci_dev_info_1106_3149, + &pci_dev_info_1106_3156, ++ &pci_dev_info_1106_3157, + &pci_dev_info_1106_3164, + &pci_dev_info_1106_3168, + &pci_dev_info_1106_3177, +@@ -126080,6 +133724,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_1106_3213, + &pci_dev_info_1106_3218, + &pci_dev_info_1106_3227, ++ &pci_dev_info_1106_3230, + &pci_dev_info_1106_3238, + &pci_dev_info_1106_3249, + &pci_dev_info_1106_324a, +@@ -126087,6 +133732,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_1106_324e, + &pci_dev_info_1106_3258, + &pci_dev_info_1106_3259, ++ &pci_dev_info_1106_3260, + &pci_dev_info_1106_3269, + &pci_dev_info_1106_3282, + &pci_dev_info_1106_3287, +@@ -126098,10 +133744,13 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_1106_3336, + &pci_dev_info_1106_3337, + &pci_dev_info_1106_3340, ++ &pci_dev_info_1106_3343, + &pci_dev_info_1106_3344, + &pci_dev_info_1106_3349, + &pci_dev_info_1106_3351, + &pci_dev_info_1106_3364, ++ &pci_dev_info_1106_3371, ++ &pci_dev_info_1106_3372, + &pci_dev_info_1106_337a, + &pci_dev_info_1106_337b, + &pci_dev_info_1106_4149, +@@ -126128,13 +133777,16 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_1106_5238, + &pci_dev_info_1106_5290, + &pci_dev_info_1106_5308, ++ &pci_dev_info_1106_5324, + &pci_dev_info_1106_5327, + &pci_dev_info_1106_5336, + &pci_dev_info_1106_5340, + &pci_dev_info_1106_5351, + &pci_dev_info_1106_5364, + &pci_dev_info_1106_6100, ++ &pci_dev_info_1106_6287, + &pci_dev_info_1106_6327, ++ &pci_dev_info_1106_6364, + &pci_dev_info_1106_7204, + &pci_dev_info_1106_7205, + &pci_dev_info_1106_7208, +@@ -126333,10 +133985,6 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_1119_000b, + &pci_dev_info_1119_000c, + &pci_dev_info_1119_000d, +- &pci_dev_info_1119_0010, +- &pci_dev_info_1119_0011, +- &pci_dev_info_1119_0012, +- &pci_dev_info_1119_0013, + &pci_dev_info_1119_0100, + &pci_dev_info_1119_0101, + &pci_dev_info_1119_0102, +@@ -126393,6 +134041,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_1119_0261, + &pci_dev_info_1119_02ff, + &pci_dev_info_1119_0300, ++ &pci_dev_info_1119_0301, + NULL + }; + #endif +@@ -126535,6 +134184,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_1133_e028, + &pci_dev_info_1133_e02a, + &pci_dev_info_1133_e02c, ++ &pci_dev_info_1133_e032, + NULL + }; + #endif +@@ -126664,6 +134314,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_114f_000d, + &pci_dev_info_114f_0011, + &pci_dev_info_114f_0012, ++ &pci_dev_info_114f_0013, + &pci_dev_info_114f_0014, + &pci_dev_info_114f_0015, + &pci_dev_info_114f_0016, +@@ -126800,6 +134451,8 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_1166_0227, + &pci_dev_info_1166_0230, + &pci_dev_info_1166_0234, ++ &pci_dev_info_1166_0235, ++ &pci_dev_info_1166_0238, + &pci_dev_info_1166_0240, + &pci_dev_info_1166_0241, + &pci_dev_info_1166_0242, +@@ -126888,6 +134541,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_1180_0592, + &pci_dev_info_1180_0811, + &pci_dev_info_1180_0822, ++ &pci_dev_info_1180_0832, + &pci_dev_info_1180_0841, + &pci_dev_info_1180_0852, + NULL +@@ -127051,10 +134705,13 @@ static const pciDeviceInfo *pci_dev_list + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_11ab[] = { + &pci_dev_info_11ab_0146, ++ &pci_dev_info_11ab_0f53, ++ &pci_dev_info_11ab_11ab, + &pci_dev_info_11ab_138f, + &pci_dev_info_11ab_1fa6, + &pci_dev_info_11ab_1fa7, + &pci_dev_info_11ab_1faa, ++ &pci_dev_info_11ab_2a01, + &pci_dev_info_11ab_4320, + &pci_dev_info_11ab_4340, + &pci_dev_info_11ab_4341, +@@ -127071,6 +134728,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_11ab_4361, + &pci_dev_info_11ab_4362, + &pci_dev_info_11ab_4363, ++ &pci_dev_info_11ab_4364, + &pci_dev_info_11ab_4611, + &pci_dev_info_11ab_4620, + &pci_dev_info_11ab_4801, +@@ -127081,6 +134739,10 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_11ab_5081, + &pci_dev_info_11ab_6041, + &pci_dev_info_11ab_6081, ++ &pci_dev_info_11ab_6101, ++ &pci_dev_info_11ab_6141, ++ &pci_dev_info_11ab_6145, ++ &pci_dev_info_11ab_6450, + &pci_dev_info_11ab_6460, + &pci_dev_info_11ab_6480, + &pci_dev_info_11ab_6485, +@@ -127143,6 +134805,9 @@ static const pciDeviceInfo *pci_dev_list + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_11bd[] = { + &pci_dev_info_11bd_002e, ++ &pci_dev_info_11bd_0040, ++ &pci_dev_info_11bd_0041, ++ &pci_dev_info_11bd_0042, + &pci_dev_info_11bd_bede, + NULL + }; +@@ -127185,6 +134850,8 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_11c1_0480, + &pci_dev_info_11c1_048c, + &pci_dev_info_11c1_048f, ++ &pci_dev_info_11c1_1040, ++ &pci_dev_info_11c1_2600, + &pci_dev_info_11c1_5801, + &pci_dev_info_11c1_5802, + &pci_dev_info_11c1_5803, +@@ -127245,10 +134912,14 @@ static const pciDeviceInfo *pci_dev_list + #define pci_dev_list_11d3 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_11d4[] = { ++ &pci_dev_info_11d4_0078, + &pci_dev_info_11d4_1535, + &pci_dev_info_11d4_1805, + &pci_dev_info_11d4_1889, ++ &pci_dev_info_11d4_1981, ++ &pci_dev_info_11d4_1983, + &pci_dev_info_11d4_1986, ++ &pci_dev_info_11d4_198b, + &pci_dev_info_11d4_5340, + NULL + }; +@@ -127834,6 +135505,7 @@ static const pciDeviceInfo *pci_dev_list + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_1283[] = { + &pci_dev_info_1283_673a, ++ &pci_dev_info_1283_8152, + &pci_dev_info_1283_8211, + &pci_dev_info_1283_8212, + &pci_dev_info_1283_8330, +@@ -127883,7 +135555,10 @@ static const pciDeviceInfo *pci_dev_list + #define pci_dev_list_128f NULL + #define pci_dev_list_1290 NULL + #define pci_dev_list_1291 NULL +-#define pci_dev_list_1292 NULL ++static const pciDeviceInfo *pci_dev_list_1292[] = { ++ &pci_dev_info_1292_fc02, ++ NULL ++}; + #define pci_dev_list_1293 NULL + #define pci_dev_list_1294 NULL + #define pci_dev_list_1295 NULL +@@ -127920,8 +135595,12 @@ static const pciDeviceInfo *pci_dev_list + #define pci_dev_list_12aa NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_12ab[] = { ++ &pci_dev_info_12ab_0000, + &pci_dev_info_12ab_0002, ++ &pci_dev_info_12ab_2300, + &pci_dev_info_12ab_3000, ++ &pci_dev_info_12ab_fff3, ++ &pci_dev_info_12ab_ffff, + NULL + }; + #endif +@@ -128060,6 +135739,7 @@ static const pciDeviceInfo *pci_dev_list + #define pci_dev_list_12d7 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_12d8[] = { ++ &pci_dev_info_12d8_01a7, + &pci_dev_info_12d8_8150, + NULL + }; +@@ -128498,6 +136178,8 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_1374_0038, + &pci_dev_info_1374_0039, + &pci_dev_info_1374_003a, ++ &pci_dev_info_1374_003b, ++ &pci_dev_info_1374_003c, + NULL + }; + #endif +@@ -128540,6 +136222,7 @@ static const pciDeviceInfo *pci_dev_list + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_1385[] = { + &pci_dev_info_1385_0013, ++ &pci_dev_info_1385_006b, + &pci_dev_info_1385_311a, + &pci_dev_info_1385_4100, + &pci_dev_info_1385_4105, +@@ -128593,6 +136276,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_1393_1040, + &pci_dev_info_1393_1141, + &pci_dev_info_1393_1680, ++ &pci_dev_info_1393_1681, + &pci_dev_info_1393_2040, + &pci_dev_info_1393_2180, + &pci_dev_info_1393_3200, +@@ -128612,6 +136296,9 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_1397_08b4, + &pci_dev_info_1397_16b8, + &pci_dev_info_1397_2bd0, ++ &pci_dev_info_1397_30b1, ++ &pci_dev_info_1397_b700, ++ &pci_dev_info_1397_f001, + NULL + }; + #endif +@@ -128646,6 +136333,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_13a3_001d, + &pci_dev_info_13a3_0020, + &pci_dev_info_13a3_0026, ++ &pci_dev_info_13a3_002e, + NULL + }; + #endif +@@ -128699,6 +136387,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_13c1_1001, + &pci_dev_info_13c1_1002, + &pci_dev_info_13c1_1003, ++ &pci_dev_info_13c1_1004, + NULL + }; + #endif +@@ -128745,7 +136434,12 @@ static const pciDeviceInfo *pci_dev_list + }; + #endif + #define pci_dev_list_13d2 NULL +-#define pci_dev_list_13d3 NULL ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo *pci_dev_list_13d3[] = { ++ &pci_dev_info_13d3_3219, ++ NULL ++}; ++#endif + #define pci_dev_list_13d4 NULL + #define pci_dev_list_13d5 NULL + #define pci_dev_list_13d6 NULL +@@ -128809,6 +136503,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_13f6_0101, + &pci_dev_info_13f6_0111, + &pci_dev_info_13f6_0211, ++ &pci_dev_info_13f6_9880, + NULL + }; + #endif +@@ -128933,6 +136628,7 @@ static const pciDeviceInfo *pci_dev_list + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_1425[] = { + &pci_dev_info_1425_000b, ++ &pci_dev_info_1425_000c, + NULL + }; + #endif +@@ -129029,6 +136725,7 @@ static const pciDeviceInfo *pci_dev_list + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_1458[] = { + &pci_dev_info_1458_0c11, ++ &pci_dev_info_1458_9001, + &pci_dev_info_1458_e911, + NULL + }; +@@ -129048,6 +136745,9 @@ static const pciDeviceInfo *pci_dev_list + #define pci_dev_list_1460 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_1461[] = { ++ &pci_dev_info_1461_a3ce, ++ &pci_dev_info_1461_a3cf, ++ &pci_dev_info_1461_a836, + &pci_dev_info_1461_f436, + NULL + }; +@@ -129059,6 +136759,8 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_1462_6825, + &pci_dev_info_1462_6834, + &pci_dev_info_1462_7125, ++ &pci_dev_info_1462_7235, ++ &pci_dev_info_1462_7242, + &pci_dev_info_1462_8725, + &pci_dev_info_1462_9000, + &pci_dev_info_1462_9110, +@@ -129067,6 +136769,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_1462_9510, + &pci_dev_info_1462_9511, + &pci_dev_info_1462_9591, ++ &pci_dev_info_1462_b834, + NULL + }; + #endif +@@ -129338,6 +137041,8 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_14e4_0816, + &pci_dev_info_14e4_1600, + &pci_dev_info_14e4_1601, ++ &pci_dev_info_14e4_1639, ++ &pci_dev_info_14e4_163a, + &pci_dev_info_14e4_1644, + &pci_dev_info_14e4_1645, + &pci_dev_info_14e4_1646, +@@ -129349,6 +137054,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_14e4_1653, + &pci_dev_info_14e4_1654, + &pci_dev_info_14e4_1659, ++ &pci_dev_info_14e4_165a, + &pci_dev_info_14e4_165d, + &pci_dev_info_14e4_165e, + &pci_dev_info_14e4_1668, +@@ -129358,6 +137064,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_14e4_166e, + &pci_dev_info_14e4_1672, + &pci_dev_info_14e4_1673, ++ &pci_dev_info_14e4_1674, + &pci_dev_info_14e4_1677, + &pci_dev_info_14e4_1678, + &pci_dev_info_14e4_1679, +@@ -129365,6 +137072,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_14e4_167b, + &pci_dev_info_14e4_167d, + &pci_dev_info_14e4_167e, ++ &pci_dev_info_14e4_167f, + &pci_dev_info_14e4_1693, + &pci_dev_info_14e4_1696, + &pci_dev_info_14e4_169a, +@@ -129385,11 +137093,14 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_14e4_170c, + &pci_dev_info_14e4_170d, + &pci_dev_info_14e4_170e, ++ &pci_dev_info_14e4_1712, ++ &pci_dev_info_14e4_1713, + &pci_dev_info_14e4_3352, + &pci_dev_info_14e4_3360, + &pci_dev_info_14e4_4210, + &pci_dev_info_14e4_4211, + &pci_dev_info_14e4_4212, ++ &pci_dev_info_14e4_4220, + &pci_dev_info_14e4_4301, + &pci_dev_info_14e4_4305, + &pci_dev_info_14e4_4306, +@@ -129408,6 +137119,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_14e4_4325, + &pci_dev_info_14e4_4326, + &pci_dev_info_14e4_4329, ++ &pci_dev_info_14e4_4344, + &pci_dev_info_14e4_4401, + &pci_dev_info_14e4_4402, + &pci_dev_info_14e4_4403, +@@ -129449,6 +137161,8 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_14e4_5690, + &pci_dev_info_14e4_5691, + &pci_dev_info_14e4_5692, ++ &pci_dev_info_14e4_5695, ++ &pci_dev_info_14e4_5698, + &pci_dev_info_14e4_5820, + &pci_dev_info_14e4_5821, + &pci_dev_info_14e4_5822, +@@ -129508,6 +137222,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_14f1_1065, + &pci_dev_info_14f1_1066, + &pci_dev_info_14f1_1085, ++ &pci_dev_info_14f1_10b6, + &pci_dev_info_14f1_1433, + &pci_dev_info_14f1_1434, + &pci_dev_info_14f1_1435, +@@ -129570,6 +137285,9 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_14f1_2f02, + &pci_dev_info_14f1_2f11, + &pci_dev_info_14f1_2f20, ++ &pci_dev_info_14f1_2f30, ++ &pci_dev_info_14f1_5045, ++ &pci_dev_info_14f1_5047, + &pci_dev_info_14f1_8234, + &pci_dev_info_14f1_8800, + &pci_dev_info_14f1_8801, +@@ -129711,6 +137429,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_1524_0520, + &pci_dev_info_1524_0530, + &pci_dev_info_1524_0550, ++ &pci_dev_info_1524_0551, + &pci_dev_info_1524_0610, + &pci_dev_info_1524_1211, + &pci_dev_info_1524_1225, +@@ -129745,6 +137464,7 @@ static const pciDeviceInfo *pci_dev_list + #define pci_dev_list_1533 NULL + #define pci_dev_list_1534 NULL + #define pci_dev_list_1535 NULL ++#define pci_dev_list_1536 NULL + #define pci_dev_list_1537 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_1538[] = { +@@ -129894,7 +137614,14 @@ static const pciDeviceInfo *pci_dev_list + #define pci_dev_list_158d NULL + #define pci_dev_list_158e NULL + #define pci_dev_list_158f NULL +-#define pci_dev_list_1590 NULL ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo *pci_dev_list_1590[] = { ++ &pci_dev_info_1590_0001, ++ &pci_dev_info_1590_0002, ++ &pci_dev_info_1590_a01d, ++ NULL ++}; ++#endif + #define pci_dev_list_1591 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_1592[] = { +@@ -129951,6 +137678,7 @@ static const pciDeviceInfo *pci_dev_list + #define pci_dev_list_15b2 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_15b3[] = { ++ &pci_dev_info_15b3_0191, + &pci_dev_info_15b3_5274, + &pci_dev_info_15b3_5a44, + &pci_dev_info_15b3_5a45, +@@ -129960,6 +137688,10 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_15b3_6278, + &pci_dev_info_15b3_6279, + &pci_dev_info_15b3_6282, ++ &pci_dev_info_15b3_6340, ++ &pci_dev_info_15b3_634a, ++ &pci_dev_info_15b3_6354, ++ &pci_dev_info_15b3_6368, + NULL + }; + #endif +@@ -129967,7 +137699,15 @@ static const pciDeviceInfo *pci_dev_list + #define pci_dev_list_15b5 NULL + #define pci_dev_list_15b6 NULL + #define pci_dev_list_15b7 NULL +-#define pci_dev_list_15b8 NULL ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo *pci_dev_list_15b8[] = { ++ &pci_dev_info_15b8_1003, ++ &pci_dev_info_15b8_1005, ++ &pci_dev_info_15b8_100a, ++ &pci_dev_info_15b8_3001, ++ NULL ++}; ++#endif + #define pci_dev_list_15b9 NULL + #define pci_dev_list_15ba NULL + #define pci_dev_list_15bb NULL +@@ -130031,7 +137771,12 @@ static const pciDeviceInfo *pci_dev_list + #define pci_dev_list_15df NULL + #define pci_dev_list_15e0 NULL + #define pci_dev_list_15e1 NULL +-#define pci_dev_list_15e2 NULL ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo *pci_dev_list_15e2[] = { ++ &pci_dev_info_15e2_0500, ++ NULL ++}; ++#endif + #define pci_dev_list_15e3 NULL + #define pci_dev_list_15e4 NULL + #define pci_dev_list_15e5 NULL +@@ -130110,6 +137855,8 @@ static const pciDeviceInfo *pci_dev_list + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_1629[] = { + &pci_dev_info_1629_1003, ++ &pci_dev_info_1629_1006, ++ &pci_dev_info_1629_1007, + &pci_dev_info_1629_2002, + NULL + }; +@@ -130204,8 +137951,12 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_168c_0013, + &pci_dev_info_168c_001a, + &pci_dev_info_168c_001b, ++ &pci_dev_info_168c_001c, + &pci_dev_info_168c_0020, ++ &pci_dev_info_168c_0023, ++ &pci_dev_info_168c_0024, + &pci_dev_info_168c_1014, ++ &pci_dev_info_168c_3b08, + NULL + }; + #endif +@@ -130216,6 +137967,12 @@ static const pciDeviceInfo *pci_dev_list + NULL + }; + #endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo *pci_dev_list_169d[] = { ++ &pci_dev_info_169d_3306, ++ NULL ++}; ++#endif + #define pci_dev_list_16a5 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_16ab[] = { +@@ -130228,7 +137985,10 @@ static const pciDeviceInfo *pci_dev_list + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_16ae[] = { ++ &pci_dev_info_16ae_0001, ++ &pci_dev_info_16ae_000a, + &pci_dev_info_16ae_1141, ++ &pci_dev_info_16ae_1841, + NULL + }; + #endif +@@ -130254,7 +138014,41 @@ static const pciDeviceInfo *pci_dev_list + #define pci_dev_list_16ce NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_16d5[] = { ++ &pci_dev_info_16d5_0504, ++ &pci_dev_info_16d5_0520, ++ &pci_dev_info_16d5_0521, ++ &pci_dev_info_16d5_1020, ++ &pci_dev_info_16d5_1065, ++ &pci_dev_info_16d5_2004, ++ &pci_dev_info_16d5_2020, ++ &pci_dev_info_16d5_2065, ++ &pci_dev_info_16d5_3020, ++ &pci_dev_info_16d5_3065, ++ &pci_dev_info_16d5_4243, ++ &pci_dev_info_16d5_4248, ++ &pci_dev_info_16d5_424b, ++ &pci_dev_info_16d5_4253, ++ &pci_dev_info_16d5_4312, ++ &pci_dev_info_16d5_4313, ++ &pci_dev_info_16d5_4322, ++ &pci_dev_info_16d5_4323, ++ &pci_dev_info_16d5_4350, ++ &pci_dev_info_16d5_4353, ++ &pci_dev_info_16d5_4357, ++ &pci_dev_info_16d5_4457, ++ &pci_dev_info_16d5_464d, ++ &pci_dev_info_16d5_4850, ++ &pci_dev_info_16d5_4a42, ++ &pci_dev_info_16d5_4a50, ++ &pci_dev_info_16d5_4a56, ++ &pci_dev_info_16d5_4b47, ++ &pci_dev_info_16d5_4c40, ++ &pci_dev_info_16d5_4c60, ++ &pci_dev_info_16d5_4d4d, + &pci_dev_info_16d5_4d4e, ++ &pci_dev_info_16d5_524d, ++ &pci_dev_info_16d5_5335, ++ &pci_dev_info_16d5_5456, + NULL + }; + #endif +@@ -130268,6 +138062,7 @@ static const pciDeviceInfo *pci_dev_list + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_16e5[] = { + &pci_dev_info_16e5_6000, ++ &pci_dev_info_16e5_6300, + NULL + }; + #endif +@@ -130318,6 +138113,7 @@ static const pciDeviceInfo *pci_dev_list + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_1734[] = { + &pci_dev_info_1734_1078, ++ &pci_dev_info_1734_1085, + NULL + }; + #endif +@@ -130325,6 +138121,7 @@ static const pciDeviceInfo *pci_dev_list + static const pciDeviceInfo *pci_dev_list_1737[] = { + &pci_dev_info_1737_0013, + &pci_dev_info_1737_0015, ++ &pci_dev_info_1737_0029, + &pci_dev_info_1737_1032, + &pci_dev_info_1737_1064, + &pci_dev_info_1737_ab08, +@@ -130353,6 +138150,7 @@ static const pciDeviceInfo *pci_dev_list + #define pci_dev_list_175c NULL + #define pci_dev_list_175e NULL + #define pci_dev_list_1775 NULL ++#define pci_dev_list_177d NULL + #define pci_dev_list_1787 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_1796[] = { +@@ -130445,7 +138243,12 @@ static const pciDeviceInfo *pci_dev_list + NULL + }; + #endif +-#define pci_dev_list_17db NULL ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo *pci_dev_list_17db[] = { ++ &pci_dev_info_17db_0101, ++ NULL ++}; ++#endif + #define pci_dev_list_17de NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_17e4[] = { +@@ -130465,6 +138268,16 @@ static const pciDeviceInfo *pci_dev_list + #define pci_dev_list_17ee NULL + #define pci_dev_list_17f2 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo *pci_dev_list_17f3[] = { ++ &pci_dev_info_17f3_6020, ++ &pci_dev_info_17f3_6030, ++ &pci_dev_info_17f3_6040, ++ &pci_dev_info_17f3_6060, ++ &pci_dev_info_17f3_6061, ++ NULL ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_17fe[] = { + &pci_dev_info_17fe_2120, + &pci_dev_info_17fe_2220, +@@ -130488,12 +138301,14 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_1814_0301, + &pci_dev_info_1814_0302, + &pci_dev_info_1814_0401, ++ &pci_dev_info_1814_e932, + NULL + }; + #endif + #define pci_dev_list_1820 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_1822[] = { ++ &pci_dev_info_1822_0001, + &pci_dev_info_1822_4e35, + NULL + }; +@@ -130546,6 +138361,20 @@ static const pciDeviceInfo *pci_dev_list + }; + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo *pci_dev_list_186c[] = { ++ &pci_dev_info_186c_0614, ++ NULL ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo *pci_dev_list_1876[] = { ++ &pci_dev_info_1876_a101, ++ &pci_dev_info_1876_a102, ++ &pci_dev_info_1876_a103, ++ NULL ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_187e[] = { + &pci_dev_info_187e_3403, + &pci_dev_info_187e_340e, +@@ -130590,6 +138419,7 @@ static const pciDeviceInfo *pci_dev_list + static const pciDeviceInfo *pci_dev_list_18ca[] = { + &pci_dev_info_18ca_0020, + &pci_dev_info_18ca_0040, ++ &pci_dev_info_18ca_0047, + NULL + }; + #endif +@@ -130693,6 +138523,7 @@ static const pciDeviceInfo *pci_dev_list + }; + #endif + #define pci_dev_list_1958 NULL ++#define pci_dev_list_1959 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_1966[] = { + &pci_dev_info_1966_1975, +@@ -130702,6 +138533,7 @@ static const pciDeviceInfo *pci_dev_list + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_1969[] = { + &pci_dev_info_1969_1048, ++ &pci_dev_info_1969_2048, + NULL + }; + #endif +@@ -130709,17 +138541,32 @@ static const pciDeviceInfo *pci_dev_list + static const pciDeviceInfo *pci_dev_list_196a[] = { + &pci_dev_info_196a_0101, + &pci_dev_info_196a_0102, ++ &pci_dev_info_196a_0105, + NULL + }; + #endif + #define pci_dev_list_196d NULL + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo *pci_dev_list_1971[] = { ++ &pci_dev_info_1971_1011, ++ NULL ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_197b[] = { + &pci_dev_info_197b_2360, + &pci_dev_info_197b_2361, + &pci_dev_info_197b_2363, + &pci_dev_info_197b_2365, + &pci_dev_info_197b_2366, ++ &pci_dev_info_197b_2368, ++ NULL ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo *pci_dev_list_1982[] = { ++ &pci_dev_info_1982_1600, ++ &pci_dev_info_1982_16ff, + NULL + }; + #endif +@@ -130732,6 +138579,13 @@ static const pciDeviceInfo *pci_dev_list + #endif + #define pci_dev_list_1993 NULL + #define pci_dev_list_199a NULL ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo *pci_dev_list_19a2[] = { ++ &pci_dev_info_19a2_0200, ++ &pci_dev_info_19a2_0201, ++ NULL ++}; ++#endif + #define pci_dev_list_19a8 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_19ac[] = { +@@ -130746,6 +138600,7 @@ static const pciDeviceInfo *pci_dev_list + }; + #endif + #define pci_dev_list_19d4 NULL ++#define pci_dev_list_19de NULL + #define pci_dev_list_19e2 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_19e7[] = { +@@ -130762,14 +138617,44 @@ static const pciDeviceInfo *pci_dev_list + NULL + }; + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo *pci_dev_list_1a07[] = { ++ &pci_dev_info_1a07_0006, ++ &pci_dev_info_1a07_0007, ++ NULL ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_1a08[] = { + &pci_dev_info_1a08_0000, + NULL + }; + #endif +-#define pci_dev_list_1a1d NULL ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo *pci_dev_list_1a1d[] = { ++ &pci_dev_info_1a1d_1a17, ++ NULL ++}; ++#endif ++#define pci_dev_list_1a22 NULL + #define pci_dev_list_1a29 NULL + #define pci_dev_list_1a51 NULL ++#define pci_dev_list_1a5d NULL ++#define pci_dev_list_1a71 NULL ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo *pci_dev_list_1a73[] = { ++ &pci_dev_info_1a73_0001, ++ NULL ++}; ++#endif ++#define pci_dev_list_1a77 NULL ++#define pci_dev_list_1a78 NULL ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo *pci_dev_list_1a8c[] = { ++ &pci_dev_info_1a8c_1100, ++ NULL ++}; ++#endif ++#define pci_dev_list_1ab9 NULL + #define pci_dev_list_1b13 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_1c1c[] = { +@@ -130906,6 +138791,15 @@ static const pciDeviceInfo *pci_dev_list + NULL + }; + #endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo *pci_dev_list_4040[] = { ++ &pci_dev_info_4040_0001, ++ &pci_dev_info_4040_0002, ++ &pci_dev_info_4040_0003, ++ &pci_dev_info_4040_0004, ++ NULL ++}; ++#endif + #define pci_dev_list_4143 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_4144[] = { +@@ -130921,6 +138815,7 @@ static const pciDeviceInfo *pci_dev_list + }; + #endif + #define pci_dev_list_4321 NULL ++#define pci_dev_list_434e NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_4444[] = { + &pci_dev_info_4444_0016, +@@ -130971,6 +138866,12 @@ static const pciDeviceInfo *pci_dev_list + #endif + #define pci_dev_list_4d54 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo *pci_dev_list_4d56[] = { ++ &pci_dev_info_4d56_0000, ++ NULL ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_4ddc[] = { + &pci_dev_info_4ddc_0100, + &pci_dev_info_4ddc_0801, +@@ -131104,6 +139005,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_5333_8d02, + &pci_dev_info_5333_8d03, + &pci_dev_info_5333_8d04, ++ &pci_dev_info_5333_8e48, + &pci_dev_info_5333_9102, + &pci_dev_info_5333_ca00, + NULL +@@ -131120,6 +139022,7 @@ static const pciDeviceInfo *pci_dev_list + NULL + }; + #endif ++#define pci_dev_list_5456 NULL + #define pci_dev_list_5519 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_5544[] = { +@@ -131141,6 +139044,12 @@ static const pciDeviceInfo *pci_dev_list + #endif + #define pci_dev_list_5700 NULL + #define pci_dev_list_5851 NULL ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo *pci_dev_list_5853[] = { ++ &pci_dev_info_5853_0001, ++ NULL ++}; ++#endif + #define pci_dev_list_6356 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_6374[] = { +@@ -131345,17 +139254,27 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_8086_10a0, + &pci_dev_info_8086_10a1, + &pci_dev_info_8086_10a4, ++ &pci_dev_info_8086_10a5, + &pci_dev_info_8086_10b0, + &pci_dev_info_8086_10b2, + &pci_dev_info_8086_10b3, + &pci_dev_info_8086_10b4, + &pci_dev_info_8086_10b5, ++ &pci_dev_info_8086_10b6, + &pci_dev_info_8086_10b9, + &pci_dev_info_8086_10ba, + &pci_dev_info_8086_10bb, + &pci_dev_info_8086_10bc, ++ &pci_dev_info_8086_10bd, ++ &pci_dev_info_8086_10c0, ++ &pci_dev_info_8086_10c2, ++ &pci_dev_info_8086_10c3, + &pci_dev_info_8086_10c4, + &pci_dev_info_8086_10c5, ++ &pci_dev_info_8086_10c6, ++ &pci_dev_info_8086_10c7, ++ &pci_dev_info_8086_10d9, ++ &pci_dev_info_8086_10da, + &pci_dev_info_8086_1107, + &pci_dev_info_8086_1130, + &pci_dev_info_8086_1131, +@@ -131700,7 +139619,13 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_8086_284b, + &pci_dev_info_8086_284f, + &pci_dev_info_8086_2850, +- &pci_dev_info_8086_2910, ++ &pci_dev_info_8086_2911, ++ &pci_dev_info_8086_2912, ++ &pci_dev_info_8086_2914, ++ &pci_dev_info_8086_2916, ++ &pci_dev_info_8086_2917, ++ &pci_dev_info_8086_2918, ++ &pci_dev_info_8086_2919, + &pci_dev_info_8086_2920, + &pci_dev_info_8086_2921, + &pci_dev_info_8086_2922, +@@ -131708,6 +139633,8 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_8086_2925, + &pci_dev_info_8086_2926, + &pci_dev_info_8086_2928, ++ &pci_dev_info_8086_2929, ++ &pci_dev_info_8086_292c, + &pci_dev_info_8086_292d, + &pci_dev_info_8086_292e, + &pci_dev_info_8086_2930, +@@ -131772,6 +139699,14 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_8086_29c6, + &pci_dev_info_8086_29c7, + &pci_dev_info_8086_29cf, ++ &pci_dev_info_8086_29d0, ++ &pci_dev_info_8086_29d1, ++ &pci_dev_info_8086_29d2, ++ &pci_dev_info_8086_29d3, ++ &pci_dev_info_8086_29d4, ++ &pci_dev_info_8086_29d5, ++ &pci_dev_info_8086_29d6, ++ &pci_dev_info_8086_29d7, + &pci_dev_info_8086_29e0, + &pci_dev_info_8086_29e1, + &pci_dev_info_8086_29e4, +@@ -131794,10 +139729,16 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_8086_2a05, + &pci_dev_info_8086_2a06, + &pci_dev_info_8086_2a07, +- &pci_dev_info_8086_3092, + &pci_dev_info_8086_3200, ++ &pci_dev_info_8086_3313, ++ &pci_dev_info_8086_331b, ++ &pci_dev_info_8086_3331, ++ &pci_dev_info_8086_3339, + &pci_dev_info_8086_3340, + &pci_dev_info_8086_3341, ++ &pci_dev_info_8086_3363, ++ &pci_dev_info_8086_33c3, ++ &pci_dev_info_8086_33cb, + &pci_dev_info_8086_3500, + &pci_dev_info_8086_3501, + &pci_dev_info_8086_3504, +@@ -131853,6 +139794,8 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_8086_360f, + &pci_dev_info_8086_3610, + &pci_dev_info_8086_4000, ++ &pci_dev_info_8086_4001, ++ &pci_dev_info_8086_4003, + &pci_dev_info_8086_4008, + &pci_dev_info_8086_4010, + &pci_dev_info_8086_4021, +@@ -131876,7 +139819,42 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_8086_4223, + &pci_dev_info_8086_4224, + &pci_dev_info_8086_4227, ++ &pci_dev_info_8086_4229, ++ &pci_dev_info_8086_4230, ++ &pci_dev_info_8086_444e, + &pci_dev_info_8086_5001, ++ &pci_dev_info_8086_5020, ++ &pci_dev_info_8086_5021, ++ &pci_dev_info_8086_5023, ++ &pci_dev_info_8086_5024, ++ &pci_dev_info_8086_5025, ++ &pci_dev_info_8086_5028, ++ &pci_dev_info_8086_5029, ++ &pci_dev_info_8086_502a, ++ &pci_dev_info_8086_502b, ++ &pci_dev_info_8086_5031, ++ &pci_dev_info_8086_5032, ++ &pci_dev_info_8086_5033, ++ &pci_dev_info_8086_5035, ++ &pci_dev_info_8086_5037, ++ &pci_dev_info_8086_5039, ++ &pci_dev_info_8086_503a, ++ &pci_dev_info_8086_503b, ++ &pci_dev_info_8086_503c, ++ &pci_dev_info_8086_503d, ++ &pci_dev_info_8086_503e, ++ &pci_dev_info_8086_5040, ++ &pci_dev_info_8086_5041, ++ &pci_dev_info_8086_5042, ++ &pci_dev_info_8086_5043, ++ &pci_dev_info_8086_5044, ++ &pci_dev_info_8086_5045, ++ &pci_dev_info_8086_5046, ++ &pci_dev_info_8086_5047, ++ &pci_dev_info_8086_5048, ++ &pci_dev_info_8086_5049, ++ &pci_dev_info_8086_504a, ++ &pci_dev_info_8086_504b, + &pci_dev_info_8086_5200, + &pci_dev_info_8086_5201, + &pci_dev_info_8086_530d, +@@ -131937,6 +139915,7 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_8086_7602, + &pci_dev_info_8086_7603, + &pci_dev_info_8086_7800, ++ &pci_dev_info_8086_8002, + &pci_dev_info_8086_84c4, + &pci_dev_info_8086_84c5, + &pci_dev_info_8086_84ca, +@@ -131963,6 +139942,21 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_8086_b555, + NULL + }; ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo *pci_dev_list_80ee[] = { ++ &pci_dev_info_80ee_beef, ++ &pci_dev_info_80ee_cafe, ++ NULL ++}; ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++static const pciDeviceInfo *pci_dev_list_8384[] = { ++ &pci_dev_info_8384_7618, ++ &pci_dev_info_8384_7670, ++ &pci_dev_info_8384_7672, ++ NULL ++}; ++#endif + #define pci_dev_list_8401 NULL + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_8686[] = { +@@ -132092,6 +140086,8 @@ static const pciDeviceInfo *pci_dev_list + &pci_dev_info_9005_0081, + &pci_dev_info_9005_0083, + &pci_dev_info_9005_008f, ++ &pci_dev_info_9005_0092, ++ &pci_dev_info_9005_0093, + &pci_dev_info_9005_00c0, + &pci_dev_info_9005_00c1, + &pci_dev_info_9005_00c3, +@@ -132238,13 +140234,15 @@ static const pciDeviceInfo *pci_dev_list + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + static const pciDeviceInfo *pci_dev_list_d161[] = { ++ &pci_dev_info_d161_0120, + &pci_dev_info_d161_0205, + &pci_dev_info_d161_0210, + &pci_dev_info_d161_0405, +- &pci_dev_info_d161_0406, + &pci_dev_info_d161_0410, +- &pci_dev_info_d161_0411, ++ &pci_dev_info_d161_0800, + &pci_dev_info_d161_2400, ++ &pci_dev_info_d161_3400, ++ &pci_dev_info_d161_b410, + NULL + }; + #endif +@@ -132435,6 +140433,9 @@ static const pciVendorInfo pciVendorInfo + {0x02ac, pci_vendor_02ac, pci_dev_list_02ac}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x02e0, pci_vendor_02e0, pci_dev_list_02e0}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x0315, pci_vendor_0315, pci_dev_list_0315}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -132459,6 +140460,9 @@ static const pciVendorInfo pciVendorInfo + {0x050d, pci_vendor_050d, pci_dev_list_050d}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x058f, pci_vendor_058f, pci_dev_list_058f}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x05a9, pci_vendor_05a9, pci_dev_list_05a9}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -136350,6 +144354,9 @@ static const pciVendorInfo pciVendorInfo + {0x1535, pci_vendor_1535, pci_dev_list_1535}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x1536, pci_vendor_1536, pci_dev_list_1536}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x1537, pci_vendor_1537, pci_dev_list_1537}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -137041,6 +145048,9 @@ static const pciVendorInfo pciVendorInfo + {0x169c, pci_vendor_169c, pci_dev_list_169c}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x169d, pci_vendor_169d, pci_dev_list_169d}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x16a5, pci_vendor_16a5, pci_dev_list_16a5}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -137155,6 +145165,9 @@ static const pciVendorInfo pciVendorInfo + {0x1775, pci_vendor_1775, pci_dev_list_1775}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x177d, pci_vendor_177d, pci_dev_list_177d}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x1787, pci_vendor_1787, pci_dev_list_1787}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -137224,6 +145237,9 @@ static const pciVendorInfo pciVendorInfo + {0x17f2, pci_vendor_17f2, pci_dev_list_17f2}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x17f3, pci_vendor_17f3, pci_dev_list_17f3}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x17fe, pci_vendor_17fe, pci_dev_list_17fe}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -137287,6 +145303,12 @@ static const pciVendorInfo pciVendorInfo + {0x1867, pci_vendor_1867, pci_dev_list_1867}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x186c, pci_vendor_186c, pci_dev_list_186c}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x1876, pci_vendor_1876, pci_dev_list_1876}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x187e, pci_vendor_187e, pci_dev_list_187e}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -137380,6 +145402,9 @@ static const pciVendorInfo pciVendorInfo + {0x1958, pci_vendor_1958, pci_dev_list_1958}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x1959, pci_vendor_1959, pci_dev_list_1959}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x1966, pci_vendor_1966, pci_dev_list_1966}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -137392,9 +145417,15 @@ static const pciVendorInfo pciVendorInfo + {0x196d, pci_vendor_196d, pci_dev_list_196d}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x1971, pci_vendor_1971, pci_dev_list_1971}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x197b, pci_vendor_197b, pci_dev_list_197b}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x1982, pci_vendor_1982, pci_dev_list_1982}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x1989, pci_vendor_1989, pci_dev_list_1989}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -137404,6 +145435,9 @@ static const pciVendorInfo pciVendorInfo + {0x199a, pci_vendor_199a, pci_dev_list_199a}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x19a2, pci_vendor_19a2, pci_dev_list_19a2}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x19a8, pci_vendor_19a8, pci_dev_list_19a8}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -137416,6 +145450,9 @@ static const pciVendorInfo pciVendorInfo + {0x19d4, pci_vendor_19d4, pci_dev_list_19d4}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x19de, pci_vendor_19de, pci_dev_list_19de}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x19e2, pci_vendor_19e2, pci_dev_list_19e2}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -137423,18 +145460,45 @@ static const pciVendorInfo pciVendorInfo + #endif + {0x1a03, pci_vendor_1a03, pci_dev_list_1a03}, + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x1a07, pci_vendor_1a07, pci_dev_list_1a07}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x1a08, pci_vendor_1a08, pci_dev_list_1a08}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + {0x1a1d, pci_vendor_1a1d, pci_dev_list_1a1d}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x1a22, pci_vendor_1a22, pci_dev_list_1a22}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x1a29, pci_vendor_1a29, pci_dev_list_1a29}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + {0x1a51, pci_vendor_1a51, pci_dev_list_1a51}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x1a5d, pci_vendor_1a5d, pci_dev_list_1a5d}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x1a71, pci_vendor_1a71, pci_dev_list_1a71}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x1a73, pci_vendor_1a73, pci_dev_list_1a73}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x1a77, pci_vendor_1a77, pci_dev_list_1a77}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x1a78, pci_vendor_1a78, pci_dev_list_1a78}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x1a8c, pci_vendor_1a8c, pci_dev_list_1a8c}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x1ab9, pci_vendor_1ab9, pci_dev_list_1ab9}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x1b13, pci_vendor_1b13, pci_dev_list_1b13}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -137518,6 +145582,9 @@ static const pciVendorInfo pciVendorInfo + {0x4033, pci_vendor_4033, pci_dev_list_4033}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x4040, pci_vendor_4040, pci_dev_list_4040}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x4143, pci_vendor_4143, pci_dev_list_4143}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -137530,6 +145597,9 @@ static const pciVendorInfo pciVendorInfo + {0x4321, pci_vendor_4321, pci_dev_list_4321}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x434e, pci_vendor_434e, pci_dev_list_434e}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x4444, pci_vendor_4444, pci_dev_list_4444}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -137579,6 +145649,9 @@ static const pciVendorInfo pciVendorInfo + {0x4d54, pci_vendor_4d54, pci_dev_list_4d54}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x4d56, pci_vendor_4d56, pci_dev_list_4d56}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x4ddc, pci_vendor_4ddc, pci_dev_list_4ddc}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -137610,6 +145683,9 @@ static const pciVendorInfo pciVendorInfo + {0x5455, pci_vendor_5455, pci_dev_list_5455}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x5456, pci_vendor_5456, pci_dev_list_5456}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x5519, pci_vendor_5519, pci_dev_list_5519}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -137628,6 +145704,9 @@ static const pciVendorInfo pciVendorInfo + {0x5851, pci_vendor_5851, pci_dev_list_5851}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x5853, pci_vendor_5853, pci_dev_list_5853}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x6356, pci_vendor_6356, pci_dev_list_6356}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -137659,6 +145738,12 @@ static const pciVendorInfo pciVendorInfo + #endif + {0x8086, pci_vendor_8086, pci_dev_list_8086}, + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x80ee, pci_vendor_80ee, pci_dev_list_80ee}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x8384, pci_vendor_8384, pci_dev_list_8384}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x8401, pci_vendor_8401, pci_dev_list_8401}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -137915,6 +146000,9 @@ static const pciVendorSubsysInfo pciVend + {0x02ac, pci_vendor_02ac, pci_ss_list_02ac}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x02e0, pci_vendor_02e0, pci_ss_list_02e0}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x0315, pci_vendor_0315, pci_ss_list_0315}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -137939,6 +146027,9 @@ static const pciVendorSubsysInfo pciVend + {0x050d, pci_vendor_050d, pci_ss_list_050d}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x058f, pci_vendor_058f, pci_ss_list_058f}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x05a9, pci_vendor_05a9, pci_ss_list_05a9}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -141830,6 +149921,9 @@ static const pciVendorSubsysInfo pciVend + {0x1535, pci_vendor_1535, pci_ss_list_1535}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x1536, pci_vendor_1536, pci_ss_list_1536}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x1537, pci_vendor_1537, pci_ss_list_1537}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -142521,6 +150615,9 @@ static const pciVendorSubsysInfo pciVend + {0x169c, pci_vendor_169c, pci_ss_list_169c}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x169d, pci_vendor_169d, pci_ss_list_169d}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x16a5, pci_vendor_16a5, pci_ss_list_16a5}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -142635,6 +150732,9 @@ static const pciVendorSubsysInfo pciVend + {0x1775, pci_vendor_1775, pci_ss_list_1775}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x177d, pci_vendor_177d, pci_ss_list_177d}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x1787, pci_vendor_1787, pci_ss_list_1787}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -142704,6 +150804,9 @@ static const pciVendorSubsysInfo pciVend + {0x17f2, pci_vendor_17f2, pci_ss_list_17f2}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x17f3, pci_vendor_17f3, pci_ss_list_17f3}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x17fe, pci_vendor_17fe, pci_ss_list_17fe}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -142767,6 +150870,12 @@ static const pciVendorSubsysInfo pciVend + {0x1867, pci_vendor_1867, pci_ss_list_1867}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x186c, pci_vendor_186c, pci_ss_list_186c}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x1876, pci_vendor_1876, pci_ss_list_1876}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x187e, pci_vendor_187e, pci_ss_list_187e}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -142860,6 +150969,9 @@ static const pciVendorSubsysInfo pciVend + {0x1958, pci_vendor_1958, pci_ss_list_1958}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x1959, pci_vendor_1959, pci_ss_list_1959}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x1966, pci_vendor_1966, pci_ss_list_1966}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -142872,9 +150984,15 @@ static const pciVendorSubsysInfo pciVend + {0x196d, pci_vendor_196d, pci_ss_list_196d}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x1971, pci_vendor_1971, pci_ss_list_1971}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x197b, pci_vendor_197b, pci_ss_list_197b}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x1982, pci_vendor_1982, pci_ss_list_1982}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x1989, pci_vendor_1989, pci_ss_list_1989}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -142884,6 +151002,9 @@ static const pciVendorSubsysInfo pciVend + {0x199a, pci_vendor_199a, pci_ss_list_199a}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x19a2, pci_vendor_19a2, pci_ss_list_19a2}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x19a8, pci_vendor_19a8, pci_ss_list_19a8}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -142896,6 +151017,9 @@ static const pciVendorSubsysInfo pciVend + {0x19d4, pci_vendor_19d4, pci_ss_list_19d4}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x19de, pci_vendor_19de, pci_ss_list_19de}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x19e2, pci_vendor_19e2, pci_ss_list_19e2}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -142903,18 +151027,45 @@ static const pciVendorSubsysInfo pciVend + #endif + {0x1a03, pci_vendor_1a03, pci_ss_list_1a03}, + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x1a07, pci_vendor_1a07, pci_ss_list_1a07}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x1a08, pci_vendor_1a08, pci_ss_list_1a08}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + {0x1a1d, pci_vendor_1a1d, pci_ss_list_1a1d}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x1a22, pci_vendor_1a22, pci_ss_list_1a22}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x1a29, pci_vendor_1a29, pci_ss_list_1a29}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO + {0x1a51, pci_vendor_1a51, pci_ss_list_1a51}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x1a5d, pci_vendor_1a5d, pci_ss_list_1a5d}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x1a71, pci_vendor_1a71, pci_ss_list_1a71}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x1a73, pci_vendor_1a73, pci_ss_list_1a73}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x1a77, pci_vendor_1a77, pci_ss_list_1a77}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x1a78, pci_vendor_1a78, pci_ss_list_1a78}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x1a8c, pci_vendor_1a8c, pci_ss_list_1a8c}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x1ab9, pci_vendor_1ab9, pci_ss_list_1ab9}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x1b13, pci_vendor_1b13, pci_ss_list_1b13}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -142998,6 +151149,9 @@ static const pciVendorSubsysInfo pciVend + {0x4033, pci_vendor_4033, pci_ss_list_4033}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x4040, pci_vendor_4040, pci_ss_list_4040}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x4143, pci_vendor_4143, pci_ss_list_4143}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -143010,6 +151164,9 @@ static const pciVendorSubsysInfo pciVend + {0x4321, pci_vendor_4321, pci_ss_list_4321}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x434e, pci_vendor_434e, pci_ss_list_434e}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x4444, pci_vendor_4444, pci_ss_list_4444}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -143059,6 +151216,9 @@ static const pciVendorSubsysInfo pciVend + {0x4d54, pci_vendor_4d54, pci_ss_list_4d54}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x4d56, pci_vendor_4d56, pci_ss_list_4d56}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x4ddc, pci_vendor_4ddc, pci_ss_list_4ddc}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -143090,6 +151250,9 @@ static const pciVendorSubsysInfo pciVend + {0x5455, pci_vendor_5455, pci_ss_list_5455}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x5456, pci_vendor_5456, pci_ss_list_5456}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x5519, pci_vendor_5519, pci_ss_list_5519}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -143108,6 +151271,9 @@ static const pciVendorSubsysInfo pciVend + {0x5851, pci_vendor_5851, pci_ss_list_5851}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x5853, pci_vendor_5853, pci_ss_list_5853}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x6356, pci_vendor_6356, pci_ss_list_6356}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO +@@ -143139,6 +151305,12 @@ static const pciVendorSubsysInfo pciVend + #endif + {0x8086, pci_vendor_8086, pci_ss_list_8086}, + #ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x80ee, pci_vendor_80ee, pci_ss_list_80ee}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO ++ {0x8384, pci_vendor_8384, pci_ss_list_8384}, ++#endif ++#ifdef VENDOR_INCLUDE_NONVIDEO + {0x8401, pci_vendor_8401, pci_ss_list_8401}, + #endif + #ifdef VENDOR_INCLUDE_NONVIDEO --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/125_glx_remove-stray__GLinterface.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/125_glx_remove-stray__GLinterface.diff @@ -0,0 +1,32 @@ +From: George Sapountzis +Date: Thu, 5 Apr 2007 16:13:47 +0000 (+0300) +Subject: glx: Remove stray __GLinterface. +X-Git-Url: http://gitweb.freedesktop.org/?p=xorg/xserver.git;a=commitdiff;h=a4e2fc703484fffed8dd50c1b4b24c564be4d3cd + +glx: Remove stray __GLinterface. + +__GLinterface was droped from glcore.h +--- + +--- a/GL/glx/glxext.c ++++ b/GL/glx/glxext.c +@@ -275,7 +275,7 @@ static GLboolean errorOccured = GL_FALSE + /* + ** The GL was will call this routine if an error occurs. + */ +-void __glXErrorCallBack(__GLinterface *gc, GLenum code) ++void __glXErrorCallBack(GLenum code) + { + errorOccured = GL_TRUE; + } +--- a/GL/glx/glxext.h ++++ b/GL/glx/glxext.h +@@ -66,7 +66,7 @@ typedef struct { + extern GLboolean __glXFreeContext(__GLXcontext *glxc); + extern void __glXFlushContextCache(void); + +-extern void __glXErrorCallBack(__GLinterface *gc, GLenum code); ++extern void __glXErrorCallBack(GLenum code); + extern void __glXClearErrorOccured(void); + extern GLboolean __glXErrorOccured(void); + extern void __glXResetLargeCommandStatus(__GLXclientState*); --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/fix_CVE-2008-1379.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/fix_CVE-2008-1379.patch @@ -0,0 +1,24 @@ +diff --git a/Xext/shm.c b/Xext/shm.c +index ac587be..e08df36 100644 +--- a/Xext/shm.c ++++ b/Xext/shm.c +@@ -831,8 +831,17 @@ ProcShmPutImage(client) + return BadValue; + } + +- VERIFY_SHMSIZE(shmdesc, stuff->offset, length * stuff->totalHeight, +- client); ++ /* ++ * There's a potential integer overflow in this check: ++ * VERIFY_SHMSIZE(shmdesc, stuff->offset, length * stuff->totalHeight, ++ * client); ++ * the version below ought to avoid it ++ */ ++ if (stuff->totalHeight != 0 && ++ length > (shmdesc->size - stuff->offset)/stuff->totalHeight) { ++ client->errorValue = stuff->totalWidth; ++ return BadValue; ++ } + if (stuff->srcX > stuff->totalWidth) + { + client->errorValue = stuff->srcX; --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/135_fedora_xorg-x11-server-1.1.1-xkb-in-xnest.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/135_fedora_xorg-x11-server-1.1.1-xkb-in-xnest.patch @@ -0,0 +1,11 @@ +--- xorg-server-1.1.1/mi/miinitext.c.xkb-in-xnest 2006-07-05 14:38:48.000000000 -0400 ++++ xorg-server-1.1.1/mi/miinitext.c 2006-08-17 22:57:27.000000000 -0400 +@@ -595,7 +595,7 @@ + #ifdef XSYNC + if (!noSyncExtension) SyncExtensionInit(); + #endif +-#if defined(XKB) && !defined(PRINT_ONLY_SERVER) && !defined(NO_HW_ONLY_EXTS) ++#if defined(XKB) && !defined(PRINT_ONLY_SERVER) + if (!noXkbExtension) XkbExtensionInit(); + #endif + #ifdef XCMISC --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/142_fedora_xserver-1.3.0-no-pseudocolor-composite.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/142_fedora_xserver-1.3.0-no-pseudocolor-composite.patch @@ -0,0 +1,30 @@ +diff --git a/composite/compext.c b/composite/compext.c +index 4c25cc7..af05b4a 100644 +--- a/composite/compext.c ++++ b/composite/compext.c +@@ -678,6 +678,25 @@ CompositeExtensionInit (void) + ExtensionEntry *extEntry; + int s; + ++ for (s = 0; s < screenInfo.numScreens; s++) { ++ ScreenPtr pScreen = screenInfo.screens[s]; ++ VisualPtr vis; ++ ++ /* Composite on 8bpp pseudocolor root windows appears to fail, so ++ * just disable it on anything pseudocolor for safety. ++ */ ++ for (vis = pScreen->visuals; vis->vid != pScreen->rootVisual; vis++) ++ ; ++ if ((vis->class | DynamicClass) == PseudoColor) ++ return; ++ ++ /* Ensure that Render is initialized, which is required for automatic ++ * compositing. ++ */ ++ if (GetPictureScreenIfSet(pScreen) == NULL) ++ return; ++ } ++ + CompositeClientWindowType = CreateNewResourceType (FreeCompositeClientWindow); + if (!CompositeClientWindowType) + return; --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/137_fedora_xserver-1.2.0-vfprintf.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/137_fedora_xserver-1.2.0-vfprintf.patch @@ -0,0 +1,11 @@ +--- xorg-server-1.2.0/hw/xfree86/os-support/xf86_libc.h.jx 2007-01-22 22:13:15.000000000 -0500 ++++ xorg-server-1.2.0/hw/xfree86/os-support/xf86_libc.h 2007-01-29 18:13:11.000000000 -0500 +@@ -428,7 +428,7 @@ + #define toupper(i) xf86toupper(i) + #undef ungetc + #define ungetc(i,FP) xf86ungetc(i,FP) +-#undef vfprinf ++#undef vfprintf + #define vfprintf(p,f,a) xf86vfprintf(p,f,a) + #undef vsnprintf + #define vsnprintf(s,n,f,a) xf86vsnprintf(s,n,f,a) --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/140_fedora_xserver-1.3.0-domain-obiwan.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/140_fedora_xserver-1.3.0-domain-obiwan.patch @@ -0,0 +1,19 @@ +commit 1b94c117e0f294ef2f89bf24d45ba7a8e45efe35 +Author: Matthias Hopf +Date: Tue Oct 10 19:37:22 2006 +0200 + + Fixing probably long-standing bug in domain support. + +diff --git a/hw/xfree86/os-support/bus/linuxPci.c b/hw/xfree86/os-support/bus/linuxPci.c +index c6dad1f..7d220d0 100644 +--- a/hw/xfree86/os-support/bus/linuxPci.c ++++ b/hw/xfree86/os-support/bus/linuxPci.c +@@ -498,7 +498,7 @@ xf86GetPciDomain(PCITAG Tag) + pPCI = xf86GetPciHostConfigFromTag(Tag); + + if (pPCI && (result = PCI_DOM_FROM_BUS(pPCI->busnum))) +- return result; ++ return result + 1; + + if (!pPCI || pPCI->fakeDevice) + return 1; /* Domain 0 is reserved */ --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/102_ubuntu_sharevts_load_cpu.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/102_ubuntu_sharevts_load_cpu.patch @@ -0,0 +1,28 @@ +Index: a/hw/xfree86/os-support/linux/lnx_init.c +=================================================================== +--- a/hw/xfree86/os-support/linux/lnx_init.c 2007-01-23 07:39:16.000000000 +0200 ++++ b/xfree86/os-support/linux/lnx_init.c 2007-02-08 15:44:03.000000000 +0200 +@@ -284,9 +284,7 @@ + FatalError("Unable to set screen info\n"); + close(fbfd); + #endif +- } else { /* ShareVTs */ +- close(xf86Info.consoleFd); +- } ++ } + signal(SIGUSR2, xf86ReloadInputDevs); + } else { /* serverGeneration != 1 */ + if (!ShareVTs && VTSwitch) +@@ -315,7 +313,11 @@ + int vtno = -1; + #endif + +- if (ShareVTs) return; ++ if (ShareVTs) ++ { ++ close(xf86Info.consoleFd); ++ return; ++ } + + #if defined(DO_OS_FONTRESTORE) + if (ioctl(xf86Info.consoleFd, VT_GETSTATE, &vts) < 0) --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/136_fedora_xserver-1.2.0-honor-displaysize.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/136_fedora_xserver-1.2.0-honor-displaysize.patch @@ -0,0 +1,15 @@ +--- xorg-server-1.2.0/hw/xfree86/ddc/ddcProperty.c.jx 2007-02-26 13:39:00.000000000 -0500 ++++ xorg-server-1.2.0/hw/xfree86/ddc/ddcProperty.c 2007-02-26 14:37:33.000000000 -0500 +@@ -313,8 +313,10 @@ + + preferred = PREFERRED_TIMING_MODE(DDC->features.msc); + +- Monitor->widthmm = 10 * DDC->features.hsize; +- Monitor->heightmm = 10 * DDC->features.vsize; ++ if (Monitor->widthmm <= 0 && Monitor->heightmm <= 0) { ++ Monitor->widthmm = 10 * DDC->features.hsize; ++ Monitor->heightmm = 10 * DDC->features.vsize; ++ } + + /* If this is a digital display, then we can use reduced blanking */ + if (DDC->features.input_type) --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/127_mesa-6.5.3-compat.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/127_mesa-6.5.3-compat.diff @@ -0,0 +1,421 @@ +Index: xorg-server/configure.ac +=================================================================== +--- xorg-server.orig/configure.ac 2007-07-31 12:32:21.000000000 +0200 ++++ xorg-server/configure.ac 2007-07-31 12:32:22.000000000 +0200 +@@ -1723,6 +1723,7 @@ + GL/mesa/swrast/Makefile + GL/mesa/swrast_setup/Makefile + GL/mesa/tnl/Makefile ++GL/mesa/vbo/Makefile + GL/mesa/X/Makefile + include/Makefile + afb/Makefile +Index: xorg-server/GL/mesa/glapi/Makefile.am +=================================================================== +--- xorg-server.orig/GL/mesa/glapi/Makefile.am 2007-07-24 20:54:42.000000000 +0200 ++++ xorg-server/GL/mesa/glapi/Makefile.am 2007-07-31 12:32:22.000000000 +0200 +@@ -7,7 +7,6 @@ + + INCLUDES = -I@MESA_SOURCE@/include \ + -I../X \ +- -I../array_cache \ + -I../glapi \ + -I../main \ + -I../math \ +Index: xorg-server/GL/mesa/main/Makefile.am +=================================================================== +--- xorg-server.orig/GL/mesa/main/Makefile.am 2007-07-24 20:54:42.000000000 +0200 ++++ xorg-server/GL/mesa/main/Makefile.am 2007-07-31 12:32:22.000000000 +0200 +@@ -7,7 +7,6 @@ + + INCLUDES = -I@MESA_SOURCE@/include \ + -I../X \ +- -I../array_cache \ + -I../glapi \ + -I../main \ + -I../math \ +@@ -62,13 +61,14 @@ + matrix.c \ + mipmap.c \ + mm.c \ +- occlude.c \ + pixel.c \ + points.c \ + polygon.c \ ++ queryobj.c \ + rastpos.c \ + rbadaptors.c \ + renderbuffer.c \ ++ shaders.c \ + state.c \ + stencil.c \ + texcompress.c \ +Index: xorg-server/GL/mesa/Makefile.am +=================================================================== +--- xorg-server.orig/GL/mesa/Makefile.am 2007-07-24 20:54:42.000000000 +0200 ++++ xorg-server/GL/mesa/Makefile.am 2007-07-31 12:32:22.000000000 +0200 +@@ -1,15 +1,15 @@ +-SUBDIRS = main math array_cache swrast swrast_setup tnl shader X glapi ++SUBDIRS = main math swrast swrast_setup tnl shader X glapi vbo + + noinst_LTLIBRARIES = libGLcore.la + + libGLcore_la_SOURCES = dummy.c + libGLcore_la_LIBADD = main/libmain.la \ + math/libmath.la \ +- array_cache/libac.la \ + swrast/libswrast.la \ + swrast_setup/libss.la \ + tnl/libtnl.la \ + shader/libshader.la \ + shader/grammar/libgrammar.la \ + shader/slang/libslang.la \ ++ vbo/libvbo.la \ + X/libX.la +Index: xorg-server/GL/mesa/math/Makefile.am +=================================================================== +--- xorg-server.orig/GL/mesa/math/Makefile.am 2007-07-24 20:54:42.000000000 +0200 ++++ xorg-server/GL/mesa/math/Makefile.am 2007-07-31 12:32:22.000000000 +0200 +@@ -7,7 +7,6 @@ + + INCLUDES = -I@MESA_SOURCE@/include \ + -I../X \ +- -I../array_cache \ + -I../glapi \ + -I../main \ + -I../math \ +Index: xorg-server/GL/mesa/shader/grammar/Makefile.am +=================================================================== +--- xorg-server.orig/GL/mesa/shader/grammar/Makefile.am 2007-07-24 20:54:42.000000000 +0200 ++++ xorg-server/GL/mesa/shader/grammar/Makefile.am 2007-07-31 12:32:22.000000000 +0200 +@@ -7,7 +7,6 @@ + + INCLUDES = -I@MESA_SOURCE@/include \ + -I../../X \ +- -I../../array_cache \ + -I../../glapi \ + -I../../main \ + -I../../math \ +Index: xorg-server/GL/mesa/shader/Makefile.am +=================================================================== +--- xorg-server.orig/GL/mesa/shader/Makefile.am 2007-07-24 20:54:42.000000000 +0200 ++++ xorg-server/GL/mesa/shader/Makefile.am 2007-07-31 12:32:22.000000000 +0200 +@@ -9,7 +9,6 @@ + + INCLUDES = -I@MESA_SOURCE@/include \ + -I../X \ +- -I../array_cache \ + -I../glapi \ + -I../main \ + -I../math \ +@@ -28,8 +27,13 @@ + atifragshader.c \ + nvfragparse.c \ + nvprogram.c \ +- nvvertexec.c \ +- nvvertparse.c \ ++ nvvertparse.c \ ++ prog_debug.c \ ++ prog_execute.c \ ++ prog_instruction.c \ ++ prog_parameter.c \ ++ prog_print.c \ + program.c \ +- shaderobjects.c \ +- shaderobjects_3dlabs.c ++ programopt.c \ ++ prog_statevars.c \ ++ shader_api.c +Index: xorg-server/GL/mesa/shader/slang/Makefile.am +=================================================================== +--- xorg-server.orig/GL/mesa/shader/slang/Makefile.am 2007-07-24 20:54:42.000000000 +0200 ++++ xorg-server/GL/mesa/shader/slang/Makefile.am 2007-07-31 12:32:22.000000000 +0200 +@@ -8,7 +8,6 @@ + INCLUDES = -I@MESA_SOURCE@/include \ + -I../grammar \ + -I../../X \ +- -I../../array_cache \ + -I../../glapi \ + -I../../main \ + -I../../math \ +@@ -19,23 +18,24 @@ + -I../.. \ + -I$(top_srcdir)/hw/xfree86/os-support + +-nodist_libslang_la_SOURCES = slang_analyse.c \ +- slang_assemble_assignment.c \ +- slang_assemble.c \ +- slang_assemble_conditional.c \ +- slang_assemble_constructor.c \ +- slang_assemble_typeinfo.c \ ++nodist_libslang_la_SOURCES = slang_builtin.c \ ++ slang_codegen.c \ + slang_compile.c \ + slang_compile_function.c \ + slang_compile_operation.c \ + slang_compile_struct.c \ + slang_compile_variable.c \ +- slang_execute.c \ +- slang_execute_x86.c \ +- slang_export.c \ +- slang_library_texsample.c \ ++ slang_emit.c \ ++ slang_ir.c \ ++ slang_label.c \ + slang_library_noise.c \ + slang_link.c \ ++ slang_log.c \ ++ slang_mem.c \ + slang_preprocess.c \ ++ slang_print.c \ ++ slang_simplify.c \ + slang_storage.c \ +- slang_utility.c ++ slang_typeinfo.c \ ++ slang_utility.c \ ++ slang_vartable.c +Index: xorg-server/GL/mesa/swrast/Makefile.am +=================================================================== +--- xorg-server.orig/GL/mesa/swrast/Makefile.am 2007-07-24 20:54:42.000000000 +0200 ++++ xorg-server/GL/mesa/swrast/Makefile.am 2007-07-31 12:32:22.000000000 +0200 +@@ -7,7 +7,6 @@ + + INCLUDES = -I@MESA_SOURCE@/include \ + -I../X \ +- -I../array_cache \ + -I../glapi \ + -I../main \ + -I../math \ +@@ -24,7 +23,6 @@ + s_aatriangle.c \ + s_accum.c \ + s_alpha.c \ +- s_arbshader.c \ + s_atifragshader.c \ + s_bitmap.c \ + s_blend.c \ +@@ -36,11 +34,11 @@ + s_drawpix.c \ + s_feedback.c \ + s_fog.c \ ++ s_fragprog.c \ + s_imaging.c \ + s_lines.c \ + s_logic.c \ + s_masking.c \ +- s_nvfragprog.c \ + s_points.c \ + s_readpix.c \ + s_span.c \ +Index: xorg-server/GL/mesa/swrast_setup/Makefile.am +=================================================================== +--- xorg-server.orig/GL/mesa/swrast_setup/Makefile.am 2007-07-24 20:54:42.000000000 +0200 ++++ xorg-server/GL/mesa/swrast_setup/Makefile.am 2007-07-31 12:32:22.000000000 +0200 +@@ -7,7 +7,6 @@ + + INCLUDES = -I@MESA_SOURCE@/include \ + -I../X \ +- -I../array_cache \ + -I../glapi \ + -I../main \ + -I../math \ +Index: xorg-server/GL/mesa/tnl/Makefile.am +=================================================================== +--- xorg-server.orig/GL/mesa/tnl/Makefile.am 2007-07-24 20:54:42.000000000 +0200 ++++ xorg-server/GL/mesa/tnl/Makefile.am 2007-07-31 12:32:22.000000000 +0200 +@@ -7,7 +7,6 @@ + + INCLUDES = -I@MESA_SOURCE@/include \ + -I../X \ +- -I../array_cache \ + -I../glapi \ + -I../main \ + -I../math \ +@@ -19,16 +18,9 @@ + -I.. \ + -I$(top_srcdir)/hw/xfree86/os-support + +-nodist_libtnl_la_SOURCES = t_array_api.c \ +- t_array_import.c \ +- t_context.c \ ++nodist_libtnl_la_SOURCES = t_context.c \ ++ t_draw.c \ + t_pipeline.c \ +- t_save_api.c \ +- t_save_loopback.c \ +- t_save_playback.c \ +- t_vb_arbprogram.c \ +- t_vb_arbprogram_sse.c \ +- t_vb_arbshader.c \ + t_vb_cull.c \ + t_vb_fog.c \ + t_vb_light.c \ +@@ -42,9 +34,4 @@ + t_vertex.c \ + t_vertex_generic.c \ + t_vertex_sse.c \ +- t_vp_build.c \ +- t_vtx_api.c \ +- t_vtx_eval.c \ +- t_vtx_exec.c \ +- t_vtx_generic.c \ +- t_vtx_x86.c ++ t_vp_build.c +Index: xorg-server/GL/mesa/vbo/Makefile.am +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ xorg-server/GL/mesa/vbo/Makefile.am 2007-07-31 12:32:22.000000000 +0200 +@@ -0,0 +1,35 @@ ++noinst_LTLIBRARIES = libvbo.la ++ ++AM_CFLAGS = \ ++ $(DIX_CFLAGS) \ ++ -DXFree86Server \ ++ @GLX_DEFINES@ ++ ++INCLUDES = -I@MESA_SOURCE@/include \ ++ -I../X \ ++ -I../glapi \ ++ -I../main \ ++ -I../math \ ++ -I../shader \ ++ -I../shader/slang \ ++ -I../shader/slang \ ++ -I../swrast \ ++ -I../swrast_setup \ ++ -I../tnl \ ++ -I.. \ ++ -I$(top_srcdir)/hw/xfree86/os-support ++ ++nodist_libvbo_la_SOURCES = vbo_context.c \ ++ vbo_exec_api.c \ ++ vbo_exec_array.c \ ++ vbo_exec.c \ ++ vbo_exec_draw.c \ ++ vbo_exec_eval.c \ ++ vbo_rebase.c \ ++ vbo_save_api.c \ ++ vbo_save.c \ ++ vbo_save_draw.c \ ++ vbo_save_loopback.c \ ++ vbo_split.c \ ++ vbo_split_copy.c \ ++ vbo_split_inplace.c +Index: xorg-server/GL/mesa/X/Makefile.am +=================================================================== +--- xorg-server.orig/GL/mesa/X/Makefile.am 2007-07-24 20:54:42.000000000 +0200 ++++ xorg-server/GL/mesa/X/Makefile.am 2007-07-31 12:32:22.000000000 +0200 +@@ -2,7 +2,6 @@ + + INCLUDES = -I@MESA_SOURCE@/include \ + -I../X \ +- -I../array_cache \ + -I../glapi \ + -I../main \ + -I../math \ +@@ -21,18 +20,15 @@ + AM_CFLAGS = \ + $(DIX_CFLAGS) \ + -DXFree86Server \ +- @GLX_DEFINES@ \ +- -DXFree86Server ++ @GLX_DEFINES@ + +-libX_la_SOURCES = xf86glx.c \ +- xf86glx_util.c \ +- xf86glx_util.h \ +- xf86glxint.h ++libX_la_SOURCES = xf86glx.c + + nodist_libX_la_SOURCES = \ + xm_api.c \ + xm_buffer.c \ + xm_dd.c \ ++ xm_image.c \ + xm_line.c \ + xm_span.c \ + xm_tri.c \ +Index: xorg-server/GL/symlink-mesa.sh +=================================================================== +--- xorg-server.orig/GL/symlink-mesa.sh 2007-07-24 20:54:42.000000000 +0200 ++++ xorg-server/GL/symlink-mesa.sh 2007-07-31 12:32:22.000000000 +0200 +@@ -85,15 +85,6 @@ + done + } + +-symlink_mesa_ac() { +- src_dir src/mesa/array_cache +- dst_dir mesa/array_cache +- +- for src in $REAL_SRC_DIR/*.c $REAL_SRC_DIR/*.h; do +- action `basename $src` +- done +-} +- + symlink_mesa_swrast() { + src_dir src/mesa/swrast + dst_dir mesa/swrast +@@ -157,6 +148,15 @@ + done + } + ++symlink_mesa_vbo() { ++ src_dir src/mesa/vbo ++ dst_dir mesa/vbo ++ ++ for src in $REAL_SRC_DIR/*.c $REAL_SRC_DIR/*.h; do ++ action `basename $src` ++ done ++} ++ + symlink_mesa_x() { + src_dir src/mesa/drivers/x11 + dst_dir mesa/X +@@ -168,6 +168,8 @@ + action xm_api.c + action xm_buffer.c + action xm_dd.c ++ action xm_image.c ++ action xm_image.h + action xm_line.c + action xm_span.c + action xm_tri.c +@@ -203,7 +205,6 @@ + symlink_mesa() { + symlink_mesa_main + symlink_mesa_math +- symlink_mesa_ac + symlink_mesa_swrast + symlink_mesa_ss + symlink_mesa_tnl +@@ -215,6 +216,7 @@ + symlink_mesa_glapi + symlink_mesa_ppc + symlink_mesa_sparc ++ symlink_mesa_vbo + symlink_mesa_x86 + symlink_mesa_x8664 + } +@@ -225,9 +227,6 @@ + dst_dir glx + + action indirect_size.h +- +- src_dir src/mesa/drivers/dri/common +- + action glcontextmodes.c + action glcontextmodes.h + +@@ -289,9 +288,9 @@ + } + + usage() { +- echo symlink.sh src-dir dst-dir +- echo src-dir: the xc directory of the monolithic source tree +- echo dst-dir: the modular source tree containing proto, app, lib, ... ++ echo symlink-mesa.sh src-dir dst-dir ++ echo src-dir: the Mesa source directory ++ echo dst-dir: the GL subdirectory of the Xserver modular tree + } + + # Check commandline args --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/141_fedora_xserver-1.3.0-edid-quirk-backports.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/141_fedora_xserver-1.3.0-edid-quirk-backports.patch @@ -0,0 +1,27 @@ +diff -up xorg-server-1.3.0.0/hw/xfree86/modes/xf86EdidModes.c.jx xorg-server-1.3.0.0/hw/xfree86/modes/xf86EdidModes.c +--- xorg-server-1.3.0.0/hw/xfree86/modes/xf86EdidModes.c.jx 2007-04-18 00:33:14.000000000 -0400 ++++ xorg-server-1.3.0.0/hw/xfree86/modes/xf86EdidModes.c 2007-07-12 09:45:38.000000000 -0400 +@@ -71,6 +71,10 @@ static Bool quirk_dt_sync_hm_vp (int scr + if (memcmp (DDC->vendor.name, "VSC", 4) == 0 && + DDC->vendor.prod_id == 58653) + return TRUE; ++ /* Samsung SyncMaster 205BW */ ++ if (memcmp (DDC->vendor.name, "SAM", 4) == 0 && ++ DDC->vendor.prod_id == 541) ++ return TRUE; + + return FALSE; + } +@@ -87,9 +91,10 @@ static Bool quirk_prefer_large_60 (int s + DDC->vendor.prod_id == 44358) + return TRUE; + +- /* Samsung SyncMaster 226BW */ ++ /* Samsung SyncMaster 22[56]BW */ + if (memcmp (DDC->vendor.name, "SAM", 4) == 0 && +- DDC->vendor.prod_id == 638) ++ (DDC->vendor.prod_id == 638 || ++ DDC->vendor.prod_id == 596)) + return TRUE; + + return FALSE; --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/224_Fix_calculations_in_x86_emulator_for_the_long_long_case_Andreas_Schwab.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/224_Fix_calculations_in_x86_emulator_for_the_long_long_case_Andreas_Schwab.patch @@ -0,0 +1,29 @@ +From: Matthias Hopf +Date: Thu, 15 Mar 2007 15:56:01 +0000 (+0100) +Subject: Fix calculations in x86 emulator for the long long case (Andreas Schwab). +X-Git-Tag: xorg-server-1.3.99.0 +X-Git-Url: http://gitweb.freedesktop.org/?p=xorg/xserver.git;a=commitdiff;h=2fe74ef339c3a4902ae8214f5a0454662895422c + +Fix calculations in x86 emulator for the long long case (Andreas Schwab). +--- + +--- a/hw/xfree86/x86emu/prim_ops.c ++++ b/hw/xfree86/x86emu/prim_ops.c +@@ -2082,7 +2082,7 @@ Implements the IMUL instruction and side + void imul_long_direct(u32 *res_lo, u32* res_hi,u32 d, u32 s) + { + #ifdef __HAS_LONG_LONG__ +- s64 res = (s32)d * (s32)s; ++ s64 res = (s64)(s32)d * (s32)s; + + *res_lo = (u32)res; + *res_hi = (u32)(res >> 32); +@@ -2174,7 +2174,7 @@ Implements the MUL instruction and side + void mul_long(u32 s) + { + #ifdef __HAS_LONG_LONG__ +- u64 res = (u32)M.x86.R_EAX * (u32)s; ++ u64 res = (u64)M.x86.R_EAX * s; + + M.x86.R_EAX = (u32)res; + M.x86.R_EDX = (u32)(res >> 32); --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/13_debian_add_xkbpath_env_variable.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/13_debian_add_xkbpath_env_variable.diff @@ -0,0 +1,31 @@ +Index: xorg-server/xkb/xkbInit.c +=================================================================== +--- xorg-server.orig/xkb/xkbInit.c 2007-02-04 08:13:34.000000000 +0100 ++++ xorg-server/xkb/xkbInit.c 2007-02-04 09:01:19.000000000 +0100 +@@ -841,6 +841,14 @@ + extern unsigned char XkbDfltAccessXOptions; + + int ++xkbInitGlobals() ++{ ++ char * xkbpath= getenv("XKBPATH"); ++ if (xkbpath!=NULL) ++ XkbBaseDirectory= xkbpath; ++} ++ ++int + XkbProcessArguments(int argc,char *argv[],int i) + { + if (strcmp(argv[i],"-kb")==0) { +Index: xorg-server/os/utils.c +=================================================================== +--- xorg-server.orig/os/utils.c 2007-02-04 08:18:43.000000000 +0100 ++++ xorg-server/os/utils.c 2007-02-04 09:01:19.000000000 +0100 +@@ -696,6 +696,7 @@ + */ + void InitGlobals(void) + { ++ xkbInitGlobals(); + ddxInitGlobals(); + } + --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/series +++ xorg-server-1.3.0.0.dfsg/debian/patches/series @@ -0,0 +1,94 @@ +001_ubuntu_add_extra_modelines_from_xorg.patch -p1 +02_libvgahw_gcc4_volatile_fix.diff +03_xnest_manpage_overhaul.diff +04_read_rom_in_chunks.diff +05_module_defaults.diff +06_use_proc_instead_of_sysfs_for_pci_domains.diff +07_stolen_from_HEAD_xorgconf_manpage.diff +08_s390_servermd.diff +09_debian_xserver_rtff.diff -p0 +10_dont_look_in_home_for_config.diff -p0 +11_define_XFree86Server.diff +12_security_policy_in_etc.diff +13_debian_add_xkbpath_env_variable.diff +16_s390_fix.diff +21_glx_align_fixes.patch +23_kfreebsd_support.diff +24_hurd_ioperm_fix.diff +32_disable_sparc_pci_bridge.diff +39_alpha_build_flags.patch -p0 +40_consolidate_portPriv_pDraw_assignments.diff +41_vbe_filter_less.diff +42_only_run_special_key_behaviours_on_non-XKB.diff +43_xephyr_crash_at_exit.diff +44_fedora-xephyr-keysym-madness.diff +45_CVE-2007-2437.diff +46_export-ramdac-symbols.diff +47_fbdevhw_magic_numbers.diff +48_disable_type1.diff +49_map_keyboard_driver_to_kbd.diff -p0 +50_alpha_no_include_asm_pci.h.diff +51_xkb-and-loathing.diff +52_avoid_acpi_insanity.diff +91_ttf2pt1 +91_ttf2pt1_updates +92_xprint-security-holes-fix.patch +93_spooltodir_check_file_exists +93_xprint_fonts_fix +94_use_default_font_path.diff +100_security_fdo-bug-7447.diff +102_ubuntu_sharevts_load_cpu.patch +104_fedora_init_origins_fix.patch +106_ubuntu_fpic_libxf86config.patch +107_fedora_dont_backfill_bg_none.patch +110_fedora_no_move_damage.patch +114_fedora_no_composite_in_xnest.patch +119_ubuntu_enable_composite.diff +120_fedora_disable_offscreen_pixmaps.diff +121_only_switch_vt_when_active.diff +123_no_composite_for_xvfb_run.patch +125_glx_remove-stray__GLinterface.diff +126_glxproxy_remove-stray__GLinterface.diff +127_mesa-6.5.3-compat.diff +132_composite-no-clipping.diff +133_psb_auto.patch +134_fedora_xorg-x11-server-1.1.1-vt-activate-is-a-terrible-api.patch +135_fedora_xorg-x11-server-1.1.1-xkb-in-xnest.patch +136_fedora_xserver-1.2.0-honor-displaysize.patch +137_fedora_xserver-1.2.0-vfprintf.patch +138_fedora_xserver-1.3.0-default-dpi.patch +139_fedora_xserver-1.3.0-document-fontpath-correctly.patch +140_fedora_xserver-1.3.0-domain-obiwan.patch +141_fedora_xserver-1.3.0-edid-quirk-backports.patch +142_fedora_xserver-1.3.0-no-pseudocolor-composite.patch +144_fedora_xserver-1.3.0-xnest-exposures.patch +145_glx_visuals_bound_check.patch +202_Add_quirk_for_Acer_AL1706_monitor_to_force_60hz_refresh.patch +205_Bug_10770-_Inputdevs_isnt_a_valid_config_file_keyword.patch +208_Bug_6620-_Fixed_a_missing_else_in_ATIPseudoDMAInit.patch +216_Bug_9041-_Check_the_return_code_in_xf86MapDomainMemory.patch +221_ExaOffscreenMarkUsed-_Dont_crash_when_theres_no_offscreen_memory.patch +222_Fix_a_crash_when_rotating_the_screen.patch +223_Fix_bug_8871-scrolling_corruption_with_a_compositing_manager.patch +224_Fix_calculations_in_x86_emulator_for_the_long_long_case_Andreas_Schwab.patch +227_Fix_sync_polarity_on_Samsung_SyncMaster_205BW_monitor.patch +230_In___glXCreateARGBConfig_insert_the_new_GL_mode_at_the__end__of_the_linked_list.patch +231_In_dmxBackendMouGetInfo_initialize_the_info-minval_maxval_arrays_to_the_size_of_the_backend_display.patch +234_Reapply_patch_to_fix_AMD_CPU_detection.patch +236_Syncmaster_226_monitor_needs_60Hz_refresh_10545.patch +238_Update_pci.ids_to_2007-07-16_snapshot.patch +241_XFree86-_Treat_evdev_and_vmmouse_as_mouse_drivers_bug_10512_10559.patch +243_exaDriverInit-_Fail_if_pScreenInfo_or_a_member_of_it_is_invalid.patch +244_fix_an_occasional_crash_in_GetWindowName_bug-_9798.patch +245_regenerated_to_fix_bug_10371.patch +fix_CVE-2007-5958.patch +fix_CVE-2007-5760.patch +fix_CVE-2007-6427.patch +fix_CVE-2007-6428.patch +fix_CVE-2007-6429.patch +fix_CVE-2008-0006.patch +fix_CVE-2008-1377.patch +fix_CVE-2008-1379.patch +fix_CVE-2008-2360.patch +fix_CVE-2008-2361.patch +fix_CVE-2008-2362.patch --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/42_only_run_special_key_behaviours_on_non-XKB.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/42_only_run_special_key_behaviours_on_non-XKB.diff @@ -0,0 +1,34 @@ +Backport to 7.2 of commit 47c1c948e69cfba950ad37a3133fa2db0bd0ff2c +Original Author: Daniel Stone +Date: Tue Aug 15 15:25:16 2006 +0300 + + kdrive/input: only run special key behaviours on non-XKB + Only attempt to manually deal with special key behaviours (e.g. terminating + the server) when not using XKB, and leave locking behaviour up to GKVE. + +https://bugs.freedesktop.org/show_bug.cgi?id=10313 +Debian bug #415025 + +--- xorg-server-1.2.0/hw/kdrive/src/kinput.c 2007-01-22 21:39:15.000000000 -0800 ++++ xorg-server-1.2.0/hw/kdrive/src/kinput.c 2007-04-09 18:58:43.562841000 -0700 +@@ -1303,20 +1303,6 @@ + xE.u.u.type = KeyPress; + xE.u.u.detail = key_code; + +- switch (KEYCOL1(key_code)) +- { +- case XK_Num_Lock: +- case XK_Scroll_Lock: +- case XK_Shift_Lock: +- case XK_Caps_Lock: +- if (xE.u.u.type == KeyRelease) +- return; +- if (IsKeyDown (key_code)) +- xE.u.u.type = KeyRelease; +- else +- xE.u.u.type = KeyPress; +- } +- + /* + * Check pressed keys which are already down + */ --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/93_xprint_fonts_fix +++ xorg-server-1.3.0.0.dfsg/debian/patches/93_xprint_fonts_fix @@ -0,0 +1,12 @@ +diff -ruN xorg-server-old/hw/xprint/ps/psout_ft.c xorg-server/hw/xprint/ps/psout_ft.c +--- xorg-server-old/hw/xprint/ps/psout_ft.c 2006-04-02 10:09:43.000000000 +1000 ++++ xorg-server/hw/xprint/ps/psout_ft.c 2006-04-14 22:22:42.000000000 +1000 +@@ -280,6 +280,8 @@ + else + { + sprintf(buf, "%s", baseFontName); ++ xfree(self->FontName); ++ self->FontName = NULL; + } + + if( self->FontSize == -1 ) --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/104_fedora_init_origins_fix.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/104_fedora_init_origins_fix.patch @@ -0,0 +1,27 @@ +Patch by krh@redhat.com: + + In a multihead setup, if only the first screen can be + initialized, but the second screen is mentioned first in the + ServerLayout section, the xf86InitOrigins() function will crash + because the screen referred to in the e.g. "RightOf" part is + non-existent. + +Index: a/hw/xfree86/common/xf86Cursor.c +=================================================================== +--- a/hw/xfree86/common/xf86Cursor.c.orig 2007-01-23 07:39:15.000000000 +0200 ++++ a/hw/xfree86/common/xf86Cursor.c 2007-02-08 15:45:02.000000000 +0200 +@@ -569,6 +569,14 @@ + + screen = &xf86ConfigLayout.screens[i]; + ++ if (screen->refscreen != NULL && ++ screen->refscreen->screennum >= xf86NumScreens) { ++ screensLeft &= ~(1 << i); ++ xf86Msg(X_WARNING, "Not including screen \"%s\" in origins calculation.\n", ++ screen->screen->id); ++ continue; ++ } ++ + switch(screen->where) { + case PosObsolete: + OldStyleConfig = TRUE; --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/205_Bug_10770-_Inputdevs_isnt_a_valid_config_file_keyword.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/205_Bug_10770-_Inputdevs_isnt_a_valid_config_file_keyword.patch @@ -0,0 +1,20 @@ +From: Adam Jackson +Date: Thu, 28 Jun 2007 20:29:28 +0000 (-0400) +Subject: Bug #10770: "Inputdevs" isn't a valid config file keyword. +X-Git-Tag: xorg-server-1.3.99.0 +X-Git-Url: http://gitweb.freedesktop.org/?p=xorg/xserver.git;a=commitdiff;h=928836a5abd85466e920eb487fab9ccb295e0c5b + +Bug #10770: "Inputdevs" isn't a valid config file keyword. +--- + +--- a/hw/xfree86/parser/Files.c ++++ b/hw/xfree86/parser/Files.c +@@ -258,7 +258,7 @@ xf86printFileSection (FILE * cf, XF86Con + s++; + p = index (s, ','); + } +- fprintf (cf, "\tInputdevs \"%s\"\n", s); ++ fprintf (cf, "\tInputDevices \"%s\"\n", s); + } + if (ptr->file_fontpath) + { --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/208_Bug_6620-_Fixed_a_missing_else_in_ATIPseudoDMAInit.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/208_Bug_6620-_Fixed_a_missing_else_in_ATIPseudoDMAInit.patch @@ -0,0 +1,23 @@ +From: Alberto Mardegan +Date: Sat, 31 Mar 2007 14:51:24 +0000 (+0200) +Subject: Bug #6620: Fixed a missing 'else' in ATIPseudoDMAInit(). +X-Git-Tag: xorg-server-1.3.99.0 +X-Git-Url: http://gitweb.freedesktop.org/?p=xorg/xserver.git;a=commitdiff;h=f2808005f4ee72c5fd7f5f3dcca181306485113e + +Bug #6620: Fixed a missing 'else' in ATIPseudoDMAInit(). + +Before this, we'd write some registers twice on R200 hardware and also +possibly end up with a bad value in atis->cce_pri_size. +--- + +--- a/hw/kdrive/ati/ati_dma.c ++++ b/hw/kdrive/ati/ati_dma.c +@@ -788,7 +788,7 @@ ATIPseudoDMAInit(ScreenPtr pScreen) + atis->cce_pri_size = MMIO_IN32(mmio, RADEON_REG_CP_CSQ_CNTL) & + R200_CSQ_CNT_PRIMARY_MASK; + MMIO_OUT32(mmio, RADEON_REG_ME_CNTL, RADEON_ME_MODE_FREE_RUN); +- } if (atic->is_radeon) { ++ } else if (atic->is_radeon) { + MMIO_OUT32(mmio, RADEON_REG_CP_CSQ_CNTL, + RADEON_CSQ_PRIPIO_INDDIS); + atis->cce_pri_size = MMIO_IN32(mmio, RADEON_REG_CP_CSQ_CNTL) & --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/fix_CVE-2007-6427.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/fix_CVE-2007-6427.patch @@ -0,0 +1,250 @@ +commit dd5e0f5cd5f3a87fee86d99c073ffa7cf89b0a27 +Author: Matthieu Herrb +Date: Thu Jan 17 15:27:34 2008 +0100 + + Fix for CVE-2007-6427 - Xinput extension memory corruption. + +Index: xorg-server-1.3.0.0.dfsg/Xi/chgfctl.c +=================================================================== +--- xorg-server-1.3.0.0.dfsg.orig/Xi/chgfctl.c 2008-01-17 10:23:17.000000000 -0800 ++++ xorg-server-1.3.0.0.dfsg/Xi/chgfctl.c 2008-01-17 10:25:18.000000000 -0800 +@@ -451,18 +451,13 @@ + xStringFeedbackCtl * f) + { + register char n; +- register long *p; + int i, j; + KeySym *syms, *sup_syms; + + syms = (KeySym *) (f + 1); + if (client->swapped) { + swaps(&f->length, n); /* swapped num_keysyms in calling proc */ +- p = (long *)(syms); +- for (i = 0; i < f->num_keysyms; i++) { +- swapl(p, n); +- p++; +- } ++ SwapLongs((CARD32 *) syms, f->num_keysyms); + } + + if (f->num_keysyms > s->ctrl.max_symbols) { +Index: xorg-server-1.3.0.0.dfsg/Xi/chgkmap.c +=================================================================== +--- xorg-server-1.3.0.0.dfsg.orig/Xi/chgkmap.c 2008-01-17 10:23:17.000000000 -0800 ++++ xorg-server-1.3.0.0.dfsg/Xi/chgkmap.c 2008-01-17 10:27:38.000000000 -0800 +@@ -79,18 +79,14 @@ + SProcXChangeDeviceKeyMapping(register ClientPtr client) + { + register char n; +- register long *p; +- register int i, count; ++ unsigned int count; + + REQUEST(xChangeDeviceKeyMappingReq); + swaps(&stuff->length, n); + REQUEST_AT_LEAST_SIZE(xChangeDeviceKeyMappingReq); +- p = (long *)&stuff[1]; + count = stuff->keyCodes * stuff->keySymsPerKeyCode; +- for (i = 0; i < count; i++) { +- swapl(p, n); +- p++; +- } ++ REQUEST_FIXED_SIZE(xChangeDeviceKeyMappingReq, count * sizeof(CARD32)); ++ SwapLongs((CARD32 *) (&stuff[1]), count); + return (ProcXChangeDeviceKeyMapping(client)); + } + +@@ -106,10 +102,14 @@ + int ret; + unsigned len; + DeviceIntPtr dev; ++ unsigned int count; + + REQUEST(xChangeDeviceKeyMappingReq); + REQUEST_AT_LEAST_SIZE(xChangeDeviceKeyMappingReq); + ++ count = stuff->keyCodes * stuff->keySymsPerKeyCode; ++ REQUEST_FIXED_SIZE(xChangeDeviceKeyMappingReq, count * sizeof(CARD32)); ++ + dev = LookupDeviceIntRec(stuff->deviceid); + if (dev == NULL) { + SendErrorToClient(client, IReqCode, X_ChangeDeviceKeyMapping, 0, +Index: xorg-server-1.3.0.0.dfsg/Xi/chgprop.c +=================================================================== +--- xorg-server-1.3.0.0.dfsg.orig/Xi/chgprop.c 2008-01-17 10:23:17.000000000 -0800 ++++ xorg-server-1.3.0.0.dfsg/Xi/chgprop.c 2008-01-17 10:28:26.000000000 -0800 +@@ -81,19 +81,15 @@ + SProcXChangeDeviceDontPropagateList(register ClientPtr client) + { + register char n; +- register long *p; +- register int i; + + REQUEST(xChangeDeviceDontPropagateListReq); + swaps(&stuff->length, n); + REQUEST_AT_LEAST_SIZE(xChangeDeviceDontPropagateListReq); + swapl(&stuff->window, n); + swaps(&stuff->count, n); +- p = (long *)&stuff[1]; +- for (i = 0; i < stuff->count; i++) { +- swapl(p, n); +- p++; +- } ++ REQUEST_FIXED_SIZE(xChangeDeviceDontPropagateListReq, ++ stuff->count * sizeof(CARD32)); ++ SwapLongs((CARD32 *) (&stuff[1]), stuff->count); + return (ProcXChangeDeviceDontPropagateList(client)); + } + +Index: xorg-server-1.3.0.0.dfsg/Xi/grabdev.c +=================================================================== +--- xorg-server-1.3.0.0.dfsg.orig/Xi/grabdev.c 2008-01-17 10:23:17.000000000 -0800 ++++ xorg-server-1.3.0.0.dfsg/Xi/grabdev.c 2008-01-17 10:31:30.000000000 -0800 +@@ -82,8 +82,6 @@ + SProcXGrabDevice(register ClientPtr client) + { + register char n; +- register long *p; +- register int i; + + REQUEST(xGrabDeviceReq); + swaps(&stuff->length, n); +@@ -91,11 +89,11 @@ + swapl(&stuff->grabWindow, n); + swapl(&stuff->time, n); + swaps(&stuff->event_count, n); +- p = (long *)&stuff[1]; +- for (i = 0; i < stuff->event_count; i++) { +- swapl(p, n); +- p++; +- } ++ ++ if (stuff->length != (sizeof(xGrabDeviceReq) >> 2) + stuff->event_count) ++ return BadLength; ++ ++ SwapLongs((CARD32 *) (&stuff[1]), stuff->event_count); + + return (ProcXGrabDevice(client)); + } +Index: xorg-server-1.3.0.0.dfsg/Xi/grabdevb.c +=================================================================== +--- xorg-server-1.3.0.0.dfsg.orig/Xi/grabdevb.c 2008-01-17 10:23:17.000000000 -0800 ++++ xorg-server-1.3.0.0.dfsg/Xi/grabdevb.c 2008-01-17 10:29:29.000000000 -0800 +@@ -80,8 +80,6 @@ + SProcXGrabDeviceButton(register ClientPtr client) + { + register char n; +- register long *p; +- register int i; + + REQUEST(xGrabDeviceButtonReq); + swaps(&stuff->length, n); +@@ -89,11 +87,9 @@ + swapl(&stuff->grabWindow, n); + swaps(&stuff->modifiers, n); + swaps(&stuff->event_count, n); +- p = (long *)&stuff[1]; +- for (i = 0; i < stuff->event_count; i++) { +- swapl(p, n); +- p++; +- } ++ REQUEST_FIXED_SIZE(xGrabDeviceButtonReq, ++ stuff->event_count * sizeof(CARD32)); ++ SwapLongs((CARD32 *) (&stuff[1]), stuff->event_count); + + return (ProcXGrabDeviceButton(client)); + } +Index: xorg-server-1.3.0.0.dfsg/Xi/grabdevk.c +=================================================================== +--- xorg-server-1.3.0.0.dfsg.orig/Xi/grabdevk.c 2008-01-17 10:23:17.000000000 -0800 ++++ xorg-server-1.3.0.0.dfsg/Xi/grabdevk.c 2008-01-17 10:29:46.000000000 -0800 +@@ -80,8 +80,6 @@ + SProcXGrabDeviceKey(register ClientPtr client) + { + register char n; +- register long *p; +- register int i; + + REQUEST(xGrabDeviceKeyReq); + swaps(&stuff->length, n); +@@ -89,11 +87,8 @@ + swapl(&stuff->grabWindow, n); + swaps(&stuff->modifiers, n); + swaps(&stuff->event_count, n); +- p = (long *)&stuff[1]; +- for (i = 0; i < stuff->event_count; i++) { +- swapl(p, n); +- p++; +- } ++ REQUEST_FIXED_SIZE(xGrabDeviceKeyReq, stuff->event_count * sizeof(CARD32)); ++ SwapLongs((CARD32 *) (&stuff[1]), stuff->event_count); + return (ProcXGrabDeviceKey(client)); + } + +Index: xorg-server-1.3.0.0.dfsg/Xi/selectev.c +=================================================================== +--- xorg-server-1.3.0.0.dfsg.orig/Xi/selectev.c 2008-01-17 10:23:17.000000000 -0800 ++++ xorg-server-1.3.0.0.dfsg/Xi/selectev.c 2008-01-17 10:30:21.000000000 -0800 +@@ -84,19 +84,16 @@ + SProcXSelectExtensionEvent(register ClientPtr client) + { + register char n; +- register long *p; +- register int i; + + REQUEST(xSelectExtensionEventReq); + swaps(&stuff->length, n); + REQUEST_AT_LEAST_SIZE(xSelectExtensionEventReq); + swapl(&stuff->window, n); + swaps(&stuff->count, n); +- p = (long *)&stuff[1]; +- for (i = 0; i < stuff->count; i++) { +- swapl(p, n); +- p++; +- } ++ REQUEST_FIXED_SIZE(xSelectExtensionEventReq, ++ stuff->count * sizeof(CARD32)); ++ SwapLongs((CARD32 *) (&stuff[1]), stuff->count); ++ + return (ProcXSelectExtensionEvent(client)); + } + +Index: xorg-server-1.3.0.0.dfsg/Xi/sendexev.c +=================================================================== +--- xorg-server-1.3.0.0.dfsg.orig/Xi/sendexev.c 2008-01-17 10:23:17.000000000 -0800 ++++ xorg-server-1.3.0.0.dfsg/Xi/sendexev.c 2008-01-17 10:30:55.000000000 -0800 +@@ -83,7 +83,7 @@ + SProcXSendExtensionEvent(register ClientPtr client) + { + register char n; +- register long *p; ++ CARD32 *p; + register int i; + xEvent eventT; + xEvent *eventP; +@@ -94,6 +94,11 @@ + REQUEST_AT_LEAST_SIZE(xSendExtensionEventReq); + swapl(&stuff->destination, n); + swaps(&stuff->count, n); ++ ++ if (stuff->length != (sizeof(xSendExtensionEventReq) >> 2) + stuff->count + ++ (stuff->num_events * (sizeof(xEvent) >> 2))) ++ return BadLength; ++ + eventP = (xEvent *) & stuff[1]; + for (i = 0; i < stuff->num_events; i++, eventP++) { + proc = EventSwapVector[eventP->u.u.type & 0177]; +@@ -103,11 +108,8 @@ + *eventP = eventT; + } + +- p = (long *)(((xEvent *) & stuff[1]) + stuff->num_events); +- for (i = 0; i < stuff->count; i++) { +- swapl(p, n); +- p++; +- } ++ p = (CARD32 *)(((xEvent *) & stuff[1]) + stuff->num_events); ++ SwapLongs(p, stuff->count); + return (ProcXSendExtensionEvent(client)); + } + --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/43_xephyr_crash_at_exit.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/43_xephyr_crash_at_exit.diff @@ -0,0 +1,30 @@ +* Tue Mar 13 2007 Adam Jackson 1.2.99.901-2 +- xserver-1.2.99.901-xephyr-crash-at-exit.patch: Fix yet another GLX visual + mess. (#231425) + +https://bugs.freedesktop.org/show_bug.cgi?id=10713 +http://cvs.fedora.redhat.com/viewcvs/devel/xorg-x11-server/xserver-1.2.99.901-xephyr-crash-at-exit.patch?rev=1.1&view=log +Debian bug #420421 (and maybe #424517) + +--- xorg-server-1.2.99.901/GL/mesa/X/xf86glx.c.jx 2007-03-07 14:15:25.000000000 -0500 ++++ xorg-server-1.2.99.901/GL/mesa/X/xf86glx.c 2007-03-13 14:27:38.000000000 -0400 +@@ -281,12 +281,14 @@ + __GLXMESAscreen *mesaScreen = (__GLXMESAscreen *) screen; + int i; + +- for (i = 0; i < mesaScreen->num_vis; i++) { +- if (mesaScreen->xm_vis[i]) +- XMesaDestroyVisual(mesaScreen->xm_vis[i]); +- } ++ if (mesaScreen->xm_vis) { ++ for (i = 0; i < mesaScreen->num_vis; i++) { ++ if (mesaScreen->xm_vis[i]) ++ XMesaDestroyVisual(mesaScreen->xm_vis[i]); ++ } + +- xfree(mesaScreen->xm_vis); ++ xfree(mesaScreen->xm_vis); ++ } + + __glXScreenDestroy(screen); + --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/216_Bug_9041-_Check_the_return_code_in_xf86MapDomainMemory.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/216_Bug_9041-_Check_the_return_code_in_xf86MapDomainMemory.patch @@ -0,0 +1,50 @@ +From: Bjorn Helgaas +Date: Thu, 16 Nov 2006 16:29:06 +0000 (+0100) +Subject: Bug 9041: Check the return code in xf86MapDomainMemory(). +X-Git-Tag: xorg-server-1.3.99.0 +X-Git-Url: http://gitweb.freedesktop.org/?p=xorg/xserver.git;a=commitdiff;h=ae3c9ad4abe66784d7ee474455003d2745699286 + +Bug 9041: Check the return code in xf86MapDomainMemory(). +--- + +--- a/hw/xfree86/os-support/bus/linuxPci.c ++++ b/hw/xfree86/os-support/bus/linuxPci.c +@@ -683,28 +683,28 @@ xf86MapDomainMemory(int ScreenNum, int F + ADDRESS Base, unsigned long Size) + { + int domain = xf86GetPciDomain(Tag); +- int fd; ++ int fd = -1; + pointer addr; + + /* + * We use /proc/bus/pci on non-legacy addresses or if the Linux sysfs + * legacy_mem interface is unavailable. + */ +- if (Base > 1024*1024) +- return linuxMapPci(ScreenNum, Flags, Tag, Base, Size, ++ if (Base >= 1024*1024) ++ addr = linuxMapPci(ScreenNum, Flags, Tag, Base, Size, + PCIIOC_MMAP_IS_MEM); +- +- if ((fd = linuxOpenLegacy(Tag, "legacy_mem")) < 0) +- return linuxMapPci(ScreenNum, Flags, Tag, Base, Size, ++ else if ((fd = linuxOpenLegacy(Tag, "legacy_mem")) < 0) ++ addr = linuxMapPci(ScreenNum, Flags, Tag, Base, Size, + PCIIOC_MMAP_IS_MEM); ++ else ++ addr = mmap(NULL, Size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, Base); + +- addr = mmap(NULL, Size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, Base); +- if (addr == MAP_FAILED) { +- close (fd); ++ if (fd >= 0) ++ close(fd); ++ if (addr == NULL || addr == MAP_FAILED) { + perror("mmap failure"); + FatalError("xf86MapDomainMem(): mmap() failure\n"); + } +- close(fd); + return addr; + } + --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/234_Reapply_patch_to_fix_AMD_CPU_detection.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/234_Reapply_patch_to_fix_AMD_CPU_detection.patch @@ -0,0 +1,22 @@ +From: Soren Sandmann Pedersen +Date: Tue, 6 Feb 2007 22:16:23 +0000 (-0500) +Subject: Reapply patch to fix AMD CPU detection +X-Git-Tag: xorg-server-1.3.99.0 +X-Git-Url: http://gitweb.freedesktop.org/?p=xorg/xserver.git;a=commitdiff;h=876b806ec09d5ff0c6cd19df91006c4eefedfaa6 + +Reapply patch to fix AMD CPU detection +--- + +--- a/fb/fbpict.c ++++ b/fb/fbpict.c +@@ -1516,7 +1516,9 @@ static unsigned int detectCPUFeatures(vo + features |= SSE; + if (result & (1 << 26)) + features |= SSE2; +- if ((result & MMX) && !(result & SSE) && (strcmp(vendor, "AuthenticAMD") == 0)) { ++ if ((features & MMX) && !(features & SSE) && ++ (strcmp(vendor, "AuthenticAMD") == 0 || ++ strcmp(vendor, "Geode by NSC") == 0)) { + /* check for AMD MMX extensions */ + + unsigned int result; --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/48_disable_type1.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/48_disable_type1.diff @@ -0,0 +1,67 @@ +Index: xorg-server/configure.ac +=================================================================== +--- xorg-server.orig/configure.ac 2007-07-12 16:10:56.000000000 +0200 ++++ xorg-server/configure.ac 2007-07-12 16:11:11.000000000 +0200 +@@ -412,6 +412,11 @@ + [Install libxf86config (default: disabled)]), + [INSTALL_LIBXF86CONFIG=$enableval], + [INSTALL_LIBXF86CONFIG=no]) ++AC_ARG_ENABLE(type1, ++ AS_HELP_STRING([--disable-type1], ++ [Build the type1 font module (default: enabled)]), ++ [TYPE1=$enableval], ++ [TYPE1=yes]) + + dnl Extensions. + AC_ARG_ENABLE(composite, AS_HELP_STRING([--disable-composite], [Build Composite extension (default: enabled)]), [COMPOSITE=$enableval], [COMPOSITE=yes]) +@@ -525,6 +530,9 @@ + dnl Handle installing libxf86config + AM_CONDITIONAL(INSTALL_LIBXF86CONFIG, [test "x$INSTALL_LIBXF86CONFIG" = xyes]) + ++dnl Handle building the type1 module ++AM_CONDITIONAL(BUILD_TYPE1, [test "x$TYPE1" = xyes]) ++ + dnl --------------------------------------------------------------------------- + dnl Extension section + dnl --------------------------------------------------------------------------- +Index: xorg-server/hw/xfree86/dixmods/Makefile.am +=================================================================== +--- xorg-server.orig/hw/xfree86/dixmods/Makefile.am 2007-07-12 15:57:00.000000000 +0200 ++++ xorg-server/hw/xfree86/dixmods/Makefile.am 2007-07-12 16:11:11.000000000 +0200 +@@ -28,8 +28,11 @@ + $(XTRAPMOD) + + fontsmoduledir = $(moduledir)/fonts +-fontsmodule_LTLIBRARIES = libfreetype.la \ +- libtype1.la ++fontsmodule_LTLIBRARIES = libfreetype.la ++ ++if BUILD_TYPE1 ++fontsmodule_LTLIBRARIES += libtype1.la ++endif + + AM_CFLAGS = @XORG_CFLAGS@ @DIX_CFLAGS@ + INCLUDES = @XORG_INCS@ \ +@@ -90,8 +93,10 @@ + libfreetype_la_LDFLAGS = -avoid-version + libfreetype_la_SOURCES = ftmodule.c + ++if BUILD_TYPE1 + libtype1_la_LDFLAGS = -avoid-version + libtype1_la_SOURCES = type1mod.c ++endif + + libdixmods_la_SOURCES = $(top_srcdir)/mi/miinitext.c + libdixmods_la_CFLAGS = -DXFree86LOADER $(AM_CFLAGS) +Index: xorg-server/hw/xfree86/common/xf86Config.h +=================================================================== +--- xorg-server.orig/hw/xfree86/common/xf86Config.h 2007-07-12 16:11:37.000000000 +0200 ++++ xorg-server/hw/xfree86/common/xf86Config.h 2007-07-12 16:11:54.000000000 +0200 +@@ -59,7 +59,6 @@ + {.name = "dbe", .toLoad = TRUE, .load_opt=NULL}, + {.name = "glx", .toLoad = TRUE, .load_opt=NULL}, + {.name = "freetype", .toLoad = TRUE, .load_opt=NULL}, +- {.name = "type1", .toLoad = TRUE, .load_opt=NULL}, + {.name = "record", .toLoad = TRUE, .load_opt=NULL}, + {.name = "dri", .toLoad = TRUE, .load_opt=NULL}, + {.name = NULL, .toLoad = FALSE, .load_opt=NULL} --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/fix_CVE-2007-6428.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/fix_CVE-2007-6428.patch @@ -0,0 +1,20 @@ +commit 7dc1717ff0f96b99271a912b8948dfce5164d5ad +Author: Matthieu Herrb +Date: Thu Jan 17 15:28:03 2008 +0100 + + Fix for CVE-2007-6428 - TOG-cup extension memory corruption. + +Index: xorg-server-1.3.0.0.dfsg/Xext/cup.c +=================================================================== +--- xorg-server-1.3.0.0.dfsg.orig/Xext/cup.c 2008-01-17 10:32:42.000000000 -0800 ++++ xorg-server-1.3.0.0.dfsg/Xext/cup.c 2008-01-17 10:32:50.000000000 -0800 +@@ -196,6 +196,9 @@ + + REQUEST_SIZE_MATCH (xXcupGetReservedColormapEntriesReq); + ++ if (stuff->screen >= screenInfo.numScreens) ++ return BadValue; ++ + #ifndef HAVE_SPECIAL_DESKTOP_COLORS + citems[CUP_BLACK_PIXEL].pixel = + screenInfo.screens[stuff->screen]->blackPixel; --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/001_ubuntu_add_extra_modelines_from_xorg.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/001_ubuntu_add_extra_modelines_from_xorg.patch @@ -0,0 +1,63 @@ +--- foo/hw/xfree86/common/extramodes.orig 2005-03-28 14:40:18.784980424 +1000 ++++ bar/hw/xfree86/common/extramodes 2005-03-28 15:04:04.731203648 +1000 +@@ -7,27 +7,53 @@ + # 832x624 @ 75Hz (74.55Hz) (fix if the official/Apple spec is different) hsync: 49.725kHz + ModeLine "832x624" 57.284 832 864 928 1152 624 625 628 667 -Hsync -Vsync + ++# 1280x768 @ 60Hz (LCD native res) hsync: 47.70kHz ++ModeLine "1280x768" 80.14 1280 1344 1480 1680 768 769 772 795 ++ ++# 1280x800 @ 60Hz (LCD native res) hsync: 49.68kHz ++ModeLine "1280x800" 83.46 1280 1344 1480 1680 800 801 804 828 ++ + # 1152x768 @ 54.8Hz (Titanium PowerBook) hsync: 44.2kHz +-ModeLine "1152x768" 64.995 1152 1178 1314 1472 768 771 777 806 +hsync +vsync ++ModeLine "1152x768" 64.995 1152 1178 1314 1472 768 771 777 806 +hsync +vsync ++ ++# 1152x864 @ 85Hz (Red Hat custom modeline) ++ModeLine "1152x864" 121.5 1152 1216 1344 1568 864 865 868 911 +hsync -vsync + + # 1400x1050 @ 60Hz (VESA GTF) hsync: 65.5kHz + ModeLine "1400x1050" 122.0 1400 1488 1640 1880 1050 1052 1064 1082 +hsync +vsync + ++# 1400x1050 @ 70Hz (Red Hat custom modeline) hsync: 76.8kHz ++ModeLine "1400x1050" 151.0 1400 1464 1656 1960 1050 1051 1054 1100 +hsync +vsync ++ + # 1400x1050 @ 75Hz (VESA GTF) hsync: 82.2kHz + ModeLine "1400x1050" 155.8 1400 1464 1784 1912 1050 1052 1064 1090 +hsync +vsync + ++# 1400x1050 @ 85Hz (Red Hat custom modeline) hsync: 93.2 kHz ++ModeLine "1400x1050" 184.0 1400 1464 1656 1960 1050 1051 1054 1100 +hsync +vsync ++ ++# 1440x900 @ 100Hz (17" iMac LCD) hsync: 67 kHz ++ModeLine "1440x900" 108.84 1440 1472 1880 1912 900 918 927 946 +hsync +vsync ++ + # 1600x1024 @ 60Hz (SGI 1600SW) hsync: 64.0kHz +-Modeline "1600x1024" 106.910 1600 1620 1640 1670 1024 1027 1030 1067 -hsync -vsync ++ModeLine "1600x1024" 106.910 1600 1620 1640 1670 1024 1027 1030 1067 -hsync -vsync ++ ++# 1680x1050 @ 60Hz (LCD native res) hsync: 64.22kHz ++ModeLine "1680x1050" 147.14 1680 1784 1968 2256 1050 1051 1054 1087 ++ ++# 1920x1200 @ 60Hz (LCD native res) hsync: 74.52kHz ++ModeLine "1920x1200" 193.16 1920 2048 2256 2592 1200 1201 1204 1242 ++ ++# 1920x1200 @ 70Hz (Red Hat custom modeline - bugzilla #53364) hsync: 87.50 KHz ++ModeLine "1920x1200" 230.0 1920 1936 2096 2528 1200 1201 1204 1250 -HSync -VSync + + # 1920x1440 @ 85Hz (VESA GTF) hsync: 128.5kHz +-Modeline "1920x1440" 341.35 1920 2072 2288 2656 1440 1441 1444 1512 -hsync +vsync ++ModeLine "1920x1440" 341.35 1920 2072 2288 2656 1440 1441 1444 1512 -hsync +vsync + + # 2048x1536 @ 60Hz (VESA GTF) hsync: 95.3kHz +-Modeline "2048x1536" 266.95 2048 2200 2424 2800 1536 1537 1540 1589 -hsync +vsync ++ModeLine "2048x1536" 266.95 2048 2200 2424 2800 1536 1537 1540 1589 -hsync +vsync + + # 2048x1536 @ 75Hz (VESA GTF) hsync: 120.2kHz +-Modeline "2048x1536" 340.48 2048 2216 2440 2832 1536 1537 1540 1603 -hsync +vsync ++ModeLine "2048x1536" 340.48 2048 2216 2440 2832 1536 1537 1540 1603 -hsync +vsync + + # 2048x1536 @ 85Hz (VESA GTF) hsync: 137.0kHz +-Modeline "2048x1536" 388.04 2048 2216 2440 2832 1536 1537 1540 1612 -hsync +vsync +- ++ModeLine "2048x1536" 388.04 2048 2216 2440 2832 1536 1537 1540 1612 -hsync +vsync --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/24_hurd_ioperm_fix.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/24_hurd_ioperm_fix.diff @@ -0,0 +1,64 @@ +--- a/hw/xfree86/os-support/hurd/hurd_video.c.orig 2007-05-08 18:28:21.000842117 +0000 ++++ b/hw/xfree86/os-support/hurd/hurd_video.c 2007-05-08 18:27:37.000381314 +0000 +@@ -117,49 +117,29 @@ + /************************************************************************** + * I/O Permissions section + ***************************************************************************/ +-mach_port_t io_port; ++ ++/* ++ * Due to conflicts with "compiler.h", don't rely on to declare ++ * this. ++ */ ++extern int ioperm(unsigned long __from, unsigned long __num, int __turn_on); + + Bool + xf86EnableIO() + { +- mach_port_t device; +- kern_return_t err; +- +- err = get_privileged_ports(NULL, &device); +- if( err ) +- { +- errno = err; +- FatalError("xf86EnableIO() can't get_privileged_ports. (%s)\n",strerror(errno)); +- } +- err = device_open(device,D_READ|D_WRITE,"io",&io_port); +- mach_port_deallocate(mach_task_self(), device); +- if( err ) +- { +- errno = err; +- FatalError("xf86EnableIO() can't device_open. (%s)\n",strerror(errno)); +- } +- +- err = i386_io_port_add(mach_thread_self (), io_port); +- if( err ) +- { +- errno = err; +- FatalError("xf86EnableIO() can't i386_io_port_add.(io_port) (%s)\n",strerror(errno)); ++ if (ioperm(0, 0xffff, 1)) { ++ FatalError("xf86EnableIO: ioperm() failed (%s)\n", strerror(errno)); ++ return FALSE; + } ++ ioperm(0x40,4,0); /* trap access to the timer chip */ ++ ioperm(0x60,4,0); /* trap access to the keyboard controller */ + return TRUE; + } + + void + xf86DisableIO() + { +- kern_return_t err; +- +- err = i386_io_port_remove(mach_thread_self (), io_port); +- if( err ) +- { +- errno = err; +- FatalError("xf86DisableIO() can't i386_io_port_remove.(io_port) (%s)\n",strerror(errno)); +- } +- mach_port_deallocate(mach_task_self(), io_port); ++ ioperm(0,0xffff,0); + return; + } + --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/08_s390_servermd.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/08_s390_servermd.diff @@ -0,0 +1,29 @@ +$Id: 500_s390_support.diff 689 2005-10-19 22:11:30Z dnusinow $ + +Miscellaneous fixes for S/390. + +This patch by Gerhard Tonn. + +Not submitted to XFree86. + +Index: xorg-server/include/servermd.h +=================================================================== +--- xorg-server.orig/include/servermd.h 2006-11-13 19:59:23.000000000 +0100 ++++ xorg-server/include/servermd.h 2006-11-26 01:53:14.000000000 +0100 +@@ -515,7 +515,15 @@ + #define GLYPHPADBYTES 4 + #define GETLEFTBITS_ALIGNMENT 1 + #endif +- ++ ++/* linux on IBM S/390 */ ++#if defined (linux) && defined (__s390__) ++#define IMAGE_BYTE_ORDER MSBFirst ++#define BITMAP_BIT_ORDER MSBFirst ++#define GLYPHPADBYTES 4 ++#define GETLEFTBITS_ALIGNMENT 1 ++#endif /* linux/s390 */ ++ + /* size of buffer to use with GetImage, measured in bytes. There's obviously + * a trade-off between the amount of stack (or whatever ALLOCATE_LOCAL gives + * you) used and the number of times the ddx routine has to be called. --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/222_Fix_a_crash_when_rotating_the_screen.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/222_Fix_a_crash_when_rotating_the_screen.patch @@ -0,0 +1,51 @@ +From: Aaron Plattner +Date: Tue, 31 Jul 2007 23:33:37 +0000 (-0700) +Subject: Fix a crash when rotating the screen. +X-Git-Tag: xorg-server-1.3.99.0 +X-Git-Url: http://gitweb.freedesktop.org/?p=xorg/xserver.git;a=commitdiff;h=aec0d06469a2fa7440fdd5ee03dc256a68704e77 + +Fix a crash when rotating the screen. + +Remember output->crtc before setting a NULL mode because RRCrtcNotify now sets +output->crtc to NULL. Use the saved crtc to set the new mode. +--- + +--- a/randr/rrscreen.c ++++ b/randr/rrscreen.c +@@ -738,6 +738,7 @@ ProcRRSetScreenConfig (ClientPtr client) + int rate; + Bool has_rate; + RROutputPtr output; ++ RRCrtcPtr crtc; + RRModePtr mode; + RR10DataPtr pData = NULL; + RRScreenSizePtr pSize; +@@ -783,7 +784,9 @@ ProcRRSetScreenConfig (ClientPtr client) + rep.status = RRSetConfigFailed; + goto sendReply; + } +- ++ ++ crtc = output->crtc; ++ + /* + * if the client's config timestamp is not the same as the last config + * timestamp, then the config information isn't up-to-date and +@@ -831,7 +834,7 @@ ProcRRSetScreenConfig (ClientPtr client) + return BadValue; + } + +- if ((~output->crtc->rotations) & rotation) ++ if ((~crtc->rotations) & rotation) + { + /* + * requested rotation or reflection not supported by screen +@@ -914,7 +917,7 @@ ProcRRSetScreenConfig (ClientPtr client) + } + } + +- if (!RRCrtcSet (output->crtc, mode, 0, 0, stuff->rotation, 1, &output)) ++ if (!RRCrtcSet (crtc, mode, 0, 0, stuff->rotation, 1, &output)) + rep.status = RRSetConfigFailed; + else + rep.status = RRSetConfigSuccess; --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/123_no_composite_for_xvfb_run.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/123_no_composite_for_xvfb_run.patch @@ -0,0 +1,11 @@ +--- debian/local/xvfb-run 2006-10-13 18:42:49.000000000 +0200 ++++ xorg-server-1.1.1/debian/local/xvfb-run 2006-10-13 18:42:37.000000000 +0200 +@@ -16,7 +16,7 @@ + AUTHFILE= + ERRORFILE=/dev/null + STARTWAIT=3 +-XVFBARGS="-screen 0 640x480x8" ++XVFBARGS="-screen 0 640x480x8 -extension Composite" + LISTENTCP="-nolisten tcp" + XAUTHPROTO=. + --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/93_spooltodir_check_file_exists +++ xorg-server-1.3.0.0.dfsg/debian/patches/93_spooltodir_check_file_exists @@ -0,0 +1,52 @@ +diff -ruN xorg-server-old/hw/xprint/config/C/print/models/PS2PDFspooldir-GS/ps2pdf_spooltodir.sh xorg-server/hw/xprint/config/C/print/models/PS2PDFspooldir-GS/ps2pdf_spooltodir.sh +--- xorg-server-old/hw/xprint/config/C/print/models/PS2PDFspooldir-GS/ps2pdf_spooltodir.sh 2006-04-14 22:14:47.000000000 +1000 ++++ xorg-server/hw/xprint/config/C/print/models/PS2PDFspooldir-GS/ps2pdf_spooltodir.sh 2006-04-14 22:17:05.000000000 +1000 +@@ -108,8 +108,21 @@ + # which may screw-up further processing by other shell scripts ... + filename="`echo \"${filename}\" | tr '[:blank:]' '_' | tr -c -d '[:alnum:]_.-'`" + ++# consider that the end name might be too long: ++# 1. Calculate the length of the suffix (I think we need to count in bytes) ++filename_length="`echo \"${filename_suffix}\" | wc -c`" ++# 2. remove this length from 256 ++filename_length="`echo \"256-${filename_length}\" | bc`" ++# 3. and keep only the first 256 - suffix_length bytes from the name. ++filename="`echo \"${filename}\" | cut -b-${filename_length}`" ++ + # ... add path and suffix ... +-filename="${spooldir}/${filename}${filename_suffix}" ++# ... should be unique, but check anyway ++if [ -e "${spooldir}/${filename}" ]; then ++ filename="`tempfile -d "${spooldir}" -s "_${filename}${filename_suffix}"`" ++else ++ filename="${spooldir}/${filename}${filename_suffix}" ++fi + + verbose "# File name is \"$filename\"." + +diff -ruN xorg-server-old/hw/xprint/config/C/print/models/PSspooldir/spooltodir.sh xorg-server/hw/xprint/config/C/print/models/PSspooldir/spooltodir.sh +--- xorg-server-old/hw/xprint/config/C/print/models/PSspooldir/spooltodir.sh 2006-04-14 22:14:47.000000000 +1000 ++++ xorg-server/hw/xprint/config/C/print/models/PSspooldir/spooltodir.sh 2006-04-14 22:18:06.000000000 +1000 +@@ -108,8 +108,21 @@ + # which may screw-up further processing by other shell scripts ... + filename="`echo \"${filename}\" | tr '[:blank:]' '_' | tr -c -d '[:alnum:]_.-'`" + ++# consider that the end name might be too long: ++# 1. Calculate the length of the suffix (I think we need to count in bytes) ++filename_length="`echo \"${filename_suffix}\" | wc -c`" ++# 2. remove this length from 256 ++filename_length="`echo \"256-${filename_length}\" | bc`" ++# 3. and keep only the first 256 - suffix_length bytes from the name. ++filename="`echo \"${filename}\" | cut -b-${filename_length}`" ++ + # ... add path and suffix ... +-filename="${spooldir}/${filename}${filename_suffix}" ++# ... should be unique, but check anyway ++if [ -e "${spooldir}/${filename}" ]; then ++ filename="`tempfile -d "${spooldir}" -s "_${filename}${filename_suffix}"`" ++else ++ filename="${spooldir}/${filename}${filename_suffix}" ++fi + + verbose "# File name is \"$filename\"." + --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/241_XFree86-_Treat_evdev_and_vmmouse_as_mouse_drivers_bug_10512_10559.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/241_XFree86-_Treat_evdev_and_vmmouse_as_mouse_drivers_bug_10512_10559.patch @@ -0,0 +1,31 @@ +From: Daniel Stone +Date: Sun, 8 Apr 2007 10:39:06 +0000 (+0300) +Subject: XFree86: Treat evdev and vmmouse as mouse drivers (bug #10512, #10559) +X-Git-Tag: xorg-server-1.3.99.0 +X-Git-Url: http://gitweb.freedesktop.org/?p=xorg/xserver.git;a=commitdiff;h=4beeab8424774ea4c3142f29b90e33f1fc7cb154 + +XFree86: Treat evdev and vmmouse as mouse drivers (bug #10512, #10559) + +When we see an evdev or vmmouse section, assume that it's a mouse, and +don't add a default mouse device. This will break users who have an +evdev keyboard section but no mouse, and want the mouse to get added +by default. +--- + +--- a/hw/xfree86/common/xf86Config.c ++++ b/hw/xfree86/common/xf86Config.c +@@ -1287,9 +1287,13 @@ checkCoreInputDevices(serverLayoutPtr se + * always synthesize a 'mouse' section configured to send core + * events, unless a 'void' section is found, in which case the user + * probably wants to run footless. ++ * ++ * If you're using an evdev keyboard and expect a default mouse ++ * section ... deal. + */ + for (i = servlayoutp->inputs; i->identifier && i->driver; i++) { +- if (!strcmp(i->driver, "void") || !strcmp(i->driver, "mouse")) { ++ if (!strcmp(i->driver, "void") || !strcmp(i->driver, "mouse") || ++ !strcmp(i->driver, "vmmouse") || !strcmp(i->driver, "evdev")) { + found = 1; break; + } + } --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/fix_CVE-2007-5958.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/fix_CVE-2007-5958.patch @@ -0,0 +1,25 @@ +Index: xorg-server-1.3.0.0.dfsg/Xext/security.c +=================================================================== +--- xorg-server-1.3.0.0.dfsg.orig/Xext/security.c 2008-01-17 11:21:30.000000000 -0800 ++++ xorg-server-1.3.0.0.dfsg/Xext/security.c 2008-01-17 11:21:59.000000000 -0800 +@@ -1567,9 +1567,9 @@ + return; + + #ifndef __UNIXOS2__ +- f = fopen(SecurityPolicyFile, "r"); ++ f = Fopen(SecurityPolicyFile, "r"); + #else +- f = fopen((char*)__XOS2RedirRoot(SecurityPolicyFile), "r"); ++ f = Fopen((char*)__XOS2RedirRoot(SecurityPolicyFile), "r"); + #endif + if (!f) + { +@@ -1653,7 +1653,7 @@ + } + #endif /* PROPDEBUG */ + +- fclose(f); ++ Fclose(f); + } /* SecurityLoadPropertyAccessList */ + + --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/07_stolen_from_HEAD_xorgconf_manpage.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/07_stolen_from_HEAD_xorgconf_manpage.diff @@ -0,0 +1,2299 @@ +diff --git a/hw/xfree86/doc/man/xorg.conf.man.pre b/hw/xfree86/doc/man/xorg.conf.man.pre +index f05ada6..504e0c2 100644 +--- a/hw/xfree86/doc/man/xorg.conf.man.pre ++++ b/hw/xfree86/doc/man/xorg.conf.man.pre +@@ -3,7 +3,7 @@ + .ds q \N'34' + .TH __xconfigfile__ __filemansuffix__ __vendorversion__ + .SH NAME +-__xconfigfile__ - Configuration File for __xservername__ ++__xconfigfile__ \- configuration File for __xservername__ X server + .SH INTRODUCTION + .B __xservername__ + supports several mechanisms for supplying/obtaining configuration and +@@ -21,9 +21,10 @@ manual page. + .SH DESCRIPTION + .B __xservername__ + uses a configuration file called +-.B __xconfigfile__ +-for its initial setup. This configuration file is searched for in the +-following places when the server is started as a normal user: ++.I __xconfigfile__ ++for its initial setup. ++This configuration file is searched for in the following places when the ++server is started as a normal user: + .PP + .RS 4 + .nf +@@ -31,30 +32,31 @@ following places when the server is started as a normal user: + .IR __projectroot__/etc/X11/ + .IB /etc/X11/ $XORGCONFIG + .IB __projectroot__/etc/X11/ $XORGCONFIG +-.I /etc/X11/__xconfigfile__-4 ++.I /etc/X11/__xconfigfile__\-4 + .I /etc/X11/__xconfigfile__ + .I /etc/__xconfigfile__ + .IR __projectroot__/etc/X11/__xconfigfile__. +-.I __projectroot__/etc/X11/__xconfigfile__-4 ++.I __projectroot__/etc/X11/__xconfigfile__\-4 + .I __projectroot__/etc/X11/__xconfigfile__ + .IR __projectroot__/lib/X11/__xconfigfile__. +-.I __projectroot__/lib/X11/__xconfigfile__-4 ++.I __projectroot__/lib/X11/__xconfigfile__\-4 + .I __projectroot__/lib/X11/__xconfigfile__ + .fi + .RE + .PP + where + .I +-is a relative path (with no ".." components) specified with the ++is a relative path (with no \(lq..\(rq components) specified with the + .B \-config + command line option, + .B $XORGCONFIG +-is the relative path (with no ".." components) specified by that ++is the relative path (with no \(lq..\(rq components) specified by that + environment variable, and + .I +-is the machine's hostname as reported by gethostname(3). ++is the machine's hostname as reported by ++.BR gethostname (__oslibmansuffix__). + .PP +-When the __xservername__ server is started by the "root" user, the config file ++When the __xservername__ server is started by the \(lqroot\(rq user, the config file + search locations are as follows: + .PP + .RS 4 +@@ -66,14 +68,14 @@ search locations are as follows: + .IB /etc/X11/ $XORGCONFIG + .IB __projectroot__/etc/X11/ $XORGCONFIG + .BI $HOME /__xconfigfile__ +-.I /etc/X11/__xconfigfile__-4 ++.I /etc/X11/__xconfigfile__\-4 + .I /etc/X11/__xconfigfile__ + .I /etc/__xconfigfile__ + .IR __projectroot__/etc/X11/__xconfigfile__. +-.I __projectroot__/etc/X11/__xconfigfile__-4 ++.I __projectroot__/etc/X11/__xconfigfile__\-4 + .I __projectroot__/etc/X11/__xconfigfile__ + .IR __projectroot__/lib/X11/__xconfigfile__. +-.I __projectroot__/lib/X11/__xconfigfile__-4 ++.I __projectroot__/lib/X11/__xconfigfile__\-4 + .I __projectroot__/lib/X11/__xconfigfile__ + .fi + .RE +@@ -90,13 +92,13 @@ environment variable (absolute or relative), + is the path specified by that environment variable (usually the home + directory), and + .I +-is the machine's hostname as reported by gethostname(3). ++is the machine's hostname as reported by ++.BR gethostname (__oslibmansuffix__). + .PP + The +-.B __xconfigfile__ +-file is composed of a number of sections which may be present in any +-order. Each section has +-the form: ++.I __xconfigfile__ ++file is composed of a number of sections which may be present in any order. ++Each section has the form: + .PP + .RS 4 + .nf +@@ -121,13 +123,14 @@ The section names are: + .BR "Modes " "Video modes descriptions" + .BR "Screen " "Screen configuration" + .BR "ServerLayout " "Overall layout" +-.BR "DRI " "DRI-specific configuration" +-.BR "Vendor " "Vendor-specific configuration" ++.BR "DRI " "DRI\-specific configuration" ++.BR "Vendor " "Vendor\-specific configuration" + .fi + .RE + .PP + The following obsolete section names are still recognised for compatibility +-purposes. In new config files, the ++purposes. ++In new config files, the + .B InputDevice + section should be used instead. + .PP +@@ -144,35 +147,38 @@ section is no longer recognised. + .PP + The + .B ServerLayout +-sections are at the highest level. They bind together the input and +-output devices that will be used in a session. The input devices +-are described in the ++sections are at the highest level. ++They bind together the input and output devices that will be used in a session. ++The input devices are described in the + .B InputDevice +-sections. Output devices usually consist of multiple independent +-components (e.g., a graphics board and a monitor). These multiple +-components are bound together in the ++sections. ++Output devices usually consist of multiple independent components (e.g., ++a graphics board and a monitor). ++These multiple components are bound together in the + .B Screen + sections, and it is these that are referenced by the + .B ServerLayout +-section. Each ++section. ++Each + .B Screen +-section binds together a graphics board and a monitor. The graphics +-boards are described in the ++section binds together a graphics board and a monitor. ++The graphics boards are described in the + .B Device + sections, and the monitors are described in the + .B Monitor + sections. + .PP +-Config file keywords are case-insensitive, and "_" characters are +-ignored. Most strings (including ++Config file keywords are case\-insensitive, and \(lq_\(rq characters are ++ignored. ++Most strings (including + .B Option + names) are also case-insensitive, and insensitive to white space and +-"_" characters. ++\(lq_\(rq characters. + .PP +-Each config file entry usually takes up a single line in the file. +-They consist of a keyword, which is possibly followed by one or +-more arguments, with the number and types of the arguments depending +-on the keyword. The argument types are: ++Each config file entry usually takes up a single line in the file. They ++consist of a keyword, which is possibly followed by one or more arguments, ++with the number and types of the arguments depending on the keyword. ++The argument types are: + .PP + .RS 4 + .nf +@@ -182,17 +188,18 @@ on the keyword. The argument types are: + .fi + .RE + .PP +-Note: hex integer values must be prefixed with "0x", and octal values +-with "0". ++Note: hex integer values must be prefixed with \(lq0x\(rq, and octal values ++with \(lq0\(rq. + .PP + A special keyword called + .B Option +-may be used to provide free-form data to various components of the server. ++may be used to provide free\-form data to various components of the server. + The + .B Option +-keyword takes either one or two string arguments. The first is the option +-name, and the optional second argument is the option value. Some commonly +-used option value types include: ++keyword takes either one or two string arguments. ++The first is the option name, and the optional second argument is the ++option value. ++Some commonly used option value types include: + .PP + .RS 4 + .nf +@@ -209,8 +216,8 @@ Note that + .B Option + values, not just strings, must be enclosed in quotes. + .PP +-Boolean options may optionally have a value specified. When no value +-is specified, the option's value is ++Boolean options may optionally have a value specified. ++When no value is specified, the option's value is + .BR TRUE . + The following boolean option values are recognised as + .BR TRUE : +@@ -263,30 +270,35 @@ When the unit name is omitted, the correct units will be determined from + the value and the expectations of the appropriate range of the value. + It is recommended that the units always be specified when using frequency + option values to avoid any errors in determining the value. +-.SH FILES SECTION ++.SH "FILES SECTION" + The + .B Files + section is used to specify some path names required by the server. +-Some of these paths can also be set from the command line (see Xserver(__appmansuffix__) +-and __xservername__(__appmansuffix__)). The command line settings override the values specified +-in the config file. The ++Some of these paths can also be set from the command line (see ++.BR Xserver (__appmansuffix__) ++and ++.BR __xservername__ (__appmansuffix__)). ++The command line settings override the values specified in the config ++file. ++The + .B Files + section is optional, as are all of the entries that may appear in it. + .PP + The entries that can appear in this section are: + .TP 7 + .BI "FontPath \*q" path \*q +-sets the search path for fonts. This path is a comma separated list of +-font path elements which the __xservername__ server searches for font databases. ++sets the search path for fonts. ++This path is a comma separated list of font path elements which the __xservername__ ++server searches for font databases. + Multiple + .B FontPath + entries may be specified, and they will be concatenated to build up the + fontpath used by the server. Font path elements may be either absolute +-directory paths, or a font server identifier. Font server identifiers +-have the form: ++directory paths, or a font server identifier. ++Font server identifiers have the form: + .PP + .RS 11 +-.IR / : ++.IR / : + .RE + .PP + .RS 7 +@@ -294,16 +306,16 @@ where + .I + is the transport type to use to connect to the font server (e.g., + .B unix +-for UNIX-domain sockets or ++for UNIX\-domain sockets or + .B tcp + for a TCP/IP connection), + .I + is the hostname of the machine running the font server, and +-.I ++.I + is the port number that the font server is listening on (usually 7100). + .PP + When this entry is not specified in the config file, the server falls back +-to the compiled-in default font path, which contains the following ++to the compiled\-in default font path, which contains the following + font path elements: + .PP + .RS 4 +@@ -338,7 +350,7 @@ font path when the server starts up. + .BI "RGBPath \*q" path \*q + sets the path name for the RGB color database. + When this entry is not specified in the config file, the server falls back +-to the compiled-in default RGB path, which is: ++to the compiled\-in default RGB path, which is: + .PP + .RS 11 + .I __projectroot__/share/X11/rgb +@@ -350,9 +362,10 @@ is added to this path if the server was compiled to use text rather than + binary format RGB color databases. + .TP 7 + .BI "ModulePath \*q" path \*q +-sets the search path for loadable __xservername__ server modules. This path is +-a comma separated list of directories which the __xservername__ server searches +-for loadable modules loading in the order specified. Multiple ++sets the search path for loadable __xservername__ server modules. ++This path is a comma separated list of directories which the __xservername__ server ++searches for loadable modules loading in the order specified. ++Multiple + .B ModulePath + entries may be specified, and they will be concatenated to build the + module search path used by the server. +@@ -360,8 +373,8 @@ module search path used by the server. + .ig + .TP 7 + .BI "LogFile \*q" path \*q +-sets the name of the __xservername__ server log file. The default log file name +-is ++sets the name of the __xservername__ server log file. ++The default log file name is + .PP + .RS 11 + .RI __logdir__/__xservername__. .log +@@ -372,15 +385,18 @@ where + .I + is the display number for the __xservername__ server. + .. +-.SH SERVERFLAGS SECTION ++.SH "SERVERFLAGS SECTION" + In addition to options specific to this section (described below), the + .B ServerFlags + section is used to specify some global +-__xservername__ server options. All of the entries in this section are ++__xservername__ server options. ++All of the entries in this section are + .BR Options , + although for compatibility purposes some of the old style entries are +-still recognised. Those old style entries are not documented here, and +-using them is discouraged. The ++still recognised. ++Those old style entries are not documented here, and using them is ++discouraged. ++The + .B ServerFlags + section is optional, as are the entries that may be specified in it. + .PP +@@ -392,11 +408,12 @@ may be overridden by + .B Options + specified in the active + .B ServerLayout +-section. Options with command line equivalents are overridden when their +-command line equivalent is used. The options recognised by this section +-are: ++section. ++Options with command line equivalents are overridden when their command ++line equivalent is used. ++The options recognised by this section are: + .TP 7 +-.BI "Option \*qDefaultServerLayout\*q \*q" layout-id \*q ++.BI "Option \*qDefaultServerLayout\*q \*q" layout\-id \*q + This specifies the default + .B ServerLayout + section to use in the absence of the +@@ -404,148 +421,185 @@ section to use in the absence of the + command line option. + .TP 7 + .BI "Option \*qNoTrapSignals\*q \*q" boolean \*q +-This prevents the __xservername__ server from trapping a range of unexpected +-fatal signals and exiting cleanly. Instead, the __xservername__ server will die +-and drop core where the fault occurred. The default behaviour is +-for the __xservername__ server to exit cleanly, but still drop a core file. In +-general you never want to use this option unless you are debugging +-an __xservername__ server problem and know how to deal with the consequences. ++This prevents the __xservername__ server from trapping a range of unexpected fatal ++signals and exiting cleanly. ++Instead, the __xservername__ server will die and drop core where the fault occurred. ++The default behaviour is for the __xservername__ server to exit cleanly, but still drop a ++core file. ++In general you never want to use this option unless you are debugging an __xservername__ ++server problem and know how to deal with the consequences. + .TP 7 + .BI "Option \*qDontVTSwitch\*q \*q" boolean \*q + This disallows the use of the + .BI Ctrl+Alt+F n + sequence (where + .RI F n +-refers to one of the numbered function keys). That sequence is normally +-used to switch to another \*qvirtual terminal\*q on operating systems +-that have this feature. When this option is enabled, that key sequence has +-no special meaning and is passed to clients. Default: off. ++refers to one of the numbered function keys). ++That sequence is normally used to switch to another \*qvirtual terminal\*q ++on operating systems that have this feature. ++When this option is enabled, that key sequence has no special meaning and ++is passed to clients. ++Default: off. + .TP 7 + .BI "Option \*qDontZap\*q \*q" boolean \*q + This disallows the use of the + .B Ctrl+Alt+Backspace +-sequence. That sequence is normally used to terminate the __xservername__ server. +-When this option is enabled, that key sequence has no special meaning +-and is passed to clients. Default: off. ++sequence. ++That sequence is normally used to terminate the __xservername__ server. ++When this option is enabled, that key sequence has no special meaning and ++is passed to clients. ++Default: off. + .TP 7 + .BI "Option \*qDontZoom\*q \*q" boolean \*q + This disallows the use of the +-.B Ctrl+Alt+Keypad-Plus ++.B Ctrl+Alt+Keypad\-Plus + and +-.B Ctrl+Alt+Keypad-Minus +-sequences. These sequences allows you to switch between video modes. ++.B Ctrl+Alt+Keypad\-Minus ++sequences. ++These sequences allows you to switch between video modes. + When this option is enabled, those key sequences have no special meaning +-and are passed to clients. Default: off. ++and are passed to clients. ++Default: off. + .TP 7 + .BI "Option \*qDisableVidModeExtension\*q \*q" boolean \*q + This disables the parts of the VidMode extension used by the xvidtune client +-that can be used to change the video modes. Default: the VidMode extension +-is enabled. ++that can be used to change the video modes. ++Default: the VidMode extension is enabled. + .TP 7 + .BI "Option \*qAllowNonLocalXvidtune\*q \*q" boolean \*q + This allows the xvidtune client (and other clients that use the VidMode +-extension) to connect from another host. Default: off. ++extension) to connect from another host. ++Default: off. + .TP 7 + .BI "Option \*qDisableModInDev\*q \*q" boolean \*q +-This disables the parts of the __xservername__-Misc extension that can be used to +-modify the input device settings dynamically. Default: that functionality +-is enabled. ++This disables the parts of the __xservername__\-Misc extension that can be used to ++modify the input device settings dynamically. ++Default: that functionality is enabled. + .TP 7 + .BI "Option \*qAllowNonLocalModInDev\*q \*q" boolean \*q + This allows a client to connect from another host and change keyboard +-and mouse settings in the running server. Default: off. ++and mouse settings in the running server. ++Default: off. + .TP 7 + .BI "Option \*qAllowMouseOpenFail\*q \*q" boolean \*q + This allows the server to start up even if the mouse device can't be +-opened/initialised. Default: false. ++opened/initialised. ++Default: false. + .TP 7 + .BI "Option \*qVTInit\*q \*q" command \*q + Runs + .I command + after the VT used by the server has been opened. +-The command string is passed to "/bin/sh -c", and is run with the +-real user's id with stdin and stdout set to the VT. The purpose +-of this option is to allow system dependent VT initialisation +-commands to be run. This option should rarely be needed. Default: not set. ++The command string is passed to \*q/bin/sh \-c\*q, and is run with the real ++user's id with stdin and stdout set to the VT. ++The purpose of this option is to allow system dependent VT initialisation ++commands to be run. ++This option should rarely be needed. ++Default: not set. + .TP 7 + .BI "Option \*qVTSysReq\*q \*q" boolean \*q +-enables the SYSV-style VT switch sequence for non-SYSV systems +-which support VT switching. This sequence is +-.B Alt-SysRq +-followed +-by a function key ++enables the SYSV\-style VT switch sequence for non\-SYSV systems ++which support VT switching. ++This sequence is ++.B Alt\-SysRq ++followed by a function key + .RB ( Fn ). + This prevents the __xservername__ server trapping the + keys used for the default VT switch sequence, which means that clients can +-access them. Default: off. ++access them. ++Default: off. + .TP 7 + .BI "Option \*qXkbDisable\*q \*q" boolean \*q +-disable/enable the XKEYBOARD extension. The \-kb command line +-option overrides this config file option. Default: XKB is enabled. ++disable/enable the XKEYBOARD extension. ++The \-kb command line option overrides this config file option. ++Default: XKB is enabled. + .\" The following four options are "undocumented". + .ig + .TP 7 + .BI "Option \*qPciProbe1\*q" +-Use PCI probe method 1. Default: set. ++Use PCI probe method 1. ++Default: set. + .TP 7 + .BI "Option \*qPciProbe2\*q" +-Use PCI probe method 2. Default: not set. ++Use PCI probe method 2. ++Default: not set. + .TP 7 + .BI "Option \*qPciForceConfig1\*q" +-Force the use PCI config type 1. Default: not set. ++Force the use PCI config type 1. ++Default: not set. + .TP 7 + .BI "Option \*qPciForceConfig2\*q" +-Force the use PCI config type 2. Default: not set. ++Force the use PCI config type 2. ++Default: not set. + .. + .TP 7 + .BI "Option \*qBlankTime\*q \*q" time \*q +-sets the inactivity timeout for the blanking phase of the screensaver. ++sets the inactivity timeout for the ++.B blank ++phase of the screensaver. + .I time +-is in minutes. This is equivalent to the __xservername__ server's `-s' flag, +-and the value can be changed at run-time with xset(__appmansuffix__). Default: 10 +-minutes. ++is in minutes. ++This is equivalent to the __xservername__ server's ++.B \-s ++flag, and the value can be changed at run\-time with ++.BR xset(__appmansuffix__). ++Default: 10 minutes. + .TP 7 + .BI "Option \*qStandbyTime\*q \*q" time \*q +-sets the inactivity timeout for the "standby" phase of DPMS mode. ++sets the inactivity timeout for the ++.B standby ++phase of DPMS mode. + .I time +-is in minutes, and the value can be changed at run-time with xset(__appmansuffix__). +-Default: 20 minutes. This is only suitable for VESA DPMS compatible +-monitors, and may not be supported by all video drivers. It is only +-enabled for screens that have the ++is in minutes, and the value can be changed at run\-time with ++.BR xset(__appmansuffix__). ++Default: 20 minutes. ++This is only suitable for VESA DPMS compatible monitors, and may not be ++supported by all video drivers. ++It is only enabled for screens that have the + .B \*qDPMS\*q + option set (see the MONITOR section below). + .TP 7 + .BI "Option \*qSuspendTime\*q \*q" time \*q +-sets the inactivity timeout for the "suspend" phase of DPMS mode. ++sets the inactivity timeout for the ++.B suspend ++phase of DPMS mode. + .I time +-is in minutes, and the value can be changed at run-time with xset(__appmansuffix__). +-Default: 30 minutes. This is only suitable for VESA DPMS compatible +-monitors, and may not be supported by all video drivers. It is only +-enabled for screens that have the ++is in minutes, and the value can be changed at run\-time with ++.BR xset(__appmansuffix__). ++Default: 30 minutes. ++This is only suitable for VESA DPMS compatible monitors, and may not be ++supported by all video drivers. ++It is only enabled for screens that have the + .B \*qDPMS\*q + option set (see the MONITOR section below). + .TP 7 + .BI "Option \*qOffTime\*q \*q" time \*q +-sets the inactivity timeout for the "off" phase of DPMS mode. ++sets the inactivity timeout for the ++.B off ++phase of DPMS mode. + .I time +-is in minutes, and the value can be changed at run-time with xset(__appmansuffix__). +-Default: 40 minutes. This is only suitable for VESA DPMS compatible +-monitors, and may not be supported by all video drivers. It is only +-enabled for screens that have the ++is in minutes, and the value can be changed at run\-time with ++.BR xset(__appmansuffix__). ++Default: 40 minutes. ++This is only suitable for VESA DPMS compatible monitors, and may not be ++supported by all video drivers. ++It is only enabled for screens that have the + .B \*qDPMS\*q + option set (see the MONITOR section below). + .TP 7 + .BI "Option \*qPixmap\*q \*q" bpp \*q +-This sets the pixmap format to use for depth 24. Allowed values for ++This sets the pixmap format to use for depth 24. ++Allowed values for + .I bpp +-are 24 and 32. Default: 32 unless driver constraints don't allow this +-(which is rare). Note: some clients don't behave well when this value +-is set to 24. ++are 24 and 32. ++Default: 32 unless driver constraints don't allow this (which is rare). ++Note: some clients don't behave well when this value is set to 24. + .TP 7 + .BI "Option \*qPC98\*q \*q" boolean \*q +-Specify that the machine is a Japanese PC-98 machine. This should not +-be enabled for anything other than the Japanese-specific PC-98 +-architecture. Default: auto-detected. ++Specify that the machine is a Japanese PC\-98 machine. ++This should not be enabled for anything other than the Japanese\-specific ++PC\-98 architecture. ++Default: auto\-detected. + .\" Doubt this should be documented. + .ig + .TP 7 +@@ -555,48 +609,54 @@ Default: 0. + .. + .TP 7 + .BI "Option \*qNoPM\*q \*q" boolean \*q +-Disables something to do with power management events. Default: PM +-enabled on platforms that support it. ++Disables something to do with power management events. ++Default: PM enabled on platforms that support it. + .TP 7 + .BI "Option \*qXinerama\*q \*q" boolean \*q +-enable or disable XINERAMA extension. Default is disabled. ++enable or disable XINERAMA extension. ++Default is disabled. + .TP 7 + .BI "Option \*qAllowDeactivateGrabs\*q \*q" boolean \*q + This option enables the use of the +-.B Ctrl+Alt+Keypad-Divide +-key sequence to deactivate any active keyboard and mouse grabs. Default: +-off. ++.B Ctrl+Alt+Keypad\-Divide ++key sequence to deactivate any active keyboard and mouse grabs. ++Default: off. + .TP 7 + .BI "Option \*qAllowClosedownGrabs\*q \*q" boolean \*q + This option enables the use of the +-.B Ctrl+Alt+Keypad-Multiply +-key sequence to kill clients with an active keyboard or mouse grab as +-well as killing any application that may have locked the server, normally +-using the XGrabServer(__libmansuffix__) Xlib function. Default: off. ++.B Ctrl+Alt+Keypad\-Multiply ++key sequence to kill clients with an active keyboard or mouse grab as well ++as killing any application that may have locked the server, normally using ++the ++.BR XGrabServer(__libmansuffix__) ++Xlib function. ++Default: off. + .br + Note that the options +-.BI AllowDeactivateGrabs ++.B AllowDeactivateGrabs + and +-.BI AllowClosedownGrabs ++.B AllowClosedownGrabs + will allow users to remove the grab used by screen saver/locker programs. +-An API was written to such cases. If you enable this option, make sure +-your screen saver/locker is updated. ++An API was written to such cases. ++If you enable this option, make sure your screen saver/locker is updated. ++Default: off. + .TP 7 + .BI "Option \*qHandleSpecialKeys\*q \*q" when \*q + This option controls when the server uses the builtin handler to process + special key combinations (such as + .BR Ctrl+Alt+Backspace ). +-Normally the XKEYBOARD extension keymaps will provide mappings for each +-of the special key combinations, so the builtin handler is not needed +-unless the XKEYBOARD extension is disabled. The value of ++Normally the XKEYBOARD extension keymaps will provide mappings for each of ++the special key combinations, so the builtin handler is not needed unless ++the XKEYBOARD extension is disabled. ++The value of + .I when + can be + .BR Always , + .BR Never , + or + .BR WhenNeeded . +-Default: Use the builtin handler only if needed. The server will scan +-the keymap for a mapping to the ++Default: Use the builtin handler only if needed. ++The server will scan the keymap for a mapping to the + .B Terminate + action and, if found, use XKEYBOARD for processing actions, otherwise + the builtin handler will be used. +@@ -604,24 +664,30 @@ the builtin handler will be used. + .BI "Option \*qAIGLX\*q \*q" boolean \*q + enable or disable AIGLX. AIGLX is enabled by default. + .TP 7 ++.BI "Option \*qUseDefaultFontPath\*q \*q" boolean \*q ++Include the default font path even if other paths are specified in ++xorg.conf. If enabled, other font paths are included as well. Enabled by ++default. ++.TP 7 + .BI "Option \*qIgnoreABI\*q \*q" boolean \*q + Allow modules built for a different, potentially incompatible version of + the X server to load. Disabled by default. +-.SH MODULE SECTION ++.SH "MODULE SECTION" + The + .B Module + section is used to specify which __xservername__ server modules should be loaded. + This section is ignored when the __xservername__ server is built in static form. + The types of modules normally loaded in this section are __xservername__ server +-extension modules, and font rasteriser modules. Most other module types +-are loaded automatically when they are needed via other mechanisms. ++extension modules, and font rasteriser modules. ++Most other module types are loaded automatically when they are needed via ++other mechanisms. + The + .B Module + section is optional, as are all of the entries that may be specified in + it. + .PP +-Entries in this section may be in two forms. The first and most commonly +-used form is an entry that uses the ++Entries in this section may be in two forms. ++The first and most commonly used form is an entry that uses the + .B Load + keyword, as described here: + .TP 7 +@@ -629,8 +695,9 @@ keyword, as described here: + This instructs the server to load the module called + .IR modulename . + The module name given should be the module's standard name, not the +-module file name. The standard name is case-sensitive, and does not +-include the "lib" prefix, or the ".a", ".o", or ".so" suffixes. ++module file name. ++The standard name is case\-sensitive, and does not include the \(lqlib\(rq ++prefix, or the \(lq.a\(rq, \(lq.o\(rq, or \(lq.so\(rq suffixes. + .PP + .RS 7 + Example: the Type 1 font rasteriser can be loaded with the following entry: +@@ -639,6 +706,20 @@ Example: the Type 1 font rasteriser can be loaded with the following entry: + .B "Load \*qtype1\*q" + .RE + .RE ++.TP 7 ++.BI "Disable \*q" modulename \*q ++This instructs the server to not load the module called ++.IR modulename . ++Some modules are loaded by default in the server, and this overrides that ++default. If a ++.B Load ++instruction is given for the same module, it overrides the ++.B Disable ++instruction and the module is loaded. The module name given should be the ++module's standard name, not the module file name. As with the ++.B Load ++instruction, the standard name is case-sensitive, and does not include the ++"lib" prefix, or the ".a", ".o", or ".so" suffixes. + .PP + The second form of entry is a + .BR SubSection, +@@ -649,13 +730,13 @@ being + that are passed to the module when it is loaded. + .PP + Example: the extmod module (which contains a miscellaneous group of +-server extensions) can be loaded, with the XFree86-DGA extension ++server extensions) can be loaded, with the XFree86\-DGA extension + disabled by using the following entry: + .PP + .RS 4 + .nf + .B "SubSection \*qextmod\*q" +-.B " Option \*qomit XFree86-DGA\*q" ++.B " Option \*qomit XFree86\-DGA\*q" + .B EndSubSection + .fi + .RE +@@ -677,17 +758,20 @@ __projectroot__/lib/modules/extensions + .fi + .RE + .PP +-The "bitmap" font modules is loaded automatically. It is recommended +-that at very least the "extmod" extension module be loaded. If it isn't +-some commonly used server extensions (like the SHAPE extension) will not be +-available. +-.SH INPUTDEVICE SECTION ++The \(lqbitmap\(rq font module is loaded automatically. ++It is recommended ++that at very least the \(lqextmod\(rq extension module be loaded. ++If it isn't, some commonly used server extensions (like the SHAPE ++extension) will not be available. ++.SH "INPUTDEVICE SECTION" + The config file may have multiple + .B InputDevice +-sections. There will normally be at least two: one for the core (primary) +-keyboard, and one of the core pointer. If either of these two is missing, +-a default configuration for the missing ones will be used. Currently the +-default configuration may not work as expected on all platforms. ++sections. ++There will normally be at least two: one for the core (primary) keyboard, ++and one of the core pointer. ++If either of these two is missing, a default configuration for the missing ++ones will be used. ++Currently the default configuration may not work as expected on all platforms. + .PP + .B InputDevice + sections have the following format: +@@ -709,18 +793,21 @@ and + .B Driver + entries are required in all + .B InputDevice +-sections. All other entries are optional. ++sections. ++All other entries are optional. + .PP + The + .B Identifier +-entry specifies the unique name for this input device. The ++entry specifies the unique name for this input device. ++The + .B Driver + entry specifies the name of the driver to use for this input device. + When using the loadable server, the input driver module + .RI \*q inputdriver \*q + will be loaded for each active + .B InputDevice +-section. An ++section. ++An + .B InputDevice + section is considered active if it is referenced by an active + .B ServerLayout +@@ -730,7 +817,10 @@ or + .B \-pointer + command line options, or if it is selected implicitly as the core pointer + or keyboard device in the absence of such explicit references. +-The most commonly used input drivers are "keyboard" and "mouse". ++The most commonly used input drivers are ++.BR keyboard (__drivermansuffix__) ++and ++.BR mouse (__drivermansuffix__). + .PP + In the absence of an explicitly specified core input device, the first + .B InputDevice +@@ -738,21 +828,24 @@ marked as + .B CorePointer + (or + .BR CoreKeyboard ) +-is used. If there is no match there, the first ++is used. ++If there is no match there, the first + .B InputDevice +-that uses the "mouse" (or "keyboard" or "kbd") driver is used. The final +-fallback is to use built-in default configurations. ++that uses the \(lqmouse\(rq (or \(lqkeyboard\(rq or \(lqkbd\(rq) driver is used. ++The final fallback is to use built\-in default configurations. + .PP + .B InputDevice +-sections recognise some driver-independent ++sections recognise some driver\-independent + .BR Options , +-which are described here. See the individual input driver manual pages +-for a description of the device-specific options. ++which are described here. ++See the individual input driver manual pages for a description of the ++device\-specific options. + .TP 7 + .BI "Option \*qCorePointer\*q" + When this is set, the input device is installed as the core (primary) +-pointer device. There must be exactly one core pointer. If this option +-is not set here, or in the ++pointer device. ++There must be exactly one core pointer. ++If this option is not set here, or in the + .B ServerLayout + section, or from the + .B \-pointer +@@ -764,8 +857,9 @@ section is used. + .TP 7 + .BI "Option \*qCoreKeyboard\*q" + When this is set, the input device is to be installed as the core +-(primary) keyboard device. There must be exactly one core keyboard. If +-this option is not set here, in the ++(primary) keyboard device. ++There must be exactly one core keyboard. ++If this option is not set here, in the + .B ServerLayout + section, or from the + .B \-keyboard +@@ -779,19 +873,21 @@ section is used. + .TP 7 + .BI "Option \*qSendCoreEvents\*q \*q" boolean \*q + Both of these options are equivalent, and when enabled cause the +-input device to always report core events. This can be used, for +-example, to allow an additional pointer device to generate core +-pointer events (like moving the cursor, etc). ++input device to always report core events. ++This can be used, for example, to allow an additional pointer device to ++generate core pointer events (like moving the cursor, etc). + .TP 4 + .BI "Option \*qHistorySize\*q \*q" number \*q +-Sets the motion history size. Default: 0. ++Sets the motion history size. ++Default: 0. + .TP 7 + .BI "Option \*qSendDragEvents\*q \*q" boolean \*q + ??? +-.SH DEVICE SECTION ++.SH "DEVICE SECTION" + The config file may have multiple + .B Device +-sections. There must be at least one, for the video card being used. ++sections. ++There must be at least one, for the video card being used. + .PP + .B Device + sections have the following format: +@@ -817,27 +913,30 @@ sections. All other entries are optional. + .PP + The + .B Identifier +-entry specifies the unique name for this graphics device. The ++entry specifies the unique name for this graphics device. ++The + .B Driver + entry specifies the name of the driver to use for this graphics device. + When using the loadable server, the driver module + .RI \*q driver \*q + will be loaded for each active + .B Device +-section. A ++section. ++A + .B Device + section is considered active if it is referenced by an active + .B Screen + section. + .PP + .B Device +-sections recognise some driver-independent entries and ++sections recognise some driver\-independent entries and + .BR Options , +-which are described here. Not all drivers make use of these +-driver-independent entries, and many of those that do don't require them +-to be specified because the information is auto-detected. See the +-individual graphics driver manual pages for further information about +-this, and for a description of the device-specific options. ++which are described here. ++Not all drivers make use of these ++driver\-independent entries, and many of those that do don't require them ++to be specified because the information is auto\-detected. ++See the individual graphics driver manual pages for further information ++about this, and for a description of the device\-specific options. + Note that most of the + .B Options + listed here (but not the other entries) may be specified in the +@@ -846,118 +945,137 @@ section instead of here in the + .B Device + section. + .TP 7 +-.BI "BusID \*q" bus-id \*q +-This specifies the bus location of the graphics card. For PCI/AGP cards, ++.BI "BusID \*q" bus\-id \*q ++This specifies the bus location of the graphics card. ++For PCI/AGP cards, + the +-.I bus-id ++.I bus\-id + string has the form + .BI PCI: bus : device : function +-(e.g., "PCI:1:0:0" might be appropriate for an AGP card). ++(e.g., \(lqPCI:1:0:0\(rq might be appropriate for an AGP card). + This field is usually optional in single-head configurations when using +-the primary graphics card. In multi-head configurations, or when using +-a secondary graphics card in a single-head configuration, this entry is +-mandatory. Its main purpose is to make an unambiguous connection between +-the device section and the hardware it is representing. This information +-can usually be found by running the __xservername__ server with the ++the primary graphics card. ++In multi-head configurations, or when using a secondary graphics card in a ++single-head configuration, this entry is mandatory. ++Its main purpose is to make an unambiguous connection between the device ++section and the hardware it is representing. ++This information can usually be found by running the __xservername__ server ++with the + .B \-scanpci + command line option. + .TP 7 + .BI "Screen " number + This option is mandatory for cards where a single PCI entity can drive more + than one display (i.e., multiple CRTCs sharing a single graphics accelerator +-and video memory). One ++and video memory). ++One + .B Device + section is required for each head, and this + parameter determines which head each of the + .B Device +-sections applies to. The legal values of ++sections applies to. ++The legal values of + .I number + range from 0 to one less than the total number of heads per entity. + Most drivers require that the primary screen (0) be present. + .TP 7 + .BI "Chipset \*q" chipset \*q + This usually optional entry specifies the chipset used on the graphics +-board. In most cases this entry is not required because the drivers +-will probe the hardware to determine the chipset type. Don't +-specify it unless the driver-specific documentation recommends that you ++board. ++In most cases this entry is not required because the drivers will probe the ++hardware to determine the chipset type. ++Don't specify it unless the driver-specific documentation recommends that you + do. + .TP 7 +-.BI "Ramdac \*q" ramdac-type \*q ++.BI "Ramdac \*q" ramdac\-type \*q + This optional entry specifies the type of RAMDAC used on the graphics +-board. This is only used by a few of the drivers, and in most cases it +-is not required because the drivers will probe the hardware to determine +-the RAMDAC type where possible. Don't specify it unless the +-driver-specific documentation recommends that you do. ++board. ++This is only used by a few of the drivers, and in most cases it is not ++required because the drivers will probe the hardware to determine the ++RAMDAC type where possible. ++Don't specify it unless the driver-specific documentation recommends that you ++do. + .TP 7 + .BI "DacSpeed " speed + .TP 7 +-.BI "DacSpeed " "speed-8 speed-16 speed-24 speed-32" ++.BI "DacSpeed " "speed\-8 speed\-16 speed\-24 speed\-32" + This optional entry specifies the RAMDAC speed rating (which is usually +-printed on the RAMDAC chip). The speed is in MHz. When one value is +-given, it applies to all framebuffer pixel sizes. When multiple values +-are give, they apply to the framebuffer pixel sizes 8, 16, 24 and 32 +-respectively. This is not used by many drivers, and only needs to be +-specified when the speed rating of the RAMDAC is different from the +-defaults built in to driver, or when the driver can't auto-detect the +-correct defaults. Don't specify it unless the driver-specific +-documentation recommends that you do. ++printed on the RAMDAC chip). ++The speed is in MHz. ++When one value is given, it applies to all framebuffer pixel sizes. ++When multiple values are given, they apply to the framebuffer pixel sizes ++8, 16, 24 and 32 respectively. ++This is not used by many drivers, and only needs to be specified when the ++speed rating of the RAMDAC is different from the defaults built in to ++driver, or when the driver can't auto-detect the correct defaults. ++Don't specify it unless the driver-specific documentation recommends that you ++do. + .TP 7 + .BI "Clocks " "clock ..." +-specifies the pixel that are on your graphics board. The clocks are in +-MHz, and may be specified as a floating point number. The value is +-stored internally to the nearest kHz. The ordering of the clocks is +-important. It must match the order in which they are selected on the +-graphics board. Multiple ++specifies the pixel that are on your graphics board. ++The clocks are in MHz, and may be specified as a floating point number. ++The value is stored internally to the nearest kHz. ++The ordering of the clocks is important. ++It must match the order in which they are selected on the graphics board. ++Multiple + .B Clocks +-lines may be specified, and each is concatenated to form the list. Most +-drivers do not use this entry, and it is only required for some older +-boards with non-programmable clocks. Don't specify this entry unless +-the driver-specific documentation explicitly recommends that you do. ++lines may be specified, and each is concatenated to form the list. ++Most drivers do not use this entry, and it is only required for some older ++boards with non-programmable clocks. ++Don't specify this entry unless the driver-specific documentation explicitly ++recommends that you do. + .TP +-.BI "ClockChip \*q" clockchip-type \*q ++.BI "ClockChip \*q" clockchip\-type \*q + This optional entry is used to specify the clock chip type on graphics +-boards which have a programmable clock generator. Only a few __xservername__ +-drivers support programmable clock chips. For details, see the appropriate +-driver manual page. ++boards which have a programmable clock generator. ++Only a few __xservername__ drivers support programmable clock chips. ++For details, see the appropriate driver manual page. + .TP 7 + .BI "VideoRam " "mem" + This optional entry specifies the amount of video ram that is installed +-on the graphics board. This is measured in kBytes. In most cases this +-is not required because the __xservername__ server probes the graphics board to +-determine this quantity. The driver-specific documentation should +-indicate when it might be needed. ++on the graphics board. ++This is measured in kBytes. ++In most cases this is not required because the __xservername__ server probes ++the graphics board to determine this quantity. ++The driver-specific documentation should indicate when it might be needed. + .TP 7 + .BI "BiosBase " "baseaddress" + This optional entry specifies the base address of the video BIOS for +-the VGA board. This address is normally auto-detected, and should only +-be specified if the driver-specific documentation recommends it. ++the VGA board. ++This address is normally auto-detected, and should only be specified if the ++driver-specific documentation recommends it. + .TP 7 + .BI "MemBase " "baseaddress" + This optional entry specifies the memory base address of a graphics +-board's linear frame buffer. This entry is not used by many drivers, +-and it should only be specified if the driver-specific documentation +-recommends it. ++board's linear frame buffer. ++This entry is not used by many drivers, and it should only be specified if ++the driver-specific documentation recommends it. + .TP 7 + .BI "IOBase " "baseaddress" +-This optional entry specifies the IO base address. This entry is not +-used by many drivers, and it should only be specified if the +-driver-specific documentation recommends it. ++This optional entry specifies the IO base address. ++This entry is not used by many drivers, and it should only be specified if ++the driver-specific documentation recommends it. + .TP 7 + .BI "ChipID " "id" + This optional entry specifies a numerical ID representing the chip type. +-For PCI cards, it is usually the device ID. This can be used to override +-the auto-detection, but that should only be done when the driver-specific +-documentation recommends it. ++For PCI cards, it is usually the device ID. ++This can be used to override the auto-detection, but that should only be done ++when the driver-specific documentation recommends it. + .TP 7 + .BI "ChipRev " "rev" +-This optional entry specifies the chip revision number. This can be +-used to override the auto-detection, but that should only be done when +-the driver-specific documentation recommends it. ++This optional entry specifies the chip revision number. ++This can be used to override the auto-detection, but that should only be done ++when the driver-specific documentation recommends it. + .TP 7 + .BI "TextClockFreq " "freq" + This optional entry specifies the pixel clock frequency that is used +-for the regular text mode. The frequency is specified in MHz. This is +-rarely used. ++for the regular text mode. ++The frequency is specified in MHz. ++This is rarely used. ++.TP 7 ++.BI "Option \*qModeDebug\*q \*q" boolean \*q ++Enable printing of additional debugging information about modesetting to ++the server log. + .ig + .TP 7 + This optional entry allows an IRQ number to be specified. +@@ -966,19 +1084,22 @@ This optional entry allows an IRQ number to be specified. + .B Options + Option flags may be specified in the + .B Device +-sections. These include driver-specific options and driver-independent +-options. The former are described in the driver-specific documentation. ++sections. ++These include driver\-specific options and driver\-independent options. ++The former are described in the driver\-specific documentation. + Some of the latter are described below in the section about the + .B Screen + section, and they may also be included here. + +-.SH VIDEOADAPTOR SECTION +-Nobody wants to say how this works. Maybe nobody knows ... ++.SH "VIDEOADAPTOR SECTION" ++Nobody wants to say how this works. ++Maybe nobody knows ... + +-.SH MONITOR SECTION ++.SH "MONITOR SECTION" + The config file may have multiple + .B Monitor +-sections. There should normally be at least one, for the monitor being used, ++sections. ++There should normally be at least one, for the monitor being used, + but a default configuration will be created when one isn't specified. + .PP + .B Monitor +@@ -1002,22 +1123,43 @@ entry. + .PP + The + .B Identifier +-entry specifies the unique name for this monitor. The ++entry specifies the unique name for this monitor. ++The + .B Monitor +-section provides information about the specifications of the monitor, +-monitor-specific ++section may be used to provide information about the specifications of the ++monitor, monitor-specific + .BR Options , +-and information about the video modes to use with the monitor. Specifying +-video modes is optional because the server now has a built-in list of +-VESA standard modes. When modes are specified explicitly in the ++and information about the video modes to use with the monitor. ++.PP ++With RandR 1.2-enabled drivers, monitor sections may be tied to specific ++outputs of the video card. Using the name of the output defined by the video ++driver plus the identifier of a monitor section, one associates a monitor ++section with an output by adding an option to the Device section in the ++following format: ++ ++.B Option \*qMonitor-outputname\*q \*qmonitorsection\*q ++ ++(for example, ++.B Option \*qMonitor-VGA\*q \*qVGA monitor\*q ++for a VGA output) ++.PP ++In the absence of specific association of monitor sections to outputs, if a ++monitor section is present the server will associate it with an output to ++preserve compatibility for previous single-head configurations. ++.PP ++Specifying video modes is optional because the server will use the DDC or other ++information provided by the monitor to automatically configure the list of ++modes available. ++When modes are specified explicitly in the + .B Monitor + section (with the + .BR Modes , + .BR ModeLine , + or + .B UseModes +-keywords), built-in modes with the same names are not included. Built-in +-modes with different names are, however, still implicitly included. ++keywords), built-in modes with the same names are not included. ++Built-in modes with different names are, however, still implicitly included, ++when they meet the requirements of the monitor. + .PP + The entries that may be used in + .B Monitor +@@ -1029,69 +1171,79 @@ This optional entry specifies the monitor's manufacturer. + .BI "ModelName \*q" model \*q + This optional entry specifies the monitor's model. + .TP 7 +-.BI "HorizSync " "horizsync-range" ++.BI "HorizSync " "horizsync\-range" + gives the range(s) of horizontal sync frequencies supported by the + monitor. +-.I horizsync-range ++.I horizsync\-range + may be a comma separated list of either discrete values or ranges of +-values. A range of values is two values separated by a dash. By default +-the values are in units of kHz. They may be specified in MHz or Hz if ++values. ++A range of values is two values separated by a dash. ++By default the values are in units of kHz. ++They may be specified in MHz or Hz ++if + .B MHz + or + .B Hz +-is added to the end of the line. The data given here is used by the +-__xservername__ server to determine if video modes are within the specifications +-of the monitor. This information should be available in the monitor's +-handbook. If this entry is omitted, a default range of 28\-33kHz is +-used. ++is added to the end of the line. ++The data given here is used by the __xservername__ server to determine if video ++modes are within the specifications of the monitor. ++This information should be available in the monitor's handbook. ++If this entry is omitted, a default range of 28\-33kHz is used. + .TP 7 +-.BI "VertRefresh " "vertrefresh-range" ++.BI "VertRefresh " "vertrefresh\-range" + gives the range(s) of vertical refresh frequencies supported by the + monitor. +-.I vertrefresh-range ++.I vertrefresh\-range + may be a comma separated list of either discrete values or ranges of +-values. A range of values is two values separated by a dash. By default +-the values are in units of Hz. They may be specified in MHz or kHz if ++values. ++A range of values is two values separated by a dash. ++By default the values are in units of Hz. ++They may be specified in MHz or kHz ++if + .B MHz + or + .B kHz +-is added to the end of the line. The data given here is used by the +-__xservername__ server to determine if video modes are within the specifications +-of the monitor. This information should be available in the monitor's +-handbook. If this entry is omitted, a default range of 43-72Hz is used. ++is added to the end of the line. ++The data given here is used by the __xservername__ server to determine if video ++modes are within the specifications of the monitor. ++This information should be available in the monitor's handbook. ++If this entry is omitted, a default range of 43\-72Hz is used. + .TP 7 + .BI "DisplaySize " "width height" + This optional entry gives the width and height, in millimetres, of the +-picture area of the monitor. If given this is used to calculate the +-horizontal and vertical pitch (DPI) of the screen. ++picture area of the monitor. ++If given this is used to calculate the horizontal and vertical pitch (DPI) of ++the screen. + .TP 7 +-.BI "Gamma " "gamma-value" ++.BI "Gamma " "gamma\-value" + .TP 7 +-.BI "Gamma " "red-gamma green-gamma blue-gamma" ++.BI "Gamma " "red\-gamma green\-gamma blue\-gamma" + This is an optional entry that can be used to specify the gamma correction +-for the monitor. It may be specified as either a single value or as +-three separate RGB values. The values should be in the range 0.1 to +-10.0, and the default is 1.0. Not all drivers are capable of using this +-information. ++for the monitor. ++It may be specified as either a single value or as three separate RGB values. ++The values should be in the range 0.1 to 10.0, and the default is 1.0. ++Not all drivers are capable of using this information. + .TP 7 +-.BI "UseModes \*q" modesection-id \*q ++.BI "UseModes \*q" modesection\-id \*q + Include the set of modes listed in the + .B Modes + section called +-.IR modesection-id. +-This make all of the modes defined in that section available for use by ++.IR modesection\-id. ++This makes all of the modes defined in that section available for use by + this monitor. + .TP 7 + .BI "Mode \*q" name \*q + This is an optional multi-line entry that can be used to provide +-definitions for video modes for the monitor. In most cases this isn't +-necessary because the built-in set of VESA standard modes will be +-sufficient. The ++definitions for video modes for the monitor. ++In most cases this isn't necessary because the built-in set of VESA standard ++modes will be sufficient. ++The + .B Mode + keyword indicates the start of a multi-line video mode description. + The mode description is terminated with the + .B EndMode +-keyword. The mode description consists of the following entries: ++keyword. ++The mode description consists of the following entries: + .RS 7 + .TP 4 + .BI "DotClock " clock +@@ -1127,52 +1279,60 @@ and + may be used to select the composite sync polarity. + .TP 4 + .BI "HSkew " hskew +-specifies the number of pixels (towards the right edge of the screen) +-by which the display enable signal is to be skewed. Not all drivers +-use this information. This option might become necessary to override +-the default value supplied by the server (if any). "Roving" horizontal +-lines indicate this value needs to be increased. If the last few pixels +-on a scan line appear on the left of the screen, this value should be +-decreased. ++specifies the number of pixels (towards the right edge of the screen) by ++which the display enable signal is to be skewed. ++Not all drivers use this information. ++This option might become necessary to override the default value supplied ++by the server (if any). ++\(lqRoving\(rq horizontal lines indicate this value needs to be increased. ++If the last few pixels on a scan line appear on the left of the screen, ++this value should be decreased. + .TP 4 + .BI "VScan " vscan + specifies the number of times each scanline is painted on the screen. +-Not all drivers use this information. Values less than 1 are treated +-as 1, which is the default. Generally, the ++Not all drivers use this information. ++Values less than 1 are treated as 1, which is the default. ++Generally, the + .B \*qDoubleScan\*q + .B Flag + mentioned above doubles this value. + .RE + .TP 7 +-.BI "ModeLine \*q" name \*q " mode-description" ++.BI "ModeLine \*q" name \*q " mode\-description" + This entry is a more compact version of the + .B Mode + entry, and it also can be used to specify video modes for the monitor. +-is a single line format for specifying video modes. In most cases this +-isn't necessary because the built-in set of VESA standard modes will be +-sufficient. ++is a single line format for specifying video modes. ++In most cases this isn't necessary because the built\-in set of VESA ++standard modes will be sufficient. + .PP + .RS 7 + The +-.I mode-description +-is in four sections, the first three of which are mandatory. The first +-is the dot (pixel) clock. This is a single number specifying the pixel +-clock rate for the mode in MHz. The second section is a list of four +-numbers specifying the horizontal timings. These numbers are the ++.I mode\-description ++is in four sections, the first three of which are mandatory. ++The first is the dot (pixel) clock. ++This is a single number specifying the pixel clock rate for the mode in ++MHz. ++The second section is a list of four numbers specifying the horizontal ++timings. ++These numbers are the + .IR hdisp , + .IR hsyncstart , + .IR hsyncend , + and + .I htotal +-values. The third section is a list of four numbers specifying the +-vertical timings. These numbers are the ++values. ++The third section is a list of four numbers specifying the vertical ++timings. ++These numbers are the + .IR vdisp , + .IR vsyncstart , + .IR vsyncend , + and + .I vtotal +-values. The final section is a list of flags specifying other +-characteristics of the mode. ++values. ++The final section is a list of flags specifying other characteristics of ++the mode. + .B Interlace + indicates that the mode is interlaced. + .B DoubleScan +@@ -1191,7 +1351,8 @@ Additionally, on some hardware, + .B +CSync + and + .B \-CSync +-may be used to select the composite sync polarity. The ++may be used to select the composite sync polarity. ++The + .B HSkew + and + .B VScan +@@ -1214,21 +1375,79 @@ monitors do not require it. The default is off. + This optional entry specifies the vertical refresh rate that the server + should aim for when selecting video modes. Without this option, the + default is to prefer modes with higher refresh rates. ++.TP 7 ++.BI "Option " "\*qPreferredMode\*q " \*qstring\*q ++This optional entry specifies a mode to be marked as the preferred initial mode ++of the monitor. ++(RandR 1.2-supporting drivers only) ++.TP 7 ++.BI "Option " "\*qPosition\*q " "\*qx y\*q" ++This optional entry specifies the position of the monitor within the X ++screen. ++(RandR 1.2-supporting drivers only) ++.TP 7 ++.BI "Option " "\*qLeftOf\*q " \*qmonitor\*q ++This optional entry specifies that the monitor should be positioned to the ++left of the monitor of the given name. ++(RandR 1.2-supporting drivers only) ++.TP 7 ++.BI "Option " "\*qRightOf\*q " \*qmonitor\*q ++This optional entry specifies that the monitor should be positioned to the ++right of the monitor of the given name. ++(RandR 1.2-supporting drivers only) ++.TP 7 ++.BI "Option " "\*qAbove\*q " \*qmonitor\*q ++This optional entry specifies that the monitor should be positioned above the ++monitor of the given name. ++(RandR 1.2-supporting drivers only) ++.TP 7 ++.BI "Option " "\*qBelow\*q " \*qmonitor\*q ++This optional entry specifies that the monitor should be positioned below the ++monitor of the given name. ++(RandR 1.2-supporting drivers only) ++.TP 7 ++.BI "Option " "\*qEnable\*q " \*qbool\*q ++This optional entry specifies whether the monitor should be turned on ++at startup. By default, the server will attempt to enable all connected ++monitors. ++(RandR 1.2-supporting drivers only) ++.TP 7 ++.BI "Option " "\*qMinClock\*q " \*qfrequency\*q ++This optional entry specifies the minimum dot clock, in kHz, that is supported ++by the monitor. ++.TP 7 ++.BI "Option " "\*qMaxClock\*q " \*qfrequency\*q ++This optional entry specifies the maximum dot clock, in kHz, that is supported ++by the monitor. ++.TP 7 ++.BI "Option " "\*qIgnore\*q " \*qbool\*q ++This optional entry specifies that the monitor should be ignored entirely, ++and not reported through RandR. This is useful if the hardware reports the ++presence of outputs that don't exist. ++(RandR 1.2-supporting drivers only) ++.TP 7 ++.BI "Option " "\*qRotate\*q " \*qrotation\*q ++This optional entry specifies the initial rotation of the given monitor. ++Valid values for rotation are \*qnormal\*q, \*qleft\*q, \*qright\*q, and ++\*qinverted\*q. ++(RandR 1.2-supporting drivers only) + +-.SH MODES SECTION ++.SH "MODES SECTION" + The config file may have multiple + .B Modes +-sections, or none. These sections provide a way of defining sets of +-video modes independently of the ++sections, or none. ++These sections provide a way of defining sets of video modes independently ++of the + .B Monitor + sections. + .B Monitor + sections may include the definitions provided in these sections by + using the + .B UseModes +-keyword. In most cases the ++keyword. ++In most cases the + .B Modes +-sections are not necessary because the built-in set of VESA standard modes ++sections are not necessary because the built\-in set of VESA standard modes + will be sufficient. + .PP + .B Modes +@@ -1256,21 +1475,24 @@ and + entries that are described above in the + .B Monitor + section. +-.SH SCREEN SECTION ++.SH "SCREEN SECTION" + The config file may have multiple + .B Screen +-sections. There must be at least one, for the "screen" being used. +-A "screen" represents the binding of a graphics device ++sections. ++There must be at least one, for the \(lqscreen\(rq being used. ++A \(lqscreen\(rq represents the binding of a graphics device + .RB ( Device + section) and a monitor + .RB ( Monitor +-section). A ++section). ++A + .B Screen +-section is considered "active" if it is referenced by an active ++section is considered \(lqactive\(rq if it is referenced by an active + .B ServerLayout + section or by the + .B \-screen +-command line option. If neither of those is present, the first ++command line option. ++If neither of those is present, the first + .B Screen + section found in the config file is considered the active one. + .PP +@@ -1298,94 +1520,104 @@ The + .B Identifier + and + .B Device +-entries are mandatory. All others are optional. ++entries are mandatory. ++All others are optional. + .PP + The + .B Identifier +-entry specifies the unique name for this screen. The ++entry specifies the unique name for this screen. ++The + .B Screen + section provides information specific to the whole screen, including +-screen-specific ++screen\-specific + .BR Options . +-In multi-head configurations, there will be multiple active ++In multi\-head configurations, there will be multiple active + .B Screen + sections, one for each head. + The entries available + for this section are: + .TP 7 +-.BI "Device \*q" device-id \*q ++.BI "Device \*q" device\-id \*q + This mandatory entry specifies the + .B Device +-section to be used for this screen. This is what ties a specific +-graphics card to a screen. The +-.I device-id ++section to be used for this screen. ++This is what ties a specific graphics card to a screen. ++The ++.I device\-id + must match the + .B Identifier + of a + .B Device + section in the config file. + .TP 7 +-.BI "Monitor \*q" monitor-id \*q ++.BI "Monitor \*q" monitor\-id \*q + specifies which monitor description is to be used for this screen. + If a + .B Monitor +-name is not specified, a default configuration is used. Currently the default +-configuration may not function as expected on all platforms. ++name is not specified, a default configuration is used. ++Currently the default configuration may not function as expected on all ++platforms. + .TP 7 +-.BI "VideoAdaptor \*q" xv-id \*q ++.BI "VideoAdaptor \*q" xv\-id \*q + specifies an optional Xv video adaptor description to be used with this + screen. + .TP 7 + .BI "DefaultDepth " depth +-specifies which color depth the server should use by default. The ++specifies which color depth the server should use by default. ++The + .B \-depth +-command line option can be used to override this. If neither is specified, +-the default depth is driver-specific, but in most cases is 8. ++command line option can be used to override this. ++If neither is specified, the default depth is driver\-specific, but in most ++cases is 8. + .TP 7 + .BI "DefaultFbBpp " bpp +-specifies which framebuffer layout to use by default. The ++specifies which framebuffer layout to use by default. ++The + .B \-fbbpp +-command line option can be used to override this. In most cases the +-driver will chose the best default value for this. The only case where +-there is even a choice in this value is for depth 24, where some hardware +-supports both a packed 24 bit framebuffer layout and a sparse 32 bit +-framebuffer layout. ++command line option can be used to override this. ++In most cases the driver will chose the best default value for this. ++The only case where there is even a choice in this value is for depth 24, ++where some hardware supports both a packed 24 bit framebuffer layout and a ++sparse 32 bit framebuffer layout. + .TP 7 + .B Options + Various + .B Option + flags may be specified in the + .B Screen +-section. Some are driver-specific and are described in the driver +-documentation. Others are driver-independent, and will eventually be +-described here. ++section. ++Some are driver\-specific and are described in the driver documentation. ++Others are driver\-independent, and will eventually be described here. + .\" XXX These should really be in an xaa man page. + .TP 7 + .BI "Option \*qAccel\*q" + Enables XAA (X Acceleration Architecture), a mechanism that makes video +-cards' 2D hardware acceleration available to the +-__xservername__ server. This +-option is on by default, but it may be necessary to turn it off if there +-are bugs in the driver. There are many options to disable specific +-accelerated operations, listed below. Note that disabling an operation +-will have no effect if the operation is not accelerated (whether due to +-lack of support in the hardware or in the driver). ++cards' 2D hardware acceleration available to the __xservername__ server. ++This option is on by default, but it may be necessary to turn it off if ++there are bugs in the driver. ++There are many options to disable specific accelerated operations, listed ++below. ++Note that disabling an operation will have no effect if the operation is ++not accelerated (whether due to lack of support in the hardware or in the ++driver). + .TP 7 + .BI "Option \*qBiosLocation\*q \*q" address \*q + Set the location of the BIOS for the Int10 module. One may select a BIOS + of another card for posting or the legacy V_BIOS range located at 0xc0000 +-or an alternative address (BUS_ISA). This is only useful under very +-special circumstances and should be used with extreme care. ++or an alternative address (BUS_ISA). ++This is only useful under very special circumstances and should be used with ++extreme care. + .TP 7 + .BI "Option \*qInitPrimary\*q \*q" boolean \*q +-Use the Int10 module to initialize the primary graphics card. Normally, +-only secondary cards are soft-booted using the Int10 module, as the ++Use the Int10 module to initialize the primary graphics card. ++Normally, only secondary cards are soft-booted using the Int10 module, as the + primary card has already been initialized by the BIOS at boot time. + Default: false. + .TP 7 + .BI "Option \*qNoInt10\*q \*q" boolean \*q + Disables the Int10 module, a module that uses the int10 call to the BIOS +-of the graphics card to initialize it. Default: false. ++of the graphics card to initialize it. ++Default: false. + .TP 7 + .BI "Option \*qNoMTRR\*q" + Disables MTRR (Memory Type Range Register) support, a feature of modern +@@ -1395,14 +1627,14 @@ known to exhibit problems when MTRR's are used. + .TP 7 + .BI "Option \*qXaaNoCPUToScreenColorExpandFill\*q" + Disables accelerated rectangular expansion blits from source patterns +-stored in system memory (using a memory-mapped aperture). ++stored in system memory (using a memory\-mapped aperture). + .TP 7 + .BI "Option \*qXaaNoColor8x8PatternFillRect\*q" +-Disables accelerated fills of a rectangular region with a full-color ++Disables accelerated fills of a rectangular region with a full\-color + pattern. + .TP 7 + .BI "Option \*qXaaNoColor8x8PatternFillTrap\*q" +-Disables accelerated fills of a trapezoidal region with a full-color ++Disables accelerated fills of a trapezoidal region with a full\-color + pattern. + .TP 7 + .BI "Option \*qXaaNoDashedBresenhamLine\*q" +@@ -1412,8 +1644,8 @@ Disables accelerated dashed Bresenham line draws. + Disables accelerated dashed line draws between two arbitrary points. + .TP 7 + .BI "Option \*qXaaNoImageWriteRect\*q" +-Disables accelerated transfers of full-color rectangular patterns from +-system memory to video memory (using a memory-mapped aperture). ++Disables accelerated transfers of full\-color rectangular patterns from ++system memory to video memory (using a memory\-mapped aperture). + .TP 7 + .BI "Option \*qXaaNoMono8x8PatternFillRect\*q" + Disables accelerated fills of a rectangular region with a monochrome +@@ -1434,7 +1666,7 @@ Disables accelerated rectangular expansion blits from source patterns + stored in system memory (one scan line at a time). + .TP 7 + .BI "Option \*qXaaNoScanlineImageWriteRect\*q" +-Disables accelerated transfers of full-color rectangular patterns from ++Disables accelerated transfers of full\-color rectangular patterns from + system memory to video memory (one scan line at a time). + .TP 7 + .BI "Option \*qXaaNoScreenToScreenColorExpandFill\*q" +@@ -1449,10 +1681,10 @@ video memory to another part of video memory. + Disables accelerated solid Bresenham line draws. + .TP 7 + .BI "Option \*qXaaNoSolidFillRect\*q" +-Disables accelerated solid-color fills of rectangles. ++Disables accelerated solid\-color fills of rectangles. + .TP 7 + .BI "Option \*qXaaNoSolidFillTrap\*q" +-Disables accelerated solid-color fills of Bresenham trapezoids. ++Disables accelerated solid\-color fills of Bresenham trapezoids. + .TP 7 + .BI "Option \*qXaaNoSolidHorVertLine\*q" + Disables accelerated solid horizontal and vertical line draws. +@@ -1464,27 +1696,30 @@ Each + .B Screen + section may optionally contain one or more + .B Display +-subsections. Those subsections provide depth/fbbpp specific configuration +-information, and the one chosen depends on the depth and/or fbbpp that +-is being used for the screen. The ++subsections. ++Those subsections provide depth/fbbpp specific configuration information, ++and the one chosen depends on the depth and/or fbbpp that is being used for ++the screen. ++The + .B Display + subsection format is described in the section below. + +-.SH DISPLAY SUBSECTION ++.SH "DISPLAY SUBSECTION" + Each + .B Screen + section may have multiple + .B Display +-subsections. +-The "active" ++subsections. ++The \(lqactive\(rq + .B Display + subsection is the first that matches the depth and/or fbbpp values being + used, or failing that, the first that has neither a depth or fbbpp value +-specified. The ++specified. ++The + .B Display +-subsections are optional. When there isn't one that matches the depth +-and/or fbbpp values being used, all the parameters that can be specified +-here fall back to their defaults. ++subsections are optional. ++When there isn't one that matches the depth and/or fbbpp values being used, ++all the parameters that can be specified here fall back to their defaults. + .PP + .B Display + subsections have the following format: +@@ -1498,78 +1733,88 @@ subsections have the following format: + .B " EndSubSection" + .fi + .RE +-.PP + .TP 7 + .BI "Depth " depth + This entry specifies what colour depth the + .B Display +-subsection is to be used for. This entry is usually specified, +-but it may be omitted to create a match-all ++subsection is to be used for. ++This entry is usually specified, but it may be omitted to create a match\-all + .B Display + subsection or when wishing to match only against the + .B FbBpp +-parameter. The range of ++parameter. ++The range of + .I depth +-values that are allowed depends on the driver. Most driver support +-8, 15, 16 and 24. Some also support 1 and/or 4, and some may support +-other values (like 30). Note: ++values that are allowed depends on the driver. ++Most drivers support 8, 15, 16 and 24. ++Some also support 1 and/or 4, and some may support other values (like 30). ++Note: + .I depth + means the number of bits in a pixel that are actually used to determine +-the pixel colour. 32 is not a valid ++the pixel colour. ++32 is not a valid + .I depth +-value. Most hardware that uses 32 bits per pixel only uses 24 of them +-to hold the colour information, which means that the colour depth is +-24, not 32. ++value. ++Most hardware that uses 32 bits per pixel only uses 24 of them to hold the ++colour information, which means that the colour depth is 24, not 32. + .TP 7 + .BI "FbBpp " bpp + This entry specifies the framebuffer format this + .B Display +-subsection is to be used for. This entry is only needed when providing +-depth 24 configurations that allow a choice between a 24 bpp packed +-framebuffer format and a 32bpp sparse framebuffer format. In most cases +-this entry should not be used. ++subsection is to be used for. ++This entry is only needed when providing depth 24 configurations that allow ++a choice between a 24 bpp packed framebuffer format and a 32bpp sparse ++framebuffer format. ++In most cases this entry should not be used. + .TP 7 +-.BI "Weight " "red-weight green-weight blue-weight" ++.BI "Weight " "red\-weight green\-weight blue\-weight" + This optional entry specifies the relative RGB weighting to be used + for a screen is being used at depth 16 for drivers that allow multiple +-formats. This may also be specified from the command line with the ++formats. ++This may also be specified from the command line with the + .B \-weight +-option (see __xservername__(__appmansuffix__)). ++option (see ++.BR __xservername__(__appmansuffix__)). + .TP 7 + .BI "Virtual " "xdim ydim" + This optional entry specifies the virtual screen resolution to be used. + .I xdim + must be a multiple of either 8 or 16 for most drivers, and a multiple +-of 32 when running in monochrome mode. The given value will be rounded +-down if this is not the case. Video modes which are too large for the +-specified virtual size will be rejected. If this entry is not present, +-the virtual screen resolution will be set to accommodate all the valid +-video modes given in the ++of 32 when running in monochrome mode. ++The given value will be rounded down if this is not the case. ++Video modes which are too large for the specified virtual size will be ++rejected. ++If this entry is not present, the virtual screen resolution will be set to ++accommodate all the valid video modes given in the + .B Modes +-entry. Some drivers/hardware combinations do not support virtual screens. +-Refer to the appropriate driver-specific documentation for details. ++entry. ++Some drivers/hardware combinations do not support virtual screens. ++Refer to the appropriate driver\-specific documentation for details. + .TP 7 + .BI "ViewPort " "x0 y0" + This optional entry sets the upper left corner of the initial display. + This is only relevant when the virtual screen resolution is different +-from the resolution of the initial video mode. If this entry is not +-given, then the initial display will be centered in the virtual display +-area. +-.TP 7 +-.BI "Modes \*q" mode-name \*q " ..." +-This optional entry specifies the list of video modes to use. Each +-.I mode-name +-specified must be in double quotes. They must correspond to those +-specified or referenced in the appropriate ++from the resolution of the initial video mode. ++If this entry is not given, then the initial display will be centered in ++the virtual display area. ++.TP 7 ++.BI "Modes \*q" mode\-name \*q " ..." ++This optional entry specifies the list of video modes to use. ++Each ++.I mode\-name ++specified must be in double quotes. ++They must correspond to those specified or referenced in the appropriate + .B Monitor +-section (including implicitly referenced built-in VESA standard modes). ++section (including implicitly referenced built\-in VESA standard modes). + The server will delete modes from this list which don't satisfy various +-requirements. The first valid mode in this list will be the default +-display mode for startup. The list of valid modes is converted internally +-into a circular list. It is possible to switch to the next mode with +-.B Ctrl+Alt+Keypad-Plus ++requirements. ++The first valid mode in this list will be the default display mode for ++startup. ++The list of valid modes is converted internally into a circular list. ++It is possible to switch to the next mode with ++.B Ctrl+Alt+Keypad\-Plus + and to the previous mode with +-.BR Ctrl+Alt+Keypad-Minus . ++.BR Ctrl+Alt+Keypad\-Minus . + When this entry is omitted, the valid modes referenced by the appropriate + .B Monitor + section will be used. If the +@@ -1577,10 +1822,12 @@ section will be used. If the + section contains no modes, then the selection will be taken from the + built-in VESA standard modes. + .TP 7 +-.BI "Visual \*q" visual-name \*q +-This optional entry sets the default root visual type. This may also +-be specified from the command line (see the Xserver(__appmansuffix__) man page). The +-visual types available for depth 8 are (default is ++.BI "Visual \*q" visual\-name \*q ++This optional entry sets the default root visual type. ++This may also be specified from the command line (see the ++.BR Xserver(__appmansuffix__) ++man page). ++The visual types available for depth 8 are (default is + .BR PseudoColor ): + .PP + .RS 11 +@@ -1626,43 +1873,48 @@ The visual type available for the depth 1 (monochrome) is + .RE + .TP 7 + .BI "Black " "red green blue" +-This optional entry allows the "black" colour to be specified. This +-is only supported at depth 1. The default is black. ++This optional entry allows the \(lqblack\(rq colour to be specified. ++This is only supported at depth 1. ++The default is black. + .TP 7 + .BI "White " "red green blue" +-This optional entry allows the "white" colour to be specified. This +-is only supported at depth 1. The default is white. ++This optional entry allows the \(lqwhite\(rq colour to be specified. ++This is only supported at depth 1. ++The default is white. + .TP 7 + .B Options + Option flags may be specified in the + .B Display +-subsections. These may include driver-specific options and +-driver-independent options. The former are described in the +-driver-specific documentation. Some of the latter are described above +-in the section about the ++subsections. ++These may include driver\-specific options and driver\-independent options. ++The former are described in the driver\-specific documentation. ++Some of the latter are described above in the section about the + .B Screen + section, and they may also be included here. +-.SH SERVERLAYOUT SECTION ++.SH "SERVERLAYOUT SECTION" + The config file may have multiple + .B ServerLayout +-sections. +-A "server layout" represents the binding of one or more screens ++sections. ++A \(lqserver layout\(rq represents the binding of one or more screens + .RB ( Screen + sections) and one or more input devices + .RB ( InputDevice +-sections) to form a complete configuration. In multi-head configurations, +-it also specifies the relative layout of the heads. A ++sections) to form a complete configuration. ++In multi\-head configurations, it also specifies the relative layout of the ++heads. ++A + .B ServerLayout +-section is considered "active" if it is referenced by the ++section is considered \(lqactive\(rq if it is referenced by the + .B \-layout + command line option or by an + .B "Option \*qDefaultServerLayout\*q" + entry in the + .B ServerFlags +-section (the former takes precedence over the latter). If those options are +-not used, the first ++section (the former takes precedence over the latter). ++If those options are not used, the first + .B ServerLayout +-section found in the config file is considered the active one. If no ++section found in the config file is considered the active one. ++If no + .B ServerLayout + sections are present, the single active screen and two active (core) + input devices are selected as described in the relevant sections above. +@@ -1674,9 +1926,9 @@ sections have the following format: + .nf + .B "Section \*qServerLayout\*q" + .BI " Identifier \*q" name \*q +-.BI " Screen \*q" screen-id \*q ++.BI " Screen \*q" screen\-id \*q + .I " ..." +-.BI " InputDevice \*q" idev-id \*q ++.BI " InputDevice \*q" idev\-id \*q + .I " ..." + .I " options" + .I " ..." +@@ -1694,10 +1946,11 @@ entry. + .PP + The + .B Identifier +-entry specifies the unique name for this server layout. The ++entry specifies the unique name for this server layout. ++The + .B ServerLayout + section provides information specific to the whole session, including +-session-specific ++session\-specific + .BR Options . + The + .B ServerFlags +@@ -1708,21 +1961,25 @@ section. + .PP + The entries that may be used in this section are described here. + .TP 7 +-.BI "Screen " "screen-num" " \*qscreen-id\*q " "position-information" ++.BI "Screen " "screen\-num" " \*qscreen\-id\*q " "position\-information" + One of these entries must be given for each screen being used in +-a session. The +-.I screen-id ++a session. ++The ++.I screen\-id + field is mandatory, and specifies the + .B Screen +-section being referenced. The +-.I screen-num ++section being referenced. ++The ++.I screen\-num + field is optional, and may be used to specify the screen number +-in multi-head configurations. When this field is omitted, the +-screens will be numbered in the order that they are listed in. +-The numbering starts from 0, and must be consecutive. The +-.I position-information +-field describes the way multiple screens are positioned. There are +-a number of different ways that this information can be provided: ++in multi\-head configurations. ++When this field is omitted, the screens will be numbered in the order that ++they are listed in. ++The numbering starts from 0, and must be consecutive. ++The ++.I position\-information ++field describes the way multiple screens are positioned. ++There are a number of different ways that this information can be provided: + .RS 7 + .TP 4 + .I "x y" +@@ -1732,48 +1989,53 @@ These both specify that the upper left corner's coordinates are + .RI ( x , y ). + The + .B Absolute +-keyword is optional. Some older versions of __xservername__ (4.2 and earlier) don't +-recognise the ++keyword is optional. ++Some older versions of __xservername__ (4.2 and earlier) don't recognise the + .B Absolute + keyword, so it's safest to just specify the coordinates without it. + .TP 4 +-.BI "RightOf \*q" screen-id \*q ++.BI "RightOf \*q" screen\-id \*q + .TP 4 +-.BI "LeftOf \*q" screen-id \*q ++.BI "LeftOf \*q" screen\-id \*q + .TP 4 +-.BI "Above \*q" screen-id \*q ++.BI "Above \*q" screen\-id \*q + .TP 4 +-.BI "Below \*q" screen-id \*q ++.BI "Below \*q" screen\-id \*q + .TP 4 +-.BI "Relative \*q" screen-id \*q " x y" +-These give the screen's location relative to another screen. The first four +-position the screen immediately to the right, left, above or below the +-other screen. When positioning to the right or left, the top edges are +-aligned. When positioning above or below, the left edges are aligned. ++.BI "Relative \*q" screen\-id \*q " x y" ++These give the screen's location relative to another screen. ++The first four position the screen immediately to the right, left, above or ++below the other screen. ++When positioning to the right or left, the top edges are aligned. ++When positioning above or below, the left edges are aligned. + The + .B Relative + form specifies the offset of the screen's origin (upper left corner) + relative to the origin of another screen. + .RE + .TP 7 +-.BI "InputDevice \*q" idev-id "\*q \*q" option \*q " ..." ++.BI "InputDevice \*q" idev\-id "\*q \*q" option \*q " ..." + One of these entries should be given for each input device being used in +-a session. Normally at least two are required, one each for the core +-pointer and keyboard devices. If either of those is missing, suitable ++a session. ++Normally at least two are required, one each for the core pointer and ++keyboard devices. ++If either of those is missing, suitable + .B InputDevice + entries are searched for using the method described above in the + .B INPUTDEVICE + section. The +-.I idev-id ++.I idev\-id + field is mandatory, and specifies the name of the + .B InputDevice +-section being referenced. Multiple ++section being referenced. ++Multiple + .I option +-fields may be specified, each in double quotes. The options permitted +-here are any that may also be given in the ++fields may be specified, each in double quotes. ++The options permitted here are any that may also be given in the + .B InputDevice +-sections. Normally only session-specific input device options would be +-used here. The most commonly used options are: ++sections. ++Normally only session\-specific input device options would be used here. ++The most commonly used options are: + .PP + .RS 11 + .nf +@@ -1791,8 +2053,9 @@ and core keyboard devices respectively. + .B Options + In addition to the following, any option permitted in the + .B ServerFlags +-section may also be specified here. When the same option appears in both +-places, the value given here overrides the one given in the ++section may also be specified here. ++When the same option appears in both places, the value given here overrides ++the one given in the + .B ServerFlags + section. + .TP 7 +@@ -1805,9 +2068,11 @@ option (described in + .BR "DEVICE SECTION" , + above) for the format of the + .I bus\-id +-parameter. This option overrides ++parameter. ++This option overrides + .BR SingleCard , +-if specified. At present, only PCI devices can be isolated in this manner. ++if specified. ++At present, only PCI devices can be isolated in this manner. + .TP 7 + .BI "Option \*qSingleCard\*q \*q" boolean \*q + As +@@ -1831,68 +2096,97 @@ section for a dual headed configuration with two mice: + .B "EndSection" + .fi + .RE +-.SH DRI SECTION ++.SH "DRI SECTION" + This optional section is used to provide some information for the +-Direct Rendering Infrastructure. Details about the format of this section +-can be found on-line at ++Direct Rendering Infrastructure. ++Details about the format of this section ++can be found in the README.DRI document, which is also available on-line at + .IR . +-.SH VENDOR SECTION ++.SH "VENDOR SECTION" + The optional + .B Vendor +-section may be used to provide vendor-specific configuration information. ++section may be used to provide vendor\-specific configuration information. + Multiple + .B Vendor + sections may be present, and they may contain an + .B Identifier + entry and multiple + .B Option +-flags. The data therein is not used in this release. ++flags. ++The data therein is not used in this release. + .PP +-.SH FILES +-For an example of an __xconfigfile__ file, see the file installed as +-__projectroot__/lib/X11/__xconfigfile__.eg. +-.fi + .SH "SEE ALSO" +-X(__miscmansuffix__), +-Xserver(__appmansuffix__), +-__xservername__(__appmansuffix__), +-apm(__drivermansuffix__), +-.\" .IR ati(__drivermansuffix__), +-chips(__drivermansuffix__), +-cirrus(__drivermansuffix__), +-cyrix(__drivermansuffix__), +-fbdev(__drivermansuffix__), +-glide(__drivermansuffix__), +-glint(__drivermansuffix__), +-i128(__drivermansuffix__), +-i740(__drivermansuffix__), +-i810(__drivermansuffix__), +-imstt(__drivermansuffix__), +-mga(__drivermansuffix__), +-neomagic(__drivermansuffix__), +-nv(__drivermansuffix__), +-r128(__drivermansuffix__), +-rendition(__drivermansuffix__), +-savage(__drivermansuffix__), +-s3virge(__drivermansuffix__), +-.\" .IR shadowfb(__drivermansuffix__), +-siliconmotion(__drivermansuffix__), +-sis(__drivermansuffix__), +-sunbw2(__drivermansuffix__), +-suncg14(__drivermansuffix__), +-suncg3(__drivermansuffix__), +-suncg6(__drivermansuffix__), +-sunffb(__drivermansuffix__), +-sunleo(__drivermansuffix__), +-suntcx(__drivermansuffix__), +-tdfx(__drivermansuffix__), +-tga(__drivermansuffix__), +-trident(__drivermansuffix__), +-tseng(__drivermansuffix__), +-v4l(__drivermansuffix__), +-vesa(__drivermansuffix__), +-vga(__drivermansuffix__), +-vmware(__drivermansuffix__), ++General: ++.BR X (__miscmansuffix__), ++.BR Xserver (__appmansuffix__), ++.BR __xservername__ (__appmansuffix__). ++.PP ++.B Not all modules or interfaces are available on all platforms. ++.PP ++Display drivers: ++.BR apm (__drivermansuffix__), ++.\" .BR ati (__drivermansuffix__), ++.BR chips (__drivermansuffix__), ++.BR cirrus (__drivermansuffix__), ++.BR cyrix (__drivermansuffix__), ++.BR fbdev (__drivermansuffix__), ++.BR glide (__drivermansuffix__), ++.BR glint (__drivermansuffix__), ++.BR i128 (__drivermansuffix__), ++.BR i740 (__drivermansuffix__), ++.BR i810 (__drivermansuffix__), ++.BR imstt (__drivermansuffix__), ++.BR mga (__drivermansuffix__), ++.BR neomagic (__drivermansuffix__), ++.BR nv (__drivermansuffix__), ++.BR r128 (__drivermansuffix__), ++.BR rendition (__drivermansuffix__), ++.BR savage (__drivermansuffix__), ++.BR s3virge (__drivermansuffix__), ++.BR siliconmotion (__drivermansuffix__), ++.BR sis (__drivermansuffix__), ++.BR sunbw2 (__drivermansuffix__), ++.BR suncg14 (__drivermansuffix__), ++.BR suncg3 (__drivermansuffix__), ++.BR suncg6 (__drivermansuffix__), ++.BR sunffb (__drivermansuffix__), ++.BR sunleo (__drivermansuffix__), ++.BR suntcx (__drivermansuffix__), ++.BR tdfx (__drivermansuffix__), ++.BR tga (__drivermansuffix__), ++.BR trident (__drivermansuffix__), ++.BR tseng (__drivermansuffix__), ++.BR vesa (__drivermansuffix__), ++.BR vga (__drivermansuffix__), ++.BR via (__drivermansuffix__), ++.BR vmware (__drivermansuffix__). ++.PP ++Input drivers: ++.\" .BR acecad (__drivermansuffix__), ++.\" .BR calcomp (__drivermansuffix__), ++.BR citron (__drivermansuffix__), ++.BR dmc (__drivermansuffix__), ++.BR dynapro (__drivermansuffix__), ++.BR elographics (__drivermansuffix__), ++.BR fpit (__drivermansuffix__), ++.BR js_x (__drivermansuffix__), ++.BR kbd (__drivermansuffix__), ++.BR keyboard (__drivermansuffix__), ++.\" .BR magictouch (__drivermansuffix__), ++.BR microtouch (__drivermansuffix__), ++.BR mouse (__drivermansuffix__), ++.BR mutouch (__drivermansuffix__), ++.BR palmax (__drivermansuffix__), ++.BR penmount (__drivermansuffix__), ++.BR tek4957 (__drivermansuffix__), ++.\" .BR ur98 (__drivermansuffix__), ++.BR void (__drivermansuffix__), ++.BR wacom (__drivermansuffix__). ++.PP ++Other modules and interfaces: ++.BR fbdevhw (__drivermansuffix__), ++.\" .BR shadowfb (__drivermansuffix__), ++.BR v4l (__drivermansuffix__). + .br + .SH AUTHORS + This manual page was largely rewritten by David Dawes --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/126_glxproxy_remove-stray__GLinterface.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/126_glxproxy_remove-stray__GLinterface.diff @@ -0,0 +1,11 @@ +--- a/hw/dmx/glxProxy/glxext.h 2007-04-30 16:25:07.000000000 +0100 ++++ b/hw/dmx/glxProxy/glxext.h 2007-04-30 16:25:43.000000000 +0100 +@@ -67,7 +67,7 @@ + + extern void __glXNoSuchRenderOpcode(GLbyte*); + extern int __glXNoSuchSingleOpcode(__GLXclientState*, GLbyte*); +-extern void __glXErrorCallBack(__GLinterface *gc, GLenum code); ++extern void __glXErrorCallBack(GLenum code); + extern void __glXClearErrorOccured(void); + extern GLboolean __glXErrorOccured(void); + extern void __glXResetLargeCommandStatus(__GLXclientState*); --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/110_fedora_no_move_damage.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/110_fedora_no_move_damage.patch @@ -0,0 +1,33 @@ +Disable damage notifications on move for manually redirected windows. +The automatic compositor needs damage notification on move, but a +compositing manager doesn't. + +--- ./composite/compwindow.c.spiffiffity 2006-03-29 12:51:53.000000000 -0500 ++++ ./composite/compwindow.c 2006-04-13 23:18:42.000000000 -0400 +@@ -571,12 +571,15 @@ + } + else + { ++ CompWindowPtr cw = GetCompWindow (pWin); ++ + ptOldOrg.x -= dx; + ptOldOrg.y -= dy; + REGION_TRANSLATE (prgnSrc, prgnSrc, + pWin->drawable.x - ptOldOrg.x, + pWin->drawable.y - ptOldOrg.y); +- DamageDamageRegion (&pWin->drawable, prgnSrc); ++ if (pWin->redirectDraw && cw->update == CompositeRedirectAutomatic) ++ DamageDamageRegion (&pWin->drawable, prgnSrc); + } + cs->CopyWindow = pScreen->CopyWindow; + pScreen->CopyWindow = compCopyWindow; +@@ -655,7 +658,8 @@ + /* + * Report that as damaged so it will be redrawn + */ +- DamageDamageRegion (&pWin->drawable, &damage); ++ if (cw->update == CompositeRedirectAutomatic) ++ DamageDamageRegion (&pWin->drawable, &damage); + REGION_UNINIT (pScreen, &damage); + /* + * Save the new border clip region --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/243_exaDriverInit-_Fail_if_pScreenInfo_or_a_member_of_it_is_invalid.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/243_exaDriverInit-_Fail_if_pScreenInfo_or_a_member_of_it_is_invalid.patch @@ -0,0 +1,59 @@ +From: Dodji Seketeli +Date: Tue, 17 Jul 2007 10:12:02 +0000 (+0200) +Subject: exaDriverInit: Fail if pScreenInfo or a member of it is invalid. +X-Git-Tag: xorg-server-1.3.99.0 +X-Git-Url: http://gitweb.freedesktop.org/?p=xorg/xserver.git;a=commitdiff;h=5657fb065cc79ba3ca5a836f45637ba9894f9abf + +exaDriverInit: Fail if pScreenInfo or a member of it is invalid. + +EXA may attempt to use the invalid value and crash otherwise. +--- + +--- a/exa/exa.c ++++ b/exa/exa.c +@@ -569,6 +569,45 @@ exaDriverInit (ScreenPtr pScreen, + PictureScreenPtr ps; + #endif + ++ if (!pScreenInfo) ++ return FALSE; ++ ++ if (!pScreenInfo->memoryBase) { ++ LogMessage(X_ERROR, "EXA(%d): ExaDriverRec::memoryBase must be " ++ "non-zero\n", pScreen->myNum); ++ return FALSE; ++ } ++ ++ if (!pScreenInfo->memorySize) { ++ LogMessage(X_ERROR, "EXA(%d): ExaDriverRec::memorySize must be " ++ "non-zero\n", pScreen->myNum); ++ return FALSE; ++ } ++ ++ if (pScreenInfo->offScreenBase > pScreenInfo->memorySize) { ++ LogMessage(X_ERROR, "EXA(%d): ExaDriverRec::offScreenBase must be <= " ++ "ExaDriverRec::memorySize\n", pScreen->myNum); ++ return FALSE; ++ } ++ ++ if (!pScreenInfo->PrepareSolid) { ++ LogMessage(X_ERROR, "EXA(%d): ExaDriverRec::PrepareSolid must be " ++ "non-NULL\n", pScreen->myNum); ++ return FALSE; ++ } ++ ++ if (!pScreenInfo->PrepareCopy) { ++ LogMessage(X_ERROR, "EXA(%d): ExaDriverRec::PrepareCopy must be " ++ "non-NULL\n", pScreen->myNum); ++ return FALSE; ++ } ++ ++ if (!pScreenInfo->WaitMarker) { ++ LogMessage(X_ERROR, "EXA(%d): ExaDriverRec::WaitMarker must be " ++ "non-NULL\n", pScreen->myNum); ++ return FALSE; ++ } ++ + if (pScreenInfo->exa_major != EXA_VERSION_MAJOR || + pScreenInfo->exa_minor > EXA_VERSION_MINOR) + { --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/40_consolidate_portPriv_pDraw_assignments.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/40_consolidate_portPriv_pDraw_assignments.diff @@ -0,0 +1,56 @@ +commit 649e7f82d8d4333443493056b81eb20d6cf022bc +Author: Michel Dänzer +Date: Thu May 24 12:10:05 2007 +0200 + + Consolidate portPriv->pDraw assignments into xf86XVEnlistPortInWindow. + + This avoids a crash in xf86XVReputVideo and also cleans up the code slightly. + + Debian bug#424899 + +diff --git a/hw/xfree86/common/xf86xv.c b/hw/xfree86/common/xf86xv.c +index 2b097d2..02fcde6 100644 +--- a/hw/xfree86/common/xf86xv.c ++++ b/hw/xfree86/common/xf86xv.c +@@ -979,6 +979,9 @@ xf86XVEnlistPortInWindow(WindowPtr pWin, XvPortRecPrivatePtr portPriv) + winPriv->next = PrivRoot; + pWin->devPrivates[XF86XVWindowIndex].ptr = (pointer)winPriv; + } ++ ++ portPriv->pDraw = (DrawablePtr)pWin; ++ + return Success; + } + +@@ -1375,7 +1378,6 @@ xf86XVPutVideo( + result = xf86XVEnlistPortInWindow((WindowPtr)pDraw, portPriv); + if(result != Success) return result; + +- portPriv->pDraw = pDraw; + portPriv->type = XvInputMask; + + /* save a copy of these parameters */ +@@ -1479,7 +1481,6 @@ xf86XVPutStill( + + xf86XVEnlistPortInWindow((WindowPtr)pDraw, portPriv); + portPriv->isOn = XV_ON; +- portPriv->pDraw = pDraw; + portPriv->drw_x = drw_x; portPriv->drw_y = drw_y; + portPriv->drw_w = drw_w; portPriv->drw_h = drw_h; + portPriv->type = 0; /* no mask means it's transient and should +@@ -1529,7 +1530,6 @@ xf86XVGetVideo( + result = xf86XVEnlistPortInWindow((WindowPtr)pDraw, portPriv); + if(result != Success) return result; + +- portPriv->pDraw = pDraw; + portPriv->type = XvOutputMask; + + /* save a copy of these parameters */ +@@ -1784,7 +1784,6 @@ xf86XVPutImage( + (portPriv->AdaptorRec->flags & VIDEO_OVERLAID_IMAGES)) { + + portPriv->isOn = XV_ON; +- portPriv->pDraw = pDraw; + portPriv->drw_x = drw_x; portPriv->drw_y = drw_y; + portPriv->drw_w = drw_w; portPriv->drw_h = drw_h; + portPriv->type = 0; /* no mask means it's transient and should --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/fix_CVE-2008-2362.patch +++ xorg-server-1.3.0.0.dfsg/debian/patches/fix_CVE-2008-2362.patch @@ -0,0 +1,63 @@ +diff --git a/render/render.c b/render/render.c +index 74c5f63..b53e878 100644 +--- a/render/render.c ++++ b/render/render.c +@@ -1920,6 +1920,8 @@ static int ProcRenderCreateLinearGradient (ClientPtr client) + LEGAL_NEW_RESOURCE(stuff->pid, client); + + len = (client->req_len << 2) - sizeof(xRenderCreateLinearGradientReq); ++ if (stuff->nStops > UINT32_MAX/(sizeof(xFixed) + sizeof(xRenderColor))) ++ return BadLength; + if (len != stuff->nStops*(sizeof(xFixed) + sizeof(xRenderColor))) + return BadLength; + +@@ -2493,18 +2495,18 @@ SProcRenderCreateSolidFill(ClientPtr client) + return (*ProcRenderVector[stuff->renderReqType]) (client); + } + +-static void swapStops(void *stuff, int n) ++static void swapStops(void *stuff, int num) + { +- int i; ++ int i, n; + CARD32 *stops; + CARD16 *colors; + stops = (CARD32 *)(stuff); +- for (i = 0; i < n; ++i) { ++ for (i = 0; i < num; ++i) { + swapl(stops, n); + ++stops; + } + colors = (CARD16 *)(stops); +- for (i = 0; i < 4*n; ++i) { ++ for (i = 0; i < 4*num; ++i) { + swaps(stops, n); + ++stops; + } +@@ -2527,6 +2529,8 @@ SProcRenderCreateLinearGradient (ClientPtr client) + swapl(&stuff->nStops, n); + + len = (client->req_len << 2) - sizeof(xRenderCreateLinearGradientReq); ++ if (stuff->nStops > UINT32_MAX/(sizeof(xFixed) + sizeof(xRenderColor))) ++ return BadLength; + if (len != stuff->nStops*(sizeof(xFixed) + sizeof(xRenderColor))) + return BadLength; + +@@ -2554,6 +2558,8 @@ SProcRenderCreateRadialGradient (ClientPtr client) + swapl(&stuff->nStops, n); + + len = (client->req_len << 2) - sizeof(xRenderCreateRadialGradientReq); ++ if (stuff->nStops > UINT32_MAX/(sizeof(xFixed) + sizeof(xRenderColor))) ++ return BadLength; + if (len != stuff->nStops*(sizeof(xFixed) + sizeof(xRenderColor))) + return BadLength; + +@@ -2578,6 +2584,8 @@ SProcRenderCreateConicalGradient (ClientPtr client) + swapl(&stuff->nStops, n); + + len = (client->req_len << 2) - sizeof(xRenderCreateConicalGradientReq); ++ if (stuff->nStops > UINT32_MAX/(sizeof(xFixed) + sizeof(xRenderColor))) ++ return BadLength; + if (len != stuff->nStops*(sizeof(xFixed) + sizeof(xRenderColor))) + return BadLength; + --- xorg-server-1.3.0.0.dfsg.orig/debian/patches/46_export-ramdac-symbols.diff +++ xorg-server-1.3.0.0.dfsg/debian/patches/46_export-ramdac-symbols.diff @@ -0,0 +1,78 @@ +From bccecf97f180966accbc979c28d648f7d1145b36 Mon Sep 17 00:00:00 2001 +From: Julien Cristau +Date: Thu, 10 May 2007 17:26:49 +0200 +Subject: [PATCH] Export ramdac symbols + +The former ramdac module is now built into the server, so its symbols need to +be explicitly exported to drivers (Debian #423129). +--- + hw/xfree86/loader/xf86sym.c | 49 +++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 49 insertions(+), 0 deletions(-) + +Index: xorg-server/hw/xfree86/loader/xf86sym.c +=================================================================== +--- xorg-server.orig/hw/xfree86/loader/xf86sym.c 2007-05-11 01:20:46.000000000 +0200 ++++ xorg-server/hw/xfree86/loader/xf86sym.c 2007-05-11 01:37:11.000000000 +0200 +@@ -97,6 +97,11 @@ + #endif + #include "xf86DDC.h" + #include "edid.h" ++#include "xf86Cursor.h" ++#include "xf86RamDac.h" ++#include "BT.h" ++#include "IBM.h" ++#include "TI.h" + + #ifndef HAS_GLIBC_SIGSETJMP + #if defined(setjmp) && defined(__GNU_LIBRARY__) && \ +@@ -1266,4 +1271,50 @@ + SYMFUNC(xf86I2CWriteRead) + SYMFUNC(xf86I2CWriteVec) + SYMFUNC(xf86I2CWriteWord) ++ ++ /* ramdac/xf86RamDac.c */ ++ SYMFUNC(RamDacCreateInfoRec) ++ SYMFUNC(RamDacHelperCreateInfoRec) ++ SYMFUNC(RamDacDestroyInfoRec) ++ SYMFUNC(RamDacHelperDestroyInfoRec) ++ SYMFUNC(RamDacInit) ++ SYMFUNC(RamDacHandleColormaps) ++ SYMFUNC(RamDacFreeRec) ++ SYMFUNC(RamDacGetHWIndex) ++ SYMVAR(RamDacHWPrivateIndex) ++ SYMVAR(RamDacScreenPrivateIndex) ++ ++ /* ramdac/xf86Cursor.c */ ++ SYMFUNC(xf86InitCursor) ++ SYMFUNC(xf86CreateCursorInfoRec) ++ SYMFUNC(xf86DestroyCursorInfoRec) ++ SYMFUNC(xf86ForceHWCursor) ++ ++ /* ramdac/BT.c */ ++ SYMFUNC(BTramdacProbe) ++ SYMFUNC(BTramdacSave) ++ SYMFUNC(BTramdacRestore) ++ SYMFUNC(BTramdacSetBpp) ++ ++ /* ramdac/IBM.c */ ++ SYMFUNC(IBMramdacProbe) ++ SYMFUNC(IBMramdacSave) ++ SYMFUNC(IBMramdacRestore) ++ SYMFUNC(IBMramdac526SetBpp) ++ SYMFUNC(IBMramdac640SetBpp) ++ SYMFUNC(IBMramdac526CalculateMNPCForClock) ++ SYMFUNC(IBMramdac640CalculateMNPCForClock) ++ SYMFUNC(IBMramdac526HWCursorInit) ++ SYMFUNC(IBMramdac640HWCursorInit) ++ SYMFUNC(IBMramdac526SetBppWeak) ++ ++ /* ramdac/TI.c */ ++ SYMFUNC(TIramdacCalculateMNPForClock) ++ SYMFUNC(TIramdacProbe) ++ SYMFUNC(TIramdacSave) ++ SYMFUNC(TIramdacRestore) ++ SYMFUNC(TIramdac3026SetBpp) ++ SYMFUNC(TIramdac3030SetBpp) ++ SYMFUNC(TIramdacHWCursorInit) ++ SYMFUNC(TIramdacLoadPalette) + }; --- xorg-server-1.3.0.0.dfsg.orig/debian/xserver-xephyr.docs +++ xorg-server-1.3.0.0.dfsg/debian/xserver-xephyr.docs @@ -0,0 +1 @@ +hw/kdrive/ephyr/README --- xorg-server-1.3.0.0.dfsg.orig/randr/Makefile.in +++ xorg-server-1.3.0.0.dfsg/randr/Makefile.in @@ -127,6 +127,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -205,6 +207,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -317,6 +320,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/randr/rrxinerama.c +++ xorg-server-1.3.0.0.dfsg/randr/rrxinerama.c @@ -425,6 +425,14 @@ return; #endif + /* + * Xinerama isn't capable enough to have multiple protocol screens each + * with their own output geometry. So if there's more than one protocol + * screen, just don't even try. + */ + if (screenInfo.numScreens > 1) + return; + (void) AddExtension(PANORAMIX_PROTOCOL_NAME, 0,0, ProcRRXineramaDispatch, SProcRRXineramaDispatch, --- xorg-server-1.3.0.0.dfsg.orig/mfb/Makefile.in +++ xorg-server-1.3.0.0.dfsg/mfb/Makefile.in @@ -135,6 +135,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -213,6 +215,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -325,6 +328,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/dbe/Makefile.in +++ xorg-server-1.3.0.0.dfsg/dbe/Makefile.in @@ -125,6 +125,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -203,6 +205,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -315,6 +318,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/ltmain.sh +++ xorg-server-1.3.0.0.dfsg/ltmain.sh @@ -1,8 +1,8 @@ # ltmain.sh - Provide generalized library-building support services. # NOTE: Changing this file will not affect anything until you rerun configure. # -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 -# Free Software Foundation, Inc. +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, +# 2007 Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify @@ -43,14 +43,22 @@ PROGRAM=ltmain.sh PACKAGE=libtool -VERSION="1.5.22 Debian 1.5.22-4" -TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)" +VERSION="1.5.24 Debian 1.5.24-1" +TIMESTAMP=" (1.1220.2.456 2007/06/24 02:25:32)" -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes. -if test -n "${ZSH_VERSION+set}" ; then +# Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE). +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh # Check that we have a working $echo. if test "X$1" = X--no-reexec; then @@ -105,12 +113,14 @@ # These must not be set unconditionally because not all systems understand # e.g. LANG=C (notably SCO). # We save the old values to restore during execute mode. -if test "${LC_ALL+set}" = set; then - save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL -fi -if test "${LANG+set}" = set; then - save_LANG="$LANG"; LANG=C; export LANG -fi +for lt_var in LANG LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test \"\${$lt_var+set}\" = set; then + save_$lt_var=\$$lt_var + $lt_var=C + export $lt_var + fi" +done # Make sure IFS has a sensible default lt_nl=' @@ -136,6 +146,8 @@ preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" +extracted_archives= +extracted_serial=0 ##################################### # Shell function definitions: @@ -196,7 +208,13 @@ if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | \ - $SED -n -e '1,100{/ I /{s,.*,import,;p;q;};}'` + $SED -n -e '1,100{ + / I /{ + s,.*,import, + p + q + } + }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; @@ -327,7 +345,17 @@ *) my_xabs=`pwd`"/$my_xlib" ;; esac my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` - my_xdir="$my_gentop/$my_xlib" + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + extracted_serial=`expr $extracted_serial + 1` + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir="$my_gentop/$my_xlib_u" $show "${rm}r $my_xdir" $run ${rm}r "$my_xdir" @@ -454,11 +482,12 @@ ;; --version) - $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" - $echo - $echo "Copyright (C) 2005 Free Software Foundation, Inc." - $echo "This is free software; see the source for copying conditions. There is NO" - $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + echo "\ +$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP + +Copyright (C) 2007 Free Software Foundation, Inc. +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." exit $? ;; @@ -755,9 +784,10 @@ *.class) xform=class ;; *.cpp) xform=cpp ;; *.cxx) xform=cxx ;; - *.f90) xform=f90 ;; + *.[fF][09]?) xform=[fF][09]. ;; *.for) xform=for ;; *.java) xform=java ;; + *.obj) xform=obj ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` @@ -1138,8 +1168,9 @@ for arg do case $arg in - -all-static | -static) - if test "X$arg" = "X-all-static"; then + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2 fi @@ -1147,12 +1178,20 @@ dlopen_self=$dlopen_self_static fi prefer_static_libs=yes - else + ;; + -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built - fi + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac build_libtool_libs=no build_old_libs=yes break @@ -1600,7 +1639,7 @@ continue ;; - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" @@ -1620,10 +1659,11 @@ # -m* pass through architecture-specific compiler args for GCC # -m*, -t[45]*, -txscale* pass through architecture-specific # compiler args for GCC - # -pg pass through profiling flag for GCC + # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC + # -F/path gives path to uninstalled frameworks, gcc on darwin # @file GCC response files - -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*|-pg| \ - -t[45]*|-txscale*|@*) + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. @@ -1651,9 +1691,9 @@ -no-install) case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin*) # The PATH hackery in wrapper scripts is required on Windows - # in order for the loader to find any dlls it needs. + # and Darwin in order for the loader to find any dlls it needs. $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 fast_install=no @@ -1712,7 +1752,7 @@ continue ;; - -static) + -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects @@ -2097,7 +2137,7 @@ lib= found=no case $deplib in - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" @@ -2493,7 +2533,9 @@ if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && - { test "$prefer_static_libs" = no || test -z "$old_library"; }; then + { { test "$prefer_static_libs" = no || + test "$prefer_static_libs,$installed" = "built,yes"; } || + test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. @@ -3189,7 +3231,7 @@ # which has an extra 1 added just for fun # case $version_type in - darwin|linux|osf|windows) + darwin|linux|osf|windows|none) current=`expr $number_major + $number_minor` age="$number_minor" revision="$number_revision" @@ -3200,9 +3242,10 @@ age="0" ;; irix|nonstopux) - current=`expr $number_major + $number_minor - 1` + current=`expr $number_major + $number_minor` age="$number_minor" revision="$number_minor" + lt_irix_increment=no ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 @@ -3266,7 +3309,8 @@ versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... minor_current=`expr $current + 1` - verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) @@ -3280,8 +3324,11 @@ ;; irix | nonstopux) - major=`expr $current - $age + 1` - + if test "X$lt_irix_increment" = "Xno"; then + major=`expr $current - $age` + else + major=`expr $current - $age + 1` + fi case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; @@ -3418,11 +3465,11 @@ fi # Eliminate all temporary directories. - for path in $notinst_path; do - lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"` - deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"` - dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"` - done + #for path in $notinst_path; do + # lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"` + # deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"` + # dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"` + #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. @@ -3523,13 +3570,12 @@ int main() { return 0; } EOF $rm conftest - $LTCC $LTCFLAGS -o conftest conftest.c $deplibs - if test "$?" -eq 0 ; then + if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then ldd_output=`ldd conftest` for i in $deplibs; do name=`expr $i : '-l\(.*\)'` # If $name is empty we are operating on a -L argument. - if test "$name" != "" && test "$name" -ne "0"; then + if test "$name" != "" && test "$name" != "0"; then if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $i "*) @@ -3568,9 +3614,7 @@ # If $name is empty we are operating on a -L argument. if test "$name" != "" && test "$name" != "0"; then $rm conftest - $LTCC $LTCFLAGS -o conftest conftest.c $i - # Did it work? - if test "$?" -eq 0 ; then + if $LTCC $LTCFLAGS -o conftest conftest.c $i; then ldd_output=`ldd conftest` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in @@ -3602,7 +3646,7 @@ droppeddeps=yes $echo $echo "*** Warning! Library $i is needed by this library but I was not able to" - $echo "*** make it link in! You will probably need to install it or some" + $echo "*** make it link in! You will probably need to install it or some" $echo "*** library that it depends on before this library will be fully" $echo "*** functional. Installing it before continuing would be even better." fi @@ -3888,7 +3932,10 @@ test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" if test -n "$hardcode_libdir_flag_spec_ld"; then - eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" + case $archive_cmds in + *\$LD*) eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" ;; + *) eval dep_rpath=\"$hardcode_libdir_flag_spec\" ;; + esac else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi @@ -4247,12 +4294,14 @@ reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of - # -Wl from whole_archive_flag_spec + # -Wl from whole_archive_flag_spec and hope we can get by with + # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then - eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + reload_conv_objs=$reload_objs\ `$echo "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` else gentop="$output_objdir/${obj}x" generated="$generated $gentop" @@ -4700,16 +4749,16 @@ case $host in *cygwin* | *mingw* ) if test -f "$output_objdir/${outputname}.def" ; then - compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` - finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` + compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP` + finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP` else - compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` - finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` + finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` fi ;; * ) - compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` - finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` + finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` ;; esac ;; @@ -4724,13 +4773,13 @@ # really was required. # Nullify the symbol file. - compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` - finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP` + finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP` fi if test "$need_relink" = no || test "$build_libtool_libs" != yes; then # Replace the output file specification. - compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$output"'%g' | $NL2SP` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. @@ -4817,7 +4866,7 @@ if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then - relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` + relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $SP2NL | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g' | $NL2SP` else # fast_install is set to needless relink_command= @@ -4854,7 +4903,7 @@ fi done relink_command="(cd `pwd`; $relink_command)" - relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` + relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP` fi # Quote $echo for shipping. @@ -5261,6 +5310,20 @@ Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' +# Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE). +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH @@ -5403,7 +5466,7 @@ ;; esac $echo >> $output "\ - \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" + \$echo \"\$0: cannot exec \$program \$*\" exit $EXIT_FAILURE fi else @@ -5589,7 +5652,7 @@ done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" - relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` + relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP` if test "$hardcode_automatic" = yes ; then relink_command= fi @@ -5934,9 +5997,9 @@ if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. - relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%" | $NL2SP` else - relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%%" | $NL2SP` fi $echo "$modename: warning: relinking \`$file'" 1>&2 @@ -6145,7 +6208,7 @@ file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` outputname="$tmpdir/$file" # Replace the output file specification. - relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` + relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g' | $NL2SP` $show "$relink_command" if $run eval "$relink_command"; then : @@ -6356,8 +6419,10 @@ if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else - $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 - exit $EXIT_FAILURE + if test ! -f "$dir/$dlname"; then + $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 + exit $EXIT_FAILURE + fi fi ;; @@ -6421,12 +6486,12 @@ fi # Restore saved environment variables - if test "${save_LC_ALL+set}" = set; then - LC_ALL="$save_LC_ALL"; export LC_ALL - fi - if test "${save_LANG+set}" = set; then - LANG="$save_LANG"; export LANG - fi + for lt_var in LANG LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + fi" + done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" @@ -6783,9 +6848,9 @@ -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE - try to export only the symbols listed in SYMFILE + try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX - try to export only the symbols matching REGEX + try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened @@ -6799,9 +6864,11 @@ -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries - -static do not do any dynamic linking of libtool libraries + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] - specify library version info [each variable defaults to 0] + specify library version info [each variable defaults to 0] All other options (arguments beginning with \`-') are ignored. --- xorg-server-1.3.0.0.dfsg.orig/xkb/Makefile.in +++ xorg-server-1.3.0.0.dfsg/xkb/Makefile.in @@ -137,6 +137,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -215,6 +217,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -327,6 +330,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/damageext/Makefile.in +++ xorg-server-1.3.0.0.dfsg/damageext/Makefile.in @@ -113,6 +113,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -191,6 +193,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -303,6 +306,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/config.guess +++ xorg-server-1.3.0.0.dfsg/config.guess @@ -1,9 +1,10 @@ #! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. +# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, +# Inc. -timestamp='2006-02-23' +timestamp='2007-03-06' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -160,6 +161,7 @@ arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched @@ -210,7 +212,7 @@ echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) - echo powerppc-unknown-mirbsd${UNAME_RELEASE} + echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} @@ -770,6 +772,8 @@ case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac @@ -777,10 +781,7 @@ i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; - i*:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; - i*:MSYS_NT-*:*:*) + *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) @@ -790,12 +791,15 @@ i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; - x86:Interix*:[345]*) - echo i586-pc-interix${UNAME_RELEASE} - exit ;; - EM64T:Interix*:[345]*) - echo x86_64-unknown-interix${UNAME_RELEASE} - exit ;; + *:Interix*:[3456]*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + EM64T | authenticamd) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; @@ -831,6 +835,9 @@ arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; @@ -947,6 +954,9 @@ x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; + xtensa:Linux:*:*) + echo xtensa-unknown-linux-gnu + exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent @@ -989,7 +999,7 @@ LIBC=gnulibc1 # endif #else - #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__sun) + #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) LIBC=gnu #else LIBC=gnuaout @@ -1205,6 +1215,15 @@ SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; --- xorg-server-1.3.0.0.dfsg.orig/GL/glx/Makefile.in +++ xorg-server-1.3.0.0.dfsg/GL/glx/Makefile.in @@ -127,6 +127,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -205,6 +207,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -317,6 +320,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -557,7 +562,8 @@ -I@MESA_SOURCE@/src/mesa/main \ -DXFree86Server \ -DNO_LIBCWRAPPER \ - @GLX_DEFINES@ + @GLX_DEFINES@ \ + @GLX_ARCH_DEFINES@ # none yet --- xorg-server-1.3.0.0.dfsg.orig/GL/Makefile.in +++ xorg-server-1.3.0.0.dfsg/GL/Makefile.in @@ -104,6 +104,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -182,6 +184,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -294,6 +297,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/GL/mesa/main/Makefile.in +++ xorg-server-1.3.0.0.dfsg/GL/mesa/main/Makefile.in @@ -63,9 +63,9 @@ drawpix.lo enable.lo enums.lo eval.lo execmem.lo extensions.lo \ fbobject.lo feedback.lo fog.lo framebuffer.lo get.lo \ getstring.lo hash.lo hint.lo histogram.lo image.lo imports.lo \ - light.lo lines.lo matrix.lo mipmap.lo mm.lo occlude.lo \ - pixel.lo points.lo polygon.lo rastpos.lo rbadaptors.lo \ - renderbuffer.lo state.lo stencil.lo texcompress.lo \ + light.lo lines.lo matrix.lo mipmap.lo mm.lo pixel.lo points.lo \ + polygon.lo queryobj.lo rastpos.lo rbadaptors.lo \ + renderbuffer.lo shaders.lo state.lo stencil.lo texcompress.lo \ texcompress_fxt1.lo texcompress_s3tc.lo texenvprogram.lo \ texformat.lo teximage.lo texobj.lo texrender.lo texstate.lo \ texstore.lo varray.lo $(am__objects_1) vtxfmt.lo @@ -126,6 +126,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -204,6 +206,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -316,6 +319,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -551,7 +556,6 @@ INCLUDES = -I@MESA_SOURCE@/include \ -I../X \ - -I../array_cache \ -I../glapi \ -I../main \ -I../math \ @@ -603,13 +607,14 @@ matrix.c \ mipmap.c \ mm.c \ - occlude.c \ pixel.c \ points.c \ polygon.c \ + queryobj.c \ rastpos.c \ rbadaptors.c \ renderbuffer.c \ + shaders.c \ state.c \ stencil.c \ texcompress.c \ @@ -717,13 +722,14 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matrix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mipmap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mm.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/occlude.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixel.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/points.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/polygon.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/queryobj.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rastpos.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rbadaptors.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/renderbuffer.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shaders.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/state.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stencil.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/texcompress.Plo@am__quote@ --- xorg-server-1.3.0.0.dfsg.orig/GL/mesa/swrast_setup/Makefile.in +++ xorg-server-1.3.0.0.dfsg/GL/mesa/swrast_setup/Makefile.in @@ -113,6 +113,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -191,6 +193,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -303,6 +306,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -538,7 +543,6 @@ INCLUDES = -I@MESA_SOURCE@/include \ -I../X \ - -I../array_cache \ -I../glapi \ -I../main \ -I../math \ --- xorg-server-1.3.0.0.dfsg.orig/GL/mesa/tnl/Makefile.in +++ xorg-server-1.3.0.0.dfsg/GL/mesa/tnl/Makefile.in @@ -55,14 +55,11 @@ CONFIG_CLEAN_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libtnl_la_LIBADD = -nodist_libtnl_la_OBJECTS = t_array_api.lo t_array_import.lo \ - t_context.lo t_pipeline.lo t_save_api.lo t_save_loopback.lo \ - t_save_playback.lo t_vb_arbprogram.lo t_vb_arbprogram_sse.lo \ - t_vb_arbshader.lo t_vb_cull.lo t_vb_fog.lo t_vb_light.lo \ - t_vb_normals.lo t_vb_points.lo t_vb_program.lo t_vb_render.lo \ - t_vb_texgen.lo t_vb_texmat.lo t_vb_vertex.lo t_vertex.lo \ - t_vertex_generic.lo t_vertex_sse.lo t_vp_build.lo t_vtx_api.lo \ - t_vtx_eval.lo t_vtx_exec.lo t_vtx_generic.lo t_vtx_x86.lo +nodist_libtnl_la_OBJECTS = t_context.lo t_draw.lo t_pipeline.lo \ + t_vb_cull.lo t_vb_fog.lo t_vb_light.lo t_vb_normals.lo \ + t_vb_points.lo t_vb_program.lo t_vb_render.lo t_vb_texgen.lo \ + t_vb_texmat.lo t_vb_vertex.lo t_vertex.lo t_vertex_generic.lo \ + t_vertex_sse.lo t_vp_build.lo libtnl_la_OBJECTS = $(nodist_libtnl_la_OBJECTS) DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include depcomp = $(SHELL) $(top_srcdir)/depcomp @@ -120,6 +117,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -198,6 +197,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -310,6 +310,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -545,7 +547,6 @@ INCLUDES = -I@MESA_SOURCE@/include \ -I../X \ - -I../array_cache \ -I../glapi \ -I../main \ -I../math \ @@ -557,16 +558,9 @@ -I.. \ -I$(top_srcdir)/hw/xfree86/os-support -nodist_libtnl_la_SOURCES = t_array_api.c \ - t_array_import.c \ - t_context.c \ +nodist_libtnl_la_SOURCES = t_context.c \ + t_draw.c \ t_pipeline.c \ - t_save_api.c \ - t_save_loopback.c \ - t_save_playback.c \ - t_vb_arbprogram.c \ - t_vb_arbprogram_sse.c \ - t_vb_arbshader.c \ t_vb_cull.c \ t_vb_fog.c \ t_vb_light.c \ @@ -580,12 +574,7 @@ t_vertex.c \ t_vertex_generic.c \ t_vertex_sse.c \ - t_vp_build.c \ - t_vtx_api.c \ - t_vtx_eval.c \ - t_vtx_exec.c \ - t_vtx_generic.c \ - t_vtx_x86.c + t_vp_build.c all: all-am @@ -638,16 +627,9 @@ distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_array_api.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_array_import.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_context.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_draw.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_pipeline.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_save_api.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_save_loopback.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_save_playback.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_vb_arbprogram.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_vb_arbprogram_sse.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_vb_arbshader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_vb_cull.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_vb_fog.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_vb_light.Plo@am__quote@ @@ -662,11 +644,6 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_vertex_generic.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_vertex_sse.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_vp_build.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_vtx_api.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_vtx_eval.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_vtx_exec.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_vtx_generic.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_vtx_x86.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ --- xorg-server-1.3.0.0.dfsg.orig/GL/mesa/glapi/Makefile.in +++ xorg-server-1.3.0.0.dfsg/GL/mesa/glapi/Makefile.in @@ -113,6 +113,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -191,6 +193,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -303,6 +306,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -538,7 +543,6 @@ INCLUDES = -I@MESA_SOURCE@/include \ -I../X \ - -I../array_cache \ -I../glapi \ -I../main \ -I../math \ --- xorg-server-1.3.0.0.dfsg.orig/GL/mesa/vbo/Makefile.in +++ xorg-server-1.3.0.0.dfsg/GL/mesa/vbo/Makefile.in @@ -0,0 +1,842 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = GL/mesa/vbo +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/include/do-not-use-config.h \ + $(top_builddir)/include/xorg-server.h \ + $(top_builddir)/include/dix-config.h \ + $(top_builddir)/include/xgl-config.h \ + $(top_builddir)/include/xorg-config.h \ + $(top_builddir)/include/xkb-config.h \ + $(top_builddir)/include/xwin-config.h \ + $(top_builddir)/include/kdrive-config.h +CONFIG_CLEAN_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +libvbo_la_LIBADD = +nodist_libvbo_la_OBJECTS = vbo_context.lo vbo_exec_api.lo \ + vbo_exec_array.lo vbo_exec.lo vbo_exec_draw.lo \ + vbo_exec_eval.lo vbo_rebase.lo vbo_save_api.lo vbo_save.lo \ + vbo_save_draw.lo vbo_save_loopback.lo vbo_split.lo \ + vbo_split_copy.lo vbo_split_inplace.lo +libvbo_la_OBJECTS = $(nodist_libvbo_la_OBJECTS) +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(nodist_libvbo_la_SOURCES) +DIST_SOURCES = +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ +ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ +AFB_FALSE = @AFB_FALSE@ +AFB_TRUE = @AFB_TRUE@ +AGP_FALSE = @AGP_FALSE@ +AGP_TRUE = @AGP_TRUE@ +AIGLX_FALSE = @AIGLX_FALSE@ +AIGLX_TRUE = @AIGLX_TRUE@ +ALLOCA = @ALLOCA@ +ALPHA_VIDEO_FALSE = @ALPHA_VIDEO_FALSE@ +ALPHA_VIDEO_TRUE = @ALPHA_VIDEO_TRUE@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +APPDEFAULTDIR = @APPDEFAULTDIR@ +APPGROUP_FALSE = @APPGROUP_FALSE@ +APPGROUP_TRUE = @APPGROUP_TRUE@ +APP_MAN_DIR = @APP_MAN_DIR@ +APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ +AR = @AR@ +ARM_VIDEO_FALSE = @ARM_VIDEO_FALSE@ +ARM_VIDEO_TRUE = @ARM_VIDEO_TRUE@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BASE_FONT_PATH = @BASE_FONT_PATH@ +BSD_KBD_MODE_FALSE = @BSD_KBD_MODE_FALSE@ +BSD_KBD_MODE_TRUE = @BSD_KBD_MODE_TRUE@ +BUILDDOCS_FALSE = @BUILDDOCS_FALSE@ +BUILDDOCS_TRUE = @BUILDDOCS_TRUE@ +BUILD_DATE = @BUILD_DATE@ +BUILD_KBD_MODE_FALSE = @BUILD_KBD_MODE_FALSE@ +BUILD_KBD_MODE_TRUE = @BUILD_KBD_MODE_TRUE@ +BUILD_LINUXDOC_FALSE = @BUILD_LINUXDOC_FALSE@ +BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ +BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ +BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ +BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ +BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ +CC = @CC@ +CCAS = @CCAS@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFB_FALSE = @CFB_FALSE@ +CFB_TRUE = @CFB_TRUE@ +CFLAGS = @CFLAGS@ +COMPILEDDEFAULTFONTPATH = @COMPILEDDEFAULTFONTPATH@ +COMPOSITE_FALSE = @COMPOSITE_FALSE@ +COMPOSITE_TRUE = @COMPOSITE_TRUE@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CUP_FALSE = @CUP_FALSE@ +CUP_TRUE = @CUP_TRUE@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DBE_FALSE = @DBE_FALSE@ +DBE_TRUE = @DBE_TRUE@ +DEBUG_FALSE = @DEBUG_FALSE@ +DEBUG_TRUE = @DEBUG_TRUE@ +DEFAULT_LIBRARY_PATH = @DEFAULT_LIBRARY_PATH@ +DEFAULT_LOGPREFIX = @DEFAULT_LOGPREFIX@ +DEFAULT_MODULE_PATH = @DEFAULT_MODULE_PATH@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DGA_FALSE = @DGA_FALSE@ +DGA_TRUE = @DGA_TRUE@ +DIX_CFLAGS = @DIX_CFLAGS@ +DLLTOOL = @DLLTOOL@ +DMXEXAMPLES_DEP_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@ +DMXEXAMPLES_DEP_LIBS = @DMXEXAMPLES_DEP_LIBS@ +DMXMODULES_CFLAGS = @DMXMODULES_CFLAGS@ +DMXMODULES_LIBS = @DMXMODULES_LIBS@ +DMXXIEXAMPLES_DEP_CFLAGS = @DMXXIEXAMPLES_DEP_CFLAGS@ +DMXXIEXAMPLES_DEP_LIBS = @DMXXIEXAMPLES_DEP_LIBS@ +DMXXMUEXAMPLES_DEP_CFLAGS = @DMXXMUEXAMPLES_DEP_CFLAGS@ +DMXXMUEXAMPLES_DEP_LIBS = @DMXXMUEXAMPLES_DEP_LIBS@ +DMX_BUILD_LNX_FALSE = @DMX_BUILD_LNX_FALSE@ +DMX_BUILD_LNX_TRUE = @DMX_BUILD_LNX_TRUE@ +DMX_BUILD_USB_FALSE = @DMX_BUILD_USB_FALSE@ +DMX_BUILD_USB_TRUE = @DMX_BUILD_USB_TRUE@ +DMX_FALSE = @DMX_FALSE@ +DMX_TRUE = @DMX_TRUE@ +DPMSExtension_FALSE = @DPMSExtension_FALSE@ +DPMSExtension_TRUE = @DPMSExtension_TRUE@ +DRIPROTO_CFLAGS = @DRIPROTO_CFLAGS@ +DRIPROTO_LIBS = @DRIPROTO_LIBS@ +DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ +DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ +DRI_DRIVER_PATH = @DRI_DRIVER_PATH@ +DRI_FALSE = @DRI_FALSE@ +DRI_TRUE = @DRI_TRUE@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EVI_FALSE = @EVI_FALSE@ +EVI_TRUE = @EVI_TRUE@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FBDEVHW_FALSE = @FBDEVHW_FALSE@ +FBDEVHW_TRUE = @FBDEVHW_TRUE@ +FFLAGS = @FFLAGS@ +FILE_MAN_DIR = @FILE_MAN_DIR@ +FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ +FONTCACHE_FALSE = @FONTCACHE_FALSE@ +FONTCACHE_TRUE = @FONTCACHE_TRUE@ +FREEBSD_KLDLOAD_FALSE = @FREEBSD_KLDLOAD_FALSE@ +FREEBSD_KLDLOAD_TRUE = @FREEBSD_KLDLOAD_TRUE@ +FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ +FREETYPE_LIBS = @FREETYPE_LIBS@ +FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ +GLX_DEFINES = @GLX_DEFINES@ +GLX_FALSE = @GLX_FALSE@ +GLX_TRUE = @GLX_TRUE@ +GL_CFLAGS = @GL_CFLAGS@ +GL_LIBS = @GL_LIBS@ +GREP = @GREP@ +H3600_TS_FALSE = @H3600_TS_FALSE@ +H3600_TS_TRUE = @H3600_TS_TRUE@ +I386_VIDEO_FALSE = @I386_VIDEO_FALSE@ +I386_VIDEO_TRUE = @I386_VIDEO_TRUE@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_LIBXF86CONFIG_FALSE = @INSTALL_LIBXF86CONFIG_FALSE@ +INSTALL_LIBXF86CONFIG_TRUE = @INSTALL_LIBXF86CONFIG_TRUE@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_SETUID_FALSE = @INSTALL_SETUID_FALSE@ +INSTALL_SETUID_TRUE = @INSTALL_SETUID_TRUE@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INT10_STUB_FALSE = @INT10_STUB_FALSE@ +INT10_STUB_TRUE = @INT10_STUB_TRUE@ +INT10_VM86_FALSE = @INT10_VM86_FALSE@ +INT10_VM86_TRUE = @INT10_VM86_TRUE@ +INT10_X86EMU_FALSE = @INT10_X86EMU_FALSE@ +INT10_X86EMU_TRUE = @INT10_X86EMU_TRUE@ +KDRIVEFBDEV_FALSE = @KDRIVEFBDEV_FALSE@ +KDRIVEFBDEV_TRUE = @KDRIVEFBDEV_TRUE@ +KDRIVELINUX_FALSE = @KDRIVELINUX_FALSE@ +KDRIVELINUX_TRUE = @KDRIVELINUX_TRUE@ +KDRIVEVESA_FALSE = @KDRIVEVESA_FALSE@ +KDRIVEVESA_TRUE = @KDRIVEVESA_TRUE@ +KDRIVE_CFLAGS = @KDRIVE_CFLAGS@ +KDRIVE_FALSE = @KDRIVE_FALSE@ +KDRIVE_HW_FALSE = @KDRIVE_HW_FALSE@ +KDRIVE_HW_TRUE = @KDRIVE_HW_TRUE@ +KDRIVE_INCS = @KDRIVE_INCS@ +KDRIVE_LIBS = @KDRIVE_LIBS@ +KDRIVE_PURE_INCS = @KDRIVE_PURE_INCS@ +KDRIVE_PURE_LIBS = @KDRIVE_PURE_LIBS@ +KDRIVE_TRUE = @KDRIVE_TRUE@ +LDFLAGS = @LDFLAGS@ +LD_EXPORT_SYMBOLS_FLAG = @LD_EXPORT_SYMBOLS_FLAG@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBDRM_CFLAGS = @LIBDRM_CFLAGS@ +LIBDRM_LIBS = @LIBDRM_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIB_MAN_DIR = @LIB_MAN_DIR@ +LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ +LINUXDOC = @LINUXDOC@ +LINUX_ALPHA_FALSE = @LINUX_ALPHA_FALSE@ +LINUX_ALPHA_TRUE = @LINUX_ALPHA_TRUE@ +LINUX_IA64_FALSE = @LINUX_IA64_FALSE@ +LINUX_IA64_TRUE = @LINUX_IA64_TRUE@ +LNXACPI_FALSE = @LNXACPI_FALSE@ +LNXACPI_TRUE = @LNXACPI_TRUE@ +LNXAPM_FALSE = @LNXAPM_FALSE@ +LNXAPM_TRUE = @LNXAPM_TRUE@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +MAKE_HTML = @MAKE_HTML@ +MAKE_PDF = @MAKE_PDF@ +MAKE_PS = @MAKE_PS@ +MAKE_TEXT = @MAKE_TEXT@ +MESA_SOURCE = @MESA_SOURCE@ +MFB_FALSE = @MFB_FALSE@ +MFB_TRUE = @MFB_TRUE@ +MISC_MAN_DIR = @MISC_MAN_DIR@ +MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ +MITSHM_FALSE = @MITSHM_FALSE@ +MITSHM_TRUE = @MITSHM_TRUE@ +MKFONTDIR = @MKFONTDIR@ +MKFONTSCALE = @MKFONTSCALE@ +MMX_CAPABLE_FALSE = @MMX_CAPABLE_FALSE@ +MMX_CAPABLE_TRUE = @MMX_CAPABLE_TRUE@ +MULTIBUFFER_FALSE = @MULTIBUFFER_FALSE@ +MULTIBUFFER_TRUE = @MULTIBUFFER_TRUE@ +NEED_STRLCAT_FALSE = @NEED_STRLCAT_FALSE@ +NEED_STRLCAT_TRUE = @NEED_STRLCAT_TRUE@ +NEED_VSNPRINTF_FALSE = @NEED_VSNPRINTF_FALSE@ +NEED_VSNPRINTF_TRUE = @NEED_VSNPRINTF_TRUE@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PPC_VIDEO_FALSE = @PPC_VIDEO_FALSE@ +PPC_VIDEO_TRUE = @PPC_VIDEO_TRUE@ +PROJECTROOT = @PROJECTROOT@ +PS2PDF = @PS2PDF@ +RANLIB = @RANLIB@ +RAWCPP = @RAWCPP@ +RAWCPPFLAGS = @RAWCPPFLAGS@ +RECORD_FALSE = @RECORD_FALSE@ +RECORD_TRUE = @RECORD_TRUE@ +RES_FALSE = @RES_FALSE@ +RES_TRUE = @RES_TRUE@ +RGB_DB = @RGB_DB@ +SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ +SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ +SOLARIS_ASM_INLINE_FALSE = @SOLARIS_ASM_INLINE_FALSE@ +SOLARIS_ASM_INLINE_TRUE = @SOLARIS_ASM_INLINE_TRUE@ +SOLARIS_INOUT_ARCH = @SOLARIS_INOUT_ARCH@ +SOLARIS_USL_CONSOLE_FALSE = @SOLARIS_USL_CONSOLE_FALSE@ +SOLARIS_USL_CONSOLE_TRUE = @SOLARIS_USL_CONSOLE_TRUE@ +SPARC64_VIDEO_FALSE = @SPARC64_VIDEO_FALSE@ +SPARC64_VIDEO_TRUE = @SPARC64_VIDEO_TRUE@ +STRIP = @STRIP@ +SUN_KBD_MODE_FALSE = @SUN_KBD_MODE_FALSE@ +SUN_KBD_MODE_TRUE = @SUN_KBD_MODE_TRUE@ +SYS_LIBS = @SYS_LIBS@ +TSLIB_CFLAGS = @TSLIB_CFLAGS@ +TSLIB_FALSE = @TSLIB_FALSE@ +TSLIB_LIBS = @TSLIB_LIBS@ +TSLIB_TRUE = @TSLIB_TRUE@ +USE_CURSES_FALSE = @USE_CURSES_FALSE@ +USE_CURSES_TRUE = @USE_CURSES_TRUE@ +USE_RGB_BUILTIN_FALSE = @USE_RGB_BUILTIN_FALSE@ +USE_RGB_BUILTIN_TRUE = @USE_RGB_BUILTIN_TRUE@ +VENDOR_MAN_VERSION = @VENDOR_MAN_VERSION@ +VENDOR_RELEASE = @VENDOR_RELEASE@ +VENDOR_STRING = @VENDOR_STRING@ +VENDOR_STRING_SHORT = @VENDOR_STRING_SHORT@ +VERSION = @VERSION@ +X11EXAMPLES_DEP_CFLAGS = @X11EXAMPLES_DEP_CFLAGS@ +X11EXAMPLES_DEP_LIBS = @X11EXAMPLES_DEP_LIBS@ +XACE_FALSE = @XACE_FALSE@ +XACE_TRUE = @XACE_TRUE@ +XCALIBRATE_FALSE = @XCALIBRATE_FALSE@ +XCALIBRATE_TRUE = @XCALIBRATE_TRUE@ +XCSECURITY_FALSE = @XCSECURITY_FALSE@ +XCSECURITY_TRUE = @XCSECURITY_TRUE@ +XDMAUTH_FALSE = @XDMAUTH_FALSE@ +XDMAUTH_TRUE = @XDMAUTH_TRUE@ +XDMCP_CFLAGS = @XDMCP_CFLAGS@ +XDMCP_FALSE = @XDMCP_FALSE@ +XDMCP_LIBS = @XDMCP_LIBS@ +XDMCP_TRUE = @XDMCP_TRUE@ +XDMXCONFIG_DEP_CFLAGS = @XDMXCONFIG_DEP_CFLAGS@ +XDMXCONFIG_DEP_LIBS = @XDMXCONFIG_DEP_LIBS@ +XDMX_LIBS = @XDMX_LIBS@ +XEGLMODULES_CFLAGS = @XEGLMODULES_CFLAGS@ +XEGLMODULES_LIBS = @XEGLMODULES_LIBS@ +XEGL_FALSE = @XEGL_FALSE@ +XEGL_LIBS = @XEGL_LIBS@ +XEGL_TRUE = @XEGL_TRUE@ +XEPHYR_CFLAGS = @XEPHYR_CFLAGS@ +XEPHYR_FALSE = @XEPHYR_FALSE@ +XEPHYR_INCS = @XEPHYR_INCS@ +XEPHYR_LIBS = @XEPHYR_LIBS@ +XEPHYR_TRUE = @XEPHYR_TRUE@ +XEVIE_FALSE = @XEVIE_FALSE@ +XEVIE_TRUE = @XEVIE_TRUE@ +XF86BIGFONT_FALSE = @XF86BIGFONT_FALSE@ +XF86BIGFONT_TRUE = @XF86BIGFONT_TRUE@ +XF86CONFIGFILE = @XF86CONFIGFILE@ +XF86UTILS_FALSE = @XF86UTILS_FALSE@ +XF86UTILS_TRUE = @XF86UTILS_TRUE@ +XGLMODULES_CFLAGS = @XGLMODULES_CFLAGS@ +XGLMODULES_LIBS = @XGLMODULES_LIBS@ +XGLXMODULES_CFLAGS = @XGLXMODULES_CFLAGS@ +XGLXMODULES_LIBS = @XGLXMODULES_LIBS@ +XGLX_FALSE = @XGLX_FALSE@ +XGLX_LIBS = @XGLX_LIBS@ +XGLX_TRUE = @XGLX_TRUE@ +XGL_FALSE = @XGL_FALSE@ +XGL_LIBS = @XGL_LIBS@ +XGL_MODULE_PATH = @XGL_MODULE_PATH@ +XGL_TRUE = @XGL_TRUE@ +XINERAMA_FALSE = @XINERAMA_FALSE@ +XINERAMA_TRUE = @XINERAMA_TRUE@ +XINPUT_FALSE = @XINPUT_FALSE@ +XINPUT_TRUE = @XINPUT_TRUE@ +XKB_BASE_DIRECTORY = @XKB_BASE_DIRECTORY@ +XKB_BIN_DIRECTORY = @XKB_BIN_DIRECTORY@ +XKB_COMPILED_DIR = @XKB_COMPILED_DIR@ +XKM_OUTPUT_DIR = @XKM_OUTPUT_DIR@ +XLIB_CFLAGS = @XLIB_CFLAGS@ +XLIB_LIBS = @XLIB_LIBS@ +XNESTMODULES_CFLAGS = @XNESTMODULES_CFLAGS@ +XNESTMODULES_LIBS = @XNESTMODULES_LIBS@ +XNEST_FALSE = @XNEST_FALSE@ +XNEST_LIBS = @XNEST_LIBS@ +XNEST_TRUE = @XNEST_TRUE@ +XORGCFG_DEP_CFLAGS = @XORGCFG_DEP_CFLAGS@ +XORGCFG_DEP_LIBS = @XORGCFG_DEP_LIBS@ +XORGCONFIG_DEP_CFLAGS = @XORGCONFIG_DEP_CFLAGS@ +XORGCONFIG_DEP_LIBS = @XORGCONFIG_DEP_LIBS@ +XORG_BUS_FREEBSDPCI_FALSE = @XORG_BUS_FREEBSDPCI_FALSE@ +XORG_BUS_FREEBSDPCI_TRUE = @XORG_BUS_FREEBSDPCI_TRUE@ +XORG_BUS_IX86PCI_FALSE = @XORG_BUS_IX86PCI_FALSE@ +XORG_BUS_IX86PCI_TRUE = @XORG_BUS_IX86PCI_TRUE@ +XORG_BUS_LINUXPCI_FALSE = @XORG_BUS_LINUXPCI_FALSE@ +XORG_BUS_LINUXPCI_TRUE = @XORG_BUS_LINUXPCI_TRUE@ +XORG_BUS_NETBSDPCI_FALSE = @XORG_BUS_NETBSDPCI_FALSE@ +XORG_BUS_NETBSDPCI_TRUE = @XORG_BUS_NETBSDPCI_TRUE@ +XORG_BUS_PPCPCI_FALSE = @XORG_BUS_PPCPCI_FALSE@ +XORG_BUS_PPCPCI_TRUE = @XORG_BUS_PPCPCI_TRUE@ +XORG_BUS_SPARCPCI_FALSE = @XORG_BUS_SPARCPCI_FALSE@ +XORG_BUS_SPARCPCI_TRUE = @XORG_BUS_SPARCPCI_TRUE@ +XORG_BUS_SPARC_FALSE = @XORG_BUS_SPARC_FALSE@ +XORG_BUS_SPARC_TRUE = @XORG_BUS_SPARC_TRUE@ +XORG_CFLAGS = @XORG_CFLAGS@ +XORG_CORE_LIBS = @XORG_CORE_LIBS@ +XORG_FALSE = @XORG_FALSE@ +XORG_INCS = @XORG_INCS@ +XORG_LIBS = @XORG_LIBS@ +XORG_LOADER_SPARC_FALSE = @XORG_LOADER_SPARC_FALSE@ +XORG_LOADER_SPARC_TRUE = @XORG_LOADER_SPARC_TRUE@ +XORG_OS = @XORG_OS@ +XORG_OS_KBD = @XORG_OS_KBD@ +XORG_OS_SUBDIR = @XORG_OS_SUBDIR@ +XORG_TRUE = @XORG_TRUE@ +XPRINTPROTO_CFLAGS = @XPRINTPROTO_CFLAGS@ +XPRINTPROTO_LIBS = @XPRINTPROTO_LIBS@ +XPRINT_CFLAGS = @XPRINT_CFLAGS@ +XPRINT_FALSE = @XPRINT_FALSE@ +XPRINT_LIBS = @XPRINT_LIBS@ +XPRINT_TRUE = @XPRINT_TRUE@ +XP_USE_FREETYPE_FALSE = @XP_USE_FREETYPE_FALSE@ +XP_USE_FREETYPE_TRUE = @XP_USE_FREETYPE_TRUE@ +XRESEXAMPLES_DEP_CFLAGS = @XRESEXAMPLES_DEP_CFLAGS@ +XRESEXAMPLES_DEP_LIBS = @XRESEXAMPLES_DEP_LIBS@ +XSDLSERVER_FALSE = @XSDLSERVER_FALSE@ +XSDLSERVER_TRUE = @XSDLSERVER_TRUE@ +XSDL_INCS = @XSDL_INCS@ +XSDL_LIBS = @XSDL_LIBS@ +XSERVERCFLAGS_CFLAGS = @XSERVERCFLAGS_CFLAGS@ +XSERVERCFLAGS_LIBS = @XSERVERCFLAGS_LIBS@ +XSERVERLIBS_CFLAGS = @XSERVERLIBS_CFLAGS@ +XSERVERLIBS_LIBS = @XSERVERLIBS_LIBS@ +XSERVER_LIBS = @XSERVER_LIBS@ +XTRAP_FALSE = @XTRAP_FALSE@ +XTRAP_TRUE = @XTRAP_TRUE@ +XTSTEXAMPLES_DEP_CFLAGS = @XTSTEXAMPLES_DEP_CFLAGS@ +XTSTEXAMPLES_DEP_LIBS = @XTSTEXAMPLES_DEP_LIBS@ +XVFB_FALSE = @XVFB_FALSE@ +XVFB_LIBS = @XVFB_LIBS@ +XVFB_TRUE = @XVFB_TRUE@ +XVMC_FALSE = @XVMC_FALSE@ +XVMC_TRUE = @XVMC_TRUE@ +XV_FALSE = @XV_FALSE@ +XV_TRUE = @XV_TRUE@ +XWINMODULES_CFLAGS = @XWINMODULES_CFLAGS@ +XWINMODULES_LIBS = @XWINMODULES_LIBS@ +XWIN_CLIPBOARD_FALSE = @XWIN_CLIPBOARD_FALSE@ +XWIN_CLIPBOARD_TRUE = @XWIN_CLIPBOARD_TRUE@ +XWIN_FALSE = @XWIN_FALSE@ +XWIN_GLX_WINDOWS_FALSE = @XWIN_GLX_WINDOWS_FALSE@ +XWIN_GLX_WINDOWS_TRUE = @XWIN_GLX_WINDOWS_TRUE@ +XWIN_LIBS = @XWIN_LIBS@ +XWIN_MULTIWINDOWEXTWM_FALSE = @XWIN_MULTIWINDOWEXTWM_FALSE@ +XWIN_MULTIWINDOWEXTWM_TRUE = @XWIN_MULTIWINDOWEXTWM_TRUE@ +XWIN_MULTIWINDOW_FALSE = @XWIN_MULTIWINDOW_FALSE@ +XWIN_MULTIWINDOW_TRUE = @XWIN_MULTIWINDOW_TRUE@ +XWIN_NATIVEGDI_FALSE = @XWIN_NATIVEGDI_FALSE@ +XWIN_NATIVEGDI_TRUE = @XWIN_NATIVEGDI_TRUE@ +XWIN_PRIMARYFB_FALSE = @XWIN_PRIMARYFB_FALSE@ +XWIN_PRIMARYFB_TRUE = @XWIN_PRIMARYFB_TRUE@ +XWIN_RANDR_FALSE = @XWIN_RANDR_FALSE@ +XWIN_RANDR_TRUE = @XWIN_RANDR_TRUE@ +XWIN_SERVER_NAME = @XWIN_SERVER_NAME@ +XWIN_SYSTEM_LIBS = @XWIN_SYSTEM_LIBS@ +XWIN_TRUE = @XWIN_TRUE@ +XWIN_XV_FALSE = @XWIN_XV_FALSE@ +XWIN_XV_TRUE = @XWIN_XV_TRUE@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +__XCONFIGFILE__ = @__XCONFIGFILE__@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +driverdir = @driverdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +extdir = @extdir@ +ft_config = @ft_config@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +logdir = @logdir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +moduledir = @moduledir@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sdkdir = @sdkdir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +xglmoduledir = @xglmoduledir@ +xpconfigdir = @xpconfigdir@ +noinst_LTLIBRARIES = libvbo.la +AM_CFLAGS = \ + $(DIX_CFLAGS) \ + -DXFree86Server \ + @GLX_DEFINES@ + +INCLUDES = -I@MESA_SOURCE@/include \ + -I../X \ + -I../glapi \ + -I../main \ + -I../math \ + -I../shader \ + -I../shader/slang \ + -I../shader/slang \ + -I../swrast \ + -I../swrast_setup \ + -I../tnl \ + -I.. \ + -I$(top_srcdir)/hw/xfree86/os-support + +nodist_libvbo_la_SOURCES = vbo_context.c \ + vbo_exec_api.c \ + vbo_exec_array.c \ + vbo_exec.c \ + vbo_exec_draw.c \ + vbo_exec_eval.c \ + vbo_rebase.c \ + vbo_save_api.c \ + vbo_save.c \ + vbo_save_draw.c \ + vbo_save_loopback.c \ + vbo_split.c \ + vbo_split_copy.c \ + vbo_split_inplace.c + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign GL/mesa/vbo/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --foreign GL/mesa/vbo/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libvbo.la: $(libvbo_la_OBJECTS) $(libvbo_la_DEPENDENCIES) + $(LINK) $(libvbo_la_LDFLAGS) $(libvbo_la_OBJECTS) $(libvbo_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vbo_context.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vbo_exec.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vbo_exec_api.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vbo_exec_array.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vbo_exec_draw.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vbo_exec_eval.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vbo_rebase.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vbo_save.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vbo_save_api.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vbo_save_draw.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vbo_save_loopback.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vbo_split.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vbo_split_copy.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vbo_split_inplace.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-libtool distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am \ + uninstall-info-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- xorg-server-1.3.0.0.dfsg.orig/GL/mesa/array_cache/Makefile.in +++ xorg-server-1.3.0.0.dfsg/GL/mesa/array_cache/Makefile.in @@ -113,6 +113,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -191,6 +193,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -303,6 +306,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/GL/mesa/X/Makefile.in +++ xorg-server-1.3.0.0.dfsg/GL/mesa/X/Makefile.in @@ -55,9 +55,9 @@ CONFIG_CLEAN_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libX_la_LIBADD = -am_libX_la_OBJECTS = xf86glx.lo xf86glx_util.lo -nodist_libX_la_OBJECTS = xm_api.lo xm_buffer.lo xm_dd.lo xm_line.lo \ - xm_span.lo xm_tri.lo driverfuncs.lo +am_libX_la_OBJECTS = xf86glx.lo +nodist_libX_la_OBJECTS = xm_api.lo xm_buffer.lo xm_dd.lo xm_image.lo \ + xm_line.lo xm_span.lo xm_tri.lo driverfuncs.lo libX_la_OBJECTS = $(am_libX_la_OBJECTS) $(nodist_libX_la_OBJECTS) DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include depcomp = $(SHELL) $(top_srcdir)/depcomp @@ -115,6 +115,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -193,6 +195,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -305,6 +308,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -535,7 +540,6 @@ noinst_LTLIBRARIES = libX.la INCLUDES = -I@MESA_SOURCE@/include \ -I../X \ - -I../array_cache \ -I../glapi \ -I../main \ -I../math \ @@ -555,18 +559,14 @@ AM_CFLAGS = \ $(DIX_CFLAGS) \ -DXFree86Server \ - @GLX_DEFINES@ \ - -DXFree86Server - -libX_la_SOURCES = xf86glx.c \ - xf86glx_util.c \ - xf86glx_util.h \ - xf86glxint.h + @GLX_DEFINES@ +libX_la_SOURCES = xf86glx.c nodist_libX_la_SOURCES = \ xm_api.c \ xm_buffer.c \ xm_dd.c \ + xm_image.c \ xm_line.c \ xm_span.c \ xm_tri.c \ @@ -625,10 +625,10 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/driverfuncs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xf86glx.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xf86glx_util.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xm_api.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xm_buffer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xm_dd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xm_image.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xm_line.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xm_span.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xm_tri.Plo@am__quote@ --- xorg-server-1.3.0.0.dfsg.orig/GL/mesa/swrast/Makefile.in +++ xorg-server-1.3.0.0.dfsg/GL/mesa/swrast/Makefile.in @@ -56,12 +56,12 @@ LTLIBRARIES = $(noinst_LTLIBRARIES) libswrast_la_LIBADD = nodist_libswrast_la_OBJECTS = s_aaline.lo s_aatriangle.lo s_accum.lo \ - s_alpha.lo s_arbshader.lo s_atifragshader.lo s_bitmap.lo \ - s_blend.lo s_blit.lo s_buffers.lo s_context.lo s_copypix.lo \ - s_depth.lo s_drawpix.lo s_feedback.lo s_fog.lo s_imaging.lo \ - s_lines.lo s_logic.lo s_masking.lo s_nvfragprog.lo s_points.lo \ - s_readpix.lo s_span.lo s_stencil.lo s_texcombine.lo \ - s_texfilter.lo s_texstore.lo s_triangle.lo s_zoom.lo + s_alpha.lo s_atifragshader.lo s_bitmap.lo s_blend.lo s_blit.lo \ + s_buffers.lo s_context.lo s_copypix.lo s_depth.lo s_drawpix.lo \ + s_feedback.lo s_fog.lo s_fragprog.lo s_imaging.lo s_lines.lo \ + s_logic.lo s_masking.lo s_points.lo s_readpix.lo s_span.lo \ + s_stencil.lo s_texcombine.lo s_texfilter.lo s_texstore.lo \ + s_triangle.lo s_zoom.lo libswrast_la_OBJECTS = $(nodist_libswrast_la_OBJECTS) DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include depcomp = $(SHELL) $(top_srcdir)/depcomp @@ -119,6 +119,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -197,6 +199,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -309,6 +312,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -544,7 +549,6 @@ INCLUDES = -I@MESA_SOURCE@/include \ -I../X \ - -I../array_cache \ -I../glapi \ -I../main \ -I../math \ @@ -561,7 +565,6 @@ s_aatriangle.c \ s_accum.c \ s_alpha.c \ - s_arbshader.c \ s_atifragshader.c \ s_bitmap.c \ s_blend.c \ @@ -573,11 +576,11 @@ s_drawpix.c \ s_feedback.c \ s_fog.c \ + s_fragprog.c \ s_imaging.c \ s_lines.c \ s_logic.c \ s_masking.c \ - s_nvfragprog.c \ s_points.c \ s_readpix.c \ s_span.c \ @@ -643,7 +646,6 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_aatriangle.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_accum.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_alpha.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_arbshader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_atifragshader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_bitmap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_blend.Plo@am__quote@ @@ -655,11 +657,11 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_drawpix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_feedback.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_fog.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_fragprog.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_imaging.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_lines.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_logic.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_masking.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_nvfragprog.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_points.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_readpix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_span.Plo@am__quote@ --- xorg-server-1.3.0.0.dfsg.orig/GL/mesa/math/Makefile.in +++ xorg-server-1.3.0.0.dfsg/GL/mesa/math/Makefile.in @@ -115,6 +115,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -193,6 +195,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -305,6 +308,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -540,7 +545,6 @@ INCLUDES = -I@MESA_SOURCE@/include \ -I../X \ - -I../array_cache \ -I../glapi \ -I../main \ -I../math \ --- xorg-server-1.3.0.0.dfsg.orig/GL/mesa/Makefile.in +++ xorg-server-1.3.0.0.dfsg/GL/mesa/Makefile.in @@ -55,9 +55,9 @@ CONFIG_CLEAN_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libGLcore_la_DEPENDENCIES = main/libmain.la math/libmath.la \ - array_cache/libac.la swrast/libswrast.la swrast_setup/libss.la \ - tnl/libtnl.la shader/libshader.la shader/grammar/libgrammar.la \ - shader/slang/libslang.la X/libX.la + swrast/libswrast.la swrast_setup/libss.la tnl/libtnl.la \ + shader/libshader.la shader/grammar/libgrammar.la \ + shader/slang/libslang.la vbo/libvbo.la X/libX.la am_libGLcore_la_OBJECTS = dummy.lo libGLcore_la_OBJECTS = $(am_libGLcore_la_OBJECTS) DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include @@ -123,6 +123,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -201,6 +203,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -313,6 +316,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -540,18 +545,18 @@ target_alias = @target_alias@ xglmoduledir = @xglmoduledir@ xpconfigdir = @xpconfigdir@ -SUBDIRS = main math array_cache swrast swrast_setup tnl shader X glapi +SUBDIRS = main math swrast swrast_setup tnl shader X glapi vbo noinst_LTLIBRARIES = libGLcore.la libGLcore_la_SOURCES = dummy.c libGLcore_la_LIBADD = main/libmain.la \ math/libmath.la \ - array_cache/libac.la \ swrast/libswrast.la \ swrast_setup/libss.la \ tnl/libtnl.la \ shader/libshader.la \ shader/grammar/libgrammar.la \ shader/slang/libslang.la \ + vbo/libvbo.la \ X/libX.la all: all-recursive --- xorg-server-1.3.0.0.dfsg.orig/GL/mesa/shader/grammar/Makefile.in +++ xorg-server-1.3.0.0.dfsg/GL/mesa/shader/grammar/Makefile.in @@ -113,6 +113,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -191,6 +193,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -303,6 +306,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -538,7 +543,6 @@ INCLUDES = -I@MESA_SOURCE@/include \ -I../../X \ - -I../../array_cache \ -I../../glapi \ -I../../main \ -I../../math \ --- xorg-server-1.3.0.0.dfsg.orig/GL/mesa/shader/slang/Makefile.in +++ xorg-server-1.3.0.0.dfsg/GL/mesa/shader/slang/Makefile.in @@ -55,16 +55,14 @@ CONFIG_CLEAN_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libslang_la_LIBADD = -nodist_libslang_la_OBJECTS = slang_analyse.lo \ - slang_assemble_assignment.lo slang_assemble.lo \ - slang_assemble_conditional.lo slang_assemble_constructor.lo \ - slang_assemble_typeinfo.lo slang_compile.lo \ - slang_compile_function.lo slang_compile_operation.lo \ - slang_compile_struct.lo slang_compile_variable.lo \ - slang_execute.lo slang_execute_x86.lo slang_export.lo \ - slang_library_texsample.lo slang_library_noise.lo \ - slang_link.lo slang_preprocess.lo slang_storage.lo \ - slang_utility.lo +nodist_libslang_la_OBJECTS = slang_builtin.lo slang_codegen.lo \ + slang_compile.lo slang_compile_function.lo \ + slang_compile_operation.lo slang_compile_struct.lo \ + slang_compile_variable.lo slang_emit.lo slang_ir.lo \ + slang_label.lo slang_library_noise.lo slang_link.lo \ + slang_log.lo slang_mem.lo slang_preprocess.lo slang_print.lo \ + slang_simplify.lo slang_storage.lo slang_typeinfo.lo \ + slang_utility.lo slang_vartable.lo libslang_la_OBJECTS = $(nodist_libslang_la_OBJECTS) DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include depcomp = $(SHELL) $(top_srcdir)/depcomp @@ -122,6 +120,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -200,6 +200,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -312,6 +313,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -548,7 +551,6 @@ INCLUDES = -I@MESA_SOURCE@/include \ -I../grammar \ -I../../X \ - -I../../array_cache \ -I../../glapi \ -I../../main \ -I../../math \ @@ -559,26 +561,27 @@ -I../.. \ -I$(top_srcdir)/hw/xfree86/os-support -nodist_libslang_la_SOURCES = slang_analyse.c \ - slang_assemble_assignment.c \ - slang_assemble.c \ - slang_assemble_conditional.c \ - slang_assemble_constructor.c \ - slang_assemble_typeinfo.c \ +nodist_libslang_la_SOURCES = slang_builtin.c \ + slang_codegen.c \ slang_compile.c \ slang_compile_function.c \ slang_compile_operation.c \ slang_compile_struct.c \ slang_compile_variable.c \ - slang_execute.c \ - slang_execute_x86.c \ - slang_export.c \ - slang_library_texsample.c \ + slang_emit.c \ + slang_ir.c \ + slang_label.c \ slang_library_noise.c \ slang_link.c \ + slang_log.c \ + slang_mem.c \ slang_preprocess.c \ + slang_print.c \ + slang_simplify.c \ slang_storage.c \ - slang_utility.c + slang_typeinfo.c \ + slang_utility.c \ + slang_vartable.c all: all-am @@ -631,26 +634,27 @@ distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slang_analyse.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slang_assemble.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slang_assemble_assignment.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slang_assemble_conditional.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slang_assemble_constructor.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slang_assemble_typeinfo.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slang_builtin.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slang_codegen.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slang_compile.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slang_compile_function.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slang_compile_operation.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slang_compile_struct.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slang_compile_variable.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slang_execute.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slang_execute_x86.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slang_export.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slang_emit.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slang_ir.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slang_label.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slang_library_noise.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slang_library_texsample.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slang_link.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slang_log.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slang_mem.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slang_preprocess.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slang_print.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slang_simplify.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slang_storage.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slang_typeinfo.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slang_utility.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slang_vartable.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ --- xorg-server-1.3.0.0.dfsg.orig/GL/mesa/shader/Makefile.in +++ xorg-server-1.3.0.0.dfsg/GL/mesa/shader/Makefile.in @@ -56,9 +56,10 @@ LTLIBRARIES = $(noinst_LTLIBRARIES) libshader_la_LIBADD = nodist_libshader_la_OBJECTS = arbprogparse.lo arbprogram.lo \ - atifragshader.lo nvfragparse.lo nvprogram.lo nvvertexec.lo \ - nvvertparse.lo program.lo shaderobjects.lo \ - shaderobjects_3dlabs.lo + atifragshader.lo nvfragparse.lo nvprogram.lo nvvertparse.lo \ + prog_debug.lo prog_execute.lo prog_instruction.lo \ + prog_parameter.lo prog_print.lo program.lo programopt.lo \ + prog_statevars.lo shader_api.lo libshader_la_OBJECTS = $(nodist_libshader_la_OBJECTS) DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include depcomp = $(SHELL) $(top_srcdir)/depcomp @@ -123,6 +124,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -201,6 +204,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -313,6 +317,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -549,7 +555,6 @@ INCLUDES = -I@MESA_SOURCE@/include \ -I../X \ - -I../array_cache \ -I../glapi \ -I../main \ -I../math \ @@ -568,11 +573,16 @@ atifragshader.c \ nvfragparse.c \ nvprogram.c \ - nvvertexec.c \ - nvvertparse.c \ + nvvertparse.c \ + prog_debug.c \ + prog_execute.c \ + prog_instruction.c \ + prog_parameter.c \ + prog_print.c \ program.c \ - shaderobjects.c \ - shaderobjects_3dlabs.c + programopt.c \ + prog_statevars.c \ + shader_api.c all: all-recursive @@ -630,11 +640,16 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atifragshader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nvfragparse.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nvprogram.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nvvertexec.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nvvertparse.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prog_debug.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prog_execute.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prog_instruction.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prog_parameter.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prog_print.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prog_statevars.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/program.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shaderobjects.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shaderobjects_3dlabs.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/programopt.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shader_api.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ --- xorg-server-1.3.0.0.dfsg.orig/cfb/Makefile.in +++ xorg-server-1.3.0.0.dfsg/cfb/Makefile.in @@ -138,6 +138,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -216,6 +218,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -328,6 +331,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/fb/Makefile.in +++ xorg-server-1.3.0.0.dfsg/fb/Makefile.in @@ -135,6 +135,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -213,6 +215,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -325,6 +328,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/Xext/Makefile.in +++ xorg-server-1.3.0.0.dfsg/Xext/Makefile.in @@ -219,6 +219,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -297,6 +299,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -409,6 +412,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -662,7 +667,6 @@ $(am__append_17) $(am__append_19) # Extra configuration files ship with some extensions -SERVERCONFIGdir = $(libdir)/xserver SERVERCONFIG_DATA = $(am__append_8) # Optional sources included if extension enabled by configure.ac rules --- xorg-server-1.3.0.0.dfsg.orig/miext/rootless/Makefile.in +++ xorg-server-1.3.0.0.dfsg/miext/rootless/Makefile.in @@ -95,6 +95,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -173,6 +175,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -285,6 +288,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/miext/damage/Makefile.in +++ xorg-server-1.3.0.0.dfsg/miext/damage/Makefile.in @@ -125,6 +125,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -203,6 +205,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -315,6 +318,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/miext/shadow/Makefile.in +++ xorg-server-1.3.0.0.dfsg/miext/shadow/Makefile.in @@ -130,6 +130,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -208,6 +210,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -320,6 +323,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/miext/Makefile.in +++ xorg-server-1.3.0.0.dfsg/miext/Makefile.in @@ -104,6 +104,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -182,6 +184,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -294,6 +297,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/miext/cw/Makefile.in +++ xorg-server-1.3.0.0.dfsg/miext/cw/Makefile.in @@ -113,6 +113,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -191,6 +193,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -303,6 +306,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/exa/Makefile.in +++ xorg-server-1.3.0.0.dfsg/exa/Makefile.in @@ -126,6 +126,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -204,6 +206,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -316,6 +319,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ --- xorg-server-1.3.0.0.dfsg.orig/record/Makefile.in +++ xorg-server-1.3.0.0.dfsg/record/Makefile.in @@ -113,6 +113,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -191,6 +193,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -303,6 +306,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/config.sub +++ xorg-server-1.3.0.0.dfsg/config.sub @@ -1,9 +1,10 @@ #! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. +# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, +# Inc. -timestamp='2006-02-23' +timestamp='2007-01-18' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software @@ -240,15 +241,16 @@ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ - | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ - | fr30 | frv \ + | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ - | m32r | m32rle | m68000 | m68k | m88k | maxq | mb | microblaze | mcore \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ @@ -274,21 +276,19 @@ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ - | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ + | score \ + | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b \ - | strongarm \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ - | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \ + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; - m32c) - basic_machine=$basic_machine-unknown - ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown @@ -318,18 +318,18 @@ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* \ + | avr-* | avr32-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ - | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ - | m32r-* | m32rle-* \ + | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ @@ -358,23 +358,21 @@ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ - | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa-* \ | ymp-* \ | z8k-*) ;; - m32c-*) - ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) @@ -912,6 +910,10 @@ sb1el) basic_machine=mipsisa64sb1el-unknown ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; sei) basic_machine=mips-sei os=-seiux @@ -923,6 +925,9 @@ basic_machine=sh-hitachi os=-hms ;; + sh5el) + basic_machine=sh5le-unknown + ;; sh64) basic_machine=sh64-unknown ;; @@ -1128,7 +1133,7 @@ sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; - sparc | sparcv8 | sparcv9 | sparcv9b) + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) @@ -1217,7 +1222,7 @@ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos*) + | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) @@ -1369,6 +1374,12 @@ # system, and we'll never get to this point. case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; *-acorn) os=-riscix1.2 ;; @@ -1378,9 +1389,9 @@ arm*-semi) os=-aout ;; - c4x-* | tic4x-*) - os=-coff - ;; + c4x-* | tic4x-*) + os=-coff + ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 @@ -1406,6 +1417,9 @@ m68*-cisco) os=-aout ;; + mep-*) + os=-elf + ;; mips*-cisco) os=-elf ;; --- xorg-server-1.3.0.0.dfsg.orig/XTrap/Makefile.in +++ xorg-server-1.3.0.0.dfsg/XTrap/Makefile.in @@ -114,6 +114,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -192,6 +194,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -304,6 +307,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/render/Makefile.in +++ xorg-server-1.3.0.0.dfsg/render/Makefile.in @@ -128,6 +128,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -206,6 +208,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -318,6 +321,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/afb/Makefile.in +++ xorg-server-1.3.0.0.dfsg/afb/Makefile.in @@ -133,6 +133,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -211,6 +213,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -323,6 +326,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/doc/Makefile.in +++ xorg-server-1.3.0.0.dfsg/doc/Makefile.in @@ -110,6 +110,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -188,6 +190,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -300,6 +303,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = sed +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ @@ -535,7 +540,6 @@ appman_DATA = $(appman_PRE:man.pre=@APP_MAN_SUFFIX@) BUILT_SOURCES = $(appman_PROCESSED) CLEANFILES = $(appman_PROCESSED) $(appman_DATA) -SED = sed SUFFIXES = .pre .man .man.pre # Translate XCOMM into pound sign with sed, rather than passing -DXCOMM=XCOMM --- xorg-server-1.3.0.0.dfsg.orig/autogen.sh +++ xorg-server-1.3.0.0.dfsg/autogen.sh @@ -0,0 +1,12 @@ +#! /bin/sh + +srcdir=`dirname $0` +test -z "$srcdir" && srcdir=. + +ORIGDIR=`pwd` +cd $srcdir + +autoreconf -v --install || exit 1 +cd $ORIGDIR || exit $? + +$srcdir/configure --enable-maintainer-mode "$@" --- xorg-server-1.3.0.0.dfsg.orig/Xi/Makefile.in +++ xorg-server-1.3.0.0.dfsg/Xi/Makefile.in @@ -120,6 +120,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -198,6 +200,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -310,6 +313,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/include/do-not-use-config.h.in +++ xorg-server-1.3.0.0.dfsg/include/do-not-use-config.h.in @@ -315,6 +315,9 @@ /* Name of the period field in struct kbd_repeat */ #undef LNX_KBD_PERIOD_NAME +/* Support os-specific local connections */ +#undef LOCALCONN + /* Support MIT Misc extension */ #undef MITMISC @@ -366,6 +369,15 @@ /* Define to the version of this package. */ #undef PACKAGE_VERSION +/* Major version of this package */ +#undef PACKAGE_VERSION_MAJOR + +/* Minor version of this package */ +#undef PACKAGE_VERSION_MINOR + +/* Patch version of this package */ +#undef PACKAGE_VERSION_PATCHLEVEL + /* Internal define for Xinerama */ #undef PANORAMIX @@ -408,6 +420,9 @@ /* Support Secure RPC ("SUN-DES-1") authentication for X11 clients */ #undef SECURE_RPC +/* Server config path */ +#undef SERVERCONFIGdir + /* Use a lock to prevent multiple servers on a display */ #undef SERVER_LOCK --- xorg-server-1.3.0.0.dfsg.orig/include/Makefile.in +++ xorg-server-1.3.0.0.dfsg/include/Makefile.in @@ -116,6 +116,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -194,6 +196,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -306,6 +309,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/configure +++ xorg-server-1.3.0.0.dfsg/configure @@ -857,6 +857,7 @@ host_cpu host_vendor host_os +SED GREP EGREP ECHO @@ -898,6 +899,7 @@ FBDEVHW_FALSE FREEBSD_KLDLOAD_TRUE FREEBSD_KLDLOAD_FALSE +GLX_ARCH_DEFINES ALPHA_VIDEO_TRUE ALPHA_VIDEO_FALSE ARM_VIDEO_TRUE @@ -934,6 +936,8 @@ MAKE_HTML INSTALL_LIBXF86CONFIG_TRUE INSTALL_LIBXF86CONFIG_FALSE +BUILD_TYPE1_TRUE +BUILD_TYPE1_FALSE XV_TRUE XV_FALSE XVMC_TRUE @@ -1012,6 +1016,7 @@ USE_RGB_BUILTIN_FALSE COMPILEDDEFAULTFONTPATH RGB_DB +SERVERCONFIGdir BASE_FONT_PATH DRI_DRIVER_PATH VENDOR_STRING @@ -1894,6 +1899,7 @@ --enable-builddocs Build docs (default: disabled) --enable-install-libxf86config Install libxf86config (default: disabled) + --disable-type1 Build the type1 font module (default: enabled) --disable-composite Build Composite extension (default: enabled) --disable-shm Build SHM extension (default: enabled) --disable-xres Build XRes extension (default: enabled) @@ -1993,6 +1999,8 @@ --with-xkb-output=PATH Path to XKB output dir (default: ${datadir}/X11/xkb/compiled) --with-rgb-path=PATH Path to RGB database (default: ${datadir}/X11/rgb) + --with-serverconfig-path=PATH + Path to server config (default: ${libdir}/xserver) --with-dri-driver-path=PATH Path to DRI drivers (default: ${libdir}/dri) --with-freetype-config=PROG @@ -4429,12 +4437,13 @@ test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + if { test -f "$as_dir/$lt_ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$lt_ac_prog$ac_exec_ext"; }; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done +IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris @@ -4469,6 +4478,7 @@ fi SED=$lt_cv_path_SED + { echo "$as_me:$LINENO: result: $SED" >&5 echo "${ECHO_T}$SED" >&6; } @@ -4819,8 +4829,8 @@ echo "${ECHO_T}$lt_cv_path_NM" >&6; } NM="$lt_cv_path_NM" -{ echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5 -echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6; } +{ echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5 +echo $ECHO_N "checking how to recognize dependent libraries... $ECHO_C" >&6; } if test "${lt_cv_deplibs_check_method+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else @@ -4861,9 +4871,15 @@ mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump'. - lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi ;; darwin* | rhapsody*) @@ -4908,7 +4924,7 @@ esac ;; -interix3*) +interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; @@ -4958,6 +4974,10 @@ lt_cv_deplibs_check_method=pass_all ;; +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + solaris*) lt_cv_deplibs_check_method=pass_all ;; @@ -5045,7 +5065,7 @@ ;; *-*-irix6*) # Find out which ABI we are using. - echo '#line 5048 "configure"' > conftest.$ac_ext + echo '#line 5068 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -5080,7 +5100,8 @@ rm -rf conftest* ;; -x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 @@ -5091,6 +5112,9 @@ case `/usr/bin/file conftest.o` in *32-bit*) case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; @@ -5107,6 +5131,9 @@ ;; *64-bit*) case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; @@ -7190,24 +7217,27 @@ fi ;; *) - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - while (test "X"`$SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \ + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + while (test "X"`$SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \ = "XX$teststring") >/dev/null 2>&1 && - new_result=`expr "X$teststring" : ".*" 2>&1` && - lt_cv_sys_max_cmd_len=$new_result && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - teststring= - # Add a significant safety factor because C++ compilers can tack on massive - # amounts of additional arguments before passing them to the linker. - # It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + new_result=`expr "X$teststring" : ".*" 2>&1` && + lt_cv_sys_max_cmd_len=$new_result && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + teststring= + # Add a significant safety factor because C++ compilers can tack on massive + # amounts of additional arguments before passing them to the linker. + # It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi ;; esac @@ -7224,6 +7254,7 @@ + # Check for command to grab the raw symbol name followed by C symbol from nm. { echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6; } @@ -7812,7 +7843,7 @@ test -z "$ac_objext" && ac_objext=o # Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= @@ -8012,10 +8043,10 @@ objext=$objext # Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;\n" +lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}\n' +lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. @@ -8030,13 +8061,13 @@ # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext -printf "$lt_simple_compile_test_code" >conftest.$ac_ext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* ac_outfile=conftest.$ac_objext -printf "$lt_simple_link_test_code" >conftest.$ac_ext +echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm conftest* @@ -8056,7 +8087,7 @@ else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext - printf "$lt_simple_compile_test_code" > conftest.$ac_ext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. @@ -8067,11 +8098,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:8070: $lt_compile\"" >&5) + (eval echo "\"\$as_me:8101: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:8074: \$? = $ac_status" >&5 + echo "$as_me:8105: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -8122,13 +8153,15 @@ lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; - beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; - mingw* | pw32* | os2*) + mingw* | cygwin* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; @@ -8138,7 +8171,7 @@ lt_prog_compiler_pic='-fno-common' ;; - interix3*) + interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; @@ -8196,7 +8229,7 @@ esac ;; - mingw* | pw32* | os2*) + mingw* | cygwin* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' @@ -8248,6 +8281,22 @@ # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Sun\ F*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + esac + ;; esac ;; @@ -8257,6 +8306,10 @@ lt_prog_compiler_static='-non_shared' ;; + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' @@ -8324,7 +8377,7 @@ else lt_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext - printf "$lt_simple_compile_test_code" > conftest.$ac_ext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. @@ -8335,11 +8388,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:8338: $lt_compile\"" >&5) + (eval echo "\"\$as_me:8391: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:8342: \$? = $ac_status" >&5 + echo "$as_me:8395: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -8388,7 +8441,7 @@ lt_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - printf "$lt_simple_link_test_code" > conftest.$ac_ext + echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings @@ -8428,7 +8481,7 @@ mkdir conftest cd conftest mkdir out - printf "$lt_simple_compile_test_code" > conftest.$ac_ext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or @@ -8439,11 +8492,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:8442: $lt_compile\"" >&5) + (eval echo "\"\$as_me:8495: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:8446: \$? = $ac_status" >&5 + echo "$as_me:8499: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -8635,7 +8688,7 @@ allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' @@ -8653,7 +8706,7 @@ fi ;; - interix3*) + interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' @@ -8668,7 +8721,7 @@ archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; - linux* | k*bsd*-gnu) + gnu* | linux* | k*bsd*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_addflag= case $cc_basename,$host_cpu in @@ -8686,13 +8739,22 @@ ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; esac - archive_cmds='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + *) + tmp_sharedflag='-shared' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test $supports_anon_versioning = yes; then archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi link_all_deplibs=no else @@ -8852,7 +8914,7 @@ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 - hardcode_direct=yes + : else # We have old collect2 hardcode_direct=unsupported @@ -8926,11 +8988,18 @@ } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 @@ -8985,11 +9054,18 @@ } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 @@ -9043,7 +9119,7 @@ # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds='true' # FIXME: Should let the user specify the lib program. - old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs' + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes=yes ;; @@ -9085,10 +9161,10 @@ case $cc_basename in xlc*) output_verbose_link_cmd='echo' - archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) @@ -9250,24 +9326,28 @@ ;; openbsd*) - hardcode_direct=yes - hardcode_shlibpath_var=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-R$libdir' - ;; - *) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac + ld_shlibs=no fi ;; @@ -9326,17 +9406,16 @@ case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) - # The compiler driver will combine linker options so we - # cannot just pass the convience library names through - # without $wl, iff we do not link with $LD. - # Luckily, gcc supports the same syntax we need for Sun Studio. + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) - case $wlarc in - '') - whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; - *) - whole_archive_flag_spec='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; - esac ;; + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; esac link_all_deplibs=yes ;; @@ -9393,7 +9472,7 @@ fi ;; - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no @@ -9470,7 +9549,7 @@ { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } $rm conftest* - printf "$lt_simple_compile_test_code" > conftest.$ac_ext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 @@ -9528,17 +9607,55 @@ version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" + if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$lt_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e 's/;/ /g'` else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`echo $lt_tmp_lt_search_path_spec | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + sys_lib_search_path_spec=`echo $lt_search_path_spec` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi @@ -9698,12 +9815,8 @@ shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. - if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` - else - sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' - fi + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; @@ -9757,7 +9870,7 @@ shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; - freebsd*) # from 4.6 on + *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; @@ -9820,7 +9933,7 @@ postinstall_cmds='chmod 555 $lib' ;; -interix3*) +interix[3-9]*) version_type=linux need_lib_prefix=no need_version=no @@ -9891,7 +10004,7 @@ # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi @@ -9997,6 +10110,10 @@ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; +rdos*) + dynamic_linker=no + ;; + solaris*) version_type=linux need_lib_prefix=no @@ -10150,6 +10267,7 @@ darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" + old_striplib="$STRIP -S" { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } else @@ -10736,7 +10854,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext <conftest.$ac_ext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* ac_outfile=conftest.$ac_objext -printf "$lt_simple_link_test_code" >conftest.$ac_ext +echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm conftest* @@ -11855,7 +11974,7 @@ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 - hardcode_direct_CXX=yes + : else # We have old collect2 hardcode_direct_CXX=unsupported @@ -11929,11 +12048,18 @@ } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 @@ -11989,11 +12115,18 @@ } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 @@ -12112,10 +12245,10 @@ case $cc_basename in xlc*) output_verbose_link_cmd='echo' - archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) @@ -12198,9 +12331,7 @@ hardcode_libdir_separator_CXX=: case $host_cpu in - hppa*64*|ia64*) - hardcode_libdir_flag_spec_ld_CXX='+b $libdir' - ;; + hppa*64*|ia64*) ;; *) export_dynamic_flag_spec_CXX='${wl}-E' ;; @@ -12268,7 +12399,7 @@ ;; esac ;; - interix3*) + interix[3-9]*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' @@ -12388,6 +12519,29 @@ # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + hardcode_libdir_flag_spec_CXX='-R$libdir' + whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; esac ;; lynxos*) @@ -12426,16 +12580,20 @@ ld_shlibs_CXX=no ;; openbsd*) - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - export_dynamic_flag_spec_CXX='${wl}-E' - whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + if test -f /usr/libexec/ld.so; then + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + export_dynamic_flag_spec_CXX='${wl}-E' + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd='echo' + else + ld_shlibs_CXX=no fi - output_verbose_link_cmd='echo' ;; osf3*) case $cc_basename in @@ -12597,15 +12755,10 @@ case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) - # The C++ compiler is used as linker so we must use $wl - # flag to pass the commands to the underlying system - # linker. We must also pass each convience library through - # to the system linker between allextract/defaultextract. - # The C++ compiler will combine linker options so we - # cannot just pass the convience library names through - # without $wl. + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) - whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' + whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_CXX=yes @@ -12652,6 +12805,12 @@ fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac fi ;; esac @@ -12843,7 +13002,7 @@ # PORTME: override above test on systems where it is broken case $host_os in -interix3*) +interix[3-9]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= @@ -12851,13 +13010,46 @@ postdeps_CXX= ;; +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + # + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + solaris*) case $cc_basename in CC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. - postdeps_CXX='-lCstd -lCrun' + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi ;; esac ;; @@ -12894,12 +13086,14 @@ # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; - beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; - mingw* | os2* | pw32*) + mingw* | cygwin* | os2* | pw32*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) @@ -12911,7 +13105,7 @@ # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; - interix3*) + interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; @@ -13047,6 +13241,14 @@ lt_prog_compiler_static_CXX='-non_shared' ;; *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + esac ;; esac ;; @@ -13161,7 +13363,7 @@ else lt_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext - printf "$lt_simple_compile_test_code" > conftest.$ac_ext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. @@ -13172,11 +13374,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:13175: $lt_compile\"" >&5) + (eval echo "\"\$as_me:13377: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:13179: \$? = $ac_status" >&5 + echo "$as_me:13381: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -13225,7 +13427,7 @@ lt_prog_compiler_static_works_CXX=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - printf "$lt_simple_link_test_code" > conftest.$ac_ext + echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings @@ -13265,7 +13467,7 @@ mkdir conftest cd conftest mkdir out - printf "$lt_simple_compile_test_code" > conftest.$ac_ext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or @@ -13276,11 +13478,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:13279: $lt_compile\"" >&5) + (eval echo "\"\$as_me:13481: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:13283: \$? = $ac_status" >&5 + echo "$as_me:13485: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -13346,7 +13548,7 @@ export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw*) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([^ ]*\) [^ ]*/\1 DATA/;/^I /d;/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' ;; linux* | k*bsd*-gnu) link_all_deplibs_CXX=no @@ -13380,7 +13582,7 @@ { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } $rm conftest* - printf "$lt_simple_compile_test_code" > conftest.$ac_ext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 @@ -13438,20 +13640,7 @@ version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" -if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi + need_lib_prefix=unknown hardcode_into_libs=no @@ -13608,12 +13797,7 @@ shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. - if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` - else - sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' - fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; @@ -13667,7 +13851,7 @@ shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; - freebsd*) # from 4.6 on + *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; @@ -13730,7 +13914,7 @@ postinstall_cmds='chmod 555 $lib' ;; -interix3*) +interix[3-9]*) version_type=linux need_lib_prefix=no need_version=no @@ -13801,7 +13985,7 @@ # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi @@ -13907,6 +14091,10 @@ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; +rdos*) + dynamic_linker=no + ;; + solaris*) version_type=linux need_lib_prefix=no @@ -14101,6 +14289,7 @@ module_cmds_CXX \ module_expsym_cmds_CXX \ lt_cv_prog_compiler_c_o_CXX \ + fix_srcfile_path_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX; do @@ -14421,7 +14610,7 @@ sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path="$fix_srcfile_path_CXX" +fix_srcfile_path=$lt_fix_srcfile_path # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_CXX @@ -14512,10 +14701,17 @@ objext_F77=$objext # Code to be used in simple compile tests -lt_simple_compile_test_code=" subroutine t\n return\n end\n" +lt_simple_compile_test_code="\ + subroutine t + return + end +" # Code to be used in simple link tests -lt_simple_link_test_code=" program t\n end\n" +lt_simple_link_test_code="\ + program t + end +" # ltmain only uses $CC for tagged configurations so make sure $CC is set. @@ -14531,13 +14727,13 @@ # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext -printf "$lt_simple_compile_test_code" >conftest.$ac_ext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* ac_outfile=conftest.$ac_objext -printf "$lt_simple_link_test_code" >conftest.$ac_ext +echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm conftest* @@ -14624,13 +14820,15 @@ lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' ;; - beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; - mingw* | pw32* | os2*) + mingw* | cygwin* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries lt_prog_compiler_pic_F77='-DDLL_EXPORT' ;; @@ -14640,7 +14838,7 @@ lt_prog_compiler_pic_F77='-fno-common' ;; - interix3*) + interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; @@ -14698,7 +14896,7 @@ esac ;; - mingw* | pw32* | os2*) + mingw* | cygwin* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_F77='-DDLL_EXPORT' @@ -14750,6 +14948,22 @@ # All Alpha code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + lt_prog_compiler_wl_F77='-Wl,' + ;; + *Sun\ F*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + lt_prog_compiler_wl_F77='' + ;; + esac + ;; esac ;; @@ -14759,6 +14973,10 @@ lt_prog_compiler_static_F77='-non_shared' ;; + rdos*) + lt_prog_compiler_static_F77='-non_shared' + ;; + solaris*) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' @@ -14826,7 +15044,7 @@ else lt_prog_compiler_pic_works_F77=no ac_outfile=conftest.$ac_objext - printf "$lt_simple_compile_test_code" > conftest.$ac_ext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_F77" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. @@ -14837,11 +15055,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:14840: $lt_compile\"" >&5) + (eval echo "\"\$as_me:15058: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:14844: \$? = $ac_status" >&5 + echo "$as_me:15062: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -14890,7 +15108,7 @@ lt_prog_compiler_static_works_F77=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - printf "$lt_simple_link_test_code" > conftest.$ac_ext + echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings @@ -14930,7 +15148,7 @@ mkdir conftest cd conftest mkdir out - printf "$lt_simple_compile_test_code" > conftest.$ac_ext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or @@ -14941,11 +15159,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:14944: $lt_compile\"" >&5) + (eval echo "\"\$as_me:15162: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:14948: \$? = $ac_status" >&5 + echo "$as_me:15166: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -15137,7 +15355,7 @@ allow_undefined_flag_F77=unsupported always_export_symbols_F77=no enable_shared_with_static_runtimes_F77=yes - export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' @@ -15155,7 +15373,7 @@ fi ;; - interix3*) + interix[3-9]*) hardcode_direct_F77=no hardcode_shlibpath_var_F77=no hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' @@ -15170,7 +15388,7 @@ archive_expsym_cmds_F77='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; - linux* | k*bsd*-gnu) + gnu* | linux* | k*bsd*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_addflag= case $cc_basename,$host_cpu in @@ -15188,13 +15406,22 @@ ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; esac - archive_cmds_F77='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec_F77='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + *) + tmp_sharedflag='-shared' ;; + esac + archive_cmds_F77='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test $supports_anon_versioning = yes; then archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi link_all_deplibs_F77=no else @@ -15354,7 +15581,7 @@ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 - hardcode_direct_F77=yes + : else # We have old collect2 hardcode_direct_F77=unsupported @@ -15418,11 +15645,18 @@ } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 @@ -15467,11 +15701,18 @@ } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 @@ -15525,7 +15766,7 @@ # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds_F77='true' # FIXME: Should let the user specify the lib program. - old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs' + old_archive_cmds_F77='lib -OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path_F77='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes_F77=yes ;; @@ -15567,10 +15808,10 @@ case $cc_basename in xlc*) output_verbose_link_cmd='echo' - archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) @@ -15732,24 +15973,28 @@ ;; openbsd*) - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' - export_dynamic_flag_spec_F77='${wl}-E' + if test -f /usr/libexec/ld.so; then + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' + export_dynamic_flag_spec_F77='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_F77='-R$libdir' + ;; + *) + archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' + ;; + esac + fi else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_F77='-R$libdir' - ;; - *) - archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' - ;; - esac + ld_shlibs_F77=no fi ;; @@ -15808,17 +16053,16 @@ case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) - # The compiler driver will combine linker options so we - # cannot just pass the convience library names through - # without $wl, iff we do not link with $LD. - # Luckily, gcc supports the same syntax we need for Sun Studio. + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) - case $wlarc in - '') - whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;; - *) - whole_archive_flag_spec_F77='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; - esac ;; + if test "$GCC" = yes; then + whole_archive_flag_spec_F77='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' + fi + ;; esac link_all_deplibs_F77=yes ;; @@ -15875,7 +16119,7 @@ fi ;; - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_F77='${wl}-z,text' archive_cmds_need_lc_F77=no hardcode_shlibpath_var_F77=no @@ -15952,7 +16196,7 @@ { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } $rm conftest* - printf "$lt_simple_compile_test_code" > conftest.$ac_ext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 @@ -16010,20 +16254,7 @@ version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" -if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi + need_lib_prefix=unknown hardcode_into_libs=no @@ -16180,12 +16411,7 @@ shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. - if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` - else - sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' - fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; @@ -16239,7 +16465,7 @@ shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; - freebsd*) # from 4.6 on + *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; @@ -16302,7 +16528,7 @@ postinstall_cmds='chmod 555 $lib' ;; -interix3*) +interix[3-9]*) version_type=linux need_lib_prefix=no need_version=no @@ -16373,7 +16599,7 @@ # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi @@ -16479,6 +16705,10 @@ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; +rdos*) + dynamic_linker=no + ;; + solaris*) version_type=linux need_lib_prefix=no @@ -16673,6 +16903,7 @@ module_cmds_F77 \ module_expsym_cmds_F77 \ lt_cv_prog_compiler_c_o_F77 \ + fix_srcfile_path_F77 \ exclude_expsyms_F77 \ include_expsyms_F77; do @@ -16993,7 +17224,7 @@ sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path="$fix_srcfile_path_F77" +fix_srcfile_path=$lt_fix_srcfile_path # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_F77 @@ -17051,10 +17282,10 @@ objext_GCJ=$objext # Code to be used in simple compile tests -lt_simple_compile_test_code="class foo {}\n" +lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests -lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\n' +lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. @@ -17070,13 +17301,13 @@ # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext -printf "$lt_simple_compile_test_code" >conftest.$ac_ext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* ac_outfile=conftest.$ac_objext -printf "$lt_simple_link_test_code" >conftest.$ac_ext +echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm conftest* @@ -17117,7 +17348,7 @@ else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext - printf "$lt_simple_compile_test_code" > conftest.$ac_ext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. @@ -17128,11 +17359,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:17131: $lt_compile\"" >&5) + (eval echo "\"\$as_me:17362: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:17135: \$? = $ac_status" >&5 + echo "$as_me:17366: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -17183,13 +17414,15 @@ lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4' ;; - beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; - mingw* | pw32* | os2*) + mingw* | cygwin* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' ;; @@ -17199,7 +17432,7 @@ lt_prog_compiler_pic_GCJ='-fno-common' ;; - interix3*) + interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; @@ -17257,7 +17490,7 @@ esac ;; - mingw* | pw32* | os2*) + mingw* | cygwin* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' @@ -17309,6 +17542,22 @@ # All Alpha code is PIC. lt_prog_compiler_static_GCJ='-non_shared' ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-Bstatic' + lt_prog_compiler_wl_GCJ='-Wl,' + ;; + *Sun\ F*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-Bstatic' + lt_prog_compiler_wl_GCJ='' + ;; + esac + ;; esac ;; @@ -17318,6 +17567,10 @@ lt_prog_compiler_static_GCJ='-non_shared' ;; + rdos*) + lt_prog_compiler_static_GCJ='-non_shared' + ;; + solaris*) lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' @@ -17385,7 +17638,7 @@ else lt_prog_compiler_pic_works_GCJ=no ac_outfile=conftest.$ac_objext - printf "$lt_simple_compile_test_code" > conftest.$ac_ext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_GCJ" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. @@ -17396,11 +17649,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:17399: $lt_compile\"" >&5) + (eval echo "\"\$as_me:17652: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:17403: \$? = $ac_status" >&5 + echo "$as_me:17656: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -17449,7 +17702,7 @@ lt_prog_compiler_static_works_GCJ=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - printf "$lt_simple_link_test_code" > conftest.$ac_ext + echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings @@ -17489,7 +17742,7 @@ mkdir conftest cd conftest mkdir out - printf "$lt_simple_compile_test_code" > conftest.$ac_ext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or @@ -17500,11 +17753,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:17503: $lt_compile\"" >&5) + (eval echo "\"\$as_me:17756: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:17507: \$? = $ac_status" >&5 + echo "$as_me:17760: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -17696,7 +17949,7 @@ allow_undefined_flag_GCJ=unsupported always_export_symbols_GCJ=no enable_shared_with_static_runtimes_GCJ=yes - export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' @@ -17714,7 +17967,7 @@ fi ;; - interix3*) + interix[3-9]*) hardcode_direct_GCJ=no hardcode_shlibpath_var_GCJ=no hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' @@ -17729,7 +17982,7 @@ archive_expsym_cmds_GCJ='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; - linux* | k*bsd*-gnu) + gnu* | linux* | k*bsd*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_addflag= case $cc_basename,$host_cpu in @@ -17747,13 +18000,22 @@ ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; esac - archive_cmds_GCJ='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec_GCJ='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + *) + tmp_sharedflag='-shared' ;; + esac + archive_cmds_GCJ='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test $supports_anon_versioning = yes; then archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi link_all_deplibs_GCJ=no else @@ -17913,7 +18175,7 @@ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 - hardcode_direct_GCJ=yes + : else # We have old collect2 hardcode_direct_GCJ=unsupported @@ -17987,11 +18249,18 @@ } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 @@ -18046,11 +18315,18 @@ } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 @@ -18104,7 +18380,7 @@ # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds_GCJ='true' # FIXME: Should let the user specify the lib program. - old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs' + old_archive_cmds_GCJ='lib -OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path_GCJ='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes_GCJ=yes ;; @@ -18146,10 +18422,10 @@ case $cc_basename in xlc*) output_verbose_link_cmd='echo' - archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) @@ -18311,24 +18587,28 @@ ;; openbsd*) - hardcode_direct_GCJ=yes - hardcode_shlibpath_var_GCJ=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' - export_dynamic_flag_spec_GCJ='${wl}-E' + if test -f /usr/libexec/ld.so; then + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' + export_dynamic_flag_spec_GCJ='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_GCJ='-R$libdir' + ;; + *) + archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' + ;; + esac + fi else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_GCJ='-R$libdir' - ;; - *) - archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' - ;; - esac + ld_shlibs_GCJ=no fi ;; @@ -18387,17 +18667,16 @@ case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) - # The compiler driver will combine linker options so we - # cannot just pass the convience library names through - # without $wl, iff we do not link with $LD. - # Luckily, gcc supports the same syntax we need for Sun Studio. + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) - case $wlarc in - '') - whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;; - *) - whole_archive_flag_spec_GCJ='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; - esac ;; + if test "$GCC" = yes; then + whole_archive_flag_spec_GCJ='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' + fi + ;; esac link_all_deplibs_GCJ=yes ;; @@ -18454,7 +18733,7 @@ fi ;; - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_GCJ='${wl}-z,text' archive_cmds_need_lc_GCJ=no hardcode_shlibpath_var_GCJ=no @@ -18531,7 +18810,7 @@ { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } $rm conftest* - printf "$lt_simple_compile_test_code" > conftest.$ac_ext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 @@ -18589,20 +18868,7 @@ version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" -if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi + need_lib_prefix=unknown hardcode_into_libs=no @@ -18759,12 +19025,7 @@ shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. - if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` - else - sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' - fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; @@ -18818,7 +19079,7 @@ shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; - freebsd*) # from 4.6 on + *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; @@ -18881,7 +19142,7 @@ postinstall_cmds='chmod 555 $lib' ;; -interix3*) +interix[3-9]*) version_type=linux need_lib_prefix=no need_version=no @@ -18952,7 +19213,7 @@ # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi @@ -19058,6 +19319,10 @@ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; +rdos*) + dynamic_linker=no + ;; + solaris*) version_type=linux need_lib_prefix=no @@ -19252,6 +19517,7 @@ module_cmds_GCJ \ module_expsym_cmds_GCJ \ lt_cv_prog_compiler_c_o_GCJ \ + fix_srcfile_path_GCJ \ exclude_expsyms_GCJ \ include_expsyms_GCJ; do @@ -19572,7 +19838,7 @@ sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path="$fix_srcfile_path_GCJ" +fix_srcfile_path=$lt_fix_srcfile_path # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_GCJ @@ -19629,7 +19895,7 @@ objext_RC=$objext # Code to be used in simple compile tests -lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n' +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" @@ -19648,13 +19914,13 @@ # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext -printf "$lt_simple_compile_test_code" >conftest.$ac_ext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* ac_outfile=conftest.$ac_objext -printf "$lt_simple_link_test_code" >conftest.$ac_ext +echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm conftest* @@ -19732,6 +19998,7 @@ module_cmds_RC \ module_expsym_cmds_RC \ lt_cv_prog_compiler_c_o_RC \ + fix_srcfile_path_RC \ exclude_expsyms_RC \ include_expsyms_RC; do @@ -20052,7 +20319,7 @@ sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path="$fix_srcfile_path_RC" +fix_srcfile_path=$lt_fix_srcfile_path # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_RC @@ -24754,6 +25021,7 @@ _ACEOF ;; esac + GLX_ARCH_DEFINES="-D__GLX_ALIGN64 -mieee" ;; arm*) ARM_VIDEO=yes @@ -24791,6 +25059,7 @@ xorg_loader_sparcmuldiv="yes" SPARC64_VIDEO=yes BSD_ARCH_SOURCES="sparc64_video.c ioperm_noop.c" + GLX_ARCH_DEFINES="-D__GLX_ALIGN64" ;; x86_64*|amd64*) use_x86_asm="yes" @@ -24816,11 +25085,19 @@ SYS_LIBS=-lamd64 ;; esac + GLX_ARCH_DEFINES="-D__GLX_ALIGN64" + ;; + ia64*) + GLX_ARCH_DEFINES="-D__GLX_ALIGN64" + ;; + s390*) + GLX_ARCH_DEFINES="-D__GLX_ALIGN64" ;; esac + if test "x$ALPHA_VIDEO" = xyes; then ALPHA_VIDEO_TRUE= ALPHA_VIDEO_FALSE='#' @@ -25186,6 +25463,14 @@ fi +# Check whether --with-serverconfig-path was given. +if test "${with_serverconfig_path+set}" = set; then + withval=$with_serverconfig_path; SERVERCONFIG="$withval" +else + SERVERCONFIG="${libdir}/xserver" +fi + + # Check whether --with-dri-driver-path was given. if test "${with_dri_driver_path+set}" = set; then withval=$with_dri_driver_path; DRI_DRIVER_PATH="$withval" @@ -25207,6 +25492,13 @@ INSTALL_LIBXF86CONFIG=no fi +# Check whether --enable-type1 was given. +if test "${enable_type1+set}" = set; then + enableval=$enable_type1; TYPE1=$enableval +else + TYPE1=yes +fi + # Check whether --enable-composite was given. if test "${enable_composite+set}" = set; then @@ -25580,6 +25872,8 @@ # Transport selection macro from xtrans.m4 + + # Check whether --enable-unix-transport was given. if test "${enable_unix_transport+set}" = set; then enableval=$enable_unix_transport; UNIXCONN=$enableval @@ -26004,6 +26298,29 @@ fi + case $host_os in + solaris*|sco*|sysv4*) localdef="yes" ;; + *) localdef="no" ;; + esac + # Check whether --enable-local-transport was given. +if test "${enable_local_transport+set}" = set; then + enableval=$enable_local_transport; LOCALCONN=$enableval +else + LOCALCONN=$localdef +fi + + { echo "$as_me:$LINENO: checking if Xtrans should support os-specific local connections" >&5 +echo $ECHO_N "checking if Xtrans should support os-specific local connections... $ECHO_C" >&6; } + { echo "$as_me:$LINENO: result: $LOCALCONN" >&5 +echo "${ECHO_T}$LOCALCONN" >&6; } + if test "$LOCALCONN" = "yes"; then + +cat >>confdefs.h <<\_ACEOF +#define LOCALCONN 1 +_ACEOF + + fi + # Secure RPC detection macro from xtrans.m4 @@ -26411,9 +26728,12 @@ -as_ac_File=`echo "ac_cv_file_$prefix/share/X11/sgml/defs.ent" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $prefix/share/X11/sgml/defs.ent" >&5 -echo $ECHO_N "checking for $prefix/share/X11/sgml/defs.ent... $ECHO_C" >&6; } +XORG_SGML_PATH=$prefix/share/sgml +HAVE_DEFS_ENT= + +as_ac_File=`echo "ac_cv_file_$XORG_SGML_PATH/X11/defs.ent" | $as_tr_sh` +{ echo "$as_me:$LINENO: checking for $XORG_SGML_PATH/X11/defs.ent" >&5 +echo $ECHO_N "checking for $XORG_SGML_PATH/X11/defs.ent... $ECHO_C" >&6; } if { as_var=$as_ac_File; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else @@ -26421,7 +26741,7 @@ { { echo "$as_me:$LINENO: error: cannot check for file existence when cross compiling" >&5 echo "$as_me: error: cannot check for file existence when cross compiling" >&2;} { (exit 1); exit 1; }; } -if test -r "$prefix/share/X11/sgml/defs.ent"; then +if test -r "$XORG_SGML_PATH/X11/defs.ent"; then eval "$as_ac_File=yes" else eval "$as_ac_File=no" @@ -26431,10 +26751,7 @@ { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_File'}'` = yes; then - DEFS_ENT_PATH=$prefix/share/X11/sgml -else - DEFS_ENT_PATH= - + HAVE_DEFS_ENT=yes fi @@ -26522,7 +26839,7 @@ { echo "$as_me:$LINENO: checking Whether to build documentation" >&5 echo $ECHO_N "checking Whether to build documentation... $ECHO_C" >&6; } -if test x$DEFS_ENT_PATH != x && test x$LINUXDOC != x ; then +if test x$HAVE_DEFS_ENT != x && test x$LINUXDOC != x ; then BUILDDOC=yes else BUILDDOC=no @@ -26545,7 +26862,7 @@ { echo "$as_me:$LINENO: checking Whether to build pdf documentation" >&5 echo $ECHO_N "checking Whether to build pdf documentation... $ECHO_C" >&6; } -if test x$PS2PDF != x ; then +if test x$PS2PDF != x && test x$BUILD_PDFDOC != xno; then BUILDPDFDOC=yes else BUILDPDFDOC=no @@ -26565,10 +26882,10 @@ { echo "$as_me:$LINENO: result: $BUILDPDFDOC" >&5 echo "${ECHO_T}$BUILDPDFDOC" >&6; } -MAKE_TEXT="SGML_SEARCH_PATH=$DEFS_ENT_PATH GROFF_NO_SGR=y $LINUXDOC -B txt" -MAKE_PS="SGML_SEARCH_PATH=$DEFS_ENT_PATH $LINUXDOC -B latex --papersize=letter --output=ps" +MAKE_TEXT="SGML_SEARCH_PATH=$XORG_SGML_PATH GROFF_NO_SGR=y $LINUXDOC -B txt" +MAKE_PS="SGML_SEARCH_PATH=$XORG_SGML_PATH $LINUXDOC -B latex --papersize=letter --output=ps" MAKE_PDF="$PS2PDF" -MAKE_HTML="SGML_SEARCH_PATH=$DEFS_ENT_PATH $LINUXDOC -B html --split=0" +MAKE_HTML="SGML_SEARCH_PATH=$XORG_SGML_PATH $LINUXDOC -B html --split=0" @@ -26587,6 +26904,17 @@ fi + + +if test "x$TYPE1" = xyes; then + BUILD_TYPE1_TRUE= + BUILD_TYPE1_FALSE='#' +else + BUILD_TYPE1_TRUE='#' + BUILD_TYPE1_FALSE= +fi + + XEXT_INC='-I$(top_srcdir)/Xext' XEXT_LIB='$(top_builddir)/Xext/libXext.la' XEXTXORG_LIB='$(top_builddir)/Xext/libXextbuiltin.la' @@ -26869,7 +27197,7 @@ and XLIB_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&5 echo "$as_me: error: The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full @@ -26879,7 +27207,7 @@ and XLIB_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else @@ -26980,7 +27308,7 @@ and GL_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&5 echo "$as_me: error: The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full @@ -26990,7 +27318,7 @@ and GL_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else @@ -27167,7 +27495,7 @@ and DRIPROTO_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&5 echo "$as_me: error: The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full @@ -27177,7 +27505,7 @@ and DRIPROTO_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else @@ -27278,7 +27606,7 @@ and LIBDRM_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&5 echo "$as_me: error: The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full @@ -27288,7 +27616,7 @@ and LIBDRM_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else @@ -27389,7 +27717,7 @@ and GL_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&5 echo "$as_me: error: The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full @@ -27399,7 +27727,7 @@ and GL_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else @@ -28236,6 +28564,23 @@ exec_prefix_NONE= test "x$prefix" = xNONE && prefix_NONE=yes && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix_NONE=yes && exec_prefix=$prefix + eval ac_define_dir="\"$SERVERCONFIG\"" + eval ac_define_dir="\"$ac_define_dir\"" + SERVERCONFIGdir="$ac_define_dir" + + +cat >>confdefs.h <<_ACEOF +#define SERVERCONFIGdir "$ac_define_dir" +_ACEOF + + test "$prefix_NONE" && prefix=NONE + test "$exec_prefix_NONE" && exec_prefix=NONE + + + prefix_NONE= + exec_prefix_NONE= + test "x$prefix" = xNONE && prefix_NONE=yes && prefix=$ac_default_prefix + test "x$exec_prefix" = xNONE && exec_prefix_NONE=yes && exec_prefix=$prefix eval ac_define_dir="\"$FONTDIR\"" eval ac_define_dir="\"$ac_define_dir\"" BASE_FONT_PATH="$ac_define_dir" @@ -28490,7 +28835,7 @@ and XSERVERCFLAGS_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&5 echo "$as_me: error: The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full @@ -28500,7 +28845,7 @@ and XSERVERCFLAGS_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else @@ -28601,7 +28946,7 @@ and XSERVERLIBS_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&5 echo "$as_me: error: The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full @@ -28611,7 +28956,7 @@ and XSERVERLIBS_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else @@ -29376,7 +29721,7 @@ and GL_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&5 echo "$as_me: error: The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full @@ -29386,7 +29731,7 @@ and GL_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else @@ -29488,7 +29833,7 @@ and XDMXCONFIG_DEP_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&5 echo "$as_me: error: The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full @@ -29498,7 +29843,7 @@ and XDMXCONFIG_DEP_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else @@ -29601,7 +29946,7 @@ and DMXEXAMPLES_DEP_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&5 echo "$as_me: error: The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full @@ -29611,7 +29956,7 @@ and DMXEXAMPLES_DEP_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else @@ -29713,7 +30058,7 @@ and DMXXMUEXAMPLES_DEP_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&5 echo "$as_me: error: The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full @@ -29723,7 +30068,7 @@ and DMXXMUEXAMPLES_DEP_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else @@ -29825,7 +30170,7 @@ and DMXXIEXAMPLES_DEP_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&5 echo "$as_me: error: The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full @@ -29835,7 +30180,7 @@ and DMXXIEXAMPLES_DEP_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else @@ -29937,7 +30282,7 @@ and XTSTEXAMPLES_DEP_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&5 echo "$as_me: error: The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full @@ -29947,7 +30292,7 @@ and XTSTEXAMPLES_DEP_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else @@ -30049,7 +30394,7 @@ and XRESEXAMPLES_DEP_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&5 echo "$as_me: error: The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full @@ -30059,7 +30404,7 @@ and XRESEXAMPLES_DEP_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else @@ -30161,7 +30506,7 @@ and X11EXAMPLES_DEP_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&5 echo "$as_me: error: The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full @@ -30171,7 +30516,7 @@ and X11EXAMPLES_DEP_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else @@ -31667,7 +32012,7 @@ and XPRINT_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&5 echo "$as_me: error: The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full @@ -31677,7 +32022,7 @@ and XPRINT_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else @@ -32046,7 +32391,7 @@ and XWINMODULES_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&5 echo "$as_me: error: The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full @@ -32056,7 +32401,7 @@ and XWINMODULES_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else @@ -32170,7 +32515,7 @@ and XWINMODULES_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&5 echo "$as_me: error: The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full @@ -32180,7 +32525,7 @@ and XWINMODULES_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else @@ -32534,11 +32879,15 @@ done if test "$ac_cv_header_sys_vm86_h" = yes; then - + case $host_os in + kfreebsd*-gnu) kdrivevesa=no ;; + *) cat >>confdefs.h <<\_ACEOF #define KDRIVEVESA 1 _ACEOF + kdrivevesa=yes;; + esac fi @@ -33061,7 +33410,7 @@ -if test x"$ac_cv_header_sys_vm86_h" = xyes; then +if test x"$kdrivevesa" = xyes; then KDRIVEVESA_TRUE= KDRIVEVESA_FALSE='#' else @@ -33515,7 +33864,7 @@ and XORGCONFIG_DEP_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&5 echo "$as_me: error: The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full @@ -33525,7 +33874,7 @@ and XORGCONFIG_DEP_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else @@ -33637,7 +33986,7 @@ and XORGCFG_DEP_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&5 echo "$as_me: error: The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full @@ -33647,7 +33996,7 @@ and XORGCFG_DEP_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. -To get pkg-config, see . +To get pkg-config, see . See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else @@ -33887,75 +34236,47 @@ if test x$APP_MAN_SUFFIX = x ; then - case $host_os in - linux*) APP_MAN_SUFFIX=1x ;; - *) APP_MAN_SUFFIX=1 ;; - esac + APP_MAN_SUFFIX=1 fi if test x$APP_MAN_DIR = x ; then - case $host_os in - linux*) APP_MAN_DIR='$(mandir)/man1' ;; - *) APP_MAN_DIR='$(mandir)/man$(APP_MAN_SUFFIX)' ;; - esac + APP_MAN_DIR='$(mandir)/man$(APP_MAN_SUFFIX)' fi if test x$LIB_MAN_SUFFIX = x ; then - case $host_os in - linux*) LIB_MAN_SUFFIX=3x ;; - *) LIB_MAN_SUFFIX=3 ;; - esac + LIB_MAN_SUFFIX=3 fi if test x$LIB_MAN_DIR = x ; then - case $host_os in - linux*) LIB_MAN_DIR='$(mandir)/man3' ;; - *) LIB_MAN_DIR='$(mandir)/man$(LIB_MAN_SUFFIX)' ;; - esac + LIB_MAN_DIR='$(mandir)/man$(LIB_MAN_SUFFIX)' fi if test x$FILE_MAN_SUFFIX = x ; then case $host_os in - linux*) FILE_MAN_SUFFIX=5x ;; solaris*) FILE_MAN_SUFFIX=4 ;; *) FILE_MAN_SUFFIX=5 ;; esac fi if test x$FILE_MAN_DIR = x ; then - case $host_os in - linux*) FILE_MAN_DIR='$(mandir)/man5' ;; - *) FILE_MAN_DIR='$(mandir)/man$(FILE_MAN_SUFFIX)' ;; - esac + FILE_MAN_DIR='$(mandir)/man$(FILE_MAN_SUFFIX)' fi -# In Imake's linux.cf, the misc man suffix & dir was only changed for -# LinuxDebian, not other Linuxes, so we leave it unchanged here if test x$MISC_MAN_SUFFIX = x ; then case $host_os in -# linux*) MISC_MAN_SUFFIX=7x ;; solaris*) MISC_MAN_SUFFIX=5 ;; *) MISC_MAN_SUFFIX=7 ;; esac fi if test x$MISC_MAN_DIR = x ; then - case $host_os in -# linux*) MISC_MAN_DIR='$(mandir)/man7' ;; - *) MISC_MAN_DIR='$(mandir)/man$(MISC_MAN_SUFFIX)' ;; - esac + MISC_MAN_DIR='$(mandir)/man$(MISC_MAN_SUFFIX)' fi -# In Imake's linux.cf, the driver man suffix & dir was only changed for -# LinuxDebian, not other Linuxes, so we leave it unchanged here if test x$DRIVER_MAN_SUFFIX = x ; then case $host_os in -# linux*) DRIVER_MAN_SUFFIX=4x ;; solaris*) DRIVER_MAN_SUFFIX=7 ;; *) DRIVER_MAN_SUFFIX=4 ;; esac fi if test x$DRIVER_MAN_DIR = x ; then - case $host_os in -# linux*) DRIVER_MAN_DIR='$(mandir)/man4' ;; - *) DRIVER_MAN_DIR='$(mandir)/man$(DRIVER_MAN_SUFFIX)' ;; - esac + DRIVER_MAN_DIR='$(mandir)/man$(DRIVER_MAN_SUFFIX)' fi if test x$ADMIN_MAN_SUFFIX = x ; then @@ -34000,8 +34321,31 @@ echo "$as_me: Building with package name set to $PACKAGE" >&6;} fi +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION_MAJOR `echo $PACKAGE_VERSION | cut -d . -f 1` +_ACEOF + + PVM=`echo $PACKAGE_VERSION | cut -d . -f 2` + if test "x$PVM" = "x"; then + PVM="0" + fi + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION_MINOR $PVM +_ACEOF + + PVP=`echo $PACKAGE_VERSION | cut -d . -f 3` + if test "x$PVP" = "x"; then + PVP="0" + fi + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION_PATCHLEVEL $PVP +_ACEOF -ac_config_files="$ac_config_files Makefile GL/Makefile GL/glx/Makefile GL/mesa/Makefile GL/mesa/array_cache/Makefile GL/mesa/glapi/Makefile GL/mesa/main/Makefile GL/mesa/math/Makefile GL/mesa/shader/Makefile GL/mesa/shader/grammar/Makefile GL/mesa/shader/slang/Makefile GL/mesa/swrast/Makefile GL/mesa/swrast_setup/Makefile GL/mesa/tnl/Makefile GL/mesa/X/Makefile include/Makefile afb/Makefile composite/Makefile damageext/Makefile dbe/Makefile dix/Makefile doc/Makefile fb/Makefile record/Makefile XTrap/Makefile mfb/Makefile cfb/Makefile cfb32/Makefile mi/Makefile miext/Makefile miext/damage/Makefile miext/shadow/Makefile miext/cw/Makefile miext/rootless/Makefile os/Makefile randr/Makefile render/Makefile xkb/Makefile Xext/Makefile Xi/Makefile xfixes/Makefile exa/Makefile hw/Makefile hw/xfree86/Makefile hw/xfree86/common/Makefile hw/xfree86/common/xf86Build.h hw/xfree86/ddc/Makefile hw/xfree86/dixmods/Makefile hw/xfree86/dixmods/extmod/Makefile hw/xfree86/doc/Makefile hw/xfree86/doc/devel/Makefile hw/xfree86/doc/man/Makefile hw/xfree86/doc/sgml/Makefile hw/xfree86/dri/Makefile hw/xfree86/dummylib/Makefile hw/xfree86/exa/Makefile hw/xfree86/fbdevhw/Makefile hw/xfree86/i2c/Makefile hw/xfree86/int10/Makefile hw/xfree86/loader/Makefile hw/xfree86/modes/Makefile hw/xfree86/os-support/Makefile hw/xfree86/os-support/bsd/Makefile hw/xfree86/os-support/bus/Makefile hw/xfree86/os-support/hurd/Makefile hw/xfree86/os-support/misc/Makefile hw/xfree86/os-support/linux/Makefile hw/xfree86/os-support/lynxos/Makefile hw/xfree86/os-support/sco/Makefile hw/xfree86/os-support/solaris/Makefile hw/xfree86/os-support/sysv/Makefile hw/xfree86/os-support/usl/Makefile hw/xfree86/parser/Makefile hw/xfree86/rac/Makefile hw/xfree86/ramdac/Makefile hw/xfree86/scanpci/Makefile hw/xfree86/shadowfb/Makefile hw/xfree86/vbe/Makefile hw/xfree86/vgahw/Makefile hw/xfree86/x86emu/Makefile hw/xfree86/xaa/Makefile hw/xfree86/xf1bpp/Makefile hw/xfree86/xf4bpp/Makefile hw/xfree86/xf8_16bpp/Makefile hw/xfree86/xf8_32bpp/Makefile hw/xfree86/utils/Makefile hw/xfree86/utils/cvt/Makefile hw/xfree86/utils/gtf/Makefile hw/xfree86/utils/ioport/Makefile hw/xfree86/utils/kbd_mode/Makefile hw/xfree86/utils/pcitweak/Makefile hw/xfree86/utils/scanpci/Makefile hw/xfree86/utils/xorgcfg/Makefile hw/xfree86/utils/xorgconfig/Makefile hw/dmx/config/Makefile hw/dmx/doc/Makefile hw/dmx/examples/Makefile hw/dmx/input/Makefile hw/dmx/glxProxy/Makefile hw/dmx/Makefile hw/vfb/Makefile hw/xgl/Makefile hw/xgl/egl/Makefile hw/xgl/egl/module/Makefile hw/xgl/glx/Makefile hw/xgl/glx/module/Makefile hw/xgl/glxext/Makefile hw/xgl/glxext/module/Makefile hw/xnest/Makefile hw/xwin/Makefile hw/darwin/Makefile hw/kdrive/Makefile hw/kdrive/ati/Makefile hw/kdrive/chips/Makefile hw/kdrive/ephyr/Makefile hw/kdrive/epson/Makefile hw/kdrive/fake/Makefile hw/kdrive/fbdev/Makefile hw/kdrive/i810/Makefile hw/kdrive/linux/Makefile hw/kdrive/mach64/Makefile hw/kdrive/mga/Makefile hw/kdrive/neomagic/Makefile hw/kdrive/nvidia/Makefile hw/kdrive/pm2/Makefile hw/kdrive/r128/Makefile hw/kdrive/sdl/Makefile hw/kdrive/sis300/Makefile hw/kdrive/smi/Makefile hw/kdrive/src/Makefile hw/kdrive/vesa/Makefile hw/kdrive/via/Makefile hw/xprint/Makefile hw/xprint/doc/Makefile hw/xprint/pcl/Makefile hw/xprint/pcl-mono/Makefile hw/xprint/raster/Makefile hw/xprint/ps/Makefile hw/xprint/etc/Makefile hw/xprint/etc/Xsession.d/Makefile hw/xprint/etc/init.d/Makefile hw/xprint/etc/profile.d/Makefile hw/xprint/config/Makefile hw/xprint/config/C/print/attributes/Makefile hw/xprint/config/C/print/ddx-config/Makefile hw/xprint/config/C/print/ddx-config/raster/Makefile hw/xprint/config/C/print/models/CANONBJ10E-GS/Makefile hw/xprint/config/C/print/models/PSdefault/fonts/Makefile hw/xprint/config/C/print/models/PSdefault/Makefile hw/xprint/config/C/print/models/PSspooldir/Makefile hw/xprint/config/C/print/models/SPSPARC2/Makefile hw/xprint/config/C/print/models/SPSPARC2/fonts/Makefile hw/xprint/config/C/print/models/GSdefault/Makefile hw/xprint/config/C/print/models/HPLJ4050-PS/Makefile hw/xprint/config/C/print/models/HPLJ4050-PS/fonts/Makefile hw/xprint/config/C/print/models/Makefile hw/xprint/config/C/print/models/PS2PDFspooldir-GS/Makefile hw/xprint/config/C/print/models/CANONC3200-PS/Makefile hw/xprint/config/C/print/models/CANONC3200-PS/fonts/Makefile hw/xprint/config/C/print/models/HPLJ4family/fonts/Makefile hw/xprint/config/C/print/models/HPLJ4family/Makefile hw/xprint/config/C/print/models/HPDJ1600C/Makefile hw/xprint/config/C/print/models/HPDJ1600C/fonts/Makefile hw/xprint/config/C/print/Makefile hw/xprint/config/C/Makefile hw/xprint/config/en_US/print/attributes/Makefile hw/xprint/config/en_US/print/Makefile hw/xprint/config/en_US/Makefile xorg-server.pc" + + +ac_config_files="$ac_config_files Makefile GL/Makefile GL/glx/Makefile GL/mesa/Makefile GL/mesa/array_cache/Makefile GL/mesa/glapi/Makefile GL/mesa/main/Makefile GL/mesa/math/Makefile GL/mesa/shader/Makefile GL/mesa/shader/grammar/Makefile GL/mesa/shader/slang/Makefile GL/mesa/swrast/Makefile GL/mesa/swrast_setup/Makefile GL/mesa/tnl/Makefile GL/mesa/vbo/Makefile GL/mesa/X/Makefile include/Makefile afb/Makefile composite/Makefile damageext/Makefile dbe/Makefile dix/Makefile doc/Makefile fb/Makefile record/Makefile XTrap/Makefile mfb/Makefile cfb/Makefile cfb32/Makefile mi/Makefile miext/Makefile miext/damage/Makefile miext/shadow/Makefile miext/cw/Makefile miext/rootless/Makefile os/Makefile randr/Makefile render/Makefile xkb/Makefile Xext/Makefile Xi/Makefile xfixes/Makefile exa/Makefile hw/Makefile hw/xfree86/Makefile hw/xfree86/common/Makefile hw/xfree86/common/xf86Build.h hw/xfree86/ddc/Makefile hw/xfree86/dixmods/Makefile hw/xfree86/dixmods/extmod/Makefile hw/xfree86/doc/Makefile hw/xfree86/doc/devel/Makefile hw/xfree86/doc/man/Makefile hw/xfree86/doc/sgml/Makefile hw/xfree86/dri/Makefile hw/xfree86/dummylib/Makefile hw/xfree86/exa/Makefile hw/xfree86/fbdevhw/Makefile hw/xfree86/i2c/Makefile hw/xfree86/int10/Makefile hw/xfree86/loader/Makefile hw/xfree86/modes/Makefile hw/xfree86/os-support/Makefile hw/xfree86/os-support/bsd/Makefile hw/xfree86/os-support/bus/Makefile hw/xfree86/os-support/hurd/Makefile hw/xfree86/os-support/misc/Makefile hw/xfree86/os-support/linux/Makefile hw/xfree86/os-support/lynxos/Makefile hw/xfree86/os-support/sco/Makefile hw/xfree86/os-support/solaris/Makefile hw/xfree86/os-support/sysv/Makefile hw/xfree86/os-support/usl/Makefile hw/xfree86/parser/Makefile hw/xfree86/rac/Makefile hw/xfree86/ramdac/Makefile hw/xfree86/scanpci/Makefile hw/xfree86/shadowfb/Makefile hw/xfree86/vbe/Makefile hw/xfree86/vgahw/Makefile hw/xfree86/x86emu/Makefile hw/xfree86/xaa/Makefile hw/xfree86/xf1bpp/Makefile hw/xfree86/xf4bpp/Makefile hw/xfree86/xf8_16bpp/Makefile hw/xfree86/xf8_32bpp/Makefile hw/xfree86/utils/Makefile hw/xfree86/utils/cvt/Makefile hw/xfree86/utils/gtf/Makefile hw/xfree86/utils/ioport/Makefile hw/xfree86/utils/kbd_mode/Makefile hw/xfree86/utils/pcitweak/Makefile hw/xfree86/utils/scanpci/Makefile hw/xfree86/utils/xorgcfg/Makefile hw/xfree86/utils/xorgconfig/Makefile hw/dmx/config/Makefile hw/dmx/doc/Makefile hw/dmx/examples/Makefile hw/dmx/input/Makefile hw/dmx/glxProxy/Makefile hw/dmx/Makefile hw/vfb/Makefile hw/xgl/Makefile hw/xgl/egl/Makefile hw/xgl/egl/module/Makefile hw/xgl/glx/Makefile hw/xgl/glx/module/Makefile hw/xgl/glxext/Makefile hw/xgl/glxext/module/Makefile hw/xnest/Makefile hw/xwin/Makefile hw/darwin/Makefile hw/kdrive/Makefile hw/kdrive/ati/Makefile hw/kdrive/chips/Makefile hw/kdrive/ephyr/Makefile hw/kdrive/epson/Makefile hw/kdrive/fake/Makefile hw/kdrive/fbdev/Makefile hw/kdrive/i810/Makefile hw/kdrive/linux/Makefile hw/kdrive/mach64/Makefile hw/kdrive/mga/Makefile hw/kdrive/neomagic/Makefile hw/kdrive/nvidia/Makefile hw/kdrive/pm2/Makefile hw/kdrive/r128/Makefile hw/kdrive/sdl/Makefile hw/kdrive/sis300/Makefile hw/kdrive/smi/Makefile hw/kdrive/src/Makefile hw/kdrive/vesa/Makefile hw/kdrive/via/Makefile hw/xprint/Makefile hw/xprint/doc/Makefile hw/xprint/pcl/Makefile hw/xprint/pcl-mono/Makefile hw/xprint/raster/Makefile hw/xprint/ps/Makefile hw/xprint/etc/Makefile hw/xprint/etc/Xsession.d/Makefile hw/xprint/etc/init.d/Makefile hw/xprint/etc/profile.d/Makefile hw/xprint/config/Makefile hw/xprint/config/C/print/attributes/Makefile hw/xprint/config/C/print/ddx-config/Makefile hw/xprint/config/C/print/ddx-config/raster/Makefile hw/xprint/config/C/print/models/CANONBJ10E-GS/Makefile hw/xprint/config/C/print/models/PSdefault/fonts/Makefile hw/xprint/config/C/print/models/PSdefault/Makefile hw/xprint/config/C/print/models/PSspooldir/Makefile hw/xprint/config/C/print/models/SPSPARC2/Makefile hw/xprint/config/C/print/models/SPSPARC2/fonts/Makefile hw/xprint/config/C/print/models/GSdefault/Makefile hw/xprint/config/C/print/models/HPLJ4050-PS/Makefile hw/xprint/config/C/print/models/HPLJ4050-PS/fonts/Makefile hw/xprint/config/C/print/models/Makefile hw/xprint/config/C/print/models/PS2PDFspooldir-GS/Makefile hw/xprint/config/C/print/models/CANONC3200-PS/Makefile hw/xprint/config/C/print/models/CANONC3200-PS/fonts/Makefile hw/xprint/config/C/print/models/HPLJ4family/fonts/Makefile hw/xprint/config/C/print/models/HPLJ4family/Makefile hw/xprint/config/C/print/models/HPDJ1600C/Makefile hw/xprint/config/C/print/models/HPDJ1600C/fonts/Makefile hw/xprint/config/C/print/Makefile hw/xprint/config/C/Makefile hw/xprint/config/en_US/print/attributes/Makefile hw/xprint/config/en_US/print/Makefile hw/xprint/config/en_US/Makefile xorg-server.pc" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -34274,6 +34618,13 @@ Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi +if test -z "${BUILD_TYPE1_TRUE}" && test -z "${BUILD_TYPE1_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"BUILD_TYPE1\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"BUILD_TYPE1\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi if test -z "${XV_TRUE}" && test -z "${XV_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"XV\" was never defined. Usually this means the macro was only invoked conditionally." >&5 @@ -35323,6 +35674,7 @@ "GL/mesa/swrast/Makefile") CONFIG_FILES="$CONFIG_FILES GL/mesa/swrast/Makefile" ;; "GL/mesa/swrast_setup/Makefile") CONFIG_FILES="$CONFIG_FILES GL/mesa/swrast_setup/Makefile" ;; "GL/mesa/tnl/Makefile") CONFIG_FILES="$CONFIG_FILES GL/mesa/tnl/Makefile" ;; + "GL/mesa/vbo/Makefile") CONFIG_FILES="$CONFIG_FILES GL/mesa/vbo/Makefile" ;; "GL/mesa/X/Makefile") CONFIG_FILES="$CONFIG_FILES GL/mesa/X/Makefile" ;; "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; "afb/Makefile") CONFIG_FILES="$CONFIG_FILES afb/Makefile" ;; @@ -35628,6 +35980,7 @@ host_cpu!$host_cpu$ac_delim host_vendor!$host_vendor$ac_delim host_os!$host_os$ac_delim +SED!$SED$ac_delim GREP!$GREP$ac_delim EGREP!$EGREP$ac_delim ECHO!$ECHO$ac_delim @@ -35636,7 +35989,6 @@ DLLTOOL!$DLLTOOL$ac_delim AS!$AS$ac_delim OBJDUMP!$OBJDUMP$ac_delim -CPP!$CPP$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then @@ -35678,6 +36030,7 @@ ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF +CPP!$CPP$ac_delim CXX!$CXX$ac_delim CXXFLAGS!$CXXFLAGS$ac_delim ac_ct_CXX!$ac_ct_CXX$ac_delim @@ -35710,6 +36063,7 @@ FBDEVHW_FALSE!$FBDEVHW_FALSE$ac_delim FREEBSD_KLDLOAD_TRUE!$FREEBSD_KLDLOAD_TRUE$ac_delim FREEBSD_KLDLOAD_FALSE!$FREEBSD_KLDLOAD_FALSE$ac_delim +GLX_ARCH_DEFINES!$GLX_ARCH_DEFINES$ac_delim ALPHA_VIDEO_TRUE!$ALPHA_VIDEO_TRUE$ac_delim ALPHA_VIDEO_FALSE!$ALPHA_VIDEO_FALSE$ac_delim ARM_VIDEO_TRUE!$ARM_VIDEO_TRUE$ac_delim @@ -35746,6 +36100,8 @@ MAKE_HTML!$MAKE_HTML$ac_delim INSTALL_LIBXF86CONFIG_TRUE!$INSTALL_LIBXF86CONFIG_TRUE$ac_delim INSTALL_LIBXF86CONFIG_FALSE!$INSTALL_LIBXF86CONFIG_FALSE$ac_delim +BUILD_TYPE1_TRUE!$BUILD_TYPE1_TRUE$ac_delim +BUILD_TYPE1_FALSE!$BUILD_TYPE1_FALSE$ac_delim XV_TRUE!$XV_TRUE$ac_delim XV_FALSE!$XV_FALSE$ac_delim XVMC_TRUE!$XVMC_TRUE$ac_delim @@ -35771,10 +36127,6 @@ GLX_TRUE!$GLX_TRUE$ac_delim GLX_FALSE!$GLX_FALSE$ac_delim MESA_SOURCE!$MESA_SOURCE$ac_delim -AIGLX_TRUE!$AIGLX_TRUE$ac_delim -AIGLX_FALSE!$AIGLX_FALSE$ac_delim -GLX_DEFINES!$GLX_DEFINES$ac_delim -DRI_TRUE!$DRI_TRUE$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then @@ -35816,6 +36168,10 @@ ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF +AIGLX_TRUE!$AIGLX_TRUE$ac_delim +AIGLX_FALSE!$AIGLX_FALSE$ac_delim +GLX_DEFINES!$GLX_DEFINES$ac_delim +DRI_TRUE!$DRI_TRUE$ac_delim DRI_FALSE!$DRI_FALSE$ac_delim DRIPROTO_CFLAGS!$DRIPROTO_CFLAGS$ac_delim DRIPROTO_LIBS!$DRIPROTO_LIBS$ac_delim @@ -35865,6 +36221,7 @@ USE_RGB_BUILTIN_FALSE!$USE_RGB_BUILTIN_FALSE$ac_delim COMPILEDDEFAULTFONTPATH!$COMPILEDDEFAULTFONTPATH$ac_delim RGB_DB!$RGB_DB$ac_delim +SERVERCONFIGdir!$SERVERCONFIGdir$ac_delim BASE_FONT_PATH!$BASE_FONT_PATH$ac_delim DRI_DRIVER_PATH!$DRI_DRIVER_PATH$ac_delim VENDOR_STRING!$VENDOR_STRING$ac_delim @@ -35908,11 +36265,6 @@ XNESTMODULES_CFLAGS!$XNESTMODULES_CFLAGS$ac_delim XNESTMODULES_LIBS!$XNESTMODULES_LIBS$ac_delim XNEST_TRUE!$XNEST_TRUE$ac_delim -XNEST_FALSE!$XNEST_FALSE$ac_delim -XNEST_LIBS!$XNEST_LIBS$ac_delim -XGLMODULES_CFLAGS!$XGLMODULES_CFLAGS$ac_delim -XGLMODULES_LIBS!$XGLMODULES_LIBS$ac_delim -XGL_TRUE!$XGL_TRUE$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then @@ -35954,6 +36306,11 @@ ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF +XNEST_FALSE!$XNEST_FALSE$ac_delim +XNEST_LIBS!$XNEST_LIBS$ac_delim +XGLMODULES_CFLAGS!$XGLMODULES_CFLAGS$ac_delim +XGLMODULES_LIBS!$XGLMODULES_LIBS$ac_delim +XGL_TRUE!$XGL_TRUE$ac_delim XGL_FALSE!$XGL_FALSE$ac_delim XGL_LIBS!$XGL_LIBS$ac_delim xglmoduledir!$xglmoduledir$ac_delim @@ -36046,11 +36403,6 @@ XWIN_MULTIWINDOWEXTWM_TRUE!$XWIN_MULTIWINDOWEXTWM_TRUE$ac_delim XWIN_MULTIWINDOWEXTWM_FALSE!$XWIN_MULTIWINDOWEXTWM_FALSE$ac_delim XWIN_CLIPBOARD_TRUE!$XWIN_CLIPBOARD_TRUE$ac_delim -XWIN_CLIPBOARD_FALSE!$XWIN_CLIPBOARD_FALSE$ac_delim -XWIN_GLX_WINDOWS_TRUE!$XWIN_GLX_WINDOWS_TRUE$ac_delim -XWIN_GLX_WINDOWS_FALSE!$XWIN_GLX_WINDOWS_FALSE$ac_delim -XWIN_NATIVEGDI_TRUE!$XWIN_NATIVEGDI_TRUE$ac_delim -XWIN_NATIVEGDI_FALSE!$XWIN_NATIVEGDI_FALSE$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then @@ -36092,6 +36444,11 @@ ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF +XWIN_CLIPBOARD_FALSE!$XWIN_CLIPBOARD_FALSE$ac_delim +XWIN_GLX_WINDOWS_TRUE!$XWIN_GLX_WINDOWS_TRUE$ac_delim +XWIN_GLX_WINDOWS_FALSE!$XWIN_GLX_WINDOWS_FALSE$ac_delim +XWIN_NATIVEGDI_TRUE!$XWIN_NATIVEGDI_TRUE$ac_delim +XWIN_NATIVEGDI_FALSE!$XWIN_NATIVEGDI_FALSE$ac_delim XWIN_PRIMARYFB_TRUE!$XWIN_PRIMARYFB_TRUE$ac_delim XWIN_PRIMARYFB_FALSE!$XWIN_PRIMARYFB_FALSE$ac_delim XWIN_RANDR_TRUE!$XWIN_RANDR_TRUE$ac_delim @@ -36167,7 +36524,7 @@ LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 73; then + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 78; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 --- xorg-server-1.3.0.0.dfsg.orig/Makefile.in +++ xorg-server-1.3.0.0.dfsg/Makefile.in @@ -130,6 +130,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -208,6 +210,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -320,6 +323,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/cfb32/Makefile.in +++ xorg-server-1.3.0.0.dfsg/cfb32/Makefile.in @@ -127,6 +127,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -205,6 +207,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -317,6 +320,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/dix/Makefile.in +++ xorg-server-1.3.0.0.dfsg/dix/Makefile.in @@ -120,6 +120,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -198,6 +200,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -310,6 +313,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/os/Makefile.in +++ xorg-server-1.3.0.0.dfsg/os/Makefile.in @@ -133,6 +133,8 @@ BUILD_LINUXDOC_TRUE = @BUILD_LINUXDOC_TRUE@ BUILD_PDFDOC_FALSE = @BUILD_PDFDOC_FALSE@ BUILD_PDFDOC_TRUE = @BUILD_PDFDOC_TRUE@ +BUILD_TYPE1_FALSE = @BUILD_TYPE1_FALSE@ +BUILD_TYPE1_TRUE = @BUILD_TYPE1_TRUE@ BUILD_XORGCFG_FALSE = @BUILD_XORGCFG_FALSE@ BUILD_XORGCFG_TRUE = @BUILD_XORGCFG_TRUE@ CC = @CC@ @@ -211,6 +213,7 @@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ FREETYPE_REQUIRES = @FREETYPE_REQUIRES@ +GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_FALSE = @GLX_FALSE@ GLX_TRUE = @GLX_TRUE@ @@ -323,6 +326,8 @@ RGB_DB = @RGB_DB@ SCREENSAVER_FALSE = @SCREENSAVER_FALSE@ SCREENSAVER_TRUE = @SCREENSAVER_TRUE@ +SED = @SED@ +SERVERCONFIGdir = @SERVERCONFIGdir@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@ --- xorg-server-1.3.0.0.dfsg.orig/aclocal.m4 +++ xorg-server-1.3.0.0.dfsg/aclocal.m4 @@ -13,7 +13,7 @@ # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- -# serial 48 Debian 1.5.22-4 AC_PROG_LIBTOOL +# serial 51 Debian 1.5.24-1 AC_PROG_LIBTOOL # AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED) @@ -176,7 +176,7 @@ test -z "$ac_objext" && ac_objext=o # Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= @@ -263,8 +263,9 @@ # Check for compiler boilerplate output or warnings with # the simple compiler test code. AC_DEFUN([_LT_COMPILER_BOILERPLATE], -[ac_outfile=conftest.$ac_objext -printf "$lt_simple_compile_test_code" >conftest.$ac_ext +[AC_REQUIRE([LT_AC_PROG_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* @@ -276,8 +277,9 @@ # Check for linker boilerplate output or warnings with # the simple link test code. AC_DEFUN([_LT_LINKER_BOILERPLATE], -[ac_outfile=conftest.$ac_objext -printf "$lt_simple_link_test_code" >conftest.$ac_ext +[AC_REQUIRE([LT_AC_PROG_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm conftest* @@ -293,12 +295,20 @@ # If we don't find anything, use the default library path according # to the aix ld manual. AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX], -[AC_LINK_IFELSE(AC_LANG_PROGRAM,[ -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` +[AC_REQUIRE([LT_AC_PROG_SED])dnl +AC_LINK_IFELSE(AC_LANG_PROGRAM,[ +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi],[]) +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi],[]) if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi ])# _LT_AC_SYS_LIBPATH_AIX @@ -529,13 +539,17 @@ rm -rf conftest* ;; -x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; @@ -552,6 +566,9 @@ ;; *64-bit*) case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; @@ -623,7 +640,7 @@ AC_CACHE_CHECK([$1], [$2], [$2=no ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) - printf "$lt_simple_compile_test_code" > conftest.$ac_ext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. @@ -664,11 +681,12 @@ # ------------------------------------------------------------ # Check whether the given compiler option works AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], -[AC_CACHE_CHECK([$1], [$2], +[AC_REQUIRE([LT_AC_PROG_SED])dnl +AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" - printf "$lt_simple_link_test_code" > conftest.$ac_ext + echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings @@ -782,24 +800,27 @@ fi ;; *) - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \ + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \ = "XX$teststring") >/dev/null 2>&1 && - new_result=`expr "X$teststring" : ".*" 2>&1` && - lt_cv_sys_max_cmd_len=$new_result && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - teststring= - # Add a significant safety factor because C++ compilers can tack on massive - # amounts of additional arguments before passing them to the linker. - # It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + new_result=`expr "X$teststring" : ".*" 2>&1` && + lt_cv_sys_max_cmd_len=$new_result && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + teststring= + # Add a significant safety factor because C++ compilers can tack on massive + # amounts of additional arguments before passing them to the linker. + # It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi ;; esac ]) @@ -1026,7 +1047,8 @@ # --------------------------------- # Check to see if options -c and -o are simultaneously supported by compiler AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O], -[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl +[AC_REQUIRE([LT_AC_PROG_SED])dnl +AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no @@ -1034,7 +1056,7 @@ mkdir conftest cd conftest mkdir out - printf "$lt_simple_compile_test_code" > conftest.$ac_ext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or @@ -1174,6 +1196,7 @@ darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" + old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) @@ -1191,7 +1214,8 @@ # ----------------------------- # PORTME Fill in your ld.so characteristics AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER], -[AC_MSG_CHECKING([dynamic linker characteristics]) +[AC_REQUIRE([LT_AC_PROG_SED])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) library_names_spec= libname_spec='lib$name' soname_spec= @@ -1205,20 +1229,58 @@ version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" +m4_if($1,[],[ if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$lt_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e 's/;/ /g'` else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`echo $lt_tmp_lt_search_path_spec | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + sys_lib_search_path_spec=`echo $lt_search_path_spec` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi +fi]) need_lib_prefix=unknown hardcode_into_libs=no @@ -1375,12 +1437,8 @@ shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. - if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` - else - sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' - fi + m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; @@ -1434,7 +1492,7 @@ shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; - freebsd*) # from 4.6 on + *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; @@ -1497,7 +1555,7 @@ postinstall_cmds='chmod 555 $lib' ;; -interix3*) +interix[[3-9]]*) version_type=linux need_lib_prefix=no need_version=no @@ -1568,7 +1626,7 @@ # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi @@ -1674,6 +1732,10 @@ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; +rdos*) + dynamic_linker=no + ;; + solaris*) version_type=linux need_lib_prefix=no @@ -1779,7 +1841,8 @@ # _LT_AC_TAGCONFIG # ---------------- AC_DEFUN([_LT_AC_TAGCONFIG], -[AC_ARG_WITH([tags], +[AC_REQUIRE([LT_AC_PROG_SED])dnl +AC_ARG_WITH([tags], [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@], [include additional configurations @<:@automatic@:>@])], [tagnames="$withval"]) @@ -2040,7 +2103,7 @@ # AC_PATH_TOOL_PREFIX # ------------------- -# find a file program which can recognise shared library +# find a file program which can recognize shared library AC_DEFUN([AC_PATH_TOOL_PREFIX], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_MSG_CHECKING([for $1]) @@ -2103,7 +2166,7 @@ # AC_PATH_MAGIC # ------------- -# find a file program which can recognise a shared library +# find a file program which can recognize a shared library AC_DEFUN([AC_PATH_MAGIC], [AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then @@ -2250,7 +2313,7 @@ # how to check for library dependencies # -- PORTME fill in with the dynamic library characteristics AC_DEFUN([AC_DEPLIBS_CHECK_METHOD], -[AC_CACHE_CHECK([how to recognise dependent libraries], +[AC_CACHE_CHECK([how to recognize dependent libraries], lt_cv_deplibs_check_method, [lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= @@ -2289,9 +2352,15 @@ mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump'. - lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi ;; darwin* | rhapsody*) @@ -2336,7 +2405,7 @@ esac ;; -interix3*) +interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; @@ -2386,6 +2455,10 @@ lt_cv_deplibs_check_method=pass_all ;; +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + solaris*) lt_cv_deplibs_check_method=pass_all ;; @@ -2438,7 +2511,7 @@ lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do @@ -2654,10 +2727,10 @@ _LT_AC_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;\n" +lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}\n' +lt_simple_link_test_code='int main(){return(0);}' _LT_AC_SYS_COMPILER @@ -2759,10 +2832,10 @@ _LT_AC_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;\n" +lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests -lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }\n' +lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_AC_SYS_COMPILER @@ -2908,7 +2981,7 @@ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 - _LT_AC_TAGVAR(hardcode_direct, $1)=yes + : else # We have old collect2 _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported @@ -3067,10 +3140,10 @@ case $cc_basename in xlc*) output_verbose_link_cmd='echo' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) @@ -3153,9 +3226,7 @@ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in - hppa*64*|ia64*) - _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' - ;; + hppa*64*|ia64*) ;; *) _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; @@ -3223,7 +3294,7 @@ ;; esac ;; - interix3*) + interix[[3-9]]*) _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' @@ -3343,6 +3414,29 @@ # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; esac ;; lynxos*) @@ -3381,16 +3475,20 @@ _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + if test -f /usr/libexec/ld.so; then + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd='echo' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no fi - output_verbose_link_cmd='echo' ;; osf3*) case $cc_basename in @@ -3552,15 +3650,10 @@ case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) - # The C++ compiler is used as linker so we must use $wl - # flag to pass the commands to the underlying system - # linker. We must also pass each convience library through - # to the system linker between allextract/defaultextract. - # The C++ compiler will combine linker options so we - # cannot just pass the convience library names through - # without $wl. + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_AC_TAGVAR(link_all_deplibs, $1)=yes @@ -3607,6 +3700,12 @@ fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac fi ;; esac @@ -3850,7 +3949,7 @@ # PORTME: override above test on systems where it is broken ifelse([$1],[CXX], [case $host_os in -interix3*) +interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_AC_TAGVAR(predep_objects,$1)= @@ -3858,13 +3957,46 @@ _LT_AC_TAGVAR(postdeps,$1)= ;; +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + # + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + if test "$solaris_use_stlport4" != yes; then + _LT_AC_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + solaris*) case $cc_basename in CC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. - _LT_AC_TAGVAR(postdeps,$1)='-lCstd -lCrun' + if test "$solaris_use_stlport4" != yes; then + _LT_AC_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi ;; esac ;; @@ -3913,10 +4045,17 @@ _LT_AC_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests -lt_simple_compile_test_code=" subroutine t\n return\n end\n" +lt_simple_compile_test_code="\ + subroutine t + return + end +" # Code to be used in simple link tests -lt_simple_link_test_code=" program t\n end\n" +lt_simple_link_test_code="\ + program t + end +" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_AC_SYS_COMPILER @@ -3995,10 +4134,10 @@ _LT_AC_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests -lt_simple_compile_test_code="class foo {}\n" +lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests -lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }\n' +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_AC_SYS_COMPILER @@ -4051,7 +4190,7 @@ _LT_AC_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests -lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n' +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" @@ -4140,6 +4279,7 @@ _LT_AC_TAGVAR(module_cmds, $1) \ _LT_AC_TAGVAR(module_expsym_cmds, $1) \ _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \ + _LT_AC_TAGVAR(fix_srcfile_path, $1) \ _LT_AC_TAGVAR(exclude_expsyms, $1) \ _LT_AC_TAGVAR(include_expsyms, $1); do @@ -4186,7 +4326,7 @@ # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) # NOTE: Changes made to this file will be lost: look at ltmain.sh. # -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 # Free Software Foundation, Inc. # # This file is part of GNU Libtool: @@ -4511,7 +4651,7 @@ sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)" +fix_srcfile_path=$lt_fix_srcfile_path # Set to yes if exported symbols are required. always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1) @@ -4594,6 +4734,7 @@ # --------------------------------- AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_REQUIRE([AC_CANONICAL_HOST]) +AC_REQUIRE([LT_AC_PROG_SED]) AC_REQUIRE([AC_PROG_NM]) AC_REQUIRE([AC_OBJEXT]) # Check for command to grab the raw symbol name followed by C symbol from nm. @@ -4820,12 +4961,14 @@ # like `-m68040'. _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; - beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; - mingw* | os2* | pw32*) + mingw* | cygwin* | os2* | pw32*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' ;; darwin* | rhapsody*) @@ -4837,7 +4980,7 @@ # DJGPP does not support shared libraries at all _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= ;; - interix3*) + interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; @@ -4973,6 +5116,14 @@ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac ;; esac ;; @@ -5093,13 +5244,15 @@ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; - beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; - mingw* | pw32* | os2*) + mingw* | cygwin* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' ;; @@ -5109,7 +5262,7 @@ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; - interix3*) + interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; @@ -5167,7 +5320,7 @@ esac ;; - mingw* | pw32* | os2*) + mingw* | cygwin* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' @@ -5219,6 +5372,22 @@ # All Alpha code is PIC. _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C 5.9 + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + *Sun\ F*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + esac + ;; esac ;; @@ -5228,6 +5397,10 @@ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; + rdos*) + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + solaris*) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' @@ -5322,7 +5495,8 @@ # ------------------------------------ # See if the linker supports building shared libraries. AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS], -[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +[AC_REQUIRE([LT_AC_PROG_SED])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) ifelse([$1],[CXX],[ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in @@ -5339,7 +5513,7 @@ _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw*) - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([[^ ]]*\) [[^ ]]*/\1 DATA/;/^I /d;/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' ;; linux* | k*bsd*-gnu) _LT_AC_TAGVAR(link_all_deplibs, $1)=no @@ -5481,7 +5655,7 @@ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_AC_TAGVAR(always_export_symbols, $1)=no _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' @@ -5499,7 +5673,7 @@ fi ;; - interix3*) + interix[[3-9]]*) _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' @@ -5514,7 +5688,7 @@ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; - linux* | k*bsd*-gnu) + gnu* | linux* | k*bsd*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_addflag= case $cc_basename,$host_cpu in @@ -5532,13 +5706,22 @@ ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; esac - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + *) + tmp_sharedflag='-shared' ;; + esac + _LT_AC_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test $supports_anon_versioning = yes; then _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi _LT_AC_TAGVAR(link_all_deplibs, $1)=no else @@ -5579,7 +5762,7 @@ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_AC_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 @@ -5698,7 +5881,7 @@ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 - _LT_AC_TAGVAR(hardcode_direct, $1)=yes + : else # We have old collect2 _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported @@ -5791,7 +5974,7 @@ # The linker will automatically build a .lib file if we build a DLL. _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. - _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs' + _LT_AC_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_AC_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; @@ -5833,10 +6016,10 @@ case $cc_basename in xlc*) output_verbose_link_cmd='echo' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) @@ -5998,24 +6181,28 @@ ;; openbsd*) - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + if test -f /usr/libexec/ld.so; then + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi else - case $host_os in - openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - ;; - esac + _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; @@ -6074,17 +6261,16 @@ case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) - # The compiler driver will combine linker options so we - # cannot just pass the convience library names through - # without $wl, iff we do not link with $LD. - # Luckily, gcc supports the same syntax we need for Sun Studio. + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) - case $wlarc in - '') - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; - *) - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; - esac ;; + if test "$GCC" = yes; then + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; esac _LT_AC_TAGVAR(link_all_deplibs, $1)=yes ;; @@ -6141,7 +6327,7 @@ fi ;; - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7*) + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no @@ -6216,7 +6402,7 @@ # to ld, don't add -lc before -lgcc. AC_MSG_CHECKING([whether -lc should be explicitly linked in]) $rm conftest* - printf "$lt_simple_compile_test_code" > conftest.$ac_ext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest @@ -6319,6 +6505,30 @@ [AC_CHECK_TOOL(RC, windres, no) ]) + +# Cheap backport of AS_EXECUTABLE_P and required macros +# from Autoconf 2.59; we should not use $as_executable_p directly. + +# _AS_TEST_PREPARE +# ---------------- +m4_ifndef([_AS_TEST_PREPARE], +[m4_defun([_AS_TEST_PREPARE], +[if test -x / >/dev/null 2>&1; then + as_executable_p='test -x' +else + as_executable_p='test -f' +fi +])])# _AS_TEST_PREPARE + +# AS_EXECUTABLE_P +# --------------- +# Check whether a file is executable. +m4_ifndef([AS_EXECUTABLE_P], +[m4_defun([AS_EXECUTABLE_P], +[AS_REQUIRE([_AS_TEST_PREPARE])dnl +$as_executable_p $1[]dnl +])])# AS_EXECUTABLE_P + # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # @@ -6339,12 +6549,13 @@ test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + if AS_EXECUTABLE_P(["$as_dir/$lt_ac_prog$ac_exec_ext"]); then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done +IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris @@ -6377,6 +6588,7 @@ done ]) SED=$lt_cv_path_SED +AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ]) @@ -6528,7 +6740,7 @@ _PKG_TEXT -To get pkg-config, see .])], +To get pkg-config, see .])], [$4]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS @@ -6538,590 +6750,641 @@ fi[]dnl ])# PKG_CHECK_MODULES -# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. +dnl +dnl Copyright 2005-2006 Sun Microsystems, Inc. All rights reserved. +dnl +dnl Permission is hereby granted, free of charge, to any person obtaining a +dnl copy of this software and associated documentation files (the +dnl "Software"), to deal in the Software without restriction, including +dnl without limitation the rights to use, copy, modify, merge, publish, +dnl distribute, and/or sell copies of the Software, and to permit persons +dnl to whom the Software is furnished to do so, provided that the above +dnl copyright notice(s) and this permission notice appear in all copies of +dnl the Software and that both the above copyright notice(s) and this +dnl permission notice appear in supporting documentation. +dnl +dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +dnl OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +dnl HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL +dnl INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING +dnl FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +dnl NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION +dnl WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +dnl +dnl Except as contained in this notice, the name of a copyright holder +dnl shall not be used in advertising or otherwise to promote the sale, use +dnl or other dealings in this Software without prior written authorization +dnl of the copyright holder. + +# XORG_MACROS_VERSION(required-version) +# ------------------------------------- +# Minimum version: 1.1.0 # -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. +# If you're using a macro added in Version 1.1 or newer, include this in +# your configure.ac with the minimum required version, such as: +# XORG_MACROS_VERSION(1.1) +# +# To force at least a version with this macro defined, also add: +# m4_ifndef([XORG_MACROS_VERSION], [AC_FATAL([must install xorg-macros 1.1 or later before running autoconf/autogen])]) +# +# +# See the "minimum version" comment for each macro you use to see what +# version you require. +AC_DEFUN([XORG_MACROS_VERSION],[ + [XORG_MACROS_needed_version=$1 + XORG_MACROS_needed_major=`echo $XORG_MACROS_needed_version | sed 's/\..*$//'` + XORG_MACROS_needed_minor=`echo $XORG_MACROS_needed_version | sed -e 's/^[0-9]*\.//' -e 's/\..*$//'`] + AC_MSG_CHECKING([if xorg-macros used to generate configure is at least ${XORG_MACROS_needed_major}.${XORG_MACROS_needed_minor}]) + [XORG_MACROS_version=1.1.5 + XORG_MACROS_major=`echo $XORG_MACROS_version | sed 's/\..*$//'` + XORG_MACROS_minor=`echo $XORG_MACROS_version | sed -e 's/^[0-9]*\.//' -e 's/\..*$//'`] + if test $XORG_MACROS_major -ne $XORG_MACROS_needed_major ; then + AC_MSG_ERROR([configure built with incompatible version of xorg-macros.m4 - requires version ${XORG_MACROS_major}.x]) + fi + if test $XORG_MACROS_minor -lt $XORG_MACROS_needed_minor ; then + AC_MSG_ERROR([configure built with too old of a version of xorg-macros.m4 - requires version ${XORG_MACROS_major}.${XORG_MACROS_minor}.0 or newer]) + fi + AC_MSG_RESULT([yes, $XORG_MACROS_version]) +]) # XORG_MACROS_VERSION -# AM_AUTOMAKE_VERSION(VERSION) -# ---------------------------- -# Automake X.Y traces this macro to ensure aclocal.m4 has been -# generated from the m4 files accompanying Automake X.Y. -AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"]) +# XORG_PROG_RAWCPP() +# ------------------ +# Minimum version: 1.0.0 +# +# Find cpp program and necessary flags for use in pre-processing text files +# such as man pages and config files +AC_DEFUN([XORG_PROG_RAWCPP],[ +AC_REQUIRE([AC_PROG_CPP]) +AC_PATH_PROGS(RAWCPP, [cpp], [${CPP}], + [$PATH:/bin:/usr/bin:/usr/lib:/usr/libexec:/usr/ccs/lib:/usr/ccs/lbin:/lib]) -# AM_SET_CURRENT_AUTOMAKE_VERSION -# ------------------------------- -# Call AM_AUTOMAKE_VERSION so it can be traced. -# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. -AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], - [AM_AUTOMAKE_VERSION([1.9.6])]) +# Check for flag to avoid builtin definitions - assumes unix is predefined, +# which is not the best choice for supporting other OS'es, but covers most +# of the ones we need for now. +AC_MSG_CHECKING([if $RAWCPP requires -undef]) +AC_LANG_CONFTEST([Does cpp redefine unix ?]) +if test `${RAWCPP} < conftest.$ac_ext | grep -c 'unix'` -eq 1 ; then + AC_MSG_RESULT([no]) +else + if test `${RAWCPP} -undef < conftest.$ac_ext | grep -c 'unix'` -eq 1 ; then + RAWCPPFLAGS=-undef + AC_MSG_RESULT([yes]) + else + AC_MSG_ERROR([${RAWCPP} defines unix with or without -undef. I don't know what to do.]) + fi +fi +rm -f conftest.$ac_ext -# Figure out how to run the assembler. -*- Autoconf -*- +AC_MSG_CHECKING([if $RAWCPP requires -traditional]) +AC_LANG_CONFTEST([Does cpp preserve "whitespace"?]) +if test `${RAWCPP} < conftest.$ac_ext | grep -c 'preserve \"'` -eq 1 ; then + AC_MSG_RESULT([no]) +else + if test `${RAWCPP} -traditional < conftest.$ac_ext | grep -c 'preserve \"'` -eq 1 ; then + RAWCPPFLAGS="${RAWCPPFLAGS} -traditional" + AC_MSG_RESULT([yes]) + else + AC_MSG_ERROR([${RAWCPP} does not preserve whitespace with or without -traditional. I don't know what to do.]) + fi +fi +rm -f conftest.$ac_ext +AC_SUBST(RAWCPPFLAGS) +]) # XORG_PROG_RAWCPP -# Copyright (C) 2001, 2003, 2004, 2005 Free Software Foundation, Inc. +# XORG_MANPAGE_SECTIONS() +# ----------------------- +# Minimum version: 1.0.0 # -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. +# Determine which sections man pages go in for the different man page types +# on this OS - replaces *ManSuffix settings in old Imake *.cf per-os files. +# Not sure if there's any better way than just hardcoding by OS name. +# Override default settings by setting environment variables -# serial 4 +AC_DEFUN([XORG_MANPAGE_SECTIONS],[ +AC_REQUIRE([AC_CANONICAL_HOST]) -# AM_PROG_AS -# ---------- -AC_DEFUN([AM_PROG_AS], -[# By default we simply use the C compiler to build assembly code. -AC_REQUIRE([AC_PROG_CC]) -test "${CCAS+set}" = set || CCAS=$CC -test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS -AC_ARG_VAR([CCAS], [assembler compiler command (defaults to CC)]) -AC_ARG_VAR([CCASFLAGS], [assembler compiler flags (defaults to CFLAGS)]) -]) +if test x$APP_MAN_SUFFIX = x ; then + APP_MAN_SUFFIX=1 +fi +if test x$APP_MAN_DIR = x ; then + APP_MAN_DIR='$(mandir)/man$(APP_MAN_SUFFIX)' +fi -# AM_AUX_DIR_EXPAND -*- Autoconf -*- +if test x$LIB_MAN_SUFFIX = x ; then + LIB_MAN_SUFFIX=3 +fi +if test x$LIB_MAN_DIR = x ; then + LIB_MAN_DIR='$(mandir)/man$(LIB_MAN_SUFFIX)' +fi -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. +if test x$FILE_MAN_SUFFIX = x ; then + case $host_os in + solaris*) FILE_MAN_SUFFIX=4 ;; + *) FILE_MAN_SUFFIX=5 ;; + esac +fi +if test x$FILE_MAN_DIR = x ; then + FILE_MAN_DIR='$(mandir)/man$(FILE_MAN_SUFFIX)' +fi -# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets -# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to -# `$srcdir', `$srcdir/..', or `$srcdir/../..'. -# -# Of course, Automake must honor this variable whenever it calls a -# tool from the auxiliary directory. The problem is that $srcdir (and -# therefore $ac_aux_dir as well) can be either absolute or relative, -# depending on how configure is run. This is pretty annoying, since -# it makes $ac_aux_dir quite unusable in subdirectories: in the top -# source directory, any form will work fine, but in subdirectories a -# relative path needs to be adjusted first. -# -# $ac_aux_dir/missing -# fails when called from a subdirectory if $ac_aux_dir is relative -# $top_srcdir/$ac_aux_dir/missing -# fails if $ac_aux_dir is absolute, -# fails when called from a subdirectory in a VPATH build with -# a relative $ac_aux_dir -# -# The reason of the latter failure is that $top_srcdir and $ac_aux_dir -# are both prefixed by $srcdir. In an in-source build this is usually -# harmless because $srcdir is `.', but things will broke when you -# start a VPATH build or use an absolute $srcdir. -# -# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, -# iff we strip the leading $srcdir from $ac_aux_dir. That would be: -# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` -# and then we would define $MISSING as -# MISSING="\${SHELL} $am_aux_dir/missing" -# This will work as long as MISSING is not called from configure, because -# unfortunately $(top_srcdir) has no meaning in configure. -# However there are other variables, like CC, which are often used in -# configure, and could therefore not use this "fixed" $ac_aux_dir. -# -# Another solution, used here, is to always expand $ac_aux_dir to an -# absolute PATH. The drawback is that using absolute paths prevent a -# configured tree to be moved without reconfiguration. - -AC_DEFUN([AM_AUX_DIR_EXPAND], -[dnl Rely on autoconf to set up CDPATH properly. -AC_PREREQ([2.50])dnl -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` -]) - -# AM_CONDITIONAL -*- Autoconf -*- - -# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. +if test x$MISC_MAN_SUFFIX = x ; then + case $host_os in + solaris*) MISC_MAN_SUFFIX=5 ;; + *) MISC_MAN_SUFFIX=7 ;; + esac +fi +if test x$MISC_MAN_DIR = x ; then + MISC_MAN_DIR='$(mandir)/man$(MISC_MAN_SUFFIX)' +fi -# serial 7 +if test x$DRIVER_MAN_SUFFIX = x ; then + case $host_os in + solaris*) DRIVER_MAN_SUFFIX=7 ;; + *) DRIVER_MAN_SUFFIX=4 ;; + esac +fi +if test x$DRIVER_MAN_DIR = x ; then + DRIVER_MAN_DIR='$(mandir)/man$(DRIVER_MAN_SUFFIX)' +fi -# AM_CONDITIONAL(NAME, SHELL-CONDITION) -# ------------------------------------- -# Define a conditional. -AC_DEFUN([AM_CONDITIONAL], -[AC_PREREQ(2.52)dnl - ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], - [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl -AC_SUBST([$1_TRUE]) -AC_SUBST([$1_FALSE]) -if $2; then - $1_TRUE= - $1_FALSE='#' -else - $1_TRUE='#' - $1_FALSE= +if test x$ADMIN_MAN_SUFFIX = x ; then + case $host_os in + solaris*) ADMIN_MAN_SUFFIX=1m ;; + *) ADMIN_MAN_SUFFIX=8 ;; + esac +fi +if test x$ADMIN_MAN_DIR = x ; then + ADMIN_MAN_DIR='$(mandir)/man$(ADMIN_MAN_SUFFIX)' fi -AC_CONFIG_COMMANDS_PRE( -[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then - AC_MSG_ERROR([[conditional "$1" was never defined. -Usually this means the macro was only invoked conditionally.]]) -fi])]) -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. +AC_SUBST([APP_MAN_SUFFIX]) +AC_SUBST([LIB_MAN_SUFFIX]) +AC_SUBST([FILE_MAN_SUFFIX]) +AC_SUBST([MISC_MAN_SUFFIX]) +AC_SUBST([DRIVER_MAN_SUFFIX]) +AC_SUBST([ADMIN_MAN_SUFFIX]) +AC_SUBST([APP_MAN_DIR]) +AC_SUBST([LIB_MAN_DIR]) +AC_SUBST([FILE_MAN_DIR]) +AC_SUBST([MISC_MAN_DIR]) +AC_SUBST([DRIVER_MAN_DIR]) +AC_SUBST([ADMIN_MAN_DIR]) +]) # XORG_MANPAGE_SECTIONS -# serial 8 +# XORG_CHECK_LINUXDOC +# ------------------- +# Minimum version: 1.0.0 +# +# Defines the variable MAKE_TEXT if the necessary tools and +# files are found. $(MAKE_TEXT) blah.sgml will then produce blah.txt. +# Whether or not the necessary tools and files are found can be checked +# with the AM_CONDITIONAL "BUILD_LINUXDOC" +AC_DEFUN([XORG_CHECK_LINUXDOC],[ +XORG_SGML_PATH=$prefix/share/sgml +HAVE_DEFS_ENT= -# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be -# written in clear, in which case automake, when reading aclocal.m4, -# will think it sees a *use*, and therefore will trigger all it's -# C support machinery. Also note that it means that autoscan, seeing -# CC etc. in the Makefile, will ask for an AC_PROG_CC use... +AC_CHECK_FILE([$XORG_SGML_PATH/X11/defs.ent], [HAVE_DEFS_ENT=yes]) +AC_PATH_PROG(LINUXDOC, linuxdoc) +AC_PATH_PROG(PS2PDF, ps2pdf) -# _AM_DEPENDENCIES(NAME) -# ---------------------- -# See how the compiler implements dependency checking. -# NAME is "CC", "CXX", "GCJ", or "OBJC". -# We try a few techniques and use that to set a single cache variable. -# -# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was -# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular -# dependency, and given that the user is not expected to run this macro, -# just rely on AC_PROG_CC. -AC_DEFUN([_AM_DEPENDENCIES], -[AC_REQUIRE([AM_SET_DEPDIR])dnl -AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl -AC_REQUIRE([AM_MAKE_INCLUDE])dnl -AC_REQUIRE([AM_DEP_TRACK])dnl +AC_MSG_CHECKING([Whether to build documentation]) -ifelse([$1], CC, [depcc="$CC" am_compiler_list=], - [$1], CXX, [depcc="$CXX" am_compiler_list=], - [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], - [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], - [depcc="$$1" am_compiler_list=]) +if test x$HAVE_DEFS_ENT != x && test x$LINUXDOC != x ; then + BUILDDOC=yes +else + BUILDDOC=no +fi -AC_CACHE_CHECK([dependency style of $depcc], - [am_cv_$1_dependencies_compiler_type], -[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub +AM_CONDITIONAL(BUILD_LINUXDOC, [test x$BUILDDOC = xyes]) - am_cv_$1_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` - fi - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf +AC_MSG_RESULT([$BUILDDOC]) - case $depmode in - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - none) break ;; - esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. - if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_$1_dependencies_compiler_type=$depmode - break - fi - fi - done +AC_MSG_CHECKING([Whether to build pdf documentation]) - cd .. - rm -rf conftest.dir +if test x$PS2PDF != x && test x$BUILD_PDFDOC != xno; then + BUILDPDFDOC=yes else - am_cv_$1_dependencies_compiler_type=none + BUILDPDFDOC=no fi -]) -AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) -AM_CONDITIONAL([am__fastdep$1], [ - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) -]) +AM_CONDITIONAL(BUILD_PDFDOC, [test x$BUILDPDFDOC = xyes]) -# AM_SET_DEPDIR -# ------------- -# Choose a directory name for dependency files. -# This macro is AC_REQUIREd in _AM_DEPENDENCIES -AC_DEFUN([AM_SET_DEPDIR], -[AC_REQUIRE([AM_SET_LEADING_DOT])dnl -AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl -]) +AC_MSG_RESULT([$BUILDPDFDOC]) +MAKE_TEXT="SGML_SEARCH_PATH=$XORG_SGML_PATH GROFF_NO_SGR=y $LINUXDOC -B txt" +MAKE_PS="SGML_SEARCH_PATH=$XORG_SGML_PATH $LINUXDOC -B latex --papersize=letter --output=ps" +MAKE_PDF="$PS2PDF" +MAKE_HTML="SGML_SEARCH_PATH=$XORG_SGML_PATH $LINUXDOC -B html --split=0" -# AM_DEP_TRACK -# ------------ -AC_DEFUN([AM_DEP_TRACK], -[AC_ARG_ENABLE(dependency-tracking, -[ --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors]) -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' +AC_SUBST(MAKE_TEXT) +AC_SUBST(MAKE_PS) +AC_SUBST(MAKE_PDF) +AC_SUBST(MAKE_HTML) +]) # XORG_CHECK_LINUXDOC + +# XORG_CHECK_DOCBOOK +# ------------------- +# Minimum version: 1.0.0 +# +# Checks for the ability to build output formats from SGML DocBook source. +# For XXX in {TXT, PDF, PS, HTML}, the AM_CONDITIONAL "BUILD_XXXDOC" +# indicates whether the necessary tools and files are found and, if set, +# $(MAKE_XXX) blah.sgml will produce blah.xxx. +AC_DEFUN([XORG_CHECK_DOCBOOK],[ +XORG_SGML_PATH=$prefix/share/sgml +HAVE_DEFS_ENT= +BUILDTXTDOC=no +BUILDPDFDOC=no +BUILDPSDOC=no +BUILDHTMLDOC=no + +AC_CHECK_FILE([$XORG_SGML_PATH/X11/defs.ent], [HAVE_DEFS_ENT=yes]) + +AC_PATH_PROG(DOCBOOKPS, docbook2ps) +AC_PATH_PROG(DOCBOOKPDF, docbook2pdf) +AC_PATH_PROG(DOCBOOKHTML, docbook2html) +AC_PATH_PROG(DOCBOOKTXT, docbook2txt) + +AC_MSG_CHECKING([Whether to build text documentation]) +if test x$HAVE_DEFS_ENT != x && test x$DOCBOOKTXT != x && + test x$BUILD_TXTDOC != xno; then + BUILDTXTDOC=yes +fi +AM_CONDITIONAL(BUILD_TXTDOC, [test x$BUILDTXTDOC = xyes]) +AC_MSG_RESULT([$BUILDTXTDOC]) + +AC_MSG_CHECKING([Whether to build PDF documentation]) +if test x$HAVE_DEFS_ENT != x && test x$DOCBOOKPDF != x && + test x$BUILD_PDFDOC != xno; then + BUILDPDFDOC=yes fi -AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH]) -]) +AM_CONDITIONAL(BUILD_PDFDOC, [test x$BUILDPDFDOC = xyes]) +AC_MSG_RESULT([$BUILDPDFDOC]) -# Generate code to set up dependency tracking. -*- Autoconf -*- +AC_MSG_CHECKING([Whether to build PostScript documentation]) +if test x$HAVE_DEFS_ENT != x && test x$DOCBOOKPS != x && + test x$BUILD_PSDOC != xno; then + BUILDPSDOC=yes +fi +AM_CONDITIONAL(BUILD_PSDOC, [test x$BUILDPSDOC = xyes]) +AC_MSG_RESULT([$BUILDPSDOC]) + +AC_MSG_CHECKING([Whether to build HTML documentation]) +if test x$HAVE_DEFS_ENT != x && test x$DOCBOOKHTML != x && + test x$BUILD_HTMLDOC != xno; then + BUILDHTMLDOC=yes +fi +AM_CONDITIONAL(BUILD_HTMLDOC, [test x$BUILDHTMLDOC = xyes]) +AC_MSG_RESULT([$BUILDHTMLDOC]) + +MAKE_TEXT="SGML_SEARCH_PATH=$XORG_SGML_PATH $DOCBOOKTXT" +MAKE_PS="SGML_SEARCH_PATH=$XORG_SGML_PATH $DOCBOOKPS" +MAKE_PDF="SGML_SEARCH_PATH=$XORG_SGML_PATH $DOCBOOKPDF" +MAKE_HTML="SGML_SEARCH_PATH=$XORG_SGML_PATH $DOCBOOKHTML" -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -#serial 3 - -# _AM_OUTPUT_DEPENDENCY_COMMANDS -# ------------------------------ -AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], -[for mf in $CONFIG_FILES; do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # So let's grep whole file. - if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done -done -])# _AM_OUTPUT_DEPENDENCY_COMMANDS - - -# AM_OUTPUT_DEPENDENCY_COMMANDS -# ----------------------------- -# This macro should only be invoked once -- use via AC_REQUIRE. -# -# This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each `.P' file that we will -# need in order to bootstrap the dependency handling code. -AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], -[AC_CONFIG_COMMANDS([depfiles], - [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], - [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) -]) - -# Do all the work for Automake. -*- Autoconf -*- +AC_SUBST(MAKE_TEXT) +AC_SUBST(MAKE_PS) +AC_SUBST(MAKE_PDF) +AC_SUBST(MAKE_HTML) +]) # XORG_CHECK_DOCBOOK -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 -# Free Software Foundation, Inc. +# XORG_CHECK_MALLOC_ZERO +# ---------------------- +# Minimum version: 1.0.0 # -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 12 - -# This macro actually does too much. Some checks are only needed if -# your package does certain things. But this isn't really a big deal. +# Defines {MALLOC,XMALLOC,XTMALLOC}_ZERO_CFLAGS appropriately if +# malloc(0) returns NULL. Packages should add one of these cflags to +# their AM_CFLAGS (or other appropriate *_CFLAGS) to use them. +AC_DEFUN([XORG_CHECK_MALLOC_ZERO],[ +AC_ARG_ENABLE(malloc0returnsnull, + AC_HELP_STRING([--enable-malloc0returnsnull], + [malloc(0) returns NULL (default: auto)]), + [MALLOC_ZERO_RETURNS_NULL=$enableval], + [MALLOC_ZERO_RETURNS_NULL=auto]) -# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) -# AM_INIT_AUTOMAKE([OPTIONS]) -# ----------------------------------------------- -# The call with PACKAGE and VERSION arguments is the old style -# call (pre autoconf-2.50), which is being phased out. PACKAGE -# and VERSION should now be passed to AC_INIT and removed from -# the call to AM_INIT_AUTOMAKE. -# We support both call styles for the transition. After -# the next Automake release, Autoconf can make the AC_INIT -# arguments mandatory, and then we can depend on a new Autoconf -# release and drop the old call support. -AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.58])dnl -dnl Autoconf wants to disallow AM_ names. We explicitly allow -dnl the ones we care about. -m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl -AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl -AC_REQUIRE([AC_PROG_INSTALL])dnl -# test to see if srcdir already configured -if test "`cd $srcdir && pwd`" != "`pwd`" && - test -f $srcdir/config.status; then - AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +AC_MSG_CHECKING([whether malloc(0) returns NULL]) +if test "x$MALLOC_ZERO_RETURNS_NULL" = xauto; then + AC_RUN_IFELSE([ +char *malloc(); +char *realloc(); +char *calloc(); +main() { + char *m0, *r0, *c0, *p; + m0 = malloc(0); + p = malloc(10); + r0 = realloc(p,0); + c0 = calloc(0); + exit(m0 == 0 || r0 == 0 || c0 == 0 ? 0 : 1); +}], + [MALLOC_ZERO_RETURNS_NULL=yes], + [MALLOC_ZERO_RETURNS_NULL=no]) fi +AC_MSG_RESULT([$MALLOC_ZERO_RETURNS_NULL]) -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi +if test "x$MALLOC_ZERO_RETURNS_NULL" = xyes; then + MALLOC_ZERO_CFLAGS="-DMALLOC_0_RETURNS_NULL" + XMALLOC_ZERO_CFLAGS=$MALLOC_ZERO_CFLAGS + XTMALLOC_ZERO_CFLAGS="$MALLOC_ZERO_CFLAGS -DXTMALLOC_BC" +else + MALLOC_ZERO_CFLAGS="" + XMALLOC_ZERO_CFLAGS="" + XTMALLOC_ZERO_CFLAGS="" fi -AC_SUBST([CYGPATH_W]) - -# Define the identity of the package. -dnl Distinguish between old-style and new-style calls. -m4_ifval([$2], -[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl - AC_SUBST([PACKAGE], [$1])dnl - AC_SUBST([VERSION], [$2])], -[_AM_SET_OPTIONS([$1])dnl - AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl - AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl - -_AM_IF_OPTION([no-define],, -[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) - AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl - -# Some tools Automake needs. -AC_REQUIRE([AM_SANITY_CHECK])dnl -AC_REQUIRE([AC_ARG_PROGRAM])dnl -AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) -AM_MISSING_PROG(AUTOCONF, autoconf) -AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) -AM_MISSING_PROG(AUTOHEADER, autoheader) -AM_MISSING_PROG(MAKEINFO, makeinfo) -AM_PROG_INSTALL_SH -AM_PROG_INSTALL_STRIP -AC_REQUIRE([AM_PROG_MKDIR_P])dnl -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([AC_PROG_MAKE_SET])dnl -AC_REQUIRE([AM_SET_LEADING_DOT])dnl -_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], - [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], - [_AM_PROG_TAR([v7])])]) -_AM_IF_OPTION([no-dependencies],, -[AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES(CC)], - [define([AC_PROG_CC], - defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl -AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES(CXX)], - [define([AC_PROG_CXX], - defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl -]) -]) - - -# When config.status generates a header, we must update the stamp-h file. -# This file resides in the same directory as the config header -# that is generated. The stamp files are numbered to have different names. -# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the -# loop where config.status creates the headers, so we can generate -# our stamp files there. -AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], -[# Compute $1's index in $config_headers. -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $1 | $1:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) +AC_SUBST([MALLOC_ZERO_CFLAGS]) +AC_SUBST([XMALLOC_ZERO_CFLAGS]) +AC_SUBST([XTMALLOC_ZERO_CFLAGS]) +]) # XORG_CHECK_MALLOC_ZERO -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# XORG_WITH_LINT() +# ---------------- +# Minimum version: 1.1.0 # -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_INSTALL_SH -# ------------------ -# Define $install_sh. -AC_DEFUN([AM_PROG_INSTALL_SH], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -install_sh=${install_sh-"$am_aux_dir/install-sh"} -AC_SUBST(install_sh)]) +# Sets up flags for source checkers such as lint and sparse if --with-lint +# is specified. (Use --with-lint=sparse for sparse.) +# Sets $LINT to name of source checker passed with --with-lint (default: lint) +# Sets $LINT_FLAGS to flags to pass to source checker +# Sets LINT automake conditional if enabled (default: disabled) +# +AC_DEFUN([XORG_WITH_LINT],[ + +# Allow checking code with lint, sparse, etc. +AC_ARG_WITH(lint, [AC_HELP_STRING([--with-lint], + [Use a lint-style source code checker (default: disabled)])], + [use_lint=$withval], [use_lint=no]) +if test "x$use_lint" = "xyes" ; then + LINT="lint" +else + LINT="$use_lint" +fi +if test "x$LINT_FLAGS" = "x" -a "x$LINT" != "xno" ; then + case $LINT in + lint|*/lint) + case $host_os in + solaris*) + LINT_FLAGS="-u -b -h -erroff=E_INDISTING_FROM_TRUNC2" + ;; + esac + ;; + esac +fi -# Copyright (C) 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. +AC_SUBST(LINT) +AC_SUBST(LINT_FLAGS) +AM_CONDITIONAL(LINT, [test x$LINT != xno]) -# serial 2 +]) # XORG_WITH_LINT -# Check whether the underlying file-system supports filenames -# with a leading dot. For instance MS-DOS doesn't. -AC_DEFUN([AM_SET_LEADING_DOT], -[rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ +# XORG_LINT_LIBRARY(LIBNAME) +# -------------------------- +# Minimum version: 1.1.0 +# +# Sets up flags for building lint libraries for checking programs that call +# functions in the library. +# Disabled by default, enable with --enable-lint-library +# Sets: +# @LINTLIB@ - name of lint library file to make +# MAKE_LINT_LIB - automake conditional +# + +AC_DEFUN([XORG_LINT_LIBRARY],[ +AC_REQUIRE([XORG_WITH_LINT]) +# Build lint "library" for more indepth checks of programs calling this library +AC_ARG_ENABLE(lint-library, [AC_HELP_STRING([--enable-lint-library], + [Create lint library (default: disabled)])], + [make_lint_lib=$enableval], [make_lint_lib=no]) +if test "x$make_lint_lib" != "xno" ; then + if test "x$LINT" = "xno" ; then + AC_MSG_ERROR([Cannot make lint library without --with-lint]) + fi + if test "x$make_lint_lib" = "xyes" ; then + LINTLIB=llib-l$1.ln + else + LINTLIB=$make_lint_lib + fi fi -rmdir .tst 2>/dev/null -AC_SUBST([am__leading_dot])]) +AC_SUBST(LINTLIB) +AM_CONDITIONAL(MAKE_LINT_LIB, [test x$make_lint_lib != xno]) -# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- -# From Jim Meyering +]) # XORG_LINT_LIBRARY -# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. +dnl Copyright 2005 Red Hat, Inc +dnl +dnl Permission to use, copy, modify, distribute, and sell this software and its +dnl documentation for any purpose is hereby granted without fee, provided that +dnl the above copyright notice appear in all copies and that both that +dnl copyright notice and this permission notice appear in supporting +dnl documentation. +dnl +dnl The above copyright notice and this permission notice shall be included +dnl in all copies or substantial portions of the Software. +dnl +dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +dnl IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR +dnl OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +dnl ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +dnl OTHER DEALINGS IN THE SOFTWARE. +dnl +dnl Except as contained in this notice, the name of the copyright holders shall +dnl not be used in advertising or otherwise to promote the sale, use or +dnl other dealings in this Software without prior written authorization +dnl from the copyright holders. +dnl -# serial 4 +# XORG_RELEASE_VERSION +# -------------------- +# Adds --with/without-release-string and changes the PACKAGE and +# PACKAGE_TARNAME to use "$PACKAGE{_TARNAME}-$RELEASE_VERSION". If +# no option is given, PACKAGE and PACKAGE_TARNAME are unchanged. Also +# defines PACKAGE_VERSION_{MAJOR,MINOR,PATCHLEVEL} for modules to use. + +AC_DEFUN([XORG_RELEASE_VERSION],[ + AC_ARG_WITH(release-version, + AC_HELP_STRING([--with-release-version=STRING], + [Use release version string in package name]), + [RELEASE_VERSION="$withval"], + [RELEASE_VERSION=""]) + if test "x$RELEASE_VERSION" != "x"; then + PACKAGE="$PACKAGE-$RELEASE_VERSION" + PACKAGE_TARNAME="$PACKAGE_TARNAME-$RELEASE_VERSION" + AC_MSG_NOTICE([Building with package name set to $PACKAGE]) + fi + AC_DEFINE_UNQUOTED([PACKAGE_VERSION_MAJOR], + [`echo $PACKAGE_VERSION | cut -d . -f 1`], + [Major version of this package]) + PVM=`echo $PACKAGE_VERSION | cut -d . -f 2` + if test "x$PVM" = "x"; then + PVM="0" + fi + AC_DEFINE_UNQUOTED([PACKAGE_VERSION_MINOR], + [$PVM], + [Minor version of this package]) + PVP=`echo $PACKAGE_VERSION | cut -d . -f 3` + if test "x$PVP" = "x"; then + PVP="0" + fi + AC_DEFINE_UNQUOTED([PACKAGE_VERSION_PATCHLEVEL], + [$PVP], + [Patch version of this package]) +]) -AC_DEFUN([AM_MAINTAINER_MODE], -[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) - dnl maintainer-mode is disabled by default - AC_ARG_ENABLE(maintainer-mode, -[ --enable-maintainer-mode enable make rules and dependencies not useful - (and sometimes confusing) to the casual installer], - USE_MAINTAINER_MODE=$enableval, - USE_MAINTAINER_MODE=no) - AC_MSG_RESULT([$USE_MAINTAINER_MODE]) - AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes]) - MAINT=$MAINTAINER_MODE_TRUE - AC_SUBST(MAINT)dnl -] -) +dnl $XdotOrg: lib/xtrans/xtrans.m4,v 1.6 2005/07/26 18:59:11 alanc Exp $ +dnl +dnl Copyright 2005 Sun Microsystems, Inc. All rights reserved. +dnl +dnl Permission to use, copy, modify, distribute, and sell this software and its +dnl documentation for any purpose is hereby granted without fee, provided that +dnl the above copyright notice appear in all copies and that both that +dnl copyright notice and this permission notice appear in supporting +dnl documentation. +dnl +dnl The above copyright notice and this permission notice shall be included +dnl in all copies or substantial portions of the Software. +dnl +dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +dnl IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR +dnl OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +dnl ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +dnl OTHER DEALINGS IN THE SOFTWARE. +dnl +dnl Except as contained in this notice, the name of the copyright holders shall +dnl not be used in advertising or otherwise to promote the sale, use or +dnl other dealings in this Software without prior written authorization +dnl from the copyright holders. +dnl -AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) +# XTRANS_TCP_FLAGS() +# ------------------ +# Find needed libraries for TCP sockets, and check for IPv6 support +AC_DEFUN([XTRANS_TCP_FLAGS],[ + # SVR4 hides these in libraries other than libc + AC_SEARCH_LIBS(socket, [socket]) + AC_SEARCH_LIBS(gethostbyname, [nsl]) -# Check to see how 'make' treats includes. -*- Autoconf -*- + # Needs to come after above checks for libsocket & libnsl for SVR4 systems + AC_ARG_ENABLE(ipv6, + AC_HELP_STRING([--enable-IPv6],[Enable IPv6 support]), + [IPV6CONN=$enableval], + [AC_CHECK_FUNC(getaddrinfo,[IPV6CONN=yes],[IPV6CONN=no])]) + AC_MSG_CHECKING([if IPv6 support should be built]) + if test "$IPV6CONN" = "yes"; then + AC_DEFINE(IPv6,1,[Support IPv6 for TCP connections]) + fi + AC_MSG_RESULT($IPV6CONN) -# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. + # 4.3BSD-Reno added a new member to struct sockaddr_in + AC_CHECK_MEMBER([struct sockaddr_in.sin_len], + AC_DEFINE([BSD44SOCKETS],1, + [Define to 1 if `struct sockaddr_in' has a `sin_len' member]), [], [ +#include +#include +#include + ]) +]) # XTRANS_TCP_FLAGS + +# XTRANS_CONNECTION_FLAGS() +# ------------------------- +# Standard checks for which Xtrans transports to use by the Xorg packages +# that use Xtrans functions +AC_DEFUN([XTRANS_CONNECTION_FLAGS],[ + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AC_TYPE_SIGNAL]) + AC_ARG_ENABLE(unix-transport, + AC_HELP_STRING([--enable-unix-transport],[Enable UNIX domain socket transport]), + [UNIXCONN=$enableval], [UNIXCONN=yes]) + AC_ARG_ENABLE(tcp-transport, + AC_HELP_STRING([--enable-tcp-transport],[Enable TCP socket transport]), + [TCPCONN=$enableval], [TCPCONN=yes]) + AC_MSG_CHECKING([if Xtrans should support UNIX socket connections]) + if test "$UNIXCONN" = "yes"; then + AC_DEFINE(UNIXCONN,1,[Support UNIX socket connections]) + fi + AC_MSG_RESULT($UNIXCONN) + AC_MSG_CHECKING([if Xtrans should support TCP socket connections]) + AC_MSG_RESULT($TCPCONN) + if test "$TCPCONN" = "yes"; then + AC_DEFINE(TCPCONN,1,[Support TCP socket connections]) + XTRANS_TCP_FLAGS + fi + [case $host_os in + solaris*|sco*|sysv4*) localdef="yes" ;; + *) localdef="no" ;; + esac] + AC_ARG_ENABLE(local-transport, + AC_HELP_STRING([--enable-local-transport],[Enable os-specific local transport]), + [LOCALCONN=$enableval], [LOCALCONN=$localdef]) + AC_MSG_CHECKING([if Xtrans should support os-specific local connections]) + AC_MSG_RESULT($LOCALCONN) + if test "$LOCALCONN" = "yes"; then + AC_DEFINE(LOCALCONN,1,[Support os-specific local connections]) + fi + +]) # XTRANS_CONNECTION_FLAGS + + +# XTRANS_SECURE_RPC_FLAGS() +# ------------------------- +# Check for Secure RPC functions - must come after XTRANS_TCP_FLAGS +# so that any necessary networking libraries are already found +AC_DEFUN([XTRANS_SECURE_RPC_FLAGS], +[AC_REQUIRE([XTRANS_TCP_FLAGS]) + AC_ARG_ENABLE(secure-rpc, + AC_HELP_STRING([--enable-secure-rpc],[Enable Secure RPC]), + [SECURE_RPC=$enableval], [SECURE_RPC="try"]) + + if test "x$SECURE_RPC" = "xyes" -o "x$SECURE_RPC" = "xtry" ; then + FOUND_SECURE_RPC="no" + AC_CHECK_FUNCS([authdes_seccreate authdes_create], + [FOUND_SECURE_RPC="yes"]) + if test "x$FOUND_SECURE_RPC" = "xno" ; then + if test "x$SECURE_RPC" = "xyes" ; then + AC_MSG_ERROR([Secure RPC requested, but required functions not found]) + fi + SECURE_RPC="no" + else + dnl FreeBSD keeps getsecretkey in librpcsvc + AC_SEARCH_LIBS(getsecretkey, [rpcsvc]) + SECURE_RPC="yes" + fi + fi + AC_MSG_CHECKING([if Secure RPC authentication ("SUN-DES-1") should be supported]) + if test "x$SECURE_RPC" = "xyes" ; then + AC_DEFINE(SECURE_RPC, 1, [Support Secure RPC ("SUN-DES-1") authentication for X11 clients]) + fi + AC_MSG_RESULT($SECURE_RPC) +]) # XTRANS_SECURE_RPC_FLAGS + + +# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 3 +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"]) -# AM_MAKE_INCLUDE() -# ----------------- -# Check to see how make treats includes. -AC_DEFUN([AM_MAKE_INCLUDE], -[am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo done -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -AC_MSG_CHECKING([for style of include used by $am_make]) -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# We grep out `Entering directory' and `Leaving directory' -# messages which can occur if `w' ends up in MAKEFLAGS. -# In particular we don't look at `^make:' because GNU make might -# be invoked under some other name (usually "gmake"), in which -# case it prints its new name instead of `make'. -if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then - am__include=include - am__quote= - _am_result=GNU -fi -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then - am__include=.include - am__quote="\"" - _am_result=BSD - fi -fi -AC_SUBST([am__include]) -AC_SUBST([am__quote]) -AC_MSG_RESULT([$_am_result]) -rm -f confinc confmf -]) +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION so it can be traced. +# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], + [AM_AUTOMAKE_VERSION([1.9.6])]) -# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- +# Figure out how to run the assembler. -*- Autoconf -*- -# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005 -# Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2004, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -7129,732 +7392,862 @@ # serial 4 -# AM_MISSING_PROG(NAME, PROGRAM) -# ------------------------------ -AC_DEFUN([AM_MISSING_PROG], -[AC_REQUIRE([AM_MISSING_HAS_RUN]) -$1=${$1-"${am_missing_run}$2"} -AC_SUBST($1)]) +# AM_PROG_AS +# ---------- +AC_DEFUN([AM_PROG_AS], +[# By default we simply use the C compiler to build assembly code. +AC_REQUIRE([AC_PROG_CC]) +test "${CCAS+set}" = set || CCAS=$CC +test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS +AC_ARG_VAR([CCAS], [assembler compiler command (defaults to CC)]) +AC_ARG_VAR([CCASFLAGS], [assembler compiler flags (defaults to CFLAGS)]) +]) +# AM_AUX_DIR_EXPAND -*- Autoconf -*- -# AM_MISSING_HAS_RUN -# ------------------ -# Define MISSING if not defined so far and test if it supports --run. -# If it does, set am_missing_run to use it, otherwise, to nothing. -AC_DEFUN([AM_MISSING_HAS_RUN], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - AC_MSG_WARN([`missing' script is too old or missing]) -fi -]) - -# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# AM_PROG_MKDIR_P -# --------------- -# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise. +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. # -# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories -# created by `make install' are always world readable, even if the -# installer happens to have an overly restrictive umask (e.g. 077). -# This was a mistake. There are at least two reasons why we must not -# use `-m 0755': -# - it causes special bits like SGID to be ignored, -# - it may be too restrictive (some setups expect 775 directories). +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. # -# Do not use -m 0755 and let people choose whatever they expect by -# setting umask. +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir # -# We cannot accept any implementation of `mkdir' that recognizes `-p'. -# Some implementations (such as Solaris 8's) are not thread-safe: if a -# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c' -# concurrently, both version can detect that a/ is missing, but only -# one can create it and the other will error out. Consequently we -# restrict ourselves to GNU make (using the --version option ensures -# this.) -AC_DEFUN([AM_PROG_MKDIR_P], -[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then - # We used to keeping the `.' as first argument, in order to - # allow $(mkdir_p) to be used without argument. As in - # $(mkdir_p) $(somedir) - # where $(somedir) is conditionally defined. However this is wrong - # for two reasons: - # 1. if the package is installed by a user who cannot write `.' - # make install will fail, - # 2. the above comment should most certainly read - # $(mkdir_p) $(DESTDIR)$(somedir) - # so it does not work when $(somedir) is undefined and - # $(DESTDIR) is not. - # To support the latter case, we have to write - # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), - # so the `.' trick is pointless. - mkdir_p='mkdir -p --' -else - # On NextStep and OpenStep, the `mkdir' command does not - # recognize any option. It will interpret all options as - # directories to create, and then abort because `.' already - # exists. - for d in ./-p ./--version; - do - test -d $d && rmdir $d - done - # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. - if test -f "$ac_aux_dir/mkinstalldirs"; then - mkdir_p='$(mkinstalldirs)' - else - mkdir_p='$(install_sh) -d' - fi -fi -AC_SUBST([mkdir_p])]) - -# Helper functions for option handling. -*- Autoconf -*- - -# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. # -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 3 - -# _AM_MANGLE_OPTION(NAME) -# ----------------------- -AC_DEFUN([_AM_MANGLE_OPTION], -[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) - -# _AM_SET_OPTION(NAME) -# ------------------------------ -# Set option NAME. Presently that only means defining a flag for this option. -AC_DEFUN([_AM_SET_OPTION], -[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) - -# _AM_SET_OPTIONS(OPTIONS) -# ---------------------------------- -# OPTIONS is a space-separated list of Automake options. -AC_DEFUN([_AM_SET_OPTIONS], -[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. -# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) -# ------------------------------------------- -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -AC_DEFUN([_AM_IF_OPTION], -[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) -# Check to make sure that the build environment is sane. -*- Autoconf -*- +# AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 4 - -# AM_SANITY_CHECK -# --------------- -AC_DEFUN([AM_SANITY_CHECK], -[AC_MSG_CHECKING([whether build environment is sane]) -# Just in case -sleep 1 -echo timestamp > conftest.file -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` - if test "$[*]" = "X"; then - # -L didn't work. - set X `ls -t $srcdir/configure conftest.file` - fi - rm -f conftest.file - if test "$[*]" != "X $srcdir/configure conftest.file" \ - && test "$[*]" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken -alias in your environment]) - fi +# serial 7 - test "$[2]" = conftest.file - ) -then - # Ok. - : +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE]) +AC_SUBST([$1_FALSE]) +if $2; then + $1_TRUE= + $1_FALSE='#' else - AC_MSG_ERROR([newly created file is older than distributed files! -Check your system clock]) + $1_TRUE='#' + $1_FALSE= fi -AC_MSG_RESULT(yes)]) +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# AM_PROG_INSTALL_STRIP -# --------------------- -# One issue with vendor `install' (even GNU) is that you can't -# specify the program used to strip binaries. This is especially -# annoying in cross-compiling environments, where the build's strip -# is unlikely to handle the host's binaries. -# Fortunately install-sh will honor a STRIPPROG variable, so we -# always use install-sh in `make install-strip', and initialize -# STRIPPROG with the value of the STRIP variable (set by the user). -AC_DEFUN([AM_PROG_INSTALL_STRIP], -[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -dnl Don't test for $cross_compiling = yes, because it might be `maybe'. -if test "$cross_compiling" != no; then - AC_CHECK_TOOL([STRIP], [strip], :) -fi -INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" -AC_SUBST([INSTALL_STRIP_PROGRAM])]) - -# Check how to create a tarball. -*- Autoconf -*- +# serial 8 -# Copyright (C) 2004, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... -# serial 2 -# _AM_PROG_TAR(FORMAT) -# -------------------- -# Check how to create a tarball in format FORMAT. -# FORMAT should be one of `v7', `ustar', or `pax'. -# -# Substitute a variable $(am__tar) that is a command -# writing to stdout a FORMAT-tarball containing the directory -# $tardir. -# tardir=directory && $(am__tar) > result.tar +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. # -# Substitute a variable $(am__untar) that extract such -# a tarball read from stdin. -# $(am__untar) < result.tar -AC_DEFUN([_AM_PROG_TAR], -[# Always define AMTAR for backward compatibility. -AM_MISSING_PROG([AMTAR], [tar]) -m4_if([$1], [v7], - [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], - [m4_case([$1], [ustar],, [pax],, - [m4_fatal([Unknown tar format])]) -AC_MSG_CHECKING([how to create a $1 tar archive]) -# Loop over all known methods to create a tar archive until one works. -_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' -_am_tools=${am_cv_prog_tar_$1-$_am_tools} -# Do not fold the above two line into one, because Tru64 sh and -# Solaris sh will not grok spaces in the rhs of `-'. -for _am_tool in $_am_tools -do - case $_am_tool in - gnutar) - for _am_tar in tar gnutar gtar; - do - AM_RUN_LOG([$_am_tar --version]) && break - done - am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' - am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' - am__untar="$_am_tar -xf -" - ;; - plaintar) - # Must skip GNU tar: if it does not support --format= it doesn't create - # ustar tarball either. - (tar --version) >/dev/null 2>&1 && continue - am__tar='tar chf - "$$tardir"' - am__tar_='tar chf - "$tardir"' - am__untar='tar xf -' - ;; - pax) - am__tar='pax -L -x $1 -w "$$tardir"' - am__tar_='pax -L -x $1 -w "$tardir"' - am__untar='pax -r' - ;; - cpio) - am__tar='find "$$tardir" -print | cpio -o -H $1 -L' - am__tar_='find "$tardir" -print | cpio -o -H $1 -L' - am__untar='cpio -i -H $1 -d' - ;; - none) - am__tar=false - am__tar_=false - am__untar=false - ;; - esac +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl - # If the value was cached, stop now. We just wanted to have am__tar - # and am__untar set. - test -n "${am_cv_prog_tar_$1}" && break +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) - # tar/untar a dummy directory, and stop if the command works - rm -rf conftest.dir +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. mkdir conftest.dir - echo GrepMe > conftest.dir/file - AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) - rm -rf conftest.dir - if test -s conftest.tar; then - AM_RUN_LOG([$am__untar /dev/null 2>&1 && break - fi -done -rm -rf conftest.dir - -AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) -AC_MSG_RESULT([$am_cv_prog_tar_$1])]) -AC_SUBST([am__tar]) -AC_SUBST([am__untar]) -]) # _AM_PROG_TAR + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub -dnl $Id: xorg-macros.m4,v 1.7 2005/12/09 03:01:09 kem Exp $ -dnl -dnl Copyright 2005 Sun Microsystems, Inc. All rights reserved. -dnl -dnl Permission to use, copy, modify, distribute, and sell this software and its -dnl documentation for any purpose is hereby granted without fee, provided that -dnl the above copyright notice appear in all copies and that both that -dnl copyright notice and this permission notice appear in supporting -dnl documentation. -dnl -dnl The above copyright notice and this permission notice shall be included -dnl in all copies or substantial portions of the Software. -dnl -dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -dnl IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR -dnl OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -dnl ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -dnl OTHER DEALINGS IN THE SOFTWARE. -dnl -dnl Except as contained in this notice, the name of the copyright holders shall -dnl not be used in advertising or otherwise to promote the sale, use or -dnl other dealings in this Software without prior written authorization -dnl from the copyright holders. -dnl + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf -# XORG_PROG_RAWCPP() -# ------------------ -# Find cpp program and necessary flags for use in pre-processing text files -# such as man pages and config files -AC_DEFUN([XORG_PROG_RAWCPP],[ -AC_REQUIRE([AC_PROG_CPP]) -AC_PATH_PROGS(RAWCPP, [cpp], [${CPP}], - [$PATH:/bin:/usr/bin:/usr/lib:/usr/libexec:/usr/ccs/lib:/usr/ccs/lbin:/lib]) + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done -# Check for flag to avoid builtin definitions - assumes unix is predefined, -# which is not the best choice for supporting other OS'es, but covers most -# of the ones we need for now. -AC_MSG_CHECKING([if $RAWCPP requires -undef]) -AC_LANG_CONFTEST([Does cpp redefine unix ?]) -if test `${RAWCPP} < conftest.$ac_ext | grep -c 'unix'` -eq 1 ; then - AC_MSG_RESULT([no]) + cd .. + rm -rf conftest.dir else - if test `${RAWCPP} -undef < conftest.$ac_ext | grep -c 'unix'` -eq 1 ; then - RAWCPPFLAGS=-undef - AC_MSG_RESULT([yes]) - else - AC_MSG_ERROR([${RAWCPP} defines unix with or without -undef. I don't know what to do.]) - fi + am_cv_$1_dependencies_compiler_type=none fi -rm -f conftest.$ac_ext +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) -AC_MSG_CHECKING([if $RAWCPP requires -traditional]) -AC_LANG_CONFTEST([Does cpp preserve "whitespace"?]) -if test `${RAWCPP} < conftest.$ac_ext | grep -c 'preserve \"'` -eq 1 ; then - AC_MSG_RESULT([no]) -else - if test `${RAWCPP} -traditional < conftest.$ac_ext | grep -c 'preserve \"'` -eq 1 ; then - RAWCPPFLAGS="${RAWCPPFLAGS} -traditional" - AC_MSG_RESULT([yes]) - else - AC_MSG_ERROR([${RAWCPP} does not preserve whitespace with or without -traditional. I don't know what to do.]) - fi -fi -rm -f conftest.$ac_ext -AC_SUBST(RAWCPPFLAGS) -]) # XORG_PROG_RAWCPP -# XORG_MANPAGE_SECTIONS() -# ----------------------- -# Determine which sections man pages go in for the different man page types -# on this OS - replaces *ManSuffix settings in old Imake *.cf per-os files. -# Not sure if there's any better way than just hardcoding by OS name. -# Override default settings by setting environment variables +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) -AC_DEFUN([XORG_MANPAGE_SECTIONS],[ -AC_REQUIRE([AC_CANONICAL_HOST]) -if test x$APP_MAN_SUFFIX = x ; then - case $host_os in - linux*) APP_MAN_SUFFIX=1x ;; - *) APP_MAN_SUFFIX=1 ;; - esac -fi -if test x$APP_MAN_DIR = x ; then - case $host_os in - linux*) APP_MAN_DIR='$(mandir)/man1' ;; - *) APP_MAN_DIR='$(mandir)/man$(APP_MAN_SUFFIX)' ;; - esac -fi - -if test x$LIB_MAN_SUFFIX = x ; then - case $host_os in - linux*) LIB_MAN_SUFFIX=3x ;; - *) LIB_MAN_SUFFIX=3 ;; - esac -fi -if test x$LIB_MAN_DIR = x ; then - case $host_os in - linux*) LIB_MAN_DIR='$(mandir)/man3' ;; - *) LIB_MAN_DIR='$(mandir)/man$(LIB_MAN_SUFFIX)' ;; - esac -fi - -if test x$FILE_MAN_SUFFIX = x ; then - case $host_os in - linux*) FILE_MAN_SUFFIX=5x ;; - solaris*) FILE_MAN_SUFFIX=4 ;; - *) FILE_MAN_SUFFIX=5 ;; - esac -fi -if test x$FILE_MAN_DIR = x ; then - case $host_os in - linux*) FILE_MAN_DIR='$(mandir)/man5' ;; - *) FILE_MAN_DIR='$(mandir)/man$(FILE_MAN_SUFFIX)' ;; - esac -fi - -# In Imake's linux.cf, the misc man suffix & dir was only changed for -# LinuxDebian, not other Linuxes, so we leave it unchanged here -if test x$MISC_MAN_SUFFIX = x ; then - case $host_os in -# linux*) MISC_MAN_SUFFIX=7x ;; - solaris*) MISC_MAN_SUFFIX=5 ;; - *) MISC_MAN_SUFFIX=7 ;; - esac -fi -if test x$MISC_MAN_DIR = x ; then - case $host_os in -# linux*) MISC_MAN_DIR='$(mandir)/man7' ;; - *) MISC_MAN_DIR='$(mandir)/man$(MISC_MAN_SUFFIX)' ;; - esac +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH]) +]) -# In Imake's linux.cf, the driver man suffix & dir was only changed for -# LinuxDebian, not other Linuxes, so we leave it unchanged here -if test x$DRIVER_MAN_SUFFIX = x ; then - case $host_os in -# linux*) DRIVER_MAN_SUFFIX=4x ;; - solaris*) DRIVER_MAN_SUFFIX=7 ;; - *) DRIVER_MAN_SUFFIX=4 ;; - esac -fi -if test x$DRIVER_MAN_DIR = x ; then - case $host_os in -# linux*) DRIVER_MAN_DIR='$(mandir)/man4' ;; - *) DRIVER_MAN_DIR='$(mandir)/man$(DRIVER_MAN_SUFFIX)' ;; - esac -fi +# Generate code to set up dependency tracking. -*- Autoconf -*- -if test x$ADMIN_MAN_SUFFIX = x ; then - case $host_os in - solaris*) ADMIN_MAN_SUFFIX=1m ;; - *) ADMIN_MAN_SUFFIX=8 ;; - esac -fi -if test x$ADMIN_MAN_DIR = x ; then - ADMIN_MAN_DIR='$(mandir)/man$(ADMIN_MAN_SUFFIX)' -fi +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. +#serial 3 -AC_SUBST([APP_MAN_SUFFIX]) -AC_SUBST([LIB_MAN_SUFFIX]) -AC_SUBST([FILE_MAN_SUFFIX]) -AC_SUBST([MISC_MAN_SUFFIX]) -AC_SUBST([DRIVER_MAN_SUFFIX]) -AC_SUBST([ADMIN_MAN_SUFFIX]) -AC_SUBST([APP_MAN_DIR]) -AC_SUBST([LIB_MAN_DIR]) -AC_SUBST([FILE_MAN_DIR]) -AC_SUBST([MISC_MAN_DIR]) -AC_SUBST([DRIVER_MAN_DIR]) -AC_SUBST([ADMIN_MAN_DIR]) -]) # XORG_MANPAGE_SECTIONS +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # So let's grep whole file. + if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done +])# _AM_OUTPUT_DEPENDENCY_COMMANDS -# XORG_CHECK_LINUXDOC -# ------------------- -# Defines the variable MAKE_TEXT if the necessary tools and -# files are found. $(MAKE_TEXT) blah.sgml will then produce blah.txt. -# Whether or not the necessary tools and files are found can be checked -# with the AM_CONDITIONAL "BUILD_LINUXDOC" -AC_DEFUN([XORG_CHECK_LINUXDOC],[ -AC_CHECK_FILE( - [$prefix/share/X11/sgml/defs.ent], - [DEFS_ENT_PATH=$prefix/share/X11/sgml], - [DEFS_ENT_PATH=] -) -AC_PATH_PROG(LINUXDOC, linuxdoc) -AC_PATH_PROG(PS2PDF, ps2pdf) +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) -AC_MSG_CHECKING([Whether to build documentation]) +# Do all the work for Automake. -*- Autoconf -*- -if test x$DEFS_ENT_PATH != x && test x$LINUXDOC != x ; then - BUILDDOC=yes -else - BUILDDOC=no -fi +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. -AM_CONDITIONAL(BUILD_LINUXDOC, [test x$BUILDDOC = xyes]) +# serial 12 -AC_MSG_RESULT([$BUILDDOC]) +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. -AC_MSG_CHECKING([Whether to build pdf documentation]) +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.58])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +# test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && + test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +fi -if test x$PS2PDF != x ; then - BUILDPDFDOC=yes -else - BUILDPDFDOC=no +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi fi +AC_SUBST([CYGPATH_W]) -AM_CONDITIONAL(BUILD_PDFDOC, [test x$BUILDPDFDOC = xyes]) +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl -AC_MSG_RESULT([$BUILDPDFDOC]) +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl -MAKE_TEXT="SGML_SEARCH_PATH=$DEFS_ENT_PATH GROFF_NO_SGR=y $LINUXDOC -B txt" -MAKE_PS="SGML_SEARCH_PATH=$DEFS_ENT_PATH $LINUXDOC -B latex --papersize=letter --output=ps" -MAKE_PDF="$PS2PDF" -MAKE_HTML="SGML_SEARCH_PATH=$DEFS_ENT_PATH $LINUXDOC -B html --split=0" +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AM_PROG_INSTALL_SH +AM_PROG_INSTALL_STRIP +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +]) +]) -AC_SUBST(MAKE_TEXT) -AC_SUBST(MAKE_PS) -AC_SUBST(MAKE_PDF) -AC_SUBST(MAKE_HTML) -]) # XORG_CHECK_LINUXDOC -# XORG_CHECK_MALLOC_ZERO -# ---------------------- -# Defines {MALLOC,XMALLOC,XTMALLOC}_ZERO_CFLAGS appropriately if -# malloc(0) returns NULL. Packages should add one of these cflags to -# their AM_CFLAGS (or other appropriate *_CFLAGS) to use them. -AC_DEFUN([XORG_CHECK_MALLOC_ZERO],[ -AC_ARG_ENABLE(malloc0returnsnull, - AC_HELP_STRING([--enable-malloc0returnsnull], - [malloc(0) returns NULL (default: auto)]), - [MALLOC_ZERO_RETURNS_NULL=$enableval], - [MALLOC_ZERO_RETURNS_NULL=auto]) +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. -AC_MSG_CHECKING([whether malloc(0) returns NULL]) -if test "x$MALLOC_ZERO_RETURNS_NULL" = xauto; then - AC_RUN_IFELSE([ -char *malloc(); -char *realloc(); -char *calloc(); -main() { - char *m0, *r0, *c0, *p; - m0 = malloc(0); - p = malloc(10); - r0 = realloc(p,0); - c0 = calloc(0); - exit(m0 == 0 || r0 == 0 || c0 == 0 ? 0 : 1); -}], - [MALLOC_ZERO_RETURNS_NULL=yes], - [MALLOC_ZERO_RETURNS_NULL=no]) -fi -AC_MSG_RESULT([$MALLOC_ZERO_RETURNS_NULL]) +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $1 | $1:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) -if test "x$MALLOC_ZERO_RETURNS_NULL" = xyes; then - MALLOC_ZERO_CFLAGS="-DMALLOC_0_RETURNS_NULL" - XMALLOC_ZERO_CFLAGS=$MALLOC_ZERO_CFLAGS - XTMALLOC_ZERO_CFLAGS="$MALLOC_ZERO_CFLAGS -DXTMALLOC_BC" -else - MALLOC_ZERO_CFLAGS="" - XMALLOC_ZERO_CFLAGS="" - XTMALLOC_ZERO_CFLAGS="" -fi +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. -AC_SUBST([MALLOC_ZERO_CFLAGS]) -AC_SUBST([XMALLOC_ZERO_CFLAGS]) -AC_SUBST([XTMALLOC_ZERO_CFLAGS]) -]) # XORG_CHECK_MALLOC_ZERO +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +install_sh=${install_sh-"$am_aux_dir/install-sh"} +AC_SUBST(install_sh)]) -dnl Copyright 2005 Red Hat, Inc -dnl -dnl Permission to use, copy, modify, distribute, and sell this software and its -dnl documentation for any purpose is hereby granted without fee, provided that -dnl the above copyright notice appear in all copies and that both that -dnl copyright notice and this permission notice appear in supporting -dnl documentation. -dnl -dnl The above copyright notice and this permission notice shall be included -dnl in all copies or substantial portions of the Software. -dnl -dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -dnl IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR -dnl OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -dnl ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -dnl OTHER DEALINGS IN THE SOFTWARE. -dnl -dnl Except as contained in this notice, the name of the copyright holders shall -dnl not be used in advertising or otherwise to promote the sale, use or -dnl other dealings in this Software without prior written authorization -dnl from the copyright holders. -dnl +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. -# XORG_RELEASE_VERSION -# -------------------- -# Adds --with/without-release-string and changes the PACKAGE and -# PACKAGE_TARNAME to use "$PACKAGE{_TARNAME}-$RELEASE_VERSION". If -# no option is given, PACKAGE and PACKAGE_TARNAME are unchanged. - -AC_DEFUN([XORG_RELEASE_VERSION],[ - AC_ARG_WITH(release-version, - AC_HELP_STRING([--with-release-version=STRING], - [Use release version string in package name]), - [RELEASE_VERSION="$withval"], - [RELEASE_VERSION=""]) - if test "x$RELEASE_VERSION" != "x"; then - PACKAGE="$PACKAGE-$RELEASE_VERSION" - PACKAGE_TARNAME="$PACKAGE_TARNAME-$RELEASE_VERSION" - AC_MSG_NOTICE([Building with package name set to $PACKAGE]) - fi -]) +# serial 2 -dnl $XdotOrg: lib/xtrans/xtrans.m4,v 1.8 2005/08/17 19:10:49 anholt Exp $ -dnl -dnl Copyright 2005 Sun Microsystems, Inc. All rights reserved. -dnl -dnl Permission to use, copy, modify, distribute, and sell this software and its -dnl documentation for any purpose is hereby granted without fee, provided that -dnl the above copyright notice appear in all copies and that both that -dnl copyright notice and this permission notice appear in supporting -dnl documentation. -dnl -dnl The above copyright notice and this permission notice shall be included -dnl in all copies or substantial portions of the Software. -dnl -dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -dnl IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR -dnl OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -dnl ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -dnl OTHER DEALINGS IN THE SOFTWARE. -dnl -dnl Except as contained in this notice, the name of the copyright holders shall -dnl not be used in advertising or otherwise to promote the sale, use or -dnl other dealings in this Software without prior written authorization -dnl from the copyright holders. -dnl +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) -# XTRANS_TCP_FLAGS() -# ------------------ -# Find needed libraries for TCP sockets, and check for IPv6 support -AC_DEFUN([XTRANS_TCP_FLAGS],[ - # SVR4 hides these in libraries other than libc - AC_SEARCH_LIBS(socket, [socket]) - AC_SEARCH_LIBS(gethostbyname, [nsl]) +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- +# From Jim Meyering - # Needs to come after above checks for libsocket & libnsl for SVR4 systems - AC_ARG_ENABLE(ipv6, - AC_HELP_STRING([--enable-IPv6],[Enable IPv6 support]), - [IPV6CONN=$enableval], - [AC_CHECK_FUNC(getaddrinfo,[IPV6CONN=yes],[IPV6CONN=no])]) - AC_MSG_CHECKING([if IPv6 support should be built]) - if test "$IPV6CONN" = "yes"; then - AC_DEFINE(IPv6,1,[Support IPv6 for TCP connections]) - fi - AC_MSG_RESULT($IPV6CONN) +# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. - # 4.3BSD-Reno added a new member to struct sockaddr_in - AC_CHECK_MEMBER([struct sockaddr_in.sin_len], - AC_DEFINE([BSD44SOCKETS],1, - [Define to 1 if `struct sockaddr_in' has a `sin_len' member]), [], [ -#include -#include -#include - ]) -]) # XTRANS_TCP_FLAGS +# serial 4 -# XTRANS_CONNECTION_FLAGS() -# ------------------------- -# Standard checks for which Xtrans transports to use by the Xorg packages -# that use Xtrans functions -AC_DEFUN([XTRANS_CONNECTION_FLAGS], -[AC_REQUIRE([AC_TYPE_SIGNAL]) - AC_ARG_ENABLE(unix-transport, - AC_HELP_STRING([--enable-unix-transport],[Enable UNIX domain socket transport]), - [UNIXCONN=$enableval], [UNIXCONN=yes]) - AC_ARG_ENABLE(tcp-transport, - AC_HELP_STRING([--enable-tcp-transport],[Enable TCP socket transport]), - [TCPCONN=$enableval], [TCPCONN=yes]) - AC_MSG_CHECKING([if Xtrans should support UNIX socket connections]) - if test "$UNIXCONN" = "yes"; then - AC_DEFINE(UNIXCONN,1,[Support UNIX socket connections]) - fi - AC_MSG_RESULT($UNIXCONN) - AC_MSG_CHECKING([if Xtrans should support TCP socket connections]) - AC_MSG_RESULT($TCPCONN) - if test "$TCPCONN" = "yes"; then - AC_DEFINE(TCPCONN,1,[Support TCP socket connections]) - XTRANS_TCP_FLAGS - fi -]) # XTRANS_CONNECTION_FLAGS +AC_DEFUN([AM_MAINTAINER_MODE], +[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode is disabled by default + AC_ARG_ENABLE(maintainer-mode, +[ --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer], + USE_MAINTAINER_MODE=$enableval, + USE_MAINTAINER_MODE=no) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST(MAINT)dnl +] +) +AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) -# XTRANS_SECURE_RPC_FLAGS() -# ------------------------- -# Check for Secure RPC functions - must come after XTRANS_TCP_FLAGS -# so that any necessary networking libraries are already found -AC_DEFUN([XTRANS_SECURE_RPC_FLAGS], -[AC_REQUIRE([XTRANS_TCP_FLAGS]) - AC_ARG_ENABLE(secure-rpc, - AC_HELP_STRING([--enable-secure-rpc],[Enable Secure RPC]), - [SECURE_RPC=$enableval], [SECURE_RPC="try"]) +# Check to see how 'make' treats includes. -*- Autoconf -*- - if test "x$SECURE_RPC" = "xyes" -o "x$SECURE_RPC" = "xtry" ; then - FOUND_SECURE_RPC="no" - AC_CHECK_FUNCS([authdes_seccreate authdes_create], - [FOUND_SECURE_RPC="yes"]) - if test "x$FOUND_SECURE_RPC" = "xno" ; then - if test "x$SECURE_RPC" = "xyes" ; then - AC_MSG_ERROR([Secure RPC requested, but required functions not found]) - fi - SECURE_RPC="no" - else - dnl FreeBSD keeps getsecretkey in librpcsvc - AC_SEARCH_LIBS(getsecretkey, [rpcsvc]) - SECURE_RPC="yes" - fi - fi - AC_MSG_CHECKING([if Secure RPC authentication ("SUN-DES-1") should be supported]) - if test "x$SECURE_RPC" = "xyes" ; then - AC_DEFINE(SECURE_RPC, 1, [Support Secure RPC ("SUN-DES-1") authentication for X11 clients]) - fi - AC_MSG_RESULT($SECURE_RPC) -]) # XTRANS_SECURE_RPC_FLAGS +# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. +# serial 3 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_MKDIR_P +# --------------- +# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise. +# +# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories +# created by `make install' are always world readable, even if the +# installer happens to have an overly restrictive umask (e.g. 077). +# This was a mistake. There are at least two reasons why we must not +# use `-m 0755': +# - it causes special bits like SGID to be ignored, +# - it may be too restrictive (some setups expect 775 directories). +# +# Do not use -m 0755 and let people choose whatever they expect by +# setting umask. +# +# We cannot accept any implementation of `mkdir' that recognizes `-p'. +# Some implementations (such as Solaris 8's) are not thread-safe: if a +# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c' +# concurrently, both version can detect that a/ is missing, but only +# one can create it and the other will error out. Consequently we +# restrict ourselves to GNU make (using the --version option ensures +# this.) +AC_DEFUN([AM_PROG_MKDIR_P], +[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then + # We used to keeping the `.' as first argument, in order to + # allow $(mkdir_p) to be used without argument. As in + # $(mkdir_p) $(somedir) + # where $(somedir) is conditionally defined. However this is wrong + # for two reasons: + # 1. if the package is installed by a user who cannot write `.' + # make install will fail, + # 2. the above comment should most certainly read + # $(mkdir_p) $(DESTDIR)$(somedir) + # so it does not work when $(somedir) is undefined and + # $(DESTDIR) is not. + # To support the latter case, we have to write + # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), + # so the `.' trick is pointless. + mkdir_p='mkdir -p --' +else + # On NextStep and OpenStep, the `mkdir' command does not + # recognize any option. It will interpret all options as + # directories to create, and then abort because `.' already + # exists. + for d in ./-p ./--version; + do + test -d $d && rmdir $d + done + # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. + if test -f "$ac_aux_dir/mkinstalldirs"; then + mkdir_p='$(mkinstalldirs)' + else + mkdir_p='$(install_sh) -d' + fi +fi +AC_SUBST([mkdir_p])]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 3 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of `v7', `ustar', or `pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR m4_include([acinclude.m4])