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
87520e1e
Commit
87520e1e
authored
Jul 12, 2002
by
James Simmons
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Porting Mach 64 drive over to new api.
parent
4ec16d90
Changes
9
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
3321 additions
and
3098 deletions
+3321
-3098
drivers/video/Config.in
drivers/video/Config.in
+15
-16
drivers/video/Makefile
drivers/video/Makefile
+1
-1
drivers/video/aty/Makefile
drivers/video/aty/Makefile
+1
-1
drivers/video/aty/atyfb.h
drivers/video/aty/atyfb.h
+134
-147
drivers/video/aty/atyfb_base.c
drivers/video/aty/atyfb_base.c
+1995
-1813
drivers/video/aty/mach64_accel.c
drivers/video/aty/mach64_accel.c
+246
-234
drivers/video/aty/mach64_ct.c
drivers/video/aty/mach64_ct.c
+193
-184
drivers/video/aty/mach64_cursor.c
drivers/video/aty/mach64_cursor.c
+107
-100
drivers/video/aty/mach64_gx.c
drivers/video/aty/mach64_gx.c
+629
-602
No files found.
drivers/video/Config.in
View file @
87520e1e
...
...
@@ -254,7 +254,7 @@ if [ "$CONFIG_FB" = "y" ]; then
fi
fi
if [ "$CONFIG_FB_ACORN" = "y" -o "$CONFIG_FB_ATARI" = "y" -o \
"$CONFIG_FB_
ATY
" = "y" -o "$CONFIG_FB_CYBER2000" = "y" -o \
"$CONFIG_FB_
P9100
" = "y" -o "$CONFIG_FB_CYBER2000" = "y" -o \
"$CONFIG_FB_RADEON" = "y" -o "$CONFIG_FB_TGA" = "y" -o \
"$CONFIG_FB_SIS" = "y" -o "$CONFIG_FB_PM3" = "y" -o \
"$CONFIG_FB_TCX" = "y" -o "$CONFIG_FB_CGTHREE" = "y" -o \
...
...
@@ -264,11 +264,11 @@ if [ "$CONFIG_FB" = "y" ]; then
"$CONFIG_FB_VALKYRIE" = "y" -o "$CONFIG_FB_PLATINUM" = "y" -o \
"$CONFIG_FB_IGA" = "y" -o "$CONFIG_FB_MATROX" = "y" -o \
"$CONFIG_FB_CT65550" = "y" -o "$CONFIG_FB_PM2" = "y" -o \
"$CONFIG_FB_
P9100
" = "y" ]; then
"$CONFIG_FB_
ATY
" = "y" ]; then
define_tristate CONFIG_FBCON_CFB8 y
else
if [ "$CONFIG_FB_ACORN" = "m" -o "$CONFIG_FB_ATARI" = "m" -o \
"$CONFIG_FB_
ATY
" = "m" -o "$CONFIG_FB_CYBER2000" = "m" -o \
"$CONFIG_FB_
P9100
" = "m" -o "$CONFIG_FB_CYBER2000" = "m" -o \
"$CONFIG_FB_RADEON" = "m" -o "$CONFIG_FB_TGA" = "m" -o \
"$CONFIG_FB_SIS" = "m" -o "$CONFIG_FB_PM3" = "m" -o \
"$CONFIG_FB_TCX" = "m" -o "$CONFIG_FB_CGTHREE" = "m" -o \
...
...
@@ -277,12 +277,11 @@ if [ "$CONFIG_FB" = "y" ]; then
"$CONFIG_FB_VIRGE" = "m" -o "$CONFIG_FB_CYBER" = "m" -o \
"$CONFIG_FB_VALKYRIE" = "m" -o "$CONFIG_FB_PLATINUM" = "m" -o \
"$CONFIG_FB_IGA" = "m" -o "$CONFIG_FB_MATROX" = "m" -o \
"$CONFIG_FB_CT65550" = "m" -o "$CONFIG_FB_PM2" = "m" -o \
"$CONFIG_FB_P9100" = "m" ]; then
"$CONFIG_FB_CT65550" = "m" -o "$CONFIG_FB_PM2" = "m" ]; then
define_tristate CONFIG_FBCON_CFB8 m
fi
fi
if [ "$CONFIG_FB_ATARI" = "y" -o "$CONFIG_FB_
ATY
" = "y" -o \
if [ "$CONFIG_FB_ATARI" = "y" -o "$CONFIG_FB_
PM3
" = "y" -o \
"$CONFIG_FB_SIS" = "y" -o "$CONFIG_FB_PVR2" = "y" -o \
"$CONFIG_FB_TRIDENT" = "y" -o "$CONFIG_FB_TBOX" = "y" -o \
"$CONFIG_FB_VOODOO1" = "y" -o "$CONFIG_FB_RADEON" = "y" -o \
...
...
@@ -291,10 +290,10 @@ if [ "$CONFIG_FB" = "y" ]; then
"$CONFIG_FB_VALKYRIE" = "y" -o "$CONFIG_FB_PLATINUM" = "y" -o \
"$CONFIG_FB_CT65550" = "y" -o "$CONFIG_FB_MATROX" = "y" -o \
"$CONFIG_FB_PM2" = "y" -o "$CONFIG_FB_CYBER2000" = "y" -o \
"$CONFIG_FB_
PM3" = "y" ]; then
"$CONFIG_FB_
ATY" = "y" ]; then
define_tristate CONFIG_FBCON_CFB16 y
else
if [ "$CONFIG_FB_ATARI" = "m" -o "$CONFIG_FB_
ATY
" = "m" -o \
if [ "$CONFIG_FB_ATARI" = "m" -o "$CONFIG_FB_
SIS
" = "m" -o \
"$CONFIG_FB_RADEON" = "m" -o "$CONFIG_FB_PVR2" = "m" -o \
"$CONFIG_FB_TRIDENT" = "m" -o "$CONFIG_FB_TBOX" = "m" -o \
"$CONFIG_FB_VOODOO1" = "m" -o "$CONFIG_FB_PM3" = "m" -o \
...
...
@@ -302,8 +301,7 @@ if [ "$CONFIG_FB" = "y" ]; then
"$CONFIG_FB_VIRGE" = "m" -o "$CONFIG_FB_CYBER" = "m" -o \
"$CONFIG_FB_VALKYRIE" = "m" -o "$CONFIG_FB_PLATINUM" = "m" -o \
"$CONFIG_FB_CT65550" = "m" -o "$CONFIG_FB_MATROX" = "m" -o \
"$CONFIG_FB_PM2" = "m" -o "$CONFIG_FB_CYBER2000" = "m" -o \
"$CONFIG_FB_SIS" = "m" ]; then
"$CONFIG_FB_PM2" = "m" -o "$CONFIG_FB_CYBER2000" = "m" ]; then
define_tristate CONFIG_FBCON_CFB16 m
fi
fi
...
...
@@ -324,22 +322,22 @@ if [ "$CONFIG_FB" = "y" ]; then
define_tristate CONFIG_FBCON_CFB24 m
fi
fi
if [ "$CONFIG_FB_ATARI" = "y" -o "$CONFIG_FB_
ATY
" = "y" -o \
if [ "$CONFIG_FB_ATARI" = "y" -o "$CONFIG_FB_
RADEON
" = "y" -o \
"$CONFIG_FB_VOODOO1" = "y" -o "$CONFIG_FB_TRIDENT" = "y" -o \
"$CONFIG_FB_CONTROL" = "y" -o "$CONFIG_FB_CLGEN" = "y" -o \
"$CONFIG_FB_TGA" = "y" -o "$CONFIG_FB_PLATINUM" = "y" -o \
"$CONFIG_FB_MATROX" = "y" -o "$CONFIG_FB_PM2" = "y" -o \
"$CONFIG_FB_PVR2" = "y" -o "$CONFIG_FB_PM3" = "y" -o \
"$CONFIG_FB_SIS" = "y" -o "$CONFIG_FB_
RADEON
" = "y" ]; then
"$CONFIG_FB_SIS" = "y" -o "$CONFIG_FB_
ATY
" = "y" ]; then
define_tristate CONFIG_FBCON_CFB32 y
else
if [ "$CONFIG_FB_ATARI" = "m" -o "$CONFIG_FB_
ATY
" = "m" -o \
if [ "$CONFIG_FB_ATARI" = "m" -o "$CONFIG_FB_
RADEON
" = "m" -o \
"$CONFIG_FB_VOODOO1" = "m" -o "$CONFIG_FB_TRIDENT" = "m" -o \
"$CONFIG_FB_CONTROL" = "m" -o "$CONFIG_FB_CLGEN" = "m" -o \
"$CONFIG_FB_TGA" = "m" -o "$CONFIG_FB_PLATINUM" = "m" -o \
"$CONFIG_FB_MATROX" = "m" -o "$CONFIG_FB_PM2" = "m" -o \
"$CONFIG_FB_SIS" = "m" -o "$CONFIG_FB_PVR2" = "m" -o \
"$CONFIG_FB_PM3" = "m"
-o "$CONFIG_FB_RADEON" = "m"
]; then
"$CONFIG_FB_PM3" = "m" ]; then
define_tristate CONFIG_FBCON_CFB32 m
fi
fi
...
...
@@ -353,14 +351,15 @@ if [ "$CONFIG_FB" = "y" ]; then
"$CONFIG_FB_MAXINE" = "y" -o "$CONFIG_FB_APOLLO" = "y" -o \
"$CONFIG_FB_ATY128" = "y" -o "$CONFIG_FB_MAC" = "y" -o \
"$CONFIG_FB_RIVA" = "y" -o "$CONFIG_FB_SA1100" = "y" -o \
"$CONFIG_FB_OF" = "y" -o "$CONFIG_FB_SGIVW" = "y" ]; then
"$CONFIG_FB_OF" = "y" -o "$CONFIG_FB_SGIVW" = "y" -o \
"$CONFIG_FB_ATY" = "y" ]; then
define_tristate CONFIG_FBCON_ACCEL y
else
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_ATY128" = "m" -o \
"$CONFIG_FB_SGIVW" = "m" ]; then
"$CONFIG_FB_SGIVW" = "m"
-o "$CONFIG_FB_ATY" = "m"
]; then
define_tristate CONFIG_FBCON_ACCEL m
fi
fi
...
...
drivers/video/Makefile
View file @
87520e1e
...
...
@@ -44,7 +44,7 @@ obj-$(CONFIG_FB_PM3) += pm3fb.o
obj-$(CONFIG_FB_APOLLO)
+=
dnfb.o cfbfillrect.o cfbimgblt.o
obj-$(CONFIG_FB_Q40)
+=
q40fb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
obj-$(CONFIG_FB_ATARI)
+=
atafb.o
obj-$(CONFIG_FB_ATY128)
+=
aty128fb.o
cfbfillrect.o cfbcopyarea.o cfbimgblt.o
obj-$(CONFIG_FB_ATY128)
+=
aty128fb.o
obj-$(CONFIG_FB_RADEON)
+=
radeonfb.o
obj-$(CONFIG_FB_NEOMAGIC)
+=
neofb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
obj-$(CONFIG_FB_IGA)
+=
igafb.o
...
...
drivers/video/aty/Makefile
View file @
87520e1e
...
...
@@ -3,7 +3,7 @@ export-objs := atyfb_base.o mach64_accel.o
obj-$(CONFIG_FB_ATY)
+=
atyfb.o
atyfb-y
:=
atyfb_base.o mach64_accel.o
atyfb-y
:=
atyfb_base.o mach64_accel.o
../cfbimgblt.o
atyfb-$(CONFIG_FB_ATY_GX)
+=
mach64_gx.o
atyfb-$(CONFIG_FB_ATY_CT)
+=
mach64_ct.o mach64_cursor.o
atyfb-objs
:=
$
(
atyfb-y
)
...
...
drivers/video/aty/atyfb.h
View file @
87520e1e
...
...
@@ -30,8 +30,7 @@ struct pll_514 {
u8
n
;
};
struct
pll_18818
{
struct
pll_18818
{
u32
program_bits
;
u32
locationAddr
;
u32
period_in_ps
;
...
...
@@ -58,17 +57,10 @@ union aty_pll {
struct
pll_18818
ics2595
;
};
/*
* The hardware parameters for each card
*/
struct
atyfb_par
{
struct
crtc
crtc
;
union
aty_pll
pll
;
u32
accel_flags
;
};
struct
aty_cursor
{
int
enable
;
int
on
;
...
...
@@ -85,16 +77,15 @@ struct aty_cursor {
struct
timer_list
*
timer
;
};
struct
fb_info_aty
{
struct
fb_info
fb_info
;
struct
fb_info_aty
*
next
;
struct
atyfb_par
{
struct
aty_cmap_regs
*
aty_cmap_regs
;
const
struct
aty_dac_ops
*
dac_ops
;
const
struct
aty_pll_ops
*
pll_ops
;
struct
aty_cursor
*
cursor
;
unsigned
long
ati_regbase
;
unsigned
long
clk_wr_offset
;
struct
pci_mmap_map
*
mmap_map
;
struct
aty_cursor
*
cursor
;
struct
aty_cmap_regs
*
aty_cmap_regs
;
struct
atyfb_par
default_par
;
struct
atyfb_par
current_par
;
struct
crtc
crtc
;
union
aty_pll
pll
;
u32
features
;
u32
ref_clk_per
;
u32
pll_per
;
...
...
@@ -102,15 +93,14 @@ struct fb_info_aty {
u8
bus_type
;
u8
ram_type
;
u8
mem_refresh_rate
;
const
struct
aty_dac_ops
*
dac_ops
;
const
struct
aty_pll_ops
*
pll_ops
;
struct
display_switch
dispsw
;
u8
blitter_may_be_busy
;
u32
accel_flags
;
#ifdef __sparc__
struct
pci_mmap_map
*
mmap_map
;
int
consolecnt
;
int
vtconsole
;
u8
mmaped
;
int
open
;
int
vtconsole
;
int
consolecnt
;
#endif
#ifdef CONFIG_PMAC_PBOOK
unsigned
char
*
save_framebuffer
;
...
...
@@ -118,12 +108,11 @@ struct fb_info_aty {
#endif
};
/*
* ATI Mach64 features
*/
#define M64_HAS(feature) ((
info
)->features & (M64F_##feature))
#define M64_HAS(feature) ((
par
)->features & (M64F_##feature))
#define M64F_RESET_3D 0x00000001
#define M64F_MAGIC_FIFO 0x00000002
...
...
@@ -151,62 +140,62 @@ struct fb_info_aty {
* Register access
*/
static
inline
u32
aty_ld_le32
(
int
regindex
,
const
struct
fb_info_aty
*
info
)
static
inline
u32
aty_ld_le32
(
int
regindex
,
const
struct
atyfb_par
*
par
)
{
/* Hack for bloc 1, should be cleanly optimized by compiler */
if
(
regindex
>=
0x400
)
regindex
-=
0x800
;
#if defined(__mc68000__)
return
le32_to_cpu
(
*
((
volatile
u32
*
)(
info
->
ati_regbase
+
regindex
)));
return
le32_to_cpu
(
*
((
volatile
u32
*
)
(
par
->
ati_regbase
+
regindex
)));
#else
return
readl
(
info
->
ati_regbase
+
regindex
);
return
readl
(
par
->
ati_regbase
+
regindex
);
#endif
}
static
inline
void
aty_st_le32
(
int
regindex
,
u32
val
,
const
struct
fb_info_aty
*
info
)
const
struct
atyfb_par
*
par
)
{
/* Hack for bloc 1, should be cleanly optimized by compiler */
if
(
regindex
>=
0x400
)
regindex
-=
0x800
;
#if defined(__mc68000__)
*
((
volatile
u32
*
)(
info
->
ati_regbase
+
regindex
))
=
cpu_to_le32
(
val
);
*
((
volatile
u32
*
)
(
par
->
ati_regbase
+
regindex
))
=
cpu_to_le32
(
val
);
#else
writel
(
val
,
info
->
ati_regbase
+
regindex
);
writel
(
val
,
par
->
ati_regbase
+
regindex
);
#endif
}
static
inline
u8
aty_ld_8
(
int
regindex
,
const
struct
fb_info_aty
*
info
)
static
inline
u8
aty_ld_8
(
int
regindex
,
const
struct
atyfb_par
*
par
)
{
/* Hack for bloc 1, should be cleanly optimized by compiler */
if
(
regindex
>=
0x400
)
regindex
-=
0x800
;
return
readb
(
info
->
ati_regbase
+
regindex
);
return
readb
(
par
->
ati_regbase
+
regindex
);
}
static
inline
void
aty_st_8
(
int
regindex
,
u8
val
,
const
struct
fb_info_aty
*
info
)
const
struct
atyfb_par
*
par
)
{
/* Hack for bloc 1, should be cleanly optimized by compiler */
if
(
regindex
>=
0x400
)
regindex
-=
0x800
;
writeb
(
val
,
info
->
ati_regbase
+
regindex
);
writeb
(
val
,
par
->
ati_regbase
+
regindex
);
}
static
inline
u8
aty_ld_pll
(
int
offset
,
const
struct
fb_info_aty
*
info
)
static
inline
u8
aty_ld_pll
(
int
offset
,
const
struct
atyfb_par
*
par
)
{
u8
res
;
/* write addr byte */
aty_st_8
(
CLOCK_CNTL
+
1
,
(
offset
<<
2
),
info
);
aty_st_8
(
CLOCK_CNTL
+
1
,
(
offset
<<
2
),
par
);
/* read the register value */
res
=
aty_ld_8
(
CLOCK_CNTL
+
2
,
info
);
res
=
aty_ld_8
(
CLOCK_CNTL
+
2
,
par
);
return
res
;
}
...
...
@@ -216,8 +205,8 @@ static inline u8 aty_ld_pll(int offset, const struct fb_info_aty *info)
*/
struct
aty_dac_ops
{
int
(
*
set_dac
)(
const
struct
fb_info_aty
*
info
,
const
union
aty_pll
*
pll
,
u32
bpp
,
u32
accel
);
int
(
*
set_dac
)
(
const
struct
fb_info
*
info
,
const
union
aty_pll
*
pll
,
u32
bpp
,
u32
accel
);
};
extern
const
struct
aty_dac_ops
aty_dac_ibm514
;
/* IBM RGB514 */
...
...
@@ -232,11 +221,12 @@ extern const struct aty_dac_ops aty_dac_ct; /* Integrated */
*/
struct
aty_pll_ops
{
int
(
*
var_to_pll
)(
const
struct
fb_info_aty
*
info
,
u32
vclk_per
,
u8
bpp
,
union
aty_pll
*
pll
);
u32
(
*
pll_to_var
)(
const
struct
fb_info_aty
*
info
,
const
union
aty_pll
*
pll
);
void
(
*
set_pll
)(
const
struct
fb_info_aty
*
info
,
const
union
aty_pll
*
pll
);
int
(
*
var_to_pll
)
(
const
struct
fb_info
*
info
,
u32
vclk_per
,
u8
bpp
,
union
aty_pll
*
pll
);
u32
(
*
pll_to_var
)
(
const
struct
fb_info
*
info
,
const
union
aty_pll
*
pll
);
void
(
*
set_pll
)
(
const
struct
fb_info
*
info
,
const
union
aty_pll
*
pll
);
};
extern
const
struct
aty_pll_ops
aty_pll_ati18818_1
;
/* ATI 18818 */
...
...
@@ -248,9 +238,9 @@ extern const struct aty_pll_ops aty_pll_unsupported; /* unsupported */
extern
const
struct
aty_pll_ops
aty_pll_ct
;
/* Integrated */
extern
void
aty_set_pll_ct
(
const
struct
fb_info
_aty
*
info
,
extern
void
aty_set_pll_ct
(
const
struct
fb_info
*
info
,
const
union
aty_pll
*
pll
);
extern
void
aty_calc_pll_ct
(
const
struct
fb_info
_aty
*
info
,
extern
void
aty_calc_pll_ct
(
const
struct
fb_info
*
info
,
struct
pll_ct
*
pll
);
...
...
@@ -258,10 +248,10 @@ extern void aty_calc_pll_ct(const struct fb_info_aty *info,
* Hardware cursor support
*/
extern
struct
aty_cursor
*
aty_init_cursor
(
struct
fb_info
_aty
*
fb
);
extern
struct
aty_cursor
*
aty_init_cursor
(
struct
fb_info
*
info
);
extern
void
atyfb_cursor
(
struct
display
*
p
,
int
mode
,
int
x
,
int
y
);
extern
void
aty_set_cursor_color
(
struct
fb_info
_aty
*
fb
);
extern
void
aty_set_cursor_shape
(
struct
fb_info
_aty
*
fb
);
extern
void
aty_set_cursor_color
(
struct
fb_info
*
info
);
extern
void
aty_set_cursor_shape
(
struct
fb_info
*
info
);
extern
int
atyfb_set_font
(
struct
display
*
d
,
int
width
,
int
height
);
...
...
@@ -269,25 +259,23 @@ extern int atyfb_set_font(struct display *d, int width, int height);
* Hardware acceleration
*/
static
inline
void
wait_for_fifo
(
u16
entries
,
const
struct
fb_info_aty
*
info
)
static
inline
void
wait_for_fifo
(
u16
entries
,
const
struct
atyfb_par
*
par
)
{
while
((
aty_ld_le32
(
FIFO_STAT
,
info
)
&
0xffff
)
>
((
u32
)
(
0x8000
>>
entries
)));
while
((
aty_ld_le32
(
FIFO_STAT
,
par
)
&
0xffff
)
>
((
u32
)
(
0x8000
>>
entries
)));
}
static
inline
void
wait_for_idle
(
struct
fb_info_aty
*
info
)
static
inline
void
wait_for_idle
(
struct
atyfb_par
*
par
)
{
wait_for_fifo
(
16
,
info
);
while
((
aty_ld_le32
(
GUI_STAT
,
info
)
&
1
)
!=
0
);
info
->
blitter_may_be_busy
=
0
;
wait_for_fifo
(
16
,
par
);
while
((
aty_ld_le32
(
GUI_STAT
,
par
)
&
1
)
!=
0
);
par
->
blitter_may_be_busy
=
0
;
}
extern
void
aty_reset_engine
(
const
struct
fb_info_aty
*
info
);
extern
void
aty_init_engine
(
const
struct
atyfb_par
*
par
,
struct
fb_info_aty
*
info
);
extern
void
aty_rectfill
(
int
dstx
,
int
dsty
,
u_int
width
,
u_int
height
,
u_int
color
,
struct
fb_info_aty
*
info
);
extern
void
aty_reset_engine
(
const
struct
atyfb_par
*
par
);
extern
void
aty_init_engine
(
struct
atyfb_par
*
par
,
struct
fb_info
*
info
);
extern
void
atyfb_fillrect
(
struct
fb_info
*
info
,
struct
fb_fillrect
*
rect
);
/*
* Text console acceleration
...
...
@@ -297,4 +285,3 @@ extern const struct display_switch fbcon_aty8;
extern
const
struct
display_switch
fbcon_aty16
;
extern
const
struct
display_switch
fbcon_aty24
;
extern
const
struct
display_switch
fbcon_aty32
;
drivers/video/aty/atyfb_base.c
View file @
87520e1e
This diff is collapsed.
Click to expand it.
drivers/video/aty/mach64_accel.c
View file @
87520e1e
This diff is collapsed.
Click to expand it.
drivers/video/aty/mach64_ct.c
View file @
87520e1e
This diff is collapsed.
Click to expand it.
drivers/video/aty/mach64_cursor.c
View file @
87520e1e
...
...
@@ -33,21 +33,20 @@
static
const
u8
cursor_pixel_map
[
2
]
=
{
0
,
15
};
static
const
u8
cursor_color_map
[
2
]
=
{
0
,
0xff
};
static
const
u8
cursor_bits_lookup
[
16
]
=
{
static
const
u8
cursor_bits_lookup
[
16
]
=
{
0x00
,
0x40
,
0x10
,
0x50
,
0x04
,
0x44
,
0x14
,
0x54
,
0x01
,
0x41
,
0x11
,
0x51
,
0x05
,
0x45
,
0x15
,
0x55
};
static
const
u8
cursor_mask_lookup
[
16
]
=
{
static
const
u8
cursor_mask_lookup
[
16
]
=
{
0xaa
,
0x2a
,
0x8a
,
0x0a
,
0xa2
,
0x22
,
0x82
,
0x02
,
0xa8
,
0x28
,
0x88
,
0x08
,
0xa0
,
0x20
,
0x80
,
0x00
};
void
aty_set_cursor_color
(
struct
fb_info
_aty
*
fb
)
void
aty_set_cursor_color
(
struct
fb_info
*
info
)
{
struct
aty_cursor
*
c
=
fb
->
cursor
;
struct
atyfb_par
*
par
=
(
struct
atyfb_par
*
)
info
->
par
;
struct
aty_cursor
*
c
=
par
->
cursor
;
const
u8
*
pixel
=
cursor_pixel_map
;
/* ++Geert: Why?? */
const
u8
*
red
=
cursor_color_map
;
const
u8
*
green
=
cursor_color_map
;
...
...
@@ -58,26 +57,28 @@ void aty_set_cursor_color(struct fb_info_aty *fb)
return
;
#ifdef __sparc__
if
(
fb
->
mmaped
&&
(
!
fb
->
fb_info
.
display_fg
||
fb
->
fb_info
.
display_fg
->
vc_num
==
fb
->
vtconsole
))
if
(
par
->
mmaped
&&
(
!
info
->
display_fg
||
info
->
display_fg
->
vc_num
==
par
->
vtconsole
))
return
;
#endif
for
(
i
=
0
;
i
<
2
;
i
++
)
{
c
->
color
[
i
]
=
(
u32
)
red
[
i
]
<<
24
;
c
->
color
[
i
]
|=
(
u32
)
green
[
i
]
<<
16
;
c
->
color
[
i
]
|=
(
u32
)
blue
[
i
]
<<
8
;
c
->
color
[
i
]
|=
(
u32
)
pixel
[
i
];
c
->
color
[
i
]
=
(
u32
)
red
[
i
]
<<
24
;
c
->
color
[
i
]
|=
(
u32
)
green
[
i
]
<<
16
;
c
->
color
[
i
]
|=
(
u32
)
blue
[
i
]
<<
8
;
c
->
color
[
i
]
|=
(
u32
)
pixel
[
i
];
}
wait_for_fifo
(
2
,
fb
);
aty_st_le32
(
CUR_CLR0
,
c
->
color
[
0
],
fb
);
aty_st_le32
(
CUR_CLR1
,
c
->
color
[
1
],
fb
);
wait_for_fifo
(
2
,
par
);
aty_st_le32
(
CUR_CLR0
,
c
->
color
[
0
],
par
);
aty_st_le32
(
CUR_CLR1
,
c
->
color
[
1
],
par
);
}
void
aty_set_cursor_shape
(
struct
fb_info
_aty
*
fb
)
void
aty_set_cursor_shape
(
struct
fb_info
*
info
)
{
struct
aty_cursor
*
c
=
fb
->
cursor
;
struct
atyfb_par
*
par
=
(
struct
atyfb_par
*
)
info
->
par
;
struct
aty_cursor
*
c
=
par
->
cursor
;
u8
*
ram
,
m
,
b
;
int
x
,
y
;
...
...
@@ -85,8 +86,9 @@ void aty_set_cursor_shape(struct fb_info_aty *fb)
return
;
#ifdef __sparc__
if
(
fb
->
mmaped
&&
(
!
fb
->
fb_info
.
display_fg
||
fb
->
fb_info
.
display_fg
->
vc_num
==
fb
->
vtconsole
))
if
(
par
->
mmaped
&&
(
!
info
->
display_fg
||
info
->
display_fg
->
vc_num
==
par
->
vtconsole
))
return
;
#endif
...
...
@@ -95,26 +97,24 @@ void aty_set_cursor_shape(struct fb_info_aty *fb)
for
(
x
=
0
;
x
<
c
->
size
.
x
>>
2
;
x
++
)
{
m
=
c
->
mask
[
x
][
y
];
b
=
c
->
bits
[
x
][
y
];
fb_writeb
(
cursor_mask_lookup
[
m
>>
4
]
|
cursor_bits_lookup
[(
b
&
m
)
>>
4
],
ram
++
);
fb_writeb
(
cursor_mask_lookup
[
m
&
0x0f
]
|
fb_writeb
(
cursor_mask_lookup
[
m
>>
4
]
|
cursor_bits_lookup
[(
b
&
m
)
>>
4
],
ram
++
);
fb_writeb
(
cursor_mask_lookup
[
m
&
0x0f
]
|
cursor_bits_lookup
[(
b
&
m
)
&
0x0f
],
ram
++
);
}
for
(
;
x
<
8
;
x
++
)
{
fb_writeb
(
0xaa
,
ram
++
);
fb_writeb
(
0xaa
,
ram
++
);
for
(;
x
<
8
;
x
++
)
{
fb_writeb
(
0xaa
,
ram
++
);
fb_writeb
(
0xaa
,
ram
++
);
}
}
fb_memset
(
ram
,
0xaa
,
(
64
-
c
->
size
.
y
)
*
16
);
fb_memset
(
ram
,
0xaa
,
(
64
-
c
->
size
.
y
)
*
16
);
}
static
void
aty_set_cursor
(
struct
fb_info_aty
*
fb
,
int
on
)
static
void
aty_set_cursor
(
struct
fb_info
*
info
,
int
on
)
{
struct
atyfb_par
*
par
=
&
fb
->
current_
par
;
struct
aty_cursor
*
c
=
fb
->
cursor
;
struct
atyfb_par
*
par
=
(
struct
atyfb_par
*
)
info
->
par
;
struct
aty_cursor
*
c
=
par
->
cursor
;
u16
xoff
,
yoff
;
int
x
,
y
;
...
...
@@ -122,8 +122,9 @@ aty_set_cursor(struct fb_info_aty *fb, int on)
return
;
#ifdef __sparc__
if
(
fb
->
mmaped
&&
(
!
fb
->
fb_info
.
display_fg
||
fb
->
fb_info
.
display_fg
->
vc_num
==
fb
->
vtconsole
))
if
(
par
->
mmaped
&&
(
!
info
->
display_fg
||
info
->
display_fg
->
vc_num
==
par
->
vtconsole
))
return
;
#endif
...
...
@@ -144,67 +145,72 @@ aty_set_cursor(struct fb_info_aty *fb, int on)
yoff
=
0
;
}
wait_for_fifo
(
4
,
fb
);
aty_st_le32
(
CUR_OFFSET
,
(
c
->
offset
>>
3
)
+
(
yoff
<<
1
),
fb
);
wait_for_fifo
(
4
,
par
);
aty_st_le32
(
CUR_OFFSET
,
(
c
->
offset
>>
3
)
+
(
yoff
<<
1
),
par
);
aty_st_le32
(
CUR_HORZ_VERT_OFF
,
((
u32
)(
64
-
c
->
size
.
y
+
yoff
)
<<
16
)
|
xoff
,
fb
);
aty_st_le32
(
CUR_HORZ_VERT_POSN
,
((
u32
)
y
<<
16
)
|
x
,
fb
);
aty_st_le32
(
GEN_TEST_CNTL
,
aty_ld_le32
(
GEN_TEST_CNTL
,
fb
)
|
HWCURSOR_ENABLE
,
fb
);
((
u32
)
(
64
-
c
->
size
.
y
+
yoff
)
<<
16
)
|
xoff
,
par
);
aty_st_le32
(
CUR_HORZ_VERT_POSN
,
((
u32
)
y
<<
16
)
|
x
,
par
);
aty_st_le32
(
GEN_TEST_CNTL
,
aty_ld_le32
(
GEN_TEST_CNTL
,
par
)
|
HWCURSOR_ENABLE
,
par
);
}
else
{
wait_for_fifo
(
1
,
fb
);
wait_for_fifo
(
1
,
par
);
aty_st_le32
(
GEN_TEST_CNTL
,
aty_ld_le32
(
GEN_TEST_CNTL
,
fb
)
&
~
HWCURSOR_ENABLE
,
fb
);
aty_ld_le32
(
GEN_TEST_CNTL
,
par
)
&
~
HWCURSOR_ENABLE
,
par
);
}
if
(
fb
->
blitter_may_be_busy
)
wait_for_idle
(
fb
);
if
(
par
->
blitter_may_be_busy
)
wait_for_idle
(
par
);
}
static
void
aty_cursor_timer_handler
(
unsigned
long
dev_addr
)
static
void
aty_cursor_timer_handler
(
unsigned
long
dev_addr
)
{
struct
fb_info_aty
*
fb
=
(
struct
fb_info_aty
*
)
dev_addr
;
struct
fb_info
*
info
=
(
struct
fb_info
*
)
dev_addr
;
struct
atyfb_par
*
par
=
(
struct
atyfb_par
*
)
info
->
par
;
if
(
!
fb
->
cursor
)
if
(
!
par
->
cursor
)
return
;
if
(
!
fb
->
cursor
->
enable
)
if
(
!
par
->
cursor
->
enable
)
goto
out
;
if
(
fb
->
cursor
->
vbl_cnt
&&
--
fb
->
cursor
->
vbl_cnt
==
0
)
{
fb
->
cursor
->
on
^=
1
;
aty_set_cursor
(
fb
,
fb
->
cursor
->
on
);
fb
->
cursor
->
vbl_cnt
=
fb
->
cursor
->
blink_rate
;
if
(
par
->
cursor
->
vbl_cnt
&&
--
par
->
cursor
->
vbl_cnt
==
0
)
{
par
->
cursor
->
on
^=
1
;
aty_set_cursor
(
info
,
par
->
cursor
->
on
);
par
->
cursor
->
vbl_cnt
=
par
->
cursor
->
blink_rate
;
}
out:
fb
->
cursor
->
timer
->
expires
=
jiffies
+
(
HZ
/
50
);
add_timer
(
fb
->
cursor
->
timer
);
out:
par
->
cursor
->
timer
->
expires
=
jiffies
+
(
HZ
/
50
);
add_timer
(
par
->
cursor
->
timer
);
}
void
atyfb_cursor
(
struct
display
*
p
,
int
mode
,
int
x
,
int
y
)
{
struct
fb_info_aty
*
fb
=
(
struct
fb_info_aty
*
)
p
->
fb_info
;
struct
aty_cursor
*
c
=
fb
->
cursor
;
struct
fb_info
*
info
=
p
->
fb_info
;
struct
atyfb_par
*
par
=
(
struct
atyfb_par
*
)
info
->
par
;
struct
aty_cursor
*
c
=
par
->
cursor
;
if
(
!
c
)
return
;
#ifdef __sparc__
if
(
fb
->
mmaped
&&
(
!
fb
->
fb_info
.
display_fg
||
fb
->
fb_info
.
display_fg
->
vc_num
==
fb
->
vtconsole
))
if
(
par
->
mmaped
&&
(
!
info
->
display_fg
||
info
->
display_fg
->
vc_num
==
par
->
vtconsole
))
return
;
#endif
x
*=
fontwidth
(
p
);
y
*=
fontheight
(
p
);
if
(
c
->
pos
.
x
==
x
&&
c
->
pos
.
y
==
y
&&
(
mode
==
CM_ERASE
)
==
!
c
->
enable
)
if
(
c
->
pos
.
x
==
x
&&
c
->
pos
.
y
==
y
&&
(
mode
==
CM_ERASE
)
==
!
c
->
enable
)
return
;
c
->
enable
=
0
;
if
(
c
->
on
)
aty_set_cursor
(
fb
,
0
);
aty_set_cursor
(
info
,
0
);
c
->
pos
.
x
=
x
;
c
->
pos
.
y
=
y
;
...
...
@@ -216,7 +222,7 @@ void atyfb_cursor(struct display *p, int mode, int x, int y)
case
CM_DRAW
:
case
CM_MOVE
:
if
(
c
->
on
)
aty_set_cursor
(
fb
,
1
);
aty_set_cursor
(
info
,
1
);
else
c
->
vbl_cnt
=
CURSOR_DRAW_DELAY
;
c
->
enable
=
1
;
...
...
@@ -224,7 +230,7 @@ void atyfb_cursor(struct display *p, int mode, int x, int y)
}
}
struct
aty_cursor
*
__init
aty_init_cursor
(
struct
fb_info_aty
*
fb
)
struct
aty_cursor
*
__init
aty_init_cursor
(
struct
fb_info
*
info
)
{
struct
aty_cursor
*
cursor
;
unsigned
long
addr
;
...
...
@@ -242,19 +248,19 @@ struct aty_cursor * __init aty_init_cursor(struct fb_info_aty *fb)
memset
(
cursor
->
timer
,
0
,
sizeof
(
*
cursor
->
timer
));
cursor
->
blink_rate
=
DEFAULT_CURSOR_BLINK_RATE
;
fb
->
fb_info
.
fix
.
smem_len
-=
PAGE_SIZE
;
cursor
->
offset
=
fb
->
fb_info
.
fix
.
smem_len
;
info
->
fix
.
smem_len
-=
PAGE_SIZE
;
cursor
->
offset
=
info
->
fix
.
smem_len
;
#ifdef __sparc__
addr
=
fb
->
fb_info
.
screen_base
-
0x800000
+
cursor
->
offset
;
cursor
->
ram
=
(
u8
*
)
addr
;
addr
=
info
->
screen_base
-
0x800000
+
cursor
->
offset
;
cursor
->
ram
=
(
u8
*
)
addr
;
#else
#ifdef __BIG_ENDIAN
addr
=
fb
->
fb_info
.
fix
.
smem_start
-
0x800000
+
cursor
->
offset
;
cursor
->
ram
=
(
u8
*
)
ioremap
(
addr
,
1024
);
addr
=
info
->
fix
.
smem_start
-
0x800000
+
cursor
->
offset
;
cursor
->
ram
=
(
u8
*
)
ioremap
(
addr
,
1024
);
#else
addr
=
(
unsigned
long
)
fb
->
fb_info
.
screen_base
+
cursor
->
offset
;
cursor
->
ram
=
(
u8
*
)
addr
;
addr
=
(
unsigned
long
)
info
->
screen_base
+
cursor
->
offset
;
cursor
->
ram
=
(
u8
*
)
addr
;
#endif
#endif
...
...
@@ -265,17 +271,17 @@ struct aty_cursor * __init aty_init_cursor(struct fb_info_aty *fb)
init_timer
(
cursor
->
timer
);
cursor
->
timer
->
expires
=
jiffies
+
(
HZ
/
50
);
cursor
->
timer
->
data
=
(
unsigned
long
)
fb
;
cursor
->
timer
->
data
=
(
unsigned
long
)
info
;
cursor
->
timer
->
function
=
aty_cursor_timer_handler
;
add_timer
(
cursor
->
timer
);
return
cursor
;
}
int
atyfb_set_font
(
struct
display
*
d
,
int
width
,
int
height
)
{
struct
fb_info_aty
*
fb
=
(
struct
fb_info_aty
*
)
d
->
fb_info
;
struct
aty_cursor
*
c
=
fb
->
cursor
;
struct
fb_info
*
info
=
d
->
fb_info
;
struct
atyfb_par
*
par
=
(
struct
atyfb_par
*
)
info
->
par
;
struct
aty_cursor
*
c
=
par
->
cursor
;
int
i
,
j
;
if
(
c
)
{
...
...
@@ -293,13 +299,14 @@ int atyfb_set_font(struct display *d, int width, int height)
memset
(
c
->
mask
,
0
,
sizeof
(
c
->
mask
));
for
(
i
=
0
,
j
=
width
;
j
>=
0
;
j
-=
8
,
i
++
)
{
c
->
mask
[
i
][
height
-
2
]
=
(
j
>=
8
)
?
0xff
:
(
0xff
<<
(
8
-
j
));
c
->
mask
[
i
][
height
-
1
]
=
(
j
>=
8
)
?
0xff
:
(
0xff
<<
(
8
-
j
));
c
->
mask
[
i
][
height
-
2
]
=
(
j
>=
8
)
?
0xff
:
(
0xff
<<
(
8
-
j
));
c
->
mask
[
i
][
height
-
1
]
=
(
j
>=
8
)
?
0xff
:
(
0xff
<<
(
8
-
j
));
}
aty_set_cursor_color
(
fb
);
aty_set_cursor_shape
(
fb
);
aty_set_cursor_color
(
info
);
aty_set_cursor_shape
(
info
);
}
return
1
;
}
drivers/video/aty/mach64_gx.c
View file @
87520e1e
This diff is collapsed.
Click to expand it.
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