| /* SPDX-License-Identifier: GPL-2.0 */ | |
| #ifndef _DRM_CLIENT_H_ | |
| #define _DRM_CLIENT_H_ | |
| #include <linux/types.h> | |
| struct drm_client_dev; | |
| struct drm_device; | |
| struct drm_file; | |
| struct drm_framebuffer; | |
| struct drm_gem_object; | |
| struct drm_minor; | |
| struct module; | |
| /** | |
| * struct drm_client_funcs - DRM client callbacks | |
| */ | |
| struct drm_client_funcs { | |
| /** | |
| * @owner: The module owner | |
| */ | |
| struct module *owner; | |
| /** | |
| * @unregister: | |
| * | |
| * Called when &drm_device is unregistered. The client should respond by | |
| * releasing it's resources using drm_client_release(). | |
| * | |
| * This callback is optional. | |
| */ | |
| void (*unregister)(struct drm_client_dev *client); | |
| /** | |
| * @restore: | |
| * | |
| * Called on drm_lastclose(). The first client instance in the list that | |
| * returns zero gets the privilege to restore and no more clients are | |
| * called. This callback is not called after @unregister has been called. | |
| * | |
| * This callback is optional. | |
| */ | |
| int (*restore)(struct drm_client_dev *client); | |
| /** | |
| * @hotplug: | |
| * | |
| * Called on drm_kms_helper_hotplug_event(). | |
| * This callback is not called after @unregister has been called. | |
| * | |
| * This callback is optional. | |
| */ | |
| int (*hotplug)(struct drm_client_dev *client); | |
| }; | |
| /** | |
| * struct drm_client_dev - DRM client instance | |
| */ | |
| struct drm_client_dev { | |
| /** | |
| * @dev: DRM device | |
| */ | |
| struct drm_device *dev; | |
| /** | |
| * @name: Name of the client. | |
| */ | |
| const char *name; | |
| /** | |
| * @list: | |
| * | |
| * List of all clients of a DRM device, linked into | |
| * &drm_device.clientlist. Protected by &drm_device.clientlist_mutex. | |
| */ | |
| struct list_head list; | |
| /** | |
| * @funcs: DRM client functions (optional) | |
| */ | |
| const struct drm_client_funcs *funcs; | |
| /** | |
| * @file: DRM file | |
| */ | |
| struct drm_file *file; | |
| }; | |
| int drm_client_init(struct drm_device *dev, struct drm_client_dev *client, | |
| const char *name, const struct drm_client_funcs *funcs); | |
| void drm_client_release(struct drm_client_dev *client); | |
| void drm_client_add(struct drm_client_dev *client); | |
| void drm_client_dev_unregister(struct drm_device *dev); | |
| void drm_client_dev_hotplug(struct drm_device *dev); | |
| void drm_client_dev_restore(struct drm_device *dev); | |
| /** | |
| * struct drm_client_buffer - DRM client buffer | |
| */ | |
| struct drm_client_buffer { | |
| /** | |
| * @client: DRM client | |
| */ | |
| struct drm_client_dev *client; | |
| /** | |
| * @handle: Buffer handle | |
| */ | |
| u32 handle; | |
| /** | |
| * @pitch: Buffer pitch | |
| */ | |
| u32 pitch; | |
| /** | |
| * @gem: GEM object backing this buffer | |
| */ | |
| struct drm_gem_object *gem; | |
| /** | |
| * @vaddr: Virtual address for the buffer | |
| */ | |
| void *vaddr; | |
| /** | |
| * @fb: DRM framebuffer | |
| */ | |
| struct drm_framebuffer *fb; | |
| }; | |
| struct drm_client_buffer * | |
| 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); | |
| int drm_client_debugfs_init(struct drm_minor *minor); | |
| #endif |