annotate vidix/mga_vid.c @ 25661:293aeec83153

Replace the persistent CODECS_FLAG_SELECTED by a local "stringset" with an almost-trivial implementation. This allows making the builtin codec structs const, and it also makes clearer that this "selected" status is not used outside the init functions.
author reimar
date Sat, 12 Jan 2008 14:05:46 +0000
parents 48441c610249
children 051b2632f121
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1 /*
23046
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
2 * VIDIX driver for Matrox chipsets.
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
3 * Copyright (C) 2002 Alex Beregszaszi
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
4 *
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
5 * This file is part of MPlayer.
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
6 *
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
7 * MPlayer is free software; you can redistribute it and/or modify
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
8 * it under the terms of the GNU General Public License as published by
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
9 * the Free Software Foundation; either version 2 of the License, or
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
10 * (at your option) any later version.
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
11 *
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
12 * MPlayer is distributed in the hope that it will be useful,
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
15 * GNU General Public License for more details.
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
16 *
23046
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
17 * You should have received a copy of the GNU General Public License
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
18 * along with MPlayer; if not, write to the Free Software
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
20 *
23046
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
21 * Original sources from Aaron Holtzman (C) 1999.
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
22 * Module skeleton based on gutted agpgart module by Jeff Hartmann
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
23 * <slicer@ionet.net>
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
24 * YUY2 support added by A'rpi/ESP-team
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
25 double buffering added by A'rpi/ESP-team
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
26 * Brightness/contrast support by Nick Kurshev/Dariush Pietrzak (eyck)
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
27 *
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
28 * TODO:
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
29 * - fix memory size detection (current reading pci userconfig isn't
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
30 * working as requested - returns the max avail. ram on arch?)
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
31 * - translate all non-english comments to english
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
32 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
33
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
34 //#define CRTC2
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
35
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
36 // Set this value, if autodetection fails! (video ram size in megabytes)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
37 //#define MGA_MEMORY_SIZE 16
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
38
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
39 /* No irq support in userspace implemented yet, do not enable this! */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
40 /* disable irq */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
41 #undef MGA_ALLOW_IRQ
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
42
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
43 #define MGA_VSYNC_POS 2
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
44
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
45 #undef MGA_PCICONFIG_MEMDETECT
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
46
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
47 #define MGA_DEFAULT_FRAMES 4
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
48
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
49 #include <errno.h>
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
50 #include <stdio.h>
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
51 #include <stdlib.h>
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
52 #include <string.h>
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
53 #include <math.h>
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
54 #include <inttypes.h>
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
55
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
56 #include "vidix.h"
22857
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
57 #include "vidixlib.h"
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
58 #include "fourcc.h"
22901
a7605669b114 renamed libdha.[hc] to dha.[hc]
ben
parents: 22900
diff changeset
59 #include "dha.h"
22900
a9e111b88c4a merged libdha and libvidix, moved all files from libdha to vidix directory
ben
parents: 22874
diff changeset
60 #include "pci_ids.h"
a9e111b88c4a merged libdha and libvidix, moved all files from libdha to vidix directory
ben
parents: 22874
diff changeset
61 #include "pci_names.h"
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
62
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
63 #ifdef __MINGW32__
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
64 #define ENOTSUP 134
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
65 #endif
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
66
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
67 #if !defined(ENOTSUP) && defined(EOPNOTSUPP)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
68 #define ENOTSUP EOPNOTSUPP
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
69 #endif
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
70
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
71 /* from radeon_vid */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
72 #define GETREG(TYPE,PTR,OFFZ) (*((volatile TYPE*)((PTR)+(OFFZ))))
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
73 #define SETREG(TYPE,PTR,OFFZ,VAL) (*((volatile TYPE*)((PTR)+(OFFZ))))=VAL
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
74
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
75 #define readb(addr) GETREG(uint8_t,(uint32_t)(addr),0)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
76 #define writeb(val,addr) SETREG(uint8_t,(uint32_t)(addr),0,val)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
77 #define readl(addr) GETREG(uint32_t,(uint32_t)(addr),0)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
78 #define writel(val,addr) SETREG(uint32_t,(uint32_t)(addr),0,val)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
79
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
80 static int mga_verbose = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
81
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
82 /* for device detection */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
83 static int probed = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
84 static pciinfo_t pci_info;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
85
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
86 /* internal booleans */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
87 static int mga_vid_in_use = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
88 static int is_g400 = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
89 static int vid_src_ready = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
90 static int vid_overlay_on = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
91
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
92 /* mapped physical addresses */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
93 static uint8_t *mga_mmio_base = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
94 static uint8_t *mga_mem_base = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
95
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
96 static int mga_src_base = 0; /* YUV buffer position in video memory */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
97
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
98 static uint32_t mga_ram_size = 0; /* how much megabytes videoram we have */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
99
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
100 /* Graphic keys */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
101 static vidix_grkey_t mga_grkey;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
102
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
103 static int colkey_saved = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
104 static int colkey_on = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
105 static unsigned char colkey_color[4];
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
106 static unsigned char colkey_mask[4];
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
107
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
108 /* for IRQ */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
109 static int mga_irq = -1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
110
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
111 static int mga_next_frame = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
112
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
113 static vidix_capability_t mga_cap =
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
114 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
115 "Matrox MGA G200/G4x0/G5x0 YUV Video",
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
116 "Aaron Holtzman, Arpad Gereoffy, Alex Beregszaszi, Nick Kurshev",
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
117 TYPE_OUTPUT,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
118 { 0, 0, 0, 0 },
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
119 2048,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
120 2048,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
121 4,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
122 4,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
123 -1,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
124 FLAG_UPSCALER | FLAG_DOWNSCALER | FLAG_EQUALIZER,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
125 VENDOR_MATROX,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
126 -1, /* will be set in vixProbe */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
127 { 0, 0, 0, 0}
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
128 };
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
129
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
130 /* MATROX BES registers */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
131 typedef struct bes_registers_s
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
132 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
133 //BES Control
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
134 uint32_t besctl;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
135 //BES Global control
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
136 uint32_t besglobctl;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
137 //Luma control (brightness and contrast)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
138 uint32_t beslumactl;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
139 //Line pitch
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
140 uint32_t bespitch;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
141
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
142 //Buffer A-1 Chroma 3 plane org
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
143 uint32_t besa1c3org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
144 //Buffer A-1 Chroma org
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
145 uint32_t besa1corg;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
146 //Buffer A-1 Luma org
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
147 uint32_t besa1org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
148
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
149 //Buffer A-2 Chroma 3 plane org
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
150 uint32_t besa2c3org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
151 //Buffer A-2 Chroma org
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
152 uint32_t besa2corg;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
153 //Buffer A-2 Luma org
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
154 uint32_t besa2org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
155
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
156 //Buffer B-1 Chroma 3 plane org
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
157 uint32_t besb1c3org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
158 //Buffer B-1 Chroma org
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
159 uint32_t besb1corg;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
160 //Buffer B-1 Luma org
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
161 uint32_t besb1org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
162
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
163 //Buffer B-2 Chroma 3 plane org
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
164 uint32_t besb2c3org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
165 //Buffer B-2 Chroma org
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
166 uint32_t besb2corg;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
167 //Buffer B-2 Luma org
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
168 uint32_t besb2org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
169
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
170 //BES Horizontal coord
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
171 uint32_t beshcoord;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
172 //BES Horizontal inverse scaling [5.14]
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
173 uint32_t beshiscal;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
174 //BES Horizontal source start [10.14] (for scaling)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
175 uint32_t beshsrcst;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
176 //BES Horizontal source ending [10.14] (for scaling)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
177 uint32_t beshsrcend;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
178 //BES Horizontal source last
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
179 uint32_t beshsrclst;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
180
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
181
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
182 //BES Vertical coord
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
183 uint32_t besvcoord;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
184 //BES Vertical inverse scaling [5.14]
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
185 uint32_t besviscal;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
186 //BES Field 1 vertical source last position
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
187 uint32_t besv1srclst;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
188 //BES Field 1 weight start
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
189 uint32_t besv1wght;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
190 //BES Field 2 vertical source last position
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
191 uint32_t besv2srclst;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
192 //BES Field 2 weight start
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
193 uint32_t besv2wght;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
194
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
195 } bes_registers_t;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
196 static bes_registers_t regs;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
197
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
198 #ifdef CRTC2
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
199 typedef struct crtc2_registers_s
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
200 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
201 uint32_t c2ctl;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
202 uint32_t c2datactl;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
203 uint32_t c2misc;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
204 uint32_t c2hparam;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
205 uint32_t c2hsync;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
206 uint32_t c2offset;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
207 uint32_t c2pl2startadd0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
208 uint32_t c2pl2startadd1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
209 uint32_t c2pl3startadd0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
210 uint32_t c2pl3startadd1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
211 uint32_t c2preload;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
212 uint32_t c2spicstartadd0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
213 uint32_t c2spicstartadd1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
214 uint32_t c2startadd0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
215 uint32_t c2startadd1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
216 uint32_t c2subpiclut;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
217 uint32_t c2vcount;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
218 uint32_t c2vparam;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
219 uint32_t c2vsync;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
220 } crtc2_registers_t;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
221 static crtc2_registers_t cregs;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
222 #endif
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
223
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
224 //All register offsets are converted to word aligned offsets (32 bit)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
225 //because we want all our register accesses to be 32 bits
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
226 #define VCOUNT 0x1e20
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
227
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
228 #define PALWTADD 0x3c00 // Index register for X_DATAREG port
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
229 #define X_DATAREG 0x3c0a
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
230
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
231 #define XMULCTRL 0x19
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
232 #define BPP_8 0x00
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
233 #define BPP_15 0x01
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
234 #define BPP_16 0x02
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
235 #define BPP_24 0x03
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
236 #define BPP_32_DIR 0x04
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
237 #define BPP_32_PAL 0x07
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
238
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
239 #define XCOLMSK 0x40
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
240 #define X_COLKEY 0x42
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
241 #define XKEYOPMODE 0x51
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
242 #define XCOLMSK0RED 0x52
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
243 #define XCOLMSK0GREEN 0x53
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
244 #define XCOLMSK0BLUE 0x54
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
245 #define XCOLKEY0RED 0x55
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
246 #define XCOLKEY0GREEN 0x56
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
247 #define XCOLKEY0BLUE 0x57
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
248
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
249 #ifdef CRTC2
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
250 /*CRTC2 registers*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
251 #define XMISCCTRL 0x1e
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
252 #define C2CTL 0x3c10
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
253 #define C2DATACTL 0x3c4c
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
254 #define C2MISC 0x3c44
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
255 #define C2HPARAM 0x3c14
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
256 #define C2HSYNC 0x3c18
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
257 #define C2OFFSET 0x3c40
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
258 #define C2PL2STARTADD0 0x3c30 // like BESA1CORG
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
259 #define C2PL2STARTADD1 0x3c34 // like BESA2CORG
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
260 #define C2PL3STARTADD0 0x3c38 // like BESA1C3ORG
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
261 #define C2PL3STARTADD1 0x3c3c // like BESA2C3ORG
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
262 #define C2PRELOAD 0x3c24
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
263 #define C2SPICSTARTADD0 0x3c54
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
264 #define C2SPICSTARTADD1 0x3c58
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
265 #define C2STARTADD0 0x3c28 // like BESA1ORG
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
266 #define C2STARTADD1 0x3c2c // like BESA2ORG
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
267 #define C2SUBPICLUT 0x3c50
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
268 #define C2VCOUNT 0x3c48
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
269 #define C2VPARAM 0x3c1c
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
270 #define C2VSYNC 0x3c20
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
271 #endif /* CRTC2 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
272
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
273 // Backend Scaler registers
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
274 #define BESCTL 0x3d20
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
275 #define BESGLOBCTL 0x3dc0
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
276 #define BESLUMACTL 0x3d40
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
277 #define BESPITCH 0x3d24
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
278
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
279 #define BESA1C3ORG 0x3d60
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
280 #define BESA1CORG 0x3d10
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
281 #define BESA1ORG 0x3d00
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
282
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
283 #define BESA2C3ORG 0x3d64
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
284 #define BESA2CORG 0x3d14
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
285 #define BESA2ORG 0x3d04
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
286
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
287 #define BESB1C3ORG 0x3d68
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
288 #define BESB1CORG 0x3d18
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
289 #define BESB1ORG 0x3d08
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
290
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
291 #define BESB2C3ORG 0x3d6C
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
292 #define BESB2CORG 0x3d1C
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
293 #define BESB2ORG 0x3d0C
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
294
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
295 #define BESHCOORD 0x3d28
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
296 #define BESHISCAL 0x3d30
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
297 #define BESHSRCEND 0x3d3C
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
298 #define BESHSRCLST 0x3d50
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
299 #define BESHSRCST 0x3d38
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
300 #define BESV1WGHT 0x3d48
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
301 #define BESV2WGHT 0x3d4c
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
302 #define BESV1SRCLST 0x3d54
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
303 #define BESV2SRCLST 0x3d58
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
304 #define BESVISCAL 0x3d34
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
305 #define BESVCOORD 0x3d2c
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
306 #define BESSTATUS 0x3dc4
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
307
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
308 #define CRTCX 0x1fd4
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
309 #define CRTCD 0x1fd5
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
310 #define IEN 0x1e1c
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
311 #define ICLEAR 0x1e18
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
312 #define STATUS 0x1e14
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
313
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
314
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
315 #ifdef CRTC2
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
316 static void crtc2_frame_sel(int frame)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
317 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
318 switch(frame) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
319 case 0:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
320 cregs.c2pl2startadd0=regs.besa1corg;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
321 cregs.c2pl3startadd0=regs.besa1c3org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
322 cregs.c2startadd0=regs.besa1org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
323 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
324 case 1:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
325 cregs.c2pl2startadd0=regs.besa2corg;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
326 cregs.c2pl3startadd0=regs.besa2c3org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
327 cregs.c2startadd0=regs.besa2org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
328 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
329 case 2:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
330 cregs.c2pl2startadd0=regs.besb1corg;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
331 cregs.c2pl3startadd0=regs.besb1c3org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
332 cregs.c2startadd0=regs.besb1org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
333 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
334 case 3:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
335 cregs.c2pl2startadd0=regs.besb2corg;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
336 cregs.c2pl3startadd0=regs.besb2c3org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
337 cregs.c2startadd0=regs.besb2org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
338 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
339 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
340 writel(cregs.c2startadd0, mga_mmio_base + C2STARTADD0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
341 writel(cregs.c2pl2startadd0, mga_mmio_base + C2PL2STARTADD0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
342 writel(cregs.c2pl3startadd0, mga_mmio_base + C2PL3STARTADD0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
343 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
344 #endif
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
345
22857
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
346 static int mga_frame_select(unsigned int frame)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
347 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
348 mga_next_frame = frame;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
349 if (mga_verbose>1) printf("[mga] frameselect: %d\n", mga_next_frame);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
350 #if MGA_ALLOW_IRQ
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
351 if (mga_irq == -1)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
352 #endif
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
353 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
354 //we don't need the vcount protection as we're only hitting
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
355 //one register (and it doesn't seem to be double buffered)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
356 regs.besctl = (regs.besctl & ~0x07000000) + (mga_next_frame << 25);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
357 writel( regs.besctl, mga_mmio_base + BESCTL );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
358
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
359 // writel( regs.besglobctl + ((readl(mga_mmio_base + VCOUNT)+2)<<16),
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
360 writel( regs.besglobctl + (MGA_VSYNC_POS<<16),
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
361 mga_mmio_base + BESGLOBCTL);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
362 #ifdef CRTC2
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
363 crtc2_frame_sel(mga_next_frame);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
364 #endif
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
365 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
366
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
367 return(0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
368 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
369
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
370
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
371 static void mga_vid_write_regs(int restore)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
372 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
373 //Make sure internal registers don't get updated until we're done
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
374 writel( (readl(mga_mmio_base + VCOUNT)-1)<<16,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
375 mga_mmio_base + BESGLOBCTL);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
376
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
377 // color or coordinate keying
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
378
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
379 if(restore && colkey_saved){
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
380 // restore it
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
381 colkey_saved=0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
382
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
383 // Set color key registers:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
384 writeb( XKEYOPMODE, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
385 writeb( colkey_on, mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
386
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
387 writeb( XCOLKEY0RED, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
388 writeb( colkey_color[0], mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
389 writeb( XCOLKEY0GREEN, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
390 writeb( colkey_color[1], mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
391 writeb( XCOLKEY0BLUE, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
392 writeb( colkey_color[2], mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
393 writeb( X_COLKEY, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
394 writeb( colkey_color[3], mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
395
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
396 writeb( XCOLMSK0RED, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
397 writeb( colkey_mask[0], mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
398 writeb( XCOLMSK0GREEN, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
399 writeb( colkey_mask[1], mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
400 writeb( XCOLMSK0BLUE, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
401 writeb( colkey_mask[2], mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
402 writeb( XCOLMSK, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
403 writeb( colkey_mask[3], mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
404
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
405 } else if(!colkey_saved){
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
406 // save it
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
407 colkey_saved=1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
408 // Get color key registers:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
409 writeb( XKEYOPMODE, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
410 colkey_on=(unsigned char)readb(mga_mmio_base + X_DATAREG) & 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
411
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
412 writeb( XCOLKEY0RED, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
413 colkey_color[0]=(unsigned char)readb(mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
414 writeb( XCOLKEY0GREEN, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
415 colkey_color[1]=(unsigned char)readb(mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
416 writeb( XCOLKEY0BLUE, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
417 colkey_color[2]=(unsigned char)readb(mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
418 writeb( X_COLKEY, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
419 colkey_color[3]=(unsigned char)readb(mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
420
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
421 writeb( XCOLMSK0RED, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
422 colkey_mask[0]=(unsigned char)readb(mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
423 writeb( XCOLMSK0GREEN, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
424 colkey_mask[1]=(unsigned char)readb(mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
425 writeb( XCOLMSK0BLUE, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
426 colkey_mask[2]=(unsigned char)readb(mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
427 writeb( XCOLMSK, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
428 colkey_mask[3]=(unsigned char)readb(mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
429 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
430
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
431 if(!restore){
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
432 writeb( XKEYOPMODE, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
433 writeb( mga_grkey.ckey.op == CKEY_TRUE, mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
434 if ( mga_grkey.ckey.op == CKEY_TRUE )
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
435 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
436 uint32_t r=0, g=0, b=0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
437
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
438 writeb( XMULCTRL, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
439 switch (readb (mga_mmio_base + X_DATAREG))
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
440 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
441 case BPP_8:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
442 /* Need to look up the color index, just using
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
443 color 0 for now. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
444 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
445
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
446 case BPP_15:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
447 r = mga_grkey.ckey.red >> 3;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
448 g = mga_grkey.ckey.green >> 3;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
449 b = mga_grkey.ckey.blue >> 3;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
450 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
451
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
452 case BPP_16:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
453 r = mga_grkey.ckey.red >> 3;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
454 g = mga_grkey.ckey.green >> 2;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
455 b = mga_grkey.ckey.blue >> 3;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
456 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
457
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
458 case BPP_24:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
459 case BPP_32_DIR:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
460 case BPP_32_PAL:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
461 r = mga_grkey.ckey.red;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
462 g = mga_grkey.ckey.green;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
463 b = mga_grkey.ckey.blue;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
464 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
465 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
466
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
467 // Enable colorkeying
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
468 writeb( XKEYOPMODE, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
469 writeb( 1, mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
470
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
471 // Disable color keying on alpha channel
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
472 writeb( XCOLMSK, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
473 writeb( 0x00, mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
474 writeb( X_COLKEY, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
475 writeb( 0x00, mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
476
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
477
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
478 // Set up color key registers
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
479 writeb( XCOLKEY0RED, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
480 writeb( r, mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
481 writeb( XCOLKEY0GREEN, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
482 writeb( g, mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
483 writeb( XCOLKEY0BLUE, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
484 writeb( b, mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
485
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
486 // Set up color key mask registers
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
487 writeb( XCOLMSK0RED, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
488 writeb( 0xff, mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
489 writeb( XCOLMSK0GREEN, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
490 writeb( 0xff, mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
491 writeb( XCOLMSK0BLUE, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
492 writeb( 0xff, mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
493 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
494 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
495 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
496 // Disable colorkeying
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
497 writeb( XKEYOPMODE, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
498 writeb( 0, mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
499 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
500 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
501
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
502 // Backend Scaler
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
503 writel( regs.besctl, mga_mmio_base + BESCTL);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
504 if(is_g400)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
505 writel( regs.beslumactl, mga_mmio_base + BESLUMACTL);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
506 writel( regs.bespitch, mga_mmio_base + BESPITCH);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
507
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
508 writel( regs.besa1org, mga_mmio_base + BESA1ORG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
509 writel( regs.besa1corg, mga_mmio_base + BESA1CORG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
510 writel( regs.besa2org, mga_mmio_base + BESA2ORG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
511 writel( regs.besa2corg, mga_mmio_base + BESA2CORG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
512 writel( regs.besb1org, mga_mmio_base + BESB1ORG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
513 writel( regs.besb1corg, mga_mmio_base + BESB1CORG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
514 writel( regs.besb2org, mga_mmio_base + BESB2ORG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
515 writel( regs.besb2corg, mga_mmio_base + BESB2CORG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
516 if(is_g400)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
517 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
518 writel( regs.besa1c3org, mga_mmio_base + BESA1C3ORG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
519 writel( regs.besa2c3org, mga_mmio_base + BESA2C3ORG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
520 writel( regs.besb1c3org, mga_mmio_base + BESB1C3ORG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
521 writel( regs.besb2c3org, mga_mmio_base + BESB2C3ORG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
522 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
523
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
524 writel( regs.beshcoord, mga_mmio_base + BESHCOORD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
525 writel( regs.beshiscal, mga_mmio_base + BESHISCAL);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
526 writel( regs.beshsrcst, mga_mmio_base + BESHSRCST);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
527 writel( regs.beshsrcend, mga_mmio_base + BESHSRCEND);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
528 writel( regs.beshsrclst, mga_mmio_base + BESHSRCLST);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
529
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
530 writel( regs.besvcoord, mga_mmio_base + BESVCOORD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
531 writel( regs.besviscal, mga_mmio_base + BESVISCAL);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
532
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
533 writel( regs.besv1srclst, mga_mmio_base + BESV1SRCLST);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
534 writel( regs.besv1wght, mga_mmio_base + BESV1WGHT);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
535 writel( regs.besv2srclst, mga_mmio_base + BESV2SRCLST);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
536 writel( regs.besv2wght, mga_mmio_base + BESV2WGHT);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
537
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
538 //update the registers somewhere between 1 and 2 frames from now.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
539 writel( regs.besglobctl + ((readl(mga_mmio_base + VCOUNT)+2)<<16),
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
540 mga_mmio_base + BESGLOBCTL);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
541
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
542 if (mga_verbose > 1)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
543 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
544 printf("[mga] wrote BES registers\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
545 printf("[mga] BESCTL = 0x%08x\n",
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
546 readl(mga_mmio_base + BESCTL));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
547 printf("[mga] BESGLOBCTL = 0x%08x\n",
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
548 readl(mga_mmio_base + BESGLOBCTL));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
549 printf("[mga] BESSTATUS= 0x%08x\n",
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
550 readl(mga_mmio_base + BESSTATUS));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
551 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
552 #ifdef CRTC2
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
553 writel(((readl(mga_mmio_base + C2CTL) & ~0x03e00000) + (cregs.c2ctl & 0x03e00000)), mga_mmio_base + C2CTL);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
554 writel(((readl(mga_mmio_base + C2DATACTL) & ~0x000000ff) + (cregs.c2datactl & 0x000000ff)), mga_mmio_base + C2DATACTL);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
555 // ctrc2
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
556 // disable CRTC2 acording to specs
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
557 writel(cregs.c2misc, mga_mmio_base + C2MISC);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
558
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
559 if (mga_verbose > 1) printf("[mga] c2offset = %d\n",cregs.c2offset);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
560
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
561 writel(cregs.c2offset, mga_mmio_base + C2OFFSET);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
562 writel(cregs.c2startadd0, mga_mmio_base + C2STARTADD0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
563 writel(cregs.c2pl2startadd0, mga_mmio_base + C2PL2STARTADD0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
564 writel(cregs.c2pl3startadd0, mga_mmio_base + C2PL3STARTADD0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
565 writel(cregs.c2spicstartadd0, mga_mmio_base + C2SPICSTARTADD0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
566 #endif
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
567 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
568
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
569 #ifdef MGA_ALLOW_IRQ
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
570 static void enable_irq(){
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
571 long int cc;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
572
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
573 cc = readl(mga_mmio_base + IEN);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
574
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
575 writeb( 0x11, mga_mmio_base + CRTCX);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
576
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
577 writeb(0x20, mga_mmio_base + CRTCD ); /* clear 0, enable off */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
578 writeb(0x00, mga_mmio_base + CRTCD ); /* enable on */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
579 writeb(0x10, mga_mmio_base + CRTCD ); /* clear = 1 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
580
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
581 writel( regs.besglobctl , mga_mmio_base + BESGLOBCTL);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
582
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
583 return;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
584 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
585
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
586 static void disable_irq()
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
587 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
588 writeb( 0x11, mga_mmio_base + CRTCX);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
589 writeb(0x20, mga_mmio_base + CRTCD ); /* clear 0, enable off */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
590
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
591 return;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
592 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
593
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
594 void mga_handle_irq(int irq, void *dev_id/*, struct pt_regs *pregs*/) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
595 long int cc;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
596
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
597 if ( irq != -1 ) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
598
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
599 cc = readl(mga_mmio_base + STATUS);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
600 if ( ! (cc & 0x10) ) return; /* vsyncpen */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
601 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
602
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
603 regs.besctl = (regs.besctl & ~0x07000000) + (mga_next_frame << 25);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
604 writel( regs.besctl, mga_mmio_base + BESCTL );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
605
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
606 #ifdef CRTC2
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
607 // sem pridat vyber obrazku !!!!
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
608 crtc2_frame_sel(mga_next_frame);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
609 #endif
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
610
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
611 if ( irq != -1 ) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
612 writeb( 0x11, mga_mmio_base + CRTCX);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
613 writeb( 0, mga_mmio_base + CRTCD );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
614 writeb( 0x10, mga_mmio_base + CRTCD );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
615 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
616
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
617 return;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
618
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
619 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
620 #endif /* MGA_ALLOW_IRQ */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
621
22857
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
622 static int mga_config_playback(vidix_playback_t *config)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
623 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
624 unsigned int i;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
625 int x, y, sw, sh, dw, dh;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
626 int besleft, bestop, ifactor, ofsleft, ofstop, baseadrofs, weight, weights;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
627 #ifdef CRTC2
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
628 #define right_margin 0
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
629 #define left_margin 18
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
630 #define hsync_len 46
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
631 #define lower_margin 10
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
632 #define vsync_len 4
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
633 #define upper_margin 39
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
634
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
635 unsigned int hdispend = (config->src.w + 31) & ~31;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
636 unsigned int hsyncstart = hdispend + (right_margin & ~7);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
637 unsigned int hsyncend = hsyncstart + (hsync_len & ~7);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
638 unsigned int htotal = hsyncend + (left_margin & ~7);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
639 unsigned int vdispend = config->src.h;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
640 unsigned int vsyncstart = vdispend + lower_margin;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
641 unsigned int vsyncend = vsyncstart + vsync_len;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
642 unsigned int vtotal = vsyncend + upper_margin;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
643 #endif
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
644
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
645 if ((config->num_frames < 1) || (config->num_frames > 4))
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
646 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
647 printf("[mga] illegal num_frames: %d, setting to %d\n",
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
648 config->num_frames, MGA_DEFAULT_FRAMES);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
649 config->num_frames = MGA_DEFAULT_FRAMES;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
650 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
651
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
652 x = config->dest.x;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
653 y = config->dest.y;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
654 sw = config->src.w;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
655 sh = config->src.h;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
656 dw = config->dest.w;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
657 dh = config->dest.h;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
658
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
659 config->dest.pitch.y=32;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
660 config->dest.pitch.u=config->dest.pitch.v=32;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
661
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
662 if (mga_verbose) printf("[mga] Setting up a %dx%d-%dx%d video window (src %dx%d) format %X\n",
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
663 dw, dh, x, y, sw, sh, config->fourcc);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
664
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
665 if ((sw < 4) || (sh < 4) || (dw < 4) || (dh < 4))
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
666 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
667 printf("[mga] Invalid src/dest dimensions\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
668 return(EINVAL);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
669 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
670
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
671 //FIXME check that window is valid and inside desktop
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
672
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
673 sw+=sw&1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
674 switch(config->fourcc)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
675 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
676 case IMGFMT_I420:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
677 case IMGFMT_IYUV:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
678 case IMGFMT_YV12:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
679 sh+=sh&1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
680 config->frame_size = ((sw + 31) & ~31) * sh + (((sw + 31) & ~31) * sh) / 2;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
681 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
682 case IMGFMT_YUY2:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
683 case IMGFMT_UYVY:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
684 config->frame_size = ((sw + 31) & ~31) * sh * 2;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
685 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
686 default:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
687 printf("[mga] Unsupported pixel format: %x\n", config->fourcc);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
688 return(ENOTSUP);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
689 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
690
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
691 config->offsets[0] = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
692 for (i = 1; i < config->num_frames+1; i++)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
693 config->offsets[i] = i*config->frame_size;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
694
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
695 config->offset.y=0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
696 if(config->fourcc == IMGFMT_I420 || config->fourcc == IMGFMT_IYUV)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
697 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
698 config->offset.u=((sw + 31) & ~31) * sh;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
699 config->offset.v=config->offset.u+((sw + 31) & ~31) * sh /4;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
700 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
701 else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
702 config->offset.v=((sw + 31) & ~31) * sh;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
703 config->offset.u=config->offset.v+((sw + 31) & ~31) * sh /4;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
704 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
705
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
706 mga_src_base = (mga_ram_size*0x100000-config->num_frames*config->frame_size);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
707 if (mga_src_base < 0)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
708 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
709 printf("[mga] not enough memory for frames!\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
710 return(EFAULT);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
711 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
712 mga_src_base &= (~0xFFFF); /* 64k boundary */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
713 if (mga_verbose > 1) printf("[mga] YUV buffer base: %#x\n", mga_src_base);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
714
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
715 config->dga_addr = mga_mem_base + mga_src_base;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
716
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
717 /* for G200 set Interleaved UV planes */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
718 if (!is_g400)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
719 config->flags = VID_PLAY_INTERLEAVED_UV | INTERLEAVING_UV;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
720
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
721 //Setup the BES registers for a three plane 4:2:0 video source
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
722
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
723 regs.besglobctl = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
724
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
725 switch(config->fourcc)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
726 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
727 case IMGFMT_YV12:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
728 case IMGFMT_I420:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
729 case IMGFMT_IYUV:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
730 regs.besctl = 1 // BES enabled
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
731 + (0<<6) // even start polarity
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
732 + (1<<10) // x filtering enabled
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
733 + (1<<11) // y filtering enabled
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
734 + (1<<16) // chroma upsampling
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
735 + (1<<17) // 4:2:0 mode
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
736 + (1<<18); // dither enabled
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
737 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
738
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
739 case IMGFMT_YUY2:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
740 regs.besctl = 1 // BES enabled
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
741 + (0<<6) // even start polarity
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
742 + (1<<10) // x filtering enabled
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
743 + (1<<11) // y filtering enabled
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
744 + (1<<16) // chroma upsampling
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
745 + (0<<17) // 4:2:2 mode
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
746 + (1<<18); // dither enabled
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
747
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
748 regs.besglobctl = 0; // YUY2 format selected
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
749 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
750
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
751 case IMGFMT_UYVY:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
752 regs.besctl = 1 // BES enabled
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
753 + (0<<6) // even start polarity
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
754 + (1<<10) // x filtering enabled
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
755 + (1<<11) // y filtering enabled
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
756 + (1<<16) // chroma upsampling
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
757 + (0<<17) // 4:2:2 mode
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
758 + (1<<18); // dither enabled
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
759
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
760 regs.besglobctl = 1<<6; // UYVY format selected
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
761 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
762
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
763 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
764
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
765 //Disable contrast and brightness control
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
766 regs.besglobctl |= (1<<5) + (1<<7);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
767 regs.beslumactl = (0x7f << 16) + (0x80<<0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
768 regs.beslumactl = 0x80<<0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
769
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
770 //Setup destination window boundaries
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
771 besleft = x > 0 ? x : 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
772 bestop = y > 0 ? y : 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
773 regs.beshcoord = (besleft<<16) + (x + dw-1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
774 regs.besvcoord = (bestop<<16) + (y + dh-1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
775
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
776 //Setup source dimensions
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
777 regs.beshsrclst = (sw - 1) << 16;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
778 regs.bespitch = (sw + 31) & ~31 ;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
779
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
780 //Setup horizontal scaling
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
781 ifactor = ((sw-1)<<14)/(dw-1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
782 ofsleft = besleft - x;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
783
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
784 regs.beshiscal = ifactor<<2;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
785 regs.beshsrcst = (ofsleft*ifactor)<<2;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
786 regs.beshsrcend = regs.beshsrcst + (((dw - ofsleft - 1) * ifactor) << 2);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
787
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
788 //Setup vertical scaling
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
789 ifactor = ((sh-1)<<14)/(dh-1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
790 ofstop = bestop - y;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
791
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
792 regs.besviscal = ifactor<<2;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
793
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
794 baseadrofs = ((ofstop*regs.besviscal)>>16)*regs.bespitch;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
795 regs.besa1org = (uint32_t) mga_src_base + baseadrofs;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
796 regs.besa2org = (uint32_t) mga_src_base + baseadrofs + 1*config->frame_size;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
797 regs.besb1org = (uint32_t) mga_src_base + baseadrofs + 2*config->frame_size;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
798 regs.besb2org = (uint32_t) mga_src_base + baseadrofs + 3*config->frame_size;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
799
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
800 if(config->fourcc==IMGFMT_YV12
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
801 ||config->fourcc==IMGFMT_IYUV
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
802 ||config->fourcc==IMGFMT_I420
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
803 ){
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
804 // planar YUV frames:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
805 if (is_g400)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
806 baseadrofs = (((ofstop*regs.besviscal)/4)>>16)*regs.bespitch;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
807 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
808 baseadrofs = (((ofstop*regs.besviscal)/2)>>16)*regs.bespitch;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
809
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
810 if(config->fourcc==IMGFMT_YV12){
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
811 regs.besa1corg = (uint32_t) mga_src_base + baseadrofs + regs.bespitch * sh ;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
812 regs.besa2corg = (uint32_t) mga_src_base + baseadrofs + 1*config->frame_size + regs.bespitch * sh;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
813 regs.besb1corg = (uint32_t) mga_src_base + baseadrofs + 2*config->frame_size + regs.bespitch * sh;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
814 regs.besb2corg = (uint32_t) mga_src_base + baseadrofs + 3*config->frame_size + regs.bespitch * sh;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
815 regs.besa1c3org = regs.besa1corg + ((regs.bespitch * sh) / 4);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
816 regs.besa2c3org = regs.besa2corg + ((regs.bespitch * sh) / 4);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
817 regs.besb1c3org = regs.besb1corg + ((regs.bespitch * sh) / 4);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
818 regs.besb2c3org = regs.besb2corg + ((regs.bespitch * sh) / 4);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
819 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
820 regs.besa1c3org = (uint32_t) mga_src_base + baseadrofs + regs.bespitch * sh ;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
821 regs.besa2c3org = (uint32_t) mga_src_base + baseadrofs + 1*config->frame_size + regs.bespitch * sh;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
822 regs.besb1c3org = (uint32_t) mga_src_base + baseadrofs + 2*config->frame_size + regs.bespitch * sh;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
823 regs.besb2c3org = (uint32_t) mga_src_base + baseadrofs + 3*config->frame_size + regs.bespitch * sh;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
824 regs.besa1corg = regs.besa1c3org + ((regs.bespitch * sh) / 4);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
825 regs.besa2corg = regs.besa2c3org + ((regs.bespitch * sh) / 4);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
826 regs.besb1corg = regs.besb1c3org + ((regs.bespitch * sh) / 4);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
827 regs.besb2corg = regs.besb2c3org + ((regs.bespitch * sh) / 4);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
828 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
829
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
830 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
831
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
832 weight = ofstop * (regs.besviscal >> 2);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
833 weights = weight < 0 ? 1 : 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
834 regs.besv2wght = regs.besv1wght = (weights << 16) + ((weight & 0x3FFF) << 2);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
835 regs.besv2srclst = regs.besv1srclst = sh - 1 - (((ofstop * regs.besviscal) >> 16) & 0x03FF);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
836
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
837 #ifdef CRTC2
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
838 // pridat hlavni registry - tj. casovani ...
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
839
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
840
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
841 switch(config->fourcc){
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
842 case IMGFMT_YV12:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
843 case IMGFMT_I420:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
844 case IMGFMT_IYUV:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
845 cregs.c2ctl = 1 // CRTC2 enabled
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
846 + (1<<1) // external clock
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
847 + (0<<2) // external clock
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
848 + (1<<3) // pixel clock enable - not needed ???
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
849 + (0<<4) // high prioryty req
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
850 + (1<<5) // high prioryty req
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
851 + (0<<6) // high prioryty req
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
852 + (1<<8) // high prioryty req max
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
853 + (0<<9) // high prioryty req max
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
854 + (0<<10) // high prioryty req max
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
855 + (0<<20) // CRTC1 to DAC
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
856 + (1<<21) // 420 mode
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
857 + (1<<22) // 420 mode
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
858 + (1<<23) // 420 mode
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
859 + (0<<24) // single chroma line for 420 mode - need to be corrected
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
860 + (0<<25) /*/ interlace mode - need to be corrected*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
861 + (0<<26) // field legth polariry
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
862 + (0<<27) // field identification polariry
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
863 + (1<<28) // VIDRST detection mode
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
864 + (0<<29) // VIDRST detection mode
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
865 + (1<<30) // Horizontal counter preload
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
866 + (1<<31) // Vertical counter preload
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
867 ;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
868 cregs.c2datactl = 1 // disable dither - propably not needed, we are already in YUV mode
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
869 + (1<<1) // Y filter enable
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
870 + (1<<2) // CbCr filter enable
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
871 + (0<<3) // subpicture enable (disabled)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
872 + (0<<4) // NTSC enable (disabled - PAL)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
873 + (0<<5) // C2 static subpicture enable (disabled)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
874 + (0<<6) // C2 subpicture offset division (disabled)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
875 + (0<<7) // 422 subformat selection !
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
876 /* + (0<<8) // 15 bpp high alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
877 + (0<<9) // 15 bpp high alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
878 + (0<<10) // 15 bpp high alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
879 + (0<<11) // 15 bpp high alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
880 + (0<<12) // 15 bpp high alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
881 + (0<<13) // 15 bpp high alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
882 + (0<<14) // 15 bpp high alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
883 + (0<<15) // 15 bpp high alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
884 + (0<<16) // 15 bpp low alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
885 + (0<<17) // 15 bpp low alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
886 + (0<<18) // 15 bpp low alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
887 + (0<<19) // 15 bpp low alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
888 + (0<<20) // 15 bpp low alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
889 + (0<<21) // 15 bpp low alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
890 + (0<<22) // 15 bpp low alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
891 + (0<<23) // 15 bpp low alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
892 + (0<<24) // static subpicture key
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
893 + (0<<25) // static subpicture key
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
894 + (0<<26) // static subpicture key
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
895 + (0<<27) // static subpicture key
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
896 + (0<<28) // static subpicture key
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
897 */ ;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
898 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
899
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
900 case IMGFMT_YUY2:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
901 cregs.c2ctl = 1 // CRTC2 enabled
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
902 + (1<<1) // external clock
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
903 + (0<<2) // external clock
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
904 + (1<<3) // pixel clock enable - not needed ???
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
905 + (0<<4) // high prioryty req - acc to spec
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
906 + (1<<5) // high prioryty req
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
907 + (0<<6) // high prioryty req
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
908 // 7 reserved
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
909 + (1<<8) // high prioryty req max
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
910 + (0<<9) // high prioryty req max
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
911 + (0<<10) // high prioryty req max
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
912 // 11-19 reserved
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
913 + (0<<20) // CRTC1 to DAC
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
914 + (1<<21) // 422 mode
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
915 + (0<<22) // 422 mode
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
916 + (1<<23) // 422 mode
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
917 + (0<<24) // single chroma line for 420 mode - need to be corrected
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
918 + (0<<25) /*/ interlace mode - need to be corrected*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
919 + (0<<26) // field legth polariry
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
920 + (0<<27) // field identification polariry
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
921 + (1<<28) // VIDRST detection mode
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
922 + (0<<29) // VIDRST detection mode
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
923 + (1<<30) // Horizontal counter preload
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
924 + (1<<31) // Vertical counter preload
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
925 ;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
926 cregs.c2datactl = 1 // disable dither - propably not needed, we are already in YUV mode
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
927 + (1<<1) // Y filter enable
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
928 + (1<<2) // CbCr filter enable
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
929 + (0<<3) // subpicture enable (disabled)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
930 + (0<<4) // NTSC enable (disabled - PAL)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
931 + (0<<5) // C2 static subpicture enable (disabled)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
932 + (0<<6) // C2 subpicture offset division (disabled)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
933 + (0<<7) // 422 subformat selection !
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
934 /* + (0<<8) // 15 bpp high alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
935 + (0<<9) // 15 bpp high alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
936 + (0<<10) // 15 bpp high alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
937 + (0<<11) // 15 bpp high alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
938 + (0<<12) // 15 bpp high alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
939 + (0<<13) // 15 bpp high alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
940 + (0<<14) // 15 bpp high alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
941 + (0<<15) // 15 bpp high alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
942 + (0<<16) // 15 bpp low alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
943 + (0<<17) // 15 bpp low alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
944 + (0<<18) // 15 bpp low alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
945 + (0<<19) // 15 bpp low alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
946 + (0<<20) // 15 bpp low alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
947 + (0<<21) // 15 bpp low alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
948 + (0<<22) // 15 bpp low alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
949 + (0<<23) // 15 bpp low alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
950 + (0<<24) // static subpicture key
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
951 + (0<<25) // static subpicture key
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
952 + (0<<26) // static subpicture key
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
953 + (0<<27) // static subpicture key
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
954 + (0<<28) // static subpicture key
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
955 */ ;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
956 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
957
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
958 case IMGFMT_UYVY:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
959 cregs.c2ctl = 1 // CRTC2 enabled
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
960 + (1<<1) // external clock
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
961 + (0<<2) // external clock
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
962 + (1<<3) // pixel clock enable - not needed ???
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
963 + (0<<4) // high prioryty req
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
964 + (1<<5) // high prioryty req
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
965 + (0<<6) // high prioryty req
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
966 + (1<<8) // high prioryty req max
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
967 + (0<<9) // high prioryty req max
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
968 + (0<<10) // high prioryty req max
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
969 + (0<<20) // CRTC1 to DAC
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
970 + (1<<21) // 422 mode
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
971 + (0<<22) // 422 mode
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
972 + (1<<23) // 422 mode
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
973 + (1<<24) // single chroma line for 420 mode - need to be corrected
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
974 + (1<<25) /*/ interlace mode - need to be corrected*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
975 + (0<<26) // field legth polariry
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
976 + (0<<27) // field identification polariry
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
977 + (1<<28) // VIDRST detection mode
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
978 + (0<<29) // VIDRST detection mode
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
979 + (1<<30) // Horizontal counter preload
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
980 + (1<<31) // Vertical counter preload
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
981 ;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
982 cregs.c2datactl = 0 // enable dither - propably not needed, we are already in YUV mode
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
983 + (1<<1) // Y filter enable
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
984 + (1<<2) // CbCr filter enable
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
985 + (0<<3) // subpicture enable (disabled)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
986 + (0<<4) // NTSC enable (disabled - PAL)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
987 + (0<<5) // C2 static subpicture enable (disabled)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
988 + (0<<6) // C2 subpicture offset division (disabled)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
989 + (1<<7) // 422 subformat selection !
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
990 /* + (0<<8) // 15 bpp high alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
991 + (0<<9) // 15 bpp high alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
992 + (0<<10) // 15 bpp high alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
993 + (0<<11) // 15 bpp high alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
994 + (0<<12) // 15 bpp high alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
995 + (0<<13) // 15 bpp high alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
996 + (0<<14) // 15 bpp high alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
997 + (0<<15) // 15 bpp high alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
998 + (0<<16) // 15 bpp low alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
999 + (0<<17) // 15 bpp low alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1000 + (0<<18) // 15 bpp low alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1001 + (0<<19) // 15 bpp low alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1002 + (0<<20) // 15 bpp low alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1003 + (0<<21) // 15 bpp low alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1004 + (0<<22) // 15 bpp low alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1005 + (0<<23) // 15 bpp low alpha
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1006 + (0<<24) // static subpicture key
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1007 + (0<<25) // static subpicture key
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1008 + (0<<26) // static subpicture key
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1009 + (0<<27) // static subpicture key
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1010 + (0<<28) // static subpicture key
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1011 */ ;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1012 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1013 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1014
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1015 cregs.c2hparam=((hdispend - 8) << 16) | (htotal - 8);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1016 cregs.c2hsync=((hsyncend - 8) << 16) | (hsyncstart - 8);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1017
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1018 cregs.c2misc=0 // CRTCV2 656 togg f0
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1019 +(0<<1) // CRTCV2 656 togg f0
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1020 +(0<<2) // CRTCV2 656 togg f0
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1021 +(0<<4) // CRTCV2 656 togg f1
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1022 +(0<<5) // CRTCV2 656 togg f1
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1023 +(0<<6) // CRTCV2 656 togg f1
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1024 +(0<<8) // Hsync active high
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1025 +(0<<9) // Vsync active high
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1026 // 16-27 c2vlinecomp - nevim co tam dat
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1027 ;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1028 cregs.c2offset=(regs.bespitch << 1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1029
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1030 cregs.c2pl2startadd0=regs.besa1corg;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1031 cregs.c2pl3startadd0=regs.besa1c3org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1032
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1033 cregs.c2preload=(vsyncstart << 16) | (hsyncstart); // from
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1034
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1035 cregs.c2spicstartadd0=0; // not used
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1036
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1037 cregs.c2startadd0=regs.besa1org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1038
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1039 cregs.c2subpiclut=0; //not used
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1040
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1041 cregs.c2vparam=((vdispend - 1) << 16) | (vtotal - 1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1042 cregs.c2vsync=((vsyncend - 1) << 16) | (vsyncstart - 1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1043 #endif /* CRTC2 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1044
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1045 mga_vid_write_regs(0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1046 return(0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1047 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1048
22857
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1049 static int mga_playback_on(void)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1050 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1051 if (mga_verbose) printf("[mga] playback on\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1052
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1053 vid_src_ready = 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1054 if(vid_overlay_on)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1055 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1056 regs.besctl |= 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1057 mga_vid_write_regs(0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1058 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1059 #ifdef MGA_ALLOW_IRQ
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1060 if (mga_irq != -1)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1061 enable_irq();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1062 #endif
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1063 mga_next_frame=0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1064
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1065 return(0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1066 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1067
22857
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1068 static int mga_playback_off(void)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1069 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1070 if (mga_verbose) printf("[mga] playback off\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1071
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1072 vid_src_ready = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1073 #ifdef MGA_ALLOW_IRQ
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1074 if (mga_irq != -1)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1075 disable_irq();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1076 #endif
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1077 regs.besctl &= ~1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1078 regs.besglobctl &= ~(1<<6); /* UYVY format selected */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1079 mga_vid_write_regs(0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1080
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1081 return(0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1082 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1083
22857
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1084 static int mga_probe(int verbose,int force)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1085 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1086 pciinfo_t lst[MAX_PCI_DEVICES];
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1087 unsigned int i, num_pci;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1088 int err;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1089
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1090 if (verbose) printf("[mga] probe\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1091
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1092 mga_verbose = verbose;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1093
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1094 is_g400 = -1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1095
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1096 err = pci_scan(lst, &num_pci);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1097 if (err)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1098 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1099 printf("[mga] Error occurred during pci scan: %s\n", strerror(err));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1100 return(err);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1101 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1102
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1103 if (mga_verbose)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1104 printf("[mga] found %d pci devices\n", num_pci);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1105
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1106 for (i = 0; i < num_pci; i++)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1107 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1108 if (mga_verbose > 1)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1109 printf("[mga] pci[%d] vendor: %d device: %d\n",
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1110 i, lst[i].vendor, lst[i].device);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1111 if (lst[i].vendor == VENDOR_MATROX)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1112 {
23167
2ab3eac7f6da synced with upstream vidix, prevented some drivers to work on some configs/archs
ben
parents: 23054
diff changeset
1113 #if 0
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1114 if ((lst[i].command & PCI_COMMAND_IO) == 0)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1115 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1116 printf("[mga] Device is disabled, ignoring\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1117 continue;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1118 }
23167
2ab3eac7f6da synced with upstream vidix, prevented some drivers to work on some configs/archs
ben
parents: 23054
diff changeset
1119 #endif
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1120 switch(lst[i].device)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1121 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1122 case DEVICE_MATROX_MGA_G550_AGP:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1123 printf("[mga] Found MGA G550\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1124 is_g400 = 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1125 goto card_found;
22874
9a8f6901e888 updated pci ids list, fixed vidix drivers compilation and added nearly exhaustive pci ids for nvidia driver
ben
parents: 22858
diff changeset
1126 case DEVICE_MATROX_MGA_G400_G450:
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1127 printf("[mga] Found MGA G400/G450\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1128 is_g400 = 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1129 goto card_found;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1130 case DEVICE_MATROX_MGA_G200_AGP:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1131 printf("[mga] Found MGA G200 AGP\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1132 is_g400 = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1133 goto card_found;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1134 case DEVICE_MATROX_MGA_G200:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1135 printf("[mga] Found MGA G200 PCI\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1136 is_g400 = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1137 goto card_found;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1138 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1139 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1140 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1141
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1142 if (is_g400 == -1)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1143 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1144 if (verbose) printf("[mga] Can't find chip\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1145 return(ENXIO);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1146 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1147
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1148 card_found:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1149 probed = 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1150 memcpy(&pci_info, &lst[i], sizeof(pciinfo_t));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1151
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1152 mga_cap.device_id = pci_info.device; /* set device id in capabilites */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1153
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1154 return(0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1155 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1156
22857
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1157 static int mga_init(void)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1158 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1159 unsigned int card_option = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1160 int err;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1161
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1162 if (mga_verbose) printf("[mga] init\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1163
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1164 mga_vid_in_use = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1165
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1166 printf("Matrox MGA G200/G400/G450 YUV Video interface v2.01 (c) Aaron Holtzman & A'rpi\n");
25504
48441c610249 typo in preprocessor condition
diego
parents: 23167
diff changeset
1167 #ifdef CRTC2
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1168 printf("Driver compiled with TV-out (second-head) support\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1169 #endif
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1170
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1171 if (!probed)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1172 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1173 printf("[mga] driver was not probed but is being initializing\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1174 return(EINTR);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1175 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1176
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1177 #ifdef MGA_PCICONFIG_MEMDETECT
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1178 pci_config_read(pci_info.bus, pci_info.card, pci_info.func,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1179 0x40, 4, &card_option);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1180 if (mga_verbose > 1) printf("[mga] OPTION word: 0x%08X mem: 0x%02X %s\n", card_option,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1181 (card_option>>10)&0x17, ((card_option>>14)&1)?"SGRAM":"SDRAM");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1182 #endif
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1183
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1184 if (mga_ram_size)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1185 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1186 printf("[mga] RAMSIZE forced to %d MB\n", mga_ram_size);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1187 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1188 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1189 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1190 #ifdef MGA_MEMORY_SIZE
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1191 mga_ram_size = MGA_MEMORY_SIZE;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1192 printf("[mga] hard-coded RAMSIZE is %d MB\n", (unsigned int) mga_ram_size);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1193 #else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1194 if (is_g400)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1195 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1196 switch((card_option>>10)&0x17)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1197 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1198 // SDRAM:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1199 case 0x00:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1200 case 0x04: mga_ram_size = 16; break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1201 case 0x03: mga_ram_size = 32; break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1202 // SGRAM:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1203 case 0x10:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1204 case 0x14: mga_ram_size = 32; break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1205 case 0x11:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1206 case 0x12: mga_ram_size = 16; break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1207 default:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1208 mga_ram_size = 16;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1209 printf("[mga] Couldn't detect RAMSIZE, assuming 16MB!\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1210 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1211 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1212 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1213 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1214 switch((card_option>>10)&0x17)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1215 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1216 default: mga_ram_size = 8;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1217 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1218 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1219
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1220 printf("[mga] detected RAMSIZE is %d MB\n", (unsigned int) mga_ram_size);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1221 #endif
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1222 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1223
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1224 if (mga_ram_size)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1225 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1226 if ((mga_ram_size < 4) || (mga_ram_size > 64))
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1227 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1228 printf("[mga] invalid RAMSIZE: %d MB\n", mga_ram_size);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1229 return(EINVAL);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1230 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1231 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1232
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1233 if (mga_verbose > 1) printf("[mga] hardware addresses: mmio: %#x, framebuffer: %#x\n",
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1234 pci_info.base1, pci_info.base0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1235
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1236 mga_mmio_base = map_phys_mem(pci_info.base1,0x4000);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1237 mga_mem_base = map_phys_mem(pci_info.base0,mga_ram_size*1024*1024);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1238
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1239 if (mga_verbose > 1) printf("[mga] MMIO at %p, IRQ: %d, framebuffer: %p\n",
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1240 mga_mmio_base, mga_irq, mga_mem_base);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1241 err = mtrr_set_type(pci_info.base0,mga_ram_size*1024*1024,MTRR_TYPE_WRCOMB);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1242 if(!err) printf("[mga] Set write-combining type of video memory\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1243 #ifdef MGA_ALLOW_IRQ
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1244 if (mga_irq != -1)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1245 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1246 int tmp = request_irq(mga_irq, mga_handle_irq, SA_INTERRUPT | SA_SHIRQ, "Syncfb Time Base", &mga_irq);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1247 if (tmp)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1248 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1249 printf("syncfb (mga): cannot register irq %d (Err: %d)\n", mga_irq, tmp);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1250 mga_irq=-1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1251 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1252 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1253 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1254 printf("syncfb (mga): registered irq %d\n", mga_irq);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1255 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1256 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1257 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1258 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1259 printf("syncfb (mga): No valid irq was found\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1260 mga_irq=-1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1261 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1262 #else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1263 printf("syncfb (mga): IRQ disabled in mga_vid.c\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1264 mga_irq=-1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1265 #endif
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1266
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1267 return(0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1268 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1269
22857
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1270 static void mga_destroy(void)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1271 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1272 if (mga_verbose) printf("[mga] destroy\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1273
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1274 /* FIXME turn off BES */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1275 vid_src_ready = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1276 regs.besctl &= ~1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1277 regs.besglobctl &= ~(1<<6); // UYVY format selected
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1278 mga_vid_write_regs(1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1279 mga_vid_in_use = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1280
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1281 #ifdef MGA_ALLOW_IRQ
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1282 if (mga_irq != -1)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1283 free_irq(mga_irq, &mga_irq);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1284 #endif
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1285
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1286 if (mga_mmio_base)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1287 unmap_phys_mem(mga_mmio_base, 0x4000);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1288 if (mga_mem_base)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1289 unmap_phys_mem(mga_mem_base, mga_ram_size);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1290 return;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1291 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1292
22857
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1293 static int mga_query_fourcc(vidix_fourcc_t *to)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1294 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1295 if (mga_verbose) printf("[mga] query fourcc (%x)\n", to->fourcc);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1296
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1297 switch(to->fourcc)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1298 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1299 case IMGFMT_YV12:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1300 case IMGFMT_IYUV:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1301 case IMGFMT_I420:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1302 case IMGFMT_YUY2:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1303 case IMGFMT_UYVY:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1304 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1305 default:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1306 to->depth = to->flags = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1307 return(ENOTSUP);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1308 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1309
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1310 to->depth = VID_DEPTH_12BPP |
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1311 VID_DEPTH_15BPP | VID_DEPTH_16BPP |
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1312 VID_DEPTH_24BPP | VID_DEPTH_32BPP;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1313 to->flags = VID_CAP_EXPAND | VID_CAP_SHRINK | VID_CAP_COLORKEY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1314 return(0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1315 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1316
22857
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1317 static int mga_get_caps(vidix_capability_t *to)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1318 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1319 memcpy(to, &mga_cap, sizeof(vidix_capability_t));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1320 return(0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1321 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1322
22857
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1323 static int mga_get_gkeys(vidix_grkey_t *grkey)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1324 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1325 memcpy(grkey, &mga_grkey, sizeof(vidix_grkey_t));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1326 return(0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1327 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1328
22857
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1329 static int mga_set_gkeys(const vidix_grkey_t *grkey)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1330 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1331 memcpy(&mga_grkey, grkey, sizeof(vidix_grkey_t));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1332 mga_vid_write_regs(0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1333 return(0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1334 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1335
22857
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1336 static int mga_set_eq( const vidix_video_eq_t * eq)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1337 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1338 /* contrast and brightness control isn't supported on G200 - alex */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1339 if (!is_g400)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1340 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1341 if (mga_verbose) printf("[mga] equalizer isn't supported with G200\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1342 return(ENOTSUP);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1343 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1344
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1345 // only brightness&contrast are supported:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1346 if(!(eq->cap & (VEQ_CAP_BRIGHTNESS|VEQ_CAP_CONTRAST)))
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1347 return(ENOTSUP);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1348
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1349 //regs.beslumactl = readl(mga_mmio_base + BESLUMACTL);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1350 if (eq->cap & VEQ_CAP_BRIGHTNESS) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1351 regs.beslumactl &= 0xFFFF;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1352 regs.beslumactl |= (eq->brightness*255/2000)<<16;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1353 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1354 if (eq->cap & VEQ_CAP_CONTRAST) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1355 regs.beslumactl &= 0xFFFF0000;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1356 regs.beslumactl |= (128+eq->contrast*255/2000)&0xFFFF;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1357 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1358 writel(regs.beslumactl,mga_mmio_base + BESLUMACTL);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1359
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1360 return(0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1361 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1362
22857
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1363 static int mga_get_eq( vidix_video_eq_t * eq)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1364 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1365 /* contrast and brightness control isn't supported on G200 - alex */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1366 if (!is_g400)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1367 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1368 if (mga_verbose) printf("[mga] equalizer isn't supported with G200\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1369 return(ENOTSUP);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1370 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1371
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1372 eq->brightness = (signed short int)(regs.beslumactl >> 16) * 1000 / 128;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1373 eq->contrast = (signed short int)(regs.beslumactl & 0xFFFF) * 1000 / 128 - 1000;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1374 eq->cap = VEQ_CAP_BRIGHTNESS | VEQ_CAP_CONTRAST;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1375
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1376 printf("MGA GET_EQ: br=%d c=%d \n",eq->brightness,eq->contrast);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1377
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1378 return(0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1379 }
22857
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1380
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1381 #ifndef CRTC2
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1382 VDXDriver mga_drv = {
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1383 "mga",
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1384 #else
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1385 VDXDriver mga_crtc2_drv = {
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1386 "mga_crtc2",
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1387 #endif
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1388 NULL,
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1389
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1390 .probe = mga_probe,
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1391 .get_caps = mga_get_caps,
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1392 .query_fourcc = mga_query_fourcc,
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1393 .init = mga_init,
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1394 .destroy = mga_destroy,
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1395 .config_playback = mga_config_playback,
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1396 .playback_on = mga_playback_on,
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1397 .playback_off = mga_playback_off,
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1398 .frame_sel = mga_frame_select,
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1399 .get_eq = mga_get_eq,
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1400 .set_eq = mga_set_eq,
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1401 .get_gkey = mga_get_gkeys,
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1402 .set_gkey = mga_set_gkeys,
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1403 };