annotate drivers/radeon/radeon_vid.c @ 10624:cdfd4a43c406

I've juste found a bug which prevent to load a file whose name contain a quote ('). The menu simply execute a "loadfile '%p'" but when the %p is replaced by the actual value, quotes in it are not escaped ! Moreover, mp_input_parse_cmd contain some code to unescape strings but this code was placed after the string was copied in his final buffer. So this patch correct this issue. By Aurlien Jacobs
author albeu
date Fri, 15 Aug 2003 18:45:35 +0000
parents 8498d2731ad2
children 6e35326c742f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1 /*
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
2 *
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
3 * radeon_vid.c
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
4 *
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
5 * Copyright (C) 2001 Nick Kurshev
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
6 *
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
7 * BES YUV video overlay driver for Radeon/Rage128Pro/Rage128 cards
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
8 *
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
9 * This software has been released under the terms of the GNU Public
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
10 * license. See http://www.gnu.org/copyleft/gpl.html for details.
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
11 *
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
12 * This file is partly based on mga_vid and sis_vid stuff from
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
13 * mplayer's package.
2917
3dd4e8a45d0d double buffering.
nick
parents: 2870
diff changeset
14 * Also here was used code from CVS of GATOS project and X11 trees.
3366
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
15 *
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
16 * SPECIAL THANKS TO: Hans-Peter Raschke for active testing and hacking
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
17 * Rage128(pro) stuff of this driver.
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
18 */
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
19
3940
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
20 #define RADEON_VID_VERSION "1.2.1"
2951
31730e84515d First public release
nick
parents: 2944
diff changeset
21
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
22 /*
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
23 It's entirely possible this major conflicts with something else
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
24 mknod /dev/radeon_vid c 178 0
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
25 or
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
26 mknod /dev/rage128_vid c 178 0
3380
ae092b46d3c8 Fixed scaling in doublescan & interlaced modes
nick
parents: 3369
diff changeset
27 for Rage128/Rage128Pro chips (although it doesn't matter)
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
28 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
29 TESTED and WORKING formats: YUY2, UYVY, IYUV, I420, YV12
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
30 -----------------------------------------------------------
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
31 TODO:
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
32 Highest priority: fbvid.h compatibility
3366
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
33 High priority: Fixing BUGS
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
34 Middle priority: RGB/BGR 2-32, YVU9, IF09 support
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
35 Low priority: CLPL, IYU1, IYU2, UYNV, CYUV, YUNV, YVYU, Y41P, Y211, Y41T,
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
36 ^^^^
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
37 Y42T, V422, V655, CLJR, YUVP, UYVP, Mpeg PES (mpeg-1,2) support
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
38 ...........................................................
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
39 BUGS and LACKS:
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
40 Color and video keys don't work
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
41 */
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
42
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
43 #include <linux/config.h>
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
44 #include <linux/version.h>
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
45 #include <linux/module.h>
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
46 #include <linux/types.h>
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
47 #include <linux/kernel.h>
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
48 #include <linux/sched.h>
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
49 #include <linux/mm.h>
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
50 #include <linux/string.h>
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
51 #include <linux/errno.h>
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
52 #include <linux/slab.h>
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
53 #include <linux/pci.h>
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
54 #include <linux/ioport.h>
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
55 #include <linux/init.h>
3265
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
56 #include <linux/byteorder/swab.h>
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
57
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
58 #include "radeon_vid.h"
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
59 #include "radeon.h"
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
60
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
61 #ifdef CONFIG_MTRR
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
62 #include <asm/mtrr.h>
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
63 #endif
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
64
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
65 #include <asm/uaccess.h>
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
66 #include <asm/system.h>
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
67 #include <asm/io.h>
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
68
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
69 #define TRUE 1
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
70 #define FALSE 0
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
71
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
72 #define RADEON_VID_MAJOR 178
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
73
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
74
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
75 MODULE_AUTHOR("Nick Kurshev <nickols_k@mail.ru>");
3198
5eae81895171 Probably ugly attempt to fix Rage128 problems
nick
parents: 3164
diff changeset
76 #ifdef RAGE128
5eae81895171 Probably ugly attempt to fix Rage128 problems
nick
parents: 3164
diff changeset
77 MODULE_DESCRIPTION("Accelerated YUV BES driver for Rage128. Version: "RADEON_VID_VERSION);
5eae81895171 Probably ugly attempt to fix Rage128 problems
nick
parents: 3164
diff changeset
78 #else
5eae81895171 Probably ugly attempt to fix Rage128 problems
nick
parents: 3164
diff changeset
79 MODULE_DESCRIPTION("Accelerated YUV BES driver for Radeons. Version: "RADEON_VID_VERSION);
5eae81895171 Probably ugly attempt to fix Rage128 problems
nick
parents: 3164
diff changeset
80 #endif
2965
eb5e41e06ccc Minor lacks fixed
nick
parents: 2951
diff changeset
81 #ifdef MODULE_LICENSE
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
82 MODULE_LICENSE("GPL");
2965
eb5e41e06ccc Minor lacks fixed
nick
parents: 2951
diff changeset
83 #endif
3265
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
84 #ifdef CONFIG_MTRR
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
85 MODULE_PARM(mtrr, "i");
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
86 MODULE_PARM_DESC(mtrr, "Tune MTRR (touch=1(default))");
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
87 static int mtrr __initdata = 1;
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
88 static struct { int vram; int vram_valid; } smtrr;
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
89 #endif
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
90 MODULE_PARM(swap_fourcc, "i");
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
91 MODULE_PARM_DESC(swap_fourcc, "Swap fourcc (dont't swap=0(default))");
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
92 static int swap_fourcc __initdata = 0;
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
93
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
94 #ifdef RAGE128
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
95 #define RVID_MSG "rage128_vid: "
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
96 #define X_ADJUST 0
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
97 #else
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
98 #define RVID_MSG "radeon_vid: "
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
99 #define X_ADJUST 8
3198
5eae81895171 Probably ugly attempt to fix Rage128 problems
nick
parents: 3164
diff changeset
100 #ifndef RADEON
5eae81895171 Probably ugly attempt to fix Rage128 problems
nick
parents: 3164
diff changeset
101 #define RADEON
5eae81895171 Probably ugly attempt to fix Rage128 problems
nick
parents: 3164
diff changeset
102 #endif
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
103 #endif
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
104
3348
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
105 #undef DEBUG
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
106 #if DEBUG
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
107 #define RTRACE printk
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
108 #else
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
109 #define RTRACE(...) ((void)0)
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
110 #endif
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
111
6789
8498d2731ad2 little fix
alex
parents: 6678
diff changeset
112 #ifndef min
8498d2731ad2 little fix
alex
parents: 6678
diff changeset
113 #define min(a,b) (a < b ? a : b)
8498d2731ad2 little fix
alex
parents: 6678
diff changeset
114 #endif
8498d2731ad2 little fix
alex
parents: 6678
diff changeset
115
3940
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
116 #ifndef RAGE128
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
117 #if defined(__i386__)
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
118 /* Ugly but only way */
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
119 #undef AVOID_FPU
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
120 static double inline __FastSin(double x)
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
121 {
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
122 register double res;
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
123 __asm __volatile("fsin":"=t"(res):"0"(x));
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
124 return res;
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
125 }
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
126 #undef sin
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
127 #define sin(x) __FastSin(x)
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
128
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
129 static double inline __FastCos(double x)
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
130 {
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
131 register double res;
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
132 __asm __volatile("fcos":"=t"(res):"0"(x));
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
133 return res;
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
134 }
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
135 #undef cos
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
136 #define cos(x) __FastCos(x)
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
137 #else
3944
af4dcf6751dc solution for non-x86 users
nick
parents: 3940
diff changeset
138 #include "generic_math.h"
3940
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
139 #endif /*__386__*/
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
140 #endif /*RAGE128*/
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
141
3921
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
142 #if !defined( RAGE128 ) && !defined( AVOID_FPU )
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
143 #define RADEON_FPU 1
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
144 #endif
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
145
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
146 typedef struct bes_registers_s
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
147 {
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
148 /* base address of yuv framebuffer */
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
149 uint32_t yuv_base;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
150 uint32_t fourcc;
3278
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
151 uint32_t dest_bpp;
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
152 /* YUV BES registers */
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
153 uint32_t reg_load_cntl;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
154 uint32_t h_inc;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
155 uint32_t step_by;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
156 uint32_t y_x_start;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
157 uint32_t y_x_end;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
158 uint32_t v_inc;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
159 uint32_t p1_blank_lines_at_top;
3019
64ce4a515a78 Bad attempt of YV12 direct support
nick
parents: 2965
diff changeset
160 uint32_t p23_blank_lines_at_top;
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
161 uint32_t vid_buf_pitch0_value;
2944
ff8389ac4eb7 Scaler - works! But in greenscale mode :(
nick
parents: 2925
diff changeset
162 uint32_t vid_buf_pitch1_value;
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
163 uint32_t p1_x_start_end;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
164 uint32_t p2_x_start_end;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
165 uint32_t p3_x_start_end;
3122
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
166 uint32_t base_addr;
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
167 uint32_t vid_buf0_base_adrs;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
168 /* These ones are for auto flip: maybe in the future */
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
169 uint32_t vid_buf1_base_adrs;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
170 uint32_t vid_buf2_base_adrs;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
171 uint32_t vid_buf3_base_adrs;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
172 uint32_t vid_buf4_base_adrs;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
173 uint32_t vid_buf5_base_adrs;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
174
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
175 uint32_t p1_v_accum_init;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
176 uint32_t p1_h_accum_init;
3019
64ce4a515a78 Bad attempt of YV12 direct support
nick
parents: 2965
diff changeset
177 uint32_t p23_v_accum_init;
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
178 uint32_t p23_h_accum_init;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
179 uint32_t scale_cntl;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
180 uint32_t exclusive_horz;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
181 uint32_t auto_flip_cntl;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
182 uint32_t filter_cntl;
3250
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
183 uint32_t key_cntl;
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
184 uint32_t test;
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
185 /* Configurable stuff */
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
186 int double_buff;
3278
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
187
3247
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
188 int brightness;
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
189 int saturation;
3278
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
190
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
191 int ckey_on;
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
192 uint32_t graphics_key_clr;
3278
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
193 uint32_t graphics_key_msk;
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
194
3250
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
195 int deinterlace_on;
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
196 uint32_t deinterlace_pattern;
3278
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
197
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
198 } bes_registers_t;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
199
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
200 typedef struct video_registers_s
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
201 {
3348
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
202 #ifdef DEBUG
3305
27be0e71c0ee Rage128 problems???
nick
parents: 3278
diff changeset
203 const char * sname;
3348
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
204 #endif
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
205 uint32_t name;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
206 uint32_t value;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
207 }video_registers_t;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
208
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
209 static bes_registers_t besr;
3900
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
210 #ifndef RAGE128
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
211 static int IsR200=0;
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
212 #endif
3348
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
213 #ifdef DEBUG
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
214 #define DECLARE_VREG(name) { #name, name, 0 }
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
215 #else
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
216 #define DECLARE_VREG(name) { name, 0 }
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
217 #endif
3607
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
218 #ifdef DEBUG
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
219 static video_registers_t vregs[] =
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
220 {
3473
8a46f6a9efd0 Preparing to next acceleration level
nick
parents: 3470
diff changeset
221 DECLARE_VREG(VIDEOMUX_CNTL),
8a46f6a9efd0 Preparing to next acceleration level
nick
parents: 3470
diff changeset
222 DECLARE_VREG(VIPPAD_MASK),
8a46f6a9efd0 Preparing to next acceleration level
nick
parents: 3470
diff changeset
223 DECLARE_VREG(VIPPAD1_A),
8a46f6a9efd0 Preparing to next acceleration level
nick
parents: 3470
diff changeset
224 DECLARE_VREG(VIPPAD1_EN),
8a46f6a9efd0 Preparing to next acceleration level
nick
parents: 3470
diff changeset
225 DECLARE_VREG(VIPPAD1_Y),
3348
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
226 DECLARE_VREG(OV0_Y_X_START),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
227 DECLARE_VREG(OV0_Y_X_END),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
228 DECLARE_VREG(OV0_PIPELINE_CNTL),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
229 DECLARE_VREG(OV0_EXCLUSIVE_HORZ),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
230 DECLARE_VREG(OV0_EXCLUSIVE_VERT),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
231 DECLARE_VREG(OV0_REG_LOAD_CNTL),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
232 DECLARE_VREG(OV0_SCALE_CNTL),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
233 DECLARE_VREG(OV0_V_INC),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
234 DECLARE_VREG(OV0_P1_V_ACCUM_INIT),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
235 DECLARE_VREG(OV0_P23_V_ACCUM_INIT),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
236 DECLARE_VREG(OV0_P1_BLANK_LINES_AT_TOP),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
237 DECLARE_VREG(OV0_P23_BLANK_LINES_AT_TOP),
3487
135926174ee8 Tuned some values:
nick
parents: 3473
diff changeset
238 #ifdef RADEON
3348
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
239 DECLARE_VREG(OV0_BASE_ADDR),
3487
135926174ee8 Tuned some values:
nick
parents: 3473
diff changeset
240 #endif
3348
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
241 DECLARE_VREG(OV0_VID_BUF0_BASE_ADRS),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
242 DECLARE_VREG(OV0_VID_BUF1_BASE_ADRS),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
243 DECLARE_VREG(OV0_VID_BUF2_BASE_ADRS),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
244 DECLARE_VREG(OV0_VID_BUF3_BASE_ADRS),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
245 DECLARE_VREG(OV0_VID_BUF4_BASE_ADRS),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
246 DECLARE_VREG(OV0_VID_BUF5_BASE_ADRS),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
247 DECLARE_VREG(OV0_VID_BUF_PITCH0_VALUE),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
248 DECLARE_VREG(OV0_VID_BUF_PITCH1_VALUE),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
249 DECLARE_VREG(OV0_AUTO_FLIP_CNTL),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
250 DECLARE_VREG(OV0_DEINTERLACE_PATTERN),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
251 DECLARE_VREG(OV0_SUBMIT_HISTORY),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
252 DECLARE_VREG(OV0_H_INC),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
253 DECLARE_VREG(OV0_STEP_BY),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
254 DECLARE_VREG(OV0_P1_H_ACCUM_INIT),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
255 DECLARE_VREG(OV0_P23_H_ACCUM_INIT),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
256 DECLARE_VREG(OV0_P1_X_START_END),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
257 DECLARE_VREG(OV0_P2_X_START_END),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
258 DECLARE_VREG(OV0_P3_X_START_END),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
259 DECLARE_VREG(OV0_FILTER_CNTL),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
260 DECLARE_VREG(OV0_FOUR_TAP_COEF_0),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
261 DECLARE_VREG(OV0_FOUR_TAP_COEF_1),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
262 DECLARE_VREG(OV0_FOUR_TAP_COEF_2),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
263 DECLARE_VREG(OV0_FOUR_TAP_COEF_3),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
264 DECLARE_VREG(OV0_FOUR_TAP_COEF_4),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
265 DECLARE_VREG(OV0_FLAG_CNTL),
3470
1a1669d42306 Tuned some registers
nick
parents: 3380
diff changeset
266 #ifdef RAGE128
3348
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
267 DECLARE_VREG(OV0_COLOUR_CNTL),
3470
1a1669d42306 Tuned some registers
nick
parents: 3380
diff changeset
268 #else
1a1669d42306 Tuned some registers
nick
parents: 3380
diff changeset
269 DECLARE_VREG(OV0_SLICE_CNTL),
1a1669d42306 Tuned some registers
nick
parents: 3380
diff changeset
270 #endif
3348
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
271 DECLARE_VREG(OV0_VID_KEY_CLR),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
272 DECLARE_VREG(OV0_VID_KEY_MSK),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
273 DECLARE_VREG(OV0_GRAPHICS_KEY_CLR),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
274 DECLARE_VREG(OV0_GRAPHICS_KEY_MSK),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
275 DECLARE_VREG(OV0_KEY_CNTL),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
276 DECLARE_VREG(OV0_TEST),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
277 DECLARE_VREG(OV0_LIN_TRANS_A),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
278 DECLARE_VREG(OV0_LIN_TRANS_B),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
279 DECLARE_VREG(OV0_LIN_TRANS_C),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
280 DECLARE_VREG(OV0_LIN_TRANS_D),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
281 DECLARE_VREG(OV0_LIN_TRANS_E),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
282 DECLARE_VREG(OV0_LIN_TRANS_F),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
283 DECLARE_VREG(OV0_GAMMA_0_F),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
284 DECLARE_VREG(OV0_GAMMA_10_1F),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
285 DECLARE_VREG(OV0_GAMMA_20_3F),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
286 DECLARE_VREG(OV0_GAMMA_40_7F),
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
287 DECLARE_VREG(OV0_GAMMA_380_3BF),
3473
8a46f6a9efd0 Preparing to next acceleration level
nick
parents: 3470
diff changeset
288 DECLARE_VREG(OV0_GAMMA_3C0_3FF),
8a46f6a9efd0 Preparing to next acceleration level
nick
parents: 3470
diff changeset
289 DECLARE_VREG(SUBPIC_CNTL),
8a46f6a9efd0 Preparing to next acceleration level
nick
parents: 3470
diff changeset
290 DECLARE_VREG(SUBPIC_DEFCOLCON),
8a46f6a9efd0 Preparing to next acceleration level
nick
parents: 3470
diff changeset
291 DECLARE_VREG(SUBPIC_Y_X_START),
8a46f6a9efd0 Preparing to next acceleration level
nick
parents: 3470
diff changeset
292 DECLARE_VREG(SUBPIC_Y_X_END),
8a46f6a9efd0 Preparing to next acceleration level
nick
parents: 3470
diff changeset
293 DECLARE_VREG(SUBPIC_V_INC),
8a46f6a9efd0 Preparing to next acceleration level
nick
parents: 3470
diff changeset
294 DECLARE_VREG(SUBPIC_H_INC),
8a46f6a9efd0 Preparing to next acceleration level
nick
parents: 3470
diff changeset
295 DECLARE_VREG(SUBPIC_BUF0_OFFSET),
8a46f6a9efd0 Preparing to next acceleration level
nick
parents: 3470
diff changeset
296 DECLARE_VREG(SUBPIC_BUF1_OFFSET),
8a46f6a9efd0 Preparing to next acceleration level
nick
parents: 3470
diff changeset
297 DECLARE_VREG(SUBPIC_LC0_OFFSET),
8a46f6a9efd0 Preparing to next acceleration level
nick
parents: 3470
diff changeset
298 DECLARE_VREG(SUBPIC_LC1_OFFSET),
8a46f6a9efd0 Preparing to next acceleration level
nick
parents: 3470
diff changeset
299 DECLARE_VREG(SUBPIC_PITCH),
8a46f6a9efd0 Preparing to next acceleration level
nick
parents: 3470
diff changeset
300 DECLARE_VREG(SUBPIC_BTN_HLI_COLCON),
8a46f6a9efd0 Preparing to next acceleration level
nick
parents: 3470
diff changeset
301 DECLARE_VREG(SUBPIC_BTN_HLI_Y_X_START),
8a46f6a9efd0 Preparing to next acceleration level
nick
parents: 3470
diff changeset
302 DECLARE_VREG(SUBPIC_BTN_HLI_Y_X_END),
8a46f6a9efd0 Preparing to next acceleration level
nick
parents: 3470
diff changeset
303 DECLARE_VREG(SUBPIC_PALETTE_INDEX),
8a46f6a9efd0 Preparing to next acceleration level
nick
parents: 3470
diff changeset
304 DECLARE_VREG(SUBPIC_PALETTE_DATA),
8a46f6a9efd0 Preparing to next acceleration level
nick
parents: 3470
diff changeset
305 DECLARE_VREG(SUBPIC_H_ACCUM_INIT),
8a46f6a9efd0 Preparing to next acceleration level
nick
parents: 3470
diff changeset
306 DECLARE_VREG(SUBPIC_V_ACCUM_INIT),
8a46f6a9efd0 Preparing to next acceleration level
nick
parents: 3470
diff changeset
307 DECLARE_VREG(IDCT_RUNS),
8a46f6a9efd0 Preparing to next acceleration level
nick
parents: 3470
diff changeset
308 DECLARE_VREG(IDCT_LEVELS),
8a46f6a9efd0 Preparing to next acceleration level
nick
parents: 3470
diff changeset
309 DECLARE_VREG(IDCT_AUTH_CONTROL),
8a46f6a9efd0 Preparing to next acceleration level
nick
parents: 3470
diff changeset
310 DECLARE_VREG(IDCT_AUTH),
8a46f6a9efd0 Preparing to next acceleration level
nick
parents: 3470
diff changeset
311 DECLARE_VREG(IDCT_CONTROL)
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
312 };
3607
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
313 #endif
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
314 static uint32_t radeon_vid_in_use = 0;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
315
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
316 static uint8_t *radeon_mmio_base = 0;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
317 static uint32_t radeon_mem_base = 0;
3019
64ce4a515a78 Bad attempt of YV12 direct support
nick
parents: 2965
diff changeset
318 static int32_t radeon_overlay_off = 0;
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
319 static uint32_t radeon_ram_size = 0;
3263
4ee5fc519e08 Fixed 'cat' problems
nick
parents: 3253
diff changeset
320 #define PARAM_BUFF_SIZE 4096
4ee5fc519e08 Fixed 'cat' problems
nick
parents: 3253
diff changeset
321 static uint8_t *radeon_param_buff = NULL;
4ee5fc519e08 Fixed 'cat' problems
nick
parents: 3253
diff changeset
322 static uint32_t radeon_param_buff_size=0;
4ee5fc519e08 Fixed 'cat' problems
nick
parents: 3253
diff changeset
323 static uint32_t radeon_param_buff_len=0; /* real length of buffer */
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
324 static mga_vid_config_t radeon_config;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
325
3122
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
326 static char *fourcc_format_name(int format)
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
327 {
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
328 switch(format)
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
329 {
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
330 case IMGFMT_RGB8: return("RGB 8-bit");
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
331 case IMGFMT_RGB15: return("RGB 15-bit");
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
332 case IMGFMT_RGB16: return("RGB 16-bit");
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
333 case IMGFMT_RGB24: return("RGB 24-bit");
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
334 case IMGFMT_RGB32: return("RGB 32-bit");
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
335 case IMGFMT_BGR8: return("BGR 8-bit");
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
336 case IMGFMT_BGR15: return("BGR 15-bit");
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
337 case IMGFMT_BGR16: return("BGR 16-bit");
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
338 case IMGFMT_BGR24: return("BGR 24-bit");
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
339 case IMGFMT_BGR32: return("BGR 32-bit");
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
340 case IMGFMT_YVU9: return("Planar YVU9");
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
341 case IMGFMT_IF09: return("Planar IF09");
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
342 case IMGFMT_YV12: return("Planar YV12");
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
343 case IMGFMT_I420: return("Planar I420");
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
344 case IMGFMT_IYUV: return("Planar IYUV");
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
345 case IMGFMT_CLPL: return("Planar CLPL");
3198
5eae81895171 Probably ugly attempt to fix Rage128 problems
nick
parents: 3164
diff changeset
346 case IMGFMT_Y800: return("Planar Y800");
5eae81895171 Probably ugly attempt to fix Rage128 problems
nick
parents: 3164
diff changeset
347 case IMGFMT_Y8: return("Planar Y8");
5eae81895171 Probably ugly attempt to fix Rage128 problems
nick
parents: 3164
diff changeset
348 case IMGFMT_IUYV: return("Packed IUYV");
5eae81895171 Probably ugly attempt to fix Rage128 problems
nick
parents: 3164
diff changeset
349 case IMGFMT_IY41: return("Packed IY41");
3122
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
350 case IMGFMT_IYU1: return("Packed IYU1");
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
351 case IMGFMT_IYU2: return("Packed IYU2");
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
352 case IMGFMT_UYNV: return("Packed UYNV");
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
353 case IMGFMT_cyuv: return("Packed CYUV");
3198
5eae81895171 Probably ugly attempt to fix Rage128 problems
nick
parents: 3164
diff changeset
354 case IMGFMT_Y422: return("Packed Y422");
3122
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
355 case IMGFMT_YUY2: return("Packed YUY2");
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
356 case IMGFMT_YUNV: return("Packed YUNV");
6471
cc66affa965a fix fourcc's problem
pontscho
parents: 3944
diff changeset
357 case IMGFMT_UYVY: return("Packed UYVY");
cc66affa965a fix fourcc's problem
pontscho
parents: 3944
diff changeset
358 // case IMGFMT_YVYU: return("Packed YVYU");
3122
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
359 case IMGFMT_Y41P: return("Packed Y41P");
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
360 case IMGFMT_Y211: return("Packed Y211");
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
361 case IMGFMT_Y41T: return("Packed Y41T");
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
362 case IMGFMT_Y42T: return("Packed Y42T");
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
363 case IMGFMT_V422: return("Packed V422");
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
364 case IMGFMT_V655: return("Packed V655");
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
365 case IMGFMT_CLJR: return("Packed CLJR");
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
366 case IMGFMT_YUVP: return("Packed YUVP");
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
367 case IMGFMT_UYVP: return("Packed UYVP");
3198
5eae81895171 Probably ugly attempt to fix Rage128 problems
nick
parents: 3164
diff changeset
368 case IMGFMT_MPEGPES: return("Mpeg PES");
3122
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
369 }
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
370 return("Unknown");
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
371 }
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
372
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
373
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
374 /*
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
375 * IO macros
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
376 */
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
377
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
378 #define INREG8(addr) readb((radeon_mmio_base)+addr)
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
379 #define OUTREG8(addr,val) writeb(val, (radeon_mmio_base)+addr)
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
380 #define INREG(addr) readl((radeon_mmio_base)+addr)
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
381 #define OUTREG(addr,val) writel(val, (radeon_mmio_base)+addr)
3607
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
382 #define OUTREGP(addr,val,mask) \
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
383 do { \
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
384 unsigned int _tmp = INREG(addr); \
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
385 _tmp &= (mask); \
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
386 _tmp |= (val); \
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
387 OUTREG(addr, _tmp); \
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
388 } while (0)
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
389
3278
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
390 static uint32_t radeon_vid_get_dbpp( void )
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
391 {
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
392 uint32_t dbpp,retval;
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
393 dbpp = (INREG(CRTC_GEN_CNTL)>>8)& 0xF;
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
394 switch(dbpp)
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
395 {
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
396 case DST_8BPP: retval = 8; break;
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
397 case DST_15BPP: retval = 15; break;
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
398 case DST_16BPP: retval = 16; break;
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
399 case DST_24BPP: retval = 24; break;
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
400 default: retval=32; break;
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
401 }
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
402 return retval;
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
403 }
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
404
3369
13c202356a41 Fixed scaling in doublescan modes
nick
parents: 3368
diff changeset
405 static int radeon_is_dbl_scan( void )
13c202356a41 Fixed scaling in doublescan modes
nick
parents: 3368
diff changeset
406 {
13c202356a41 Fixed scaling in doublescan modes
nick
parents: 3368
diff changeset
407 return (INREG(CRTC_GEN_CNTL))&CRTC_DBL_SCAN_EN;
13c202356a41 Fixed scaling in doublescan modes
nick
parents: 3368
diff changeset
408 }
13c202356a41 Fixed scaling in doublescan modes
nick
parents: 3368
diff changeset
409
3380
ae092b46d3c8 Fixed scaling in doublescan & interlaced modes
nick
parents: 3369
diff changeset
410 static int radeon_is_interlace( void )
ae092b46d3c8 Fixed scaling in doublescan & interlaced modes
nick
parents: 3369
diff changeset
411 {
ae092b46d3c8 Fixed scaling in doublescan & interlaced modes
nick
parents: 3369
diff changeset
412 return (INREG(CRTC_GEN_CNTL))&CRTC_INTERLACE_EN;
ae092b46d3c8 Fixed scaling in doublescan & interlaced modes
nick
parents: 3369
diff changeset
413 }
3369
13c202356a41 Fixed scaling in doublescan modes
nick
parents: 3368
diff changeset
414
3607
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
415 static __inline__ void radeon_engine_flush ( void )
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
416 {
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
417 int i;
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
418
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
419 /* initiate flush */
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
420 OUTREGP(RB2D_DSTCACHE_CTLSTAT, RB2D_DC_FLUSH_ALL,
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
421 ~RB2D_DC_FLUSH_ALL);
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
422
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
423 for (i=0; i < 2000000; i++) {
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
424 if (!(INREG(RB2D_DSTCACHE_CTLSTAT) & RB2D_DC_BUSY))
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
425 break;
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
426 }
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
427 }
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
428
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
429
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
430 static __inline__ void _radeon_fifo_wait (int entries)
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
431 {
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
432 int i;
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
433
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
434 for (i=0; i<2000000; i++)
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
435 if ((INREG(RBBM_STATUS) & 0x7f) >= entries)
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
436 return;
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
437 }
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
438
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
439
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
440 static __inline__ void _radeon_engine_idle ( void )
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
441 {
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
442 int i;
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
443
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
444 /* ensure FIFO is empty before waiting for idle */
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
445 _radeon_fifo_wait (64);
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
446
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
447 for (i=0; i<2000000; i++) {
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
448 if (((INREG(RBBM_STATUS) & GUI_ACTIVE)) == 0) {
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
449 radeon_engine_flush ();
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
450 return;
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
451 }
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
452 }
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
453 }
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
454
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
455 #define radeon_engine_idle() _radeon_engine_idle()
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
456 #define radeon_fifo_wait(entries) _radeon_fifo_wait(entries)
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
457
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
458 #if 0
3265
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
459 static void __init radeon_vid_save_state( void )
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
460 {
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
461 size_t i;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
462 for(i=0;i<sizeof(vregs)/sizeof(video_registers_t);i++)
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
463 vregs[i].value = INREG(vregs[i].name);
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
464 }
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
465
3265
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
466 static void __exit radeon_vid_restore_state( void )
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
467 {
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
468 size_t i;
3607
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
469 radeon_fifo_wait(2);
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
470 OUTREG(OV0_REG_LOAD_CNTL, REG_LD_CTL_LOCK);
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
471 radeon_engine_idle();
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
472 while(!(INREG(OV0_REG_LOAD_CNTL)&REG_LD_CTL_LOCK_READBACK));
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
473 radeon_fifo_wait(15);
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
474 for(i=0;i<sizeof(vregs)/sizeof(video_registers_t);i++)
3607
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
475 {
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
476 radeon_fifo_wait(1);
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
477 OUTREG(vregs[i].name,vregs[i].value);
3607
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
478 }
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
479 OUTREG(OV0_REG_LOAD_CNTL, 0);
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
480 }
3607
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
481 #endif
3305
27be0e71c0ee Rage128 problems???
nick
parents: 3278
diff changeset
482 #ifdef DEBUG
27be0e71c0ee Rage128 problems???
nick
parents: 3278
diff changeset
483 static void radeon_vid_dump_regs( void )
27be0e71c0ee Rage128 problems???
nick
parents: 3278
diff changeset
484 {
27be0e71c0ee Rage128 problems???
nick
parents: 3278
diff changeset
485 size_t i;
27be0e71c0ee Rage128 problems???
nick
parents: 3278
diff changeset
486 printk(RVID_MSG"*** Begin of OV0 registers dump ***\n");
27be0e71c0ee Rage128 problems???
nick
parents: 3278
diff changeset
487 for(i=0;i<sizeof(vregs)/sizeof(video_registers_t);i++)
27be0e71c0ee Rage128 problems???
nick
parents: 3278
diff changeset
488 printk(RVID_MSG"%s = %08X\n",vregs[i].sname,INREG(vregs[i].name));
27be0e71c0ee Rage128 problems???
nick
parents: 3278
diff changeset
489 printk(RVID_MSG"*** End of OV0 registers dump ***\n");
27be0e71c0ee Rage128 problems???
nick
parents: 3278
diff changeset
490 }
27be0e71c0ee Rage128 problems???
nick
parents: 3278
diff changeset
491 #endif
27be0e71c0ee Rage128 problems???
nick
parents: 3278
diff changeset
492
3921
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
493 #ifdef RADEON_FPU
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
494 /* Reference color space transform data */
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
495 typedef struct tagREF_TRANSFORM
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
496 {
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
497 float RefLuma;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
498 float RefRCb;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
499 float RefRCr;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
500 float RefGCb;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
501 float RefGCr;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
502 float RefBCb;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
503 float RefBCr;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
504 } REF_TRANSFORM;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
505
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
506 /* Parameters for ITU-R BT.601 and ITU-R BT.709 colour spaces */
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
507 REF_TRANSFORM trans[2] =
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
508 {
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
509 {1.1678, 0.0, 1.6007, -0.3929, -0.8154, 2.0232, 0.0}, /* BT.601 */
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
510 {1.1678, 0.0, 1.7980, -0.2139, -0.5345, 2.1186, 0.0} /* BT.709 */
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
511 };
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
512 /****************************************************************************
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
513 * SetTransform *
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
514 * Function: Calculates and sets color space transform from supplied *
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
515 * reference transform, gamma, brightness, contrast, hue and *
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
516 * saturation. *
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
517 * Inputs: bright - brightness *
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
518 * cont - contrast *
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
519 * sat - saturation *
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
520 * hue - hue *
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
521 * ref - index to the table of refernce transforms *
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
522 * Outputs: NONE *
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
523 ****************************************************************************/
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
524
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
525 static void radeon_set_transform(float bright, float cont, float sat,
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
526 float hue, unsigned ref)
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
527 {
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
528 float OvHueSin, OvHueCos;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
529 float CAdjLuma, CAdjOff;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
530 float CAdjRCb, CAdjRCr;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
531 float CAdjGCb, CAdjGCr;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
532 float CAdjBCb, CAdjBCr;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
533 float OvLuma, OvROff, OvGOff, OvBOff;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
534 float OvRCb, OvRCr;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
535 float OvGCb, OvGCr;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
536 float OvBCb, OvBCr;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
537 float Loff = 64.0;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
538 float Coff = 512.0f;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
539
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
540 u32 dwOvLuma, dwOvROff, dwOvGOff, dwOvBOff;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
541 u32 dwOvRCb, dwOvRCr;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
542 u32 dwOvGCb, dwOvGCr;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
543 u32 dwOvBCb, dwOvBCr;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
544
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
545 if (ref >= 2) return;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
546
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
547 OvHueSin = sin((double)hue);
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
548 OvHueCos = cos((double)hue);
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
549
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
550 CAdjLuma = cont * trans[ref].RefLuma;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
551 CAdjOff = cont * trans[ref].RefLuma * bright * 1023.0;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
552
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
553 CAdjRCb = sat * -OvHueSin * trans[ref].RefRCr;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
554 CAdjRCr = sat * OvHueCos * trans[ref].RefRCr;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
555 CAdjGCb = sat * (OvHueCos * trans[ref].RefGCb - OvHueSin * trans[ref].RefGCr);
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
556 CAdjGCr = sat * (OvHueSin * trans[ref].RefGCb + OvHueCos * trans[ref].RefGCr);
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
557 CAdjBCb = sat * OvHueCos * trans[ref].RefBCb;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
558 CAdjBCr = sat * OvHueSin * trans[ref].RefBCb;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
559
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
560 #if 0 /* default constants */
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
561 CAdjLuma = 1.16455078125;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
562
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
563 CAdjRCb = 0.0;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
564 CAdjRCr = 1.59619140625;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
565 CAdjGCb = -0.39111328125;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
566 CAdjGCr = -0.8125;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
567 CAdjBCb = 2.01708984375;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
568 CAdjBCr = 0;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
569 #endif
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
570 OvLuma = CAdjLuma;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
571 OvRCb = CAdjRCb;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
572 OvRCr = CAdjRCr;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
573 OvGCb = CAdjGCb;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
574 OvGCr = CAdjGCr;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
575 OvBCb = CAdjBCb;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
576 OvBCr = CAdjBCr;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
577 OvROff = CAdjOff -
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
578 OvLuma * Loff - (OvRCb + OvRCr) * Coff;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
579 OvGOff = CAdjOff -
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
580 OvLuma * Loff - (OvGCb + OvGCr) * Coff;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
581 OvBOff = CAdjOff -
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
582 OvLuma * Loff - (OvBCb + OvBCr) * Coff;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
583 #if 0 /* default constants */
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
584 OvROff = -888.5;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
585 OvGOff = 545;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
586 OvBOff = -1104;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
587 #endif
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
588
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
589 dwOvROff = ((int)(OvROff * 2.0)) & 0x1fff;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
590 dwOvGOff = (int)(OvGOff * 2.0) & 0x1fff;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
591 dwOvBOff = (int)(OvBOff * 2.0) & 0x1fff;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
592 if(!IsR200)
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
593 {
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
594 dwOvLuma =(((int)(OvLuma * 2048.0))&0x7fff)<<17;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
595 dwOvRCb = (((int)(OvRCb * 2048.0))&0x7fff)<<1;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
596 dwOvRCr = (((int)(OvRCr * 2048.0))&0x7fff)<<17;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
597 dwOvGCb = (((int)(OvGCb * 2048.0))&0x7fff)<<1;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
598 dwOvGCr = (((int)(OvGCr * 2048.0))&0x7fff)<<17;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
599 dwOvBCb = (((int)(OvBCb * 2048.0))&0x7fff)<<1;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
600 dwOvBCr = (((int)(OvBCr * 2048.0))&0x7fff)<<17;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
601 }
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
602 else
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
603 {
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
604 dwOvLuma = (((int)(OvLuma * 256.0))&0x7ff)<<20;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
605 dwOvRCb = (((int)(OvRCb * 256.0))&0x7ff)<<4;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
606 dwOvRCr = (((int)(OvRCr * 256.0))&0x7ff)<<20;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
607 dwOvGCb = (((int)(OvGCb * 256.0))&0x7ff)<<4;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
608 dwOvGCr = (((int)(OvGCr * 256.0))&0x7ff)<<20;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
609 dwOvBCb = (((int)(OvBCb * 256.0))&0x7ff)<<4;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
610 dwOvBCr = (((int)(OvBCr * 256.0))&0x7ff)<<20;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
611 }
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
612
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
613 OUTREG(OV0_LIN_TRANS_A, dwOvRCb | dwOvLuma);
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
614 OUTREG(OV0_LIN_TRANS_B, dwOvROff | dwOvRCr);
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
615 OUTREG(OV0_LIN_TRANS_C, dwOvGCb | dwOvLuma);
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
616 OUTREG(OV0_LIN_TRANS_D, dwOvGOff | dwOvGCr);
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
617 OUTREG(OV0_LIN_TRANS_E, dwOvBCb | dwOvLuma);
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
618 OUTREG(OV0_LIN_TRANS_F, dwOvBOff | dwOvBCr);
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
619 }
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
620 #endif
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
621
3900
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
622 #ifndef RAGE128
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
623 /* Gamma curve definition */
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
624 typedef struct
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
625 {
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
626 unsigned int gammaReg;
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
627 unsigned int gammaSlope;
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
628 unsigned int gammaOffset;
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
629 }GAMMA_SETTINGS;
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
630
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
631 /* Recommended gamma curve parameters */
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
632 GAMMA_SETTINGS r200_def_gamma[18] =
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
633 {
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
634 {OV0_GAMMA_0_F, 0x100, 0x0000},
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
635 {OV0_GAMMA_10_1F, 0x100, 0x0020},
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
636 {OV0_GAMMA_20_3F, 0x100, 0x0040},
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
637 {OV0_GAMMA_40_7F, 0x100, 0x0080},
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
638 {OV0_GAMMA_80_BF, 0x100, 0x0100},
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
639 {OV0_GAMMA_C0_FF, 0x100, 0x0100},
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
640 {OV0_GAMMA_100_13F, 0x100, 0x0200},
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
641 {OV0_GAMMA_140_17F, 0x100, 0x0200},
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
642 {OV0_GAMMA_180_1BF, 0x100, 0x0300},
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
643 {OV0_GAMMA_1C0_1FF, 0x100, 0x0300},
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
644 {OV0_GAMMA_200_23F, 0x100, 0x0400},
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
645 {OV0_GAMMA_240_27F, 0x100, 0x0400},
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
646 {OV0_GAMMA_280_2BF, 0x100, 0x0500},
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
647 {OV0_GAMMA_2C0_2FF, 0x100, 0x0500},
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
648 {OV0_GAMMA_300_33F, 0x100, 0x0600},
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
649 {OV0_GAMMA_340_37F, 0x100, 0x0600},
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
650 {OV0_GAMMA_380_3BF, 0x100, 0x0700},
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
651 {OV0_GAMMA_3C0_3FF, 0x100, 0x0700}
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
652 };
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
653
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
654 GAMMA_SETTINGS r100_def_gamma[6] =
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
655 {
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
656 {OV0_GAMMA_0_F, 0x100, 0x0000},
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
657 {OV0_GAMMA_10_1F, 0x100, 0x0020},
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
658 {OV0_GAMMA_20_3F, 0x100, 0x0040},
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
659 {OV0_GAMMA_40_7F, 0x100, 0x0080},
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
660 {OV0_GAMMA_380_3BF, 0x100, 0x0100},
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
661 {OV0_GAMMA_3C0_3FF, 0x100, 0x0100}
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
662 };
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
663
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
664 static void make_default_gamma_correction( void )
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
665 {
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
666 size_t i;
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
667 if(!IsR200){
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
668 OUTREG(OV0_LIN_TRANS_A, 0x12A00000);
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
669 OUTREG(OV0_LIN_TRANS_B, 0x199018FE);
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
670 OUTREG(OV0_LIN_TRANS_C, 0x12A0F9B0);
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
671 OUTREG(OV0_LIN_TRANS_D, 0xF2F0043B);
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
672 OUTREG(OV0_LIN_TRANS_E, 0x12A02050);
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
673 OUTREG(OV0_LIN_TRANS_F, 0x0000174E);
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
674 for(i=0; i<6; i++){
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
675 OUTREG(r100_def_gamma[i].gammaReg,
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
676 (r100_def_gamma[i].gammaSlope<<16) |
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
677 r100_def_gamma[i].gammaOffset);
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
678 }
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
679 }
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
680 else{
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
681 OUTREG(OV0_LIN_TRANS_A, 0x12a00000);
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
682 OUTREG(OV0_LIN_TRANS_B, 0x1990190e);
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
683 OUTREG(OV0_LIN_TRANS_C, 0x12a0f9c0);
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
684 OUTREG(OV0_LIN_TRANS_D, 0xf3000442);
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
685 OUTREG(OV0_LIN_TRANS_E, 0x12a02040);
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
686 OUTREG(OV0_LIN_TRANS_F, 0x175f);
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
687
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
688 /* Default Gamma,
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
689 Of 18 segments for gamma cure, all segments in R200 are programmable,
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
690 while only lower 4 and upper 2 segments are programmable in Radeon*/
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
691 for(i=0; i<18; i++){
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
692 OUTREG(r200_def_gamma[i].gammaReg,
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
693 (r200_def_gamma[i].gammaSlope<<16) |
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
694 r200_def_gamma[i].gammaOffset);
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
695 }
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
696 }
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
697 }
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
698 #endif
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
699
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
700 static void radeon_vid_stop_video( void )
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
701 {
3607
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
702 radeon_engine_idle();
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
703 OUTREG(OV0_SCALE_CNTL, SCALER_SOFT_RESET);
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
704 OUTREG(OV0_EXCLUSIVE_HORZ, 0);
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
705 OUTREG(OV0_AUTO_FLIP_CNTL, 0); /* maybe */
3487
135926174ee8 Tuned some values:
nick
parents: 3473
diff changeset
706 OUTREG(OV0_FILTER_CNTL, FILTER_HARDCODED_COEF);
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
707 OUTREG(OV0_KEY_CNTL, GRAPHIC_KEY_FN_NE);
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
708 OUTREG(OV0_TEST, 0);
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
709 }
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
710
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
711 static void radeon_vid_display_video( void )
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
712 {
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
713 int bes_flags;
3607
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
714 radeon_fifo_wait(2);
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
715 OUTREG(OV0_REG_LOAD_CNTL, REG_LD_CTL_LOCK);
3607
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
716 radeon_engine_idle();
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
717 while(!(INREG(OV0_REG_LOAD_CNTL)&REG_LD_CTL_LOCK_READBACK));
3607
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
718 radeon_fifo_wait(15);
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
719 OUTREG(OV0_AUTO_FLIP_CNTL,OV0_AUTO_FLIP_CNTL_SOFT_BUF_ODD);
3348
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
720 OUTREG(OV0_AUTO_FLIP_CNTL,(INREG(OV0_AUTO_FLIP_CNTL)^OV0_AUTO_FLIP_CNTL_SOFT_EOF_TOGGLE));
7b6f02207ebc Code cleanup
nick
parents: 3347
diff changeset
721 OUTREG(OV0_AUTO_FLIP_CNTL,(INREG(OV0_AUTO_FLIP_CNTL)^OV0_AUTO_FLIP_CNTL_SOFT_EOF_TOGGLE));
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
722
3250
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
723 OUTREG(OV0_DEINTERLACE_PATTERN,besr.deinterlace_pattern);
3470
1a1669d42306 Tuned some registers
nick
parents: 3380
diff changeset
724 #ifdef RAGE128
3266
ff90589b635f Fixed single buffering problems and -vo mga compatibility by number of buffers
nick
parents: 3265
diff changeset
725 OUTREG(OV0_COLOUR_CNTL, (besr.brightness & 0x7f) |
ff90589b635f Fixed single buffering problems and -vo mga compatibility by number of buffers
nick
parents: 3265
diff changeset
726 (besr.saturation << 8) |
ff90589b635f Fixed single buffering problems and -vo mga compatibility by number of buffers
nick
parents: 3265
diff changeset
727 (besr.saturation << 16));
3470
1a1669d42306 Tuned some registers
nick
parents: 3380
diff changeset
728 #endif
3607
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
729 radeon_fifo_wait(2);
3278
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
730 if(besr.ckey_on)
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
731 {
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
732 OUTREG(OV0_GRAPHICS_KEY_MSK, besr.graphics_key_msk);
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
733 OUTREG(OV0_GRAPHICS_KEY_CLR, besr.graphics_key_clr);
3347
21af9f3d5372 Minor fixes
nick
parents: 3334
diff changeset
734 OUTREG(OV0_KEY_CNTL,GRAPHIC_KEY_FN_EQ|VIDEO_KEY_FN_FALSE|CMP_MIX_OR);
3278
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
735 }
3366
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
736 else
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
737 {
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
738 OUTREG(OV0_GRAPHICS_KEY_MSK, 0ULL);
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
739 OUTREG(OV0_GRAPHICS_KEY_CLR, 0ULL);
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
740 OUTREG(OV0_KEY_CNTL,GRAPHIC_KEY_FN_NE);
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
741 }
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
742
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
743 OUTREG(OV0_H_INC, besr.h_inc);
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
744 OUTREG(OV0_STEP_BY, besr.step_by);
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
745 OUTREG(OV0_Y_X_START, besr.y_x_start);
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
746 OUTREG(OV0_Y_X_END, besr.y_x_end);
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
747 OUTREG(OV0_V_INC, besr.v_inc);
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
748 OUTREG(OV0_P1_BLANK_LINES_AT_TOP, besr.p1_blank_lines_at_top);
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
749 OUTREG(OV0_P23_BLANK_LINES_AT_TOP, besr.p23_blank_lines_at_top);
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
750 OUTREG(OV0_VID_BUF_PITCH0_VALUE, besr.vid_buf_pitch0_value);
2944
ff8389ac4eb7 Scaler - works! But in greenscale mode :(
nick
parents: 2925
diff changeset
751 OUTREG(OV0_VID_BUF_PITCH1_VALUE, besr.vid_buf_pitch1_value);
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
752 OUTREG(OV0_P1_X_START_END, besr.p1_x_start_end);
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
753 OUTREG(OV0_P2_X_START_END, besr.p2_x_start_end);
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
754 OUTREG(OV0_P3_X_START_END, besr.p3_x_start_end);
3487
135926174ee8 Tuned some values:
nick
parents: 3473
diff changeset
755 #ifdef RADEON
3122
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
756 OUTREG(OV0_BASE_ADDR, besr.base_addr);
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
757 #endif
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
758 OUTREG(OV0_VID_BUF0_BASE_ADRS, besr.vid_buf0_base_adrs);
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
759 OUTREG(OV0_VID_BUF1_BASE_ADRS, besr.vid_buf1_base_adrs);
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
760 OUTREG(OV0_VID_BUF2_BASE_ADRS, besr.vid_buf2_base_adrs);
3607
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
761 radeon_fifo_wait(9);
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
762 OUTREG(OV0_VID_BUF3_BASE_ADRS, besr.vid_buf3_base_adrs);
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
763 OUTREG(OV0_VID_BUF4_BASE_ADRS, besr.vid_buf4_base_adrs);
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
764 OUTREG(OV0_VID_BUF5_BASE_ADRS, besr.vid_buf5_base_adrs);
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
765 OUTREG(OV0_P1_V_ACCUM_INIT, besr.p1_v_accum_init);
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
766 OUTREG(OV0_P1_H_ACCUM_INIT, besr.p1_h_accum_init);
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
767 OUTREG(OV0_P23_H_ACCUM_INIT, besr.p23_h_accum_init);
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
768 OUTREG(OV0_P23_V_ACCUM_INIT, besr.p23_v_accum_init);
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
769
6678
c7cfaa38cafb switch off nearest scaling ...
pontscho
parents: 6471
diff changeset
770 #ifdef RADEON
c7cfaa38cafb switch off nearest scaling ...
pontscho
parents: 6471
diff changeset
771 bes_flags = SCALER_ENABLE |
c7cfaa38cafb switch off nearest scaling ...
pontscho
parents: 6471
diff changeset
772 SCALER_SMART_SWITCH;
c7cfaa38cafb switch off nearest scaling ...
pontscho
parents: 6471
diff changeset
773 // SCALER_HORZ_PICK_NEAREST;
c7cfaa38cafb switch off nearest scaling ...
pontscho
parents: 6471
diff changeset
774 #else
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
775 bes_flags = SCALER_ENABLE |
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
776 SCALER_SMART_SWITCH |
3334
f7ba4fb75b69 Rage128 problems. Attempt #3
nick
parents: 3305
diff changeset
777 SCALER_Y2R_TEMP |
f7ba4fb75b69 Rage128 problems. Attempt #3
nick
parents: 3305
diff changeset
778 SCALER_PIX_EXPAND;
f7ba4fb75b69 Rage128 problems. Attempt #3
nick
parents: 3305
diff changeset
779 #endif
3250
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
780 if(besr.double_buff) bes_flags |= SCALER_DOUBLE_BUFFER;
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
781 if(besr.deinterlace_on) bes_flags |= SCALER_ADAPTIVE_DEINT;
3198
5eae81895171 Probably ugly attempt to fix Rage128 problems
nick
parents: 3164
diff changeset
782 #ifdef RAGE128
5eae81895171 Probably ugly attempt to fix Rage128 problems
nick
parents: 3164
diff changeset
783 bes_flags |= SCALER_BURST_PER_PLANE;
5eae81895171 Probably ugly attempt to fix Rage128 problems
nick
parents: 3164
diff changeset
784 #endif
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
785 switch(besr.fourcc)
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
786 {
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
787 case IMGFMT_RGB15:
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
788 case IMGFMT_BGR15: bes_flags |= SCALER_SOURCE_15BPP; break;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
789 case IMGFMT_RGB16:
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
790 case IMGFMT_BGR16: bes_flags |= SCALER_SOURCE_16BPP; break;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
791 case IMGFMT_RGB24:
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
792 case IMGFMT_BGR24: bes_flags |= SCALER_SOURCE_24BPP; break;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
793 case IMGFMT_RGB32:
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
794 case IMGFMT_BGR32: bes_flags |= SCALER_SOURCE_32BPP; break;
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
795 /* 4:1:0*/
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
796 case IMGFMT_IF09:
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
797 case IMGFMT_YVU9: bes_flags |= SCALER_SOURCE_YUV9; break;
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
798 /* 4:2:0 */
3122
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
799 case IMGFMT_IYUV:
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
800 case IMGFMT_I420:
3305
27be0e71c0ee Rage128 problems???
nick
parents: 3278
diff changeset
801 case IMGFMT_YV12: bes_flags |= SCALER_SOURCE_YUV12;
27be0e71c0ee Rage128 problems???
nick
parents: 3278
diff changeset
802 break;
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
803 /* 4:2:2 */
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
804 case IMGFMT_UYVY: bes_flags |= SCALER_SOURCE_YVYU422; break;
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
805 case IMGFMT_YUY2:
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
806 default: bes_flags |= SCALER_SOURCE_VYUY422; break;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
807 }
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
808 OUTREG(OV0_SCALE_CNTL, bes_flags);
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
809 OUTREG(OV0_REG_LOAD_CNTL, 0);
3305
27be0e71c0ee Rage128 problems???
nick
parents: 3278
diff changeset
810 #ifdef DEBUG
27be0e71c0ee Rage128 problems???
nick
parents: 3278
diff changeset
811 radeon_vid_dump_regs();
27be0e71c0ee Rage128 problems???
nick
parents: 3278
diff changeset
812 #endif
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
813 }
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
814
3278
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
815 void radeon_vid_set_color_key(int ckey_on, uint8_t R, uint8_t G, uint8_t B)
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
816 {
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
817 besr.ckey_on = ckey_on;
3347
21af9f3d5372 Minor fixes
nick
parents: 3334
diff changeset
818 besr.graphics_key_msk=(1ULL<<radeon_vid_get_dbpp()) - 1;
3278
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
819 besr.graphics_key_clr=(R<<16)|(G<<8)|(B)|(0x00 << 24);
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
820 }
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
821
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
822
2951
31730e84515d First public release
nick
parents: 2944
diff changeset
823 #define XXX_SRC_X 0
31730e84515d First public release
nick
parents: 2944
diff changeset
824 #define XXX_SRC_Y 0
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
825
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
826 static int radeon_vid_init_video( mga_vid_config_t *config )
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
827 {
3047
ef3b9b104648 Minor speedup of YUY2 decoding. Radeon it's tricked chip
nick
parents: 3020
diff changeset
828 uint32_t tmp,src_w,src_h,pitch,h_inc,step_by,left,leftUV,top;
3019
64ce4a515a78 Bad attempt of YV12 direct support
nick
parents: 2965
diff changeset
829 int is_420;
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
830 RTRACE(RVID_MSG"usr_config: version = %x format=%x card=%x ram=%u src(%ux%u) dest(%u:%ux%u:%u) frame_size=%u num_frames=%u\n"
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
831 ,(uint32_t)config->version
2951
31730e84515d First public release
nick
parents: 2944
diff changeset
832 ,(uint32_t)config->format
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
833 ,(uint32_t)config->card_type
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
834 ,(uint32_t)config->ram_size
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
835 ,(uint32_t)config->src_width
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
836 ,(uint32_t)config->src_height
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
837 ,(uint32_t)config->x_org
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
838 ,(uint32_t)config->y_org
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
839 ,(uint32_t)config->dest_width
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
840 ,(uint32_t)config->dest_height
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
841 ,(uint32_t)config->frame_size
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
842 ,(uint32_t)config->num_frames);
2917
3dd4e8a45d0d double buffering.
nick
parents: 2870
diff changeset
843 radeon_vid_stop_video();
3047
ef3b9b104648 Minor speedup of YUY2 decoding. Radeon it's tricked chip
nick
parents: 3020
diff changeset
844 left = XXX_SRC_X << 16;
ef3b9b104648 Minor speedup of YUY2 decoding. Radeon it's tricked chip
nick
parents: 3020
diff changeset
845 top = XXX_SRC_Y << 16;
ef3b9b104648 Minor speedup of YUY2 decoding. Radeon it's tricked chip
nick
parents: 3020
diff changeset
846 src_h = config->src_height;
ef3b9b104648 Minor speedup of YUY2 decoding. Radeon it's tricked chip
nick
parents: 3020
diff changeset
847 src_w = config->src_width;
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
848 switch(config->format)
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
849 {
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
850 case IMGFMT_RGB15:
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
851 case IMGFMT_BGR15:
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
852 case IMGFMT_RGB16:
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
853 case IMGFMT_BGR16:
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
854 case IMGFMT_RGB24:
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
855 case IMGFMT_BGR24:
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
856 case IMGFMT_RGB32:
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
857 case IMGFMT_BGR32:
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
858 /* 4:1:0 */
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
859 case IMGFMT_IF09:
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
860 case IMGFMT_YVU9:
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
861 /* 4:2:0 */
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
862 case IMGFMT_IYUV:
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
863 case IMGFMT_YV12:
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
864 case IMGFMT_I420:
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
865 /* 4:2:2 */
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
866 case IMGFMT_UYVY:
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
867 case IMGFMT_YUY2:
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
868 break;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
869 default:
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
870 printk(RVID_MSG"Unsupported pixel format: 0x%X\n",config->format);
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
871 return -1;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
872 }
3019
64ce4a515a78 Bad attempt of YV12 direct support
nick
parents: 2965
diff changeset
873 is_420 = 0;
3122
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
874 if(config->format == IMGFMT_YV12 ||
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
875 config->format == IMGFMT_I420 ||
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
876 config->format == IMGFMT_IYUV) is_420 = 1;
2951
31730e84515d First public release
nick
parents: 2944
diff changeset
877 switch(config->format)
31730e84515d First public release
nick
parents: 2944
diff changeset
878 {
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
879 /* 4:1:0 */
2951
31730e84515d First public release
nick
parents: 2944
diff changeset
880 case IMGFMT_YVU9:
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
881 case IMGFMT_IF09:
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
882 /* 4:2:0 */
2951
31730e84515d First public release
nick
parents: 2944
diff changeset
883 case IMGFMT_IYUV:
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
884 case IMGFMT_YV12:
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
885 case IMGFMT_I420: pitch = (src_w + 31) & ~31; break;
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
886 /* 4:2:2 */
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
887 default:
2951
31730e84515d First public release
nick
parents: 2944
diff changeset
888 case IMGFMT_UYVY:
31730e84515d First public release
nick
parents: 2944
diff changeset
889 case IMGFMT_YUY2:
31730e84515d First public release
nick
parents: 2944
diff changeset
890 case IMGFMT_RGB15:
31730e84515d First public release
nick
parents: 2944
diff changeset
891 case IMGFMT_BGR15:
31730e84515d First public release
nick
parents: 2944
diff changeset
892 case IMGFMT_RGB16:
3047
ef3b9b104648 Minor speedup of YUY2 decoding. Radeon it's tricked chip
nick
parents: 3020
diff changeset
893 case IMGFMT_BGR16: pitch = ((src_w*2) + 15) & ~15; break;
2951
31730e84515d First public release
nick
parents: 2944
diff changeset
894 case IMGFMT_RGB24:
3047
ef3b9b104648 Minor speedup of YUY2 decoding. Radeon it's tricked chip
nick
parents: 3020
diff changeset
895 case IMGFMT_BGR24: pitch = ((src_w*3) + 15) & ~15; break;
2951
31730e84515d First public release
nick
parents: 2944
diff changeset
896 case IMGFMT_RGB32:
3047
ef3b9b104648 Minor speedup of YUY2 decoding. Radeon it's tricked chip
nick
parents: 3020
diff changeset
897 case IMGFMT_BGR32: pitch = ((src_w*4) + 15) & ~15; break;
2951
31730e84515d First public release
nick
parents: 2944
diff changeset
898 }
3380
ae092b46d3c8 Fixed scaling in doublescan & interlaced modes
nick
parents: 3369
diff changeset
899 if(radeon_is_dbl_scan()) config->dest_height *= 2;
ae092b46d3c8 Fixed scaling in doublescan & interlaced modes
nick
parents: 3369
diff changeset
900 else
ae092b46d3c8 Fixed scaling in doublescan & interlaced modes
nick
parents: 3369
diff changeset
901 if(radeon_is_interlace()) config->dest_height /= 2;
3278
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
902 besr.dest_bpp = radeon_vid_get_dbpp();
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
903 besr.fourcc = config->format;
3369
13c202356a41 Fixed scaling in doublescan modes
nick
parents: 3368
diff changeset
904 besr.v_inc = (src_h << 20) / config->dest_height;
13c202356a41 Fixed scaling in doublescan modes
nick
parents: 3368
diff changeset
905 h_inc = (src_w << 12) / config->dest_width;
2944
ff8389ac4eb7 Scaler - works! But in greenscale mode :(
nick
parents: 2925
diff changeset
906 step_by = 1;
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
907
2944
ff8389ac4eb7 Scaler - works! But in greenscale mode :(
nick
parents: 2925
diff changeset
908 while(h_inc >= (2 << 12)) {
ff8389ac4eb7 Scaler - works! But in greenscale mode :(
nick
parents: 2925
diff changeset
909 step_by++;
ff8389ac4eb7 Scaler - works! But in greenscale mode :(
nick
parents: 2925
diff changeset
910 h_inc >>= 1;
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
911 }
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
912
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
913 /* keep everything in 16.16 */
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
914 besr.base_addr = radeon_mem_base;
3019
64ce4a515a78 Bad attempt of YV12 direct support
nick
parents: 2965
diff changeset
915 if(is_420)
64ce4a515a78 Bad attempt of YV12 direct support
nick
parents: 2965
diff changeset
916 {
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
917 uint32_t d1line,d2line,d3line;
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
918 d1line = top*pitch;
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
919 d2line = src_h*pitch+(d1line>>1);
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
920 d3line = d2line+((src_h*pitch)>>2);
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
921 d1line += (left >> 16) & ~15;
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
922 d2line += (left >> 17) & ~15;
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
923 d3line += (left >> 17) & ~15;
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
924 besr.vid_buf0_base_adrs=((radeon_overlay_off+d1line)&VIF_BUF0_BASE_ADRS_MASK);
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
925 besr.vid_buf1_base_adrs=((radeon_overlay_off+d2line)&VIF_BUF1_BASE_ADRS_MASK)|VIF_BUF1_PITCH_SEL;
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
926 besr.vid_buf2_base_adrs=((radeon_overlay_off+d3line)&VIF_BUF2_BASE_ADRS_MASK)|VIF_BUF2_PITCH_SEL;
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
927 if(besr.fourcc == IMGFMT_I420 || besr.fourcc == IMGFMT_IYUV)
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
928 {
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
929 uint32_t tmp;
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
930 tmp = besr.vid_buf1_base_adrs;
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
931 besr.vid_buf1_base_adrs = besr.vid_buf2_base_adrs;
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
932 besr.vid_buf2_base_adrs = tmp;
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
933 }
3019
64ce4a515a78 Bad attempt of YV12 direct support
nick
parents: 2965
diff changeset
934 }
64ce4a515a78 Bad attempt of YV12 direct support
nick
parents: 2965
diff changeset
935 else
64ce4a515a78 Bad attempt of YV12 direct support
nick
parents: 2965
diff changeset
936 {
64ce4a515a78 Bad attempt of YV12 direct support
nick
parents: 2965
diff changeset
937 besr.vid_buf0_base_adrs = radeon_overlay_off;
3198
5eae81895171 Probably ugly attempt to fix Rage128 problems
nick
parents: 3164
diff changeset
938 besr.vid_buf0_base_adrs += ((left & ~7) << 1)&VIF_BUF0_BASE_ADRS_MASK;
3047
ef3b9b104648 Minor speedup of YUY2 decoding. Radeon it's tricked chip
nick
parents: 3020
diff changeset
939 besr.vid_buf1_base_adrs = besr.vid_buf0_base_adrs;
3019
64ce4a515a78 Bad attempt of YV12 direct support
nick
parents: 2965
diff changeset
940 besr.vid_buf2_base_adrs = besr.vid_buf0_base_adrs;
64ce4a515a78 Bad attempt of YV12 direct support
nick
parents: 2965
diff changeset
941 }
3047
ef3b9b104648 Minor speedup of YUY2 decoding. Radeon it's tricked chip
nick
parents: 3020
diff changeset
942 besr.vid_buf3_base_adrs = besr.vid_buf0_base_adrs+config->frame_size;
ef3b9b104648 Minor speedup of YUY2 decoding. Radeon it's tricked chip
nick
parents: 3020
diff changeset
943 besr.vid_buf4_base_adrs = besr.vid_buf1_base_adrs+config->frame_size;
ef3b9b104648 Minor speedup of YUY2 decoding. Radeon it's tricked chip
nick
parents: 3020
diff changeset
944 besr.vid_buf5_base_adrs = besr.vid_buf2_base_adrs+config->frame_size;
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
945
2951
31730e84515d First public release
nick
parents: 2944
diff changeset
946 tmp = (left & 0x0003ffff) + 0x00028000 + (h_inc << 3);
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
947 besr.p1_h_accum_init = ((tmp << 4) & 0x000f8000) |
2951
31730e84515d First public release
nick
parents: 2944
diff changeset
948 ((tmp << 12) & 0xf0000000);
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
949
2951
31730e84515d First public release
nick
parents: 2944
diff changeset
950 tmp = ((left >> 1) & 0x0001ffff) + 0x00028000 + (h_inc << 2);
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
951 besr.p23_h_accum_init = ((tmp << 4) & 0x000f8000) |
2951
31730e84515d First public release
nick
parents: 2944
diff changeset
952 ((tmp << 12) & 0x70000000);
31730e84515d First public release
nick
parents: 2944
diff changeset
953 tmp = (top & 0x0000ffff) + 0x00018000;
3122
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
954 besr.p1_v_accum_init = ((tmp << 4) & OV0_P1_V_ACCUM_INIT_MASK)
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
955 |(OV0_P1_MAX_LN_IN_PER_LN_OUT & 1);
3019
64ce4a515a78 Bad attempt of YV12 direct support
nick
parents: 2965
diff changeset
956
64ce4a515a78 Bad attempt of YV12 direct support
nick
parents: 2965
diff changeset
957 tmp = ((top >> 1) & 0x0000ffff) + 0x00018000;
3122
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
958 besr.p23_v_accum_init = is_420 ? ((tmp << 4) & OV0_P23_V_ACCUM_INIT_MASK)
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
959 |(OV0_P23_MAX_LN_IN_PER_LN_OUT & 1) : 0;
3019
64ce4a515a78 Bad attempt of YV12 direct support
nick
parents: 2965
diff changeset
960
3047
ef3b9b104648 Minor speedup of YUY2 decoding. Radeon it's tricked chip
nick
parents: 3020
diff changeset
961 leftUV = (left >> 17) & 15;
ef3b9b104648 Minor speedup of YUY2 decoding. Radeon it's tricked chip
nick
parents: 3020
diff changeset
962 left = (left >> 16) & 15;
2944
ff8389ac4eb7 Scaler - works! But in greenscale mode :(
nick
parents: 2925
diff changeset
963 besr.h_inc = h_inc | ((h_inc >> 1) << 16);
ff8389ac4eb7 Scaler - works! But in greenscale mode :(
nick
parents: 2925
diff changeset
964 besr.step_by = step_by | (step_by << 8);
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
965 besr.y_x_start = (config->x_org+X_ADJUST) | (config->y_org << 16);
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
966 besr.y_x_end = (config->x_org + config->dest_width+X_ADJUST) | ((config->y_org + config->dest_height) << 16);
3047
ef3b9b104648 Minor speedup of YUY2 decoding. Radeon it's tricked chip
nick
parents: 3020
diff changeset
967 besr.p1_blank_lines_at_top = P1_BLNK_LN_AT_TOP_M1_MASK|((src_h-1)<<16);
3122
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
968 if(is_420)
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
969 {
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
970 src_h = (src_h + 1) >> 1;
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
971 besr.p23_blank_lines_at_top = P23_BLNK_LN_AT_TOP_M1_MASK|((src_h-1)<<16);
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
972 }
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
973 else besr.p23_blank_lines_at_top = 0;
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
974 besr.vid_buf_pitch0_value = pitch;
3047
ef3b9b104648 Minor speedup of YUY2 decoding. Radeon it's tricked chip
nick
parents: 3020
diff changeset
975 besr.vid_buf_pitch1_value = is_420 ? pitch>>1 : pitch;
ef3b9b104648 Minor speedup of YUY2 decoding. Radeon it's tricked chip
nick
parents: 3020
diff changeset
976 besr.p1_x_start_end = (src_w+left-1)|(left<<16);
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
977 src_w>>=1;
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
978 besr.p2_x_start_end = (src_w+left-1)|(leftUV<<16);
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
979 besr.p3_x_start_end = besr.p2_x_start_end;
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
980 return 0;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
981 }
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
982
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
983 static void radeon_vid_frame_sel(int frame)
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
984 {
3066
7eba9b3ac5a7 Minor fixes
nick
parents: 3049
diff changeset
985 uint32_t off0,off1,off2;
3250
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
986 if(!besr.double_buff) return;
3066
7eba9b3ac5a7 Minor fixes
nick
parents: 3049
diff changeset
987 if(frame%2)
7eba9b3ac5a7 Minor fixes
nick
parents: 3049
diff changeset
988 {
7eba9b3ac5a7 Minor fixes
nick
parents: 3049
diff changeset
989 off0 = besr.vid_buf3_base_adrs;
7eba9b3ac5a7 Minor fixes
nick
parents: 3049
diff changeset
990 off1 = besr.vid_buf4_base_adrs;
7eba9b3ac5a7 Minor fixes
nick
parents: 3049
diff changeset
991 off2 = besr.vid_buf5_base_adrs;
7eba9b3ac5a7 Minor fixes
nick
parents: 3049
diff changeset
992 }
7eba9b3ac5a7 Minor fixes
nick
parents: 3049
diff changeset
993 else
7eba9b3ac5a7 Minor fixes
nick
parents: 3049
diff changeset
994 {
7eba9b3ac5a7 Minor fixes
nick
parents: 3049
diff changeset
995 off0 = besr.vid_buf0_base_adrs;
7eba9b3ac5a7 Minor fixes
nick
parents: 3049
diff changeset
996 off1 = besr.vid_buf1_base_adrs;
7eba9b3ac5a7 Minor fixes
nick
parents: 3049
diff changeset
997 off2 = besr.vid_buf2_base_adrs;
7eba9b3ac5a7 Minor fixes
nick
parents: 3049
diff changeset
998 }
2917
3dd4e8a45d0d double buffering.
nick
parents: 2870
diff changeset
999 OUTREG(OV0_REG_LOAD_CNTL, REG_LD_CTL_LOCK);
3dd4e8a45d0d double buffering.
nick
parents: 2870
diff changeset
1000 while(!(INREG(OV0_REG_LOAD_CNTL)&REG_LD_CTL_LOCK_READBACK));
3066
7eba9b3ac5a7 Minor fixes
nick
parents: 3049
diff changeset
1001 OUTREG(OV0_VID_BUF0_BASE_ADRS, off0);
7eba9b3ac5a7 Minor fixes
nick
parents: 3049
diff changeset
1002 OUTREG(OV0_VID_BUF1_BASE_ADRS, off1);
7eba9b3ac5a7 Minor fixes
nick
parents: 3049
diff changeset
1003 OUTREG(OV0_VID_BUF2_BASE_ADRS, off2);
2917
3dd4e8a45d0d double buffering.
nick
parents: 2870
diff changeset
1004 OUTREG(OV0_REG_LOAD_CNTL, 0);
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1005 }
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1006
3250
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1007 static void radeon_vid_make_default(void)
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1008 {
3470
1a1669d42306 Tuned some registers
nick
parents: 3380
diff changeset
1009 #ifdef RAGE128
3366
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
1010 OUTREG(OV0_COLOUR_CNTL,0x00101000UL); /* Default brihgtness and saturation for Rage128 */
3900
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
1011 #else
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
1012 make_default_gamma_correction();
3470
1a1669d42306 Tuned some registers
nick
parents: 3380
diff changeset
1013 #endif
3250
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1014 besr.deinterlace_pattern = 0x900AAAAA;
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1015 OUTREG(OV0_DEINTERLACE_PATTERN,besr.deinterlace_pattern);
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1016 besr.deinterlace_on=1;
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1017 besr.double_buff=1;
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1018 }
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1019
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1020
3247
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1021 static void radeon_vid_preset(void)
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1022 {
3470
1a1669d42306 Tuned some registers
nick
parents: 3380
diff changeset
1023 #ifdef RAGE128
3247
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1024 unsigned tmp;
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1025 tmp = INREG(OV0_COLOUR_CNTL);
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1026 besr.saturation = (tmp>>8)&0x1f;
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1027 besr.brightness = tmp & 0x7f;
3470
1a1669d42306 Tuned some registers
nick
parents: 3380
diff changeset
1028 #endif
3250
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1029 besr.graphics_key_clr = INREG(OV0_GRAPHICS_KEY_CLR);
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1030 besr.deinterlace_pattern = INREG(OV0_DEINTERLACE_PATTERN);
3247
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1031 }
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1032
2951
31730e84515d First public release
nick
parents: 2944
diff changeset
1033 static int video_on = 0;
31730e84515d First public release
nick
parents: 2944
diff changeset
1034
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1035 static int radeon_vid_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1036 {
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1037 int frame;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1038
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1039 switch(cmd)
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1040 {
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1041 case MGA_VID_CONFIG:
3305
27be0e71c0ee Rage128 problems???
nick
parents: 3278
diff changeset
1042 RTRACE(RVID_MSG"radeon_mmio_base = %p\n",radeon_mmio_base);
27be0e71c0ee Rage128 problems???
nick
parents: 3278
diff changeset
1043 RTRACE(RVID_MSG"radeon_mem_base = %08x\n",radeon_mem_base);
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1044 RTRACE(RVID_MSG"Received configuration\n");
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1045
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1046 if(copy_from_user(&radeon_config,(mga_vid_config_t*) arg,sizeof(mga_vid_config_t)))
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1047 {
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1048 printk(RVID_MSG"failed copy from userspace\n");
3019
64ce4a515a78 Bad attempt of YV12 direct support
nick
parents: 2965
diff changeset
1049 return -EFAULT;
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1050 }
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1051 if(radeon_config.version != MGA_VID_VERSION){
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1052 printk(RVID_MSG"incompatible version! driver: %X requested: %X\n",MGA_VID_VERSION,radeon_config.version);
3019
64ce4a515a78 Bad attempt of YV12 direct support
nick
parents: 2965
diff changeset
1053 return -EFAULT;
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1054 }
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1055
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1056 if(radeon_config.frame_size==0 || radeon_config.frame_size>1024*768*2){
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1057 printk(RVID_MSG"illegal frame_size: %d\n",radeon_config.frame_size);
3019
64ce4a515a78 Bad attempt of YV12 direct support
nick
parents: 2965
diff changeset
1058 return -EFAULT;
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1059 }
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1060
3266
ff90589b635f Fixed single buffering problems and -vo mga compatibility by number of buffers
nick
parents: 3265
diff changeset
1061 if(radeon_config.num_frames<1){
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1062 printk(RVID_MSG"illegal num_frames: %d\n",radeon_config.num_frames);
3019
64ce4a515a78 Bad attempt of YV12 direct support
nick
parents: 2965
diff changeset
1063 return -EFAULT;
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1064 }
3266
ff90589b635f Fixed single buffering problems and -vo mga compatibility by number of buffers
nick
parents: 3265
diff changeset
1065 if(radeon_config.num_frames==1) besr.double_buff=0;
ff90589b635f Fixed single buffering problems and -vo mga compatibility by number of buffers
nick
parents: 3265
diff changeset
1066 if(!besr.double_buff) radeon_config.num_frames=1;
ff90589b635f Fixed single buffering problems and -vo mga compatibility by number of buffers
nick
parents: 3265
diff changeset
1067 else radeon_config.num_frames=2;
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1068 radeon_config.card_type = 0;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1069 radeon_config.ram_size = radeon_ram_size;
3019
64ce4a515a78 Bad attempt of YV12 direct support
nick
parents: 2965
diff changeset
1070 radeon_overlay_off = radeon_ram_size*0x100000 - radeon_config.frame_size*radeon_config.num_frames;
64ce4a515a78 Bad attempt of YV12 direct support
nick
parents: 2965
diff changeset
1071 radeon_overlay_off &= 0xffff0000;
64ce4a515a78 Bad attempt of YV12 direct support
nick
parents: 2965
diff changeset
1072 if(radeon_overlay_off < 0){
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1073 printk(RVID_MSG"not enough video memory. Need: %u has: %u\n",radeon_config.frame_size*radeon_config.num_frames,radeon_ram_size*0x100000);
3019
64ce4a515a78 Bad attempt of YV12 direct support
nick
parents: 2965
diff changeset
1074 return -EFAULT;
64ce4a515a78 Bad attempt of YV12 direct support
nick
parents: 2965
diff changeset
1075 }
3305
27be0e71c0ee Rage128 problems???
nick
parents: 3278
diff changeset
1076 RTRACE(RVID_MSG"using video overlay at offset %08X\n",radeon_overlay_off);
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1077 if (copy_to_user((mga_vid_config_t *) arg, &radeon_config, sizeof(mga_vid_config_t)))
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1078 {
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1079 printk(RVID_MSG"failed copy to userspace\n");
3019
64ce4a515a78 Bad attempt of YV12 direct support
nick
parents: 2965
diff changeset
1080 return -EFAULT;
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1081 }
3278
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
1082 radeon_vid_set_color_key(radeon_config.colkey_on,
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
1083 radeon_config.colkey_red,
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
1084 radeon_config.colkey_green,
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
1085 radeon_config.colkey_blue);
3265
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
1086 if(swap_fourcc) radeon_config.format = swab32(radeon_config.format);
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1087 printk(RVID_MSG"configuring for '%s' fourcc\n",fourcc_format_name(radeon_config.format));
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1088 return radeon_vid_init_video(&radeon_config);
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1089 break;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1090
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1091 case MGA_VID_ON:
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1092 RTRACE(RVID_MSG"Video ON (ioctl)\n");
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1093 radeon_vid_display_video();
2951
31730e84515d First public release
nick
parents: 2944
diff changeset
1094 video_on = 1;
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1095 break;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1096
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1097 case MGA_VID_OFF:
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1098 RTRACE(RVID_MSG"Video OFF (ioctl)\n");
2951
31730e84515d First public release
nick
parents: 2944
diff changeset
1099 if(video_on) radeon_vid_stop_video();
31730e84515d First public release
nick
parents: 2944
diff changeset
1100 video_on = 0;
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1101 break;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1102
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1103 case MGA_VID_FSEL:
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1104 if(copy_from_user(&frame,(int *) arg,sizeof(int)))
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1105 {
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1106 printk(RVID_MSG"FSEL failed copy from userspace\n");
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1107 return(-EFAULT);
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1108 }
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1109 radeon_vid_frame_sel(frame);
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1110 break;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1111
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1112 default:
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1113 printk(RVID_MSG"Invalid ioctl\n");
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1114 return (-EINVAL);
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1115 }
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1116
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1117 return 0;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1118 }
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1119
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1120 struct ati_card_id_s
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1121 {
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1122 const int id;
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1123 const char name[17];
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1124 };
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1125
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1126 const struct ati_card_id_s ati_card_ids[]=
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1127 {
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1128 #ifdef RAGE128
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1129 /*
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1130 This driver should be compatible with Rage128 (pro) chips.
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1131 (include adaptive deinterlacing!!!).
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1132 Moreover: the same logic can be used with Mach64 chips.
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1133 (I mean: mach64xx, 3d rage, 3d rage IIc, 3D rage pro, 3d rage mobility).
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1134 but they are incompatible by i/o ports. So if enthusiasts will want
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1135 then they can redefine OUTREG and INREG macros and redefine OV0_*
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1136 constants. Also it seems that mach64 chips supports only: YUY2, YV12, UYVY
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1137 fourccs (422 and 420 formats only).
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1138 */
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1139 /* Rage128 Pro GL */
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1140 { PCI_DEVICE_ID_ATI_Rage128_PA, "R128Pro PA" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1141 { PCI_DEVICE_ID_ATI_Rage128_PB, "R128Pro PB" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1142 { PCI_DEVICE_ID_ATI_Rage128_PC, "R128Pro PC" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1143 { PCI_DEVICE_ID_ATI_Rage128_PD, "R128Pro PD" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1144 { PCI_DEVICE_ID_ATI_Rage128_PE, "R128Pro PE" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1145 { PCI_DEVICE_ID_ATI_RAGE128_PF, "R128Pro PF" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1146 /* Rage128 Pro VR */
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1147 { PCI_DEVICE_ID_ATI_RAGE128_PG, "R128Pro PG" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1148 { PCI_DEVICE_ID_ATI_RAGE128_PH, "R128Pro PH" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1149 { PCI_DEVICE_ID_ATI_RAGE128_PI, "R128Pro PI" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1150 { PCI_DEVICE_ID_ATI_RAGE128_PJ, "R128Pro PJ" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1151 { PCI_DEVICE_ID_ATI_RAGE128_PK, "R128Pro PK" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1152 { PCI_DEVICE_ID_ATI_RAGE128_PL, "R128Pro PL" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1153 { PCI_DEVICE_ID_ATI_RAGE128_PM, "R128Pro PM" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1154 { PCI_DEVICE_ID_ATI_RAGE128_PN, "R128Pro PN" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1155 { PCI_DEVICE_ID_ATI_RAGE128_PO, "R128Pro PO" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1156 { PCI_DEVICE_ID_ATI_RAGE128_PP, "R128Pro PP" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1157 { PCI_DEVICE_ID_ATI_RAGE128_PQ, "R128Pro PQ" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1158 { PCI_DEVICE_ID_ATI_RAGE128_PR, "R128Pro PR" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1159 { PCI_DEVICE_ID_ATI_RAGE128_TR, "R128Pro TR" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1160 { PCI_DEVICE_ID_ATI_RAGE128_PS, "R128Pro PS" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1161 { PCI_DEVICE_ID_ATI_RAGE128_PT, "R128Pro PT" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1162 { PCI_DEVICE_ID_ATI_RAGE128_PU, "R128Pro PU" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1163 { PCI_DEVICE_ID_ATI_RAGE128_PV, "R128Pro PV" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1164 { PCI_DEVICE_ID_ATI_RAGE128_PW, "R128Pro PW" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1165 { PCI_DEVICE_ID_ATI_RAGE128_PX, "R128Pro PX" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1166 /* Rage128 GL */
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1167 { PCI_DEVICE_ID_ATI_RAGE128_RE, "R128 RE" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1168 { PCI_DEVICE_ID_ATI_RAGE128_RF, "R128 RF" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1169 { PCI_DEVICE_ID_ATI_RAGE128_RG, "R128 RG" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1170 { PCI_DEVICE_ID_ATI_RAGE128_RH, "R128 RH" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1171 { PCI_DEVICE_ID_ATI_RAGE128_RI, "R128 RI" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1172 /* Rage128 VR */
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1173 { PCI_DEVICE_ID_ATI_RAGE128_RK, "R128 RK" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1174 { PCI_DEVICE_ID_ATI_RAGE128_RL, "R128 RL" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1175 { PCI_DEVICE_ID_ATI_RAGE128_RM, "R128 RM" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1176 { PCI_DEVICE_ID_ATI_RAGE128_RN, "R128 RN" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1177 { PCI_DEVICE_ID_ATI_RAGE128_RO, "R128 RO" },
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1178 /* Rage128 M3 */
3198
5eae81895171 Probably ugly attempt to fix Rage128 problems
nick
parents: 3164
diff changeset
1179 { PCI_DEVICE_ID_ATI_RAGE128_LE, "R128 M3 LE" },
5eae81895171 Probably ugly attempt to fix Rage128 problems
nick
parents: 3164
diff changeset
1180 { PCI_DEVICE_ID_ATI_RAGE128_LF, "R128 M3 LF" },
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1181 /* Rage128 Pro Ultra */
3198
5eae81895171 Probably ugly attempt to fix Rage128 problems
nick
parents: 3164
diff changeset
1182 { PCI_DEVICE_ID_ATI_RAGE128_U1, "R128Pro U1" },
5eae81895171 Probably ugly attempt to fix Rage128 problems
nick
parents: 3164
diff changeset
1183 { PCI_DEVICE_ID_ATI_RAGE128_U2, "R128Pro U2" },
5eae81895171 Probably ugly attempt to fix Rage128 problems
nick
parents: 3164
diff changeset
1184 { PCI_DEVICE_ID_ATI_RAGE128_U3, "R128Pro U3" }
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1185 #else
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1186 /* Radeons (indeed: Rage 256 Pro ;) */
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1187 { PCI_DEVICE_ID_RADEON_QD, "Radeon QD " },
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1188 { PCI_DEVICE_ID_RADEON_QE, "Radeon QE " },
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1189 { PCI_DEVICE_ID_RADEON_QF, "Radeon QF " },
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1190 { PCI_DEVICE_ID_RADEON_QG, "Radeon QG " },
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1191 { PCI_DEVICE_ID_RADEON_QY, "Radeon VE QY " },
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1192 { PCI_DEVICE_ID_RADEON_QZ, "Radeon VE QZ " },
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1193 { PCI_DEVICE_ID_RADEON_LY, "Radeon M6 LY " },
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1194 { PCI_DEVICE_ID_RADEON_LZ, "Radeon M6 LZ " },
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1195 { PCI_DEVICE_ID_RADEON_LW, "Radeon M7 LW " },
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1196 { PCI_DEVICE_ID_R200_QL, "Radeon2 8500 QL " },
3940
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
1197 { PCI_DEVICE_ID_R200_BB, "Radeon2 8500 AIW" },
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1198 { PCI_DEVICE_ID_RV200_QW, "Radeon2 7500 QW " }
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1199 #endif
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1200 };
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1201
3247
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1202 static int detected_chip;
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1203
3265
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
1204 static int __init radeon_vid_config_card(void)
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1205 {
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1206 struct pci_dev *dev = NULL;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1207 size_t i;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1208
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1209 for(i=0;i<sizeof(ati_card_ids)/sizeof(struct ati_card_id_s);i++)
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1210 if((dev=pci_find_device(PCI_VENDOR_ID_ATI, ati_card_ids[i].id, NULL)))
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1211 break;
3122
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
1212 if(!dev)
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1213 {
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1214 printk(RVID_MSG"No supported cards found\n");
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1215 return FALSE;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1216 }
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1217
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1218 radeon_mmio_base = ioremap_nocache(pci_resource_start (dev, 2),RADEON_REGSIZE);
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1219 radeon_mem_base = dev->resource[0].start;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1220
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1221 RTRACE(RVID_MSG"MMIO at 0x%p\n", radeon_mmio_base);
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1222 RTRACE(RVID_MSG"Frame Buffer at 0x%08x\n", radeon_mem_base);
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1223
3122
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
1224 /* video memory size */
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
1225 radeon_ram_size = INREG(CONFIG_MEMSIZE);
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
1226
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1227 /* mem size is bits [28:0], mask off the rest. Range: from 1Mb up to 512 Mb */
3122
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
1228 radeon_ram_size &= CONFIG_MEMSIZE_MASK;
60c2510ab0ae Fixed bug of ram_size detection
nick
parents: 3066
diff changeset
1229 radeon_ram_size /= 0x100000;
3247
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1230 detected_chip = i;
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1231 printk(RVID_MSG"Found %s (%uMb memory)\n",ati_card_ids[i].name,radeon_ram_size);
3900
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
1232 #ifndef RAGE128
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
1233 if(ati_card_ids[i].id == PCI_DEVICE_ID_R200_QL ||
3940
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
1234 ati_card_ids[i].id == PCI_DEVICE_ID_R200_BB ||
3900
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
1235 ati_card_ids[i].id == PCI_DEVICE_ID_RV200_QW) IsR200 = 1;
80d0864322b9 Radeon specific gamma correction initialization. (from gatos.sf.net)
nick
parents: 3607
diff changeset
1236 #endif
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1237 return TRUE;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1238 }
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1239
3247
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1240 #define PARAM_BRIGHTNESS "brightness="
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1241 #define PARAM_SATURATION "saturation="
3921
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1242 #define PARAM_CONTRAST "contrast="
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1243 #define PARAM_HUE "hue="
3247
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1244 #define PARAM_DOUBLE_BUFF "double_buff="
3250
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1245 #define PARAM_DEINTERLACE "deinterlace="
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1246 #define PARAM_DEINTERLACE_PATTERN "deinterlace_pattern="
3921
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1247 #ifdef RADEON_FPU
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1248 static int ovBrightness=0, ovSaturation=0, ovContrast=0, ovHue=0, ov_trans_idx=0;
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1249 #endif
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1250
3263
4ee5fc519e08 Fixed 'cat' problems
nick
parents: 3253
diff changeset
1251 static void radeon_param_buff_fill( void )
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1252 {
3247
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1253 unsigned len,saturation;
3366
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
1254 int8_t brightness;
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
1255 brightness = besr.brightness & 0x7f;
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
1256 /* FIXME: It's probably x86 specific convertion. But it doesn't matter
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
1257 for general logic - only for printing value */
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
1258 if(brightness > 63) brightness = (((~besr.brightness) & 0x3f)+1) * (-1);
3247
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1259 saturation = besr.saturation;
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1260 len = 0;
3263
4ee5fc519e08 Fixed 'cat' problems
nick
parents: 3253
diff changeset
1261 len += sprintf(&radeon_param_buff[len],"Interface version: %04X\nDriver version: %s\n",MGA_VID_VERSION,RADEON_VID_VERSION);
4ee5fc519e08 Fixed 'cat' problems
nick
parents: 3253
diff changeset
1262 len += sprintf(&radeon_param_buff[len],"Chip: %s\n",ati_card_ids[detected_chip].name);
3334
f7ba4fb75b69 Rage128 problems. Attempt #3
nick
parents: 3305
diff changeset
1263 len += sprintf(&radeon_param_buff[len],"Memory: %x:%x\n",radeon_mem_base,radeon_ram_size*0x100000);
3263
4ee5fc519e08 Fixed 'cat' problems
nick
parents: 3253
diff changeset
1264 len += sprintf(&radeon_param_buff[len],"MMIO: %p\n",radeon_mmio_base);
3334
f7ba4fb75b69 Rage128 problems. Attempt #3
nick
parents: 3305
diff changeset
1265 len += sprintf(&radeon_param_buff[len],"Overlay offset: %x\n",radeon_overlay_off);
3269
a4437ac3f034 Fixed compilation on non i686 archs
nick
parents: 3266
diff changeset
1266 #ifdef CONFIG_MTRR
3265
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
1267 len += sprintf(&radeon_param_buff[len],"Tune MTRR: %s\n",mtrr?"on":"off");
3269
a4437ac3f034 Fixed compilation on non i686 archs
nick
parents: 3266
diff changeset
1268 #endif
3278
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
1269 if(besr.ckey_on) len += sprintf(&radeon_param_buff[len],"Last used color_key=%X (mask=%X)\n",besr.graphics_key_clr,besr.graphics_key_msk);
3265
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
1270 len += sprintf(&radeon_param_buff[len],"Swapped fourcc: %s\n",swap_fourcc?"on":"off");
3278
404cfc1a0942 Color key still causes some troubles
nick
parents: 3269
diff changeset
1271 len += sprintf(&radeon_param_buff[len],"Last BPP: %u\n",besr.dest_bpp);
3263
4ee5fc519e08 Fixed 'cat' problems
nick
parents: 3253
diff changeset
1272 len += sprintf(&radeon_param_buff[len],"Last fourcc: %s\n\n",fourcc_format_name(besr.fourcc));
4ee5fc519e08 Fixed 'cat' problems
nick
parents: 3253
diff changeset
1273 len += sprintf(&radeon_param_buff[len],"Configurable stuff:\n");
4ee5fc519e08 Fixed 'cat' problems
nick
parents: 3253
diff changeset
1274 len += sprintf(&radeon_param_buff[len],"~~~~~~~~~~~~~~~~~~~\n");
4ee5fc519e08 Fixed 'cat' problems
nick
parents: 3253
diff changeset
1275 len += sprintf(&radeon_param_buff[len],PARAM_DOUBLE_BUFF"%s\n",besr.double_buff?"on":"off");
3470
1a1669d42306 Tuned some registers
nick
parents: 3380
diff changeset
1276 #ifdef RAGE128
3366
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
1277 len += sprintf(&radeon_param_buff[len],PARAM_BRIGHTNESS"%i\n",(int)brightness);
3263
4ee5fc519e08 Fixed 'cat' problems
nick
parents: 3253
diff changeset
1278 len += sprintf(&radeon_param_buff[len],PARAM_SATURATION"%u\n",saturation);
3921
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1279 #else
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1280 #ifdef RADEON_FPU
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1281 len += sprintf(&radeon_param_buff[len],PARAM_BRIGHTNESS"%i\n",ovBrightness);
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1282 len += sprintf(&radeon_param_buff[len],PARAM_SATURATION"%i\n",ovSaturation);
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1283 len += sprintf(&radeon_param_buff[len],PARAM_CONTRAST"%i\n",ovContrast);
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1284 len += sprintf(&radeon_param_buff[len],PARAM_HUE"%i\n",ovHue);
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1285 #endif
3470
1a1669d42306 Tuned some registers
nick
parents: 3380
diff changeset
1286 #endif
3263
4ee5fc519e08 Fixed 'cat' problems
nick
parents: 3253
diff changeset
1287 len += sprintf(&radeon_param_buff[len],PARAM_DEINTERLACE"%s\n",besr.deinterlace_on?"on":"off");
4ee5fc519e08 Fixed 'cat' problems
nick
parents: 3253
diff changeset
1288 len += sprintf(&radeon_param_buff[len],PARAM_DEINTERLACE_PATTERN"%X\n",besr.deinterlace_pattern);
4ee5fc519e08 Fixed 'cat' problems
nick
parents: 3253
diff changeset
1289 radeon_param_buff_len = len;
4ee5fc519e08 Fixed 'cat' problems
nick
parents: 3253
diff changeset
1290 }
4ee5fc519e08 Fixed 'cat' problems
nick
parents: 3253
diff changeset
1291
4ee5fc519e08 Fixed 'cat' problems
nick
parents: 3253
diff changeset
1292 static ssize_t radeon_vid_read(struct file *file, char *buf, size_t count, loff_t *ppos)
4ee5fc519e08 Fixed 'cat' problems
nick
parents: 3253
diff changeset
1293 {
4ee5fc519e08 Fixed 'cat' problems
nick
parents: 3253
diff changeset
1294 uint32_t size;
4ee5fc519e08 Fixed 'cat' problems
nick
parents: 3253
diff changeset
1295 if(!radeon_param_buff) return -ESPIPE;
4ee5fc519e08 Fixed 'cat' problems
nick
parents: 3253
diff changeset
1296 if(!(*ppos)) radeon_param_buff_fill();
4ee5fc519e08 Fixed 'cat' problems
nick
parents: 3253
diff changeset
1297 if(*ppos >= radeon_param_buff_len) return 0;
4ee5fc519e08 Fixed 'cat' problems
nick
parents: 3253
diff changeset
1298 size = min(count,radeon_param_buff_len-(uint32_t)(*ppos));
4ee5fc519e08 Fixed 'cat' problems
nick
parents: 3253
diff changeset
1299 memcpy(buf,radeon_param_buff,size);
4ee5fc519e08 Fixed 'cat' problems
nick
parents: 3253
diff changeset
1300 *ppos += size;
4ee5fc519e08 Fixed 'cat' problems
nick
parents: 3253
diff changeset
1301 return size;
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1302 }
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1303
3921
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1304 #define RTFSaturation(a) (1.0 + ((a)*1.0)/1000.0)
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1305 #define RTFBrightness(a) (((a)*1.0)/2000.0)
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1306 #define RTFContrast(a) (1.0 + ((a)*1.0)/1000.0)
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1307 #define RTFHue(a) (((a)*3.1416)/1000.0)
3940
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
1308 #define RadeonSetParm(a,b,c,d) if((b)>=(c)&&(b)<=(d)) { (a)=(b);\
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
1309 radeon_set_transform(RTFBrightness(ovBrightness),RTFContrast(ovContrast)\
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
1310 ,RTFSaturation(ovSaturation),RTFHue(ovHue),ov_trans_idx); }
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
1311
3921
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1312
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1313 static ssize_t radeon_vid_write(struct file *file, const char *buf, size_t count, loff_t *ppos)
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1314 {
3470
1a1669d42306 Tuned some registers
nick
parents: 3380
diff changeset
1315 #ifdef RAGE128
3247
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1316 if(memcmp(buf,PARAM_BRIGHTNESS,min(count,strlen(PARAM_BRIGHTNESS))) == 0)
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1317 {
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1318 long brightness;
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1319 brightness=simple_strtol(&buf[strlen(PARAM_BRIGHTNESS)],NULL,10);
3368
39ad81ffebf9 Minor fixes
nick
parents: 3366
diff changeset
1320 if(brightness >= -64 && brightness <= 63)
39ad81ffebf9 Minor fixes
nick
parents: 3366
diff changeset
1321 {
39ad81ffebf9 Minor fixes
nick
parents: 3366
diff changeset
1322 besr.brightness = brightness;
3247
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1323 OUTREG(OV0_COLOUR_CNTL, (brightness & 0x7f) |
3250
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1324 (besr.saturation << 8) |
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1325 (besr.saturation << 16));
3368
39ad81ffebf9 Minor fixes
nick
parents: 3366
diff changeset
1326 }
3247
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1327 }
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1328 else
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1329 if(memcmp(buf,PARAM_SATURATION,min(count,strlen(PARAM_SATURATION))) == 0)
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1330 {
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1331 long saturation;
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1332 saturation=simple_strtol(&buf[strlen(PARAM_SATURATION)],NULL,10);
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1333 if(saturation >= 0 && saturation <= 31)
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1334 OUTREG(OV0_COLOUR_CNTL, (besr.brightness & 0x7f) |
3250
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1335 (saturation << 8) |
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1336 (saturation << 16));
3247
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1337 }
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1338 else
3921
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1339 #else
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1340 #ifdef RADEON_FPU
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1341 if(memcmp(buf,PARAM_BRIGHTNESS,min(count,strlen(PARAM_BRIGHTNESS))) == 0)
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1342 {
3940
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
1343 int tmp;
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
1344 tmp=simple_strtol(&buf[strlen(PARAM_BRIGHTNESS)],NULL,10);
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
1345 RadeonSetParm(ovBrightness,tmp,-1000,1000);
3921
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1346 }
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1347 else
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1348 if(memcmp(buf,PARAM_SATURATION,min(count,strlen(PARAM_SATURATION))) == 0)
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1349 {
3940
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
1350 int tmp;
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
1351 tmp=simple_strtol(&buf[strlen(PARAM_SATURATION)],NULL,10);
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
1352 RadeonSetParm(ovSaturation,tmp,-1000,1000);
3921
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1353 }
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1354 else
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1355 if(memcmp(buf,PARAM_CONTRAST,min(count,strlen(PARAM_CONTRAST))) == 0)
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1356 {
3940
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
1357 int tmp;
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
1358 tmp=simple_strtol(&buf[strlen(PARAM_CONTRAST)],NULL,10);
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
1359 RadeonSetParm(ovContrast,tmp,-1000,1000);
3921
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1360 }
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1361 else
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1362 if(memcmp(buf,PARAM_HUE,min(count,strlen(PARAM_HUE))) == 0)
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1363 {
3940
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
1364 int tmp;
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
1365 tmp=simple_strtol(&buf[strlen(PARAM_HUE)],NULL,10);
db3a8c95bcf7 Added support of Radeon2 8500 AIW
nick
parents: 3921
diff changeset
1366 RadeonSetParm(ovHue,tmp,-1000,1000);
3921
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1367 }
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1368 else
f6cd00725f6e Added support of BRIGHTNESS, SATURATION, CONTRAST, HUE on Radeons
nick
parents: 3900
diff changeset
1369 #endif
3470
1a1669d42306 Tuned some registers
nick
parents: 3380
diff changeset
1370 #endif
3247
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1371 if(memcmp(buf,PARAM_DOUBLE_BUFF,min(count,strlen(PARAM_DOUBLE_BUFF))) == 0)
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1372 {
3250
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1373 if(memcmp(&buf[strlen(PARAM_DOUBLE_BUFF)],"on",2) == 0) besr.double_buff = 1;
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1374 else besr.double_buff = 0;
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1375 }
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1376 else
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1377 if(memcmp(buf,PARAM_DEINTERLACE,min(count,strlen(PARAM_DEINTERLACE))) == 0)
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1378 {
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1379 if(memcmp(&buf[strlen(PARAM_DEINTERLACE)],"on",2) == 0) besr.deinterlace_on = 1;
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1380 else besr.deinterlace_on = 0;
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1381 }
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1382 else
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1383 if(memcmp(buf,PARAM_DEINTERLACE_PATTERN,min(count,strlen(PARAM_DEINTERLACE_PATTERN))) == 0)
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1384 {
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1385 long dpat;
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1386 dpat=simple_strtol(&buf[strlen(PARAM_DEINTERLACE_PATTERN)],NULL,16);
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1387 OUTREG(OV0_DEINTERLACE_PATTERN, dpat);
3247
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1388 }
3263
4ee5fc519e08 Fixed 'cat' problems
nick
parents: 3253
diff changeset
1389 else count = -EIO;
3247
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1390 radeon_vid_preset();
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1391 return count;
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1392 }
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1393
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1394 static int radeon_vid_mmap(struct file *file, struct vm_area_struct *vma)
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1395 {
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1396
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1397 RTRACE(RVID_MSG"mapping video memory into userspace\n");
3019
64ce4a515a78 Bad attempt of YV12 direct support
nick
parents: 2965
diff changeset
1398 if(remap_page_range(vma->vm_start, radeon_mem_base + radeon_overlay_off,
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1399 vma->vm_end - vma->vm_start, vma->vm_page_prot))
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1400 {
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1401 printk(RVID_MSG"error mapping video memory\n");
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1402 return(-EAGAIN);
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1403 }
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1404
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1405 return(0);
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1406 }
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1407
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1408 static int radeon_vid_release(struct inode *inode, struct file *file)
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1409 {
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1410 radeon_vid_in_use = 0;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1411 radeon_vid_stop_video();
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1412
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1413 MOD_DEC_USE_COUNT;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1414 return 0;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1415 }
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1416
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1417 static long long radeon_vid_lseek(struct file *file, long long offset, int origin)
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1418 {
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1419 return -ESPIPE;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1420 }
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1421
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1422 static int radeon_vid_open(struct inode *inode, struct file *file)
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1423 {
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1424 int minor = MINOR(inode->i_rdev);
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1425
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1426 if(minor != 0)
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1427 return(-ENXIO);
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1428
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1429 if(radeon_vid_in_use == 1)
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1430 return(-EBUSY);
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1431
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1432 radeon_vid_in_use = 1;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1433 MOD_INC_USE_COUNT;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1434 return(0);
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1435 }
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1436
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1437 #if LINUX_VERSION_CODE >= 0x020400
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1438 static struct file_operations radeon_vid_fops =
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1439 {
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1440 llseek: radeon_vid_lseek,
3366
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
1441 read: radeon_vid_read,
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1442 write: radeon_vid_write,
3366
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
1443 /*
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
1444 readdir:
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
1445 poll:
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
1446 */
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1447 ioctl: radeon_vid_ioctl,
3366
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
1448 mmap: radeon_vid_mmap,
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
1449 open: radeon_vid_open,
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
1450 /*
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
1451 flush:
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
1452 */
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1453 release: radeon_vid_release
3366
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
1454 /*
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
1455 fsync:
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
1456 fasync:
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
1457 lock:
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
1458 readv:
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
1459 writev:
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
1460 sendpage:
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
1461 get_unmapped_area:
005b875788f7 rage128_vid are fully works!!!
nick
parents: 3348
diff changeset
1462 */
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1463 };
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1464 #else
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1465 static struct file_operations radeon_vid_fops =
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1466 {
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1467 radeon_vid_lseek,
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1468 radeon_vid_read,
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1469 radeon_vid_write,
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1470 NULL,
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1471 NULL,
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1472 radeon_vid_ioctl,
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1473 radeon_vid_mmap,
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1474 radeon_vid_open,
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1475 NULL,
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1476 radeon_vid_release
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1477 };
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1478 #endif
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1479
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1480 /*
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1481 * Main Initialization Function
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1482 */
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1483
3265
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
1484 static int __init radeon_vid_initialize(void)
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1485 {
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1486 radeon_vid_in_use = 0;
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1487 #ifdef RAGE128
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1488 printk(RVID_MSG"Rage128/Rage128Pro video overlay driver v"RADEON_VID_VERSION" (C) Nick Kurshev\n");
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1489 #else
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1490 printk(RVID_MSG"Radeon video overlay driver v"RADEON_VID_VERSION" (C) Nick Kurshev\n");
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1491 #endif
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1492 if(register_chrdev(RADEON_VID_MAJOR, "radeon_vid", &radeon_vid_fops))
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1493 {
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1494 printk(RVID_MSG"unable to get major: %d\n", RADEON_VID_MAJOR);
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1495 return -EIO;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1496 }
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1497
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1498 if (!radeon_vid_config_card())
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1499 {
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1500 printk(RVID_MSG"can't configure this card\n");
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1501 unregister_chrdev(RADEON_VID_MAJOR, "radeon_vid");
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1502 return -EINVAL;
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1503 }
3263
4ee5fc519e08 Fixed 'cat' problems
nick
parents: 3253
diff changeset
1504 radeon_param_buff = kmalloc(PARAM_BUFF_SIZE,GFP_KERNEL);
4ee5fc519e08 Fixed 'cat' problems
nick
parents: 3253
diff changeset
1505 if(radeon_param_buff) radeon_param_buff_size = PARAM_BUFF_SIZE;
3607
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
1506 #if 0
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1507 radeon_vid_save_state();
3607
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
1508 #endif
3250
61b1441c0f8c More configurable stuff
nick
parents: 3247
diff changeset
1509 radeon_vid_make_default();
3247
7cec2396bde3 Tune up driver through reading and writing /dev/radeon_vid ;)
nick
parents: 3198
diff changeset
1510 radeon_vid_preset();
3265
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
1511 #ifdef CONFIG_MTRR
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
1512 if (mtrr) {
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
1513 smtrr.vram = mtrr_add(radeon_mem_base,
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
1514 radeon_ram_size*0x100000, MTRR_TYPE_WRCOMB, 1);
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
1515 smtrr.vram_valid = 1;
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
1516 /* let there be speed */
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
1517 printk(RVID_MSG"MTRR set to ON\n");
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
1518 }
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
1519 #endif /* CONFIG_MTRR */
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1520 return(0);
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1521 }
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1522
3265
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
1523 int __init init_module(void)
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1524 {
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1525 return radeon_vid_initialize();
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1526 }
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1527
3265
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
1528 void __exit cleanup_module(void)
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1529 {
3607
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
1530 #if 0
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1531 radeon_vid_restore_state();
3607
f5cc15e11d6e + Added support of FIFO engine (suggested by Vladimir Dergachev)
nick
parents: 3487
diff changeset
1532 #endif
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1533 if(radeon_mmio_base)
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1534 iounmap(radeon_mmio_base);
3263
4ee5fc519e08 Fixed 'cat' problems
nick
parents: 3253
diff changeset
1535 kfree(radeon_param_buff);
3164
3c5ad8d5ac00 radeon_vid new features:
nick
parents: 3122
diff changeset
1536 RTRACE(RVID_MSG"Cleaning up module\n");
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1537 unregister_chrdev(RADEON_VID_MAJOR, "radeon_vid");
3265
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
1538 #ifdef CONFIG_MTRR
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
1539 if (smtrr.vram_valid)
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
1540 mtrr_del(smtrr.vram, radeon_mem_base,
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
1541 radeon_ram_size*0x100000);
ec69d8238c84 Support for MTRR and 'swap_fourcc' flag
nick
parents: 3263
diff changeset
1542 #endif /* CONFIG_MTRR */
2870
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1543 }
f46c5556f1e6 radeon_vid: it's in first pre-alpha stage
nick
parents:
diff changeset
1544