Moved firmware to alsa-firmware module, corrected DATAPATH

This commit is contained in:
Jaroslav Kysela 2003-11-25 16:07:05 +00:00
parent a2f5768907
commit b4037faa0e
9 changed files with 52 additions and 16305 deletions

View file

@ -1,15 +1,16 @@
# # Process this file with automake to produce Makefile.in.
SUBDIRS = firmware
MYNAME = hdsploader
bin_PROGRAMS = hdsploader
AM_CFLAGS = -DDATAPATH=\"$(datadir)/alsa/firmware/$(MYNAME)\"
hdsploader_SOURCES = hdsploader.c
EXTRA_DIST = depcomp
alsa-dist: distdir
@rm -rf ../distdir/hdsploader
@mkdir -p ../distdir/hdsploader
@cp -RLpv $(distdir)/* ../distdir/hdsploader
@rm -rf ../distdir/$(MYNAME)
@mkdir -p ../distdir/$(MYNAME)
@cp -RLpv $(distdir)/* ../distdir/$(MYNAME)
@rm -rf $(distdir)

View file

@ -3,5 +3,14 @@ hdsploader - firmware loader for the RME Hammerfall DSP cards
USAGE
=====
Just run hdsploader, the program takes care of everything.
FILES
=====
The firmware binaries are installed on /usr/share/alsa/firmware/hdsploader
(or /usr/local/share/alsa/firmware/hdsploader, depending to the prefix
option of configure). There will be *.conf files, which define the dsp
image files for each different card type.

View file

@ -49,4 +49,4 @@ else
fi
fi
AC_OUTPUT(Makefile firmware/Makefile)
AC_OUTPUT(Makefile)

View file

@ -1 +0,0 @@
EXTRA_DIST = $(wildcard *.dat)

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -20,14 +20,38 @@
#include <stdio.h>
#include <stdlib.h>
#include <endian.h>
#include <sys/ioctl.h>
#include <alsa/asoundlib.h>
#include <sound/hdsp.h>
#include "firmware/multiface_firmware.dat"
#include "firmware/digiface_firmware.dat"
#include "firmware/multiface_firmware_rev11.dat"
#include "firmware/digiface_firmware_rev11.dat"
static u_int32_t code[24413];
int read_bin_file(u_int32_t *array, const char *filename)
{
FILE *out;
if ((out = fopen(filename, "r")) == NULL) {
fprintf(stderr, "Unable to open file '%s' for reading\n", filename);
return -1;
}
if (fread(array, 4, 24413, out) != 24413) {
fclose(out);
return -1;
}
fclose(out);
#if __BYTE_ORDER == __BIG_ENDIAN
{
unsigned int idx;
for (idx = 0; idx < 24413; idx++)
array[idx] = ((array[idx] & 0x000000ff) << 16) |
((array[idx] & 0x0000ff00) << 8) |
((array[idx] & 0x00ff0000) >> 8) |
((array[idx] & 0xff000000) >> 16);
}
#endif
return 0;
}
void upload_firmware(int card)
{
@ -54,20 +78,21 @@ void upload_firmware(int card)
snd_hwdep_close(hw);
return;
}
firmware.firmware_data = (unsigned long *)code;
switch (version.io_type) {
case Multiface:
if (version.firmware_rev == 0xa) {
firmware.firmware_data = multiface_firmware;
err = read_bin_file(code, DATAPATH "multiface_firmware.bin");
} else {
firmware.firmware_data = multiface_firmware_rev11;
err = read_bin_file(code, DATAPATH "multiface_firmware_rev11.bin");
}
break;
case Digiface:
if (version.firmware_rev == 0xa) {
firmware.firmware_data = digiface_firmware;
err = read_bin_file(code, DATAPATH "digiface_firmware.bin");
} else {
firmware.firmware_data = digiface_firmware_rev11;
err = read_bin_file(code, DATAPATH "digiface_firmware_rev11.bin");
}
break;
default:
@ -75,6 +100,8 @@ void upload_firmware(int card)
snd_hwdep_close(hw);
return;
}
if (err < 0)
return;
if ((err = snd_hwdep_ioctl(hw, SNDRV_HDSP_IOCTL_UPLOAD_FIRMWARE, &firmware)) < 0) {
fprintf(stderr, "Hwdep ioctl error on card %s : %s.\n", card_name, snd_strerror(err));
@ -115,4 +142,3 @@ int main(int argc, char **argv)
}
return 0;
}