diff options
Diffstat (limited to 'drivers/video/console')
-rw-r--r-- | drivers/video/console/.gitignore | 2 | ||||
-rw-r--r-- | drivers/video/console/fbcon.c | 15 | ||||
-rw-r--r-- | drivers/video/console/fbcon.h | 6 | ||||
-rw-r--r-- | drivers/video/console/mdacon.c | 4 | ||||
-rw-r--r-- | drivers/video/console/sticon.c | 2 | ||||
-rw-r--r-- | drivers/video/console/sticore.c | 63 |
6 files changed, 61 insertions, 31 deletions
diff --git a/drivers/video/console/.gitignore b/drivers/video/console/.gitignore new file mode 100644 index 000000000000..0c258b45439c --- /dev/null +++ b/drivers/video/console/.gitignore | |||
@@ -0,0 +1,2 @@ | |||
1 | # conmakehash generated file | ||
2 | promcon_tbl.c | ||
diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c index 97aff8db10bf..c6299e8a041d 100644 --- a/drivers/video/console/fbcon.c +++ b/drivers/video/console/fbcon.c | |||
@@ -107,9 +107,7 @@ static struct display fb_display[MAX_NR_CONSOLES]; | |||
107 | 107 | ||
108 | static signed char con2fb_map[MAX_NR_CONSOLES]; | 108 | static signed char con2fb_map[MAX_NR_CONSOLES]; |
109 | static signed char con2fb_map_boot[MAX_NR_CONSOLES]; | 109 | static signed char con2fb_map_boot[MAX_NR_CONSOLES]; |
110 | #ifndef MODULE | 110 | |
111 | static int logo_height; | ||
112 | #endif | ||
113 | static int logo_lines; | 111 | static int logo_lines; |
114 | /* logo_shown is an index to vc_cons when >= 0; otherwise follows FBCON_LOGO | 112 | /* logo_shown is an index to vc_cons when >= 0; otherwise follows FBCON_LOGO |
115 | enums. */ | 113 | enums. */ |
@@ -607,6 +605,7 @@ static void fbcon_prepare_logo(struct vc_data *vc, struct fb_info *info, | |||
607 | struct fbcon_ops *ops = info->fbcon_par; | 605 | struct fbcon_ops *ops = info->fbcon_par; |
608 | int cnt, erase = vc->vc_video_erase_char, step; | 606 | int cnt, erase = vc->vc_video_erase_char, step; |
609 | unsigned short *save = NULL, *r, *q; | 607 | unsigned short *save = NULL, *r, *q; |
608 | int logo_height; | ||
610 | 609 | ||
611 | if (info->flags & FBINFO_MODULE) { | 610 | if (info->flags & FBINFO_MODULE) { |
612 | logo_shown = FBCON_LOGO_DONTSHOW; | 611 | logo_shown = FBCON_LOGO_DONTSHOW; |
@@ -1312,6 +1311,9 @@ static void fbcon_clear(struct vc_data *vc, int sy, int sx, int height, | |||
1312 | if (!height || !width) | 1311 | if (!height || !width) |
1313 | return; | 1312 | return; |
1314 | 1313 | ||
1314 | if (sy < vc->vc_top && vc->vc_top == logo_lines) | ||
1315 | vc->vc_top = 0; | ||
1316 | |||
1315 | /* Split blits that cross physical y_wrap boundary */ | 1317 | /* Split blits that cross physical y_wrap boundary */ |
1316 | 1318 | ||
1317 | y_break = p->vrows - p->yscroll; | 1319 | y_break = p->vrows - p->yscroll; |
@@ -2516,7 +2518,7 @@ static int fbcon_do_set_font(struct vc_data *vc, int w, int h, | |||
2516 | c = vc->vc_video_erase_char; | 2518 | c = vc->vc_video_erase_char; |
2517 | vc->vc_video_erase_char = | 2519 | vc->vc_video_erase_char = |
2518 | ((c & 0xfe00) >> 1) | (c & 0xff); | 2520 | ((c & 0xfe00) >> 1) | (c & 0xff); |
2519 | c = vc->vc_def_color; | 2521 | c = vc->vc_scrl_erase_char; |
2520 | vc->vc_scrl_erase_char = | 2522 | vc->vc_scrl_erase_char = |
2521 | ((c & 0xFE00) >> 1) | (c & 0xFF); | 2523 | ((c & 0xFE00) >> 1) | (c & 0xFF); |
2522 | vc->vc_attr >>= 1; | 2524 | vc->vc_attr >>= 1; |
@@ -2549,7 +2551,7 @@ static int fbcon_do_set_font(struct vc_data *vc, int w, int h, | |||
2549 | if (vc->vc_can_do_color) { | 2551 | if (vc->vc_can_do_color) { |
2550 | vc->vc_video_erase_char = | 2552 | vc->vc_video_erase_char = |
2551 | ((c & 0xff00) << 1) | (c & 0xff); | 2553 | ((c & 0xff00) << 1) | (c & 0xff); |
2552 | c = vc->vc_def_color; | 2554 | c = vc->vc_scrl_erase_char; |
2553 | vc->vc_scrl_erase_char = | 2555 | vc->vc_scrl_erase_char = |
2554 | ((c & 0xFF00) << 1) | (c & 0xFF); | 2556 | ((c & 0xFF00) << 1) | (c & 0xFF); |
2555 | vc->vc_attr <<= 1; | 2557 | vc->vc_attr <<= 1; |
@@ -3586,7 +3588,8 @@ static int __init fb_console_init(void) | |||
3586 | 3588 | ||
3587 | acquire_console_sem(); | 3589 | acquire_console_sem(); |
3588 | fb_register_client(&fbcon_event_notifier); | 3590 | fb_register_client(&fbcon_event_notifier); |
3589 | fbcon_device = device_create(fb_class, NULL, MKDEV(0, 0), "fbcon"); | 3591 | fbcon_device = device_create_drvdata(fb_class, NULL, MKDEV(0, 0), |
3592 | NULL, "fbcon"); | ||
3590 | 3593 | ||
3591 | if (IS_ERR(fbcon_device)) { | 3594 | if (IS_ERR(fbcon_device)) { |
3592 | printk(KERN_WARNING "Unable to create device " | 3595 | printk(KERN_WARNING "Unable to create device " |
diff --git a/drivers/video/console/fbcon.h b/drivers/video/console/fbcon.h index 0135e0395456..a6e38e9ea73f 100644 --- a/drivers/video/console/fbcon.h +++ b/drivers/video/console/fbcon.h | |||
@@ -146,10 +146,8 @@ static inline int attr_col_ec(int shift, struct vc_data *vc, | |||
146 | return is_fg ? fg : bg; | 146 | return is_fg ? fg : bg; |
147 | } | 147 | } |
148 | 148 | ||
149 | #define attr_bgcol_ec(bgshift,vc,info) \ | 149 | #define attr_bgcol_ec(bgshift, vc, info) attr_col_ec(bgshift, vc, info, 0) |
150 | attr_col_ec(bgshift,vc,info,0); | 150 | #define attr_fgcol_ec(fgshift, vc, info) attr_col_ec(fgshift, vc, info, 1) |
151 | #define attr_fgcol_ec(fgshift,vc,info) \ | ||
152 | attr_col_ec(fgshift,vc,info,1); | ||
153 | 151 | ||
154 | /* Font */ | 152 | /* Font */ |
155 | #define REFCOUNT(fd) (((int *)(fd))[-1]) | 153 | #define REFCOUNT(fd) (((int *)(fd))[-1]) |
diff --git a/drivers/video/console/mdacon.c b/drivers/video/console/mdacon.c index 38a296bbdfc9..9901064199bd 100644 --- a/drivers/video/console/mdacon.c +++ b/drivers/video/console/mdacon.c | |||
@@ -71,13 +71,15 @@ static char *mda_type_name; | |||
71 | 71 | ||
72 | /* console information */ | 72 | /* console information */ |
73 | 73 | ||
74 | static int mda_first_vc = 1; | 74 | static int mda_first_vc = 13; |
75 | static int mda_last_vc = 16; | 75 | static int mda_last_vc = 16; |
76 | 76 | ||
77 | static struct vc_data *mda_display_fg = NULL; | 77 | static struct vc_data *mda_display_fg = NULL; |
78 | 78 | ||
79 | module_param(mda_first_vc, int, 0); | 79 | module_param(mda_first_vc, int, 0); |
80 | MODULE_PARM_DESC(mda_first_vc, "First virtual console. Default: 13"); | ||
80 | module_param(mda_last_vc, int, 0); | 81 | module_param(mda_last_vc, int, 0); |
82 | MODULE_PARM_DESC(mda_last_vc, "Last virtual console. Default: 16"); | ||
81 | 83 | ||
82 | /* MDA register values | 84 | /* MDA register values |
83 | */ | 85 | */ |
diff --git a/drivers/video/console/sticon.c b/drivers/video/console/sticon.c index a11cc2fdd4cd..4055dbdd1b42 100644 --- a/drivers/video/console/sticon.c +++ b/drivers/video/console/sticon.c | |||
@@ -370,7 +370,7 @@ static const struct consw sti_con = { | |||
370 | 370 | ||
371 | 371 | ||
372 | 372 | ||
373 | int __init sticonsole_init(void) | 373 | static int __init sticonsole_init(void) |
374 | { | 374 | { |
375 | /* already initialized ? */ | 375 | /* already initialized ? */ |
376 | if (sticon_sti) | 376 | if (sticon_sti) |
diff --git a/drivers/video/console/sticore.c b/drivers/video/console/sticore.c index e9ab657f0bb7..ef7870f5ea08 100644 --- a/drivers/video/console/sticore.c +++ b/drivers/video/console/sticore.c | |||
@@ -24,12 +24,13 @@ | |||
24 | #include <asm/hardware.h> | 24 | #include <asm/hardware.h> |
25 | #include <asm/parisc-device.h> | 25 | #include <asm/parisc-device.h> |
26 | #include <asm/cacheflush.h> | 26 | #include <asm/cacheflush.h> |
27 | #include <asm/grfioctl.h> | ||
27 | 28 | ||
28 | #include "../sticore.h" | 29 | #include "../sticore.h" |
29 | 30 | ||
30 | #define STI_DRIVERVERSION "Version 0.9a" | 31 | #define STI_DRIVERVERSION "Version 0.9a" |
31 | 32 | ||
32 | struct sti_struct *default_sti __read_mostly; | 33 | static struct sti_struct *default_sti __read_mostly; |
33 | 34 | ||
34 | /* number of STI ROMS found and their ptrs to each struct */ | 35 | /* number of STI ROMS found and their ptrs to each struct */ |
35 | static int num_sti_roms __read_mostly; | 36 | static int num_sti_roms __read_mostly; |
@@ -68,8 +69,7 @@ static const struct sti_init_flags default_init_flags = { | |||
68 | .init_cmap_tx = 1, | 69 | .init_cmap_tx = 1, |
69 | }; | 70 | }; |
70 | 71 | ||
71 | int | 72 | static int sti_init_graph(struct sti_struct *sti) |
72 | sti_init_graph(struct sti_struct *sti) | ||
73 | { | 73 | { |
74 | struct sti_init_inptr_ext inptr_ext = { 0, }; | 74 | struct sti_init_inptr_ext inptr_ext = { 0, }; |
75 | struct sti_init_inptr inptr = { | 75 | struct sti_init_inptr inptr = { |
@@ -100,8 +100,7 @@ static const struct sti_conf_flags default_conf_flags = { | |||
100 | .wait = STI_WAIT, | 100 | .wait = STI_WAIT, |
101 | }; | 101 | }; |
102 | 102 | ||
103 | void | 103 | static void sti_inq_conf(struct sti_struct *sti) |
104 | sti_inq_conf(struct sti_struct *sti) | ||
105 | { | 104 | { |
106 | struct sti_conf_inptr inptr = { 0, }; | 105 | struct sti_conf_inptr inptr = { 0, }; |
107 | unsigned long flags; | 106 | unsigned long flags; |
@@ -237,8 +236,8 @@ static void sti_flush(unsigned long start, unsigned long end) | |||
237 | flush_icache_range(start, end); | 236 | flush_icache_range(start, end); |
238 | } | 237 | } |
239 | 238 | ||
240 | void __devinit | 239 | static void __devinit sti_rom_copy(unsigned long base, unsigned long count, |
241 | sti_rom_copy(unsigned long base, unsigned long count, void *dest) | 240 | void *dest) |
242 | { | 241 | { |
243 | unsigned long dest_start = (unsigned long) dest; | 242 | unsigned long dest_start = (unsigned long) dest; |
244 | 243 | ||
@@ -478,8 +477,8 @@ sti_init_glob_cfg(struct sti_struct *sti, | |||
478 | } | 477 | } |
479 | 478 | ||
480 | #ifdef CONFIG_FB | 479 | #ifdef CONFIG_FB |
481 | struct sti_cooked_font * __devinit | 480 | static struct sti_cooked_font __devinit |
482 | sti_select_fbfont(struct sti_cooked_rom *cooked_rom, const char *fbfont_name) | 481 | *sti_select_fbfont(struct sti_cooked_rom *cooked_rom, const char *fbfont_name) |
483 | { | 482 | { |
484 | const struct font_desc *fbfont; | 483 | const struct font_desc *fbfont; |
485 | unsigned int size, bpc; | 484 | unsigned int size, bpc; |
@@ -534,16 +533,16 @@ sti_select_fbfont(struct sti_cooked_rom *cooked_rom, const char *fbfont_name) | |||
534 | return cooked_font; | 533 | return cooked_font; |
535 | } | 534 | } |
536 | #else | 535 | #else |
537 | struct sti_cooked_font * __devinit | 536 | static struct sti_cooked_font __devinit |
538 | sti_select_fbfont(struct sti_cooked_rom *cooked_rom, const char *fbfont_name) | 537 | *sti_select_fbfont(struct sti_cooked_rom *cooked_rom, const char *fbfont_name) |
539 | { | 538 | { |
540 | return NULL; | 539 | return NULL; |
541 | } | 540 | } |
542 | #endif | 541 | #endif |
543 | 542 | ||
544 | struct sti_cooked_font * __devinit | 543 | static struct sti_cooked_font __devinit |
545 | sti_select_font(struct sti_cooked_rom *rom, | 544 | *sti_select_font(struct sti_cooked_rom *rom, |
546 | int (*search_font_fnc) (struct sti_cooked_rom *,int,int) ) | 545 | int (*search_font_fnc)(struct sti_cooked_rom *, int, int)) |
547 | { | 546 | { |
548 | struct sti_cooked_font *font; | 547 | struct sti_cooked_font *font; |
549 | int i; | 548 | int i; |
@@ -707,8 +706,7 @@ sti_get_bmode_rom (unsigned long address) | |||
707 | return raw; | 706 | return raw; |
708 | } | 707 | } |
709 | 708 | ||
710 | struct sti_rom * __devinit | 709 | static struct sti_rom __devinit *sti_get_wmode_rom(unsigned long address) |
711 | sti_get_wmode_rom (unsigned long address) | ||
712 | { | 710 | { |
713 | struct sti_rom *raw; | 711 | struct sti_rom *raw; |
714 | unsigned long size; | 712 | unsigned long size; |
@@ -723,11 +721,12 @@ sti_get_wmode_rom (unsigned long address) | |||
723 | return raw; | 721 | return raw; |
724 | } | 722 | } |
725 | 723 | ||
726 | int __devinit | 724 | static int __devinit sti_read_rom(int wordmode, struct sti_struct *sti, |
727 | sti_read_rom(int wordmode, struct sti_struct *sti, unsigned long address) | 725 | unsigned long address) |
728 | { | 726 | { |
729 | struct sti_cooked_rom *cooked; | 727 | struct sti_cooked_rom *cooked; |
730 | struct sti_rom *raw = NULL; | 728 | struct sti_rom *raw = NULL; |
729 | unsigned long revno; | ||
731 | 730 | ||
732 | cooked = kmalloc(sizeof *cooked, GFP_KERNEL); | 731 | cooked = kmalloc(sizeof *cooked, GFP_KERNEL); |
733 | if (!cooked) | 732 | if (!cooked) |
@@ -770,9 +769,35 @@ sti_read_rom(int wordmode, struct sti_struct *sti, unsigned long address) | |||
770 | sti->graphics_id[1] = raw->graphics_id[1]; | 769 | sti->graphics_id[1] = raw->graphics_id[1]; |
771 | 770 | ||
772 | sti_dump_rom(raw); | 771 | sti_dump_rom(raw); |
773 | 772 | ||
773 | /* check if the ROM routines in this card are compatible */ | ||
774 | if (wordmode || sti->graphics_id[1] != 0x09A02587) | ||
775 | goto ok; | ||
776 | |||
777 | revno = (raw->revno[0] << 8) | raw->revno[1]; | ||
778 | |||
779 | switch (sti->graphics_id[0]) { | ||
780 | case S9000_ID_HCRX: | ||
781 | /* HyperA or HyperB ? */ | ||
782 | if (revno == 0x8408 || revno == 0x840b) | ||
783 | goto msg_not_supported; | ||
784 | break; | ||
785 | case CRT_ID_THUNDER: | ||
786 | if (revno == 0x8509) | ||
787 | goto msg_not_supported; | ||
788 | break; | ||
789 | case CRT_ID_THUNDER2: | ||
790 | if (revno == 0x850c) | ||
791 | goto msg_not_supported; | ||
792 | } | ||
793 | ok: | ||
774 | return 1; | 794 | return 1; |
775 | 795 | ||
796 | msg_not_supported: | ||
797 | printk(KERN_ERR "Sorry, this GSC/STI card is not yet supported.\n"); | ||
798 | printk(KERN_ERR "Please see http://parisc-linux.org/faq/" | ||
799 | "graphics-howto.html for more info.\n"); | ||
800 | /* fall through */ | ||
776 | out_err: | 801 | out_err: |
777 | kfree(raw); | 802 | kfree(raw); |
778 | kfree(cooked); | 803 | kfree(cooked); |