struct dma_buf_ops — operations possible on struct dma_buf
struct dma_buf_ops { int (* attach) (struct dma_buf *, struct device *,struct dma_buf_attachment *); void (* detach) (struct dma_buf *, struct dma_buf_attachment *); struct sg_table * (* map_dma_buf) (struct dma_buf_attachment *,enum dma_data_direction); void (* unmap_dma_buf) (struct dma_buf_attachment *,struct sg_table *,enum dma_data_direction); void (* release) (struct dma_buf *); int (* begin_cpu_access) (struct dma_buf *, enum dma_data_direction); int (* end_cpu_access) (struct dma_buf *, enum dma_data_direction); void *(* kmap_atomic) (struct dma_buf *, unsigned long); void (* kunmap_atomic) (struct dma_buf *, unsigned long, void *); void *(* kmap) (struct dma_buf *, unsigned long); void (* kunmap) (struct dma_buf *, unsigned long, void *); int (* mmap) (struct dma_buf *, struct vm_area_struct *vma); void *(* vmap) (struct dma_buf *); void (* vunmap) (struct dma_buf *, void *vaddr); };
[optional] allows different devices to 'attach' themselves to the given buffer. It might return -EBUSY to signal that backing storage is already allocated and incompatible with the requirements of requesting device.
[optional] detach a given device from this buffer.
returns list of scatter pages allocated, increases usecount of the buffer. Requires atleast one attach to be called before. Returned sg list should already be mapped into _device_ address space. This call may sleep. May also return -EINTR. Should return -EINVAL if attach hasn't been called yet.
decreases usecount of buffer, might deallocate scatter pages.
release this buffer; to be called after the last dma_buf_put.
[optional] called before cpu access to invalidate cpu caches and allocate backing storage (if not yet done) respectively pin the object into memory.
[optional] called after cpu access to flush caches.
maps a page from the buffer into kernel address space, users may not block until the subsequent unmap call. This callback must not sleep.
[optional] unmaps a atomically mapped page from the buffer. This Callback must not sleep.
maps a page from the buffer into kernel address space.
[optional] unmaps a page from the buffer.
used to expose the backing storage to userspace. Note that the mapping needs to be coherent - if the exporter doesn't directly support this, it needs to fake coherency by shooting down any ptes when transitioning away from the cpu domain.
[optional] creates a virtual mapping for the buffer into kernel address space. Same restrictions as for vmap and friends apply.
[optional] unmaps a vmap from the buffer