linux/include/drm/drm_client.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2
   3#ifndef _DRM_CLIENT_H_
   4#define _DRM_CLIENT_H_
   5
   6#include <linux/types.h>
   7
   8struct drm_client_dev;
   9struct drm_device;
  10struct drm_file;
  11struct drm_framebuffer;
  12struct drm_gem_object;
  13struct drm_minor;
  14struct module;
  15
  16/**
  17 * struct drm_client_funcs - DRM client callbacks
  18 */
  19struct drm_client_funcs {
  20        /**
  21         * @owner: The module owner
  22         */
  23        struct module *owner;
  24
  25        /**
  26         * @unregister:
  27         *
  28         * Called when &drm_device is unregistered. The client should respond by
  29         * releasing its resources using drm_client_release().
  30         *
  31         * This callback is optional.
  32         */
  33        void (*unregister)(struct drm_client_dev *client);
  34
  35        /**
  36         * @restore:
  37         *
  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.
  41         *
  42         * This callback is optional.
  43         */
  44        int (*restore)(struct drm_client_dev *client);
  45
  46        /**
  47         * @hotplug:
  48         *
  49         * Called on drm_kms_helper_hotplug_event().
  50         * This callback is not called after @unregister has been called.
  51         *
  52         * This callback is optional.
  53         */
  54        int (*hotplug)(struct drm_client_dev *client);
  55};
  56
  57/**
  58 * struct drm_client_dev - DRM client instance
  59 */
  60struct drm_client_dev {
  61        /**
  62         * @dev: DRM device
  63         */
  64        struct drm_device *dev;
  65
  66        /**
  67         * @name: Name of the client.
  68         */
  69        const char *name;
  70
  71        /**
  72         * @list:
  73         *
  74         * List of all clients of a DRM device, linked into
  75         * &drm_device.clientlist. Protected by &drm_device.clientlist_mutex.
  76         */
  77        struct list_head list;
  78
  79        /**
  80         * @funcs: DRM client functions (optional)
  81         */
  82        const struct drm_client_funcs *funcs;
  83
  84        /**
  85         * @file: DRM file
  86         */
  87        struct drm_file *file;
  88};
  89
  90int drm_client_init(struct drm_device *dev, struct drm_client_dev *client,
  91                    const char *name, const struct drm_client_funcs *funcs);
  92void drm_client_release(struct drm_client_dev *client);
  93void drm_client_register(struct drm_client_dev *client);
  94
  95void drm_client_dev_unregister(struct drm_device *dev);
  96void drm_client_dev_hotplug(struct drm_device *dev);
  97void drm_client_dev_restore(struct drm_device *dev);
  98
  99/**
 100 * struct drm_client_buffer - DRM client buffer
 101 */
 102struct drm_client_buffer {
 103        /**
 104         * @client: DRM client
 105         */
 106        struct drm_client_dev *client;
 107
 108        /**
 109         * @handle: Buffer handle
 110         */
 111        u32 handle;
 112
 113        /**
 114         * @pitch: Buffer pitch
 115         */
 116        u32 pitch;
 117
 118        /**
 119         * @gem: GEM object backing this buffer
 120         */
 121        struct drm_gem_object *gem;
 122
 123        /**
 124         * @vaddr: Virtual address for the buffer
 125         */
 126        void *vaddr;
 127
 128        /**
 129         * @fb: DRM framebuffer
 130         */
 131        struct drm_framebuffer *fb;
 132};
 133
 134struct drm_client_buffer *
 135drm_client_framebuffer_create(struct drm_client_dev *client, u32 width, u32 height, u32 format);
 136void drm_client_framebuffer_delete(struct drm_client_buffer *buffer);
 137
 138int drm_client_debugfs_init(struct drm_minor *minor);
 139
 140#endif
 141