annotate vidix/mga_vid.c @ 28615:15e7abed4291

Use the same code to convert fps in float to fraction as used in mencoder, it ensures all the common frame rates work right. If this causes issues, it should be changed in the same way in mencoder.c
author reimar
date Wed, 18 Feb 2009 16:49:12 +0000
parents 7baa7292f575
children 0f1b5b68af32
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.
26718
051b2632f121 consistency cosmetics: Move some parts of file headers around; typo fixes.
diego
parents: 25504
diff changeset
3 *
23046
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
4 * Copyright (C) 2002 Alex Beregszaszi
26718
051b2632f121 consistency cosmetics: Move some parts of file headers around; typo fixes.
diego
parents: 25504
diff changeset
5 * Original sources from Aaron Holtzman (C) 1999.
051b2632f121 consistency cosmetics: Move some parts of file headers around; typo fixes.
diego
parents: 25504
diff changeset
6 * module skeleton based on gutted agpgart module by Jeff Hartmann
051b2632f121 consistency cosmetics: Move some parts of file headers around; typo fixes.
diego
parents: 25504
diff changeset
7 * <slicer@ionet.net>
051b2632f121 consistency cosmetics: Move some parts of file headers around; typo fixes.
diego
parents: 25504
diff changeset
8 * YUY2 support and double buffering added by A'rpi/ESP-team
051b2632f121 consistency cosmetics: Move some parts of file headers around; typo fixes.
diego
parents: 25504
diff changeset
9 * brightness/contrast support by Nick Kurshev/Dariush Pietrzak (eyck)
23046
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
10 *
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
11 * 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
12 *
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
13 * 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
14 * 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
15 * 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
16 * (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
17 *
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22901
diff changeset
18 * 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
19 * 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
20 * 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
21 * GNU General Public License for more details.
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
22 *
26719
3abd1629658b Use standard license headers.
diego
parents: 26718
diff changeset
23 * You should have received a copy of the GNU General Public License along
3abd1629658b Use standard license headers.
diego
parents: 26718
diff changeset
24 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
3abd1629658b Use standard license headers.
diego
parents: 26718
diff changeset
25 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
26718
051b2632f121 consistency cosmetics: Move some parts of file headers around; typo fixes.
diego
parents: 25504
diff changeset
26 */
051b2632f121 consistency cosmetics: Move some parts of file headers around; typo fixes.
diego
parents: 25504
diff changeset
27
051b2632f121 consistency cosmetics: Move some parts of file headers around; typo fixes.
diego
parents: 25504
diff changeset
28 /* TODO:
23046
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 */
28363
7baa7292f575 Fix warnings about undefined preprocessor directives.
diego
parents: 28232
diff changeset
41 #define MGA_ALLOW_IRQ 0
22850
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"
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
57 #include "fourcc.h"
22901
a7605669b114 renamed libdha.[hc] to dha.[hc]
ben
parents: 22900
diff changeset
58 #include "dha.h"
22900
a9e111b88c4a merged libdha and libvidix, moved all files from libdha to vidix directory
ben
parents: 22874
diff changeset
59 #include "pci_ids.h"
a9e111b88c4a merged libdha and libvidix, moved all files from libdha to vidix directory
ben
parents: 22874
diff changeset
60 #include "pci_names.h"
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
61
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
62 #ifdef __MINGW32__
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
63 #define ENOTSUP 134
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
64 #endif
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
65
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
66 #if !defined(ENOTSUP) && defined(EOPNOTSUPP)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
67 #define ENOTSUP EOPNOTSUPP
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
68 #endif
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
69
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
70 /* from radeon_vid */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
71 #define GETREG(TYPE,PTR,OFFZ) (*((volatile TYPE*)((PTR)+(OFFZ))))
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
72 #define SETREG(TYPE,PTR,OFFZ,VAL) (*((volatile TYPE*)((PTR)+(OFFZ))))=VAL
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
73
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
74 #define readb(addr) GETREG(uint8_t,(uint32_t)(addr),0)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
75 #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
76 #define readl(addr) GETREG(uint32_t,(uint32_t)(addr),0)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
77 #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
78
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
79 static int mga_verbose = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
80
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
81 /* for device detection */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
82 static int probed = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
83 static pciinfo_t pci_info;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
84
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
85 /* internal booleans */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
86 static int mga_vid_in_use = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
87 static int is_g400 = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
88 static int vid_src_ready = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
89 static int vid_overlay_on = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
90
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
91 /* mapped physical addresses */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
92 static uint8_t *mga_mmio_base = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
93 static uint8_t *mga_mem_base = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
94
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
95 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
96
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
97 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
98
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
99 /* Graphic keys */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
100 static vidix_grkey_t mga_grkey;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
101
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
102 static int colkey_saved = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
103 static int colkey_on = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
104 static unsigned char colkey_color[4];
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
105 static unsigned char colkey_mask[4];
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
106
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
107 /* for IRQ */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
108 static int mga_irq = -1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
109
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
110 static int mga_next_frame = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
111
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
112 static vidix_capability_t mga_cap =
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
113 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
114 "Matrox MGA G200/G4x0/G5x0 YUV Video",
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
115 "Aaron Holtzman, Arpad Gereoffy, Alex Beregszaszi, Nick Kurshev",
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
116 TYPE_OUTPUT,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
117 { 0, 0, 0, 0 },
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
118 2048,
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 4,
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 -1,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
123 FLAG_UPSCALER | FLAG_DOWNSCALER | FLAG_EQUALIZER,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
124 VENDOR_MATROX,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
125 -1, /* will be set in vixProbe */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
126 { 0, 0, 0, 0}
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
127 };
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 /* MATROX BES registers */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
130 typedef struct bes_registers_s
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
131 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
132 //BES Control
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
133 uint32_t besctl;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
134 //BES Global control
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
135 uint32_t besglobctl;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
136 //Luma control (brightness and contrast)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
137 uint32_t beslumactl;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
138 //Line pitch
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
139 uint32_t bespitch;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
140
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
141 //Buffer A-1 Chroma 3 plane org
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
142 uint32_t besa1c3org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
143 //Buffer A-1 Chroma org
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
144 uint32_t besa1corg;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
145 //Buffer A-1 Luma org
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
146 uint32_t besa1org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
147
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
148 //Buffer A-2 Chroma 3 plane org
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
149 uint32_t besa2c3org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
150 //Buffer A-2 Chroma org
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
151 uint32_t besa2corg;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
152 //Buffer A-2 Luma org
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
153 uint32_t besa2org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
154
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
155 //Buffer B-1 Chroma 3 plane org
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
156 uint32_t besb1c3org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
157 //Buffer B-1 Chroma org
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
158 uint32_t besb1corg;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
159 //Buffer B-1 Luma org
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
160 uint32_t besb1org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
161
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
162 //Buffer B-2 Chroma 3 plane org
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
163 uint32_t besb2c3org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
164 //Buffer B-2 Chroma org
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
165 uint32_t besb2corg;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
166 //Buffer B-2 Luma org
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
167 uint32_t besb2org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
168
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
169 //BES Horizontal coord
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
170 uint32_t beshcoord;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
171 //BES Horizontal inverse scaling [5.14]
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
172 uint32_t beshiscal;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
173 //BES Horizontal source start [10.14] (for scaling)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
174 uint32_t beshsrcst;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
175 //BES Horizontal source ending [10.14] (for scaling)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
176 uint32_t beshsrcend;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
177 //BES Horizontal source last
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
178 uint32_t beshsrclst;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
179
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 //BES Vertical coord
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
182 uint32_t besvcoord;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
183 //BES Vertical inverse scaling [5.14]
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
184 uint32_t besviscal;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
185 //BES Field 1 vertical source last position
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
186 uint32_t besv1srclst;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
187 //BES Field 1 weight start
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
188 uint32_t besv1wght;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
189 //BES Field 2 vertical source last position
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
190 uint32_t besv2srclst;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
191 //BES Field 2 weight start
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
192 uint32_t besv2wght;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
193
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
194 } bes_registers_t;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
195 static bes_registers_t regs;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
196
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
197 #ifdef CRTC2
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
198 typedef struct crtc2_registers_s
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
199 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
200 uint32_t c2ctl;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
201 uint32_t c2datactl;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
202 uint32_t c2misc;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
203 uint32_t c2hparam;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
204 uint32_t c2hsync;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
205 uint32_t c2offset;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
206 uint32_t c2pl2startadd0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
207 uint32_t c2pl2startadd1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
208 uint32_t c2pl3startadd0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
209 uint32_t c2pl3startadd1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
210 uint32_t c2preload;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
211 uint32_t c2spicstartadd0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
212 uint32_t c2spicstartadd1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
213 uint32_t c2startadd0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
214 uint32_t c2startadd1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
215 uint32_t c2subpiclut;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
216 uint32_t c2vcount;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
217 uint32_t c2vparam;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
218 uint32_t c2vsync;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
219 } crtc2_registers_t;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
220 static crtc2_registers_t cregs;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
221 #endif
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
222
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
223 //All register offsets are converted to word aligned offsets (32 bit)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
224 //because we want all our register accesses to be 32 bits
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
225 #define VCOUNT 0x1e20
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
226
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
227 #define PALWTADD 0x3c00 // Index register for X_DATAREG port
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
228 #define X_DATAREG 0x3c0a
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
229
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
230 #define XMULCTRL 0x19
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
231 #define BPP_8 0x00
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
232 #define BPP_15 0x01
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
233 #define BPP_16 0x02
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
234 #define BPP_24 0x03
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
235 #define BPP_32_DIR 0x04
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
236 #define BPP_32_PAL 0x07
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
237
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
238 #define XCOLMSK 0x40
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
239 #define X_COLKEY 0x42
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
240 #define XKEYOPMODE 0x51
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
241 #define XCOLMSK0RED 0x52
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
242 #define XCOLMSK0GREEN 0x53
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
243 #define XCOLMSK0BLUE 0x54
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
244 #define XCOLKEY0RED 0x55
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
245 #define XCOLKEY0GREEN 0x56
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
246 #define XCOLKEY0BLUE 0x57
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
247
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
248 #ifdef CRTC2
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
249 /*CRTC2 registers*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
250 #define XMISCCTRL 0x1e
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
251 #define C2CTL 0x3c10
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
252 #define C2DATACTL 0x3c4c
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
253 #define C2MISC 0x3c44
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
254 #define C2HPARAM 0x3c14
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
255 #define C2HSYNC 0x3c18
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
256 #define C2OFFSET 0x3c40
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
257 #define C2PL2STARTADD0 0x3c30 // like BESA1CORG
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
258 #define C2PL2STARTADD1 0x3c34 // like BESA2CORG
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
259 #define C2PL3STARTADD0 0x3c38 // like BESA1C3ORG
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
260 #define C2PL3STARTADD1 0x3c3c // like BESA2C3ORG
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
261 #define C2PRELOAD 0x3c24
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
262 #define C2SPICSTARTADD0 0x3c54
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
263 #define C2SPICSTARTADD1 0x3c58
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
264 #define C2STARTADD0 0x3c28 // like BESA1ORG
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
265 #define C2STARTADD1 0x3c2c // like BESA2ORG
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
266 #define C2SUBPICLUT 0x3c50
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
267 #define C2VCOUNT 0x3c48
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
268 #define C2VPARAM 0x3c1c
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
269 #define C2VSYNC 0x3c20
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
270 #endif /* CRTC2 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
271
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
272 // Backend Scaler registers
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
273 #define BESCTL 0x3d20
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
274 #define BESGLOBCTL 0x3dc0
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
275 #define BESLUMACTL 0x3d40
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
276 #define BESPITCH 0x3d24
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
277
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
278 #define BESA1C3ORG 0x3d60
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
279 #define BESA1CORG 0x3d10
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
280 #define BESA1ORG 0x3d00
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
281
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
282 #define BESA2C3ORG 0x3d64
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
283 #define BESA2CORG 0x3d14
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
284 #define BESA2ORG 0x3d04
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
285
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
286 #define BESB1C3ORG 0x3d68
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
287 #define BESB1CORG 0x3d18
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
288 #define BESB1ORG 0x3d08
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
289
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
290 #define BESB2C3ORG 0x3d6C
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
291 #define BESB2CORG 0x3d1C
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
292 #define BESB2ORG 0x3d0C
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
293
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
294 #define BESHCOORD 0x3d28
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
295 #define BESHISCAL 0x3d30
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
296 #define BESHSRCEND 0x3d3C
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
297 #define BESHSRCLST 0x3d50
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
298 #define BESHSRCST 0x3d38
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
299 #define BESV1WGHT 0x3d48
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
300 #define BESV2WGHT 0x3d4c
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
301 #define BESV1SRCLST 0x3d54
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
302 #define BESV2SRCLST 0x3d58
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
303 #define BESVISCAL 0x3d34
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
304 #define BESVCOORD 0x3d2c
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
305 #define BESSTATUS 0x3dc4
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
306
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
307 #define CRTCX 0x1fd4
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
308 #define CRTCD 0x1fd5
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
309 #define IEN 0x1e1c
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
310 #define ICLEAR 0x1e18
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
311 #define STATUS 0x1e14
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
312
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 #ifdef CRTC2
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
315 static void crtc2_frame_sel(int frame)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
316 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
317 switch(frame) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
318 case 0:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
319 cregs.c2pl2startadd0=regs.besa1corg;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
320 cregs.c2pl3startadd0=regs.besa1c3org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
321 cregs.c2startadd0=regs.besa1org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
322 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
323 case 1:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
324 cregs.c2pl2startadd0=regs.besa2corg;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
325 cregs.c2pl3startadd0=regs.besa2c3org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
326 cregs.c2startadd0=regs.besa2org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
327 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
328 case 2:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
329 cregs.c2pl2startadd0=regs.besb1corg;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
330 cregs.c2pl3startadd0=regs.besb1c3org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
331 cregs.c2startadd0=regs.besb1org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
332 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
333 case 3:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
334 cregs.c2pl2startadd0=regs.besb2corg;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
335 cregs.c2pl3startadd0=regs.besb2c3org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
336 cregs.c2startadd0=regs.besb2org;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
337 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
338 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
339 writel(cregs.c2startadd0, mga_mmio_base + C2STARTADD0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
340 writel(cregs.c2pl2startadd0, mga_mmio_base + C2PL2STARTADD0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
341 writel(cregs.c2pl3startadd0, mga_mmio_base + C2PL3STARTADD0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
342 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
343 #endif
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
344
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
345 static int mga_frame_select(unsigned int frame)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
346 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
347 mga_next_frame = frame;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
348 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
349 #if MGA_ALLOW_IRQ
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
350 if (mga_irq == -1)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
351 #endif
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
352 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
353 //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
354 //one register (and it doesn't seem to be double buffered)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
355 regs.besctl = (regs.besctl & ~0x07000000) + (mga_next_frame << 25);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
356 writel( regs.besctl, mga_mmio_base + BESCTL );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
357
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
358 // writel( regs.besglobctl + ((readl(mga_mmio_base + VCOUNT)+2)<<16),
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
359 writel( regs.besglobctl + (MGA_VSYNC_POS<<16),
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
360 mga_mmio_base + BESGLOBCTL);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
361 #ifdef CRTC2
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
362 crtc2_frame_sel(mga_next_frame);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
363 #endif
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
364 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
365
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26719
diff changeset
366 return 0;
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
367 }
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 static void mga_vid_write_regs(int restore)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
371 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
372 //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
373 writel( (readl(mga_mmio_base + VCOUNT)-1)<<16,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
374 mga_mmio_base + BESGLOBCTL);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
375
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
376 // color or coordinate keying
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
377
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
378 if(restore && colkey_saved){
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
379 // restore it
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
380 colkey_saved=0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
381
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
382 // Set color key registers:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
383 writeb( XKEYOPMODE, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
384 writeb( colkey_on, mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
385
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
386 writeb( XCOLKEY0RED, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
387 writeb( colkey_color[0], mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
388 writeb( XCOLKEY0GREEN, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
389 writeb( colkey_color[1], mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
390 writeb( XCOLKEY0BLUE, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
391 writeb( colkey_color[2], mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
392 writeb( X_COLKEY, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
393 writeb( colkey_color[3], mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
394
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
395 writeb( XCOLMSK0RED, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
396 writeb( colkey_mask[0], mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
397 writeb( XCOLMSK0GREEN, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
398 writeb( colkey_mask[1], mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
399 writeb( XCOLMSK0BLUE, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
400 writeb( colkey_mask[2], mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
401 writeb( XCOLMSK, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
402 writeb( colkey_mask[3], mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
403
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
404 } else if(!colkey_saved){
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
405 // save it
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
406 colkey_saved=1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
407 // Get color key registers:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
408 writeb( XKEYOPMODE, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
409 colkey_on=(unsigned char)readb(mga_mmio_base + X_DATAREG) & 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
410
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
411 writeb( XCOLKEY0RED, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
412 colkey_color[0]=(unsigned char)readb(mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
413 writeb( XCOLKEY0GREEN, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
414 colkey_color[1]=(unsigned char)readb(mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
415 writeb( XCOLKEY0BLUE, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
416 colkey_color[2]=(unsigned char)readb(mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
417 writeb( X_COLKEY, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
418 colkey_color[3]=(unsigned char)readb(mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
419
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
420 writeb( XCOLMSK0RED, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
421 colkey_mask[0]=(unsigned char)readb(mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
422 writeb( XCOLMSK0GREEN, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
423 colkey_mask[1]=(unsigned char)readb(mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
424 writeb( XCOLMSK0BLUE, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
425 colkey_mask[2]=(unsigned char)readb(mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
426 writeb( XCOLMSK, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
427 colkey_mask[3]=(unsigned char)readb(mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
428 }
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 if(!restore){
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
431 writeb( XKEYOPMODE, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
432 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
433 if ( mga_grkey.ckey.op == CKEY_TRUE )
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
434 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
435 uint32_t r=0, g=0, b=0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
436
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
437 writeb( XMULCTRL, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
438 switch (readb (mga_mmio_base + X_DATAREG))
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
439 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
440 case BPP_8:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
441 /* Need to look up the color index, just using
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
442 color 0 for now. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
443 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
444
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
445 case BPP_15:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
446 r = mga_grkey.ckey.red >> 3;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
447 g = mga_grkey.ckey.green >> 3;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
448 b = mga_grkey.ckey.blue >> 3;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
449 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
450
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
451 case BPP_16:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
452 r = mga_grkey.ckey.red >> 3;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
453 g = mga_grkey.ckey.green >> 2;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
454 b = mga_grkey.ckey.blue >> 3;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
455 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
456
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
457 case BPP_24:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
458 case BPP_32_DIR:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
459 case BPP_32_PAL:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
460 r = mga_grkey.ckey.red;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
461 g = mga_grkey.ckey.green;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
462 b = mga_grkey.ckey.blue;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
463 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
464 }
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 // Enable colorkeying
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
467 writeb( XKEYOPMODE, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
468 writeb( 1, mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
469
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
470 // Disable color keying on alpha channel
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
471 writeb( XCOLMSK, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
472 writeb( 0x00, mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
473 writeb( X_COLKEY, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
474 writeb( 0x00, mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
475
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 // Set up color key registers
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
478 writeb( XCOLKEY0RED, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
479 writeb( r, mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
480 writeb( XCOLKEY0GREEN, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
481 writeb( g, mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
482 writeb( XCOLKEY0BLUE, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
483 writeb( b, mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
484
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
485 // Set up color key mask registers
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
486 writeb( XCOLMSK0RED, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
487 writeb( 0xff, mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
488 writeb( XCOLMSK0GREEN, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
489 writeb( 0xff, mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
490 writeb( XCOLMSK0BLUE, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
491 writeb( 0xff, mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
492 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
493 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
494 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
495 // Disable colorkeying
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
496 writeb( XKEYOPMODE, mga_mmio_base + PALWTADD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
497 writeb( 0, mga_mmio_base + X_DATAREG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
498 }
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 // Backend Scaler
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
502 writel( regs.besctl, mga_mmio_base + BESCTL);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
503 if(is_g400)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
504 writel( regs.beslumactl, mga_mmio_base + BESLUMACTL);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
505 writel( regs.bespitch, mga_mmio_base + BESPITCH);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
506
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
507 writel( regs.besa1org, mga_mmio_base + BESA1ORG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
508 writel( regs.besa1corg, mga_mmio_base + BESA1CORG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
509 writel( regs.besa2org, mga_mmio_base + BESA2ORG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
510 writel( regs.besa2corg, mga_mmio_base + BESA2CORG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
511 writel( regs.besb1org, mga_mmio_base + BESB1ORG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
512 writel( regs.besb1corg, mga_mmio_base + BESB1CORG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
513 writel( regs.besb2org, mga_mmio_base + BESB2ORG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
514 writel( regs.besb2corg, mga_mmio_base + BESB2CORG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
515 if(is_g400)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
516 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
517 writel( regs.besa1c3org, mga_mmio_base + BESA1C3ORG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
518 writel( regs.besa2c3org, mga_mmio_base + BESA2C3ORG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
519 writel( regs.besb1c3org, mga_mmio_base + BESB1C3ORG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
520 writel( regs.besb2c3org, mga_mmio_base + BESB2C3ORG);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
521 }
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 writel( regs.beshcoord, mga_mmio_base + BESHCOORD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
524 writel( regs.beshiscal, mga_mmio_base + BESHISCAL);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
525 writel( regs.beshsrcst, mga_mmio_base + BESHSRCST);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
526 writel( regs.beshsrcend, mga_mmio_base + BESHSRCEND);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
527 writel( regs.beshsrclst, mga_mmio_base + BESHSRCLST);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
528
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
529 writel( regs.besvcoord, mga_mmio_base + BESVCOORD);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
530 writel( regs.besviscal, mga_mmio_base + BESVISCAL);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
531
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
532 writel( regs.besv1srclst, mga_mmio_base + BESV1SRCLST);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
533 writel( regs.besv1wght, mga_mmio_base + BESV1WGHT);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
534 writel( regs.besv2srclst, mga_mmio_base + BESV2SRCLST);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
535 writel( regs.besv2wght, mga_mmio_base + BESV2WGHT);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
536
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
537 //update the registers somewhere between 1 and 2 frames from now.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
538 writel( regs.besglobctl + ((readl(mga_mmio_base + VCOUNT)+2)<<16),
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
539 mga_mmio_base + BESGLOBCTL);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
540
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
541 if (mga_verbose > 1)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
542 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
543 printf("[mga] wrote BES registers\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
544 printf("[mga] BESCTL = 0x%08x\n",
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
545 readl(mga_mmio_base + BESCTL));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
546 printf("[mga] BESGLOBCTL = 0x%08x\n",
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
547 readl(mga_mmio_base + BESGLOBCTL));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
548 printf("[mga] BESSTATUS= 0x%08x\n",
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
549 readl(mga_mmio_base + BESSTATUS));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
550 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
551 #ifdef CRTC2
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
552 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
553 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
554 // ctrc2
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
555 // disable CRTC2 acording to specs
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
556 writel(cregs.c2misc, mga_mmio_base + C2MISC);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
557
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
558 if (mga_verbose > 1) printf("[mga] c2offset = %d\n",cregs.c2offset);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
559
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
560 writel(cregs.c2offset, mga_mmio_base + C2OFFSET);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
561 writel(cregs.c2startadd0, mga_mmio_base + C2STARTADD0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
562 writel(cregs.c2pl2startadd0, mga_mmio_base + C2PL2STARTADD0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
563 writel(cregs.c2pl3startadd0, mga_mmio_base + C2PL3STARTADD0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
564 writel(cregs.c2spicstartadd0, mga_mmio_base + C2SPICSTARTADD0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
565 #endif
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
566 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
567
28363
7baa7292f575 Fix warnings about undefined preprocessor directives.
diego
parents: 28232
diff changeset
568 #if MGA_ALLOW_IRQ
28232
8df85ad26746 Add missing 'void' keyword to parameterless function declarations.
diego
parents: 27079
diff changeset
569 static void enable_irq(void)
8df85ad26746 Add missing 'void' keyword to parameterless function declarations.
diego
parents: 27079
diff changeset
570 {
22850
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
28232
8df85ad26746 Add missing 'void' keyword to parameterless function declarations.
diego
parents: 27079
diff changeset
586 static void disable_irq(void)
22850
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");
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26719
diff changeset
668 return EINVAL;
22850
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);
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26719
diff changeset
688 return ENOTSUP;
22850
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");
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26719
diff changeset
710 return EFAULT;
22850
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);
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26719
diff changeset
1046 return 0;
22850
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 }
28363
7baa7292f575 Fix warnings about undefined preprocessor directives.
diego
parents: 28232
diff changeset
1059 #if MGA_ALLOW_IRQ
22850
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
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26719
diff changeset
1065 return 0;
22850
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;
28363
7baa7292f575 Fix warnings about undefined preprocessor directives.
diego
parents: 28232
diff changeset
1073 #if MGA_ALLOW_IRQ
22850
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
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26719
diff changeset
1081 return 0;
22850
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));
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26719
diff changeset
1100 return err;
22850
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");
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26719
diff changeset
1145 return ENXIO;
22850
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
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26719
diff changeset
1154 return 0;
22850
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");
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26719
diff changeset
1174 return EINTR;
22850
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);
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26719
diff changeset
1229 return EINVAL;
22850
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");
28363
7baa7292f575 Fix warnings about undefined preprocessor directives.
diego
parents: 28232
diff changeset
1243 #if MGA_ALLOW_IRQ
22850
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
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26719
diff changeset
1267 return 0;
22850
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
28363
7baa7292f575 Fix warnings about undefined preprocessor directives.
diego
parents: 28232
diff changeset
1281 #if MGA_ALLOW_IRQ
22850
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;
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26719
diff changeset
1307 return ENOTSUP;
22850
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;
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26719
diff changeset
1314 return 0;
22850
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));
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26719
diff changeset
1320 return 0;
22850
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));
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26719
diff changeset
1326 return 0;
22850
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);
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26719
diff changeset
1333 return 0;
22850
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");
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26719
diff changeset
1342 return ENOTSUP;
22850
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)))
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26719
diff changeset
1347 return ENOTSUP;
22850
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
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26719
diff changeset
1360 return 0;
22850
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");
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26719
diff changeset
1369 return ENOTSUP;
22850
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
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26719
diff changeset
1378 return 0;
22850
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 };