| /* 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 |