• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/src/linux/linux-2.6/sound/synth/emux/

Lines Matching refs:sflist

37 static int open_patch(struct snd_sf_list *sflist, const char __user *data,
39 static struct snd_soundfont *newsf(struct snd_sf_list *sflist, int type, char *name);
41 static int close_patch(struct snd_sf_list *sflist);
42 static int probe_data(struct snd_sf_list *sflist, int sample_id);
43 static void set_zone_counter(struct snd_sf_list *sflist,
45 static struct snd_sf_zone *sf_zone_new(struct snd_sf_list *sflist,
47 static void set_sample_counter(struct snd_sf_list *sflist,
49 static struct snd_sf_sample *sf_sample_new(struct snd_sf_list *sflist,
51 static void sf_sample_delete(struct snd_sf_list *sflist,
53 static int load_map(struct snd_sf_list *sflist, const void __user *data, int count);
54 static int load_info(struct snd_sf_list *sflist, const void __user *data, long count);
55 static int remove_info(struct snd_sf_list *sflist, struct snd_soundfont *sf,
62 static int load_data(struct snd_sf_list *sflist, const void __user *data, long count);
63 static void rebuild_presets(struct snd_sf_list *sflist);
64 static void add_preset(struct snd_sf_list *sflist, struct snd_sf_zone *cur);
65 static void delete_preset(struct snd_sf_list *sflist, struct snd_sf_zone *zp);
66 static struct snd_sf_zone *search_first_zone(struct snd_sf_list *sflist,
68 static int search_zones(struct snd_sf_list *sflist, int *notep, int vel,
72 static void snd_sf_init(struct snd_sf_list *sflist);
73 static void snd_sf_clear(struct snd_sf_list *sflist);
76 * lock access to sflist
79 lock_preset(struct snd_sf_list *sflist)
82 mutex_lock(&sflist->presets_mutex);
83 spin_lock_irqsave(&sflist->lock, flags);
84 sflist->presets_locked = 1;
85 spin_unlock_irqrestore(&sflist->lock, flags);
93 unlock_preset(struct snd_sf_list *sflist)
96 spin_lock_irqsave(&sflist->lock, flags);
97 sflist->presets_locked = 0;
98 spin_unlock_irqrestore(&sflist->lock, flags);
99 mutex_unlock(&sflist->presets_mutex);
107 snd_soundfont_close_check(struct snd_sf_list *sflist, int client)
110 spin_lock_irqsave(&sflist->lock, flags);
111 if (sflist->open_client == client) {
112 spin_unlock_irqrestore(&sflist->lock, flags);
113 return close_patch(sflist);
115 spin_unlock_irqrestore(&sflist->lock, flags);
129 snd_soundfont_load(struct snd_sf_list *sflist, const void __user *data,
160 /* grab sflist to open */
161 lock_preset(sflist);
162 rc = open_patch(sflist, data, count, client);
163 unlock_preset(sflist);
168 spin_lock_irqsave(&sflist->lock, flags);
169 if (sflist->open_client != client) {
170 spin_unlock_irqrestore(&sflist->lock, flags);
173 spin_unlock_irqrestore(&sflist->lock, flags);
175 lock_preset(sflist);
179 rc = load_info(sflist, data, count);
182 rc = load_data(sflist, data, count);
185 rc = close_patch(sflist);
191 rc = load_map(sflist, data, count);
194 rc = probe_data(sflist, patch.optarg);
198 if (!sflist->currsf) {
205 if (! remove_info(sflist, sflist->currsf, bank, instr))
212 unlock_preset(sflist);
230 open_patch(struct snd_sf_list *sflist, const char __user *data,
237 spin_lock_irqsave(&sflist->lock, flags);
238 if (sflist->open_client >= 0 || sflist->currsf) {
239 spin_unlock_irqrestore(&sflist->lock, flags);
242 spin_unlock_irqrestore(&sflist->lock, flags);
249 sf = newsf(sflist, parm.type, NULL);
251 sf = newsf(sflist, parm.type, parm.name);
256 spin_lock_irqsave(&sflist->lock, flags);
257 sflist->open_client = client;
258 sflist->currsf = sf;
259 spin_unlock_irqrestore(&sflist->lock, flags);
268 newsf(struct snd_sf_list *sflist, int type, char *name)
274 for (sf = sflist->fonts; sf; sf = sf->next) {
285 sf->id = sflist->fonts_size;
286 sflist->fonts_size++;
289 sf->next = sflist->fonts;
290 sflist->fonts = sf;
315 close_patch(struct snd_sf_list *sflist)
319 spin_lock_irqsave(&sflist->lock, flags);
320 sflist->currsf = NULL;
321 sflist->open_client = -1;
322 spin_unlock_irqrestore(&sflist->lock, flags);
324 rebuild_presets(sflist);
332 probe_data(struct snd_sf_list *sflist, int sample_id)
335 if (sflist->currsf) {
337 if (find_sample(sflist->currsf, sample_id))
347 set_zone_counter(struct snd_sf_list *sflist, struct snd_soundfont *sf,
350 zp->counter = sflist->zone_counter++;
352 sflist->zone_locked = sflist->zone_counter;
359 sf_zone_new(struct snd_sf_list *sflist, struct snd_soundfont *sf)
370 set_zone_counter(sflist, sf, zp);
379 set_sample_counter(struct snd_sf_list *sflist, struct snd_soundfont *sf,
382 sp->counter = sflist->sample_counter++;
384 sflist->sample_locked = sflist->sample_counter;
391 sf_sample_new(struct snd_sf_list *sflist, struct snd_soundfont *sf)
401 set_sample_counter(sflist, sf, sp);
410 sf_sample_delete(struct snd_sf_list *sflist, struct snd_soundfont *sf,
423 load_map(struct snd_sf_list *sflist, const void __user *data, int count)
438 sf = newsf(sflist, SNDRV_SFNT_PAT_TYPE_MAP|SNDRV_SFNT_PAT_SHARED, NULL);
459 set_zone_counter(sflist, sf, zp);
465 if ((zp = sf_zone_new(sflist, sf)) == NULL)
480 add_preset(sflist, zp);
488 remove_info(struct snd_sf_list *sflist, struct snd_soundfont *sf,
510 rebuild_presets(sflist);
520 load_info(struct snd_sf_list *sflist, const void __user *data, long count)
528 if ((sf = sflist->currsf) == NULL)
568 remove_info(sflist, sf, hdr.bank, hdr.instr);
591 if ((zone = sf_zone_new(sflist, sf)) == NULL) {
704 load_data(struct snd_sf_list *sflist, const void __user *data, long count)
712 if ((sf = sflist->currsf) == NULL)
735 if ((sp = sf_sample_new(sflist, sf)) == NULL)
748 rc = sflist->callback.sample_new
749 (sflist->callback.private_data, sp, sflist->memhdr,
752 sf_sample_delete(sflist, sf, sp);
755 sflist->mem_used += sp->v.truesize;
945 load_guspatch(struct snd_sf_list *sflist, const char __user *data,
965 sf = newsf(sflist, SNDRV_SFNT_PAT_TYPE_GUS|SNDRV_SFNT_PAT_SHARED, NULL);
968 if ((smp = sf_sample_new(sflist, sf)) == NULL)
970 sample_id = sflist->sample_counter;
1006 if ((zone = sf_zone_new(sflist, sf)) == NULL) {
1007 sf_sample_delete(sflist, sf, smp);
1014 if (sflist->callback.sample_new) {
1015 rc = sflist->callback.sample_new
1016 (sflist->callback.private_data, smp, sflist->memhdr,
1019 sf_sample_delete(sflist, sf, smp);
1026 sflist->mem_used += smp->v.truesize;
1101 add_preset(sflist, zone);
1108 snd_soundfont_load_guspatch(struct snd_sf_list *sflist, const char __user *data,
1112 lock_preset(sflist);
1113 rc = load_guspatch(sflist, data, count, client);
1114 unlock_preset(sflist);
1127 rebuild_presets(struct snd_sf_list *sflist)
1133 memset(sflist->presets, 0, sizeof(sflist->presets));
1136 for (sf = sflist->fonts; sf; sf = sf->next) {
1145 add_preset(sflist, cur);
1155 add_preset(struct snd_sf_list *sflist, struct snd_sf_zone *cur)
1160 zone = search_first_zone(sflist, cur->bank, cur->instr, cur->v.low);
1171 delete_preset(sflist, zone);
1179 cur->next_instr = sflist->presets[index]; /* preset table link */
1180 sflist->presets[index] = cur;
1187 delete_preset(struct snd_sf_list *sflist, struct snd_sf_zone *zp)
1194 for (p = sflist->presets[index]; p; p = p->next_instr) {
1213 snd_soundfont_search_zone(struct snd_sf_list *sflist, int *notep, int vel,
1225 spin_lock_irqsave(&sflist->lock, flags);
1226 if (sflist->presets_locked) {
1227 spin_unlock_irqrestore(&sflist->lock, flags);
1230 nvoices = search_zones(sflist, notep, vel, preset, bank,
1234 nvoices = search_zones(sflist, notep, vel,
1238 spin_unlock_irqrestore(&sflist->lock, flags);
1247 search_first_zone(struct snd_sf_list *sflist, int bank, int preset, int key)
1254 for (zp = sflist->presets[index]; zp; zp = zp->next_instr) {
1263 * search matching zones from sflist. can be called recursively.
1266 search_zones(struct snd_sf_list *sflist, int *notep, int vel,
1273 zp = search_first_zone(sflist, bank, preset, *notep);
1288 nvoices = search_zones(sflist, &key, vel,
1325 * Initialise the sflist structure.
1328 snd_sf_init(struct snd_sf_list *sflist)
1330 memset(sflist->presets, 0, sizeof(sflist->presets));
1332 sflist->mem_used = 0;
1333 sflist->currsf = NULL;
1334 sflist->open_client = -1;
1335 sflist->fonts = NULL;
1336 sflist->fonts_size = 0;
1337 sflist->zone_counter = 0;
1338 sflist->sample_counter = 0;
1339 sflist->zone_locked = 0;
1340 sflist->sample_locked = 0;
1347 snd_sf_clear(struct snd_sf_list *sflist)
1353 for (sf = sflist->fonts; sf; sf = nextsf) {
1361 if (sflist->callback.sample_free)
1362 sflist->callback.sample_free(sflist->callback.private_data,
1363 sp, sflist->memhdr);
1369 snd_sf_init(sflist);
1374 * Create a new sflist structure
1379 struct snd_sf_list *sflist;
1381 if ((sflist = kzalloc(sizeof(*sflist), GFP_KERNEL)) == NULL)
1384 mutex_init(&sflist->presets_mutex);
1385 spin_lock_init(&sflist->lock);
1386 sflist->memhdr = hdr;
1389 sflist->callback = *callback;
1391 snd_sf_init(sflist);
1392 return sflist;
1397 * Free everything allocated off the sflist structure.
1400 snd_sf_free(struct snd_sf_list *sflist)
1402 if (sflist == NULL)
1405 lock_preset(sflist);
1406 if (sflist->callback.sample_reset)
1407 sflist->callback.sample_reset(sflist->callback.private_data);
1408 snd_sf_clear(sflist);
1409 unlock_preset(sflist);
1411 kfree(sflist);
1419 snd_soundfont_remove_samples(struct snd_sf_list *sflist)
1421 lock_preset(sflist);
1422 if (sflist->callback.sample_reset)
1423 sflist->callback.sample_reset(sflist->callback.private_data);
1424 snd_sf_clear(sflist);
1425 unlock_preset(sflist);
1435 snd_soundfont_remove_unlocked(struct snd_sf_list *sflist)
1441 lock_preset(sflist);
1443 if (sflist->callback.sample_reset)
1444 sflist->callback.sample_reset(sflist->callback.private_data);
1447 memset(sflist->presets, 0, sizeof(sflist->presets));
1449 for (sf = sflist->fonts; sf; sf = sf->next) {
1451 if (zp->counter < sflist->zone_locked)
1459 if (sp->counter < sflist->sample_locked)
1463 sflist->mem_used -= sp->v.truesize;
1464 if (sflist->callback.sample_free)
1465 sflist->callback.sample_free(sflist->callback.private_data,
1466 sp, sflist->memhdr);
1471 sflist->zone_counter = sflist->zone_locked;
1472 sflist->sample_counter = sflist->sample_locked;
1474 rebuild_presets(sflist);
1476 unlock_preset(sflist);