Skip to content

Commit

Permalink
drm/msm: rework GEM_INFO ioctl
Browse files Browse the repository at this point in the history
Prep work to add a way to get/set the GEM objects debug name.

Signed-off-by: Rob Clark <[email protected]>
  • Loading branch information
robclark committed Dec 11, 2018
1 parent 7a93d5c commit 789d2e5
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 14 deletions.
28 changes: 19 additions & 9 deletions drivers/gpu/drm/msm/msm_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -882,21 +882,31 @@ static int msm_ioctl_gem_info(struct drm_device *dev, void *data,
struct drm_gem_object *obj;
int ret = 0;

if (args->flags & ~MSM_INFO_FLAGS)
if (args->pad)
return -EINVAL;

switch (args->info) {
case MSM_INFO_GET_OFFSET:
case MSM_INFO_GET_IOVA:
/* value returned as immediate, not pointer, so len==0: */
if (args->len)
return -EINVAL;
break;
default:
return -EINVAL;
}

obj = drm_gem_object_lookup(file, args->handle);
if (!obj)
return -ENOENT;

if (args->flags & MSM_INFO_IOVA) {
uint64_t iova;

ret = msm_ioctl_gem_info_iova(dev, obj, &iova);
if (!ret)
args->offset = iova;
} else {
args->offset = msm_gem_mmap_offset(obj);
switch (args->info) {
case MSM_INFO_GET_OFFSET:
args->value = msm_gem_mmap_offset(obj);
break;
case MSM_INFO_GET_IOVA:
ret = msm_ioctl_gem_info_iova(dev, obj, &args->value);
break;
}

drm_gem_object_put_unlocked(obj);
Expand Down
18 changes: 13 additions & 5 deletions include/uapi/drm/msm_drm.h
Original file line number Diff line number Diff line change
Expand Up @@ -105,14 +105,22 @@ struct drm_msm_gem_new {
__u32 handle; /* out */
};

#define MSM_INFO_IOVA 0x01

#define MSM_INFO_FLAGS (MSM_INFO_IOVA)
/* Get or set GEM buffer info. The requested value can be passed
* directly in 'value', or for data larger than 64b 'value' is a
* pointer to userspace buffer, with 'len' specifying the number of
* bytes copied into that buffer. For info returned by pointer,
* calling the GEM_INFO ioctl with null 'value' will return the
* required buffer size in 'len'
*/
#define MSM_INFO_GET_OFFSET 0x00 /* get mmap() offset, returned by value */
#define MSM_INFO_GET_IOVA 0x01 /* get iova, returned by value */

struct drm_msm_gem_info {
__u32 handle; /* in */
__u32 flags; /* in - combination of MSM_INFO_* flags */
__u64 offset; /* out, mmap() offset or iova */
__u32 info; /* in - one of MSM_INFO_* */
__u64 value; /* in or out */
__u32 len; /* in or out */
__u32 pad;
};

#define MSM_PREP_READ 0x01
Expand Down

0 comments on commit 789d2e5

Please sign in to comment.