• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/sound/synth/emux/

Lines Matching refs:sflist

36 static int open_patch(struct snd_sf_list *sflist, const char __user *data,
38 static struct snd_soundfont *newsf(struct snd_sf_list *sflist, int type, char *name);
40 static int close_patch(struct snd_sf_list *sflist);
41 static int probe_data(struct snd_sf_list *sflist, int sample_id);
42 static void set_zone_counter(struct snd_sf_list *sflist,
44 static struct snd_sf_zone *sf_zone_new(struct snd_sf_list *sflist,
46 static void set_sample_counter(struct snd_sf_list *sflist,
48 static struct snd_sf_sample *sf_sample_new(struct snd_sf_list *sflist,
50 static void sf_sample_delete(struct snd_sf_list *sflist,
52 static int load_map(struct snd_sf_list *sflist, const void __user *data, int count);
53 static int load_info(struct snd_sf_list *sflist, const void __user *data, long count);
54 static int remove_info(struct snd_sf_list *sflist, struct snd_soundfont *sf,
61 static int load_data(struct snd_sf_list *sflist, const void __user *data, long count);
62 static void rebuild_presets(struct snd_sf_list *sflist);
63 static void add_preset(struct snd_sf_list *sflist, struct snd_sf_zone *cur);
64 static void delete_preset(struct snd_sf_list *sflist, struct snd_sf_zone *zp);
65 static struct snd_sf_zone *search_first_zone(struct snd_sf_list *sflist,
67 static int search_zones(struct snd_sf_list *sflist, int *notep, int vel,
71 static void snd_sf_init(struct snd_sf_list *sflist);
72 static void snd_sf_clear(struct snd_sf_list *sflist);
75 * lock access to sflist
78 lock_preset(struct snd_sf_list *sflist)
81 mutex_lock(&sflist->presets_mutex);
82 spin_lock_irqsave(&sflist->lock, flags);
83 sflist->presets_locked = 1;
84 spin_unlock_irqrestore(&sflist->lock, flags);
92 unlock_preset(struct snd_sf_list *sflist)
95 spin_lock_irqsave(&sflist->lock, flags);
96 sflist->presets_locked = 0;
97 spin_unlock_irqrestore(&sflist->lock, flags);
98 mutex_unlock(&sflist->presets_mutex);
106 snd_soundfont_close_check(struct snd_sf_list *sflist, int client)
109 spin_lock_irqsave(&sflist->lock, flags);
110 if (sflist->open_client == client) {
111 spin_unlock_irqrestore(&sflist->lock, flags);
112 return close_patch(sflist);
114 spin_unlock_irqrestore(&sflist->lock, flags);
128 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) {
206 if (! remove_info(sflist, sflist->currsf, bank, instr))
213 unlock_preset(sflist);
231 open_patch(struct snd_sf_list *sflist, const char __user *data,
238 spin_lock_irqsave(&sflist->lock, flags);
239 if (sflist->open_client >= 0 || sflist->currsf) {
240 spin_unlock_irqrestore(&sflist->lock, flags);
243 spin_unlock_irqrestore(&sflist->lock, flags);
250 sf = newsf(sflist, parm.type, NULL);
252 sf = newsf(sflist, parm.type, parm.name);
257 spin_lock_irqsave(&sflist->lock, flags);
258 sflist->open_client = client;
259 sflist->currsf = sf;
260 spin_unlock_irqrestore(&sflist->lock, flags);
269 newsf(struct snd_sf_list *sflist, int type, char *name)
275 for (sf = sflist->fonts; sf; sf = sf->next) {
286 sf->id = sflist->fonts_size;
287 sflist->fonts_size++;
290 sf->next = sflist->fonts;
291 sflist->fonts = sf;
316 close_patch(struct snd_sf_list *sflist)
320 spin_lock_irqsave(&sflist->lock, flags);
321 sflist->currsf = NULL;
322 sflist->open_client = -1;
323 spin_unlock_irqrestore(&sflist->lock, flags);
325 rebuild_presets(sflist);
333 probe_data(struct snd_sf_list *sflist, int sample_id)
336 if (sflist->currsf) {
338 if (find_sample(sflist->currsf, sample_id))
348 set_zone_counter(struct snd_sf_list *sflist, struct snd_soundfont *sf,
351 zp->counter = sflist->zone_counter++;
353 sflist->zone_locked = sflist->zone_counter;
360 sf_zone_new(struct snd_sf_list *sflist, struct snd_soundfont *sf)
371 set_zone_counter(sflist, sf, zp);
380 set_sample_counter(struct snd_sf_list *sflist, struct snd_soundfont *sf,
383 sp->counter = sflist->sample_counter++;
385 sflist->sample_locked = sflist->sample_counter;
392 sf_sample_new(struct snd_sf_list *sflist, struct snd_soundfont *sf)
402 set_sample_counter(sflist, sf, sp);
411 sf_sample_delete(struct snd_sf_list *sflist, struct snd_soundfont *sf,
424 load_map(struct snd_sf_list *sflist, const void __user *data, int count)
439 sf = newsf(sflist, SNDRV_SFNT_PAT_TYPE_MAP|SNDRV_SFNT_PAT_SHARED, NULL);
460 set_zone_counter(sflist, sf, zp);
466 if ((zp = sf_zone_new(sflist, sf)) == NULL)
481 add_preset(sflist, zp);
489 remove_info(struct snd_sf_list *sflist, struct snd_soundfont *sf,
511 rebuild_presets(sflist);
521 load_info(struct snd_sf_list *sflist, const void __user *data, long count)
529 if ((sf = sflist->currsf) == NULL)
571 remove_info(sflist, sf, hdr.bank, hdr.instr);
594 if ((zone = sf_zone_new(sflist, sf)) == NULL) {
707 load_data(struct snd_sf_list *sflist, const void __user *data, long count)
715 if ((sf = sflist->currsf) == NULL)
738 if ((sp = sf_sample_new(sflist, sf)) == NULL)
751 rc = sflist->callback.sample_new
752 (sflist->callback.private_data, sp, sflist->memhdr,
755 sf_sample_delete(sflist, sf, sp);
758 sflist->mem_used += sp->v.truesize;
948 load_guspatch(struct snd_sf_list *sflist, const char __user *data,
968 sf = newsf(sflist, SNDRV_SFNT_PAT_TYPE_GUS|SNDRV_SFNT_PAT_SHARED, NULL);
971 if ((smp = sf_sample_new(sflist, sf)) == NULL)
973 sample_id = sflist->sample_counter;
1009 if ((zone = sf_zone_new(sflist, sf)) == NULL) {
1010 sf_sample_delete(sflist, sf, smp);
1017 if (sflist->callback.sample_new) {
1018 rc = sflist->callback.sample_new
1019 (sflist->callback.private_data, smp, sflist->memhdr,
1022 sf_sample_delete(sflist, sf, smp);
1029 sflist->mem_used += smp->v.truesize;
1104 add_preset(sflist, zone);
1111 snd_soundfont_load_guspatch(struct snd_sf_list *sflist, const char __user *data,
1115 lock_preset(sflist);
1116 rc = load_guspatch(sflist, data, count, client);
1117 unlock_preset(sflist);
1130 rebuild_presets(struct snd_sf_list *sflist)
1136 memset(sflist->presets, 0, sizeof(sflist->presets));
1139 for (sf = sflist->fonts; sf; sf = sf->next) {
1148 add_preset(sflist, cur);
1158 add_preset(struct snd_sf_list *sflist, struct snd_sf_zone *cur)
1163 zone = search_first_zone(sflist, cur->bank, cur->instr, cur->v.low);
1174 delete_preset(sflist, zone);
1182 cur->next_instr = sflist->presets[index]; /* preset table link */
1183 sflist->presets[index] = cur;
1190 delete_preset(struct snd_sf_list *sflist, struct snd_sf_zone *zp)
1197 for (p = sflist->presets[index]; p; p = p->next_instr) {
1216 snd_soundfont_search_zone(struct snd_sf_list *sflist, int *notep, int vel,
1228 spin_lock_irqsave(&sflist->lock, flags);
1229 if (sflist->presets_locked) {
1230 spin_unlock_irqrestore(&sflist->lock, flags);
1233 nvoices = search_zones(sflist, notep, vel, preset, bank,
1237 nvoices = search_zones(sflist, notep, vel,
1241 spin_unlock_irqrestore(&sflist->lock, flags);
1250 search_first_zone(struct snd_sf_list *sflist, int bank, int preset, int key)
1257 for (zp = sflist->presets[index]; zp; zp = zp->next_instr) {
1266 * search matching zones from sflist. can be called recursively.
1269 search_zones(struct snd_sf_list *sflist, int *notep, int vel,
1276 zp = search_first_zone(sflist, bank, preset, *notep);
1291 nvoices = search_zones(sflist, &key, vel,
1328 * Initialise the sflist structure.
1331 snd_sf_init(struct snd_sf_list *sflist)
1333 memset(sflist->presets, 0, sizeof(sflist->presets));
1335 sflist->mem_used = 0;
1336 sflist->currsf = NULL;
1337 sflist->open_client = -1;
1338 sflist->fonts = NULL;
1339 sflist->fonts_size = 0;
1340 sflist->zone_counter = 0;
1341 sflist->sample_counter = 0;
1342 sflist->zone_locked = 0;
1343 sflist->sample_locked = 0;
1350 snd_sf_clear(struct snd_sf_list *sflist)
1356 for (sf = sflist->fonts; sf; sf = nextsf) {
1364 if (sflist->callback.sample_free)
1365 sflist->callback.sample_free(sflist->callback.private_data,
1366 sp, sflist->memhdr);
1372 snd_sf_init(sflist);
1377 * Create a new sflist structure
1382 struct snd_sf_list *sflist;
1384 if ((sflist = kzalloc(sizeof(*sflist), GFP_KERNEL)) == NULL)
1387 mutex_init(&sflist->presets_mutex);
1388 spin_lock_init(&sflist->lock);
1389 sflist->memhdr = hdr;
1392 sflist->callback = *callback;
1394 snd_sf_init(sflist);
1395 return sflist;
1400 * Free everything allocated off the sflist structure.
1403 snd_sf_free(struct snd_sf_list *sflist)
1405 if (sflist == NULL)
1408 lock_preset(sflist);
1409 if (sflist->callback.sample_reset)
1410 sflist->callback.sample_reset(sflist->callback.private_data);
1411 snd_sf_clear(sflist);
1412 unlock_preset(sflist);
1414 kfree(sflist);
1422 snd_soundfont_remove_samples(struct snd_sf_list *sflist)
1424 lock_preset(sflist);
1425 if (sflist->callback.sample_reset)
1426 sflist->callback.sample_reset(sflist->callback.private_data);
1427 snd_sf_clear(sflist);
1428 unlock_preset(sflist);
1438 snd_soundfont_remove_unlocked(struct snd_sf_list *sflist)
1444 lock_preset(sflist);
1446 if (sflist->callback.sample_reset)
1447 sflist->callback.sample_reset(sflist->callback.private_data);
1450 memset(sflist->presets, 0, sizeof(sflist->presets));
1452 for (sf = sflist->fonts; sf; sf = sf->next) {
1454 if (zp->counter < sflist->zone_locked)
1462 if (sp->counter < sflist->sample_locked)
1466 sflist->mem_used -= sp->v.truesize;
1467 if (sflist->callback.sample_free)
1468 sflist->callback.sample_free(sflist->callback.private_data,
1469 sp, sflist->memhdr);
1474 sflist->zone_counter = sflist->zone_locked;
1475 sflist->sample_counter = sflist->sample_locked;
1477 rebuild_presets(sflist);
1479 unlock_preset(sflist);