contents:

intro:
the hammerfall dsp card (hdsp) is a high end soundcard by rme
features of the "analog" version of this card ("multiface") include 8 analog channels in- / output, sp/dif connections, adat interface, wordclock...
this howto is not about the regular hammerfall card from rme, though many topics might be the same for both cards.
thanks to paul davis there is an alsa-driver for this card, so you can use it with linux.
there is a cardbus (pcmcia) version of the hdsp card, so you can use it on your laptop.

top

my hardware

top

my software

set up the basics:
if you need any help installing linux on a dell inspiron laptop, there is a lot of howtos at linux-laptop.net.
for linux audio systems with kernel version 2.4, it's generally a good idea to apply the lowlatency and capabilities patches to your kernel sources,
and compile an appropriate kernel for your needs.
there's a good howto by jan depner about this topics.

pcmcia:
in case of the dell i8k there is an important thing about pcmcia:
so what you have to do is to use the kernel-pcmcia drivers and change the config files:
edit /etc/pcmcia/config.opts and remove the ports 0x800-0x8f from the include directive.
the 7th line of my config.opts now reads as:
include port 0x100-0x4ff, port 0xc00-0xcff
instead of include port 0x100-0x4ff, port 0x800-0x8ff, port 0xc00-0xcff
now the laptop should start without problems and find the hdsp card.

top

alsa:
i use alsa drivers from the cvs-repository of the alsa project, but the latest package of the drivers should also work.
(read the chapter about hdsp9652 at the bottom of this page for exceptions)
unpack the tar.gz file and do ./configure;make install
when the drivers are installed you have to make sure, that the snd-hammerfall-mem driver is loaded as early as possible during boot.
note: this memory-concept may change soon.
you should include your alsa drivers in your /etc/modules.conf file
debian uses a somewhat different system than other distros so you need to edit /etc/modutils/aliases and add the lines:
options snd-hammerfall-mem snd_enable=1
options snd-hdsp snd_line_outs_monitor=1 # this option makes all output go to line-out too

alias char-major-116 snd
alias char-major-14 soundcore

alias snd-card-0 snd-maestro3 # for inspiron 82000 use snd-intel8x0 instead
alias snd-card-1 snd-hdsp
alias snd-card-2 snd-virmidi

alias sound-slot-0 snd-card-0
alias sound-slot-1 snd-card-1
alias sound-slot-2 snd-card-2

alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-1 snd-seq-oss
alias sound-service-0-3 snd-pcm-oss # /dev/dsp0
alias sound-service-0-8 snd-seq-oss
alias sound-service-0-12 snd-pcm-oss # /dev/adsp0

alias sound-service-1-0 snd-mixer-oss
alias sound-service-1-3 snd-pcm-oss # /dev/dsp1
alias sound-service-1-12 snd-pcm-oss # /dev/adsp1
alias sound-service-1-1 snd-seq-oss
alias sound-service-1-8 snd-seq-oss


alias sound-service-2-1 snd-seq-oss
alias sound-service-2-8 snd-seq-oss

after editing run update-modules
in my case i have three soundcards : the builtin maestro3 card of my i8k, the hdsp and a virtual midi driver to route midi channels inside of the alsa-system
after editing modules.conf you have to run update-modules to activate the changes.
if you are unsure about that config-thing, visit the alsa howto pages
there is a page explainig hdsp-specials like loading the drivers and line-out routing at alsa-project/alsa-doc

top

firmware-upload:
newer version of the hdsp-alsa driver have a seperate userspace program for upload+initialisation of the firmware.
this tool is called hdsploader and has to be started after loading the snd-hdsp module
be careful: loading the firmware onto your card a second time may result in a freeze of the whole system.
i use a little perl-script to determine, whether a firmware-upload is necessary:
#!/usr/bin/perl

my $dmesg = `/bin/dmesg`;
my $lsmod = `/sbin/lsmod`;
my $hdsploader = "/usr/local/bin/hdsploader";

if ($lsmod =~ /snd-hdsp/){
        if (($dmesg=~ /waiting for firmware/) && (!( $dmesg=~ /finished firmware loading/)) ){
                print "uploading firmware\n";
                `$hdsploader`;
        }else{print "firmware flashed allready\n";}
}else{print "modules snd-hsdp not loaded - not doing anything\n";}


now if you got through all that without troubles, your soundcard should work.
<hint by johannes taelman>
If you have a recent hdsp-card or if you are using a recent (December, 2002) driver in windows or macOS, you might have the wrong firmware installed.
In order to make alsa-hdsp recognize the hdsp you have to downgrade the firmware of your card(bus) to revision 10 (0xa hex).
you can download the firmware-tools (for windows or macOs only) at rme-audio.com
</hint by johannes taelman>
since the drivers are still beta, there are still some bugs.
sometimes, the drivers won't load during the boot process (red light on the card stays on),
or the drivers load, but hdsp remains silent.
in this cases you have to reboot your computer to make thinks work correctly.

top

controlling output routing:
the hdsp-card has an advanced thus somewhat complicated mixing matrix.
it uses the concept of "streams" that are routed to the physical channels of your card.
nowadays the alsa-tools collection of the alsa drivers come with a great gui mixing tool for hdsp: hdspmixer by thomas charbonnel


if you want to know about configuring your mixing-matrix "by hand". here's what i found:

marcus andersson wrote:
if you hear all channels, you have to turn all channels off. The first
parameter tells the sound card which output channel to change the volume
for. Try this:
analog off, left headphone output:
amixer -c 1 cset numid=5 26,26,0
amixer -c 1 cset numid=5 27,26,0
amixer -c 1 cset numid=5 28,26,0
amixer -c 1 cset numid=5 29,26,0
amixer -c 1 cset numid=5 30,26,0
amixer -c 1 cset numid=5 31,26,0
amixer -c 1 cset numid=5 32,26,0
amixer -c 1 cset numid=5 33,26,0

adat off, left headphone output:
amixer -c 1 cset numid=5 42,26,0
amixer -c 1 cset numid=5 43,26,0
amixer -c 1 cset numid=5 44,26,0
amixer -c 1 cset numid=5 45,26,0
amixer -c 1 cset numid=5 46,26,0
amixer -c 1 cset numid=5 47,26,0
amixer -c 1 cset numid=5 48,26,0
amixer -c 1 cset numid=5 49,26,0

spdif off, left headphone output:
amixer -c 1 cset numid=5 50,26,0
amixer -c 1 cset numid=5 51,26,0

Replace 26 with 27 to turn off all channels sent to the right headphone
output.
...
The mixer control (5) is special. It controls a very large number of
volume settings available in the matrix mixer. It is not possible to
read the mixer settings from the card.

in other words:
amixer arguments:
-c 1 means second(!) card (my first card is the built in laptop-card)
cset numid=5 means "set the mixermatrix"
then
first value: input source
second value: output source
third value: gain (0 - 65535 where 32767 is 0db)
input source: 0-25 (physical channels), 26-51 (audio output streams)
output source: 0-27 (physical channels)
output channels 26 and 27 are the two line outs on the I/O box.
so: amixer -c 1 cset numid=5 26,0,32767
to route the first output stream to the first output at 0db
and amixer -c 1 cset numid=5 27,1,32767 for channel 2

you will find more about the mixermatrix here and here.


top

testing
based on alsa-examples, i wrote a little test-program, that creates a 440hz sinewave on all available channels of the hdsp.
you can download it here
edit the sourcecode if you need anything else but samplerate=44100, pcm-device=hw:0, follow the compile-instructions in the header of the file, and run it with ./hdsptester.

alternatively, you can simply use "aplay -D plughw:0,0 myfavouritetrack.wav" (replace 0,0 with 1,0 if hdsp is your second card...), to play some soundfile.
good luck!

top

pd:
the best tool (in my opinion) for linux realtime audio processing ist pd ("pure data") by miller puckette.
there is a lot of ressources about that project on the net. a good place to start is the pd pages of iem.kug.ac.at
pd has support for native alsa, but i ran into problems using pd+alsa+hdsp.
i managed to get pd running with the oss-emulation, and (alternatively) with jack.
after installing pd, you should create a .pdrc file in your userhome, with all the startup-switches for pd.
for the oss-emulation if the hdsp card i use the following configuration in ~/.pdrc:
-rt
-mididev 2
-r 44100
-sounddev 2
-blocksize 2048
-channels 18
because i have a builtin soundcard, hdsp is sounddev 2.
because i got clicks and cuts in the sound when first trying the oss-emulation, i had to fiddle around with blocksize-parameters and ended up with -blocksize 2048.
if you get poor sound, try changing this value.
midi should work "out of the box".

top

jack
if you use pd with jack ( jackit.sf.net ) you can link different sound-apps quite like command-line apps with a | pipe |.
to use pd with jack, you have to get the "jackified" version of pd at pd.sf.
i did a "cvs update -r jack_0_35_0_fifo" to get the 0.35-jack version of pd.
compile pd after a ./configure --enable-jack , and put -jack in your .pdrc.
there is a howto for jack with pd and ardour at djcj.org
be careful: using the "-R" option (realtime scheduling) for jackd causes a total system-lockup if you use kernel 2.4.20 plus any ext3 (journaling) enabled filesystem.
in that case you should use the patches from zip.com.au, or simply disable journaling for your partitions

top

ardour
ardour is a free daw-system (digital audio workstation),
that lets you record, edit and mix multiple channels of sound, and works great together with hdsp-hardware.
it is near to a stable release and designed to use jack as audio engine.

top

pci/cardbus issues
if you experience dropouts / xruns / clicks / pops with your hdsp, try to change the pci-latency values of your pci devices:
in my case i lowered the pci latency of the built-in nvidia graphics card:
do a "lspci" and get a result like:
00:00.0 Host bridge: Intel Corp. 82815 815 Chipset Host Bridge and Memory Controller Hub (rev 02)
00:01.0 PCI bridge: Intel Corp. 82815 815 Chipset AGP Bridge (rev 02)
00:1e.0 PCI bridge: Intel Corp. 82801BAM/CAM PCI Bridge (rev 02)
00:1f.0 ISA bridge: Intel Corp. 82801BAM ISA Bridge (LPC) (rev 02)
00:1f.1 IDE interface: Intel Corp. 82801BAM IDE U100 (rev 02)
00:1f.2 USB Controller: Intel Corp. 82801BA/BAM USB (Hub #1) (rev 02)
01:00.0 VGA compatible controller: nVidia Corporation NV11 [GeForce2 Go] (rev b2)
02:03.0 Multimedia audio controller: ESS Technology ES1983S Maestro-3i PCI Audio Accelerator (rev 10)
02:06.0 PCI bridge: Action Tec Electronics Inc: Unknown device 0100 (rev 11)
02:0f.0 CardBus bridge: Texas Instruments PCI4451 PC card Cardbus Controller
02:0f.1 CardBus bridge: Texas Instruments PCI4451 PC card Cardbus Controller
02:0f.2 FireWire (IEEE 1394): Texas Instruments PCI4451 IEEE-1394 Controller
08:04.0 Ethernet controller: Intel Corp. 82557/8/9 [Ethernet Pro 100] (rev 08)
08:08.0 Communication controller: Lucent Microelectronics WinModem 56k (rev 01)
09:00.0 Multimedia audio controller: Xilinx, Inc.: Unknown device 3fc5 (rev 0a)

this gives you the pc bus+devicenumber of your cards
now try different values for pci-latency (as root):
"setpci -v -s 01:00.0 latency_timer=04" did it in my case
the command sets the pci-latency of my nvidia-card to 4 (instead of 248) and greatly improves the performance of other cards on the bus.
there's a good howto about this topic here
and a GUI tool called gpowertweak that helps you getting an overview.

<hint by tim blechmann>
some machines have problems with assigning pci resources via acpi. you could try to run the kernel with pci=noacpi or even acpi=off as kernel parameters.

there are issues with some cardbus bridges that are not initialized correctly by the kernel module for the yenta socket.
you will be able to figure out, if you have this problem by running jack as root with realtime flag:
bash-2.05b# jackd -R -d alsa -d hw:1 
if jack complains something like:
delay of 21328.000 usecs exceeds estimated spare time of 21315.000; restart ...
and all you hear is a (grainy) distorted sound, it is most likely caused by incorrect / not optimal register settings on the cardbus bridge. since this problem is dependant on your hardware, there is no easy way to figure out, what's the actual reason of the problem. if you experience this problem, try the most recent kernel release. if this didn't help, contact the kernel maintainers of the pcmcia subsystem: linux-pcmcia AT lists.infradead.org
they are the ones, who might be able to help. it might be helpful for them if you compare the register settings on windows (if it's installed, there is a tool called WPCREDIT, that reads the registers) and on linux (hexdump /proc/bus/pci/02/0f.0 if you cardbus bridge is 02:0f.0 on the lspci output) and find as much information (datasheet) on your specific cardbus bridge.
</hint by tim blechmann>

top

things not working yet:


top

special notes: hdsp9652 (might be out of date)
the rme hdsp9652 card is a pci card that serves up to three adat-connections, which gives you a maximum of 26 channels.
so far (june 2003) alsa drivers are not working properly with this card, but i got one working with the following trick:
use the alsa 0.9rc7 drivers instead of the latest version and apply the following patch to hdsp.c:
*** hdsp.c.orig 2003-05-30 14:01:17.000000000 +0200
--- hdsp.c      2003-05-30 13:20:12.000000000 +0200
***************
*** 2978,2983 ****
--- 2978,2984 ----

        switch (rev & 0xff) {
        case 0xa:
+       case 0x68:
                /* hdsp_initialize_firmware() will reset this */
                hdsp->card_name = "RME Hammerfall DSP";
                break; 

now the driver handles the hdsp9652 like a hdsp+digiface, and you should be able to use the card.
there is no volume-control with this patch (alsamixer acts like normal, but with no results), but the sound appears at a regular level.


top

links
hardware:
rme (manufacturer of the hdsp cards)

hdsp configuration:
linux journal article about configuring hdsp
"using the hammerfall dsp" by peter todd

kernel and drivers:
the kernel patch collection by con kolivas
the linux audio quality howto
a howto about alsa,jack,ladspa,ardour...
the alsa project page

linux audio software:
ardour digital audio workstation
pure data realtime audio software
general "sound & midi 4 linux" link collection


top

-------------------------
last changes: may.05.04
thanks to etienne deleflie, johannes taelman, tim blechmann and marcus andersson for extra suggestions.
special thanks to all the people making linux an excellent audio-platform.
if you have any further questions or suggestions, don't hesitate to contact me at dieb13 @ this domain