Lines Matching refs:blk

76 static int synth_alloc_pages(struct snd_emu10k1 *hw, struct snd_emu10k1_memblk *blk);
77 static int synth_free_pages(struct snd_emu10k1 *hw, struct snd_emu10k1_memblk *blk);
83 static void emu10k1_memblk_init(struct snd_emu10k1_memblk *blk) in emu10k1_memblk_init() argument
85 blk->mapped_page = -1; in emu10k1_memblk_init()
86 INIT_LIST_HEAD(&blk->mapped_link); in emu10k1_memblk_init()
87 INIT_LIST_HEAD(&blk->mapped_order_link); in emu10k1_memblk_init()
88 blk->map_locked = 0; in emu10k1_memblk_init()
90 blk->first_page = get_aligned_page(blk->mem.offset); in emu10k1_memblk_init()
91 blk->last_page = get_aligned_page(blk->mem.offset + blk->mem.size - 1); in emu10k1_memblk_init()
92 blk->pages = blk->last_page - blk->first_page + 1; in emu10k1_memblk_init()
111 struct snd_emu10k1_memblk *blk = get_emu10k1_memblk(pos, mapped_link); in search_empty_map_area() local
112 if (blk->mapped_page < 0) in search_empty_map_area()
114 size = blk->mapped_page - page; in search_empty_map_area()
125 page = blk->mapped_page + blk->pages; in search_empty_map_area()
141 static int map_memblk(struct snd_emu10k1 *emu, struct snd_emu10k1_memblk *blk) in map_memblk() argument
146 page = search_empty_map_area(emu, blk->pages, &next); in map_memblk()
150 list_add_tail(&blk->mapped_link, next); in map_memblk()
152 list_add_tail(&blk->mapped_order_link, &emu->mapped_order_link_head); in map_memblk()
153 blk->mapped_page = page; in map_memblk()
155 for (pg = blk->first_page; pg <= blk->last_page; pg++) { in map_memblk()
168 static int unmap_memblk(struct snd_emu10k1 *emu, struct snd_emu10k1_memblk *blk) in unmap_memblk() argument
175 if ((p = blk->mapped_link.prev) != &emu->mapped_link_head) { in unmap_memblk()
180 if ((p = blk->mapped_link.next) != &emu->mapped_link_head) { in unmap_memblk()
187 list_del(&blk->mapped_link); in unmap_memblk()
188 list_del(&blk->mapped_order_link); in unmap_memblk()
190 mpage = blk->mapped_page; in unmap_memblk()
191 for (pg = blk->first_page; pg <= blk->last_page; pg++) { in unmap_memblk()
195 blk->mapped_page = -1; in unmap_memblk()
208 struct snd_emu10k1_memblk *blk; in search_empty() local
214 blk = get_emu10k1_memblk(p, mem.list); in search_empty()
215 if (page + psize <= blk->first_page) in search_empty()
217 page = blk->last_page + 1; in search_empty()
224blk = (struct snd_emu10k1_memblk *)__snd_util_memblk_new(emu->memhdr, psize << PAGE_SHIFT, p->prev… in search_empty()
225 if (blk == NULL) in search_empty()
227 blk->mem.offset = aligned_page_offset(page); /* set aligned offset */ in search_empty()
228 emu10k1_memblk_init(blk); in search_empty()
229 return blk; in search_empty()
255 int snd_emu10k1_memblk_map(struct snd_emu10k1 *emu, struct snd_emu10k1_memblk *blk) in snd_emu10k1_memblk_map() argument
264 if (blk->mapped_page >= 0) { in snd_emu10k1_memblk_map()
266 list_del(&blk->mapped_order_link); in snd_emu10k1_memblk_map()
267 list_add_tail(&blk->mapped_order_link, &emu->mapped_order_link_head); in snd_emu10k1_memblk_map()
271 if ((err = map_memblk(emu, blk)) < 0) { in snd_emu10k1_memblk_map()
281 if (size >= blk->pages) { in snd_emu10k1_memblk_map()
283 err = map_memblk(emu, blk); in snd_emu10k1_memblk_map()
302 struct snd_emu10k1_memblk *blk; in snd_emu10k1_alloc_pages() local
317 blk = search_empty(emu, runtime->dma_bytes + idx); in snd_emu10k1_alloc_pages()
318 if (blk == NULL) { in snd_emu10k1_alloc_pages()
326 for (page = blk->first_page; page <= blk->last_page; page++, idx++) { in snd_emu10k1_alloc_pages()
340 blk->map_locked = 1; /* do not unmap this block! */ in snd_emu10k1_alloc_pages()
341 err = snd_emu10k1_memblk_map(emu, blk); in snd_emu10k1_alloc_pages()
343 __snd_util_mem_free(hdr, (struct snd_util_memblk *)blk); in snd_emu10k1_alloc_pages()
348 return (struct snd_util_memblk *)blk; in snd_emu10k1_alloc_pages()
355 int snd_emu10k1_free_pages(struct snd_emu10k1 *emu, struct snd_util_memblk *blk) in snd_emu10k1_free_pages() argument
357 if (snd_BUG_ON(!emu || !blk)) in snd_emu10k1_free_pages()
359 return snd_emu10k1_synth_free(emu, blk); in snd_emu10k1_free_pages()
374 struct snd_emu10k1_memblk *blk; in snd_emu10k1_synth_alloc() local
378 blk = (struct snd_emu10k1_memblk *)__snd_util_mem_alloc(hdr, size); in snd_emu10k1_synth_alloc()
379 if (blk == NULL) { in snd_emu10k1_synth_alloc()
383 if (synth_alloc_pages(hw, blk)) { in snd_emu10k1_synth_alloc()
384 __snd_util_mem_free(hdr, (struct snd_util_memblk *)blk); in snd_emu10k1_synth_alloc()
388 snd_emu10k1_memblk_map(hw, blk); in snd_emu10k1_synth_alloc()
390 return (struct snd_util_memblk *)blk; in snd_emu10k1_synth_alloc()
402 struct snd_emu10k1_memblk *blk = (struct snd_emu10k1_memblk *)memblk; in snd_emu10k1_synth_free() local
407 if (blk->mapped_page >= 0) in snd_emu10k1_synth_free()
408 unmap_memblk(emu, blk); in snd_emu10k1_synth_free()
410 synth_free_pages(emu, blk); in snd_emu10k1_synth_free()
420 struct snd_emu10k1_memblk *blk, in get_single_page_range() argument
426 first_page = blk->first_page; in get_single_page_range()
427 if ((p = blk->mem.list.prev) != &hdr->block) { in get_single_page_range()
432 last_page = blk->last_page; in get_single_page_range()
433 if ((p = blk->mem.list.next) != &hdr->block) { in get_single_page_range()
458 static int synth_alloc_pages(struct snd_emu10k1 *emu, struct snd_emu10k1_memblk *blk) in synth_alloc_pages() argument
462 emu10k1_memblk_init(blk); in synth_alloc_pages()
463 get_single_page_range(emu->memhdr, blk, &first_page, &last_page); in synth_alloc_pages()
490 static int synth_free_pages(struct snd_emu10k1 *emu, struct snd_emu10k1_memblk *blk) in synth_free_pages() argument
494 get_single_page_range(emu->memhdr, blk, &first_page, &last_page); in synth_free_pages()
517 int snd_emu10k1_synth_bzero(struct snd_emu10k1 *emu, struct snd_util_memblk *blk, in snd_emu10k1_synth_bzero() argument
522 struct snd_emu10k1_memblk *p = (struct snd_emu10k1_memblk *)blk; in snd_emu10k1_synth_bzero()
524 offset += blk->offset & (PAGE_SIZE - 1); in snd_emu10k1_synth_bzero()
547 int snd_emu10k1_synth_copy_from_user(struct snd_emu10k1 *emu, struct snd_util_memblk *blk, in snd_emu10k1_synth_copy_from_user() argument
552 struct snd_emu10k1_memblk *p = (struct snd_emu10k1_memblk *)blk; in snd_emu10k1_synth_copy_from_user()
554 offset += blk->offset & (PAGE_SIZE - 1); in snd_emu10k1_synth_copy_from_user()