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
2c799718
Commit
2c799718
authored
May 02, 2002
by
James Simmons
Browse files
Options
Browse Files
Download
Plain Diff
Merge
http://fbdev@bkbits.net/fbdev-2.5
into heisenberg.transvirtual.com:/tmp/fbdev-2.5
parents
f1547973
7726d376
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
190 additions
and
14 deletions
+190
-14
drivers/video/Makefile
drivers/video/Makefile
+2
-2
drivers/video/fbgen.c
drivers/video/fbgen.c
+188
-12
No files found.
drivers/video/Makefile
View file @
2c799718
# Makefile for the Linux video drivers.
# 5 Aug 1999, James Simmons, <mailto:jsimmons@
edgeglobal.com
>
# 5 Aug 1999, James Simmons, <mailto:jsimmons@
users.sf.net
>
# Rewritten to use lists instead of if-statements.
O_TARGET
:=
video.o
...
...
@@ -10,7 +10,7 @@ mod-subdirs := matrox
# This list comes from 'grep -l EXPORT_SYMBOL *.[hc]'.
export-objs
:=
fbmem.o fbcmap.o fbcon.o fbmon.o modedb.o
\
fbcon-afb.o fbcon-ilbm.o
\
fbcon-afb.o fbcon-ilbm.o
fbcon-accel.o
\
fbcon-vga.o fbcon-iplan2p2.o fbcon-iplan2p4.o
\
fbcon-iplan2p8.o fbcon-vga-planes.o fbcon-cfb16.o
\
fbcon-cfb2.o fbcon-cfb24.o fbcon-cfb32.o fbcon-cfb4.o
\
...
...
drivers/video/fbgen.c
View file @
2c799718
...
...
@@ -21,6 +21,14 @@
#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"
/* ---- `Generic' versions of the frame buffer device operations ----------- */
...
...
@@ -59,7 +67,7 @@ int fbgen_get_fix(struct fb_fix_screeninfo *fix, int con, struct fb_info *info)
int
gen_get_fix
(
struct
fb_fix_screeninfo
*
fix
,
int
con
,
struct
fb_info
*
info
)
{
*
fix
=
info
->
fix
;
return
0
;
return
0
;
}
/**
...
...
@@ -92,7 +100,7 @@ int fbgen_get_var(struct fb_var_screeninfo *var, int con, struct fb_info *info)
int
gen_get_var
(
struct
fb_var_screeninfo
*
var
,
int
con
,
struct
fb_info
*
info
)
{
*
var
=
info
->
var
;
return
0
;
return
0
;
}
/**
...
...
@@ -113,6 +121,7 @@ int fbgen_set_var(struct fb_var_screeninfo *var, int con, struct fb_info *info)
struct
fb_info_gen
*
info2
=
(
struct
fb_info_gen
*
)
info
;
int
err
;
int
oldxres
,
oldyres
,
oldbpp
,
oldxres_virtual
,
oldyres_virtual
,
oldyoffset
;
struct
fb_bitfield
oldred
,
oldgreen
,
oldblue
;
if
((
err
=
fbgen_do_set_var
(
var
,
con
==
info
->
currcon
,
info2
)))
return
err
;
...
...
@@ -122,12 +131,18 @@ int fbgen_set_var(struct fb_var_screeninfo *var, int con, struct fb_info *info)
oldxres_virtual
=
fb_display
[
con
].
var
.
xres_virtual
;
oldyres_virtual
=
fb_display
[
con
].
var
.
yres_virtual
;
oldbpp
=
fb_display
[
con
].
var
.
bits_per_pixel
;
oldred
=
fb_display
[
con
].
var
.
red
;
oldgreen
=
fb_display
[
con
].
var
.
green
;
oldblue
=
fb_display
[
con
].
var
.
blue
;
oldyoffset
=
fb_display
[
con
].
var
.
yoffset
;
fb_display
[
con
].
var
=
*
var
;
if
(
oldxres
!=
var
->
xres
||
oldyres
!=
var
->
yres
||
oldxres_virtual
!=
var
->
xres_virtual
||
oldyres_virtual
!=
var
->
yres_virtual
||
oldbpp
!=
var
->
bits_per_pixel
||
(
!
(
memcmp
(
&
oldred
,
&
(
var
->
red
),
sizeof
(
struct
fb_bitfield
))))
||
(
!
(
memcmp
(
&
oldgreen
,
&
(
var
->
green
),
sizeof
(
struct
fb_bitfield
))))
||
(
!
(
memcmp
(
&
oldblue
,
&
(
var
->
blue
),
sizeof
(
struct
fb_bitfield
))))
||
oldyoffset
!=
var
->
yoffset
)
{
fbgen_set_disp
(
con
,
info2
);
if
(
info
->
changevar
)
...
...
@@ -142,6 +157,40 @@ int fbgen_set_var(struct fb_var_screeninfo *var, int con, struct fb_info *info)
}
int
gen_set_var
(
struct
fb_var_screeninfo
*
var
,
int
con
,
struct
fb_info
*
info
)
{
int
err
;
if
(
con
<
0
||
(
memcmp
(
&
info
->
var
,
var
,
sizeof
(
struct
fb_var_screeninfo
))))
{
if
(
!
info
->
fbops
->
fb_check_var
)
{
*
var
=
info
->
var
;
return
0
;
}
if
((
err
=
info
->
fbops
->
fb_check_var
(
var
,
info
)))
return
err
;
if
((
var
->
activate
&
FB_ACTIVATE_MASK
)
==
FB_ACTIVATE_NOW
)
{
info
->
var
=
*
var
;
if
(
con
==
info
->
currcon
)
{
if
(
info
->
fbops
->
fb_set_par
)
info
->
fbops
->
fb_set_par
(
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
;
}
/**
* fbgen_get_cmap - get the colormap
* @cmap: frame buffer colormap structure
...
...
@@ -181,7 +230,7 @@ int gen_get_cmap(struct fb_cmap *cmap, int kspc, int con, struct fb_info *info)
}
/**
* gen_set_cmap - set the colormap
*
fb
gen_set_cmap - set the colormap
* @cmap: frame buffer colormap structure
* @kspc: boolean, 0 copy local, 1 get_user() function
* @con: virtual console number
...
...
@@ -194,23 +243,47 @@ int gen_get_cmap(struct fb_cmap *cmap, int kspc, int con, struct fb_info *info)
*
*/
int
gen_set_cmap
(
struct
fb_cmap
*
cmap
,
int
kspc
,
int
con
,
struct
fb_info
*
info
)
int
fb
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
];
int
err
,
size
=
disp
->
var
.
bits_per_pixel
==
16
?
32
:
256
;
int
err
;
if
(
!
disp
->
cmap
.
len
)
{
/* no colormap allocated ? */
if
((
err
=
fb_alloc_cmap
(
&
disp
->
cmap
,
size
,
0
)))
if
(
!
fb_display
[
con
].
cmap
.
len
)
{
/* no colormap allocated ? */
int
size
=
fb_display
[
con
].
var
.
bits_per_pixel
==
16
?
64
:
256
;
if
((
err
=
fb_alloc_cmap
(
&
fb_display
[
con
].
cmap
,
size
,
0
)))
return
err
;
}
if
(
con
==
info
->
currcon
)
/* current console ? */
return
fb_set_cmap
(
cmap
,
kspc
,
info
);
else
fb_copy_cmap
(
cmap
,
&
disp
->
cmap
,
kspc
?
0
:
1
);
fb_copy_cmap
(
cmap
,
&
fb_display
[
con
].
cmap
,
kspc
?
0
:
1
);
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
;
}
/**
* fbgen_pan_display - pan or wrap the display
...
...
@@ -292,7 +365,6 @@ int fbgen_do_set_var(struct fb_var_screeninfo *var, int isactive,
return
0
;
}
/**
* fbgen_set_disp - set generic display
* @con: virtual console number
...
...
@@ -340,6 +412,52 @@ void fbgen_set_disp(int con, struct fb_info_gen *info)
#endif
}
void
gen_set_disp
(
int
con
,
struct
fb_info
*
info
)
{
struct
display
*
display
;
if
(
con
>=
0
)
display
=
fb_display
+
con
;
else
display
=
info
->
disp
;
display
->
visual
=
info
->
fix
.
visual
;
display
->
type
=
info
->
fix
.
type
;
display
->
type_aux
=
info
->
fix
.
type_aux
;
display
->
ypanstep
=
info
->
fix
.
ypanstep
;
display
->
ywrapstep
=
info
->
fix
.
ywrapstep
;
display
->
line_length
=
info
->
fix
.
line_length
;
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
;
#endif
return
;
}
/**
* do_install_cmap - install the current colormap
...
...
@@ -390,6 +508,19 @@ int fbgen_update_var(int con, struct fb_info *info)
return
0
;
}
int
gen_update_var
(
int
con
,
struct
fb_info
*
info
)
{
int
err
;
if
(
con
==
info
->
currcon
)
{
if
(
info
->
fbops
->
fb_pan_display
)
{
if
((
err
=
info
->
fbops
->
fb_pan_display
(
&
info
->
var
,
con
,
info
)))
return
err
;
}
}
return
0
;
}
/**
* fbgen_switch - switch to a different virtual console.
...
...
@@ -419,6 +550,46 @@ int fbgen_switch(int con, struct fb_info *info)
}
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
...
...
@@ -436,7 +607,7 @@ int fbgen_blank(int blank, struct fb_info *info)
struct
fb_cmap
cmap
;
if
(
fbhw
->
blank
&&
!
fbhw
->
blank
(
blank
,
info2
))
return
1
;
return
0
;
if
(
blank
)
{
memset
(
black
,
0
,
16
*
sizeof
(
u16
));
cmap
.
red
=
black
;
...
...
@@ -451,13 +622,16 @@ int fbgen_blank(int blank, struct fb_info *info)
return
0
;
}
/* generic frame buffer operations */
EXPORT_SYMBOL
(
fbgen_get_fix
);
EXPORT_SYMBOL
(
gen_get_fix
);
EXPORT_SYMBOL
(
fbgen_get_var
);
EXPORT_SYMBOL
(
gen_get_var
);
EXPORT_SYMBOL
(
fbgen_set_var
);
EXPORT_SYMBOL
(
gen_set_var
);
EXPORT_SYMBOL
(
fbgen_get_cmap
);
EXPORT_SYMBOL
(
gen_get_cmap
);
EXPORT_SYMBOL
(
fbgen_set_cmap
);
EXPORT_SYMBOL
(
gen_set_cmap
);
EXPORT_SYMBOL
(
fbgen_pan_display
);
/* helper functions */
...
...
@@ -465,7 +639,9 @@ EXPORT_SYMBOL(fbgen_do_set_var);
EXPORT_SYMBOL
(
fbgen_set_disp
);
EXPORT_SYMBOL
(
do_install_cmap
);
EXPORT_SYMBOL
(
fbgen_update_var
);
EXPORT_SYMBOL
(
gen_update_var
);
EXPORT_SYMBOL
(
fbgen_switch
);
EXPORT_SYMBOL
(
gen_switch
);
EXPORT_SYMBOL
(
fbgen_blank
);
MODULE_LICENSE
(
"GPL"
);
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