Lines Matching refs:blk

69 static int synth_alloc_pages(struct snd_emu10k1 *hw, struct snd_emu10k1_memblk *blk);
70 static int synth_free_pages(struct snd_emu10k1 *hw, struct snd_emu10k1_memblk *blk);
76 static void emu10k1_memblk_init(struct snd_emu10k1_memblk *blk)
78 blk->mapped_page = -1;
79 INIT_LIST_HEAD(&blk->mapped_link);
80 INIT_LIST_HEAD(&blk->mapped_order_link);
81 blk->map_locked = 0;
83 blk->first_page = get_aligned_page(blk->mem.offset);
84 blk->last_page = get_aligned_page(blk->mem.offset + blk->mem.size - 1);
85 blk->pages = blk->last_page - blk->first_page + 1;
104 struct snd_emu10k1_memblk *blk = get_emu10k1_memblk(pos, mapped_link);
105 if (blk->mapped_page < 0)
107 size = blk->mapped_page - page;
118 page = blk->mapped_page + blk->pages;
134 static int map_memblk(struct snd_emu10k1 *emu, struct snd_emu10k1_memblk *blk)
139 page = search_empty_map_area(emu, blk->pages, &next);
147 list_add_tail(&blk->mapped_link, next);
149 list_add_tail(&blk->mapped_order_link, &emu->mapped_order_link_head);
150 blk->mapped_page = page;
152 for (pg = blk->first_page; pg <= blk->last_page; pg++) {
165 static int unmap_memblk(struct snd_emu10k1 *emu, struct snd_emu10k1_memblk *blk)
172 p = blk->mapped_link.prev;
179 p = blk->mapped_link.next;
188 list_del(&blk->mapped_link);
189 list_del(&blk->mapped_order_link);
191 mpage = blk->mapped_page;
192 for (pg = blk->first_page; pg <= blk->last_page; pg++) {
196 blk->mapped_page = -1;
209 struct snd_emu10k1_memblk *blk;
215 blk = get_emu10k1_memblk(p, mem.list);
216 if (page + psize <= blk->first_page)
218 page = blk->last_page + 1;
225 blk = (struct snd_emu10k1_memblk *)__snd_util_memblk_new(emu->memhdr, psize << PAGE_SHIFT, p->prev);
226 if (blk == NULL)
228 blk->mem.offset = aligned_page_offset(page); /* set aligned offset */
229 emu10k1_memblk_init(blk);
230 return blk;
258 int snd_emu10k1_memblk_map(struct snd_emu10k1 *emu, struct snd_emu10k1_memblk *blk)
267 if (blk->mapped_page >= 0) {
269 list_move_tail(&blk->mapped_order_link,
274 err = map_memblk(emu, blk);
285 if (size >= blk->pages) {
287 err = map_memblk(emu, blk);
306 struct snd_emu10k1_memblk *blk;
319 blk = search_empty(emu, runtime->dma_bytes);
320 if (blk == NULL) {
328 for (page = blk->first_page; page <= blk->last_page; page++, idx++) {
346 blk->map_locked = 1; /* do not unmap this block! */
347 err = snd_emu10k1_memblk_map(emu, blk);
349 __snd_util_mem_free(hdr, (struct snd_util_memblk *)blk);
354 return (struct snd_util_memblk *)blk;
361 int snd_emu10k1_free_pages(struct snd_emu10k1 *emu, struct snd_util_memblk *blk)
363 if (snd_BUG_ON(!emu || !blk))
365 return snd_emu10k1_synth_free(emu, blk);
407 struct snd_emu10k1_memblk *blk;
411 blk = (struct snd_emu10k1_memblk *)__snd_util_mem_alloc(hdr, size);
412 if (blk == NULL) {
416 if (synth_alloc_pages(hw, blk)) {
417 __snd_util_mem_free(hdr, (struct snd_util_memblk *)blk);
421 snd_emu10k1_memblk_map(hw, blk);
423 return (struct snd_util_memblk *)blk;
435 struct snd_emu10k1_memblk *blk = (struct snd_emu10k1_memblk *)memblk;
440 if (blk->mapped_page >= 0)
441 unmap_memblk(emu, blk);
443 synth_free_pages(emu, blk);
453 struct snd_emu10k1_memblk *blk,
459 first_page = blk->first_page;
460 p = blk->mem.list.prev;
466 last_page = blk->last_page;
467 p = blk->mem.list.next;
510 static int synth_alloc_pages(struct snd_emu10k1 *emu, struct snd_emu10k1_memblk *blk)
515 emu10k1_memblk_init(blk);
516 get_single_page_range(emu->memhdr, blk, &first_page, &last_page);
542 static int synth_free_pages(struct snd_emu10k1 *emu, struct snd_emu10k1_memblk *blk)
546 get_single_page_range(emu->memhdr, blk, &first_page, &last_page);
568 * bzero(blk + offset, size)
570 int snd_emu10k1_synth_bzero(struct snd_emu10k1 *emu, struct snd_util_memblk *blk,
575 struct snd_emu10k1_memblk *p = (struct snd_emu10k1_memblk *)blk;
577 offset += blk->offset & (PAGE_SIZE - 1);
598 * copy_from_user(blk + offset, data, size)
600 int snd_emu10k1_synth_copy_from_user(struct snd_emu10k1 *emu, struct snd_util_memblk *blk,
605 struct snd_emu10k1_memblk *p = (struct snd_emu10k1_memblk *)blk;
607 offset += blk->offset & (PAGE_SIZE - 1);