#include <hal-common.h>
#include <hal-tbm-types.h>
#include <hal-tbm-interface.h>
+#include <linux/dma-buf.h>
#include "tbm_backend_log.h"
#define TBM_COLOR_FORMAT_COUNT 4
tbm_dumb_bo *bo_data = (tbm_dumb_bo *)bo;
hal_tbm_bo_handle bo_handle;
tbm_dumb_bufmgr *bufmgr_data;
+ struct dma_buf_sync sync = {0, };
if (!bo_data) {
if (error)
return (hal_tbm_bo_handle) NULL;
}
+ if (device == HAL_TBM_DEVICE_CPU) {
+ sync.flags |= DMA_BUF_SYNC_START;
+ if (opt & HAL_TBM_OPTION_READ)
+ sync.flags |= DMA_BUF_SYNC_READ;
+ else if (opt & HAL_TBM_OPTION_WRITE)
+ sync.flags |= DMA_BUF_SYNC_WRITE;
+
+ if (drmIoctl(bo_data->dmabuf, DMA_BUF_IOCTL_SYNC, &sync)) {
+ TBM_BACKEND_WRN("fail to DMA_BUF_IOCTL_SYNC bo_data:%p (%m)",
+ bo_data);
+ }
+ }
+
+ bo_data->device = device;
+ bo_data->opt = opt;
+
if (error)
*error = HAL_TBM_ERROR_NONE;
{
tbm_dumb_bo *bo_data = (tbm_dumb_bo *)bo;
tbm_dumb_bufmgr *bufmgr_data;
+ struct dma_buf_sync sync = {0, };
if (!bo_data)
return HAL_TBM_ERROR_INVALID_PARAMETER;
if (!bo_data->gem)
return HAL_TBM_ERROR_INVALID_PARAMETER;
+ if (bo_data->device == HAL_TBM_DEVICE_CPU) {
+ sync.flags |= DMA_BUF_SYNC_END;
+ if (bo_data->opt & HAL_TBM_OPTION_READ)
+ sync.flags |= DMA_BUF_SYNC_READ;
+ else if (bo_data->opt & HAL_TBM_OPTION_WRITE)
+ sync.flags |= DMA_BUF_SYNC_WRITE;
+
+ if (drmIoctl(bo_data->dmabuf, DMA_BUF_IOCTL_SYNC, &sync)) {
+ TBM_BACKEND_WRN("fail to DMA_BUF_IOCTL_SYNC bo_data:%p (%m)",
+ bo_data);
+ }
+ }
+
+ bo_data->device = 0;
+ bo_data->opt = 0;
+
TBM_BACKEND_DBG("bo_data:%p, gem:%d name:%d fd:%d",
bo_data,
bo_data->gem,