
Introduction

	  This is a frame buffer device driver for 3dfx' Voodoo Graphics 
	(aka voodoo 1, aka sst1) and Voodoo² (aka Voodoo 2, aka CVG) based 
	video boards. It's highly experimental code, but is guaranteed to work
	on my computer, with my "Maxi Gamer 3D" and "Maxi Gamer 3d²" boards,
	and with me "between chair and keyboard". Some people tested other
	combinations and it seems that it works.
	  The main page is located at <http://sstfb.sourceforge.net>, and if
	you want the latest version, check out the CVS, as the driver is a work
	in progress, I feel uncomfortable with releasing tarballs of something
	not completely working...Don't worry, it's still more than usable
	(I eat my own dog food)

	  Please read the Bug section, and report any success or failure to me
	(Ghozlane Toumi <gtoumi@laposte.net>).
	  BTW, If you have only one monitor , and you don't feel like playing
	with the vga passthrou cable, I can only suggest borrowing a screen
	somewhere... 


Installation 

	  This driver (should) work on ix86, with "late" 2.2.x kernel (tested
	with x = 19) and "recent" 2.4.x kernel, as a module or compiled in.
	  It has been included in mainstream kernel since the infamous 2.4.10.
	  You can apply the patches found in sstfb/kernel/*-2.{2|4}.x.patch,
	and copy sstfb.c to linux/drivers/video/, or apply a single patch, 
	sstfb/patch-2.{2|4}.x-sstfb-yymmdd to your linux source tree.

	  Then configure your kernel as usual: choose "m" or "y" to 3Dfx Voodoo
	Graphics in section "console". Compile, install, have fun... and please
	drop me a report :)


Module Usage
	
	Warnings.
	# You should read completely this section before issuing any command.
	# If you have only one monitor to play with, once you insmod the
	  module, the 3dfx takes control of the output, so you'll have to
	  plug the monitor to the "normal" video board in order to issue
	  the commands, or you can blindly use sst_dbg_vgapass
          in the tools directory (See Tools). The latest solution is pass the
	  parameter vgapass=1 when insmodding the driver. (See Kernel/Modules
	  Options)

	Module insertion:
	# insmod sstfb.o
	  you should see some strange output from the board: 
	  a big blue square, a green and a red small squares and a vertical
	  white rectangle. why? the function's name is self-explanatory:
	  "sstfb_test()"...
	  (if you don't have a second monitor, you'll have to plug your monitor
	  directly to the 2D videocard to see what you're typing)
	# con2fb /dev/fbx /dev/ttyx
	  bind a tty to the new frame buffer. if you already have a frame
	  buffer driver, the voodoo fb will likely be /dev/fb1. if not, 
	  the device will be /dev/fb0. You can check this by doing a 
	  cat /proc/fb. You can find a copy of con2fb in tools/ directory.
	  if you don't have another fb device, this step is superfluous,
	  as the console subsystem automagicaly binds ttys to the fb.
	# switch to the virtual console you just mapped. "tadaaa" ...

	Module removal:
	# con2fb /dev/fbx /dev/ttyx
	  bind the tty to the old frame buffer so the module can be removed.
	  (how does it work with vgacon ? short answer : it doesn't work)
	# rmmod sstfb


Kernel/Modules Options

	You can pass some options to the sstfb module, and via the kernel 
	command line when the driver is compiled in:
	for module : insmod sstfb.o option1=value1 option2=value2 ...
	in kernel :  video=sstfb:option1,option2:value2,option3 ...
	
	sstfb supports the following options :

Module		Kernel		Description

vgapass=0	vganopass	Enable or disable VGA passthrou cable.
vgapass=1	vgapass		When enabled, the monitor will get the signal
				from the VGA board and not from the voodoo.
				Default: nopass

mem=x		mem:x		Force frame buffer memory in MiB
				allowed values: 0, 1, 2, 4.
				Default: 0 (= autodetect)

inverse=1	inverse		Supposed to enable inverse console.
				doesn't work yet...

clipping=1	clipping	Enable or disable clipping.
clipping=0	noclipping	With clipping enabled, all offscreen
				reads and writes are discarded.
				Default: enable clipping.

gfxclk=x	gfxclk:x	Force graphic clock frequency (in MHz).
				Be careful with this option, it may be
				DANGEROUS.
				Default: auto 
					50Mhz for Voodoo 1,
					75MHz for Voodoo 2. 

slowpci=1	fastpci		Enable or disable fast PCI read/writes.
slowpci=1	slowpci		Default : fastpci

dev=x		dev:x		Attach the driver to device number x.
				0 is the first compatible board (in 
				lspci order)

Tools

	These tools are mostly for debugging purposes, but you can 
	find some of these interesting :
	 - con2fb , maps a tty to a fbramebuffer .
		con2fb /dev/fb1 /dev/tty5
	 - sst_dbg_vgapass , changes vga passthrou. You have to recompile the
	driver with SST_DEBUG and SST_DEBUG_IOCTL set to 1
		sst_dbg_vgapass /dev/fb1 1 (enables vga cable)
		sst_dbg_vgapass /dev/fb1 0 (disables vga cable)
	 - glide_reset , resets the voodoo using glide
		use this after rmmoding sstfb, if the module refuses to
		reinsert .

Bugs

	- DO NOT use glide while the sstfb module is in, you'll most likely
	hang your computer.
	- If you see some artefacts (pixels not cleaning and stuff like that), 
	try turning off clipping (clipping=0), and/or using slowpci
	- the driver don't detect the 4Mb frame buffer voodoos, it seems that
	the 2 last Mbs wrap around. looking into that .
	- The driver is 16 bpp only, 24/32 won't work.
	- The driver is not your_favorite_toy-safe. this includes SMP...
          [Actually from inspection it seems to be safe - Alan]
	- When using XFree86 FBdev (X over fbdev) you may see strange color
	patterns at the border of your windows (the pixels lose the lowest
	byte -> basically the blue component and some of the green). I'm unable
	to reproduce this with XFree86-3.3, but one of the testers has this
	problem with XFree86-4. Apparently recent Xfree86-4.x solve this
	problem.
	- I didn't really test changing the palette, so you may find some weird
	things when playing with that.
	- Sometimes the driver will not recognise the DAC, and the
        initialisation will fail. This is specifically true for
	voodoo 2 boards, but it should be solved in recent versions. Please
	contact me.
	- The 24/32 is not likely to work anytime soon, knowing that the
	hardware does ... unusual things in 24/32 bpp.
	- When used with another video board, current limitations of the linux
	console subsystem can cause some troubles, specifically, you should
	disable software scrollback, as it can oops badly ...

Todo

	- Get rid of the previous paragraph.
	- Buy more coffee.
	- test/port to other arch.
	- try to add panning using tweeks with front and back buffer .
	- try to implement accel on voodoo2, this board can actually do a 
	  lot in 2D even if it was sold as a 3D only board ...

ghoz.

-- 
Ghozlane Toumi <gtoumi@laposte.net>


$Date: 2002/05/09 20:11:45 $
http://sstfb.sourceforge.net/README
