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_init(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);
93 void drm_client_add(struct drm_client_dev *client);
95 void drm_client_dev_unregister(struct drm_device *dev);
96 void drm_client_dev_hotplug(struct drm_device *dev);
97 void drm_client_dev_restore(struct drm_device *dev);
100 * struct drm_client_buffer - DRM client buffer
102 struct drm_client_buffer {
104 * @client: DRM client
106 struct drm_client_dev *client;
109 * @handle: Buffer handle
114 * @pitch: Buffer pitch
119 * @gem: GEM object backing this buffer
121 struct drm_gem_object *gem;
124 * @vaddr: Virtual address for the buffer
129 * @fb: DRM framebuffer
131 struct drm_framebuffer *fb;
134 struct drm_client_buffer *
135 drm_client_framebuffer_create(struct drm_client_dev *client, u32 width, u32 height, u32 format);
136 void drm_client_framebuffer_delete(struct drm_client_buffer *buffer);
138 int drm_client_debugfs_init(struct drm_minor *minor);