Subversion Repositories Kolibri OS

Rev

Rev 6936 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6936 Rev 7143
1
/*
1
/*
2
 * Copyright (c) 2006-2009 Red Hat Inc.
2
 * Copyright (c) 2006-2009 Red Hat Inc.
3
 * Copyright (c) 2006-2008 Intel Corporation
3
 * Copyright (c) 2006-2008 Intel Corporation
4
 * Copyright (c) 2007 Dave Airlie 
4
 * Copyright (c) 2007 Dave Airlie 
5
 *
5
 *
6
 * DRM framebuffer helper functions
6
 * DRM framebuffer helper functions
7
 *
7
 *
8
 * Permission to use, copy, modify, distribute, and sell this software and its
8
 * Permission to use, copy, modify, distribute, and sell this software and its
9
 * documentation for any purpose is hereby granted without fee, provided that
9
 * documentation for any purpose is hereby granted without fee, provided that
10
 * the above copyright notice appear in all copies and that both that copyright
10
 * the above copyright notice appear in all copies and that both that copyright
11
 * notice and this permission notice appear in supporting documentation, and
11
 * notice and this permission notice appear in supporting documentation, and
12
 * that the name of the copyright holders not be used in advertising or
12
 * that the name of the copyright holders not be used in advertising or
13
 * publicity pertaining to distribution of the software without specific,
13
 * publicity pertaining to distribution of the software without specific,
14
 * written prior permission.  The copyright holders make no representations
14
 * written prior permission.  The copyright holders make no representations
15
 * about the suitability of this software for any purpose.  It is provided "as
15
 * about the suitability of this software for any purpose.  It is provided "as
16
 * is" without express or implied warranty.
16
 * is" without express or implied warranty.
17
 *
17
 *
18
 * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
18
 * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
19
 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
19
 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
20
 * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
20
 * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
21
 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
21
 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
22
 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
22
 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
23
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
23
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
24
 * OF THIS SOFTWARE.
24
 * OF THIS SOFTWARE.
25
 *
25
 *
26
 * Authors:
26
 * Authors:
27
 *      Dave Airlie 
27
 *      Dave Airlie 
28
 *      Jesse Barnes 
28
 *      Jesse Barnes 
29
 */
29
 */
30
#ifndef DRM_FB_HELPER_H
30
#ifndef DRM_FB_HELPER_H
31
#define DRM_FB_HELPER_H
31
#define DRM_FB_HELPER_H
32
 
32
 
33
struct drm_fb_helper;
33
struct drm_fb_helper;
34
 
34
 
35
#include 
35
#include 
36
 
36
 
37
enum mode_set_atomic {
37
enum mode_set_atomic {
38
	LEAVE_ATOMIC_MODE_SET,
38
	LEAVE_ATOMIC_MODE_SET,
39
	ENTER_ATOMIC_MODE_SET,
39
	ENTER_ATOMIC_MODE_SET,
40
};
40
};
41
 
41
 
42
struct drm_fb_offset {
42
struct drm_fb_offset {
43
	int x, y;
43
	int x, y;
44
};
44
};
45
 
45
 
46
struct drm_fb_helper_crtc {
46
struct drm_fb_helper_crtc {
47
	struct drm_mode_set mode_set;
47
	struct drm_mode_set mode_set;
48
	struct drm_display_mode *desired_mode;
48
	struct drm_display_mode *desired_mode;
49
	int x, y;
49
	int x, y;
50
};
50
};
51
 
51
 
52
/**
52
/**
53
 * struct drm_fb_helper_surface_size - describes fbdev size and scanout surface size
53
 * struct drm_fb_helper_surface_size - describes fbdev size and scanout surface size
54
 * @fb_width: fbdev width
54
 * @fb_width: fbdev width
55
 * @fb_height: fbdev height
55
 * @fb_height: fbdev height
56
 * @surface_width: scanout buffer width
56
 * @surface_width: scanout buffer width
57
 * @surface_height: scanout buffer height
57
 * @surface_height: scanout buffer height
58
 * @surface_bpp: scanout buffer bpp
58
 * @surface_bpp: scanout buffer bpp
59
 * @surface_depth: scanout buffer depth
59
 * @surface_depth: scanout buffer depth
60
 *
60
 *
61
 * Note that the scanout surface width/height may be larger than the fbdev
61
 * Note that the scanout surface width/height may be larger than the fbdev
62
 * width/height.  In case of multiple displays, the scanout surface is sized
62
 * width/height.  In case of multiple displays, the scanout surface is sized
63
 * according to the largest width/height (so it is large enough for all CRTCs
63
 * according to the largest width/height (so it is large enough for all CRTCs
64
 * to scanout).  But the fbdev width/height is sized to the minimum width/
64
 * to scanout).  But the fbdev width/height is sized to the minimum width/
65
 * height of all the displays.  This ensures that fbcon fits on the smallest
65
 * height of all the displays.  This ensures that fbcon fits on the smallest
66
 * of the attached displays.
66
 * of the attached displays.
67
 *
67
 *
68
 * So what is passed to drm_fb_helper_fill_var() should be fb_width/fb_height,
68
 * So what is passed to drm_fb_helper_fill_var() should be fb_width/fb_height,
69
 * rather than the surface size.
69
 * rather than the surface size.
70
 */
70
 */
71
struct drm_fb_helper_surface_size {
71
struct drm_fb_helper_surface_size {
72
	u32 fb_width;
72
	u32 fb_width;
73
	u32 fb_height;
73
	u32 fb_height;
74
	u32 surface_width;
74
	u32 surface_width;
75
	u32 surface_height;
75
	u32 surface_height;
76
	u32 surface_bpp;
76
	u32 surface_bpp;
77
	u32 surface_depth;
77
	u32 surface_depth;
78
};
78
};
79
 
79
 
80
/**
80
/**
81
 * struct drm_fb_helper_funcs - driver callbacks for the fbdev emulation library
81
 * struct drm_fb_helper_funcs - driver callbacks for the fbdev emulation library
82
 *
82
 *
83
 * Driver callbacks used by the fbdev emulation helper library.
83
 * Driver callbacks used by the fbdev emulation helper library.
84
 */
84
 */
85
struct drm_fb_helper_funcs {
85
struct drm_fb_helper_funcs {
86
	/**
86
	/**
87
	 * @gamma_set:
87
	 * @gamma_set:
88
	 *
88
	 *
89
	 * Set the given gamma LUT register on the given CRTC.
89
	 * Set the given gamma LUT register on the given CRTC.
90
	 *
90
	 *
91
	 * This callback is optional.
91
	 * This callback is optional.
92
	 *
92
	 *
93
	 * FIXME:
93
	 * FIXME:
94
	 *
94
	 *
95
	 * This callback is functionally redundant with the core gamma table
95
	 * This callback is functionally redundant with the core gamma table
96
	 * support and simply exists because the fbdev hasn't yet been
96
	 * support and simply exists because the fbdev hasn't yet been
97
	 * refactored to use the core gamma table interfaces.
97
	 * refactored to use the core gamma table interfaces.
98
	 */
98
	 */
99
	void (*gamma_set)(struct drm_crtc *crtc, u16 red, u16 green,
99
	void (*gamma_set)(struct drm_crtc *crtc, u16 red, u16 green,
100
			  u16 blue, int regno);
100
			  u16 blue, int regno);
101
	/**
101
	/**
102
	 * @gamma_get:
102
	 * @gamma_get:
103
	 *
103
	 *
104
	 * Read the given gamma LUT register on the given CRTC, used to save the
104
	 * Read the given gamma LUT register on the given CRTC, used to save the
105
	 * current LUT when force-restoring the fbdev for e.g. kdbg.
105
	 * current LUT when force-restoring the fbdev for e.g. kdbg.
106
	 *
106
	 *
107
	 * This callback is optional.
107
	 * This callback is optional.
108
	 *
108
	 *
109
	 * FIXME:
109
	 * FIXME:
110
	 *
110
	 *
111
	 * This callback is functionally redundant with the core gamma table
111
	 * This callback is functionally redundant with the core gamma table
112
	 * support and simply exists because the fbdev hasn't yet been
112
	 * support and simply exists because the fbdev hasn't yet been
113
	 * refactored to use the core gamma table interfaces.
113
	 * refactored to use the core gamma table interfaces.
114
	 */
114
	 */
115
	void (*gamma_get)(struct drm_crtc *crtc, u16 *red, u16 *green,
115
	void (*gamma_get)(struct drm_crtc *crtc, u16 *red, u16 *green,
116
			  u16 *blue, int regno);
116
			  u16 *blue, int regno);
117
 
117
 
118
	/**
118
	/**
119
	 * @fb_probe:
119
	 * @fb_probe:
120
	 *
120
	 *
121
	 * Driver callback to allocate and initialize the fbdev info structure.
121
	 * Driver callback to allocate and initialize the fbdev info structure.
122
	 * Furthermore it also needs to allocate the DRM framebuffer used to
122
	 * Furthermore it also needs to allocate the DRM framebuffer used to
123
	 * back the fbdev.
123
	 * back the fbdev.
124
	 *
124
	 *
125
	 * This callback is mandatory.
125
	 * This callback is mandatory.
126
	 *
126
	 *
127
	 * RETURNS:
127
	 * RETURNS:
128
	 *
128
	 *
129
	 * The driver should return 0 on success and a negative error code on
129
	 * The driver should return 0 on success and a negative error code on
130
	 * failure.
130
	 * failure.
131
	 */
131
	 */
132
	int (*fb_probe)(struct drm_fb_helper *helper,
132
	int (*fb_probe)(struct drm_fb_helper *helper,
133
			struct drm_fb_helper_surface_size *sizes);
133
			struct drm_fb_helper_surface_size *sizes);
134
 
134
 
135
	/**
135
	/**
136
	 * @initial_config:
136
	 * @initial_config:
137
	 *
137
	 *
138
	 * Driver callback to setup an initial fbdev display configuration.
138
	 * Driver callback to setup an initial fbdev display configuration.
139
	 * Drivers can use this callback to tell the fbdev emulation what the
139
	 * Drivers can use this callback to tell the fbdev emulation what the
140
	 * preferred initial configuration is. This is useful to implement
140
	 * preferred initial configuration is. This is useful to implement
141
	 * smooth booting where the fbdev (and subsequently all userspace) never
141
	 * smooth booting where the fbdev (and subsequently all userspace) never
142
	 * changes the mode, but always inherits the existing configuration.
142
	 * changes the mode, but always inherits the existing configuration.
143
	 *
143
	 *
144
	 * This callback is optional.
144
	 * This callback is optional.
145
	 *
145
	 *
146
	 * RETURNS:
146
	 * RETURNS:
147
	 *
147
	 *
148
	 * The driver should return true if a suitable initial configuration has
148
	 * The driver should return true if a suitable initial configuration has
149
	 * been filled out and false when the fbdev helper should fall back to
149
	 * been filled out and false when the fbdev helper should fall back to
150
	 * the default probing logic.
150
	 * the default probing logic.
151
	 */
151
	 */
152
	bool (*initial_config)(struct drm_fb_helper *fb_helper,
152
	bool (*initial_config)(struct drm_fb_helper *fb_helper,
153
			       struct drm_fb_helper_crtc **crtcs,
153
			       struct drm_fb_helper_crtc **crtcs,
154
			       struct drm_display_mode **modes,
154
			       struct drm_display_mode **modes,
155
			       struct drm_fb_offset *offsets,
155
			       struct drm_fb_offset *offsets,
156
			       bool *enabled, int width, int height);
156
			       bool *enabled, int width, int height);
157
};
157
};
158
 
158
 
159
struct drm_fb_helper_connector {
159
struct drm_fb_helper_connector {
160
	struct drm_connector *connector;
160
	struct drm_connector *connector;
161
};
161
};
162
 
162
 
163
/**
163
/**
164
 * struct drm_fb_helper - main structure to emulate fbdev on top of KMS
164
 * struct drm_fb_helper - main structure to emulate fbdev on top of KMS
165
 * @fb:  Scanout framebuffer object
165
 * @fb: Scanout framebuffer object
166
 * @dev:  DRM device
166
 * @dev: DRM device
167
 * @crtc_count: number of possible CRTCs
167
 * @crtc_count: number of possible CRTCs
168
 * @crtc_info: per-CRTC helper state (mode, x/y offset, etc)
168
 * @crtc_info: per-CRTC helper state (mode, x/y offset, etc)
169
 * @connector_count: number of connected connectors
169
 * @connector_count: number of connected connectors
170
 * @connector_info_alloc_count: size of connector_info
170
 * @connector_info_alloc_count: size of connector_info
171
 * @connector_info: array of per-connector information
171
 * @connector_info: array of per-connector information
172
 * @funcs: driver callbacks for fb helper
172
 * @funcs: driver callbacks for fb helper
173
 * @fbdev: emulated fbdev device info struct
173
 * @fbdev: emulated fbdev device info struct
174
 * @pseudo_palette: fake palette of 16 colors
174
 * @pseudo_palette: fake palette of 16 colors
175
 *
175
 *
176
 * This is the main structure used by the fbdev helpers. Drivers supporting
176
 * This is the main structure used by the fbdev helpers. Drivers supporting
177
 * fbdev emulation should embedded this into their overall driver structure.
177
 * fbdev emulation should embedded this into their overall driver structure.
178
 * Drivers must also fill out a struct &drm_fb_helper_funcs with a few
178
 * Drivers must also fill out a struct &drm_fb_helper_funcs with a few
179
 * operations.
179
 * operations.
180
 */
180
 */
181
struct drm_fb_helper {
181
struct drm_fb_helper {
182
	struct drm_framebuffer *fb;
182
	struct drm_framebuffer *fb;
183
	struct drm_device *dev;
183
	struct drm_device *dev;
184
	int crtc_count;
184
	int crtc_count;
185
	struct drm_fb_helper_crtc *crtc_info;
185
	struct drm_fb_helper_crtc *crtc_info;
186
	int connector_count;
186
	int connector_count;
187
	int connector_info_alloc_count;
187
	int connector_info_alloc_count;
188
	struct drm_fb_helper_connector **connector_info;
188
	struct drm_fb_helper_connector **connector_info;
189
	const struct drm_fb_helper_funcs *funcs;
189
	const struct drm_fb_helper_funcs *funcs;
190
	struct fb_info *fbdev;
190
	struct fb_info *fbdev;
191
	u32 pseudo_palette[17];
191
	u32 pseudo_palette[17];
192
 
192
 
193
	/**
193
	/**
194
	 * @kernel_fb_list:
194
	 * @kernel_fb_list:
195
	 *
195
	 *
196
	 * Entry on the global kernel_fb_helper_list, used for kgdb entry/exit.
196
	 * Entry on the global kernel_fb_helper_list, used for kgdb entry/exit.
197
	 */
197
	 */
198
	struct list_head kernel_fb_list;
198
	struct list_head kernel_fb_list;
199
 
199
 
200
	/**
200
	/**
201
	 * @delayed_hotplug:
201
	 * @delayed_hotplug:
202
	 *
202
	 *
203
	 * A hotplug was received while fbdev wasn't in control of the DRM
203
	 * A hotplug was received while fbdev wasn't in control of the DRM
204
	 * device, i.e. another KMS master was active. The output configuration
204
	 * device, i.e. another KMS master was active. The output configuration
205
	 * needs to be reprobe when fbdev is in control again.
205
	 * needs to be reprobe when fbdev is in control again.
206
	 */
206
	 */
207
	bool delayed_hotplug;
207
	bool delayed_hotplug;
208
 
208
 
209
	/**
209
	/**
210
	 * @atomic:
210
	 * @atomic:
211
	 *
211
	 *
212
	 * Use atomic updates for restore_fbdev_mode(), etc.  This defaults to
212
	 * Use atomic updates for restore_fbdev_mode(), etc.  This defaults to
213
	 * true if driver has DRIVER_ATOMIC feature flag, but drivers can
213
	 * true if driver has DRIVER_ATOMIC feature flag, but drivers can
214
	 * override it to true after drm_fb_helper_init() if they support atomic
214
	 * override it to true after drm_fb_helper_init() if they support atomic
215
	 * modeset but do not yet advertise DRIVER_ATOMIC (note that fb-helper
215
	 * modeset but do not yet advertise DRIVER_ATOMIC (note that fb-helper
216
	 * does not require ASYNC commits).
216
	 * does not require ASYNC commits).
217
	 */
217
	 */
218
	bool atomic;
218
	bool atomic;
219
};
219
};
220
 
220
 
221
#ifdef CONFIG_DRM_FBDEV_EMULATION
221
#ifdef CONFIG_DRM_FBDEV_EMULATION
-
 
222
int drm_fb_helper_modinit(void);
222
void drm_fb_helper_prepare(struct drm_device *dev, struct drm_fb_helper *helper,
223
void drm_fb_helper_prepare(struct drm_device *dev, struct drm_fb_helper *helper,
223
			   const struct drm_fb_helper_funcs *funcs);
224
			   const struct drm_fb_helper_funcs *funcs);
224
int drm_fb_helper_init(struct drm_device *dev,
225
int drm_fb_helper_init(struct drm_device *dev,
225
		       struct drm_fb_helper *helper, int crtc_count,
226
		       struct drm_fb_helper *helper, int crtc_count,
226
		       int max_conn);
227
		       int max_conn);
227
void drm_fb_helper_fini(struct drm_fb_helper *helper);
228
void drm_fb_helper_fini(struct drm_fb_helper *helper);
228
int drm_fb_helper_blank(int blank, struct fb_info *info);
229
int drm_fb_helper_blank(int blank, struct fb_info *info);
229
int drm_fb_helper_pan_display(struct fb_var_screeninfo *var,
230
int drm_fb_helper_pan_display(struct fb_var_screeninfo *var,
230
			      struct fb_info *info);
231
			      struct fb_info *info);
231
int drm_fb_helper_set_par(struct fb_info *info);
232
int drm_fb_helper_set_par(struct fb_info *info);
232
int drm_fb_helper_check_var(struct fb_var_screeninfo *var,
233
int drm_fb_helper_check_var(struct fb_var_screeninfo *var,
233
			    struct fb_info *info);
234
			    struct fb_info *info);
234
 
235
 
235
int drm_fb_helper_restore_fbdev_mode_unlocked(struct drm_fb_helper *fb_helper);
236
int drm_fb_helper_restore_fbdev_mode_unlocked(struct drm_fb_helper *fb_helper);
236
 
237
 
237
struct fb_info *drm_fb_helper_alloc_fbi(struct drm_fb_helper *fb_helper);
238
struct fb_info *drm_fb_helper_alloc_fbi(struct drm_fb_helper *fb_helper);
238
void drm_fb_helper_unregister_fbi(struct drm_fb_helper *fb_helper);
239
void drm_fb_helper_unregister_fbi(struct drm_fb_helper *fb_helper);
239
void drm_fb_helper_release_fbi(struct drm_fb_helper *fb_helper);
240
void drm_fb_helper_release_fbi(struct drm_fb_helper *fb_helper);
240
void drm_fb_helper_fill_var(struct fb_info *info, struct drm_fb_helper *fb_helper,
241
void drm_fb_helper_fill_var(struct fb_info *info, struct drm_fb_helper *fb_helper,
241
			    uint32_t fb_width, uint32_t fb_height);
242
			    uint32_t fb_width, uint32_t fb_height);
242
void drm_fb_helper_fill_fix(struct fb_info *info, uint32_t pitch,
243
void drm_fb_helper_fill_fix(struct fb_info *info, uint32_t pitch,
243
			    uint32_t depth);
244
			    uint32_t depth);
244
 
245
 
245
void drm_fb_helper_unlink_fbi(struct drm_fb_helper *fb_helper);
246
void drm_fb_helper_unlink_fbi(struct drm_fb_helper *fb_helper);
246
 
247
 
247
ssize_t drm_fb_helper_sys_read(struct fb_info *info, char __user *buf,
248
ssize_t drm_fb_helper_sys_read(struct fb_info *info, char __user *buf,
248
			       size_t count, loff_t *ppos);
249
			       size_t count, loff_t *ppos);
249
ssize_t drm_fb_helper_sys_write(struct fb_info *info, const char __user *buf,
250
ssize_t drm_fb_helper_sys_write(struct fb_info *info, const char __user *buf,
250
				size_t count, loff_t *ppos);
251
				size_t count, loff_t *ppos);
251
 
252
 
252
void drm_fb_helper_sys_fillrect(struct fb_info *info,
253
void drm_fb_helper_sys_fillrect(struct fb_info *info,
253
				const struct fb_fillrect *rect);
254
				const struct fb_fillrect *rect);
254
void drm_fb_helper_sys_copyarea(struct fb_info *info,
255
void drm_fb_helper_sys_copyarea(struct fb_info *info,
255
				const struct fb_copyarea *area);
256
				const struct fb_copyarea *area);
256
void drm_fb_helper_sys_imageblit(struct fb_info *info,
257
void drm_fb_helper_sys_imageblit(struct fb_info *info,
257
				 const struct fb_image *image);
258
				 const struct fb_image *image);
258
 
259
 
259
void drm_fb_helper_cfb_fillrect(struct fb_info *info,
260
void drm_fb_helper_cfb_fillrect(struct fb_info *info,
260
				const struct fb_fillrect *rect);
261
				const struct fb_fillrect *rect);
261
void drm_fb_helper_cfb_copyarea(struct fb_info *info,
262
void drm_fb_helper_cfb_copyarea(struct fb_info *info,
262
				const struct fb_copyarea *area);
263
				const struct fb_copyarea *area);
263
void drm_fb_helper_cfb_imageblit(struct fb_info *info,
264
void drm_fb_helper_cfb_imageblit(struct fb_info *info,
264
				 const struct fb_image *image);
265
				 const struct fb_image *image);
265
 
266
 
266
void drm_fb_helper_set_suspend(struct drm_fb_helper *fb_helper, int state);
267
void drm_fb_helper_set_suspend(struct drm_fb_helper *fb_helper, int state);
267
 
268
 
268
int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info);
269
int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info);
269
 
270
 
270
int drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper);
271
int drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper);
271
int drm_fb_helper_initial_config(struct drm_fb_helper *fb_helper, int bpp_sel);
272
int drm_fb_helper_initial_config(struct drm_fb_helper *fb_helper, int bpp_sel);
272
int drm_fb_helper_single_add_all_connectors(struct drm_fb_helper *fb_helper);
273
int drm_fb_helper_single_add_all_connectors(struct drm_fb_helper *fb_helper);
273
int drm_fb_helper_debug_enter(struct fb_info *info);
274
int drm_fb_helper_debug_enter(struct fb_info *info);
274
int drm_fb_helper_debug_leave(struct fb_info *info);
275
int drm_fb_helper_debug_leave(struct fb_info *info);
275
struct drm_display_mode *
276
struct drm_display_mode *
276
drm_has_preferred_mode(struct drm_fb_helper_connector *fb_connector,
277
drm_has_preferred_mode(struct drm_fb_helper_connector *fb_connector,
277
			int width, int height);
278
			int width, int height);
278
struct drm_display_mode *
279
struct drm_display_mode *
279
drm_pick_cmdline_mode(struct drm_fb_helper_connector *fb_helper_conn,
280
drm_pick_cmdline_mode(struct drm_fb_helper_connector *fb_helper_conn,
280
		      int width, int height);
281
		      int width, int height);
281
 
282
 
282
int drm_fb_helper_add_one_connector(struct drm_fb_helper *fb_helper, struct drm_connector *connector);
283
int drm_fb_helper_add_one_connector(struct drm_fb_helper *fb_helper, struct drm_connector *connector);
283
int drm_fb_helper_remove_one_connector(struct drm_fb_helper *fb_helper,
284
int drm_fb_helper_remove_one_connector(struct drm_fb_helper *fb_helper,
284
				       struct drm_connector *connector);
285
				       struct drm_connector *connector);
285
#else
286
#else
-
 
287
static inline int drm_fb_helper_modinit(void)
-
 
288
{
-
 
289
	return 0;
-
 
290
}
-
 
291
 
286
static inline void drm_fb_helper_prepare(struct drm_device *dev,
292
static inline void drm_fb_helper_prepare(struct drm_device *dev,
287
					struct drm_fb_helper *helper,
293
					struct drm_fb_helper *helper,
288
					const struct drm_fb_helper_funcs *funcs)
294
					const struct drm_fb_helper_funcs *funcs)
289
{
295
{
290
}
296
}
291
 
297
 
292
static inline int drm_fb_helper_init(struct drm_device *dev,
298
static inline int drm_fb_helper_init(struct drm_device *dev,
293
		       struct drm_fb_helper *helper, int crtc_count,
299
		       struct drm_fb_helper *helper, int crtc_count,
294
		       int max_conn)
300
		       int max_conn)
295
{
301
{
296
	return 0;
302
	return 0;
297
}
303
}
298
 
304
 
299
static inline void drm_fb_helper_fini(struct drm_fb_helper *helper)
305
static inline void drm_fb_helper_fini(struct drm_fb_helper *helper)
300
{
306
{
301
}
307
}
302
 
308
 
303
static inline int drm_fb_helper_blank(int blank, struct fb_info *info)
309
static inline int drm_fb_helper_blank(int blank, struct fb_info *info)
304
{
310
{
305
	return 0;
311
	return 0;
306
}
312
}
307
 
313
 
308
static inline int drm_fb_helper_pan_display(struct fb_var_screeninfo *var,
314
static inline int drm_fb_helper_pan_display(struct fb_var_screeninfo *var,
309
					    struct fb_info *info)
315
					    struct fb_info *info)
310
{
316
{
311
	return 0;
317
	return 0;
312
}
318
}
313
 
319
 
314
static inline int drm_fb_helper_set_par(struct fb_info *info)
320
static inline int drm_fb_helper_set_par(struct fb_info *info)
315
{
321
{
316
	return 0;
322
	return 0;
317
}
323
}
318
 
324
 
319
static inline int drm_fb_helper_check_var(struct fb_var_screeninfo *var,
325
static inline int drm_fb_helper_check_var(struct fb_var_screeninfo *var,
320
					  struct fb_info *info)
326
					  struct fb_info *info)
321
{
327
{
322
	return 0;
328
	return 0;
323
}
329
}
324
 
330
 
325
static inline int
331
static inline int
326
drm_fb_helper_restore_fbdev_mode_unlocked(struct drm_fb_helper *fb_helper)
332
drm_fb_helper_restore_fbdev_mode_unlocked(struct drm_fb_helper *fb_helper)
327
{
333
{
328
	return 0;
334
	return 0;
329
}
335
}
330
 
336
 
331
static inline struct fb_info *
337
static inline struct fb_info *
332
drm_fb_helper_alloc_fbi(struct drm_fb_helper *fb_helper)
338
drm_fb_helper_alloc_fbi(struct drm_fb_helper *fb_helper)
333
{
339
{
334
	return NULL;
340
	return NULL;
335
}
341
}
336
 
342
 
337
static inline void drm_fb_helper_unregister_fbi(struct drm_fb_helper *fb_helper)
343
static inline void drm_fb_helper_unregister_fbi(struct drm_fb_helper *fb_helper)
338
{
344
{
339
}
345
}
340
static inline void drm_fb_helper_release_fbi(struct drm_fb_helper *fb_helper)
346
static inline void drm_fb_helper_release_fbi(struct drm_fb_helper *fb_helper)
341
{
347
{
342
}
348
}
343
 
349
 
344
static inline void drm_fb_helper_fill_var(struct fb_info *info,
350
static inline void drm_fb_helper_fill_var(struct fb_info *info,
345
					  struct drm_fb_helper *fb_helper,
351
					  struct drm_fb_helper *fb_helper,
346
					  uint32_t fb_width, uint32_t fb_height)
352
					  uint32_t fb_width, uint32_t fb_height)
347
{
353
{
348
}
354
}
349
 
355
 
350
static inline void drm_fb_helper_fill_fix(struct fb_info *info, uint32_t pitch,
356
static inline void drm_fb_helper_fill_fix(struct fb_info *info, uint32_t pitch,
351
					  uint32_t depth)
357
					  uint32_t depth)
352
{
358
{
353
}
359
}
354
 
360
 
355
static inline int drm_fb_helper_setcmap(struct fb_cmap *cmap,
361
static inline int drm_fb_helper_setcmap(struct fb_cmap *cmap,
356
					struct fb_info *info)
362
					struct fb_info *info)
357
{
363
{
358
	return 0;
364
	return 0;
359
}
365
}
360
 
366
 
361
static inline void drm_fb_helper_unlink_fbi(struct drm_fb_helper *fb_helper)
367
static inline void drm_fb_helper_unlink_fbi(struct drm_fb_helper *fb_helper)
362
{
368
{
363
}
369
}
364
 
370
 
365
static inline ssize_t drm_fb_helper_sys_read(struct fb_info *info,
371
static inline ssize_t drm_fb_helper_sys_read(struct fb_info *info,
366
					     char __user *buf, size_t count,
372
					     char __user *buf, size_t count,
367
					     loff_t *ppos)
373
					     loff_t *ppos)
368
{
374
{
369
	return -ENODEV;
375
	return -ENODEV;
370
}
376
}
371
 
377
 
372
static inline ssize_t drm_fb_helper_sys_write(struct fb_info *info,
378
static inline ssize_t drm_fb_helper_sys_write(struct fb_info *info,
373
					      const char __user *buf,
379
					      const char __user *buf,
374
					      size_t count, loff_t *ppos)
380
					      size_t count, loff_t *ppos)
375
{
381
{
376
	return -ENODEV;
382
	return -ENODEV;
377
}
383
}
378
 
384
 
379
static inline void drm_fb_helper_sys_fillrect(struct fb_info *info,
385
static inline void drm_fb_helper_sys_fillrect(struct fb_info *info,
380
					      const struct fb_fillrect *rect)
386
					      const struct fb_fillrect *rect)
381
{
387
{
382
}
388
}
383
 
389
 
384
static inline void drm_fb_helper_sys_copyarea(struct fb_info *info,
390
static inline void drm_fb_helper_sys_copyarea(struct fb_info *info,
385
					      const struct fb_copyarea *area)
391
					      const struct fb_copyarea *area)
386
{
392
{
387
}
393
}
388
 
394
 
389
static inline void drm_fb_helper_sys_imageblit(struct fb_info *info,
395
static inline void drm_fb_helper_sys_imageblit(struct fb_info *info,
390
					       const struct fb_image *image)
396
					       const struct fb_image *image)
391
{
397
{
392
}
398
}
393
 
399
 
394
static inline void drm_fb_helper_cfb_fillrect(struct fb_info *info,
400
static inline void drm_fb_helper_cfb_fillrect(struct fb_info *info,
395
					      const struct fb_fillrect *rect)
401
					      const struct fb_fillrect *rect)
396
{
402
{
397
}
403
}
398
 
404
 
399
static inline void drm_fb_helper_cfb_copyarea(struct fb_info *info,
405
static inline void drm_fb_helper_cfb_copyarea(struct fb_info *info,
400
					      const struct fb_copyarea *area)
406
					      const struct fb_copyarea *area)
401
{
407
{
402
}
408
}
403
 
409
 
404
static inline void drm_fb_helper_cfb_imageblit(struct fb_info *info,
410
static inline void drm_fb_helper_cfb_imageblit(struct fb_info *info,
405
					       const struct fb_image *image)
411
					       const struct fb_image *image)
406
{
412
{
407
}
413
}
408
 
414
 
409
static inline void drm_fb_helper_set_suspend(struct drm_fb_helper *fb_helper,
415
static inline void drm_fb_helper_set_suspend(struct drm_fb_helper *fb_helper,
410
					     int state)
416
					     int state)
411
{
417
{
412
}
418
}
413
 
419
 
414
static inline int drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper)
420
static inline int drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper)
415
{
421
{
416
	return 0;
422
	return 0;
417
}
423
}
418
 
424
 
419
static inline int drm_fb_helper_initial_config(struct drm_fb_helper *fb_helper,
425
static inline int drm_fb_helper_initial_config(struct drm_fb_helper *fb_helper,
420
					       int bpp_sel)
426
					       int bpp_sel)
421
{
427
{
422
	return 0;
428
	return 0;
423
}
429
}
424
 
430
 
425
static inline int
431
static inline int
426
drm_fb_helper_single_add_all_connectors(struct drm_fb_helper *fb_helper)
432
drm_fb_helper_single_add_all_connectors(struct drm_fb_helper *fb_helper)
427
{
433
{
428
	return 0;
434
	return 0;
429
}
435
}
430
 
436
 
431
static inline int drm_fb_helper_debug_enter(struct fb_info *info)
437
static inline int drm_fb_helper_debug_enter(struct fb_info *info)
432
{
438
{
433
	return 0;
439
	return 0;
434
}
440
}
435
 
441
 
436
static inline int drm_fb_helper_debug_leave(struct fb_info *info)
442
static inline int drm_fb_helper_debug_leave(struct fb_info *info)
437
{
443
{
438
	return 0;
444
	return 0;
439
}
445
}
440
 
446
 
441
static inline struct drm_display_mode *
447
static inline struct drm_display_mode *
442
drm_has_preferred_mode(struct drm_fb_helper_connector *fb_connector,
448
drm_has_preferred_mode(struct drm_fb_helper_connector *fb_connector,
443
		       int width, int height)
449
		       int width, int height)
444
{
450
{
445
	return NULL;
451
	return NULL;
446
}
452
}
447
 
453
 
448
static inline struct drm_display_mode *
454
static inline struct drm_display_mode *
449
drm_pick_cmdline_mode(struct drm_fb_helper_connector *fb_helper_conn,
455
drm_pick_cmdline_mode(struct drm_fb_helper_connector *fb_helper_conn,
450
		      int width, int height)
456
		      int width, int height)
451
{
457
{
452
	return NULL;
458
	return NULL;
453
}
459
}
454
 
460
 
455
static inline int
461
static inline int
456
drm_fb_helper_add_one_connector(struct drm_fb_helper *fb_helper,
462
drm_fb_helper_add_one_connector(struct drm_fb_helper *fb_helper,
457
				struct drm_connector *connector)
463
				struct drm_connector *connector)
458
{
464
{
459
	return 0;
465
	return 0;
460
}
466
}
461
 
467
 
462
static inline int
468
static inline int
463
drm_fb_helper_remove_one_connector(struct drm_fb_helper *fb_helper,
469
drm_fb_helper_remove_one_connector(struct drm_fb_helper *fb_helper,
464
				   struct drm_connector *connector)
470
				   struct drm_connector *connector)
465
{
471
{
466
	return 0;
472
	return 0;
467
}
473
}
468
#endif
474
#endif
469
#endif
475
#endif