Commit 55bcabb2 authored by James Simmons's avatar James Simmons

Sync up.

parents 975f679b 87520e1e
...@@ -9,12 +9,12 @@ Introduction ...@@ -9,12 +9,12 @@ Introduction
combinations and it seems that it works. combinations and it seems that it works.
The main page is located at <http://sstfb.sourceforge.net>, and if The main page is located at <http://sstfb.sourceforge.net>, and if
you want the latest version, check out the CVS, as the driver is a work you want the latest version, check out the CVS, as the driver is a work
in progress, i feel incomfortable with releasing tarballs of something in progress, I feel uncomfortable with releasing tarballs of something
not completely working...Don't worry, it's still more than useable not completely working...Don't worry, it's still more than useable
(I eat my own dog food) (I eat my own dog food)
Please read the Bug section, and report any success or failure to me Please read the Bug section, and report any success or failure to me
(Ghozlane Toumi <gtoumi@messel.emse.fr>). (Ghozlane Toumi <gtoumi@laposte.net>).
BTW, If you have only one monitor , and you don't feel like playing BTW, If you have only one monitor , and you don't feel like playing
with the vga passthrou cable, I can only suggest borrowing a screen with the vga passthrou cable, I can only suggest borrowing a screen
somewhere... somewhere...
...@@ -22,8 +22,9 @@ Introduction ...@@ -22,8 +22,9 @@ Introduction
Installation Installation
This driver (should) work on ix86, with any 2.2.x kernel (tested This driver (should) work on ix86, with "late" 2.2.x kernel (tested
with x = 19) and "recent" 2.4.x kernel, as a module or compiled in. with x = 19) and "recent" 2.4.x kernel, as a module or compiled in.
It has been included in mainstream kernel since the infamous 2.4.10.
You can apply the patches found in sstfb/kernel/*-2.{2|4}.x.patch, You can apply the patches found in sstfb/kernel/*-2.{2|4}.x.patch,
and copy sstfb.c to linux/drivers/video/, or apply a single patch, and copy sstfb.c to linux/drivers/video/, or apply a single patch,
sstfb/patch-2.{2|4}.x-sstfb-yymmdd to your linux source tree. sstfb/patch-2.{2|4}.x-sstfb-yymmdd to your linux source tree.
...@@ -41,7 +42,7 @@ Module Usage ...@@ -41,7 +42,7 @@ Module Usage
module, the 3dfx takes control of the output, so you'll have to module, the 3dfx takes control of the output, so you'll have to
plug the monitor to the "normal" video board in order to issue plug the monitor to the "normal" video board in order to issue
the commands, or you can blindly use sst_dbg_vgapass the commands, or you can blindly use sst_dbg_vgapass
in the tools directory (See Tools). The latest option is pass the in the tools directory (See Tools). The latest solution is pass the
parameter vgapass=1 when insmodding the driver. (See Kernel/Modules parameter vgapass=1 when insmodding the driver. (See Kernel/Modules
Options) Options)
...@@ -77,36 +78,39 @@ Kernel/Modules Options ...@@ -77,36 +78,39 @@ Kernel/Modules Options
in kernel : video=sstfb:option1,option2:value2,option3 ... in kernel : video=sstfb:option1,option2:value2,option3 ...
sstfb supports the folowing options : sstfb supports the folowing options :
module kernel description
vgapass=1 vgapass enable or disable VGA passthrou cable Module Kernel Description
vgapass=0 vganopass when enabled, the monitor will
get the signal from the VGA board
and not from the voodoo. default nopass
mem=x mem:x force frame buffer memory in MiB vgapass=0 vganopass Enable or disable VGA passthrou cable.
allowed values: 1, 2, 4. default detect vgapass=1 vgapass When enabled, the monitor will get the signal
from the VGA board and not from the voodoo.
Default: nopass
inverse=1 inverse suposed to enable inverse console. mem=x mem:x Force frame buffer memory in MiB
doesn't work ... allowed values: 0, 1, 2, 4.
Default: 0 (= autodetect)
clipping=1 clipping enable or disable clipping . with inverse=1 inverse Supposed to enable inverse console.
clipping=0 noclipping clipping enabled, all offscreen reads doesn't work yet...
and writes are disgarded. default:
enable clipping.
gfxclk=x gfxclk:x force graphic clock frequency (in MHz) clipping=1 clipping Enable or disable clipping.
becarefull with this option . clipping=0 noclipping With clipping enabled, all offscreen
default is 50Mhz for voodoo1, 75MHz reads and writes are disgarded.
for voodoo2. Be carefull, this one is Default: enable clipping.
dangerous. default=auto
slowpci=0 slowpci enable or disable fast PCI read/writes gfxclk=x gfxclk:x Force graphic clock frequency (in MHz).
slowpci=1 fastpci default : fastpci Be carefull with this option, it may be
DANGEROUS.
Default: auto
50Mhz for Voodoo 1,
75MHz for Voodoo 2.
dev=x dev:x attach the driver to device number x slowpci=1 fastpci Enable or disable fast PCI read/writes.
0 is the first compatible board (in slowpci=1 slowpci Default : fastpci
lspci order)
dev=x dev:x Attach the driver to device number x.
0 is the first compatible board (in
lspci order)
Tools Tools
...@@ -126,8 +130,8 @@ Bugs ...@@ -126,8 +130,8 @@ Bugs
- DO NOT use glide while the sstfb module is in, you'll most likely - DO NOT use glide while the sstfb module is in, you'll most likely
hang your computer. hang your computer.
- if you see some artefacts (pixels not cleaning and stuff like that), - If you see some artefacts (pixels not cleaning and stuff like that),
try turning off clipping (clipping=0) try turning off clipping (clipping=0), and/or using slowpci
- the driver don't detect the 4Mb frame buffer voodoos, it seems that - the driver don't detect the 4Mb frame buffer voodoos, it seems that
the 2 last Mbs wrap around. looking into that . the 2 last Mbs wrap around. looking into that .
- The driver is 16 bpp only, 24/32 won't work. - The driver is 16 bpp only, 24/32 won't work.
...@@ -137,8 +141,8 @@ Bugs ...@@ -137,8 +141,8 @@ Bugs
patterns at the border of your windows (the pixels loose the lowest patterns at the border of your windows (the pixels loose the lowest
byte -> basicaly the blue component nd some of the green) . I'm unable byte -> basicaly the blue component nd some of the green) . I'm unable
to reproduce this with XFree86-3.3, but one of the testers has this to reproduce this with XFree86-3.3, but one of the testers has this
problem with XFree86-4. I don't know yet if this is the drivers fault problem with XFree86-4. apparently recent Xfree86-4.x solve this
or X's (most likely the driver, of course). problem.
- I didn't really test changing the palette, so you may find some weird - I didn't really test changing the palette, so you may find some weird
things when playing with that. things when playing with that.
- Sometimes the driver will not recognise the DAC , and the - Sometimes the driver will not recognise the DAC , and the
...@@ -147,6 +151,9 @@ Bugs ...@@ -147,6 +151,9 @@ Bugs
contact me . contact me .
- the 24/32 is not likely to work anytime soon , knowing that the - the 24/32 is not likely to work anytime soon , knowing that the
hardware does ... unusual thigs in 24/32 bpp hardware does ... unusual thigs in 24/32 bpp
- When used with anther video board, current limitations of linux
console subsystem can cause some troubles, specificaly, you should
disable software scrollback , as it can oops badly ...
Todo Todo
...@@ -154,14 +161,14 @@ Todo ...@@ -154,14 +161,14 @@ Todo
- Buy more coffee. - Buy more coffee.
- test/port to other arch. - test/port to other arch.
- try to add panning using tweeks with front and back buffer . - try to add panning using tweeks with front and back buffer .
- try to implement accel en voodoo2 , this board can actualy do a - try to implement accel on voodoo2 , this board can actualy do a
lot in 2D even if it was sold as a 3D only board ... lot in 2D even if it was sold as a 3D only board ...
ghoz. ghoz.
-- --
Ghozlane Toumi <gtoumi@messel.emse.fr> Ghozlane Toumi <gtoumi@laposte.net>
$Date: 2001/08/29 00:21:11 $ $Date: 2002/05/09 20:11:45 $
http://sstfb.sourceforge.net/README http://sstfb.sourceforge.net/README
...@@ -241,12 +241,6 @@ CONFIG_FB ...@@ -241,12 +241,6 @@ CONFIG_FB
and strongly recommended if you are compiling a kernel for an Apple and strongly recommended if you are compiling a kernel for an Apple
machine. machine.
CONFIG_FB_COMPAT_XPMAC
If you use the Xpmac X server (common with mklinux), you'll need to
say Y here to use X. You should consider changing to XFree86 which
includes a server that supports the frame buffer device directly
(XF68_FBDev).
CONFIG_SCSI CONFIG_SCSI
If you want to use a SCSI hard disk, SCSI tape drive, SCSI CD-ROM or If you want to use a SCSI hard disk, SCSI tape drive, SCSI CD-ROM or
any other SCSI device under Linux, say Y and make sure that you know any other SCSI device under Linux, say Y and make sure that you know
......
...@@ -478,9 +478,6 @@ if [ "$CONFIG_4xx" != "y" -a "$CONFIG_8xx" != "y" ]; then ...@@ -478,9 +478,6 @@ if [ "$CONFIG_4xx" != "y" -a "$CONFIG_8xx" != "y" ]; then
bool 'VGA text console' CONFIG_VGA_CONSOLE bool 'VGA text console' CONFIG_VGA_CONSOLE
fi fi
source drivers/video/Config.in source drivers/video/Config.in
if [ "$CONFIG_FB" = "y" -a "$CONFIG_ALL_PPC" = "y" ]; then
bool 'Backward compatibility mode for Xpmac' CONFIG_FB_COMPAT_XPMAC
fi
endmenu endmenu
......
...@@ -33,10 +33,6 @@ ...@@ -33,10 +33,6 @@
#include <linux/kbd_diacr.h> #include <linux/kbd_diacr.h>
#include <linux/selection.h> #include <linux/selection.h>
#ifdef CONFIG_FB_COMPAT_XPMAC
#include <asm/vc_ioctl.h>
#endif /* CONFIG_FB_COMPAT_XPMAC */
char vt_dont_switch; char vt_dont_switch;
extern struct tty_driver console_driver; extern struct tty_driver console_driver;
...@@ -1047,68 +1043,6 @@ int vt_ioctl(struct tty_struct *tty, struct file * file, ...@@ -1047,68 +1043,6 @@ int vt_ioctl(struct tty_struct *tty, struct file * file,
return -EPERM; return -EPERM;
vt_dont_switch = 0; vt_dont_switch = 0;
return 0; return 0;
#ifdef CONFIG_FB_COMPAT_XPMAC
case VC_GETMODE:
{
struct vc_mode mode;
i = verify_area(VERIFY_WRITE, (void *) arg,
sizeof(struct vc_mode));
if (i == 0)
i = console_getmode(&mode);
if (i)
return i;
if (copy_to_user((void *) arg, &mode, sizeof(mode)))
return -EFAULT;
return 0;
}
case VC_SETMODE:
case VC_INQMODE:
{
struct vc_mode mode;
if (!perm)
return -EPERM;
if (copy_from_user(&mode, (void *) arg, sizeof(mode)))
return -EFAULT;
return console_setmode(&mode, cmd == VC_SETMODE);
}
case VC_SETCMAP:
{
unsigned char cmap[3][256], *p;
int n_entries, cmap_size, i, j;
if (!perm)
return -EPERM;
if (arg == (unsigned long) VC_POWERMODE_INQUIRY
|| arg <= VESA_POWERDOWN) {
/* compatibility hack: VC_POWERMODE
was changed from 0x766a to 0x766c */
return console_powermode((int) arg);
}
if (get_user(cmap_size, (int *) arg))
return -EFAULT;
if (cmap_size % 3)
return -EINVAL;
n_entries = cmap_size / 3;
if ((unsigned) n_entries > 256)
return -EINVAL;
p = (unsigned char *) (arg + sizeof(int));
for (j = 0; j < n_entries; ++j)
for (i = 0; i < 3; ++i)
if (get_user(cmap[i][j], p++))
return -EFAULT;
return console_setcmap(n_entries, cmap[0],
cmap[1], cmap[2]);
}
case VC_GETCMAP:
/* not implemented yet */
return -ENOIOCTLCMD;
case VC_POWERMODE:
if (!perm)
return -EPERM;
return console_powermode((int) arg);
#endif /* CONFIG_FB_COMPAT_XPMAC */
default: default:
return -ENOIOCTLCMD; return -ENOIOCTLCMD;
} }
......
...@@ -68,6 +68,12 @@ CONFIG_FB_PM2_CVPPC ...@@ -68,6 +68,12 @@ CONFIG_FB_PM2_CVPPC
Say Y to enable support for the Amiga Phase 5 CVisionPPC BVisionPPC Say Y to enable support for the Amiga Phase 5 CVisionPPC BVisionPPC
framebuffer cards. Phase 5 is no longer with us, alas. framebuffer cards. Phase 5 is no longer with us, alas.
CONFIG_FB_PM3
This is the frame buffer device driver for the 3DLabs Permedia3
chipset, used in Formac ProFormance III, 3DLabs Oxygen VX1 &
similar boards, 3DLabs Permedia3 Create!, Appian Jeronimo 2000
and maybe other boards.
CONFIG_FB_AMIGA CONFIG_FB_AMIGA
This is the frame buffer device driver for the builtin graphics This is the frame buffer device driver for the builtin graphics
chipset found in Amigas. chipset found in Amigas.
...@@ -77,12 +83,6 @@ CONFIG_FB_AMIGA ...@@ -77,12 +83,6 @@ CONFIG_FB_AMIGA
module will be called amifb.o. If you want to compile it as a module will be called amifb.o. If you want to compile it as a
module, say M here and read <file:Documentation/modules.txt>. module, say M here and read <file:Documentation/modules.txt>.
CONFIG_FB_PM3
This is the frame buffer device driver for the 3DLabs Permedia3
chipset, used in Formac ProFormance III, 3DLabs Oxygen VX1 &
similar boards, 3DLabs Permedia3 Create!, Appian Jeronimo 2000
and maybe other boards.
CONFIG_FB_AMIGA_OCS CONFIG_FB_AMIGA_OCS
This enables support for the original Agnus and Denise video chips, This enables support for the original Agnus and Denise video chips,
found in the Amiga 1000 and most A500's and A2000's. If you intend found in the Amiga 1000 and most A500's and A2000's. If you intend
...@@ -594,7 +594,7 @@ CONFIG_FB_IMSTT ...@@ -594,7 +594,7 @@ CONFIG_FB_IMSTT
many Macintosh and compatible computers. many Macintosh and compatible computers.
CONFIG_FB_TX3912 CONFIG_FB_TX3912
The TX3912 is a Toshiba RISC processor based on the MIPS 3900 core The TX3912 is a Toshiba RISC processor based on the MIPS 3900 core;
see <http://www.toshiba.com/taec/components/Generic/risc/tx3912.htm>. see <http://www.toshiba.com/taec/components/Generic/risc/tx3912.htm>.
Say Y here to enable kernel support for the on-board framebuffer. Say Y here to enable kernel support for the on-board framebuffer.
...@@ -716,17 +716,7 @@ CONFIG_FBCON_IPLAN2P8 ...@@ -716,17 +716,7 @@ CONFIG_FBCON_IPLAN2P8
This is the low level frame buffer console driver for 8 interleaved This is the low level frame buffer console driver for 8 interleaved
bitplanes (256 colors) on Atari. bitplanes (256 colors) on Atari.
CONFIG_FBCON_MAC
This is the low level frame buffer console driver for 1/2/4/8/16/32
bits per pixel packed pixels on Mac. It supports variable font
widths for low resolution screens.
CONFIG_FBCON_HGA CONFIG_FBCON_HGA
This is the low level frame buffer console driver for Hercules mono This is the low level frame buffer console driver for Hercules mono
graphics cards. graphics cards.
CONFIG_FBCON_VGA
This is the low level frame buffer console driver for VGA text mode;
it is used by frame buffer device drivers that support VGA text
mode.
...@@ -227,41 +227,35 @@ if [ "$CONFIG_FB" = "y" ]; then ...@@ -227,41 +227,35 @@ if [ "$CONFIG_FB" = "y" ]; then
tristate ' Atari interleaved bitplanes (4 planes) support' CONFIG_FBCON_IPLAN2P4 tristate ' Atari interleaved bitplanes (4 planes) support' CONFIG_FBCON_IPLAN2P4
tristate ' Atari interleaved bitplanes (8 planes) support' CONFIG_FBCON_IPLAN2P8 tristate ' Atari interleaved bitplanes (8 planes) support' CONFIG_FBCON_IPLAN2P8
# tristate ' Atari interleaved bitplanes (16 planes) support' CONFIG_FBCON_IPLAN2P16 # tristate ' Atari interleaved bitplanes (16 planes) support' CONFIG_FBCON_IPLAN2P16
tristate ' Mac variable bpp packed pixels support' CONFIG_FBCON_MAC
tristate ' VGA 16-color planar support' CONFIG_FBCON_VGA_PLANES tristate ' VGA 16-color planar support' CONFIG_FBCON_VGA_PLANES
tristate ' VGA characters/attributes support' CONFIG_FBCON_VGA
tristate ' HGA monochrome support (EXPERIMENTAL)' CONFIG_FBCON_HGA tristate ' HGA monochrome support (EXPERIMENTAL)' CONFIG_FBCON_HGA
else else
# Guess what we need # Guess what we need
if [ "$CONFIG_FB_ACORN" = "y" -o "$CONFIG_FB_AMIGA" = "y" -o \ if [ "$CONFIG_FB_ACORN" = "y" -o "$CONFIG_FB_AMIGA" = "y" -o \
"$CONFIG_FB_ATARI" = "y" -o "$CONFIG_FB_CYBER" = "y" -o \ "$CONFIG_FB_ATARI" = "y" -o "$CONFIG_FB_CYBER" = "y" -o \
"$CONFIG_FB_MAC" = "y" -o "$CONFIG_FB_RETINAZ3" = "y" -o \ "$CONFIG_FB_BWTWO" = "y" -o "$CONFIG_FB_RETINAZ3" = "y" -o \
"$CONFIG_FB_VIRGE" = "y" -o "$CONFIG_FB_CLGEN" = "y" -o \ "$CONFIG_FB_VIRGE" = "y" -o "$CONFIG_FB_CLGEN" = "y" ]; then
"$CONFIG_FB_BWTWO" = "y" ]; then
define_tristate CONFIG_FBCON_MFB y define_tristate CONFIG_FBCON_MFB y
else else
if [ "$CONFIG_FB_ACORN" = "m" -o "$CONFIG_FB_AMIGA" = "m" -o \ if [ "$CONFIG_FB_ACORN" = "m" -o "$CONFIG_FB_AMIGA" = "m" -o \
"$CONFIG_FB_ATARI" = "m" -o "$CONFIG_FB_CYBER" = "m" -o \ "$CONFIG_FB_ATARI" = "m" -o "$CONFIG_FB_CYBER" = "m" -o \
"$CONFIG_FB_MAC" = "m" -o "$CONFIG_FB_RETINAZ3" = "m" -o \ "$CONFIG_FB_BWTWO" = "m" -o "$CONFIG_FB_RETINAZ3" = "m" -o \
"$CONFIG_FB_VIRGE" = "m" -o "$CONFIG_FB_CLGEN" = "m" -o \ "$CONFIG_FB_VIRGE" = "m" -o "$CONFIG_FB_CLGEN" = "m" ]; then
"$CONFIG_FB_BWTWO" = "m" ]; then
define_tristate CONFIG_FBCON_MFB m define_tristate CONFIG_FBCON_MFB m
fi fi
fi fi
if [ "$CONFIG_FB_ACORN" = "y" -o "$CONFIG_FB_MAC" = "y" -o \ if [ "$CONFIG_FB_ACORN" = "y" ]; then
"$CONFIG_FB_SA1100" = "y" ]; then
define_tristate CONFIG_FBCON_CFB2 y define_tristate CONFIG_FBCON_CFB2 y
define_tristate CONFIG_FBCON_CFB4 y define_tristate CONFIG_FBCON_CFB4 y
else else
if [ "$CONFIG_FB_ACORN" = "m" -o "$CONFIG_FB_MAC" = "m" -o \ if [ "$CONFIG_FB_ACORN" = "m" ]; then
"$CONFIG_FB_SA1100" = "m" ]; then
define_tristate CONFIG_FBCON_CFB2 m define_tristate CONFIG_FBCON_CFB2 m
define_tristate CONFIG_FBCON_CFB4 m define_tristate CONFIG_FBCON_CFB4 m
fi fi
fi fi
if [ "$CONFIG_FB_ACORN" = "y" -o "$CONFIG_FB_ATARI" = "y" -o \ if [ "$CONFIG_FB_ACORN" = "y" -o "$CONFIG_FB_ATARI" = "y" -o \
"$CONFIG_FB_ATY" = "y" -o "$CONFIG_FB_MAC" = "y" -o \ "$CONFIG_FB_P9100" = "y" -o "$CONFIG_FB_CYBER2000" = "y" -o \
"$CONFIG_FB_OF" = "y" -o "$CONFIG_FB_TGA" = "y" -o \ "$CONFIG_FB_RADEON" = "y" -o "$CONFIG_FB_TGA" = "y" -o \
"$CONFIG_FB_SIS" = "y" -o "$CONFIG_FB_PM3" = "y" -o \ "$CONFIG_FB_SIS" = "y" -o "$CONFIG_FB_PM3" = "y" -o \
"$CONFIG_FB_TCX" = "y" -o "$CONFIG_FB_CGTHREE" = "y" -o \ "$CONFIG_FB_TCX" = "y" -o "$CONFIG_FB_CGTHREE" = "y" -o \
"$CONFIG_FB_CONTROL" = "y" -o "$CONFIG_FB_CLGEN" = "y" -o \ "$CONFIG_FB_CONTROL" = "y" -o "$CONFIG_FB_CLGEN" = "y" -o \
...@@ -270,15 +264,12 @@ if [ "$CONFIG_FB" = "y" ]; then ...@@ -270,15 +264,12 @@ if [ "$CONFIG_FB" = "y" ]; then
"$CONFIG_FB_VALKYRIE" = "y" -o "$CONFIG_FB_PLATINUM" = "y" -o \ "$CONFIG_FB_VALKYRIE" = "y" -o "$CONFIG_FB_PLATINUM" = "y" -o \
"$CONFIG_FB_IGA" = "y" -o "$CONFIG_FB_MATROX" = "y" -o \ "$CONFIG_FB_IGA" = "y" -o "$CONFIG_FB_MATROX" = "y" -o \
"$CONFIG_FB_CT65550" = "y" -o "$CONFIG_FB_PM2" = "y" -o \ "$CONFIG_FB_CT65550" = "y" -o "$CONFIG_FB_PM2" = "y" -o \
"$CONFIG_FB_P9100" = "y" -o "$CONFIG_FB_ATY128" = "y" -o \ "$CONFIG_FB_ATY" = "y" ]; then
"$CONFIG_FB_RIVA" = "y" -o "$CONFIG_FB_RADEON" = "y" -o \
"$CONFIG_FB_SGIVW" = "y" -o "$CONFIG_FB_CYBER2000" = "y" -o \
"$CONFIG_FB_SA1100" = "y" ]; then
define_tristate CONFIG_FBCON_CFB8 y define_tristate CONFIG_FBCON_CFB8 y
else else
if [ "$CONFIG_FB_ACORN" = "m" -o "$CONFIG_FB_ATARI" = "m" -o \ if [ "$CONFIG_FB_ACORN" = "m" -o "$CONFIG_FB_ATARI" = "m" -o \
"$CONFIG_FB_ATY" = "m" -o "$CONFIG_FB_MAC" = "m" -o \ "$CONFIG_FB_P9100" = "m" -o "$CONFIG_FB_CYBER2000" = "m" -o \
"$CONFIG_FB_OF" = "m" -o "$CONFIG_FB_TGA" = "m" -o \ "$CONFIG_FB_RADEON" = "m" -o "$CONFIG_FB_TGA" = "m" -o \
"$CONFIG_FB_SIS" = "m" -o "$CONFIG_FB_PM3" = "m" -o \ "$CONFIG_FB_SIS" = "m" -o "$CONFIG_FB_PM3" = "m" -o \
"$CONFIG_FB_TCX" = "m" -o "$CONFIG_FB_CGTHREE" = "m" -o \ "$CONFIG_FB_TCX" = "m" -o "$CONFIG_FB_CGTHREE" = "m" -o \
"$CONFIG_FB_CONTROL" = "m" -o "$CONFIG_FB_CLGEN" = "m" -o \ "$CONFIG_FB_CONTROL" = "m" -o "$CONFIG_FB_CLGEN" = "m" -o \
...@@ -286,40 +277,31 @@ if [ "$CONFIG_FB" = "y" ]; then ...@@ -286,40 +277,31 @@ if [ "$CONFIG_FB" = "y" ]; then
"$CONFIG_FB_VIRGE" = "m" -o "$CONFIG_FB_CYBER" = "m" -o \ "$CONFIG_FB_VIRGE" = "m" -o "$CONFIG_FB_CYBER" = "m" -o \
"$CONFIG_FB_VALKYRIE" = "m" -o "$CONFIG_FB_PLATINUM" = "m" -o \ "$CONFIG_FB_VALKYRIE" = "m" -o "$CONFIG_FB_PLATINUM" = "m" -o \
"$CONFIG_FB_IGA" = "m" -o "$CONFIG_FB_MATROX" = "m" -o \ "$CONFIG_FB_IGA" = "m" -o "$CONFIG_FB_MATROX" = "m" -o \
"$CONFIG_FB_CT65550" = "m" -o "$CONFIG_FB_PM2" = "m" -o \ "$CONFIG_FB_CT65550" = "m" -o "$CONFIG_FB_PM2" = "m" ]; then
"$CONFIG_FB_P9100" = "m" -o "$CONFIG_FB_ATY128" = "m" -o \
"$CONFIG_FB_RIVA" = "m" -o "$CONFIG_FB_RADEON" = "m" -o \
"$CONFIG_FB_SGIVW" = "m" -o "$CONFIG_FB_CYBER2000" = "m" -o \
"$CONFIG_FB_SA1100" = "m" ]; then
define_tristate CONFIG_FBCON_CFB8 m define_tristate CONFIG_FBCON_CFB8 m
fi fi
fi fi
if [ "$CONFIG_FB_ATARI" = "y" -o "$CONFIG_FB_ATY" = "y" -o \ if [ "$CONFIG_FB_ATARI" = "y" -o "$CONFIG_FB_PM3" = "y" -o \
"$CONFIG_FB_MAC" = "y" -o "$CONFIG_FB_PVR2" = "y" -o \ "$CONFIG_FB_SIS" = "y" -o "$CONFIG_FB_PVR2" = "y" -o \
"$CONFIG_FB_TRIDENT" = "y" -o "$CONFIG_FB_TBOX" = "y" -o \ "$CONFIG_FB_TRIDENT" = "y" -o "$CONFIG_FB_TBOX" = "y" -o \
"$CONFIG_FB_VOODOO1" = "y" -o "$CONFIG_FB_RADEON" = "y" -o \ "$CONFIG_FB_VOODOO1" = "y" -o "$CONFIG_FB_RADEON" = "y" -o \
"$CONFIG_FB_CONTROL" = "y" -o "$CONFIG_FB_CLGEN" = "y" -o \ "$CONFIG_FB_CONTROL" = "y" -o "$CONFIG_FB_CLGEN" = "y" -o \
"$CONFIG_FB_VIRGE" = "y" -o "$CONFIG_FB_CYBER" = "y" -o \ "$CONFIG_FB_VIRGE" = "y" -o "$CONFIG_FB_CYBER" = "y" -o \
"$CONFIG_FB_VALKYRIE" = "y" -o "$CONFIG_FB_PLATINUM" = "y" -o \ "$CONFIG_FB_VALKYRIE" = "y" -o "$CONFIG_FB_PLATINUM" = "y" -o \
"$CONFIG_FB_CT65550" = "y" -o "$CONFIG_FB_MATROX" = "y" -o \ "$CONFIG_FB_CT65550" = "y" -o "$CONFIG_FB_MATROX" = "y" -o \
"$CONFIG_FB_PM2" = "y" -o "$CONFIG_FB_SGIVW" = "y" -o \ "$CONFIG_FB_PM2" = "y" -o "$CONFIG_FB_CYBER2000" = "y" -o \
"$CONFIG_FB_RIVA" = "y" -o "$CONFIG_FB_ATY128" = "y" -o \ "$CONFIG_FB_ATY" = "y" ]; then
"$CONFIG_FB_CYBER2000" = "y" -o "$CONFIG_FB_PM3" = "y" -o \
"$CONFIG_FB_SIS" = "y" -o "$CONFIG_FB_SA1100" = "y" ]; then
define_tristate CONFIG_FBCON_CFB16 y define_tristate CONFIG_FBCON_CFB16 y
else else
if [ "$CONFIG_FB_ATARI" = "m" -o "$CONFIG_FB_ATY" = "m" -o \ if [ "$CONFIG_FB_ATARI" = "m" -o "$CONFIG_FB_SIS" = "m" -o \
"$CONFIG_FB_MAC" = "m" -o "$CONFIG_FB_PVR2" = "m" -o \ "$CONFIG_FB_RADEON" = "m" -o "$CONFIG_FB_PVR2" = "m" -o \
"$CONFIG_FB_TRIDENT" = "m" -o "$CONFIG_FB_TBOX" = "m" -o \ "$CONFIG_FB_TRIDENT" = "m" -o "$CONFIG_FB_TBOX" = "m" -o \
"$CONFIG_FB_VOODOO1" = "m" -o "$CONFIG_FB_PM3" = "m" -o \ "$CONFIG_FB_VOODOO1" = "m" -o "$CONFIG_FB_PM3" = "m" -o \
"$CONFIG_FB_CONTROL" = "m" -o "$CONFIG_FB_CLGEN" = "m" -o \ "$CONFIG_FB_CONTROL" = "m" -o "$CONFIG_FB_CLGEN" = "m" -o \
"$CONFIG_FB_VIRGE" = "m" -o "$CONFIG_FB_CYBER" = "m" -o \ "$CONFIG_FB_VIRGE" = "m" -o "$CONFIG_FB_CYBER" = "m" -o \
"$CONFIG_FB_VALKYRIE" = "m" -o "$CONFIG_FB_PLATINUM" = "m" -o \ "$CONFIG_FB_VALKYRIE" = "m" -o "$CONFIG_FB_PLATINUM" = "m" -o \
"$CONFIG_FB_CT65550" = "m" -o "$CONFIG_FB_MATROX" = "m" -o \ "$CONFIG_FB_CT65550" = "m" -o "$CONFIG_FB_MATROX" = "m" -o \
"$CONFIG_FB_PM2" = "m" -o "$CONFIG_FB_SGIVW" = "m" -o \ "$CONFIG_FB_PM2" = "m" -o "$CONFIG_FB_CYBER2000" = "m" ]; then
"$CONFIG_FB_RIVA" = "m" -o "$CONFIG_FB_ATY128" = "m" -o \
"$CONFIG_FB_CYBER2000" = "m" -o "$CONFIG_FB_SIS" = "m" -o \
"$CONFIG_FB_SA1100" = "m" -o "$CONFIG_FB_RADEON" = "m" ]; then
define_tristate CONFIG_FBCON_CFB16 m define_tristate CONFIG_FBCON_CFB16 m
fi fi
fi fi
...@@ -340,26 +322,22 @@ if [ "$CONFIG_FB" = "y" ]; then ...@@ -340,26 +322,22 @@ if [ "$CONFIG_FB" = "y" ]; then
define_tristate CONFIG_FBCON_CFB24 m define_tristate CONFIG_FBCON_CFB24 m
fi fi
fi fi
if [ "$CONFIG_FB_ATARI" = "y" -o "$CONFIG_FB_ATY" = "y" -o \ if [ "$CONFIG_FB_ATARI" = "y" -o "$CONFIG_FB_RADEON" = "y" -o \
"$CONFIG_FB_VOODOO1" = "y" -o "$CONFIG_FB_TRIDENT" = "y" -o \ "$CONFIG_FB_VOODOO1" = "y" -o "$CONFIG_FB_TRIDENT" = "y" -o \
"$CONFIG_FB_CONTROL" = "y" -o "$CONFIG_FB_CLGEN" = "y" -o \ "$CONFIG_FB_CONTROL" = "y" -o "$CONFIG_FB_CLGEN" = "y" -o \
"$CONFIG_FB_TGA" = "y" -o "$CONFIG_FB_PLATINUM" = "y" -o \ "$CONFIG_FB_TGA" = "y" -o "$CONFIG_FB_PLATINUM" = "y" -o \
"$CONFIG_FB_MATROX" = "y" -o "$CONFIG_FB_PM2" = "y" -o \ "$CONFIG_FB_MATROX" = "y" -o "$CONFIG_FB_PM2" = "y" -o \
"$CONFIG_FB_RIVA" = "y" -o "$CONFIG_FB_ATY128" = "y" -o \ "$CONFIG_FB_PVR2" = "y" -o "$CONFIG_FB_PM3" = "y" -o \
"$CONFIG_FB_SIS" = "y" -o "$CONFIG_FB_SGIVW" = "y" -o \ "$CONFIG_FB_SIS" = "y" -o "$CONFIG_FB_ATY" = "y" ]; then
"$CONFIG_FB_RADEON" = "y" -o "$CONFIG_FB_PVR2" = "y" -o \
"$CONFIG_FB_PM3" = "y" ]; then
define_tristate CONFIG_FBCON_CFB32 y define_tristate CONFIG_FBCON_CFB32 y
else else
if [ "$CONFIG_FB_ATARI" = "m" -o "$CONFIG_FB_ATY" = "m" -o \ if [ "$CONFIG_FB_ATARI" = "m" -o "$CONFIG_FB_RADEON" = "m" -o \
"$CONFIG_FB_VOODOO1" = "m" -o "$CONFIG_FB_TRIDENT" = "m" -o \ "$CONFIG_FB_VOODOO1" = "m" -o "$CONFIG_FB_TRIDENT" = "m" -o \
"$CONFIG_FB_CONTROL" = "m" -o "$CONFIG_FB_CLGEN" = "m" -o \ "$CONFIG_FB_CONTROL" = "m" -o "$CONFIG_FB_CLGEN" = "m" -o \
"$CONFIG_FB_TGA" = "m" -o "$CONFIG_FB_PLATINUM" = "m" -o \ "$CONFIG_FB_TGA" = "m" -o "$CONFIG_FB_PLATINUM" = "m" -o \
"$CONFIG_FB_MATROX" = "m" -o "$CONFIG_FB_PM2" = "m" -o \ "$CONFIG_FB_MATROX" = "m" -o "$CONFIG_FB_PM2" = "m" -o \
"$CONFIG_FB_RIVA" = "m" -o "$CONFIG_FB_ATY128" = "m" -o \ "$CONFIG_FB_SIS" = "m" -o "$CONFIG_FB_PVR2" = "m" -o \
"$CONFIG_FB_PM3" = "m" -o "$CONFIG_FB_RADEON" = "m" -o \ "$CONFIG_FB_PM3" = "m" ]; then
"$CONFIG_FB_SGIVW" = "m" -o "$CONFIG_FB_SIS" = "m" -o \
"$CONFIG_FB_PVR2" = "m" ]; then
define_tristate CONFIG_FBCON_CFB32 m define_tristate CONFIG_FBCON_CFB32 m
fi fi
fi fi
...@@ -370,12 +348,18 @@ if [ "$CONFIG_FB" = "y" ]; then ...@@ -370,12 +348,18 @@ if [ "$CONFIG_FB" = "y" ]; then
"$CONFIG_FB_VIRTUAL" = "y" -o "$CONFIG_FB_CLPS711X" = "y" -o \ "$CONFIG_FB_VIRTUAL" = "y" -o "$CONFIG_FB_CLPS711X" = "y" -o \
"$CONFIG_FB_PMAG_BA" = "y" -o "$CONFIG_FB_PMAGB_B" = "y" -o \ "$CONFIG_FB_PMAG_BA" = "y" -o "$CONFIG_FB_PMAGB_B" = "y" -o \
"$CONFIG_FB_3DFX" = "y" -o "$CONFIG_FB_TX3912" = "y" -o \ "$CONFIG_FB_3DFX" = "y" -o "$CONFIG_FB_TX3912" = "y" -o \
"$CONFIG_FB_MAXINE" = "y" -o "$CONFIG_FB_APOLLO" = "y" ]; then "$CONFIG_FB_MAXINE" = "y" -o "$CONFIG_FB_APOLLO" = "y" -o \
"$CONFIG_FB_ATY128" = "y" -o "$CONFIG_FB_MAC" = "y" -o \
"$CONFIG_FB_RIVA" = "y" -o "$CONFIG_FB_SA1100" = "y" -o \
"$CONFIG_FB_OF" = "y" -o "$CONFIG_FB_SGIVW" = "y" -o \
"$CONFIG_FB_ATY" = "y" ]; then
define_tristate CONFIG_FBCON_ACCEL y define_tristate CONFIG_FBCON_ACCEL y
else else
if [ "$CONFIG_FB_NEOMAGIC" = "m" -o "$CONFIG_FB_HIT" = "m" -o \ if [ "$CONFIG_FB_NEOMAGIC" = "m" -o "$CONFIG_FB_HIT" = "m" -o \
"$CONFIG_FB_G364" = "m" -o "$CONFIG_FB_VIRTUAL" = "m" -o \ "$CONFIG_FB_G364" = "m" -o "$CONFIG_FB_VIRTUAL" = "m" -o \
"$CONFIG_FB_CLPS711X" = "m" -o "$CONFIG_FB_3DFX" = "m" ]; then "$CONFIG_FB_CLPS711X" = "m" -o "$CONFIG_FB_3DFX" = "m" -o \
"$CONFIG_FB_RIVA" = "m" -o "$CONFIG_FB_ATY128" = "m" -o \
"$CONFIG_FB_SGIVW" = "m" -o "$CONFIG_FB_ATY" = "m" ]; then
define_tristate CONFIG_FBCON_ACCEL m define_tristate CONFIG_FBCON_ACCEL m
fi fi
fi fi
...@@ -401,13 +385,6 @@ if [ "$CONFIG_FB" = "y" ]; then ...@@ -401,13 +385,6 @@ if [ "$CONFIG_FB" = "y" ]; then
# define_tristate CONFIG_FBCON_IPLAN2P16 m # define_tristate CONFIG_FBCON_IPLAN2P16 m
fi fi
fi fi
if [ "$CONFIG_FB_MAC" = "y" ]; then
define_tristate CONFIG_FBCON_MAC y
else
if [ "$CONFIG_FB_MAC" = "m" ]; then
define_tristate CONFIG_FBCON_MAC m
fi
fi
if [ "$CONFIG_FB_VGA16" = "y" ]; then if [ "$CONFIG_FB_VGA16" = "y" ]; then
define_tristate CONFIG_FBCON_VGA_PLANES y define_tristate CONFIG_FBCON_VGA_PLANES y
else else
......
...@@ -10,8 +10,8 @@ export-objs := fbmem.o fbcmap.o fbcon.o fbmon.o modedb.o \ ...@@ -10,8 +10,8 @@ export-objs := fbmem.o fbcmap.o fbcon.o fbmon.o modedb.o \
fbcon-vga.o fbcon-iplan2p2.o fbcon-iplan2p4.o \ fbcon-vga.o fbcon-iplan2p2.o fbcon-iplan2p4.o \
fbcon-iplan2p8.o fbcon-vga-planes.o fbcon-cfb16.o \ fbcon-iplan2p8.o fbcon-vga-planes.o fbcon-cfb16.o \
fbcon-cfb2.o fbcon-cfb24.o fbcon-cfb32.o fbcon-cfb4.o \ fbcon-cfb2.o fbcon-cfb24.o fbcon-cfb32.o fbcon-cfb4.o \
fbcon-cfb8.o fbcon-mac.o fbcon-mfb.o \ fbcon-cfb8.o fbcon-mfb.o fbcon-hga.o \
cyber2000fb.o sa1100fb.o fbcon-hga.o fbgen.o cyber2000fb.o sa1100fb.o fbgen.o
# Each configuration option enables a list of files. # Each configuration option enables a list of files.
...@@ -56,9 +56,9 @@ obj-$(CONFIG_FB_ANAKIN) += anakinfb.o cfbfillrect.o cfbcopyarea.o cfbi ...@@ -56,9 +56,9 @@ obj-$(CONFIG_FB_ANAKIN) += anakinfb.o cfbfillrect.o cfbcopyarea.o cfbi
obj-$(CONFIG_FB_CLPS711X) += clps711xfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o obj-$(CONFIG_FB_CLPS711X) += clps711xfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
obj-$(CONFIG_FB_CYBER) += cyberfb.o obj-$(CONFIG_FB_CYBER) += cyberfb.o
obj-$(CONFIG_FB_CYBER2000) += cyber2000fb.o obj-$(CONFIG_FB_CYBER2000) += cyber2000fb.o
obj-$(CONFIG_FB_SGIVW) += sgivwfb.o obj-$(CONFIG_FB_SGIVW) += sgivwfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
obj-$(CONFIG_FB_3DFX) += tdfxfb.o obj-$(CONFIG_FB_3DFX) += tdfxfb.o
obj-$(CONFIG_FB_MAC) += macfb.o macmodes.o obj-$(CONFIG_FB_MAC) += macfb.o macmodes.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
obj-$(CONFIG_FB_HP300) += hpfb.o cfbfillrect.o cfbimgblt.o obj-$(CONFIG_FB_HP300) += hpfb.o cfbfillrect.o cfbimgblt.o
obj-$(CONFIG_FB_OF) += offb.o obj-$(CONFIG_FB_OF) += offb.o
obj-$(CONFIG_FB_IMSTT) += imsttfb.o obj-$(CONFIG_FB_IMSTT) += imsttfb.o
...@@ -94,7 +94,7 @@ obj-$(CONFIG_FB_ATY) += aty/ ...@@ -94,7 +94,7 @@ obj-$(CONFIG_FB_ATY) += aty/
obj-$(CONFIG_FB_SUN3) += sun3fb.o obj-$(CONFIG_FB_SUN3) += sun3fb.o
obj-$(CONFIG_FB_BWTWO) += bwtwofb.o obj-$(CONFIG_FB_BWTWO) += bwtwofb.o
obj-$(CONFIG_FB_HGA) += hgafb.o obj-$(CONFIG_FB_HGA) += hgafb.o
obj-$(CONFIG_FB_SA1100) += sa1100fb.o obj-$(CONFIG_FB_SA1100) += sa1100fb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
obj-$(CONFIG_FB_VIRTUAL) += vfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o obj-$(CONFIG_FB_VIRTUAL) += vfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
obj-$(CONFIG_FB_HIT) += hitfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o obj-$(CONFIG_FB_HIT) += hitfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
obj-$(CONFIG_FB_E1355) += epson1355fb.o obj-$(CONFIG_FB_E1355) += epson1355fb.o
...@@ -114,9 +114,7 @@ obj-$(CONFIG_FBCON_ILBM) += fbcon-ilbm.o ...@@ -114,9 +114,7 @@ obj-$(CONFIG_FBCON_ILBM) += fbcon-ilbm.o
obj-$(CONFIG_FBCON_IPLAN2P2) += fbcon-iplan2p2.o obj-$(CONFIG_FBCON_IPLAN2P2) += fbcon-iplan2p2.o
obj-$(CONFIG_FBCON_IPLAN2P4) += fbcon-iplan2p4.o obj-$(CONFIG_FBCON_IPLAN2P4) += fbcon-iplan2p4.o
obj-$(CONFIG_FBCON_IPLAN2P8) += fbcon-iplan2p8.o obj-$(CONFIG_FBCON_IPLAN2P8) += fbcon-iplan2p8.o
obj-$(CONFIG_FBCON_MAC) += fbcon-mac.o
obj-$(CONFIG_FBCON_MFB) += fbcon-mfb.o obj-$(CONFIG_FBCON_MFB) += fbcon-mfb.o
obj-$(CONFIG_FBCON_VGA) += fbcon-vga.o
obj-$(CONFIG_FBCON_HGA) += fbcon-hga.o obj-$(CONFIG_FBCON_HGA) += fbcon-hga.o
obj-$(CONFIG_FBCON_STI) += fbcon-sti.o obj-$(CONFIG_FBCON_STI) += fbcon-sti.o
obj-$(CONFIG_FBCON_ACCEL) += fbcon-accel.o obj-$(CONFIG_FBCON_ACCEL) += fbcon-accel.o
......
...@@ -41,9 +41,6 @@ ...@@ -41,9 +41,6 @@
#include <asm/prom.h> #include <asm/prom.h>
#include <asm/pci-bridge.h> #include <asm/pci-bridge.h>
#include <linux/pci.h> #include <linux/pci.h>
#ifdef CONFIG_FB_COMPAT_XPMAC
#include <asm/vc_ioctl.h>
#endif
#include <video/fbcon.h> #include <video/fbcon.h>
#include <video/fbcon-cfb8.h> #include <video/fbcon-cfb8.h>
...@@ -540,22 +537,6 @@ static void __init s3triofb_of_init(struct device_node *dp) ...@@ -540,22 +537,6 @@ static void __init s3triofb_of_init(struct device_node *dp)
fb_info.setcmap = &s3triofbcon_setcmap; fb_info.setcmap = &s3triofbcon_setcmap;
#endif #endif
#ifdef CONFIG_FB_COMPAT_XPMAC
if (!console_fb_info) {
display_info.height = fb_var.yres;
display_info.width = fb_var.xres;
display_info.depth = 8;
display_info.pitch = fb_fix.line_length;
display_info.mode = 0;
strncpy(display_info.name, dp->name, sizeof(display_info.name));
display_info.fb_address = (unsigned long)fb_fix.smem_start;
display_info.disp_reg_address = address + 0x1008000;
display_info.cmap_adr_address = address + 0x1008000 + 0x3c8;
display_info.cmap_data_address = address + 0x1008000 + 0x3c9;
console_fb_info = &fb_info;
}
#endif /* CONFIG_FB_COMPAT_XPMAC) */
fb_info.flags = FBINFO_FLAG_DEFAULT; fb_info.flags = FBINFO_FLAG_DEFAULT;
if (register_framebuffer(&fb_info) < 0) if (register_framebuffer(&fb_info) < 0)
return; return;
......
...@@ -61,7 +61,6 @@ ...@@ -61,7 +61,6 @@
#include <asm/amigahw.h> #include <asm/amigahw.h>
#include <asm/amigaints.h> #include <asm/amigaints.h>
#include <asm/setup.h> #include <asm/setup.h>
#include <asm/io.h>
#include <video/fbcon.h> #include <video/fbcon.h>
#include <video/fbcon-afb.h> #include <video/fbcon-afb.h>
...@@ -1173,16 +1172,51 @@ static struct fb_ops amifb_ops = { ...@@ -1173,16 +1172,51 @@ static struct fb_ops amifb_ops = {
fb_set_cmap: gen_set_cmap, fb_set_cmap: gen_set_cmap,
fb_setcolreg: amifb_setcolreg, fb_setcolreg: amifb_setcolreg,
fb_pan_display: amifb_pan_display, fb_pan_display: amifb_pan_display,
fb_blankL: amifb_blank, fb_blank: amifb_blank,
fb_ioctl: amifb_ioctl, fb_ioctl: amifb_ioctl,
}; };
static void __init amifb_setup_mcap(char *spec)
{
char *p;
int vmin, vmax, hmin, hmax;
/* Format for monitor capabilities is: <Vmin>;<Vmax>;<Hmin>;<Hmax>
* <V*> vertical freq. in Hz
* <H*> horizontal freq. in kHz
*/
if (!(p = strsep(&spec, ";")) || !*p)
return;
vmin = simple_strtoul(p, NULL, 10);
if (vmin <= 0)
return;
if (!(p = strsep(&spec, ";")) || !*p)
return;
vmax = simple_strtoul(p, NULL, 10);
if (vmax <= 0 || vmax <= vmin)
return;
if (!(p = strsep(&spec, ";")) || !*p)
return;
hmin = 1000 * simple_strtoul(p, NULL, 10);
if (hmin <= 0)
return;
if (!(p = strsep(&spec, "")) || !*p)
return;
hmax = 1000 * simple_strtoul(p, NULL, 10);
if (hmax <= 0 || hmax <= hmin)
return;
fb_info.monspecs.vfmin = vmin;
fb_info.monspecs.vfmax = vmax;
fb_info.monspecs.hfmin = hmin;
fb_info.monspecs.hfmax = hmax;
}
int __init amifb_setup(char *options) int __init amifb_setup(char *options)
{ {
char *this_opt; char *this_opt;
char mcap_spec[80];
mcap_spec[0] = '\0';
fb_info.fontname[0] = '\0'; fb_info.fontname[0] = '\0';
if (!options || !*options) if (!options || !*options)
...@@ -1199,7 +1233,7 @@ int __init amifb_setup(char *options) ...@@ -1199,7 +1233,7 @@ int __init amifb_setup(char *options)
} else if (!strcmp(this_opt, "ilbm")) } else if (!strcmp(this_opt, "ilbm"))
amifb_ilbm = 1; amifb_ilbm = 1;
else if (!strncmp(this_opt, "monitorcap:", 11)) else if (!strncmp(this_opt, "monitorcap:", 11))
strcpy(mcap_spec, this_opt+11); amifb_setup_mcap(this_opt+11);
else if (!strncmp(this_opt, "font:", 5)) else if (!strncmp(this_opt, "font:", 5))
strcpy(fb_info.fontname, this_opt+5); strcpy(fb_info.fontname, this_opt+5);
else if (!strncmp(this_opt, "fstart:", 7)) else if (!strncmp(this_opt, "fstart:", 7))
...@@ -1211,43 +1245,6 @@ int __init amifb_setup(char *options) ...@@ -1211,43 +1245,6 @@ int __init amifb_setup(char *options)
if (min_fstrt < 48) if (min_fstrt < 48)
min_fstrt = 48; min_fstrt = 48;
if (*mcap_spec) {
char *p;
int vmin, vmax, hmin, hmax;
/* Format for monitor capabilities is: <Vmin>;<Vmax>;<Hmin>;<Hmax>
* <V*> vertical freq. in Hz
* <H*> horizontal freq. in kHz
*/
if (!(p = strsep(&mcap_spec, ";")) || !*p)
goto cap_invalid;
vmin = simple_strtoul(p, NULL, 10);
if (vmin <= 0)
goto cap_invalid;
if (!(p = strsep(&mcap_spec, ";")) || !*p)
goto cap_invalid;
vmax = simple_strtoul(p, NULL, 10);
if (vmax <= 0 || vmax <= vmin)
goto cap_invalid;
if (!(p = strsep(&mcap_spec, ";")) || !*p)
goto cap_invalid;
hmin = 1000 * simple_strtoul(p, NULL, 10);
if (hmin <= 0)
goto cap_invalid;
if (!(p = strsep(&mcap_spec, "")) || !*p)
goto cap_invalid;
hmax = 1000 * simple_strtoul(p, NULL, 10);
if (hmax <= 0 || hmax <= hmin)
goto cap_invalid;
fb_info.monspecs.vfmin = vmin;
fb_info.monspecs.vfmax = vmax;
fb_info.monspecs.hfmin = hmin;
fb_info.monspecs.hfmax = hmax;
cap_invalid:
;
}
return 0; return 0;
} }
......
This diff is collapsed.
...@@ -3,7 +3,7 @@ export-objs := atyfb_base.o mach64_accel.o ...@@ -3,7 +3,7 @@ export-objs := atyfb_base.o mach64_accel.o
obj-$(CONFIG_FB_ATY) += atyfb.o obj-$(CONFIG_FB_ATY) += atyfb.o
atyfb-y := atyfb_base.o mach64_accel.o atyfb-y := atyfb_base.o mach64_accel.o ../cfbimgblt.o
atyfb-$(CONFIG_FB_ATY_GX) += mach64_gx.o atyfb-$(CONFIG_FB_ATY_GX) += mach64_gx.o
atyfb-$(CONFIG_FB_ATY_CT) += mach64_ct.o mach64_cursor.o atyfb-$(CONFIG_FB_ATY_CT) += mach64_ct.o mach64_cursor.o
atyfb-objs := $(atyfb-y) atyfb-objs := $(atyfb-y)
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
#include <asm/fbio.h> #include <asm/fbio.h>
#endif #endif
#include "mach64.h" #include <video/mach64.h>
#include "atyfb.h" #include "atyfb.h"
...@@ -33,21 +33,20 @@ ...@@ -33,21 +33,20 @@
static const u8 cursor_pixel_map[2] = { 0, 15 }; static const u8 cursor_pixel_map[2] = { 0, 15 };
static const u8 cursor_color_map[2] = { 0, 0xff }; static const u8 cursor_color_map[2] = { 0, 0xff };
static const u8 cursor_bits_lookup[16] = static const u8 cursor_bits_lookup[16] = {
{
0x00, 0x40, 0x10, 0x50, 0x04, 0x44, 0x14, 0x54, 0x00, 0x40, 0x10, 0x50, 0x04, 0x44, 0x14, 0x54,
0x01, 0x41, 0x11, 0x51, 0x05, 0x45, 0x15, 0x55 0x01, 0x41, 0x11, 0x51, 0x05, 0x45, 0x15, 0x55
}; };
static const u8 cursor_mask_lookup[16] = static const u8 cursor_mask_lookup[16] = {
{
0xaa, 0x2a, 0x8a, 0x0a, 0xa2, 0x22, 0x82, 0x02, 0xaa, 0x2a, 0x8a, 0x0a, 0xa2, 0x22, 0x82, 0x02,
0xa8, 0x28, 0x88, 0x08, 0xa0, 0x20, 0x80, 0x00 0xa8, 0x28, 0x88, 0x08, 0xa0, 0x20, 0x80, 0x00
}; };
void aty_set_cursor_color(struct fb_info_aty *fb) void aty_set_cursor_color(struct fb_info *info)
{ {
struct aty_cursor *c = fb->cursor; struct atyfb_par *par = (struct atyfb_par *) info->par;
struct aty_cursor *c = par->cursor;
const u8 *pixel = cursor_pixel_map; /* ++Geert: Why?? */ const u8 *pixel = cursor_pixel_map; /* ++Geert: Why?? */
const u8 *red = cursor_color_map; const u8 *red = cursor_color_map;
const u8 *green = cursor_color_map; const u8 *green = cursor_color_map;
...@@ -58,26 +57,28 @@ void aty_set_cursor_color(struct fb_info_aty *fb) ...@@ -58,26 +57,28 @@ void aty_set_cursor_color(struct fb_info_aty *fb)
return; return;
#ifdef __sparc__ #ifdef __sparc__
if (fb->mmaped && (!fb->fb_info.display_fg if (par->mmaped && (!info->display_fg
|| fb->fb_info.display_fg->vc_num == fb->vtconsole)) || info->display_fg->vc_num ==
par->vtconsole))
return; return;
#endif #endif
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
c->color[i] = (u32)red[i] << 24; c->color[i] = (u32) red[i] << 24;
c->color[i] |= (u32)green[i] << 16; c->color[i] |= (u32) green[i] << 16;
c->color[i] |= (u32)blue[i] << 8; c->color[i] |= (u32) blue[i] << 8;
c->color[i] |= (u32)pixel[i]; c->color[i] |= (u32) pixel[i];
} }
wait_for_fifo(2, fb); wait_for_fifo(2, par);
aty_st_le32(CUR_CLR0, c->color[0], fb); aty_st_le32(CUR_CLR0, c->color[0], par);
aty_st_le32(CUR_CLR1, c->color[1], fb); aty_st_le32(CUR_CLR1, c->color[1], par);
} }
void aty_set_cursor_shape(struct fb_info_aty *fb) void aty_set_cursor_shape(struct fb_info *info)
{ {
struct aty_cursor *c = fb->cursor; struct atyfb_par *par = (struct atyfb_par *) info->par;
struct aty_cursor *c = par->cursor;
u8 *ram, m, b; u8 *ram, m, b;
int x, y; int x, y;
...@@ -85,8 +86,9 @@ void aty_set_cursor_shape(struct fb_info_aty *fb) ...@@ -85,8 +86,9 @@ void aty_set_cursor_shape(struct fb_info_aty *fb)
return; return;
#ifdef __sparc__ #ifdef __sparc__
if (fb->mmaped && (!fb->fb_info.display_fg if (par->mmaped && (!info->display_fg
|| fb->fb_info.display_fg->vc_num == fb->vtconsole)) || info->display_fg->vc_num ==
par->vtconsole))
return; return;
#endif #endif
...@@ -95,26 +97,24 @@ void aty_set_cursor_shape(struct fb_info_aty *fb) ...@@ -95,26 +97,24 @@ void aty_set_cursor_shape(struct fb_info_aty *fb)
for (x = 0; x < c->size.x >> 2; x++) { for (x = 0; x < c->size.x >> 2; x++) {
m = c->mask[x][y]; m = c->mask[x][y];
b = c->bits[x][y]; b = c->bits[x][y];
fb_writeb (cursor_mask_lookup[m >> 4] | fb_writeb(cursor_mask_lookup[m >> 4] |
cursor_bits_lookup[(b & m) >> 4], cursor_bits_lookup[(b & m) >> 4], ram++);
ram++); fb_writeb(cursor_mask_lookup[m & 0x0f] |
fb_writeb (cursor_mask_lookup[m & 0x0f] | cursor_bits_lookup[(b & m) & 0x0f],
cursor_bits_lookup[(b & m) & 0x0f], ram++);
ram++);
} }
for ( ; x < 8; x++) { for (; x < 8; x++) {
fb_writeb (0xaa, ram++); fb_writeb(0xaa, ram++);
fb_writeb (0xaa, ram++); fb_writeb(0xaa, ram++);
} }
} }
fb_memset (ram, 0xaa, (64 - c->size.y) * 16); fb_memset(ram, 0xaa, (64 - c->size.y) * 16);
} }
static void static void aty_set_cursor(struct fb_info *info, int on)
aty_set_cursor(struct fb_info_aty *fb, int on)
{ {
struct atyfb_par *par = &fb->current_par; struct atyfb_par *par = (struct atyfb_par *) info->par;
struct aty_cursor *c = fb->cursor; struct aty_cursor *c = par->cursor;
u16 xoff, yoff; u16 xoff, yoff;
int x, y; int x, y;
...@@ -122,8 +122,9 @@ aty_set_cursor(struct fb_info_aty *fb, int on) ...@@ -122,8 +122,9 @@ aty_set_cursor(struct fb_info_aty *fb, int on)
return; return;
#ifdef __sparc__ #ifdef __sparc__
if (fb->mmaped && (!fb->fb_info.display_fg if (par->mmaped && (!info->display_fg
|| fb->fb_info.display_fg->vc_num == fb->vtconsole)) || info->display_fg->vc_num ==
par->vtconsole))
return; return;
#endif #endif
...@@ -144,67 +145,72 @@ aty_set_cursor(struct fb_info_aty *fb, int on) ...@@ -144,67 +145,72 @@ aty_set_cursor(struct fb_info_aty *fb, int on)
yoff = 0; yoff = 0;
} }
wait_for_fifo(4, fb); wait_for_fifo(4, par);
aty_st_le32(CUR_OFFSET, (c->offset >> 3) + (yoff << 1), fb); aty_st_le32(CUR_OFFSET, (c->offset >> 3) + (yoff << 1),
par);
aty_st_le32(CUR_HORZ_VERT_OFF, aty_st_le32(CUR_HORZ_VERT_OFF,
((u32)(64 - c->size.y + yoff) << 16) | xoff, fb); ((u32) (64 - c->size.y + yoff) << 16) | xoff,
aty_st_le32(CUR_HORZ_VERT_POSN, ((u32)y << 16) | x, fb); par);
aty_st_le32(GEN_TEST_CNTL, aty_ld_le32(GEN_TEST_CNTL, fb) aty_st_le32(CUR_HORZ_VERT_POSN, ((u32) y << 16) | x, par);
| HWCURSOR_ENABLE, fb); aty_st_le32(GEN_TEST_CNTL, aty_ld_le32(GEN_TEST_CNTL, par)
| HWCURSOR_ENABLE, par);
} else { } else {
wait_for_fifo(1, fb); wait_for_fifo(1, par);
aty_st_le32(GEN_TEST_CNTL, aty_st_le32(GEN_TEST_CNTL,
aty_ld_le32(GEN_TEST_CNTL, fb) & ~HWCURSOR_ENABLE, aty_ld_le32(GEN_TEST_CNTL,
fb); par) & ~HWCURSOR_ENABLE, par);
} }
if (fb->blitter_may_be_busy) if (par->blitter_may_be_busy)
wait_for_idle(fb); wait_for_idle(par);
} }
static void static void aty_cursor_timer_handler(unsigned long dev_addr)
aty_cursor_timer_handler(unsigned long dev_addr)
{ {
struct fb_info_aty *fb = (struct fb_info_aty *)dev_addr; struct fb_info *info = (struct fb_info *) dev_addr;
struct atyfb_par *par = (struct atyfb_par *) info->par;
if (!fb->cursor) if (!par->cursor)
return; return;
if (!fb->cursor->enable) if (!par->cursor->enable)
goto out; goto out;
if (fb->cursor->vbl_cnt && --fb->cursor->vbl_cnt == 0) { if (par->cursor->vbl_cnt && --par->cursor->vbl_cnt == 0) {
fb->cursor->on ^= 1; par->cursor->on ^= 1;
aty_set_cursor(fb, fb->cursor->on); aty_set_cursor(info, par->cursor->on);
fb->cursor->vbl_cnt = fb->cursor->blink_rate; par->cursor->vbl_cnt = par->cursor->blink_rate;
} }
out: out:
fb->cursor->timer->expires = jiffies + (HZ / 50); par->cursor->timer->expires = jiffies + (HZ / 50);
add_timer(fb->cursor->timer); add_timer(par->cursor->timer);
} }
void atyfb_cursor(struct display *p, int mode, int x, int y) void atyfb_cursor(struct display *p, int mode, int x, int y)
{ {
struct fb_info_aty *fb = (struct fb_info_aty *)p->fb_info; struct fb_info *info = p->fb_info;
struct aty_cursor *c = fb->cursor; struct atyfb_par *par = (struct atyfb_par *) info->par;
struct aty_cursor *c = par->cursor;
if (!c) if (!c)
return; return;
#ifdef __sparc__ #ifdef __sparc__
if (fb->mmaped && (!fb->fb_info.display_fg if (par->mmaped && (!info->display_fg
|| fb->fb_info.display_fg->vc_num == fb->vtconsole)) || info->display_fg->vc_num ==
par->vtconsole))
return; return;
#endif #endif
x *= fontwidth(p); x *= fontwidth(p);
y *= fontheight(p); y *= fontheight(p);
if (c->pos.x == x && c->pos.y == y && (mode == CM_ERASE) == !c->enable) if (c->pos.x == x && c->pos.y == y
&& (mode == CM_ERASE) == !c->enable)
return; return;
c->enable = 0; c->enable = 0;
if (c->on) if (c->on)
aty_set_cursor(fb, 0); aty_set_cursor(info, 0);
c->pos.x = x; c->pos.x = x;
c->pos.y = y; c->pos.y = y;
...@@ -216,7 +222,7 @@ void atyfb_cursor(struct display *p, int mode, int x, int y) ...@@ -216,7 +222,7 @@ void atyfb_cursor(struct display *p, int mode, int x, int y)
case CM_DRAW: case CM_DRAW:
case CM_MOVE: case CM_MOVE:
if (c->on) if (c->on)
aty_set_cursor(fb, 1); aty_set_cursor(info, 1);
else else
c->vbl_cnt = CURSOR_DRAW_DELAY; c->vbl_cnt = CURSOR_DRAW_DELAY;
c->enable = 1; c->enable = 1;
...@@ -224,7 +230,7 @@ void atyfb_cursor(struct display *p, int mode, int x, int y) ...@@ -224,7 +230,7 @@ void atyfb_cursor(struct display *p, int mode, int x, int y)
} }
} }
struct aty_cursor * __init aty_init_cursor(struct fb_info_aty *fb) struct aty_cursor *__init aty_init_cursor(struct fb_info *info)
{ {
struct aty_cursor *cursor; struct aty_cursor *cursor;
unsigned long addr; unsigned long addr;
...@@ -242,19 +248,19 @@ struct aty_cursor * __init aty_init_cursor(struct fb_info_aty *fb) ...@@ -242,19 +248,19 @@ struct aty_cursor * __init aty_init_cursor(struct fb_info_aty *fb)
memset(cursor->timer, 0, sizeof(*cursor->timer)); memset(cursor->timer, 0, sizeof(*cursor->timer));
cursor->blink_rate = DEFAULT_CURSOR_BLINK_RATE; cursor->blink_rate = DEFAULT_CURSOR_BLINK_RATE;
fb->total_vram -= PAGE_SIZE; info->fix.smem_len -= PAGE_SIZE;
cursor->offset = fb->total_vram; cursor->offset = info->fix.smem_len;
#ifdef __sparc__ #ifdef __sparc__
addr = fb->frame_buffer - 0x800000 + cursor->offset; addr = info->screen_base - 0x800000 + cursor->offset;
cursor->ram = (u8 *)addr; cursor->ram = (u8 *) addr;
#else #else
#ifdef __BIG_ENDIAN #ifdef __BIG_ENDIAN
addr = fb->frame_buffer_phys - 0x800000 + cursor->offset; addr = info->fix.smem_start - 0x800000 + cursor->offset;
cursor->ram = (u8 *)ioremap(addr, 1024); cursor->ram = (u8 *) ioremap(addr, 1024);
#else #else
addr = fb->frame_buffer + cursor->offset; addr = (unsigned long) info->screen_base + cursor->offset;
cursor->ram = (u8 *)addr; cursor->ram = (u8 *) addr;
#endif #endif
#endif #endif
...@@ -265,41 +271,42 @@ struct aty_cursor * __init aty_init_cursor(struct fb_info_aty *fb) ...@@ -265,41 +271,42 @@ struct aty_cursor * __init aty_init_cursor(struct fb_info_aty *fb)
init_timer(cursor->timer); init_timer(cursor->timer);
cursor->timer->expires = jiffies + (HZ / 50); cursor->timer->expires = jiffies + (HZ / 50);
cursor->timer->data = (unsigned long)fb; cursor->timer->data = (unsigned long) info;
cursor->timer->function = aty_cursor_timer_handler; cursor->timer->function = aty_cursor_timer_handler;
add_timer(cursor->timer); add_timer(cursor->timer);
return cursor; return cursor;
} }
int atyfb_set_font(struct display *d, int width, int height) int atyfb_set_font(struct display *d, int width, int height)
{ {
struct fb_info_aty *fb = (struct fb_info_aty *)d->fb_info; struct fb_info *info = d->fb_info;
struct aty_cursor *c = fb->cursor; struct atyfb_par *par = (struct atyfb_par *) info->par;
int i, j; struct aty_cursor *c = par->cursor;
int i, j;
if (c) {
if (!width || !height) { if (c) {
width = 8; if (!width || !height) {
height = 16; width = 8;
} height = 16;
}
c->hot.x = 0; c->hot.x = 0;
c->hot.y = 0; c->hot.y = 0;
c->size.x = width; c->size.x = width;
c->size.y = height; c->size.y = height;
memset(c->bits, 0xff, sizeof(c->bits)); memset(c->bits, 0xff, sizeof(c->bits));
memset(c->mask, 0, sizeof(c->mask)); memset(c->mask, 0, sizeof(c->mask));
for (i = 0, j = width; j >= 0; j -= 8, i++) { for (i = 0, j = width; j >= 0; j -= 8, i++) {
c->mask[i][height-2] = (j >= 8) ? 0xff : (0xff << (8 - j)); c->mask[i][height - 2] =
c->mask[i][height-1] = (j >= 8) ? 0xff : (0xff << (8 - j)); (j >= 8) ? 0xff : (0xff << (8 - j));
} c->mask[i][height - 1] =
(j >= 8) ? 0xff : (0xff << (8 - j));
}
aty_set_cursor_color(fb); aty_set_cursor_color(info);
aty_set_cursor_shape(fb); aty_set_cursor_shape(info);
} }
return 1; return 1;
} }
This diff is collapsed.
...@@ -67,9 +67,6 @@ ...@@ -67,9 +67,6 @@
#include <asm/backlight.h> #include <asm/backlight.h>
#endif #endif
#ifdef CONFIG_FB_COMPAT_XPMAC
#include <asm/vc_ioctl.h>
#endif
#ifdef CONFIG_BOOTX_TEXT #ifdef CONFIG_BOOTX_TEXT
#include <asm/btext.h> #include <asm/btext.h>
#endif /* CONFIG_BOOTX_TEXT */ #endif /* CONFIG_BOOTX_TEXT */
...@@ -84,7 +81,7 @@ ...@@ -84,7 +81,7 @@
#include <asm/mtrr.h> #include <asm/mtrr.h>
#endif #endif
#include "aty128.h" #include <video/aty128.h>
/* Debug flag */ /* Debug flag */
#undef DEBUG #undef DEBUG
...@@ -1231,27 +1228,6 @@ aty128_set_par(struct aty128fb_par *par, ...@@ -1231,27 +1228,6 @@ aty128_set_par(struct aty128fb_par *par,
if (par->accel_flags & FB_ACCELF_TEXT) if (par->accel_flags & FB_ACCELF_TEXT)
aty128_init_engine(par, info); aty128_init_engine(par, info);
#ifdef CONFIG_FB_COMPAT_XPMAC
if (!console_fb_info || console_fb_info == &info->fb_info) {
struct fb_var_screeninfo var;
int cmode, vmode;
display_info.height = ((par->crtc.v_total >> 16) & 0x7ff) + 1;
display_info.width = (((par->crtc.h_total >> 16) & 0xff) + 1) << 3;
display_info.depth = par->crtc.bpp;
display_info.pitch = (par->crtc.vxres * par->crtc.bpp) >> 3;
aty128_encode_var(&var, par, info);
if (mac_var_to_vmode(&var, &vmode, &cmode))
display_info.mode = 0;
else
display_info.mode = vmode;
strcpy(display_info.name, aty128fb_name);
display_info.fb_address = info->frame_buffer_phys;
display_info.cmap_adr_address = 0;
display_info.cmap_data_address = 0;
display_info.disp_reg_address = info->regbase_phys;
}
#endif /* CONFIG_FB_COMPAT_XPMAC */
#if defined(CONFIG_BOOTX_TEXT) #if defined(CONFIG_BOOTX_TEXT)
btext_update_display(info->frame_buffer_phys, btext_update_display(info->frame_buffer_phys,
(((par->crtc.h_total>>16) & 0xff)+1)*8, (((par->crtc.h_total>>16) & 0xff)+1)*8,
...@@ -1772,8 +1748,8 @@ aty128_init(struct fb_info_aty128 *info, const char *name) ...@@ -1772,8 +1748,8 @@ aty128_init(struct fb_info_aty128 *info, const char *name)
board_list = aty128_board_list_add(board_list, info); board_list = aty128_board_list_add(board_list, info);
size = (var.bits_per_pixel <= 8) ? 256 : 32; size = (fb_display[con].var.bits_per_pixel <= 8) ? 256 : 32;
fb_alloc_cmap(&info->fb_info.cmap, size, 0); fb_alloc_cmap(info->fb_info.cmap, size, 0);
if (register_framebuffer(&info->fb_info) < 0) if (register_framebuffer(&info->fb_info) < 0)
return 0; return 0;
...@@ -1927,12 +1903,6 @@ aty128_pci_register(struct pci_dev *pdev, ...@@ -1927,12 +1903,6 @@ aty128_pci_register(struct pci_dev *pdev,
printk(KERN_INFO "aty128fb: Rage128 MTRR set to ON\n"); printk(KERN_INFO "aty128fb: Rage128 MTRR set to ON\n");
} }
#endif /* CONFIG_MTRR */ #endif /* CONFIG_MTRR */
#ifdef CONFIG_FB_COMPAT_XPMAC
if (!console_fb_info)
console_fb_info = &info->fb_info;
#endif
return 0; return 0;
err_out: err_out:
......
...@@ -31,10 +31,6 @@ ...@@ -31,10 +31,6 @@
#include <linux/pci.h> #include <linux/pci.h>
#include <asm/io.h> #include <asm/io.h>
#ifdef CONFIG_FB_COMPAT_XPMAC
#include <asm/vc_ioctl.h>
#include <asm/pci-bridge.h>
#endif
#ifdef CONFIG_PMAC_BACKLIGHT #ifdef CONFIG_PMAC_BACKLIGHT
#include <asm/backlight.h> #include <asm/backlight.h>
#endif #endif
...@@ -359,11 +355,6 @@ static void chips_set_bitdepth(struct fb_info_chips *p, struct display* disp, in ...@@ -359,11 +355,6 @@ static void chips_set_bitdepth(struct fb_info_chips *p, struct display* disp, in
disp->visual = fix->visual; disp->visual = fix->visual;
disp->var = *var; disp->var = *var;
#ifdef CONFIG_FB_COMPAT_XPMAC
display_info.depth = bpp;
display_info.pitch = fix->line_length;
#endif
if (p->info.changevar) if (p->info.changevar)
(*p->info.changevar)(con); (*p->info.changevar)(con);
...@@ -575,26 +566,6 @@ static void __init init_chips(struct fb_info_chips *p) ...@@ -575,26 +566,6 @@ static void __init init_chips(struct fb_info_chips *p)
chips_hw_init(p); chips_hw_init(p);
#ifdef CONFIG_FB_COMPAT_XPMAC
if (!console_fb_info) {
unsigned long iobase;
display_info.height = p->var.yres;
display_info.width = p->var.xres;
display_info.depth = 8;
display_info.pitch = p->fix.line_length;
display_info.mode = VMODE_800_600_60;
strncpy(display_info.name, "chips65550",
sizeof(display_info.name));
display_info.fb_address = p->frame_buffer_phys;
iobase = pci_bus_io_base_phys(p->pdev->bus->number);
display_info.cmap_adr_address = iobase + 0x3c8;
display_info.cmap_data_address = iobase + 0x3c9;
display_info.disp_reg_address = p->blitter_regs_phys;
console_fb_info = &p->info;
}
#endif /* CONFIG_FB_COMPAT_XPMAC */
#ifdef CONFIG_PMAC_PBOOK #ifdef CONFIG_PMAC_PBOOK
if (all_chips == NULL) if (all_chips == NULL)
pmu_register_sleep_notifier(&chips_sleep_notifier); pmu_register_sleep_notifier(&chips_sleep_notifier);
......
...@@ -43,9 +43,6 @@ ...@@ -43,9 +43,6 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/nvram.h> #include <linux/nvram.h>
#ifdef CONFIG_FB_COMPAT_XPMAC
#include <asm/vc_ioctl.h>
#endif
#include <linux/adb.h> #include <linux/adb.h>
#include <linux/cuda.h> #include <linux/cuda.h>
#include <asm/io.h> #include <asm/io.h>
...@@ -707,24 +704,6 @@ static void control_set_hardware(struct fb_info_control *p, struct fb_par_contro ...@@ -707,24 +704,6 @@ static void control_set_hardware(struct fb_info_control *p, struct fb_par_contro
/* Turn on display */ /* Turn on display */
out_le32(CNTRL_REG(p,ctrl), par->ctrl); out_le32(CNTRL_REG(p,ctrl), par->ctrl);
#ifdef CONFIG_FB_COMPAT_XPMAC
/* And let the world know the truth. */
if (!console_fb_info || console_fb_info == &p->info) {
display_info.height = p->par.yres;
display_info.width = p->par.xres;
display_info.depth = (cmode == CMODE_32) ? 32 :
((cmode == CMODE_16) ? 16 : 8);
display_info.pitch = p->par.pitch;
display_info.mode = p->par.vmode;
strncpy(display_info.name, "control",
sizeof(display_info.name));
display_info.fb_address = p->frame_buffer_phys + CTRLFB_OFF;
display_info.cmap_adr_address = p->cmap_regs_phys;
display_info.cmap_data_address = p->cmap_regs_phys + 0x30;
display_info.disp_reg_address = p->control_regs_phys;
console_fb_info = &p->info;
}
#endif /* CONFIG_FB_COMPAT_XPMAC */
#ifdef CONFIG_BOOTX_TEXT #ifdef CONFIG_BOOTX_TEXT
btext_update_display(p->frame_buffer_phys + CTRLFB_OFF, btext_update_display(p->frame_buffer_phys + CTRLFB_OFF,
p->par.xres, p->par.yres, p->par.xres, p->par.yres,
......
...@@ -115,7 +115,7 @@ static struct display disp; ...@@ -115,7 +115,7 @@ static struct display disp;
/* frame buffer operations */ /* frame buffer operations */
static int dn_fb_blank(int blank, struct fb_info *info); static int dnfb_blank(int blank, struct fb_info *info);
static void dnfb_copyarea(struct fb_info *info, struct fb_copyarea *area); static void dnfb_copyarea(struct fb_info *info, struct fb_copyarea *area);
static struct fb_ops dn_fb_ops = { static struct fb_ops dn_fb_ops = {
...@@ -165,7 +165,6 @@ void dnfb_copyarea(struct fb_info *info, struct fb_copyarea *area) ...@@ -165,7 +165,6 @@ void dnfb_copyarea(struct fb_info *info, struct fb_copyarea *area)
{ {
int incr, y_delta, pre_read = 0, x_end, x_word_count; int incr, y_delta, pre_read = 0, x_end, x_word_count;
int x_count, y_count;
ushort *src, dummy; ushort *src, dummy;
uint start_mask, end_mask, dest; uint start_mask, end_mask, dest;
short i, j; short i, j;
...@@ -173,13 +172,13 @@ void dnfb_copyarea(struct fb_info *info, struct fb_copyarea *area) ...@@ -173,13 +172,13 @@ void dnfb_copyarea(struct fb_info *info, struct fb_copyarea *area)
incr = (area->dy <= area->sy) ? 1 : -1; incr = (area->dy <= area->sy) ? 1 : -1;
src = src =
(ushort *) (info->screen_base + area->sy * info->fix.next_line + (ushort *) (info->screen_base + area->sy * info->fix.line_length +
(area->sx >> 4)); (area->sx >> 4));
dest = area->dy * (info->fix.next_line >> 1) + (area->dx >> 4); dest = area->dy * (info->fix.line_length >> 1) + (area->dx >> 4);
if (incr > 0) { if (incr > 0) {
y_delta = (info->fix.next_line * 8) - area->sx - x_count; y_delta = (info->fix.line_length * 8) - area->sx - area->width;
x_end = area->dx + x_count - 1; x_end = area->dx + area->width - 1;
x_word_count = (x_end >> 4) - (area->dx >> 4) + 1; x_word_count = (x_end >> 4) - (area->dx >> 4) + 1;
start_mask = 0xffff0000 >> (area->dx & 0xf); start_mask = 0xffff0000 >> (area->dx & 0xf);
end_mask = 0x7ffff >> (x_end & 0xf); end_mask = 0x7ffff >> (x_end & 0xf);
...@@ -188,8 +187,8 @@ void dnfb_copyarea(struct fb_info *info, struct fb_copyarea *area) ...@@ -188,8 +187,8 @@ void dnfb_copyarea(struct fb_info *info, struct fb_copyarea *area)
if ((area->dx & 0xf) < (area->sx & 0xf)) if ((area->dx & 0xf) < (area->sx & 0xf))
pre_read = 1; pre_read = 1;
} else { } else {
y_delta = -((info->fix.next_line * 8) - area->sx - x_count); y_delta = -((info->fix.line_length * 8) - area->sx - area->width);
x_end = area->dx - x_count + 1; x_end = area->dx - area->width + 1;
x_word_count = (area->dx >> 4) - (x_end >> 4) + 1; x_word_count = (area->dx >> 4) - (x_end >> 4) + 1;
start_mask = 0x7ffff >> (area->dx & 0xf); start_mask = 0x7ffff >> (area->dx & 0xf);
end_mask = 0xffff0000 >> (x_end & 0xf); end_mask = 0xffff0000 >> (x_end & 0xf);
...@@ -199,7 +198,7 @@ void dnfb_copyarea(struct fb_info *info, struct fb_copyarea *area) ...@@ -199,7 +198,7 @@ void dnfb_copyarea(struct fb_info *info, struct fb_copyarea *area)
pre_read = 1; pre_read = 1;
} }
for (i = 0; i < y_count; i++) { for (i = 0; i < area->height; i++) {
outb(0xc | (dest >> 16), AP_CONTROL_3A); outb(0xc | (dest >> 16), AP_CONTROL_3A);
...@@ -242,7 +241,7 @@ unsigned long __init dnfb_init(unsigned long mem_start) ...@@ -242,7 +241,7 @@ unsigned long __init dnfb_init(unsigned long mem_start)
{ {
int err; int err;
strcpy(&fb_info.modename, dnfb_fix); strcpy(fb_info.modename, dnfb_fix.id);
fb_info.changevar = NULL; fb_info.changevar = NULL;
fb_info.fontname[0] = 0; fb_info.fontname[0] = 0;
fb_info.disp = &disp; fb_info.disp = &disp;
......
This diff is collapsed.
/*
* linux/drivers/video/fbcon-vga.c -- Low level frame buffer operations for
* VGA characters/attributes
*
* Created 28 Mar 1998 by Geert Uytterhoeven
* Monochrome attributes added May 1998 by Andrew Apted
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file COPYING in the main directory of this archive for
* more details.
*/
#include <linux/module.h>
#include <linux/tty.h>
#include <linux/console.h>
#include <linux/string.h>
#include <linux/fb.h>
#include <asm/io.h>
#include <video/fbcon.h>
#include <video/fbcon-vga.h>
/*
* VGA screen access
*/
static inline void vga_writew(u16 val, u16 *addr)
{
#ifdef __powerpc__
st_le16(addr, val);
#else
writew(val, (unsigned long)addr);
#endif /* !__powerpc__ */
}
static inline u16 vga_readw(u16 *addr)
{
#ifdef __powerpc__
return ld_le16(addr);
#else
return readw((unsigned long)addr);
#endif /* !__powerpc__ */
}
static inline void vga_memsetw(void *s, u16 c, unsigned int count)
{
u16 *addr = (u16 *)s;
while (count) {
count--;
vga_writew(c, addr++);
}
}
static inline void vga_memmovew(u16 *to, u16 *from, unsigned int count)
{
if (to < from) {
while (count) {
count--;
vga_writew(vga_readw(from++), to++);
}
} else {
from += count;
to += count;
while (count) {
count--;
vga_writew(vga_readw(--from), --to);
}
}
}
/*
* VGA characters/attributes
*/
static inline u16 fbcon_vga_attr(struct display *p,
unsigned short s)
{
/* Underline and reverse-video are mutually exclusive on MDA.
* Since reverse-video is used for cursors and selected areas,
* it takes precedence.
*/
return (attr_reverse(p, s) ? 0x7000 :
(attr_underline(p, s) ? 0x0100 : 0x0700)) |
(attr_bold(p, s) ? 0x0800 : 0) |
(attr_blink(p, s) ? 0x8000 : 0);
}
void fbcon_vga_setup(struct display *p)
{
p->next_line = p->line_length;
p->next_plane = 0;
}
void fbcon_vga_bmove(struct display *p, int sy, int sx, int dy, int dx,
int height, int width)
{
u16 *src, *dst;
int rows;
if (sx == 0 && dx == 0 && width == p->next_line/2) {
src = (u16 *)(p->fb_info->screen_base+sy*p->next_line);
dst = (u16 *)(p->fb_info->screen_base+dy*p->next_line);
vga_memmovew(dst, src, height*width);
} else if (dy < sy || (dy == sy && dx < sx)) {
src = (u16 *)(p->fb_info->screen_base+sy*p->next_line+sx*2);
dst = (u16 *)(p->fb_info->screen_base+dy*p->next_line+dx*2);
for (rows = height; rows-- ;) {
vga_memmovew(dst, src, width);
src += p->next_line/2;
dst += p->next_line/2;
}
} else {
src = (u16 *)(p->fb_info->screen_base+(sy+height-1)*p->next_line+sx*2);
dst = (u16 *)(p->fb_info->screen_base+(dy+height-1)*p->next_line+dx*2);
for (rows = height; rows-- ;) {
vga_memmovew(dst, src, width);
src -= p->next_line/2;
dst -= p->next_line/2;
}
}
}
void fbcon_vga_clear(struct vc_data *conp, struct display *p, int sy, int sx,
int height, int width)
{
u16 *dest = (u16 *)(p->fb_info->screen_base+sy*p->next_line+sx*2);
int rows;
if (sx == 0 && width*2 == p->next_line)
vga_memsetw(dest, conp->vc_video_erase_char, height*width);
else
for (rows = height; rows-- ; dest += p->next_line/2)
vga_memsetw(dest, conp->vc_video_erase_char, width);
}
void fbcon_vga_putc(struct vc_data *conp, struct display *p, int c, int y,
int x)
{
u16 *dst = (u16 *)(p->fb_info->screen_base+y*p->next_line+x*2);
if (conp->vc_can_do_color)
vga_writew(c, dst);
else
vga_writew(fbcon_vga_attr(p, c) | (c & 0xff), dst);
}
void fbcon_vga_putcs(struct vc_data *conp, struct display *p,
const unsigned short *s, int count, int y, int x)
{
u16 *dst = (u16 *)(p->fb_info->screen_base+y*p->next_line+x*2);
u16 sattr;
if (conp->vc_can_do_color)
while (count--)
vga_writew(scr_readw(s++), dst++);
else {
sattr = fbcon_vga_attr(p, scr_readw(s));
while (count--)
vga_writew(sattr | ((int) (scr_readw(s++)) & 0xff), dst++);
}
}
void fbcon_vga_revc(struct display *p, int x, int y)
{
u16 *dst = (u16 *)(p->fb_info->screen_base+y*p->next_line+x*2);
u16 val = vga_readw(dst);
val = (val & 0x88ff) | ((val<<4) & 0x7000) | ((val>>4) & 0x0700);
vga_writew(val, dst);
}
/*
* `switch' for the low level operations
*/
struct display_switch fbcon_vga = {
setup: fbcon_vga_setup,
bmove: fbcon_vga_bmove,
clear: fbcon_vga_clear,
putc: fbcon_vga_putc,
putcs: fbcon_vga_putcs,
revc: fbcon_vga_revc,
fontwidthmask: FONTWIDTH(8)
};
#ifdef MODULE
MODULE_LICENSE("GPL");
int init_module(void)
{
return 0;
}
void cleanup_module(void)
{}
#endif /* MODULE */
/*
* Visible symbols for modules
*/
EXPORT_SYMBOL(fbcon_vga);
EXPORT_SYMBOL(fbcon_vga_setup);
EXPORT_SYMBOL(fbcon_vga_bmove);
EXPORT_SYMBOL(fbcon_vga_clear);
EXPORT_SYMBOL(fbcon_vga_putc);
EXPORT_SYMBOL(fbcon_vga_putcs);
EXPORT_SYMBOL(fbcon_vga_revc);
This diff is collapsed.
...@@ -132,7 +132,7 @@ extern int pmagbafb_init(void); ...@@ -132,7 +132,7 @@ extern int pmagbafb_init(void);
extern int pmagbbfb_init(void); extern int pmagbbfb_init(void);
extern void maxinefb_init(void); extern void maxinefb_init(void);
extern int tx3912fb_init(void); extern int tx3912fb_init(void);
extern int tx3912fb_setup(char*); extern void tx3912fb_setup(char*);
extern int radeonfb_init(void); extern int radeonfb_init(void);
extern int radeonfb_setup(char*); extern int radeonfb_setup(char*);
extern int e1355fb_init(void); extern int e1355fb_init(void);
......
...@@ -198,8 +198,9 @@ static int fm2fb_blank(int blank, struct fb_info *info) ...@@ -198,8 +198,9 @@ static int fm2fb_blank(int blank, struct fb_info *info)
if (!blank) if (!blank)
t |= FRAMEMASTER_ENABLE | FRAMEMASTER_NOLACE; t |= FRAMEMASTER_ENABLE | FRAMEMASTER_NOLACE;
fm2fb_reg[0] = t; fm2fb_reg[0] = t;
return 0;
} }
/* /*
* Set a single color register. The values supplied are already * Set a single color register. The values supplied are already
* rounded down to the hardware's capabilities (according to the * rounded down to the hardware's capabilities (according to the
......
...@@ -33,7 +33,7 @@ static struct fbcon_font_desc *fbcon_fonts[] = { ...@@ -33,7 +33,7 @@ static struct fbcon_font_desc *fbcon_fonts[] = {
&font_vga_8x16, &font_vga_8x16,
#endif #endif
#ifdef CONFIG_FONT_6x11 #ifdef CONFIG_FONT_6x11
#if defined(CONFIG_FBCON_MAC) || defined(CONFIG_FB_SBUS) #if defined(CONFIG_FBCON_ACCEL) || defined(CONFIG_FB_SBUS)
#undef NO_FONTS #undef NO_FONTS
#endif #endif
&font_vga_6x11, &font_vga_6x11,
...@@ -43,7 +43,7 @@ static struct fbcon_font_desc *fbcon_fonts[] = { ...@@ -43,7 +43,7 @@ static struct fbcon_font_desc *fbcon_fonts[] = {
&font_sun_8x16, &font_sun_8x16,
#endif #endif
#ifdef CONFIG_FONT_SUN12x22 #ifdef CONFIG_FONT_SUN12x22
#if defined(CONFIG_FB_SBUS) || defined(CONFIG_FBCON_CFB8) || defined(CONFIG_FBCON_CFB16) || defined(CONFIG_FBCON_CFB24) || defined(CONFIG_FBCON_CFB32) #if defined(CONFIG_FB_SBUS) || defined(CONFIG_FBCON_CFB8) || defined(CONFIG_FBCON_CFB16) || defined(CONFIG_FBCON_CFB24) || defined(CONFIG_FBCON_CFB32) || defined(CONFIG_FBCON_ACCEL)
#undef NO_FONTS #undef NO_FONTS
#endif #endif
&font_sun_12x22, &font_sun_12x22,
......
...@@ -49,6 +49,7 @@ static struct fb_fix_screeninfo hpfb_fix __initdata = { ...@@ -49,6 +49,7 @@ static struct fb_fix_screeninfo hpfb_fix __initdata = {
visual: FB_VISUAL_PSEUDOCOLOR, visual: FB_VISUAL_PSEUDOCOLOR,
line_length: 1024, line_length: 1024,
accel: FB_ACCEL_NONE, accel: FB_ACCEL_NONE,
};
static struct fb_var_screeninfo hpfb_defined = { static struct fb_var_screeninfo hpfb_defined = {
xres: 1024, xres: 1024,
...@@ -163,7 +164,7 @@ int __init hpfb_init_one(unsigned long base) ...@@ -163,7 +164,7 @@ int __init hpfb_init_one(unsigned long base)
fb_info.flags = FBINFO_FLAG_DEFAULT; fb_info.flags = FBINFO_FLAG_DEFAULT;
fb_info.var = hpfb_defined; fb_info.var = hpfb_defined;
fb_info.fix = hpfb_fix; fb_info.fix = hpfb_fix;
fb_info.screen_base = hpfb_fix.smem_start; fb_info.screen_base = (char *)hpfb_fix.smem_start; // FIXME
/* The below feilds will go away !!!! */ /* The below feilds will go away !!!! */
fb_info.currcon = -1; fb_info.currcon = -1;
......
...@@ -1177,48 +1177,6 @@ static struct display_switch fbcon_imstt32 = { ...@@ -1177,48 +1177,6 @@ static struct display_switch fbcon_imstt32 = {
}; };
#endif #endif
#ifdef CONFIG_FB_COMPAT_XPMAC
#include <asm/vc_ioctl.h>
extern struct vc_mode display_info;
extern struct fb_info *console_fb_info;
static void
set_display_info (struct display *disp)
{
display_info.width = disp->var.xres;
display_info.height = disp->var.yres;
display_info.depth = disp->var.bits_per_pixel;
display_info.pitch = disp->line_length;
switch (disp->var.xres) {
case 512:
display_info.mode = 2;
break;
case 640:
display_info.mode = 6;
break;
case 800:
display_info.mode = 12;
break;
case 832:
display_info.mode = 13;
break;
case 1024:
display_info.mode = 17;
break;
case 1152:
display_info.mode = 18;
break;
case 1280:
display_info.mode = disp->var.yres == 960 ? 19 : 20;
break;
default:
display_info.mode = 0;
}
}
#endif
static int static int
imsttfb_getcolreg (u_int regno, u_int *red, u_int *green, imsttfb_getcolreg (u_int regno, u_int *red, u_int *green,
u_int *blue, u_int *transp, struct fb_info *info) u_int *blue, u_int *transp, struct fb_info *info)
...@@ -1385,10 +1343,6 @@ set_dispsw (struct display *disp, struct fb_info_imstt *p) ...@@ -1385,10 +1343,6 @@ set_dispsw (struct display *disp, struct fb_info_imstt *p)
p->dispsw.cursor = 0; p->dispsw.cursor = 0;
p->dispsw.set_font = 0; p->dispsw.set_font = 0;
} }
#ifdef CONFIG_FB_COMPAT_XPMAC
set_display_info(disp);
#endif
} }
static void static void
...@@ -1864,16 +1818,6 @@ init_imstt(struct fb_info_imstt *p) ...@@ -1864,16 +1818,6 @@ init_imstt(struct fb_info_imstt *p)
tmp = (in_le32(&p->dc_regs[SSTATUS]) & 0x0f00) >> 8; tmp = (in_le32(&p->dc_regs[SSTATUS]) & 0x0f00) >> 8;
printk("fb%u: %s frame buffer; %uMB vram; chip version %u\n", printk("fb%u: %s frame buffer; %uMB vram; chip version %u\n",
i, p->fix.id, p->total_vram >> 20, tmp); i, p->fix.id, p->total_vram >> 20, tmp);
#ifdef CONFIG_FB_COMPAT_XPMAC
strncpy(display_info.name, "IMS,tt128mb", sizeof(display_info.name));
display_info.fb_address = p->frame_buffer_phys;
display_info.cmap_adr_address = p->cmap_regs_phys + PADDRW;
display_info.cmap_data_address = p->cmap_regs_phys + PDATA;
display_info.disp_reg_address = p->dc_regs_phys;
if (!console_fb_info)
console_fb_info = &p->info;
#endif /* CONFIG_FB_COMPAT_XPMAC */
} }
static int __devinit static int __devinit
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -56,9 +56,6 @@ ...@@ -56,9 +56,6 @@
#include <video/fbcon-cfb24.h> #include <video/fbcon-cfb24.h>
#include <video/fbcon-cfb32.h> #include <video/fbcon-cfb32.h>
#if defined(CONFIG_FB_COMPAT_XPMAC)
#include <asm/vc_ioctl.h>
#endif
#if defined(CONFIG_PPC) #if defined(CONFIG_PPC)
#include <asm/prom.h> #include <asm/prom.h>
#include <asm/pci-bridge.h> #include <asm/pci-bridge.h>
...@@ -591,9 +588,6 @@ struct matrox_fb_info { ...@@ -591,9 +588,6 @@ struct matrox_fb_info {
} memory; } memory;
} values; } values;
struct { unsigned red, green, blue, transp; } palette[256]; struct { unsigned red, green, blue, transp; } palette[256];
#if defined(CONFIG_FB_COMPAT_XPMAC)
char matrox_name[32];
#endif
/* These ifdefs must be last! They differ for module & non-module compiles */ /* These ifdefs must be last! They differ for module & non-module compiles */
#if defined(FBCON_HAS_CFB16) || defined(FBCON_HAS_CFB24) || defined(FBCON_HAS_CFB32) #if defined(FBCON_HAS_CFB16) || defined(FBCON_HAS_CFB24) || defined(FBCON_HAS_CFB32)
union { union {
......
...@@ -130,6 +130,10 @@ static const struct fb_videomode modedb[] __initdata = { ...@@ -130,6 +130,10 @@ static const struct fb_videomode modedb[] __initdata = {
/* 1280x1024 @ 61 Hz, 64.2 kHz hsync */ /* 1280x1024 @ 61 Hz, 64.2 kHz hsync */
NULL, 61, 1280, 1024, 9090, 200, 48, 26, 1, 184, 3, NULL, 61, 1280, 1024, 9090, 200, 48, 26, 1, 184, 3,
0, FB_VMODE_NONINTERLACED 0, FB_VMODE_NONINTERLACED
}, {
/* 1400x1050 @ 60Hz, 63.9 kHz hsync */
NULL, 68, 1400, 1050, 9259, 136, 40, 13, 1, 112, 3,
0, FB_VMODE_NONINTERLACED
}, { }, {
/* 1024x768 @ 85 Hz, 70.24 kHz hsync */ /* 1024x768 @ 85 Hz, 70.24 kHz hsync */
NULL, 85, 1024, 768, 10111, 192, 32, 34, 14, 160, 6, NULL, 85, 1024, 768, 10111, 192, 32, 34, 14, 160, 6,
......
This diff is collapsed.
This diff is collapsed.
...@@ -57,7 +57,7 @@ ...@@ -57,7 +57,7 @@
#error "The endianness of the target host has not been defined." #error "The endianness of the target host has not been defined."
#endif #endif
#if defined(__BIG_ENDIAN) && !defined(__sparc__) #if defined(__BIG_ENDIAN) && !defined(__sparc__) && (!defined(CONFIG_PPC) || defined(CONFIG_FB_PM2_CVPPC))
#define PM2FB_BE_APERTURE #define PM2FB_BE_APERTURE
#endif #endif
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment