annotate vidix/savage_vid.c @ 23980:27bac14b4ce4

More simple and correct font reselection. Since ass_font_t contains a list of font faces, there is no need to select the face with maximum charset coverage each time. It is enough to select any face with the required glyph.
author eugeni
date Fri, 03 Aug 2007 13:43:11 +0000
parents 91ad6d4d6a54
children e5bdf17ce399
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*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
232 unsigned long buffer_size; /* size of the image buffer */
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 cur_frame;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
240 unsigned int num_frames; /* number of buffers */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
241 int bps; /* bytes per line */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
242 void (*SavageWaitIdle) ();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
243 void (*SavageWaitFifo) (int space);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
244 };
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
245 typedef struct savage_info savage_info;
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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
248 static savage_info* info;
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 /**
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
252 * @brief Unichrome driver vidix capabilities.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
253 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
254 static vidix_capability_t savage_cap = {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
255 "Savage/ProSavage/Twister vidix",
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
256 "Reza Jelveh <reza.jelveh@tuhh.de>",
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
257 TYPE_OUTPUT,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
258 {0, 0, 0, 0},
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 4096,
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 4,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
263 -1,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
264 FLAG_UPSCALER | FLAG_DOWNSCALER,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
265 VENDOR_S3_INC,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
266 -1,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
267 {0, 0, 0, 0}
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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
270 struct savage_cards {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
271 unsigned short chip_id;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
272 unsigned short arch;
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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
276 static
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
277 unsigned int GetBlendForFourCC( int id )
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
278 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
279 switch( id ) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
280 case IMGFMT_YUY2:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
281 case IMGFMT_YV12:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
282 case IMGFMT_I420:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
283 return 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
284 case IMGFMT_Y211:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
285 return 4;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
286 case IMGFMT_RGB15:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
287 return 3;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
288 case IMGFMT_RGB16:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
289 return 5;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
290 default:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
291 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
292 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
293 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
294
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 * @brief list of card IDs compliant with the Unichrome driver .
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 static struct savage_cards savage_card_ids[] = {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
299 /*[ProSavage PN133] AGP4X VGA Controller (Twister)*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
300 { PCI_CHIP_S3TWISTER_P, S3_PROSAVAGE },
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
301 /*[ProSavage KN133] AGP4X VGA Controller (TwisterK)*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
302 { PCI_CHIP_S3TWISTER_K, S3_PROSAVAGE },
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
303 /*ProSavage DDR*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
304 { PCI_CHIP_PROSAVAGE_DDR , S3_PROSAVAGE },
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
305 /*[ProSavageDDR P4M266 K] */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
306 { PCI_CHIP_PROSAVAGE_DDRK , S3_PROSAVAGE },
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
307 };
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
308
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
309 static void SavageSetColorOld(void)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
310 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
311
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
312
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
313 if(
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
314 (info->format == IMGFMT_RGB15) ||
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
315 (info->format == IMGFMT_RGB16)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
316 )
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
317 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
318 OUTREG( COLOR_ADJUSTMENT_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
319 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
320 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
321 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
322 /* Change 0..255 into 0..15 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
323 long sat = info->saturation * 16 / 256;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
324 double hue = info->hue * 0.017453292;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
325 unsigned long hs1 = ((long)(sat * cos(hue))) & 0x1f;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
326 unsigned long hs2 = ((long)(sat * sin(hue))) & 0x1f;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
327
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
328 OUTREG( COLOR_ADJUSTMENT_REG,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
329 0x80008000 |
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
330 (info->brightness + 128) |
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
331 ((info->contrast & 0xf8) << (12-7)) |
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
332 (hs1 << 16) |
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
333 (hs2 << 24)
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 debugout( COLOR_ADJUSTMENT_REG,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
336 0x80008000 |
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
337 (info->brightness + 128) |
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
338 ((info->contrast & 0xf8) << (12-7)) |
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
339 (hs1 << 16) |
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
340 (hs2 << 24)
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
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 }
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 static void SavageSetColorKeyOld(void)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
347 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
348 int red, green, blue;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
349
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
350 /* Here, we reset the colorkey and all the controls. */
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 red = (info->vidixcolorkey & 0x00FF0000) >> 16;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
353 green = (info->vidixcolorkey & 0x0000FF00) >> 8;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
354 blue = info->vidixcolorkey & 0x000000FF;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
355
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
356 if( !info->vidixcolorkey ) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
357 printf("SavageSetColorKey disabling colorkey\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
358 OUTREG( COL_CHROMA_KEY_CONTROL_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
359 OUTREG( CHROMA_KEY_UPPER_BOUND_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
360 OUTREG( BLEND_CONTROL_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
361 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
362 else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
363 switch (info->depth) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
364 // FIXME: isnt fixed yet
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
365 case 8:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
366 OUTREG( COL_CHROMA_KEY_CONTROL_REG,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
367 0x37000000 | (info->vidixcolorkey & 0xFF) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
368 OUTREG( CHROMA_KEY_UPPER_BOUND_REG,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
369 0x00000000 | (info->vidixcolorkey & 0xFF) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
370 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
371 case 15:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
372 /* 15 bpp 555 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
373 red&=0x1f;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
374 green&=0x1f;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
375 blue&=0x1f;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
376 OUTREG( COL_CHROMA_KEY_CONTROL_REG,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
377 0x05000000 | (red<<19) | (green<<11) | (blue<<3) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
378 OUTREG( CHROMA_KEY_UPPER_BOUND_REG,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
379 0x00000000 | (red<<19) | (green<<11) | (blue<<3) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
380 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
381 case 16:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
382 /* 16 bpp 565 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
383 red&=0x1f;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
384 green&=0x3f;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
385 blue&=0x1f;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
386 OUTREG( COL_CHROMA_KEY_CONTROL_REG,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
387 0x16000000 | (red<<19) | (green<<10) | (blue<<3) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
388 OUTREG( CHROMA_KEY_UPPER_BOUND_REG,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
389 0x00020002 | (red<<19) | (green<<10) | (blue<<3) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
390 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
391 case 24:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
392 /* 24 bpp 888 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
393 OUTREG( COL_CHROMA_KEY_CONTROL_REG,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
394 0x17000000 | (red<<16) | (green<<8) | (blue) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
395 OUTREG( CHROMA_KEY_UPPER_BOUND_REG,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
396 0x00000000 | (red<<16) | (green<<8) | (blue) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
397 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
398 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
399
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
400 /* We use destination colorkey */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
401 OUTREG( BLEND_CONTROL_REG, 0x05000000 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
402 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
403 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
404
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
405
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
406 static void
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
407 SavageDisplayVideoOld(void)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
408 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
409 int vgaCRIndex, vgaCRReg, vgaIOBase;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
410 unsigned int ssControl;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
411 int cr92;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
412
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
413
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
414 vgaIOBase = 0x3d0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
415 vgaCRIndex = vgaIOBase + 4;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
416 vgaCRReg = vgaIOBase + 5;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
417
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
418 // if( psav->videoFourCC != id )
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
419 // SavageStreamsOff(pScrn);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
420
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
421 if( !info->videoFlags & VF_STREAMS_ON )
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 SavageStreamsOn();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
424 // SavageResetVideo();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
425 SavageSetColorOld();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
426 SavageSetColorKeyOld();
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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
431
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
432 /* Set surface format. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
433
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
434 OUTREG(SSTREAM_CONTROL_REG,GetBlendForFourCC(info->format) << 24 | info->src_w);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
435
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
436 debugout(SSTREAM_CONTROL_REG,GetBlendForFourCC(info->format) << 24 | info->src_w);
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 /* Calculate horizontal scale factor. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
439
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
440 //FIXME: enable scaling
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
441 OUTREG(SSTREAM_STRETCH_REG, (info->src_w << 15) / info->drw_w );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
442 // debugout(SSTREAM_STRETCH_REG, 1 << 15);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
443
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
444 OUTREG(SSTREAM_LINES_REG, info->src_h );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
445 debugout(SSTREAM_LINES_REG, info->src_h );
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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
448 OUTREG(SSTREAM_VINITIAL_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
449 debugout(SSTREAM_VINITIAL_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
450 /* Calculate vertical scale factor. */
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 // OUTREG(SSTREAM_VSCALE_REG, 1 << 15);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
453 OUTREG(SSTREAM_VSCALE_REG, VSCALING(info->src_h,info->drw_h) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
454 debugout(SSTREAM_VSCALE_REG, VSCALING(info->src_h,info->drw_h) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
455 // OUTREG(SSTREAM_VSCALE_REG, (info->src_h << 15) / info->drw_h );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
456
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
457 /* Set surface location and stride. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
458
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
459 OUTREG(SSTREAM_FBADDR0_REG, info->picture_offset );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
460 debugout(SSTREAM_FBADDR0_REG, info->picture_offset );
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_FBADDR1_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
463 debugout(SSTREAM_FBADDR1_REG, 0 );
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 OUTREG(SSTREAM_STRIDE_REG, info->pitch );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
466 debugout(SSTREAM_STRIDE_REG, info->pitch );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
467
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
468 OUTREG(SSTREAM_WINDOW_START_REG, OS_XY(info->wx, info->wy) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
469 debugout(SSTREAM_WINDOW_START_REG, OS_XY(info->wx, info->wy) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
470 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
471 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
472
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
473
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 ssControl = 0;
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 if( info->src_w > (info->drw_w << 1) )
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
478 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
479 /* BUGBUG shouldn't this be >=? */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
480 if( info->src_w <= (info->drw_w << 2) )
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
481 ssControl |= HDSCALE_4;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
482 else if( info->src_w > (info->drw_w << 3) )
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
483 ssControl |= HDSCALE_8;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
484 else if( info->src_w > (info->drw_w << 4) )
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
485 ssControl |= HDSCALE_16;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
486 else if( info->src_w > (info->drw_w << 5) )
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
487 ssControl |= HDSCALE_32;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
488 else if( info->src_w > (info->drw_w << 6) )
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
489 ssControl |= HDSCALE_64;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
490 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
491
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
492 ssControl |= info->src_w;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
493 ssControl |= (1 << 24);
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 //FIXME: enable scaling
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
496 OUTREG(SSTREAM_CONTROL_REG, ssControl);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
497 debugout(SSTREAM_CONTROL_REG, ssControl);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
498
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
499 // FIXME: this should actually be enabled
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
500
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
501 info->pitch = (info->pitch + 7) / 8;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
502 VGAOUT8(vgaCRIndex, 0x92);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
503 cr92 = VGAIN8(vgaCRReg);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
504 VGAOUT8(vgaCRReg, (cr92 & 0x40) | (info->pitch >> 8) | 0x80);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
505 VGAOUT8(vgaCRIndex, 0x93);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
506 VGAOUT8(vgaCRReg, info->pitch);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
507 OUTREG(STREAMS_FIFO_REG, 2 | 25 << 5 | 32 << 11);
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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
511
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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
514 static void SavageInitStreamsOld(void)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
515 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
516 /*unsigned long jDelta;*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
517 unsigned long format = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
518
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
519 /*
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
520 * For the OLD streams engine, several of these registers
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
521 * cannot be touched unless streams are on. Seems backwards to me;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
522 * I'd want to set 'em up, then cut 'em loose.
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 /*jDelta = pScrn->displayWidth * (pScrn->bitsPerPixel + 7) / 8;*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
527 switch( info->depth ) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
528 case 8: format = 0 << 24; break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
529 case 15: format = 3 << 24; break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
530 case 16: format = 5 << 24; break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
531 case 24: format = 7 << 24; break;
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 #warning enable this again
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
534 OUTREG(PSTREAM_FBSIZE_REG,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
535 info->screen_y * info->screen_x * (info->bpp >> 3));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
536
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
537 OUTREG( PSTREAM_WINDOW_START_REG, OS_XY(0,0) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
538 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
539 OUTREG( PSTREAM_FBADDR1_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
540 /*OUTREG( PSTREAM_STRIDE_REG, jDelta );*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
541 OUTREG( PSTREAM_CONTROL_REG, format );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
542 OUTREG( PSTREAM_FBADDR0_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
543
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
544 /*OUTREG( PSTREAM_FBSIZE_REG, jDelta * pScrn->virtualY >> 3 );*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
545
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
546 OUTREG( COL_CHROMA_KEY_CONTROL_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
547 OUTREG( SSTREAM_CONTROL_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
548 OUTREG( CHROMA_KEY_UPPER_BOUND_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
549 OUTREG( SSTREAM_STRETCH_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
550 OUTREG( COLOR_ADJUSTMENT_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
551 OUTREG( BLEND_CONTROL_REG, 1 << 24 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
552 OUTREG( DOUBLE_BUFFER_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
553 OUTREG( SSTREAM_FBADDR0_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
554 OUTREG( SSTREAM_FBADDR1_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
555 OUTREG( SSTREAM_FBADDR2_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
556 OUTREG( SSTREAM_FBSIZE_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
557 OUTREG( SSTREAM_STRIDE_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
558 OUTREG( SSTREAM_VSCALE_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
559 OUTREG( SSTREAM_LINES_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
560 OUTREG( SSTREAM_VINITIAL_REG, 0 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
561 #warning is this needed?
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
562 OUTREG( SSTREAM_WINDOW_START_REG, OS_XY(0xfffe, 0xfffe) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
563 OUTREG( SSTREAM_WINDOW_SIZE_REG, OS_WH(10,2) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
564
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
565 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
566
23057
217694b1c1af declare variables and functions as static
ben
parents: 23048
diff changeset
567 static void
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
568 SavageStreamsOn(void)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
569 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
570 unsigned char jStreamsControl;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
571 unsigned short vgaCRIndex = 0x3d0 + 4;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
572 unsigned short vgaCRReg = 0x3d0 + 5;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
573
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
574 // xf86ErrorFVerb(STREAMS_TRACE, "SavageStreamsOn\n" );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
575
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
576 /* Sequence stolen from streams.c in M7 NT driver */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
577
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 enable_app_io ();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
580
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
581 /* Unlock extended registers. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
582
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
583 /* FIXME: it looks like mmaped io is broken with vgaout16 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
584 VGAOUT16(vgaCRIndex, 0x4838 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
585 VGAOUT16(vgaCRIndex, 0xa039);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
586 VGAOUT16(0x3c4, 0x0608);
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
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 VGAOUT8( vgaCRIndex, EXT_MISC_CTRL2 );
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 if( S3_SAVAGE_MOBILE_SERIES(info->chip.arch) )
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
593 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
594 // SavageInitStreamsNew( pScrn );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
595
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
596 jStreamsControl = VGAIN8( vgaCRReg ) | ENABLE_STREAM1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
597
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
598 /* Wait for VBLANK. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
599 VerticalRetraceWait();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
600 /* Fire up streams! */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
601 VGAOUT16( vgaCRIndex, (jStreamsControl << 8) | EXT_MISC_CTRL2 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
602 /* These values specify brightness, contrast, saturation and hue. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
603 OUTREG( SEC_STREAM_COLOR_CONVERT1, 0x0000C892 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
604 OUTREG( SEC_STREAM_COLOR_CONVERT2, 0x00039F9A );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
605 OUTREG( SEC_STREAM_COLOR_CONVERT3, 0x01F1547E );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
606 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
607 else if (info->chip.arch == S3_SAVAGE2000)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
608 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
609 // SavageInitStreams2000( pScrn );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
610
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
611 jStreamsControl = VGAIN8( vgaCRReg ) | ENABLE_STREAM1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
612
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
613 /* Wait for VBLANK. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
614 VerticalRetraceWait();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
615 /* Fire up streams! */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
616 VGAOUT16( vgaCRIndex, (jStreamsControl << 8) | EXT_MISC_CTRL2 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
617 /* These values specify brightness, contrast, saturation and hue. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
618 OUTREG( SEC_STREAM_COLOR_CONVERT0_2000, 0x0000C892 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
619 OUTREG( SEC_STREAM_COLOR_CONVERT1_2000, 0x00033400 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
620 OUTREG( SEC_STREAM_COLOR_CONVERT2_2000, 0x000001CF );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
621 OUTREG( SEC_STREAM_COLOR_CONVERT3_2000, 0x01F1547E );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
622 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
623 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
624 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
625 jStreamsControl = VGAIN8( vgaCRReg ) | ENABLE_STREAMS_OLD;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
626
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
627 /* Wait for VBLANK. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
628
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
629 VerticalRetraceWait();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
630
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
631 /* Fire up streams! */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
632
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
633 VGAOUT16( vgaCRIndex, (jStreamsControl << 8) | EXT_MISC_CTRL2 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
634
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
635 SavageInitStreamsOld( );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
636 }
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 /* Wait for VBLANK. */
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 VerticalRetraceWait();
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 /* Turn on secondary stream TV flicker filter, once we support TV. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
643
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
644 /* SR70 |= 0x10 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
645
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
646 info->videoFlags |= VF_STREAMS_ON;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
647
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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
650
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
651
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
652
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
653 static void savage_getscreenproperties(struct savage_info *info){
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
654 unsigned char bpp=0;
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 uint32_t vgaIOBase, vgaCRIndex, vgaCRReg;
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 vgaIOBase = 0x3d0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
659 vgaCRIndex = vgaIOBase + 4;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
660 vgaCRReg = vgaIOBase + 5;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
661
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
662
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
663 /* a little reversed from x driver source code */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
664 VGAOUT8(vgaCRIndex, 0x67);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
665 bpp = VGAIN8(vgaCRReg);
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 switch (bpp&0xf0) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
669 case 0x00:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
670 case 0x10:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
671 info->depth=8;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
672 info->bpp=8;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
673 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
674 case 0x20:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
675 case 0x30:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
676 info->depth=15;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
677 info->bpp=16;
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 0x40:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
680 case 0x50:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
681 info->depth=16;
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 0x70:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
685 case 0xd0:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
686 info->depth=24;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
687 info->bpp=32;
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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
690
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
691 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
692
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
693
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
694 VGAOUT8(vgaCRIndex, 0x1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
695 info->screen_x = (1 + VGAIN8(vgaCRReg)) <<3;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
696 /*get screen height*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
697 /* get first 8 bits in VT_DISPLAY_END*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
698 VGAOUT8(0x03D4, 0x12);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
699 info->screen_y = VGAIN8(0x03D5);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
700 VGAOUT8(0x03D4,0x07);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
701 /* get 9th bit in CRTC_OVERFLOW*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
702 info->screen_y |= (VGAIN8(0x03D5) &0x02)<<7;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
703 /* and the 10th in CRTC_OVERFLOW*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
704 info->screen_y |=(VGAIN8(0x03D5) &0x40)<<3;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
705 ++info->screen_y;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
706
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
707 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
708 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
709
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
710
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
711 static void SavageStreamsOff(void)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
712 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
713 unsigned char jStreamsControl;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
714 unsigned short vgaCRIndex = 0x3d0 + 4;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
715 unsigned short vgaCRReg = 0x3d0 + 5;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
716
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
717
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
718 /* Unlock extended registers. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
719
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
720 VGAOUT16(vgaCRIndex, 0x4838);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
721 VGAOUT16(vgaCRIndex, 0xa039);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
722 VGAOUT16(0x3c4, 0x0608);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
723
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
724 VGAOUT8( vgaCRIndex, EXT_MISC_CTRL2 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
725 if( S3_SAVAGE_MOBILE_SERIES(info->chip.arch) ||
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
726 (info->chip.arch == S3_SUPERSAVAGE) ||
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
727 (info->chip.arch == S3_SAVAGE2000) )
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
728 jStreamsControl = VGAIN8( vgaCRReg ) & NO_STREAMS;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
729 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
730 jStreamsControl = VGAIN8( vgaCRReg ) & NO_STREAMS_OLD;
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 /* Wait for VBLANK. */
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 VerticalRetraceWait();
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 /* Kill streams. */
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, (jStreamsControl << 8) | EXT_MISC_CTRL2 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
739
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
740 VGAOUT16(vgaCRIndex, 0x0093 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
741 VGAOUT8( vgaCRIndex, 0x92 );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
742 VGAOUT8( vgaCRReg, VGAIN8(vgaCRReg) & 0x40 );
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 info->videoFlags &= ~VF_STREAMS_ON;
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
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 * @brief Find chip index in Unichrome compliant devices list.
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 * @param chip_id PCI device ID.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
751 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
752 * @returns index position in savage_card_ids if successful.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
753 * -1 if chip_id is not a compliant chipset ID.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
754 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
755
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
756 static int find_chip(unsigned chip_id){
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
757 unsigned i;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
758 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
759 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
760 if(chip_id == savage_card_ids[i].chip_id)return i;
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 return -1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
763 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
764
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
765 /**
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
766 * @brief Probe hardware to find some useable chipset.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
767 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
768 * @param verbose specifies verbose level.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
769 * @param force specifies force mode : driver should ignore
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
770 * device_id (danger but useful for new devices)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
771 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
772 * @returns 0 if it can handle something in PC.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
773 * a negative error code otherwise.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
774 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
775
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
776 static int savage_probe(int verbose, int force){
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
777 pciinfo_t lst[MAX_PCI_DEVICES];
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
778 unsigned i,num_pci;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
779 int err;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
780
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
781 if (force)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
782 printf("[savage_vid]: warning: forcing not supported yet!\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
783 err = pci_scan(lst,&num_pci);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
784 if(err){
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
785 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
786 return err;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
787 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
788 else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
789 err = ENXIO;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
790 for(i=0; i < num_pci; i++){
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
791 if(lst[i].vendor == VENDOR_S3_INC) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
792 int idx;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
793 const char *dname;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
794 idx = find_chip(lst[i].device);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
795 if(idx == -1)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
796 continue;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
797 dname = pci_device_name(lst[i].vendor, lst[i].device);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
798 dname = dname ? dname : "Unknown chip";
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
799 printf("[savage_vid] Found chip: %s\n", dname);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
800 // FIXME: whats wrong here?
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
801 if ((lst[i].command & PCI_COMMAND_IO ) == 0){
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
802 printf("[savage_vid] Device is disabled, ignoring\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
803 continue;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
804 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
805 savage_cap.device_id = lst[i].device;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
806 err = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
807 memcpy(&pci_info, &lst[i], sizeof(pciinfo_t));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
808 break;
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 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
811 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
812 if(err && verbose) printf("[savage_vid] Can't find chip\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
813 return err;
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
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 * @brief Initializes driver.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
818 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
819 * @returns 0 if ok.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
820 * a negative error code otherwise.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
821 */
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
822 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
823 savage_init (void)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
824 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
825 int mtrr;
22868
3657ff134131 killed warnings in savage driver
ben
parents: 22858
diff changeset
826 unsigned char config1, tmp;
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
827
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
828 static unsigned char RamSavage3D[] = { 8, 4, 4, 2 };
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
829 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
830 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
831 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
832
22868
3657ff134131 killed warnings in savage driver
ben
parents: 22858
diff changeset
833 int videoRam;
22850
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 uint32_t vgaIOBase, vgaCRIndex, vgaCRReg ;
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 unsigned char val;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
838
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
839 vgaIOBase = 0x3d0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
840 vgaCRIndex = vgaIOBase + 4;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
841 vgaCRReg = vgaIOBase + 5;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
842
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
843 fprintf(stderr, "vixInit enter \n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
844 // //getc(stdin);
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 info = calloc(1,sizeof(savage_info));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
847
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
848
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
849 /* need this if we want direct outb and inb access? */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
850 enable_app_io ();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
851
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
852 /* 12mb + 32kb ? */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
853 /* allocate some space for control registers */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
854 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
855
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
856 if (info->chip.arch == S3_SAVAGE3D) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
857 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
858 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
859 else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
860 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
861 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
862
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
863 // info->chip.PCIO = (uint8_t *) (info->control_base + SAVAGE_NEWMMIO_VGABASE);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
864
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
865 // FIXME: enable mmio?
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
866 val = VGAIN8 (0x3c3);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
867 VGAOUT8 (0x3c3, val | 0x01);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
868 val = VGAIN8 (0x3cc);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
869 VGAOUT8 (0x3c2, val | 0x01);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
870
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
871 if (info->chip.arch >= S3_SAVAGE4)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
872 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
873 VGAOUT8 (0x3d4, 0x40);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
874 val = VGAIN8 (0x3d5);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
875 VGAOUT8 (0x3d5, val | 1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
876 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
877
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
878
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
879
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
880 /* unprotect CRTC[0-7] */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
881 VGAOUT8(vgaCRIndex, 0x11);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
882 tmp = VGAIN8(vgaCRReg);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
883 // printf("$########## tmp = %d\n",tmp);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
884 VGAOUT8(vgaCRReg, tmp & 0x7f);
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 /* unlock extended regs */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
888 VGAOUT16(vgaCRIndex, 0x4838);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
889 VGAOUT16(vgaCRIndex, 0xa039);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
890 VGAOUT16(0x3c4, 0x0608);
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 VGAOUT8(vgaCRIndex, 0x40);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
893 tmp = VGAIN8(vgaCRReg);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
894 VGAOUT8(vgaCRReg, tmp & ~0x01);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
895
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
896 /* unlock sys regs */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
897 VGAOUT8(vgaCRIndex, 0x38);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
898 VGAOUT8(vgaCRReg, 0x48);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
899
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
900 /* Unlock system registers. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
901 VGAOUT16(vgaCRIndex, 0x4838);
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 /* Next go on to detect amount of installed ram */
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 VGAOUT8(vgaCRIndex, 0x36); /* for register CR36 (CONFG_REG1), */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
906 config1 = VGAIN8(vgaCRReg); /* get amount of vram installed */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
907
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 switch( info->chip.arch ) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
910 case S3_SAVAGE3D:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
911 videoRam = RamSavage3D[ (config1 & 0xC0) >> 6 ] * 1024;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
912 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
913
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
914 case S3_SAVAGE4:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
915 /*
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
916 * The Savage4 has one ugly special case to consider. On
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
917 * systems with 4 banks of 2Mx32 SDRAM, the BIOS says 4MB
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
918 * 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
919 * can do it different...
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
920 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
921 VGAOUT8(0x3d4, 0x68); /* memory control 1 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
922 if( (VGAIN8(0x3d5) & 0xC0) == (0x01 << 6) )
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
923 RamSavage4[1] = 8;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
924
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
925 /*FALLTHROUGH*/
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 case S3_SAVAGE2000:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
928 videoRam = RamSavage4[ (config1 & 0xE0) >> 5 ] * 1024;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
929 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
930
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
931 case S3_SAVAGE_MX:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
932 videoRam = RamSavageMX[ (config1 & 0x0E) >> 1 ] * 1024;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
933 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
934
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
935 case S3_PROSAVAGE:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
936 videoRam = RamSavageNB[ (config1 & 0xE0) >> 5 ] * 1024;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
937 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
938
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
939 default:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
940 /* How did we get here? */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
941 videoRam = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
942 break;
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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
946 printf("###### videoRam = %d\n",videoRam);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
947 info->chip.fbsize = videoRam * 1024;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
948
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 /* reset graphics engine to avoid memory corruption */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
951 /* VGAOUT8 (0x3d4, 0x66);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
952 cr66 = VGAIN8 (0x3d5);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
953 VGAOUT8 (0x3d5, cr66 | 0x02);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
954 udelay (10000);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
955
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
956 VGAOUT8 (0x3d4, 0x66);
22868
3657ff134131 killed warnings in savage driver
ben
parents: 22858
diff changeset
957 VGAOUT8 (0x3d5, cr66 & ~0x02); */ // clear reset flag
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
958 /* udelay (10000); */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
959
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
960 /* This maps framebuffer @6MB, thus 2MB are left for video. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
961 if (info->chip.arch == S3_SAVAGE3D) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
962 info->video_base = map_phys_mem(pci_info.base0, info->chip.fbsize);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
963 info->picture_offset = 1024*768* 4 * ((info->chip.fbsize > 4194304)?2:1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
964 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
965 else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
966 info->video_base = map_phys_mem(pci_info.base1, info->chip.fbsize);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
967 info->picture_offset = info->chip.fbsize - FRAMEBUFFER_SIZE;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
968 // info->picture_offset = 1024*1024* 4 * 2;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
969 }
22868
3657ff134131 killed warnings in savage driver
ben
parents: 22858
diff changeset
970 if ( info->video_base == NULL){
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
971 printf("errno = %s\n", strerror(errno));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
972 return -1;
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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
976 info->picture_base = (uint32_t) info->video_base + info->picture_offset;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
977
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
978 if ( info->chip.arch == S3_SAVAGE3D ){
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
979 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
980 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
981 else{
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
982 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
983 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
984
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
985 if (mtrr!= 0)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
986 printf("[savage_vid] unable to setup MTRR: %s\n", strerror(mtrr));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
987 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
988 printf("[savage_vid] MTRR set up\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
989
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
990 /* This may trash your screen for resolutions greater than 1024x768, sorry. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
991
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 savage_getscreenproperties(info);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
994 // return -1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
995 info->videoFlags = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
996
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
997 SavageStreamsOn();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
998 //getc(stdin);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
999 //FIXME ADD
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1000 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1001 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1002
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1003 /**
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1004 * @brief Destroys driver.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1005 */
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
1006 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
1007 savage_destroy (void)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1008 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1009 unmap_phys_mem(info->video_base, info->chip.fbsize);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1010 unmap_phys_mem(info->control_base, SAVAGE_NEWMMIO_REGSIZE);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1011 //FIXME ADD
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1012 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1013
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1014 /**
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1015 * @brief Get chipset's hardware capabilities.
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 * @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
1018 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1019 * @returns 0.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1020 */
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
1021 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
1022 savage_get_caps (vidix_capability_t * to)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1023 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1024 memcpy (to, &savage_cap, sizeof (vidix_capability_t));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1025 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1026 }
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 /**
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1029 * @brief Report if the video FourCC is supported by hardware.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1030 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1031 * @param fourcc input image format.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1032 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1033 * @returns 1 if the fourcc is supported.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1034 * 0 otherwise.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1035 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1036 static int
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1037 is_supported_fourcc (uint32_t fourcc)
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 switch (fourcc)
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 //FIXME: YV12 isnt working properly yet
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1042 // case IMGFMT_YV12:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1043 // case IMGFMT_I420:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1044 case IMGFMT_UYVY:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1045 case IMGFMT_YVYU:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1046 case IMGFMT_YUY2:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1047 case IMGFMT_RGB15:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1048 case IMGFMT_RGB16:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1049 // case IMGFMT_BGR32:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1050 return 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1051 default:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1052 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1053 }
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 * @brief Try to configure video memory for given fourcc.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1058 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1059 * @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
1060 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1061 * @returns 0 if ok.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1062 * errno otherwise.
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_query_fourcc (vidix_fourcc_t * to)
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 (is_supported_fourcc (to->fourcc))
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1068 {
23060
91ad6d4d6a54 simplified depth definition
ben
parents: 23058
diff changeset
1069 to->depth = VID_DEPTH_ALL;
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1070 to->flags = VID_CAP_EXPAND | VID_CAP_SHRINK | VID_CAP_COLORKEY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1071 return 0;
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 to->depth = to->flags = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1075
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1076 return ENOSYS;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1077 }
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 /**
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1080 * @brief Get the GrKeys
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1081 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1082 * @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
1083 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1084 * @return 0.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1085 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1086 /*int
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1087 vixGetGrKeys (vidix_grkey_t * grkey)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1088 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1089
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1090 // if(info->d_width && info->d_height)savage_overlay_start(info,0);
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 return (0);
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 * */
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 /**
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1097 * @brief Set the GrKeys
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1098 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1099 * @param grkey Colorkey to be set.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1100 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1101 * @return 0.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1102 */
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
1103 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
1104 savage_set_gkeys (const vidix_grkey_t * grkey)
22850
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 if (grkey->ckey.op == CKEY_FALSE)
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 info->use_colorkey = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1109 info->vidixcolorkey=0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1110 printf("[savage_vid] colorkeying disabled\n");
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 else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1113 info->use_colorkey = 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1114 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
1115
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1116 printf("[savage_vid] set colorkey 0x%x\n",info->vidixcolorkey);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1117 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1118 //FIXME: freezes if streams arent enabled
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1119 SavageSetColorKeyOld();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1120 return (0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1121 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1122
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1123 /**
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1124 * @brief Unichrome driver equalizer capabilities.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1125 */
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
1126 static vidix_video_eq_t equal = {
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1127 VEQ_CAP_BRIGHTNESS | VEQ_CAP_SATURATION | VEQ_CAP_HUE,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1128 300, 100, 0, 0, 0, 0, 0, 0
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1129 };
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1130
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1131
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 * @brief Get the equalizer capabilities.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1134 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1135 * @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
1136 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1137 * @return 0.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1138 */
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
1139 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
1140 savage_get_eq (vidix_video_eq_t * eq)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1141 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1142 memcpy (eq, &equal, sizeof (vidix_video_eq_t));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1143 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1144 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1145
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1146 /**
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1147 * @brief Set the equalizer capabilities for color correction
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1148 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1149 * @param eq equalizer capabilities to be set.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1150 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1151 * @return 0.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1152 */
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
1153 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
1154 savage_set_eq (const vidix_video_eq_t * eq)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1155 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1156 return 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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1159 /**
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1160 * @brief Configure driver for playback. Driver should prepare BES.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1161 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1162 * @param info configuration description for playback.
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 * @returns 0 in case of success.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1165 * -1 otherwise.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1166 */
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
1167 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
1168 savage_config_playback (vidix_playback_t * vinfo)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1169 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1170 int uv_size, swap_uv;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1171 unsigned int i;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1172
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1173 if (!is_supported_fourcc (vinfo->fourcc))
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1174 return -1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1175
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1176
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1177
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1178 info->src_w = vinfo->src.w;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1179 info->src_h = vinfo->src.h;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1180
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1181 info->drw_w = vinfo->dest.w;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1182 info->drw_h = vinfo->dest.h;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1183
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1184 info->wx = vinfo->dest.x;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1185 info->wy = vinfo->dest.y;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1186 info->format = vinfo->fourcc;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1187
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1188 info->lastKnownPitch = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1189 info->brightness = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1190 info->contrast = 128;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1191 info->saturation = 128;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1192 info->hue = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1193
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 vinfo->dga_addr=(void*)(info->picture_base);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1196
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1197
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1198 vinfo->offset.y = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1199 vinfo->offset.v = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1200 vinfo->offset.u = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1201
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1202 vinfo->dest.pitch.y = 32;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1203 vinfo->dest.pitch.u = 32;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1204 vinfo->dest.pitch.v = 32;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1205 // vinfo->dest.pitch.u = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1206 // vinfo->dest.pitch.v = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1207
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1208
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1209 info->pitch = ((info->src_w << 1) + 15) & ~15;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1210
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1211 swap_uv = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1212 switch (vinfo->fourcc)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1213 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1214 case IMGFMT_YUY2:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1215 case IMGFMT_UYVY:
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 info->pitch = ((info->src_w << 1) + (vinfo->dest.pitch.y-1)) & ~(vinfo->dest.pitch.y-1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1218
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1219 info->pitch = info->src_w << 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1220 info->pitch = ALIGN_TO (info->src_w << 1, 32);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1221 uv_size = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1222 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1223 case IMGFMT_YV12:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1224 swap_uv = 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1225
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1226
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1227
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1228 /*
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1229 srcPitch = (info->src_w + 3) & ~3;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1230 vinfo->offset.u = srcPitch * info->src_h;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1231 srcPitch2 = ((info->src_w >> 1) + 3) & ~3;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1232 vinfo->offset.v = (srcPitch2 * (info->src_h >> 1)) + vinfo->offset.v;
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 vinfo->dest.pitch.y=srcPitch ;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1235 vinfo->dest.pitch.v=srcPitch2 ;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1236 vinfo->dest.pitch.u=srcPitch2 ;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1237 */
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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1240 info->pitch = ALIGN_TO (info->src_w, 32);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1241 uv_size = (info->pitch >> 1) * (info->src_h >> 1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1242
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1243 vinfo->offset.y = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1244 vinfo->offset.v = vinfo->offset.y + info->pitch * info->src_h;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1245 vinfo->offset.u = vinfo->offset.v + uv_size;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1246 vinfo->frame_size = vinfo->offset.u + uv_size;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1247 /* YOffs = info->offset.y;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1248 UOffs = (swap_uv ? vinfo->offset.v : vinfo->offset.u);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1249 VOffs = (swap_uv ? vinfo->offset.u : vinfo->offset.v);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1250 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1251 // vinfo->offset.y = info->src_w;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1252 // vinfo->offset.v = vinfo->offset.y + info->src_w /2 * info->src_h;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1253 // vinfo->offset.u = vinfo->offset.v + (info->src_w >> 1) * (info->src_h >> 1) ;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1254
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1255 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1256 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1257 info->pitch |= ((info->pitch >> 1) << 16);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1258
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1259 vinfo->frame_size = info->pitch * info->src_h;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1260
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1261 printf("$#### destination pitch = %u\n", info->pitch&0xffff);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1262
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1263
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1264
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1265
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1266 info->buffer_size = vinfo->frame_size;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1267 info->num_frames = vinfo->num_frames= (info->chip.fbsize - info->picture_offset)/vinfo->frame_size;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1268 if(vinfo->num_frames > MAX_FRAMES)vinfo->num_frames = MAX_FRAMES;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1269 // vinfo->num_frames = 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1270 // printf("[nvidia_vid] Number of frames %i\n",vinfo->num_frames);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1271 for(i=0;i <vinfo->num_frames;i++)vinfo->offsets[i] = vinfo->frame_size*i;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1272
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1273 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1274 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1275
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1276 /**
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1277 * @brief Set playback on : driver should activate BES on this call.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1278 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1279 * @return 0.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1280 */
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
1281 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
1282 savage_playback_on (void)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1283 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1284 // FIXME: enable
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1285 SavageDisplayVideoOld();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1286 //FIXME ADD
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1287 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1288 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1289
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1290 /**
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1291 * @brief Set playback off : driver should deactivate BES on this call.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1292 *
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1293 * @return 0.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1294 */
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
1295 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
1296 savage_playback_off (void)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1297 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1298 // otherwise we wont disable streams properly in new xorg
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1299 // FIXME: shouldnt this be enabled?
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1300 // SavageStreamsOn();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1301 SavageStreamsOff();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1302 // info->vidixcolorkey=0x0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1303
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1304 // OUTREG( SSTREAM_WINDOW_START_REG, OS_XY(0xfffe, 0xfffe) );
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1305 // SavageSetColorKeyOld();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1306 //FIXME ADD
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1307 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1308 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1309
23057
217694b1c1af declare variables and functions as static
ben
parents: 23048
diff changeset
1310 static void debugout(unsigned int addr, unsigned int val){
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1311 return ;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1312 switch ( addr ){
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1313 case PSTREAM_CONTROL_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1314 fprintf(stderr,"PSTREAM_CONTROL_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1315 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1316 case COL_CHROMA_KEY_CONTROL_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1317 fprintf(stderr,"COL_CHROMA_KEY_CONTROL_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1318 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1319 case SSTREAM_CONTROL_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1320 fprintf(stderr,"SSTREAM_CONTROL_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1321 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1322 case CHROMA_KEY_UPPER_BOUND_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1323 fprintf(stderr,"CHROMA_KEY_UPPER_BOUND_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1324 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1325 case SSTREAM_STRETCH_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1326 fprintf(stderr,"SSTREAM_STRETCH_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1327 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1328 case COLOR_ADJUSTMENT_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1329 fprintf(stderr,"COLOR_ADJUSTMENT_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1330 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1331 case BLEND_CONTROL_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1332 fprintf(stderr,"BLEND_CONTROL_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1333 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1334 case PSTREAM_FBADDR0_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1335 fprintf(stderr,"PSTREAM_FBADDR0_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1336 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1337 case PSTREAM_FBADDR1_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1338 fprintf(stderr,"PSTREAM_FBADDR1_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1339 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1340 case PSTREAM_STRIDE_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1341 fprintf(stderr,"PSTREAM_STRIDE_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1342 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1343 case DOUBLE_BUFFER_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1344 fprintf(stderr,"DOUBLE_BUFFER_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1345 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1346 case SSTREAM_FBADDR0_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1347 fprintf(stderr,"SSTREAM_FBADDR0_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1348 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1349 case SSTREAM_FBADDR1_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1350 fprintf(stderr,"SSTREAM_FBADDR1_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1351 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1352 case SSTREAM_STRIDE_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1353 fprintf(stderr,"SSTREAM_STRIDE_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1354 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1355 case SSTREAM_VSCALE_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1356 fprintf(stderr,"SSTREAM_VSCALE_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1357 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1358 case SSTREAM_VINITIAL_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1359 fprintf(stderr,"SSTREAM_VINITIAL_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1360 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1361 case SSTREAM_LINES_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1362 fprintf(stderr,"SSTREAM_LINES_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1363 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1364 case STREAMS_FIFO_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1365 fprintf(stderr,"STREAMS_FIFO_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1366 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1367 case PSTREAM_WINDOW_START_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1368 fprintf(stderr,"PSTREAM_WINDOW_START_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1369 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1370 case PSTREAM_WINDOW_SIZE_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1371 fprintf(stderr,"PSTREAM_WINDOW_SIZE_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1372 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1373 case SSTREAM_WINDOW_START_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1374 fprintf(stderr,"SSTREAM_WINDOW_START_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1375 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1376 case SSTREAM_WINDOW_SIZE_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1377 fprintf(stderr,"SSTREAM_WINDOW_SIZE_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1378 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1379 case FIFO_CONTROL:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1380 fprintf(stderr,"FIFO_CONTROL");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1381 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1382 case PSTREAM_FBSIZE_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1383 fprintf(stderr,"PSTREAM_FBSIZE_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1384 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1385 case SSTREAM_FBSIZE_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1386 fprintf(stderr,"SSTREAM_FBSIZE_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1387 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1388 case SSTREAM_FBADDR2_REG:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1389 fprintf(stderr,"SSTREAM_FBADDR2_REG");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1390 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1391
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1392 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1393 fprintf(stderr,":\t\t 0x%08X = %u\n",val,val);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1394 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1395
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
1396 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
1397 "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
1398 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
1399 .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
1400 .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
1401 .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
1402 .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
1403 .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
1404 .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
1405 .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
1406 .playback_off = savage_playback_off,
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1407 .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
1408 .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
1409 .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
1410 };