annotate drivers/mga_vid.c @ 25661:293aeec83153

Replace the persistent CODECS_FLAG_SELECTED by a local "stringset" with an almost-trivial implementation. This allows making the builtin codec structs const, and it also makes clearer that this "selected" status is not used outside the init functions.
author reimar
date Sat, 12 Jan 2008 14:05:46 +0000
parents acfe034e5386
children a506a6ab14e1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2345
9acd3e75be48 ah, crtc2 disabled by default
arpi
parents: 2344
diff changeset
1 //#define CRTC2
9acd3e75be48 ah, crtc2 disabled by default
arpi
parents: 2344
diff changeset
2
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
3 // YUY2 support (see config.format) added by A'rpi/ESP-team
57
baa0a12438eb config interface changed
arpi_esp
parents: 48
diff changeset
4 // double buffering added by A'rpi/ESP-team
5623
cdf5b88bdaa8 Most of informational printk's ifdef'd.
eyck
parents: 5336
diff changeset
5 // brightness/contrast introduced by eyck
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
6 // multiple card support by Attila Kinali <attila@kinali.ch>
57
baa0a12438eb config interface changed
arpi_esp
parents: 48
diff changeset
7
baa0a12438eb config interface changed
arpi_esp
parents: 48
diff changeset
8 // Set this value, if autodetection fails! (video ram size in megabytes)
91
315979891f2d Force matrox memsize module option fixes
lgb
parents: 90
diff changeset
9 // #define MGA_MEMORY_SIZE 16
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
10
68
001286db4e90 IRQ handler disabled, vcount-based vsync
arpi_esp
parents: 64
diff changeset
11 //#define MGA_ALLOW_IRQ
001286db4e90 IRQ handler disabled, vcount-based vsync
arpi_esp
parents: 64
diff changeset
12
001286db4e90 IRQ handler disabled, vcount-based vsync
arpi_esp
parents: 64
diff changeset
13 #define MGA_VSYNC_POS 2
001286db4e90 IRQ handler disabled, vcount-based vsync
arpi_esp
parents: 64
diff changeset
14
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
15 /*
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
16 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
17 * mga_vid.c
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
18 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
19 * Copyright (C) 1999 Aaron Holtzman
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
20 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
21 * Module skeleton based on gutted agpgart module by Jeff Hartmann
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
22 * <slicer@ionet.net>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
23 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
24 * Matrox MGA G200/G400 YUV Video Interface module Version 0.1.0
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
25 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
26 * BES == Back End Scaler
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
27 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
28 * This software has been released under the terms of the GNU Public
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
29 * license. See http://www.gnu.org/copyleft/gpl.html for details.
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
30 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
31
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
32 //It's entirely possible this major conflicts with something else
9639
5422c37e6faa selectable 'major', patch by Hans-Andreas Engel <engel@node.ch>
alex
parents: 9631
diff changeset
33 //use the 'major' parameter to override the default major number (178)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
34 /* mknod /dev/mga_vid c 178 0 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
35
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
36 #include <linux/config.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
37 #include <linux/version.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
38 #include <linux/module.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
39 #include <linux/types.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
40 #include <linux/kernel.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
41 #include <linux/sched.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
42 #include <linux/mm.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
43 #include <linux/string.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
44 #include <linux/errno.h>
3125
d62aa0b7fd68 use <linux/slab.h> instead of <linux/malloc.h> for kernels 2.4.9+
szabi
parents: 2345
diff changeset
45
d62aa0b7fd68 use <linux/slab.h> instead of <linux/malloc.h> for kernels 2.4.9+
szabi
parents: 2345
diff changeset
46 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,10)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
47 #include <linux/malloc.h>
3125
d62aa0b7fd68 use <linux/slab.h> instead of <linux/malloc.h> for kernels 2.4.9+
szabi
parents: 2345
diff changeset
48 #else
d62aa0b7fd68 use <linux/slab.h> instead of <linux/malloc.h> for kernels 2.4.9+
szabi
parents: 2345
diff changeset
49 #include <linux/slab.h>
d62aa0b7fd68 use <linux/slab.h> instead of <linux/malloc.h> for kernels 2.4.9+
szabi
parents: 2345
diff changeset
50 #endif
d62aa0b7fd68 use <linux/slab.h> instead of <linux/malloc.h> for kernels 2.4.9+
szabi
parents: 2345
diff changeset
51
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
52 #include <linux/pci.h>
63
6bdaa0626a9b some printk debug level changed
arpi_esp
parents: 61
diff changeset
53 #include <linux/ioport.h>
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
54 #include <linux/init.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
55
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
56 #include "mga_vid.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
57
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
58 #ifdef CONFIG_MTRR
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
59 #include <asm/mtrr.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
60 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
61
5653
39115273d236 Mark Schreiber sent link to Marcus Sundburg patch to mga_vid, which enables
eyck
parents: 5623
diff changeset
62 #ifdef CONFIG_DEVFS_FS
39115273d236 Mark Schreiber sent link to Marcus Sundburg patch to mga_vid, which enables
eyck
parents: 5623
diff changeset
63 #include <linux/devfs_fs_kernel.h>
39115273d236 Mark Schreiber sent link to Marcus Sundburg patch to mga_vid, which enables
eyck
parents: 5623
diff changeset
64 #endif
39115273d236 Mark Schreiber sent link to Marcus Sundburg patch to mga_vid, which enables
eyck
parents: 5623
diff changeset
65
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
66 #include <asm/uaccess.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
67 #include <asm/system.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
68 #include <asm/io.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
69
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
70 #define TRUE 1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
71 #define FALSE 0
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
72
9639
5422c37e6faa selectable 'major', patch by Hans-Andreas Engel <engel@node.ch>
alex
parents: 9631
diff changeset
73 #define DEFAULT_MGA_VID_MAJOR 178
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
74
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
75 #ifndef PCI_DEVICE_ID_MATROX_G200_PCI
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
76 #define PCI_DEVICE_ID_MATROX_G200_PCI 0x0520
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
77 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
78
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
79 #ifndef PCI_DEVICE_ID_MATROX_G200_AGP
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
80 #define PCI_DEVICE_ID_MATROX_G200_AGP 0x0521
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
81 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
82
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
83 #ifndef PCI_DEVICE_ID_MATROX_G400
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
84 #define PCI_DEVICE_ID_MATROX_G400 0x0525
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
85 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
86
1989
bddeddc2cf42 G550 support
arpi
parents: 854
diff changeset
87 #ifndef PCI_DEVICE_ID_MATROX_G550
bddeddc2cf42 G550 support
arpi
parents: 854
diff changeset
88 #define PCI_DEVICE_ID_MATROX_G550 0x2527
bddeddc2cf42 G550 support
arpi
parents: 854
diff changeset
89 #endif
bddeddc2cf42 G550 support
arpi
parents: 854
diff changeset
90
9518
182d6c136095 workaround wrong detected memory sizes on G400 cards.
attila
parents: 9449
diff changeset
91 #ifndef PCI_SUBSYSTEM_ID_MATROX_G400_DH_16MB
182d6c136095 workaround wrong detected memory sizes on G400 cards.
attila
parents: 9449
diff changeset
92 #define PCI_SUBSYSTEM_ID_MATROX_G400_DH_16MB 0x2159
182d6c136095 workaround wrong detected memory sizes on G400 cards.
attila
parents: 9449
diff changeset
93 #endif
182d6c136095 workaround wrong detected memory sizes on G400 cards.
attila
parents: 9449
diff changeset
94
182d6c136095 workaround wrong detected memory sizes on G400 cards.
attila
parents: 9449
diff changeset
95 #ifndef PCI_SUBSYSTEM_ID_MATROX_G400_16MB_SGRAM
182d6c136095 workaround wrong detected memory sizes on G400 cards.
attila
parents: 9449
diff changeset
96 #define PCI_SUBSYSTEM_ID_MATROX_G400_16MB_SGRAM 0x19d8
182d6c136095 workaround wrong detected memory sizes on G400 cards.
attila
parents: 9449
diff changeset
97 #endif
182d6c136095 workaround wrong detected memory sizes on G400 cards.
attila
parents: 9449
diff changeset
98
182d6c136095 workaround wrong detected memory sizes on G400 cards.
attila
parents: 9449
diff changeset
99 #ifndef PCI_SUBSYSTEM_ID_MATROX_G400_16MB_SDRAM
182d6c136095 workaround wrong detected memory sizes on G400 cards.
attila
parents: 9449
diff changeset
100 #define PCI_SUBSYSTEM_ID_MATROX_G400_16MB_SDRAM 0x0328
182d6c136095 workaround wrong detected memory sizes on G400 cards.
attila
parents: 9449
diff changeset
101 #endif
182d6c136095 workaround wrong detected memory sizes on G400 cards.
attila
parents: 9449
diff changeset
102
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
103 MODULE_AUTHOR("Aaron Holtzman <aholtzma@engr.uvic.ca>");
2262
8cae22120633 gpl fix?
arpi
parents: 2086
diff changeset
104 #ifdef MODULE_LICENSE
8cae22120633 gpl fix?
arpi
parents: 2086
diff changeset
105 MODULE_LICENSE("GPL");
8cae22120633 gpl fix?
arpi
parents: 2086
diff changeset
106 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
107
4483
fb4b914eab8a framework for settings modifications like in radeon_vid ( /dev/mga_vid can
eyck
parents: 3959
diff changeset
108 #define PARAM_BRIGHTNESS "brightness="
4487
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
109 #define PARAM_CONTRAST "contrast="
4483
fb4b914eab8a framework for settings modifications like in radeon_vid ( /dev/mga_vid can
eyck
parents: 3959
diff changeset
110 #define PARAM_BLACKIE "blackie="
4484
c150a35fd22b support cat /dev/mga_vid.
eyck
parents: 4483
diff changeset
111
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
112 // set PARAM_BUFF_SIZE to just below 4k because some kernel versions
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
113 // store additional information in the memory page which leads to
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
114 // the allocation of an additional page if exactly 4k is used
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
115 #define PARAM_BUFF_SIZE 4000
4484
c150a35fd22b support cat /dev/mga_vid.
eyck
parents: 4483
diff changeset
116
5764
1e07af707b15 devfs fix?
arpi
parents: 5682
diff changeset
117 #ifndef min
5013
52c008dd6e93 min() moved out of #if, applied brightness/contrast patch by Brian J. Murrell
arpi
parents: 4728
diff changeset
118 #define min(x,y) (((x)<(y))?(x):(y))
5764
1e07af707b15 devfs fix?
arpi
parents: 5682
diff changeset
119 #endif
5013
52c008dd6e93 min() moved out of #if, applied brightness/contrast patch by Brian J. Murrell
arpi
parents: 4728
diff changeset
120
4487
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
121 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
122 #include <linux/ctype.h>
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
123
5884
e20ef52a4e3f patch that should fix the "isofs uses mga_vid" bug
arpi
parents: 5764
diff changeset
124 static unsigned long simple_strtoul(const char *cp,char **endp,unsigned int base)
4487
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
125 {
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
126 unsigned long result = 0,value;
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
127
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
128 if (!base) {
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
129 base = 10;
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
130 if (*cp == '0') {
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
131 base = 8;
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
132 cp++;
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
133 if ((*cp == 'x') && isxdigit(cp[1])) {
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
134 cp++;
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
135 base = 16;
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
136 }
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
137 }
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
138 }
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
139 while (isxdigit(*cp) && (value = isdigit(*cp) ? *cp-'0' : (islower(*cp)
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
140 ? toupper(*cp) : *cp)-'A'+10) < base) {
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
141 result = result*base + value;
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
142 cp++;
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
143 }
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
144 if (endp)
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
145 *endp = (char *)cp;
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
146 return result;
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
147 }
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
148
5884
e20ef52a4e3f patch that should fix the "isofs uses mga_vid" bug
arpi
parents: 5764
diff changeset
149 static long simple_strtol(const char *cp,char **endp,unsigned int base)
4487
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
150 {
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
151 if(*cp=='-')
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
152 return -simple_strtoul(cp+1,endp,base);
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
153 return simple_strtoul(cp,endp,base);
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
154 }
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
155 #endif
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
156
4483
fb4b914eab8a framework for settings modifications like in radeon_vid ( /dev/mga_vid can
eyck
parents: 3959
diff changeset
157
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
158 typedef struct bes_registers_s
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
159 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
160 //BES Control
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
161 uint32_t besctl;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
162 //BES Global control
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
163 uint32_t besglobctl;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
164 //Luma control (brightness and contrast)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
165 uint32_t beslumactl;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
166 //Line pitch
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
167 uint32_t bespitch;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
168
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
169 //Buffer A-1 Chroma 3 plane org
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
170 uint32_t besa1c3org;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
171 //Buffer A-1 Chroma org
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
172 uint32_t besa1corg;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
173 //Buffer A-1 Luma org
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
174 uint32_t besa1org;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
175
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
176 //Buffer A-2 Chroma 3 plane org
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
177 uint32_t besa2c3org;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
178 //Buffer A-2 Chroma org
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
179 uint32_t besa2corg;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
180 //Buffer A-2 Luma org
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
181 uint32_t besa2org;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
182
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
183 //Buffer B-1 Chroma 3 plane org
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
184 uint32_t besb1c3org;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
185 //Buffer B-1 Chroma org
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
186 uint32_t besb1corg;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
187 //Buffer B-1 Luma org
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
188 uint32_t besb1org;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
189
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
190 //Buffer B-2 Chroma 3 plane org
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
191 uint32_t besb2c3org;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
192 //Buffer B-2 Chroma org
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
193 uint32_t besb2corg;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
194 //Buffer B-2 Luma org
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
195 uint32_t besb2org;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
196
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
197 //BES Horizontal coord
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
198 uint32_t beshcoord;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
199 //BES Horizontal inverse scaling [5.14]
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
200 uint32_t beshiscal;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
201 //BES Horizontal source start [10.14] (for scaling)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
202 uint32_t beshsrcst;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
203 //BES Horizontal source ending [10.14] (for scaling)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
204 uint32_t beshsrcend;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
205 //BES Horizontal source last
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
206 uint32_t beshsrclst;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
207
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
208
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
209 //BES Vertical coord
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
210 uint32_t besvcoord;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
211 //BES Vertical inverse scaling [5.14]
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
212 uint32_t besviscal;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
213 //BES Field 1 vertical source last position
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
214 uint32_t besv1srclst;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
215 //BES Field 1 weight start
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
216 uint32_t besv1wght;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
217 //BES Field 2 vertical source last position
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
218 uint32_t besv2srclst;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
219 //BES Field 2 weight start
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
220 uint32_t besv2wght;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
221
4483
fb4b914eab8a framework for settings modifications like in radeon_vid ( /dev/mga_vid can
eyck
parents: 3959
diff changeset
222
fb4b914eab8a framework for settings modifications like in radeon_vid ( /dev/mga_vid can
eyck
parents: 3959
diff changeset
223 //configurable stuff
fb4b914eab8a framework for settings modifications like in radeon_vid ( /dev/mga_vid can
eyck
parents: 3959
diff changeset
224 int blackie;
fb4b914eab8a framework for settings modifications like in radeon_vid ( /dev/mga_vid can
eyck
parents: 3959
diff changeset
225
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
226 } bes_registers_t;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
227
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
228 #ifdef CRTC2
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
229 typedef struct crtc2_registers_s
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
230 {
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
231 uint32_t c2ctl;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
232 uint32_t c2datactl;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
233 uint32_t c2misc;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
234 uint32_t c2hparam;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
235 uint32_t c2hsync;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
236 uint32_t c2offset;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
237 uint32_t c2pl2startadd0;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
238 uint32_t c2pl2startadd1;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
239 uint32_t c2pl3startadd0;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
240 uint32_t c2pl3startadd1;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
241 uint32_t c2preload;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
242 uint32_t c2spicstartadd0;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
243 uint32_t c2spicstartadd1;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
244 uint32_t c2startadd0;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
245 uint32_t c2startadd1;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
246 uint32_t c2subpiclut;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
247 uint32_t c2vcount;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
248 uint32_t c2vparam;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
249 uint32_t c2vsync;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
250 } crtc2_registers_t;
5653
39115273d236 Mark Schreiber sent link to Marcus Sundburg patch to mga_vid, which enables
eyck
parents: 5623
diff changeset
251 #endif
39115273d236 Mark Schreiber sent link to Marcus Sundburg patch to mga_vid, which enables
eyck
parents: 5623
diff changeset
252
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
253
2086
ae67940c9d12 save and restore colorkey, to work together with Xv
arpi
parents: 2085
diff changeset
254
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
255
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
256
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
257 //All register offsets are converted to word aligned offsets (32 bit)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
258 //because we want all our register accesses to be 32 bits
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
259 #define VCOUNT 0x1e20
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
260
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
261 #define PALWTADD 0x3c00 // Index register for X_DATAREG port
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
262 #define X_DATAREG 0x3c0a
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
263
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
264 #define XMULCTRL 0x19
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
265 #define BPP_8 0x00
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
266 #define BPP_15 0x01
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
267 #define BPP_16 0x02
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
268 #define BPP_24 0x03
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
269 #define BPP_32_DIR 0x04
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
270 #define BPP_32_PAL 0x07
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
271
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
272 #define XCOLMSK 0x40
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
273 #define X_COLKEY 0x42
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
274 #define XKEYOPMODE 0x51
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
275 #define XCOLMSK0RED 0x52
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
276 #define XCOLMSK0GREEN 0x53
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
277 #define XCOLMSK0BLUE 0x54
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
278 #define XCOLKEY0RED 0x55
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
279 #define XCOLKEY0GREEN 0x56
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
280 #define XCOLKEY0BLUE 0x57
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
281
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
282 #ifdef CRTC2
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
283
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
284 /*CRTC2 registers*/
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
285 #define XMISCCTRL 0x1e
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
286 #define C2CTL 0x3c10
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
287 #define C2DATACTL 0x3c4c
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
288 #define C2MISC 0x3c44
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
289 #define C2HPARAM 0x3c14
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
290 #define C2HSYNC 0x3c18
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
291 #define C2OFFSET 0x3c40
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
292 #define C2PL2STARTADD0 0x3c30 // like BESA1CORG
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
293 #define C2PL2STARTADD1 0x3c34 // like BESA2CORG
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
294 #define C2PL3STARTADD0 0x3c38 // like BESA1C3ORG
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
295 #define C2PL3STARTADD1 0x3c3c // like BESA2C3ORG
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
296 #define C2PRELOAD 0x3c24
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
297 #define C2SPICSTARTADD0 0x3c54
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
298 #define C2SPICSTARTADD1 0x3c58
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
299 #define C2STARTADD0 0x3c28 // like BESA1ORG
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
300 #define C2STARTADD1 0x3c2c // like BESA2ORG
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
301 #define C2SUBPICLUT 0x3c50
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
302 #define C2VCOUNT 0x3c48
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
303 #define C2VPARAM 0x3c1c
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
304 #define C2VSYNC 0x3c20
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
305
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
306 #endif
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
307
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
308 // Backend Scaler registers
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
309 #define BESCTL 0x3d20
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
310 #define BESGLOBCTL 0x3dc0
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
311 #define BESLUMACTL 0x3d40
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
312 #define BESPITCH 0x3d24
48
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
313
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
314 #define BESA1C3ORG 0x3d60
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
315 #define BESA1CORG 0x3d10
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
316 #define BESA1ORG 0x3d00
48
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
317
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
318 #define BESA2C3ORG 0x3d64
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
319 #define BESA2CORG 0x3d14
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
320 #define BESA2ORG 0x3d04
48
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
321
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
322 #define BESB1C3ORG 0x3d68
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
323 #define BESB1CORG 0x3d18
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
324 #define BESB1ORG 0x3d08
48
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
325
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
326 #define BESB2C3ORG 0x3d6C
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
327 #define BESB2CORG 0x3d1C
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
328 #define BESB2ORG 0x3d0C
48
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
329
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
330 #define BESHCOORD 0x3d28
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
331 #define BESHISCAL 0x3d30
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
332 #define BESHSRCEND 0x3d3C
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
333 #define BESHSRCLST 0x3d50
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
334 #define BESHSRCST 0x3d38
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
335 #define BESV1WGHT 0x3d48
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
336 #define BESV2WGHT 0x3d4c
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
337 #define BESV1SRCLST 0x3d54
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
338 #define BESV2SRCLST 0x3d58
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
339 #define BESVISCAL 0x3d34
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
340 #define BESVCOORD 0x3d2c
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
341 #define BESSTATUS 0x3dc4
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
342
48
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
343 #define CRTCX 0x1fd4
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
344 #define CRTCD 0x1fd5
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
345 #define IEN 0x1e1c
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
346 #define ICLEAR 0x1e18
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
347 #define STATUS 0x1e14
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
348
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
349
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
350 // global devfs handle for /dev/mga_vid
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
351 #ifdef CONFIG_DEVFS_FS
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
352 static devfs_handle_t dev_handle = NULL;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
353 #endif
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
354
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
355 // card local config
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
356 typedef struct mga_card_s {
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
357
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
358 // local devfs handle for /dev/mga_vidX
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
359 #ifdef CONFIG_DEVFS_FS
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
360 devfs_handle_t dev_handle;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
361 #endif
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
362
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
363 uint8_t *param_buff; // buffer for read()
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
364 uint32_t param_buff_size;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
365 uint32_t param_buff_len;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
366 bes_registers_t regs;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
367 #ifdef CRTC2
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
368 crtc2_registers_t cregs;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
369 #endif
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
370 uint32_t vid_in_use;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
371 uint32_t is_g400;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
372 uint32_t vid_src_ready;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
373 uint32_t vid_overlay_on;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
374
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
375 uint8_t *mmio_base;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
376 uint32_t mem_base;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
377 int src_base; // YUV buffer position in video memory
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
378 uint32_t ram_size; // how much megabytes videoram we have
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
379 uint32_t top_reserved; // reserved space for console font (matroxfb + fastfont)
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
380
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
381 int brightness; // initial brightness
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
382 int contrast; // initial contrast
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
383
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
384 struct pci_dev *pci_dev;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
385
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
386 mga_vid_config_t config;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
387 int configured; // set to 1 when the card is configured over ioctl
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
388
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
389 int colkey_saved;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
390 int colkey_on;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
391 unsigned char colkey_color[4];
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
392 unsigned char colkey_mask[4];
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
393
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
394 int irq; // = -1
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
395 int next_frame;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
396 } mga_card_t;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
397
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
398 #define MGA_MAX_CARDS 16
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
399 // this is used as init value for the parameter arrays
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
400 // it should have exactly MGA_MAX_CARDS elements
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
401 #define MGA_MAX_CARDS_INIT_ARRAY {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
402 static unsigned int mga_cards_num=0;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
403 static mga_card_t * mga_cards[MGA_MAX_CARDS] = MGA_MAX_CARDS_INIT_ARRAY;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
404
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
405 // module parameters
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
406 static int major = DEFAULT_MGA_VID_MAJOR;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
407 static int mga_ram_size[MGA_MAX_CARDS] = MGA_MAX_CARDS_INIT_ARRAY;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
408 static int mga_brightness[MGA_MAX_CARDS] = MGA_MAX_CARDS_INIT_ARRAY;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
409 static int mga_contrast[MGA_MAX_CARDS] = MGA_MAX_CARDS_INIT_ARRAY;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
410 static int mga_top_reserved[MGA_MAX_CARDS] = MGA_MAX_CARDS_INIT_ARRAY;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
411
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
412 MODULE_PARM(mga_ram_size, "1-" __MODULE_STRING(MGA_MAX_CARDS) "i");
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
413 MODULE_PARM(mga_top_reserved, "1-" __MODULE_STRING(MGA_MAX_CARDS) "i");
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
414 MODULE_PARM(mga_brightness, "1-" __MODULE_STRING(MGA_MAX_CARDS) "i");
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
415 MODULE_PARM(mga_contrast, "1-" __MODULE_STRING(MGA_MAX_CARDS) "i");
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
416 MODULE_PARM(major, "i");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
417
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
418 #ifdef CRTC2
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
419 static void crtc2_frame_sel(mga_card_t * card, int frame)
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
420 {
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
421 switch(frame) {
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
422 case 0:
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
423 card->cregs.c2pl2startadd0=card->regs.besa1corg;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
424 card->cregs.c2pl3startadd0=card->regs.besa1c3org;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
425 card->cregs.c2startadd0=card->regs.besa1org;
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
426 break;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
427 case 1:
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
428 card->cregs.c2pl2startadd0=card->regs.besa2corg;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
429 card->cregs.c2pl3startadd0=card->regs.besa2c3org;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
430 card->cregs.c2startadd0=card->regs.besa2org;
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
431 break;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
432 case 2:
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
433 card->cregs.c2pl2startadd0=card->regs.besb1corg;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
434 card->cregs.c2pl3startadd0=card->regs.besb1c3org;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
435 card->cregs.c2startadd0=card->regs.besb1org;
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
436 break;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
437 case 3:
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
438 card->cregs.c2pl2startadd0=card->regs.besb2corg;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
439 card->cregs.c2pl3startadd0=card->regs.besb2c3org;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
440 card->cregs.c2startadd0=card->regs.besb2org;
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
441 break;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
442 }
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
443 writel(card->cregs.c2startadd0, card->mmio_base + C2STARTADD0);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
444 writel(card->cregs.c2pl2startadd0, card->mmio_base + C2PL2STARTADD0);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
445 writel(card->cregs.c2pl3startadd0, card->mmio_base + C2PL3STARTADD0);
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
446 }
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
447 #endif
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
448
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
449 static void mga_vid_frame_sel(mga_card_t * card, int frame)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
450 {
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
451 if ( card->irq != -1 ) {
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
452 card->next_frame=frame;
48
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
453 } else {
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
454
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
455 //we don't need the vcount protection as we're only hitting
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
456 //one register (and it doesn't seem to be double buffered)
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
457 card->regs.besctl = (card->regs.besctl & ~0x07000000) + (frame << 25);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
458 writel( card->regs.besctl, card->mmio_base + BESCTL );
68
001286db4e90 IRQ handler disabled, vcount-based vsync
arpi_esp
parents: 64
diff changeset
459
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
460 // writel( card->regs.besglobctl + ((readl(card->mmio_base + VCOUNT)+2)<<16),
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
461 writel( card->regs.besglobctl + (MGA_VSYNC_POS<<16),
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
462 card->mmio_base + BESGLOBCTL);
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
463 #ifdef CRTC2
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
464 crtc2_frame_sel(card, frame);
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
465 #endif
68
001286db4e90 IRQ handler disabled, vcount-based vsync
arpi_esp
parents: 64
diff changeset
466
48
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
467 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
468 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
469
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
470
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
471 static void mga_vid_write_regs(mga_card_t * card, int restore)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
472 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
473 //Make sure internal registers don't get updated until we're done
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
474 writel( (readl(card->mmio_base + VCOUNT)-1)<<16,
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
475 card->mmio_base + BESGLOBCTL);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
476
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
477 // color or coordinate keying
2086
ae67940c9d12 save and restore colorkey, to work together with Xv
arpi
parents: 2085
diff changeset
478
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
479 if(restore && card->colkey_saved){
2086
ae67940c9d12 save and restore colorkey, to work together with Xv
arpi
parents: 2085
diff changeset
480 // restore it
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
481 card->colkey_saved=0;
2086
ae67940c9d12 save and restore colorkey, to work together with Xv
arpi
parents: 2085
diff changeset
482
5623
cdf5b88bdaa8 Most of informational printk's ifdef'd.
eyck
parents: 5336
diff changeset
483 #ifdef MP_DEBUG
2086
ae67940c9d12 save and restore colorkey, to work together with Xv
arpi
parents: 2085
diff changeset
484 printk("mga_vid: Restoring colorkey (ON: %d %02X:%02X:%02X)\n",
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
485 card->colkey_on,card->colkey_color[0],card->colkey_color[1],card->colkey_color[2]);
5623
cdf5b88bdaa8 Most of informational printk's ifdef'd.
eyck
parents: 5336
diff changeset
486 #endif
2086
ae67940c9d12 save and restore colorkey, to work together with Xv
arpi
parents: 2085
diff changeset
487
ae67940c9d12 save and restore colorkey, to work together with Xv
arpi
parents: 2085
diff changeset
488 // Set color key registers:
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
489 writeb( XKEYOPMODE, card->mmio_base + PALWTADD);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
490 writeb( card->colkey_on, card->mmio_base + X_DATAREG);
2086
ae67940c9d12 save and restore colorkey, to work together with Xv
arpi
parents: 2085
diff changeset
491
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
492 writeb( XCOLKEY0RED, card->mmio_base + PALWTADD);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
493 writeb( card->colkey_color[0], card->mmio_base + X_DATAREG);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
494 writeb( XCOLKEY0GREEN, card->mmio_base + PALWTADD);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
495 writeb( card->colkey_color[1], card->mmio_base + X_DATAREG);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
496 writeb( XCOLKEY0BLUE, card->mmio_base + PALWTADD);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
497 writeb( card->colkey_color[2], card->mmio_base + X_DATAREG);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
498 writeb( X_COLKEY, card->mmio_base + PALWTADD);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
499 writeb( card->colkey_color[3], card->mmio_base + X_DATAREG);
2086
ae67940c9d12 save and restore colorkey, to work together with Xv
arpi
parents: 2085
diff changeset
500
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
501 writeb( XCOLMSK0RED, card->mmio_base + PALWTADD);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
502 writeb( card->colkey_mask[0], card->mmio_base + X_DATAREG);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
503 writeb( XCOLMSK0GREEN, card->mmio_base + PALWTADD);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
504 writeb( card->colkey_mask[1], card->mmio_base + X_DATAREG);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
505 writeb( XCOLMSK0BLUE, card->mmio_base + PALWTADD);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
506 writeb( card->colkey_mask[2], card->mmio_base + X_DATAREG);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
507 writeb( XCOLMSK, card->mmio_base + PALWTADD);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
508 writeb( card->colkey_mask[3], card->mmio_base + X_DATAREG);
2086
ae67940c9d12 save and restore colorkey, to work together with Xv
arpi
parents: 2085
diff changeset
509
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
510 } else if(!card->colkey_saved){
2086
ae67940c9d12 save and restore colorkey, to work together with Xv
arpi
parents: 2085
diff changeset
511 // save it
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
512 card->colkey_saved=1;
2086
ae67940c9d12 save and restore colorkey, to work together with Xv
arpi
parents: 2085
diff changeset
513 // Get color key registers:
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
514 writeb( XKEYOPMODE, card->mmio_base + PALWTADD);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
515 card->colkey_on=(unsigned char)readb(card->mmio_base + X_DATAREG) & 1;
2086
ae67940c9d12 save and restore colorkey, to work together with Xv
arpi
parents: 2085
diff changeset
516
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
517 writeb( XCOLKEY0RED, card->mmio_base + PALWTADD);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
518 card->colkey_color[0]=(unsigned char)readb(card->mmio_base + X_DATAREG);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
519 writeb( XCOLKEY0GREEN, card->mmio_base + PALWTADD);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
520 card->colkey_color[1]=(unsigned char)readb(card->mmio_base + X_DATAREG);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
521 writeb( XCOLKEY0BLUE, card->mmio_base + PALWTADD);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
522 card->colkey_color[2]=(unsigned char)readb(card->mmio_base + X_DATAREG);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
523 writeb( X_COLKEY, card->mmio_base + PALWTADD);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
524 card->colkey_color[3]=(unsigned char)readb(card->mmio_base + X_DATAREG);
2086
ae67940c9d12 save and restore colorkey, to work together with Xv
arpi
parents: 2085
diff changeset
525
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
526 writeb( XCOLMSK0RED, card->mmio_base + PALWTADD);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
527 card->colkey_mask[0]=(unsigned char)readb(card->mmio_base + X_DATAREG);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
528 writeb( XCOLMSK0GREEN, card->mmio_base + PALWTADD);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
529 card->colkey_mask[1]=(unsigned char)readb(card->mmio_base + X_DATAREG);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
530 writeb( XCOLMSK0BLUE, card->mmio_base + PALWTADD);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
531 card->colkey_mask[2]=(unsigned char)readb(card->mmio_base + X_DATAREG);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
532 writeb( XCOLMSK, card->mmio_base + PALWTADD);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
533 card->colkey_mask[3]=(unsigned char)readb(card->mmio_base + X_DATAREG);
2086
ae67940c9d12 save and restore colorkey, to work together with Xv
arpi
parents: 2085
diff changeset
534
5623
cdf5b88bdaa8 Most of informational printk's ifdef'd.
eyck
parents: 5336
diff changeset
535 #ifdef MP_DEBUG
2086
ae67940c9d12 save and restore colorkey, to work together with Xv
arpi
parents: 2085
diff changeset
536 printk("mga_vid: Saved colorkey (ON: %d %02X:%02X:%02X)\n",
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
537 card->colkey_on, card->colkey_color[0], card->colkey_color[1], card->colkey_color[2]);
5623
cdf5b88bdaa8 Most of informational printk's ifdef'd.
eyck
parents: 5336
diff changeset
538 #endif
2086
ae67940c9d12 save and restore colorkey, to work together with Xv
arpi
parents: 2085
diff changeset
539
ae67940c9d12 save and restore colorkey, to work together with Xv
arpi
parents: 2085
diff changeset
540 }
ae67940c9d12 save and restore colorkey, to work together with Xv
arpi
parents: 2085
diff changeset
541
ae67940c9d12 save and restore colorkey, to work together with Xv
arpi
parents: 2085
diff changeset
542 if(!restore){
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
543 writeb( XKEYOPMODE, card->mmio_base + PALWTADD);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
544 writeb( card->config.colkey_on, card->mmio_base + X_DATAREG);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
545 if ( card->config.colkey_on )
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
546 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
547 uint32_t r=0, g=0, b=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
548
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
549 writeb( XMULCTRL, card->mmio_base + PALWTADD);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
550 switch (readb (card->mmio_base + X_DATAREG))
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
551 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
552 case BPP_8:
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
553 /* Need to look up the color index, just using color 0 for now. */
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
554 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
555
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
556 case BPP_15:
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
557 r = card->config.colkey_red >> 3;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
558 g = card->config.colkey_green >> 3;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
559 b = card->config.colkey_blue >> 3;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
560 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
561
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
562 case BPP_16:
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
563 r = card->config.colkey_red >> 3;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
564 g = card->config.colkey_green >> 2;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
565 b = card->config.colkey_blue >> 3;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
566 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
567
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
568 case BPP_24:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
569 case BPP_32_DIR:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
570 case BPP_32_PAL:
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
571 r = card->config.colkey_red;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
572 g = card->config.colkey_green;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
573 b = card->config.colkey_blue;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
574 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
575 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
576
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
577 // Disable color keying on alpha channel
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
578 writeb( XCOLMSK, card->mmio_base + PALWTADD);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
579 writeb( 0x00, card->mmio_base + X_DATAREG);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
580 writeb( X_COLKEY, card->mmio_base + PALWTADD);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
581 writeb( 0x00, card->mmio_base + X_DATAREG);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
582
2086
ae67940c9d12 save and restore colorkey, to work together with Xv
arpi
parents: 2085
diff changeset
583
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
584 // Set up color key registers
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
585 writeb( XCOLKEY0RED, card->mmio_base + PALWTADD);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
586 writeb( r, card->mmio_base + X_DATAREG);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
587 writeb( XCOLKEY0GREEN, card->mmio_base + PALWTADD);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
588 writeb( g, card->mmio_base + X_DATAREG);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
589 writeb( XCOLKEY0BLUE, card->mmio_base + PALWTADD);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
590 writeb( b, card->mmio_base + X_DATAREG);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
591
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
592 // Set up color key mask registers
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
593 writeb( XCOLMSK0RED, card->mmio_base + PALWTADD);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
594 writeb( 0xff, card->mmio_base + X_DATAREG);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
595 writeb( XCOLMSK0GREEN, card->mmio_base + PALWTADD);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
596 writeb( 0xff, card->mmio_base + X_DATAREG);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
597 writeb( XCOLMSK0BLUE, card->mmio_base + PALWTADD);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
598 writeb( 0xff, card->mmio_base + X_DATAREG);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
599 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
600
2086
ae67940c9d12 save and restore colorkey, to work together with Xv
arpi
parents: 2085
diff changeset
601 }
ae67940c9d12 save and restore colorkey, to work together with Xv
arpi
parents: 2085
diff changeset
602
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
603 // Backend Scaler
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
604 writel( card->regs.besctl, card->mmio_base + BESCTL);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
605 if(card->is_g400)
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
606 writel( card->regs.beslumactl, card->mmio_base + BESLUMACTL);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
607 writel( card->regs.bespitch, card->mmio_base + BESPITCH);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
608
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
609 writel( card->regs.besa1org, card->mmio_base + BESA1ORG);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
610 writel( card->regs.besa1corg, card->mmio_base + BESA1CORG);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
611 writel( card->regs.besa2org, card->mmio_base + BESA2ORG);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
612 writel( card->regs.besa2corg, card->mmio_base + BESA2CORG);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
613 writel( card->regs.besb1org, card->mmio_base + BESB1ORG);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
614 writel( card->regs.besb1corg, card->mmio_base + BESB1CORG);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
615 writel( card->regs.besb2org, card->mmio_base + BESB2ORG);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
616 writel( card->regs.besb2corg, card->mmio_base + BESB2CORG);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
617 if(card->is_g400)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
618 {
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
619 writel( card->regs.besa1c3org, card->mmio_base + BESA1C3ORG);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
620 writel( card->regs.besa2c3org, card->mmio_base + BESA2C3ORG);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
621 writel( card->regs.besb1c3org, card->mmio_base + BESB1C3ORG);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
622 writel( card->regs.besb2c3org, card->mmio_base + BESB2C3ORG);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
623 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
624
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
625 writel( card->regs.beshcoord, card->mmio_base + BESHCOORD);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
626 writel( card->regs.beshiscal, card->mmio_base + BESHISCAL);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
627 writel( card->regs.beshsrcst, card->mmio_base + BESHSRCST);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
628 writel( card->regs.beshsrcend, card->mmio_base + BESHSRCEND);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
629 writel( card->regs.beshsrclst, card->mmio_base + BESHSRCLST);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
630
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
631 writel( card->regs.besvcoord, card->mmio_base + BESVCOORD);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
632 writel( card->regs.besviscal, card->mmio_base + BESVISCAL);
48
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
633
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
634 writel( card->regs.besv1srclst, card->mmio_base + BESV1SRCLST);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
635 writel( card->regs.besv1wght, card->mmio_base + BESV1WGHT);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
636 writel( card->regs.besv2srclst, card->mmio_base + BESV2SRCLST);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
637 writel( card->regs.besv2wght, card->mmio_base + BESV2WGHT);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
638
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
639 //update the registers somewhere between 1 and 2 frames from now.
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
640 writel( card->regs.besglobctl + ((readl(card->mmio_base + VCOUNT)+2)<<16),
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
641 card->mmio_base + BESGLOBCTL);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
642
77
9bbba5880f70 printk's updated
arpi_esp
parents: 75
diff changeset
643 #if 0
61
2a89b5b3ab39 printk() loglevel fix
szabii
parents: 57
diff changeset
644 printk(KERN_DEBUG "mga_vid: wrote BES registers\n");
2a89b5b3ab39 printk() loglevel fix
szabii
parents: 57
diff changeset
645 printk(KERN_DEBUG "mga_vid: BESCTL = 0x%08x\n",
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
646 readl(card->mmio_base + BESCTL));
61
2a89b5b3ab39 printk() loglevel fix
szabii
parents: 57
diff changeset
647 printk(KERN_DEBUG "mga_vid: BESGLOBCTL = 0x%08x\n",
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
648 readl(card->mmio_base + BESGLOBCTL));
61
2a89b5b3ab39 printk() loglevel fix
szabii
parents: 57
diff changeset
649 printk(KERN_DEBUG "mga_vid: BESSTATUS= 0x%08x\n",
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
650 readl(card->mmio_base + BESSTATUS));
77
9bbba5880f70 printk's updated
arpi_esp
parents: 75
diff changeset
651 #endif
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
652 #ifdef CRTC2
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
653 // printk("c2ctl:0x%08x c2datactl:0x%08x\n", readl(card->mmio_base + C2CTL), readl(card->mmio_base + C2DATACTL));
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
654 // printk("c2misc:0x%08x\n", readl(card->mmio_base + C2MISC));
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
655 // printk("c2ctl:0x%08x c2datactl:0x%08x\n", card->cregs.c2ctl, card->cregs.c2datactl);
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
656
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
657 // writel(card->cregs.c2ctl, card->mmio_base + C2CTL);
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
658
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
659 writel(((readl(card->mmio_base + C2CTL) & ~0x03e00000) + (card->cregs.c2ctl & 0x03e00000)), card->mmio_base + C2CTL);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
660 writel(((readl(card->mmio_base + C2DATACTL) & ~0x000000ff) + (card->cregs.c2datactl & 0x000000ff)), card->mmio_base + C2DATACTL);
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
661 // ctrc2
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
662 // disable CRTC2 acording to specs
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
663 // writel(card->cregs.c2ctl & 0xfffffff0, card->mmio_base + C2CTL);
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
664 // je to treba ???
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
665 // writeb((readb(card->mmio_base + XMISCCTRL) & 0x19) | 0xa2, card->mmio_base + XMISCCTRL); // MAFC - mfcsel & vdoutsel
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
666 // writeb((readb(card->mmio_base + XMISCCTRL) & 0x19) | 0x92, card->mmio_base + XMISCCTRL);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
667 // writeb((readb(card->mmio_base + XMISCCTRL) & ~0xe9) + 0xa2, card->mmio_base + XMISCCTRL);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
668 // writel(card->cregs.c2datactl, card->mmio_base + C2DATACTL);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
669 // writel(card->cregs.c2hparam, card->mmio_base + C2HPARAM);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
670 // writel(card->cregs.c2hsync, card->mmio_base + C2HSYNC);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
671 // writel(card->cregs.c2vparam, card->mmio_base + C2VPARAM);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
672 // writel(card->cregs.c2vsync, card->mmio_base + C2VSYNC);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
673 writel(card->cregs.c2misc, card->mmio_base + C2MISC);
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
674
5623
cdf5b88bdaa8 Most of informational printk's ifdef'd.
eyck
parents: 5336
diff changeset
675 #ifdef MP_DEBUG
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
676 printk("c2offset = %d\n",card->cregs.c2offset);
5623
cdf5b88bdaa8 Most of informational printk's ifdef'd.
eyck
parents: 5336
diff changeset
677 #endif
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
678
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
679 writel(card->cregs.c2offset, card->mmio_base + C2OFFSET);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
680 writel(card->cregs.c2startadd0, card->mmio_base + C2STARTADD0);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
681 // writel(card->cregs.c2startadd1, card->mmio_base + C2STARTADD1);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
682 writel(card->cregs.c2pl2startadd0, card->mmio_base + C2PL2STARTADD0);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
683 // writel(card->cregs.c2pl2startadd1, card->mmio_base + C2PL2STARTADD1);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
684 writel(card->cregs.c2pl3startadd0, card->mmio_base + C2PL3STARTADD0);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
685 // writel(card->cregs.c2pl3startadd1, card->mmio_base + C2PL3STARTADD1);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
686 writel(card->cregs.c2spicstartadd0, card->mmio_base + C2SPICSTARTADD0);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
687 // writel(card->cregs.c2spicstartadd1, card->mmio_base + C2SPICSTARTADD1);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
688 // writel(card->cregs.c2subpiclut, card->mmio_base + C2SUBPICLUT);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
689 // writel(card->cregs.c2preload, card->mmio_base + C2PRELOAD);
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
690 // finaly enable everything
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
691 // writel(card->cregs.c2ctl, card->mmio_base + C2CTL);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
692 // printk("c2ctl:0x%08x c2datactl:0x%08x\n",readl(card->mmio_base + C2CTL),readl(card->mmio_base + C2DATACTL));
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
693 // printk("c2misc:0x%08x\n", readl(card->mmio_base + C2MISC));
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
694 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
695 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
696
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
697 static int mga_vid_set_config(mga_card_t * card)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
698 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
699 int x, y, sw, sh, dw, dh;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
700 int besleft, bestop, ifactor, ofsleft, ofstop, baseadrofs, weight, weights;
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
701 mga_vid_config_t *config = &card->config;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
702 int frame_size = card->config.frame_size;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
703
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
704 #ifdef CRTC2
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
705 #define right_margin 0
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
706 #define left_margin 18
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
707 #define hsync_len 46
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
708 #define lower_margin 10
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
709 #define vsync_len 4
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
710 #define upper_margin 39
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
711
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
712 unsigned int hdispend = (config->src_width + 31) & ~31;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
713 unsigned int hsyncstart = hdispend + (right_margin & ~7);
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
714 unsigned int hsyncend = hsyncstart + (hsync_len & ~7);
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
715 unsigned int htotal = hsyncend + (left_margin & ~7);
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
716 unsigned int vdispend = config->src_height;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
717 unsigned int vsyncstart = vdispend + lower_margin;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
718 unsigned int vsyncend = vsyncstart + vsync_len;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
719 unsigned int vtotal = vsyncend + upper_margin;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
720 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
721 x = config->x_org;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
722 y = config->y_org;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
723 sw = config->src_width;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
724 sh = config->src_height;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
725 dw = config->dest_width;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
726 dh = config->dest_height;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
727
5623
cdf5b88bdaa8 Most of informational printk's ifdef'd.
eyck
parents: 5336
diff changeset
728 #ifdef MP_DEBUG
61
2a89b5b3ab39 printk() loglevel fix
szabii
parents: 57
diff changeset
729 printk(KERN_DEBUG "mga_vid: Setting up a %dx%d+%d+%d video window (src %dx%d) format %X\n",
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
730 dw, dh, x, y, sw, sh, config->format);
5623
cdf5b88bdaa8 Most of informational printk's ifdef'd.
eyck
parents: 5336
diff changeset
731 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
732
3959
72d8a4d0de18 lastminute divbyzero fix by Attila Kinali ;)
arpi
parents: 3125
diff changeset
733 if(sw<4 || sh<4 || dw<4 || dh<4){
72d8a4d0de18 lastminute divbyzero fix by Attila Kinali ;)
arpi
parents: 3125
diff changeset
734 printk(KERN_ERR "mga_vid: Invalid src/dest dimenstions\n");
72d8a4d0de18 lastminute divbyzero fix by Attila Kinali ;)
arpi
parents: 3125
diff changeset
735 return -1;
72d8a4d0de18 lastminute divbyzero fix by Attila Kinali ;)
arpi
parents: 3125
diff changeset
736 }
72d8a4d0de18 lastminute divbyzero fix by Attila Kinali ;)
arpi
parents: 3125
diff changeset
737
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
738 //FIXME check that window is valid and inside desktop
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
739
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
740 //Setup the BES registers for a three plane 4:2:0 video source
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
741
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
742 card->regs.besglobctl = 0;
466
c7c03bf70bb7 UYVY support
arpi_esp
parents: 105
diff changeset
743
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
744 switch(config->format){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
745 case MGA_VID_FORMAT_YV12:
470
8e101a5d9dc2 I420/IYUV support
arpi_esp
parents: 466
diff changeset
746 case MGA_VID_FORMAT_I420:
8e101a5d9dc2 I420/IYUV support
arpi_esp
parents: 466
diff changeset
747 case MGA_VID_FORMAT_IYUV:
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
748 card->regs.besctl = 1 // BES enabled
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
749 + (0<<6) // even start polarity
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
750 + (1<<10) // x filtering enabled
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
751 + (1<<11) // y filtering enabled
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
752 + (1<<16) // chroma upsampling
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
753 + (1<<17) // 4:2:0 mode
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
754 + (1<<18); // dither enabled
466
c7c03bf70bb7 UYVY support
arpi_esp
parents: 105
diff changeset
755 #if 0
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
756 if(card->is_g400)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
757 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
758 //zoom disabled, zoom filter disabled, 420 3 plane format, proc amp
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
759 //disabled, rgb mode disabled
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
760 card->regs.besglobctl = (1<<5);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
761 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
762 else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
763 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
764 //zoom disabled, zoom filter disabled, Cb samples in 0246, Cr
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
765 //in 1357, BES register update on besvcnt
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
766 card->regs.besglobctl = 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
767 }
466
c7c03bf70bb7 UYVY support
arpi_esp
parents: 105
diff changeset
768 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
769 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
770
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
771 case MGA_VID_FORMAT_YUY2:
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
772 card->regs.besctl = 1 // BES enabled
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
773 + (0<<6) // even start polarity
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
774 + (1<<10) // x filtering enabled
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
775 + (1<<11) // y filtering enabled
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
776 + (1<<16) // chroma upsampling
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
777 + (0<<17) // 4:2:2 mode
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
778 + (1<<18); // dither enabled
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
779
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
780 card->regs.besglobctl = 0; // YUY2 format selected
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
781 break;
466
c7c03bf70bb7 UYVY support
arpi_esp
parents: 105
diff changeset
782
c7c03bf70bb7 UYVY support
arpi_esp
parents: 105
diff changeset
783 case MGA_VID_FORMAT_UYVY:
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
784 card->regs.besctl = 1 // BES enabled
466
c7c03bf70bb7 UYVY support
arpi_esp
parents: 105
diff changeset
785 + (0<<6) // even start polarity
c7c03bf70bb7 UYVY support
arpi_esp
parents: 105
diff changeset
786 + (1<<10) // x filtering enabled
c7c03bf70bb7 UYVY support
arpi_esp
parents: 105
diff changeset
787 + (1<<11) // y filtering enabled
c7c03bf70bb7 UYVY support
arpi_esp
parents: 105
diff changeset
788 + (1<<16) // chroma upsampling
c7c03bf70bb7 UYVY support
arpi_esp
parents: 105
diff changeset
789 + (0<<17) // 4:2:2 mode
c7c03bf70bb7 UYVY support
arpi_esp
parents: 105
diff changeset
790 + (1<<18); // dither enabled
c7c03bf70bb7 UYVY support
arpi_esp
parents: 105
diff changeset
791
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
792 card->regs.besglobctl = 1<<6; // UYVY format selected
466
c7c03bf70bb7 UYVY support
arpi_esp
parents: 105
diff changeset
793 break;
c7c03bf70bb7 UYVY support
arpi_esp
parents: 105
diff changeset
794
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
795 default:
61
2a89b5b3ab39 printk() loglevel fix
szabii
parents: 57
diff changeset
796 printk(KERN_ERR "mga_vid: Unsupported pixel format: 0x%X\n",config->format);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
797 return -1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
798 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
799
4483
fb4b914eab8a framework for settings modifications like in radeon_vid ( /dev/mga_vid can
eyck
parents: 3959
diff changeset
800 // setting black&white mode
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
801 card->regs.besctl|=(card->regs.blackie<<20);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
802
4483
fb4b914eab8a framework for settings modifications like in radeon_vid ( /dev/mga_vid can
eyck
parents: 3959
diff changeset
803 //Enable contrast and brightness control
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
804 card->regs.besglobctl |= (1<<5) + (1<<7);
4483
fb4b914eab8a framework for settings modifications like in radeon_vid ( /dev/mga_vid can
eyck
parents: 3959
diff changeset
805
6798
7935d85facff - fixed overflow by +-0x80
arpi
parents: 6586
diff changeset
806 // brightness (-128..127) && contrast (0..255)
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
807 card->regs.beslumactl = (card->brightness << 16) | ((card->contrast+0x80)&0xFFFF);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
808
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
809 //Setup destination window boundaries
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
810 besleft = x > 0 ? x : 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
811 bestop = y > 0 ? y : 0;
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
812 card->regs.beshcoord = (besleft<<16) + (x + dw-1);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
813 card->regs.besvcoord = (bestop<<16) + (y + dh-1);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
814
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
815 //Setup source dimensions
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
816 card->regs.beshsrclst = (sw - 1) << 16;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
817 card->regs.bespitch = (sw + 31) & ~31 ;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
818
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
819 //Setup horizontal scaling
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
820 ifactor = ((sw-1)<<14)/(dw-1);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
821 ofsleft = besleft - x;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
822
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
823 card->regs.beshiscal = ifactor<<2;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
824 card->regs.beshsrcst = (ofsleft*ifactor)<<2;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
825 card->regs.beshsrcend = card->regs.beshsrcst + (((dw - ofsleft - 1) * ifactor) << 2);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
826
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
827 //Setup vertical scaling
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
828 ifactor = ((sh-1)<<14)/(dh-1);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
829 ofstop = bestop - y;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
830
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
831 card->regs.besviscal = ifactor<<2;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
832
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
833 baseadrofs = ( (ofstop * card->regs.besviscal) >>16) * card->regs.bespitch;
57
baa0a12438eb config interface changed
arpi_esp
parents: 48
diff changeset
834 //frame_size = ((sw + 31) & ~31) * sh + (((sw + 31) & ~31) * sh) / 2;
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
835 card->regs.besa1org = (uint32_t) card->src_base + baseadrofs;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
836 card->regs.besa2org = (uint32_t) card->src_base + baseadrofs + 1*frame_size;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
837 card->regs.besb1org = (uint32_t) card->src_base + baseadrofs + 2*frame_size;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
838 card->regs.besb2org = (uint32_t) card->src_base + baseadrofs + 3*frame_size;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
839
470
8e101a5d9dc2 I420/IYUV support
arpi_esp
parents: 466
diff changeset
840 if(config->format==MGA_VID_FORMAT_YV12
8e101a5d9dc2 I420/IYUV support
arpi_esp
parents: 466
diff changeset
841 ||config->format==MGA_VID_FORMAT_IYUV
8e101a5d9dc2 I420/IYUV support
arpi_esp
parents: 466
diff changeset
842 ||config->format==MGA_VID_FORMAT_I420
8e101a5d9dc2 I420/IYUV support
arpi_esp
parents: 466
diff changeset
843 ){
57
baa0a12438eb config interface changed
arpi_esp
parents: 48
diff changeset
844 // planar YUV frames:
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
845 if (card->is_g400)
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
846 baseadrofs = ( ( (ofstop * card->regs.besviscal ) / 4 ) >> 16 ) * card->regs.bespitch;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
847 else
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
848 baseadrofs = ( ( ( ofstop * card->regs.besviscal ) / 2 ) >> 16 ) * card->regs.bespitch;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
849
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
850 if(config->format==MGA_VID_FORMAT_YV12 || !card->is_g400){
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
851 card->regs.besa1corg = (uint32_t) card->src_base + baseadrofs + card->regs.bespitch * sh ;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
852 card->regs.besa2corg = (uint32_t) card->src_base + baseadrofs + 1*frame_size + card->regs.bespitch * sh;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
853 card->regs.besb1corg = (uint32_t) card->src_base + baseadrofs + 2*frame_size + card->regs.bespitch * sh;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
854 card->regs.besb2corg = (uint32_t) card->src_base + baseadrofs + 3*frame_size + card->regs.bespitch * sh;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
855 card->regs.besa1c3org = card->regs.besa1corg + ( (card->regs.bespitch * sh) / 4);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
856 card->regs.besa2c3org = card->regs.besa2corg + ( (card->regs.bespitch * sh) / 4);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
857 card->regs.besb1c3org = card->regs.besb1corg + ( (card->regs.bespitch * sh) / 4);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
858 card->regs.besb2c3org = card->regs.besb2corg + ( (card->regs.bespitch * sh) / 4);
470
8e101a5d9dc2 I420/IYUV support
arpi_esp
parents: 466
diff changeset
859 } else {
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
860 card->regs.besa1c3org = (uint32_t) card->src_base + baseadrofs + card->regs.bespitch * sh ;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
861 card->regs.besa2c3org = (uint32_t) card->src_base + baseadrofs + 1*frame_size + card->regs.bespitch * sh;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
862 card->regs.besb1c3org = (uint32_t) card->src_base + baseadrofs + 2*frame_size + card->regs.bespitch * sh;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
863 card->regs.besb2c3org = (uint32_t) card->src_base + baseadrofs + 3*frame_size + card->regs.bespitch * sh;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
864 card->regs.besa1corg = card->regs.besa1c3org + ((card->regs.bespitch * sh) / 4);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
865 card->regs.besa2corg = card->regs.besa2c3org + ((card->regs.bespitch * sh) / 4);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
866 card->regs.besb1corg = card->regs.besb1c3org + ((card->regs.bespitch * sh) / 4);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
867 card->regs.besb2corg = card->regs.besb2c3org + ((card->regs.bespitch * sh) / 4);
470
8e101a5d9dc2 I420/IYUV support
arpi_esp
parents: 466
diff changeset
868 }
8e101a5d9dc2 I420/IYUV support
arpi_esp
parents: 466
diff changeset
869
57
baa0a12438eb config interface changed
arpi_esp
parents: 48
diff changeset
870 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
871
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
872 weight = ofstop * (card->regs.besviscal >> 2);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
873 weights = weight < 0 ? 1 : 0;
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
874 card->regs.besv2wght = card->regs.besv1wght = (weights << 16) + ((weight & 0x3FFF) << 2);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
875 card->regs.besv2srclst = card->regs.besv1srclst = sh - 1 - (((ofstop * card->regs.besviscal) >> 16) & 0x03FF);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
876
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
877 #ifdef CRTC2
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
878 // pridat hlavni registry - tj. casovani ...
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
879
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
880
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
881 switch(config->format){
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
882 case MGA_VID_FORMAT_YV12:
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
883 case MGA_VID_FORMAT_I420:
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
884 case MGA_VID_FORMAT_IYUV:
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
885 card->cregs.c2ctl = 1 // CRTC2 enabled
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
886 + (1<<1) // external clock
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
887 + (0<<2) // external clock
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
888 + (1<<3) // pixel clock enable - not needed ???
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
889 + (0<<4) // high prioryty req
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
890 + (1<<5) // high prioryty req
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
891 + (0<<6) // high prioryty req
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
892 + (1<<8) // high prioryty req max
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
893 + (0<<9) // high prioryty req max
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
894 + (0<<10) // high prioryty req max
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
895 + (0<<20) // CRTC1 to DAC
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
896 + (1<<21) // 420 mode
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
897 + (1<<22) // 420 mode
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
898 + (1<<23) // 420 mode
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
899 + (0<<24) // single chroma line for 420 mode - need to be corrected
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
900 + (0<<25) /*/ interlace mode - need to be corrected*/
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
901 + (0<<26) // field legth polariry
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
902 + (0<<27) // field identification polariry
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
903 + (1<<28) // VIDRST detection mode
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
904 + (0<<29) // VIDRST detection mode
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
905 + (1<<30) // Horizontal counter preload
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
906 + (1<<31) // Vertical counter preload
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
907 ;
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
908 card->cregs.c2datactl = 1 // disable dither - propably not needed, we are already in YUV mode
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
909 + (1<<1) // Y filter enable
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
910 + (1<<2) // CbCr filter enable
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
911 + (0<<3) // subpicture enable (disabled)
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
912 + (0<<4) // NTSC enable (disabled - PAL)
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
913 + (0<<5) // C2 static subpicture enable (disabled)
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
914 + (0<<6) // C2 subpicture offset division (disabled)
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
915 + (0<<7) // 422 subformat selection !
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
916 /* + (0<<8) // 15 bpp high alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
917 + (0<<9) // 15 bpp high alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
918 + (0<<10) // 15 bpp high alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
919 + (0<<11) // 15 bpp high alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
920 + (0<<12) // 15 bpp high alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
921 + (0<<13) // 15 bpp high alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
922 + (0<<14) // 15 bpp high alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
923 + (0<<15) // 15 bpp high alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
924 + (0<<16) // 15 bpp low alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
925 + (0<<17) // 15 bpp low alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
926 + (0<<18) // 15 bpp low alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
927 + (0<<19) // 15 bpp low alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
928 + (0<<20) // 15 bpp low alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
929 + (0<<21) // 15 bpp low alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
930 + (0<<22) // 15 bpp low alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
931 + (0<<23) // 15 bpp low alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
932 + (0<<24) // static subpicture key
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
933 + (0<<25) // static subpicture key
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
934 + (0<<26) // static subpicture key
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
935 + (0<<27) // static subpicture key
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
936 + (0<<28) // static subpicture key
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
937 */ ;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
938 break;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
939
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
940 case MGA_VID_FORMAT_YUY2:
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
941 card->cregs.c2ctl = 1 // CRTC2 enabled
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
942 + (1<<1) // external clock
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
943 + (0<<2) // external clock
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
944 + (1<<3) // pixel clock enable - not needed ???
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
945 + (0<<4) // high prioryty req - acc to spec
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
946 + (1<<5) // high prioryty req
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
947 + (0<<6) // high prioryty req
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
948 // 7 reserved
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
949 + (1<<8) // high prioryty req max
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
950 + (0<<9) // high prioryty req max
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
951 + (0<<10) // high prioryty req max
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
952 // 11-19 reserved
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
953 + (0<<20) // CRTC1 to DAC
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
954 + (1<<21) // 422 mode
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
955 + (0<<22) // 422 mode
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
956 + (1<<23) // 422 mode
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
957 + (0<<24) // single chroma line for 420 mode - need to be corrected
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
958 + (0<<25) /*/ interlace mode - need to be corrected*/
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
959 + (0<<26) // field legth polariry
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
960 + (0<<27) // field identification polariry
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
961 + (1<<28) // VIDRST detection mode
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
962 + (0<<29) // VIDRST detection mode
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
963 + (1<<30) // Horizontal counter preload
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
964 + (1<<31) // Vertical counter preload
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
965 ;
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
966 card->cregs.c2datactl = 1 // disable dither - propably not needed, we are already in YUV mode
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
967 + (1<<1) // Y filter enable
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
968 + (1<<2) // CbCr filter enable
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
969 + (0<<3) // subpicture enable (disabled)
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
970 + (0<<4) // NTSC enable (disabled - PAL)
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
971 + (0<<5) // C2 static subpicture enable (disabled)
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
972 + (0<<6) // C2 subpicture offset division (disabled)
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
973 + (0<<7) // 422 subformat selection !
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
974 /* + (0<<8) // 15 bpp high alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
975 + (0<<9) // 15 bpp high alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
976 + (0<<10) // 15 bpp high alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
977 + (0<<11) // 15 bpp high alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
978 + (0<<12) // 15 bpp high alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
979 + (0<<13) // 15 bpp high alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
980 + (0<<14) // 15 bpp high alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
981 + (0<<15) // 15 bpp high alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
982 + (0<<16) // 15 bpp low alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
983 + (0<<17) // 15 bpp low alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
984 + (0<<18) // 15 bpp low alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
985 + (0<<19) // 15 bpp low alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
986 + (0<<20) // 15 bpp low alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
987 + (0<<21) // 15 bpp low alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
988 + (0<<22) // 15 bpp low alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
989 + (0<<23) // 15 bpp low alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
990 + (0<<24) // static subpicture key
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
991 + (0<<25) // static subpicture key
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
992 + (0<<26) // static subpicture key
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
993 + (0<<27) // static subpicture key
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
994 + (0<<28) // static subpicture key
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
995 */ ;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
996 break;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
997
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
998 case MGA_VID_FORMAT_UYVY:
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
999 card->cregs.c2ctl = 1 // CRTC2 enabled
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1000 + (1<<1) // external clock
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1001 + (0<<2) // external clock
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1002 + (1<<3) // pixel clock enable - not needed ???
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1003 + (0<<4) // high prioryty req
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1004 + (1<<5) // high prioryty req
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1005 + (0<<6) // high prioryty req
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1006 + (1<<8) // high prioryty req max
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1007 + (0<<9) // high prioryty req max
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1008 + (0<<10) // high prioryty req max
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1009 + (0<<20) // CRTC1 to DAC
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1010 + (1<<21) // 422 mode
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1011 + (0<<22) // 422 mode
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1012 + (1<<23) // 422 mode
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1013 + (1<<24) // single chroma line for 420 mode - need to be corrected
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1014 + (1<<25) /*/ interlace mode - need to be corrected*/
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1015 + (0<<26) // field legth polariry
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1016 + (0<<27) // field identification polariry
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1017 + (1<<28) // VIDRST detection mode
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1018 + (0<<29) // VIDRST detection mode
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1019 + (1<<30) // Horizontal counter preload
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1020 + (1<<31) // Vertical counter preload
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1021 ;
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1022 card->cregs.c2datactl = 0 // enable dither - propably not needed, we are already in YUV mode
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1023 + (1<<1) // Y filter enable
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1024 + (1<<2) // CbCr filter enable
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1025 + (0<<3) // subpicture enable (disabled)
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1026 + (0<<4) // NTSC enable (disabled - PAL)
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1027 + (0<<5) // C2 static subpicture enable (disabled)
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1028 + (0<<6) // C2 subpicture offset division (disabled)
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1029 + (1<<7) // 422 subformat selection !
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1030 /* + (0<<8) // 15 bpp high alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1031 + (0<<9) // 15 bpp high alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1032 + (0<<10) // 15 bpp high alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1033 + (0<<11) // 15 bpp high alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1034 + (0<<12) // 15 bpp high alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1035 + (0<<13) // 15 bpp high alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1036 + (0<<14) // 15 bpp high alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1037 + (0<<15) // 15 bpp high alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1038 + (0<<16) // 15 bpp low alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1039 + (0<<17) // 15 bpp low alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1040 + (0<<18) // 15 bpp low alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1041 + (0<<19) // 15 bpp low alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1042 + (0<<20) // 15 bpp low alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1043 + (0<<21) // 15 bpp low alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1044 + (0<<22) // 15 bpp low alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1045 + (0<<23) // 15 bpp low alpha
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1046 + (0<<24) // static subpicture key
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1047 + (0<<25) // static subpicture key
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1048 + (0<<26) // static subpicture key
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1049 + (0<<27) // static subpicture key
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1050 + (0<<28) // static subpicture key
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1051 */ ;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1052 break;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1053
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1054 default:
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1055 printk(KERN_ERR "mga_vid: Unsupported pixel format: 0x%X\n",config->format);
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1056 return -1;
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1057 }
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1058
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1059 card->cregs.c2hparam = ( (hdispend - 8) << 16) | (htotal - 8);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1060 card->cregs.c2hsync = ( (hsyncend - 8) << 16) | (hsyncstart - 8);
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1061
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1062 card->cregs.c2misc=0 // CRTCV2 656 togg f0
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1063 +(0<<1) // CRTCV2 656 togg f0
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1064 +(0<<2) // CRTCV2 656 togg f0
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1065 +(0<<4) // CRTCV2 656 togg f1
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1066 +(0<<5) // CRTCV2 656 togg f1
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1067 +(0<<6) // CRTCV2 656 togg f1
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1068 +(0<<8) // Hsync active high
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1069 +(0<<9) // Vsync active high
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1070 // 16-27 c2vlinecomp - nevim co tam dat
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1071 ;
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1072 card->cregs.c2offset=(card->regs.bespitch << 1);
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1073
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1074 card->cregs.c2pl2startadd0=card->regs.besa1corg;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1075 // card->cregs.c2pl2startadd1=card->regs.besa2corg;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1076 card->cregs.c2pl3startadd0=card->regs.besa1c3org;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1077 // card->cregs.c2pl3startadd1=card->regs.besa2c3org;
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1078
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1079 card->cregs.c2preload=(vsyncstart << 16) | (hsyncstart); // from
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1080
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1081 card->cregs.c2spicstartadd0=0; // not used
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1082 // card->cregs.c2spicstartadd1=0; // not used
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1083
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1084 card->cregs.c2startadd0=card->regs.besa1org;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1085 // card->cregs.c2startadd1=card->regs.besa2org;
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1086
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1087 card->cregs.c2subpiclut=0; //not used
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1088
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1089 card->cregs.c2vparam = ( (vdispend - 1) << 16) | (vtotal - 1);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1090 card->cregs.c2vsync = ( (vsyncend - 1) << 16) | (vsyncstart - 1);
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1091
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1092
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1093 #endif
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1094
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1095 mga_vid_write_regs(card, 0);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1096 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1097 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1098
68
001286db4e90 IRQ handler disabled, vcount-based vsync
arpi_esp
parents: 64
diff changeset
1099 #ifdef MGA_ALLOW_IRQ
001286db4e90 IRQ handler disabled, vcount-based vsync
arpi_esp
parents: 64
diff changeset
1100
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1101 static void enable_irq(mga_card_t * card){
48
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1102 long int cc;
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1103
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1104 cc = readl(card->mmio_base + IEN);
63
6bdaa0626a9b some printk debug level changed
arpi_esp
parents: 61
diff changeset
1105 // printk(KERN_ALERT "*** !!! IRQREG = %d\n", (int)(cc&0xff));
48
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1106
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1107 writeb(0x11, card->mmio_base + CRTCX);
48
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1108
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1109 writeb(0x20, card->mmio_base + CRTCD); /* clear 0, enable off */
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1110 writeb(0x00, card->mmio_base + CRTCD); /* enable on */
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1111 writeb(0x10, card->mmio_base + CRTCD); /* clear = 1 */
48
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1112
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1113 writel(card->regs.besglobctl , card->mmio_base + BESGLOBCTL);
48
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1114
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1115 }
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1116
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1117 static void disable_irq(mga_card_t * card){
48
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1118
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1119 writeb(0x11, card->mmio_base + CRTCX);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1120 writeb(0x20, card->mmio_base + CRTCD); /* clear 0, enable off */
48
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1121
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1122 }
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1123
5884
e20ef52a4e3f patch that should fix the "isofs uses mga_vid" bug
arpi
parents: 5764
diff changeset
1124 static void mga_handle_irq(int irq, void *dev_id, struct pt_regs *pregs) {
48
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1125 // static int frame=0;
854
76ca00724e12 gcc warnings fixed - patch by Aelius aelius@wish.net
arpi_esp
parents: 662
diff changeset
1126 // static int counter=0;
48
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1127 long int cc;
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1128 mga_card_t * card = dev_id;
48
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1129
68
001286db4e90 IRQ handler disabled, vcount-based vsync
arpi_esp
parents: 64
diff changeset
1130 // printk(KERN_DEBUG "vcount = %d\n",readl(mga_mmio_base + VCOUNT));
001286db4e90 IRQ handler disabled, vcount-based vsync
arpi_esp
parents: 64
diff changeset
1131
48
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1132 //printk("mga_interrupt #%d\n", irq);
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1133
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1134 // check whether the interrupt is really for us (irq sharing)
48
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1135 if ( irq != -1 ) {
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1136 cc = readl(card->mmio_base + STATUS);
48
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1137 if ( ! (cc & 0x10) ) return; /* vsyncpen */
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1138 // debug_irqcnt++;
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1139 }
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1140
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1141 // if ( debug_irqignore ) {
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1142 // debug_irqignore = 0;
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1143
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1144 // frame=(frame+1)&1;
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1145 card->regs.besctl = (card->regs.besctl & ~0x07000000) + (card->next_frame << 25);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1146 writel( card->regs.besctl, card->mmio_base + BESCTL );
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1147
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1148 #ifdef CRTC2
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1149 // sem pridat vyber obrazku !!!!
23734
acfe034e5386 ISO8859-1 --> UTF-8
diego
parents: 22678
diff changeset
1150 // i han echt kei ahnig was das obe heisse söll
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1151 crtc2_frame_sel(card->next_frame);
2344
1c573fed42dd CRTC2 YUV support (buggy?) by Jiri.Svoboda@seznam.cz
arpi
parents: 2262
diff changeset
1152 #endif
48
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1153
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1154 #if 0
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1155 ++counter;
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1156 if(!(counter&63)){
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1157 printk("mga irq counter = %d\n",counter);
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1158 }
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1159 #endif
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1160
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1161 // } else {
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1162 // debug_irqignore = 1;
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1163 // }
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1164
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1165 if ( irq != -1 ) {
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1166 writeb( 0x11, card->mmio_base + CRTCX);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1167 writeb( 0, card->mmio_base + CRTCD );
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1168 writeb( 0x10, card->mmio_base + CRTCD );
48
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1169 }
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1170
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1171 // writel( card->regs.besglobctl, card->mmio_base + BESGLOBCTL);
48
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1172
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1173
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1174 return;
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1175
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1176 }
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1177
68
001286db4e90 IRQ handler disabled, vcount-based vsync
arpi_esp
parents: 64
diff changeset
1178 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1179
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1180 static int mga_vid_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1181 {
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1182 int frame, result;
5013
52c008dd6e93 min() moved out of #if, applied brightness/contrast patch by Brian J. Murrell
arpi
parents: 4728
diff changeset
1183 uint32_t tmp;
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1184 mga_card_t * card = (mga_card_t *) file->private_data;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1185
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1186 switch(cmd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1187 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1188 case MGA_VID_CONFIG:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1189 //FIXME remove
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1190 // printk(KERN_DEBUG "mga_vid: vcount = %d\n",readl(card->mmio_base + VCOUNT));
5623
cdf5b88bdaa8 Most of informational printk's ifdef'd.
eyck
parents: 5336
diff changeset
1191 #ifdef MP_DEBUG
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1192 printk(KERN_DEBUG "mga_vid: mmio_base = %p\n",card->mmio_base);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1193 printk(KERN_DEBUG "mga_vid: mem_base = %08x\n",card->mem_base);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1194 //FIXME remove
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1195
61
2a89b5b3ab39 printk() loglevel fix
szabii
parents: 57
diff changeset
1196 printk(KERN_DEBUG "mga_vid: Received configuration\n");
5623
cdf5b88bdaa8 Most of informational printk's ifdef'd.
eyck
parents: 5336
diff changeset
1197 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1198
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1199 if(copy_from_user(&card->config,(mga_vid_config_t*) arg,sizeof(mga_vid_config_t)))
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1200 {
61
2a89b5b3ab39 printk() loglevel fix
szabii
parents: 57
diff changeset
1201 printk(KERN_ERR "mga_vid: failed copy from userspace\n");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1202 return(-EFAULT);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1203 }
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1204 if(card->config.version != MGA_VID_VERSION){
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1205 printk(KERN_ERR "mga_vid: incompatible version! driver: %X requested: %X\n",MGA_VID_VERSION,card->config.version);
57
baa0a12438eb config interface changed
arpi_esp
parents: 48
diff changeset
1206 return(-EFAULT);
baa0a12438eb config interface changed
arpi_esp
parents: 48
diff changeset
1207 }
baa0a12438eb config interface changed
arpi_esp
parents: 48
diff changeset
1208
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1209 if(card->config.frame_size==0 || card->config.frame_size>1024*768*2){
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1210 printk(KERN_ERR "mga_vid: illegal frame_size: %d\n",card->config.frame_size);
57
baa0a12438eb config interface changed
arpi_esp
parents: 48
diff changeset
1211 return(-EFAULT);
baa0a12438eb config interface changed
arpi_esp
parents: 48
diff changeset
1212 }
baa0a12438eb config interface changed
arpi_esp
parents: 48
diff changeset
1213
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1214 if(card->config.num_frames<1 || card->config.num_frames>4){
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1215 printk(KERN_ERR "mga_vid: illegal num_frames: %d\n",card->config.num_frames);
57
baa0a12438eb config interface changed
arpi_esp
parents: 48
diff changeset
1216 return(-EFAULT);
baa0a12438eb config interface changed
arpi_esp
parents: 48
diff changeset
1217 }
baa0a12438eb config interface changed
arpi_esp
parents: 48
diff changeset
1218
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1219 card->src_base = (card->ram_size * 0x100000 - card->config.num_frames * card->config.frame_size - card->top_reserved);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1220 if(card->src_base<0){
61
2a89b5b3ab39 printk() loglevel fix
szabii
parents: 57
diff changeset
1221 printk(KERN_ERR "mga_vid: not enough memory for frames!\n");
57
baa0a12438eb config interface changed
arpi_esp
parents: 48
diff changeset
1222 return(-EFAULT);
baa0a12438eb config interface changed
arpi_esp
parents: 48
diff changeset
1223 }
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1224 card->src_base &= (~0xFFFF); // 64k boundary
5623
cdf5b88bdaa8 Most of informational printk's ifdef'd.
eyck
parents: 5336
diff changeset
1225 #ifdef MP_DEBUG
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1226 printk(KERN_DEBUG "mga YUV buffer base: 0x%X\n", card->src_base);
5623
cdf5b88bdaa8 Most of informational printk's ifdef'd.
eyck
parents: 5336
diff changeset
1227 #endif
57
baa0a12438eb config interface changed
arpi_esp
parents: 48
diff changeset
1228
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1229 if (card->is_g400)
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1230 card->config.card_type = MGA_G400;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1231 else
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1232 card->config.card_type = MGA_G200;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1233
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1234 card->config.ram_size = card->ram_size;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1235
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1236 if (copy_to_user((mga_vid_config_t *) arg, &card->config, sizeof(mga_vid_config_t)))
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1237 {
61
2a89b5b3ab39 printk() loglevel fix
szabii
parents: 57
diff changeset
1238 printk(KERN_ERR "mga_vid: failed copy to userspace\n");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1239 return(-EFAULT);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1240 }
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1241
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1242 result = mga_vid_set_config(card);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1243 if(!result) card->configured=1;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1244 return result;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1245 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1246
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1247 case MGA_VID_ON:
5623
cdf5b88bdaa8 Most of informational printk's ifdef'd.
eyck
parents: 5336
diff changeset
1248 #ifdef MP_DEBUG
61
2a89b5b3ab39 printk() loglevel fix
szabii
parents: 57
diff changeset
1249 printk(KERN_DEBUG "mga_vid: Video ON\n");
5623
cdf5b88bdaa8 Most of informational printk's ifdef'd.
eyck
parents: 5336
diff changeset
1250 #endif
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1251 card->vid_src_ready = 1;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1252 if(card->vid_overlay_on)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1253 {
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1254 card->regs.besctl |= 1;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1255 mga_vid_write_regs(card, 0);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1256 }
68
001286db4e90 IRQ handler disabled, vcount-based vsync
arpi_esp
parents: 64
diff changeset
1257 #ifdef MGA_ALLOW_IRQ
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1258 if ( card->irq != -1 ) enable_irq(card);
68
001286db4e90 IRQ handler disabled, vcount-based vsync
arpi_esp
parents: 64
diff changeset
1259 #endif
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1260 card->next_frame=0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1261 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1262
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1263 case MGA_VID_OFF:
5623
cdf5b88bdaa8 Most of informational printk's ifdef'd.
eyck
parents: 5336
diff changeset
1264 #ifdef MP_DEBUG
94
fbd99740af99 printk() message for video off when releasing mga without ioctl()
lgb
parents: 93
diff changeset
1265 printk(KERN_DEBUG "mga_vid: Video OFF (ioctl)\n");
5623
cdf5b88bdaa8 Most of informational printk's ifdef'd.
eyck
parents: 5336
diff changeset
1266 #endif
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1267 card->vid_src_ready = 0;
68
001286db4e90 IRQ handler disabled, vcount-based vsync
arpi_esp
parents: 64
diff changeset
1268 #ifdef MGA_ALLOW_IRQ
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1269 if ( card->irq != -1 ) disable_irq(card);
68
001286db4e90 IRQ handler disabled, vcount-based vsync
arpi_esp
parents: 64
diff changeset
1270 #endif
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1271 card->regs.besctl &= ~1;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1272 card->regs.besglobctl &= ~(1<<6); // UYVY format selected
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1273 mga_vid_write_regs(card, 0);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1274 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1275
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1276 case MGA_VID_FSEL:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1277 if(copy_from_user(&frame,(int *) arg,sizeof(int)))
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1278 {
61
2a89b5b3ab39 printk() loglevel fix
szabii
parents: 57
diff changeset
1279 printk(KERN_ERR "mga_vid: FSEL failed copy from userspace\n");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1280 return(-EFAULT);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1281 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1282
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1283 mga_vid_frame_sel(card, frame);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1284 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1285
5013
52c008dd6e93 min() moved out of #if, applied brightness/contrast patch by Brian J. Murrell
arpi
parents: 4728
diff changeset
1286 case MGA_VID_GET_LUMA:
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1287 //tmp = card->regs.beslumactl;
6798
7935d85facff - fixed overflow by +-0x80
arpi
parents: 6586
diff changeset
1288 //tmp = (tmp&0xFFFF0000) | (((tmp&0xFFFF) - 0x80)&0xFFFF);
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1289 tmp = (card->brightness << 16) | (card->contrast&0xFFFF);
6798
7935d85facff - fixed overflow by +-0x80
arpi
parents: 6586
diff changeset
1290
5013
52c008dd6e93 min() moved out of #if, applied brightness/contrast patch by Brian J. Murrell
arpi
parents: 4728
diff changeset
1291 if (copy_to_user((uint32_t *) arg, &tmp, sizeof(uint32_t)))
52c008dd6e93 min() moved out of #if, applied brightness/contrast patch by Brian J. Murrell
arpi
parents: 4728
diff changeset
1292 {
52c008dd6e93 min() moved out of #if, applied brightness/contrast patch by Brian J. Murrell
arpi
parents: 4728
diff changeset
1293 printk(KERN_ERR "mga_vid: failed copy %p to userspace %p\n",
52c008dd6e93 min() moved out of #if, applied brightness/contrast patch by Brian J. Murrell
arpi
parents: 4728
diff changeset
1294 &tmp, (uint32_t *) arg);
52c008dd6e93 min() moved out of #if, applied brightness/contrast patch by Brian J. Murrell
arpi
parents: 4728
diff changeset
1295 return(-EFAULT);
52c008dd6e93 min() moved out of #if, applied brightness/contrast patch by Brian J. Murrell
arpi
parents: 4728
diff changeset
1296 }
52c008dd6e93 min() moved out of #if, applied brightness/contrast patch by Brian J. Murrell
arpi
parents: 4728
diff changeset
1297 break;
52c008dd6e93 min() moved out of #if, applied brightness/contrast patch by Brian J. Murrell
arpi
parents: 4728
diff changeset
1298
52c008dd6e93 min() moved out of #if, applied brightness/contrast patch by Brian J. Murrell
arpi
parents: 4728
diff changeset
1299 case MGA_VID_SET_LUMA:
52c008dd6e93 min() moved out of #if, applied brightness/contrast patch by Brian J. Murrell
arpi
parents: 4728
diff changeset
1300 tmp = arg;
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1301 card->brightness=tmp>>16; card->contrast=tmp&0xFFFF;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1302 //card->regs.beslumactl = (tmp&0xFFFF0000) | ((tmp + 0x80)&0xFFFF);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1303 card->regs.beslumactl = (card->brightness << 16) | ((card->contrast+0x80)&0xFFFF);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1304 mga_vid_write_regs(card, 0);
5013
52c008dd6e93 min() moved out of #if, applied brightness/contrast patch by Brian J. Murrell
arpi
parents: 4728
diff changeset
1305 break;
52c008dd6e93 min() moved out of #if, applied brightness/contrast patch by Brian J. Murrell
arpi
parents: 4728
diff changeset
1306
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1307 default:
61
2a89b5b3ab39 printk() loglevel fix
szabii
parents: 57
diff changeset
1308 printk(KERN_ERR "mga_vid: Invalid ioctl\n");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1309 return (-EINVAL);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1310 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1311
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1312 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1313 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1314
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1315 static void cards_init(mga_card_t * card, struct pci_dev * dev, int card_number, int is_g400);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1316
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1317 // returns the number of found cards
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1318 static int mga_vid_find_card(void)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1319 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1320 struct pci_dev *dev = NULL;
9631
d0b7a6b898c8 multiple mga device support by Hans-Andreas Engel <engel@node.ch>
alex
parents: 9518
diff changeset
1321 char *mga_dev_name;
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1322 mga_card_t * card;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1323
9631
d0b7a6b898c8 multiple mga device support by Hans-Andreas Engel <engel@node.ch>
alex
parents: 9518
diff changeset
1324 while((dev = pci_find_device(PCI_VENDOR_ID_MATROX, PCI_ANY_ID, dev)))
1989
bddeddc2cf42 G550 support
arpi
parents: 854
diff changeset
1325 {
9631
d0b7a6b898c8 multiple mga device support by Hans-Andreas Engel <engel@node.ch>
alex
parents: 9518
diff changeset
1326 mga_dev_name = "";
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1327 mga_cards_num++;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1328 if(mga_cards_num == MGA_MAX_CARDS)
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1329 {
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1330 printk(KERN_WARNING "mga_vid: Trying to initialize more than %d cards\n",MGA_MAX_CARDS);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1331 mga_cards_num--;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1332 break;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1333 }
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1334
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1335 card = kmalloc(sizeof(mga_card_t), GFP_KERNEL);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1336 if(!card)
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1337 {
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1338 printk(KERN_ERR "mga_vid: memory allocation failed\n");
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1339 mga_cards_num--;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1340 break;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1341 }
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1342
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1343 mga_cards[mga_cards_num - 1] = card;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1344
9631
d0b7a6b898c8 multiple mga device support by Hans-Andreas Engel <engel@node.ch>
alex
parents: 9518
diff changeset
1345 switch(dev->device) {
d0b7a6b898c8 multiple mga device support by Hans-Andreas Engel <engel@node.ch>
alex
parents: 9518
diff changeset
1346 case PCI_DEVICE_ID_MATROX_G550:
d0b7a6b898c8 multiple mga device support by Hans-Andreas Engel <engel@node.ch>
alex
parents: 9518
diff changeset
1347 mga_dev_name = "MGA G550";
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1348 printk(KERN_INFO "mga_vid: Found %s at %s [%s]\n", mga_dev_name, dev->slot_name, dev->name);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1349 cards_init(card, dev, mga_cards_num - 1, 1);
9631
d0b7a6b898c8 multiple mga device support by Hans-Andreas Engel <engel@node.ch>
alex
parents: 9518
diff changeset
1350 break;
d0b7a6b898c8 multiple mga device support by Hans-Andreas Engel <engel@node.ch>
alex
parents: 9518
diff changeset
1351 case PCI_DEVICE_ID_MATROX_G400:
d0b7a6b898c8 multiple mga device support by Hans-Andreas Engel <engel@node.ch>
alex
parents: 9518
diff changeset
1352 mga_dev_name = "MGA G400/G450";
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1353 printk(KERN_INFO "mga_vid: Found %s at %s [%s]\n", mga_dev_name, dev->slot_name, dev->name);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1354 cards_init(card, dev, mga_cards_num - 1, 1);
9631
d0b7a6b898c8 multiple mga device support by Hans-Andreas Engel <engel@node.ch>
alex
parents: 9518
diff changeset
1355 break;
d0b7a6b898c8 multiple mga device support by Hans-Andreas Engel <engel@node.ch>
alex
parents: 9518
diff changeset
1356 case PCI_DEVICE_ID_MATROX_G200_AGP:
d0b7a6b898c8 multiple mga device support by Hans-Andreas Engel <engel@node.ch>
alex
parents: 9518
diff changeset
1357 mga_dev_name = "MGA G200 AGP";
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1358 printk(KERN_INFO "mga_vid: Found %s at %s [%s]\n", mga_dev_name, dev->slot_name, dev->name);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1359 cards_init(card, dev, mga_cards_num - 1, 0);
9631
d0b7a6b898c8 multiple mga device support by Hans-Andreas Engel <engel@node.ch>
alex
parents: 9518
diff changeset
1360 break;
d0b7a6b898c8 multiple mga device support by Hans-Andreas Engel <engel@node.ch>
alex
parents: 9518
diff changeset
1361 case PCI_DEVICE_ID_MATROX_G200_PCI:
d0b7a6b898c8 multiple mga device support by Hans-Andreas Engel <engel@node.ch>
alex
parents: 9518
diff changeset
1362 mga_dev_name = "MGA G200";
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1363 printk(KERN_INFO "mga_vid: Found %s at %s [%s]\n", mga_dev_name, dev->slot_name, dev->name);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1364 cards_init(card, dev, mga_cards_num - 1, 0);
9631
d0b7a6b898c8 multiple mga device support by Hans-Andreas Engel <engel@node.ch>
alex
parents: 9518
diff changeset
1365 break;
d0b7a6b898c8 multiple mga device support by Hans-Andreas Engel <engel@node.ch>
alex
parents: 9518
diff changeset
1366 default:
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1367 mga_cards_num--;
9631
d0b7a6b898c8 multiple mga device support by Hans-Andreas Engel <engel@node.ch>
alex
parents: 9518
diff changeset
1368 printk(KERN_INFO "mga_vid: ignoring matrox device (%d) at %s [%s]\n", dev->device, dev->slot_name, dev->name);
d0b7a6b898c8 multiple mga device support by Hans-Andreas Engel <engel@node.ch>
alex
parents: 9518
diff changeset
1369 break;
d0b7a6b898c8 multiple mga device support by Hans-Andreas Engel <engel@node.ch>
alex
parents: 9518
diff changeset
1370 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1371 }
9631
d0b7a6b898c8 multiple mga device support by Hans-Andreas Engel <engel@node.ch>
alex
parents: 9518
diff changeset
1372
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1373 if(!mga_cards_num)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1374 {
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1375 printk(KERN_ERR "mga_vid: No supported cards found\n");
91
315979891f2d Force matrox memsize module option fixes
lgb
parents: 90
diff changeset
1376 } else {
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1377 printk(KERN_INFO "mga_vid: %d supported cards found\n", mga_cards_num);
48
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1378 }
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1379
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1380 return mga_cards_num;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1381 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1382
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1383 static void mga_param_buff_fill( mga_card_t * card )
4484
c150a35fd22b support cat /dev/mga_vid.
eyck
parents: 4483
diff changeset
1384 {
c150a35fd22b support cat /dev/mga_vid.
eyck
parents: 4483
diff changeset
1385 unsigned len;
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1386 unsigned size = card->param_buff_size;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1387 char * buf = card->param_buff;
4484
c150a35fd22b support cat /dev/mga_vid.
eyck
parents: 4483
diff changeset
1388 len = 0;
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1389 len += snprintf(&buf[len],size-len,"Interface version: %04X\n",MGA_VID_VERSION);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1390 len += snprintf(&buf[len],size-len,"Memory: %x:%dM\n",card->mem_base,(unsigned int) card->ram_size);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1391 len += snprintf(&buf[len],size-len,"MMIO: %p\n",card->mmio_base);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1392 len += snprintf(&buf[len],size-len,"Configurable stuff:\n");
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1393 len += snprintf(&buf[len],size-len,"~~~~~~~~~~~~~~~~~~~\n");
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1394 len += snprintf(&buf[len],size-len,PARAM_BRIGHTNESS"%d\n",card->brightness);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1395 len += snprintf(&buf[len],size-len,PARAM_CONTRAST"%d\n",card->contrast);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1396 len += snprintf(&buf[len],size-len,PARAM_BLACKIE"%s\n",card->regs.blackie?"on":"off");
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1397 card->param_buff_len = len;
4527
832c4dc794e0 print also contrast on cat /dev/mga_vid
eyck
parents: 4520
diff changeset
1398 // check boundaries of mga_param_buff before writing to it!!!
4484
c150a35fd22b support cat /dev/mga_vid.
eyck
parents: 4483
diff changeset
1399 }
c150a35fd22b support cat /dev/mga_vid.
eyck
parents: 4483
diff changeset
1400
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1401
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1402 static ssize_t mga_vid_read(struct file *file, char *buf, size_t count, loff_t *ppos)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1403 {
4484
c150a35fd22b support cat /dev/mga_vid.
eyck
parents: 4483
diff changeset
1404 uint32_t size;
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1405 mga_card_t * card = (mga_card_t *) file->private_data;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1406
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1407 if(!card->param_buff) return -ESPIPE;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1408 if(!(*ppos)) mga_param_buff_fill(card);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1409 if(*ppos >= card->param_buff_len) return 0;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1410 size = min(count,card->param_buff_len-(uint32_t)(*ppos));
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1411 memcpy(buf,card->param_buff,size);
4484
c150a35fd22b support cat /dev/mga_vid.
eyck
parents: 4483
diff changeset
1412 *ppos += size;
c150a35fd22b support cat /dev/mga_vid.
eyck
parents: 4483
diff changeset
1413 return size;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1414 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1415
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1416 static ssize_t mga_vid_write(struct file *file, const char *buf, size_t count, loff_t *ppos)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1417 {
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1418 mga_card_t * card = (mga_card_t *) file->private_data;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1419
4483
fb4b914eab8a framework for settings modifications like in radeon_vid ( /dev/mga_vid can
eyck
parents: 3959
diff changeset
1420 if(memcmp(buf,PARAM_BRIGHTNESS,min(count,strlen(PARAM_BRIGHTNESS))) == 0)
fb4b914eab8a framework for settings modifications like in radeon_vid ( /dev/mga_vid can
eyck
parents: 3959
diff changeset
1421 {
fb4b914eab8a framework for settings modifications like in radeon_vid ( /dev/mga_vid can
eyck
parents: 3959
diff changeset
1422 short brightness;
fb4b914eab8a framework for settings modifications like in radeon_vid ( /dev/mga_vid can
eyck
parents: 3959
diff changeset
1423 brightness=simple_strtol(&buf[strlen(PARAM_BRIGHTNESS)],NULL,10);
fb4b914eab8a framework for settings modifications like in radeon_vid ( /dev/mga_vid can
eyck
parents: 3959
diff changeset
1424 if (brightness>127 || brightness<-128) { brightness=0;}
fb4b914eab8a framework for settings modifications like in radeon_vid ( /dev/mga_vid can
eyck
parents: 3959
diff changeset
1425 // printk(KERN_DEBUG "mga_vid: brightness modified ( %d ) \n",brightness);
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1426 card->brightness=brightness;
4483
fb4b914eab8a framework for settings modifications like in radeon_vid ( /dev/mga_vid can
eyck
parents: 3959
diff changeset
1427 } else
4487
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
1428 if(memcmp(buf,PARAM_CONTRAST,min(count,strlen(PARAM_CONTRAST))) == 0)
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
1429 {
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
1430 short contrast;
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
1431 contrast=simple_strtol(&buf[strlen(PARAM_CONTRAST)],NULL,10);
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
1432 if (contrast>127 || contrast<-128) { contrast=0;}
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
1433 // printk(KERN_DEBUG "mga_vid: contrast modified ( %d ) \n",contrast);
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1434 card->contrast=contrast;
4487
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
1435 } else
e642ff2d5c6d Attila's Linux 2.2 patch, and contrast control applied
eyck
parents: 4484
diff changeset
1436
4483
fb4b914eab8a framework for settings modifications like in radeon_vid ( /dev/mga_vid can
eyck
parents: 3959
diff changeset
1437 if(memcmp(buf,PARAM_BLACKIE,min(count,strlen(PARAM_BLACKIE))) == 0)
fb4b914eab8a framework for settings modifications like in radeon_vid ( /dev/mga_vid can
eyck
parents: 3959
diff changeset
1438 {
fb4b914eab8a framework for settings modifications like in radeon_vid ( /dev/mga_vid can
eyck
parents: 3959
diff changeset
1439 short blackie;
fb4b914eab8a framework for settings modifications like in radeon_vid ( /dev/mga_vid can
eyck
parents: 3959
diff changeset
1440 blackie=simple_strtol(&buf[strlen(PARAM_BLACKIE)],NULL,10);
fb4b914eab8a framework for settings modifications like in radeon_vid ( /dev/mga_vid can
eyck
parents: 3959
diff changeset
1441 // printk(KERN_DEBUG "mga_vid: shadow mode: ( %d ) \n",blackie);
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1442 card->regs.blackie=(blackie>0)?1:0;
4483
fb4b914eab8a framework for settings modifications like in radeon_vid ( /dev/mga_vid can
eyck
parents: 3959
diff changeset
1443 } else count = -EIO;
fb4b914eab8a framework for settings modifications like in radeon_vid ( /dev/mga_vid can
eyck
parents: 3959
diff changeset
1444 // TODO: reset settings
fb4b914eab8a framework for settings modifications like in radeon_vid ( /dev/mga_vid can
eyck
parents: 3959
diff changeset
1445 return count;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1446 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1447
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1448 static int mga_vid_mmap(struct file *file, struct vm_area_struct *vma)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1449 {
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1450 mga_card_t * card = (mga_card_t *) file->private_data;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1451
5623
cdf5b88bdaa8 Most of informational printk's ifdef'd.
eyck
parents: 5336
diff changeset
1452 #ifdef MP_DEBUG
61
2a89b5b3ab39 printk() loglevel fix
szabii
parents: 57
diff changeset
1453 printk(KERN_DEBUG "mga_vid: mapping video memory into userspace\n");
5623
cdf5b88bdaa8 Most of informational printk's ifdef'd.
eyck
parents: 5336
diff changeset
1454 #endif
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1455
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1456 if(!card->configured)
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1457 {
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1458 printk(KERN_ERR "mga_vid: card is not configured, cannot mmap\n");
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1459 return(-EAGAIN);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1460 }
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1461
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1462 if(remap_page_range(vma->vm_start, card->mem_base + card->src_base,
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1463 vma->vm_end - vma->vm_start, vma->vm_page_prot))
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1464 {
63
6bdaa0626a9b some printk debug level changed
arpi_esp
parents: 61
diff changeset
1465 printk(KERN_ERR "mga_vid: error mapping video memory\n");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1466 return(-EAGAIN);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1467 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1468
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1469 return(0);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1470 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1471
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1472 static int mga_vid_release(struct inode *inode, struct file *file)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1473 {
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1474 mga_card_t * card;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1475
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1476 //Close the window just in case
5623
cdf5b88bdaa8 Most of informational printk's ifdef'd.
eyck
parents: 5336
diff changeset
1477 #ifdef MP_DEBUG
94
fbd99740af99 printk() message for video off when releasing mga without ioctl()
lgb
parents: 93
diff changeset
1478 printk(KERN_DEBUG "mga_vid: Video OFF (release)\n");
5623
cdf5b88bdaa8 Most of informational printk's ifdef'd.
eyck
parents: 5336
diff changeset
1479 #endif
94
fbd99740af99 printk() message for video off when releasing mga without ioctl()
lgb
parents: 93
diff changeset
1480
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1481 card = (mga_card_t *) file->private_data;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1482
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1483 card->vid_src_ready = 0;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1484 card->regs.besctl &= ~1;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1485 card->regs.besglobctl &= ~(1<<6); // UYVY format selected
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1486 // card->config.colkey_on=0; //!!!
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1487 mga_vid_write_regs(card, 1);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1488 card->vid_in_use = 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1489
93
9b1462feadcb Module usage count not to allow remove module when used
lgb
parents: 91
diff changeset
1490 MOD_DEC_USE_COUNT;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1491 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1492 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1493
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1494 static long long mga_vid_lseek(struct file *file, long long offset, int origin)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1495 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1496 return -ESPIPE;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1497 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1498
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1499 static int mga_vid_open(struct inode *inode, struct file *file)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1500 {
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1501 mga_card_t * card;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1502
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1503 int minor = MINOR(inode->i_rdev);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1504
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1505 if(!file->private_data)
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1506 {
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1507 // we are not using devfs, use the minor
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1508 // number to specify the card we are using
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1509
11000
6e35326c742f many small typo and grammar fixes
gabucino
parents: 10743
diff changeset
1510 // we don't have that many cards
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1511 if(minor >= mga_cards_num)
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1512 return(-ENXIO);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1513
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1514 file->private_data = mga_cards[minor];
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1515 #ifdef MP_DEBUG
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1516 printk(KERN_DEBUG "mga_vid: Not using devfs\n");
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1517 #endif
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1518 }
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1519 #ifdef MP_DEBUG
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1520 else {
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1521 printk(KERN_DEBUG "mga_vid: Using devfs\n");
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1522 }
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1523 #endif
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1524
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1525 card = (mga_card_t *) file->private_data;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1526
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1527 if(card->vid_in_use == 1)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1528 return(-EBUSY);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1529
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1530 card->vid_in_use = 1;
93
9b1462feadcb Module usage count not to allow remove module when used
lgb
parents: 91
diff changeset
1531 MOD_INC_USE_COUNT;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1532 return(0);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1533 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1534
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1535 #if LINUX_VERSION_CODE >= 0x020400
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1536 static struct file_operations mga_vid_fops =
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1537 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1538 llseek: mga_vid_lseek,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1539 read: mga_vid_read,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1540 write: mga_vid_write,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1541 ioctl: mga_vid_ioctl,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1542 mmap: mga_vid_mmap,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1543 open: mga_vid_open,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1544 release: mga_vid_release
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1545 };
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1546 #else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1547 static struct file_operations mga_vid_fops =
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1548 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1549 mga_vid_lseek,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1550 mga_vid_read,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1551 mga_vid_write,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1552 NULL,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1553 NULL,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1554 mga_vid_ioctl,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1555 mga_vid_mmap,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1556 mga_vid_open,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1557 NULL,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1558 mga_vid_release
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1559 };
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1560 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1561
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1562 static void cards_init(mga_card_t * card, struct pci_dev * dev, int card_number, int is_g400)
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1563 {
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1564 unsigned int card_option;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1565 // temp buffer for device filename creation used only by devfs
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1566 #ifdef CONFIG_DEVFS_FS
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1567 char buffer[16];
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1568 #endif
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1569
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1570 memset(card,0,sizeof(mga_card_t));
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1571 card->irq = -1;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1572
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1573 card->pci_dev = dev;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1574 card->irq = dev->irq;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1575 card->is_g400 = is_g400;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1576
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1577 card->param_buff = kmalloc(PARAM_BUFF_SIZE,GFP_KERNEL);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1578 if(card->param_buff) card->param_buff_size = PARAM_BUFF_SIZE;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1579
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1580 card->brightness = mga_brightness[card_number];
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1581 card->contrast = mga_contrast[card_number];
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1582 card->top_reserved = mga_top_reserved[card_number];
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1583
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1584 #if LINUX_VERSION_CODE >= 0x020300
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1585 card->mmio_base = ioremap_nocache(dev->resource[1].start,0x4000);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1586 card->mem_base = dev->resource[0].start;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1587 #else
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1588 card->mmio_base = ioremap_nocache(dev->base_address[1] & PCI_BASE_ADDRESS_MEM_MASK,0x4000);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1589 card->mem_base = dev->base_address[0] & PCI_BASE_ADDRESS_MEM_MASK;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1590 #endif
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1591 printk(KERN_INFO "mga_vid: MMIO at 0x%p IRQ: %d framebuffer: 0x%08X\n", card->mmio_base, card->irq, card->mem_base);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1592
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1593 pci_read_config_dword(dev, 0x40, &card_option);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1594 printk(KERN_INFO "mga_vid: OPTION word: 0x%08X mem: 0x%02X %s\n", card_option,
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1595 (card_option>>10)&0x17, ((card_option>>14)&1)?"SGRAM":"SDRAM");
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1596
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1597 if (mga_ram_size[card_number]) {
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1598 printk(KERN_INFO "mga_vid: RAMSIZE forced to %d MB\n", mga_ram_size[card_number]);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1599 card->ram_size=mga_ram_size[card_number];
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1600 } else {
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1601
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1602 #ifdef MGA_MEMORY_SIZE
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1603 card->ram_size = MGA_MEMORY_SIZE;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1604 printk(KERN_INFO "mga_vid: hard-coded RAMSIZE is %d MB\n", (unsigned int) card->ram_size);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1605
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1606 #else
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1607
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1608 if (card->is_g400){
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1609 switch((card_option>>10)&0x17){
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1610 // SDRAM:
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1611 case 0x00:
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1612 case 0x04: card->ram_size = 16; break;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1613 case 0x03:
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1614 case 0x05: card->ram_size = 32; break;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1615 // SGRAM:
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1616 case 0x10:
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1617 case 0x14: card->ram_size = 32; break;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1618 case 0x11:
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1619 case 0x12: card->ram_size = 16; break;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1620 default:
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1621 card->ram_size = 16;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1622 printk(KERN_INFO "mga_vid: Couldn't detect RAMSIZE, assuming 16MB!");
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1623 }
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1624 /* Check for buggy 16MB cards reporting 32 MB */
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1625 if(card->ram_size != 16 &&
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1626 (dev->subsystem_device == PCI_SUBSYSTEM_ID_MATROX_G400_16MB_SDRAM ||
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1627 dev->subsystem_device == PCI_SUBSYSTEM_ID_MATROX_G400_16MB_SGRAM ||
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1628 dev->subsystem_device == PCI_SUBSYSTEM_ID_MATROX_G400_DH_16MB))
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1629 {
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1630 printk(KERN_INFO "mga_vid: Detected 16MB card reporting %d MB RAMSIZE, overriding\n", card->ram_size);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1631 card->ram_size = 16;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1632 }
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1633 }else{
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1634 switch((card_option>>10)&0x17){
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1635 // case 0x10:
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1636 // case 0x13: card->ram_size = 8; break;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1637 default: card->ram_size = 8;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1638 }
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1639 }
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1640 #if 0
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1641 // printk("List resources -----------\n");
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1642 for(temp=0;temp<DEVICE_COUNT_RESOURCE;temp++){
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1643 struct resource *res=&dev->resource[temp];
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1644 if(res->flags){
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1645 int size=(1+res->end-res->start)>>20;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1646 printk(KERN_DEBUG "res %d: start: 0x%X end: 0x%X (%d MB) flags=0x%X\n",temp,res->start,res->end,size,res->flags);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1647 if(res->flags&(IORESOURCE_MEM|IORESOURCE_PREFETCH)){
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1648 if(size>card->ram_size && size<=64) card->ram_size=size;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1649 }
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1650 }
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1651 }
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1652 #endif
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1653 printk(KERN_INFO "mga_vid: detected RAMSIZE is %d MB\n", (unsigned int) card->ram_size);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1654 #endif
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1655 }
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1656
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1657
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1658 #ifdef MGA_ALLOW_IRQ
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1659 if ( card->irq != -1 ) {
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1660 int tmp = request_irq(card->irq, mga_handle_irq, SA_INTERRUPT | SA_SHIRQ, "Syncfb Time Base", card);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1661 if ( tmp ) {
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1662 printk(KERN_INFO "syncfb (mga): cannot register irq %d (Err: %d)\n", card->irq, tmp);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1663 card->irq=-1;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1664 } else {
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1665 printk(KERN_DEBUG "syncfb (mga): registered irq %d\n", card->irq);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1666 }
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1667 } else {
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1668 printk(KERN_INFO "syncfb (mga): No valid irq was found\n");
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1669 card->irq=-1;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1670 }
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1671 #else
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1672 printk(KERN_INFO "syncfb (mga): IRQ disabled in mga_vid.c\n");
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1673 card->irq=-1;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1674 #endif
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1675
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1676 // register devfs, let the kernel give us major and minor numbers
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1677 #ifdef CONFIG_DEVFS_FS
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1678 snprintf(buffer, 16, "mga_vid%d", card_number);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1679 card->dev_handle = devfs_register(NULL, buffer, DEVFS_FL_AUTO_DEVNUM,
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1680 0, 0,
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1681 S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IFCHR,
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1682 &mga_vid_fops, card);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1683 #endif
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1684
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1685 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1686
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1687 /*
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1688 * Main Initialization Function
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1689 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1690
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1691 static int mga_vid_initialize(void)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1692 {
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1693 int i;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1694
77
9bbba5880f70 printk's updated
arpi_esp
parents: 75
diff changeset
1695 // printk(KERN_INFO "Matrox MGA G200/G400 YUV Video interface v0.01 (c) Aaron Holtzman \n");
4594
ca6d74f72734 g550 memdetect fix - patch by Diego Biurrun <diego@biurrun.de>
arpi
parents: 4559
diff changeset
1696 printk(KERN_INFO "Matrox MGA G200/G400/G450/G550 YUV Video interface v2.01 (c) Aaron Holtzman & A'rpi\n");
90
b97d1e5fddea mga_force_memsize parameter added
szabii
parents: 77
diff changeset
1697
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1698 for(i = 0; i < MGA_MAX_CARDS; i++)
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1699 {
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1700 if (mga_ram_size[i]) {
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1701 if (mga_ram_size[i]<4 || mga_ram_size[i]>64) {
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1702 printk(KERN_ERR "mga_vid: invalid RAMSIZE: %d MB\n", mga_ram_size[i]);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1703 return -EINVAL;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1704 }
90
b97d1e5fddea mga_force_memsize parameter added
szabii
parents: 77
diff changeset
1705 }
b97d1e5fddea mga_force_memsize parameter added
szabii
parents: 77
diff changeset
1706 }
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1707
9639
5422c37e6faa selectable 'major', patch by Hans-Andreas Engel <engel@node.ch>
alex
parents: 9631
diff changeset
1708 if(register_chrdev(major, "mga_vid", &mga_vid_fops))
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1709 {
9639
5422c37e6faa selectable 'major', patch by Hans-Andreas Engel <engel@node.ch>
alex
parents: 9631
diff changeset
1710 printk(KERN_ERR "mga_vid: unable to get major: %d\n", major);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1711 return -EIO;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1712 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1713
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1714 if (!mga_vid_find_card())
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1715 {
61
2a89b5b3ab39 printk() loglevel fix
szabii
parents: 57
diff changeset
1716 printk(KERN_ERR "mga_vid: no supported devices found\n");
9639
5422c37e6faa selectable 'major', patch by Hans-Andreas Engel <engel@node.ch>
alex
parents: 9631
diff changeset
1717 unregister_chrdev(major, "mga_vid");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1718 return -EINVAL;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1719 }
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1720 #ifdef CONFIG_DEVFS_FS
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1721 else {
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1722 // we assume that this always succeedes
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1723 dev_handle = devfs_register(NULL, "mga_vid", DEVFS_FL_AUTO_DEVNUM,
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1724 0,0,
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1725 S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IFCHR,
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1726 &mga_vid_fops, mga_cards[0]);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1727 }
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1728 #endif
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1729
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1730 return(0);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1731 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1732
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1733 int init_module(void)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1734 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1735 return mga_vid_initialize();
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1736 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1737
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1738 void cleanup_module(void)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1739 {
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1740 int i;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1741 mga_card_t * card;
48
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1742
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1743 for (i = 0; i < MGA_MAX_CARDS; i++)
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1744 {
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1745 card = mga_cards[i];
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1746 if(card)
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1747 {
68
001286db4e90 IRQ handler disabled, vcount-based vsync
arpi_esp
parents: 64
diff changeset
1748 #ifdef MGA_ALLOW_IRQ
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1749 if (card->irq != -1)
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1750 free_irq(card->irq, &(card->irq));
68
001286db4e90 IRQ handler disabled, vcount-based vsync
arpi_esp
parents: 64
diff changeset
1751 #endif
48
66ae768fe0ea vsync (4 buffers) implemented
arpi_esp
parents: 42
diff changeset
1752
10743
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1753 if(card->mmio_base)
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1754 iounmap(card->mmio_base);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1755 if(card->param_buff)
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1756 kfree(card->param_buff);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1757 #ifdef CONFIG_DEVFS_FS
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1758 if(card->dev_handle) devfs_unregister(card->dev_handle);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1759 #endif
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1760
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1761 kfree(card);
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1762 mga_cards[i]=NULL;
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1763 }
3d1eab0d9c5a * Add multi device support.
attila
parents: 9639
diff changeset
1764 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1765
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1766 //FIXME turn off BES
63
6bdaa0626a9b some printk debug level changed
arpi_esp
parents: 61
diff changeset
1767 printk(KERN_INFO "mga_vid: Cleaning up module\n");
5653
39115273d236 Mark Schreiber sent link to Marcus Sundburg patch to mga_vid, which enables
eyck
parents: 5623
diff changeset
1768 #ifdef CONFIG_DEVFS_FS
6086
ad794ccafc55 devfs fallback support?
arpi
parents: 5884
diff changeset
1769 if(dev_handle) devfs_unregister(dev_handle);
5764
1e07af707b15 devfs fix?
arpi
parents: 5682
diff changeset
1770 #endif
9639
5422c37e6faa selectable 'major', patch by Hans-Andreas Engel <engel@node.ch>
alex
parents: 9631
diff changeset
1771 unregister_chrdev(major, "mga_vid");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1772 }