mirror of
https://github.com/torvalds/linux.git
synced 2024-11-26 06:02:05 +00:00
drm/client: Add drm_client_framebuffer_flush()
Some drivers need explicit flushing of buffer changes, add a function that does that. v2: - Put all clip rect stuff inside if statement (Sam) Reviewed-by: Sam Ravnborg <sam@ravnborg.org> Signed-off-by: Noralf Trønnes <noralf@tronnes.org> Link: https://patchwork.freedesktop.org/patch/msgid/20200509141619.32970-4-noralf@tronnes.org
This commit is contained in:
parent
8f6f5e00e5
commit
c9c03e3cf0
@ -437,6 +437,39 @@ void drm_client_framebuffer_delete(struct drm_client_buffer *buffer)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(drm_client_framebuffer_delete);
|
EXPORT_SYMBOL(drm_client_framebuffer_delete);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* drm_client_framebuffer_flush - Manually flush client framebuffer
|
||||||
|
* @buffer: DRM client buffer (can be NULL)
|
||||||
|
* @rect: Damage rectangle (if NULL flushes all)
|
||||||
|
*
|
||||||
|
* This calls &drm_framebuffer_funcs->dirty (if present) to flush buffer changes
|
||||||
|
* for drivers that need it.
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* Zero on success or negative error code on failure.
|
||||||
|
*/
|
||||||
|
int drm_client_framebuffer_flush(struct drm_client_buffer *buffer, struct drm_rect *rect)
|
||||||
|
{
|
||||||
|
if (!buffer || !buffer->fb || !buffer->fb->funcs->dirty)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (rect) {
|
||||||
|
struct drm_clip_rect clip = {
|
||||||
|
.x1 = rect->x1,
|
||||||
|
.y1 = rect->y1,
|
||||||
|
.x2 = rect->x2,
|
||||||
|
.y2 = rect->y2,
|
||||||
|
};
|
||||||
|
|
||||||
|
return buffer->fb->funcs->dirty(buffer->fb, buffer->client->file,
|
||||||
|
0, 0, &clip, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return buffer->fb->funcs->dirty(buffer->fb, buffer->client->file,
|
||||||
|
0, 0, NULL, 0);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(drm_client_framebuffer_flush);
|
||||||
|
|
||||||
#ifdef CONFIG_DEBUG_FS
|
#ifdef CONFIG_DEBUG_FS
|
||||||
static int drm_client_debugfs_internal_clients(struct seq_file *m, void *data)
|
static int drm_client_debugfs_internal_clients(struct seq_file *m, void *data)
|
||||||
{
|
{
|
||||||
|
@ -154,6 +154,7 @@ struct drm_client_buffer {
|
|||||||
struct drm_client_buffer *
|
struct drm_client_buffer *
|
||||||
drm_client_framebuffer_create(struct drm_client_dev *client, u32 width, u32 height, u32 format);
|
drm_client_framebuffer_create(struct drm_client_dev *client, u32 width, u32 height, u32 format);
|
||||||
void drm_client_framebuffer_delete(struct drm_client_buffer *buffer);
|
void drm_client_framebuffer_delete(struct drm_client_buffer *buffer);
|
||||||
|
int drm_client_framebuffer_flush(struct drm_client_buffer *buffer, struct drm_rect *rect);
|
||||||
void *drm_client_buffer_vmap(struct drm_client_buffer *buffer);
|
void *drm_client_buffer_vmap(struct drm_client_buffer *buffer);
|
||||||
void drm_client_buffer_vunmap(struct drm_client_buffer *buffer);
|
void drm_client_buffer_vunmap(struct drm_client_buffer *buffer);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user