diff options
author | Jesse Barnes <jbarnes@virtuousgeek.org> | 2010-08-02 15:05:41 -0400 |
---|---|---|
committer | Jason Wessel <jason.wessel@windriver.com> | 2010-08-05 10:22:31 -0400 |
commit | d219adc1228a3887486b58a430e736b0831f192c (patch) | |
tree | a734e48a573774201ab8c6c06ff6eb6de60648f1 /drivers/video/console/fbcon.c | |
parent | 408a4be1f8cbee511895ee07da2a007a5a24303f (diff) |
fb: add hooks to handle KDB enter/exit
Add fb ops to handle enter/exit of the kernel debugger. If present, the
fb core will register them with KGDB and they'll be called when the
debugger is entered and exited. The new functions are responsible for
switching to an appropriate debug framebuffer and restoring the
interrupted state at exit time.
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
Diffstat (limited to 'drivers/video/console/fbcon.c')
-rw-r--r-- | drivers/video/console/fbcon.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c index b0a3fa00706d..3b3f5749af92 100644 --- a/drivers/video/console/fbcon.c +++ b/drivers/video/console/fbcon.c | |||
@@ -2342,6 +2342,30 @@ static int fbcon_blank(struct vc_data *vc, int blank, int mode_switch) | |||
2342 | return 0; | 2342 | return 0; |
2343 | } | 2343 | } |
2344 | 2344 | ||
2345 | static int fbcon_debug_enter(struct vc_data *vc) | ||
2346 | { | ||
2347 | struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; | ||
2348 | struct fbcon_ops *ops = info->fbcon_par; | ||
2349 | |||
2350 | ops->save_graphics = ops->graphics; | ||
2351 | ops->graphics = 0; | ||
2352 | if (info->fbops->fb_debug_enter) | ||
2353 | info->fbops->fb_debug_enter(info); | ||
2354 | fbcon_set_palette(vc, color_table); | ||
2355 | return 0; | ||
2356 | } | ||
2357 | |||
2358 | static int fbcon_debug_leave(struct vc_data *vc) | ||
2359 | { | ||
2360 | struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; | ||
2361 | struct fbcon_ops *ops = info->fbcon_par; | ||
2362 | |||
2363 | ops->graphics = ops->save_graphics; | ||
2364 | if (info->fbops->fb_debug_leave) | ||
2365 | info->fbops->fb_debug_leave(info); | ||
2366 | return 0; | ||
2367 | } | ||
2368 | |||
2345 | static int fbcon_get_font(struct vc_data *vc, struct console_font *font) | 2369 | static int fbcon_get_font(struct vc_data *vc, struct console_font *font) |
2346 | { | 2370 | { |
2347 | u8 *fontdata = vc->vc_font.data; | 2371 | u8 *fontdata = vc->vc_font.data; |
@@ -3276,6 +3300,8 @@ static const struct consw fb_con = { | |||
3276 | .con_screen_pos = fbcon_screen_pos, | 3300 | .con_screen_pos = fbcon_screen_pos, |
3277 | .con_getxy = fbcon_getxy, | 3301 | .con_getxy = fbcon_getxy, |
3278 | .con_resize = fbcon_resize, | 3302 | .con_resize = fbcon_resize, |
3303 | .con_debug_enter = fbcon_debug_enter, | ||
3304 | .con_debug_leave = fbcon_debug_leave, | ||
3279 | }; | 3305 | }; |
3280 | 3306 | ||
3281 | static struct notifier_block fbcon_event_notifier = { | 3307 | static struct notifier_block fbcon_event_notifier = { |