/* memory allocation using multiple pages (for synth) Unlike the DMA allocation above, non-contiguous pages are assined. allocate a synth sample area  */
struct snd_util_memblk* snd_emu10k1_synth_alloc(struct snd_emu10k1 *hw, unsigned int size)
/* memory allocation using multiple pages (for synth) Unlike the DMA allocation above, non-contiguous pages are assined. allocate a synth sample area  */
struct snd_util_memblk* snd_emu10k1_synth_alloc(struct snd_emu10k1 *hw, unsigned int size)
{
	struct snd_emu10k1_memblk *blk;
	struct snd_util_memhdr *hdr = hw->memhdr; 
	mutex_lock(&hdr->block_mutex);
	blk = (struct snd_emu10k1_memblk *)__snd_util_mem_alloc(hdr, size);
	if (blk == NULL) {
		mutex_unlock(&hdr->block_mutex);
		return NULL;
	}
	if (synth_alloc_pages(hw, blk)) {
		__snd_util_mem_free(hdr, (struct snd_util_memblk *)blk);
		mutex_unlock(&hdr->block_mutex);
		return NULL;
	}
	snd_emu10k1_memblk_map(hw, blk);
	mutex_unlock(&hdr->block_mutex);
	return (struct snd_util_memblk *)blk;
}