Subversion Repositories Kolibri OS

Rev

Rev 5270 | Rev 6936 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5270 Rev 6082
Line 42... Line 42...
42
	struct drm_mode_set mode_set;
42
	struct drm_mode_set mode_set;
43
	struct drm_display_mode *desired_mode;
43
	struct drm_display_mode *desired_mode;
44
	int x, y;
44
	int x, y;
45
};
45
};
Line -... Line 46...
-
 
46
 
-
 
47
/**
-
 
48
 * struct drm_fb_helper_surface_size - describes fbdev size and scanout surface size
-
 
49
 * @fb_width: fbdev width
-
 
50
 * @fb_height: fbdev height
-
 
51
 * @surface_width: scanout buffer width
-
 
52
 * @surface_height: scanout buffer height
-
 
53
 * @surface_bpp: scanout buffer bpp
-
 
54
 * @surface_depth: scanout buffer depth
-
 
55
 *
-
 
56
 * Note that the scanout surface width/height may be larger than the fbdev
-
 
57
 * width/height.  In case of multiple displays, the scanout surface is sized
-
 
58
 * according to the largest width/height (so it is large enough for all CRTCs
-
 
59
 * to scanout).  But the fbdev width/height is sized to the minimum width/
-
 
60
 * height of all the displays.  This ensures that fbcon fits on the smallest
-
 
61
 * of the attached displays.
-
 
62
 *
-
 
63
 * So what is passed to drm_fb_helper_fill_var() should be fb_width/fb_height,
-
 
64
 * rather than the surface size.
46
 
65
 */
47
struct drm_fb_helper_surface_size {
66
struct drm_fb_helper_surface_size {
48
	u32 fb_width;
67
	u32 fb_width;
49
	u32 fb_height;
68
	u32 fb_height;
50
	u32 surface_width;
69
	u32 surface_width;
Line 83... Line 102...
83
 
102
 
84
struct drm_fb_helper_connector {
103
struct drm_fb_helper_connector {
85
	struct drm_connector *connector;
104
	struct drm_connector *connector;
Line -... Line 105...
-
 
105
};
-
 
106
 
-
 
107
/**
-
 
108
 * struct drm_fb_helper - helper to emulate fbdev on top of kms
-
 
109
 * @fb:  Scanout framebuffer object
-
 
110
 * @dev:  DRM device
-
 
111
 * @crtc_count: number of possible CRTCs
-
 
112
 * @crtc_info: per-CRTC helper state (mode, x/y offset, etc)
-
 
113
 * @connector_count: number of connected connectors
-
 
114
 * @connector_info_alloc_count: size of connector_info
-
 
115
 * @funcs: driver callbacks for fb helper
-
 
116
 * @fbdev: emulated fbdev device info struct
-
 
117
 * @pseudo_palette: fake palette of 16 colors
-
 
118
 * @kernel_fb_list: list_head in kernel_fb_helper_list
86
};
119
 * @delayed_hotplug: was there a hotplug while kms master active?
87
 
120
 */
88
struct drm_fb_helper {
121
struct drm_fb_helper {
89
	struct drm_framebuffer *fb;
122
	struct drm_framebuffer *fb;
90
	struct drm_device *dev;
123
	struct drm_device *dev;
Line 99... Line 132...
99
	struct list_head kernel_fb_list;
132
	struct list_head kernel_fb_list;
Line 100... Line 133...
100
 
133
 
101
	/* we got a hotplug but fbdev wasn't running the console
134
	/* we got a hotplug but fbdev wasn't running the console
102
	   delay until next set_par */
135
	   delay until next set_par */
-
 
136
	bool delayed_hotplug;
-
 
137
 
-
 
138
	/**
-
 
139
	 * @atomic:
-
 
140
	 *
-
 
141
	 * Use atomic updates for restore_fbdev_mode(), etc.  This defaults to
-
 
142
	 * true if driver has DRIVER_ATOMIC feature flag, but drivers can
-
 
143
	 * override it to true after drm_fb_helper_init() if they support atomic
-
 
144
	 * modeset but do not yet advertise DRIVER_ATOMIC (note that fb-helper
-
 
145
	 * does not require ASYNC commits).
-
 
146
	 */
103
	bool delayed_hotplug;
147
	bool atomic;
Line -... Line 148...
-
 
148
};
104
};
149
 
105
 
150
#ifdef CONFIG_DRM_FBDEV_EMULATION
106
void drm_fb_helper_prepare(struct drm_device *dev, struct drm_fb_helper *helper,
151
void drm_fb_helper_prepare(struct drm_device *dev, struct drm_fb_helper *helper,
107
			   const struct drm_fb_helper_funcs *funcs);
152
			   const struct drm_fb_helper_funcs *funcs);
108
int drm_fb_helper_init(struct drm_device *dev,
153
int drm_fb_helper_init(struct drm_device *dev,
Line 114... Line 159...
114
			      struct fb_info *info);
159
			      struct fb_info *info);
115
int drm_fb_helper_set_par(struct fb_info *info);
160
int drm_fb_helper_set_par(struct fb_info *info);
116
int drm_fb_helper_check_var(struct fb_var_screeninfo *var,
161
int drm_fb_helper_check_var(struct fb_var_screeninfo *var,
117
			    struct fb_info *info);
162
			    struct fb_info *info);
Line 118... Line 163...
118
 
163
 
-
 
164
int drm_fb_helper_restore_fbdev_mode_unlocked(struct drm_fb_helper *fb_helper);
-
 
165
 
-
 
166
struct fb_info *drm_fb_helper_alloc_fbi(struct drm_fb_helper *fb_helper);
-
 
167
void drm_fb_helper_unregister_fbi(struct drm_fb_helper *fb_helper);
119
bool drm_fb_helper_restore_fbdev_mode_unlocked(struct drm_fb_helper *fb_helper);
168
void drm_fb_helper_release_fbi(struct drm_fb_helper *fb_helper);
120
void drm_fb_helper_fill_var(struct fb_info *info, struct drm_fb_helper *fb_helper,
169
void drm_fb_helper_fill_var(struct fb_info *info, struct drm_fb_helper *fb_helper,
121
			    uint32_t fb_width, uint32_t fb_height);
170
			    uint32_t fb_width, uint32_t fb_height);
122
void drm_fb_helper_fill_fix(struct fb_info *info, uint32_t pitch,
171
void drm_fb_helper_fill_fix(struct fb_info *info, uint32_t pitch,
Line -... Line 172...
-
 
172
			    uint32_t depth);
-
 
173
 
-
 
174
void drm_fb_helper_unlink_fbi(struct drm_fb_helper *fb_helper);
-
 
175
 
-
 
176
ssize_t drm_fb_helper_sys_read(struct fb_info *info, char __user *buf,
-
 
177
			       size_t count, loff_t *ppos);
-
 
178
ssize_t drm_fb_helper_sys_write(struct fb_info *info, const char __user *buf,
-
 
179
				size_t count, loff_t *ppos);
-
 
180
 
-
 
181
void drm_fb_helper_sys_fillrect(struct fb_info *info,
-
 
182
				const struct fb_fillrect *rect);
-
 
183
void drm_fb_helper_sys_copyarea(struct fb_info *info,
-
 
184
				const struct fb_copyarea *area);
-
 
185
void drm_fb_helper_sys_imageblit(struct fb_info *info,
-
 
186
				 const struct fb_image *image);
-
 
187
 
-
 
188
void drm_fb_helper_cfb_fillrect(struct fb_info *info,
-
 
189
				const struct fb_fillrect *rect);
-
 
190
void drm_fb_helper_cfb_copyarea(struct fb_info *info,
-
 
191
				const struct fb_copyarea *area);
-
 
192
void drm_fb_helper_cfb_imageblit(struct fb_info *info,
-
 
193
				 const struct fb_image *image);
-
 
194
 
123
			    uint32_t depth);
195
void drm_fb_helper_set_suspend(struct drm_fb_helper *fb_helper, int state);
Line 124... Line 196...
124
 
196
 
125
int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info);
197
int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info);
126
 
198
 
127
int drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper);
199
int drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper);
128
bool drm_fb_helper_initial_config(struct drm_fb_helper *fb_helper, int bpp_sel);
200
int drm_fb_helper_initial_config(struct drm_fb_helper *fb_helper, int bpp_sel);
129
int drm_fb_helper_single_add_all_connectors(struct drm_fb_helper *fb_helper);
201
int drm_fb_helper_single_add_all_connectors(struct drm_fb_helper *fb_helper);
130
int drm_fb_helper_debug_enter(struct fb_info *info);
202
int drm_fb_helper_debug_enter(struct fb_info *info);
Line 137... Line 209...
137
		      int width, int height);
209
		      int width, int height);
Line 138... Line 210...
138
 
210
 
139
int drm_fb_helper_add_one_connector(struct drm_fb_helper *fb_helper, struct drm_connector *connector);
211
int drm_fb_helper_add_one_connector(struct drm_fb_helper *fb_helper, struct drm_connector *connector);
140
int drm_fb_helper_remove_one_connector(struct drm_fb_helper *fb_helper,
212
int drm_fb_helper_remove_one_connector(struct drm_fb_helper *fb_helper,
-
 
213
				       struct drm_connector *connector);
-
 
214
#else
-
 
215
static inline void drm_fb_helper_prepare(struct drm_device *dev,
-
 
216
					struct drm_fb_helper *helper,
-
 
217
					const struct drm_fb_helper_funcs *funcs)
-
 
218
{
-
 
219
}
-
 
220
 
-
 
221
static inline int drm_fb_helper_init(struct drm_device *dev,
-
 
222
		       struct drm_fb_helper *helper, int crtc_count,
-
 
223
		       int max_conn)
-
 
224
{
-
 
225
	return 0;
-
 
226
}
-
 
227
 
-
 
228
static inline void drm_fb_helper_fini(struct drm_fb_helper *helper)
-
 
229
{
-
 
230
}
-
 
231
 
-
 
232
static inline int drm_fb_helper_blank(int blank, struct fb_info *info)
-
 
233
{
-
 
234
	return 0;
-
 
235
}
-
 
236
 
-
 
237
static inline int drm_fb_helper_pan_display(struct fb_var_screeninfo *var,
-
 
238
					    struct fb_info *info)
-
 
239
{
-
 
240
	return 0;
-
 
241
}
-
 
242
 
-
 
243
static inline int drm_fb_helper_set_par(struct fb_info *info)
-
 
244
{
-
 
245
	return 0;
-
 
246
}
-
 
247
 
-
 
248
static inline int drm_fb_helper_check_var(struct fb_var_screeninfo *var,
-
 
249
					  struct fb_info *info)
-
 
250
{
-
 
251
	return 0;
-
 
252
}
-
 
253
 
-
 
254
static inline int
-
 
255
drm_fb_helper_restore_fbdev_mode_unlocked(struct drm_fb_helper *fb_helper)
-
 
256
{
-
 
257
	return 0;
-
 
258
}
-
 
259
 
-
 
260
static inline struct fb_info *
-
 
261
drm_fb_helper_alloc_fbi(struct drm_fb_helper *fb_helper)
-
 
262
{
-
 
263
	return NULL;
-
 
264
}
-
 
265
 
-
 
266
static inline void drm_fb_helper_unregister_fbi(struct drm_fb_helper *fb_helper)
-
 
267
{
-
 
268
}
-
 
269
static inline void drm_fb_helper_release_fbi(struct drm_fb_helper *fb_helper)
-
 
270
{
-
 
271
}
-
 
272
 
-
 
273
static inline void drm_fb_helper_fill_var(struct fb_info *info,
-
 
274
					  struct drm_fb_helper *fb_helper,
-
 
275
					  uint32_t fb_width, uint32_t fb_height)
-
 
276
{
-
 
277
}
-
 
278
 
-
 
279
static inline void drm_fb_helper_fill_fix(struct fb_info *info, uint32_t pitch,
-
 
280
					  uint32_t depth)
-
 
281
{
-
 
282
}
-
 
283
 
-
 
284
static inline int drm_fb_helper_setcmap(struct fb_cmap *cmap,
-
 
285
					struct fb_info *info)
-
 
286
{
-
 
287
	return 0;
-
 
288
}
-
 
289
 
-
 
290
static inline void drm_fb_helper_unlink_fbi(struct drm_fb_helper *fb_helper)
-
 
291
{
-
 
292
}
-
 
293
 
-
 
294
static inline ssize_t drm_fb_helper_sys_read(struct fb_info *info,
-
 
295
					     char __user *buf, size_t count,
-
 
296
					     loff_t *ppos)
-
 
297
{
-
 
298
	return -ENODEV;
-
 
299
}
-
 
300
 
-
 
301
static inline ssize_t drm_fb_helper_sys_write(struct fb_info *info,
-
 
302
					      const char __user *buf,
-
 
303
					      size_t count, loff_t *ppos)
-
 
304
{
-
 
305
	return -ENODEV;
-
 
306
}
-
 
307
 
-
 
308
static inline void drm_fb_helper_sys_fillrect(struct fb_info *info,
-
 
309
					      const struct fb_fillrect *rect)
-
 
310
{
-
 
311
}
-
 
312
 
-
 
313
static inline void drm_fb_helper_sys_copyarea(struct fb_info *info,
-
 
314
					      const struct fb_copyarea *area)
-
 
315
{
-
 
316
}
-
 
317
 
-
 
318
static inline void drm_fb_helper_sys_imageblit(struct fb_info *info,
-
 
319
					       const struct fb_image *image)
-
 
320
{
-
 
321
}
-
 
322
 
-
 
323
static inline void drm_fb_helper_cfb_fillrect(struct fb_info *info,
-
 
324
					      const struct fb_fillrect *rect)
-
 
325
{
-
 
326
}
-
 
327
 
-
 
328
static inline void drm_fb_helper_cfb_copyarea(struct fb_info *info,
-
 
329
					      const struct fb_copyarea *area)
-
 
330
{
-
 
331
}
-
 
332
 
-
 
333
static inline void drm_fb_helper_cfb_imageblit(struct fb_info *info,
-
 
334
					       const struct fb_image *image)
-
 
335
{
-
 
336
}
-
 
337
 
-
 
338
static inline void drm_fb_helper_set_suspend(struct drm_fb_helper *fb_helper,
-
 
339
					     int state)
-
 
340
{
-
 
341
}
-
 
342
 
-
 
343
static inline int drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper)
-
 
344
{
-
 
345
	return 0;
-
 
346
}
-
 
347
 
-
 
348
static inline int drm_fb_helper_initial_config(struct drm_fb_helper *fb_helper,
-
 
349
					       int bpp_sel)
-
 
350
{
-
 
351
	return 0;
-
 
352
}
-
 
353
 
-
 
354
static inline int
-
 
355
drm_fb_helper_single_add_all_connectors(struct drm_fb_helper *fb_helper)
-
 
356
{
-
 
357
	return 0;
-
 
358
}
-
 
359
 
-
 
360
static inline int drm_fb_helper_debug_enter(struct fb_info *info)
-
 
361
{
-
 
362
	return 0;
-
 
363
}
-
 
364
 
-
 
365
static inline int drm_fb_helper_debug_leave(struct fb_info *info)
-
 
366
{
-
 
367
	return 0;
-
 
368
}
-
 
369
 
-
 
370
static inline struct drm_display_mode *
-
 
371
drm_has_preferred_mode(struct drm_fb_helper_connector *fb_connector,
-
 
372
		       int width, int height)
-
 
373
{
-
 
374
	return NULL;
-
 
375
}
-
 
376
 
-
 
377
static inline struct drm_display_mode *
-
 
378
drm_pick_cmdline_mode(struct drm_fb_helper_connector *fb_helper_conn,
-
 
379
		      int width, int height)
-
 
380
{
-
 
381
	return NULL;
-
 
382
}
-
 
383
 
-
 
384
static inline int
-
 
385
drm_fb_helper_add_one_connector(struct drm_fb_helper *fb_helper,
-
 
386
				struct drm_connector *connector)
-
 
387
{
-
 
388
	return 0;
-
 
389
}
-
 
390
 
-
 
391
static inline int
-
 
392
drm_fb_helper_remove_one_connector(struct drm_fb_helper *fb_helper,
-
 
393
				   struct drm_connector *connector)
-
 
394
{
-
 
395
	return 0;
-
 
396
}
141
				       struct drm_connector *connector);
397
#endif