From: "Jan Beulich" <JBeulich@novell.com>
To: <linux-kernel@vger.kernel.org>
Subject: [PATCH 10/39] NLKD - console layout change notification
Date: Wed, 09 Nov 2005 15:05:08 +0100 [thread overview]
Message-ID: <43721024.76F0.0078.0@novell.com> (raw)
In-Reply-To: 43720FF6.76F0.0078.0@novell.com
[-- Attachment #1: Type: text/plain, Size: 192 bytes --]
A mechanism to allow (local) debuggers to learn about changes to the
console layout, to adapt their internal state.
Signed-Off-By: Jan Beulich <jbeulich@novell.com>
(actual patch attached)
[-- Attachment #2: linux-2.6.14-nlkd-notify-console.patch --]
[-- Type: application/octet-stream, Size: 8873 bytes --]
A mechanism to allow (local) debuggers to learn about changes to the
console layout, to adapt their internal state.
Signed-Off-By: Jan Beulich <jbeulich@novell.com>
Index: 2.6.14-nlkd/drivers/video/console/fbcon.c
===================================================================
--- 2.6.14-nlkd.orig/drivers/video/console/fbcon.c 2005-11-09 10:40:17.000000000 +0100
+++ 2.6.14-nlkd/drivers/video/console/fbcon.c 2005-11-07 12:09:42.000000000 +0100
@@ -107,7 +107,7 @@ enum {
};
struct display fb_display[MAX_NR_CONSOLES];
-static signed char con2fb_map[MAX_NR_CONSOLES];
+signed char con2fb_map[MAX_NR_CONSOLES];
static signed char con2fb_map_boot[MAX_NR_CONSOLES];
static int logo_height;
static int logo_lines;
@@ -211,6 +211,16 @@ static inline int fbcon_is_inactive(stru
vc->vc_mode != KD_TEXT || ops->graphics);
}
+static inline int fbcon_set_par(struct fb_info *info)
+{
+ if (info->fbops->fb_set_par) {
+ if (fb_notify_clients(FB_EVENT_PRE_MODE_CHANGE, info, &info->var) == NOTIFY_BAD)
+ return -EINVAL;
+ info->fbops->fb_set_par(info);
+ }
+ return 0;
+}
+
static inline int get_color(struct vc_data *vc, struct fb_info *info,
u16 c, int is_fg)
{
@@ -623,15 +633,19 @@ static int con2fb_release_oldinfo(struct
return err;
}
-static void con2fb_init_display(struct vc_data *vc, struct fb_info *info,
+static int con2fb_init_display(struct vc_data *vc, struct fb_info *info,
int unit, int show_logo)
{
struct fbcon_ops *ops = info->fbcon_par;
ops->currcon = fg_console;
- if (info->fbops->fb_set_par && !(ops->flags & FBCON_FLAGS_INIT))
- info->fbops->fb_set_par(info);
+ if (!(ops->flags & FBCON_FLAGS_INIT)) {
+ int err = fbcon_set_par(info);
+
+ if (err)
+ return err;
+ }
ops->flags |= FBCON_FLAGS_INIT;
ops->graphics = 0;
@@ -652,6 +666,7 @@ static void con2fb_init_display(struct v
}
update_screen(vc_cons[fg_console].d);
+ return 0;
}
/**
@@ -708,7 +723,7 @@ static int set_con2fb_map(int unit, int
if (!found)
fbcon_add_cursor_timer(info);
con2fb_map_boot[unit] = newidx;
- con2fb_init_display(vc, info, unit, show_logo);
+ err = con2fb_init_display(vc, info, unit, show_logo);
}
release_console_sem();
@@ -980,9 +995,8 @@ static void fbcon_init(struct vc_data *v
* We need to do it in fbcon_init() to prevent screen corruption.
*/
if (CON_IS_VISIBLE(vc)) {
- if (info->fbops->fb_set_par &&
- !(ops->flags & FBCON_FLAGS_INIT))
- info->fbops->fb_set_par(info);
+ if (!(ops->flags & FBCON_FLAGS_INIT) && fbcon_set_par(info) != 0)
+ return;
ops->flags |= FBCON_FLAGS_INIT;
}
@@ -1988,8 +2002,8 @@ static int fbcon_switch(struct vc_data *
fb_set_var(info, &var);
if (old_info != NULL && old_info != info) {
- if (info->fbops->fb_set_par)
- info->fbops->fb_set_par(info);
+ if (fbcon_set_par(info) != 0)
+ return 0;
fbcon_del_cursor_timer(old_info);
fbcon_add_cursor_timer(info);
}
@@ -2848,6 +2862,12 @@ static const struct consw fb_con = {
.con_resize = fbcon_resize,
};
+int is_fb_con(const struct consw *con)
+{
+ return con == &fb_con;
+}
+EXPORT_SYMBOL(is_fb_con);
+
static struct notifier_block fbcon_event_notifier = {
.notifier_call = fbcon_event_notify,
};
@@ -2892,4 +2912,6 @@ module_exit(fb_console_exit);
#endif
+EXPORT_SYMBOL(con2fb_map);
+
MODULE_LICENSE("GPL");
Index: 2.6.14-nlkd/drivers/video/console/fbcon.h
===================================================================
--- 2.6.14-nlkd.orig/drivers/video/console/fbcon.h 2005-11-09 10:40:17.000000000 +0100
+++ 2.6.14-nlkd/drivers/video/console/fbcon.h 2005-11-07 10:07:01.000000000 +0100
@@ -168,4 +168,7 @@ extern void fbcon_set_tileops(struct vc_
#endif
extern void fbcon_set_bitops(struct fbcon_ops *ops);
+extern int is_fb_con(const struct consw *);
+extern signed char con2fb_map[];
+
#endif /* _VIDEO_FBCON_H */
Index: 2.6.14-nlkd/drivers/video/console/vgacon.c
===================================================================
--- 2.6.14-nlkd.orig/drivers/video/console/vgacon.c 2005-11-09 10:40:17.000000000 +0100
+++ 2.6.14-nlkd/drivers/video/console/vgacon.c 2005-11-04 16:19:34.000000000 +0100
@@ -114,6 +114,8 @@ static int vga_video_font_height;
static int vga_scan_lines;
static unsigned int vga_rolled_over = 0;
+static struct notifier_block *vga_notifier_list;
+
static int __init no_scroll(char *str)
{
/*
@@ -962,6 +964,9 @@ static int vgacon_adjust_height(struct v
outb_p(fsr, vga_video_port_val);
outb_p(0x12, vga_video_port_reg); /* Vertical display limit */
outb_p(vde, vga_video_port_val);
+ notifier_call_chain(&vga_notifier_list,
+ VGACON_EVENT_PRE_ADJUST_HEIGHT | (vga_font_is_default ? VGACON_MC_DEFAULT_FONT : 0),
+ (void*)(long)rows);
spin_unlock_irq(&vga_lock);
for (i = 0; i < MAX_NR_CONSOLES; i++) {
@@ -1185,4 +1190,16 @@ const struct consw vga_con = {
.con_invert_region = vgacon_invert_region,
};
+int vgacon_register_client(struct notifier_block *nb)
+{
+ return notifier_chain_register(&vga_notifier_list, nb);
+}
+EXPORT_SYMBOL(vgacon_register_client);
+
+int vgacon_unregister_client(struct notifier_block *nb)
+{
+ return notifier_chain_unregister(&vga_notifier_list, nb);
+}
+EXPORT_SYMBOL(vgacon_unregister_client);
+
MODULE_LICENSE("GPL");
Index: 2.6.14-nlkd/drivers/video/fbmem.c
===================================================================
--- 2.6.14-nlkd.orig/drivers/video/fbmem.c 2005-11-09 10:40:17.000000000 +0100
+++ 2.6.14-nlkd/drivers/video/fbmem.c 2005-11-07 10:11:34.000000000 +0100
@@ -673,8 +673,17 @@ fb_set_var(struct fb_info *info, struct
if ((var->activate & FB_ACTIVATE_MASK) == FB_ACTIVATE_NOW) {
struct fb_videomode mode;
+ struct fb_event event;
int err = 0;
+ event.info = info;
+ event.data = var;
+ if (notifier_call_chain(&fb_notifier_list,
+ FB_EVENT_PRE_MODE_CHANGE,
+ &event) == NOTIFY_BAD)
+ return -EINVAL;
+
+
info->var = *var;
if (info->fbops->fb_set_par)
info->fbops->fb_set_par(info);
@@ -690,7 +699,6 @@ fb_set_var(struct fb_info *info, struct
err = fb_add_videomode(&mode, &info->modelist);
if (!err && (flags & FBINFO_MISC_USEREVENT)) {
- struct fb_event event;
int evnt = (var->activate & FB_ACTIVATE_ALL) ?
FB_EVENT_MODE_CHANGE_ALL :
FB_EVENT_MODE_CHANGE;
@@ -1117,6 +1125,21 @@ int fb_unregister_client(struct notifier
}
/**
+ * fb_notify_clients - notify all clients
+ * @what: event type
+ * @info: framebuffer affected
+ * @data: event specific data
+ */
+int fb_notify_clients(unsigned long what, struct fb_info *info, void *data)
+{
+ struct fb_event event;
+
+ event.info = info;
+ event.data = data;
+ return notifier_call_chain(&fb_notifier_list, what, &event);
+}
+
+/**
* fb_set_suspend - low level driver signals suspend
* @info: framebuffer affected
* @state: 0 = resuming, !=0 = suspending
@@ -1321,6 +1344,7 @@ EXPORT_SYMBOL(fb_get_buffer_offset);
EXPORT_SYMBOL(fb_set_suspend);
EXPORT_SYMBOL(fb_register_client);
EXPORT_SYMBOL(fb_unregister_client);
+EXPORT_SYMBOL(fb_notify_clients);
EXPORT_SYMBOL(fb_get_options);
EXPORT_SYMBOL(fb_new_modelist);
Index: 2.6.14-nlkd/include/linux/fb.h
===================================================================
--- 2.6.14-nlkd.orig/include/linux/fb.h 2005-11-09 10:40:17.000000000 +0100
+++ 2.6.14-nlkd/include/linux/fb.h 2005-11-09 10:28:14.000000000 +0100
@@ -475,6 +475,8 @@ struct fb_cursor_user {
* Register/unregister for framebuffer events
*/
+/* The resolution of the passed in fb_info is about to change */
+#define FB_EVENT_PRE_MODE_CHANGE 0x00
/* The resolution of the passed in fb_info about to change */
#define FB_EVENT_MODE_CHANGE 0x01
/* The display on this fb_info is beeing suspended, no access to the
@@ -509,6 +511,7 @@ struct fb_event {
extern int fb_register_client(struct notifier_block *nb);
extern int fb_unregister_client(struct notifier_block *nb);
+extern int fb_notify_clients(unsigned long, struct fb_info *, void *);
/*
* Pixmap structure definition
Index: 2.6.14-nlkd/include/video/vga.h
===================================================================
--- 2.6.14-nlkd.orig/include/video/vga.h 2005-11-09 10:40:17.000000000 +0100
+++ 2.6.14-nlkd/include/video/vga.h 2005-11-04 16:19:34.000000000 +0100
@@ -19,6 +19,7 @@
#include <linux/config.h>
#include <linux/types.h>
+#include <linux/notifier.h>
#include <asm/io.h>
#ifndef CONFIG_AMIGA
#include <asm/vga.h>
@@ -479,4 +480,12 @@ static inline void vga_mm_wattr (void __
vga_mm_w (regbase, VGA_ATT_W, val);
}
+#define VGACON_EVENT_PRE_ADJUST_HEIGHT 0x01
+
+#define VGACON_EVENT_FLAGS_MASK 0xff000000
+#define VGACON_MC_DEFAULT_FONT 0x80000000
+
+int vgacon_register_client(struct notifier_block *);
+int vgacon_unregister_client(struct notifier_block *);
+
#endif /* __linux_video_vga_h__ */
next prev parent reply other threads:[~2005-11-09 14:04 UTC|newest]
Thread overview: 105+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-11-09 13:54 [PATCH 0/39] NLKD - Novell Linux Kernel Debugger Jan Beulich
2005-11-09 13:56 ` [PATCH 1/39] NLKD - an alternative kallsyms approach Jan Beulich
2005-11-09 13:57 ` [PATCH 2/39] NLKD - an alternative early ioremap approach Jan Beulich
2005-11-09 13:58 ` [PATCH 3/39] NLKD - early/late CPU up/down notification Jan Beulich
2005-11-09 13:59 ` [PATCH 4/39] NLKD/i386 " Jan Beulich
2005-11-09 14:01 ` [PATCH 5/39] NLKD/x86-64 " Jan Beulich
2005-11-10 13:10 ` Andi Kleen
2005-11-14 8:04 ` [discuss] " Jan Beulich
2005-11-14 12:37 ` Andi Kleen
2005-11-09 14:01 ` [PATCH 6/39] NLKD - early panic notification Jan Beulich
2005-11-09 14:02 ` [PATCH 7/39] NLKD - task create/destroy notification Jan Beulich
2005-11-09 14:03 ` [PATCH 8/39] NLKD - rmmod notification Jan Beulich
2005-11-09 14:04 ` [PATCH 9/39] NLKD - hotkey notification Jan Beulich
2005-11-09 14:05 ` Jan Beulich [this message]
2005-11-09 14:06 ` [PATCH 11/39] NLKD - time adjustment Jan Beulich
2005-11-09 14:06 ` [PATCH 12/39] NLKD/i386 " Jan Beulich
2005-11-09 19:10 ` George Anzinger
2005-11-10 8:12 ` Jan Beulich
2005-11-11 0:17 ` George Anzinger
2005-11-09 14:08 ` [PATCH 13/39] NLKD/x86-64 " Jan Beulich
2005-11-09 14:13 ` [PATCH 18/39] NLKD/x86-64 - INT1/INT3 handling changes Jan Beulich
2005-11-09 14:14 ` [PATCH 19/39] NLKD/x86-64 - stack-pointer-invalid markers Jan Beulich
2005-11-09 14:15 ` [PATCH 20/39] NLKD/x86-64 - switch_to() floating point adjustment Jan Beulich
2005-11-09 14:16 ` [PATCH 21/39] NLKD/x86-64 - core adjustments Jan Beulich
2005-11-10 13:24 ` [PATCH 20/39] NLKD/x86-64 - switch_to() floating point adjustment Andi Kleen
2005-11-10 14:07 ` Jan Beulich
2005-11-10 13:23 ` [PATCH 19/39] NLKD/x86-64 - stack-pointer-invalid markers Andi Kleen
2005-11-10 14:25 ` Jan Beulich
2005-11-10 13:21 ` [PATCH 18/39] NLKD/x86-64 - INT1/INT3 handling changes Andi Kleen
2005-11-10 14:07 ` Jan Beulich
2005-11-10 14:25 ` Andi Kleen
2005-11-10 15:00 ` Jan Beulich
2005-11-11 3:39 ` [discuss] " Andi Kleen
2005-11-10 13:19 ` [PATCH 13/39] NLKD/x86-64 - time adjustment Andi Kleen
2005-11-10 14:23 ` Jan Beulich
2005-11-11 2:12 ` Andi Kleen
2005-11-12 9:22 ` Vojtech Pavlik
2005-11-12 17:21 ` Andi Kleen
2005-11-12 20:44 ` Vojtech Pavlik
2005-11-15 0:38 ` George Anzinger
2005-11-15 1:05 ` [discuss] " Andi Kleen
2005-11-15 7:50 ` Vojtech Pavlik
2005-11-15 8:24 ` Jan Beulich
2005-11-10 14:43 ` Vojtech Pavlik
2005-11-09 14:09 ` [PATCH 14/39] NLKD - kernel trace buffer access Jan Beulich
2005-11-09 14:09 ` [PATCH 15/39] NLKD - early pseudo-fs Jan Beulich
2005-11-09 14:11 ` [PATCH 16/39] NLKD - core adjustments Jan Beulich
2005-11-09 14:11 ` [PATCH 17/39] NLKD/i386 " Jan Beulich
2005-11-09 19:00 ` Adrian Bunk
2005-11-10 8:04 ` Jan Beulich
2005-11-10 10:29 ` Adrian Bunk
2005-11-10 11:52 ` Jan Beulich
2005-11-10 12:36 ` Lars Marowsky-Bree
2005-11-09 14:18 ` [PATCH 22/39] NLKD - core Jan Beulich
2005-11-09 14:19 ` [PATCH 23/39] NLKD/x86 " Jan Beulich
2005-11-09 14:20 ` [PATCH 24/39] NLKD/i386 " Jan Beulich
2005-11-09 14:21 ` [PATCH 25/39] NLKD/x86-64 " Jan Beulich
2005-11-10 13:30 ` Andi Kleen
2005-11-09 14:22 ` [PATCH 26/39] NLKD - run time library Jan Beulich
2005-11-09 14:23 ` [PATCH 27/39] NLKD/i386 " Jan Beulich
2005-11-09 14:23 ` [PATCH 28/39] NLKD/x86-64 " Jan Beulich
2005-11-10 13:32 ` Andi Kleen
[not found] ` <437214B7.76F0.0078.0@novell.com>
[not found] ` <4372156A.76F0.0078.0@novell.com>
2005-11-09 14:28 ` [PATCH 34/39] NLKD/x86 - Console Debug Agent Jan Beulich
[not found] ` <43721600.76F0.0078.0@novell.com>
2005-11-09 14:30 ` [PATCH 38/39] NLKD/i386 - Remote " Jan Beulich
2005-11-09 14:31 ` [PATCH 39/39] NLKD/x86-64 " Jan Beulich
2005-11-09 14:29 ` [PATCH 15/39] NLKD - early pseudo-fs Al Viro
2005-11-09 14:37 ` Jan Beulich
2005-11-09 15:00 ` Al Viro
2005-11-09 16:00 ` Jan Beulich
2005-11-10 5:44 ` [PATCH 14/39] NLKD - kernel trace buffer access Keith Owens
2005-11-10 8:02 ` Jan Beulich
2005-11-09 18:51 ` [PATCH 11/39] NLKD - time adjustment George Anzinger
2005-11-09 16:50 ` [PATCH 6/39] NLKD - early panic notification Greg KH
2005-11-09 16:45 ` [PATCH 3/39] NLKD - early/late CPU up/down notification Greg KH
2005-11-09 17:09 ` Jan Beulich
2005-11-09 17:19 ` Greg KH
2005-11-10 7:41 ` Jan Beulich
2005-11-10 20:59 ` Sam Ravnborg
2005-11-11 7:52 ` Jan Beulich
2005-11-12 20:52 ` Randy.Dunlap
2005-11-10 23:01 ` Greg KH
2005-11-11 10:06 ` [PATCH 2/39] NLKD - an alternative early ioremap approach Pavel Machek
2005-11-11 10:19 ` Jan Beulich
2005-11-09 16:50 ` [PATCH 1/39] NLKD - an alternative kallsyms approach Randy.Dunlap
2005-11-09 16:57 ` Greg KH
2005-11-09 17:20 ` Jan Beulich
2005-11-09 16:59 ` [PATCH 0/39] NLKD - Novell Linux Kernel Debugger Jeff Garzik
2005-11-09 17:06 ` Randy.Dunlap
2005-11-09 17:14 ` Jan Beulich
2005-11-09 17:56 ` Alan Cox
2005-11-09 18:05 ` Greg KH
2005-11-09 18:54 ` Paul Jackson
2005-11-10 12:41 ` Christoph Hellwig
2005-11-13 1:09 ` Andi Kleen
2005-11-13 2:53 ` jmerkey
2005-11-13 3:44 ` Andi Kleen
2005-11-13 3:26 ` Jeff V. Merkey
2005-11-13 3:32 ` Jeff V. Merkey
2005-11-09 17:53 ` Alan Cox
2005-11-09 16:25 ` Jeffrey V. Merkey
2005-11-10 14:48 ` Mark Lord
2005-11-10 15:28 ` Tom Rini
2005-11-10 16:37 ` Alan Cox
2005-11-13 1:11 ` Andi Kleen
[not found] ` <437214E4.76F0.0078.0@novell.com>
[not found] ` <4372153C.76F0.0078.0@novell.com>
2005-11-10 13:33 ` [PATCH 32/39] NLKD/x86-64 - Core Debug Engine Andi Kleen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=43721024.76F0.0078.0@novell.com \
--to=jbeulich@novell.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.