summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Simmons <jsimmons@kozmo.(none)>2002-12-01 15:38:54 -0800
committerJames Simmons <jsimmons@kozmo.(none)>2002-12-01 15:38:54 -0800
commit07cf5ddf8fd4fe34ec5c4b9c86bc88fb12029794 (patch)
tree3395857d23e1e807e063c980936016e7999bad75
parent3b6dbf195b069f1430f9c10eecf46670071c67c5 (diff)
Made fbcon modular.
-rw-r--r--drivers/char/mem.c12
-rw-r--r--drivers/char/vt.c18
-rw-r--r--drivers/video/cfbcopyarea.c2
-rw-r--r--drivers/video/cfbfillrect.c2
-rw-r--r--drivers/video/cfbimgblt.c2
-rw-r--r--drivers/video/console/Kconfig34
-rw-r--r--drivers/video/console/Makefile40
-rw-r--r--drivers/video/console/fbcon.c35
-rw-r--r--drivers/video/console/fbcon.h2
-rw-r--r--drivers/video/fbmem.c37
10 files changed, 96 insertions, 88 deletions
diff --git a/drivers/char/mem.c b/drivers/char/mem.c
index 9e888905fd27..2639b087e5f4 100644
--- a/drivers/char/mem.c
+++ b/drivers/char/mem.c
@@ -33,12 +33,6 @@ extern int i2c_init_all(void);
#ifdef CONFIG_FB
extern void fbmem_init(void);
#endif
-#ifdef CONFIG_PROM_CONSOLE
-extern void prom_con_init(void);
-#endif
-#ifdef CONFIG_MDA_CONSOLE
-extern void mda_console_init(void);
-#endif
#if defined(CONFIG_S390_TAPE) && defined(CONFIG_S390_TAPE_CHAR)
extern void tapechar_init(void);
#endif
@@ -686,12 +680,6 @@ int __init chr_dev_init(void)
#if defined (CONFIG_FB)
fbmem_init();
#endif
-#if defined (CONFIG_PROM_CONSOLE)
- prom_con_init();
-#endif
-#if defined (CONFIG_MDA_CONSOLE)
- mda_console_init();
-#endif
tty_init();
#ifdef CONFIG_M68K_PRINTER
lp_m68k_init();
diff --git a/drivers/char/vt.c b/drivers/char/vt.c
index ee2e67449444..e63efe25c6da 100644
--- a/drivers/char/vt.c
+++ b/drivers/char/vt.c
@@ -126,6 +126,15 @@ const struct consw *conswitchp;
extern void vcs_make_devfs (unsigned int index, int unregister);
extern void console_map_init(void);
+#ifdef CONFIG_PROM_CONSOLE
+extern void prom_con_init(void);
+#endif
+#ifdef CONFIG_MDA_CONSOLE
+extern void mda_console_init(void);
+#endif
+#ifdef CONFIG_FRAMEBUFFER_CONSOLE
+extern int fb_console_init(void);
+#endif
static struct tty_struct *console_table[MAX_NR_CONSOLES];
static struct termios *console_termios[MAX_NR_CONSOLES];
@@ -2524,6 +2533,15 @@ int __init vty_init(void)
kbd_init();
console_map_init();
+#ifdef CONFIG_PROM_CONSOLE
+ prom_con_init();
+#endif
+#ifdef CONFIG_MDA_CONSOLE
+ mda_console_init();
+#endif
+#ifdef CONFIG_FRAMEBUFFER_CONSOLE
+ fb_console_init();
+#endif
con_init_devfs();
vcs_init();
return 0;
diff --git a/drivers/video/cfbcopyarea.c b/drivers/video/cfbcopyarea.c
index cfa5b5f653a8..43c030ff9ad7 100644
--- a/drivers/video/cfbcopyarea.c
+++ b/drivers/video/cfbcopyarea.c
@@ -400,8 +400,10 @@ void cfb_copyarea(struct fb_info *p, struct fb_copyarea *area)
}
}
+#ifdef MODULE
int init_module(void) { return 0; };
void cleanup_module(void) {};
+#endif
EXPORT_SYMBOL(cfb_copyarea);
diff --git a/drivers/video/cfbfillrect.c b/drivers/video/cfbfillrect.c
index f037c691d8cb..fd272386e6c3 100644
--- a/drivers/video/cfbfillrect.c
+++ b/drivers/video/cfbfillrect.c
@@ -443,8 +443,10 @@ void cfb_fillrect(struct fb_info *p, struct fb_fillrect *rect)
}
}
+#ifdef MODULE
int init_module(void) { return 0; };
void cleanup_module(void) {};
+#endif
EXPORT_SYMBOL(cfb_fillrect);
diff --git a/drivers/video/cfbimgblt.c b/drivers/video/cfbimgblt.c
index 2da5a32f2122..be7ef92dd16c 100644
--- a/drivers/video/cfbimgblt.c
+++ b/drivers/video/cfbimgblt.c
@@ -342,8 +342,10 @@ void cfb_imageblit(struct fb_info *p, struct fb_image *image)
color_imageblit(image, p, dst1, start_index, pitch_index);
}
+#ifdef MODULE
int init_module(void) { return 0; };
void cleanup_module(void) {};
+#endif
EXPORT_SYMBOL(cfb_imageblit);
diff --git a/drivers/video/console/Kconfig b/drivers/video/console/Kconfig
index 7385cf1f314d..bf88c5c88d8d 100644
--- a/drivers/video/console/Kconfig
+++ b/drivers/video/console/Kconfig
@@ -125,7 +125,7 @@ config FBCON_STI
depends on !FBCON_ADVANCED && FRAMEBUFFER_CONSOLE && FB_STI
default y
-config FBCON_FONTWIDTH8_ONLY
+config FONTWIDTH8_ONLY
bool "Support only 8 pixels wide fonts"
depends on FRAMEBUFFER_CONSOLE
help
@@ -136,19 +136,19 @@ config FBCON_FONTWIDTH8_ONLY
config FONT_SUN8x16
bool "Sparc console 8x16 font"
- depends on FRAMEBUFFER_CONSOLE && (!SPARC32 && !SPARC64 && FBCON_FONTS || SPARC32 || SPARC64)
+ depends on FRAMEBUFFER_CONSOLE && (!SPARC32 && !SPARC64 && FONTS || SPARC32 || SPARC64)
help
This is the high resolution console font for Sun machines. Say Y.
config FONT_SUN12x22
bool "Sparc console 12x22 font (not supported by all drivers)"
- depends on FRAMEBUFFER_CONSOLE && !FBCON_FONTWIDTH8_ONLY && (!SPARC32 && !SPARC64 && FBCON_FONTS || SPARC32 || SPARC64)
+ depends on FRAMEBUFFER_CONSOLE && !FONTWIDTH8_ONLY && (!SPARC32 && !SPARC64 && FONTS || SPARC32 || SPARC64)
help
This is the high resolution console font for Sun machines with very
big letters (like the letters used in the SPARC PROM). If the
standard font is unreadable for you, say Y, otherwise say N.
-config FBCON_FONTS
+config FONTS
bool "Select other fonts" if SPARC32 || SPARC64
depends on FRAMEBUFFER_CONSOLE
help
@@ -161,14 +161,14 @@ config FBCON_FONTS
If unsure, say N (the default choices are safe).
-config FBCON_FONTS
+config FONTS
prompt "Select compiled-in fonts"
depends on FRAMEBUFFER_CONSOLE && !SPARC32 && !SPARC64
config FONT_8x8
- bool "VGA 8x8 font" if FBCON_FONTS
+ bool "VGA 8x8 font" if FONTS
depends on FRAMEBUFFER_CONSOLE
- default y if !SPARC32 && !SPARC64 && !FBCON_FONTS
+ default y if !SPARC32 && !SPARC64 && !FONTS
help
This is the "high resolution" font for the VGA frame buffer (the one
provided by the text console 80x50 (and higher) modes).
@@ -180,9 +180,9 @@ config FONT_8x8
here is safe.
config FONT_8x16
- bool "VGA 8x16 font" if FBCON_FONTS
+ bool "VGA 8x16 font" if FONTS
depends on FRAMEBUFFER_CONSOLE || SGI_NEWPORT_CONSOLE=y
- default y if !SPARC32 && !SPARC64 && !FBCON_FONTS
+ default y if !SPARC32 && !SPARC64 && !FONTS
help
This is the "high resolution" font for the VGA frame buffer (the one
provided by the VGA text console 80x25 mode.
@@ -190,32 +190,32 @@ config FONT_8x16
If unsure, say Y.
config FONT_6x11
- bool "Mac console 6x11 font (not supported by all drivers)" if FBCON_FONTS
- depends on FRAMEBUFFER_CONSOLE && !FBCON_FONTWIDTH8_ONLY
- default y if !SPARC32 && !SPARC64 && !FBCON_FONTS && MAC
+ bool "Mac console 6x11 font (not supported by all drivers)" if FONTS
+ depends on FRAMEBUFFER_CONSOLE && !FONTWIDTH8_ONLY
+ default y if !SPARC32 && !SPARC64 && !FONTS && MAC
help
Small console font with Macintosh-style high-half glyphs. Some Mac
framebuffer drivers don't support this one at all.
config FONT_PEARL_8x8
- bool "Pearl (old m68k) console 8x8 font" if FBCON_FONTS
+ bool "Pearl (old m68k) console 8x8 font" if FONTS
depends on FRAMEBUFFER_CONSOLE
- default y if !SPARC32 && !SPARC64 && !FBCON_FONTS && AMIGA
+ default y if !SPARC32 && !SPARC64 && !FONTS && AMIGA
help
Small console font with PC-style control-character and high-half
glyphs.
config FONT_ACORN_8x8
- bool "Acorn console 8x8 font" if FBCON_FONTS
+ bool "Acorn console 8x8 font" if FONTS
depends on FRAMEBUFFER_CONSOLE
- default y if !SPARC32 && !SPARC64 && !FBCON_FONTS && ARM && ARCH_ACORN
+ default y if !SPARC32 && !SPARC64 && !FONTS && ARM && ARCH_ACORN
help
Small console font with PC-style control characters and high-half
glyphs.
config FONT_MINI_4x6
bool "Mini 4x6 font"
- depends on !SPARC32 && !SPARC64 && FBCON_FONTS
+ depends on !SPARC32 && !SPARC64 && FONTS
endmenu
diff --git a/drivers/video/console/Makefile b/drivers/video/console/Makefile
index db4bca89b9f5..0e5097734e76 100644
--- a/drivers/video/console/Makefile
+++ b/drivers/video/console/Makefile
@@ -7,6 +7,34 @@
export-objs := fbcon.o fonts.o
+# Font handling
+font-objs := fonts.o
+
+ifeq ($(CONFIG_FONT_SUN8x16),y)
+ font-objs += font_sun8x16.o
+endif
+ifeq ($(CONFIG_FONT_SUN12x22),y)
+ font-objs += font_sun12x22.o
+endif
+ifeq ($(CONFIG_FONT_8x8),y)
+ font-objs += font_8x8.o
+endif
+ifeq ($(CONFIG_FONT_8x16),y)
+ font-objs += font_8x16.o
+endif
+ifeq ($(CONFIG_FONT_6x11),y)
+ font-objs += font_6x11.o
+endif
+ifeq ($(CONFIG_FONT_PEARL_8x8),y)
+ font-objs += font_pearl_8x8.o
+endif
+ifeq ($(CONFIG_FONT_ACORN_8x8),y)
+ font-objs += font_acorn_8x8.o
+endif
+ifeq ($(CONFIG_FONT_MINI_4x6),y)
+ font-objs += font_mini_4x6.o
+endif
+
# Each configuration option enables a list of files.
obj-$(CONFIG_DUMMY_CONSOLE) += dummycon.o
@@ -17,18 +45,6 @@ obj-$(CONFIG_VGA_CONSOLE) += vgacon.o
obj-$(CONFIG_MDA_CONSOLE) += mdacon.o
obj-$(CONFIG_FRAMEBUFFER_CONSOLE) += fbcon.o font.o
-obj-$(CONFIG_FONT_SUN8x16) += font_sun8x16.o
-obj-$(CONFIG_FONT_SUN12x22) += font_sun12x22.o
-obj-$(CONFIG_FONT_8x8) += font_8x8.o
-obj-$(CONFIG_FONT_8x16) += font_8x16.o
-obj-$(CONFIG_FONT_6x11) += font_6x11.o
-obj-$(CONFIG_FONT_PEARL_8x8) += font_pearl_8x8.o
-obj-$(CONFIG_FONT_ACORN_8x8) += font_acorn_8x8.o
-obj-$(CONFIG_FONT_MINI_4x6) += font_mini_4x6.o
-
-font-objs := fonts.o font_sun8x16.o font_sun12x22.o font_8x8.o font_8x16.o \
- font_6x11.o font_pearl_8x8.o font_acorn_8x8.o font_mini_4x6.o
-
# Generic Low Level Drivers
obj-$(CONFIG_FBCON_STI) += fbcon-sti.o
diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
index 5c184c2c2d23..016fef9277cf 100644
--- a/drivers/video/console/fbcon.c
+++ b/drivers/video/console/fbcon.c
@@ -234,7 +234,7 @@ static void cursor_timer_handler(unsigned long dev_addr)
add_timer(&cursor_timer);
}
-static int __init fbconsole_setup(char *this_opt)
+int __init fb_console_setup(char *this_opt)
{
int unit, i, j;
char *options;
@@ -289,7 +289,7 @@ static int __init fbconsole_setup(char *this_opt)
return 0;
}
-__setup("fbcon=", fbconsole_setup);
+__setup("fbcon=", fb_console_setup);
void gen_set_disp(int con, struct fb_info *info)
{
@@ -551,6 +551,7 @@ static const char *fbcon_startup(void)
{
const char *display_desc = "frame buffer device";
struct font_desc *font = NULL;
+ struct module *owner;
struct fb_info *info;
struct vc_data *vc;
static int done = 0;
@@ -566,7 +567,14 @@ static const char *fbcon_startup(void)
info = registered_fb[num_registered_fb-1];
if (!info) return NULL;
-
+ info->currcon = -1;
+
+ owner = info->fbops->owner;
+ if (owner)
+ __MOD_INC_USE_COUNT(owner);
+ if (info->fbops->fb_open && info->fbops->fb_open(info, 0) && owner)
+ __MOD_DEC_USE_COUNT(owner);
+
if (info->fix.type != FB_TYPE_TEXT) {
if (fbcon_softback_size) {
if (!softback_buf) {
@@ -768,7 +776,7 @@ static int fbcon_changevar(int con)
p->fontdata = font->data;
}
-#ifdef FBCON_FONTWIDTH8_ONLY
+#ifdef FONTWIDTH8_ONLY
if (!fontwidthvalid(p, vc->vc_font.width)) {
/* ++Geert: changed from panic() to `correct and continue' */
printk(KERN_ERR
@@ -912,7 +920,7 @@ static void fbcon_set_display(int con, int init, int logo)
p->fontdata = font->data;
}
-#ifdef FBCON_FONTWIDTH8_ONLY
+#ifdef FONTWIDTH8_ONLY
if (!fontwidthvalid(p, vc->vc_font.width)) {
/* ++Geert: changed from panic() to `correct and continue' */
printk(KERN_ERR
@@ -1976,7 +1984,7 @@ static inline int fbcon_get_font(struct vc_data *vc, struct console_font_op *op)
u8 *fontdata = p->fontdata;
int i, j;
-#ifdef CONFIG_FBCON_FONTWIDTH8_ONLY
+#ifdef CONFIG_FONTWIDTH8_ONLY
if (fontwidth(p) != 8)
return -EINVAL;
#endif
@@ -1995,7 +2003,7 @@ static inline int fbcon_get_font(struct vc_data *vc, struct console_font_op *op)
fontdata += j;
}
}
-#ifndef CONFIG_FBCON_FONTWIDTH8_ONLY
+#ifndef CONFIG_FONTWIDTH8_ONLY
else if (op->width <= 16) {
j = vc->vc_font.height * 2;
for (i = 0; i < op->charcount; i++) {
@@ -2177,7 +2185,7 @@ static inline int fbcon_set_font(struct vc_data *vc, struct console_font_op *op)
int i, k;
u8 *new_data, *data = op->data, *p;
-#ifdef CONFIG_FBCON_FONTWIDTH8_ONLY
+#ifdef CONFIG_FONTWIDTH8_ONLY
if (w != 8)
return -EINVAL;
#endif
@@ -2209,7 +2217,7 @@ static inline int fbcon_set_font(struct vc_data *vc, struct console_font_op *op)
p += h;
}
}
-#ifndef CONFIG_FBCON_FONTWIDTH8_ONLY
+#ifndef CONFIG_FONTWIDTH8_ONLY
else if (w <= 16) {
h *= 2;
for (i = 0; i < op->charcount; i++) {
@@ -2665,18 +2673,19 @@ const struct consw fb_con = {
.con_getxy = fbcon_getxy,
};
-static int __init fbconsole_init(void)
+int __init fb_console_init(void)
{
take_over_console(&fb_con, first_fb_vc, last_fb_vc, fbcon_is_default);
return 0;
}
-static void __exit fbconsole_exit(void)
+void __exit fb_console_exit(void)
{
+ give_up_console(&fb_con);
}
-module_init(fbconsole_init);
-module_exit(fbconsole_exit);
+module_init(fb_console_init);
+module_exit(fb_console_exit);
/*
* Visible symbols for modules
diff --git a/drivers/video/console/fbcon.h b/drivers/video/console/fbcon.h
index e62895b1d6b4..b49beeccc17e 100644
--- a/drivers/video/console/fbcon.h
+++ b/drivers/video/console/fbcon.h
@@ -53,7 +53,7 @@ extern void set_con2fb_map(int unit, int newidx);
#define fontheight(p) ((p)->_fontheight)
-#ifdef CONFIG_FBCON_FONTWIDTH8_ONLY
+#ifdef CONFIG_FONTWIDTH8_ONLY
/* fontwidth w is supported by dispsw */
#define FONTWIDTH(w) (1 << ((8) - 1))
diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c
index f75713c337f1..ab819c87ca59 100644
--- a/drivers/video/fbmem.c
+++ b/drivers/video/fbmem.c
@@ -41,7 +41,9 @@
#include <asm/pgtable.h>
#include <linux/fb.h>
-
+#ifdef CONFIG_FRAMEBUFFER_CONSOLE
+#include "console/fbcon.h"
+#endif
/*
* Frame buffer device initialization and setup routines
*/
@@ -783,10 +785,6 @@ static devfs_handle_t devfs_handle;
int
register_framebuffer(struct fb_info *fb_info)
{
-#ifdef CONFIG_FRAMEBUFFER_CONSOLE
- static int fb_ever_opened[FB_MAX];
- int j;
-#endif
char name_buf[8];
int i;
@@ -797,29 +795,7 @@ register_framebuffer(struct fb_info *fb_info)
if (!registered_fb[i])
break;
fb_info->node = mk_kdev(FB_MAJOR, i);
- fb_info->currcon = -1;
registered_fb[i] = fb_info;
-#ifdef CONFIG_FRAMEBUFFER_CONSOLE
- if (!fb_ever_opened[i]) {
- struct module *owner = fb_info->fbops->owner;
- /*
- * We assume initial frame buffer devices can be opened this
- * many times
- */
- for (j = 0; j < MAX_NR_CONSOLES; j++)
- if (con2fb_map[j] == i) {
- if (owner)
- __MOD_INC_USE_COUNT(owner);
- if (!fb_info->fbops->fb_open)
- continue;
- if (!fb_info->fbops->fb_open(fb_info,0))
- continue;
- if (owner)
- __MOD_DEC_USE_COUNT(owner);
- }
- fb_ever_opened[i] = 1;
- }
-#endif
sprintf (name_buf, "%d", i);
fb_info->devfs_handle =
devfs_register (devfs_handle, name_buf, DEVFS_FL_DEFAULT,
@@ -842,14 +818,9 @@ register_framebuffer(struct fb_info *fb_info)
int
unregister_framebuffer(struct fb_info *fb_info)
{
- int i, j;
+ int i;
i = minor(fb_info->node);
-#ifdef CONFIG_FRAMEBUFFER_CONSOLE
- for (j = 0; j < MAX_NR_CONSOLES; j++)
- if (con2fb_map[j] == i)
- return -EBUSY;
-#endif
if (!registered_fb[i])
return -EINVAL;
devfs_unregister (fb_info->devfs_handle);