xserver: Branch 'XACE-SELINUX' - 91 commits

Eamon Walsh ewalsh at kemper.freedesktop.org
Thu Feb 15 19:29:32 EET 2007


 GL/glx/glxbyteorder.h                         |   56 
 GL/glx/glxdri.c                               |    9 
 GL/glx/indirect_dispatch.c                    |    1 
 GL/glx/indirect_dispatch_swap.c               |   14 
 GL/glx/indirect_program.c                     |   15 
 GL/glx/indirect_reqsize.c                     |  736 ++---
 GL/glx/indirect_reqsize.h                     |   18 
 GL/glx/indirect_texture_compression.c         |   15 
 GL/glx/indirect_util.c                        |   18 
 GL/glx/swap_interval.c                        |   15 
 GL/mesa/.gitignore                            |    4 
 GL/mesa/Makefile.am                           |    4 
 GL/mesa/X/Makefile.am                         |    1 
 GL/mesa/X/xf86glx.c                           |    4 
 GL/mesa/array_cache/Makefile.am               |   21 
 GL/mesa/glapi/Makefile.am                     |    1 
 GL/mesa/main/Makefile.am                      |    1 
 GL/mesa/math/Makefile.am                      |    1 
 GL/mesa/shader/Makefile.am                    |    1 
 GL/mesa/shader/grammar/Makefile.am            |    1 
 GL/mesa/shader/slang/Makefile.am              |    1 
 GL/mesa/swrast/Makefile.am                    |    1 
 GL/mesa/swrast_setup/Makefile.am              |    1 
 GL/mesa/tnl/Makefile.am                       |   16 
 GL/mesa/vbo/Makefile.am                       |   35 
 GL/symlink-mesa.sh                            |   20 
 Xext/security.c                               |    4 
 cfb/cfbmskbits.h                              |    3 
 configure.ac                                  |   99 
 damageext/damageext.c                         |   61 
 dbe/dbe.c                                     |   34 
 dix/dixutils.c                                |    6 
 dix/getevents.c                               |   61 
 doc/Xserver.man.pre                           |   19 
 exa/exa.c                                     |  130 -
 exa/exa.h                                     |   12 
 exa/exa_accel.c                               |  120 
 exa/exa_migration.c                           |  223 +
 exa/exa_offscreen.c                           |   71 
 exa/exa_priv.h                                |   31 
 exa/exa_render.c                              |   49 
 exa/exa_unaccel.c                             |   32 
 fb/fbmmx.c                                    |   98 
 fb/fbmmx.h                                    |   12 
 fb/fbpict.c                                   |   18 
 fb/fbpict.h                                   |    3 
 hw/darwin/Makefile.am                         |  353 +-
 hw/darwin/bundle/Dutch.lproj/Makefile.am      |   35 
 hw/darwin/bundle/English.lproj/Makefile.am    |   35 
 hw/darwin/bundle/French.lproj/Makefile.am     |   38 
 hw/darwin/bundle/German.lproj/Makefile.am     |   36 
 hw/darwin/bundle/Info.plist                   |   66 
 hw/darwin/bundle/Japanese.lproj/Makefile.am   |   37 
 hw/darwin/bundle/Makefile.am                  |   38 
 hw/darwin/bundle/Portuguese.lproj/Makefile.am |   36 
 hw/darwin/bundle/Spanish.lproj/Makefile.am    |   36 
 hw/darwin/bundle/Swedish.lproj/Makefile.am    |   36 
 hw/darwin/bundle/ko.lproj/Makefile.am         |   37 
 hw/darwin/darwin.c                            |    8 
 hw/darwin/darwin.h                            |    1 
 hw/darwin/darwinKeyboard.c                    |    2 
 hw/darwin/darwinKeyboard.h                    |    2 
 hw/darwin/iokit/Makefile.am                   |   17 
 hw/darwin/iokit/xfIOKit.c                     |    5 
 hw/darwin/iokit/xfIOKitCursor.c               |    5 
 hw/darwin/iokit/xfIOKitStartup.c              |   11 
 hw/dmx/Makefile.am                            |   24 
 hw/dmx/glxProxy/glxdrawable.h                 |   52 
 hw/dmx/glxProxy/glxserver.h                   |    3 
 hw/kdrive/ephyr/ephyr.c                       |   23 
 hw/vfb/Makefile.am                            |   25 
 hw/vfb/Xvfb.man.pre                           |   13 
 hw/xfree86/common/xf86Mode.c                  |   38 
 hw/xfree86/common/xf86Module.h                |    2 
 hw/xfree86/common/xf86fbman.c                 |   60 
 hw/xfree86/exa/exa.man.pre                    |    2 
 hw/xfree86/fbdevhw/fbdevhw.c                  |  160 -
 hw/xfree86/loader/dlloader.c                  |    4 
 hw/xfree86/loader/loadmod.c                   |    2 
 hw/xfree86/os-support/bus/linuxPci.c          |    3 
 hw/xfree86/os-support/linux/Makefile.am       |   11 
 hw/xfree86/os-support/linux/lnx_ev56.c        |    2 
 hw/xfree86/os-support/xf86_libc.h             |    2 
 hw/xfree86/scanpci/pci.ids                    |  320 ++
 hw/xfree86/scanpci/xf86PciStdIds.h            | 3250 +++++++++++++++++++++++++-
 hw/xfree86/x86emu/ops2.c                      |   72 
 hw/xfree86/xf1bpp/Makefile.am                 |   90 
 hw/xfree86/xf4bpp/Makefile.am                 |    2 
 hw/xnest/Makefile.am                          |   22 
 include/dix-config.h.in                       |   30 
 include/dixevents.h                           |    2 
 include/input.h                               |    2 
 mi/mieq.c                                     |   13 
 mi/mipointer.c                                |   23 
 miext/damage/damage.c                         |  150 -
 miext/damage/damage.h                         |    3 
 miext/damage/damagestr.h                      |    3 
 os/WaitFor.c                                  |    5 
 os/utils.c                                    |   18 
 randr/randr.c                                 |    4 
 randr/randrstr.h                              |   11 
 randr/rrcrtc.c                                |   39 
 randr/rrinfo.c                                |   23 
 randr/rrpointer.c                             |   24 
 randr/rrproperty.c                            |   14 
 randr/rrscreen.c                              |   15 
 randr/rrxinerama.c                            |    6 
 render/render.c                               |   15 
 xkb/xkbUtils.c                                |   25 
 109 files changed, 6179 insertions(+), 1358 deletions(-)

New commits:
diff-tree 04632835b7402456fdcf6c8fa01970cd2804e27c (from parents)
Merge: 88f89b9ac1b92a0916c46488350ff68c3ffdd490 9ecf79ca0111dd899ca88dd54156f71013220fcc
Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
Date:   Thu Feb 15 09:27:05 2007 -0500

    Merge branch 'master' into my-XACE-SELINUX

diff-tree 9ecf79ca0111dd899ca88dd54156f71013220fcc (from 136bb4874aadf4a731d7eb8671e8bb641f9980a7)
Author: Ben Byer <bbyer at apple.com>
Date:   Thu Feb 15 05:22:21 2007 -0800

    Beginnings of an update Darwin driver

diff --git a/hw/darwin/Makefile.am b/hw/darwin/Makefile.am
index 542bfdb..7efd056 100644
--- a/hw/darwin/Makefile.am
+++ b/hw/darwin/Makefile.am
@@ -1,52 +1,249 @@
+noinst_LIBRARIES = libdarwinShared.a
+libdarwin_XINPUT_SRCS = darwinXinput.c
+
+AM_CFLAGS = @XORG_CFLAGS@ @DIX_CFLAGS@
+AM_CPPFLAGS = @XORG_CFLAGS@ @DIX_CFLAGS@
+INCLUDES = @XORG_INCS@
+
+DEFS = @DEFS@ -DUSE_NEW_CLUT
+
+if XQUARTZ
+XQUARTZ_SUBDIRS = bundle quartz
+endif
+
+SUBDIRS = \
+	  iokit \
+	  $(XQUARTZ_SUBDIRS) \
+	  utils \
+	  .
+
+
+darwinappdir = @APPLE_APPLICATIONS_DIR@/XDarwin.app
+
+
+libdarwinShared_a_SOURCES = darwin.c \
+			  darwinEvents.c \
+			  darwinKeyboard.c \
+			  $(darwin_XINPUT_SRCS) 
+
+bin_PROGRAMS = XDarwin
+XDarwin_SOURCES = \
+                  $(top_srcdir)/fb/fbcmap.c \
+                  $(top_srcdir)/mi/miinitext.c \
+                  $(top_srcdir)/Xi/stubs.c
+XDarwin_LDADD = \
+		$(top_builddir)/dix/dixfonts.lo \
+		$(top_builddir)/dix/libdix.la \
+		$(top_builddir)/config/libconfig.a \
+		$(top_builddir)/os/libos.la \
+		./libdarwinShared.a \
+		./iokit/libiokit.a \
+		$(top_builddir)/dix/libxpstubs.la \
+		$(top_builddir)/miext/shadow/libshadow.la \
+		$(top_builddir)/fb/libfb.la \
+		$(top_builddir)/composite/libcomposite.la \
+		$(top_builddir)/damageext/libdamageext.la \
+		$(top_builddir)/miext/damage/libdamage.la \
+		$(top_builddir)/xfixes/libxfixes.la \
+		$(top_builddir)/miext/cw/libcw.la \
+		$(top_builddir)/Xext/libXext.la \
+		$(top_builddir)/xkb/libxkb.la \
+		$(top_builddir)/xkb/libxkbstubs.la \
+		$(top_builddir)/Xi/libXi.la \
+		$(top_builddir)/dbe/libdbe.la \
+		$(top_builddir)/record/librecord.la \
+		$(top_builddir)/XTrap/libxtrap.la \
+		$(XGLX_LIBS) \
+		$(top_builddir)/miext/rootless/librootless.la \
+		$(top_builddir)/miext/rootless/safeAlpha/libsafeAlpha.la \
+		$(top_builddir)/miext/rootless/accel/librlAccel.la \
+		@XORG_LIBS@ \
+		-lXau -lXdmcp -lXfont -lfreetype
+
+XDarwin_LDFLAGS =  \
+		 -XCClinker -Objc \
+		 -Wl,-u,_miDCInitialize \
+		 -Wl,-framework,IOKit
+
+XDarwin_CFLAGS = -DINXDARWIN
+if XQUARTZ
+macosdir = $(darwinappdir)/Contents/MacOS
+
+DEFS += -DDARWIN_WITH_QUARTZ -DXFree86Server
+
+macos_PROGRAMS = XDarwinApp
+
+XDarwinApp_SOURCES = \
+               	$(top_srcdir)/fb/fbcmap.c \
+               	$(top_srcdir)/mi/miinitext.c \
+		$(top_srcdir)/Xi/stubs.c 
+
+XDarwinApp_LDADD = \
+		$(top_builddir)/dix/dixfonts.lo \
+		$(top_builddir)/dix/libdix.la \
+		$(top_builddir)/config/libconfig.a \
+		$(top_builddir)/os/libos.la \
+		./quartz/XApplication.o \
+		./libdarwinShared.a \
+		./quartz/libXQuartz.a \
+		$(top_builddir)/dix/libxpstubs.la \
+		 $(top_builddir)/miext/shadow/libshadow.la \
+		 $(top_builddir)/fb/libfb.la \
+		 $(top_builddir)/composite/libcomposite.la \
+		 $(top_builddir)/damageext/libdamageext.la \
+		 $(top_builddir)/miext/damage/libdamage.la \
+		 $(top_builddir)/xfixes/libxfixes.la \
+		 $(top_builddir)/miext/cw/libcw.la \
+		 $(top_builddir)/Xext/libXext.la \
+		 $(top_builddir)/xkb/libxkb.la \
+		 $(top_builddir)/xkb/libxkbstubs.la \
+		 $(top_builddir)/Xi/libXi.la \
+		 $(top_builddir)/dbe/libdbe.la \
+		 $(top_builddir)/record/librecord.la \
+		 $(top_builddir)/XTrap/libxtrap.la \
+		 $(XGLX_LIBS) \
+		 $(top_builddir)/miext/rootless/librootless.la \
+		 $(top_builddir)/miext/rootless/safeAlpha/libsafeAlpha.la \
+		 $(top_builddir)/miext/rootless/accel/librlAccel.la \
+		 @XORG_LIBS@ \
+		 -lXau -lXdmcp -lXfont -lfreetype \
+		 $(top_builddir)/fb/libfb.la 
+
+XDarwinApp_LDFLAGS =  \
+		 -XCClinker -Objc \
+		 -Wl,-u,_miDCInitialize \
+		 -Wl,-framework,Carbon \
+		 -Wl,-framework,ApplicationServices \
+		 -Wl,-framework,Cocoa \
+		 -Wl,-framework,CoreAudio \
+		 -Wl,-framework,IOKit
+
+HOOK_TARGETS = xquartz-install-hook
+
+
+crplugindir = $(darwinappdir)/Contents/Resources/cr.bundle/Contents/MacOS
+crplugin_LTLIBRARIES = cr.la
+cr_la_SOURCES =
+cr_la_LIBADD = \
+		quartz/cr/crAppleWM.o \
+		quartz/cr/crFrame.o \
+		quartz/cr/crScreen.o \
+		quartz/fullscreen/quartzCursor.o \
+		quartz/cr/XView.o \
+		$(top_builddir)/miext/rootless/librootless.la \
+		$(top_builddir)/miext/rootless/safeAlpha/libsafeAlpha.la \
+		$(top_builddir)/miext/rootless/accel/librlAccel.la
+cr_la_LDFLAGS = -shrext '' -Wl,-framework,ApplicationServices \
+		-Wl,-framework,Cocoa \
+		-Wl,-framework,Carbon \
+		-XCClinker -ObjC \
+		-XCClinker -bundle_loader -XCClinker XDarwinApp \
+		-module -avoid-version -no-undefined
+cr_la_DEPENDENCIES = XDarwinApp	
+
+fullscreenplugindir = $(darwinappdir)/Contents/Resources/fullscreen.bundle/Contents/MacOS
+fullscreenplugin_LTLIBRARIES = fullscreen.la
+fullscreen_la_SOURCES =
+fullscreen_la_LIBADD = \
+		quartz/fullscreen/fullscreen.o \
+		quartz/fullscreen/quartzCursor.o \
+		$(top_builddir)/miext/shadow/libshadow.la
+
+fullscreen_la_LDFLAGS = -shrext '' -Wl,-framework,ApplicationServices \
+		-XCClinker -bundle_loader -XCClinker XDarwinApp \
+		-module -avoid-version -no-undefined
+fullscreen_la_DEPENDENCIES = XDarwinApp	
+
+if GLX
+glxMesaplugindir = $(darwinappdir)/Contents/Resources/glxMesa.bundle/Contents/MacOS
+glxMesaplugin_LTLIBRARIES = glxMesa.la
+glxMesa_la_SOURCES =
+glxMesa_la_LIBADD = \
+		$(top_builddir)/GL/glx/libglx.la \
+		$(top_builddir)/GL/mesa/libGLcore.la 
+glxMesa_la_LDFLAGS = -shrext '' \
+		-Wl,-framework,AGL \
+		-Wl,-framework,OpenGL \
+		-XCClinker -ObjC \
+		-XCClinker -bundle_loader -XCClinker XDarwinApp \
+		-module -avoid-version -no-undefined
+glxMesa_la_DEPENDENCIES = XDarwinApp	
+endif
+
+endif
+if HAVE_X_PLUGIN
+
+xprplugindir = $(darwinappdir)/Contents/Resources/xpr.bundle/Contents/MacOS
+xprplugin_LTLIBRARIES = xpr.la
+xpr_la_SOURCES =
+xpr_la_LIBADD = \
+		quartz/xpr/appledri.o \
+		quartz/xpr/dri.o \
+		quartz/xpr/xprAppleWM.o \
+		quartz/xpr/xprCursor.o \
+		quartz/xpr/xprFrame.o \
+		quartz/xpr/xprScreen.o \
+		quartz/xpr/x-hash.o \
+		quartz/xpr/x-hook.o \
+		quartz/xpr/x-list.o \
+		$(top_builddir)/miext/rootless/librootless.la \
+		$(top_builddir)/miext/rootless/safeAlpha/libsafeAlpha.la \
+		$(top_builddir)/miext/rootless/accel/librlAccel.la
+xpr_la_LDFLAGS = -shrext '' -Wl,-framework,ApplicationServices \
+		-lXplugin \
+		-XCClinker -bundle_loader -XCClinker XDarwinApp \
+		-module -avoid-version -no-undefined
+xpr_la_DEPENDENCIES = XDarwinApp	
+
+endif
+
+if HAVE_AGL_FRAMEWORK
+glxCGLplugindir = $(darwinappdir)/Contents/Resources/glxCGL.bundle/Contents/MacOS
+glxCGLplugin_LTLIBRARIES = glxCGL.la
+glxCGL_la_SOURCES =
+glxCGL_la_LIBADD = \
+		$(top_builddir)/GL/glx/glxext.o \
+		$(top_builddir)/GL/glx/libglx.a \
+		$(top_builddir)/GL/apple/libAGLcore.a
+glxCGL_la_LDFLAGS = -shrext '' -Wl,-framework,ApplicationServices \
+		-Wl,-framework,AGL \
+		-Wl,-framework,OpenGL \
+		-XCClinker -ObjC \
+		-XCClinker -bundle_loader -XCClinker XDarwinApp \
+		-module -avoid-version -no-undefined
+glxCGL_la_DEPENDENCIES = XDarwinApp	
+
+
+glxAGLplugindir = $(darwinappdir)/Contents/Resources/glxAGL.bundle/Contents/MacOS
+glxAGLplugin_LTLIBRARIES = glxAGL.la
+glxAGL_la_SOURCES =
+glxAGL_la_LIBADD = \
+		$(top_builddir)/GL/glx/glxext.o \
+		$(top_builddir)/GL/glx/libglx.a \
+		$(top_builddir)/GL/apple/libAGLcore.a
+glxAGL_la_LDFLAGS = -shrext '' \
+		-Wl,-framework,AGL \
+		-Wl,-framework,OpenGL \
+		-XCClinker -ObjC \
+		-XCClinker -bundle_loader -XCClinker XDarwinApp \
+		-module -avoid-version -no-undefined
+glxAGL_la_DEPENDENCIES = XDarwinApp	
+
+
+
+endif
+
+man1_MANS = XDarwin.man
+
+uninstall-hook:
+	rm -rf $(DESTDIR)$(macosdir)/XDarwin
+
+install-data-hook: $(HOOK_TARGETS)
+
+xquartz-install-hook:
+	mv $(DESTDIR)$(macosdir)/XDarwinApp $(DESTDIR)$(macosdir)/XDarwin
+
 EXTRA_DIST = \
-	bundle/Dutch.lproj/Credits.rtf \
-	bundle/Dutch.lproj/Localizable.strings \
-	bundle/Dutch.lproj/MainMenu.nib/classes.nib \
-	bundle/Dutch.lproj/MainMenu.nib/objects.nib \
-	bundle/Dutch.lproj/XDarwinHelp.html.cpp \
-	bundle/English.lproj/Credits.rtf \
-	bundle/English.lproj/InfoPlist.strings.cpp \
-	bundle/English.lproj/Localizable.strings \
-	bundle/English.lproj/MainMenu.nib/classes.nib \
-	bundle/English.lproj/MainMenu.nib/objects.nib \
-	bundle/English.lproj/XDarwinHelp.html.cpp \
-	bundle/French.lproj/Credits.rtf \
-	bundle/French.lproj/Localizable.strings \
-	bundle/French.lproj/MainMenu.nib/classes.nib \
-	bundle/French.lproj/MainMenu.nib/objects.nib \
-	bundle/French.lproj/XDarwinHelp.html.cpp \
-	bundle/German.lproj/Credits.rtf \
-	bundle/German.lproj/Localizable.strings \
-	bundle/German.lproj/MainMenu.nib/classes.nib \
-	bundle/German.lproj/MainMenu.nib/objects.nib \
-	bundle/German.lproj/XDarwinHelp.html.cpp \
-	bundle/Japanese.lproj/Credits.rtf \
-	bundle/Japanese.lproj/Localizable.strings \
-	bundle/Japanese.lproj/MainMenu.nib/classes.nib \
-	bundle/Japanese.lproj/MainMenu.nib/objects.nib \
-	bundle/Japanese.lproj/XDarwinHelp.html.cpp \
-	bundle/ko.lproj/Credits.rtf \
-	bundle/ko.lproj/Localizable.strings \
-	bundle/ko.lproj/MainMenu.nib/classes.nib \
-	bundle/ko.lproj/MainMenu.nib/objects.nib \
-	bundle/ko.lproj/XDarwinHelp.html.cpp \
-	bundle/Portuguese.lproj/Credits.rtf \
-	bundle/Portuguese.lproj/Localizable.strings \
-	bundle/Portuguese.lproj/MainMenu.nib/classes.nib \
-	bundle/Portuguese.lproj/MainMenu.nib/objects.nib \
-	bundle/Portuguese.lproj/XDarwinHelp.html.cpp \
-	bundle/Spanish.lproj/Credits.rtf \
-	bundle/Spanish.lproj/Localizable.strings \
-	bundle/Spanish.lproj/MainMenu.nib/classes.nib \
-	bundle/Spanish.lproj/MainMenu.nib/objects.nib \
-	bundle/Spanish.lproj/XDarwinHelp.html.cpp \
-	bundle/startXClients.cpp \
-	bundle/Swedish.lproj/Credits.rtf \
-	bundle/Swedish.lproj/Localizable.strings \
-	bundle/Swedish.lproj/MainMenu.nib/classes.nib \
-	bundle/Swedish.lproj/MainMenu.nib/objects.nib \
-	bundle/Swedish.lproj/XDarwinHelp.html.cpp \
-	bundle/XDarwin.icns \
 	darwin.c \
 	darwinClut8.h \
 	darwinEvents.c \
@@ -54,64 +251,4 @@ EXTRA_DIST = \
 	darwinKeyboard.c \
 	darwinKeyboard.h \
 	darwinXinput.c \
-	iokit/xfIOKit.c \
-	iokit/xfIOKitCursor.c \
-	iokit/xfIOKit.h \
-	iokit/xfIOKitStartup.c \
-	Makefile.am \
-	quartz/applewm.c \
-	quartz/applewmExt.h \
-	quartz/cr/crAppleWM.m \
-	quartz/cr/crFrame.m \
-	quartz/cr/cr.h \
-	quartz/cr/crScreen.m \
-	quartz/cr/XView.h \
-	quartz/cr/XView.m \
-	quartz/fullscreen/fullscreen.c \
-	quartz/fullscreen/quartzCursor.c \
-	quartz/fullscreen/quartzCursor.h \
-	quartz/keysym2ucs.c \
-	quartz/keysym2ucs.h \
-	quartz/Preferences.h \
-	quartz/Preferences.m \
-	quartz/pseudoramiX.c \
-	quartz/pseudoramiX.h \
-	quartz/quartzAudio.c \
-	quartz/quartzAudio.h \
-	quartz/quartz.c \
-	quartz/quartzCocoa.m \
-	quartz/quartzCommon.h \
-	quartz/quartzCursor.c \
-	quartz/quartzCursor.h \
-	quartz/quartz.h \
-	quartz/quartzKeyboard.c \
-	quartz/quartzPasteboard.c \
-	quartz/quartzPasteboard.h \
-	quartz/quartzStartup.c \
-	quartz/XApplication.h \
-	quartz/XApplication.m \
-	quartz/XDarwin.pbproj/project.pbxproj \
-	quartz/XDarwinStartup.c \
-	quartz/XDarwinStartup.man \
-	quartz/xpr/appledri.c \
-	quartz/xpr/dri.c \
-	quartz/xpr/dri.h \
-	quartz/xpr/dristruct.h \
-	quartz/xpr/x-hash.c \
-	quartz/xpr/x-hash.h \
-	quartz/xpr/x-hook.c \
-	quartz/xpr/x-hook.h \
-	quartz/xpr/x-list.c \
-	quartz/xpr/x-list.h \
-	quartz/xpr/Xplugin.h \
-	quartz/xpr/xprAppleWM.c \
-	quartz/xpr/xprCursor.c \
-	quartz/xpr/xprFrame.c \
-	quartz/xpr/xpr.h \
-	quartz/xpr/xprScreen.c \
-	quartz/XServer.h \
-	quartz/XServer.m \
-	utils/dumpkeymap.c \
-	utils/dumpkeymap.man \
-	utils/README.txt \
 	XDarwin.man
diff --git a/hw/darwin/darwin.c b/hw/darwin/darwin.c
index bd99989..e33c321 100644
--- a/hw/darwin/darwin.c
+++ b/hw/darwin/darwin.c
@@ -30,6 +30,10 @@
  * use or other dealings in this Software without prior written authorization.
  */
 
+#ifdef HAVE_XORG_CONFIG_H
+#include <xorg-config.h>
+#endif
+
 #include <X11/X.h>
 #include <X11/Xproto.h>
 #include "os.h"
@@ -409,9 +413,9 @@ static int DarwinMouseProc(
             InitPointerDeviceStruct( (DevicePtr)pPointer,
                         map,
                         5,   // numbuttons (4 & 5 are scroll wheel)
-                        miPointerGetMotionEvents,
+                        GetMotionHistory,
                         DarwinChangePointerControl,
-                        0 );
+                        GetMotionHistorySize(), 2 );
 #ifdef XINPUT
             InitValuatorAxisStruct( pPointer,
                                     0,     // X axis
diff --git a/hw/darwin/darwin.h b/hw/darwin/darwin.h
index cd57225..48a2224 100644
--- a/hw/darwin/darwin.h
+++ b/hw/darwin/darwin.h
@@ -31,6 +31,7 @@
 #include "inputstr.h"
 #include "scrnintstr.h"
 #include <X11/extensions/XKB.h>
+#include <assert.h>
 
 typedef struct {
     void                *framebuffer;
diff --git a/hw/darwin/darwinKeyboard.c b/hw/darwin/darwinKeyboard.c
index 1cc49fe..4e7a136 100644
--- a/hw/darwin/darwinKeyboard.c
+++ b/hw/darwin/darwinKeyboard.c
@@ -72,7 +72,7 @@
 #include <architecture/byte_order.h>  // For the NXSwap*
 #include "darwin.h"
 #include "darwinKeyboard.h"
-
+#include <assert.h>
 #define AltMask         Mod1Mask
 #define MetaMask        Mod2Mask
 #define FunctionMask    Mod3Mask
diff --git a/hw/darwin/darwinKeyboard.h b/hw/darwin/darwinKeyboard.h
index f4a8611..368aee9 100644
--- a/hw/darwin/darwinKeyboard.h
+++ b/hw/darwin/darwinKeyboard.h
@@ -29,7 +29,7 @@
 
 #define XK_TECHNICAL		// needed to get XK_Escape
 #define XK_PUBLISHING
-#include "keysym.h"
+#include "X11/keysym.h"
 #include "inputstr.h"
 
 // Each key can generate 4 glyphs. They are, in order:
diff-tree 136bb4874aadf4a731d7eb8671e8bb641f9980a7 (from 3ead1afe78d2913f08c8144cb2d3813c6b159488)
Author: Ben Byer <bbyer at apple.com>
Date:   Thu Feb 15 05:14:38 2007 -0800

    iokit support for XDarwin

diff --git a/hw/darwin/iokit/Makefile.am b/hw/darwin/iokit/Makefile.am
new file mode 100644
index 0000000..54464ae
--- /dev/null
+++ b/hw/darwin/iokit/Makefile.am
@@ -0,0 +1,17 @@
+noinst_LIBRARIES = libiokit.a
+
+AM_CFLAGS = @XORG_CFLAGS@ @DIX_CFLAGS@
+INCLUDES = -I. -I.. -I$(srcdir) -I$(srcdir)/.. @XORG_INCS@
+AM_DEFS =
+if XQUARTZ
+AM_DEFS += -DDARWIN_WITH_QUARTZ -DXFree86Server
+XQUARTZ_SUBDIRS = bundle quartz
+endif
+DEFS = @DEFS@ $(AM_DEFS)
+
+libiokit_a_SOURCES = xfIOKit.c \
+	           xfIOKitCursor.c \
+	           xfIOKitStartup.c
+
+EXTRA_DIST = \
+	xfIOKit.h
diff --git a/hw/darwin/iokit/xfIOKit.c b/hw/darwin/iokit/xfIOKit.c
index 95a7fb3..c7ebd1c 100644
--- a/hw/darwin/iokit/xfIOKit.c
+++ b/hw/darwin/iokit/xfIOKit.c
@@ -34,6 +34,10 @@
  * use or other dealings in this Software without prior written authorization.
  */
 
+#if HAVE_XORG_CONFIG_H
+#include <xorg-config.h>
+#endif
+
 #include <X11/X.h>
 #include <X11/Xproto.h>
 #include "os.h"
@@ -51,6 +55,7 @@
 #include <unistd.h>
 #include <fcntl.h>
 #include <pthread.h>
+#include <assert.h>
 
 #include <mach/mach_interface.h>
 
diff --git a/hw/darwin/iokit/xfIOKitCursor.c b/hw/darwin/iokit/xfIOKitCursor.c
index ef3e254..8388513 100644
--- a/hw/darwin/iokit/xfIOKitCursor.c
+++ b/hw/darwin/iokit/xfIOKitCursor.c
@@ -58,6 +58,9 @@
  * use or other dealings in this Software without prior written authorization.
  */
 
+#if HAVE_XORG_CONFIG_H
+#include <xorg-config.h>
+#endif
 #include "scrnintstr.h"
 #include "cursorstr.h"
 #include "mipointrst.h"
@@ -67,7 +70,7 @@
 #include <IOKit/hidsystem/IOHIDLib.h>
 #include "darwin.h"
 #include "xfIOKit.h"
-
+#include <assert.h>
 #define DUMP_DARWIN_CURSOR FALSE
 
 #define CURSOR_PRIV(pScreen) \
diff --git a/hw/darwin/iokit/xfIOKitStartup.c b/hw/darwin/iokit/xfIOKitStartup.c
index 512793a..07e8c21 100644
--- a/hw/darwin/iokit/xfIOKitStartup.c
+++ b/hw/darwin/iokit/xfIOKitStartup.c
@@ -29,6 +29,11 @@
  * use or other dealings in this Software without prior written authorization.
  */
 
+
+#if HAVE_XORG_CONFIG_H
+#include <xorg-config.h>
+#endif
+
 #include "darwin.h"
 #include "darwinKeyboard.h"
 #include "micmap.h"
@@ -57,7 +62,9 @@ void DarwinHandleGUI(
  */
 void DarwinGlxExtensionInit(void)
 {
-    GlxExtensionInit();
+#ifdef GLXEXT
+    	GlxExtensionInit();
+#endif
 }
 
 
@@ -67,7 +74,9 @@ void DarwinGlxExtensionInit(void)
 void DarwinGlxWrapInitVisuals(
     miInitVisualsProcPtr *procPtr)
 {
+#ifdef GLXEXT
     GlxWrapInitVisuals(procPtr);
+#endif
 }
 
 
diff-tree 3ead1afe78d2913f08c8144cb2d3813c6b159488 (from d570ff7c81858a3174686b46a088f67563b4a2d5)
Author: Ben Byer <bbyer at apple.com>
Date:   Thu Feb 15 05:09:29 2007 -0800

    Beginning of patches to add XDarwin support to the modular tree;
    special thanks to Torrey Lyons and Peter O'Gorman for making this possible.
    
    This is the automake framework for the XDarwin.app interface files.

diff --git a/hw/darwin/bundle/Dutch.lproj/Makefile.am b/hw/darwin/bundle/Dutch.lproj/Makefile.am
new file mode 100644
index 0000000..a480cee
--- /dev/null
+++ b/hw/darwin/bundle/Dutch.lproj/Makefile.am
@@ -0,0 +1,35 @@
+BINDIR = ${bindir}
+include $(top_srcdir)/cpprules.in
+XINITDIR = $(libdir)/X11/xinit
+XDEFS = \
+        -DX_VERSION="$(PLIST_VERSION_STRING)" \
+        -DX_PRE_RELEASE="$(PRE)" \
+        -DX_REL_DATE="$(XORG_DATE)" \
+        -DX_VENDOR_NAME="$(VENDOR_STRING)" \
+        -DX_VENDOR_LINK="$(PLIST_VENDOR_WEB)"
+
+resourcesdir = @APPLE_APPLICATIONS_DIR@/XDarwin.app/Contents/Resources
+
+Dutchlprojdir = $(resourcesdir)/Dutch.lproj
+
+Dutchlproj_DATA = \
+		    XDarwinHelp.html \
+		    InfoPlist.strings \
+		    Credits.rtf Localizable.strings
+
+Dutchlprojnibdir = $(Dutchlprojdir)/MainMenu.nib
+Dutchlprojnib_DATA = MainMenu.nib/classes.nib MainMenu.nib/objects.nib
+
+InfoPlist.strings: $(srcdir)/../English.lproj/InfoPlist.strings.cpp
+	 $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' > $@
+
+XDarwinHelp.html: XDarwinHelp.html.cpp
+	$(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) > $@
+
+CLEANFILES = XDarwinHelp.html InfoPlist.strings 
+
+EXTRA_DIST = \
+	Credits.rtf Localizable.strings \
+	MainMenu.nib/classes.nib \
+	MainMenu.nib/objects.nib \
+	XDarwinHelp.html.cpp
diff --git a/hw/darwin/bundle/English.lproj/Makefile.am b/hw/darwin/bundle/English.lproj/Makefile.am
new file mode 100644
index 0000000..4558708
--- /dev/null
+++ b/hw/darwin/bundle/English.lproj/Makefile.am
@@ -0,0 +1,35 @@
+BINDIR = ${bindir}
+include $(top_srcdir)/cpprules.in
+XINITDIR = $(libdir)/X11/xinit
+XDEFS = \
+        -DX_VERSION="$(PLIST_VERSION_STRING)" \
+        -DX_PRE_RELEASE="$(PRE)" \
+        -DX_REL_DATE="$(XORG_DATE)" \
+        -DX_VENDOR_NAME="$(VENDOR_STRING)" \
+        -DX_VENDOR_LINK="$(PLIST_VENDOR_WEB)"
+
+resourcesdir = @APPLE_APPLICATIONS_DIR@/XDarwin.app/Contents/Resources
+
+Englishlprojdir = $(resourcesdir)/English.lproj
+Englishlproj_DATA = \
+		    XDarwinHelp.html \
+		    InfoPlist.strings \
+		    Credits.rtf Localizable.strings
+
+Englishlprojnibdir = $(Englishlprojdir)/MainMenu.nib
+Englishlprojnib_DATA = MainMenu.nib/classes.nib MainMenu.nib/objects.nib
+
+InfoPlist.strings: InfoPlist.strings.cpp
+	 $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' > $@
+
+XDarwinHelp.html: XDarwinHelp.html.cpp
+	$(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) > $@
+
+CLEANFILES = XDarwinHelp.html InfoPlist.strings 
+
+EXTRA_DIST = \
+	Credits.rtf Localizable.strings \
+	MainMenu.nib/classes.nib \
+	MainMenu.nib/objects.nib \
+	XDarwinHelp.html.cpp \
+	InfoPlist.strings.cpp
diff --git a/hw/darwin/bundle/French.lproj/Makefile.am b/hw/darwin/bundle/French.lproj/Makefile.am
new file mode 100644
index 0000000..656ba5c
--- /dev/null
+++ b/hw/darwin/bundle/French.lproj/Makefile.am
@@ -0,0 +1,38 @@
+BINDIR = ${bindir}
+include $(top_srcdir)/cpprules.in
+XINITDIR = $(libdir)/X11/xinit
+
+XDEFS = \
+        -DX_VERSION="$(PLIST_VERSION_STRING)" \
+        -DX_PRE_RELEASE="$(PRE)" \
+        -DX_REL_DATE="$(XORG_DATE)" \
+        -DX_VENDOR_NAME="$(VENDOR_STRING)" \
+        -DX_VENDOR_LINK="$(PLIST_VENDOR_WEB)"
+
+
+resourcesdir = @APPLE_APPLICATIONS_DIR@/XDarwin.app/Contents/Resources
+
+Frenchlprojdir = $(resourcesdir)/French.lproj
+
+Frenchlproj_DATA = \
+		    XDarwinHelp.html \
+		    InfoPlist.strings \
+		    Credits.rtf Localizable.strings
+
+Frenchlprojnibdir = $(Frenchlprojdir)/MainMenu.nib
+Frenchlprojnib_DATA = MainMenu.nib/classes.nib MainMenu.nib/objects.nib
+
+InfoPlist.strings: $(srcdir)/../English.lproj/InfoPlist.strings.cpp
+	 $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' > $@
+
+XDarwinHelp.html: XDarwinHelp.html.cpp
+	$(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) > $@
+
+CLEANFILES = XDarwinHelp.html InfoPlist.strings 
+
+EXTRA_DIST = \
+	Credits.rtf Localizable.strings \
+	Localizable.strings \
+	MainMenu.nib/classes.nib \
+	MainMenu.nib/objects.nib \
+	XDarwinHelp.html.cpp
diff --git a/hw/darwin/bundle/German.lproj/Makefile.am b/hw/darwin/bundle/German.lproj/Makefile.am
new file mode 100644
index 0000000..17af414
--- /dev/null
+++ b/hw/darwin/bundle/German.lproj/Makefile.am
@@ -0,0 +1,36 @@
+BINDIR = ${bindir}
+include $(top_srcdir)/cpprules.in
+XINITDIR = $(libdir)/X11/xinit
+XDEFS = \
+        -DX_VERSION="$(PLIST_VERSION_STRING)" \
+        -DX_PRE_RELEASE="$(PRE)" \
+        -DX_REL_DATE="$(XORG_DATE)" \
+        -DX_VENDOR_NAME="$(VENDOR_STRING)" \
+        -DX_VENDOR_LINK="$(PLIST_VENDOR_WEB)"
+
+resourcesdir = @APPLE_APPLICATIONS_DIR@/XDarwin.app/Contents/Resources
+
+Germanlprojdir = $(resourcesdir)/German.lproj
+
+Germanlproj_DATA = \
+		    XDarwinHelp.html \
+		    InfoPlist.strings \
+		    Credits.rtf Localizable.strings
+
+Germanlprojnibdir = $(Germanlprojdir)/MainMenu.nib
+Germanlprojnib_DATA =  MainMenu.nib/classes.nib MainMenu.nib/objects.nib
+
+InfoPlist.strings: $(srcdir)/../English.lproj/InfoPlist.strings.cpp
+	 $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' > $@
+
+XDarwinHelp.html: XDarwinHelp.html.cpp
+	$(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) > $@
+
+CLEANFILES = XDarwinHelp.html InfoPlist.strings 
+
+EXTRA_DIST = \
+	Credits.rtf Localizable.strings \
+	Localizable.strings \
+	MainMenu.nib/classes.nib \
+	MainMenu.nib/objects.nib \
+	XDarwinHelp.html.cpp
diff --git a/hw/darwin/bundle/Info.plist b/hw/darwin/bundle/Info.plist
new file mode 100644
index 0000000..bfef48d
--- /dev/null
+++ b/hw/darwin/bundle/Info.plist
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>English</string>
+	<key>CFBundleDocumentTypes</key>
+	<array>
+		<dict>
+			<key>CFBundleTypeExtensions</key>
+			<array>
+				<string>x11app</string>
+			</array>
+			<key>CFBundleTypeName</key>
+			<string>X11 Application</string>
+			<key>CFBundleTypeOSTypes</key>
+			<array>
+				<string>****</string>
+			</array>
+			<key>CFBundleTypeRole</key>
+			<string>Viewer</string>
+		</dict>
+		<dict>
+			<key>CFBundleTypeExtensions</key>
+			<array>
+				<string>tool</string>
+				<string>*</string>
+			</array>
+			<key>CFBundleTypeName</key>
+			<string>UNIX Application</string>
+			<key>CFBundleTypeOSTypes</key>
+			<array>
+				<string>****</string>
+			</array>
+			<key>CFBundleTypeRole</key>
+			<string>Viewer</string>
+		</dict>
+	</array>
+	<key>CFBundleExecutable</key>
+	<string>XDarwin</string>
+	<key>CFBundleGetInfoString</key>
+	<string>XDarwin 1.4.0, X.Org Foundation</string>
+	<key>CFBundleIconFile</key>
+	<string>XDarwin.icns</string>
+	<key>CFBundleIdentifier</key>
+	<string>org.x.XDarwin</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>XDarwin</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>XDarwin 1.4.0</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string></string>
+	<key>NSHelpFile</key>
+	<string>XDarwinHelp.html</string>
+	<key>NSMainNibFile</key>
+	<string>MainMenu</string>
+	<key>NSPrincipalClass</key>
+	<string>XApplication</string>
+</dict>
+</plist>
diff --git a/hw/darwin/bundle/Japanese.lproj/Makefile.am b/hw/darwin/bundle/Japanese.lproj/Makefile.am
new file mode 100644
index 0000000..2cc5248
--- /dev/null
+++ b/hw/darwin/bundle/Japanese.lproj/Makefile.am
@@ -0,0 +1,37 @@
+BINDIR = ${bindir}
+include $(top_srcdir)/cpprules.in
+XINITDIR = $(libdir)/X11/xinit
+XDEFS = \
+        -DX_VERSION="$(PLIST_VERSION_STRING)" \
+        -DX_PRE_RELEASE="$(PRE)" \
+        -DX_REL_DATE="$(XORG_DATE)" \
+        -DX_VENDOR_NAME="$(VENDOR_STRING)" \
+        -DX_VENDOR_LINK="$(PLIST_VENDOR_WEB)"
+
+
+resourcesdir = @APPLE_APPLICATIONS_DIR@/XDarwin.app/Contents/Resources
+
+Japaneselprojdir = $(resourcesdir)/Japanese.lproj
+
+Japaneselproj_DATA = \
+		    XDarwinHelp.html \
+		    InfoPlist.strings \
+		    Credits.rtf Localizable.strings
+
+Japaneselprojnibdir = $(Japaneselprojdir)/MainMenu.nib
+Japaneselprojnib_DATA = MainMenu.nib/classes.nib MainMenu.nib/objects.nib
+
+InfoPlist.strings: $(srcdir)/../English.lproj/InfoPlist.strings.cpp
+	 $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' > $@
+
+XDarwinHelp.html: XDarwinHelp.html.cpp
+	$(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) > $@
+
+CLEANFILES = XDarwinHelp.html InfoPlist.strings 
+
+EXTRA_DIST = \
+	Credits.rtf Localizable.strings \
+	Localizable.strings \
+	MainMenu.nib/classes.nib \
+	MainMenu.nib/objects.nib \
+	XDarwinHelp.html.cpp
diff --git a/hw/darwin/bundle/Makefile.am b/hw/darwin/bundle/Makefile.am
new file mode 100644
index 0000000..dee34fd
--- /dev/null
+++ b/hw/darwin/bundle/Makefile.am
@@ -0,0 +1,38 @@
+BINDIR = ${bindir}
+include $(top_srcdir)/cpprules.in
+XINITDIR = $(libdir)/X11/xinit
+XDEFS = \
+        -DX_VERSION="$(PLIST_VERSION_STRING)" \
+        -DX_PRE_RELEASE="$(PRE)" \
+        -DX_REL_DATE="$(XORG_DATE)" \
+        -DX_VENDOR_NAME="$(VENDOR_STRING)" \
+        -DX_VENDOR_LINK="$(PLIST_VENDOR_WEB)"
+
+SUBDIRS =  English.lproj Dutch.lproj French.lproj German.lproj Japanese.lproj \
+	ko.lproj Portuguese.lproj Spanish.lproj Swedish.lproj
+
+bin_SCRIPTS = startXClients
+
+startXClients: $(srcdir)/startXClients.cpp
+	$(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) -DXINITDIR=$(XINITDIR) -DXBINDIR=$(BINDIR)  $< | $(CPP_SED_MAGIC) > $@
+	-chmod 755 startXClients
+
+contentsdir = @APPLE_APPLICATIONS_DIR@/XDarwin.app/Contents
+resourcesdir = $(contentsdir)/Resources
+
+contents_DATA = Info.plist
+resources_DATA = XDarwin.icns startXClients
+
+install-data-hook:
+	chmod 755 $(DESTDIR)$(resourcesdir)/startXClients
+	echo "APPL????" > $(DESTDIR)$(contentsdir)/PkgInfo
+	touch $(DESTDIR)@APPLE_APPLICATIONS_DIR@/XDarwin.app
+
+uninstall-hook:
+	rm -rf $(DESTDIR)$(contentsdir)/PkgInfo
+
+CLEANFILES = startXClients
+
+EXTRA_DIST = \
+	XDarwin.icns \
+	Info.plist
diff --git a/hw/darwin/bundle/Portuguese.lproj/Makefile.am b/hw/darwin/bundle/Portuguese.lproj/Makefile.am
new file mode 100644
index 0000000..81ba2be
--- /dev/null
+++ b/hw/darwin/bundle/Portuguese.lproj/Makefile.am
@@ -0,0 +1,36 @@
+BINDIR = ${bindir}
+include $(top_srcdir)/cpprules.in
+XINITDIR = $(libdir)/X11/xinit
+XDEFS = \
+        -DX_VERSION="$(PLIST_VERSION_STRING)" \
+        -DX_PRE_RELEASE="$(PRE)" \
+        -DX_REL_DATE="$(XORG_DATE)" \
+        -DX_VENDOR_NAME="$(VENDOR_STRING)" \
+        -DX_VENDOR_LINK="$(PLIST_VENDOR_WEB)"
+
+resourcesdir = @APPLE_APPLICATIONS_DIR@/XDarwin.app/Contents/Resources
+
+Portugueselprojdir = $(resourcesdir)/Portuguese.lproj
+
+Portugueselproj_DATA = \
+		    XDarwinHelp.html \
+		    InfoPlist.strings \
+		    Credits.rtf Localizable.strings
+
+Portugueselprojnibdir = $(Portugueselprojdir)/MainMenu.nib
+Portugueselprojnib_DATA = MainMenu.nib/classes.nib MainMenu.nib/objects.nib
+
+InfoPlist.strings: $(srcdir)/../English.lproj/InfoPlist.strings.cpp
+	 $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' > $@
+
+XDarwinHelp.html: XDarwinHelp.html.cpp
+	$(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) > $@
+
+CLEANFILES = XDarwinHelp.html InfoPlist.strings 
+
+EXTRA_DIST = \
+	Credits.rtf Localizable.strings \
+	Localizable.strings \
+	MainMenu.nib/classes.nib \
+	MainMenu.nib/objects.nib \
+	XDarwinHelp.html.cpp
diff --git a/hw/darwin/bundle/Spanish.lproj/Makefile.am b/hw/darwin/bundle/Spanish.lproj/Makefile.am
new file mode 100644
index 0000000..438d0c2
--- /dev/null
+++ b/hw/darwin/bundle/Spanish.lproj/Makefile.am
@@ -0,0 +1,36 @@
+BINDIR = ${bindir}
+include $(top_srcdir)/cpprules.in
+XINITDIR = $(libdir)/X11/xinit
+XDEFS = \
+        -DX_VERSION="$(PLIST_VERSION_STRING)" \
+        -DX_PRE_RELEASE="$(PRE)" \
+        -DX_REL_DATE="$(XORG_DATE)" \
+        -DX_VENDOR_NAME="$(VENDOR_STRING)" \
+        -DX_VENDOR_LINK="$(PLIST_VENDOR_WEB)"
+
+resourcesdir = @APPLE_APPLICATIONS_DIR@/XDarwin.app/Contents/Resources
+
+Spanishlprojdir = $(resourcesdir)/Spanish.lproj
+
+Spanishlproj_DATA = \
+		    XDarwinHelp.html \
+		    InfoPlist.strings \
+		    Credits.rtf Localizable.strings
+
+Spanishlprojnibdir = $(Spanishlprojdir)/MainMenu.nib
+Spanishlprojnib_DATA = MainMenu.nib/classes.nib MainMenu.nib/objects.nib
+
+InfoPlist.strings: $(srcdir)/../English.lproj/InfoPlist.strings.cpp
+	 $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' > $@
+
+XDarwinHelp.html: XDarwinHelp.html.cpp
+	$(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) > $@
+
+CLEANFILES = XDarwinHelp.html InfoPlist.strings 
+
+EXTRA_DIST = \
+	Credits.rtf Localizable.strings \
+	Localizable.strings \
+	MainMenu.nib/classes.nib \
+	MainMenu.nib/objects.nib \
+	XDarwinHelp.html.cpp
diff --git a/hw/darwin/bundle/Swedish.lproj/Makefile.am b/hw/darwin/bundle/Swedish.lproj/Makefile.am
new file mode 100644
index 0000000..19f35a6
--- /dev/null
+++ b/hw/darwin/bundle/Swedish.lproj/Makefile.am
@@ -0,0 +1,36 @@
+BINDIR = ${bindir}
+include $(top_srcdir)/cpprules.in
+XINITDIR = $(libdir)/X11/xinit
+XDEFS = \
+        -DX_VERSION="$(PLIST_VERSION_STRING)" \
+        -DX_PRE_RELEASE="$(PRE)" \
+        -DX_REL_DATE="$(XORG_DATE)" \
+        -DX_VENDOR_NAME="$(VENDOR_STRING)" \
+        -DX_VENDOR_LINK="$(PLIST_VENDOR_WEB)"
+
+resourcesdir = @APPLE_APPLICATIONS_DIR@/XDarwin.app/Contents/Resources
+
+Swedishlprojdir = $(resourcesdir)/Swedish.lproj
+
+Swedishlproj_DATA = \
+		    XDarwinHelp.html \
+		    InfoPlist.strings \
+		    Credits.rtf Localizable.strings
+
+Swedishlprojnibdir = $(Swedishlprojdir)/MainMenu.nib
+Swedishlprojnib_DATA = MainMenu.nib/classes.nib MainMenu.nib/objects.nib
+
+InfoPlist.strings: $(srcdir)/../English.lproj/InfoPlist.strings.cpp
+	 $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' > $@
+
+XDarwinHelp.html: XDarwinHelp.html.cpp
+	$(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) > $@
+
+CLEANFILES = XDarwinHelp.html InfoPlist.strings 
+
+EXTRA_DIST = \
+	Credits.rtf Localizable.strings \
+	Localizable.strings \
+	MainMenu.nib/classes.nib \
+	MainMenu.nib/objects.nib \
+	XDarwinHelp.html.cpp
diff --git a/hw/darwin/bundle/ko.lproj/Makefile.am b/hw/darwin/bundle/ko.lproj/Makefile.am
new file mode 100644
index 0000000..56dd6b3
--- /dev/null
+++ b/hw/darwin/bundle/ko.lproj/Makefile.am
@@ -0,0 +1,37 @@
+BINDIR = ${bindir}
+include $(top_srcdir)/cpprules.in
+XINITDIR = $(libdir)/X11/xinit
+XDEFS = \
+        -DX_VERSION="$(PLIST_VERSION_STRING)" \
+        -DX_PRE_RELEASE="$(PRE)" \
+        -DX_REL_DATE="$(XORG_DATE)" \
+        -DX_VENDOR_NAME="$(VENDOR_STRING)" \
+        -DX_VENDOR_LINK="$(PLIST_VENDOR_WEB)"
+
+
+resourcesdir = @APPLE_APPLICATIONS_DIR@/XDarwin.app/Contents/Resources
+
+kolprojdir = $(resourcesdir)/ko.lproj
+
+kolproj_DATA = \
+		    XDarwinHelp.html \
+		    InfoPlist.strings \
+		    Credits.rtf Localizable.strings
+
+kolprojnibdir = $(kolprojdir)/MainMenu.nib
+kolprojnib_DATA = MainMenu.nib/classes.nib MainMenu.nib/objects.nib
+
+InfoPlist.strings: $(srcdir)/../English.lproj/InfoPlist.strings.cpp
+	 $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' > $@
+
+XDarwinHelp.html: XDarwinHelp.html.cpp
+	$(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) > $@
+
+CLEANFILES = XDarwinHelp.html InfoPlist.strings 
+
+EXTRA_DIST = \
+	Credits.rtf Localizable.strings \
+	Localizable.strings \
+	MainMenu.nib/classes.nib \
+	MainMenu.nib/objects.nib \
+	XDarwinHelp.html.cpp
diff-tree d570ff7c81858a3174686b46a088f67563b4a2d5 (from 81aa7f059d3cfd8d28420b7932b8ff7e06d67979)
Author: Peter Hutterer <peter at cs.unisa.edu.au>
Date:   Wed Feb 14 17:09:33 2007 +1030

    fix: WarpCursor needs to send MotionNotify.

diff --git a/dix/getevents.c b/dix/getevents.c
index 8b2a44d..935112d 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -489,6 +489,7 @@ GetPointerEvents(xEvent *events, DeviceI
     Bool sendValuators = (type == MotionNotify || flags & POINTER_ABSOLUTE);
     DeviceIntPtr cp = inputInfo.pointer;
     int x = 0, y = 0;
+    Bool coreOnly = (pDev == inputInfo.pointer);
 
     /* Sanity checks. */
     if (type != MotionNotify && type != ButtonPress && type != ButtonRelease)
@@ -497,7 +498,7 @@ GetPointerEvents(xEvent *events, DeviceI
     if ((type == ButtonPress || type == ButtonRelease) && !pDev->button)
         return 0;
 
-    if (pDev->coreEvents)
+    if (!coreOnly && pDev->coreEvents)
         num_events = 2;
     else
         num_events = 1;
@@ -507,7 +508,7 @@ GetPointerEvents(xEvent *events, DeviceI
     }
 
     /* Do we need to send a DeviceValuator event? */
-    if (sendValuators) {
+    if (!coreOnly && sendValuators) {
         if ((((num_valuators - 1) / 6) + 1) > MAX_VALUATOR_EVENTS)
             num_valuators = MAX_VALUATOR_EVENTS * 6;
         num_events += ((num_valuators - 1) / 6) + 1;
@@ -521,10 +522,6 @@ GetPointerEvents(xEvent *events, DeviceI
 
     ms = GetTimeInMillis();
 
-    kbp = (deviceKeyButtonPointer *) events;
-    kbp->time = ms;
-    kbp->deviceid = pDev->id;
-
     /* Set x and y based on whether this is absolute or relative, and
      * accelerate if we need to. */
     if (flags & POINTER_ABSOLUTE) {
@@ -602,29 +599,37 @@ GetPointerEvents(xEvent *events, DeviceI
     pDev->valuator->lastx = x;
     pDev->valuator->lasty = y;
 
-    if (type == MotionNotify) {
-        kbp->type = DeviceMotionNotify;
-    }
-    else {
-        if (type == ButtonPress)
-            kbp->type = DeviceButtonPress;
-        else if (type == ButtonRelease)
-            kbp->type = DeviceButtonRelease;
-        kbp->detail = pDev->button->map[buttons];
-    }
+    if (!coreOnly)
+    {
+        kbp = (deviceKeyButtonPointer *) events;
+        kbp->time = ms;
+        kbp->deviceid = pDev->id;
+
+        if (type == MotionNotify) {
+            kbp->type = DeviceMotionNotify;
+        }
+        else {
+            if (type == ButtonPress)
+                kbp->type = DeviceButtonPress;
+            else if (type == ButtonRelease)
+                kbp->type = DeviceButtonRelease;
+            kbp->detail = pDev->button->map[buttons];
+        }
 
-    kbp->root_x = x;
-    kbp->root_y = y;
+        kbp->root_x = x;
+        kbp->root_y = y;
 
-    events++;
-    if (sendValuators) {
-        kbp->deviceid |= MORE_EVENTS;
-        clipValuators(pDev, first_valuator, num_valuators, valuators);
-        events = getValuatorEvents(events, pDev, first_valuator,
-                                   num_valuators, valuators);
+        events++;
+        if (sendValuators) {
+            kbp->deviceid |= MORE_EVENTS;
+            clipValuators(pDev, first_valuator, num_valuators, valuators);
+            events = getValuatorEvents(events, pDev, first_valuator,
+                                       num_valuators, valuators);
+        }
     }
 
-    if (pDev->coreEvents) {
+    /* for some reason inputInfo.pointer does not have coreEvents set */
+    if (coreOnly || pDev->coreEvents) {
         events->u.u.type = type;
         events->u.keyButtonPointer.time = ms;
         events->u.keyButtonPointer.rootX = x;
diff --git a/mi/mipointer.c b/mi/mipointer.c
index dbe2aae..c28911b 100644
--- a/mi/mipointer.c
+++ b/mi/mipointer.c
@@ -474,6 +474,10 @@ void
 miPointerMoved (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y,
                      unsigned long time)
 {
+    xEvent* events;
+    int i, nevents;
+    int valuators[2];
+
     SetupScreen(pScreen);
 
     if (pDev && (pDev->coreEvents || pDev == inputInfo.pointer) &&
@@ -488,4 +492,23 @@ miPointerMoved (DeviceIntPtr pDev, Scree
     miPointer.x = x;
     miPointer.y = y;
     miPointer.pScreen = pScreen;
+
+    /* generate motion notify */
+    valuators[0] = x;
+    valuators[1] = y;
+
+    events = (xEvent*)xcalloc(sizeof(xEvent), GetMaximumEventsNum());
+    if (!events)
+    {
+        FatalError("Could not allocate event store.\n");
+        return;
+    }
+
+    nevents = GetPointerEvents(events, pDev, MotionNotify, 0,
+                               POINTER_ABSOLUTE, 0, 2, valuators);
+
+    for (i = 0; i < nevents; i++)
+        mieqEnqueue(pDev, &events[i]);
+
+    xfree(events);
 }
diff-tree 81aa7f059d3cfd8d28420b7932b8ff7e06d67979 (from a5f19c5150a7b3dc2ff3ad759ee1a6ab0ad8925c)
Author: Eric Anholt <eric at anholt.net>
Date:   Wed Feb 14 12:48:15 2007 -0800

    Add missing dirty marking in a couple of fallback cases in the exaGlyphs path.

diff --git a/exa/exa_accel.c b/exa/exa_accel.c
index 6fa481a..e633d80 100644
--- a/exa/exa_accel.c
+++ b/exa/exa_accel.c
@@ -648,6 +648,14 @@ exaPolyFillRect(DrawablePtr pDrawable,
     {
 	exaDoMigration (pixmaps, 1, FALSE);
 	ExaCheckPolyFillRect (pDrawable, pGC, nrect, prect);
+	while (nrect-- >= 0) {
+	    exaDrawableDirty(pDrawable,
+			     pDrawable->x + prect->x,
+			     pDrawable->y + prect->y,
+			     pDrawable->x + prect->x + prect->width,
+			     pDrawable->y + prect->y + prect->height);
+	    prect++;
+	}
 	return;
     } else {
 	exaDoMigration (pixmaps, 1, TRUE);
diff --git a/exa/exa_render.c b/exa/exa_render.c
index a442987..b78d728 100644
--- a/exa/exa_render.c
+++ b/exa/exa_render.c
@@ -572,9 +572,7 @@ exaComposite(CARD8	op,
     if (pExaScr->swappedOut ||
 	pSrc->pDrawable == NULL || (pMask != NULL && pMask->pDrawable == NULL))
     {
-	ExaCheckComposite (op, pSrc, pMask, pDst, xSrc, ySrc,
-			   xMask, yMask, xDst, yDst, width, height);
-        return;
+	goto fallback;
     }
 
     /* Remove repeat in source if useless */
@@ -683,12 +681,18 @@ exaComposite(CARD8	op,
 	}
     }
 
+fallback:
 #if DEBUG_TRACE_FALL
     exaPrintCompositeFallback (op, pSrc, pMask, pDst);
 #endif
 
     ExaCheckComposite (op, pSrc, pMask, pDst, xSrc, ySrc,
 		      xMask, yMask, xDst, yDst, width, height);
+    exaDrawableDirty(pDst->pDrawable,
+		     pDst->pDrawable->x + xDst,
+		     pDst->pDrawable->y + yDst,
+		     pDst->pDrawable->x + xDst + width,
+		     pDst->pDrawable->y + yDst + height);
 
 done:
     pSrc->repeat = saveSrcRepeat;
diff-tree a5f19c5150a7b3dc2ff3ad759ee1a6ab0ad8925c (from a492d494f51caf15a5cb979dc335387486c105d1)
Author: Eric Anholt <eric at anholt.net>
Date:   Wed Feb 14 10:39:46 2007 -0800

    Mark sync when UploadToScreen succeeds in exaGlyphs().

diff --git a/exa/exa_render.c b/exa/exa_render.c
index 75108a7..a442987 100644
--- a/exa/exa_render.c
+++ b/exa/exa_render.c
@@ -995,15 +995,17 @@ exaGlyphs (CARD8	op,
 	     * First we try to use UploadToScreen, if we can, then we fall back
 	     * to a plain exaCopyArea in case of failure.
 	     */
-	    if (!pExaScr->info->UploadToScreen ||
-		!exaPixmapIsOffscreen(pPixmap) ||
-		!(*pExaScr->info->UploadToScreen) (pPixmap, 0, 0,
+	    if (pExaScr->info->UploadToScreen &&
+		exaPixmapIsOffscreen(pPixmap) &&
+		(*pExaScr->info->UploadToScreen) (pPixmap, 0, 0,
 					glyph->info.width,
 					glyph->info.height,
 					glyphdata,
 					PixmapBytePad(glyph->info.width,
 						      list->format->depth)))
 	    {
+		exaMarkSync (pScreen);
+	    } else {
 		/* Set up the scratch pixmap/GC for doing a CopyArea. */
 		if (pScratchPixmap == NULL) {
 		    /* Get a scratch pixmap to wrap the original glyph data */
diff-tree a492d494f51caf15a5cb979dc335387486c105d1 (from a23b0b069cac8a48e2b306b2095515d75f647705)
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Tue Feb 13 18:32:59 2007 -0800

    Update Xvfb man page: remove monolith build instructions, use /var/tmp instead of /usr/tmp

diff --git a/hw/vfb/Xvfb.man.pre b/hw/vfb/Xvfb.man.pre
index f0f5da1..e78e296 100644
--- a/hw/vfb/Xvfb.man.pre
+++ b/hw/vfb/Xvfb.man.pre
@@ -47,13 +47,6 @@ configurations, doing batch processing w
 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.
-.SH BUILDING
-To build \fIXvfb\fP, put the following in your host.def and remake.
-.PP
-\&#define BuildServer YES /\(** if you aren't already building other servers */
-.br
-\&#define XVirtualFramebufferServer YES
-
 .SH OPTIONS
 .PP
 In addition to the normal server options described in the \fIXserver(1)\fP
@@ -116,14 +109,14 @@ The server will listen for connections a
 default screen configuration (one screen, 1280x1024x12), and screen 1
 will be depth 16 1600x1200.
 .TP 8
-Xvfb -pixdepths 3 27 -fbdir /usr/tmp
+Xvfb -pixdepths 3 27 -fbdir /var/tmp
 The server will listen for connections as server number 0, will have the
 default screen configuration (one screen, 1280x1024x12),
 will also support pixmap
 depths of 3 and 27, 
-and will use memory mapped files in /usr/tmp for the framebuffer.
+and will use memory mapped files in /var/tmp for the framebuffer.
 .TP 8
-xwud -in /usr/tmp/Xvfb_screen0
+xwud -in /var/tmp/Xvfb_screen0
 Displays screen 0 of the server started by the preceding example.
 .SH "SEE ALSO"
 .PP
diff-tree a23b0b069cac8a48e2b306b2095515d75f647705 (from d21c95f80bdba2f29eedd57fb0b00e580391c08e)
Author: Adam Jackson <ajax at benzedrine.nwnk.net>
Date:   Mon Feb 12 17:50:00 2007 -0500

    Typo fix.

diff --git a/hw/xfree86/os-support/xf86_libc.h b/hw/xfree86/os-support/xf86_libc.h
index df78d53..199fcd6 100644
--- a/hw/xfree86/os-support/xf86_libc.h
+++ b/hw/xfree86/os-support/xf86_libc.h
@@ -428,7 +428,7 @@ typedef int xf86jmp_buf[1024];
 #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)
diff-tree d21c95f80bdba2f29eedd57fb0b00e580391c08e (from 46784d24c11767455a4986449a8037295912dcee)
Author: Adam Jackson <ajax at benzedrine.nwnk.net>
Date:   Mon Feb 12 17:22:39 2007 -0500

    Hook up --with-builderstring for vendor build identification.

diff --git a/configure.ac b/configure.ac
index 4a33ac0..92dc5c9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -448,6 +448,9 @@ AC_ARG_WITH(os-name,         AS_HELP_STR
 AC_ARG_WITH(os-vendor,       AS_HELP_STRING([--with-os-vendor=OSVENDOR], [Name of OS vendor]),
 				[ OSVENDOR="$withval" ],
 				[ OSVENDOR="" ])
+AC_ARG_WITH(builderstring,   AS_HELP_STRING([--with-builderstring=BUILDERSTRING], [Additional builder string]),
+				[ BUILDERSTRING="$withval" ]
+				[ ])
 AC_ARG_WITH(mesa-source,     AS_HELP_STRING([--with-mesa-source=MESA_SOURCE], [Path to Mesa source tree]),
                                 [ MESA_SOURCE="$withval" ],
                                 [ MESA_SOURCE="" ])
@@ -934,6 +937,8 @@ AC_DEFINE_UNQUOTED(XORG_MAN_VERSION, ["$
 AC_DEFINE_UNQUOTED(BUILDERADDR, ["$BUILDERADDR"], [Builder address])
 AC_DEFINE_UNQUOTED(OSNAME, ["$OSNAME"], [Operating System Name])
 AC_DEFINE_UNQUOTED(OSVENDOR, ["$OSVENDOR"], [Operating System Vendor])
+AC_DEFINE_UNQUOTED(BUILDERSTRING, ["$BUILDERSTRING"], [Builder string])
+
 AC_SUBST([VENDOR_STRING])
 AC_SUBST([VENDOR_STRING_SHORT])
 AC_SUBST([VENDOR_RELEASE])
diff --git a/include/dix-config.h.in b/include/dix-config.h.in
index 1a9fdc5..458e3a1 100644
--- a/include/dix-config.h.in
+++ b/include/dix-config.h.in
@@ -15,6 +15,9 @@
 /* Operating System Vendor */
 #undef OSVENDOR
 
+/* Builder string */
+#undef BUILDERSTRING
+
 /* Default font path */
 #undef COMPILEDDEFAULTFONTPATH
 
diff-tree 46784d24c11767455a4986449a8037295912dcee (from c4b7e9d1c16797c3e4b1200b40aceab5696a7fb8)
Author: Adam Jackson <ajax at benzedrine.nwnk.net>
Date:   Mon Feb 12 17:18:29 2007 -0500

    Remove spurious LIBADD from xf4bpp

diff --git a/hw/xfree86/xf4bpp/Makefile.am b/hw/xfree86/xf4bpp/Makefile.am
index 9af3364..8fddb6b 100644
--- a/hw/xfree86/xf4bpp/Makefile.am
+++ b/hw/xfree86/xf4bpp/Makefile.am
@@ -46,8 +46,6 @@ libxf4bpp_la_SOURCES = \
         mfbzerarc.c \
         vgamodule.c
 
-libxf4bpp_la_LIBADD = ../xf1bpp/libxf1bpp.la
-
 EXTRA_DIST = OScompiler.h ibmTrace.h ppcGCstr.h ppcSpMcro.h vgaReg.h \
              vgaVideo.h wm3.h NOTES
 
diff-tree c4b7e9d1c16797c3e4b1200b40aceab5696a7fb8 (from 262b9b104a04e55969593ef96a16004e53ecd00a)
Author: Aaron Plattner <aplattner at nvidia.com>
Date:   Tue Feb 6 14:57:22 2007 -0800

    Add an RDTSC implementation to the x86 emulator.
    
    This instruction is being used in some debug VBIOSes.  This implementation
    doesn't even try to be accurate.  Instead, it just increments the counter by a
    fixed amount every time an rdtsc instruction in encountered, to avoid divides by
    zero.

diff --git a/hw/xfree86/x86emu/ops2.c b/hw/xfree86/x86emu/ops2.c
index 7b0156a..8c6c535 100644
--- a/hw/xfree86/x86emu/ops2.c
+++ b/hw/xfree86/x86emu/ops2.c
@@ -65,6 +65,40 @@ static void x86emuOp2_illegal_op(
 
 /****************************************************************************
 REMARKS:
+Handles opcode 0x0f,0x31
+****************************************************************************/
+static void x86emuOp2_rdtsc(u8 X86EMU_UNUSED(op2))
+{
+#ifdef __HAS_LONG_LONG__
+    static u64 counter = 0;
+#else
+    static u32 counter = 0;
+#endif
+
+    counter += 0x10000;
+
+    /* read timestamp counter */
+    /*
+     * Note that instead of actually trying to accurately measure this, we just
+     * increase the counter by a fixed amount every time we hit one of these
+     * instructions.  Feel free to come up with a better method.
+     */
+    START_OF_INSTR();
+    DECODE_PRINTF("RDTSC\n");
+    TRACE_AND_STEP();
+#ifdef __HAS_LONG_LONG__
+    M.x86.R_EAX = counter & 0xffffffff;
+    M.x86.R_EDX = counter >> 32;
+#else
+    M.x86.R_EAX = counter;
+    M.x86.R_EDX = 0;
+#endif
+    DECODE_CLEAR_SEGOVR();
+    END_OF_INSTR();
+}
+
+/****************************************************************************
+REMARKS:
 Handles opcode 0x0f,0x80-0x8F
 ****************************************************************************/
 static void x86emuOp2_long_jump(u8 op2)
@@ -2580,7 +2614,7 @@ void (*x86emu_optab2[256])(u8) =
 /*  0x2f */ x86emuOp2_illegal_op,
 
 /*  0x30 */ x86emuOp2_illegal_op,
-/*  0x31 */ x86emuOp2_illegal_op,
+/*  0x31 */ x86emuOp2_rdtsc,
 /*  0x32 */ x86emuOp2_illegal_op,
 /*  0x33 */ x86emuOp2_illegal_op,
 /*  0x34 */ x86emuOp2_illegal_op,
diff-tree 262b9b104a04e55969593ef96a16004e53ecd00a (from 876b806ec09d5ff0c6cd19df91006c4eefedfaa6)
Author: Soren Sandmann Pedersen <ssp at dhcp83-218.boston.redhat.com>
Date:   Tue Feb 6 17:30:22 2007 -0500

    Use the new 8888x0565mmx function in fbpict.c

diff --git a/fb/fbpict.c b/fb/fbpict.c
index 3ff609f..cd6cac2 100644
--- a/fb/fbpict.c
+++ b/fb/fbpict.c
@@ -1175,7 +1175,12 @@ fbComposite (CARD8      op,
 			func = fbCompositeSrc_8888x0888;
 			break;
 		    case PICT_r5g6b5:
-			func = fbCompositeSrc_8888x0565;
+#ifdef USE_MMX
+			if (fbHaveMMX())
+			    func = fbCompositeSrc_8888x0565mmx;
+			else
+#endif
+			    func = fbCompositeSrc_8888x0565;
 			break;
 		    default:
 			break;
@@ -1221,7 +1226,12 @@ fbComposite (CARD8      op,
 			func = fbCompositeSrc_8888x0888;
 			break;
 		    case PICT_b5g6r5:
-			func = fbCompositeSrc_8888x0565;
+#ifdef USE_MMX
+			if (fbHaveMMX())
+			    func = fbCompositeSrc_8888x0565mmx;
+			else
+#endif
+			    func = fbCompositeSrc_8888x0565;
 			break;
 		    default:
 			break;
diff-tree 876b806ec09d5ff0c6cd19df91006c4eefedfaa6 (from 13568d2aa43da4216bbcb46e1125ff28c323ac54)
Author: Soren Sandmann Pedersen <ssp at dhcp83-218.boston.redhat.com>
Date:   Tue Feb 6 17:16:23 2007 -0500

    Reapply patch to fix AMD CPU detection

diff --git a/fb/fbpict.c b/fb/fbpict.c
index 28503c0..3ff609f 100644
--- 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;            
diff-tree 13568d2aa43da4216bbcb46e1125ff28c323ac54 (from 5a3334410367a2186b2c667fa1eb6cf0baf93e95)
Author: Soren Sandmann Pedersen <ssp at dhcp83-218.boston.redhat.com>
Date:   Tue Feb 6 17:12:01 2007 -0500

    Revert "Fix for AMD cpu detection. Bug 9614, Dan Williams."
    
    This reverts commit b2cd3b133748cc5aa541905a703a6fdb1cbbb1e6 since
    unrelated changes in fbpict.c broke the build.

diff --git a/fb/fbpict.c b/fb/fbpict.c
index 39d8d9f..28503c0 100644
--- a/fb/fbpict.c
+++ b/fb/fbpict.c
@@ -189,23 +189,6 @@ fbCompositeSolidMask_nx8888x8888C (CARD8
     fbComposeGetStart (pDst, xDst, yDst, CARD32, dstStride, dstLine, 1);
     fbComposeGetStart (pMask, xMask, yMask, CARD32, maskStride, maskLine, 1);
 
-    {
-	comp_image_t src, msk, dst;
-	comp_pixel_t src_pixel;
-	comp_format_t msk_format = { 0xff000000, 0x00ff0000, 0x0000ff00, 0x000000ff };
-	
-	src_pixel.red   = src & 0x000000ff;
-	src_pixel.green = src & 0x0000ff00;
-	src_pixel.blue  = src & 0x00ff0000;
-	src_pixel.alpha = src & 0xff000000;
-	
-	comp_image_init_solid (&src, &src_pixel);
-	comp_image_init_bits  (&msk, maskLine, maskStride, &msk_format);
-	comp_image_init_bits  (&dst, dstLine, dstStride, &dst_format);
-
-	comp_over_c (src, msk, dst, srcX, srcY, mskX, mskY, dstX, dstY);
-    }
-    
     while (height--)
     {
 	dst = dstLine;
@@ -1533,9 +1516,7 @@ static unsigned int detectCPUFeatures(vo
             features |= SSE;
         if (result & (1 << 26))
             features |= SSE2;
-        if ((features & MMX) && !(features & SSE) &&
-            (strcmp(vendor, "AuthenticAMD") == 0 ||
-             strcmp(vendor, "Geode by NSC") == 0)) {
+        if ((result & MMX) && !(result & SSE) && (strcmp(vendor, "AuthenticAMD") == 0)) {
             /* check for AMD MMX extensions */
 
             unsigned int result;            
diff-tree 5a3334410367a2186b2c667fa1eb6cf0baf93e95 (from b2cd3b133748cc5aa541905a703a6fdb1cbbb1e6)
Author: Soren Sandmann Pedersen <ssp at dhcp83-218.boston.redhat.com>
Date:   Tue Feb 6 17:11:01 2007 -0500

    Add new fbCompositeSrc_8888x0565mmx() function, based on patch by Dan
    Williams. Bug 9682.

diff --git a/fb/fbmmx.c b/fb/fbmmx.c
index f74930a..5bbede1 100644
--- a/fb/fbmmx.c
+++ b/fb/fbmmx.c
@@ -1339,6 +1339,104 @@ fbCompositeSrc_8888x8888mmx (CARD8	op,
 }
 
 void
+fbCompositeSrc_8888x0565mmx (CARD8      op,
+			     PicturePtr pSrc,
+			     PicturePtr pMask,
+			     PicturePtr pDst,
+			     INT16      xSrc,
+			     INT16      ySrc,
+			     INT16      xMask,
+			     INT16      yMask,
+			     INT16      xDst,
+			     INT16      yDst,
+			     CARD16     width,
+			     CARD16     height)
+{
+    CARD16	*dstLine, *dst;
+    CARD32	*srcLine, *src;
+    FbStride	dstStride, srcStride;
+    CARD16	w;
+    
+    CHECKPOINT();
+    
+    fbComposeGetStart (pDst, xDst, yDst, CARD16, dstStride, dstLine, 1);
+    fbComposeGetStart (pSrc, xSrc, ySrc, CARD32, srcStride, srcLine, 1);
+    
+    assert (pSrc->pDrawable == pMask->pDrawable);
+    
+    while (height--)
+    {
+	dst = dstLine;
+	dstLine += dstStride;
+	src = srcLine;
+	srcLine += srcStride;
+	w = width;
+	
+	CHECKPOINT();
+	
+	while (w && (unsigned long)dst & 7)
+	{
+	    __m64 vsrc = load8888 (*src);
+	    ullong d = *dst;
+	    __m64 vdest = expand565 ((__m64)d, 0);
+	    
+	    vdest = pack565(over(vsrc, expand_alpha(vsrc), vdest), vdest, 0);
+	    
+	    *dst = (ullong)vdest;
+	    
+	    w--;
+	    dst++;
+	    src++;
+	}
+	
+	CHECKPOINT();
+	
+	while (w >= 4)
+	{
+	    __m64 vsrc0, vsrc1, vsrc2, vsrc3;
+	    __m64 vdest;
+
+	    vsrc0 = load8888(*(src + 0));
+	    vsrc1 = load8888(*(src + 1));
+	    vsrc2 = load8888(*(src + 2));
+	    vsrc3 = load8888(*(src + 3));
+
+	    vdest = *(__m64 *)dst;
+	    
+	    vdest = pack565(over(vsrc0, expand_alpha(vsrc0), expand565(vdest, 0)), vdest, 0);
+	    vdest = pack565(over(vsrc1, expand_alpha(vsrc1), expand565(vdest, 1)), vdest, 1);
+	    vdest = pack565(over(vsrc2, expand_alpha(vsrc2), expand565(vdest, 2)), vdest, 2);
+	    vdest = pack565(over(vsrc3, expand_alpha(vsrc3), expand565(vdest, 3)), vdest, 3);
+	    
+	    *(__m64 *)dst = vdest;
+
+	    w -= 4;
+	    dst += 4;
+	    src += 4;
+	}
+
+	CHECKPOINT();
+	
+	while (w)
+	{
+	    __m64 vsrc = load8888 (*src);
+	    ullong d = *dst;
+	    __m64 vdest = expand565 ((__m64)d, 0);
+	    
+	    vdest = pack565(over(vsrc, expand_alpha(vsrc), vdest), vdest, 0);
+	    
+	    *dst = (ullong)vdest;
+	    
+	    w--;
+	    dst++;
+	    src++;
+	}
+    }
+    
+    _mm_empty();
+}
+
+void
 fbCompositeSolidMask_nx8x8888mmx (CARD8      op,
 				  PicturePtr pSrc,
 				  PicturePtr pMask,
diff --git a/fb/fbmmx.h b/fb/fbmmx.h
index 34718e3..b3e4d71 100644
--- a/fb/fbmmx.h
+++ b/fb/fbmmx.h
@@ -130,6 +130,18 @@ void fbCompositeSrc_8888RevNPx8888mmx (C
 				       INT16      yDst,
 				       CARD16     width,
 				       CARD16     height);
+void fbCompositeSrc_8888x0565mmx (CARD8      op,
+				  PicturePtr pSrc,
+				  PicturePtr pMask,
+				  PicturePtr pDst,
+				  INT16      xSrc,
+				  INT16      ySrc,
+				  INT16      xMask,
+				  INT16      yMask,
+				  INT16      xDst,
+				  INT16      yDst,
+				  CARD16     width,
+				  CARD16     height);
 void fbCompositeSrc_8888RevNPx0565mmx (CARD8      op,
 				       PicturePtr pSrc,
 				       PicturePtr pMask,
diff-tree b2cd3b133748cc5aa541905a703a6fdb1cbbb1e6 (from 760a38c4c7ab66ae653d3acb92f5cda4bd44edd6)
Author: Soren Sandmann Pedersen <ssp at dhcp83-218.boston.redhat.com>
Date:   Tue Feb 6 16:43:37 2007 -0500

    Fix for AMD cpu detection. Bug 9614, Dan Williams.
    
    Credit for the fixes in this patch goes to:
    
    Marco Gritti <mpg at redhat dot com>
    Jordan Crouse <jordan dot crouse at amd dot com>

diff --git a/fb/fbpict.c b/fb/fbpict.c
index 28503c0..39d8d9f 100644
--- a/fb/fbpict.c
+++ b/fb/fbpict.c
@@ -189,6 +189,23 @@ fbCompositeSolidMask_nx8888x8888C (CARD8
     fbComposeGetStart (pDst, xDst, yDst, CARD32, dstStride, dstLine, 1);
     fbComposeGetStart (pMask, xMask, yMask, CARD32, maskStride, maskLine, 1);
 
+    {
+	comp_image_t src, msk, dst;
+	comp_pixel_t src_pixel;
+	comp_format_t msk_format = { 0xff000000, 0x00ff0000, 0x0000ff00, 0x000000ff };
+	
+	src_pixel.red   = src & 0x000000ff;
+	src_pixel.green = src & 0x0000ff00;
+	src_pixel.blue  = src & 0x00ff0000;
+	src_pixel.alpha = src & 0xff000000;
+	
+	comp_image_init_solid (&src, &src_pixel);
+	comp_image_init_bits  (&msk, maskLine, maskStride, &msk_format);
+	comp_image_init_bits  (&dst, dstLine, dstStride, &dst_format);
+
+	comp_over_c (src, msk, dst, srcX, srcY, mskX, mskY, dstX, dstY);
+    }
+    
     while (height--)
     {
 	dst = dstLine;
@@ -1516,7 +1533,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;            
diff-tree 760a38c4c7ab66ae653d3acb92f5cda4bd44edd6 (from 17d85387d1e6851d35474b65929e268ca64ef65b)
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Mon Feb 5 03:39:36 2007 +0200

    XkbCopyKeymap: fix copy-and-waste accident
    
    When we reallocated modmap, we accidentally clobbered syms with the
    result, leaving syms definitely too small, and modmap also potentially too
    small (as well as not actually allocated anymore).

diff --git a/xkb/xkbUtils.c b/xkb/xkbUtils.c
index 400306a..062159e 100644
--- a/xkb/xkbUtils.c
+++ b/xkb/xkbUtils.c
@@ -1220,7 +1220,7 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr
                     tmp = xalloc(src->max_key_code + 1);
                 if (!tmp)
                     return FALSE;
-                dst->map->syms = tmp;
+                dst->map->modmap = tmp;
             }
             memcpy(dst->map->modmap, src->map->modmap, src->max_key_code + 1);
         }
diff-tree 17d85387d1e6851d35474b65929e268ca64ef65b (from 236f04b638e7d4d1656c6bedd8a6e8d7cec285ec)
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Thu Jan 18 15:23:57 2007 +1100

    dmx, vfb, xnest: fix fbcmap compilation
    
    Don't always define XFree86Server, but only for damn fbcmap.c.
    Split fbcmap.c into its own library to achieve this.

diff --git a/hw/dmx/Makefile.am b/hw/dmx/Makefile.am
index 89136b9..17d27ed 100644
--- a/hw/dmx/Makefile.am
+++ b/hw/dmx/Makefile.am
@@ -2,6 +2,7 @@ DIST_SUBDIRS = input config glxProxy exa
 
 SUBDIRS = input config examples
 bin_PROGRAMS = Xdmx
+noinst_LIBRARIES = libfbcmap.a
 
 if XINERAMA
 PANORAMIX_SRCS = $(top_srcdir)/Xext/panoramiX.c
@@ -16,13 +17,20 @@ GLX_INCS = -I$(top_srcdir)/hw/xfree86/di
 GLX_DEFS = @GL_CFLAGS@ 
 endif
 
-# It's essential that fbcmap.c be compiled with this flag for DMX to work!!
-DMX_CFLAGS = -DXFree86Server=1
-
 if BUILDDOCS
 SUBDIRS += doc
 endif
 
+AM_CFLAGS = \
+      -DHAVE_DMX_CONFIG_H \
+      $(DIX_CFLAGS) \
+      $(GLX_INCS) \
+      $(GLX_DEFS) \
+      @DMXMODULES_CFLAGS@
+
+libfbcmap_a_SOURCES = libfbcmap.a
+libfbcmap_a_CFLAGS = $(AM_CFLAGS) -DXFree86Server
+
 Xdmx_SOURCES = dmx.c \
                dmxcb.c \
                dmxcb.h \
@@ -67,7 +75,6 @@ Xdmx_SOURCES = dmx.c \
                dmxvisual.h \
                dmxwindow.c \
                dmxwindow.h \
-               $(top_srcdir)/fb/fbcmap.c \
                $(top_srcdir)/mi/miinitext.c \
                $(GLX_SRCS) 
 
@@ -82,16 +89,9 @@ Xdmx_LDADD = $(XORG_CORE_LIBS) \
              $(GLX_LIBS) \
              input/libdmxinput.a \
              config/libdmxconfig.a \
+	     libfbcmap.a \
              @DMXMODULES_LIBS@
 
-Xdmx_CFLAGS = \
-              -DHAVE_DMX_CONFIG_H \
-              $(DIX_CFLAGS) \
-              $(GLX_INCS) \
-              $(GLX_DEFS) \
-              $(DMX_CFLAGS) \
-              @DMXMODULES_CFLAGS@
-
 # Man page
 appmandir = $(APP_MAN_DIR)
 
diff --git a/hw/vfb/Makefile.am b/hw/vfb/Makefile.am
index 4f711fd..40c3854 100644
--- a/hw/vfb/Makefile.am
+++ b/hw/vfb/Makefile.am
@@ -1,12 +1,21 @@
 bin_PROGRAMS = Xvfb
+noinst_LIBRARIES = libfbcmap.a
+
+AM_CFLAGS = -DHAVE_DIX_CONFIG_H \
+            -DNO_HW_ONLY_EXTS \
+            -DNO_MODULE_EXTS \
+            $(XVFBMODULES_CFLAGS) \
+	    $(DIX_CFLAGS)
 
 SRCS =	InitInput.c \
 	InitOutput.c \
 	lk201kbd.h \
 	$(top_srcdir)/Xext/dpmsstubs.c \
 	$(top_srcdir)/Xi/stubs.c \
-	$(top_srcdir)/mi/miinitext.c \
-	$(top_srcdir)/fb/fbcmap.c
+	$(top_srcdir)/mi/miinitext.c
+
+libfbcmap_a_CFLAGS = $(AM_CFLAGS) -DXFree86Server
+libfbcmap_a_SOURCES = $(top_srcdir)/fb/fbcmap.c
 
 Xvfb_SOURCES = $(SRCS)
 
@@ -14,16 +23,8 @@ Xvfb_LDADD = $(XORG_CORE_LIBS) \
              $(XVFB_LIBS) \
              $(XSERVER_LIBS) \
              $(EXTENSION_LIBS) \
-             $(XVFBMODULES_LIBS)
-
-Xvfb_LDFLAGS =
-
-AM_CFLAGS = -DHAVE_DIX_CONFIG_H \
-            -DNO_HW_ONLY_EXTS \
-            -DNO_MODULE_EXTS \
-            -DXFree86Server \
-            $(XVFBMODULES_CFLAGS) \
-	    $(DIX_CFLAGS)
+             $(XVFBMODULES_LIBS) \
+	     libfbcmap.a
 
 # Man page
 include $(top_srcdir)/cpprules.in
diff --git a/hw/xnest/Makefile.am b/hw/xnest/Makefile.am
index cce1fef..b897616 100644
--- a/hw/xnest/Makefile.am
+++ b/hw/xnest/Makefile.am
@@ -1,4 +1,10 @@
 bin_PROGRAMS = Xnest
+noinst_LIBRARIES = libfbcmap.a
+
+AM_CFLAGS = -DHAVE_XNEST_CONFIG_H \
+            -DNO_HW_ONLY_EXTS \
+            $(DIX_CFLAGS) \
+            $(XNESTMODULES_CFLAGS)
 
 SRCS =	Args.c \
 	Args.h \
@@ -37,23 +43,17 @@ SRCS =	Args.c \
 	xnest-config.h \
 	$(top_srcdir)/Xext/dpmsstubs.c \
 	$(top_srcdir)/Xi/stubs.c \
-	$(top_srcdir)/mi/miinitext.c \
-	$(top_srcdir)/fb/fbcmap.c
+	$(top_srcdir)/mi/miinitext.c
 
+libfbcmap_a_SOURCES = $(top_srcdir)/fb/fbcmap.c
+libfbcmap_a_CFLAGS = $(AM_CFLAGS) -DXFree86Server
 
 Xnest_SOURCES = $(SRCS)
 
 Xnest_LDADD = $(XORG_CORE_LIBS) \
               $(XNEST_LIBS) \
-              $(XNESTMODULES_LIBS)
-
-Xnest_LDFLAGS =
-
-AM_CFLAGS = -DHAVE_XNEST_CONFIG_H \
-            -DNO_HW_ONLY_EXTS \
-            -DXFree86Server \
-            $(DIX_CFLAGS) \
-            $(XNESTMODULES_CFLAGS)
+              $(XNESTMODULES_LIBS) \
+	      libfbcmap.a
 
 EXTRA_DIST = os2Stub.c \
              icon \
diff-tree 236f04b638e7d4d1656c6bedd8a6e8d7cec285ec (from eb228e8d1eaa78911541b2fec5d04a74c1299718)
Author: Dave Airlie <airlied at linux.ie>
Date:   Mon Feb 5 09:09:12 2007 +1100

    remove array_cache from everywhere

diff --git a/GL/mesa/.gitignore b/GL/mesa/.gitignore
index 44e2733..a00885d 100644
--- a/GL/mesa/.gitignore
+++ b/GL/mesa/.gitignore
@@ -2,8 +2,6 @@ X/drivers
 X/glxheader.h
 X/xmesaP.h
 X/xm*.c
-array_cache/*.c
-array_cache/*.h
 mesa/drivers
 mesa/glxheader.h
 mesa/xm*.c
diff --git a/GL/mesa/X/Makefile.am b/GL/mesa/X/Makefile.am
index 2a9f422..45345a7 100644
--- a/GL/mesa/X/Makefile.am
+++ b/GL/mesa/X/Makefile.am
@@ -2,7 +2,6 @@ noinst_LTLIBRARIES = libX.la
 
 INCLUDES = -I at MESA_SOURCE@/include \
            -I../X \
-           -I../array_cache \
            -I../glapi \
            -I../main \
            -I../math \
diff --git a/GL/mesa/glapi/Makefile.am b/GL/mesa/glapi/Makefile.am
index de457b9..db79114 100644
--- a/GL/mesa/glapi/Makefile.am
+++ b/GL/mesa/glapi/Makefile.am
@@ -7,7 +7,6 @@ AM_CFLAGS = \
 
 INCLUDES = -I at MESA_SOURCE@/include \
            -I../X \
-           -I../array_cache \
            -I../glapi \
            -I../main \
            -I../math \
diff --git a/GL/mesa/main/Makefile.am b/GL/mesa/main/Makefile.am
index 64b383d..20b7935 100644
--- a/GL/mesa/main/Makefile.am
+++ b/GL/mesa/main/Makefile.am
@@ -7,7 +7,6 @@ AM_CFLAGS = \
 
 INCLUDES = -I at MESA_SOURCE@/include \
            -I../X \
-           -I../array_cache \
            -I../glapi \
            -I../main \
            -I../math \
diff --git a/GL/mesa/math/Makefile.am b/GL/mesa/math/Makefile.am
index 5e99d90..c7c5642 100644
--- a/GL/mesa/math/Makefile.am
+++ b/GL/mesa/math/Makefile.am
@@ -7,7 +7,6 @@ AM_CFLAGS = \
 
 INCLUDES = -I at MESA_SOURCE@/include \
            -I../X \
-           -I../array_cache \
            -I../glapi \
            -I../main \
            -I../math \
diff --git a/GL/mesa/shader/Makefile.am b/GL/mesa/shader/Makefile.am
index 4bd5736..3519545 100644
--- a/GL/mesa/shader/Makefile.am
+++ b/GL/mesa/shader/Makefile.am
@@ -9,7 +9,6 @@ AM_CFLAGS = \
 
 INCLUDES = -I at MESA_SOURCE@/include \
            -I../X \
-           -I../array_cache \
            -I../glapi \
            -I../main \
            -I../math \
diff --git a/GL/mesa/shader/grammar/Makefile.am b/GL/mesa/shader/grammar/Makefile.am
index 0974d5b..332c8e9 100644
--- a/GL/mesa/shader/grammar/Makefile.am
+++ b/GL/mesa/shader/grammar/Makefile.am
@@ -7,7 +7,6 @@ AM_CFLAGS = \
 
 INCLUDES = -I at MESA_SOURCE@/include \
            -I../../X \
-           -I../../array_cache \
            -I../../glapi \
            -I../../main \
            -I../../math \
diff --git a/GL/mesa/shader/slang/Makefile.am b/GL/mesa/shader/slang/Makefile.am
index 8f2636e..04001c4 100644
--- a/GL/mesa/shader/slang/Makefile.am
+++ b/GL/mesa/shader/slang/Makefile.am
@@ -8,7 +8,6 @@ AM_CFLAGS = \
 INCLUDES = -I at MESA_SOURCE@/include \
            -I../grammar \
            -I../../X \
-           -I../../array_cache \
            -I../../glapi \
            -I../../main \
            -I../../math \
diff --git a/GL/mesa/swrast/Makefile.am b/GL/mesa/swrast/Makefile.am
index d972af6..5ed6576 100644
--- a/GL/mesa/swrast/Makefile.am
+++ b/GL/mesa/swrast/Makefile.am
@@ -7,7 +7,6 @@ AM_CFLAGS = \
 
 INCLUDES = -I at MESA_SOURCE@/include \
            -I../X \
-           -I../array_cache \
            -I../glapi \
            -I../main \
            -I../math \
diff --git a/GL/mesa/swrast_setup/Makefile.am b/GL/mesa/swrast_setup/Makefile.am
index 8d70408..1f3c031 100644
--- a/GL/mesa/swrast_setup/Makefile.am
+++ b/GL/mesa/swrast_setup/Makefile.am
@@ -7,7 +7,6 @@ AM_CFLAGS = \
 
 INCLUDES = -I at MESA_SOURCE@/include \
            -I../X \
-           -I../array_cache \
            -I../glapi \
            -I../main \
            -I../math \
diff --git a/GL/mesa/tnl/Makefile.am b/GL/mesa/tnl/Makefile.am
index b59a5fa..5d9bdb1 100644
--- a/GL/mesa/tnl/Makefile.am
+++ b/GL/mesa/tnl/Makefile.am
@@ -7,7 +7,6 @@ AM_CFLAGS = \
 
 INCLUDES = -I at MESA_SOURCE@/include \
            -I../X \
-           -I../array_cache \
            -I../glapi \
            -I../main \
            -I../math \
diff --git a/GL/mesa/vbo/Makefile.am b/GL/mesa/vbo/Makefile.am
index 09046bb..9943f2a 100644
--- a/GL/mesa/vbo/Makefile.am
+++ b/GL/mesa/vbo/Makefile.am
@@ -7,7 +7,6 @@ AM_CFLAGS = \
 
 INCLUDES = -I at MESA_SOURCE@/include \
            -I../X \
-           -I../array_cache \
            -I../glapi \
            -I../main \
            -I../math \
diff-tree eb228e8d1eaa78911541b2fec5d04a74c1299718 (from fb1bc1c65b88527b42a0e4abed23e5ddaae711b7)
Author: Alan Hourihane <alanh at fairlite.demon.co.uk>
Date:   Sun Feb 4 22:06:59 2007 +0000

    clean up more of the vbo fallout

diff --git a/configure.ac b/configure.ac
index d23c3c9..4a33ac0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1838,7 +1838,6 @@ 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
diff-tree fb1bc1c65b88527b42a0e4abed23e5ddaae711b7 (from d8e148ec841d340327e6813127b0e0ffc4db712d)
Author: Dave Airlie <airlied at linux.ie>
Date:   Sun Feb 4 18:39:58 2007 +1100

    add vbo to .gitignore

diff --git a/GL/mesa/.gitignore b/GL/mesa/.gitignore
index 82ab827..44e2733 100644
--- a/GL/mesa/.gitignore
+++ b/GL/mesa/.gitignore
@@ -30,3 +30,5 @@ tnl/*.c
 tnl/*.h
 x86
 x86-64
+vbo/*.c
+vbo/*.h
diff-tree d8e148ec841d340327e6813127b0e0ffc4db712d (from 5dcad9e9d7d9993d65f989219bee94a060bbf476)
Author: Dave Airlie <airlied at linux.ie>
Date:   Sun Feb 4 18:39:04 2007 +1100

    update xserver for vbo code in mesa

diff --git a/GL/mesa/Makefile.am b/GL/mesa/Makefile.am
index 5393628..99d3834 100644
--- a/GL/mesa/Makefile.am
+++ b/GL/mesa/Makefile.am
@@ -1,4 +1,4 @@
-SUBDIRS = main math swrast swrast_setup tnl shader X glapi
+SUBDIRS = main math swrast swrast_setup tnl shader X glapi vbo
 
 noinst_LTLIBRARIES = libGLcore.la
 
@@ -11,4 +11,5 @@ libGLcore_la_LIBADD = main/libmain.la \
                       shader/libshader.la \
 		      shader/grammar/libgrammar.la \
 		      shader/slang/libslang.la \
+                      vbo/libvbo.la \
                       X/libX.la
diff --git a/GL/mesa/tnl/Makefile.am b/GL/mesa/tnl/Makefile.am
index 717e6fd..b59a5fa 100644
--- a/GL/mesa/tnl/Makefile.am
+++ b/GL/mesa/tnl/Makefile.am
@@ -19,13 +19,9 @@ INCLUDES = -I at MESA_SOURCE@/include \
            -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 \
@@ -42,9 +38,4 @@ nodist_libtnl_la_SOURCES = t_array_api.c
                       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
diff --git a/GL/mesa/vbo/Makefile.am b/GL/mesa/vbo/Makefile.am
new file mode 100644
index 0000000..09046bb
--- /dev/null
+++ b/GL/mesa/vbo/Makefile.am
@@ -0,0 +1,36 @@
+noinst_LTLIBRARIES = libvbo.la
+
+AM_CFLAGS = \
+	$(DIX_CFLAGS) \
+	-DXFree86Server \
+	@GLX_DEFINES@
+
+INCLUDES = -I at MESA_SOURCE@/include \
+           -I../X \
+           -I../array_cache \
+           -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
diff --git a/GL/symlink-mesa.sh b/GL/symlink-mesa.sh
index 4205606..7d1e06e 100755
--- a/GL/symlink-mesa.sh
+++ b/GL/symlink-mesa.sh
@@ -148,6 +148,15 @@ symlink_mesa_shader_slang_library() {
     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
@@ -205,6 +214,7 @@ symlink_mesa() {
     symlink_mesa_glapi
     symlink_mesa_ppc
     symlink_mesa_sparc
+    symlink_mesa_vbo
     symlink_mesa_x86
     symlink_mesa_x8664
 }
diff --git a/configure.ac b/configure.ac
index c0a2770..d23c3c9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1848,6 +1848,7 @@ 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
diff-tree 5dcad9e9d7d9993d65f989219bee94a060bbf476 (from 170a55022ebc7b148bff93886eda152a0d5ce79a)
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Fri Feb 2 14:44:55 2007 -0800

    Fix bus error on startup in 64-bit Xephyr
    
    hostx_get_visual_masks takes unsigned long * arguments, but was being
    passed pointers to CARD32's.

diff --git a/hw/kdrive/ephyr/ephyr.c b/hw/kdrive/ephyr/ephyr.c
index 7db8675..2ca51c3 100644
--- a/hw/kdrive/ephyr/ephyr.c
+++ b/hw/kdrive/ephyr/ephyr.c
@@ -81,7 +81,8 @@ Bool
 ephyrScreenInitialize (KdScreenInfo *screen, EphyrScrPriv *scrpriv)
 {
   int width = 640, height = 480; 
-
+  unsigned long redMask, greenMask, blueMask;
+  
   if (hostx_want_screen_size(&width, &height) 
       || !screen->width || !screen->height)
     {
@@ -133,30 +134,24 @@ ephyrScreenInitialize (KdScreenInfo *scr
 	{
 	  screen->fb[0].depth = 15;
 	  screen->fb[0].bitsPerPixel = 16;
-	  
-	  hostx_get_visual_masks (&screen->fb[0].redMask,
-				  &screen->fb[0].greenMask,
-				  &screen->fb[0].blueMask);
-	  
 	}
       else if (screen->fb[0].depth <= 16)
 	{
 	  screen->fb[0].depth = 16;
 	  screen->fb[0].bitsPerPixel = 16;
-	  
-	  hostx_get_visual_masks (&screen->fb[0].redMask,
-				  &screen->fb[0].greenMask,
-				  &screen->fb[0].blueMask);
 	}
       else
 	{
 	  screen->fb[0].depth = 24;
 	  screen->fb[0].bitsPerPixel = 32;
-	  
-	  hostx_get_visual_masks (&screen->fb[0].redMask,
-				  &screen->fb[0].greenMask,
-				  &screen->fb[0].blueMask);
 	}
+
+      hostx_get_visual_masks (&redMask, &greenMask, &blueMask);
+
+      screen->fb[0].redMask = (Pixel) redMask;
+      screen->fb[0].greenMask = (Pixel) greenMask;
+      screen->fb[0].blueMask = (Pixel) blueMask;
+
     }
   
   scrpriv->randr = screen->randr;
diff-tree 170a55022ebc7b148bff93886eda152a0d5ce79a (from e6a505be84f5f72349d6860dc5a5058367516019)
Author: Alan Hourihane <alanh at fairlite.demon.co.uk>
Date:   Fri Feb 2 20:56:12 2007 +0000

    remove file

diff --git a/GL/mesa/array_cache/Makefile.am b/GL/mesa/array_cache/Makefile.am
deleted file mode 100644
index 5016b73..0000000
--- a/GL/mesa/array_cache/Makefile.am
+++ /dev/null
@@ -1,21 +0,0 @@
-noinst_LTLIBRARIES = libac.la
-
-AM_CFLAGS = \
-	$(DIX_CFLAGS) \
-	-DXFree86Server \
-	@GLX_DEFINES@
-
-INCLUDES = -I at MESA_SOURCE@/include \
-           -I../X \
-           -I../array_cache \
-           -I../glapi \
-           -I../main \
-           -I../math \
-           -I../shader \
-           -I../swrast \
-           -I../swrast_setup \
-           -I../tnl \
-           -I.. \
-           -I$(top_srcdir)/hw/xfree86/os-support
-
-nodist_libac_la_SOURCES = ac_context.c ac_import.c
diff-tree e6a505be84f5f72349d6860dc5a5058367516019 (from af20485ec370801f2aabfaeae17bbd030a849bd1)
Author: Dan Nicholson <dan at conor.dwcab.com>
Date:   Fri Feb 2 20:53:01 2007 +0000

    The array_cache sources don't exist anymore in the Mesa tree,
    so we shouldn't try to build them.

diff --git a/GL/mesa/Makefile.am b/GL/mesa/Makefile.am
index 18eebfc..5393628 100644
--- a/GL/mesa/Makefile.am
+++ b/GL/mesa/Makefile.am
@@ -1,11 +1,10 @@
-SUBDIRS = main math array_cache swrast swrast_setup tnl shader X glapi
+SUBDIRS = main math swrast swrast_setup tnl shader X glapi
 
 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 \
diff-tree af20485ec370801f2aabfaeae17bbd030a849bd1 (from cf5b29d75dad7c74543f49f010c817623a3df747)
Author: Alan Hourihane <alanh at fairlite.demon.co.uk>
Date:   Fri Feb 2 19:14:46 2007 +0000

    Remove array_cache for recent Mesa changes

diff --git a/GL/symlink-mesa.sh b/GL/symlink-mesa.sh
index 9687ce8..4205606 100755
--- a/GL/symlink-mesa.sh
+++ b/GL/symlink-mesa.sh
@@ -85,15 +85,6 @@ symlink_mesa_math() {
     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
@@ -203,7 +194,6 @@ symlink_mesa_x8664() {
 symlink_mesa() {
     symlink_mesa_main
     symlink_mesa_math
-    symlink_mesa_ac
     symlink_mesa_swrast
     symlink_mesa_ss
     symlink_mesa_tnl
diff-tree cf5b29d75dad7c74543f49f010c817623a3df747 (from 4f2f3233c808fd86bf9f6c09937feda9e0b367fd)
Author: George Sapountzis <gsap7 at yahoo.gr>
Date:   Fri Feb 2 12:57:38 2007 +0200

    dmx: drop leftover __GLXdrawablePrivateRec struct.

diff --git a/hw/dmx/glxProxy/glxdrawable.h b/hw/dmx/glxProxy/glxdrawable.h
index 59fffa7..baed683 100644
--- a/hw/dmx/glxProxy/glxdrawable.h
+++ b/hw/dmx/glxProxy/glxdrawable.h
@@ -49,58 +49,6 @@ typedef struct {
 
 } __GLXpixmap;
 
-struct __GLXdrawablePrivateRec {
-    /*
-    ** list of drawable private structs
-    */
-    struct __GLXdrawablePrivateRec *last;
-    struct __GLXdrawablePrivateRec *next;
-
-    DrawablePtr pDraw;
-    XID drawId;
-    __GLXpixmap *pGlxPixmap;
-
-    /*
-    ** Either DRAWABLE_PIXMAP or DRAWABLE_WINDOW, copied from pDraw above.
-    ** Needed by the resource freer because pDraw might already have been
-    ** freed.
-    */
-    int type;
-
-    /*
-    ** Configuration of the visual to which this drawable was created.
-    */
-    __GLXvisualConfig *pGlxVisual;
-
-    /*
-    ** cached drawable size and origin
-    */
-    GLint xorigin, yorigin;
-    GLint width, height;
-
-    /*
-    ** list of contexts bound to this drawable
-    */
-    struct __GLXcontextRec *glxc;
-
-    /*
-    ** "methods" that the drawble should be able to respond to.
-    */
-    void (*freeBuffers)(struct __GLXdrawablePrivateRec *);
-    void (*updatePalette)(struct __GLXdrawablePrivateRec *);
-    GLboolean (*swapBuffers)(struct __GLXdrawablePrivateRec *);
-
-    /*
-    ** The GL drawable (information shared between GLX and the GL core)
-    */
-    __GLdrawablePrivate glPriv;
-
-    /*
-    ** reference count
-    */
-    int refCount;
-};
-
 typedef struct {
     DrawablePtr pDraw;
     int type;
diff --git a/hw/dmx/glxProxy/glxserver.h b/hw/dmx/glxProxy/glxserver.h
index db5be43..021d4c1 100644
--- a/hw/dmx/glxProxy/glxserver.h
+++ b/hw/dmx/glxProxy/glxserver.h
@@ -58,9 +58,6 @@
 #include <GL/glxproto.h>
 #include <GL/glxint.h>
 
-/* For glxscreens.h */
-typedef struct __GLXdrawablePrivateRec __GLXdrawablePrivate;
-
 #include "glxscreens.h"
 #include "glxdrawable.h"
 #include "glxcontext.h"
diff-tree 4f2f3233c808fd86bf9f6c09937feda9e0b367fd (from 8274ea6aa97b06a56b7468c3908894c0ff72b687)
Author: Eric Anholt <eric at anholt.net>
Date:   Thu Feb 1 15:10:29 2007 -0800

    Fix the size expectations of xRRSetCrtcGamma.
    
    It was using REQUEST_SIZE_MATCH (client request length must equal request size)
    rather than REQUEST_AT_LEAST_SIZE (client request length must be at least
    big enough for request size), and this request has data following the request
    structure.

diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
index c84ec61..fdd1d42 100644
--- a/randr/rrcrtc.c
+++ b/randr/rrcrtc.c
@@ -870,7 +870,7 @@ ProcRRSetCrtcGamma (ClientPtr client)
     unsigned long		len;
     CARD16			*red, *green, *blue;
     
-    REQUEST_SIZE_MATCH(xRRSetCrtcGammaReq);
+    REQUEST_AT_LEAST_SIZE(xRRSetCrtcGammaReq);
     crtc = LookupCrtc (client, stuff->crtc, DixWriteAccess);
     if (!crtc)
 	return RRErrorBase + BadRRCrtc;
diff-tree 8274ea6aa97b06a56b7468c3908894c0ff72b687 (from 8bce182568f14edfb03911d8c5d791fd83bb6222)
Author: Eric Anholt <eric at anholt.net>
Date:   Thu Feb 1 12:15:54 2007 -0800

    Set the Damage version supported in the server, instead of using damageproto.
    
    This was caught by distributions upgrading damageproto to 1.1, before the
    server they had supported it.  The server then advertised the new version
    without supporting the protocol.

diff --git a/damageext/damageext.c b/damageext/damageext.c
index ae1091e..739d20f 100755
--- a/damageext/damageext.c
+++ b/damageext/damageext.c
@@ -35,6 +35,13 @@ int		DamageClientPrivateIndex;
 RESTYPE		DamageExtType;
 RESTYPE		DamageExtWinType;
 
+/* Version of the damage extension supported by the server, as opposed to the
+ * DAMAGE_* defines from damageproto for what version the proto header
+ * supports.
+ */
+#define SERVER_DAMAGE_MAJOR	1
+#define SERVER_DAMAGE_MINOR	1
+
 #define prScreen	screenInfo.screens[0]
 
 static void
@@ -143,16 +150,16 @@ ProcDamageQueryVersion(ClientPtr client)
     rep.type = X_Reply;
     rep.length = 0;
     rep.sequenceNumber = client->sequence;
-    if (stuff->majorVersion < DAMAGE_MAJOR) {
+    if (stuff->majorVersion < SERVER_DAMAGE_MAJOR) {
 	rep.majorVersion = stuff->majorVersion;
 	rep.minorVersion = stuff->minorVersion;
     } else {
-	rep.majorVersion = DAMAGE_MAJOR;
-	if (stuff->majorVersion == DAMAGE_MAJOR && 
-	    stuff->minorVersion < DAMAGE_MINOR)
+	rep.majorVersion = SERVER_DAMAGE_MAJOR;
+	if (stuff->majorVersion == SERVER_DAMAGE_MAJOR && 
+	    stuff->minorVersion < SERVER_DAMAGE_MINOR)
 	    rep.minorVersion = stuff->minorVersion;
 	else
-	    rep.minorVersion = DAMAGE_MINOR;
+	    rep.minorVersion = SERVER_DAMAGE_MINOR;
     }
     pDamageClient->major_version = rep.majorVersion;
     pDamageClient->minor_version = rep.minorVersion;
diff-tree 8bce182568f14edfb03911d8c5d791fd83bb6222 (from 31f2d4a57e04f5ea635fbb50c508405c4fc37b65)
Author: Eric Anholt <eric at anholt.net>
Date:   Mon Jan 29 17:30:59 2007 -0800

    Restore a few important lines killed in the previous commit.
    
    Typical results were failure to sync, and a black screen.

diff --git a/hw/xfree86/common/xf86Mode.c b/hw/xfree86/common/xf86Mode.c
index 7f5ae36..d5085b5 100644
--- a/hw/xfree86/common/xf86Mode.c
+++ b/hw/xfree86/common/xf86Mode.c
@@ -725,6 +725,11 @@ xf86SetModeCrtc(DisplayModePtr p, int ad
         p->CrtcVSyncEnd         *= p->VScan;
         p->CrtcVTotal           *= p->VScan;
     }
+    p->CrtcVBlankStart = min(p->CrtcVSyncStart, p->CrtcVDisplay);
+    p->CrtcVBlankEnd = max(p->CrtcVSyncEnd, p->CrtcVTotal);
+    p->CrtcHBlankStart = min(p->CrtcHSyncStart, p->CrtcHDisplay);
+    p->CrtcHBlankEnd = max(p->CrtcHSyncEnd, p->CrtcHTotal);
+
     p->CrtcHAdjusted = FALSE;
     p->CrtcVAdjusted = FALSE;
 }
diff-tree 31f2d4a57e04f5ea635fbb50c508405c4fc37b65 (from 1627af54497bee659ea30f2850b39cbbf576e22d)
Author: Eric Anholt <eric at anholt.net>
Date:   Mon Jan 29 09:39:33 2007 -0800

    Bug #9680: Remove bogus blank length limiting in xf86SetModeCrtc().
    
    Our modes typically come from EDID or default modes, and when the monitor
    asks for a specific mode, deciding to tweak it usually results in incorrect
    display.  And if the user is specifying a mode by hand, tweaking it then is
    still pretty rude.
    
    Reviewed by: ajax

diff --git a/hw/xfree86/common/xf86Mode.c b/hw/xfree86/common/xf86Mode.c
index 3cebac7..7f5ae36 100644
--- a/hw/xfree86/common/xf86Mode.c
+++ b/hw/xfree86/common/xf86Mode.c
@@ -727,45 +727,6 @@ xf86SetModeCrtc(DisplayModePtr p, int ad
     }
     p->CrtcHAdjusted = FALSE;
     p->CrtcVAdjusted = FALSE;
-
-    /*
-     * XXX
-     *
-     * The following is taken from VGA, but applies to other cores as well.
-     */
-    p->CrtcVBlankStart = min(p->CrtcVSyncStart, p->CrtcVDisplay);
-    p->CrtcVBlankEnd = max(p->CrtcVSyncEnd, p->CrtcVTotal);
-    if ((p->CrtcVBlankEnd - p->CrtcVBlankStart) >= 127) {
-        /* 
-         * V Blanking size must be < 127.
-         * Moving blank start forward is safer than moving blank end
-         * back, since monitors clamp just AFTER the sync pulse (or in
-         * the sync pulse), but never before.
-         */
-        p->CrtcVBlankStart = p->CrtcVBlankEnd - 127;
-	/*
-	 * If VBlankStart is now > VSyncStart move VBlankStart
-	 * to VSyncStart using the maximum width that fits into
-	 * VTotal.
-	 */
-	if (p->CrtcVBlankStart > p->CrtcVSyncStart) {
-	    p->CrtcVBlankStart = p->CrtcVSyncStart;
-	    p->CrtcVBlankEnd = min(p->CrtcHBlankStart + 127, p->CrtcVTotal);
-	}
-    }
-    p->CrtcHBlankStart = min(p->CrtcHSyncStart, p->CrtcHDisplay);
-    p->CrtcHBlankEnd = max(p->CrtcHSyncEnd, p->CrtcHTotal);
-
-    if ((p->CrtcHBlankEnd - p->CrtcHBlankStart) >= 63 * 8) {
-        /*
-         * H Blanking size must be < 63*8. Same remark as above.
-         */
-        p->CrtcHBlankStart = p->CrtcHBlankEnd - 63 * 8;
-	if (p->CrtcHBlankStart > p->CrtcHSyncStart) {
-	    p->CrtcHBlankStart = p->CrtcHSyncStart;
-	    p->CrtcHBlankEnd = min(p->CrtcHBlankStart + 63 * 8, p->CrtcHTotal);
-	}
-    }
 }
 
 /**
diff-tree 1627af54497bee659ea30f2850b39cbbf576e22d (from cf7ca9d09cba14d107152a5179de38e5ef7bd784)
Author: Jonathan Lim <jlim at sgi.com>
Date:   Fri Jan 26 13:00:45 2007 +0100

    Call linuxPciOpenFile() for r/w access if applicable.
    
    Currently, the call to linuxPciOpenFile() is always made for read
    only access which causes the subsequent mmap call to fail when the
    memory is mapped read/write.
    
    Xorg #9692

diff --git a/hw/xfree86/os-support/bus/linuxPci.c b/hw/xfree86/os-support/bus/linuxPci.c
index 03388f1..55ed878 100644
--- a/hw/xfree86/os-support/bus/linuxPci.c
+++ b/hw/xfree86/os-support/bus/linuxPci.c
@@ -570,7 +570,8 @@ linuxMapPci(int ScreenNum, int Flags, PC
 
 	xf86InitVidMem();
 
-	if (((fd = linuxPciOpenFile(Tag ,FALSE)) < 0) ||
+       prot = ((Flags & VIDMEM_READONLY) == 0);
+       if (((fd = linuxPciOpenFile(Tag, prot)) < 0) ||
 	    (ioctl(fd, mmap_ioctl, 0) < 0))
 	    break;
 
diff-tree cf7ca9d09cba14d107152a5179de38e5ef7bd784 (from 5abd50e37ceda134897891ed32e05215db67e0b4)
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Wed Jan 24 20:20:48 2007 -0800

    Plug memory leak in doLoadModule()

diff --git a/hw/xfree86/loader/loadmod.c b/hw/xfree86/loader/loadmod.c
index 12f5dc9..ec0f181 100644
--- a/hw/xfree86/loader/loadmod.c
+++ b/hw/xfree86/loader/loadmod.c
@@ -903,7 +903,7 @@ doLoadModule(const char *module, const c
      * check the elements in the path
      */
     if (PathIsAbsolute(module))
-	xstrdup(module);
+	found = xstrdup(module);
     path_elem = pathlist;
     while (!found && *path_elem != NULL) {
 	found = FindModule(m, *path_elem, subdirlist, patterns);
diff-tree 5abd50e37ceda134897891ed32e05215db67e0b4 (from b32a40817fc0e2ac2edf2fa22a8813087fce2e7b)
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Wed Jan 24 18:54:38 2007 -0800

    Correct help lines for configure's --with-vendor-name flags

diff --git a/configure.ac b/configure.ac
index c3107dc..c0a2770 100644
--- a/configure.ac
+++ b/configure.ac
@@ -398,11 +398,11 @@ AC_ARG_ENABLE(debug,         AS_HELP_STR
 AC_ARG_WITH(int10,           AS_HELP_STRING([--with-int10=BACKEND], [int10 backend: vm86, x86emu or stub]),
 				[INT10="$withval"],
 				[INT10="$DEFAULT_INT10"])
-AC_ARG_WITH(vendor-name,     AS_HELP_STRING([--with-vendor-string=VENDOR],
+AC_ARG_WITH(vendor-name,     AS_HELP_STRING([--with-vendor-name=VENDOR],
 				  [Vendor string reported by the server]),
 			     	[ VENDOR_STRING="$withval" ],
 			     	[ VENDOR_STRING="$DEFAULT_VENDOR_NAME" ])
-AC_ARG_WITH(vendor-name-short, AS_HELP_STRING([--with-vendor-string-short=VENDOR],
+AC_ARG_WITH(vendor-name-short, AS_HELP_STRING([--with-vendor-name-short=VENDOR],
 				  [Short version of vendor string reported by the server]),
 			     	[ VENDOR_STRING_SHORT="$withval" ],
 			     	[ VENDOR_STRING_SHORT="$DEFAULT_VENDOR_NAME_SHORT" ])
diff-tree b32a40817fc0e2ac2edf2fa22a8813087fce2e7b (from a53586eebc166e35c1f48942205832810061daee)
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Wed Jan 24 16:29:49 2007 -0800

    Correct variable descriptions in comment for SecurityCheckResourceIDAccess

diff --git a/Xext/security.c b/Xext/security.c
index 4fbf6f2..bd397a9 100644
--- a/Xext/security.c
+++ b/Xext/security.c
@@ -946,10 +946,10 @@ SecurityAuditResourceIDAccess(
  *	rtype is its type or class.
  *	access_mode represents the intended use of the resource; see
  *	  resource.h.
- *	rval is a pointer to the resource structure for this resource.
+ *	res is a pointer to the resource structure for this resource.
  *
  * Returns:
- *	If access is granted, the value of rval that was passed in, else NULL.
+ *	If access is granted, the value of rval that was passed in, else FALSE.
  *
  * Side Effects:
  *	Disallowed resource accesses are audited.
diff-tree a53586eebc166e35c1f48942205832810061daee (from 7a12952fd437b105ea0d013d680f9c3a775a183c)
Author: Eric Anholt <eric at anholt.net>
Date:   Wed Jan 24 13:36:25 2007 -0800

    Warning fix for RRCrtcSetRotations().

diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
index 098fbe3..c84ec61 100644
--- a/randr/rrcrtc.c
+++ b/randr/rrcrtc.c
@@ -460,6 +460,7 @@ RRCrtcSetRotations (RRCrtcPtr crtc,
 		    Rotation rotations)
 {
     crtc->rotations = rotations;
+    return TRUE;
 }
 
 /*
diff-tree 7a12952fd437b105ea0d013d680f9c3a775a183c (from b6b855932109b4bc3454f07bef8cb079d79ca369)
Author: Eric Anholt <eric at anholt.net>
Date:   Wed Jan 24 13:34:29 2007 -0800

    Bug #7639: Only swap out pixmaps (rather than everything) on VT switch in EXA.
    
    This is a new behavior for version 2.1 of EXA, and only takes effect if the
    driver has requested that.  Otherwise, the previous behavior remains the same.

diff --git a/exa/exa.h b/exa/exa.h
index b043c12..bf723f7 100644
--- a/exa/exa.h
+++ b/exa/exa.h
@@ -39,7 +39,7 @@
 #include "fb.h"
 
 #define EXA_VERSION_MAJOR   2
-#define EXA_VERSION_MINOR   0
+#define EXA_VERSION_MINOR   1
 #define EXA_VERSION_RELEASE 0
 
 typedef struct _ExaOffscreenArea ExaOffscreenArea;
@@ -73,8 +73,8 @@ struct _ExaOffscreenArea {
 typedef struct _ExaDriver {
     /**
      * exa_major and exa_minor should be set by the driver to the version of
-     * EXA which the driver was compiled for (or configures itself at runtime to
-     * support).  This allows EXA to extend the structure for new features
+     * EXA which the driver was compiled for (or configures itself at runtime
+     * to support).  This allows EXA to extend the structure for new features
      * without breaking ABI for drivers compiled against older versions.
      */
     int exa_major, exa_minor;
diff --git a/exa/exa_migration.c b/exa/exa_migration.c
index d24a1bf..eedc5fd 100644
--- a/exa/exa_migration.c
+++ b/exa/exa_migration.c
@@ -249,7 +249,7 @@ exaCopyDirtyToFb (PixmapPtr pPixmap)
  * Called when the memory manager decides it's time to kick the pixmap out of
  * framebuffer entirely.
  */
-static void
+void
 exaPixmapSave (ScreenPtr pScreen, ExaOffscreenArea *area)
 {
     PixmapPtr pPixmap = area->privData;
diff --git a/exa/exa_offscreen.c b/exa/exa_offscreen.c
index fd3599e..7708dd7 100644
--- a/exa/exa_offscreen.c
+++ b/exa/exa_offscreen.c
@@ -81,15 +81,14 @@ ExaOffscreenKickOut (ScreenPtr pScreen, 
  * @param save callback for when the area is evicted from memory
  * @param privdata private data for the save callback.
  *
- * Allocates offscreen memory from the device associated with pScreen.  size and
- * align deteremine where and how large the allocated area is, and locked will
- * mark whether it should be held in card memory.  privdata may be any pointer
- * for the save callback when the area is removed.
+ * Allocates offscreen memory from the device associated with pScreen.  size
+ * and align deteremine where and how large the allocated area is, and locked
+ * will mark whether it should be held in card memory.  privdata may be any
+ * pointer for the save callback when the area is removed.
  *
- * Note that locked areas do get evicted on VT switch, because during that time
- * all offscreen memory becomes inaccessible.  This may change in the future,
- * but drivers should be aware of this and provide a callback to mark that their
- * locked allocation was evicted, and then restore it if necessary on EnterVT.
+ * Note that locked areas do get evicted on VT switch unless the driver
+ * requested version 2.1 or newer behavior.  In that case, the save callback is
+ * still called.
  */
 ExaOffscreenArea *
 exaOffscreenAlloc (ScreenPtr pScreen, int size, int align,
@@ -256,6 +255,9 @@ exaOffscreenAlloc (ScreenPtr pScreen, in
     return area;
 }
 
+/**
+ * Ejects all offscreen areas, and uninitializes the offscreen memory manager.
+ */
 void
 ExaOffscreenSwapOut (ScreenPtr pScreen)
 {
@@ -283,12 +285,56 @@ ExaOffscreenSwapOut (ScreenPtr pScreen)
     ExaOffscreenFini (pScreen);
 }
 
+/** Ejects all pixmaps managed by EXA. */
+static void
+ExaOffscreenEjectPixmaps (ScreenPtr pScreen)
+{
+    ExaScreenPriv (pScreen);
+
+    ExaOffscreenValidate (pScreen);
+    /* loop until a single free area spans the space */
+    for (;;)
+    {
+	ExaOffscreenArea *area;
+
+	for (area = pExaScr->info->offScreenAreas; area != NULL;
+	     area = area->next)
+	{
+	    if (area->state == ExaOffscreenRemovable &&
+		area->save == exaPixmapSave)
+	    {
+		(void) ExaOffscreenKickOut (pScreen, area);
+		ExaOffscreenValidate (pScreen);
+		break;
+	    }
+	}
+	if (area == NULL)
+	    break;
+    }
+    ExaOffscreenValidate (pScreen);
+}
+
 void
 ExaOffscreenSwapIn (ScreenPtr pScreen)
 {
     exaOffscreenInit (pScreen);
 }
 
+/**
+ * Prepares EXA for disabling of FB access, or restoring it.
+ *
+ * In version 2.1, the disabling results in pixmaps being ejected, while other
+ * allocations remain.  With this plus the prevention of migration while
+ * swappedOut is set, EXA by itself should not cause any access of the
+ * framebuffer to occur while swapped out.  Any remaining issues are the
+ * responsibility of the driver.
+ *
+ * Prior to version 2.1, all allocations, including locked ones, are ejected
+ * when access is disabled, and the allocator is torn down while swappedOut
+ * is set.  This is more drastic, and caused implementation difficulties for
+ * many drivers that could otherwise handle the lack of FB access while
+ * swapped out.
+ */
 void
 exaEnableDisableFBAccess (int index, Bool enable)
 {
@@ -296,10 +342,14 @@ exaEnableDisableFBAccess (int index, Boo
     ExaScreenPriv (pScreen);
 
     if (!enable) {
-	ExaOffscreenSwapOut (pScreen);
+	if (pExaScr->info->exa_minor < 1)
+	    ExaOffscreenSwapOut (pScreen);
+	else
+	    ExaOffscreenEjectPixmaps (pScreen);
 	pExaScr->swappedOut = TRUE;
     } else {
-	ExaOffscreenSwapIn (pScreen);
+	if (pExaScr->info->exa_minor < 1)
+	    ExaOffscreenSwapIn (pScreen);
 	pExaScr->swappedOut = FALSE;
     }
 }
diff --git a/exa/exa_priv.h b/exa/exa_priv.h
index 403d4b6..984cb66 100644
--- a/exa/exa_priv.h
+++ b/exa/exa_priv.h
@@ -412,4 +412,7 @@ exaGlyphs (CARD8	op,
 void
 exaDoMigration (ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel);
 
+void
+exaPixmapSave (ScreenPtr pScreen, ExaOffscreenArea *area);
+
 #endif /* EXAPRIV_H */
diff-tree b6b855932109b4bc3454f07bef8cb079d79ca369 (from 788cfce911793a26aed16f38f30678ecee82c873)
Author: Keith Packard <keithp at keithp.com>
Date:   Thu Jan 25 00:29:20 2007 +0800

    Make Xinearama screen information reflect CRTC rotation.

diff --git a/randr/randrstr.h b/randr/randrstr.h
index 99022c3..5058212 100644
--- a/randr/randrstr.h
+++ b/randr/randrstr.h
@@ -549,6 +549,9 @@ Bool
 RRCrtcSetRotations (RRCrtcPtr crtc,
 		    Rotation rotations);
 
+void
+RRCrtcGetScanoutSize(RRCrtcPtr crtc, int *width, int *height);
+
 /*
  * Destroy a Crtc at shutdown
  */
diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
index cfd4da9..098fbe3 100644
--- a/randr/rrcrtc.c
+++ b/randr/rrcrtc.c
@@ -397,6 +397,32 @@ RRCrtcGammaNotify (RRCrtcPtr	crtc)
     return TRUE;    /* not much going on here */
 }
 
+/**
+ * Returns the width/height that the crtc scans out from the framebuffer
+ */
+void
+RRCrtcGetScanoutSize(RRCrtcPtr crtc, int *width, int *height)
+{
+    if (crtc->mode == NULL) {
+	*width = 0;
+	*height = 0;
+	return;
+    }
+
+    switch (crtc->rotation & 0xf) {
+    case RR_Rotate_0:
+    case RR_Rotate_180:
+	*width = crtc->mode->mode.width;
+	*height = crtc->mode->mode.height;
+	break;
+    case RR_Rotate_90:
+    case RR_Rotate_270:
+	*width = crtc->mode->mode.height;
+	*height = crtc->mode->mode.width;
+	break;
+    }
+}
+
 /*
  * Set the size of the gamma table at server startup time
  */
diff --git a/randr/rrpointer.c b/randr/rrpointer.c
index 2a5ae7d..802dcb2 100644
--- a/randr/rrpointer.c
+++ b/randr/rrpointer.c
@@ -22,32 +22,6 @@
 
 #include "randrstr.h"
 
-/**
- * Returns the width/height that the crtc scans out from the framebuffer
- */
-static void
-RRCrtcGetScanoutSize(RRCrtcPtr crtc, int *width, int *height)
-{
-    if (crtc->mode == NULL) {
-	*width = 0;
-	*height = 0;
-	return;
-    }
-
-    switch (crtc->rotation & 0xf) {
-    case RR_Rotate_0:
-    case RR_Rotate_180:
-	*width = crtc->mode->mode.width;
-	*height = crtc->mode->mode.height;
-	break;
-    case RR_Rotate_90:
-    case RR_Rotate_270:
-	*width = crtc->mode->mode.height;
-	*height = crtc->mode->mode.width;
-	break;
-    }
-}
-
 /*
  * When the pointer moves, check to see if the specified position is outside
  * any of theavailable CRTCs and move it to a 'sensible' place if so, where
diff --git a/randr/rrxinerama.c b/randr/rrxinerama.c
index 8b95145..1db27f1 100644
--- a/randr/rrxinerama.c
+++ b/randr/rrxinerama.c
@@ -290,10 +290,12 @@ ProcRRXineramaQueryScreens(ClientPtr cli
 	    RRCrtcPtr	crtc = pScrPriv->crtcs[i];
 	    if (RRXineramaCrtcActive (crtc))
 	    {
+	        int width, height;
+		RRCrtcGetScanoutSize (crtc, &width, &height);
 		scratch.x_org  = crtc->x;
 		scratch.y_org  = crtc->y;
-		scratch.width  = crtc->mode->mode.width;
-		scratch.height = crtc->mode->mode.height;
+		scratch.width  = width;
+		scratch.height = height;
 		if(client->swapped) {
 		    register int n;
 		    swaps(&scratch.x_org, n);
diff-tree 788cfce911793a26aed16f38f30678ecee82c873 (from 2dc866252c84ed0e7b3afa25e8a5312f448d405b)
Author: Michel Dänzer <michel at tungstengraphics.com>
Date:   Tue Jan 23 10:15:22 2007 +0100

    Bump video driver ABI version to 1.2.
    
    This is necessary because server-1.2-branch bumped to 1.1 for xf86CVTMode and
    we have xf86XVFillKeyHelperDrawable on top of that.

diff --git a/hw/xfree86/common/xf86Module.h b/hw/xfree86/common/xf86Module.h
index 3c3247e..2811839 100644
--- a/hw/xfree86/common/xf86Module.h
+++ b/hw/xfree86/common/xf86Module.h
@@ -84,7 +84,7 @@ typedef enum {
  * mask is 0xFFFF0000.
  */
 #define ABI_ANSIC_VERSION	SET_ABI_VERSION(0, 3)
-#define ABI_VIDEODRV_VERSION	SET_ABI_VERSION(1, 1)
+#define ABI_VIDEODRV_VERSION	SET_ABI_VERSION(1, 2)
 #define ABI_XINPUT_VERSION	SET_ABI_VERSION(1, 0)
 #define ABI_EXTENSION_VERSION	SET_ABI_VERSION(0, 3)
 #define ABI_FONT_VERSION	SET_ABI_VERSION(0, 5)
diff-tree 2dc866252c84ed0e7b3afa25e8a5312f448d405b (from 0d6d373af95d0004d33b987d14ad7e04dd5d2003)
Author: Eric Anholt <eric at anholt.net>
Date:   Mon Jan 22 08:41:50 2007 +0800

    Really fix optimized render cases being hit when they shouldn't.
    
    I don't know how this define slipped in there.  Fixes
    6fdfd9dad91d7b7aa292f8c4d268dd27c34de8d3.

diff --git a/fb/fbpict.h b/fb/fbpict.h
index 5cdde9e..434526e 100644
--- a/fb/fbpict.h
+++ b/fb/fbpict.h
@@ -105,9 +105,6 @@ fbCanGetSolid(PicturePtr pict)
     }
 }
 
-#define fbCanGetSolid(pict) \
-(pict->pDrawable != NULL && pict->pDrawable->width == 1 && pict->pDrawable->height == 1)
-
 #define fbComposeGetSolid(pict, bits, fmt) { \
     FbBits	*__bits__; \
     FbStride	__stride__; \
diff-tree 0d6d373af95d0004d33b987d14ad7e04dd5d2003 (from 14d6a9b327381a6bb2dac59c62728e5fd0f0bcfb)
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Fri Jan 19 14:52:23 2007 -0800

    Update Xserver man page to match commit ed33c7c98ad0c542e9e2dd6caa3f84879c21dd61
    
        Remove unused -xkbdb and -noloadxkb options. Rename -ar1 and -ar2 to
        -ardelay and -arinterval, respectively.

diff --git a/doc/Xserver.man.pre b/doc/Xserver.man.pre
index 7cf3c26..aa931a8 100644
--- a/doc/Xserver.man.pre
+++ b/doc/Xserver.man.pre
@@ -397,20 +397,14 @@ base directory for keyboard layout files
 for setuid X servers (i.e., when the X server's real and effective uids
 are different).
 .TP 8
-.B \-ar1 \fImilliseconds\fP
+.B \-ardelay \fImilliseconds\fP
 sets the autorepeat delay (length of time in milliseconds that a key must
 be depressed before autorepeat starts).
 .TP 8
-.B \-ar2 \fImilliseconds\fP
+.B \-arinterval \fImilliseconds\fP
 sets the autorepeat interval (length of time in milliseconds that should
 elapse between autorepeat-generated keystrokes).
 .TP 8
-.B \-noloadxkb
-disables loading of an XKB keymap description on server startup.
-.TP 8
-.B \-xkbdb \fIfilename\fP
-uses \fIfilename\fP for default keyboard keymaps.
-.TP 8
 .B \-xkbmap \fIfilename\fP
 loads keyboard description in \fIfilename\fP on server startup.
 .SH SECURITY EXTENSION OPTIONS
diff-tree 14d6a9b327381a6bb2dac59c62728e5fd0f0bcfb (from 27a01e100bff21ac0b70c6d72071d7226fc91264)
Author: Michel Dänzer <michel at tungstengraphics.com>
Date:   Fri Jan 19 18:30:21 2007 +0100

    fbdevhw: Only deal with RGB weight if default visual is True- or DirectColor.

diff --git a/hw/xfree86/fbdevhw/fbdevhw.c b/hw/xfree86/fbdevhw/fbdevhw.c
index 8b163be..a573b8f 100644
--- a/hw/xfree86/fbdevhw/fbdevhw.c
+++ b/hw/xfree86/fbdevhw/fbdevhw.c
@@ -187,9 +187,16 @@ xfree2fbdev_fblayout(ScrnInfoPtr pScrn, 
 			      pScrn->virtualX;
 	var->yres_virtual   = pScrn->virtualY;
 	var->bits_per_pixel = pScrn->bitsPerPixel;
-	var->red.length     = pScrn->weight.red;
-	var->green.length   = pScrn->weight.green;
-	var->blue.length    = pScrn->weight.blue;
+	if (pScrn->defaultVisual == TrueColor ||
+	    pScrn->defaultVisual == DirectColor) {
+	    var->red.length     = pScrn->weight.red;
+	    var->green.length   = pScrn->weight.green;
+	    var->blue.length    = pScrn->weight.blue;
+	} else {
+	    var->red.length     = 8;
+	    var->green.length   = 8;
+	    var->blue.length    = 8;
+	}
 }
 
 static void
@@ -746,15 +753,18 @@ fbdevHWModeInit(ScrnInfoPtr pScrn, Displ
 		return FALSE;
 	}
 
-	/* XXX: This is a hack, but it should be a NOP for all the setups that
-	 * worked before and actually seems to fix some others...
-	 */
-	pScrn->offset.red   = fPtr->var.red.offset;
-	pScrn->offset.green = fPtr->var.green.offset;
-	pScrn->offset.blue  = fPtr->var.blue.offset;
-	pScrn->mask.red     = ((1 << fPtr->var.red.length) - 1) << fPtr->var.red.offset;
-	pScrn->mask.green   = ((1 << fPtr->var.green.length) - 1) << fPtr->var.green.offset;
-	pScrn->mask.blue    = ((1 << fPtr->var.blue.length) - 1) << fPtr->var.blue.offset;
+	if (pScrn->defaultVisual == TrueColor ||
+	    pScrn->defaultVisual == DirectColor) {
+	    /* XXX: This is a hack, but it should be a NOP for all the setups that
+	     * worked before and actually seems to fix some others...
+	     */
+	    pScrn->offset.red   = fPtr->var.red.offset;
+	    pScrn->offset.green = fPtr->var.green.offset;
+	    pScrn->offset.blue  = fPtr->var.blue.offset;
+	    pScrn->mask.red     = ((1 << fPtr->var.red.length) - 1) << fPtr->var.red.offset;
+	    pScrn->mask.green   = ((1 << fPtr->var.green.length) - 1) << fPtr->var.green.offset;
+	    pScrn->mask.blue    = ((1 << fPtr->var.blue.length) - 1) << fPtr->var.blue.offset;
+	}
 
 	return TRUE;
 }
diff-tree 27a01e100bff21ac0b70c6d72071d7226fc91264 (from 65f4690ecb4576f60396fcccff8e5bd5d4b6645f)
Author: Michel Dänzer <michel at tungstengraphics.com>
Date:   Fri Jan 19 18:28:05 2007 +0100

    fbdevhw: Consider mode set equal to mode requested if virtual width is larger.

diff --git a/hw/xfree86/fbdevhw/fbdevhw.c b/hw/xfree86/fbdevhw/fbdevhw.c
index 8f78b85..8b163be 100644
--- a/hw/xfree86/fbdevhw/fbdevhw.c
+++ b/hw/xfree86/fbdevhw/fbdevhw.c
@@ -229,23 +229,23 @@ xfree2fbdev_timing(DisplayModePtr mode, 
 }
 
 static Bool
-fbdev_modes_equal(struct fb_var_screeninfo *one, struct fb_var_screeninfo *two)
+fbdev_modes_equal(struct fb_var_screeninfo *set, struct fb_var_screeninfo *req)
 {
-	return (one->xres_virtual == two->xres_virtual &&
-		one->yres_virtual == two->yres_virtual &&
-		one->bits_per_pixel == two->bits_per_pixel &&
-		one->red.length == two->red.length &&
-		one->green.length == two->green.length &&
-		one->blue.length == two->blue.length &&
-		one->xres == two->xres && one->yres == two->yres &&
-		one->pixclock == two->pixclock &&
-		one->right_margin == two->right_margin &&
-		one->hsync_len == two->hsync_len &&
-		one->left_margin == two->left_margin &&
-		one->lower_margin == two->lower_margin &&
-		one->vsync_len == two->vsync_len &&
-		one->upper_margin == two->upper_margin &&
-		one->sync == two->sync && one->vmode == two->vmode);
+	return (set->xres_virtual >= req->xres_virtual &&
+		set->yres_virtual == req->yres_virtual &&
+		set->bits_per_pixel == req->bits_per_pixel &&
+		set->red.length == req->red.length &&
+		set->green.length == req->green.length &&
+		set->blue.length == req->blue.length &&
+		set->xres == req->xres && set->yres == req->yres &&
+		set->pixclock == req->pixclock &&
+		set->right_margin == req->right_margin &&
+		set->hsync_len == req->hsync_len &&
+		set->left_margin == req->left_margin &&
+		set->lower_margin == req->lower_margin &&
+		set->vsync_len == req->vsync_len &&
+		set->upper_margin == req->upper_margin &&
+		set->sync == req->sync && set->vmode == req->vmode);
 }
 
 static void
diff-tree 65f4690ecb4576f60396fcccff8e5bd5d4b6645f (from 8b3a591cd39f2d51209dc71b641cac79663e1b16)
Author: Michel Dänzer <michel at tungstengraphics.com>
Date:   Fri Jan 19 17:54:03 2007 +0100

    __glXDRIscreenProbe: Use drmOpen/CloseOnce.
    
    Fixes https://bugs.freedesktop.org/show_bug.cgi?id=9275 . Based on patch from
    Alan Swanson.

diff --git a/GL/glx/glxdri.c b/GL/glx/glxdri.c
index 170662c..e035704 100644
--- a/GL/glx/glxdri.c
+++ b/GL/glx/glxdri.c
@@ -864,6 +864,7 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
     int api_ver = COPY_SUB_BUFFER_INTERNAL_VERSION;
     drm_magic_t magic;
     drmVersionPtr version;
+    int newlyopened;
     char *driverName;
     drm_handle_t  hFB;
     int        junk;
@@ -914,10 +915,10 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
 	goto handle_error;
     }
 
-    fd = drmOpen(NULL, BusID);
+    fd = drmOpenOnce(NULL, BusID, &newlyopened);
 
     if (fd < 0) {
-	LogMessage(X_ERROR, "AIGLX error: drmOpen failed (%s)\n",
+	LogMessage(X_ERROR, "AIGLX error: drmOpenOnce failed (%s)\n",
 		   strerror(-fd));
 	goto handle_error;
     }
@@ -940,7 +941,7 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
 	drm_version.patch = -1;
     }
 
-    if (!DRIAuthConnection(pScreen, magic)) {
+    if (newlyopened && !DRIAuthConnection(pScreen, magic)) {
 	LogMessage(X_ERROR, "AIGLX error: DRIAuthConnection failed\n");
 	goto handle_error;
     }
@@ -1082,7 +1083,7 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
 	xfree(dev_priv);
 
     if (fd >= 0)
-	drmClose(fd);
+	drmCloseOnce(fd);
 
     DRICloseConnection(pScreen);
 
diff-tree 8b3a591cd39f2d51209dc71b641cac79663e1b16 (from 0f0c321adf2850b3d7aafe281362bfe424cb0ca1)
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Thu Jan 18 16:03:30 2007 -0800

    Update pci.ids to 2007-01-18 snapshot
    
    (includes a whole bunch of ATI device id updates)

diff --git a/hw/xfree86/scanpci/pci.ids b/hw/xfree86/scanpci/pci.ids
index d48e25c..64713d0 100644
--- 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 Wed 2006-12-06 02:05:02
+#	Daily snapshot on Thu 2007-01-18 02:05:01
 #
 
 # Vendors, devices and subsystems. Please keep sorted.
@@ -23,11 +23,28 @@
 
 0000  Gammagraphx, Inc.
 001a  Ascend Communications, Inc.
+001c  PEAK-System Technik GmbH
+	0001  PCAN-PCI CAN-Bus controller
 0033  Paradyne corp.
 003d  Lockheed Martin-Marietta Corp
 # Real TJN ID is e159, but they got it wrong several times --mj
 0059  Tiger Jet Network Inc. (Wrong ID)
 0070  Hauppauge computer works Inc.
+	0003  WinTV PVR-250
+	0009  WinTV PVR-150
+	0801  WinTV PVR-150
+	0807  WinTV PVR-150
+	4000  WinTV PVR-350
+	4001  WinTV PVR-250 (v1)
+	4009  WinTV PVR-250
+	4800  WinTV PVR-350
+	4801  WinTV PVR-250 MCE
+	4803  WinTV PVR-250
+	8003  WinTV PVR-150
+	8801  WinTV PVR-150
+	c801  WinTV PVR-150
+	e807  WinTV PVR-500 MCE (1st tuner)
+	e817  WinTV PVR-500 MCE (2nd tuner)
 0071  Nebula Electronics Ltd.
 0095  Silicon Image, Inc. (Wrong ID)
 	0680  Ultra ATA/133 IDE RAID CONTROLLER CARD
@@ -51,6 +68,7 @@
 0315  SK-Electronics Co., Ltd.
 0357  TTTech AG
 	000a  TTP-Monitoring Card V2.0
+0403  Future Technology Devices International Ltd
 0432  SCM Microsystems, Inc.
 	0001  Pluto2 DVB-T Receiver for PCMCIA [EasyWatch MobilSet]
 045e  Microsoft
@@ -63,6 +81,7 @@
 	001a  FSD7000 802.11g PCI Wireless card
 	0109  F5U409-CU USB/Serial Portable Adapter
 	7050  F5D7050 802.11g Wireless USB Adapter
+	705c  F5D7050 v4
 05a9  OmniVision
 	8519  OV519 series
 05e3  CyberDoor
@@ -78,23 +97,42 @@
 067b  Prolific Technology, Inc.
 	2303  PL-2303 USB-to-Serial Converter
 	3507  PL-3507 Hi-Speed USB & IEEE 1394 Combo to IDE Bridge Controller
+069d  Hughes Network Systems (HNS)
 0721  Sapphire, Inc.
+07ca  AVerMedia Technologies Inc.
+	b808  AVerTV DVB-T Volar (USB 2.0)
 07e2  ELMEG Communication Systems GmbH
+0842  NPG, Personal Grand Technology
+08ff  AuthenTec
+	afe4  [Anchor] AF-S2 FingerLoc Sensor Module
 # Wrong ID used in subsystem ID of VIA USB controllers.
 0925  VIA Technologies, Inc. (Wrong ID)
 093a  PixArt Imaging Inc.
+	010e  Innovage Mini Digital Camera
+	010f  SDC-300 Webcam
+	2468  CIF Single Chip
+	2603  Philips Webcam SPC500NC
+	2608  Maxell MaxCam RotaWeb
 09c1  Arris
 	0704  CM 200E Cable Modem
 0a89  BREA Technologies Inc
+0ace  ZyDAS
+	1211  ZD1211 IEEE 802.11b+g USB Adapter
 0b0b  Rhino Equiment Corp.
 	0105  Rhino R1T1
 	0205  Rhino R4FXO
+	0206  RCB4FXO 4-channel FXO analog telphony card
 	0305  Rhino R4T1
 	0405  Rhino R8FXX
+	0406  RCB8FXX 8-channel modular analog telphony card
 	0505  Rhino R24FXX
-	0506  Rhino R2T1
+	0506  RCB24FXS 24-Channel FXS analog telphony card
 	0605  Rhino R2T1
 	0705  Rhino R24FXS
+	0706  RCB24FXO 24-Channel FXO analog telphony card
+	0905  R1T3 Single T3 Digital Telephony Card
+	0906  RCB24FXX 24-channel modular analog telphony card
+	0a06  RCB672FXX 672-channel modular analog telphony card
 0b49  ASCII Corporation
 	064f  Trance Vibrator
 0ccd  TerraTec Electronic GmbH
@@ -288,16 +326,33 @@
 	0041  53C1035ZC PCI-X Fusion-MPT Dual Ultra320 SCSI
 	0050  SAS1064 PCI-X Fusion-MPT SAS
 	0054  SAS1068 PCI-X Fusion-MPT SAS
+	0055  SAS1068 PCI-X Fusion-MPT SAS
+		1033 8336  SAS1068
 	0056  SAS1064E PCI-Express Fusion-MPT SAS
 	0058  SAS1068E PCI-Express Fusion-MPT SAS
 	005a  SAS1066E PCI-Express Fusion-MPT SAS
 	005c  SAS1064A PCI-X Fusion-MPT SAS
 	005e  SAS1066 PCI-X Fusion-MPT SAS
 	0060  MegaRAID SAS 1078
+		1000 1006  MegaRAID SAS 8888ELP
+		1000 100a  MegaRAID SAS 8708ELP
+		1000 100e  MegaRAID SAS 8884E
+		1000 100f  MegaRAID SAS 8708E
+		1000 1010  MegaRAID SATA 350-8ELP
+		1000 1011  MegaRAID SATA 350-4ELP
+		1000 1012  MegaRAID SAS 8704ELP
+		1014 0363  MegaRAID SAS PCI Express ROMB
+		1014 0364  SystemX MegaRAID SAS 8808E
+		1014 0365  SystemX MegaRAID SAS 8884E
 		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  PERC 6/i Enhanced RAID Controller
+		1028 1f0d  CERC 6/i Adapter RAID Controller
+		1028 1f11  CERC 6/i Adapter RAID Controller
+		1043 824d  MegaRAID SAS PCI Express ROMB
+		1170 002f  MegaRAID SAS PCI Express ROMB
+		8086 34cc  Integrated RAID Controller SROMBSAS28E
+		8086 34cd  Integrated RAID Controller SROMBSAS28E
 	0062  SAS1078 PCI-Express Fusion-MPT SAS
 		1000 0062  SAS1078 PCI-Express Fusion-MPT SAS
 	008f  53c875J
@@ -317,6 +372,9 @@
 		1025 004d  MegaRAID ACER ROMB-2E RAID Controller
 		1028 0001  PowerEdge RAID Controller PERC4e/SC
 		1028 0002  PowerEdge RAID Controller PERC4e/DC
+		1028 0012  PowerEdge RAID Controller RAC4
+		1028 0015  PowerEdge RAID Controller PERC5
+		1028 1f03  PowerEdge RAID Controller PERC5
 		1734 1065  FSC MegaRAID PCI Express ROMB
 		8086 0002  MegaRAID Intel RAID Controller SRCU42E
 	0409  MegaRAID
@@ -330,6 +388,7 @@
 		1000 1002  MegaRAID SAS 8480E
 		1000 1003  MegaRAID SAS 8344ELP
 		1000 1004  MegaRAID SAS 8308ELP
+		1000 1008  MegaRAID SAS 84016E
 		1000 100c  MegaRAID SATA 300-12E
 		1000 100d  MegaRAID SATA 300-16E
 		1000 2004  MegaRAID SATA 300-8ELP
@@ -338,8 +397,8 @@
 		1054 3016  MegaRAID SAS RoMB Server
 		1734 1081  MegaRAID SAS PCI Express ROMB
 		1734 10a3  MegaRAID SAS PCI Express ROMB
-		8086 1001  SRCSAS18E RAID Controller
-		8086 1003  SRCSAS144E RAID Controller
+		8086 1001  RAID Controller SRCSAS18E
+		8086 1003  RAID Controller SRCSAS144E
 		8086 3500  SROMBSAS18E RAID Controller
 		8086 3501  SROMBSAS18E RAID Controller
 		8086 3504  SROMBSAS18E RAID Controller
@@ -509,7 +568,11 @@
 		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
+		14f1 8800  Leadtek WinFast TV2000XP Expert
 	437b  SB450 HDA Audio
+		1734 10b8  Realtek High Definition Audio
 	4380  SB600 Non-Raid-5 SATA
 	4381  SB600 Raid-5 SATA
 	4382  SB600 AC97 Audio
@@ -584,6 +647,7 @@
 		1734 007a  Primergy RX300
 		8086 3411  SDS2 Mainboard
 		8086 3427  S875WP1-E mainboard
+		8086 5744  S845WD1-E mainboard
 	4753  Rage XC
 		1002 4753  Rage XC
 	4754  3D Rage I/II 215GT [Mach64 GT]
@@ -711,10 +775,12 @@
 		1025 005a  TravelMate 290
 		103c 088c  NC8000 laptop
 		103c 0890  NC6000 laptop
+		144d c00c  P35 notebook
 		1462 0311  MSI M510A
 		1734 1055  Amilo M1420W
 	4e51  M10 NQ [Radeon Mobility 9600]
 	4e52  RV350 [Mobility Radeon 9600 M10]
+		144d c00c  P35 notebook
 	4e53  M10 NS [Radeon Mobility 9600]
 	4e54  M10 NT [FireGL Mobility T2]
 	4e56  M11 NV [FireGL Mobility T2e]
@@ -900,7 +966,7 @@
 	554d  R430 [Radeon X800 XL] (PCIe)
 	554f  R430 [Radeon X800 (PCIE)]
 	5550  R423 [Fire GL V7100]
-	5551  R423 UQ [FireGL V7200 (PCIE)]
+	5551  R423 [FireGL V5100 (PCIE)]
 	5552  R423 UR [FireGL V5100 (PCIE)]
 	5554  R423 UT [FireGL V7100 (PCIE)]
 	5569  R423 UI [Radeon X800PRO (PCIE)] Secondary
@@ -936,6 +1002,7 @@
 		1025 0080  Aspire 5024WLMMi
 		103c 308b  MX6125
 	5951  ATI 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)
@@ -954,6 +1021,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
 		1043 c006  ASUS Radeon 9200 SE / TD / 128M
 		1458 4018  Radeon 9200 SE
 		1458 4032  Radeon 9200 SE 128MB
@@ -966,11 +1034,12 @@
 		18bc 0173  GC-R9200L(SE)-C3H [Radeon 9200 Game Buster]
 	5969  ES1000
 	5974  RS482 [Radeon Xpress 200]
-	5975  RS482 [Radeon Xpress 200M]
+	5975  RS485 [Radeon Xpress 1100 IGP]
 	5a33  Radeon Xpress 200 Host Bridge
 	5a34  RS480 PCI-X Root Port
 # Comes in pair with 5a3f
 	5a36  RS480 PCI Bridge
+	5a37  RS480 PCI Bridge
 	5a38  RS480 PCI Bridge
 # Comes in pair with 5a38
 	5a39  RS480 PCI Bridge
@@ -998,6 +1067,7 @@
 	5c61  M9+ 5C61 [Radeon Mobility 9200 (AGP)]
 	5c63  M9+ 5C63 [Radeon Mobility 9200 (AGP)]
 		1002 5c63  Apple iBook G4 2004
+		144d c00c  P30 notebook
 	5d44  RV280 [Radeon 9200 SE] (Secondary)
 		1458 4019  Radeon 9200 SE (Secondary)
 		1458 4032  Radeon 9200 SE 128MB
@@ -1052,11 +1122,13 @@
 		1002 0323  All-in-Wonder X1800XL (Secondary)
 		1002 0d03  Radeon X1800 CrossFire Edition (Secondary)
 	7140  RV515 [Radeon X1600]
-	7142  RV515 [Radeon X1300]
+	7142  RV515 PRO [ATI 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]
@@ -1064,28 +1136,47 @@
 	714d  RV515 [Radeon X1300]
 	714e  RV515 [Radeon X1300]
 	7152  RV515 GL ATI FireGL V3300 Primary
+	7153  RV515GL [FireGL V3350]
 	715e  RV515 [Radeon X1300]
-	7162  RV515 [Radeon X1300] (Secondary)
+	715f  RV505 CE [Radeon X1550 64-bit]
+	7162  RV515 PRO [ATI 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
-	7180  RV516 Radeon X1300 Series Primary
+	7173  RV515GL [FireGL V3350 Secondary]
+	7180  RV516 [ATI Radeon X1300/X1550 Series]
 	7181  RV516 XT Radeon X1600 Series Primary
-	71a0  RV516 Radeon X1300 Series Secondary
+	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]
+	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
 	71c0  RV530 [Radeon X1600]
 	71c2  RV530 [Radeon X1600]
 	71c4  M56GL [ATI Mobility FireGL V5200]
 		17aa 2007  ThinkPad T60p
 	71c5  M56P [Radeon Mobility X1600]
 	71c6  RV530LE [Radeon X1600]
+	71c7  RV535 [Radeon X1650 Series]
 	71ce  RV530LE [Radeon X1600]
 	71d5  M66-P ATI Mobility Radeon X1700
 	71d6  M66-XT ATI Mobility Radeon X1700
 	71de  RV530LE [Radeon X1600]
 	71e0  RV530 [Radeon X1600] (Secondary)
 	71e2  RV530 [Radeon X1600] (Secondary)
+	71e7  RV535 [Radeon X1650 Series]
+	7210  M71 [ATI Mobility Radeon X2100]
+	7211  M71 [ATI Mobility Radeon X2100 Secondary]
 	7240  R580 [Radeon X1900]
 	7241  R580 [Radeon X1900]
 	7242  R580 [Radeon X1900]
@@ -1098,15 +1189,29 @@
 	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
 	724c  R580 [Radeon X1900]
 	724d  R580 [Radeon X1900]
-	724e  R580 [FireGL V7300/V7350] Primary (PCIE)
+	724e  R580 [AMD Stream Processor]
 	7269  R580 [Radeon X1900 XT] Secondary
-	726e  R580 [FireGL V7300/V7350] Secondary (PCIE)
+	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)
+	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
 	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
 	7c37  RV350 AQ [Radeon 9600 SE]
 	cab0  AGP Bridge [IGP 320M]
 	cab2  RS200/RS200M AGP Bridge [IGP 340M]
@@ -1556,6 +1661,8 @@
 	2003  Am 1771 MBW [Alchemy]
 	2020  53c974 [PCscsi]
 	2040  79c974
+# CS5536 [Geode companion] Host Bridge
+	2080  Conrad Kostecki
 	2081  Geode LX Video
 	2082  Geode LX AES Security Block
 	208f  CS5536 GeodeLink PCI South Bridge
@@ -1742,13 +1849,21 @@
 		1028 0001  PowerEdge 2400
 	0002  PowerEdge Expandable RAID Controller 3/Di
 		1028 0002  PowerEdge 4400
+		1028 00d1  PERC 3/DiV [Viper]
+		1028 00d9  PERC 3/DiL [Lexus]
 	0003  PowerEdge Expandable RAID Controller 3/Si
 		1028 0003  PowerEdge 2450
+# PowerEdge Codename Iguana
+	0004  PowerEdge Expandable RAID Controller 3/Di [Iguana]
+		1028 0004  PERC 3/DiF [Iguana]
 	0006  PowerEdge Expandable RAID Controller 3/Di
 	0007  Remote Access Card III
 	0008  Remote Access Card III
 	0009  Remote Access Card III: BMC/SMIC device not present
 	000a  PowerEdge Expandable RAID Controller 3/Di
+		1028 0106  PERC 3/DiJ [Jaguar]
+		1028 011b  PERC 3/DiD [Dagger]
+		1028 0121  PERC 3/DiB [Boxster]
 	000c  Embedded Remote Access or ERA/O
 	000d  Embedded Remote Access: BMC/SMIC device
 	000e  PowerEdge Expandable RAID controller 4/Di
@@ -1764,6 +1879,9 @@
 		1028 0170  PowerEdge Expandable RAID Controller 4e/Di
 	0014  Remote Access Card 4 Daughter Card SMIC interface
 	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
 1029  Siemens Nixdorf IS
 102a  LSI Logic
 	0000  HYDRA
@@ -1964,6 +2082,7 @@
 		102f 00f8  ATM Meteor 155
 	0030  TC35815CF PCI 10/100 Mbit Ethernet Controller
 	0031  TC35815CF PCI 10/100 Mbit Ethernet Controller with WOL
+	0032  TC35815CF PCI 10/100 Mbit Ethernet Controller on TX4939
 	0105  TC86C001 [goku-s] IDE
 	0106  TC86C001 [goku-s] USB 1.1 Host
 	0107  TC86C001 [goku-s] USB Device Controller
@@ -2107,6 +2226,7 @@
 		1019 0a14  K7S5A motherboard
 		1039 0900  SiS900 10/100 Ethernet Adapter
 		1043 8035  CUSI-FX motherboard
+		1462 0900  MS-6701 motherboard
 	0961  SiS961 [MuTIOL Media IO]
 	0962  SiS962 [MuTIOL Media IO]
 	0963  SiS963 [MuTIOL Media IO]
@@ -2129,6 +2249,7 @@
 		1019 0970  P6STP-FL motherboard
 		1039 5513  SiS5513 EIDE Controller (A,B step)
 		1043 8035  CUSI-FX motherboard
+		1462 7010  MS-6701 motherboard
 	5517  5517
 	5571  5571
 	5581  5581 Pentium Chipset
@@ -2161,10 +2282,14 @@
 		1019 0a14  K7S5A motherboard
 		1039 7000  Onboard USB Controller
 		1462 5470  K7SOM+ 5.2C Motherboard
+		1462 7010  MS-6701 motherboard
 	7002  USB 2.0 Controller
+		1462 7010  MS-6701 motherboard
 		1509 7002  Onboard USB Controller
 	7007  FireWire Controller
+		1462 701d  MS-6701
 	7012  AC'97 Sound Controller
+		1462 7010  MS-6701 motherboard
 		15bd 1001  DFI 661FX motherboard
 # There are may be different modem codecs here (Intel537 compatible and incompatible)
 	7013  AC'97 Modem Controller
@@ -2252,10 +2377,13 @@
 	12ee  PCI-X 2.0 Local Bus Adapter
 	12f8  Broadcom BCM4306 802.11b/g Wireless LAN
 	12fa  BCM4306 802.11b/g Wireless LAN Controller
+	1302  RMP-3 Shared Memory Driver
+	1303  RMP-3 (Remote Management Processor)
 	2910  E2910A PCIBus Exerciser
 	2925  E2925A 32 Bit, 33 MHzPCI Exerciser & Analyzer
 	3080  Pavilion ze2028ea
 	3085  Realtek RTL8139/8139C/8139C+
+	30b5  Compaq Presario V3000Z
 	3220  Smart Array P600
 		103c 3225  3 Gb/s SAS RAID
 	3230  Smart Array Controller
@@ -2292,8 +2420,10 @@
 	80c5  nForce3 chipset motherboard [SK8N]
 	80df  v9520 Magic/T
 	815a  A8N-SLI Motherboard nForce4 SATA
+	8168  Realtek PCI-E Gigabit Ethernet Controller (RTL8111B)
 	8187  802.11a/b/g Wireless LAN Card
 	8188  Tiger Hybrid TV Capture Device
+	81f4  EN7300TC512/TD/128M/A(C262G) [Graphics Card EN7300TC512]
 1044  Adaptec (formerly DPT)
 	1012  Domino RAID Engine
 	a400  SmartCache/Raid I-IV Controller
@@ -2444,6 +2574,7 @@
 	8023  TSB43AB22/A IEEE-1394a-2000 Controller (PHY/Link)
 		103c 088c  NC8000 laptop
 		1043 808b  K8N4-E Mainboard
+		1043 815b  P5W DH Deluxe Motherboard
 	8024  TSB43AB23 IEEE-1394a-2000 Controller (PHY/Link)
 	8025  TSB82AA2 IEEE-1394b Link Layer Controller
 		1458 1000  GA-K8N Ultra-9 Mainboard
@@ -2483,14 +2614,17 @@
 	8038  PCI6515 SmartCard Controller
 	8039  PCIxx12 Cardbus Controller
 		103c 309f  nx9420
+		103c 30a1  NC2400
 	803a  PCIxx12 OHCI Compliant IEEE 1394 Host Controller
 		103c 309f  nx9420
+		103c 30a1  NC2400
 	803b  5-in-1 Multimedia Card Reader (SD/MMC/MS/MS PRO/xD)
 		103c 309f  nx9420
 	803c  PCIxx12 SDA Standard Compliant SD Host Controller
 		103c 309f  nx9420
 	803d  PCIxx12 GemCore based SmartCard controller
 		103c 309f  nx9420
+		103c 30a1  NC2400
 	8201  PCI1620 Firmware Loading Function
 	8204  PCI7410,7510,7610 PCI Firmware Loading Function
 		1028 0139  Latitude D400
@@ -2548,6 +2682,7 @@
 	ac42  PCI4451 PC card Cardbus Controller
 		1028 00e6  PCI4451 PC card CardBus Controller (Inspiron 8100)
 	ac44  PCI4510 PC card Cardbus Controller
+		1028 0149  Inspiron 5100
 		1028 0163  Latitude D505
 		1028 0196  Inspiron 5160
 		1071 8160  MIM2000
@@ -2560,7 +2695,7 @@
 		1028 0139  Latitude D400
 		1028 014e  Latitude D800
 	ac50  PCI1410 PC card Cardbus Controller
-	ac51  PCI1420
+	ac51  PCI1420 PC card Cardbus Controller
 		0e11 004e  Evo N600c
 		1014 0148  ThinkPad A20m
 		1014 023b  ThinkPad T23 (2647-4MG)
@@ -2588,6 +2723,7 @@
 	ac8d  PCI 7620
 	ac8e  PCI7420 CardBus Controller
 	ac8f  PCI7420/7620 Combo CardBus, 1394a-2000 OHCI and SD/MS-Pro Controller
+		1028 018d  Inspiron 700m
 	fe00  FireWire Host Controller
 	fe03  12C01A FireWire Host Controller
 104d  Sony Corporation
@@ -2673,6 +2809,7 @@
 		ecc0 0072  Mona rev.2
 	18c0  MPC8265A/8266/8272
 	18c1  MPC8271/MPC8272
+	3052  SM56 Data Fax Modem
 	3055  SM56 Data Fax Modem
 	3410  DSP56361 Digital Signal Processor
 		ecc0 0050  Gina24 rev.0
@@ -2721,6 +2858,7 @@
 1059  Teknor Industrial Computers Inc
 105a  Promise Technology, Inc.
 	0d30  PDC20265 (FastTrak100 Lite/Ultra100)
+		1043 8042  ASUS AV7266-E South Bridge Promise RAID
 		105a 4d33  Ultra100
 	0d38  20263
 		105a 4d39  Fasttrak66
@@ -2749,6 +2887,7 @@
 	4d30  PDC20267 (FastTrak100/Ultra100)
 		105a 4d33  Ultra100
 		105a 4d39  FastTrak100
+		8086 5744  S845WD1-E mainboard
 	4d33  20246
 		105a 4d33  20246 IDE Controller
 	4d38  PDC20262 (FastTrak66/Ultra66)
@@ -2777,7 +2916,12 @@
 	7275  PDC20277 (SBFastTrak133 Lite)
 	8002  SATAII150 SX8
 	8350  80333 [SuperTrak EX8350/EX16350], 80331 [SuperTrak EX8300/EX16300]
+	8650  IOP1348 [SuperTrak EX4650/EX8650/EX8654]
+		105a 4600  SuperTrak EX4650
+		105a 8601  SuperTrak EX8650
+		105a 8602  SuperTrak EX8654
 	c350  80333 [SuperTrak EX12350]
+	e350  80333 [SuperTrak EX24350]
 105b  Foxconn International, Inc.
 105c  Wipro Infotech Limited
 105d  Number 9 Computer Company
@@ -2990,6 +3134,7 @@
 	0012  YMF-754 [DS-1E Audio Controller]
 		1073 0012  DS-XG PCI Audio Codec
 	0020  DS-1 Audio
+	1000  SW1000XG [XG Factory]
 	2000  DS2416 Digital Mixing Card
 		1073 2000  DS2416 Digital Mixing Card
 1074  NexGen Microsystems
@@ -3021,7 +3166,7 @@
 		103c 12dd  4Gb Fibre Channel [AB429A]
 	2432  ISP2432-based 4Gb Fibre Channel to PCI Express HBA
 	3022  ISP4022-based Ethernet NIC
-	3032  ISP4032-based Ethernet NIC
+	3032  ISP4032-based Ethernet IPv6 NIC
 	4010  ISP4010-based iSCSI TOE HBA
 	4022  ISP4022-based iSCSI TOE HBA
 	4032  ISP4032-based iSCSI TOE IPv6 HBA
@@ -3329,6 +3474,7 @@
 		13e9 0070  Win/TV (Audio Section)
 		144f 3000  MagicTView CPH060 - Audio
 		1461 0002  Avermedia PCTV98 Audio Capture
+		1461 0003  UltraTV PCI 350
 		1461 0004  AVerTV WDM Audio Capture
 		1461 0761  AVerTV DVB-T
 		1461 0771  AverMedia AVerTV DVB-T 771
@@ -3417,6 +3563,8 @@
 	4002  TIO-CE PCI Express Port
 	8001  O2 1394
 	8002  G-net NT
+	8010  Broadcom e-net [SGI IO9/IO10 BaseIO]
+	8018  Broadcom e-net [SGI A330 Server BaseIO]
 10aa  ACC Microelectronics
 	0000  ACCM 2188
 10ab  Digicom
@@ -3468,6 +3616,7 @@
 		10b5 2978  SH ARC-PCIu SOHARD ARCNET card
 		10b5 3025  Alpermann+Velte PCL PCI L (3V/5V): Timecode Reader Board
 		10b5 3068  Alpermann+Velte PCL PCI HD (3V/5V): Timecode Reader Board
+		12fe 0111  CPCI-ASIO4 (ESD 4-port Serial Interface Board)
 		1397 3136  4xS0-ISDN PCI Adapter
 		1397 3137  S2M-E1-ISDN PCI Adapter
 		1518 0200  Kontron ThinkIO-C
@@ -3522,6 +3671,7 @@
 		10b5 2844  Innes Corp TVS Encoder card
 		12c7 4001  Intel Dialogic DM/V960-4T1 PCI
 		12d9 0002  PCI Prosody Card rev 1.5
+		14b4 d100  Dektec DTA-100
 		16df 0011  PIKA PrimeNet MM PCI
 		16df 0012  PIKA PrimeNet MM cPCI 8
 		16df 0013  PIKA PrimeNet MM cPCI 8 (without CAS Signaling)
@@ -6060,6 +6210,7 @@
 	0140  HT2100 PCI-Express Bridge
 	0141  HT2100 PCI-Express Bridge
 	0142  HT2100 PCI-Express Bridge
+	0144  HT2100 PCI-Express Bridge
 	0200  OSB4 South Bridge
 	0201  CSB5 South Bridge
 		4c53 1080  CT8 mainboard
@@ -10413,9 +10564,9 @@
 	0962  80960RM [i960RM Bridge]
 	0964  80960RP [i960 RP Microprocessor/Bridge]
 	1000  82542 Gigabit Ethernet Controller
-		0e11 b0df  NC1632 Gigabit Ethernet Adapter (1000-SX)
-		0e11 b0e0  NC1633 Gigabit Ethernet Adapter (1000-LX)
-		0e11 b123  NC1634 Gigabit Ethernet Adapter (1000-SX)
+		0e11 b0df  NC6132 Gigabit Ethernet Adapter (1000-SX)
+		0e11 b0e0  NC6133 Gigabit Ethernet Adapter (1000-LX)
+		0e11 b123  NC6134 Gigabit Ethernet Adapter (1000-LX)
 		1014 0119  Netfinity Gigabit Ethernet SX Adapter
 		8086 1000  PRO/1000 Gigabit Server Adapter
 	1001  82543GC Gigabit Ethernet Controller (Fiber)
@@ -10834,6 +10985,8 @@
 		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 000a  EtherExpress PRO/100+ Management Adapter
 		8086 000b  EtherExpress PRO/100+
 		8086 000c  EtherExpress PRO/100+ Management Adapter
@@ -10909,6 +11062,7 @@
 		8086 3010  EtherExpress PRO/100 S Network Connection
 		8086 3011  EtherExpress PRO/100 S Network Connection
 		8086 3012  EtherExpress PRO/100 Network Connection
+		8086 301a  S845WD1-E mainboard
 		8086 3411  SDS2 Mainboard
 	122d  430FX - 82437FX TSC [Triton I]
 	122e  82371FB PIIX ISA [Triton I]
@@ -10996,6 +11150,7 @@
 	2426  82801AB AC'97 Modem
 	2428  82801AB PCI Bridge
 	2440  82801BA ISA Bridge (LPC)
+		8086 5744  S845WD1-E
 	2442  82801BA/BAM USB (Hub #1)
 		1014 01c6  Netvista A40/A40p
 		1025 1016  Travelmate 612 TX
@@ -11006,6 +11161,7 @@
 		147b 0507  TH7II-RAID
 		8086 4532  D815EEA2 mainboard
 		8086 4557  D815EGEW Mainboard
+		8086 5744  S845WD1-E mainboard
 	2443  82801BA/BAM SMBus
 		1014 01c6  Netvista A40/A40p
 		1025 1016  Travelmate 612 TX
@@ -11016,6 +11172,7 @@
 		147b 0507  TH7II-RAID
 		8086 4532  D815EEA2 mainboard
 		8086 4557  D815EGEW Mainboard
+		8086 5744  S845WD1-E mainboard
 	2444  82801BA/BAM USB (Hub #2)
 		1025 1016  Travelmate 612 TX
 		1028 00c7  Dimension 8100
@@ -11024,6 +11181,7 @@
 		104d 80df  Vaio PCG-FX403
 		147b 0507  TH7II-RAID
 		8086 4532  D815EEA2 mainboard
+		8086 5744  S845WD1-E mainboard
 	2445  82801BA/BAM AC'97 Audio
 		0e11 000b  Compaq Deskpro EN Audio
 		0e11 0088  Evo D500
@@ -11082,6 +11240,7 @@
 		147b 0507  TH7II-RAID
 		8086 4532  D815EEA2 mainboard
 		8086 4557  D815EGEW Mainboard
+		8086 5744  S845WD1-E mainboard
 	244c  82801BAM ISA Bridge (LPC)
 	244e  82801 PCI Bridge
 		1014 0267  NetVista A30p
@@ -11174,6 +11333,7 @@
 		103c 0890  NC6000 laptop
 		103c 08b0  tc1100 tablet
 		1071 8160  MIM2000
+		144d c00c  P30/P35 notebook
 		1458 24c2  GA-8PE667 Ultra
 		1462 5800  845PE Max (MS-6580)
 		1734 1004  D1451 Mainboard (SCENIC N300, i845GV)
@@ -11742,17 +11902,21 @@
 		103c 099c  NX6110/NC6120
 		1043 1881  GMA 900 915GM Integrated Graphics
 	27a0  Mobile 945GM/PM/GMS/940GML and 945GT Express Memory Controller Hub
+		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
+		103c 30a1  NC2400
 		17aa 201a  Thinkpad R60e model 0657
 	27a6  Mobile 945GM/GMS/940GML Express Integrated Graphics Controller
+		103c 30a1  NC2400
 		17aa 201a  Thinkpad R60e model 0657
 	27b0  82801GH (ICH7DH) LPC Interface Bridge
 	27b8  82801GB/GR (ICH7 Family) LPC Interface Bridge
 		107b 5048  E4500
 		8086 544e  DeskTop Board D945GTP
 	27b9  82801GBM (ICH7-M) LPC Interface Bridge
+		103c 30a1  NC2400
 		10f7 8338  Panasonic CF-Y5 laptop
 		17aa 2009  ThinkPad T60/R60 series
 	27bd  82801GHM (ICH7-M DH) LPC Interface Bridge
@@ -11766,22 +11930,27 @@
 		17aa 200d  Thinkpad R60e model 0657
 	27c6  82801GHM (ICH7-M DH) Serial ATA Storage Controller RAID
 	27c8  82801G (ICH7 Family) USB UHCI #1
+		103c 30a1  NC2400
 		107b 5048  E4500
 		17aa 200a  ThinkPad T60/R60 series
 		8086 544e  DeskTop Board D945GTP
 	27c9  82801G (ICH7 Family) USB UHCI #2
+		103c 30a1  NC2400
 		107b 5048  E4500
 		17aa 200a  ThinkPad T60/R60 series
 		8086 544e  DeskTop Board D945GTP
 	27ca  82801G (ICH7 Family) USB UHCI #3
+		103c 30a1  NC2400
 		107b 5048  E4500
 		17aa 200a  ThinkPad T60/R60 series
 		8086 544e  DeskTop Board D945GTP
 	27cb  82801G (ICH7 Family) USB UHCI #4
+		103c 30a1  NC2400
 		107b 5048  E4500
 		17aa 200a  ThinkPad T60/R60 series
 		8086 544e  DeskTop Board D945GTP
 	27cc  82801G (ICH7 Family) USB2 EHCI Controller
+		103c 30a1  NC2400
 		17aa 200b  ThinkPad T60/R60 series
 		8086 544e  DeskTop Board D945GTP
 	27d0  82801G (ICH7 Family) PCI Express Port 1
@@ -11789,10 +11958,12 @@
 	27d4  82801G (ICH7 Family) PCI Express Port 3
 	27d6  82801G (ICH7 Family) PCI Express Port 4
 	27d8  82801G (ICH7 Family) High Definition Audio Controller
+		103c 30a1  NC2400
 		107b 5048  E4500
 		10f7 8338  Panasonic CF-Y5 laptop
 		1179 ff31  Toshiba America Information Systems:AC97 Data Fax SoftModem with SmartCP
 		152d 0753  Softmodem
+		1734 10ad  Conexant softmodem SmartCP
 		17aa 2010  ThinkPad T60/R60 series
 	27da  82801G (ICH7 Family) SMBus Controller
 		10f7 8338  Panasonic CF-Y5 laptop
@@ -11803,6 +11974,7 @@
 	27dd  82801G (ICH7 Family) AC'97 Modem Controller
 	27de  82801G (ICH7 Family) AC'97 Audio Controller
 	27df  82801G (ICH7 Family) IDE Controller
+		103c 30a1  NC2400
 		107b 5048  E4500
 		10f7 8338  Panasonic CF-Y5 laptop
 		17aa 200c  Thinkpad R60e model 0657
@@ -11846,6 +12018,34 @@
 	284b  82801H (ICH8 Family) HD Audio Controller
 	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
+	2928  Mobile 2 port SATA IDE 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
 	2970  82946GZ/PL/GL Memory Controller Hub
 	2971  82946GZ/PL/GL PCI Express Root Port
 	2972  82946GZ/GL Integrated Graphics Controller
@@ -11873,6 +12073,37 @@
 	29a5  82P965/G965 HECI Controller
 	29a6  82P965/G965 PT IDER Controller
 	29a7  82P965/G965 KT Controller
+	29b0  DRAM Controller
+	29b1  PCI Express Root Port
+	29b2  Integrated Graphics Controller
+	29b3  Integrated Graphics Controller
+	29b4  HECI Controller
+	29b5  HECI 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
+	29cf  Virtual HECI Controller
+	29e0  DRAM Controller
+	29e1  Host-Primary PCI Express Bridge
+	29e4  HECI Controller
+	29e5  HECI 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
+	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
@@ -11978,7 +12209,42 @@
 	35b6  3100 Chipset PCI Express Port A
 	35b7  3100 Chipset PCI Express Port A1
 	35c8  3100 Extended Configuration Test Overflow Registers
+	3600  Server Memory Controller Hub
+	3604  Server PCI Express Port 1
+	3605  Server PCI Express Port 2
+	3606  Server PCI Express Port 3
+	3607  Server PCI Express Port 4
+	3608  Server PCI Express Port 5
+	3609  Server PCI Express Port 6
+	360a  Server PCI Express Port 7
+	360b  Server IOAT DMA Controller
+	360c  Server FSB Registers
+	360d  Server Snoop Filter Registers
+	360e  Server Reserved Registers
+	360f  Server FBD Branch 0 Registers
+	3610  Server FBD Branch 1 Registers
+	4000  Memory Controller Hub
+	4008  Memory Controller Hub
+	4010  Memory Controller Hub
+	4021  PCI Express Port 1
+	4022  PCI Express Port 2
+	4023  PCI Express Port 3
+	4024  PCI Express Port 4
+	4025  PCI Express Port 5
+	4026  PCI Express Port 6
+	4027  PCI Express Port 7
+	4028  PCI Express Port 8
+	4029  PCI Express Port 9
+	402d  IBIST Registers
+	402e  IBIST Registers
+	402f  DMA/DCA Engine
+	4030  FSB Registers
+	4032  I/OxAPIC
+	4035  FBD Registers
+	4036  FBD Registers
 	4220  PRO/Wireless 2200BG Network Connection
+		2731 8086  WLAN-Adapter
+		8086 2731  Samsung P35 integrated WLAN
 	4222  PRO/Wireless 3945ABG Network Connection
 		8086 1005  PRO/Wireless 3945BG Network Connection
 		8086 1034  PRO/Wireless 3945BG Network Connection
@@ -11994,6 +12260,23 @@
 	5201  EtherExpress PRO/100 Intelligent Server
 		8086 0001  EtherExpress PRO/100 Server Ethernet Adapter
 	530d  80310 IOP [IO Processor]
+	65c0  Memory Controller Hub
+	65e2  PCI Express x4 Port 2
+	65e3  PCI Express x4 Port 3
+	65e4  PCI Express x4 Port 4
+	65e5  PCI Express x4 Port 5
+	65e6  PCI Express x4 Port 6
+	65e7  PCI Express x4 Port 7
+	65f0  FSB Registers
+	65f1  Reserved Registers
+	65f3  Reserved Registers
+	65f5  DDR Channel 0 Registers
+	65f6  DDR Channel 1 Registers
+	65f7  PCI Express x8 Port 2-3
+	65f8  PCI Express x8 Port 4-5
+	65f9  PCI Express x8 Port 6-7
+	65fa  PCI Express x16 Port 4-7
+	65ff  DMA Engine
 	7000  82371SB PIIX3 ISA [Natoma/Triton II]
 	7010  82371SB PIIX3 IDE [Natoma/Triton II]
 	7020  82371SB PIIX3 USB [Natoma/Triton II]
@@ -12092,6 +12375,7 @@
 	9622  Integrated RAID
 	9641  Integrated RAID
 	96a1  Integrated RAID
+	a620  6400/6402 Advanced Memory Buffer (AMB)
 	b152  21152 PCI-to-PCI Bridge
 # observed, and documented in Intel revision note; new mask of 1011:0026
 	b154  21154 PCI-to-PCI Bridge
diff --git a/hw/xfree86/scanpci/xf86PciStdIds.h b/hw/xfree86/scanpci/xf86PciStdIds.h
index 0cf8d4e..d2784f5 100644
--- a/hw/xfree86/scanpci/xf86PciStdIds.h
+++ b/hw/xfree86/scanpci/xf86PciStdIds.h
@@ -30,6 +30,10 @@ static const char pci_vendor_0000[] = "G
 static const char pci_vendor_001a[] = "Ascend Communications, Inc.";
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
+static const char pci_vendor_001c[] = "PEAK-System Technik GmbH";
+static const char pci_device_001c_0001[] = "PCAN-PCI CAN-Bus controller";
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
 static const char pci_vendor_0033[] = "Paradyne corp.";
 #endif
 static const char pci_vendor_003d[] = "Lockheed Martin-Marietta Corp";
@@ -38,6 +42,21 @@ static const char pci_vendor_0059[] = "T
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
 static const char pci_vendor_0070[] = "Hauppauge computer works Inc.";
+static const char pci_device_0070_0003[] = "WinTV PVR-250";
+static const char pci_device_0070_0009[] = "WinTV PVR-150";
+static const char pci_device_0070_0801[] = "WinTV PVR-150";
+static const char pci_device_0070_0807[] = "WinTV PVR-150";
+static const char pci_device_0070_4000[] = "WinTV PVR-350";
+static const char pci_device_0070_4001[] = "WinTV PVR-250 (v1)";
+static const char pci_device_0070_4009[] = "WinTV PVR-250";
+static const char pci_device_0070_4800[] = "WinTV PVR-350";
+static const char pci_device_0070_4801[] = "WinTV PVR-250 MCE";
+static const char pci_device_0070_4803[] = "WinTV PVR-250";
+static const char pci_device_0070_8003[] = "WinTV PVR-150";
+static const char pci_device_0070_8801[] = "WinTV PVR-150";
+static const char pci_device_0070_c801[] = "WinTV PVR-150";
+static const char pci_device_0070_e807[] = "WinTV PVR-500 MCE (1st tuner)";
+static const char pci_device_0070_e817[] = "WinTV PVR-500 MCE (2nd tuner)";
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
 static const char pci_vendor_0071[] = "Nebula Electronics Ltd.";
@@ -85,6 +104,9 @@ static const char pci_vendor_0357[] = "T
 static const char pci_device_0357_000a[] = "TTP-Monitoring Card V2.0";
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
+static const char pci_vendor_0403[] = "Future Technology Devices International Ltd";
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
 static const char pci_vendor_0432[] = "SCM Microsystems, Inc.";
 static const char pci_device_0432_0001[] = "Pluto2 DVB-T Receiver for PCMCIA [EasyWatch MobilSet]";
 #endif
@@ -105,6 +127,7 @@ static const char pci_vendor_050d[] = "B
 static const char pci_device_050d_001a[] = "FSD7000 802.11g PCI Wireless card";
 static const char pci_device_050d_0109[] = "F5U409-CU USB/Serial Portable Adapter";
 static const char pci_device_050d_7050[] = "F5D7050 802.11g Wireless USB Adapter";
+static const char pci_device_050d_705c[] = "F5D7050 v4";
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
 static const char pci_vendor_05a9[] = "OmniVision";
@@ -132,16 +155,35 @@ static const char pci_device_067b_2303[]
 static const char pci_device_067b_3507[] = "PL-3507 Hi-Speed USB & IEEE 1394 Combo to IDE Bridge Controller";
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
+static const char pci_vendor_069d[] = "Hughes Network Systems (HNS)";
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
 static const char pci_vendor_0721[] = "Sapphire, Inc.";
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
+static const char pci_vendor_07ca[] = "AVerMedia Technologies Inc.";
+static const char pci_device_07ca_b808[] = "AVerTV DVB-T Volar (USB 2.0)";
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
 static const char pci_vendor_07e2[] = "ELMEG Communication Systems GmbH";
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
+static const char pci_vendor_0842[] = "NPG, Personal Grand Technology";
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
+static const char pci_vendor_08ff[] = "AuthenTec";
+static const char pci_device_08ff_afe4[] = "[Anchor] AF-S2 FingerLoc Sensor Module";
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
 static const char pci_vendor_0925[] = "VIA Technologies, Inc. (Wrong ID)";
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
 static const char pci_vendor_093a[] = "PixArt Imaging Inc.";
+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_2603[] = "Philips Webcam SPC500NC";
+static const char pci_device_093a_2608[] = "Maxell MaxCam RotaWeb";
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
 static const char pci_vendor_09c1[] = "Arris";
@@ -151,15 +193,25 @@ static const char pci_device_09c1_0704[]
 static const char pci_vendor_0a89[] = "BREA Technologies Inc";
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
+static const char pci_vendor_0ace[] = "ZyDAS";
+static const char pci_device_0ace_1211[] = "ZD1211 IEEE 802.11b+g USB Adapter";
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
 static const char pci_vendor_0b0b[] = "Rhino Equiment Corp.";
 static const char pci_device_0b0b_0105[] = "Rhino R1T1";
 static const char pci_device_0b0b_0205[] = "Rhino R4FXO";
+static const char pci_device_0b0b_0206[] = "RCB4FXO 4-channel FXO analog telphony card";
 static const char pci_device_0b0b_0305[] = "Rhino R4T1";
 static const char pci_device_0b0b_0405[] = "Rhino R8FXX";
+static const char pci_device_0b0b_0406[] = "RCB8FXX 8-channel modular analog telphony card";
 static const char pci_device_0b0b_0505[] = "Rhino R24FXX";
-static const char pci_device_0b0b_0506[] = "Rhino R2T1";
+static const char pci_device_0b0b_0506[] = "RCB24FXS 24-Channel FXS analog telphony card";
 static const char pci_device_0b0b_0605[] = "Rhino R2T1";
 static const char pci_device_0b0b_0705[] = "Rhino R24FXS";
+static const char pci_device_0b0b_0706[] = "RCB24FXO 24-Channel FXO analog telphony card";
+static const char pci_device_0b0b_0905[] = "R1T3 Single T3 Digital Telephony Card";
+static const char pci_device_0b0b_0906[] = "RCB24FXX 24-channel modular analog telphony card";
+static const char pci_device_0b0b_0a06[] = "RCB672FXX 672-channel modular analog telphony card";
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
 static const char pci_vendor_0b49[] = "ASCII Corporation";
@@ -524,12 +576,48 @@ 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";
+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_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";
 static const char pci_device_1000_005e[] = "SAS1066 PCI-X Fusion-MPT SAS";
 static const char pci_device_1000_0060[] = "MegaRAID SAS 1078";
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1000_0060_1000_1006[] = "MegaRAID SAS 8888ELP";
+#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1000_0060_1000_100a[] = "MegaRAID SAS 8708ELP";
+#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1000_0060_1000_100e[] = "MegaRAID SAS 8884E";
+#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1000_0060_1000_100f[] = "MegaRAID SAS 8708E";
+#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1000_0060_1000_1010[] = "MegaRAID SATA 350-8ELP";
+#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1000_0060_1000_1011[] = "MegaRAID SATA 350-4ELP";
+#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1000_0060_1000_1012[] = "MegaRAID SAS 8704ELP";
+#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1000_0060_1014_0363[] = "MegaRAID SAS PCI Express ROMB";
+#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1000_0060_1014_0364[] = "SystemX MegaRAID SAS 8808E";
+#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1000_0060_1014_0365[] = "SystemX MegaRAID SAS 8884E";
+#endif
 #endif
 #ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_1000_0060_1028_1f0a[] = "PERC 6/E Adapter RAID Controller";
@@ -547,7 +635,28 @@ 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_1f0d[] = "PERC 6/i Enhanced RAID Controller";
+static const char pci_subsys_1000_0060_1028_1f0d[] = "CERC 6/i Adapter RAID Controller";
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
+#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1000_0060_1028_1f11[] = "CERC 6/i Adapter RAID Controller";
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1000_0060_1043_824d[] = "MegaRAID SAS PCI Express ROMB";
+#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1000_0060_1170_002f[] = "MegaRAID SAS PCI Express ROMB";
+#endif
+#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1000_0060_8086_34cc[] = "Integrated RAID Controller SROMBSAS28E";
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
+#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1000_0060_8086_34cd[] = "Integrated RAID Controller SROMBSAS28E";
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
 static const char pci_device_1000_0062[] = "SAS1078 PCI-Express Fusion-MPT SAS";
@@ -617,6 +726,21 @@ static const char pci_subsys_1000_0408_1
 static const char pci_subsys_1000_0408_1028_0002[] = "PowerEdge RAID Controller PERC4e/DC";
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
+#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1000_0408_1028_0012[] = "PowerEdge RAID Controller RAC4";
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
+#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1000_0408_1028_0015[] = "PowerEdge RAID Controller PERC5";
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
+#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1000_0408_1028_1f03[] = "PowerEdge RAID Controller PERC5";
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
 #ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_1000_0408_1734_1065[] = "FSC MegaRAID PCI Express ROMB";
 #endif
@@ -661,6 +785,9 @@ static const char pci_subsys_1000_0411_1
 static const char pci_subsys_1000_0411_1000_1004[] = "MegaRAID SAS 8308ELP";
 #endif
 #ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1000_0411_1000_1008[] = "MegaRAID SAS 84016E";
+#endif
+#ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_1000_0411_1000_100c[] = "MegaRAID SATA 300-12E";
 #endif
 #ifdef INIT_SUBSYS_INFO
@@ -688,12 +815,12 @@ static const char pci_subsys_1000_0411_1
 #endif
 #endif
 #ifdef INIT_SUBSYS_INFO
-static const char pci_subsys_1000_0411_8086_1001[] = "SRCSAS18E RAID Controller";
+static const char pci_subsys_1000_0411_8086_1001[] = "RAID Controller SRCSAS18E";
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
 #endif
 #ifdef INIT_SUBSYS_INFO
-static const char pci_subsys_1000_0411_8086_1003[] = "SRCSAS144E RAID Controller";
+static const char pci_subsys_1000_0411_8086_1003[] = "RAID Controller SRCSAS144E";
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
 #endif
@@ -1038,7 +1165,19 @@ static const char pci_subsys_1002_4378_1
 #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";
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1002_437a_1002_4379[] = "ATI 4379 Serial ATA Controller";
+#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1002_437a_1002_437a[] = "ATI 437A Serial ATA Controller";
+#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1002_437a_14f1_8800[] = "Leadtek WinFast TV2000XP Expert";
+#endif
 static const char pci_device_1002_437b[] = "SB450 HDA Audio";
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1002_437b_1734_10b8[] = "Realtek High Definition Audio";
+#endif
 static const char pci_device_1002_4380[] = "SB600 Non-Raid-5 SATA";
 static const char pci_device_1002_4381[] = "SB600 Raid-5 SATA";
 static const char pci_device_1002_4382[] = "SB600 AC97 Audio";
@@ -1203,6 +1342,9 @@ static const char pci_subsys_1002_4752_8
 #ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_1002_4752_8086_3427[] = "S875WP1-E mainboard";
 #endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1002_4752_8086_5744[] = "S845WD1-E mainboard";
+#endif
 static const char pci_device_1002_4753[] = "Rage XC";
 #ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_1002_4753_1002_4753[] = "Rage XC";
@@ -1450,6 +1592,9 @@ static const char pci_subsys_1002_4e50_1
 static const char pci_subsys_1002_4e50_103c_0890[] = "NC6000 laptop";
 #endif
 #ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1002_4e50_144d_c00c[] = "P35 notebook";
+#endif
+#ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_1002_4e50_1462_0311[] = "MSI M510A";
 #endif
 #ifdef INIT_SUBSYS_INFO
@@ -1457,6 +1602,9 @@ static const char pci_subsys_1002_4e50_1
 #endif
 static const char pci_device_1002_4e51[] = "M10 NQ [Radeon Mobility 9600]";
 static const char pci_device_1002_4e52[] = "RV350 [Mobility Radeon 9600 M10]";
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1002_4e52_144d_c00c[] = "P35 notebook";
+#endif
 static const char pci_device_1002_4e53[] = "M10 NS [Radeon Mobility 9600]";
 static const char pci_device_1002_4e54[] = "M10 NT [FireGL Mobility T2]";
 static const char pci_device_1002_4e56[] = "M11 NV [FireGL Mobility T2e]";
@@ -1822,7 +1970,7 @@ static const char pci_device_1002_554b[]
 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_5551[] = "R423 UQ [FireGL V7200 (PCIE)]";
+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";
@@ -1874,6 +2022,7 @@ static const char pci_subsys_1002_5950_1
 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_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]";
@@ -1917,6 +2066,9 @@ 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";
+#endif
+#ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_1002_5964_1043_c006[] = "ASUS Radeon 9200 SE / TD / 128M";
 #endif
 #ifdef INIT_SUBSYS_INFO
@@ -1948,10 +2100,11 @@ static const char pci_subsys_1002_5964_1
 #endif
 static const char pci_device_1002_5969[] = "ES1000";
 static const char pci_device_1002_5974[] = "RS482 [Radeon Xpress 200]";
-static const char pci_device_1002_5975[] = "RS482 [Radeon Xpress 200M]";
+static const char pci_device_1002_5975[] = "RS485 [Radeon Xpress 1100 IGP]";
 static const char pci_device_1002_5a33[] = "Radeon Xpress 200 Host Bridge";
 static const char pci_device_1002_5a34[] = "RS480 PCI-X Root Port";
 static const char pci_device_1002_5a36[] = "RS480 PCI Bridge";
+static const char pci_device_1002_5a37[] = "RS480 PCI Bridge";
 static const char pci_device_1002_5a38[] = "RS480 PCI Bridge";
 static const char pci_device_1002_5a39[] = "RS480 PCI Bridge";
 static const char pci_device_1002_5a3f[] = "RS480 PCI Bridge";
@@ -1994,6 +2147,9 @@ static const char pci_device_1002_5c63[]
 #ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_1002_5c63_1002_5c63[] = "Apple iBook G4 2004";
 #endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1002_5c63_144d_c00c[] = "P30 notebook";
+#endif
 static const char pci_device_1002_5d44[] = "RV280 [Radeon 9200 SE] (Secondary)";
 #ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_1002_5d44_1458_4019[] = "Radeon 9200 SE (Secondary)";
@@ -2078,15 +2234,17 @@ 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 [Radeon X1300]";
+static const char pci_device_1002_7142[] = "RV515 PRO [ATI 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
+static const char pci_device_1002_7143[] = "RV505 [Radeon X1550 Series]";
 static const char pci_device_1002_7145[] = "Radeon Mobility X1400";
 static const char pci_device_1002_7146[] = "RV515 [Radeon X1300]";
 #ifdef INIT_SUBSYS_INFO
 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]";
@@ -2094,8 +2252,10 @@ static const char pci_device_1002_714c[]
 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_7153[] = "RV515GL [FireGL V3350]";
 static const char pci_device_1002_715e[] = "RV515 [Radeon X1300]";
-static const char pci_device_1002_7162[] = "RV515 [Radeon X1300] (Secondary)";
+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]";
 #ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_1002_7162_1002_0323[] = "All-in-Wonder 2006 PCI-E Edition (Secondary)";
 #endif
@@ -2104,10 +2264,23 @@ static const char pci_device_1002_7166[]
 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_7180[] = "RV516 Radeon X1300 Series Primary";
+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_71a0[] = "RV516 Radeon X1300 Series Secondary";
+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_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_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]";
@@ -2116,12 +2289,16 @@ static const char pci_subsys_1002_71c4_1
 #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_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_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_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_7240[] = "R580 [Radeon X1900]";
 static const char pci_device_1002_7241[] = "R580 [Radeon X1900]";
 static const char pci_device_1002_7242[] = "R580 [Radeon X1900]";
@@ -2134,15 +2311,33 @@ static const char pci_device_1002_7248[]
 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";
+#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1002_724b_1002_0b13[] = "Radeon X1900 Secondary Display Device";
+#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 [FireGL V7300/V7350] Primary (PCIE)";
+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_726e[] = "R580 [FireGL V7300/V7350] Secondary (PCIE)";
+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_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_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_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]";
@@ -3003,6 +3198,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_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";
@@ -3245,15 +3441,34 @@ static const char pci_device_1028_0002[]
 #ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_1028_0002_1028_0002[] = "PowerEdge 4400";
 #endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1028_0002_1028_00d1[] = "PERC 3/DiV [Viper]";
+#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1028_0002_1028_00d9[] = "PERC 3/DiL [Lexus]";
+#endif
 static const char pci_device_1028_0003[] = "PowerEdge Expandable RAID Controller 3/Si";
 #ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_1028_0003_1028_0003[] = "PowerEdge 2450";
 #endif
+static const char pci_device_1028_0004[] = "PowerEdge Expandable RAID Controller 3/Di [Iguana]";
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1028_0004_1028_0004[] = "PERC 3/DiF [Iguana]";
+#endif
 static const char pci_device_1028_0006[] = "PowerEdge Expandable RAID Controller 3/Di";
 static const char pci_device_1028_0007[] = "Remote Access Card III";
 static const char pci_device_1028_0008[] = "Remote Access Card III";
 static const char pci_device_1028_0009[] = "Remote Access Card III: BMC/SMIC device not present";
 static const char pci_device_1028_000a[] = "PowerEdge Expandable RAID Controller 3/Di";
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1028_000a_1028_0106[] = "PERC 3/DiJ [Jaguar]";
+#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1028_000a_1028_011b[] = "PERC 3/DiD [Dagger]";
+#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1028_000a_1028_0121[] = "PERC 3/DiB [Boxster]";
+#endif
 static const char pci_device_1028_000c[] = "Embedded Remote Access or ERA/O";
 static const char pci_device_1028_000d[] = "Embedded Remote Access: BMC/SMIC device";
 static const char pci_device_1028_000e[] = "PowerEdge Expandable RAID controller 4/Di";
@@ -3279,6 +3494,13 @@ static const char pci_subsys_1028_0013_1
 #endif
 static const char pci_device_1028_0014[] = "Remote Access Card 4 Daughter Card SMIC interface";
 static const char pci_device_1028_0015[] = "PowerEdge Expandable RAID controller 5i";
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1028_0015_1028_1f01[] = "PERC 5/E Adapter RAID Controller";
+#endif
+#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 VENDOR_INCLUDE_NONVIDEO
 static const char pci_vendor_1029[] = "Siemens Nixdorf IS";
 #endif
@@ -3779,6 +4001,7 @@ static const char pci_subsys_102f_0020_1
 #endif
 static const char pci_device_102f_0030[] = "TC35815CF PCI 10/100 Mbit Ethernet Controller";
 static const char pci_device_102f_0031[] = "TC35815CF PCI 10/100 Mbit Ethernet Controller with WOL";
+static const char pci_device_102f_0032[] = "TC35815CF PCI 10/100 Mbit Ethernet Controller on TX4939";
 static const char pci_device_102f_0105[] = "TC86C001 [goku-s] IDE";
 static const char pci_device_102f_0106[] = "TC86C001 [goku-s] USB 1.1 Host";
 static const char pci_device_102f_0107[] = "TC86C001 [goku-s] USB Device Controller";
@@ -3991,6 +4214,9 @@ static const char pci_subsys_1039_0900_1
 #ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_1039_0900_1043_8035[] = "CUSI-FX motherboard";
 #endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1039_0900_1462_0900[] = "MS-6701 motherboard";
+#endif
 static const char pci_device_1039_0961[] = "SiS961 [MuTIOL Media IO]";
 static const char pci_device_1039_0962[] = "SiS962 [MuTIOL Media IO]";
 static const char pci_device_1039_0963[] = "SiS963 [MuTIOL Media IO]";
@@ -4019,6 +4245,9 @@ static const char pci_subsys_1039_5513_1
 #ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_1039_5513_1043_8035[] = "CUSI-FX motherboard";
 #endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1039_5513_1462_7010[] = "MS-6701 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";
@@ -4077,13 +4306,25 @@ static const char pci_subsys_1039_7001_1
 #ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_1039_7001_1462_5470[] = "K7SOM+ 5.2C Motherboard";
 #endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1039_7001_1462_7010[] = "MS-6701 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";
+#endif
+#ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_1039_7002_1509_7002[] = "Onboard USB Controller";
 #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";
+#endif
 static const char pci_device_1039_7012[] = "AC'97 Sound Controller";
 #ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_1039_7012_1462_7010[] = "MS-6701 motherboard";
+#endif
+#ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_1039_7012_15bd_1001[] = "DFI 661FX motherboard";
 #endif
 static const char pci_device_1039_7013[] = "AC'97 Modem Controller";
@@ -4255,10 +4496,13 @@ static const char pci_device_103c_12ec[]
 static const char pci_device_103c_12ee[] = "PCI-X 2.0 Local Bus Adapter";
 static const char pci_device_103c_12f8[] = "Broadcom BCM4306 802.11b/g Wireless LAN";
 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_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";
 static const char pci_device_103c_3085[] = "Realtek RTL8139/8139C/8139C+";
+static const char pci_device_103c_30b5[] = "Compaq Presario V3000Z";
 static const char pci_device_103c_3220[] = "Smart Array P600";
 #ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_103c_3220_103c_3225[] = "3 Gb/s SAS RAID";
@@ -4314,8 +4558,10 @@ static const char pci_device_1043_80bb[]
 static const char pci_device_1043_80c5[] = "nForce3 chipset motherboard [SK8N]";
 static const char pci_device_1043_80df[] = "v9520 Magic/T";
 static const char pci_device_1043_815a[] = "A8N-SLI Motherboard nForce4 SATA";
+static const char pci_device_1043_8168[] = "Realtek PCI-E Gigabit Ethernet Controller (RTL8111B)";
 static const char pci_device_1043_8187[] = "802.11a/b/g Wireless LAN Card";
 static const char pci_device_1043_8188[] = "Tiger Hybrid TV Capture Device";
+static const char pci_device_1043_81f4[] = "EN7300TC512/TD/128M/A(C262G) [Graphics Card EN7300TC512]";
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
 static const char pci_vendor_1044[] = "Adaptec (formerly DPT)";
@@ -4632,6 +4878,9 @@ static const char pci_subsys_104c_8023_1
 #ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_104c_8023_1043_808b[] = "K8N4-E Mainboard";
 #endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_104c_8023_1043_815b[] = "P5W DH Deluxe Motherboard";
+#endif
 static const char pci_device_104c_8024[] = "TSB43AB23 IEEE-1394a-2000 Controller (PHY/Link)";
 static const char pci_device_104c_8025[] = "TSB82AA2 IEEE-1394b Link Layer Controller";
 #ifdef INIT_SUBSYS_INFO
@@ -4719,10 +4968,16 @@ static const char pci_device_104c_8039[]
 #ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_104c_8039_103c_309f[] = "nx9420";
 #endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_104c_8039_103c_30a1[] = "NC2400";
+#endif
 static const char pci_device_104c_803a[] = "PCIxx12 OHCI Compliant IEEE 1394 Host Controller";
 #ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_104c_803a_103c_309f[] = "nx9420";
 #endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_104c_803a_103c_30a1[] = "NC2400";
+#endif
 static const char pci_device_104c_803b[] = "5-in-1 Multimedia Card Reader (SD/MMC/MS/MS PRO/xD)";
 #ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_104c_803b_103c_309f[] = "nx9420";
@@ -4735,6 +4990,9 @@ static const char pci_device_104c_803d[]
 #ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_104c_803d_103c_309f[] = "nx9420";
 #endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_104c_803d_103c_30a1[] = "NC2400";
+#endif
 static const char pci_device_104c_8201[] = "PCI1620 Firmware Loading Function";
 static const char pci_device_104c_8204[] = "PCI7410,7510,7610 PCI Firmware Loading Function";
 #ifdef INIT_SUBSYS_INFO
@@ -4831,6 +5089,9 @@ static const char pci_subsys_104c_ac42_1
 #endif
 static const char pci_device_104c_ac44[] = "PCI4510 PC card Cardbus Controller";
 #ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_104c_ac44_1028_0149[] = "Inspiron 5100";
+#endif
+#ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_104c_ac44_1028_0163[] = "Latitude D505";
 #endif
 #ifdef INIT_SUBSYS_INFO
@@ -4858,7 +5119,7 @@ static const char pci_subsys_104c_ac4a_1
 static const char pci_subsys_104c_ac4a_1028_014e[] = "Latitude D800";
 #endif
 static const char pci_device_104c_ac50[] = "PCI1410 PC card Cardbus Controller";
-static const char pci_device_104c_ac51[] = "PCI1420";
+static const char pci_device_104c_ac51[] = "PCI1420 PC card Cardbus Controller";
 #ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_104c_ac51_0e11_004e[] = "Evo N600c";
 #endif
@@ -4922,6 +5183,9 @@ static const char pci_subsys_104c_ac60_1
 static const char pci_device_104c_ac8d[] = "PCI 7620";
 static const char pci_device_104c_ac8e[] = "PCI7420 CardBus Controller";
 static const char pci_device_104c_ac8f[] = "PCI7420/7620 Combo CardBus, 1394a-2000 OHCI and SD/MS-Pro Controller";
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_104c_ac8f_1028_018d[] = "Inspiron 700m";
+#endif
 static const char pci_device_104c_fe00[] = "FireWire Host Controller";
 static const char pci_device_104c_fe03[] = "12C01A FireWire Host Controller";
 static const char pci_vendor_104d[] = "Sony Corporation";
@@ -5086,6 +5350,7 @@ static const char pci_subsys_1057_1801_e
 #endif
 static const char pci_device_1057_18c0[] = "MPC8265A/8266/8272";
 static const char pci_device_1057_18c1[] = "MPC8271/MPC8272";
+static const char pci_device_1057_3052[] = "SM56 Data Fax Modem";
 static const char pci_device_1057_3055[] = "SM56 Data Fax Modem";
 static const char pci_device_1057_3410[] = "DSP56361 Digital Signal Processor";
 #ifdef INIT_SUBSYS_INFO
@@ -5198,6 +5463,9 @@ 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";
+#endif
+#ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_105a_0d30_105a_4d33[] = "Ultra100";
 #endif
 static const char pci_device_105a_0d38[] = "20263";
@@ -5243,6 +5511,11 @@ static const char pci_subsys_105a_4d30_1
 #ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_105a_4d30_105a_4d39[] = "FastTrak100";
 #endif
+#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_105a_4d30_8086_5744[] = "S845WD1-E mainboard";
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
 static const char pci_device_105a_4d33[] = "20246";
 #ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_105a_4d33_105a_4d33[] = "20246 IDE Controller";
@@ -5295,7 +5568,18 @@ 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]";
+#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_8601[] = "SuperTrak EX8650";
+#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_105a_8650_105a_8602[] = "SuperTrak EX8654";
+#endif
 static const char pci_device_105a_c350[] = "80333 [SuperTrak EX12350]";
+static const char pci_device_105a_e350[] = "80333 [SuperTrak EX24350]";
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
 static const char pci_vendor_105b[] = "Foxconn International, Inc.";
@@ -5672,6 +5956,7 @@ static const char pci_device_1073_0012[]
 static const char pci_subsys_1073_0012_1073_0012[] = "DS-XG PCI Audio Codec";
 #endif
 static const char pci_device_1073_0020[] = "DS-1 Audio";
+static const char pci_device_1073_1000[] = "SW1000XG [XG Factory]";
 static const char pci_device_1073_2000[] = "DS2416 Digital Mixing Card";
 #ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_1073_2000_1073_2000[] = "DS2416 Digital Mixing Card";
@@ -5737,7 +6022,7 @@ static const char pci_subsys_1077_2422_1
 #ifdef VENDOR_INCLUDE_NONVIDEO
 static const char pci_device_1077_2432[] = "ISP2432-based 4Gb Fibre Channel to PCI Express HBA";
 static const char pci_device_1077_3022[] = "ISP4022-based Ethernet NIC";
-static const char pci_device_1077_3032[] = "ISP4032-based Ethernet NIC";
+static const char pci_device_1077_3032[] = "ISP4032-based Ethernet IPv6 NIC";
 static const char pci_device_1077_4010[] = "ISP4010-based iSCSI TOE HBA";
 static const char pci_device_1077_4022[] = "ISP4022-based iSCSI TOE HBA";
 static const char pci_device_1077_4032[] = "ISP4032-based iSCSI TOE IPv6 HBA";
@@ -6307,6 +6592,9 @@ static const char pci_subsys_109e_0878_1
 static const char pci_subsys_109e_0878_1461_0002[] = "Avermedia PCTV98 Audio Capture";
 #endif
 #ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_109e_0878_1461_0003[] = "UltraTV PCI 350";
+#endif
+#ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_109e_0878_1461_0004[] = "AVerTV WDM Audio Capture";
 #endif
 #ifdef INIT_SUBSYS_INFO
@@ -6491,6 +6779,8 @@ static const char pci_device_10a9_4001[]
 static const char pci_device_10a9_4002[] = "TIO-CE PCI Express Port";
 static const char pci_device_10a9_8001[] = "O2 1394";
 static const char pci_device_10a9_8002[] = "G-net NT";
+static const char pci_device_10a9_8010[] = "Broadcom e-net [SGI IO9/IO10 BaseIO]";
+static const char pci_device_10a9_8018[] = "Broadcom e-net [SGI A330 Server BaseIO]";
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
 static const char pci_vendor_10aa[] = "ACC Microelectronics";
@@ -6589,6 +6879,9 @@ static const char pci_subsys_10b5_9030_1
 static const char pci_subsys_10b5_9030_10b5_3068[] = "Alpermann+Velte PCL PCI HD (3V/5V): Timecode Reader Board";
 #endif
 #ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_10b5_9030_12fe_0111[] = "CPCI-ASIO4 (ESD 4-port Serial Interface Board)";
+#endif
+#ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_10b5_9030_1397_3136[] = "4xS0-ISDN PCI Adapter";
 #endif
 #ifdef INIT_SUBSYS_INFO
@@ -6745,6 +7038,9 @@ static const char pci_subsys_10b5_9054_1
 static const char pci_subsys_10b5_9054_12d9_0002[] = "PCI Prosody Card rev 1.5";
 #endif
 #ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_10b5_9054_14b4_d100[] = "Dektec DTA-100";
+#endif
+#ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_10b5_9054_16df_0011[] = "PIKA PrimeNet MM PCI";
 #endif
 #ifdef INIT_SUBSYS_INFO
@@ -11547,6 +11843,7 @@ static const char pci_subsys_1166_0132_1
 static const char pci_device_1166_0140[] = "HT2100 PCI-Express Bridge";
 static const char pci_device_1166_0141[] = "HT2100 PCI-Express Bridge";
 static const char pci_device_1166_0142[] = "HT2100 PCI-Express Bridge";
+static const char pci_device_1166_0144[] = "HT2100 PCI-Express Bridge";
 static const char pci_device_1166_0200[] = "OSB4 South Bridge";
 static const char pci_device_1166_0201[] = "CSB5 South Bridge";
 #ifdef INIT_SUBSYS_INFO
@@ -21296,13 +21593,13 @@ static const char pci_device_8086_0962[]
 static const char pci_device_8086_0964[] = "80960RP [i960 RP 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[] = "NC1632 Gigabit Ethernet Adapter (1000-SX)";
+static const char pci_subsys_8086_1000_0e11_b0df[] = "NC6132 Gigabit Ethernet Adapter (1000-SX)";
 #endif
 #ifdef INIT_SUBSYS_INFO
-static const char pci_subsys_8086_1000_0e11_b0e0[] = "NC1633 Gigabit Ethernet Adapter (1000-LX)";
+static const char pci_subsys_8086_1000_0e11_b0e0[] = "NC6133 Gigabit Ethernet Adapter (1000-LX)";
 #endif
 #ifdef INIT_SUBSYS_INFO
-static const char pci_subsys_8086_1000_0e11_b123[] = "NC1634 Gigabit Ethernet Adapter (1000-SX)";
+static const char pci_subsys_8086_1000_0e11_b123[] = "NC6134 Gigabit Ethernet Adapter (1000-LX)";
 #endif
 #ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_8086_1000_1014_0119[] = "Netfinity Gigabit Ethernet SX Adapter";
@@ -22280,6 +22577,9 @@ 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)";
+#endif
+#ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_8086_1229_8086_000a[] = "EtherExpress PRO/100+ Management Adapter";
 #endif
 #ifdef INIT_SUBSYS_INFO
@@ -22505,6 +22805,9 @@ static const char pci_subsys_8086_1229_8
 static const char pci_subsys_8086_1229_8086_3012[] = "EtherExpress PRO/100 Network Connection";
 #endif
 #ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_1229_8086_301a[] = "S845WD1-E mainboard";
+#endif
+#ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_8086_1229_8086_3411[] = "SDS2 Mainboard";
 #endif
 static const char pci_device_8086_122d[] = "430FX - 82437FX TSC [Triton I]";
@@ -22673,6 +22976,9 @@ static const char pci_subsys_8086_2425_1
 static const char pci_device_8086_2426[] = "82801AB AC'97 Modem";
 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)";
 #ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_8086_2442_1014_01c6[] = "Netvista A40/A40p";
@@ -22701,6 +23007,9 @@ static const char pci_subsys_8086_2442_8
 #ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_8086_2442_8086_4557[] = "D815EGEW Mainboard";
 #endif
+#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";
 #ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_8086_2443_1014_01c6[] = "Netvista A40/A40p";
@@ -22729,6 +23038,9 @@ static const char pci_subsys_8086_2443_8
 #ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_8086_2443_8086_4557[] = "D815EGEW Mainboard";
 #endif
+#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)";
 #ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_8086_2444_1025_1016[] = "Travelmate 612 TX";
@@ -22751,6 +23063,9 @@ static const char pci_subsys_8086_2444_1
 #ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_8086_2444_8086_4532[] = "D815EEA2 mainboard";
 #endif
+#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";
 #ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_8086_2445_0e11_000b[] = "Compaq Deskpro EN Audio";
@@ -22913,6 +23228,9 @@ static const char pci_subsys_8086_244b_8
 #ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_8086_244b_8086_4557[] = "D815EGEW Mainboard";
 #endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_244b_8086_5744[] = "S845WD1-E mainboard";
+#endif
 static const char pci_device_8086_244c[] = "82801BAM ISA Bridge (LPC)";
 static const char pci_device_8086_244e[] = "82801 PCI Bridge";
 #ifdef INIT_SUBSYS_INFO
@@ -23144,6 +23462,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_c00c[] = "P30/P35 notebook";
+#endif
+#ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_8086_24c3_1458_24c2[] = "GA-8PE667 Ultra";
 #endif
 #ifdef INIT_SUBSYS_INFO
@@ -24465,15 +24786,24 @@ static const char pci_subsys_8086_2792_1
 #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_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";
 #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";
 #ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_27a6_103c_30a1[] = "NC2400";
+#endif
+#ifdef INIT_SUBSYS_INFO
 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";
@@ -24486,6 +24816,9 @@ static const char pci_subsys_8086_27b8_8
 #endif
 static const char pci_device_8086_27b9[] = "82801GBM (ICH7-M) LPC Interface Bridge";
 #ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_27b9_103c_30a1[] = "NC2400";
+#endif
+#ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_8086_27b9_10f7_8338[] = "Panasonic CF-Y5 laptop";
 #endif
 #ifdef INIT_SUBSYS_INFO
@@ -24509,6 +24842,9 @@ static const char pci_subsys_8086_27c5_1
 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";
 #ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_27c8_103c_30a1[] = "NC2400";
+#endif
+#ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_8086_27c8_107b_5048[] = "E4500";
 #endif
 #ifdef INIT_SUBSYS_INFO
@@ -24519,6 +24855,9 @@ static const char pci_subsys_8086_27c8_8
 #endif
 static const char pci_device_8086_27c9[] = "82801G (ICH7 Family) USB UHCI #2";
 #ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_27c9_103c_30a1[] = "NC2400";
+#endif
+#ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_8086_27c9_107b_5048[] = "E4500";
 #endif
 #ifdef INIT_SUBSYS_INFO
@@ -24529,6 +24868,9 @@ static const char pci_subsys_8086_27c9_8
 #endif
 static const char pci_device_8086_27ca[] = "82801G (ICH7 Family) USB UHCI #3";
 #ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_27ca_103c_30a1[] = "NC2400";
+#endif
+#ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_8086_27ca_107b_5048[] = "E4500";
 #endif
 #ifdef INIT_SUBSYS_INFO
@@ -24539,6 +24881,9 @@ static const char pci_subsys_8086_27ca_8
 #endif
 static const char pci_device_8086_27cb[] = "82801G (ICH7 Family) USB UHCI #4";
 #ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_27cb_103c_30a1[] = "NC2400";
+#endif
+#ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_8086_27cb_107b_5048[] = "E4500";
 #endif
 #ifdef INIT_SUBSYS_INFO
@@ -24549,6 +24894,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_103c_30a1[] = "NC2400";
+#endif
+#ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_8086_27cc_17aa_200b[] = "ThinkPad T60/R60 series";
 #endif
 #ifdef INIT_SUBSYS_INFO
@@ -24560,6 +24908,9 @@ 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_103c_30a1[] = "NC2400";
+#endif
+#ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_8086_27d8_107b_5048[] = "E4500";
 #endif
 #ifdef INIT_SUBSYS_INFO
@@ -24572,6 +24923,9 @@ static const char pci_subsys_8086_27d8_1
 static const char pci_subsys_8086_27d8_152d_0753[] = "Softmodem";
 #endif
 #ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_27d8_1734_10ad[] = "Conexant softmodem SmartCP";
+#endif
+#ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_8086_27d8_17aa_2010[] = "ThinkPad T60/R60 series";
 #endif
 static const char pci_device_8086_27da[] = "82801G (ICH7 Family) SMBus Controller";
@@ -24592,6 +24946,9 @@ static const char pci_device_8086_27dd[]
 static const char pci_device_8086_27de[] = "82801G (ICH7 Family) AC'97 Audio Controller";
 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";
+#endif
+#ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_8086_27df_107b_5048[] = "E4500";
 #endif
 #ifdef INIT_SUBSYS_INFO
@@ -24656,6 +25013,34 @@ static const char pci_device_8086_2849[]
 static const char pci_device_8086_284b[] = "82801H (ICH8 Family) HD Audio Controller";
 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_2928[] = "Mobile 2 port SATA IDE 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_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";
@@ -24683,6 +25068,37 @@ static const char pci_device_8086_29a4[]
 static const char pci_device_8086_29a5[] = "82P965/G965 HECI Controller";
 static const char pci_device_8086_29a6[] = "82P965/G965 PT IDER Controller";
 static const char pci_device_8086_29a7[] = "82P965/G965 KT Controller";
+static const char pci_device_8086_29b0[] = "DRAM Controller";
+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_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_29cf[] = "Virtual HECI 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_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_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";
@@ -24894,7 +25310,46 @@ static const char pci_device_8086_35b5[]
 static const char pci_device_8086_35b6[] = "3100 Chipset PCI Express Port A";
 static const char pci_device_8086_35b7[] = "3100 Chipset PCI Express Port A1";
 static const char pci_device_8086_35c8[] = "3100 Extended Configuration Test Overflow Registers";
+static const char pci_device_8086_3600[] = "Server Memory Controller Hub";
+static const char pci_device_8086_3604[] = "Server PCI Express Port 1";
+static const char pci_device_8086_3605[] = "Server PCI Express Port 2";
+static const char pci_device_8086_3606[] = "Server PCI Express Port 3";
+static const char pci_device_8086_3607[] = "Server PCI Express Port 4";
+static const char pci_device_8086_3608[] = "Server PCI Express Port 5";
+static const char pci_device_8086_3609[] = "Server PCI Express Port 6";
+static const char pci_device_8086_360a[] = "Server PCI Express Port 7";
+static const char pci_device_8086_360b[] = "Server IOAT DMA Controller";
+static const char pci_device_8086_360c[] = "Server FSB Registers";
+static const char pci_device_8086_360d[] = "Server Snoop Filter Registers";
+static const char pci_device_8086_360e[] = "Server Reserved Registers";
+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_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";
+static const char pci_device_8086_4022[] = "PCI Express Port 2";
+static const char pci_device_8086_4023[] = "PCI Express Port 3";
+static const char pci_device_8086_4024[] = "PCI Express Port 4";
+static const char pci_device_8086_4025[] = "PCI Express Port 5";
+static const char pci_device_8086_4026[] = "PCI Express Port 6";
+static const char pci_device_8086_4027[] = "PCI Express Port 7";
+static const char pci_device_8086_4028[] = "PCI Express Port 8";
+static const char pci_device_8086_4029[] = "PCI Express Port 9";
+static const char pci_device_8086_402d[] = "IBIST Registers";
+static const char pci_device_8086_402e[] = "IBIST Registers";
+static const char pci_device_8086_402f[] = "DMA/DCA Engine";
+static const char pci_device_8086_4030[] = "FSB Registers";
+static const char pci_device_8086_4032[] = "I/OxAPIC";
+static const char pci_device_8086_4035[] = "FBD Registers";
+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";
+#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_4220_8086_2731[] = "Samsung P35 integrated WLAN";
+#endif
 static const char pci_device_8086_4222[] = "PRO/Wireless 3945ABG Network Connection";
 #ifdef INIT_SUBSYS_INFO
 static const char pci_subsys_8086_4222_8086_1005[] = "PRO/Wireless 3945BG Network Connection";
@@ -24924,6 +25379,23 @@ static const char pci_device_8086_5201[]
 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_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";
+static const char pci_device_8086_65e4[] = "PCI Express x4 Port 4";
+static const char pci_device_8086_65e5[] = "PCI Express x4 Port 5";
+static const char pci_device_8086_65e6[] = "PCI Express x4 Port 6";
+static const char pci_device_8086_65e7[] = "PCI Express x4 Port 7";
+static const char pci_device_8086_65f0[] = "FSB Registers";
+static const char pci_device_8086_65f1[] = "Reserved Registers";
+static const char pci_device_8086_65f3[] = "Reserved Registers";
+static const char pci_device_8086_65f5[] = "DDR Channel 0 Registers";
+static const char pci_device_8086_65f6[] = "DDR Channel 1 Registers";
+static const char pci_device_8086_65f7[] = "PCI Express x8 Port 2-3";
+static const char pci_device_8086_65f8[] = "PCI Express x8 Port 4-5";
+static const char pci_device_8086_65f9[] = "PCI Express x8 Port 6-7";
+static const char pci_device_8086_65fa[] = "PCI Express x16 Port 4-7";
+static const char pci_device_8086_65ff[] = "DMA Engine";
 static const char pci_device_8086_7000[] = "82371SB PIIX3 ISA [Natoma/Triton II]";
 static const char pci_device_8086_7010[] = "82371SB PIIX3 IDE [Natoma/Triton II]";
 static const char pci_device_8086_7020[] = "82371SB PIIX3 USB [Natoma/Triton II]";
@@ -25098,6 +25570,7 @@ static const char pci_device_8086_9621[]
 static const char pci_device_8086_9622[] = "Integrated RAID";
 static const char pci_device_8086_9641[] = "Integrated RAID";
 static const char pci_device_8086_96a1[] = "Integrated RAID";
+static const char pci_device_8086_a620[] = "6400/6402 Advanced Memory Buffer (AMB)";
 static const char pci_device_8086_b152[] = "21152 PCI-to-PCI Bridge";
 static const char pci_device_8086_b154[] = "21154 PCI-to-PCI Bridge";
 static const char pci_device_8086_b555[] = "21555 Non transparent PCI-to-PCI Bridge";
@@ -26290,6 +26763,52 @@ 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_0055_1033_8336 =
+	{0x1033, 0x8336, pci_subsys_1000_0055_1033_8336, 0};
+#undef pci_ss_info_1033_8336
+#define pci_ss_info_1033_8336 pci_ss_info_1000_0055_1033_8336
+#ifdef VENDOR_INCLUDE_NONVIDEO
+static const pciSubsystemInfo pci_ss_info_1000_0060_1000_1006 =
+	{0x1000, 0x1006, pci_subsys_1000_0060_1000_1006, 0};
+#undef pci_ss_info_1000_1006
+#define pci_ss_info_1000_1006 pci_ss_info_1000_0060_1000_1006
+static const pciSubsystemInfo pci_ss_info_1000_0060_1000_100a =
+	{0x1000, 0x100a, pci_subsys_1000_0060_1000_100a, 0};
+#undef pci_ss_info_1000_100a
+#define pci_ss_info_1000_100a pci_ss_info_1000_0060_1000_100a
+static const pciSubsystemInfo pci_ss_info_1000_0060_1000_100e =
+	{0x1000, 0x100e, pci_subsys_1000_0060_1000_100e, 0};
+#undef pci_ss_info_1000_100e
+#define pci_ss_info_1000_100e pci_ss_info_1000_0060_1000_100e
+static const pciSubsystemInfo pci_ss_info_1000_0060_1000_100f =
+	{0x1000, 0x100f, pci_subsys_1000_0060_1000_100f, 0};
+#undef pci_ss_info_1000_100f
+#define pci_ss_info_1000_100f pci_ss_info_1000_0060_1000_100f
+static const pciSubsystemInfo pci_ss_info_1000_0060_1000_1010 =
+	{0x1000, 0x1010, pci_subsys_1000_0060_1000_1010, 0};
+#undef pci_ss_info_1000_1010
+#define pci_ss_info_1000_1010 pci_ss_info_1000_0060_1000_1010
+static const pciSubsystemInfo pci_ss_info_1000_0060_1000_1011 =
+	{0x1000, 0x1011, pci_subsys_1000_0060_1000_1011, 0};
+#undef pci_ss_info_1000_1011
+#define pci_ss_info_1000_1011 pci_ss_info_1000_0060_1000_1011
+static const pciSubsystemInfo pci_ss_info_1000_0060_1000_1012 =
+	{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_1014_0363 =
+	{0x1014, 0x0363, pci_subsys_1000_0060_1014_0363, 0};
+#undef pci_ss_info_1014_0363
+#define pci_ss_info_1014_0363 pci_ss_info_1000_0060_1014_0363
+static const pciSubsystemInfo pci_ss_info_1000_0060_1014_0364 =
+	{0x1014, 0x0364, pci_subsys_1000_0060_1014_0364, 0};
+#undef pci_ss_info_1014_0364
+#define pci_ss_info_1014_0364 pci_ss_info_1000_0060_1014_0364
+static const pciSubsystemInfo pci_ss_info_1000_0060_1014_0365 =
+	{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
+#endif
 static const pciSubsystemInfo pci_ss_info_1000_0060_1028_1f0a =
 	{0x1028, 0x1f0a, pci_subsys_1000_0060_1028_1f0a, 0};
 #undef pci_ss_info_1028_1f0a
@@ -26313,6 +26832,32 @@ static const pciSubsystemInfo pci_ss_inf
 #undef pci_ss_info_1028_1f0d
 #define pci_ss_info_1028_1f0d pci_ss_info_1000_0060_1028_1f0d
 #ifdef VENDOR_INCLUDE_NONVIDEO
+#endif
+static const pciSubsystemInfo pci_ss_info_1000_0060_1028_1f11 =
+	{0x1028, 0x1f11, pci_subsys_1000_0060_1028_1f11, 0};
+#undef pci_ss_info_1028_1f11
+#define pci_ss_info_1028_1f11 pci_ss_info_1000_0060_1028_1f11
+#ifdef VENDOR_INCLUDE_NONVIDEO
+static const pciSubsystemInfo pci_ss_info_1000_0060_1043_824d =
+	{0x1043, 0x824d, pci_subsys_1000_0060_1043_824d, 0};
+#undef pci_ss_info_1043_824d
+#define pci_ss_info_1043_824d pci_ss_info_1000_0060_1043_824d
+static const pciSubsystemInfo pci_ss_info_1000_0060_1170_002f =
+	{0x1170, 0x002f, pci_subsys_1000_0060_1170_002f, 0};
+#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_34cc =
+	{0x8086, 0x34cc, pci_subsys_1000_0060_8086_34cc, 0};
+#undef pci_ss_info_8086_34cc
+#define pci_ss_info_8086_34cc pci_ss_info_1000_0060_8086_34cc
+#ifdef VENDOR_INCLUDE_NONVIDEO
+#endif
+static const pciSubsystemInfo pci_ss_info_1000_0060_8086_34cd =
+	{0x8086, 0x34cd, pci_subsys_1000_0060_8086_34cd, 0};
+#undef pci_ss_info_8086_34cd
+#define pci_ss_info_8086_34cd pci_ss_info_1000_0060_8086_34cd
+#ifdef VENDOR_INCLUDE_NONVIDEO
 static const pciSubsystemInfo pci_ss_info_1000_0062_1000_0062 =
 	{0x1000, 0x0062, pci_subsys_1000_0062_1000_0062, 0};
 #undef pci_ss_info_1000_0062
@@ -26391,6 +26936,24 @@ static const pciSubsystemInfo pci_ss_inf
 #undef pci_ss_info_1028_0002
 #define pci_ss_info_1028_0002 pci_ss_info_1000_0408_1028_0002
 #ifdef VENDOR_INCLUDE_NONVIDEO
+#endif
+static const pciSubsystemInfo pci_ss_info_1000_0408_1028_0012 =
+	{0x1028, 0x0012, pci_subsys_1000_0408_1028_0012, 0};
+#undef pci_ss_info_1028_0012
+#define pci_ss_info_1028_0012 pci_ss_info_1000_0408_1028_0012
+#ifdef VENDOR_INCLUDE_NONVIDEO
+#endif
+static const pciSubsystemInfo pci_ss_info_1000_0408_1028_0015 =
+	{0x1028, 0x0015, pci_subsys_1000_0408_1028_0015, 0};
+#undef pci_ss_info_1028_0015
+#define pci_ss_info_1028_0015 pci_ss_info_1000_0408_1028_0015
+#ifdef VENDOR_INCLUDE_NONVIDEO
+#endif
+static const pciSubsystemInfo pci_ss_info_1000_0408_1028_1f03 =
+	{0x1028, 0x1f03, pci_subsys_1000_0408_1028_1f03, 0};
+#undef pci_ss_info_1028_1f03
+#define pci_ss_info_1028_1f03 pci_ss_info_1000_0408_1028_1f03
+#ifdef VENDOR_INCLUDE_NONVIDEO
 static const pciSubsystemInfo pci_ss_info_1000_0408_1734_1065 =
 	{0x1734, 0x1065, pci_subsys_1000_0408_1734_1065, 0};
 #undef pci_ss_info_1734_1065
@@ -26443,6 +27006,10 @@ static const pciSubsystemInfo pci_ss_inf
 	{0x1000, 0x1004, pci_subsys_1000_0411_1000_1004, 0};
 #undef pci_ss_info_1000_1004
 #define pci_ss_info_1000_1004 pci_ss_info_1000_0411_1000_1004
+static const pciSubsystemInfo pci_ss_info_1000_0411_1000_1008 =
+	{0x1000, 0x1008, pci_subsys_1000_0411_1000_1008, 0};
+#undef pci_ss_info_1000_1008
+#define pci_ss_info_1000_1008 pci_ss_info_1000_0411_1000_1008
 static const pciSubsystemInfo pci_ss_info_1000_0411_1000_100c =
 	{0x1000, 0x100c, pci_subsys_1000_0411_1000_100c, 0};
 #undef pci_ss_info_1000_100c
@@ -26812,6 +27379,22 @@ static const pciSubsystemInfo pci_ss_inf
 	{0x103c, 0x308b, pci_subsys_1002_4378_103c_308b, 0};
 #undef pci_ss_info_103c_308b
 #define pci_ss_info_103c_308b pci_ss_info_1002_4378_103c_308b
+static const pciSubsystemInfo pci_ss_info_1002_437a_1002_4379 =
+	{0x1002, 0x4379, pci_subsys_1002_437a_1002_4379, 0};
+#undef pci_ss_info_1002_4379
+#define pci_ss_info_1002_4379 pci_ss_info_1002_437a_1002_4379
+static const pciSubsystemInfo pci_ss_info_1002_437a_1002_437a =
+	{0x1002, 0x437a, pci_subsys_1002_437a_1002_437a, 0};
+#undef pci_ss_info_1002_437a
+#define pci_ss_info_1002_437a pci_ss_info_1002_437a_1002_437a
+static const pciSubsystemInfo pci_ss_info_1002_437a_14f1_8800 =
+	{0x14f1, 0x8800, pci_subsys_1002_437a_14f1_8800, 0};
+#undef pci_ss_info_14f1_8800
+#define pci_ss_info_14f1_8800 pci_ss_info_1002_437a_14f1_8800
+static const pciSubsystemInfo pci_ss_info_1002_437b_1734_10b8 =
+	{0x1734, 0x10b8, pci_subsys_1002_437b_1734_10b8, 0};
+#undef pci_ss_info_1734_10b8
+#define pci_ss_info_1734_10b8 pci_ss_info_1002_437b_1734_10b8
 static const pciSubsystemInfo pci_ss_info_1002_4742_1002_0040 =
 	{0x1002, 0x0040, pci_subsys_1002_4742_1002_0040, 0};
 #undef pci_ss_info_1002_0040
@@ -26992,6 +27575,10 @@ static const pciSubsystemInfo pci_ss_inf
 	{0x8086, 0x3427, pci_subsys_1002_4752_8086_3427, 0};
 #undef pci_ss_info_8086_3427
 #define pci_ss_info_8086_3427 pci_ss_info_1002_4752_8086_3427
+static const pciSubsystemInfo pci_ss_info_1002_4752_8086_5744 =
+	{0x8086, 0x5744, pci_subsys_1002_4752_8086_5744, 0};
+#undef pci_ss_info_8086_5744
+#define pci_ss_info_8086_5744 pci_ss_info_1002_4752_8086_5744
 static const pciSubsystemInfo pci_ss_info_1002_4753_1002_4753 =
 	{0x1002, 0x4753, pci_subsys_1002_4753_1002_4753, 0};
 #undef pci_ss_info_1002_4753
@@ -27232,6 +27819,10 @@ static const pciSubsystemInfo pci_ss_inf
 	{0x103c, 0x0890, pci_subsys_1002_4e50_103c_0890, 0};
 #undef pci_ss_info_103c_0890
 #define pci_ss_info_103c_0890 pci_ss_info_1002_4e50_103c_0890
+static const pciSubsystemInfo pci_ss_info_1002_4e50_144d_c00c =
+	{0x144d, 0xc00c, pci_subsys_1002_4e50_144d_c00c, 0};
+#undef pci_ss_info_144d_c00c
+#define pci_ss_info_144d_c00c pci_ss_info_1002_4e50_144d_c00c
 static const pciSubsystemInfo pci_ss_info_1002_4e50_1462_0311 =
 	{0x1462, 0x0311, pci_subsys_1002_4e50_1462_0311, 0};
 #undef pci_ss_info_1462_0311
@@ -27240,6 +27831,10 @@ static const pciSubsystemInfo pci_ss_inf
 	{0x1734, 0x1055, pci_subsys_1002_4e50_1734_1055, 0};
 #undef pci_ss_info_1734_1055
 #define pci_ss_info_1734_1055 pci_ss_info_1002_4e50_1734_1055
+static const pciSubsystemInfo pci_ss_info_1002_4e52_144d_c00c =
+	{0x144d, 0xc00c, pci_subsys_1002_4e52_144d_c00c, 0};
+#undef pci_ss_info_144d_c00c
+#define pci_ss_info_144d_c00c pci_ss_info_1002_4e52_144d_c00c
 static const pciSubsystemInfo pci_ss_info_1002_4e65_1002_0003 =
 	{0x1002, 0x0003, pci_subsys_1002_4e65_1002_0003, 0};
 #undef pci_ss_info_1002_0003
@@ -27684,6 +28279,10 @@ static const pciSubsystemInfo pci_ss_inf
 	{0x18bc, 0x0053, pci_subsys_1002_5961_18bc_0053, 0};
 #undef pci_ss_info_18bc_0053
 #define pci_ss_info_18bc_0053 pci_ss_info_1002_5961_18bc_0053
+static const pciSubsystemInfo pci_ss_info_1002_5964_1002_5964 =
+	{0x1002, 0x5964, pci_subsys_1002_5964_1002_5964, 0};
+#undef pci_ss_info_1002_5964
+#define pci_ss_info_1002_5964 pci_ss_info_1002_5964_1002_5964
 static const pciSubsystemInfo pci_ss_info_1002_5964_1043_c006 =
 	{0x1043, 0xc006, pci_subsys_1002_5964_1043_c006, 0};
 #undef pci_ss_info_1043_c006
@@ -27756,6 +28355,10 @@ static const pciSubsystemInfo pci_ss_inf
 	{0x1002, 0x5c63, pci_subsys_1002_5c63_1002_5c63, 0};
 #undef pci_ss_info_1002_5c63
 #define pci_ss_info_1002_5c63 pci_ss_info_1002_5c63_1002_5c63
+static const pciSubsystemInfo pci_ss_info_1002_5c63_144d_c00c =
+	{0x144d, 0xc00c, pci_subsys_1002_5c63_144d_c00c, 0};
+#undef pci_ss_info_144d_c00c
+#define pci_ss_info_144d_c00c pci_ss_info_1002_5c63_144d_c00c
 static const pciSubsystemInfo pci_ss_info_1002_5d44_1458_4019 =
 	{0x1458, 0x4019, pci_subsys_1002_5d44_1458_4019, 0};
 #undef pci_ss_info_1458_4019
@@ -27836,6 +28439,14 @@ static const pciSubsystemInfo pci_ss_inf
 	{0x17aa, 0x2007, pci_subsys_1002_71c4_17aa_2007, 0};
 #undef pci_ss_info_17aa_2007
 #define pci_ss_info_17aa_2007 pci_ss_info_1002_71c4_17aa_2007
+static const pciSubsystemInfo pci_ss_info_1002_724b_1002_0b12 =
+	{0x1002, 0x0b12, pci_subsys_1002_724b_1002_0b12, 0};
+#undef pci_ss_info_1002_0b12
+#define pci_ss_info_1002_0b12 pci_ss_info_1002_724b_1002_0b12
+static const pciSubsystemInfo pci_ss_info_1002_724b_1002_0b13 =
+	{0x1002, 0x0b13, pci_subsys_1002_724b_1002_0b13, 0};
+#undef pci_ss_info_1002_0b13
+#define pci_ss_info_1002_0b13 pci_ss_info_1002_724b_1002_0b13
 #ifdef VENDOR_INCLUDE_NONVIDEO
 static const pciSubsystemInfo pci_ss_info_1004_0304_1004_0304 =
 	{0x1004, 0x0304, pci_subsys_1004_0304_1004_0304, 0};
@@ -28678,10 +29289,34 @@ static const pciSubsystemInfo pci_ss_inf
 	{0x1028, 0x0002, pci_subsys_1028_0002_1028_0002, 0};
 #undef pci_ss_info_1028_0002
 #define pci_ss_info_1028_0002 pci_ss_info_1028_0002_1028_0002
+static const pciSubsystemInfo pci_ss_info_1028_0002_1028_00d1 =
+	{0x1028, 0x00d1, pci_subsys_1028_0002_1028_00d1, 0};
+#undef pci_ss_info_1028_00d1
+#define pci_ss_info_1028_00d1 pci_ss_info_1028_0002_1028_00d1
+static const pciSubsystemInfo pci_ss_info_1028_0002_1028_00d9 =
+	{0x1028, 0x00d9, pci_subsys_1028_0002_1028_00d9, 0};
+#undef pci_ss_info_1028_00d9
+#define pci_ss_info_1028_00d9 pci_ss_info_1028_0002_1028_00d9
 static const pciSubsystemInfo pci_ss_info_1028_0003_1028_0003 =
 	{0x1028, 0x0003, pci_subsys_1028_0003_1028_0003, 0};
 #undef pci_ss_info_1028_0003
 #define pci_ss_info_1028_0003 pci_ss_info_1028_0003_1028_0003
+static const pciSubsystemInfo pci_ss_info_1028_0004_1028_0004 =
+	{0x1028, 0x0004, pci_subsys_1028_0004_1028_0004, 0};
+#undef pci_ss_info_1028_0004
+#define pci_ss_info_1028_0004 pci_ss_info_1028_0004_1028_0004
+static const pciSubsystemInfo pci_ss_info_1028_000a_1028_0106 =
+	{0x1028, 0x0106, pci_subsys_1028_000a_1028_0106, 0};
+#undef pci_ss_info_1028_0106
+#define pci_ss_info_1028_0106 pci_ss_info_1028_000a_1028_0106
+static const pciSubsystemInfo pci_ss_info_1028_000a_1028_011b =
+	{0x1028, 0x011b, pci_subsys_1028_000a_1028_011b, 0};
+#undef pci_ss_info_1028_011b
+#define pci_ss_info_1028_011b pci_ss_info_1028_000a_1028_011b
+static const pciSubsystemInfo pci_ss_info_1028_000a_1028_0121 =
+	{0x1028, 0x0121, pci_subsys_1028_000a_1028_0121, 0};
+#undef pci_ss_info_1028_0121
+#define pci_ss_info_1028_0121 pci_ss_info_1028_000a_1028_0121
 static const pciSubsystemInfo pci_ss_info_1028_0013_1028_016c =
 	{0x1028, 0x016c, pci_subsys_1028_0013_1028_016c, 0};
 #undef pci_ss_info_1028_016c
@@ -28702,6 +29337,14 @@ static const pciSubsystemInfo pci_ss_inf
 	{0x1028, 0x0170, pci_subsys_1028_0013_1028_0170, 0};
 #undef pci_ss_info_1028_0170
 #define pci_ss_info_1028_0170 pci_ss_info_1028_0013_1028_0170
+static const pciSubsystemInfo pci_ss_info_1028_0015_1028_1f01 =
+	{0x1028, 0x1f01, pci_subsys_1028_0015_1028_1f01, 0};
+#undef pci_ss_info_1028_1f01
+#define pci_ss_info_1028_1f01 pci_ss_info_1028_0015_1028_1f01
+static const pciSubsystemInfo pci_ss_info_1028_0015_1028_1f02 =
+	{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
 #ifdef VENDOR_INCLUDE_NONVIDEO
 static const pciSubsystemInfo pci_ss_info_102a_001f_9005_000f =
 	{0x9005, 0x000f, pci_subsys_102a_001f_9005_000f, 0};
@@ -29392,6 +30035,10 @@ static const pciSubsystemInfo pci_ss_inf
 	{0x1043, 0x8035, pci_subsys_1039_0900_1043_8035, 0};
 #undef pci_ss_info_1043_8035
 #define pci_ss_info_1043_8035 pci_ss_info_1039_0900_1043_8035
+static const pciSubsystemInfo pci_ss_info_1039_0900_1462_0900 =
+	{0x1462, 0x0900, pci_subsys_1039_0900_1462_0900, 0};
+#undef pci_ss_info_1462_0900
+#define pci_ss_info_1462_0900 pci_ss_info_1039_0900_1462_0900
 static const pciSubsystemInfo pci_ss_info_1039_5513_1019_0970 =
 	{0x1019, 0x0970, pci_subsys_1039_5513_1019_0970, 0};
 #undef pci_ss_info_1019_0970
@@ -29404,6 +30051,10 @@ static const pciSubsystemInfo pci_ss_inf
 	{0x1043, 0x8035, pci_subsys_1039_5513_1043_8035, 0};
 #undef pci_ss_info_1043_8035
 #define pci_ss_info_1043_8035 pci_ss_info_1039_5513_1043_8035
+static const pciSubsystemInfo pci_ss_info_1039_5513_1462_7010 =
+	{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_6300_1019_0970 =
 	{0x1019, 0x0970, pci_subsys_1039_6300_1019_0970, 0};
 #undef pci_ss_info_1019_0970
@@ -29456,10 +30107,26 @@ static const pciSubsystemInfo pci_ss_inf
 	{0x1462, 0x5470, pci_subsys_1039_7001_1462_5470, 0};
 #undef pci_ss_info_1462_5470
 #define pci_ss_info_1462_5470 pci_ss_info_1039_7001_1462_5470
+static const pciSubsystemInfo pci_ss_info_1039_7001_1462_7010 =
+	{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_7002_1462_7010 =
+	{0x1462, 0x7010, pci_subsys_1039_7002_1462_7010, 0};
+#undef pci_ss_info_1462_7010
+#define pci_ss_info_1462_7010 pci_ss_info_1039_7002_1462_7010
 static const pciSubsystemInfo pci_ss_info_1039_7002_1509_7002 =
 	{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_7007_1462_701d =
+	{0x1462, 0x701d, pci_subsys_1039_7007_1462_701d, 0};
+#undef pci_ss_info_1462_701d
+#define pci_ss_info_1462_701d pci_ss_info_1039_7007_1462_701d
+static const pciSubsystemInfo pci_ss_info_1039_7012_1462_7010 =
+	{0x1462, 0x7010, pci_subsys_1039_7012_1462_7010, 0};
+#undef pci_ss_info_1462_7010
+#define pci_ss_info_1462_7010 pci_ss_info_1039_7012_1462_7010
 static const pciSubsystemInfo pci_ss_info_1039_7012_15bd_1001 =
 	{0x15bd, 0x1001, pci_subsys_1039_7012_15bd_1001, 0};
 #undef pci_ss_info_15bd_1001
@@ -29950,6 +30617,10 @@ static const pciSubsystemInfo pci_ss_inf
 	{0x1043, 0x808b, pci_subsys_104c_8023_1043_808b, 0};
 #undef pci_ss_info_1043_808b
 #define pci_ss_info_1043_808b pci_ss_info_104c_8023_1043_808b
+static const pciSubsystemInfo pci_ss_info_104c_8023_1043_815b =
+	{0x1043, 0x815b, pci_subsys_104c_8023_1043_815b, 0};
+#undef pci_ss_info_1043_815b
+#define pci_ss_info_1043_815b pci_ss_info_104c_8023_1043_815b
 static const pciSubsystemInfo pci_ss_info_104c_8025_1458_1000 =
 	{0x1458, 0x1000, pci_subsys_104c_8025_1458_1000, 0};
 #undef pci_ss_info_1458_1000
@@ -30046,10 +30717,18 @@ static const pciSubsystemInfo pci_ss_inf
 	{0x103c, 0x309f, pci_subsys_104c_8039_103c_309f, 0};
 #undef pci_ss_info_103c_309f
 #define pci_ss_info_103c_309f pci_ss_info_104c_8039_103c_309f
+static const pciSubsystemInfo pci_ss_info_104c_8039_103c_30a1 =
+	{0x103c, 0x30a1, pci_subsys_104c_8039_103c_30a1, 0};
+#undef pci_ss_info_103c_30a1
+#define pci_ss_info_103c_30a1 pci_ss_info_104c_8039_103c_30a1
 static const pciSubsystemInfo pci_ss_info_104c_803a_103c_309f =
 	{0x103c, 0x309f, pci_subsys_104c_803a_103c_309f, 0};
 #undef pci_ss_info_103c_309f
 #define pci_ss_info_103c_309f pci_ss_info_104c_803a_103c_309f
+static const pciSubsystemInfo pci_ss_info_104c_803a_103c_30a1 =
+	{0x103c, 0x30a1, pci_subsys_104c_803a_103c_30a1, 0};
+#undef pci_ss_info_103c_30a1
+#define pci_ss_info_103c_30a1 pci_ss_info_104c_803a_103c_30a1
 static const pciSubsystemInfo pci_ss_info_104c_803b_103c_309f =
 	{0x103c, 0x309f, pci_subsys_104c_803b_103c_309f, 0};
 #undef pci_ss_info_103c_309f
@@ -30062,6 +30741,10 @@ static const pciSubsystemInfo pci_ss_inf
 	{0x103c, 0x309f, pci_subsys_104c_803d_103c_309f, 0};
 #undef pci_ss_info_103c_309f
 #define pci_ss_info_103c_309f pci_ss_info_104c_803d_103c_309f
+static const pciSubsystemInfo pci_ss_info_104c_803d_103c_30a1 =
+	{0x103c, 0x30a1, pci_subsys_104c_803d_103c_30a1, 0};
+#undef pci_ss_info_103c_30a1
+#define pci_ss_info_103c_30a1 pci_ss_info_104c_803d_103c_30a1
 static const pciSubsystemInfo pci_ss_info_104c_8204_1028_0139 =
 	{0x1028, 0x0139, pci_subsys_104c_8204_1028_0139, 0};
 #undef pci_ss_info_1028_0139
@@ -30138,6 +30821,10 @@ static const pciSubsystemInfo pci_ss_inf
 	{0x1028, 0x00e6, pci_subsys_104c_ac42_1028_00e6, 0};
 #undef pci_ss_info_1028_00e6
 #define pci_ss_info_1028_00e6 pci_ss_info_104c_ac42_1028_00e6
+static const pciSubsystemInfo pci_ss_info_104c_ac44_1028_0149 =
+	{0x1028, 0x0149, pci_subsys_104c_ac44_1028_0149, 0};
+#undef pci_ss_info_1028_0149
+#define pci_ss_info_1028_0149 pci_ss_info_104c_ac44_1028_0149
 static const pciSubsystemInfo pci_ss_info_104c_ac44_1028_0163 =
 	{0x1028, 0x0163, pci_subsys_104c_ac44_1028_0163, 0};
 #undef pci_ss_info_1028_0163
@@ -30242,6 +30929,10 @@ static const pciSubsystemInfo pci_ss_inf
 	{0x175c, 0x8800, pci_subsys_104c_ac60_175c_8800, 0};
 #undef pci_ss_info_175c_8800
 #define pci_ss_info_175c_8800 pci_ss_info_104c_ac60_175c_8800
+static const pciSubsystemInfo pci_ss_info_104c_ac8f_1028_018d =
+	{0x1028, 0x018d, pci_subsys_104c_ac8f_1028_018d, 0};
+#undef pci_ss_info_1028_018d
+#define pci_ss_info_1028_018d pci_ss_info_104c_ac8f_1028_018d
 #ifdef VENDOR_INCLUDE_NONVIDEO
 static const pciSubsystemInfo pci_ss_info_1050_0840_1050_0001 =
 	{0x1050, 0x0001, pci_subsys_1050_0840_1050_0001, 0};
@@ -30489,6 +31180,10 @@ static const pciSubsystemInfo pci_ss_inf
 #undef pci_ss_info_1668_0302
 #define pci_ss_info_1668_0302 pci_ss_info_1057_5600_1668_0302
 #ifdef VENDOR_INCLUDE_NONVIDEO
+static const pciSubsystemInfo pci_ss_info_105a_0d30_1043_8042 =
+	{0x1043, 0x8042, pci_subsys_105a_0d30_1043_8042, 0};
+#undef pci_ss_info_1043_8042
+#define pci_ss_info_1043_8042 pci_ss_info_105a_0d30_1043_8042
 static const pciSubsystemInfo pci_ss_info_105a_0d30_105a_4d33 =
 	{0x105a, 0x4d33, pci_subsys_105a_0d30_105a_4d33, 0};
 #undef pci_ss_info_105a_4d33
@@ -30523,6 +31218,12 @@ static const pciSubsystemInfo pci_ss_inf
 	{0x105a, 0x4d39, pci_subsys_105a_4d30_105a_4d39, 0};
 #undef pci_ss_info_105a_4d39
 #define pci_ss_info_105a_4d39 pci_ss_info_105a_4d30_105a_4d39
+#endif
+static const pciSubsystemInfo pci_ss_info_105a_4d30_8086_5744 =
+	{0x8086, 0x5744, pci_subsys_105a_4d30_8086_5744, 0};
+#undef pci_ss_info_8086_5744
+#define pci_ss_info_8086_5744 pci_ss_info_105a_4d30_8086_5744
+#ifdef VENDOR_INCLUDE_NONVIDEO
 static const pciSubsystemInfo pci_ss_info_105a_4d33_105a_4d33 =
 	{0x105a, 0x4d33, pci_subsys_105a_4d33_105a_4d33, 0};
 #undef pci_ss_info_105a_4d33
@@ -30571,6 +31272,18 @@ static const pciSubsystemInfo pci_ss_inf
 	{0x105a, 0x6269, pci_subsys_105a_6269_105a_6269, 0};
 #undef pci_ss_info_105a_6269
 #define pci_ss_info_105a_6269 pci_ss_info_105a_6269_105a_6269
+static const pciSubsystemInfo pci_ss_info_105a_8650_105a_4600 =
+	{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_8601 =
+	{0x105a, 0x8601, pci_subsys_105a_8650_105a_8601, 0};
+#undef pci_ss_info_105a_8601
+#define pci_ss_info_105a_8601 pci_ss_info_105a_8650_105a_8601
+static const pciSubsystemInfo pci_ss_info_105a_8650_105a_8602 =
+	{0x105a, 0x8602, pci_subsys_105a_8650_105a_8602, 0};
+#undef pci_ss_info_105a_8602
+#define pci_ss_info_105a_8602 pci_ss_info_105a_8650_105a_8602
 #endif
 static const pciSubsystemInfo pci_ss_info_105d_2339_105d_0000 =
 	{0x105d, 0x0000, pci_subsys_105d_2339_105d_0000, 0};
@@ -31244,6 +31957,10 @@ static const pciSubsystemInfo pci_ss_inf
 	{0x1461, 0x0002, pci_subsys_109e_0878_1461_0002, 0};
 #undef pci_ss_info_1461_0002
 #define pci_ss_info_1461_0002 pci_ss_info_109e_0878_1461_0002
+static const pciSubsystemInfo pci_ss_info_109e_0878_1461_0003 =
+	{0x1461, 0x0003, pci_subsys_109e_0878_1461_0003, 0};
+#undef pci_ss_info_1461_0003
+#define pci_ss_info_1461_0003 pci_ss_info_109e_0878_1461_0003
 static const pciSubsystemInfo pci_ss_info_109e_0878_1461_0004 =
 	{0x1461, 0x0004, pci_subsys_109e_0878_1461_0004, 0};
 #undef pci_ss_info_1461_0004
@@ -31445,6 +32162,10 @@ static const pciSubsystemInfo pci_ss_inf
 	{0x10b5, 0x3068, pci_subsys_10b5_9030_10b5_3068, 0};
 #undef pci_ss_info_10b5_3068
 #define pci_ss_info_10b5_3068 pci_ss_info_10b5_9030_10b5_3068
+static const pciSubsystemInfo pci_ss_info_10b5_9030_12fe_0111 =
+	{0x12fe, 0x0111, pci_subsys_10b5_9030_12fe_0111, 0};
+#undef pci_ss_info_12fe_0111
+#define pci_ss_info_12fe_0111 pci_ss_info_10b5_9030_12fe_0111
 static const pciSubsystemInfo pci_ss_info_10b5_9030_1397_3136 =
 	{0x1397, 0x3136, pci_subsys_10b5_9030_1397_3136, 0};
 #undef pci_ss_info_1397_3136
@@ -31649,6 +32370,10 @@ static const pciSubsystemInfo pci_ss_inf
 	{0x12d9, 0x0002, pci_subsys_10b5_9054_12d9_0002, 0};
 #undef pci_ss_info_12d9_0002
 #define pci_ss_info_12d9_0002 pci_ss_info_10b5_9054_12d9_0002
+static const pciSubsystemInfo pci_ss_info_10b5_9054_14b4_d100 =
+	{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_16df_0011 =
 	{0x16df, 0x0011, pci_subsys_10b5_9054_16df_0011, 0};
 #undef pci_ss_info_16df_0011
@@ -41672,6 +42397,10 @@ static const pciSubsystemInfo pci_ss_inf
 	{0x8086, 0x0008, pci_subsys_8086_1229_8086_0008, 0};
 #undef pci_ss_info_8086_0008
 #define pci_ss_info_8086_0008 pci_ss_info_8086_1229_8086_0008
+static const pciSubsystemInfo pci_ss_info_8086_1229_8086_0009 =
+	{0x8086, 0x0009, pci_subsys_8086_1229_8086_0009, 0};
+#undef pci_ss_info_8086_0009
+#define pci_ss_info_8086_0009 pci_ss_info_8086_1229_8086_0009
 static const pciSubsystemInfo pci_ss_info_8086_1229_8086_000a =
 	{0x8086, 0x000a, pci_subsys_8086_1229_8086_000a, 0};
 #undef pci_ss_info_8086_000a
@@ -41972,6 +42701,10 @@ static const pciSubsystemInfo pci_ss_inf
 	{0x8086, 0x3012, pci_subsys_8086_1229_8086_3012, 0};
 #undef pci_ss_info_8086_3012
 #define pci_ss_info_8086_3012 pci_ss_info_8086_1229_8086_3012
+static const pciSubsystemInfo pci_ss_info_8086_1229_8086_301a =
+	{0x8086, 0x301a, pci_subsys_8086_1229_8086_301a, 0};
+#undef pci_ss_info_8086_301a
+#define pci_ss_info_8086_301a pci_ss_info_8086_1229_8086_301a
 static const pciSubsystemInfo pci_ss_info_8086_1229_8086_3411 =
 	{0x8086, 0x3411, pci_subsys_8086_1229_8086_3411, 0};
 #undef pci_ss_info_8086_3411
@@ -42136,6 +42869,10 @@ static const pciSubsystemInfo pci_ss_inf
 	{0x11d4, 0x0048, pci_subsys_8086_2425_11d4_0048, 0};
 #undef pci_ss_info_11d4_0048
 #define pci_ss_info_11d4_0048 pci_ss_info_8086_2425_11d4_0048
+static const pciSubsystemInfo pci_ss_info_8086_2440_8086_5744 =
+	{0x8086, 0x5744, pci_subsys_8086_2440_8086_5744, 0};
+#undef pci_ss_info_8086_5744
+#define pci_ss_info_8086_5744 pci_ss_info_8086_2440_8086_5744
 static const pciSubsystemInfo pci_ss_info_8086_2442_1014_01c6 =
 	{0x1014, 0x01c6, pci_subsys_8086_2442_1014_01c6, 0};
 #undef pci_ss_info_1014_01c6
@@ -42172,6 +42909,10 @@ static const pciSubsystemInfo pci_ss_inf
 	{0x8086, 0x4557, pci_subsys_8086_2442_8086_4557, 0};
 #undef pci_ss_info_8086_4557
 #define pci_ss_info_8086_4557 pci_ss_info_8086_2442_8086_4557
+static const pciSubsystemInfo pci_ss_info_8086_2442_8086_5744 =
+	{0x8086, 0x5744, pci_subsys_8086_2442_8086_5744, 0};
+#undef pci_ss_info_8086_5744
+#define pci_ss_info_8086_5744 pci_ss_info_8086_2442_8086_5744
 static const pciSubsystemInfo pci_ss_info_8086_2443_1014_01c6 =
 	{0x1014, 0x01c6, pci_subsys_8086_2443_1014_01c6, 0};
 #undef pci_ss_info_1014_01c6
@@ -42208,6 +42949,10 @@ static const pciSubsystemInfo pci_ss_inf
 	{0x8086, 0x4557, pci_subsys_8086_2443_8086_4557, 0};
 #undef pci_ss_info_8086_4557
 #define pci_ss_info_8086_4557 pci_ss_info_8086_2443_8086_4557
+static const pciSubsystemInfo pci_ss_info_8086_2443_8086_5744 =
+	{0x8086, 0x5744, pci_subsys_8086_2443_8086_5744, 0};
+#undef pci_ss_info_8086_5744
+#define pci_ss_info_8086_5744 pci_ss_info_8086_2443_8086_5744
 static const pciSubsystemInfo pci_ss_info_8086_2444_1025_1016 =
 	{0x1025, 0x1016, pci_subsys_8086_2444_1025_1016, 0};
 #undef pci_ss_info_1025_1016
@@ -42236,6 +42981,10 @@ static const pciSubsystemInfo pci_ss_inf
 	{0x8086, 0x4532, pci_subsys_8086_2444_8086_4532, 0};
 #undef pci_ss_info_8086_4532
 #define pci_ss_info_8086_4532 pci_ss_info_8086_2444_8086_4532
+static const pciSubsystemInfo pci_ss_info_8086_2444_8086_5744 =
+	{0x8086, 0x5744, pci_subsys_8086_2444_8086_5744, 0};
+#undef pci_ss_info_8086_5744
+#define pci_ss_info_8086_5744 pci_ss_info_8086_2444_8086_5744
 static const pciSubsystemInfo pci_ss_info_8086_2445_0e11_000b =
 	{0x0e11, 0x000b, pci_subsys_8086_2445_0e11_000b, 0};
 #undef pci_ss_info_0e11_000b
@@ -42444,6 +43193,10 @@ static const pciSubsystemInfo pci_ss_inf
 	{0x8086, 0x4557, pci_subsys_8086_244b_8086_4557, 0};
 #undef pci_ss_info_8086_4557
 #define pci_ss_info_8086_4557 pci_ss_info_8086_244b_8086_4557
+static const pciSubsystemInfo pci_ss_info_8086_244b_8086_5744 =
+	{0x8086, 0x5744, pci_subsys_8086_244b_8086_5744, 0};
+#undef pci_ss_info_8086_5744
+#define pci_ss_info_8086_5744 pci_ss_info_8086_244b_8086_5744
 static const pciSubsystemInfo pci_ss_info_8086_244e_1014_0267 =
 	{0x1014, 0x0267, pci_subsys_8086_244e_1014_0267, 0};
 #undef pci_ss_info_1014_0267
@@ -42720,6 +43473,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_c00c =
+	{0x144d, 0xc00c, pci_subsys_8086_24c3_144d_c00c, 0};
+#undef pci_ss_info_144d_c00c
+#define pci_ss_info_144d_c00c pci_ss_info_8086_24c3_144d_c00c
 static const pciSubsystemInfo pci_ss_info_8086_24c3_1458_24c2 =
 	{0x1458, 0x24c2, pci_subsys_8086_24c3_1458_24c2, 0};
 #undef pci_ss_info_1458_24c2
@@ -44228,14 +44985,26 @@ 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_27a0_103c_30a1 =
+	{0x103c, 0x30a1, pci_subsys_8086_27a0_103c_30a1, 0};
+#undef pci_ss_info_103c_30a1
+#define pci_ss_info_103c_30a1 pci_ss_info_8086_27a0_103c_30a1
 static const pciSubsystemInfo pci_ss_info_8086_27a0_17aa_2017 =
 	{0x17aa, 0x2017, pci_subsys_8086_27a0_17aa_2017, 0};
 #undef pci_ss_info_17aa_2017
 #define pci_ss_info_17aa_2017 pci_ss_info_8086_27a0_17aa_2017
+static const pciSubsystemInfo pci_ss_info_8086_27a2_103c_30a1 =
+	{0x103c, 0x30a1, pci_subsys_8086_27a2_103c_30a1, 0};
+#undef pci_ss_info_103c_30a1
+#define pci_ss_info_103c_30a1 pci_ss_info_8086_27a2_103c_30a1
 static const pciSubsystemInfo pci_ss_info_8086_27a2_17aa_201a =
 	{0x17aa, 0x201a, pci_subsys_8086_27a2_17aa_201a, 0};
 #undef pci_ss_info_17aa_201a
 #define pci_ss_info_17aa_201a pci_ss_info_8086_27a2_17aa_201a
+static const pciSubsystemInfo pci_ss_info_8086_27a6_103c_30a1 =
+	{0x103c, 0x30a1, pci_subsys_8086_27a6_103c_30a1, 0};
+#undef pci_ss_info_103c_30a1
+#define pci_ss_info_103c_30a1 pci_ss_info_8086_27a6_103c_30a1
 static const pciSubsystemInfo pci_ss_info_8086_27a6_17aa_201a =
 	{0x17aa, 0x201a, pci_subsys_8086_27a6_17aa_201a, 0};
 #undef pci_ss_info_17aa_201a
@@ -44248,6 +45017,10 @@ static const pciSubsystemInfo pci_ss_inf
 	{0x8086, 0x544e, pci_subsys_8086_27b8_8086_544e, 0};
 #undef pci_ss_info_8086_544e
 #define pci_ss_info_8086_544e pci_ss_info_8086_27b8_8086_544e
+static const pciSubsystemInfo pci_ss_info_8086_27b9_103c_30a1 =
+	{0x103c, 0x30a1, pci_subsys_8086_27b9_103c_30a1, 0};
+#undef pci_ss_info_103c_30a1
+#define pci_ss_info_103c_30a1 pci_ss_info_8086_27b9_103c_30a1
 static const pciSubsystemInfo pci_ss_info_8086_27b9_10f7_8338 =
 	{0x10f7, 0x8338, pci_subsys_8086_27b9_10f7_8338, 0};
 #undef pci_ss_info_10f7_8338
@@ -44268,6 +45041,10 @@ static const pciSubsystemInfo pci_ss_inf
 	{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_103c_30a1 =
+	{0x103c, 0x30a1, pci_subsys_8086_27c8_103c_30a1, 0};
+#undef pci_ss_info_103c_30a1
+#define pci_ss_info_103c_30a1 pci_ss_info_8086_27c8_103c_30a1
 static const pciSubsystemInfo pci_ss_info_8086_27c8_107b_5048 =
 	{0x107b, 0x5048, pci_subsys_8086_27c8_107b_5048, 0};
 #undef pci_ss_info_107b_5048
@@ -44280,6 +45057,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_103c_30a1 =
+	{0x103c, 0x30a1, pci_subsys_8086_27c9_103c_30a1, 0};
+#undef pci_ss_info_103c_30a1
+#define pci_ss_info_103c_30a1 pci_ss_info_8086_27c9_103c_30a1
 static const pciSubsystemInfo pci_ss_info_8086_27c9_107b_5048 =
 	{0x107b, 0x5048, pci_subsys_8086_27c9_107b_5048, 0};
 #undef pci_ss_info_107b_5048
@@ -44292,6 +45073,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_103c_30a1 =
+	{0x103c, 0x30a1, pci_subsys_8086_27ca_103c_30a1, 0};
+#undef pci_ss_info_103c_30a1
+#define pci_ss_info_103c_30a1 pci_ss_info_8086_27ca_103c_30a1
 static const pciSubsystemInfo pci_ss_info_8086_27ca_107b_5048 =
 	{0x107b, 0x5048, pci_subsys_8086_27ca_107b_5048, 0};
 #undef pci_ss_info_107b_5048
@@ -44304,6 +45089,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_103c_30a1 =
+	{0x103c, 0x30a1, pci_subsys_8086_27cb_103c_30a1, 0};
+#undef pci_ss_info_103c_30a1
+#define pci_ss_info_103c_30a1 pci_ss_info_8086_27cb_103c_30a1
 static const pciSubsystemInfo pci_ss_info_8086_27cb_107b_5048 =
 	{0x107b, 0x5048, pci_subsys_8086_27cb_107b_5048, 0};
 #undef pci_ss_info_107b_5048
@@ -44316,6 +45105,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_103c_30a1 =
+	{0x103c, 0x30a1, pci_subsys_8086_27cc_103c_30a1, 0};
+#undef pci_ss_info_103c_30a1
+#define pci_ss_info_103c_30a1 pci_ss_info_8086_27cc_103c_30a1
 static const pciSubsystemInfo pci_ss_info_8086_27cc_17aa_200b =
 	{0x17aa, 0x200b, pci_subsys_8086_27cc_17aa_200b, 0};
 #undef pci_ss_info_17aa_200b
@@ -44324,6 +45117,10 @@ 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_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_107b_5048 =
 	{0x107b, 0x5048, pci_subsys_8086_27d8_107b_5048, 0};
 #undef pci_ss_info_107b_5048
@@ -44340,6 +45137,10 @@ static const pciSubsystemInfo pci_ss_inf
 	{0x152d, 0x0753, pci_subsys_8086_27d8_152d_0753, 0};
 #undef pci_ss_info_152d_0753
 #define pci_ss_info_152d_0753 pci_ss_info_8086_27d8_152d_0753
+static const pciSubsystemInfo pci_ss_info_8086_27d8_1734_10ad =
+	{0x1734, 0x10ad, pci_subsys_8086_27d8_1734_10ad, 0};
+#undef pci_ss_info_1734_10ad
+#define pci_ss_info_1734_10ad pci_ss_info_8086_27d8_1734_10ad
 static const pciSubsystemInfo pci_ss_info_8086_27d8_17aa_2010 =
 	{0x17aa, 0x2010, pci_subsys_8086_27d8_17aa_2010, 0};
 #undef pci_ss_info_17aa_2010
@@ -44360,6 +45161,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_27df_103c_30a1 =
+	{0x103c, 0x30a1, pci_subsys_8086_27df_103c_30a1, 0};
+#undef pci_ss_info_103c_30a1
+#define pci_ss_info_103c_30a1 pci_ss_info_8086_27df_103c_30a1
 static const pciSubsystemInfo pci_ss_info_8086_27df_107b_5048 =
 	{0x107b, 0x5048, pci_subsys_8086_27df_107b_5048, 0};
 #undef pci_ss_info_107b_5048
@@ -44616,6 +45421,14 @@ static const pciSubsystemInfo pci_ss_inf
 	{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_8086_2731 =
+	{0x8086, 0x2731, pci_subsys_8086_4220_8086_2731, 0};
+#undef pci_ss_info_8086_2731
+#define pci_ss_info_8086_2731 pci_ss_info_8086_4220_8086_2731
 static const pciSubsystemInfo pci_ss_info_8086_4222_8086_1005 =
 	{0x8086, 0x1005, pci_subsys_8086_4222_8086_1005, 0};
 #undef pci_ss_info_8086_1005
@@ -45426,6 +46239,22 @@ static const pciSubsystemInfo pci_ss_inf
 #define pci_ss_info_8086_0003 pci_ss_info_e159_0001_8086_0003
 #ifdef VENDOR_INCLUDE_NONVIDEO
 #endif
+#define pci_ss_list_001c_0001 NULL
+#define pci_ss_list_0070_0003 NULL
+#define pci_ss_list_0070_0009 NULL
+#define pci_ss_list_0070_0801 NULL
+#define pci_ss_list_0070_0807 NULL
+#define pci_ss_list_0070_4000 NULL
+#define pci_ss_list_0070_4001 NULL
+#define pci_ss_list_0070_4009 NULL
+#define pci_ss_list_0070_4800 NULL
+#define pci_ss_list_0070_4801 NULL
+#define pci_ss_list_0070_4803 NULL
+#define pci_ss_list_0070_8003 NULL
+#define pci_ss_list_0070_8801 NULL
+#define pci_ss_list_0070_c801 NULL
+#define pci_ss_list_0070_e807 NULL
+#define pci_ss_list_0070_e817 NULL
 #define pci_ss_list_0095_0680 NULL
 #define pci_ss_list_018a_0106 NULL
 #define pci_ss_list_021b_8139 NULL
@@ -45439,6 +46268,7 @@ static const pciSubsystemInfo pci_ss_inf
 #define pci_ss_list_050d_001a NULL
 #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_05a9_8519 NULL
 #define pci_ss_list_05e3_0701 NULL
 #define pci_ss_list_066f_3410 NULL
@@ -45449,15 +46279,29 @@ static const pciSubsystemInfo pci_ss_inf
 #define pci_ss_list_0675_1704 NULL
 #define pci_ss_list_067b_2303 NULL
 #define pci_ss_list_067b_3507 NULL
+#define pci_ss_list_07ca_b808 NULL
+#define pci_ss_list_08ff_afe4 NULL
+#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_2603 NULL
+#define pci_ss_list_093a_2608 NULL
 #define pci_ss_list_09c1_0704 NULL
+#define pci_ss_list_0ace_1211 NULL
 #define pci_ss_list_0b0b_0105 NULL
 #define pci_ss_list_0b0b_0205 NULL
+#define pci_ss_list_0b0b_0206 NULL
 #define pci_ss_list_0b0b_0305 NULL
 #define pci_ss_list_0b0b_0405 NULL
+#define pci_ss_list_0b0b_0406 NULL
 #define pci_ss_list_0b0b_0505 NULL
 #define pci_ss_list_0b0b_0506 NULL
 #define pci_ss_list_0b0b_0605 NULL
 #define pci_ss_list_0b0b_0705 NULL
+#define pci_ss_list_0b0b_0706 NULL
+#define pci_ss_list_0b0b_0905 NULL
+#define pci_ss_list_0b0b_0906 NULL
+#define pci_ss_list_0b0b_0a06 NULL
 #define pci_ss_list_0b49_064f NULL
 #define pci_ss_list_0ccd_0038 NULL
 #define pci_ss_list_0e11_0001 NULL
@@ -45682,16 +46526,35 @@ 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_0055[] = {
+	&pci_ss_info_1000_0055_1033_8336,
+	NULL
+};
 #define pci_ss_list_1000_0056 NULL
 #define pci_ss_list_1000_0058 NULL
 #define pci_ss_list_1000_005a NULL
 #define pci_ss_list_1000_005c NULL
 #define pci_ss_list_1000_005e NULL
 static const pciSubsystemInfo *pci_ss_list_1000_0060[] = {
+	&pci_ss_info_1000_0060_1000_1006,
+	&pci_ss_info_1000_0060_1000_100a,
+	&pci_ss_info_1000_0060_1000_100e,
+	&pci_ss_info_1000_0060_1000_100f,
+	&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_1014_0363,
+	&pci_ss_info_1000_0060_1014_0364,
+	&pci_ss_info_1000_0060_1014_0365,
 	&pci_ss_info_1000_0060_1028_1f0a,
 	&pci_ss_info_1000_0060_1028_1f0b,
 	&pci_ss_info_1000_0060_1028_1f0c,
 	&pci_ss_info_1000_0060_1028_1f0d,
+	&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_34cc,
+	&pci_ss_info_1000_0060_8086_34cd,
 	NULL
 };
 static const pciSubsystemInfo *pci_ss_list_1000_0062[] = {
@@ -45719,6 +46582,9 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_1000_0408_1025_004d,
 	&pci_ss_info_1000_0408_1028_0001,
 	&pci_ss_info_1000_0408_1028_0002,
+	&pci_ss_info_1000_0408_1028_0012,
+	&pci_ss_info_1000_0408_1028_0015,
+	&pci_ss_info_1000_0408_1028_1f03,
 	&pci_ss_info_1000_0408_1734_1065,
 	&pci_ss_info_1000_0408_8086_0002,
 	NULL
@@ -45736,6 +46602,7 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_1000_0411_1000_1002,
 	&pci_ss_info_1000_0411_1000_1003,
 	&pci_ss_info_1000_0411_1000_1004,
+	&pci_ss_info_1000_0411_1000_1008,
 	&pci_ss_info_1000_0411_1000_100c,
 	&pci_ss_info_1000_0411_1000_100d,
 	&pci_ss_info_1000_0411_1000_2004,
@@ -45965,8 +46832,16 @@ static const pciSubsystemInfo *pci_ss_li
 	NULL
 };
 #define pci_ss_list_1002_4379 NULL
-#define pci_ss_list_1002_437a NULL
-#define pci_ss_list_1002_437b NULL
+static const pciSubsystemInfo *pci_ss_list_1002_437a[] = {
+	&pci_ss_info_1002_437a_1002_4379,
+	&pci_ss_info_1002_437a_1002_437a,
+	&pci_ss_info_1002_437a_14f1_8800,
+	NULL
+};
+static const pciSubsystemInfo *pci_ss_list_1002_437b[] = {
+	&pci_ss_info_1002_437b_1734_10b8,
+	NULL
+};
 #define pci_ss_list_1002_4380 NULL
 #define pci_ss_list_1002_4381 NULL
 #define pci_ss_list_1002_4382 NULL
@@ -46055,6 +46930,7 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_1002_4752_1734_007a,
 	&pci_ss_info_1002_4752_8086_3411,
 	&pci_ss_info_1002_4752_8086_3427,
+	&pci_ss_info_1002_4752_8086_5744,
 	NULL
 };
 static const pciSubsystemInfo *pci_ss_list_1002_4753[] = {
@@ -46213,12 +47089,16 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_1002_4e50_1025_005a,
 	&pci_ss_info_1002_4e50_103c_088c,
 	&pci_ss_info_1002_4e50_103c_0890,
+	&pci_ss_info_1002_4e50_144d_c00c,
 	&pci_ss_info_1002_4e50_1462_0311,
 	&pci_ss_info_1002_4e50_1734_1055,
 	NULL
 };
 #define pci_ss_list_1002_4e51 NULL
-#define pci_ss_list_1002_4e52 NULL
+static const pciSubsystemInfo *pci_ss_list_1002_4e52[] = {
+	&pci_ss_info_1002_4e52_144d_c00c,
+	NULL
+};
 #define pci_ss_list_1002_4e53 NULL
 #define pci_ss_list_1002_4e54 NULL
 #define pci_ss_list_1002_4e56 NULL
@@ -46482,6 +47362,7 @@ static const pciSubsystemInfo *pci_ss_li
 	NULL
 };
 #define pci_ss_list_1002_5951 NULL
+#define pci_ss_list_1002_5952 NULL
 static const pciSubsystemInfo *pci_ss_list_1002_5954[] = {
 	&pci_ss_info_1002_5954_1002_5954,
 	NULL
@@ -46506,6 +47387,7 @@ static const pciSubsystemInfo *pci_ss_li
 };
 #define pci_ss_list_1002_5962 NULL
 static const pciSubsystemInfo *pci_ss_list_1002_5964[] = {
+	&pci_ss_info_1002_5964_1002_5964,
 	&pci_ss_info_1002_5964_1043_c006,
 	&pci_ss_info_1002_5964_1458_4018,
 	&pci_ss_info_1002_5964_1458_4032,
@@ -46524,6 +47406,7 @@ static const pciSubsystemInfo *pci_ss_li
 #define pci_ss_list_1002_5a33 NULL
 #define pci_ss_list_1002_5a34 NULL
 #define pci_ss_list_1002_5a36 NULL
+#define pci_ss_list_1002_5a37 NULL
 #define pci_ss_list_1002_5a38 NULL
 #define pci_ss_list_1002_5a39 NULL
 #define pci_ss_list_1002_5a3f NULL
@@ -46554,6 +47437,7 @@ static const pciSubsystemInfo *pci_ss_li
 #define pci_ss_list_1002_5c61 NULL
 static const pciSubsystemInfo *pci_ss_list_1002_5c63[] = {
 	&pci_ss_info_1002_5c63_1002_5c63,
+	&pci_ss_info_1002_5c63_144d_c00c,
 	NULL
 };
 static const pciSubsystemInfo *pci_ss_list_1002_5d44[] = {
@@ -46626,11 +47510,13 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_1002_7142_1002_0322,
 	NULL
 };
+#define pci_ss_list_1002_7143 NULL
 #define pci_ss_list_1002_7145 NULL
 static const pciSubsystemInfo *pci_ss_list_1002_7146[] = {
 	&pci_ss_info_1002_7146_1002_0322,
 	NULL
 };
+#define pci_ss_list_1002_7147 NULL
 #define pci_ss_list_1002_7149 NULL
 #define pci_ss_list_1002_714a NULL
 #define pci_ss_list_1002_714b NULL
@@ -46638,7 +47524,9 @@ static const pciSubsystemInfo *pci_ss_li
 #define pci_ss_list_1002_714d NULL
 #define pci_ss_list_1002_714e NULL
 #define pci_ss_list_1002_7152 NULL
+#define pci_ss_list_1002_7153 NULL
 #define pci_ss_list_1002_715e NULL
+#define pci_ss_list_1002_715f NULL
 static const pciSubsystemInfo *pci_ss_list_1002_7162[] = {
 	&pci_ss_info_1002_7162_1002_0323,
 	NULL
@@ -46648,10 +47536,23 @@ static const pciSubsystemInfo *pci_ss_li
 	NULL
 };
 #define pci_ss_list_1002_7172 NULL
+#define pci_ss_list_1002_7173 NULL
 #define pci_ss_list_1002_7180 NULL
 #define pci_ss_list_1002_7181 NULL
+#define pci_ss_list_1002_7183 NULL
+#define pci_ss_list_1002_7187 NULL
+#define pci_ss_list_1002_7188 NULL
+#define pci_ss_list_1002_718a NULL
+#define pci_ss_list_1002_718c NULL
+#define pci_ss_list_1002_718d NULL
+#define pci_ss_list_1002_7193 NULL
+#define pci_ss_list_1002_719b NULL
+#define pci_ss_list_1002_719f NULL
 #define pci_ss_list_1002_71a0 NULL
 #define pci_ss_list_1002_71a1 NULL
+#define pci_ss_list_1002_71a3 NULL
+#define pci_ss_list_1002_71a7 NULL
+#define pci_ss_list_1002_71bb NULL
 #define pci_ss_list_1002_71c0 NULL
 #define pci_ss_list_1002_71c2 NULL
 static const pciSubsystemInfo *pci_ss_list_1002_71c4[] = {
@@ -46660,12 +47561,16 @@ static const pciSubsystemInfo *pci_ss_li
 };
 #define pci_ss_list_1002_71c5 NULL
 #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_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_71e7 NULL
+#define pci_ss_list_1002_7210 NULL
+#define pci_ss_list_1002_7211 NULL
 #define pci_ss_list_1002_7240 NULL
 #define pci_ss_list_1002_7241 NULL
 #define pci_ss_list_1002_7242 NULL
@@ -46677,16 +47582,32 @@ static const pciSubsystemInfo *pci_ss_li
 #define pci_ss_list_1002_7248 NULL
 #define pci_ss_list_1002_7249 NULL
 #define pci_ss_list_1002_724a NULL
-#define pci_ss_list_1002_724b NULL
+static const pciSubsystemInfo *pci_ss_list_1002_724b[] = {
+	&pci_ss_info_1002_724b_1002_0b12,
+	&pci_ss_info_1002_724b_1002_0b13,
+	NULL
+};
 #define pci_ss_list_1002_724c NULL
 #define pci_ss_list_1002_724d NULL
 #define pci_ss_list_1002_724e NULL
 #define pci_ss_list_1002_7269 NULL
+#define pci_ss_list_1002_726b NULL
 #define pci_ss_list_1002_726e NULL
+#define pci_ss_list_1002_7280 NULL
+#define pci_ss_list_1002_7288 NULL
+#define pci_ss_list_1002_7291 NULL
+#define pci_ss_list_1002_7293 NULL
+#define pci_ss_list_1002_72a0 NULL
+#define pci_ss_list_1002_72a8 NULL
+#define pci_ss_list_1002_72b1 NULL
+#define pci_ss_list_1002_72b3 NULL
 #define pci_ss_list_1002_7833 NULL
 #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_791e NULL
+#define pci_ss_list_1002_791f NULL
+#define pci_ss_list_1002_793f NULL
 #define pci_ss_list_1002_7c37 NULL
 #define pci_ss_list_1002_cab0 NULL
 #define pci_ss_list_1002_cab2 NULL
@@ -47178,6 +48099,7 @@ static const pciSubsystemInfo *pci_ss_li
 #define pci_ss_list_1022_2003 NULL
 #define pci_ss_list_1022_2020 NULL
 #define pci_ss_list_1022_2040 NULL
+#define pci_ss_list_1022_2080 NULL
 #define pci_ss_list_1022_2081 NULL
 #define pci_ss_list_1022_2082 NULL
 #define pci_ss_list_1022_208f NULL
@@ -47404,17 +48326,28 @@ static const pciSubsystemInfo *pci_ss_li
 };
 static const pciSubsystemInfo *pci_ss_list_1028_0002[] = {
 	&pci_ss_info_1028_0002_1028_0002,
+	&pci_ss_info_1028_0002_1028_00d1,
+	&pci_ss_info_1028_0002_1028_00d9,
 	NULL
 };
 static const pciSubsystemInfo *pci_ss_list_1028_0003[] = {
 	&pci_ss_info_1028_0003_1028_0003,
 	NULL
 };
+static const pciSubsystemInfo *pci_ss_list_1028_0004[] = {
+	&pci_ss_info_1028_0004_1028_0004,
+	NULL
+};
 #define pci_ss_list_1028_0006 NULL
 #define pci_ss_list_1028_0007 NULL
 #define pci_ss_list_1028_0008 NULL
 #define pci_ss_list_1028_0009 NULL
-#define pci_ss_list_1028_000a NULL
+static const pciSubsystemInfo *pci_ss_list_1028_000a[] = {
+	&pci_ss_info_1028_000a_1028_0106,
+	&pci_ss_info_1028_000a_1028_011b,
+	&pci_ss_info_1028_000a_1028_0121,
+	NULL
+};
 #define pci_ss_list_1028_000c NULL
 #define pci_ss_list_1028_000d NULL
 #define pci_ss_list_1028_000e NULL
@@ -47431,7 +48364,12 @@ static const pciSubsystemInfo *pci_ss_li
 	NULL
 };
 #define pci_ss_list_1028_0014 NULL
-#define pci_ss_list_1028_0015 NULL
+static const pciSubsystemInfo *pci_ss_list_1028_0015[] = {
+	&pci_ss_info_1028_0015_1028_1f01,
+	&pci_ss_info_1028_0015_1028_1f02,
+	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
@@ -47665,6 +48603,7 @@ static const pciSubsystemInfo *pci_ss_li
 };
 #define pci_ss_list_102f_0030 NULL
 #define pci_ss_list_102f_0031 NULL
+#define pci_ss_list_102f_0032 NULL
 #define pci_ss_list_102f_0105 NULL
 #define pci_ss_list_102f_0106 NULL
 #define pci_ss_list_102f_0107 NULL
@@ -47813,6 +48752,7 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_1039_0900_1019_0a14,
 	&pci_ss_info_1039_0900_1039_0900,
 	&pci_ss_info_1039_0900_1043_8035,
+	&pci_ss_info_1039_0900_1462_0900,
 	NULL
 };
 #define pci_ss_list_1039_0961 NULL
@@ -47837,6 +48777,7 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_1039_5513_1019_0970,
 	&pci_ss_info_1039_5513_1039_5513,
 	&pci_ss_info_1039_5513_1043_8035,
+	&pci_ss_info_1039_5513_1462_7010,
 	NULL
 };
 #define pci_ss_list_1039_5517 NULL
@@ -47879,14 +48820,20 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_1039_7001_1019_0a14,
 	&pci_ss_info_1039_7001_1039_7000,
 	&pci_ss_info_1039_7001_1462_5470,
+	&pci_ss_info_1039_7001_1462_7010,
 	NULL
 };
 static const pciSubsystemInfo *pci_ss_list_1039_7002[] = {
+	&pci_ss_info_1039_7002_1462_7010,
 	&pci_ss_info_1039_7002_1509_7002,
 	NULL
 };
-#define pci_ss_list_1039_7007 NULL
+static const pciSubsystemInfo *pci_ss_list_1039_7007[] = {
+	&pci_ss_info_1039_7007_1462_701d,
+	NULL
+};
 static const pciSubsystemInfo *pci_ss_list_1039_7012[] = {
+	&pci_ss_info_1039_7012_1462_7010,
 	&pci_ss_info_1039_7012_15bd_1001,
 	NULL
 };
@@ -47984,10 +48931,13 @@ static const pciSubsystemInfo *pci_ss_li
 #define pci_ss_list_103c_12ee NULL
 #define pci_ss_list_103c_12f8 NULL
 #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_2910 NULL
 #define pci_ss_list_103c_2925 NULL
 #define pci_ss_list_103c_3080 NULL
 #define pci_ss_list_103c_3085 NULL
+#define pci_ss_list_103c_30b5 NULL
 static const pciSubsystemInfo *pci_ss_list_103c_3220[] = {
 	&pci_ss_info_103c_3220_103c_3225,
 	NULL
@@ -48023,8 +48973,10 @@ static const pciSubsystemInfo *pci_ss_li
 #define pci_ss_list_1043_80c5 NULL
 #define pci_ss_list_1043_80df NULL
 #define pci_ss_list_1043_815a NULL
+#define pci_ss_list_1043_8168 NULL
 #define pci_ss_list_1043_8187 NULL
 #define pci_ss_list_1043_8188 NULL
+#define pci_ss_list_1043_81f4 NULL
 #endif
 #define pci_ss_list_1044_1012 NULL
 #define pci_ss_list_1044_a400 NULL
@@ -48190,6 +49142,7 @@ static const pciSubsystemInfo *pci_ss_li
 static const pciSubsystemInfo *pci_ss_list_104c_8023[] = {
 	&pci_ss_info_104c_8023_103c_088c,
 	&pci_ss_info_104c_8023_1043_808b,
+	&pci_ss_info_104c_8023_1043_815b,
 	NULL
 };
 #define pci_ss_list_104c_8024 NULL
@@ -48251,10 +49204,12 @@ static const pciSubsystemInfo *pci_ss_li
 #define pci_ss_list_104c_8038 NULL
 static const pciSubsystemInfo *pci_ss_list_104c_8039[] = {
 	&pci_ss_info_104c_8039_103c_309f,
+	&pci_ss_info_104c_8039_103c_30a1,
 	NULL
 };
 static const pciSubsystemInfo *pci_ss_list_104c_803a[] = {
 	&pci_ss_info_104c_803a_103c_309f,
+	&pci_ss_info_104c_803a_103c_30a1,
 	NULL
 };
 static const pciSubsystemInfo *pci_ss_list_104c_803b[] = {
@@ -48267,6 +49222,7 @@ static const pciSubsystemInfo *pci_ss_li
 };
 static const pciSubsystemInfo *pci_ss_list_104c_803d[] = {
 	&pci_ss_info_104c_803d_103c_309f,
+	&pci_ss_info_104c_803d_103c_30a1,
 	NULL
 };
 #define pci_ss_list_104c_8201 NULL
@@ -48342,6 +49298,7 @@ static const pciSubsystemInfo *pci_ss_li
 	NULL
 };
 static const pciSubsystemInfo *pci_ss_list_104c_ac44[] = {
+	&pci_ss_info_104c_ac44_1028_0149,
 	&pci_ss_info_104c_ac44_1028_0163,
 	&pci_ss_info_104c_ac44_1028_0196,
 	&pci_ss_info_104c_ac44_1071_8160,
@@ -48397,7 +49354,10 @@ static const pciSubsystemInfo *pci_ss_li
 };
 #define pci_ss_list_104c_ac8d NULL
 #define pci_ss_list_104c_ac8e NULL
-#define pci_ss_list_104c_ac8f NULL
+static const pciSubsystemInfo *pci_ss_list_104c_ac8f[] = {
+	&pci_ss_info_104c_ac8f_1028_018d,
+	NULL
+};
 #define pci_ss_list_104c_fe00 NULL
 #define pci_ss_list_104c_fe03 NULL
 #define pci_ss_list_104d_8004 NULL
@@ -48479,6 +49439,7 @@ static const pciSubsystemInfo *pci_ss_li
 };
 #define pci_ss_list_1057_18c0 NULL
 #define pci_ss_list_1057_18c1 NULL
+#define pci_ss_list_1057_3052 NULL
 #define pci_ss_list_1057_3055 NULL
 static const pciSubsystemInfo *pci_ss_list_1057_3410[] = {
 	&pci_ss_info_1057_3410_ecc0_0050,
@@ -48529,6 +49490,7 @@ static const pciSubsystemInfo *pci_ss_li
 #define pci_ss_list_1057_6405 NULL
 #ifdef VENDOR_INCLUDE_NONVIDEO
 static const pciSubsystemInfo *pci_ss_list_105a_0d30[] = {
+	&pci_ss_info_105a_0d30_1043_8042,
 	&pci_ss_info_105a_0d30_105a_4d33,
 	NULL
 };
@@ -48567,6 +49529,7 @@ static const pciSubsystemInfo *pci_ss_li
 static const pciSubsystemInfo *pci_ss_list_105a_4d30[] = {
 	&pci_ss_info_105a_4d30_105a_4d33,
 	&pci_ss_info_105a_4d30_105a_4d39,
+	&pci_ss_info_105a_4d30_8086_5744,
 	NULL
 };
 static const pciSubsystemInfo *pci_ss_list_105a_4d33[] = {
@@ -48611,7 +49574,14 @@ static const pciSubsystemInfo *pci_ss_li
 #define pci_ss_list_105a_7275 NULL
 #define pci_ss_list_105a_8002 NULL
 #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_8601,
+	&pci_ss_info_105a_8650_105a_8602,
+	NULL
+};
 #define pci_ss_list_105a_c350 NULL
+#define pci_ss_list_105a_e350 NULL
 #endif
 #define pci_ss_list_105d_2309 NULL
 static const pciSubsystemInfo *pci_ss_list_105d_2339[] = {
@@ -48837,6 +49807,7 @@ static const pciSubsystemInfo *pci_ss_li
 	NULL
 };
 #define pci_ss_list_1073_0020 NULL
+#define pci_ss_list_1073_1000 NULL
 static const pciSubsystemInfo *pci_ss_list_1073_2000[] = {
 	&pci_ss_info_1073_2000_1073_2000,
 	NULL
@@ -49185,6 +50156,7 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_109e_0878_13e9_0070,
 	&pci_ss_info_109e_0878_144f_3000,
 	&pci_ss_info_109e_0878_1461_0002,
+	&pci_ss_info_109e_0878_1461_0003,
 	&pci_ss_info_109e_0878_1461_0004,
 	&pci_ss_info_109e_0878_1461_0761,
 	&pci_ss_info_109e_0878_1461_0771,
@@ -49269,6 +50241,8 @@ static const pciSubsystemInfo *pci_ss_li
 #define pci_ss_list_10a9_4002 NULL
 #define pci_ss_list_10a9_8001 NULL
 #define pci_ss_list_10a9_8002 NULL
+#define pci_ss_list_10a9_8010 NULL
+#define pci_ss_list_10a9_8018 NULL
 #endif
 #define pci_ss_list_10aa_0000 NULL
 #define pci_ss_list_10ad_0001 NULL
@@ -49320,6 +50294,7 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_10b5_9030_10b5_2978,
 	&pci_ss_info_10b5_9030_10b5_3025,
 	&pci_ss_info_10b5_9030_10b5_3068,
+	&pci_ss_info_10b5_9030_12fe_0111,
 	&pci_ss_info_10b5_9030_1397_3136,
 	&pci_ss_info_10b5_9030_1397_3137,
 	&pci_ss_info_10b5_9030_1518_0200,
@@ -49378,6 +50353,7 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_10b5_9054_10b5_2844,
 	&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_16df_0011,
 	&pci_ss_info_10b5_9054_16df_0012,
 	&pci_ss_info_10b5_9054_16df_0013,
@@ -52258,6 +53234,7 @@ static const pciSubsystemInfo *pci_ss_li
 #define pci_ss_list_1166_0140 NULL
 #define pci_ss_list_1166_0141 NULL
 #define pci_ss_list_1166_0142 NULL
+#define pci_ss_list_1166_0144 NULL
 #define pci_ss_list_1166_0200 NULL
 static const pciSubsystemInfo *pci_ss_list_1166_0201[] = {
 	&pci_ss_info_1166_0201_4c53_1080,
@@ -56345,6 +57322,7 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_8086_1229_8086_0006,
 	&pci_ss_info_8086_1229_8086_0007,
 	&pci_ss_info_8086_1229_8086_0008,
+	&pci_ss_info_8086_1229_8086_0009,
 	&pci_ss_info_8086_1229_8086_000a,
 	&pci_ss_info_8086_1229_8086_000b,
 	&pci_ss_info_8086_1229_8086_000c,
@@ -56420,6 +57398,7 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_8086_1229_8086_3010,
 	&pci_ss_info_8086_1229_8086_3011,
 	&pci_ss_info_8086_1229_8086_3012,
+	&pci_ss_info_8086_1229_8086_301a,
 	&pci_ss_info_8086_1229_8086_3411,
 	NULL
 };
@@ -56524,7 +57503,10 @@ static const pciSubsystemInfo *pci_ss_li
 };
 #define pci_ss_list_8086_2426 NULL
 #define pci_ss_list_8086_2428 NULL
-#define pci_ss_list_8086_2440 NULL
+static const pciSubsystemInfo *pci_ss_list_8086_2440[] = {
+	&pci_ss_info_8086_2440_8086_5744,
+	NULL
+};
 static const pciSubsystemInfo *pci_ss_list_8086_2442[] = {
 	&pci_ss_info_8086_2442_1014_01c6,
 	&pci_ss_info_8086_2442_1025_1016,
@@ -56535,6 +57517,7 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_8086_2442_147b_0507,
 	&pci_ss_info_8086_2442_8086_4532,
 	&pci_ss_info_8086_2442_8086_4557,
+	&pci_ss_info_8086_2442_8086_5744,
 	NULL
 };
 static const pciSubsystemInfo *pci_ss_list_8086_2443[] = {
@@ -56547,6 +57530,7 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_8086_2443_147b_0507,
 	&pci_ss_info_8086_2443_8086_4532,
 	&pci_ss_info_8086_2443_8086_4557,
+	&pci_ss_info_8086_2443_8086_5744,
 	NULL
 };
 static const pciSubsystemInfo *pci_ss_list_8086_2444[] = {
@@ -56557,6 +57541,7 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_8086_2444_104d_80df,
 	&pci_ss_info_8086_2444_147b_0507,
 	&pci_ss_info_8086_2444_8086_4532,
+	&pci_ss_info_8086_2444_8086_5744,
 	NULL
 };
 static const pciSubsystemInfo *pci_ss_list_8086_2445[] = {
@@ -56627,6 +57612,7 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_8086_244b_147b_0507,
 	&pci_ss_info_8086_244b_8086_4532,
 	&pci_ss_info_8086_244b_8086_4557,
+	&pci_ss_info_8086_244b_8086_5744,
 	NULL
 };
 #define pci_ss_list_8086_244c NULL
@@ -56743,6 +57729,7 @@ static const pciSubsystemInfo *pci_ss_li
 	&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_c00c,
 	&pci_ss_info_8086_24c3_1458_24c2,
 	&pci_ss_info_8086_24c3_1462_5800,
 	&pci_ss_info_8086_24c3_1734_1004,
@@ -57438,15 +58425,18 @@ static const pciSubsystemInfo *pci_ss_li
 	NULL
 };
 static const pciSubsystemInfo *pci_ss_list_8086_27a0[] = {
+	&pci_ss_info_8086_27a0_103c_30a1,
 	&pci_ss_info_8086_27a0_17aa_2017,
 	NULL
 };
 #define pci_ss_list_8086_27a1 NULL
 static const pciSubsystemInfo *pci_ss_list_8086_27a2[] = {
+	&pci_ss_info_8086_27a2_103c_30a1,
 	&pci_ss_info_8086_27a2_17aa_201a,
 	NULL
 };
 static const pciSubsystemInfo *pci_ss_list_8086_27a6[] = {
+	&pci_ss_info_8086_27a6_103c_30a1,
 	&pci_ss_info_8086_27a6_17aa_201a,
 	NULL
 };
@@ -57457,6 +58447,7 @@ static const pciSubsystemInfo *pci_ss_li
 	NULL
 };
 static const pciSubsystemInfo *pci_ss_list_8086_27b9[] = {
+	&pci_ss_info_8086_27b9_103c_30a1,
 	&pci_ss_info_8086_27b9_10f7_8338,
 	&pci_ss_info_8086_27b9_17aa_2009,
 	NULL
@@ -57476,30 +58467,35 @@ static const pciSubsystemInfo *pci_ss_li
 };
 #define pci_ss_list_8086_27c6 NULL
 static const pciSubsystemInfo *pci_ss_list_8086_27c8[] = {
+	&pci_ss_info_8086_27c8_103c_30a1,
 	&pci_ss_info_8086_27c8_107b_5048,
 	&pci_ss_info_8086_27c8_17aa_200a,
 	&pci_ss_info_8086_27c8_8086_544e,
 	NULL
 };
 static const pciSubsystemInfo *pci_ss_list_8086_27c9[] = {
+	&pci_ss_info_8086_27c9_103c_30a1,
 	&pci_ss_info_8086_27c9_107b_5048,
 	&pci_ss_info_8086_27c9_17aa_200a,
 	&pci_ss_info_8086_27c9_8086_544e,
 	NULL
 };
 static const pciSubsystemInfo *pci_ss_list_8086_27ca[] = {
+	&pci_ss_info_8086_27ca_103c_30a1,
 	&pci_ss_info_8086_27ca_107b_5048,
 	&pci_ss_info_8086_27ca_17aa_200a,
 	&pci_ss_info_8086_27ca_8086_544e,
 	NULL
 };
 static const pciSubsystemInfo *pci_ss_list_8086_27cb[] = {
+	&pci_ss_info_8086_27cb_103c_30a1,
 	&pci_ss_info_8086_27cb_107b_5048,
 	&pci_ss_info_8086_27cb_17aa_200a,
 	&pci_ss_info_8086_27cb_8086_544e,
 	NULL
 };
 static const pciSubsystemInfo *pci_ss_list_8086_27cc[] = {
+	&pci_ss_info_8086_27cc_103c_30a1,
 	&pci_ss_info_8086_27cc_17aa_200b,
 	&pci_ss_info_8086_27cc_8086_544e,
 	NULL
@@ -57509,10 +58505,12 @@ 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_103c_30a1,
 	&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,
 	NULL
 };
@@ -57529,6 +58527,7 @@ static const pciSubsystemInfo *pci_ss_li
 #define pci_ss_list_8086_27dd NULL
 #define pci_ss_list_8086_27de NULL
 static const pciSubsystemInfo *pci_ss_list_8086_27df[] = {
+	&pci_ss_info_8086_27df_103c_30a1,
 	&pci_ss_info_8086_27df_107b_5048,
 	&pci_ss_info_8086_27df_10f7_8338,
 	&pci_ss_info_8086_27df_17aa_200c,
@@ -57588,6 +58587,34 @@ static const pciSubsystemInfo *pci_ss_li
 #define pci_ss_list_8086_284b 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_2920 NULL
+#define pci_ss_list_8086_2921 NULL
+#define pci_ss_list_8086_2922 NULL
+#define pci_ss_list_8086_2923 NULL
+#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_292d NULL
+#define pci_ss_list_8086_292e NULL
+#define pci_ss_list_8086_2930 NULL
+#define pci_ss_list_8086_2932 NULL
+#define pci_ss_list_8086_2934 NULL
+#define pci_ss_list_8086_2935 NULL
+#define pci_ss_list_8086_2936 NULL
+#define pci_ss_list_8086_2937 NULL
+#define pci_ss_list_8086_2938 NULL
+#define pci_ss_list_8086_2939 NULL
+#define pci_ss_list_8086_293a NULL
+#define pci_ss_list_8086_293c NULL
+#define pci_ss_list_8086_293e NULL
+#define pci_ss_list_8086_2940 NULL
+#define pci_ss_list_8086_2942 NULL
+#define pci_ss_list_8086_2944 NULL
+#define pci_ss_list_8086_2946 NULL
+#define pci_ss_list_8086_2948 NULL
+#define pci_ss_list_8086_294a NULL
+#define pci_ss_list_8086_294c NULL
 #define pci_ss_list_8086_2970 NULL
 #define pci_ss_list_8086_2971 NULL
 #define pci_ss_list_8086_2972 NULL
@@ -57615,6 +58642,37 @@ static const pciSubsystemInfo *pci_ss_li
 #define pci_ss_list_8086_29a5 NULL
 #define pci_ss_list_8086_29a6 NULL
 #define pci_ss_list_8086_29a7 NULL
+#define pci_ss_list_8086_29b0 NULL
+#define pci_ss_list_8086_29b1 NULL
+#define pci_ss_list_8086_29b2 NULL
+#define pci_ss_list_8086_29b3 NULL
+#define pci_ss_list_8086_29b4 NULL
+#define pci_ss_list_8086_29b5 NULL
+#define pci_ss_list_8086_29b6 NULL
+#define pci_ss_list_8086_29b7 NULL
+#define pci_ss_list_8086_29c0 NULL
+#define pci_ss_list_8086_29c1 NULL
+#define pci_ss_list_8086_29c2 NULL
+#define pci_ss_list_8086_29c3 NULL
+#define pci_ss_list_8086_29c4 NULL
+#define pci_ss_list_8086_29c5 NULL
+#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_29e0 NULL
+#define pci_ss_list_8086_29e1 NULL
+#define pci_ss_list_8086_29e4 NULL
+#define pci_ss_list_8086_29e5 NULL
+#define pci_ss_list_8086_29e6 NULL
+#define pci_ss_list_8086_29e7 NULL
+#define pci_ss_list_8086_29e9 NULL
+#define pci_ss_list_8086_29f0 NULL
+#define pci_ss_list_8086_29f1 NULL
+#define pci_ss_list_8086_29f4 NULL
+#define pci_ss_list_8086_29f5 NULL
+#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
 #define pci_ss_list_8086_2a01 NULL
 #define pci_ss_list_8086_2a02 NULL
@@ -57748,7 +58806,44 @@ static const pciSubsystemInfo *pci_ss_li
 #define pci_ss_list_8086_35b6 NULL
 #define pci_ss_list_8086_35b7 NULL
 #define pci_ss_list_8086_35c8 NULL
-#define pci_ss_list_8086_4220 NULL
+#define pci_ss_list_8086_3600 NULL
+#define pci_ss_list_8086_3604 NULL
+#define pci_ss_list_8086_3605 NULL
+#define pci_ss_list_8086_3606 NULL
+#define pci_ss_list_8086_3607 NULL
+#define pci_ss_list_8086_3608 NULL
+#define pci_ss_list_8086_3609 NULL
+#define pci_ss_list_8086_360a NULL
+#define pci_ss_list_8086_360b NULL
+#define pci_ss_list_8086_360c NULL
+#define pci_ss_list_8086_360d NULL
+#define pci_ss_list_8086_360e NULL
+#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_4008 NULL
+#define pci_ss_list_8086_4010 NULL
+#define pci_ss_list_8086_4021 NULL
+#define pci_ss_list_8086_4022 NULL
+#define pci_ss_list_8086_4023 NULL
+#define pci_ss_list_8086_4024 NULL
+#define pci_ss_list_8086_4025 NULL
+#define pci_ss_list_8086_4026 NULL
+#define pci_ss_list_8086_4027 NULL
+#define pci_ss_list_8086_4028 NULL
+#define pci_ss_list_8086_4029 NULL
+#define pci_ss_list_8086_402d NULL
+#define pci_ss_list_8086_402e NULL
+#define pci_ss_list_8086_402f NULL
+#define pci_ss_list_8086_4030 NULL
+#define pci_ss_list_8086_4032 NULL
+#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_8086_2731,
+	NULL
+};
 static const pciSubsystemInfo *pci_ss_list_8086_4222[] = {
 	&pci_ss_info_8086_4222_8086_1005,
 	&pci_ss_info_8086_4222_8086_1034,
@@ -57772,6 +58867,23 @@ static const pciSubsystemInfo *pci_ss_li
 	NULL
 };
 #define pci_ss_list_8086_530d NULL
+#define pci_ss_list_8086_65c0 NULL
+#define pci_ss_list_8086_65e2 NULL
+#define pci_ss_list_8086_65e3 NULL
+#define pci_ss_list_8086_65e4 NULL
+#define pci_ss_list_8086_65e5 NULL
+#define pci_ss_list_8086_65e6 NULL
+#define pci_ss_list_8086_65e7 NULL
+#define pci_ss_list_8086_65f0 NULL
+#define pci_ss_list_8086_65f1 NULL
+#define pci_ss_list_8086_65f3 NULL
+#define pci_ss_list_8086_65f5 NULL
+#define pci_ss_list_8086_65f6 NULL
+#define pci_ss_list_8086_65f7 NULL
+#define pci_ss_list_8086_65f8 NULL
+#define pci_ss_list_8086_65f9 NULL
+#define pci_ss_list_8086_65fa NULL
+#define pci_ss_list_8086_65ff NULL
 #define pci_ss_list_8086_7000 NULL
 #define pci_ss_list_8086_7010 NULL
 #define pci_ss_list_8086_7020 NULL
@@ -57900,6 +59012,7 @@ static const pciSubsystemInfo *pci_ss_li
 #define pci_ss_list_8086_9622 NULL
 #define pci_ss_list_8086_9641 NULL
 #define pci_ss_list_8086_96a1 NULL
+#define pci_ss_list_8086_a620 NULL
 #define pci_ss_list_8086_b152 NULL
 #define pci_ss_list_8086_b154 NULL
 static const pciSubsystemInfo *pci_ss_list_8086_b555[] = {
@@ -58379,6 +59492,7 @@ static const pciSubsystemInfo *pci_ss_li
 };
 #endif
 #define pci_ss_list_001a NULL
+#define pci_ss_list_001c NULL
 #define pci_ss_list_0033 NULL
 static const pciSubsystemInfo *pci_ss_list_003d[] = {
 	&pci_ss_info_003d_0008,
@@ -58456,6 +59570,7 @@ static const pciSubsystemInfo *pci_ss_li
 	NULL
 };
 #endif
+#define pci_ss_list_0403 NULL
 #define pci_ss_list_0432 NULL
 #define pci_ss_list_045e NULL
 #define pci_ss_list_0482 NULL
@@ -58473,8 +59588,12 @@ static const pciSubsystemInfo *pci_ss_li
 };
 #endif
 #define pci_ss_list_067b NULL
+#define pci_ss_list_069d NULL
 #define pci_ss_list_0721 NULL
+#define pci_ss_list_07ca NULL
 #define pci_ss_list_07e2 NULL
+#define pci_ss_list_0842 NULL
+#define pci_ss_list_08ff NULL
 #ifdef VENDOR_INCLUDE_NONVIDEO
 static const pciSubsystemInfo *pci_ss_list_0925[] = {
 	&pci_ss_info_0925_1234,
@@ -58484,6 +59603,7 @@ static const pciSubsystemInfo *pci_ss_li
 #define pci_ss_list_093a NULL
 #define pci_ss_list_09c1 NULL
 #define pci_ss_list_0a89 NULL
+#define pci_ss_list_0ace NULL
 #define pci_ss_list_0b0b NULL
 #define pci_ss_list_0b49 NULL
 #define pci_ss_list_0ccd NULL
@@ -58635,9 +59755,16 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_1000_1003,
 	&pci_ss_info_1000_1004,
 	&pci_ss_info_1000_1005,
+	&pci_ss_info_1000_1006,
+	&pci_ss_info_1000_1008,
+	&pci_ss_info_1000_100a,
 	&pci_ss_info_1000_100c,
 	&pci_ss_info_1000_100d,
+	&pci_ss_info_1000_100e,
+	&pci_ss_info_1000_100f,
 	&pci_ss_info_1000_1010,
+	&pci_ss_info_1000_1011,
+	&pci_ss_info_1000_1012,
 	&pci_ss_info_1000_1020,
 	&pci_ss_info_1000_2004,
 	&pci_ss_info_1000_2005,
@@ -58705,6 +59832,8 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_1002_2001,
 	&pci_ss_info_1002_2f72,
 	&pci_ss_info_1002_4336,
+	&pci_ss_info_1002_4379,
+	&pci_ss_info_1002_437a,
 	&pci_ss_info_1002_4722,
 	&pci_ss_info_1002_4723,
 	&pci_ss_info_1002_4742,
@@ -58728,6 +59857,7 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_1002_5654,
 	&pci_ss_info_1002_5954,
 	&pci_ss_info_1002_5955,
+	&pci_ss_info_1002_5964,
 	&pci_ss_info_1002_5965,
 	&pci_ss_info_1002_5c63,
 	&pci_ss_info_1002_8001,
@@ -58897,6 +60027,9 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_1014_02f2,
 	&pci_ss_info_1014_030d,
 	&pci_ss_info_1014_034d,
+	&pci_ss_info_1014_0363,
+	&pci_ss_info_1014_0364,
+	&pci_ss_info_1014_0365,
 	&pci_ss_info_1014_0502,
 	&pci_ss_info_1014_0503,
 	&pci_ss_info_1014_0506,
@@ -59047,6 +60180,9 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_1028_0001,
 	&pci_ss_info_1028_0002,
 	&pci_ss_info_1028_0003,
+	&pci_ss_info_1028_0004,
+	&pci_ss_info_1028_0012,
+	&pci_ss_info_1028_0015,
 	&pci_ss_info_1028_002e,
 	&pci_ss_info_1028_0074,
 	&pci_ss_info_1028_0075,
@@ -59089,6 +60225,7 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_1028_0109,
 	&pci_ss_info_1028_010a,
 	&pci_ss_info_1028_010e,
+	&pci_ss_info_1028_011b,
 	&pci_ss_info_1028_011c,
 	&pci_ss_info_1028_011d,
 	&pci_ss_info_1028_0121,
@@ -59098,6 +60235,7 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_1028_0134,
 	&pci_ss_info_1028_0139,
 	&pci_ss_info_1028_013f,
+	&pci_ss_info_1028_0149,
 	&pci_ss_info_1028_014a,
 	&pci_ss_info_1028_014e,
 	&pci_ss_info_1028_0151,
@@ -59115,6 +60253,7 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_1028_0183,
 	&pci_ss_info_1028_0187,
 	&pci_ss_info_1028_0188,
+	&pci_ss_info_1028_018d,
 	&pci_ss_info_1028_0196,
 	&pci_ss_info_1028_019a,
 	&pci_ss_info_1028_019d,
@@ -59135,10 +60274,14 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_1028_1010,
 	&pci_ss_info_1028_1079,
 	&pci_ss_info_1028_1111,
+	&pci_ss_info_1028_1f01,
+	&pci_ss_info_1028_1f02,
+	&pci_ss_info_1028_1f03,
 	&pci_ss_info_1028_1f0a,
 	&pci_ss_info_1028_1f0b,
 	&pci_ss_info_1028_1f0c,
 	&pci_ss_info_1028_1f0d,
+	&pci_ss_info_1028_1f11,
 	&pci_ss_info_1028_4082,
 	&pci_ss_info_1028_4134,
 	&pci_ss_info_1028_8082,
@@ -59309,6 +60452,7 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_1033_8110,
 	&pci_ss_info_1033_8112,
 	&pci_ss_info_1033_8287,
+	&pci_ss_info_1033_8336,
 	NULL
 };
 #define pci_ss_list_1034 NULL
@@ -59412,6 +60556,7 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_103c_308a,
 	&pci_ss_info_103c_308b,
 	&pci_ss_info_103c_309f,
+	&pci_ss_info_103c_30a1,
 	&pci_ss_info_103c_3100,
 	&pci_ss_info_103c_3101,
 	&pci_ss_info_103c_3102,
@@ -59549,8 +60694,10 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_1043_814a,
 	&pci_ss_info_1043_814e,
 	&pci_ss_info_1043_815a,
+	&pci_ss_info_1043_815b,
 	&pci_ss_info_1043_817b,
 	&pci_ss_info_1043_81a6,
+	&pci_ss_info_1043_824d,
 	&pci_ss_info_1043_c002,
 	&pci_ss_info_1043_c003,
 	&pci_ss_info_1043_c004,
@@ -59745,12 +60892,15 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_105a_0275,
 	&pci_ss_info_105a_1275,
 	&pci_ss_info_105a_2168,
+	&pci_ss_info_105a_4600,
 	&pci_ss_info_105a_4d30,
 	&pci_ss_info_105a_4d33,
 	&pci_ss_info_105a_4d39,
 	&pci_ss_info_105a_4d68,
 	&pci_ss_info_105a_5168,
 	&pci_ss_info_105a_6269,
+	&pci_ss_info_105a_8601,
+	&pci_ss_info_105a_8602,
 	NULL
 };
 #endif
@@ -60850,6 +62000,7 @@ static const pciSubsystemInfo *pci_ss_li
 #define pci_ss_list_116f NULL
 #ifdef VENDOR_INCLUDE_NONVIDEO
 static const pciSubsystemInfo *pci_ss_list_1170[] = {
+	&pci_ss_info_1170_002f,
 	&pci_ss_info_1170_3209,
 	NULL
 };
@@ -61721,7 +62872,12 @@ static const pciSubsystemInfo *pci_ss_li
 #define pci_ss_list_12fb NULL
 #define pci_ss_list_12fc NULL
 #define pci_ss_list_12fd NULL
-#define pci_ss_list_12fe NULL
+#ifdef VENDOR_INCLUDE_NONVIDEO
+static const pciSubsystemInfo *pci_ss_list_12fe[] = {
+	&pci_ss_info_12fe_0111,
+	NULL
+};
+#endif
 #define pci_ss_list_12ff NULL
 #define pci_ss_list_1300 NULL
 #define pci_ss_list_1302 NULL
@@ -62536,6 +63692,7 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_1462_052c,
 	&pci_ss_info_1462_058c,
 	&pci_ss_info_1462_0622,
+	&pci_ss_info_1462_0900,
 	&pci_ss_info_1462_1009,
 	&pci_ss_info_1462_207d,
 	&pci_ss_info_1462_3091,
@@ -62567,6 +63724,8 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_1462_6930,
 	&pci_ss_info_1462_6990,
 	&pci_ss_info_1462_6991,
+	&pci_ss_info_1462_7010,
+	&pci_ss_info_1462_701d,
 	&pci_ss_info_1462_7020,
 	&pci_ss_info_1462_7028,
 	&pci_ss_info_1462_702c,
@@ -62805,7 +63964,12 @@ static const pciSubsystemInfo *pci_ss_li
 #define pci_ss_list_14b1 NULL
 #define pci_ss_list_14b2 NULL
 #define pci_ss_list_14b3 NULL
-#define pci_ss_list_14b4 NULL
+#ifdef VENDOR_INCLUDE_NONVIDEO
+static const pciSubsystemInfo *pci_ss_list_14b4[] = {
+	&pci_ss_info_14b4_d100,
+	NULL
+};
+#endif
 #define pci_ss_list_14b5 NULL
 #define pci_ss_list_14b6 NULL
 #ifdef VENDOR_INCLUDE_NONVIDEO
@@ -62961,6 +64125,7 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_14f1_2004,
 	&pci_ss_info_14f1_2045,
 	&pci_ss_info_14f1_5421,
+	&pci_ss_info_14f1_8800,
 	NULL
 };
 #endif
@@ -63660,6 +64825,8 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_1734_106c,
 	&pci_ss_info_1734_1081,
 	&pci_ss_info_1734_10a3,
+	&pci_ss_info_1734_10ad,
+	&pci_ss_info_1734_10b8,
 	NULL
 };
 #endif
@@ -64322,6 +65489,7 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_8086_0006,
 	&pci_ss_info_8086_0007,
 	&pci_ss_info_8086_0008,
+	&pci_ss_info_8086_0009,
 	&pci_ss_info_8086_000a,
 	&pci_ss_info_8086_000b,
 	&pci_ss_info_8086_000c,
@@ -64483,6 +65651,7 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_8086_2527,
 	&pci_ss_info_8086_2581,
 	&pci_ss_info_8086_265c,
+	&pci_ss_info_8086_2731,
 	&pci_ss_info_8086_3000,
 	&pci_ss_info_8086_3001,
 	&pci_ss_info_8086_3002,
@@ -64498,6 +65667,7 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_8086_3016,
 	&pci_ss_info_8086_3017,
 	&pci_ss_info_8086_3018,
+	&pci_ss_info_8086_301a,
 	&pci_ss_info_8086_301f,
 	&pci_ss_info_8086_3020,
 	&pci_ss_info_8086_302c,
@@ -64511,6 +65681,8 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_8086_3431,
 	&pci_ss_info_8086_3439,
 	&pci_ss_info_8086_3499,
+	&pci_ss_info_8086_34cc,
+	&pci_ss_info_8086_34cd,
 	&pci_ss_info_8086_3500,
 	&pci_ss_info_8086_3501,
 	&pci_ss_info_8086_3504,
@@ -64535,6 +65707,7 @@ static const pciSubsystemInfo *pci_ss_li
 	&pci_ss_info_8086_5352,
 	&pci_ss_info_8086_544e,
 	&pci_ss_info_8086_5643,
+	&pci_ss_info_8086_5744,
 	&pci_ss_info_8086_5753,
 	&pci_ss_info_8086_8000,
 	&pci_ss_info_8086_8181,
@@ -64833,6 +66006,154 @@ static const pciSubsystemInfo *pci_ss_li
 #endif /* INIT_VENDOR_SUBSYS_INFO */
 #endif /* INIT_SUBSYS_INFO */
 #ifdef VENDOR_INCLUDE_NONVIDEO
+static const pciDeviceInfo pci_dev_info_001c_0001 = {
+	0x0001, pci_device_001c_0001,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_001c_0001,
+#else
+	NULL,
+#endif
+	0
+};
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
+static const pciDeviceInfo pci_dev_info_0070_0003 = {
+	0x0003, pci_device_0070_0003,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_0070_0003,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_0070_0009 = {
+	0x0009, pci_device_0070_0009,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_0070_0009,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_0070_0801 = {
+	0x0801, pci_device_0070_0801,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_0070_0801,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_0070_0807 = {
+	0x0807, pci_device_0070_0807,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_0070_0807,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_0070_4000 = {
+	0x4000, pci_device_0070_4000,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_0070_4000,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_0070_4001 = {
+	0x4001, pci_device_0070_4001,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_0070_4001,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_0070_4009 = {
+	0x4009, pci_device_0070_4009,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_0070_4009,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_0070_4800 = {
+	0x4800, pci_device_0070_4800,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_0070_4800,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_0070_4801 = {
+	0x4801, pci_device_0070_4801,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_0070_4801,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_0070_4803 = {
+	0x4803, pci_device_0070_4803,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_0070_4803,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_0070_8003 = {
+	0x8003, pci_device_0070_8003,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_0070_8003,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_0070_8801 = {
+	0x8801, pci_device_0070_8801,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_0070_8801,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_0070_c801 = {
+	0xc801, pci_device_0070_c801,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_0070_c801,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_0070_e807 = {
+	0xe807, pci_device_0070_e807,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_0070_e807,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_0070_e817 = {
+	0xe817, pci_device_0070_e817,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_0070_e817,
+#else
+	NULL,
+#endif
+	0
+};
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
 static const pciDeviceInfo pci_dev_info_0095_0680 = {
 	0x0680, pci_device_0095_0680,
 #ifdef INIT_SUBSYS_INFO
@@ -64968,6 +66289,15 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_050d_705c = {
+	0x705c, pci_device_050d_705c,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_050d_705c,
+#else
+	NULL,
+#endif
+	0
+};
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
 static const pciDeviceInfo pci_dev_info_05a9_8519 = {
@@ -65070,6 +66400,75 @@ static const pciDeviceInfo pci_dev_info_
 };
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
+static const pciDeviceInfo pci_dev_info_07ca_b808 = {
+	0xb808, pci_device_07ca_b808,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_07ca_b808,
+#else
+	NULL,
+#endif
+	0
+};
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
+static const pciDeviceInfo pci_dev_info_08ff_afe4 = {
+	0xafe4, pci_device_08ff_afe4,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_08ff_afe4,
+#else
+	NULL,
+#endif
+	0
+};
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
+static const pciDeviceInfo pci_dev_info_093a_010e = {
+	0x010e, pci_device_093a_010e,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_093a_010e,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_093a_010f = {
+	0x010f, pci_device_093a_010f,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_093a_010f,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_093a_2468 = {
+	0x2468, pci_device_093a_2468,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_093a_2468,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_093a_2603 = {
+	0x2603, pci_device_093a_2603,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_093a_2603,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_093a_2608 = {
+	0x2608, pci_device_093a_2608,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_093a_2608,
+#else
+	NULL,
+#endif
+	0
+};
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
 static const pciDeviceInfo pci_dev_info_09c1_0704 = {
 	0x0704, pci_device_09c1_0704,
 #ifdef INIT_SUBSYS_INFO
@@ -65081,6 +66480,17 @@ static const pciDeviceInfo pci_dev_info_
 };
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
+static const pciDeviceInfo pci_dev_info_0ace_1211 = {
+	0x1211, pci_device_0ace_1211,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_0ace_1211,
+#else
+	NULL,
+#endif
+	0
+};
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
 static const pciDeviceInfo pci_dev_info_0b0b_0105 = {
 	0x0105, pci_device_0b0b_0105,
 #ifdef INIT_SUBSYS_INFO
@@ -65099,6 +66509,15 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_0b0b_0206 = {
+	0x0206, pci_device_0b0b_0206,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_0b0b_0206,
+#else
+	NULL,
+#endif
+	0
+};
 static const pciDeviceInfo pci_dev_info_0b0b_0305 = {
 	0x0305, pci_device_0b0b_0305,
 #ifdef INIT_SUBSYS_INFO
@@ -65117,6 +66536,15 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_0b0b_0406 = {
+	0x0406, pci_device_0b0b_0406,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_0b0b_0406,
+#else
+	NULL,
+#endif
+	0
+};
 static const pciDeviceInfo pci_dev_info_0b0b_0505 = {
 	0x0505, pci_device_0b0b_0505,
 #ifdef INIT_SUBSYS_INFO
@@ -65153,6 +66581,42 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_0b0b_0706 = {
+	0x0706, pci_device_0b0b_0706,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_0b0b_0706,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_0b0b_0905 = {
+	0x0905, pci_device_0b0b_0905,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_0b0b_0905,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_0b0b_0906 = {
+	0x0906, pci_device_0b0b_0906,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_0b0b_0906,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_0b0b_0a06 = {
+	0x0a06, pci_device_0b0b_0a06,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_0b0b_0a06,
+#else
+	NULL,
+#endif
+	0
+};
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
 static const pciDeviceInfo pci_dev_info_0b49_064f = {
@@ -66239,6 +67703,15 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_1000_0055 = {
+	0x0055, pci_device_1000_0055,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1000_0055,
+#else
+	NULL,
+#endif
+	0
+};
 static const pciDeviceInfo pci_dev_info_1000_0056 = {
 	0x0056, pci_device_1000_0056,
 #ifdef INIT_SUBSYS_INFO
@@ -69131,6 +70604,15 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_1002_5952 = {
+	0x5952, pci_device_1002_5952,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_5952,
+#else
+	NULL,
+#endif
+	0
+};
 static const pciDeviceInfo pci_dev_info_1002_5954 = {
 	0x5954, pci_device_1002_5954,
 #ifdef INIT_SUBSYS_INFO
@@ -69239,6 +70721,15 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_1002_5a37 = {
+	0x5a37, pci_device_1002_5a37,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_5a37,
+#else
+	NULL,
+#endif
+	0
+};
 static const pciDeviceInfo pci_dev_info_1002_5a38 = {
 	0x5a38, pci_device_1002_5a38,
 #ifdef INIT_SUBSYS_INFO
@@ -69761,6 +71252,15 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_1002_7143 = {
+	0x7143, pci_device_1002_7143,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_7143,
+#else
+	NULL,
+#endif
+	0
+};
 static const pciDeviceInfo pci_dev_info_1002_7145 = {
 	0x7145, pci_device_1002_7145,
 #ifdef INIT_SUBSYS_INFO
@@ -69779,6 +71279,15 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_1002_7147 = {
+	0x7147, pci_device_1002_7147,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_7147,
+#else
+	NULL,
+#endif
+	0
+};
 static const pciDeviceInfo pci_dev_info_1002_7149 = {
 	0x7149, pci_device_1002_7149,
 #ifdef INIT_SUBSYS_INFO
@@ -69842,6 +71351,15 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_1002_7153 = {
+	0x7153, pci_device_1002_7153,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_7153,
+#else
+	NULL,
+#endif
+	0
+};
 static const pciDeviceInfo pci_dev_info_1002_715e = {
 	0x715e, pci_device_1002_715e,
 #ifdef INIT_SUBSYS_INFO
@@ -69851,6 +71369,15 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_1002_715f = {
+	0x715f, pci_device_1002_715f,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_715f,
+#else
+	NULL,
+#endif
+	0
+};
 static const pciDeviceInfo pci_dev_info_1002_7162 = {
 	0x7162, pci_device_1002_7162,
 #ifdef INIT_SUBSYS_INFO
@@ -69878,6 +71405,15 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_1002_7173 = {
+	0x7173, pci_device_1002_7173,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_7173,
+#else
+	NULL,
+#endif
+	0
+};
 static const pciDeviceInfo pci_dev_info_1002_7180 = {
 	0x7180, pci_device_1002_7180,
 #ifdef INIT_SUBSYS_INFO
@@ -69896,6 +71432,87 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_1002_7183 = {
+	0x7183, pci_device_1002_7183,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_7183,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_1002_7187 = {
+	0x7187, pci_device_1002_7187,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_7187,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_1002_7188 = {
+	0x7188, pci_device_1002_7188,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_7188,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_1002_718a = {
+	0x718a, pci_device_1002_718a,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_718a,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_1002_718c = {
+	0x718c, pci_device_1002_718c,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_718c,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_1002_718d = {
+	0x718d, pci_device_1002_718d,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_718d,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_1002_7193 = {
+	0x7193, pci_device_1002_7193,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_7193,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_1002_719b = {
+	0x719b, pci_device_1002_719b,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_719b,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_1002_719f = {
+	0x719f, pci_device_1002_719f,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_719f,
+#else
+	NULL,
+#endif
+	0
+};
 static const pciDeviceInfo pci_dev_info_1002_71a0 = {
 	0x71a0, pci_device_1002_71a0,
 #ifdef INIT_SUBSYS_INFO
@@ -69914,6 +71531,33 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_1002_71a3 = {
+	0x71a3, pci_device_1002_71a3,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_71a3,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_1002_71a7 = {
+	0x71a7, pci_device_1002_71a7,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_71a7,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_1002_71bb = {
+	0x71bb, pci_device_1002_71bb,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_71bb,
+#else
+	NULL,
+#endif
+	0
+};
 static const pciDeviceInfo pci_dev_info_1002_71c0 = {
 	0x71c0, pci_device_1002_71c0,
 #ifdef INIT_SUBSYS_INFO
@@ -69959,6 +71603,15 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_1002_71c7 = {
+	0x71c7, pci_device_1002_71c7,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_71c7,
+#else
+	NULL,
+#endif
+	0
+};
 static const pciDeviceInfo pci_dev_info_1002_71ce = {
 	0x71ce, pci_device_1002_71ce,
 #ifdef INIT_SUBSYS_INFO
@@ -70013,6 +71666,33 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_1002_71e7 = {
+	0x71e7, pci_device_1002_71e7,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_71e7,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_1002_7210 = {
+	0x7210, pci_device_1002_7210,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_7210,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_1002_7211 = {
+	0x7211, pci_device_1002_7211,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_7211,
+#else
+	NULL,
+#endif
+	0
+};
 static const pciDeviceInfo pci_dev_info_1002_7240 = {
 	0x7240, pci_device_1002_7240,
 #ifdef INIT_SUBSYS_INFO
@@ -70157,6 +71837,15 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_1002_726b = {
+	0x726b, pci_device_1002_726b,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_726b,
+#else
+	NULL,
+#endif
+	0
+};
 static const pciDeviceInfo pci_dev_info_1002_726e = {
 	0x726e, pci_device_1002_726e,
 #ifdef INIT_SUBSYS_INFO
@@ -70166,6 +71855,78 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_1002_7280 = {
+	0x7280, pci_device_1002_7280,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_7280,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_1002_7288 = {
+	0x7288, pci_device_1002_7288,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_7288,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_1002_7291 = {
+	0x7291, pci_device_1002_7291,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_7291,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_1002_7293 = {
+	0x7293, pci_device_1002_7293,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_7293,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_1002_72a0 = {
+	0x72a0, pci_device_1002_72a0,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_72a0,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_1002_72a8 = {
+	0x72a8, pci_device_1002_72a8,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_72a8,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_1002_72b1 = {
+	0x72b1, pci_device_1002_72b1,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_72b1,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_1002_72b3 = {
+	0x72b3, pci_device_1002_72b3,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_72b3,
+#else
+	NULL,
+#endif
+	0
+};
 static const pciDeviceInfo pci_dev_info_1002_7833 = {
 	0x7833, pci_device_1002_7833,
 #ifdef INIT_SUBSYS_INFO
@@ -70202,6 +71963,33 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_1002_791e = {
+	0x791e, pci_device_1002_791e,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_791e,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_1002_791f = {
+	0x791f, pci_device_1002_791f,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_791f,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_1002_793f = {
+	0x793f, pci_device_1002_793f,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1002_793f,
+#else
+	NULL,
+#endif
+	0
+};
 static const pciDeviceInfo pci_dev_info_1002_7c37 = {
 	0x7c37, pci_device_1002_7c37,
 #ifdef INIT_SUBSYS_INFO
@@ -72376,6 +74164,15 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_1022_2080 = {
+	0x2080, pci_device_1022_2080,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1022_2080,
+#else
+	NULL,
+#endif
+	0
+};
 static const pciDeviceInfo pci_dev_info_1022_2081 = {
 	0x2081, pci_device_1022_2081,
 #ifdef INIT_SUBSYS_INFO
@@ -73780,6 +75577,15 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_1028_0004 = {
+	0x0004, pci_device_1028_0004,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1028_0004,
+#else
+	NULL,
+#endif
+	0
+};
 static const pciDeviceInfo pci_dev_info_1028_0006 = {
 	0x0006, pci_device_1028_0006,
 #ifdef INIT_SUBSYS_INFO
@@ -73915,6 +75721,15 @@ 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,
@@ -74361,6 +76176,15 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_102f_0032 = {
+	0x0032, pci_device_102f_0032,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_102f_0032,
+#else
+	NULL,
+#endif
+	0
+};
 static const pciDeviceInfo pci_dev_info_102f_0105 = {
 	0x0105, pci_device_102f_0105,
 #ifdef INIT_SUBSYS_INFO
@@ -76065,6 +77889,24 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_103c_1302 = {
+	0x1302, pci_device_103c_1302,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_103c_1302,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_103c_1303 = {
+	0x1303, pci_device_103c_1303,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_103c_1303,
+#else
+	NULL,
+#endif
+	0
+};
 static const pciDeviceInfo pci_dev_info_103c_2910 = {
 	0x2910, pci_device_103c_2910,
 #ifdef INIT_SUBSYS_INFO
@@ -76101,6 +77943,15 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_103c_30b5 = {
+	0x30b5, pci_device_103c_30b5,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_103c_30b5,
+#else
+	NULL,
+#endif
+	0
+};
 static const pciDeviceInfo pci_dev_info_103c_3220 = {
 	0x3220, pci_device_103c_3220,
 #ifdef INIT_SUBSYS_INFO
@@ -76338,6 +78189,15 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_1043_8168 = {
+	0x8168, pci_device_1043_8168,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1043_8168,
+#else
+	NULL,
+#endif
+	0
+};
 static const pciDeviceInfo pci_dev_info_1043_8187 = {
 	0x8187, pci_device_1043_8187,
 #ifdef INIT_SUBSYS_INFO
@@ -76356,6 +78216,15 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_1043_81f4 = {
+	0x81f4, pci_device_1043_81f4,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1043_81f4,
+#else
+	NULL,
+#endif
+	0
+};
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
 static const pciDeviceInfo pci_dev_info_1044_1012 = {
@@ -77953,6 +79822,15 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_1057_3052 = {
+	0x3052, pci_device_1057_3052,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1057_3052,
+#else
+	NULL,
+#endif
+	0
+};
 static const pciDeviceInfo pci_dev_info_1057_3055 = {
 	0x3055, pci_device_1057_3055,
 #ifdef INIT_SUBSYS_INFO
@@ -78422,6 +80300,15 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_105a_8650 = {
+	0x8650, pci_device_105a_8650,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_105a_8650,
+#else
+	NULL,
+#endif
+	0
+};
 static const pciDeviceInfo pci_dev_info_105a_c350 = {
 	0xc350, pci_device_105a_c350,
 #ifdef INIT_SUBSYS_INFO
@@ -78431,6 +80318,15 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_105a_e350 = {
+	0xe350, pci_device_105a_e350,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_105a_e350,
+#else
+	NULL,
+#endif
+	0
+};
 #endif
 static const pciDeviceInfo pci_dev_info_105d_2309 = {
 	0x2309, pci_device_105d_2309,
@@ -79610,6 +81506,15 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_1073_1000 = {
+	0x1000, pci_device_1073_1000,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1073_1000,
+#else
+	NULL,
+#endif
+	0
+};
 static const pciDeviceInfo pci_dev_info_1073_2000 = {
 	0x2000, pci_device_1073_2000,
 #ifdef INIT_SUBSYS_INFO
@@ -81714,6 +83619,24 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_10a9_8010 = {
+	0x8010, pci_device_10a9_8010,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_10a9_8010,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_10a9_8018 = {
+	0x8018, pci_device_10a9_8018,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_10a9_8018,
+#else
+	NULL,
+#endif
+	0
+};
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
 static const pciDeviceInfo pci_dev_info_10aa_0000 = {
@@ -95105,6 +97028,15 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_1166_0144 = {
+	0x0144, pci_device_1166_0144,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_1166_0144,
+#else
+	NULL,
+#endif
+	0
+};
 static const pciDeviceInfo pci_dev_info_1166_0200 = {
 	0x0200, pci_device_1166_0200,
 #ifdef INIT_SUBSYS_INFO
@@ -115950,6 +117882,258 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_8086_2910 = {
+	0x2910, pci_device_8086_2910,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_2910,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_2920 = {
+	0x2920, pci_device_8086_2920,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_2920,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_2921 = {
+	0x2921, pci_device_8086_2921,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_2921,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_2922 = {
+	0x2922, pci_device_8086_2922,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_2922,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_2923 = {
+	0x2923, pci_device_8086_2923,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_2923,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_2925 = {
+	0x2925, pci_device_8086_2925,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_2925,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_2926 = {
+	0x2926, pci_device_8086_2926,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_2926,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_2928 = {
+	0x2928, pci_device_8086_2928,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_2928,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_292d = {
+	0x292d, pci_device_8086_292d,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_292d,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_292e = {
+	0x292e, pci_device_8086_292e,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_292e,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_2930 = {
+	0x2930, pci_device_8086_2930,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_2930,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_2932 = {
+	0x2932, pci_device_8086_2932,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_2932,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_2934 = {
+	0x2934, pci_device_8086_2934,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_2934,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_2935 = {
+	0x2935, pci_device_8086_2935,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_2935,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_2936 = {
+	0x2936, pci_device_8086_2936,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_2936,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_2937 = {
+	0x2937, pci_device_8086_2937,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_2937,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_2938 = {
+	0x2938, pci_device_8086_2938,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_2938,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_2939 = {
+	0x2939, pci_device_8086_2939,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_2939,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_293a = {
+	0x293a, pci_device_8086_293a,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_293a,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_293c = {
+	0x293c, pci_device_8086_293c,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_293c,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_293e = {
+	0x293e, pci_device_8086_293e,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_293e,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_2940 = {
+	0x2940, pci_device_8086_2940,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_2940,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_2942 = {
+	0x2942, pci_device_8086_2942,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_2942,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_2944 = {
+	0x2944, pci_device_8086_2944,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_2944,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_2946 = {
+	0x2946, pci_device_8086_2946,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_2946,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_2948 = {
+	0x2948, pci_device_8086_2948,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_2948,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_294a = {
+	0x294a, pci_device_8086_294a,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_294a,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_294c = {
+	0x294c, pci_device_8086_294c,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_294c,
+#else
+	NULL,
+#endif
+	0
+};
 static const pciDeviceInfo pci_dev_info_8086_2970 = {
 	0x2970, pci_device_8086_2970,
 #ifdef INIT_SUBSYS_INFO
@@ -116193,6 +118377,285 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_8086_29b0 = {
+	0x29b0, pci_device_8086_29b0,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_29b0,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_29b1 = {
+	0x29b1, pci_device_8086_29b1,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_29b1,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_29b2 = {
+	0x29b2, pci_device_8086_29b2,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_29b2,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_29b3 = {
+	0x29b3, pci_device_8086_29b3,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_29b3,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_29b4 = {
+	0x29b4, pci_device_8086_29b4,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_29b4,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_29b5 = {
+	0x29b5, pci_device_8086_29b5,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_29b5,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_29b6 = {
+	0x29b6, pci_device_8086_29b6,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_29b6,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_29b7 = {
+	0x29b7, pci_device_8086_29b7,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_29b7,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_29c0 = {
+	0x29c0, pci_device_8086_29c0,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_29c0,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_29c1 = {
+	0x29c1, pci_device_8086_29c1,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_29c1,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_29c2 = {
+	0x29c2, pci_device_8086_29c2,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_29c2,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_29c3 = {
+	0x29c3, pci_device_8086_29c3,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_29c3,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_29c4 = {
+	0x29c4, pci_device_8086_29c4,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_29c4,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_29c5 = {
+	0x29c5, pci_device_8086_29c5,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_29c5,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_29c6 = {
+	0x29c6, pci_device_8086_29c6,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_29c6,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_29c7 = {
+	0x29c7, pci_device_8086_29c7,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_29c7,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_29cf = {
+	0x29cf, pci_device_8086_29cf,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_29cf,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_29e0 = {
+	0x29e0, pci_device_8086_29e0,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_29e0,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_29e1 = {
+	0x29e1, pci_device_8086_29e1,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_29e1,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_29e4 = {
+	0x29e4, pci_device_8086_29e4,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_29e4,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_29e5 = {
+	0x29e5, pci_device_8086_29e5,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_29e5,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_29e6 = {
+	0x29e6, pci_device_8086_29e6,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_29e6,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_29e7 = {
+	0x29e7, pci_device_8086_29e7,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_29e7,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_29e9 = {
+	0x29e9, pci_device_8086_29e9,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_29e9,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_29f0 = {
+	0x29f0, pci_device_8086_29f0,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_29f0,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_29f1 = {
+	0x29f1, pci_device_8086_29f1,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_29f1,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_29f4 = {
+	0x29f4, pci_device_8086_29f4,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_29f4,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_29f5 = {
+	0x29f5, pci_device_8086_29f5,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_29f5,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_29f6 = {
+	0x29f6, pci_device_8086_29f6,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_29f6,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_29f7 = {
+	0x29f7, pci_device_8086_29f7,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_29f7,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_29f9 = {
+	0x29f9, pci_device_8086_29f9,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_29f9,
+#else
+	NULL,
+#endif
+	0
+};
 static const pciDeviceInfo pci_dev_info_8086_2a00 = {
 	0x2a00, pci_device_8086_2a00,
 #ifdef INIT_SUBSYS_INFO
@@ -116661,6 +119124,303 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_8086_3600 = {
+	0x3600, pci_device_8086_3600,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_3600,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_3604 = {
+	0x3604, pci_device_8086_3604,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_3604,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_3605 = {
+	0x3605, pci_device_8086_3605,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_3605,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_3606 = {
+	0x3606, pci_device_8086_3606,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_3606,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_3607 = {
+	0x3607, pci_device_8086_3607,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_3607,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_3608 = {
+	0x3608, pci_device_8086_3608,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_3608,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_3609 = {
+	0x3609, pci_device_8086_3609,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_3609,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_360a = {
+	0x360a, pci_device_8086_360a,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_360a,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_360b = {
+	0x360b, pci_device_8086_360b,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_360b,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_360c = {
+	0x360c, pci_device_8086_360c,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_360c,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_360d = {
+	0x360d, pci_device_8086_360d,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_360d,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_360e = {
+	0x360e, pci_device_8086_360e,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_360e,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_360f = {
+	0x360f, pci_device_8086_360f,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_360f,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_3610 = {
+	0x3610, pci_device_8086_3610,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_3610,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_4000 = {
+	0x4000, pci_device_8086_4000,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_4000,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_4008 = {
+	0x4008, pci_device_8086_4008,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_4008,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_4010 = {
+	0x4010, pci_device_8086_4010,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_4010,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_4021 = {
+	0x4021, pci_device_8086_4021,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_4021,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_4022 = {
+	0x4022, pci_device_8086_4022,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_4022,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_4023 = {
+	0x4023, pci_device_8086_4023,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_4023,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_4024 = {
+	0x4024, pci_device_8086_4024,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_4024,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_4025 = {
+	0x4025, pci_device_8086_4025,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_4025,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_4026 = {
+	0x4026, pci_device_8086_4026,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_4026,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_4027 = {
+	0x4027, pci_device_8086_4027,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_4027,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_4028 = {
+	0x4028, pci_device_8086_4028,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_4028,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_4029 = {
+	0x4029, pci_device_8086_4029,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_4029,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_402d = {
+	0x402d, pci_device_8086_402d,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_402d,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_402e = {
+	0x402e, pci_device_8086_402e,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_402e,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_402f = {
+	0x402f, pci_device_8086_402f,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_402f,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_4030 = {
+	0x4030, pci_device_8086_4030,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_4030,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_4032 = {
+	0x4032, pci_device_8086_4032,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_4032,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_4035 = {
+	0x4035, pci_device_8086_4035,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_4035,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_4036 = {
+	0x4036, pci_device_8086_4036,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_4036,
+#else
+	NULL,
+#endif
+	0
+};
 static const pciDeviceInfo pci_dev_info_8086_4220 = {
 	0x4220, pci_device_8086_4220,
 #ifdef INIT_SUBSYS_INFO
@@ -116742,6 +119502,159 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_8086_65c0 = {
+	0x65c0, pci_device_8086_65c0,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_65c0,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_65e2 = {
+	0x65e2, pci_device_8086_65e2,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_65e2,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_65e3 = {
+	0x65e3, pci_device_8086_65e3,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_65e3,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_65e4 = {
+	0x65e4, pci_device_8086_65e4,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_65e4,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_65e5 = {
+	0x65e5, pci_device_8086_65e5,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_65e5,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_65e6 = {
+	0x65e6, pci_device_8086_65e6,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_65e6,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_65e7 = {
+	0x65e7, pci_device_8086_65e7,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_65e7,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_65f0 = {
+	0x65f0, pci_device_8086_65f0,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_65f0,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_65f1 = {
+	0x65f1, pci_device_8086_65f1,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_65f1,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_65f3 = {
+	0x65f3, pci_device_8086_65f3,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_65f3,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_65f5 = {
+	0x65f5, pci_device_8086_65f5,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_65f5,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_65f6 = {
+	0x65f6, pci_device_8086_65f6,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_65f6,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_65f7 = {
+	0x65f7, pci_device_8086_65f7,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_65f7,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_65f8 = {
+	0x65f8, pci_device_8086_65f8,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_65f8,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_65f9 = {
+	0x65f9, pci_device_8086_65f9,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_65f9,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_65fa = {
+	0x65fa, pci_device_8086_65fa,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_65fa,
+#else
+	NULL,
+#endif
+	0
+};
+static const pciDeviceInfo pci_dev_info_8086_65ff = {
+	0x65ff, pci_device_8086_65ff,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_65ff,
+#else
+	NULL,
+#endif
+	0
+};
 static const pciDeviceInfo pci_dev_info_8086_7000 = {
 	0x7000, pci_device_8086_7000,
 #ifdef INIT_SUBSYS_INFO
@@ -117282,6 +120195,15 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 	0
 };
+static const pciDeviceInfo pci_dev_info_8086_a620 = {
+	0xa620, pci_device_8086_a620,
+#ifdef INIT_SUBSYS_INFO
+	pci_ss_list_8086_a620,
+#else
+	NULL,
+#endif
+	0
+};
 static const pciDeviceInfo pci_dev_info_8086_b152 = {
 	0xb152, pci_device_8086_b152,
 #ifdef INIT_SUBSYS_INFO
@@ -119389,10 +122311,35 @@ static const pciDeviceInfo pci_dev_info_
 #endif
 #define pci_dev_list_0000 NULL
 #define pci_dev_list_001a NULL
+#ifdef VENDOR_INCLUDE_NONVIDEO
+static const pciDeviceInfo *pci_dev_list_001c[] = {
+	&pci_dev_info_001c_0001,
+	NULL
+};
+#endif
 #define pci_dev_list_0033 NULL
 #define pci_dev_list_003d NULL
 #define pci_dev_list_0059 NULL
-#define pci_dev_list_0070 NULL
+#ifdef VENDOR_INCLUDE_NONVIDEO
+static const pciDeviceInfo *pci_dev_list_0070[] = {
+	&pci_dev_info_0070_0003,
+	&pci_dev_info_0070_0009,
+	&pci_dev_info_0070_0801,
+	&pci_dev_info_0070_0807,
+	&pci_dev_info_0070_4000,
+	&pci_dev_info_0070_4001,
+	&pci_dev_info_0070_4009,
+	&pci_dev_info_0070_4800,
+	&pci_dev_info_0070_4801,
+	&pci_dev_info_0070_4803,
+	&pci_dev_info_0070_8003,
+	&pci_dev_info_0070_8801,
+	&pci_dev_info_0070_c801,
+	&pci_dev_info_0070_e807,
+	&pci_dev_info_0070_e817,
+	NULL
+};
+#endif
 #define pci_dev_list_0071 NULL
 #ifdef VENDOR_INCLUDE_NONVIDEO
 static const pciDeviceInfo *pci_dev_list_0095[] = {
@@ -119436,6 +122383,7 @@ static const pciDeviceInfo *pci_dev_list
 	NULL
 };
 #endif
+#define pci_dev_list_0403 NULL
 #ifdef VENDOR_INCLUDE_NONVIDEO
 static const pciDeviceInfo *pci_dev_list_0432[] = {
 	&pci_dev_info_0432_0001,
@@ -119461,6 +122409,7 @@ static const pciDeviceInfo *pci_dev_list
 	&pci_dev_info_050d_001a,
 	&pci_dev_info_050d_0109,
 	&pci_dev_info_050d_7050,
+	&pci_dev_info_050d_705c,
 	NULL
 };
 #endif
@@ -119499,10 +122448,33 @@ static const pciDeviceInfo *pci_dev_list
 	NULL
 };
 #endif
+#define pci_dev_list_069d NULL
 #define pci_dev_list_0721 NULL
+#ifdef VENDOR_INCLUDE_NONVIDEO
+static const pciDeviceInfo *pci_dev_list_07ca[] = {
+	&pci_dev_info_07ca_b808,
+	NULL
+};
+#endif
 #define pci_dev_list_07e2 NULL
+#define pci_dev_list_0842 NULL
+#ifdef VENDOR_INCLUDE_NONVIDEO
+static const pciDeviceInfo *pci_dev_list_08ff[] = {
+	&pci_dev_info_08ff_afe4,
+	NULL
+};
+#endif
 #define pci_dev_list_0925 NULL
-#define pci_dev_list_093a NULL
+#ifdef VENDOR_INCLUDE_NONVIDEO
+static const pciDeviceInfo *pci_dev_list_093a[] = {
+	&pci_dev_info_093a_010e,
+	&pci_dev_info_093a_010f,
+	&pci_dev_info_093a_2468,
+	&pci_dev_info_093a_2603,
+	&pci_dev_info_093a_2608,
+	NULL
+};
+#endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
 static const pciDeviceInfo *pci_dev_list_09c1[] = {
 	&pci_dev_info_09c1_0704,
@@ -119511,15 +122483,27 @@ static const pciDeviceInfo *pci_dev_list
 #endif
 #define pci_dev_list_0a89 NULL
 #ifdef VENDOR_INCLUDE_NONVIDEO
+static const pciDeviceInfo *pci_dev_list_0ace[] = {
+	&pci_dev_info_0ace_1211,
+	NULL
+};
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
 static const pciDeviceInfo *pci_dev_list_0b0b[] = {
 	&pci_dev_info_0b0b_0105,
 	&pci_dev_info_0b0b_0205,
+	&pci_dev_info_0b0b_0206,
 	&pci_dev_info_0b0b_0305,
 	&pci_dev_info_0b0b_0405,
+	&pci_dev_info_0b0b_0406,
 	&pci_dev_info_0b0b_0505,
 	&pci_dev_info_0b0b_0506,
 	&pci_dev_info_0b0b_0605,
 	&pci_dev_info_0b0b_0705,
+	&pci_dev_info_0b0b_0706,
+	&pci_dev_info_0b0b_0905,
+	&pci_dev_info_0b0b_0906,
+	&pci_dev_info_0b0b_0a06,
 	NULL
 };
 #endif
@@ -119661,6 +122645,7 @@ static const pciDeviceInfo *pci_dev_list
 	&pci_dev_info_1000_0041,
 	&pci_dev_info_1000_0050,
 	&pci_dev_info_1000_0054,
+	&pci_dev_info_1000_0055,
 	&pci_dev_info_1000_0056,
 	&pci_dev_info_1000_0058,
 	&pci_dev_info_1000_005a,
@@ -119991,6 +122976,7 @@ static const pciDeviceInfo *pci_dev_list
 	&pci_dev_info_1002_5944,
 	&pci_dev_info_1002_5950,
 	&pci_dev_info_1002_5951,
+	&pci_dev_info_1002_5952,
 	&pci_dev_info_1002_5954,
 	&pci_dev_info_1002_5955,
 	&pci_dev_info_1002_5960,
@@ -120003,6 +122989,7 @@ static const pciDeviceInfo *pci_dev_list
 	&pci_dev_info_1002_5a33,
 	&pci_dev_info_1002_5a34,
 	&pci_dev_info_1002_5a36,
+	&pci_dev_info_1002_5a37,
 	&pci_dev_info_1002_5a38,
 	&pci_dev_info_1002_5a39,
 	&pci_dev_info_1002_5a3f,
@@ -120061,8 +123048,10 @@ static const pciDeviceInfo *pci_dev_list
 	&pci_dev_info_1002_7129,
 	&pci_dev_info_1002_7140,
 	&pci_dev_info_1002_7142,
+	&pci_dev_info_1002_7143,
 	&pci_dev_info_1002_7145,
 	&pci_dev_info_1002_7146,
+	&pci_dev_info_1002_7147,
 	&pci_dev_info_1002_7149,
 	&pci_dev_info_1002_714a,
 	&pci_dev_info_1002_714b,
@@ -120070,25 +123059,44 @@ static const pciDeviceInfo *pci_dev_list
 	&pci_dev_info_1002_714d,
 	&pci_dev_info_1002_714e,
 	&pci_dev_info_1002_7152,
+	&pci_dev_info_1002_7153,
 	&pci_dev_info_1002_715e,
+	&pci_dev_info_1002_715f,
 	&pci_dev_info_1002_7162,
 	&pci_dev_info_1002_7166,
 	&pci_dev_info_1002_7172,
+	&pci_dev_info_1002_7173,
 	&pci_dev_info_1002_7180,
 	&pci_dev_info_1002_7181,
+	&pci_dev_info_1002_7183,
+	&pci_dev_info_1002_7187,
+	&pci_dev_info_1002_7188,
+	&pci_dev_info_1002_718a,
+	&pci_dev_info_1002_718c,
+	&pci_dev_info_1002_718d,
+	&pci_dev_info_1002_7193,
+	&pci_dev_info_1002_719b,
+	&pci_dev_info_1002_719f,
 	&pci_dev_info_1002_71a0,
 	&pci_dev_info_1002_71a1,
+	&pci_dev_info_1002_71a3,
+	&pci_dev_info_1002_71a7,
+	&pci_dev_info_1002_71bb,
 	&pci_dev_info_1002_71c0,
 	&pci_dev_info_1002_71c2,
 	&pci_dev_info_1002_71c4,
 	&pci_dev_info_1002_71c5,
 	&pci_dev_info_1002_71c6,
+	&pci_dev_info_1002_71c7,
 	&pci_dev_info_1002_71ce,
 	&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_71e7,
+	&pci_dev_info_1002_7210,
+	&pci_dev_info_1002_7211,
 	&pci_dev_info_1002_7240,
 	&pci_dev_info_1002_7241,
 	&pci_dev_info_1002_7242,
@@ -120105,11 +123113,23 @@ static const pciDeviceInfo *pci_dev_list
 	&pci_dev_info_1002_724d,
 	&pci_dev_info_1002_724e,
 	&pci_dev_info_1002_7269,
+	&pci_dev_info_1002_726b,
 	&pci_dev_info_1002_726e,
+	&pci_dev_info_1002_7280,
+	&pci_dev_info_1002_7288,
+	&pci_dev_info_1002_7291,
+	&pci_dev_info_1002_7293,
+	&pci_dev_info_1002_72a0,
+	&pci_dev_info_1002_72a8,
+	&pci_dev_info_1002_72b1,
+	&pci_dev_info_1002_72b3,
 	&pci_dev_info_1002_7833,
 	&pci_dev_info_1002_7834,
 	&pci_dev_info_1002_7835,
 	&pci_dev_info_1002_7838,
+	&pci_dev_info_1002_791e,
+	&pci_dev_info_1002_791f,
+	&pci_dev_info_1002_793f,
 	&pci_dev_info_1002_7c37,
 	&pci_dev_info_1002_cab0,
 	&pci_dev_info_1002_cab2,
@@ -120421,6 +123441,7 @@ static const pciDeviceInfo *pci_dev_list
 	&pci_dev_info_1022_2003,
 	&pci_dev_info_1022_2020,
 	&pci_dev_info_1022_2040,
+	&pci_dev_info_1022_2080,
 	&pci_dev_info_1022_2081,
 	&pci_dev_info_1022_2082,
 	&pci_dev_info_1022_208f,
@@ -120587,6 +123608,7 @@ static const pciDeviceInfo *pci_dev_list
 	&pci_dev_info_1028_0001,
 	&pci_dev_info_1028_0002,
 	&pci_dev_info_1028_0003,
+	&pci_dev_info_1028_0004,
 	&pci_dev_info_1028_0006,
 	&pci_dev_info_1028_0007,
 	&pci_dev_info_1028_0008,
@@ -120602,6 +123624,7 @@ 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
@@ -120673,6 +123696,7 @@ static const pciDeviceInfo *pci_dev_list
 	&pci_dev_info_102f_0020,
 	&pci_dev_info_102f_0030,
 	&pci_dev_info_102f_0031,
+	&pci_dev_info_102f_0032,
 	&pci_dev_info_102f_0105,
 	&pci_dev_info_102f_0106,
 	&pci_dev_info_102f_0107,
@@ -120888,10 +123912,13 @@ static const pciDeviceInfo *pci_dev_list
 	&pci_dev_info_103c_12ee,
 	&pci_dev_info_103c_12f8,
 	&pci_dev_info_103c_12fa,
+	&pci_dev_info_103c_1302,
+	&pci_dev_info_103c_1303,
 	&pci_dev_info_103c_2910,
 	&pci_dev_info_103c_2925,
 	&pci_dev_info_103c_3080,
 	&pci_dev_info_103c_3085,
+	&pci_dev_info_103c_30b5,
 	&pci_dev_info_103c_3220,
 	&pci_dev_info_103c_3230,
 	&pci_dev_info_103c_4030,
@@ -120931,8 +123958,10 @@ static const pciDeviceInfo *pci_dev_list
 	&pci_dev_info_1043_80c5,
 	&pci_dev_info_1043_80df,
 	&pci_dev_info_1043_815a,
+	&pci_dev_info_1043_8168,
 	&pci_dev_info_1043_8187,
 	&pci_dev_info_1043_8188,
+	&pci_dev_info_1043_81f4,
 	NULL
 };
 #endif
@@ -121164,6 +124193,7 @@ static const pciDeviceInfo *pci_dev_list
 	&pci_dev_info_1057_1801,
 	&pci_dev_info_1057_18c0,
 	&pci_dev_info_1057_18c1,
+	&pci_dev_info_1057_3052,
 	&pci_dev_info_1057_3055,
 	&pci_dev_info_1057_3410,
 	&pci_dev_info_1057_4801,
@@ -121222,7 +124252,9 @@ static const pciDeviceInfo *pci_dev_list
 	&pci_dev_info_105a_7275,
 	&pci_dev_info_105a_8002,
 	&pci_dev_info_105a_8350,
+	&pci_dev_info_105a_8650,
 	&pci_dev_info_105a_c350,
+	&pci_dev_info_105a_e350,
 	NULL
 };
 #endif
@@ -121415,6 +124447,7 @@ static const pciDeviceInfo *pci_dev_list
 	&pci_dev_info_1073_0010,
 	&pci_dev_info_1073_0012,
 	&pci_dev_info_1073_0020,
+	&pci_dev_info_1073_1000,
 	&pci_dev_info_1073_2000,
 	NULL
 };
@@ -121774,6 +124807,8 @@ static const pciDeviceInfo *pci_dev_list
 	&pci_dev_info_10a9_4002,
 	&pci_dev_info_10a9_8001,
 	&pci_dev_info_10a9_8002,
+	&pci_dev_info_10a9_8010,
+	&pci_dev_info_10a9_8018,
 	NULL
 };
 #endif
@@ -123748,6 +126783,7 @@ static const pciDeviceInfo *pci_dev_list
 	&pci_dev_info_1166_0140,
 	&pci_dev_info_1166_0141,
 	&pci_dev_info_1166_0142,
+	&pci_dev_info_1166_0144,
 	&pci_dev_info_1166_0200,
 	&pci_dev_info_1166_0201,
 	&pci_dev_info_1166_0203,
@@ -128664,6 +131700,34 @@ 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_2920,
+	&pci_dev_info_8086_2921,
+	&pci_dev_info_8086_2922,
+	&pci_dev_info_8086_2923,
+	&pci_dev_info_8086_2925,
+	&pci_dev_info_8086_2926,
+	&pci_dev_info_8086_2928,
+	&pci_dev_info_8086_292d,
+	&pci_dev_info_8086_292e,
+	&pci_dev_info_8086_2930,
+	&pci_dev_info_8086_2932,
+	&pci_dev_info_8086_2934,
+	&pci_dev_info_8086_2935,
+	&pci_dev_info_8086_2936,
+	&pci_dev_info_8086_2937,
+	&pci_dev_info_8086_2938,
+	&pci_dev_info_8086_2939,
+	&pci_dev_info_8086_293a,
+	&pci_dev_info_8086_293c,
+	&pci_dev_info_8086_293e,
+	&pci_dev_info_8086_2940,
+	&pci_dev_info_8086_2942,
+	&pci_dev_info_8086_2944,
+	&pci_dev_info_8086_2946,
+	&pci_dev_info_8086_2948,
+	&pci_dev_info_8086_294a,
+	&pci_dev_info_8086_294c,
 	&pci_dev_info_8086_2970,
 	&pci_dev_info_8086_2971,
 	&pci_dev_info_8086_2972,
@@ -128691,6 +131755,37 @@ static const pciDeviceInfo *pci_dev_list
 	&pci_dev_info_8086_29a5,
 	&pci_dev_info_8086_29a6,
 	&pci_dev_info_8086_29a7,
+	&pci_dev_info_8086_29b0,
+	&pci_dev_info_8086_29b1,
+	&pci_dev_info_8086_29b2,
+	&pci_dev_info_8086_29b3,
+	&pci_dev_info_8086_29b4,
+	&pci_dev_info_8086_29b5,
+	&pci_dev_info_8086_29b6,
+	&pci_dev_info_8086_29b7,
+	&pci_dev_info_8086_29c0,
+	&pci_dev_info_8086_29c1,
+	&pci_dev_info_8086_29c2,
+	&pci_dev_info_8086_29c3,
+	&pci_dev_info_8086_29c4,
+	&pci_dev_info_8086_29c5,
+	&pci_dev_info_8086_29c6,
+	&pci_dev_info_8086_29c7,
+	&pci_dev_info_8086_29cf,
+	&pci_dev_info_8086_29e0,
+	&pci_dev_info_8086_29e1,
+	&pci_dev_info_8086_29e4,
+	&pci_dev_info_8086_29e5,
+	&pci_dev_info_8086_29e6,
+	&pci_dev_info_8086_29e7,
+	&pci_dev_info_8086_29e9,
+	&pci_dev_info_8086_29f0,
+	&pci_dev_info_8086_29f1,
+	&pci_dev_info_8086_29f4,
+	&pci_dev_info_8086_29f5,
+	&pci_dev_info_8086_29f6,
+	&pci_dev_info_8086_29f7,
+	&pci_dev_info_8086_29f9,
 	&pci_dev_info_8086_2a00,
 	&pci_dev_info_8086_2a01,
 	&pci_dev_info_8086_2a02,
@@ -128743,6 +131838,39 @@ static const pciDeviceInfo *pci_dev_list
 	&pci_dev_info_8086_35b6,
 	&pci_dev_info_8086_35b7,
 	&pci_dev_info_8086_35c8,
+	&pci_dev_info_8086_3600,
+	&pci_dev_info_8086_3604,
+	&pci_dev_info_8086_3605,
+	&pci_dev_info_8086_3606,
+	&pci_dev_info_8086_3607,
+	&pci_dev_info_8086_3608,
+	&pci_dev_info_8086_3609,
+	&pci_dev_info_8086_360a,
+	&pci_dev_info_8086_360b,
+	&pci_dev_info_8086_360c,
+	&pci_dev_info_8086_360d,
+	&pci_dev_info_8086_360e,
+	&pci_dev_info_8086_360f,
+	&pci_dev_info_8086_3610,
+	&pci_dev_info_8086_4000,
+	&pci_dev_info_8086_4008,
+	&pci_dev_info_8086_4010,
+	&pci_dev_info_8086_4021,
+	&pci_dev_info_8086_4022,
+	&pci_dev_info_8086_4023,
+	&pci_dev_info_8086_4024,
+	&pci_dev_info_8086_4025,
+	&pci_dev_info_8086_4026,
+	&pci_dev_info_8086_4027,
+	&pci_dev_info_8086_4028,
+	&pci_dev_info_8086_4029,
+	&pci_dev_info_8086_402d,
+	&pci_dev_info_8086_402e,
+	&pci_dev_info_8086_402f,
+	&pci_dev_info_8086_4030,
+	&pci_dev_info_8086_4032,
+	&pci_dev_info_8086_4035,
+	&pci_dev_info_8086_4036,
 	&pci_dev_info_8086_4220,
 	&pci_dev_info_8086_4222,
 	&pci_dev_info_8086_4223,
@@ -128752,6 +131880,23 @@ static const pciDeviceInfo *pci_dev_list
 	&pci_dev_info_8086_5200,
 	&pci_dev_info_8086_5201,
 	&pci_dev_info_8086_530d,
+	&pci_dev_info_8086_65c0,
+	&pci_dev_info_8086_65e2,
+	&pci_dev_info_8086_65e3,
+	&pci_dev_info_8086_65e4,
+	&pci_dev_info_8086_65e5,
+	&pci_dev_info_8086_65e6,
+	&pci_dev_info_8086_65e7,
+	&pci_dev_info_8086_65f0,
+	&pci_dev_info_8086_65f1,
+	&pci_dev_info_8086_65f3,
+	&pci_dev_info_8086_65f5,
+	&pci_dev_info_8086_65f6,
+	&pci_dev_info_8086_65f7,
+	&pci_dev_info_8086_65f8,
+	&pci_dev_info_8086_65f9,
+	&pci_dev_info_8086_65fa,
+	&pci_dev_info_8086_65ff,
 	&pci_dev_info_8086_7000,
 	&pci_dev_info_8086_7010,
 	&pci_dev_info_8086_7020,
@@ -128812,6 +131957,7 @@ static const pciDeviceInfo *pci_dev_list
 	&pci_dev_info_8086_9622,
 	&pci_dev_info_8086_9641,
 	&pci_dev_info_8086_96a1,
+	&pci_dev_info_8086_a620,
 	&pci_dev_info_8086_b152,
 	&pci_dev_info_8086_b154,
 	&pci_dev_info_8086_b555,
@@ -129243,6 +132389,9 @@ static const pciVendorInfo pciVendorInfo
 	{0x001a, pci_vendor_001a, pci_dev_list_001a},
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
+	{0x001c, pci_vendor_001c, pci_dev_list_001c},
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
 	{0x0033, pci_vendor_0033, pci_dev_list_0033},
 #endif
 	{0x003d, pci_vendor_003d, pci_dev_list_003d},
@@ -129292,6 +132441,9 @@ static const pciVendorInfo pciVendorInfo
 	{0x0357, pci_vendor_0357, pci_dev_list_0357},
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
+	{0x0403, pci_vendor_0403, pci_dev_list_0403},
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
 	{0x0432, pci_vendor_0432, pci_dev_list_0432},
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
@@ -129322,12 +132474,24 @@ static const pciVendorInfo pciVendorInfo
 	{0x067b, pci_vendor_067b, pci_dev_list_067b},
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
+	{0x069d, pci_vendor_069d, pci_dev_list_069d},
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
 	{0x0721, pci_vendor_0721, pci_dev_list_0721},
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
+	{0x07ca, pci_vendor_07ca, pci_dev_list_07ca},
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
 	{0x07e2, pci_vendor_07e2, pci_dev_list_07e2},
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
+	{0x0842, pci_vendor_0842, pci_dev_list_0842},
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
+	{0x08ff, pci_vendor_08ff, pci_dev_list_08ff},
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
 	{0x0925, pci_vendor_0925, pci_dev_list_0925},
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
@@ -129340,6 +132504,9 @@ static const pciVendorInfo pciVendorInfo
 	{0x0a89, pci_vendor_0a89, pci_dev_list_0a89},
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
+	{0x0ace, pci_vendor_0ace, pci_dev_list_0ace},
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
 	{0x0b0b, pci_vendor_0b0b, pci_dev_list_0b0b},
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
@@ -134702,6 +137869,9 @@ static const pciVendorSubsysInfo pciVend
 	{0x001a, pci_vendor_001a, pci_ss_list_001a},
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
+	{0x001c, pci_vendor_001c, pci_ss_list_001c},
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
 	{0x0033, pci_vendor_0033, pci_ss_list_0033},
 #endif
 	{0x003d, pci_vendor_003d, pci_ss_list_003d},
@@ -134751,6 +137921,9 @@ static const pciVendorSubsysInfo pciVend
 	{0x0357, pci_vendor_0357, pci_ss_list_0357},
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
+	{0x0403, pci_vendor_0403, pci_ss_list_0403},
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
 	{0x0432, pci_vendor_0432, pci_ss_list_0432},
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
@@ -134781,12 +137954,24 @@ static const pciVendorSubsysInfo pciVend
 	{0x067b, pci_vendor_067b, pci_ss_list_067b},
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
+	{0x069d, pci_vendor_069d, pci_ss_list_069d},
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
 	{0x0721, pci_vendor_0721, pci_ss_list_0721},
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
+	{0x07ca, pci_vendor_07ca, pci_ss_list_07ca},
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
 	{0x07e2, pci_vendor_07e2, pci_ss_list_07e2},
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
+	{0x0842, pci_vendor_0842, pci_ss_list_0842},
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
+	{0x08ff, pci_vendor_08ff, pci_ss_list_08ff},
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
 	{0x0925, pci_vendor_0925, pci_ss_list_0925},
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
@@ -134799,6 +137984,9 @@ static const pciVendorSubsysInfo pciVend
 	{0x0a89, pci_vendor_0a89, pci_ss_list_0a89},
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
+	{0x0ace, pci_vendor_0ace, pci_ss_list_0ace},
+#endif
+#ifdef VENDOR_INCLUDE_NONVIDEO
 	{0x0b0b, pci_vendor_0b0b, pci_ss_list_0b0b},
 #endif
 #ifdef VENDOR_INCLUDE_NONVIDEO
diff-tree 0f0c321adf2850b3d7aafe281362bfe424cb0ca1 (from a811e92104028ae60ba69f73e32ee1e0533b088c)
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Thu Jan 18 15:31:53 2007 -0800

    Make xf1bpp build correctly with compilers that don't support -include

diff --git a/hw/xfree86/xf1bpp/Makefile.am b/hw/xfree86/xf1bpp/Makefile.am
index e7c873a..6d510d1 100644
--- a/hw/xfree86/xf1bpp/Makefile.am
+++ b/hw/xfree86/xf1bpp/Makefile.am
@@ -27,128 +27,156 @@ libxf1bppgen_a_SOURCES = \
         mfbtileC.c \
         mfbtileG.c
 
-DISTCLEANFILES = $(libxf1bppgen_a_SOURCES)
-
 libxf1bppmfb_a_SOURCES = \
-        $(top_srcdir)/mfb/maskbits.c \
-        $(top_srcdir)/mfb/mfbbitblt.c \
-        $(top_srcdir)/mfb/mfbbres.c \
-        $(top_srcdir)/mfb/mfbbresd.c \
-        $(top_srcdir)/mfb/mfbbstore.c \
-        $(top_srcdir)/mfb/mfbclip.c \
-        $(top_srcdir)/mfb/mfbcmap.c \
-        $(top_srcdir)/mfb/mfbfillarc.c \
-        $(top_srcdir)/mfb/mfbfillrct.c \
-        $(top_srcdir)/mfb/mfbfillsp.c \
-        $(top_srcdir)/mfb/mfbfont.c \
-        $(top_srcdir)/mfb/mfbgc.c \
-        $(top_srcdir)/mfb/mfbgetsp.c \
-        $(top_srcdir)/mfb/mfbhrzvert.c \
-        $(top_srcdir)/mfb/mfbimage.c \
-        $(top_srcdir)/mfb/mfbline.c \
-        $(top_srcdir)/mfb/mfbmisc.c \
-        $(top_srcdir)/mfb/mfbpixmap.c \
-        $(top_srcdir)/mfb/mfbpntwin.c \
-        $(top_srcdir)/mfb/mfbpolypnt.c \
-        $(top_srcdir)/mfb/mfbpushpxl.c \
-        $(top_srcdir)/mfb/mfbscrclse.c \
-        $(top_srcdir)/mfb/mfbscrinit.c \
-        $(top_srcdir)/mfb/mfbsetsp.c \
-        $(top_srcdir)/mfb/mfbwindow.c \
-        $(top_srcdir)/mfb/mfbzerarc.c \
-        mfbmodule.c
+        maskbits.c \
+        mfbbitblt.c \
+        mfbbres.c \
+        mfbbresd.c \
+        mfbbstore.c \
+        mfbclip.c \
+        mfbcmap.c \
+        mfbfillarc.c \
+        mfbfillrct.c \
+        mfbfillsp.c \
+        mfbfont.c \
+        mfbgc.c \
+        mfbgetsp.c \
+        mfbhrzvert.c \
+        mfbimage.c \
+        mfbline.c \
+        mfbmisc.c \
+        mfbpixmap.c \
+        mfbpntwin.c \
+        mfbpolypnt.c \
+        mfbpushpxl.c \
+        mfbscrclse.c \
+        mfbscrinit.c \
+        mfbsetsp.c \
+        mfbwindow.c \
+        mfbzerarc.c
+
+BUILT_SOURCES = $(libxf1bppgen_a_SOURCES) $(libxf1bppgen_a_SOURCES)
 
-libxf1bpp_la_SOURCES = $(libxf1bppmfb_a_SOURCES) $(libxf1bppgen_a_SOURCES)
+libxf1bpp_la_SOURCES = $(libxf1bppmfb_a_SOURCES) $(libxf1bppgen_a_SOURCES) \
+        mfbmodule.c
 
-AM_CFLAGS = -DXF86MONO -include mfbmap.h $(DIX_CFLAGS) $(XORG_CFLAGS)
+AM_CFLAGS = -DXF86MONO $(DIX_CFLAGS) $(XORG_CFLAGS)
 INCLUDES = $(XORG_INCS) -I$(top_srcdir)/mfb
 
 mfbseg.c:
 	echo "#define POLYSEGMENT" > $@
+	echo "#include \"mfbmap.h\"" >> $@
 	echo "#include \"$(top_srcdir)/mfb/mfbline.c\"" >> $@
 mfbpgbwht.c:
 	echo "#define MFBPOLYGLYPHBLT xf1bppPolyGlyphBltWhite" > $@
 	echo "#define OPEQ |=" >> $@
+	echo "#include \"mfbmap.h\"" >> $@
 	echo "#include \"$(top_srcdir)/mfb/mfbplygblt.c\"" >> $@
 mfbpgbblak.c:
 	echo "#define MFBPOLYGLYPHBLT xf1bppPolyGlyphBltBlack" > $@
 	echo "#define OPEQ &=~" >> $@
+	echo "#include \"mfbmap.h\"" >> $@
 	echo "#include \"$(top_srcdir)/mfb/mfbplygblt.c\"" >> $@
 mfbpgbinv.c:
 	echo "#define MFBPOLYGLYPHBLT xf1bppPolyGlyphBltInvert" > $@
 	echo "#define OPEQ ^=" >> $@
+	echo "#include \"mfbmap.h\"" >> $@
 	echo "#include \"$(top_srcdir)/mfb/mfbplygblt.c\"" >> $@
 mfbigbwht.c:
 	echo "#define MFBIMAGEGLYPHBLT xf1bppImageGlyphBltWhite" > $@
 	echo "#define OPEQ |=" >> $@
+	echo "#include \"mfbmap.h\"" >> $@
 	echo "#include \"$(top_srcdir)/mfb/mfbimggblt.c\"" >> $@
 mfbigbblak.c:
 	echo "#define MFBIMAGEGLYPHBLT xf1bppImageGlyphBltBlack" > $@
 	echo "#define OPEQ &=~" >> $@
+	echo "#include \"mfbmap.h\"" >> $@
 	echo "#include \"$(top_srcdir)/mfb/mfbimggblt.c\"" >> $@
 mfbpawhite.c:
 	echo "#define MFBSOLIDFILLAREA xf1bppSolidWhiteArea" > $@
 	echo "#define MFBSTIPPLEFILLAREA xf1bppStippleWhiteArea" >> $@
 	echo "#define OPEQ |=" >> $@
 	echo "#define EQWHOLEWORD =~0" >> $@
+	echo "#include \"mfbmap.h\"" >> $@
 	echo "#include \"$(top_srcdir)/mfb/mfbpntarea.c\"" >> $@
 mfbpablack.c:
 	echo "#define MFBSOLIDFILLAREA xf1bppSolidBlackArea" > $@
 	echo "#define MFBSTIPPLEFILLAREA xf1bppStippleBlackArea" >> $@
 	echo "#define OPEQ &=~" >> $@
 	echo "#define EQWHOLEWORD =0" >> $@
+	echo "#include \"mfbmap.h\"" >> $@
 	echo "#include \"$(top_srcdir)/mfb/mfbpntarea.c\"" >> $@
 mfbpainv.c:
 	echo "#define MFBSOLIDFILLAREA xf1bppSolidInvertArea" > $@
 	echo "#define MFBSTIPPLEFILLAREA xf1bppStippleInvertArea" >> $@
 	echo "#define OPEQ ^=" >> $@
 	echo "#define EQWHOLEWORD ^=~0" >> $@
+	echo "#include \"mfbmap.h\"" >> $@
 	echo "#include \"$(top_srcdir)/mfb/mfbpntarea.c\"" >> $@
 mfbtewhite.c:
 	echo "#define OP" > $@
 	echo "#define CLIPTETEXT xf1bppImageGlyphBltWhite" >> $@
 	echo "#define MFBTEGLYPHBLT xf1bppTEGlyphBltWhite" >> $@
+	echo "#include \"mfbmap.h\"" >> $@
 	echo "#include \"$(top_srcdir)/mfb/mfbtegblt.c\"" >> $@
 mfbteblack.c:
 	echo "#define OP ~" > $@
 	echo "#define CLIPTETEXT xf1bppImageGlyphBltBlack" >> $@
 	echo "#define MFBTEGLYPHBLT xf1bppTEGlyphBltBlack" >> $@
+	echo "#include \"mfbmap.h\"" >> $@
 	echo "#include \"$(top_srcdir)/mfb/mfbtegblt.c\"" >> $@
 mfbplywhite.c:
 	echo "#define MFBFILLPOLY1RECT xf1bppFillPolyWhite" > $@
 	echo "#define OPEQ |=" >> $@
 	echo "#define EQWHOLEWORD =~0" >> $@
+	echo "#include \"mfbmap.h\"" >> $@
 	echo "#include \"$(top_srcdir)/mfb/mfbply1rct.c\"" >> $@
 mfbplyblack.c:
 	echo "#define MFBFILLPOLY1RECT xf1bppFillPolyBlack" > $@
 	echo "#define OPEQ &=~" >> $@
 	echo "#define EQWHOLEWORD =0" >> $@
+	echo "#include \"mfbmap.h\"" >> $@
 	echo "#include \"$(top_srcdir)/mfb/mfbply1rct.c\"" >> $@
 mfbplyinv.c:
 	echo "#define MFBFILLPOLY1RECT xf1bppFillPolyInvert" > $@
 	echo "#define OPEQ ^=" >> $@
 	echo "#define EQWHOLEWORD ^=~0" >> $@
+	echo "#include \"mfbmap.h\"" >> $@
 	echo "#include \"$(top_srcdir)/mfb/mfbply1rct.c\"" >> $@
 mfbbltC.c:
 	echo "#define MROP Mcopy" > $@
+	echo "#include \"mfbmap.h\"" >> $@
 	echo "#include \"$(top_srcdir)/mfb/mfbblt.c\"" >> $@
 mfbbltX.c:
 	echo "#define MROP Mxor" > $@
+	echo "#include \"mfbmap.h\"" >> $@
 	echo "#include \"$(top_srcdir)/mfb/mfbblt.c\"" >> $@
 mfbbltCI.c:
 	echo "#define MROP McopyInverted" > $@
+	echo "#include \"mfbmap.h\"" >> $@
 	echo "#include \"$(top_srcdir)/mfb/mfbblt.c\"" >> $@
 mfbbltO.c:
 	echo "#define MROP Mor" > $@
+	echo "#include \"mfbmap.h\"" >> $@
 	echo "#include \"$(top_srcdir)/mfb/mfbblt.c\"" >> $@
 mfbbltG.c:
 	echo "#define MROP M0" > $@
+	echo "#include \"mfbmap.h\"" >> $@
 	echo "#include \"$(top_srcdir)/mfb/mfbblt.c\"" >> $@
 mfbtileC.c:
 	echo "#define MROP Mcopy" > $@
+	echo "#include \"mfbmap.h\"" >> $@
 	echo "#include \"$(top_srcdir)/mfb/mfbtile.c\"" >> $@
 mfbtileG.c:
 	echo "#define MRop M0" > $@
+	echo "#include \"mfbmap.h\"" >> $@
 	echo "#include \"$(top_srcdir)/mfb/mfbtile.c\"" >> $@
 
+$(libxf1bppmfb_a_SOURCES):
+	for i in $(libxf1bppmfb_a_SOURCES) ; do \
+		echo "#include \"mfbmap.h\"" > $$i ; \
+		echo "#include \"$(top_srcdir)/mfb/$$i\"" >> $$i ; \
+	done
+
+
 EXTRA_DIST = mfbmap.sh mfbunmap.sh 
diff-tree a811e92104028ae60ba69f73e32ee1e0533b088c (from df147c10ce597c56c16cbca552e8a3e3ecb3cdaa)
Author: Eric Anholt <eric at anholt.net>
Date:   Thu Jan 18 14:28:01 2007 -0800

    Account for CRTC rotation in the cursor containment code.

diff --git a/randr/rrpointer.c b/randr/rrpointer.c
index c092e49..2a5ae7d 100644
--- a/randr/rrpointer.c
+++ b/randr/rrpointer.c
@@ -22,6 +22,32 @@
 
 #include "randrstr.h"
 
+/**
+ * Returns the width/height that the crtc scans out from the framebuffer
+ */
+static void
+RRCrtcGetScanoutSize(RRCrtcPtr crtc, int *width, int *height)
+{
+    if (crtc->mode == NULL) {
+	*width = 0;
+	*height = 0;
+	return;
+    }
+
+    switch (crtc->rotation & 0xf) {
+    case RR_Rotate_0:
+    case RR_Rotate_180:
+	*width = crtc->mode->mode.width;
+	*height = crtc->mode->mode.height;
+	break;
+    case RR_Rotate_90:
+    case RR_Rotate_270:
+	*width = crtc->mode->mode.height;
+	*height = crtc->mode->mode.width;
+	break;
+    }
+}
+
 /*
  * When the pointer moves, check to see if the specified position is outside
  * any of theavailable CRTCs and move it to a 'sensible' place if so, where
@@ -34,11 +60,15 @@ static Bool
 RRCrtcContainsPosition (RRCrtcPtr crtc, int x, int y)
 {
     RRModePtr   mode = crtc->mode;
-    
+    int		scan_width, scan_height;
+
     if (!mode)
 	return FALSE;
-    if (crtc->x <= x && x < crtc->x + mode->mode.width &&
-	crtc->y <= y && y < crtc->y + mode->mode.height)
+
+    RRCrtcGetScanoutSize (crtc, &scan_width, &scan_height);
+
+    if (crtc->x <= x && x < crtc->x + scan_width &&
+	crtc->y <= y && y < crtc->y + scan_height)
 	return TRUE;
     return FALSE;
 }
@@ -54,28 +84,32 @@ RRPointerToNearestCrtc (ScreenPtr pScree
     RRCrtcPtr	nearest = NULL;
     int		best = 0;
     int		best_dx = 0, best_dy = 0;
-    
+
     for (c = 0; c < pScrPriv->numCrtcs; c++)
     {
 	RRCrtcPtr   crtc = pScrPriv->crtcs[c];
 	RRModePtr   mode = crtc->mode;
 	int	    dx, dy;
 	int	    dist;
+	int	    scan_width, scan_height;
 
 	if (!mode)
 	    continue;
 	if (crtc == skip)
 	    continue;
+
+	RRCrtcGetScanoutSize (crtc, &scan_width, &scan_height);
+
 	if (x < crtc->x)
 	    dx = crtc->x - x;
-	else if (x > crtc->x + mode->mode.width)
-	    dx = x - (crtc->x + mode->mode.width);
+	else if (x > crtc->x + scan_width)
+	    dx = x - (crtc->x + scan_width);
 	else
 	    dx = 0;
 	if (y < crtc->y)
 	    dy = crtc->y - x;
-	else if (y > crtc->y + mode->mode.height)
-	    dy = y - (crtc->y + mode->mode.height);
+	else if (y > crtc->y + scan_height)
+	    dy = y - (crtc->y + scan_height);
 	else
 	    dy = 0;
 	dist = dx + dy;
diff-tree df147c10ce597c56c16cbca552e8a3e3ecb3cdaa (from 2dfd1aab244a2c8da3b62b522b9a8434e474af17)
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Wed Jan 17 16:47:07 2007 -0800

    Xserver man page: remove bc, add -wr

diff --git a/doc/Xserver.man.pre b/doc/Xserver.man.pre
index 2457edf..7cf3c26 100644
--- a/doc/Xserver.man.pre
+++ b/doc/Xserver.man.pre
@@ -100,11 +100,6 @@ specifies a file which contains a collec
 to authenticate access.  See also the \fIxdm\fP(1) and 
 \fIXsecurity\fP(__miscmansuffix__) manual pages.
 .TP 8
-.B bc
-disables certain kinds of error checking, for bug compatibility with
-previous releases (e.g., to work around bugs in R2 and R3 xterms and toolkits).
-Deprecated.
-.TP 8
 .B \-bs
 disables backing store support on all screens.
 .TP 8
@@ -266,6 +261,10 @@ required by the X protocol, which allows
 client's backing store expectations but does not provide a way to tell
 the client that it is doing so.
 .TP 8
+.B \-wr
+sets the default root window to solid white instead of the standard root weave
+pattern.
+.TP 8
 .B \-x \fIextension\fP
 loads the specified extension at init.
 This is a no-op for most implementations.
diff-tree 2dfd1aab244a2c8da3b62b522b9a8434e474af17 (from 42a48786acf54f83167de4f561526986d4e27033)
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Wed Jan 17 14:39:28 2007 -0800

    Always include compiler.h in cfbmskbits.h instead of checking #ifdef XFREE86

diff --git a/cfb/cfbmskbits.h b/cfb/cfbmskbits.h
index 7aa446c..6076269 100644
--- a/cfb/cfbmskbits.h
+++ b/cfb/cfbmskbits.h
@@ -32,10 +32,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include	<X11/X.h>
 #include	<X11/Xmd.h>
 #include	"servermd.h"
-#if defined(XFREE86) || ( defined(__OpenBSD__) && defined(__alpha__) ) \
-	|| (defined(__bsdi__))
 #include	"compiler.h"
-#endif
 
 /*
  * ==========================================================================
diff-tree 42a48786acf54f83167de4f561526986d4e27033 (from cde17015dff1ced2aabb8b76c08f9110237821a5)
Author: Eric Anholt <eric at anholt.net>
Date:   Wed Jan 17 14:34:42 2007 -0800

    Add a setter for randr_crtc->rotations.

diff --git a/randr/randrstr.h b/randr/randrstr.h
index 136a47e..99022c3 100644
--- a/randr/randrstr.h
+++ b/randr/randrstr.h
@@ -543,6 +543,13 @@ RRCrtcGammaSetSize (RRCrtcPtr	crtc,
 		    int		size);
 
 /*
+ * Set the allowable rotations of the CRTC.
+ */
+Bool
+RRCrtcSetRotations (RRCrtcPtr crtc,
+		    Rotation rotations);
+
+/*
  * Destroy a Crtc at shutdown
  */
 void
diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
index 0767420..cfd4da9 100644
--- a/randr/rrcrtc.c
+++ b/randr/rrcrtc.c
@@ -427,6 +427,16 @@ RRCrtcGammaSetSize (RRCrtcPtr	crtc,
 }
 
 /*
+ * Set the allowable rotations of the CRTC.
+ */
+Bool
+RRCrtcSetRotations (RRCrtcPtr crtc,
+		    Rotation rotations)
+{
+    crtc->rotations = rotations;
+}
+
+/*
  * Initialize crtc type
  */
 Bool
diff-tree cde17015dff1ced2aabb8b76c08f9110237821a5 (from e3add7c8ecbb2a0a662860f208f6ae7d1857c717)
Author: Eric Anholt <eric at anholt.net>
Date:   Tue Jan 16 13:01:03 2007 -0800

    When changing a non-pending property, call the screen rrOutputSetProperty hook.

diff --git a/randr/rrproperty.c b/randr/rrproperty.c
index 4b77d39..916caf0 100644
--- a/randr/rrproperty.c
+++ b/randr/rrproperty.c
@@ -125,6 +125,7 @@ RRChangeOutputProperty (RROutputPtr outp
 {
     RRPropertyPtr		    prop;
     xRROutputPropertyNotifyEvent    event;
+    rrScrPrivPtr		    pScrPriv = rrGetScrPriv(output->pScreen);
     int				    sizeInBytes;
     int				    totalSize;
     pointer			    data;
@@ -213,6 +214,13 @@ RRChangeOutputProperty (RROutputPtr outp
 	prop->next = output->properties;
 	output->properties = prop;
     }
+
+    if (!prop->is_pending) {
+	/* What should we do in case of failure? */
+	pScrPriv->rrOutputSetProperty(output->pScreen, output,
+				      prop->propertyName, prop_value);
+    }
+
     if (sendevent)
     {
 	event.type = RREventBase + RRNotify;
diff-tree e3add7c8ecbb2a0a662860f208f6ae7d1857c717 (from 7fccec91c46baac4f8d2965180dc535b4eb7d65c)
Author: Eric Anholt <eric at anholt.net>
Date:   Tue Jan 16 12:59:34 2007 -0800

    Don't forget to add the property we configure to the properties list.

diff --git a/randr/rrproperty.c b/randr/rrproperty.c
index 56bb39a..4b77d39 100644
--- a/randr/rrproperty.c
+++ b/randr/rrproperty.c
@@ -298,6 +298,12 @@ RRConfigureOutputProperty (RROutputPtr o
     if (prop->valid_values)
 	xfree (prop->valid_values);
     prop->valid_values = new_values;
+
+    if (add) {
+	prop->next = output->properties;
+	output->properties = prop;
+    }
+
     return Success;
 }
 
diff-tree 7fccec91c46baac4f8d2965180dc535b4eb7d65c (from 78f9592c112d4245f6119b98c244bbb4cae3e5aa)
Author: Eric Anholt <eric at anholt.net>
Date:   Wed Jan 10 13:10:43 2007 -0800

    Bug #9555: Always define _GNU_SOURCE in glibc environments.
    
    This keeps us from having to define _POSIX_C_SOURCE, _BSD_SOURCE, and
    _XOPEN_SORUCE to get the C environment we want in different places.  It also
    fixes the build on linux due to RTLD_DEFAULT having not been defined.

diff --git a/configure.ac b/configure.ac
index 3f5e5d8..c3107dc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1757,20 +1757,13 @@ AC_SUBST(XKB_COMPILED_DIR)
 dnl and the rest of these are generic, so they're in config.h
 AC_DEFINE(XResExtension, 1, [Build XRes extension])
 
-dnl CYGWIN does not define fd_set if _POSIX_SOURCE is defined
-dnl _*_SOURCE on Solaris restricts to the standards, and removes non-standard
-dnl functions which X uses
-case $host_os in
-	cygwin*) ;;
-	solaris*) ;;
-        darwin*) ;;
-	freebsd*|netbsd*|openbsd*) ;;
-	*) 
-		AC_DEFINE(_POSIX_SOURCE, 1, [POSIX-compliant source])
-		AC_DEFINE(_XOPEN_SOURCE, 500, [X/Open-compliant source])
-		AC_DEFINE(_BSD_SOURCE, 1, [BSD-compliant source])
-		;;
-esac
+AC_TRY_COMPILE([
+#include <features.h>
+#ifndef __GLIBC__
+#error not glibc
+#endif
+], [], [AC_DEFINE(_GNU_SOURCE, 1,
+	[ Enable GNU and other extensions to the C environment for glibc])])
 
 AC_DEFINE_DIR(PROJECTROOT, prefix, [Overall prefix])
 
diff --git a/include/dix-config.h.in b/include/dix-config.h.in
index 6bf2786..1a9fdc5 100644
--- a/include/dix-config.h.in
+++ b/include/dix-config.h.in
@@ -419,16 +419,8 @@
 /* Endian order */
 #undef X_BYTE_ORDER
 
-/* BSD-compliant source */
-#undef _BSD_SOURCE
-
-/* POSIX-compliant source */
-#undef _POSIX_SOURCE
-
-#ifndef _XOPEN_SOURCE
-/* X/Open-compliant source */
-#undef _XOPEN_SOURCE
-#endif
+/* Enable GNU and other extensions to the C environment for GLIBC */
+#undef _GNU_SOURCE
 
 /* Define to empty if `const' does not conform to ANSI C. */
 #undef const
diff --git a/os/utils.c b/os/utils.c
index b98c9c1..7c725e3 100644
--- a/os/utils.c
+++ b/os/utils.c
@@ -53,23 +53,6 @@ OR PERFORMANCE OF THIS SOFTWARE.
 #include <dix-config.h>
 #endif
 
-#ifndef __GLIBC__
-#include <time.h>
-#else
-/* The world's most shocking hack, to ensure we get clock_gettime() and
- * CLOCK_MONOTONIC. */
-#ifdef _POSIX_C_SOURCE
-#define _SAVED_POSIX_C_SOURCE _POSIX_C_SOURCE
-#undef _POSIX_C_SOURCE
-#endif
-#define _POSIX_C_SOURCE 199309L
-#include <time.h>
-#undef _POSIX_C_SOURCE
-#ifdef _SAVED_POSIX_C_SOURCE
-#define _POSIX_C_SOURCE _SAVED_POSIX_C_SOURCE
-#endif
-#endif /* __linux__ */
-
 #ifdef __CYGWIN__
 #include <stdlib.h>
 #include <signal.h>
@@ -80,6 +63,7 @@ OR PERFORMANCE OF THIS SOFTWARE.
 #endif
 #include <X11/Xos.h>
 #include <stdio.h>
+#include <time.h>
 #include "misc.h"
 #include <X11/X.h>
 #define XSERV_t
diff-tree 78f9592c112d4245f6119b98c244bbb4cae3e5aa (from 6a2fb2928714ce77ee342cdc23a1178e5e766cf2)
Author: Alan Hourihane <alanh at fairlite.demon.co.uk>
Date:   Wed Jan 10 16:04:20 2007 +0000

    lnx_ev56.c has to be built with -mcpu=ev56. Fix it.

diff --git a/hw/xfree86/os-support/linux/Makefile.am b/hw/xfree86/os-support/linux/Makefile.am
index 9c4fa49..10f2440 100644
--- a/hw/xfree86/os-support/linux/Makefile.am
+++ b/hw/xfree86/os-support/linux/Makefile.am
@@ -6,9 +6,14 @@ PLATFORM_DEFINES = -DOS_PROBE_PCI_CHIPSE
 PLATFORM_INCLUDES = -I$(srcdir)/../shared
 endif
 if LINUX_ALPHA
-PLATFORM_PCI_SUPPORT = lnx_ev56.c \
+noinst_LTLIBRARIES += liblinuxev56.la
+PLATFORM_PCI_SUPPORT = \
        $(srcdir)/lnx_axp.c \
        $(srcdir)/../shared/xf86Axp.c
+
+liblinuxev56_la_CFLAGS = -mcpu=ev56
+
+liblinuxev56_la_SOURCES = lnx_ev56.c
 endif
 
 if LNXACPI
@@ -48,3 +53,7 @@ EXTRA_DIST = \
 	$(LNX_EXTRA_SRCS) \
 	lnx.h \
 	$(srcdir)/../shared/xf86Axp.h
+
+if LINUX_ALPHA
+liblinux_la_LIBADD = liblinuxev56.la
+endif
diff --git a/hw/xfree86/os-support/linux/lnx_ev56.c b/hw/xfree86/os-support/linux/lnx_ev56.c
index 78756a6..11c45e5 100644
--- a/hw/xfree86/os-support/linux/lnx_ev56.c
+++ b/hw/xfree86/os-support/linux/lnx_ev56.c
@@ -1,4 +1,4 @@
-
+/* This file has to be built with -mcpu=ev56 */
 #ifdef HAVE_XORG_CONFIG_H
 #include <xorg-config.h>
 #endif
diff-tree 6a2fb2928714ce77ee342cdc23a1178e5e766cf2 (from e3aa6ad201eb20862c11c000e76206e317a96dc9)
Author: Eric Anholt <eric at anholt.net>
Date:   Tue Jan 9 16:34:40 2007 -0800

    Track rename of DamagePost -> DamageAdd.

diff --git a/damageext/damageext.c b/damageext/damageext.c
index a90dfb8..ae1091e 100755
--- a/damageext/damageext.c
+++ b/damageext/damageext.c
@@ -280,14 +280,14 @@ ProcDamageSubtract (ClientPtr client)
 }
 
 static int
-ProcDamagePost (ClientPtr client)
+ProcDamageAdd (ClientPtr client)
 {
-    REQUEST(xDamagePostReq);
+    REQUEST(xDamageAddReq);
     DrawablePtr	    pDrawable;
     RegionPtr	    pRegion;
     int		    rc;
 
-    REQUEST_SIZE_MATCH(xDamagePostReq);
+    REQUEST_SIZE_MATCH(xDamageAddReq);
     VERIFY_REGION(pRegion, stuff->region, client, DixWriteAccess);
     rc = dixLookupDrawable(&pDrawable, stuff->drawable, client, 0,
 			   DixReadAccess);
@@ -307,7 +307,7 @@ ProcDamagePost (ClientPtr client)
 /* Major version controls available requests */
 static const int version_requests[] = {
     X_DamageQueryVersion,	/* before client sends QueryVersion */
-    X_DamagePost,		/* Version 1 */
+    X_DamageAdd,		/* Version 1 */
 };
 
 #define NUM_VERSION_REQUESTS	(sizeof (version_requests) / sizeof (version_requests[0]))
@@ -319,7 +319,7 @@ int	(*ProcDamageVector[XDamageNumberRequ
     ProcDamageDestroy,
     ProcDamageSubtract,
 /*************** Version 1.1 ****************/
-    ProcDamagePost,
+    ProcDamageAdd,
 };
 
 
@@ -389,10 +389,10 @@ SProcDamageSubtract (ClientPtr client)
 }
 
 static int
-SProcDamagePost (ClientPtr client)
+SProcDamageAdd (ClientPtr client)
 {
     register int n;
-    REQUEST(xDamagePostReq);
+    REQUEST(xDamageAddReq);
 
     swaps (&stuff->length, n);
     REQUEST_SIZE_MATCH(xDamageSubtractReq);
@@ -408,7 +408,7 @@ int	(*SProcDamageVector[XDamageNumberReq
     SProcDamageDestroy,
     SProcDamageSubtract,
 /*************** Version 1.1 ****************/
-    SProcDamagePost,
+    SProcDamageAdd,
 };
 
 static int
diff-tree e3aa6ad201eb20862c11c000e76206e317a96dc9 (from 359d20532bdcef6a540a551578d000afbb609c2d)
Author: Matthieu Herrb <matthieu at blues.laas.fr>
Date:   Tue Jan 9 14:14:19 2007 +0100

    Multiple integer overflows in dbe and render extensions
    CVE IDs: CVE-2006-6101 CVE-2006-6102 CVE-2006-6103

diff --git a/dbe/dbe.c b/dbe/dbe.c
index 38375f9..862393b 100644
--- a/dbe/dbe.c
+++ b/dbe/dbe.c
@@ -39,6 +39,11 @@
 #endif
 
 #include <string.h>
+#if HAVE_STDINT_H
+#include <stdint.h>
+#elif !defined(UINT32_MAX)
+#define UINT32_MAX 0xffffffffU
+#endif
 
 #include <X11/X.h>
 #include <X11/Xproto.h>
@@ -711,11 +716,14 @@ ProcDbeSwapBuffers(ClientPtr client)
         return(Success);
     }
 
+    if (nStuff > UINT32_MAX / sizeof(DbeSwapInfoRec))
+	    return BadAlloc;
+
     /* Get to the swap info appended to the end of the request. */
     dbeSwapInfo = (xDbeSwapInfo *)&stuff[1];
 
     /* Allocate array to record swap information. */ 
-    swapInfo = (DbeSwapInfoPtr)ALLOCATE_LOCAL(nStuff * sizeof(DbeSwapInfoRec));
+    swapInfo = (DbeSwapInfoPtr)Xalloc(nStuff * sizeof(DbeSwapInfoRec));
     if (swapInfo == NULL)
     {
         return(BadAlloc);
@@ -730,14 +738,14 @@ ProcDbeSwapBuffers(ClientPtr client)
 	error = dixLookupWindow(&pWin, dbeSwapInfo[i].window, client,
 				DixWriteAccess);
 	if (error != Success) {
-            DEALLOCATE_LOCAL(swapInfo);
+            Xfree(swapInfo);
 	    return error;
         }
 
         /* Each window must be double-buffered - BadMatch. */
         if (DBE_WINDOW_PRIV(pWin) == NULL)
         {
-            DEALLOCATE_LOCAL(swapInfo);
+            Xfree(swapInfo);
             return(BadMatch);
         }
 
@@ -746,7 +754,7 @@ ProcDbeSwapBuffers(ClientPtr client)
         {
             if (dbeSwapInfo[i].window == dbeSwapInfo[j].window)
             {
-                DEALLOCATE_LOCAL(swapInfo);
+                Xfree(swapInfo);
                 return(BadMatch);
 	    }
         }
@@ -757,7 +765,7 @@ ProcDbeSwapBuffers(ClientPtr client)
             (dbeSwapInfo[i].swapAction != XdbeUntouched ) &&
             (dbeSwapInfo[i].swapAction != XdbeCopied    ))
         {
-            DEALLOCATE_LOCAL(swapInfo);
+            Xfree(swapInfo);
             return(BadValue);
         }
 
@@ -787,12 +795,12 @@ ProcDbeSwapBuffers(ClientPtr client)
         error = (*pDbeScreenPriv->SwapBuffers)(client, &nStuff, swapInfo);
         if (error != Success)
         {
-            DEALLOCATE_LOCAL(swapInfo);
+            Xfree(swapInfo);
             return(error);
         }
     }
     
-    DEALLOCATE_LOCAL(swapInfo);
+    Xfree(swapInfo);
     return(Success);
 
 } /* ProcDbeSwapBuffers() */
@@ -874,10 +882,12 @@ ProcDbeGetVisualInfo(ClientPtr client)
 
     REQUEST_AT_LEAST_SIZE(xDbeGetVisualInfoReq);
 
+    if (stuff->n > UINT32_MAX / sizeof(DrawablePtr))
+	    return BadAlloc;
     /* Make sure any specified drawables are valid. */
     if (stuff->n != 0)
     {
-        if (!(pDrawables = (DrawablePtr *)ALLOCATE_LOCAL(stuff->n *
+        if (!(pDrawables = (DrawablePtr *)Xalloc(stuff->n *
                                                  sizeof(DrawablePtr))))
         {
             return(BadAlloc);
@@ -890,7 +900,7 @@ ProcDbeGetVisualInfo(ClientPtr client)
 	    rc = dixLookupDrawable(pDrawables+i, drawables[i], client, 0,
 				   DixReadAccess);
 	    if (rc != Success) {
-                DEALLOCATE_LOCAL(pDrawables);
+                Xfree(pDrawables);
                 return rc;
             }
         }
@@ -902,7 +912,7 @@ ProcDbeGetVisualInfo(ClientPtr client)
     {
         if (pDrawables)
         {
-            DEALLOCATE_LOCAL(pDrawables);
+            Xfree(pDrawables);
         }
 
         return(BadAlloc);
@@ -929,7 +939,7 @@ ProcDbeGetVisualInfo(ClientPtr client)
             /* Free pDrawables if we needed to allocate it above. */
             if (pDrawables)
             {
-                DEALLOCATE_LOCAL(pDrawables);
+                Xfree(pDrawables);
             }
 
             return(BadAlloc);
@@ -1010,7 +1020,7 @@ ProcDbeGetVisualInfo(ClientPtr client)
 
     if (pDrawables)
     {
-        DEALLOCATE_LOCAL(pDrawables);
+        Xfree(pDrawables);
     }
 
     return(client->noClientException);
diff --git a/render/render.c b/render/render.c
index 126d08d..348d4c6 100644
--- a/render/render.c
+++ b/render/render.c
@@ -47,6 +47,12 @@
 #include <X11/Xfuncproto.h>
 #include "cursorstr.h"
 
+#if HAVE_STDINT_H
+#include <stdint.h>
+#elif !defined(UINT32_MAX)
+#define UINT32_MAX 0xffffffffU
+#endif
+
 static int ProcRenderQueryVersion (ClientPtr pClient);
 static int ProcRenderQueryPictFormats (ClientPtr pClient);
 static int ProcRenderQueryPictIndexValues (ClientPtr pClient);
@@ -1105,11 +1111,14 @@ ProcRenderAddGlyphs (ClientPtr client)
     }
 
     nglyphs = stuff->nglyphs;
+    if (nglyphs > UINT32_MAX / sizeof(GlyphNewRec))
+	    return BadAlloc;
+
     if (nglyphs <= NLOCALGLYPH)
 	glyphsBase = glyphsLocal;
     else
     {
-	glyphsBase = (GlyphNewPtr) ALLOCATE_LOCAL (nglyphs * sizeof (GlyphNewRec));
+	glyphsBase = (GlyphNewPtr) Xalloc (nglyphs * sizeof (GlyphNewRec));
 	if (!glyphsBase)
 	    return BadAlloc;
     }
@@ -1166,7 +1175,7 @@ ProcRenderAddGlyphs (ClientPtr client)
     }
 
     if (glyphsBase != glyphsLocal)
-	DEALLOCATE_LOCAL (glyphsBase);
+	Xfree (glyphsBase);
     return client->noClientException;
 bail:
     while (glyphs != glyphsBase)
@@ -1175,7 +1184,7 @@ bail:
 	xfree (glyphs->glyph);
     }
     if (glyphsBase != glyphsLocal)
-	DEALLOCATE_LOCAL (glyphsBase);
+	Xfree (glyphsBase);
     return err;
 }
 
diff-tree 359d20532bdcef6a540a551578d000afbb609c2d (from 88740c4855babedbea420b5e1b35ae105d1f1026)
Author: Michel Dänzer <michel at tungstengraphics.com>
Date:   Tue Jan 9 09:53:45 2007 +0100

    Require glproto >= 1.4.8 for GLX.
    
    It builds against 1.4.7 as well, but it hardcodes the GLX_EXT_tfp tokens that
    were finalized in 1.4.8, so GLX_EXT_tfp breaks if the client side was built
    against an older glproto. This will hopefully alert people to rebuild other
    components (in particular Mesa) against the new glproto as well.

diff --git a/configure.ac b/configure.ac
index 3b97e04..3f5e5d8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -679,7 +679,7 @@ fi
 
 if test "x$GLX" = xyes && ! test "x$MESA_SOURCE" = x; then
 	PKG_CHECK_MODULES([XLIB], [x11])
-	PKG_CHECK_MODULES([GL], [glproto >= 1.4.7])
+	PKG_CHECK_MODULES([GL], [glproto >= 1.4.8])
 	AC_SUBST(XLIB_CFLAGS)
 	AC_DEFINE(GLXEXT, 1, [Build GLX extension])
 	GLX_LIBS='$(top_builddir)/GL/glx/libglx.la $(top_builddir)/GL/mesa/libGLcore.la'
diff-tree 88740c4855babedbea420b5e1b35ae105d1f1026 (from 282a4dcaabc5f0cd6f7d3819aa648333b93b265e)
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Mon Jan 8 17:36:07 2007 -0800

    Use PKG_CHECK_EXISTS(libdrm) to determine if DRI should be enabled on Solaris

diff --git a/configure.ac b/configure.ac
index c4aafaa..3b97e04 100644
--- a/configure.ac
+++ b/configure.ac
@@ -353,6 +353,9 @@ case $host_os in
 	DRI=yes
 	KDRIVE_HW=yes
 	;;
+  *solaris*)
+	PKG_CHECK_EXISTS(libdrm, DRI=yes, DRI=no)
+	;;
 esac
 AM_CONDITIONAL(KDRIVE_HW, test "x$KDRIVE_HW" = xyes)
 
@@ -363,6 +366,8 @@ if test "x$use_x86_asm" = xyes && test "
     #error Not supported
 #endif
 ], mmx_capable=yes, mmx_capable=no)
+else
+	mmx_capable=no
 fi
 AC_MSG_RESULT([$mmx_capable])
 AM_CONDITIONAL(MMX_CAPABLE, [test "x$mmx_capable" = xyes])
diff-tree 282a4dcaabc5f0cd6f7d3819aa648333b93b265e (from 0b73a7eb17fd848c6bdc6a65ba835aa2cbfc3cfd)
Author: Michel Dänzer <michel at tungstengraphics.com>
Date:   Mon Jan 8 19:22:41 2007 +0100

    Attempt to fix drawable type checks in dixLookupDrawable().
    
    Not sure this is 100% correct either, but it fixes at least one reproducible
    crasher where it returned a pixmap to dixLookupWindow().

diff --git a/dix/dixutils.c b/dix/dixutils.c
index 084d2e4..e530360 100644
--- a/dix/dixutils.c
+++ b/dix/dixutils.c
@@ -219,7 +219,7 @@ dixLookupDrawable(DrawablePtr *pDraw, XI
 	pTmp = client->lastDrawable;
 
 	/* an access check is required for cached drawables */
-	rtype = (pTmp->type | M_WINDOW) ? RT_WINDOW : RT_PIXMAP;
+	rtype = (type & M_WINDOW) ? RT_WINDOW : RT_PIXMAP;
 	if (!XaceHook(XACE_RESOURCE_ACCESS, client, id, rtype, access, pTmp))
 	    return BadDrawable;
     } else
@@ -227,10 +227,10 @@ dixLookupDrawable(DrawablePtr *pDraw, XI
 						   access);
     if (!pTmp)
 	return BadDrawable;
-    if (!((1 << pTmp->type) | (type ? type : M_DRAWABLE)))
+    if (!((1 << pTmp->type) & (type ? type : M_DRAWABLE)))
 	return BadMatch;
 
-    if (pTmp->type | M_DRAWABLE) {
+    if (type & M_DRAWABLE) {
 	client->lastDrawable = pTmp;
 	client->lastDrawableID = id;
 	client->lastGCID = INVALID;
diff-tree 0b73a7eb17fd848c6bdc6a65ba835aa2cbfc3cfd (from dfb2c10413e22afd8d486a982870f874326d5ef4)
Author: Eric Anholt <eric at anholt.net>
Date:   Fri Jan 5 18:12:04 2007 -0800

    Add support for the DamagePost (XDamage 1.1) request.
    
    This makes damageproto >= 1.1 a requirement to build.

diff --git a/configure.ac b/configure.ac
index 278502b..c4aafaa 100644
--- a/configure.ac
+++ b/configure.ac
@@ -603,7 +603,7 @@ XEXT_LIB='$(top_builddir)/Xext/libXext.l
 XEXTXORG_LIB='$(top_builddir)/Xext/libXextbuiltin.la'
 
 dnl Core modules for most extensions, et al.
-REQUIRED_MODULES="[randrproto >= 1.2] renderproto [fixesproto >= 4.0] damageproto xcmiscproto xextproto xproto xtrans [scrnsaverproto >= 1.1] bigreqsproto resourceproto fontsproto [inputproto >= 1.4] [kbproto >= 1.0.3]"
+REQUIRED_MODULES="[randrproto >= 1.2] renderproto [fixesproto >= 4.0] [damageproto >= 1.1] xcmiscproto xextproto xproto xtrans [scrnsaverproto >= 1.1] bigreqsproto resourceproto fontsproto [inputproto >= 1.4] [kbproto >= 1.0.3]"
 REQUIRED_LIBS="xfont xau fontenc"
 
 if test "x$DBUS" = xauto; then
diff --git a/damageext/damageext.c b/damageext/damageext.c
index 6083693..a90dfb8 100755
--- a/damageext/damageext.c
+++ b/damageext/damageext.c
@@ -279,10 +279,35 @@ ProcDamageSubtract (ClientPtr client)
     return (client->noClientException);
 }
 
+static int
+ProcDamagePost (ClientPtr client)
+{
+    REQUEST(xDamagePostReq);
+    DrawablePtr	    pDrawable;
+    RegionPtr	    pRegion;
+    int		    rc;
+
+    REQUEST_SIZE_MATCH(xDamagePostReq);
+    VERIFY_REGION(pRegion, stuff->region, client, DixWriteAccess);
+    rc = dixLookupDrawable(&pDrawable, stuff->drawable, client, 0,
+			   DixReadAccess);
+    if (rc != Success)
+	return rc;
+
+    /* The region is relative to the drawable origin, so translate it out to
+     * screen coordinates like damage expects.
+     */
+    REGION_TRANSLATE(pScreen, pRegion, pDrawable->x, pDrawable->y);
+    DamageDamageRegion(pDrawable, pRegion);
+    REGION_TRANSLATE(pScreen, pRegion, -pDrawable->x, -pDrawable->y);
+
+    return (client->noClientException);
+}
+
 /* Major version controls available requests */
 static const int version_requests[] = {
     X_DamageQueryVersion,	/* before client sends QueryVersion */
-    X_DamageSubtract,		/* Version 1 */
+    X_DamagePost,		/* Version 1 */
 };
 
 #define NUM_VERSION_REQUESTS	(sizeof (version_requests) / sizeof (version_requests[0]))
@@ -293,6 +318,8 @@ int	(*ProcDamageVector[XDamageNumberRequ
     ProcDamageCreate,
     ProcDamageDestroy,
     ProcDamageSubtract,
+/*************** Version 1.1 ****************/
+    ProcDamagePost,
 };
 
 
@@ -361,12 +388,27 @@ SProcDamageSubtract (ClientPtr client)
     return (*ProcDamageVector[stuff->damageReqType]) (client);
 }
 
+static int
+SProcDamagePost (ClientPtr client)
+{
+    register int n;
+    REQUEST(xDamagePostReq);
+
+    swaps (&stuff->length, n);
+    REQUEST_SIZE_MATCH(xDamageSubtractReq);
+    swapl (&stuff->drawable, n);
+    swapl (&stuff->region, n);
+    return (*ProcDamageVector[stuff->damageReqType]) (client);
+}
+
 int	(*SProcDamageVector[XDamageNumberRequests])(ClientPtr) = {
 /*************** Version 1 ******************/
     SProcDamageQueryVersion,
     SProcDamageCreate,
     SProcDamageDestroy,
     SProcDamageSubtract,
+/*************** Version 1.1 ****************/
+    SProcDamagePost,
 };
 
 static int
diff-tree dfb2c10413e22afd8d486a982870f874326d5ef4 (from f90c3e226b105bf77beb94723fc08bdff14834be)
Author: Ian Romanick <idr at us.ibm.com>
Date:   Fri Jan 5 10:15:09 2007 -0800

    Add missing #else from previous commits.

diff --git a/GL/glx/glxbyteorder.h b/GL/glx/glxbyteorder.h
index 0bcb91f..b9d738d 100644
--- a/GL/glx/glxbyteorder.h
+++ b/GL/glx/glxbyteorder.h
@@ -39,6 +39,7 @@
 #include <byteswap.h>
 #elif defined(USE_SYS_ENDIAN_H)
 #include <sys/endian.h>
+#else
 #define	bswap_16(value)  \
  	((((value) & 0xff) << 8) | ((value) >> 8))
 
diff-tree f90c3e226b105bf77beb94723fc08bdff14834be (from b7ca5d14ce7ba410b0dab5c2289f6d7b75e763df)
Author: Ian Romanick <idr at us.ibm.com>
Date:   Thu Jan 4 15:38:16 2007 -0800

    Re-regenerate from Mesa scripts.
    
    DO NOT HAND EDIT THESE FILES!  For cryin' out loud, there's even a
    comment to that effect in the file's header...

diff --git a/GL/glx/indirect_dispatch_swap.c b/GL/glx/indirect_dispatch_swap.c
index db65154..c0bb71c 100644
--- a/GL/glx/indirect_dispatch_swap.c
+++ b/GL/glx/indirect_dispatch_swap.c
@@ -25,10 +25,6 @@
  * SOFTWARE.
  */
 
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
 #include <X11/Xmd.h>
 #include <GL/gl.h>
 #include <GL/glxproto.h>
diff-tree b7ca5d14ce7ba410b0dab5c2289f6d7b75e763df (from 8dd5771a1b91c331860b667fb18e484452000aad)
Author: Ian Romanick <idr at us.ibm.com>
Date:   Thu Jan 4 15:37:33 2007 -0800

    Incorporate new byte-order related configure changes.

diff --git a/GL/glx/glxbyteorder.h b/GL/glx/glxbyteorder.h
index 3c094d7..0bcb91f 100644
--- a/GL/glx/glxbyteorder.h
+++ b/GL/glx/glxbyteorder.h
@@ -31,18 +31,25 @@
 #if !defined(__GLXBYTEORDER_H__)
 #define __GLXBYTEORDER_H__
 
-#if defined(__linux__) || defined(__GLIBC__) || defined(__GNU__)
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#if HAVE_BYTESWAP_H
 #include <byteswap.h>
-#elif defined(__OpenBSD__)
+#elif defined(USE_SYS_ENDIAN_H)
 #include <sys/endian.h>
-#define bswap_16 __swap16
-#define bswap_32 __swap32
-#define bswap_64 __swap64
-#else
-#include <sys/endian.h>
-#define bswap_16 bswap16
-#define bswap_32 bswap32
-#define bswap_64 bswap64
+#define	bswap_16(value)  \
+ 	((((value) & 0xff) << 8) | ((value) >> 8))
+
+#define	bswap_32(value)	\
+ 	(((uint32_t)bswap_16((uint16_t)((value) & 0xffff)) << 16) | \
+ 	(uint32_t)bswap_16((uint16_t)((value) >> 16)))
+ 
+#define	bswap_64(value)	\
+ 	(((uint64_t)bswap_32((uint32_t)((value) & 0xffffffff)) \
+ 	    << 32) | \
+ 	(uint64_t)bswap_32((uint32_t)((value) >> 32)))
 #endif
 
 #endif /* !defined(__GLXBYTEORDER_H__) */
diff-tree 8dd5771a1b91c331860b667fb18e484452000aad (from parents)
Merge: 45aa26ccb4f61c2919ce2475d0907c6e1b177da2 7d2ec92170ebbdfa10a05734cb7cfaac97d19d65
Author: Ian Romanick <idr at us.ibm.com>
Date:   Thu Jan 4 15:01:38 2007 -0800

    Merge branch 'master' of git+ssh://git.freedesktop.org/git/xorg/xserver
    
    Conflicts:
    
    	GL/glx/indirect_dispatch_swap.c
    	GL/glx/swap_interval.c

diff --cc GL/glx/indirect_program.c
index 8d5f0e6,8372191..d23a0a9
@@@ -35,6 -35,6 +35,7 @@@
  #endif
  
  #include "glxserver.h"
++#include "glxbyteorder.h"
  #include "glxext.h"
  #include "singlesize.h"
  #include "unpack.h"
@@@ -46,20 -46,24 +47,6 @@@
  #include "dispatch.h"
  #include "glapioffsets.h"
  
- #if defined(__linux__) || defined (__GLIBC__) || defined (__GNU__)
- #include <byteswap.h>
- #elif defined(__OpenBSD__)
- #include <sys/endian.h>
- #define bswap_16 __swap16
- #define bswap_32 __swap32
- #define bswap_64 __swap64
- #else
- #include <sys/endian.h>
- #define bswap_16 bswap16
- #define bswap_32 bswap32
- #define bswap_64 bswap64
- #endif
- 
 -#if defined(HAVE_BYTESWAP_H)
 -#include <byteswap.h>
 -#elif defined(USE_SYS_ENDIAN_H)
 -#include <sys/endian.h>
 -#else
 -#define	bswap_16(value)  \
 - 	((((value) & 0xff) << 8) | ((value) >> 8))
 -
 -#define	bswap_32(value)	\
 - 	(((uint32_t)bswap_16((uint16_t)((value) & 0xffff)) << 16) | \
 - 	(uint32_t)bswap_16((uint16_t)((value) >> 16)))
 - 
 -#define	bswap_64(value)	\
 - 	(((uint64_t)bswap_32((uint32_t)((value) & 0xffffffff)) \
 - 	    << 32) | \
 - 	(uint64_t)bswap_32((uint32_t)((value) >> 32)))
 -#endif
 -
  static int DoGetProgramString(struct __GLXclientStateRec *cl, GLbyte *pc,
      unsigned get_programiv_offset, unsigned get_program_string_offset,
      Bool do_swap);
diff --cc GL/glx/indirect_texture_compression.c
index 35af1d2,801579d..3c09663
@@@ -29,6 -29,6 +29,7 @@@
  #endif
  
  #include "glxserver.h"
++#include "glxbyteorder.h"
  #include "glxext.h"
  #include "singlesize.h"
  #include "unpack.h"
@@@ -39,20 -39,24 +40,6 @@@
  #include "glthread.h"
  #include "dispatch.h"
  
- #if defined(__linux__) || defined (__GLIBC__) || defined (__GNU__)
- #include <byteswap.h>
- #elif defined(__OpenBSD__)
- #include <sys/endian.h>
- #define bswap_16 __swap16
- #define bswap_32 __swap32
- #define bswap_64 __swap64
- #else
- #include <sys/endian.h>
- #define bswap_16 bswap16
- #define bswap_32 bswap32
- #define bswap_64 bswap64
- #endif
- 
 -#if defined(HAVE_BYTESWAP_H)
 -#include <byteswap.h>
 -#elif defined(USE_SYS_ENDIAN_H)
 -#include <sys/endian.h>
 -#else
 -#define	bswap_16(value)  \
 - 	((((value) & 0xff) << 8) | ((value) >> 8))
 -
 -#define	bswap_32(value)	\
 - 	(((uint32_t)bswap_16((uint16_t)((value) & 0xffff)) << 16) | \
 - 	(uint32_t)bswap_16((uint16_t)((value) >> 16)))
 - 
 -#define	bswap_64(value)	\
 - 	(((uint64_t)bswap_32((uint32_t)((value) & 0xffffffff)) \
 - 	    << 32) | \
 - 	(uint64_t)bswap_32((uint32_t)((value) >> 32)))
 -#endif
 -
  int __glXDisp_GetCompressedTexImageARB(struct __GLXclientStateRec *cl, GLbyte *pc)
  {
      xGLXSingleReq * const req = (xGLXSingleReq *) pc;
diff --cc GL/glx/indirect_util.c
index 09b7ab8,d72e407..58c194c
@@@ -28,24 -32,28 +32,12 @@@
  #include <X11/Xmd.h>
  #include <GL/gl.h>
  #include <GL/glxproto.h>
- #if defined(__linux__) || defined (__GLIBC__) || defined(__GNU__)
- #include <byteswap.h>
- #elif defined(__OpenBSD__)
- #include <sys/endian.h>
- #define bswap_16 __swap16
- #define bswap_32 __swap32
- #define bswap_64 __swap64
- #else
- #include <sys/endian.h>
- #define bswap_16 bswap16
- #define bswap_32 bswap32
- #define bswap_64 bswap64
- #endif
 -#if defined(HAVE_BYTESWAP_H)
 -#include <byteswap.h>
 -#elif defined(USE_SYS_ENDIAN_H)
 -#include <sys/endian.h>
 -#else
 -#define	bswap_16(value)  \
 - 	((((value) & 0xff) << 8) | ((value) >> 8))
 -
 -#define	bswap_32(value)	\
 - 	(((uint32_t)bswap_16((uint16_t)((value) & 0xffff)) << 16) | \
 - 	(uint32_t)bswap_16((uint16_t)((value) >> 16)))
 - 
 -#define	bswap_64(value)	\
 - 	(((uint64_t)bswap_32((uint32_t)((value) & 0xffffffff)) \
 - 	    << 32) | \
 - 	(uint64_t)bswap_32((uint32_t)((value) >> 32)))
 -#endif
  #include <inttypes.h>
  #include "indirect_size.h"
  #include "indirect_size_get.h"
  #include "indirect_dispatch.h"
  #include "glxserver.h"
++#include "glxbyteorder.h"
  #include "singlesize.h"
  #include "glapitable.h"
  #include "glapi.h"
diff --cc GL/glx/swap_interval.c
index 6aa92a3,e5b48a6..24abd69
@@@ -39,8 -39,24 +39,7 @@@
  #include "glthread.h"
  #include "dispatch.h"
  #include "glapioffsets.h"
--
 -#if defined(HAVE_BYTESWAP_H)
 -#include <byteswap.h>
 -#elif defined(USE_SYS_ENDIAN_H)
 -#include <sys/endian.h>
 -#else
 -#define	bswap_16(value)  \
 - 	((((value) & 0xff) << 8) | ((value) >> 8))
 -
 -#define	bswap_32(value)	\
 - 	(((uint32_t)bswap_16((uint16_t)((value) & 0xffff)) << 16) | \
 - 	(uint32_t)bswap_16((uint16_t)((value) >> 16)))
 - 
 -#define	bswap_64(value)	\
 - 	(((uint64_t)bswap_32((uint32_t)((value) & 0xffffffff)) \
 - 	    << 32) | \
 - 	(uint64_t)bswap_32((uint32_t)((value) >> 32)))
 -#endif
 +#include "glxbyteorder.h"
  
  static int DoSwapInterval(__GLXclientState *cl, GLbyte *pc, int do_swap);
  
diff-tree 45aa26ccb4f61c2919ce2475d0907c6e1b177da2 (from 6d603bb47ff9d238637adbf30c6e9697e6e7e6fa)
Author: Ian Romanick <idr at us.ibm.com>
Date:   Thu Jan 4 14:55:51 2007 -0800

    Regenerate from Mesa scripts.
    
    Regenerate source files from Mesa scripts.  This causes the generated
    files to use glxbyteorder.h.

diff --git a/GL/glx/indirect_dispatch.c b/GL/glx/indirect_dispatch.c
index d86dedf..00a9f96 100644
--- a/GL/glx/indirect_dispatch.c
+++ b/GL/glx/indirect_dispatch.c
@@ -33,6 +33,7 @@
 #include "indirect_size_get.h"
 #include "indirect_dispatch.h"
 #include "glxserver.h"
+#include "glxbyteorder.h"
 #include "indirect_util.h"
 #include "singlesize.h"
 #include "glapitable.h"
diff --git a/GL/glx/indirect_dispatch_swap.c b/GL/glx/indirect_dispatch_swap.c
index 136f0d0..c0bb71c 100644
--- a/GL/glx/indirect_dispatch_swap.c
+++ b/GL/glx/indirect_dispatch_swap.c
@@ -28,24 +28,12 @@
 #include <X11/Xmd.h>
 #include <GL/gl.h>
 #include <GL/glxproto.h>
-#if defined(__linux__) || defined (__GLIBC__) || defined(__GNU__)
-#include <byteswap.h>
-#elif defined(__OpenBSD__)
-#include <sys/endian.h>
-#define bswap_16 __swap16
-#define bswap_32 __swap32
-#define bswap_64 __swap64
-#else
-#include <sys/endian.h>
-#define bswap_16 bswap16
-#define bswap_32 bswap32
-#define bswap_64 bswap64
-#endif
 #include <inttypes.h>
 #include "indirect_size.h"
 #include "indirect_size_get.h"
 #include "indirect_dispatch.h"
 #include "glxserver.h"
+#include "glxbyteorder.h"
 #include "indirect_util.h"
 #include "singlesize.h"
 #include "glapitable.h"
diff --git a/GL/glx/indirect_reqsize.c b/GL/glx/indirect_reqsize.c
index d3e2bc5..954eecd 100644
--- a/GL/glx/indirect_reqsize.c
+++ b/GL/glx/indirect_reqsize.c
@@ -28,16 +28,10 @@
 
 #include <GL/gl.h>
 #include "glxserver.h"
+#include "glxbyteorder.h"
 #include "indirect_size.h"
 #include "indirect_reqsize.h"
 
-#if defined(__linux__) || defined (__GLIBC__) || defined(__GNU__)
-#  include <byteswap.h>
-#  define SWAP_32(v)  do { (v) = bswap_32(v); } while(0)
-#else
-#  define SWAP_32(v)  do { char tmp; swapl(&v, tmp); } while(0)
-#endif
-
 #define __GLX_PAD(x)  (((x) + 3) & ~3)
 
 #if defined(__CYGWIN__) || defined(__MINGW32__)
@@ -56,15 +50,15 @@
 
 
 int
-__glXCallListsReqSize( const GLbyte * pc, Bool swap )
+__glXCallListsReqSize(const GLbyte *pc, Bool swap)
 {
-    GLsizei n          = *(GLsizei *)(pc + 0);
-    GLenum type        = * (GLenum *)(pc + 4);
+    GLsizei n = *(GLsizei *) (pc + 0);
+    GLenum type = *(GLenum *) (pc + 4);
     GLsizei compsize;
 
     if (swap) {
-        SWAP_32( n );
-        SWAP_32( type );
+        n = bswap_32(n);
+        type = bswap_32(type);
     }
 
     compsize = __glCallLists_size(type);
@@ -72,22 +66,22 @@ __glXCallListsReqSize( const GLbyte * pc
 }
 
 int
-__glXBitmapReqSize( const GLbyte * pc, Bool swap )
+__glXBitmapReqSize(const GLbyte *pc, Bool swap)
 {
-    GLint row_length   = *  (GLint *)(pc +  4);
+    GLint row_length = *(GLint *) (pc + 4);
     GLint image_height = 0;
-    GLint skip_images  = 0;
-    GLint skip_rows    = *  (GLint *)(pc +  8);
-    GLint alignment    = *  (GLint *)(pc + 16);
-    GLsizei width      = *(GLsizei *)(pc + 20);
-    GLsizei height     = *(GLsizei *)(pc + 24);
-
-    if (swap) {
-        SWAP_32( row_length );
-        SWAP_32( skip_rows );
-        SWAP_32( alignment );
-        SWAP_32( width );
-        SWAP_32( height );
+    GLint skip_images = 0;
+    GLint skip_rows = *(GLint *) (pc + 8);
+    GLint alignment = *(GLint *) (pc + 16);
+    GLsizei width = *(GLsizei *) (pc + 20);
+    GLsizei height = *(GLsizei *) (pc + 24);
+
+    if (swap) {
+        row_length = bswap_32(row_length);
+        skip_rows = bswap_32(skip_rows);
+        alignment = bswap_32(alignment);
+        width = bswap_32(width);
+        height = bswap_32(height);
     }
 
     return __glXImageSize(GL_COLOR_INDEX, GL_BITMAP, 0, width, height, 1,
@@ -96,13 +90,13 @@ __glXBitmapReqSize( const GLbyte * pc, B
 }
 
 int
-__glXFogfvReqSize( const GLbyte * pc, Bool swap )
+__glXFogfvReqSize(const GLbyte *pc, Bool swap)
 {
-    GLenum pname       = * (GLenum *)(pc + 0);
+    GLenum pname = *(GLenum *) (pc + 0);
     GLsizei compsize;
 
     if (swap) {
-        SWAP_32( pname );
+        pname = bswap_32(pname);
     }
 
     compsize = __glFogfv_size(pname);
@@ -110,13 +104,13 @@ __glXFogfvReqSize( const GLbyte * pc, Bo
 }
 
 int
-__glXLightfvReqSize( const GLbyte * pc, Bool swap )
+__glXLightfvReqSize(const GLbyte *pc, Bool swap)
 {
-    GLenum pname       = * (GLenum *)(pc + 4);
+    GLenum pname = *(GLenum *) (pc + 4);
     GLsizei compsize;
 
     if (swap) {
-        SWAP_32( pname );
+        pname = bswap_32(pname);
     }
 
     compsize = __glLightfv_size(pname);
@@ -124,13 +118,13 @@ __glXLightfvReqSize( const GLbyte * pc, 
 }
 
 int
-__glXLightModelfvReqSize( const GLbyte * pc, Bool swap )
+__glXLightModelfvReqSize(const GLbyte *pc, Bool swap)
 {
-    GLenum pname       = * (GLenum *)(pc + 0);
+    GLenum pname = *(GLenum *) (pc + 0);
     GLsizei compsize;
 
     if (swap) {
-        SWAP_32( pname );
+        pname = bswap_32(pname);
     }
 
     compsize = __glLightModelfv_size(pname);
@@ -138,13 +132,13 @@ __glXLightModelfvReqSize( const GLbyte *
 }
 
 int
-__glXMaterialfvReqSize( const GLbyte * pc, Bool swap )
+__glXMaterialfvReqSize(const GLbyte *pc, Bool swap)
 {
-    GLenum pname       = * (GLenum *)(pc + 4);
+    GLenum pname = *(GLenum *) (pc + 4);
     GLsizei compsize;
 
     if (swap) {
-        SWAP_32( pname );
+        pname = bswap_32(pname);
     }
 
     compsize = __glMaterialfv_size(pname);
@@ -152,18 +146,18 @@ __glXMaterialfvReqSize( const GLbyte * p
 }
 
 int
-__glXPolygonStippleReqSize( const GLbyte * pc, Bool swap )
+__glXPolygonStippleReqSize(const GLbyte *pc, Bool swap)
 {
-    GLint row_length   = *  (GLint *)(pc +  4);
+    GLint row_length = *(GLint *) (pc + 4);
     GLint image_height = 0;
-    GLint skip_images  = 0;
-    GLint skip_rows    = *  (GLint *)(pc +  8);
-    GLint alignment    = *  (GLint *)(pc + 16);
+    GLint skip_images = 0;
+    GLint skip_rows = *(GLint *) (pc + 8);
+    GLint alignment = *(GLint *) (pc + 16);
 
     if (swap) {
-        SWAP_32( row_length );
-        SWAP_32( skip_rows );
-        SWAP_32( alignment );
+        row_length = bswap_32(row_length);
+        skip_rows = bswap_32(skip_rows);
+        alignment = bswap_32(alignment);
     }
 
     return __glXImageSize(GL_COLOR_INDEX, GL_BITMAP, 0, 32, 32, 1,
@@ -172,13 +166,13 @@ __glXPolygonStippleReqSize( const GLbyte
 }
 
 int
-__glXTexParameterfvReqSize( const GLbyte * pc, Bool swap )
+__glXTexParameterfvReqSize(const GLbyte *pc, Bool swap)
 {
-    GLenum pname       = * (GLenum *)(pc + 4);
+    GLenum pname = *(GLenum *) (pc + 4);
     GLsizei compsize;
 
     if (swap) {
-        SWAP_32( pname );
+        pname = bswap_32(pname);
     }
 
     compsize = __glTexParameterfv_size(pname);
@@ -186,26 +180,26 @@ __glXTexParameterfvReqSize( const GLbyte
 }
 
 int
-__glXTexImage1DReqSize( const GLbyte * pc, Bool swap )
+__glXTexImage1DReqSize(const GLbyte *pc, Bool swap)
 {
-    GLint row_length   = *  (GLint *)(pc +  4);
+    GLint row_length = *(GLint *) (pc + 4);
     GLint image_height = 0;
-    GLint skip_images  = 0;
-    GLint skip_rows    = *  (GLint *)(pc +  8);
-    GLint alignment    = *  (GLint *)(pc + 16);
-    GLenum target      = * (GLenum *)(pc + 20);
-    GLsizei width      = *(GLsizei *)(pc + 32);
-    GLenum format      = * (GLenum *)(pc + 44);
-    GLenum type        = * (GLenum *)(pc + 48);
-
-    if (swap) {
-        SWAP_32( row_length );
-        SWAP_32( skip_rows );
-        SWAP_32( alignment );
-        SWAP_32( target );
-        SWAP_32( width );
-        SWAP_32( format );
-        SWAP_32( type );
+    GLint skip_images = 0;
+    GLint skip_rows = *(GLint *) (pc + 8);
+    GLint alignment = *(GLint *) (pc + 16);
+    GLenum target = *(GLenum *) (pc + 20);
+    GLsizei width = *(GLsizei *) (pc + 32);
+    GLenum format = *(GLenum *) (pc + 44);
+    GLenum type = *(GLenum *) (pc + 48);
+
+    if (swap) {
+        row_length = bswap_32(row_length);
+        skip_rows = bswap_32(skip_rows);
+        alignment = bswap_32(alignment);
+        target = bswap_32(target);
+        width = bswap_32(width);
+        format = bswap_32(format);
+        type = bswap_32(type);
     }
 
     return __glXImageSize(format, type, target, width, 1, 1,
@@ -214,28 +208,28 @@ __glXTexImage1DReqSize( const GLbyte * p
 }
 
 int
-__glXTexImage2DReqSize( const GLbyte * pc, Bool swap )
+__glXTexImage2DReqSize(const GLbyte *pc, Bool swap)
 {
-    GLint row_length   = *  (GLint *)(pc +  4);
+    GLint row_length = *(GLint *) (pc + 4);
     GLint image_height = 0;
-    GLint skip_images  = 0;
-    GLint skip_rows    = *  (GLint *)(pc +  8);
-    GLint alignment    = *  (GLint *)(pc + 16);
-    GLenum target      = * (GLenum *)(pc + 20);
-    GLsizei width      = *(GLsizei *)(pc + 32);
-    GLsizei height     = *(GLsizei *)(pc + 36);
-    GLenum format      = * (GLenum *)(pc + 44);
-    GLenum type        = * (GLenum *)(pc + 48);
-
-    if (swap) {
-        SWAP_32( row_length );
-        SWAP_32( skip_rows );
-        SWAP_32( alignment );
-        SWAP_32( target );
-        SWAP_32( width );
-        SWAP_32( height );
-        SWAP_32( format );
-        SWAP_32( type );
+    GLint skip_images = 0;
+    GLint skip_rows = *(GLint *) (pc + 8);
+    GLint alignment = *(GLint *) (pc + 16);
+    GLenum target = *(GLenum *) (pc + 20);
+    GLsizei width = *(GLsizei *) (pc + 32);
+    GLsizei height = *(GLsizei *) (pc + 36);
+    GLenum format = *(GLenum *) (pc + 44);
+    GLenum type = *(GLenum *) (pc + 48);
+
+    if (swap) {
+        row_length = bswap_32(row_length);
+        skip_rows = bswap_32(skip_rows);
+        alignment = bswap_32(alignment);
+        target = bswap_32(target);
+        width = bswap_32(width);
+        height = bswap_32(height);
+        format = bswap_32(format);
+        type = bswap_32(type);
     }
 
     return __glXImageSize(format, type, target, width, height, 1,
@@ -244,13 +238,13 @@ __glXTexImage2DReqSize( const GLbyte * p
 }
 
 int
-__glXTexEnvfvReqSize( const GLbyte * pc, Bool swap )
+__glXTexEnvfvReqSize(const GLbyte *pc, Bool swap)
 {
-    GLenum pname       = * (GLenum *)(pc + 4);
+    GLenum pname = *(GLenum *) (pc + 4);
     GLsizei compsize;
 
     if (swap) {
-        SWAP_32( pname );
+        pname = bswap_32(pname);
     }
 
     compsize = __glTexEnvfv_size(pname);
@@ -258,13 +252,13 @@ __glXTexEnvfvReqSize( const GLbyte * pc,
 }
 
 int
-__glXTexGendvReqSize( const GLbyte * pc, Bool swap )
+__glXTexGendvReqSize(const GLbyte *pc, Bool swap)
 {
-    GLenum pname       = * (GLenum *)(pc + 4);
+    GLenum pname = *(GLenum *) (pc + 4);
     GLsizei compsize;
 
     if (swap) {
-        SWAP_32( pname );
+        pname = bswap_32(pname);
     }
 
     compsize = __glTexGendv_size(pname);
@@ -272,13 +266,13 @@ __glXTexGendvReqSize( const GLbyte * pc,
 }
 
 int
-__glXTexGenfvReqSize( const GLbyte * pc, Bool swap )
+__glXTexGenfvReqSize(const GLbyte *pc, Bool swap)
 {
-    GLenum pname       = * (GLenum *)(pc + 4);
+    GLenum pname = *(GLenum *) (pc + 4);
     GLsizei compsize;
 
     if (swap) {
-        SWAP_32( pname );
+        pname = bswap_32(pname);
     }
 
     compsize = __glTexGenfv_size(pname);
@@ -286,50 +280,50 @@ __glXTexGenfvReqSize( const GLbyte * pc,
 }
 
 int
-__glXPixelMapfvReqSize( const GLbyte * pc, Bool swap )
+__glXPixelMapfvReqSize(const GLbyte *pc, Bool swap)
 {
-    GLsizei mapsize    = *(GLsizei *)(pc + 4);
+    GLsizei mapsize = *(GLsizei *) (pc + 4);
 
     if (swap) {
-        SWAP_32( mapsize );
+        mapsize = bswap_32(mapsize);
     }
 
     return __GLX_PAD((mapsize * 4));
 }
 
 int
-__glXPixelMapusvReqSize( const GLbyte * pc, Bool swap )
+__glXPixelMapusvReqSize(const GLbyte *pc, Bool swap)
 {
-    GLsizei mapsize    = *(GLsizei *)(pc + 4);
+    GLsizei mapsize = *(GLsizei *) (pc + 4);
 
     if (swap) {
-        SWAP_32( mapsize );
+        mapsize = bswap_32(mapsize);
     }
 
     return __GLX_PAD((mapsize * 2));
 }
 
 int
-__glXDrawPixelsReqSize( const GLbyte * pc, Bool swap )
+__glXDrawPixelsReqSize(const GLbyte *pc, Bool swap)
 {
-    GLint row_length   = *  (GLint *)(pc +  4);
+    GLint row_length = *(GLint *) (pc + 4);
     GLint image_height = 0;
-    GLint skip_images  = 0;
-    GLint skip_rows    = *  (GLint *)(pc +  8);
-    GLint alignment    = *  (GLint *)(pc + 16);
-    GLsizei width      = *(GLsizei *)(pc + 20);
-    GLsizei height     = *(GLsizei *)(pc + 24);
-    GLenum format      = * (GLenum *)(pc + 28);
-    GLenum type        = * (GLenum *)(pc + 32);
-
-    if (swap) {
-        SWAP_32( row_length );
-        SWAP_32( skip_rows );
-        SWAP_32( alignment );
-        SWAP_32( width );
-        SWAP_32( height );
-        SWAP_32( format );
-        SWAP_32( type );
+    GLint skip_images = 0;
+    GLint skip_rows = *(GLint *) (pc + 8);
+    GLint alignment = *(GLint *) (pc + 16);
+    GLsizei width = *(GLsizei *) (pc + 20);
+    GLsizei height = *(GLsizei *) (pc + 24);
+    GLenum format = *(GLenum *) (pc + 28);
+    GLenum type = *(GLenum *) (pc + 32);
+
+    if (swap) {
+        row_length = bswap_32(row_length);
+        skip_rows = bswap_32(skip_rows);
+        alignment = bswap_32(alignment);
+        width = bswap_32(width);
+        height = bswap_32(height);
+        format = bswap_32(format);
+        type = bswap_32(type);
     }
 
     return __glXImageSize(format, type, 0, width, height, 1,
@@ -338,38 +332,38 @@ __glXDrawPixelsReqSize( const GLbyte * p
 }
 
 int
-__glXPrioritizeTexturesReqSize( const GLbyte * pc, Bool swap )
+__glXPrioritizeTexturesReqSize(const GLbyte *pc, Bool swap)
 {
-    GLsizei n          = *(GLsizei *)(pc + 0);
+    GLsizei n = *(GLsizei *) (pc + 0);
 
     if (swap) {
-        SWAP_32( n );
+        n = bswap_32(n);
     }
 
     return __GLX_PAD((n * 4) + (n * 4));
 }
 
 int
-__glXTexSubImage1DReqSize( const GLbyte * pc, Bool swap )
+__glXTexSubImage1DReqSize(const GLbyte *pc, Bool swap)
 {
-    GLint row_length   = *  (GLint *)(pc +  4);
+    GLint row_length = *(GLint *) (pc + 4);
     GLint image_height = 0;
-    GLint skip_images  = 0;
-    GLint skip_rows    = *  (GLint *)(pc +  8);
-    GLint alignment    = *  (GLint *)(pc + 16);
-    GLenum target      = * (GLenum *)(pc + 20);
-    GLsizei width      = *(GLsizei *)(pc + 36);
-    GLenum format      = * (GLenum *)(pc + 44);
-    GLenum type        = * (GLenum *)(pc + 48);
-
-    if (swap) {
-        SWAP_32( row_length );
-        SWAP_32( skip_rows );
-        SWAP_32( alignment );
-        SWAP_32( target );
-        SWAP_32( width );
-        SWAP_32( format );
-        SWAP_32( type );
+    GLint skip_images = 0;
+    GLint skip_rows = *(GLint *) (pc + 8);
+    GLint alignment = *(GLint *) (pc + 16);
+    GLenum target = *(GLenum *) (pc + 20);
+    GLsizei width = *(GLsizei *) (pc + 36);
+    GLenum format = *(GLenum *) (pc + 44);
+    GLenum type = *(GLenum *) (pc + 48);
+
+    if (swap) {
+        row_length = bswap_32(row_length);
+        skip_rows = bswap_32(skip_rows);
+        alignment = bswap_32(alignment);
+        target = bswap_32(target);
+        width = bswap_32(width);
+        format = bswap_32(format);
+        type = bswap_32(type);
     }
 
     return __glXImageSize(format, type, target, width, 1, 1,
@@ -378,28 +372,28 @@ __glXTexSubImage1DReqSize( const GLbyte 
 }
 
 int
-__glXTexSubImage2DReqSize( const GLbyte * pc, Bool swap )
+__glXTexSubImage2DReqSize(const GLbyte *pc, Bool swap)
 {
-    GLint row_length   = *  (GLint *)(pc +  4);
+    GLint row_length = *(GLint *) (pc + 4);
     GLint image_height = 0;
-    GLint skip_images  = 0;
-    GLint skip_rows    = *  (GLint *)(pc +  8);
-    GLint alignment    = *  (GLint *)(pc + 16);
-    GLenum target      = * (GLenum *)(pc + 20);
-    GLsizei width      = *(GLsizei *)(pc + 36);
-    GLsizei height     = *(GLsizei *)(pc + 40);
-    GLenum format      = * (GLenum *)(pc + 44);
-    GLenum type        = * (GLenum *)(pc + 48);
-
-    if (swap) {
-        SWAP_32( row_length );
-        SWAP_32( skip_rows );
-        SWAP_32( alignment );
-        SWAP_32( target );
-        SWAP_32( width );
-        SWAP_32( height );
-        SWAP_32( format );
-        SWAP_32( type );
+    GLint skip_images = 0;
+    GLint skip_rows = *(GLint *) (pc + 8);
+    GLint alignment = *(GLint *) (pc + 16);
+    GLenum target = *(GLenum *) (pc + 20);
+    GLsizei width = *(GLsizei *) (pc + 36);
+    GLsizei height = *(GLsizei *) (pc + 40);
+    GLenum format = *(GLenum *) (pc + 44);
+    GLenum type = *(GLenum *) (pc + 48);
+
+    if (swap) {
+        row_length = bswap_32(row_length);
+        skip_rows = bswap_32(skip_rows);
+        alignment = bswap_32(alignment);
+        target = bswap_32(target);
+        width = bswap_32(width);
+        height = bswap_32(height);
+        format = bswap_32(format);
+        type = bswap_32(type);
     }
 
     return __glXImageSize(format, type, target, width, height, 1,
@@ -408,26 +402,26 @@ __glXTexSubImage2DReqSize( const GLbyte 
 }
 
 int
-__glXColorTableReqSize( const GLbyte * pc, Bool swap )
+__glXColorTableReqSize(const GLbyte *pc, Bool swap)
 {
-    GLint row_length   = *  (GLint *)(pc +  4);
+    GLint row_length = *(GLint *) (pc + 4);
     GLint image_height = 0;
-    GLint skip_images  = 0;
-    GLint skip_rows    = *  (GLint *)(pc +  8);
-    GLint alignment    = *  (GLint *)(pc + 16);
-    GLenum target      = * (GLenum *)(pc + 20);
-    GLsizei width      = *(GLsizei *)(pc + 28);
-    GLenum format      = * (GLenum *)(pc + 32);
-    GLenum type        = * (GLenum *)(pc + 36);
-
-    if (swap) {
-        SWAP_32( row_length );
-        SWAP_32( skip_rows );
-        SWAP_32( alignment );
-        SWAP_32( target );
-        SWAP_32( width );
-        SWAP_32( format );
-        SWAP_32( type );
+    GLint skip_images = 0;
+    GLint skip_rows = *(GLint *) (pc + 8);
+    GLint alignment = *(GLint *) (pc + 16);
+    GLenum target = *(GLenum *) (pc + 20);
+    GLsizei width = *(GLsizei *) (pc + 28);
+    GLenum format = *(GLenum *) (pc + 32);
+    GLenum type = *(GLenum *) (pc + 36);
+
+    if (swap) {
+        row_length = bswap_32(row_length);
+        skip_rows = bswap_32(skip_rows);
+        alignment = bswap_32(alignment);
+        target = bswap_32(target);
+        width = bswap_32(width);
+        format = bswap_32(format);
+        type = bswap_32(type);
     }
 
     return __glXImageSize(format, type, target, width, 1, 1,
@@ -436,13 +430,13 @@ __glXColorTableReqSize( const GLbyte * p
 }
 
 int
-__glXColorTableParameterfvReqSize( const GLbyte * pc, Bool swap )
+__glXColorTableParameterfvReqSize(const GLbyte *pc, Bool swap)
 {
-    GLenum pname       = * (GLenum *)(pc + 4);
+    GLenum pname = *(GLenum *) (pc + 4);
     GLsizei compsize;
 
     if (swap) {
-        SWAP_32( pname );
+        pname = bswap_32(pname);
     }
 
     compsize = __glColorTableParameterfv_size(pname);
@@ -450,26 +444,26 @@ __glXColorTableParameterfvReqSize( const
 }
 
 int
-__glXColorSubTableReqSize( const GLbyte * pc, Bool swap )
+__glXColorSubTableReqSize(const GLbyte *pc, Bool swap)
 {
-    GLint row_length   = *  (GLint *)(pc +  4);
+    GLint row_length = *(GLint *) (pc + 4);
     GLint image_height = 0;
-    GLint skip_images  = 0;
-    GLint skip_rows    = *  (GLint *)(pc +  8);
-    GLint alignment    = *  (GLint *)(pc + 16);
-    GLenum target      = * (GLenum *)(pc + 20);
-    GLsizei count      = *(GLsizei *)(pc + 28);
-    GLenum format      = * (GLenum *)(pc + 32);
-    GLenum type        = * (GLenum *)(pc + 36);
-
-    if (swap) {
-        SWAP_32( row_length );
-        SWAP_32( skip_rows );
-        SWAP_32( alignment );
-        SWAP_32( target );
-        SWAP_32( count );
-        SWAP_32( format );
-        SWAP_32( type );
+    GLint skip_images = 0;
+    GLint skip_rows = *(GLint *) (pc + 8);
+    GLint alignment = *(GLint *) (pc + 16);
+    GLenum target = *(GLenum *) (pc + 20);
+    GLsizei count = *(GLsizei *) (pc + 28);
+    GLenum format = *(GLenum *) (pc + 32);
+    GLenum type = *(GLenum *) (pc + 36);
+
+    if (swap) {
+        row_length = bswap_32(row_length);
+        skip_rows = bswap_32(skip_rows);
+        alignment = bswap_32(alignment);
+        target = bswap_32(target);
+        count = bswap_32(count);
+        format = bswap_32(format);
+        type = bswap_32(type);
     }
 
     return __glXImageSize(format, type, target, count, 1, 1,
@@ -478,26 +472,26 @@ __glXColorSubTableReqSize( const GLbyte 
 }
 
 int
-__glXConvolutionFilter1DReqSize( const GLbyte * pc, Bool swap )
+__glXConvolutionFilter1DReqSize(const GLbyte *pc, Bool swap)
 {
-    GLint row_length   = *  (GLint *)(pc +  4);
+    GLint row_length = *(GLint *) (pc + 4);
     GLint image_height = 0;
-    GLint skip_images  = 0;
-    GLint skip_rows    = *  (GLint *)(pc +  8);
-    GLint alignment    = *  (GLint *)(pc + 16);
-    GLenum target      = * (GLenum *)(pc + 20);
-    GLsizei width      = *(GLsizei *)(pc + 28);
-    GLenum format      = * (GLenum *)(pc + 36);
-    GLenum type        = * (GLenum *)(pc + 40);
-
-    if (swap) {
-        SWAP_32( row_length );
-        SWAP_32( skip_rows );
-        SWAP_32( alignment );
-        SWAP_32( target );
-        SWAP_32( width );
-        SWAP_32( format );
-        SWAP_32( type );
+    GLint skip_images = 0;
+    GLint skip_rows = *(GLint *) (pc + 8);
+    GLint alignment = *(GLint *) (pc + 16);
+    GLenum target = *(GLenum *) (pc + 20);
+    GLsizei width = *(GLsizei *) (pc + 28);
+    GLenum format = *(GLenum *) (pc + 36);
+    GLenum type = *(GLenum *) (pc + 40);
+
+    if (swap) {
+        row_length = bswap_32(row_length);
+        skip_rows = bswap_32(skip_rows);
+        alignment = bswap_32(alignment);
+        target = bswap_32(target);
+        width = bswap_32(width);
+        format = bswap_32(format);
+        type = bswap_32(type);
     }
 
     return __glXImageSize(format, type, target, width, 1, 1,
@@ -506,28 +500,28 @@ __glXConvolutionFilter1DReqSize( const G
 }
 
 int
-__glXConvolutionFilter2DReqSize( const GLbyte * pc, Bool swap )
+__glXConvolutionFilter2DReqSize(const GLbyte *pc, Bool swap)
 {
-    GLint row_length   = *  (GLint *)(pc +  4);
+    GLint row_length = *(GLint *) (pc + 4);
     GLint image_height = 0;
-    GLint skip_images  = 0;
-    GLint skip_rows    = *  (GLint *)(pc +  8);
-    GLint alignment    = *  (GLint *)(pc + 16);
-    GLenum target      = * (GLenum *)(pc + 20);
-    GLsizei width      = *(GLsizei *)(pc + 28);
-    GLsizei height     = *(GLsizei *)(pc + 32);
-    GLenum format      = * (GLenum *)(pc + 36);
-    GLenum type        = * (GLenum *)(pc + 40);
-
-    if (swap) {
-        SWAP_32( row_length );
-        SWAP_32( skip_rows );
-        SWAP_32( alignment );
-        SWAP_32( target );
-        SWAP_32( width );
-        SWAP_32( height );
-        SWAP_32( format );
-        SWAP_32( type );
+    GLint skip_images = 0;
+    GLint skip_rows = *(GLint *) (pc + 8);
+    GLint alignment = *(GLint *) (pc + 16);
+    GLenum target = *(GLenum *) (pc + 20);
+    GLsizei width = *(GLsizei *) (pc + 28);
+    GLsizei height = *(GLsizei *) (pc + 32);
+    GLenum format = *(GLenum *) (pc + 36);
+    GLenum type = *(GLenum *) (pc + 40);
+
+    if (swap) {
+        row_length = bswap_32(row_length);
+        skip_rows = bswap_32(skip_rows);
+        alignment = bswap_32(alignment);
+        target = bswap_32(target);
+        width = bswap_32(width);
+        height = bswap_32(height);
+        format = bswap_32(format);
+        type = bswap_32(type);
     }
 
     return __glXImageSize(format, type, target, width, height, 1,
@@ -536,13 +530,13 @@ __glXConvolutionFilter2DReqSize( const G
 }
 
 int
-__glXConvolutionParameterfvReqSize( const GLbyte * pc, Bool swap )
+__glXConvolutionParameterfvReqSize(const GLbyte *pc, Bool swap)
 {
-    GLenum pname       = * (GLenum *)(pc + 4);
+    GLenum pname = *(GLenum *) (pc + 4);
     GLsizei compsize;
 
     if (swap) {
-        SWAP_32( pname );
+        pname = bswap_32(pname);
     }
 
     compsize = __glConvolutionParameterfv_size(pname);
@@ -550,32 +544,32 @@ __glXConvolutionParameterfvReqSize( cons
 }
 
 int
-__glXTexImage3DReqSize( const GLbyte * pc, Bool swap )
+__glXTexImage3DReqSize(const GLbyte *pc, Bool swap)
 {
-    GLint row_length   = *  (GLint *)(pc +  4);
-    GLint image_height = *  (GLint *)(pc +  8);
-    GLint skip_rows    = *  (GLint *)(pc + 16);
-    GLint skip_images  = *  (GLint *)(pc + 20);
-    GLint alignment    = *  (GLint *)(pc + 32);
-    GLenum target      = * (GLenum *)(pc + 36);
-    GLsizei width      = *(GLsizei *)(pc + 48);
-    GLsizei height     = *(GLsizei *)(pc + 52);
-    GLsizei depth      = *(GLsizei *)(pc + 56);
-    GLenum format      = * (GLenum *)(pc + 68);
-    GLenum type        = * (GLenum *)(pc + 72);
-
-    if (swap) {
-        SWAP_32( row_length );
-        SWAP_32( image_height );
-        SWAP_32( skip_rows );
-        SWAP_32( skip_images );
-        SWAP_32( alignment );
-        SWAP_32( target );
-        SWAP_32( width );
-        SWAP_32( height );
-        SWAP_32( depth );
-        SWAP_32( format );
-        SWAP_32( type );
+    GLint row_length = *(GLint *) (pc + 4);
+    GLint image_height = *(GLint *) (pc + 8);
+    GLint skip_rows = *(GLint *) (pc + 16);
+    GLint skip_images = *(GLint *) (pc + 20);
+    GLint alignment = *(GLint *) (pc + 32);
+    GLenum target = *(GLenum *) (pc + 36);
+    GLsizei width = *(GLsizei *) (pc + 48);
+    GLsizei height = *(GLsizei *) (pc + 52);
+    GLsizei depth = *(GLsizei *) (pc + 56);
+    GLenum format = *(GLenum *) (pc + 68);
+    GLenum type = *(GLenum *) (pc + 72);
+
+    if (swap) {
+        row_length = bswap_32(row_length);
+        image_height = bswap_32(image_height);
+        skip_rows = bswap_32(skip_rows);
+        skip_images = bswap_32(skip_images);
+        alignment = bswap_32(alignment);
+        target = bswap_32(target);
+        width = bswap_32(width);
+        height = bswap_32(height);
+        depth = bswap_32(depth);
+        format = bswap_32(format);
+        type = bswap_32(type);
     }
 
     return __glXImageSize(format, type, target, width, height, depth,
@@ -584,32 +578,32 @@ __glXTexImage3DReqSize( const GLbyte * p
 }
 
 int
-__glXTexSubImage3DReqSize( const GLbyte * pc, Bool swap )
+__glXTexSubImage3DReqSize(const GLbyte *pc, Bool swap)
 {
-    GLint row_length   = *  (GLint *)(pc +  4);
-    GLint image_height = *  (GLint *)(pc +  8);
-    GLint skip_rows    = *  (GLint *)(pc + 16);
-    GLint skip_images  = *  (GLint *)(pc + 20);
-    GLint alignment    = *  (GLint *)(pc + 32);
-    GLenum target      = * (GLenum *)(pc + 36);
-    GLsizei width      = *(GLsizei *)(pc + 60);
-    GLsizei height     = *(GLsizei *)(pc + 64);
-    GLsizei depth      = *(GLsizei *)(pc + 68);
-    GLenum format      = * (GLenum *)(pc + 76);
-    GLenum type        = * (GLenum *)(pc + 80);
-
-    if (swap) {
-        SWAP_32( row_length );
-        SWAP_32( image_height );
-        SWAP_32( skip_rows );
-        SWAP_32( skip_images );
-        SWAP_32( alignment );
-        SWAP_32( target );
-        SWAP_32( width );
-        SWAP_32( height );
-        SWAP_32( depth );
-        SWAP_32( format );
-        SWAP_32( type );
+    GLint row_length = *(GLint *) (pc + 4);
+    GLint image_height = *(GLint *) (pc + 8);
+    GLint skip_rows = *(GLint *) (pc + 16);
+    GLint skip_images = *(GLint *) (pc + 20);
+    GLint alignment = *(GLint *) (pc + 32);
+    GLenum target = *(GLenum *) (pc + 36);
+    GLsizei width = *(GLsizei *) (pc + 60);
+    GLsizei height = *(GLsizei *) (pc + 64);
+    GLsizei depth = *(GLsizei *) (pc + 68);
+    GLenum format = *(GLenum *) (pc + 76);
+    GLenum type = *(GLenum *) (pc + 80);
+
+    if (swap) {
+        row_length = bswap_32(row_length);
+        image_height = bswap_32(image_height);
+        skip_rows = bswap_32(skip_rows);
+        skip_images = bswap_32(skip_images);
+        alignment = bswap_32(alignment);
+        target = bswap_32(target);
+        width = bswap_32(width);
+        height = bswap_32(height);
+        depth = bswap_32(depth);
+        format = bswap_32(format);
+        type = bswap_32(type);
     }
 
     return __glXImageSize(format, type, target, width, height, depth,
@@ -618,221 +612,221 @@ __glXTexSubImage3DReqSize( const GLbyte 
 }
 
 int
-__glXDrawBuffersARBReqSize( const GLbyte * pc, Bool swap )
+__glXCompressedTexImage1DARBReqSize(const GLbyte *pc, Bool swap)
 {
-    GLsizei n          = *(GLsizei *)(pc + 0);
+    GLsizei imageSize = *(GLsizei *) (pc + 20);
 
     if (swap) {
-        SWAP_32( n );
+        imageSize = bswap_32(imageSize);
     }
 
-    return __GLX_PAD((n * 4));
+    return __GLX_PAD(imageSize);
 }
 
 int
-__glXPointParameterfvEXTReqSize( const GLbyte * pc, Bool swap )
+__glXCompressedTexImage2DARBReqSize(const GLbyte *pc, Bool swap)
 {
-    GLenum pname       = * (GLenum *)(pc + 0);
-    GLsizei compsize;
+    GLsizei imageSize = *(GLsizei *) (pc + 24);
 
     if (swap) {
-        SWAP_32( pname );
+        imageSize = bswap_32(imageSize);
     }
 
-    compsize = __glPointParameterfvEXT_size(pname);
-    return __GLX_PAD((compsize * 4));
+    return __GLX_PAD(imageSize);
 }
 
 int
-__glXCompressedTexImage3DARBReqSize( const GLbyte * pc, Bool swap )
+__glXCompressedTexImage3DARBReqSize(const GLbyte *pc, Bool swap)
 {
-    GLsizei imageSize  = *(GLsizei *)(pc + 28);
+    GLsizei imageSize = *(GLsizei *) (pc + 28);
 
     if (swap) {
-        SWAP_32( imageSize );
+        imageSize = bswap_32(imageSize);
     }
 
     return __GLX_PAD(imageSize);
 }
 
 int
-__glXCompressedTexImage2DARBReqSize( const GLbyte * pc, Bool swap )
+__glXCompressedTexSubImage3DARBReqSize(const GLbyte *pc, Bool swap)
 {
-    GLsizei imageSize  = *(GLsizei *)(pc + 24);
+    GLsizei imageSize = *(GLsizei *) (pc + 36);
 
     if (swap) {
-        SWAP_32( imageSize );
+        imageSize = bswap_32(imageSize);
     }
 
     return __GLX_PAD(imageSize);
 }
 
 int
-__glXCompressedTexImage1DARBReqSize( const GLbyte * pc, Bool swap )
+__glXProgramStringARBReqSize(const GLbyte *pc, Bool swap)
 {
-    GLsizei imageSize  = *(GLsizei *)(pc + 20);
+    GLsizei len = *(GLsizei *) (pc + 8);
 
     if (swap) {
-        SWAP_32( imageSize );
+        len = bswap_32(len);
     }
 
-    return __GLX_PAD(imageSize);
+    return __GLX_PAD(len);
 }
 
 int
-__glXCompressedTexSubImage3DARBReqSize( const GLbyte * pc, Bool swap )
+__glXDrawBuffersARBReqSize(const GLbyte *pc, Bool swap)
 {
-    GLsizei imageSize  = *(GLsizei *)(pc + 36);
+    GLsizei n = *(GLsizei *) (pc + 0);
 
     if (swap) {
-        SWAP_32( imageSize );
+        n = bswap_32(n);
     }
 
-    return __GLX_PAD(imageSize);
+    return __GLX_PAD((n * 4));
 }
 
 int
-__glXLoadProgramNVReqSize( const GLbyte * pc, Bool swap )
+__glXPointParameterfvEXTReqSize(const GLbyte *pc, Bool swap)
 {
-    GLsizei len        = *(GLsizei *)(pc + 8);
+    GLenum pname = *(GLenum *) (pc + 0);
+    GLsizei compsize;
 
     if (swap) {
-        SWAP_32( len );
+        pname = bswap_32(pname);
     }
 
-    return __GLX_PAD(len);
+    compsize = __glPointParameterfvEXT_size(pname);
+    return __GLX_PAD((compsize * 4));
 }
 
 int
-__glXProgramParameters4dvNVReqSize( const GLbyte * pc, Bool swap )
+__glXProgramParameters4dvNVReqSize(const GLbyte *pc, Bool swap)
 {
-    GLuint num         = * (GLuint *)(pc + 8);
+    GLuint num = *(GLuint *) (pc + 8);
 
     if (swap) {
-        SWAP_32( num );
+        num = bswap_32(num);
     }
 
     return __GLX_PAD((num * 32));
 }
 
 int
-__glXProgramParameters4fvNVReqSize( const GLbyte * pc, Bool swap )
+__glXProgramParameters4fvNVReqSize(const GLbyte *pc, Bool swap)
 {
-    GLuint num         = * (GLuint *)(pc + 8);
+    GLuint num = *(GLuint *) (pc + 8);
 
     if (swap) {
-        SWAP_32( num );
+        num = bswap_32(num);
     }
 
     return __GLX_PAD((num * 16));
 }
 
 int
-__glXVertexAttribs1dvNVReqSize( const GLbyte * pc, Bool swap )
+__glXVertexAttribs1dvNVReqSize(const GLbyte *pc, Bool swap)
 {
-    GLsizei n          = *(GLsizei *)(pc + 4);
+    GLsizei n = *(GLsizei *) (pc + 4);
 
     if (swap) {
-        SWAP_32( n );
+        n = bswap_32(n);
     }
 
     return __GLX_PAD((n * 8));
 }
 
 int
-__glXVertexAttribs2dvNVReqSize( const GLbyte * pc, Bool swap )
+__glXVertexAttribs2dvNVReqSize(const GLbyte *pc, Bool swap)
 {
-    GLsizei n          = *(GLsizei *)(pc + 4);
+    GLsizei n = *(GLsizei *) (pc + 4);
 
     if (swap) {
-        SWAP_32( n );
+        n = bswap_32(n);
     }
 
     return __GLX_PAD((n * 16));
 }
 
 int
-__glXVertexAttribs3dvNVReqSize( const GLbyte * pc, Bool swap )
+__glXVertexAttribs3dvNVReqSize(const GLbyte *pc, Bool swap)
 {
-    GLsizei n          = *(GLsizei *)(pc + 4);
+    GLsizei n = *(GLsizei *) (pc + 4);
 
     if (swap) {
-        SWAP_32( n );
+        n = bswap_32(n);
     }
 
     return __GLX_PAD((n * 24));
 }
 
 int
-__glXVertexAttribs3fvNVReqSize( const GLbyte * pc, Bool swap )
+__glXVertexAttribs3fvNVReqSize(const GLbyte *pc, Bool swap)
 {
-    GLsizei n          = *(GLsizei *)(pc + 4);
+    GLsizei n = *(GLsizei *) (pc + 4);
 
     if (swap) {
-        SWAP_32( n );
+        n = bswap_32(n);
     }
 
     return __GLX_PAD((n * 12));
 }
 
 int
-__glXVertexAttribs3svNVReqSize( const GLbyte * pc, Bool swap )
+__glXVertexAttribs3svNVReqSize(const GLbyte *pc, Bool swap)
 {
-    GLsizei n          = *(GLsizei *)(pc + 4);
+    GLsizei n = *(GLsizei *) (pc + 4);
 
     if (swap) {
-        SWAP_32( n );
+        n = bswap_32(n);
     }
 
     return __GLX_PAD((n * 6));
 }
 
 int
-__glXVertexAttribs4dvNVReqSize( const GLbyte * pc, Bool swap )
+__glXVertexAttribs4dvNVReqSize(const GLbyte *pc, Bool swap)
 {
-    GLsizei n          = *(GLsizei *)(pc + 4);
+    GLsizei n = *(GLsizei *) (pc + 4);
 
     if (swap) {
-        SWAP_32( n );
+        n = bswap_32(n);
     }
 
     return __GLX_PAD((n * 32));
 }
 
 int
-__glXProgramNamedParameter4fvNVReqSize( const GLbyte * pc, Bool swap )
+__glXProgramNamedParameter4fvNVReqSize(const GLbyte *pc, Bool swap)
 {
-    GLsizei len        = *(GLsizei *)(pc + 4);
+    GLsizei len = *(GLsizei *) (pc + 4);
 
     if (swap) {
-        SWAP_32( len );
+        len = bswap_32(len);
     }
 
     return __GLX_PAD(len);
 }
 
-ALIAS( Fogiv, Fogfv )
-ALIAS( Lightiv, Lightfv )
-ALIAS( LightModeliv, LightModelfv )
-ALIAS( Materialiv, Materialfv )
-ALIAS( TexParameteriv, TexParameterfv )
-ALIAS( TexEnviv, TexEnvfv )
-ALIAS( TexGeniv, TexGenfv )
-ALIAS( PixelMapuiv, PixelMapfv )
-ALIAS( ColorTableParameteriv, ColorTableParameterfv )
-ALIAS( ConvolutionParameteriv, ConvolutionParameterfv )
-ALIAS( CompressedTexSubImage2DARB, CompressedTexImage3DARB )
-ALIAS( CompressedTexSubImage1DARB, CompressedTexImage1DARB )
-ALIAS( RequestResidentProgramsNV, DrawBuffersARB )
-ALIAS( VertexAttribs1fvNV, PixelMapfv )
-ALIAS( VertexAttribs1svNV, PixelMapusv )
-ALIAS( VertexAttribs2fvNV, VertexAttribs1dvNV )
-ALIAS( VertexAttribs2svNV, PixelMapfv )
-ALIAS( VertexAttribs4fvNV, VertexAttribs2dvNV )
-ALIAS( VertexAttribs4svNV, VertexAttribs1dvNV )
-ALIAS( VertexAttribs4ubvNV, PixelMapfv )
-ALIAS( PointParameterivNV, PointParameterfvEXT )
-ALIAS( ProgramStringARB, LoadProgramNV )
-ALIAS( ProgramNamedParameter4dvNV, CompressedTexSubImage3DARB )
-ALIAS( DeleteRenderbuffersEXT, DrawBuffersARB )
-ALIAS( DeleteFramebuffersEXT, DrawBuffersARB )
+ALIAS(Fogiv, Fogfv)
+    ALIAS(Lightiv, Lightfv)
+    ALIAS(LightModeliv, LightModelfv)
+    ALIAS(Materialiv, Materialfv)
+    ALIAS(TexParameteriv, TexParameterfv)
+    ALIAS(TexEnviv, TexEnvfv)
+    ALIAS(TexGeniv, TexGenfv)
+    ALIAS(PixelMapuiv, PixelMapfv)
+    ALIAS(ColorTableParameteriv, ColorTableParameterfv)
+    ALIAS(ConvolutionParameteriv, ConvolutionParameterfv)
+    ALIAS(CompressedTexSubImage1DARB, CompressedTexImage1DARB)
+    ALIAS(CompressedTexSubImage2DARB, CompressedTexImage3DARB)
+    ALIAS(LoadProgramNV, ProgramStringARB)
+    ALIAS(RequestResidentProgramsNV, DrawBuffersARB)
+    ALIAS(VertexAttribs1fvNV, PixelMapfv)
+    ALIAS(VertexAttribs1svNV, PixelMapusv)
+    ALIAS(VertexAttribs2fvNV, VertexAttribs1dvNV)
+    ALIAS(VertexAttribs2svNV, PixelMapfv)
+    ALIAS(VertexAttribs4fvNV, VertexAttribs2dvNV)
+    ALIAS(VertexAttribs4svNV, VertexAttribs1dvNV)
+    ALIAS(VertexAttribs4ubvNV, PixelMapfv)
+    ALIAS(PointParameterivNV, PointParameterfvEXT)
+    ALIAS(ProgramNamedParameter4dvNV, CompressedTexSubImage3DARB)
+    ALIAS(DeleteFramebuffersEXT, DrawBuffersARB)
+    ALIAS(DeleteRenderbuffersEXT, DrawBuffersARB)
diff --git a/GL/glx/indirect_reqsize.h b/GL/glx/indirect_reqsize.h
index 23bc41c..26211ee 100644
--- a/GL/glx/indirect_reqsize.h
+++ b/GL/glx/indirect_reqsize.h
@@ -83,14 +83,15 @@ extern PURE HIDDEN int __glXConvolutionP
 extern PURE HIDDEN int __glXSeparableFilter2DReqSize(const GLbyte *pc, Bool swap);
 extern PURE HIDDEN int __glXTexImage3DReqSize(const GLbyte *pc, Bool swap);
 extern PURE HIDDEN int __glXTexSubImage3DReqSize(const GLbyte *pc, Bool swap);
-extern PURE HIDDEN int __glXDrawBuffersARBReqSize(const GLbyte *pc, Bool swap);
-extern PURE HIDDEN int __glXPointParameterfvEXTReqSize(const GLbyte *pc, Bool swap);
-extern PURE HIDDEN int __glXCompressedTexImage3DARBReqSize(const GLbyte *pc, Bool swap);
-extern PURE HIDDEN int __glXCompressedTexImage2DARBReqSize(const GLbyte *pc, Bool swap);
 extern PURE HIDDEN int __glXCompressedTexImage1DARBReqSize(const GLbyte *pc, Bool swap);
-extern PURE HIDDEN int __glXCompressedTexSubImage3DARBReqSize(const GLbyte *pc, Bool swap);
-extern PURE HIDDEN int __glXCompressedTexSubImage2DARBReqSize(const GLbyte *pc, Bool swap);
+extern PURE HIDDEN int __glXCompressedTexImage2DARBReqSize(const GLbyte *pc, Bool swap);
+extern PURE HIDDEN int __glXCompressedTexImage3DARBReqSize(const GLbyte *pc, Bool swap);
 extern PURE HIDDEN int __glXCompressedTexSubImage1DARBReqSize(const GLbyte *pc, Bool swap);
+extern PURE HIDDEN int __glXCompressedTexSubImage2DARBReqSize(const GLbyte *pc, Bool swap);
+extern PURE HIDDEN int __glXCompressedTexSubImage3DARBReqSize(const GLbyte *pc, Bool swap);
+extern PURE HIDDEN int __glXProgramStringARBReqSize(const GLbyte *pc, Bool swap);
+extern PURE HIDDEN int __glXDrawBuffersARBReqSize(const GLbyte *pc, Bool swap);
+extern PURE HIDDEN int __glXPointParameterfvEXTReqSize(const GLbyte *pc, Bool swap);
 extern PURE HIDDEN int __glXLoadProgramNVReqSize(const GLbyte *pc, Bool swap);
 extern PURE HIDDEN int __glXProgramParameters4dvNVReqSize(const GLbyte *pc, Bool swap);
 extern PURE HIDDEN int __glXProgramParameters4fvNVReqSize(const GLbyte *pc, Bool swap);
@@ -109,11 +110,10 @@ extern PURE HIDDEN int __glXVertexAttrib
 extern PURE HIDDEN int __glXVertexAttribs4svNVReqSize(const GLbyte *pc, Bool swap);
 extern PURE HIDDEN int __glXVertexAttribs4ubvNVReqSize(const GLbyte *pc, Bool swap);
 extern PURE HIDDEN int __glXPointParameterivNVReqSize(const GLbyte *pc, Bool swap);
-extern PURE HIDDEN int __glXProgramStringARBReqSize(const GLbyte *pc, Bool swap);
-extern PURE HIDDEN int __glXProgramNamedParameter4fvNVReqSize(const GLbyte *pc, Bool swap);
 extern PURE HIDDEN int __glXProgramNamedParameter4dvNVReqSize(const GLbyte *pc, Bool swap);
-extern PURE HIDDEN int __glXDeleteRenderbuffersEXTReqSize(const GLbyte *pc, Bool swap);
+extern PURE HIDDEN int __glXProgramNamedParameter4fvNVReqSize(const GLbyte *pc, Bool swap);
 extern PURE HIDDEN int __glXDeleteFramebuffersEXTReqSize(const GLbyte *pc, Bool swap);
+extern PURE HIDDEN int __glXDeleteRenderbuffersEXTReqSize(const GLbyte *pc, Bool swap);
 
 #  undef HIDDEN
 #  undef PURE
diff-tree 6d603bb47ff9d238637adbf30c6e9697e6e7e6fa (from 953a9ef949b4c57d28daeec57031fe1ce368c27c)
Author: Ian Romanick <idr at us.ibm.com>
Date:   Thu Jan 4 14:49:26 2007 -0800

    Add new header file containing byte-order wrappers.
    
    Move the byte-order related wrappers out of the individual source
    files into a dedicated header file.  Modify the single hand-coded
    source file that uses the byte-order wrappers to use the new header
    file.

diff --git a/GL/glx/glxbyteorder.h b/GL/glx/glxbyteorder.h
new file mode 100644
index 0000000..3c094d7
--- /dev/null
+++ b/GL/glx/glxbyteorder.h
@@ -0,0 +1,48 @@
+/*
+ * (C) Copyright IBM Corporation 2006, 2007
+ * 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, sub license,
+ * 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
+ * THE COPYRIGHT HOLDERS, THE AUTHORS, 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.
+ */
+
+/**
+ * \file glxbyteorder.h
+ * Platform glue for handling byte-ordering issues in GLX protocol.
+ * 
+ * \author Ian Romanick <idr at us.ibm.com>
+ */
+#if !defined(__GLXBYTEORDER_H__)
+#define __GLXBYTEORDER_H__
+
+#if defined(__linux__) || defined(__GLIBC__) || defined(__GNU__)
+#include <byteswap.h>
+#elif defined(__OpenBSD__)
+#include <sys/endian.h>
+#define bswap_16 __swap16
+#define bswap_32 __swap32
+#define bswap_64 __swap64
+#else
+#include <sys/endian.h>
+#define bswap_16 bswap16
+#define bswap_32 bswap32
+#define bswap_64 bswap64
+#endif
+
+#endif /* !defined(__GLXBYTEORDER_H__) */
diff --git a/GL/glx/swap_interval.c b/GL/glx/swap_interval.c
index c4137c1..6aa92a3 100644
--- a/GL/glx/swap_interval.c
+++ b/GL/glx/swap_interval.c
@@ -40,19 +40,7 @@
 #include "dispatch.h"
 #include "glapioffsets.h"
 
-#if defined(__linux__) || defined (__GLIBC__) || defined (__GNU__)
-#include <byteswap.h>
-#elif defined(__OpenBSD__)
-#include <sys/endian.h>
-#define bswap_16 __swap16
-#define bswap_32 __swap32
-#define bswap_64 __swap64
-#else
-#include <sys/endian.h>
-#define bswap_16 bswap16
-#define bswap_32 bswap32
-#define bswap_64 bswap64
-#endif
+#include "glxbyteorder.h"
 
 static int DoSwapInterval(__GLXclientState *cl, GLbyte *pc, int do_swap);
 
diff-tree 7d2ec92170ebbdfa10a05734cb7cfaac97d19d65 (from aab2ca204279b638c7e5bb6b8427c58be9704c57)
Author: Eric Anholt <eric at anholt.net>
Date:   Thu Jan 4 12:24:48 2007 -0800

    Keep track of how many visuals we set up for GLcore, to avoid an invalid free.
    
    The proper fix would involve actually setting up the ARGB visual for GLcore,
    but I just want the server to not crash at exit.

diff --git a/GL/mesa/X/xf86glx.c b/GL/mesa/X/xf86glx.c
index 94959d6..47c87f6 100644
--- a/GL/mesa/X/xf86glx.c
+++ b/GL/mesa/X/xf86glx.c
@@ -78,6 +78,7 @@ typedef struct __GLXMESAdrawable __GLXME
 struct __GLXMESAscreen {
     __GLXscreen   base;
     int           index;
+    int		  num_vis;
     XMesaVisual  *xm_vis;
 };
 
@@ -280,7 +281,7 @@ __glXMesaScreenDestroy(__GLXscreen *scre
     __GLXMESAscreen *mesaScreen = (__GLXMESAscreen *) screen;
     int i;
 
-    for (i = 0; i < screen->numVisuals; i++) {
+    for (i = 0; i < mesaScreen->num_vis; i++) {
 	if (mesaScreen->xm_vis[i])
 	    XMesaDestroyVisual(mesaScreen->xm_vis[i]);
     }
@@ -389,6 +390,7 @@ static void init_screen_visuals(__GLXMES
 
     xfree(used);
 
+    screen->num_vis = pScreen->numVisuals;
     screen->xm_vis = pXMesaVisual;
 }
 
diff-tree aab2ca204279b638c7e5bb6b8427c58be9704c57 (from 2fd4626fa6969b84d8e2f9db16d6e2d44c4bc499)
Author: Eric Anholt <eric at anholt.net>
Date:   Thu Dec 21 09:16:19 2006 -0800

    Try dlsym(RTLD_DEFAULT) first when finding symbols.
    
    The previous mechanism failed when finding drm symbols now that libdrm has
    moved to being linked by libdri instead of being linked into the server.

diff --git a/hw/xfree86/loader/dlloader.c b/hw/xfree86/loader/dlloader.c
index a0e8670..2afdef7 100644
--- a/hw/xfree86/loader/dlloader.c
+++ b/hw/xfree86/loader/dlloader.c
@@ -113,6 +113,10 @@ DLFindSymbol(const char *name)
     DLModuleList *l;
     void *p;
 
+    p = dlsym(RTLD_DEFAULT, name);
+    if (p != NULL)
+	return p;
+
     for (l = dlModuleList; l != NULL; l = l->next) {
         p = DLFindSymbolLocal(l->module, name);
 	if (p)
diff-tree 2fd4626fa6969b84d8e2f9db16d6e2d44c4bc499 (from 66fa87292ef26bd0f464481287f3af992cd5741c)
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Wed Jan 3 15:44:55 2007 -0800

    Make GLX byteswap macros more portable
    
    - Use autoconf tests instead of platform-specific #ifdef's to decide
      which macros to use.
    - Provide fallbacks for platforms like Solaris that don't provide any
      of the existing known forms.

diff --git a/GL/glx/indirect_dispatch_swap.c b/GL/glx/indirect_dispatch_swap.c
index 136f0d0..4fee8ee 100644
--- a/GL/glx/indirect_dispatch_swap.c
+++ b/GL/glx/indirect_dispatch_swap.c
@@ -25,21 +25,29 @@
  * SOFTWARE.
  */
 
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
 #include <X11/Xmd.h>
 #include <GL/gl.h>
 #include <GL/glxproto.h>
-#if defined(__linux__) || defined (__GLIBC__) || defined(__GNU__)
+#if defined(HAVE_BYTESWAP_H)
 #include <byteswap.h>
-#elif defined(__OpenBSD__)
+#elif defined(USE_SYS_ENDIAN_H)
 #include <sys/endian.h>
-#define bswap_16 __swap16
-#define bswap_32 __swap32
-#define bswap_64 __swap64
 #else
-#include <sys/endian.h>
-#define bswap_16 bswap16
-#define bswap_32 bswap32
-#define bswap_64 bswap64
+#define	bswap_16(value)  \
+ 	((((value) & 0xff) << 8) | ((value) >> 8))
+
+#define	bswap_32(value)	\
+ 	(((uint32_t)bswap_16((uint16_t)((value) & 0xffff)) << 16) | \
+ 	(uint32_t)bswap_16((uint16_t)((value) >> 16)))
+ 
+#define	bswap_64(value)	\
+ 	(((uint64_t)bswap_32((uint32_t)((value) & 0xffffffff)) \
+ 	    << 32) | \
+ 	(uint64_t)bswap_32((uint32_t)((value) >> 32)))
 #endif
 #include <inttypes.h>
 #include "indirect_size.h"
diff --git a/GL/glx/indirect_program.c b/GL/glx/indirect_program.c
index 8d5f0e6..8372191 100644
--- a/GL/glx/indirect_program.c
+++ b/GL/glx/indirect_program.c
@@ -46,18 +46,22 @@
 #include "dispatch.h"
 #include "glapioffsets.h"
 
-#if defined(__linux__) || defined (__GLIBC__) || defined (__GNU__)
+#if defined(HAVE_BYTESWAP_H)
 #include <byteswap.h>
-#elif defined(__OpenBSD__)
+#elif defined(USE_SYS_ENDIAN_H)
 #include <sys/endian.h>
-#define bswap_16 __swap16
-#define bswap_32 __swap32
-#define bswap_64 __swap64
 #else
-#include <sys/endian.h>
-#define bswap_16 bswap16
-#define bswap_32 bswap32
-#define bswap_64 bswap64
+#define	bswap_16(value)  \
+ 	((((value) & 0xff) << 8) | ((value) >> 8))
+
+#define	bswap_32(value)	\
+ 	(((uint32_t)bswap_16((uint16_t)((value) & 0xffff)) << 16) | \
+ 	(uint32_t)bswap_16((uint16_t)((value) >> 16)))
+ 
+#define	bswap_64(value)	\
+ 	(((uint64_t)bswap_32((uint32_t)((value) & 0xffffffff)) \
+ 	    << 32) | \
+ 	(uint64_t)bswap_32((uint32_t)((value) >> 32)))
 #endif
 
 static int DoGetProgramString(struct __GLXclientStateRec *cl, GLbyte *pc,
diff --git a/GL/glx/indirect_texture_compression.c b/GL/glx/indirect_texture_compression.c
index 35af1d2..801579d 100644
--- a/GL/glx/indirect_texture_compression.c
+++ b/GL/glx/indirect_texture_compression.c
@@ -39,18 +39,22 @@
 #include "glthread.h"
 #include "dispatch.h"
 
-#if defined(__linux__) || defined (__GLIBC__) || defined (__GNU__)
+#if defined(HAVE_BYTESWAP_H)
 #include <byteswap.h>
-#elif defined(__OpenBSD__)
+#elif defined(USE_SYS_ENDIAN_H)
 #include <sys/endian.h>
-#define bswap_16 __swap16
-#define bswap_32 __swap32
-#define bswap_64 __swap64
 #else
-#include <sys/endian.h>
-#define bswap_16 bswap16
-#define bswap_32 bswap32
-#define bswap_64 bswap64
+#define	bswap_16(value)  \
+ 	((((value) & 0xff) << 8) | ((value) >> 8))
+
+#define	bswap_32(value)	\
+ 	(((uint32_t)bswap_16((uint16_t)((value) & 0xffff)) << 16) | \
+ 	(uint32_t)bswap_16((uint16_t)((value) >> 16)))
+ 
+#define	bswap_64(value)	\
+ 	(((uint64_t)bswap_32((uint32_t)((value) & 0xffffffff)) \
+ 	    << 32) | \
+ 	(uint64_t)bswap_32((uint32_t)((value) >> 32)))
 #endif
 
 int __glXDisp_GetCompressedTexImageARB(struct __GLXclientStateRec *cl, GLbyte *pc)
diff --git a/GL/glx/indirect_util.c b/GL/glx/indirect_util.c
index 09b7ab8..d72e407 100644
--- a/GL/glx/indirect_util.c
+++ b/GL/glx/indirect_util.c
@@ -23,23 +23,31 @@
  * SOFTWARE.
  */
 
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
 #include <string.h>
 
 #include <X11/Xmd.h>
 #include <GL/gl.h>
 #include <GL/glxproto.h>
-#if defined(__linux__) || defined (__GLIBC__) || defined(__GNU__)
+#if defined(HAVE_BYTESWAP_H)
 #include <byteswap.h>
-#elif defined(__OpenBSD__)
+#elif defined(USE_SYS_ENDIAN_H)
 #include <sys/endian.h>
-#define bswap_16 __swap16
-#define bswap_32 __swap32
-#define bswap_64 __swap64
 #else
-#include <sys/endian.h>
-#define bswap_16 bswap16
-#define bswap_32 bswap32
-#define bswap_64 bswap64
+#define	bswap_16(value)  \
+ 	((((value) & 0xff) << 8) | ((value) >> 8))
+
+#define	bswap_32(value)	\
+ 	(((uint32_t)bswap_16((uint16_t)((value) & 0xffff)) << 16) | \
+ 	(uint32_t)bswap_16((uint16_t)((value) >> 16)))
+ 
+#define	bswap_64(value)	\
+ 	(((uint64_t)bswap_32((uint32_t)((value) & 0xffffffff)) \
+ 	    << 32) | \
+ 	(uint64_t)bswap_32((uint32_t)((value) >> 32)))
 #endif
 #include <inttypes.h>
 #include "indirect_size.h"
diff --git a/GL/glx/swap_interval.c b/GL/glx/swap_interval.c
index c4137c1..e5b48a6 100644
--- a/GL/glx/swap_interval.c
+++ b/GL/glx/swap_interval.c
@@ -40,18 +40,22 @@
 #include "dispatch.h"
 #include "glapioffsets.h"
 
-#if defined(__linux__) || defined (__GLIBC__) || defined (__GNU__)
+#if defined(HAVE_BYTESWAP_H)
 #include <byteswap.h>
-#elif defined(__OpenBSD__)
+#elif defined(USE_SYS_ENDIAN_H)
 #include <sys/endian.h>
-#define bswap_16 __swap16
-#define bswap_32 __swap32
-#define bswap_64 __swap64
 #else
-#include <sys/endian.h>
-#define bswap_16 bswap16
-#define bswap_32 bswap32
-#define bswap_64 bswap64
+#define	bswap_16(value)  \
+ 	((((value) & 0xff) << 8) | ((value) >> 8))
+
+#define	bswap_32(value)	\
+ 	(((uint32_t)bswap_16((uint16_t)((value) & 0xffff)) << 16) | \
+ 	(uint32_t)bswap_16((uint16_t)((value) >> 16)))
+ 
+#define	bswap_64(value)	\
+ 	(((uint64_t)bswap_32((uint32_t)((value) & 0xffffffff)) \
+ 	    << 32) | \
+ 	(uint64_t)bswap_32((uint32_t)((value) >> 32)))
 #endif
 
 static int DoSwapInterval(__GLXclientState *cl, GLbyte *pc, int do_swap);
diff --git a/configure.ac b/configure.ac
index 491bdd5..278502b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -99,6 +99,64 @@ fi
 
 AC_TYPE_PID_T
 
+# Checks for headers/macros for byte swapping
+# Known variants:
+#	<byteswap.h> bswap_16, bswap_32, bswap_64  (glibc)
+#	<sys/endian.h> __swap16, __swap32, __swap64 (OpenBSD)
+#	<sys/endian.h> bswap16, bswap32, bswap64 (other BSD's)
+#	and a fallback to local macros if none of the above are found
+
+# if <byteswap.h> is found, assume it's the correct version
+AC_CHECK_HEADERS([byteswap.h])
+
+# if <sys/endian.h> is found, have to check which version
+AC_CHECK_HEADER([sys/endian.h], [HAVE_SYS_ENDIAN_H="yes"], [HAVE_SYS_ENDIAN_H="no"])
+
+if test "x$HAVE_SYS_ENDIAN_H" = "xyes" ; then
+	AC_MSG_CHECKING([for __swap16 variant of <sys/endian.h> byteswapping macros])
+	AC_LINK_IFELSE([AC_LANG_PROGRAM([
+#include <sys/endian.h>
+ ], [
+int a = 1, b;
+b = __swap16(a);
+ ])
+], [SYS_ENDIAN__SWAP='yes'], [SYS_ENDIAN__SWAP='no'])
+	AC_MSG_RESULT([$SYS_ENDIAN__SWAP])
+
+	AC_MSG_CHECKING([for bswap_16 variant of <sys/endian.h> byteswapping macros])
+	AC_LINK_IFELSE([AC_LANG_PROGRAM([
+#include <sys/endian.h>
+ ], [
+int a = 1, b;
+b = bswap_16(a);
+ ])
+], [SYS_ENDIAN_BSWAP='yes'], [SYS_ENDIAN_BSWAP='no'])
+	AC_MSG_RESULT([$SYS_ENDIAN_BSWAP])
+
+    	if test "$SYS_ENDIAN_BSWAP" = "yes" ; then
+		USE_SYS_ENDIAN_H=yes
+		BSWAP=bswap_
+	else	
+	    	if test "$SYS_ENDIAN__SWAP" = "yes" ; then
+			USE_SYS_ENDIAN_H=yes
+			BSWAP=__swap
+		else
+			USE_SYS_ENDIAN_H=no
+		fi
+	fi
+
+	if test "$USE_SYS_ENDIAN_H" = "yes" ; then
+	    AC_DEFINE([USE_SYS_ENDIAN_H], 1, 
+		[Define to use byteswap macros from <sys/endian.h>])
+	    AC_DEFINE_UNQUOTED([bswap_16], ${BSWAP}16, 
+			[Define to 16-bit byteswap macro])
+	    AC_DEFINE_UNQUOTED([bswap_32], ${BSWAP}32, 
+			[Define to 32-bit byteswap macro])
+	    AC_DEFINE_UNQUOTED([bswap_64], ${BSWAP}64, 
+			[Define to 64-bit byteswap macro])
+	fi
+fi
+
 dnl Checks for library functions.
 AC_FUNC_VPRINTF
 AC_CHECK_FUNCS([geteuid getuid link memmove memset mkstemp strchr strrchr \
diff --git a/include/dix-config.h.in b/include/dix-config.h.in
index 7aabae2..6bf2786 100644
--- a/include/dix-config.h.in
+++ b/include/dix-config.h.in
@@ -93,6 +93,9 @@
 /* Define to 1 if you have the <asm/mtrr.h> header file. */
 #undef HAVE_ASM_MTRR_H
 
+/* Define to 1 if you have the <byteswap.h> header file. */
+#undef HAVE_BYTESWAP_H
+
 /* Define to 1 if you have the <dbm.h> header file. */
 #undef HAVE_DBM_H
 
@@ -311,6 +314,9 @@
 /* Use rgb.txt directly */
 #undef USE_RGB_TXT
 
+/* Define to use byteswap macros from <sys/endian.h> */
+#undef USE_SYS_ENDIAN_H
+
 /* unaligned word accesses behave as expected */
 #undef WORKING_UNALIGNED_INT
 
@@ -469,4 +475,13 @@
 /* Path to XErrorDB file */
 #undef XERRORDB_PATH
 
+/* Define to 16-bit byteswap macro */
+#undef bswap_16
+
+/* Define to 32-bit byteswap macro */
+#undef bswap_32
+
+/* Define to 64-bit byteswap macro */
+#undef bswap_64
+
 #endif /* _DIX_CONFIG_H_ */
diff-tree 66fa87292ef26bd0f464481287f3af992cd5741c (from 3b5b7ef5c2ab1d196806f6359e0972fd78d204dd)
Author: Aaron Plattner <aplattner at nvidia.com>
Date:   Wed Jan 3 10:27:07 2007 -0800

    Fix BSF and BSR instructions in the x86 emulator.
    
    Patch courtesy of Michael Yaroslavtsev.

diff --git a/hw/xfree86/x86emu/ops2.c b/hw/xfree86/x86emu/ops2.c
index 4bf95c1..7b0156a 100644
--- a/hw/xfree86/x86emu/ops2.c
+++ b/hw/xfree86/x86emu/ops2.c
@@ -2129,7 +2129,7 @@ static void x86emuOp2_bsf(u8 X86EMU_UNUS
     uint srcoffset;
 
     START_OF_INSTR();
-    DECODE_PRINTF("BSF\n");
+    DECODE_PRINTF("BSF\t");
     FETCH_DECODE_MODRM(mod, rh, rl);
     switch(mod) {
     case 0:
@@ -2209,25 +2209,25 @@ static void x86emuOp2_bsf(u8 X86EMU_UNUS
 	break;
     case 3:				/* register to register */
 	if (M.x86.mode & SYSMODE_PREFIX_DATA) {
-	    u32 *srcreg, *dstreg;
+	    u32 srcval, *dstreg;
 
-	    srcreg = DECODE_RM_LONG_REGISTER(rl);
+	    srcval = *DECODE_RM_LONG_REGISTER(rl);
 	    DECODE_PRINTF(",");
 	    dstreg = DECODE_RM_LONG_REGISTER(rh);
 	    TRACE_AND_STEP();
-	    CONDITIONAL_SET_FLAG(*srcreg == 0, F_ZF);
+	    CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);
 	    for(*dstreg = 0; *dstreg < 32; (*dstreg)++)
-		if ((*srcreg >> *dstreg) & 1) break;
+		if ((srcval >> *dstreg) & 1) break;
 	} else {
-	    u16 *srcreg, *dstreg;
+	    u16 srcval, *dstreg;
 
-	    srcreg = DECODE_RM_WORD_REGISTER(rl);
+	    srcval = *DECODE_RM_WORD_REGISTER(rl);
 	    DECODE_PRINTF(",");
 	    dstreg = DECODE_RM_WORD_REGISTER(rh);
 	    TRACE_AND_STEP();
-	    CONDITIONAL_SET_FLAG(*srcreg == 0, F_ZF);
+	    CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);
 	    for(*dstreg = 0; *dstreg < 16; (*dstreg)++)
-		if ((*srcreg >> *dstreg) & 1) break;
+		if ((srcval >> *dstreg) & 1) break;
 	}
 	break;
     }
@@ -2245,7 +2245,7 @@ static void x86emuOp2_bsr(u8 X86EMU_UNUS
     uint srcoffset;
 
     START_OF_INSTR();
-    DECODE_PRINTF("BSF\n");
+    DECODE_PRINTF("BSR\t");
     FETCH_DECODE_MODRM(mod, rh, rl);
     switch(mod) {
     case 0:
@@ -2325,25 +2325,25 @@ static void x86emuOp2_bsr(u8 X86EMU_UNUS
 	break;
     case 3:				/* register to register */
 	if (M.x86.mode & SYSMODE_PREFIX_DATA) {
-	    u32 *srcreg, *dstreg;
+	    u32 srcval, *dstreg;
 
-	    srcreg = DECODE_RM_LONG_REGISTER(rl);
+	    srcval = *DECODE_RM_LONG_REGISTER(rl);
 	    DECODE_PRINTF(",");
 	    dstreg = DECODE_RM_LONG_REGISTER(rh);
 	    TRACE_AND_STEP();
-	    CONDITIONAL_SET_FLAG(*srcreg == 0, F_ZF);
+	    CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);
 	    for(*dstreg = 31; *dstreg > 0; (*dstreg)--)
-		if ((*srcreg >> *dstreg) & 1) break;
+		if ((srcval >> *dstreg) & 1) break;
 	} else {
-	    u16 *srcreg, *dstreg;
+	    u16 srcval, *dstreg;
 
-	    srcreg = DECODE_RM_WORD_REGISTER(rl);
+	    srcval = *DECODE_RM_WORD_REGISTER(rl);
 	    DECODE_PRINTF(",");
 	    dstreg = DECODE_RM_WORD_REGISTER(rh);
 	    TRACE_AND_STEP();
-	    CONDITIONAL_SET_FLAG(*srcreg == 0, F_ZF);
+	    CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);
 	    for(*dstreg = 15; *dstreg > 0; (*dstreg)--)
-		if ((*srcreg >> *dstreg) & 1) break;
+		if ((srcval >> *dstreg) & 1) break;
 	}
 	break;
     }
diff-tree 3b5b7ef5c2ab1d196806f6359e0972fd78d204dd (from 953a9ef949b4c57d28daeec57031fe1ce368c27c)
Author: Fredrik Höglund <fredrik at kde.org>
Date:   Wed Jan 3 21:05:35 2007 +0100

    Move the code for resetting the DPMS mode in response to input events,
    from WaitForSomething to mieqProcessInputEvents.
    
    mieqProcessInputEvents already handles resetting the screen saver.

diff --git a/mi/mieq.c b/mi/mieq.c
index 80915fd..507cdd3 100644
--- a/mi/mieq.c
+++ b/mi/mieq.c
@@ -52,6 +52,12 @@ in this Software without prior written a
 # include   "extinit.h"
 # include   "exglobals.h"
 
+#ifdef DPMSExtension
+# include "dpmsproc.h"
+# define DPMS_SERVER
+# include <X11/extensions/dpms.h>
+#endif
+
 #define QUEUE_SIZE  256
 
 typedef struct _Event {
@@ -183,6 +189,13 @@ mieqProcessInputEvents()
     while (miEventQueue.head != miEventQueue.tail) {
         if (screenIsSaved == SCREEN_SAVER_ON)
             SaveScreens (SCREEN_SAVER_OFF, ScreenSaverReset);
+#ifdef DPMSExtension
+        else if (DPMSPowerLevel != DPMSModeOn)
+            SetScreenSaverTimer();
+
+        if (DPMSPowerLevel != DPMSModeOn)
+            DPMSSet(DPMSModeOn);
+#endif
 
         e = &miEventQueue.events[miEventQueue.head];
         /* Assumption - screen switching can only occur on motion events. */
diff --git a/os/WaitFor.c b/os/WaitFor.c
index ba227a3..d39964f 100644
--- a/os/WaitFor.c
+++ b/os/WaitFor.c
@@ -337,10 +337,7 @@ WaitForSomething(int *pClientsReady)
 	    if (XFD_ANYSET(&tmp_set))
 		QueueWorkProc(EstablishNewConnections, NULL,
 			      (pointer)&LastSelectMask);
-#ifdef DPMSExtension
-	    if (XFD_ANYSET (&devicesReadable) && (DPMSPowerLevel != DPMSModeOn))
-		DPMSSet(DPMSModeOn);
-#endif
+
 	    if (XFD_ANYSET (&devicesReadable) || XFD_ANYSET (&clientsReadable))
 		break;
 #ifdef WIN32
diff-tree 953a9ef949b4c57d28daeec57031fe1ce368c27c (from e79602fca2f2cced66136729cdda4d356b0bdda0)
Author: Keith Packard <keithp at guitar.keithp.com>
Date:   Thu Dec 21 23:50:39 2006 -0800

    Track physical screen size and send out updates when that changes.
    
    Events and internal data structures need to be updated whenever the physical
    or pixel size of the screen changes. The code was ignoring the physical
    size, so changing only that would not be registered anywhere.
    (cherry picked from f42e3cea236fa0091ed398a818fc8e17b0e1b3df commit)

diff --git a/randr/randr.c b/randr/randr.c
index 1470035..5fa9baf 100644
--- a/randr/randr.c
+++ b/randr/randr.c
@@ -243,6 +243,10 @@ Bool RRScreenInit(ScreenPtr pScreen)
     pScrPriv->maxWidth = pScrPriv->minWidth = pScreen->width;
     pScrPriv->maxHeight = pScrPriv->minHeight = pScreen->height;
     
+    pScrPriv->width = pScreen->width;
+    pScrPriv->height = pScreen->height;
+    pScrPriv->mmWidth = pScreen->mmWidth;
+    pScrPriv->mmHeight = pScreen->mmHeight;
 #if RANDR_12_INTERFACE
     pScrPriv->rrScreenSetSize = NULL;
     pScrPriv->rrCrtcSet = NULL;
diff --git a/randr/randrstr.h b/randr/randrstr.h
index 88f7588..136a47e 100644
--- a/randr/randrstr.h
+++ b/randr/randrstr.h
@@ -224,6 +224,7 @@ typedef struct _rrScrPriv {
     CARD16		    minWidth, minHeight;
     CARD16		    maxWidth, maxHeight;
     CARD16		    width, height;	/* last known screen size */
+    CARD16		    mmWidth, mmHeight;	/* last known screen size */
 
     int			    numOutputs;
     RROutputPtr		    *outputs;
diff --git a/randr/rrscreen.c b/randr/rrscreen.c
index 7947f80..e10aa03 100644
--- a/randr/rrscreen.c
+++ b/randr/rrscreen.c
@@ -158,11 +158,15 @@ RRScreenSizeNotify (ScreenPtr	pScreen)
      * pixel size
      */
     if (pScrPriv->width == pScreen->width &&
-	pScrPriv->height == pScreen->height)
+	pScrPriv->height == pScreen->height &&
+	pScrPriv->mmWidth == pScreen->mmWidth &&
+	pScrPriv->mmHeight == pScreen->mmHeight)
 	return;
     
     pScrPriv->width = pScreen->width;
     pScrPriv->height = pScreen->height;
+    pScrPriv->mmWidth = pScreen->mmWidth;
+    pScrPriv->mmHeight = pScreen->mmHeight;
     pScrPriv->changed = TRUE;
 /*    pScrPriv->sizeChanged = TRUE; */
 
diff-tree e79602fca2f2cced66136729cdda4d356b0bdda0 (from dc5eb4523298f966bd5fd9ae6672160034b5e82c)
Author: Keith Packard <keithp at neko.keithp.com>
Date:   Sat Dec 30 21:52:22 2006 -0800

    Use RRScreenSetSizeRange in 1.0 compat. Check RRGetInfo for error.
    
    The RRScreenSizeSetRange function is used externally for 1.2 API drivers,
    but can also be used in the 1.0 compatibility code. This also ensures that
    the right changed bits are set so that clients are correctly notified when
    the range changes.
    
    RRGetInfo can return an error, use that to return BadAlloc to clients
    instead of blindly going on with various requests.
    (cherry picked from f05dd384d38c76dd9662933a03625dfef5b1c81f commit)

diff --git a/randr/rrinfo.c b/randr/rrinfo.c
index 85426f6..797cdb1 100644
--- a/randr/rrinfo.c
+++ b/randr/rrinfo.c
@@ -169,18 +169,7 @@ RRScanOldConfig (ScreenPtr pScreen, Rota
 	if (height > maxHeight) maxHeight = height;
     }
 
-    if (minWidth != pScrPriv->minWidth) {
-	pScrPriv->minWidth = minWidth; pScrPriv->changed = TRUE;
-    }
-    if (maxWidth != pScrPriv->maxWidth) {
-	pScrPriv->maxWidth = maxWidth; pScrPriv->changed = TRUE;
-    }
-    if (minHeight != pScrPriv->minHeight) {
-	pScrPriv->minHeight = minHeight; pScrPriv->changed = TRUE;
-    }
-    if (maxHeight != pScrPriv->maxHeight) {
-	pScrPriv->maxHeight = maxHeight; pScrPriv->changed = TRUE;
-    }
+    RRScreenSetSizeRange (pScreen, minWidth, minHeight, maxWidth, maxHeight);
 
     /* notice current mode */
     if (newMode)
@@ -219,7 +208,6 @@ RRGetInfo (ScreenPtr pScreen)
     return TRUE;
 }
 
-#if RANDR_12_INTERFACE
 /*
  * Register the range of sizes for the screen
  */
@@ -234,12 +222,19 @@ RRScreenSetSizeRange (ScreenPtr	pScreen,
 
     if (!pScrPriv)
 	return;
+    if (pScrPriv->minWidth == minWidth && pScrPriv->minHeight == minHeight &&
+	pScrPriv->maxWidth == maxWidth && pScrPriv->maxHeight == maxHeight)
+    {
+	return;
+    }
+	
     pScrPriv->minWidth  = minWidth;
     pScrPriv->minHeight = minHeight;
     pScrPriv->maxWidth  = maxWidth;
     pScrPriv->maxHeight = maxHeight;
+    pScrPriv->changed = TRUE;
+    pScrPriv->configChanged = TRUE;
 }
-#endif
 
 #ifdef RANDR_10_INTERFACE
 static Bool
diff --git a/randr/rrscreen.c b/randr/rrscreen.c
index 6f7afaf..7947f80 100644
--- a/randr/rrscreen.c
+++ b/randr/rrscreen.c
@@ -234,7 +234,8 @@ ProcRRGetScreenSizeRange (ClientPtr clie
     
     if (pScrPriv) 
     {
-	RRGetInfo (pScreen);
+	if (!RRGetInfo (pScreen))
+	    return BadAlloc;
 	rep.minWidth  = pScrPriv->minWidth;
 	rep.minHeight = pScrPriv->minHeight;
 	rep.maxWidth  = pScrPriv->maxWidth;
@@ -349,7 +350,8 @@ ProcRRGetScreenResources (ClientPtr clie
     rep.pad = 0;
     
     if (pScrPriv)
-	RRGetInfo (pScreen);
+	if (!RRGetInfo (pScreen))
+	    return BadAlloc;
 
     if (!pScrPriv)
     {
@@ -591,7 +593,8 @@ ProcRRGetScreenInfo (ClientPtr client)
     rep.pad = 0;
     
     if (pScrPriv)
-	RRGetInfo (pScreen);
+	if (!RRGetInfo (pScreen))
+	    return BadAlloc;
 
     output = RRFirstOutput (pScreen);
     
diff-tree dc5eb4523298f966bd5fd9ae6672160034b5e82c (from d077c0da470ab7291e8d838eaace57b066477d6f)
Author: Michel Dänzer <michel at tungstengraphics.com>
Date:   Sun Dec 31 17:59:44 2006 +0100

    fbdevhw: Override RGB offsets and masks after setting initial mode.
    
    This is a hack, but it should be a NOP for all the setups that worked before
    and actually seems to fix some others...
    
    Based on a patch by Peter Teichmann from
    http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=338241 .

diff --git a/hw/xfree86/fbdevhw/fbdevhw.c b/hw/xfree86/fbdevhw/fbdevhw.c
index a9288a7..8f78b85 100644
--- a/hw/xfree86/fbdevhw/fbdevhw.c
+++ b/hw/xfree86/fbdevhw/fbdevhw.c
@@ -745,6 +745,17 @@ fbdevHWModeInit(ScrnInfoPtr pScrn, Displ
 			   "FBIOGET_VSCREENINFO: %s\n", strerror(errno));
 		return FALSE;
 	}
+
+	/* XXX: This is a hack, but it should be a NOP for all the setups that
+	 * worked before and actually seems to fix some others...
+	 */
+	pScrn->offset.red   = fPtr->var.red.offset;
+	pScrn->offset.green = fPtr->var.green.offset;
+	pScrn->offset.blue  = fPtr->var.blue.offset;
+	pScrn->mask.red     = ((1 << fPtr->var.red.length) - 1) << fPtr->var.red.offset;
+	pScrn->mask.green   = ((1 << fPtr->var.green.length) - 1) << fPtr->var.green.offset;
+	pScrn->mask.blue    = ((1 << fPtr->var.blue.length) - 1) << fPtr->var.blue.offset;
+
 	return TRUE;
 }
 
diff-tree d077c0da470ab7291e8d838eaace57b066477d6f (from c385bcf0bde38dd869f7065f859dd4b4126f5690)
Author: Michel Dänzer <michel at tungstengraphics.com>
Date:   Sun Dec 31 17:23:31 2006 +0100

    fbdevhw: Use displayWidth for fbdev virtual width when appropriate.
    
    The fbdev API doesn't allow setting the pitch explicitly, so we have to set
    the virtual width to the pitch we're using for drawing. This fixes corruption
    after changing the virtual width with RandR.

diff --git a/hw/xfree86/fbdevhw/fbdevhw.c b/hw/xfree86/fbdevhw/fbdevhw.c
index 83b0dc1..a9288a7 100644
--- a/hw/xfree86/fbdevhw/fbdevhw.c
+++ b/hw/xfree86/fbdevhw/fbdevhw.c
@@ -183,7 +183,8 @@ print_xfree_mode(char *txt, DisplayModeP
 static void
 xfree2fbdev_fblayout(ScrnInfoPtr pScrn, struct fb_var_screeninfo *var)
 {
-	var->xres_virtual   = pScrn->virtualX;
+	var->xres_virtual   = pScrn->displayWidth ? pScrn->displayWidth :
+			      pScrn->virtualX;
 	var->yres_virtual   = pScrn->virtualY;
 	var->bits_per_pixel = pScrn->bitsPerPixel;
 	var->red.length     = pScrn->weight.red;
diff-tree c385bcf0bde38dd869f7065f859dd4b4126f5690 (from f6815cb68b0f6698497348fc6e4214dacef33b95)
Author: Michel Dänzer <michel at tungstengraphics.com>
Date:   Sat Dec 30 16:44:31 2006 +0100

    fbdevhw: Fix some issues with the previous commit.
    
    Fix a TRACE_ENTER typo and only update the internal fbdev mode state cache
    after actually setting a mode.

diff --git a/hw/xfree86/fbdevhw/fbdevhw.c b/hw/xfree86/fbdevhw/fbdevhw.c
index 303ad14..83b0dc1 100644
--- a/hw/xfree86/fbdevhw/fbdevhw.c
+++ b/hw/xfree86/fbdevhw/fbdevhw.c
@@ -496,7 +496,7 @@ fbdevHWSetMode(ScrnInfoPtr pScrn, Displa
 	fbdevHWPtr fPtr = FBDEVHWPTR(pScrn);
 	struct fb_var_screeninfo req_var = fPtr->var, set_var;
 	
-	TRACE_ENTER("ModeInit");
+	TRACE_ENTER("SetMode");
 
 	xfree2fbdev_fblayout(pScrn, &req_var);
 	xfree2fbdev_timing(mode, &req_var);
@@ -528,7 +528,8 @@ fbdevHWSetMode(ScrnInfoPtr pScrn, Displa
 		return FALSE;
 	}
 
-	fPtr->var = set_var;
+	if (!check)
+		fPtr->var = set_var;
 
 	return TRUE;
 }
diff-tree f6815cb68b0f6698497348fc6e4214dacef33b95 (from 083b790515faaf134a78abc4b0a7ef0d6ea5db75)
Author: Michel Dänzer <michel at tungstengraphics.com>
Date:   Sat Dec 30 10:18:28 2006 +0100

    fbdevhw: Consolidate modeset ioctl calling, report failure if it modifies mode.
    
    The fbdev API allows the driver to 'accept' modes it doesn't really support by
    modifying it to the nearest supported mode. Without this check, e.g. vesafb
    would appear to accept all modes, even though it actually can't set any modes
    other than the bootup mode at all.

diff --git a/hw/xfree86/fbdevhw/fbdevhw.c b/hw/xfree86/fbdevhw/fbdevhw.c
index 70bed62..303ad14 100644
--- a/hw/xfree86/fbdevhw/fbdevhw.c
+++ b/hw/xfree86/fbdevhw/fbdevhw.c
@@ -227,6 +227,26 @@ xfree2fbdev_timing(DisplayModePtr mode, 
 		var->vmode = FB_VMODE_NONINTERLACED;
 }
 
+static Bool
+fbdev_modes_equal(struct fb_var_screeninfo *one, struct fb_var_screeninfo *two)
+{
+	return (one->xres_virtual == two->xres_virtual &&
+		one->yres_virtual == two->yres_virtual &&
+		one->bits_per_pixel == two->bits_per_pixel &&
+		one->red.length == two->red.length &&
+		one->green.length == two->green.length &&
+		one->blue.length == two->blue.length &&
+		one->xres == two->xres && one->yres == two->yres &&
+		one->pixclock == two->pixclock &&
+		one->right_margin == two->right_margin &&
+		one->hsync_len == two->hsync_len &&
+		one->left_margin == two->left_margin &&
+		one->lower_margin == two->lower_margin &&
+		one->vsync_len == two->vsync_len &&
+		one->upper_margin == two->upper_margin &&
+		one->sync == two->sync && one->vmode == two->vmode);
+}
+
 static void
 fbdev2xfree_timing(struct fb_var_screeninfo *var, DisplayModePtr mode)
 {
@@ -470,13 +490,52 @@ fbdevHWGetVidmem(ScrnInfoPtr pScrn)
 	return fPtr->fix.smem_len;
 }
 
+static Bool
+fbdevHWSetMode(ScrnInfoPtr pScrn, DisplayModePtr mode, Bool check)
+{
+	fbdevHWPtr fPtr = FBDEVHWPTR(pScrn);
+	struct fb_var_screeninfo req_var = fPtr->var, set_var;
+	
+	TRACE_ENTER("ModeInit");
+
+	xfree2fbdev_fblayout(pScrn, &req_var);
+	xfree2fbdev_timing(mode, &req_var);
+
+#if DEBUG
+	print_xfree_mode("init", mode);
+	print_fbdev_mode("init", &req_var);
+#endif
+
+	set_var = req_var;
+
+	if (check)
+		set_var.activate = FB_ACTIVATE_TEST;
+
+	if (0 != ioctl(fPtr->fd, FBIOPUT_VSCREENINFO, (void*)(&set_var))) {
+		xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+			   "FBIOPUT_VSCREENINFO: %s\n", strerror(errno));
+		return FALSE;
+	}
+
+	if (!fbdev_modes_equal(&set_var, &req_var)) {
+		if (!check)
+			xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+				   "FBIOPUT_VSCREENINFO succeeded but modified "
+				   "mode\n");
+#if DEBUG
+		print_fbdev_mode("returned", &set_var);
+#endif
+		return FALSE;
+	}
+
+	fPtr->var = set_var;
+
+	return TRUE;
+}
+
 void
 fbdevHWSetVideoModes(ScrnInfoPtr pScrn)
 {
-	fbdevHWPtr fPtr = FBDEVHWPTR(pScrn);
-	int virtX = pScrn->display->virtualX;
-	int virtY = pScrn->display->virtualY;
-	struct fb_var_screeninfo var;
 	char **modename;
 	DisplayModePtr mode,this,last = pScrn->modes;
 
@@ -484,6 +543,9 @@ fbdevHWSetVideoModes(ScrnInfoPtr pScrn)
 	if (NULL == pScrn->display->modes)
 		return;
 
+	pScrn->virtualX = pScrn->display->virtualX;
+	pScrn->virtualY = pScrn->display->virtualY;
+
 	for (modename = pScrn->display->modes; *modename != NULL; modename++) {
 		for (mode = pScrn->monitor->Modes; mode != NULL; mode = mode->next)
 			if (0 == strcmp(mode->name,*modename))
@@ -493,27 +555,20 @@ fbdevHWSetVideoModes(ScrnInfoPtr pScrn)
 				   "\tmode \"%s\" not found\n", *modename);
 			continue;
 		}
-		memset(&var,0,sizeof(var));
-		xfree2fbdev_timing(mode,&var);
-		var.xres_virtual = virtX;
-		var.yres_virtual = virtY;
-		var.bits_per_pixel = pScrn->bitsPerPixel;
-		var.red.length = pScrn->weight.red;
-		var.green.length = pScrn->weight.green;
-		var.blue.length = pScrn->weight.blue;
-
-		var.activate = FB_ACTIVATE_TEST;
-		if (var.xres_virtual < var.xres) var.xres_virtual = var.xres;
-		if (var.yres_virtual < var.yres) var.yres_virtual = var.yres;
-		if (-1 == ioctl(fPtr->fd,FBIOPUT_VSCREENINFO,(void*)(&var))) {
+
+		if (!fbdevHWSetMode(pScrn, mode, TRUE)) {
 			xf86DrvMsg(pScrn->scrnIndex, X_INFO,
 				   "\tmode \"%s\" test failed\n", *modename);
 			continue;
 		}
 		xf86DrvMsg(pScrn->scrnIndex, X_INFO,
 			   "\tmode \"%s\" ok\n", *modename);
-		if (virtX < var.xres) virtX = var.xres;
-		if (virtY < var.yres) virtY = var.yres;
+
+		if (pScrn->virtualX < mode->HDisplay)
+			pScrn->virtualX = mode->HDisplay;
+		if (pScrn->virtualY < mode->VDisplay)
+			pScrn->virtualY = mode->VDisplay;
+
 		if (NULL == pScrn->modes) {
 			pScrn->modes = xnfalloc(sizeof(DisplayModeRec));
 			this = pScrn->modes;
@@ -530,8 +585,6 @@ fbdevHWSetVideoModes(ScrnInfoPtr pScrn)
 		}
 		last = this;
 	}
-	pScrn->virtualX     = virtX;
-	pScrn->virtualY     = virtY;
 }
 
 DisplayModePtr
@@ -673,21 +726,12 @@ fbdevHWModeInit(ScrnInfoPtr pScrn, Displ
 {	
 	fbdevHWPtr fPtr = FBDEVHWPTR(pScrn);
 	
-	TRACE_ENTER("ModeInit");
-	xfree2fbdev_fblayout(pScrn, &fPtr->var);
-	xfree2fbdev_timing(mode,  &fPtr->var);
-#if DEBUG
-	print_xfree_mode("init",mode);
-	print_fbdev_mode("init",&fPtr->var);
-#endif
 	pScrn->vtSema = TRUE;
 
 	/* set */
-	if (0 != ioctl(fPtr->fd,FBIOPUT_VSCREENINFO,(void*)(&fPtr->var))) {
-		xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-			   "FBIOPUT_VSCREENINFO: %s\n", strerror(errno));
+	if (!fbdevHWSetMode(pScrn, mode, FALSE))
 		return FALSE;
-	}
+
 	/* read back */
 	if (0 != ioctl(fPtr->fd,FBIOGET_FSCREENINFO,(void*)(&fPtr->fix))) {
 		xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
@@ -767,18 +811,12 @@ ModeStatus
 fbdevHWValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags)
 {
 	ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
-	fbdevHWPtr fPtr = FBDEVHWPTR(pScrn);
-	struct fb_var_screeninfo var;
 
 	TRACE_ENTER("ValidMode");
-	memcpy(&var,&fPtr->var,sizeof(var));
-	xfree2fbdev_timing(mode, &var);
-	var.activate = FB_ACTIVATE_TEST;
-	if (0 != ioctl(fPtr->fd,FBIOPUT_VSCREENINFO,(void*)(&fPtr->var))) {
-		xf86DrvMsg(scrnIndex, X_ERROR,
-			   "FBIOPUT_VSCREENINFO: %s\n", strerror(errno));
+
+	if (!fbdevHWSetMode(pScrn, mode, TRUE))
 		return MODE_BAD;
-	}
+
 	return MODE_OK;
 }
 
@@ -786,15 +824,12 @@ Bool
 fbdevHWSwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
 {
 	ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
-	fbdevHWPtr fPtr = FBDEVHWPTR(pScrn);
 
 	TRACE_ENTER("SwitchMode");
-	xfree2fbdev_timing(mode, &fPtr->var);
-	if (0 != ioctl(fPtr->fd,FBIOPUT_VSCREENINFO,(void*)(&fPtr->var))) {
-		xf86DrvMsg(scrnIndex, X_ERROR,
-			   "FBIOPUT_VSCREENINFO: %s\n", strerror(errno));
+
+	if (!fbdevHWSetMode(pScrn, mode, FALSE))
 		return FALSE;
-	}
+
 	return TRUE;
 }
 
diff-tree 083b790515faaf134a78abc4b0a7ef0d6ea5db75 (from cfbc7379f0232bb336461f6d2a8496d3d0763e7e)
Author: Eric Anholt <eric at anholt.net>
Date:   Thu Dec 28 13:21:25 2006 -0800

    Switch the default migration heuristic for EXA to "always".
    
    This has been what has been used the most successfully post-damagetrack.
    The current thinking is that:
    1) We should be able to accelerate basically everything.  So we don't need to
       try to migrate trees of pixmaps permanently out of framebuffer to speed
       CPU drawing up.
    2) Migration is cheaper in the thrashing case, so we don't want to go to a lot
       of effort to try (and fail badly) to find a working set.

diff --git a/exa/exa.c b/exa/exa.c
index e61bc69..e9f42df 100644
--- a/exa/exa.c
+++ b/exa/exa.c
@@ -622,7 +622,7 @@ exaDriverInit (ScreenPtr		pScreen,
 
     pScreen->devPrivates[exaScreenPrivateIndex].ptr = (pointer) pExaScr;
 
-    pExaScr->migration = ExaMigrationSmart;
+    pExaScr->migration = ExaMigrationAlways;
 
     exaDDXDriverInit(pScreen);
 
diff --git a/hw/xfree86/exa/exa.man.pre b/hw/xfree86/exa/exa.man.pre
index ea41b90..b0eecd5 100644
--- a/hw/xfree86/exa/exa.man.pre
+++ b/hw/xfree86/exa/exa.man.pre
@@ -35,6 +35,6 @@ Default: No.
 Chooses an alternate pixmap migration heuristic, for debugging purposes.  The
 default is intended to be the best performing one for general use, though others
 may help with specific use cases.  Available options include \*qalways\*q,
-\*qgreedy\*q, and \*qsmart\*q.  Default: smart.
+\*qgreedy\*q, and \*qsmart\*q.  Default: always.
 .SH AUTHORS
 Authors include: Keith Packard, Eric Anholt, Zack Rusin, and Michel Dänzer
diff-tree cfbc7379f0232bb336461f6d2a8496d3d0763e7e (from 683ca3f7afaf15fd3ca7918f6175b5a9e4a6f05b)
Author: Eric Anholt <eric at anholt.net>
Date:   Thu Dec 28 13:15:11 2006 -0800

    Export exaMove{In,Out}Pixmap().

diff --git a/exa/exa.h b/exa/exa.h
index 96465a7..b043c12 100644
--- a/exa/exa.h
+++ b/exa/exa.h
@@ -716,6 +716,12 @@ exaGetPixmapSize(PixmapPtr pPix);
 void
 exaEnableDisableFBAccess (int index, Bool enable);
 
+void
+exaMoveInPixmap (PixmapPtr pPixmap);
+
+void
+exaMoveOutPixmap (PixmapPtr pPixmap);
+
 /**
  * Returns TRUE if the given planemask covers all the significant bits in the
  * pixel values for pDrawable.
diff --git a/exa/exa_priv.h b/exa/exa_priv.h
index 926e02a..403d4b6 100644
--- a/exa/exa_priv.h
+++ b/exa/exa_priv.h
@@ -412,10 +412,4 @@ exaGlyphs (CARD8	op,
 void
 exaDoMigration (ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel);
 
-void
-exaMoveInPixmap (PixmapPtr pPixmap);
-
-void
-exaMoveOutPixmap (PixmapPtr pPixmap);
-
 #endif /* EXAPRIV_H */
diff-tree 683ca3f7afaf15fd3ca7918f6175b5a9e4a6f05b (from parents)
Merge: 05f915050cad72d4fb39cbb886be57beeac18749 9563b2eea2f61246b6a9e14e00c701f693efa4e1
Author: Eric Anholt <eric at anholt.net>
Date:   Wed Dec 27 16:11:31 2006 -0800

    Merge branch 'exa-damagetrack'

diff-tree 05f915050cad72d4fb39cbb886be57beeac18749 (from c1674660a7115ebf993dcde78f4e45f756e4c951)
Author: Peter Hutterer <peter at cs.unisa.edu.au>
Date:   Wed Dec 27 16:38:06 2006 +0000

    dix/events: take screen number, not pointer, in PostSyntheticMotion
    Since we were using PostSyntheticMotion incorrectly anyway, update the
    declared API to match.

diff --git a/dix/getevents.c b/dix/getevents.c
index 0150d66..8b2a44d 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -761,7 +761,7 @@ SwitchCorePointer(DeviceIntPtr pDev)
  * to shift the pointer to get it inside the new bounds.
  */
 void
-PostSyntheticMotion(int x, int y, ScreenPtr pScreen, unsigned long time)
+PostSyntheticMotion(int x, int y, int screen, unsigned long time)
 {
     xEvent xE;
 
@@ -770,8 +770,8 @@ PostSyntheticMotion(int x, int y, Screen
        will translate from sprite screen to screen 0 upon reentry
        to the DIX layer. */
     if (!noPanoramiXExtension) {
-        x += panoramiXdataPtr[0].x - panoramiXdataPtr[pScreen->myNum].x;
-        y += panoramiXdataPtr[0].y - panoramiXdataPtr[pScreen->myNum].y;
+        x += panoramiXdataPtr[0].x - panoramiXdataPtr[screen].x;
+        y += panoramiXdataPtr[0].y - panoramiXdataPtr[screen].y;
     }
 #endif
 
diff --git a/include/dixevents.h b/include/dixevents.h
index c78fb0e..62c8672 100644
--- a/include/dixevents.h
+++ b/include/dixevents.h
@@ -103,7 +103,7 @@ extern int ProcUngrabButton(ClientPtr /*
 extern int ProcRecolorCursor(ClientPtr /* client */);
 
 #ifdef PANORAMIX
-extern void PostSyntheticMotion(int x, int y, ScreenPtr pScreen, unsigned long time);
+extern void PostSyntheticMotion(int x, int y, int screen, unsigned long time);
 #endif
 
 #endif /* DIXEVENTS_H */
diff --git a/include/input.h b/include/input.h
index ebb0915..fc607d3 100644
--- a/include/input.h
+++ b/include/input.h
@@ -421,7 +421,7 @@ extern int GetProximityEvents(
 extern void PostSyntheticMotion(
     int x,
     int y,
-    ScreenPtr pScreen,
+    int screen,
     unsigned long time);
 
 extern int GetMotionHistorySize(
diff-tree c1674660a7115ebf993dcde78f4e45f756e4c951 (from 83080809f9a1c1d24b0318e54632f25f5940da25)
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Sun Dec 24 06:28:44 2006 +0200

    os: test for userland, not kernel
    
    It doesn't matter which kernel we're running on, the relevant part when
    dealing with includes is what our userland is.

diff --git a/os/utils.c b/os/utils.c
index 82ec704..b98c9c1 100644
--- a/os/utils.c
+++ b/os/utils.c
@@ -53,7 +53,7 @@ OR PERFORMANCE OF THIS SOFTWARE.
 #include <dix-config.h>
 #endif
 
-#ifndef __linux__
+#ifndef __GLIBC__
 #include <time.h>
 #else
 /* The world's most shocking hack, to ensure we get clock_gettime() and
diff-tree 83080809f9a1c1d24b0318e54632f25f5940da25 (from 329f6417275bb1201ba66c29b202028eeab3a355)
Author: Marc Aurele La France <tsi at ualberta.ca>
Date:   Sun Dec 24 06:28:21 2006 +0200

    xfree86: deal with pitch that isn't a multiple of the granularity
    
    When the pitch isn't a multiple of the granularity, allocate more space to
    compensate.

diff --git a/hw/xfree86/common/xf86fbman.c b/hw/xfree86/common/xf86fbman.c
index 8141a83..d64cfae 100644
--- a/hw/xfree86/common/xf86fbman.c
+++ b/hw/xfree86/common/xf86fbman.c
@@ -368,10 +368,8 @@ AllocateArea(
    /* look through the free boxes */
    for(i = 0; i < num; i++, boxp++) {
 	x = boxp->x1;
-	if(granularity) {
-	    int tmp = x % granularity;
-	    if(tmp) x += (granularity - tmp);
-	}
+	if (granularity > 1)
+	    x = ((x + granularity - 1) / granularity) * granularity;
 
 	if(((boxp->y2 - boxp->y1) < h) || ((boxp->x2 - x) < w))
 	   continue;
@@ -398,10 +396,8 @@ AllocateArea(
 
 	   boxp = &(link->area.box);
 	   x = boxp->x1;
- 	   if(granularity) {
-		int tmp = x % granularity;
-		if(tmp) x += (granularity - tmp);
-	   }
+ 	   if (granularity > 1)
+		x = ((x + granularity - 1) / granularity) * granularity;
 
 	   if(((boxp->y2 - boxp->y1) < h) || ((boxp->x2 - x) < w)) {
 		link = link->next;
@@ -685,10 +681,8 @@ localQueryLargestOffscreenArea(
 
     while(nbox--) {
 	x = pbox->x1;
-	if(granularity) {
-	   int tmp = x % granularity;
-	   if(tmp) x += (granularity - tmp);
-        }
+	if (granularity > 1)
+	   x = ((x + granularity - 1) / granularity) * granularity;
 
 	w = pbox->x2 - x;
 	h = pbox->y2 - pbox->y1;
@@ -845,7 +839,9 @@ AllocateLinear(
    while (linear) {
  	/* Make sure we get a free area that's not an XY fallback case */
       if (!linear->area && linear->free) {
-	 offset = (linear->linear.offset + granularity) & ~granularity;
+	 offset = linear->linear.offset;
+	 if (granularity > 1)
+	    offset = ((offset + granularity - 1) / granularity) * granularity;
 	 end = offset+size;
 	 if (end <= (linear->linear.offset + linear->linear.size))
 	    break;
@@ -935,17 +931,20 @@ localAllocateOffscreenLinear(
    extents = REGION_EXTENTS(pScreen, offman->InitialBoxes);
    pitch = extents->x2 - extents->x1;
 
-   if (gran && gran > pitch) {
-	/* we can't match the specified alignment with XY allocations */
-	xfree(link);
-	return NULL;
-   }
-   if (gran && (pitch % gran)) {
-       /* pitch and granularity aren't a perfect match, let's allocate
-	* a bit more so we can align later on
-	*/
-       length += gran - 1;
-   }
+   if (gran > 1) {
+        if (gran > pitch) {
+            /* we can't match the specified alignment with XY allocations */
+            xfree(link);
+            return NULL;
+        }
+
+        if (pitch % gran) {
+            /* pitch and granularity aren't a perfect match, let's allocate
+             * a bit more so we can align later on
+             */
+            length += gran - 1;
+        }
+    }
 
    if(length < pitch) { /* special case */
 	w = length;
@@ -968,8 +967,8 @@ localAllocateOffscreenLinear(
 	linear->pScreen = pScreen;
 	linear->size = h * w;
 	linear->offset = (pitch * area->box.y1) + area->box.x1;
-	if (gran && linear->offset % gran)
-		linear->offset += gran - (linear->offset % gran);
+	if (gran > 1)
+            linear->offset += ((linear->offset + gran - 1) / gran) * gran;
 	linear->granularity = gran;
 	linear->MoveLinearCallback = moveCB;
 	linear->RemoveLinearCallback = removeCB;
@@ -1435,9 +1434,12 @@ xf86AllocateLinearOffscreenArea (
    extents = REGION_EXTENTS(pScreen, offman->InitialBoxes);
    w = extents->x2 - extents->x1;
 
-   if(gran && ((gran > w) || (w % gran))) {
-	/* we can't match the specified alignment with XY allocations */
-	return NULL;
+   if (gran > 1) {
+	if (gran > w)
+	    return NULL;
+
+	if (w % gran)
+	    length += gran - 1;
    }
 
    if(length <= w) { /* special case */
diff-tree 329f6417275bb1201ba66c29b202028eeab3a355 (from d9e079d2a385203fdd18d958cfc19d759cab4ba8)
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Sat Dec 9 22:51:59 2006 +0200

    XkbCopyKeymap: make sure sym_interpret is always valid
    
    Make sure we're not copying sym_interpret across from an empty source.

diff --git a/xkb/xkbUtils.c b/xkb/xkbUtils.c
index c9c5ed0..400306a 100644
--- a/xkb/xkbUtils.c
+++ b/xkb/xkbUtils.c
@@ -1497,30 +1497,33 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr
                 return FALSE;
         }
 
-        if (src->compat->sym_interpret) {
-            if (src->compat->size_si != dst->compat->size_si) {
+        if (src->compat->sym_interpret && src->compat->num_si) {
+            if (src->compat->num_si != dst->compat->size_si) {
                 if (dst->compat->sym_interpret)
                     tmp = xrealloc(dst->compat->sym_interpret,
-                                   src->compat->size_si *
+                                   src->compat->num_si *
                                      sizeof(XkbSymInterpretRec));
                 else
-                    tmp = xalloc(src->compat->size_si *
+                    tmp = xalloc(src->compat->num_si *
                                  sizeof(XkbSymInterpretRec));
                 if (!tmp)
                     return FALSE;
                 dst->compat->sym_interpret = tmp;
             }
             memcpy(dst->compat->sym_interpret, src->compat->sym_interpret,
-                   src->compat->size_si * sizeof(XkbSymInterpretRec));
+                   src->compat->num_si * sizeof(XkbSymInterpretRec));
+
+            dst->compat->num_si = src->compat->num_si;
+            dst->compat->size_si = src->compat->num_si;
         }
         else {
-            if (dst->compat->sym_interpret) {
+            if (dst->compat->sym_interpret && dst->compat->size_si)
                 xfree(dst->compat->sym_interpret);
-                dst->compat->sym_interpret = NULL;
-            }
+
+            dst->compat->sym_interpret = NULL;
+            dst->compat->num_si = 0;
+            dst->compat->size_si = 0;
         }
-        dst->compat->num_si = src->compat->num_si;
-        dst->compat->size_si = src->compat->size_si;
 
         memcpy(dst->compat->groups, src->compat->groups,
                XkbNumKbdGroups * sizeof(XkbModsRec));
diff-tree 9563b2eea2f61246b6a9e14e00c701f693efa4e1 (from 467c00cf450826e0bf06fe94470ec193af625d68)
Author: Michel Dänzer <michel at tungstengraphics.com>
Date:   Tue Dec 19 18:57:22 2006 +0100

    EXA: Lots of damage tracking fixes.
    
    Mostly due to exaDrawableDirty() now calculating the backing pixmap coordinates
    internally, for cases where they aren't trivially known. There's a new
    exaPixmapDirty() function for the other cases.

diff --git a/exa/exa.c b/exa/exa.c
index 195457c..e61bc69 100644
--- a/exa/exa.c
+++ b/exa/exa.c
@@ -122,22 +122,49 @@ exaGetDrawablePixmap(DrawablePtr pDrawab
 }	
 
 /**
- * exaDrawableDirty() marks a pixmap backing a drawable as dirty, allowing for
+ * Sets the offsets to add to coordinates to make them address the same bits in
+ * the backing drawable. These coordinates are nonzero only for redirected
+ * windows.
+ */
+static void
+exaGetDrawableDeltas (DrawablePtr pDrawable, PixmapPtr pPixmap,
+		      int *xp, int *yp)
+{
+#ifdef COMPOSITE
+    if (pDrawable->type == DRAWABLE_WINDOW) {
+	*xp = -pPixmap->screen_x;
+	*yp = -pPixmap->screen_y;
+	return;
+    }
+#endif
+
+    *xp = 0;
+    *yp = 0;
+}
+
+/**
+ * exaPixmapDirty() marks a pixmap as dirty, allowing for
  * optimizations in pixmap migration when no changes have occurred.
  */
 void
-exaDrawableDirty (DrawablePtr pDrawable, int x1, int y1, int x2, int y2)
+exaPixmapDirty (PixmapPtr pPix, int x1, int y1, int x2, int y2)
 {
-    ExaPixmapPrivPtr pExaPixmap;
+    ExaPixmapPriv(pPix);
+    BoxRec box;
     RegionPtr pDamageReg;
-    BoxRec box = { .x1 = max(x1,0), .x2 = min(x2,pDrawable->width),
-		   .y1 = max(y1,0), .y2 = min(y2,pDrawable->height) };
     RegionRec region;
 
-    pExaPixmap = ExaGetPixmapPriv(exaGetDrawablePixmap (pDrawable));
-    if (!pExaPixmap || box.x1 >= box.x2 || box.y1 >= box.y2)
+    if (!pExaPixmap)
 	return;
 	
+    box.x1 = max(x1, 0);
+    box.y1 = max(y1, 0);
+    box.x2 = min(x2, pPix->drawable.width);
+    box.y2 = min(y2, pPix->drawable.height);
+
+    if (box.x1 >= box.x2 || box.y1 >= box.y2)
+	return;
+
     pDamageReg = DamageRegion(pExaPixmap->pDamage);
 
     REGION_INIT(pScreen, &region, &box, 1);
@@ -145,6 +172,29 @@ exaDrawableDirty (DrawablePtr pDrawable,
     REGION_UNINIT(pScreen, &region);
 }
 
+/**
+ * exaDrawableDirty() marks a pixmap backing a drawable as dirty, allowing for
+ * optimizations in pixmap migration when no changes have occurred.
+ */
+void
+exaDrawableDirty (DrawablePtr pDrawable, int x1, int y1, int x2, int y2)
+{
+    PixmapPtr pPix = exaGetDrawablePixmap(pDrawable);
+    int xoff, yoff;
+
+    x1 = max(x1, pDrawable->x);
+    y1 = max(y1, pDrawable->y);
+    x2 = min(x2, pDrawable->x + pDrawable->width);
+    y2 = min(y2, pDrawable->y + pDrawable->height);
+
+    if (x1 >= x2 || y1 >= y2)
+	return;
+
+    exaGetDrawableDeltas(pDrawable, pPix, &xoff, &yoff);
+
+    exaPixmapDirty(pPix, x1 + xoff, y1 + yoff, x2 + xoff, y2 + yoff);
+}
+
 static Bool
 exaDestroyPixmap (PixmapPtr pPixmap)
 {
@@ -289,32 +339,14 @@ exaDrawableIsOffscreen (DrawablePtr pDra
 /**
  * Returns the pixmap which backs a drawable, and the offsets to add to
  * coordinates to make them address the same bits in the backing drawable.
- * These coordinates are nonzero only for redirected windows.
  */
 PixmapPtr
 exaGetOffscreenPixmap (DrawablePtr pDrawable, int *xp, int *yp)
 {
-    PixmapPtr	pPixmap;
-    int		x, y;
+    PixmapPtr	pPixmap = exaGetDrawablePixmap (pDrawable);
+
+    exaGetDrawableDeltas (pDrawable, pPixmap, xp, yp);
 
-    if (pDrawable->type == DRAWABLE_WINDOW) {
-	pPixmap = (*pDrawable->pScreen->GetWindowPixmap) ((WindowPtr) pDrawable);
-#ifdef COMPOSITE
-	x = -pPixmap->screen_x;
-	y = -pPixmap->screen_y;
-#else
-	x = 0;
-	y = 0;
-#endif
-    }
-    else
-    {
-	pPixmap = (PixmapPtr) pDrawable;
-	x = 0;
-	y = 0;
-    }
-    *xp = x;
-    *yp = y;
     if (exaPixmapIsOffscreen (pPixmap))
 	return pPixmap;
     else
@@ -428,7 +460,7 @@ exaValidateGC (GCPtr pGC, unsigned long 
 		exaPrepareAccess(&pOldTile->drawable, EXA_PREPARE_SRC);
 		pNewTile = fb24_32ReformatTile (pOldTile,
 						pDrawable->bitsPerPixel);
-		exaDrawableDirty(&pNewTile->drawable, 0, 0, pNewTile->drawable.width, pNewTile->drawable.height);
+		exaPixmapDirty(pNewTile, 0, 0, pNewTile->drawable.width, pNewTile->drawable.height);
 		exaFinishAccess(&pOldTile->drawable, EXA_PREPARE_SRC);
 	    }
 	    if (pNewTile)
@@ -449,9 +481,9 @@ exaValidateGC (GCPtr pGC, unsigned long 
 	     */
 	    exaMoveOutPixmap(pGC->tile.pixmap);
 	    fbPadPixmap (pGC->tile.pixmap);
-	    exaDrawableDirty(&pGC->tile.pixmap->drawable, 0, 0,
-			     pGC->tile.pixmap->drawable.width,
-			     pGC->tile.pixmap->drawable.height);
+	    exaPixmapDirty(pGC->tile.pixmap, 0, 0,
+			   pGC->tile.pixmap->drawable.width,
+			   pGC->tile.pixmap->drawable.height);
 	}
 	/* Mask out the GCTile change notification, now that we've done FB's
 	 * job for it.
diff --git a/exa/exa_accel.c b/exa/exa_accel.c
index d2fe2e0..6fa481a 100644
--- a/exa/exa_accel.c
+++ b/exa/exa_accel.c
@@ -109,9 +109,8 @@ exaFillSpans(DrawablePtr pDrawable, GCPt
 	    (*pExaScr->info->Solid) (pPixmap,
 				     fullX1 + off_x, fullY1 + off_y,
 				     fullX2 + off_x, fullY1 + 1 + off_y);
-	    exaDrawableDirty (pDrawable,
-			      fullX1 + off_x, fullY1 + off_y,
-			      fullX2 + off_x, fullY1 + 1 + off_y);
+	    exaPixmapDirty (pPixmap, fullX1 + off_x, fullY1 + off_y,
+			    fullX2 + off_x, fullY1 + 1 + off_y);
 	}
 	else
 	{
@@ -130,9 +129,8 @@ exaFillSpans(DrawablePtr pDrawable, GCPt
 			(*pExaScr->info->Solid) (pPixmap,
 						 partX1 + off_x, fullY1 + off_y,
 						 partX2 + off_x, fullY1 + 1 + off_y);
-			exaDrawableDirty (pDrawable,
-					  partX1 + off_x, fullY1 + off_y,
-					  partX2 + off_x, fullY1 + 1 + off_y);
+			exaPixmapDirty (pPixmap, partX1 + off_x, fullY1 + off_y,
+					partX2 + off_x, fullY1 + 1 + off_y);
 		    }
 		}
 		pbox++;
@@ -233,7 +231,7 @@ exaPutImage (DrawablePtr pDrawable, GCPt
 
 	    exaFinishAccess(pDrawable, EXA_PREPARE_DEST);
 	}
-	exaDrawableDirty(pDrawable, x1 + xoff, y1 + yoff, x2 + xoff, y2 + yoff);
+	exaPixmapDirty(pPix, x1 + xoff, y1 + yoff, x2 + xoff, y2 + yoff);
     }
 
     return;
@@ -362,9 +360,8 @@ exaCopyNtoNTwoDir (DrawablePtr pSrcDrawa
 				       dst_off_y + pbox->y1 + i,
 				       pbox->x2 - pbox->x1, 1);
 	}
-	exaDrawableDirty(pDstDrawable,
-			 dst_off_x + pbox->x1, dst_off_y + pbox->y1,
-			 dst_off_x + pbox->x2, dst_off_y + pbox->y2);
+	exaPixmapDirty(pDstPixmap, dst_off_x + pbox->x1, dst_off_y + pbox->y1,
+		       dst_off_x + pbox->x2, dst_off_y + pbox->y2);
     }
     if (dirsetup != 0)
 	pExaScr->info->DoneCopy(pDstPixmap);
@@ -437,9 +434,9 @@ exaCopyNtoN (DrawablePtr    pSrcDrawable
 				    pbox->x1 + dst_off_x, pbox->y1 + dst_off_y,
 				    pbox->x2 - pbox->x1,
 				    pbox->y2 - pbox->y1);
-	    exaDrawableDirty (pDstDrawable,
-			      pbox->x1 + dst_off_x, pbox->y1 + dst_off_y,
-			      pbox->x2 + dst_off_x, pbox->y2 + dst_off_y);
+	    exaPixmapDirty (pDstPixmap,
+			    pbox->x1 + dst_off_x, pbox->y1 + dst_off_y,
+			    pbox->x2 + dst_off_x, pbox->y2 + dst_off_y);
 	    pbox++;
 	}
 	(*pExaScr->info->DoneCopy) (pDstPixmap);
@@ -460,9 +457,7 @@ fallback:
     exaFinishAccess (pDstDrawable, EXA_PREPARE_DEST);
     while (nbox--)
     {
-	exaDrawableDirty (pDstDrawable,
-			  pbox->x1 + dst_off_x, pbox->y1 + dst_off_y,
-			  pbox->x2 + dst_off_x, pbox->y2 + dst_off_y);
+	exaDrawableDirty (pDstDrawable, pbox->x1, pbox->y1, pbox->x2, pbox->y2);
 	pbox++;
     }
 }
@@ -704,9 +699,8 @@ exaPolyFillRect(DrawablePtr pDrawable,
 	    (*pExaScr->info->Solid) (pPixmap,
 				     fullX1 + xoff, fullY1 + yoff,
 				     fullX2 + xoff, fullY2 + yoff);
-	    exaDrawableDirty (pDrawable,
-			      fullX1 + xoff, fullY1 + yoff,
-			      fullX2 + xoff, fullY2 + yoff);
+	    exaPixmapDirty (pPixmap, fullX1 + xoff, fullY1 + yoff,
+			    fullX2 + xoff, fullY2 + yoff);
 	}
 	else
 	{
@@ -736,9 +730,8 @@ exaPolyFillRect(DrawablePtr pDrawable,
 		    (*pExaScr->info->Solid) (pPixmap,
 					     partX1 + xoff, partY1 + yoff,
 					     partX2 + xoff, partY2 + yoff);
-		    exaDrawableDirty (pDrawable,
-				      partX1 + xoff, partY1 + yoff,
-				      partX2 + xoff, partY2 + yoff);
+		    exaPixmapDirty (pPixmap, partX1 + xoff, partY1 + yoff,
+				    partX2 + xoff, partY2 + yoff);
 		}
 	    }
 	}
@@ -770,9 +763,6 @@ exaSolidBoxClipped (DrawablePtr	pDrawabl
     pixmaps[0].as_src = FALSE;
     pixmaps[0].pPix = pPixmap = exaGetDrawablePixmap (pDrawable);
 
-    /* We need to initialize x/yoff for tracking damage in the fallback case */
-    pPixmap = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff);
-
     if (pExaScr->swappedOut ||
 	pPixmap->drawable.width > pExaScr->info->maxX ||
 	pPixmap->drawable.height > pExaScr->info->maxY)
@@ -825,13 +815,14 @@ fallback:
 	if (partY2 <= partY1)
 	    continue;
 
-	if (!fallback)
+	if (!fallback) {
 	    (*pExaScr->info->Solid) (pPixmap,
 				     partX1 + xoff, partY1 + yoff,
 				     partX2 + xoff, partY2 + yoff);
-	exaDrawableDirty (pDrawable,
-			  partX1 + xoff, partY1 + yoff,
-			  partX2 + xoff, partY2 + yoff);
+	    exaPixmapDirty (pPixmap, partX1 + xoff, partY1 + yoff,
+			    partX2 + xoff, partY2 + yoff);
+	} else
+	    exaDrawableDirty (pDrawable, partX1, partY1, partX2, partY2);
     }
 
     if (fallback)
@@ -950,12 +941,17 @@ exaImageGlyphBlt (DrawablePtr	pDrawable,
 			  pPriv->fg,
 			  gx + dstXoff,
 			  gHeight);
+		exaDrawableDirty (pDrawable, gx, gy, gx + gWidth, gy + gHeight);
 	    }
 	    else
 	    {
+		RegionPtr pClip = fbGetCompositeClip(pGC);
+		int nbox;
+		BoxPtr pbox;
+
 		gStride = GLYPHWIDTHBYTESPADDED(pci) / sizeof (FbStip);
 		fbPutXYImage (pDrawable,
-			      fbGetCompositeClip(pGC),
+			      pClip,
 			      pPriv->fg,
 			      pPriv->bg,
 			      pPriv->pm,
@@ -969,9 +965,19 @@ exaImageGlyphBlt (DrawablePtr	pDrawable,
 			      (FbStip *) pglyph,
 			      gStride,
 			      0);
+
+		for (nbox = REGION_NUM_RECTS(pClip), pbox = REGION_RECTS(pClip);
+		     nbox--; pbox++) {
+		    int x1 = max(gx, pbox->x1), x2 = min(gx + gWidth, pbox->x2);
+		    int y1 = max(gy, pbox->y1), y2 = min(gy + gHeight, pbox->y2);
+
+		    if (x1 >= x2 || y1 >= y2)
+			continue;
+
+		    exaDrawableDirty (pDrawable, gx, gy, gx + gWidth,
+				      gy + gHeight);
+		}
 	    }
-	    exaDrawableDirty(pDrawable, gx + dstXoff, gy + dstYoff,
-			     gx + dstXoff + gWidth, gy + dstYoff + gHeight);
 	}
 	x += pci->metrics.characterWidth;
     }
@@ -1062,9 +1068,8 @@ exaFillRegionSolid (DrawablePtr	pDrawabl
 	    (*pExaScr->info->Solid) (pPixmap,
 				     pBox->x1 + xoff, pBox->y1 + yoff,
 				     pBox->x2 + xoff, pBox->y2 + yoff);
-	    exaDrawableDirty (pDrawable,
-			      pBox->x1 + xoff, pBox->y1 + yoff,
-			      pBox->x2 + xoff, pBox->y2 + yoff);
+	    exaPixmapDirty (pPixmap, pBox->x1 + xoff, pBox->y1 + yoff,
+			    pBox->x2 + xoff, pBox->y2 + yoff);
 	    pBox++;
 	}
 	(*pExaScr->info->DoneSolid) (pPixmap);
@@ -1081,9 +1086,7 @@ fallback:
 	exaFinishAccess (pDrawable, EXA_PREPARE_DEST);
 	while (nbox--)
 	{
-	    exaDrawableDirty (pDrawable,
-			      pBox->x1 + xoff, pBox->y1 + yoff,
-			      pBox->x2 + xoff, pBox->y2 + yoff);
+	    exaDrawableDirty (pDrawable, pBox->x1, pBox->y1, pBox->x2, pBox->y2);
 	    pBox++;
 	}
     }
@@ -1123,9 +1126,6 @@ exaFillRegionTiled (DrawablePtr	pDrawabl
     pixmaps[1].as_src = TRUE;
     pixmaps[1].pPix = pTile;
 
-    /* We need to initialize x/yoff for tracking damage in the fallback case */
-    pPixmap = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff);
-
     if (pPixmap->drawable.width > pExaScr->info->maxX ||
 	pPixmap->drawable.height > pExaScr->info->maxY ||
 	tileWidth > pExaScr->info->maxX ||
@@ -1182,8 +1182,8 @@ exaFillRegionTiled (DrawablePtr	pDrawabl
 		dstY += h;
 		tileY = 0;
 	    }
-	    exaDrawableDirty (pDrawable, pBox->x1 + xoff, pBox->y1 + yoff,
-			      pBox->x2 + xoff, pBox->y2 + yoff);
+	    exaPixmapDirty (pPixmap, pBox->x1 + xoff, pBox->y1 + yoff,
+			    pBox->x2 + xoff, pBox->y2 + yoff);
 	    pBox++;
 	}
 	(*pExaScr->info->DoneCopy) (pPixmap);
@@ -1202,8 +1202,7 @@ fallback:
     exaFinishAccess (pDrawable, EXA_PREPARE_DEST);
     while (nbox--)
     {
-	exaDrawableDirty (pDrawable, pBox->x1 + xoff, pBox->y1 + yoff,
-			  pBox->x2 + xoff, pBox->y2 + yoff);
+	exaDrawableDirty (pDrawable, pBox->x1, pBox->y1, pBox->x2, pBox->y2);
 	pBox++;
     }
 }
diff --git a/exa/exa_priv.h b/exa/exa_priv.h
index 80cf609..926e02a 100644
--- a/exa/exa_priv.h
+++ b/exa/exa_priv.h
@@ -340,6 +340,9 @@ void
 exaFinishAccess(DrawablePtr pDrawable, int index);
 
 void
+exaPixmapDirty(PixmapPtr pPix, int x1, int y1, int x2, int y2);
+
+void
 exaDrawableDirty(DrawablePtr pDrawable, int x1, int y1, int x2, int y2);
 
 Bool
diff --git a/exa/exa_render.c b/exa/exa_render.c
index be7c240..75108a7 100644
--- a/exa/exa_render.c
+++ b/exa/exa_render.c
@@ -302,9 +302,8 @@ exaTryDriverSolidFill(PicturePtr	pSrc,
 	(*pExaScr->info->Solid) (pDstPix,
 				 pbox->x1 + dst_off_x, pbox->y1 + dst_off_y,
 				 pbox->x2 + dst_off_x, pbox->y2 + dst_off_y);
-	exaDrawableDirty (pDst->pDrawable,
-			  pbox->x1 + dst_off_x, pbox->y1 + dst_off_y,
-			  pbox->x2 + dst_off_x, pbox->y2 + dst_off_y);
+	exaPixmapDirty (pDstPix, pbox->x1 + dst_off_x, pbox->y1 + dst_off_y,
+			pbox->x2 + dst_off_x, pbox->y2 + dst_off_y);
 	pbox++;
     }
     (*pExaScr->info->DoneSolid) (pDstPix);
@@ -447,9 +446,8 @@ exaTryDriverComposite(CARD8		op,
 				     pbox->y1 + dst_off_y,
 				     pbox->x2 - pbox->x1,
 				     pbox->y2 - pbox->y1);
-	exaDrawableDirty (pDst->pDrawable,
-			  pbox->x1 + dst_off_x, pbox->y1 + dst_off_y,
-			  pbox->x2 + dst_off_x, pbox->y2 + dst_off_y);
+	exaPixmapDirty (pDstPix, pbox->x1 + dst_off_x, pbox->y1 + dst_off_y,
+			pbox->x2 + dst_off_x, pbox->y2 + dst_off_y);
 	pbox++;
     }
     (*pExaScr->info->DoneComposite) (pDstPix);
@@ -712,18 +710,19 @@ void
 exaRasterizeTrapezoid (PicturePtr pPicture, xTrapezoid  *trap,
 		       int x_off, int y_off)
 {
+    DrawablePtr pDraw = pPicture->pDrawable;
     ExaMigrationRec pixmaps[1];
 
     pixmaps[0].as_dst = TRUE;
     pixmaps[0].as_src = TRUE;
-    pixmaps[0].pPix = exaGetDrawablePixmap (pPicture->pDrawable);
+    pixmaps[0].pPix = exaGetDrawablePixmap (pDraw);
     exaDoMigration(pixmaps, 1, FALSE);
 
-    exaPrepareAccess(pPicture->pDrawable, EXA_PREPARE_DEST);
+    exaPrepareAccess(pDraw, EXA_PREPARE_DEST);
     fbRasterizeTrapezoid(pPicture, trap, x_off, y_off);
-    exaDrawableDirty(pPicture->pDrawable, 0, 0,
-		     pPicture->pDrawable->width, pPicture->pDrawable->height);
-    exaFinishAccess(pPicture->pDrawable, EXA_PREPARE_DEST);
+    exaDrawableDirty(pDraw, pDraw->x, pDraw->y,
+		     pDraw->x + pDraw->width, pDraw->y + pDraw->height);
+    exaFinishAccess(pDraw, EXA_PREPARE_DEST);
 }
 
 /**
@@ -734,18 +733,19 @@ void
 exaAddTriangles (PicturePtr pPicture, INT16 x_off, INT16 y_off, int ntri,
 		 xTriangle *tris)
 {
+    DrawablePtr pDraw = pPicture->pDrawable;
     ExaMigrationRec pixmaps[1];
 
     pixmaps[0].as_dst = TRUE;
     pixmaps[0].as_src = TRUE;
-    pixmaps[0].pPix = exaGetDrawablePixmap (pPicture->pDrawable);
+    pixmaps[0].pPix = exaGetDrawablePixmap (pDraw);
     exaDoMigration(pixmaps, 1, FALSE);
 
-    exaPrepareAccess(pPicture->pDrawable, EXA_PREPARE_DEST);
+    exaPrepareAccess(pDraw, EXA_PREPARE_DEST);
     fbAddTriangles(pPicture, x_off, y_off, ntri, tris);
-    exaFinishAccess(pPicture->pDrawable, EXA_PREPARE_DEST);
-    exaDrawableDirty(pPicture->pDrawable, 0, 0,
-		     pPicture->pDrawable->width, pPicture->pDrawable->height);
+    exaDrawableDirty(pDraw, pDraw->x, pDraw->y,
+		     pDraw->x + pDraw->width, pDraw->y + pDraw->height);
+    exaFinishAccess(pDraw, EXA_PREPARE_DEST);
 }
 
 /**
@@ -1036,8 +1036,8 @@ exaGlyphs (CARD8	op,
 			     0, 0, glyph->info.width, glyph->info.height, 0, 0);
 	    }
 
-	    exaDrawableDirty (&pPixmap->drawable, 0, 0,
-			      glyph->info.width, glyph->info.height);
+	    exaPixmapDirty (pPixmap, 0, 0,
+			    glyph->info.width, glyph->info.height);
 
 	    if (maskFormat)
 	    {
diff --git a/exa/exa_unaccel.c b/exa/exa_unaccel.c
index a309115..7713a08 100644
--- a/exa/exa_unaccel.c
+++ b/exa/exa_unaccel.c
@@ -23,26 +23,6 @@
 
 #include "exa_priv.h"
 
-#define TRIM_BOX(box, pGC) if (pGC->pCompositeClip) { \
-	    BoxPtr extents = &pGC->pCompositeClip->extents;\
-	    if(box.x1 < extents->x1) box.x1 = extents->x1; \
-	    if(box.x2 > extents->x2) box.x2 = extents->x2; \
-	    if(box.y1 < extents->y1) box.y1 = extents->y1; \
-	    if(box.y2 > extents->y2) box.y2 = extents->y2; \
-	    }
-
-#define TRANSLATE_BOX(box, pDrawable) { \
-	    box.x1 += pDrawable->x; \
-	    box.x2 += pDrawable->x; \
-	    box.y1 += pDrawable->y; \
-	    box.y2 += pDrawable->y; \
-	    }
-
-#define TRIM_AND_TRANSLATE_BOX(box, pDrawable, pGC) { \
-	    TRANSLATE_BOX(box, pDrawable); \
-	    TRIM_BOX(box, pGC); \
-	    }
-
 /*
  * These functions wrap the low-level fb rendering functions and
  * synchronize framebuffer/accelerated drawing by stalling until
@@ -222,10 +202,9 @@ ExaCheckPolyFillRect (DrawablePtr pDrawa
     EXA_FALLBACK(("to %p (%c)\n", pDrawable, exaDrawableLocation(pDrawable)));
 
     if (nrect) {
-	BoxRec box = { .x1 = max(prect->x,0),
-		       .x2 = min(prect->x + prect->width,pDrawable->width),
-		       .y1 = max(prect->y,0),
-		       .y2 = min(prect->y + prect->height,pDrawable->height) };
+	int x1 = max(prect->x, 0), y1 = max(prect->y, 0);
+	int x2 = min(prect->x + prect->width, pDrawable->width);
+	int y2 = min(prect->y + prect->height, pDrawable->height);
 
 	exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
 	exaPrepareAccessGC (pGC);
@@ -239,15 +218,14 @@ ExaCheckPolyFillRect (DrawablePtr pDrawa
 	while (--nrect)
 	{
 	    prect++;
-	    box.x1 = min(box.x1, prect->x);
-	    box.x2 = max(box.x2, prect->x + prect->width);
-	    box.y1 = min(box.y1, prect->y);
-	    box.y2 = max(box.y2, prect->y + prect->height);
+	    x1 = min(x1, prect->x);
+	    x2 = max(x2, prect->x + prect->width);
+	    y1 = min(y1, prect->y);
+	    y2 = max(y2, prect->y + prect->height);
 	}
 
-	TRIM_AND_TRANSLATE_BOX(box, pDrawable, pGC);
-
-	exaDrawableDirty (pDrawable, box.x1, box.x2, box.y1, box.y2);
+	exaDrawableDirty (pDrawable, pDrawable->x + x1, pDrawable->y + y1,
+			  pDrawable->x + x2, pDrawable->y + y2);
     }
 }
 
diff-tree 467c00cf450826e0bf06fe94470ec193af625d68 (from 4334860e69e7d5b156082bd05c7a86708e5bad4c)
Author: George Sapountzis <gsap7 at yahoo.gr>
Date:   Tue Dec 19 18:45:25 2006 +0100

    exaGlyphs: mark dirty for software path also.
    
    This affects drivers with no UploadToScreen or UploadToScreen failures.

diff --git a/exa/exa_render.c b/exa/exa_render.c
index a735820..be7c240 100644
--- a/exa/exa_render.c
+++ b/exa/exa_render.c
@@ -1034,11 +1034,11 @@ exaGlyphs (CARD8	op,
 
 		exaCopyArea (&pScratchPixmap->drawable, &pPixmap->drawable, pGC,
 			     0, 0, glyph->info.width, glyph->info.height, 0, 0);
-	    } else {
-		exaDrawableDirty (&pPixmap->drawable, 0, 0,
-				  glyph->info.width, glyph->info.height);
 	    }
 
+	    exaDrawableDirty (&pPixmap->drawable, 0, 0,
+			      glyph->info.width, glyph->info.height);
+
 	    if (maskFormat)
 	    {
 		exaComposite (PictOpAdd, pPicture, NULL, pMask, 0, 0, 0, 0,
diff-tree 4334860e69e7d5b156082bd05c7a86708e5bad4c (from parents)
Merge: 7e4717683d6c08d1e490a60b7493a94bbc57bf8d fdcc22ca1704d3519156c66804528c21b04fea65
Author: Michel Dänzer <michel at tungstengraphics.com>
Date:   Tue Dec 19 16:29:26 2006 +0100

    Merge branch 'master' into exa-damagetrack
    
    Conflicts:
    
    	exa/exa_accel.c
    	exa/exa_migration.c

diff --cc exa/exa_accel.c
index 102973a,098b27c..d2fe2e0
@@@ -767,14 -739,11 +768,14 @@@
  
      pixmaps[0].as_dst = TRUE;
      pixmaps[0].as_src = FALSE;
-     pixmaps[0].pPix = exaGetDrawablePixmap (pDrawable);
+     pixmaps[0].pPix = pPixmap = exaGetDrawablePixmap (pDrawable);
 - 
 +
 +    /* We need to initialize x/yoff for tracking damage in the fallback case */
 +    pPixmap = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff);
 +
      if (pExaScr->swappedOut ||
- 	pDrawable->width > pExaScr->info->maxX ||
- 	pDrawable->height > pExaScr->info->maxY)
+ 	pPixmap->drawable.width > pExaScr->info->maxX ||
+ 	pPixmap->drawable.height > pExaScr->info->maxY)
      {
  	exaDoMigration (pixmaps, 1, FALSE);
  	goto fallback;
@@@ -1122,11 -1070,8 +1123,11 @@@
      pixmaps[1].as_src = TRUE;
      pixmaps[1].pPix = pTile;
  
 +    /* We need to initialize x/yoff for tracking damage in the fallback case */
 +    pPixmap = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff);
 +
-     if (pDrawable->width > pExaScr->info->maxX ||
- 	pDrawable->height > pExaScr->info->maxY ||
+     if (pPixmap->drawable.width > pExaScr->info->maxX ||
+ 	pPixmap->drawable.height > pExaScr->info->maxY ||
  	tileWidth > pExaScr->info->maxX ||
  	tileHeight > pExaScr->info->maxY)
      {
diff-tree 7e4717683d6c08d1e490a60b7493a94bbc57bf8d (from f9f33b72e34eaeccea2a20f4a3dd68c2dbefc90e)
Author: Michel Dänzer <michel at tungstengraphics.com>
Date:   Sun Oct 15 18:12:28 2006 +0200

    exaDrawableDirty: Fix initialization of BoxRec.
    
    This will hopefully fix the partial window corruption experienced by some
    people.

diff --git a/exa/exa.c b/exa/exa.c
index b0c4d31..3e6ac76 100644
--- a/exa/exa.c
+++ b/exa/exa.c
@@ -126,7 +126,8 @@ exaDrawableDirty (DrawablePtr pDrawable,
 {
     ExaPixmapPrivPtr pExaPixmap;
     RegionPtr pDamageReg;
-    BoxRec box = { max(x1,0), max(y1,0), min(x2,pDrawable->width), min(y2,pDrawable->height) };
+    BoxRec box = { .x1 = max(x1,0), .x2 = min(x2,pDrawable->width),
+		   .y1 = max(y1,0), .y2 = min(y2,pDrawable->height) };
     RegionRec region;
 
     pExaPixmap = ExaGetPixmapPriv(exaGetDrawablePixmap (pDrawable));
diff-tree f9f33b72e34eaeccea2a20f4a3dd68c2dbefc90e (from 6060b612de6b41f872d034c6130770c1d189d0a3)
Author: Michel Dänzer <michel at tungstengraphics.com>
Date:   Mon Jun 12 20:19:11 2006 +0200

    Track per-drawable damage to minimize UTS and DFS transfers.
    
    Based on work by Eric Anholt.

diff --git a/exa/exa.c b/exa/exa.c
index 75d5c0d..b0c4d31 100644
--- a/exa/exa.c
+++ b/exa/exa.c
@@ -122,13 +122,22 @@ exaGetDrawablePixmap(DrawablePtr pDrawab
  * optimizations in pixmap migration when no changes have occurred.
  */
 void
-exaDrawableDirty (DrawablePtr pDrawable)
+exaDrawableDirty (DrawablePtr pDrawable, int x1, int y1, int x2, int y2)
 {
     ExaPixmapPrivPtr pExaPixmap;
+    RegionPtr pDamageReg;
+    BoxRec box = { max(x1,0), max(y1,0), min(x2,pDrawable->width), min(y2,pDrawable->height) };
+    RegionRec region;
 
     pExaPixmap = ExaGetPixmapPriv(exaGetDrawablePixmap (pDrawable));
-    if (pExaPixmap != NULL)
-	pExaPixmap->dirty = TRUE;
+    if (!pExaPixmap || box.x1 >= box.x2 || box.y1 >= box.y2)
+	return;
+	
+    pDamageReg = DamageRegion(pExaPixmap->pDamage);
+
+    REGION_INIT(pScreen, &region, &box, 1);
+    REGION_UNION(pScreen, pDamageReg, pDamageReg, &region);
+    REGION_UNINIT(pScreen, &region);
 }
 
 static Bool
@@ -149,6 +158,7 @@ exaDestroyPixmap (PixmapPtr pPixmap)
 	    pPixmap->devPrivate.ptr = pExaPixmap->sys_ptr;
 	    pPixmap->devKind = pExaPixmap->sys_pitch;
 	}
+	REGION_UNINIT(pPixmap->drawable.pScreen, &pExaPixmap->validReg);
     }
     return fbDestroyPixmap (pPixmap);
 }
@@ -216,7 +226,20 @@ exaCreatePixmap(ScreenPtr pScreen, int w
 	return NULL;
     }
 
-    pExaPixmap->dirty = FALSE;
+    /* Set up damage tracking */
+    pExaPixmap->pDamage = DamageCreate (NULL, NULL, DamageReportNone, TRUE,
+					pScreen, pPixmap);
+
+    if (pExaPixmap->pDamage == NULL) {
+	fbDestroyPixmap (pPixmap);
+	return NULL;
+    }
+
+    DamageRegister (&pPixmap->drawable, pExaPixmap->pDamage);
+    DamageSetReportAfterOp (pExaPixmap->pDamage, TRUE);
+
+    /* None of the pixmap bits are valid initially */
+    REGION_NULL(pScreen, &pExaPixmap->validReg);
 
     return pPixmap;
 }
@@ -334,8 +357,7 @@ exaPrepareAccess(DrawablePtr pDrawable, 
 /**
  * exaFinishAccess() is EXA's wrapper for the driver's FinishAccess() handler.
  *
- * It deals with marking drawables as dirty, and calling the driver's
- * FinishAccess() only if necessary.
+ * It deals with calling the driver's FinishAccess() only if necessary.
  */
 void
 exaFinishAccess(DrawablePtr pDrawable, int index)
@@ -345,9 +367,6 @@ exaFinishAccess(DrawablePtr pDrawable, i
     PixmapPtr	    pPixmap;
     ExaPixmapPrivPtr pExaPixmap;
 
-    if (index == EXA_PREPARE_DEST)
-	exaDrawableDirty (pDrawable);
-
     pPixmap = exaGetDrawablePixmap (pDrawable);
 
     pExaPixmap = ExaGetPixmapPriv(pPixmap);
@@ -373,7 +392,7 @@ exaFinishAccess(DrawablePtr pDrawable, i
  * accelerated or may sync the card and fall back to fb.
  */
 static void
-exaValidateGC (GCPtr pGC, Mask changes, DrawablePtr pDrawable)
+exaValidateGC (GCPtr pGC, unsigned long changes, DrawablePtr pDrawable)
 {
     /* fbValidateGC will do direct access to pixmaps if the tiling has changed.
      * Preempt fbValidateGC by doing its work and masking the change out, so
@@ -404,6 +423,7 @@ exaValidateGC (GCPtr pGC, Mask changes, 
 		exaPrepareAccess(&pOldTile->drawable, EXA_PREPARE_SRC);
 		pNewTile = fb24_32ReformatTile (pOldTile,
 						pDrawable->bitsPerPixel);
+		exaDrawableDirty(&pNewTile->drawable, 0, 0, pNewTile->drawable.width, pNewTile->drawable.height);
 		exaFinishAccess(&pOldTile->drawable, EXA_PREPARE_SRC);
 	    }
 	    if (pNewTile)
@@ -419,9 +439,14 @@ exaValidateGC (GCPtr pGC, Mask changes, 
 	if (!pGC->tileIsPixel && FbEvenTile (pGC->tile.pixmap->drawable.width *
 					     pDrawable->bitsPerPixel))
 	{
-	    exaPrepareAccess(&pGC->tile.pixmap->drawable, EXA_PREPARE_SRC);
+	    /* XXX This fixes corruption with tiled pixmaps, but may just be a
+	     * workaround for broken drivers
+	     */
+	    exaMoveOutPixmap(pGC->tile.pixmap);
 	    fbPadPixmap (pGC->tile.pixmap);
-	    exaFinishAccess(&pGC->tile.pixmap->drawable, EXA_PREPARE_SRC);
+	    exaDrawableDirty(&pGC->tile.pixmap->drawable, 0, 0,
+			     pGC->tile.pixmap->drawable.width,
+			     pGC->tile.pixmap->drawable.height);
 	}
 	/* Mask out the GCTile change notification, now that we've done FB's
 	 * job for it.
diff --git a/exa/exa_accel.c b/exa/exa_accel.c
index bc77a40..102973a 100644
--- a/exa/exa_accel.c
+++ b/exa/exa_accel.c
@@ -20,6 +20,11 @@
  * 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:
+ *    Eric Anholt <eric at anholt.net>
+ *    Michel Dänzer <michel at tungstengraphics.com>
+ *
  */
 
 #ifdef HAVE_DIX_CONFIG_H
@@ -104,6 +109,9 @@ exaFillSpans(DrawablePtr pDrawable, GCPt
 	    (*pExaScr->info->Solid) (pPixmap,
 				     fullX1 + off_x, fullY1 + off_y,
 				     fullX2 + off_x, fullY1 + 1 + off_y);
+	    exaDrawableDirty (pDrawable,
+			      fullX1 + off_x, fullY1 + off_y,
+			      fullX2 + off_x, fullY1 + 1 + off_y);
 	}
 	else
 	{
@@ -118,17 +126,20 @@ exaFillSpans(DrawablePtr pDrawable, GCPt
 		    partX2 = pbox->x2;
 		    if (partX2 > fullX2)
 			partX2 = fullX2;
-		    if (partX2 > partX1)
+		    if (partX2 > partX1) {
 			(*pExaScr->info->Solid) (pPixmap,
 						 partX1 + off_x, fullY1 + off_y,
 						 partX2 + off_x, fullY1 + 1 + off_y);
+			exaDrawableDirty (pDrawable,
+					  partX1 + off_x, fullY1 + off_y,
+					  partX2 + off_x, fullY1 + 1 + off_y);
+		    }
 		}
 		pbox++;
 	    }
 	}
     }
     (*pExaScr->info->DoneSolid) (pPixmap);
-    exaDrawableDirty (pDrawable);
     exaMarkSync(pScreen);
 }
 
@@ -222,8 +233,8 @@ exaPutImage (DrawablePtr pDrawable, GCPt
 
 	    exaFinishAccess(pDrawable, EXA_PREPARE_DEST);
 	}
+	exaDrawableDirty(pDrawable, x1 + xoff, y1 + yoff, x2 + xoff, y2 + yoff);
     }
-    exaDrawableDirty(pDrawable);
 
     return;
 
@@ -351,11 +362,13 @@ exaCopyNtoNTwoDir (DrawablePtr pSrcDrawa
 				       dst_off_y + pbox->y1 + i,
 				       pbox->x2 - pbox->x1, 1);
 	}
+	exaDrawableDirty(pDstDrawable,
+			 dst_off_x + pbox->x1, dst_off_y + pbox->y1,
+			 dst_off_x + pbox->x2, dst_off_y + pbox->y2);
     }
     if (dirsetup != 0)
 	pExaScr->info->DoneCopy(pDstPixmap);
     exaMarkSync(pDstDrawable->pScreen);
-    exaDrawableDirty(pDstDrawable);
     return TRUE;
 }
 
@@ -423,11 +436,13 @@ exaCopyNtoN (DrawablePtr    pSrcDrawable
 				    pbox->x1 + dst_off_x, pbox->y1 + dst_off_y,
 				    pbox->x2 - pbox->x1,
 				    pbox->y2 - pbox->y1);
+	    exaDrawableDirty (pDstDrawable,
+			      pbox->x1 + dst_off_x, pbox->y1 + dst_off_y,
+			      pbox->x2 + dst_off_x, pbox->y2 + dst_off_y);
 	    pbox++;
 	}
 	(*pExaScr->info->DoneCopy) (pDstPixmap);
 	exaMarkSync(pDstDrawable->pScreen);
-	exaDrawableDirty (pDstDrawable);
 	return;
     }
 
@@ -442,6 +457,13 @@ fallback:
 		bitplane, closure);
     exaFinishAccess (pSrcDrawable, EXA_PREPARE_SRC);
     exaFinishAccess (pDstDrawable, EXA_PREPARE_DEST);
+    while (nbox--)
+    {
+	exaDrawableDirty (pDstDrawable,
+			  pbox->x1 + dst_off_x, pbox->y1 + dst_off_y,
+			  pbox->x2 + dst_off_x, pbox->y2 + dst_off_y);
+	pbox++;
+    }
 }
 
 RegionPtr
@@ -681,6 +703,9 @@ exaPolyFillRect(DrawablePtr pDrawable,
 	    (*pExaScr->info->Solid) (pPixmap,
 				     fullX1 + xoff, fullY1 + yoff,
 				     fullX2 + xoff, fullY2 + yoff);
+	    exaDrawableDirty (pDrawable,
+			      fullX1 + xoff, fullY1 + yoff,
+			      fullX2 + xoff, fullY2 + yoff);
 	}
 	else
 	{
@@ -706,15 +731,18 @@ exaPolyFillRect(DrawablePtr pDrawable,
 
 		pbox++;
 
-		if (partX1 < partX2 && partY1 < partY2)
+		if (partX1 < partX2 && partY1 < partY2) {
 		    (*pExaScr->info->Solid) (pPixmap,
 					     partX1 + xoff, partY1 + yoff,
 					     partX2 + xoff, partY2 + yoff);
+		    exaDrawableDirty (pDrawable,
+				      partX1 + xoff, partY1 + yoff,
+				      partX2 + xoff, partY2 + yoff);
+		}
 	    }
 	}
     }
     (*pExaScr->info->DoneSolid) (pPixmap);
-    exaDrawableDirty (pDrawable);
     exaMarkSync(pDrawable->pScreen);
 }
 
@@ -735,11 +763,15 @@ exaSolidBoxClipped (DrawablePtr	pDrawabl
     int		xoff, yoff;
     int		partX1, partX2, partY1, partY2;
     ExaMigrationRec pixmaps[1];
+    Bool	fallback = FALSE;
 
     pixmaps[0].as_dst = TRUE;
     pixmaps[0].as_src = FALSE;
     pixmaps[0].pPix = exaGetDrawablePixmap (pDrawable);
- 
+
+    /* We need to initialize x/yoff for tracking damage in the fallback case */
+    pPixmap = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff);
+
     if (pExaScr->swappedOut ||
 	pDrawable->width > pExaScr->info->maxX ||
 	pDrawable->height > pExaScr->info->maxY)
@@ -750,19 +782,21 @@ exaSolidBoxClipped (DrawablePtr	pDrawabl
 	exaDoMigration (pixmaps, 1, TRUE);
     }
 
-    if (!(pPixmap = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff)) ||
+    pPixmap = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff);
+
+    if (!pPixmap ||
 	!(*pExaScr->info->PrepareSolid) (pPixmap, GXcopy, pm, fg))
     {
 fallback:
 	EXA_FALLBACK(("to %p (%c)\n", pDrawable,
 		      exaDrawableLocation(pDrawable)));
+	fallback = TRUE;
 	exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
 	fg = fbReplicatePixel (fg, pDrawable->bitsPerPixel);
 	fbSolidBoxClipped (pDrawable, pClip, x1, y1, x2, y2,
 			   fbAnd (GXcopy, fg, pm),
 			   fbXor (GXcopy, fg, pm));
 	exaFinishAccess (pDrawable, EXA_PREPARE_DEST);
-	return;
     }
     for (nbox = REGION_NUM_RECTS(pClip), pbox = REGION_RECTS(pClip);
 	 nbox--;
@@ -790,12 +824,19 @@ fallback:
 	if (partY2 <= partY1)
 	    continue;
 
-	(*pExaScr->info->Solid) (pPixmap,
-				 partX1 + xoff, partY1 + yoff,
-				 partX2 + xoff, partY2 + yoff);
+	if (!fallback)
+	    (*pExaScr->info->Solid) (pPixmap,
+				     partX1 + xoff, partY1 + yoff,
+				     partX2 + xoff, partY2 + yoff);
+	exaDrawableDirty (pDrawable,
+			  partX1 + xoff, partY1 + yoff,
+			  partX2 + xoff, partY2 + yoff);
     }
+
+    if (fallback)
+	return;
+
     (*pExaScr->info->DoneSolid) (pPixmap);
-    exaDrawableDirty (pDrawable);
     exaMarkSync(pDrawable->pScreen);
 }
 
@@ -928,6 +969,8 @@ exaImageGlyphBlt (DrawablePtr	pDrawable,
 			      gStride,
 			      0);
 	    }
+	    exaDrawableDirty(pDrawable, gx + dstXoff, gy + dstYoff,
+			     gx + dstXoff + gWidth, gy + dstYoff + gHeight);
 	}
 	x += pci->metrics.characterWidth;
     }
@@ -994,6 +1037,8 @@ exaFillRegionSolid (DrawablePtr	pDrawabl
     PixmapPtr pPixmap;
     int xoff, yoff;
     ExaMigrationRec pixmaps[1];
+    int nbox = REGION_NUM_RECTS (pRegion);
+    BoxPtr pBox = REGION_RECTS (pRegion);
 
     pixmaps[0].as_dst = TRUE;
     pixmaps[0].as_src = FALSE;
@@ -1011,19 +1056,18 @@ exaFillRegionSolid (DrawablePtr	pDrawabl
     if ((pPixmap = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff)) &&
 	(*pExaScr->info->PrepareSolid) (pPixmap, GXcopy, FB_ALLONES, pixel))
     {
-	int	nbox = REGION_NUM_RECTS (pRegion);
-	BoxPtr	pBox = REGION_RECTS (pRegion);
-
 	while (nbox--)
 	{
 	    (*pExaScr->info->Solid) (pPixmap,
 				     pBox->x1 + xoff, pBox->y1 + yoff,
 				     pBox->x2 + xoff, pBox->y2 + yoff);
+	    exaDrawableDirty (pDrawable,
+			      pBox->x1 + xoff, pBox->y1 + yoff,
+			      pBox->x2 + xoff, pBox->y2 + yoff);
 	    pBox++;
 	}
 	(*pExaScr->info->DoneSolid) (pPixmap);
 	exaMarkSync(pDrawable->pScreen);
-	exaDrawableDirty (pDrawable);
     }
     else
     {
@@ -1034,6 +1078,13 @@ fallback:
 	fbFillRegionSolid (pDrawable, pRegion, 0,
 			   fbReplicatePixel (pixel, pDrawable->bitsPerPixel));
 	exaFinishAccess (pDrawable, EXA_PREPARE_DEST);
+	while (nbox--)
+	{
+	    exaDrawableDirty (pDrawable,
+			      pBox->x1 + xoff, pBox->y1 + yoff,
+			      pBox->x2 + xoff, pBox->y2 + yoff);
+	    pBox++;
+	}
     }
 }
 
@@ -1047,9 +1098,11 @@ exaFillRegionTiled (DrawablePtr	pDrawabl
 {
     ExaScreenPriv(pDrawable->pScreen);
     PixmapPtr pPixmap;
-    int xoff, yoff;
+    int xoff, yoff, tileXoff, tileYoff;
     int tileWidth, tileHeight;
     ExaMigrationRec pixmaps[2];
+    int nbox = REGION_NUM_RECTS (pRegion);
+    BoxPtr pBox = REGION_RECTS (pRegion);
 
     tileWidth = pTile->drawable.width;
     tileHeight = pTile->drawable.height;
@@ -1069,6 +1122,9 @@ exaFillRegionTiled (DrawablePtr	pDrawabl
     pixmaps[1].as_src = TRUE;
     pixmaps[1].pPix = pTile;
 
+    /* We need to initialize x/yoff for tracking damage in the fallback case */
+    pPixmap = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff);
+
     if (pDrawable->width > pExaScr->info->maxX ||
 	pDrawable->height > pExaScr->info->maxY ||
 	tileWidth > pExaScr->info->maxX ||
@@ -1081,18 +1137,16 @@ exaFillRegionTiled (DrawablePtr	pDrawabl
     }
 
     pPixmap = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff);
+
     if (!pPixmap)
 	goto fallback;
 
     if (!exaPixmapIsOffscreen(pTile))
 	goto fallback;
 
-    if ((*pExaScr->info->PrepareCopy) (pTile, pPixmap, 0, 0, GXcopy,
+    if ((*pExaScr->info->PrepareCopy) (exaGetOffscreenPixmap((DrawablePtr)pTile, &tileXoff, &tileYoff), pPixmap, 0, 0, GXcopy,
 				       FB_ALLONES))
     {
-	int nbox = REGION_NUM_RECTS (pRegion);
-	BoxPtr pBox = REGION_RECTS (pRegion);
-
 	while (nbox--)
 	{
 	    int height = pBox->y2 - pBox->y1;
@@ -1118,7 +1172,7 @@ exaFillRegionTiled (DrawablePtr	pDrawabl
 		    width -= w;
 
 		    (*pExaScr->info->Copy) (pPixmap,
-					    tileX, tileY,
+					    tileX + tileXoff, tileY + tileYoff,
 					    dstX + xoff, dstY + yoff,
 					    w, h);
 		    dstX += w;
@@ -1127,11 +1181,12 @@ exaFillRegionTiled (DrawablePtr	pDrawabl
 		dstY += h;
 		tileY = 0;
 	    }
+	    exaDrawableDirty (pDrawable, pBox->x1 + xoff, pBox->y1 + yoff,
+			      pBox->x2 + xoff, pBox->y2 + yoff);
 	    pBox++;
 	}
 	(*pExaScr->info->DoneCopy) (pPixmap);
 	exaMarkSync(pDrawable->pScreen);
-	exaDrawableDirty (pDrawable);
 	return;
     }
 
@@ -1144,6 +1199,12 @@ fallback:
     fbFillRegionTiled (pDrawable, pRegion, pTile);
     exaFinishAccess ((DrawablePtr)pTile, EXA_PREPARE_SRC);
     exaFinishAccess (pDrawable, EXA_PREPARE_DEST);
+    while (nbox--)
+    {
+	exaDrawableDirty (pDrawable, pBox->x1 + xoff, pBox->y1 + yoff,
+			  pBox->x2 + xoff, pBox->y2 + yoff);
+	pBox++;
+    }
 }
 
 void
diff --git a/exa/exa_migration.c b/exa/exa_migration.c
index 57d651f..d24a1bf 100644
--- a/exa/exa_migration.c
+++ b/exa/exa_migration.c
@@ -22,6 +22,7 @@
  *
  * Authors:
  *    Eric Anholt <eric at anholt.net>
+ *    Michel Dänzer <michel at tungstengraphics.com>
  *
  */
 
@@ -58,6 +59,27 @@ exaPixmapIsPinned (PixmapPtr pPix)
 }
 
 /**
+ * The fallback path for UTS/DFS failing is to just memcpy.  exaCopyDirtyToSys
+ * and exaCopyDirtyToFb both needed to do this loop.
+ */
+static void
+exaMemcpyBox (PixmapPtr pPixmap, BoxPtr pbox, CARD8 *src, int src_pitch,
+	      CARD8 *dst, int dst_pitch)
+ {
+    int i, cpp = pPixmap->drawable.bitsPerPixel / 8;
+    int bytes = (pbox->x2 - pbox->x1) * cpp;
+
+    src += pbox->y1 * src_pitch + pbox->x1 * cpp;
+    dst += pbox->y1 * dst_pitch + pbox->x1 * cpp;
+
+    for (i = pbox->y2 - pbox->y1; i; i--) {
+	memcpy (dst, src, bytes);
+	src += src_pitch;
+	dst += dst_pitch;
+    }
+}
+ 
+/**
  * Returns TRUE if the pixmap is dirty (has been modified in its current
  * location compared to the other), or lacks a private for tracking
  * dirtiness.
@@ -67,7 +89,8 @@ exaPixmapIsDirty (PixmapPtr pPix)
 {
     ExaPixmapPriv (pPix);
 
-    return pExaPixmap == NULL || pExaPixmap->dirty == TRUE;
+    return pExaPixmap == NULL ||
+	REGION_NOTEMPTY (pScreen, DamageRegion(pExaPixmap->pDamage));
 }
 
 /**
@@ -98,54 +121,62 @@ exaCopyDirtyToSys (PixmapPtr pPixmap)
 {
     ExaScreenPriv (pPixmap->drawable.pScreen);
     ExaPixmapPriv (pPixmap);
+    RegionPtr pRegion = DamageRegion (pExaPixmap->pDamage);
     CARD8 *save_ptr;
     int save_pitch;
-
-    if (!pExaPixmap->dirty)
-	return;
+    BoxPtr pBox = REGION_RECTS(pRegion);
+    int nbox = REGION_NUM_RECTS(pRegion);
+    Bool do_sync = FALSE;
 
     save_ptr = pPixmap->devPrivate.ptr;
     save_pitch = pPixmap->devKind;
     pPixmap->devPrivate.ptr = pExaPixmap->fb_ptr;
     pPixmap->devKind = pExaPixmap->fb_pitch;
 
-    if (pExaScr->info->DownloadFromScreen == NULL ||
-	!pExaScr->info->DownloadFromScreen (pPixmap,
-					    0,
-					    0,
-					    pPixmap->drawable.width,
-					    pPixmap->drawable.height,
-					    pExaPixmap->sys_ptr,
-					    pExaPixmap->sys_pitch))
-    {
-	char *src, *dst;
-	int src_pitch, dst_pitch, i, bytes;
-
-	exaPrepareAccess(&pPixmap->drawable, EXA_PREPARE_SRC);
-
-	dst = pExaPixmap->sys_ptr;
-	dst_pitch = pExaPixmap->sys_pitch;
-	src = pExaPixmap->fb_ptr;
-	src_pitch = pExaPixmap->fb_pitch;
-	bytes = src_pitch < dst_pitch ? src_pitch : dst_pitch;
-
-	for (i = 0; i < pPixmap->drawable.height; i++) {
-	    memcpy (dst, src, bytes);
-	    dst += dst_pitch;
-	    src += src_pitch;
+    while (nbox--) {
+	pBox->x1 = max(pBox->x1, 0);
+	pBox->y1 = max(pBox->y1, 0);
+	pBox->x2 = min(pBox->x2, pPixmap->drawable.width);
+	pBox->y2 = min(pBox->y2, pPixmap->drawable.height);
+
+	if (pBox->x1 >= pBox->x2 || pBox->y1 >= pBox->y2)
+	    continue;
+
+	if (pExaScr->info->DownloadFromScreen == NULL ||
+	    !pExaScr->info->DownloadFromScreen (pPixmap,
+						pBox->x1, pBox->y1,
+						pBox->x2 - pBox->x1,
+						pBox->y2 - pBox->y1,
+						pExaPixmap->sys_ptr
+						+ pBox->y1 * pExaPixmap->sys_pitch
+						+ pBox->x1 * pPixmap->drawable.bitsPerPixel / 8,
+						pExaPixmap->sys_pitch))
+	{
+	    exaPrepareAccess(&pPixmap->drawable, EXA_PREPARE_SRC);
+	    exaMemcpyBox (pPixmap, pBox,
+			  pExaPixmap->fb_ptr, pExaPixmap->fb_pitch,
+			  pExaPixmap->sys_ptr, pExaPixmap->sys_pitch);
+	    exaFinishAccess(&pPixmap->drawable, EXA_PREPARE_SRC);
 	}
-	exaFinishAccess(&pPixmap->drawable, EXA_PREPARE_SRC);
+	else
+	    do_sync = TRUE;
+
+	pBox++;
     }
 
     /* Make sure the bits have actually landed, since we don't necessarily sync
      * when accessing pixmaps in system memory.
      */
-    exaWaitSync (pPixmap->drawable.pScreen);
+    if (do_sync)
+	exaWaitSync (pPixmap->drawable.pScreen);
 
     pPixmap->devPrivate.ptr = save_ptr;
     pPixmap->devKind = save_pitch;
 
-    pExaPixmap->dirty = FALSE;
+    /* The previously damaged bits are now no longer damaged but valid */
+    REGION_UNION(pPixmap->drawable.pScreen,
+		 &pExaPixmap->validReg, &pExaPixmap->validReg, pRegion);
+    DamageEmpty (pExaPixmap->pDamage);
 }
 
 /**
@@ -158,49 +189,59 @@ exaCopyDirtyToFb (PixmapPtr pPixmap)
 {
     ExaScreenPriv (pPixmap->drawable.pScreen);
     ExaPixmapPriv (pPixmap);
+    RegionPtr pRegion = DamageRegion (pExaPixmap->pDamage);
     CARD8 *save_ptr;
     int save_pitch;
-
-    if (!pExaPixmap->dirty)
-	return;
+    BoxPtr pBox = REGION_RECTS(pRegion);
+    int nbox = REGION_NUM_RECTS(pRegion);
+    Bool do_sync = FALSE;
 
     save_ptr = pPixmap->devPrivate.ptr;
     save_pitch = pPixmap->devKind;
     pPixmap->devPrivate.ptr = pExaPixmap->fb_ptr;
     pPixmap->devKind = pExaPixmap->fb_pitch;
 
-    if (pExaScr->info->UploadToScreen == NULL ||
-	!pExaScr->info->UploadToScreen (pPixmap,
-					0,
-					0,
-					pPixmap->drawable.width,
-					pPixmap->drawable.height,
-					pExaPixmap->sys_ptr,
-					pExaPixmap->sys_pitch))
-    {
-	char *src, *dst;
-	int src_pitch, dst_pitch, i, bytes;
-
-	exaPrepareAccess(&pPixmap->drawable, EXA_PREPARE_DEST);
-
-	dst = pExaPixmap->fb_ptr;
-	dst_pitch = pExaPixmap->fb_pitch;
-	src = pExaPixmap->sys_ptr;
-	src_pitch = pExaPixmap->sys_pitch;
-	bytes = src_pitch < dst_pitch ? src_pitch : dst_pitch;
-
-	for (i = 0; i < pPixmap->drawable.height; i++) {
-	    memcpy (dst, src, bytes);
-	    dst += dst_pitch;
-	    src += src_pitch;
+    while (nbox--) {
+	pBox->x1 = max(pBox->x1, 0);
+	pBox->y1 = max(pBox->y1, 0);
+	pBox->x2 = min(pBox->x2, pPixmap->drawable.width);
+	pBox->y2 = min(pBox->y2, pPixmap->drawable.height);
+
+	if (pBox->x1 >= pBox->x2 || pBox->y1 >= pBox->y2)
+	    continue;
+
+	if (pExaScr->info->UploadToScreen == NULL ||
+	    !pExaScr->info->UploadToScreen (pPixmap,
+					    pBox->x1, pBox->y1,
+					    pBox->x2 - pBox->x1,
+					    pBox->y2 - pBox->y1,
+					    pExaPixmap->sys_ptr
+					    + pBox->y1 * pExaPixmap->sys_pitch
+					    + pBox->x1 * pPixmap->drawable.bitsPerPixel / 8,
+					    pExaPixmap->sys_pitch))
+	{
+	    exaPrepareAccess(&pPixmap->drawable, EXA_PREPARE_DEST);
+	    exaMemcpyBox (pPixmap, pBox,
+			  pExaPixmap->sys_ptr, pExaPixmap->sys_pitch,
+			  pExaPixmap->fb_ptr, pExaPixmap->fb_pitch);
+	    exaFinishAccess(&pPixmap->drawable, EXA_PREPARE_DEST);
 	}
-	exaFinishAccess(&pPixmap->drawable, EXA_PREPARE_DEST);
+	else
+	    do_sync = TRUE;
+
+	pBox++;
     }
 
+    if (do_sync)
+	exaMarkSync (pPixmap->drawable.pScreen);
+
     pPixmap->devPrivate.ptr = save_ptr;
     pPixmap->devKind = save_pitch;
 
-    pExaPixmap->dirty = FALSE;
+    /* The previously damaged bits are now no longer damaged but valid */
+    REGION_UNION(pPixmap->drawable.pScreen,
+		 &pExaPixmap->validReg, &pExaPixmap->validReg, pRegion);
+    DamageEmpty (pExaPixmap->pDamage);
 }
 
 /**
@@ -213,6 +254,7 @@ exaPixmapSave (ScreenPtr pScreen, ExaOff
 {
     PixmapPtr pPixmap = area->privData;
     ExaPixmapPriv(pPixmap);
+    RegionPtr pDamageReg = DamageRegion(pExaPixmap->pDamage);
 
     DBG_MIGRATE (("Save %p (%p) (%dx%d) (%c)\n", pPixmap,
 		  (void*)(ExaGetPixmapPriv(pPixmap)->area ?
@@ -231,10 +273,9 @@ exaPixmapSave (ScreenPtr pScreen, ExaOff
     pExaPixmap->fb_ptr = NULL;
     pExaPixmap->area = NULL;
 
-    /* Mark it dirty now, to say that there is important data in the
-     * system-memory copy.
-     */
-    pExaPixmap->dirty = TRUE;
+    /* Mark all valid bits as damaged, so they'll get copied to FB next time */
+    REGION_UNION(pPixmap->drawable.pScreen, pDamageReg, pDamageReg,
+		 &pExaPixmap->validReg);
 }
 
 /**
@@ -413,30 +454,57 @@ exaMigrateTowardSys (PixmapPtr pPixmap)
  * If the pixmap has both a framebuffer and system memory copy, this function
  * asserts that both of them are the same.
  */
-static void
+static Bool
 exaAssertNotDirty (PixmapPtr pPixmap)
 {
     ExaPixmapPriv (pPixmap);
     CARD8 *dst, *src;
-    int dst_pitch, src_pitch, data_row_bytes, y;
+    RegionPtr pValidReg = &pExaPixmap->validReg;
+    int dst_pitch, src_pitch, cpp, y, nbox = REGION_NUM_RECTS(pValidReg);
+    BoxPtr pBox = REGION_RECTS(pValidReg);
+    Bool ret = TRUE;
 
     if (pExaPixmap == NULL || pExaPixmap->fb_ptr == NULL)
-	return;
+	return ret;
 
     dst = pExaPixmap->sys_ptr;
     dst_pitch = pExaPixmap->sys_pitch;
     src = pExaPixmap->fb_ptr;
     src_pitch = pExaPixmap->fb_pitch;
-    data_row_bytes = pPixmap->drawable.width *
-		     pPixmap->drawable.bitsPerPixel / 8;
+    cpp = pPixmap->drawable.bitsPerPixel / 8;
 
     exaPrepareAccess(&pPixmap->drawable, EXA_PREPARE_SRC);
-    for (y = 0; y < pPixmap->drawable.height; y++) {
-	if (memcmp(dst, src, data_row_bytes) != 0) {
-	     abort();
-	}
+    while (nbox--) {
+	    int rowbytes;
+
+	    pBox->x1 = max(pBox->x1, 0);
+	    pBox->y1 = max(pBox->y1, 0);
+	    pBox->x2 = min(pBox->x2, pPixmap->drawable.width);
+	    pBox->y2 = min(pBox->y2, pPixmap->drawable.height);
+
+	    if (pBox->x1 >= pBox->x2 || pBox->y1 >= pBox->y2)
+		continue;
+
+	    rowbytes = (pBox->x2 - pBox->x1) * cpp;
+	    src += pBox->y1 * src_pitch + pBox->x1 * cpp;
+	    dst += pBox->y1 * dst_pitch + pBox->x1 * cpp;
+
+	    for (y = pBox->y2 - pBox->y1; y; y--) {
+		if (memcmp(dst + pBox->y1 * dst_pitch + pBox->x1 * cpp,
+			   src + pBox->y1 * src_pitch + pBox->x1 * cpp,
+			   (pBox->x2 - pBox->x1) * cpp) != 0) {
+		    ret = FALSE;
+		    break;
+		}
+		src += src_pitch;
+		dst += dst_pitch;
+	    }
+	    src -= pBox->y1 * src_pitch + pBox->x1 * cpp;
+	    dst -= pBox->y1 * dst_pitch + pBox->x1 * cpp;
     }
     exaFinishAccess(&pPixmap->drawable, EXA_PREPARE_SRC);
+
+    return ret;
 }
 
 /**
@@ -460,8 +528,9 @@ exaDoMigration (ExaMigrationPtr pixmaps,
      */
     if (pExaScr->checkDirtyCorrectness) {
 	for (i = 0; i < npixmaps; i++) {
-	    if (!exaPixmapIsDirty (pixmaps[i].pPix))
-		exaAssertNotDirty (pixmaps[i].pPix);
+	    if (!exaPixmapIsDirty (pixmaps[i].pPix) &&
+		!exaAssertNotDirty (pixmaps[i].pPix))
+		ErrorF("%s: Pixmap %d dirty but not marked as such!\n", __func__, i);
 	}
     }
     /* If anything is pinned in system memory, we won't be able to
diff --git a/exa/exa_offscreen.c b/exa/exa_offscreen.c
index b55802e..d5864dc 100644
--- a/exa/exa_offscreen.c
+++ b/exa/exa_offscreen.c
@@ -390,6 +390,7 @@ ExaOffscreenMarkUsed (PixmapPtr pPixmap)
 	    if (area->state == ExaOffscreenRemovable)
 		area->score = (area->score * 7) / 8;
 	}
+	iter = 0;
     }
 }
 
diff --git a/exa/exa_priv.h b/exa/exa_priv.h
index 90af553..c725b4d 100644
--- a/exa/exa_priv.h
+++ b/exa/exa_priv.h
@@ -51,6 +51,7 @@
 #ifdef RENDER
 #include "fbpict.h"
 #endif
+#include "damage.h"
 
 #define DEBUG_TRACE_FALL	0
 #define DEBUG_MIGRATE		0
@@ -168,16 +169,16 @@ typedef struct {
     unsigned int    fb_size;	/**< size of pixmap in framebuffer memory */
 
     /**
-     * If area is NULL, then dirty == TRUE means that the pixmap has been
-     * modified, so the contents are defined.  Used to avoid uploads of
-     * undefined data.
-     *
-     * If area is non-NULL, then dirty == TRUE means that the pixmap data at
-     * pPixmap->devPrivate.ptr (either fb_ptr or sys_ptr) has been changed
-     * compared to the copy in the other location.  This is used to avoid
-     * uploads/downloads of unmodified data.
+     * The damage record contains the areas of the pixmap's current location
+     * (framebuffer or system) that have been damaged compared to the other
+     * location.
      */
-    Bool	    dirty;
+    DamagePtr	    pDamage;
+    /**
+     * The valid region marks the valid bits of a drawable (at least, as it's
+     * derived from damage, which may be overreported).
+     */
+    RegionRec	    validReg;
 } ExaPixmapPrivRec, *ExaPixmapPrivPtr;
  
 typedef struct _ExaMigrationRec {
@@ -323,7 +324,7 @@ ExaCheckComposite (CARD8      op,
 		  CARD16     height);
 #endif
 
-/* exaoffscreen.c */
+/* exa_offscreen.c */
 void
 ExaOffscreenMarkUsed (PixmapPtr pPixmap);
 
@@ -347,7 +348,7 @@ void
 exaFinishAccess(DrawablePtr pDrawable, int index);
 
 void
-exaDrawableDirty(DrawablePtr pDrawable);
+exaDrawableDirty(DrawablePtr pDrawable, int x1, int y1, int x2, int y2);
 
 Bool
 exaDrawableIsOffscreen (DrawablePtr pDrawable);
diff --git a/exa/exa_render.c b/exa/exa_render.c
index 26b29ab..790a359 100644
--- a/exa/exa_render.c
+++ b/exa/exa_render.c
@@ -298,12 +298,13 @@ exaTryDriverSolidFill(PicturePtr	pSrc,
 	(*pExaScr->info->Solid) (pDstPix,
 				 pbox->x1 + dst_off_x, pbox->y1 + dst_off_y,
 				 pbox->x2 + dst_off_x, pbox->y2 + dst_off_y);
+	exaDrawableDirty (pDst->pDrawable,
+			  pbox->x1 + dst_off_x, pbox->y1 + dst_off_y,
+			  pbox->x2 + dst_off_x, pbox->y2 + dst_off_y);
 	pbox++;
     }
-
     (*pExaScr->info->DoneSolid) (pDstPix);
     exaMarkSync(pDst->pDrawable->pScreen);
-    exaDrawableDirty (pDst->pDrawable);
 
     REGION_UNINIT(pDst->pDrawable->pScreen, &region);
     return 1;
@@ -437,12 +438,13 @@ exaTryDriverComposite(CARD8		op,
 				     pbox->y1 + dst_off_y,
 				     pbox->x2 - pbox->x1,
 				     pbox->y2 - pbox->y1);
+	exaDrawableDirty (pDst->pDrawable,
+			  pbox->x1 + dst_off_x, pbox->y1 + dst_off_y,
+			  pbox->x2 + dst_off_x, pbox->y2 + dst_off_y);
 	pbox++;
     }
-
     (*pExaScr->info->DoneComposite) (pDstPix);
     exaMarkSync(pDst->pDrawable->pScreen);
-    exaDrawableDirty (pDst->pDrawable);
 
     REGION_UNINIT(pDst->pDrawable->pScreen, &region);
     return 1;
@@ -648,6 +650,8 @@ exaRasterizeTrapezoid (PicturePtr pPictu
 
     exaPrepareAccess(pPicture->pDrawable, EXA_PREPARE_DEST);
     fbRasterizeTrapezoid(pPicture, trap, x_off, y_off);
+    exaDrawableDirty(pPicture->pDrawable, 0, 0,
+		     pPicture->pDrawable->width, pPicture->pDrawable->height);
     exaFinishAccess(pPicture->pDrawable, EXA_PREPARE_DEST);
 }
 
@@ -669,6 +673,8 @@ exaAddTriangles (PicturePtr pPicture, IN
     exaPrepareAccess(pPicture->pDrawable, EXA_PREPARE_DEST);
     fbAddTriangles(pPicture, x_off, y_off, ntri, tris);
     exaFinishAccess(pPicture->pDrawable, EXA_PREPARE_DEST);
+    exaDrawableDirty(pPicture->pDrawable, 0, 0,
+		     pPicture->pDrawable->width, pPicture->pDrawable->height);
 }
 
 /**
@@ -958,7 +964,8 @@ exaGlyphs (CARD8	op,
 		exaCopyArea (&pScratchPixmap->drawable, &pPixmap->drawable, pGC,
 			     0, 0, glyph->info.width, glyph->info.height, 0, 0);
 	    } else {
-		exaDrawableDirty (&pPixmap->drawable);
+		exaDrawableDirty (&pPixmap->drawable, 0, 0,
+				  glyph->info.width, glyph->info.height);
 	    }
 
 	    if (maskFormat)
diff --git a/exa/exa_unaccel.c b/exa/exa_unaccel.c
index f9df6ad..a309115 100644
--- a/exa/exa_unaccel.c
+++ b/exa/exa_unaccel.c
@@ -23,6 +23,26 @@
 
 #include "exa_priv.h"
 
+#define TRIM_BOX(box, pGC) if (pGC->pCompositeClip) { \
+	    BoxPtr extents = &pGC->pCompositeClip->extents;\
+	    if(box.x1 < extents->x1) box.x1 = extents->x1; \
+	    if(box.x2 > extents->x2) box.x2 = extents->x2; \
+	    if(box.y1 < extents->y1) box.y1 = extents->y1; \
+	    if(box.y2 > extents->y2) box.y2 = extents->y2; \
+	    }
+
+#define TRANSLATE_BOX(box, pDrawable) { \
+	    box.x1 += pDrawable->x; \
+	    box.x2 += pDrawable->x; \
+	    box.y1 += pDrawable->y; \
+	    box.y2 += pDrawable->y; \
+	    }
+
+#define TRIM_AND_TRANSLATE_BOX(box, pDrawable, pGC) { \
+	    TRANSLATE_BOX(box, pDrawable); \
+	    TRIM_BOX(box, pGC); \
+	    }
+
 /*
  * These functions wrap the low-level fb rendering functions and
  * synchronize framebuffer/accelerated drawing by stalling until
@@ -200,11 +220,35 @@ ExaCheckPolyFillRect (DrawablePtr pDrawa
 		     int nrect, xRectangle *prect)
 {
     EXA_FALLBACK(("to %p (%c)\n", pDrawable, exaDrawableLocation(pDrawable)));
-    exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
-    exaPrepareAccessGC (pGC);
-    fbPolyFillRect (pDrawable, pGC, nrect, prect);
-    exaFinishAccessGC (pGC);
-    exaFinishAccess (pDrawable, EXA_PREPARE_DEST);
+
+    if (nrect) {
+	BoxRec box = { .x1 = max(prect->x,0),
+		       .x2 = min(prect->x + prect->width,pDrawable->width),
+		       .y1 = max(prect->y,0),
+		       .y2 = min(prect->y + prect->height,pDrawable->height) };
+
+	exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
+	exaPrepareAccessGC (pGC);
+	fbPolyFillRect (pDrawable, pGC, nrect, prect);
+	exaFinishAccessGC (pGC);
+	exaFinishAccess (pDrawable, EXA_PREPARE_DEST);
+
+	/* Only track bounding box of damage, as this path can degenerate to
+	 * zillions of damage boxes
+	 */
+	while (--nrect)
+	{
+	    prect++;
+	    box.x1 = min(box.x1, prect->x);
+	    box.x2 = max(box.x2, prect->x + prect->width);
+	    box.y1 = min(box.y1, prect->y);
+	    box.y2 = max(box.y2, prect->y + prect->height);
+	}
+
+	TRIM_AND_TRANSLATE_BOX(box, pDrawable, pGC);
+
+	exaDrawableDirty (pDrawable, box.x1, box.x2, box.y1, box.y2);
+    }
 }
 
 void
diff-tree 6060b612de6b41f872d034c6130770c1d189d0a3 (from f8535edec736cf19740bd41ed2adfe531f2c26ac)
Author: Eric Anholt <eric at anholt.net>
Date:   Mon Jun 12 20:12:31 2006 +0200

    Provide option to report damage after operation is complete.

diff --git a/miext/damage/damage.c b/miext/damage/damage.c
index ef7bca4..5b94028 100755
--- a/miext/damage/damage.c
+++ b/miext/damage/damage.c
@@ -113,6 +113,52 @@ getDrawableDamageRef (DrawablePtr pDrawa
     DamagePtr	*pPrev = (DamagePtr *) \
 	    &(pWindow->devPrivates[damageWinPrivateIndex].ptr)
 
+static void
+DamageReportDamage (DamagePtr pDamage, RegionPtr pDamageRegion)
+{
+    BoxRec tmpBox;
+    RegionRec tmpRegion;
+    Bool was_empty;
+
+    switch (pDamage->damageLevel) {
+    case DamageReportRawRegion:
+	(*pDamage->damageReport) (pDamage, pDamageRegion, pDamage->closure);
+	break;
+    case DamageReportDeltaRegion:
+	REGION_NULL (pScreen, &tmpRegion);
+	REGION_SUBTRACT (pScreen, &tmpRegion, pDamageRegion, &pDamage->damage);
+	if (REGION_NOTEMPTY (pScreen, &tmpRegion)) {
+	    REGION_UNION(pScreen, &pDamage->damage, &pDamage->damage,
+			 pDamageRegion);
+	    (*pDamage->damageReport) (pDamage, &tmpRegion, pDamage->closure);
+	}
+	REGION_UNINIT(pScreen, &tmpRegion);
+	break;
+    case DamageReportBoundingBox:
+	tmpBox = *REGION_EXTENTS (pScreen, &pDamage->damage);
+	REGION_UNION(pScreen, &pDamage->damage, &pDamage->damage,
+		     pDamageRegion);
+	if (!BOX_SAME (&tmpBox, REGION_EXTENTS (pScreen, &pDamage->damage))) {
+	    (*pDamage->damageReport) (pDamage, &pDamage->damage,
+				      pDamage->closure);
+	}
+	break;
+    case DamageReportNonEmpty:
+	was_empty = !REGION_NOTEMPTY(pScreen, &pDamage->damage);
+	REGION_UNION(pScreen, &pDamage->damage, &pDamage->damage,
+		     pDamageRegion);
+	if (was_empty && REGION_NOTEMPTY(pScreen, &pDamage->damage)) {
+	    (*pDamage->damageReport) (pDamage, &pDamage->damage,
+				      pDamage->closure);
+	}
+	break;
+    case DamageReportNone:
+	REGION_UNION(pScreen, &pDamage->damage, &pDamage->damage,
+		     pDamageRegion);
+	break;
+    }
+}
+
 #if DAMAGE_DEBUG_ENABLE
 static void
 _damageDamageRegion (DrawablePtr pDrawable, RegionPtr pRegion, Bool clip, int subWindowMode, const char *where)
@@ -130,9 +176,6 @@ damageDamageRegion (DrawablePtr pDrawabl
     RegionRec	    clippedRec;
     RegionPtr	    pDamageRegion;
     RegionRec	    pixClip;
-    Bool	    was_empty;
-    RegionRec	    tmpRegion;
-    BoxRec	    tmpBox;
     int		    draw_x, draw_y;
 #ifdef COMPOSITE
     int		    screen_x = 0, screen_y = 0;
@@ -256,41 +299,18 @@ damageDamageRegion (DrawablePtr pDrawabl
 	 */
 	if (draw_x || draw_y)
 	    REGION_TRANSLATE (pScreen, pDamageRegion, -draw_x, -draw_y);
-	
-	switch (pDamage->damageLevel) {
-	case DamageReportRawRegion:
-	    (*pDamage->damageReport) (pDamage, pDamageRegion, pDamage->closure);
-	    break;
-	case DamageReportDeltaRegion:
-	    REGION_NULL (pScreen, &tmpRegion);
-	    REGION_SUBTRACT (pScreen, &tmpRegion, pDamageRegion, &pDamage->damage);
-	    if (REGION_NOTEMPTY (pScreen, &tmpRegion))
-	    {
-		REGION_UNION(pScreen, &pDamage->damage,
-			     &pDamage->damage, pDamageRegion);
-		(*pDamage->damageReport) (pDamage, &tmpRegion, pDamage->closure);
-	    }
-	    REGION_UNINIT(pScreen, &tmpRegion);
-	    break;
-	case DamageReportBoundingBox:
-	    tmpBox = *REGION_EXTENTS (pScreen, &pDamage->damage);
-	    REGION_UNION(pScreen, &pDamage->damage,
-			 &pDamage->damage, pDamageRegion);
-	    if (!BOX_SAME (&tmpBox, REGION_EXTENTS (pScreen, &pDamage->damage)))
-		(*pDamage->damageReport) (pDamage, &pDamage->damage, pDamage->closure);
-	    break;
-	case DamageReportNonEmpty:
-	    was_empty = !REGION_NOTEMPTY(pScreen, &pDamage->damage);
-	    REGION_UNION(pScreen, &pDamage->damage, &pDamage->damage,
-			 pDamageRegion);
-	    if (was_empty && REGION_NOTEMPTY(pScreen, &pDamage->damage))
-		(*pDamage->damageReport) (pDamage, &pDamage->damage, pDamage->closure);
-	    break;
-	case DamageReportNone:
-	    REGION_UNION(pScreen, &pDamage->damage, &pDamage->damage,
-			 pDamageRegion);
-	    break;
+
+	/* If the damage rec has been flagged to report damage after the op has
+	 * completed, then union it into the delayed damage region, which will
+	 * be used for reporting after calling down, and skip the reporting 
+	 */
+	if (!pDamage->reportAfter) {
+	    DamageReportDamage (pDamage, pDamageRegion);
+	} else {
+	    REGION_UNION(pScreen, &pDamage->pendingDamage,
+			 &pDamage->pendingDamage, pDamageRegion);
 	}
+
 	/*
 	 * translate original region back
 	 */
@@ -305,6 +325,21 @@ damageDamageRegion (DrawablePtr pDrawabl
     REGION_UNINIT (pScreen, &clippedRec);
 }
 
+static void
+damageReportPostOp (DrawablePtr pDrawable)
+{
+    drawableDamage(pDrawable);
+
+    for (; pDamage != NULL; pDamage = pDamage->pNext)
+    {
+	if (pDamage->reportAfter) {
+	    DamageReportDamage (pDamage, &pDamage->pendingDamage);
+	    REGION_EMPTY (pScreen, &pDamage->pendingDamage);
+	}
+    }
+    
+}
+
 #if DAMAGE_DEBUG_ENABLE
 #define damageDamageBox(d,b,m) _damageDamageBox(d,b,m,__FUNCTION__)
 static void
@@ -550,6 +585,7 @@ damageComposite (CARD8      op,
 		       yDst,
 		       width,
 		       height);
+    damageReportPostOp (pDst->pDrawable);
     wrap (pScrPriv, ps, Composite, damageComposite);
 }
 
@@ -616,6 +652,7 @@ damageGlyphs (CARD8		op,
     }
     unwrap (pScrPriv, ps, Glyphs);
     (*ps->Glyphs) (op, pSrc, pDst, maskFormat, xSrc, ySrc, nlist, list, glyphs);
+    damageReportPostOp (pDst->pDrawable);
     wrap (pScrPriv, ps, Glyphs, damageGlyphs);
 }
 #endif
@@ -668,6 +705,7 @@ damageFillSpans(DrawablePtr pDrawable,
     
     (*pGC->ops->FillSpans)(pDrawable, pGC, npt, ppt, pwidth, fSorted);
 
+    damageReportPostOp (pDrawable);
     DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
 }
 
@@ -715,6 +753,7 @@ damageSetSpans(DrawablePtr  pDrawable,
 	   damageDamageBox (pDrawable, &box, pGC->subWindowMode);
     }
     (*pGC->ops->SetSpans)(pDrawable, pGC, pcharsrc, ppt, pwidth, npt, fSorted);
+    damageReportPostOp (pDrawable);
     DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
 }
 
@@ -746,6 +785,7 @@ damagePutImage(DrawablePtr  pDrawable,
     }
     (*pGC->ops->PutImage)(pDrawable, pGC, depth, x, y, w, h,
 		leftPad, format, pImage);
+    damageReportPostOp (pDrawable);
     DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
 }
 
@@ -789,6 +829,7 @@ damageCopyArea(DrawablePtr   pSrc,
 
     ret = (*pGC->ops->CopyArea)(pSrc, pDst,
             pGC, srcx, srcy, width, height, dstx, dsty);
+    damageReportPostOp (pDst);
     DAMAGE_GC_OP_EPILOGUE(pGC, pDst);
     return ret;
 }
@@ -834,6 +875,7 @@ damageCopyPlane(DrawablePtr	pSrc,
 
     ret = (*pGC->ops->CopyPlane)(pSrc, pDst,
 	       pGC, srcx, srcy, width, height, dstx, dsty, bitPlane);
+    damageReportPostOp (pDst);
     DAMAGE_GC_OP_EPILOGUE(pGC, pDst);
     return ret;
 }
@@ -875,6 +917,7 @@ damagePolyPoint(DrawablePtr pDrawable,
 	   damageDamageBox (pDrawable, &box, pGC->subWindowMode);
     }
     (*pGC->ops->PolyPoint)(pDrawable, pGC, mode, npt, ppt);
+    damageReportPostOp (pDrawable);
     DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
 }
 
@@ -948,6 +991,7 @@ damagePolylines(DrawablePtr pDrawable,
 	   damageDamageBox (pDrawable, &box, pGC->subWindowMode);
     }
     (*pGC->ops->Polylines)(pDrawable, pGC, mode, npt, ppt);
+    damageReportPostOp (pDrawable);
     DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
 }
 
@@ -1026,6 +1070,7 @@ damagePolySegment(DrawablePtr	pDrawable,
 	   damageDamageBox (pDrawable, &box, pGC->subWindowMode);
     }
     (*pGC->ops->PolySegment)(pDrawable, pGC, nSeg, pSeg);
+    damageReportPostOp (pDrawable);
     DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
 }
 
@@ -1087,6 +1132,7 @@ damagePolyRectangle(DrawablePtr  pDrawab
 	}
     }
     (*pGC->ops->PolyRectangle)(pDrawable, pGC, nRects, pRects);
+    damageReportPostOp (pDrawable);
     DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
 }
 
@@ -1139,6 +1185,7 @@ damagePolyArc(DrawablePtr   pDrawable,
 	   damageDamageBox (pDrawable, &box, pGC->subWindowMode);
     }
     (*pGC->ops->PolyArc)(pDrawable, pGC, nArcs, pArcs);
+    damageReportPostOp (pDrawable);
     DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
 }
 
@@ -1197,6 +1244,7 @@ damageFillPolygon(DrawablePtr	pDrawable,
     }
     
     (*pGC->ops->FillPolygon)(pDrawable, pGC, shape, mode, npt, ppt);
+    damageReportPostOp (pDrawable);
     DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
 }
 
@@ -1235,6 +1283,7 @@ damagePolyFillRect(DrawablePtr	pDrawable
 	    damageDamageBox (pDrawable, &box, pGC->subWindowMode);
     }
     (*pGC->ops->PolyFillRect)(pDrawable, pGC, nRects, pRects);
+    damageReportPostOp (pDrawable);
     DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
 }
 
@@ -1276,6 +1325,7 @@ damagePolyFillArc(DrawablePtr	pDrawable,
 	   damageDamageBox (pDrawable, &box, pGC->subWindowMode);
     }
     (*pGC->ops->PolyFillArc)(pDrawable, pGC, nArcs, pArcs);
+    damageReportPostOp (pDrawable);
     DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
 }
 
@@ -1386,6 +1436,7 @@ damagePolyText8(DrawablePtr pDrawable,
 		    Linear8Bit, TT_POLY8);
     else
 	x = (*pGC->ops->PolyText8)(pDrawable, pGC, x, y, count, chars);
+    damageReportPostOp (pDrawable);
     DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
     return x;
 }
@@ -1406,6 +1457,7 @@ damagePolyText16(DrawablePtr	pDrawable,
 		    TT_POLY16);
     else
 	x = (*pGC->ops->PolyText16)(pDrawable, pGC, x, y, count, chars);
+    damageReportPostOp (pDrawable);
     DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
     return x;
 }
@@ -1425,6 +1477,7 @@ damageImageText8(DrawablePtr	pDrawable,
 		    Linear8Bit, TT_IMAGE8);
     else
 	(*pGC->ops->ImageText8)(pDrawable, pGC, x, y, count, chars);
+    damageReportPostOp (pDrawable);
     DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
 }
 
@@ -1444,6 +1497,7 @@ damageImageText16(DrawablePtr	pDrawable,
 		    TT_IMAGE16);
     else
 	(*pGC->ops->ImageText16)(pDrawable, pGC, x, y, count, chars);
+    damageReportPostOp (pDrawable);
     DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
 }
 
@@ -1462,6 +1516,7 @@ damageImageGlyphBlt(DrawablePtr	    pDra
 		       nglyph, ppci, TRUE, pGC->subWindowMode);
     (*pGC->ops->ImageGlyphBlt)(pDrawable, pGC, x, y, nglyph,
 					ppci, pglyphBase);
+    damageReportPostOp (pDrawable);
     DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
 }
 
@@ -1479,6 +1534,7 @@ damagePolyGlyphBlt(DrawablePtr	pDrawable
 		       nglyph, ppci, FALSE, pGC->subWindowMode);
     (*pGC->ops->PolyGlyphBlt)(pDrawable, pGC, x, y, nglyph,
 				ppci, pglyphBase);
+    damageReportPostOp (pDrawable);
     DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
 }
 
@@ -1512,6 +1568,7 @@ damagePushPixels(GCPtr		pGC,
 	   damageDamageBox (pDrawable, &box, pGC->subWindowMode);
     }
     (*pGC->ops->PushPixels)(pGC, pBitMap, pDrawable, dx, dy, xOrg, yOrg);
+    damageReportPostOp (pDrawable);
     DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
 }
 
@@ -1591,10 +1648,12 @@ damagePaintWindow(WindowPtr pWindow,
     if(what == PW_BACKGROUND) {
 	unwrap (pScrPriv, pScreen, PaintWindowBackground);
 	(*pScreen->PaintWindowBackground) (pWindow, prgn, what);
+	damageReportPostOp (&pWindow->drawable);
 	wrap (pScrPriv, pScreen, PaintWindowBackground, damagePaintWindow);
     } else {
 	unwrap (pScrPriv, pScreen, PaintWindowBorder);
 	(*pScreen->PaintWindowBorder) (pWindow, prgn, what);
+	damageReportPostOp (&pWindow->drawable);
 	wrap (pScrPriv, pScreen, PaintWindowBorder, damagePaintWindow);
     }
 }
@@ -1623,6 +1682,7 @@ damageCopyWindow(WindowPtr	pWindow,
     }
     unwrap (pScrPriv, pScreen, CopyWindow);
     (*pScreen->CopyWindow) (pWindow, ptOldOrg, prgnSrc);
+    damageReportPostOp (&pWindow->drawable);
     wrap (pScrPriv, pScreen, CopyWindow, damageCopyWindow);
 }
 
@@ -1654,6 +1714,7 @@ damageRestoreAreas (PixmapPtr	pPixmap,
     unwrap (pScrPriv, pScreen, BackingStoreFuncs.RestoreAreas);
     (*pScreen->BackingStoreFuncs.RestoreAreas) (pPixmap, prgn,
 						xorg, yorg, pWindow);
+    damageReportPostOp (&pWindow->drawable);
     wrap (pScrPriv, pScreen, BackingStoreFuncs.RestoreAreas,
 			     damageRestoreAreas);
 }
@@ -1822,12 +1883,14 @@ DamageCreate (DamageReportFunc  damageRe
     pDamage->pNext = 0;
     pDamage->pNextWin = 0;
     REGION_NULL(pScreen, &pDamage->damage);
+    REGION_NULL(pScreen, &pDamage->pendingDamage);
     
     pDamage->damageLevel = damageLevel;
     pDamage->isInternal = isInternal;
     pDamage->closure = closure;
     pDamage->isWindow = FALSE;
     pDamage->pDrawable = 0;
+    pDamage->reportAfter = FALSE;
 
     pDamage->damageReport = damageReport;
     pDamage->damageDestroy = damageDestroy;
@@ -1911,6 +1974,7 @@ DamageDestroy (DamagePtr    pDamage)
     if (pDamage->damageDestroy)
 	(*pDamage->damageDestroy) (pDamage, pDamage->closure);
     REGION_UNINIT (pDamage->pDrawable->pScreen, &pDamage->damage);
+    REGION_UNINIT (pDamage->pDrawable->pScreen, &pDamage->pendingDamage);
     xfree (pDamage);
 }
 
@@ -1964,4 +2028,16 @@ DamageDamageRegion (DrawablePtr	pDrawabl
 		    RegionPtr	pRegion)
 {
     damageDamageRegion (pDrawable, pRegion, FALSE, -1);
+
+    /* Go back and report this damage for DamagePtrs with reportAfter set, since
+     * this call isn't part of an in-progress drawing op in the call chain and
+     * the DDX probably just wants to know about it right away.
+     */
+    damageReportPostOp (pDrawable);
+}
+
+void
+DamageSetReportAfterOp (DamagePtr pDamage, Bool reportAfter)
+{
+    pDamage->reportAfter = reportAfter;
 }
diff --git a/miext/damage/damage.h b/miext/damage/damage.h
index c760f6b..36a0654 100755
--- a/miext/damage/damage.h
+++ b/miext/damage/damage.h
@@ -81,4 +81,7 @@ void
 DamageDamageRegion (DrawablePtr	    pDrawable,
 		    const RegionPtr pRegion);
 
+void
+DamageSetReportAfterOp (DamagePtr pDamage, Bool reportAfter);
+
 #endif /* _DAMAGE_H_ */
diff --git a/miext/damage/damagestr.h b/miext/damage/damagestr.h
index 0fe9e0a..93e213f 100755
--- a/miext/damage/damagestr.h
+++ b/miext/damage/damagestr.h
@@ -48,6 +48,9 @@ typedef struct _damage {
     
     DamageReportFunc	damageReport;
     DamageDestroyFunc	damageDestroy;
+
+    Bool		reportAfter;
+    RegionRec		pendingDamage;
 } DamageRec;
 
 typedef struct _damageScrPriv {



More information about the xorg-commit mailing list