1 /* SPDX-License-Identifier: GPL-2.0 */
6 #include <linux/types.h>
11 struct drm_framebuffer
;
12 struct drm_gem_object
;
17 * struct drm_client_funcs - DRM client callbacks
19 struct drm_client_funcs
{
21 * @owner: The module owner
28 * Called when &drm_device is unregistered. The client should respond by
29 * releasing it's resources using drm_client_release().
31 * This callback is optional.
33 void (*unregister
)(struct drm_client_dev
*client
);
38 * Called on drm_lastclose(). The first client instance in the list that
39 * returns zero gets the privilege to restore and no more clients are
40 * called. This callback is not called after @unregister has been called.
42 * This callback is optional.
44 int (*restore
)(struct drm_client_dev
*client
);
49 * Called on drm_kms_helper_hotplug_event().
50 * This callback is not called after @unregister has been called.
52 * This callback is optional.
54 int (*hotplug
)(struct drm_client_dev
*client
);
58 * struct drm_client_dev - DRM client instance
60 struct drm_client_dev
{
64 struct drm_device
*dev
;
67 * @name: Name of the client.
74 * List of all clients of a DRM device, linked into
75 * &drm_device.clientlist. Protected by &drm_device.clientlist_mutex.
77 struct list_head list
;
80 * @funcs: DRM client functions (optional)
82 const struct drm_client_funcs
*funcs
;
87 struct drm_file
*file
;
90 int drm_client_new(struct drm_device
*dev
, struct drm_client_dev
*client
,
91 const char *name
, const struct drm_client_funcs
*funcs
);
92 void drm_client_release(struct drm_client_dev
*client
);
94 void drm_client_dev_unregister(struct drm_device
*dev
);
95 void drm_client_dev_hotplug(struct drm_device
*dev
);
96 void drm_client_dev_restore(struct drm_device
*dev
);
99 * struct drm_client_buffer - DRM client buffer
101 struct drm_client_buffer
{
103 * @client: DRM client
105 struct drm_client_dev
*client
;
108 * @handle: Buffer handle
113 * @pitch: Buffer pitch
118 * @gem: GEM object backing this buffer
120 struct drm_gem_object
*gem
;
123 * @vaddr: Virtual address for the buffer
128 * @fb: DRM framebuffer
130 struct drm_framebuffer
*fb
;
133 struct drm_client_buffer
*
134 drm_client_framebuffer_create(struct drm_client_dev
*client
, u32 width
, u32 height
, u32 format
);
135 void drm_client_framebuffer_delete(struct drm_client_buffer
*buffer
);
137 int drm_client_debugfs_init(struct drm_minor
*minor
);