Lines Matching refs:heap
9 #include <linux/dma-heap.h>
21 #include <uapi/linux/dma-heap.h>
28 * struct dma_heap - represents a dmabuf heap in the system
30 * @ops: ops struct for this heap
31 * @heap_devt heap device node
33 * @heap_cdev heap char device
34 * @heap_dev heap device struct
36 * Represents a heap of memory from which buffers can be made.
79 struct dma_buf *dma_heap_buffer_alloc(struct dma_heap *heap, size_t len, unsigned int fd_flags, unsigned int heap_flags)
97 return heap->ops->allocate(heap, len, fd_flags, heap_flags);
101 int dma_heap_bufferfd_alloc(struct dma_heap *heap, size_t len, unsigned int fd_flags, unsigned int heap_flags)
106 dmabuf = dma_heap_buffer_alloc(heap, len, fd_flags, heap_flags);
122 struct dma_heap *heap;
124 heap = xa_load(&dma_heap_minors, iminor(inode));
125 if (!heap) {
131 file->private_data = heap;
140 struct dma_heap *heap = file->private_data;
147 fd = dma_heap_bufferfd_alloc(heap, heap_allocation->len, heap_allocation->fd_flags, heap_allocation->heap_flags);
235 * dma_heap_get_drvdata() - get per-subdriver data for the heap
236 * @heap: DMA-Heap to retrieve private data for
239 * The per-subdriver data for the heap.
241 void *dma_heap_get_drvdata(struct dma_heap *heap)
243 return heap->priv;
249 struct dma_heap *heap = container_of(ref, struct dma_heap, refcount);
250 int minor = MINOR(heap->heap_devt);
253 list_del(&heap->list);
255 device_destroy(dma_heap_class, heap->heap_devt);
256 cdev_del(&heap->heap_cdev);
259 kfree(heap);
275 * dma_heap_get_dev() - get device struct for the heap
276 * @heap: DMA-Heap to retrieve device struct from
279 * The device struct for the heap.
281 struct device *dma_heap_get_dev(struct dma_heap *heap)
283 return heap->heap_dev;
288 * dma_heap_get_name() - get heap name
289 * @heap: DMA-Heap to retrieve private data for
292 * The char* for the heap name.
294 const char *dma_heap_get_name(struct dma_heap *heap)
296 return heap->name;
302 struct dma_heap *heap, *err_ret;
307 pr_err("dma_heap: Cannot add heap without a name\n");
312 pr_err("dma_heap: Cannot add heap with invalid ops struct\n");
317 heap = dma_heap_find(exp_info->name);
318 if (heap) {
319 pr_err("dma_heap: Already registered heap named %s\n", exp_info->name);
320 dma_heap_put(heap);
324 heap = kzalloc(sizeof(*heap), GFP_KERNEL);
325 if (!heap) {
329 kref_init(&heap->refcount);
330 heap->name = exp_info->name;
331 heap->ops = exp_info->ops;
332 heap->priv = exp_info->priv;
335 ret = xa_alloc(&dma_heap_minors, &minor, heap, XA_LIMIT(0, NUM_HEAP_MINORS - 1), GFP_KERNEL);
337 pr_err("dma_heap: Unable to get minor number for heap\n");
343 heap->heap_devt = MKDEV(MAJOR(dma_heap_devt), minor);
345 cdev_init(&heap->heap_cdev, &dma_heap_fops);
346 ret = cdev_add(&heap->heap_cdev, heap->heap_devt, 1);
353 heap->heap_dev = device_create(dma_heap_class, NULL, heap->heap_devt, NULL, heap->name);
354 if (IS_ERR(heap->heap_dev)) {
356 err_ret = ERR_CAST(heap->heap_dev);
361 heap->heap_dev = get_device(heap->heap_dev);
363 /* Add heap to the list */
365 list_add(&heap->list, &heap_list);
368 return heap;
371 cdev_del(&heap->heap_cdev);
375 kfree(heap);
387 struct dma_heap *heap;
391 list_for_each_entry(heap, &heap_list, list)
393 if (heap->ops->get_pool_size) {
394 total_pool_size += heap->ops->get_pool_size(heap);