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