annotate drivers/radeon_vid.c @ 22968:45c2d7b8c499

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