<!DOCTYPE html>
<html lang="en" data-content_root="../">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>sstfb — The Linux Kernel documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=fa44fd50" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=3918102e" />
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
<script src="../_static/doctools.js?v=9bcbadda"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="tgafb - TGA graphics framebuffer driver" href="tgafb.html" />
<link rel="prev" title="sm712fb - Silicon Motion SM712 graphics framebuffer driver" href="sm712fb.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
</head><body>
<div class="document">
<div class="sphinxsidebar" role="navigation" aria-label="Main">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../index.html">
<img class="logo" src="../_static/logo.svg" alt="Logo of The Linux Kernel"/>
</a></p>
<h1 class="logo"><a href="../index.html">The Linux Kernel</a></h1>
<p class="blurb">6.18.50</p>
<search id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script>
<p>
<h3 class="kernel-toc-contents">Contents</h3>
<input type="checkbox" class="kernel-toc-toggle" id = "kernel-toc-toggle" checked>
<label class="kernel-toc-title" for="kernel-toc-toggle"></label>
<div class="kerneltoc" id="kerneltoc">
<ul>
<li class="toctree-l1"><a class="reference internal" href="../process/development-process.html">Development process</a></li>
<li class="toctree-l1"><a class="reference internal" href="../process/submitting-patches.html">Submitting patches</a></li>
<li class="toctree-l1"><a class="reference internal" href="../process/code-of-conduct.html">Code of conduct</a></li>
<li class="toctree-l1"><a class="reference internal" href="../maintainer/index.html">Maintainer handbook</a></li>
<li class="toctree-l1"><a class="reference internal" href="../process/index.html">All development-process docs</a></li>
</ul>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../core-api/index.html">Core API</a></li>
<li class="toctree-l1"><a class="reference internal" href="../driver-api/index.html">Driver APIs</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../subsystem-apis.html">Subsystems</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../subsystem-apis.html#core-subsystems">Core subsystems</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="../subsystem-apis.html#human-interfaces">Human interfaces</a><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="../input/index.html">Input Documentation</a></li>
<li class="toctree-l3"><a class="reference internal" href="../hid/index.html">Human Interface Devices (HID)</a></li>
<li class="toctree-l3"><a class="reference internal" href="../sound/index.html">Sound Subsystem Documentation</a></li>
<li class="toctree-l3"><a class="reference internal" href="../gpu/index.html">GPU Driver Developer’s Guide</a></li>
<li class="toctree-l3 current"><a class="reference internal" href="index.html">Frame Buffer</a></li>
<li class="toctree-l3"><a class="reference internal" href="../leds/index.html">LEDs</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../subsystem-apis.html#networking-interfaces">Networking interfaces</a></li>
<li class="toctree-l2"><a class="reference internal" href="../subsystem-apis.html#storage-interfaces">Storage interfaces</a></li>
<li class="toctree-l2"><a class="reference internal" href="../subsystem-apis.html#other-subsystems">Other subsystems</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../locking/index.html">Locking</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../process/license-rules.html">Licensing rules</a></li>
<li class="toctree-l1"><a class="reference internal" href="../doc-guide/index.html">Writing documentation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../dev-tools/index.html">Development tools</a></li>
<li class="toctree-l1"><a class="reference internal" href="../dev-tools/testing-overview.html">Testing guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../kernel-hacking/index.html">Hacking guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../trace/index.html">Tracing</a></li>
<li class="toctree-l1"><a class="reference internal" href="../fault-injection/index.html">Fault injection</a></li>
<li class="toctree-l1"><a class="reference internal" href="../livepatch/index.html">Livepatching</a></li>
<li class="toctree-l1"><a class="reference internal" href="../rust/index.html">Rust</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../admin-guide/index.html">Administration</a></li>
<li class="toctree-l1"><a class="reference internal" href="../kbuild/index.html">Build system</a></li>
<li class="toctree-l1"><a class="reference internal" href="../admin-guide/reporting-issues.html">Reporting issues</a></li>
<li class="toctree-l1"><a class="reference internal" href="../tools/index.html">Userspace tools</a></li>
<li class="toctree-l1"><a class="reference internal" href="../userspace-api/index.html">Userspace API</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../firmware-guide/index.html">Firmware</a></li>
<li class="toctree-l1"><a class="reference internal" href="../devicetree/index.html">Firmware and Devicetree</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../arch/index.html">CPU architectures</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../staging/index.html">Unsorted documentation</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../translations/index.html">Translations</a></li>
</ul>
</div>
<script type="text/javascript"> <!--
var sbar = document.getElementsByClassName("sphinxsidebar")[0];
let currents = document.getElementsByClassName("current")
if (currents.length) {
sbar.scrollTop = currents[currents.length - 1].offsetTop;
}
--> </script>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="../_sources/fb/sstfb.rst.txt"
rel="nofollow">Show Source</a></li>
</ul>
</div>
</div>
</div>
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="sstfb">
<h1>sstfb<a class="headerlink" href="#sstfb" title="Link to this heading">¶</a></h1>
<section id="introduction">
<h2>Introduction<a class="headerlink" href="#introduction" title="Link to this heading">¶</a></h2>
<p>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 <<a class="reference external" href="http://sstfb.sourceforge.net">http://sstfb.sourceforge.net</a>>, 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)</p>
<p>Please read the Bug section, and report any success or failure to me
(Ghozlane Toumi <<a class="reference external" href="mailto:gtoumi%40laposte.net">gtoumi<span>@</span>laposte<span>.</span>net</a>>).
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...</p>
</section>
<section id="installation">
<h2>Installation<a class="headerlink" href="#installation" title="Link to this heading">¶</a></h2>
<p>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 <cite>sstfb/kernel/*-2.{2|4}.x.patch</cite>,
and copy sstfb.c to linux/drivers/video/, or apply a single patch,
<cite>sstfb/patch-2.{2|4}.x-sstfb-yymmdd</cite> to your linux source tree.</p>
<p>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 :)</p>
</section>
<section id="module-usage">
<h2>Module Usage<a class="headerlink" href="#module-usage" title="Link to this heading">¶</a></h2>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<ol class="arabic simple">
<li><p>You should read completely this section before issuing any command.</p></li>
<li><p>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)</p></li>
</ol>
</div>
<section id="module-insertion">
<h3>Module insertion<a class="headerlink" href="#module-insertion" title="Link to this heading">¶</a></h3>
<blockquote>
<div><ol class="arabic">
<li><p>insmod sstfb.o</p>
<p>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:
“<code class="xref c c-func broken_xref docutils literal notranslate"><span class="pre">sstfb_test()</span></code>”...
(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)</p>
</li>
<li><p>con2fb /dev/fbx /dev/ttyx</p>
<p>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 automagically binds ttys to the fb.</p>
</li>
<li><p>switch to the virtual console you just mapped. “tadaaa” ...</p></li>
</ol>
</div></blockquote>
</section>
<section id="module-removal">
<h3>Module removal<a class="headerlink" href="#module-removal" title="Link to this heading">¶</a></h3>
<blockquote>
<div><ol class="arabic">
<li><p>con2fb /dev/fbx /dev/ttyx</p>
<p>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)</p>
</li>
<li><p>rmmod sstfb</p></li>
</ol>
</div></blockquote>
</section>
<section id="kernel-modules-options">
<h3>Kernel/Modules Options<a class="headerlink" href="#kernel-modules-options" title="Link to this heading">¶</a></h3>
<p>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 ...</p>
<p>sstfb supports the following options:</p>
<table class="docutils align-default">
<thead>
<tr class="row-odd"><th class="head"><p>Module</p></th>
<th class="head"><p>Kernel</p></th>
<th class="head"><p>Description</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>vgapass=0</p></td>
<td><p>vganopass</p></td>
<td><p>Enable or disable VGA passthrou cable.</p></td>
</tr>
<tr class="row-odd"><td><p>vgapass=1</p></td>
<td><p>vgapass</p></td>
<td><p>When enabled, the monitor will get the signal
from the VGA board and not from the voodoo.</p>
<p>Default: nopass</p>
</td>
</tr>
<tr class="row-even"><td><p>mem=x</p></td>
<td><p>mem:x</p></td>
<td><p>Force frame buffer memory in MiB
allowed values: 0, 1, 2, 4.</p>
<p>Default: 0 (= autodetect)</p>
</td>
</tr>
<tr class="row-odd"><td><p>inverse=1</p></td>
<td><p>inverse</p></td>
<td><p>Supposed to enable inverse console.
doesn’t work yet...</p></td>
</tr>
<tr class="row-even"><td><p>clipping=1</p></td>
<td><p>clipping</p></td>
<td><p>Enable or disable clipping.</p></td>
</tr>
<tr class="row-odd"><td><p>clipping=0</p></td>
<td><p>noclipping</p></td>
<td><p>With clipping enabled, all offscreen
reads and writes are discarded.</p>
<p>Default: enable clipping.</p>
</td>
</tr>
<tr class="row-even"><td><p>gfxclk=x</p></td>
<td><p>gfxclk:x</p></td>
<td><p>Force graphic clock frequency (in MHz).
Be careful with this option, it may be
DANGEROUS.</p>
<p>Default: auto</p>
<blockquote>
<div><ul class="simple">
<li><p>50Mhz for Voodoo 1,</p></li>
<li><p>75MHz for Voodoo 2.</p></li>
</ul>
</div></blockquote>
</td>
</tr>
<tr class="row-odd"><td><p>slowpci=1</p></td>
<td><p>fastpci</p></td>
<td><p>Enable or disable fast PCI read/writes.</p></td>
</tr>
<tr class="row-even"><td><p>slowpci=1</p></td>
<td><p>slowpci</p></td>
<td><p>Default : fastpci</p></td>
</tr>
<tr class="row-odd"><td><p>dev=x</p></td>
<td><p>dev:x</p></td>
<td><p>Attach the driver to device number x.
0 is the first compatible board (in
lspci order)</p></td>
</tr>
</tbody>
</table>
</section>
</section>
<section id="tools">
<h2>Tools<a class="headerlink" href="#tools" title="Link to this heading">¶</a></h2>
<p>These tools are mostly for debugging purposes, but you can
find some of these interesting:</p>
<ul>
<li><p><cite>con2fb</cite>, maps a tty to a fbramebuffer:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>con2fb /dev/fb1 /dev/tty5
</pre></div>
</div>
</li>
<li><p><cite>sst_dbg_vgapass</cite>, changes vga passthrou. You have to recompile the
driver with SST_DEBUG and SST_DEBUG_IOCTL set to 1:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>sst_dbg_vgapass /dev/fb1 1 (enables vga cable)
sst_dbg_vgapass /dev/fb1 0 (disables vga cable)
</pre></div>
</div>
</li>
<li><p><cite>glide_reset</cite>, resets the voodoo using glide
use this after rmmoding sstfb, if the module refuses to
reinsert.</p></li>
</ul>
</section>
<section id="bugs">
<h2>Bugs<a class="headerlink" href="#bugs" title="Link to this heading">¶</a></h2>
<ul>
<li><p>DO NOT use glide while the sstfb module is in, you’ll most likely
hang your computer.</p></li>
<li><p>If you see some artefacts (pixels not cleaning and stuff like that),
try turning off clipping (clipping=0), and/or using slowpci</p></li>
<li><p>the driver don’t detect the 4Mb frame buffer voodoos, it seems that
the 2 last Mbs wrap around. looking into that .</p></li>
<li><p>The driver is 16 bpp only, 24/32 won’t work.</p></li>
<li><p>The driver is not your_favorite_toy-safe. this includes SMP...</p>
<blockquote>
<div><p>[Actually from inspection it seems to be safe - Alan]</p>
</div></blockquote>
</li>
<li><p>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.</p></li>
<li><p>I didn’t really test changing the palette, so you may find some weird
things when playing with that.</p></li>
<li><p>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.</p></li>
<li><p>The 24/32 is not likely to work anytime soon, knowing that the
hardware does ... unusual things in 24/32 bpp.</p></li>
</ul>
</section>
<section id="todo">
<h2>Todo<a class="headerlink" href="#todo" title="Link to this heading">¶</a></h2>
<ul class="simple">
<li><p>Get rid of the previous paragraph.</p></li>
<li><p>Buy more coffee.</p></li>
<li><p>test/port to other arch.</p></li>
<li><p>try to add panning using tweaks with front and back buffer.</p></li>
<li><p>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 ...</p></li>
</ul>
<p>Ghozlane Toumi <<a class="reference external" href="mailto:gtoumi%40laposte.net">gtoumi<span>@</span>laposte<span>.</span>net</a>></p>
<p>Date: 2002/05/09 20:11:45</p>
<p><a class="reference external" href="http://sstfb.sourceforge.net/README">http://sstfb.sourceforge.net/README</a></p>
</section>
</section>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
©The kernel development community.
|
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 8.1.3</a>
& <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
|
<a href="../_sources/fb/sstfb.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>