diff --git a/CREDITS b/CREDITS index ba7a71f086b47d03dd1f9b27eaec873a2fa5b0bc..2f269416def1d1cc4ea51da08566eefa5a251be3 100644 --- a/CREDITS +++ b/CREDITS @@ -2773,6 +2773,19 @@ S: Klosterweg 28 / i309 S: 76131 Karlsruhe S: Germany +N: James Simmons +E: jsimmons@users.sf.net +D: Frame buffer device maintainer +D: input layer developement +D: tty/console layer +D: various mipsel devices +S: 115 Carmel Avenue +S: El Cerrito CA 94530 +S: USA + +N: Chris Vance +E: cvance@tislabs.com + N: Jaspreet Singh E: jaspreet@sangoma.com W: www.sangoma.com diff --git a/MAINTAINERS b/MAINTAINERS index 54a0866c7e6e4d56faa7c27614e56f57d1a641ac..a03470e081e47ebbf7f457743538dfafa52d790f 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -580,6 +580,13 @@ M: kevin.curtis@farsite.co.uk W: http://www.farsite.co.uk/ S: Supported +FRAMEBUFFER LAYER +P: James Simmons, Geert Uytterhoeven +M: jsimmons@users.sf.net, geert@linux-m68k.org +L: linux-fbdev-devel@lists.sourceforge.net +W: http://www.linux-fbdev.org +S: Supported + FILE LOCKING (flock() and fcntl()/lockf()) P: Matthew Wilcox M: matthew@wil.cx diff --git a/drivers/video/Config.help b/drivers/video/Config.help index 7a079fff6d58f25d7b3927f98e429f0c56a7be03..ee952117f6777f0786da1832ba5833c63daaf7e0 100644 --- a/drivers/video/Config.help +++ b/drivers/video/Config.help @@ -672,32 +672,6 @@ CONFIG_FBCON_MFB This is the low level frame buffer console driver for monochrome (2 colors) packed pixels. -CONFIG_FBCON_CFB2 - This is the low level frame buffer console driver for 2 bits per - pixel (4 colors) packed pixels. - -CONFIG_FBCON_CFB4 - This is the low level frame buffer console driver for 4 bits per - pixel (16 colors) packed pixels. - -CONFIG_FBCON_CFB8 - This is the low level frame buffer console driver for 8 bits per - pixel (256 colors) packed pixels. - -CONFIG_FBCON_CFB16 - This is the low level frame buffer console driver for 15 or 16 bits - per pixel (32K or 64K colors, also known as `hicolor') packed - pixels. - -CONFIG_FBCON_CFB24 - This is the low level frame buffer console driver for 24 bits per - pixel (16M colors, also known as `truecolor') packed pixels. It is - NOT for `sparse' 32 bits per pixel mode. - -CONFIG_FBCON_CFB32 - This is the low level frame buffer console driver for 32 bits per - pixel (16M colors, also known as `truecolor') sparse packed pixels. - CONFIG_FBCON_AFB This is the low level frame buffer console driver for 1 to 8 bitplanes (2 to 256 colors) on Amiga. diff --git a/drivers/video/Config.in b/drivers/video/Config.in index 23123fe8938ac9174f21492a091b4841ef1031c8..a75f165da59919293d9b719f1b4d9dd24c746d7f 100644 --- a/drivers/video/Config.in +++ b/drivers/video/Config.in @@ -254,7 +254,7 @@ if [ "$CONFIG_FB" = "y" ]; then define_tristate CONFIG_FBCON_CFB2 y define_tristate CONFIG_FBCON_CFB4 y else - if [ "$CONFIG_FB_ACORN" = "m" -o "$CONFIG_FB_SA1100" = "m"]; then + if [ "$CONFIG_FB_ACORN" = "m" -o "$CONFIG_FB_SA1100" = "m" ]; then define_tristate CONFIG_FBCON_CFB2 m define_tristate CONFIG_FBCON_CFB4 m fi @@ -313,20 +313,16 @@ if [ "$CONFIG_FB" = "y" ]; then define_tristate CONFIG_FBCON_CFB16 m fi fi - if [ "$CONFIG_FB_ATY" = "y" -o "$CONFIG_FB_VIRTUAL" = "y" -o \ - "$CONFIG_FB_CLGEN" = "y" -o "$CONFIG_FB_VESA" = "y" -o \ + if [ "$CONFIG_FB_CYBER2000" = "y" -o "$CONFIG_FB_VOODOO1" = "y" -o \ + "$CONFIG_FB_CLGEN" = "y" -o "$CONFIG_FB_PVR2" = "y" -o \ "$CONFIG_FB_MATROX" = "y" -o "$CONFIG_FB_PM2" = "y" -o \ - "$CONFIG_FB_ATY128" = "y" -o "$CONFIG_FB_RADEON" = "y" -o \ - "$CONFIG_FB_CYBER2000" = "y" -o "$CONFIG_FB_PVR2" = "y" -o \ - "$CONFIG_FB_VOODOO1" = "y" -o "$CONFIG_FB_NEOMAGIC" = "y" ]; then + "$CONFIG_FB_ATY128" = "y" -o "$CONFIG_FB_RADEON" = "y" ]; then define_tristate CONFIG_FBCON_CFB24 y else - if [ "$CONFIG_FB_ATY" = "m" -o "$CONFIG_FB_VIRTUAL" = "m" -o \ - "$CONFIG_FB_CLGEN" = "m" -o "$CONFIG_FB_VESA" = "m" -o \ + if [ "$CONFIG_FB_CLGEN" = "m" -o "$CONFIG_FB_VOODOO1" = "m" -o \ "$CONFIG_FB_MATROX" = "m" -o "$CONFIG_FB_PM2" = "m" -o \ "$CONFIG_FB_ATY128" = "m" -o "$CONFIG_FB_RADEON" = "m" -o \ - "$CONFIG_FB_CYBER2000" = "m" -o "$CONFIG_FB_PVR2" = "m" -o \ - "$CONFIG_FB_VOODOO1" = "m" -o "$CONFIG_FB_NEOMAGIC" = "y" ]; then + "$CONFIG_FB_CYBER2000" = "m" -o "$CONFIG_FB_PVR2" = "m" ]; then define_tristate CONFIG_FBCON_CFB24 m fi fi @@ -365,7 +361,8 @@ if [ "$CONFIG_FB" = "y" ]; then if [ "$CONFIG_FB_NEOMAGIC" = "m" -o "$CONFIG_FB_HIT" = "m" -o \ "$CONFIG_FB_G364" = "m" -o "$CONFIG_FB_VIRTUAL" = "m" -o \ "$CONFIG_FB_CLPS711X" = "m" -o "$CONFIG_FB_3DFX" = "m" -o \ - "$CONFIG_FB_RIVA" = "m" -o "$CONFIG_FB_SGIVW" = "m" ]; then + "$CONFIG_FB_RIVA" = "m" -o "$CONFIG_FB_SGIVW" = "m" -o \ + "$CONFIG_FB_ATY" = "m" ]; then define_tristate CONFIG_FBCON_ACCEL m fi fi diff --git a/drivers/video/Makefile b/drivers/video/Makefile index 4de70f8d4e4d7c68a34e62d99bc0cb8daf9e540d..34bd37db76bc3e1ab83e1670174775ab7049cee7 100644 --- a/drivers/video/Makefile +++ b/drivers/video/Makefile @@ -5,12 +5,10 @@ # All of the (potential) objects that export symbols. # This list comes from 'grep -l EXPORT_SYMBOL *.[hc]'. -export-objs := fbmem.o fbcmap.o fbcon.o fbmon.o modedb.o \ +export-objs := fbmem.o fbcmap.o fbcon.o fbmon.o modedb.o fbgen.o \ fbcon-afb.o fbcon-ilbm.o fbcon-accel.o cyber2000fb.o \ - fbcon-iplan2p2.o fbcon-iplan2p4.o fbgen.o \ - fbcon-iplan2p8.o fbcon-vga-planes.o fbcon-cfb16.o \ - fbcon-cfb2.o fbcon-cfb24.o fbcon-cfb32.o fbcon-cfb4.o \ - fbcon-cfb8.o fbcon-mfb.o fbcon-hga.o + fbcon-iplan2p2.o fbcon-iplan2p4.o fbcon-iplan2p8.o \ + fbcon-vga-planes.o fbcon-vga8-planes.o fbcon-hga.o # Each configuration option enables a list of files. @@ -59,7 +57,7 @@ obj-$(CONFIG_FB_SGIVW) += sgivwfb.o cfbfillrect.o cfbcopyarea.o cfbim obj-$(CONFIG_FB_3DFX) += tdfxfb.o obj-$(CONFIG_FB_MAC) += macfb.o macmodes.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o obj-$(CONFIG_FB_HP300) += hpfb.o cfbfillrect.o cfbimgblt.o -obj-$(CONFIG_FB_OF) += offb.o cfbfillrect.o cfbimgblit.o cfbcopyarea.o +obj-$(CONFIG_FB_OF) += offb.o cfbfillrect.o cfbimgblt.o cfbcopyarea.o obj-$(CONFIG_FB_IMSTT) += imsttfb.o obj-$(CONFIG_FB_RETINAZ3) += retz3fb.o obj-$(CONFIG_FB_CLGEN) += clgenfb.o @@ -67,7 +65,7 @@ obj-$(CONFIG_FB_TRIDENT) += tridentfb.o obj-$(CONFIG_FB_S3TRIO) += S3triofb.o obj-$(CONFIG_FB_TGA) += tgafb.o obj-$(CONFIG_FB_VESA) += vesafb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o -obj-$(CONFIG_FB_VGA16) += vga16fb.o fbcon-vga-planes.o +obj-$(CONFIG_FB_VGA16) += vga16fb.o fbcon-vga-planes.o fbcon-vga8-planes.o obj-$(CONFIG_FB_VIRGE) += virgefb.o obj-$(CONFIG_FB_G364) += g364fb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o obj-$(CONFIG_FB_FM2) += fm2fb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o @@ -103,12 +101,6 @@ obj-$(CONFIG_FB_VOODOO1) += sstfb.o # Generic Low Level Drivers obj-$(CONFIG_FBCON_AFB) += fbcon-afb.o -obj-$(CONFIG_FBCON_CFB2) += fbcon-cfb2.o -obj-$(CONFIG_FBCON_CFB4) += fbcon-cfb4.o -obj-$(CONFIG_FBCON_CFB8) += fbcon-cfb8.o -obj-$(CONFIG_FBCON_CFB16) += fbcon-cfb16.o -obj-$(CONFIG_FBCON_CFB24) += fbcon-cfb24.o -obj-$(CONFIG_FBCON_CFB32) += fbcon-cfb32.o obj-$(CONFIG_FBCON_ILBM) += fbcon-ilbm.o obj-$(CONFIG_FBCON_IPLAN2P2) += fbcon-iplan2p2.o obj-$(CONFIG_FBCON_IPLAN2P4) += fbcon-iplan2p4.o diff --git a/drivers/video/anakinfb.c b/drivers/video/anakinfb.c index 340a90c23efe80361387c32fd7b9c3c391175ca6..3cecff3a71fe76885f79b86060925586d732cc4e 100644 --- a/drivers/video/anakinfb.c +++ b/drivers/video/anakinfb.c @@ -20,11 +20,8 @@ #include <asm/io.h> -#include <video/fbcon.h> - static u32 colreg[16]; static struct fb_info fb_info; -static struct display display; static struct fb_var_screeninfo anakinfb_var = { .xres = 400, @@ -66,8 +63,6 @@ anakinfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, static struct fb_ops anakinfb_ops = { .owner = THIS_MODULE, .fb_set_var = gen_set_var, - .fb_get_cmap = gen_get_cmap, - .fb_set_cmap = gen_set_cmap, .fb_setcolreg = anakinfb_setcolreg, .fb_fillrect = cfb_fillrect, .fb_copyarea = cfb_copyarea, @@ -78,19 +73,14 @@ int __init anakinfb_init(void) { memset(&fb_info, 0, sizeof(struct fb_info)); - memset(&display, 0, sizeof(struct display)); - strcpy(fb_info.modename, anakinfb_fix.id); fb_info.node = NODEV; fb_info.currcon = -1; fb_info.flags = FBINFO_FLAG_DEFAULT; fb_info.fbops = &anakinfb_ops; fb_info.var = anakinfb_var; fb_info.fix = anakinfb_fix; - fb_info.disp = &display; strcpy(fb_info.fontname, "VGA8x16"); - fb_info.changevar = NULL; - fb_info.switch_con = gen_switch_con; fb_info.updatevar = gen_update_var; if (!(request_mem_region(VGA_START, VGA_SIZE, "vga"))) return -ENOMEM; @@ -100,10 +90,9 @@ anakinfb_init(void) } fb_alloc_cmap(&fb_info.cmap, 16, 0); - gen_set_disp(-1, &fb_info); if (register_framebuffer(&fb_info) < 0) { - iounmap(display.screen_base); + iounmap(fb_info.screen_base); release_mem_region(VGA_START, VGA_SIZE); return -EINVAL; } diff --git a/drivers/video/aty/atyfb_base.c b/drivers/video/aty/atyfb_base.c index d7e50db324ec277adc1ae4474cdf8b35e54cf3c3..438fcf03cb75cc1127e2ad03cda7072fb3484f70 100644 --- a/drivers/video/aty/atyfb_base.c +++ b/drivers/video/aty/atyfb_base.c @@ -65,9 +65,6 @@ #include <asm/io.h> #include <asm/uaccess.h> -#include <video/fbcon.h> -#include "../fbcon-accel.h" - #include <video/mach64.h> #include "atyfb.h" @@ -211,8 +208,6 @@ static struct fb_ops atyfb_ops = { .fb_set_var = gen_set_var, .fb_check_var = atyfb_check_var, .fb_set_par = atyfb_set_par, - .fb_get_cmap = gen_get_cmap, - .fb_set_cmap = gen_set_cmap, .fb_setcolreg = atyfb_setcolreg, .fb_pan_display = atyfb_pan_display, .fb_blank = atyfb_blank, @@ -694,6 +689,13 @@ static int aty_crtc_to_var(const struct crtc *crtc, (v_sync_pol ? 0 : FB_SYNC_VERT_HIGH_ACT) | (c_sync ? FB_SYNC_COMP_HIGH_ACT : 0); + var->red.msb_right = 0; + var->green.msb_right = 0; + var->blue.offset = 0; + var->blue.msb_right = 0; + var->transp.offset = 0; + var->transp.length = 0; + var->transp.msb_right = 0; switch (pix_width) { #if 0 case CRTC_PIX_WIDTH_4BPP: @@ -702,10 +704,7 @@ static int aty_crtc_to_var(const struct crtc *crtc, var->red.length = 8; var->green.offset = 0; var->green.length = 8; - var->blue.offset = 0; var->blue.length = 8; - var->transp.offset = 0; - var->transp.length = 0; break; #endif case CRTC_PIX_WIDTH_8BPP: @@ -714,10 +713,7 @@ static int aty_crtc_to_var(const struct crtc *crtc, var->red.length = 8; var->green.offset = 0; var->green.length = 8; - var->blue.offset = 0; var->blue.length = 8; - var->transp.offset = 0; - var->transp.length = 0; break; case CRTC_PIX_WIDTH_15BPP: /* RGB 555 */ bpp = 16; @@ -725,10 +721,7 @@ static int aty_crtc_to_var(const struct crtc *crtc, var->red.length = 5; var->green.offset = 5; var->green.length = 5; - var->blue.offset = 0; var->blue.length = 5; - var->transp.offset = 0; - var->transp.length = 0; break; #if 0 case CRTC_PIX_WIDTH_16BPP: /* RGB 565 */ @@ -737,10 +730,7 @@ static int aty_crtc_to_var(const struct crtc *crtc, var->red.length = 5; var->green.offset = 5; var->green.length = 6; - var->blue.offset = 0; var->blue.length = 5; - var->transp.offset = 0; - var->transp.length = 0; break; #endif case CRTC_PIX_WIDTH_24BPP: /* RGB 888 */ @@ -749,10 +739,7 @@ static int aty_crtc_to_var(const struct crtc *crtc, var->red.length = 8; var->green.offset = 8; var->green.length = 8; - var->blue.offset = 0; var->blue.length = 8; - var->transp.offset = 0; - var->transp.length = 0; break; case CRTC_PIX_WIDTH_32BPP: /* ARGB 8888 */ bpp = 32; @@ -760,7 +747,6 @@ static int aty_crtc_to_var(const struct crtc *crtc, var->red.length = 8; var->green.offset = 8; var->green.length = 8; - var->blue.offset = 0; var->blue.length = 8; var->transp.offset = 24; var->transp.length = 8; @@ -870,8 +856,7 @@ static int atyfb_set_par(struct fb_info *info) #ifdef CONFIG_BOOTX_TEXT btext_update_display(info->fix.smem_start, - (((par->crtc.h_tot_disp >> 16) & 0xff) + - 1) * 8, + (((par->crtc.h_tot_disp >> 16) & 0xff) + 1) * 8, ((par->crtc.v_tot_disp >> 16) & 0x7ff) + 1, info->var.bits_per_pixel, par->crtc.vxres * info->var.bits_per_pixel / 8); @@ -905,14 +890,13 @@ static int atyfb_encode_var(struct fb_var_screeninfo *var, { int err; - memset(var, 0, sizeof(struct fb_var_screeninfo)); - if ((err = aty_crtc_to_var(&par->crtc, var))) return err; var->pixclock = par->pll_ops->pll_to_var(info, &par->pll); var->height = -1; var->width = -1; + var->nonstd = 0; return 0; } @@ -1442,15 +1426,15 @@ static int aty_power_mgmt(int sleep, struct atyfb_par *par) static int aty_sleep_notify(struct pmu_sleep_notifier *self, int when) { struct fb_info *info; - struct atyfb_par *par = (struct atyfb_par *) info->fb.par; + struct atyfb_par *par; int result; result = PBOOK_SLEEP_OK; for (info = first_display; info != NULL; info = par->next) { - struct fb_fix_screeninfo fix; int nb; + par = (struct atyfb_par *) info->par; nb = fb_display[fg_console].var.yres * info->fix.line_length; switch (when) { @@ -1469,7 +1453,7 @@ static int aty_sleep_notify(struct pmu_sleep_notifier *self, int when) if (par->blitter_may_be_busy) wait_for_idle(par); /* Stop accel engine (stop bus mastering) */ - if (par->accel_flags & FB_ACCELF_TEXT) + if (info->var.accel_flags & FB_ACCELF_TEXT) aty_reset_engine(par); /* Backup fb content */ @@ -1562,7 +1546,6 @@ static int __init aty_init(struct fb_info *info, const char *name) const char *chipname = NULL, *ramname = NULL, *xtal; int j, pll, mclk, gtb_memsize; struct fb_var_screeninfo var; - struct display *disp; u32 chip_id, i; u16 type; u8 rev; @@ -1843,17 +1826,11 @@ static int __init aty_init(struct fb_info *info, const char *name) fb_memset((void *) info->screen_base, 0, info->fix.smem_len); - disp = info->disp; - - strcpy(info->modename, info->fix.id); info->node = NODEV; info->fbops = &atyfb_ops; - info->disp = disp; info->pseudo_palette = pseudo_palette; info->currcon = -1; strcpy(info->fontname, fontname); - info->changevar = NULL; - info->switch_con = gen_switch; info->updatevar = gen_update_var; info->flags = FBINFO_FLAG_DEFAULT; @@ -1979,6 +1956,7 @@ static int __init aty_init(struct fb_info *info, const char *name) fb_alloc_cmap(&info->cmap, 256, 0); + var.activate = FB_ACTIVATE_NOW; gen_set_var(&var, -1, info); if (register_framebuffer(info) < 0) @@ -2029,27 +2007,17 @@ int __init atyfb_init(void) info = kmalloc(sizeof(struct fb_info) + - sizeof(struct display), GFP_ATOMIC); + sizeof(struct atyfb_par), GFP_ATOMIC); if (!info) { printk ("atyfb_init: can't alloc fb_info\n"); return -ENXIO; } - memset(info, 0, - sizeof(struct fb_info) + - sizeof(struct display)); + memset(info, 0, sizeof(struct fb_info) + + sizeof(struct atyfb_par)); - default_par = - kmalloc(sizeof(struct atyfb_par), GFP_ATOMIC); - if (!default_par) { - printk - ("atyfb_init: can't alloc atyfb_par\n"); - kfree(info); - return -ENXIO; - } - memset(default_par, 0, sizeof(struct atyfb_par)); + default_par = (struct atyfb_par *) (info + 1); - info->disp = (struct display *) (info + 1); info->fix = atyfb_fix; info->par = default_par; @@ -2383,7 +2351,6 @@ int __init atyfb_init(void) if (first_display == NULL) pmu_register_sleep_notifier (&aty_sleep_notifier); - /* FIXME info->next = first_display; */ default_par->next = first_display; #endif } @@ -2410,7 +2377,7 @@ int __init atyfb_init(void) return -ENOMEM; } memset(info, 0, sizeof(struct fb_info)); - info->fix = atyfb_fix; + info->fix = atyfb_fix; /* * Map the video memory (physical address given) to somewhere in the @@ -2421,7 +2388,7 @@ int __init atyfb_init(void) info->fix.smem_start = info->screen_base; /* Fake! */ default_par->ati_regbase = (unsigned long)ioremap(phys_guiregbase[m64_num], 0x10000) + 0xFC00ul; - info->fix.mmio_start = par->ati_regbase; /* Fake! */ + info->fix.mmio_start = default_par->ati_regbase; /* Fake! */ aty_st_le32(CLOCK_CNTL, 0x12345678, default_par); clock_r = aty_ld_le32(CLOCK_CNTL, default_par); diff --git a/drivers/video/cfbcopyarea.c b/drivers/video/cfbcopyarea.c index a57643eb7b32f1320d0a26dff46006f69b4e54cb..07b47422410b5d28fd861c5d29caa86cd3bf9908 100644 --- a/drivers/video/cfbcopyarea.c +++ b/drivers/video/cfbcopyarea.c @@ -40,10 +40,10 @@ void cfb_copyarea(struct fb_info *p, struct fb_copyarea *area) { int x2, y2, lineincr, shift, shift_right, shift_left, old_dx, old_dy; int j, linesize = p->fix.line_length, bpl = sizeof(unsigned long); - unsigned long start_index, end_index, start_mask, end_mask, last; + unsigned long start_index, end_index, start_mask, end_mask, last, tmp; unsigned long *dst = NULL, *src = NULL; char *src1, *dst1; - int tmp, height; + int height; /* clip the destination */ old_dx = area->dx; diff --git a/drivers/video/cfbfillrect.c b/drivers/video/cfbfillrect.c index d052a89bd5eb092a0eabdfc7da51aaf3d93a9d11..b3ad462b7a273ae494b85bcc487f0c775622a5b5 100644 --- a/drivers/video/cfbfillrect.c +++ b/drivers/video/cfbfillrect.c @@ -20,7 +20,6 @@ #include <linux/string.h> #include <linux/fb.h> #include <asm/types.h> -#include <video/fbcon.h> #if BITS_PER_LONG == 32 #define FB_READ fb_readl diff --git a/drivers/video/cfbimgblt.c b/drivers/video/cfbimgblt.c index e3f138ad21b36db90de901fcc9246e29f67199ed..f522f900d66f76f8f1d15cf038e6ffb05173e69c 100644 --- a/drivers/video/cfbimgblt.c +++ b/drivers/video/cfbimgblt.c @@ -31,8 +31,6 @@ #include <linux/fb.h> #include <asm/types.h> -#include <video/fbcon.h> - #define DEBUG #ifdef DEBUG diff --git a/drivers/video/clps711xfb.c b/drivers/video/clps711xfb.c index d00c96dccb1ea5cc6722fd61e7802d200e52cec6..dc37152182f1dc02d65d731b5f396efc0fd25155 100644 --- a/drivers/video/clps711xfb.c +++ b/drivers/video/clps711xfb.c @@ -26,8 +26,6 @@ #include <linux/init.h> #include <linux/proc_fs.h> -#include <video/fbcon.h> - #include <asm/hardware.h> #include <asm/mach-types.h> #include <asm/uaccess.h> @@ -197,8 +195,6 @@ static struct fb_ops clps7111fb_ops = { .fb_check_var = clps7111fb_check_var, .fb_set_par = clps7111fb_set_par, .fb_set_var = gen_set_var, - .fb_set_cmap = gen_set_cmap, - .fb_get_cmap = gen_get_cmap, .fb_setcolreg = clps7111fb_setcolreg, .fb_blank = clps7111fb_blank, .fb_fillrect = cfb_fillrect, @@ -261,11 +257,11 @@ int __init clps711xfb_init(void) { int err = -ENOMEM; - cfb = kmalloc(sizeof(*cfb) + sizeof(struct display), GFP_KERNEL); + cfb = kmalloc(sizeof(*cfb), GFP_KERNEL); if (!cfb) goto out; - memset(cfb, 0, sizeof(*cfb) + sizeof(struct display)); + memset(cfb, 0, sizeof(*cfb)); memset((void *)PAGE_OFFSET, 0, 0x14000); cfb->currcon = -1; @@ -276,22 +272,19 @@ int __init clps711xfb_init(void) cfb->fix.smem_len = 0x14000; cfb->fix.type = FB_TYPE_PACKED_PIXELS; - cfb->var.xres = 640; - cfb->var.xres_virtual = 640; - cfb->var.yres = 240; - cfb->var.yres_virtual = 240; + cfb->var.xres = 640; + cfb->var.xres_virtual = 640; + cfb->var.yres = 240; + cfb->var.yres_virtual = 240; cfb->var.bits_per_pixel = 4; - cfb->var.grayscale = 1; + cfb->var.grayscale = 1; cfb->var.activate = FB_ACTIVATE_NOW; - cfb->var.height = -1; - cfb->var.width = -1; + cfb->var.height = -1; + cfb->var.width = -1; cfb->fbops = &clps7111fb_ops; - cfb->changevar = NULL; - cfb->switch_con = gen_switch; - cfb->updatevar = gen_update_var; + cfb->updatevar = gen_update_var; cfb->flags = FBINFO_FLAG_DEFAULT; - cfb->disp = (struct display *)(cfb + 1); fb_alloc_cmap(&cfb->cmap, CMAP_SIZE, 0); diff --git a/drivers/video/cyber2000fb.c b/drivers/video/cyber2000fb.c index a090625f04834d2828ef235bd3e19c31c50049d6..6cfd3261244e5dddcc7057b170fe48b632b3ff0c 100644 --- a/drivers/video/cyber2000fb.c +++ b/drivers/video/cyber2000fb.c @@ -1114,8 +1114,6 @@ static struct fb_ops cyber2000fb_ops = { .fb_setcolreg = cyber2000fb_setcolreg, .fb_pan_display = cyber2000fb_pan_display, .fb_blank = cyber2000fb_blank, - .fb_get_cmap = gen_get_cmap, - .fb_set_cmap = gen_set_cmap, }; /* diff --git a/drivers/video/dnfb.c b/drivers/video/dnfb.c index bf299d99ea671af76b45c7167a8ee0dee8cd5dbe..1241ee972111a97d8bc505d5c3b157786111391d 100644 --- a/drivers/video/dnfb.c +++ b/drivers/video/dnfb.c @@ -15,8 +15,6 @@ #include <linux/fb.h> #include <linux/module.h> -#include <video/fbcon.h> - /* apollo video HW definitions */ /* @@ -111,7 +109,6 @@ #endif static struct fb_info fb_info; -static struct display disp; /* frame buffer operations */ @@ -121,8 +118,6 @@ static void dnfb_copyarea(struct fb_info *info, struct fb_copyarea *area); static struct fb_ops dn_fb_ops = { .owner = THIS_MODULE, .fb_set_var = gen_set_var, - .fb_get_cmap = gen_get_cmap, - .fb_set_cmap = gen_set_cmap, .fb_blank = dnfb_blank, .fb_fillrect = cfb_fillrect, .fb_copyarea = dnfb_copyarea, @@ -239,22 +234,16 @@ unsigned long __init dnfb_init(unsigned long mem_start) { int err; - strcpy(fb_info.modename, dnfb_fix.id); - fb_info.changevar = NULL; fb_info.fontname[0] = 0; - fb_info.disp = &disp; - fb_info.switch_con = gen_switch; fb_info.updatevar = gen_update_var; fb_info.node = NODEV; fb_info.fbops = &dn_fb_ops; fb_info.currcon = -1; fb_info.fix = dnfb_fix; fb_info.var = dnfb_var; + fb_info.screen_base = (u_char *) fb_info.fix.smem_start; fb_alloc_cmap(&fb_info.cmap, 2, 0); - gen_set_disp(-1, &fb_info); - - fb_info.screen_base = (u_char *) fb_info.fix.smem_start; err = register_framebuffer(&fb_info); if (err < 0) diff --git a/drivers/video/fbcon-accel.c b/drivers/video/fbcon-accel.c index 27119e32c5dcc8f4195836ce56f7405b8c6477ec..8f6c5dfe0066fc4d380a4566289658a007e7543a 100644 --- a/drivers/video/fbcon-accel.c +++ b/drivers/video/fbcon-accel.c @@ -82,9 +82,10 @@ void fbcon_accel_putcs(struct vc_data *vc, struct display *p, unsigned short charmask = p->charmask; unsigned int width = ((fontwidth(p)+7)>>3); struct fb_image image; + u16 c = scr_readw(s); - image.fg_color = attr_fgcol(p, *s); - image.bg_color = attr_bgcol(p, *s); + image.fg_color = attr_fgcol(p, c); + image.bg_color = attr_bgcol(p, c); image.dx = xx * fontwidth(p); image.dy = yy * fontheight(p); image.width = fontwidth(p); diff --git a/drivers/video/fbcon-cfb16.c b/drivers/video/fbcon-cfb16.c deleted file mode 100644 index 254e559fb5910e2090fd00bcd61fca85bd1c86d6..0000000000000000000000000000000000000000 --- a/drivers/video/fbcon-cfb16.c +++ /dev/null @@ -1,319 +0,0 @@ -/* - * linux/drivers/video/cfb16.c -- Low level frame buffer operations for 16 bpp - * truecolor packed pixels - * - * Created 5 Apr 1997 by Geert Uytterhoeven - * - * This file is subject to the terms and conditions of the GNU General Public - * License. See the file COPYING in the main directory of this archive for - * more details. - */ - -#include <linux/module.h> -#include <linux/tty.h> -#include <linux/console.h> -#include <linux/string.h> -#include <linux/fb.h> -#include <asm/io.h> - -#include <video/fbcon.h> -#include <video/fbcon-cfb16.h> - - - /* - * 16 bpp packed pixels - */ - -static u32 tab_cfb16[] = { -#if defined(__BIG_ENDIAN) - 0x00000000, 0x0000ffff, 0xffff0000, 0xffffffff -#elif defined(__LITTLE_ENDIAN) - 0x00000000, 0xffff0000, 0x0000ffff, 0xffffffff -#else -#error FIXME: No endianness?? -#endif -}; - -void fbcon_cfb16_setup(struct display *p) -{ - p->next_line = p->fb_info->fix.line_length ? p->fb_info->fix.line_length : p->var.xres_virtual<<1; - p->next_plane = 0; -} - -void fbcon_cfb16_bmove(struct display *p, int sy, int sx, int dy, int dx, - int height, int width) -{ - int bytes = p->next_line, linesize = bytes * fontheight(p), rows; - u8 *src, *dst; - - if (sx == 0 && dx == 0 && width * fontwidth(p) * 2 == bytes) { - fb_memmove(p->fb_info->screen_base + dy * linesize, - p->fb_info->screen_base + sy * linesize, - height * linesize); - return; - } - if (fontwidthlog(p)) { - sx <<= fontwidthlog(p)+1; - dx <<= fontwidthlog(p)+1; - width <<= fontwidthlog(p)+1; - } else { - sx *= fontwidth(p)*2; - dx *= fontwidth(p)*2; - width *= fontwidth(p)*2; - } - if (dy < sy || (dy == sy && dx < sx)) { - src = p->fb_info->screen_base + sy * linesize + sx; - dst = p->fb_info->screen_base + dy * linesize + dx; - for (rows = height * fontheight(p); rows--;) { - fb_memmove(dst, src, width); - src += bytes; - dst += bytes; - } - } else { - src = p->fb_info->screen_base + (sy+height) * linesize + sx - bytes; - dst = p->fb_info->screen_base + (dy+height) * linesize + dx - bytes; - for (rows = height * fontheight(p); rows--;) { - fb_memmove(dst, src, width); - src -= bytes; - dst -= bytes; - } - } -} - -static inline void rectfill(u8 *dest, int width, int height, u32 data, - int linesize) -{ - int i; - - data |= data<<16; - - while (height-- > 0) { - u32 *p = (u32 *)dest; - for (i = 0; i < width/4; i++) { - fb_writel(data, p++); - fb_writel(data, p++); - } - if (width & 2) - fb_writel(data, p++); - if (width & 1) - fb_writew(data, (u16*)p); - dest += linesize; - } -} - -void fbcon_cfb16_clear(struct vc_data *conp, struct display *p, int sy, int sx, - int height, int width) -{ - u8 *dest; - int bytes = p->next_line, lines = height * fontheight(p); - u32 bgx; - - dest = p->fb_info->screen_base + sy * fontheight(p) * bytes + sx * fontwidth(p) * 2; - - bgx = ((u16 *)p->dispsw_data)[attr_bgcol_ec(p, conp)]; - - width *= fontwidth(p)/4; - if (width * 8 == bytes) - rectfill(dest, lines * width * 4, 1, bgx, bytes); - else - rectfill(dest, width * 4, lines, bgx, bytes); -} - -void fbcon_cfb16_putc(struct vc_data *conp, struct display *p, int c, int yy, - int xx) -{ - u8 *dest, *cdat, bits; - int bytes = p->next_line, rows; - u32 eorx, fgx, bgx; - - dest = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * fontwidth(p) * 2; - - fgx = ((u16 *)p->dispsw_data)[attr_fgcol(p, c)]; - bgx = ((u16 *)p->dispsw_data)[attr_bgcol(p, c)]; - fgx |= (fgx << 16); - bgx |= (bgx << 16); - eorx = fgx ^ bgx; - - switch (fontwidth(p)) { - case 4: - case 8: - cdat = p->fontdata + (c & p->charmask) * fontheight(p); - for (rows = fontheight(p); rows--; dest += bytes) { - bits = *cdat++; - fb_writel((tab_cfb16[bits >> 6] & eorx) ^ bgx, dest); - fb_writel((tab_cfb16[bits >> 4 & 3] & eorx) ^ bgx, dest+4); - if (fontwidth(p) == 8) { - fb_writel((tab_cfb16[bits >> 2 & 3] & eorx) ^ bgx, dest+8); - fb_writel((tab_cfb16[bits & 3] & eorx) ^ bgx, dest+12); - } - } - break; - case 12: - case 16: - cdat = p->fontdata + ((c & p->charmask) * fontheight(p) << 1); - for (rows = fontheight(p); rows--; dest += bytes) { - bits = *cdat++; - fb_writel((tab_cfb16[bits >> 6] & eorx) ^ bgx, dest); - fb_writel((tab_cfb16[bits >> 4 & 3] & eorx) ^ bgx, dest+4); - fb_writel((tab_cfb16[bits >> 2 & 3] & eorx) ^ bgx, dest+8); - fb_writel((tab_cfb16[bits & 3] & eorx) ^ bgx, dest+12); - bits = *cdat++; - fb_writel((tab_cfb16[bits >> 6] & eorx) ^ bgx, dest+16); - fb_writel((tab_cfb16[bits >> 4 & 3] & eorx) ^ bgx, dest+20); - if (fontwidth(p) == 16) { - fb_writel((tab_cfb16[bits >> 2 & 3] & eorx) ^ bgx, dest+24); - fb_writel((tab_cfb16[bits & 3] & eorx) ^ bgx, dest+28); - } - } - break; - } -} - -void fbcon_cfb16_putcs(struct vc_data *conp, struct display *p, - const unsigned short *s, int count, int yy, int xx) -{ - u8 *cdat, *dest, *dest0; - u16 c; - int rows, bytes = p->next_line; - u32 eorx, fgx, bgx; - - dest0 = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * fontwidth(p) * 2; - c = scr_readw(s); - fgx = ((u16 *)p->dispsw_data)[attr_fgcol(p, c)]; - bgx = ((u16 *)p->dispsw_data)[attr_bgcol(p, c)]; - fgx |= (fgx << 16); - bgx |= (bgx << 16); - eorx = fgx ^ bgx; - - switch (fontwidth(p)) { - case 4: - case 8: - while (count--) { - c = scr_readw(s++) & p->charmask; - cdat = p->fontdata + c * fontheight(p); - for (rows = fontheight(p), dest = dest0; rows--; dest += bytes) { - u8 bits = *cdat++; - fb_writel((tab_cfb16[bits >> 6] & eorx) ^ bgx, dest); - fb_writel((tab_cfb16[bits >> 4 & 3] & eorx) ^ bgx, dest+4); - if (fontwidth(p) == 8) { - fb_writel((tab_cfb16[bits >> 2 & 3] & eorx) ^ bgx, dest+8); - fb_writel((tab_cfb16[bits & 3] & eorx) ^ bgx, dest+12); - } - } - dest0 += fontwidth(p)*2;; - } - break; - case 12: - case 16: - while (count--) { - c = scr_readw(s++) & p->charmask; - cdat = p->fontdata + (c * fontheight(p) << 1); - for (rows = fontheight(p), dest = dest0; rows--; dest += bytes) { - u8 bits = *cdat++; - fb_writel((tab_cfb16[bits >> 6] & eorx) ^ bgx, dest); - fb_writel((tab_cfb16[bits >> 4 & 3] & eorx) ^ bgx, dest+4); - fb_writel((tab_cfb16[bits >> 2 & 3] & eorx) ^ bgx, dest+8); - fb_writel((tab_cfb16[bits & 3] & eorx) ^ bgx, dest+12); - bits = *cdat++; - fb_writel((tab_cfb16[bits >> 6] & eorx) ^ bgx, dest+16); - fb_writel((tab_cfb16[bits >> 4 & 3] & eorx) ^ bgx, dest+20); - if (fontwidth(p) == 16) { - fb_writel((tab_cfb16[bits >> 2 & 3] & eorx) ^ bgx, dest+24); - fb_writel((tab_cfb16[bits & 3] & eorx) ^ bgx, dest+28); - } - } - dest0 += fontwidth(p)*2; - } - break; - } -} - -void fbcon_cfb16_revc(struct display *p, int xx, int yy) -{ - u8 *dest; - int bytes = p->next_line, rows; - - dest = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * fontwidth(p)*2; - for (rows = fontheight(p); rows--; dest += bytes) { - switch (fontwidth(p)) { - case 16: - fb_writel(fb_readl(dest+24) ^ 0xffffffff, dest+24); - fb_writel(fb_readl(dest+28) ^ 0xffffffff, dest+28); - /* FALL THROUGH */ - case 12: - fb_writel(fb_readl(dest+16) ^ 0xffffffff, dest+16); - fb_writel(fb_readl(dest+20) ^ 0xffffffff, dest+20); - /* FALL THROUGH */ - case 8: - fb_writel(fb_readl(dest+8) ^ 0xffffffff, dest+8); - fb_writel(fb_readl(dest+12) ^ 0xffffffff, dest+12); - /* FALL THROUGH */ - case 4: - fb_writel(fb_readl(dest+0) ^ 0xffffffff, dest+0); - fb_writel(fb_readl(dest+4) ^ 0xffffffff, dest+4); - } - } -} - -void fbcon_cfb16_clear_margins(struct vc_data *conp, struct display *p, - int bottom_only) -{ - int bytes = p->next_line; - u32 bgx; - - unsigned int right_start = conp->vc_cols*fontwidth(p); - unsigned int bottom_start = conp->vc_rows*fontheight(p); - unsigned int right_width, bottom_width; - - bgx = ((u16 *)p->dispsw_data)[attr_bgcol_ec(p, conp)]; - - if (!bottom_only && (right_width = p->var.xres-right_start)) - rectfill(p->fb_info->screen_base+right_start*2, right_width, - p->var.yres_virtual, bgx, bytes); - if ((bottom_width = p->var.yres-bottom_start)) - rectfill(p->fb_info->screen_base+(p->var.yoffset+bottom_start)*bytes, - right_start, bottom_width, bgx, bytes); -} - - - /* - * `switch' for the low level operations - */ - -struct display_switch fbcon_cfb16 = { - setup: fbcon_cfb16_setup, - bmove: fbcon_cfb16_bmove, - clear: fbcon_cfb16_clear, - putc: fbcon_cfb16_putc, - putcs: fbcon_cfb16_putcs, - revc: fbcon_cfb16_revc, - clear_margins: fbcon_cfb16_clear_margins, - fontwidthmask: FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16) -}; - - -#ifdef MODULE -MODULE_LICENSE("GPL"); - -int init_module(void) -{ - return 0; -} - -void cleanup_module(void) -{} -#endif /* MODULE */ - - - /* - * Visible symbols for modules - */ - -EXPORT_SYMBOL(fbcon_cfb16); -EXPORT_SYMBOL(fbcon_cfb16_setup); -EXPORT_SYMBOL(fbcon_cfb16_bmove); -EXPORT_SYMBOL(fbcon_cfb16_clear); -EXPORT_SYMBOL(fbcon_cfb16_putc); -EXPORT_SYMBOL(fbcon_cfb16_putcs); -EXPORT_SYMBOL(fbcon_cfb16_revc); -EXPORT_SYMBOL(fbcon_cfb16_clear_margins); diff --git a/drivers/video/fbcon-cfb2.c b/drivers/video/fbcon-cfb2.c deleted file mode 100644 index e4896a6ce9e3bf66f34962f9b9fae953c299d7eb..0000000000000000000000000000000000000000 --- a/drivers/video/fbcon-cfb2.c +++ /dev/null @@ -1,225 +0,0 @@ -/* - * linux/drivers/video/cfb2.c -- Low level frame buffer operations for 2 bpp - * packed pixels - * - * Created 26 Dec 1997 by Michael Schmitz - * Based on cfb4.c - * - * This file is subject to the terms and conditions of the GNU General Public - * License. See the file COPYING in the main directory of this archive for - * more details. - */ - -#include <linux/module.h> -#include <linux/tty.h> -#include <linux/console.h> -#include <linux/string.h> -#include <linux/fb.h> - -#include <video/fbcon.h> -#include <video/fbcon-cfb2.h> - - - /* - * 2 bpp packed pixels - */ - - /* - * IFF the font is even pixel aligned (that is to say each - * character start is a byte start in the pixel pairs). That - * avoids us having to mask bytes and means we won't be here - * all week. On a MacII that matters _lots_ - */ - -static u_char nibbletab_cfb2[]={ -#if defined(__BIG_ENDIAN) - 0x00,0x03,0x0c,0x0f, - 0x30,0x33,0x3c,0x3f, - 0xc0,0xc3,0xcc,0xcf, - 0xf0,0xf3,0xfc,0xff -#elif defined(__LITTLE_ENDIAN) - 0x00,0xc0,0x30,0xf0, - 0x0c,0xcc,0x3c,0xfc, - 0x03,0xc3,0x33,0xf3, - 0x0f,0xcf,0x3f,0xff -#else -#error FIXME: No endianness?? -#endif -}; - - -void fbcon_cfb2_setup(struct display *p) -{ - p->next_line = p->fb_info->fix.line_length ? p->fb_info->fix.line_length : p->var.xres_virtual>>2; - p->next_plane = 0; -} - -void fbcon_cfb2_bmove(struct display *p, int sy, int sx, int dy, int dx, - int height, int width) -{ - int bytes = p->next_line, linesize = bytes * fontheight(p), rows; - u8 *src,*dst; - - if (sx == 0 && dx == 0 && width * 2 == bytes) { - fb_memmove(p->fb_info->screen_base + dy * linesize, - p->fb_info->screen_base + sy * linesize, - height * linesize); - } - else { - if (dy < sy || (dy == sy && dx < sx)) { - src = p->fb_info->screen_base + sy * linesize + sx * 2; - dst = p->fb_info->screen_base + dy * linesize + dx * 2; - for (rows = height * fontheight(p) ; rows-- ;) { - fb_memmove(dst, src, width * 2); - src += bytes; - dst += bytes; - } - } - else { - src = p->fb_info->screen_base + (sy+height) * linesize + sx * 2 - bytes; - dst = p->fb_info->screen_base + (dy+height) * linesize + dx * 2 - bytes; - for (rows = height * fontheight(p) ; rows-- ;) { - fb_memmove(dst, src, width * 2); - src -= bytes; - dst -= bytes; - } - } - } -} - -void fbcon_cfb2_clear(struct vc_data *conp, struct display *p, int sy, int sx, - int height, int width) -{ - u8 *dest0,*dest; - int bytes=p->next_line,lines=height * fontheight(p), rows, i; - u32 bgx; - - dest = p->fb_info->screen_base + sy * fontheight(p) * bytes + sx * 2; - - bgx=attr_bgcol_ec(p,conp); - bgx |= (bgx << 2); /* expand the colour to 16 bits */ - bgx |= (bgx << 4); - bgx |= (bgx << 8); - - if (sx == 0 && width * 2 == bytes) { - for (i = 0 ; i < lines * width ; i++) { - fb_writew (bgx, dest); - dest+=2; - } - } else { - dest0=dest; - for (rows = lines; rows-- ; dest0 += bytes) { - dest=dest0; - for (i = 0 ; i < width ; i++) { - /* memset ?? */ - fb_writew (bgx, dest); - dest+=2; - } - } - } -} - -void fbcon_cfb2_putc(struct vc_data *conp, struct display *p, int c, int yy, - int xx) -{ - u8 *dest,*cdat; - int bytes=p->next_line,rows; - u32 eorx,fgx,bgx; - - dest = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * 2; - cdat = p->fontdata + (c & p->charmask) * fontheight(p); - - fgx=3;/*attr_fgcol(p,c);*/ - bgx=attr_bgcol(p,c); - fgx |= (fgx << 2); /* expand color to 8 bits */ - fgx |= (fgx << 4); - bgx |= (bgx << 2); - bgx |= (bgx << 4); - eorx = fgx ^ bgx; - - for (rows = fontheight(p) ; rows-- ; dest += bytes) { - fb_writeb((nibbletab_cfb2[*cdat >> 4] & eorx) ^ bgx, dest+0); - fb_writeb((nibbletab_cfb2[*cdat++ & 0xf] & eorx) ^ bgx, dest+1); - } -} - -void fbcon_cfb2_putcs(struct vc_data *conp, struct display *p, const unsigned short *s, - int count, int yy, int xx) -{ - u8 *cdat, *dest, *dest0; - u16 c; - int rows,bytes=p->next_line; - u32 eorx, fgx, bgx; - - dest0 = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * 2; - c = scr_readw(s); - fgx = 3/*attr_fgcol(p, c)*/; - bgx = attr_bgcol(p, c); - fgx |= (fgx << 2); - fgx |= (fgx << 4); - bgx |= (bgx << 2); - bgx |= (bgx << 4); - eorx = fgx ^ bgx; - while (count--) { - c = scr_readw(s++) & p->charmask; - cdat = p->fontdata + c * fontheight(p); - - for (rows = fontheight(p), dest = dest0; rows-- ; dest += bytes) { - fb_writeb((nibbletab_cfb2[*cdat >> 4] & eorx) ^ bgx, dest+0); - fb_writeb((nibbletab_cfb2[*cdat++ & 0xf] & eorx) ^ bgx, dest+1); - } - dest0+=2; - } -} - -void fbcon_cfb2_revc(struct display *p, int xx, int yy) -{ - u8 *dest; - int bytes=p->next_line, rows; - - dest = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * 2; - for (rows = fontheight(p) ; rows-- ; dest += bytes) { - fb_writew(fb_readw(dest) ^ 0xffff, dest); - } -} - - - /* - * `switch' for the low level operations - */ - -struct display_switch fbcon_cfb2 = { - setup: fbcon_cfb2_setup, - bmove: fbcon_cfb2_bmove, - clear: fbcon_cfb2_clear, - putc: fbcon_cfb2_putc, - putcs: fbcon_cfb2_putcs, - revc: fbcon_cfb2_revc, - fontwidthmask: FONTWIDTH(8) -}; - - -#ifdef MODULE -MODULE_LICENSE("GPL"); - -int init_module(void) -{ - return 0; -} - -void cleanup_module(void) -{} -#endif /* MODULE */ - - - /* - * Visible symbols for modules - */ - -EXPORT_SYMBOL(fbcon_cfb2); -EXPORT_SYMBOL(fbcon_cfb2_setup); -EXPORT_SYMBOL(fbcon_cfb2_bmove); -EXPORT_SYMBOL(fbcon_cfb2_clear); -EXPORT_SYMBOL(fbcon_cfb2_putc); -EXPORT_SYMBOL(fbcon_cfb2_putcs); -EXPORT_SYMBOL(fbcon_cfb2_revc); diff --git a/drivers/video/fbcon-cfb24.c b/drivers/video/fbcon-cfb24.c deleted file mode 100644 index 878bac753eb535a75d36d32ed2117aa31b168229..0000000000000000000000000000000000000000 --- a/drivers/video/fbcon-cfb24.c +++ /dev/null @@ -1,333 +0,0 @@ -/* - * linux/drivers/video/cfb24.c -- Low level frame buffer operations for 24 bpp - * truecolor packed pixels - * - * Created 7 Mar 1998 by Geert Uytterhoeven - * - * This file is subject to the terms and conditions of the GNU General Public - * License. See the file COPYING in the main directory of this archive for - * more details. - */ - -#include <linux/module.h> -#include <linux/tty.h> -#include <linux/console.h> -#include <linux/string.h> -#include <linux/fb.h> - -#include <video/fbcon.h> -#include <video/fbcon-cfb24.h> - - - /* - * 24 bpp packed pixels - */ - -void fbcon_cfb24_setup(struct display *p) -{ - struct fb_info *info = p->fb_info; - - p->next_line = info->fix.line_length ? info->fix.line_length : p->var.xres_virtual*3; - p->next_plane = 0; -} - -void fbcon_cfb24_bmove(struct display *p, int sy, int sx, int dy, int dx, - int height, int width) -{ - int bytes = p->next_line, linesize = bytes * fontheight(p), rows; - u8 *src, *dst; - - if (sx == 0 && dx == 0 && width * fontwidth(p) * 3 == bytes) { - fb_memmove(p->fb_info->screen_base + dy * linesize, - p->fb_info->screen_base + sy * linesize, - height * linesize); - return; - } - if (fontwidthlog(p)) { - sx <<= fontwidthlog(p); - dx <<= fontwidthlog(p); - width <<= fontwidthlog(p); - } else { - sx *= fontwidth(p); - dx *= fontwidth(p); - width *= fontwidth(p); - } - sx *= 3; dx *= 3; width *= 3; - if (dy < sy || (dy == sy && dx < sx)) { - src = p->fb_info->screen_base + sy * linesize + sx; - dst = p->fb_info->screen_base + dy * linesize + dx; - for (rows = height * fontheight(p); rows--;) { - fb_memmove(dst, src, width); - src += bytes; - dst += bytes; - } - } else { - src = p->fb_info->screen_base + (sy+height) * linesize + sx - bytes; - dst = p->fb_info->screen_base + (dy+height) * linesize + dx - bytes; - for (rows = height * fontheight(p); rows--;) { - fb_memmove(dst, src, width); - src -= bytes; - dst -= bytes; - } - } -} - -#if defined(__BIG_ENDIAN) -#define convert4to3(in1, in2, in3, in4, out1, out2, out3) \ - do { \ - out1 = (in1<<8) | (in2>>16); \ - out2 = (in2<<16) | (in3>>8); \ - out3 = (in3<<24) | in4; \ - } while (0); -#elif defined(__LITTLE_ENDIAN) -#define convert4to3(in1, in2, in3, in4, out1, out2, out3) \ - do { \ - out1 = in1 | (in2<<24); \ - out2 = (in2>> 8) | (in3<<16); \ - out3 = (in3>>16) | (in4<< 8); \ - } while (0); -#else -#error FIXME: No endianness?? -#endif - -static inline void store4pixels(u32 d1, u32 d2, u32 d3, u32 d4, u32 *dest) -{ - u32 o1, o2, o3; - convert4to3(d1, d2, d3, d4, o1, o2, o3); - fb_writel (o1, dest++); - fb_writel (o2, dest++); - fb_writel (o3, dest); -} - -static inline void rectfill(u8 *dest, int width, int height, u32 data, - int linesize) -{ - u32 d1, d2, d3; - int i; - - convert4to3(data, data, data, data, d1, d2, d3); - while (height-- > 0) { - u32 *p = (u32 *)dest; - for (i = 0; i < width/4; i++) { - fb_writel(d1, p++); - fb_writel(d2, p++); - fb_writel(d3, p++); - } - dest += linesize; - } -} - -void fbcon_cfb24_clear(struct vc_data *conp, struct display *p, int sy, int sx, - int height, int width) -{ - u8 *dest; - int bytes = p->next_line, lines = height * fontheight(p); - u32 bgx; - - dest = p->fb_info->screen_base + sy * fontheight(p) * bytes + sx * fontwidth(p) * 3; - - bgx = ((u32 *)p->dispsw_data)[attr_bgcol_ec(p, conp)]; - - width *= fontwidth(p)/4; - if (width * 12 == bytes) - rectfill(dest, lines * width * 4, 1, bgx, bytes); - else - rectfill(dest, width * 4, lines, bgx, bytes); -} - -void fbcon_cfb24_putc(struct vc_data *conp, struct display *p, int c, int yy, - int xx) -{ - u8 *dest, *cdat, bits; - int bytes = p->next_line, rows; - u32 eorx, fgx, bgx, d1, d2, d3, d4; - - dest = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * fontwidth(p) * 3; - if (fontwidth(p) <= 8) - cdat = p->fontdata + (c & p->charmask) * fontheight(p); - else - cdat = p->fontdata + ((c & p->charmask) * fontheight(p) << 1); - - fgx = ((u32 *)p->dispsw_data)[attr_fgcol(p, c)]; - bgx = ((u32 *)p->dispsw_data)[attr_bgcol(p, c)]; - eorx = fgx ^ bgx; - - for (rows = fontheight(p); rows--; dest += bytes) { - bits = *cdat++; - d1 = (-(bits >> 7) & eorx) ^ bgx; - d2 = (-(bits >> 6 & 1) & eorx) ^ bgx; - d3 = (-(bits >> 5 & 1) & eorx) ^ bgx; - d4 = (-(bits >> 4 & 1) & eorx) ^ bgx; - store4pixels(d1, d2, d3, d4, (u32 *)dest); - if (fontwidth(p) < 8) - continue; - d1 = (-(bits >> 3 & 1) & eorx) ^ bgx; - d2 = (-(bits >> 2 & 1) & eorx) ^ bgx; - d3 = (-(bits >> 1 & 1) & eorx) ^ bgx; - d4 = (-(bits & 1) & eorx) ^ bgx; - store4pixels(d1, d2, d3, d4, (u32 *)(dest+12)); - if (fontwidth(p) < 12) - continue; - bits = *cdat++; - d1 = (-(bits >> 7) & eorx) ^ bgx; - d2 = (-(bits >> 6 & 1) & eorx) ^ bgx; - d3 = (-(bits >> 5 & 1) & eorx) ^ bgx; - d4 = (-(bits >> 4 & 1) & eorx) ^ bgx; - store4pixels(d1, d2, d3, d4, (u32 *)(dest+24)); - if (fontwidth(p) < 16) - continue; - d1 = (-(bits >> 3 & 1) & eorx) ^ bgx; - d2 = (-(bits >> 2 & 1) & eorx) ^ bgx; - d3 = (-(bits >> 1 & 1) & eorx) ^ bgx; - d4 = (-(bits & 1) & eorx) ^ bgx; - store4pixels(d1, d2, d3, d4, (u32 *)(dest+36)); - } -} - -void fbcon_cfb24_putcs(struct vc_data *conp, struct display *p, - const unsigned short *s, int count, int yy, int xx) -{ - u8 *cdat, *dest, *dest0, bits; - u16 c; - int rows, bytes = p->next_line; - u32 eorx, fgx, bgx, d1, d2, d3, d4; - - dest0 = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * fontwidth(p) * 3; - c = scr_readw(s); - fgx = ((u32 *)p->dispsw_data)[attr_fgcol(p, c)]; - bgx = ((u32 *)p->dispsw_data)[attr_bgcol(p, c)]; - eorx = fgx ^ bgx; - while (count--) { - c = scr_readw(s++) & p->charmask; - if (fontwidth(p) <= 8) - cdat = p->fontdata + c * fontheight(p); - - else - cdat = p->fontdata + (c * fontheight(p) << 1); - for (rows = fontheight(p), dest = dest0; rows--; dest += bytes) { - bits = *cdat++; - d1 = (-(bits >> 7) & eorx) ^ bgx; - d2 = (-(bits >> 6 & 1) & eorx) ^ bgx; - d3 = (-(bits >> 5 & 1) & eorx) ^ bgx; - d4 = (-(bits >> 4 & 1) & eorx) ^ bgx; - store4pixels(d1, d2, d3, d4, (u32 *)dest); - if (fontwidth(p) < 8) - continue; - d1 = (-(bits >> 3 & 1) & eorx) ^ bgx; - d2 = (-(bits >> 2 & 1) & eorx) ^ bgx; - d3 = (-(bits >> 1 & 1) & eorx) ^ bgx; - d4 = (-(bits & 1) & eorx) ^ bgx; - store4pixels(d1, d2, d3, d4, (u32 *)(dest+12)); - if (fontwidth(p) < 12) - continue; - bits = *cdat++; - d1 = (-(bits >> 7) & eorx) ^ bgx; - d2 = (-(bits >> 6 & 1) & eorx) ^ bgx; - d3 = (-(bits >> 5 & 1) & eorx) ^ bgx; - d4 = (-(bits >> 4 & 1) & eorx) ^ bgx; - store4pixels(d1, d2, d3, d4, (u32 *)(dest+24)); - if (fontwidth(p) < 16) - continue; - d1 = (-(bits >> 3 & 1) & eorx) ^ bgx; - d2 = (-(bits >> 2 & 1) & eorx) ^ bgx; - d3 = (-(bits >> 1 & 1) & eorx) ^ bgx; - d4 = (-(bits & 1) & eorx) ^ bgx; - store4pixels(d1, d2, d3, d4, (u32 *)(dest+36)); - } - dest0 += fontwidth(p)*3; - } -} - -void fbcon_cfb24_revc(struct display *p, int xx, int yy) -{ - u8 *dest; - int bytes = p->next_line, rows; - - dest = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * fontwidth(p) * 3; - for (rows = fontheight(p); rows--; dest += bytes) { - switch (fontwidth(p)) { - case 16: - fb_writel(fb_readl(dest+36) ^ 0xffffffff, dest+36); - fb_writel(fb_readl(dest+40) ^ 0xffffffff, dest+40); - fb_writel(fb_readl(dest+44) ^ 0xffffffff, dest+44); - /* FALL THROUGH */ - case 12: - fb_writel(fb_readl(dest+24) ^ 0xffffffff, dest+24); - fb_writel(fb_readl(dest+28) ^ 0xffffffff, dest+28); - fb_writel(fb_readl(dest+32) ^ 0xffffffff, dest+32); - /* FALL THROUGH */ - case 8: - fb_writel(fb_readl(dest+12) ^ 0xffffffff, dest+12); - fb_writel(fb_readl(dest+16) ^ 0xffffffff, dest+16); - fb_writel(fb_readl(dest+20) ^ 0xffffffff, dest+20); - /* FALL THROUGH */ - case 4: - fb_writel(fb_readl(dest+0) ^ 0xffffffff, dest+0); - fb_writel(fb_readl(dest+4) ^ 0xffffffff, dest+4); - fb_writel(fb_readl(dest+8) ^ 0xffffffff, dest+8); - } - } -} - -void fbcon_cfb24_clear_margins(struct vc_data *conp, struct display *p, - int bottom_only) -{ - int bytes = p->next_line; - u32 bgx; - - unsigned int right_start = conp->vc_cols*fontwidth(p); - unsigned int bottom_start = conp->vc_rows*fontheight(p); - unsigned int right_width, bottom_width; - - bgx = ((u32 *)p->dispsw_data)[attr_bgcol_ec(p, conp)]; - - if (!bottom_only && (right_width = p->var.xres-right_start)) - rectfill(p->fb_info->screen_base+right_start*3, right_width, - p->var.yres_virtual, bgx, bytes); - if ((bottom_width = p->var.yres-bottom_start)) - rectfill(p->fb_info->screen_base+(p->var.yoffset+bottom_start)*bytes, - right_start, bottom_width, bgx, bytes); -} - - - /* - * `switch' for the low level operations - */ - -struct display_switch fbcon_cfb24 = { - setup: fbcon_cfb24_setup, - bmove: fbcon_cfb24_bmove, - clear: fbcon_cfb24_clear, - putc: fbcon_cfb24_putc, - putcs: fbcon_cfb24_putcs, - revc: fbcon_cfb24_revc, - clear_margins: fbcon_cfb24_clear_margins, - fontwidthmask: FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16) -}; - - -#ifdef MODULE -MODULE_LICENSE("GPL"); - -int init_module(void) -{ - return 0; -} - -void cleanup_module(void) -{} -#endif /* MODULE */ - - - /* - * Visible symbols for modules - */ - -EXPORT_SYMBOL(fbcon_cfb24); -EXPORT_SYMBOL(fbcon_cfb24_setup); -EXPORT_SYMBOL(fbcon_cfb24_bmove); -EXPORT_SYMBOL(fbcon_cfb24_clear); -EXPORT_SYMBOL(fbcon_cfb24_putc); -EXPORT_SYMBOL(fbcon_cfb24_putcs); -EXPORT_SYMBOL(fbcon_cfb24_revc); -EXPORT_SYMBOL(fbcon_cfb24_clear_margins); diff --git a/drivers/video/fbcon-cfb32.c b/drivers/video/fbcon-cfb32.c deleted file mode 100644 index 76e7036109601ed641f63828cca73945b2ee1bb1..0000000000000000000000000000000000000000 --- a/drivers/video/fbcon-cfb32.c +++ /dev/null @@ -1,305 +0,0 @@ -/* - * linux/drivers/video/cfb32.c -- Low level frame buffer operations for 32 bpp - * truecolor packed pixels - * - * Created 28 Dec 1997 by Geert Uytterhoeven - * - * This file is subject to the terms and conditions of the GNU General Public - * License. See the file COPYING in the main directory of this archive for - * more details. - */ - -#include <linux/module.h> -#include <linux/tty.h> -#include <linux/console.h> -#include <linux/string.h> -#include <linux/fb.h> - -#include <video/fbcon.h> -#include <video/fbcon-cfb32.h> - - - /* - * 32 bpp packed pixels - */ - -void fbcon_cfb32_setup(struct display *p) -{ - p->next_line = p->fb_info->fix.line_length ? p->fb_info->fix.line_length : p->var.xres_virtual<<2; - p->next_plane = 0; -} - -void fbcon_cfb32_bmove(struct display *p, int sy, int sx, int dy, int dx, - int height, int width) -{ - int bytes = p->next_line, linesize = bytes * fontheight(p), rows; - u8 *src, *dst; - - if (sx == 0 && dx == 0 && width * fontwidth(p) * 4 == bytes) { - fb_memmove(p->fb_info->screen_base + dy * linesize, - p->fb_info->screen_base + sy * linesize, - height * linesize); - return; - } - if (fontwidthlog(p)) { - sx <<= fontwidthlog(p)+2; - dx <<= fontwidthlog(p)+2; - width <<= fontwidthlog(p)+2; - } else { - sx *= fontwidth(p)*4; - dx *= fontwidth(p)*4; - width *= fontwidth(p)*4; - } - if (dy < sy || (dy == sy && dx < sx)) { - src = p->fb_info->screen_base + sy * linesize + sx; - dst = p->fb_info->screen_base + dy * linesize + dx; - for (rows = height * fontheight(p); rows--;) { - fb_memmove(dst, src, width); - src += bytes; - dst += bytes; - } - } else { - src = p->fb_info->screen_base + (sy+height) * linesize + sx - bytes; - dst = p->fb_info->screen_base + (dy+height) * linesize + dx - bytes; - for (rows = height * fontheight(p); rows--;) { - fb_memmove(dst, src, width); - src -= bytes; - dst -= bytes; - } - } -} - -static inline void rectfill(u8 *dest, int width, int height, u32 data, - int linesize) -{ - int i; - - while (height-- > 0) { - u32 *p = (u32 *)dest; - for (i = 0; i < width/4; i++) { - fb_writel(data, p++); - fb_writel(data, p++); - fb_writel(data, p++); - fb_writel(data, p++); - } - if (width & 2) { - fb_writel(data, p++); - fb_writel(data, p++); - } - if (width & 1) - fb_writel(data, p++); - dest += linesize; - } -} - -void fbcon_cfb32_clear(struct vc_data *conp, struct display *p, int sy, int sx, - int height, int width) -{ - u8 *dest; - int bytes = p->next_line, lines = height * fontheight(p); - u32 bgx; - - dest = p->fb_info->screen_base + sy * fontheight(p) * bytes + sx * fontwidth(p) * 4; - - bgx = ((u32 *)p->dispsw_data)[attr_bgcol_ec(p, conp)]; - - width *= fontwidth(p)/4; - if (width * 16 == bytes) - rectfill(dest, lines * width * 4, 1, bgx, bytes); - else - rectfill(dest, width * 4, lines, bgx, bytes); -} - -void fbcon_cfb32_putc(struct vc_data *conp, struct display *p, int c, int yy, - int xx) -{ - u8 *dest, *cdat, bits; - int bytes = p->next_line, rows; - u32 eorx, fgx, bgx, *pt; - - dest = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * fontwidth(p) * 4; - if (fontwidth(p) <= 8) - cdat = p->fontdata + (c & p->charmask) * fontheight(p); - else - cdat = p->fontdata + ((c & p->charmask) * fontheight(p) << 1); - fgx = ((u32 *)p->dispsw_data)[attr_fgcol(p, c)]; - bgx = ((u32 *)p->dispsw_data)[attr_bgcol(p, c)]; - eorx = fgx ^ bgx; - - for (rows = fontheight(p); rows--; dest += bytes) { - bits = *cdat++; - pt = (u32 *) dest; - fb_writel((-(bits >> 7) & eorx) ^ bgx, pt++); - fb_writel((-(bits >> 6 & 1) & eorx) ^ bgx, pt++); - fb_writel((-(bits >> 5 & 1) & eorx) ^ bgx, pt++); - fb_writel((-(bits >> 4 & 1) & eorx) ^ bgx, pt++); - if (fontwidth(p) < 8) - continue; - fb_writel((-(bits >> 3 & 1) & eorx) ^ bgx, pt++); - fb_writel((-(bits >> 2 & 1) & eorx) ^ bgx, pt++); - fb_writel((-(bits >> 1 & 1) & eorx) ^ bgx, pt++); - fb_writel((-(bits & 1) & eorx) ^ bgx, pt++); - if (fontwidth(p) < 12) - continue; - bits = *cdat++; - fb_writel((-(bits >> 7) & eorx) ^ bgx, pt++); - fb_writel((-(bits >> 6 & 1) & eorx) ^ bgx, pt++); - fb_writel((-(bits >> 5 & 1) & eorx) ^ bgx, pt++); - fb_writel((-(bits >> 4 & 1) & eorx) ^ bgx, pt++); - if (fontwidth(p) < 16) - continue; - fb_writel((-(bits >> 3 & 1) & eorx) ^ bgx, pt++); - fb_writel((-(bits >> 2 & 1) & eorx) ^ bgx, pt++); - fb_writel((-(bits >> 1 & 1) & eorx) ^ bgx, pt++); - fb_writel((-(bits & 1) & eorx) ^ bgx, pt++); - } -} - -void fbcon_cfb32_putcs(struct vc_data *conp, struct display *p, - const unsigned short *s, int count, int yy, int xx) -{ - u8 *cdat, *dest, *dest0, bits; - u16 c; - int rows, bytes = p->next_line; - u32 eorx, fgx, bgx, *pt; - - dest0 = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * fontwidth(p) * 4; - c = scr_readw(s); - fgx = ((u32 *)p->dispsw_data)[attr_fgcol(p, c)]; - bgx = ((u32 *)p->dispsw_data)[attr_bgcol(p, c)]; - eorx = fgx ^ bgx; - while (count--) { - c = scr_readw(s++) & p->charmask; - if (fontwidth(p) <= 8) - cdat = p->fontdata + c * fontheight(p); - else - cdat = p->fontdata + (c * fontheight(p) << 1); - for (rows = fontheight(p), dest = dest0; rows--; dest += bytes) { - bits = *cdat++; - pt = (u32 *) dest; - fb_writel((-(bits >> 7) & eorx) ^ bgx, pt++); - fb_writel((-(bits >> 6 & 1) & eorx) ^ bgx, pt++); - fb_writel((-(bits >> 5 & 1) & eorx) ^ bgx, pt++); - fb_writel((-(bits >> 4 & 1) & eorx) ^ bgx, pt++); - if (fontwidth(p) < 8) - continue; - fb_writel((-(bits >> 3 & 1) & eorx) ^ bgx, pt++); - fb_writel((-(bits >> 2 & 1) & eorx) ^ bgx, pt++); - fb_writel((-(bits >> 1 & 1) & eorx) ^ bgx, pt++); - fb_writel((-(bits & 1) & eorx) ^ bgx, pt++); - if (fontwidth(p) < 12) - continue; - bits = *cdat++; - fb_writel((-(bits >> 7) & eorx) ^ bgx, pt++); - fb_writel((-(bits >> 6 & 1) & eorx) ^ bgx, pt++); - fb_writel((-(bits >> 5 & 1) & eorx) ^ bgx, pt++); - fb_writel((-(bits >> 4 & 1) & eorx) ^ bgx, pt++); - if (fontwidth(p) < 16) - continue; - fb_writel((-(bits >> 3 & 1) & eorx) ^ bgx, pt++); - fb_writel((-(bits >> 2 & 1) & eorx) ^ bgx, pt++); - fb_writel((-(bits >> 1 & 1) & eorx) ^ bgx, pt++); - fb_writel((-(bits & 1) & eorx) ^ bgx, pt++); - } - dest0 += fontwidth(p)*4; - } -} - -void fbcon_cfb32_revc(struct display *p, int xx, int yy) -{ - u8 *dest; - int bytes = p->next_line, rows; - - dest = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * fontwidth(p) * 4; - for (rows = fontheight(p); rows--; dest += bytes) { - switch (fontwidth(p)) { - case 16: - fb_writel(fb_readl(dest+(4*12)) ^ 0xffffffff, dest+(4*12)); - fb_writel(fb_readl(dest+(4*13)) ^ 0xffffffff, dest+(4*13)); - fb_writel(fb_readl(dest+(4*14)) ^ 0xffffffff, dest+(4*14)); - fb_writel(fb_readl(dest+(4*15)) ^ 0xffffffff, dest+(4*15)); - /* FALL THROUGH */ - case 12: - fb_writel(fb_readl(dest+(4*8)) ^ 0xffffffff, dest+(4*8)); - fb_writel(fb_readl(dest+(4*9)) ^ 0xffffffff, dest+(4*9)); - fb_writel(fb_readl(dest+(4*10)) ^ 0xffffffff, dest+(4*10)); - fb_writel(fb_readl(dest+(4*11)) ^ 0xffffffff, dest+(4*11)); - /* FALL THROUGH */ - case 8: - fb_writel(fb_readl(dest+(4*4)) ^ 0xffffffff, dest+(4*4)); - fb_writel(fb_readl(dest+(4*5)) ^ 0xffffffff, dest+(4*5)); - fb_writel(fb_readl(dest+(4*6)) ^ 0xffffffff, dest+(4*6)); - fb_writel(fb_readl(dest+(4*7)) ^ 0xffffffff, dest+(4*7)); - /* FALL THROUGH */ - case 4: - fb_writel(fb_readl(dest+(4*0)) ^ 0xffffffff, dest+(4*0)); - fb_writel(fb_readl(dest+(4*1)) ^ 0xffffffff, dest+(4*1)); - fb_writel(fb_readl(dest+(4*2)) ^ 0xffffffff, dest+(4*2)); - fb_writel(fb_readl(dest+(4*3)) ^ 0xffffffff, dest+(4*3)); - /* FALL THROUGH */ - } - } -} - -void fbcon_cfb32_clear_margins(struct vc_data *conp, struct display *p, - int bottom_only) -{ - int bytes = p->next_line; - u32 bgx; - - unsigned int right_start = conp->vc_cols*fontwidth(p); - unsigned int bottom_start = conp->vc_rows*fontheight(p); - unsigned int right_width, bottom_width; - - bgx = ((u32 *)p->dispsw_data)[attr_bgcol_ec(p, conp)]; - - if (!bottom_only && (right_width = p->var.xres-right_start)) - rectfill(p->fb_info->screen_base+right_start*4, right_width, - p->var.yres_virtual, bgx, bytes); - if ((bottom_width = p->var.yres-bottom_start)) - rectfill(p->fb_info->screen_base+(p->var.yoffset+bottom_start)*bytes, - right_start, bottom_width, bgx, bytes); -} - - - /* - * `switch' for the low level operations - */ - -struct display_switch fbcon_cfb32 = { - setup: fbcon_cfb32_setup, - bmove: fbcon_cfb32_bmove, - clear: fbcon_cfb32_clear, - putc: fbcon_cfb32_putc, - putcs: fbcon_cfb32_putcs, - revc: fbcon_cfb32_revc, - clear_margins: fbcon_cfb32_clear_margins, - fontwidthmask: FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16) -}; - - -#ifdef MODULE -MODULE_LICENSE("GPL"); - -int init_module(void) -{ - return 0; -} - -void cleanup_module(void) -{} -#endif /* MODULE */ - - - /* - * Visible symbols for modules - */ - -EXPORT_SYMBOL(fbcon_cfb32); -EXPORT_SYMBOL(fbcon_cfb32_setup); -EXPORT_SYMBOL(fbcon_cfb32_bmove); -EXPORT_SYMBOL(fbcon_cfb32_clear); -EXPORT_SYMBOL(fbcon_cfb32_putc); -EXPORT_SYMBOL(fbcon_cfb32_putcs); -EXPORT_SYMBOL(fbcon_cfb32_revc); -EXPORT_SYMBOL(fbcon_cfb32_clear_margins); diff --git a/drivers/video/fbcon-cfb4.c b/drivers/video/fbcon-cfb4.c deleted file mode 100644 index 5af563a659658edf848298a01965b0916c4a5f0c..0000000000000000000000000000000000000000 --- a/drivers/video/fbcon-cfb4.c +++ /dev/null @@ -1,229 +0,0 @@ -/* - * linux/drivers/video/cfb4.c -- Low level frame buffer operations for 4 bpp - * packed pixels - * - * Created 26 Dec 1997 by Michael Schmitz - * Based on the old macfb.c 4bpp code by Alan Cox - * - * This file is subject to the terms and conditions of the GNU General Public - * License. See the file COPYING in the main directory of this archive for - * more details. - */ - -#include <linux/module.h> -#include <linux/tty.h> -#include <linux/console.h> -#include <linux/string.h> -#include <linux/fb.h> - -#include <video/fbcon.h> -#include <video/fbcon-cfb4.h> - - - /* - * 4 bpp packed pixels - */ - - /* - * IFF the font is even pixel aligned (that is to say each - * character start is a byte start in the pixel pairs). That - * avoids us having to mask bytes and means we won't be here - * all week. On a MacII that matters _lots_ - */ - -static u16 nibbletab_cfb4[] = { -#if defined(__BIG_ENDIAN) - 0x0000,0x000f,0x00f0,0x00ff, - 0x0f00,0x0f0f,0x0ff0,0x0fff, - 0xf000,0xf00f,0xf0f0,0xf0ff, - 0xff00,0xff0f,0xfff0,0xffff -#elif defined(__LITTLE_ENDIAN) - 0x0000,0xf000,0x0f00,0xff00, - 0x00f0,0xf0f0,0x0ff0,0xfff0, - 0x000f,0xf00f,0x0f0f,0xff0f, - 0x00ff,0xf0ff,0x0fff,0xffff -#else -#error FIXME: No endianness?? -#endif - -}; - -void fbcon_cfb4_setup(struct display *p) -{ - p->next_line = p->fb_info->fix.line_length ? p->fb_info->fix.line_length : p->var.xres_virtual>>1; - p->next_plane = 0; -} - -void fbcon_cfb4_bmove(struct display *p, int sy, int sx, int dy, int dx, - int height, int width) -{ - int bytes = p->next_line, linesize = bytes * fontheight(p), rows; - u8 *src,*dst; - - if (sx == 0 && dx == 0 && width * 4 == bytes) { - fb_memmove(p->fb_info->screen_base + dy * linesize, - p->fb_info->screen_base + sy * linesize, - height * linesize); - } - else { - if (dy < sy || (dy == sy && dx < sx)) { - src = p->fb_info->screen_base + sy * linesize + sx * 4; - dst = p->fb_info->screen_base + dy * linesize + dx * 4; - for (rows = height * fontheight(p) ; rows-- ;) { - fb_memmove(dst, src, width * 4); - src += bytes; - dst += bytes; - } - } - else { - src = p->fb_info->screen_base + (sy+height) * linesize + sx * 4 - bytes; - dst = p->fb_info->screen_base + (dy+height) * linesize + dx * 4 - bytes; - for (rows = height * fontheight(p) ; rows-- ;) { - fb_memmove(dst, src, width * 4); - src -= bytes; - dst -= bytes; - } - } - } -} - -void fbcon_cfb4_clear(struct vc_data *conp, struct display *p, int sy, int sx, - int height, int width) -{ - u8 *dest0,*dest; - int bytes=p->next_line,lines=height * fontheight(p), rows, i; - u32 bgx; - -/* if(p->fb_info->screen_base!=0xFDD00020) - mac_boom(1);*/ - dest = p->fb_info->screen_base + sy * fontheight(p) * bytes + sx * 4; - - bgx=attr_bgcol_ec(p,conp); - bgx |= (bgx << 4); /* expand the colour to 32bits */ - bgx |= (bgx << 8); - bgx |= (bgx << 16); - - if (sx == 0 && width * 4 == bytes) { - for (i = 0 ; i < lines * width ; i++) { - fb_writel (bgx, dest); - dest+=4; - } - } else { - dest0=dest; - for (rows = lines; rows-- ; dest0 += bytes) { - dest=dest0; - for (i = 0 ; i < width ; i++) { - /* memset ?? */ - fb_writel (bgx, dest); - dest+=4; - } - } - } -} - -void fbcon_cfb4_putc(struct vc_data *conp, struct display *p, int c, int yy, - int xx) -{ - u8 *dest,*cdat; - int bytes=p->next_line,rows; - u32 eorx,fgx,bgx; - - dest = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * 4; - cdat = p->fontdata + (c & p->charmask) * fontheight(p); - - fgx=attr_fgcol(p,c); - bgx=attr_bgcol(p,c); - fgx |= (fgx << 4); - fgx |= (fgx << 8); - bgx |= (bgx << 4); - bgx |= (bgx << 8); - eorx = fgx ^ bgx; - - for (rows = fontheight(p) ; rows-- ; dest += bytes) { - fb_writew((nibbletab_cfb4[*cdat >> 4] & eorx) ^ bgx, dest+0); - fb_writew((nibbletab_cfb4[*cdat++ & 0xf] & eorx) ^ bgx, dest+2); - } -} - -void fbcon_cfb4_putcs(struct vc_data *conp, struct display *p, - const unsigned short *s, int count, int yy, int xx) -{ - u8 *cdat, *dest, *dest0; - u16 c; - int rows,bytes=p->next_line; - u32 eorx, fgx, bgx; - - dest0 = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * 4; - c = scr_readw(s); - fgx = attr_fgcol(p, c); - bgx = attr_bgcol(p, c); - fgx |= (fgx << 4); - fgx |= (fgx << 8); - fgx |= (fgx << 16); - bgx |= (bgx << 4); - bgx |= (bgx << 8); - bgx |= (bgx << 16); - eorx = fgx ^ bgx; - while (count--) { - c = scr_readw(s++) & p->charmask; - cdat = p->fontdata + c * fontheight(p); - - for (rows = fontheight(p), dest = dest0; rows-- ; dest += bytes) { - fb_writew((nibbletab_cfb4[*cdat >> 4] & eorx) ^ bgx, dest+0); - fb_writew((nibbletab_cfb4[*cdat++ & 0xf] & eorx) ^ bgx, dest+2); - } - dest0+=4; - } -} - -void fbcon_cfb4_revc(struct display *p, int xx, int yy) -{ - u8 *dest; - int bytes=p->next_line, rows; - - dest = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * 4; - for (rows = fontheight(p) ; rows-- ; dest += bytes) { - fb_writel(fb_readl(dest+0) ^ 0xffffffff, dest+0); - } -} - - - /* - * `switch' for the low level operations - */ - -struct display_switch fbcon_cfb4 = { - setup: fbcon_cfb4_setup, - bmove: fbcon_cfb4_bmove, - clear: fbcon_cfb4_clear, - putc: fbcon_cfb4_putc, - putcs: fbcon_cfb4_putcs, - revc: fbcon_cfb4_revc, - fontwidthmask: FONTWIDTH(8) -}; - - -#ifdef MODULE -MODULE_LICENSE("GPL"); - -int init_module(void) -{ - return 0; -} - -void cleanup_module(void) -{} -#endif /* MODULE */ - - - /* - * Visible symbols for modules - */ - -EXPORT_SYMBOL(fbcon_cfb4); -EXPORT_SYMBOL(fbcon_cfb4_setup); -EXPORT_SYMBOL(fbcon_cfb4_bmove); -EXPORT_SYMBOL(fbcon_cfb4_clear); -EXPORT_SYMBOL(fbcon_cfb4_putc); -EXPORT_SYMBOL(fbcon_cfb4_putcs); -EXPORT_SYMBOL(fbcon_cfb4_revc); diff --git a/drivers/video/fbcon-cfb8.c b/drivers/video/fbcon-cfb8.c deleted file mode 100644 index 1ac103832e2a62d429ec7b4aac0d4a23679ddca4..0000000000000000000000000000000000000000 --- a/drivers/video/fbcon-cfb8.c +++ /dev/null @@ -1,294 +0,0 @@ -/* - * linux/drivers/video/cfb8.c -- Low level frame buffer operations for 8 bpp - * packed pixels - * - * Created 5 Apr 1997 by Geert Uytterhoeven - * - * This file is subject to the terms and conditions of the GNU General Public - * License. See the file COPYING in the main directory of this archive for - * more details. - */ - -#include <linux/module.h> -#include <linux/tty.h> -#include <linux/console.h> -#include <linux/string.h> -#include <linux/fb.h> - -#include <video/fbcon.h> -#include <video/fbcon-cfb8.h> - - - /* - * 8 bpp packed pixels - */ - -static u32 nibbletab_cfb8[] = { -#if defined(__BIG_ENDIAN) - 0x00000000,0x000000ff,0x0000ff00,0x0000ffff, - 0x00ff0000,0x00ff00ff,0x00ffff00,0x00ffffff, - 0xff000000,0xff0000ff,0xff00ff00,0xff00ffff, - 0xffff0000,0xffff00ff,0xffffff00,0xffffffff -#elif defined(__LITTLE_ENDIAN) - 0x00000000,0xff000000,0x00ff0000,0xffff0000, - 0x0000ff00,0xff00ff00,0x00ffff00,0xffffff00, - 0x000000ff,0xff0000ff,0x00ff00ff,0xffff00ff, - 0x0000ffff,0xff00ffff,0x00ffffff,0xffffffff -#else -#error FIXME: No endianness?? -#endif -}; - -void fbcon_cfb8_setup(struct display *p) -{ - p->next_line = p->fb_info->fix.line_length ? p->fb_info->fix.line_length : p->var.xres_virtual; - p->next_plane = 0; -} - -void fbcon_cfb8_bmove(struct display *p, int sy, int sx, int dy, int dx, - int height, int width) -{ - int bytes = p->next_line, linesize = bytes * fontheight(p), rows; - u8 *src,*dst; - - if (sx == 0 && dx == 0 && width * fontwidth(p) == bytes) { - fb_memmove(p->fb_info->screen_base + dy * linesize, - p->fb_info->screen_base + sy * linesize, - height * linesize); - return; - } - if (fontwidthlog(p)) { - sx <<= fontwidthlog(p); dx <<= fontwidthlog(p); width <<= fontwidthlog(p); - } else { - sx *= fontwidth(p); dx *= fontwidth(p); width *= fontwidth(p); - } - if (dy < sy || (dy == sy && dx < sx)) { - src = p->fb_info->screen_base + sy * linesize + sx; - dst = p->fb_info->screen_base + dy * linesize + dx; - for (rows = height * fontheight(p) ; rows-- ;) { - fb_memmove(dst, src, width); - src += bytes; - dst += bytes; - } - } else { - src = p->fb_info->screen_base + (sy+height) * linesize + sx - bytes; - dst = p->fb_info->screen_base + (dy+height) * linesize + dx - bytes; - for (rows = height * fontheight(p) ; rows-- ;) { - fb_memmove(dst, src, width); - src -= bytes; - dst -= bytes; - } - } -} - -static inline void rectfill(u8 *dest, int width, int height, u8 data, - int linesize) -{ - while (height-- > 0) { - fb_memset(dest, data, width); - dest += linesize; - } -} - -void fbcon_cfb8_clear(struct vc_data *conp, struct display *p, int sy, int sx, - int height, int width) -{ - u8 *dest; - int bytes=p->next_line,lines=height * fontheight(p); - u8 bgx; - - dest = p->fb_info->screen_base + sy * fontheight(p) * bytes + sx * fontwidth(p); - - bgx=attr_bgcol_ec(p,conp); - - width *= fontwidth(p); - if (width == bytes) - rectfill(dest, lines * width, 1, bgx, bytes); - else - rectfill(dest, width, lines, bgx, bytes); -} - -void fbcon_cfb8_putc(struct vc_data *conp, struct display *p, int c, int yy, - int xx) -{ - u8 *dest,*cdat; - int bytes=p->next_line,rows; - u32 eorx,fgx,bgx; - - dest = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * fontwidth(p); - if (fontwidth(p) <= 8) - cdat = p->fontdata + (c & p->charmask) * fontheight(p); - else - cdat = p->fontdata + ((c & p->charmask) * fontheight(p) << 1); - - fgx=attr_fgcol(p,c); - bgx=attr_bgcol(p,c); - fgx |= (fgx << 8); - fgx |= (fgx << 16); - bgx |= (bgx << 8); - bgx |= (bgx << 16); - eorx = fgx ^ bgx; - - switch (fontwidth(p)) { - case 4: - for (rows = fontheight(p) ; rows-- ; dest += bytes) - fb_writel((nibbletab_cfb8[*cdat++ >> 4] & eorx) ^ bgx, dest); - break; - case 8: - for (rows = fontheight(p) ; rows-- ; dest += bytes) { - fb_writel((nibbletab_cfb8[*cdat >> 4] & eorx) ^ bgx, dest); - fb_writel((nibbletab_cfb8[*cdat++ & 0xf] & eorx) ^ bgx, dest+4); - } - break; - case 12: - case 16: - for (rows = fontheight(p) ; rows-- ; dest += bytes) { - fb_writel((nibbletab_cfb8[*cdat >> 4] & eorx) ^ bgx, dest); - fb_writel((nibbletab_cfb8[*cdat++ & 0xf] & eorx) ^ bgx, dest+4); - fb_writel((nibbletab_cfb8[(*cdat >> 4) & 0xf] & eorx) ^ bgx, dest+8); - if (fontwidth(p) == 16) - fb_writel((nibbletab_cfb8[*cdat & 0xf] & eorx) ^ bgx, dest+12); - cdat++; - } - break; - } -} - -void fbcon_cfb8_putcs(struct vc_data *conp, struct display *p, - const unsigned short *s, int count, int yy, int xx) -{ - u8 *cdat, *dest, *dest0; - u16 c; - int rows,bytes=p->next_line; - u32 eorx, fgx, bgx; - - dest0 = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * fontwidth(p); - c = scr_readw(s); - fgx = attr_fgcol(p, c); - bgx = attr_bgcol(p, c); - fgx |= (fgx << 8); - fgx |= (fgx << 16); - bgx |= (bgx << 8); - bgx |= (bgx << 16); - eorx = fgx ^ bgx; - switch (fontwidth(p)) { - case 4: - while (count--) { - c = scr_readw(s++) & p->charmask; - cdat = p->fontdata + c * fontheight(p); - - for (rows = fontheight(p), dest = dest0; rows-- ; dest += bytes) - fb_writel((nibbletab_cfb8[*cdat++ >> 4] & eorx) ^ bgx, dest); - dest0+=4; - } - break; - case 8: - while (count--) { - c = scr_readw(s++) & p->charmask; - cdat = p->fontdata + c * fontheight(p); - - for (rows = fontheight(p), dest = dest0; rows-- ; dest += bytes) { - fb_writel((nibbletab_cfb8[*cdat >> 4] & eorx) ^ bgx, dest); - fb_writel((nibbletab_cfb8[*cdat++ & 0xf] & eorx) ^ bgx, dest+4); - } - dest0+=8; - } - break; - case 12: - case 16: - while (count--) { - c = scr_readw(s++) & p->charmask; - cdat = p->fontdata + (c * fontheight(p) << 1); - - for (rows = fontheight(p), dest = dest0; rows-- ; dest += bytes) { - fb_writel((nibbletab_cfb8[*cdat >> 4] & eorx) ^ bgx, dest); - fb_writel((nibbletab_cfb8[*cdat++ & 0xf] & eorx) ^ bgx, dest+4); - fb_writel((nibbletab_cfb8[(*cdat >> 4) & 0xf] & eorx) ^ bgx, dest+8); - if (fontwidth(p) == 16) - fb_writel((nibbletab_cfb8[*cdat & 0xf] & eorx) ^ bgx, dest+12); - cdat++; - } - dest0+=fontwidth(p); - } - break; - } -} - -void fbcon_cfb8_revc(struct display *p, int xx, int yy) -{ - u8 *dest; - int bytes=p->next_line, rows; - - dest = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * fontwidth(p); - for (rows = fontheight(p) ; rows-- ; dest += bytes) { - switch (fontwidth(p)) { - case 16: fb_writel(fb_readl(dest+12) ^ 0x0f0f0f0f, dest+12); /* fall thru */ - case 12: fb_writel(fb_readl(dest+8) ^ 0x0f0f0f0f, dest+8); /* fall thru */ - case 8: fb_writel(fb_readl(dest+4) ^ 0x0f0f0f0f, dest+4); /* fall thru */ - case 4: fb_writel(fb_readl(dest) ^ 0x0f0f0f0f, dest); /* fall thru */ - default: break; - } - } -} - -void fbcon_cfb8_clear_margins(struct vc_data *conp, struct display *p, - int bottom_only) -{ - int bytes=p->next_line; - u8 bgx; - - unsigned int right_start = conp->vc_cols*fontwidth(p); - unsigned int bottom_start = conp->vc_rows*fontheight(p); - unsigned int right_width, bottom_width; - - bgx=attr_bgcol_ec(p,conp); - - if (!bottom_only && (right_width = p->var.xres-right_start)) - rectfill(p->fb_info->screen_base+right_start, right_width, p->var.yres_virtual, bgx, bytes); - if ((bottom_width = p->var.yres-bottom_start)) - rectfill(p->fb_info->screen_base+(p->var.yoffset+bottom_start)*bytes, - right_start, bottom_width, bgx, bytes); -} - - - /* - * `switch' for the low level operations - */ - -struct display_switch fbcon_cfb8 = { - setup: fbcon_cfb8_setup, - bmove: fbcon_cfb8_bmove, - clear: fbcon_cfb8_clear, - putc: fbcon_cfb8_putc, - putcs: fbcon_cfb8_putcs, - revc: fbcon_cfb8_revc, - clear_margins: fbcon_cfb8_clear_margins, - fontwidthmask: FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16) -}; - - -#ifdef MODULE -MODULE_LICENSE("GPL"); - -int init_module(void) -{ - return 0; -} - -void cleanup_module(void) -{} -#endif /* MODULE */ - - - /* - * Visible symbols for modules - */ - -EXPORT_SYMBOL(fbcon_cfb8); -EXPORT_SYMBOL(fbcon_cfb8_setup); -EXPORT_SYMBOL(fbcon_cfb8_bmove); -EXPORT_SYMBOL(fbcon_cfb8_clear); -EXPORT_SYMBOL(fbcon_cfb8_putc); -EXPORT_SYMBOL(fbcon_cfb8_putcs); -EXPORT_SYMBOL(fbcon_cfb8_revc); -EXPORT_SYMBOL(fbcon_cfb8_clear_margins); diff --git a/drivers/video/fbcon-mfb.c b/drivers/video/fbcon-mfb.c deleted file mode 100644 index 21b7b3ddaba7d36f2e87b80e06da2d092973539e..0000000000000000000000000000000000000000 --- a/drivers/video/fbcon-mfb.c +++ /dev/null @@ -1,217 +0,0 @@ -/* - * linux/drivers/video/mfb.c -- Low level frame buffer operations for - * monochrome - * - * Created 5 Apr 1997 by Geert Uytterhoeven - * - * This file is subject to the terms and conditions of the GNU General Public - * License. See the file COPYING in the main directory of this archive for - * more details. - */ - -#include <linux/module.h> -#include <linux/tty.h> -#include <linux/console.h> -#include <linux/string.h> -#include <linux/fb.h> - -#include <video/fbcon.h> -#include <video/fbcon-mfb.h> - - - /* - * Monochrome - */ - -void fbcon_mfb_setup(struct display *p) -{ - if (p->fb_info->fix.line_length) - p->next_line = p->fb_info->fix.line_length; - else - p->next_line = p->var.xres_virtual>>3; - p->next_plane = 0; -} - -void fbcon_mfb_bmove(struct display *p, int sy, int sx, int dy, int dx, - int height, int width) -{ - u8 *src, *dest; - u_int rows; - - if (sx == 0 && dx == 0 && width == p->next_line) { - src = p->fb_info->screen_base+sy*fontheight(p)*width; - dest = p->fb_info->screen_base+dy*fontheight(p)*width; - fb_memmove(dest, src, height*fontheight(p)*width); - } else if (dy <= sy) { - src = p->fb_info->screen_base+sy*fontheight(p)*p->next_line+sx; - dest = p->fb_info->screen_base+dy*fontheight(p)*p->next_line+dx; - for (rows = height*fontheight(p); rows--;) { - fb_memmove(dest, src, width); - src += p->next_line; - dest += p->next_line; - } - } else { - src = p->fb_info->screen_base+((sy+height)*fontheight(p)-1)*p->next_line+sx; - dest = p->fb_info->screen_base+((dy+height)*fontheight(p)-1)*p->next_line+dx; - for (rows = height*fontheight(p); rows--;) { - fb_memmove(dest, src, width); - src -= p->next_line; - dest -= p->next_line; - } - } -} - -void fbcon_mfb_clear(struct vc_data *conp, struct display *p, int sy, int sx, - int height, int width) -{ - u8 *dest; - u_int rows; - int inverse = conp ? attr_reverse(p,conp->vc_video_erase_char) : 0; - - dest = p->fb_info->screen_base+sy*fontheight(p)*p->next_line+sx; - - if (sx == 0 && width == p->next_line) { - if (inverse) - fb_memset255(dest, height*fontheight(p)*width); - else - fb_memclear(dest, height*fontheight(p)*width); - } else - for (rows = height*fontheight(p); rows--; dest += p->next_line) - if (inverse) - fb_memset255(dest, width); - else - fb_memclear_small(dest, width); -} - -void fbcon_mfb_putc(struct vc_data *conp, struct display *p, int c, int yy, - int xx) -{ - u8 *dest, *cdat; - u_int rows, bold, revs, underl; - u8 d; - - dest = p->fb_info->screen_base+yy*fontheight(p)*p->next_line+xx; - cdat = p->fontdata+(c&p->charmask)*fontheight(p); - bold = attr_bold(p,c); - revs = attr_reverse(p,c); - underl = attr_underline(p,c); - - for (rows = fontheight(p); rows--; dest += p->next_line) { - d = *cdat++; - if (underl && !rows) - d = 0xff; - else if (bold) - d |= d>>1; - if (revs) - d = ~d; - fb_writeb (d, dest); - } -} - -void fbcon_mfb_putcs(struct vc_data *conp, struct display *p, - const unsigned short *s, int count, int yy, int xx) -{ - u8 *dest, *dest0, *cdat; - u_int rows, bold, revs, underl; - u8 d; - u16 c; - - dest0 = p->fb_info->screen_base+yy*fontheight(p)*p->next_line+xx; - c = scr_readw(s); - bold = attr_bold(p, c); - revs = attr_reverse(p, c); - underl = attr_underline(p, c); - - while (count--) { - c = scr_readw(s++) & p->charmask; - dest = dest0++; - cdat = p->fontdata+c*fontheight(p); - for (rows = fontheight(p); rows--; dest += p->next_line) { - d = *cdat++; - if (underl && !rows) - d = 0xff; - else if (bold) - d |= d>>1; - if (revs) - d = ~d; - fb_writeb (d, dest); - } - } -} - -void fbcon_mfb_revc(struct display *p, int xx, int yy) -{ - u8 *dest, d; - u_int rows; - - dest = p->fb_info->screen_base+yy*fontheight(p)*p->next_line+xx; - for (rows = fontheight(p); rows--; dest += p->next_line) { - d = fb_readb(dest); - fb_writeb (~d, dest); - } -} - -void fbcon_mfb_clear_margins(struct vc_data *conp, struct display *p, - int bottom_only) -{ - u8 *dest; - int height, bottom; - int inverse = conp ? attr_reverse(p,conp->vc_video_erase_char) : 0; - - /* XXX Need to handle right margin? */ - - height = p->var.yres - conp->vc_rows * fontheight(p); - if (!height) - return; - bottom = conp->vc_rows + p->yscroll; - if (bottom >= p->vrows) - bottom -= p->vrows; - dest = p->fb_info->screen_base + bottom * fontheight(p) * p->next_line; - if (inverse) - fb_memset255(dest, height * p->next_line); - else - fb_memclear(dest, height * p->next_line); -} - - - /* - * `switch' for the low level operations - */ - -struct display_switch fbcon_mfb = { - setup: fbcon_mfb_setup, - bmove: fbcon_mfb_bmove, - clear: fbcon_mfb_clear, - putc: fbcon_mfb_putc, - putcs: fbcon_mfb_putcs, - revc: fbcon_mfb_revc, - clear_margins: fbcon_mfb_clear_margins, - fontwidthmask: FONTWIDTH(8) -}; - - -#ifdef MODULE -MODULE_LICENSE("GPL"); - -int init_module(void) -{ - return 0; -} - -void cleanup_module(void) -{} -#endif /* MODULE */ - - - /* - * Visible symbols for modules - */ - -EXPORT_SYMBOL(fbcon_mfb); -EXPORT_SYMBOL(fbcon_mfb_setup); -EXPORT_SYMBOL(fbcon_mfb_bmove); -EXPORT_SYMBOL(fbcon_mfb_clear); -EXPORT_SYMBOL(fbcon_mfb_putc); -EXPORT_SYMBOL(fbcon_mfb_putcs); -EXPORT_SYMBOL(fbcon_mfb_revc); -EXPORT_SYMBOL(fbcon_mfb_clear_margins); diff --git a/drivers/video/fbcon.c b/drivers/video/fbcon.c index e6916fa97b85a06db9136a29eb7cf4cfcdb31c60..e390219c82c6ce6c4ae213dbd5cb536d2227d5a7 100644 --- a/drivers/video/fbcon.c +++ b/drivers/video/fbcon.c @@ -100,7 +100,9 @@ #include <asm/linux_logo.h> #include <video/fbcon.h> -#include <video/fbcon-mac.h> /* for 6x11 font on mac */ +#ifdef CONFIG_FBCON_ACCEL +#include "fbcon-accel.h" +#endif #include <video/font.h> #ifdef FBCONDEBUG @@ -277,6 +279,41 @@ int PROC_CONSOLE(const struct fb_info *info) return minor(current->tty->device) - 1; } +void gen_set_disp(int con, struct fb_info *info) +{ + struct display *display = fb_display + con; + + if (info->fix.visual == FB_VISUAL_PSEUDOCOLOR || + info->fix.visual == FB_VISUAL_DIRECTCOLOR) { + display->can_soft_blank = info->fbops->fb_blank ? 1 : 0; + display->dispsw_data = NULL; + } else { + display->can_soft_blank = 0; + display->dispsw_data = info->pseudo_palette; + } + + /* + * If we are setting all the virtual consoles, also set + * the defaults used to create new consoles. + * + if (con < 0 || info->var.activate & FB_ACTIVATE_ALL) { + int unit; + + for (unit = 0; unit < MAX_NR_CONSOLES; unit++) + if (fb_display[unit].conp && con2fb_map[unit] == GET_FB_IDX(info->node)) + fb_display[unit].var = info->var; + } + */ + +#ifdef FBCON_HAS_ACCEL + display->scrollmode = SCROLL_YNOMOVE; + display->dispsw = &fbcon_accel; +#else + display->dispsw = &fbcon_dummy; +#endif + fbcon_changevar(con); + return; +} /** * set_all_vcs - set all virtual consoles to match @@ -300,11 +337,14 @@ int set_all_vcs(int fbidx, struct fb_ops *fb, struct fb_var_screeninfo *var, var->activate |= FB_ACTIVATE_TEST; err = fb->fb_set_var(var, PROC_CONSOLE(info), info); var->activate &= ~FB_ACTIVATE_TEST; + gen_set_disp(PROC_CONSOLE(info), info); if (err) return err; for (unit = 0; unit < MAX_NR_CONSOLES; unit++) - if (fb_display[unit].conp && con2fb_map[unit] == fbidx) + if (fb_display[unit].conp && con2fb_map[unit] == fbidx) { fb->fb_set_var(var, unit, info); + gen_set_disp(unit, info); + } return 0; } @@ -350,7 +390,7 @@ void set_con2fb_map(int unit, int newidx) fontheightlog = fb_display[unit]._fontheightlog; userfont = fb_display[unit].userfont; con2fb_map[unit] = newidx; - fb_display[unit] = *(newfb->disp); + fb_display[unit].conp = conp; fb_display[unit].fontdata = fontdata; fb_display[unit]._fontwidth = fontwidth; @@ -359,15 +399,13 @@ void set_con2fb_map(int unit, int newidx) fb_display[unit]._fontheightlog = fontheightlog; fb_display[unit].userfont = userfont; fb_display[unit].fb_info = newfb; + gen_set_disp(unit, newfb); if (conp) conp->vc_display_fg = &newfb->display_fg; if (!newfb->display_fg) newfb->display_fg = conp; - if (!newfb->changevar) - newfb->changevar = oldfb->changevar; /* tell console var has changed */ - if (newfb->changevar) - newfb->changevar(unit); + fbcon_changevar(unit); } } @@ -474,21 +512,15 @@ static void fbcon_init(struct vc_data *conp, int init) /* on which frame buffer will we open this console? */ info = registered_fb[(int)con2fb_map[unit]]; - info->changevar = &fbcon_changevar; - fb_display[unit] = *(info->disp); /* copy from default */ + gen_set_disp(unit, info); DPRINTK("mode: %s\n",info->modename); - DPRINTK("visual: %d\n",fb_display[unit].visual); + DPRINTK("visual: %d\n",info->fix.visual); DPRINTK("res: %dx%d-%d\n",fb_display[unit].var.xres, fb_display[unit].var.yres, fb_display[unit].var.bits_per_pixel); fb_display[unit].conp = conp; fb_display[unit].fb_info = info; /* clear out the cmap so we don't have dangling pointers */ - fb_display[unit].cmap.len = 0; - fb_display[unit].cmap.red = 0; - fb_display[unit].cmap.green = 0; - fb_display[unit].cmap.blue = 0; - fb_display[unit].cmap.transp = 0; fbcon_setup(unit, init, !init); /* Must be done after fbcon_setup to prevent excess updates */ conp->vc_display_fg = &info->display_fg; @@ -527,7 +559,7 @@ static __inline__ void updatescrollmode(struct display *p) divides(fontheight(p), info->var.yres_virtual)) m = __SCROLL_YWRAP; else if (divides(info->fix.ypanstep, fontheight(p)) && - p->var.yres_virtual >= p->var.yres+fontheight(p)) + info->var.yres_virtual >= info->var.yres+fontheight(p)) m = __SCROLL_YPAN; else if (p->scrollmode & __SCROLL_YNOMOVE) m = __SCROLL_YREDRAW; @@ -567,7 +599,7 @@ static void fbcon_setup(int con, int init, int logo) info->fix.type == FB_TYPE_TEXT) logo = 0; - p->var.xoffset = p->var.yoffset = p->yscroll = 0; /* reset wrap/pan */ + info->var.xoffset = info->var.yoffset = p->yscroll = 0; /* reset wrap/pan */ if (con == fg_console && info->fix.type != FB_TYPE_TEXT) { if (fbcon_softback_size) { @@ -591,7 +623,7 @@ static void fbcon_setup(int con, int init, int logo) } for (i = 0; i < MAX_NR_CONSOLES; i++) - if (i != con && fb_display[i].fb_info == p->fb_info && + if (i != con && fb_display[i].fb_info == info && fb_display[i].conp && fb_display[i].fontdata) break; @@ -617,9 +649,9 @@ static void fbcon_setup(int con, int init, int logo) } if (!p->fontdata) { - if (!p->fb_info->fontname[0] || - !(font = fbcon_find_font(p->fb_info->fontname))) - font = fbcon_get_default_font(p->var.xres, p->var.yres); + if (!info->fontname[0] || + !(font = fbcon_find_font(info->fontname))) + font = fbcon_get_default_font(info->var.xres, info->var.yres); p->_fontwidth = font->width; p->_fontheight = font->height; p->fontdata = font->data; @@ -627,17 +659,9 @@ static void fbcon_setup(int con, int init, int logo) } if (!fontwidthvalid(p,fontwidth(p))) { -#ifdef CONFIG_FBCON_MAC - if (MACH_IS_MAC) - /* ++Geert: hack to make 6x11 fonts work on mac */ - p->dispsw = &fbcon_mac; - else -#endif - { - /* ++Geert: changed from panic() to `correct and continue' */ - printk(KERN_ERR "fbcon_setup: No support for fontwidth %d\n", fontwidth(p)); - p->dispsw = &fbcon_dummy; - } + /* ++Geert: changed from panic() to `correct and continue' */ + printk(KERN_ERR "fbcon_setup: No support for fontwidth %d\n", fontwidth(p)); + p->dispsw = &fbcon_dummy; } if (p->dispsw->set_font) p->dispsw->set_font(p, fontwidth(p), fontheight(p)); @@ -646,8 +670,8 @@ static void fbcon_setup(int con, int init, int logo) old_cols = conp->vc_cols; old_rows = conp->vc_rows; - nr_cols = p->var.xres/fontwidth(p); - nr_rows = p->var.yres/fontheight(p); + nr_cols = info->var.xres/fontwidth(p); + nr_rows = info->var.yres/fontheight(p); if (logo) { /* Need to make room for the logo */ @@ -697,11 +721,11 @@ static void fbcon_setup(int con, int init, int logo) conp->vc_cols = nr_cols; conp->vc_rows = nr_rows; } - p->vrows = p->var.yres_virtual/fontheight(p); - if ((p->var.yres % fontheight(p)) && - (p->var.yres_virtual % fontheight(p) < p->var.yres % fontheight(p))) + p->vrows = info->var.yres_virtual/fontheight(p); + if ((info->var.yres % fontheight(p)) && + (info->var.yres_virtual % fontheight(p) < info->var.yres % fontheight(p))) p->vrows--; - conp->vc_can_do_color = p->var.bits_per_pixel != 1; + conp->vc_can_do_color = info->var.bits_per_pixel != 1; conp->vc_complement_mask = conp->vc_can_do_color ? 0x7700 : 0x0800; if (charcnt == 256) { conp->vc_hi_font_mask = 0; @@ -720,10 +744,10 @@ static void fbcon_setup(int con, int init, int logo) if (p->dispsw == &fbcon_dummy) printk(KERN_WARNING "fbcon_setup: type %d (aux %d, depth %d) not " "supported\n", info->fix.type, info->fix.type_aux, - p->var.bits_per_pixel); + info->var.bits_per_pixel); p->dispsw->setup(p); - p->fgcol = p->var.bits_per_pixel > 2 ? 7 : (1<<p->var.bits_per_pixel)-1; + p->fgcol = info->var.bits_per_pixel > 2 ? 7 : (1<<info->var.bits_per_pixel)-1; p->bgcol = 0; if (!init) { @@ -743,11 +767,16 @@ static void fbcon_setup(int con, int init, int logo) kfree(save); } } - - if (logo) { - logo_shown = -2; - conp->vc_top = logo_lines; - } + + if (logo) { + if (logo_lines > conp->vc_bottom) { + logo_shown = -1; + printk(KERN_INFO "fbcon_startup: disable boot-logo (boot-logo bigger than screen).\n"); + } else { + logo_shown = -2; + conp->vc_top = logo_lines; + } + } if (con == fg_console && softback_buf) { int l = fbcon_softback_size / conp->vc_size_row; @@ -954,50 +983,54 @@ static int scrollback_current = 0; static __inline__ void ywrap_up(int unit, struct vc_data *conp, struct display *p, int count) { + struct fb_info *info = p->fb_info; + p->yscroll += count; if (p->yscroll >= p->vrows) /* Deal with wrap */ p->yscroll -= p->vrows; - p->var.xoffset = 0; - p->var.yoffset = p->yscroll*fontheight(p); - p->var.vmode |= FB_VMODE_YWRAP; - p->fb_info->updatevar(unit, p->fb_info); + info->var.xoffset = 0; + info->var.yoffset = p->yscroll*fontheight(p); + info->var.vmode |= FB_VMODE_YWRAP; + info->updatevar(unit, info); scrollback_max += count; if (scrollback_max > scrollback_phys_max) scrollback_max = scrollback_phys_max; scrollback_current = 0; } - static __inline__ void ywrap_down(int unit, struct vc_data *conp, struct display *p, int count) { + struct fb_info *info = p->fb_info; + p->yscroll -= count; if (p->yscroll < 0) /* Deal with wrap */ p->yscroll += p->vrows; - p->var.xoffset = 0; - p->var.yoffset = p->yscroll*fontheight(p); - p->var.vmode |= FB_VMODE_YWRAP; - p->fb_info->updatevar(unit, p->fb_info); + info->var.xoffset = 0; + info->var.yoffset = p->yscroll*fontheight(p); + info->var.vmode |= FB_VMODE_YWRAP; + info->updatevar(unit, info); scrollback_max -= count; if (scrollback_max < 0) scrollback_max = 0; scrollback_current = 0; } - static __inline__ void ypan_up(int unit, struct vc_data *conp, struct display *p, int count) { + struct fb_info *info = p->fb_info; + p->yscroll += count; if (p->yscroll > p->vrows-conp->vc_rows) { p->dispsw->bmove(p, p->vrows-conp->vc_rows, 0, 0, 0, conp->vc_rows, conp->vc_cols); p->yscroll -= p->vrows-conp->vc_rows; } - p->var.xoffset = 0; - p->var.yoffset = p->yscroll*fontheight(p); - p->var.vmode &= ~FB_VMODE_YWRAP; - p->fb_info->updatevar(unit, p->fb_info); + info->var.xoffset = 0; + info->var.yoffset = p->yscroll*fontheight(p); + info->var.vmode &= ~FB_VMODE_YWRAP; + info->updatevar(unit, info); if (p->dispsw->clear_margins) p->dispsw->clear_margins(conp, p, 1); scrollback_max += count; @@ -1010,16 +1043,18 @@ static __inline__ void ypan_up(int unit, struct vc_data *conp, static __inline__ void ypan_down(int unit, struct vc_data *conp, struct display *p, int count) { + struct fb_info *info = p->fb_info; + p->yscroll -= count; if (p->yscroll < 0) { p->dispsw->bmove(p, 0, 0, p->vrows-conp->vc_rows, 0, conp->vc_rows, conp->vc_cols); p->yscroll += p->vrows-conp->vc_rows; } - p->var.xoffset = 0; - p->var.yoffset = p->yscroll*fontheight(p); - p->var.vmode &= ~FB_VMODE_YWRAP; - p->fb_info->updatevar(unit, p->fb_info); + info->var.xoffset = 0; + info->var.yoffset = p->yscroll*fontheight(p); + info->var.vmode &= ~FB_VMODE_YWRAP; + info->updatevar(unit, info); if (p->dispsw->clear_margins) p->dispsw->clear_margins(conp, p, 1); scrollback_max -= count; @@ -1522,7 +1557,8 @@ static int fbcon_switch(struct vc_data *conp) conp2->vc_top = 0; logo_shown = -1; } - p->var.yoffset = p->yscroll = 0; + if (info) + info->var.yoffset = p->yscroll = 0; switch (p->scrollmode & __SCROLL_YMASK) { case __SCROLL_YWRAP: scrollback_phys_max = p->vrows-conp->vc_rows; @@ -1539,8 +1575,6 @@ static int fbcon_switch(struct vc_data *conp) scrollback_max = 0; scrollback_current = 0; - if (info && info->switch_con) - (*info->switch_con)(unit, info); if (p->dispsw->clear_margins && vt_cons[unit]->vc_mode == KD_TEXT) p->dispsw->clear_margins(conp, p, 0); if (logo_shown == -2) { @@ -1570,8 +1604,8 @@ static int fbcon_blank(struct vc_data *conp, int blank) if (info->fix.visual == FB_VISUAL_MONO01) { if (info->screen_base) fb_memset255(info->screen_base, - p->var.xres_virtual*p->var.yres_virtual* - p->var.bits_per_pixel>>3); + info->var.xres_virtual*info->var.yres_virtual* + info->var.bits_per_pixel>>3); } else { unsigned short oldc; u_int height; @@ -1668,6 +1702,7 @@ static inline int fbcon_get_font(int unit, struct console_font_op *op) static int fbcon_do_set_font(int unit, struct console_font_op *op, u8 *data, int userfont) { struct display *p = &fb_display[unit]; + struct fb_info *info = p->fb_info; int resize; int w = op->width; int h = op->height; @@ -1755,12 +1790,12 @@ static int fbcon_do_set_font(int unit, struct console_font_op *op, u8 *data, int if (resize) { struct vc_data *conp = p->conp; /* reset wrap/pan */ - p->var.xoffset = p->var.yoffset = p->yscroll = 0; - p->vrows = p->var.yres_virtual/h; - if ((p->var.yres % h) && (p->var.yres_virtual % h < p->var.yres % h)) + info->var.xoffset = info->var.yoffset = p->yscroll = 0; + p->vrows = info->var.yres_virtual/h; + if ((info->var.yres % h) && (info->var.yres_virtual % h < info->var.yres % h)) p->vrows--; updatescrollmode(p); - vc_resize_con( p->var.yres/h, p->var.xres/w, unit ); + vc_resize_con( info->var.yres/h, info->var.xres/w, unit ); if (CON_IS_VISIBLE(conp) && softback_buf) { int l = fbcon_softback_size / conp->vc_size_row; if (l > 5) @@ -1892,9 +1927,10 @@ static inline int fbcon_set_def_font(int unit, struct console_font_op *op) char name[MAX_FONT_NAME]; struct fbcon_font_desc *f; struct display *p = &fb_display[unit]; + struct fb_info *info = p->fb_info; if (!op->data) - f = fbcon_get_default_font(p->var.xres, p->var.yres); + f = fbcon_get_default_font(info->var.xres, info->var.yres); else if (strncpy_from_user(name, op->data, MAX_FONT_NAME-1) < 0) return -EFAULT; else { @@ -1937,6 +1973,7 @@ static int fbcon_set_palette(struct vc_data *conp, unsigned char *table) { int unit = conp->vc_num; struct display *p = &fb_display[unit]; + struct fb_info *info = p->fb_info; int i, j, k; u8 val; @@ -1951,12 +1988,12 @@ static int fbcon_set_palette(struct vc_data *conp, unsigned char *table) val = conp->vc_palette[j++]; palette_blue[k] = (val<<8)|val; } - if (p->var.bits_per_pixel <= 4) - palette_cmap.len = 1<<p->var.bits_per_pixel; + if (info->var.bits_per_pixel <= 4) + palette_cmap.len = 1 << info->var.bits_per_pixel; else palette_cmap.len = 16; palette_cmap.start = 0; - return p->fb_info->fbops->fb_set_cmap(&palette_cmap, 1, unit, p->fb_info); + return fb_set_cmap(&palette_cmap, 1, info); } static u16 *fbcon_screen_pos(struct vc_data *conp, int offset) @@ -2033,10 +2070,13 @@ static void fbcon_invert_region(struct vc_data *conp, u16 *p, int cnt) static int fbcon_scrolldelta(struct vc_data *conp, int lines) { int unit, offset, limit, scrollback_old; + struct fb_info *info; struct display *p; - + unit = fg_console; p = &fb_display[unit]; + info = p->fb_info; + if (softback_top) { if (conp->vc_num != unit) return 0; @@ -2092,20 +2132,20 @@ static int fbcon_scrolldelta(struct vc_data *conp, int lines) limit = p->vrows; switch (p->scrollmode && __SCROLL_YMASK) { case __SCROLL_YWRAP: - p->var.vmode |= FB_VMODE_YWRAP; + info->var.vmode |= FB_VMODE_YWRAP; break; case __SCROLL_YPAN: limit -= conp->vc_rows; - p->var.vmode &= ~FB_VMODE_YWRAP; + info->var.vmode &= ~FB_VMODE_YWRAP; break; } if (offset < 0) offset += limit; else if (offset >= limit) offset -= limit; - p->var.xoffset = 0; - p->var.yoffset = offset*fontheight(p); - p->fb_info->updatevar(unit, p->fb_info); + info->var.xoffset = 0; + info->var.yoffset = offset*fontheight(p); + info->updatevar(unit, info); if (!scrollback_current) fbcon_cursor(conp, CM_DRAW); return 0; @@ -2127,7 +2167,11 @@ static int __init fbcon_show_logo( void ) { struct display *p = &fb_display[fg_console]; /* draw to vt in foreground */ struct fb_info *info = p->fb_info; - int depth = p->var.bits_per_pixel; +#ifdef CONFIG_FBCON_ACCEL + struct fb_image image; + u32 *palette = NULL, *saved_palette = NULL; +#endif + int depth = info->var.bits_per_pixel; int line = p->next_line; unsigned char *fb = info->screen_base; unsigned char *logo; @@ -2162,7 +2206,7 @@ static int __init fbcon_show_logo( void ) palette_cmap.blue[j] = (linux_logo_blue[i+j] << 8) | linux_logo_blue[i+j]; } - info->fbops->fb_set_cmap(&palette_cmap, 1, fg_console, info); + fb_set_cmap(&palette_cmap, 1, info); } if (depth >= 8) { @@ -2177,13 +2221,54 @@ static int __init fbcon_show_logo( void ) logo = linux_logo_bw; logo_depth = 1; } - + +#if defined(CONFIG_FBCON_ACCEL) + if (info->fix.visual == FB_VISUAL_TRUECOLOR) { + unsigned char mask[9] = { 0,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff }; + unsigned char redmask, greenmask, bluemask; + int redshift, greenshift, blueshift; + + /* Bug: Doesn't obey msb_right ... (who needs that?) */ + redmask = mask[info->var.red.length < 8 ? info->var.red.length : 8]; + greenmask = mask[info->var.green.length < 8 ? info->var.green.length : 8]; + bluemask = mask[info->var.blue.length < 8 ? info->var.blue.length : 8]; + redshift = info->var.red.offset - (8 - info->var.red.length); + greenshift = info->var.green.offset - (8 - info->var.green.length); + blueshift = info->var.blue.offset - (8 - info->var.blue.length); + + /* + * We have to create a temporary palette since console palette is only + * 16 colors long. + */ + palette = kmalloc(256 * 4, GFP_KERNEL); + if (palette == NULL) + return (LOGO_H + fontheight(p) - 1) / fontheight(p); + + for ( i = 0; i < LINUX_LOGO_COLORS; i++) { + palette[i+32] = (safe_shift((linux_logo_red[i] & redmask), redshift) | + safe_shift((linux_logo_green[i] & greenmask), greenshift) | + safe_shift((linux_logo_blue[i] & bluemask), blueshift)); + } + saved_palette = info->pseudo_palette; + info->pseudo_palette = palette; + image.width = LOGO_W; + image.height = LOGO_H; + image.depth = depth; + image.data = logo; + image.dy = 0; + } +#endif + if (info->fbops->fb_rasterimg) info->fbops->fb_rasterimg(info, 1); for (x = 0; x < num_online_cpus() * (LOGO_W + 8) && - x < p->var.xres - (LOGO_W + 8); x += (LOGO_W + 8)) { - + x < info->var.xres - (LOGO_W + 8); x += (LOGO_W + 8)) { +#if defined (CONFIG_FBCON_ACCEL) + image.dx = x; + info->fbops->fb_imageblit(info, &image); + done = 1; +#else #if defined(CONFIG_FBCON_CFB16) || defined(CONFIG_FBCON_CFB24) || \ defined(CONFIG_FBCON_CFB32) || defined(CONFIG_FB_SBUS) if (info->fix.visual == FB_VISUAL_DIRECTCOLOR) { @@ -2192,9 +2277,9 @@ static int __init fbcon_show_logo( void ) int redshift, greenshift, blueshift; /* Bug: Doesn't obey msb_right ... (who needs that?) */ - redshift = p->var.red.offset; - greenshift = p->var.green.offset; - blueshift = p->var.blue.offset; + redshift = info->var.red.offset; + greenshift = info->var.green.offset; + blueshift = info->var.blue.offset; if (depth >= 24 && (depth % 8) == 0) { /* have at least 8 bits per color */ @@ -2270,12 +2355,12 @@ static int __init fbcon_show_logo( void ) int redshift, greenshift, blueshift; /* Bug: Doesn't obey msb_right ... (who needs that?) */ - redmask = mask[p->var.red.length < 8 ? p->var.red.length : 8]; - greenmask = mask[p->var.green.length < 8 ? p->var.green.length : 8]; - bluemask = mask[p->var.blue.length < 8 ? p->var.blue.length : 8]; - redshift = p->var.red.offset - (8-p->var.red.length); - greenshift = p->var.green.offset - (8-p->var.green.length); - blueshift = p->var.blue.offset - (8-p->var.blue.length); + redmask = mask[info->var.red.length < 8 ? info->var.red.length : 8]; + greenmask = mask[info->var.green.length < 8 ? info->var.green.length : 8]; + bluemask = mask[info->var.blue.length < 8 ? info->var.blue.length : 8]; + redshift = info->var.red.offset - (8 - info->var.red.length); + greenshift = info->var.green.offset - (8 - info->var.green.length); + blueshift = info->var.blue.offset - (8 - info->var.blue.length); src = logo; for( y1 = 0; y1 < LOGO_H; y1++ ) { @@ -2396,7 +2481,7 @@ static int __init fbcon_show_logo( void ) unsigned char inverse = p->inverse || info->fix.visual == FB_VISUAL_MONO01 ? 0x00 : 0xff; - int is_hga = !strncmp(p->fb_info->modename, "HGA", 3); + int is_hga = !strncmp(info->modename, "HGA", 3); /* can't use simply memcpy because need to apply inverse */ for( y1 = 0; y1 < LOGO_H; y1++ ) { src = logo + y1*LOGO_LINE; @@ -2440,12 +2525,19 @@ static int __init fbcon_show_logo( void ) } done = 1; } -#endif +#endif +#endif /* CONFIG_FBCON_ACCEL */ } - - if (p->fb_info->fbops->fb_rasterimg) - p->fb_info->fbops->fb_rasterimg(p->fb_info, 0); + + if (info->fbops->fb_rasterimg) + info->fbops->fb_rasterimg(info, 0); +#if defined (CONFIG_FBCON_ACCEL) + if (palette != NULL) + kfree(palette); + if (saved_palette != NULL) + info->pseudo_palette = saved_palette; +#endif /* Modes not yet supported: packed pixels with depth != 8 (does such a * thing exist in reality?) */ diff --git a/drivers/video/fbgen.c b/drivers/video/fbgen.c index e13783ed31d872f4b853b3cf5939b8cbb2eb280e..9ef1725e715887b043ec903b2fe5d64159a2cf43 100644 --- a/drivers/video/fbgen.c +++ b/drivers/video/fbgen.c @@ -21,14 +21,6 @@ #include <asm/io.h> #include <video/fbcon.h> -#include <video/fbcon-mfb.h> -#include <video/fbcon-cfb2.h> -#include <video/fbcon-cfb4.h> -#include <video/fbcon-cfb8.h> -#include <video/fbcon-cfb16.h> -#include <video/fbcon-cfb24.h> -#include <video/fbcon-cfb32.h> -#include "fbcon-accel.h" int gen_set_var(struct fb_var_screeninfo *var, int con, struct fb_info *info) { @@ -52,49 +44,13 @@ int gen_set_var(struct fb_var_screeninfo *var, int con, struct fb_info *info) if (info->fbops->fb_pan_display) info->fbops->fb_pan_display(&info->var, con, info); - - gen_set_disp(con, info); fb_set_cmap(&info->cmap, 1, info); } - - if (info->changevar) - info->changevar(con); } } return 0; } -int gen_get_cmap(struct fb_cmap *cmap, int kspc, int con, struct fb_info *info) -{ - fb_copy_cmap (&info->cmap, cmap, kspc ? 0 : 2); - return 0; -} - -int gen_set_cmap(struct fb_cmap *cmap, int kspc, int con, - struct fb_info *info) -{ - struct display *disp = (con < 0) ? info->disp : (fb_display + con); - struct fb_cmap *dcmap = &disp->cmap; - int err = 0; - - /* No colormap allocated ? */ - if (!dcmap->len) { - int size = info->cmap.len; - - err = fb_alloc_cmap(dcmap, size, 0); - } - - - if (!err && con == info->currcon) { - err = fb_set_cmap(cmap, kspc, info); - dcmap = &info->cmap; - } - - if (!err) - fb_copy_cmap(cmap, dcmap, kspc ? 0 : 1); - return err; -} - int fbgen_pan_display(struct fb_var_screeninfo *var, int con, struct fb_info *info) { @@ -125,75 +81,11 @@ int fbgen_pan_display(struct fb_var_screeninfo *var, int con, /* ---- Helper functions --------------------------------------------------- */ -void gen_set_disp(int con, struct fb_info *info) -{ - struct display *display = (con < 0) ? info->disp : (fb_display + con); - - if (info->fix.visual == FB_VISUAL_PSEUDOCOLOR || - info->fix.visual == FB_VISUAL_DIRECTCOLOR) { - display->can_soft_blank = info->fbops->fb_blank ? 1 : 0; - display->dispsw_data = NULL; - } else { - display->can_soft_blank = 0; - display->dispsw_data = info->pseudo_palette; - } - display->var = info->var; - - /* - * If we are setting all the virtual consoles, also set - * the defaults used to create new consoles. - */ - if (con < 0 || info->var.activate & FB_ACTIVATE_ALL) - info->disp->var = info->var; - - if (info->var.bits_per_pixel == 24) { -#ifdef FBCON_HAS_CFB24 - display->scrollmode = SCROLL_YREDRAW; - display->dispsw = &fbcon_cfb24; - return; -#endif - } - -#ifdef FBCON_HAS_ACCEL - display->scrollmode = SCROLL_YNOMOVE; - display->dispsw = &fbcon_accel; -#else - display->dispsw = &fbcon_dummy; -#endif - return; -} - -/** - * do_install_cmap - install the current colormap - * @con: virtual console number - * @info: generic frame buffer info structure - * - * Installs the current colormap for virtual console @con on - * device @info. - * - */ - -void do_install_cmap(int con, struct fb_info *info) -{ - if (con != info->currcon) - return; - if (fb_display[con].cmap.len) - fb_set_cmap(&fb_display[con].cmap, 1, info); - else { - int size = fb_display[con].var.bits_per_pixel == 16 ? 64 : 256; - fb_set_cmap(fb_default_cmap(size), 1, info); - } -} - int gen_update_var(int con, struct fb_info *info) { - struct display *disp = (con < 0) ? info->disp : (fb_display + con); int err; if (con == info->currcon) { - info->var.xoffset = disp->var.xoffset; - info->var.yoffset = disp->var.yoffset; - info->var.vmode = disp->var.vmode; if (info->fbops->fb_pan_display) { if ((err = info->fbops->fb_pan_display(&info->var, con, info))) return err; @@ -202,46 +94,6 @@ int gen_update_var(int con, struct fb_info *info) return 0; } -int gen_switch(int con, struct fb_info *info) -{ - struct display *disp; - struct fb_cmap *cmap; - - if (info->currcon >= 0) { - disp = fb_display + info->currcon; - - /* - * Save the old colormap and graphics mode. - */ - disp->var = info->var; - if (disp->cmap.len) - fb_copy_cmap(&info->cmap, &disp->cmap, 0); - } - - info->currcon = con; - disp = fb_display + con; - - /* - * Install the new colormap and change the graphics mode. By default - * fbcon sets all the colormaps and graphics modes to the default - * values at bootup. - * - * Really, we want to set the colormap size depending on the - * depth of the new grpahics mode. For now, we leave it as its - * default 256 entry. - */ - if (disp->cmap.len) - cmap = &disp->cmap; - else - cmap = fb_default_cmap(1 << disp->var.bits_per_pixel); - - fb_copy_cmap(cmap, &info->cmap, 0); - - disp->var.activate = FB_ACTIVATE_NOW; - info->fbops->fb_set_var(&disp->var, con, info); - return 0; -} - /** * fbgen_blank - blank the screen * @blank: boolean, 0 unblank, 1 blank @@ -267,20 +119,22 @@ int fbgen_blank(int blank, struct fb_info *info) cmap.start = 0; cmap.len = 16; fb_set_cmap(&cmap, 1, info); - } else - do_install_cmap(info->currcon, info); + } else { + if (info->cmap.len) + fb_set_cmap(&info->cmap, 1, info); + else { + int size = info->var.bits_per_pixel == 16 ? 64 : 256; + fb_set_cmap(fb_default_cmap(size), 1, info); + } + } return 0; } /* generic frame buffer operations */ EXPORT_SYMBOL(gen_set_var); -EXPORT_SYMBOL(gen_get_cmap); -EXPORT_SYMBOL(gen_set_cmap); EXPORT_SYMBOL(fbgen_pan_display); /* helper functions */ -EXPORT_SYMBOL(do_install_cmap); EXPORT_SYMBOL(gen_update_var); -EXPORT_SYMBOL(gen_switch); EXPORT_SYMBOL(fbgen_blank); MODULE_LICENSE("GPL"); diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c index c8f357a2944e506253c39111b0dd1e9e5db20a83..decb80e8522fb54963304d557a21d29af25c9580 100644 --- a/drivers/video/fbmem.c +++ b/drivers/video/fbmem.c @@ -481,11 +481,14 @@ fb_ioctl(struct inode *inode, struct file *file, unsigned int cmd, case FBIOPUT_VSCREENINFO: if (copy_from_user(&var, (void *) arg, sizeof(var))) return -EFAULT; - i = var.activate & FB_ACTIVATE_ALL - ? set_all_vcs(fbidx, fb, &var, info) - : fb->fb_set_var(&var, PROC_CONSOLE(info), info); - if (i) - return i; + if (var.activate & FB_ACTIVATE_ALL) { + i = set_all_vcs(fbidx, fb, &var, info); + if (i) return i; + } else { + i = fb->fb_set_var(&var, PROC_CONSOLE(info), info); + if (i) return i; + gen_set_disp(PROC_CONSOLE(info), info); + } if (copy_to_user((void *) arg, &var, sizeof(var))) return -EFAULT; return 0; @@ -494,11 +497,11 @@ fb_ioctl(struct inode *inode, struct file *file, unsigned int cmd, case FBIOPUTCMAP: if (copy_from_user(&cmap, (void *) arg, sizeof(cmap))) return -EFAULT; - return (fb->fb_set_cmap(&cmap, 0, PROC_CONSOLE(info), info)); + return (fb_set_cmap(&cmap, 0, info)); case FBIOGETCMAP: if (copy_from_user(&cmap, (void *) arg, sizeof(cmap))) return -EFAULT; - return (fb->fb_get_cmap(&cmap, 0, PROC_CONSOLE(info), info)); + fb_copy_cmap(&info->cmap, &cmap, 0); case FBIOPAN_DISPLAY: if (copy_from_user(&var, (void *) arg, sizeof(var))) return -EFAULT; diff --git a/drivers/video/fm2fb.c b/drivers/video/fm2fb.c index 05ed2f341c1246a1d088586e31bd63fbedd8237f..ea922ca2c090134ce154417d3e5f6f8144c78bc0 100644 --- a/drivers/video/fm2fb.c +++ b/drivers/video/fm2fb.c @@ -21,8 +21,6 @@ #include <linux/zorro.h> #include <asm/io.h> -#include <video/fbcon.h> - /* * Some technical notes: * @@ -133,7 +131,6 @@ static volatile unsigned char *fm2fb_reg; static struct fb_info fb_info; static u32 pseudo_palette[17]; -static struct display display; static struct fb_fix_screeninfo fb_fix __initdata = { .smem_len = FRAMEMASTER_REG, @@ -177,8 +174,6 @@ static int fm2fb_blank(int blank, struct fb_info *info); static struct fb_ops fm2fb_ops = { .owner = THIS_MODULE, .fb_set_var = gen_set_var, - .fb_get_cmap = gen_get_cmap, - .fb_set_cmap = gen_set_cmap, .fb_setcolreg = fm2fb_setcolreg, .fb_blank = fm2fb_blank, .fb_fillrect = cfb_fillrect, @@ -264,7 +259,6 @@ int __init fm2fb_init(void) if (fm2fb_mode == -1) fm2fb_mode = FM2FB_MODE_PAL; - strcpy(fb_info.modename, fb_fix.id); fb_info.node = NODEV; fb_info.fbops = &fm2fb_ops; fb_info.var = fb_var_modes[fm2fb_mode]; @@ -275,14 +269,9 @@ int __init fm2fb_init(void) /* The below feilds will go away !!!! */ fb_info.currcon = -1; - strcpy(fb_info.modename, fb_info.fix.id); - fb_info.disp = &display; - fb_info.switch_con = gen_switch; fb_info.updatevar = gen_update_var; fb_alloc_cmap(&fb_info.cmap, 16, 0); - gen_set_disp(-1, &fb_info); - if (register_framebuffer(&fb_info) < 0) return -EINVAL; diff --git a/drivers/video/g364fb.c b/drivers/video/g364fb.c index 6ee7d7d0fe1c6a9504d8b86ce909ac92db89399d..e9d6e222b814ef8e7af57bd394657f0c6cc69970 100644 --- a/drivers/video/g364fb.c +++ b/drivers/video/g364fb.c @@ -74,7 +74,6 @@ #define MON_ID_REG 0xe4100000 /* unused */ #define RESET_REG 0xe4180000 /* Write only */ -static struct display disp; static struct fb_info fb_info; static struct fb_fix_screeninfo fb_fix __initdata = { @@ -119,8 +118,6 @@ static int g364fb_blank(int blank, struct fb_info *info); static struct fb_ops g364fb_ops = { .owner = THIS_MODULE, .fb_set_var = gen_set_var, - .fb_get_cmap = gen_get_cmap, - .fb_set_cmap = gen_set_cmap, .fb_setcolreg = g364fb_setcolreg, .fb_pan_display = g364fb_pan_display, .fb_blank = g364fb_blank, @@ -239,7 +236,6 @@ int __init g364fb_init(void) fb_fix.smem_len = (1 << (mem * 2)) * 512 * 1024; fb_var.yres_virtual = fb_fix.smem_len / fb_var.xres; - strcpy(fb_info.modename, fb_fix.id); fb_info.node = NODEV; fb_info.fbops = &g364fb_ops; fb_info.screen_base = (char *) G364_MEM_BASE; /* virtual kernel address */ @@ -247,15 +243,10 @@ int __init g364fb_init(void) fb_info.fix = fb_fix; fb_info.flags = FBINFO_FLAG_DEFAULT; - fb_info.disp = &disp; fb_info.currcon = -1; fb_info.fontname[0] = '\0'; - fb_info.changevar = NULL; - fb_info.switch_con = gen_switch; fb_info.updatevar = gen_update_var; - fb_alloc_cmap(&fb_info.cmap, 255, 0); - gen_set_disp(-1, &fb_info); if (register_framebuffer(&fb_info) < 0) return -EINVAL; diff --git a/drivers/video/hitfb.c b/drivers/video/hitfb.c index a18844098a6cf6243903c3918477b958e1d9c57a..810fc3e9adb7128de0b2ac6f2f936469e5eb3e1b 100644 --- a/drivers/video/hitfb.c +++ b/drivers/video/hitfb.c @@ -29,8 +29,6 @@ #include <asm/io.h> #include <asm/hd64461.h> -#include <video/fbcon.h> - static struct fb_var_screeninfo hitfb_var __initdata = { .activate = FB_ACTIVATE_NOW, .height = -1, @@ -46,7 +44,6 @@ static struct fb_fix_screeninfo hitfb_fix __initdata = { }; static u16 pseudo_palette[17]; -static struct display display; struct fb_info fb_info; static int hitfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) @@ -126,8 +123,6 @@ static int hitfb_setcolreg(unsigned regno, unsigned red, unsigned green, static struct fb_ops hitfb_ops = { .owner = THIS_MODULE, .fb_set_var = gen_set_var, - .fb_get_cmap = gen_get_cmap, - .fb_set_cmap = gen_set_cmap, .fb_check_var = hitfb_check_var, .fb_set_par = hitfb_set_par, .fb_setcolreg = hitfb_setcolreg, @@ -167,11 +162,7 @@ int __init hitfb_init(void) fb_info.pseudo_palette = pseudo_palette; fb_info.flags = FBINFO_FLAG_DEFAULT; - strcpy(fb_info.modename, fb_info.fix.id); fb_info.currcon = -1; - fb_info.disp = &display; - fb_info.changevar = NULL; - fb_info.switch_con = gen_switch; fb_info.updatevar = gen_update_var; fb_info.screen_base = (void *) hitfb_fix.smem_start; diff --git a/drivers/video/hpfb.c b/drivers/video/hpfb.c index 706eb0c6dc5398015a5b1e32a31835e6a61256ca..22ac50f18b7fea9fbd5e66796b7cebc451c4097d 100644 --- a/drivers/video/hpfb.c +++ b/drivers/video/hpfb.c @@ -19,8 +19,6 @@ #include <asm/blinken.h> #include <asm/hwtest.h> -#include <video/fbcon.h> - static struct fb_info fb_info; unsigned long fb_regs; @@ -67,8 +65,6 @@ static struct fb_var_screeninfo hpfb_defined = { .vmode = FB_VMODE_NONINTERLACED, }; -static struct display display; - /* * Set the palette. This may not work on all boards but only experimentation * will tell. @@ -106,8 +102,6 @@ void hpfb_copyarea(struct fb_info *info, struct fb_copyarea *area) static struct fb_ops hpfb_ops = { .owner = THIS_MODULE, .fb_set_var = gen_set_var, - .fb_get_cmap = gen_get_cmap, - .fb_set_cmap = gen_set_cmap, .fb_setcolreg = hpfb_setcolreg, .fb_fillrect = cfb_fillrect, .fb_copyarea = hpfb_copyarea, @@ -166,14 +160,9 @@ int __init hpfb_init_one(unsigned long base) /* The below feilds will go away !!!! */ fb_info.currcon = -1; - strcpy(fb_info.modename, fb_info.fix.id); - fb_info.disp = &display; - fb_info.switch_con = gen_switch; fb_info.updatevar = gen_update_var; fb_alloc_cmap(&fb_info.cmap, 256, 0); - gen_set_disp(-1, &fb_info); - if (register_framebuffer(&fb_info) < 0) return 1; return 0; diff --git a/drivers/video/macfb.c b/drivers/video/macfb.c index 252cf713c4a2cc7322f8b3c91d9bad1421a93b42..f8e89120e587dd2df4f4d809cb366f8b5700ef83 100644 --- a/drivers/video/macfb.c +++ b/drivers/video/macfb.c @@ -40,8 +40,6 @@ #include <asm/io.h> #include <asm/machw.h> -#include <video/fbcon.h> - /* Common DAC base address for the LC, RBV, Valkyrie, and IIvx */ #define DAC_BASE 0x50f24000 @@ -173,7 +171,6 @@ static struct fb_fix_screeninfo macfb_fix = { .accel = FB_ACCEL_NONE, }; -static struct display disp; static struct fb_info fb_info; static u32 pseudo_palette[17]; static int inverse = 0; @@ -589,8 +586,6 @@ static int macfb_setcolreg(unsigned regno, unsigned red, unsigned green, static struct fb_ops macfb_ops = { .owner = THIS_MODULE, .fb_set_var = gen_set_var, - .fb_get_cmap = gen_get_cmap, - .fb_set_cmap = gen_set_cmap, .fb_setcolreg = macfb_setcolreg, .fb_fillrect = cfb_fillrect, .fb_copyarea = cfb_copyarea, @@ -952,21 +947,16 @@ void __init macfb_init(void) break; } - strcpy(fb_info.modename, macfb_fix.id); - fb_info.changevar = NULL; fb_info.node = NODEV; fb_info.fbops = &macfb_ops; fb_info.var = macfb_defined; fb_info.fix = macfb_fix; fb_info.currcon = -1; - fb_info.disp = &disp; - fb_info.switch_con = gen_switch; fb_info.updatevar = gen_update_var; fb_info.pseudo_palette = pseudo_palette; fb_info.flags = FBINFO_FLAG_DEFAULT; fb_alloc_cmap(&fb_info.cmap, video_cmap_len, 0); - gen_set_disp(-1, &fb_info); if (register_framebuffer(&fb_info) < 0) return; diff --git a/drivers/video/maxinefb.c b/drivers/video/maxinefb.c index 6e1fd2f76347ab627f769b51985de8ceec4de2b9..d2f4c1b339d0ef9a7890372b7809ae902de3d7a9 100644 --- a/drivers/video/maxinefb.c +++ b/drivers/video/maxinefb.c @@ -42,7 +42,6 @@ #include <asm/bootinfo.h> static struct fb_info fb_info; -static struct display disp; static struct fb_var_screeninfo maxinefb_defined = { .xres = 1024, @@ -113,8 +112,6 @@ static int maxinefb_setcolreg(unsigned regno, unsigned red, unsigned green, static struct fb_ops maxinefb_ops = { .owner = THIS_MODULE, .fb_set_var = gen_set_var, - .fb_get_cmap = gen_get_cmap, - .fb_set_cmap = gen_set_cmap, .fb_setcolreg = maxinefb_setcolreg, .fb_fillrect = cfb_fillrect, .fb_copyarea = cfb_copyarea, @@ -156,23 +153,16 @@ int __init maxinefb_init(void) */ } - /* Let there be consoles... */ - - strcpy(fb_info.modename, "Maxine onboard graphics 1024x768x8"); - fb_info.changevar = NULL; fb_info.node = NODEV; fb_info.fbops = &maxinefb_ops; fb_info.screen_base = (char *) maxinefb_fix.smem_start; fb_info.var = maxinefb_defined; fb_info.fix = maxinefb_fix; - fb_info.disp = &disp; fb_info.currcon = -1; - fb_info.switch_con = gen_switch; fb_info.updatevar = gen_update_var; fb_info.flags = FBINFO_FLAG_DEFAULT; fb_alloc_cmap(&fb_info.cmap, 256, 0); - gen_set_disp(-1, &fb_info); if (register_framebuffer(&fb_info) < 0) return 1; diff --git a/drivers/video/modedb.c b/drivers/video/modedb.c index 16d0aeb9184dcd0ba8c9fa1aecc546f4a974162c..dd092c061217e98debd5dad7733d29df25ccae79 100644 --- a/drivers/video/modedb.c +++ b/drivers/video/modedb.c @@ -300,6 +300,7 @@ int __fb_try_mode(struct fb_var_screeninfo *var, struct fb_info *info, var->vmode = mode->vmode; err = info->fbops->fb_set_var(var, PROC_CONSOLE(info), info); var->activate &= ~FB_ACTIVATE_TEST; + gen_set_disp(PROC_CONSOLE(info), info); return !err; } diff --git a/drivers/video/neofb.c b/drivers/video/neofb.c index 08174b35099a2a246b3250a60c94683e03680f85..96c3c370ed173b7d82613d99c3dfe376de705a4a 100644 --- a/drivers/video/neofb.c +++ b/drivers/video/neofb.c @@ -67,7 +67,6 @@ #include <asm/mtrr.h> #endif -#include <video/fbcon.h> #include <video/neomagic.h> #define NEOFB_VERSION "0.3.3" @@ -1390,8 +1389,6 @@ static struct fb_ops neofb_ops = { .fb_check_var = neofb_check_var, .fb_set_par = neofb_set_par, .fb_set_var = gen_set_var, - .fb_get_cmap = gen_get_cmap, - .fb_set_cmap = gen_set_cmap, .fb_setcolreg = neofb_setcolreg, .fb_pan_display = neofb_pan_display, .fb_blank = neofb_blank, @@ -1750,13 +1747,13 @@ static struct fb_info *__devinit neo_alloc_fb_info(struct pci_dev *dev, const st struct fb_info *info; struct neofb_par *par; - info = kmalloc(sizeof(struct fb_info) + sizeof(struct display) + - sizeof(u32) * 16, GFP_KERNEL); + info = kmalloc(sizeof(struct fb_info) + + sizeof(u32) * 17, GFP_KERNEL); if (!info) return NULL; - memset(info, 0, sizeof(struct fb_info) + sizeof(struct display)); + memset(info, 0, sizeof(struct fb_info) + sizeof(u32) * 17); par = &default_par; memset(par, 0, sizeof(struct neofb_par)); @@ -1818,16 +1815,11 @@ static struct fb_info *__devinit neo_alloc_fb_info(struct pci_dev *dev, const st info->var.width = -1; info->var.accel_flags = 0; - strcpy(info->modename, info->fix.id); - info->fbops = &neofb_ops; - info->changevar = NULL; - info->switch_con = gen_switch; info->updatevar = gen_update_var; info->flags = FBINFO_FLAG_DEFAULT; info->par = par; - info->disp = (struct display *) (info + 1); - info->pseudo_palette = (void *) (info->disp + 1); + info->pseudo_palette = (void *) (info + 1); fb_alloc_cmap(&info->cmap, NR_PALETTE, 0); diff --git a/drivers/video/offb.c b/drivers/video/offb.c index 4186b17c0d67b739cb862787218cb68ecc47b038..f1d1dcabbe808fb0aca139dc1d797c5678946ba0 100644 --- a/drivers/video/offb.c +++ b/drivers/video/offb.c @@ -33,7 +33,6 @@ #include <asm/bootx.h> #endif -#include <video/fbcon.h> #include <video/macmodes.h> /* Supported palette hacks */ @@ -84,8 +83,6 @@ static void offb_init_fb(const char *name, const char *full_name, static struct fb_ops offb_ops = { .owner = THIS_MODULE, .fb_set_var = gen_set_var, - .fb_get_cmap = gen_get_cmap, - .fb_set_cmap = gen_set_cmap, .fb_setcolreg = offb_setcolreg, .fb_blank = offb_blank, .fb_fillrect = cfb_fillrect, @@ -411,7 +408,7 @@ static void __init offb_init_fb(const char *name, const char *full_name, return; } - size = sizeof(struct fb_info) + sizeof(struct display) + sizeof(u32) * 17; + size = sizeof(struct fb_info) + sizeof(u32) * 17; info = kmalloc(size, GFP_ATOMIC); @@ -528,24 +525,18 @@ static void __init offb_init_fb(const char *name, const char *full_name, strcpy(fix->id, "OFfb "); strncat(fix->id, full_name, sizeof(fix->id)); - strcpy(info->modename, fix->id); info->node = NODEV; info->fbops = &offb_ops; info->screen_base = ioremap(address, fix->smem_len); info->par = par; - info->disp = (struct display *) (info + 1); - info->pseudo_palette = (void *) (info->disp + 1); + info->pseudo_palette = (void *) (info + 1); info->currcon = -1; info->fontname[0] = '\0'; - info->changevar = NULL; - info->switch_con = gen_switch; info->updatevar = gen_update_var; info->flags = FBINFO_FLAG_DEFAULT; fb_alloc_cmap(&info->cmap, 256, 0); - gen_set_disp(-1, info); - if (register_framebuffer(info) < 0) { kfree(info); release_mem_region(res_start, res_size); diff --git a/drivers/video/pmag-ba-fb.c b/drivers/video/pmag-ba-fb.c index aba95ee840c424f7cc12095ff6f6206d7d827130..183eee2e4d7bf62c5a900419296c3711066d3465 100644 --- a/drivers/video/pmag-ba-fb.c +++ b/drivers/video/pmag-ba-fb.c @@ -52,7 +52,6 @@ struct pmag_ba_ramdac_regs { * Max 3 TURBOchannel slots -> max 3 PMAG-BA :) */ static struct fb_info pmagba_fb_info[3]; -static struct display pmagba_disp[3]; static struct fb_var_screeninfo pmagbafb_defined = { .xres = 1024, @@ -112,8 +111,6 @@ static int pmagbafb_setcolreg(unsigned regno, unsigned red, unsigned green, static struct fb_ops pmagbafb_ops = { .owner = THIS_MODULE, .fb_set_var = gen_set_var, - .fb_get_cmap = gen_get_cmap, - .fb_set_cmap = gen_set_cmap, .fb_setcolreg = pmagbafb_setcolreg, .fb_fillrect = cfb_fillrect, .fb_copyarea = cfb_copyarea, @@ -124,7 +121,6 @@ int __init pmagbafb_init_one(int slot) { unsigned long base_addr = get_tc_base_addr(slot); struct fb_info *info = &pmagba_fb_info[slot]; - struct display *disp = &pmagba_disp[slot]; printk("PMAG-BA framebuffer in slot %d\n", slot); /* @@ -141,21 +137,16 @@ int __init pmagbafb_init_one(int slot) /* * Let there be consoles.. */ - strcpy(info->modename, pmagbafb_fix.id); - info->changevar = NULL; info->node = NODEV; info->fbops = &pmagbafb_ops; info->var = pmagbafb_defined; info->fix = pmagbafb_fix; info->screen_base = pmagbafb_fix.smem_start; - info->disp = &disp; info->currcon = -1; - info->switch_con = gen_switch; info->updatevar = gen_update_var; info->flags = FBINFO_FLAG_DEFAULT; fb_alloc_cmap(&fb_info.cmap, 256, 0); - gen_set_disp(-1, info); if (register_framebuffer(info) < 0) return 1; diff --git a/drivers/video/pmagb-b-fb.c b/drivers/video/pmagb-b-fb.c index 9d95f157ce46fa05ead370656fafbd8ee44ea366..bb9bc981f2cf035c2c17fe673ce189818a3464c9 100644 --- a/drivers/video/pmagb-b-fb.c +++ b/drivers/video/pmagb-b-fb.c @@ -39,8 +39,6 @@ #include <asm/dec/tc.h> #include "pmagb-b-fb.h" -#include <video/fbcon.h> - struct pmagb_b_ramdac_regs { unsigned char addr_low; unsigned char pad0[3]; @@ -55,7 +53,6 @@ struct pmagb_b_ramdac_regs { * Max 3 TURBOchannel slots -> max 3 PMAGB-B :) */ static struct fb_info pmagbb_fb_info[3]; -static struct display pmagbb_disp[3]; static struct fb_var_screeninfo pmagbbfb_defined = { .xres = 1280, @@ -115,8 +112,6 @@ static int pmagbbfb_setcolreg(unsigned regno, unsigned red, unsigned green, static struct fb_ops pmagbbfb_ops = { .owner = THIS_MODULE, .fb_set_var = gen_set_var, - .fb_get_cmap = gen_get_cmap, - .fb_set_cmap = gen_set_cmap, .fb_setcolreg = pmagbbfb_setcolreg, .fb_fillrect = cfb_fillrect, .fb_copyarea = cfb_copyarea, @@ -127,7 +122,6 @@ int __init pmagbbfb_init_one(int slot) { unsigned long base_addr = get_tc_base_addr(slot); struct fb_info *info = &pmagbb_fb_info[slot]; - struct display *disp = &pmagbb_disp[slot]; printk("PMAGB-BA framebuffer in slot %d\n", slot); /* @@ -144,21 +138,16 @@ int __init pmagbbfb_init_one(int slot) /* * Let there be consoles.. */ - strcpy(info->modename, pmagbbfb_fix.id); - info->changevar = NULL; info->node = NODEV; info->fbops = &pmagbbfb_ops; info->var = pmagbbfb_defined; info->fix = pmagbbfb_fix; info->screen_base = pmagbbfb_fix.smem_start; - info->disp = &disp; info->currcon = -1; - info->switch_con = gen_switch; info->updatevar = gen_update_var; info->flags = FBINFO_FLAG_DEFAULT; fb_alloc_cmap(&fb_info.cmap, 256, 0); - gen_set_disp(-1, info); if (register_framebuffer(info) < 0) return 1; diff --git a/drivers/video/q40fb.c b/drivers/video/q40fb.c index 97b036f6cce079042ed57e5982911a03c2dc527c..f92f9df8a457b90860c8fb1e58c460dc0e497e51 100644 --- a/drivers/video/q40fb.c +++ b/drivers/video/q40fb.c @@ -28,13 +28,10 @@ #include <linux/module.h> #include <asm/pgtable.h> -#include <video/fbcon.h> - #define Q40_PHYS_SCREEN_ADDR 0xFE800000 static u32 pseudo_palette[17]; static struct fb_info fb_info; -static struct display display; static struct fb_fix_screeninfo q40fb_fix __initdata = { .id = "Q40", @@ -70,8 +67,6 @@ static int q40fb_setcolreg(unsigned regno, unsigned red, unsigned green, static struct fb_ops q40fb_ops = { .owner = THIS_MODULE, .fb_set_var = gen_set_var, - .fb_get_cmap = gen_get_cmap, - .fb_set_cmap = gen_set_cmap, .fb_setcolreg = q40fb_setcolreg, .fb_fillrect = cfb_fillrect, .fb_copyarea = cfb_copyarea, @@ -118,14 +113,9 @@ int q40fb_init(void) /* The below feilds will go away !!!! */ fb_info.currcon = -1; - strcpy(fb_info.modename, fb_info.fix.id); - fb_info.disp = &display; - fb_info.switch_con = gen_switch; fb_info.updatevar = gen_update_var; fb_alloc_cmap(&fb_info.cmap, 16, 0); - gen_set_disp(-1, &fb_info); - master_outb(3, DISPLAY_CONTROL_REG); if (register_framebuffer(&fb_info) < 0) { diff --git a/drivers/video/sa1100fb.c b/drivers/video/sa1100fb.c index 6a2683bba658b879e2786528dee9d3a340ff66fe..2b37160ddc6473398fbf1d453c8ea0c5e86926d5 100644 --- a/drivers/video/sa1100fb.c +++ b/drivers/video/sa1100fb.c @@ -1753,7 +1753,7 @@ static void sa1100fb_disable_controller(struct sa1100fb_info *fbi) LCCR0 &= ~LCCR0_LEN; /* Disable LCD Controller */ schedule_timeout(20 * HZ / 1000); - current->state = TASK_RUNNING; + set_current_state(TASK_RUNNING); remove_wait_queue(&fbi->ctrlr_wait, &wait); } diff --git a/drivers/video/sgivwfb.c b/drivers/video/sgivwfb.c index 59400e61e4488e2b9fd8c312804c89d75080c68d..e121f4af3e37091d6563374ff2b7cc211a3c8697 100644 --- a/drivers/video/sgivwfb.c +++ b/drivers/video/sgivwfb.c @@ -26,8 +26,6 @@ #include <asm/io.h> #include <asm/mtrr.h> -#include <video/fbcon.h> - #define INCLUDE_TIMING_TABLE_DATA #define DBE_REG_BASE regs #include <video/sgivw.h> @@ -85,9 +83,6 @@ static struct fb_var_screeninfo sgivwfb_var __initdata = { .vmode = FB_VMODE_NONINTERLACED }; -/* console related variables */ -static struct display disp; - /* * Interface used by the world */ @@ -105,8 +100,6 @@ static int sgivwfb_mmap(struct fb_info *info, struct file *file, static struct fb_ops sgivwfb_ops = { .owner = THIS_MODULE, .fb_set_var = gen_set_var, - .fb_get_cmap = gen_get_cmap, - .fb_set_cmap = gen_set_cmap, .fb_check_var = sgivwfb_check_var, .fb_set_par = sgivwfb_set_par, .fb_setcolreg = sgivwfb_setcolreg, @@ -240,8 +233,8 @@ static int sgivwfb_check_var(struct fb_var_screeninfo *var, if (var->vmode & FB_VMODE_CONUPDATE) { var->vmode |= FB_VMODE_YWRAP; - var->xoffset = display->var.xoffset; - var->yoffset = display->var.yoffset; + var->xoffset = info->var.xoffset; + var->yoffset = info->var.yoffset; } /* XXX FIXME - forcing var's */ @@ -720,17 +713,13 @@ int __init sgivwfb_init(void) sgivwfb_fix.ywrapstep = ywrap; sgivwfb_fix.ypanstep = ypan; - strcpy(fb_info.modename, sgivwfb_fix.id); - fb_info.changevar = NULL; fb_info.node = NODEV; fb_info.fix = sgivwfb_fix; fb_info.var = sgivwfb_var; fb_info.fbops = &sgivwfb_ops; fb_info.pseudo_palette = pseudo_palette; fb_info.par = &default_par; - fb_info.disp = &disp; fb_info.currcon = -1; - fb_info.switch_con = gen_switch; fb_info.updatevar = gen_update_var; fb_info.flags = FBINFO_FLAG_DEFAULT; diff --git a/drivers/video/skeletonfb.c b/drivers/video/skeletonfb.c index 110e85dea3324a3b38266f4f3275b86146445899..6e856fb4e18fdc46634f7a0892fba00f4758a32d 100644 --- a/drivers/video/skeletonfb.c +++ b/drivers/video/skeletonfb.c @@ -125,9 +125,6 @@ static struct fb_info info; */ static struct xxx_par __initdata current_par; - /* To go away in the near future */ -static struct display disp; - int xxxfb_init(void); int xxxfb_setup(char*); @@ -450,7 +447,6 @@ int __init xxxfb_init(void) * mode. If we are setting the mode ourselves we don't call this. */ info.var = xxxfb_var; - gen_set_disp(-1, &fb_info); if (register_framebuffer(&info) < 0) return -EINVAL; @@ -512,8 +508,6 @@ static struct fb_ops xxxfb_ops = { .fb_release = xxxfb_release, /* only if you need it to do something */ /* Stuff to go away. Use generic functions for now */ .fb_set_var = gen_set_var, - .fb_get_cmap = gen_get_cmap, - .fb_set_cmap = gen_set_cmap, .fb_check_var = xxxfb_check_var, .fb_set_par = xxxfb_set_par, /* optional */ diff --git a/drivers/video/tdfxfb.c b/drivers/video/tdfxfb.c index 0543704cc7b4068b6d3c60e616dff60fbe5e258c..81b386defeb7bff07211725f1f02a95e7ad7a0f2 100644 --- a/drivers/video/tdfxfb.c +++ b/drivers/video/tdfxfb.c @@ -170,8 +170,6 @@ static void tdfxfb_imageblit(struct fb_info *info, struct fb_image *image); static struct fb_ops tdfxfb_ops = { .owner = THIS_MODULE, .fb_set_var = gen_set_var, - .fb_get_cmap = gen_get_cmap, - .fb_set_cmap = gen_set_cmap, .fb_check_var = tdfxfb_check_var, .fb_set_par = tdfxfb_set_par, .fb_setcolreg = tdfxfb_setcolreg, @@ -192,8 +190,6 @@ static unsigned long do_lfb_size(unsigned short); /* * Driver data */ -static struct tdfx_par default_par; - static int nopan = 0; static int nowrap = 1; // not implemented (yet) static int inverse = 0; @@ -204,59 +200,59 @@ static char *mode_option __initdata = NULL; * ------------------------------------------------------------------------- */ #ifdef VGA_REG_IO -static inline u8 vga_inb(u32 reg) { return inb(reg); } -static inline u16 vga_inw(u32 reg) { return inw(reg); } -static inline u16 vga_inl(u32 reg) { return inl(reg); } +static inline u8 vga_inb(struct tdfx_par *par, u32 reg) { return inb(reg); } +static inline u16 vga_inw(struct tdfx_par *par, u32 reg) { return inw(reg); } +static inline u16 vga_inl(struct tdfx_par *par, u32 reg) { return inl(reg); } -static inline void vga_outb(u32 reg, u8 val) { outb(val, reg); } -static inline void vga_outw(u32 reg, u16 val) { outw(val, reg); } -static inline void vga_outl(u32 reg, u32 val) { outl(val, reg); } +static inline void vga_outb(struct tdfx_par *par, u32 reg, u8 val) { outb(val, reg); } +static inline void vga_outw(struct tdfx_par *par, u32 reg, u16 val) { outw(val, reg); } +static inline void vga_outl(struct tdfx_par *par, u32 reg, u32 val) { outl(val, reg); } #else -static inline u8 vga_inb(u32 reg) { - return inb(default_par.iobase + reg - 0x300); +static inline u8 vga_inb(struct tdfx_par *par, u32 reg) { + return inb(par->iobase + reg - 0x300); } -static inline u16 vga_inw(u32 reg) { - return inw(default_par.iobase + reg - 0x300); +static inline u16 vga_inw(struct tdfx_par *par, u32 reg) { + return inw(par->iobase + reg - 0x300); } -static inline u16 vga_inl(u32 reg) { - return inl(default_par.iobase + reg - 0x300); +static inline u16 vga_inl(struct tdfx_par *par, u32 reg) { + return inl(par->iobase + reg - 0x300); } -static inline void vga_outb(u32 reg, u8 val) { - outb(val, default_par.iobase + reg - 0x300); +static inline void vga_outb(struct tdfx_par *par, u32 reg, u8 val) { + outb(val, par->iobase + reg - 0x300); } -static inline void vga_outw(u32 reg, u16 val) { - outw(val, default_par.iobase + reg - 0x300); +static inline void vga_outw(struct tdfx_par *par, u32 reg, u16 val) { + outw(val, par->iobase + reg - 0x300); } -static inline void vga_outl(u32 reg, u32 val) { - outl(val, default_par.iobase + reg - 0x300); +static inline void vga_outl(struct tdfx_par *par, u32 reg, u32 val) { + outl(val, par->iobase + reg - 0x300); } #endif -static inline void gra_outb(u32 idx, u8 val) { +static inline void gra_outb(struct tdfx_par *par, u32 idx, u8 val) { vga_outb(GRA_I, idx); vga_outb(GRA_D, val); } -static inline u8 gra_inb(u32 idx) { +static inline u8 gra_inb(struct tdfx_par *par, u32 idx) { vga_outb(GRA_I, idx); return vga_inb(GRA_D); } -static inline void seq_outb(u32 idx, u8 val) { +static inline void seq_outb(struct tdfx_par *par, u32 idx, u8 val) { vga_outb(SEQ_I, idx); vga_outb(SEQ_D, val); } -static inline u8 seq_inb(u32 idx) { +static inline u8 seq_inb(struct tdfx_par *par, u32 idx) { vga_outb(SEQ_I, idx); return vga_inb(SEQ_D); } -static inline void crt_outb(u32 idx, u8 val) { +static inline void crt_outb(struct tdfx_par *par, u32 idx, u8 val) { vga_outb(CRT_I, idx); vga_outb(CRT_D, val); } -static inline u8 crt_inb(u32 idx) { +static inline u8 crt_inb(struct tdfx_par *par, u32 idx) { vga_outb(CRT_I, idx); return vga_inb(CRT_D); } -static inline void att_outb(u32 idx, u8 val) +static inline void att_outb(struct tdfx_par *par, u32 idx, u8 val) { unsigned char tmp; @@ -265,7 +261,7 @@ static inline void att_outb(u32 idx, u8 val) vga_outb(ATT_IW, val); } -static inline u8 att_inb(u32 idx) +static inline u8 att_inb(struct tdfx_par *par, u32 idx) { unsigned char tmp; @@ -300,36 +296,36 @@ static inline void vga_disable_palette(void) vga_outb(ATT_IW, 0x00); } -static inline void vga_enable_palette(void) +static inline void vga_enable_palette(struct tdfx_par *par) { vga_inb(IS1_R); vga_outb(ATT_IW, 0x20); } -static inline u32 tdfx_inl(unsigned int reg) +static inline u32 tdfx_inl(struct tdfx_par *par, unsigned int reg) { - return readl(default_par.regbase_virt + reg); + return readl(par->regbase_virt + reg); } -static inline void tdfx_outl(unsigned int reg, u32 val) +static inline void tdfx_outl(struct tdfx_par *par, unsigned int reg, u32 val) { - writel(val, default_par.regbase_virt + reg); + writel(val, par->regbase_virt + reg); } -static inline void banshee_make_room(int size) +static inline void banshee_make_room(struct tdfx_par *par, int size) { - while((tdfx_inl(STATUS) & 0x1f) < size); + while((tdfx_inl(par, STATUS) & 0x1f) < size); } -static inline void banshee_wait_idle(void) +static inline void banshee_wait_idle(struct tdfx_par *par) { int i = 0; banshee_make_room(1); - tdfx_outl(COMMAND_3D, COMMAND_3D_NOP); + tdfx_outl(par, COMMAND_3D, COMMAND_3D_NOP); while(1) { - i = (tdfx_inl(STATUS) & STATUS_BUSY) ? 0 : i + 1; + i = (tdfx_inl(par, STATUS) & STATUS_BUSY) ? 0 : i + 1; if(i == 3) break; } } @@ -337,11 +333,11 @@ static inline void banshee_wait_idle(void) /* * Set the color of a palette entry in 8bpp mode */ -static inline void do_setpalentry(unsigned regno, u32 c) +static inline void do_setpalentry(struct tdfx_par *par, unsigned regno, u32 c) { banshee_make_room(2); - tdfx_outl(DACADDR, regno); - tdfx_outl(DACDATA, c); + tdfx_outl(par, DACADDR, regno); + tdfx_outl(par, DACDATA, c); } static u32 do_calc_pll(int freq, int* freq_out) @@ -979,6 +975,7 @@ static int __devinit tdfxfb_probe(struct pci_dev *pdev, const struct pci_device_id *id) { struct fb_info *info; + struct tdfx_par *par; int size, err; if ((err = pci_enable_device(pdev))) { @@ -986,33 +983,33 @@ static int __devinit tdfxfb_probe(struct pci_dev *pdev, return err; } - info = kmalloc(sizeof(struct fb_info) + sizeof(struct display) + - sizeof(u32) * 16, GFP_KERNEL); + info = kmalloc(sizeof(struct fb_info) + sizeof(struct tdfx_par) + + sizeof(u32) * 17, GFP_KERNEL); if (!info) return -ENOMEM; - memset(info, 0, sizeof(info) + sizeof(struct display) + sizeof(u32) * 16); + memset(info, 0, sizeof(info) + sizeof(struct tdfx_par) + sizeof(u32) * 17); /* Configure the default fb_fix_screeninfo first */ switch (pdev->device) { case PCI_DEVICE_ID_3DFX_BANSHEE: strcat(tdfx_fix.id, " Banshee"); - default_par.max_pixclock = BANSHEE_MAX_PIXCLOCK; + par->max_pixclock = BANSHEE_MAX_PIXCLOCK; break; case PCI_DEVICE_ID_3DFX_VOODOO3: strcat(tdfx_fix.id, " Voodoo3"); - default_par.max_pixclock = VOODOO3_MAX_PIXCLOCK; + par->max_pixclock = VOODOO3_MAX_PIXCLOCK; break; case PCI_DEVICE_ID_3DFX_VOODOO5: strcat(tdfx_fix.id, " Voodoo5"); - default_par.max_pixclock = VOODOO5_MAX_PIXCLOCK; + par->max_pixclock = VOODOO5_MAX_PIXCLOCK; break; } tdfx_fix.mmio_start = pci_resource_start(pdev, 0); tdfx_fix.mmio_len = pci_resource_len(pdev, 0); - default_par.regbase_virt = ioremap_nocache(tdfx_fix.mmio_start, tdfx_fix.mmio_len); - if (!default_par.regbase_virt) { + par->regbase_virt = ioremap_nocache(tdfx_fix.mmio_start, tdfx_fix.mmio_len); + if (!par->regbase_virt) { printk("fb: Can't remap %s register area.\n", tdfx_fix.id); goto out_err; } @@ -1050,7 +1047,7 @@ static int __devinit tdfxfb_probe(struct pci_dev *pdev, goto out_err; } - default_par.iobase = pci_resource_start(pdev, 2); + par->iobase = pci_resource_start(pdev, 2); if (!request_region(pci_resource_start(pdev, 2), pci_resource_len(pdev, 2), "tdfx iobase")) { @@ -1073,15 +1070,13 @@ static int __devinit tdfxfb_probe(struct pci_dev *pdev, info->node = NODEV; info->fbops = &tdfxfb_ops; info->fix = tdfx_fix; - info->par = &default_par; - info->disp = (struct display *)(info + 1); - info->pseudo_palette = (void *)(info->disp + 1); + info->par = (struct tdfx_par *)(info + 1); + info->pseudo_palette = (void *)(info->par + 1); info->flags = FBINFO_FLAG_DEFAULT; - /* The below feilds will go away !!!! */ + /* The below fields will go away !!!! */ strcpy(info->modename, info->fix.id); info->currcon = -1; - info->switch_con = gen_switch; info->updatevar = gen_update_var; if (!mode_option) @@ -1110,10 +1105,11 @@ static int __devinit tdfxfb_probe(struct pci_dev *pdev, /* * Cleanup after anything that was remapped/allocated. */ - if (default_par.regbase_virt) - iounmap(default_par.regbase_virt); + if (par->regbase_virt) + iounmap(par->regbase_virt); if (info->screen_base) iounmap(info->screen_base); + kfree(par); kfree(info); return -ENXIO; } diff --git a/drivers/video/tx3912fb.c b/drivers/video/tx3912fb.c index d395664206ecfbd80cfa9dc2cf7967431fb107a9..12041d64f96053419676ce8a70568de7c3b2ead1 100644 --- a/drivers/video/tx3912fb.c +++ b/drivers/video/tx3912fb.c @@ -21,7 +21,6 @@ #include <linux/init.h> #include <linux/pm.h> #include <linux/fb.h> -#include <video/fbcon.h> #include <asm/io.h> #include <asm/bootinfo.h> #include <asm/uaccess.h> @@ -33,7 +32,6 @@ */ static struct fb_info fb_info; static u32 cfb8[16]; -static struct display disp; static struct fb_fix_screeninfo tx3912fb_fix __initdata = { .id = "tx3912fb", @@ -97,8 +95,6 @@ static int tx3912fb_setcolreg(u_int regno, u_int red, u_int green, static struct fb_ops tx3912fb_ops = { .owner = THIS_MODULE, .fb_set_var = gen_set_var, - .fb_get_cmap = gen_get_cmap, - .fb_set_cmap = gen_set_cmap, .fb_setcolreg = tx3912fb_setcolreg, .fb_fillrect = cfb_fillrect, .fb_copyarea = cfb_copyarea, @@ -295,16 +291,12 @@ int __init tx3912fb_init(void) if ((tx3912fb_fix.line_length * tx3912fb_var.yres_virtual) > tx3912fb_fix.smem_len) return -ENOMEM; - strcpy(fb_info.modename, tx3912fb_fix.id); - fb_info.changevar = NULL; fb_info.node = NODEV; fb_info.currcon = -1; fb_info.fbops = &tx3912fb_ops; fb_info.var = tx3912fb_var; fb_info.fix = tx3912fb_fix; fb_info.pseudo_palette = pseudo_palette; - fb_info.disp = &disp; - fb_info.switch_con = gen_switch; fb_info.updatevar = gen_update_var; fb_info.flags = FBINFO_FLAG_DEFAULT; @@ -313,7 +305,6 @@ int __init tx3912fb_init(void) udelay(200); fb_alloc_cmap(&info->cmap, size, 0); - gen_set_disp(-1, &disp); if (register_framebuffer(&fb_info) < 0) return -1; diff --git a/drivers/video/vesafb.c b/drivers/video/vesafb.c index 1326c71bd6977acb05723d6c1d47ad5b4062ff38..0fbd132941fc770a178c8078e84c1fcf932d443c 100644 --- a/drivers/video/vesafb.c +++ b/drivers/video/vesafb.c @@ -17,16 +17,12 @@ #include <linux/slab.h> #include <linux/delay.h> #include <linux/fb.h> -#include <linux/console.h> -#include <linux/selection.h> #include <linux/ioport.h> #include <linux/init.h> #include <asm/io.h> #include <asm/mtrr.h> -#include <video/fbcon.h> - #define dac_reg (0x3c8) #define dac_val (0x3c9) @@ -49,7 +45,6 @@ static struct fb_fix_screeninfo vesafb_fix __initdata = { .accel = FB_ACCEL_NONE, }; -static struct display disp; static struct fb_info fb_info; static u32 pseudo_palette[17]; @@ -176,8 +171,6 @@ static int vesafb_setcolreg(unsigned regno, unsigned red, unsigned green, static struct fb_ops vesafb_ops = { .owner = THIS_MODULE, .fb_set_var = gen_set_var, - .fb_get_cmap = gen_get_cmap, - .fb_set_cmap = gen_set_cmap, .fb_setcolreg = vesafb_setcolreg, .fb_pan_display = vesafb_pan_display, .fb_fillrect = cfb_fillrect, @@ -351,21 +344,16 @@ int __init vesafb_init(void) } } - strcpy(fb_info.modename, vesafb_fix.id); - fb_info.changevar = NULL; fb_info.node = NODEV; fb_info.fbops = &vesafb_ops; fb_info.var = vesafb_defined; fb_info.fix = vesafb_fix; fb_info.currcon = -1; - fb_info.disp = &disp; - fb_info.switch_con = gen_switch; fb_info.updatevar = gen_update_var; fb_info.pseudo_palette = pseudo_palette; fb_info.flags = FBINFO_FLAG_DEFAULT; fb_alloc_cmap(&fb_info.cmap, video_cmap_len, 0); - gen_set_disp(-1, &fb_info); if (register_framebuffer(&fb_info)<0) return -EINVAL; diff --git a/drivers/video/vfb.c b/drivers/video/vfb.c index 5ed50a49b234e432d3881b8f4246927046fe682a..fbc16c0be81f72da419d8b54b7c6ac26d234c671 100644 --- a/drivers/video/vfb.c +++ b/drivers/video/vfb.c @@ -24,8 +24,6 @@ #include <linux/fb.h> #include <linux/init.h> -#include <video/fbcon.h> - /* * RAM we reserve for the frame buffer. This defines the maximum screen * size @@ -42,7 +40,6 @@ static const char *mode_option __initdata = NULL; static struct fb_info fb_info; static u32 vfb_pseudo_palette[17]; -static struct display disp; static struct fb_var_screeninfo vfb_default __initdata = { .xres = 640, @@ -97,8 +94,6 @@ static int vfb_mmap(struct fb_info *info, struct file *file, static struct fb_ops vfb_ops = { .fb_set_var gen_set_var, - .fb_get_cmap gen_set_cmap, - .fb_set_cmap gen_set_cmap, .fb_check_var vfb_check_var, .fb_set_par vfb_set_par, .fb_setcolreg vfb_setcolreg, @@ -444,11 +439,7 @@ int __init vfb_init(void) fb_info.pseudo_palette = &vfb_pseudo_palette; fb_info.flags = FBINFO_FLAG_DEFAULT; - strcpy(fb_info.modename, vfb_fix.id); - fb_info.changevar = NULL; fb_info.currcon = -1; - fb_info.disp = &disp; - fb_info.switch_con = gen_switch; fb_info.updatevar = gen_update_var; fb_alloc_cmap(&fb_info.cmap, 256, 0); diff --git a/drivers/video/vgacon.c b/drivers/video/vgacon.c index b65d47810913f839909538e068ecccc8f481d916..b798756cef748f06897f4be4d07e3b231707ac59 100644 --- a/drivers/video/vgacon.c +++ b/drivers/video/vgacon.c @@ -180,6 +180,13 @@ static const char __init *vgacon_startup(void) #endif } + /* VGA16 modes are not handled by VGACON */ + if ((ORIG_VIDEO_MODE == 0x0D) || /* 320x200/4 */ + (ORIG_VIDEO_MODE == 0x0E) || /* 640x200/4 */ + (ORIG_VIDEO_MODE == 0x10) || /* 640x350/4 */ + (ORIG_VIDEO_MODE == 0x12) || /* 640x480/4 */ + (ORIG_VIDEO_MODE == 0x6A)) /* 800x600/4, 0x6A is very common */ + goto no_vga; vga_video_num_lines = ORIG_VIDEO_LINES; vga_video_num_columns = ORIG_VIDEO_COLS; diff --git a/include/linux/fb.h b/include/linux/fb.h index d1782a6bd008b692a65b79bc3060bba1e3e30574..94cd4901fa95ce1141f1667097edfd42689d2d25 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h @@ -3,6 +3,7 @@ #include <linux/tty.h> #include <asm/types.h> +#include <asm/io.h> /* Definitions of frame buffers */ @@ -264,10 +265,10 @@ struct fb_vblank { struct fb_copyarea { __u32 sx; /* screen-relative */ __u32 sy; - __u32 width; - __u32 height; __u32 dx; __u32 dy; + __u32 width; + __u32 height; }; struct fb_fillrect { @@ -280,10 +281,10 @@ struct fb_fillrect { }; struct fb_image { + __u32 dx; /* Where to place image */ + __u32 dy; __u32 width; /* Size of image */ __u32 height; - __u16 dx; /* Where to place image */ - __u16 dy; __u32 fg_color; /* Only used when a mono bitmap */ __u32 bg_color; __u8 depth; /* Dpeth of the image */ @@ -319,12 +320,6 @@ struct fb_ops { /* set settable parameters */ int (*fb_set_var)(struct fb_var_screeninfo *var, int con, struct fb_info *info); - /* get colormap */ - int (*fb_get_cmap)(struct fb_cmap *cmap, int kspc, int con, - struct fb_info *info); - /* set colormap */ - int (*fb_set_cmap)(struct fb_cmap *cmap, int kspc, int con, - struct fb_info *info); /* checks var and creates a par based on it */ int (*fb_check_var)(struct fb_var_screeninfo *var, struct fb_info *info); /* set the video mode according to par */ @@ -354,7 +349,6 @@ struct fb_ops { }; struct fb_info { - char modename[40]; /* default video mode */ kdev_t node; int flags; int open; /* Has this been open already ? */ @@ -365,15 +359,11 @@ struct fb_info { struct fb_cmap cmap; /* Current cmap */ struct fb_ops *fbops; char *screen_base; /* Virtual address */ - struct display *disp; /* initial display variable */ struct vc_data *display_fg; /* Console visible on this display */ int currcon; /* Current VC. */ char fontname[40]; /* default font name */ devfs_handle_t devfs_handle; /* Devfs handle for new name */ devfs_handle_t devfs_lhandle; /* Devfs handle for compat. symlink */ - int (*changevar)(int); /* tell console var has changed */ - int (*switch_con)(int, struct fb_info*); - /* tell fb to switch consoles */ int (*updatevar)(int, struct fb_info*); /* tell fb to update the vars */ void *pseudo_palette; /* Fake palette of 16 colors and @@ -387,6 +377,42 @@ struct fb_info { #define FBINFO_FLAG_DEFAULT FBINFO_FLAG_MODULE #else #define FBINFO_FLAG_DEFAULT 0 +#endif + +#if defined(__sparc__) + +/* We map all of our framebuffers such that big-endian accesses + * are what we want, so the following is sufficient. + */ + +#define fb_readb sbus_readb +#define fb_readw sbus_readw +#define fb_readl sbus_readl +#define fb_writeb sbus_writeb +#define fb_writew sbus_writew +#define fb_writel sbus_writel +#define fb_memset sbus_memset_io + +#elif defined(__i386__) || defined(__alpha__) || defined(__x86_64__) + +#define fb_readb __raw_readb +#define fb_readw __raw_readw +#define fb_readl __raw_readl +#define fb_writeb __raw_writeb +#define fb_writew __raw_writew +#define fb_writel __raw_writel +#define fb_memset memset_io + +#else + +#define fb_readb(addr) (*(volatile u8 *) (addr)) +#define fb_readw(addr) (*(volatile u16 *) (addr)) +#define fb_readl(addr) (*(volatile u32 *) (addr)) +#define fb_writeb(b,addr) (*(volatile u8 *) (addr) = (b)) +#define fb_writew(b,addr) (*(volatile u16 *) (addr) = (b)) +#define fb_writel(b,addr) (*(volatile u32 *) (addr) = (b)) +#define fb_memset memset + #endif /* @@ -395,14 +421,10 @@ struct fb_info { extern int gen_set_var(struct fb_var_screeninfo *var, int con, struct fb_info *info); -extern int gen_get_cmap(struct fb_cmap *cmap, int kspc, int con, - struct fb_info *info); -extern int gen_set_cmap(struct fb_cmap *cmap, int kspc, int con, - struct fb_info *info); extern int fb_pan_display(struct fb_var_screeninfo *var, int con, struct fb_info *info); extern void cfb_fillrect(struct fb_info *info, struct fb_fillrect *rect); -extern void cfb_copyarea(struct fb_info *info, struct fb_copyarea *region); +extern void cfb_copyarea(struct fb_info *info, struct fb_copyarea *area); extern void cfb_imageblit(struct fb_info *info, struct fb_image *image); /* @@ -412,7 +434,6 @@ extern void cfb_imageblit(struct fb_info *info, struct fb_image *image); extern void do_install_cmap(int con, struct fb_info *info); extern int gen_update_var(int con, struct fb_info *info); extern int fb_blank(int blank, struct fb_info *info); -extern int gen_switch(int con, struct fb_info *info); extern void gen_set_disp(int con, struct fb_info *info); /* drivers/video/fbmem.c */ diff --git a/include/video/fbcon-cfb16.h b/include/video/fbcon-cfb16.h deleted file mode 100644 index 3ccc7d7cd535e1af7c930095ac4d45412a60304a..0000000000000000000000000000000000000000 --- a/include/video/fbcon-cfb16.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * FBcon low-level driver for 16 bpp packed pixel (cfb16) - */ - -#ifndef _VIDEO_FBCON_CFB16_H -#define _VIDEO_FBCON_CFB16_H - -#include <linux/config.h> - -#ifdef MODULE -#if defined(CONFIG_FBCON_CFB16) || defined(CONFIG_FBCON_CFB16_MODULE) -#define FBCON_HAS_CFB16 -#endif -#else -#if defined(CONFIG_FBCON_CFB16) -#define FBCON_HAS_CFB16 -#endif -#endif - -extern struct display_switch fbcon_cfb16; -extern void fbcon_cfb16_setup(struct display *p); -extern void fbcon_cfb16_bmove(struct display *p, int sy, int sx, int dy, - int dx, int height, int width); -extern void fbcon_cfb16_clear(struct vc_data *conp, struct display *p, int sy, - int sx, int height, int width); -extern void fbcon_cfb16_putc(struct vc_data *conp, struct display *p, int c, - int yy, int xx); -extern void fbcon_cfb16_putcs(struct vc_data *conp, struct display *p, - const unsigned short *s, int count, int yy, int xx); -extern void fbcon_cfb16_revc(struct display *p, int xx, int yy); -extern void fbcon_cfb16_clear_margins(struct vc_data *conp, struct display *p, - int bottom_only); - -#endif /* _VIDEO_FBCON_CFB16_H */ diff --git a/include/video/fbcon-cfb2.h b/include/video/fbcon-cfb2.h deleted file mode 100644 index 5ba68a5f0a4f9debaba2c824a687eeac785033e0..0000000000000000000000000000000000000000 --- a/include/video/fbcon-cfb2.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * FBcon low-level driver for 2 bpp packed pixel (cfb2) - */ - -#ifndef _VIDEO_FBCON_CFB2_H -#define _VIDEO_FBCON_CFB2_H - -#include <linux/config.h> - -#ifdef MODULE -#if defined(CONFIG_FBCON_CFB2) || defined(CONFIG_FBCON_CFB2_MODULE) -#define FBCON_HAS_CFB2 -#endif -#else -#if defined(CONFIG_FBCON_CFB2) -#define FBCON_HAS_CFB2 -#endif -#endif - -extern struct display_switch fbcon_cfb2; -extern void fbcon_cfb2_setup(struct display *p); -extern void fbcon_cfb2_bmove(struct display *p, int sy, int sx, int dy, int dx, - int height, int width); -extern void fbcon_cfb2_clear(struct vc_data *conp, struct display *p, int sy, - int sx, int height, int width); -extern void fbcon_cfb2_putc(struct vc_data *conp, struct display *p, int c, - int yy, int xx); -extern void fbcon_cfb2_putcs(struct vc_data *conp, struct display *p, - const unsigned short *s, int count, int yy, int xx); -extern void fbcon_cfb2_revc(struct display *p, int xx, int yy); - -#endif /* _VIDEO_FBCON_CFB2_H */ diff --git a/include/video/fbcon-cfb24.h b/include/video/fbcon-cfb24.h deleted file mode 100644 index 77442e22d2afded0ee7a0187767cc60536f3dc38..0000000000000000000000000000000000000000 --- a/include/video/fbcon-cfb24.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * FBcon low-level driver for 24 bpp packed pixel (cfb24) - */ - -#ifndef _VIDEO_FBCON_CFB24_H -#define _VIDEO_FBCON_CFB24_H - -#include <linux/config.h> - -#ifdef MODULE -#if defined(CONFIG_FBCON_CFB24) || defined(CONFIG_FBCON_CFB24_MODULE) -#define FBCON_HAS_CFB24 -#endif -#else -#if defined(CONFIG_FBCON_CFB24) -#define FBCON_HAS_CFB24 -#endif -#endif - -extern struct display_switch fbcon_cfb24; -extern void fbcon_cfb24_setup(struct display *p); -extern void fbcon_cfb24_bmove(struct display *p, int sy, int sx, int dy, - int dx, int height, int width); -extern void fbcon_cfb24_clear(struct vc_data *conp, struct display *p, int sy, - int sx, int height, int width); -extern void fbcon_cfb24_putc(struct vc_data *conp, struct display *p, int c, - int yy, int xx); -extern void fbcon_cfb24_putcs(struct vc_data *conp, struct display *p, - const unsigned short *s, int count, int yy, int xx); -extern void fbcon_cfb24_revc(struct display *p, int xx, int yy); -extern void fbcon_cfb24_clear_margins(struct vc_data *conp, struct display *p, - int bottom_only); - -#endif /* _VIDEO_FBCON_CFB24_H */ diff --git a/include/video/fbcon-cfb32.h b/include/video/fbcon-cfb32.h deleted file mode 100644 index abac3baa2f37e1fdbff8547cf319092cfc8d8ef4..0000000000000000000000000000000000000000 --- a/include/video/fbcon-cfb32.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * FBcon low-level driver for 32 bpp packed pixel (cfb32) - */ - -#ifndef _VIDEO_FBCON_CFB32_H -#define _VIDEO_FBCON_CFB32_H - -#include <linux/config.h> - -#ifdef MODULE -#if defined(CONFIG_FBCON_CFB32) || defined(CONFIG_FBCON_CFB32_MODULE) -#define FBCON_HAS_CFB32 -#endif -#else -#if defined(CONFIG_FBCON_CFB32) -#define FBCON_HAS_CFB32 -#endif -#endif - -extern struct display_switch fbcon_cfb32; -extern void fbcon_cfb32_setup(struct display *p); -extern void fbcon_cfb32_bmove(struct display *p, int sy, int sx, int dy, - int dx, int height, int width); -extern void fbcon_cfb32_clear(struct vc_data *conp, struct display *p, int sy, - int sx, int height, int width); -extern void fbcon_cfb32_putc(struct vc_data *conp, struct display *p, int c, - int yy, int xx); -extern void fbcon_cfb32_putcs(struct vc_data *conp, struct display *p, - const unsigned short *s, int count, int yy, int xx); -extern void fbcon_cfb32_revc(struct display *p, int xx, int yy); -extern void fbcon_cfb32_clear_margins(struct vc_data *conp, struct display *p, - int bottom_only); - -#endif /* _VIDEO_FBCON_CFB32_H */ diff --git a/include/video/fbcon-cfb4.h b/include/video/fbcon-cfb4.h deleted file mode 100644 index 963befe5ca1e75a5fce27c2625513db4a47a8e43..0000000000000000000000000000000000000000 --- a/include/video/fbcon-cfb4.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * FBcon low-level driver for 4 bpp packed pixel (cfb4) - */ - -#ifndef _VIDEO_FBCON_CFB4_H -#define _VIDEO_FBCON_CFB4_H - -#include <linux/config.h> - -#ifdef MODULE -#if defined(CONFIG_FBCON_CFB4) || defined(CONFIG_FBCON_CFB4_MODULE) -#define FBCON_HAS_CFB4 -#endif -#else -#if defined(CONFIG_FBCON_CFB4) -#define FBCON_HAS_CFB4 -#endif -#endif - -extern struct display_switch fbcon_cfb4; -extern void fbcon_cfb4_setup(struct display *p); -extern void fbcon_cfb4_bmove(struct display *p, int sy, int sx, int dy, int dx, - int height, int width); -extern void fbcon_cfb4_clear(struct vc_data *conp, struct display *p, int sy, - int sx, int height, int width); -extern void fbcon_cfb4_putc(struct vc_data *conp, struct display *p, int c, - int yy, int xx); -extern void fbcon_cfb4_putcs(struct vc_data *conp, struct display *p, - const unsigned short *s, int count, int yy, int xx); -extern void fbcon_cfb4_revc(struct display *p, int xx, int yy); - -#endif /* _VIDEO_FBCON_CFB4_H */ diff --git a/include/video/fbcon-cfb8.h b/include/video/fbcon-cfb8.h deleted file mode 100644 index 96189d0acd277637b885b5ea6e3806b95aaf0931..0000000000000000000000000000000000000000 --- a/include/video/fbcon-cfb8.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * FBcon low-level driver for 8 bpp packed pixel (cfb8) - */ - -#ifndef _VIDEO_FBCON_CFB8_H -#define _VIDEO_FBCON_CFB8_H - -#include <linux/config.h> - -#ifdef MODULE -#if defined(CONFIG_FBCON_CFB8) || defined(CONFIG_FBCON_CFB8_MODULE) -#define FBCON_HAS_CFB8 -#endif -#else -#if defined(CONFIG_FBCON_CFB8) -#define FBCON_HAS_CFB8 -#endif -#endif - -extern struct display_switch fbcon_cfb8; -extern void fbcon_cfb8_setup(struct display *p); -extern void fbcon_cfb8_bmove(struct display *p, int sy, int sx, int dy, int dx, - int height, int width); -extern void fbcon_cfb8_clear(struct vc_data *conp, struct display *p, int sy, - int sx, int height, int width); -extern void fbcon_cfb8_putc(struct vc_data *conp, struct display *p, int c, - int yy, int xx); -extern void fbcon_cfb8_putcs(struct vc_data *conp, struct display *p, - const unsigned short *s, int count, int yy, int xx); -extern void fbcon_cfb8_revc(struct display *p, int xx, int yy); -extern void fbcon_cfb8_clear_margins(struct vc_data *conp, struct display *p, - int bottom_only); - -#endif /* _VIDEO_FBCON_CFB8_H */ diff --git a/include/video/fbcon-mac.h b/include/video/fbcon-mac.h deleted file mode 100644 index b275ff91b82473633520771005b34a59a5faf9c7..0000000000000000000000000000000000000000 --- a/include/video/fbcon-mac.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * FBcon low-level driver for Mac variable bpp packed pixels (mac) - */ - -#ifndef _VIDEO_FBCON_MAC_H -#define _VIDEO_FBCON_MAC_H - -#include <linux/config.h> - -#ifdef MODULE -#if defined(CONFIG_FBCON_MAC) || defined(CONFIG_FBCON_MAC_MODULE) -#define FBCON_HAS_MAC -#endif -#else -#if defined(CONFIG_FBCON_MAC) -#define FBCON_HAS_MAC -#endif -#endif - -extern struct display_switch fbcon_mac; -extern void fbcon_mac_setup(struct display *p); -extern void fbcon_mac_bmove(struct display *p, int sy, int sx, int dy, int dx, - int height, int width); -extern void fbcon_mac_clear(struct vc_data *conp, struct display *p, int sy, - int sx, int height, int width); -extern void fbcon_mac_putc(struct vc_data *conp, struct display *p, int c, - int yy, int xx); -extern void fbcon_mac_putcs(struct vc_data *conp, struct display *p, - const unsigned short *s, int count, int yy, int xx); -extern void fbcon_mac_revc(struct display *p, int xx, int yy); - -#endif /* _VIDEO_FBCON_MAC_H */ diff --git a/include/video/fbcon-vga-planes.h b/include/video/fbcon-vga-planes.h index 31578d41c58f720e5a71a9f90d79c14d0d9032d9..e9e0f3c4d7fa5e6b8492a6740fad840e4a17d083 100644 --- a/include/video/fbcon-vga-planes.h +++ b/include/video/fbcon-vga-planes.h @@ -18,6 +18,7 @@ #endif extern struct display_switch fbcon_vga_planes; +extern struct display_switch fbcon_vga8_planes; extern struct display_switch fbcon_ega_planes; extern void fbcon_vga_planes_setup(struct display *p); extern void fbcon_vga_planes_bmove(struct display *p, int sy, int sx, int dy, int dx, diff --git a/include/video/fbcon.h b/include/video/fbcon.h index c28fea0c10c3637f5803ae78da4e9372dec63ec4..10ca672e0d6520192e5d1dc39527f0819993c0e4 100644 --- a/include/video/fbcon.h +++ b/include/video/fbcon.h @@ -18,6 +18,7 @@ #include <asm/io.h> +struct display; /* * `switch' for the Low Level Operations @@ -51,10 +52,6 @@ extern struct display_switch fbcon_dummy; struct display { /* Filled in by the frame buffer device */ - - struct fb_var_screeninfo var; /* variable infos. yoffset and vmode */ - /* are updated by fbcon.c */ - struct fb_cmap cmap; /* colormap */ u_short can_soft_blank; /* zero if no hardware blanking */ u_short inverse; /* != 0 text black on white as default */ struct display_switch *dispsw; /* low level operations */ @@ -184,44 +181,6 @@ extern int set_all_vcs(int fbidx, struct fb_ops *fb, /* Namespace consistency */ #define SCROLL_YNOPARTIAL __SCROLL_YNOPARTIAL - -#if defined(__sparc__) - -/* We map all of our framebuffers such that big-endian accesses - * are what we want, so the following is sufficient. - */ - -#define fb_readb sbus_readb -#define fb_readw sbus_readw -#define fb_readl sbus_readl -#define fb_writeb sbus_writeb -#define fb_writew sbus_writew -#define fb_writel sbus_writel -#define fb_memset sbus_memset_io - -#elif defined(__i386__) || defined(__alpha__) || defined(__x86_64__) - -#define fb_readb __raw_readb -#define fb_readw __raw_readw -#define fb_readl __raw_readl -#define fb_writeb __raw_writeb -#define fb_writew __raw_writew -#define fb_writel __raw_writel -#define fb_memset memset_io - -#else - -#define fb_readb(addr) (*(volatile u8 *) (addr)) -#define fb_readw(addr) (*(volatile u16 *) (addr)) -#define fb_readl(addr) (*(volatile u32 *) (addr)) -#define fb_writeb(b,addr) (*(volatile u8 *) (addr) = (b)) -#define fb_writew(b,addr) (*(volatile u16 *) (addr) = (b)) -#define fb_writel(b,addr) (*(volatile u32 *) (addr) = (b)) -#define fb_memset memset - -#endif - - extern void fbcon_redraw_clear(struct vc_data *, struct display *, int, int, int, int); extern void fbcon_redraw_bmove(struct display *, int, int, int, int, int, int);