annotate drivers/radeon/radeon_vid.c @ 5929:9e7d54e7be58

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