annotate vidix/savage_vid.c @ 25661:293aeec83153

Replace the persistent CODECS_FLAG_SELECTED by a local "stringset" with an almost-trivial implementation. This allows making the builtin codec structs const, and it also makes clearer that this "selected" status is not used outside the init functions.
author reimar
date Sat, 12 Jan 2008 14:05:46 +0000
parents 657c63d001ae
children 110952f312cc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1 /*
23046
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
2 * VIDIX driver for S3 Savage chipsets.
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
3 * Copyright (C) 2004 Reza Jelveh
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
4 *
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
5 * This file is part of MPlayer.
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
6 *
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
7 * MPlayer is free software; you can redistribute it and/or modify
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
8 * it under the terms of the GNU General Public License as published by
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
9 * the Free Software Foundation; either version 2 of the License, or
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
10 * (at your option) any later version.
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
11 *
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
12 * MPlayer is distributed in the hope that it will be useful,
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
15 * GNU General Public License for more details.
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
16 *
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
17 * You should have received a copy of the GNU General Public License
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
18 * along with MPlayer; if not, write to the Free Software
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
20 *
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
21 * Thanks to Alex Deucher for Support
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
22 */
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
23
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
24 #include <errno.h>
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
25 #include <stdio.h>
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
26 #include <stdlib.h>
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
27 #include <string.h>
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
28 #include <inttypes.h>
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
29 #include <unistd.h>
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
30 #include <math.h>
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
31
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
32 #include "vidix.h"
22857
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
33 #include "vidixlib.h"
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
34 #include "fourcc.h"
22901
a7605669b114 renamed libdha.[hc] to dha.[hc]
ben
parents: 22900
diff changeset
35 #include "dha.h"
22900
a9e111b88c4a merged libdha and libvidix, moved all files from libdha to vidix directory
ben
parents: 22868
diff changeset
36 #include "pci_ids.h"
a9e111b88c4a merged libdha and libvidix, moved all files from libdha to vidix directory
ben
parents: 22868
diff changeset
37 #include "pci_names.h"
22905
f34e5d778267 consistent include paths for config.h et al.
diego
parents: 22901
diff changeset
38 #include "config.h"
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
39
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
40 #include "savage_regs.h"
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
41
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
42
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
43 #define VF_STREAMS_ON 0x0001
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
44 #define BASE_PAD 0xf
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
45 #define FRAMEBUFFER_SIZE 1024*2000*4
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
46 /**************************************
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
47 S3 streams processor
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
48 **************************************/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
49
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
50 #define EXT_MISC_CTRL2 0x67
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
51
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
52 /* New streams */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
53
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
54 /* CR67[2] = 1 : enable stream 1 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
55 #define ENABLE_STREAM1 0x04
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
56 /* CR67[1] = 1 : enable stream 2 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
57 #define ENABLE_STREAM2 0x02
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
58 /* mask to clear CR67[2,1] */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
59 #define NO_STREAMS 0xF9
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
60 /* CR67[3] = 1 : Mem-mapped regs */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
61 #define USE_MM_FOR_PRI_STREAM 0x08
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
62
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
63 #define HDM_SHIFT 16
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
64 #define HDSCALE_4 (2 << HDM_SHIFT)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
65 #define HDSCALE_8 (3 << HDM_SHIFT)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
66 #define HDSCALE_16 (4 << HDM_SHIFT)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
67 #define HDSCALE_32 (5 << HDM_SHIFT)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
68 #define HDSCALE_64 (6 << HDM_SHIFT)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
69
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
70 /* Old Streams */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
71
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
72 #define ENABLE_STREAMS_OLD 0x0c
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
73 #define NO_STREAMS_OLD 0xf3
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
74 /* CR69[0] = 1 : Mem-mapped regs */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
75 #define USE_MM_FOR_PRI_STREAM_OLD 0x01
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
76
23057
217694b1c1af declare variables and functions as static
ben
parents: 23048
diff changeset
77 static void SavageStreamsOn(void);
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
78
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
79 /*
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
80 * There are two different streams engines used in the Savage line.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
81 * The old engine is in the 3D, 4, Pro, and Twister.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
82 * The new engine is in the 2000, MX, IX, and Super.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
83 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
84
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
85
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
86 /* streams registers for old engine */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
87 #define PSTREAM_CONTROL_REG 0x8180
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
88 #define COL_CHROMA_KEY_CONTROL_REG 0x8184
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
89 #define SSTREAM_CONTROL_REG 0x8190
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
90 #define CHROMA_KEY_UPPER_BOUND_REG 0x8194
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
91 #define SSTREAM_STRETCH_REG 0x8198
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
92 #define COLOR_ADJUSTMENT_REG 0x819C
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
93 #define BLEND_CONTROL_REG 0x81A0
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
94 #define PSTREAM_FBADDR0_REG 0x81C0
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
95 #define PSTREAM_FBADDR1_REG 0x81C4
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
96 #define PSTREAM_STRIDE_REG 0x81C8
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
97 #define DOUBLE_BUFFER_REG 0x81CC
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
98 #define SSTREAM_FBADDR0_REG 0x81D0
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
99 #define SSTREAM_FBADDR1_REG 0x81D4
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
100 #define SSTREAM_STRIDE_REG 0x81D8
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
101 #define SSTREAM_VSCALE_REG 0x81E0
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
102 #define SSTREAM_VINITIAL_REG 0x81E4
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
103 #define SSTREAM_LINES_REG 0x81E8
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
104 #define STREAMS_FIFO_REG 0x81EC
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
105 #define PSTREAM_WINDOW_START_REG 0x81F0
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
106 #define PSTREAM_WINDOW_SIZE_REG 0x81F4
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
107 #define SSTREAM_WINDOW_START_REG 0x81F8
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
108 #define SSTREAM_WINDOW_SIZE_REG 0x81FC
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
109 #define FIFO_CONTROL 0x8200
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
110 #define PSTREAM_FBSIZE_REG 0x8300
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
111 #define SSTREAM_FBSIZE_REG 0x8304
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
112 #define SSTREAM_FBADDR2_REG 0x8308
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
113
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
114 #define OS_XY(x,y) (((x+1)<<16)|(y+1))
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
115 #define OS_WH(x,y) (((x-1)<<16)|(y))
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
116
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
117 #define PCI_COMMAND_MEM 0x2
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
118 #define MAX_FRAMES 3
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
119 /**
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
120 * @brief Information on PCI device.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
121 */
23057
217694b1c1af declare variables and functions as static
ben
parents: 23048
diff changeset
122 static pciinfo_t pci_info;
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
123
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
124 #define outb(reg,val) OUTPORT8(reg,val)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
125 #define inb(reg) INPORT8(reg)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
126 #define outw(reg,val) OUTPORT16(reg,val)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
127 #define inw(reg) INPORT16(reg)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
128 #define outl(reg,val) OUTPORT32(reg,val)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
129 #define inl(reg) INPORT32(reg)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
130
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
131
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
132 /*
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
133 * PCI-Memory IO access macros.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
134 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
135 #define VID_WR08(p,i,val) (((uint8_t *)(p))[(i)]=(val))
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
136 #define VID_RD08(p,i) (((uint8_t *)(p))[(i)])
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
137
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
138 #define VID_WR32(p,i,val) (((uint32_t *)(p))[(i)/4]=(val))
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
139 #define VID_RD32(p,i) (((uint32_t *)(p))[(i)/4])
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
140
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
141 #ifndef USE_RMW_CYCLES
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
142 /*
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
143 * Can be used to inhibit READ-MODIFY-WRITE cycles. On by default.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
144 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
145
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
146 #define MEM_BARRIER() __asm__ __volatile__ ("" : : : "memory")
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
147
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
148 #undef VID_WR08
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
149 #define VID_WR08(p,i,val) ({ MEM_BARRIER(); ((uint8_t *)(p))[(i)]=(val); })
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
150 #undef VID_RD08
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
151 #define VID_RD08(p,i) ({ MEM_BARRIER(); ((uint8_t *)(p))[(i)]; })
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
152
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
153 #undef VID_WR16
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
154 #define VID_WR16(p,i,val) ({ MEM_BARRIER(); ((uint16_t *)(p))[(i)/2]=(val); })
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
155 #undef VID_RD16
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
156 #define VID_RD16(p,i) ({ MEM_BARRIER(); ((uint16_t *)(p))[(i)/2]; })
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
157
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
158 #undef VID_WR32
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
159 #define VID_WR32(p,i,val) ({ MEM_BARRIER(); ((uint32_t *)(p))[(i)/4]=(val); })
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
160 #undef VID_RD32
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
161 #define VID_RD32(p,i) ({ MEM_BARRIER(); ((uint32_t *)(p))[(i)/4]; })
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
162 #endif /* USE_RMW_CYCLES */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
163
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
164 #define VID_AND32(p,i,val) VID_WR32(p,i,VID_RD32(p,i)&(val))
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
165 #define VID_OR32(p,i,val) VID_WR32(p,i,VID_RD32(p,i)|(val))
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
166 #define VID_XOR32(p,i,val) VID_WR32(p,i,VID_RD32(p,i)^(val))
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
167
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
168
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
169 /* from x driver */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
170
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
171 #define VGAIN8(addr) VID_RD08(info->control_base+0x8000, addr)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
172 #define VGAIN16(addr) VID_RD16(info->control_base+0x8000, addr)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
173 #define VGAIN(addr) VID_RD32(info->control_base+0x8000, addr)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
174
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
175 #define VGAOUT8(addr,val) VID_WR08(info->control_base+0x8000, addr, val)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
176 #define VGAOUT16(addr,val) VID_WR16(info->control_base+0x8000, addr, val)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
177 #define VGAOUT(addr,val) VID_WR32(info->control_base+0x8000, addr, val)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
178
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
179 #define INREG(addr) VID_RD32(info->control_base, addr)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
180 #define OUTREG(addr,val) VID_WR32(info->control_base, addr, val)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
181 #define INREG8(addr) VID_RD08(info->control_base, addr)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
182 #define OUTREG8(addr,val) VID_WR08(info->control_base, addr, val)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
183 #define INREG16(addr) VID_RD16(info->control_base, addr)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
184 #define OUTREG16(addr,val) VID_WR16(info->control_base, addr, val)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
185
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
186 #define ALIGN_TO(v, n) (((v) + (n-1)) & ~(n-1))
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
187
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
188
23057
217694b1c1af declare variables and functions as static
ben
parents: 23048
diff changeset
189 static void debugout(unsigned int addr, unsigned int val);
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
190
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
191
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
192 struct savage_chip {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
193 volatile uint32_t *PMC; /* general control */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
194 volatile uint32_t *PME; /* multimedia port */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
195 volatile uint32_t *PFB; /* framebuffer control */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
196 volatile uint32_t *PVIDEO; /* overlay control */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
197 volatile uint8_t *PCIO; /* SVGA (CRTC, ATTR) registers */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
198 volatile uint8_t *PVIO; /* SVGA (MISC, GRAPH, SEQ) registers */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
199 volatile uint32_t *PRAMIN; /* instance memory */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
200 volatile uint32_t *PRAMHT; /* hash table */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
201 volatile uint32_t *PRAMFC; /* fifo context table */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
202 volatile uint32_t *PRAMRO; /* fifo runout table */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
203 volatile uint32_t *PFIFO; /* fifo control region */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
204 volatile uint32_t *FIFO; /* fifo channels (USER) */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
205 volatile uint32_t *PGRAPH; /* graphics engine */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
206
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
207 int arch; /* compatible NV_ARCH_XX define */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
208 unsigned long fbsize; /* framebuffer size */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
209 void (* lock) (struct savage_chip *, int);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
210 };
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
211 typedef struct savage_chip savage_chip;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
212
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
213
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
214 struct savage_info {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
215 unsigned int use_colorkey;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
216 unsigned int colorkey; /* saved xv colorkey*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
217 unsigned int vidixcolorkey; /*currently used colorkey*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
218 unsigned int depth;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
219 unsigned int bpp;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
220 unsigned int videoFlags;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
221 unsigned int format;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
222 unsigned int pitch;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
223 unsigned int blendBase;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
224 unsigned int lastKnownPitch;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
225 unsigned int displayWidth, displayHeight;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
226 unsigned int brightness,hue,saturation,contrast;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
227 unsigned int src_w,src_h;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
228 unsigned int drw_w,drw_h; /*scaled width && height*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
229 unsigned int wx,wy; /*window x && y*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
230 unsigned int screen_x; /*screen width*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
231 unsigned int screen_y; /*screen height*/
25370
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
232 unsigned long frame_size; /* frame size */
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
233 struct savage_chip chip; /* NV architecture structure */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
234 void* video_base; /* virtual address of control region */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
235 void* control_base; /* virtual address of fb region */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
236 unsigned long picture_base; /* direct pointer to video picture */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
237 unsigned long picture_offset; /* offset of video picture in frame buffer */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
238 // struct savage_dma dma; /* DMA structure */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
239 unsigned int num_frames; /* number of buffers */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
240 int bps; /* bytes per line */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
241 void (*SavageWaitIdle) ();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
242 void (*SavageWaitFifo) (int space);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
243 };
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
244 typedef struct savage_info savage_info;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
245
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
246
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
247 static savage_info* info;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
248
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
249
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
250 /**
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
251 * @brief Unichrome driver vidix capabilities.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
252 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
253 static vidix_capability_t savage_cap = {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
254 "Savage/ProSavage/Twister vidix",
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
255 "Reza Jelveh <reza.jelveh@tuhh.de>",
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
256 TYPE_OUTPUT,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
257 {0, 0, 0, 0},
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
258 4096,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
259 4096,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
260 4,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
261 4,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
262 -1,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
263 FLAG_UPSCALER | FLAG_DOWNSCALER,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
264 VENDOR_S3_INC,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
265 -1,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
266 {0, 0, 0, 0}
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
267 };
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
268
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
269 struct savage_cards {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
270 unsigned short chip_id;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
271 unsigned short arch;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
272 };
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
273
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
274
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
275 static
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
276 unsigned int GetBlendForFourCC( int id )
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
277 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
278 switch( id ) {
25274
cfb786831ff7 sync with vidix.sf.net r317: fixes colorspace issues for vidix savage driver
ben
parents: 25257
diff changeset
279 case IMGFMT_UYVY:
cfb786831ff7 sync with vidix.sf.net r317: fixes colorspace issues for vidix savage driver
ben
parents: 25257
diff changeset
280 return 0;
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
281 case IMGFMT_YUY2:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
282 return 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
283 case IMGFMT_Y211:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
284 return 4;
25274
cfb786831ff7 sync with vidix.sf.net r317: fixes colorspace issues for vidix savage driver
ben
parents: 25257
diff changeset
285 case IMGFMT_BGR15:
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
286 return 3;
25274
cfb786831ff7 sync with vidix.sf.net r317: fixes colorspace issues for vidix savage driver
ben
parents: 25257
diff changeset
287 case IMGFMT_BGR16:
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
288 return 5;
25368
8362d7605961 bgr24 and bgr32 support
ben
parents: 25367
diff changeset
289 case IMGFMT_BGR24:
8362d7605961 bgr24 and bgr32 support
ben
parents: 25367
diff changeset
290 return 6;
8362d7605961 bgr24 and bgr32 support
ben
parents: 25367
diff changeset
291 case IMGFMT_BGR32:
8362d7605961 bgr24 and bgr32 support
ben
parents: 25367
diff changeset
292 return 7;
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
293 default:
25274
cfb786831ff7 sync with vidix.sf.net r317: fixes colorspace issues for vidix savage driver
ben
parents: 25257
diff changeset
294 return 1;
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
295 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
296 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
297
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
298 /**
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
299 * @brief list of card IDs compliant with the Unichrome driver .
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
300 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
301 static struct savage_cards savage_card_ids[] = {
25257
e5bdf17ce399 synchronized with vidix.sf.net r315: update savage driver pci ids list
ben
parents: 23060
diff changeset
302 /* Savage3D */
e5bdf17ce399 synchronized with vidix.sf.net r315: update savage driver pci ids list
ben
parents: 23060
diff changeset
303 { DEVICE_S3_INC_86C794_SAVAGE_3D, S3_SAVAGE3D },
e5bdf17ce399 synchronized with vidix.sf.net r315: update savage driver pci ids list
ben
parents: 23060
diff changeset
304 { DEVICE_S3_INC_86C390_SAVAGE_3D_MV, S3_SAVAGE3D },
e5bdf17ce399 synchronized with vidix.sf.net r315: update savage driver pci ids list
ben
parents: 23060
diff changeset
305 /* Savage4 */
e5bdf17ce399 synchronized with vidix.sf.net r315: update savage driver pci ids list
ben
parents: 23060
diff changeset
306 { DEVICE_S3_INC_SAVAGE_4, S3_SAVAGE4 },
e5bdf17ce399 synchronized with vidix.sf.net r315: update savage driver pci ids list
ben
parents: 23060
diff changeset
307 { DEVICE_S3_INC_SAVAGE_42, S3_SAVAGE4 },
e5bdf17ce399 synchronized with vidix.sf.net r315: update savage driver pci ids list
ben
parents: 23060
diff changeset
308 /* SavageMX */
e5bdf17ce399 synchronized with vidix.sf.net r315: update savage driver pci ids list
ben
parents: 23060
diff changeset
309 { DEVICE_S3_INC_86C270_294_SAVAGE_MX_MV, S3_SAVAGE_MX },
e5bdf17ce399 synchronized with vidix.sf.net r315: update savage driver pci ids list
ben
parents: 23060
diff changeset
310 { DEVICE_S3_INC_82C270_294_SAVAGE_MX, S3_SAVAGE_MX },
e5bdf17ce399 synchronized with vidix.sf.net r315: update savage driver pci ids list
ben
parents: 23060
diff changeset
311 { DEVICE_S3_INC_86C270_294_SAVAGE_IX_MV, S3_SAVAGE_MX },
e5bdf17ce399 synchronized with vidix.sf.net r315: update savage driver pci ids list
ben
parents: 23060
diff changeset
312 /* SuperSavage */
e5bdf17ce399 synchronized with vidix.sf.net r315: update savage driver pci ids list
ben
parents: 23060
diff changeset
313 { DEVICE_S3_INC_SUPERSAVAGE_MX_128, S3_SUPERSAVAGE },
e5bdf17ce399 synchronized with vidix.sf.net r315: update savage driver pci ids list
ben
parents: 23060
diff changeset
314 { DEVICE_S3_INC_SUPERSAVAGE_MX_64, S3_SUPERSAVAGE },
e5bdf17ce399 synchronized with vidix.sf.net r315: update savage driver pci ids list
ben
parents: 23060
diff changeset
315 { DEVICE_S3_INC_SUPERSAVAGE_MX_64C, S3_SUPERSAVAGE },
e5bdf17ce399 synchronized with vidix.sf.net r315: update savage driver pci ids list
ben
parents: 23060
diff changeset
316 { DEVICE_S3_INC_SUPERSAVAGE_IX_128_SDR, S3_SUPERSAVAGE },
e5bdf17ce399 synchronized with vidix.sf.net r315: update savage driver pci ids list
ben
parents: 23060
diff changeset
317 { DEVICE_S3_INC_SUPERSAVAGE_IX_128_DDR, S3_SUPERSAVAGE },
e5bdf17ce399 synchronized with vidix.sf.net r315: update savage driver pci ids list
ben
parents: 23060
diff changeset
318 { DEVICE_S3_INC_SUPERSAVAGE_IX_64_SDR, S3_SUPERSAVAGE },
e5bdf17ce399 synchronized with vidix.sf.net r315: update savage driver pci ids list
ben
parents: 23060
diff changeset
319 { DEVICE_S3_INC_SUPERSAVAGE_IX_64_DDR, S3_SUPERSAVAGE },
e5bdf17ce399 synchronized with vidix.sf.net r315: update savage driver pci ids list
ben
parents: 23060
diff changeset
320 { DEVICE_S3_INC_SUPERSAVAGE_IX_C_SDR, S3_SUPERSAVAGE },
e5bdf17ce399 synchronized with vidix.sf.net r315: update savage driver pci ids list
ben
parents: 23060
diff changeset
321 { DEVICE_S3_INC_SUPERSAVAGE_IX_C_DDR, S3_SUPERSAVAGE },
e5bdf17ce399 synchronized with vidix.sf.net r315: update savage driver pci ids list
ben
parents: 23060
diff changeset
322 /* ProSavage */
e5bdf17ce399 synchronized with vidix.sf.net r315: update savage driver pci ids list
ben
parents: 23060
diff changeset
323 { DEVICE_S3_INC_PROSAVAGE_PM133, S3_PROSAVAGE },
e5bdf17ce399 synchronized with vidix.sf.net r315: update savage driver pci ids list
ben
parents: 23060
diff changeset
324 { DEVICE_S3_INC_PROSAVAGE_KM133, S3_PROSAVAGE },
e5bdf17ce399 synchronized with vidix.sf.net r315: update savage driver pci ids list
ben
parents: 23060
diff changeset
325 { DEVICE_S3_INC_86C380_PROSAVAGEDDR_K4M266, S3_PROSAVAGE },
e5bdf17ce399 synchronized with vidix.sf.net r315: update savage driver pci ids list
ben
parents: 23060
diff changeset
326 { DEVICE_S3_INC_VT8636A_PROSAVAGE_KN133, S3_PROSAVAGE },
e5bdf17ce399 synchronized with vidix.sf.net r315: update savage driver pci ids list
ben
parents: 23060
diff changeset
327 { DEVICE_S3_INC_VT8751_PROSAVAGEDDR_P4M266, S3_PROSAVAGE },
e5bdf17ce399 synchronized with vidix.sf.net r315: update savage driver pci ids list
ben
parents: 23060
diff changeset
328 { DEVICE_S3_INC_VT8375_PROSAVAGE8_KM266_KL266, S3_PROSAVAGE },
e5bdf17ce399 synchronized with vidix.sf.net r315: update savage driver pci ids list
ben
parents: 23060
diff changeset
329 /* Savage2000 */
e5bdf17ce399 synchronized with vidix.sf.net r315: update savage driver pci ids list
ben
parents: 23060
diff changeset
330 { DEVICE_S3_INC_86C410_SAVAGE_2000, S3_SAVAGE2000 },
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
331 };
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
332
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
333 static void SavageSetColorOld(void)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
334 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
335
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
336
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
337 if(
25367
c84e99bead4b rgb -> bgr
ben
parents: 25275
diff changeset
338 (info->format == IMGFMT_BGR15) ||
c84e99bead4b rgb -> bgr
ben
parents: 25275
diff changeset
339 (info->format == IMGFMT_BGR16)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
340 )
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
341 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
342 OUTREG( COLOR_ADJUSTMENT_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
343 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
344 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
345 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
346 /* Change 0..255 into 0..15 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
347 long sat = info->saturation * 16 / 256;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
348 double hue = info->hue * 0.017453292;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
349 unsigned long hs1 = ((long)(sat * cos(hue))) & 0x1f;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
350 unsigned long hs2 = ((long)(sat * sin(hue))) & 0x1f;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
351
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
352 OUTREG( COLOR_ADJUSTMENT_REG,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
353 0x80008000 |
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
354 (info->brightness + 128) |
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
355 ((info->contrast & 0xf8) << (12-7)) |
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
356 (hs1 << 16) |
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
357 (hs2 << 24)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
358 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
359 debugout( COLOR_ADJUSTMENT_REG,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
360 0x80008000 |
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
361 (info->brightness + 128) |
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
362 ((info->contrast & 0xf8) << (12-7)) |
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
363 (hs1 << 16) |
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
364 (hs2 << 24)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
365 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
366
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
367 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
368 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
369
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
370 static void SavageSetColorKeyOld(void)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
371 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
372 int red, green, blue;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
373
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
374 /* Here, we reset the colorkey and all the controls. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
375
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
376 red = (info->vidixcolorkey & 0x00FF0000) >> 16;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
377 green = (info->vidixcolorkey & 0x0000FF00) >> 8;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
378 blue = info->vidixcolorkey & 0x000000FF;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
379
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
380 if( !info->vidixcolorkey ) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
381 printf("SavageSetColorKey disabling colorkey\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
382 OUTREG( COL_CHROMA_KEY_CONTROL_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
383 OUTREG( CHROMA_KEY_UPPER_BOUND_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
384 OUTREG( BLEND_CONTROL_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
385 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
386 else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
387 switch (info->depth) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
388 // FIXME: isnt fixed yet
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
389 case 8:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
390 OUTREG( COL_CHROMA_KEY_CONTROL_REG,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
391 0x37000000 | (info->vidixcolorkey & 0xFF) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
392 OUTREG( CHROMA_KEY_UPPER_BOUND_REG,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
393 0x00000000 | (info->vidixcolorkey & 0xFF) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
394 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
395 case 15:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
396 /* 15 bpp 555 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
397 red&=0x1f;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
398 green&=0x1f;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
399 blue&=0x1f;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
400 OUTREG( COL_CHROMA_KEY_CONTROL_REG,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
401 0x05000000 | (red<<19) | (green<<11) | (blue<<3) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
402 OUTREG( CHROMA_KEY_UPPER_BOUND_REG,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
403 0x00000000 | (red<<19) | (green<<11) | (blue<<3) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
404 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
405 case 16:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
406 /* 16 bpp 565 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
407 red&=0x1f;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
408 green&=0x3f;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
409 blue&=0x1f;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
410 OUTREG( COL_CHROMA_KEY_CONTROL_REG,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
411 0x16000000 | (red<<19) | (green<<10) | (blue<<3) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
412 OUTREG( CHROMA_KEY_UPPER_BOUND_REG,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
413 0x00020002 | (red<<19) | (green<<10) | (blue<<3) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
414 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
415 case 24:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
416 /* 24 bpp 888 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
417 OUTREG( COL_CHROMA_KEY_CONTROL_REG,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
418 0x17000000 | (red<<16) | (green<<8) | (blue) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
419 OUTREG( CHROMA_KEY_UPPER_BOUND_REG,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
420 0x00000000 | (red<<16) | (green<<8) | (blue) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
421 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
422 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
423
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
424 /* We use destination colorkey */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
425 OUTREG( BLEND_CONTROL_REG, 0x05000000 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
426 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
427 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
428
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
429
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
430 static void
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
431 SavageDisplayVideoOld(void)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
432 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
433 int vgaCRIndex, vgaCRReg, vgaIOBase;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
434 unsigned int ssControl;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
435 int cr92;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
436
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
437
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
438 vgaIOBase = 0x3d0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
439 vgaCRIndex = vgaIOBase + 4;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
440 vgaCRReg = vgaIOBase + 5;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
441
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
442 // if( psav->videoFourCC != id )
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
443 // SavageStreamsOff(pScrn);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
444
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
445 if( !info->videoFlags & VF_STREAMS_ON )
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
446 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
447 SavageStreamsOn();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
448 // SavageResetVideo();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
449 SavageSetColorOld();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
450 SavageSetColorKeyOld();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
451 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
452
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
453
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
454
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
455
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
456 /* Calculate horizontal scale factor. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
457
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
458 //FIXME: enable scaling
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
459 OUTREG(SSTREAM_STRETCH_REG, (info->src_w << 15) / info->drw_w );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
460 // debugout(SSTREAM_STRETCH_REG, 1 << 15);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
461
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
462 OUTREG(SSTREAM_LINES_REG, info->src_h );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
463 debugout(SSTREAM_LINES_REG, info->src_h );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
464
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
465
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
466 OUTREG(SSTREAM_VINITIAL_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
467 debugout(SSTREAM_VINITIAL_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
468 /* Calculate vertical scale factor. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
469
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
470 // OUTREG(SSTREAM_VSCALE_REG, 1 << 15);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
471 OUTREG(SSTREAM_VSCALE_REG, VSCALING(info->src_h,info->drw_h) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
472 debugout(SSTREAM_VSCALE_REG, VSCALING(info->src_h,info->drw_h) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
473 // OUTREG(SSTREAM_VSCALE_REG, (info->src_h << 15) / info->drw_h );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
474
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
475 /* Set surface location and stride. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
476
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
477 OUTREG(SSTREAM_FBADDR0_REG, info->picture_offset );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
478 debugout(SSTREAM_FBADDR0_REG, info->picture_offset );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
479
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
480 OUTREG(SSTREAM_FBADDR1_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
481 debugout(SSTREAM_FBADDR1_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
482
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
483 OUTREG(SSTREAM_STRIDE_REG, info->pitch );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
484 debugout(SSTREAM_STRIDE_REG, info->pitch );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
485
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
486 OUTREG(SSTREAM_WINDOW_START_REG, OS_XY(info->wx, info->wy) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
487 debugout(SSTREAM_WINDOW_START_REG, OS_XY(info->wx, info->wy) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
488 OUTREG(SSTREAM_WINDOW_SIZE_REG, OS_WH(info->drw_w, info->drw_h) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
489 debugout(SSTREAM_WINDOW_SIZE_REG, OS_WH(info->drw_w, info->drw_h) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
490
25274
cfb786831ff7 sync with vidix.sf.net r317: fixes colorspace issues for vidix savage driver
ben
parents: 25257
diff changeset
491 /* Set surface format and adjust scaling */
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
492
25274
cfb786831ff7 sync with vidix.sf.net r317: fixes colorspace issues for vidix savage driver
ben
parents: 25257
diff changeset
493 ssControl = GetBlendForFourCC(info->format) << 24 | info->src_w;
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
494
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
495 if( info->src_w > (info->drw_w << 1) )
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
496 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
497 /* BUGBUG shouldn't this be >=? */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
498 if( info->src_w <= (info->drw_w << 2) )
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
499 ssControl |= HDSCALE_4;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
500 else if( info->src_w > (info->drw_w << 3) )
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
501 ssControl |= HDSCALE_8;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
502 else if( info->src_w > (info->drw_w << 4) )
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
503 ssControl |= HDSCALE_16;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
504 else if( info->src_w > (info->drw_w << 5) )
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
505 ssControl |= HDSCALE_32;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
506 else if( info->src_w > (info->drw_w << 6) )
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
507 ssControl |= HDSCALE_64;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
508 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
509
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
510 OUTREG(SSTREAM_CONTROL_REG, ssControl);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
511 debugout(SSTREAM_CONTROL_REG, ssControl);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
512
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
513 // FIXME: this should actually be enabled
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
514
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
515 info->pitch = (info->pitch + 7) / 8;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
516 VGAOUT8(vgaCRIndex, 0x92);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
517 cr92 = VGAIN8(vgaCRReg);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
518 VGAOUT8(vgaCRReg, (cr92 & 0x40) | (info->pitch >> 8) | 0x80);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
519 VGAOUT8(vgaCRIndex, 0x93);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
520 VGAOUT8(vgaCRReg, info->pitch);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
521 OUTREG(STREAMS_FIFO_REG, 2 | 25 << 5 | 32 << 11);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
522
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
523
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
524
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
525
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
526 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
527
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
528 static void SavageInitStreamsOld(void)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
529 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
530 /*unsigned long jDelta;*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
531 unsigned long format = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
532
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
533 /*
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
534 * For the OLD streams engine, several of these registers
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
535 * cannot be touched unless streams are on. Seems backwards to me;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
536 * I'd want to set 'em up, then cut 'em loose.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
537 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
538
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
539
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
540 /*jDelta = pScrn->displayWidth * (pScrn->bitsPerPixel + 7) / 8;*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
541 switch( info->depth ) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
542 case 8: format = 0 << 24; break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
543 case 15: format = 3 << 24; break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
544 case 16: format = 5 << 24; break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
545 case 24: format = 7 << 24; break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
546 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
547 #warning enable this again
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
548 OUTREG(PSTREAM_FBSIZE_REG,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
549 info->screen_y * info->screen_x * (info->bpp >> 3));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
550
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
551 OUTREG( PSTREAM_WINDOW_START_REG, OS_XY(0,0) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
552 OUTREG( PSTREAM_WINDOW_SIZE_REG, OS_WH(info->screen_x, info->screen_y) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
553 OUTREG( PSTREAM_FBADDR1_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
554 /*OUTREG( PSTREAM_STRIDE_REG, jDelta );*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
555 OUTREG( PSTREAM_CONTROL_REG, format );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
556 OUTREG( PSTREAM_FBADDR0_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
557
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
558 /*OUTREG( PSTREAM_FBSIZE_REG, jDelta * pScrn->virtualY >> 3 );*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
559
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
560 OUTREG( COL_CHROMA_KEY_CONTROL_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
561 OUTREG( SSTREAM_CONTROL_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
562 OUTREG( CHROMA_KEY_UPPER_BOUND_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
563 OUTREG( SSTREAM_STRETCH_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
564 OUTREG( COLOR_ADJUSTMENT_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
565 OUTREG( BLEND_CONTROL_REG, 1 << 24 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
566 OUTREG( DOUBLE_BUFFER_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
567 OUTREG( SSTREAM_FBADDR0_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
568 OUTREG( SSTREAM_FBADDR1_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
569 OUTREG( SSTREAM_FBADDR2_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
570 OUTREG( SSTREAM_FBSIZE_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
571 OUTREG( SSTREAM_STRIDE_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
572 OUTREG( SSTREAM_VSCALE_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
573 OUTREG( SSTREAM_LINES_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
574 OUTREG( SSTREAM_VINITIAL_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
575 #warning is this needed?
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
576 OUTREG( SSTREAM_WINDOW_START_REG, OS_XY(0xfffe, 0xfffe) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
577 OUTREG( SSTREAM_WINDOW_SIZE_REG, OS_WH(10,2) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
578
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
579 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
580
23057
217694b1c1af declare variables and functions as static
ben
parents: 23048
diff changeset
581 static void
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
582 SavageStreamsOn(void)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
583 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
584 unsigned char jStreamsControl;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
585 unsigned short vgaCRIndex = 0x3d0 + 4;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
586 unsigned short vgaCRReg = 0x3d0 + 5;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
587
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
588 // xf86ErrorFVerb(STREAMS_TRACE, "SavageStreamsOn\n" );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
589
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
590 /* Sequence stolen from streams.c in M7 NT driver */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
591
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
592
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
593 enable_app_io ();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
594
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
595 VGAOUT8( vgaCRIndex, EXT_MISC_CTRL2 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
596
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
597 if( S3_SAVAGE_MOBILE_SERIES(info->chip.arch) )
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
598 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
599 // SavageInitStreamsNew( pScrn );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
600
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
601 jStreamsControl = VGAIN8( vgaCRReg ) | ENABLE_STREAM1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
602
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
603 /* Wait for VBLANK. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
604 VerticalRetraceWait();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
605 /* Fire up streams! */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
606 VGAOUT16( vgaCRIndex, (jStreamsControl << 8) | EXT_MISC_CTRL2 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
607 /* These values specify brightness, contrast, saturation and hue. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
608 OUTREG( SEC_STREAM_COLOR_CONVERT1, 0x0000C892 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
609 OUTREG( SEC_STREAM_COLOR_CONVERT2, 0x00039F9A );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
610 OUTREG( SEC_STREAM_COLOR_CONVERT3, 0x01F1547E );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
611 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
612 else if (info->chip.arch == S3_SAVAGE2000)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
613 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
614 // SavageInitStreams2000( pScrn );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
615
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
616 jStreamsControl = VGAIN8( vgaCRReg ) | ENABLE_STREAM1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
617
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
618 /* Wait for VBLANK. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
619 VerticalRetraceWait();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
620 /* Fire up streams! */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
621 VGAOUT16( vgaCRIndex, (jStreamsControl << 8) | EXT_MISC_CTRL2 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
622 /* These values specify brightness, contrast, saturation and hue. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
623 OUTREG( SEC_STREAM_COLOR_CONVERT0_2000, 0x0000C892 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
624 OUTREG( SEC_STREAM_COLOR_CONVERT1_2000, 0x00033400 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
625 OUTREG( SEC_STREAM_COLOR_CONVERT2_2000, 0x000001CF );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
626 OUTREG( SEC_STREAM_COLOR_CONVERT3_2000, 0x01F1547E );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
627 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
628 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
629 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
630 jStreamsControl = VGAIN8( vgaCRReg ) | ENABLE_STREAMS_OLD;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
631
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
632 /* Wait for VBLANK. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
633
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
634 VerticalRetraceWait();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
635
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
636 /* Fire up streams! */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
637
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
638 VGAOUT16( vgaCRIndex, (jStreamsControl << 8) | EXT_MISC_CTRL2 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
639
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
640 SavageInitStreamsOld( );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
641 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
642
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
643 /* Wait for VBLANK. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
644
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
645 VerticalRetraceWait();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
646
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
647 /* Turn on secondary stream TV flicker filter, once we support TV. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
648
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
649 /* SR70 |= 0x10 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
650
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
651 info->videoFlags |= VF_STREAMS_ON;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
652
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
653 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
654
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
655
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
656
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
657
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
658 static void savage_getscreenproperties(struct savage_info *info){
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
659 unsigned char bpp=0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
660
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
661 uint32_t vgaIOBase, vgaCRIndex, vgaCRReg;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
662
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
663 vgaIOBase = 0x3d0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
664 vgaCRIndex = vgaIOBase + 4;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
665 vgaCRReg = vgaIOBase + 5;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
666
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
667
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
668 /* a little reversed from x driver source code */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
669 VGAOUT8(vgaCRIndex, 0x67);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
670 bpp = VGAIN8(vgaCRReg);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
671
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
672
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
673 switch (bpp&0xf0) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
674 case 0x00:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
675 case 0x10:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
676 info->depth=8;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
677 info->bpp=8;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
678 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
679 case 0x20:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
680 case 0x30:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
681 info->depth=15;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
682 info->bpp=16;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
683 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
684 case 0x40:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
685 case 0x50:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
686 info->depth=16;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
687 info->bpp=16;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
688 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
689 case 0x70:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
690 case 0xd0:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
691 info->depth=24;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
692 info->bpp=32;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
693 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
694
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
695
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
696 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
697
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
698
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
699 VGAOUT8(vgaCRIndex, 0x1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
700 info->screen_x = (1 + VGAIN8(vgaCRReg)) <<3;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
701 /*get screen height*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
702 /* get first 8 bits in VT_DISPLAY_END*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
703 VGAOUT8(0x03D4, 0x12);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
704 info->screen_y = VGAIN8(0x03D5);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
705 VGAOUT8(0x03D4,0x07);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
706 /* get 9th bit in CRTC_OVERFLOW*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
707 info->screen_y |= (VGAIN8(0x03D5) &0x02)<<7;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
708 /* and the 10th in CRTC_OVERFLOW*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
709 info->screen_y |=(VGAIN8(0x03D5) &0x40)<<3;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
710 ++info->screen_y;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
711
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
712 printf("screen_x = %d, screen_y = %d, bpp = %d\n",info->screen_x,info->screen_y,info->bpp);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
713 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
714
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
715
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
716 static void SavageStreamsOff(void)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
717 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
718 unsigned char jStreamsControl;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
719 unsigned short vgaCRIndex = 0x3d0 + 4;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
720 unsigned short vgaCRReg = 0x3d0 + 5;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
721
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
722 VGAOUT8( vgaCRIndex, EXT_MISC_CTRL2 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
723 if( S3_SAVAGE_MOBILE_SERIES(info->chip.arch) ||
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
724 (info->chip.arch == S3_SUPERSAVAGE) ||
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
725 (info->chip.arch == S3_SAVAGE2000) )
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
726 jStreamsControl = VGAIN8( vgaCRReg ) & NO_STREAMS;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
727 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
728 jStreamsControl = VGAIN8( vgaCRReg ) & NO_STREAMS_OLD;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
729
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
730 /* Wait for VBLANK. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
731
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
732 VerticalRetraceWait();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
733
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
734 /* Kill streams. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
735
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
736 VGAOUT16(vgaCRIndex, (jStreamsControl << 8) | EXT_MISC_CTRL2 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
737
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
738 VGAOUT16(vgaCRIndex, 0x0093 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
739 VGAOUT8( vgaCRIndex, 0x92 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
740 VGAOUT8( vgaCRReg, VGAIN8(vgaCRReg) & 0x40 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
741
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
742 info->videoFlags &= ~VF_STREAMS_ON;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
743 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
744
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
745 /**
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
746 * @brief Find chip index in Unichrome compliant devices list.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
747 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
748 * @param chip_id PCI device ID.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
749 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
750 * @returns index position in savage_card_ids if successful.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
751 * -1 if chip_id is not a compliant chipset ID.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
752 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
753
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
754 static int find_chip(unsigned chip_id){
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
755 unsigned i;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
756 for(i = 0;i < sizeof(savage_card_ids)/sizeof(struct savage_cards);i++)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
757 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
758 if(chip_id == savage_card_ids[i].chip_id)return i;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
759 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
760 return -1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
761 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
762
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
763 /**
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
764 * @brief Probe hardware to find some useable chipset.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
765 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
766 * @param verbose specifies verbose level.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
767 * @param force specifies force mode : driver should ignore
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
768 * device_id (danger but useful for new devices)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
769 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
770 * @returns 0 if it can handle something in PC.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
771 * a negative error code otherwise.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
772 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
773
22857
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
774 static int savage_probe(int verbose, int force){
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
775 pciinfo_t lst[MAX_PCI_DEVICES];
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
776 unsigned i,num_pci;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
777 int err;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
778
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
779 if (force)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
780 printf("[savage_vid]: warning: forcing not supported yet!\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
781 err = pci_scan(lst,&num_pci);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
782 if(err){
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
783 printf("[savage_vid] Error occurred during pci scan: %s\n",strerror(err));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
784 return err;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
785 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
786 else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
787 err = ENXIO;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
788 for(i=0; i < num_pci; i++){
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
789 if(lst[i].vendor == VENDOR_S3_INC) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
790 int idx;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
791 const char *dname;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
792 idx = find_chip(lst[i].device);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
793 if(idx == -1)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
794 continue;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
795 dname = pci_device_name(lst[i].vendor, lst[i].device);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
796 dname = dname ? dname : "Unknown chip";
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
797 printf("[savage_vid] Found chip: %s\n", dname);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
798 // FIXME: whats wrong here?
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
799 if ((lst[i].command & PCI_COMMAND_IO ) == 0){
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
800 printf("[savage_vid] Device is disabled, ignoring\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
801 continue;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
802 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
803 savage_cap.device_id = lst[i].device;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
804 err = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
805 memcpy(&pci_info, &lst[i], sizeof(pciinfo_t));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
806 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
807 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
808 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
809 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
810 if(err && verbose) printf("[savage_vid] Can't find chip\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
811 return err;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
812 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
813
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
814 /**
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
815 * @brief Initializes driver.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
816 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
817 * @returns 0 if ok.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
818 * a negative error code otherwise.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
819 */
22857
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
820 static int
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
821 savage_init (void)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
822 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
823 int mtrr;
22868
3657ff134131 killed warnings in savage driver
ben
parents: 22858
diff changeset
824 unsigned char config1, tmp;
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
825
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
826 static unsigned char RamSavage3D[] = { 8, 4, 4, 2 };
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
827 static unsigned char RamSavage4[] = { 2, 4, 8, 12, 16, 32, 64, 32 };
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
828 static unsigned char RamSavageMX[] = { 2, 8, 4, 16, 8, 16, 4, 16 };
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
829 static unsigned char RamSavageNB[] = { 0, 2, 4, 8, 16, 32, 16, 2 };
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
830
22868
3657ff134131 killed warnings in savage driver
ben
parents: 22858
diff changeset
831 int videoRam;
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
832
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
833 uint32_t vgaIOBase, vgaCRIndex, vgaCRReg ;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
834
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
835 unsigned char val;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
836
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
837 vgaIOBase = 0x3d0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
838 vgaCRIndex = vgaIOBase + 4;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
839 vgaCRReg = vgaIOBase + 5;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
840
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
841 fprintf(stderr, "vixInit enter \n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
842 // //getc(stdin);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
843
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
844 info = calloc(1,sizeof(savage_info));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
845
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
846
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
847 /* need this if we want direct outb and inb access? */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
848 enable_app_io ();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
849
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
850 /* 12mb + 32kb ? */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
851 /* allocate some space for control registers */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
852 info->chip.arch = savage_card_ids[find_chip(pci_info.device)].arch;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
853
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
854 if (info->chip.arch == S3_SAVAGE3D) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
855 info->control_base = map_phys_mem(pci_info.base0+SAVAGE_NEWMMIO_REGBASE_S3, SAVAGE_NEWMMIO_REGSIZE);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
856 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
857 else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
858 info->control_base = map_phys_mem(pci_info.base0+SAVAGE_NEWMMIO_REGBASE_S4, SAVAGE_NEWMMIO_REGSIZE);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
859 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
860
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
861 // info->chip.PCIO = (uint8_t *) (info->control_base + SAVAGE_NEWMMIO_VGABASE);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
862
25370
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
863 /* switch to vga registers */
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
864 val = VGAIN8 (0x3c3);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
865 VGAOUT8 (0x3c3, val | 0x01);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
866 val = VGAIN8 (0x3cc);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
867 VGAOUT8 (0x3c2, val | 0x01);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
868
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
869 /* unprotect CRTC[0-7] */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
870 VGAOUT8(vgaCRIndex, 0x11);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
871 tmp = VGAIN8(vgaCRReg);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
872 // printf("$########## tmp = %d\n",tmp);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
873 VGAOUT8(vgaCRReg, tmp & 0x7f);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
874
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
875
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
876 /* unlock extended regs */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
877 VGAOUT16(vgaCRIndex, 0x4838);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
878 VGAOUT16(vgaCRIndex, 0xa039);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
879 VGAOUT16(0x3c4, 0x0608);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
880
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
881 /* Next go on to detect amount of installed ram */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
882
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
883 VGAOUT8(vgaCRIndex, 0x36); /* for register CR36 (CONFG_REG1), */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
884 config1 = VGAIN8(vgaCRReg); /* get amount of vram installed */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
885
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
886
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
887 switch( info->chip.arch ) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
888 case S3_SAVAGE3D:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
889 videoRam = RamSavage3D[ (config1 & 0xC0) >> 6 ] * 1024;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
890 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
891
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
892 case S3_SAVAGE4:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
893 /*
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
894 * The Savage4 has one ugly special case to consider. On
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
895 * systems with 4 banks of 2Mx32 SDRAM, the BIOS says 4MB
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
896 * when it really means 8MB. Why do it the same when you
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
897 * can do it different...
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
898 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
899 VGAOUT8(0x3d4, 0x68); /* memory control 1 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
900 if( (VGAIN8(0x3d5) & 0xC0) == (0x01 << 6) )
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
901 RamSavage4[1] = 8;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
902
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
903 /*FALLTHROUGH*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
904
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
905 case S3_SAVAGE2000:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
906 videoRam = RamSavage4[ (config1 & 0xE0) >> 5 ] * 1024;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
907 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
908
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
909 case S3_SAVAGE_MX:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
910 videoRam = RamSavageMX[ (config1 & 0x0E) >> 1 ] * 1024;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
911 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
912
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
913 case S3_PROSAVAGE:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
914 videoRam = RamSavageNB[ (config1 & 0xE0) >> 5 ] * 1024;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
915 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
916
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
917 default:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
918 /* How did we get here? */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
919 videoRam = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
920 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
921 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
922
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
923
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
924 printf("###### videoRam = %d\n",videoRam);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
925 info->chip.fbsize = videoRam * 1024;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
926
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
927
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
928 /* reset graphics engine to avoid memory corruption */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
929 /* VGAOUT8 (0x3d4, 0x66);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
930 cr66 = VGAIN8 (0x3d5);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
931 VGAOUT8 (0x3d5, cr66 | 0x02);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
932 udelay (10000);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
933
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
934 VGAOUT8 (0x3d4, 0x66);
22868
3657ff134131 killed warnings in savage driver
ben
parents: 22858
diff changeset
935 VGAOUT8 (0x3d5, cr66 & ~0x02); */ // clear reset flag
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
936 /* udelay (10000); */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
937
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
938 if ( info->chip.arch == S3_SAVAGE3D ){
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
939 mtrr = mtrr_set_type(pci_info.base0, info->chip.fbsize, MTRR_TYPE_WRCOMB);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
940 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
941 else{
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
942 mtrr = mtrr_set_type(pci_info.base1, info->chip.fbsize, MTRR_TYPE_WRCOMB);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
943 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
944
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
945 if (mtrr!= 0)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
946 printf("[savage_vid] unable to setup MTRR: %s\n", strerror(mtrr));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
947 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
948 printf("[savage_vid] MTRR set up\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
949
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
950 /* This may trash your screen for resolutions greater than 1024x768, sorry. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
951
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
952
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
953 savage_getscreenproperties(info);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
954 // return -1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
955 info->videoFlags = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
956
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
957 SavageStreamsOn();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
958 //getc(stdin);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
959 //FIXME ADD
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
960 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
961 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
962
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
963 /**
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
964 * @brief Destroys driver.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
965 */
22857
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
966 static void
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
967 savage_destroy (void)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
968 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
969 unmap_phys_mem(info->video_base, info->chip.fbsize);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
970 unmap_phys_mem(info->control_base, SAVAGE_NEWMMIO_REGSIZE);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
971 //FIXME ADD
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
972 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
973
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
974 /**
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
975 * @brief Get chipset's hardware capabilities.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
976 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
977 * @param to Pointer to the vidix_capability_t structure to be filled.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
978 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
979 * @returns 0.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
980 */
22857
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
981 static int
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
982 savage_get_caps (vidix_capability_t * to)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
983 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
984 memcpy (to, &savage_cap, sizeof (vidix_capability_t));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
985 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
986 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
987
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
988 /**
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
989 * @brief Report if the video FourCC is supported by hardware.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
990 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
991 * @param fourcc input image format.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
992 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
993 * @returns 1 if the fourcc is supported.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
994 * 0 otherwise.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
995 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
996 static int
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
997 is_supported_fourcc (uint32_t fourcc)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
998 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
999 switch (fourcc)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1000 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1001 //FIXME: YV12 isnt working properly yet
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1002 // case IMGFMT_YV12:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1003 // case IMGFMT_I420:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1004 case IMGFMT_UYVY:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1005 case IMGFMT_YUY2:
25274
cfb786831ff7 sync with vidix.sf.net r317: fixes colorspace issues for vidix savage driver
ben
parents: 25257
diff changeset
1006 case IMGFMT_Y211:
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1007 case IMGFMT_RGB15:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1008 case IMGFMT_RGB16:
25368
8362d7605961 bgr24 and bgr32 support
ben
parents: 25367
diff changeset
1009 case IMGFMT_BGR24:
8362d7605961 bgr24 and bgr32 support
ben
parents: 25367
diff changeset
1010 case IMGFMT_BGR32:
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1011 return 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1012 default:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1013 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1014 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1015 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1016
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1017 /**
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1018 * @brief Try to configure video memory for given fourcc.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1019 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1020 * @param to Pointer to the vidix_fourcc_t structure to be filled.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1021 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1022 * @returns 0 if ok.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1023 * errno otherwise.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1024 */
22857
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1025 static int
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1026 savage_query_fourcc (vidix_fourcc_t * to)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1027 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1028 if (is_supported_fourcc (to->fourcc))
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1029 {
23060
91ad6d4d6a54 simplified depth definition
ben
parents: 23058
diff changeset
1030 to->depth = VID_DEPTH_ALL;
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1031 to->flags = VID_CAP_EXPAND | VID_CAP_SHRINK | VID_CAP_COLORKEY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1032 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1033 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1034 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1035 to->depth = to->flags = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1036
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1037 return ENOSYS;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1038 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1039
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1040 /**
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1041 * @brief Get the GrKeys
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1042 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1043 * @param grkey Pointer to the vidix_grkey_t structure to be filled by driver.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1044 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1045 * @return 0.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1046 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1047 /*int
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1048 vixGetGrKeys (vidix_grkey_t * grkey)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1049 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1050
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1051 // if(info->d_width && info->d_height)savage_overlay_start(info,0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1052
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1053 return (0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1054 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1055 * */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1056
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1057 /**
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1058 * @brief Set the GrKeys
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1059 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1060 * @param grkey Colorkey to be set.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1061 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1062 * @return 0.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1063 */
22857
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1064 static int
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1065 savage_set_gkeys (const vidix_grkey_t * grkey)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1066 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1067 if (grkey->ckey.op == CKEY_FALSE)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1068 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1069 info->use_colorkey = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1070 info->vidixcolorkey=0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1071 printf("[savage_vid] colorkeying disabled\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1072 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1073 else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1074 info->use_colorkey = 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1075 info->vidixcolorkey = ((grkey->ckey.red<<16)|(grkey->ckey.green<<8)|grkey->ckey.blue);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1076
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1077 printf("[savage_vid] set colorkey 0x%x\n",info->vidixcolorkey);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1078 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1079 //FIXME: freezes if streams arent enabled
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1080 SavageSetColorKeyOld();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1081 return (0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1082 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1083
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1084 /**
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1085 * @brief Unichrome driver equalizer capabilities.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1086 */
22857
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1087 static vidix_video_eq_t equal = {
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1088 VEQ_CAP_BRIGHTNESS | VEQ_CAP_SATURATION | VEQ_CAP_HUE,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1089 300, 100, 0, 0, 0, 0, 0, 0
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1090 };
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1091
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1092
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1093 /**
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1094 * @brief Get the equalizer capabilities.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1095 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1096 * @param eq Pointer to the vidix_video_eq_t structure to be filled by driver.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1097 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1098 * @return 0.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1099 */
22857
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1100 static int
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1101 savage_get_eq (vidix_video_eq_t * eq)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1102 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1103 memcpy (eq, &equal, sizeof (vidix_video_eq_t));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1104 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1105 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1106
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1107 /**
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1108 * @brief Set the equalizer capabilities for color correction
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1109 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1110 * @param eq equalizer capabilities to be set.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1111 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1112 * @return 0.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1113 */
22857
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1114 static int
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1115 savage_set_eq (const vidix_video_eq_t * eq)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1116 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1117 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1118 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1119
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1120 /**
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1121 * @brief Configure driver for playback. Driver should prepare BES.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1122 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1123 * @param info configuration description for playback.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1124 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1125 * @returns 0 in case of success.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1126 * -1 otherwise.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1127 */
22857
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1128 static int
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1129 savage_config_playback (vidix_playback_t * vinfo)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1130 {
25370
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1131 unsigned int i, bpp;
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1132
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1133 if (!is_supported_fourcc (vinfo->fourcc))
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1134 return -1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1135
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1136
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1137
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1138 info->src_w = vinfo->src.w;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1139 info->src_h = vinfo->src.h;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1140
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1141 info->drw_w = vinfo->dest.w;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1142 info->drw_h = vinfo->dest.h;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1143
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1144 info->wx = vinfo->dest.x;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1145 info->wy = vinfo->dest.y;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1146 info->format = vinfo->fourcc;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1147
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1148 info->lastKnownPitch = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1149 info->brightness = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1150 info->contrast = 128;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1151 info->saturation = 128;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1152 info->hue = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1153
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1154 vinfo->offset.y = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1155 vinfo->offset.v = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1156 vinfo->offset.u = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1157
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1158 vinfo->dest.pitch.y = 32;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1159 vinfo->dest.pitch.u = 32;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1160 vinfo->dest.pitch.v = 32;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1161 // vinfo->dest.pitch.u = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1162 // vinfo->dest.pitch.v = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1163
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1164
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1165 info->pitch = ((info->src_w << 1) + 15) & ~15;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1166
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1167 switch (vinfo->fourcc)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1168 {
25370
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1169 case IMGFMT_Y211:
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1170 bpp = 1;
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1171 break;
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1172 case IMGFMT_BGR24:
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1173 bpp = 3;
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1174 break;
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1175 case IMGFMT_BGR32:
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1176 bpp = 4;
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1177 break;
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1178 default:
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1179 bpp = 2;
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1180 break;
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1181 }
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1182
25370
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1183 info->pitch = ((info->src_w * bpp) + 15) & ~15;
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1184 info->pitch |= ((info->pitch / bpp) << 16);
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1185 printf("$#### destination pitch = %u\n", info->pitch & 0xffff);
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1186
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1187 vinfo->frame_size = (info->pitch & 0xffff) * info->src_h;
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1188 info->frame_size = vinfo->frame_size;
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1189
25370
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1190 info->picture_offset = info->screen_x * info->screen_y * (info->bpp >> 3);
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1191 if (info->picture_offset > (info->chip.fbsize - vinfo->frame_size)) {
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1192 printf("not enough memory for overlay\n");
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1193 return -1;
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1194 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1195
25370
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1196 if (info->chip.arch == S3_SAVAGE3D)
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1197 info->video_base = map_phys_mem(pci_info.base0, info->chip.fbsize);
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1198 else
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1199 info->video_base = map_phys_mem(pci_info.base1, info->chip.fbsize);
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1200
25370
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1201 if (info->video_base == NULL) {
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1202 printf("errno = %s\n", strerror(errno));
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1203 return -1;
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1204 }
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1205
25370
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1206 info->picture_base = (uint32_t) info->video_base + info->picture_offset;
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1207 vinfo->dga_addr = (void*)(info->picture_base);
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1208 vinfo->num_frames = (info->chip.fbsize - info->picture_offset)/vinfo->frame_size;
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1209 if(vinfo->num_frames > VID_PLAY_MAXFRAMES) vinfo->num_frames = VID_PLAY_MAXFRAMES;
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1210
25370
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1211 for(i = 0; i < vinfo->num_frames; i++)
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1212 vinfo->offsets[i] = vinfo->frame_size * i;
6ca7e3c62a5a fix frame size calculation
ben
parents: 25369
diff changeset
1213
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1214 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1215 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1216
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1217 /**
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1218 * @brief Set playback on : driver should activate BES on this call.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1219 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1220 * @return 0.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1221 */
22857
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1222 static int
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1223 savage_playback_on (void)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1224 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1225 // FIXME: enable
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1226 SavageDisplayVideoOld();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1227 //FIXME ADD
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1228 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1229 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1230
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1231 /**
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1232 * @brief Set playback off : driver should deactivate BES on this call.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1233 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1234 * @return 0.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1235 */
22857
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1236 static int
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1237 savage_playback_off (void)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1238 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1239 // otherwise we wont disable streams properly in new xorg
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1240 // FIXME: shouldnt this be enabled?
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1241 // SavageStreamsOn();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1242 SavageStreamsOff();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1243 // info->vidixcolorkey=0x0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1244
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1245 // OUTREG( SSTREAM_WINDOW_START_REG, OS_XY(0xfffe, 0xfffe) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1246 // SavageSetColorKeyOld();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1247 //FIXME ADD
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1248 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1249 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1250
25371
657c63d001ae implemented frame selection for savage driver
ben
parents: 25370
diff changeset
1251 /**
657c63d001ae implemented frame selection for savage driver
ben
parents: 25370
diff changeset
1252 * @brief Driver should prepare and activate corresponded frame.
657c63d001ae implemented frame selection for savage driver
ben
parents: 25370
diff changeset
1253 *
657c63d001ae implemented frame selection for savage driver
ben
parents: 25370
diff changeset
1254 * @param frame the frame index.
657c63d001ae implemented frame selection for savage driver
ben
parents: 25370
diff changeset
1255 *
657c63d001ae implemented frame selection for savage driver
ben
parents: 25370
diff changeset
1256 * @return 0.
657c63d001ae implemented frame selection for savage driver
ben
parents: 25370
diff changeset
1257 *
657c63d001ae implemented frame selection for savage driver
ben
parents: 25370
diff changeset
1258 * @note This function is used only for double and triple buffering
657c63d001ae implemented frame selection for savage driver
ben
parents: 25370
diff changeset
1259 * and never used for single buffering playback.
657c63d001ae implemented frame selection for savage driver
ben
parents: 25370
diff changeset
1260 */
657c63d001ae implemented frame selection for savage driver
ben
parents: 25370
diff changeset
1261 int
657c63d001ae implemented frame selection for savage driver
ben
parents: 25370
diff changeset
1262 savage_frame_select (unsigned int frame)
657c63d001ae implemented frame selection for savage driver
ben
parents: 25370
diff changeset
1263 {
657c63d001ae implemented frame selection for savage driver
ben
parents: 25370
diff changeset
1264 OUTREG(SSTREAM_FBADDR0_REG, info->picture_offset
657c63d001ae implemented frame selection for savage driver
ben
parents: 25370
diff changeset
1265 + (info->frame_size * frame));
657c63d001ae implemented frame selection for savage driver
ben
parents: 25370
diff changeset
1266
657c63d001ae implemented frame selection for savage driver
ben
parents: 25370
diff changeset
1267 return 0;
657c63d001ae implemented frame selection for savage driver
ben
parents: 25370
diff changeset
1268 }
657c63d001ae implemented frame selection for savage driver
ben
parents: 25370
diff changeset
1269
23057
217694b1c1af declare variables and functions as static
ben
parents: 23048
diff changeset
1270 static void debugout(unsigned int addr, unsigned int val){
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1271 return ;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1272 switch ( addr ){
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1273 case PSTREAM_CONTROL_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1274 fprintf(stderr,"PSTREAM_CONTROL_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1275 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1276 case COL_CHROMA_KEY_CONTROL_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1277 fprintf(stderr,"COL_CHROMA_KEY_CONTROL_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1278 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1279 case SSTREAM_CONTROL_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1280 fprintf(stderr,"SSTREAM_CONTROL_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1281 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1282 case CHROMA_KEY_UPPER_BOUND_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1283 fprintf(stderr,"CHROMA_KEY_UPPER_BOUND_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1284 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1285 case SSTREAM_STRETCH_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1286 fprintf(stderr,"SSTREAM_STRETCH_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1287 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1288 case COLOR_ADJUSTMENT_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1289 fprintf(stderr,"COLOR_ADJUSTMENT_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1290 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1291 case BLEND_CONTROL_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1292 fprintf(stderr,"BLEND_CONTROL_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1293 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1294 case PSTREAM_FBADDR0_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1295 fprintf(stderr,"PSTREAM_FBADDR0_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1296 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1297 case PSTREAM_FBADDR1_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1298 fprintf(stderr,"PSTREAM_FBADDR1_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1299 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1300 case PSTREAM_STRIDE_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1301 fprintf(stderr,"PSTREAM_STRIDE_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1302 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1303 case DOUBLE_BUFFER_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1304 fprintf(stderr,"DOUBLE_BUFFER_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1305 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1306 case SSTREAM_FBADDR0_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1307 fprintf(stderr,"SSTREAM_FBADDR0_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1308 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1309 case SSTREAM_FBADDR1_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1310 fprintf(stderr,"SSTREAM_FBADDR1_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1311 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1312 case SSTREAM_STRIDE_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1313 fprintf(stderr,"SSTREAM_STRIDE_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1314 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1315 case SSTREAM_VSCALE_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1316 fprintf(stderr,"SSTREAM_VSCALE_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1317 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1318 case SSTREAM_VINITIAL_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1319 fprintf(stderr,"SSTREAM_VINITIAL_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1320 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1321 case SSTREAM_LINES_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1322 fprintf(stderr,"SSTREAM_LINES_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1323 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1324 case STREAMS_FIFO_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1325 fprintf(stderr,"STREAMS_FIFO_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1326 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1327 case PSTREAM_WINDOW_START_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1328 fprintf(stderr,"PSTREAM_WINDOW_START_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1329 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1330 case PSTREAM_WINDOW_SIZE_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1331 fprintf(stderr,"PSTREAM_WINDOW_SIZE_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1332 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1333 case SSTREAM_WINDOW_START_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1334 fprintf(stderr,"SSTREAM_WINDOW_START_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1335 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1336 case SSTREAM_WINDOW_SIZE_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1337 fprintf(stderr,"SSTREAM_WINDOW_SIZE_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1338 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1339 case FIFO_CONTROL:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1340 fprintf(stderr,"FIFO_CONTROL");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1341 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1342 case PSTREAM_FBSIZE_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1343 fprintf(stderr,"PSTREAM_FBSIZE_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1344 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1345 case SSTREAM_FBSIZE_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1346 fprintf(stderr,"SSTREAM_FBSIZE_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1347 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1348 case SSTREAM_FBADDR2_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1349 fprintf(stderr,"SSTREAM_FBADDR2_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1350 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1351
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1352 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1353 fprintf(stderr,":\t\t 0x%08X = %u\n",val,val);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1354 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1355
22857
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1356 VDXDriver savage_drv = {
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1357 "savage",
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1358 NULL,
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1359 .probe = savage_probe,
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1360 .get_caps = savage_get_caps,
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1361 .query_fourcc = savage_query_fourcc,
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1362 .init = savage_init,
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1363 .destroy = savage_destroy,
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1364 .config_playback = savage_config_playback,
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1365 .playback_on = savage_playback_on,
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1366 .playback_off = savage_playback_off,
25371
657c63d001ae implemented frame selection for savage driver
ben
parents: 25370
diff changeset
1367 .frame_sel = savage_frame_select,
22857
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1368 .get_eq = savage_get_eq,
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1369 .set_eq = savage_set_eq,
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1370 .set_gkey = savage_set_gkeys,
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1371 };