aboutsummaryrefslogtreecommitdiff
path: root/sound/synth/emux/soundfont.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/synth/emux/soundfont.c')
-rw-r--r--sound/synth/emux/soundfont.c293
1 files changed, 164 insertions, 129 deletions
diff --git a/sound/synth/emux/soundfont.c b/sound/synth/emux/soundfont.c
index d0925ea5083..78683b2064f 100644
--- a/sound/synth/emux/soundfont.c
+++ b/sound/synth/emux/soundfont.c
@@ -25,50 +25,61 @@
* of doing things so that the old sfxload utility can be used.
* Everything may change when there is an alsa way of doing things.
*/
-#include <sound/driver.h>
#include <asm/uaccess.h>
#include <linux/slab.h>
+#include <linux/export.h>
#include <sound/core.h>
#include <sound/soundfont.h>
#include <sound/seq_oss_legacy.h>
/* Prototypes for static functions */
-static int open_patch(snd_sf_list_t *sflist, const char __user *data, int count, int client);
-static snd_soundfont_t *newsf(snd_sf_list_t *sflist, int type, char *name);
-static int is_identical_font(snd_soundfont_t *sf, int type, unsigned char *name);
-static int close_patch(snd_sf_list_t *sflist);
-static int probe_data(snd_sf_list_t *sflist, int sample_id);
-static void set_zone_counter(snd_sf_list_t *sflist, snd_soundfont_t *sf, snd_sf_zone_t *zp);
-static snd_sf_zone_t *sf_zone_new(snd_sf_list_t *sflist, snd_soundfont_t *sf);
-static void set_sample_counter(snd_sf_list_t *sflist, snd_soundfont_t *sf, snd_sf_sample_t *sp);
-static snd_sf_sample_t *sf_sample_new(snd_sf_list_t *sflist, snd_soundfont_t *sf);
-static void sf_sample_delete(snd_sf_list_t *sflist, snd_soundfont_t *sf, snd_sf_sample_t *sp);
-static int load_map(snd_sf_list_t *sflist, const void __user *data, int count);
-static int load_info(snd_sf_list_t *sflist, const void __user *data, long count);
-static int remove_info(snd_sf_list_t *sflist, snd_soundfont_t *sf, int bank, int instr);
-static void init_voice_info(soundfont_voice_info_t *avp);
-static void init_voice_parm(soundfont_voice_parm_t *pp);
-static snd_sf_sample_t *set_sample(snd_soundfont_t *sf, soundfont_voice_info_t *avp);
-static snd_sf_sample_t *find_sample(snd_soundfont_t *sf, int sample_id);
-static int load_data(snd_sf_list_t *sflist, const void __user *data, long count);
-static void rebuild_presets(snd_sf_list_t *sflist);
-static void add_preset(snd_sf_list_t *sflist, snd_sf_zone_t *cur);
-static void delete_preset(snd_sf_list_t *sflist, snd_sf_zone_t *zp);
-static snd_sf_zone_t *search_first_zone(snd_sf_list_t *sflist, int bank, int preset, int key);
-static int search_zones(snd_sf_list_t *sflist, int *notep, int vel, int preset, int bank, snd_sf_zone_t **table, int max_layers, int level);
+static int open_patch(struct snd_sf_list *sflist, const char __user *data,
+ int count, int client);
+static struct snd_soundfont *newsf(struct snd_sf_list *sflist, int type, char *name);
+static int is_identical_font(struct snd_soundfont *sf, int type, unsigned char *name);
+static int close_patch(struct snd_sf_list *sflist);
+static int probe_data(struct snd_sf_list *sflist, int sample_id);
+static void set_zone_counter(struct snd_sf_list *sflist,
+ struct snd_soundfont *sf, struct snd_sf_zone *zp);
+static struct snd_sf_zone *sf_zone_new(struct snd_sf_list *sflist,
+ struct snd_soundfont *sf);
+static void set_sample_counter(struct snd_sf_list *sflist,
+ struct snd_soundfont *sf, struct snd_sf_sample *sp);
+static struct snd_sf_sample *sf_sample_new(struct snd_sf_list *sflist,
+ struct snd_soundfont *sf);
+static void sf_sample_delete(struct snd_sf_list *sflist,
+ struct snd_soundfont *sf, struct snd_sf_sample *sp);
+static int load_map(struct snd_sf_list *sflist, const void __user *data, int count);
+static int load_info(struct snd_sf_list *sflist, const void __user *data, long count);
+static int remove_info(struct snd_sf_list *sflist, struct snd_soundfont *sf,
+ int bank, int instr);
+static void init_voice_info(struct soundfont_voice_info *avp);
+static void init_voice_parm(struct soundfont_voice_parm *pp);
+static struct snd_sf_sample *set_sample(struct snd_soundfont *sf,
+ struct soundfont_voice_info *avp);
+static struct snd_sf_sample *find_sample(struct snd_soundfont *sf, int sample_id);
+static int load_data(struct snd_sf_list *sflist, const void __user *data, long count);
+static void rebuild_presets(struct snd_sf_list *sflist);
+static void add_preset(struct snd_sf_list *sflist, struct snd_sf_zone *cur);
+static void delete_preset(struct snd_sf_list *sflist, struct snd_sf_zone *zp);
+static struct snd_sf_zone *search_first_zone(struct snd_sf_list *sflist,
+ int bank, int preset, int key);
+static int search_zones(struct snd_sf_list *sflist, int *notep, int vel,
+ int preset, int bank, struct snd_sf_zone **table,
+ int max_layers, int level);
static int get_index(int bank, int instr, int key);
-static void snd_sf_init(snd_sf_list_t *sflist);
-static void snd_sf_clear(snd_sf_list_t *sflist);
+static void snd_sf_init(struct snd_sf_list *sflist);
+static void snd_sf_clear(struct snd_sf_list *sflist);
/*
* lock access to sflist
*/
static void
-lock_preset(snd_sf_list_t *sflist)
+lock_preset(struct snd_sf_list *sflist)
{
unsigned long flags;
- down(&sflist->presets_mutex);
+ mutex_lock(&sflist->presets_mutex);
spin_lock_irqsave(&sflist->lock, flags);
sflist->presets_locked = 1;
spin_unlock_irqrestore(&sflist->lock, flags);
@@ -79,13 +90,13 @@ lock_preset(snd_sf_list_t *sflist)
* remove lock
*/
static void
-unlock_preset(snd_sf_list_t *sflist)
+unlock_preset(struct snd_sf_list *sflist)
{
unsigned long flags;
spin_lock_irqsave(&sflist->lock, flags);
sflist->presets_locked = 0;
spin_unlock_irqrestore(&sflist->lock, flags);
- up(&sflist->presets_mutex);
+ mutex_unlock(&sflist->presets_mutex);
}
@@ -93,7 +104,7 @@ unlock_preset(snd_sf_list_t *sflist)
* close the patch if the patch was opened by this client.
*/
int
-snd_soundfont_close_check(snd_sf_list_t *sflist, int client)
+snd_soundfont_close_check(struct snd_sf_list *sflist, int client)
{
unsigned long flags;
spin_lock_irqsave(&sflist->lock, flags);
@@ -115,14 +126,15 @@ snd_soundfont_close_check(snd_sf_list_t *sflist, int client)
* it wants to do with it.
*/
int
-snd_soundfont_load(snd_sf_list_t *sflist, const void __user *data, long count, int client)
+snd_soundfont_load(struct snd_sf_list *sflist, const void __user *data,
+ long count, int client)
{
- soundfont_patch_info_t patch;
+ struct soundfont_patch_info patch;
unsigned long flags;
int rc;
if (count < (long)sizeof(patch)) {
- snd_printk("patch record too small %ld\n", count);
+ snd_printk(KERN_ERR "patch record too small %ld\n", count);
return -EINVAL;
}
if (copy_from_user(&patch, data, sizeof(patch)))
@@ -132,15 +144,16 @@ snd_soundfont_load(snd_sf_list_t *sflist, const void __user *data, long count, i
data += sizeof(patch);
if (patch.key != SNDRV_OSS_SOUNDFONT_PATCH) {
- snd_printk("'The wrong kind of patch' %x\n", patch.key);
+ snd_printk(KERN_ERR "The wrong kind of patch %x\n", patch.key);
return -EINVAL;
}
if (count < patch.len) {
- snd_printk("Patch too short %ld, need %d\n", count, patch.len);
+ snd_printk(KERN_ERR "Patch too short %ld, need %d\n",
+ count, patch.len);
return -EINVAL;
}
if (patch.len < 0) {
- snd_printk("poor length %d\n", patch.len);
+ snd_printk(KERN_ERR "poor length %d\n", patch.len);
return -EINVAL;
}
@@ -183,8 +196,9 @@ snd_soundfont_load(snd_sf_list_t *sflist, const void __user *data, long count, i
break;
case SNDRV_SFNT_REMOVE_INFO:
/* patch must be opened */
- if (sflist->currsf) {
- snd_printk("soundfont: remove_info: patch not opened\n");
+ if (!sflist->currsf) {
+ snd_printk(KERN_ERR "soundfont: remove_info: "
+ "patch not opened\n");
rc = -EINVAL;
} else {
int bank, instr;
@@ -215,10 +229,11 @@ is_special_type(int type)
/* open patch; create sf list */
static int
-open_patch(snd_sf_list_t *sflist, const char __user *data, int count, int client)
+open_patch(struct snd_sf_list *sflist, const char __user *data,
+ int count, int client)
{
- soundfont_open_parm_t parm;
- snd_soundfont_t *sf;
+ struct soundfont_open_parm parm;
+ struct snd_soundfont *sf;
unsigned long flags;
spin_lock_irqsave(&sflist->lock, flags);
@@ -251,10 +266,10 @@ open_patch(snd_sf_list_t *sflist, const char __user *data, int count, int client
/*
* Allocate a new soundfont structure.
*/
-static snd_soundfont_t *
-newsf(snd_sf_list_t *sflist, int type, char *name)
+static struct snd_soundfont *
+newsf(struct snd_sf_list *sflist, int type, char *name)
{
- snd_soundfont_t *sf;
+ struct snd_soundfont *sf;
/* check the shared fonts */
if (type & SNDRV_SFNT_PAT_SHARED) {
@@ -287,7 +302,7 @@ newsf(snd_sf_list_t *sflist, int type, char *name)
/* check if the given name matches to the existing list */
static int
-is_identical_font(snd_soundfont_t *sf, int type, unsigned char *name)
+is_identical_font(struct snd_soundfont *sf, int type, unsigned char *name)
{
return ((sf->type & SNDRV_SFNT_PAT_SHARED) &&
(sf->type & 0x0f) == (type & 0x0f) &&
@@ -299,7 +314,7 @@ is_identical_font(snd_soundfont_t *sf, int type, unsigned char *name)
* Close the current patch.
*/
static int
-close_patch(snd_sf_list_t *sflist)
+close_patch(struct snd_sf_list *sflist)
{
unsigned long flags;
@@ -316,7 +331,7 @@ close_patch(snd_sf_list_t *sflist)
/* probe sample in the current list -- nothing to be loaded */
static int
-probe_data(snd_sf_list_t *sflist, int sample_id)
+probe_data(struct snd_sf_list *sflist, int sample_id)
{
/* patch must be opened */
if (sflist->currsf) {
@@ -331,7 +346,8 @@ probe_data(snd_sf_list_t *sflist, int sample_id)
* increment zone counter
*/
static void
-set_zone_counter(snd_sf_list_t *sflist, snd_soundfont_t *sf, snd_sf_zone_t *zp)
+set_zone_counter(struct snd_sf_list *sflist, struct snd_soundfont *sf,
+ struct snd_sf_zone *zp)
{
zp->counter = sflist->zone_counter++;
if (sf->type & SNDRV_SFNT_PAT_LOCKED)
@@ -341,10 +357,10 @@ set_zone_counter(snd_sf_list_t *sflist, snd_soundfont_t *sf, snd_sf_zone_t *zp)
/*
* allocate a new zone record
*/
-static snd_sf_zone_t *
-sf_zone_new(snd_sf_list_t *sflist, snd_soundfont_t *sf)
+static struct snd_sf_zone *
+sf_zone_new(struct snd_sf_list *sflist, struct snd_soundfont *sf)
{
- snd_sf_zone_t *zp;
+ struct snd_sf_zone *zp;
if ((zp = kzalloc(sizeof(*zp), GFP_KERNEL)) == NULL)
return NULL;
@@ -359,10 +375,11 @@ sf_zone_new(snd_sf_list_t *sflist, snd_soundfont_t *sf)
/*
- * increment sample couter
+ * increment sample counter
*/
static void
-set_sample_counter(snd_sf_list_t *sflist, snd_soundfont_t *sf, snd_sf_sample_t *sp)
+set_sample_counter(struct snd_sf_list *sflist, struct snd_soundfont *sf,
+ struct snd_sf_sample *sp)
{
sp->counter = sflist->sample_counter++;
if (sf->type & SNDRV_SFNT_PAT_LOCKED)
@@ -372,10 +389,10 @@ set_sample_counter(snd_sf_list_t *sflist, snd_soundfont_t *sf, snd_sf_sample_t *
/*
* allocate a new sample list record
*/
-static snd_sf_sample_t *
-sf_sample_new(snd_sf_list_t *sflist, snd_soundfont_t *sf)
+static struct snd_sf_sample *
+sf_sample_new(struct snd_sf_list *sflist, struct snd_soundfont *sf)
{
- snd_sf_sample_t *sp;
+ struct snd_sf_sample *sp;
if ((sp = kzalloc(sizeof(*sp), GFP_KERNEL)) == NULL)
return NULL;
@@ -392,7 +409,8 @@ sf_sample_new(snd_sf_list_t *sflist, snd_soundfont_t *sf)
* only the last allocated sample can be deleted.
*/
static void
-sf_sample_delete(snd_sf_list_t *sflist, snd_soundfont_t *sf, snd_sf_sample_t *sp)
+sf_sample_delete(struct snd_sf_list *sflist, struct snd_soundfont *sf,
+ struct snd_sf_sample *sp)
{
/* only last sample is accepted */
if (sp == sf->samples) {
@@ -404,11 +422,11 @@ sf_sample_delete(snd_sf_list_t *sflist, snd_soundfont_t *sf, snd_sf_sample_t *sp
/* load voice map */
static int
-load_map(snd_sf_list_t *sflist, const void __user *data, int count)
+load_map(struct snd_sf_list *sflist, const void __user *data, int count)
{
- snd_sf_zone_t *zp, *prevp;
- snd_soundfont_t *sf;
- soundfont_voice_map_t map;
+ struct snd_sf_zone *zp, *prevp;
+ struct snd_soundfont *sf;
+ struct soundfont_voice_map map;
/* get the link info */
if (count < (int)sizeof(map))
@@ -469,9 +487,10 @@ load_map(snd_sf_list_t *sflist, const void __user *data, int count)
/* remove the present instrument layers */
static int
-remove_info(snd_sf_list_t *sflist, snd_soundfont_t *sf, int bank, int instr)
+remove_info(struct snd_sf_list *sflist, struct snd_soundfont *sf,
+ int bank, int instr)
{
- snd_sf_zone_t *prev, *next, *p;
+ struct snd_sf_zone *prev, *next, *p;
int removed = 0;
prev = NULL;
@@ -500,11 +519,11 @@ remove_info(snd_sf_list_t *sflist, snd_soundfont_t *sf, int bank, int instr)
* open soundfont.
*/
static int
-load_info(snd_sf_list_t *sflist, const void __user *data, long count)
+load_info(struct snd_sf_list *sflist, const void __user *data, long count)
{
- snd_soundfont_t *sf;
- snd_sf_zone_t *zone;
- soundfont_voice_rec_hdr_t hdr;
+ struct snd_soundfont *sf;
+ struct snd_sf_zone *zone;
+ struct soundfont_voice_rec_hdr hdr;
int i;
/* patch must be opened */
@@ -515,7 +534,7 @@ load_info(snd_sf_list_t *sflist, const void __user *data, long count)
return -EINVAL;
if (count < (long)sizeof(hdr)) {
- printk("Soundfont error: invalid patch zone length\n");
+ printk(KERN_ERR "Soundfont error: invalid patch zone length\n");
return -EINVAL;
}
if (copy_from_user((char*)&hdr, data, sizeof(hdr)))
@@ -525,12 +544,14 @@ load_info(snd_sf_list_t *sflist, const void __user *data, long count)
count -= sizeof(hdr);
if (hdr.nvoices <= 0 || hdr.nvoices >= 100) {
- printk("Soundfont error: Illegal voice number %d\n", hdr.nvoices);
+ printk(KERN_ERR "Soundfont error: Illegal voice number %d\n",
+ hdr.nvoices);
return -EINVAL;
}
- if (count < (long)sizeof(soundfont_voice_info_t)*hdr.nvoices) {
- printk("Soundfont Error: patch length(%ld) is smaller than nvoices(%d)\n",
+ if (count < (long)sizeof(struct soundfont_voice_info) * hdr.nvoices) {
+ printk(KERN_ERR "Soundfont Error: "
+ "patch length(%ld) is smaller than nvoices(%d)\n",
count, hdr.nvoices);
return -EINVAL;
}
@@ -553,7 +574,7 @@ load_info(snd_sf_list_t *sflist, const void __user *data, long count)
}
for (i = 0; i < hdr.nvoices; i++) {
- snd_sf_zone_t tmpzone;
+ struct snd_sf_zone tmpzone;
/* copy awe_voice_info parameters */
if (copy_from_user(&tmpzone.v, data, sizeof(tmpzone.v))) {
@@ -590,7 +611,7 @@ load_info(snd_sf_list_t *sflist, const void __user *data, long count)
/* initialize voice_info record */
static void
-init_voice_info(soundfont_voice_info_t *avp)
+init_voice_info(struct soundfont_voice_info *avp)
{
memset(avp, 0, sizeof(*avp));
@@ -614,7 +635,7 @@ init_voice_info(soundfont_voice_info_t *avp)
* Chorus and Reverb effects are zero.
*/
static void
-init_voice_parm(soundfont_voice_parm_t *pp)
+init_voice_parm(struct soundfont_voice_parm *pp)
{
memset(pp, 0, sizeof(*pp));
@@ -635,10 +656,10 @@ init_voice_parm(soundfont_voice_parm_t *pp)
}
/* search the specified sample */
-static snd_sf_sample_t *
-set_sample(snd_soundfont_t *sf, soundfont_voice_info_t *avp)
+static struct snd_sf_sample *
+set_sample(struct snd_soundfont *sf, struct soundfont_voice_info *avp)
{
- snd_sf_sample_t *sample;
+ struct snd_sf_sample *sample;
sample = find_sample(sf, avp->sample);
if (sample == NULL)
@@ -661,10 +682,10 @@ set_sample(snd_soundfont_t *sf, soundfont_voice_info_t *avp)
}
/* find the sample pointer with the given id in the soundfont */
-static snd_sf_sample_t *
-find_sample(snd_soundfont_t *sf, int sample_id)
+static struct snd_sf_sample *
+find_sample(struct snd_soundfont *sf, int sample_id)
{
- snd_sf_sample_t *p;
+ struct snd_sf_sample *p;
if (sf == NULL)
return NULL;
@@ -684,11 +705,11 @@ find_sample(snd_soundfont_t *sf, int sample_id)
* routine.
*/
static int
-load_data(snd_sf_list_t *sflist, const void __user *data, long count)
+load_data(struct snd_sf_list *sflist, const void __user *data, long count)
{
- snd_soundfont_t *sf;
- soundfont_sample_info_t sample_info;
- snd_sf_sample_t *sp;
+ struct snd_soundfont *sf;
+ struct soundfont_sample_info sample_info;
+ struct snd_sf_sample *sp;
long off;
/* patch must be opened */
@@ -793,6 +814,9 @@ snd_sf_linear_to_log(unsigned int amount, int offset, int ratio)
return v;
}
+EXPORT_SYMBOL(snd_sf_linear_to_log);
+
+
#define OFFSET_MSEC 653117 /* base = 1000 */
#define OFFSET_ABSCENT 851781 /* base = 8176 */
#define OFFSET_SAMPLERATE 1011119 /* base = 44100 */
@@ -922,17 +946,18 @@ int snd_sf_vol_table[128] = {
/* load GUS patch */
static int
-load_guspatch(snd_sf_list_t *sflist, const char __user *data, long count, int client)
+load_guspatch(struct snd_sf_list *sflist, const char __user *data,
+ long count, int client)
{
struct patch_info patch;
- snd_soundfont_t *sf;
- snd_sf_zone_t *zone;
- snd_sf_sample_t *smp;
+ struct snd_soundfont *sf;
+ struct snd_sf_zone *zone;
+ struct snd_sf_sample *smp;
int note, sample_id;
int rc;
if (count < (long)sizeof(patch)) {
- snd_printk("patch record too small %ld\n", count);
+ snd_printk(KERN_ERR "patch record too small %ld\n", count);
return -EINVAL;
}
if (copy_from_user(&patch, data, sizeof(patch)))
@@ -992,9 +1017,11 @@ load_guspatch(snd_sf_list_t *sflist, const char __user *data, long count, int cl
*/
if (sflist->callback.sample_new) {
rc = sflist->callback.sample_new
- (sflist->callback.private_data, smp, sflist->memhdr, data, count);
+ (sflist->callback.private_data, smp, sflist->memhdr,
+ data, count);
if (rc < 0) {
sf_sample_delete(sflist, sf, smp);
+ kfree(zone);
return rc;
}
/* memory offset is updated after */
@@ -1013,7 +1040,8 @@ load_guspatch(snd_sf_list_t *sflist, const char __user *data, long count, int cl
/* panning position; -128 - 127 => 0-127 */
zone->v.pan = (patch.panning + 128) / 2;
#if 0
- snd_printk("gus: basefrq=%d (ofs=%d) root=%d,tune=%d, range:%d-%d\n",
+ snd_printk(KERN_DEBUG
+ "gus: basefrq=%d (ofs=%d) root=%d,tune=%d, range:%d-%d\n",
(int)patch.base_freq, zone->v.rate_offset,
zone->v.root, zone->v.tune, zone->v.low, zone->v.high);
#endif
@@ -1047,7 +1075,8 @@ load_guspatch(snd_sf_list_t *sflist, const char __user *data, long count, int cl
zone->v.parm.volrelease = 0x8000 | snd_sf_calc_parm_decay(release);
zone->v.attenuation = calc_gus_attenuation(patch.env_offset[0]);
#if 0
- snd_printk("gus: atkhld=%x, dcysus=%x, volrel=%x, att=%d\n",
+ snd_printk(KERN_DEBUG
+ "gus: atkhld=%x, dcysus=%x, volrel=%x, att=%d\n",
zone->v.parm.volatkhld,
zone->v.parm.voldcysus,
zone->v.parm.volrelease,
@@ -1095,7 +1124,7 @@ load_guspatch(snd_sf_list_t *sflist, const char __user *data, long count, int cl
/* load GUS patch */
int
-snd_soundfont_load_guspatch(snd_sf_list_t *sflist, const char __user *data,
+snd_soundfont_load_guspatch(struct snd_sf_list *sflist, const char __user *data,
long count, int client)
{
int rc;
@@ -1114,10 +1143,10 @@ snd_soundfont_load_guspatch(snd_sf_list_t *sflist, const char __user *data,
* bank/key combination).
*/
static void
-rebuild_presets(snd_sf_list_t *sflist)
+rebuild_presets(struct snd_sf_list *sflist)
{
- snd_soundfont_t *sf;
- snd_sf_zone_t *cur;
+ struct snd_soundfont *sf;
+ struct snd_sf_zone *cur;
/* clear preset table */
memset(sflist->presets, 0, sizeof(sflist->presets));
@@ -1142,15 +1171,15 @@ rebuild_presets(snd_sf_list_t *sflist)
* add the given zone to preset table
*/
static void
-add_preset(snd_sf_list_t *sflist, snd_sf_zone_t *cur)
+add_preset(struct snd_sf_list *sflist, struct snd_sf_zone *cur)
{
- snd_sf_zone_t *zone;
+ struct snd_sf_zone *zone;
int index;
zone = search_first_zone(sflist, cur->bank, cur->instr, cur->v.low);
if (zone && zone->v.sf_id != cur->v.sf_id) {
/* different instrument was already defined */
- snd_sf_zone_t *p;
+ struct snd_sf_zone *p;
/* compare the allocated time */
for (p = zone; p; p = p->next_zone) {
if (p->counter > cur->counter)
@@ -1174,10 +1203,10 @@ add_preset(snd_sf_list_t *sflist, snd_sf_zone_t *cur)
* delete the given zones from preset_table
*/
static void
-delete_preset(snd_sf_list_t *sflist, snd_sf_zone_t *zp)
+delete_preset(struct snd_sf_list *sflist, struct snd_sf_zone *zp)
{
int index;
- snd_sf_zone_t *p;
+ struct snd_sf_zone *p;
if ((index = get_index(zp->bank, zp->instr, zp->v.low)) < 0)
return;
@@ -1200,10 +1229,10 @@ delete_preset(snd_sf_list_t *sflist, snd_sf_zone_t *zp)
* This function returns the number of found zones. 0 if not found.
*/
int
-snd_soundfont_search_zone(snd_sf_list_t *sflist, int *notep, int vel,
+snd_soundfont_search_zone(struct snd_sf_list *sflist, int *notep, int vel,
int preset, int bank,
int def_preset, int def_bank,
- snd_sf_zone_t **table, int max_layers)
+ struct snd_sf_zone **table, int max_layers)
{
int nvoices;
unsigned long flags;
@@ -1217,10 +1246,13 @@ snd_soundfont_search_zone(snd_sf_list_t *sflist, int *notep, int vel,
spin_unlock_irqrestore(&sflist->lock, flags);
return 0;
}
- nvoices = search_zones(sflist, notep, vel, preset, bank, table, max_layers, 0);
+ nvoices = search_zones(sflist, notep, vel, preset, bank,
+ table, max_layers, 0);
if (! nvoices) {
if (preset != def_preset || bank != def_bank)
- nvoices = search_zones(sflist, notep, vel, def_preset, def_bank, table, max_layers, 0);
+ nvoices = search_zones(sflist, notep, vel,
+ def_preset, def_bank,
+ table, max_layers, 0);
}
spin_unlock_irqrestore(&sflist->lock, flags);
return nvoices;
@@ -1230,11 +1262,11 @@ snd_soundfont_search_zone(snd_sf_list_t *sflist, int *notep, int vel,
/*
* search the first matching zone
*/
-static snd_sf_zone_t *
-search_first_zone(snd_sf_list_t *sflist, int bank, int preset, int key)
+static struct snd_sf_zone *
+search_first_zone(struct snd_sf_list *sflist, int bank, int preset, int key)
{
int index;
- snd_sf_zone_t *zp;
+ struct snd_sf_zone *zp;
if ((index = get_index(bank, preset, key)) < 0)
return NULL;
@@ -1250,9 +1282,11 @@ search_first_zone(snd_sf_list_t *sflist, int bank, int preset, int key)
* search matching zones from sflist. can be called recursively.
*/
static int
-search_zones(snd_sf_list_t *sflist, int *notep, int vel, int preset, int bank, snd_sf_zone_t **table, int max_layers, int level)
+search_zones(struct snd_sf_list *sflist, int *notep, int vel,
+ int preset, int bank, struct snd_sf_zone **table,
+ int max_layers, int level)
{
- snd_sf_zone_t *zp;
+ struct snd_sf_zone *zp;
int nvoices;
zp = search_first_zone(sflist, bank, preset, *notep);
@@ -1310,7 +1344,7 @@ get_index(int bank, int instr, int key)
* Initialise the sflist structure.
*/
static void
-snd_sf_init(snd_sf_list_t *sflist)
+snd_sf_init(struct snd_sf_list *sflist)
{
memset(sflist->presets, 0, sizeof(sflist->presets));
@@ -1329,11 +1363,11 @@ snd_sf_init(snd_sf_list_t *sflist)
* Release all list records
*/
static void
-snd_sf_clear(snd_sf_list_t *sflist)
+snd_sf_clear(struct snd_sf_list *sflist)
{
- snd_soundfont_t *sf, *nextsf;
- snd_sf_zone_t *zp, *nextzp;
- snd_sf_sample_t *sp, *nextsp;
+ struct snd_soundfont *sf, *nextsf;
+ struct snd_sf_zone *zp, *nextzp;
+ struct snd_sf_sample *sp, *nextsp;
for (sf = sflist->fonts; sf; sf = nextsf) {
nextsf = sf->next;
@@ -1344,7 +1378,8 @@ snd_sf_clear(snd_sf_list_t *sflist)
for (sp = sf->samples; sp; sp = nextsp) {
nextsp = sp->next;
if (sflist->callback.sample_free)
- sflist->callback.sample_free(sflist->callback.private_data, sp, sflist->memhdr);
+ sflist->callback.sample_free(sflist->callback.private_data,
+ sp, sflist->memhdr);
kfree(sp);
}
kfree(sf);
@@ -1357,15 +1392,15 @@ snd_sf_clear(snd_sf_list_t *sflist)
/*
* Create a new sflist structure
*/
-snd_sf_list_t *
-snd_sf_new(snd_sf_callback_t *callback, snd_util_memhdr_t *hdr)
+struct snd_sf_list *
+snd_sf_new(struct snd_sf_callback *callback, struct snd_util_memhdr *hdr)
{
- snd_sf_list_t *sflist;
+ struct snd_sf_list *sflist;
if ((sflist = kzalloc(sizeof(*sflist), GFP_KERNEL)) == NULL)
return NULL;
- init_MUTEX(&sflist->presets_mutex);
+ mutex_init(&sflist->presets_mutex);
spin_lock_init(&sflist->lock);
sflist->memhdr = hdr;
@@ -1381,7 +1416,7 @@ snd_sf_new(snd_sf_callback_t *callback, snd_util_memhdr_t *hdr)
* Free everything allocated off the sflist structure.
*/
void
-snd_sf_free(snd_sf_list_t *sflist)
+snd_sf_free(struct snd_sf_list *sflist)
{
if (sflist == NULL)
return;
@@ -1400,7 +1435,7 @@ snd_sf_free(snd_sf_list_t *sflist)
* The soundcard should be silet before calling this function.
*/
int
-snd_soundfont_remove_samples(snd_sf_list_t *sflist)
+snd_soundfont_remove_samples(struct snd_sf_list *sflist)
{
lock_preset(sflist);
if (sflist->callback.sample_reset)
@@ -1416,11 +1451,11 @@ snd_soundfont_remove_samples(snd_sf_list_t *sflist)
* The soundcard should be silent before calling this function.
*/
int
-snd_soundfont_remove_unlocked(snd_sf_list_t *sflist)
+snd_soundfont_remove_unlocked(struct snd_sf_list *sflist)
{
- snd_soundfont_t *sf;
- snd_sf_zone_t *zp, *nextzp;
- snd_sf_sample_t *sp, *nextsp;
+ struct snd_soundfont *sf;
+ struct snd_sf_zone *zp, *nextzp;
+ struct snd_sf_sample *sp, *nextsp;
lock_preset(sflist);
@@ -1446,7 +1481,8 @@ snd_soundfont_remove_unlocked(snd_sf_list_t *sflist)
sf->samples = nextsp;
sflist->mem_used -= sp->v.truesize;
if (sflist->callback.sample_free)
- sflist->callback.sample_free(sflist->callback.private_data, sp, sflist->memhdr);
+ sflist->callback.sample_free(sflist->callback.private_data,
+ sp, sflist->memhdr);
kfree(sp);
}
}
@@ -1459,4 +1495,3 @@ snd_soundfont_remove_unlocked(snd_sf_list_t *sflist)
unlock_preset(sflist);
return 0;
}
-