diff options
Diffstat (limited to 'drivers/video')
50 files changed, 598 insertions, 4799 deletions
diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig index 25b6ca6..cc8e3bf 100644 --- a/drivers/video/Kconfig +++ b/drivers/video/Kconfig @@ -534,9 +534,15 @@ config FB_SUN3 bool "Sun3 framebuffer support" depends on (FB = y) && (SUN3 || SUN3X) && BROKEN +config FB_SBUS + bool "SBUS and UPA framebuffers" + depends on (FB = y) && SPARC + help + Say Y if you want support for SBUS or UPA based frame buffer device. + config FB_BW2 bool "BWtwo support" - depends on (FB = y) && ((SPARC32 || SPARC64) && FB_SBUS || (SUN3 || SUN3X) && FB_SUN3) + depends on (FB = y) && (SPARC && FB_SBUS || (SUN3 || SUN3X) && FB_SUN3) select FB_CFB_FILLRECT select FB_CFB_COPYAREA select FB_CFB_IMAGEBLIT @@ -545,7 +551,8 @@ config FB_BW2 config FB_CG3 bool "CGthree support" - depends on (FB = y) && ((SPARC32 || SPARC64) && FB_SBUS || (SUN3 || SUN3X) && FB_SUN3) + depends on (FB = y) && (SPARC && FB_SBUS || (SUN3 || SUN3X) && FB_SUN3) + select FB_CFB_FILLRECT select FB_CFB_COPYAREA select FB_CFB_IMAGEBLIT help @@ -553,7 +560,7 @@ config FB_CG3 config FB_CG6 bool "CGsix (GX,TurboGX) support" - depends on (FB = y) && ((SPARC32 || SPARC64) && FB_SBUS || (SUN3 || SUN3X) && FB_SUN3) + depends on (FB = y) && (SPARC && FB_SBUS || (SUN3 || SUN3X) && FB_SUN3) select FB_CFB_COPYAREA select FB_CFB_IMAGEBLIT help @@ -1210,12 +1217,6 @@ config FB_AU1100 source "drivers/video/geode/Kconfig" -config FB_SBUS - bool "SBUS and UPA framebuffers" - depends on (FB = y) && (SPARC32 || SPARC64) - help - Say Y if you want support for SBUS or UPA based frame buffer device. - config FB_FFB bool "Creator/Creator3D/Elite3D support" depends on FB_SBUS && SPARC64 @@ -1267,7 +1268,7 @@ config FB_LEO config FB_PCI bool "PCI framebuffers" - depends on (FB = y) && PCI && (SPARC64 || SPARC32) + depends on (FB = y) && PCI && SPARC config FB_IGA bool "IGA 168x display support" diff --git a/drivers/video/acornfb.c b/drivers/video/acornfb.c index 193b482..750cebb 100644 --- a/drivers/video/acornfb.c +++ b/drivers/video/acornfb.c @@ -1279,7 +1279,7 @@ free_unused_pages(unsigned int virtual_start, unsigned int virtual_end) printk("acornfb: freed %dK memory\n", mb_freed); } -static int __init acornfb_probe(struct device *dev) +static int __init acornfb_probe(struct platform_device *dev) { unsigned long size; u_int h_sync, v_sync; @@ -1292,7 +1292,7 @@ static int __init acornfb_probe(struct device *dev) acornfb_init_fbinfo(); - current_par.dev = dev; + current_par.dev = &dev->dev; if (current_par.montype == -1) current_par.montype = acornfb_detect_monitortype(); @@ -1453,15 +1453,16 @@ static int __init acornfb_probe(struct device *dev) return 0; } -static struct device_driver acornfb_driver = { - .name = "acornfb", - .bus = &platform_bus_type, +static struct platform_driver acornfb_driver = { .probe = acornfb_probe, + .driver = { + .name = "acornfb", + }, }; static int __init acornfb_init(void) { - return driver_register(&acornfb_driver); + return platform_driver_register(&acornfb_driver); } module_init(acornfb_init); diff --git a/drivers/video/arcfb.c b/drivers/video/arcfb.c index a1fc8bb..2784f0a 100644 --- a/drivers/video/arcfb.c +++ b/drivers/video/arcfb.c @@ -441,7 +441,7 @@ static int arcfb_ioctl(struct inode *inode, struct file *file, * the fb. it's inefficient for them to do anything less than 64*8 * writes since we update the lcd in each write() anyway. */ -static ssize_t arcfb_write(struct file *file, const char *buf, size_t count, +static ssize_t arcfb_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos) { /* modded from epson 1355 */ @@ -514,9 +514,8 @@ static struct fb_ops arcfb_ops = { .fb_ioctl = arcfb_ioctl, }; -static int __init arcfb_probe(struct device *device) +static int __init arcfb_probe(struct platform_device *dev) { - struct platform_device *dev = to_platform_device(device); struct fb_info *info; int retval = -ENOMEM; int videomemorysize; @@ -559,7 +558,7 @@ static int __init arcfb_probe(struct device *device) retval = register_framebuffer(info); if (retval < 0) goto err1; - dev_set_drvdata(&dev->dev, info); + platform_set_drvdata(dev, info); if (irq) { par->irq = irq; if (request_irq(par->irq, &arcfb_interrupt, SA_SHIRQ, @@ -600,9 +599,9 @@ err: return retval; } -static int arcfb_remove(struct device *device) +static int arcfb_remove(struct platform_device *dev) { - struct fb_info *info = dev_get_drvdata(device); + struct fb_info *info = platform_get_drvdata(dev); if (info) { unregister_framebuffer(info); @@ -612,11 +611,12 @@ static int arcfb_remove(struct device *device) return 0; } -static struct device_driver arcfb_driver = { - .name = "arcfb", - .bus = &platform_bus_type, +static struct platform_driver arcfb_driver = { .probe = arcfb_probe, .remove = arcfb_remove, + .driver = { + .name = "arcfb", + }, }; static struct platform_device *arcfb_device; @@ -628,7 +628,7 @@ static int __init arcfb_init(void) if (!arcfb_enable) return -ENXIO; - ret = driver_register(&arcfb_driver); + ret = platform_driver_register(&arcfb_driver); if (!ret) { arcfb_device = platform_device_alloc("arcfb", 0); if (arcfb_device) { @@ -638,7 +638,7 @@ static int __init arcfb_init(void) } if (ret) { platform_device_put(arcfb_device); - driver_unregister(&arcfb_driver); + platform_driver_unregister(&arcfb_driver); } } return ret; @@ -648,7 +648,7 @@ static int __init arcfb_init(void) static void __exit arcfb_exit(void) { platform_device_unregister(arcfb_device); - driver_unregister(&arcfb_driver); + platform_driver_unregister(&arcfb_driver); } module_param(num_cols, ulong, 0); diff --git a/drivers/video/backlight/corgi_bl.c b/drivers/video/backlight/corgi_bl.c index 4867498..6a219b2 100644 --- a/drivers/video/backlight/corgi_bl.c +++ b/drivers/video/backlight/corgi_bl.c @@ -48,6 +48,12 @@ static void corgibl_send_intensity(int intensity) corgibl_mach_set_intensity(intensity); spin_unlock_irqrestore(&bl_lock, flags); + + corgi_kick_batt = symbol_get(sharpsl_battery_kick); + if (corgi_kick_batt) { + corgi_kick_batt(); + symbol_put(sharpsl_battery_kick); + } } static void corgibl_blank(int blank) @@ -73,13 +79,13 @@ static void corgibl_blank(int blank) } #ifdef CONFIG_PM -static int corgibl_suspend(struct device *dev, pm_message_t state) +static int corgibl_suspend(struct platform_device *dev, pm_message_t state) { corgibl_blank(FB_BLANK_POWERDOWN); return 0; } -static int corgibl_resume(struct device *dev) +static int corgibl_resume(struct platform_device *dev) { corgibl_blank(FB_BLANK_UNBLANK); return 0; @@ -137,9 +143,9 @@ static struct backlight_properties corgibl_data = { static struct backlight_device *corgi_backlight_device; -static int __init corgibl_probe(struct device *dev) +static int __init corgibl_probe(struct platform_device *pdev) { - struct corgibl_machinfo *machinfo = dev->platform_data; + struct corgibl_machinfo *machinfo = pdev->dev.platform_data; corgibl_data.max_brightness = machinfo->max_intensity; corgibl_mach_set_intensity = machinfo->set_bl_intensity; @@ -156,7 +162,7 @@ static int __init corgibl_probe(struct device *dev) return 0; } -static int corgibl_remove(struct device *dev) +static int corgibl_remove(struct platform_device *dev) { backlight_device_unregister(corgi_backlight_device); @@ -166,23 +172,24 @@ static int corgibl_remove(struct device *dev) return 0; } -static struct device_driver corgibl_driver = { - .name = "corgi-bl", - .bus = &platform_bus_type, +static struct platform_driver corgibl_driver = { .probe = corgibl_probe, .remove = corgibl_remove, .suspend = corgibl_suspend, .resume = corgibl_resume, + .driver = { + .name = "corgi-bl", + }, }; static int __init corgibl_init(void) { - return driver_register(&corgibl_driver); + return platform_driver_register(&corgibl_driver); } static void __exit corgibl_exit(void) { - driver_unregister(&corgibl_driver); + platform_driver_unregister(&corgibl_driver); } module_init(corgibl_init); diff --git a/drivers/video/bw2.c b/drivers/video/bw2.c index f53bf3ba..9248fe1 100644 --- a/drivers/video/bw2.c +++ b/drivers/video/bw2.c @@ -51,6 +51,9 @@ static struct fb_ops bw2_ops = { .fb_imageblit = cfb_imageblit, .fb_mmap = bw2_mmap, .fb_ioctl = bw2_ioctl, +#ifdef CONFIG_COMPAT + .fb_compat_ioctl = sbusfb_compat_ioctl, +#endif }; /* OBio addresses for the bwtwo registers */ @@ -118,7 +121,6 @@ struct bw2_par { unsigned long fbsize; struct sbus_dev *sdev; - struct list_head list; }; /** diff --git a/drivers/video/cfbcopyarea.c b/drivers/video/cfbcopyarea.c index cdc7157..7441532 100644 --- a/drivers/video/cfbcopyarea.c +++ b/drivers/video/cfbcopyarea.c @@ -64,8 +64,8 @@ bitcpy(unsigned long __iomem *dst, int dst_idx, const unsigned long __iomem *src int const shift = dst_idx-src_idx; int left, right; - first = ~0UL >> dst_idx; - last = ~(~0UL >> ((dst_idx+n) % bits)); + first = FB_SHIFT_HIGH(~0UL, dst_idx); + last = ~(FB_SHIFT_HIGH(~0UL, (dst_idx+n) % bits)); if (!shift) { // Same alignment for source and dest @@ -216,8 +216,8 @@ bitcpy_rev(unsigned long __iomem *dst, int dst_idx, const unsigned long __iomem shift = dst_idx-src_idx; - first = ~0UL << (bits - 1 - dst_idx); - last = ~(~0UL << (bits - 1 - ((dst_idx-n) % bits))); + first = FB_SHIFT_LOW(~0UL, bits - 1 - dst_idx); + last = ~(FB_SHIFT_LOW(~0UL, bits - 1 - ((dst_idx-n) % bits))); if (!shift) { // Same alignment for source and dest diff --git a/drivers/video/cfbfillrect.c b/drivers/video/cfbfillrect.c index 167d931..e5ff62e 100644 --- a/drivers/video/cfbfillrect.c +++ b/drivers/video/cfbfillrect.c @@ -110,8 +110,8 @@ bitfill_aligned(unsigned long __iomem *dst, int dst_idx, unsigned long pat, unsi if (!n) return; - first = ~0UL >> dst_idx; - last = ~(~0UL >> ((dst_idx+n) % bits)); + first = FB_SHIFT_HIGH(~0UL, dst_idx); + last = ~(FB_SHIFT_HIGH(~0UL, (dst_idx+n) % bits)); if (dst_idx+n <= bits) { // Single word @@ -167,8 +167,8 @@ bitfill_unaligned(unsigned long __iomem *dst, int dst_idx, unsigned long pat, if (!n) return; - first = ~0UL >> dst_idx; - last = ~(~0UL >> ((dst_idx+n) % bits)); + first = FB_SHIFT_HIGH(~0UL, dst_idx); + last = ~(FB_SHIFT_HIGH(~0UL, (dst_idx+n) % bits)); if (dst_idx+n <= bits) { // Single word @@ -221,8 +221,8 @@ bitfill_aligned_rev(unsigned long __iomem *dst, int dst_idx, unsigned long pat, if (!n) return; - first = ~0UL >> dst_idx; - last = ~(~0UL >> ((dst_idx+n) % bits)); + first = FB_SHIFT_HIGH(~0UL, dst_idx); + last = ~(FB_SHIFT_HIGH(~0UL, (dst_idx+n) % bits)); if (dst_idx+n <= bits) { // Single word @@ -290,8 +290,8 @@ bitfill_unaligned_rev(unsigned long __iomem *dst, int dst_idx, unsigned long pat if (!n) return; - first = ~0UL >> dst_idx; - last = ~(~0UL >> ((dst_idx+n) % bits)); + first = FB_SHIFT_HIGH(~0UL, dst_idx); + last = ~(FB_SHIFT_HIGH(~0UL, (dst_idx+n) % bits)); if (dst_idx+n <= bits) { // Single word diff --git a/drivers/video/cfbimgblt.c b/drivers/video/cfbimgblt.c index a7770c4..910e233 100644 --- a/drivers/video/cfbimgblt.c +++ b/drivers/video/cfbimgblt.c @@ -76,18 +76,6 @@ static u32 cfb_tab32[] = { #define FB_WRITEL fb_writel #define FB_READL fb_readl -#if defined (__BIG_ENDIAN) -#define LEFT_POS(bpp) (32 - bpp) -#define SHIFT_HIGH(val, bits) ((val) >> (bits)) -#define SHIFT_LOW(val, bits) ((val) << (bits)) -#define BIT_NR(b) (7 - (b)) -#else -#define LEFT_POS(bpp) (0) -#define SHIFT_HIGH(val, bits) ((val) << (bits)) -#define SHIFT_LOW(val, bits) ((val) >> (bits)) -#define BIT_NR(b) (b) -#endif - static inline void color_imageblit(const struct fb_image *image, struct fb_info *p, u8 __iomem *dst1, u32 start_index, @@ -109,7 +97,7 @@ static inline void color_imageblit(const struct fb_image *image, val = 0; if (start_index) { - u32 start_mask = ~(SHIFT_HIGH(~(u32)0, start_index)); + u32 start_mask = ~(FB_SHIFT_HIGH(~(u32)0, start_index)); val = FB_READL(dst) & start_mask; shift = start_index; } @@ -119,20 +107,20 @@ static inline void color_imageblit(const struct fb_image *image, color = palette[*src]; else color = *src; - color <<= LEFT_POS(bpp); - val |= SHIFT_HIGH(color, shift); + color <<= FB_LEFT_POS(bpp); + val |= FB_SHIFT_HIGH(color, shift); if (shift >= null_bits) { FB_WRITEL(val, dst++); val = (shift == null_bits) ? 0 : - SHIFT_LOW(color, 32 - shift); + FB_SHIFT_LOW(color, 32 - shift); } shift += bpp; shift &= (32 - 1); src++; } if (shift) { - u32 end_mask = SHIFT_HIGH(~(u32)0, shift); + u32 end_mask = FB_SHIFT_HIGH(~(u32)0, shift); FB_WRITEL((FB_READL(dst) & end_mask) | val, dst); } @@ -162,6 +150,8 @@ static inline void slow_imageblit(const struct fb_image *image, struct fb_info * u32 i, j, l; dst2 = (u32 __iomem *) dst1; + fgcolor <<= FB_LEFT_POS(bpp); + bgcolor <<= FB_LEFT_POS(bpp); for (i = image->height; i--; ) { shift = val = 0; @@ -172,22 +162,21 @@ static inline void slow_imageblit(const struct fb_image *image, struct fb_info * /* write leading bits */ if (start_index) { - u32 start_mask = ~(SHIFT_HIGH(~(u32)0, start_index)); + u32 start_mask = ~(FB_SHIFT_HIGH(~(u32)0,start_index)); val = FB_READL(dst) & start_mask; shift = start_index; } while (j--) { l--; - color = (*s & 1 << (BIT_NR(l))) ? fgcolor : bgcolor; - color <<= LEFT_POS(bpp); - val |= SHIFT_HIGH(color, shift); + color = (*s & 1 << (FB_BIT_NR(l))) ? fgcolor : bgcolor; + val |= FB_SHIFT_HIGH(color, shift); /* Did the bitshift spill bits to the next long? */ if (shift >= null_bits) { FB_WRITEL(val, dst++); val = (shift == null_bits) ? 0 : - SHIFT_LOW(color,32 - shift); + FB_SHIFT_LOW(color,32 - shift); } shift += bpp; shift &= (32 - 1); @@ -196,7 +185,7 @@ static inline void slow_imageblit(const struct fb_image *image, struct fb_info * /* write trailing bits */ if (shift) { - u32 end_mask = SHIFT_HIGH(~(u32)0, shift); + u32 end_mask = FB_SHIFT_HIGH(~(u32)0, shift); FB_WRITEL((FB_READL(dst) & end_mask) | val, dst); } diff --git a/drivers/video/cg14.c b/drivers/video/cg14.c index 030d4b1..a561471 100644 --- a/drivers/video/cg14.c +++ b/drivers/video/cg14.c @@ -49,6 +49,9 @@ static struct fb_ops cg14_ops = { .fb_imageblit = cfb_imageblit, .fb_mmap = cg14_mmap, .fb_ioctl = cg14_ioctl, +#ifdef CONFIG_COMPAT + .fb_compat_ioctl = sbusfb_compat_ioctl, +#endif }; #define CG14_MCR_INTENABLE_SHIFT 7 @@ -203,7 +206,6 @@ struct cg14_par { int mode; int ramsize; struct sbus_dev *sdev; - struct list_head list; }; static void __cg14_reset(struct cg14_par *par) diff --git a/drivers/video/cg3.c b/drivers/video/cg3.c index b94eee8..9fcd896 100644 --- a/drivers/video/cg3.c +++ b/drivers/video/cg3.c @@ -50,6 +50,9 @@ static struct fb_ops cg3_ops = { .fb_imageblit = cfb_imageblit, .fb_mmap = cg3_mmap, .fb_ioctl = cg3_ioctl, +#ifdef CONFIG_COMPAT + .fb_compat_ioctl = sbusfb_compat_ioctl, +#endif }; @@ -121,7 +124,6 @@ struct cg3_par { unsigned long fbsize; struct sbus_dev *sdev; - struct list_head list; }; /** diff --git a/drivers/video/cg6.c b/drivers/video/cg6.c index 414c440..050835e3 100644 --- a/drivers/video/cg6.c +++ b/drivers/video/cg6.c @@ -54,6 +54,9 @@ static struct fb_ops cg6_ops = { .fb_sync = cg6_sync, .fb_mmap = cg6_mmap, .fb_ioctl = cg6_ioctl, +#ifdef CONFIG_COMPAT + .fb_compat_ioctl = sbusfb_compat_ioctl, +#endif }; /* Offset of interesting structures in the OBIO space */ @@ -262,7 +265,6 @@ struct cg6_par { unsigned long fbsize; struct sbus_dev *sdev; - struct list_head list; }; static int cg6_sync(struct fb_info *info) @@ -609,7 +611,7 @@ static void cg6_chip_init(struct fb_info *info) struct cg6_par *par = (struct cg6_par *) info->par; struct cg6_tec __iomem *tec = par->tec; struct cg6_fbc __iomem *fbc = par->fbc; - u32 rev, conf, mode, tmp; + u32 rev, conf, mode; int i; /* Turn off stuff in the Transform Engine. */ diff --git a/drivers/video/cirrusfb.c b/drivers/video/cirrusfb.c index 2858c5c..e0dbdfc 100644 --- a/drivers/video/cirrusfb.c +++ b/drivers/video/cirrusfb.c @@ -404,7 +404,7 @@ struct cirrusfb_info { struct cirrusfb_regs currentmode; int blank_mode; - u32 pseudo_palette[17]; + u32 pseudo_palette[16]; struct { u8 red, green, blue, pad; } palette[256]; #ifdef CONFIG_ZORRO @@ -1603,14 +1603,14 @@ static int cirrusfb_setcolreg (unsigned regno, unsigned red, unsigned green, switch (info->var.bits_per_pixel) { case 8: - ((u8*)(info->pseudo_palette))[regno] = v; + cinfo->pseudo_palette[regno] = v; break; case 16: - ((u16*)(info->pseudo_palette))[regno] = v; + cinfo->pseudo_palette[regno] = v; break; case 24: case 32: - ((u32*)(info->pseudo_palette))[regno] = v; + cinfo->pseudo_palette[regno] = v; break; } return 0; @@ -2020,18 +2020,21 @@ static void cirrusfb_prim_fillrect(struct cirrusfb_info *cinfo, const struct fb_fillrect *region) { int m; /* bytes per pixel */ + u32 color = (cinfo->info->fix.visual == FB_VISUAL_TRUECOLOR) ? + cinfo->pseudo_palette[region->color] : region->color; + if(cinfo->info->var.bits_per_pixel == 1) { cirrusfb_RectFill(cinfo->regbase, cinfo->info->var.bits_per_pixel, region->dx / 8, region->dy, region->width / 8, region->height, - region->color, + color, cinfo->currentmode.line_length); } else { m = ( cinfo->info->var.bits_per_pixel + 7 ) / 8; cirrusfb_RectFill(cinfo->regbase, cinfo->info->var.bits_per_pixel, region->dx * m, region->dy, region->width * m, region->height, - region->color, + color, cinfo->currentmode.line_length); } return; diff --git a/drivers/video/console/Kconfig b/drivers/video/console/Kconfig index 94c5f13..a5d09e1 100644 --- a/drivers/video/console/Kconfig +++ b/drivers/video/console/Kconfig @@ -6,7 +6,7 @@ menu "Console display driver support" config VGA_CONSOLE bool "VGA text console" if EMBEDDED || !X86 - depends on !ARCH_ACORN && !ARCH_EBSA110 && !4xx && !8xx && !SPARC32 && !SPARC64 && !M68K && !PARISC && !ARCH_VERSATILE + depends on !ARCH_ACORN && !ARCH_EBSA110 && !4xx && !8xx && !SPARC && !M68K && !PARISC && !ARCH_VERSATILE default y help Saying Y here will allow you to use Linux in text mode through a @@ -68,7 +68,7 @@ config SGI_NEWPORT_CONSOLE config PROM_CONSOLE bool "PROM console" - depends on SPARC32 || SPARC64 + depends on SPARC help Say Y to build a console driver for Sun machines that uses the terminal emulation built into their console PROMS. @@ -136,7 +136,7 @@ config FONTS config FONT_8x8 bool "VGA 8x8 font" if FONTS depends on FRAMEBUFFER_CONSOLE || STI_CONSOLE - default y if !SPARC32 && !SPARC64 && !FONTS + default y if !SPARC && !FONTS help This is the "high resolution" font for the VGA frame buffer (the one provided by the text console 80x50 (and higher) modes). @@ -150,7 +150,7 @@ config FONT_8x8 config FONT_8x16 bool "VGA 8x16 font" if FONTS depends on FRAMEBUFFER_CONSOLE || SGI_NEWPORT_CONSOLE=y || STI_CONSOLE || USB_SISUSBVGA_CON - default y if !SPARC32 && !SPARC64 && !FONTS + default y if !SPARC && !FONTS help This is the "high resolution" font for the VGA frame buffer (the one provided by the VGA text console 80x25 mode. @@ -160,7 +160,7 @@ config FONT_8x16 config FONT_6x11 bool "Mac console 6x11 font (not supported by all drivers)" if FONTS depends on FRAMEBUFFER_CONSOLE || STI_CONSOLE - default y if !SPARC32 && !SPARC64 && !FONTS && MAC + default y if !SPARC && !FONTS && MAC help Small console font with Macintosh-style high-half glyphs. Some Mac framebuffer drivers don't support this one at all. @@ -176,7 +176,7 @@ config FONT_7x14 config FONT_PEARL_8x8 bool "Pearl (old m68k) console 8x8 font" if FONTS depends on FRAMEBUFFER_CONSOLE - default y if !SPARC32 && !SPARC64 && !FONTS && AMIGA + default y if !SPARC && !FONTS && AMIGA help Small console font with PC-style control-character and high-half glyphs. @@ -184,24 +184,24 @@ config FONT_PEARL_8x8 config FONT_ACORN_8x8 bool "Acorn console 8x8 font" if FONTS depends on FRAMEBUFFER_CONSOLE - default y if !SPARC32 && !SPARC64 && !FONTS && ARM && ARCH_ACORN + default y if !SPARC && !FONTS && ARM && ARCH_ACORN help Small console font with PC-style control characters and high-half glyphs. config FONT_MINI_4x6 bool "Mini 4x6 font" - depends on !SPARC32 && !SPARC64 && FONTS + depends on !SPARC && FONTS config FONT_SUN8x16 bool "Sparc console 8x16 font" - depends on FRAMEBUFFER_CONSOLE && (!SPARC32 && !SPARC64 && FONTS || SPARC32 || SPARC64) + depends on FRAMEBUFFER_CONSOLE && (!SPARC && FONTS || SPARC) help This is the high resolution console font for Sun machines. Say Y. config FONT_SUN12x22 bool "Sparc console 12x22 font (not supported by all drivers)" - depends on FRAMEBUFFER_CONSOLE && (!SPARC32 && !SPARC64 && FONTS || SPARC32 || SPARC64) + depends on FRAMEBUFFER_CONSOLE && (!SPARC && FONTS || SPARC) help This is the high resolution console font for Sun machines with very big letters (like the letters used in the SPARC PROM). If the @@ -215,12 +215,5 @@ config FONT_10x18 big letters. It fits between the sun 12x22 and the normal 8x16 font. If other fonts are too big or too small for you, say Y, otherwise say N. -config FONT_RL - bool "console Roman Large 8x16 font" if FONTS - depends on FRAMEBUFFER_CONSOLE - help - This is the visually-appealing "RL" console font that is - included with the kbd package. - endmenu diff --git a/drivers/video/console/Makefile b/drivers/video/console/Makefile index fed600c..9b26dda 100644 --- a/drivers/video/console/Makefile +++ b/drivers/video/console/Makefile @@ -15,7 +15,6 @@ font-objs-$(CONFIG_FONT_10x18) += font_10x18.o font-objs-$(CONFIG_FONT_PEARL_8x8) += font_pearl_8x8.o font-objs-$(CONFIG_FONT_ACORN_8x8) += font_acorn_8x8.o font-objs-$(CONFIG_FONT_MINI_4x6) += font_mini_4x6.o -font-objs-$(CONFIG_FONT_RL) += font_rl.o font-objs += $(font-objs-y) diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c index e7802ff..3660e51 100644 --- a/drivers/video/console/fbcon.c +++ b/drivers/video/console/fbcon.c @@ -106,8 +106,7 @@ enum { FBCON_LOGO_DONTSHOW = -3 /* do not show the logo */ }; -struct display fb_display[MAX_NR_CONSOLES]; -EXPORT_SYMBOL(fb_display); +static struct display fb_display[MAX_NR_CONSOLES]; static signed char con2fb_map[MAX_NR_CONSOLES]; static signed char con2fb_map_boot[MAX_NR_CONSOLES]; @@ -653,13 +652,12 @@ static void set_blitting_type(struct vc_data *vc, struct fb_info *info, { struct fbcon_ops *ops = info->fbcon_par; + ops->p = (p) ? p : &fb_display[vc->vc_num]; + if ((info->flags & FBINFO_MISC_TILEBLITTING)) fbcon_set_tileops(vc, info, p, ops); else { - struct display *disp; - - disp = (p) ? p : &fb_display[vc->vc_num]; - fbcon_set_rotation(info, disp); + fbcon_set_rotation(info, ops->p); fbcon_set_bitops(ops); } } @@ -668,11 +666,10 @@ static void set_blitting_type(struct vc_data *vc, struct fb_info *info, struct display *p) { struct fbcon_ops *ops = info->fbcon_par; - struct display *disp; info->flags &= ~FBINFO_MISC_TILEBLITTING; - disp = (p) ? p : &fb_display[vc->vc_num]; - fbcon_set_rotation(info, disp); + ops->p = (p) ? p : &fb_display[vc->vc_num]; + fbcon_set_rotation(info, ops->p); fbcon_set_bitops(ops); } #endif /* CONFIG_MISC_TILEBLITTING */ @@ -2051,7 +2048,7 @@ static int fbcon_switch(struct vc_data *vc) struct fbcon_ops *ops; struct display *p = &fb_display[vc->vc_num]; struct fb_var_screeninfo var; - int i, prev_console; + int i, prev_console, charcnt = 256; info = registered_fb[con2fb_map[vc->vc_num]]; ops = info->fbcon_par; @@ -2106,7 +2103,8 @@ static int fbcon_switch(struct vc_data *vc) fb_set_var(info, &var); ops->var = info->var; - if (old_info != NULL && old_info != info) { + if (old_info != NULL && (old_info != info || + info->flags & FBINFO_MISC_ALWAYS_SETPAR)) { if (info->fbops->fb_set_par) info->fbops->fb_set_par(info); fbcon_del_cursor_timer(old_info); @@ -2123,6 +2121,13 @@ static int fbcon_switch(struct vc_data *vc) vc->vc_can_do_color = (fb_get_color_depth(&info->var, &info->fix)!=1); vc->vc_complement_mask = vc->vc_can_do_color ? 0x7700 : 0x0800; + + if (p->userfont) + charcnt = FNTCHARCNT(vc->vc_font.data); + + if (charcnt > 256) + vc->vc_complement_mask <<= 1; + updatescrollmode(p, info, vc); switch (p->scrollmode) { @@ -2142,8 +2147,12 @@ static int fbcon_switch(struct vc_data *vc) scrollback_max = 0; scrollback_current = 0; - ops->var.xoffset = ops->var.yoffset = p->yscroll = 0; - ops->update_start(info); + + if (!fbcon_is_inactive(vc, info)) { + ops->var.xoffset = ops->var.yoffset = p->yscroll = 0; + ops->update_start(info); + } + fbcon_set_palette(vc, color_table); fbcon_clear_margins(vc, 0); @@ -2187,11 +2196,14 @@ static int fbcon_blank(struct vc_data *vc, int blank, int mode_switch) ops->graphics = 1; if (!blank) { + if (info->fbops->fb_save_state) + info->fbops->fb_save_state(info); var.activate = FB_ACTIVATE_NOW | FB_ACTIVATE_FORCE; fb_set_var(info, &var); ops->graphics = 0; ops->var = info->var; - } + } else if (info->fbops->fb_restore_state) + info->fbops->fb_restore_state(info); } if (!fbcon_is_inactive(vc, info)) { @@ -2739,8 +2751,12 @@ static void fbcon_modechanged(struct fb_info *info) updatescrollmode(p, info, vc); scrollback_max = 0; scrollback_current = 0; - ops->var.xoffset = ops->var.yoffset = p->yscroll = 0; - ops->update_start(info); + + if (!fbcon_is_inactive(vc, info)) { + ops->var.xoffset = ops->var.yoffset = p->yscroll = 0; + ops->update_start(info); + } + fbcon_set_palette(vc, color_table); update_screen(vc); if (softback_buf) @@ -2777,8 +2793,13 @@ static void fbcon_set_all_vcs(struct fb_info *info) updatescrollmode(p, info, vc); scrollback_max = 0; scrollback_current = 0; - ops->var.xoffset = ops->var.yoffset = p->yscroll = 0; - ops->update_start(info); + + if (!fbcon_is_inactive(vc, info)) { + ops->var.xoffset = ops->var.yoffset = + p->yscroll = 0; + ops->update_start(info); + } + fbcon_set_palette(vc, color_table); update_screen(vc); if (softback_buf) diff --git a/drivers/video/console/fbcon.h b/drivers/video/console/fbcon.h index accfd7bd..6892e7f 100644 --- a/drivers/video/console/fbcon.h +++ b/drivers/video/console/fbcon.h @@ -52,8 +52,6 @@ struct display { struct fb_videomode *mode; }; -extern struct display fb_display[]; - struct fbcon_ops { void (*bmove)(struct vc_data *vc, struct fb_info *info, int sy, int sx, int dy, int dx, int height, int width); @@ -73,6 +71,7 @@ struct fbcon_ops { struct fb_var_screeninfo var; /* copy of the current fb_var_screeninfo */ struct timer_list cursor_timer; /* Cursor timer */ struct fb_cursor cursor_state; + struct display *p; int currcon; /* Current VC. */ int cursor_flash; int cursor_reset; diff --git a/drivers/video/console/fbcon_ccw.c b/drivers/video/console/fbcon_ccw.c index 680aaba..4952b66 100644 --- a/drivers/video/console/fbcon_ccw.c +++ b/drivers/video/console/fbcon_ccw.c @@ -34,7 +34,7 @@ static inline void ccw_update_attr(u8 *dst, u8 *src, int attribute, msk <<= (8 - mod); if (offset > mod) - set_bit(FBCON_BIT(7), (void *)&msk1); + msk1 |= 0x01; for (i = 0; i < vc->vc_font.width; i++) { for (j = 0; j < width; j++) { @@ -63,9 +63,9 @@ static inline void ccw_update_attr(u8 *dst, u8 *src, int attribute, static void ccw_bmove(struct vc_data *vc, struct fb_info *info, int sy, int sx, int dy, int dx, int height, int width) { - struct display *p = &fb_display[vc->vc_num]; + struct fbcon_ops *ops = info->fbcon_par; struct fb_copyarea area; - u32 vyres = GETVYRES(p->scrollmode, info); + u32 vyres = GETVYRES(ops->p->scrollmode, info); area.sx = sy * vc->vc_font.height; area.sy = vyres - ((sx + width) * vc->vc_font.width); @@ -80,10 +80,10 @@ static void ccw_bmove(struct vc_data *vc, struct fb_info *info, int sy, static void ccw_clear(struct vc_data *vc, struct fb_info *info, int sy, int sx, int height, int width) { - struct display *p = &fb_display[vc->vc_num]; + struct fbcon_ops *ops = info->fbcon_par; struct fb_fillrect region; int bgshift = (vc->vc_hi_font_mask) ? 13 : 12; - u32 vyres = GETVYRES(p->scrollmode, info); + u32 vyres = GETVYRES(ops->p->scrollmode, info); region.color = attr_bgcol_ec(bgshift,vc); region.dx = sy * vc->vc_font.height; @@ -131,7 +131,6 @@ static void ccw_putcs(struct vc_data *vc, struct fb_info *info, int fg, int bg) { struct fb_image image; - struct display *p = &fb_display[vc->vc_num]; struct fbcon_ops *ops = info->fbcon_par; u32 width = (vc->vc_font.height + 7)/8; u32 cellsize = width * vc->vc_font.width; @@ -141,7 +140,7 @@ static void ccw_putcs(struct vc_data *vc, struct fb_info *info, u32 cnt, pitch, size; u32 attribute = get_attribute(info, scr_readw(s)); u8 *dst, *buf = NULL; - u32 vyres = GETVYRES(p->scrollmode, info); + u32 vyres = GETVYRES(ops->p->scrollmode, info); if (!ops->fontbuffer) return; @@ -397,9 +396,8 @@ static void ccw_cursor(struct vc_data *vc, struct fb_info *info, int ccw_update_start(struct fb_info *info) { struct fbcon_ops *ops = info->fbcon_par; - struct display *p = &fb_display[ops->currcon]; u32 yoffset; - u32 vyres = GETVYRES(p->scrollmode, info); + u32 vyres = GETVYRES(ops->p->scrollmode, info); int err; yoffset = (vyres - info->var.yres) - ops->var.xoffset; diff --git a/drivers/video/console/fbcon_cw.c b/drivers/video/console/fbcon_cw.c index 6c6f3b6..6d92b84 100644 --- a/drivers/video/console/fbcon_cw.c +++ b/drivers/video/console/fbcon_cw.c @@ -49,9 +49,9 @@ static inline void cw_update_attr(u8 *dst, u8 *src, int attribute, static void cw_bmove(struct vc_data *vc, struct fb_info *info, int sy, int sx, int dy, int dx, int height, int width) { - struct display *p = &fb_display[vc->vc_num]; + struct fbcon_ops *ops = info->fbcon_par; struct fb_copyarea area; - u32 vxres = GETVXRES(p->scrollmode, info); + u32 vxres = GETVXRES(ops->p->scrollmode, info); area.sx = vxres - ((sy + height) * vc->vc_font.height); area.sy = sx * vc->vc_font.width; @@ -66,10 +66,10 @@ static void cw_bmove(struct vc_data *vc, struct fb_info *info, int sy, static void cw_clear(struct vc_data *vc, struct fb_info *info, int sy, int sx, int height, int width) { - struct display *p = &fb_display[vc->vc_num]; + struct fbcon_ops *ops = info->fbcon_par; struct fb_fillrect region; int bgshift = (vc->vc_hi_font_mask) ? 13 : 12; - u32 vxres = GETVXRES(p->scrollmode, info); + u32 vxres = GETVXRES(ops->p->scrollmode, info); region.color = attr_bgcol_ec(bgshift,vc); region.dx = vxres - ((sy + height) * vc->vc_font.height); @@ -117,7 +117,6 @@ static void cw_putcs(struct vc_data *vc, struct fb_info *info, int fg, int bg) { struct fb_image image; - struct display *p = &fb_display[vc->vc_num]; struct fbcon_ops *ops = info->fbcon_par; u32 width = (vc->vc_font.height + 7)/8; u32 cellsize = width * vc->vc_font.width; @@ -127,7 +126,7 @@ static void cw_putcs(struct vc_data *vc, struct fb_info *info, u32 cnt, pitch, size; u32 attribute = get_attribute(info, scr_readw(s)); u8 *dst, *buf = NULL; - u32 vxres = GETVXRES(p->scrollmode, info); + u32 vxres = GETVXRES(ops->p->scrollmode, info); if (!ops->fontbuffer) return; @@ -381,8 +380,7 @@ static void cw_cursor(struct vc_data *vc, struct fb_info *info, int cw_update_start(struct fb_info *info) { struct fbcon_ops *ops = info->fbcon_par; - struct display *p = &fb_display[ops->currcon]; - u32 vxres = GETVXRES(p->scrollmode, info); + u32 vxres = GETVXRES(ops->p->scrollmode, info); u32 xoffset; int err; diff --git a/drivers/video/console/fbcon_rotate.h b/drivers/video/console/fbcon_rotate.h index 90c6720..1b8f92f 100644 --- a/drivers/video/console/fbcon_rotate.h +++ b/drivers/video/console/fbcon_rotate.h @@ -21,21 +21,13 @@ (s == SCROLL_REDRAW || s == SCROLL_MOVE || !(i)->fix.xpanstep) ? \ (i)->var.xres : (i)->var.xres_virtual; }) -/* - * The bitmap is always big endian - */ -#if defined(__LITTLE_ENDIAN) -#define FBCON_BIT(b) (7 - (b)) -#else -#define FBCON_BIT(b) (b) -#endif static inline int pattern_test_bit(u32 x, u32 y, u32 pitch, const char *pat) { u32 tmp = (y * pitch) + x, index = tmp / 8, bit = tmp % 8; pat +=index; - return (test_bit(FBCON_BIT(bit), (void *)pat)); + return (*pat) & (0x80 >> bit); } static inline void pattern_set_bit(u32 x, u32 y, u32 pitch, char *pat) @@ -43,13 +35,14 @@ static inline void pattern_set_bit(u32 x, u32 y, u32 pitch, char *pat) u32 tmp = (y * pitch) + x, index = tmp / 8, bit = tmp % 8; pat += index; - set_bit(FBCON_BIT(bit), (void *)pat); + + (*pat) |= 0x80 >> bit; } static inline void rotate_ud(const char *in, char *out, u32 width, u32 height) { int i, j; - int shift = width % 8; + int shift = (8 - (width % 8)) & 7; width = (width + 7) & ~7; @@ -85,7 +78,7 @@ static inline void rotate_cw(const char *in, char *out, u32 width, u32 height) static inline void rotate_ccw(const char *in, char *out, u32 width, u32 height) { int i, j, h = height, w = width; - int shift = width % 8; + int shift = (8 - (width % 8)) & 7; width = (width + 7) & ~7; height = (height + 7) & ~7; diff --git a/drivers/video/console/fbcon_ud.c b/drivers/video/console/fbcon_ud.c index 2e1d9d4..9dd059e 100644 --- a/drivers/video/console/fbcon_ud.c +++ b/drivers/video/console/fbcon_ud.c @@ -48,10 +48,10 @@ static inline void ud_update_attr(u8 *dst, u8 *src, int attribute, static void ud_bmove(struct vc_data *vc, struct fb_info *info, int sy, int sx, int dy, int dx, int height, int width) { - struct display *p = &fb_display[vc->vc_num]; + struct fbcon_ops *ops = info->fbcon_par; struct fb_copyarea area; - u32 vyres = GETVYRES(p->scrollmode, info); - u32 vxres = GETVXRES(p->scrollmode, info); + u32 vyres = GETVYRES(ops->p->scrollmode, info); + u32 vxres = GETVXRES(ops->p->scrollmode, info); area.sy = vyres - ((sy + height) * vc->vc_font.height); area.sx = vxres - ((sx + width) * vc->vc_font.width); @@ -66,11 +66,11 @@ static void ud_bmove(struct vc_data *vc, struct fb_info *info, int sy, static void ud_clear(struct vc_data *vc, struct fb_info *info, int sy, int sx, int height, int width) { - struct display *p = &fb_display[vc->vc_num]; + struct fbcon_ops *ops = info->fbcon_par; struct fb_fillrect region; int bgshift = (vc->vc_hi_font_mask) ? 13 : 12; - u32 vyres = GETVYRES(p->scrollmode, info); - u32 vxres = GETVXRES(p->scrollmode, info); + u32 vyres = GETVYRES(ops->p->scrollmode, info); + u32 vxres = GETVXRES(ops->p->scrollmode, info); region.color = attr_bgcol_ec(bgshift,vc); region.dy = vyres - ((sy + height) * vc->vc_font.height); @@ -153,7 +153,6 @@ static void ud_putcs(struct vc_data *vc, struct fb_info *info, int fg, int bg) { struct fb_image image; - struct display *p = &fb_display[vc->vc_num]; struct fbcon_ops *ops = info->fbcon_par; u32 width = (vc->vc_font.width + 7)/8; u32 cellsize = width * vc->vc_font.height; @@ -163,8 +162,8 @@ static void ud_putcs(struct vc_data *vc, struct fb_info *info, u32 mod = vc->vc_font.width % 8, cnt, pitch, size; u32 attribute = get_attribute(info, scr_readw(s)); u8 *dst, *buf = NULL; - u32 vyres = GETVYRES(p->scrollmode, info); - u32 vxres = GETVXRES(p->scrollmode, info); + u32 vyres = GETVYRES(ops->p->scrollmode, info); + u32 vxres = GETVXRES(ops->p->scrollmode, info); if (!ops->fontbuffer) return; @@ -421,14 +420,15 @@ static void ud_cursor(struct vc_data *vc, struct fb_info *info, int ud_update_start(struct fb_info *info) { struct fbcon_ops *ops = info->fbcon_par; - struct display *p = &fb_display[ops->currcon]; - u32 xoffset, yoffset; - u32 vyres = GETVYRES(p->scrollmode, info); - u32 vxres = GETVXRES(p->scrollmode, info); + int xoffset, yoffset; + u32 vyres = GETVYRES(ops->p->scrollmode, info); + u32 vxres = GETVXRES(ops->p->scrollmode, info); int err; - xoffset = (vxres - info->var.xres) - ops->var.xoffset; - yoffset = (vyres - info->var.yres) - ops->var.yoffset; + xoffset = vxres - info->var.xres - ops->var.xoffset; + yoffset = vyres - info->var.yres - ops->var.yoffset; + if (yoffset < 0) + yoffset += vyres; ops->var.xoffset = xoffset; ops->var.yoffset = yoffset; err = fb_pan_display(info, &ops->var); diff --git a/drivers/video/console/font_rl.c b/drivers/video/console/font_rl.c deleted file mode 100644 index dfecc27..0000000 --- a/drivers/video/console/font_rl.c +++ /dev/null @@ -1,4374 +0,0 @@ - -/* This font is simply the "rl.fnt" console font from the kbd utility. - * Converted by Zack T Smith, fbui@comcast.net. - * The original binary file is covered under the GNU Public License. - */ - -#include <linux/font.h> - -#define FONTDATAMAX 4096 - -static unsigned char patterns[4096] = { -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x3c, -0x42, -0x81, -0xe7, -0xa5, -0x99, -0x81, -0x81, -0x99, -0x42, -0x3c, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x3c, -0x7e, -0xff, -0x99, -0xdb, -0xe7, -0xff, -0xff, -0xe7, -0x7e, -0x3c, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x6c, -0xfe, -0xfe, -0xfe, -0xfe, -0xfe, -0x7c, -0x38, -0x10, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x10, -0x38, -0x7c, -0xfe, -0x7c, -0x38, -0x10, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x38, -0x38, -0x10, -0xd6, -0xfe, -0xd6, -0x10, -0x10, -0x38, -0x7c, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x10, -0x38, -0x7c, -0xfe, -0xfe, -0x54, -0x10, -0x10, -0x38, -0x7c, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x18, -0x3c, -0x3c, -0x18, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0xff, -0xff, -0xff, -0xff, -0xff, -0xff, -0xe7, -0xc3, -0xc3, -0xe7, -0xff, -0xff, -0xff, -0xff, -0xff, -0xff, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x3c, -0x66, -0x42, -0x42, -0x66, -0x3c, -0x00, -0x00, -0x00, -0x00, -0x00, - -0xff, -0xff, -0xff, -0xff, -0xff, -0xc3, -0x99, -0xbd, -0xbd, -0x99, -0xc3, -0xff, -0xff, -0xff, -0xff, -0xff, - -0x00, -0x00, -0x0f, -0x07, -0x0d, -0x18, -0x78, -0xcc, -0xcc, -0xcc, -0xcc, -0x78, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x3c, -0x66, -0x66, -0x66, -0x3c, -0x18, -0x7e, -0x18, -0x18, -0x18, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x08, -0x0c, -0x0a, -0x0a, -0x0a, -0x08, -0x08, -0x08, -0x38, -0x78, -0x30, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x10, -0x18, -0x1c, -0x1e, -0x1e, -0x16, -0x12, -0x72, -0xf2, -0x62, -0x0e, -0x1e, -0x0c, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x10, -0x92, -0x54, -0x38, -0xfe, -0x38, -0x54, -0x92, -0x10, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x80, -0xc0, -0xe0, -0xb8, -0x8e, -0xb8, -0xe0, -0xc0, -0x80, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x02, -0x06, -0x0e, -0x3a, -0xe2, -0x3a, -0x0e, -0x06, -0x02, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x10, -0x38, -0x7c, -0xd6, -0x10, -0x10, -0x10, -0x10, -0xd6, -0x7c, -0x38, -0x10, -0x00, -0x00, - -0x00, -0x42, -0xe7, -0xe7, -0xe7, -0xe7, -0x42, -0x42, -0x42, -0x00, -0x66, -0x66, -0x66, -0x00, -0x00, -0x00, - -0x00, -0x7f, -0xca, -0xca, -0xca, -0xca, -0x7a, -0x0a, -0x0a, -0x0a, -0x0a, -0x0a, -0x1b, -0x00, -0x00, -0x00, - -0x00, -0x1e, -0x31, -0x78, -0xcc, -0xc6, -0xc3, -0x63, -0x33, -0x1e, -0x8c, -0x78, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0xfe, -0xfe, -0xfe, -0xfe, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x10, -0x38, -0x7c, -0xd6, -0x10, -0x10, -0x10, -0x10, -0xd6, -0x7c, -0x38, -0x10, -0xfe, -0x00, - -0x00, -0x00, -0x10, -0x38, -0x7c, -0xd6, -0x10, -0x10, -0x10, -0x10, -0x10, -0x10, -0x10, -0x10, -0x00, -0x00, - -0x00, -0x00, -0x10, -0x10, -0x10, -0x10, -0x10, -0x10, -0x10, -0x10, -0xd6, -0x7c, -0x38, -0x10, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x08, -0x0c, -0x06, -0xff, -0x06, -0x0c, -0x08, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x10, -0x30, -0x60, -0xff, -0x60, -0x30, -0x10, -0x00, -0x00, -0x00, -0x00, - -0x22, -0x44, -0x88, -0xcc, -0xee, -0x44, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x24, -0x42, -0xff, -0x42, -0x24, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x10, -0x38, -0x38, -0x6c, -0x6c, -0xc6, -0xfe, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0xfe, -0xc6, -0x6c, -0x6c, -0x38, -0x38, -0x10, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x18, -0x3c, -0x3c, -0x3c, -0x3c, -0x18, -0x18, -0x18, -0x10, -0x00, -0x18, -0x18, -0x00, -0x00, -0x00, - -0x22, -0x77, -0x33, -0x11, -0x22, -0x44, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x12, -0x12, -0x12, -0x7f, -0x24, -0x24, -0x24, -0xfe, -0x48, -0x48, -0x48, -0x00, -0x00, -0x00, - -0x10, -0x10, -0x7c, -0xd2, -0xd0, -0xd0, -0xd0, -0x7c, -0x16, -0x16, -0x16, -0x96, -0x7c, -0x10, -0x10, -0x00, - -0x00, -0x42, -0xbe, -0x44, -0x0c, -0x08, -0x18, -0x10, -0x30, -0x20, -0x64, -0x4a, -0xc4, -0x00, -0x00, -0x00, - -0x00, -0x38, -0x6c, -0x6c, -0x6c, -0x38, -0x37, -0x72, -0xdc, -0xcc, -0xcc, -0xcc, -0x77, -0x00, -0x00, -0x00, - -0x10, -0x38, -0x18, -0x08, -0x10, -0x20, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x04, -0x08, -0x10, -0x10, -0x30, -0x30, -0x30, -0x30, -0x30, -0x10, -0x10, -0x08, -0x04, -0x00, -0x00, - -0x00, -0x20, -0x10, -0x08, -0x08, -0x0c, -0x0c, -0x0c, -0x0c, -0x0c, -0x08, -0x08, -0x10, -0x20, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x44, -0x28, -0x38, -0xfe, -0x38, -0x28, -0x44, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x18, -0x18, -0x7e, -0x18, -0x18, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x10, -0x38, -0x18, -0x08, -0x10, -0x20, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x7e, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x10, -0x38, -0x10, -0x00, -0x00, -0x00, - -0x00, -0x06, -0x06, -0x0c, -0x0c, -0x18, -0x18, -0x30, -0x30, -0x60, -0x60, -0xc0, -0xc0, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x3c, -0x46, -0xc6, -0xc6, -0xc6, -0xc6, -0xc6, -0xc4, -0x78, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x08, -0x18, -0x78, -0x18, -0x18, -0x18, -0x18, -0x18, -0x7e, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x7c, -0x86, -0x06, -0x0c, -0x18, -0x20, -0x40, -0xc1, -0xfe, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x3c, -0x46, -0x04, -0x08, -0x1c, -0x06, -0x06, -0x06, -0x06, -0x0c, -0x70, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x04, -0x08, -0x10, -0x2c, -0x4c, -0x8c, -0x8c, -0xfe, -0x0c, -0x0c, -0x0c, -0x00, - -0x00, -0x00, -0x00, -0x02, -0x3c, -0x20, -0x20, -0x70, -0x0c, -0x06, -0x06, -0x06, -0x06, -0x0c, -0x70, -0x00, - -0x00, -0x00, -0x18, -0x20, -0x40, -0xc0, -0xdc, -0xc6, -0xc6, -0xc6, -0xc6, -0x44, -0x38, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x40, -0x7e, -0x82, -0x06, -0x04, -0x0c, -0x18, -0x18, -0x30, -0x30, -0x30, -0x30, -0x00, - -0x00, -0x00, -0x7c, -0xc6, -0xc6, -0x64, -0x38, -0x4c, -0xc6, -0xc6, -0xc6, -0xc6, -0x7c, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x38, -0x44, -0xc6, -0xc6, -0x76, -0x06, -0x06, -0x06, -0x04, -0x08, -0x30, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x10, -0x38, -0x10, -0x00, -0x00, -0x00, -0x10, -0x38, -0x10, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x10, -0x38, -0x10, -0x00, -0x00, -0x00, -0x10, -0x38, -0x18, -0x08, -0x10, -0x20, - -0x00, -0x06, -0x0c, -0x18, -0x30, -0x60, -0xa0, -0xa0, -0x60, -0x30, -0x18, -0x0c, -0x06, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x7e, -0x00, -0x00, -0x7e, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x60, -0x30, -0x18, -0x0c, -0x06, -0x05, -0x05, -0x06, -0x0c, -0x18, -0x30, -0x60, -0x00, -0x00, -0x00, - -0x00, -0x7c, -0x86, -0xc6, -0x06, -0x04, -0x08, -0x10, -0x10, -0x18, -0x00, -0x18, -0x18, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x3c, -0x46, -0xc6, -0xce, -0xd6, -0xd6, -0xd6, -0xdc, -0xc0, -0xc4, -0x78, -0x00, -0x00, -0x00, - -0x00, -0x18, -0x18, -0x18, -0x3c, -0x2c, -0x2c, -0x2c, -0x7e, -0x46, -0x46, -0x46, -0xef, -0x00, -0x00, -0x00, - -0x00, -0xfc, -0x66, -0x66, -0x66, -0x66, -0x7c, -0x66, -0x66, -0x66, -0x66, -0x66, -0xfc, -0x00, -0x00, -0x00, - -0x00, -0x3a, -0x66, -0xc2, -0xc0, -0xc0, -0xc0, -0xc0, -0xc0, -0xc0, -0xc0, -0x62, -0x3c, -0x00, -0x00, -0x00, - -0x00, -0xfc, -0x66, -0x63, -0x63, -0x63, -0x63, -0x63, -0x63, -0x63, -0x63, -0x66, -0xfc, -0x00, -0x00, -0x00, - -0x00, -0xff, -0x61, -0x60, -0x60, -0x64, -0x7c, -0x64, -0x60, -0x60, -0x60, -0x61, -0xfe, -0x00, -0x00, -0x00, - -0x00, -0xff, -0x61, -0x61, -0x60, -0x64, -0x7c, -0x64, -0x60, -0x60, -0x60, -0x60, -0xf0, -0x00, -0x00, -0x00, - -0x00, -0x3a, -0x66, -0xc2, -0xc0, -0xc0, -0xc0, -0xcf, -0xc6, -0xc6, -0xc6, -0x66, -0x38, -0x00, -0x00, -0x00, - -0x00, -0xf7, -0x62, -0x62, -0x62, -0x62, -0x7e, -0x62, -0x62, -0x62, -0x62, -0x62, -0xf7, -0x00, -0x00, -0x00, - -0x00, -0x3c, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x3c, -0x00, -0x00, -0x00, - -0x00, -0x1e, -0x0c, -0x0c, -0x0c, -0x0c, -0x0c, -0x0c, -0x0c, -0x0c, -0x0c, -0x0c, -0x0c, -0x0c, -0x08, -0xf0, - -0x00, -0xf7, -0x64, -0x6c, -0x68, -0x68, -0x78, -0x6c, -0x6c, -0x6c, -0x66, -0x66, -0xf7, -0x00, -0x00, -0x00, - -0x00, -0xf8, -0x60, -0x60, -0x60, -0x60, -0x60, -0x60, -0x60, -0x60, -0x60, -0x61, -0xfe, -0x00, -0x00, -0x00, - -0x00, -0xc3, -0x66, -0x76, -0x7e, -0x56, -0x56, -0x46, -0x46, -0x46, -0x46, -0x46, -0xef, -0x00, -0x00, -0x00, - -0x00, -0xe7, -0x62, -0x62, -0x72, -0x52, -0x5a, -0x4a, -0x4e, -0x46, -0x46, -0x42, -0xe2, -0x00, -0x00, -0x00, - -0x00, -0x3c, -0x66, -0xc3, -0xc3, -0xc3, -0xc3, -0xc3, -0xc3, -0xc3, -0xc3, -0x66, -0x3c, -0x00, -0x00, -0x00, - -0x00, -0xfc, -0x66, -0x66, -0x66, -0x66, -0x6c, -0x60, -0x60, -0x60, -0x60, -0x60, -0xf0, -0x00, -0x00, -0x00, - -0x00, -0x3c, -0x66, -0xc3, -0xc3, -0xc3, -0xc3, -0xc3, -0xc3, -0xc3, -0xc3, -0x66, -0x3c, -0x10, -0x39, -0x0e, - -0x00, -0xfc, -0x66, -0x66, -0x66, -0x66, -0x7c, -0x6c, -0x66, -0x66, -0x66, -0x66, -0xf3, -0x00, -0x00, -0x00, - -0x00, -0x7a, -0xc6, -0xc2, -0xc0, -0x70, -0x3c, -0x0e, -0x06, -0x06, -0x86, -0xc6, -0xbc, -0x00, -0x00, -0x00, - -0x00, -0xff, -0x99, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x3c, -0x00, -0x00, -0x00, - -0x00, -0xf7, -0x62, -0x62, -0x62, -0x62, -0x62, -0x62, -0x62, -0x62, -0x62, -0x62, -0x3c, -0x00, -0x00, -0x00, - -0x00, -0xf7, -0x62, -0x62, -0x62, -0x76, -0x34, -0x34, -0x34, -0x3c, -0x18, -0x18, -0x18, -0x00, -0x00, -0x00, - -0x00, -0xf7, -0x62, -0x62, -0x62, -0x62, -0x6a, -0x6a, -0x6a, -0x6a, -0x7e, -0x7e, -0x34, -0x00, -0x00, -0x00, - -0x00, -0xf7, -0x62, -0x62, -0x34, -0x34, -0x18, -0x18, -0x2c, -0x2c, -0x46, -0x46, -0xef, -0x00, -0x00, -0x00, - -0x00, -0xf7, -0x62, -0x62, -0x62, -0x34, -0x34, -0x18, -0x18, -0x18, -0x18, -0x18, -0x3c, -0x00, -0x00, -0x00, - -0x00, -0x7f, -0x46, -0x86, -0x0c, -0x0c, -0x18, -0x18, -0x30, -0x30, -0x61, -0x62, -0xfe, -0x00, -0x00, -0x00, - -0x00, -0x3c, -0x30, -0x30, -0x30, -0x30, -0x30, -0x30, -0x30, -0x30, -0x30, -0x30, -0x3c, -0x00, -0x00, -0x00, - -0x00, -0xc0, -0xc0, -0x60, -0x60, -0x30, -0x30, -0x18, -0x18, -0x0c, -0x0c, -0x06, -0x06, -0x00, -0x00, -0x00, - -0x00, -0x3c, -0x0c, -0x0c, -0x0c, -0x0c, -0x0c, -0x0c, -0x0c, -0x0c, -0x0c, -0x0c, -0x3c, -0x00, -0x00, -0x00, - -0x00, -0x10, -0x38, -0x4c, -0x86, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0xff, -0x00, -0x00, - -0x00, -0x18, -0x20, -0x30, -0x38, -0x10, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x78, -0x8c, -0x0c, -0x3c, -0xcc, -0xcc, -0xcd, -0x76, -0x00, -0x00, -0x00, - -0x00, -0x20, -0xe0, -0x60, -0x60, -0x6c, -0x76, -0x66, -0x66, -0x66, -0x66, -0x76, -0x6c, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x3c, -0x66, -0x60, -0x60, -0x60, -0x60, -0x62, -0x3c, -0x00, -0x00, -0x00, - -0x00, -0x04, -0x1c, -0x0c, -0x0c, -0x6c, -0xdc, -0xcc, -0xcc, -0xcc, -0xcc, -0xdc, -0x66, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x3c, -0x66, -0x7e, -0x60, -0x60, -0x60, -0x62, -0x3c, -0x00, -0x00, -0x00, - -0x00, -0x1e, -0x31, -0x33, -0x30, -0x30, -0x78, -0x30, -0x30, -0x30, -0x30, -0x30, -0x78, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x7b, -0xce, -0xcc, -0xcc, -0xcc, -0x78, -0x60, -0x7c, -0x86, -0xc6, -0x7c, - -0x00, -0x20, -0xe0, -0x60, -0x60, -0x6c, -0x76, -0x66, -0x66, -0x66, -0x66, -0x66, -0xf7, -0x00, -0x00, -0x00, - -0x00, -0x10, -0x38, -0x10, -0x00, -0x18, -0x38, -0x18, -0x18, -0x18, -0x18, -0x18, -0x3c, -0x00, -0x00, -0x00, - -0x00, -0x08, -0x1c, -0x08, -0x00, -0x0c, -0x1c, -0x0c, -0x0c, -0x0c, -0x0c, -0x0c, -0x6c, -0x4c, -0x38, -0x00, - -0x00, -0x20, -0xe0, -0x60, -0x60, -0x67, -0x66, -0x6c, -0x78, -0x6c, -0x6c, -0x66, -0xe7, -0x00, -0x00, -0x00, - -0x00, -0x08, -0x38, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x3c, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x6a, -0xfe, -0x6a, -0x6a, -0x6a, -0x62, -0x62, -0xf7, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x5c, -0xf6, -0x66, -0x66, -0x66, -0x66, -0x66, -0xf7, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x3c, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x3c, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x5c, -0xe6, -0x66, -0x66, -0x66, -0x66, -0x66, -0x7c, -0x60, -0x60, -0xf0, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x76, -0xcc, -0xcc, -0xcc, -0xcc, -0xcc, -0xcc, -0x7c, -0x0c, -0x0c, -0x1e, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x5e, -0xf6, -0x60, -0x60, -0x60, -0x60, -0x60, -0xf0, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x7a, -0xc6, -0x72, -0x1c, -0x06, -0x86, -0xc6, -0xbc, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x10, -0x30, -0x7c, -0x30, -0x30, -0x30, -0x30, -0x30, -0x34, -0x18, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0xee, -0x66, -0x66, -0x66, -0x66, -0x66, -0x67, -0x3a, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0xf7, -0x62, -0x76, -0x34, -0x34, -0x3c, -0x18, -0x18, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0xf7, -0x62, -0x6a, -0x6a, -0x6a, -0x6a, -0x7e, -0x24, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0xf7, -0x62, -0x34, -0x18, -0x2c, -0x46, -0x46, -0xef, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0xf7, -0x62, -0x62, -0x34, -0x34, -0x18, -0x18, -0x18, -0x10, -0xb0, -0xe0, - -0x00, -0x00, -0x00, -0x00, -0x00, -0xfe, -0x8c, -0x18, -0x30, -0x30, -0x60, -0xc2, -0xfe, -0x00, -0x00, -0x00, - -0x00, -0x0e, -0x18, -0x10, -0x10, -0x08, -0x70, -0x70, -0x08, -0x10, -0x10, -0x18, -0x0e, -0x00, -0x00, -0x00, - -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x00, -0x00, - -0x00, -0x70, -0x18, -0x08, -0x08, -0x10, -0x0e, -0x0e, -0x10, -0x08, -0x08, -0x18, -0x70, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x76, -0xdc, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x10, -0x38, -0x6c, -0xc6, -0xc6, -0xc6, -0xfe, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x3a, -0x66, -0xc2, -0xc0, -0xc0, -0xc0, -0xc0, -0xc0, -0x62, -0x3c, -0x18, -0x0c, -0x24, -0x18, - -0x00, -0x00, -0x66, -0x00, -0x00, -0xee, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x3b, -0x00, -0x00, -0x00, - -0x00, -0x0c, -0x18, -0x20, -0x00, -0x3c, -0x66, -0x7e, -0x60, -0x60, -0x60, -0x62, -0x3c, -0x00, -0x00, -0x00, - -0x00, -0x30, -0x58, -0x8c, -0x00, -0x78, -0x8c, -0x0c, -0x3c, -0xcc, -0xcc, -0xcd, -0x76, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x66, -0x00, -0x00, -0x78, -0x8c, -0x0c, -0x3c, -0xcc, -0xcc, -0xcd, -0x76, -0x00, -0x00, -0x00, - -0x00, -0x30, -0x18, -0x04, -0x00, -0x78, -0x8c, -0x0c, -0x3c, -0xcc, -0xcc, -0xcd, -0x76, -0x00, -0x00, -0x00, - -0x38, -0x44, -0x44, -0x38, -0x00, -0x78, -0x8c, -0x0c, -0x3c, -0xcc, -0xcc, -0xcd, -0x76, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x3c, -0x66, -0x60, -0x60, -0x60, -0x60, -0x62, -0x3c, -0x08, -0x24, -0x18, - -0x00, -0x18, -0x2c, -0x46, -0x00, -0x3c, -0x66, -0x7e, -0x60, -0x60, -0x60, -0x62, -0x3c, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x66, -0x00, -0x00, -0x3c, -0x66, -0x7e, -0x60, -0x60, -0x60, -0x62, -0x3c, -0x00, -0x00, -0x00, - -0x00, -0x30, -0x18, -0x04, -0x00, -0x3c, -0x66, -0x7e, -0x60, -0x60, -0x60, -0x62, -0x3c, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x66, -0x00, -0x00, -0x38, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x3c, -0x00, -0x00, -0x00, - -0x00, -0x18, -0x2c, -0x46, -0x00, -0x38, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x3c, -0x00, -0x00, -0x00, - -0x00, -0x60, -0x30, -0x08, -0x00, -0x38, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x3c, -0x00, -0x00, -0x00, - -0x66, -0x18, -0x18, -0x18, -0x3c, -0x2c, -0x2c, -0x2c, -0x7e, -0x46, -0x46, -0x46, -0xef, -0x00, -0x00, -0x00, - -0x18, -0x24, -0x18, -0x18, -0x3c, -0x2c, -0x2c, -0x2c, -0x7e, -0x46, -0x46, -0x46, -0xef, -0x00, -0x00, -0x00, - -0x0c, -0x18, -0xff, -0x61, -0x60, -0x60, -0x64, -0x7c, -0x64, -0x60, -0x60, -0x61, -0xfe, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x76, -0x9b, -0x1b, -0x3f, -0xd8, -0xd8, -0xd9, -0x6e, -0x00, -0x00, -0x00, - -0x00, -0x1f, -0x1d, -0x1d, -0x3c, -0x2c, -0x2e, -0x2c, -0x7c, -0x4c, -0x4c, -0x4d, -0xef, -0x00, -0x00, -0x00, - -0x00, -0x18, -0x2c, -0x46, -0x00, -0x3c, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x3c, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x66, -0x00, -0x00, -0x3c, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x3c, -0x00, -0x00, -0x00, - -0x00, -0x30, -0x18, -0x04, -0x00, -0x3c, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x3c, -0x00, -0x00, -0x00, - -0x00, -0x18, -0x2c, -0x46, -0x00, -0xee, -0x66, -0x66, -0x66, -0x66, -0x66, -0x67, -0x3a, -0x00, -0x00, -0x00, - -0x00, -0x30, -0x18, -0x04, -0x00, -0xee, -0x66, -0x66, -0x66, -0x66, -0x66, -0x67, -0x3a, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x66, -0x00, -0x00, -0xf7, -0x62, -0x62, -0x34, -0x34, -0x18, -0x18, -0x18, -0x10, -0xb0, -0xe0, - -0x66, -0x00, -0x3c, -0x66, -0xc3, -0xc3, -0xc3, -0xc3, -0xc3, -0xc3, -0xc3, -0x66, -0x3c, -0x00, -0x00, -0x00, - -0x66, -0x00, -0xf7, -0x62, -0x62, -0x62, -0x62, -0x62, -0x62, -0x62, -0x62, -0x62, -0x3c, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x10, -0x10, -0x10, -0x7c, -0xc6, -0xc0, -0xc0, -0xc0, -0xc0, -0xc2, -0x7c, -0x10, -0x10, -0x00, - -0x00, -0x38, -0x64, -0x6c, -0x60, -0x60, -0xf0, -0x60, -0x60, -0x60, -0x60, -0x66, -0xfc, -0x00, -0x00, -0x00, - -0x00, -0x81, -0xc3, -0x66, -0x3c, -0x18, -0xff, -0x18, -0x18, -0xff, -0x18, -0x18, -0x18, -0x00, -0x00, -0x00, - -0x00, -0xfe, -0x63, -0x63, -0x63, -0x63, -0x6e, -0x60, -0x64, -0x6e, -0x64, -0x64, -0xf5, -0x06, -0x00, -0x00, - -0x00, -0x0e, -0x19, -0x1b, -0x18, -0x18, -0x3c, -0x18, -0x18, -0x18, -0x18, -0xd8, -0x98, -0x70, -0x00, -0x00, - -0x00, -0x0c, -0x18, -0x20, -0x00, -0x78, -0x8c, -0x0c, -0x3c, -0xcc, -0xcc, -0xcd, -0x76, -0x00, -0x00, -0x00, - -0x00, -0x06, -0x0c, -0x10, -0x00, -0x38, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x3c, -0x00, -0x00, -0x00, - -0x00, -0x0c, -0x18, -0x20, -0x00, -0x3c, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x3c, -0x00, -0x00, -0x00, - -0x00, -0x0c, -0x18, -0x20, -0x00, -0xee, -0x66, -0x66, -0x66, -0x66, -0x66, -0x67, -0x3a, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x32, -0x4c, -0x00, -0x5c, -0xf6, -0x66, -0x66, -0x66, -0x66, -0x66, -0xf7, -0x00, -0x00, -0x00, - -0x32, -0x4c, -0x00, -0xe7, -0x72, -0x52, -0x5a, -0x4a, -0x4e, -0x46, -0x46, -0x42, -0xe2, -0x00, -0x00, -0x00, - -0x00, -0x78, -0x8c, -0x0c, -0x3c, -0xcc, -0xcc, -0xcd, -0x76, -0x00, -0xfe, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x3c, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x3c, -0x00, -0x7e, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x30, -0x30, -0x00, -0x30, -0x10, -0x10, -0x20, -0x40, -0xc0, -0xc6, -0xc2, -0x7c, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0xfe, -0xc0, -0xc0, -0xc0, -0xc0, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0xfe, -0x06, -0x06, -0x06, -0x06, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x20, -0xe0, -0x63, -0x66, -0xfc, -0x18, -0x30, -0x60, -0xce, -0x93, -0x06, -0x0c, -0x1f, -0x00, -0x00, - -0x00, -0x20, -0xe0, -0x63, -0x66, -0xfc, -0x18, -0x30, -0x64, -0xc8, -0x96, -0x3f, -0x06, -0x06, -0x00, -0x00, - -0x00, -0x18, -0x18, -0x00, -0x08, -0x18, -0x18, -0x18, -0x3c, -0x3c, -0x3c, -0x3c, -0x18, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x36, -0x6c, -0xd8, -0xd8, -0x6c, -0x36, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0xd8, -0x6c, -0x36, -0x36, -0x6c, -0xd8, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x82, -0x10, -0x82, -0x10, -0x82, -0x10, -0x82, -0x10, -0x82, -0x10, -0x82, -0x10, -0x82, -0x10, -0x82, -0x10, - -0x00, -0x95, -0x00, -0xa9, -0x00, -0x95, -0x00, -0xa9, -0x00, -0x95, -0x00, -0xa9, -0x00, -0x95, -0x00, -0xa9, - -0x92, -0x49, -0x92, -0x49, -0x92, -0x49, -0x92, -0x49, -0x92, -0x49, -0x92, -0x49, -0x92, -0x49, -0x92, -0x49, - -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, - -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0xf8, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, - -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0xf8, -0x18, -0x18, -0xf8, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, - -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0xe6, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0xfe, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0xf8, -0x18, -0x18, -0xf8, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, - -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0xe6, -0x06, -0x06, -0xe6, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, - -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0xfe, -0x06, -0x06, -0xe6, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, - -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0xe6, -0x06, -0x06, -0xfe, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0xfe, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0xf8, -0x18, -0x18, -0xf8, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0xf8, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, - -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x1f, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0xff, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0xff, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, - -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x1f, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0xff, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0xff, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, - -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x1f, -0x18, -0x18, -0x1f, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, - -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x67, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, - -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x67, -0x60, -0x60, -0x7f, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x7f, -0x60, -0x60, -0x67, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, - -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0xe7, -0x00, -0x00, -0xff, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0xff, -0x00, -0x00, -0xe7, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, - -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x67, -0x60, -0x60, -0x67, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0xff, -0x00, -0x00, -0xff, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0xe7, -0x00, -0x00, -0xe7, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, - -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0xff, -0x00, -0x00, -0xff, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0xff, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0xff, -0x00, -0x00, -0xff, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0xff, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, - -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x7f, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x1f, -0x18, -0x18, -0x1f, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x1f, -0x18, -0x18, -0x1f, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x7f, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, - -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0xff, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, -0x66, - -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0xff, -0x00, -0x00, -0xff, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, - -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0xf8, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x1f, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, - -0xff, -0xff, -0xff, -0xff, -0xff, -0xff, -0xff, -0xff, -0xff, -0xff, -0xff, -0xff, -0xff, -0xff, -0xff, -0xff, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0xff, -0xff, -0xff, -0xff, -0xff, -0xff, -0xff, -0xff, - -0xf0, -0xf0, -0xf0, -0xf0, -0xf0, -0xf0, -0xf0, -0xf0, -0xf0, -0xf0, -0xf0, -0xf0, -0xf0, -0xf0, -0xf0, -0xf0, - -0x0f, -0x0f, -0x0f, -0x0f, -0x0f, -0x0f, -0x0f, -0x0f, -0x0f, -0x0f, -0x0f, -0x0f, -0x0f, -0x0f, -0x0f, -0x0f, - -0xff, -0xff, -0xff, -0xff, -0xff, -0xff, -0xff, -0xff, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x77, -0xcc, -0xcc, -0xcc, -0xcc, -0xde, -0x73, -0x00, -0x00, -0x00, - -0x00, -0x7c, -0xc6, -0xc6, -0xc6, -0xc4, -0xc8, -0xc4, -0xc6, -0xc6, -0xc6, -0xc6, -0xdc, -0xc0, -0xc0, -0x00, - -0x00, -0xff, -0x61, -0x60, -0x60, -0x60, -0x60, -0x60, -0x60, -0x60, -0x60, -0x60, -0xf0, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x01, -0x7e, -0xa4, -0x24, -0x2c, -0x6c, -0x6c, -0x6c, -0x48, -0x00, -0x00, -0x00, - -0x00, -0xff, -0xc1, -0x60, -0x30, -0x18, -0x0c, -0x18, -0x30, -0x60, -0xc0, -0xc1, -0xfe, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x7f, -0xc8, -0xc8, -0xc8, -0xc8, -0xc8, -0xc8, -0x70, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x22, -0x66, -0x66, -0x66, -0x66, -0x66, -0x7c, -0x60, -0x60, -0x60, -0xc0, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x76, -0xdc, -0x18, -0x18, -0x18, -0x18, -0x18, -0x10, -0x00, -0x00, -0x00, - -0x00, -0x38, -0x10, -0x7c, -0xd6, -0xd6, -0xd6, -0xd6, -0xd6, -0xd6, -0x7c, -0x10, -0x38, -0x00, -0x00, -0x00, - -0x00, -0x38, -0x6c, -0xc6, -0xc6, -0xc6, -0xfe, -0xc6, -0xc6, -0xc6, -0xc6, -0x6c, -0x38, -0x00, -0x00, -0x00, - -0x00, -0x3c, -0x66, -0xc3, -0xc3, -0xc3, -0xc3, -0xc3, -0x66, -0x24, -0x24, -0xa5, -0xe7, -0x00, -0x00, -0x00, - -0x00, -0x1e, -0x31, -0x30, -0x18, -0x0c, -0x3e, -0x66, -0x66, -0x66, -0x66, -0x66, -0x3c, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x6e, -0xff, -0x99, -0x99, -0x99, -0x99, -0xff, -0x76, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x02, -0x04, -0x7c, -0xca, -0x92, -0xa6, -0x7c, -0x40, -0x80, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x1c, -0x30, -0x60, -0x60, -0x60, -0x7c, -0x60, -0x60, -0x60, -0x60, -0x30, -0x1c, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x7c, -0xc6, -0xc6, -0xc6, -0xc6, -0xc6, -0xc6, -0xc6, -0xc6, -0xc6, -0xc6, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0xfe, -0x00, -0x00, -0x00, -0x7c, -0x00, -0x00, -0x00, -0xfe, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x18, -0x18, -0x7e, -0x18, -0x18, -0x00, -0x00, -0x7e, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x30, -0x18, -0x0c, -0x06, -0x0c, -0x18, -0x30, -0x00, -0x7e, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x0c, -0x18, -0x30, -0x60, -0x30, -0x18, -0x0c, -0x00, -0x7e, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x0e, -0x19, -0x1b, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, - -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0x18, -0xd8, -0x98, -0x70, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x18, -0x18, -0x00, -0x7e, -0x00, -0x18, -0x18, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x76, -0xdc, -0x00, -0x00, -0x76, -0xdc, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x38, -0x44, -0x44, -0x44, -0x38, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x18, -0x18, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x18, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x07, -0x06, -0x06, -0x0c, -0x0c, -0x08, -0x98, -0xd0, -0xf0, -0x60, -0x20, -0x00, -0x00, -0x00, - -0x00, -0xcc, -0x76, -0x66, -0x66, -0x66, -0x66, -0xf7, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x70, -0x98, -0x18, -0x30, -0x60, -0x88, -0xf8, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x7c, -0x64, -0x64, -0x64, -0x64, -0x64, -0x7c, -0x00, -0x00, -0x00, -0x00, - -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, -0x00, - -}; - - -const struct font_desc font_rl = { - RL_IDX, - "RomanLarge", - 8, - 16, - patterns, - -1 -}; diff --git a/drivers/video/console/fonts.c b/drivers/video/console/fonts.c index 9be83be..4fd07d9 100644 --- a/drivers/video/console/fonts.c +++ b/drivers/video/console/fonts.c @@ -64,10 +64,6 @@ static const struct font_desc *fonts[] = { #undef NO_FONTS &font_mini_4x6, #endif -#ifdef CONFIG_FONT_RL -#undef NO_FONTS - &font_rl, -#endif }; #define num_fonts (sizeof(fonts)/sizeof(*fonts)) diff --git a/drivers/video/console/vgacon.c b/drivers/video/console/vgacon.c index 274f905..167de39 100644 --- a/drivers/video/console/vgacon.c +++ b/drivers/video/console/vgacon.c @@ -966,6 +966,7 @@ static int vgacon_adjust_height(struct vc_data *vc, unsigned fontheight) outb_p(0x12, vga_video_port_reg); /* Vertical display limit */ outb_p(vde, vga_video_port_val); spin_unlock_irq(&vga_lock); + vga_video_font_height = fontheight; for (i = 0; i < MAX_NR_CONSOLES; i++) { struct vc_data *c = vc_cons[i].d; diff --git a/drivers/video/cyber2000fb.c b/drivers/video/cyber2000fb.c index c589d23..a9300f9 100644 --- a/drivers/video/cyber2000fb.c +++ b/drivers/video/cyber2000fb.c @@ -1512,7 +1512,7 @@ static int cyberpro_pci_enable_mmio(struct cfb_info *cfb) * I/O cycles storing into a reserved memory space at * physical address 0x3000000 */ - unsigned char *iop; + unsigned char __iomem *iop; iop = ioremap(0x3000000, 0x5000); if (iop == NULL) { @@ -1526,7 +1526,7 @@ static int cyberpro_pci_enable_mmio(struct cfb_info *cfb) writeb(EXT_BIU_MISC, iop + 0x3ce); writeb(EXT_BIU_MISC_LIN_ENABLE, iop + 0x3cf); - iounmap((void *)iop); + iounmap(iop); #else /* * Most other machine types are "normal", so diff --git a/drivers/video/dnfb.c b/drivers/video/dnfb.c index 957a3ad..5abd3cb 100644 --- a/drivers/video/dnfb.c +++ b/drivers/video/dnfb.c @@ -227,9 +227,8 @@ void dnfb_copyarea(struct fb_info *info, const struct fb_copyarea *area) * Initialization */ -static int __devinit dnfb_probe(struct device *device) +static int __devinit dnfb_probe(struct platform_device *dev) { - struct platform_device *dev = to_platform_device(device); struct fb_info *info; int err = 0; @@ -257,7 +256,7 @@ static int __devinit dnfb_probe(struct device *device) framebuffer_release(info); return err; } - dev_set_drvdata(&dev->dev, info); + platform_set_drvdata(dev, info); /* now we have registered we can safely setup the hardware */ out_8(AP_CONTROL_3A, RESET_CREG); @@ -271,10 +270,11 @@ static int __devinit dnfb_probe(struct device *device) return err; } -static struct device_driver dnfb_driver = { - .name = "dnfb", - .bus = &platform_bus_type, +static struct platform_driver dnfb_driver = { .probe = dnfb_probe, + .driver = { + .name = "dnfb", + }, }; static struct platform_device dnfb_device = { @@ -288,12 +288,12 @@ int __init dnfb_init(void) if (fb_get_options("dnfb", NULL)) return -ENODEV; - ret = driver_register(&dnfb_driver); + ret = platform_driver_register(&dnfb_driver); if (!ret) { ret = platform_device_register(&dnfb_device); if (ret) - driver_unregister(&dnfb_driver); + platform_driver_unregister(&dnfb_driver); } return ret; } diff --git a/drivers/video/epson1355fb.c b/drivers/video/epson1355fb.c index 6a81a1d..3b0e713 100644 --- a/drivers/video/epson1355fb.c +++ b/drivers/video/epson1355fb.c @@ -609,9 +609,9 @@ static void epson1355fb_platform_release(struct device *device) { } -static int epson1355fb_remove(struct device *device) +static int epson1355fb_remove(struct platform_device *dev) { - struct fb_info *info = dev_get_drvdata(device); + struct fb_info *info = platform_get_drvdata(dev); struct epson1355_par *par = info->par; backlight_enable(0); @@ -632,9 +632,8 @@ static int epson1355fb_remove(struct device *device) return 0; } -int __init epson1355fb_probe(struct device *device) +int __init epson1355fb_probe(struct platform_device *dev) { - struct platform_device *dev = to_platform_device(device); struct epson1355_par *default_par; struct fb_info *info; u8 revision; @@ -713,7 +712,7 @@ int __init epson1355fb_probe(struct device *device) /* * Our driver data. */ - dev_set_drvdata(&dev->dev, info); + platform_set_drvdata(dev, info); printk(KERN_INFO "fb%d: %s frame buffer device\n", info->node, info->fix.id); @@ -721,15 +720,16 @@ int __init epson1355fb_probe(struct device *device) return 0; bail: - epson1355fb_remove(device); + epson1355fb_remove(dev); return rc; } -static struct device_driver epson1355fb_driver = { - .name = "epson1355fb", - .bus = &platform_bus_type, +static struct platform_driver epson1355fb_driver = { .probe = epson1355fb_probe, .remove = epson1355fb_remove, + .driver = { + .name = "epson1355fb", + }, }; static struct platform_device epson1355fb_device = { @@ -747,11 +747,11 @@ int __init epson1355fb_init(void) if (fb_get_options("epson1355fb", NULL)) return -ENODEV; - ret = driver_register(&epson1355fb_driver); + ret = platform_driver_register(&epson1355fb_driver); if (!ret) { ret = platform_device_register(&epson1355fb_device); if (ret) - driver_unregister(&epson1355fb_driver); + platform_driver_unregister(&epson1355fb_driver); } return ret; } @@ -762,7 +762,7 @@ module_init(epson1355fb_init); static void __exit epson1355fb_exit(void) { platform_device_unregister(&epson1355fb_device); - driver_unregister(&epson1355fb_driver); + platform_driver_unregister(&epson1355fb_driver); } /* ------------------------------------------------------------------------- */ diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c index 9f18009..10dfdf0 100644 --- a/drivers/video/fbmem.c +++ b/drivers/video/fbmem.c @@ -452,13 +452,17 @@ int fb_prepare_logo(struct fb_info *info, int rotate) /* Return if no suitable logo was found */ fb_logo.logo = fb_find_logo(depth); + + if (!fb_logo.logo) { + return 0; + } if (rotate == FB_ROTATE_UR || rotate == FB_ROTATE_UD) yres = info->var.yres; else yres = info->var.xres; - if (fb_logo.logo && fb_logo.logo->height > yres) { + if (fb_logo.logo->height > yres) { fb_logo.logo = NULL; return 0; } @@ -718,14 +722,30 @@ static void try_to_load(int fb) int fb_pan_display(struct fb_info *info, struct fb_var_screeninfo *var) { + struct fb_fix_screeninfo *fix = &info->fix; int xoffset = var->xoffset; int yoffset = var->yoffset; - int err; + int err = 0, yres = info->var.yres; + + if (var->yoffset > 0) { + if (var->vmode & FB_VMODE_YWRAP) { + if (!fix->ywrapstep || (var->yoffset % fix->ywrapstep)) + err = -EINVAL; + else + yres = 0; + } else if (!fix->ypanstep || (var->yoffset % fix->ypanstep)) + err = -EINVAL; + } + + if (var->xoffset > 0 && (!fix->xpanstep || + (var->xoffset % fix->xpanstep))) + err = -EINVAL; + + if (err || !info->fbops->fb_pan_display || xoffset < 0 || + yoffset < 0 || var->yoffset + yres > info->var.yres_virtual || + var->xoffset + info->var.xres > info->var.xres_virtual) + return -EINVAL; - if (xoffset < 0 || yoffset < 0 || !info->fbops->fb_pan_display || - xoffset + info->var.xres > info->var.xres_virtual || - yoffset + info->var.yres > info->var.yres_virtual) - return -EINVAL; if ((err = info->fbops->fb_pan_display(var, info))) return err; info->var.xoffset = var->xoffset; diff --git a/drivers/video/ffb.c b/drivers/video/ffb.c index 04417dc..c4870d5 100644 --- a/drivers/video/ffb.c +++ b/drivers/video/ffb.c @@ -57,6 +57,9 @@ static struct fb_ops ffb_ops = { .fb_sync = ffb_sync, .fb_mmap = ffb_mmap, .fb_ioctl = ffb_ioctl, +#ifdef CONFIG_COMPAT + .fb_compat_ioctl = sbusfb_compat_ioctl, +#endif }; /* Register layout and definitions */ @@ -356,7 +359,6 @@ struct ffb_par { int prom_parent_node; int dac_rev; int board_type; - struct list_head list; }; static void FFBFifo(struct ffb_par *par, int n) diff --git a/drivers/video/gbefb.c b/drivers/video/gbefb.c index 9d5e4f3..d744c51 100644 --- a/drivers/video/gbefb.c +++ b/drivers/video/gbefb.c @@ -1105,12 +1105,11 @@ int __init gbefb_setup(char *options) return 0; } -static int __init gbefb_probe(struct device *dev) +static int __init gbefb_probe(struct platform_device *p_dev) { int i, ret = 0; struct fb_info *info; struct gbefb_par *par; - struct platform_device *p_dev = to_platform_device(dev); #ifndef MODULE char *options = NULL; #endif @@ -1204,8 +1203,8 @@ static int __init gbefb_probe(struct device *dev) goto out_gbe_unmap; } - dev_set_drvdata(&p_dev->dev, info); - gbefb_create_sysfs(dev); + platform_set_drvdata(p_dev, info); + gbefb_create_sysfs(&p_dev->dev); printk(KERN_INFO "fb%d: %s rev %d @ 0x%08x using %dkB memory\n", info->node, info->fix.id, gbe_revision, (unsigned) GBE_BASE, @@ -1231,10 +1230,9 @@ out_release_framebuffer: return ret; } -static int __devexit gbefb_remove(struct device* dev) +static int __devexit gbefb_remove(struct platform_device* p_dev) { - struct platform_device *p_dev = to_platform_device(dev); - struct fb_info *info = dev_get_drvdata(&p_dev->dev); + struct fb_info *info = platform_get_drvdata(p_dev); unregister_framebuffer(info); gbe_turn_off(); @@ -1252,18 +1250,19 @@ static int __devexit gbefb_remove(struct device* dev) return 0; } -static struct device_driver gbefb_driver = { - .name = "gbefb", - .bus = &platform_bus_type, +static struct platform_driver gbefb_driver = { .probe = gbefb_probe, .remove = __devexit_p(gbefb_remove), + .driver = { + .name = "gbefb", + }, }; static struct platform_device *gbefb_device; int __init gbefb_init(void) { - int ret = driver_register(&gbefb_driver); + int ret = platform_driver_register(&gbefb_driver); if (!ret) { gbefb_device = platform_device_alloc("gbefb", 0); if (gbefb_device) { @@ -1273,7 +1272,7 @@ int __init gbefb_init(void) } if (ret) { platform_device_put(gbefb_device); - driver_unregister(&gbefb_driver); + platform_driver_unregister(&gbefb_driver); } } return ret; @@ -1282,7 +1281,7 @@ int __init gbefb_init(void) void __exit gbefb_exit(void) { platform_device_unregister(gbefb_device); - driver_unregister(&gbefb_driver); + platform_driver_unregister(&gbefb_driver); } module_init(gbefb_init); diff --git a/drivers/video/imxfb.c b/drivers/video/imxfb.c index e20b9f3..5924cc2 100644 --- a/drivers/video/imxfb.c +++ b/drivers/video/imxfb.c @@ -423,18 +423,18 @@ static void imxfb_setup_gpio(struct imxfb_info *fbi) * Power management hooks. Note that we won't be called from IRQ context, * unlike the blank functions above, so we may sleep. */ -static int imxfb_suspend(struct device *dev, pm_message_t state) +static int imxfb_suspend(struct platform_device *dev, pm_message_t state) { - struct imxfb_info *fbi = dev_get_drvdata(dev); + struct imxfb_info *fbi = platform_get_drvdata(dev); pr_debug("%s\n",__FUNCTION__); imxfb_disable_controller(fbi); return 0; } -static int imxfb_resume(struct device *dev) +static int imxfb_resume(struct platform_device *dev) { - struct imxfb_info *fbi = dev_get_drvdata(dev); + struct imxfb_info *fbi = platform_get_drvdata(dev); pr_debug("%s\n",__FUNCTION__); imxfb_enable_controller(fbi); @@ -538,9 +538,8 @@ static int __init imxfb_map_video_memory(struct fb_info *info) return fbi->map_cpu ? 0 : -ENOMEM; } -static int __init imxfb_probe(struct device *dev) +static int __init imxfb_probe(struct platform_device *pdev) { - struct platform_device *pdev = to_platform_device(dev); struct imxfb_info *fbi; struct fb_info *info; struct imxfb_mach_info *inf; @@ -553,21 +552,21 @@ static int __init imxfb_probe(struct device *dev) if(!res) return -ENODEV; - inf = dev->platform_data; + inf = pdev->dev.platform_data; if(!inf) { dev_err(dev,"No platform_data available\n"); return -ENOMEM; } - info = framebuffer_alloc(sizeof(struct imxfb_info), dev); + info = framebuffer_alloc(sizeof(struct imxfb_info), &pdev->dev); if(!info) return -ENOMEM; fbi = info->par; - dev_set_drvdata(dev, info); + platform_set_drvdata(pdev, info); - ret = imxfb_init_fbinfo(dev); + ret = imxfb_init_fbinfo(&pdev->dev); if( ret < 0 ) goto failed_init; @@ -621,22 +620,21 @@ failed_register: fb_dealloc_cmap(&info->cmap); failed_cmap: if (!inf->fixed_screen_cpu) - dma_free_writecombine(dev,fbi->map_size,fbi->map_cpu, + dma_free_writecombine(&pdev->dev,fbi->map_size,fbi->map_cpu, fbi->map_dma); failed_map: kfree(info->pseudo_palette); failed_regs: release_mem_region(res->start, res->end - res->start); failed_init: - dev_set_drvdata(dev, NULL); + platform_set_drvdata(pdev, NULL); framebuffer_release(info); return ret; } -static int imxfb_remove(struct device *dev) +static int imxfb_remove(struct platform_device *pdev) { - struct platform_device *pdev = to_platform_device(dev); - struct fb_info *info = dev_get_drvdata(dev); + struct fb_info *info = platform_get_drvdata(pdev); struct imxfb_info *fbi = info->par; struct resource *res; @@ -651,36 +649,37 @@ static int imxfb_remove(struct device *dev) framebuffer_release(info); release_mem_region(res->start, res->end - res->start + 1); - dev_set_drvdata(dev, NULL); + platform_set_drvdata(pdev, NULL); return 0; } -void imxfb_shutdown(struct device * dev) +void imxfb_shutdown(struct platform_device * dev) { - struct fb_info *info = dev_get_drvdata(dev); + struct fb_info *info = platform_get_drvdata(dev); struct imxfb_info *fbi = info->par; imxfb_disable_controller(fbi); } -static struct device_driver imxfb_driver = { - .name = "imx-fb", - .bus = &platform_bus_type, +static struct platform_driver imxfb_driver = { .probe = imxfb_probe, .suspend = imxfb_suspend, .resume = imxfb_resume, .remove = imxfb_remove, .shutdown = imxfb_shutdown, + .driver = { + .name = "imx-fb", + }, }; int __init imxfb_init(void) { - return driver_register(&imxfb_driver); + return platform_driver_register(&imxfb_driver); } static void __exit imxfb_cleanup(void) { - driver_unregister(&imxfb_driver); + platform_driver_unregister(&imxfb_driver); } module_init(imxfb_init); diff --git a/drivers/video/intelfb/intelfb.h b/drivers/video/intelfb/intelfb.h index f077ca3..da29d00 100644 --- a/drivers/video/intelfb/intelfb.h +++ b/drivers/video/intelfb/intelfb.h @@ -41,6 +41,10 @@ /*** hw-related values ***/ +/* Resource Allocation */ +#define INTELFB_FB_ACQUIRED 1 +#define INTELFB_MMIO_ACQUIRED 2 + /* PCI ids for supported devices */ #define PCI_DEVICE_ID_INTEL_830M 0x3577 #define PCI_DEVICE_ID_INTEL_845G 0x2562 @@ -257,6 +261,7 @@ struct intelfb_info { int hwcursor; int fixed_mode; int ring_active; + int flag; /* hw cursor */ int cursor_on; diff --git a/drivers/video/intelfb/intelfbdrv.c b/drivers/video/intelfb/intelfbdrv.c index 427689e..0090544 100644 --- a/drivers/video/intelfb/intelfbdrv.c +++ b/drivers/video/intelfb/intelfbdrv.c @@ -135,9 +135,6 @@ static void __devinit get_initial_mode(struct intelfb_info *dinfo); static void update_dinfo(struct intelfb_info *dinfo, struct fb_var_screeninfo *var); -static int intelfb_get_fix(struct fb_fix_screeninfo *fix, - struct fb_info *info); - static int intelfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info); static int intelfb_set_par(struct fb_info *info); @@ -473,9 +470,9 @@ cleanup(struct intelfb_info *dinfo) if (dinfo->aperture.virtual) iounmap((void __iomem *)dinfo->aperture.virtual); - if (dinfo->mmio_base_phys) + if (dinfo->flag & INTELFB_MMIO_ACQUIRED) release_mem_region(dinfo->mmio_base_phys, INTEL_REG_SIZE); - if (dinfo->aperture.physical) + if (dinfo->flag & INTELFB_FB_ACQUIRED) release_mem_region(dinfo->aperture.physical, dinfo->aperture.size); framebuffer_release(dinfo->info); @@ -572,6 +569,9 @@ intelfb_pci_register(struct pci_dev *pdev, const struct pci_device_id *ent) cleanup(dinfo); return -ENODEV; } + + dinfo->flag |= INTELFB_FB_ACQUIRED; + if (!request_mem_region(dinfo->mmio_base_phys, INTEL_REG_SIZE, INTELFB_MODULE_NAME)) { @@ -580,6 +580,8 @@ intelfb_pci_register(struct pci_dev *pdev, const struct pci_device_id *ent) return -ENODEV; } + dinfo->flag |= INTELFB_MMIO_ACQUIRED; + /* Get the chipset info. */ dinfo->pci_chipset = pdev->device; @@ -1091,7 +1093,17 @@ intelfb_set_fbinfo(struct intelfb_info *dinfo) return 1; info->pixmap.scan_align = 1; - + strcpy(info->fix.id, dinfo->name); + info->fix.smem_start = dinfo->fb.physical; + info->fix.smem_len = dinfo->fb.size; + info->fix.type = FB_TYPE_PACKED_PIXELS; + info->fix.type_aux = 0; + info->fix.xpanstep = 8; + info->fix.ypanstep = 1; + info->fix.ywrapstep = 0; + info->fix.mmio_start = dinfo->mmio_base_phys; + info->fix.mmio_len = INTEL_REG_SIZE; + info->fix.accel = FB_ACCEL_I830; update_dinfo(dinfo, &info->var); return 0; @@ -1109,7 +1121,8 @@ update_dinfo(struct intelfb_info *dinfo, struct fb_var_screeninfo *var) dinfo->yres = var->xres; dinfo->pixclock = var->pixclock; - intelfb_get_fix(&dinfo->info->fix, dinfo->info); + dinfo->info->fix.visual = dinfo->visual; + dinfo->info->fix.line_length = dinfo->pitch; switch (dinfo->bpp) { case 8: @@ -1139,30 +1152,6 @@ update_dinfo(struct intelfb_info *dinfo, struct fb_var_screeninfo *var) /* fbops functions */ -static int -intelfb_get_fix(struct fb_fix_screeninfo *fix, struct fb_info *info) -{ - struct intelfb_info *dinfo = GET_DINFO(info); - - DBG_MSG("intelfb_get_fix\n"); - - memset(fix, 0, sizeof(*fix)); - strcpy(fix->id, dinfo->name); - fix->smem_start = dinfo->fb.physical; - fix->smem_len = dinfo->fb.size; - fix->type = FB_TYPE_PACKED_PIXELS; - fix->type_aux = 0; - fix->visual = dinfo->visual; - fix->xpanstep = 8; - fix->ypanstep = 1; - fix->ywrapstep = 0; - fix->line_length = dinfo->pitch; - fix->mmio_start = dinfo->mmio_base_phys; - fix->mmio_len = INTEL_REG_SIZE; - fix->accel = FB_ACCEL_I830; - return 0; -} - /*************************************************************** * fbdev interface * ***************************************************************/ diff --git a/drivers/video/leo.c b/drivers/video/leo.c index 84a7fe4..494287f 100644 --- a/drivers/video/leo.c +++ b/drivers/video/leo.c @@ -51,6 +51,9 @@ static struct fb_ops leo_ops = { .fb_imageblit = cfb_imageblit, .fb_mmap = leo_mmap, .fb_ioctl = leo_ioctl, +#ifdef CONFIG_COMPAT + .fb_compat_ioctl = sbusfb_compat_ioctl, +#endif }; #define LEO_OFF_LC_SS0_KRN 0x00200000UL @@ -194,7 +197,6 @@ struct leo_par { unsigned long fbsize; struct sbus_dev *sdev; - struct list_head list; }; static void leo_wait(struct leo_lx_krn __iomem *lx_krn) diff --git a/drivers/video/logo/Kconfig b/drivers/video/logo/Kconfig index 8cb7fb4..f0e6512 100644 --- a/drivers/video/logo/Kconfig +++ b/drivers/video/logo/Kconfig @@ -47,7 +47,7 @@ config LOGO_SGI_CLUT224 config LOGO_SUN_CLUT224 bool "224-color Sun Linux logo" - depends on LOGO && (SPARC32 || SPARC64) + depends on LOGO && SPARC default y config LOGO_SUPERH_MONO diff --git a/drivers/video/nvidia/nv_proto.h b/drivers/video/nvidia/nv_proto.h index f60b1f4..3353103 100644 --- a/drivers/video/nvidia/nv_proto.h +++ b/drivers/video/nvidia/nv_proto.h @@ -42,7 +42,7 @@ int nvidia_probe_i2c_connector(struct fb_info *info, int conn, #define nvidia_probe_i2c_connector(p, c, edid) (-1) #endif -#ifdef CONFIG_FB_OF +#ifdef CONFIG_PPC_OF int nvidia_probe_of_connector(struct fb_info *info, int conn, u8 ** out_edid); #else diff --git a/drivers/video/nvidia/nvidia.c b/drivers/video/nvidia/nvidia.c index 0b40a2a..bee09c6 100644 --- a/drivers/video/nvidia/nvidia.c +++ b/drivers/video/nvidia/nvidia.c @@ -1301,7 +1301,7 @@ static int nvidiafb_pan_display(struct fb_var_screeninfo *var, struct nvidia_par *par = info->par; u32 total; - total = info->var.yoffset * info->fix.line_length + info->var.xoffset; + total = var->yoffset * info->fix.line_length + var->xoffset; NVSetStartAddress(par, total); diff --git a/drivers/video/offb.c b/drivers/video/offb.c index 2c85683..00d87f5 100644 --- a/drivers/video/offb.c +++ b/drivers/video/offb.c @@ -26,6 +26,7 @@ #include <linux/fb.h> #include <linux/init.h> #include <linux/ioport.h> +#include <linux/pci.h> #include <asm/io.h> #include <asm/prom.h> @@ -325,8 +326,8 @@ static void __init offb_init_nodriver(struct device_node *dp) int *pp, i; unsigned int len; int width = 640, height = 480, depth = 8, pitch; - unsigned *up; - unsigned long address; + unsigned int rsize, *up; + unsigned long address = 0; if ((pp = (int *) get_property(dp, "depth", &len)) != NULL && len == sizeof(int)) @@ -344,10 +345,40 @@ static void __init offb_init_nodriver(struct device_node *dp) pitch = 0x1000; } else pitch = width; - if ((up = (unsigned *) get_property(dp, "address", &len)) != NULL - && len == sizeof(unsigned)) + + rsize = (unsigned long)pitch * (unsigned long)height * + (unsigned long)(depth / 8); + + /* Try to match device to a PCI device in order to get a properly + * translated address rather then trying to decode the open firmware + * stuff in various incorrect ways + */ +#ifdef CONFIG_PCI + /* First try to locate the PCI device if any */ + { + struct pci_dev *pdev = NULL; + + for_each_pci_dev(pdev) { + if (dp == pci_device_to_OF_node(pdev)) + break; + } + if (pdev) { + for (i = 0; i < 6 && address == 0; i++) { + if ((pci_resource_flags(pdev, i) & + IORESOURCE_MEM) && + (pci_resource_len(pdev, i) >= rsize)) + address = pci_resource_start(pdev, i); + } + pci_dev_put(pdev); + } + } +#endif /* CONFIG_PCI */ + + if (address == 0 && + (up = (unsigned *) get_property(dp, "address", &len)) != NULL && + len == sizeof(unsigned)) address = (u_long) * up; - else { + if (address == 0) { for (i = 0; i < dp->n_addrs; ++i) if (dp->addrs[i].size >= pitch * height * depth / 8) diff --git a/drivers/video/p9100.c b/drivers/video/p9100.c index 9aaf65f..b251e75 100644 --- a/drivers/video/p9100.c +++ b/drivers/video/p9100.c @@ -48,6 +48,9 @@ static struct fb_ops p9100_ops = { .fb_imageblit = cfb_imageblit, .fb_mmap = p9100_mmap, .fb_ioctl = p9100_ioctl, +#ifdef CONFIG_COMPAT + .fb_compat_ioctl = sbusfb_compat_ioctl, +#endif }; /* P9100 control registers */ @@ -137,7 +140,6 @@ struct p9100_par { unsigned long fbsize; struct sbus_dev *sdev; - struct list_head list; }; /** diff --git a/drivers/video/pxafb.c b/drivers/video/pxafb.c index f305a5b..9fc10b9 100644 --- a/drivers/video/pxafb.c +++ b/drivers/video/pxafb.c @@ -980,17 +980,17 @@ pxafb_freq_policy(struct notifier_block *nb, unsigned long val, void *data) * Power management hooks. Note that we won't be called from IRQ context, * unlike the blank functions above, so we may sleep. */ -static int pxafb_suspend(struct device *dev, pm_message_t state) +static int pxafb_suspend(struct platform_device *dev, pm_message_t state) { - struct pxafb_info *fbi = dev_get_drvdata(dev); + struct pxafb_info *fbi = platform_get_drvdata(dev); set_ctrlr_state(fbi, C_DISABLE_PM); return 0; } -static int pxafb_resume(struct device *dev) +static int pxafb_resume(struct platform_device *dev) { - struct pxafb_info *fbi = dev_get_drvdata(dev); + struct pxafb_info *fbi = platform_get_drvdata(dev); set_ctrlr_state(fbi, C_ENABLE_PM); return 0; @@ -1268,7 +1268,7 @@ static int __init pxafb_parse_options(struct device *dev, char *options) } #endif -int __init pxafb_probe(struct device *dev) +int __init pxafb_probe(struct platform_device *dev) { struct pxafb_info *fbi; struct pxafb_mach_info *inf; @@ -1276,14 +1276,14 @@ int __init pxafb_probe(struct device *dev) dev_dbg(dev, "pxafb_probe\n"); - inf = dev->platform_data; + inf = dev->dev.platform_data; ret = -ENOMEM; fbi = NULL; if (!inf) goto failed; #ifdef CONFIG_FB_PXA_PARAMETERS - ret = pxafb_parse_options(dev, g_options); + ret = pxafb_parse_options(&dev->dev, g_options); if (ret < 0) goto failed; #endif @@ -1293,36 +1293,36 @@ int __init pxafb_probe(struct device *dev) * a warning is given. */ if (inf->lccr0 & LCCR0_INVALID_CONFIG_MASK) - dev_warn(dev, "machine LCCR0 setting contains illegal bits: %08x\n", + dev_warn(&dev->dev, "machine LCCR0 setting contains illegal bits: %08x\n", inf->lccr0 & LCCR0_INVALID_CONFIG_MASK); if (inf->lccr3 & LCCR3_INVALID_CONFIG_MASK) - dev_warn(dev, "machine LCCR3 setting contains illegal bits: %08x\n", + dev_warn(&dev->dev, "machine LCCR3 setting contains illegal bits: %08x\n", inf->lccr3 & LCCR3_INVALID_CONFIG_MASK); if (inf->lccr0 & LCCR0_DPD && ((inf->lccr0 & LCCR0_PAS) != LCCR0_Pas || (inf->lccr0 & LCCR0_SDS) != LCCR0_Sngl || (inf->lccr0 & LCCR0_CMS) != LCCR0_Mono)) - dev_warn(dev, "Double Pixel Data (DPD) mode is only valid in passive mono" + dev_warn(&dev->dev, "Double Pixel Data (DPD) mode is only valid in passive mono" " single panel mode\n"); if ((inf->lccr0 & LCCR0_PAS) == LCCR0_Act && (inf->lccr0 & LCCR0_SDS) == LCCR0_Dual) - dev_warn(dev, "Dual panel only valid in passive mode\n"); + dev_warn(&dev->dev, "Dual panel only valid in passive mode\n"); if ((inf->lccr0 & LCCR0_PAS) == LCCR0_Pas && (inf->upper_margin || inf->lower_margin)) - dev_warn(dev, "Upper and lower margins must be 0 in passive mode\n"); + dev_warn(&dev->dev, "Upper and lower margins must be 0 in passive mode\n"); #endif - dev_dbg(dev, "got a %dx%dx%d LCD\n",inf->xres, inf->yres, inf->bpp); + dev_dbg(&dev->dev, "got a %dx%dx%d LCD\n",inf->xres, inf->yres, inf->bpp); if (inf->xres == 0 || inf->yres == 0 || inf->bpp == 0) { - dev_err(dev, "Invalid resolution or bit depth\n"); + dev_err(&dev->dev, "Invalid resolution or bit depth\n"); ret = -EINVAL; goto failed; } pxafb_backlight_power = inf->pxafb_backlight_power; pxafb_lcd_power = inf->pxafb_lcd_power; - fbi = pxafb_init_fbinfo(dev); + fbi = pxafb_init_fbinfo(&dev->dev); if (!fbi) { - dev_err(dev, "Failed to initialize framebuffer device\n"); + dev_err(&dev->dev, "Failed to initialize framebuffer device\n"); ret = -ENOMEM; // only reason for pxafb_init_fbinfo to fail is kmalloc goto failed; } @@ -1330,14 +1330,14 @@ int __init pxafb_probe(struct device *dev) /* Initialize video memory */ ret = pxafb_map_video_memory(fbi); if (ret) { - dev_err(dev, "Failed to allocate video RAM: %d\n", ret); + dev_err(&dev->dev, "Failed to allocate video RAM: %d\n", ret); ret = -ENOMEM; goto failed; } ret = request_irq(IRQ_LCD, pxafb_handle_irq, SA_INTERRUPT, "LCD", fbi); if (ret) { - dev_err(dev, "request_irq failed: %d\n", ret); + dev_err(&dev->dev, "request_irq failed: %d\n", ret); ret = -EBUSY; goto failed; } @@ -1349,11 +1349,11 @@ int __init pxafb_probe(struct device *dev) pxafb_check_var(&fbi->fb.var, &fbi->fb); pxafb_set_par(&fbi->fb); - dev_set_drvdata(dev, fbi); + platform_set_drvdata(dev, fbi); ret = register_framebuffer(&fbi->fb); if (ret < 0) { - dev_err(dev, "Failed to register framebuffer device: %d\n", ret); + dev_err(&dev->dev, "Failed to register framebuffer device: %d\n", ret); goto failed; } @@ -1376,26 +1376,28 @@ int __init pxafb_probe(struct device *dev) return 0; failed: - dev_set_drvdata(dev, NULL); + platform_set_drvdata(dev, NULL); kfree(fbi); return ret; } -static struct device_driver pxafb_driver = { - .name = "pxa2xx-fb", - .bus = &platform_bus_type, +static struct platform_driver pxafb_driver = { .probe = pxafb_probe, #ifdef CONFIG_PM .suspend = pxafb_suspend, .resume = pxafb_resume, #endif + .driver = { + .name = "pxa2xx-fb", + }, }; #ifndef MODULE int __devinit pxafb_setup(char *options) { # ifdef CONFIG_FB_PXA_PARAMETERS - strlcpy(g_options, options, sizeof(g_options)); + if (options) + strlcpy(g_options, options, sizeof(g_options)); # endif return 0; } @@ -1415,7 +1417,7 @@ int __devinit pxafb_init(void) return -ENODEV; pxafb_setup(option); #endif - return driver_register(&pxafb_driver); + return platform_driver_register(&pxafb_driver); } module_init(pxafb_init); diff --git a/drivers/video/q40fb.c b/drivers/video/q40fb.c index bfc41f2..fc91dbf 100644 --- a/drivers/video/q40fb.c +++ b/drivers/video/q40fb.c @@ -86,9 +86,8 @@ static struct fb_ops q40fb_ops = { .fb_imageblit = cfb_imageblit, }; -static int __init q40fb_probe(struct device *device) +static int __init q40fb_probe(struct platform_device *dev) { - struct platform_device *dev = to_platform_device(device); struct fb_info *info; if (!MACH_IS_Q40) @@ -128,10 +127,11 @@ static int __init q40fb_probe(struct device *device) return 0; } -static struct device_driver q40fb_driver = { - .name = "q40fb", - .bus = &platform_bus_type, +static struct platform_driver q40fb_driver = { .probe = q40fb_probe, + .driver = { + .name = "q40fb", + }, }; static struct platform_device q40fb_device = { @@ -145,12 +145,12 @@ int __init q40fb_init(void) if (fb_get_options("q40fb", NULL)) return -ENODEV; - ret = driver_register(&q40fb_driver); + ret = platform_driver_register(&q40fb_driver); if (!ret) { ret = platform_device_register(&q40fb_device); if (ret) - driver_unregister(&q40fb_driver); + platform_driver_unregister(&q40fb_driver); } return ret; } diff --git a/drivers/video/s1d13xxxfb.c b/drivers/video/s1d13xxxfb.c index 3edbd14..e5d0f92 100644 --- a/drivers/video/s1d13xxxfb.c +++ b/drivers/video/s1d13xxxfb.c @@ -503,10 +503,9 @@ s1d13xxxfb_fetch_hw_state(struct fb_info *info) static int -s1d13xxxfb_remove(struct device *dev) +s1d13xxxfb_remove(struct platform_device *pdev) { - struct fb_info *info = dev_get_drvdata(dev); - struct platform_device *pdev = to_platform_device(dev); + struct fb_info *info = platform_get_drvdata(pdev); struct s1d13xxxfb_par *par = NULL; if (info) { @@ -534,9 +533,8 @@ s1d13xxxfb_remove(struct device *dev) } static int __devinit -s1d13xxxfb_probe(struct device *dev) +s1d13xxxfb_probe(struct platform_device *pdev) { - struct platform_device *pdev = to_platform_device(dev); struct s1d13xxxfb_par *default_par; struct fb_info *info; struct s1d13xxxfb_pdata *pdata = NULL; @@ -548,8 +546,8 @@ s1d13xxxfb_probe(struct device *dev) printk(KERN_INFO "Epson S1D13XXX FB Driver\n"); /* enable platform-dependent hardware glue, if any */ - if (dev->platform_data) - pdata = dev->platform_data; + if (pdev->dev.platform_data) + pdata = pdev->dev.platform_data; if (pdata && pdata->platform_init_video) pdata->platform_init_video(); @@ -572,14 +570,14 @@ s1d13xxxfb_probe(struct device *dev) if (!request_mem_region(pdev->resource[0].start, pdev->resource[0].end - pdev->resource[0].start +1, "s1d13xxxfb mem")) { - dev_dbg(dev, "request_mem_region failed\n"); + dev_dbg(&pdev->dev, "request_mem_region failed\n"); ret = -EBUSY; goto bail; } if (!request_mem_region(pdev->resource[1].start, pdev->resource[1].end - pdev->resource[1].start +1, "s1d13xxxfb regs")) { - dev_dbg(dev, "request_mem_region failed\n"); + dev_dbg(&pdev->dev, "request_mem_region failed\n"); ret = -EBUSY; goto bail; } @@ -640,7 +638,7 @@ s1d13xxxfb_probe(struct device *dev) goto bail; } - dev_set_drvdata(&pdev->dev, info); + platform_set_drvdata(pdev, info); printk(KERN_INFO "fb%d: %s frame buffer device\n", info->node, info->fix.id); @@ -648,15 +646,15 @@ s1d13xxxfb_probe(struct device *dev) return 0; bail: - s1d13xxxfb_remove(dev); + s1d13xxxfb_remove(pdev); return ret; } #ifdef CONFIG_PM -static int s1d13xxxfb_suspend(struct device *dev, pm_message_t state) +static int s1d13xxxfb_suspend(struct platform_device *dev, pm_message_t state) { - struct fb_info *info = dev_get_drvdata(dev); + struct fb_info *info = platform_get_drvdata(dev); struct s1d13xxxfb_par *s1dfb = info->par; struct s1d13xxxfb_pdata *pdata = NULL; @@ -664,8 +662,8 @@ static int s1d13xxxfb_suspend(struct device *dev, pm_message_t state) lcd_enable(s1dfb, 0); crt_enable(s1dfb, 0); - if (dev->platform_data) - pdata = dev->platform_data; + if (dev->dev.platform_data) + pdata = dev->dev.platform_data; #if 0 if (!s1dfb->disp_save) @@ -701,9 +699,9 @@ static int s1d13xxxfb_suspend(struct device *dev, pm_message_t state) return 0; } -static int s1d13xxxfb_resume(struct device *dev) +static int s1d13xxxfb_resume(struct platform_device *dev) { - struct fb_info *info = dev_get_drvdata(dev); + struct fb_info *info = platform_get_drvdata(dev); struct s1d13xxxfb_par *s1dfb = info->par; struct s1d13xxxfb_pdata *pdata = NULL; @@ -714,8 +712,8 @@ static int s1d13xxxfb_resume(struct device *dev) while ((s1d13xxxfb_readreg(s1dfb, S1DREG_PS_STATUS) & 0x01)) udelay(10); - if (dev->platform_data) - pdata = dev->platform_data; + if (dev->dev.platform_data) + pdata = dev->dev.platform_data; if (s1dfb->regs_save) { /* will write RO regs, *should* get away with it :) */ @@ -741,15 +739,16 @@ static int s1d13xxxfb_resume(struct device *dev) } #endif /* CONFIG_PM */ -static struct device_driver s1d13xxxfb_driver = { - .name = S1D_DEVICENAME, - .bus = &platform_bus_type, +static struct platform_driver s1d13xxxfb_driver = { .probe = s1d13xxxfb_probe, .remove = s1d13xxxfb_remove, #ifdef CONFIG_PM .suspend = s1d13xxxfb_suspend, - .resume = s1d13xxxfb_resume + .resume = s1d13xxxfb_resume, #endif + .driver = { + .name = S1D_DEVICENAME, + }, }; @@ -759,14 +758,14 @@ s1d13xxxfb_init(void) if (fb_get_options("s1d13xxxfb", NULL)) return -ENODEV; - return driver_register(&s1d13xxxfb_driver); + return platform_driver_register(&s1d13xxxfb_driver); } static void __exit s1d13xxxfb_exit(void) { - driver_unregister(&s1d13xxxfb_driver); + platform_driver_unregister(&s1d13xxxfb_driver); } module_init(s1d13xxxfb_init); diff --git a/drivers/video/s3c2410fb.c b/drivers/video/s3c2410fb.c index 855a677..ce6e749 100644 --- a/drivers/video/s3c2410fb.c +++ b/drivers/video/s3c2410fb.c @@ -634,19 +634,18 @@ static irqreturn_t s3c2410fb_irq(int irq, void *dev_id, struct pt_regs *r) static char driver_name[]="s3c2410fb"; -int __init s3c2410fb_probe(struct device *dev) +int __init s3c2410fb_probe(struct platform_device *pdev) { struct s3c2410fb_info *info; struct fb_info *fbinfo; - struct platform_device *pdev = to_platform_device(dev); struct s3c2410fb_hw *mregs; int ret; int irq; int i; - mach_info = dev->platform_data; + mach_info = pdev->dev.platform_data; if (mach_info == NULL) { - dev_err(dev,"no platform data for lcd, cannot attach\n"); + dev_err(&pdev->dev,"no platform data for lcd, cannot attach\n"); return -EINVAL; } @@ -654,11 +653,11 @@ int __init s3c2410fb_probe(struct device *dev) irq = platform_get_irq(pdev, 0); if (irq < 0) { - dev_err(dev, "no irq for device\n"); + dev_err(&pdev->dev, "no irq for device\n"); return -ENOENT; } - fbinfo = framebuffer_alloc(sizeof(struct s3c2410fb_info), dev); + fbinfo = framebuffer_alloc(sizeof(struct s3c2410fb_info), &pdev->dev); if (!fbinfo) { return -ENOMEM; } @@ -666,7 +665,7 @@ int __init s3c2410fb_probe(struct device *dev) info = fbinfo->par; info->fb = fbinfo; - dev_set_drvdata(dev, fbinfo); + platform_set_drvdata(pdev, fbinfo); s3c2410fb_init_registers(info); @@ -676,7 +675,7 @@ int __init s3c2410fb_probe(struct device *dev) memcpy(&info->regs, &mach_info->regs, sizeof(info->regs)); - info->mach_info = dev->platform_data; + info->mach_info = pdev->dev.platform_data; fbinfo->fix.type = FB_TYPE_PACKED_PIXELS; fbinfo->fix.type_aux = 0; @@ -735,7 +734,7 @@ int __init s3c2410fb_probe(struct device *dev) ret = request_irq(irq, s3c2410fb_irq, SA_INTERRUPT, pdev->name, info); if (ret) { - dev_err(dev, "cannot get irq %d - err %d\n", irq, ret); + dev_err(&pdev->dev, "cannot get irq %d - err %d\n", irq, ret); ret = -EBUSY; goto release_mem; } @@ -773,7 +772,7 @@ int __init s3c2410fb_probe(struct device *dev) } /* create device files */ - device_create_file(dev, &dev_attr_debug); + device_create_file(&pdev->dev, &dev_attr_debug); printk(KERN_INFO "fb%d: %s frame buffer device\n", fbinfo->node, fbinfo->fix.id); @@ -816,10 +815,9 @@ static void s3c2410fb_stop_lcd(void) /* * Cleanup */ -static int s3c2410fb_remove(struct device *dev) +static int s3c2410fb_remove(struct platform_device *pdev) { - struct platform_device *pdev = to_platform_device(dev); - struct fb_info *fbinfo = dev_get_drvdata(dev); + struct fb_info *fbinfo = platform_get_drvdata(pdev); struct s3c2410fb_info *info = fbinfo->par; int irq; @@ -847,9 +845,9 @@ static int s3c2410fb_remove(struct device *dev) /* suspend and resume support for the lcd controller */ -static int s3c2410fb_suspend(struct device *dev, pm_message_t state) +static int s3c2410fb_suspend(struct platform_device *dev, pm_message_t state) { - struct fb_info *fbinfo = dev_get_drvdata(dev); + struct fb_info *fbinfo = platform_get_drvdata(dev); struct s3c2410fb_info *info = fbinfo->par; s3c2410fb_stop_lcd(); @@ -864,9 +862,9 @@ static int s3c2410fb_suspend(struct device *dev, pm_message_t state) return 0; } -static int s3c2410fb_resume(struct device *dev) +static int s3c2410fb_resume(struct platform_device *dev) { - struct fb_info *fbinfo = dev_get_drvdata(dev); + struct fb_info *fbinfo = platform_get_drvdata(dev); struct s3c2410fb_info *info = fbinfo->par; clk_enable(info->clk); @@ -882,24 +880,25 @@ static int s3c2410fb_resume(struct device *dev) #define s3c2410fb_resume NULL #endif -static struct device_driver s3c2410fb_driver = { - .name = "s3c2410-lcd", - .owner = THIS_MODULE, - .bus = &platform_bus_type, +static struct platform_driver s3c2410fb_driver = { .probe = s3c2410fb_probe, + .remove = s3c2410fb_remove, .suspend = s3c2410fb_suspend, .resume = s3c2410fb_resume, - .remove = s3c2410fb_remove + .driver = { + .name = "s3c2410-lcd", + .owner = THIS_MODULE, + }, }; int __devinit s3c2410fb_init(void) { - return driver_register(&s3c2410fb_driver); + return platform_driver_register(&s3c2410fb_driver); } static void __exit s3c2410fb_cleanup(void) { - driver_unregister(&s3c2410fb_driver); + platform_driver_unregister(&s3c2410fb_driver); } diff --git a/drivers/video/sa1100fb.c b/drivers/video/sa1100fb.c index a518457..2ea1354 100644 --- a/drivers/video/sa1100fb.c +++ b/drivers/video/sa1100fb.c @@ -1308,17 +1308,17 @@ sa1100fb_freq_policy(struct notifier_block *nb, unsigned long val, * Power management hooks. Note that we won't be called from IRQ context, * unlike the blank functions above, so we may sleep. */ -static int sa1100fb_suspend(struct device *dev, pm_message_t state) +static int sa1100fb_suspend(struct platform_device *dev, pm_message_t state) { - struct sa1100fb_info *fbi = dev_get_drvdata(dev); + struct sa1100fb_info *fbi = platform_get_drvdata(dev); set_ctrlr_state(fbi, C_DISABLE_PM); return 0; } -static int sa1100fb_resume(struct device *dev) +static int sa1100fb_resume(struct platform_device *dev) { - struct sa1100fb_info *fbi = dev_get_drvdata(dev); + struct sa1100fb_info *fbi = platform_get_drvdata(dev); set_ctrlr_state(fbi, C_ENABLE_PM); return 0; @@ -1452,7 +1452,7 @@ static struct sa1100fb_info * __init sa1100fb_init_fbinfo(struct device *dev) return fbi; } -static int __init sa1100fb_probe(struct device *dev) +static int __init sa1100fb_probe(struct platform_device *pdev) { struct sa1100fb_info *fbi; int ret; @@ -1460,7 +1460,7 @@ static int __init sa1100fb_probe(struct device *dev) if (!request_mem_region(0xb0100000, 0x10000, "LCD")) return -EBUSY; - fbi = sa1100fb_init_fbinfo(dev); + fbi = sa1100fb_init_fbinfo(&pdev->dev); ret = -ENOMEM; if (!fbi) goto failed; @@ -1488,7 +1488,7 @@ static int __init sa1100fb_probe(struct device *dev) */ sa1100fb_check_var(&fbi->fb.var, &fbi->fb); - dev_set_drvdata(dev, fbi); + platform_set_drvdata(pdev, fbi); ret = register_framebuffer(&fbi->fb); if (ret < 0) @@ -1505,18 +1505,19 @@ static int __init sa1100fb_probe(struct device *dev) return 0; failed: - dev_set_drvdata(dev, NULL); + platform_set_drvdata(pdev, NULL); kfree(fbi); release_mem_region(0xb0100000, 0x10000); return ret; } -static struct device_driver sa1100fb_driver = { - .name = "sa11x0-fb", - .bus = &platform_bus_type, +static struct platform_driver sa1100fb_driver = { .probe = sa1100fb_probe, .suspend = sa1100fb_suspend, .resume = sa1100fb_resume, + .driver = { + .name = "sa11x0-fb", + }, }; int __init sa1100fb_init(void) @@ -1524,7 +1525,7 @@ int __init sa1100fb_init(void) if (fb_get_options("sa1100fb", NULL)) return -ENODEV; - return driver_register(&sa1100fb_driver); + return platform_driver_register(&sa1100fb_driver); } int __init sa1100fb_setup(char *options) diff --git a/drivers/video/sbuslib.c b/drivers/video/sbuslib.c index 34f72ed..3a74a63d 100644 --- a/drivers/video/sbuslib.c +++ b/drivers/video/sbuslib.c @@ -3,6 +3,7 @@ * Copyright (C) 2003 David S. Miller (davem@redhat.com) */ +#include <linux/compat.h> #include <linux/kernel.h> #include <linux/module.h> #include <linux/string.h> @@ -45,6 +46,9 @@ int sbusfb_mmap_helper(struct sbus_mmap_map *map, unsigned long off; int i; + if (!(vma->vm_flags & (VM_SHARED | VM_MAYSHARE))) + return -EINVAL; + size = vma->vm_end - vma->vm_start; if (vma->vm_pgoff > (~0UL >> PAGE_SHIFT)) return -EINVAL; @@ -182,3 +186,109 @@ int sbusfb_ioctl_helper(unsigned long cmd, unsigned long arg, }; } EXPORT_SYMBOL(sbusfb_ioctl_helper); + +#ifdef CONFIG_COMPAT +struct fbcmap32 { + int index; /* first element (0 origin) */ + int count; + u32 red; + u32 green; + u32 blue; +}; + +#define FBIOPUTCMAP32 _IOW('F', 3, struct fbcmap32) +#define FBIOGETCMAP32 _IOW('F', 4, struct fbcmap32) + +static int fbiogetputcmap(struct file *file, struct fb_info *info, + unsigned int cmd, unsigned long arg) +{ + struct fbcmap32 __user *argp = (void __user *)arg; + struct fbcmap __user *p = compat_alloc_user_space(sizeof(*p)); + u32 addr; + int ret; + + ret = copy_in_user(p, argp, 2 * sizeof(int)); + ret |= get_user(addr, &argp->red); + ret |= put_user(compat_ptr(addr), &p->red); + ret |= get_user(addr, &argp->green); + ret |= put_user(compat_ptr(addr), &p->green); + ret |= get_user(addr, &argp->blue); + ret |= put_user(compat_ptr(addr), &p->blue); + if (ret) + return -EFAULT; + return info->fbops->fb_ioctl(file->f_dentry->d_inode, file, + (cmd == FBIOPUTCMAP32) ? + FBIOPUTCMAP_SPARC : FBIOGETCMAP_SPARC, + (unsigned long)p, info); +} + +struct fbcursor32 { + short set; /* what to set, choose from the list above */ + short enable; /* cursor on/off */ + struct fbcurpos pos; /* cursor position */ + struct fbcurpos hot; /* cursor hot spot */ + struct fbcmap32 cmap; /* color map info */ + struct fbcurpos size; /* cursor bit map size */ + u32 image; /* cursor image bits */ + u32 mask; /* cursor mask bits */ +}; + +#define FBIOSCURSOR32 _IOW('F', 24, struct fbcursor32) +#define FBIOGCURSOR32 _IOW('F', 25, struct fbcursor32) + +static int fbiogscursor(struct file *file, struct fb_info *info, + unsigned long arg) +{ + struct fbcursor __user *p = compat_alloc_user_space(sizeof(*p)); + struct fbcursor32 __user *argp = (void __user *)arg; + compat_uptr_t addr; + int ret; + + ret = copy_in_user(p, argp, + 2 * sizeof (short) + 2 * sizeof(struct fbcurpos)); + ret |= copy_in_user(&p->size, &argp->size, sizeof(struct fbcurpos)); + ret |= copy_in_user(&p->cmap, &argp->cmap, 2 * sizeof(int)); + ret |= get_user(addr, &argp->cmap.red); + ret |= put_user(compat_ptr(addr), &p->cmap.red); + ret |= get_user(addr, &argp->cmap.green); + ret |= put_user(compat_ptr(addr), &p->cmap.green); + ret |= get_user(addr, &argp->cmap.blue); + ret |= put_user(compat_ptr(addr), &p->cmap.blue); + ret |= get_user(addr, &argp->mask); + ret |= put_user(compat_ptr(addr), &p->mask); + ret |= get_user(addr, &argp->image); + ret |= put_user(compat_ptr(addr), &p->image); + if (ret) + return -EFAULT; + return info->fbops->fb_ioctl(file->f_dentry->d_inode, file, + FBIOSCURSOR, (unsigned long)p, info); +} + +long sbusfb_compat_ioctl(struct file *file, unsigned int cmd, + unsigned long arg, struct fb_info *info) +{ + switch (cmd) { + case FBIOGTYPE: + case FBIOSATTR: + case FBIOGATTR: + case FBIOSVIDEO: + case FBIOGVIDEO: + case FBIOGCURSOR32: /* This is not implemented yet. + Later it should be converted... */ + case FBIOSCURPOS: + case FBIOGCURPOS: + case FBIOGCURMAX: + return info->fbops->fb_ioctl(file->f_dentry->d_inode, + file, cmd, arg, info); + case FBIOPUTCMAP32: + return fbiogetputcmap(file, info, cmd, arg); + case FBIOGETCMAP32: + return fbiogetputcmap(file, info, cmd, arg); + case FBIOSCURSOR32: + return fbiogscursor(file, info, arg); + default: + return -ENOIOCTLCMD; + } +} +EXPORT_SYMBOL(sbusfb_compat_ioctl); +#endif diff --git a/drivers/video/sbuslib.h b/drivers/video/sbuslib.h index a6aa33b..b470e52 100644 --- a/drivers/video/sbuslib.h +++ b/drivers/video/sbuslib.h @@ -20,5 +20,7 @@ extern int sbusfb_mmap_helper(struct sbus_mmap_map *map, int sbusfb_ioctl_helper(unsigned long cmd, unsigned long arg, struct fb_info *info, int type, int fb_depth, unsigned long fb_size); +long sbusfb_compat_ioctl(struct file *file, unsigned int cmd, + unsigned long arg, struct fb_info *info); #endif /* _SBUSLIB_H */ diff --git a/drivers/video/sgivwfb.c b/drivers/video/sgivwfb.c index 2e8769d..7054660 100644 --- a/drivers/video/sgivwfb.c +++ b/drivers/video/sgivwfb.c @@ -750,9 +750,8 @@ int __init sgivwfb_setup(char *options) /* * Initialisation */ -static int __init sgivwfb_probe(struct device *device) +static int __init sgivwfb_probe(struct platform_device *dev) { - struct platform_device *dev = to_platform_device(device); struct sgivw_par *par; struct fb_info *info; char *monitor; @@ -813,7 +812,7 @@ static int __init sgivwfb_probe(struct device *device) goto fail_register_framebuffer; } - dev_set_drvdata(&dev->dev, info); + platform_set_drvdata(dev, info); printk(KERN_INFO "fb%d: SGI DBE frame buffer device, using %ldK of video memory at %#lx\n", info->node, sgivwfb_mem_size >> 10, sgivwfb_mem_phys); @@ -831,9 +830,9 @@ fail_ioremap_regs: return -ENXIO; } -static int sgivwfb_remove(struct device *device) +static int sgivwfb_remove(struct platform_device *dev) { - struct fb_info *info = dev_get_drvdata(device); + struct fb_info *info = platform_get_drvdata(dev); if (info) { struct sgivw_par *par = info->par; @@ -847,11 +846,12 @@ static int sgivwfb_remove(struct device *device) return 0; } -static struct device_driver sgivwfb_driver = { - .name = "sgivwfb", - .bus = &platform_bus_type, +static struct platform_driver sgivwfb_driver = { .probe = sgivwfb_probe, .remove = sgivwfb_remove, + .driver = { + .name = "sgivwfb", + }, }; static struct platform_device *sgivwfb_device; @@ -867,7 +867,7 @@ int __init sgivwfb_init(void) return -ENODEV; sgivwfb_setup(option); #endif - ret = driver_register(&sgivwfb_driver); + ret = platform_driver_register(&sgivwfb_driver); if (!ret) { sgivwfb_device = platform_device_alloc("sgivwfb", 0); if (sgivwfb_device) { @@ -875,7 +875,7 @@ int __init sgivwfb_init(void) } else ret = -ENOMEM; if (ret) { - driver_unregister(&sgivwfb_driver); + platform_driver_unregister(&sgivwfb_driver); platform_device_put(sgivwfb_device); } } @@ -890,7 +890,7 @@ MODULE_LICENSE("GPL"); static void __exit sgivwfb_exit(void) { platform_device_unregister(sgivwfb_device); - driver_unregister(&sgivwfb_driver); + platform_driver_unregister(&sgivwfb_driver); } module_exit(sgivwfb_exit); diff --git a/drivers/video/tcx.c b/drivers/video/tcx.c index 59fff29..2b27b44 100644 --- a/drivers/video/tcx.c +++ b/drivers/video/tcx.c @@ -52,6 +52,9 @@ static struct fb_ops tcx_ops = { .fb_imageblit = cfb_imageblit, .fb_mmap = tcx_mmap, .fb_ioctl = tcx_ioctl, +#ifdef CONFIG_COMPAT + .fb_compat_ioctl = sbusfb_compat_ioctl, +#endif }; /* THC definitions */ @@ -122,7 +125,6 @@ struct tcx_par { int lowdepth; struct sbus_dev *sdev; - struct list_head list; }; /* Reset control plane so that WID is 8-bit plane. */ @@ -441,7 +443,7 @@ static void tcx_init_one(struct sbus_dev *sdev) tcx_reset(&all->info); - tcx_blank(0, &all->info); + tcx_blank(FB_BLANK_UNBLANK, &all->info); if (fb_alloc_cmap(&all->info.cmap, 256, 0)) { printk(KERN_ERR "tcx: Could not allocate color map.\n"); diff --git a/drivers/video/vesafb.c b/drivers/video/vesafb.c index e25eae1..3e58ddc 100644 --- a/drivers/video/vesafb.c +++ b/drivers/video/vesafb.c @@ -245,9 +245,8 @@ static int __init vesafb_setup(char *options) return 0; } -static int __init vesafb_probe(struct device *device) +static int __init vesafb_probe(struct platform_device *dev) { - struct platform_device *dev = to_platform_device(device); struct fb_info *info; int i, err; unsigned int size_vmode; @@ -414,6 +413,7 @@ static int __init vesafb_probe(struct device *device) * region already (FIXME) */ request_region(0x3c0, 32, "vesafb"); +#ifdef CONFIG_MTRR if (mtrr) { unsigned int temp_size = size_total; unsigned int type = 0; @@ -451,6 +451,7 @@ static int __init vesafb_probe(struct device *device) } while (temp_size >= PAGE_SIZE && rc == -EINVAL); } } +#endif info->fbops = &vesafb_ops; info->var = vesafb_defined; @@ -480,10 +481,11 @@ err: return err; } -static struct device_driver vesafb_driver = { - .name = "vesafb", - .bus = &platform_bus_type, +static struct platform_driver vesafb_driver = { .probe = vesafb_probe, + .driver = { + .name = "vesafb", + }, }; static struct platform_device vesafb_device = { @@ -498,12 +500,12 @@ static int __init vesafb_init(void) /* ignore error return of fb_get_options */ fb_get_options("vesafb", &option); vesafb_setup(option); - ret = driver_register(&vesafb_driver); + ret = platform_driver_register(&vesafb_driver); if (!ret) { ret = platform_device_register(&vesafb_device); if (ret) - driver_unregister(&vesafb_driver); + platform_driver_unregister(&vesafb_driver); } return ret; } diff --git a/drivers/video/vfb.c b/drivers/video/vfb.c index 8794dc5..ffa1ad4 100644 --- a/drivers/video/vfb.c +++ b/drivers/video/vfb.c @@ -403,9 +403,8 @@ static void vfb_platform_release(struct device *device) // This is called when the reference count goes to zero. } -static int __init vfb_probe(struct device *device) +static int __init vfb_probe(struct platform_device *dev) { - struct platform_device *dev = to_platform_device(device); struct fb_info *info; int retval = -ENOMEM; @@ -447,7 +446,7 @@ static int __init vfb_probe(struct device *device) retval = register_framebuffer(info); if (retval < 0) goto err2; - dev_set_drvdata(&dev->dev, info); + platform_set_drvdata(dev, info); printk(KERN_INFO "fb%d: Virtual frame buffer device, using %ldK of video memory\n", @@ -462,9 +461,9 @@ err: return retval; } -static int vfb_remove(struct device *device) +static int vfb_remove(struct platform_device *dev) { - struct fb_info *info = dev_get_drvdata(device); + struct fb_info *info = platform_get_drvdata(dev); if (info) { unregister_framebuffer(info); @@ -474,11 +473,12 @@ static int vfb_remove(struct device *device) return 0; } -static struct device_driver vfb_driver = { - .name = "vfb", - .bus = &platform_bus_type, +static struct platform_driver vfb_driver = { .probe = vfb_probe, .remove = vfb_remove, + .driver = { + .name = "vfb", + }, }; static struct platform_device vfb_device = { @@ -504,12 +504,12 @@ static int __init vfb_init(void) if (!vfb_enable) return -ENXIO; - ret = driver_register(&vfb_driver); + ret = platform_driver_register(&vfb_driver); if (!ret) { ret = platform_device_register(&vfb_device); if (ret) - driver_unregister(&vfb_driver); + platform_driver_unregister(&vfb_driver); } return ret; } @@ -520,7 +520,7 @@ module_init(vfb_init); static void __exit vfb_exit(void) { platform_device_unregister(&vfb_device); - driver_unregister(&vfb_driver); + platform_driver_unregister(&vfb_driver); } module_exit(vfb_exit); diff --git a/drivers/video/w100fb.c b/drivers/video/w100fb.c index 48e70f1..f6e24ee 100644 --- a/drivers/video/w100fb.c +++ b/drivers/video/w100fb.c @@ -437,9 +437,9 @@ static void w100fb_restore_vidmem(struct w100fb_par *par) } } -static int w100fb_suspend(struct device *dev, pm_message_t state) +static int w100fb_suspend(struct platform_device *dev, pm_message_t state) { - struct fb_info *info = dev_get_drvdata(dev); + struct fb_info *info = platform_get_drvdata(dev); struct w100fb_par *par=info->par; struct w100_tg_info *tg = par->mach->tg; @@ -452,9 +452,9 @@ static int w100fb_suspend(struct device *dev, pm_message_t state) return 0; } -static int w100fb_resume(struct device *dev) +static int w100fb_resume(struct platform_device *dev) { - struct fb_info *info = dev_get_drvdata(dev); + struct fb_info *info = platform_get_drvdata(dev); struct w100fb_par *par=info->par; struct w100_tg_info *tg = par->mach->tg; @@ -473,13 +473,12 @@ static int w100fb_resume(struct device *dev) #endif -int __init w100fb_probe(struct device *dev) +int __init w100fb_probe(struct platform_device *pdev) { int err = -EIO; struct w100fb_mach_info *inf; struct fb_info *info = NULL; struct w100fb_par *par; - struct platform_device *pdev = to_platform_device(dev); struct resource *mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); unsigned int chip_id; @@ -515,16 +514,16 @@ int __init w100fb_probe(struct device *dev) if (remapped_fbuf == NULL) goto out; - info=framebuffer_alloc(sizeof(struct w100fb_par), dev); + info=framebuffer_alloc(sizeof(struct w100fb_par), &pdev->dev); if (!info) { err = -ENOMEM; goto out; } par = info->par; - dev_set_drvdata(dev, info); + platform_set_drvdata(pdev, info); - inf = dev->platform_data; + inf = pdev->dev.platform_data; par->chip_id = chip_id; par->mach = inf; par->fastpll_mode = 0; @@ -600,10 +599,10 @@ int __init w100fb_probe(struct device *dev) goto out; } - device_create_file(dev, &dev_attr_fastpllclk); - device_create_file(dev, &dev_attr_reg_read); - device_create_file(dev, &dev_attr_reg_write); - device_create_file(dev, &dev_attr_flip); + device_create_file(&pdev->dev, &dev_attr_fastpllclk); + device_create_file(&pdev->dev, &dev_attr_reg_read); + device_create_file(&pdev->dev, &dev_attr_reg_write); + device_create_file(&pdev->dev, &dev_attr_flip); printk(KERN_INFO "fb%d: %s frame buffer device\n", info->node, info->fix.id); return 0; @@ -622,15 +621,15 @@ out: } -static int w100fb_remove(struct device *dev) +static int w100fb_remove(struct platform_device *pdev) { - struct fb_info *info = dev_get_drvdata(dev); + struct fb_info *info = platform_get_drvdata(pdev); struct w100fb_par *par=info->par; - device_remove_file(dev, &dev_attr_fastpllclk); - device_remove_file(dev, &dev_attr_reg_read); - device_remove_file(dev, &dev_attr_reg_write); - device_remove_file(dev, &dev_attr_flip); + device_remove_file(&pdev->dev, &dev_attr_fastpllclk); + device_remove_file(&pdev->dev, &dev_attr_reg_read); + device_remove_file(&pdev->dev, &dev_attr_reg_write); + device_remove_file(&pdev->dev, &dev_attr_flip); unregister_framebuffer(info); @@ -1448,23 +1447,24 @@ static void w100_vsync(void) writel(0x00000002, remapped_regs + mmGEN_INT_STATUS); } -static struct device_driver w100fb_driver = { - .name = "w100fb", - .bus = &platform_bus_type, +static struct platform_driver w100fb_driver = { .probe = w100fb_probe, .remove = w100fb_remove, .suspend = w100fb_suspend, .resume = w100fb_resume, + .driver = { + .name = "w100fb", + }, }; int __devinit w100fb_init(void) { - return driver_register(&w100fb_driver); + return platform_driver_register(&w100fb_driver); } void __exit w100fb_cleanup(void) { - driver_unregister(&w100fb_driver); + platform_driver_unregister(&w100fb_driver); } module_init(w100fb_init); |