On Sat, Jul 28, 2018 at 12:11:08PM +0300, Haneen Mohammed wrote: > Subclass plane state struct to enable storing driver's private > state. This patch only adds the base drm_plane_state struct and > the atomic functions that handle it. > > Signed-off-by: Haneen Mohammed <hamohammed.sa@xxxxxxxxx> Reviewed-by: Sean Paul <seanpaul@xxxxxxxxxxxx> > --- > drivers/gpu/drm/vkms/vkms_drv.h | 10 +++++++ > drivers/gpu/drm/vkms/vkms_plane.c | 47 +++++++++++++++++++++++++++++-- > 2 files changed, 54 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/vkms/vkms_drv.h b/drivers/gpu/drm/vkms/vkms_drv.h > index 75e52d61e65d..aa2632ff5f06 100644 > --- a/drivers/gpu/drm/vkms/vkms_drv.h > +++ b/drivers/gpu/drm/vkms/vkms_drv.h > @@ -20,6 +20,13 @@ static const u32 vkms_formats[] = { > DRM_FORMAT_XRGB8888, > }; > > +/* vkms_plane_state - Driver specific plane state > + * @base: base plane state > + */ > +struct vkms_plane_state { > + struct drm_plane_state base; > +}; > + > /** > * vkms_crtc_state - Driver specific CRTC state > * @base: base CRTC state > @@ -63,6 +70,9 @@ struct vkms_gem_object { > #define to_vkms_crtc_state(target)\ > container_of(target, struct vkms_crtc_state, base) > > +#define to_vkms_plane_state(target)\ > + container_of(target, struct vkms_plane_state, base) > + > /* CRTC */ > int vkms_crtc_init(struct drm_device *dev, struct drm_crtc *crtc, > struct drm_plane *primary, struct drm_plane *cursor); > diff --git a/drivers/gpu/drm/vkms/vkms_plane.c b/drivers/gpu/drm/vkms/vkms_plane.c > index 8191940844e5..70fca22bc51b 100644 > --- a/drivers/gpu/drm/vkms/vkms_plane.c > +++ b/drivers/gpu/drm/vkms/vkms_plane.c > @@ -12,13 +12,54 @@ > #include <drm/drm_atomic_helper.h> > #include <drm/drm_gem_framebuffer_helper.h> > > +static struct drm_plane_state * > +vkms_plane_duplicate_state(struct drm_plane *plane) > +{ > + struct vkms_plane_state *vkms_state; > + > + vkms_state = kzalloc(sizeof(*vkms_state), GFP_KERNEL); > + if (!vkms_state) > + return NULL; > + > + __drm_atomic_helper_plane_duplicate_state(plane, > + &vkms_state->base); > + > + return &vkms_state->base; > +} > + > +static void vkms_plane_destroy_state(struct drm_plane *plane, > + struct drm_plane_state *old_state) > +{ > + struct vkms_plane_state *vkms_state = to_vkms_plane_state(old_state); > + > + __drm_atomic_helper_plane_destroy_state(old_state); > + kfree(vkms_state); > +} > + > +static void vkms_plane_reset(struct drm_plane *plane) > +{ > + struct vkms_plane_state *vkms_state; > + > + if (plane->state) > + vkms_plane_destroy_state(plane, plane->state); > + > + vkms_state = kzalloc(sizeof(*vkms_state), GFP_KERNEL); > + if (!vkms_state) { > + DRM_ERROR("Cannot allocate vkms_plane_state\n"); > + return; > + } > + > + plane->state = &vkms_state->base; > + plane->state->plane = plane; > +} > + > static const struct drm_plane_funcs vkms_plane_funcs = { > .update_plane = drm_atomic_helper_update_plane, > .disable_plane = drm_atomic_helper_disable_plane, > .destroy = drm_plane_cleanup, > - .reset = drm_atomic_helper_plane_reset, > - .atomic_duplicate_state = drm_atomic_helper_plane_duplicate_state, > - .atomic_destroy_state = drm_atomic_helper_plane_destroy_state, > + .reset = vkms_plane_reset, > + .atomic_duplicate_state = vkms_plane_duplicate_state, > + .atomic_destroy_state = vkms_plane_destroy_state, > }; > > static void vkms_primary_plane_update(struct drm_plane *plane, > -- > 2.17.1 > -- Sean Paul, Software Engineer, Google / Chromium OS _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel