Lines Matching +full:check +full:- +full:patch
1 // SPDX-License-Identifier: GPL-2.0-or-later
8 * Copyright (c) 1999-2000 Takashi Iwai <tiwai@suse.de>
69 mutex_lock(&sflist->presets_mutex); in lock_preset()
70 spin_lock_irqsave(&sflist->lock, flags); in lock_preset()
71 sflist->presets_locked = 1; in lock_preset()
72 spin_unlock_irqrestore(&sflist->lock, flags); in lock_preset()
83 spin_lock_irqsave(&sflist->lock, flags); in unlock_preset()
84 sflist->presets_locked = 0; in unlock_preset()
85 spin_unlock_irqrestore(&sflist->lock, flags); in unlock_preset()
86 mutex_unlock(&sflist->presets_mutex); in unlock_preset()
91 * close the patch if the patch was opened by this client.
97 spin_lock_irqsave(&sflist->lock, flags); in snd_soundfont_close_check()
98 if (sflist->open_client == client) { in snd_soundfont_close_check()
99 spin_unlock_irqrestore(&sflist->lock, flags); in snd_soundfont_close_check()
102 spin_unlock_irqrestore(&sflist->lock, flags); in snd_soundfont_close_check()
108 * Deal with a soundfont patch. Any driver could use these routines
119 struct soundfont_patch_info patch; in snd_soundfont_load() local
123 if (count < (long)sizeof(patch)) { in snd_soundfont_load()
124 snd_printk(KERN_ERR "patch record too small %ld\n", count); in snd_soundfont_load()
125 return -EINVAL; in snd_soundfont_load()
127 if (copy_from_user(&patch, data, sizeof(patch))) in snd_soundfont_load()
128 return -EFAULT; in snd_soundfont_load()
130 count -= sizeof(patch); in snd_soundfont_load()
131 data += sizeof(patch); in snd_soundfont_load()
133 if (patch.key != SNDRV_OSS_SOUNDFONT_PATCH) { in snd_soundfont_load()
134 snd_printk(KERN_ERR "The wrong kind of patch %x\n", patch.key); in snd_soundfont_load()
135 return -EINVAL; in snd_soundfont_load()
137 if (count < patch.len) { in snd_soundfont_load()
138 snd_printk(KERN_ERR "Patch too short %ld, need %d\n", in snd_soundfont_load()
139 count, patch.len); in snd_soundfont_load()
140 return -EINVAL; in snd_soundfont_load()
142 if (patch.len < 0) { in snd_soundfont_load()
143 snd_printk(KERN_ERR "poor length %d\n", patch.len); in snd_soundfont_load()
144 return -EINVAL; in snd_soundfont_load()
147 if (patch.type == SNDRV_SFNT_OPEN_PATCH) { in snd_soundfont_load()
155 /* check if other client already opened patch */ in snd_soundfont_load()
156 spin_lock_irqsave(&sflist->lock, flags); in snd_soundfont_load()
157 if (sflist->open_client != client) { in snd_soundfont_load()
158 spin_unlock_irqrestore(&sflist->lock, flags); in snd_soundfont_load()
159 return -EBUSY; in snd_soundfont_load()
161 spin_unlock_irqrestore(&sflist->lock, flags); in snd_soundfont_load()
164 rc = -EINVAL; in snd_soundfont_load()
165 switch (patch.type) { in snd_soundfont_load()
176 /*rc = replace_data(&patch, data, count);*/ in snd_soundfont_load()
182 rc = probe_data(sflist, patch.optarg); in snd_soundfont_load()
185 /* patch must be opened */ in snd_soundfont_load()
186 if (!sflist->currsf) { in snd_soundfont_load()
188 "patch not opened\n"); in snd_soundfont_load()
189 rc = -EINVAL; in snd_soundfont_load()
192 bank = ((unsigned short)patch.optarg >> 8) & 0xff; in snd_soundfont_load()
193 instr = (unsigned short)patch.optarg & 0xff; in snd_soundfont_load()
194 if (! remove_info(sflist, sflist->currsf, bank, instr)) in snd_soundfont_load()
195 rc = -EINVAL; in snd_soundfont_load()
207 /* check if specified type is special font (GUS or preset-alias) */
217 /* open patch; create sf list */
226 spin_lock_irqsave(&sflist->lock, flags); in open_patch()
227 if (sflist->open_client >= 0 || sflist->currsf) { in open_patch()
228 spin_unlock_irqrestore(&sflist->lock, flags); in open_patch()
229 return -EBUSY; in open_patch()
231 spin_unlock_irqrestore(&sflist->lock, flags); in open_patch()
234 return -EFAULT; in open_patch()
242 return -ENOMEM; in open_patch()
245 spin_lock_irqsave(&sflist->lock, flags); in open_patch()
246 sflist->open_client = client; in open_patch()
247 sflist->currsf = sf; in open_patch()
248 spin_unlock_irqrestore(&sflist->lock, flags); in open_patch()
261 /* check the shared fonts */ in newsf()
263 for (sf = sflist->fonts; sf; sf = sf->next) { in newsf()
270 /* not found -- create a new one */ in newsf()
274 sf->id = sflist->fonts_size; in newsf()
275 sflist->fonts_size++; in newsf()
278 sf->next = sflist->fonts; in newsf()
279 sflist->fonts = sf; in newsf()
281 sf->type = type; in newsf()
282 sf->zones = NULL; in newsf()
283 sf->samples = NULL; in newsf()
285 memcpy(sf->name, name, SNDRV_SFNT_PATCH_NAME_LEN); in newsf()
290 /* check if the given name matches to the existing list */
294 return ((sf->type & SNDRV_SFNT_PAT_SHARED) && in is_identical_font()
295 (sf->type & 0x0f) == (type & 0x0f) && in is_identical_font()
297 memcmp(sf->name, name, SNDRV_SFNT_PATCH_NAME_LEN) == 0)); in is_identical_font()
301 * Close the current patch.
308 spin_lock_irqsave(&sflist->lock, flags); in close_patch()
309 sflist->currsf = NULL; in close_patch()
310 sflist->open_client = -1; in close_patch()
311 spin_unlock_irqrestore(&sflist->lock, flags); in close_patch()
319 /* probe sample in the current list -- nothing to be loaded */
323 /* patch must be opened */ in probe_data()
324 if (sflist->currsf) { in probe_data()
326 if (find_sample(sflist->currsf, sample_id)) in probe_data()
329 return -EINVAL; in probe_data()
339 zp->counter = sflist->zone_counter++; in set_zone_counter()
340 if (sf->type & SNDRV_SFNT_PAT_LOCKED) in set_zone_counter()
341 sflist->zone_locked = sflist->zone_counter; in set_zone_counter()
355 zp->next = sf->zones; in sf_zone_new()
356 sf->zones = zp; in sf_zone_new()
358 init_voice_info(&zp->v); in sf_zone_new()
372 sp->counter = sflist->sample_counter++; in set_sample_counter()
373 if (sf->type & SNDRV_SFNT_PAT_LOCKED) in set_sample_counter()
374 sflist->sample_locked = sflist->sample_counter; in set_sample_counter()
389 sp->next = sf->samples; in sf_sample_new()
390 sf->samples = sp; in sf_sample_new()
397 * delete sample list -- this is an exceptional job.
405 if (sp == sf->samples) { in sf_sample_delete()
406 sf->samples = sp->next; in sf_sample_delete()
422 return -EINVAL; in load_map()
424 return -EFAULT; in load_map()
427 return -EINVAL; in load_map()
431 return -ENOMEM; in load_map()
434 for (zp = sf->zones; zp; prevp = zp, zp = zp->next) { in load_map()
435 if (zp->mapped && in load_map()
436 zp->instr == map.map_instr && in load_map()
437 zp->bank == map.map_bank && in load_map()
438 zp->v.low == map.map_key && in load_map()
439 zp->v.start == map.src_instr && in load_map()
440 zp->v.end == map.src_bank && in load_map()
441 zp->v.fixkey == map.src_key) { in load_map()
445 prevp->next = zp->next; in load_map()
446 zp->next = sf->zones; in load_map()
447 sf->zones = zp; in load_map()
458 return -ENOMEM; in load_map()
460 zp->bank = map.map_bank; in load_map()
461 zp->instr = map.map_instr; in load_map()
462 zp->mapped = 1; in load_map()
464 zp->v.low = map.map_key; in load_map()
465 zp->v.high = map.map_key; in load_map()
467 zp->v.start = map.src_instr; in load_map()
468 zp->v.end = map.src_bank; in load_map()
469 zp->v.fixkey = map.src_key; in load_map()
470 zp->v.sf_id = sf->id; in load_map()
487 for (p = sf->zones; p; p = next) { in remove_info()
488 next = p->next; in remove_info()
489 if (! p->mapped && in remove_info()
490 p->bank == bank && p->instr == instr) { in remove_info()
493 prev->next = next; in remove_info()
495 sf->zones = next; in remove_info()
519 /* patch must be opened */ in load_info()
520 sf = sflist->currsf; in load_info()
522 return -EINVAL; in load_info()
524 if (is_special_type(sf->type)) in load_info()
525 return -EINVAL; in load_info()
528 printk(KERN_ERR "Soundfont error: invalid patch zone length\n"); in load_info()
529 return -EINVAL; in load_info()
532 return -EFAULT; in load_info()
535 count -= sizeof(hdr); in load_info()
540 return -EINVAL; in load_info()
545 "patch length(%ld) is smaller than nvoices(%d)\n", in load_info()
547 return -EINVAL; in load_info()
552 /* exclusive mode - if the instrument already exists, in load_info()
554 for (zone = sf->zones; zone; zone = zone->next) { in load_info()
555 if (!zone->mapped && in load_info()
556 zone->bank == hdr.bank && in load_info()
557 zone->instr == hdr.instr) in load_info()
558 return -EINVAL; in load_info()
562 /* replace mode - remove the instrument if it already exists */ in load_info()
572 return -EFAULT; in load_info()
576 count -= sizeof(tmpzone.v); in load_info()
581 tmpzone.v.sf_id = sf->id; in load_info()
588 return -ENOMEM; in load_info()
591 zone->bank = tmpzone.bank; in load_info()
592 zone->instr = tmpzone.instr; in load_info()
593 zone->v = tmpzone.v; in load_info()
596 zone->sample = set_sample(sf, &zone->v); in load_info()
609 avp->root = 60; in init_voice_info()
610 avp->high = 127; in init_voice_info()
611 avp->velhigh = 127; in init_voice_info()
612 avp->fixkey = -1; in init_voice_info()
613 avp->fixvel = -1; in init_voice_info()
614 avp->fixpan = -1; in init_voice_info()
615 avp->pan = -1; in init_voice_info()
616 avp->amplitude = 127; in init_voice_info()
617 avp->scaleTuning = 100; in init_voice_info()
619 init_voice_parm(&avp->parm); in init_voice_info()
633 pp->moddelay = 0x8000; in init_voice_parm()
634 pp->modatkhld = 0x7f7f; in init_voice_parm()
635 pp->moddcysus = 0x7f7f; in init_voice_parm()
636 pp->modrelease = 0x807f; in init_voice_parm()
638 pp->voldelay = 0x8000; in init_voice_parm()
639 pp->volatkhld = 0x7f7f; in init_voice_parm()
640 pp->voldcysus = 0x7f7f; in init_voice_parm()
641 pp->volrelease = 0x807f; in init_voice_parm()
643 pp->lfo1delay = 0x8000; in init_voice_parm()
644 pp->lfo2delay = 0x8000; in init_voice_parm()
646 pp->cutoff = 0xff; in init_voice_parm()
655 sample = find_sample(sf, avp->sample); in set_sample()
664 avp->start += sample->v.start; in set_sample()
665 avp->end += sample->v.end; in set_sample()
666 avp->loopstart += sample->v.loopstart; in set_sample()
667 avp->loopend += sample->v.loopend; in set_sample()
670 avp->sample_mode = sample->v.mode_flags; in set_sample()
684 for (p = sf->samples; p; p = p->next) { in find_sample()
685 if (p->v.sample == sample_id) in find_sample()
705 /* patch must be opened */ in load_data()
706 sf = sflist->currsf; in load_data()
708 return -EINVAL; in load_data()
710 if (is_special_type(sf->type)) in load_data()
711 return -EINVAL; in load_data()
714 return -EINVAL; in load_data()
717 return -EFAULT; in load_data()
719 count -= sizeof(sample_info); in load_data()
723 return -EINVAL; in load_data()
725 /* Check for dup */ in load_data()
728 if (sf->type & SNDRV_SFNT_PAT_SHARED) in load_data()
730 return -EINVAL; in load_data()
736 return -ENOMEM; in load_data()
738 sp->v = sample_info; in load_data()
739 sp->v.sf_id = sf->id; in load_data()
740 sp->v.dummy = 0; in load_data()
741 sp->v.truesize = sp->v.size; in load_data()
746 if (sp->v.size > 0) { in load_data()
748 rc = sflist->callback.sample_new in load_data()
749 (sflist->callback.private_data, sp, sflist->memhdr, in load_data()
755 sflist->mem_used += sp->v.truesize; in load_data()
806 v = (log_tbl[s + 1] * low + log_tbl[s] * (0x100 - low)) >> 8; in snd_sf_linear_to_log()
807 v -= offset; in snd_sf_linear_to_log()
809 v += (24 - bit) * ratio; in snd_sf_linear_to_log()
837 * eg, when rate is 22050, this offset becomes -4096.
853 r = (3 - ((rate >> 6) & 3)) * 3; in calc_gus_envelope_time()
857 t = end - start; in calc_gus_envelope_time()
858 if (t < 0) t = -t; in calc_gus_envelope_time()
860 t = t << (13 - r); in calc_gus_envelope_time()
862 t = t >> (r - 13); in calc_gus_envelope_time()
891 /* delay time = 0x8000 - msec/92 */
895 int val = (0x7f * 92 - msec) / 92; in snd_sf_calc_parm_hold()
942 #define calc_gus_sustain(val) (0x7f - snd_sf_vol_table[(val)/2])
945 /* load GUS patch */
950 struct patch_info patch; in load_guspatch() local
957 if (count < (long)sizeof(patch)) { in load_guspatch()
958 snd_printk(KERN_ERR "patch record too small %ld\n", count); in load_guspatch()
959 return -EINVAL; in load_guspatch()
961 if (copy_from_user(&patch, data, sizeof(patch))) in load_guspatch()
962 return -EFAULT; in load_guspatch()
963 count -= sizeof(patch); in load_guspatch()
964 data += sizeof(patch); in load_guspatch()
966 if ((patch.len << (patch.mode & WAVE_16_BITS ? 1 : 0)) != count) in load_guspatch()
967 return -EINVAL; in load_guspatch()
971 return -ENOMEM; in load_guspatch()
974 return -ENOMEM; in load_guspatch()
975 sample_id = sflist->sample_counter; in load_guspatch()
976 smp->v.sample = sample_id; in load_guspatch()
977 smp->v.start = 0; in load_guspatch()
978 smp->v.end = patch.len; in load_guspatch()
979 smp->v.loopstart = patch.loop_start; in load_guspatch()
980 smp->v.loopend = patch.loop_end; in load_guspatch()
981 smp->v.size = patch.len; in load_guspatch()
984 smp->v.mode_flags = 0; in load_guspatch()
985 if (!(patch.mode & WAVE_16_BITS)) in load_guspatch()
986 smp->v.mode_flags |= SNDRV_SFNT_SAMPLE_8BITS; in load_guspatch()
987 if (patch.mode & WAVE_UNSIGNED) in load_guspatch()
988 smp->v.mode_flags |= SNDRV_SFNT_SAMPLE_UNSIGNED; in load_guspatch()
989 smp->v.mode_flags |= SNDRV_SFNT_SAMPLE_NO_BLANK; in load_guspatch()
990 if (!(patch.mode & (WAVE_LOOPING|WAVE_BIDIR_LOOP|WAVE_LOOP_BACK))) in load_guspatch()
991 smp->v.mode_flags |= SNDRV_SFNT_SAMPLE_SINGLESHOT; in load_guspatch()
992 if (patch.mode & WAVE_BIDIR_LOOP) in load_guspatch()
993 smp->v.mode_flags |= SNDRV_SFNT_SAMPLE_BIDIR_LOOP; in load_guspatch()
994 if (patch.mode & WAVE_LOOP_BACK) in load_guspatch()
995 smp->v.mode_flags |= SNDRV_SFNT_SAMPLE_REVERSE_LOOP; in load_guspatch()
997 if (patch.mode & WAVE_16_BITS) { in load_guspatch()
999 smp->v.size /= 2; in load_guspatch()
1000 smp->v.end /= 2; in load_guspatch()
1001 smp->v.loopstart /= 2; in load_guspatch()
1002 smp->v.loopend /= 2; in load_guspatch()
1004 /*smp->v.loopend++;*/ in load_guspatch()
1006 smp->v.dummy = 0; in load_guspatch()
1007 smp->v.truesize = 0; in load_guspatch()
1008 smp->v.sf_id = sf->id; in load_guspatch()
1014 return -ENOMEM; in load_guspatch()
1020 if (sflist->callback.sample_new) { in load_guspatch()
1021 rc = sflist->callback.sample_new in load_guspatch()
1022 (sflist->callback.private_data, smp, sflist->memhdr, in load_guspatch()
1033 sflist->mem_used += smp->v.truesize; in load_guspatch()
1035 zone->v.sample = sample_id; /* the last sample */ in load_guspatch()
1036 zone->v.rate_offset = calc_rate_offset(patch.base_freq); in load_guspatch()
1037 note = freq_to_note(patch.base_note); in load_guspatch()
1038 zone->v.root = note / 100; in load_guspatch()
1039 zone->v.tune = -(note % 100); in load_guspatch()
1040 zone->v.low = (freq_to_note(patch.low_note) + 99) / 100; in load_guspatch()
1041 zone->v.high = freq_to_note(patch.high_note) / 100; in load_guspatch()
1042 /* panning position; -128 - 127 => 0-127 */ in load_guspatch()
1043 zone->v.pan = (patch.panning + 128) / 2; in load_guspatch()
1046 "gus: basefrq=%d (ofs=%d) root=%d,tune=%d, range:%d-%d\n", in load_guspatch()
1047 (int)patch.base_freq, zone->v.rate_offset, in load_guspatch()
1048 zone->v.root, zone->v.tune, zone->v.low, zone->v.high); in load_guspatch()
1053 if (patch.mode & WAVE_ENVELOPES) { in load_guspatch()
1056 (patch.env_rate[0], 0, patch.env_offset[0]); in load_guspatch()
1058 (patch.env_rate[1], patch.env_offset[0], in load_guspatch()
1059 patch.env_offset[1]); in load_guspatch()
1061 (patch.env_rate[2], patch.env_offset[1], in load_guspatch()
1062 patch.env_offset[2]); in load_guspatch()
1064 (patch.env_rate[3], patch.env_offset[1], in load_guspatch()
1065 patch.env_offset[4]); in load_guspatch()
1067 (patch.env_rate[4], patch.env_offset[3], in load_guspatch()
1068 patch.env_offset[4]); in load_guspatch()
1070 (patch.env_rate[5], patch.env_offset[4], in load_guspatch()
1071 patch.env_offset[5]); in load_guspatch()
1072 zone->v.parm.volatkhld = in load_guspatch()
1075 zone->v.parm.voldcysus = (calc_gus_sustain(patch.env_offset[2]) << 8) | in load_guspatch()
1077 zone->v.parm.volrelease = 0x8000 | snd_sf_calc_parm_decay(release); in load_guspatch()
1078 zone->v.attenuation = calc_gus_attenuation(patch.env_offset[0]); in load_guspatch()
1082 zone->v.parm.volatkhld, in load_guspatch()
1083 zone->v.parm.voldcysus, in load_guspatch()
1084 zone->v.parm.volrelease, in load_guspatch()
1085 zone->v.attenuation); in load_guspatch()
1090 if (patch.mode & WAVE_FAST_RELEASE) { in load_guspatch()
1091 zone->v.parm.volrelease = 0x807f; in load_guspatch()
1095 if (patch.mode & WAVE_TREMOLO) { in load_guspatch()
1096 int rate = (patch.tremolo_rate * 1000 / 38) / 42; in load_guspatch()
1097 zone->v.parm.tremfrq = ((patch.tremolo_depth / 2) << 8) | rate; in load_guspatch()
1100 if (patch.mode & WAVE_VIBRATO) { in load_guspatch()
1101 int rate = (patch.vibrato_rate * 1000 / 38) / 42; in load_guspatch()
1102 zone->v.parm.fm2frq2 = ((patch.vibrato_depth / 6) << 8) | rate; in load_guspatch()
1107 if (!(smp->v.mode_flags & SNDRV_SFNT_SAMPLE_SINGLESHOT)) in load_guspatch()
1108 zone->v.mode = SNDRV_SFNT_MODE_LOOPING; in load_guspatch()
1110 zone->v.mode = 0; in load_guspatch()
1113 /*zone->bank = ctrls[AWE_MD_GUS_BANK];*/ in load_guspatch()
1114 zone->bank = 0; in load_guspatch()
1115 zone->instr = patch.instr_no; in load_guspatch()
1116 zone->mapped = 0; in load_guspatch()
1117 zone->v.sf_id = sf->id; in load_guspatch()
1119 zone->sample = set_sample(sf, &zone->v); in load_guspatch()
1127 /* load GUS patch */
1154 memset(sflist->presets, 0, sizeof(sflist->presets)); in rebuild_presets()
1157 for (sf = sflist->fonts; sf; sf = sf->next) { in rebuild_presets()
1158 for (cur = sf->zones; cur; cur = cur->next) { in rebuild_presets()
1159 if (! cur->mapped && cur->sample == NULL) { in rebuild_presets()
1161 cur->sample = set_sample(sf, &cur->v); in rebuild_presets()
1162 if (cur->sample == NULL) in rebuild_presets()
1181 zone = search_first_zone(sflist, cur->bank, cur->instr, cur->v.low); in add_preset()
1182 if (zone && zone->v.sf_id != cur->v.sf_id) { in add_preset()
1186 for (p = zone; p; p = p->next_zone) { in add_preset()
1187 if (p->counter > cur->counter) in add_preset()
1197 index = get_index(cur->bank, cur->instr, cur->v.low); in add_preset()
1200 cur->next_zone = zone; /* zone link */ in add_preset()
1201 cur->next_instr = sflist->presets[index]; /* preset table link */ in add_preset()
1202 sflist->presets[index] = cur; in add_preset()
1214 index = get_index(zp->bank, zp->instr, zp->v.low); in delete_preset()
1217 for (p = sflist->presets[index]; p; p = p->next_instr) { in delete_preset()
1218 while (p->next_instr == zp) { in delete_preset()
1219 p->next_instr = zp->next_instr; in delete_preset()
1220 zp = zp->next_zone; in delete_preset()
1245 * so we check the lock. if it's busy, just returns 0 to in snd_soundfont_search_zone()
1248 spin_lock_irqsave(&sflist->lock, flags); in snd_soundfont_search_zone()
1249 if (sflist->presets_locked) { in snd_soundfont_search_zone()
1250 spin_unlock_irqrestore(&sflist->lock, flags); in snd_soundfont_search_zone()
1261 spin_unlock_irqrestore(&sflist->lock, flags); in snd_soundfont_search_zone()
1278 for (zp = sflist->presets[index]; zp; zp = zp->next_instr) { in search_first_zone()
1279 if (zp->instr == preset && zp->bank == bank) in search_first_zone()
1299 for (; zp; zp = zp->next_zone) { in search_zones()
1300 if (*notep >= zp->v.low && *notep <= zp->v.high && in search_zones()
1301 vel >= zp->v.vellow && vel <= zp->v.velhigh) { in search_zones()
1302 if (zp->mapped) { in search_zones()
1304 int key = zp->v.fixkey; in search_zones()
1305 preset = zp->v.start; in search_zones()
1306 bank = zp->v.end; in search_zones()
1332 * if the index is out of range, return -1.
1344 return -1; in get_index()
1354 memset(sflist->presets, 0, sizeof(sflist->presets)); in snd_sf_init()
1356 sflist->mem_used = 0; in snd_sf_init()
1357 sflist->currsf = NULL; in snd_sf_init()
1358 sflist->open_client = -1; in snd_sf_init()
1359 sflist->fonts = NULL; in snd_sf_init()
1360 sflist->fonts_size = 0; in snd_sf_init()
1361 sflist->zone_counter = 0; in snd_sf_init()
1362 sflist->sample_counter = 0; in snd_sf_init()
1363 sflist->zone_locked = 0; in snd_sf_init()
1364 sflist->sample_locked = 0; in snd_sf_init()
1377 for (sf = sflist->fonts; sf; sf = nextsf) { in snd_sf_clear()
1378 nextsf = sf->next; in snd_sf_clear()
1379 for (zp = sf->zones; zp; zp = nextzp) { in snd_sf_clear()
1380 nextzp = zp->next; in snd_sf_clear()
1383 for (sp = sf->samples; sp; sp = nextsp) { in snd_sf_clear()
1384 nextsp = sp->next; in snd_sf_clear()
1385 if (sflist->callback.sample_free) in snd_sf_clear()
1386 sflist->callback.sample_free(sflist->callback.private_data, in snd_sf_clear()
1387 sp, sflist->memhdr); in snd_sf_clear()
1409 mutex_init(&sflist->presets_mutex); in snd_sf_new()
1410 spin_lock_init(&sflist->lock); in snd_sf_new()
1411 sflist->memhdr = hdr; in snd_sf_new()
1414 sflist->callback = *callback; in snd_sf_new()
1431 if (sflist->callback.sample_reset) in snd_sf_free()
1432 sflist->callback.sample_reset(sflist->callback.private_data); in snd_sf_free()
1447 if (sflist->callback.sample_reset) in snd_soundfont_remove_samples()
1448 sflist->callback.sample_reset(sflist->callback.private_data); in snd_soundfont_remove_samples()
1468 if (sflist->callback.sample_reset) in snd_soundfont_remove_unlocked()
1469 sflist->callback.sample_reset(sflist->callback.private_data); in snd_soundfont_remove_unlocked()
1472 memset(sflist->presets, 0, sizeof(sflist->presets)); in snd_soundfont_remove_unlocked()
1474 for (sf = sflist->fonts; sf; sf = sf->next) { in snd_soundfont_remove_unlocked()
1475 for (zp = sf->zones; zp; zp = nextzp) { in snd_soundfont_remove_unlocked()
1476 if (zp->counter < sflist->zone_locked) in snd_soundfont_remove_unlocked()
1478 nextzp = zp->next; in snd_soundfont_remove_unlocked()
1479 sf->zones = nextzp; in snd_soundfont_remove_unlocked()
1483 for (sp = sf->samples; sp; sp = nextsp) { in snd_soundfont_remove_unlocked()
1484 if (sp->counter < sflist->sample_locked) in snd_soundfont_remove_unlocked()
1486 nextsp = sp->next; in snd_soundfont_remove_unlocked()
1487 sf->samples = nextsp; in snd_soundfont_remove_unlocked()
1488 sflist->mem_used -= sp->v.truesize; in snd_soundfont_remove_unlocked()
1489 if (sflist->callback.sample_free) in snd_soundfont_remove_unlocked()
1490 sflist->callback.sample_free(sflist->callback.private_data, in snd_soundfont_remove_unlocked()
1491 sp, sflist->memhdr); in snd_soundfont_remove_unlocked()
1496 sflist->zone_counter = sflist->zone_locked; in snd_soundfont_remove_unlocked()
1497 sflist->sample_counter = sflist->sample_locked; in snd_soundfont_remove_unlocked()