Message ID | 1400956226-28053-7-git-send-email-robdclark@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Sat, May 24, 2014 at 02:30:15PM -0400, Rob Clark wrote: > Add a few more useful helpers to find mode objects. > > Signed-off-by: Rob Clark <robdclark@gmail.com> There's a pile more in drivers for these. I like this, but imo we should also convert drivers while at it. Also, docbook is missing. And since it's a cleanup I think it's better to do this first, directly on top of drm-next. The patch itself looks good. -Daniel > --- > 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 fa86fba..bd12185 100644 > --- a/drivers/gpu/drm/drm_crtc.c > +++ b/drivers/gpu/drm/drm_crtc.c > @@ -1736,7 +1736,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)) > @@ -1744,13 +1743,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; > @@ -1804,7 +1801,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; > @@ -1828,13 +1824,11 @@ int drm_mode_getconnector(struct drm_device *dev, void *data, > > drm_modeset_lock(&dev->mode_config.mutex, NULL); > > - 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; > > @@ -1949,7 +1943,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; > > @@ -1957,13 +1950,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; > @@ -2061,7 +2052,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; > @@ -2070,13 +2060,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; > @@ -2129,7 +2117,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; > @@ -2144,14 +2131,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) { > @@ -2168,15 +2153,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) { > @@ -2363,7 +2346,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; > @@ -2381,14 +2363,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) { > @@ -2471,15 +2451,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)); > @@ -2511,7 +2489,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; > > @@ -2521,12 +2498,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) { > @@ -3522,7 +3498,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; > @@ -3541,12 +3516,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)) { > @@ -3676,7 +3650,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; > @@ -3686,12 +3659,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; > @@ -3898,7 +3870,6 @@ static int drm_mode_set_obj_prop_id(struct drm_device *dev, > 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; > > @@ -3915,11 +3886,9 @@ static int drm_mode_set_obj_prop_id(struct drm_device *dev, > 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); > @@ -4126,7 +4095,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; > @@ -4136,12 +4104,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; > @@ -4200,7 +4167,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; > @@ -4210,12 +4176,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) { > @@ -4268,7 +4233,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; > @@ -4282,10 +4246,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 cd4a61a..b940a29 100644 > --- a/include/drm/drm_crtc.h > +++ b/include/drm/drm_crtc.h > @@ -1112,6 +1112,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) > { > @@ -1128,6 +1137,30 @@ 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; > +} > + > /* Plane list iterator for legacy (overlay only) planes. */ > #define drm_for_each_legacy_plane(plane, planelist) \ > list_for_each_entry(plane, planelist, head) \ > -- > 1.9.0 >
On Mon, May 26, 2014 at 10:37 AM, Daniel Vetter <daniel@ffwll.ch> wrote: > On Sat, May 24, 2014 at 02:30:15PM -0400, Rob Clark wrote: >> Add a few more useful helpers to find mode objects. >> >> Signed-off-by: Rob Clark <robdclark@gmail.com> > > There's a pile more in drivers for these. I like this, but imo we should > also convert drivers while at it. Also, docbook is missing. And since it's > a cleanup I think it's better to do this first, directly on top of > drm-next. The patch itself looks good. Aside: This is a pretty perfect case for coccinelle since it'll match object_find users no matter how crazily they're split up. And you can remove the unused local variable with it too (but that part is a bit more fuzz). -Daniel
On Mon, May 26, 2014 at 4:37 AM, Daniel Vetter <daniel@ffwll.ch> wrote: > On Sat, May 24, 2014 at 02:30:15PM -0400, Rob Clark wrote: >> Add a few more useful helpers to find mode objects. >> >> Signed-off-by: Rob Clark <robdclark@gmail.com> > > There's a pile more in drivers for these. I like this, but imo we should > also convert drivers while at it. Also, docbook is missing. And since it's > a cleanup I think it's better to do this first, directly on top of > drm-next. The patch itself looks good. Yeah, the intent was to go back and add missing docbook as follow-up patches, to try to get this into a shape where it could be merged earlier. I can have a go at coccinelle too for follow-up patches. BR, -R > -Daniel > >> --- >> 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 fa86fba..bd12185 100644 >> --- a/drivers/gpu/drm/drm_crtc.c >> +++ b/drivers/gpu/drm/drm_crtc.c >> @@ -1736,7 +1736,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)) >> @@ -1744,13 +1743,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; >> @@ -1804,7 +1801,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; >> @@ -1828,13 +1824,11 @@ int drm_mode_getconnector(struct drm_device *dev, void *data, >> >> drm_modeset_lock(&dev->mode_config.mutex, NULL); >> >> - 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; >> >> @@ -1949,7 +1943,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; >> >> @@ -1957,13 +1950,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; >> @@ -2061,7 +2052,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; >> @@ -2070,13 +2060,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; >> @@ -2129,7 +2117,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; >> @@ -2144,14 +2131,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) { >> @@ -2168,15 +2153,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) { >> @@ -2363,7 +2346,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; >> @@ -2381,14 +2363,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) { >> @@ -2471,15 +2451,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)); >> @@ -2511,7 +2489,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; >> >> @@ -2521,12 +2498,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) { >> @@ -3522,7 +3498,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; >> @@ -3541,12 +3516,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)) { >> @@ -3676,7 +3650,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; >> @@ -3686,12 +3659,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; >> @@ -3898,7 +3870,6 @@ static int drm_mode_set_obj_prop_id(struct drm_device *dev, >> 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; >> >> @@ -3915,11 +3886,9 @@ static int drm_mode_set_obj_prop_id(struct drm_device *dev, >> 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); >> @@ -4126,7 +4095,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; >> @@ -4136,12 +4104,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; >> @@ -4200,7 +4167,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; >> @@ -4210,12 +4176,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) { >> @@ -4268,7 +4233,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; >> @@ -4282,10 +4246,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 cd4a61a..b940a29 100644 >> --- a/include/drm/drm_crtc.h >> +++ b/include/drm/drm_crtc.h >> @@ -1112,6 +1112,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) >> { >> @@ -1128,6 +1137,30 @@ 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; >> +} >> + >> /* Plane list iterator for legacy (overlay only) planes. */ >> #define drm_for_each_legacy_plane(plane, planelist) \ >> list_for_each_entry(plane, planelist, head) \ >> -- >> 1.9.0 >> > > -- > Daniel Vetter > Software Engineer, Intel Corporation > +41 (0) 79 365 57 48 - http://blog.ffwll.ch
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index fa86fba..bd12185 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -1736,7 +1736,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)) @@ -1744,13 +1743,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; @@ -1804,7 +1801,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; @@ -1828,13 +1824,11 @@ int drm_mode_getconnector(struct drm_device *dev, void *data, drm_modeset_lock(&dev->mode_config.mutex, NULL); - 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; @@ -1949,7 +1943,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; @@ -1957,13 +1950,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; @@ -2061,7 +2052,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; @@ -2070,13 +2060,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; @@ -2129,7 +2117,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; @@ -2144,14 +2131,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) { @@ -2168,15 +2153,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) { @@ -2363,7 +2346,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; @@ -2381,14 +2363,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) { @@ -2471,15 +2451,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)); @@ -2511,7 +2489,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; @@ -2521,12 +2498,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) { @@ -3522,7 +3498,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; @@ -3541,12 +3516,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)) { @@ -3676,7 +3650,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; @@ -3686,12 +3659,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; @@ -3898,7 +3870,6 @@ static int drm_mode_set_obj_prop_id(struct drm_device *dev, 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; @@ -3915,11 +3886,9 @@ static int drm_mode_set_obj_prop_id(struct drm_device *dev, 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); @@ -4126,7 +4095,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; @@ -4136,12 +4104,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; @@ -4200,7 +4167,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; @@ -4210,12 +4176,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) { @@ -4268,7 +4233,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; @@ -4282,10 +4246,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 cd4a61a..b940a29 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h @@ -1112,6 +1112,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) { @@ -1128,6 +1137,30 @@ 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; +} + /* Plane list iterator for legacy (overlay only) planes. */ #define drm_for_each_legacy_plane(plane, planelist) \ list_for_each_entry(plane, planelist, head) \
Add a few more useful helpers to find mode objects. Signed-off-by: Rob Clark <robdclark@gmail.com> --- drivers/gpu/drm/drm_crtc.c | 97 ++++++++++++++-------------------------------- include/drm/drm_crtc.h | 33 ++++++++++++++++ 2 files changed, 63 insertions(+), 67 deletions(-)