hc
2023-12-08 01573e231f18eb2d99162747186f59511f56b64d
kernel/include/drm/drm_client.h
....@@ -1,9 +1,14 @@
1
-/* SPDX-License-Identifier: GPL-2.0 */
1
+/* SPDX-License-Identifier: GPL-2.0 or MIT */
22
33 #ifndef _DRM_CLIENT_H_
44 #define _DRM_CLIENT_H_
55
6
+#include <linux/lockdep.h>
7
+#include <linux/mutex.h>
68 #include <linux/types.h>
9
+
10
+#include <drm/drm_connector.h>
11
+#include <drm/drm_crtc.h>
712
813 struct drm_client_dev;
914 struct drm_device;
....@@ -26,7 +31,7 @@
2631 * @unregister:
2732 *
2833 * Called when &drm_device is unregistered. The client should respond by
29
- * releasing it's resources using drm_client_release().
34
+ * releasing its resources using drm_client_release().
3035 *
3136 * This callback is optional.
3237 */
....@@ -38,6 +43,11 @@
3843 * Called on drm_lastclose(). The first client instance in the list that
3944 * returns zero gets the privilege to restore and no more clients are
4045 * called. This callback is not called after @unregister has been called.
46
+ *
47
+ * Note that the core does not guarantee exclusion against concurrent
48
+ * drm_open(). Clients need to ensure this themselves, for example by
49
+ * using drm_master_internal_acquire() and
50
+ * drm_master_internal_release().
4151 *
4252 * This callback is optional.
4353 */
....@@ -85,12 +95,22 @@
8595 * @file: DRM file
8696 */
8797 struct drm_file *file;
98
+
99
+ /**
100
+ * @modeset_mutex: Protects @modesets.
101
+ */
102
+ struct mutex modeset_mutex;
103
+
104
+ /**
105
+ * @modesets: CRTC configurations
106
+ */
107
+ struct drm_mode_set *modesets;
88108 };
89109
90110 int drm_client_init(struct drm_device *dev, struct drm_client_dev *client,
91111 const char *name, const struct drm_client_funcs *funcs);
92112 void drm_client_release(struct drm_client_dev *client);
93
-void drm_client_add(struct drm_client_dev *client);
113
+void drm_client_register(struct drm_client_dev *client);
94114
95115 void drm_client_dev_unregister(struct drm_device *dev);
96116 void drm_client_dev_hotplug(struct drm_device *dev);
....@@ -134,7 +154,42 @@
134154 struct drm_client_buffer *
135155 drm_client_framebuffer_create(struct drm_client_dev *client, u32 width, u32 height, u32 format);
136156 void drm_client_framebuffer_delete(struct drm_client_buffer *buffer);
157
+int drm_client_framebuffer_flush(struct drm_client_buffer *buffer, struct drm_rect *rect);
158
+void *drm_client_buffer_vmap(struct drm_client_buffer *buffer);
159
+void drm_client_buffer_vunmap(struct drm_client_buffer *buffer);
137160
138
-int drm_client_debugfs_init(struct drm_minor *minor);
161
+int drm_client_modeset_create(struct drm_client_dev *client);
162
+void drm_client_modeset_free(struct drm_client_dev *client);
163
+int drm_client_modeset_probe(struct drm_client_dev *client, unsigned int width, unsigned int height);
164
+bool drm_client_rotation(struct drm_mode_set *modeset, unsigned int *rotation);
165
+int drm_client_modeset_check(struct drm_client_dev *client);
166
+int drm_client_modeset_commit_locked(struct drm_client_dev *client);
167
+int drm_client_modeset_commit(struct drm_client_dev *client);
168
+int drm_client_modeset_dpms(struct drm_client_dev *client, int mode);
169
+
170
+/**
171
+ * drm_client_for_each_modeset() - Iterate over client modesets
172
+ * @modeset: &drm_mode_set loop cursor
173
+ * @client: DRM client
174
+ */
175
+#define drm_client_for_each_modeset(modeset, client) \
176
+ for (({ lockdep_assert_held(&(client)->modeset_mutex); }), \
177
+ modeset = (client)->modesets; modeset->crtc; modeset++)
178
+
179
+/**
180
+ * drm_client_for_each_connector_iter - connector_list iterator macro
181
+ * @connector: &struct drm_connector pointer used as cursor
182
+ * @iter: &struct drm_connector_list_iter
183
+ *
184
+ * This iterates the connectors that are useable for internal clients (excludes
185
+ * writeback connectors).
186
+ *
187
+ * For more info see drm_for_each_connector_iter().
188
+ */
189
+#define drm_client_for_each_connector_iter(connector, iter) \
190
+ drm_for_each_connector_iter(connector, iter) \
191
+ if (connector->connector_type != DRM_MODE_CONNECTOR_WRITEBACK)
192
+
193
+void drm_client_debugfs_init(struct drm_minor *minor);
139194
140195 #endif