From 4ac36e605ab65e9253f932f43787406b79070933 Mon Sep 17 00:00:00 2001 From: Maarten Lankhorst Date: Wed, 4 Oct 2017 18:28:21 +0200 Subject: lib/igt_kms: Add igt_$obj_get_prop functions Some tests need to get the current kernel value for properties as part of the test. Add get_prop functions that will retrieve the current kernel value. Signed-off-by: Maarten Lankhorst Reviewed-by: Mika Kahola --- lib/igt_kms.c | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ lib/igt_kms.h | 24 ++++++++++++++++++ 2 files changed, 105 insertions(+) diff --git a/lib/igt_kms.c b/lib/igt_kms.c index 339c1184..176e6825 100644 --- a/lib/igt_kms.c +++ b/lib/igt_kms.c @@ -2407,6 +2407,51 @@ static int igt_output_commit(igt_output_t *output, return 0; } +static uint64_t igt_mode_object_get_prop(igt_display_t *display, + uint32_t object_type, + uint32_t object_id, + uint32_t prop) +{ + drmModeObjectPropertiesPtr proplist; + bool found = false; + int i; + uint64_t ret; + + proplist = drmModeObjectGetProperties(display->drm_fd, object_id, object_type); + for (i = 0; i < proplist->count_props; i++) { + if (proplist->props[i] != prop) + continue; + + found = true; + break; + } + + igt_assert(found); + + ret = proplist->prop_values[i]; + + drmModeFreeObjectProperties(proplist); + return ret; +} + +/** + * igt_plane_get_prop - Return current value on a plane for a given property. + * + * @plane: Target plane. + * @prop: Property to check. + * + * Returns: The value the property is set to, if this + * is a blob, the blob id is returned. This can be passed + * to drmModeGetPropertyBlob() to get the contents of the blob. + */ +uint64_t igt_plane_get_prop(igt_plane_t *plane, enum igt_atomic_plane_properties prop) +{ + igt_assert(igt_plane_has_prop(plane, prop)); + + return igt_mode_object_get_prop(plane->pipe->display, DRM_MODE_OBJECT_PLANE, + plane->drm_plane->plane_id, plane->props[prop]); +} + /** * igt_plane_replace_prop_blob: * @plane: plane to set property on. @@ -2439,6 +2484,24 @@ igt_plane_replace_prop_blob(igt_plane_t *plane, enum igt_atomic_plane_properties igt_plane_set_prop_changed(plane, prop); } +/** + * igt_output_get_prop - Return current value on an output for a given property. + * + * @output: Target output. + * @prop: Property to return. + * + * Returns: The value the property is set to, if this + * is a blob, the blob id is returned. This can be passed + * to drmModeGetPropertyBlob() to get the contents of the blob. + */ +uint64_t igt_output_get_prop(igt_output_t *output, enum igt_atomic_connector_properties prop) +{ + igt_assert(igt_output_has_prop(output, prop)); + + return igt_mode_object_get_prop(output->display, DRM_MODE_OBJECT_CONNECTOR, + output->id, output->props[prop]); +} + /** * igt_output_replace_prop_blob: * @output: output to set property on. @@ -2471,6 +2534,24 @@ igt_output_replace_prop_blob(igt_output_t *output, enum igt_atomic_connector_pro igt_output_set_prop_changed(output, prop); } +/** + * igt_pipe_obj_get_prop - Return current value on a pipe for a given property. + * + * @pipe: Target pipe. + * @prop: Property to return. + * + * Returns: The value the property is set to, if this + * is a blob, the blob id is returned. This can be passed + * to drmModeGetPropertyBlob() to get the contents of the blob. + */ +uint64_t igt_pipe_obj_get_prop(igt_pipe_t *pipe, enum igt_atomic_crtc_properties prop) +{ + igt_assert(igt_pipe_obj_has_prop(pipe, prop)); + + return igt_mode_object_get_prop(pipe->display, DRM_MODE_OBJECT_CRTC, + pipe->crtc_id, pipe->props[prop]); +} + /** * igt_pipe_obj_replace_prop_blob: * @pipe: pipe to set property on. diff --git a/lib/igt_kms.h b/lib/igt_kms.h index 916cd359..fda94cb6 100644 --- a/lib/igt_kms.h +++ b/lib/igt_kms.h @@ -503,6 +503,8 @@ igt_plane_has_prop(igt_plane_t *plane, enum igt_atomic_plane_properties prop) return plane->props[prop]; } +uint64_t igt_plane_get_prop(igt_plane_t *plane, enum igt_atomic_plane_properties prop); + #define igt_plane_is_prop_changed(plane, prop) \ (!!((plane)->changed & (1 << (prop)))) @@ -536,6 +538,8 @@ igt_output_has_prop(igt_output_t *output, enum igt_atomic_connector_properties p return output->props[prop]; } +uint64_t igt_output_get_prop(igt_output_t *output, enum igt_atomic_connector_properties prop); + #define igt_output_is_prop_changed(output, prop) \ (!!((output)->changed & (1 << (prop)))) #define igt_output_set_prop_changed(output, prop) \ @@ -568,6 +572,26 @@ igt_pipe_obj_has_prop(igt_pipe_t *pipe, enum igt_atomic_crtc_properties prop) return pipe->props[prop]; } +uint64_t igt_pipe_obj_get_prop(igt_pipe_t *pipe, enum igt_atomic_crtc_properties prop); + +/** + * igt_pipe_get_prop - Return current value on a pipe for a given property. + * + * @display: Pointer to display. + * @pipe: Target pipe. + * @prop: Property to return. + * + * Returns: The value the property is set to, if this + * is a blob, the blob id is returned. This can be passed + * to drmModeGetPropertyBlob() to get the contents of the blob. + */ +static inline uint64_t +igt_pipe_get_prop(igt_display_t *display, enum pipe pipe, + enum igt_atomic_crtc_properties prop) +{ + return igt_pipe_obj_get_prop(&display->pipes[pipe], prop); +} + /** * igt_pipe_has_prop - Check whether pipe supports a given property. * -- cgit v1.2.3