annotate vidix/sis_vid.c @ 29998:0dacb57a3d3e

Filter list of missing source files so that it only contains nonexisting files. Thus those files can be symlinked directly without testing if they exist.
author diego
date Mon, 14 Dec 2009 12:03:02 +0000
parents 0f1b5b68af32
children 36818ea5ce95
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
23046
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
1 /*
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
2 * VIDIX driver for SiS chipsets.
26718
051b2632f121 consistency cosmetics: Move some parts of file headers around; typo fixes.
diego
parents: 26203
diff changeset
3 * Based on SiS Xv driver
051b2632f121 consistency cosmetics: Move some parts of file headers around; typo fixes.
diego
parents: 26203
diff changeset
4 *
28307
2391228b7ff0 cosmetics: Remove pointless period after copyright statement non-sentences.
diego
parents: 28051
diff changeset
5 * Copyright (C) 2003 Jake Page, Sugar Media
2391228b7ff0 cosmetics: Remove pointless period after copyright statement non-sentences.
diego
parents: 28051
diff changeset
6 * Copyright 2002-2003 by Thomas Winischhofer, Vienna, Austria
26718
051b2632f121 consistency cosmetics: Move some parts of file headers around; typo fixes.
diego
parents: 26203
diff changeset
7 * 2003/10/08 integrated into mplayer/vidix architecture -- Alex Beregszaszi
23046
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
8 *
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
9 * 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
10 *
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
11 * 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
12 * 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
13 * 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
14 * (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
15 *
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
16 * 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
17 * 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
18 * 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
19 * 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
20 *
26719
3abd1629658b Use standard license headers.
diego
parents: 26718
diff changeset
21 * You should have received a copy of the GNU General Public License along
3abd1629658b Use standard license headers.
diego
parents: 26718
diff changeset
22 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
3abd1629658b Use standard license headers.
diego
parents: 26718
diff changeset
23 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23046
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
24 */
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
25
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
26 #include <errno.h>
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
27 #include <stdio.h>
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
28 #include <stdlib.h>
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
29 #include <string.h>
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
30 #include <inttypes.h>
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
31 #include <unistd.h>
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
32
26203
0d255d03016f #include config.h before all other headers.
diego
parents: 23260
diff changeset
33 #include "config.h"
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
34 #include "vidix.h"
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
35 #include "fourcc.h"
22901
a7605669b114 renamed libdha.[hc] to dha.[hc]
ben
parents: 22900
diff changeset
36 #include "dha.h"
22900
a9e111b88c4a merged libdha and libvidix, moved all files from libdha to vidix directory
ben
parents: 22867
diff changeset
37 #include "pci_ids.h"
a9e111b88c4a merged libdha and libvidix, moved all files from libdha to vidix directory
ben
parents: 22867
diff changeset
38 #include "pci_names.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 "sis_regs.h"
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
41 #include "sis_defs.h"
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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
44 /** Random defines **/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
45
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
46 #define WATCHDOG_DELAY 500000 /* Watchdog counter for retrace waiting */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
47 #define IMAGE_MIN_WIDTH 32 /* Min and max source image sizes */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
48 #define IMAGE_MIN_HEIGHT 24
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
49 #define IMAGE_MAX_WIDTH 720
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
50 #define IMAGE_MAX_HEIGHT 576
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
51 #define IMAGE_MAX_WIDTH_M650 1920
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
52 #define IMAGE_MAX_HEIGHT_M650 1080
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 #define OVERLAY_MIN_WIDTH 32 /* Minimum overlay sizes */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
55 #define OVERLAY_MIN_HEIGHT 24
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
56
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
57 #define DISPMODE_SINGLE1 0x1 /* TW: CRT1 only */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
58 #define DISPMODE_SINGLE2 0x2 /* TW: CRT2 only */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
59 #define DISPMODE_MIRROR 0x4 /* TW: CRT1 + CRT2 MIRROR */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
60
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
61 #define VMODE_INTERLACED 0x1
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
62 #define VMODE_DOUBLESCAN 0x2
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
63
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
64 typedef struct {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
65 short x1, y1, x2, y2;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
66 } BoxRec;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
67
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
68 typedef struct {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
69 int pixelFormat;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
70
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
71 uint16_t pitch;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
72 uint16_t origPitch;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
73
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
74 uint8_t keyOP;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
75 uint16_t HUSF;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
76 uint16_t VUSF;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
77 uint8_t IntBit;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
78 uint8_t wHPre;
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 uint16_t srcW;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
81 uint16_t srcH;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
82
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
83 BoxRec dstBox;
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 uint32_t PSY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
86 uint32_t PSV;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
87 uint32_t PSU;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
88 uint8_t bobEnable;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
89
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
90 uint8_t contrastCtrl;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
91 uint8_t contrastFactor;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
92
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
93 uint8_t lineBufSize;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
94
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
95 uint8_t(*VBlankActiveFunc) ();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
96
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
97 uint16_t SCREENheight;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
98
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
99 } SISOverlayRec, *SISOverlayPtr;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
100
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
101
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
102 /** static variable definitions **/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
103 static int sis_probed = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
104 static pciinfo_t pci_info;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
105 unsigned int sis_verbose = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
106
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
107 static void *sis_mem_base;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
108 /* static void *sis_reg_base; */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
109 unsigned short sis_iobase;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
110
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
111 unsigned int sis_vga_engine = UNKNOWN_VGA;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
112 static unsigned int sis_displaymode = DISPMODE_SINGLE1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
113 static unsigned int sis_has_two_overlays = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
114 static unsigned int sis_bridge_is_slave = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
115 static unsigned int sis_shift_value = 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
116 static unsigned int sis_vmode = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
117 unsigned int sis_vbflags = DISPTYPE_DISP1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
118 unsigned int sis_overlay_on_crt1 = 1;
22867
d76307ffcb77 killed warnings in sis driver
ben
parents: 22858
diff changeset
119 int sis_crt1_off = -1;
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
120 unsigned int sis_detected_crt2_devices;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
121 unsigned int sis_force_crt2_type = CRT2_DEFAULT;
22867
d76307ffcb77 killed warnings in sis driver
ben
parents: 22858
diff changeset
122 int sis_device_id = -1;
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 static int sis_format;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
125 static int sis_Yoff = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
126 static int sis_Voff = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
127 static int sis_Uoff = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
128 static int sis_screen_width = 640;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
129 static int sis_screen_height = 480;
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 static int sis_frames[VID_PLAY_MAXFRAMES];
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 static vidix_grkey_t sis_grkey;
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 static vidix_capability_t sis_cap = {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
136 "SiS 300/310/325 Video Driver",
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
137 "Jake Page",
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
138 TYPE_OUTPUT,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
139 {0, 0, 0, 0},
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
140 2048,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
141 2048,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
142 4,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
143 4,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
144 -1,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
145 FLAG_UPSCALER | FLAG_DOWNSCALER | FLAG_EQUALIZER,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
146 VENDOR_SIS,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
147 -1,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
148 {0, 0, 0, 0}
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
149 };
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
150
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
151 static vidix_video_eq_t sis_equal = {
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
152 VEQ_CAP_BRIGHTNESS | VEQ_CAP_CONTRAST,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
153 200, 0, 0, 0, 0, 0, 0, 0
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
154 };
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
155
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
156 static unsigned short sis_card_ids[] = {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
157 DEVICE_SIS_300,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
158 DEVICE_SIS_315H,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
159 DEVICE_SIS_315,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
160 DEVICE_SIS_315PRO,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
161 DEVICE_SIS_330,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
162 DEVICE_SIS_540_VGA,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
163 DEVICE_SIS_550_VGA,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
164 DEVICE_SIS_630_VGA,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
165 DEVICE_SIS_650_VGA
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
166 };
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 /** function declarations **/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
169
28051
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 27079
diff changeset
170 void sis_init_video_bridge(void);
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
171
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
172
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
173 static void set_overlay(SISOverlayPtr pOverlay, int index);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
174 static void close_overlay(void);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
175 static void calc_scale_factor(SISOverlayPtr pOverlay,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
176 int index, int iscrt2);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
177 static void set_line_buf_size(SISOverlayPtr pOverlay);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
178 static void merge_line_buf(int enable);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
179 static void set_format(SISOverlayPtr pOverlay);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
180 static void set_colorkey(void);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
181
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
182 static void set_brightness(uint8_t brightness);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
183 static void set_contrast(uint8_t contrast);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
184 static void set_saturation(char saturation);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
185 static void set_hue(uint8_t hue);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
186
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
187 /* IO Port access functions */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
188 static uint8_t getvideoreg(uint8_t reg)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
189 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
190 uint8_t ret;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
191 inSISIDXREG(SISVID, reg, ret);
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26719
diff changeset
192 return ret;
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
193 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
194
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
195 static void setvideoreg(uint8_t reg, uint8_t data)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
196 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
197 outSISIDXREG(SISVID, reg, data);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
198 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
199
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
200 static void setvideoregmask(uint8_t reg, uint8_t data, uint8_t mask)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
201 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
202 uint8_t old;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
203
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
204 inSISIDXREG(SISVID, reg, old);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
205 data = (data & mask) | (old & (~mask));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
206 outSISIDXREG(SISVID, reg, data);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
207 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
208
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
209 static void setsrregmask(uint8_t reg, uint8_t data, uint8_t mask)
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 uint8_t old;
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 inSISIDXREG(SISSR, reg, old);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
214 data = (data & mask) | (old & (~mask));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
215 outSISIDXREG(SISSR, reg, data);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
216 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
217
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
218 /* vblank checking*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
219 static uint8_t vblank_active_CRT1(void)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
220 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
221 /* this may be too simplistic? */
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26719
diff changeset
222 return inSISREG(SISINPSTAT) & 0x08;
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
223 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
224
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
225 static uint8_t vblank_active_CRT2(void)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
226 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
227 uint8_t ret;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
228 if (sis_vga_engine == SIS_315_VGA) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
229 inSISIDXREG(SISPART1, Index_310_CRT2_FC_VR, ret);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
230 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
231 inSISIDXREG(SISPART1, Index_CRT2_FC_VR, ret);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
232 }
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26719
diff changeset
233 return (ret & 0x02) ^ 0x02;
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
234 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
235
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
236 static int find_chip(unsigned chip_id)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
237 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
238 unsigned i;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
239 for (i = 0; i < sizeof(sis_card_ids) / sizeof(unsigned short); i++) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
240 if (chip_id == sis_card_ids[i])
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
241 return i;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
242 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
243 return -1;
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
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
246 static int sis_probe(int verbose, int force)
22850
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 pciinfo_t lst[MAX_PCI_DEVICES];
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
249 unsigned i, num_pci;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
250 int err;
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 sis_verbose = verbose;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
253 force = force;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
254 err = pci_scan(lst, &num_pci);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
255 if (err) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
256 printf("[SiS] Error occurred during pci scan: %s\n", strerror(err));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
257 return err;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
258 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
259 err = ENXIO;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
260 for (i = 0; i < num_pci; i++) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
261 if (lst[i].vendor == VENDOR_SIS) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
262 int idx;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
263 const char *dname;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
264 idx = find_chip(lst[i].device);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
265 if (idx == -1)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
266 continue;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
267 dname = pci_device_name(VENDOR_SIS, lst[i].device);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
268 dname = dname ? dname : "Unknown chip";
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
269 if (sis_verbose > 0)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
270 printf("[SiS] Found chip: %s (0x%X)\n",
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
271 dname, lst[i].device);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
272 sis_device_id = sis_cap.device_id = lst[i].device;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
273 err = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
274 memcpy(&pci_info, &lst[i], sizeof(pciinfo_t));
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 sis_has_two_overlays = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
277 switch (sis_cap.device_id) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
278 case DEVICE_SIS_300:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
279 case DEVICE_SIS_630_VGA:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
280 sis_has_two_overlays = 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
281 case DEVICE_SIS_540_VGA:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
282 sis_vga_engine = SIS_300_VGA;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
283 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
284 case DEVICE_SIS_330:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
285 case DEVICE_SIS_550_VGA:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
286 sis_has_two_overlays = 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
287 case DEVICE_SIS_315H:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
288 case DEVICE_SIS_315:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
289 case DEVICE_SIS_315PRO:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
290 case DEVICE_SIS_650_VGA:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
291 /* M650 & 651 have 2 overlays */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
292 /* JCP: I think this works, but not really tested yet */
23260
427075ffb413 allow sis vidix driver to access registers and avoid segfaulting (patch by Andrew Calkin)
ben
parents: 23048
diff changeset
293 if (enable_app_io() == 0 )
22850
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 unsigned char CR5F;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
296 unsigned char tempreg1, tempreg2;
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 inSISIDXREG(SISCR, 0x5F, CR5F);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
299 CR5F &= 0xf0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
300 andSISIDXREG(SISCR, 0x5c, 0x07);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
301 inSISIDXREG(SISCR, 0x5c, tempreg1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
302 tempreg1 &= 0xf8;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
303 setSISIDXREG(SISCR, 0x5c, 0x07, 0xf8);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
304 inSISIDXREG(SISCR, 0x5c, tempreg2);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
305 tempreg2 &= 0xf8;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
306 if ((!tempreg1) || (tempreg2)) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
307 if (CR5F & 0x80) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
308 sis_has_two_overlays = 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
309 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
310 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
311 sis_has_two_overlays = 1; /* ? */
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 (sis_has_two_overlays) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
314 if (sis_verbose > 0)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
315 printf
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
316 ("[SiS] detected M650/651 with 2 overlays\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
317 }
23260
427075ffb413 allow sis vidix driver to access registers and avoid segfaulting (patch by Andrew Calkin)
ben
parents: 23048
diff changeset
318 disable_app_io();
22850
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 sis_vga_engine = SIS_315_VGA;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
321 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
322 default:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
323 /* should never get here */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
324 sis_vga_engine = UNKNOWN_VGA;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
325 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
326 }
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 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
329 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
330 if (err && sis_verbose) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
331 printf("[SiS] Can't find chip\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
332 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
333 sis_probed = 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
334 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
335
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
336 return err;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
337 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
338
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
339 static int sis_init(void)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
340 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
341 uint8_t sr_data, cr_data, cr_data2;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
342 char *env_overlay_crt;
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 if (!sis_probed) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
345 printf("[SiS] driver was not probed but is being initialized\n");
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26719
diff changeset
346 return EINTR;
22850
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
23260
427075ffb413 allow sis vidix driver to access registers and avoid segfaulting (patch by Andrew Calkin)
ben
parents: 23048
diff changeset
349 if (enable_app_io() != 0)
427075ffb413 allow sis vidix driver to access registers and avoid segfaulting (patch by Andrew Calkin)
ben
parents: 23048
diff changeset
350 {
427075ffb413 allow sis vidix driver to access registers and avoid segfaulting (patch by Andrew Calkin)
ben
parents: 23048
diff changeset
351 printf("[SiS] can't enable register I/O\n");
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26719
diff changeset
352 return EINTR;
23260
427075ffb413 allow sis vidix driver to access registers and avoid segfaulting (patch by Andrew Calkin)
ben
parents: 23048
diff changeset
353 }
427075ffb413 allow sis vidix driver to access registers and avoid segfaulting (patch by Andrew Calkin)
ben
parents: 23048
diff changeset
354
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
355 /* JCP: this is WRONG. Need to coordinate w/ sisfb to use correct mem */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
356 /* map 16MB scary hack for now. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
357 sis_mem_base = map_phys_mem(pci_info.base0, 0x1000000);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
358 /* sis_reg_base = map_phys_mem(pci_info.base1, 0x20000); */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
359 sis_iobase = pci_info.base2 & 0xFFFC;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
360
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
361 /* would like to use fb ioctl - or some other method - here to get
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
362 current resolution. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
363 inSISIDXREG(SISCR, 0x12, cr_data);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
364 inSISIDXREG(SISCR, 0x07, cr_data2);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
365 sis_screen_height =
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
366 ((cr_data & 0xff) | ((uint16_t) (cr_data2 & 0x02) << 7) |
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
367 ((uint16_t) (cr_data2 & 0x40) << 3) | ((uint16_t) (cr_data & 0x02)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
368 << 9)) + 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
369
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
370 inSISIDXREG(SISSR, 0x0b, sr_data);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
371 inSISIDXREG(SISCR, 0x01, cr_data);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
372 sis_screen_width = (((cr_data & 0xff) |
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
373 ((uint16_t) (sr_data & 0x0C) << 6)) + 1) * 8;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
374
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
375 inSISIDXREG(SISSR, Index_SR_Graphic_Mode, sr_data);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
376 if (sr_data & 0x20) /* interlaced mode */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
377 sis_vmode |= VMODE_INTERLACED;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
378
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
379 /* JCP: eventually I'd like to replace this with a call to sisfb
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
380 SISFB_GET_INFO ioctl to get video bridge info. Not for now,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
381 since it requires a very new and not widely distributed version. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
382 sis_init_video_bridge();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
383
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
384 env_overlay_crt = getenv("VIDIX_CRT");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
385 if (env_overlay_crt) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
386 int crt = atoi(env_overlay_crt);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
387 if (crt == 1 || crt == 2) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
388 sis_overlay_on_crt1 = (crt == 1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
389 if (sis_verbose > 0) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
390 printf
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
391 ("[SiS] override: using overlay on CRT%d from VIDIX_CRT\n",
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
392 crt);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
393 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
394 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
395 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
396
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
397 return 0;
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
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
400 static void sis_destroy(void)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
401 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
402 /* unmap_phys_mem(sis_reg_base, 0x20000); */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
403 /* JCP: see above, hence also a hack. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
404 unmap_phys_mem(sis_mem_base, 0x1000000);
23260
427075ffb413 allow sis vidix driver to access registers and avoid segfaulting (patch by Andrew Calkin)
ben
parents: 23048
diff changeset
405 disable_app_io();
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
406 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
407
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
408 static int sis_get_caps(vidix_capability_t * to)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
409 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
410 memcpy(to, &sis_cap, sizeof(vidix_capability_t));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
411 return 0;
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 static int is_supported_fourcc(uint32_t fourcc)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
415 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
416 switch (fourcc) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
417 case IMGFMT_YV12:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
418 case IMGFMT_I420:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
419 case IMGFMT_UYVY:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
420 case IMGFMT_YUY2:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
421 case IMGFMT_RGB15:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
422 case IMGFMT_RGB16:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
423 return 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
424 default:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
425 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
426 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
427 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
428
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
429 static int sis_query_fourcc(vidix_fourcc_t * to)
22850
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 if (is_supported_fourcc(to->fourcc)) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
432 to->depth = VID_DEPTH_8BPP | VID_DEPTH_16BPP | VID_DEPTH_32BPP;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
433 to->flags = VID_CAP_EXPAND | VID_CAP_SHRINK | VID_CAP_COLORKEY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
434 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
435 } else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
436 to->depth = to->flags = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
437 return ENOSYS;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
438 }
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 static int bridge_in_slave_mode(void)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
441 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
442 unsigned char usScratchP1_00;
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 if (!(sis_vbflags & VB_VIDEOBRIDGE))
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
445 return 0;
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 inSISIDXREG(SISPART1, 0x00, usScratchP1_00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
448 if (((sis_vga_engine == SIS_300_VGA)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
449 && (usScratchP1_00 & 0xa0) == 0x20)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
450 || ((sis_vga_engine == SIS_315_VGA)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
451 && (usScratchP1_00 & 0x50) == 0x10)) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
452 return 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
453 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
454 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
455 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
456 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
457
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
458 /* This does not handle X dual head mode, since 1) vidix doesn't support it
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
459 and 2) it doesn't make sense for other gfx drivers */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
460 static void set_dispmode(void)
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 sis_bridge_is_slave = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
463
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
464 if (bridge_in_slave_mode())
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
465 sis_bridge_is_slave = 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
466
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
467 if ((sis_vbflags & VB_DISPMODE_MIRROR) ||
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
468 (sis_bridge_is_slave && (sis_vbflags & DISPTYPE_DISP2))) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
469 if (sis_has_two_overlays)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
470 sis_displaymode = DISPMODE_MIRROR; /* TW: CRT1+CRT2 (2 overlays) */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
471 else if (!sis_overlay_on_crt1)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
472 sis_displaymode = DISPMODE_SINGLE2;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
473 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
474 sis_displaymode = DISPMODE_SINGLE1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
475 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
476 if (sis_vbflags & DISPTYPE_DISP1) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
477 sis_displaymode = DISPMODE_SINGLE1; /* TW: CRT1 only */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
478 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
479 sis_displaymode = DISPMODE_SINGLE2; /* TW: CRT2 only */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
480 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
481 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
482 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
483
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
484 static void set_disptype_regs(void)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
485 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
486 switch (sis_displaymode) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
487 case DISPMODE_SINGLE1: /* TW: CRT1 only */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
488 if (sis_verbose > 2) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
489 printf("[SiS] Setting up overlay on CRT1\n");
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 if (sis_has_two_overlays) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
492 setsrregmask(0x06, 0x00, 0xc0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
493 setsrregmask(0x32, 0x00, 0xc0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
494 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
495 setsrregmask(0x06, 0x00, 0xc0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
496 setsrregmask(0x32, 0x00, 0xc0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
497 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
498 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
499 case DISPMODE_SINGLE2: /* TW: CRT2 only */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
500 if (sis_verbose > 2) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
501 printf("[SiS] Setting up overlay on CRT2\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
502 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
503 if (sis_has_two_overlays) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
504 setsrregmask(0x06, 0x80, 0xc0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
505 setsrregmask(0x32, 0x80, 0xc0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
506 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
507 setsrregmask(0x06, 0x40, 0xc0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
508 setsrregmask(0x32, 0x40, 0xc0);
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 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
511 case DISPMODE_MIRROR: /* TW: CRT1 + CRT2 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
512 default:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
513 if (sis_verbose > 2) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
514 printf("[SiS] Setting up overlay on CRT1 AND CRT2!\n");
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 setsrregmask(0x06, 0x80, 0xc0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
517 setsrregmask(0x32, 0x80, 0xc0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
518 break;
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 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
521
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
522 static void init_overlay(void)
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 /* Initialize first overlay (CRT1) */
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 /* Write-enable video registers */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
527 setvideoregmask(Index_VI_Control_Misc2, 0x80, 0x81);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
528
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
529 /* Disable overlay */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
530 setvideoregmask(Index_VI_Control_Misc0, 0x00, 0x02);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
531
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
532 /* Disable bobEnable */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
533 setvideoregmask(Index_VI_Control_Misc1, 0x02, 0x02);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
534
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
535 /* Reset scale control and contrast */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
536 setvideoregmask(Index_VI_Scale_Control, 0x60, 0x60);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
537 setvideoregmask(Index_VI_Contrast_Enh_Ctrl, 0x04, 0x1F);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
538
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
539 setvideoreg(Index_VI_Disp_Y_Buf_Preset_Low, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
540 setvideoreg(Index_VI_Disp_Y_Buf_Preset_Middle, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
541 setvideoreg(Index_VI_UV_Buf_Preset_Low, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
542 setvideoreg(Index_VI_UV_Buf_Preset_Middle, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
543 setvideoreg(Index_VI_Disp_Y_UV_Buf_Preset_High, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
544 setvideoreg(Index_VI_Play_Threshold_Low, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
545 setvideoreg(Index_VI_Play_Threshold_High, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
546
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
547 /* may not want to init these here, could already be set to other
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
548 values by app? */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
549 setvideoregmask(Index_VI_Control_Misc2, 0x00, 0x01);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
550 setvideoregmask(Index_VI_Contrast_Enh_Ctrl, 0x04, 0x07);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
551 setvideoreg(Index_VI_Brightness, 0x20);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
552 if (sis_vga_engine == SIS_315_VGA) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
553 setvideoreg(Index_VI_Hue, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
554 setvideoreg(Index_VI_Saturation, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
555 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
556
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
557 /* Initialize second overlay (CRT2) */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
558 if (sis_has_two_overlays) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
559 /* Write-enable video registers */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
560 setvideoregmask(Index_VI_Control_Misc2, 0x81, 0x81);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
561
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
562 /* Disable overlay */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
563 setvideoregmask(Index_VI_Control_Misc0, 0x00, 0x02);
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 /* Disable bobEnable */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
566 setvideoregmask(Index_VI_Control_Misc1, 0x02, 0x02);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
567
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
568 /* Reset scale control and contrast */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
569 setvideoregmask(Index_VI_Scale_Control, 0x60, 0x60);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
570 setvideoregmask(Index_VI_Contrast_Enh_Ctrl, 0x04, 0x1F);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
571
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
572 setvideoreg(Index_VI_Disp_Y_Buf_Preset_Low, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
573 setvideoreg(Index_VI_Disp_Y_Buf_Preset_Middle, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
574 setvideoreg(Index_VI_UV_Buf_Preset_Low, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
575 setvideoreg(Index_VI_UV_Buf_Preset_Middle, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
576 setvideoreg(Index_VI_Disp_Y_UV_Buf_Preset_High, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
577 setvideoreg(Index_VI_Play_Threshold_Low, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
578 setvideoreg(Index_VI_Play_Threshold_High, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
579
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
580 setvideoregmask(Index_VI_Control_Misc2, 0x01, 0x01);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
581 setvideoregmask(Index_VI_Contrast_Enh_Ctrl, 0x04, 0x07);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
582 setvideoreg(Index_VI_Brightness, 0x20);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
583 if (sis_vga_engine == SIS_315_VGA) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
584 setvideoreg(Index_VI_Hue, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
585 setvideoreg(Index_VI_Saturation, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
586 }
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
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
590 static int sis_set_eq(const vidix_video_eq_t * 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
591
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
592 static int sis_config_playback(vidix_playback_t * info)
22850
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 SISOverlayRec overlay;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
595 int srcOffsetX = 0, srcOffsetY = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
596 int sx, sy;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
597 int index = 0, iscrt2 = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
598 int total_size;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
599
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
600 short src_w, drw_w;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
601 short src_h, drw_h;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
602 short src_x, drw_x;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
603 short src_y, drw_y;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
604 long dga_offset;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
605 int pitch;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
606 unsigned int i;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
607
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
608 if (!is_supported_fourcc(info->fourcc))
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
609 return -1;
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 /* set chipset/engine.dependent config info */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
612 /* which CRT to use, etc.? */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
613 switch (sis_vga_engine) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
614 case SIS_315_VGA:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
615 sis_shift_value = 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
616 sis_equal.cap |= VEQ_CAP_SATURATION | VEQ_CAP_HUE;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
617 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
618 case SIS_300_VGA:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
619 default:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
620 sis_shift_value = 2;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
621 break;
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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
624 sis_displaymode = DISPMODE_SINGLE1; /* xV driver code in set_dispmode() */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
625 set_dispmode();
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 set_disptype_regs();
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 init_overlay();
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 /* get basic dimension info */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
632 src_x = info->src.x;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
633 src_y = info->src.y;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
634 src_w = info->src.w;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
635 src_h = info->src.h;
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 drw_x = info->dest.x;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
638 drw_y = info->dest.y;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
639 drw_w = info->dest.w;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
640 drw_h = info->dest.h;
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 switch (info->fourcc) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
643 case IMGFMT_YV12:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
644 case IMGFMT_I420:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
645 pitch = (src_w + 7) & ~7;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
646 total_size = (pitch * src_h * 3) >> 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
647 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
648 case IMGFMT_YUY2:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
649 case IMGFMT_UYVY:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
650 case IMGFMT_RGB15:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
651 case IMGFMT_RGB16:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
652 pitch = ((src_w << 1) + 3) & ~3;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
653 total_size = pitch * src_h;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
654 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
655 default:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
656 return -1;
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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
659 /* "allocate" memory for overlay! */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
660 /* start at 8MB = sisfb's "dri reserved space" -
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
661 really shouldn't hardcode though */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
662 /* XXX: JCP - this can use the sisfb FBIO_ALLOC ioctl to safely
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
663 allocate "video heap" memory... */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
664 dga_offset = 0x800000;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
665
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
666 /* use 7MB for now. need to calc/get real info from sisfb? */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
667 /* this can result in a LOT of frames - probably not necessary */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
668 info->num_frames = 0x700000 / (total_size * 2);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
669 if (info->num_frames > VID_PLAY_MAXFRAMES)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
670 info->num_frames = VID_PLAY_MAXFRAMES;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
671
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
672 info->dga_addr = sis_mem_base + dga_offset;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
673 info->dest.pitch.y = 16;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
674 info->dest.pitch.u = 16;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
675 info->dest.pitch.v = 16;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
676 info->offset.y = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
677 info->offset.u = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
678 info->offset.v = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
679 info->frame_size = (total_size * 2); /* why times 2 ? */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
680 for (i = 0; i < info->num_frames; i++) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
681 info->offsets[i] = info->frame_size * i;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
682 /* save ptrs to mem buffers */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
683 sis_frames[i] = (dga_offset + info->offsets[i]);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
684 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
685
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
686 memset(&overlay, 0, sizeof(overlay));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
687 overlay.pixelFormat = sis_format = info->fourcc;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
688 overlay.pitch = overlay.origPitch = pitch;
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 overlay.keyOP = (sis_grkey.ckey.op == CKEY_TRUE ?
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
692 VI_ROP_DestKey : VI_ROP_Always);
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 overlay.bobEnable = 0x00;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
695
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
696 overlay.SCREENheight = sis_screen_height;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
697
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
698 /* probably will not support X virtual screen > phys very well? */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
699 overlay.dstBox.x1 = drw_x; /* - pScrn->frameX0; */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
700 overlay.dstBox.x2 = drw_x + drw_w; /* - pScrn->frameX0; ??? */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
701 overlay.dstBox.y1 = drw_y; /* - pScrn->frameY0; */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
702 overlay.dstBox.y2 = drw_y + drw_h; /* - pScrn->frameY0; ??? */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
703
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
704 if ((overlay.dstBox.x1 > overlay.dstBox.x2) ||
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
705 (overlay.dstBox.y1 > overlay.dstBox.y2))
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
706 return -1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
707
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
708 if ((overlay.dstBox.x2 < 0) || (overlay.dstBox.y2 < 0))
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
709 return -1;
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 if (overlay.dstBox.x1 < 0) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
712 srcOffsetX = src_w * (-overlay.dstBox.x1) / drw_w;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
713 overlay.dstBox.x1 = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
714 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
715 if (overlay.dstBox.y1 < 0) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
716 srcOffsetY = src_h * (-overlay.dstBox.y1) / drw_h;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
717 overlay.dstBox.y1 = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
718 }
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 switch (info->fourcc) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
721 case IMGFMT_YV12:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
722 info->dest.pitch.y = 16;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
723 sx = (src_x + srcOffsetX) & ~7;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
724 sy = (src_y + srcOffsetY) & ~1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
725 info->offset.y = sis_Yoff = sx + sy * pitch;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
726 /* JCP: NOTE reversed u & v here! Not sure why this is needed.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
727 maybe mplayer & sis define U & V differently?? */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
728 info->offset.u = sis_Voff =
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
729 src_h * pitch + ((sx + sy * pitch / 2) >> 1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
730 info->offset.v = sis_Uoff =
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
731 src_h * pitch * 5 / 4 + ((sx + sy * pitch / 2) >> 1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
732
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
733 overlay.PSY = (sis_frames[0] + sis_Yoff) >> sis_shift_value;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
734 overlay.PSV = (sis_frames[0] + sis_Voff) >> sis_shift_value;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
735 overlay.PSU = (sis_frames[0] + sis_Uoff) >> sis_shift_value;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
736 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
737 case IMGFMT_I420:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
738 sx = (src_x + srcOffsetX) & ~7;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
739 sy = (src_y + srcOffsetY) & ~1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
740 info->offset.y = sis_Yoff = sx + sy * pitch;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
741 /* JCP: see above... */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
742 info->offset.u = sis_Voff =
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
743 src_h * pitch * 5 / 4 + ((sx + sy * pitch / 2) >> 1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
744 info->offset.v = sis_Uoff =
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
745 src_h * pitch + ((sx + sy * pitch / 2) >> 1);
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 overlay.PSY = (sis_frames[0] + sis_Yoff) >> sis_shift_value;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
748 overlay.PSV = (sis_frames[0] + sis_Voff) >> sis_shift_value;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
749 overlay.PSU = (sis_frames[0] + sis_Uoff) >> sis_shift_value;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
750 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
751 case IMGFMT_YUY2:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
752 case IMGFMT_UYVY:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
753 case IMGFMT_RGB16:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
754 case IMGFMT_RGB15:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
755 default:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
756 sx = (src_x + srcOffsetX) & ~1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
757 sy = (src_y + srcOffsetY);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
758 info->offset.y = sis_Yoff = sx * 2 + sy * pitch;
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 overlay.PSY = (sis_frames[0] + sis_Yoff) >> sis_shift_value;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
761 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
762 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
763
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
764 /* FIXME: is it possible that srcW < 0? */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
765 overlay.srcW = src_w - (sx - src_x);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
766 overlay.srcH = src_h - (sy - src_y);
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 /* set merge line buffer */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
769 merge_line_buf(overlay.srcW > 384);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
770
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
771 /* calculate line buffer length */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
772 set_line_buf_size(&overlay);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
773
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
774 if (sis_displaymode == DISPMODE_SINGLE2) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
775 if (sis_has_two_overlays) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
776 /* TW: On chips with two overlays we use
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
777 * overlay 2 for CRT2 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
778 index = 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
779 iscrt2 = 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
780 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
781 /* TW: On chips with only one overlay we
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
782 * use that only overlay for CRT2 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
783 index = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
784 iscrt2 = 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
785 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
786 overlay.VBlankActiveFunc = vblank_active_CRT2;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
787 /* overlay.GetScanLineFunc = get_scanline_CRT2; */
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 index = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
790 iscrt2 = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
791 overlay.VBlankActiveFunc = vblank_active_CRT1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
792 /* overlay.GetScanLineFunc = get_scanline_CRT1; */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
793 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
794
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
795 /* calc scale factor (to use below) */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
796 calc_scale_factor(&overlay, index, iscrt2);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
797
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
798 /* Select video1 (used for CRT1) or video2 (used for CRT2) */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
799 setvideoregmask(Index_VI_Control_Misc2, index, 0x01);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
800
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
801 set_format(&overlay);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
802
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
803 set_colorkey();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
804
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
805 sis_set_eq(&sis_equal);
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
806
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
807 /* set up video overlay registers */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
808 set_overlay(&overlay, index);
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 /* prevent badness if bits are not at default setting */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
811 setvideoregmask(Index_VI_Control_Misc1, 0x00, 0x01);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
812 setvideoregmask(Index_VI_Control_Misc2, 0x00, 0x04);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
813
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
814 /* JCP: Xv driver implementation loops back over above code to
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
815 setup mirror CRT2 */
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 return 0;
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
22857
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
820 static int sis_playback_on(void)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
821 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
822 setvideoregmask(Index_VI_Control_Misc0, 0x02, 0x02);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
823 return 0;
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
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
826 static int sis_playback_off(void)
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 unsigned char sridx, cridx;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
829 sridx = inSISREG(SISSR);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
830 cridx = inSISREG(SISCR);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
831 close_overlay();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
832 outSISREG(SISSR, sridx);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
833 outSISREG(SISCR, cridx);
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 return 0;
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
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
838 static int sis_frame_select(unsigned int frame)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
839 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
840 uint8_t data;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
841 int index = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
842 uint32_t PSY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
843
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
844 if (sis_displaymode == DISPMODE_SINGLE2 && sis_has_two_overlays) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
845 index = 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
846 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
847
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
848 PSY = (sis_frames[frame] + sis_Yoff) >> sis_shift_value;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
849
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
850 /* Unlock address registers */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
851 data = getvideoreg(Index_VI_Control_Misc1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
852 setvideoreg(Index_VI_Control_Misc1, data | 0x20);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
853 /* TEST: Is this required? */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
854 setvideoreg(Index_VI_Control_Misc1, data | 0x20);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
855 /* TEST end */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
856 /* TEST: Is this required? */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
857 if (sis_vga_engine == SIS_315_VGA)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
858 setvideoreg(Index_VI_Control_Misc3, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
859 /* TEST end */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
860
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
861 /* set Y start address */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
862 setvideoreg(Index_VI_Disp_Y_Buf_Start_Low, (uint8_t) (PSY));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
863 setvideoreg(Index_VI_Disp_Y_Buf_Start_Middle, (uint8_t) ((PSY) >> 8));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
864 setvideoreg(Index_VI_Disp_Y_Buf_Start_High, (uint8_t) ((PSY) >> 16));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
865 /* set 310/325 series overflow bits for Y plane */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
866 if (sis_vga_engine == SIS_315_VGA) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
867 setvideoreg(Index_VI_Y_Buf_Start_Over,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
868 ((uint8_t) ((PSY) >> 24) & 0x01));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
869 }
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 /* Set U/V data if using plane formats */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
872 if ((sis_format == IMGFMT_YV12) || (sis_format == IMGFMT_I420)) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
873
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
874 uint32_t PSU, PSV;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
875
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
876 PSU = (sis_frames[frame] + sis_Uoff) >> sis_shift_value;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
877 PSV = (sis_frames[frame] + sis_Voff) >> sis_shift_value;
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 /* set U/V start address */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
880 setvideoreg(Index_VI_U_Buf_Start_Low, (uint8_t) PSU);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
881 setvideoreg(Index_VI_U_Buf_Start_Middle, (uint8_t) (PSU >> 8));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
882 setvideoreg(Index_VI_U_Buf_Start_High, (uint8_t) (PSU >> 16));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
883
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
884 setvideoreg(Index_VI_V_Buf_Start_Low, (uint8_t) PSV);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
885 setvideoreg(Index_VI_V_Buf_Start_Middle, (uint8_t) (PSV >> 8));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
886 setvideoreg(Index_VI_V_Buf_Start_High, (uint8_t) (PSV >> 16));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
887
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
888 /* 310/325 series overflow bits */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
889 if (sis_vga_engine == SIS_315_VGA) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
890 setvideoreg(Index_VI_U_Buf_Start_Over,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
891 ((uint8_t) (PSU >> 24) & 0x01));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
892 setvideoreg(Index_VI_V_Buf_Start_Over,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
893 ((uint8_t) (PSV >> 24) & 0x01));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
894 }
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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
897 if (sis_vga_engine == SIS_315_VGA) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
898 /* Trigger register copy for 310 series */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
899 setvideoreg(Index_VI_Control_Misc3, 1 << index);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
900 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
901
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
902 /* Lock the address registers */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
903 setvideoregmask(Index_VI_Control_Misc1, 0x00, 0x20);
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 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
906 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
907
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
908 static int sis_get_gkeys(vidix_grkey_t * grkey)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
909 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
910 memcpy(grkey, &sis_grkey, sizeof(vidix_grkey_t));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
911 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
912 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
913
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
914 static int sis_set_gkeys(const vidix_grkey_t * grkey)
22850
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 memcpy(&sis_grkey, grkey, sizeof(vidix_grkey_t));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
917 set_colorkey();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
918 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
919 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
920
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
921 static int sis_get_eq(vidix_video_eq_t * eq)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
922 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
923 memcpy(eq, &sis_equal, sizeof(vidix_video_eq_t));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
924 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
925 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
926
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
927 static int sis_set_eq(const vidix_video_eq_t * eq)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
928 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
929 int br, sat, cr, hue;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
930 if (eq->cap & VEQ_CAP_BRIGHTNESS)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
931 sis_equal.brightness = eq->brightness;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
932 if (eq->cap & VEQ_CAP_CONTRAST)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
933 sis_equal.contrast = eq->contrast;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
934 if (eq->cap & VEQ_CAP_SATURATION)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
935 sis_equal.saturation = eq->saturation;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
936 if (eq->cap & VEQ_CAP_HUE)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
937 sis_equal.hue = eq->hue;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
938 if (eq->cap & VEQ_CAP_RGB_INTENSITY) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
939 sis_equal.red_intensity = eq->red_intensity;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
940 sis_equal.green_intensity = eq->green_intensity;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
941 sis_equal.blue_intensity = eq->blue_intensity;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
942 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
943 sis_equal.flags = eq->flags;
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 cr = (sis_equal.contrast + 1000) * 7 / 2000;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
946 if (cr < 0)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
947 cr = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
948 if (cr > 7)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
949 cr = 7;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
950
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
951 br = sis_equal.brightness * 127 / 1000;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
952 if (br < -128)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
953 br = -128;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
954 if (br > 127)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
955 br = 127;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
956
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
957 sat = (sis_equal.saturation * 7) / 1000;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
958 if (sat < -7)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
959 sat = -7;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
960 if (sat > 7)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
961 sat = 7;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
962
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
963 hue = sis_equal.hue * 7 / 1000;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
964 if (hue < -8)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
965 hue = -8;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
966 if (hue > 7)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
967 hue = 7;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
968
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
969 set_brightness(br);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
970 set_contrast(cr);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
971 if (sis_vga_engine == SIS_315_VGA) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
972 set_saturation(sat);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
973 set_hue(hue);
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 return 0;
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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
979 static void set_overlay(SISOverlayPtr pOverlay, int index)
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 uint16_t pitch = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
982 uint8_t h_over = 0, v_over = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
983 uint16_t top, bottom, left, right;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
984 uint16_t screenX = sis_screen_width;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
985 uint16_t screenY = sis_screen_height;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
986 uint8_t data;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
987 uint32_t watchdog;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
988
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
989 top = pOverlay->dstBox.y1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
990 bottom = pOverlay->dstBox.y2;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
991 if (bottom > screenY) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
992 bottom = screenY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
993 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
994
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
995 left = pOverlay->dstBox.x1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
996 right = pOverlay->dstBox.x2;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
997 if (right > screenX) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
998 right = screenX;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
999 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1000
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1001 /* JCP: these aren't really tested... */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1002 /* TW: DoubleScan modes require Y coordinates * 2 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1003 if (sis_vmode & VMODE_DOUBLESCAN) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1004 top <<= 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1005 bottom <<= 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1006 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1007 /* TW: Interlace modes require Y coordinates / 2 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1008 if (sis_vmode & VMODE_INTERLACED) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1009 top >>= 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1010 bottom >>= 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1011 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1012
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1013 h_over = (((left >> 8) & 0x0f) | ((right >> 4) & 0xf0));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1014 v_over = (((top >> 8) & 0x0f) | ((bottom >> 4) & 0xf0));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1015
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1016 pitch = pOverlay->pitch >> sis_shift_value;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1017
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1018 /* set line buffer size */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1019 setvideoreg(Index_VI_Line_Buffer_Size, pOverlay->lineBufSize);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1020
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1021 /* set color key mode */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1022 setvideoregmask(Index_VI_Key_Overlay_OP, pOverlay->keyOP, 0x0F);
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 /* TW: We don't have to wait for vertical retrace in all cases */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1025 /* JCP: be safe for now. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1026 if (1 /*pPriv->mustwait */ ) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1027 watchdog = WATCHDOG_DELAY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1028 while (pOverlay->VBlankActiveFunc() && --watchdog);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1029 watchdog = WATCHDOG_DELAY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1030 while ((!pOverlay->VBlankActiveFunc()) && --watchdog);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1031 if (!watchdog && sis_verbose > 0) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1032 printf("[SiS]: timed out waiting for vertical retrace\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1033 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1034 }
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 /* Unlock address registers */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1037 data = getvideoreg(Index_VI_Control_Misc1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1038 setvideoreg(Index_VI_Control_Misc1, data | 0x20);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1039 /* TEST: Is this required? */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1040 setvideoreg(Index_VI_Control_Misc1, data | 0x20);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1041 /* TEST end */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1042
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1043 /* TEST: Is this required? */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1044 if (sis_vga_engine == SIS_315_VGA)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1045 setvideoreg(Index_VI_Control_Misc3, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1046 /* TEST end */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1047
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1048 /* Set Y buf pitch */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1049 setvideoreg(Index_VI_Disp_Y_Buf_Pitch_Low, (uint8_t) (pitch));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1050 setvideoregmask(Index_VI_Disp_Y_UV_Buf_Pitch_Middle,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1051 (uint8_t) (pitch >> 8), 0x0f);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1052
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1053 /* Set Y start address */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1054 setvideoreg(Index_VI_Disp_Y_Buf_Start_Low, (uint8_t) (pOverlay->PSY));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1055 setvideoreg(Index_VI_Disp_Y_Buf_Start_Middle,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1056 (uint8_t) ((pOverlay->PSY) >> 8));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1057 setvideoreg(Index_VI_Disp_Y_Buf_Start_High,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1058 (uint8_t) ((pOverlay->PSY) >> 16));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1059
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1060 /* set 310/325 series overflow bits for Y plane */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1061 if (sis_vga_engine == SIS_315_VGA) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1062 setvideoreg(Index_VI_Disp_Y_Buf_Pitch_High,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1063 (uint8_t) (pitch >> 12));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1064 setvideoreg(Index_VI_Y_Buf_Start_Over,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1065 ((uint8_t) ((pOverlay->PSY) >> 24) & 0x01));
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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1068 /* Set U/V data if using plane formats */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1069 if ((pOverlay->pixelFormat == IMGFMT_YV12) ||
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1070 (pOverlay->pixelFormat == IMGFMT_I420)) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1071
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1072 uint32_t PSU, PSV;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1073
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1074 PSU = pOverlay->PSU;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1075 PSV = pOverlay->PSV;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1076
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1077 /* Set U/V pitch */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1078 setvideoreg(Index_VI_Disp_UV_Buf_Pitch_Low,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1079 (uint8_t) (pitch >> 1));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1080 setvideoregmask(Index_VI_Disp_Y_UV_Buf_Pitch_Middle,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1081 (uint8_t) (pitch >> 5), 0xf0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1082
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1083 /* set U/V start address */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1084 setvideoreg(Index_VI_U_Buf_Start_Low, (uint8_t) PSU);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1085 setvideoreg(Index_VI_U_Buf_Start_Middle, (uint8_t) (PSU >> 8));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1086 setvideoreg(Index_VI_U_Buf_Start_High, (uint8_t) (PSU >> 16));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1087
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1088 setvideoreg(Index_VI_V_Buf_Start_Low, (uint8_t) PSV);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1089 setvideoreg(Index_VI_V_Buf_Start_Middle, (uint8_t) (PSV >> 8));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1090 setvideoreg(Index_VI_V_Buf_Start_High, (uint8_t) (PSV >> 16));
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 /* 310/325 series overflow bits */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1093 if (sis_vga_engine == SIS_315_VGA) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1094 setvideoreg(Index_VI_Disp_UV_Buf_Pitch_High,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1095 (uint8_t) (pitch >> 13));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1096 setvideoreg(Index_VI_U_Buf_Start_Over,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1097 ((uint8_t) (PSU >> 24) & 0x01));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1098 setvideoreg(Index_VI_V_Buf_Start_Over,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1099 ((uint8_t) (PSV >> 24) & 0x01));
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 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1102
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1103 if (sis_vga_engine == SIS_315_VGA) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1104 /* Trigger register copy for 310 series */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1105 setvideoreg(Index_VI_Control_Misc3, 1 << index);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1106 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1107
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1108 /* set scale factor */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1109 setvideoreg(Index_VI_Hor_Post_Up_Scale_Low,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1110 (uint8_t) (pOverlay->HUSF));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1111 setvideoreg(Index_VI_Hor_Post_Up_Scale_High,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1112 (uint8_t) ((pOverlay->HUSF) >> 8));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1113 setvideoreg(Index_VI_Ver_Up_Scale_Low, (uint8_t) (pOverlay->VUSF));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1114 setvideoreg(Index_VI_Ver_Up_Scale_High,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1115 (uint8_t) ((pOverlay->VUSF) >> 8));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1116
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1117 setvideoregmask(Index_VI_Scale_Control, (pOverlay->IntBit << 3)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1118 | (pOverlay->wHPre), 0x7f);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1119
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1120 /* set destination window position */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1121 setvideoreg(Index_VI_Win_Hor_Disp_Start_Low, (uint8_t) left);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1122 setvideoreg(Index_VI_Win_Hor_Disp_End_Low, (uint8_t) right);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1123 setvideoreg(Index_VI_Win_Hor_Over, (uint8_t) h_over);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1124
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1125 setvideoreg(Index_VI_Win_Ver_Disp_Start_Low, (uint8_t) top);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1126 setvideoreg(Index_VI_Win_Ver_Disp_End_Low, (uint8_t) bottom);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1127 setvideoreg(Index_VI_Win_Ver_Over, (uint8_t) v_over);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1128
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1129 setvideoregmask(Index_VI_Control_Misc1, pOverlay->bobEnable, 0x1a);
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 /* Lock the address registers */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1132 setvideoregmask(Index_VI_Control_Misc1, 0x00, 0x20);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1133 }
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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1136 /* TW: Overlay MUST NOT be switched off while beam is over it */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1137 static void close_overlay(void)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1138 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1139 uint32_t watchdog;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1140
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1141 if ((sis_displaymode == DISPMODE_SINGLE2) ||
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1142 (sis_displaymode == DISPMODE_MIRROR)) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1143 if (sis_has_two_overlays) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1144 setvideoregmask(Index_VI_Control_Misc2, 0x01, 0x01);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1145 watchdog = WATCHDOG_DELAY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1146 while (vblank_active_CRT2() && --watchdog);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1147 watchdog = WATCHDOG_DELAY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1148 while ((!vblank_active_CRT2()) && --watchdog);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1149 setvideoregmask(Index_VI_Control_Misc0, 0x00, 0x02);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1150 watchdog = WATCHDOG_DELAY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1151 while (vblank_active_CRT2() && --watchdog);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1152 watchdog = WATCHDOG_DELAY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1153 while ((!vblank_active_CRT2()) && --watchdog);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1154 } else if (sis_displaymode == DISPMODE_SINGLE2) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1155 setvideoregmask(Index_VI_Control_Misc2, 0x00, 0x01);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1156 watchdog = WATCHDOG_DELAY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1157 while (vblank_active_CRT1() && --watchdog);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1158 watchdog = WATCHDOG_DELAY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1159 while ((!vblank_active_CRT1()) && --watchdog);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1160 setvideoregmask(Index_VI_Control_Misc0, 0x00, 0x02);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1161 watchdog = WATCHDOG_DELAY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1162 while (vblank_active_CRT1() && --watchdog);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1163 watchdog = WATCHDOG_DELAY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1164 while ((!vblank_active_CRT1()) && --watchdog);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1165 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1166 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1167 if ((sis_displaymode == DISPMODE_SINGLE1) ||
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1168 (sis_displaymode == DISPMODE_MIRROR)) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1169 setvideoregmask(Index_VI_Control_Misc2, 0x00, 0x01);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1170 watchdog = WATCHDOG_DELAY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1171 while (vblank_active_CRT1() && --watchdog);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1172 watchdog = WATCHDOG_DELAY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1173 while ((!vblank_active_CRT1()) && --watchdog);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1174 setvideoregmask(Index_VI_Control_Misc0, 0x00, 0x02);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1175 watchdog = WATCHDOG_DELAY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1176 while (vblank_active_CRT1() && --watchdog);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1177 watchdog = WATCHDOG_DELAY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1178 while ((!vblank_active_CRT1()) && --watchdog);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1179 }
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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1182
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1183 static void
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1184 calc_scale_factor(SISOverlayPtr pOverlay, int index, int iscrt2)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1185 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1186 uint32_t i = 0, mult = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1187 int flag = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1188
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1189 int dstW = pOverlay->dstBox.x2 - pOverlay->dstBox.x1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1190 int dstH = pOverlay->dstBox.y2 - pOverlay->dstBox.y1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1191 int srcW = pOverlay->srcW;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1192 int srcH = pOverlay->srcH;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1193 /* uint16_t LCDheight = pSiS->LCDheight; */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1194 int srcPitch = pOverlay->origPitch;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1195 int origdstH = dstH;
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 /* get rid of warnings for now */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1198 index = index;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1199 iscrt2 = iscrt2;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1200
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1201 /* TW: For double scan modes, we need to double the height
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1202 * (Perhaps we also need to scale LVDS, but I'm not sure.)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1203 * On 310/325 series, we need to double the width as well.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1204 * Interlace mode vice versa.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1205 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1206 if (sis_vmode & VMODE_DOUBLESCAN) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1207 dstH = origdstH << 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1208 flag = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1209 if (sis_vga_engine == SIS_315_VGA) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1210 dstW <<= 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1211 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1212 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1213 if (sis_vmode & VMODE_INTERLACED) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1214 dstH = origdstH >> 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1215 flag = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1216 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1217
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1218 if (dstW < OVERLAY_MIN_WIDTH)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1219 dstW = OVERLAY_MIN_WIDTH;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1220 if (dstW == srcW) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1221 pOverlay->HUSF = 0x00;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1222 pOverlay->IntBit = 0x05;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1223 pOverlay->wHPre = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1224 } else if (dstW > srcW) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1225 dstW += 2;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1226 pOverlay->HUSF = (srcW << 16) / dstW;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1227 pOverlay->IntBit = 0x04;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1228 pOverlay->wHPre = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1229 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1230 int tmpW = dstW;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1231
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1232 /* TW: It seems, the hardware can't scale below factor .125 (=1/8) if the
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1233 pitch isn't a multiple of 256.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1234 TODO: Test this on the 310/325 series!
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1235 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1236 if ((srcPitch % 256) || (srcPitch < 256)) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1237 if (((dstW * 1000) / srcW) < 125)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1238 dstW = tmpW = ((srcW * 125) / 1000) + 1;
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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1241 i = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1242 pOverlay->IntBit = 0x01;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1243 while (srcW >= tmpW) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1244 tmpW <<= 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1245 i++;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1246 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1247 pOverlay->wHPre = (uint8_t) (i - 1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1248 dstW <<= (i - 1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1249 if ((srcW % dstW))
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1250 pOverlay->HUSF = ((srcW - dstW) << 16) / dstW;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1251 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1252 pOverlay->HUSF = 0x00;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1253 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1254
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1255 if (dstH < OVERLAY_MIN_HEIGHT)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1256 dstH = OVERLAY_MIN_HEIGHT;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1257 if (dstH == srcH) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1258 pOverlay->VUSF = 0x00;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1259 pOverlay->IntBit |= 0x0A;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1260 } else if (dstH > srcH) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1261 dstH += 0x02;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1262 pOverlay->VUSF = (srcH << 16) / dstH;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1263 pOverlay->IntBit |= 0x08;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1264 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1265 uint32_t realI;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1266
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1267 i = realI = srcH / dstH;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1268 pOverlay->IntBit |= 0x02;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1269
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1270 if (i < 2) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1271 pOverlay->VUSF = ((srcH - dstH) << 16) / dstH;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1272 /* TW: Needed for LCD-scaling modes */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1273 if ((flag) && (mult = (srcH / origdstH)) >= 2)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1274 pOverlay->pitch /= mult;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1275 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1276 if (((srcPitch * i) >> 2) > 0xFFF) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1277 i = (0xFFF * 2 / srcPitch);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1278 pOverlay->VUSF = 0xFFFF;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1279 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1280 dstH = i * dstH;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1281 if (srcH % dstH)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1282 pOverlay->VUSF = ((srcH - dstH) << 16) / dstH;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1283 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1284 pOverlay->VUSF = 0x00;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1285 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1286 /* set video frame buffer offset */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1287 pOverlay->pitch = (uint16_t) (srcPitch * i);
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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1292 static void set_line_buf_size(SISOverlayPtr pOverlay)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1293 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1294 uint8_t preHIDF;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1295 uint32_t i;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1296 uint32_t line = pOverlay->srcW;
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 if ((pOverlay->pixelFormat == IMGFMT_YV12) ||
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1299 (pOverlay->pixelFormat == IMGFMT_I420)) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1300 preHIDF = pOverlay->wHPre & 0x07;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1301 switch (preHIDF) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1302 case 3:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1303 if ((line & 0xffffff00) == line)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1304 i = (line >> 8);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1305 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1306 i = (line >> 8) + 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1307 pOverlay->lineBufSize = (uint8_t) (i * 32 - 1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1308 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1309 case 4:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1310 if ((line & 0xfffffe00) == line)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1311 i = (line >> 9);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1312 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1313 i = (line >> 9) + 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1314 pOverlay->lineBufSize = (uint8_t) (i * 64 - 1);
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 5:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1317 if ((line & 0xfffffc00) == line)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1318 i = (line >> 10);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1319 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1320 i = (line >> 10) + 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1321 pOverlay->lineBufSize = (uint8_t) (i * 128 - 1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1322 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1323 case 6:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1324 if ((line & 0xfffff800) == line)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1325 i = (line >> 11);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1326 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1327 i = (line >> 11) + 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1328 pOverlay->lineBufSize = (uint8_t) (i * 256 - 1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1329 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1330 default:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1331 if ((line & 0xffffff80) == line)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1332 i = (line >> 7);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1333 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1334 i = (line >> 7) + 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1335 pOverlay->lineBufSize = (uint8_t) (i * 16 - 1);
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 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1338 } else { /* YUV2, UYVY */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1339 if ((line & 0xffffff8) == line)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1340 i = (line >> 3);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1341 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1342 i = (line >> 3) + 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1343 pOverlay->lineBufSize = (uint8_t) (i - 1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1344 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1345 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1346
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1347 static void merge_line_buf(int enable)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1348 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1349 if (enable) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1350 switch (sis_displaymode) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1351 case DISPMODE_SINGLE1:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1352 if (sis_has_two_overlays) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1353 /* dual line merge */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1354 setvideoregmask(Index_VI_Control_Misc2, 0x10, 0x11);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1355 setvideoregmask(Index_VI_Control_Misc1, 0x00, 0x04);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1356 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1357 setvideoregmask(Index_VI_Control_Misc2, 0x10, 0x11);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1358 setvideoregmask(Index_VI_Control_Misc1, 0x00, 0x04);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1359 }
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 DISPMODE_SINGLE2:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1362 if (sis_has_two_overlays) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1363 /* line merge */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1364 setvideoregmask(Index_VI_Control_Misc2, 0x01, 0x11);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1365 setvideoregmask(Index_VI_Control_Misc1, 0x04, 0x04);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1366 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1367 setvideoregmask(Index_VI_Control_Misc2, 0x10, 0x11);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1368 setvideoregmask(Index_VI_Control_Misc1, 0x00, 0x04);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1369 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1370 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1371 case DISPMODE_MIRROR:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1372 default:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1373 /* line merge */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1374 setvideoregmask(Index_VI_Control_Misc2, 0x00, 0x11);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1375 setvideoregmask(Index_VI_Control_Misc1, 0x04, 0x04);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1376 if (sis_has_two_overlays) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1377 /* line merge */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1378 setvideoregmask(Index_VI_Control_Misc2, 0x01, 0x11);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1379 setvideoregmask(Index_VI_Control_Misc1, 0x04, 0x04);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1380 }
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 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1383 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1384 switch (sis_displaymode) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1385 case DISPMODE_SINGLE1:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1386 setvideoregmask(Index_VI_Control_Misc2, 0x00, 0x11);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1387 setvideoregmask(Index_VI_Control_Misc1, 0x00, 0x04);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1388 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1389 case DISPMODE_SINGLE2:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1390 if (sis_has_two_overlays) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1391 setvideoregmask(Index_VI_Control_Misc2, 0x01, 0x11);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1392 setvideoregmask(Index_VI_Control_Misc1, 0x00, 0x04);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1393 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1394 setvideoregmask(Index_VI_Control_Misc2, 0x00, 0x11);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1395 setvideoregmask(Index_VI_Control_Misc1, 0x00, 0x04);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1396 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1397 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1398 case DISPMODE_MIRROR:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1399 default:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1400 setvideoregmask(Index_VI_Control_Misc2, 0x00, 0x11);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1401 setvideoregmask(Index_VI_Control_Misc1, 0x00, 0x04);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1402 if (sis_has_two_overlays) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1403 setvideoregmask(Index_VI_Control_Misc2, 0x01, 0x11);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1404 setvideoregmask(Index_VI_Control_Misc1, 0x00, 0x04);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1405 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1406 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1407 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1408 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1409 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1410
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1411
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1412 static void set_format(SISOverlayPtr pOverlay)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1413 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1414 uint8_t fmt;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1415
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1416 switch (pOverlay->pixelFormat) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1417 case IMGFMT_YV12:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1418 case IMGFMT_I420:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1419 fmt = 0x0c;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1420 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1421 case IMGFMT_YUY2:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1422 fmt = 0x28;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1423 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1424 case IMGFMT_UYVY:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1425 fmt = 0x08;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1426 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1427 case IMGFMT_RGB15: /* D[5:4] : 00 RGB555, 01 RGB 565 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1428 fmt = 0x00;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1429 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1430 case IMGFMT_RGB16:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1431 fmt = 0x10;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1432 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1433 default:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1434 fmt = 0x00;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1435 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1436 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1437 setvideoregmask(Index_VI_Control_Misc0, fmt, 0x7c);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1438 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1439
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1440 static void set_colorkey(void)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1441 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1442 uint8_t r, g, b;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1443
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1444 b = (uint8_t) sis_grkey.ckey.blue;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1445 g = (uint8_t) sis_grkey.ckey.green;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1446 r = (uint8_t) sis_grkey.ckey.red;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1447
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1448 /* set color key mode */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1449 setvideoregmask(Index_VI_Key_Overlay_OP,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1450 sis_grkey.ckey.op == CKEY_TRUE ?
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1451 VI_ROP_DestKey : VI_ROP_Always, 0x0F);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1452
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1453 /* set colorkey values */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1454 setvideoreg(Index_VI_Overlay_ColorKey_Blue_Min, (uint8_t) b);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1455 setvideoreg(Index_VI_Overlay_ColorKey_Green_Min, (uint8_t) g);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1456 setvideoreg(Index_VI_Overlay_ColorKey_Red_Min, (uint8_t) r);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1457
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1458 setvideoreg(Index_VI_Overlay_ColorKey_Blue_Max, (uint8_t) b);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1459 setvideoreg(Index_VI_Overlay_ColorKey_Green_Max, (uint8_t) g);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1460 setvideoreg(Index_VI_Overlay_ColorKey_Red_Max, (uint8_t) r);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1461 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1462
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1463 static void set_brightness(uint8_t brightness)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1464 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1465 setvideoreg(Index_VI_Brightness, brightness);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1466 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1467
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1468 static void set_contrast(uint8_t contrast)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1469 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1470 setvideoregmask(Index_VI_Contrast_Enh_Ctrl, contrast, 0x07);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1471 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1472
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1473 /* Next 3 functions are 310/325 series only */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1474
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1475 static void set_saturation(char saturation)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1476 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1477 uint8_t temp = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1478
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1479 if (saturation < 0) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1480 temp |= 0x88;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1481 saturation = -saturation;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1482 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1483 temp |= (saturation & 0x07);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1484 temp |= ((saturation & 0x07) << 4);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1485
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1486 setvideoreg(Index_VI_Saturation, temp);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1487 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1488
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1489 static void set_hue(uint8_t hue)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1490 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1491 setvideoreg(Index_VI_Hue, (hue & 0x08) ? (hue ^ 0x07) : hue);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1492 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1493
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
1494 VDXDriver sis_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
1495 "sis",
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
1496 NULL,
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28307
diff changeset
1497
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
1498 .probe = sis_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
1499 .get_caps = sis_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
1500 .query_fourcc = sis_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
1501 .init = sis_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
1502 .destroy = sis_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
1503 .config_playback = sis_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
1504 .playback_on = sis_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
1505 .playback_off = sis_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
1506 .frame_sel = sis_frame_select,
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1507 .get_eq = sis_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
1508 .set_eq = sis_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
1509 .get_gkey = sis_get_gkeys,
77def5093daf switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents: 22850
diff changeset
1510 .set_gkey = sis_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
1511 };