Prereq: 2.1 diff -c mit/server/ddx/x386/x386Version.h:2.64 mit/server/ddx/x386/x386Version.h:2.70 *** mit/server/ddx/x386/x386Version.h:2.64 Wed May 4 22:53:22 1994 --- mit/server/ddx/x386/x386Version.h Wed May 4 22:53:22 1994 *************** *** 1,3 **** ! /* $XFree86: mit/server/ddx/x386/x386Version.h,v 2.64 1994/03/08 04:46:31 dawes Exp $ */ ! #define X386_VERSION " 2.1 " --- 1,3 ---- ! /* $XFree86: mit/server/ddx/x386/x386Version.h,v 2.70 1994/05/02 11:42:43 dawes Exp $ */ ! #define X386_VERSION " 2.1.1 " diff -c mit/server/ddx/x386/CHANGELOG:2.141 mit/server/ddx/x386/CHANGELOG:2.153 *** mit/server/ddx/x386/CHANGELOG:2.141 Wed May 4 22:53:12 1994 --- mit/server/ddx/x386/CHANGELOG Wed May 4 22:53:12 1994 *************** *** 1,3 **** --- 1,55 ---- + XFree86 2.1.1 (4 May 1994) + 36. Fix server crash on reset problem in Mach32 and S3 servers + 35. Fix typos in apollo driver + 34. Fix for Imake config problem on ISC 4.0 + 33. ET3000 memory probe fix for SuperProbe + 32. Documentation updates + 31. Some updates for NetBSD-current + + XFree86 2.1.0B (26 April 1994) + 30. Disable accelerated text blit for Cirrus 543x + 29. Reorder some of the Bt485 code, and get clock doubling working again + without pixmux + 28. Disable the PIXMUX_SWITCH_HACK stuff -- it doesn't seem needed any more + 27. Fix image shift problem for pixmux on #9 cards (Robin Cutshaw) + 26. Fix initialisation bug for Cirrus 62{2,3}5 cards (Harm Hanemaayer) + 25. Remove 8514 monitor ID check in Mach8 server + 24. Updates to the NetBSD README (Matthieu Herrb) + 23. Hey Rocky, watch me unbreak the Compaq driver... This time for sure... + + XFree86 2.1.0Ab (16 April 1994) + 22. Rewrite of ATI SVGA driver (Marc La France) + 21. Add "no_bitblt" option for the cirrus driver + 20. Recognise the 5429 in the cirrus driver + 19. Disable interrupts while programming the ICD2061A + 18. sync-on-green support for the TI3020 + 17. Move S3 clock doubler setting from icd2061ClockSelect() to s3Init() + 16. Fix dac_8_bit for Bt485 cursor, and fix Bt cursor blanking problem + 15. SuperProbe updates + + XFree86 2.1.0Aa (10 April 1994) + 14. BDM2 apollo driver (Hamish Coleman) + 13. S3 support for switching between pixmux and non-pixmux modes + (Amancio Hasty) + 12. S3 pixmux support for STB Pegasus, and cleanup of pixmux and icd code + (Leonard Zubkoff) + 11. Change "fifo_conservative" setting for CLGD543x + 10. Updates for NetBSD-current, including bumping shared lib revs + + XFree86 2.1.0A (7 April 1994) + 9. Don't reserve video memory for HW cursor on S3 when using a RAMDAC cursor + 8. Allow the "8clocks" option to force 9 clocks instead of 17 on WD90C3{0,1} + cards + + XFree86 2.1.0a (6 April 1994) + 7. Fix some DEALLOCATE_LOCAL problems in accel servers + 6. Support for Bt485 on #9 cards (Robin Cutshaw) + 5. Fixes for Cirrus driver (Harm Hanemaayer) + 4. Fix for text restore problem on some S3 cards (Jon Tombs) + 3. Workaround for Mach32 detection problem on some platforms + 2. Fix incorrect usage of $(DESTDIR) in some lnuxLib.rules and x386.cf rules + 1. Code to detect 928-P (Harald Koenig) + XFree86 2.1 (11 March 1994) 151. OS README updates (affect individual OSs only) 150. Fix AltGr handling for Linux (affects Linux only) diff -c mit/server/ddx/x386/INSTALL:2.7 mit/server/ddx/x386/INSTALL:2.8 *** mit/server/ddx/x386/INSTALL:2.7 Wed May 4 22:53:13 1994 --- mit/server/ddx/x386/INSTALL Wed May 4 22:53:13 1994 *************** *** 1,6 **** ! Installation Guide for XFree86 2.1 ! ---------------------------------- Contents -------- --- 1,6 ---- ! Installation Guide for XFree86 2.1.1 ! ------------------------------------ Contents -------- *************** *** 17,23 **** 0. We highly recommend using GCC-2 to build XFree86. Do not use versions 2.3.2 or 2.4.x versions prior to 2.4.5 due to bugs that cause either ! build or execution failures. Most of the XFree86 2.0 binary kits are built with GCC 2.4.5. Use of GCC's -m486 option will yield approximately 5% better performance on a 486, with no degradation (other than larger binaries) on a 386. (gcc-2 is available from prep.ai.mit.edu and other --- 17,23 ---- 0. We highly recommend using GCC-2 to build XFree86. Do not use versions 2.3.2 or 2.4.x versions prior to 2.4.5 due to bugs that cause either ! build or execution failures. Most of the XFree86 2.1.1 binary kits are built with GCC 2.4.5. Use of GCC's -m486 option will yield approximately 5% better performance on a 486, with no degradation (other than larger binaries) on a 386. (gcc-2 is available from prep.ai.mit.edu and other *************** *** 67,78 **** mit/lib/Xt mit/lib/nls mit/man ! - XFree86-2.1.diff.gz, XFree86-2.1.tar.gz, and optionally ! Type1.tar.gz, Type1.patch1.gz, Type1.patch2.gz if you wish to ! built the Adobe Type-1 font renderer. ! - If you are upgrading from XFree86 version 2.0, you will only need ! 2.0-2.1.diff.gz. 2. If you are starting from the stock MIT PL26 distribution, go to the directory above your 'mit' directory, and run: --- 67,78 ---- mit/lib/Xt mit/lib/nls mit/man ! - XFree86-2.1.diff.gz, XFree86-2.1.tar.gz, 2.1-2.1.1.diff.gz and ! optionally Type1.tar.gz, Type1.patch1.gz, Type1.patch2.gz if you ! wish to built the Adobe Type-1 font renderer. ! - If you are upgrading from XFree86 version 2.1, you will only need ! 2.1-2.1.1.diff.gz. 2. If you are starting from the stock MIT PL26 distribution, go to the directory above your 'mit' directory, and run: *************** *** 84,92 **** gzip -d < XFree86-2.1.tar.gz | tar vxf - This tar file contains the XFree86 2.1 version of mit/server/ddx/x386. ! Then apply the patch: gzip -d < XFree86-2.1.diff.gz | patch -p If you are installing in an unmodified tree there shouldn't be any problems. Check for any patch rejections and resolve them. If you've --- 84,93 ---- gzip -d < XFree86-2.1.tar.gz | tar vxf - This tar file contains the XFree86 2.1 version of mit/server/ddx/x386. ! Then apply the patches: gzip -d < XFree86-2.1.diff.gz | patch -p + gzip -d < 2.1-2.1.1.diff.gz | patch -p -E If you are installing in an unmodified tree there shouldn't be any problems. Check for any patch rejections and resolve them. If you've *************** *** 98,107 **** If you are patching a tree that you've previously used, make sure you run 'make clean' from the 'mit' directory before applying the diffs. ! 3. If you are upgrading your source tree from XFree86 version 2.0, go to the directory above your 'mit' directory, and run: ! gzip -d < 2.0-2.1.diff.gz | patch -p -E If your version of 'patch' doesn't support the '-E' flag, get a newer version before patching. The use of the '-E' flag is important because --- 99,108 ---- If you are patching a tree that you've previously used, make sure you run 'make clean' from the 'mit' directory before applying the diffs. ! 3. If you are upgrading your source tree from XFree86 version 2.1, go to the directory above your 'mit' directory, and run: ! gzip -d < 2.1-2.1.1.diff.gz | patch -p -E If your version of 'patch' doesn't support the '-E' flag, get a newer version before patching. The use of the '-E' flag is important because *************** *** 111,117 **** If you are installing in an unmodified tree there shouldn't be any problems. Check for any patch rejections and resolve them. If you've modified some files (e.g. x386.cf, site.def) you should rename them, and ! restore the 2.0 versions before patching. If you are patching a tree that you've previously used, make sure you run 'make clean' from the 'mit' directory before applying the diffs. --- 112,118 ---- If you are installing in an unmodified tree there shouldn't be any problems. Check for any patch rejections and resolve them. If you've modified some files (e.g. x386.cf, site.def) you should rename them, and ! restore the 2.1 versions before patching. If you are patching a tree that you've previously used, make sure you run 'make clean' from the 'mit' directory before applying the diffs. *************** *** 406,409 **** ! $XFree86: mit/server/ddx/x386/INSTALL,v 2.7 1994/03/05 08:22:22 dawes Exp $ --- 407,410 ---- ! $XFree86: mit/server/ddx/x386/INSTALL,v 2.8 1994/05/02 11:42:23 dawes Exp $ diff -c mit/server/ddx/x386/READ.FreeBSD:2.10 mit/server/ddx/x386/READ.FreeBSD:2.11 *** mit/server/ddx/x386/READ.FreeBSD:2.10 Wed May 4 22:53:14 1994 --- mit/server/ddx/x386/READ.FreeBSD Wed May 4 22:53:14 1994 *************** *** 1,5 **** ! README for XFree86 2.1 on FreeBSD 1.1 ! ------------------------------------- Contents -------- --- 1,5 ---- ! README for XFree86 2.1.1 on FreeBSD 1.1 ! --------------------------------------- Contents -------- *************** *** 30,161 **** Binaries for XFree86 on FreeBSD will be available from: ! XFree86.cdrom.com:/pub/XFree86/FreeBSD/XFree86-2.1 - On US ftp sites note 00README-Legal-Rules-Regs or - README.export-control which state that ftp users outside the U.S. - should not copy XFree86-2.1-xdm-des.tar.gz from sites within the U.S. - because it employs DES encryption. - 2 - Bug Reports for This Document --------------------------------- ! Send email to Rich-Murphey@Rice.edu or XFree86@physics.su.oz.au if you have comments or suggestions about this file and we'll revise it. 3 - Installing the Binaries --------------------------- ! ! The binary distribution is composed of a number of tar archives ! which are the executables, servers, fonts, libraries, include files, ! man pages, config files, and server link kit. The full distribution ! takes 23Mb. ! ! At a minimum you need to unpack the required bin, fonts, doc, lib, ! config archives and a server that matches your vga card. But if you ! are unsure you can can safely just install all of them. ! ! REQUIRED: ! ! bin - all the executable X client applications and shared libs ! fonts - the misc and 75 dpi fonts (required) ! doc - READMEs, install scripts, and XFree86 specific man pages ! lib - data files needed at runtime (required) ! config - customizable xinit, xdm and fs runtime configuration files ! ! CHOOSE ONE (or more): ! ! 8514 - server for IBM 8514/A boards ! Mach32 - server for ATI Mach32 graphic accelerator boards ! Mach8 - server for ATI Mach8 graphic accelerator boards ! Mono - monochrome server for VGA, Super-VGA, Hercules, and others ! S3 - server for S3 based boards ! SVGA - 8-bit pseudocolor server for Super-VGA cards ! VGA16 - 4-bit pseudocolor server for VGA and Super-VGA cards OPTIONAL: ! man - man pages except XFree86 specific ones in etc archive ! fonts-100dpi - optional 100dpi fonts ! fonts-scaled - optional Speedo and Type1 fonts ! prog - lib*.a and *.h files needed only for compiling ! xdm-des - xdm executable with des encryption ! xdm-nodes - xdm executable with no encryption ! linkkit - optional X server reconfiguration kit ! fontserver - the font server and it's man page ! pex - pex clients, libraries, header files and data. ! - First find a partition that has enough space: 10Mb for the required - for the run-time binaries only, 23Mb for the complete binaries. ! For a FULL INSTALL, unpack everything (assuming you are using csh): ! foreach i (XFree86-2.1-*.tar.gz) tar -xzf $i end ! For a MINIMAL INSTALL, unpack the required files and a server (e.g. SVGA): ! foreach i (XFree86-2.1-{bin,fonts,doc,lib,config}.tar.gz) tar -xzf $i end ! tar -xzf XFree86-2.1-S3.tar.gz ! ! After unpacking the archives, run the installation script, x386install ! from the directory where you just unpacked everything. It creates ! links so that the distribution appears to be in /usr/X386, and adds ! /usr/X386/bin to the default path for sh in /etc/profile and for csh ! in /etc/csh.login. - ./X386/lib/X11/etc/x386install ! Next, create a symbolic link for the server that matches your vga ! card. For example, if you have an ET4000 based SVGA card, then you ! want a symbolic link for the SVGA server: ! cd /usr/X386/bin; rm X; ln -s XF86_SVGA X ! Also make sure you add /usr/X386/bin to your shell's `path' variable. If X was already installed and you have have customized your xinit or ! xdm runtime configuration scripts, omit the config archive or unpack ! it elsewhere and merge in your customizations. The fonts-scaled and fonts-100dpi archives are optional and can be omitted if you are short ! on space. The optional linkkit archive which allows you to ! reconfigure and link a server. The optional the prog archive is ! needed only for writing or compiling X applications. The optional pex ! archive contains pex clients and libraries for writing pex ! applications. NOTE: Do not uncompress the font files without subsequently rerunning mkfontdir in the corresponding font directory; otherwise your server will abort with the message "could not open default font 'fixed'". 4 - Installing Xdm, the display manager --------------------------------------- ! Export restrictions prevent us from providing support for DES ! encryption outside the US. If you have not installed FreeBSD's ! optional securedist/des, then passwords in /etc/passwd.master are ! unencrypted and you should install the version of xdm without DES ! encryption: ! ! tar xzf XFree86-2.1-xdm-nodes.tar.gz ! cd /usr/X386/bin; ln -s xdm-nodes xdm ! ! The xdm-nodes binary uses the *BSD dummy crypt routine that prints the ! message 'Crypt not present in system' in the xdm-errors file each time ! a user logs in. You can ignore this. It just means ! /etc/passwd.master is unencrypted. If you install xdm-des by mistake ! xdm will not accept any passwords. ! ! If you have installed the optional securedist/des package on your ! system then you are using DES encryption on passwords and you should ! install xdm-des: ! ! tar xzf XFree86-2.1-xdm-des.tar.gz ! cd /usr/X386/bin; ln -s xdm-des xdm ! ! To start the display manager, log in as root on the console and type `xdm -nodaemon'. You can start xdm automatically on bootup by disabling the console --- 30,171 ---- Binaries for XFree86 on FreeBSD will be available from: ! XFree86.cdrom.com:/pub/XFree86/FreeBSD/XFree86-2.1.1 2 - Bug Reports for This Document --------------------------------- ! Send email to Rich-Murphey@Rice.edu or XFree86@XFree86.org if you have comments or suggestions about this file and we'll revise it. 3 - Installing the Binaries --------------------------- ! At a minimum you need to unpack the REQUIRED XFree86-2.1.1-*.tar.gz ! archives plus at least one SERVER that matches your vga card. It's safe ! to install all of them if you are unsure which to pick. ! ! REQUIRED (6.4Mb): ! ! bin - all the executable X client applications and shared libs ! fonts - the misc and 75 dpi fonts ! lib - data files needed at runtime ! xinit-config - customizable xinit runtime configuration file ! ! CHOOSE ONE SERVER (~1.1Mb): ! ! 8514 - server for IBM 8514/A boards ! Mach32 - server for ATI Mach32 graphic accelerator boards ! Mach8 - server for ATI Mach8 graphic accelerator boards ! Mono - monochrome server for VGA, Super-VGA, Hercules, and others ! S3 - server for S3 based boards ! SVGA - 8-bit pseudocolor server for Super-VGA cards ! VGA16 - 4-bit pseudocolor server for VGA and Super-VGA cards OPTIONAL: ! doc - (.5Mb) READMEs, install scripts, and XFree86 specific man pages ! man - (2.6Mb) man pages except XFree86 specific ones in etc archive ! fonts-100dpi - (1.9Mb) 100dpi fonts ! fonts-scaled - (1.3Mb) Speedo and Type1 fonts ! prog - (2.4Mb) config, lib*.a and *.h files needed only for compiling ! linkkit - (4.6Mb) X server reconfiguration kit ! fontserver - (.26Mb) the font server and it's man page ! pex - (3Mb) pex clients, libraries, header files and fonts. ! ! ! First make sure your /usr partition has enough space: 6.5Mb for the ! required run-time binaries only, 23Mb for the full distribution. ! ! You must be logged in as root to unpack the archives and use a `umask' ! value of 022. Typing `umask 022' sets it. Caution: If you do not ! extract the files as user `root' with the correct umask you may not be ! able to run XFree86 2.0. The X server needs special permissions that ! are only granted to the root user. ! Full Install: ! ------------- ! Unpack everything and and create a symbolic link 'X' that points to ! the server that matches your video card. See the XF86_* man pages for ! hardware details. For example, if you have an ET4000 based SVGA card ! (assuming you are using csh): ! cd /usr ! foreach i (XFree86-2.1.1-*.tar.gz) tar -xzf $i end + cd /usr/X386/bin; rm X; ln -s XF86_SVGA X ! Minimal Install: ! ---------------- ! Unpack only the required and server (e.g. SVGA) archives and create a ! symbolic link 'X' that points to the server: ! cd /usr ! foreach i (XFree86-2.1.1-{bin,fonts,lib,xinit-config}.tar.gz) tar -xzf $i end ! tar -xzf XFree86-2.1.1-SVGA.tar.gz ! cd /usr/X386/bin; rm X; ln -s XF86_SVGA X ! After either Full or Minimal Install above: ! ------------------------------------------- ! Add /usr/X386/bin to the default path for sh in /etc/profile and for ! csh in /etc/csh.login if they are not already there: ! ! echo 'set path = ($path /usr/X386/bin)' >>/etc/csh.login ! echo 'PATH=$PATH:/usr/X386/bin' >>/etc/profile ! Or make sure all who use X put /usr/X386/bin in their shell's `path' ! variable. ! Either rerun 'ldconfig ... /usr/X386/lib' or reboot so that ld.so can ! find the shared libraries. If X was already installed and you have have customized your xinit or ! xdm runtime configuration scripts, omit the *-config archives or unpack ! them elsewhere and merge in your customizations. The fonts-scaled and fonts-100dpi archives are optional and can be omitted if you are short ! on space. The optional linkkit archive allows you to reconfigure and ! customize a X server binary. The optional the prog archive is needed ! only for writing or compiling X applications. The optional pex archive ! contains pex clients and libraries for writing 3D graphics applications. NOTE: Do not uncompress the font files without subsequently rerunning mkfontdir in the corresponding font directory; otherwise your server will abort with the message "could not open default font 'fixed'". + If you experience a delay in virtual console switching, there is a + workaround. The delay is a result of sleeping during DTR drop on the + mouse port. A temporary solution is to use "comcontrol dtrwait 0" on + mouse port before you start X: + + % comcontrol /dev/tty00 dtrwait 0 + + If you are using syscons, the server requires a free VT not + associateed with a getty. Check how many virtual consoles you have: + + % dmesg|grep sc + sc0 at 0x60-0x6f irq 1 on motherboard + sc0: VGA color <8 virtual consoles> + + Then check /etc/ttys to make sure there is at least one ttyv? devices + which doesn't have a getty enabled. The default is to have 4 devices + configured to run gettys: + + % grep ttyv /etc/ttys + ttyv0 "/usr/libexec/getty Pc" cons25 on secure + ttyv1 "/usr/libexec/getty Pc" cons25 on secure + ttyv2 "/usr/libexec/getty Pc" cons25 on secure + ttyv3 "/usr/libexec/getty Pc" cons25 on secure + + If your kernel has least 5 VTs and only 4 gettys, this is fine. If + not, either disable a getty in /etc/ttys by changing 'on' to 'off' or + build another kernel with more VTs as described below. + 4 - Installing Xdm, the display manager --------------------------------------- ! To start the display manager, log in as root on the console and type `xdm -nodaemon'. You can start xdm automatically on bootup by disabling the console *************** *** 177,217 **** echo -n ' xdm'; (sleep 5; /usr/X386/bin/xdm)& fi - Check /etc/ttys to make sure there are some ttyv? devices which don't - have gettys enabled. The default is to have 4 devices configured to - run gettys. If your kernel was configured with more than 4 VTs this - is fine. - 5 - Configuring X for Your Hardware ----------------------------------- ! You *must* create /usr/X386/lib/X11/Xconfig to suit your hardware. ! See README.Config for step-by-step instructions for setting it up. ! The Xconfig file tells the X server what kind of monitor, adapter and ! mouse you have. In addition to README.Config, the server manual pages ! (XF86_Accel, XF86_Mono, XF86_SVGA, and XF86_VGA16) describe the ! options specific to each type of board. ! ! Read README.Config, and look in /usr/X386/lib/X11/etc/modeDB.txt and ! /usr/X386/lib/X11/etc/AccelCards to find Clocks and ModeDB entries to ! your specific monitor and graphics card. If you can find them there, ! grab the Clocks and ModeDB lines and put them in your Xconfig. If ! not, read /usr/X386/lib/X11/etc/VideoModes.doc for instructions on how ! to create the video timing values given your vga card and monitor ! specs. The manual for your monitor and adapter should have these ! values. The tuner program (on FreeBSD.cdrom.com ! /pub/386BSD/0.1-ports/XFree86-2.0) can calculate a rough guess about a ! ModeDB line given the dot clock rate and horizontal frequency of your ! monitor. ! ! The X server (except the 8514 server) will print out the Clocks values ! for your card if you leave them our of your Xconfig file when you run: ! ! X -probeonly >& x.out ! ! You can take these values and edit them to put them in your Xconfig ! file; although you MUST include all the clock values, AND leave them ! in the same order. If your mouse does not work try using kermit or tip to connect to the mouse serial port and verify that it does indeed generate characters. --- 187,207 ---- echo -n ' xdm'; (sleep 5; /usr/X386/bin/xdm)& fi 5 - Configuring X for Your Hardware ----------------------------------- ! The Xconfig file tells the X server what kind of monitor, video card ! and mouse you have. You *must* create it to tell the xerver what ! specific hardware you have. ! ! Print a copy of ConfigXF86.txt or ConfigXF86.PS and follow the ! step-by-step instructions on running ConfigXF86. It will ask you: ! ! Your mouse type, /dev entry and baud rate. ! The brand of your video card ! The brand of your monitor ! If you plan to fine tune the image size you'll also need the specs for ! sync frequencies from the monitor's manual. If your mouse does not work try using kermit or tip to connect to the mouse serial port and verify that it does indeed generate characters. *************** *** 265,271 **** options "NCONS=8" #8 virtual consoles to your kernel config file (the default without a line like this is 12). ! It recommended that you have more then 4 when using X. The codrv console driver is not bundled with FreeBSD. It is available from ftp.uni-duisburg.de in /pub/unix/386bsd-0.1/unofficial/codrv and --- 255,261 ---- options "NCONS=8" #8 virtual consoles to your kernel config file (the default without a line like this is 12). ! You must have more VTs than gettys as described in the end of section 3. The codrv console driver is not bundled with FreeBSD. It is available from ftp.uni-duisburg.de in /pub/unix/386bsd-0.1/unofficial/codrv and *************** *** 346,362 **** __FreeBSD__ for FreeBSD, __NetBSD__ for NetBSD, __386BSD__ for 386BSD, and __bsdi__ for BSD/386. - Many thanks to ! - Pace Willison for providing the initial port to 386BSD. ! - Amancio Hasty for fixing cursor restoration, mouse bugs and many others. ! - Christoph Robitschko for fixing com.c and thus select(). ! - Nate Williams for the patchkit support for X. ! - Rod Grimes and Jack Velte of Walnut Creek Cdrom for use ! of their machines in preparing the FreeBSD binary release. Rich Murphey David Dawes ! $XFree86: mit/server/ddx/x386/READ.FreeBSD,v 2.10 1994/03/11 03:08:35 dawes Exp $ --- 336,351 ---- __FreeBSD__ for FreeBSD, __NetBSD__ for NetBSD, __386BSD__ for 386BSD, and __bsdi__ for BSD/386. Many thanks to ! - Pace Willison for providing initial *BSD support. ! - Amancio Hasty for 386BSD kernel and S3 chipset support. ! - David Greenman, Nate Williams, Jordan Hubbard for FreeBSD kerenel support. ! - Rod Grimes and Jack Velte for the use of Walnut Creek Cdrom's ! resources in preparing the FreeBSD binary release. ! - Simon Cooper and Dirk Hohndel for notes from the Linux README. Rich Murphey David Dawes ! $XFree86: mit/server/ddx/x386/READ.FreeBSD,v 2.11 1994/05/02 11:42:25 dawes Exp $ diff -c mit/server/ddx/x386/README:2.13 mit/server/ddx/x386/README:2.20 *** mit/server/ddx/x386/README:2.13 Wed May 4 22:53:15 1994 --- mit/server/ddx/x386/README Wed May 4 22:53:15 1994 *************** *** 1,20 **** ! README for XFree86[TM] 2.1 ! -------------------------- Contents -------- 1) What is XFree86? ! 2) What's new in XFree86 2.1? ! 3) XFree86 features ! 4) Systems XFree86 has been tested on ! 5) Supported video-card chip-sets ! 6) Where to get more information ! 7) Bugs known fixed in XFree86 vs stock X11R5 ! 8) Known bugs in XFree86 ! 9) Credits ! 10) The XFree86 Project, Inc. ! 11) Contact information ! 12) Source and binary archive sites 1 - What is XFree86? -------------------- --- 1,21 ---- ! README for XFree86[TM] 2.1.1 ! ---------------------------- Contents -------- 1) What is XFree86? ! 2) What's new in XFree86 2.1.1? ! 3) What's new in XFree86 2.1? ! 4) XFree86 features ! 5) Systems XFree86 has been tested on ! 6) Supported video-card chip-sets ! 7) Where to get more information ! 8) Bugs known fixed in XFree86 vs stock X11R5 ! 9) Known bugs in XFree86 ! 10) Credits ! 11) The XFree86 Project, Inc. ! 12) Contact information ! 13) Source and binary archive sites 1 - What is XFree86? -------------------- *************** *** 42,48 **** complete in the near future. See the section on The XFree86 Project, Inc, later in this document for more information. ! 2 - What's new in XFree86 2.1? ------------------------------ XFree86 2.1 is not a huge release compared to prior XFree86 releases. There are a number of reasons for this, including the fact that two of the Core --- 43,83 ---- complete in the near future. See the section on The XFree86 Project, Inc, later in this document for more information. ! 2 - What's new in XFree86 2.1.1? ! -------------------------------- ! XFree86 2.1.1 is a patch release providing bug fixes and some new ! functionality for some of the servers. It is intended that this be the ! final XFree86 release based on X11R5. ! ! Note that XFree86 3.0 is part of the core X11R6 release. That version ! should be regarded as beta quality, and does not work on many of the ! platforms supported by 2.1.1. We plan to have XFree86 3.1 included ! in the X11R6 contrib release, and the missing functionality and OS ! support will be included in that version. ! ! The following items have been added since XFree86 2.1 was released in March ! 1994: ! ! 1) Support for pixel multiplexing has been added for Number Nine boards ! using the Bt485 RAMDAC, and for the STB Pegasus which uses the same ! RAMDAC. This allows dot clocks up to 135MHz to be used with these ! boards. ! 2) Some graphics bugs in the Cirrus driver's accelerated code have been ! fixed. ! 3) A probe problem in the Mach32 server has been fixed. ! 4) The problem with the Comaq driver in 2.0 and 2.1 should now be fixed. ! 5) Support has been added for generating sync-on-green for S3 cards ! using the Bt485 or Ti3020 RAMDACs. ! 6) Text-mode restore problems with some S3 cards have been fixed. ! 7) A new ATI Wonder SVGA driver has been included. This driver is ! experimental. It works better than the 2.1 driver on some cards and ! worse on others. This driver now works with the VGA16 and Mono ! servers. ! 8) A driver for an Apollo mono card has been added to the Bdm2 section ! of the Mono server. ! ! ! 3 - What's new in XFree86 2.1? ------------------------------ XFree86 2.1 is not a huge release compared to prior XFree86 releases. There are a number of reasons for this, including the fact that two of the Core *************** *** 50,56 **** their time for XFree86 work. In addition, we are hard at work on merging XFree86 with the upcoming X11R6. Many new features have been put on hold while this integration is done, so that a stable and viable X11R6 release ! can be developed. XFree86 3.0 will be released on the X11R6 contributed software distribution, and it is our intention that many of these features will be present in that release. --- 85,91 ---- their time for XFree86 work. In addition, we are hard at work on merging XFree86 with the upcoming X11R6. Many new features have been put on hold while this integration is done, so that a stable and viable X11R6 release ! can be developed. XFree86 3.1 will be released on the X11R6 contributed software distribution, and it is our intention that many of these features will be present in that release. *************** *** 104,110 **** Plus a number of other small things. Refer to the CHANGELOG file in the source distribution for full details. ! 3 - XFree86 Features -------------------- Here is a list of the other significant features that XFree86 adds over stock X386 1.2 (X11R5): --- 139,145 ---- Plus a number of other small things. Refer to the CHANGELOG file in the source distribution for full details. ! 4 - XFree86 Features -------------------- Here is a list of the other significant features that XFree86 adds over stock X386 1.2 (X11R5): *************** *** 128,135 **** 5) Support for the Hercules mono card in the monochrome server, and with it the ability to support a "two headed" server - one mono VGA, and one Hercules. ! 6) Support for Hyundai HGC1280, Sigma LaserView and Visa monochrome ! graphics card in the monochrome server. 7) A 16-color VGA server is included, which supports generic VGA hardware. 8) SVR3 shared libraries, tested under ISC SVR3 2.0.2, 2.2, 3.0.1 and --- 163,170 ---- 5) Support for the Hercules mono card in the monochrome server, and with it the ability to support a "two headed" server - one mono VGA, and one Hercules. ! 6) Support for Hyundai HGC1280, Sigma LaserView, Visa and Apollo ! monochrome graphics card in the monochrome server. 7) A 16-color VGA server is included, which supports generic VGA hardware. 8) SVR3 shared libraries, tested under ISC SVR3 2.0.2, 2.2, 3.0.1 and *************** *** 164,175 **** intuitive, and more validation is done. There are many new options that can be enabled in the Xconfig file. ! 4 - Systems XFree86 has been tested on -------------------------------------- SVR4.0: Esix: 4.0.3A, 4.0.4, 4.0.4.1 Microport: 2.2, 3.1, 4.1, 4.2 ! Dell: 2.1, 2.2 UHC: 2.0, 3.6 Consensys: 1.2 MST: 4.0.3 (Load 2.07 and Load 3.02) --- 199,210 ---- intuitive, and more validation is done. There are many new options that can be enabled in the Xconfig file. ! 5 - Systems XFree86 has been tested on -------------------------------------- SVR4.0: Esix: 4.0.3A, 4.0.4, 4.0.4.1 Microport: 2.2, 3.1, 4.1, 4.2 ! Dell: 2.1, 2.2, 2.2.1 UHC: 2.0, 3.6 Consensys: 1.2 MST: 4.0.3 (Load 2.07 and Load 3.02) *************** *** 180,186 **** SVR4.2: Consensys ! Univel UnixWare SVR3: Interactive: 2.0.2, 2.2, 3.0, 4.0 --- 215,221 ---- SVR4.2: Consensys ! Novell UnixWare SVR3: Interactive: 2.0.2, 2.2, 3.0, 4.0 *************** *** 188,202 **** AT&T: 3.2.2 Others: ! 386BSD 0.1, NetBSD 0.9, FreeBSD 1.1(beta) BSD/386 1.0 Mach 386 OSF/1 ! Linux 0.99pl15h Amoeba Minix-386 ! 5 - Supported video-card chipsets --------------------------------- At this time, XFree86 2.1 supports the following accelerated chipsets: --- 223,237 ---- AT&T: 3.2.2 Others: ! 386BSD 0.1, NetBSD 0.9, NetBSD-current, FreeBSD 1.1(gamma) BSD/386 1.0 Mach 386 OSF/1 ! Linux 1.0 Amoeba Minix-386 ! 6 - Supported video-card chipsets --------------------------------- At this time, XFree86 2.1 supports the following accelerated chipsets: *************** *** 219,225 **** Genoa GVGA Trident TVGA8800CS, TVGA8900B, TVGA8900C, TVGA8900CL, TVGA9000, TVGA9000i, TVGA9100B, TVGA9200CX, TVGA9320, TVGA9400CX, TVGA9420 ! ATI 28800-4, 28800-5, 28800-a NCR 77C22, 77C22E, 77C22E+ Cirrus Logic CLGD5420, CLGD5422, CLGD5424, CLGD5426, CLGD5428 CLGD6205, CLGD6215, CLGD6225, CLGD6235 --- 254,260 ---- Genoa GVGA Trident TVGA8800CS, TVGA8900B, TVGA8900C, TVGA8900CL, TVGA9000, TVGA9000i, TVGA9100B, TVGA9200CX, TVGA9320, TVGA9400CX, TVGA9420 ! ATI 28800-4, 28800-5, 28800-6, 28800-a NCR 77C22, 77C22E, 77C22E+ Cirrus Logic CLGD5420, CLGD5422, CLGD5424, CLGD5426, CLGD5428 CLGD6205, CLGD6215, CLGD6225, CLGD6235 *************** *** 227,250 **** OAK OTI067, OTI077 All of the above are supported in both 256 color and monochrome modes, ! with the exception of the ATI and Cirrus chipsets, which are only ! supported in 256 color mode. Refer to the chipset-specific README files (currently for Tseng, Western Digital, ATI, and Trident) for more information about using those chipsets. The monochrome server also supports generic VGA cards, using 64k of video ! memory in a single bank, the Hercules monochrome card, the Hyundai ! HGC1280, Sigma LaserView and Visa monochrome cards. On the Compaq AVGA, ! only 64k of video memory is supported for the monochrome server, and the ! GVGA has not been tested with more than 64k. The VGA16 server has not been as extensively tested and debugged as the others, but it should work rather well (but slowly) on most hardware. ! This server supports memory banking with the ET4000 and Trident chipsets ! allowing virtual display sizes up to about 1600x1200 (with 1MB of video ! memory). For other chipsets the display size is limited to approximately ! 800x600. Note ---- --- 262,285 ---- OAK OTI067, OTI077 All of the above are supported in both 256 color and monochrome modes, ! with the exception of the Cirrus chipsets, which are only supported in 256 ! color mode. Refer to the chipset-specific README files (currently for Tseng, Western Digital, ATI, and Trident) for more information about using those chipsets. The monochrome server also supports generic VGA cards, using 64k of video ! memory in a single bank, the Hercules monochrome card, the Hyundai HGC1280, ! Sigma LaserView, Visa and Apollo monochrome cards. On the Compaq AVGA, only ! 64k of video memory is supported for the monochrome server, and the GVGA has ! not been tested with more than 64k. The VGA16 server has not been as extensively tested and debugged as the others, but it should work rather well (but slowly) on most hardware. ! This server supports memory banking with the ET4000, Trident and ATI ! chipsets allowing virtual display sizes up to about 1600x1200 (with 1MB of ! video memory). For other chipsets the display size is limited to ! approximately 800x600. Note ---- *************** *** 274,280 **** use the standard Cirrus clock synthesiser. This includes the SpeedStar Pro and possibly the SpeedStar 64. ! 6 - Where to get more information --------------------------------- Additional documentation is available in the XFree86(1), Xconfig(4/5), XF86_SVGA(1), XF86_Mono(1), XF86_VGA16(1), XF86_Accel(1) and XF86keybd(1) --- 309,315 ---- use the standard Cirrus clock synthesiser. This includes the SpeedStar Pro and possibly the SpeedStar 64. ! 7 - Where to get more information --------------------------------- Additional documentation is available in the XFree86(1), Xconfig(4/5), XF86_SVGA(1), XF86_Mono(1), XF86_VGA16(1), XF86_Accel(1) and XF86keybd(1) *************** *** 300,306 **** be answered there. The answers to common questions are found in the corresponding FAQ. ! 7 - Bugs known fixed in XFree86 vs stock X11R5 ---------------------------------------------- 1) Server now traps and exits cleanly if unexpected signals are received (a core is still generated for debugging). There is an --- 335,341 ---- be answered there. The answers to common questions are found in the corresponding FAQ. ! 8 - Bugs known fixed in XFree86 vs stock X11R5 ---------------------------------------------- 1) Server now traps and exits cleanly if unexpected signals are received (a core is still generated for debugging). There is an *************** *** 331,337 **** resolved). 13) Plugged security risk related to suid-root execution of the server. ! 8 - Known bugs in XFree86 ------------------------- 1) There are some problems with some of the 'xset fp' operations (in particular 'xset fp rehash'). These seem to be caused by memory --- 366,372 ---- resolved). 13) Plugged security risk related to suid-root execution of the server. ! 9 - Known bugs in XFree86 ------------------------- 1) There are some problems with some of the 'xset fp' operations (in particular 'xset fp rehash'). These seem to be caused by memory *************** *** 339,355 **** believe that we have worked around this problem, but have not yet solved the root cause. 2) While not strictly a bug, there is currently a limitation on the ! dot-clock frequencies allowed with the S3 server. For S3 cards ! with the Bt485 RAMDAC (e.g. #9 GXe), the limit is 85Mhz. There ! is some special programming required to use these RAMDACs at higher ! dot-clocks, and we were not able to get it fully developed in ! time. An exception to this is the SPEA Mercury card which is ! supported at dot clocks up to 135MHz. We welcome reports of bugs sent to the electronic mail address listed below. ! 9 - Credits ----------- XFree86 was originally put together by: David Dawes --- 374,386 ---- believe that we have worked around this problem, but have not yet solved the root cause. 2) While not strictly a bug, there is currently a limitation on the ! dot-clock frequencies allowed with the S3 server. For some S3 cards ! with the Bt485 RAMDAC, the limit is 85Mhz. We welcome reports of bugs sent to the electronic mail address listed below. ! 10 - Credits ----------- XFree86 was originally put together by: David Dawes *************** *** 365,371 **** Mach 386 support by: Robert Baron Linux support by: ! Orest Zborowski SCO Unix support by: David McCullough Amoeba support by: --- 396,402 ---- Mach 386 support by: Robert Baron Linux support by: ! Orest Zborowski SCO Unix support by: David McCullough Amoeba support by: *************** *** 383,389 **** SVR3 shared libraries by: Thomas Wolfram Linux shared libraries by: ! Dirk Hohndel Original accelerated code by: Kevin Martin --- 414,420 ---- SVR3 shared libraries by: Thomas Wolfram Linux shared libraries by: ! Dirk Hohndel Original accelerated code by: Kevin Martin *************** *** 395,400 **** --- 426,433 ---- David Dawes Robin Cutshaw Amancio Hasty + Norbert Distler + Leonard N. Zubkoff Mach32 accelerated code by: Kevin Martin Rik Faith *************** *** 409,415 **** Scott Laird Cirrus accelerated code by: Simon Cooper ! Harm Hanemaayer Bill Reynolds Western Digital accelerated code by: Mike Tierney --- 442,448 ---- Scott Laird Cirrus accelerated code by: Simon Cooper ! Harm Hanemaayer Bill Reynolds Western Digital accelerated code by: Mike Tierney *************** *** 420,425 **** --- 453,459 ---- ATI SVGA driver by: Per Lindqvist and Doug Evans Ported to X11R5 by Rik Faith + Rewritten by Marc La France Trident SVGA driver by: Alan Hourihane NCR SVGA driver by: *************** *** 437,442 **** --- 471,478 ---- Davor Matic Banked Dumb Monochrome and related drivers by: Pascal Haible + Apollo driver for BDM by: + Hamish Coleman X386 1.2, and moral support from: Thomas Roell *************** *** 443,449 **** Mark Snitily Other contributors: ! Joerg Wunsch (ET3000 banked mono) Bob Crosson (video mode documentation) Thomas Eberhardt (compressed fonts) Eric Raymond (new video mode documentation) --- 479,485 ---- Mark Snitily Other contributors: ! Joerg Wunsch (ET3000 banked mono) Bob Crosson (video mode documentation) Thomas Eberhardt (compressed fonts) Eric Raymond (new video mode documentation) *************** *** 450,469 **** and an entire horde of beta-testers around the world! ! 10 - Contact information ------------------------ Ongoing development planning and support is coordinated by the XFree86 Core Team. At this time the Core Team consists of (in alphabetical order): David Dawes ! Dirk Hohndel Rich Murphey Jon Tombs David Wexelblat , ! E-mail sent to will reach the Core Team. ! 11 - The XFree86 Project, Inc. ------------------------------ The XFree86 Project, Inc, has been founded to accomplish two major goals: --- 486,505 ---- and an entire horde of beta-testers around the world! ! 11 - Contact information ------------------------ Ongoing development planning and support is coordinated by the XFree86 Core Team. At this time the Core Team consists of (in alphabetical order): David Dawes ! Dirk Hohndel Rich Murphey Jon Tombs David Wexelblat , ! E-mail sent to will reach the Core Team. ! 12 - The XFree86 Project, Inc. ------------------------------ The XFree86 Project, Inc, has been founded to accomplish two major goals: *************** *** 482,495 **** about funding, we decided to form our own corporation to provide the avenue we needed to meet the requirements of the X Consortium bylaws. ! By doing this, we are able to be involved in the beta-test interval for ! X11R6, and will be contributing the majority of XFree86 to the X11R6 core ! release. The next full-featured release of XFree86, version 3.0, will ! be present on the X11R6 contributed software tape, with full X11R6 ! support, and (hopefully) a host of new features. As time goes on, ! XFree86 will be involved with more of the development of The X Window ! System, as a full Consortium member. How exactly this will evolve is ! still being determined. An additional benefit of this incorporation is that The XFree86 Project, Inc has obtained outside financial support for our work. This will --- 518,531 ---- about funding, we decided to form our own corporation to provide the avenue we needed to meet the requirements of the X Consortium bylaws. ! By doing this, we were able to be involved in the beta-test interval for ! X11R6, and have contributed the majority of XFree86 to the X11R6 core ! release. The version of XFree86 in the X11R6 core is 3.0. The next ! full-featured release of XFree86, version 3.1, will be present on the ! X11R6 contributed software tape, with full X11R6 support, and (hopefully) ! a host of new features. As time goes on, XFree86 will be involved with ! more of the development of The X Window System, as a full Consortium ! member. How exactly this will evolve is still being determined. An additional benefit of this incorporation is that The XFree86 Project, Inc has obtained outside financial support for our work. This will *************** *** 523,550 **** membership fee on a moment's notice. This single act ensured XFree86's involvement in X11R6. ! AIB Software Corporation American Micro Group AT&T Global Information Services (formerly NCR) ! BSDI ! InfoMagic ! LunetIX Frank & Paige McCormick ! Prime Time Freeware ! Red Hat Software The XFree86 Project, Inc, welcomes the additional contribution of funding and/or equipment. Such contributions should be tax-deductible; we will know for certain when the lawyers get finished with the papers. For more ! information, contact The XFree86 Project, Inc, at We are in the process of establishing our own Internet domain, XFree86.Org. ! Most of the pieces are in place, and we hope to be online within a few ! more weeks. We will post an announcement when this is ready for use. ! 12 - Source and binary archive sites ------------------------------------ ! Source patches based on X11R5 PL25, from MIT, and as an upgrade from XFree86 2.0 are available via anonymous FTP from: ftp.x.org (under /contrib/XFree86) --- 559,589 ---- membership fee on a moment's notice. This single act ensured XFree86's involvement in X11R6. ! AIB Software Corporation, Dulles, VA American Micro Group AT&T Global Information Services (formerly NCR) ! Andrew Burgess ! BSDI, Falls Church, VA Frank & Paige McCormick ! InfoMagic, Rocky Hill, NJ ! LunetIX Softfair, Berlin, Germany ! Prime Time Freeware, San Bruno, CA ! Red Hat Software, Chapel Hill, NC ! Unifix Software GmbH, Braunschweig, Germany ! Xtreme s.a.s., Livorno, Italy The XFree86 Project, Inc, welcomes the additional contribution of funding and/or equipment. Such contributions should be tax-deductible; we will know for certain when the lawyers get finished with the papers. For more ! information, contact The XFree86 Project, Inc, at We are in the process of establishing our own Internet domain, XFree86.Org. ! Most of the pieces are in place, it is currently accepting e-mail. ! 13 - Source and binary archive sites ------------------------------------ ! Source patches are available to upgrade 2.1 to 2.1.1. These and source ! patches for 2.1 based on X11R5 PL26, from MIT, and as an upgrade from XFree86 2.0 are available via anonymous FTP from: ftp.x.org (under /contrib/XFree86) *************** *** 559,601 **** Binaries are available via anonymous FTP from: ! ftp.physics.su.oz.au - SVR4 binaries under /XFree86/SVR4 ! ftp.win.tue.nl - SVR4 binaries under /pub/XFree86/SVR4 ! ftp.tcp.com - SVR4 binaries under /pub/SVR4/XFree86 ! stasi.bradley.edu - SVR4 binaries under /pub/XFree86/SVR4 ! stasi.bradley.edu - SVR3 (SCO) binaries under /pub/XFree86/sco ! ftp.physics.su.oz.au - SVR3 (SCO) binaries under /XFree86/SCO ! blancmange.ma.utexas.edu - SVR3 (ISC) binaries ! under /pub/ISC ! ftp.prz.tu-berlin.de - SVR3 (ISC) binaries ! under /pub/pc/isc/XFree86 ! tsx-11.mit.edu - Linux binaries under /pub/linux/packages/X11 ! ftp.unipi.it - Linux binaries ! under /pub/linux/XFree86_2.1 ! XFree86.cdrom.com - FreeBSD binaries ! under /pub/XFree86/FreeBSD/XFree86-2.1 ! gil.physik.rwth-aachen.de - FreeBSD binaries under /pub/XFree86 ! agate.berkeley.edu - NetBSD 0.9 binaries ! under /pub/NetBSD/ports ! sun-lamp.cs.berkeley.edu - NetBSD 0.9 binaries under /pub/NetBSD/ports ! ftp.cs.mcgill.ca - NetBSD 0.9 binaries ! under /pub/NetBSD/XFree86 ! Ensure that you are getting XFree86 2.1 - some of these sites may archive older releases as well. Each binary distribution will contain a README file that describes what files you need to take from the archive, and which compile-time option selections were made when building the distribution. ! 6 March 1994 ! $XFree86: mit/server/ddx/x386/README,v 2.13 1994/03/08 08:07:02 dawes Exp $ --- 598,638 ---- Binaries are available via anonymous FTP from: ! ftp.physics.su.oz.au - SVR4 binaries under /XFree86/SVR4 ! ftp.win.tue.nl - SVR4 binaries under /pub/XFree86/SVR4 ! ftp.tcp.com - SVR4 binaries under /pub/SVR4/XFree86 ! stasi.bradley.edu - SVR4 binaries under /pub/XFree86/SVR4 ! stasi.bradley.edu - SVR3 (SCO) binaries (2.1 only) under /pub/XFree86/sco ! ftp.physics.su.oz.au - SVR3 (SCO) binaries (2.1 only) under /XFree86/SCO ! tsx-11.mit.edu - Linux binaries under /pub/linux/packages/X11 ! sunshine.informatik.uni-wuerzburg.de - Linux binaries ! under /pub/Linux/XFree86-2.1.1 ! XFree86.cdrom.com - FreeBSD binaries ! under /pub/XFree86/FreeBSD/XFree86-2.1.1 ! gil.physik.rwth-aachen.de - FreeBSD binaries under /pub/XFree86 ! sun-lamp.cs.berkeley.edu - NetBSD-current binaries under /pub/NetBSD/ports ! ftp.iastate.edu - NetBSD-current binaries ! under /pub/netbsd ! ftp.wonderland.org - NetBSD-current binaries ! under /pub/NetBSD ! ftp.laas.fr - NetBSD-current binaries ! under /pub/NetBSD ! Ensure that you are getting XFree86 2.1.1 - some of these sites may archive older releases as well. Each binary distribution will contain a README file that describes what files you need to take from the archive, and which compile-time option selections were made when building the distribution. ! 4 May 1994 ! $XFree86: mit/server/ddx/x386/README,v 2.20 1994/05/04 12:11:30 dawes Exp $ diff -c mit/server/ddx/x386/README.Linux:2.8 mit/server/ddx/x386/README.Linux:2.10 *** mit/server/ddx/x386/README.Linux:2.8 Wed May 4 22:53:16 1994 --- mit/server/ddx/x386/README.Linux Wed May 4 22:53:16 1994 *************** *** 140,149 **** instructions are provided in /usr/X386/lib/X11/config/lnuxLib.rules, where the X library definitions are provided, as an example. ! Thanks to Dirk Hohndel (hohndel@informatik.uni-wuerzburg.de) for ! working out all the details and doing all the work in creating the first ! set of XFree86 DLL libs, on which the current method (developed by Orest ! Zborowski (orestz@microsoft.com)) is based. 5 - Compiling a PEX server -------------------------- --- 140,149 ---- instructions are provided in /usr/X386/lib/X11/config/lnuxLib.rules, where the X library definitions are provided, as an example. ! Thanks to Dirk Hohndel (hohndel@aib.com) for working out all the ! details and doing all the work in creating the first set of XFree86 DLL ! libs, on which the current method (developed by Orest Zborowski ! (orestz@eskimo.com)) is based. 5 - Compiling a PEX server -------------------------- *************** *** 165,168 **** are included. Now only the XINPUT extension is missing. ! $XFree86: mit/server/ddx/x386/README.Linux,v 2.8 1994/03/09 11:16:13 dawes Exp $ --- 165,168 ---- are included. Now only the XINPUT extension is missing. ! $XFree86: mit/server/ddx/x386/README.Linux,v 2.10 1994/05/02 11:42:31 dawes Exp $ diff -c mit/server/ddx/x386/README.NetBSD:2.9 mit/server/ddx/x386/README.NetBSD:2.11 *** mit/server/ddx/x386/README.NetBSD:2.9 Wed May 4 22:53:17 1994 --- mit/server/ddx/x386/README.NetBSD Wed May 4 22:53:17 1994 *************** *** 1,9 **** - README for XFree86 2.1 on NetBSD 0.9 and NetBSD-current - ------------------------------------------------------- Contents -------- - 0) Notes 1) What and Where is XFree86? 2) Bug Reports for This Document 3) Installing The Binaries --- 1,9 ---- + README for XFree86 2.1.1 on NetBSD-current + ------------------------------------------ + Contents -------- 1) What and Where is XFree86? 2) Bug Reports for This Document 3) Installing The Binaries *************** *** 29,54 **** ftp.x.org:/contrib/XFree86 ftp.physics.su.oz.au:/XFree86. - [I don't know if someone will do specific NetBSD 0.9 binary distribution. - perhaps static -current binaries will run on 0.9 ?] - Binaries for NetBSD 0.9 will be available from: - - ftp.cs.mcgill.ca:/pub/NetBSD - agate.berkeley.edu:/pub/NetBSD/ports - sun-lamp.cs.berkeley.edu:/pub/NetBSD/ports - Binaries for NetBSD-Current will be available from: ftp.laas.fr:/pub/NetBSD ! On US ftp sites note 00README-Legal-Rules-Regs or README.export-control ! which state that ftp users outside the U.S. should not copy ! XFree86-2.1-xdm-des.tar.gz from sites within the U.S. because it employs ! DES encryption. 2 - Bug Reports for This Document --------------------------------- ! Send email to matthieu@laas.fr (Matthieu Herrb) or XFree86@physics.su.oz.au if you have comments or suggestions about this file and we'll revise it. 3 - Installing the Binaries --- 29,45 ---- ftp.x.org:/contrib/XFree86 ftp.physics.su.oz.au:/XFree86. Binaries for NetBSD-Current will be available from: ftp.laas.fr:/pub/NetBSD + sun-lamp.cs.berkeley.edu:/pub/NetBSD/ports ! If you're running NetBSD 0.9, you'll have to build it from the source. ! If you've done it and want to share your binaries, please let us know. 2 - Bug Reports for This Document --------------------------------- ! Send email to matthieu@laas.fr (Matthieu Herrb) or XFree86@XFree86.org if you have comments or suggestions about this file and we'll revise it. 3 - Installing the Binaries *************** *** 82,89 **** OPTIONAL: man - man pages except XFree86 specific ones in the etc archive ! xdm-des - xdm executable with DES encryption ! xdm-no-des - xdm executable without DES encryption linkkit - optional X server reconfiguration kit pex - pex clients, libraries, header files and data --- 73,79 ---- OPTIONAL: man - man pages except XFree86 specific ones in the etc archive ! xdm - xdm executable (dynamically linked against -lcrypt) linkkit - optional X server reconfiguration kit pex - pex clients, libraries, header files and data *************** *** 108,140 **** % ln -s /usr/local/X11 /usr/X386 ! 2. Assuming that the destination directory for XFree86 2.1 is /usr/X386, run the following from wherever all the archive files are (replace /usr/X386 with wherever you wish them to go if that isn't the place): ! % cat XFree86-2.1-bin.tar.gz.* | gunzip | (cd /usr/X386; tar xf -) ! % cat XFree86-2.1-include.tar.gz.* | gunzip | (cd /usr/X386; tar xf -) ! % cat XFree86-2.1-fonts.tar.gz.* | gunzip | (cd /usr/X386; tar xf -) ! % cat XFree86-2.1-doc.tar.gz | gunzip | (cd /usr/X386; tar xf -) ! % cat XFree86-2.1-lib.tar.gz.* | gunzip | (cd /usr/X386; tar xf -) ! % cat XFree86-2.1-config.tar.gz | gunzip | (cd /usr/X386; tar xf -) ! % cat XFree86-2.1-man.tar.gz | gunzip | (cd /usr/X386; tar xf -) ! ! # Choose only one of the following two ! % cat XFree86-2.1-xdm-des.tar.gz | gunzip | (cd /usr/X386; tar xf -) ! % cat XFree86-2.1-xdm-no-des.tar.gz | gunzip | (cd /usr/X386; tar xf -) ! % cat XFree86-2.1-linkkit.tar.gz.* | gunzip | (cd /usr/X386; tar xf -) ! % cat XFree86-2.1-pex.tar.gz | gunzip | (cd /usr/X386; tar xf -) # Choose one ore more servers to install ! % cat XFree86-2.1-8514.tar.gz | gunzip | (cd /usr/X386; tar xf -) ! % cat XFree86-2.1-Mach8.tar.gz | gunzip | (cd /usr/X386; tar xf -) ! % cat XFree86-2.1-Mach32.tar.gz | gunzip | (cd /usr/X386; tar xf -) ! % cat XFree86-2.1-S3.tar.gz | gunzip | (cd /usr/X386; tar xf -) ! % cat XFree86-2.1-SVGA.tar.gz | gunzip | (cd /usr/X386; tar xf -) ! % cat XFree86-2.1-VGA16.tar.gz | gunzip | (cd /usr/X386; tar xf -) ! % cat XFree86-2.1-Mono.tar.gz | gunzip | (cd /usr/X386; tar xf -) 3. Set the XWINHOME environment variable to the path where you installed XFree86. Under csh type: --- 98,129 ---- % ln -s /usr/local/X11 /usr/X386 ! 2. Assuming that the destination directory for XFree86 2.1.1 is /usr/X386, run the following from wherever all the archive files are (replace /usr/X386 with wherever you wish them to go if that isn't the place): ! % cat XFree86-2.1.1-bin.tar.gz | gunzip | (cd /usr/X386; tar xf -) ! % cat XFree86-2.1.1-include.tar.gz | gunzip | (cd /usr/X386; tar xf -) ! % cat XFree86-2.1.1-fonts.tar.gz.* | gunzip | (cd /usr/X386; tar xf -) ! % cat XFree86-2.1.1-doc.tar.gz | gunzip | (cd /usr/X386; tar xf -) ! % cat XFree86-2.1.1-lib.tar.gz | gunzip | (cd /usr/X386; tar xf -) ! % cat XFree86-2.1.1-config.tar.gz | gunzip | (cd /usr/X386; tar xf -) ! % cat XFree86-2.1.1-man.tar.gz | gunzip | (cd /usr/X386; tar xf -) ! ! % cat XFree86-2.1.1-xdm.tar.gz | gunzip | (cd /usr/X386; tar xf -) + % cat XFree86-2.1.1-linkkit.tar.gz | gunzip | (cd /usr/X386; tar xf -) + % cat XFree86-2.1.1-pex.tar.gz | gunzip | (cd /usr/X386; tar xf -) + # Choose one ore more servers to install ! % cat XFree86-2.1.1-8514.tar.gz | gunzip | (cd /usr/X386; tar xf -) ! % cat XFree86-2.1.1-Mach8.tar.gz | gunzip | (cd /usr/X386; tar xf -) ! % cat XFree86-2.1.1-Mach32.tar.gz | gunzip | (cd /usr/X386; tar xf -) ! % cat XFree86-2.1.1-S3.tar.gz | gunzip | (cd /usr/X386; tar xf -) ! % cat XFree86-2.1.1-SVGA.tar.gz | gunzip | (cd /usr/X386; tar xf -) ! % cat XFree86-2.1.1-VGA16.tar.gz | gunzip | (cd /usr/X386; tar xf -) ! % cat XFree86-2.1.1-Mono.tar.gz | gunzip | (cd /usr/X386; tar xf -) 3. Set the XWINHOME environment variable to the path where you installed XFree86. Under csh type: *************** *** 167,180 **** 5. If needed, reboot your machine to take all previous modifications into account. - 6. Finally, run the ConfigXF86 script from ${XWINHOME}/lib/X11/etc - in order to build a Xconfig file. See README.ConfigXF86 for - details. - If X was already installed on your machine and you have customized your xinit or xdm runtime configuration scripts, omit the config archive or unpack it elsewhere and extract only that which you need. NOTE: Do not uncompress the font files in lib/X11/fonts without subsequently running 'mkfontdir' in the corresponding font directory; otherwise, your server will abort with the message "could not open default --- 156,168 ---- 5. If needed, reboot your machine to take all previous modifications into account. If X was already installed on your machine and you have customized your xinit or xdm runtime configuration scripts, omit the config archive or unpack it elsewhere and extract only that which you need. + If you're upgrading from XFree86 2.0 or 2.1, you can also omit the fonts + archive. + NOTE: Do not uncompress the font files in lib/X11/fonts without subsequently running 'mkfontdir' in the corresponding font directory; otherwise, your server will abort with the message "could not open default *************** *** 199,228 **** /usr/X386/lib will probably take precedence over the one in XWINHOME because ld has a hard-coded path to /usr/X386/lib. 4 - Installing Xdm, the display manager --------------------------------------- - Export restrictions prevent us from providing support for DES - encryption outside the US. If you have not installed NetBSD's - optional secr09, then passwords in /etc/passwd.master are - unencrypted and you should install the version of xdm without DES - encryption: - - % cat XFree86-2.1-xdm-no-des.tar.gz | gunzip | (cd /usr/X386; tar xf -) - - The xdm-nodes binary uses the *BSD dummy crypt routine that - prints the message 'Crypt not present in system' in the xdm-errors - file each time a user logs in. You can ignore this. It just means - /etc/passwd.master is unencrypted. If you install xdm-des by mistake - xdm will not accept any passwords. - - If you have installed the optional securedist/des (secr09 for NetBSD) package - on your system then you are using DES encryption on passwords and you should - install xdm-des: ! % cat XFree86-2.1-xdm-des.tar.gz | gunzip | (cd /usr/X386; tar xf -) To start the display manager, log in as root on the console and type `xdm -nodaemon'. --- 187,208 ---- /usr/X386/lib will probably take precedence over the one in XWINHOME because ld has a hard-coded path to /usr/X386/lib. + Also, the distribution only works with post 940403 -current + kernels and system libraries (after the off_t change). To reflect + this incompatiblity, all shared lib version number are now 3.0. 4 - Installing Xdm, the display manager --------------------------------------- ! Since xdm is dynamically linked against -lcrypt, there's no issue on ! export restriction outside US for this binary distribution of xdm: it ! does not contain the DES encryption code. + To install xdm type + + % cat XFree86-2.1.1-xdm.tar.gz | gunzip | (cd /usr/X386; tar xf -) + To start the display manager, log in as root on the console and type `xdm -nodaemon'. *************** *** 238,245 **** --- 218,227 ---- console "/usr/libexec/getty Pc" cons25 off secure + 5 - Configuring X for Your Hardware ----------------------------------- + You *must* create /usr/X386/lib/X11/Xconfig to suit your hardware. See README.Config for step-by-step instructions for setting it up. *************** *** 248,286 **** (XF86_Accel, XF86_Mono, XF86_SVGA, and XF86_VGA16) describe the options specific to each type of board. - Read README.Config, and look in /usr/X386/lib/X11/etc/modeDB.txt and - /usr/X386/lib/X11/etc/AccelCards to find Clocks and ModeDB entries to your - specific monitor and graphics card. If you can find them there, grab the - Clocks and ModeDB lines and put them in your Xconfig. If not, read - /usr/X386/lib/X11/etc/VideoModes.doc for instructions on how to create the - video timing values given your vga card and monitor specs. The manual for - your monitor and adapter should have these values. The tuner program (on - FreeBSD.cdrom.com /pub/386BSD/0.1-ports/XFree86-2.1) can calculate a rough - guess about a ModeDB line given the dot clock rate and horizontal - frequency of your monitor. - - Note: 386BSD, FreeBSD, and NetBSD do not support memory mapping of video - memory on vesa local bus cards. For these cards the server will respond - 'Direct memory accessing has been disabled', which is normal. - - The X server (except the 8514 and Mach32 servers) will print out the - Clocks values for your card if you leave them our of your Xconfig file - when you run: - - X -probeonly >& x.out - - You can take these values and edit them to put them in your Xconfig file; - although you MUST include all the clock values, AND leave them in the same - order. - - If your mouse does not work try using kermit or tip to connect to the - mouse serial port and verify that it does indeed generate characters. - - For NetBSD 0.9, Microsoft BusMouse users will find that the following - line should work: - - BusMouse "/dev/mms0" - 6 - Running X ------------- 8mb of memory is a recommended minimum for running X. The server, --- 230,235 ---- *************** *** 307,326 **** The pccons driver is the most widely tested and is the console driver contained in the GENERICAHA kernels in NetBSD 0.9 and NetBSD-current ! In order to instead use the syscons driver, you must reconfigure, ! compile and install a new kernel from the NetBSD sources. For a ! general description of BSD kernel configuration look in ! /usr/src/share/doc/smm/02.config. After running 'make' it contains a ! ready postscript copy of the kernel configuration chapter from the ! systems maintainers manual. To make sure X support is enabled under NetBSD, the following line must be in your config file in /sys/arch/i386/conf: ! options XSERVER, UCONSOLE The syscons console driver is not bundled with FreeBSD or NetBSD. ! Current version is 1.2 and supports XFree86-2.1. The codrv console driver is not bundled with FreeBSD, nor with NetBSD. It is available from ftp.uni-duisburg.de in --- 256,294 ---- The pccons driver is the most widely tested and is the console driver contained in the GENERICAHA kernels in NetBSD 0.9 and NetBSD-current ! The pcvt console driver is bundled with NetBSD-current. The pcvt X ! mode is compatible with the pccons driver X mode. VT-switching in X ! does not work in pcvt as far as I can tell. ! ! Syscons and codrv are not bundled with NetBSD-current. In order to ! use one of these drivers, you must reconfigure, compile and install a ! new kernel from the NetBSD sources. To make sure X support is enabled under NetBSD, the following line must be in your config file in /sys/arch/i386/conf: ! options XSERVER, UCONSOLE ! ! If using pcons you get the mesage: + > XFree86 Version 2.1.1 / X Window System + > (protocol Version 11, revision 0, vendor release 5000) + > Operating System: NetBSD + > Configured drivers: + > Mach8: accelerated server for ATI Mach-8 graphics adaptors + > (Patchlevel 0) + > + > Fatal server error: + > xf86OpenConsole: CONSOLE_X_MODE_OFF failed (Inappropriate ioctl for device) + > Was expecting pccons driver with X support + > Check your kernel's console driver configuration and /dev entries + > + + then delete /dev/ttyv0. I don't know why 'MAKEDEV' move /dev/ttyqf to + /dev/ttyv0. (from Hung-Chi Chu ) + The syscons console driver is not bundled with FreeBSD or NetBSD. ! Current version is 1.2 and supports XFree86-2.1.1. The codrv console driver is not bundled with FreeBSD, nor with NetBSD. It is available from ftp.uni-duisburg.de in *************** *** 329,342 **** It is not clear that anybody has attempted to get this working with NetBSD 0.9 ! The pcvt console driver is also not bundled with *BSD. Version 3.0 ! has just been posted to comp.sources.misc. The pcvt X mode is ! compatible with the pccons driver X mode. MIT-SHM =-----= ! NetBSD-current supports System V shared memory. If XFree86 2.1 detects this support in your kernel, it will support the MIT-SHM extension. Under NetBSD-current, use the following to add shared memory --- 297,308 ---- It is not clear that anybody has attempted to get this working with NetBSD 0.9 ! MIT-SHM =-----= ! NetBSD-current supports System V shared memory. If XFree86 2.1.1 detects this support in your kernel, it will support the MIT-SHM extension. Under NetBSD-current, use the following to add shared memory *************** *** 404,415 **** the data and stack size limits (in csh type `limit datasize 32M' and `limit stacksize 16M'). ! Note: Starting with XFree86 2.1 and NetBSD-current, the symbol "__386BSD__" ! no longer gets defined either by the compiler or via the X config files ! for FreeBSD systems. When porting clients to BSD systems, make use of the ! symbol "BSD" for code which is truly BSD-specific. The value of the ! symbol can be used to distinguish different BSD releases. For example, ! code specific to the Net-2 and later releases can use: #if (BSD >= 199103) --- 370,382 ---- the data and stack size limits (in csh type `limit datasize 32M' and `limit stacksize 16M'). ! Note: Starting with XFree86 2.1 and NetBSD-current, the symbol ! "__386BSD__" no longer gets defined either by the compiler or via the ! X config files for FreeBSD systems. When porting clients to BSD ! systems, make use of the symbol "BSD" for code which is truly ! BSD-specific. The value of the symbol can be used to distinguish ! different BSD releases. For example, code specific to the Net-2 and ! later releases can use: #if (BSD >= 199103) *************** *** 419,424 **** --- 386,401 ---- __FreeBSD__ for FreeBSD, __NetBSD__ for NetBSD, __386BSD__ for 386BSD, and __bsdi__ for BSD/386. + Another note: If you get the message: + + ld.so: undefined symbol _XtCvtStringToFont + + at run-time, you've stumbled on a semantic weakness of NetBSD-current + dynamic linker. Applications that use libXmu also need libXt. If the + client uses a standard Imakefile, this dependancy will probably by + included in the Makefile automagically -- you'll not see the + problem. Otherwise, just add '-lXt' to your library list in the + Imakefile or Makefile and relink. Many thanks to - Pace Willison for providing the initial port to 386BSD. *************** *** 433,436 **** Marc Wandschneider Matthieu Herrb ! $XFree86: mit/server/ddx/x386/README.NetBSD,v 2.9 1994/03/08 08:07:12 dawes Exp $ --- 410,413 ---- Marc Wandschneider Matthieu Herrb ! $XFree86: mit/server/ddx/x386/README.NetBSD,v 2.11 1994/05/03 08:09:17 dawes Exp $ diff -c mit/server/ddx/x386/README.SVR4:2.2 mit/server/ddx/x386/README.SVR4:2.4 *** mit/server/ddx/x386/README.SVR4:2.2 Wed May 4 22:53:18 1994 --- mit/server/ddx/x386/README.SVR4 Wed May 4 22:53:18 1994 *************** *** 24,30 **** Microport: 2.2, 3.1, 4.1, 4.2 Esix: 4.0.3A, 4.0.4, 4.0.4.1 ! Dell: 2.1, 2.2 UHC: 2.0, 3.6 Consensys: 1.2 MST: 4.0.3 --- 24,30 ---- Microport: 2.2, 3.1, 4.1, 4.2 Esix: 4.0.3A, 4.0.4, 4.0.4.1 ! Dell: 2.1, 2.2, 2.2.1 UHC: 2.0, 3.6 Consensys: 1.2 MST: 4.0.3 *************** *** 35,41 **** and the following versions of SVR4.2: Consensys ! Univel UnixWare Basically, we believe that XFree86 binaries will run unmodified on any ISA, EISA, or MCA platform version version of SVR4.0 (Solaris 2.1 is an --- 35,41 ---- and the following versions of SVR4.2: Consensys ! Novell UnixWare Basically, we believe that XFree86 binaries will run unmodified on any ISA, EISA, or MCA platform version version of SVR4.0 (Solaris 2.1 is an *************** *** 237,243 **** problems with SVR4.2. Basically, the base SVR4.2 code has broken Unix-domain sockets in such a way that making local connections via UNIXCONN does not work properly (this bug is known to exist on Consensys ! SVR4.2 and Univel UnixWare). The manifestation of this bug is that windows remain on the screen after the client program exits, until you move the mouse into the window, or otherwise cause the server to try to write to the client. --- 237,243 ---- problems with SVR4.2. Basically, the base SVR4.2 code has broken Unix-domain sockets in such a way that making local connections via UNIXCONN does not work properly (this bug is known to exist on Consensys ! SVR4.2 and Novell UnixWare). The manifestation of this bug is that windows remain on the screen after the client program exits, until you move the mouse into the window, or otherwise cause the server to try to write to the client. *************** *** 413,416 **** information. ! $XFree86: mit/server/ddx/x386/README.SVR4,v 2.2 1994/03/05 08:22:43 dawes Exp $ --- 413,416 ---- information. ! $XFree86: mit/server/ddx/x386/README.SVR4,v 2.4 1994/05/04 10:28:54 dawes Exp $ diff -c mit/server/ddx/x386/XF86_Acc.man:2.16 mit/server/ddx/x386/XF86_Acc.man:2.18 *** mit/server/ddx/x386/XF86_Acc.man:2.16 Wed May 4 22:53:18 1994 --- mit/server/ddx/x386/XF86_Acc.man Wed May 4 22:53:19 1994 *************** *** 1,6 **** ! .\" $XFree86: mit/server/ddx/x386/XF86_Acc.man,v 2.16 1994/03/08 04:46:29 dawes Exp $ .\" $XConsortium: X386.man,v 1.3 91/08/26 15:31:19 gildea Exp $ ! .TH XF86_Accel 1 "Version 2.1" "XFree86" .SH NAME XF86_Accel - 8 bit accelerated X Window System servers for UNIX on x86 platforms with an S3, Mach8, Mach32 or 8514/A accelerator board --- 1,6 ---- ! .\" $XFree86: mit/server/ddx/x386/XF86_Acc.man,v 2.18 1994/05/03 08:09:21 dawes Exp $ .\" $XConsortium: X386.man,v 1.3 91/08/26 15:31:19 gildea Exp $ ! .TH XF86_Accel 1 "Version 2.1.1" "XFree86" .SH NAME XF86_Accel - 8 bit accelerated X Window System servers for UNIX on x86 platforms with an S3, Mach8, Mach32 or 8514/A accelerator board *************** *** 162,167 **** --- 162,170 ---- Setting this option overrides that probe. This is not normally recommended because the failure of the server's probe usually indicates problems in using the linear framebuffer. + .sp + The Mach32 server should not require the use of this option under normal + circumstances. .TP 8 .B option \fI"optionstring"\fP allows the user to select certain options provided by the drivers. Currently *************** *** 218,223 **** --- 221,229 ---- supported with the Ti3020, AT&T 20C490/1, Sierra SC15025/6 (S3 server) and ATI68875/TLC34075/Bt885 (Mach32 server) RAMDACs. .sp + \fBsync_on_green\fP - (S3) Enables generation of sync on the green signal + on cards with Bt485 or Ti3020 RAMDACs. + .sp \fBintel_gx\fP - (Mach32) Sets the hard-wired offset for the linear framebuffer correctly for the Intel GX Pro cards. This option is equivalent to setting the \fBmembase\fP to \fI0x78000000\fP. *************** *** 224,232 **** .sp \fBspea_mercury\fP - (S3) Enables pixel multiplex support for SPEA Mercury cards (928 + Bt485 RAMDAC). For these cards, pixel multiplexing is required ! in order to use dot clocks higher than 67.5 MHz and to access more than 1MB of video memory. Pixel multiplexing is currently supported only for non-interlaced modes, and modes with a physical width no smaller than 1024. .PP Note that \fIXFree86\fP has some internal capabilities to determine what hardware --- 230,250 ---- .sp \fBspea_mercury\fP - (S3) Enables pixel multiplex support for SPEA Mercury cards (928 + Bt485 RAMDAC). For these cards, pixel multiplexing is required ! in order to use dot clocks higher than 67.5~MHz and to access more than 1MB of video memory. Pixel multiplexing is currently supported only for non-interlaced modes, and modes with a physical width no smaller than 1024. + .sp + \fBstb_pegasus\fP - (S3) Enables pixel multiplex support for STB Pegasus + cards (928 + Bt485 RAMDAC). For these cards, pixel multiplexing is + required in order to use dot clocks higher than 67.5~MHz. Pixel + multiplexing is currently supported only for non-interlaced modes, and + modes with a physical width no smaller than 1024. + .sp + \fBnumber_nine\fP - (S3) Enables pixel multiplex support for Number Nine + GXe level 10, 11, 12 cards (928 + Bt485 RAMDAC). For these cards, pixel + multiplexing is required in order to use dot clocks higher than 85~MHz. + Pixel multiplexing is currently supported only for non-interlaced modes, + and modes with a physical width no smaller than 800. .PP Note that \fIXFree86\fP has some internal capabilities to determine what hardware *************** *** 279,285 **** .PP .nf David Dawes, \fIdawes@physics.su.oz.au\fP ! Dirk Hohndel, \fIhohndel@informatik.uni-wuerzburg.de\fP David Wexelblat, \fIdwex@goblin.org\fP, \fIdwex@aib.com\fP .fi .RS 8 --- 297,303 ---- .PP .nf David Dawes, \fIdawes@physics.su.oz.au\fP ! Dirk Hohndel, \fIhohndel@aib.com\fP David Wexelblat, \fIdwex@goblin.org\fP, \fIdwex@aib.com\fP .fi .RS 8 *************** *** 287,297 **** .RE .PP .nf ! Jon Tombs, \fIjon@gtex02.us.es\fP ! David Wexelblat, \fIdwex@goblin.org\fP, \fIdwex@aib.com\fP ! David Dawes, \fIdawes@physics.su.oz.au\fP ! Amancio Hasty, \fIhasty@netcom.com\fP ! Robin Cutshaw, \fIrobin@paros.com\fP .fi .RS 8 Development and improvement of the S3 specific code. --- 305,317 ---- .RE .PP .nf ! Jon Tombs, \fIjon@gtex02.us.es\fP ! David Wexelblat, \fIdwex@goblin.org\fP, \fIdwex@aib.com\fP ! David Dawes, \fIdawes@physics.su.oz.au\fP ! Amancio Hasty, \fIhasty@netcom.com\fP ! Robin Cutshaw, \fIrobin@paros.com\fP ! Norbert Distler, \fINorbert.Distler@physik.tu-muenchen.de\fP ! Leonard N. Zubkoff, \fIlnz@dandelion.com\fP .fi .RS 8 Development and improvement of the S3 specific code. *************** *** 324,334 **** manual page. .SH BUGS .PP ! S3 cards with Bt485 ramdacs are currently restricted to ! dot-clocks less than 85MHz. This restriction is because the servers don't ! yet support operating the ramdacs in multiplexed mode. .SH CONTACT INFO \fIXFree86\fP source is available from the FTP servers \fIftp.physics.su.oz.au\fP and \fIftp.x.org\fP. Send email to ! \fIXFree86@physics.su.oz.au\fP for details. --- 344,353 ---- manual page. .SH BUGS .PP ! Some S3 cards with Bt485 ramdacs are currently restricted to ! dot-clocks less than 85MHz. .SH CONTACT INFO \fIXFree86\fP source is available from the FTP servers \fIftp.physics.su.oz.au\fP and \fIftp.x.org\fP. Send email to ! \fIXFree86@XFree86.org\fP for details. diff -c mit/server/ddx/x386/XF86_Mono.man:2.10 mit/server/ddx/x386/XF86_Mono.man:2.13 *** mit/server/ddx/x386/XF86_Mono.man:2.10 Wed May 4 22:53:19 1994 --- mit/server/ddx/x386/XF86_Mono.man Wed May 4 22:53:19 1994 *************** *** 1,6 **** ! .\" $XFree86: mit/server/ddx/x386/XF86_Mono.man,v 2.10 1994/02/27 05:17:21 dawes Exp $ .\" $XConsortium: X386.man,v 1.3 91/08/26 15:31:19 gildea Exp $ ! .TH XF86_Mono 1 "Version 2.1" "XFree86" .SH NAME XF86_Mono - 1 bit non-accelerated X Window System servers for UNIX on x86 platforms --- 1,6 ---- ! .\" $XFree86: mit/server/ddx/x386/XF86_Mono.man,v 2.13 1994/05/03 08:09:23 dawes Exp $ .\" $XConsortium: X386.man,v 1.3 91/08/26 15:31:19 gildea Exp $ ! .TH XF86_Mono 1 "Version 2.1.1" "XFree86" .SH NAME XF86_Mono - 1 bit non-accelerated X Window System servers for UNIX on x86 platforms *************** *** 27,32 **** --- 27,35 ---- server supports the following popular SuperVGA chipsets in monochrome mode. .RS .5i .TP 4 + ATI: + 18800, 18800-1, 28800-2, 28800-4, 28800-5, 28800-6, 28800-a + .TP 4 Tseng: ET3000, ET4000, ET4000/W32 .TP 4 *************** *** 51,57 **** .PP Additionally it supports generic VGA cards, Hercules monochrome graphics cards, the Hyundai ! HGC1280 card, Sigma LaserView, and Visa monochrome cards. .PP On supported SVGA chipsets, .I XF86_Mono --- 54,60 ---- .PP Additionally it supports generic VGA cards, Hercules monochrome graphics cards, the Hyundai ! HGC1280 card, Sigma LaserView, Visa, and Apollo monochrome cards. .PP On supported SVGA chipsets, .I XF86_Mono *************** *** 104,109 **** --- 107,115 ---- VGA2: .RS 1.5i .TP 4 + ATI: + vgawonder + .TP 4 Tseng: et3000, et4000 .TP 4 *************** *** 151,156 **** --- 157,165 ---- .TP 4 Visa: visa6845 + .TP 4 + Apollo: + apollo9 .RE .TP 8 .B clocks \fIclock\fP ... *************** *** 246,252 **** .SH CONTACT INFO \fIXFree86\fP source is available from the FTP servers \fIftp.physics.su.oz.au\fP and \fIftp.x.org\fP. Send email to ! \fIXFree86@physics.su.oz.au\fP for details. .SH AUTHORS .PP Refer to the --- 255,261 ---- .SH CONTACT INFO \fIXFree86\fP source is available from the FTP servers \fIftp.physics.su.oz.au\fP and \fIftp.x.org\fP. Send email to ! \fIXFree86@XFree86.org\fP for details. .SH AUTHORS .PP Refer to the diff -c mit/server/ddx/x386/XF86_SVGA.man:2.10 mit/server/ddx/x386/XF86_SVGA.man:2.13 *** mit/server/ddx/x386/XF86_SVGA.man:2.10 Wed May 4 22:53:20 1994 --- mit/server/ddx/x386/XF86_SVGA.man Wed May 4 22:53:20 1994 *************** *** 1,6 **** ! .\" $XFree86: mit/server/ddx/x386/XF86_SVGA.man,v 2.10 1994/03/06 13:04:17 dawes Exp $ .\" $XConsortium: X386.man,v 1.3 91/08/26 15:31:19 gildea Exp $ ! .TH XF86_SVGA 1 "Version 2.1" "XFree86" .SH NAME XF86_SVGA - 8 bit non-accelerated X Window System servers for UNIX on x86 platforms --- 1,6 ---- ! .\" $XFree86: mit/server/ddx/x386/XF86_SVGA.man,v 2.13 1994/05/03 08:09:26 dawes Exp $ .\" $XConsortium: X386.man,v 1.3 91/08/26 15:31:19 gildea Exp $ ! .TH XF86_SVGA 1 "Version 2.1.1" "XFree86" .SH NAME XF86_SVGA - 8 bit non-accelerated X Window System servers for UNIX on x86 platforms *************** *** 46,52 **** TVGA8800CS, TVGA8900B, TVGA8900C, TVGA8900CL, TVGA9000 .TP 4 ATI: ! 28800-4, 28800-5, 28800-a .TP 4 NCR: 77C22, 77C22E --- 46,52 ---- TVGA8800CS, TVGA8900B, TVGA8900C, TVGA8900CL, TVGA9000 .TP 4 ATI: ! 18800, 18800-1, 28800-2, 28800-4, 28800-5, 28800-6, 28800-a .TP 4 NCR: 77C22, 77C22E *************** *** 111,117 **** tvga8800cs, tvga8900b, tvga8900c, tvga8900cl, tvga9000 .TP 4 ATI: ! ati .TP 4 NCR: ncr77c22, ncr77c22e --- 111,117 ---- tvga8800cs, tvga8900b, tvga8900c, tvga8900cl, tvga9000 .TP 4 ATI: ! vgawonder .TP 4 NCR: ncr77c22, ncr77c22e *************** *** 185,193 **** --- 185,202 ---- increases performance, and is probably only appropriate for the clgd5434 chip. .sp + \fBslow_dram\fP - for Cirrus chipsets. This option sets the DRAM timings + for slow DRAM chips. + .sp + \fBfast_dram\fP - for ET4000 and Cirrus chipsets. This option sets the + DRAM timings for fast DRAM chips. + .sp \fBno_2mb_banksel\fP - for Cirrus chipsets. This option is required for Cirrus cards with 2MB of videoram which is in the form of 512kx8 DRAMs (4 chips) rather than 256kx4 DRAMs (16 chips). + .sp + \fBno_bitblt\fP - for Cirrus chipsets. This option disables use of + hardware BitBLT. .ig intern_disp (use internal display for laptops -- WD90C2x) extern_disp (use external display for laptops -- WD90C2x) *************** *** 246,252 **** .SH CONTACT INFO \fIXFree86\fP source is available from the FTP servers \fIftp.physics.su.oz.au\fP and \fIftp.x.org\fP. Send email to ! \fIXFree86@physics.su.oz.au\fP for details. .SH AUTHORS .PP Refer to the --- 255,261 ---- .SH CONTACT INFO \fIXFree86\fP source is available from the FTP servers \fIftp.physics.su.oz.au\fP and \fIftp.x.org\fP. Send email to ! \fIXFree86@XFree86.org\fP for details. .SH AUTHORS .PP Refer to the diff -c mit/server/ddx/x386/XF86_VGA16.man:2.5 mit/server/ddx/x386/XF86_VGA16.man:2.7 *** mit/server/ddx/x386/XF86_VGA16.man:2.5 Wed May 4 22:53:20 1994 --- mit/server/ddx/x386/XF86_VGA16.man Wed May 4 22:53:20 1994 *************** *** 1,6 **** ! .\" $XFree86: mit/server/ddx/x386/XF86_VGA16.man,v 2.5 1994/03/07 13:55:45 dawes Exp $ .\" $XConsortium: X386.man,v 1.3 91/08/26 15:31:19 gildea Exp $ ! .TH XF86_VGA16 1 "Version 2.1" "XFree86" .SH NAME XF86_VGA16 - 4 bit non-accelerated X Window System server for UNIX on x86 platforms --- 1,6 ---- ! .\" $XFree86: mit/server/ddx/x386/XF86_VGA16.man,v 2.7 1994/05/03 08:09:28 dawes Exp $ .\" $XConsortium: X386.man,v 1.3 91/08/26 15:31:19 gildea Exp $ ! .TH XF86_VGA16 1 "Version 2.1.1" "XFree86" .SH NAME XF86_VGA16 - 4 bit non-accelerated X Window System server for UNIX on x86 platforms *************** *** 30,35 **** --- 30,38 ---- server supports the following popular SVGA chipset in 16-colour mode. .RS .5i .TP 4 + ATI: + 18800, 18800-1, 28800-2, 28800-4, 28800-5, 28800-6, 28800-a + .TP 4 Tseng: ET4000 .TP 4 *************** *** 74,79 **** --- 77,85 ---- .sp .RS 1.5i .TP 4 + ATI: + vgawonder + .TP 4 Tseng: et4000 .TP 4 *************** *** 165,171 **** .SH CONTACT INFO \fIXFree86\fP source is available from the FTP servers \fIftp.physics.su.oz.au\fP and \fIftp.x.org\fP. Send email to ! \fIXFree86@physics.su.oz.au\fP for details. .SH AUTHORS .PP The primary developer of this server is --- 171,177 ---- .SH CONTACT INFO \fIXFree86\fP source is available from the FTP servers \fIftp.physics.su.oz.au\fP and \fIftp.x.org\fP. Send email to ! \fIXFree86@XFree86.org\fP for details. .SH AUTHORS .PP The primary developer of this server is diff -c mit/server/ddx/x386/XF86kbd.man:2.2 mit/server/ddx/x386/XF86kbd.man:2.3 *** mit/server/ddx/x386/XF86kbd.man:2.2 Wed May 4 22:53:21 1994 --- mit/server/ddx/x386/XF86kbd.man Wed May 4 22:53:21 1994 *************** *** 1,7 **** '\" t ! '\" $XFree86: mit/server/ddx/x386/XF86kbd.man,v 2.2 1994/02/27 05:17:26 dawes Exp $ '\" ! .TH XFree86kbd 1 "Version 2.1" "XFree86" .SH NAME XFree86kbd - Description of keymapping capabilities of XFree86 servers .SH DESCRIPTION --- 1,7 ---- '\" t ! '\" $XFree86: mit/server/ddx/x386/XF86kbd.man,v 2.3 1994/05/02 11:42:37 dawes Exp $ '\" ! .TH XFree86kbd 1 "Version 2.1.1" "XFree86" .SH NAME XFree86kbd - Description of keymapping capabilities of XFree86 servers .SH DESCRIPTION diff -c mit/server/ddx/x386/XFree86.man:2.11 mit/server/ddx/x386/XFree86.man:2.14 *** mit/server/ddx/x386/XFree86.man:2.11 Wed May 4 22:53:21 1994 --- mit/server/ddx/x386/XFree86.man Wed May 4 22:53:21 1994 *************** *** 1,6 **** ! .\" $XFree86: mit/server/ddx/x386/XFree86.man,v 2.11 1994/03/08 08:07:18 dawes Exp $ .\" $XConsortium: X386.man,v 1.3 91/08/26 15:31:19 gildea Exp $ ! .TH XFree86 1 "Version 2.1" "XFree86" .SH NAME XFree86 - X11R5 Enhancement Package for UNIX on x86 platforms .SH DESCRIPTION --- 1,6 ---- ! .\" $XFree86: mit/server/ddx/x386/XFree86.man,v 2.14 1994/05/03 08:09:30 dawes Exp $ .\" $XConsortium: X386.man,v 1.3 91/08/26 15:31:19 gildea Exp $ ! .TH XFree86 1 "Version 2.1.1" "XFree86" .SH NAME XFree86 - X11R5 Enhancement Package for UNIX on x86 platforms .SH DESCRIPTION *************** *** 286,292 **** card/monitor database, development of the generic video mode listing. Accelerated server integration, fixing, and coding. .TP 8 ! Dirk Hohndel, \fIhohndel@informatik.uni-wuerzburg.de\fP Linux shared libraries and release coordination. Accelerated server integration and fixing. Generic administrivia and documentation. .PP --- 286,292 ---- card/monitor database, development of the generic video mode listing. Accelerated server integration, fixing, and coding. .TP 8 ! Dirk Hohndel, \fIhohndel@aib.com\fP Linux shared libraries and release coordination. Accelerated server integration and fixing. Generic administrivia and documentation. .PP *************** *** 301,307 **** Robert Baron, \fIRobert.Baron@ernst.mach.cs.cmu.edu\fP Ported to \fBMach\fP. .TP 8 ! Orest Zborowski, \fIorestz@microsoft.com\fP Ported to \fBLinux\fP. .TP 8 Doug Anson, \fIdanson@lgc.com\fP --- 301,307 ---- Robert Baron, \fIRobert.Baron@ernst.mach.cs.cmu.edu\fP Ported to \fBMach\fP. .TP 8 ! Orest Zborowski, \fIorestz@eskimo.com\fP Ported to \fBLinux\fP. .TP 8 Doug Anson, \fIdanson@lgc.com\fP *************** *** 369,375 **** Hercules driver and frame buffer support. .TP 8 Pascal Haible, \fIhaible@izfm.uni-stuttgart.de\fP ! Mono frame buffer support for dumb monochrome devices (bdm2) .PP ... and many more people out there on the net who helped with beta-testing this enhancement. --- 369,378 ---- Hercules driver and frame buffer support. .TP 8 Pascal Haible, \fIhaible@izfm.uni-stuttgart.de\fP ! Mono frame buffer support for dumb monochrome devices (bdm2). ! .TP 8 ! Hamish Coleman, \fIhamish@zot.apana.org.au\fP ! Bdm2 driver for Apollo mono card. .PP ... and many more people out there on the net who helped with beta-testing this enhancement. *************** *** 376,379 **** .PP \fIXFree86\fP source is available from the FTP servers \fIftp.physics.su.oz.au\fP and \fIftp.x.org\fP, among others. Send email to ! \fIXFree86@physics.su.oz.au\fP for details. --- 379,382 ---- .PP \fIXFree86\fP source is available from the FTP servers \fIftp.physics.su.oz.au\fP and \fIftp.x.org\fP, among others. Send email to ! \fIXFree86@XFree86.org\fP for details. diff -c mit/server/ddx/x386/Xconfig.man:2.9 mit/server/ddx/x386/Xconfig.man:2.10 *** mit/server/ddx/x386/Xconfig.man:2.9 Wed May 4 22:53:22 1994 --- mit/server/ddx/x386/Xconfig.man Wed May 4 22:53:22 1994 *************** *** 1,6 **** ! .\" $XFree86: mit/server/ddx/x386/Xconfig.man,v 2.9 1994/03/08 08:07:19 dawes Exp $ .\" $XConsortium: X386.man,v 1.3 91/08/26 15:31:19 gildea Exp $ ! .TH Xconfig 4/5 "Version 2.1" "XFree86" .SH NAME Xconfig - Configuration File for XFree86 .SH DESCRIPTION --- 1,6 ---- ! .\" $XFree86: mit/server/ddx/x386/Xconfig.man,v 2.10 1994/05/02 11:42:41 dawes Exp $ .\" $XConsortium: X386.man,v 1.3 91/08/26 15:31:19 gildea Exp $ ! .TH Xconfig 4/5 "Version 2.1.1" "XFree86" .SH NAME Xconfig - Configuration File for XFree86 .SH DESCRIPTION diff -c mit/server/ddx/x386/LinkKit/site.def.LK:2.10 mit/server/ddx/x386/LinkKit/site.def.LK:2.11 *** mit/server/ddx/x386/LinkKit/site.def.LK:2.10 Wed May 4 22:53:24 1994 --- mit/server/ddx/x386/LinkKit/site.def.LK Wed May 4 22:53:24 1994 *************** *** 1,4 **** ! XCOMM $XFree86: mit/server/ddx/x386/LinkKit/site.def.LK,v 2.10 1994/03/09 02:18:36 dawes Exp $ /* Configuration file for Server Link Kit */ --- 1,4 ---- ! XCOMM $XFree86: mit/server/ddx/x386/LinkKit/site.def.LK,v 2.11 1994/04/10 05:49:56 dawes Exp $ /* Configuration file for Server Link Kit */ *************** *** 66,75 **** * hgc1280 [Hyundai HGC-1280 1280x1024] * sigma [Sigma L-View] * visa [???] * ... * (list is subject to grow) */ ! /* #define X386Bdm2Drivers hgc1280 sigma visa */ /* #define XF86S3Drivers mmio_928 s3_generic */ /* --- 66,76 ---- * hgc1280 [Hyundai HGC-1280 1280x1024] * sigma [Sigma L-View] * visa [???] + * apollo [???] * ... * (list is subject to grow) */ ! /* #define X386Bdm2Drivers hgc1280 sigma visa apollo */ /* #define XF86S3Drivers mmio_928 s3_generic */ /* diff -c mit/server/ddx/x386/SuperProbe/00README:2.8 mit/server/ddx/x386/SuperProbe/00README:2.9 *** mit/server/ddx/x386/SuperProbe/00README:2.8 Wed May 4 22:53:27 1994 --- mit/server/ddx/x386/SuperProbe/00README Wed May 4 22:53:27 1994 *************** *** 1,6 **** README file for SuperProbe -------------------------- ! Version 2.0 David E Wexelblat dwex@goblin.org --- 1,6 ---- README file for SuperProbe -------------------------- ! Version 2.1 David E Wexelblat dwex@goblin.org *************** *** 73,76 **** For helping test and debug this software. ! $XFree86: mit/server/ddx/x386/SuperProbe/00README,v 2.8 1994/03/02 08:04:48 dawes Exp $ --- 73,76 ---- For helping test and debug this software. ! $XFree86: mit/server/ddx/x386/SuperProbe/00README,v 2.9 1994/04/15 05:09:34 dawes Exp $ diff -c mit/server/ddx/x386/SuperProbe/AL.c:2.4 mit/server/ddx/x386/SuperProbe/AL.c:2.5 *** mit/server/ddx/x386/SuperProbe/AL.c:2.4 Wed May 4 22:53:27 1994 --- mit/server/ddx/x386/SuperProbe/AL.c Wed May 4 22:53:27 1994 *************** *** 21,27 **** * */ ! /* $XFree86: mit/server/ddx/x386/SuperProbe/AL.c,v 2.4 1994/03/02 08:04:51 dawes Exp $ */ #include "Probe.h" --- 21,27 ---- * */ ! /* $XFree86: mit/server/ddx/x386/SuperProbe/AL.c,v 2.5 1994/04/15 05:09:35 dawes Exp $ */ #include "Probe.h" *************** *** 54,67 **** old = rdinx(CRTC_IDX, 0x1A); clrinx(CRTC_IDX, 0x1A, 0x10); ! if (!testinx(CRTC_IDX, 0x19)) { setinx(CRTC_IDX, 0x1A, 0x10); ! if ((testinx(CRTC_IDX, 0x19) && (testinx2(CRTC_IDX, 0x1A, 0x3F)))) { result = TRUE; ! *Chipset = CHIP_AL2101; } } wrinx(CRTC_IDX, 0x1A, old); --- 54,79 ---- old = rdinx(CRTC_IDX, 0x1A); clrinx(CRTC_IDX, 0x1A, 0x10); ! if (!testinx2(CRTC_IDX, 0x19, 0xCF)) { setinx(CRTC_IDX, 0x1A, 0x10); ! if ((testinx2(CRTC_IDX, 0x19, 0xCF) && (testinx2(CRTC_IDX, 0x1A, 0x3F)))) { result = TRUE; ! switch (rdinx(CRTC_IDX, 0x1A) >> 6) ! { ! case 0x03: ! *Chipset = CHIP_AL2101; ! break; ! case 0x02: ! *Chipset = CHIP_AL2228; ! break; ! default: ! Chip_data = rdinx(CRTC_IDX, 0x1A); ! *Chipset = CHIP_AL_UNKNOWN; ! break; ! } } } wrinx(CRTC_IDX, 0x1A, old); diff -c mit/server/ddx/x386/SuperProbe/ATIMach.c:2.7 mit/server/ddx/x386/SuperProbe/ATIMach.c:2.8 *** mit/server/ddx/x386/SuperProbe/ATIMach.c:2.7 Wed May 4 22:53:28 1994 --- mit/server/ddx/x386/SuperProbe/ATIMach.c Wed May 4 22:53:28 1994 *************** *** 21,27 **** * */ ! /* $XFree86: mit/server/ddx/x386/SuperProbe/ATIMach.c,v 2.7 1994/03/07 13:56:07 dawes Exp $ */ #include "Probe.h" --- 21,27 ---- * */ ! /* $XFree86: mit/server/ddx/x386/SuperProbe/ATIMach.c,v 2.8 1994/04/15 05:09:36 dawes Exp $ */ #include "Probe.h" *************** *** 58,64 **** EnableIOPorts(NUMPORTS, Ports); /* ! * Check for 8515/A registers first. Don't read BIOS, or an * attached 8514 Ultra won't be detected (the slave SVGA's BIOS * is in the normal SVGA place). */ --- 58,64 ---- EnableIOPorts(NUMPORTS, Ports); /* ! * Check for 8514/A registers first. Don't read BIOS, or an * attached 8514 Ultra won't be detected (the slave SVGA's BIOS * is in the normal SVGA place). */ diff -c mit/server/ddx/x386/SuperProbe/Ahead.c:2.5 mit/server/ddx/x386/SuperProbe/Ahead.c:2.6 *** mit/server/ddx/x386/SuperProbe/Ahead.c:2.5 Wed May 4 22:53:28 1994 --- mit/server/ddx/x386/SuperProbe/Ahead.c Wed May 4 22:53:28 1994 *************** *** 21,27 **** * */ ! /* $XFree86: mit/server/ddx/x386/SuperProbe/Ahead.c,v 2.5 1994/03/02 08:04:53 dawes Exp $ */ #include "Probe.h" --- 21,27 ---- * */ ! /* $XFree86: mit/server/ddx/x386/SuperProbe/Ahead.c,v 2.6 1994/04/15 05:09:37 dawes Exp $ */ #include "Probe.h" *************** *** 59,68 **** tmp = rdinx(GRC_IDX, 0x0F) & 0x0F; switch (tmp) { ! case 0x01: *Chipset = CHIP_AHEAD_A; break; ! case 0x02: *Chipset = CHIP_AHEAD_B; break; default: --- 59,68 ---- tmp = rdinx(GRC_IDX, 0x0F) & 0x0F; switch (tmp) { ! case 0x00: *Chipset = CHIP_AHEAD_A; break; ! case 0x01: *Chipset = CHIP_AHEAD_B; break; default: diff -c mit/server/ddx/x386/SuperProbe/ChangeLog:2.12 mit/server/ddx/x386/SuperProbe/ChangeLog:2.13 *** mit/server/ddx/x386/SuperProbe/ChangeLog:2.12 Wed May 4 22:53:28 1994 --- mit/server/ddx/x386/SuperProbe/ChangeLog Wed May 4 22:53:28 1994 *************** *** 90,92 **** --- 90,95 ---- HMC, UMC, Weitek probes. Added more chipsets for Cirrus, NCR, Oak, RealTek, S3, Trident, Tseng, Video7, WD. Made some changes to the probes for ATI & Compaq. + + Version 2.1 - April 13, 1994 + - Small updates diff -c mit/server/ddx/x386/SuperProbe/Cirrus.c:2.7 mit/server/ddx/x386/SuperProbe/Cirrus.c:2.8 *** mit/server/ddx/x386/SuperProbe/Cirrus.c:2.7 Wed May 4 22:53:29 1994 --- mit/server/ddx/x386/SuperProbe/Cirrus.c Wed May 4 22:53:29 1994 *************** *** 21,27 **** * */ ! /* $XFree86: mit/server/ddx/x386/SuperProbe/Cirrus.c,v 2.7 1994/03/02 08:04:54 dawes Exp $ */ #include "Probe.h" --- 21,27 ---- * */ ! /* $XFree86: mit/server/ddx/x386/SuperProbe/Cirrus.c,v 2.8 1994/04/15 05:09:39 dawes Exp $ */ #include "Probe.h" *************** *** 154,165 **** { result = TRUE; Ver = rdinx(CRTC_IDX, 0x27); ! if (testinx(CRTC_IDX, 0x09)) { /* 542x */ switch ((Ver & 0xFC) >> 2) { ! case 0x02: *Chipset = CHIP_CLAVGA2; break; case 0x22: --- 154,165 ---- { result = TRUE; Ver = rdinx(CRTC_IDX, 0x27); ! if (testinx(GRC_IDX, 0x09)) { /* 542x */ switch ((Ver & 0xFC) >> 2) { ! case 0x06: *Chipset = CHIP_CLAVGA2; break; case 0x22: *************** *** 190,195 **** --- 190,198 ---- break; case 0x26: *Chipset = CHIP_CL5428; + break; + case 0x27: + *Chipset = CHIP_CL5429; break; case 0x29: *Chipset = CHIP_CL543X; diff -c mit/server/ddx/x386/SuperProbe/Main.c:2.7 mit/server/ddx/x386/SuperProbe/Main.c:2.8 *** mit/server/ddx/x386/SuperProbe/Main.c:2.7 Wed May 4 22:53:29 1994 --- mit/server/ddx/x386/SuperProbe/Main.c Wed May 4 22:53:29 1994 *************** *** 21,27 **** * */ ! /* $XFree86: mit/server/ddx/x386/SuperProbe/Main.c,v 2.7 1994/03/05 01:58:46 dawes Exp $ */ #include "Probe.h" #include "PatchLevel.h" --- 21,27 ---- * */ ! /* $XFree86: mit/server/ddx/x386/SuperProbe/Main.c,v 2.8 1994/04/15 05:09:40 dawes Exp $ */ #include "Probe.h" #include "PatchLevel.h" *************** *** 55,61 **** &AL_Descriptor, &Cirrus54_Descriptor, &Cirrus64_Descriptor, - &Weitek_Descriptor, &Tseng_Descriptor, &RealTek_Descriptor, &Primus_Descriptor, --- 55,60 ---- *************** *** 64,69 **** --- 63,69 ---- &Cirrus_Descriptor, &Compaq_Descriptor, &HMC_Descriptor, + &Weitek_Descriptor, &CT_Descriptor, /* I think this is screwing people up, so put it last */ NULL }; *************** *** 499,505 **** printf("\tCopyright 1993,1994 by David Wexelblat \n"); printf("\n\tThis work is derived from the 'vgadoc2.zip' and\n"); printf("\t'vgadoc3.zip' documentation packages produced by Finn\n"); ! printf("\tThoergersen, and released with all appropriate permissions\n"); printf("\thaving been obtained. Additional information obtained from\n"); printf("\t'Programmer's Guide to the EGA and VGA, 2nd ed', by Richard\n"); printf("\tFerraro, and from manufacturer's data books\n\n"); --- 499,505 ---- printf("\tCopyright 1993,1994 by David Wexelblat \n"); printf("\n\tThis work is derived from the 'vgadoc2.zip' and\n"); printf("\t'vgadoc3.zip' documentation packages produced by Finn\n"); ! printf("\tThoegersen, and released with all appropriate permissions\n"); printf("\thaving been obtained. Additional information obtained from\n"); printf("\t'Programmer's Guide to the EGA and VGA, 2nd ed', by Richard\n"); printf("\tFerraro, and from manufacturer's data books\n\n"); *************** *** 719,724 **** --- 719,725 ---- chip_p = CoProc_Descriptors[i]; if (TestChip(chip_p, &CoProc)) { + matched = chip_p; break; } } diff -c mit/server/ddx/x386/SuperProbe/NCR.c:2.4 mit/server/ddx/x386/SuperProbe/NCR.c:2.5 *** mit/server/ddx/x386/SuperProbe/NCR.c:2.4 Wed May 4 22:53:30 1994 --- mit/server/ddx/x386/SuperProbe/NCR.c Wed May 4 22:53:30 1994 *************** *** 21,27 **** * */ ! /* $XFree86: mit/server/ddx/x386/SuperProbe/NCR.c,v 2.4 1994/02/28 14:09:35 dawes Exp $ */ #include "Probe.h" --- 21,27 ---- * */ ! /* $XFree86: mit/server/ddx/x386/SuperProbe/NCR.c,v 2.5 1994/04/15 05:09:42 dawes Exp $ */ #include "Probe.h" *************** *** 68,82 **** } else if (tmp == 2) { ! *Chipset = CHIP_NCR77C22E; } else if (tmp == 3) { *Chipset = CHIP_NCR77C32B; - } - else if ((tmp >= 8) && (tmp <= 15)) - { - *Chipset = CHIP_NCR77C22EP; } else { --- 68,85 ---- } else if (tmp == 2) { ! if ((rdinx(SEQ_IDX, 0x08) & 0x0F) >= 8) ! { ! *Chipset = CHIP_NCR77C22EP; ! } ! else ! { ! *Chipset = CHIP_NCR77C22E; ! } } else if (tmp == 3) { *Chipset = CHIP_NCR77C32B; } else { diff -c mit/server/ddx/x386/SuperProbe/OS_386BSD.c:2.7 mit/server/ddx/x386/SuperProbe/OS_386BSD.c:2.8 *** mit/server/ddx/x386/SuperProbe/OS_386BSD.c:2.7 Wed May 4 22:53:30 1994 --- mit/server/ddx/x386/SuperProbe/OS_386BSD.c Wed May 4 22:53:30 1994 *************** *** 21,27 **** * */ ! /* $XFree86: mit/server/ddx/x386/SuperProbe/OS_386BSD.c,v 2.7 1994/02/28 14:09:36 dawes Exp $ */ #include "Probe.h" --- 21,27 ---- * */ ! /* $XFree86: mit/server/ddx/x386/SuperProbe/OS_386BSD.c,v 2.8 1994/04/10 05:50:10 dawes Exp $ */ #include "Probe.h" *************** *** 47,52 **** --- 47,55 ---- # define CONSOLE_X_MODE_ON _IO('t',121) # undef CONSOLE_X_MODE_OFF # define CONSOLE_X_MODE_OFF _IO('t',122) + #endif + #if defined(__NetBSD__) && !defined(MAP_FILE) + #define MAP_FILE 0 #endif static int CONS_fd = -1; diff -c mit/server/ddx/x386/SuperProbe/PatchLevel.h:2.9 mit/server/ddx/x386/SuperProbe/PatchLevel.h:2.10 *** mit/server/ddx/x386/SuperProbe/PatchLevel.h:2.9 Wed May 4 22:53:30 1994 --- mit/server/ddx/x386/SuperProbe/PatchLevel.h Wed May 4 22:53:30 1994 *************** *** 21,28 **** * */ ! /* $XFree86: mit/server/ddx/x386/SuperProbe/PatchLevel.h,v 2.9 1994/02/28 14:09:44 dawes Exp $ */ #define VERSION 2 ! #define PATCHLEV 0 #define PRINT_VERSION printf("\n%s Version %d.%d\n",MyName,VERSION,PATCHLEV) --- 21,28 ---- * */ ! /* $XFree86: mit/server/ddx/x386/SuperProbe/PatchLevel.h,v 2.10 1994/04/15 05:09:43 dawes Exp $ */ #define VERSION 2 ! #define PATCHLEV 1 #define PRINT_VERSION printf("\n%s Version %d.%d\n",MyName,VERSION,PATCHLEV) diff -c mit/server/ddx/x386/SuperProbe/Print.c:2.14 mit/server/ddx/x386/SuperProbe/Print.c:2.15 *** mit/server/ddx/x386/SuperProbe/Print.c:2.14 Wed May 4 22:53:31 1994 --- mit/server/ddx/x386/SuperProbe/Print.c Wed May 4 22:53:31 1994 *************** *** 21,27 **** * */ ! /* $XFree86: mit/server/ddx/x386/SuperProbe/Print.c,v 2.14 1994/02/28 14:09:47 dawes Exp $ */ #include "Probe.h" --- 21,27 ---- * */ ! /* $XFree86: mit/server/ddx/x386/SuperProbe/Print.c,v 2.15 1994/04/15 05:09:44 dawes Exp $ */ #include "Probe.h" *************** *** 35,41 **** "ATI 28800-2", "ATI 28800-4", "ATI 28800-5", "ATI 68800-3", "ATI 68800-6", "ATI 68800-LX", "ATI 68800-AX" }, ! /* AL */ { "Avance Logic 2101" }, /* CT */ { "Chips & Tech (chipset unknown)", "Chips & Tech 82c450", "Chips & Tech 82c451", "Chips & Tech 82c452", "Chips & Tech 82c453", --- 35,42 ---- "ATI 28800-2", "ATI 28800-4", "ATI 28800-5", "ATI 68800-3", "ATI 68800-6", "ATI 68800-LX", "ATI 68800-AX" }, ! /* AL */ { "Avance Logic (chipset unknown)", ! "Avance Logic 2101", "Avance Logic 2228" }, /* CT */ { "Chips & Tech (chipset unknown)", "Chips & Tech 82c450", "Chips & Tech 82c451", "Chips & Tech 82c452", "Chips & Tech 82c453", *************** *** 50,55 **** --- 51,57 ---- "Cirrus CL-GD5420", "Cirrus CL-GD5420 Rev 1", "Cirrus CL-GD5422", "Cirrus CL-GD5424", "Cirrus CL-GD5426", "Cirrus CL-GD5428", + "Cirrus CL-GD5429", "Cirrus CL-GD543x", "Cirrus CL-GD6205", "Cirrus CL-GD6215", "Cirrus CL-GD6225", "Cirrus CL-GD6235", *************** *** 95,102 **** "Trident 9400CXi", "Trident GUI9420" }, /* Tseng */ { "Tseng (chipset unknown(", "Tseng ET3000", "Tseng ET4000", ! "Tseng ET4000/W32", ! "Tseng ET4000/W32i", "Tseng ET4000/W32p" }, /* UMC */ { "UMC 85c408" }, /* Video7 */ { "Video7 (chipset unknown)", "Video7 FastWrite/VRAM (HT208)", "Video7 1024i (HT208A)", --- 97,104 ---- "Trident 9400CXi", "Trident GUI9420" }, /* Tseng */ { "Tseng (chipset unknown(", "Tseng ET3000", "Tseng ET4000", ! "Tseng ET4000/W32", "Tseng ET4000/W32i", ! "Tseng ET4000/W32p Rev A", "Tseng ET4000/W32p (other)" }, /* UMC */ { "UMC 85c408" }, /* Video7 */ { "Video7 (chipset unknown)", "Video7 FastWrite/VRAM (HT208)", "Video7 1024i (HT208A)", *************** *** 109,115 **** "WD/Paradise 90C10", "WD/Paradise 90C11", "WD/Paradise 90C20", "WD/Paradise 90C20A", "WD/Paradise 90C22", "WD/Paradise 90C24", ! "WD/Paradise 90C26", "WD/Paradise 90C30", "WD/Paradise 90C31", "WD/Paradise 90C33" }, /* Weitek */ { "Weitek (chipset unknown)", --- 111,117 ---- "WD/Paradise 90C10", "WD/Paradise 90C11", "WD/Paradise 90C20", "WD/Paradise 90C20A", "WD/Paradise 90C22", "WD/Paradise 90C24", ! "WD/Paradise 90C26", "WD/Paradise 90C27", "WD/Paradise 90C30", "WD/Paradise 90C31", "WD/Paradise 90C33" }, /* Weitek */ { "Weitek (chipset unknown)", diff -c mit/server/ddx/x386/SuperProbe/Probe.h:2.14 mit/server/ddx/x386/SuperProbe/Probe.h:2.15 *** mit/server/ddx/x386/SuperProbe/Probe.h:2.14 Wed May 4 22:53:31 1994 --- mit/server/ddx/x386/SuperProbe/Probe.h Wed May 4 22:53:31 1994 *************** *** 21,27 **** * */ ! /* $XFree86: mit/server/ddx/x386/SuperProbe/Probe.h,v 2.14 1994/02/28 14:09:49 dawes Exp $ */ /* * Includes --- 21,27 ---- * */ ! /* $XFree86: mit/server/ddx/x386/SuperProbe/Probe.h,v 2.15 1994/04/15 05:09:46 dawes Exp $ */ /* * Includes *************** *** 366,372 **** #define CHIP_ATI68800_6 SVGA_TYPE(V_ATI,7) /* ATI 68800-6 */ #define CHIP_ATI68800LX SVGA_TYPE(V_ATI,8) /* ATI 68800-LX */ #define CHIP_ATI68800AX SVGA_TYPE(V_ATI,9) /* ATI 68800-AX */ ! #define CHIP_AL2101 SVGA_TYPE(V_AL,0) /* Avance Logic 2101 */ #define CHIP_CT_UNKNOWN SVGA_TYPE(V_CT,0) /* C&T unknown */ #define CHIP_CT450 SVGA_TYPE(V_CT,1) /* C&T 82c450 */ #define CHIP_CT451 SVGA_TYPE(V_CT,2) /* C&T 82c451 */ --- 366,374 ---- #define CHIP_ATI68800_6 SVGA_TYPE(V_ATI,7) /* ATI 68800-6 */ #define CHIP_ATI68800LX SVGA_TYPE(V_ATI,8) /* ATI 68800-LX */ #define CHIP_ATI68800AX SVGA_TYPE(V_ATI,9) /* ATI 68800-AX */ ! #define CHIP_AL_UNKNOWN SVGA_TYPE(V_AL,0) /* Avance Logic unknown */ ! #define CHIP_AL2101 SVGA_TYPE(V_AL,1) /* Avance Logic 2101 */ ! #define CHIP_AL2228 SVGA_TYPE(V_AL,2) /* Avance Logic 2228 */ #define CHIP_CT_UNKNOWN SVGA_TYPE(V_CT,0) /* C&T unknown */ #define CHIP_CT450 SVGA_TYPE(V_CT,1) /* C&T 82c450 */ #define CHIP_CT451 SVGA_TYPE(V_CT,2) /* C&T 82c451 */ *************** *** 391,407 **** #define CHIP_CL5424 SVGA_TYPE(V_CIRRUS,10) /* Cirrus 5424 */ #define CHIP_CL5426 SVGA_TYPE(V_CIRRUS,11) /* Cirrus 5426 */ #define CHIP_CL5428 SVGA_TYPE(V_CIRRUS,12) /* Cirrus 5428 */ ! #define CHIP_CL543X SVGA_TYPE(V_CIRRUS,13) /* Cirrus 543x */ ! #define CHIP_CL6205 SVGA_TYPE(V_CIRRUS,14) /* Cirrus 6205 */ ! #define CHIP_CL6215 SVGA_TYPE(V_CIRRUS,15) /* Cirrus 6215 */ ! #define CHIP_CL6225 SVGA_TYPE(V_CIRRUS,16) /* Cirrus 6225 */ ! #define CHIP_CL6235 SVGA_TYPE(V_CIRRUS,17) /* Cirrus 6235 */ ! #define CHIP_CL5410 SVGA_TYPE(V_CIRRUS,18) /* Cirrus 6510 */ ! #define CHIP_CL6410 SVGA_TYPE(V_CIRRUS,19) /* Cirrus 6410 */ ! #define CHIP_CL6412 SVGA_TYPE(V_CIRRUS,20) /* Cirrus 6412 */ ! #define CHIP_CL6420A SVGA_TYPE(V_CIRRUS,21) /* Cirrus 6420A */ ! #define CHIP_CL6420B SVGA_TYPE(V_CIRRUS,22) /* Cirrus 6420B */ ! #define CHIP_CL6440 SVGA_TYPE(V_CIRRUS,23) /* Cirrus 6440 */ #define CHIP_CPQ_UNK SVGA_TYPE(V_COMPAQ,0) /* Compaq unknown */ #define CHIP_CPQ_IVGS SVGA_TYPE(V_COMPAQ,1) /* Compaq Int Vid Gr Sys*/ #define CHIP_CPQ_AVGA SVGA_TYPE(V_COMPAQ,2) /* Compaq Advanced VGA */ --- 393,410 ---- #define CHIP_CL5424 SVGA_TYPE(V_CIRRUS,10) /* Cirrus 5424 */ #define CHIP_CL5426 SVGA_TYPE(V_CIRRUS,11) /* Cirrus 5426 */ #define CHIP_CL5428 SVGA_TYPE(V_CIRRUS,12) /* Cirrus 5428 */ ! #define CHIP_CL5429 SVGA_TYPE(V_CIRRUS,13) /* Cirrus 5429 */ ! #define CHIP_CL543X SVGA_TYPE(V_CIRRUS,14) /* Cirrus 543x */ ! #define CHIP_CL6205 SVGA_TYPE(V_CIRRUS,15) /* Cirrus 6205 */ ! #define CHIP_CL6215 SVGA_TYPE(V_CIRRUS,16) /* Cirrus 6215 */ ! #define CHIP_CL6225 SVGA_TYPE(V_CIRRUS,17) /* Cirrus 6225 */ ! #define CHIP_CL6235 SVGA_TYPE(V_CIRRUS,18) /* Cirrus 6235 */ ! #define CHIP_CL5410 SVGA_TYPE(V_CIRRUS,19) /* Cirrus 6510 */ ! #define CHIP_CL6410 SVGA_TYPE(V_CIRRUS,20) /* Cirrus 6410 */ ! #define CHIP_CL6412 SVGA_TYPE(V_CIRRUS,21) /* Cirrus 6412 */ ! #define CHIP_CL6420A SVGA_TYPE(V_CIRRUS,22) /* Cirrus 6420A */ ! #define CHIP_CL6420B SVGA_TYPE(V_CIRRUS,23) /* Cirrus 6420B */ ! #define CHIP_CL6440 SVGA_TYPE(V_CIRRUS,24) /* Cirrus 6440 */ #define CHIP_CPQ_UNK SVGA_TYPE(V_COMPAQ,0) /* Compaq unknown */ #define CHIP_CPQ_IVGS SVGA_TYPE(V_COMPAQ,1) /* Compaq Int Vid Gr Sys*/ #define CHIP_CPQ_AVGA SVGA_TYPE(V_COMPAQ,2) /* Compaq Advanced VGA */ *************** *** 465,471 **** #define CHIP_ET4000 SVGA_TYPE(V_TSENG,2) /* Tseng ET4000 */ #define CHIP_ET4000W32 SVGA_TYPE(V_TSENG,3) /* Tseng ET4000/W32 */ #define CHIP_ET4000W32I SVGA_TYPE(V_TSENG,4) /* Tseng ET4000/W32i */ ! #define CHIP_ET4000W32P SVGA_TYPE(V_TSENG,5) /* Tseng ET4000/W32p */ #define CHIP_UMC_408 SVGA_TYPE(V_UMC,0) /* UMC 85c408 */ #define CHIP_V7_UNKNOWN SVGA_TYPE(V_VIDEO7,0) /* Video7 unknown */ #define CHIP_V7_FWRITE SVGA_TYPE(V_VIDEO7,1) /* Video7 Fastwrite/VRAM*/ --- 468,475 ---- #define CHIP_ET4000 SVGA_TYPE(V_TSENG,2) /* Tseng ET4000 */ #define CHIP_ET4000W32 SVGA_TYPE(V_TSENG,3) /* Tseng ET4000/W32 */ #define CHIP_ET4000W32I SVGA_TYPE(V_TSENG,4) /* Tseng ET4000/W32i */ ! #define CHIP_ET4KW32P_A SVGA_TYPE(V_TSENG,5) /* Tseng ET4000/W32p rA */ ! #define CHIP_ET4KW32P_O SVGA_TYPE(V_TSENG,6) /* Tseng ET4000/W32p oth*/ #define CHIP_UMC_408 SVGA_TYPE(V_UMC,0) /* UMC 85c408 */ #define CHIP_V7_UNKNOWN SVGA_TYPE(V_VIDEO7,0) /* Video7 unknown */ #define CHIP_V7_FWRITE SVGA_TYPE(V_VIDEO7,1) /* Video7 Fastwrite/VRAM*/ *************** *** 487,495 **** #define CHIP_WD_90C22 SVGA_TYPE(V_WD,7) /* WD 90C22 */ #define CHIP_WD_90C24 SVGA_TYPE(V_WD,8) /* WD 90C24 */ #define CHIP_WD_90C26 SVGA_TYPE(V_WD,9) /* WD 90C26 */ ! #define CHIP_WD_90C30 SVGA_TYPE(V_WD,10) /* WD 90C30 */ ! #define CHIP_WD_90C31 SVGA_TYPE(V_WD,11) /* WD 90C31 */ ! #define CHIP_WD_90C33 SVGA_TYPE(V_WD,12) /* WD 90C33 */ #define CHIP_WEIT_UNK SVGA_TYPE(V_WEITEK,0) /* Weitek unknown */ #define CHIP_WEIT_5086 SVGA_TYPE(V_WEITEK,1) /* Weitek 5086 */ #define CHIP_WEIT_5186 SVGA_TYPE(V_WEITEK,2) /* Weitek 5186 */ --- 491,500 ---- #define CHIP_WD_90C22 SVGA_TYPE(V_WD,7) /* WD 90C22 */ #define CHIP_WD_90C24 SVGA_TYPE(V_WD,8) /* WD 90C24 */ #define CHIP_WD_90C26 SVGA_TYPE(V_WD,9) /* WD 90C26 */ ! #define CHIP_WD_90C27 SVGA_TYPE(V_WD,10) /* WD 90C27 (guess) */ ! #define CHIP_WD_90C30 SVGA_TYPE(V_WD,11) /* WD 90C30 */ ! #define CHIP_WD_90C31 SVGA_TYPE(V_WD,12) /* WD 90C31 */ ! #define CHIP_WD_90C33 SVGA_TYPE(V_WD,13) /* WD 90C33 */ #define CHIP_WEIT_UNK SVGA_TYPE(V_WEITEK,0) /* Weitek unknown */ #define CHIP_WEIT_5086 SVGA_TYPE(V_WEITEK,1) /* Weitek 5086 */ #define CHIP_WEIT_5186 SVGA_TYPE(V_WEITEK,2) /* Weitek 5186 */ diff -c mit/server/ddx/x386/SuperProbe/RamDac.c:2.10 mit/server/ddx/x386/SuperProbe/RamDac.c:2.11 *** mit/server/ddx/x386/SuperProbe/RamDac.c:2.10 Wed May 4 22:53:32 1994 --- mit/server/ddx/x386/SuperProbe/RamDac.c Wed May 4 22:53:32 1994 *************** *** 21,27 **** * */ ! /* $XFree86: mit/server/ddx/x386/SuperProbe/RamDac.c,v 2.10 1994/03/05 01:58:49 dawes Exp $ */ #include "Probe.h" --- 21,27 ---- * */ ! /* $XFree86: mit/server/ddx/x386/SuperProbe/RamDac.c,v 2.11 1994/04/15 05:09:47 dawes Exp $ */ #include "Probe.h" *************** *** 338,344 **** int Chipset; int *RamDac; { ! Byte x, y, z, u, v, oldcomm, oldpel, notcomm; Bool dac8, dac8now; *RamDac = DAC_STANDARD; --- 338,344 ---- int Chipset; int *RamDac; { ! Byte x, y, z, u, v, oldcomm, oldpel, notcomm, tmp; Bool dac8, dac8now; *RamDac = DAC_STANDARD; *************** *** 524,531 **** } else { dactocomm(); ! outp(0x3C6, (oldcomm | 0x02) & 0xFE); dac8now = Width8Check(); if (dac8now) { --- 524,534 ---- } else { + (void) Width8Check(); dactocomm(); ! tmp = inp(0x3C6); ! dactocomm(); ! outp(0x3C6, (tmp | 0x02) & 0xFE); dac8now = Width8Check(); if (dac8now) { diff -c mit/server/ddx/x386/SuperProbe/SuperProbe.man:2.8 mit/server/ddx/x386/SuperProbe/SuperProbe.man:2.9 *** mit/server/ddx/x386/SuperProbe/SuperProbe.man:2.8 Wed May 4 22:53:33 1994 --- mit/server/ddx/x386/SuperProbe/SuperProbe.man Wed May 4 22:53:33 1994 *************** *** 1,5 **** ! .\" $XFree86: mit/server/ddx/x386/SuperProbe/SuperProbe.man,v 2.8 1994/03/05 08:23:05 dawes Exp $ ! .TH SuperProbe 1 "Version 2.0" "" .SH NAME SuperProbe - probe for and identify installed video hardware. .SH SYNOPSIS --- 1,5 ---- ! .\" $XFree86: mit/server/ddx/x386/SuperProbe/SuperProbe.man,v 2.9 1994/04/15 05:09:49 dawes Exp $ ! .TH SuperProbe 1 "Version 2.1" "" .SH NAME SuperProbe - probe for and identify installed video hardware. .SH SYNOPSIS diff -c mit/server/ddx/x386/SuperProbe/Tseng.c:2.6 mit/server/ddx/x386/SuperProbe/Tseng.c:2.8 *** mit/server/ddx/x386/SuperProbe/Tseng.c:2.6 Wed May 4 22:53:33 1994 --- mit/server/ddx/x386/SuperProbe/Tseng.c Wed May 4 22:53:33 1994 *************** *** 21,27 **** * */ ! /* $XFree86: mit/server/ddx/x386/SuperProbe/Tseng.c,v 2.6 1994/03/02 08:04:57 dawes Exp $ */ #include "Probe.h" --- 21,27 ---- * */ ! /* $XFree86: mit/server/ddx/x386/SuperProbe/Tseng.c,v 2.8 1994/05/03 08:09:44 dawes Exp $ */ #include "Probe.h" *************** *** 71,81 **** case 0x00: *Chipset = CHIP_ET4000W32; break; case 0x02: ! *Chipset = CHIP_ET4000W32P; break; ! case 0x03: ! *Chipset = CHIP_ET4000W32I; break; default: Chip_data = ver >> 4; --- 71,84 ---- case 0x00: *Chipset = CHIP_ET4000W32; break; + case 0x01: + *Chipset = CHIP_ET4000W32I; + break; case 0x02: ! *Chipset = CHIP_ET4KW32P_A; break; ! case 0x05: ! *Chipset = CHIP_ET4KW32P_O; break; default: Chip_data = ver >> 4; *************** *** 121,126 **** --- 124,132 ---- */ switch (Chipset) { + case CHIP_ET3000: + Mem = 512; + break; case CHIP_ET4000: switch (rdinx(CRTC_IDX, 0x37) & 0x0B) { *************** *** 138,144 **** break; case CHIP_ET4000W32: case CHIP_ET4000W32I: ! case CHIP_ET4000W32P: switch (rdinx(CRTC_IDX, 0x37) & 0x09) { case 0x00: --- 144,151 ---- break; case CHIP_ET4000W32: case CHIP_ET4000W32I: ! case CHIP_ET4KW32P_A: ! case CHIP_ET4KW32P_O: switch (rdinx(CRTC_IDX, 0x37) & 0x09) { case 0x00: diff -c mit/server/ddx/x386/SuperProbe/WD.c:2.5 mit/server/ddx/x386/SuperProbe/WD.c:2.6 *** mit/server/ddx/x386/SuperProbe/WD.c:2.5 Wed May 4 22:53:33 1994 --- mit/server/ddx/x386/SuperProbe/WD.c Wed May 4 22:53:33 1994 *************** *** 21,27 **** * */ ! /* $XFree86: mit/server/ddx/x386/SuperProbe/WD.c,v 2.5 1994/03/02 08:05:00 dawes Exp $ */ #include "Probe.h" --- 21,27 ---- * */ ! /* $XFree86: mit/server/ddx/x386/SuperProbe/WD.c,v 2.6 1994/04/15 05:09:51 dawes Exp $ */ #include "Probe.h" *************** *** 44,50 **** Bool Probe_WD(Chipset) int *Chipset; { ! Byte old, old1, old2; Word ver; Bool result = FALSE; --- 44,50 ---- Bool Probe_WD(Chipset) int *Chipset; { ! Byte old, old1, old2, old3; Word ver; Bool result = FALSE; *************** *** 98,103 **** --- 98,105 ---- } else if (testinx2(SEQ_IDX, 0x14, 0x0F)) { + old3 = rdinx(CRTC_IDX, 0x34); + wrinx(CRTC_IDX, 0x34, 0x00); ver = ((rdinx(CRTC_IDX, 0x36) << 8) | (rdinx(CRTC_IDX, 0x37))); switch (ver) *************** *** 108,113 **** --- 110,118 ---- case 0x3236: *Chipset = CHIP_WD_90C26; break; + case 0x3237: /* Guess */ + *Chipset = CHIP_WD_90C27; + break; case 0x3330: *Chipset = CHIP_WD_90C30; break; *************** *** 122,127 **** --- 127,133 ---- *Chipset = CHIP_WD_UNK; break; } + wrinx(CRTC_IDX, 0x34, old3); } else if (!testinx2(0x3C4, 0x10, 0x04)) { diff -c mit/server/ddx/x386/accel/ibm8514/ibm8514fs.c:2.3 mit/server/ddx/x386/accel/ibm8514/ibm8514fs.c:2.4 *** mit/server/ddx/x386/accel/ibm8514/ibm8514fs.c:2.3 Wed May 4 22:53:38 1994 --- mit/server/ddx/x386/accel/ibm8514/ibm8514fs.c Wed May 4 22:53:38 1994 *************** *** 62,68 **** ******************************************************************/ ! /* $XFree86: mit/server/ddx/x386/accel/ibm8514/ibm8514fs.c,v 2.3 1993/11/24 12:33:10 dawes Exp $ */ #include "X.h" #include "Xmd.h" --- 62,68 ---- ******************************************************************/ ! /* $XFree86: mit/server/ddx/x386/accel/ibm8514/ibm8514fs.c,v 2.4 1994/04/06 06:14:48 dawes Exp $ */ #include "X.h" #include "Xmd.h" *************** *** 90,95 **** --- 90,97 ---- int n; /* number of spans to fill */ register DDXPointPtr ppt; /* pointer to list of start points */ register int *pwidth; /* pointer to list of n widths */ + DDXPointPtr initPpt; + int *initPwidth; /* 4-5-93 TCG : is VT visible */ if (!x386VTSema) *************** *** 120,127 **** return; n = nInit * miFindMaxBand(((cfbPrivGC *)(pGC->devPrivates[cfbGCPrivateIndex].ptr))->pCompositeClip); ! pwidth = (int *)ALLOCATE_LOCAL(n * sizeof(int)); ! ppt = (DDXPointRec *)ALLOCATE_LOCAL(n * sizeof(DDXPointRec)); if(!ppt || !pwidth) { if (ppt) DEALLOCATE_LOCAL(ppt); --- 122,129 ---- return; n = nInit * miFindMaxBand(((cfbPrivGC *)(pGC->devPrivates[cfbGCPrivateIndex].ptr))->pCompositeClip); ! initPwidth = pwidth = (int *)ALLOCATE_LOCAL(n * sizeof(int)); ! initPpt = ppt = (DDXPointRec *)ALLOCATE_LOCAL(n * sizeof(DDXPointRec)); if(!ppt || !pwidth) { if (ppt) DEALLOCATE_LOCAL(ppt); *************** *** 153,160 **** outw(FRGD_MIX, FSS_FRGDCOL | MIX_SRC); outw(BKGD_MIX, BSS_BKGDCOL | MIX_SRC); ! DEALLOCATE_LOCAL(ppt); ! DEALLOCATE_LOCAL(pwidth); } void --- 155,162 ---- outw(FRGD_MIX, FSS_FRGDCOL | MIX_SRC); outw(BKGD_MIX, BSS_BKGDCOL | MIX_SRC); ! DEALLOCATE_LOCAL(initPpt); ! DEALLOCATE_LOCAL(initPwidth); } void *************** *** 171,176 **** --- 173,180 ---- register int *pwidth; /* pointer to list of n widths */ int xrot, yrot, width, height, pixWidth; PixmapPtr pPix = pGC->tile.pixmap; + DDXPointPtr initPpt; + int *initPwidth; /* 4-5-93 TCG : is VT visible */ if (!x386VTSema) *************** *** 201,208 **** return; n = nInit * miFindMaxBand(((cfbPrivGC *)(pGC->devPrivates[cfbGCPrivateIndex].ptr))->pCompositeClip); ! pwidth = (int *)ALLOCATE_LOCAL(n * sizeof(int)); ! ppt = (DDXPointRec *)ALLOCATE_LOCAL(n * sizeof(DDXPointRec)); if(!ppt || !pwidth) { if (ppt) DEALLOCATE_LOCAL(ppt); --- 205,212 ---- return; n = nInit * miFindMaxBand(((cfbPrivGC *)(pGC->devPrivates[cfbGCPrivateIndex].ptr))->pCompositeClip); ! initPwidth = pwidth = (int *)ALLOCATE_LOCAL(n * sizeof(int)); ! initPpt = ppt = (DDXPointRec *)ALLOCATE_LOCAL(n * sizeof(DDXPointRec)); if(!ppt || !pwidth) { if (ppt) DEALLOCATE_LOCAL(ppt); *************** *** 244,251 **** } } ! DEALLOCATE_LOCAL(ppt); ! DEALLOCATE_LOCAL(pwidth); } void --- 248,255 ---- } } ! DEALLOCATE_LOCAL(initPpt); ! DEALLOCATE_LOCAL(initPwidth); } void *************** *** 262,267 **** --- 266,273 ---- register int *pwidth; /* pointer to list of n widths */ int xrot, yrot, width, height, pixWidth; PixmapPtr pPix = pGC->stipple; + DDXPointPtr initPpt; + int *initPwidth; /* 4-5-93 TCG : is VT visible */ if (!x386VTSema) *************** *** 292,299 **** return; n = nInit * miFindMaxBand(((cfbPrivGC *)(pGC->devPrivates[cfbGCPrivateIndex].ptr))->pCompositeClip); ! pwidth = (int *)ALLOCATE_LOCAL(n * sizeof(int)); ! ppt = (DDXPointRec *)ALLOCATE_LOCAL(n * sizeof(DDXPointRec)); if(!ppt || !pwidth) { if (ppt) DEALLOCATE_LOCAL(ppt); --- 298,305 ---- return; n = nInit * miFindMaxBand(((cfbPrivGC *)(pGC->devPrivates[cfbGCPrivateIndex].ptr))->pCompositeClip); ! initPwidth = pwidth = (int *)ALLOCATE_LOCAL(n * sizeof(int)); ! initPpt = ppt = (DDXPointRec *)ALLOCATE_LOCAL(n * sizeof(DDXPointRec)); if(!ppt || !pwidth) { if (ppt) DEALLOCATE_LOCAL(ppt); *************** *** 336,343 **** } } ! DEALLOCATE_LOCAL(ppt); ! DEALLOCATE_LOCAL(pwidth); } void --- 342,349 ---- } } ! DEALLOCATE_LOCAL(initPpt); ! DEALLOCATE_LOCAL(initPwidth); } void *************** *** 354,359 **** --- 360,367 ---- register int *pwidth; /* pointer to list of n widths */ int xrot, yrot, width, height, pixWidth; PixmapPtr pPix = pGC->stipple; + DDXPointPtr initPpt; + int *initPwidth; /* 4-5-93 TCG : is VT visible */ if (!x386VTSema) *************** *** 384,391 **** return; n = nInit * miFindMaxBand(((cfbPrivGC *)(pGC->devPrivates[cfbGCPrivateIndex].ptr))->pCompositeClip); ! pwidth = (int *)ALLOCATE_LOCAL(n * sizeof(int)); ! ppt = (DDXPointRec *)ALLOCATE_LOCAL(n * sizeof(DDXPointRec)); if(!ppt || !pwidth) { if (ppt) DEALLOCATE_LOCAL(ppt); --- 392,399 ---- return; n = nInit * miFindMaxBand(((cfbPrivGC *)(pGC->devPrivates[cfbGCPrivateIndex].ptr))->pCompositeClip); ! initPwidth = pwidth = (int *)ALLOCATE_LOCAL(n * sizeof(int)); ! initPpt = ppt = (DDXPointRec *)ALLOCATE_LOCAL(n * sizeof(DDXPointRec)); if(!ppt || !pwidth) { if (ppt) DEALLOCATE_LOCAL(ppt); *************** *** 429,434 **** } } ! DEALLOCATE_LOCAL(ppt); ! DEALLOCATE_LOCAL(pwidth); } --- 437,442 ---- } } ! DEALLOCATE_LOCAL(initPpt); ! DEALLOCATE_LOCAL(initPwidth); } diff -c mit/server/ddx/x386/accel/mach32/mach32.c:2.47 mit/server/ddx/x386/accel/mach32/mach32.c:2.48 *** mit/server/ddx/x386/accel/mach32/mach32.c:2.47 Wed May 4 22:53:41 1994 --- mit/server/ddx/x386/accel/mach32/mach32.c Wed May 4 22:53:41 1994 *************** *** 29,35 **** * Header: /proj/X11/mit/server/ddx/x386/vga/RCS/vga.c,v 1.2 1991/06/27 00:02:49 root Exp */ ! /* $XFree86: mit/server/ddx/x386/accel/mach32/mach32.c,v 2.47 1994/03/03 12:43:18 dawes Exp $ */ #include "X.h" #include "Xmd.h" --- 29,35 ---- * Header: /proj/X11/mit/server/ddx/x386/vga/RCS/vga.c,v 1.2 1991/06/27 00:02:49 root Exp */ ! /* $XFree86: mit/server/ddx/x386/accel/mach32/mach32.c,v 2.48 1994/05/04 10:29:38 dawes Exp $ */ #include "X.h" #include "Xmd.h" *************** *** 731,737 **** PixmapPtr pspix; ScreenPtr pScreen = savepScreen; ! pspix = (PixmapPtr)pScreen->devPrivate; if (enter) { if (vgaBase) --- 731,738 ---- PixmapPtr pspix; ScreenPtr pScreen = savepScreen; ! if (!x386Exiting && !x386Resetting) ! pspix = (PixmapPtr)pScreen->devPrivate; if (enter) { if (vgaBase) diff -c mit/server/ddx/x386/accel/mach32/mach32fs.c:2.3 mit/server/ddx/x386/accel/mach32/mach32fs.c:2.4 *** mit/server/ddx/x386/accel/mach32/mach32fs.c:2.3 Wed May 4 22:53:41 1994 --- mit/server/ddx/x386/accel/mach32/mach32fs.c Wed May 4 22:53:41 1994 *************** *** 64,70 **** ******************************************************************/ ! /* $XFree86: mit/server/ddx/x386/accel/mach32/mach32fs.c,v 2.3 1993/09/23 15:44:09 dawes Exp $ */ #include "X.h" #include "Xmd.h" --- 64,70 ---- ******************************************************************/ ! /* $XFree86: mit/server/ddx/x386/accel/mach32/mach32fs.c,v 2.4 1994/04/06 06:14:58 dawes Exp $ */ #include "X.h" #include "Xmd.h" *************** *** 92,97 **** --- 92,99 ---- int n; /* number of spans to fill */ register DDXPointPtr ppt; /* pointer to list of start points */ register int *pwidth; /* pointer to list of n widths */ + DDXPointPtr initPpt; + int *initPwidth; if (!x386VTSema) { *************** *** 121,128 **** return; n = nInit * miFindMaxBand(((cfbPrivGC *)(pGC->devPrivates[cfbGCPrivateIndex].ptr))->pCompositeClip); ! pwidth = (int *)ALLOCATE_LOCAL(n * sizeof(int)); ! ppt = (DDXPointRec *)ALLOCATE_LOCAL(n * sizeof(DDXPointRec)); if(!ppt || !pwidth) { if (ppt) DEALLOCATE_LOCAL(ppt); --- 123,130 ---- return; n = nInit * miFindMaxBand(((cfbPrivGC *)(pGC->devPrivates[cfbGCPrivateIndex].ptr))->pCompositeClip); ! initPwidth = pwidth = (int *)ALLOCATE_LOCAL(n * sizeof(int)); ! initPpt = ppt = (DDXPointRec *)ALLOCATE_LOCAL(n * sizeof(DDXPointRec)); if(!ppt || !pwidth) { if (ppt) DEALLOCATE_LOCAL(ppt); *************** *** 154,161 **** outw(FRGD_MIX, FSS_FRGDCOL | MIX_SRC); outw(BKGD_MIX, BSS_BKGDCOL | MIX_SRC); ! DEALLOCATE_LOCAL(ppt); ! DEALLOCATE_LOCAL(pwidth); WaitIdleEmpty(); /* Make sure that all commands have finished */ } --- 156,163 ---- outw(FRGD_MIX, FSS_FRGDCOL | MIX_SRC); outw(BKGD_MIX, BSS_BKGDCOL | MIX_SRC); ! DEALLOCATE_LOCAL(initPpt); ! DEALLOCATE_LOCAL(initPwidth); WaitIdleEmpty(); /* Make sure that all commands have finished */ } *************** *** 174,179 **** --- 176,183 ---- register int *pwidth; /* pointer to list of n widths */ int xrot, yrot, width, height, pixWidth; PixmapPtr pPix = pGC->tile.pixmap; + DDXPointPtr initPpt; + int *initPwidth; if (!x386VTSema) { *************** *** 203,210 **** return; n = nInit * miFindMaxBand(((cfbPrivGC *)(pGC->devPrivates[cfbGCPrivateIndex].ptr))->pCompositeClip); ! pwidth = (int *)ALLOCATE_LOCAL(n * sizeof(int)); ! ppt = (DDXPointRec *)ALLOCATE_LOCAL(n * sizeof(DDXPointRec)); if(!ppt || !pwidth) { if (ppt) DEALLOCATE_LOCAL(ppt); --- 207,214 ---- return; n = nInit * miFindMaxBand(((cfbPrivGC *)(pGC->devPrivates[cfbGCPrivateIndex].ptr))->pCompositeClip); ! initPwidth = pwidth = (int *)ALLOCATE_LOCAL(n * sizeof(int)); ! initPpt = ppt = (DDXPointRec *)ALLOCATE_LOCAL(n * sizeof(DDXPointRec)); if(!ppt || !pwidth) { if (ppt) DEALLOCATE_LOCAL(ppt); *************** *** 252,259 **** } } ! DEALLOCATE_LOCAL(ppt); ! DEALLOCATE_LOCAL(pwidth); WaitIdleEmpty(); /* Make sure that all commands have finished */ } --- 256,263 ---- } } ! DEALLOCATE_LOCAL(initPpt); ! DEALLOCATE_LOCAL(initPwidth); WaitIdleEmpty(); /* Make sure that all commands have finished */ } *************** *** 272,277 **** --- 276,283 ---- register int *pwidth; /* pointer to list of n widths */ int xrot, yrot, width, height, pixWidth; PixmapPtr pPix = pGC->stipple; + DDXPointPtr initPpt; + int *initPwidth; if (!x386VTSema) { *************** *** 301,308 **** return; n = nInit * miFindMaxBand(((cfbPrivGC *)(pGC->devPrivates[cfbGCPrivateIndex].ptr))->pCompositeClip); ! pwidth = (int *)ALLOCATE_LOCAL(n * sizeof(int)); ! ppt = (DDXPointRec *)ALLOCATE_LOCAL(n * sizeof(DDXPointRec)); if(!ppt || !pwidth) { if (ppt) DEALLOCATE_LOCAL(ppt); --- 307,314 ---- return; n = nInit * miFindMaxBand(((cfbPrivGC *)(pGC->devPrivates[cfbGCPrivateIndex].ptr))->pCompositeClip); ! initPwidth = pwidth = (int *)ALLOCATE_LOCAL(n * sizeof(int)); ! initPpt = ppt = (DDXPointRec *)ALLOCATE_LOCAL(n * sizeof(DDXPointRec)); if(!ppt || !pwidth) { if (ppt) DEALLOCATE_LOCAL(ppt); *************** *** 352,359 **** } } ! DEALLOCATE_LOCAL(ppt); ! DEALLOCATE_LOCAL(pwidth); WaitIdleEmpty(); /* Make sure that all commands have finished */ } --- 358,365 ---- } } ! DEALLOCATE_LOCAL(initPpt); ! DEALLOCATE_LOCAL(initPwidth); WaitIdleEmpty(); /* Make sure that all commands have finished */ } *************** *** 372,377 **** --- 378,385 ---- register int *pwidth; /* pointer to list of n widths */ int xrot, yrot, width, height, pixWidth; PixmapPtr pPix = pGC->stipple; + DDXPointPtr initPpt; + int *initPwidth; if (!x386VTSema) { *************** *** 401,408 **** return; n = nInit * miFindMaxBand(((cfbPrivGC *)(pGC->devPrivates[cfbGCPrivateIndex].ptr))->pCompositeClip); ! pwidth = (int *)ALLOCATE_LOCAL(n * sizeof(int)); ! ppt = (DDXPointRec *)ALLOCATE_LOCAL(n * sizeof(DDXPointRec)); if(!ppt || !pwidth) { if (ppt) DEALLOCATE_LOCAL(ppt); --- 409,416 ---- return; n = nInit * miFindMaxBand(((cfbPrivGC *)(pGC->devPrivates[cfbGCPrivateIndex].ptr))->pCompositeClip); ! initPwidth = pwidth = (int *)ALLOCATE_LOCAL(n * sizeof(int)); ! initPpt = ppt = (DDXPointRec *)ALLOCATE_LOCAL(n * sizeof(DDXPointRec)); if(!ppt || !pwidth) { if (ppt) DEALLOCATE_LOCAL(ppt); *************** *** 453,460 **** } } ! DEALLOCATE_LOCAL(ppt); ! DEALLOCATE_LOCAL(pwidth); WaitIdleEmpty(); /* Make sure that all commands have finished */ } --- 461,468 ---- } } ! DEALLOCATE_LOCAL(initPpt); ! DEALLOCATE_LOCAL(initPwidth); WaitIdleEmpty(); /* Make sure that all commands have finished */ } diff -c mit/server/ddx/x386/accel/mach32/regmach32.h:2.16 mit/server/ddx/x386/accel/mach32/regmach32.h:2.17 *** mit/server/ddx/x386/accel/mach32/regmach32.h:2.16 Wed May 4 22:53:42 1994 --- mit/server/ddx/x386/accel/mach32/regmach32.h Wed May 4 22:53:42 1994 *************** *** 21,27 **** * Modified for the Mach32 by Kevin E. Martin (martin@cs.unc.edu) */ ! /* $XFree86: mit/server/ddx/x386/accel/mach32/regmach32.h,v 2.16 1994/03/03 12:43:20 dawes Exp $ */ #ifndef REGMACH32_H #define REGMACH32_H --- 21,27 ---- * Modified for the Mach32 by Kevin E. Martin (martin@cs.unc.edu) */ ! /* $XFree86: mit/server/ddx/x386/accel/mach32/regmach32.h,v 2.17 1994/04/06 06:17:39 dawes Exp $ */ #ifndef REGMACH32_H #define REGMACH32_H *************** *** 481,489 **** /* Wait until GP is idle and queue is empty */ #define WaitIdleEmpty() { while (inw(GP_STAT) & (GPBUSY | 1)); } /* * This version is for use in mach8Probe() to prevent a server hang if ! * there is no 8514/A-style chip present */ #define ProbeWaitIdleEmpty() { int i; \ for (i = 0; i < 100000; i++) \ --- 481,490 ---- /* Wait until GP is idle and queue is empty */ #define WaitIdleEmpty() { while (inw(GP_STAT) & (GPBUSY | 1)); } + #ifdef NO_PROBEWAIT_PROBLEM /* * This version is for use in mach8Probe() to prevent a server hang if ! * there is no ATI chip present */ #define ProbeWaitIdleEmpty() { int i; \ for (i = 0; i < 100000; i++) \ *************** *** 490,495 **** --- 491,499 ---- if (!(inw(GP_STAT) & (GPBUSY | 1))) \ break; \ } + #else + #define ProbeWaitIdleEmpty WaitIdleEmpty + #endif #define SKIP_2(_v) ((((_v)<<1)&0xfff8)|((_v)&0x3)|(((_v)&0x80)>>5)) diff -c mit/server/ddx/x386/accel/mach8/mach8fs.c:2.6 mit/server/ddx/x386/accel/mach8/mach8fs.c:2.7 *** mit/server/ddx/x386/accel/mach8/mach8fs.c:2.6 Wed May 4 22:53:45 1994 --- mit/server/ddx/x386/accel/mach8/mach8fs.c Wed May 4 22:53:45 1994 *************** *** 64,70 **** ******************************************************************/ ! /* $XFree86: mit/server/ddx/x386/accel/mach8/mach8fs.c,v 2.6 1994/02/01 13:51:33 dawes Exp $ */ #include "X.h" #include "Xmd.h" --- 64,70 ---- ******************************************************************/ ! /* $XFree86: mit/server/ddx/x386/accel/mach8/mach8fs.c,v 2.7 1994/04/06 06:15:11 dawes Exp $ */ #include "X.h" #include "Xmd.h" *************** *** 92,97 **** --- 92,99 ---- int n; /* number of spans to fill */ register DDXPointPtr ppt; /* pointer to list of start points */ register int *pwidth; /* pointer to list of n widths */ + DDXPointPtr initPpt; + int *initPwidth; /* 11-jun-93 TCG : is VT visible */ if (!x386VTSema) *************** *** 122,129 **** return; n = nInit * miFindMaxBand(((cfbPrivGC *)(pGC->devPrivates[cfbGCPrivateIndex].ptr))->pCompositeClip); ! pwidth = (int *)ALLOCATE_LOCAL(n * sizeof(int)); ! ppt = (DDXPointRec *)ALLOCATE_LOCAL(n * sizeof(DDXPointRec)); if(!ppt || !pwidth) { if (ppt) DEALLOCATE_LOCAL(ppt); --- 124,131 ---- return; n = nInit * miFindMaxBand(((cfbPrivGC *)(pGC->devPrivates[cfbGCPrivateIndex].ptr))->pCompositeClip); ! initPwidth = pwidth = (int *)ALLOCATE_LOCAL(n * sizeof(int)); ! initPpt = ppt = (DDXPointRec *)ALLOCATE_LOCAL(n * sizeof(DDXPointRec)); if(!ppt || !pwidth) { if (ppt) DEALLOCATE_LOCAL(ppt); *************** *** 155,162 **** outw(FRGD_MIX, FSS_FRGDCOL | MIX_SRC); outw(BKGD_MIX, BSS_BKGDCOL | MIX_SRC); ! DEALLOCATE_LOCAL(ppt); ! DEALLOCATE_LOCAL(pwidth); } void --- 157,164 ---- outw(FRGD_MIX, FSS_FRGDCOL | MIX_SRC); outw(BKGD_MIX, BSS_BKGDCOL | MIX_SRC); ! DEALLOCATE_LOCAL(initPpt); ! DEALLOCATE_LOCAL(initPwidth); } void *************** *** 173,178 **** --- 175,182 ---- register int *pwidth; /* pointer to list of n widths */ int xrot, yrot, width, height, pixWidth; PixmapPtr pPix = pGC->tile.pixmap; + DDXPointPtr initPpt; + int *initPwidth; /* 11-jun-93 TCG : is VT visible */ if (!x386VTSema) *************** *** 203,210 **** return; n = nInit * miFindMaxBand(((cfbPrivGC *)(pGC->devPrivates[cfbGCPrivateIndex].ptr))->pCompositeClip); ! pwidth = (int *)ALLOCATE_LOCAL(n * sizeof(int)); ! ppt = (DDXPointRec *)ALLOCATE_LOCAL(n * sizeof(DDXPointRec)); if(!ppt || !pwidth) { if (ppt) DEALLOCATE_LOCAL(ppt); --- 207,214 ---- return; n = nInit * miFindMaxBand(((cfbPrivGC *)(pGC->devPrivates[cfbGCPrivateIndex].ptr))->pCompositeClip); ! initPwidth = pwidth = (int *)ALLOCATE_LOCAL(n * sizeof(int)); ! initPpt = ppt = (DDXPointRec *)ALLOCATE_LOCAL(n * sizeof(DDXPointRec)); if(!ppt || !pwidth) { if (ppt) DEALLOCATE_LOCAL(ppt); *************** *** 252,259 **** } } ! DEALLOCATE_LOCAL(ppt); ! DEALLOCATE_LOCAL(pwidth); } void --- 256,263 ---- } } ! DEALLOCATE_LOCAL(initPpt); ! DEALLOCATE_LOCAL(initPwidth); } void *************** *** 270,275 **** --- 274,281 ---- register int *pwidth; /* pointer to list of n widths */ int xrot, yrot, width, height, pixWidth; PixmapPtr pPix = pGC->stipple; + DDXPointPtr initPpt; + int *initPwidth; /* 11-jun-93 TCG : is VT visible */ if (!x386VTSema) *************** *** 300,307 **** return; n = nInit * miFindMaxBand(((cfbPrivGC *)(pGC->devPrivates[cfbGCPrivateIndex].ptr))->pCompositeClip); ! pwidth = (int *)ALLOCATE_LOCAL(n * sizeof(int)); ! ppt = (DDXPointRec *)ALLOCATE_LOCAL(n * sizeof(DDXPointRec)); if(!ppt || !pwidth) { if (ppt) DEALLOCATE_LOCAL(ppt); --- 306,313 ---- return; n = nInit * miFindMaxBand(((cfbPrivGC *)(pGC->devPrivates[cfbGCPrivateIndex].ptr))->pCompositeClip); ! initPwidth = pwidth = (int *)ALLOCATE_LOCAL(n * sizeof(int)); ! initPpt = ppt = (DDXPointRec *)ALLOCATE_LOCAL(n * sizeof(DDXPointRec)); if(!ppt || !pwidth) { if (ppt) DEALLOCATE_LOCAL(ppt); *************** *** 352,359 **** } } ! DEALLOCATE_LOCAL(ppt); ! DEALLOCATE_LOCAL(pwidth); } void --- 358,365 ---- } } ! DEALLOCATE_LOCAL(initPpt); ! DEALLOCATE_LOCAL(initPwidth); } void *************** *** 370,375 **** --- 376,383 ---- register int *pwidth; /* pointer to list of n widths */ int xrot, yrot, width, height, pixWidth; PixmapPtr pPix = pGC->stipple; + DDXPointPtr initPpt; + int *initPwidth; /* 11-jun-93 TCG : is VT visible */ if (!x386VTSema) *************** *** 400,407 **** return; n = nInit * miFindMaxBand(((cfbPrivGC *)(pGC->devPrivates[cfbGCPrivateIndex].ptr))->pCompositeClip); ! pwidth = (int *)ALLOCATE_LOCAL(n * sizeof(int)); ! ppt = (DDXPointRec *)ALLOCATE_LOCAL(n * sizeof(DDXPointRec)); if(!ppt || !pwidth) { if (ppt) DEALLOCATE_LOCAL(ppt); --- 408,415 ---- return; n = nInit * miFindMaxBand(((cfbPrivGC *)(pGC->devPrivates[cfbGCPrivateIndex].ptr))->pCompositeClip); ! initPwidth = pwidth = (int *)ALLOCATE_LOCAL(n * sizeof(int)); ! initPpt = ppt = (DDXPointRec *)ALLOCATE_LOCAL(n * sizeof(DDXPointRec)); if(!ppt || !pwidth) { if (ppt) DEALLOCATE_LOCAL(ppt); *************** *** 452,457 **** } } ! DEALLOCATE_LOCAL(ppt); ! DEALLOCATE_LOCAL(pwidth); } --- 460,465 ---- } } ! DEALLOCATE_LOCAL(initPpt); ! DEALLOCATE_LOCAL(initPwidth); } diff -c mit/server/ddx/x386/accel/mach8/mach8init.c:2.10 mit/server/ddx/x386/accel/mach8/mach8init.c:2.11 *** mit/server/ddx/x386/accel/mach8/mach8init.c:2.10 Wed May 4 22:53:45 1994 --- mit/server/ddx/x386/accel/mach8/mach8init.c Wed May 4 22:53:45 1994 *************** *** 21,27 **** * and Tiago Gons (tiago@comosjn.hobby.nl) */ ! /* $XFree86: mit/server/ddx/x386/accel/mach8/mach8init.c,v 2.10 1994/02/01 14:25:03 dawes Exp $ */ #include "X.h" #include "input.h" --- 21,27 ---- * and Tiago Gons (tiago@comosjn.hobby.nl) */ ! /* $XFree86: mit/server/ddx/x386/accel/mach8/mach8init.c,v 2.11 1994/04/26 07:27:19 dawes Exp $ */ #include "X.h" #include "input.h" *************** *** 208,222 **** /* Get board status information */ i = inw(SUBSYS_STAT); - - /* Check if monitor capable of 1024x768 is attached. - * If not, print error message and abort. - * In this case, we want an IBM 8514 compatible monitor. - */ - if ((i & MONITORID_MASK) != MONITORID_8514) { - mach8CleanUp(); - FatalError("Attached monitor doesn't report 8514 ID !\n"); - } /* Determine the pixel depth of the board. Then, based on depth, * set the memory control register use the appropriate CAS (VRAM --- 208,213 ---- diff -c mit/server/ddx/x386/accel/s3/regs3.h:2.13 mit/server/ddx/x386/accel/s3/regs3.h:2.14 *** mit/server/ddx/x386/accel/s3/regs3.h:2.13 Wed May 4 22:53:49 1994 --- mit/server/ddx/x386/accel/s3/regs3.h Wed May 4 22:53:49 1994 *************** *** 19,25 **** * */ ! /* $XFree86: mit/server/ddx/x386/accel/s3/regs3.h,v 2.13 1994/03/08 10:28:52 dawes Exp $ */ #ifndef _S3_H #define _S3_H --- 19,25 ---- * */ ! /* $XFree86: mit/server/ddx/x386/accel/s3/regs3.h,v 2.14 1994/04/06 04:34:26 dawes Exp $ */ #ifndef _S3_H #define _S3_H *************** *** 74,80 **** #define S3_801_SERIES(chip) ((chip&0xf0)==0xa0) #define S3_801_I_SERIES(chip) (S3_801_SERIES(chip) && ((chip) & 0x08)) #define S3_801_REV_C(chip) (S3_801_SERIES(chip) && ((chip) & 0x07) >= 2) ! #define S3_928_SERIES(chip) (((chip&0xf0)==0x90)||((chip&0xf0)==0xb0)) #define S3_928_REV_E(chip) (S3_928_SERIES(chip) && ((chip) & 0x0F) >= 4) #define S3_801_928_SERIES(chip) (S3_801_SERIES(chip)||S3_928_SERIES(chip)) #define S3_8XX_9XX_SERIES(chip) (S3_911_SERIES(chip)||S3_801_928_SERIES(chip)) --- 74,81 ---- #define S3_801_SERIES(chip) ((chip&0xf0)==0xa0) #define S3_801_I_SERIES(chip) (S3_801_SERIES(chip) && ((chip) & 0x08)) #define S3_801_REV_C(chip) (S3_801_SERIES(chip) && ((chip) & 0x07) >= 2) ! #define S3_928_P(chip) ((chip&0xf0)==0xb0) ! #define S3_928_SERIES(chip) (((chip&0xf0)==0x90)||S3_928_P(chip)) #define S3_928_REV_E(chip) (S3_928_SERIES(chip) && ((chip) & 0x0F) >= 4) #define S3_801_928_SERIES(chip) (S3_801_SERIES(chip)||S3_928_SERIES(chip)) #define S3_8XX_9XX_SERIES(chip) (S3_911_SERIES(chip)||S3_801_928_SERIES(chip)) diff -c mit/server/ddx/x386/accel/s3/s3.c:2.79 mit/server/ddx/x386/accel/s3/s3.c:2.87 *** mit/server/ddx/x386/accel/s3/s3.c:2.79 Wed May 4 22:53:50 1994 --- mit/server/ddx/x386/accel/s3/s3.c Wed May 4 22:53:50 1994 *************** *** 31,37 **** * Id: s3.c,v 2.6 1993/08/09 06:17:57 jon Exp jon */ ! /* $XFree86: mit/server/ddx/x386/accel/s3/s3.c,v 2.79 1994/03/08 10:28:57 dawes Exp $ */ #include "cfb.h" #include "pixmapstr.h" --- 31,37 ---- * Id: s3.c,v 2.6 1993/08/09 06:17:57 jon Exp jon */ ! /* $XFree86: mit/server/ddx/x386/accel/s3/s3.c,v 2.87 1994/04/26 07:27:31 dawes Exp $ */ #include "cfb.h" #include "pixmapstr.h" *************** *** 138,143 **** --- 138,144 ---- Bool s3LinearAperture = FALSE; Bool s3Mmio928 = FALSE; Bool s3DAC8Bit = FALSE; + Bool s3DACSyncOnGreen = FALSE; unsigned char s3LinApOpt; int s3BankSize; int s3DisplayWidth; *************** *** 166,171 **** --- 167,173 ---- int s3RamdacType = UNKNOWN_DAC; Bool s3UsingPixMux = FALSE; Bool s3Bt485PixMux = FALSE; + Bool s3ClockDouble = FALSE; /* *************** *** 335,344 **** OFLG_SET(OPTION_SLOW_DRAM, &validOptions); OFLG_SET(OPTION_ATT490_1, &validOptions); OFLG_SET(OPTION_SC15025, &validOptions); OFLG_SET(OPTION_SPEA_MERCURY, &validOptions); - #ifdef NUMNINETEST OFLG_SET(OPTION_NUMBER_NINE, &validOptions); ! #endif xf86VerifyOptions(&validOptions, &s3InfoRec); if (OFLG_ISSET(OPTION_MEM_ACCESS, &s3InfoRec.options)) { ErrorF("%s: Warning: the \"memaccess\" option is now redundant\n", --- 337,346 ---- OFLG_SET(OPTION_SLOW_DRAM, &validOptions); OFLG_SET(OPTION_ATT490_1, &validOptions); OFLG_SET(OPTION_SC15025, &validOptions); + OFLG_SET(OPTION_SYNC_ON_GREEN, &validOptions); OFLG_SET(OPTION_SPEA_MERCURY, &validOptions); OFLG_SET(OPTION_NUMBER_NINE, &validOptions); ! OFLG_SET(OPTION_STB_PEGASUS, &validOptions); xf86VerifyOptions(&validOptions, &s3InfoRec); if (OFLG_ISSET(OPTION_MEM_ACCESS, &s3InfoRec.options)) { ErrorF("%s: Warning: the \"memaccess\" option is now redundant\n", *************** *** 346,358 **** ErrorF("\tIt will be removed in the next release\n"); } ! s3Localbus = ((config & 0x03) <= 1); /* LocalBus or EISA */ if (x386Verbose) { switch (config & 0x03) { case 0: ! ErrorF("%s %s: card type: EISA\n", ! XCONFIG_PROBED, s3InfoRec.name); break; case 1: ErrorF("%s %s: card type: 386/486 localbus\n", --- 348,364 ---- ErrorF("\tIt will be removed in the next release\n"); } ! s3Localbus = ((config & 0x03) <= 1); /* LocalBus or EISA or PCI */ if (x386Verbose) { switch (config & 0x03) { case 0: ! if (S3_928_P(config)) ! ErrorF("%s %s: card type: PCI\n", ! XCONFIG_PROBED, s3InfoRec.name); ! else ! ErrorF("%s %s: card type: EISA\n", ! XCONFIG_PROBED, s3InfoRec.name); break; case 1: ErrorF("%s %s: card type: 386/486 localbus\n", *************** *** 385,391 **** else ErrorF("rev A or B\n"); } else if (S3_928_SERIES(s3ChipId)) { ! if (S3_928_REV_E(s3ChipId)) ErrorF("%s %s: chipset: 928, rev E or above\n", XCONFIG_PROBED, s3InfoRec.name); else --- 391,400 ---- else ErrorF("rev A or B\n"); } else if (S3_928_SERIES(s3ChipId)) { ! if (S3_928_P(s3ChipId)) ! ErrorF("%s %s: chipset: 928-P\n", ! XCONFIG_PROBED, s3InfoRec.name); ! else if (S3_928_REV_E(s3ChipId)) ErrorF("%s %s: chipset: 928, rev E or above\n", XCONFIG_PROBED, s3InfoRec.name); else *************** *** 601,612 **** } } - /* So far pixmux is only supported on the SPEA Mercury */ if (DAC_IS_BT485_SERIES && ( ! #ifdef NUMNINETEST OFLG_ISSET(OPTION_NUMBER_NINE, &s3InfoRec.options) || - #endif OFLG_ISSET(OPTION_SPEA_MERCURY, &s3InfoRec.options))) s3Bt485PixMux = TRUE; --- 610,619 ---- } } if (DAC_IS_BT485_SERIES && ( ! OFLG_ISSET(OPTION_STB_PEGASUS, &s3InfoRec.options) || OFLG_ISSET(OPTION_NUMBER_NINE, &s3InfoRec.options) || OFLG_ISSET(OPTION_SPEA_MERCURY, &s3InfoRec.options))) s3Bt485PixMux = TRUE; *************** *** 650,657 **** if (OFLG_ISSET(OPTION_SPEA_MERCURY, &s3InfoRec.options)) { nonMuxMaxClock = 67500; /* Doubling only works in mux mode */ nonMuxMaxMemory = 1024; /* Can't access more without mux */ pixMuxLimitedWidths = FALSE; ! /* pixMuxMinWidth = 800; Not sure if this is OK */ } else { nonMuxMaxClock = 85000; } --- 657,675 ---- if (OFLG_ISSET(OPTION_SPEA_MERCURY, &s3InfoRec.options)) { nonMuxMaxClock = 67500; /* Doubling only works in mux mode */ nonMuxMaxMemory = 1024; /* Can't access more without mux */ + allowPixMuxSwitching = TRUE; pixMuxLimitedWidths = FALSE; ! pixMuxMinWidth = 1024; ! } else if (OFLG_ISSET(OPTION_NUMBER_NINE, &s3InfoRec.options)) { ! nonMuxMaxClock = 67500; ! allowPixMuxSwitching = TRUE; ! pixMuxLimitedWidths = TRUE; ! pixMuxMinWidth = 800; ! } else if (OFLG_ISSET(OPTION_STB_PEGASUS, &s3InfoRec.options)) { ! nonMuxMaxClock = 67500; ! allowPixMuxSwitching = TRUE; ! pixMuxLimitedWidths = FALSE; ! pixMuxMinWidth = 1024; } else { nonMuxMaxClock = 85000; } *************** *** 826,845 **** } while (pMode != pEnd); } ! if (DAC_IS_TI3020 && ! OFLG_ISSET(OPTION_DAC_8_BIT, &s3InfoRec.options)) ! s3DAC8Bit = TRUE; if (OFLG_ISSET(OPTION_ATT490_1, &s3InfoRec.options)) { if (x386Verbose) ErrorF("%s %s: Using AT&T 20C490/1 RAMDAC\n", XCONFIG_GIVEN, s3InfoRec.name); ! if (OFLG_ISSET(OPTION_DAC_8_BIT, &s3InfoRec.options)) { s3DAC8Bit = TRUE; - if (x386Verbose) - ErrorF("%s %s: Putting RAMDAC into 8-bit mode\n", - XCONFIG_GIVEN, s3InfoRec.name); - } } if (OFLG_ISSET(OPTION_SC15025, &s3InfoRec.options)) { --- 844,866 ---- } while (pMode != pEnd); } ! if (DAC_IS_BT485_SERIES || DAC_IS_TI3020) { ! if (OFLG_ISSET(OPTION_DAC_8_BIT, &s3InfoRec.options)) ! s3DAC8Bit = TRUE; ! if (OFLG_ISSET(OPTION_SYNC_ON_GREEN, &s3InfoRec.options)) { ! s3DACSyncOnGreen = TRUE; ! if (x386Verbose) ! ErrorF("%s %s: Putting RAMDAC into sync-on-green mode\n", ! XCONFIG_GIVEN, s3InfoRec.name); ! } ! } if (OFLG_ISSET(OPTION_ATT490_1, &s3InfoRec.options)) { if (x386Verbose) ErrorF("%s %s: Using AT&T 20C490/1 RAMDAC\n", XCONFIG_GIVEN, s3InfoRec.name); ! if (OFLG_ISSET(OPTION_DAC_8_BIT, &s3InfoRec.options)) s3DAC8Bit = TRUE; } if (OFLG_ISSET(OPTION_SC15025, &s3InfoRec.options)) { *************** *** 846,859 **** if (x386Verbose) ErrorF("%s %s: Using Sierra SC 15025/6 RAMDAC\n", XCONFIG_GIVEN, s3InfoRec.name); ! if (OFLG_ISSET(OPTION_DAC_8_BIT, &s3InfoRec.options)) { s3DAC8Bit = TRUE; - if (x386Verbose) - ErrorF("%s %s: Putting RAMDAC into 8-bit mode\n", - XCONFIG_GIVEN, s3InfoRec.name); - } } if (S3_911_SERIES(s3ChipId)) { maxDisplayWidth = 1024; maxDisplayHeight = 1024 - 1; /* Cursor takes exactly 1 line for 911 */ --- 867,880 ---- if (x386Verbose) ErrorF("%s %s: Using Sierra SC 15025/6 RAMDAC\n", XCONFIG_GIVEN, s3InfoRec.name); ! if (OFLG_ISSET(OPTION_DAC_8_BIT, &s3InfoRec.options)) s3DAC8Bit = TRUE; } + if (s3DAC8Bit && x386Verbose) + ErrorF("%s %s: Putting RAMDAC into 8-bit mode\n", + XCONFIG_GIVEN, s3InfoRec.name); + if (S3_911_SERIES(s3ChipId)) { maxDisplayWidth = 1024; maxDisplayHeight = 1024 - 1; /* Cursor takes exactly 1 line for 911 */ *************** *** 916,925 **** /* * Work out where to locate S3's HW cursor storage. It must be on a ! * 1k boundary. */ ! { int st_addr = (s3InfoRec.virtualY * s3DisplayWidth + 1023) / 1024 * 1024; s3CursorStartX = st_addr % s3DisplayWidth; s3CursorStartY = st_addr / s3DisplayWidth; --- 937,951 ---- /* * Work out where to locate S3's HW cursor storage. It must be on a ! * 1k boundary. When using a RAMDAC cursor, set s3CursorStartY ! * and s3CursorLines appropriately for the memory usage calculation below */ ! if (OFLG_ISSET(OPTION_BT485_CURS, &s3InfoRec.options) || ! OFLG_ISSET(OPTION_TI3020_CURS, &s3InfoRec.options)) { ! s3CursorStartY = s3InfoRec.virtualY; ! s3CursorLines = 0; ! } else { int st_addr = (s3InfoRec.virtualY * s3DisplayWidth + 1023) / 1024 * 1024; s3CursorStartX = st_addr % s3DisplayWidth; s3CursorStartY = st_addr / s3DisplayWidth; *************** *** 1083,1135 **** OFLG_ISSET(CLOCK_OPTION_SC11412, &s3InfoRec.clockOptions) && freq > MAX_SC11412_FREQ) { /* SC11412 limit as there is no clockdoubling yet */ ! ErrorF("%s %s: Specified dot clock (%7.3f) too high for SC11412", XCONFIG_PROBED, s3InfoRec.name, freq / 1000.0); ! ErrorF("\tUsing %7.3fMHz\n", MAX_SC11412_FREQ / 1000.0); freq = MAX_SC11412_FREQ; } if (freq > s3InfoRec.maxClock) { ! ErrorF("%s %s: Specified dot clock (%7.3f) too high for RAMDAC.", XCONFIG_PROBED, s3InfoRec.name, freq / 1000.0); ! ErrorF("\tUsing %7.3fMHz\n", s3InfoRec.maxClock / 1000.0); freq = s3InfoRec.maxClock; } if (DAC_IS_BT485_SERIES && ! ( ! OFLG_ISSET(OPTION_SPEA_MERCURY, &s3InfoRec.options) || !OFLG_ISSET(CLOCK_OPTION_SC11412, &s3InfoRec.clockOptions))) { if (freq > ((s3RamdacType == ATT20C505_DAC) ? 90000 : 67500)) { ! /* Use Bt485 clock doubler - Bit 3 of Command Reg 3 */ freq /= 2; - if (s3Bt485PixMux) { - s3OutBtReg(BT_COMMAND_REG_0, 0xFE, 0x01); /* sleep mode */ - s3OutBtReg(BT_COMMAND_REG_2, 0xEF, 0x10); /* pclock 1 */ - } - s3OutBtRegCom3(0xF7, 0x08); - if (s3Bt485PixMux) { - s3OutBtReg(BT_COMMAND_REG_0, 0xFE, 0x00); /* wake up */ - } } else { ! /* No doubler */ ! if (s3Bt485PixMux) { ! s3OutBtReg(BT_COMMAND_REG_0, 0xFE, 0x01); /* sleep mode */ ! s3OutBtReg(BT_COMMAND_REG_2, 0xEF, 0x10); /* pclock 1 */ ! } ! s3OutBtRegCom3(0xF7, 0x00); ! if (s3Bt485PixMux) { ! s3OutBtReg(BT_COMMAND_REG_0, 0xFE, 0x00); /* wake up */ ! } } } else if (DAC_IS_TI3020) { if (freq > 100000) { /* Use Ti3020 clock doubler */ - ErrorF("%s %s: Specified dot clock (%7.3f) requires clock doubling.\n", - XCONFIG_PROBED, s3InfoRec.name, freq / 1000.0); freq /= 2; s3OutTiIndReg(TI_INPUT_CLOCK_SELECT, 0x00, TI_ICLK_CLK1_DOUBLE); } else { /* No doubler */ s3OutTiIndReg(TI_INPUT_CLOCK_SELECT, 0x00, TI_ICLK_CLK1); } } /* Convert freq to Hz */ --- 1109,1156 ---- OFLG_ISSET(CLOCK_OPTION_SC11412, &s3InfoRec.clockOptions) && freq > MAX_SC11412_FREQ) { /* SC11412 limit as there is no clockdoubling yet */ ! ErrorF("%s %s: Specified dot clock (%.3f) too high for SC11412", XCONFIG_PROBED, s3InfoRec.name, freq / 1000.0); ! ErrorF("\tUsing %.3fMHz\n", MAX_SC11412_FREQ / 1000.0); freq = MAX_SC11412_FREQ; } if (freq > s3InfoRec.maxClock) { ! ErrorF("%s %s: Specified dot clock (%.3f) too high for RAMDAC.", XCONFIG_PROBED, s3InfoRec.name, freq / 1000.0); ! ErrorF("\tUsing %.3fMHz\n", s3InfoRec.maxClock / 1000.0); freq = s3InfoRec.maxClock; } if (DAC_IS_BT485_SERIES && ! (OFLG_ISSET(OPTION_SPEA_MERCURY, &s3InfoRec.options) || !OFLG_ISSET(CLOCK_OPTION_SC11412, &s3InfoRec.clockOptions))) { if (freq > ((s3RamdacType == ATT20C505_DAC) ? 90000 : 67500)) { ! s3ClockDouble = TRUE; freq /= 2; } else { ! s3ClockDouble = FALSE; ! } ! #if 0 ! /* Set the clock doubler here when not using pixmux */ ! if (!s3Bt485PixMux) { ! ErrorF("Setting clock doubler in ClockSelect(), freq = %.3f\n", ! freq / 500.0); ! s3OutBtRegCom3(0xF7, s3ClockDouble ? 0x08 : 0x00); } + #endif } else if (DAC_IS_TI3020) { if (freq > 100000) { + s3ClockDouble = TRUE; /* Use Ti3020 clock doubler */ freq /= 2; + #if 0 s3OutTiIndReg(TI_INPUT_CLOCK_SELECT, 0x00, TI_ICLK_CLK1_DOUBLE); + #endif } else { + s3ClockDouble = FALSE; /* No doubler */ + #if 0 s3OutTiIndReg(TI_INPUT_CLOCK_SELECT, 0x00, TI_ICLK_CLK1); + #endif } } /* Convert freq to Hz */ *************** *** 1149,1154 **** --- 1170,1185 ---- outb(vgaCRIndex, 0x42);/* select the clock */ outb(vgaCRReg, 0x02); usleep(150000); + /* Do the clock doubler selection in s3Init() */ + #if 0 + if (s3Bt485PixMux) { + s3OutBtReg(BT_COMMAND_REG_0, 0xFE, 0x01); /* sleep mode */ + s3OutBtReg(BT_COMMAND_REG_2, 0xEF, 0x10); /* pclock 1 */ + /* Use Bt485 clock doubler - Bit 3 of Command Reg 3 */ + s3OutBtRegCom3(0xF7, (s3ClockDouble ? 0x08 : 0x00)); + s3OutBtReg(BT_COMMAND_REG_0, 0xFE, 0x00); /* wake up */ + } + #endif } } LOCK_SYS_REGS; diff -c mit/server/ddx/x386/accel/s3/s3BtCursor.c:2.7 mit/server/ddx/x386/accel/s3/s3BtCursor.c:2.8 *** mit/server/ddx/x386/accel/s3/s3BtCursor.c:2.7 Wed May 4 22:53:51 1994 --- mit/server/ddx/x386/accel/s3/s3BtCursor.c Wed May 4 22:53:51 1994 *************** *** 21,27 **** * */ ! /* $XFree86: mit/server/ddx/x386/accel/s3/s3BtCursor.c,v 2.7 1994/01/09 03:30:51 dawes Exp $ */ #define NEED_EVENTS #include --- 21,27 ---- * */ ! /* $XFree86: mit/server/ddx/x386/accel/s3/s3BtCursor.c,v 2.8 1994/04/15 05:10:10 dawes Exp $ */ #define NEED_EVENTS #include *************** *** 341,346 **** --- 341,348 ---- ScreenPtr pScr; CursorPtr pCurs; { + extern Bool s3DAC8Bit; + UNLOCK_SYS_REGS; /* Start writing at address 1 (0 is overscan color) */ *************** *** 347,360 **** s3StartBtData(BT_CURS_WR_ADDR, 0x01, BT_CURS_DATA); /* Background color */ ! s3OutBtData(BT_CURS_DATA, (pCurs->backRed >> 10) & 0xFF); ! s3OutBtData(BT_CURS_DATA, (pCurs->backGreen >> 10) & 0xFF); ! s3OutBtData(BT_CURS_DATA, (pCurs->backBlue >> 10) & 0xFF); /* Foreground color */ ! s3OutBtData(BT_CURS_DATA, (pCurs->foreRed >> 10) & 0xFF); ! s3OutBtData(BT_CURS_DATA, (pCurs->foreGreen >> 10) & 0xFF); ! s3OutBtData(BT_CURS_DATA, (pCurs->foreBlue >> 10) & 0xFF); /* Now clean up */ s3EndBtData(); --- 349,374 ---- s3StartBtData(BT_CURS_WR_ADDR, 0x01, BT_CURS_DATA); /* Background color */ ! if (s3DAC8Bit) { ! s3OutBtData(BT_CURS_DATA, (pCurs->backRed >> 8) & 0xFF); ! s3OutBtData(BT_CURS_DATA, (pCurs->backGreen >> 8) & 0xFF); ! s3OutBtData(BT_CURS_DATA, (pCurs->backBlue >> 8) & 0xFF); ! } else { ! s3OutBtData(BT_CURS_DATA, (pCurs->backRed >> 10) & 0xFF); ! s3OutBtData(BT_CURS_DATA, (pCurs->backGreen >> 10) & 0xFF); ! s3OutBtData(BT_CURS_DATA, (pCurs->backBlue >> 10) & 0xFF); ! } /* Foreground color */ ! if (s3DAC8Bit) { ! s3OutBtData(BT_CURS_DATA, (pCurs->foreRed >> 8) & 0xFF); ! s3OutBtData(BT_CURS_DATA, (pCurs->foreGreen >> 8) & 0xFF); ! s3OutBtData(BT_CURS_DATA, (pCurs->foreBlue >> 8) & 0xFF); ! } else { ! s3OutBtData(BT_CURS_DATA, (pCurs->foreRed >> 10) & 0xFF); ! s3OutBtData(BT_CURS_DATA, (pCurs->foreGreen >> 10) & 0xFF); ! s3OutBtData(BT_CURS_DATA, (pCurs->foreBlue >> 10) & 0xFF); ! } /* Now clean up */ s3EndBtData(); *************** *** 371,377 **** { int index = pScr->myNum; register int i, j; ! unsigned char *ram, *p; if (!x386VTSema) return; --- 385,392 ---- { int index = pScr->myNum; register int i, j; ! unsigned char *ram, *p, tmpcurs; ! extern int s3InitCursorFlag; if (!x386VTSema) return; *************** *** 380,386 **** return; /* turn the cursor off */ ! s3BtCursorOff(); /* load colormap */ s3BtRecolorCursor(pScr, pCurs); --- 395,402 ---- return; /* turn the cursor off */ ! if ((tmpcurs = s3InBtReg(BT_COMMAND_REG_2)) & 0x03) ! s3BtCursorOff(); /* load colormap */ s3BtRecolorCursor(pScr, pCurs); *************** *** 443,449 **** s3BtMoveCursor(0, x, y); /* turn the cursor on */ ! s3BtCursorOn(); return; } --- 459,469 ---- s3BtMoveCursor(0, x, y); /* turn the cursor on */ ! if ((tmpcurs & 0x03) || s3InitCursorFlag) ! s3BtCursorOn(); ! ! if (s3InitCursorFlag) ! s3InitCursorFlag = FALSE; return; } diff -c mit/server/ddx/x386/accel/s3/s3fcach.c:2.16 mit/server/ddx/x386/accel/s3/s3fcach.c:2.17 *** mit/server/ddx/x386/accel/s3/s3fcach.c:2.16 Wed May 4 22:53:51 1994 --- mit/server/ddx/x386/accel/s3/s3fcach.c Wed May 4 22:53:51 1994 *************** *** 27,33 **** * Id: s3fcach.c,v 2.5 1993/08/09 06:17:57 jon Exp jon */ ! /* $XFree86: mit/server/ddx/x386/accel/s3/s3fcach.c,v 2.16 1993/09/27 12:24:17 dawes Exp $ */ #include "X.h" #include "Xmd.h" --- 27,33 ---- * Id: s3fcach.c,v 2.5 1993/08/09 06:17:57 jon Exp jon */ ! /* $XFree86: mit/server/ddx/x386/accel/s3/s3fcach.c,v 2.17 1994/04/06 06:16:54 dawes Exp $ */ #include "X.h" #include "Xmd.h" *************** *** 168,174 **** nbyLine = PixmapBytePad(fentry->w, 1); ERROR_F(("loading %d (%d) %d\n", fentry->font, block, fentry->fblock[block])); ! pbits = (unsigned char *)ALLOCATE_LOCAL(nbyLine * fentry->w); if (pbits != NULL && (fentry->fblock[block] = s3CGetBlock(32 * fentry->w, fentry->h)) != NULL) { --- 168,174 ---- nbyLine = PixmapBytePad(fentry->w, 1); ERROR_F(("loading %d (%d) %d\n", fentry->font, block, fentry->fblock[block])); ! pbits = (unsigned char *)ALLOCATE_LOCAL(nbyLine * fentry->h); if (pbits != NULL && (fentry->fblock[block] = s3CGetBlock(32 * fentry->w, fentry->h)) != NULL) { *************** *** 230,235 **** --- 230,237 ---- * demand load makes more sense. */ ERROR_F(("Time to write new font cache management\n")); + + if (pbits) DEALLOCATE_LOCAL(pbits); for (fptr = s3HeadFont; fptr == NULL; fptr= fptr->next) if (fptr != fentry) { diff -c mit/server/ddx/x386/accel/s3/s3fs.c:2.9 mit/server/ddx/x386/accel/s3/s3fs.c:2.10 *** mit/server/ddx/x386/accel/s3/s3fs.c:2.9 Wed May 4 22:53:52 1994 --- mit/server/ddx/x386/accel/s3/s3fs.c Wed May 4 22:53:52 1994 *************** *** 66,72 **** * Id: s3fs.c,v 2.3 1993/08/09 06:17:57 jon Exp */ ! /* $XFree86: mit/server/ddx/x386/accel/s3/s3fs.c,v 2.9 1993/10/16 17:31:11 dawes Exp $ */ #include "X.h" #include "Xmd.h" --- 66,72 ---- * Id: s3fs.c,v 2.3 1993/08/09 06:17:57 jon Exp */ ! /* $XFree86: mit/server/ddx/x386/accel/s3/s3fs.c,v 2.10 1994/04/06 06:16:55 dawes Exp $ */ #include "X.h" #include "Xmd.h" *************** *** 182,187 **** --- 182,189 ---- register int *pwidth; /* pointer to list of n widths */ int xrot, yrot, width, height, pixWidth; PixmapPtr pPix = pGC->tile.pixmap; + DDXPointPtr initPpt; + int *initPwidth; if (!x386VTSema) { *************** *** 209,217 **** return; n = nInit * miFindMaxBand(((cfbPrivGC *) (pGC->devPrivates[cfbGCPrivateIndex].ptr))->pCompositeClip); ! pwidth = (int *)ALLOCATE_LOCAL(n * sizeof(int)); ! ppt = (DDXPointRec *) ALLOCATE_LOCAL(n * sizeof(DDXPointRec)); if (!ppt || !pwidth) { if (ppt) DEALLOCATE_LOCAL(ppt); --- 211,219 ---- return; n = nInit * miFindMaxBand(((cfbPrivGC *) (pGC->devPrivates[cfbGCPrivateIndex].ptr))->pCompositeClip); ! initPwidth = pwidth = (int *)ALLOCATE_LOCAL(n * sizeof(int)); ! initPpt = ppt = (DDXPointRec *) ALLOCATE_LOCAL(n * sizeof(DDXPointRec)); if (!ppt || !pwidth) { if (ppt) DEALLOCATE_LOCAL(ppt); *************** *** 259,266 **** } } ! DEALLOCATE_LOCAL(ppt); ! DEALLOCATE_LOCAL(pwidth); } void --- 261,268 ---- } } ! DEALLOCATE_LOCAL(initPpt); ! DEALLOCATE_LOCAL(initPwidth); } void *************** *** 277,282 **** --- 279,286 ---- register int *pwidth; /* pointer to list of n widths */ int xrot, yrot, width, height, pixWidth; PixmapPtr pPix = pGC->stipple; + DDXPointPtr initPpt; + int *initPwidth; if (!x386VTSema) { *************** *** 305,313 **** return; n = nInit * miFindMaxBand(((cfbPrivGC *) (pGC->devPrivates[cfbGCPrivateIndex].ptr))->pCompositeClip); ! pwidth = (int *)ALLOCATE_LOCAL(n * sizeof(int)); ! ppt = (DDXPointRec *) ALLOCATE_LOCAL(n * sizeof(DDXPointRec)); if (!ppt || !pwidth) { if (ppt) DEALLOCATE_LOCAL(ppt); --- 309,317 ---- return; n = nInit * miFindMaxBand(((cfbPrivGC *) (pGC->devPrivates[cfbGCPrivateIndex].ptr))->pCompositeClip); ! initPwidth = pwidth = (int *)ALLOCATE_LOCAL(n * sizeof(int)); ! initPpt = ppt = (DDXPointRec *) ALLOCATE_LOCAL(n * sizeof(DDXPointRec)); if (!ppt || !pwidth) { if (ppt) DEALLOCATE_LOCAL(ppt); *************** *** 357,364 **** } } ! DEALLOCATE_LOCAL(ppt); ! DEALLOCATE_LOCAL(pwidth); } void --- 361,368 ---- } } ! DEALLOCATE_LOCAL(initPpt); ! DEALLOCATE_LOCAL(initPwidth); } void *************** *** 375,380 **** --- 379,386 ---- register int *pwidth; /* pointer to list of n widths */ int xrot, yrot, width, height, pixWidth; PixmapPtr pPix = pGC->stipple; + DDXPointPtr initPpt; + int *initPwidth; if (!x386VTSema) { *************** *** 403,411 **** return; n = nInit * miFindMaxBand(((cfbPrivGC *) (pGC->devPrivates[cfbGCPrivateIndex].ptr))->pCompositeClip); ! pwidth = (int *)ALLOCATE_LOCAL(n * sizeof(int)); ! ppt = (DDXPointRec *) ALLOCATE_LOCAL(n * sizeof(DDXPointRec)); if (!ppt || !pwidth) { if (ppt) DEALLOCATE_LOCAL(ppt); --- 409,417 ---- return; n = nInit * miFindMaxBand(((cfbPrivGC *) (pGC->devPrivates[cfbGCPrivateIndex].ptr))->pCompositeClip); ! initPwidth = pwidth = (int *)ALLOCATE_LOCAL(n * sizeof(int)); ! initPpt = ppt = (DDXPointRec *) ALLOCATE_LOCAL(n * sizeof(DDXPointRec)); if (!ppt || !pwidth) { if (ppt) DEALLOCATE_LOCAL(ppt); *************** *** 457,462 **** } } ! DEALLOCATE_LOCAL(ppt); ! DEALLOCATE_LOCAL(pwidth); } --- 463,468 ---- } } ! DEALLOCATE_LOCAL(initPpt); ! DEALLOCATE_LOCAL(initPwidth); } diff -c mit/server/ddx/x386/accel/s3/s3init.c:2.58 mit/server/ddx/x386/accel/s3/s3init.c:2.64 *** mit/server/ddx/x386/accel/s3/s3init.c:2.58 Wed May 4 22:53:53 1994 --- mit/server/ddx/x386/accel/s3/s3init.c Wed May 4 22:53:53 1994 *************** *** 23,29 **** * Id: s3init.c,v 2.5 1993/08/09 06:17:57 jon Exp jon */ ! /* $XFree86: mit/server/ddx/x386/accel/s3/s3init.c,v 2.58 1994/03/10 07:05:14 dawes Exp $ */ #define USE_VGAHWINIT --- 23,29 ---- * Id: s3init.c,v 2.5 1993/08/09 06:17:57 jon Exp jon */ ! /* $XFree86: mit/server/ddx/x386/accel/s3/s3init.c,v 2.64 1994/04/26 07:27:35 dawes Exp $ */ #define USE_VGAHWINIT *************** *** 51,57 **** unsigned char Bt485[4]; /* Bt485 Command Registers 0-3 */ unsigned char Ti3020[0x40]; /* Ti3020 Indirect Registers 0x0-0x3F */ unsigned char s3reg[13]; /* Video Atribute (CR30-3C) */ ! unsigned char s3sysreg[36]; /* Video Atribute (CR40-63) */ unsigned short AdvFuncCntl; /* 0x4AE8 */ } vgaS3Rec, *vgaS3Ptr; --- 51,57 ---- unsigned char Bt485[4]; /* Bt485 Command Registers 0-3 */ unsigned char Ti3020[0x40]; /* Ti3020 Indirect Registers 0x0-0x3F */ unsigned char s3reg[13]; /* Video Atribute (CR30-3C) */ ! unsigned char s3sysreg[38]; /* Video Atribute (CR40-65) */ unsigned short AdvFuncCntl; /* 0x4AE8 */ } vgaS3Rec, *vgaS3Ptr; *************** *** 63,69 **** unsigned char Bt485[4]; /* Bt485 Command Registers 0-3 */ unsigned char Ti3020[0x40]; /* Ti3020 Indirect Registers 0x0-0x3F */ unsigned char s3reg[10]; /* Video Atribute (CR30-34, CR38-3C) */ ! unsigned char s3sysreg[36]; /* Video Atribute (CR40-63)*/ } vgaS3Rec, *vgaS3Ptr; #endif --- 63,69 ---- unsigned char Bt485[4]; /* Bt485 Command Registers 0-3 */ unsigned char Ti3020[0x40]; /* Ti3020 Indirect Registers 0x0-0x3F */ unsigned char s3reg[10]; /* Video Atribute (CR30-34, CR38-3C) */ ! unsigned char s3sysreg[38]; /* Video Atribute (CR40-65)*/ } vgaS3Rec, *vgaS3Ptr; #endif *************** *** 119,124 **** --- 119,126 ---- extern unsigned char s3Port5A; extern unsigned char s3Port31; + extern Bool s3ClockDouble; + void s3CleanUp(void) { *************** *** 170,179 **** /* Turn off parallel mode explicitly here */ if (s3Bt485PixMux) { - #ifdef NO_USER_OUT - /* This might not be SPEA specific */ if (OFLG_ISSET(OPTION_SPEA_MERCURY, &s3InfoRec.options)) - #endif { outb(vgaCRIndex, 0x5C); outb(vgaCRReg, 0x20); --- 172,178 ---- *************** *** 216,228 **** oldS3->Ti3020[TI_GENERAL_IO_DATA]); } ! vgaHWRestore(oldS3); /* restore s3 special bits */ if (S3_801_928_SERIES(s3ChipId)) { /* restore 801 specific registers */ ! for (i = 32; i < 35; i++) { outb(vgaCRIndex, 0x40 + i); outb(vgaCRReg, oldS3->s3sysreg[i]); --- 215,227 ---- oldS3->Ti3020[TI_GENERAL_IO_DATA]); } ! /*vgaHWRestore(oldS3) WAS here */ /* restore s3 special bits */ if (S3_801_928_SERIES(s3ChipId)) { /* restore 801 specific registers */ ! for (i = 32; i < 38; i++) { outb(vgaCRIndex, 0x40 + i); outb(vgaCRReg, oldS3->s3sysreg[i]); *************** *** 245,250 **** --- 244,250 ---- outb(vgaCRIndex, 0x40 + i); outb(vgaCRReg, oldS3->s3sysreg[i]); } + vgaHWRestore(oldS3); outb(0x3c2, old_clock); *************** *** 273,279 **** int interlacedived = mode->Flags & V_INTERLACE ? 2 : 1; int pixel_multiplexing; unsigned char tmp, tmp1, tmp2; ! extern Bool s3DAC8Bit; UNLOCK_SYS_REGS; --- 273,279 ---- int interlacedived = mode->Flags & V_INTERLACE ? 2 : 1; int pixel_multiplexing; unsigned char tmp, tmp1, tmp2; ! extern Bool s3DAC8Bit, s3DACSyncOnGreen; UNLOCK_SYS_REGS; *************** *** 386,392 **** oldS3->s3sysreg[i + 16] = inb(vgaCRReg); } ! for (i = 32; i < 35; i++) { outb(vgaCRIndex, 0x40 + i); oldS3->s3sysreg[i] = inb(vgaCRReg); #ifdef REG_DEBUG --- 386,392 ---- oldS3->s3sysreg[i + 16] = inb(vgaCRReg); } ! for (i = 32; i < 38; i++) { outb(vgaCRIndex, 0x40 + i); oldS3->s3sysreg[i] = inb(vgaCRReg); #ifdef REG_DEBUG *************** *** 512,544 **** UNLOCK_SYS_REGS; } if (s3Bt485PixMux) { outb(0x3C4, 1); tmp2 = inb(0x3C5); outb(0x3C5, tmp2 | 0x20); /* blank the screen */ if (pixel_multiplexing) { /* fun timing mods for pixel-multiplexing! */ - #ifdef NO_USER_OUT - /* This might not be SPEA specific */ if (OFLG_ISSET(OPTION_SPEA_MERCURY, &s3InfoRec.options)) - #endif { outb(vgaCRIndex, 0x5C); outb(vgaCRReg, 0x20); outb(0x3C7, 0x21); ! } ! /* set s3 reg53 to parallel addressing by or'ing 0x20 */ ! outb(vgaCRIndex, 0x53); ! tmp = inb(vgaCRReg); ! outb(vgaCRReg, tmp | 0x20); ! #ifdef NO_USER_OUT ! /* This might not be SPEA specific */ ! if (OFLG_ISSET(OPTION_SPEA_MERCURY, &s3InfoRec.options)) ! #endif ! { outb(vgaCRIndex, 0x5C); outb(vgaCRReg, 0x00); } --- 512,594 ---- UNLOCK_SYS_REGS; } + /* Looks like we don't need this -- at least not for the Bt485 cards */ + #ifdef PIXMUX_SWITCH_HACK + /* + * Amancio: cruel hack to allow switching between non-pixmux and pixmux + * modes. This restores the initial state of the RAMDAC before setting + * it up for pixmux or non-pixmux. + */ + /* + * Restore Bt485 registers + */ if (s3Bt485PixMux) { + + /* Turn off parallel mode explicitly here */ + if (OFLG_ISSET(OPTION_SPEA_MERCURY, &s3InfoRec.options)) + { + outb(vgaCRIndex, 0x5C); + outb(vgaCRReg, 0x20); + outb(0x3C7, 0x00); + /* set s3 reg53 to non-parallel addressing by and'ing 0xDF */ + outb(vgaCRIndex, 0x53); + tmp = inb(vgaCRReg); + outb(vgaCRReg, tmp & 0xDF); + outb(vgaCRIndex, 0x5C); + outb(vgaCRReg, 0x00); + } + + s3OutBtReg(BT_COMMAND_REG_0, 0xFE, 0x01); + s3OutBtRegCom3(0x00, oldS3->Bt485[3]); + s3OutBtReg(BT_COMMAND_REG_2, 0x00, oldS3->Bt485[2]); + s3OutBtReg(BT_COMMAND_REG_1, 0x00, oldS3->Bt485[1]); + s3OutBtReg(BT_COMMAND_REG_0, 0x00, oldS3->Bt485[0]); + } + + /* + * Restore Ti3020 registers + */ + if (DAC_IS_TI3020) { + s3OutTiIndReg(TI_CURS_CONTROL, 0x00, oldS3->Ti3020[TI_CURS_CONTROL]); + s3OutTiIndReg(TI_MUX_CONTROL_1, 0x00, oldS3->Ti3020[TI_MUX_CONTROL_1]); + s3OutTiIndReg(TI_MUX_CONTROL_2, 0x00, oldS3->Ti3020[TI_MUX_CONTROL_2]); + s3OutTiIndReg(TI_INPUT_CLOCK_SELECT, 0x00, + oldS3->Ti3020[TI_INPUT_CLOCK_SELECT]); + s3OutTiIndReg(TI_OUTPUT_CLOCK_SELECT, 0x00, + oldS3->Ti3020[TI_OUTPUT_CLOCK_SELECT]); + s3OutTiIndReg(TI_GENERAL_CONTROL, 0x00, + oldS3->Ti3020[TI_GENERAL_CONTROL]); + s3OutTiIndReg(TI_AUXILLARY_CONTROL, 0x00, + oldS3->Ti3020[TI_AUXILLARY_CONTROL]); + s3OutTiIndReg(TI_GENERAL_IO_CONTROL, 0x00, 0x1f); + s3OutTiIndReg(TI_GENERAL_IO_DATA, 0x00, + oldS3->Ti3020[TI_GENERAL_IO_DATA]); + } + #endif /* PIXMUX_SWITCH_HACK */ + + if (DAC_IS_BT485_SERIES) { outb(0x3C4, 1); tmp2 = inb(0x3C5); outb(0x3C5, tmp2 | 0x20); /* blank the screen */ + s3OutBtReg(BT_COMMAND_REG_0, 0xFE, 0x01); /* sleep mode */ + } + if (s3Bt485PixMux) { if (pixel_multiplexing) { /* fun timing mods for pixel-multiplexing! */ if (OFLG_ISSET(OPTION_SPEA_MERCURY, &s3InfoRec.options)) { outb(vgaCRIndex, 0x5C); outb(vgaCRReg, 0x20); outb(0x3C7, 0x21); ! ! /* set s3 reg53 to parallel addressing by or'ing 0x20 */ ! outb(vgaCRIndex, 0x53); ! tmp = inb(vgaCRReg); ! outb(vgaCRReg, tmp | 0x20); ! outb(vgaCRIndex, 0x5C); outb(vgaCRReg, 0x00); } *************** *** 548,564 **** tmp = inb(vgaCRReg); outb(vgaCRReg, tmp | 0x08); ! /* the input clock is already set to clk1 or clk1double (s3.c) */ ! ! /* set command reg 0 to normal clocking, CR3, sleep, 8bit */ ! s3OutBtReg(BT_COMMAND_REG_0, 0x00, 0x83); ! ! /* clear command reg 1 */ ! s3OutBtReg(BT_COMMAND_REG_1, 0x00, 0x00); ! ! s3OutBtReg(BT_WRITE_ADDR, 0x00, 0x01); ! ! /* clock double bit already set */ /* * set output clocking to 4:1 multiplexing --- 598,607 ---- tmp = inb(vgaCRReg); outb(vgaCRReg, tmp | 0x08); ! /* set s3 reg65 for some unknown reason */ ! outb(vgaCRIndex, 0x65); ! tmp = inb(vgaCRReg); ! outb(vgaCRReg, tmp | 0x20); /* * set output clocking to 4:1 multiplexing *************** *** 565,587 **** */ s3OutBtReg(BT_COMMAND_REG_1, 0x00, 0x40); ! /* SCLK enable,pclk1,pixport,xcursor */ if (mode->Flags & V_INTERLACE) ! s3OutBtReg(BT_COMMAND_REG_2, 0x00, 0x33 | 0x08); else ! s3OutBtReg(BT_COMMAND_REG_2, 0x00, 0x33); - /* change to 8-bit DAC if option is set */ - if (s3DAC8Bit) - s3OutBtReg(BT_COMMAND_REG_0, 0x00, 0x02); - else - s3OutBtReg(BT_COMMAND_REG_0, 0x00, 0x00); } else { - #ifdef NO_USER_OUT - /* This might not be SPEA specific */ if (OFLG_ISSET(OPTION_SPEA_MERCURY, &s3InfoRec.options)) - #endif { outb(vgaCRIndex, 0x5C); outb(vgaCRReg, 0x20); --- 608,622 ---- */ s3OutBtReg(BT_COMMAND_REG_1, 0x00, 0x40); ! /* SCLK enable,pclk1,pixport */ if (mode->Flags & V_INTERLACE) ! s3OutBtReg(BT_COMMAND_REG_2, 0x00, 0x30 | 0x08); else ! s3OutBtReg(BT_COMMAND_REG_2, 0x00, 0x30); } else { if (OFLG_ISSET(OPTION_SPEA_MERCURY, &s3InfoRec.options)) { outb(vgaCRIndex, 0x5C); outb(vgaCRReg, 0x20); *************** *** 593,602 **** tmp = inb(vgaCRReg); outb(vgaCRReg, tmp & 0xDF); ! #ifdef NO_USER_OUT ! /* This might not be SPEA specific */ if (OFLG_ISSET(OPTION_SPEA_MERCURY, &s3InfoRec.options)) - #endif { outb(vgaCRIndex, 0x5C); outb(vgaCRReg, 0x00); --- 628,639 ---- tmp = inb(vgaCRReg); outb(vgaCRReg, tmp & 0xDF); ! /* set s3 reg65 for some unknown reason */ ! outb(vgaCRIndex, 0x65); ! tmp = inb(vgaCRReg); ! outb(vgaCRReg, tmp & 0xDF); ! if (OFLG_ISSET(OPTION_SPEA_MERCURY, &s3InfoRec.options)) { outb(vgaCRIndex, 0x5C); outb(vgaCRReg, 0x00); *************** *** 607,630 **** tmp = inb(vgaCRReg); outb(vgaCRReg, tmp & 0xF7); ! /* the input clock is already set to clk1 or clk1double (s3.c) */ ! ! /* set command reg 0 to normal clocking */ ! s3OutBtReg(BT_COMMAND_REG_0, 0x00, 0x00); ! /* pclk1 */ ! s3OutBtReg(BT_COMMAND_REG_2, 0x00, 0x10); - /* change to 8-bit DAC if option is set */ - if (s3DAC8Bit) - s3OutBtReg(BT_COMMAND_REG_0, 0x00, 0x02); - else - s3OutBtReg(BT_COMMAND_REG_0, 0x00, 0x00); } /* end of pixel_multiplexing */ outb(0x3C4, 1); outb(0x3C5, tmp2); /* unblank the screen */ ! } else if (DAC_IS_TI3020) { outb(0x3C4, 1); tmp2 = inb(0x3C5); --- 644,676 ---- tmp = inb(vgaCRReg); outb(vgaCRReg, tmp & 0xF7); ! s3OutBtReg(BT_COMMAND_REG_1, 0x00, 0x00); ! /* pclk1,vgaport */ ! if (mode->Flags & V_INTERLACE) ! s3OutBtReg(BT_COMMAND_REG_2, 0x00, 0x10 | 0x08); ! else ! s3OutBtReg(BT_COMMAND_REG_2, 0x00, 0x10); } /* end of pixel_multiplexing */ + } + /* Set 6/8 bit mode and sync-on-green if required */ + if (DAC_IS_BT485_SERIES) { + s3OutBtReg(BT_COMMAND_REG_0, 0x00, 0x01 | + (s3DAC8Bit ? 0x02 : 0) | (s3DACSyncOnGreen ? 0x08 : 0x00)); + if (s3ClockDouble) { + ErrorF("Setting clock doubler in s3Init(), freq = %.3f\n", + s3InfoRec.clock[mode->Clock] / 1000.0); + } + /* Use Bt485 clock doubler - Bit 3 of Command Reg 3 */ + s3OutBtRegCom3(0xF7, (s3ClockDouble ? 0x08 : 0x00)); + s3OutBtReg(BT_COMMAND_REG_0, 0xFE, 0x00); /* wake up */ outb(0x3C4, 1); outb(0x3C5, tmp2); /* unblank the screen */ ! } ! ! if (DAC_IS_TI3020) { outb(0x3C4, 1); tmp2 = inb(0x3C5); *************** *** 636,643 **** --- 682,695 ---- tmp1 = 0x00; if (!(tmp & 0x80)) tmp1 |= 0x02; /* invert bits for the 3020 */ if (!(tmp & 0x40)) tmp1 |= 0x01; + if (s3DACSyncOnGreen) tmp1 |= 0x20; /* add IOG sync */ s3OutTiIndReg(TI_GENERAL_CONTROL, 0x00, tmp1); + if (s3ClockDouble) + s3OutTiIndReg(TI_INPUT_CLOCK_SELECT, 0x00, TI_ICLK_CLK1_DOUBLE); + else + s3OutTiIndReg(TI_INPUT_CLOCK_SELECT, 0x00, TI_ICLK_CLK1); + if (pixel_multiplexing) { /* fun timing mods for pixel-multiplexing! */ *************** *** 715,723 **** outb(0x3C4, 1); outb(0x3C5, tmp2); /* unblank the screen */ - s3InitCursorFlag = TRUE; /* turn on the cursor during the next load */ } outb(0x3C2, new->MiscOutReg); for (i = 1; i < 5; i++) --- 767,776 ---- outb(0x3C4, 1); outb(0x3C5, tmp2); /* unblank the screen */ } + s3InitCursorFlag = TRUE; /* turn on the cursor during the next load */ + outb(0x3C2, new->MiscOutReg); for (i = 1; i < 5; i++) *************** *** 1270,1276 **** if (S3_801_928_SERIES(s3ChipId)) { /* restore 801 specific registers */ ! for (i = 32; i < 35; i++) { outb(vgaCRIndex, 0x40 + i); outb(vgaCRReg, restore->s3sysreg[i]); --- 1323,1329 ---- if (S3_801_928_SERIES(s3ChipId)) { /* restore 801 specific registers */ ! for (i = 32; i < 38; i++) { outb(vgaCRIndex, 0x40 + i); outb(vgaCRReg, restore->s3sysreg[i]); *************** *** 1443,1449 **** save->s3sysreg[i + 16] = inb(vgaCRReg); } ! for (i = 32; i < 35; i++) { outb(vgaCRIndex, 0x40 + i); save->s3sysreg[i] = inb(vgaCRReg); } --- 1496,1502 ---- save->s3sysreg[i + 16] = inb(vgaCRReg); } ! for (i = 32; i < 38; i++) { outb(vgaCRIndex, 0x40 + i); save->s3sysreg[i] = inb(vgaCRReg); } *************** *** 1549,1555 **** save->s3sysreg[i + 16] = inb(vgaCRReg); } ! for (i = 32; i < 35; i++) { outb(vgaCRIndex, 0x40 + i); save->s3sysreg[i] = inb(vgaCRReg); } --- 1602,1608 ---- save->s3sysreg[i + 16] = inb(vgaCRReg); } ! for (i = 32; i < 38; i++) { outb(vgaCRIndex, 0x40 + i); save->s3sysreg[i] = inb(vgaCRReg); } *************** *** 1593,1599 **** if (S3_801_928_SERIES) { /* restore 801 specific registers */ ! for (i = 32; i < 35; i++) { outb(vgaCRIndex, 0x40 + i); outb(vgaCRReg, restore->s3sysreg[i]); } --- 1646,1652 ---- if (S3_801_928_SERIES) { /* restore 801 specific registers */ ! for (i = 32; i < 38; i++) { outb(vgaCRIndex, 0x40 + i); outb(vgaCRReg, restore->s3sysreg[i]); } diff -c mit/server/ddx/x386/accel/s3/s3misc.c:2.34 mit/server/ddx/x386/accel/s3/s3misc.c:2.35 *** mit/server/ddx/x386/accel/s3/s3misc.c:2.34 Wed May 4 22:53:54 1994 --- mit/server/ddx/x386/accel/s3/s3misc.c Wed May 4 22:53:54 1994 *************** *** 31,37 **** * Id: s3.c,v 2.6 1993/08/09 06:17:57 jon Exp jon */ ! /* $XFree86: mit/server/ddx/x386/accel/s3/s3misc.c,v 2.34 1994/03/08 08:31:42 dawes Exp $ */ #include "cfb.h" #include "pixmapstr.h" --- 31,37 ---- * Id: s3.c,v 2.6 1993/08/09 06:17:57 jon Exp jon */ ! /* $XFree86: mit/server/ddx/x386/accel/s3/s3misc.c,v 2.35 1994/05/04 10:32:12 dawes Exp $ */ #include "cfb.h" #include "pixmapstr.h" *************** *** 346,352 **** PixmapPtr pspix; ScreenPtr pScreen = s3savepScreen; ! pspix = (PixmapPtr)pScreen->devPrivate; if (enter) { xf86MapDisplay(screen_idx, VGA_REGION); --- 346,353 ---- PixmapPtr pspix; ScreenPtr pScreen = s3savepScreen; ! if (!x386Exiting && !x386Resetting) ! pspix = (PixmapPtr)pScreen->devPrivate; if (enter) { xf86MapDisplay(screen_idx, VGA_REGION); diff -c mit/server/ddx/x386/accel/s3/s3text.c:2.7 mit/server/ddx/x386/accel/s3/s3text.c:2.8 *** mit/server/ddx/x386/accel/s3/s3text.c:2.7 Wed May 4 22:53:55 1994 --- mit/server/ddx/x386/accel/s3/s3text.c Wed May 4 22:53:55 1994 *************** *** 27,33 **** * Id: s3text.c,v 2.3 1993/08/09 06:17:57 jon Exp jon */ ! /* $XFree86: mit/server/ddx/x386/accel/s3/s3text.c,v 2.7 1993/12/25 14:00:04 dawes Exp $ */ #include "X.h" #include "Xmd.h" --- 27,33 ---- * Id: s3text.c,v 2.3 1993/08/09 06:17:57 jon Exp jon */ ! /* $XFree86: mit/server/ddx/x386/accel/s3/s3text.c,v 2.8 1994/04/06 06:17:00 dawes Exp $ */ #include "X.h" #include "Xmd.h" *************** *** 342,347 **** --- 342,348 ---- S3_OUTW(MULTIFUNC_CNTL, SCISSORS_R | (s3DisplayWidth-1)); S3_OUTW(MULTIFUNC_CNTL, SCISSORS_B | s3ScissB); UNBLOCK_CURSOR; + DEALLOCATE_LOCAL(charinfo); return ret_x; } *************** *** 484,488 **** --- 485,490 ---- gcvals[1] = oldFG; gcvals[2] = oldFS; DoChangeGC(pGC, GCFunction | GCForeground | GCFillStyle, gcvals, 0); + DEALLOCATE_LOCAL(charinfo); return 0; } diff -c /dev/null mit/server/ddx/x386/bdm2/drivers/apollo/Imakefile:2.0 *** /dev/null Wed May 4 22:54:02 1994 --- mit/server/ddx/x386/bdm2/drivers/apollo/Imakefile Wed May 4 22:54:02 1994 *************** *** 0 **** --- 1,30 ---- + XCOMM $XFree86: mit/server/ddx/x386/bdm2/drivers/apollo/Imakefile,v 2.0 1994/04/10 05:54:02 dawes Exp $ + XCOMM $XConsortium: Imakefile,v 1.1 91/07/16 22:59:40 gildea Exp $ + #include + + SRCS = apollodriv.c apolloBank.s apolloBlt.c + + OBJS = apollodriv.o apolloBank.o apolloBlt.o + + #if X386LinkKit + INCLUDES = -I. -I../../../include -I../.. + #else + INCLUDES = -I. -I../../../common -I../../../os-support -I../../bdm \ + -I../../mfb.banked \ + -I$(SERVERSRC)/include -I$(INCLUDESRC) + #endif + + NormalLibraryObjectRule() + NormalAsmObjectRule() + + NormalRelocatableTarget(apollo, $(OBJS)) + + InstallLinkKitNonExecFile(Imakefile,$(LINKKITDIR)/drivers/bdm2/apollo) + InstallLinkKitNonExecFile(apolloHW.h,$(LINKKITDIR)/drivers/bdm2/apollo) + InstallLinkKitNonExecFile(apolloPorts.h,$(LINKKITDIR)/drivers/bdm2/apollo) + InstallLinkKitNonExecFile(apolloBank.s,$(LINKKITDIR)/drivers/bdm2/apollo) + InstallLinkKitNonExecFile(apollodriv.c,$(LINKKITDIR)/drivers/bdm2/apollo) + InstallLinkKitNonExecFile(apolloBlt.c,$(LINKKITDIR)/drivers/bdm2/apollo) + + DependTarget() + diff -c /dev/null mit/server/ddx/x386/bdm2/drivers/apollo/apolloBank.s:2.0 *** /dev/null Wed May 4 22:54:02 1994 --- mit/server/ddx/x386/bdm2/drivers/apollo/apolloBank.s Wed May 4 22:54:02 1994 *************** *** 0 **** --- 1,56 ---- + /* + * BDM2: Banked dumb monochrome driver + * Pascal Haible 8/93, haible@izfm.uni-stuttgart.de + * + * bdm2/driver/apollo/apolloBank.s + * Hamish Coleman 11/93 hamish@zot.apana.org.au + * + * derived from: + * hgc1280/* + * Pascal Haible 8/93, haible@izfm.uni-stuttgart.de + * hga2/* + * Author: Davor Matic, dmatic@athena.mit.edu + * and + * vga256/* + * Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany. + * + * see bdm2/COPYRIGHT for copyright and disclaimers. + */ + + /* $XFree86: mit/server/ddx/x386/bdm2/drivers/apollo/apolloBank.s,v 2.0 1994/04/10 05:54:05 dawes Exp $ */ + + /* + * These are here the very lowlevel bankswitching routines. + * The segment to switch to is passed via %eax. Only %eax and %edx my be used + * without saving the original contents. + * + * WHY ASSEMBLY LANGUAGE ??? + * + * These routines must be callable by other assembly routines. But I don't + * want to have the overhead of pushing and poping the normal stack-frame. + */ + + #include "assyntax.h" + + #include "apolloPorts.h" + + FILE("apolloBank.s") + + AS_BEGIN + + SEG_DATA + + SEG_TEXT + + ALIGNTEXT4 + GLOBL GLNAME(ApolloSetRead) + GLOBL GLNAME(ApolloSetWrite) + GLOBL GLNAME(ApolloSetReadWrite) + GLNAME(ApolloSetRead): + GLNAME(ApolloSetWrite): + GLNAME(ApolloSetReadWrite): + /* + * Do nothing + * -- This should never be called anyway as this card does not bank + */ + RET diff -c /dev/null mit/server/ddx/x386/bdm2/drivers/apollo/apolloBlt.c:2.2 *** /dev/null Wed May 4 22:54:02 1994 --- mit/server/ddx/x386/bdm2/drivers/apollo/apolloBlt.c Wed May 4 22:54:03 1994 *************** *** 0 **** --- 1,356 ---- + /* $XFree86: mit/server/ddx/x386/bdm2/drivers/apollo/apolloBlt.c,v 2.2 1994/05/04 10:36:27 dawes Exp $ */ + + #include "X.h" + #include "Xmd.h" + #include "Xproto.h" + #include "gcstruct.h" + #include "windowstr.h" + #include "scrnintstr.h" + #include "pixmapstr.h" + #include "regionstr.h" + #ifdef NOTYET + #include "mfb.h" + #endif + #include "bdm.h" + #include "apolloHW.h" + #include + #include + + extern unsigned Apollo_IOBASE; + + void + _ApolloDoBitblt(pdstBase, psrcBase, widthSrc, widthDst, + X_Src, Y_Src, X_Dest, Y_Dest, X_Count, Y_Count, + xdir, ydir, alu) + unsigned char *pdstBase, *psrcBase; + int X_Src, Y_Src, X_Dest, Y_Dest, X_Count, Y_Count; + int xdir, ydir, alu; + { + int Src_Addr; + int Dest_Addr; + int Src_Ptr; + int Dest_Ptr; + int Combined_Mask; + int Y_Delta; + int X_End; + int X_Word_Count; + int Start_Mask; + int End_Mask; + int Shift; + int Preread; + int YC; + int Dummy; + int XC; + int Incr; + + ErrorF("_DoBitblt called\n"); + + /* KLUDGE !!!! */ + if (xdir>0 && ydir>0) { + Incr = 1; + } else { + Incr = -1; + } + + outb(AP_PORT_CONTROL_3,AP_BIT_ROP|AP_ON); + outw(AP_PORT_ROP,alu|alu<<4|alu<<8|alu<<12); + /* switch (controller type) + monochrome: */ + outb(AP_PORT_CONTROL_2,AP_DATA_PLN); + + Src_Addr = (int)psrcBase + Y_Src * Word_Width + X_Src/16; + Dest_Addr = (int)pdstBase + Y_Dest * Word_Width + X_Dest/16; + + if (Incr > 0) { + Y_Delta = Word_Width; + X_End = X_Dest + X_Count - 1; + X_Word_Count = X_End/16 - X_Dest/16 + 1; + Start_Mask = 0xFFFF0000 << (X_Dest%16); + End_Mask = 0x00007fff << (X_End%16); + Combined_Mask = Start_Mask | End_Mask; + Shift = ((X_Dest % 16) - (X_Src % 16)) % 16; + if ((X_Dest % 16) < (X_Src % 16)) { + Preread = 1; + } else { + Preread = 0; + } + } else { + Y_Delta = - Word_Width; + X_End = X_Dest - X_Count + 1; + X_Word_Count = X_Dest/16 - X_End/16 + 1; + Start_Mask = 0x00007fff << (X_Dest % 16); + End_Mask = 0xffff0000 << (X_End % 16); + Combined_Mask = Start_Mask | End_Mask; + Shift = -((X_Src % 16) - (X_Dest % 16)) % 16; + if ((X_Dest % 16) > (X_Src % 16)) { + Preread = 1; + } else { + Preread = 0; + } + } + + outb(AP_PORT_CONTROL_0,AP_MODE_DBLT|Shift); + + for (YC=0;YC 1) { + tmp = htons(Start_Mask); + outw(AP_PORT_WRITE_ENABLE,tmp); + *(short *)Src_Ptr = htons((short)Dest_Ptr); + Src_Ptr += Incr; + Dest_Ptr += Incr; + outw(AP_PORT_WRITE_ENABLE,0); + + for (XC=1;XCtype == DRAWABLE_WINDOW) + { + psrcBase = (unsigned char *) + (((PixmapPtr)(pSrc->pScreen->devPrivate))->devPrivate.ptr); + widthSrc = (int)((PixmapPtr)(pSrc->pScreen->devPrivate))->devKind; + } + else + { + psrcBase = (unsigned char *)(((PixmapPtr)pSrc)->devPrivate.ptr); + widthSrc = (int)(((PixmapPtr)pSrc)->devKind); + } + + if (pDst->type == DRAWABLE_WINDOW) + { + pdstBase = (unsigned char *) + (((PixmapPtr)(pDst->pScreen->devPrivate))->devPrivate.ptr); + widthDst = (int) + ((PixmapPtr)(pDst->pScreen->devPrivate))->devKind; + } + else + { + pdstBase = (unsigned char *)(((PixmapPtr)pDst)->devPrivate.ptr); + widthDst = (int)(((PixmapPtr)pDst)->devKind); + } + + + /* XXX we have to err on the side of safety when both are windows, + * because we don't know if IncludeInferiors is being used. + */ + careful = ((pSrc == pDst) || + ((pSrc->type == DRAWABLE_WINDOW) && + (pDst->type == DRAWABLE_WINDOW))); + + pbox = REGION_RECTS(prgnDst); + nbox = REGION_NUM_RECTS(prgnDst); + + if (careful && (pptSrc->y < pbox->y1)) NoAccel = 1; + if (careful && (pptSrc->x < pbox->x1)) NoAccel = 1; + + #ifdef NOTYET + if (CHECKSCREEN(psrcBase)) + { + if (CHECKSCREEN(pdstBase)) /* Screen -> Screen */ + { + /* all ok */ + } + else /* Screen -> Mem */ + { + return(-1); + } + } + else + { + if (CHECKSCREEN(pdstBase)) /* Mem -> Screen */ + { + return(-1); + } + else /* Mem -> Mem */ + { + return(-1); + } + } + #endif + + ErrorF("DoBitblt used\n"); + + pboxNew1 = NULL; + pptNew1 = NULL; + pboxNew2 = NULL; + pptNew2 = NULL; + if (careful && (pptSrc->y < pbox->y1)) + { + /* walk source botttom to top */ + ydir = -1; + widthSrc = -widthSrc; + widthDst = -widthDst; + + if (nbox > 1) + { + /* keep ordering in each band, reverse order of bands */ + pboxNew1 = (BoxPtr)ALLOCATE_LOCAL(sizeof(BoxRec) * nbox); + if(!pboxNew1) + return(0); + pptNew1 = (DDXPointPtr)ALLOCATE_LOCAL(sizeof(DDXPointRec) * nbox); + if(!pptNew1) + { + DEALLOCATE_LOCAL(pboxNew1); + return(0); + } + pboxBase = pboxNext = pbox+nbox-1; + while (pboxBase >= pbox) + { + while ((pboxNext >= pbox) && + (pboxBase->y1 == pboxNext->y1)) + pboxNext--; + pboxTmp = pboxNext+1; + pptTmp = pptSrc + (pboxTmp - pbox); + while (pboxTmp <= pboxBase) + { + *pboxNew1++ = *pboxTmp++; + *pptNew1++ = *pptTmp++; + } + pboxBase = pboxNext; + } + pboxNew1 -= nbox; + pbox = pboxNew1; + pptNew1 -= nbox; + pptSrc = pptNew1; + } + } + else + { + /* walk source top to bottom */ + ydir = 1; + } + + if (careful && (pptSrc->x < pbox->x1)) + { + /* walk source right to left */ + xdir = -1; + + if (nbox > 1) + { + /* reverse order of rects in each band */ + pboxNew2 = (BoxPtr)ALLOCATE_LOCAL(sizeof(BoxRec) * nbox); + pptNew2 = (DDXPointPtr)ALLOCATE_LOCAL(sizeof(DDXPointRec) * nbox); + if(!pboxNew2 || !pptNew2) + { + if (pptNew2) DEALLOCATE_LOCAL(pptNew2); + if (pboxNew2) DEALLOCATE_LOCAL(pboxNew2); + if (pboxNew1) + { + DEALLOCATE_LOCAL(pptNew1); + DEALLOCATE_LOCAL(pboxNew1); + } + return(0); + } + pboxBase = pboxNext = pbox; + while (pboxBase < pbox+nbox) + { + while ((pboxNext < pbox+nbox) && + (pboxNext->y1 == pboxBase->y1)) + pboxNext++; + pboxTmp = pboxNext; + pptTmp = pptSrc + (pboxTmp - pbox); + while (pboxTmp != pboxBase) + { + *pboxNew2++ = *--pboxTmp; + *pptNew2++ = *--pptTmp; + } + pboxBase = pboxNext; + } + pboxNew2 -= nbox; + pbox = pboxNew2; + pptNew2 -= nbox; + pptSrc = pptNew2; + } + } + else + { + /* walk source left to right */ + xdir = 1; + } + + while(nbox--) { + _ApolloDoBitblt(pdstBase, psrcBase,widthSrc,widthDst, + pptSrc->x, pptSrc->y, pbox->x1, pbox->y1, + pbox->x2 - pbox->x1, pbox->y2 - pbox->y1, + xdir, ydir, alu); + pbox++; + pptSrc++; + } + + /* free up stuff */ + if (pboxNew2) + { + DEALLOCATE_LOCAL(pptNew2); + DEALLOCATE_LOCAL(pboxNew2); + } + if (pboxNew1) + { + DEALLOCATE_LOCAL(pptNew1); + DEALLOCATE_LOCAL(pboxNew1); + } + return(0); + } + + diff -c /dev/null mit/server/ddx/x386/bdm2/drivers/apollo/apolloHW.h:2.0 *** /dev/null Wed May 4 22:54:03 1994 --- mit/server/ddx/x386/bdm2/drivers/apollo/apolloHW.h Wed May 4 22:54:03 1994 *************** *** 0 **** --- 1,61 ---- + /* + * BDM2: Banked dumb monochrome driver + * Pascal Haible 8/93, haible@izfm.uni-stuttgart.de + * + * bdm2/driver/apollo/apolloHW.h + * Hamish Coleman 11/93 hamish@zot.apana.org.au + * + * derived from: + * hgc1280/* + * Pascal Haible 8/93, haible@izfm.uni-stuttgart.de + * + * see bdm2/COPYRIGHT for copyright and disclaimers. + */ + + /* $XFree86: mit/server/ddx/x386/bdm2/drivers/apollo/apolloHW.h,v 2.0 1994/04/10 05:54:07 dawes Exp $ */ + + #include "compiler.h" /* void outb(port,val); + void outw(port,val); + unsigned int inb(port); + unsigned int inw(port); + void intr_disable(); + void intr_enable(); + short port; + short val; + */ + + #define C_STYLE_HEX_CONSTANTS + #include "apolloPorts.h" + + #define AP_NUM_REGS (0x10) + + #define AP_MEM_BASE (0xFA0000L) + #define AP_MEM_ALTERNATE (0xA0000L) + + #define AP_BANK_SIZE (0x40000L) + + #define AP_MEM_BASE_BANK (0L) + + #define AP_BANK_BOTTOM (AP_MEM_BASE_BANK) + #define AP_BANK_TOP (AP_BANK_BOTTOM+AP_BANK_SIZE) + + #define AP_MAP_BASE (AP_MEM_BASE) + #define AP_MAP_ALTERNATE (AP_MEM_ALTERNATE) + + #define AP_MAP_SIZE (AP_BANK_SIZE) + + #define AP_SEGMENT_SIZE (AP_BANK_SIZE) + #define AP_SEGMENT_SHIFT (18) + #define AP_SEGMENT_MASK (0x3FFFFL) + + #define AP_HDISPLAY (1280) + #define AP_VDISPLAY (1024) + #define AP_MAX_VIRTUAL_X (1280) + #define AP_MAX_VIRTUAL_Y (1024) + #define AP_SCAN_LINE_WIDTH (2048) + + #define apollo_Textmode (1411) + #define apollo_Graphmode (1412) + + #define Word_Width 128 + /* Kludge alert! - only for monochrome adaptors */ diff -c /dev/null mit/server/ddx/x386/bdm2/drivers/apollo/apolloPorts.h:2.0 *** /dev/null Wed May 4 22:54:03 1994 --- mit/server/ddx/x386/bdm2/drivers/apollo/apolloPorts.h Wed May 4 22:54:03 1994 *************** *** 0 **** --- 1,97 ---- + /* + * BDM2: Banked dumb monochrome driver + * Pascal Haible 8/93, haible@izfm.uni-stuttgart.de + * + * bdm2/driver/apollo/apolloPorts.h + * Hamish Coleman 11/93 hamish@zot.apana.org.au + * + * derived from: + * hgc1280/* + * Pascal Haible 8/93, haible@izfm.uni-stuttgart.de + * + * see bdm2/COPYRIGHT for copyright and disclaimers. + */ + + /* $XFree86: mit/server/ddx/x386/bdm2/drivers/apollo/apolloPorts.h,v 2.0 1994/04/10 05:54:08 dawes Exp $ */ + + #if 0 + #define AP_PORT_BASE 0x3d0 + /* Read Byte Status Reg */ + #define AP_PORT_STATUS AP_PORT_BASE + /* Write Word Write Enable Reg */ + #define AP_PORT_WRITE_ENABLE AP_PORT_BASE + /* Read Byte Device ID reg */ + #define AP_PORT_DEVICE_ID AP_PORT_BASE+0x01 + /* Write Word Raster Operation Reg */ + #define AP_PORT_ROP AP_PORT_BASE+0x02 + /* Write Word Diagnostic Memory Request */ + #define AP_PORT_DIAG_MEM_REQ AP_PORT_BASE+0x04 + /* Byte Control Reg 0 - blit Mode & Shift reg */ + #define AP_PORT_CONTROL_0 AP_PORT_BASE+0x08 + /* Byte Control Reg 1 - operation modes */ + #define AP_PORT_CONTROL_1 AP_PORT_BASE+0x0a + /* Byte Control Reg 2 - Plane acces mode */ + #define AP_PORT_CONTROL_2 AP_PORT_BASE+0x0c + /* Byte Control Reg 3 - Reset?? */ + #define AP_PORT_CONTROL_3 AP_PORT_BASE+0x0e + #endif + + #if defined(C_STYLE_HEX_CONSTANTS) + #undef CONST + #define CONST(a) (a) + #endif + + #define AP_PORT_BASE CONST(0x3b0) + #define AP_PORT_ALTERNATE CONST(0x3d0) + + #define AP_PORT_STATUS (Apollo_IOBASE) + #define AP_PORT_WRITE_ENABLE (Apollo_IOBASE) + #define AP_PORT_DEVICE_ID (Apollo_IOBASE+0x01) + #define AP_PORT_ROP (Apollo_IOBASE+0x02) + #define AP_PORT_DIAG_MEM_REQ (Apollo_IOBASE+0x04) + #define AP_PORT_CONTROL_0 (Apollo_IOBASE+0x08) + #define AP_PORT_CONTROL_1 (Apollo_IOBASE+0x0a) + #define AP_PORT_CONTROL_2 (Apollo_IOBASE+0x0c) + #define AP_PORT_CONTROL_3 (Apollo_IOBASE+0x0e) + + /* CREG 0 settings */ + #define AP_MODE_VECTOR 0x40 /* 010x.xxxx */ + #define AP_MODE_DBLT 0x80 /* 100x.xxxx */ + #define AP_MODE_NORMAL 0xE0 /* 111x.xxxx */ + #define AP_SHIFT_BITS 0x1F /* xxx1.1111 */ + + /* CREG 1 settings */ + #define AP_BLT_NORMAL 0x80 /* 1xxx.xxxx */ + #define AP_BLT_INVERSE 0x00 /* 0xxx.xxxx */ + #define AP_BLT_HIBIT 0x40 /* x!xx.xxxx */ + #define AP_ROP_ENABLE 0x10 /* xxx1.xxxx */ + #define AP_ROP_DISABLE 0x00 /* xxx0.xxxx */ + #define AP_SYNC_nRESET 0x08 /* xxxx.1xxx */ + #define AP_SYNC_ENABLE 0x02 /* xxxx.xx1x */ + #define AP_DISP_ENABLE 0x01 /* xxxx.xxx1 */ + #define AP_DISP_DISABLE 0x00 /* xxxx.xxx0 */ + #define AP_CREG1_NORMAL (AP_SYNC_nRESET | AP_SYNC_ENABLE | AP_DISP_ENABLE) + + #define AP_BIT_INV 7<<1 + #define AP_BIT_HIBIT 6<<1 + #define AP_BIT_ROP 4<<1 + #define AP_BIT_RESET 3<<1 + #define AP_BIT_SYNC 1<<1 + #define AP_BIT_DISP 0<<1 + + #define AP_ON 1 + #define AP_OFF 0 + + /* CREG 2 settings */ + #define AP_DATA_1s 0x00 /* 00xx.xxxx */ + #define AP_DATA_PIX 0x40 /* 01xx.xxxx */ + #define AP_DATA_PLN 0xC0 /* 11xx.xxxx */ + + /* CREG 3 settings */ + #define AP_RESET_CREG 0x80 /* 1000.0000 */ + + /* ROP's */ + #define AP_ROP_SRC 0x3 + + /* ID Numbers */ + #define AP_MONO_HIRES 0x09 diff -c /dev/null mit/server/ddx/x386/bdm2/drivers/apollo/apollodriv.c:2.0 *** /dev/null Wed May 4 22:54:04 1994 --- mit/server/ddx/x386/bdm2/drivers/apollo/apollodriv.c Wed May 4 22:54:04 1994 *************** *** 0 **** --- 1,402 ---- + /* + * BDM2: Banked dumb monochrome driver + * Pascal Haible 8/93, haible@izfm.uni-stuttgart.de + * + * bdm2/driver/apollo/apollodriv.c + * Hamish Coleman 11/93 hamish@zot.apana.org.au + * + * derived from: + * hgc1280/* + * Pascal Haible 8/93, haible@izfm.uni-stuttgart.de + * hga2/* + * Author: Davor Matic, dmatic@athena.mit.edu + * and + * vga256/* + * Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany. + * + * Thanks to Herb Peyerl (hpeyerl@novatel.ca) for the information on + * programming this card. + * + * see bdm2/COPYRIGHT for copyright and disclaimers. + */ + + /* $XFree86: mit/server/ddx/x386/bdm2/drivers/apollo/apollodriv.c,v 2.0 1994/04/10 05:54:10 dawes Exp $ */ + + #include "X.h" + #include "input.h" + #include "screenint.h" + + #include "compiler.h" + + #include "x386.h" + #include "x386Priv.h" + #include "xf86_OSlib.h" + #include "xf86_Config.h" + #include "bdm.h" + #include "apolloHW.h" + #ifdef NOTYET + #include "mfbfuncs.h" + #endif + + int apollo_Current_mode = apollo_Textmode; + + /* + * Define the Apollo I/O Ports + */ + unsigned Apollo_IOBASE = AP_PORT_BASE; + + unsigned Apollo_IOPorts[16] = {AP_PORT_BASE, AP_PORT_BASE + 1, AP_PORT_BASE + 2, AP_PORT_BASE + 3, + AP_PORT_BASE + 4, AP_PORT_BASE + 5, AP_PORT_BASE + 6, AP_PORT_BASE + 7, + AP_PORT_BASE + 8, AP_PORT_BASE + 9, AP_PORT_BASE + 0x0a, AP_PORT_BASE + 0x0b, + AP_PORT_BASE + 0x0c, AP_PORT_BASE + 0x0d, AP_PORT_BASE + 0x0e, AP_PORT_BASE + 0x0f}; + + int Num_Apollo_IOPorts = (sizeof(Apollo_IOPorts)/sizeof(Apollo_IOPorts[0])); + + char * ApolloIdent(); + Bool ApolloProbe(); + void ApolloEnterLeave(); + void * ApolloInit(); + void * ApolloSave(); + void ApolloRestore(); + void ApolloAdjust(); + Bool ApolloSaveScreen(); + void ApolloGetMode(); + void ApolloFbInit(); + + extern int ApolloDoBitblt(); + + /* Assembler functions in apolloBank.s + * - to be called by assembler functions only! */ + /* They are empty for this card */ + extern void ApolloSetRead(); + extern void ApolloSetWrite(); + extern void ApolloSetReadWrite(); + + #if 0 + /* From bdm.h -- see there, this here might not be up to date */ + /* + * structure for accessing the video chip`s functions + * + * We are doing a total encapsulation of the driver's functions. + * Banking (bdmSetReadWrite(p) etc.) is done in bdmBank.c + * using the chip's function pointed to by + * bmpSetReadWriteFunc(bank) etc. + */ + typedef struct { + char * (* ChipIdent)(); + Bool (* ChipProbe)(); + void (* ChipEnterLeave)(); + void * (* ChipInit)(); + void * (* ChipSave)(); + void (* ChipRestore)(); + void (* ChipAdjust)(); + Bool (* ChipSaveScreen)(); + void (* ChipGetMode)(); + /* These are the chip's banking functions: */ + /* they do the real switching to the desired bank */ + /* they 'become' bdmSetReadFunc() etc. */ + void (* ChipSetRead)(); + void (* ChipSetWrite)(); + void (* ChipSetReadWrite)(); + /* Bottom and top of the banking window (rel. to ChipMapBase) */ + /* Note: Top = highest accessable byte + 1 */ + void *ChipReadBottom; + void *ChipReadTop; + void *ChipWriteBottom; + void *ChipWriteTop; + /* Memory to map */ + int ChipMapBase; + int ChipMapSize; /* replaces MEMTOMAP */ + int ChipSegmentSize; + int ChipSegmentShift; + int ChipSegmentMask; + Bool ChipUse2Banks; + /* Display size is given by the driver */ + int ChipHDisplay; + int ChipVDisplay; + /* In case Scan Line in mfb is longer than HDisplay */ + int ChipScanLineWidth; + } bdmVideoChipRec, *bdmVideoChipPtr; + #endif /* 0 */ + + bdmVideoChipRec APOLLO = { + /* Functions */ + ApolloIdent, + ApolloProbe, + ApolloEnterLeave, + ApolloInit, + ApolloSave, + ApolloRestore, + ApolloAdjust, + ApolloSaveScreen, + NoopDDA, /* ApolloGetMode */ + #ifdef notyet + ApolloFbInit, /* Initialize acclerated functions */ + #endif + ApolloSetRead, + ApolloSetWrite, + ApolloSetReadWrite, + (void *)AP_BANK_BOTTOM, /* ReadBottom */ + (void *)AP_BANK_TOP, /* ReadTop */ + (void *)AP_BANK_BOTTOM, /* WriteBottom */ + (void *)AP_BANK_TOP, /* WriteTop */ + AP_MAP_BASE, /* MapBase */ + AP_MAP_SIZE, /* MapSize */ + AP_SEGMENT_SIZE, /* SegmentSize */ + AP_SEGMENT_SHIFT, /* SegmentShift */ + AP_SEGMENT_MASK, /* SegmentMask */ + TRUE, /* Use2Banks */ + /* for this non banking card this means the bitblt code can read from + * source and write to dest. without having to bank within */ + AP_HDISPLAY, /* HDisplay */ + AP_VDISPLAY, /* VDisplay */ + AP_SCAN_LINE_WIDTH, /* ScanLineWidth */ + }; + + /* + * ApolloIdent + */ + + char * + ApolloIdent(n) + int n; + { + static char *chipsets[] = {"apollo9"}; + if (n >= sizeof(chipsets) / sizeof(char *)) + return(NULL); + else return(chipsets[n]); + } + + /* + * ApolloProbe -- + * check whether an Apollo ID-9 board is installed + */ + + Bool + ApolloProbe() + { + #ifndef OPTION_SECONDARY + #define OPTION_SECONDARY 23 + /* + * If you have a 2.0 server then you will have to hardwire the + * following if statement and delete this error line + */ + #error You need to configure primary/secondary port + #endif + + /* + * Set up I/O ports to be used by this card + */ + if (OFLG_ISSET(OPTION_SECONDARY, &bdm2InfoRec.options)) { + int i; + + /* option "secondary" */ + Apollo_IOBASE = AP_PORT_ALTERNATE; + APOLLO.ChipMapBase = AP_MAP_ALTERNATE; + + for (i=0;i 125) continue; ! if (t3 < _err) ! _err=(unsigned)t3, _mul=i, _div=(unsigned)t2; } ! _mul+=3; ! _div+=2; ! return SetSC11412(_mul,_div,_D,1); } /* end of SC11412SetClock */ --- 52,64 ---- t3=t3*127/(i+3); if (t2 > 125) continue; ! if (t3 < ErrorTerm) ! ErrorTerm=(unsigned)t3, Multiplier=i, Divider=(unsigned)t2; } ! Multiplier+=3; ! Divider+=2; ! return SetSC11412(Multiplier,Divider,BigD,1); } /* end of SC11412SetClock */ diff -c mit/server/ddx/x386/etc/AccelCards:2.6 mit/server/ddx/x386/etc/AccelCards:2.7 *** mit/server/ddx/x386/etc/AccelCards:2.6 Wed May 4 22:54:19 1994 --- mit/server/ddx/x386/etc/AccelCards Wed May 4 22:54:20 1994 *************** *** 2,9 **** # # Accelerated card supported by XFree86 # ! # Version 1.3 - Mar 6, 1994 ! # List for XFree86 2.1 - David Wexelblat , #---------------------------------------------------------------------------# # This file contains the list of accelerated cards that have been tested # as compatible with XFree86. Other cards with supported chipsets may --- 2,9 ---- # # Accelerated card supported by XFree86 # ! # Version 1.4 - Apr 13, 1994 ! # List for XFree86 2.1.1 - David Wexelblat , #---------------------------------------------------------------------------# # This file contains the list of accelerated cards that have been tested # as compatible with XFree86. Other cards with supported chipsets may *************** *** 808,813 **** --- 808,846 ---- Submitter : Daniel Ling Last Edit Date : #---------------------------------------------------------------------------# + Card Vendor : Number Nine + Card Model : #9GXe Level 12 + Card Bus (ISA/EISA/VLB) : PCI + Chipset : 86C928P-P + Video Memory : 3072k + Memory Type (DRAM/VRAM) : 2MB VRAM, 1MB DRAM + Memory Speed : 70ns + Clock Chip : ICD2061A + Programmable? (Y/N) : Y + Number of clocks : programmable + Clocks : "icd2061a" + Option Flags : "bt485", "nolinear", "nomemaccess", "bt485_curs" + RAMDAC : BT485 + Submitter : Andreas Joppich + Last Edit Date : March 24,1994 + #---------------------------------------------------------------------------# + Card Vendor : Spea/V7 + Card Model : Mercury PCI Lite + Card Bus (ISA/EISA/VLB) : PCI + Chipset : S3 928P + Video Memory : 1 MB + Memory Type (DRAM/VRAM) : VRAM + Memory Speed : 60 ns + Clock Chip : Avasem AV9194-U7CW20 + Programmable? (Y/N) : N + Number of clocks : 16 + Clocks : 25 28 40 0 50 77 36 45 + Clocks (cont) : 130 120 80 31 110 65 75 95 + Option Flags : "sc15025" "dac_8_bit" + RAMDAC : Sierra SC 15025 + Submitter : Kai Maekisara + Last Edit Date : March 24, 1994 + #---------------------------------------------------------------------------# # 8514/A # #---------------------------------------------------------------------------# Card Vendor : Western Digital *************** *** 1554,1557 **** ! $XFree86: mit/server/ddx/x386/etc/AccelCards,v 2.6 1994/03/07 14:00:19 dawes Exp $ --- 1587,1590 ---- ! $XFree86: mit/server/ddx/x386/etc/AccelCards,v 2.7 1994/04/15 05:10:51 dawes Exp $ diff -c mit/server/ddx/x386/etc/README.ati:2.0 mit/server/ddx/x386/etc/README.ati:2.1 *** mit/server/ddx/x386/etc/README.ati:2.0 Wed May 4 22:54:20 1994 --- mit/server/ddx/x386/etc/README.ati Wed May 4 22:54:21 1994 *************** *** 1,6 **** This is the README for the XFree86 ATI SVGA driver. ! Last Revised: Mon May 10 15:17:57 1993 by faith@cs.unc.edu NOTE: Users of boards with the ATI Mach8 or Mach32 chipsets should be using the accelerated servers (XF86_Mach8 or XF86_Mach32). The --- 1,6 ---- This is the README for the XFree86 ATI SVGA driver. ! Last Revised: Wed March 23 1994 by tsi@gpu.srv.ualberta.ca NOTE: Users of boards with the ATI Mach8 or Mach32 chipsets should be using the accelerated servers (XF86_Mach8 or XF86_Mach32). The *************** *** 9,61 **** Q. What's new? ! For XFree86 version 1.2 (and later versions), there are two changes to the ! extregPlusXLAndOrMasks table: ! 1) ER_B0 was changed from 0x28 to 0x31. (In the Linux world, this was ! distributed as a binary patch long ago.) - 2) ER_BE was changed from 0x08, but only for cards EARLIER than the - 28800-5. - - Both of these changes allow more 28800-4 cards to work, although either one - may be sufficient for any one card. You can find these changes in the - driver by searching for the Feb 3 timestamps. - - - Q. What is the ATI SVGA driver? ! The ATI SVGA driver is a 256 color driver for the XFree86 server. The ! driver was written for the ATI WONDER series of graphics adapters. In ! general, the following modes are supported for cards with 512kb of memory: ! ! 640x480x256 ! 600x800x256 ! The following modes are supported for cards with 1024kb of memory: - 1024x768x256 - - Q. What is the ATI SVGA driver *NOT*? ! The ATI SVGA driver is *NOT* a black and white (2 bit) driver. Therefore, ! it will *NOT* work with the XFree86 monoserver. ! ! The ATI SVGA driver is *NOT* a 16 color driver. Even though your manual ! says that your graphics adapter has a 1024x768x16 mode, the ATI SVGA driver ! will *NOT* use this mode. If you want to use 1024x768, you *MUST* have 1MB ! of memory on your board and use the 1024x768x256 mode. ! ! The ATI SVGA driver will *NOT* support more than 8 bits of pixel depth. Therefore, even though your manual says that your graphics adapter supports ! modes using more than 256 colors, the ATI SVGA driver will *NOT* use these modes. ! The ATI SVGA driver is *NOT* an accelerated driver. If you have an ATI ! GRAPHICS ULTRA series card, the ATI SVGA driver will *NOT* use the accelerated hardware. It will only use the SVGA hardware. This will probably not be any faster than a VGA WONDER card, unless the card is on a local bus (and then, it won't be faster than a VGA WONDER card on a local --- 9,45 ---- Q. What's new? ! This is complete rewrite of the ATI SVGA driver found in XFree86 2.0 and 2.1. ! The major changes are a complete overhaul of clock selection and the addition ! of support for the 16-colour and monochrome servers. ! WARNING: The clocks specification used with previous versions of the driver ! SHOULD NOT BE USED with this one. Q. What is the ATI SVGA driver? ! The ATI SVGA driver is a 256-colour, 16-colour and monochrome driver for ! XFree86. The driver was written for the ATI VGAWONDER series of graphics ! adapters. The following approximate maximum resolutions are possible ! depending on the video memory available on the board: ! ! 256K 640x400x256 800x600x16 ! 512K 800x600x256 1296x800x16 ! 1M 1296x800x256 1600x1200x16 ! Maximum monochrome resolutions are the same as those for 16-colour mode. Q. What is the ATI SVGA driver *NOT*? ! The ATI SVGA driver does not (yet) support more than 8 bits of pixel depth. ! This is because XFree86 does not yet include a 15-bit, 16-bit or 24-bit server. Therefore, even though your manual says that your graphics adapter supports ! modes using more than 256 colors, the ATI SVGA driver will not use these modes. ! The ATI SVGA driver is not an accelerated driver. If you have an ATI ! GRAPHICS ULTRA series card, the ATI SVGA driver will not use the accelerated hardware. It will only use the SVGA hardware. This will probably not be any faster than a VGA WONDER card, unless the card is on a local bus (and then, it won't be faster than a VGA WONDER card on a local *************** *** 62,91 **** bus, if a card of this type existed). - Q. What cards will the driver work with? This is a difficult question, because there are many different ATI video cards, and it is sometimes difficult to tell them apart. The best way is to look on the card itself for the ATI chip numbers. Here is a partial ! list of ATI VGA WONDER cards. The MOST IMPORTANT number is the CHIP ! VERSION. Adapter version Dot clock Chip version ! VGA WONDER V3 ATI18800 NOT SUPPORTED ! VGA WONDER V4 ATI18800-1 NOT SUPPORTED ! VGA WONDER V5 ATI18810 ATI18800-1 NOT SUPPORTED ! VGA WONDER + (V6) ATI18810 ATI28800-2 ? MAY WORK ? ! VGA WONDER (1 MB) ATI18810 ATI28800-4 SUPPORTED ! VGA WONDER (1 MB) ATI18810 ATI28800-5 SUPPORTED ! VGA WONDER XL ATI18810 ATI28800-5 SUPPORTED ! ! Note that the ATI SVGA driver code has hooks and some support for all of ! the cards listed. However, with the earlier cards, there are serious ! differences in the programmer's interface. The only people who have ever ! worked on the code have had 28800-4 and 28800-5 chips, so these chips are ! the only ones that are actually known to work. The ATI GRAPHICS ULTRA chips seem to have SVGA support which is equivalent to the 28800-4, 28800-5, and 28800-a, although I can find no documentation --- 46,76 ---- bus, if a card of this type existed). Q. What cards will the driver work with? This is a difficult question, because there are many different ATI video cards, and it is sometimes difficult to tell them apart. The best way is to look on the card itself for the ATI chip numbers. Here is a partial ! list of ATI VGA WONDER cards. Adapter version Dot clock Chip version ! VGA WONDER V3 Crystals ATI18800 Might work ! VGA WONDER V4 Crystals ATI18800-1 Might work ! VGA WONDER V5 ATI18810 ATI18800-1 Might work ! VGA WONDER + (V6) ATI18810 ATI28800-2 Might work ! VGA WONDER (1 MB) ATI18810 ATI28800-4 Supported ! VGA WONDER (1 MB) ATI18810 ATI28800-5 Supported ! VGA WONDER XL ATI18810 ATI28800-5 Supported ! VGA WONDER XL24 ATI18810(?) ATI28800-6 Supported ! VGA 1024 D/XL/DXL ATI18811-0 ATI28800-5 Supported ! ! Other combinations are possible. Note that the ATI SVGA driver code has ! hooks and some support for all of the cards listed. However, with the ! earlier cards, there are serious differences in the programmer's interface. ! The only people who have ever worked on the code have had 28800-4 and ! 28800-5 chips, so these chips are the only ones that are actually known ! to work. The ATI GRAPHICS ULTRA chips seem to have SVGA support which is equivalent to the 28800-4, 28800-5, and 28800-a, although I can find no documentation *************** *** 94,190 **** original ULTRA may have some problems at greater than 640x480 resolution. - Q. What should I put in my Xconfig file? - THE MOST IMPORTANT LINE IS THE CLOCKS LINE: - - Clocks 18 22 25 28 36 44 50 56 - 30 32 37 39 40 0 75 65 - - The first row of clocks is usable on all VGA Wonder cards. The second row - is usable only on V5, PLUS, and XL cards (28800-2, 28800-4, and 28800-5). - However, you should include *BOTH* rows for *ALL* cards. - - The specification is different from the specification used with the ET-4000 - cards. Programs with claim to detect the clocks usually work only with - ET-4000 based cards. No such program exists for the ATI cards, since it - isn't needed. THE CLOCKS LINE SHOULD NEVER BE CHANGED. The order of - numbers in the clocks line *is* significant. - - The actual frequencies, which can be used to calculate the ModeDB lines, - are as follows: - - 18 = 18.000 - 22 = 22.450 - 25 = 25.175 - 28 = 28.320 - 36 = 36.000 - 44 = 44.900 - 50 = 50.350 - 56 = 56.640 - - 30 = 30.240 - 32 = 32.000 - 37 = 37.500 - 39 = 39.000 - 40 = 40.000 - 0 = 56.640 - 75 = 75.000 - 65 = 65.000 - The Chipset will be automatically detected. The chipset name for this ! driver is "ati". ! ! Here is a sample Xconfig (which I use): - RGBPath "/usr/lib/X11/rgb" - FontPath "/usr/lib/X11/fonts/misc/,/usr/lib/X11/fonts/75dpi/" - Keyboard - AutoRepeat 500 5 - ServerNumLock - - #Microsoft "/dev/mouse" - #MouseSystems "/dev/mouse" - #MMSeries "/dev/mouse" - #Logitech "/dev/mouse" - #MouseMan "/dev/mouse" - Busmouse "/dev/mouse" - # BaudRate 1200 - SampleRate 150 - # Emulate3Buttons - - - vga256 - ViewPort 0 0 - #Modes "1024x768v" "800x600v" - Modes "800x600v" - Clocks 18 22 25 28 36 44 50 56 - 30 32 37 39 40 0 75 65 - Displaysize 260 184 - - ModeDB - - # From NEC MultiSync 3FGx manual (copied by faith@cs.unc.edu) - # active_area front_porch pulse_width back_porch for horiz and vert - # VESA 640x480 at 72Hz (37.860kHz) - # 20.317us 0.762us 1.270us 4.603us; 12.678ms 0.238ms 0.079ms 0.740ms - # (I couldn't find a good clock rate for this one) - # VESA 800x600 at 72Hz (48.077kHz) - # 16.000us 1.120us 2.400us 1.280us; 12.480ms 0.770ms 0.125ms 0.478ms - "800x600v" 50 800 856 976 1040 600 637 643 693 - # VESA 1024x768 at 60Hz (48.363kHz) - # 15.754us 0.369us 2.092us 2.462us; 15.880ms 0.062ms 0.124ms 0.600ms - "1024x768v" 65 1024 1048 1184 1344 768 771 777 806 - - - Q. What is the history of the driver? ! The complete history of the driver is cloudy. I have tried to reconstruct ! the history from several email messages from a few of the people involved. ! The history is probably incomplete and inaccurate. Apparently, Per Lindqvist (pgd@compuram.bbt.se) first got an ATI driver working with an early ATI card under X386 1.1a. (This original driver may --- 79,146 ---- original ULTRA may have some problems at greater than 640x480 resolution. Q. What should I put in my Xconfig file? The Chipset will be automatically detected. The chipset name for this ! driver is "vgawonder". If you specify "ati" instead, any clocks ! specification in Xconfig will be ignored (which means the clocks will be ! probed). This is done to ensure you are aware that the clocks specification ! for previous versions of the driver is not supported by this version. ! ! One of the following clocks specifications (or an initial subset thereof) ! can be used depending on what the board uses to generate dot clocks: ! ! Crystals: ! ! Clocks 50.175 56.644 0.000 44.900 44.900 50.175 0.000 36.000 ! 25.088 28.322 0.000 22.450 22.450 25.088 0.000 18.000 ! 16.725 18.881 0.000 14.967 14.967 16.725 0.000 12.000 ! 12.544 14.161 0.000 11.225 11.225 12.544 0.000 9.000 ! ! ATI 18810 clock generator: ! ! Clocks 30.240 32.000 37.500 39.000 42.954 48.771 0.000 36.000 ! 40.000 56.644 75.000 65.000 50.350 56.640 0.000 44.900 ! 15.120 16.000 18.750 19.500 21.477 24.386 0.000 18.000 ! 20.000 28.322 37.500 32.500 25.175 28.320 0.000 22.450 ! 10.080 10.667 12.500 13.000 14.318 16.257 0.000 12.000 ! 13.333 18.881 25.000 21.667 16.783 18.880 0.000 14.967 ! 7.560 8.000 9.375 9.750 10.739 12.193 0.000 9.000 ! 10.000 14.161 18.750 16.250 12.586 14.160 0.000 11.225 ! ! ATI 18811-0 clock generator: ! ! Clocks 30.240 32.000 110.000 80.000 42.954 48.771 92.400 36.000 ! 39.910 44.900 75.000 65.000 50.350 56.640 0.000 44.900 ! 15.120 16.000 55.000 40.000 21.477 24.386 46.200 18.000 ! 19.955 22.450 37.500 32.500 25.175 28.320 0.000 22.450 ! 10.080 10.667 36.667 26.667 14.318 16.257 30.800 12.000 ! 13.303 14.967 25.000 21.667 16.783 18.880 0.000 14.967 ! 7.560 8.000 27.500 20.000 10.739 12.193 23.100 9.000 ! 9.978 11.225 18.750 16.250 12.588 14.160 0.000 11.225 ! ! ATI 18811-1 and ATI 18811-2 clock generators: ! ! Clocks 135.000 32.000 110.000 80.000 100.000 126.000 92.400 36.000 ! 39.910 44.900 75.000 65.000 50.350 56.640 0.000 44.900 ! 67.500 16.000 55.000 40.000 50.000 63.000 46.200 18.000 ! 19.955 22.450 37.500 32.500 25.175 28.320 0.000 22.450 ! 45.000 10.667 36.667 26.667 33.333 42.000 30.800 12.000 ! 13.303 14.967 25.000 21.667 16.783 18.880 0.000 14.967 ! 33.750 8.000 27.500 20.000 25.000 31.500 23.100 9.000 ! 9.978 11.225 18.750 16.250 12.588 14.160 0.000 11.225 ! ! The order of the clocks *is* important. Also, expect the server to zero ! duplicate clocks. A clock probe might show values for those that are 0.000 ! above. The probed values are approximate and the above are "spec'ed" ! values. If your probe shows a large discrepancy from the above, please ! e-mail me the stderr output. Q. What is the history of the driver? ! The complete history of the driver is rather cloudy. The following is ! probably incomplete and inaccurate. Apparently, Per Lindqvist (pgd@compuram.bbt.se) first got an ATI driver working with an early ATI card under X386 1.1a. (This original driver may *************** *** 192,234 **** Then Doug Evans (dje@cygnus.com) ported the driver to the ATI XL, trying in the process to make the driver work with all other ATI cards. ! I (Rik Faith) obtained the X11R4 driver from Doug Evans in the summer of ! 1992, and ported the code to the X386 part of X11R5. This subsequently ! became part of XFree86. Per and Doug did the majority of work, making the ! port somewhat trivial. I am grateful for their contribution. ! ! The port to X11R5 required writing the ATIProbe and ATIEnterLeave routines, ! and re-organizing the ATISave and ATIRestore routines. Someone else added ! the operating system specific code, but I don't know who. ! The major reference that I used was manual from ATI: "VGA WONDER Programmer's Reference" ATI Technologies, 1991. ! Release 1.2 -- Reference #PRG28800 ! (Part No. 10709B0412) However, Chapter 11 (ATI 18800 ATI VGAWONDER) of George Sutty and Steve Blair's "Advanced Programmer's Guide to SuperVGAs" (Brady/Simon & Schuster, ! 1990) was also useful. Further, someone e-mailed be a random document from the ATI BBS which was dated 3Jul91 and which may have been named PROGINFO.DOC. - Q. What is the future of the driver? ! I no longer use an ATI Wonder card and have no interest in this driver. ! Since I have received no bug reports or patches for the driver during the ! past 3 months, I think it is about as stable as it is going to get. (I ! suspect that support for the 28800-2, 28800-4, and 28800-5 chips can be ! made more robust, but I doubt that the other chips will ever be fully ! supported.) ! ! I have absolutely *NO* intention of porting the code to the mono or 16 ! color servers. If *you* want ATI support in the mono or 16 color servers, ! they *you* should do the port. (Since I no longer use my ATI Wonder card, ! please feel free to take over the current driver as well.) ! $XFree86: mit/server/ddx/x386/etc/README.ati,v 2.0 1993/10/18 12:18:00 dawes Exp $ --- 148,176 ---- Then Doug Evans (dje@cygnus.com) ported the driver to the ATI XL, trying in the process to make the driver work with all other ATI cards. ! Rik Faith (faith@cs.unc.edu) obtained the X11R4 driver from Doug Evans in the ! summer of 1992, and ported the code to the X386 part of X11R5. This ! subsequently became part of XFree86. ! I (Marc La France) have since taken the driver over after Rik got rid of his ! VGA Wonder card. + The major reference that was used was a manual from ATI: + "VGA WONDER Programmer's Reference" ATI Technologies, 1991. ! Release 1.3 -- Reference #PRG28800-13 However, Chapter 11 (ATI 18800 ATI VGAWONDER) of George Sutty and Steve Blair's "Advanced Programmer's Guide to SuperVGAs" (Brady/Simon & Schuster, ! 1990) was also useful. Further, someone e-mailed Rik a random document from the ATI BBS which was dated 3Jul91 and which may have been named PROGINFO.DOC. Q. What is the future of the driver? ! Please e-mail me any bug reports, comments, etc... ! $XFree86: mit/server/ddx/x386/etc/README.ati,v 2.1 1994/04/16 04:27:55 dawes Exp $ diff -c mit/server/ddx/x386/etc/README.cirrus:2.4 mit/server/ddx/x386/etc/README.cirrus:2.6 *** mit/server/ddx/x386/etc/README.cirrus:2.4 Wed May 4 22:54:21 1994 --- mit/server/ddx/x386/etc/README.cirrus Wed May 4 22:54:21 1994 *************** *** 3,10 **** ------------------------------------ A number of problems has been reported with the Cirrus driver in XFree86 ! 2.0, and it is hoped that these are alleviated in XFree86 2.1. Some ! important issues are described here. Please take the time to read this. Contents --- 3,10 ---- ------------------------------------ A number of problems has been reported with the Cirrus driver in XFree86 ! 2.0 and 2.1, and it is hoped that these are alleviated in XFree86 2.1.1. ! Some important issues are described here. Please take the time to read this. Contents *************** *** 16,22 **** 1 - Supported chipsets ! The following chipsets by Cirrus Logic are supported by this driver: CL-GD5420 ISA SVGA chipset, 1Mbyte; maximum dot clock is 50 MHz. Acceleration with extended write modes (used for scrolling --- 16,24 ---- 1 - Supported chipsets ! The driver is used in the 256 color SVGA server; the mono and 16-color ! servers are limited to VGA resolutions. The following chipsets by Cirrus ! Logic are supported: CL-GD5420 ISA SVGA chipset, 1Mbyte; maximum dot clock is 50 MHz. Acceleration with extended write modes (used for scrolling *************** *** 40,52 **** CL-GD5428 Enhanced version of the 5426. CL-GD543x Next generation 'Alpine' family chip with 64-bit internal memory interface. There is some limited support for this ! chipset, but it is untested. It is hoped that it will be ! usable with this driver (being largely compatible with ! the 5426). ! ! The CL-GD5429 will probably be compatible with the CL-GD5428. 2 - Xconfig options --- 42,55 ---- CL-GD5428 Enhanced version of the 5426. + CL-GD5429 Enhanced version of the 5428; officially supports higher + MCLK and has memory-mapped I/O (not used by the driver). + CL-GD543x Next generation 'Alpine' family chip with 64-bit internal memory interface. There is some limited support for this ! chipset, but it has not really been tested. It is hoped that ! it will be usable with this driver (being largely compatible ! with the 5426). The "nobitblt" option may be required. 2 - Xconfig options *************** *** 104,115 **** If you are not having any problems (performance or stability at high dot clocks), it is best not to use the "fast_dram" option. chipset "clgd5424" ! This option, when used with a 5426/28, will have the effect of disabling the use of the BitBLT engine (which the 5424 does not have), while retaining some acceleration. This will be useful for ! problems related to the BitBLT engine. videoram 1024 --- 107,121 ---- If you are not having any problems (performance or stability at high dot clocks), it is best not to use the "fast_dram" option. + Option "no_bitblt" chipset "clgd5424" ! This option, when used with a 5426/28/29/3x, will have the effect of disabling the use of the BitBLT engine (which the 5424 does not have), while retaining some acceleration. This will be useful for ! problems related to the BitBLT engine. In particular, this will ! be useful for the 5434, on which the functions that use the BitBLT ! engine may not work correctly. videoram 1024 *************** *** 129,136 **** This option will set the CRT FIFO threshold to an aggressive value; it will be the same as that used for lower dot clocks. It improves ! performance at high dot clocks. It is probably appropriate on the ! 543x chips. Option "no_2mb_banksel" --- 135,141 ---- This option will set the CRT FIFO threshold to an aggressive value; it will be the same as that used for lower dot clocks. It improves ! performance at high dot clocks. Option "no_2mb_banksel" *************** *** 164,170 **** supports 1024x768 at 76 Hz with a 85 MHz dot clock, a standard 5426/5428 based card is a very poor match anyway. ! Any 543x-based cards (untested at the time of writing) should do much better at high dot clocks; the DRAM bandwidth is basically double that of the 542x series. --- 169,175 ---- supports 1024x768 at 76 Hz with a 85 MHz dot clock, a standard 5426/5428 based card is a very poor match anyway. ! Any 5434-based cards (untested at the time of writing) should do much better at high dot clocks; the DRAM bandwidth is basically double that of the 542x series. *************** *** 196,203 **** 'Wavy' screen, horizontal jitter. ! You are probably using a dot clock that is too high. Try a lower ! dot clock. You can also try to tweak the mode timings; try increasing the second horizontal value somewhat. Here's a 65 MHz dot clock 1024x768 mode (about 60 Hz) that might help: --- 201,209 ---- 'Wavy' screen, horizontal jitter. ! You are probably using a dot clock that is too high; it is also ! possible that there is interference with a close MCLK. Try a ! lower dot clock. You can also try to tweak the mode timings; try increasing the second horizontal value somewhat. Here's a 65 MHz dot clock 1024x768 mode (about 60 Hz) that might help: *************** *** 206,212 **** Crash or hang with after start-up (probably with a black screen). Try the "noaccel" option. If that works, try chipset "clgd5424" for ! somewhat better performance. Crash, hang, or trash on the screen after a graphics operation, or 'Blitter timeout' messages from the server. --- 212,220 ---- Crash or hang with after start-up (probably with a black screen). Try the "noaccel" option. If that works, try chipset "clgd5424" for ! somewhat better performance. Check that the BIOS settings are OK; ! in particular, disable caching of 0xa0000-0xaffff. Disabling hidden ! DRAM refresh may also help. Crash, hang, or trash on the screen after a graphics operation, or 'Blitter timeout' messages from the server. *************** *** 213,219 **** This may be related to a bug in one of the accelerated functions, or a problem with the BitBLT engine. Try the "noaccel" option, or ! chipset "clgd5424". Screen is 'wrapped' vertically. --- 221,227 ---- This may be related to a bug in one of the accelerated functions, or a problem with the BitBLT engine. Try the "noaccel" option, or ! the "nobitblt" option. Also check the BIOS settings. Screen is 'wrapped' vertically. *************** *** 223,231 **** Chipset is not detected. ! Try forcing the chipset with the nearest lower number. For example, ! if you have a 5429 chip (not available at the time of writing), use ! chipset "clgd5428". If are having driver-related problems that are not addressed by this document, --- 231,237 ---- Chipset is not detected. ! Try forcing the chipset to the nearest lower number. If are having driver-related problems that are not addressed by this document, *************** *** 233,236 **** the XFree86 team, or post in the Usenet newsgroup "comp.windows.x.i386unix". ! $XFree86: mit/server/ddx/x386/etc/README.cirrus,v 2.4 1994/03/08 04:50:18 dawes Exp $ --- 239,242 ---- the XFree86 team, or post in the Usenet newsgroup "comp.windows.x.i386unix". ! $XFree86: mit/server/ddx/x386/etc/README.cirrus,v 2.6 1994/05/03 08:10:33 dawes Exp $ diff -c mit/server/ddx/x386/etc/modeDB.txt:2.14 mit/server/ddx/x386/etc/modeDB.txt:2.15 *** mit/server/ddx/x386/etc/modeDB.txt:2.14 Wed May 4 22:54:22 1994 --- mit/server/ddx/x386/etc/modeDB.txt Wed May 4 22:54:23 1994 *************** *** 1,11 **** ! # $XFree86: mit/server/ddx/x386/etc/modeDB.txt,v 2.14 1994/03/07 14:00:29 dawes Exp $ # # X386 Mode database # Compiled by David Wexelblat [dwex@goblin.org, dwex@aib.com] # Huge Contributions to v2.0 from Thomas Roell [roell@sgcs.com] # ! # Version 3.7 ! # Mar 06, 1994 # # The lastest version of this file and related documentation is available # for anonymous FTP from ftp.x.org in contrib/XF86mode.tar.gz, or from the --- 1,11 ---- ! # $XFree86: mit/server/ddx/x386/etc/modeDB.txt,v 2.15 1994/04/15 05:10:55 dawes Exp $ # # X386 Mode database # Compiled by David Wexelblat [dwex@goblin.org, dwex@aib.com] # Huge Contributions to v2.0 from Thomas Roell [roell@sgcs.com] # ! # Version 3.8 ! # Apr 13, 1994 # # The lastest version of this file and related documentation is available # for anonymous FTP from ftp.x.org in contrib/XF86mode.tar.gz, or from the *************** *** 1054,1059 **** --- 1054,1070 ---- "728x546" 45 728 760 864 928 546 548 551 570 ############################################################################### + # Monitor: Dell UltraScan FS17-EZ Model VC7EN + # Contributor: James Hawtin [J.W.Hawtin@lut.ac.uk] + # Last Edit Date: 4/13/94 + # + # name clock horizontal timing vertical timing flags + "640x480" 31.5 640 664 704 832 480 489 492 520 + "800x600" 40 800 848 1000 1056 600 605 607 633 + "1024x768" 75 1024 1048 1184 1328 768 771 777 806 + "1152x900" 80 1152 1200 1280 1528 900 900 903 930 + + ############################################################################### # Monitor: EDGE/MAG 1564NI # Contributor: Analytical Methods [ami@nwnet.net] # Last Edit Date: 2/9/93 *************** *** 1878,1883 **** --- 1889,1902 ---- "1024x768" 65 1024 1032 1176 1344 768 771 777 806 -hsync -vsync ############################################################################### + # Monitor: NEC 5FGp + # Contributor: Steven King [king@wildebeest.cig.mot.com] + # Last Edit Date: 3/7/94 + # + # name clock horizontal timing vertical timing flags + "1152x900" 90 1152 1152 1208 1448 900 900 940 948 + + ############################################################################### # Monitor: NEC Multisync JC-14O1P3ED # Contributor: Dirk Hohndel [hohndel@informatik.uni-wuerzburg.de] # Last Edit Date: 05/11/93 *************** *** 2150,2155 **** --- 2169,2184 ---- "1024x768" 75.40 1024 1032 1096 1272 768 768 772 792 ############################################################################### + # Monitor: Sony CPD-1304 + # Contributor: Ron Prichett [prichet@usceast.cs.scarolina.edu] + # Last Edit Date: 4/13/94 + # + # name clock horizontal timing vertical timing flags + "640x480" 25 640 672 768 800 480 500 502 555 + "800x600" 39 800 832 904 1008 600 610 612 655 + "1024x768" 65 1024 1080 1258 1348 768 776 778 808 + + ############################################################################### # Monitor: Sony CPD-1404E (14") in AUTO LOCK mode # Contributor: J. Schnitter [josch@pc.chemie.th-darmstadt.de] # Last Edit Date: 5/6/92 *************** *** 2168,2173 **** --- 2197,2211 ---- # name clock horizontal timing vertical timing flags "800x600" 45 800 808 908 1000 600 607 612 645 "1024x768" 80 1024 1040 1288 1376 768 768 780 800 + + ############################################################################### + # Monitor: Sony CPD-1430 + # Contributor: Jerod Tufte [jet@b62528.studnet.cwru.edu] + # Last Edit Date: 4/13/94 + # + # name clock horizontal timing vertical timing flags + "1024x768" 75 1024 1060 1300 1364 768 768 780 808 + "1152x900" 80 1152 1176 1256 1440 900 900 903 930 ############################################################################### # Monitor: Sony CPD-1604S diff -c mit/server/ddx/x386/os-support/xf86_OSlib.h:2.36 mit/server/ddx/x386/os-support/xf86_OSlib.h:2.37 *** mit/server/ddx/x386/os-support/xf86_OSlib.h:2.36 Wed May 4 22:54:28 1994 --- mit/server/ddx/x386/os-support/xf86_OSlib.h Wed May 4 22:54:28 1994 *************** *** 29,35 **** * */ ! /* $XFree86: mit/server/ddx/x386/os-support/xf86_OSlib.h,v 2.36 1994/02/26 05:03:03 dawes Exp $ */ #ifndef _XF86_OSLIB_H #define _XF86_OSLIB_H --- 29,35 ---- * */ ! /* $XFree86: mit/server/ddx/x386/os-support/xf86_OSlib.h,v 2.37 1994/03/17 12:50:23 dawes Exp $ */ #ifndef _XF86_OSLIB_H #define _XF86_OSLIB_H *************** *** 138,144 **** #endif /* SOLX86 */ # ifdef SYSV ! # if !defined(ISC) || defined(ISC202) # define NEED_STRERROR # endif # endif --- 138,144 ---- #endif /* SOLX86 */ # ifdef SYSV ! # if !defined(ISC) || defined(ISC202) || defined(ISC22) # define NEED_STRERROR # endif # endif diff -c mit/server/ddx/x386/os-support/bsd/bsd_video.c:2.15 mit/server/ddx/x386/os-support/bsd/bsd_video.c:2.17 *** mit/server/ddx/x386/os-support/bsd/bsd_video.c:2.15 Wed May 4 22:54:30 1994 --- mit/server/ddx/x386/os-support/bsd/bsd_video.c Wed May 4 22:54:30 1994 *************** *** 23,29 **** * */ ! /* $XFree86: mit/server/ddx/x386/os-support/bsd/bsd_video.c,v 2.15 1993/12/17 11:01:36 dawes Exp $ */ #include "X.h" #include "input.h" --- 23,29 ---- * */ ! /* $XFree86: mit/server/ddx/x386/os-support/bsd/bsd_video.c,v 2.17 1994/05/02 11:43:53 dawes Exp $ */ #include "X.h" #include "input.h" *************** *** 33,38 **** --- 33,42 ---- #include "x386Priv.h" #include "xf86_OSlib.h" + #if defined(__NetBSD__) && !defined(MAP_FILE) + #define MAP_FILE 0 + #endif + /***************************************************************************/ /* Video Memory Mapping section */ /***************************************************************************/ *************** *** 53,58 **** --- 57,63 ---- static Bool devMemChecked = FALSE; static Bool useDevMem = FALSE; + static int devMemFd = -1; /* * Check if /dev/mem can be mmap'd. If it can't print a warning when *************** *** 79,85 **** /* Try to map a page at the VGA address */ base = (pointer)mmap((caddr_t)0, 4096, PROT_READ|PROT_WRITE, MAP_FILE, fd, (off_t)0xA0000); ! close(fd); if (base == (pointer)-1) { if (warn) --- 84,90 ---- /* Try to map a page at the VGA address */ base = (pointer)mmap((caddr_t)0, 4096, PROT_READ|PROT_WRITE, MAP_FILE, fd, (off_t)0xA0000); ! devMemFd = fd; if (base == (pointer)-1) { if (warn) *************** *** 111,118 **** if (useDevMem) { int memFd; ! ! if ((memFd = open("/dev/mem", O_RDWR)) < 0) { FatalError("xf86MapVidMem: failed to open /dev/mem (%s)\n", strerror(errno)); --- 116,122 ---- if (useDevMem) { int memFd; ! if ((memFd = devMemFd) < 0) { FatalError("xf86MapVidMem: failed to open /dev/mem (%s)\n", strerror(errno)); *************** *** 119,125 **** } base = (pointer)mmap((caddr_t)0, Size, PROT_READ|PROT_WRITE, MAP_FILE, memFd, (off_t)Base); - close(memFd); if (base == (pointer)-1) { FatalError("%s: could not mmap /dev/mem [s=%x,a=%x] (%s)\n", --- 123,128 ---- diff -c /dev/null mit/server/ddx/x386/vga16/drivers/ati/Imakefile:2.0 *** /dev/null Wed May 4 22:54:39 1994 --- mit/server/ddx/x386/vga16/drivers/ati/Imakefile Wed May 4 22:54:39 1994 *************** *** 0 **** --- 1,29 ---- + XCOMM $XFree86: mit/server/ddx/x386/vga16/drivers/ati/Imakefile,v 2.0 1994/04/16 04:28:14 dawes Exp $ + XCOMM $XConsortium: Imakefile,v 1.1 91/07/16 22:59:40 gildea Exp $ + #include + + SRCS = driverA.c bankA.s + + OBJS = driverA.o bankA.o + + #if X386LinkKit + VGA256DIR = ../../vga256 + INCLUDES = -I. -I../../../include -I../.. + #else + INCLUDES = -I. -I../../../common -I../../../common_hw -I../../../os-support \ + -I../../../vga256/vga -I$(SERVERSRC)/include -I$(INCLUDESRC) + VGA256DIR = ../../../vga256/drivers + #endif + + DEFINES = -DXF86VGA16 + + NormalLibraryObjectRule() + + NormalRelocatableTarget(ati, $(OBJS)) + + ObjectFromSpecialSource(driverA,$(VGA256DIR)/ati/driver,/**/) + ObjectFromSpecialAsmSource(bankA,$(VGA256DIR)/ati/bank,/**/) + + InstallLinkKitNonExecFile(Imakefile,$(LINKKITDIR)/drivers/vga16/ati) + + DependTarget() diff -c /dev/null mit/server/ddx/x386/vga2/drivers/ati/Imakefile:2.0 *** /dev/null Wed May 4 22:54:49 1994 --- mit/server/ddx/x386/vga2/drivers/ati/Imakefile Wed May 4 22:54:49 1994 *************** *** 0 **** --- 1,29 ---- + XCOMM $XFree86: mit/server/ddx/x386/vga2/drivers/ati/Imakefile,v 2.0 1994/04/16 04:28:47 dawes Exp $ + XCOMM $XConsortium: Imakefile,v 1.1 91/07/16 22:59:40 gildea Exp $ + #include + + SRCS = driverA.c bankA.s + + OBJS = driverA.o bankA.o + + #if X386LinkKit + VGA256DIR = ../../vga256 + INCLUDES = -I. -I../../../include -I../.. + #else + INCLUDES = -I. -I../../../common -I../../../common_hw -I../../../os-support \ + -I../../../vga256/vga -I$(SERVERSRC)/include -I$(INCLUDESRC) + VGA256DIR = ../../../vga256/drivers + #endif + + DEFINES = -DMONOVGA + + NormalLibraryObjectRule() + + NormalRelocatableTarget(ati, $(OBJS)) + + ObjectFromSpecialSource(driverA,$(VGA256DIR)/ati/driver,/**/) + ObjectFromSpecialAsmSource(bankA,$(VGA256DIR)/ati/bank,/**/) + + InstallLinkKitNonExecFile(Imakefile,$(LINKKITDIR)/drivers/vga2/ati) + + DependTarget() diff -c mit/server/ddx/x386/vga256/drivers/ati/bank.s:1.5 mit/server/ddx/x386/vga256/drivers/ati/bank.s:2.0 *** mit/server/ddx/x386/vga256/drivers/ati/bank.s:1.5 Wed May 4 22:55:02 1994 --- mit/server/ddx/x386/vga256/drivers/ati/bank.s Wed May 4 22:55:02 1994 *************** *** 1,4 **** ! /* $XFree86: mit/server/ddx/x386/vga256/drivers/ati/bank.s,v 1.5 1993/02/24 10:52:41 dawes Exp $ */ /* * Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany. * --- 1,4 ---- ! /* $XFree86: mit/server/ddx/x386/vga256/drivers/ati/bank.s,v 2.0 1994/04/16 04:29:06 dawes Exp $ */ /* * Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany. * *************** *** 35,43 **** * by Doug Evans, dje@sspiff.UUCP. * ALL DISCLAIMERS APPLY TO MY ADDITIONS AS WELL. * ! * I've come to believe the people who design these cards couldn't ! * allow for future enhancements if their life depended on it! ! * The register set architecture is a joke! * * Boards V4 and V5 have the 18800-1 chip. Boards Plus and XL have the 28800 * chip. Page selection is done with Extended Register 1CE, Index B2. --- 35,46 ---- * by Doug Evans, dje@sspiff.UUCP. * ALL DISCLAIMERS APPLY TO MY ADDITIONS AS WELL. * ! * Changes to enhance support for the old V3 boards ! * by Marc La France (TSI @ UQV), tsi@gpu.srv.ualberta.ca ! * ALL DISCLAIMERS APPLY TO THESE CHANGES ALSO. ! * ! * V3 boards use a 18800 chip and are single-banked. Bank selection is done ! * with bits 1-4 of extended register 1CE, index B2. * * Boards V4 and V5 have the 18800-1 chip. Boards Plus and XL have the 28800 * chip. Page selection is done with Extended Register 1CE, Index B2. *************** *** 45,62 **** * * D7-D5 = Read page select bits 2-0 * D4 = Reserved (18800-1) ! * D4 = Read page select bit 3 (28800) Arrggghhhh!!!! * D3-D1 = Page select bits 2-0 * D0 = Reserved (18800-1) ! * D0 = Page select bit 3 (28800) Arrggghhhh!!!! ! * ! * Actually, it's even worse than this. The manual can't make up it's mind ! * whether its: ! * R2 R1 R0 R3 W2 W1 W0 W3 ! * or ! * R2 R1 R0 W3 W2 W1 W0 R3 ! * ! * It appears that the format is: R2 R1 R0 W3 W2 W1 W0 R3. */ #include "assyntax.h" --- 48,57 ---- * * D7-D5 = Read page select bits 2-0 * D4 = Reserved (18800-1) ! * D4 = Page select bit 3 (28800) * D3-D1 = Page select bits 2-0 * D0 = Reserved (18800-1) ! * D0 = Read page select bit 3 (28800) */ #include "assyntax.h" *************** *** 72,78 **** /* * We have a mirror for the segment register because an I/O read costs so much ! * more time, that is better to keep the value of it in memory. */ Segment: --- 67,75 ---- /* * We have a mirror for the segment register because an I/O read costs so much ! * more time, that is better to keep the value of it in memory. However, this ! * won't do for a V3 board because there are other bits in the segment select ! * register to worry about. */ Segment: *************** *** 88,94 **** ALIGNTEXT4 GLOBL GLNAME(ATISetRead) GLNAME(ATISetRead): ! AND_L (CONST(0x0F),EAX) /* FIXME: necessary? */ MOV_B (CONTENT(Segment),AH) AND_B (CONST(0x1E),AH) ROR_B (CONST(3),AL) --- 85,91 ---- ALIGNTEXT4 GLOBL GLNAME(ATISetRead) GLNAME(ATISetRead): ! AND_L (CONST(0x0F),EAX) MOV_B (CONTENT(Segment),AH) AND_B (CONST(0x1E),AH) ROR_B (CONST(3),AL) *************** *** 96,108 **** MOV_B (AH,CONTENT(Segment)) MOV_W (CONTENT(GLNAME(ATIExtReg)),DX) MOV_B (CONST(0xB2),AL) ! OUT1_W (DX) RET ALIGNTEXT4 GLOBL GLNAME(ATISetWrite) GLNAME(ATISetWrite): ! AND_L (CONST(0x0F),EAX) /* FIXME: necessary? */ MOV_B (CONTENT(Segment),AH) AND_B (CONST(0xE1),AH) SHL_B (CONST(1),AL) --- 93,105 ---- MOV_B (AH,CONTENT(Segment)) MOV_W (CONTENT(GLNAME(ATIExtReg)),DX) MOV_B (CONST(0xB2),AL) ! OUT_W RET ALIGNTEXT4 GLOBL GLNAME(ATISetWrite) GLNAME(ATISetWrite): ! AND_L (CONST(0x0F),EAX) MOV_B (CONTENT(Segment),AH) AND_B (CONST(0xE1),AH) SHL_B (CONST(1),AL) *************** *** 110,122 **** MOV_B (AH,CONTENT(Segment)) MOV_W (CONTENT(GLNAME(ATIExtReg)),DX) MOV_B (CONST(0xB2),AL) ! OUT1_W (DX) RET ALIGNTEXT4 GLOBL GLNAME(ATISetReadWrite) GLNAME(ATISetReadWrite): ! AND_L (CONST(0x0F),EAX) /* FIXME: necessary? */ MOV_B (AL,AH) SHL_B (CONST(1),AH) ROR_B (CONST(3),AL) --- 107,119 ---- MOV_B (AH,CONTENT(Segment)) MOV_W (CONTENT(GLNAME(ATIExtReg)),DX) MOV_B (CONST(0xB2),AL) ! OUT_W RET ALIGNTEXT4 GLOBL GLNAME(ATISetReadWrite) GLNAME(ATISetReadWrite): ! AND_L (CONST(0x0F),EAX) MOV_B (AL,AH) SHL_B (CONST(1),AH) ROR_B (CONST(3),AL) *************** *** 124,128 **** MOV_B (AH,CONTENT(Segment)) MOV_W (CONTENT(GLNAME(ATIExtReg)),DX) MOV_B (CONST(0xB2),AL) ! OUT1_W (DX) RET --- 121,147 ---- MOV_B (AH,CONTENT(Segment)) MOV_W (CONTENT(GLNAME(ATIExtReg)),DX) MOV_B (CONST(0xB2),AL) ! OUT_W ! RET ! ! ALIGNTEXT4 ! GLOBL GLNAME(ATIV3SetRead) ! GLOBL GLNAME(ATIV3SetWrite) ! GLOBL GLNAME(ATIV3SetReadWrite) ! GLNAME(ATIV3SetRead): ! GLNAME(ATIV3SetWrite): ! GLNAME(ATIV3SetReadWrite): ! AND_L (CONST(0x0F),EAX) ! SHL_B (CONST(1),AL) ! MOV_B (AL,AH) ! MOV_B (CONST(0xB2),AL) ! MOV_W (CONTENT(GLNAME(ATIExtReg)),DX) ! OUT_B ! INC_W (DX) ! IN_B ! AND_B (CONST(0xE1),AL) ! OR_B (AL,AH) ! DEC_W (DX) ! MOV_B (CONST(0xB2),AL) ! OUT_W RET diff -c mit/server/ddx/x386/vga256/drivers/ati/driver.c:2.14 mit/server/ddx/x386/vga256/drivers/ati/driver.c:2.15 *** mit/server/ddx/x386/vga256/drivers/ati/driver.c:2.14 Wed May 4 22:55:03 1994 --- mit/server/ddx/x386/vga256/drivers/ati/driver.c Wed May 4 22:55:04 1994 *************** *** 1,1049 **** /* ! * This is the X11R5 x386 driver for ATI VGA WONDER video adapters. At ! * present, this drive works best with ATI VGA WONDER PLUS and ATI VGA ! * WONDER XL cards with the ATI18810 dot clock and the ATI28800-5 chip. ! * ATI VGA WONDER cards with other chips revisions may not function as ! * desired. ! * ! * Revised: Sat Feb 13 13:23:18 1993 by root@winter * - */ - - /* - * Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany. - * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting ! * documentation, and that the name of Thomas Roell not be used in * advertising or publicity pertaining to distribution of the software without ! * specific, written prior permission. Thomas Roell makes no representations * about the suitability of this software for any purpose. It is provided * "as is" without express or implied warranty. * ! * THOMAS ROELL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, ! * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO ! * EVENT SHALL THOMAS ROELL BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. - * - * Author: Thomas Roell, roell@informatik.tu-muenchen.de - * - * $XFree86: mit/server/ddx/x386/vga256/drivers/ati/driver.c,v 2.14 1993/12/25 14:02:20 dawes Exp $ - */ - - /* - * Hacked, to get it working by: - * Per Lindqvist, pgd@compuram.bbt.se - * - * Enhancements to support most VGA Wonder cards (including Plus and XL) - * by Doug Evans, dje@sspiff.UUCP. - * ALL DISCLAIMERS APPLY TO THESE ADDITIONS AS WELL. - * - * I've come to believe the people who design these cards couldn't - * allow for future enhancements if their life depended on it! - * The register set architecture is a joke! - * */ ! /* ! * Hacked for X11R5 by Rik Faith (faith@cs.unc.edu), Thu Aug 6 21:35:18 1992 ! * ALL DISCLAIMERS APPLY TO MY ADDITIONS AS WELL. * ! * I wrote the ATIProbe and ATIEnterLeave routines from scratch. I also ! * re-organized the ATISave and ATIRestore routines. This was necessary, ! * since the vgaHWSave routine did not save the DAC values. There also ! * appeared to be a timing problem associated with the 486-33, but this is ! * not well understood at this time. ! * ! * Change log, faith@cs.unc.edu: ! * 3Feb93: ER_B0 in extregPlusXLAndOrMasks changed from 0x28 to 0x31. ! * 3Feb93: ER_BE in extregPlusXLAndOrMasks changed from 0x08 to 0x18, ! * but ONLY for chips BEFORE the 28800-5. This required adding ! * the ATIChipVersion variable. ! * 3Feb93: Added message stating correct clocks line. ! * 13Feb93: Fixed warning message for unsupported boards. ! * 13Feb93: Added comments and shortened lines over 80 characters long. ! * 13Feb93: Added the Graphics Ultra Plus \'a\' chip version */ ! /* ! * NOTES: ! * ! * 1) The ATI 18800/28800 use a special registers for their extended ! * features. There is one index and one data register. Under MS-DOS this ! * should be specified by reading C000:10. But since we cannot read this ! * now, let's use the same fixed address as our unix kernel does: ! * 0x1CE/0x1CF. I also got these ports form a second source, thus it seems ! * to be safe to use them. ! * ! * This comment is no longer valid. We read C000:10. ! * ! * 2) The ATI 18800/28800 extended registers differ in their i/o behaviour ! * from the normal ones: ! * ! * write: outw(0x1CE, (data << 8) | index); ! * read: outb(0x1CE, index); data = inb(0x1CF); ! * ! * Two consecutive byte-writes are NOT allowed. Furthermore is a index ! * written to 0x1CE only usable ONCE !!! ! * ! * More notes by dje ... ! * ! * 3) I've tried to allow for a future when this code drives all VGA Wonder ! * cards. To do this I had decide what to do with the clock values. Boards ! * prior to V5 use 4 crystals. Boards V5 and later use a clock generator ! * chip. Just to complicate things a bit, V3 and V4 boards aren't ! * compatible when it comes to choosing clock frequencies. :-( ! * ! * V3/V4 Board Clock Frequencies ! * R E G I S T E R S ! * 1CE(*) 3C2 3C2 Frequency ! * B2h/BEh ! * Bit 6/4 Bit 3 Bit 2 ! * --------- ------- ------- --------- ! * 0 0 0 50.175 ! * 0 0 1 56.644 ! * 0 1 0 Spare 1 ! * 0 1 1 44.900 ! * 1 0 0 44.900 ! * 1 0 1 50.175 ! * 1 1 0 Spare 2 ! * 1 1 1 36.000 ! * ! * (*): V3 uses Index B2h, bit 6; V4 uses Index BEh, bit 4. ! * ! * V5,Plus,XL Board Clock Frequencies ! * R E G I S T E R S ! * 1CE 1CE 3C2 3C2 Frequency ! * BEh B9h ! * Bit 4 Bit 1 Bit 3 Bit 2 ! * ------- ------- ------- ------- --------- ! * 1 0 0 0 42.954 ! * 1 0 0 1 48.771 ! * 1 0 1 0 External 0 (16.657) ! * 1 0 1 1 36.000 ! * 1 1 0 0 50.350 ! * 1 1 0 1 56.640 ! * 1 1 1 0 External 1 (28.322) ! * 1 1 1 1 44.900 ! * 0 0 0 0 30.240 ! * 0 0 0 1 32.000 ! * 0 0 1 0 37.500 ! * 0 0 1 1 39.000 ! * 0 1 0 0 40.000 ! * 0 1 0 1 56.644 ! * 0 1 1 0 75.000 ! * 0 1 1 1 65.000 ! * ! * For all of the above (V3,V4,V5,Plus,XL), these frequencies can be ! * divided by 1, 2, 3, or 4: ! * ! * Reg 1CE, Index B8h ! * Bit 7 Bit 6 ! * 0 0 Divide by 1 ! * 0 1 Divide by 2 ! * 1 0 Divide by 3 ! * 1 1 Divide by 4 ! * ! * What I've done is the following. The clock values specified in Xconfig ! * shall be: ! * ! * 18 22 25 28 36 44 50 56 ! * 30 32 37 39 40 0 75 65 (duplicate 56: --> 0) ! * ! * The first row is usable on all VGA Wonder cards. The second row is ! * only usable on V5,Plus,XL cards. The code in ATIInit() will map these ! * clock values into the appropriate bit settings for each of the cards. ! * Some of these clock choices aren't really usable, think of these as ! * place holders. ! * ! * 4) The ATI Programmer's Reference Manual lacked enough prose to explain ! * what the various bits of all of the various registers do. It is ! * entirely reasonable to believe some of the choices I've made are ! * imperfect because I didn't understand what I was doing. ! * ! * 5) V3 board support needs a lot of work. I suspect it isn't worth it. */ - - #include "X.h" #include "input.h" #include "screenint.h" ! #include "compiler.h" - #include "x386.h" #include "x386Priv.h" #include "xf86_OSlib.h" #include "xf86_HWlib.h" #include "vga.h" ! #include ! ! #define DEBUG 0 ! ! #if DEBUG ! #define TRACE(a) ErrorF a /* Enable TRACE statements */ ! #define DEBUG_PROBE 0 /* Debug the ATIProbe() routine */ ! #else ! #define TRACE(a) /* Disable TRACE statements */ ! #endif ! typedef struct { ! vgaHWRec std; /* good old IBM VGA */ ! unsigned char ATIExtRegBank[11]; /* ATI Registers B0,B1,B2,B3,B5,B6,B8,B9,BE,A6,A7 */ } vgaATIRec, *vgaATIPtr; ! ! #define ATI_BOARD_V3 0 /* which ATI board does the user have? */ ! #define ATI_BOARD_V4 1 /* keep these chronologically increasing */ ! #define ATI_BOARD_V5 2 ! #define ATI_BOARD_PLUS 3 ! #define ATI_BOARD_XL 4 ! ! #define ER_B0 0 /* Extended Register indices (ATIExtRegBank) */ ! #define ER_B1 1 ! #define ER_B2 2 ! #define ER_B3 3 ! #define ER_B5 4 ! #define ER_B6 5 ! #define ER_B8 6 ! #define ER_B9 7 ! #define ER_BE 8 ! #define ER_A6 9 ! #define ER_A7 10 ! ! #define ATIReg0 ATIExtRegBank[ER_B0] /* simplifies dje's additions */ ! #define ATIReg1 ATIExtRegBank[ER_B1] ! #define ATIReg2 ATIExtRegBank[ER_B2] ! #define ATIReg3 ATIExtRegBank[ER_B3] ! #define ATIReg5 ATIExtRegBank[ER_B5] ! #define ATIReg6 ATIExtRegBank[ER_B6] ! #define ATIReg8 ATIExtRegBank[ER_B8] ! #define ATIReg9 ATIExtRegBank[ER_B9] ! #define ATIRegE ATIExtRegBank[ER_BE] ! #define ATIRegA6 ATIExtRegBank[ER_A6] ! #define ATIRegA7 ATIExtRegBank[ER_A7] ! ! static Bool ATIProbe(); ! static char *ATIIdent(); ! static void ATIEnterLeave(); ! static Bool ATIInit(); ! static void *ATISave(); ! static void ATIRestore(); ! static void ATIAdjust(); ! extern void ATISetRead(); ! extern void ATISetWrite(); ! extern void ATISetReadWrite(); ! static int inATI(); ! vgaVideoChipRec ATI = { ! ATIProbe, ! ATIIdent, ! ATIEnterLeave, ! ATIInit, ! ATISave, ! ATIRestore, ! ATIAdjust, ! NoopDDA, ! NoopDDA, ! NoopDDA, ! ATISetRead, ! ATISetWrite, ! ATISetReadWrite, ! 0x10000, ! 0x10000, ! 16, ! 0xFFFF, ! 0x00000, 0x10000, ! 0x00000, 0x10000, ! TRUE, /* uses 2 banks */ ! VGA_DIVIDE_VERT, ! {0,}, ! 16, }; ! ! short ATIExtReg = 0x1ce; /* used by bank.s (must be short!) */ ! ! static int ATIBoard; /* one of ATI_BOARD_XXX */ ! static int ATIChipVersion; /* chip version number */ ! /* * ATIIdent -- */ static char * ATIIdent(n) int n; { ! static char *chipsets[] = {"ati"}; ! ! if (n + 1 > sizeof(chipsets) / sizeof(char *)) ! return(NULL); ! else ! return(chipsets[n]); } ! /* ! * ATIRestore -- ! * restore a video mode * ! * Results: ! * nope. * ! * Side Effects: ! * the display enters a new graphics mode. */ ! ! static void ! ATIRestore(restore) ! vgaATIPtr restore; { ! TRACE(("ATIRestore(restore=0x%x)\n", restore)); ! ! /* Unlock ATI specials */ ! outw(ATIExtReg, ((inATI(0xb8) & 0xC0) << 8) | 0xb8); ! ! /* Load ATI Extended Registers */ ! outw(ATIExtReg, (restore->ATIReg0 << 8) | 0xb0); ! outw(ATIExtReg, (restore->ATIReg1 << 8) | 0xb1); ! outw(ATIExtReg, (restore->ATIReg2 << 8) | 0xb2); ! outw(ATIExtReg, (restore->ATIReg3 << 8) | 0xb3); ! outw(ATIExtReg, (restore->ATIReg5 << 8) | 0xb5); ! outw(ATIExtReg, (restore->ATIReg6 << 8) | 0xb6); ! outw(ATIExtReg, (restore->ATIRegE << 8) | 0xbe); ! ! if (ATIBoard == ATI_BOARD_V5) ! outw(ATIExtReg, (restore->ATIReg9 << 8) | 0xb9); ! ! if (ATIBoard >= ATI_BOARD_PLUS) ! { ! outw(ATIExtReg, (restore->ATIReg9 << 8) | 0xb9); ! outw(ATIExtReg, (restore->ATIRegA6 << 8) | 0xa6); ! outw(ATIExtReg, (restore->ATIRegA7 << 8) | 0xa7); ! } ! ! /* This one last -- it might lock the special registers (probably will!) */ ! outw(ATIExtReg, (restore->ATIReg8 << 8) | 0xb8); ! ! /* Restore generic parts last */ ! vgaHWRestore(restore); } ! /* ! * ATISave -- ! * save the current video mode ! * ! * Results: ! * pointer to the current mode record. * ! * Side Effects: ! * None. */ ! ! static void * ! ATISave(save) ! vgaATIPtr save; { ! unsigned char b2_save,b8_save; ! ! TRACE(("ATISave(save=0x%x)\n", save)); ! ! /* Unlock ATI specials */ ! outw(ATIExtReg, (((b8_save = inATI(0xb8)) & 0xC0) << 8) | 0xb8); ! ! b2_save = inATI(0xb2); ! ! /* Select bank 0 */ ! outw(ATIExtReg, 0x00b2); ! ! save = (vgaATIPtr) vgaHWSave(save, sizeof(vgaATIRec)); ! ! /* ! * now get the fuck'in register ! */ ! ! save->ATIReg0 = inATI(0xb0); ! save->ATIReg1 = inATI(0xb1); ! save->ATIReg2 = b2_save; ! save->ATIReg5 = inATI(0xb5); ! save->ATIReg6 = inATI(0xb6); ! save->ATIReg3 = inATI(0xb3); ! save->ATIReg8 = b8_save; ! save->ATIRegE = inATI(0xbe); ! ! if (ATIBoard == ATI_BOARD_V5) ! save->ATIReg9 = inATI(0xb9); ! ! if (ATIBoard >= ATI_BOARD_PLUS) { ! save->ATIReg9 = inATI(0xb9); ! save->ATIRegA6 = inATI(0xa6); ! save->ATIRegA7 = inATI(0xa7); ! } ! ! return ((void *) save); } ! ! /* ! * ATIInit -- ! * Handle the initialization, etc. of a screen. ! * ! * Results: ! * None. ! * ! * Side Effects: ! * ! */ ! ! #define TABLE_END 255 /* denotes end of extended register table */ ! /* ! * Various bit values for mapping the clock values in Xconfig to bit masks for ! * the various registers. ! * WARNING: The bits are carefully chosen. They must not collide. * ! * See the discussion at the beginning of this file. */ ! ! #define CLOCK_0 (0 << 2) /* values for Reg 3C2, bits 2,3 */ ! #define CLOCK_1 (1 << 2) ! #define CLOCK_2 (2 << 2) ! #define CLOCK_3 (3 << 2) ! #define CLOCK_MASK 0x0c ! ! #define DIVIDE_BY_2 0x40 /* divide freq. by 2 */ ! #define DIVIDE_MASK 0xc0 /* for all of Reg 1CE, Index B8h, bits 6,7 */ ! ! #define V3V4_BIT64 0x10 /* V3 Reg 1CE, Index B2h, Bit 6; and ! V4 Reg 1CE, Index BEh, Bit 4 */ ! ! #define V5_BE_BIT4 0x10 /* V5,Plus,XL Reg 1CE, Index BEh, bit 4 */ ! #define V5_B9_BIT1 0x02 /* V5,Plus,XL Reg 1CE, Index B9h, bit 1 */ ! ! static Bool ! ATIInit(mode) ! DisplayModePtr mode; { ! /* ! * We use a table lookup method for setting the extended registers. ! * These values are taken from the Programmer's Ref. Manual and are ! * based on Mode 62h. Support for higher resolutions on earlier boards ! * is not complete (but I have documented what's missing). ! */ ! static unsigned char extregV3AndOrMasks[][3] = { ! { ER_B0, 0xc1, 0x30 }, /* 30 is 38 for mode 63h */ ! { ER_B1, 0x87, 0x00 }, ! { ER_B2, 0xbe, 0x00 }, /* 00 is 40 for mode 63h */ ! { ER_B5, 0x7f, 0x00 }, ! { ER_B6, 0xe7, 0x00 }, ! { ER_B8, 0x3f, 0x00 }, ! { TABLE_END } ! }; ! static unsigned char extregV4AndOrMasks[][3] = { ! { ER_B0, 0xc1, 0x30 }, /* FIXME: 30 is 38 for mode 63h */ ! { ER_B1, 0x87, 0x00 }, ! { ER_B3, 0xaf, 0x00 }, ! { ER_B5, 0x7f, 0x00 }, ! { ER_B6, 0xe7, 0x00 }, ! { ER_B8, 0x3f, 0x00 }, ! { ER_BE, 0xe5, 0x08 }, ! { TABLE_END } ! }; ! static unsigned char extregV5AndOrMasks[][3] = { ! { ER_B0, 0xc1, 0x30 }, /* FIXME: 30 is 38 for mode 63h */ ! { ER_B1, 0x87, 0x00 }, ! { ER_B3, 0xaf, 0x00 }, ! { ER_B5, 0x7f, 0x00 }, ! { ER_B6, 0xe7, 0x00 }, ! { ER_B8, 0x3f, 0x00 }, ! { ER_B9, 0xfd, 0x00 }, ! { ER_BE, 0xe5, 0x08 }, ! { TABLE_END } ! }; ! /* ! * Plus and XL Extended Registers ... ! * ! * The Programmer's Reference Manual has lots of contradictions. Sigh. ! * ER_B0: Page 16-5 says AND mask is 0xd8. Page 16-33 has 0xd1. ! * ER_B8: Page 16-5 has an AND mask of 0x7f which is wrong. ! * ER_B9: Page 16-5 has an AND mask of 0xff which is wrong. ! * ER_BE: Page 16-5 has an AND mask of 0xf5 which is wrong. ! */ ! static unsigned char extregPlusXLAndOrMasks[][3] = { ! /* Changed ER_B0 entry from 0x28 to 0x31, Wed Feb 3 09:22:13 1993, ! based on patch by ruhtra@turing.toronto.edu (Arthur Tateishi). */ ! { ER_B0, 0xd9, 0x31 }, /* Experiment: 28 was 20 */ ! { ER_B1, 0x87, 0x00 }, ! { ER_B3, 0xaf, 0x00 }, ! { ER_B5, 0x7f, 0x00 }, ! { ER_B6, 0xe2, 0x04 }, ! { ER_B8, 0x3f, 0x00 }, ! { ER_B9, 0xfd, 0x00 }, ! { ER_BE, 0xe5, 0x08 }, ! { ER_A6, 0xfe, 0x01 }, /* Experiment */ ! { ER_A7, 0xf4, 0x08 }, ! { TABLE_END } ! }; ! static unsigned char extregIndices[11] = { ! /* These values must coincide with the ER_x values. */ ! 0xb0, 0xb1, 0xb2, 0xb3, 0xb5, 0xb6, 0xb8, 0xb9, 0xbe, ! 0xa6, 0xa7 ! }; ! static unsigned char clockV3V4Table[] = { ! /* clock values: 18 22 25 28 36 44 50 56 */ ! V3V4_BIT64 | CLOCK_3 | DIVIDE_BY_2, /*18*/ ! 0 | CLOCK_3 | DIVIDE_BY_2, /*22*/ ! 0 | CLOCK_0 | DIVIDE_BY_2, /*25*/ ! 0 | CLOCK_1 | DIVIDE_BY_2, /*28*/ ! V3V4_BIT64 | CLOCK_3, /*36*/ ! 0 | CLOCK_3, /*44*/ ! 0 | CLOCK_0, /*50*/ ! 0 | CLOCK_1 /*56*/ ! }; ! static unsigned char clockV5PlusXLTable[] = { ! /* clock values: 18 22 25 28 36 44 50 56 ! 30 32 37 39 40 56 75 65 */ ! V5_BE_BIT4 | 0 | CLOCK_3 | DIVIDE_BY_2, /*18*/ ! V5_BE_BIT4 | V5_B9_BIT1 | CLOCK_3 | DIVIDE_BY_2, /*22*/ ! V5_BE_BIT4 | V5_B9_BIT1 | CLOCK_0 | DIVIDE_BY_2, /*25*/ ! V5_BE_BIT4 | V5_B9_BIT1 | CLOCK_1 | DIVIDE_BY_2, /*28*/ ! V5_BE_BIT4 | 0 | CLOCK_3, /*36*/ ! V5_BE_BIT4 | V5_B9_BIT1 | CLOCK_3, /*44*/ ! V5_BE_BIT4 | V5_B9_BIT1 | CLOCK_0, /*50*/ ! V5_BE_BIT4 | V5_B9_BIT1 | CLOCK_1, /*56*/ ! 0 | 0 | CLOCK_0, /*30*/ ! 0 | 0 | CLOCK_1, /*32*/ ! 0 | 0 | CLOCK_2, /*37*/ ! 0 | 0 | CLOCK_3, /*39*/ ! 0 | V5_B9_BIT1 | CLOCK_0, /*40*/ ! 0 | V5_B9_BIT1 | CLOCK_1, /*56*/ ! 0 | V5_B9_BIT1 | CLOCK_2, /*75*/ ! 0 | V5_B9_BIT1 | CLOCK_3 /*65*/ ! }; ! int i; ! unsigned char (*extregTabPtr)[3]; ! unsigned char *clockTabPtr; ! vgaATIPtr new; /* was: #define new ((vgaATIPtr)vgaNewVideoState) ! - made a variable to ease debugging */ ! ! TRACE(("ATIInit(mode=0x%x)\n", mode)); ! ! /* ! * Set the default values ... ! */ ! ! if (!vgaHWInit(mode, sizeof(vgaATIRec))) ! return(FALSE); ! ! new = (vgaATIPtr) vgaNewVideoState; /* must do after vgaHWInit() */ ! ! /* ! * On with ATI specific stuff ... ! */ ! ! switch (ATIBoard) { ! case ATI_BOARD_V3 : ! extregTabPtr = extregV3AndOrMasks; ! clockTabPtr = clockV3V4Table; ! break; ! case ATI_BOARD_V4 : ! extregTabPtr = extregV4AndOrMasks; ! clockTabPtr = clockV3V4Table; ! break; ! case ATI_BOARD_V5 : ! extregTabPtr = extregV5AndOrMasks; ! clockTabPtr = clockV5PlusXLTable; ! break; ! case ATI_BOARD_PLUS : ! case ATI_BOARD_XL : ! default : ! extregTabPtr = extregPlusXLAndOrMasks; ! clockTabPtr = clockV5PlusXLTable; ! break; ! } ! ! /* ! * The VGA Wonder/XL has a bit that says "multiply vertical values by ! * 2". This applies to CRTC[8,10h,12h,15h,18h]. At least that's what ! * the manual says. I suspect it applies elsewhere, and that even a few ! * of these values may be wrong. Unfortunately, their 1024x768 examples ! * don't set this bit, so what is going on? ! * ! * We use this feature when the vertical display size is > 480. This ! * means that odd values in the vertical timing field in Xconfig are ! * truncated (modulo 2). ! * ! * I've duplicated all of vgaHWInit()'s setting of CRTC for ! * completeness. Down the road we may have to add more stuff, so I've ! * brought it all in here just in case. ! */ ! ! if (mode->VDisplay > 480) { ! int shift = 1 + ((ATIBoard > ATI_BOARD_V3) && ! (mode->Flags & V_INTERLACE)); ! ! mode->VDisplay >>= shift; ! mode->VSyncStart >>= shift; ! mode->VSyncEnd >>= shift; ! mode->VTotal >>= shift; ! ! new->std.CRTC[0] = (mode->HTotal >> 3) - 5; ! new->std.CRTC[1] = (mode->HDisplay >> 3) - 1; ! new->std.CRTC[2] = (mode->HSyncStart >> 3) - 1; ! new->std.CRTC[3] = ((mode->HSyncEnd >> 3) & 0x1f) | 0x80; ! new->std.CRTC[4] = (mode->HSyncStart >> 3); ! new->std.CRTC[5] = (((mode->HSyncEnd >> 3) & 0x20) << 2) ! | (((mode->HSyncEnd >> 3)) & 0x1f); ! new->std.CRTC[6] = (mode->VTotal - 2) & 0xff; ! new->std.CRTC[7] = (((mode->VTotal - 2) & 0x100) >> 8) ! | (((mode->VDisplay - 1) & 0x100) >> 7) ! | ((mode->VSyncStart & 0x100) >> 6) ! | (((mode->VSyncStart) & 0x100) >> 5) ! | 0x10 ! | (((mode->VTotal - 2) & 0x200) >> 4) ! | (((mode->VDisplay - 1) & 0x200) >> 3) ! | ((mode->VSyncStart & 0x200) >> 2); ! new->std.CRTC[8] = 0x00; ! new->std.CRTC[9] = ((mode->VSyncStart & 0x200) >> 4 ) | 0x40; ! new->std.CRTC[10] = 0x00; ! new->std.CRTC[11] = 0x00; ! new->std.CRTC[12] = 0x00; ! new->std.CRTC[13] = 0x00; ! new->std.CRTC[14] = 0x00; ! new->std.CRTC[15] = 0x00; ! new->std.CRTC[16] = mode->VSyncStart & 0xff; ! new->std.CRTC[17] = (mode->VSyncEnd & 0x0f) | 0x20; ! new->std.CRTC[18] = (mode->VDisplay -1) & 0xff; ! new->std.CRTC[19] = vga256InfoRec.virtualX >> 4; ! new->std.CRTC[20] = 0x00; ! new->std.CRTC[21] = mode->VSyncStart & 0xff; ! new->std.CRTC[22] = (mode->VSyncStart + 1) & 0xff; ! new->std.CRTC[23] = 0xe7; /* bit 0x04 sets "*2 vert. values" */ ! new->std.CRTC[24] = 0xff; ! ! mode->VDisplay <<= shift; ! mode->VSyncStart <<= shift; ! mode->VSyncEnd <<= shift; ! mode->VTotal <<= shift; ! } else { ! new->std.CRTC[23] = 0xe3; /* ATI uses an even/odd bank ! 256 color mode */ ! } ! ! new->std.Sequencer[4] = 0x0a; ! new->std.Graphics[5] = 0x00; ! new->std.Attribute[16] = 0x01; ! ! #if 0 ! /* ! * Experiment. It looks like MiscOutReg is a little different for ! * the high resolution modes. I've duplicated the code from ! * vgaHWInit() because it looks like they have different handling ! * if the syncs are explicitly mentioned, and I want to preserve ! * this. ! */ ! ! if ((mode->Flags & (V_PHSYNC | V_NHSYNC)) ! && (mode->Flags & (V_PVSYNC | V_NVSYNC))) ! { ! new->std.MiscOutReg = 0x23; ! if (mode->Flags & V_NHSYNC) new->std.MiscOutReg |= 0x40; ! if (mode->Flags & V_NVSYNC) new->MiscOutReg |= 0x80; ! } else { ! if (mode->VDisplay < 400) new->std.MiscOutReg = 0xA3; ! else if (mode->VDisplay < 480) new->std.MiscOutReg = 0x63; ! else if (mode->VDisplay < 768) new->std.MiscOutReg = 0xE3; ! else new->std.MiscOutReg = 0xE3; ! } ! #endif ! ! /* ! * Get the extended register values ... ! */ ! ! bzero(new->ATIExtRegBank, sizeof(new->ATIExtRegBank)); ! for (i = 0; extregTabPtr[i][0] != TABLE_END; i++) { ! new->ATIExtRegBank[extregTabPtr[i][0]] = ! (inATI(extregIndices[extregTabPtr[i][0]]) & ! extregTabPtr[i][1]) | ! extregTabPtr[i][2]; ! } ! ! if ((ATIBoard > ATI_BOARD_V3) && (mode->Flags & V_INTERLACE)) ! new->ATIRegE |= 0x02; /* FIXME: doesn't work */ ! ! /* ! * Handle the oddballs ... ! * ! * It appears that bit 0 of extended register 0xb6 enables the upper ! * 512KB. ATI's MSWindows driver sets this bit to 1, and it appears ! * to work here as well (previously I was getting duplicate images: ! * the lower 512KB being used twice). ! */ ! ! switch (ATIBoard) { ! case ATI_BOARD_V3 : ! case ATI_BOARD_V4 : ! case ATI_BOARD_V5 : ! break; ! case ATI_BOARD_PLUS : ! case ATI_BOARD_XL : ! default : ! if (ATIChipVersion < '5' || ATIChipVersion >= 'a') { ! /* Changed ER_BE entry from 0x08 to 0x18, ! Wed Feb 3 12:11:27 1993, based on patch by ! aal@broue.rot.qc.ca (Alain Hebert). */ ! new->ATIExtRegBank[ER_BE] |= 0x10; ! } ! ! if (vga256InfoRec.videoRam == 1024) ! new->ATIReg6 |= 0x01; ! break; ! } ! ! /* ! * Get the clock value ... ! * See the discussion at the beginning of this file. ! */ ! ! new->std.MiscOutReg &= ~CLOCK_MASK; ! new->std.MiscOutReg |= clockTabPtr[mode->Clock] & CLOCK_MASK; ! ! if (ATIBoard == ATI_BOARD_V3) { ! if (clockTabPtr[mode->Clock] & V3V4_BIT64) ! new->ATIReg2 |= 0x40; ! } else if (ATIBoard == ATI_BOARD_V4) { ! if (clockTabPtr[mode->Clock] & V3V4_BIT64) ! new->ATIRegE |= 0x10; ! } else { ! if (clockTabPtr[mode->Clock] & V5_BE_BIT4) ! new->ATIRegE |= 0x10; ! if (clockTabPtr[mode->Clock] & V5_B9_BIT1) ! new->ATIReg9 |= 0x02; ! } ! ! new->ATIReg8 |= clockTabPtr[mode->Clock] & DIVIDE_MASK; ! return(TRUE); } ! /* ! * ATIAdjust -- ! * adjust the current video frame to display the mousecursor ! * ! * Results: ! * nope. * ! * Side Effects: ! * the display scrolls */ - static void ! ATIAdjust(x, y) ! int x, y; { ! int Base; ! ! /** ! ** TODO: Adjust the shift-count here !!! ! ** Ferraro writes, that there may be no shift at all. But this ! ** would kill our panning feature. ! **/ ! ! Base = (y * vga256InfoRec.virtualX + x + 3) >> 3; ! ! outw(vgaIOBase + 4, (Base & 0x00FF00) | 0x0C); ! outw(vgaIOBase + 4, ((Base & 0x00FF) << 8) | 0x0D); } ! ! static int ! inATI(reg_index) ! int reg_index; { ! outb(ATIExtReg, reg_index); ! return inb(ATIExtReg + 1); } ! /* ! * ATIProbe() checks for an ATI card. ! * ! * Returns TRUE or FALSE on exit. ! * ! * Makes sure the following are set in vga256InofRec: ! * chipset ! * videoRam ! * clocks ! * ! * Also sets: ! * ATIBoard ! * ATIExtREG ! * ! * References: ! * "VGA WONDER Programmer's Reference," ! * ATI Technologies, 1991. ! * Release 1.2 -- Reference #PRG28800 ! * (Part No. 10709B0412) ! * Chapter 7: Identification and Configuration ! * ! * George Sutty and Steve Blair's "Advanced Programmer's ! * Guide to SuperVGAs," Brady/Simon & Schuster, 1990. ! * Chapter 11: ATI 18800 ATI VGAWONDER ! * ! * Some random document from the ATI BBS dated 3Jun91, ! * which may have been called PROGINGO.DOC. ! * ! * Written by: ! * Rik Faith (faith@cs.unc.edu), Sun Aug 9 09:27:40 1992 * */ - - #define SIGNATURE_LENGTH 9 - #define BIOS_DATA_SIZE 0x50 static Bool ! ATIProbe() { ! char *signature = "761295520"; ! /* const char signature[] = "761295520"; */ ! const char signature_length = SIGNATURE_LENGTH; ! const int bios_data_size = BIOS_DATA_SIZE; ! char bios_signature[SIGNATURE_LENGTH]; ! char bios_data[BIOS_DATA_SIZE]; ! unsigned ports[2]; ! ! TRACE(("ATIProbe()\n")); ! ! /* ! * Set up I/O ports to be used by this card ! */ ! xf86ClearIOPortList(vga256InfoRec.scrnIndex); ! xf86AddIOPorts(vga256InfoRec.scrnIndex, Num_VGA_IOPorts, VGA_IOPorts); ! ! if (vga256InfoRec.chipset) { ! if (StrCaseCmp(vga256InfoRec.chipset, ATIIdent(0))) ! return FALSE; ! } else { ! if (xf86ReadBIOS(vga256InfoRec.BIOSbase, 0x31, ! (unsigned char *)bios_signature, ! signature_length) != signature_length) ! return FALSE; ! if (strncmp( signature, bios_signature, signature_length )) { ! TRACE(("ATIProbe: Incorrect Signature\n")); ! return FALSE; ! } ! } ! ! /* Assume an ATI card. */ ! vga256InfoRec.chipset = ATIIdent(0); ! ! /* Now look in the BIOS for magic numbers. */ ! if (xf86ReadBIOS(vga256InfoRec.BIOSbase, 0x00, (unsigned char *)bios_data, ! bios_data_size) != bios_data_size) ! return FALSE; ! ! ErrorF( "ATI BIOS Information Block:\n" ); ! ErrorF( " Signature code: %c%c = ", ! bios_data[ 0x40 ], bios_data[ 0x41 ] ); ! if (bios_data[ 0x40 ] != '3') ErrorF( "Unknown\n" ); ! else switch( bios_data[ 0x41 ] ) { ! case '1': ! ErrorF( "VGA WONDER\n" ); ! break; ! case '2': ! ErrorF( "EGA WONDER800+\n" ); ! break; ! case '3': ! ErrorF( "VGA BASIC-16\n" ); ! break; ! default: ! ErrorF( "Unknown\n" ); ! break; ! } ! ErrorF( " Chip version: %c = ", ! bios_data[ 0x43 ] ); ! switch (bios_data[ 0x43 ] ) { ! case '1': ! ErrorF( "ATI 18800\n" ); ! break; ! case '2': ! ErrorF( "ATI 18800-1\n" ); ! break; ! case '3': ! ErrorF( "ATI 28800-2\n" ); ! break; ! case '4': case '5': ! ErrorF( "ATI 28800-%c\n", bios_data[ 0x43 ] ); ! break; ! case 'a': ! ErrorF( "Mach-32\n" ); ! break; ! default: ! ErrorF( "Unknown\n" ); ! break; ! } ! ErrorF( " BIOS version: %d.%d\n", ! bios_data[ 0x4c ], bios_data[ 0x4d ] ); ! ! ! #if DEBUG_PROBE ! ErrorF( "\n" ); #endif ! ! ErrorF( " Byte at offset 0x42 = 0x%02x\n", ! bios_data[ 0x42 ] ); ! ! #if DEBUG_PROBE ! ErrorF( " 8 and 16 bit ROM supported: %s\n", ! bios_data[ 0x42 ] & 0x01 ? "Yes" : "No" ); ! ErrorF( " Mouse chip present: %s\n", ! bios_data[ 0x42 ] & 0x02 ? "Yes" : "No" ); ! ErrorF( " Inport compatible mouse port : %s\n", ! bios_data[ 0x42 ] & 0x04 ? "Yes" : "No" ); ! ErrorF( " Micro Channel supported: %s\n", ! bios_data[ 0x42 ] & 0x08 ? "Yes" : "No" ); ! ErrorF( " Clock chip present: %s\n", ! bios_data[ 0x42 ] & 0x10 ? "Yes" : "No" ); ! ErrorF( " Uses c000:0 to d000:ffff: %s\n", ! bios_data[ 0x42 ] & 0x80 ? "Yes" : "No" ); ! ErrorF( "\n" ); #endif ! ! ErrorF( " Byte at offset 0x44 = 0x%02x\n", ! bios_data[ 0x44 ] ); ! ! #if DEBUG_PROBE ! ErrorF( " Supports 70Hz non-interlaced: %s\n", ! bios_data[ 0x44 ] & 0x01 ? "No" : "Yes" ); ! ErrorF( " Supports Korean characters: %s\n", ! bios_data[ 0x44 ] & 0x02 ? "Yes" : "No" ); ! ErrorF( " Uses 45Mhz memory clock: %s\n", ! bios_data[ 0x44 ] & 0x04 ? "Yes" : "No" ); ! ErrorF( " Supports zero wait states: %s\n", ! bios_data[ 0x44 ] & 0x08 ? "Yes" : "No" ); ! ErrorF( " Uses paged ROMS: %s\n", ! bios_data[ 0x44 ] & 0x10 ? "Yes" : "No" ); ! ErrorF( " 8514/A hardware on board: %s\n", ! bios_data[ 0x44 ] & 0x40 ? "No" : "Yes" ); ! ErrorF( " 32K color DAC on board: %s\n", ! bios_data[ 0x44 ] & 0x80 ? "Yes" : "No" ); #endif ! ! ATIExtReg = *((short int *)bios_data + 0x08); ! ports[0] = ATIExtReg; ! ports[1] = ATIExtReg+1; ! xf86AddIOPorts(vga256InfoRec.scrnIndex, 2, ports); ! ! ATIChipVersion = bios_data[ 0x43 ]; ! ! switch( bios_data[ 0x43 ] ) { ! case '1': ! ATIBoard = ATI_BOARD_V3; ! break; ! case '2': ! if (bios_data[ 0x42 ] & 0x10) ATIBoard = ATI_BOARD_V5; ! else ATIBoard = ATI_BOARD_V4; ! break; ! case '3': ! case '4': ! ATIBoard = ATI_BOARD_PLUS; ! break; ! case '5': ! case 'a': /* Graphics Ultra Plus */ ! default: ! if (bios_data[ 0x44 ] & 0x80) ATIBoard = ATI_BOARD_XL; ! else ATIBoard = ATI_BOARD_PLUS; ! } ! ! ErrorF( "\n This video adapter is a: " ); ! switch (ATIBoard) { ! case ATI_BOARD_V3: ErrorF( "VGA WONDER V3\n" ); break; ! case ATI_BOARD_V4: ErrorF( "VGA WONDER V4\n" ); break; ! case ATI_BOARD_V5: ErrorF( "VGA WONDER V5\n" ); break; ! case ATI_BOARD_PLUS: ErrorF( "VGA WONDER PLUS (V6)\n" ); break; ! case ATI_BOARD_XL: ErrorF( "VGA WONDER XL (V7)\n" ); break; ! default: ErrorF( "Unknown\n" ); break; ! } ! ! ATIEnterLeave( ENTER ); ! ! if (!vga256InfoRec.videoRam) { ! if (bios_data[ 0x43 ] <= '2') { ! outb( ATIExtReg, 0xbb ); ! vga256InfoRec.videoRam = (inb( ATIExtReg + 1 ) & 0x20) ? 512 : 256; ! } else { ! outb( ATIExtReg, 0xb0 ); ! switch (inb( ATIExtReg + 1 ) & 0x18) { ! case 0x00: ! vga256InfoRec.videoRam = 256; ! break; ! case 0x10: ! vga256InfoRec.videoRam = 512; ! break; ! case 0x08: ! vga256InfoRec.videoRam = 1024; ! break; ! } ! } ! } ! ! ErrorF( " Amount of RAM on video adapter: %dk\n", ! vga256InfoRec.videoRam ); ! if (bios_data[ 0x43 ] < '4') { ! ErrorF( " WARNING: Driver may not work correctly with your board!\n" ); ! } ! ErrorF( "\n" ); ! ! #if DEBUG_PROBE ! ErrorF( "\nThe extended registers (ATIExtREG) are at 0x%x\n", ATIExtReg ); ! ErrorF( "The x386 ATI driver will set ATIBoard = %d\n", ATIBoard ); #endif ! ! if (vga256InfoRec.videoRam < 512) { ! ErrorF( "ATI driver requires at least 512k video RAM!\n" ); ! ATIEnterLeave( LEAVE ); ! return FALSE; ! } ! ! if (!vga256InfoRec.clocks) { ! ErrorF( "ATI driver requires \"clocks\" to be set in Xconfig!\n" ); ! ErrorF( "Clocks 18 22 25 28 36 44 50 56\n" ); ! ErrorF( " 30 32 37 39 40 0 75 65\n" ); ! ATIEnterLeave( LEAVE ); ! return FALSE; ! } ! ! vga256InfoRec.bankedMono = FALSE; ! return TRUE; } ! /* ! * ATIEnterLeave() ! * ! * This routine is used when entering or leaving X (i.e., when starting or ! * exiting an X session, or when switching to or from a vt which does not ! * have an X session running. ! * ! * Assumptions: ! * ATIProbe() has been called first, so that ATIExtReg is valid. ! * ! * Written by: ! * Rik Faith (faith@cs.unc.edu), Sun Aug 9 13:50:33 1992 * */ - static void ! ATIEnterLeave( enter ) ! Bool enter; { ! TRACE(("ATIEnterLeave(%d)\n",enter)); ! ! if (enter) ! { ! xf86EnableIOPorts(vga256InfoRec.scrnIndex); ! vgaIOBase = (inb(0x3CC) & 0x01) ? 0x3D0 : 0x3B0; ! } ! else ! { ! xf86DisableIOPorts(vga256InfoRec.scrnIndex); ! } } - --- 1,1028 ---- /* ! * Copyright 1994 by Marc La France (TSI @ UQV), tsi@gpu.srv.ualberta.ca * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting ! * documentation, and that the name of Marc La France not be used in * advertising or publicity pertaining to distribution of the software without ! * specific, written prior permission. Marc La France makes no representations * about the suitability of this software for any purpose. It is provided * "as is" without express or implied warranty. * ! * MARC LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, ! * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO ! * EVENT SHALL MARC LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ ! ! /* $XFree86: mit/server/ddx/x386/vga256/drivers/ati/driver.c,v 2.15 1994/04/16 04:29:09 dawes Exp $ */ ! ! /*************************************************************************/ ! /* ! * Author: Marc La France (TSI @ UQV), tsi@gpu.srv.ualberta.ca * ! * This is a rewrite of the ATI VGA WONDER driver included with XFree86 2.0 ! * and 2.1. Contributions to the previous versions of this driver by the ! * following people are hereby acknowledged: ! * ! * Thomas Roell, roell@informatik.tu-muenchen.de ! * Per Lindqvist, pgd@compuram.bbt.se ! * Doug Evans, dje@cygnus.com ! * Rik Faith, faith@cs.unc.edu ! * Arthur Tateishi, ruhtra@turing.toronto.edu ! * Alain Hebert, aal@broue.rot.qc.ca ! * ! * ... and, doubtless, many others whom I do not know about. ! * ! * This rewrite exists to fix interlacing, virtual console switching and clock ! * selection, implement clock probing, allow for an external clock selection ! * program, (hopefully) enhance support for V3 boards, add support for the ! * 16-colour and monochrome servers and lots of other nitpicky reasons I don't ! * recall right now. ! * ! * The driver is intended to support ATI VGA WONDER V3, V4, V5, PLUS, XL and ! * XL24 boards, although it probably works best with the last four. It will ! * also work with Mach8 and Mach32 boards but will not use their accelerated ! * features. ! * ! * The ATI x8800 chips use special registers for their extended features. ! * These registers are accessible through an index I/O port and a data I/O ! * port. The index port number is found in the 16-bit integer at real address ! * 0x000C0010 (which is usually 0x01CE) and the data port is one more ! * (usually 0x01CF). These ports differ in their I/O behaviour from the ! * normal VGA ones: ! * ! * write: outw(0x01CE, (data << 8) | index); ! * read: outb(0x01CE, index); data = inb(0x01CF); ! * ! * Two consecutive byte-writes are NOT allowed. Furthermore an index ! * written to 0x01CE is only usable ONCE! Note also that the setting of ATI ! * extended registers (especially those with clock selection bits) should be ! * bracketed by a sequencer reset. ! * ! * Boards prior to V5 use 4 crystals. Boards V5 and later use a clock ! * generator chip. V3 and V4 boards differ when it comes to choosing clock ! * frequencies. ! * ! * V3/V4 Board Clock Frequencies ! * R E G I S T E R S ! * 1CE(*) 3C2 3C2 Frequency ! * B2h/BEh ! * Bit 6/4 Bit 3 Bit 2 (MHz) ! * ------- ------- ------- ------- ! * 0 0 0 50.175 ! * 0 0 1 56.644 ! * 0 1 0 Spare 1 ! * 0 1 1 44.900 ! * 1 0 0 44.900 ! * 1 0 1 50.175 ! * 1 1 0 Spare 2 ! * 1 1 1 36.000 ! * ! * (*): V3 uses index B2h, bit 6; V4 uses index BEh, bit 4 ! * ! * V5, PLUS, XL and XL24 usually have an ATI 18810 clock generator chip, but ! * some have an ATI 18811-0, and it's quite conceivable that some exist with ! * ATI 18811-1's or ATI 18811-2's. ATI says there is no way for the driver to ! * determine which clock generator is on the board (their BIOS's are tailored ! * to the board). ! * ! * V5/PLUS/XL/XL24 Board Clock Frequencies ! * R E G I S T E R S ! * 1CE 1CE 3C2 3C2 Frequency ! * B9h BEh (MHz) 18811-1 ! * Bit 1 Bit 4 Bit 3 Bit 2 18810 18811-0 18811-2 ! * ------- ------- ------- ------- ------- ------- ------- ! * 0 0 0 0 30.240 30.240 135.000 ! * 0 0 0 1 32.000 32.000 32.000 ! * 0 0 1 0 37.500 110.000 110.000 ! * 0 0 1 1 39.000 80.000 80.000 ! * 0 1 0 0 42.954 42.954 100.000 ! * 0 1 0 1 48.771 48.771 126.000 ! * 0 1 1 0 (*1) 92.400 92.400 ! * 0 1 1 1 36.000 36.000 36.000 ! * 1 0 0 0 40.000 39.910 39.910 ! * 1 0 0 1 56.644 44.900 44.900 ! * 1 0 1 0 75.000 75.000 75.000 ! * 1 0 1 1 65.000 65.000 65.000 ! * 1 1 0 0 50.350 50.350 50.350 ! * 1 1 0 1 56.640 56.640 56.640 ! * 1 1 1 0 (*2) (*3) (*3) ! * 1 1 1 1 44.900 44.900 44.900 ! * ! * (*1) External 0 (supposedly 16.657 Mhz) ! * (*2) External 1 (supposedly 28.322 MHz) ! * (*3) This setting doesn't seem to generate anything ! * ! * For all boards, these frequencies can be divided by 1, 2, 3 or 4. ! * ! * Register 1CE, index B8h ! * Bit 7 Bit 6 ! * ------- ------- ! * 0 0 Divide by 1 ! * 0 1 Divide by 2 ! * 1 0 Divide by 3 ! * 1 1 Divide by 4 ! * ! * Because 36 MHz is the only (undivided) frequency available at the same index ! * on all boards, it will be used for calibration during clock probing. This ! * replaces vgaGetClocks's assumption that clock 1 is 28.322 MHz. ! * ! * There is some question as to whether or not bit 1 of index 0xB9 can ! * be used for clock selection on a V4 board. This driver makes it ! * available only if the "undocumented_clocks" option (itself ! * undocumented :-)) is specified in Xconfig. ! * ! * Also it appears that bit 0 of index 0xB9 can also be used for clock ! * selection on some boards. It is also only available under Xconfig ! * option "undocumented_clocks". */ ! ! /*************************************************************************/ ! /* ! * These are X and server generic header files. */ #include "X.h" #include "input.h" #include "screenint.h" ! ! /* ! * These are XFree86-specific header files ! */ #include "compiler.h" #include "x386.h" #include "x386Priv.h" #include "xf86_OSlib.h" #include "xf86_HWlib.h" + #define XCONFIG_FLAGS_ONLY + #include "xf86_Config.h" #include "vga.h" ! ! /* ! * Driver data structures. ! */ typedef struct { ! vgaHWRec std; /* good old IBM VGA */ ! ! unsigned char a3, a6, a7, ac, ad, ae, ! b0, b1, b2, b3, b5, b6, b8, b9, bd, be; } vgaATIRec, *vgaATIPtr; ! ! /* ! * Forward definitions for the functions that make up the driver. See ! * the definitions of these functions for the real scoop. ! */ ! static Bool ATIProbe(); ! static char * ATIIdent(); ! static Bool ATIClockSelect(); ! static void ATIEnterLeave(); ! static Bool ATIInit(); ! static void * ATISave(); ! static void ATIRestore(); ! static void ATIAdjust(); ! /* ! * These are the bank select functions. They are defined in bank.s ! */ ! extern void ATISetRead(); ! extern void ATISetWrite(); ! extern void ATISetReadWrite(); ! /* ! * Bank selection functions for V3 boards. These are also defined in bank.s ! */ ! extern void ATIV3SetRead(); ! extern void ATIV3SetWrite(); ! extern void ATIV3SetReadWrite(); ! ! /* ! * This data structure defines the driver itself. The data structure is ! * initialized with the functions that make up the driver and some data ! * that defines how the driver operates. ! */ vgaVideoChipRec ATI = { ! ATIProbe, /* Probe */ ! ATIIdent, /* Ident */ ! ATIEnterLeave, /* EnterLeave */ ! ATIInit, /* Init */ ! ATISave, /* Save */ ! ATIRestore, /* Restore */ ! ATIAdjust, /* Adjust */ ! NoopDDA, /* SaveScreen */ ! NoopDDA, /* GetMode */ ! NoopDDA, /* FbInit */ ! ATISetRead, /* SetRead */ ! ATISetWrite, /* SetWrite */ ! ATISetReadWrite, /* SetReadWrite */ ! 0x10000, /* Mapped memory window size (64k) */ ! 0x10000, /* Video memory bank size (64k) */ ! 16, /* Shift factor to get bank number */ ! 0xFFFF, /* Bit mask for address within a bank */ ! 0x00000, 0x10000, /* Boundaries for reads within a bank */ ! 0x00000, 0x10000, /* Boundaries for writes within a bank */ ! TRUE, /* Uses two banks */ ! VGA_DIVIDE_VERT, /* Divide interlaced vertical timings */ ! {0,}, /* Options are set by ATIProbe */ ! 16, /* Virtual X rounding */ }; ! ! /* ! * This is a convenience macro, so that entries in the driver structure ! * can simply be dereferenced with 'new->xxx'. ! */ ! #define new ((vgaATIPtr)vgaNewVideoState) ! /* + * This driver needs two non-standard I/O ports. These are determined + * by ATIProbe and are initialized to their most probable values here. + */ + static unsigned ATI_IOPorts[2] = {0x01CE, 0x01CF}; + static int Num_ATI_IOPorts = + (sizeof(ATI_IOPorts)/sizeof(ATI_IOPorts[0])); + short ATIExtReg = 0x01CE; /* Used by bank.s; Must be short */ + + /* + * Handy macros to read and write extended registers + */ + #define ATIGetExtReg(Index) \ + ( \ + outb(ATIExtReg, Index), \ + inb(ATIExtReg + 1) \ + ) + #define ATIPutExtReg(Index, Register_Value) \ + outw(ATIExtReg, ((Register_Value) << 8) | Index) + + static unsigned char ATIChipVersion; + static unsigned char ATIBoard; + #define ATI_BOARD_V3 0 /* ATIBoard values; Keep chronological */ + #define ATI_BOARD_V4 1 + #define ATI_BOARD_V5 2 + #define ATI_BOARD_PLUS 3 + #define ATI_BOARD_XL 4 + #define ATI_BOARD_XL24 5 + + static unsigned char saved_b9_bits_0_and_1 = 0; + + /* * ATIIdent -- + * + * Returns a string name for this driver or NULL. */ static char * ATIIdent(n) int n; { ! static char *chipsets[] = {"ati", "vgawonder"}; ! ! if (n >= (sizeof(chipsets) / sizeof(char *))) ! return(NULL); ! else ! return(chipsets[n]); } ! /* ! * ATIClockSelect -- * ! * This function selects the dot-clock with index 'no'. In most cases ! * this is done my setting the correct bits in various registers (generic ! * VGA uses two bits in the Miscellaneous Output Register to select from ! * 4 clocks). Care must be taken to protect any other bits in these ! * registers by fetching their values and masking off the other bits. * ! * This function returns FALSE if the passed index is invalid or if the ! * clock can't be set for some reason. */ ! static Bool ! ATIClockSelect(no) ! int no; { ! static unsigned char saved_misc, ! saved_b2, saved_b5, saved_b8, saved_b9, saved_be; ! unsigned char misc, b9; ! ! switch(no) ! { ! case CLK_REG_SAVE: ! /* ! * Here all of the registers that can be affected by ! * clock setting are saved into static variables ! */ ! saved_misc = inb(0x3CC); ! saved_b2 = ATIGetExtReg(0xB2); ! saved_b5 = ATIGetExtReg(0xB5); ! saved_b8 = ATIGetExtReg(0xB8); ! saved_b9 = ATIGetExtReg(0xB9); ! ATIPutExtReg(0xB5, (saved_b5 & 0x7F) ); ! if (ATIBoard != ATI_BOARD_V3) ! saved_be = ATIGetExtReg(0xBE); ! break; ! case CLK_REG_RESTORE: ! /* ! * Here all the previously saved registers are restored ! */ ! outw(0x3C4, 0x0100); /* Start synchronous reset */ ! ! if (ATIBoard != ATI_BOARD_V3) ! ATIPutExtReg(0xBE, saved_be); ! ATIPutExtReg(0xB2, saved_b2); ! ATIPutExtReg(0xB5, saved_b5); ! ATIPutExtReg(0xB9, saved_b9); ! ATIPutExtReg(0xB8, saved_b8); ! ! outb(0x3C2, saved_misc); ! outw(0x3C4, 0x0300); /* End synchronous reset */ ! ! break; ! default: ! /* ! * Set the generic two low-order bits of the clock ! * select ! */ ! misc = (inb(0x3CC) & 0xF3) | ((no << 2) & 0x0C); ! ! b9 = ATIGetExtReg(0xB9); ! ! /* ! * Set the high order bits ! */ ! if (ATIBoard == ATI_BOARD_V3) ! ATIPutExtReg(0xB2, ! (ATIGetExtReg(0xB2) & 0xBF) | ! ((no << 4) & 0x40)); ! else ! { ! ATIPutExtReg(0xBE, ! (ATIGetExtReg(0xBE) & 0xEF) | ! ((no << 2) & 0x10)); ! if ((ATIBoard != ATI_BOARD_V4) || ! (OFLG_ISSET(OPTION_UNDOC_CLKS, ! &vga256InfoRec.options))) ! { ! b9 = (b9 & 0xFD) | ((no >> 2) & 0x02); ! no >>= 1; ! } ! } ! if (OFLG_ISSET(OPTION_UNDOC_CLKS, ! &vga256InfoRec.options)) ! { ! b9 = (b9 & 0xFE) | ((no >> 3) & 0x01); ! b9 ^= saved_b9_bits_0_and_1; ! no >>= 1; ! } ! ATIPutExtReg(0xB9, b9); ! ! /* ! * Set clock divider bits ! */ ! ATIPutExtReg(0xB8, (no << 3) & 0xC0); ! ! /* ! * Must set miscellaneous output register last ! */ ! outb(0x3C2, misc); ! ! break; ! } ! return(TRUE); } ! /* ! * ATIProbe -- * ! * This is the function that makes a yes/no decision about whether or not ! * a chipset supported by this driver is present or not. The server will ! * call each driver's probe function in sequence, until one returns TRUE ! * or they all fail. */ ! static Bool ! ATIProbe() { ! # define BIOS_DATA_SIZE 0x50 ! unsigned char BIOS_Data[BIOS_DATA_SIZE]; ! # define Signature "761295520" ! # define Signature_Offset 0x31 ! # define BIOS_Signature &BIOS_Data[Signature_Offset] ! # define Signature_Size 9 ! ! /* ! * Get out if this isn't the driver the user wants ! */ ! if (vga256InfoRec.chipset) ! if (!StrCaseCmp(vga256InfoRec.chipset, ATIIdent(0))) ! { ! ErrorF( ! "Driver specification changed from \"ati\" to \"vgawonder\"\n"); ! OFLG_CLR(XCONFIG_CHIPSET, &vga256InfoRec.xconfigFlag); ! if (vga256InfoRec.clocks) ! { ! vga256InfoRec.clocks = 0; ! OFLG_CLR(XCONFIG_CLOCKS, ! &vga256InfoRec.xconfigFlag); ! if (!OFLG_ISSET(OPTION_PROBE_CLKS, ! &vga256InfoRec.options)) ! ErrorF("Clocks will be probed\n"); ! } ! } ! else if (StrCaseCmp(vga256InfoRec.chipset, ATIIdent(1))) ! return FALSE; ! ! /* ! * Get BIOS data this driver will use ! */ ! if (xf86ReadBIOS(vga256InfoRec.BIOSbase, 0, BIOS_Data, ! sizeof(BIOS_Data)) != sizeof(BIOS_Data)) ! return FALSE; ! ! /* ! * Get out if this is the wrong driver for installed chipset ! */ ! if (strncmp(Signature, BIOS_Signature, Signature_Size)) ! return FALSE; ! ! ATIChipVersion = BIOS_Data[0x43]; ! ErrorF("ATI BIOS Information:\n"); ! ErrorF(" Chip version: %c = ", ATIChipVersion); ! switch (ATIChipVersion) ! { ! case '1': ! ErrorF("ATI 18800"); ! ATIBoard = ATI_BOARD_V3; ! /* Reset a few things for V3 boards */ ! ATI.ChipSetRead = ATIV3SetRead; ! ATI.ChipSetWrite = ATIV3SetWrite; ! ATI.ChipSetReadWrite = ATIV3SetReadWrite; ! ATI.ChipUse2Banks = FALSE; ! break; ! case '2': ! ErrorF("ATI 18800-1"); ! /* Is a clock chip present? */ ! if (BIOS_Data[0x42] & 0x10) ! ATIBoard = ATI_BOARD_V5; ! else ! ATIBoard = ATI_BOARD_V4; ! break; ! case '3': ! ErrorF("ATI 28800-2"); ! ATIBoard = ATI_BOARD_PLUS; ! break; ! case '4': ! ErrorF("ATI 28800-4"); ! ATIBoard = ATI_BOARD_PLUS; ! break; ! case '5': ! ErrorF("ATI 28800-5"); ! /* Is there a 32K colour DAC on board? */ ! if (BIOS_Data[0x44] & 0x80) ! ATIBoard = ATI_BOARD_XL; ! else ! ATIBoard = ATI_BOARD_PLUS; ! break; ! case '6': ! ErrorF("ATI 28800-6"); ! ATIBoard = ATI_BOARD_XL24; ! break; ! case 'a': ! ErrorF("Mach-32"); ! /* Is there a 32K colour DAC on board? */ ! if (BIOS_Data[0x44] & 0x80) ! ATIBoard = ATI_BOARD_XL; ! else ! ATIBoard = ATI_BOARD_PLUS; ! break; ! default: ! ErrorF("Unknown!"); ! /* Is there a 32K colour DAC on board? */ ! if (BIOS_Data[0x44] & 0x80) ! ATIBoard = ATI_BOARD_XL; ! else ! ATIBoard = ATI_BOARD_PLUS; ! break; ! } ! ! ErrorF("\n This video adapter is a VGA WONDER "); ! switch (ATIBoard) ! { ! case ATI_BOARD_V3: ! ErrorF("V3"); ! break; ! case ATI_BOARD_V4: ! ErrorF("V4"); ! break; ! case ATI_BOARD_V5: ! ErrorF("V5"); ! break; ! case ATI_BOARD_PLUS: ! ErrorF("PLUS (V6)"); ! break; ! case ATI_BOARD_XL: ! ErrorF("XL (V7)"); ! break; ! case ATI_BOARD_XL24: ! ErrorF("XL24 (V8)"); /* sic */ ! break; ! default: ! ErrorF("Unknown"); ! break; ! } ! ErrorF("\n"); ! ! /* ! * Set up extended register addressing ! */ ! ATIExtReg = *((short int *)BIOS_Data + 0x08); ! ATI_IOPorts[0] = ATIExtReg; ! ATI_IOPorts[1] = ATIExtReg + 1; ! ! /* ! * Set up I/O ports to be used by this driver ! */ ! xf86ClearIOPortList(vga256InfoRec.scrnIndex); ! xf86AddIOPorts(vga256InfoRec.scrnIndex, Num_VGA_IOPorts, VGA_IOPorts); ! xf86AddIOPorts(vga256InfoRec.scrnIndex, Num_ATI_IOPorts, ATI_IOPorts); ! ! ATIEnterLeave(ENTER); /* Unlock registers */ ! ! if (OFLG_ISSET(OPTION_UNDOC_CLKS, &vga256InfoRec.options)) ! { ! /* ! * Remember initial settings of undocumented clock selection ! * bits ! */ ! saved_b9_bits_0_and_1 = ATIGetExtReg(0xB9); ! if (ATIBoard == ATI_BOARD_V4) ! saved_b9_bits_0_and_1 &= 0x03; ! else ! saved_b9_bits_0_and_1 &= 0x01; ! } ! ! /* ! * If the user has specified the amount of memory in the Xconfig ! * file, we respect that setting. ! */ ! if (!vga256InfoRec.videoRam) ! { ! /* ! * Otherwise, probe for the value ! */ ! if (ATIChipVersion <= '2') ! vga256InfoRec.videoRam = ! (ATIGetExtReg(0xBB) & 0x20) ? 512 : 256; ! else switch (ATIGetExtReg(0xB0) & 0x18) ! { ! case 0x00: ! vga256InfoRec.videoRam = 256; ! break; ! case 0x10: ! vga256InfoRec.videoRam = 512; ! break; ! case 0x08: ! vga256InfoRec.videoRam = 1024; ! break; ! } ! } ! ! /* ! * Again, if the user has specified the clock values in the Xconfig ! * file, we respect those choices. ! */ ! if ((!vga256InfoRec.clocks) || ! (OFLG_ISSET(OPTION_PROBE_CLKS, &vga256InfoRec.options))) ! { ! int Number_Of_Clocks; ! ! /* ! * Determine the number of clock values to probe for ! */ ! if (ATIBoard <= ATI_BOARD_V4) ! Number_Of_Clocks = 8*4; ! else ! Number_Of_Clocks = 16*4; ! if (OFLG_ISSET(OPTION_UNDOC_CLKS, &vga256InfoRec.options)) ! Number_Of_Clocks <<= 1 + (ATIBoard == ATI_BOARD_V4); ! if (Number_Of_Clocks > MAXCLOCKS) ! Number_Of_Clocks = MAXCLOCKS; ! ! /* ! * Probe the board for clock values. Note that vgaGetClocks ! * cannot be used for this purpose because it assumes clock ! * 1 is 28.322 MHz. Instead call xf86GetClocks directly ! * passing it slighly different parameters. ! */ ! xf86GetClocks(Number_Of_Clocks, ATIClockSelect, ! vgaProtect, (void (*)())vgaSaveScreen, ! (vgaIOBase + 0x0A), 0x08, ! 7, 36000, ! &vga256InfoRec); ! } ! ! /* ! * Set the maximum allowable dot-clock frequency (in kHz) ! */ ! vga256InfoRec.maxClock = 80000; ! ! /* ! * Set chipset name ! */ ! vga256InfoRec.chipset = ATIIdent(1); ! ! /* ! * Tell monochrome and 16-colour servers banked operation is ! * supported ! */ ! vga256InfoRec.bankedMono = TRUE; ! ! /* ! * Indicate supported options ! */ ! OFLG_SET(OPTION_PROBE_CLKS, &ATI.ChipOptionFlags); ! OFLG_SET(OPTION_UNDOC_CLKS, &ATI.ChipOptionFlags); ! ! /* ! * Return success ! */ ! return TRUE; } ! /* ! * ATIEnterLeave -- * ! * This function is called when the virtual terminal on which the server ! * is running is entered or left, as well as when the server starts up ! * and is shut down. Its function is to obtain and relinquish I/O ! * permissions for the SVGA device. This includes unlocking access to ! * any registers that may be protected on the chipset, and locking those ! * registers again on exit. */ ! static void ! ATIEnterLeave(enter) ! Bool enter; { ! static unsigned char saved_b8; ! ! if (enter) ! { ! xf86EnableIOPorts(vga256InfoRec.scrnIndex); ! ! vgaIOBase = (inb(0x3CC) & 0x01) ? 0x3D0 : 0x3B0; ! ! /* Unprotect CRTC[0-7] */ ! outb(vgaIOBase + 4, 0x11); ! outb(vgaIOBase + 5, inb(vgaIOBase + 5) & 0x7F); ! ! /* Unprotect ATI extended registers */ ! saved_b8 = ATIGetExtReg(0xB8); ! ATIPutExtReg(0xB8, saved_b8 & 0xC0); ! } ! else ! { ! /* Protect CRTC[0-7] */ ! outb(vgaIOBase + 4, 0x11); ! outb(vgaIOBase + 5, (inb(vgaIOBase + 5) & 0x7F) | 0x80); ! ! /* Protect ATI extended registers */ ! ATIPutExtReg(0xB8, ! (saved_b8 & 0x3F) | (ATIGetExtReg(0xB8) & 0xC0)); ! ! xf86DisableIOPorts(vga256InfoRec.scrnIndex); ! } ! } ! /* ! * ATIRestore -- * ! * This function restores a video mode. It basically writes out all of ! * the registers that have previously been saved in the vgaATIRec data ! * structure. ! * ! * Note that "Restore" is a slightly incorrect. This function is also ! * used when the server enters/changes video modes. The mode definitions ! * have previously been initialized by the Init() function, below. */ static void ! ATIRestore(restore) ! vgaATIPtr restore; { ! /* ! * Unlock ATI extended registers ! */ ! ATIPutExtReg(0xB8, ATIGetExtReg(0xB8) & 0xC0); ! ! /* ! * Get (back) to bank 0. ! */ ! if (ATIBoard == ATI_BOARD_V3) ! ATIPutExtReg(0xB2, ATIGetExtReg(0xB2) & 0xE1); ! else ! ATIPutExtReg(0xB2, 0); ! ! /* ! * Restore ATI registers. ! * ! * A special case - when using an external clock-setting program, ! * clock selection bits must not be changed. This condition can ! * be checked by the condition: ! * ! * if (restore->std.NoClock >= 0) ! * restore clock-select bits. ! */ ! ! if (restore->std.NoClock < 0) ! { ! unsigned char b9 = ATIGetExtReg(0xB9); ! ! /* ! * Retrieve current setting of clock select bits ! */ ! restore->b8 = (restore->b8 & 0x3F) | ! (ATIGetExtReg(0xB8) & 0xC0); ! if (ATIBoard == ATI_BOARD_V3) ! restore->b2 = (restore->b2 & 0xBF) | ! (ATIGetExtReg(0xB2) & 0x40); ! else ! { ! restore->be = (restore->be & 0xEF) | ! (ATIGetExtReg(0xBE) & 0x10); ! if ((ATIBoard != ATI_BOARD_V4) || ! (OFLG_ISSET(OPTION_UNDOC_CLKS, ! &vga256InfoRec.options))) ! { ! restore->b9 = (restore->b9 & 0xFD) | ! (b9 & 0x02); ! } ! } ! if (OFLG_ISSET(OPTION_UNDOC_CLKS, &vga256InfoRec.options)) ! restore->b9 = (restore->b9 & 0xFE) | (b9 & 0x01); ! } ! ! outw(0x3C4, 0x0100); /* Start synchronous reset */ ! ! if (ATIBoard != ATI_BOARD_V3) ! { ! ATIPutExtReg(0xBE, restore->be); ! if (ATIBoard > ATI_BOARD_V5) ! { ! ATIPutExtReg(0xA3, restore->a3); ! ATIPutExtReg(0xA6, restore->a6); ! ATIPutExtReg(0xA7, restore->a7); ! ATIPutExtReg(0xAC, restore->ac); ! ATIPutExtReg(0xAD, restore->ad); ! ATIPutExtReg(0xAE, restore->ae); ! } ! } ! ATIPutExtReg(0xB0, restore->b0); ! ATIPutExtReg(0xB1, restore->b1); ! ATIPutExtReg(0xB2, restore->b2); ! if (ATIChipVersion != '2') ! ATIPutExtReg(0xB3, restore->b3); ! ATIPutExtReg(0xB5, restore->b5); ! ATIPutExtReg(0xB6, restore->b6); ! ATIPutExtReg(0xB9, restore->b9); ! ATIPutExtReg(0xBD, restore->bd); ! ATIPutExtReg(0xB8, restore->b8); /* Must be last */ ! ! /* ! * Restore the generic VGA registers ! */ ! vgaHWRestore(restore); ! ! outb(0x3C2, restore->std.MiscOutReg); ! outw(0x3C4, 0x0300); /* End synchronous reset */ } ! ! /* ! * ATISave -- ! * ! * This function saves the video state. It reads all of the SVGA registers ! * into the vgaATIRec data structure. There is in general no need to ! * mask out bits here - just read the registers. ! */ ! static void * ! ATISave(save) ! vgaATIPtr save; { ! unsigned char b2, b8; /* The oddballs */ ! ! /* ! * Unlock ATI extended registers ! */ ! b8 = ATIGetExtReg(0xB8); ! ATIPutExtReg(0xB8, b8 & 0xC0); ! ! /* ! * Get back to bank zero. ! */ ! b2 = ATIGetExtReg(0xB2); ! if (ATIBoard == ATI_BOARD_V3) ! ATIPutExtReg(0xB2, b2 & 0xE1); ! else ! ATIPutExtReg(0xB2, 0); ! ! /* ! * This function will handle creating the data structure and filling ! * in the generic VGA portion. ! */ ! save = (vgaATIPtr)vgaHWSave(save, sizeof(vgaATIRec)); ! ! /* ! * Save ATI-specific registers ! */ ! save->b0 = ATIGetExtReg(0xB0); ! save->b1 = ATIGetExtReg(0xB1); ! save->b2 = b2; ! save->b3 = ATIGetExtReg(0xB3); ! save->b5 = ATIGetExtReg(0xB5); ! save->b6 = ATIGetExtReg(0xB6); ! save->b8 = b8; ! save->b9 = ATIGetExtReg(0xB9); ! save->bd = ATIGetExtReg(0xBD); ! if (ATIBoard != ATI_BOARD_V3) ! { ! save->be = ATIGetExtReg(0xBE); ! if (ATIBoard > ATI_BOARD_V5) ! { ! save->a3 = ATIGetExtReg(0xA3); ! save->a6 = ATIGetExtReg(0xA6); ! save->a7 = ATIGetExtReg(0xA7); ! save->ac = ATIGetExtReg(0xAC); ! save->ad = ATIGetExtReg(0xAD); ! save->ae = ATIGetExtReg(0xAE); ! } ! } ! return ((void *) save); } ! /* ! * ATIInit -- * + * This is the most important function (after the Probe) function. This + * function fills in the vgaATIRec with all of the register values needed + * to enable a video mode. */ static Bool ! ATIInit(mode) ! DisplayModePtr mode; { ! /* ! * The VGA Wonder boards have a bit that multiplies all vertical ! * timing values by 2. This feature is only used if it's actually ! * needed (i.e. when VTotal > 1024). If the feature is needed, fake ! * out an interlaced mode and let vgaHWInit divide things by two. ! * Note that this prevents the (incorrect) use of this feature with ! * interlaced modes. ! */ ! int saved_mode_flags = mode->Flags; ! if (mode->VTotal > 1024) ! mode->Flags |= V_INTERLACE; ! ! /* ! * This will allocate the data structure and initialize all of the ! * generic VGA registers. ! */ ! if (!vgaHWInit(mode,sizeof(vgaATIRec))) ! { ! mode->Flags = saved_mode_flags; ! return(FALSE); ! } ! ! /* ! * Override a few things ! */ ! #if !defined(MONOVGA) && !defined(XF86VGA16) ! new->std.Sequencer[4] = 0x0A; #endif ! new->std.Graphics[5] = 0x00; ! new->std.Attribute[16] = 0x01; ! if (saved_mode_flags != mode->Flags) ! { /* Use "double vertical timings" bit */ ! new->std.CRTC[23] |= 0x04; ! mode->Flags = saved_mode_flags; ! } ! ! /* ! * Set up ATI registers ! */ ! #if defined(MONOVGA) || defined(XF86VGA16) ! new->b0 = (ATIGetExtReg(0xB0) & 0x98) | 0x01; ! #else ! new->b0 = (ATIGetExtReg(0xB0) & 0x98) | 0x21; #endif ! if (ATIBoard >= ATI_BOARD_PLUS) ! new->b0 &= 0x7F; ! new->b1 = (ATIGetExtReg(0xB1) & 0x87) ; ! new->b3 = (ATIGetExtReg(0xB3) & 0xAF) ; ! new->b5 = (ATIGetExtReg(0xB5) & 0x7F) ; ! #if defined(MONOVGA) || defined(XF86VGA16) ! new->b6 = (ATIGetExtReg(0xB6) & 0xA2) | 0x40; ! #else ! new->b6 = (ATIGetExtReg(0xB6) & 0xA2) | 0x44; #endif ! new->b8 = (ATIGetExtReg(0xB8) ) ; ! new->b9 = (ATIGetExtReg(0xB9) ) ; ! new->bd = (ATIGetExtReg(0xBD) & 0xFB) ; ! if (ATIBoard == ATI_BOARD_V3) ! new->b2 = (ATIGetExtReg(0xB2) & 0xE0) ; ! else ! { ! new->b2 = 0; ! new->be = (ATIGetExtReg(0xBE) & 0x35) | 0x08; ! if (ATIBoard > ATI_BOARD_V5) ! { ! new->a3 = (ATIGetExtReg(0xA3) & 0xEF) ; ! new->a6 = (ATIGetExtReg(0xA6) ) | 0x01; ! new->a7 = (ATIGetExtReg(0xA7) & 0xFE) ; ! new->ac = (ATIGetExtReg(0xAC) & 0xBE) ; ! new->ad = (ATIGetExtReg(0xAD) & 0xF0) ; ! new->ae = (ATIGetExtReg(0xAE) & 0xF0) ; ! } ! } ! if (mode->Flags & V_INTERLACE) /* Enable interlacing */ ! { ! if (ATIBoard == ATI_BOARD_V3) ! new->b2 |= 0x01; ! else ! new->be |= 0x02; ! } ! #if defined(MONOVGA) || defined(XF86VGA16) ! if (vga256InfoRec.videoRam >= 512) ! new->b6 |= 0x01; /* Enable beyond 256K */ ! #else ! if (vga256InfoRec.videoRam >= 1024) ! new->b6 |= 0x01; /* Enable upper 512K */ #endif ! ! /* ! * Set clock select bits ! */ ! if (new->std.NoClock >= 0) ! { ! int Clock = mode->Clock; ! ! /* ! * Set generic clock select bits just in case ! */ ! new->std.MiscOutReg = (new->std.MiscOutReg & 0xF3) | ! ((Clock << 2) & 0x0C); ! ! /* ! * Set ATI clock select bits ! */ ! if (ATIBoard == ATI_BOARD_V3) ! new->b2 = (new->b2 & 0xBF) | ((Clock << 4) & 0x40); ! else ! { ! new->be = (new->be & 0xEF) | ((Clock << 2) & 0x10); ! if ((ATIBoard != ATI_BOARD_V4) || ! (OFLG_ISSET(OPTION_UNDOC_CLKS, ! &vga256InfoRec.options))) ! { ! new->b9 = (new->b9 & 0xFD) | ! ((Clock >> 2) & 0x02); ! Clock >>= 1; ! } ! } ! if (OFLG_ISSET(OPTION_UNDOC_CLKS, &vga256InfoRec.options)) ! { ! new->b9 = (new->b9 & 0xFE) | ((Clock >> 3) & 0x01); ! new->b9 ^= saved_b9_bits_0_and_1; ! Clock >>= 1; ! } ! ! /* ! * Set clock divider bits ! */ ! new->b8 = (new->b8 & 0x3F) | ((Clock << 3) & 0xC0); ! } ! return(TRUE); } ! /* ! * ATIAdjust -- * + * This function is used to initialize the SVGA Start Address - the first + * displayed location in the video memory. This is used to implement the + * virtual window. */ static void ! ATIAdjust(x, y) ! int x, y; { ! int Base = (y * vga256InfoRec.virtualX + x) >> 3; ! ! outw(vgaIOBase + 4, (Base & 0x00FF00) | 0x0C); ! outw(vgaIOBase + 4, ((Base & 0x00FF) << 8) | 0x0D); ! ! if (ATIBoard < ATI_BOARD_PLUS) ! ATIPutExtReg(0xB0, (ATIGetExtReg(0xB0) & 0x3F) | ! ((Base & 0x030000) >> 10)); ! else ! ATIPutExtReg(0xB0, (ATIGetExtReg(0xB0) & 0xBF) | ! ((Base & 0x010000) >> 10)); ! ATIPutExtReg(0xA3, (ATIGetExtReg(0xA3) & 0xEF) | ! ((Base & 0x020000) >> 13)); } diff -c mit/server/ddx/x386/vga256/drivers/cirrus/cir_blitter.c:2.2 mit/server/ddx/x386/vga256/drivers/cirrus/cir_blitter.c:2.3 *** mit/server/ddx/x386/vga256/drivers/cirrus/cir_blitter.c:2.2 Wed May 4 22:55:07 1994 --- mit/server/ddx/x386/vga256/drivers/cirrus/cir_blitter.c Wed May 4 22:55:07 1994 *************** *** 24,34 **** * */ ! /* $XFree86: mit/server/ddx/x386/vga256/drivers/cirrus/cir_blitter.c,v 2.2 1994/03/01 09:57:06 dawes Exp $ */ /* * This file contains all low-level functions that use the BitBLT engine ! * on the 5426/5428/5434 (except for those that involve system memory, * they are in cir_im.c). */ --- 24,34 ---- * */ ! /* $XFree86: mit/server/ddx/x386/vga256/drivers/cirrus/cir_blitter.c,v 2.3 1994/04/15 05:11:35 dawes Exp $ */ /* * This file contains all low-level functions that use the BitBLT engine ! * on the 5426/5428/5429/5434 (except for those that involve system memory, * they are in cir_im.c). */ *************** *** 83,89 **** extern int CirrusMemTop; if (!HAVE543X() && fillHeight > 1024) { ! /* Split into two for 5426 & 5428. */ CirrusBLTColorExpand8x8PatternFill(dstAddr, fgcolor, bgcolor, fillWidth, 1024, dstPitch, rop, patternword1, patternword2); CirrusBLTColorExpand8x8PatternFill(dstAddr + dstPitch * 1024, --- 83,89 ---- extern int CirrusMemTop; if (!HAVE543X() && fillHeight > 1024) { ! /* Split into two for 5426, 5428 & 5429. */ CirrusBLTColorExpand8x8PatternFill(dstAddr, fgcolor, bgcolor, fillWidth, 1024, dstPitch, rop, patternword1, patternword2); CirrusBLTColorExpand8x8PatternFill(dstAddr + dstPitch * 1024, *************** *** 149,155 **** extern int CirrusMemTop; if (!HAVE543X() && h > 1024) { ! /* Split into two for 5426 & 5428. */ CirrusBLT8x8PatternFill(dstAddr, w, 1024, pattern, destpitch, rop); CirrusBLT8x8PatternFill(dstAddr + destpitch * 1024, w, h - 1024, pattern, destpitch, rop); --- 149,155 ---- extern int CirrusMemTop; if (!HAVE543X() && h > 1024) { ! /* Split into two for 5426, 5428, & 5429. */ CirrusBLT8x8PatternFill(dstAddr, w, 1024, pattern, destpitch, rop); CirrusBLT8x8PatternFill(dstAddr + destpitch * 1024, w, h - 1024, pattern, destpitch, rop); *************** *** 203,209 **** extern int CirrusMemTop; if (!HAVE543X() && h > 1024) { ! /* Split into two for 5426 & 5428. */ CirrusBLT16x16PatternFill(dstAddr, w, 1024, pattern, destpitch, rop); CirrusBLT16x16PatternFill(dstAddr + destpitch * 1024, w, h - 1024, pattern, destpitch, rop); --- 203,209 ---- extern int CirrusMemTop; if (!HAVE543X() && h > 1024) { ! /* Split into two for 5426, 5428 & 5429. */ CirrusBLT16x16PatternFill(dstAddr, w, 1024, pattern, destpitch, rop); CirrusBLT16x16PatternFill(dstAddr + destpitch * 1024, w, h - 1024, pattern, destpitch, rop); diff -c mit/server/ddx/x386/vga256/drivers/cirrus/cir_colexp.c:2.6 mit/server/ddx/x386/vga256/drivers/cirrus/cir_colexp.c:2.7 *** mit/server/ddx/x386/vga256/drivers/cirrus/cir_colexp.c:2.6 Wed May 4 22:55:08 1994 --- mit/server/ddx/x386/vga256/drivers/cirrus/cir_colexp.c Wed May 4 22:55:09 1994 *************** *** 24,30 **** * */ ! /* $XFree86: mit/server/ddx/x386/vga256/drivers/cirrus/cir_colexp.c,v 2.6 1994/03/08 04:52:13 dawes Exp $ */ /* * This file contains the low level accelerated functions that use color --- 24,30 ---- * */ ! /* $XFree86: mit/server/ddx/x386/vga256/drivers/cirrus/cir_colexp.c,v 2.7 1994/04/15 05:11:37 dawes Exp $ */ /* * This file contains the low level accelerated functions that use color *************** *** 192,198 **** * It has to reverse the per-byte bit ordering because the Cirrus color * expansion works that way. * ! * This function should work on all chipsets, i.e. 5420 up to 5428. * On local bus and fast processor, it can be significantly faster than the * 5426 bitblt engine for large solid fills. * --- 192,198 ---- * It has to reverse the per-byte bit ordering because the Cirrus color * expansion works that way. * ! * This function should work on all chipsets, i.e. 5420 up to 5429. * On local bus and fast processor, it can be significantly faster than the * 5426 bitblt engine for large solid fills. * diff -c mit/server/ddx/x386/vga256/drivers/cirrus/cir_driver.c:2.30 mit/server/ddx/x386/vga256/drivers/cirrus/cir_driver.c:2.35 *** mit/server/ddx/x386/vga256/drivers/cirrus/cir_driver.c:2.30 Wed May 4 22:55:10 1994 --- mit/server/ddx/x386/vga256/drivers/cirrus/cir_driver.c Wed May 4 22:55:10 1994 *************** *** 1,5 **** /* ! * $XFree86: mit/server/ddx/x386/vga256/drivers/cirrus/cir_driver.c,v 2.30 1994/03/08 04:52:15 dawes Exp $ * Header: /usr/local/src/Xaccel/cirrus/RCS/driver.c,v 1.6 1993/04/04 17:57:44 bill Exp * * Copyright 1993 by Bill Reynolds, Santa Fe, New Mexico --- 1,5 ---- /* ! * $XFree86: mit/server/ddx/x386/vga256/drivers/cirrus/cir_driver.c,v 2.35 1994/04/26 07:28:31 dawes Exp $ * Header: /usr/local/src/Xaccel/cirrus/RCS/driver.c,v 1.6 1993/04/04 17:57:44 bill Exp * * Copyright 1993 by Bill Reynolds, Santa Fe, New Mexico *************** *** 84,89 **** --- 84,90 ---- #define CLGD5424_ID 0x25 #define CLGD5426_ID 0x24 #define CLGD5428_ID 0x26 + #define CLGD5429_ID 0x27 #define CLGD6205_ID 0x02 #define CLGD6215_ID 0x22 /* Hmmm... looks like a 5420 or 5422 */ #define CLGD6225_ID 0x32 *************** *** 90,96 **** #define CLGD6235_ID 0x06 #define CLGD543x_ID 0x29 ! #define Is_62x5(x) ((x) >= CLGD6205 && (x) <= CLGD6235_ID) /* For now, only save a couple of the */ /* extensions. */ --- 91,97 ---- #define CLGD6235_ID 0x06 #define CLGD543x_ID 0x29 ! #define Is_62x5(x) ((x) >= CLGD6205 && (x) <= CLGD6235) /* For now, only save a couple of the */ /* extensions. */ *************** *** 214,219 **** --- 215,221 ---- 80100, /* 5424 */ 85500, /* 5426 */ 85500, /* 5428 */ + 85500, /* 5429 */ /* just guessing.... dwex */ 75200, /* 6205 */ *************** *** 260,266 **** int n; { static char *chipsets[] = {"clgd5420", "clgd5422", "clgd5424", "clgd5426", ! "clgd5428", "clgd6205", "clgd6215", "clgd6225", "clgd6235", "clgd543x" }; --- 262,268 ---- int n; { static char *chipsets[] = {"clgd5420", "clgd5422", "clgd5424", "clgd5426", ! "clgd5428", "clgd5429", "clgd6205", "clgd6215", "clgd6225", "clgd6235", "clgd543x" }; *************** *** 510,515 **** --- 512,520 ---- case CLGD5428_ID: cirrusChip = CLGD5428; break; + case CLGD5429_ID: + cirrusChip = CLGD5429; + break; /* * LCD driver chips... the +1 options are because *************** *** 661,667 **** "available videoram reduced by 1k to allow for scratch space"); } /* ! * Banking granularity is 16k for the 5426 or 5428 * when allowing access to 2MB, and 4k otherwise */ if (vga256InfoRec.videoRam > 1024) --- 666,672 ---- "available videoram reduced by 1k to allow for scratch space"); } /* ! * Banking granularity is 16k for the 5426, 5428 or 5429 * when allowing access to 2MB, and 4k otherwise */ if (vga256InfoRec.videoRam > 1024) *************** *** 710,715 **** --- 715,721 ---- OFLG_SET(OPTION_FIFO_CONSERV, &CIRRUS.ChipOptionFlags); OFLG_SET(OPTION_FIFO_AGGRESSIVE, &CIRRUS.ChipOptionFlags); OFLG_SET(OPTION_NO_2MB_BANKSEL, &CIRRUS.ChipOptionFlags); + OFLG_SET(OPTION_NO_BITBLT, &CIRRUS.ChipOptionFlags); return(TRUE); } *************** *** 732,752 **** cirrusBusType = CIRRUS_FASTBUS; cirrusUseBLTEngine = FALSE; ! if ((cirrusChip == CLGD5426 || cirrusChip == CLGD5428 || ! cirrusChip == CLGD543x)) { cirrusUseBLTEngine = TRUE; ! #if 0 ! /* Don't use the BitBLT engine on the 5426 and 5428 when using */ ! /* the second megabyte. */ ! if ((vga256InfoRec.virtualX * vga256InfoRec.virtualY + 256 > ! 1024 * 1024) && cirrusChip != CLGD543x) ! { cirrusUseBLTEngine = FALSE; - ErrorF("%s %s: BitBLT engine functions disabled for 2 Mbyte operation\n", - XCONFIG_PROBED, cirrusIdent(cirrusChip)); - } - #endif } /* --- 738,749 ---- cirrusBusType = CIRRUS_FASTBUS; cirrusUseBLTEngine = FALSE; ! if ((cirrusChip == CLGD5426 || cirrusChip == CLGD5428 || ! cirrusChip == CLGD5429 || cirrusChip == CLGD543x)) { cirrusUseBLTEngine = TRUE; ! if (OFLG_ISSET(OPTION_NO_BITBLT, &vga256InfoRec.options)) cirrusUseBLTEngine = FALSE; } /* *************** *** 754,760 **** * "fast_dram" or "slow_dram" option is defined. */ if (cirrusChip == CLGD5424 || cirrusChip == CLGD5426 || ! cirrusChip == CLGD5428 || cirrusChip == CLGD543x) { outb(0x3c4, 0x1f); ErrorF("%s %s: Internal memory clock register value is 0x%02x\n", --- 751,758 ---- * "fast_dram" or "slow_dram" option is defined. */ if (cirrusChip == CLGD5424 || cirrusChip == CLGD5426 || ! cirrusChip == CLGD5428 || cirrusChip == CLGD5429 || ! cirrusChip == CLGD543x) { outb(0x3c4, 0x1f); ErrorF("%s %s: Internal memory clock register value is 0x%02x\n", *************** *** 795,804 **** cfbLowlevFuncs.doBitbltCopy = CirrusDoBitbltCopy; cfbLowlevFuncs.fillRectSolidCopy = CirrusFillRectSolidCopy; cfbLowlevFuncs.fillBoxSolid = CirrusFillBoxSolid; - cfbLowlevFuncs.fillRectTransparentStippled32 = - CirrusFillRectTransparentStippled32; - cfbLowlevFuncs.fillRectOpaqueStippled32 = - CirrusFillRectOpaqueStippled32; /* Hook special op. fills (and tiles): */ cfbTEOps1Rect.PolyFillRect = CirrusPolyFillRect; --- 793,798 ---- *************** *** 837,845 **** cfbNonTEOps.CopyPlane = CirrusCopyPlane; #endif ! cfbLowlevFuncs.teGlyphBlt8 = CirrusImageGlyphBlt; ! cfbTEOps1Rect.ImageGlyphBlt = CirrusImageGlyphBlt; ! cfbTEOps.ImageGlyphBlt = CirrusImageGlyphBlt; #if 0 cfbTEOps1Rect.PolyGlyphBlt = CirrusPolyGlyphBlt; cfbTEOps.PolyGlyphBlt = CirrusPolyGlyphBlt; --- 831,843 ---- cfbNonTEOps.CopyPlane = CirrusCopyPlane; #endif ! /* Disable accelerated text blit functions for the 543x chips, */ ! /* which require exclusively 32-bit transfers. */ ! if (cirrusChip != CLGD543x) { ! cfbLowlevFuncs.teGlyphBlt8 = CirrusImageGlyphBlt; ! cfbTEOps1Rect.ImageGlyphBlt = CirrusImageGlyphBlt; ! cfbTEOps.ImageGlyphBlt = CirrusImageGlyphBlt; ! } #if 0 cfbTEOps1Rect.PolyGlyphBlt = CirrusPolyGlyphBlt; cfbTEOps.PolyGlyphBlt = CirrusPolyGlyphBlt; *************** *** 959,966 **** outb(0x3C5,restore->SRE); } ! if (cirrusChip == CLGD5424 || cirrusChip == CLGD5426 || cirrusChip == CLGD5428 ! || cirrusChip == CLGD543x) { /* Restore the Performance Tuning Register on these 4 chips only. */ outb(0x3C4,0x16); --- 957,965 ---- outb(0x3C5,restore->SRE); } ! if (cirrusChip == CLGD5424 || cirrusChip == CLGD5426 || ! cirrusChip == CLGD5428 || cirrusChip == CLGD5429 || ! cirrusChip == CLGD543x) { /* Restore the Performance Tuning Register on these 4 chips only. */ outb(0x3C4,0x16); *************** *** 1053,1060 **** outb(0x3C4,0x0F); save->SRF = inb(0x3C5); ! if (cirrusChip == CLGD5424 || cirrusChip == CLGD5426 ! || cirrusChip == CLGD5428 || cirrusChip == CLGD543x) { /* Save the Performance Tuning Register on these 4 chips only. */ outb(0x3C4,0x16); --- 1052,1060 ---- outb(0x3C4,0x0F); save->SRF = inb(0x3C5); ! if (cirrusChip == CLGD5424 || cirrusChip == CLGD5426 || ! cirrusChip == CLGD5428 || cirrusChip == CLGD5429 || ! cirrusChip == CLGD543x) { /* Save the Performance Tuning Register on these 4 chips only. */ outb(0x3C4,0x16); *************** *** 1171,1183 **** if (cirrusChip == CLGD5422 || cirrusChip == CLGD5424 || cirrusChip == CLGD5426 || cirrusChip == CLGD5428 || ! cirrusChip == CLGD543x) { new->SRF |= 0x20; /* Enable 64 byte FIFO. */ } if (cirrusChip == CLGD5424 || cirrusChip == CLGD5426 || ! cirrusChip == CLGD5428 || cirrusChip == CLGD543x) { /* Now set the CRT FIFO threshold (in 4 byte words). */ --- 1171,1184 ---- if (cirrusChip == CLGD5422 || cirrusChip == CLGD5424 || cirrusChip == CLGD5426 || cirrusChip == CLGD5428 || ! cirrusChip == CLGD5429 || cirrusChip == CLGD543x) { new->SRF |= 0x20; /* Enable 64 byte FIFO. */ } if (cirrusChip == CLGD5424 || cirrusChip == CLGD5426 || ! cirrusChip == CLGD5428 || cirrusChip == CLGD5429 || ! cirrusChip == CLGD543x) { /* Now set the CRT FIFO threshold (in 4 byte words). */ *************** *** 1187,1192 **** --- 1188,1200 ---- /* We have an option for conservative, or aggressive setting. */ /* The default is something in between. */ + if (cirrusChip == CLGD543x) + { + /* Use 0 (effectively 16). */ + if (OFLG_ISSET(OPTION_FIFO_CONSERV, &vga256InfoRec.options)) + new->SR16 |= 8; /* Use 24. */ + } + else if (OFLG_ISSET(OPTION_FIFO_CONSERV, &vga256InfoRec.options)) { if (!(mode->Flags & V_INTERLACE)) /* For interlaced, use 0. */ diff -c mit/server/ddx/x386/vga256/drivers/cirrus/cir_driver.h:2.6 mit/server/ddx/x386/vga256/drivers/cirrus/cir_driver.h:2.7 *** mit/server/ddx/x386/vga256/drivers/cirrus/cir_driver.h:2.6 Wed May 4 22:55:11 1994 --- mit/server/ddx/x386/vga256/drivers/cirrus/cir_driver.h Wed May 4 22:55:11 1994 *************** *** 1,5 **** /* ! * $XFree86: mit/server/ddx/x386/vga256/drivers/cirrus/cir_driver.h,v 2.6 1994/03/07 14:02:22 dawes Exp $ * * Copyright 1993 by Simon P. Cooper, New Brunswick, New Jersey, USA. * --- 1,5 ---- /* ! * $XFree86: mit/server/ddx/x386/vga256/drivers/cirrus/cir_driver.h,v 2.7 1994/04/15 05:11:41 dawes Exp $ * * Copyright 1993 by Simon P. Cooper, New Brunswick, New Jersey, USA. * *************** *** 143,153 **** #define CLGD5424 2 #define CLGD5426 3 #define CLGD5428 4 ! #define CLGD6205 5 ! #define CLGD6215 6 ! #define CLGD6225 7 ! #define CLGD6235 8 ! #define CLGD543x 9 #define LASTCLGD CLGD543x #define CIRRUS_SLOWBUS 0 --- 143,154 ---- #define CLGD5424 2 #define CLGD5426 3 #define CLGD5428 4 ! #define CLGD5429 5 ! #define CLGD6205 6 ! #define CLGD6215 7 ! #define CLGD6225 8 ! #define CLGD6235 9 ! #define CLGD543x 10 #define LASTCLGD CLGD543x #define CIRRUS_SLOWBUS 0 diff -c mit/server/ddx/x386/vga256/drivers/cirrus/cir_fill.c:2.3 mit/server/ddx/x386/vga256/drivers/cirrus/cir_fill.c:2.4 *** mit/server/ddx/x386/vga256/drivers/cirrus/cir_fill.c:2.3 Wed May 4 22:55:12 1994 --- mit/server/ddx/x386/vga256/drivers/cirrus/cir_fill.c Wed May 4 22:55:12 1994 *************** *** 1,5 **** /* ! * $XFree86: mit/server/ddx/x386/vga256/drivers/cirrus/cir_fill.c,v 2.3 1994/02/24 12:43:35 dawes Exp $ * * Copyright 1993 by Bill Reynolds, Santa Fe, New Mexico * --- 1,5 ---- /* ! * $XFree86: mit/server/ddx/x386/vga256/drivers/cirrus/cir_fill.c,v 2.4 1994/04/15 05:11:43 dawes Exp $ * * Copyright 1993 by Bill Reynolds, Santa Fe, New Mexico * *************** *** 203,215 **** * - If the chip has no bitblt engine (i.e. 5420/2/4). * - If we have a bitblt engine, but the card is local bus * and the width is big enough, with different cut-off ! * points for the 5426 and 5428. * For 5434 (speculative), the bitblt engine is used. */ if (!HAVEBITBLTENGINE() || (cirrusBusType == CIRRUS_FASTBUS && ((cirrusChip == CLGD5426 && w >= 200) || ! (cirrusChip == CLGD5428 && w >= 250)))) { bits = 0xffffffff; CirrusColorExpand32bitFill(pBox->x1, pBox->y1, w, h, &bits, 1, 0, 0, pixel1, pixel1, widthDst); --- 203,216 ---- * - If the chip has no bitblt engine (i.e. 5420/2/4). * - If we have a bitblt engine, but the card is local bus * and the width is big enough, with different cut-off ! * points for the 5426, 5428, and 5429. * For 5434 (speculative), the bitblt engine is used. */ if (!HAVEBITBLTENGINE() || (cirrusBusType == CIRRUS_FASTBUS && ((cirrusChip == CLGD5426 && w >= 200) || ! (cirrusChip == CLGD5428 && w >= 250) || ! (cirrusChip == CLGD5429 && w >= 250)))) { bits = 0xffffffff; CirrusColorExpand32bitFill(pBox->x1, pBox->y1, w, h, &bits, 1, 0, 0, pixel1, pixel1, widthDst); diff -c mit/server/ddx/x386/vga256/drivers/cirrus/cir_fillrct.c:2.0 mit/server/ddx/x386/vga256/drivers/cirrus/cir_fillrct.c:2.1 *** mit/server/ddx/x386/vga256/drivers/cirrus/cir_fillrct.c:2.0 Wed May 4 22:55:12 1994 --- mit/server/ddx/x386/vga256/drivers/cirrus/cir_fillrct.c Wed May 4 22:55:12 1994 *************** *** 1,4 **** ! /* $XFree86: mit/server/ddx/x386/vga256/drivers/cirrus/cir_fillrct.c,v 2.0 1994/02/24 12:43:37 dawes Exp $ */ /* * Fill rectangles. */ --- 1,4 ---- ! /* $XFree86: mit/server/ddx/x386/vga256/drivers/cirrus/cir_fillrct.c,v 2.1 1994/04/06 04:35:25 dawes Exp $ */ /* * Fill rectangles. */ *************** *** 44,49 **** --- 44,52 ---- #include "cfbrrop.h" #include "mergerop.h" #include "cfbfuncs.h" + #include "x386.h" + #include "vga.h" + #include "vgaBank.h" /* For CHECKSCREEN. */ #include "cir_driver.h" *************** *** 79,86 **** --- 82,99 ---- void (*BoxFill)(); int n; int xorg, yorg; + unsigned long *pdstBase; + int widthDst; RROP_DECLARE + cfbGetLongWidthAndPointer(pDrawable, widthDst, pdstBase) + + if (!x386VTSema || !CHECKSCREEN(pdstBase)) + { + cfbPolyFillRect(pDrawable, pGC, nrectFill, prectInit); + return; + } + priv = (cfbPrivGC *) pGC->devPrivates[cfbGCPrivateIndex].ptr; prgnClip = priv->pCompositeClip; *************** *** 122,128 **** pRotatedPixmap) BoxFill = cfb8FillRectStippledUnnatural; else ! BoxFill = cfbLowlevFuncs.fillRectTransparentStippled32; break; case FillOpaqueStippled: if (!((cfbPrivGCPtr) pGC->devPrivates[cfbGCPrivateIndex].ptr)-> --- 135,141 ---- pRotatedPixmap) BoxFill = cfb8FillRectStippledUnnatural; else ! BoxFill = CirrusFillRectTransparentStippled32; break; case FillOpaqueStippled: if (!((cfbPrivGCPtr) pGC->devPrivates[cfbGCPrivateIndex].ptr)-> *************** *** 129,135 **** pRotatedPixmap) BoxFill = cfb8FillRectStippledUnnatural; else ! BoxFill = cfbLowlevFuncs.fillRectOpaqueStippled32; break; #endif } --- 142,148 ---- pRotatedPixmap) BoxFill = cfb8FillRectStippledUnnatural; else ! BoxFill = CirrusFillRectOpaqueStippled32; break; #endif } diff -c mit/server/ddx/x386/vga256/drivers/cirrus/cir_teblt8.c:2.3 mit/server/ddx/x386/vga256/drivers/cirrus/cir_teblt8.c:2.4 *** mit/server/ddx/x386/vga256/drivers/cirrus/cir_teblt8.c:2.3 Wed May 4 22:55:13 1994 --- mit/server/ddx/x386/vga256/drivers/cirrus/cir_teblt8.c Wed May 4 22:55:13 1994 *************** *** 19,31 **** */ /* $XConsortium: cfbteblt8.c,v 5.14 91/04/10 11:41:38 keith Exp $ */ ! /* $XFree86: mit/server/ddx/x386/vga256/drivers/cirrus/cir_teblt8.c,v 2.3 1994/03/06 06:46:26 dawes Exp $ */ /* * Modified for Cirrus by Harm Hanemaayer (hhanemaa@cs.ruu.nl). * * We accelerate straightforward text writing for fonts with widths up to 16 ! * pixels. Added CirrusPolyGlyphBlt for transparent text. */ --- 19,31 ---- */ /* $XConsortium: cfbteblt8.c,v 5.14 91/04/10 11:41:38 keith Exp $ */ ! /* $XFree86: mit/server/ddx/x386/vga256/drivers/cirrus/cir_teblt8.c,v 2.4 1994/04/06 04:35:27 dawes Exp $ */ /* * Modified for Cirrus by Harm Hanemaayer (hhanemaa@cs.ruu.nl). * * We accelerate straightforward text writing for fonts with widths up to 16 ! * pixels. */ *************** *** 92,102 **** glyphWidth = FONTMAXBOUNDS(pfont,characterWidth); glyphWidthBytes = GLYPHWIDTHBYTESPADDED(*ppci); ! #if 0 ! ErrorF("CirrusImageGlyphBlt: glyphWidthBytes = %d, glyphWidth = %d\n", ! glyphWidthBytes, glyphWidth); ! #endif h = FONTASCENT(pfont) + FONTDESCENT(pfont); if ((h | glyphWidth) == 0) return; --- 92,112 ---- glyphWidth = FONTMAXBOUNDS(pfont,characterWidth); glyphWidthBytes = GLYPHWIDTHBYTESPADDED(*ppci); ! cfbGetLongWidthAndPointer(pDrawable, widthDst, pdstBase) ! widthDst *= 4; /* Convert to bytes. */ + glyphWidth = FONTMAXBOUNDS(pfont,characterWidth); + glyphWidthBytes = GLYPHWIDTHBYTESPADDED(*ppci); + + /* We only accelerate fonts 16 or less pixels wide. */ + /* Let cfb handle writing into offscreen pixmap. */ + if (glyphWidthBytes != 4 || glyphWidth > 16 || !CHECKSCREEN(pdstBase) + || !x386VTSema) { + cfbImageGlyphBlt8(pDrawable, pGC, xInit, yInit, nglyph, ppci, + pglyphBase); + return; + } + h = FONTASCENT(pfont) + FONTDESCENT(pfont); if ((h | glyphWidth) == 0) return; *************** *** 117,166 **** return; } - /* We only accelerate fonts 16 or less pixels wide. */ - if (glyphWidthBytes != 4 || glyphWidth > 16) { - #if 0 /* There seems to be a problem using speedup. */ - /* Use speedup. */ - speedupcfbTEGlyphBlt8(pDrawable, pGC, xInit, yInit, nglyph, ppci, pglyphBase); - #else - cfbImageGlyphBlt8(pDrawable, pGC, xInit, yInit, nglyph, ppci, pglyphBase); - #endif - return; - } - - if (!cfb8CheckPixels (pGC->fgPixel, pGC->bgPixel)) cfb8SetPixels (pGC->fgPixel, pGC->bgPixel); - cfbGetLongWidthAndPointer(pDrawable, widthDst, pdstBase) - widthDst *= 4; /* Convert to bytes. */ - - #if 0 - ErrorF("CirrusImageGlyphBlt: widthDst = %d, size = (%d, %d), bg = %d, fg = %d\n", - widthDst, glyphWidth * nglyph, h, pGC->bgPixel, pGC->fgPixel); - #endif - - destaddr = y * widthDst + x; - SETDESTADDR(destaddr); - SETDESTPITCH(widthDst); - SETSRCADDR(0); - SETSRCPITCH(0); - blitwidth = glyphWidth * nglyph; - SETWIDTH(blitwidth); - SETHEIGHT(h); - - SETBACKGROUNDCOLOR(pGC->bgPixel); - SETFOREGROUNDCOLOR(pGC->fgPixel); - - SETBLTMODE(SYSTEMSRC | COLOREXPAND); - SETROP(CROP_SRC); - STARTBLT(); - - /* Problem: must synthesize bitmap. The current code works reasonably - * efficiently for 6 and 8 pixel wide fonts, other widths (up to 16) - * are less efficiently handled. - */ - /* Collect list of pointers to glyph bitmaps. */ glyphp = ALLOCATE_LOCAL(nglyph * sizeof(unsigned long *)); for (i = 0; i < nglyph; i++ ) { --- 127,135 ---- *************** *** 167,291 **** glyphp[i] = (unsigned long *)FONTGLYPHBITS(pglyphBase, *ppci++); } - /* Write bitmap to video memory (for BitBlt engine to process). */ - /* Gather bytes until we have a dword to write. Doubleword is */ - /* LSByte first, and MSBit first in each byte, as required for */ - /* the blit data. */ - - switch (glyphWidth) { - case 8 : - /* 8 pixel wide font, easier and faster. */ - CirrusTransferTextWidth8(nglyph, h, glyphp); - break; - case 6 : - CirrusTransferTextWidth6(nglyph, h, glyphp); - break; - default : - CirrusTransferText(nglyph, h, glyphp, glyphWidth, vgaBase); - break; - } - - WAITUNTILFINISHED(); - - SETBACKGROUNDCOLOR(0x0f); - SETFOREGROUNDCOLOR(0); - - DEALLOCATE_LOCAL(glyphp); - } - - - #if 0 - - void CirrusPolyGlyphBlt(pDrawable, pGC, xInit, yInit, nglyph, ppci, pglyphBase) - DrawablePtr pDrawable; - GC *pGC; - int xInit, yInit; - unsigned int nglyph; - CharInfoPtr *ppci; /* array of character info */ - unsigned char *pglyphBase; /* start of array of glyphs */ - { - FontPtr pfont = pGC->font; - unsigned long *pdstBase; - int widthDst; - int widthGlyph; - int h; - int x, y; - BoxRec bbox; /* for clipping */ - - int glyphWidth; /* Character width in pixels. */ - int glyphWidthBytes; /* Character width in bytes (padded). */ - int i; - /* Characters are padded to 4 bytes. */ - unsigned long **glyphp; - int shift, line; - unsigned dworddata; - int destaddr, blitwidth; - void (*PolyGlyph)(); - - PolyGlyph = NULL; - if (pGC->fillStyle != FillSolid) - PolyGlyph = miPolyGlyphBlt; - - if (FONTMAXBOUNDS(pGC->font,rightSideBearing) - - FONTMINBOUNDS(pGC->font,leftSideBearing) > 32 || - FONTMINBOUNDS(pGC->font,characterWidth) < 0) - PolyGlyph = miPolyGlyphBlt; - - /* Special raster ops that don't seem to work. */ - if (pGC->alu == GXset || pGC->alu == GXcopyInverted) - PolyGlyph = cfbPolyGlyphRop8; - - if (PolyGlyph != NULL) { - (*PolyGlyph)(pDrawable, pGC, xInit, yInit, nglyph, ppci, - pglyphBase); - return; - } - - glyphWidth = FONTMAXBOUNDS(pfont,characterWidth); - glyphWidthBytes = GLYPHWIDTHBYTESPADDED(*ppci); - - h = FONTASCENT(pfont) + FONTDESCENT(pfont); - - if ((h | glyphWidth) == 0) return; - - x = xInit + FONTMAXBOUNDS(pfont,leftSideBearing) + pDrawable->x; - y = yInit - FONTASCENT(pfont) + pDrawable->y; - bbox.x1 = x; - bbox.x2 = x + (glyphWidth * nglyph); - bbox.y1 = y; - bbox.y2 = y + h; - - switch ((*pGC->pScreen->RectIn)( - ((cfbPrivGC *)(pGC->devPrivates[cfbGCPrivateIndex].ptr))->pCompositeClip, &bbox)) - { - case rgnPART: - if (pGC->alu == GXcopy) - PolyGlyph = cfbPolyGlyphBlt8; - else - PolyGlyph = cfbPolyGlyphRop8; - (*PolyGlyph)(pDrawable, pGC, xInit, yInit, nglyph, ppci, pglyphBase); - case rgnOUT: - return; - } - - /* We only accelerate fonts 16 or less pixels wide. */ - if (glyphWidthBytes != 4 || glyphWidth > 16) { - if (pGC->alu == GXcopy) - PolyGlyph = cfbPolyGlyphBlt8; - else - PolyGlyph = cfbPolyGlyphRop8; - (*PolyGlyph)(pDrawable, pGC, xInit, yInit, nglyph, ppci, - pglyphBase); - return; - } - - - if (!cfb8CheckPixels (pGC->fgPixel, pGC->bgPixel)) - cfb8SetPixels (pGC->fgPixel, pGC->bgPixel); - - cfbGetLongWidthAndPointer(pDrawable, widthDst, pdstBase) - widthDst *= 4; /* Convert to bytes. */ - destaddr = y * widthDst + x; SETDESTADDR(destaddr); SETDESTPITCH(widthDst); --- 136,141 ---- *************** *** 297,306 **** SETBACKGROUNDCOLOR(pGC->bgPixel); SETFOREGROUNDCOLOR(pGC->fgPixel); - SETTRANSPARENCYCOLOR(pGC->bgPixel); ! SETBLTMODE(SYSTEMSRC | COLOREXPAND | TRANSPARENCYCOMPARE); ! SETROP(cirrus_rop[pGC->alu]); STARTBLT(); /* Problem: must synthesize bitmap. The current code works reasonably --- 147,155 ---- SETBACKGROUNDCOLOR(pGC->bgPixel); SETFOREGROUNDCOLOR(pGC->fgPixel); ! SETBLTMODE(SYSTEMSRC | COLOREXPAND); ! SETROP(CROP_SRC); STARTBLT(); /* Problem: must synthesize bitmap. The current code works reasonably *************** *** 308,319 **** * are less efficiently handled. */ - /* Collect list of pointers to glyph bitmaps. */ - glyphp = ALLOCATE_LOCAL(nglyph * sizeof(unsigned long *)); - for (i = 0; i < nglyph; i++ ) { - glyphp[i] = (unsigned long *)FONTGLYPHBITS(pglyphBase, *ppci++); - } - /* Write bitmap to video memory (for BitBlt engine to process). */ /* Gather bytes until we have a dword to write. Doubleword is */ /* LSByte first, and MSBit first in each byte, as required for */ --- 157,162 ---- *************** *** 340,348 **** DEALLOCATE_LOCAL(glyphp); } - #endif - - /* * Low-level text transfer routines. --- 183,188 ---- *************** *** 362,389 **** line = 0; while (line < h) { i = 0; - /* Unroll loop. */ - while (shift == 0 && nglyph - i >= 8) { - /* This only gets used if the text width is a */ - /* multiple of 4 characters. Should do 'alignment' */ - /* for shift values 8, 16 and 24, and then this. */ - dworddata = byte_reversed[glyphp[i][line]]; - dworddata += byte_reversed[glyphp[i + 1][line]] << 8; - dworddata += byte_reversed[glyphp[i + 2][line]] << 16; - dworddata += byte_reversed[glyphp[i + 3][line]] << 24; - *(unsigned long *)vgaBase = dworddata; - dworddata = byte_reversed[glyphp[i + 4][line]]; - dworddata += byte_reversed[glyphp[i + 5][line]] << 8; - dworddata += byte_reversed[glyphp[i + 6][line]] << 16; - dworddata += byte_reversed[glyphp[i + 7][line]] << 24; - *(unsigned long *)vgaBase = dworddata; - i += 8; - dworddata = 0; - } - while (i < nglyph) { ! dworddata += byte_reversed[glyphp[i][line]] << shift; ! shift += 8; if (shift == 32) { /* Write the dword. */ *(unsigned long *)vgaBase = dworddata; --- 202,228 ---- line = 0; while (line < h) { i = 0; while (i < nglyph) { ! if (shift == 0 && nglyph - i >= 8) { ! /* Unroll loop. */ ! dworddata = byte_reversed[glyphp[i][line]]; ! dworddata += byte_reversed[glyphp[i + 1][line]] << 8; ! dworddata += byte_reversed[glyphp[i + 2][line]] << 16; ! dworddata += byte_reversed[glyphp[i + 3][line]] << 24; ! *(unsigned long *)vgaBase = dworddata; ! dworddata = byte_reversed[glyphp[i + 4][line]]; ! dworddata += byte_reversed[glyphp[i + 5][line]] << 8; ! dworddata += byte_reversed[glyphp[i + 6][line]] << 16; ! dworddata += byte_reversed[glyphp[i + 7][line]] << 24; ! *(unsigned long *)vgaBase = dworddata; ! i += 8; ! dworddata = 0; ! } ! else { ! dworddata += byte_reversed[glyphp[i][line]] << shift; ! shift += 8; ! i++; ! } if (shift == 32) { /* Write the dword. */ *(unsigned long *)vgaBase = dworddata; *************** *** 390,396 **** shift = 0; dworddata = 0; } - i++; } line++; } --- 229,234 ---- *************** *** 492,498 **** } ! #if 0 void CirrusTransferText(nglyph, h, glyphp, glyphwidth, base) int nglyph; --- 330,336 ---- } ! #if 0 /* Replaced by assembler routine in cir_textblt.s. */ void CirrusTransferText(nglyph, h, glyphp, glyphwidth, base) int nglyph; diff -c mit/server/ddx/x386/vga256/drivers/pvga1/driver.c:2.23 mit/server/ddx/x386/vga256/drivers/pvga1/driver.c:2.25 *** mit/server/ddx/x386/vga256/drivers/pvga1/driver.c:2.23 Wed May 4 22:55:18 1994 --- mit/server/ddx/x386/vga256/drivers/pvga1/driver.c Wed May 4 22:55:19 1994 *************** *** 1,5 **** /* ! * $XFree86: mit/server/ddx/x386/vga256/drivers/pvga1/driver.c,v 2.23 1994/03/05 02:01:01 dawes Exp $ * $XConsortium: driver.c,v 1.2 91/08/20 15:13:33 gildea Exp $ * * Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany. --- 1,5 ---- /* ! * $XFree86: mit/server/ddx/x386/vga256/drivers/pvga1/driver.c,v 2.25 1994/04/15 05:12:27 dawes Exp $ * $XConsortium: driver.c,v 1.2 91/08/20 15:13:33 gildea Exp $ * * Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany. *************** *** 189,195 **** { outb(vgaIOBase + 4, 0x2E); save3 = inb(vgaIOBase + 5); } ! if (IS_WD90C3X(WDchipset)) { outb(0x3C4, 0x12); save4 = inb(0x3C5); } --- 189,196 ---- { outb(vgaIOBase + 4, 0x2E); save3 = inb(vgaIOBase + 5); } ! if (IS_WD90C3X(WDchipset) && ! !OFLG_ISSET(OPTION_8CLKS, &vga256InfoRec.options)) { outb(0x3C4, 0x12); save4 = inb(0x3C5); } *************** *** 204,210 **** { outw(vgaIOBase + 4, 0x2E | (save3 << 8)); } ! if (IS_WD90C3X(WDchipset)) { outw(0x3C4, 0x12 | (save4 << 8)); } --- 205,212 ---- { outw(vgaIOBase + 4, 0x2E | (save3 << 8)); } ! if (IS_WD90C3X(WDchipset) && ! !OFLG_ISSET(OPTION_8CLKS, &vga256InfoRec.options)) { outw(0x3C4, 0x12 | (save4 << 8)); } *************** *** 236,242 **** { outw(0x3CE, 0x0C | ((((no & 0x04) >> 1) ^ save_cs2) << 8)); } ! if (IS_WD90C3X(WDchipset)) { outb(0x3C4, 0x12); temp = inb(0x3C5); outb(0x3C5, temp & 0xfb | ((no & 0x8) >> 1) ^ 0x4); --- 238,245 ---- { outw(0x3CE, 0x0C | ((((no & 0x04) >> 1) ^ save_cs2) << 8)); } ! if (IS_WD90C3X(WDchipset) && ! !OFLG_ISSET(OPTION_8CLKS, &vga256InfoRec.options)) { outb(0x3C4, 0x12); temp = inb(0x3C5); outb(0x3C5, temp & 0xfb | ((no & 0x8) >> 1) ^ 0x4); *************** *** 286,292 **** } else { char ident[4]; ! unsigned char tmp; unsigned char sig[2]; if (xf86ReadBIOS(vga256InfoRec.BIOSbase, 0x7D, (unsigned char *)ident, --- 289,295 ---- } else { char ident[4]; ! unsigned char tmp, tmp1; unsigned char sig[2]; if (xf86ReadBIOS(vga256InfoRec.BIOSbase, 0x7D, (unsigned char *)ident, *************** *** 321,326 **** --- 324,331 ---- /* * WD90C24, 26, 30, 31. */ + tmp1 = rdinx(vgaIOBase+0x04, 0x34); + wrinx(vgaIOBase+0x04, 0x34, 0x00); sig[0] = rdinx(vgaIOBase+0x04, 0x36); sig[1] = rdinx(vgaIOBase+0x04, 0x37); ErrorF("%s %s: WD: Signature for WD90C[23]X=[0x%02x 0x%02x]\n", *************** *** 339,344 **** --- 344,350 ---- XCONFIG_PROBED, vga256InfoRec.name); ErrorF("%s %s: 90C30, but we don't know for sure.\n", XCONFIG_PROBED, vga256InfoRec.name); + wrinx(vgaIOBase+0x04, 0x34, tmp1); PVGA1EnterLeave(LEAVE); return(FALSE); } *************** *** 345,353 **** --- 351,361 ---- else { ErrorF("%s %s: WD: Unsupported chipset detected.\n" XCONFIG_PROBED, vga256InfoRec.name); + wrinx(vgaIOBase+0x04, 0x34, tmp1); PVGA1EnterLeave(LEAVE); return(FALSE); } + wrinx(vgaIOBase+0x04, 0x34, tmp1); } else { /* WD90C1x */ *************** *** 418,424 **** numclocks = 8; else numclocks = 4; ! else if (IS_WD90C3X(WDchipset)) numclocks = 17; else numclocks = 9; --- 426,433 ---- numclocks = 8; else numclocks = 4; ! else if (IS_WD90C3X(WDchipset) && ! !OFLG_ISSET(OPTION_8CLKS, &vga256InfoRec.options)) numclocks = 17; else numclocks = 9; *************** *** 601,607 **** if (new->std.NoClock >= 0) { outw(0x3CE, (restore->VideoSelect << 8) | 0x0C); ! if (IS_WD90C3X(WDchipset)) outw(0x3C4, (restore->MiscCtrl4 << 8) | 0x12); } #ifndef MONOVGA --- 610,617 ---- if (new->std.NoClock >= 0) { outw(0x3CE, (restore->VideoSelect << 8) | 0x0C); ! if (IS_WD90C3X(WDchipset) && ! !OFLG_ISSET(OPTION_8CLKS, &vga256InfoRec.options)) outw(0x3C4, (restore->MiscCtrl4 << 8) | 0x12); } #ifndef MONOVGA *************** *** 693,699 **** save->PR0B = PR0B; outb(0x3CE, 0x0B); save->MemorySize = inb(0x3CF); outb(0x3CE, 0x0C); save->VideoSelect = inb(0x3CF); ! if (IS_WD90C3X(WDchipset)) { outb(0x3C4, 0x12); save->MiscCtrl4 = inb(0x3C5); } --- 703,710 ---- save->PR0B = PR0B; outb(0x3CE, 0x0B); save->MemorySize = inb(0x3CF); outb(0x3CE, 0x0C); save->VideoSelect = inb(0x3CF); ! if (IS_WD90C3X(WDchipset) && ! !OFLG_ISSET(OPTION_8CLKS, &vga256InfoRec.options)) { outb(0x3C4, 0x12); save->MiscCtrl4 = inb(0x3C5); } diff -c mit/server/ddx/x386/vga256/vga/vgaHW.c:2.17 mit/server/ddx/x386/vga256/vga/vgaHW.c:2.19 *** mit/server/ddx/x386/vga256/vga/vgaHW.c:2.17 Wed May 4 22:55:23 1994 --- mit/server/ddx/x386/vga256/vga/vgaHW.c Wed May 4 22:55:23 1994 *************** *** 1,5 **** /* ! * $XFree86: mit/server/ddx/x386/vga256/vga/vgaHW.c,v 2.17 1994/03/03 12:50:39 dawes Exp $ * $XConsortium: vgaHW.c,v 1.3 91/08/26 15:40:56 gildea Exp $ * * Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany. --- 1,5 ---- /* ! * $XFree86: mit/server/ddx/x386/vga256/vga/vgaHW.c,v 2.19 1994/04/26 08:42:55 dawes Exp $ * $XConsortium: vgaHW.c,v 1.3 91/08/26 15:40:56 gildea Exp $ * * Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany. *************** *** 232,238 **** outb(0x3C4, 0x01); tmp = inb(0x3C5); - (*vgaSaveScreenFunc)(SS_START); outw(0x3C4, 0x0100); /* start synchronous reset */ outw(0x3C4, ((tmp | 0x20) << 8) | 0x01); /* disable the display */ --- 232,237 ---- *************** *** 248,254 **** outw(0x3C4, ((tmp & 0xDF) << 8) | 0x01); /* reenable display */ outw(0x3C4, 0x0300); /* clear synchronousreset */ - (*vgaSaveScreenFunc)(SS_FINISH); tmp = inb(vgaIOBase + 0x0A); outb(0x3C0, 0x20); /* disable pallete access */ --- 247,252 ---- diff -c mit/config/Imake.tmpl:2.10 mit/config/Imake.tmpl:2.11 *** mit/config/Imake.tmpl:2.10 Wed May 4 22:55:38 1994 --- mit/config/Imake.tmpl Wed May 4 22:55:38 1994 *************** *** 7,13 **** #endif XCOMM ------------------------------------------------------------------------- XCOMM Makefile generated from IMAKE_TEMPLATE and INCLUDE_IMAKEFILE ! XCOMM $XFree86: mit/config/Imake.tmpl,v 2.10 1994/02/28 13:54:37 dawes Exp $ XCOMM $XConsortium: Imake.tmpl,v 1.139 91/09/16 08:52:48 rws Exp $ XCOMM XCOMM Platform-specific parameters may be set in the appropriate .cf --- 7,13 ---- #endif XCOMM ------------------------------------------------------------------------- XCOMM Makefile generated from IMAKE_TEMPLATE and INCLUDE_IMAKEFILE ! XCOMM $XFree86: mit/config/Imake.tmpl,v 2.11 1994/05/02 11:40:57 dawes Exp $ XCOMM $XConsortium: Imake.tmpl,v 1.139 91/09/16 08:52:48 rws Exp $ XCOMM XCOMM Platform-specific parameters may be set in the appropriate .cf *************** *** 300,305 **** --- 300,306 ---- # endif /* __386BSD__ */ # ifdef __NetBSD__ # define i386NetBsd + # define NetBSDArchitecture # undef __NetBSD__ # endif /* __NetBSD */ # ifdef NetBSD *************** *** 307,312 **** --- 308,314 ---- # endif /* NetBSD */ # ifdef __FreeBSD__ # define i386FreeBsd + # define FreeBSDArchitecture # undef __FreeBSD__ # endif /* __FreeBSD__ */ # ifdef FreeBSD *************** *** 319,324 **** --- 321,327 ---- # define MacroFile x386.cf # define i386BsdArchitecture # define i386Bsdi + # define BSD386Architecture # undef __bsdi__ # ifdef bsdi # undef bsdi diff -c mit/config/bsdLib.tmpl:2.1 mit/config/bsdLib.tmpl:2.2 *** mit/config/bsdLib.tmpl:2.1 Wed May 4 22:55:39 1994 --- mit/config/bsdLib.tmpl Wed May 4 22:55:39 1994 *************** *** 1,10 **** ! XCOMM $XFree86: mit/config/bsdLib.tmpl,v 2.1 1993/12/17 10:57:09 dawes Exp $ XCOMM $XConsortium: sunLib.tmpl,v 1.14.1.2 92/11/11 09:52.02 rws Exp $ /* ! * SunOS shared library template */ #ifndef SharedXlibRev #define SharedXlibRev 2.0 #endif --- 1,11 ---- ! XCOMM $XFree86: mit/config/bsdLib.tmpl,v 2.2 1994/04/10 05:46:53 dawes Exp $ XCOMM $XConsortium: sunLib.tmpl,v 1.14.1.2 92/11/11 09:52.02 rws Exp $ /* ! * Free/NetBSD shared library template */ + #ifndef i386NetBsd #ifndef SharedXlibRev #define SharedXlibRev 2.0 #endif *************** *** 32,37 **** --- 33,67 ---- #ifndef SharedPexRev #define SharedPexRev 2.0 #endif + #else /* i386NetBsd */ + #ifndef SharedXlibRev + #define SharedXlibRev 3.0 + #endif + #ifndef SharedOldXRev + #define SharedOldXRev 3.0 + #endif + #ifndef SharedXtRev + #define SharedXtRev 3.0 + #endif + #ifndef SharedXawRev + #define SharedXawRev 3.0 + #endif + #ifndef SharedXmuRev + #define SharedXmuRev 3.0 + #endif + #ifndef SharedXextRev + #define SharedXextRev 3.0 + #endif + #ifndef SharedXinputRev + #define SharedXinputRev 3.0 + #endif + #ifndef SharedXTrapRev + #define SharedXTrapRev 3.0 + #endif + #ifndef SharedPexRev + #define SharedPexRev 3.0 + #endif + #endif /* i386NetBsd */ SHLIBLDFLAGS = SharedLibraryLoadFlags PICFLAGS = PositionIndependentCFlags diff -c mit/config/imake.c:2.1 mit/config/imake.c:2.3 *** mit/config/imake.c:2.1 Wed May 4 22:55:39 1994 --- mit/config/imake.c Wed May 4 22:55:40 1994 *************** *** 1,4 **** ! /* $XFree86: mit/config/imake.c,v 2.1 1993/12/18 11:42:21 dawes Exp $ */ /* $XConsortium: imake.c,v 1.65 91/07/25 17:50:17 rws Exp $ */ /*****************************************************************************\ --- 1,4 ---- ! /* $XFree86: mit/config/imake.c,v 2.3 1994/04/15 04:54:59 dawes Exp $ */ /* $XConsortium: imake.c,v 1.65 91/07/25 17:50:17 rws Exp $ */ /*****************************************************************************\ *************** *** 591,597 **** if ((infd = open(Imakefile, O_RDONLY)) < 0) LogFatal("Cannot open %s for input.", Imakefile); fstat(infd, &st); ! buf = Emalloc(st.st_size+1); if (read(infd, buf, st.st_size) != st.st_size) LogFatal("Cannot read all of %s:", Imakefile); close(infd); --- 591,597 ---- if ((infd = open(Imakefile, O_RDONLY)) < 0) LogFatal("Cannot open %s for input.", Imakefile); fstat(infd, &st); ! buf = Emalloc((int)(st.st_size+1)); if (read(infd, buf, st.st_size) != st.st_size) LogFatal("Cannot read all of %s:", Imakefile); close(infd); *************** *** 732,738 **** */ fseek(tmpfd, 0, 0); fstat(fileno(tmpfd), &st); ! pline = buf = Emalloc(st.st_size+1); total_red = fread(buf, 1, st.st_size, tmpfd); if (total_red != st.st_size) LogFatal("cannot read %s\n", tmpMakefile); --- 732,738 ---- */ fseek(tmpfd, 0, 0); fstat(fileno(tmpfd), &st); ! pline = buf = Emalloc((int)(st.st_size+1)); total_red = fread(buf, 1, st.st_size, tmpfd); if (total_red != st.st_size) LogFatal("cannot read %s\n", tmpMakefile); *************** *** 742,748 **** #if defined(SYSV) || defined(AMOEBA) || defined(_MINIX) freopen(tmpfname, "w+", tmpfd); #else /* !SYSV */ ! ftruncate(fileno(tmpfd), 0); #endif /* !SYSV */ initialized = TRUE; fprintf (tmpfd, "# Makefile generated by imake - do not edit!\n"); --- 742,748 ---- #if defined(SYSV) || defined(AMOEBA) || defined(_MINIX) freopen(tmpfname, "w+", tmpfd); #else /* !SYSV */ ! ftruncate(fileno(tmpfd), (off_t)0); #endif /* !SYSV */ initialized = TRUE; fprintf (tmpfd, "# Makefile generated by imake - do not edit!\n"); diff -c mit/config/imakemdep.h:2.7 mit/config/imakemdep.h:2.8 *** mit/config/imakemdep.h:2.7 Wed May 4 22:55:40 1994 --- mit/config/imakemdep.h Wed May 4 22:55:40 1994 *************** *** 1,5 **** /* ! * $XFree86: mit/config/imakemdep.h,v 2.7 1994/02/12 11:03:52 dawes Exp $ * $XConsortium: imakemdep.h,v 1.38 91/08/25 11:36:39 rws Exp $ * * This file contains machine-dependent constants for the imake utility. --- 1,5 ---- /* ! * $XFree86: mit/config/imakemdep.h,v 2.8 1994/05/04 10:27:02 dawes Exp $ * $XConsortium: imakemdep.h,v 1.38 91/08/25 11:36:39 rws Exp $ * * This file contains machine-dependent constants for the imake utility. *************** *** 260,273 **** # endif # ifdef ISC "-DISC", ! # ifdef ISC30 ! "-DISC30", /* ISC 3.0 */ # else # ifdef ISC202 "-DISC202", /* ISC 2.0.2 */ # else ! # ifdef ISC40 ! "-DISC40", /* ISC 4.0 */ # else "-DISC22", /* ISC 2.2.1 */ # endif --- 260,273 ---- # endif # ifdef ISC "-DISC", ! # ifdef ISC40 ! "-DISC40", /* ISC 4.0 */ # else # ifdef ISC202 "-DISC202", /* ISC 2.0.2 */ # else ! # ifdef ISC30 ! "-DISC30", /* ISC 3.0 */ # else "-DISC22", /* ISC 2.2.1 */ # endif diff -c mit/config/lnuxLib.rules:2.8 mit/config/lnuxLib.rules:2.9 *** mit/config/lnuxLib.rules:2.8 Wed May 4 22:55:40 1994 --- mit/config/lnuxLib.rules Wed May 4 22:55:41 1994 *************** *** 1,4 **** ! XCOMM $XFree86: mit/config/lnuxLib.rules,v 2.8 1994/03/08 06:10:55 dawes Exp $ /* * Linux shared library rules (DLL version) */ --- 1,4 ---- ! XCOMM $XFree86: mit/config/lnuxLib.rules,v 2.9 1994/03/17 12:48:22 dawes Exp $ /* * Linux shared library rules (DLL version) */ *************** *** 372,378 **** (T=$(DESTDIR)dest/`echo $(JUMP_SO)|sed 's/\.[^\.]*\.[^\.]*$$//'`;\ set -x; \ $(INSTALL) -s -c $(INSTSOLIBFLAGS) $(JUMP_SO) $(DESTDIR)dest; \ ! $(RM) $$T && $(LN) $(DESTDIR)dest/$(JUMP_SO) $$T); fi @@\ $(INSTALL) -c $(INSTLIBFLAGS) $(JUMP_SA) $(DESTDIR)dest #endif /* InstallSharedLibrary */ --- 372,378 ---- (T=$(DESTDIR)dest/`echo $(JUMP_SO)|sed 's/\.[^\.]*\.[^\.]*$$//'`;\ set -x; \ $(INSTALL) -s -c $(INSTSOLIBFLAGS) $(JUMP_SO) $(DESTDIR)dest; \ ! $(RM) $$T && $(LN) $(JUMP_SO) $$T); fi @@\ $(INSTALL) -c $(INSTLIBFLAGS) $(JUMP_SA) $(DESTDIR)dest #endif /* InstallSharedLibrary */ diff -c mit/config/site.def:2.41 mit/config/site.def:2.43 *** mit/config/site.def:2.41 Wed May 4 22:55:41 1994 --- mit/config/site.def Wed May 4 22:55:41 1994 *************** *** 1,4 **** ! XCOMM $XFree86: mit/config/site.def,v 2.41 1994/03/07 13:53:40 dawes Exp $ XCOMM site: $XConsortium: site.def,v 1.2 91/07/30 20:26:44 rws Exp $ /***************************************************************************** --- 1,4 ---- ! XCOMM $XFree86: mit/config/site.def,v 2.43 1994/04/16 04:20:51 dawes Exp $ XCOMM site: $XConsortium: site.def,v 1.2 91/07/30 20:26:44 rws Exp $ /***************************************************************************** *************** *** 306,321 **** /* * Select drivers in 16-colour server * ! * Default: et4000 tvga8900 generic */ ! /* #define X386Vga16Drivers et4000 tvga8900 generic */ /* * Select (S)VGA drivers in monochrome server * ! * Default: et4000 et3000 pvga1 gvga tvga8900 ncr compaq generic */ ! /* #define X386Vga2Drivers et4000 et3000 pvga1 gvga tvga8900 ncr \ compaq oak generic */ /* * To include the Hercules driver in the monochrome server, uncomment this: --- 306,321 ---- /* * Select drivers in 16-colour server * ! * Default: et4000 ati tvga8900 generic */ ! /* #define X386Vga16Drivers et4000 ati tvga8900 generic */ /* * Select (S)VGA drivers in monochrome server * ! * Default: et4000 et3000 pvga1 gvga ati tvga8900 ncr compaq generic */ ! /* #define X386Vga2Drivers et4000 et3000 pvga1 gvga ati tvga8900 ncr \ compaq oak generic */ /* * To include the Hercules driver in the monochrome server, uncomment this: *************** *** 328,337 **** * hgc1280 [Hyundai HGC-1280 1280x1024] * sigma [Sigma L-View] * visa [???] * ... * (list is subject to grow) */ ! /* #define X386Bdm2Drivers hgc1280 sigma visa */ /* * Select drivers in the accelerated S3 server --- 328,338 ---- * hgc1280 [Hyundai HGC-1280 1280x1024] * sigma [Sigma L-View] * visa [???] + * apollo [???] * ... * (list is subject to grow) */ ! /* #define X386Bdm2Drivers hgc1280 sigma visa apollo */ /* * Select drivers in the accelerated S3 server diff -c mit/config/x386.cf:2.41 mit/config/x386.cf:2.44 *** mit/config/x386.cf:2.41 Wed May 4 22:55:42 1994 --- mit/config/x386.cf Wed May 4 22:55:42 1994 *************** *** 1,4 **** ! XCOMM $XFree86: mit/config/x386.cf,v 2.41 1994/03/06 06:41:16 dawes Exp $ XCOMM platform: $XConsortium: x386.cf,v 1.7 91/08/16 19:30:10 gildea Exp $ /***************************************************************************** --- 1,4 ---- ! XCOMM $XFree86: mit/config/x386.cf,v 2.44 1994/04/16 04:20:56 dawes Exp $ XCOMM platform: $XConsortium: x386.cf,v 1.7 91/08/16 19:30:10 gildea Exp $ /***************************************************************************** *************** *** 129,134 **** --- 129,139 ---- # define FormattedManPages YES # endif # endif + # ifndef ExtraFilesToClean + # if defined(i386NetBsd) || defined(i386FreeBsd) + # define ExtraFilesToClean *.core + # endif + # endif #endif /* Defaults for Linux and OSF/1 */ *************** *** 342,352 **** #endif #ifndef X386Vga16Drivers ! # define X386Vga16Drivers et4000 tvga8900 generic #endif #ifndef X386Vga2Drivers ! # define X386Vga2Drivers et4000 et3000 pvga1 gvga tvga8900 ncr \ compaq oak generic #endif --- 347,357 ---- #endif #ifndef X386Vga16Drivers ! # define X386Vga16Drivers et4000 ati tvga8900 generic #endif #ifndef X386Vga2Drivers ! # define X386Vga2Drivers et4000 et3000 pvga1 gvga ati tvga8900 ncr \ compaq oak generic #endif *************** *** 802,809 **** @(SUFFIX=`echo $(DESTDIR)destdir/file.* | cut -f3,4 -d.`; \ @@\ for i in aliases; do (set -x; \ @@\ $(RM) $(DESTDIR)destdir/$$i.*; \ @@\ ! $(LN) $(DESTDIR)destdir/file.$${SUFFIX} \ @@\ ! $(DESTDIR)destdir/$$i.$${SUFFIX}); \ @@\ done) #else --- 807,813 ---- @(SUFFIX=`echo $(DESTDIR)destdir/file.* | cut -f3,4 -d.`; \ @@\ for i in aliases; do (set -x; \ @@\ $(RM) $(DESTDIR)destdir/$$i.*; \ @@\ ! (cd $(DESTDIR)destdir; $(LN) file.$${SUFFIX} $$i.$${SUFFIX})); \ @@\ done) #else *************** *** 813,820 **** @(SUFFIX=`echo $(DESTDIR)destdir/file.* | cut -f2,3 -d.`; \ @@\ for i in aliases; do (set -x; \ @@\ $(RM) $(DESTDIR)destdir/$$i.*; \ @@\ ! $(LN) $(DESTDIR)destdir/file.$${SUFFIX} \ @@\ ! $(DESTDIR)destdir/$$i.$${SUFFIX}); \ @@\ done) #endif --- 817,823 ---- @(SUFFIX=`echo $(DESTDIR)destdir/file.* | cut -f2,3 -d.`; \ @@\ for i in aliases; do (set -x; \ @@\ $(RM) $(DESTDIR)destdir/$$i.*; \ @@\ ! (cd $(DESTDIR)destdir; $(LN) file.$${SUFFIX} $$i.$${SUFFIX})); \ @@\ done) #endif diff -c mit/config/xf86_vers.def:2.11 mit/config/xf86_vers.def:2.14 *** mit/config/xf86_vers.def:2.11 Wed May 4 22:55:43 1994 --- mit/config/xf86_vers.def Wed May 4 22:55:43 1994 *************** *** 1,9 **** XCOMM ------------------------------------------------------------------------- XCOMM XFree86 version definition ! XCOMM $XFree86: mit/config/xf86_vers.def,v 2.11 1994/03/05 01:56:48 dawes Exp $ #ifndef XFree86Version ! # define XFree86Version 2100 #endif #ifndef XVendorString --- 1,9 ---- XCOMM ------------------------------------------------------------------------- XCOMM XFree86 version definition ! XCOMM $XFree86: mit/config/xf86_vers.def,v 2.14 1994/05/04 10:40:23 dawes Exp $ #ifndef XFree86Version ! # define XFree86Version 2110 #endif #ifndef XVendorString diff -c mit/clients/xset/xset.c:1.1.1.1 mit/clients/xset/xset.c:2.0 *** mit/clients/xset/xset.c:1.1.1.1 Wed May 4 22:59:19 1994 --- mit/clients/xset/xset.c Wed May 4 22:59:19 1994 *************** *** 115,121 **** percent = 0; /* Turn it off. */ i++; } ! else if (isnumber(arg, 100)) { percent = atoi(arg); /* Set to spec. volume */ i++; } --- 115,121 ---- percent = 0; /* Turn it off. */ i++; } ! else if (is_number(arg, 100)) { percent = atoi(arg); /* Set to spec. volume */ i++; } *************** *** 140,157 **** set_bell_vol(dpy, percent); i++; } ! else if (isnumber(arg, 100)) { /* If volume is given: */ percent = atoi(arg); /* set bell appropriately.*/ set_bell_vol(dpy, percent); i++; arg = nextarg(i, argv); ! if (isnumber(arg, 20000)) { /* If pitch is given: */ set_bell_pitch(dpy, atoi(arg)); /* set the bell. */ i++; arg = nextarg(i, argv); ! if (isnumber(arg, 1000)) { /* If duration is given: */ set_bell_dur(dpy, atoi(arg)); /* set the bell. */ i++; } --- 140,157 ---- set_bell_vol(dpy, percent); i++; } ! else if (is_number(arg, 100)) { /* If volume is given: */ percent = atoi(arg); /* set bell appropriately.*/ set_bell_vol(dpy, percent); i++; arg = nextarg(i, argv); ! if (is_number(arg, 20000)) { /* If pitch is given: */ set_bell_pitch(dpy, atoi(arg)); /* set the bell. */ i++; arg = nextarg(i, argv); ! if (is_number(arg, 1000)) { /* If duration is given: */ set_bell_dur(dpy, atoi(arg)); /* set the bell. */ i++; } *************** *** 222,228 **** values.led_mode = OFF; values.led = ALL; /* None specified */ arg = nextarg(i, argv); ! if (isnumber(arg, 32) && atoi(arg) > 0) { values.led = atoi(arg); i++; } --- 222,228 ---- values.led_mode = OFF; values.led = ALL; /* None specified */ arg = nextarg(i, argv); ! if (is_number(arg, 32) && atoi(arg) > 0) { values.led = atoi(arg); i++; } *************** *** 243,249 **** values.led_mode = OFF; i++; } ! else if (isnumber(arg, 32) && atoi(arg) > 0) { values.led = atoi(arg); i++; } --- 243,249 ---- values.led_mode = OFF; i++; } ! else if (is_number(arg, 32) && atoi(arg) > 0) { values.led = atoi(arg); i++; } *************** *** 333,339 **** key = ALL; /* None specified */ arg = argv[i]; if (i < argc) ! if (isnumber(arg, 255)) { key = atoi(arg); i++; } --- 333,339 ---- key = ALL; /* None specified */ arg = argv[i]; if (i < argc) ! if (is_number(arg, 255)) { key = atoi(arg); i++; } *************** *** 351,357 **** auto_repeat_mode = OFF; i++; } ! else if (isnumber(arg, 255)) { key = atoi(arg); i++; } --- 351,357 ---- auto_repeat_mode = OFF; i++; } ! else if (is_number(arg, 255)) { key = atoi(arg); i++; } *************** *** 394,400 **** } ! isnumber(arg, maximum) char *arg; int maximum; { --- 394,400 ---- } ! is_number(arg, maximum) char *arg; int maximum; {