annotate drivers/mga_vid.c @ 19415:95ebc082c918

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