Lines Matching refs:buffer
15 void init_heap_helper_buffer(struct heap_helper_buffer *buffer, in init_heap_helper_buffer() argument
18 buffer->priv_virt = NULL; in init_heap_helper_buffer()
19 mutex_init(&buffer->lock); in init_heap_helper_buffer()
20 buffer->vmap_cnt = 0; in init_heap_helper_buffer()
21 buffer->vaddr = NULL; in init_heap_helper_buffer()
22 buffer->pagecount = 0; in init_heap_helper_buffer()
23 buffer->pages = NULL; in init_heap_helper_buffer()
24 INIT_LIST_HEAD(&buffer->attachments); in init_heap_helper_buffer()
25 buffer->free = free; in init_heap_helper_buffer()
28 struct dma_buf *heap_helper_export_dmabuf(struct heap_helper_buffer *buffer, in heap_helper_export_dmabuf() argument
33 exp_info.exp_name = dma_heap_get_name(buffer->heap); in heap_helper_export_dmabuf()
35 exp_info.size = buffer->size; in heap_helper_export_dmabuf()
37 exp_info.priv = buffer; in heap_helper_export_dmabuf()
42 static void *dma_heap_map_kernel(struct heap_helper_buffer *buffer) in dma_heap_map_kernel() argument
46 vaddr = vmap(buffer->pages, buffer->pagecount, VM_MAP, PAGE_KERNEL); in dma_heap_map_kernel()
53 static void dma_heap_buffer_destroy(struct heap_helper_buffer *buffer) in dma_heap_buffer_destroy() argument
55 if (buffer->vmap_cnt > 0) { in dma_heap_buffer_destroy()
57 vunmap(buffer->vaddr); in dma_heap_buffer_destroy()
60 buffer->free(buffer); in dma_heap_buffer_destroy()
63 static void *dma_heap_buffer_vmap_get(struct heap_helper_buffer *buffer) in dma_heap_buffer_vmap_get() argument
67 if (buffer->vmap_cnt) { in dma_heap_buffer_vmap_get()
68 buffer->vmap_cnt++; in dma_heap_buffer_vmap_get()
69 return buffer->vaddr; in dma_heap_buffer_vmap_get()
71 vaddr = dma_heap_map_kernel(buffer); in dma_heap_buffer_vmap_get()
74 buffer->vaddr = vaddr; in dma_heap_buffer_vmap_get()
75 buffer->vmap_cnt++; in dma_heap_buffer_vmap_get()
79 static void dma_heap_buffer_vmap_put(struct heap_helper_buffer *buffer) in dma_heap_buffer_vmap_put() argument
81 if (!--buffer->vmap_cnt) { in dma_heap_buffer_vmap_put()
82 vunmap(buffer->vaddr); in dma_heap_buffer_vmap_put()
83 buffer->vaddr = NULL; in dma_heap_buffer_vmap_put()
97 struct heap_helper_buffer *buffer = dmabuf->priv; in dma_heap_attach() local
104 ret = sg_alloc_table_from_pages(&a->table, buffer->pages, in dma_heap_attach()
105 buffer->pagecount, 0, in dma_heap_attach()
106 buffer->pagecount << PAGE_SHIFT, in dma_heap_attach()
118 mutex_lock(&buffer->lock); in dma_heap_attach()
119 list_add(&a->list, &buffer->attachments); in dma_heap_attach()
120 mutex_unlock(&buffer->lock); in dma_heap_attach()
129 struct heap_helper_buffer *buffer = dmabuf->priv; in dma_heap_detach() local
131 mutex_lock(&buffer->lock); in dma_heap_detach()
133 mutex_unlock(&buffer->lock); in dma_heap_detach()
163 struct heap_helper_buffer *buffer = vma->vm_private_data; in dma_heap_vm_fault() local
165 if (vmf->pgoff > buffer->pagecount) in dma_heap_vm_fault()
168 vmf->page = buffer->pages[vmf->pgoff]; in dma_heap_vm_fault()
180 struct heap_helper_buffer *buffer = dmabuf->priv; in dma_heap_mmap() local
186 vma->vm_private_data = buffer; in dma_heap_mmap()
193 struct heap_helper_buffer *buffer = dmabuf->priv; in dma_heap_dma_buf_release() local
195 dma_heap_buffer_destroy(buffer); in dma_heap_dma_buf_release()
201 struct heap_helper_buffer *buffer = dmabuf->priv; in dma_heap_dma_buf_begin_cpu_access() local
205 mutex_lock(&buffer->lock); in dma_heap_dma_buf_begin_cpu_access()
207 if (buffer->vmap_cnt) in dma_heap_dma_buf_begin_cpu_access()
208 invalidate_kernel_vmap_range(buffer->vaddr, buffer->size); in dma_heap_dma_buf_begin_cpu_access()
210 list_for_each_entry(a, &buffer->attachments, list) { in dma_heap_dma_buf_begin_cpu_access()
214 mutex_unlock(&buffer->lock); in dma_heap_dma_buf_begin_cpu_access()
222 struct heap_helper_buffer *buffer = dmabuf->priv; in dma_heap_dma_buf_end_cpu_access() local
225 mutex_lock(&buffer->lock); in dma_heap_dma_buf_end_cpu_access()
227 if (buffer->vmap_cnt) in dma_heap_dma_buf_end_cpu_access()
228 flush_kernel_vmap_range(buffer->vaddr, buffer->size); in dma_heap_dma_buf_end_cpu_access()
230 list_for_each_entry(a, &buffer->attachments, list) { in dma_heap_dma_buf_end_cpu_access()
234 mutex_unlock(&buffer->lock); in dma_heap_dma_buf_end_cpu_access()
241 struct heap_helper_buffer *buffer = dmabuf->priv; in dma_heap_dma_buf_vmap() local
244 mutex_lock(&buffer->lock); in dma_heap_dma_buf_vmap()
245 vaddr = dma_heap_buffer_vmap_get(buffer); in dma_heap_dma_buf_vmap()
246 mutex_unlock(&buffer->lock); in dma_heap_dma_buf_vmap()
253 struct heap_helper_buffer *buffer = dmabuf->priv; in dma_heap_dma_buf_vunmap() local
255 mutex_lock(&buffer->lock); in dma_heap_dma_buf_vunmap()
256 dma_heap_buffer_vmap_put(buffer); in dma_heap_dma_buf_vunmap()
257 mutex_unlock(&buffer->lock); in dma_heap_dma_buf_vunmap()