Add a few more useful helpers to find mode objects.

Signed-off-by: Rob Clark <robdclark at gmail.com>
---
 drivers/gpu/drm/drm_crtc.c | 97 ++++++++++++++--------------------------------
 include/drm/drm_crtc.h     | 33 ++++++++++++++++
 2 files changed, 63 insertions(+), 67 deletions(-)

diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index 6d7138d..2fb56fd 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -1949,7 +1949,6 @@ int drm_mode_getcrtc(struct drm_device *dev,
 {
        struct drm_mode_crtc *crtc_resp = data;
        struct drm_crtc *crtc;
-       struct drm_mode_object *obj;
        int ret = 0;

        if (!drm_core_check_feature(dev, DRIVER_MODESET))
@@ -1957,13 +1956,11 @@ int drm_mode_getcrtc(struct drm_device *dev,

        drm_modeset_lock_all(dev);

-       obj = drm_mode_object_find(dev, crtc_resp->crtc_id,
-                                  DRM_MODE_OBJECT_CRTC);
-       if (!obj) {
+       crtc = drm_crtc_find(dev, crtc_resp->crtc_id);
+       if (!crtc) {
                ret = -ENOENT;
                goto out;
        }
-       crtc = obj_to_crtc(obj);

        crtc_resp->x = crtc->x;
        crtc_resp->y = crtc->y;
@@ -2017,7 +2014,6 @@ int drm_mode_getconnector(struct drm_device *dev, void 
*data,
                          struct drm_file *file_priv)
 {
        struct drm_mode_get_connector *out_resp = data;
-       struct drm_mode_object *obj;
        struct drm_connector *connector;
        struct drm_display_mode *mode;
        int mode_count = 0;
@@ -2041,13 +2037,11 @@ int drm_mode_getconnector(struct drm_device *dev, void 
*data,

        mutex_lock(&dev->mode_config.mutex);

-       obj = drm_mode_object_find(dev, out_resp->connector_id,
-                                  DRM_MODE_OBJECT_CONNECTOR);
-       if (!obj) {
+       connector = drm_connector_find(dev, out_resp->connector_id);
+       if (!connector) {
                ret = -ENOENT;
                goto out;
        }
-       connector = obj_to_connector(obj);

        props_count = connector->properties.count;

@@ -2149,7 +2143,6 @@ int drm_mode_getencoder(struct drm_device *dev, void 
*data,
                        struct drm_file *file_priv)
 {
        struct drm_mode_get_encoder *enc_resp = data;
-       struct drm_mode_object *obj;
        struct drm_encoder *encoder;
        int ret = 0;

@@ -2157,13 +2150,11 @@ int drm_mode_getencoder(struct drm_device *dev, void 
*data,
                return -EINVAL;

        drm_modeset_lock_all(dev);
-       obj = drm_mode_object_find(dev, enc_resp->encoder_id,
-                                  DRM_MODE_OBJECT_ENCODER);
-       if (!obj) {
+       encoder = drm_encoder_find(dev, enc_resp->encoder_id);
+       if (!encoder) {
                ret = -ENOENT;
                goto out;
        }
-       encoder = obj_to_encoder(obj);

        if (encoder->crtc)
                enc_resp->crtc_id = encoder->crtc->base.id;
@@ -2252,7 +2243,6 @@ int drm_mode_getplane(struct drm_device *dev, void *data,
                        struct drm_file *file_priv)
 {
        struct drm_mode_get_plane *plane_resp = data;
-       struct drm_mode_object *obj;
        struct drm_plane *plane;
        uint32_t __user *format_ptr;
        int ret = 0;
@@ -2261,13 +2251,11 @@ int drm_mode_getplane(struct drm_device *dev, void 
*data,
                return -EINVAL;

        drm_modeset_lock_all(dev);
-       obj = drm_mode_object_find(dev, plane_resp->plane_id,
-                                  DRM_MODE_OBJECT_PLANE);
-       if (!obj) {
+       plane = drm_plane_find(dev, plane_resp->plane_id);
+       if (!plane) {
                ret = -ENOENT;
                goto out;
        }
-       plane = obj_to_plane(obj);

        if (plane->crtc)
                plane_resp->crtc_id = plane->crtc->base.id;
@@ -2317,7 +2305,6 @@ int drm_mode_setplane(struct drm_device *dev, void *data,
                        struct drm_file *file_priv)
 {
        struct drm_mode_set_plane *plane_req = data;
-       struct drm_mode_object *obj;
        struct drm_plane *plane;
        struct drm_crtc *crtc;
        struct drm_framebuffer *fb = NULL, *old_fb = NULL;
@@ -2332,14 +2319,12 @@ int drm_mode_setplane(struct drm_device *dev, void 
*data,
         * First, find the plane, crtc, and fb objects.  If not available,
         * we don't bother to call the driver.
         */
-       obj = drm_mode_object_find(dev, plane_req->plane_id,
-                                  DRM_MODE_OBJECT_PLANE);
-       if (!obj) {
+       plane = drm_plane_find(dev, plane_req->plane_id);
+       if (!plane) {
                DRM_DEBUG_KMS("Unknown plane ID %d\n",
                              plane_req->plane_id);
                return -ENOENT;
        }
-       plane = obj_to_plane(obj);

        /* No fb means shut it down */
        if (!plane_req->fb_id) {
@@ -2352,15 +2337,13 @@ int drm_mode_setplane(struct drm_device *dev, void 
*data,
                goto out;
        }

-       obj = drm_mode_object_find(dev, plane_req->crtc_id,
-                                  DRM_MODE_OBJECT_CRTC);
-       if (!obj) {
+       crtc = drm_crtc_find(dev, plane_req->crtc_id);
+       if (!crtc) {
                DRM_DEBUG_KMS("Unknown crtc ID %d\n",
                              plane_req->crtc_id);
                ret = -ENOENT;
                goto out;
        }
-       crtc = obj_to_crtc(obj);

        fb = drm_framebuffer_lookup(dev, plane_req->fb_id);
        if (!fb) {
@@ -2502,7 +2485,6 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
 {
        struct drm_mode_config *config = &dev->mode_config;
        struct drm_mode_crtc *crtc_req = data;
-       struct drm_mode_object *obj;
        struct drm_crtc *crtc;
        struct drm_connector **connector_set = NULL, *connector;
        struct drm_framebuffer *fb = NULL;
@@ -2520,14 +2502,12 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
                return -ERANGE;

        drm_modeset_lock_all(dev);
-       obj = drm_mode_object_find(dev, crtc_req->crtc_id,
-                                  DRM_MODE_OBJECT_CRTC);
-       if (!obj) {
+       crtc = drm_crtc_find(dev, crtc_req->crtc_id);
+       if (!crtc) {
                DRM_DEBUG_KMS("Unknown CRTC ID %d\n", crtc_req->crtc_id);
                ret = -ENOENT;
                goto out;
        }
-       crtc = obj_to_crtc(obj);
        DRM_DEBUG_KMS("[CRTC:%d]\n", crtc->base.id);

        if (crtc_req->mode_valid) {
@@ -2610,15 +2590,13 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
                                goto out;
                        }

-                       obj = drm_mode_object_find(dev, out_id,
-                                                  DRM_MODE_OBJECT_CONNECTOR);
-                       if (!obj) {
+                       connector = drm_connector_find(dev, out_id);
+                       if (!connector) {
                                DRM_DEBUG_KMS("Connector id %d unknown\n",
                                                out_id);
                                ret = -ENOENT;
                                goto out;
                        }
-                       connector = obj_to_connector(obj);
                        DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n",
                                        connector->base.id,
                                        drm_get_connector_name(connector));
@@ -2650,7 +2628,6 @@ static int drm_mode_cursor_common(struct drm_device *dev,
                                  struct drm_mode_cursor2 *req,
                                  struct drm_file *file_priv)
 {
-       struct drm_mode_object *obj;
        struct drm_crtc *crtc;
        int ret = 0;

@@ -2660,12 +2637,11 @@ static int drm_mode_cursor_common(struct drm_device 
*dev,
        if (!req->flags || (~DRM_MODE_CURSOR_FLAGS & req->flags))
                return -EINVAL;

-       obj = drm_mode_object_find(dev, req->crtc_id, DRM_MODE_OBJECT_CRTC);
-       if (!obj) {
+       crtc = drm_crtc_find(dev, req->crtc_id);
+       if (!crtc) {
                DRM_DEBUG_KMS("Unknown CRTC ID %d\n", req->crtc_id);
                return -ENOENT;
        }
-       crtc = obj_to_crtc(obj);

        drm_modeset_lock(&crtc->mutex, NULL);
        if (req->flags & DRM_MODE_CURSOR_BO) {
@@ -3460,7 +3436,6 @@ EXPORT_SYMBOL(drm_object_property_get_value);
 int drm_mode_getproperty_ioctl(struct drm_device *dev,
                               void *data, struct drm_file *file_priv)
 {
-       struct drm_mode_object *obj;
        struct drm_mode_get_property *out_resp = data;
        struct drm_property *property;
        int enum_count = 0;
@@ -3479,12 +3454,11 @@ int drm_mode_getproperty_ioctl(struct drm_device *dev,
                return -EINVAL;

        drm_modeset_lock_all(dev);
-       obj = drm_mode_object_find(dev, out_resp->prop_id, 
DRM_MODE_OBJECT_PROPERTY);
-       if (!obj) {
+       property = drm_property_find(dev, out_resp->prop_id);
+       if (!property) {
                ret = -ENOENT;
                goto done;
        }
-       property = obj_to_property(obj);

        if (drm_property_type_is(property, DRM_MODE_PROP_ENUM) ||
                        drm_property_type_is(property, DRM_MODE_PROP_BITMASK)) {
@@ -3600,7 +3574,6 @@ static void drm_property_destroy_blob(struct drm_device 
*dev,
 int drm_mode_getblob_ioctl(struct drm_device *dev,
                           void *data, struct drm_file *file_priv)
 {
-       struct drm_mode_object *obj;
        struct drm_mode_get_blob *out_resp = data;
        struct drm_property_blob *blob;
        int ret = 0;
@@ -3610,12 +3583,11 @@ int drm_mode_getblob_ioctl(struct drm_device *dev,
                return -EINVAL;

        drm_modeset_lock_all(dev);
-       obj = drm_mode_object_find(dev, out_resp->blob_id, 
DRM_MODE_OBJECT_BLOB);
-       if (!obj) {
+       blob = drm_property_blob_find(dev, out_resp->blob_id);
+       if (!blob) {
                ret = -ENOENT;
                goto done;
        }
-       blob = obj_to_blob(obj);

        if (out_resp->length == blob->length) {
                blob_ptr = (void __user *)(unsigned long)out_resp->data;
@@ -3796,7 +3768,6 @@ static int drm_mode_set_obj_prop_id(struct drm_device 
*dev, void *state,
                uint32_t prop_id, uint64_t value, void *blob_data)
 {
        struct drm_mode_object *arg_obj;
-       struct drm_mode_object *prop_obj;
        struct drm_property *property;
        int i;

@@ -3813,11 +3784,9 @@ static int drm_mode_set_obj_prop_id(struct drm_device 
*dev, void *state,
        if (i == arg_obj->properties->count)
                return -EINVAL;

-       prop_obj = drm_mode_object_find(dev, prop_id,
-                                       DRM_MODE_OBJECT_PROPERTY);
-       if (!prop_obj)
+       property = drm_property_find(dev, prop_id);
+       if (!property)
                return -ENOENT;
-       property = obj_to_property(prop_obj);

        return drm_mode_set_obj_prop(arg_obj, state, property, 
                        value, blob_data);
@@ -3965,7 +3934,6 @@ int drm_mode_gamma_set_ioctl(struct drm_device *dev,
                             void *data, struct drm_file *file_priv)
 {
        struct drm_mode_crtc_lut *crtc_lut = data;
-       struct drm_mode_object *obj;
        struct drm_crtc *crtc;
        void *r_base, *g_base, *b_base;
        int size;
@@ -3975,12 +3943,11 @@ int drm_mode_gamma_set_ioctl(struct drm_device *dev,
                return -EINVAL;

        drm_modeset_lock_all(dev);
-       obj = drm_mode_object_find(dev, crtc_lut->crtc_id, 
DRM_MODE_OBJECT_CRTC);
-       if (!obj) {
+       crtc = drm_crtc_find(dev, crtc_lut->crtc_id);
+       if (!crtc) {
                ret = -ENOENT;
                goto out;
        }
-       crtc = obj_to_crtc(obj);

        if (crtc->funcs->gamma_set == NULL) {
                ret = -ENOSYS;
@@ -4024,7 +3991,6 @@ int drm_mode_gamma_get_ioctl(struct drm_device *dev,
                             void *data, struct drm_file *file_priv)
 {
        struct drm_mode_crtc_lut *crtc_lut = data;
-       struct drm_mode_object *obj;
        struct drm_crtc *crtc;
        void *r_base, *g_base, *b_base;
        int size;
@@ -4034,12 +4000,11 @@ int drm_mode_gamma_get_ioctl(struct drm_device *dev,
                return -EINVAL;

        drm_modeset_lock_all(dev);
-       obj = drm_mode_object_find(dev, crtc_lut->crtc_id, 
DRM_MODE_OBJECT_CRTC);
-       if (!obj) {
+       crtc = drm_crtc_find(dev, crtc_lut->crtc_id);
+       if (!crtc) {
                ret = -ENOENT;
                goto out;
        }
-       crtc = obj_to_crtc(obj);

        /* memcpy into gamma store */
        if (crtc_lut->gamma_size != crtc->gamma_size) {
@@ -4074,7 +4039,6 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev,
                             void *data, struct drm_file *file_priv)
 {
        struct drm_mode_crtc_page_flip *page_flip = data;
-       struct drm_mode_object *obj;
        struct drm_crtc *crtc;
        struct drm_framebuffer *fb = NULL, *old_fb = NULL;
        struct drm_pending_vblank_event *e = NULL;
@@ -4088,10 +4052,9 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev,
        if ((page_flip->flags & DRM_MODE_PAGE_FLIP_ASYNC) && 
!dev->mode_config.async_page_flip)
                return -EINVAL;

-       obj = drm_mode_object_find(dev, page_flip->crtc_id, 
DRM_MODE_OBJECT_CRTC);
-       if (!obj)
+       crtc = drm_crtc_find(dev, page_flip->crtc_id);
+       if (!crtc)
                return -ENOENT;
-       crtc = obj_to_crtc(obj);

        drm_modeset_lock(&crtc->mutex, NULL);
        if (crtc->primary->fb == NULL) {
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index 710b91b..c15af13 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -1386,6 +1386,15 @@ extern int drm_format_vert_chroma_subsampling(uint32_t 
format);
 extern const char *drm_get_format_name(uint32_t format);

 /* Helpers */
+
+static inline struct drm_plane *drm_plane_find(struct drm_device *dev,
+               uint32_t id)
+{
+       struct drm_mode_object *mo;
+       mo = drm_mode_object_find(dev, id, DRM_MODE_OBJECT_PLANE);
+       return mo ? obj_to_plane(mo) : NULL;
+}
+
 static inline struct drm_crtc *drm_crtc_find(struct drm_device *dev,
        uint32_t id)
 {
@@ -1402,4 +1411,28 @@ static inline struct drm_encoder 
*drm_encoder_find(struct drm_device *dev,
        return mo ? obj_to_encoder(mo) : NULL;
 }

+static inline struct drm_connector *drm_connector_find(struct drm_device *dev,
+               uint32_t id)
+{
+       struct drm_mode_object *mo;
+       mo = drm_mode_object_find(dev, id, DRM_MODE_OBJECT_CONNECTOR);
+       return mo ? obj_to_connector(mo) : NULL;
+}
+
+static inline struct drm_property *drm_property_find(struct drm_device *dev,
+               uint32_t id)
+{
+       struct drm_mode_object *mo;
+       mo = drm_mode_object_find(dev, id, DRM_MODE_OBJECT_PROPERTY);
+       return mo ? obj_to_property(mo) : NULL;
+}
+
+static inline struct drm_property_blob *
+drm_property_blob_find(struct drm_device *dev, uint32_t id)
+{
+       struct drm_mode_object *mo;
+       mo = drm_mode_object_find(dev, id, DRM_MODE_OBJECT_BLOB);
+       return mo ? obj_to_blob(mo) : NULL;
+}
+
 #endif /* __DRM_CRTC_H__ */
-- 
1.8.5.3

Reply via email to