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 if ((p = blk->mapped_link.prev) != &emu->mapped_link_head) {
177 if ((p = blk->mapped_link.next) != &emu->mapped_link_head) {
184 list_del(&blk->mapped_link);
185 list_del(&blk->mapped_order_link);
187 mpage = blk->mapped_page;
188 for (pg = blk->first_page; pg <= blk->last_page; pg++) {
192 blk->mapped_page = -1;
205 struct snd_emu10k1_memblk *blk;
211 blk = get_emu10k1_memblk(p, mem.list);
212 if (page + psize <= blk->first_page)
214 page = blk->last_page + 1;
221 blk = (struct snd_emu10k1_memblk *)__snd_util_memblk_new(emu->memhdr, psize << PAGE_SHIFT, p->prev);
222 if (blk == NULL)
224 blk->mem.offset = aligned_page_offset(page); /* set aligned offset */
225 emu10k1_memblk_init(blk);
226 return blk;
254 int snd_emu10k1_memblk_map(struct snd_emu10k1 *emu, struct snd_emu10k1_memblk *blk)
263 if (blk->mapped_page >= 0) {
265 list_move_tail(&blk->mapped_order_link,
270 if ((err = map_memblk(emu, blk)) < 0) {
280 if (size >= blk->pages) {
282 err = map_memblk(emu, blk);
301 struct snd_emu10k1_memblk *blk;
316 blk = search_empty(emu, runtime->dma_bytes + idx);
317 if (blk == NULL) {
325 for (page = blk->first_page; page <= blk->last_page; page++, idx++) {
343 blk->map_locked = 1; /* do not unmap this block! */
344 err = snd_emu10k1_memblk_map(emu, blk);
346 __snd_util_mem_free(hdr, (struct snd_util_memblk *)blk);
351 return (struct snd_util_memblk *)blk;
358 int snd_emu10k1_free_pages(struct snd_emu10k1 *emu, struct snd_util_memblk *blk)
360 if (snd_BUG_ON(!emu || !blk))
362 return snd_emu10k1_synth_free(emu, blk);
404 struct snd_emu10k1_memblk *blk;
408 blk = (struct snd_emu10k1_memblk *)__snd_util_mem_alloc(hdr, size);
409 if (blk == NULL) {
413 if (synth_alloc_pages(hw, blk)) {
414 __snd_util_mem_free(hdr, (struct snd_util_memblk *)blk);
418 snd_emu10k1_memblk_map(hw, blk);
420 return (struct snd_util_memblk *)blk;
432 struct snd_emu10k1_memblk *blk = (struct snd_emu10k1_memblk *)memblk;
437 if (blk->mapped_page >= 0)
438 unmap_memblk(emu, blk);
440 synth_free_pages(emu, blk);
450 struct snd_emu10k1_memblk *blk,
456 first_page = blk->first_page;
457 if ((p = blk->mem.list.prev) != &hdr->block) {
462 last_page = blk->last_page;
463 if ((p = blk->mem.list.next) != &hdr->block) {
505 static int synth_alloc_pages(struct snd_emu10k1 *emu, struct snd_emu10k1_memblk *blk)
510 emu10k1_memblk_init(blk);
511 get_single_page_range(emu->memhdr, blk, &first_page, &last_page);
537 static int synth_free_pages(struct snd_emu10k1 *emu, struct snd_emu10k1_memblk *blk)
541 get_single_page_range(emu->memhdr, blk, &first_page, &last_page);
563 * bzero(blk + offset, size)
565 int snd_emu10k1_synth_bzero(struct snd_emu10k1 *emu, struct snd_util_memblk *blk,
570 struct snd_emu10k1_memblk *p = (struct snd_emu10k1_memblk *)blk;
572 offset += blk->offset & (PAGE_SIZE - 1);
593 * copy_from_user(blk + offset, data, size)
595 int snd_emu10k1_synth_copy_from_user(struct snd_emu10k1 *emu, struct snd_util_memblk *blk,
600 struct snd_emu10k1_memblk *p = (struct snd_emu10k1_memblk *)blk;
602 offset += blk->offset & (PAGE_SIZE - 1);