drm/exynos: add DRM_EXYNOS_GEM_MAP ioctl
The commit d931589c01 ("drm/exynos: remove DRM_EXYNOS_GEM_MAP_OFFSET
ioctl") removed it same with the ioctl that this patch adds. The reason
that removed DRM_EXYNOS_GEM_MAP_OFFSET was we could use
DRM_IOCTL_MODE_MAP_DUMB. Both did exactly same thing.
Now we again will revive it as DRM_EXYNOS_GEM_MAP because of render
node. DRM_IOCTL_MODE_MAP_DUMB isn't permitted in render node.
Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
This commit is contained in:
@@ -370,6 +370,8 @@ static const struct vm_operations_struct exynos_drm_gem_vm_ops = {
|
|||||||
static const struct drm_ioctl_desc exynos_ioctls[] = {
|
static const struct drm_ioctl_desc exynos_ioctls[] = {
|
||||||
DRM_IOCTL_DEF_DRV(EXYNOS_GEM_CREATE, exynos_drm_gem_create_ioctl,
|
DRM_IOCTL_DEF_DRV(EXYNOS_GEM_CREATE, exynos_drm_gem_create_ioctl,
|
||||||
DRM_AUTH | DRM_RENDER_ALLOW),
|
DRM_AUTH | DRM_RENDER_ALLOW),
|
||||||
|
DRM_IOCTL_DEF_DRV(EXYNOS_GEM_MAP, exynos_drm_gem_map_ioctl,
|
||||||
|
DRM_AUTH | DRM_RENDER_ALLOW),
|
||||||
DRM_IOCTL_DEF_DRV(EXYNOS_GEM_GET, exynos_drm_gem_get_ioctl,
|
DRM_IOCTL_DEF_DRV(EXYNOS_GEM_GET, exynos_drm_gem_get_ioctl,
|
||||||
DRM_RENDER_ALLOW),
|
DRM_RENDER_ALLOW),
|
||||||
DRM_IOCTL_DEF_DRV(EXYNOS_VIDI_CONNECTION, vidi_connection_ioctl,
|
DRM_IOCTL_DEF_DRV(EXYNOS_VIDI_CONNECTION, vidi_connection_ioctl,
|
||||||
|
|||||||
@@ -280,6 +280,15 @@ int exynos_drm_gem_create_ioctl(struct drm_device *dev, void *data,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int exynos_drm_gem_map_ioctl(struct drm_device *dev, void *data,
|
||||||
|
struct drm_file *file_priv)
|
||||||
|
{
|
||||||
|
struct drm_exynos_gem_map *args = data;
|
||||||
|
|
||||||
|
return exynos_drm_gem_dumb_map_offset(file_priv, dev, args->handle,
|
||||||
|
&args->offset);
|
||||||
|
}
|
||||||
|
|
||||||
dma_addr_t *exynos_drm_gem_get_dma_addr(struct drm_device *dev,
|
dma_addr_t *exynos_drm_gem_get_dma_addr(struct drm_device *dev,
|
||||||
unsigned int gem_handle,
|
unsigned int gem_handle,
|
||||||
struct drm_file *filp)
|
struct drm_file *filp)
|
||||||
|
|||||||
@@ -71,6 +71,10 @@ struct exynos_drm_gem *exynos_drm_gem_create(struct drm_device *dev,
|
|||||||
int exynos_drm_gem_create_ioctl(struct drm_device *dev, void *data,
|
int exynos_drm_gem_create_ioctl(struct drm_device *dev, void *data,
|
||||||
struct drm_file *file_priv);
|
struct drm_file *file_priv);
|
||||||
|
|
||||||
|
/* get fake-offset of gem object that can be used with mmap. */
|
||||||
|
int exynos_drm_gem_map_ioctl(struct drm_device *dev, void *data,
|
||||||
|
struct drm_file *file_priv);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* get dma address from gem handle and this function could be used for
|
* get dma address from gem handle and this function could be used for
|
||||||
* other drivers such as 2d/3d acceleration drivers.
|
* other drivers such as 2d/3d acceleration drivers.
|
||||||
|
|||||||
@@ -32,6 +32,19 @@ struct drm_exynos_gem_create {
|
|||||||
__u32 handle;
|
__u32 handle;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A structure for getting a fake-offset that can be used with mmap.
|
||||||
|
*
|
||||||
|
* @handle: handle of gem object.
|
||||||
|
* @reserved: just padding to be 64-bit aligned.
|
||||||
|
* @offset: a fake-offset of gem object.
|
||||||
|
*/
|
||||||
|
struct drm_exynos_gem_map {
|
||||||
|
__u32 handle;
|
||||||
|
__u32 reserved;
|
||||||
|
__u64 offset;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A structure to gem information.
|
* A structure to gem information.
|
||||||
*
|
*
|
||||||
@@ -284,6 +297,7 @@ struct drm_exynos_ipp_cmd_ctrl {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#define DRM_EXYNOS_GEM_CREATE 0x00
|
#define DRM_EXYNOS_GEM_CREATE 0x00
|
||||||
|
#define DRM_EXYNOS_GEM_MAP 0x01
|
||||||
/* Reserved 0x03 ~ 0x05 for exynos specific gem ioctl */
|
/* Reserved 0x03 ~ 0x05 for exynos specific gem ioctl */
|
||||||
#define DRM_EXYNOS_GEM_GET 0x04
|
#define DRM_EXYNOS_GEM_GET 0x04
|
||||||
#define DRM_EXYNOS_VIDI_CONNECTION 0x07
|
#define DRM_EXYNOS_VIDI_CONNECTION 0x07
|
||||||
@@ -301,7 +315,8 @@ struct drm_exynos_ipp_cmd_ctrl {
|
|||||||
|
|
||||||
#define DRM_IOCTL_EXYNOS_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + \
|
#define DRM_IOCTL_EXYNOS_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + \
|
||||||
DRM_EXYNOS_GEM_CREATE, struct drm_exynos_gem_create)
|
DRM_EXYNOS_GEM_CREATE, struct drm_exynos_gem_create)
|
||||||
|
#define DRM_IOCTL_EXYNOS_GEM_MAP DRM_IOWR(DRM_COMMAND_BASE + \
|
||||||
|
DRM_EXYNOS_GEM_MAP, struct drm_exynos_gem_map)
|
||||||
#define DRM_IOCTL_EXYNOS_GEM_GET DRM_IOWR(DRM_COMMAND_BASE + \
|
#define DRM_IOCTL_EXYNOS_GEM_GET DRM_IOWR(DRM_COMMAND_BASE + \
|
||||||
DRM_EXYNOS_GEM_GET, struct drm_exynos_gem_info)
|
DRM_EXYNOS_GEM_GET, struct drm_exynos_gem_info)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user