This patch is from product kernel.
Change-Id: Id6c8221c75b2bd715968df8fdd49d4b86f26a599
Signed-off-by: Jin-young Jeon <jy0.jeon@samsung.com>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
void (*gem_put_dma_addr)(struct drm_device *drm_dev,
struct device *dev, unsigned int gem_handle,
struct drm_file *filp);
+ void * (*gem_get_dma_buf)(struct drm_device *drm_dev,
+ struct device *dev, unsigned int gem_handle,
+ struct drm_file *filp);
#ifdef CONFIG_DRM_DMA_SYNC
unsigned gem_fence_context;
atomic_t gem_fence_seqno;
return 0;
}
+struct dma_buf *tbm_gem_get_dma_buf(struct drm_device *drm_dev,
+ struct device *dev, unsigned int gem_handle,
+ struct drm_file *filp)
+{
+ struct tgm_drv_private *dev_priv = drm_dev->dev_private;
+ struct tbm_private *tbm_priv = dev_priv->tbm_priv;
+ struct dma_buf *dma_buf = NULL;
+
+ if (tbm_priv->gem_get_dma_buf)
+ dma_buf = tbm_priv->gem_get_dma_buf(drm_dev, dev,
+ gem_handle, filp);
+
+ DRM_DEBUG("%s:h[%d]buf[%p]\n", __func__, gem_handle, dma_buf);
+
+ return dma_buf;
+}
+
int tbm_gem_object_unreference(struct drm_gem_object *obj)
{
DRM_DEBUG("%s:obj[%p]\n", __func__, obj);
struct drm_file *file);
int tbm_gem_cpu_fini_ioctl(struct drm_device *dev, void *data,
struct drm_file *file);
+struct dma_buf *tbm_gem_get_dma_buf(struct drm_device *drm_dev,
+ struct device *dev, unsigned int gem_handle,
+ struct drm_file *filp);
int tbm_gem_object_unreference(struct drm_gem_object *obj);
#endif /* _TBM_GEM_H_ */
drm_gem_object_unreference_unlocked(obj);
}
+void *tbm_gem_ion_get_dma_buf(struct drm_device *drm_dev,
+ struct device *dev, unsigned int gem_handle,
+ struct drm_file *filp)
+{
+ struct drm_gem_object *obj;
+
+ obj = drm_gem_object_lookup(drm_dev, filp, gem_handle);
+ if (!obj) {
+ DRM_ERROR("failed to lookup gem object.\n");
+ return ERR_PTR(-EINVAL);
+ }
+
+ DRM_DEBUG("%s:h[%d]obj[%p]buf[%p]\n", __func__, gem_handle,
+ obj, obj->dma_buf);
+ drm_gem_object_unreference_unlocked(obj);
+
+ return obj->dma_buf;
+}
+
struct dma_buf *tbm_gem_ion_prime_export(struct drm_device *dev,
struct drm_gem_object *obj, int flags)
{
tbm_priv->gem_bufer_dealloc = tbm_gem_ion_buffer_dealloc;
tbm_priv->gem_get_dma_addr = tbm_gem_ion_get_dma_addr;
tbm_priv->gem_put_dma_addr = tbm_gem_ion_put_dma_addr;
+#ifdef CONFIG_DRM_DMA_SYNC
+ tbm_priv->gem_get_dma_buf = tbm_gem_ion_get_dma_buf;
+#endif
return 0;
}